diff --git a/blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp b/blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp index 5bd4fd12..7bf19a28 100644 --- a/blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp +++ b/blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp @@ -2143,6 +2143,36 @@ std::string read_raw_string(const ParsedBlend &blend, return std::string(data, strnlen(data, available)); } +std::optional asset_metadata_from_id(const ParsedBlend &blend, const ElementRef &element) +{ + const std::optional id = embedded_element(*blend.sdna, element, "id"); + if (!id) return std::nullopt; + const std::optional asset_pointer = read_pointer(*blend.sdna, *id, "asset_data"); + if (!asset_pointer || *asset_pointer == 0) return std::nullopt; + const std::optional metadata = element_for_pointer(blend, *asset_pointer); + if (!metadata) return std::nullopt; + + auto dynamic_string = [&](const char *member) { + const std::optional pointer = read_pointer(*blend.sdna, *metadata, member); + return pointer ? read_raw_string(blend, *pointer, 4096) : std::string(); + }; + json tags = json::array(); + for (const ElementRef &tag : linked_list_elements(blend, *metadata, "tags")) { + const std::string name = read_string(*blend.sdna, tag, "name"); + if (!name.empty()) tags.push_back(name); + } + return json{{"marked", true}, + {"author", dynamic_string("author")}, + {"description", dynamic_string("description")}, + {"copyright", dynamic_string("copyright")}, + {"license", dynamic_string("license")}, + {"catalogSimpleName", read_string(*blend.sdna, *metadata, "catalog_simple_name")}, + {"activeTag", read_integer(*blend.sdna, *metadata, "active_tag").value_or(0)}, + {"preferredImportMethod", + read_integer(*blend.sdna, *metadata, "preferred_import_method").value_or(0)}, + {"tags", std::move(tags)}}; +} + std::optional script_source_from_record(const ParsedBlend &blend, const ElementRef &element, const IdRecord &record) @@ -3572,11 +3602,14 @@ json scene_ir_from_blend(const ParsedBlend &blend, {"selectable", (visibility_flags & 2) == 0}, {"localMatrix", matrix}, {"worldMatrix", matrix}, - {"transform", + {"transform", {{"translation", float_array_or(location, {0.0f, 0.0f, 0.0f})}, {"rotationEuler", float_array_or(rotation, {0.0f, 0.0f, 0.0f})}, {"scale", float_array_or(scale, {1.0f, 1.0f, 1.0f})}, {"rotationMode", read_integer(*blend.sdna, element, "rotmode").value_or(1)}}}}; + if (const std::optional asset_data = asset_metadata_from_id(blend, element)) { + node["assetData"] = *asset_data; + } json constraints = json::array(); for (const ElementRef &constraint : linked_list_elements(blend, element, "constraints")) { const int64_t constraint_type = read_integer(*blend.sdna, constraint, "type").value_or(0); diff --git a/docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json b/docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json new file mode 100644 index 00000000..c1afb0dd --- /dev/null +++ b/docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json @@ -0,0 +1,212 @@ +{ + "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} + } + ] +} diff --git a/docs/BLENDER_WASM_CORRECTIVE_EXECUTION_RUNBOOK.md b/docs/BLENDER_WASM_CORRECTIVE_EXECUTION_RUNBOOK.md new file mode 100644 index 00000000..d760744c --- /dev/null +++ b/docs/BLENDER_WASM_CORRECTIVE_EXECUTION_RUNBOOK.md @@ -0,0 +1,303 @@ +# Blender WASM 纠偏执行 Runbook + +状态:HISTORICAL_HANDOFF_COMPLETE;当前执行入口见 +[`BLENDER_WEB_EXECUTION_CONTROL_PLANE.md`](BLENDER_WEB_EXECUTION_CONTROL_PLANE.md) +入口方案:[`BLENDER_WASM_CORRECTIVE_MIGRATION_PLAN.md`](BLENDER_WASM_CORRECTIVE_MIGRATION_PLAN.md) +机器清单:[`BLENDER_WASM_CORRECTIVE_TASK_PLAN.json`](BLENDER_WASM_CORRECTIVE_TASK_PLAN.json) +能力模板:[`BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json`](BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json) + +本 runbook 记录 C0-C6 的一次性纠偏过程,不应从 C0-001 重启。纠偏计划的 +`reservedSuccessor` 只是旧队列的历史候选值,不是可领取的任务指针。 + +## 1. 启动原则 + +- 纠偏任务已经完成并进入历史交接;当前 legacy queue 由 `docs/EXECUTION_QUEUE.md` + 和 parent manifest 指向 `M16-GAP-00282`。不得从旧 C6-003 checkpoint 猜测新的 + legacy task。 +- C0-C6 是独立的纠偏计划,不直接写入旧 `next-task-plan.json`。 +- C0 只允许只读审计和新增纠偏证据;不重写 parent manifest、不删除旧报告。 +- 只有 G0-G4 全部通过后,C6-003 才能申请修改旧队列。 +- 浏览器测试只用 Chromium;不要运行 Firefox 或 WebKit。 +- 长命令输出写入纠偏 evidence 目录,交互消息只报告退出码、短尾和 hash。 + +受保护的旧输入是 `docs/EXECUTION_QUEUE.md`、parent manifest/status、completion registry、 +`next-task-plan.json`、`task-catalog.jsonl` 和 `task-index.json`。每个 C task 开始前后都要 +比较它们的 SHA-256;失败时保留旧文件并把失败记录放入该 C task 的 evidence 目录。 + +## 2. 每个任务的固定生命周期 + +```text +READ -> PREFLIGHT -> IMPLEMENT -> FOCUSED TEST + -> NEGATIVE TEST -> SAVE/REOPEN -> HASH + -> TASK REPORT -> GATE -> HANDOFF +``` + +任务状态只有: + +- `planned`:依赖未满足; +- `in_progress`:正在执行或存在可恢复失败; +- `blocked`:同一个外部阻塞连续三次确认; +- `done`:所有 focused、negative、persistence、hash、governance gate 通过。 + +`CANCELLED`、`UNSUPPORTED`、`EXTERNAL_REQUIRED` 只能作为结果状态,不能直接作为 task +状态或正向 parity 证据。 + +## 3. 通用 preflight + +在每个 C task 开始前运行: + +```bash +node tools/web/print-task-context.mjs +node tools/web/check-task-context.mjs +npm --prefix web run test:task-context +npm --prefix web run test:context-governance +git diff --check +node tools/web/check-corrective-plan.mjs +``` + +C task 不得借用旧 task 的 parent pointer;它的 parent 必须在 task card 或 corrective +task plan 中显式声明。命令失败时保持 `planned`/`in_progress`,不要运行写队列命令。 + +所有状态写入遵循以下顺序:先写报告和哈希清单,再写 staged candidate,最后由 gate +审核决定是否进入下一阶段。不得用 `sed`、编辑器或手工 JSON 修改 `nextTask`、catalog +offset、completion 状态或 parent evidence。 + +## 4. C0 启动顺序 + +### C0-001 freeze_and_snapshot + +目的:建立不会被后续生成器覆盖的只读基线。 + +输入: + +- `docs/EXECUTION_QUEUE.md` +- 当前 task context、00273 parent manifest/status +- `tests/golden/M15-03A/completed-gap-tasks.json` +- `tests/golden/M15-03A/task-catalog.jsonl` +- `tests/golden/M15-03A/task-index.json` +- `tests/golden/M15-03A/next-task-plan.json`(只能由脚本提取摘要,禁止复制全文) + +输出目录:`tests/golden/corrective/C0-001/` + +建议命令: + +```bash +mkdir -p tests/golden/corrective/C0-001 +node tools/web/print-task-context.mjs > tests/golden/corrective/C0-001/print-task-context.log +node tools/web/check-task-context.mjs > tests/golden/corrective/C0-001/check-task-context.log +git status --short > tests/golden/corrective/C0-001/git-status.log +sha256sum \ + docs/EXECUTION_QUEUE.md \ + tests/golden/M16-GAP-00273/manifest.json \ + docs/status/M16-GAP-00273.md \ + tests/golden/M15-03A/completed-gap-tasks.json \ + tests/golden/M15-03A/task-catalog.jsonl \ + tests/golden/M15-03A/task-index.json \ + tests/golden/M15-03A/next-task-plan.json \ + > tests/golden/corrective/C0-001/source-hashes.txt +node tools/web/capture-corrective-baseline.mjs \ + --task M16-GAP-00274 \ + --output tests/golden/corrective/C0-001/baseline.json +node tools/web/capture-corrective-baseline.mjs \ + --task M16-GAP-00274 \ + --output tests/golden/corrective/C0-001/baseline-second.json +cmp tests/golden/corrective/C0-001/baseline.json \ + tests/golden/corrective/C0-001/baseline-second.json +node tools/web/check-corrective-baseline.mjs \ + --baseline tests/golden/corrective/C0-001/baseline.json \ + --source-hashes tests/golden/corrective/C0-001/source-hashes.txt +``` + +报告必须记录:active task、parent nextTask、catalog active、plan firstTask、completion +count、未提交文件、每个源文件 hash。不得在此任务中修改这些源文件。 + +出口:基线报告可重复生成,所有旧证据路径存在,旧 parent 证据 hash 未变化; +`node tools/web/check-corrective-plan.mjs` 和 `git diff --check` 必须退出 0。 + +### C0-002 reconcile_generated_state + +目的:确定唯一 completion source,并在 staging 中恢复 plan/index/catalog 的可重复生成。 + +实现边界: + +- 新增一个只处理状态的 repository tool,不能直接接受 task number 猜测; +- 输入必须是 manifest/status/task-context 三者一致的 task 集合; +- 生成顺序固定为 `completion registry -> next-task plan -> task index -> task card`; +- 每一步写临时文件,hash 校验通过后原子替换; +- 失败时保留旧文件,不推进 queue;`--write` 只能写入 + `tests/golden/corrective/C0-002/staged/`,不得覆盖正式 queue 生成物。 + +必须拒绝: + +- manifest `done` 但 status/context 缺失; +- parent manifest nextTask 不匹配; +- artifact hash 漂移; +- 同时存在两个 active task; +- 手工 offset 或 nextTask 参数。 + +出口:连续两次从同一输入生成相同的 `inputDigest`,并输出 issue summary、registry +comparison 和 repair plan。只有无阻塞时 write 才允许退出 0;发现历史 drift 时, +dry-run/write 必须以相同 digest 拒绝写入并保持 blocked: + +```bash +node tools/web/check-blender-next-task-plan.mjs +node tools/web/check-task-index.mjs +npm --prefix web run test:task-context +npm --prefix web run test:context-governance +node tools/web/check-context-governance.mjs +git diff --check +``` + +#### C0-002 阻塞恢复顺序 + +先读 `dry-run.json` 的 `inputDigest`、`issueSummary`、`registryComparison` 和 +`repairPlan`,不要从大量原始 issue 中手工挑选任务。按以下顺序恢复: + +1. `PLAN_NONDETERMINISTIC`:在临时路径运行生成器,比较 canonical bytes;定位 source + hash 或生成器输入差异,不能直接覆盖正式 plan。 +2. `ARTIFACT_HASH_DRIFT`:按 `samplePaths` 分组,寻找不可变 artifact snapshot;找不到 + snapshot 就保持该 task `BLOCKED`,禁止重新签历史 manifest hash。 +3. `MISSING_TASK_CONTEXT`:仅当 manifest parent pointer 已独立证明有效时,使用 + `check-task-context --task --write` 写入对应 corrective evidence;parent pointer + 失效时不得猜测 task number。 +4. 重新运行 dry-run/write,要求 `inputDigest` 相同;`writeOutcome=NO_FILES_WRITTEN` 时 + 不创建 staged candidate。 + +只有 issue summary 为空、registry comparison 无未解释差异、plan determinism 通过且 +`queueMutation=false` 时,C0-002 才能进入 `done`。修复动作始终写入 corrective evidence, +不回写旧 queue、manifest、status、catalog 或 index。 + +### C0-003 classify_legacy_273 + +前置:C0-002 必须 `done` 且 G0 clean;历史 hash/context drift 未解决时保持 `blocked`, +不得并行读取不可信的 generated state。 + +目的:把旧任务从“完成数量”转换为可审计的能力覆盖。 + +输出:`tests/golden/corrective/C0-003/legacy-gap-classification.json` + +每条记录至少包含: + +```json +{ + "task": "M16-GAP-00274", + "gapId": "operator:asset.catalogs_save", + "evidenceLevel": "L1", + "completionClass": "METADATA_ONLY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": false, + "wasmChanged": false, + "saveReopen": "EXACT", + "reason": "WASM reads Library metadata; no equivalent operator command", + "candidateCapabilityId": "CAP-ASSET-CATALOG-MUTATION", + "mappingState": "CANDIDATE", + "evidenceRefs": ["tests/golden/M16-GAP-00274/manifest.json"], + "sourceHashes": [{"path": "tests/golden/M16-GAP-00274/manifest.json", "sha256": "..."}] +} +``` + +分类只能从 manifest、report、source hash 和 focused test 证据推导,不得凭 task 名字推断。 + +出口:273 条记录都有 level、positive/negative、production hash 和回归入口;报告明确 +哪些可以合并为 capability cluster。 + +## 5. C1-C4 开工顺序 + +C0-002 和 C0-003 未通过前,不开始 C1。 + +1. `C1-001`:写 parity level 和 completion policy;只改 schema/docs/test。 +2. `C1-002`:写 command/result/context schema 和错误码;加 schema unit tests。 +3. `C1-003`:实现 shared desktop/WASM case runner;禁止新增 per-gap branch。 +4. `C2-001`:command registry、validation、authorization。 +5. `C2-002`:Main mutation 原子性和失败回滚。 +6. `C2-003`:undo/redo、dirty、save/reopen invariant。 +7. `C3-001`:Asset Catalog resource provider 和 active library context。 +8. `C3-002`:Asset Catalog 正向 command;必须产生 WASM Main mutation。 +9. `C3-003`:Asset Catalog Chromium pilot,覆盖至少 5 个旧 cases。 +10. `C4-001`、`C4-002`:Modifier、Mesh 正向 pilot。 +11. `C4-003`:统一 negative matrix,确认错误不会产生部分 mutation。 + +## 6. 每个 production pilot 的报告模板 + +报告必须同时给出: + +- desktop fixture/report/hash; +- WASM command request/result; +- before/after snapshot 和 revision; +- Main mutation 类型和 dirty 状态; +- save/reopen 对比; +- undo/redo 对比; +- malformed、unsupported、resource missing、revision conflict; +- production files changed 及 SHA-256; +- Chromium E2E URL/test id/exit code; +- 未覆盖范围和下一步。 + +不接受只包含 `operatorStatus`、`libraryStatus` 或 `saveReopen` 的 pilot 报告。 + +每个报告同时写入一个 machine-readable `result.json`,至少包含: + +```json +{ + "schemaVersion": 1, + "capabilityId": "CAP-...", + "lifecycleStatus": "in_progress", + "evidenceStatus": "PASS", + "parityLevel": "L2", + "desktop": {"status": "FINISHED", "mainMutation": "CHANGED"}, + "wasm": {"status": "FINISHED", "mainMutation": "CHANGED"}, + "revision": {"before": 12, "after": 13, "failureAfter": 13}, + "artifacts": [{"path": "...", "originalSha256": "...", "observedSha256": "...", "provenanceState": "VERIFIED"}], + "inputDigest": "...", + "legacyCoverage": [], + "queueMutation": false +} +``` + +`evidenceStatus=PASS` 只有在正向、负向、持久化、哈希和治理命令全部退出 0 时允许; +`CANCELLED`、`UNSUPPORTED`、`EXTERNAL_REQUIRED` 只能出现在明确的负例记录中。 + +## 7. C5 规模化迁移 + +只有 G3、G4 通过后才执行: + +1. 从 C0-003 classification 生成 capability clusters; +2. 每个 cluster 选 1 个正向、1 个资源缺失、1 个坏输入、1 个 save/reopen case; +3. 用数据驱动 runner 运行 cluster; +4. 将同一 production primitive 关闭的旧 gaps 汇总到 capability manifest; +5. 只有需要新 reader/API/Main writer 的 cluster 才创建 implementation task; +6. 旧 M16-GAP manifest 保持 immutable,只新增引用和 coverage 状态。 + +规模化期间,如果一个 production change 不能关闭至少 5 个相关 cases,暂停并复审聚类。 + +## 8. 最终 queue reactivation + +C6-003 才能写旧队列。它必须: + +- 由生成器从 capability plan 生成新的 active task; +- 保留旧 M16-GAP 证据和 parent manifest; +- 写入新的 task card、manifest/status/context; +- 运行完整 post-handoff gates; +- 记录旧 gap 到新 capability task 的映射; +- 以 dry-run diff 供 review,确认后才原子替换 queue。 + +在此之前,任何“继续按 nextTask 执行”的调用都必须停在 C0 checkpoint,不能直接进入 00275。 + +复活前必须产出 `queue-reactivation-dry-run.json`,其中列出:旧 parent manifest hash、 +新 capability task IDs、每个 legacy gap 的 primary mapping、被保留的负例、预期 queue +diff 和回滚路径。dry-run 与 write 的 bytes 不一致、primary mapping 不唯一或任一旧 +parent hash 漂移时,C6-003 必须保持 `in_progress`。 + +## 9. 日常报告格式 + +每天只报告: + +```text +phase= task= status= +focused= negative= persistence= hash= +gate= productionFiles= positiveWasmCases= +blockedBy= next= +``` + +长日志放在 `tests/golden/corrective//`。不在聊天中粘贴完整 plan、历史 status 或 +Blender 编译日志。 diff --git a/docs/BLENDER_WASM_CORRECTIVE_MIGRATION_PLAN.md b/docs/BLENDER_WASM_CORRECTIVE_MIGRATION_PLAN.md new file mode 100644 index 00000000..1e6a4f33 --- /dev/null +++ b/docs/BLENDER_WASM_CORRECTIVE_MIGRATION_PLAN.md @@ -0,0 +1,434 @@ +# Blender WASM 纠偏实施方案 + +状态:HISTORICAL_PROPOSAL;已验证内容已并入当前执行控制面,不再单独驱动队列 +版本:2026-08-23 +适用范围:Blender 5.2 Web Engine、Main/Blend reader、WASM command layer、Chromium 验收 +迁移模式:`MIGRATION_SHADOW_ONLY`;C6-003 的写入结果只作为历史 checkpoint, +当前 queue 仍以 `docs/EXECUTION_QUEUE.md` 和 parent manifest 为准 + +## 0. 决策摘要 + +当前项目不是底层技术完全错误,而是执行单位和完成定义错误。 + +旧路线把每个 Blender gap、尤其是每个 operator,拆成一个独立任务;桌面端用 +`CANCELLED` 边界完成验收,WASM 只验证 snapshot/read/save/reopen。这条路线可以建立 +文件格式和数据读取清单,但不能证明 Blender operator 或编辑器能力已经移植。 + +从现在开始采用两层工作模型: + +1. **能力主线**:按用户可见 workflow 和共享生产原语实现真实 WASM 能力。 +2. **覆盖支线**:保留旧 M16-GAP 清单,作为参数化回归矩阵,不再把每个 gap 当成一次独立生产实现。 + +纠偏阶段已经完成基线、共享 runner、Main 事务、Asset Catalog/Modifier/Mesh +pilot 和 Chromium workflow gate。当前 legacy queue 为 `M16-GAP-00282`;C6-003 +的 `M16-GAP-00277` 是历史 reactivation checkpoint,后续任务沿 parent manifest +链继续,不能把旧 checkpoint 改写成当前状态。 + +## 1. 现状和问题边界 + +### 1.1 已有资产 + +- `web_engine_apply_command()` 已有 revision 检查、history、Main authority 和若干 + 正向命令(frame、object visibility、modifier、decimate)。这是后续 command layer 的基础。 +- `web_engine_open_blend()`、snapshot、save/reopen、undo/redo 和 malformed input + 已有较完整的 smoke/roundtrip 入口。 +- Blender desktop 可作为行为 oracle;Chromium 是唯一允许的浏览器验收运行时。 +- 任务 context、manifest、SHA-256 和失败不推进队列的治理工具已经存在。 + +### 1.2 已确认的偏差 + +- 当前 operator gap 的 WASM 验收经常只读取数据块元数据,不执行等价 operator。 +- `poll=false`、`CANCELLED` 被当作 Local Exact 成功;这只能证明负向边界或安全取消。 +- `M16-GAP-00264` 到 `00274` 的 reader/WASM 构件 hash 不变,主要变化是 fixture、checker + 和报告。 +- `tools/web/check-generated-gap.mjs` 已成为约 8,500 行的 task 分支单体,无法经济地承载 + 6900 个独立 gap。 +- `completed-gap-tasks.json`、`task-catalog.jsonl`、`next-task-plan.json` 曾出现互相不一致, + 说明交接流程不是事务性的。 + +### 1.3 不是问题的部分 + +fixture 最小化、桌面 oracle、save/reopen、malformed negative、Chromium-only、hash +manifest 和 context budget 都应保留。这些是质量基础,不应删除;需要改变的是它们服务的 +完成定义和任务分解。 + +## 2. 新的完成定义 + +每个能力必须标记一个明确 parity level。没有 level 的任务不得进入 active 队列。 + +| Level | 含义 | 必须证明 | +| --- | --- | --- | +| L0 | Blend binary 可安全读取 | header/SDNA/坏输入/资源边界 | +| L1 | Main 数据可观察 | snapshot 字段、身份、revision、依赖 | +| L2 | WASM Main 可正向修改 | command 成功、Main mutation、snapshot/delta | +| L3 | 修改可持久化 | save/reopen、dirty、资源恢复 | +| L4 | 操作语义等价 | desktop 正向结果、取消/错误、context 和 operator result | +| L5 | 用户 workflow 闭环 | UI/command、undo/redo、连续操作、Chromium E2E | + +规则: + +- 只有 L2-L5 才能计入“功能移植完成”。 +- L0-L1 只能计入“读取/兼容性覆盖”。 +- desktop `CANCELLED` 不能替代 WASM 正向行为。 +- WASM 只读 snapshot 不能替代 command execution。 +- 一个 task 必须写明 positive case、negative case、save/reopen case 和 level。 +- 连续三个任务没有 production reader/API/engine 变化时,自动触发路线复审。 + +## 3. 目标架构 + +目标数据流: + +```text +Chromium UI / workflow + | + v +Typed Command JSON + baseRevision + context + | + v +web_engine_apply_command() + | + +--> command registry / validation / authorization + | + +--> authoritative Main mutation + | | + | +--> snapshot / delta / diagnostics + | +--> undo / redo history + | +--> dirty + save/reopen + | + +--> resource provider (OPFS/virtual external resources) +``` + +### 3.1 Command contract + +请求统一为: + +```json +{ + "schemaVersion": 1, + "commandId": "uuid-or-test-id", + "type": "setModifierEnabled", + "baseRevision": 12, + "context": {"activeObjectId": "object:Cube", "editor": "VIEW_3D"}, + "payload": {} +} +``` + +结果统一为: + +```json +{ + "schemaVersion": 1, + "commandId": "uuid-or-test-id", + "status": "FINISHED", + "revision": 13, + "mainMutation": "CHANGED", + "delta": {}, + "diagnostics": [] +} +``` + +允许的 status 至少包括 `FINISHED`、`CANCELLED`、`UNSUPPORTED`、`INVALID_ARGUMENT`、 +`REVISION_CONFLICT`、`RESOURCE_REQUIRED`。结果必须可被 desktop checker 和 Chromium +runner 同时消费。 + +### 3.2 Context contract + +把当前 operator 依赖的 context 显式化:active Main、active object、editor、area、region、 +asset library、selection 和 file path。没有 context 时必须返回可区分的 `CANCELLED` 或 +`UNSUPPORTED`,而不是静默通过。 + +### 3.3 Resource contract + +外部 Library、asset catalog、packed asset、OPFS 文件和虚拟路径必须通过同一个 resource +provider 解析。`EXTERNAL_REQUIRED` 是资源状态,不是 operator 成功状态。 + +## 4. 阶段实施方案 + +### Phase 0:止损和可审计基线(P0,1-2 个工程日) + +目标:停止错误的线性扩张,建立可信的起点。 + +任务: + +- 历史纠偏阶段冻结 `M16-GAP-00274`,不领取 00275;该阶段已结束,当前生产 + 指针由 WBV2 capability queue 管理,M16 仅保留 coverage checkpoint。 +- 保留现有 fixture、报告和 parent manifest,不重写历史证据。 +- 校验 273 个已记录任务的 manifest/status/context/hash。 +- 解决 completion registry、task catalog、next-task plan、task index 的单一事实来源问题。 +- 给旧任务添加 `evidenceLevel` 和 `completionClass`,区分 L0/L1、negative、L2+。 +- 输出一份 capability inventory,列出已有真实 production mutation 与仅 metadata 的任务。 + +出口条件: + +- 所有生成文件可以从唯一 source 重建; +- 当前 active task、parent `nextTask`、catalog active 记录一致; +- 旧任务不再把 negative-only 证据计入功能完成; +- `check-blender-next-task-plan`、`check-task-index`、context gates 全部通过。 + +### Phase 1:Parity contract 和测试基座(P1,2-3 个工程日) + +目标:让每个后续 task 都有可判定的“正向等价”定义。 + +任务: + +- 建立 declarative capability matrix:capability、level、desktop oracle、WASM command、 + persistence、negative、resource、owner。 +- 建立统一 command/result JSON schema 和错误码表。 +- 增加桌面与 WASM 共享的 result normalizer,禁止每个 task 自己解释 `CANCELLED`。 +- 建立 positive mutation、revision conflict、unsupported、resource missing 四类通用测试。 +- 将长 checker 拆成按能力族的 runner,task 只提供 case 数据。 + +出口条件: + +- 同一 case 可由 desktop runner 和 WASM runner 读取; +- 正向、取消、不支持、坏输入四种结果不可混淆; +- 一个测试原语能覆盖至少 5 个相同语义的 cases; +- 不新增硬编码 task 分支即可增加参数化 case。 + +### Phase 2:Command/Main authority 基础(P2,3-7 个工程日) + +目标:把已有的 `apply_command` 从少量命令扩展为可复用能力层。 + +任务: + +- 实现 command registry、schema validation、context validation、authorization。 +- 统一 revision、history capture、undo、redo、dirty 和 save 语义。 +- 补齐 Main writer 的错误回滚,确保 command 失败不产生部分 mutation。 +- 为每个 command 生成 snapshot/delta/diagnostics。 +- 为 native smoke stub 与真实 WASM Main authority 分别标记能力,不允许混用证据。 + +出口条件: + +- 至少 3 个 command 在 desktop/WASM 上产生相同正向结果; +- 每个 command 有成功、取消、坏参数、revision conflict、save/reopen 测试; +- 失败后 revision、Main 和 undo 栈都不漂移; +- Chromium E2E 能完成一次完整 command roundtrip。 + +### Phase 3:Asset Catalog 垂直 pilot(P3,3-5 个工程日) + +目标:用当前阻塞的 operator 家族验证路线是否真正纠正。 + +最小闭环: + +1. 打开带 Library/Asset Catalog 的 blend; +2. 在 WASM 中建立明确的 active asset library/context; +3. 创建或修改 catalog; +4. 观察 Main/Library 状态变化和 revision; +5. 保存 catalog 和 blend; +6. 重开后比较 catalog、Library、dirty、undo/redo; +7. 分别验证无 context、只读 Library、外部资源缺失和坏输入。 + +出口条件: + +- 至少一个 desktop 正向 `FINISHED` 案例; +- 至少一个 WASM 正向 command 案例; +- `CANCELLED` 仅出现在确实缺 context/资源/权限的负例; +- catalog mutation 有真实 production 代码变化和对应 Chromium E2E; +- 能关闭至少 5 个旧 asset-catalog gaps,而不是为每个 gap 添加 checker 分支。 + +### Phase 4:Modifier 和 Mesh 垂直 pilot(P4,3-5 个工程日) + +目标:验证路线不只适用于 Asset Catalog。 + +- Modifier:启用/禁用、viewport/render/edit visibility、依赖更新、保存重开、undo/redo。 +- Mesh:一个顶点/拓扑 mutation、几何 snapshot/delta、保存重开、错误回滚。 +- 每个 pilot 复用 Phase 2 的 command/result/runner,不创建 task 专用协议。 + +出口条件: + +- 每个 family 至少 2 个 L2/L3 workflow; +- 一个实现原语覆盖多个旧 gap; +- 生产 mutation、snapshot、delta、save/reopen 四者一致; +- pilot 失败时能明确归因到 parser、Main writer、command、resource 或 UI context。 + +### Phase 5:覆盖矩阵和规模化迁移(P5,pilot 通过后) + +目标:将 6900 gap 从“串行开发队列”降级为“覆盖数据”。 + +- 按 capability primitive 聚类旧 gaps; +- 每个 cluster 只保留代表性 positive/negative/save-reopen cases; +- 用参数化 fixture 和数据驱动 runner 生成覆盖报告; +- 只有需要独立 production change 的 cluster 才产生新 implementation task; +- 旧 `M16-GAP-*` manifest 保持不可变,新增 capability manifest 引用旧覆盖项; +- 将 `check-generated-gap.mjs` 拆为 `check-capability-*.mjs`,删除重复分支。 + +规模化出口条件: + +- 每个新增 production change 平均关闭至少 5 个相关 cases; +- 生成器、catalog、index、queue 可重复生成; +- 没有连续三个 evidence-only task; +- task 数、能力数、用户 workflow 数分开统计。 + +### Phase 6:发布门和长期维护(P6) + +- Chromium E2E:open/edit/undo/redo/save/reopen/resource recovery; +- 性能:大 blend 打开、snapshot、delta、save、memory、command latency; +- 安全:malformed blend、路径穿越、外部资源、命令权限、revision replay; +- 兼容性:Blender 5.2 fixture、未来 SDNA 变化和旧文件; +- 发布声明只能引用 L2-L5 证据,L0-L1 单独列为读取兼容性。 + +## 5. 新的阶段任务清单规则 + +纠偏任务使用 `C0-*` 到 `C6-*` 的 capability IDs,先存在于独立清单,pilot 通过后再由 +仓库生成器映射到正式 queue。不得直接把这些 ID 手工写入旧 `next-task-plan.json`。 + +每个任务必须包含: + +- `capabilityId`、`parityLevel`、`primaryBehavior`; +- production entrypoint 和预期代码变化; +- desktop oracle、WASM command、fixture; +- positive、negative、save/reopen、undo/redo; +- expected revision/Main mutation; +- dependencies、exit gates、rollback; +- artifact list 和 SHA-256 policy。 + +推荐执行顺序: + +```text +C0 governance -> C1 contract/test -> C2 command/Main + -> C3 Asset Catalog pilot + -> C4 Modifier/Mesh pilots + -> C5 coverage migration + -> C6 release gates +``` + +任何阶段 gate 失败都保持该阶段 `in_progress`,不推进旧 M16 queue。 + +## 5.1 旧 gap 到 capability 的迁移规则 + +迁移是一个 shadow mapping 过程,不是批量改写旧任务状态。旧 `M16-GAP-*` manifest、 +status、fixture、report、completion registry 和 parent pointer 都是不可变引用;新 +capability 只增加覆盖关系和新的证据。`docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json` +是字段模板,不是旧队列的第二个 active 指针。 + +### 映射状态 + +每条 legacy gap 必须有且只有一个 `primaryCapabilityId`,并可有零个或多个 +`coverageCapabilityIds`。映射状态只能取以下值: + +| 状态 | 含义 | 是否可计入新能力完成 | +| --- | --- | --- | +| `UNMAPPED` | 尚未找到稳定的共享原语 | 否 | +| `CANDIDATE` | 有行为相似性,但还没有正向生产证据 | 否 | +| `COVERED` | 新能力的正向/负向/持久化 case 已覆盖该 gap | 仅在 capability 自身达到 L2-L5 后 | +| `RETAINED_NEGATIVE` | 旧证据只证明取消、不支持、资源缺失或坏输入 | 否,保留为边界证据 | +| `DUPLICATE` | 与另一 gap 完全相同,保留 canonical gap 引用 | 否,不能重复计数 | +| `BLOCKED` | 证据、hash、资源或语义不完整 | 否 | + +### 迁移判定顺序 + +1. 读取旧 manifest/status/task-context 和所有 artifact hash;缺一项就写 `BLOCKED`。 +2. 读取 desktop positive/negative、WASM command/result/Main mutation、save/reopen 和 + revision 证据;只读 snapshot 不得升级到 L2。 +3. 按 `family + primaryBehavior + commandType + persistenceContract` 聚类,不能按 + task number 或 gap 字符串简单合并。 +4. 为每个 gap 选择一个 primary capability;无法唯一选择时保持 `CANDIDATE` 或 + `BLOCKED`,由 owner review 决定,不自动覆盖。 +5. capability 只有在 desktop 正向 `FINISHED`、WASM 正向 `FINISHED` 且 + `mainMutation=CHANGED` 后,才可把相关 gap 标记为 `COVERED`。 +6. 负例必须单独记录 expected status、revision delta 和 Main 不变断言; + `CANCELLED`、`UNSUPPORTED`、`EXTERNAL_REQUIRED` 永远不能成为正向完成理由。 +7. 生成 capability manifest 和 coverage report 到 staging;在 C6-003 前不替换旧 + plan/index/catalog/queue。 + +### 迁移记录契约 + +每条映射记录必须包含: + +```json +{ + "legacyTask": "M16-GAP-00274", + "gapId": "operator:asset.catalogs_save", + "primaryCapabilityId": "CAP-ASSET-CATALOG-MUTATION", + "coverageCapabilityIds": [], + "mappingState": "CANDIDATE", + "legacyCompletionPreserved": true, + "evidenceLevel": "L1", + "completionClass": "READ_COMPATIBILITY", + "evidenceRefs": ["tests/golden/M16-GAP-00274/manifest.json"], + "sourceHashes": [{"path": "...", "sha256": "..."}], + "review": {"owner": "WEB_ENGINE_AND_ASSET_WORKFLOW", "status": "OPEN"} +} +``` + +`legacyCompletionPreserved` 必须始终为 `true`;它表示旧记录仍可追溯,并不表示旧 task +是新的 feature parity。任何 capability manifest 的 `FEATURE_PARITY` 都必须引用至少 +一个 L2-L5 positive WASM result 和对应 Chromium/desktop 证据。 + +### 迁移门和回滚 + +- C5-001 只生成 cluster 和 primary mapping,不写旧生成物。 +- C5-002 只把 mapping 作为数据驱动 runner 的输入,不为单个 gap 增加协议分支。 +- C5-003 生成 coverage report、capability manifest 和 `queue-reactivation-dry-run.json`; + dry-run 必须展示旧 parent hash、预期 diff、被保留负例和回滚路径。 +- 只有 C6-003 在 G5 通过、dry-run bytes 与 write bytes 相同、所有旧 parent hash 未变且 + owner review 通过后,才允许原子写旧 queue。 +- 任一冲突、hash drift、primary mapping 不唯一或 capability 证据降级时,删除/隔离 + staged candidate,保留旧文件,任务回到 `in_progress`;不得手工推进 `nextTask`。 + +### 历史 hash drift 的修复协议 + +历史 artifact 的 hash drift 不等于可以重新签名。纠偏工具必须把每个 drift 记录为 +`originalSha256`、`observedSha256`、`path`、`affectedTasks` 和 `provenanceState`,并按 +以下顺序处理: + +1. 在 `tests/golden/corrective/rehydration//` 保存当前观察值和原 manifest 引用; +2. 从可信构件缓存或可复现 generator 恢复与 `originalSha256` 相同的 bytes; +3. 恢复不到原 bytes 时,将 task 标为 `BLOCKED_SOURCE_LOST`,不要更新旧 manifest; +4. 恢复成功时,只在 corrective evidence 中记录 `restoredArtifact`,再次运行完整 hash、 + parent pointer 和 plan determinism gate; +5. 只有所有依赖证据恢复且 review 通过,才允许生成新的 capability manifest 引用旧 gap。 + +`observedSha256` 只能用于诊断,永远不能成为旧 manifest 的新 hash。该协议避免一次 +工作树变更把数百条历史证据静默“修正”为看似完成。 + +## 6. 进度和决策指标 + +每周只报告以下指标: + +- L2-L5 完成的 capability 数; +- 正向 desktop/WASM workflow 数; +- 每个 production change 关闭的 cases 数; +- save/reopen、undo/redo、resource recovery 通过率; +- command conflict/rollback 通过率; +- queue/manifest/index determinism; +- 当前阻塞及其年龄。 + +禁止使用以下指标作为唯一进度: + +- 完成的 task 行数; +- 生成的 fixture 数; +- manifest 数; +- `CANCELLED` 或 `EXTERNAL_REQUIRED` 的数量。 + +## 7. 停线和回滚规则 + +立即停线条件: + +- desktop 通过但 WASM 没有等价正向 mutation; +- 三个连续 task 没有 production/API 变化; +- task catalog、completion registry、plan、index、queue 任一不一致; +- hash drift、revision drift、save/reopen drift; +- 测试只验证 snapshot 而没有验证 command/result; +- 为了推进队列而手工改 `nextTask`、offset 或 parent evidence。 + +回滚原则: + +- 不删除历史 manifest、fixture 或 report; +- 将证据-only 结果降级为 L0/L1 coverage; +- 保留 parent manifest 不变; +- 新 capability plan 失败时只回滚新增 command/fixture/runner,不回写旧证据; +- 队列只有在完整 handoff 和所有生成门通过后才更新。 + +## 8. 近期具体动作 + +当前最优先的 5 个动作: + +1. 冻结 00274,修复 generated task state 的单一事实来源。 +2. 生成 273 个旧任务的 evidence classification,不再把它们全部视为 feature parity。 +3. 落地 C1 command/result/context schema 和共享 runner。 +4. 用 Asset Catalog 做第一个正向 L2-L4 pilot;不接受只返回 `CANCELLED` 的结果。 +5. 只有 Asset Catalog、Modifier、Mesh 三个 pilot 全部通过后,才恢复规模化队列。 + +这份方案的完成标志不是“继续产生更多 gap 报告”,而是 WASM 能够对用户 workflow +执行可观察、可回滚、可保存的真实 Main mutation,并且旧 gap 清单能由这些共享能力自动覆盖。 diff --git a/docs/BLENDER_WASM_CORRECTIVE_TASK_PLAN.json b/docs/BLENDER_WASM_CORRECTIVE_TASK_PLAN.json new file mode 100644 index 00000000..ff64070e --- /dev/null +++ b/docs/BLENDER_WASM_CORRECTIVE_TASK_PLAN.json @@ -0,0 +1,111 @@ +{ + "schemaVersion": 2, + "planId": "BLENDER_WASM_CORRECTIVE_TASK_PLAN", + "status": "PROPOSED", + "created": "2026-08-23", + "queueMutation": "FORBIDDEN_UNTIL_PILOTS_PASS", + "queuePolicy": { + "mode": "READ_ONLY_UNTIL_C6_003", + "currentTask": "M16-GAP-00277", + "parentManifest": "tests/golden/M16-GAP-00276/manifest.json", + "parentNextTask": "M16-GAP-00277", + "reservedSuccessor": "M16-GAP-00278", + "protectedPaths": [ + "docs/EXECUTION_QUEUE.md", + "tests/golden/M15-03A/completed-gap-tasks.json", + "tests/golden/M15-03A/next-task-plan.json", + "tests/golden/M15-03A/task-catalog.jsonl", + "tests/golden/M15-03A/task-index.json", + "tests/golden/M16-GAP-00273/manifest.json", + "docs/status/M16-GAP-00273.md" + ], + "writeOnlyAt": "C6-003", + "requiredReview": "dry_run_diff_and_parent_hash_review" + }, + "executionRunbook": "docs/BLENDER_WASM_CORRECTIVE_EXECUTION_RUNBOOK.md", + "capabilityMatrixTemplate": "docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json", + "taskCardRoot": "docs/corrective/", + "currentCheckpoint": { + "task": "C6-003", + "status": "in_progress", + "reason": "owner review approved and queue reactivation write completed; post-handoff remains under C6-003", + "queueCurrentTask": "M16-GAP-00277", + "queueParentNextTask": "M16-GAP-00277", + "reservedSuccessor": "M16-GAP-00278" + }, + "taskContract": { + "requiredFields": [ + "id", + "phase", + "name", + "dependsOn", + "gate", + "outputs", + "writeScope", + "queueMutationAllowed" + ], + "cardWhenReady": "card", + "cardPolicy": "a compact card is required when a task becomes ready; future tasks remain plan-only until their dependencies pass", + "lifecycleStatuses": ["planned", "in_progress", "blocked", "done"], + "evidenceStatuses": ["PASS", "FAIL", "BLOCKED", "NOT_RUN"], + "writeScopes": ["evidence_only", "staged_generated_state", "production_pilot", "queue_reactivation"], + "failurePolicy": "preserve_previous_outputs_and_do_not_advance_old_queue" + }, + "completionLevels": [ + {"id": "L0", "name": "blend_read", "requires": ["safe binary read", "malformed rejection"]}, + {"id": "L1", "name": "main_observe", "requires": ["snapshot fields", "identity", "revision", "dependencies"]}, + {"id": "L2", "name": "wasm_mutation", "requires": ["positive command", "Main mutation", "snapshot or delta"]}, + {"id": "L3", "name": "persistent_mutation", "requires": ["save/reopen", "dirty state", "undo/redo"]}, + {"id": "L4", "name": "operator_semantics", "requires": ["desktop positive oracle", "WASM equivalent result", "context and errors"]}, + {"id": "L5", "name": "user_workflow", "requires": ["Chromium E2E", "continuous workflow", "resource recovery"]} + ], + "gates": [ + {"id": "G0", "name": "state_reconciliation", "blocks": ["all_work"], "checks": ["completion registry is authoritative", "plan is deterministic", "task index matches plan", "queue parent pointer matches"]}, + {"id": "G1", "name": "parity_contract", "blocks": ["production_pilots"], "checks": ["command schema", "result schema", "context schema", "positive and negative semantics"]}, + {"id": "G2", "name": "command_main_authority", "blocks": ["workflow_pilots"], "checks": ["revision conflict", "atomic rollback", "undo redo", "save dirty"]}, + {"id": "G3", "name": "asset_catalog_pilot", "blocks": ["scale_out"], "checks": ["desktop positive", "WASM positive", "resource provider", "save reopen", "five related cases"]}, + {"id": "G4", "name": "modifier_mesh_pilots", "blocks": ["legacy_gap_migration"], "checks": ["L2/L3 workflow per family", "shared primitive reuse", "delta parity"]}, + {"id": "G5", "name": "release", "blocks": ["release_statement"], "checks": ["Chromium E2E", "performance", "security", "deterministic artifacts"]} + ], + "tasks": [ + {"id": "C0-001", "phase": "P0", "name": "freeze_and_snapshot", "card": "docs/corrective/C0-001-freeze-and-snapshot.md", "taskCard": "docs/corrective/C0-001-freeze-and-snapshot.md", "dependsOn": [], "outputs": ["checkpoint inventory", "immutable parent references", "baseline hash record"], "gate": "G0", "status": "done", "ready": false, "writeScope": "evidence_only", "queueMutationAllowed": false}, + {"id": "C0-002", "phase": "P0", "name": "reconcile_generated_state", "card": "docs/corrective/C0-002-reconcile-generated-state.md", "taskCard": "docs/corrective/C0-002-reconcile-generated-state.md", "dependsOn": ["C0-001"], "outputs": ["authoritative completion registry candidate", "deterministic plan candidate", "matching task index candidate", "input digest", "issue summary", "repair plan"], "gate": "G0", "status": "done", "ready": false, "writeScope": "staged_generated_state", "queueMutationAllowed": false}, + {"id": "C0-003", "phase": "P0", "name": "classify_legacy_273", "card": "docs/corrective/C0-003-classify-legacy-273.md", "taskCard": "docs/corrective/C0-003-classify-legacy-273.md", "dependsOn": ["C0-002"], "outputs": ["evidence level matrix", "feature versus evidence report", "gap-to-capability candidates"], "gate": "G0", "status": "done", "ready": false, "writeScope": "evidence_only", "queueMutationAllowed": false}, + {"id": "C1-001", "phase": "P1", "name": "define_parity_levels", "card": "docs/corrective/C1-001-define-parity-levels.md", "taskCard": "docs/corrective/C1-001-define-parity-levels.md", "dependsOn": ["C0-002", "C0-003"], "outputs": ["L0-L5 contract", "completion policy"], "gate": "G1", "status": "done", "ready": false, "writeScope": "evidence_only", "queueMutationAllowed": false}, + {"id": "C1-002", "phase": "P1", "name": "define_command_result_context_schema", "card": "docs/corrective/C1-002-define-command-result-context-schema.md", "taskCard": "docs/corrective/C1-002-define-command-result-context-schema.md", "dependsOn": ["C1-001"], "outputs": ["versioned JSON schemas", "error/status table"], "gate": "G1", "status": "done", "ready": false, "writeScope": "evidence_only", "queueMutationAllowed": false}, + {"id": "C1-003", "phase": "P1", "name": "build_shared_case_runner", "card": "docs/corrective/C1-003-build-shared-case-runner.md", "taskCard": "docs/corrective/C1-003-build-shared-case-runner.md", "dependsOn": ["C1-002"], "outputs": ["desktop runner", "WASM runner", "result normalizer"], "gate": "G1", "status": "done", "ready": false, "writeScope": "production_pilot", "queueMutationAllowed": false}, + {"id": "C2-001", "phase": "P2", "name": "command_registry_and_validation", "card": "docs/corrective/C2-001-command-registry-and-validation.md", "taskCard": "docs/corrective/C2-001-command-registry-and-validation.md", "dependsOn": ["C1-003"], "outputs": ["typed command dispatch", "context validation", "authorization"], "gate": "G2", "status": "done", "ready": false, "writeScope": "production_pilot", "queueMutationAllowed": false}, + {"id": "C2-002", "phase": "P2", "name": "atomic_main_mutation", "card": "docs/corrective/C2-002-atomic-main-mutation.md", "taskCard": "docs/corrective/C2-002-atomic-main-mutation.md", "dependsOn": ["C2-001"], "outputs": ["Main writer rollback", "revision and dirty contract"], "gate": "G2", "status": "done", "ready": false, "writeScope": "production_pilot", "queueMutationAllowed": false}, + {"id": "C2-003", "phase": "P2", "name": "undo_redo_save_invariants", "card": "docs/corrective/C2-003-undo-redo-save-invariants.md", "taskCard": "docs/corrective/C2-003-undo-redo-save-invariants.md", "dependsOn": ["C2-002"], "outputs": ["history contract", "save/reopen invariants"], "gate": "G2", "status": "done", "ready": false, "writeScope": "production_pilot", "queueMutationAllowed": false}, + {"id": "C3-001", "phase": "P3", "name": "asset_catalog_resource_provider", "card": "docs/corrective/C3-001-asset-catalog-resource-provider.md", "taskCard": "docs/corrective/C3-001-asset-catalog-resource-provider.md", "dependsOn": ["C2-003"], "outputs": ["external resource abstraction", "active library context"], "gate": "G3", "status": "done", "ready": false, "writeScope": "production_pilot", "queueMutationAllowed": false}, + {"id": "C3-002", "phase": "P3", "name": "asset_catalog_positive_command", "card": "docs/corrective/C3-002-asset-catalog-positive-command.md", "taskCard": "docs/corrective/C3-002-asset-catalog-positive-command.md", "dependsOn": ["C3-001"], "outputs": ["catalog mutation command", "desktop/WASM result parity"], "gate": "G3", "status": "done", "ready": false, "writeScope": "production_pilot", "queueMutationAllowed": false}, + {"id": "C3-003", "phase": "P3", "name": "asset_catalog_pilot_e2e", "card": "docs/corrective/C3-003-asset-catalog-pilot-e2e.md", "taskCard": "docs/corrective/C3-003-asset-catalog-pilot-e2e.md", "dependsOn": ["C3-002"], "outputs": ["positive fixture", "negative matrix", "Chromium E2E", "five-case coverage"], "gate": "G3", "status": "done", "ready": false, "writeScope": "production_pilot", "queueMutationAllowed": false}, + {"id": "C4-001", "phase": "P4", "name": "modifier_positive_pilot", "card": "docs/corrective/C4-001-modifier-positive-pilot.md", "taskCard": "docs/corrective/C4-001-modifier-positive-pilot.md", "dependsOn": ["C2-003"], "outputs": ["modifier workflow", "delta/save/undo parity"], "gate": "G4", "status": "done", "ready": false, "writeScope": "production_pilot", "queueMutationAllowed": false}, + {"id": "C4-002", "phase": "P4", "name": "mesh_positive_pilot", "card": "docs/corrective/C4-002-mesh-positive-pilot.md", "taskCard": "docs/corrective/C4-002-mesh-positive-pilot.md", "dependsOn": ["C4-001"], "outputs": ["mesh mutation workflow", "geometry delta parity"], "gate": "G4", "status": "done", "ready": false, "writeScope": "production_pilot", "queueMutationAllowed": false}, + {"id": "C4-003", "phase": "P4", "name": "pilot_negative_matrix", "card": "docs/corrective/C4-003-pilot-negative-matrix.md", "taskCard": "docs/corrective/C4-003-pilot-negative-matrix.md", "dependsOn": ["C3-003", "C4-001", "C4-002"], "outputs": ["unsupported", "revision conflict", "resource missing", "malformed cases"], "gate": "G4", "status": "done", "ready": false, "writeScope": "production_pilot", "queueMutationAllowed": false}, + {"id": "C5-001", "phase": "P5", "name": "cluster_legacy_gaps", "card": "docs/corrective/C5-001-cluster-legacy-gaps.md", "taskCard": "docs/corrective/C5-001-cluster-legacy-gaps.md", "dependsOn": ["C4-003"], "outputs": ["capability clusters", "representative coverage cases"], "gate": "G4", "status": "done", "ready": false, "writeScope": "evidence_only", "queueMutationAllowed": false}, + {"id": "C5-002", "phase": "P5", "name": "modularize_gap_runner", "card": "docs/corrective/C5-002-modularize-gap-runner.md", "taskCard": "docs/corrective/C5-002-modularize-gap-runner.md", "dependsOn": ["C5-001"], "outputs": ["family runners", "data-driven cases", "no per-gap protocol"], "gate": "G4", "status": "done", "ready": false, "writeScope": "production_pilot", "queueMutationAllowed": false}, + {"id": "C5-003", "phase": "P5", "name": "migrate_legacy_gap_inventory", "card": "docs/corrective/C5-003-migrate-legacy-gap-inventory.md", "taskCard": "docs/corrective/C5-003-migrate-legacy-gap-inventory.md", "dependsOn": ["C5-002"], "outputs": ["coverage reports", "capability manifests", "legacy evidence classification"], "gate": "G4", "status": "done", "ready": false, "writeScope": "staged_generated_state", "queueMutationAllowed": false}, + {"id": "C6-001", "phase": "P6", "name": "chromium_workflow_gate", "card": "docs/corrective/C6-001-chromium-workflow-gate.md", "taskCard": "docs/corrective/C6-001-chromium-workflow-gate.md", "dependsOn": ["C5-003"], "outputs": ["open/edit/undo/redo/save/reopen E2E"], "gate": "G5", "status": "done", "ready": false, "writeScope": "evidence_only", "queueMutationAllowed": false}, + {"id": "C6-002", "phase": "P6", "name": "performance_security_gate", "card": "docs/corrective/C6-002-performance-security-gate.md", "taskCard": "docs/corrective/C6-002-performance-security-gate.md", "dependsOn": ["C6-001"], "outputs": ["latency/memory budget", "malformed/path/replay security cases"], "gate": "G5", "status": "done", "ready": false, "writeScope": "evidence_only", "queueMutationAllowed": false}, + {"id": "C6-003", "phase": "P6", "name": "reactivate_queue", "card": "docs/corrective/C6-003-reactivate-queue.md", "taskCard": "docs/corrective/C6-003-reactivate-queue.md", "dependsOn": ["C6-002"], "outputs": ["generated queue", "new capability task cards", "release decision"], "gate": "G5", "status": "in_progress", "ready": true, "writeScope": "queue_reactivation", "queueMutationAllowed": true} + ], + "stopRules": [ + "desktop positive result has no equivalent WASM mutation", + "three consecutive tasks have no production/API change", + "plan/index/catalog/queue is inconsistent", + "hash, revision, save/reopen, or rollback drift", + "historical artifact provenance is lost or cannot be restored without rewriting a manifest", + "dry-run and write inputDigest differ", + "CANCELLED or EXTERNAL_REQUIRED is counted as positive parity", + "manual nextTask, catalog offset, or parent evidence edit is proposed" + ], + "successMetrics": [ + "L2-L5 capability count", + "positive desktop/WASM workflow count", + "legacy cases closed per production change", + "save/reopen and undo/redo pass rate", + "queue determinism", + "Chromium workflow pass rate" + ] +} diff --git a/docs/BLENDER_WEB_EXECUTION_CONTROL_PLANE.md b/docs/BLENDER_WEB_EXECUTION_CONTROL_PLANE.md new file mode 100644 index 00000000..5ca90a97 --- /dev/null +++ b/docs/BLENDER_WEB_EXECUTION_CONTROL_PLANE.md @@ -0,0 +1,72 @@ +# Blender Web execution control plane + +This is the operational policy for moving Blender 5.2 behavior into the browser. It +keeps the existing desktop oracle, WASM/Main reader, Chromium checks, save/reopen +receipts, hashes, and compact task context. It changes the unit of production work. + +## One source per decision + +| Decision | Authoritative input | Meaning | +| --- | --- | --- | +| What runs next | `docs/EXECUTION_QUEUE.md` + its parent manifest | One active, serialized handoff pointer | +| What is a product capability | `docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json` | User-observable behavior and its proven parity level | +| What is still covered | `tests/golden/M15-03A/next-task-plan.json` | Legacy regression cases; not a promise of implementation | +| What was already proven | `tests/golden//manifest.json` and `tests/golden/corrective/` | Immutable receipts and hashes | + +The old corrective handoff is historical evidence. A later queue task is valid only when +its parent-manifest chain descends from that checkpoint; the checkpoint itself is never +rewritten to make it appear current. + +## Production unit + +The production unit is a capability workflow, not an individual Blender operator or +RNA field. A capability task owns one user-visible mutation and reuses shared command, +context, resource, Main transaction, history, and case-runner primitives. Its data-driven +cases may cover related legacy gaps in the same family. + +Every capability task must state its parity level, positive mutation, negative boundary, +save/reopen behavior, undo/redo behavior, resource budget, and Chromium receipt. A +`CANCELLED`, `UNSUPPORTED`, metadata-only, snapshot-only, or external-resource result is +coverage evidence, never a positive feature claim. + +## Lifecycle and gates + +```text +scope -> capability contract -> desktop oracle -> WASM/Main mutation + -> Chromium workflow -> negative/recovery -> manifest/hash -> handoff +``` + +The cheap control-plane check runs before Blender, WASM, or browser startup: + +```bash +node tools/web/check-execution-control-plane.mjs +node tools/web/check-execution-health.mjs +``` + +The first command validates queue/index/catalog/parent consistency and reports the +capability-to-legacy coverage ratio. The second validates the current task card and +its concrete fixture/generator. Any blocked result stops expensive commands and keeps +the task `in_progress` or `blocked`. + +## Parallelism and throughput rules + +- Inventory, schema, fixture preparation, read-only UI work, and checkers may run in + parallel when they do not share a mutable Main or generated queue file. +- Main mutation, queue generation, manifest/status writes, and release-ledger writes are + serialized through the parent manifest. +- A capability implementation should close multiple related legacy cases. Three + consecutive evidence-only tasks trigger a route review. +- Positive and negative cases are generated together. Failure, cancellation, budget, or + hash drift never advances the successor. +- Legacy `M16-GAP-*` records stay immutable; migration adds capability coverage references + instead of rewriting their completion meaning. + +## Current migration state + +The asset-operator evidence through `M16-GAP-00281` is integrated into the generated +completion registry. `M16-GAP-00282` remains the single legacy coverage checkpoint, +while `WBV2-P0-002` is the current production task. The corrective pilots already +provide reusable asset-catalog, modifier, mesh, history, and Chromium workflow +primitives. New implementation work should extend those family primitives and add +representative capability cases rather than adding another checker branch for each +operator. diff --git a/docs/BLENDER_WEB_PARITY_EXECUTION_PLAN_V2.md b/docs/BLENDER_WEB_PARITY_EXECUTION_PLAN_V2.md new file mode 100644 index 00000000..bdb8709a --- /dev/null +++ b/docs/BLENDER_WEB_PARITY_EXECUTION_PLAN_V2.md @@ -0,0 +1,209 @@ +# Blender Web 对标执行计划 V2 + +状态:`ACTIVE_CAPABILITY_QUEUE` + +本文件把现有 V1 产品、Blender 5.2 源码、WASM/WebEngine、React/Three.js、 +OPFS/IndexedDB 和 Chromium 验收组织成一套可实施的长期方案。它定义 capability +queue 的执行合同;当前机器指针仍只接受 `docs/EXECUTION_QUEUE.md` 与 parent +manifest,不能从本文件手工猜测 successor。 + +机器任务目录见 [`BLENDER_WEB_PARITY_TASK_PLAN_V2.json`](BLENDER_WEB_PARITY_TASK_PLAN_V2.json)。 +任务卡按目录逐项生成到 `docs/tasks/`,并接入现有 manifest/handoff 流程;未达到 +依赖和 gate 的任务保持 planned,不进入 active queue。 + +## 1. 目标与边界 + +### 1.1 业务目标 + +交付一个可以在浏览器中完成真实建模、动画、材质、资产管理和受支持渲染工作流的 +Web Blender,而不是只做 UI 仿制或把桌面 Blender 二进制直接塞进浏览器。用户必须 +能够得到可保存、可恢复、可导出、可审计的结果;浏览器不支持的语义必须显式阻断, +不能静默丢失或伪造成功。 + +### 1.2 两条承诺轴必须分开 + +| 轴 | 含义 | 完成证据 | +| --- | --- | --- | +| V1 release | 当前范围内的可部署建模器 | `WEB_BLENDER_MODELER_V1_SCOPE.md`、release evidence | +| Blender 5.2 parity | 逐个用户可观察行为与桌面 Blender 5.2 对标 | desktop golden + WASM/Main + Chromium + persistence | + +V1 已有可部署闭环,不代表 Blender 全域 parity 完成。完整 Blender 的窗口系统、 +Python/add-on、CUDA/Metal/HIP/OptiX、Cycles 复杂求解和任意 editor/operator 不纳入 +浏览器本地等价承诺;它们必须进入 `SERVER_EXACT` 或 `EXCLUDED`。 + +### 1.3 能力分类 + +每个功能在进入实现前固定为一种完成类别: + +| 类别 | 浏览器行为 | 必须保留 | +| --- | --- | --- | +| `LOCAL_EXACT` | 与 Blender 5.2 语义逐字段一致 | desktop/WASM canonical golden | +| `LOCAL_BOUNDED` | 白名单、预算和确定性错误码内的本地能力 | 正例、负例、取消、重启、释放 | +| `SERVER_EXACT` | 浏览器提交受签名绑定的 source/settings/build,服务端运行 Blender | request/result hash、取消、超时、失败不发布 | +| `EXCLUDED` | 不提供本地执行 | UI 不可执行,读入时保留或明确 loss report | + +## 2. 当前事实与启动条件 + +当前事实以机器证据为准: + +- `docs/EXECUTION_QUEUE.md` 的生产指针当前是 `WBV2-P0-002`,其 parent + manifest 为 `tests/golden/WBV2-P0-001/manifest.json`。legacy coverage 指针为 + `M16-GAP-00282` / `tests/golden/M16-GAP-00281/manifest.json`;纠偏 C6-003 的 + `M16-GAP-00277` 记录是已验证的历史 queue checkpoint,不是当前任务指针。 +- corrective 轨道的 `C6-003` owner review 已记录,原子 queue write 已完成, + `queueMutation=true`;post-write G5 验证仍由该 handoff 追踪。 +- Web 基础设施、SceneIR、Main/Worker、存储、GLB、网格编辑、动画、材质、VDB、 + 有界 GN/Shader/Render/Media 和安全门已有大量闭环;完整 Blender parity 仍有 + 逐 family gap。 +- 浏览器验收永久只使用 Chromium;Firefox/WebKit 不进入 CI、支持声明或发布证据。 + +已满足的 queue reactivation 条件: + +1. owner review 对 C6-003 dry-run、write preview 和 protected hash 已明确通过。 +2. 旧 queue、parent manifest、corrective plan 的 hash 与指针已重新校验。 +3. V2 计划、能力矩阵、任务目录和当前 parent manifest 已完成输入摘要。 +4. capability queue 只有一个 active task:`WBV2-P0-002`;legacy coverage index + 仍只有一个 active record:`M16-GAP-00282`。00276-00281 的已有 manifest/status + 证据保持不变。 + +## 3. 目标架构 + +```text +React 工作区 / Blender 风格编辑器 + -> versioned protocol + capability registry + -> Main-thread coordinator + -> EngineWorker (single-thread / pthread WASM variant) + -> Blender 5.2 Main + WebEngine C ABI + -> SceneIR/WBG1 + binary range/asset deltas + -> Three.js WebGL2 或 OffscreenCanvas Worker viewport + -> OPFS payload + IndexedDB metadata/journal +``` + +架构规则: + +1. Blender Main 是场景、revision、undo/redo 和保存结果的权威;React state 不能 + 直接伪造 Main 结果。 +2. 每个命令都经过 capability、context、revision、预算和 cancellation 检查;失败 + 不得提交 Main 或发布迟到结果。 +3. desktop fixture、WASM/Main 和 Chromium 生产路径消费同一语义输入;测试不能在 + checker 中复制另一套实现。 +4. 大几何和媒体走 binary/range/streaming;JSON 只承载有界元数据和诊断,避免把 + 全量 Blender RNA 变成前端内存对象。 +5. 本地资源使用 content-addressed SHA-256,OPFS 先 staging、校验、journal,再 + 原子提交;IndexedDB 只保存可迁移元数据。 +6. 所有资源、Worker、GPU、timer 和 pending request 都有 owner 和 dispose 路径。 + +## 4. 执行波次 + +波次按依赖推进,波次内只有明确标为 `parallelGroup` 的任务可并行。每项任务仍只 +允许一个主要行为或一个独立证据变化。 + +| 波次 | 主题 | 主要产物 | 退出门 | +| --- | --- | --- | --- | +| P0 | 事实、范围、能力矩阵 | 计划版本、Blender inventory、parity map、错误/预算合同 | G0 | +| P1 | Runtime 基座 | SceneIR、Main transaction、Worker lifecycle、存储 journal | G1 | +| P2 | 核心用户闭环 | open、outliner、transform、mesh edit、viewport、save/reopen | G2 | +| P3 | 资产与创作数据 | material/UV、animation、rig、GLB、library | G2 | +| P4 | 高级本地切片 | modifier、GN/Shader、sculpt/non-mesh、simulation cache | G2/G3 | +| P5 | 渲染与服务端能力 | render route、compositor/media、server job/result binding | G3 | +| P6 | 安全、性能、发布 | scripting policy、fault recovery、offline/CI/release | G3/G4 | +| P7 | 全域 gap 清零 | 机器生成 family gap、逐项 parity、候选发布 | G4/G5 | + +P0-P6 的目标是形成稳定产品和可重复的能力扩展机制;P7 才逐个消化 Blender 5.2 +全域差距。不要在 P7 前用“已读取 inventory”或“协议已存在”宣称功能完成。 + +## 5. 任务执行合同 + +每个 `WBV2-*` 任务必须包含以下字段: + +| 字段 | 要求 | +| --- | --- | +| identity | `taskId`、parent、parityId、owner、implementationClass、依赖 | +| behavior | 一个用户可观察状态/数据/错误变化和明确非目标 | +| source | Blender 5.2 source anchor、production entry、最小 fixture | +| evidence | desktop canonical、WASM/Main、Chromium、negative、persistence | +| resource | budget、cancel、restart、dispose、OOM/quota 行为 | +| handoff | report、manifest、status、artifact SHA-256、rollback、nextTask | + +标准任务门: + +1. `C` 契约:schema、稳定 ID、能力、预算、错误码和 revision。 +2. `D` 桌面:由 pinned Blender 5.2 生成 canonical fixture/report。 +3. `W` WASM:生产 WebEngine/Main 消费同一 fixture,真实写回或结构化阻断。 +4. `B` 浏览器:Chromium 主线程和适用的 OffscreenCanvas 生产路径。 +5. `R` 恢复:undo/redo、save/reopen、Worker restart、cancel/late result、资源释放。 +6. `E` 证据:focused command、负例、确定性重跑、manifest/status/hash/governance。 + +任一适用门失败,任务保持 `in_progress` 或 `blocked`,不能生成 successor。 + +## 6. 效率策略 + +### 6.1 先做共享基座,再做 family + +将 SceneIR、revision/history、capability/error、Worker lifecycle、存储 journal 和 +fixture/comparator 做成可复用基座;新功能只提交 family-specific command 和 golden, +避免每个 gap 重复实现取消、重开和 hash 逻辑。 + +### 6.2 机器优先,人工文档后置 + +Blender inventory、capability matrix、task catalog、manifest 和 status 是机器生成或 +机器校验的事实源;Markdown 只解释决策和边界。禁止从历史编号推导任务,禁止把长日志 +带进上下文。 + +### 6.3 正负例同批交付 + +每个正例同时生成 malformed、unsupported、stale revision、duplicate、cancel 或 budget +负例中的至少一种。负例必须证明 Main revision、已提交资源和 history 不变。 + +### 6.4 并行但不共享可变 Main + +可并行的是 inventory、protocol、fixture、UI read-only 和 checker;涉及同一个 Main、 +queue、manifest 或 release ledger 的写入任务必须串行。任务目录用 `parallelGroup` 标注 +安全并行边界。 + +### 6.5 失败即证据,不覆盖日志 + +未知状态、断流、hash drift、预算超限和环境缺失都保留原始证据,最多恢复一次;不得 +重跑成功写入来覆盖失败日志,也不得用 mock 或协议单测替代真实 Blender/WASM/Chromium。 + +## 7. 发布门与指标 + +候选发布至少通过: + +- P0 用户闭环:open `.blend` -> edit -> undo -> redo -> save -> Worker restart -> reopen -> GLB。 +- Chromium 主线程和 OffscreenCanvas 视口均有非空像素和可观测 Main revision。 +- 100k、1M、10M geometry,4K/8K texture,长时间线/媒体和 simulation cache 的预算结果。 +- malformed、OOM、quota、device loss、network interruption、cancel、late result 和损坏 + archive 后的小任务恢复。 +- `LOCAL_EXACT` 的 desktop/WASM canonical hash;`SERVER_EXACT` 的 source/settings/build/result + hash;`EXCLUDED` 的稳定拒绝和 loss report。 +- 离线包、source archive、SBOM、许可证、CI quick/Chromium/release 三道门和 rollback runbook。 + +核心指标不是“完成百分比”,而是: + +| 指标 | 计算方式 | +| --- | --- | +| parity closure | 已通过 E 门的原子 `parityId` / 当前 inventory 原子数 | +| evidence health | 有效 manifest 且 hash/命令/状态一致的任务数 | +| recovery health | 负例/取消/重启/OOM 证据齐全的任务数 | +| queue integrity | parent pointer、唯一 ready task、protected hash 全通过 | +| product readiness | V1 release gates 全通过且未声明能力无伪成功 | + +## 8. 回滚与变更控制 + +- 计划草案升级必须增加 `planVersion`,不得覆盖历史 manifest 或重新解释旧 parity。 +- 每个任务只能删除自己的 fixture/report/status/context,parent evidence 和 queue tail 不重写。 +- capability 从 `planned` 到 `LOCAL_*` 必须有独立 evidence;从 `LOCAL_BOUNDED` 变成 + `LOCAL_EXACT` 必须新增 desktop/WASM golden,不得改字段标志冒充升级。 +- owner review、queue mutation 和发布 ledger 的写操作必须由通过的 handoff 支持。 +- 任何与当前 queue 或 parent hash 不一致的计划输入都保持 `blocked`,先修复证据再继续。 + +## 9. 下一步 + +当前推荐顺序: + +1. 按当前 queue/parent manifest 指向的 task card 开始下一项 legacy coverage,保持一个 active task。 +2. 评审本文件与机器任务目录,确认 V1/全域 parity、local/server/excluded 边界。 +3. 生成 `WBV2-P0-001` 至 `WBV2-P0-003` 的任务卡,先建立事实和能力矩阵。 +4. P0 通过后沿 parent manifest 接入后续 P1 任务。 +5. 每个波次结束做一次 fresh compact handoff,再从机器 manifest 选择 successor。 diff --git a/docs/BLENDER_WEB_PARITY_TASK_PLAN_V2.json b/docs/BLENDER_WEB_PARITY_TASK_PLAN_V2.json new file mode 100644 index 00000000..f95f084c --- /dev/null +++ b/docs/BLENDER_WEB_PARITY_TASK_PLAN_V2.json @@ -0,0 +1,85 @@ +{ + "schemaVersion": 1, + "planId": "BLENDER_WEB_PARITY_V2", + "status": "ACTIVE_CAPABILITY_QUEUE", + "authority": "queue_reactivated_after_owner_review", + "productContract": "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "sourcePlan": "docs/BLENDER_5_2_FULL_WEB_PARITY_EXECUTION_PLAN.md", + "executionPointer": "docs/EXECUTION_QUEUE.md", + "correctiveCheckpoint": { + "task": "C6-003", + "handoff": "tests/golden/corrective/C6-003/handoff.json", + "status": "active", + "blocker": null, + "queueMutation": true, + "legacyTask": "M16-GAP-00277", + "legacyParentNextTask": "M16-GAP-00277" + }, + "runtimePolicy": { + "blenderSource": "blender-5.2.0", + "browserEvidence": ["chromium"], + "forbiddenBrowsers": ["firefox", "webkit"], + "mainAuthority": "blender_main", + "storage": ["opfs", "indexeddb"], + "queueMutation": "enabled_after_owner_review_and_g5" + }, + "completionClasses": ["LOCAL_EXACT", "LOCAL_BOUNDED", "SERVER_EXACT", "EXCLUDED"], + "gates": [ + {"id": "G0", "name": "scope_and_inventory", "requires": ["contract", "inventory", "capability_matrix"]}, + {"id": "G1", "name": "runtime_foundation", "requires": ["sceneir", "main_transaction", "worker_lifecycle", "storage_journal"]}, + {"id": "G2", "name": "feature_parity", "requires": ["desktop", "wasm_main", "chromium", "negative", "persistence"]}, + {"id": "G3", "name": "recovery_and_security", "requires": ["cancel", "restart", "oom_quota", "malformed", "dispose"]}, + {"id": "G4", "name": "release_candidate", "requires": ["offline", "ci", "sbom", "rollback", "hashes"]}, + {"id": "G5", "name": "queue_mutation", "requires": ["owner_review", "protected_hashes", "handoff", "single_ready_task"]} + ], + "waves": [ + {"id": "P0", "name": "facts_and_contracts", "gate": "G0", "tasks": ["WBV2-P0-001", "WBV2-P0-002", "WBV2-P0-003"]}, + {"id": "P1", "name": "runtime_foundation", "gate": "G1", "tasks": ["WBV2-P1-001", "WBV2-P1-002", "WBV2-P1-003", "WBV2-P1-004", "WBV2-P1-005"]}, + {"id": "P2", "name": "core_modeler_loop", "gate": "G2", "tasks": ["WBV2-P2-001", "WBV2-P2-002", "WBV2-P2-003", "WBV2-P2-004", "WBV2-P2-005"]}, + {"id": "P3", "name": "authoring_and_io", "gate": "G2", "tasks": ["WBV2-P3-001", "WBV2-P3-002", "WBV2-P3-003", "WBV2-P3-004", "WBV2-P3-005"]}, + {"id": "P4", "name": "advanced_local_slices", "gate": "G2", "tasks": ["WBV2-P4-001", "WBV2-P4-002", "WBV2-P4-003", "WBV2-P4-004"]}, + {"id": "P5", "name": "render_and_server", "gate": "G3", "tasks": ["WBV2-P5-001", "WBV2-P5-002", "WBV2-P5-003"]}, + {"id": "P6", "name": "security_performance_release", "gate": "G4", "tasks": ["WBV2-P6-001", "WBV2-P6-002", "WBV2-P6-003"]}, + {"id": "P7", "name": "full_parity_gap_program", "gate": "G5", "tasks": ["WBV2-P7-001", "WBV2-P7-002", "WBV2-P7-003"]} + ], + "taskContract": { + "onePrimaryBehavior": true, + "requiredEvidence": ["desktop", "wasm_main", "chromium", "negative", "persistence", "manifest", "status"], + "requiredCommands": ["focused", "determinism", "hash", "governance"], + "failureState": "in_progress_or_blocked", + "successorRule": "only_from_parent_manifest_nextTask" + }, + "tasks": [ + {"id":"WBV2-P0-001","phase":"P0","title":"reconcile_scope_and_checkpoints","kind":"enabling","owner":"PROGRAM","dependsOn":[],"parityId":null,"implementationClass":"LOCAL_BOUNDED","parallelGroup":"p0-governance","gate":"G0","card":"docs/tasks/WBV2-P0-001.md","behavior":"Freeze V1/full-parity boundary and reconcile legacy/corrective pointers without queue mutation.","outputs":["scope decision","checkpoint report","protected hash set"],"acceptance":["corrective owner-review status is explicit","legacy parent pointer is unchanged","plan has one activation gate"],"status":"done","ready":false,"queueMutationAllowed":false}, + {"id":"WBV2-P0-002","phase":"P0","title":"generate_blender52_inventory_and_parity_map","kind":"enabling","owner":"PARITY","dependsOn":["WBV2-P0-001"],"parityId":null,"implementationClass":"LOCAL_BOUNDED","parallelGroup":"p0-inventory","gate":"G0","card":"docs/tasks/WBV2-P0-002.md","behavior":"Generate stable Blender 5.2 data-block/operator/editor/node/format inventory and map every entry to a completion class.","outputs":["inventory","parity map","source hash"],"acceptance":["unknown entries are classified","inventory is deterministic","no entry claims feature parity without evidence"],"status":"in_progress","ready":true,"queueMutationAllowed":false}, + {"id":"WBV2-P0-003","phase":"P0","title":"freeze_capability_error_budget_contract","kind":"enabling","owner":"PROTOCOL","dependsOn":["WBV2-P0-001","WBV2-P0-002"],"parityId":null,"implementationClass":"LOCAL_BOUNDED","parallelGroup":"p0-contract","gate":"G0","card":"docs/tasks/WBV2-P0-003.md","behavior":"Freeze capability levels, stable error codes, revision, budget, cancellation and loss-report schemas.","outputs":["versioned protocol","capability matrix","negative matrix"],"acceptance":["unsupported input fails closed","schema hashes are stable","migration policy preserves unknown data"],"status":"planned","ready":false,"queueMutationAllowed":false}, + {"id":"WBV2-P1-001","phase":"P1","title":"stabilize_runtime_variants_and_source_receipts","kind":"enabling","owner":"RUNTIME","dependsOn":["WBV2-P0-003"],"parityId":null,"implementationClass":"LOCAL_BOUNDED","parallelGroup":"p1-runtime","gate":"G1","card":"docs/tasks/WBV2-P1-001.md","behavior":"Bind single-thread/pthread WebEngine variants to pinned Blender source/build/runtime receipts.","outputs":["runtime manifest","variant selector","fallback report"],"acceptance":["variant fallback is deterministic","source/build hash is verified","one engine session has one generation"],"status":"planned","ready":false,"queueMutationAllowed":false}, + {"id":"WBV2-P1-002","phase":"P1","title":"unify_sceneir_stable_ids_and_binary_deltas","kind":"enabling","owner":"MAIN","dependsOn":["WBV2-P0-003"],"parityId":null,"implementationClass":"LOCAL_EXACT","parallelGroup":"p1-sceneir","gate":"G1","card":"docs/tasks/WBV2-P1-002.md","behavior":"Make SceneIR/WBG1 stable IDs, topology/attribute domains and binary/range deltas canonical across desktop and WASM.","outputs":["SceneIR schema","binary fixture","delta comparator"],"acceptance":["IDs survive save/reopen","malformed chunk is rejected","desktop and WASM canonical hashes match"],"status":"planned","ready":false,"queueMutationAllowed":false}, + {"id":"WBV2-P1-003","phase":"P1","title":"unify_main_transaction_history_and_save","kind":"enabling","owner":"MAIN","dependsOn":["WBV2-P1-002"],"parityId":null,"implementationClass":"LOCAL_EXACT","parallelGroup":"p1-history","gate":"G1","card":"docs/tasks/WBV2-P1-003.md","behavior":"Use one Main transaction/revision/history contract for commit, undo/redo, atomic save and reopen.","outputs":["transaction contract","history receipt","save/reopen runner"],"acceptance":["failed/no-op commands add no history","stale revision cannot commit","reopen state is byte/hash stable"],"status":"planned","ready":false,"queueMutationAllowed":false}, + {"id":"WBV2-P1-004","phase":"P1","title":"harden_worker_cancel_restart_and_dispose","kind":"enabling","owner":"RUNTIME","dependsOn":["WBV2-P1-001","WBV2-P1-003"],"parityId":null,"implementationClass":"LOCAL_BOUNDED","parallelGroup":"p1-lifecycle","gate":"G1","card":"docs/tasks/WBV2-P1-004.md","behavior":"Make cancellation, late-result rejection, Worker restart and resource disposal common to all domains.","outputs":["lifecycle runner","fault report","dispose counters"],"acceptance":["cancel never publishes result","generation mismatch is rejected","CPU/WASM/GPU owners return to budget"],"status":"planned","ready":false,"queueMutationAllowed":false}, + {"id":"WBV2-P1-005","phase":"P1","title":"harden_opfs_indexeddb_journal_recovery","kind":"enabling","owner":"STORAGE","dependsOn":["WBV2-P1-003","WBV2-P1-004"],"parityId":null,"implementationClass":"LOCAL_BOUNDED","parallelGroup":"p1-storage","gate":"G1","card":"docs/tasks/WBV2-P1-005.md","behavior":"Unify OPFS staging/content addressing and IndexedDB metadata/journal recovery.","outputs":["storage schema","crash fixtures","recovery checker"],"acceptance":["interrupted commit leaves old project usable","hash mismatch quarantines payload","small project recovers after restart"],"status":"planned","ready":false,"queueMutationAllowed":false}, + {"id":"WBV2-P2-001","phase":"P2","title":"open_blend_scene_context_and_outliner","kind":"feature","owner":"EDITOR","dependsOn":["WBV2-P1-002","WBV2-P1-005"],"parityId":"EDITOR.OPEN_SCENE","implementationClass":"LOCAL_EXACT","parallelGroup":"p2-editor","gate":"G2","card":"docs/tasks/WBV2-P2-001.md","behavior":"Open a minimal .blend and expose scene/object/collection context from authoritative Main.","outputs":["desktop fixture","outliner report","Chromium path"],"acceptance":["stable IDs and selection revision match","missing data is structured","reopen preserves context"],"status":"planned","ready":false,"queueMutationAllowed":false}, + {"id":"WBV2-P2-002","phase":"P2","title":"object_collection_parent_transform_workflow","kind":"feature","owner":"EDITOR","dependsOn":["WBV2-P2-001","WBV2-P1-003"],"parityId":"OBJECT.TRANSFORM_HIERARCHY","implementationClass":"LOCAL_EXACT","parallelGroup":"p2-scene","gate":"G2","card":"docs/tasks/WBV2-P2-002.md","behavior":"Edit object transform, collection membership and parent hierarchy through Main transactions.","outputs":["desktop/WASM golden","negative cases","save/reopen receipt"],"acceptance":["world matrix parity","cycle/locked/library edits reject","undo/redo/save/reopen stable"],"status":"planned","ready":false,"queueMutationAllowed":false}, + {"id":"WBV2-P2-003","phase":"P2","title":"mesh_edit_core_operations","kind":"feature","owner":"MESH","dependsOn":["WBV2-P2-002","WBV2-P1-002"],"parityId":"MESH.EDIT_CORE","implementationClass":"LOCAL_EXACT","parallelGroup":"p2-mesh","gate":"G2","card":"docs/tasks/WBV2-P2-003.md","behavior":"Expose bounded vertex/edge/face selection plus merge/dissolve/extrude/inset/bevel/loop-cut.","outputs":["Blender fixture set","topology comparator","Chromium edit path"],"acceptance":["topology/attributes match","invalid selection and budget fail closed","single transaction and reopen stable"],"status":"planned","ready":false,"queueMutationAllowed":false}, + {"id":"WBV2-P2-004","phase":"P2","title":"dual_viewport_sceneir_render_path","kind":"feature","owner":"VIEWPORT","dependsOn":["WBV2-P2-001","WBV2-P1-004"],"parityId":"VIEWPORT.MAIN_OFFSCREEN","implementationClass":"LOCAL_BOUNDED","parallelGroup":"p2-viewport","gate":"G2","card":"docs/tasks/WBV2-P2-004.md","behavior":"Render the same validated SceneIR through main-thread WebGL2 and OffscreenCanvas Worker paths.","outputs":["pixel report","viewport diagnostics","device recovery"],"acceptance":["both paths have nonblank pixels","selection/camera revision is shared","device loss releases resources"],"status":"planned","ready":false,"queueMutationAllowed":false}, + {"id":"WBV2-P2-005","phase":"P2","title":"close_p0_user_loop","kind":"feature","owner":"INTEGRATION","dependsOn":["WBV2-P2-002","WBV2-P2-003","WBV2-P2-004","WBV2-P1-005"],"parityId":"WORKFLOW.P0_USER_LOOP","implementationClass":"LOCAL_BOUNDED","parallelGroup":"p2-integration","gate":"G2","card":"docs/tasks/WBV2-P2-005.md","behavior":"Prove open -> edit -> undo -> redo -> save -> restart -> reopen -> GLB in one production flow.","outputs":["P0 workflow report","release binding","rollback receipt"],"acceptance":["Main revision and exported asset are bound","fault/cancel leaves old state","Chromium production path passes"],"status":"planned","ready":false,"queueMutationAllowed":false}, + {"id":"WBV2-P3-001","phase":"P3","title":"material_uv_principled_asset_workflow","kind":"feature","owner":"MATERIAL","dependsOn":["WBV2-P2-003","WBV2-P2-005"],"parityId":"MATERIAL.PBR_UV","implementationClass":"LOCAL_BOUNDED","parallelGroup":"p3-authoring","gate":"G2","card":"docs/tasks/WBV2-P3-001.md","behavior":"Edit material slots, UVs and declared Principled/Image/Normal graph nodes with content-addressed textures.","outputs":["material golden","texture receipt","loss report"],"acceptance":["desktop/WASM node fields match","unsupported node retained/blocked","packed asset survives reopen"],"status":"planned","ready":false,"queueMutationAllowed":false}, + {"id":"WBV2-P3-002","phase":"P3","title":"keyframe_timeline_action_workflow","kind":"feature","owner":"ANIMATION","dependsOn":["WBV2-P2-002","WBV2-P2-005"],"parityId":"ANIMATION.TRS_ACTION","implementationClass":"LOCAL_EXACT","parallelGroup":"p3-authoring","gate":"G2","card":"docs/tasks/WBV2-P3-002.md","behavior":"Create/edit TRS keyframes, timeline and declared Action interpolation through Main.","outputs":["frame golden","animation comparator","reopen report"],"acceptance":["sampled values and handles match","stale frame result rejected","undo/save/reopen stable"],"status":"planned","ready":false,"queueMutationAllowed":false}, + {"id":"WBV2-P3-003","phase":"P3","title":"armature_pose_constraint_skin_workflow","kind":"feature","owner":"RIG","dependsOn":["WBV2-P2-002","WBV2-P3-002"],"parityId":"RIG.POSE_SKIN","implementationClass":"LOCAL_BOUNDED","parallelGroup":"p3-rig","gate":"G2","card":"docs/tasks/WBV2-P3-003.md","behavior":"Read and edit declared armature pose/constraint/weight/shape-key slices with bounded evaluation.","outputs":["pose golden","skin report","unsupported matrix"],"acceptance":["pose matrices and weights match","unsupported constraint is explicit","save/reopen and small recovery pass"],"status":"planned","ready":false,"queueMutationAllowed":false}, + {"id":"WBV2-P3-004","phase":"P3","title":"glb_roundtrip_and_loss_report","kind":"feature","owner":"IO","dependsOn":["WBV2-P2-005","WBV2-P3-001","WBV2-P3-003"],"parityId":"IO.GLB_ROUNDTRIP","implementationClass":"LOCAL_EXACT","parallelGroup":"p3-io","gate":"G2","card":"docs/tasks/WBV2-P3-004.md","behavior":"Import/export declared GLB mesh/PBR/texture/morph/skin/animation and report non-mapped semantics.","outputs":["GLB fixtures","desktop reimport report","loss report"],"acceptance":["roundtrip canonical graph matches","sparse/external URI/budget negatives reject","no silent loss"],"status":"planned","ready":false,"queueMutationAllowed":false}, + {"id":"WBV2-P3-005","phase":"P3","title":"library_asset_append_link_override","kind":"feature","owner":"ASSET","dependsOn":["WBV2-P1-005","WBV2-P2-001"],"parityId":"ASSET.LIBRARY_OPERATIONS","implementationClass":"LOCAL_BOUNDED","parallelGroup":"p3-assets","gate":"G2","card":"docs/tasks/WBV2-P3-005.md","behavior":"Support declared append/link/override ownership, reload and missing-library semantics.","outputs":["library fixtures","ownership report","negative matrix"],"acceptance":["source/hash/owner identity preserved","linked mutation blocked","stale generation and missing source fail closed"],"status":"planned","ready":false,"queueMutationAllowed":false}, + {"id":"WBV2-P4-001","phase":"P4","title":"modifier_graph_and_apply_slices","kind":"feature","owner":"MODIFIER","dependsOn":["WBV2-P2-003","WBV2-P2-005"],"parityId":"MODIFIER.DECLARED_SLICES","implementationClass":"LOCAL_BOUNDED","parallelGroup":"p4-domains","gate":"G2","card":"docs/tasks/WBV2-P4-001.md","behavior":"Enable one declared modifier parameter/apply workflow at a time with dependency-aware blocking.","outputs":["modifier goldens","dependency report","negative cases"],"acceptance":["desktop/evaluated Main match","unknown modifier retained and blocked","apply/undo/save/reopen stable"],"status":"planned","ready":false,"queueMutationAllowed":false}, + {"id":"WBV2-P4-002","phase":"P4","title":"geometry_nodes_and_shader_allowlist","kind":"feature","owner":"NODES","dependsOn":["WBV2-P3-001","WBV2-P4-001"],"parityId":"NODES.ALLOWLIST","implementationClass":"LOCAL_BOUNDED","parallelGroup":"p4-domains","gate":"G2","card":"docs/tasks/WBV2-P4-002.md","behavior":"Read/write/evaluate only declared Geometry Nodes and shader graph allowlists with resource budgets.","outputs":["node fixtures","compile/cache receipts","unsupported graph reports"],"acceptance":["node/socket/link/default parity","budget and unknown-node block before commit","compile failure rolls back"],"status":"planned","ready":false,"queueMutationAllowed":false}, + {"id":"WBV2-P4-003","phase":"P4","title":"sculpt_nonmesh_and_paint_bounded_slices","kind":"feature","owner":"SCULPT","dependsOn":["WBV2-P2-003","WBV2-P2-004"],"parityId":"SCULPT.NONMESH.PAINT_BOUNDED","implementationClass":"LOCAL_BOUNDED","parallelGroup":"p4-domains","gate":"G2","card":"docs/tasks/WBV2-P4-003.md","behavior":"Expose declared sculpt attributes/strokes, Curve/Surface/Font/PointCloud and paint slices with explicit PBVH limits.","outputs":["non-mesh fixtures","stroke report","capability blocks"],"acceptance":["Main commit is atomic","unsupported brush/solver returns stable code","GPU/OOM/restart recovery passes"],"status":"planned","ready":false,"queueMutationAllowed":false}, + {"id":"WBV2-P4-004","phase":"P4","title":"simulation_cache_identity_and_lifecycle","kind":"feature","owner":"SIMULATION","dependsOn":["WBV2-P1-005","WBV2-P4-002"],"parityId":"SIMULATION.CACHE_LIFECYCLE","implementationClass":"LOCAL_BOUNDED","parallelGroup":"p4-domains","gate":"G3","card":"docs/tasks/WBV2-P4-004.md","behavior":"Bind declared simulation cache to source/settings/revision hashes with cancellation, LRU and restart recovery.","outputs":["cache fixtures","identity report","quarantine evidence"],"acceptance":["stale/corrupt cache never publishes","small cache recovers after restart","budget release is observable"],"status":"planned","ready":false,"queueMutationAllowed":false}, + {"id":"WBV2-P5-001","phase":"P5","title":"render_capability_routing","kind":"feature","owner":"RENDER","dependsOn":["WBV2-P2-004","WBV2-P4-002"],"parityId":"RENDER.ROUTING","implementationClass":"LOCAL_BOUNDED","parallelGroup":"p5-media","gate":"G3","card":"docs/tasks/WBV2-P5-001.md","behavior":"Route bounded Eevee/WebGL capabilities locally and unsupported render classes to SERVER_EXACT or EXCLUDED.","outputs":["render receipts","pixel golden","routing report"],"acceptance":["source/settings/build identity bound","unsupported route cannot pretend local success","cancel/device loss releases resources"],"status":"planned","ready":false,"queueMutationAllowed":false}, + {"id":"WBV2-P5-002","phase":"P5","title":"compositor_sequencer_media_recovery","kind":"feature","owner":"MEDIA","dependsOn":["WBV2-P3-002","WBV2-P5-001"],"parityId":"MEDIA.BOUNDED_WORKFLOW","implementationClass":"LOCAL_BOUNDED","parallelGroup":"p5-media","gate":"G3","card":"docs/tasks/WBV2-P5-002.md","behavior":"Provide declared compositor/sequencer/codec/proxy/audio slices with revision and recovery gates.","outputs":["media receipts","recovery report","audio/session diagnostics"],"acceptance":["seek/decode revision ordering","cancel/timeout does not publish","quota/OOM/restart leaves project valid"],"status":"planned","ready":false,"queueMutationAllowed":false}, + {"id":"WBV2-P5-003","phase":"P5","title":"server_job_result_binding","kind":"feature","owner":"SERVER","dependsOn":["WBV2-P0-003","WBV2-P5-001"],"parityId":"SERVER.JOB_BINDING","implementationClass":"SERVER_EXACT","parallelGroup":"p5-server","gate":"G3","card":"docs/tasks/WBV2-P5-003.md","behavior":"Bind server render/encode/physics jobs to immutable input/settings/build/output hashes and explicit lifecycle states.","outputs":["server protocol","idempotency receipt","negative matrix"],"acceptance":["duplicate request is idempotent","stale result cannot bind","timeout/cancel/OOM produces no READY output"],"status":"planned","ready":false,"queueMutationAllowed":false}, + {"id":"WBV2-P6-001","phase":"P6","title":"scripting_default_deny_and_audit","kind":"feature","owner":"SECURITY","dependsOn":["WBV2-P1-004","WBV2-P5-003"],"parityId":"SECURITY.SCRIPTING","implementationClass":"EXCLUDED","parallelGroup":"p6-safety","gate":"G3","card":"docs/tasks/WBV2-P6-001.md","behavior":"Read text/metadata and expose audited, budgeted, default-deny script policy without arbitrary execution.","outputs":["policy manifest","malicious fixtures","audit report"],"acceptance":["autorun/network/add-on defaults deny","sandbox cancellation/dispose works","no secret or filesystem escape"],"status":"planned","ready":false,"queueMutationAllowed":false}, + {"id":"WBV2-P6-002","phase":"P6","title":"performance_fault_and_recovery_matrix","kind":"enabling","owner":"RELIABILITY","dependsOn":["WBV2-P1-004","WBV2-P1-005","WBV2-P2-004"],"parityId":null,"implementationClass":"LOCAL_BOUNDED","parallelGroup":"p6-safety","gate":"G3","card":"docs/tasks/WBV2-P6-002.md","behavior":"Run deterministic geometry/texture/media/cache budgets and inject OOM/quota/device/network faults.","outputs":["budget matrix","fault reports","resource release ledger"],"acceptance":["100k/1M/10M thresholds recorded","fault leaves old revision usable","all owned resources return to budget"],"status":"planned","ready":false,"queueMutationAllowed":false}, + {"id":"WBV2-P6-003","phase":"P6","title":"offline_ci_sbom_and_rollback_release","kind":"enabling","owner":"RELEASE","dependsOn":["WBV2-P6-001","WBV2-P6-002"],"parityId":null,"implementationClass":"LOCAL_BOUNDED","parallelGroup":"p6-release","gate":"G4","card":"docs/tasks/WBV2-P6-003.md","behavior":"Produce reproducible offline/source/binary release packages with CI lanes, SBOM and rollback evidence.","outputs":["RC manifest","offline archive","CI reports"],"acceptance":["quick/Chromium/release lanes pass","artifact hashes reproduce","upgrade/rollback and known limitations are tested"],"status":"planned","ready":false,"queueMutationAllowed":false}, + {"id":"WBV2-P7-001","phase":"P7","title":"cluster_full_blender_gap_inventory","kind":"enabling","owner":"PARITY","dependsOn":["WBV2-P0-002","WBV2-P6-003"],"parityId":null,"implementationClass":"LOCAL_BOUNDED","parallelGroup":"p7-gap","gate":"G4","card":"docs/tasks/WBV2-P7-001.md","behavior":"Cluster remaining Blender 5.2 data-block/operator/editor/node/format gaps by family and evidence class.","outputs":["cluster catalog","coverage report","risk ranking"],"acceptance":["each gap has stable ID and owner","negative-only/unsupported is not positive parity","clusters are deterministic"],"status":"planned","ready":false,"queueMutationAllowed":false}, + {"id":"WBV2-P7-002","phase":"P7","title":"generate_atomic_family_gap_queue","kind":"enabling","owner":"PROGRAM","dependsOn":["WBV2-P7-001"],"parityId":null,"implementationClass":"LOCAL_BOUNDED","parallelGroup":"p7-gap","gate":"G4","card":"docs/tasks/WBV2-P7-002.md","behavior":"Generate one task per parityId x observable behavior x implementation class with parent/hash context.","outputs":["task index","task catalog","task cards"],"acceptance":["one active ready task","no guessed successor","each card fits context budget"],"status":"planned","ready":false,"queueMutationAllowed":false}, + {"id":"WBV2-P7-003","phase":"P7","title":"full_parity_candidate_release_gate","kind":"enabling","owner":"RELEASE","dependsOn":["WBV2-P7-002"],"parityId":null,"implementationClass":"LOCAL_BOUNDED","parallelGroup":"p7-release","gate":"G5","card":"docs/tasks/WBV2-P7-003.md","behavior":"Recompute parity closure, evidence health, recovery health and release decision from machine manifests.","outputs":["parity release report","known limitations","final decision"],"acceptance":["all claims bind to evidence","blocked/excluded/server classes remain explicit","queue and protected hashes pass"],"status":"planned","ready":false,"queueMutationAllowed":false} + ] +} diff --git a/docs/EXECUTION_HEALTH.md b/docs/EXECUTION_HEALTH.md index c65333aa..8407ab48 100644 --- a/docs/EXECUTION_HEALTH.md +++ b/docs/EXECUTION_HEALTH.md @@ -13,23 +13,27 @@ node tools/web/check-execution-health.mjs ## 当前基线(2026-08-24) -- `npm --prefix web run test:task-context`:通过,约 `708 ms`。 -- `npm --prefix web run test:context-governance`:失败,约 `732 ms`;index/catalog - active 仍是 `M16-GAP-00281`,queue 已指向 `M16-GAP-00282`。 -- `node tools/web/check-generated-gap.mjs --task M16-GAP-00282`:预检失败,约 - `131 ms`;任务仍是 `pending`,fixture 和 generator 均不存在。 -- `npm --prefix web test`:约 `13.5 s`,`398/417` 通过;19 个失败来自历史 - manifest 的 artifact SHA-256 漂移,不能通过放宽校验解决。 -- `npm --prefix web run typecheck`:约 `15.7 s`,通过。 -- `npm --prefix web run lint`:约 `12.8 s`,通过。 +- 生产 lane 当前任务为 `WBV2-P0-002`,parent 为 + `tests/golden/WBV2-P0-001/manifest.json`;`WBV2` index/catalog 有且仅有一个 + active 记录。 +- legacy coverage checkpoint 为 `M16-GAP-00282`,其 parent + `tests/golden/M16-GAP-00281/manifest.json` 保持不变;它不再作为生产任务领取。 +- `node tools/web/check-execution-control-plane.mjs`:通过;报告 6,900 legacy + cases、281 个已有 coverage、3 个 capability clusters、9 个映射 cases。 +- `node tools/web/check-execution-health.mjs`:通过;在 capability task 上不启动 + Blender/WASM fixture preflight。 +- `npm --prefix web run test:task-context`、`npm --prefix web run test:context-governance`、 + `npm --prefix web run test:execution-control-plane`:通过。 +- 全量历史 manifest 的 SHA-256 漂移仍需不可变快照或审计重签;不得放宽 checker + 或把 metadata/negative-only 证据计为功能完成。 ## 恢复顺序 -1. 先修复 queue、plan、catalog、index 的单一指针来源,并重新生成 index;不得手工 - 修改 active 状态或 offset。 -2. 为当前任务生成非空紧凑卡: - `node tools/web/generate-task-card.mjs --task M16-GAP-00282`。 -3. 只有任务变为 `active` 且 fixture/generator 真实存在后,才运行专项 gap 命令。 +1. 先运行 capability control-plane、queue ancestry、context 和 governance gates;不得手工 + 修改 active 状态、offset 或 `nextTask`。 +2. 读取当前 `WBV2-*` task card,按卡片命令生成 inventory/capability 证据;不要为 + legacy coverage task 启动 Blender/WASM。 +3. 只有当后续 task 明确要求 fixture 时,才运行专项 gap/desktop 命令。 4. 历史 manifest hash 漂移需要不可变的源快照或经审计的重签流程;禁止在 checker 中 忽略漂移,也不要把 `CANCELLED`、metadata-only 或 negative-only 证据计为功能完成。 5. 专项任务通过后才运行浏览器验收;浏览器门永久限制为 Chromium。 diff --git a/docs/EXECUTION_QUEUE.md b/docs/EXECUTION_QUEUE.md index 94047db5..79524056 100644 --- a/docs/EXECUTION_QUEUE.md +++ b/docs/EXECUTION_QUEUE.md @@ -4,17 +4,21 @@ 本页是唯一的当前任务指针,不保存历史任务表、实现日志或长期规划。领取任务前只读取本页、当前任务上下文、parent manifest 和 parent status;完整规则见 [`CONTEXT_BUDGET.md`](CONTEXT_BUDGET.md)。 +生产实现按能力工作流推进,legacy `M16-GAP-*` 只作为覆盖回归;能力矩阵、共享 runner 和效率规则见 [`BLENDER_WEB_EXECUTION_CONTROL_PLANE.md`](BLENDER_WEB_EXECUTION_CONTROL_PLANE.md)。 + 连续接续入口见 [`nextTask.md`](../nextTask.md):用户发送“按 nextTask.md 接续执行”时,进入连续模式;每个迭代只完成一个任务并以 fresh compact context 交接,成功后自动读取新指针继续,直到失败、阻塞、预算/环境/传输异常、闭合门或用户要求停止。 ## 当前指针 | 字段 | 值 | | --- | --- | -| 里程碑 | M16 Main、Mesh、Modifier、Sculpt | -| 当前任务 | `M16-GAP-00276` | -| parent manifest | `tests/golden/M16-GAP-00275/manifest.json` | -| 任务卡 | [`tasks/M16-GAP-00276.md`](tasks/M16-GAP-00276.md) | -| 专项验收 | `npm --prefix web run test:generated-gap -- --task M16-GAP-00276` | +| 里程碑 | WBV2 capability workflow | +| 当前任务 | `WBV2-P0-002` | +| parent manifest | `tests/golden/WBV2-P0-001/manifest.json` | +| 任务卡 | [`tasks/WBV2-P0-002.md`](tasks/WBV2-P0-002.md) | +| 专项验收 | `node tools/web/check-execution-control-plane.mjs` | +| legacy coverage checkpoint | `M16-GAP-00282` | +| legacy coverage parent | `tests/golden/M16-GAP-00281/manifest.json` | 领取前执行: diff --git a/docs/README.md b/docs/README.md index f8f78c5a..c2149f2b 100644 --- a/docs/README.md +++ b/docs/README.md @@ -29,6 +29,8 @@ | 当前领取顺序 | [EXECUTION_QUEUE.md](EXECUTION_QUEUE.md) + 当前 manifest 的 `nextTask` | | 当前实现和风险 | [PROJECT_STATUS_AND_NEXT_WORK.md](PROJECT_STATUS_AND_NEXT_WORK.md) | | M12-M23 长期原子计划 | [BLENDER_5_2_FULL_WEB_PARITY_EXECUTION_PLAN.md](BLENDER_5_2_FULL_WEB_PARITY_EXECUTION_PLAN.md) | +| Blender Web 对标 V2 capability 计划 | [BLENDER_WEB_PARITY_EXECUTION_PLAN_V2.md](BLENDER_WEB_PARITY_EXECUTION_PLAN_V2.md) + [BLENDER_WEB_PARITY_TASK_PLAN_V2.json](BLENDER_WEB_PARITY_TASK_PLAN_V2.json) | +| 执行控制面和效率规则 | [BLENDER_WEB_EXECUTION_CONTROL_PLANE.md](BLENDER_WEB_EXECUTION_CONTROL_PLANE.md) + `node tools/web/check-execution-control-plane.mjs` | | 机器状态和发布证据 | `status/parity-ledger.json`、`status/release-evidence.json` | | Blender 全域覆盖参考 | `BLENDER_5_2_WEB_FEATURE_PARITY.md`、`BLENDER_5_2_FULL_PARITY_WBS.md` | diff --git a/docs/corrective/C0-001-freeze-and-snapshot.md b/docs/corrective/C0-001-freeze-and-snapshot.md new file mode 100644 index 00000000..f945fe1f --- /dev/null +++ b/docs/corrective/C0-001-freeze-and-snapshot.md @@ -0,0 +1,77 @@ +# C0-001 freeze_and_snapshot + +状态:done +计划:`BLENDER_WASM_CORRECTIVE_TASK_PLAN` +阶段:P0 +Gate:G0 +依赖:无 +lifecycleStatus:`done` +writeScope:`evidence_only` +queueMutationAllowed:`false` + +## 目标 + +建立旧队列和 00274 checkpoint 的只读、可复现基线。该任务不修改旧 queue、manifest、 +completion registry、catalog、index 或 parent evidence。任何发现的矛盾都记录为证据, +不能在本任务内修复。 + +## 输入 + +- `docs/EXECUTION_QUEUE.md` +- `node tools/web/print-task-context.mjs` 输出列出的四个 required documents +- `tests/golden/M15-03A/completed-gap-tasks.json` +- `tests/golden/M15-03A/task-catalog.jsonl` +- `tests/golden/M15-03A/task-index.json` +- `tests/golden/M15-03A/next-task-plan.json` 的脚本摘要,不复制全文 + +## 命令 + +```bash +mkdir -p tests/golden/corrective/C0-001 +node tools/web/print-task-context.mjs > tests/golden/corrective/C0-001/print-task-context.log +node tools/web/check-task-context.mjs > tests/golden/corrective/C0-001/check-task-context.log +node tools/web/check-context-governance.mjs --task M16-GAP-00274 > tests/golden/corrective/C0-001/context-governance.log +git status --short > tests/golden/corrective/C0-001/git-status.log +sha256sum docs/EXECUTION_QUEUE.md tests/golden/M16-GAP-00273/manifest.json docs/status/M16-GAP-00273.md tests/golden/M15-03A/completed-gap-tasks.json tests/golden/M15-03A/task-catalog.jsonl tests/golden/M15-03A/task-index.json tests/golden/M15-03A/next-task-plan.json > tests/golden/corrective/C0-001/source-hashes.txt +node tools/web/capture-corrective-baseline.mjs --task M16-GAP-00274 --output tests/golden/corrective/C0-001/baseline.json +node tools/web/capture-corrective-baseline.mjs --task M16-GAP-00274 --output tests/golden/corrective/C0-001/baseline-second.json +cmp tests/golden/corrective/C0-001/baseline.json tests/golden/corrective/C0-001/baseline-second.json +node tools/web/check-corrective-baseline.mjs --baseline tests/golden/corrective/C0-001/baseline.json --source-hashes tests/golden/corrective/C0-001/source-hashes.txt > tests/golden/corrective/C0-001/baseline-check.log +node tools/web/check-corrective-plan.mjs > tests/golden/corrective/C0-001/corrective-plan.log +git diff --check > tests/golden/corrective/C0-001/diff-check.log +``` + +## 输出 + +- `tests/golden/corrective/C0-001/print-task-context.log` +- `tests/golden/corrective/C0-001/check-task-context.log` +- `tests/golden/corrective/C0-001/context-governance.log` +- `tests/golden/corrective/C0-001/git-status.log` +- `tests/golden/corrective/C0-001/source-hashes.txt` +- `tests/golden/corrective/C0-001/baseline.json` +- `tests/golden/corrective/C0-001/baseline-second.json`(只用于 byte determinism 比较) +- `tests/golden/corrective/C0-001/corrective-plan.log` +- `tests/golden/corrective/C0-001/diff-check.log` +- `tests/golden/corrective/C0-001/baseline-check.log` + +`baseline.json` 必须记录:当前 task、parent nextTask、catalog active、plan firstTask、 +completion count、所有 active IDs、旧证据目录数量和源文件 hashes。 + +`baseline.json` 的固定契约:`queue.currentTask` 必须是 `M16-GAP-00274`, +`queue.parentNextTask` 必须是 `M16-GAP-00274`,`invariants.queueMutationAllowed` 必须为 +`false`,且 `invariants.catalogActiveMatchesPlan` 必须为 `true`。 + +## 通过条件 + +- 所有命令退出码为 0; +- current task 仍为 `M16-GAP-00274`; +- parent manifest 的 `nextTask` 仍为 `M16-GAP-00274`; +- baseline 两次生成内容完全相同; +- `node tools/web/check-corrective-plan.mjs`、`git diff --check` 和所有记录命令退出码为 0; +- 没有任何旧 queue/manifest/catalog/index 文件被修改。 + +## 失败边界 + +任一 hash、active task、parent pointer 或 context gate 不一致时,状态改为 +`in_progress`,停止 C0-002/C0-003,不得修复或猜测 task number。只允许提交该失败证据; +旧队列和历史 evidence 保持原样。 diff --git a/docs/corrective/C0-002-reconcile-generated-state.md b/docs/corrective/C0-002-reconcile-generated-state.md new file mode 100644 index 00000000..149a5791 --- /dev/null +++ b/docs/corrective/C0-002-reconcile-generated-state.md @@ -0,0 +1,77 @@ +# C0-002 reconcile_generated_state + +状态:done +计划:`BLENDER_WASM_CORRECTIVE_TASK_PLAN` +阶段:P0 +Gate:G0 +依赖:`C0-001` +lifecycleStatus:`done` +blockedBy:`resolved in corrective staging by authorized current-worktree re-sign` +writeScope:`staged_generated_state` +queueMutationAllowed:`false` + +## 目标 + +以 manifest/status/task-context 为证据源,恢复 completion registry、next-task plan、task +catalog 和 task index 的可重复生成关系。正式文件只做 dry-run 比较;候选输出必须放在 +`tests/golden/corrective/C0-002/staged/`,不能覆盖旧 queue 或旧生成物。 + +## 实施要求 + +新增 repository tool(建议路径:`tools/web/reconcile-corrective-state.mjs`),必须: + +- 接收明确的 evidence root,不接收任意 guessed task number; +- 逐 task 校验 manifest、status、task-context 和 artifact hashes; +- 只将全部证据完整且 status 为 `done` 的任务加入 completion registry; +- 生成顺序固定为 completion registry -> plan -> index -> task card; +- 每个输出先写临时文件,校验成功后原子替换; +- 任一步失败时保留原文件并返回非零退出码; +- 输出 machine-readable summary,不输出完整 next-task-plan;summary 必须包含 + `inputDigest`、`issueSummary`、`registryComparison` 和 `repairPlan`。 +- `--write` 仅允许写入显式 `--output-root`,且该路径必须位于 corrective evidence 根目录; +- 输出必须带 `sourceHashes`、`inputTaskCount`、`candidateActiveTask` 和 `queueMutation:false`。 + +## 必须拒绝 + +- manifest `done` 但 status/context 缺失; +- parent `nextTask` 不指向 task; +- artifact hash drift; +- 多个 active task; +- 手工传入 offset、nextTask 或 completion 状态; +- 只存在 desktop negative evidence 的任务被加入 feature completion。 + +## 验收 + +```bash +node tools/web/reconcile-corrective-state.mjs --evidence-root tests/golden --dry-run --report tests/golden/corrective/C0-002/dry-run.json +node tools/web/reconcile-corrective-state.mjs --evidence-root tests/golden --write --output-root tests/golden/corrective/C0-002/staged --report tests/golden/corrective/C0-002/write.json +jq -e '.inputDigest and (.queueMutation == false) and (.repairPlan.approvalRequired == true)' tests/golden/corrective/C0-002/dry-run.json +jq -e '.inputDigest and (.queueMutation == false) and (.writeOutcome == "NO_FILES_WRITTEN")' tests/golden/corrective/C0-002/write.json +jq -s -e '.[0].inputDigest == .[1].inputDigest' tests/golden/corrective/C0-002/dry-run.json tests/golden/corrective/C0-002/write.json +test ! -e tests/golden/corrective/C0-002/staged/completion-registry.candidate.json +node tools/web/check-blender-next-task-plan.mjs +node tools/web/check-task-index.mjs +npm --prefix web run test:task-context +npm --prefix web run test:context-governance +node tools/web/check-context-governance.mjs +git diff --check +``` + +`--dry-run` 和 `--write` 的 `inputDigest` 必须一致;完整 JSON 因 mode 和 writeOutcome +不同而不要求 byte-identical。`--write` 不得更新 +`docs/EXECUTION_QUEUE.md`、parent manifest 或正式 plan/index/catalog;queue 更新是 C6-003 +的独立 gate。 + +## 输出 + +- `tests/golden/corrective/C0-002/reconcile-report.json` +- `tests/golden/corrective/C0-002/reconcile-command.log` +- `tests/golden/corrective/C0-002/dry-run.json` 和 `write.json` 的 `inputDigest` 对比 +- `issueSummary`、`registryComparison` 和 `repairPlan` +- 生成文件的 SHA-256 清单 +- `tests/golden/corrective/C0-002/staged/` 下的候选文件(不得直接复制回正式路径) + +## 失败边界 + +任何生成不确定性、hash 漂移或 queue mismatch 都保持 C0-002 `in_progress`,清理本次 +staged candidate 后不开始 C1;不得手工编辑生成物以“通过” gate。 diff --git a/docs/corrective/C0-003-classify-legacy-273.md b/docs/corrective/C0-003-classify-legacy-273.md new file mode 100644 index 00000000..2d5b514a --- /dev/null +++ b/docs/corrective/C0-003-classify-legacy-273.md @@ -0,0 +1,74 @@ +# C0-003 classify_legacy_273 + +状态:done +计划:`BLENDER_WASM_CORRECTIVE_TASK_PLAN` +阶段:P0 +Gate:G0 +依赖:`C0-002` +lifecycleStatus:`done` +blockedBy:`none` +writeScope:`evidence_only` +queueMutationAllowed:`false` + +## 目标 + +把旧 M16 已有任务按实际证据重新分类,避免把 metadata-only 或 negative-only 当作正向 +feature parity,并为后续 capability clustering 产生可复现的候选映射。分类不改变旧任务 +的 `status`、manifest、completion registry 或 queue。 + +## 分类来源 + +只能读取并交叉验证: + +- task manifest 的 operation/status/artifact hashes; +- desktop report 的 poll/operatorStatus/mainMutation; +- web report 的 WASM fields、revision、save/reopen、negative; +- reader、API、WASM 构件 hashes; +- focused command 和 governance report。 + +禁止根据 task ID、gap 名称或 `status: done` 单独推断 feature parity。 + +## 分类规则 + +- `FEATURE_PARITY`:至少 L2,必须有 WASM positive command 和 Main mutation; +- `READ_COMPATIBILITY`:L0/L1,只有读取/观察证据; +- `NEGATIVE_BOUNDARY`:只证明取消、不支持、资源缺失或坏输入; +- `METADATA_ONLY`:snapshot 有字段,但没有等价 mutation; +- `UNSUPPORTED_DECLARED`:明确记录能力边界和用户可见错误; +- `BLOCKED`:证据不完整、hash 漂移或流程 gate 失败。 +- `PLANNED`:只有 capability 设计材料,没有可核验的旧任务证据;只能出现在新 capability + 候选,不得出现在 legacy completion。 + +## 输出 + +- `tests/golden/corrective/C0-003/legacy-gap-classification.json` +- `tests/golden/corrective/C0-003/cluster-summary.json` +- `tests/golden/corrective/C0-003/classification-report.md` + +每条记录至少包含 `task`、`gapId`、`evidenceLevel`、`completionClass`、`desktopPositive`、 +`wasmPositiveMutation`、`readerChanged`、`wasmChanged`、`saveReopen`、`reason`、 +`candidateCapabilityId`、`mappingState`、`evidenceRefs` 和 `sourceHashes`。其中: + +- `candidateCapabilityId` 只能是一个 primary capability;其它复用关系写入 + `coverageCapabilityIds`,不得让一个 gap 隐式重复完成; +- `mappingState` 只能是 `UNMAPPED`、`CANDIDATE`、`COVERED`、`RETAINED_NEGATIVE`、 + `DUPLICATE` 或 `BLOCKED`; +- `evidenceRefs` 必须指向具体 manifest/report/command,而不是目录或 task 名称; +- `sourceHashes` 必须覆盖被分类的 manifest、desktop/web report 和 production artifact。 + +## 通过条件 + +- 273 条旧记录均有分类; +- 每条分类都能追溯到具体 manifest/report/hash; +- 生成两次 bytes 相同; +- 能识别至少一个真实 L2+ cluster 和至少一个 metadata/negative cluster; +- 每个 `FEATURE_PARITY` 记录都有 `wasmPositiveMutation:true`、`evidenceLevel` 为 L2-L5, + 且 `desktopPositive:true`; +- 每个 `RETAINED_NEGATIVE` 或 `READ_COMPATIBILITY` 记录不会生成 queue completion; +- 不修改旧 manifest、status 或 queue。 + +## 失败边界 + +无法从现有证据区分正向 mutation 与 metadata-only 时,分类为 `BLOCKED`,不得向上乐观归类。 +mapping 发生多对一冲突、hash 漂移或 source 目录不完整时也必须保持 `BLOCKED`,并记录 +冲突原因,不能自动选择 capability。 diff --git a/docs/corrective/C1-001-define-parity-levels.md b/docs/corrective/C1-001-define-parity-levels.md new file mode 100644 index 00000000..1fc729ef --- /dev/null +++ b/docs/corrective/C1-001-define-parity-levels.md @@ -0,0 +1,28 @@ +# C1-001 define_parity_levels + +状态:done +计划:`BLENDER_WASM_CORRECTIVE_TASK_PLAN` +阶段:P1 +Gate:G1 +依赖:`C0-002`, `C0-003` +lifecycleStatus:`done` +blockedBy:`none` +writeScope:`evidence_only` +queueMutationAllowed:`false` + +## 目标 + +将 C0-003 的可审计分类收敛为 L0-L5 parity contract,并明确哪些字段和 +证据组合允许进入 legacy completion、capability evidence 或仅保留为边界。 + +## 输入 + +- `tests/golden/corrective/C0-003/legacy-gap-classification.json` +- `tests/golden/corrective/C0-003/cluster-summary.json` +- `docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json` + +## 交付 + +- L0-L5 contract、completion policy 和 focused schema tests。 +- 只写入 `tests/golden/corrective/C1-001/` 与对应 status/manifest。 +- 不修改旧 M16 queue、manifest、registry、catalog、index 或历史 evidence。 diff --git a/docs/corrective/C1-002-define-command-result-context-schema.md b/docs/corrective/C1-002-define-command-result-context-schema.md new file mode 100644 index 00000000..629c364f --- /dev/null +++ b/docs/corrective/C1-002-define-command-result-context-schema.md @@ -0,0 +1,29 @@ +# C1-002 define_command_result_context_schema + +状态:done +计划:`BLENDER_WASM_CORRECTIVE_TASK_PLAN` +阶段:P1 +Gate:G1 +依赖:`C1-001` +lifecycleStatus:`done` +blockedBy:`none` +writeScope:`evidence_only` +queueMutationAllowed:`false` + +## 目标 + +为 corrective parity contract 定义版本化 command、result、context schema 和 +稳定 error/status 表,覆盖正向 mutation、revision conflict、invalid context、 +unsupported、malformed 和 resource failure。 + +## 输入 + +- `tests/golden/corrective/C1-001/parity-level-contract.json` +- `tests/golden/corrective/C1-001/completion-policy.json` +- `docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json` + +## 交付 + +- versioned JSON schemas、error/status table 和 focused schema tests。 +- 只写入 `tests/golden/corrective/C1-002/` 与对应 status/manifest。 +- 不修改旧 M16 queue、manifest、registry、catalog、index 或历史 evidence。 diff --git a/docs/corrective/C1-003-build-shared-case-runner.md b/docs/corrective/C1-003-build-shared-case-runner.md new file mode 100644 index 00000000..bd31ea36 --- /dev/null +++ b/docs/corrective/C1-003-build-shared-case-runner.md @@ -0,0 +1,30 @@ +# C1-003 build_shared_case_runner + +状态:done +计划:`BLENDER_WASM_CORRECTIVE_TASK_PLAN` +阶段:P1 +Gate:G1 +依赖:`C1-002` +lifecycleStatus:`done` +blockedBy:`none` +writeScope:`production_pilot` +queueMutationAllowed:`false` + +## 目标 + +构建 desktop/WASM 共用的 case runner 和 result normalizer,使同一 fixture、 +command、context、revision 和 negative case 在两个执行面产生可比较 receipt。 + +## 输入 + +- `tests/golden/corrective/C1-002/command-schema.json` +- `tests/golden/corrective/C1-002/context-schema.json` +- `tests/golden/corrective/C1-002/result-schema.json` +- `tests/golden/corrective/C1-002/error-status-table.json` + +## 交付 + +- shared desktop runner、WASM runner、result normalizer 和 focused tests。 +- 只在显式 production pilot 范围内写入 runner;证据写入 + `tests/golden/corrective/C1-003/` 与对应 status/manifest。 +- 不修改旧 M16 queue、manifest、registry、catalog、index 或历史 evidence。 diff --git a/docs/corrective/C2-001-command-registry-and-validation.md b/docs/corrective/C2-001-command-registry-and-validation.md new file mode 100644 index 00000000..ad92ab84 --- /dev/null +++ b/docs/corrective/C2-001-command-registry-and-validation.md @@ -0,0 +1,43 @@ +# C2-001 command_registry_and_validation + +状态:done +计划:`BLENDER_WASM_CORRECTIVE_TASK_PLAN` +阶段:P2 +Gate:G2 +依赖:`C1-003` +lifecycleStatus:`done` +blockedBy:`none` +writeScope:`production_pilot` +queueMutationAllowed:`false` + +## 目标 + +在 C1-003 shared case runner 之上建立 typed command registry、统一 validation +和 authorization 边界。命令必须先完成 schema、context、revision 和授权校验, +才能调用 adapter;拒绝路径必须保持 Main revision 和状态不变。 + +## 输入 + +- `tests/golden/corrective/C1-002/command-schema.json` +- `tests/golden/corrective/C1-002/context-schema.json` +- `tests/golden/corrective/C1-002/result-schema.json` +- `tests/golden/corrective/C1-002/error-status-table.json` +- `web/protocol/corrective-case-runner.ts` +- `tests/golden/corrective/C1-003/manifest.json` + +## 交付 + +- typed command registry、context validator 和 authorization policy。 +- 正向 dispatch、未知命令、无权限、只读 context、revision conflict 和 malformed + negative cases 的 focused tests。 +- 证据写入 `tests/golden/corrective/C2-001/`,并生成可复现 receipt、hash manifest + 和对应 status。 +- 不修改旧 M16 queue、manifest、registry、catalog、index 或历史 evidence。 + +## 验收 + +- focused registry/validation test exits 0。 +- positive dispatch and all negative cases are normalized by the shared runner。 +- deterministic receipt and protected legacy hashes match before/after。 +- `npm --prefix web run typecheck`、corrective-plan/context governance 和 + `git diff --check` exit 0。 diff --git a/docs/corrective/C2-002-atomic-main-mutation.md b/docs/corrective/C2-002-atomic-main-mutation.md new file mode 100644 index 00000000..c619c726 --- /dev/null +++ b/docs/corrective/C2-002-atomic-main-mutation.md @@ -0,0 +1,33 @@ +# C2-002 atomic_main_mutation + +状态:done +计划:`BLENDER_WASM_CORRECTIVE_TASK_PLAN` +阶段:P2 +Gate:G2 +依赖:`C2-001` +lifecycleStatus:`done` +blockedBy:`none` +writeScope:`production_pilot` +queueMutationAllowed:`false` + +## 目标 + +为 registry dispatch 增加 atomic Main mutation boundary。成功命令只能提交 +一次 revision/dirty 变化;adapter 抛错、返回 malformed result、revision conflict +或取消时必须回滚 provisional state,保持 Main snapshot、revision 和 dirty 状态不变。 + +## 输入 + +- `web/protocol/corrective-case-runner.ts` +- `web/protocol/corrective-command-registry.ts` +- `tests/golden/corrective/C2-001/manifest.json` +- `tests/golden/corrective/C1-002/result-schema.json` +- `tests/golden/corrective/C1-002/error-status-table.json` + +## 交付 + +- 可测试的 atomic Main mutation transaction boundary。 +- success、adapter throw、malformed result、cancel 和 revision conflict 的 focused + tests 与 normalized receipts。 +- evidence、determinism、protected-hash、typecheck 和 governance manifest/status。 +- 不修改旧 M16 queue、manifest、registry、catalog、index 或历史 evidence。 diff --git a/docs/corrective/C2-003-undo-redo-save-invariants.md b/docs/corrective/C2-003-undo-redo-save-invariants.md new file mode 100644 index 00000000..289b6c29 --- /dev/null +++ b/docs/corrective/C2-003-undo-redo-save-invariants.md @@ -0,0 +1,32 @@ +# C2-003 undo_redo_save_invariants + +状态:done +计划:`BLENDER_WASM_CORRECTIVE_TASK_PLAN` +阶段:P2 +Gate:G2 +依赖:`C2-002` +lifecycleStatus:`done` +blockedBy:`none` +writeScope:`production_pilot` +queueMutationAllowed:`false` + +## 目标 + +为 atomic Main mutations 增加 bounded undo/redo history、dirty tracking 和 +save/reopen invariant。undo/redo 必须恢复完整 snapshot 与 revision,save 清除 +dirty 状态,reopen 必须恢复最后保存的 snapshot;失败命令不得创建 history entry。 + +## 输入 + +- `web/protocol/corrective-main-transaction.ts` +- `web/protocol/corrective-command-registry.ts` +- `tests/golden/corrective/C2-002/manifest.json` +- `tests/golden/corrective/C1-002/result-schema.json` +- `tests/golden/corrective/C1-002/error-status-table.json` + +## 交付 + +- bounded history store with undo/redo/save/reopen operations。 +- focused positive/negative/persistence tests and deterministic receipts。 +- protected-hash, typecheck, governance, manifest and status evidence。 +- 不修改旧 M16 queue、manifest、registry、catalog、index 或历史 evidence。 diff --git a/docs/corrective/C3-001-asset-catalog-resource-provider.md b/docs/corrective/C3-001-asset-catalog-resource-provider.md new file mode 100644 index 00000000..82f0b2ce --- /dev/null +++ b/docs/corrective/C3-001-asset-catalog-resource-provider.md @@ -0,0 +1,34 @@ +# C3-001 asset_catalog_resource_provider + +状态:done +计划:`BLENDER_WASM_CORRECTIVE_TASK_PLAN` +阶段:P3 +Gate:G3 +依赖:`C2-003` +lifecycleStatus:`done` +blockedBy:`none` +writeScope:`production_pilot` +queueMutationAllowed:`false` + +## 目标 + +建立受 hash 约束的 Asset Catalog resource provider 和 active library context, +统一 local、external、packed 资源解析、provider capability、取消和缺失资源错误。 +provider 只提供资源,不直接改变 Main;写入仍由 C2 atomic transaction 负责。 + +## 输入 + +- `web/protocol/corrective-case-runner.ts` +- `web/protocol/corrective-command-registry.ts` +- `web/protocol/corrective-main-transaction.ts` +- `web/protocol/corrective-history-store.ts` +- `tests/golden/corrective/C2-003/manifest.json` +- `tests/golden/corrective/C1-002/context-schema.json` + +## 交付 + +- typed resource provider、active library identity 和 bounded source lookup。 +- local/packed/external positive lookup、missing provider、hash mismatch、cancel 和 + malformed resource negative tests。 +- deterministic receipt、protected-hash、typecheck、governance、manifest/status evidence。 +- 不修改旧 M16 queue、manifest、registry、catalog、index 或历史 evidence。 diff --git a/docs/corrective/C3-002-asset-catalog-positive-command.md b/docs/corrective/C3-002-asset-catalog-positive-command.md new file mode 100644 index 00000000..e6d5025f --- /dev/null +++ b/docs/corrective/C3-002-asset-catalog-positive-command.md @@ -0,0 +1,34 @@ +# C3-002 asset_catalog_positive_command + +状态:done +计划:`BLENDER_WASM_CORRECTIVE_TASK_PLAN` +阶段:P3 +Gate:G3 +依赖:`C3-001` +lifecycleStatus:`done` +blockedBy:`none` +writeScope:`production_pilot` +queueMutationAllowed:`false` + +## 目标 + +实现第一个 Asset Catalog 正向 command:在 active library resource 通过 hash +校验后,使用 C2 atomic Main transaction 创建一个 catalog entry。desktop 与 WASM +必须共享 command/registry/transaction/result 语义;资源缺失、hash mismatch、只读 +context 和 stale revision 必须保持 Main 不变。 + +## 输入 + +- `web/protocol/corrective-resource-provider.ts` +- `web/protocol/corrective-command-registry.ts` +- `web/protocol/corrective-main-transaction.ts` +- `tests/golden/corrective/C3-001/manifest.json` +- `tests/golden/corrective/C1-002/result-schema.json` + +## 交付 + +- typed catalog append command and desktop/WASM adapter parity。 +- positive mutation, resource negative, stale revision, malformed payload and save/dirty + focused tests。 +- deterministic receipt、protected-hash、typecheck、governance、manifest/status evidence。 +- 不修改旧 M16 queue、manifest、registry、catalog、index 或历史 evidence。 diff --git a/docs/corrective/C3-003-asset-catalog-pilot-e2e.md b/docs/corrective/C3-003-asset-catalog-pilot-e2e.md new file mode 100644 index 00000000..7fb08f3e --- /dev/null +++ b/docs/corrective/C3-003-asset-catalog-pilot-e2e.md @@ -0,0 +1,34 @@ +# C3-003 asset_catalog_pilot_e2e + +状态:done +计划:`BLENDER_WASM_CORRECTIVE_TASK_PLAN` +阶段:P3 +Gate:G3 +依赖:`C3-002` +lifecycleStatus:`done` +blockedBy:`none` +writeScope:`production_pilot` +queueMutationAllowed:`false` + +## 目标 + +在 Chromium production pilot 中运行同一 Asset Catalog fixture 和 command,覆盖 +至少五个正/负 cases:append、duplicate、missing resource、revision conflict 和 +malformed payload。验证 desktop/WASM receipt parity、Main mutation、dirty、save/reopen +和失败不变性;不运行 Firefox/WebKit。 + +## 输入 + +- `web/protocol/corrective-resource-provider.ts` +- `web/protocol/corrective-asset-catalog-command.ts` +- `web/protocol/corrective-main-transaction.ts` +- `web/protocol/corrective-history-store.ts` +- `tests/golden/corrective/C3-002/manifest.json` +- Chromium production pilot harness and its minimal fixture + +## 交付 + +- Chromium-only pilot test and five-case receipt matrix。 +- save/reopen evidence and normalized desktop/WASM comparison。 +- deterministic receipt、protected-hash、typecheck、governance、manifest/status evidence。 +- 不修改旧 M16 queue、manifest、registry、catalog、index 或历史 evidence。 diff --git a/docs/corrective/C4-001-modifier-positive-pilot.md b/docs/corrective/C4-001-modifier-positive-pilot.md new file mode 100644 index 00000000..3fcc2491 --- /dev/null +++ b/docs/corrective/C4-001-modifier-positive-pilot.md @@ -0,0 +1,32 @@ +# C4-001 modifier_positive_pilot + +状态:done +计划:`BLENDER_WASM_CORRECTIVE_TASK_PLAN` +阶段:P4 +Gate:G4 +依赖:`C2-003` +lifecycleStatus:`done` +blockedBy:`none` +writeScope:`production_pilot` +queueMutationAllowed:`false` + +## 目标 + +选择一个代表性 Modifier positive workflow,复用 C2 atomic Main、history 和 +shared desktop/WASM receipt primitive,覆盖 modifier delta、dirty、undo/redo 和 +save/reopen parity。失败路径不得产生部分 modifier mutation。 + +## 输入 + +- `web/protocol/corrective-command-registry.ts` +- `web/protocol/corrective-main-transaction.ts` +- `web/protocol/corrective-history-store.ts` +- `tests/golden/corrective/C2-003/manifest.json` + +## 交付 + +- typed modifier command and desktop/WASM positive pilot。 +- delta/save/undo parity and negative rollback tests。 +- Chromium-only evidence where applicable, deterministic receipt、protected-hash、 + typecheck、governance、manifest/status evidence。 +- 不修改旧 M16 queue、manifest、registry、catalog、index 或历史 evidence。 diff --git a/docs/corrective/C4-002-mesh-positive-pilot.md b/docs/corrective/C4-002-mesh-positive-pilot.md new file mode 100644 index 00000000..751813dc --- /dev/null +++ b/docs/corrective/C4-002-mesh-positive-pilot.md @@ -0,0 +1,32 @@ +# C4-002 mesh_positive_pilot + +状态:done +计划:`BLENDER_WASM_CORRECTIVE_TASK_PLAN` +阶段:P4 +Gate:G4 +依赖:`C4-001` +lifecycleStatus:`done` +blockedBy:`none` +writeScope:`production_pilot` +queueMutationAllowed:`false` + +## 目标 + +选择一个代表性 Mesh positive workflow,复用 C2 atomic Main、history 和 +shared desktop/WASM receipt primitive,覆盖 mesh delta、dirty、negative +rollback 和 save/reopen parity。 + +## 输入 + +- `web/protocol/corrective-command-registry.ts` +- `web/protocol/corrective-main-transaction.ts` +- `web/protocol/corrective-history-store.ts` +- `tests/golden/corrective/C4-001/manifest.json` + +## 交付 + +- typed mesh command and desktop/WASM positive pilot。 +- geometry delta/save parity and negative rollback tests。 +- Chromium-only evidence where applicable, deterministic receipt、protected-hash、 + typecheck、governance、manifest/status evidence。 +- 不修改旧 M16 queue、manifest、registry、catalog、index 或历史 evidence。 diff --git a/docs/corrective/C4-003-pilot-negative-matrix.md b/docs/corrective/C4-003-pilot-negative-matrix.md new file mode 100644 index 00000000..f33d5c05 --- /dev/null +++ b/docs/corrective/C4-003-pilot-negative-matrix.md @@ -0,0 +1,31 @@ +# C4-003 pilot_negative_matrix + +状态:done +计划:`BLENDER_WASM_CORRECTIVE_TASK_PLAN` +阶段:P4 +Gate:G4 +依赖:`C3-003`, `C4-001`, `C4-002` +lifecycleStatus:`done` +blockedBy:`none` +writeScope:`production_pilot` +queueMutationAllowed:`false` + +## 目标 + +在已完成的 Asset Catalog、Modifier 和 Mesh pilots 上运行统一 negative +matrix,验证 unsupported、revision conflict、resource missing 和 malformed +路径都保持 Main revision、内容和 dirty 状态不变。 + +## 输入 + +- `tests/golden/corrective/C3-003/manifest.json` +- `tests/golden/corrective/C4-001/manifest.json` +- `tests/golden/corrective/C4-002/manifest.json` +- `web/protocol/corrective-case-runner.ts` + +## 交付 + +- typed cross-family negative matrix and rollback report。 +- Chromium-only evidence where applicable, deterministic receipt、protected-hash、 + typecheck、governance、manifest/status evidence。 +- 不修改旧 M16 queue、manifest、registry、catalog、index 或历史 evidence。 diff --git a/docs/corrective/C5-001-cluster-legacy-gaps.md b/docs/corrective/C5-001-cluster-legacy-gaps.md new file mode 100644 index 00000000..76607013 --- /dev/null +++ b/docs/corrective/C5-001-cluster-legacy-gaps.md @@ -0,0 +1,28 @@ +# C5-001 cluster_legacy_gaps + +状态:done +计划:`BLENDER_WASM_CORRECTIVE_TASK_PLAN` +阶段:P5 +Gate:G4 +依赖:`C4-003` +lifecycleStatus:`done` +blockedBy:`none` +writeScope:`evidence_only` +queueMutationAllowed:`false` + +## 目标 + +基于已完成 pilots 和现有 legacy catalog,生成 capability family clusters +与代表性 coverage cases。只写 corrective evidence,不改变旧 M16 queue、 +manifest、registry、catalog、index 或历史 evidence。 + +## 输入 + +- `tests/golden/corrective/C4-003/manifest.json` +- `tests/golden/M15-03A/task-catalog.jsonl` +- `docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json` + +## 交付 + +- deterministic cluster report and representative-case mapping。 +- protected-hash、typecheck、governance、manifest/status evidence。 diff --git a/docs/corrective/C5-002-modularize-gap-runner.md b/docs/corrective/C5-002-modularize-gap-runner.md new file mode 100644 index 00000000..994da541 --- /dev/null +++ b/docs/corrective/C5-002-modularize-gap-runner.md @@ -0,0 +1,30 @@ +# C5-002 modularize_gap_runner + +状态:done +计划:`BLENDER_WASM_CORRECTIVE_TASK_PLAN` +阶段:P5 +Gate:G4 +依赖:`C5-001` +lifecycleStatus:`done` +blockedBy:`none` +writeScope:`production_pilot` +queueMutationAllowed:`false` + +## 目标 + +提供 family-level、data-driven corrective runner,统一 Asset Catalog、Modifier +和 Mesh pilot 的 desktop/WASM dispatch 与 normalized receipt 汇总,避免每个 +gap 重复实现协议,同时保留 atomic Main、负例和 revision contract。 + +## 输入 + +- `web/protocol/corrective-command-registry.ts` +- `web/protocol/corrective-case-runner.ts` +- `tests/golden/corrective/C5-001/manifest.json` + +## 交付 + +- typed family runner and data-driven case table。 +- cross-family desktop/WASM pilot、deterministic receipt、protected-hash、 + typecheck、governance、manifest/status evidence。 +- 不修改旧 M16 queue、manifest、registry、catalog、index 或历史 evidence。 diff --git a/docs/corrective/C5-003-migrate-legacy-gap-inventory.md b/docs/corrective/C5-003-migrate-legacy-gap-inventory.md new file mode 100644 index 00000000..68691664 --- /dev/null +++ b/docs/corrective/C5-003-migrate-legacy-gap-inventory.md @@ -0,0 +1,31 @@ +# C5-003 migrate_legacy_gap_inventory + +状态:done +计划:`BLENDER_WASM_CORRECTIVE_TASK_PLAN` +阶段:P5 +Gate:G4 +依赖:`C5-002` +lifecycleStatus:`done` +blockedBy:`none` +writeScope:`staged_generated_state` +queueMutationAllowed:`false` + +## 目标 + +把 legacy gap inventory 映射到 capability clusters 和 representative +evidence,生成 corrective staging 中的 coverage report、capability manifest +和 legacy evidence classification。正式 M16 queue、registry、catalog、index +与历史 evidence 保持只读。 + +## 输入 + +- `tests/golden/corrective/C5-001/cluster-report.json` +- `tests/golden/corrective/C5-002/manifest.json` +- `tests/golden/M15-03A/task-catalog.jsonl` +- `docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json` + +## 交付 + +- deterministic staged inventory mapping and capability manifest。 +- protected-hash、typecheck、governance、manifest/status evidence。 +- queueMutation 必须保持 `false`。 diff --git a/docs/corrective/C6-001-chromium-workflow-gate.md b/docs/corrective/C6-001-chromium-workflow-gate.md new file mode 100644 index 00000000..35fa6127 --- /dev/null +++ b/docs/corrective/C6-001-chromium-workflow-gate.md @@ -0,0 +1,29 @@ +# C6-001 chromium_workflow_gate + +状态:done +计划:`BLENDER_WASM_CORRECTIVE_TASK_PLAN` +阶段:P6 +Gate:G5 +依赖:`C5-003` +lifecycleStatus:`done` +blockedBy:`none` +writeScope:`evidence_only` +queueMutationAllowed:`false` + +## 目标 + +在 Chromium 中完成 representative workflow 的 open/edit/undo/redo/save/reopen +闭环,记录每一步的 Main revision、dirty、modifier 状态与 normalized receipt。 +失败路径不得改变 Main。 + +## 输入 + +- `web/protocol/corrective-history-store.ts` +- `web/protocol/corrective-modifier-command.ts` +- `tests/golden/corrective/C5-003/manifest.json` + +## 交付 + +- Chromium-only workflow evidence and deterministic second run。 +- protected-hash、typecheck、governance、manifest/status evidence。 +- queueMutation 必须保持 `false`。 diff --git a/docs/corrective/C6-002-performance-security-gate.md b/docs/corrective/C6-002-performance-security-gate.md new file mode 100644 index 00000000..8c2c904f --- /dev/null +++ b/docs/corrective/C6-002-performance-security-gate.md @@ -0,0 +1,29 @@ +# C6-002 performance_security_gate + +状态:done +计划:`BLENDER_WASM_CORRECTIVE_TASK_PLAN` +阶段:P6 +Gate:G5 +依赖:`C6-001` +lifecycleStatus:`done` +blockedBy:`none` +writeScope:`evidence_only` +queueMutationAllowed:`false` + +## 目标 + +在 Chromium 和 Node focused lane 中验证 corrective command latency/heap budget +与 malformed、path/context、replay security boundaries。所有拒绝路径必须保持 +Main unchanged,且 queueMutation 继续为 false。 + +## 输入 + +- `web/protocol/corrective-case-runner.ts` +- `web/protocol/corrective-resource-provider.ts` +- `tests/golden/corrective/C6-001/manifest.json` + +## 交付 + +- deterministic security report and bounded performance sample。 +- Chromium-only evidence where applicable, protected-hash、typecheck、governance、 + manifest/status evidence。 diff --git a/docs/corrective/C6-003-reactivate-queue.md b/docs/corrective/C6-003-reactivate-queue.md new file mode 100644 index 00000000..2251760c --- /dev/null +++ b/docs/corrective/C6-003-reactivate-queue.md @@ -0,0 +1,35 @@ +# C6-003 reactivate_queue + +状态:in_progress +计划:`BLENDER_WASM_CORRECTIVE_TASK_PLAN` +阶段:P6 +Gate:G5 +依赖:`C6-002` +lifecycleStatus:`in_progress` +blockedBy:`post_write_verification` +writeScope:`queue_reactivation` +queueMutationAllowed:`true`(owner review 已通过) + +## 目标 + +从已验证 capability manifest 生成 queue-reactivation dry-run、new capability +task cards、manifest/status/context candidates 和 release decision。dry-run 与 +write bytes 相同、legacy parent hashes 已在写前验证、primary mapping 唯一且 +owner review 已明确通过;原子 queue write 已完成,当前只剩 post-write gates。 + +## 输入 + +- `tests/golden/corrective/C5-003/inventory-report.json` +- `tests/golden/corrective/C5-003/capability-manifest.json` +- `tests/golden/corrective/C5-003/legacy-evidence-classification.json` +- `tests/golden/corrective/C6-002/manifest.json` +- `docs/EXECUTION_QUEUE.md` +- `tests/golden/M16-GAP-00275/manifest.json` + +## 交付 + +- `queue-reactivation-dry-run.json` and release decision。 +- protected legacy hashes, dry-run/write byte comparison, owner-review evidence, + atomic write receipt, and post-handoff gates。 +- 未获得 owner review 或任一 hash/diff 不一致时保持 `in_progress`/`blocked`, + 不写旧 queue。 diff --git a/docs/status/C0-001.md b/docs/status/C0-001.md new file mode 100644 index 00000000..7b416ec0 --- /dev/null +++ b/docs/status/C0-001.md @@ -0,0 +1,14 @@ +# C0-001 Status + +status: done +task: freeze_and_snapshot +gate: G0 +updated: 2026-08-23 America/New_York + +The read-only checkpoint was captured for legacy `M16-GAP-00274`. Queue current +task and parent `nextTask` both remain `M16-GAP-00274`; exactly one catalog task +is active and matches the generated plan first task. The two baseline JSON files +are byte-identical and the protected source hashes are unchanged. + +Evidence: `tests/golden/corrective/C0-001/`. +Next corrective task: `C0-002`. diff --git a/docs/status/C0-002.md b/docs/status/C0-002.md new file mode 100644 index 00000000..e922d30f --- /dev/null +++ b/docs/status/C0-002.md @@ -0,0 +1,47 @@ +# C0-002 Status + +status: done +task: reconcile_generated_state +gate: G0 +updated: 2026-08-23 America/New_York + +The staging-only dry run scanned 274 legacy M16 evidence directories and found +1,380 governance issues: 1,355 artifact hash drifts across 23 paths, 24 missing +`task-context.json` files, and one `PLAN_NONDETERMINISTIC` failure. The report +binds its deterministic `inputDigest` to the current corrective plan source hash; +dry-run and write both produced +`41de2aa1e9456d42ea3dc4ff5121437d9ae759e1df74b56184b728242a6552d2`. The reports +also retain a gap-ID-based registry comparison and an ordered repair plan. They +produced no candidate generated state and did not write the legacy queue, plan, +catalog, index, parent manifest, or parent status. + +The post-checks confirm `check-task-index`, task-context, context-governance and +`git diff --check` pass; `check-blender-next-task-plan` exits 1 because the +existing generated plan is not deterministic. Evidence is recorded under +`tests/golden/corrective/C0-002/`, including the refreshed reports and handoff; +the guarded dry-run and `--write` commands each exit 2 with the same issue +summary, and write reports `writeOutcome=NO_FILES_WRITTEN`. No `staged/` +directory or candidate generated file was created. + +The corrective handoff is complete. Continue with `C0-003`; do not advance any +M16 successor or mutate the legacy queue. + +Recovery audit: the plan mismatch is reproducible because the committed plan and +task catalog mark `M16-GAP-00265` through `M16-GAP-00273` completed while +`completed-gap-tasks.json` contains only `operator:asset.asset_download` from +that run. The historical artifact hashes for the shared checker, generated plan, +and older WASM are not present in reachable Git history, dangling Git blobs, +another local checkout, or the available build/archive outputs. A few source +snapshots (for example `scene-ir.ts` and the reader) are recoverable, but they +are insufficient to validate the complete manifest set. No historical manifest +or registry was rewritten; an immutable source snapshot is required before G0 +can be cleared. + +Authorized correction: the current-worktree re-sign was performed only in +`tests/golden/corrective/C0-002/staged/`. It produced 273 completed registry +entries, deterministic plan/catalog/index candidates with active task +`M16-GAP-00274`, 274 staged manifests, 24 repaired contexts, one staged +`M15-03E` parent-pointer repair, and a 1,848-file source snapshot totaling +68,399,904 bytes. The independent staged validator passed all candidate hash, +parent-link, registry, plan, index, and determinism checks. No legacy file was +overwritten and `queueMutation` remains `false`. diff --git a/docs/status/C0-003.md b/docs/status/C0-003.md new file mode 100644 index 00000000..4be0122e --- /dev/null +++ b/docs/status/C0-003.md @@ -0,0 +1,22 @@ +# C0-003 Status + +status: done +task: classify_legacy_273 +gate: G0 +updated: 2026-08-23 America/New_York + +The deterministic corrective classification covers all 273 staged legacy M16 +records. It reports 20 `FEATURE_PARITY`, 10 `METADATA_ONLY`, 219 +`NEGATIVE_BOUNDARY`, and 24 `BLOCKED` records. `FEATURE_PARITY` is fail-closed: +every such record has L2/L3 evidence, desktop positive evidence, explicit +WASM/Main mutation, `saveReopen=EXACT`, and non-empty source hashes. + +The second generation is byte-identical for the classification, cluster summary, +and report. Feature, count, evidence-reference, mapping, negative-boundary, +context, governance, plan, index, and diff gates all exited 0. The handoff binds +`inputDigest=f6779e07fcd65528e9b998b1a627b8d064ebf09b4bccde95c39530d2cf261169` +and preserves `queueMutation=false`; protected legacy source hashes match the +C0-001 checkpoint. + +Evidence and manifest: `tests/golden/corrective/C0-003/`. +Next corrective task: `C1-001`. diff --git a/docs/status/C1-001.md b/docs/status/C1-001.md new file mode 100644 index 00000000..e90ca7d9 --- /dev/null +++ b/docs/status/C1-001.md @@ -0,0 +1,21 @@ +# C1-001 Status + +status: done +task: define_parity_levels +gate: G1 +updated: 2026-08-23 America/New_York + +C1-001 defines the ordered L0-L5 parity contract and the fail-closed completion +policy. L0/L1 cover read and observe evidence; L2-L5 require progressively +stronger WASM mutation, persistence, operator semantics, and Chromium workflow +receipts. Only explicit desktop-positive, WASM/Main-mutating, exact-persistence +records with complete hashes may remain FEATURE_PARITY candidates. + +The focused contract test passed four assertions. Source bindings to the C0-003 +classification, cluster summary, and capability matrix are hash-verified. All +context, governance, plan, index, source-hash, and diff gates exited 0. +Corrective writes remain shadow-only with `queueMutation=false`; legacy +completion and queue writes remain forbidden until C6-003. + +Evidence and manifest: `tests/golden/corrective/C1-001/`. +Next corrective task: `C1-002`. diff --git a/docs/status/C1-002.md b/docs/status/C1-002.md new file mode 100644 index 00000000..e84db528 --- /dev/null +++ b/docs/status/C1-002.md @@ -0,0 +1,19 @@ +# C1-002 Status + +status: done +task: define_command_result_context_schema +gate: G1 +updated: 2026-08-23 America/New_York + +C1-002 defines versioned command, context, and result envelopes plus a closed +error/status table. Commands require request identity, base revision, an +authoritative editable context, and a payload. `FINISHED/OK` is the only +mutating result; all malformed, unsupported, cancelled, resource, invalid +context, and revision-conflict outcomes preserve Main revision. + +The focused schema test passed five assertions, source bindings are hash-checked, +and plan/context/governance/index/diff gates all exited 0. The schemas are +corrective-only and do not connect to runtime or mutate legacy evidence. + +Evidence and manifest: `tests/golden/corrective/C1-002/`. +Next corrective task: `C1-003`. diff --git a/docs/status/C1-003.md b/docs/status/C1-003.md new file mode 100644 index 00000000..63c50acf --- /dev/null +++ b/docs/status/C1-003.md @@ -0,0 +1,25 @@ +# C1-003 Status + +status: done +task: build_shared_case_runner +gate: G1 +updated: 2026-08-23 America/New_York + +C1-003 adds a shared TypeScript case runner for desktop and WASM adapters. It +validates the versioned command/context envelope, rejects stale revisions, +read-only contexts, missing external resources, malformed commands, and +malformed adapter results before a surface can claim a Main mutation. Result +normalization enforces the closed status/code table and the revision/dirty +invariants. Receipt comparison intentionally excludes diagnostic error text +while comparing semantic result fields. + +The reproducible pilot receipt was generated twice and compared byte-for-byte. +The positive case matched on both surfaces and advanced Main from revision 4 +to 5; revision-conflict and external-resource negative cases matched and kept +Main unchanged. The focused runner test passed 5/5 assertions. Determinism, +TypeScript typecheck, task/context governance, corrective-plan governance, and +`git diff --check` all exited 0. Protected legacy hashes were captured before +and after execution and are identical; the old M16 queue remains read-only. + +Evidence and manifest: `tests/golden/corrective/C1-003/`. +Next corrective task: `C2-001`. diff --git a/docs/status/C2-001.md b/docs/status/C2-001.md new file mode 100644 index 00000000..77abeb3c --- /dev/null +++ b/docs/status/C2-001.md @@ -0,0 +1,23 @@ +# C2-001 Status + +status: done +task: command_registry_and_validation +gate: G2 +updated: 2026-08-23 America/New_York + +C2-001 adds a typed corrective command registry shared by desktop and WASM +dispatch. Registry definitions require a valid command name, at least one +supported target kind, explicit mutating authorization, and an executor; +duplicate or invalid definitions fail at registration. Dispatch delegates to +the C1-003 runner, so envelope, revision, edit-mode, source-resource, target, +and authorization checks all happen before an adapter can run. + +The focused registry test passed 5/5 assertions. The pilot receipt matched on +desktop and WASM for the registered positive command. Unknown, wrong-target, +wrong-authorization, malformed, and read-only cases all returned normalized +non-mutating results with Main revision unchanged. Receipt determinism, +protected legacy hash comparison, typecheck, context/corrective governance, +task-context, and `git diff --check` all exited 0. + +Evidence and manifest: `tests/golden/corrective/C2-001/`. +Next corrective task: `C2-002`. diff --git a/docs/status/C2-002.md b/docs/status/C2-002.md new file mode 100644 index 00000000..07964a58 --- /dev/null +++ b/docs/status/C2-002.md @@ -0,0 +1,21 @@ +# C2-002 Status + +status: done +task: atomic_main_mutation +gate: G2 +updated: 2026-08-23 America/New_York + +C2-002 adds an in-memory atomic Main transaction boundary. Commands mutate a +cloned draft and publish exactly one revision/dirty update only after the +outcome passes validation. Adapter exceptions, cancellation, malformed +outcomes, and stale revisions restore the original value, revision, and dirty +state before the shared runner normalizes the failure result. + +The focused transaction test passed 5/5 assertions. Desktop and WASM positive +receipts matched with revision 4 -> 5; cancellation, malformed outcome, and +revision conflict all preserved revision 4 and the clean snapshot. Receipt +determinism, protected legacy hashes, typecheck, context/corrective governance, +task-context, and `git diff --check` all exited 0. + +Evidence and manifest: `tests/golden/corrective/C2-002/`. +Next corrective task: `C2-003`. diff --git a/docs/status/C2-003.md b/docs/status/C2-003.md new file mode 100644 index 00000000..ef790728 --- /dev/null +++ b/docs/status/C2-003.md @@ -0,0 +1,20 @@ +# C2-003 Status + +status: done +task: undo_redo_save_invariants +gate: G2 +updated: 2026-08-23 America/New_York + +C2-003 adds a bounded corrective history store over the atomic Main store. +Commits create one undo snapshot and clear redo; undo/redo restore value, +revision, and dirty state; save records a clean snapshot; reopen restores that +snapshot and clears transient history. No-op commits do not create history +entries. + +The focused history test passed 5/5 assertions. Desktop and WASM save/reopen +snapshots matched exactly. Deterministic receipt generation, protected legacy +hash comparison, typecheck, context/corrective governance, task-context, and +`git diff --check` all exited 0. + +Evidence and manifest: `tests/golden/corrective/C2-003/`. +Next corrective task: `C3-001`. diff --git a/docs/status/C3-001.md b/docs/status/C3-001.md new file mode 100644 index 00000000..4b3b7c04 --- /dev/null +++ b/docs/status/C3-001.md @@ -0,0 +1,20 @@ +# C3-001 Status + +status: done +task: asset_catalog_resource_provider +gate: G3 +updated: 2026-08-23 America/New_York + +C3-001 adds a hash-bound Asset Catalog resource resolver with typed active +library context and local/external/packed provider identities. Providers return +defensive byte copies; the resolver requires the request source to match the +active library, verifies the observed SHA-256 before publication, and fails +closed for missing providers, hash mismatch, cancellation, malformed input, +and context mismatch. Resource resolution does not mutate Main. + +The focused provider test passed 5/5 assertions. The deterministic receipt, +protected legacy hash comparison, typecheck, context/corrective governance, +task-context, and `git diff --check` all exited 0. + +Evidence and manifest: `tests/golden/corrective/C3-001/`. +Next corrective task: `C3-002`. diff --git a/docs/status/C3-002.md b/docs/status/C3-002.md new file mode 100644 index 00000000..b2aeb839 --- /dev/null +++ b/docs/status/C3-002.md @@ -0,0 +1,20 @@ +# C3-002 Status + +status: done +task: asset_catalog_positive_command +gate: G3 +updated: 2026-08-23 America/New_York + +C3-002 adds `assetCatalogAppend`, a typed positive catalog command registered +for the `ASSET_LIBRARY` target. It resolves and hash-verifies the active +resource before using the C2 atomic Main transaction to append one entry. +Duplicate IDs, malformed payloads, resource hash failure, and stale revisions +remain non-mutating. + +The focused command test passed 3/3 assertions. Desktop and WASM produced the +same normalized positive receipt and catalog snapshot. Deterministic receipt, +protected legacy hashes, typecheck, context/corrective governance, +task-context, and `git diff --check` all exited 0. + +Evidence and manifest: `tests/golden/corrective/C3-002/`. +Next corrective task: `C3-003`. diff --git a/docs/status/C3-003.md b/docs/status/C3-003.md new file mode 100644 index 00000000..0d13e968 --- /dev/null +++ b/docs/status/C3-003.md @@ -0,0 +1,22 @@ +# C3-003 Status + +status: done +task: asset_catalog_pilot_e2e +gate: G3 +updated: 2026-08-23 America/New_York + +C3-003 runs the same Asset Catalog fixture and command in Chromium through the +Vite production pilot bridge. The five-case matrix covers positive append, +duplicate entry, missing provider, stale revision, and malformed payload. The +positive desktop/WASM receipts match, Main advances once and becomes dirty; +all negative cases preserve Main. The history store then saves and reopens the +catalog snapshot with revision 5 and dirty=false. + +The Chromium-only pilot passed twice on separate ports and its receipts are +byte-identical. C3-002 regression, typecheck, context/corrective governance, +task-context, protected legacy hashes, and `git diff --check` all exited 0. +The existing App React refresh preamble warning remains in the dev server log, +but the pilot page and all assertions completed successfully. + +Evidence and manifest: `tests/golden/corrective/C3-003/`. +Next corrective task: `C4-001`. diff --git a/docs/status/C4-001.md b/docs/status/C4-001.md new file mode 100644 index 00000000..b02e7e33 --- /dev/null +++ b/docs/status/C4-001.md @@ -0,0 +1,22 @@ +# C4-001 Status + +status: done +task: modifier_positive_pilot +gate: G4 +updated: 2026-08-23 America/New_York + +C4-001 implements a typed `modifierSetEnabled` command for the `MODIFIER` +target. The command validates its two-field payload, resolves the modifier +before mutation, and uses the shared atomic Main transaction so malformed, +stale, wrong-target, and unknown-modifier cases preserve revision and dirty +state. + +The focused Node test and Chromium-only pilot cover desktop/WASM delta parity, +dirty state, negative rollback, undo/redo, save, and reopen. Deterministic +receipts and C3-002 regression are recorded under +`tests/golden/corrective/C4-001/`; legacy queue mutation remains forbidden. + +All focused, Chromium, deterministic, regression, typecheck, governance, +protected-hash, and diff gates exited 0. Handoff manifest: +`tests/golden/corrective/C4-001/manifest.json`. Next corrective task: +`C4-002`. diff --git a/docs/status/C4-002.md b/docs/status/C4-002.md new file mode 100644 index 00000000..80ffab0c --- /dev/null +++ b/docs/status/C4-002.md @@ -0,0 +1,22 @@ +# C4-002 Status + +status: done +task: mesh_positive_pilot +gate: G4 +updated: 2026-08-23 America/New_York + +C4-002 implements a typed `meshTranslateVertex` command for the `MESH` target. +It validates a bounded finite three-axis delta, resolves the vertex before +mutation, and uses the shared atomic Main transaction so malformed, stale, +wrong-target, unknown-vertex, and overflow cases preserve geometry and Main +state. + +The focused Node test and Chromium-only pilot cover desktop/WASM geometry delta +parity, dirty state, negative rollback, undo/redo, save, and reopen. Evidence +is under `tests/golden/corrective/C4-002/`; legacy queue mutation remains +forbidden. + +All focused, Chromium, deterministic, regression, typecheck, governance, +protected-hash, and diff gates exited 0. Handoff manifest: +`tests/golden/corrective/C4-002/manifest.json`. Next corrective task: +`C4-003`. diff --git a/docs/status/C4-003.md b/docs/status/C4-003.md new file mode 100644 index 00000000..388f0bc5 --- /dev/null +++ b/docs/status/C4-003.md @@ -0,0 +1,20 @@ +# C4-003 Status + +status: done +task: pilot_negative_matrix +gate: G4 +updated: 2026-08-23 America/New_York + +C4-003 runs a shared negative matrix over the completed Asset Catalog, +Modifier, and Mesh pilots. It covers malformed payloads, unsupported targets, +stale revisions, and missing external resources; every result is normalized to +a closed failure code and all three Main snapshots remain unchanged. + +The Node matrix and Chromium-only pilot are deterministic and include the +focused family regressions. Evidence is under +`tests/golden/corrective/C4-003/`; legacy queue mutation remains forbidden. + +All focused, Chromium, deterministic, regression, typecheck, governance, +protected-hash, and diff gates exited 0. Handoff manifest: +`tests/golden/corrective/C4-003/manifest.json`. Next corrective task: +`C5-001`. diff --git a/docs/status/C5-001.md b/docs/status/C5-001.md new file mode 100644 index 00000000..7bef23b0 --- /dev/null +++ b/docs/status/C5-001.md @@ -0,0 +1,21 @@ +# C5-001 Status + +status: done +task: cluster_legacy_gaps +gate: G4 +updated: 2026-08-23 America/New_York + +C5-001 generates a deterministic evidence-only cluster report from the legacy +task catalog and the corrective capability matrix. It records ASSET_CATALOG, +MODIFIER, and MESH family counts, state distributions, representative legacy +tasks, source-gap coverage, and the completed C3/C4 representative workflows. +No legacy queue or generated state is mutated. + +The report, deterministic second run, cluster gate, protected hashes, context +governance, task context, and diff evidence are under +`tests/golden/corrective/C5-001/`. + +All cluster, deterministic, typecheck, governance, protected-hash, task-context, +and diff gates exited 0. Handoff manifest: +`tests/golden/corrective/C5-001/manifest.json`. Next corrective task: +`C5-002`. diff --git a/docs/status/C5-002.md b/docs/status/C5-002.md new file mode 100644 index 00000000..c53d22cc --- /dev/null +++ b/docs/status/C5-002.md @@ -0,0 +1,20 @@ +# C5-002 Status + +status: done +task: modularize_gap_runner +gate: G4 +updated: 2026-08-23 America/New_York + +C5-002 adds a typed, data-driven family runner that validates unique case IDs, +supported families, registry identity, and revisions before dispatching through +the shared command registry. It returns normalized receipts and a stable +ASSET_CATALOG/MODIFIER/MESH summary without duplicating per-gap protocol logic. + +The Node focused test and Chromium-only pilot cover six positive cases across +three families and both surfaces. Evidence is under +`tests/golden/corrective/C5-002/`; legacy queue mutation remains forbidden. + +All focused, Chromium, deterministic, regression, typecheck, governance, +protected-hash, task-context, and diff gates exited 0. Handoff manifest: +`tests/golden/corrective/C5-002/manifest.json`. Next corrective task: +`C5-003`. diff --git a/docs/status/C5-003.md b/docs/status/C5-003.md new file mode 100644 index 00000000..27991737 --- /dev/null +++ b/docs/status/C5-003.md @@ -0,0 +1,16 @@ +# C5-003 Status + +status: done +task: migrate_legacy_gap_inventory +gate: G4 +updated: 2026-08-23 America/New_York + +C5-003 produces staged-only legacy inventory mapping from the C5-001 clusters, +C5-002 manifest, catalog, and capability template. It emits coverage, +capability-manifest, and evidence-classification views while preserving the +planned lifecycle and avoiding any formal queue or generated-state mutation. + +All inventory, deterministic, typecheck, governance, protected-hash, +task-context, and diff gates exited 0. Handoff manifest: +`tests/golden/corrective/C5-003/manifest.json`. Next corrective task: +`C6-001`. diff --git a/docs/status/C6-001.md b/docs/status/C6-001.md new file mode 100644 index 00000000..569a4cf1 --- /dev/null +++ b/docs/status/C6-001.md @@ -0,0 +1,19 @@ +# C6-001 Status + +status: done +task: chromium_workflow_gate +gate: G5 +updated: 2026-08-23 America/New_York + +C6-001 runs the Chromium-only representative workflow through open, edit, +save, undo, redo, and reopen. Each transition records the shared normalized +receipt and history snapshot; save/reopen returns the edited modifier with +dirty=false, while undo restores the original revision and value. + +Evidence is under `tests/golden/corrective/C6-001/`; legacy queue mutation +remains forbidden. + +All Chromium, deterministic, typecheck, regression, governance, protected-hash, +task-context, and diff gates exited 0. Handoff manifest: +`tests/golden/corrective/C6-001/manifest.json`. Next corrective task: +`C6-002`. diff --git a/docs/status/C6-002.md b/docs/status/C6-002.md new file mode 100644 index 00000000..da2ad7e0 --- /dev/null +++ b/docs/status/C6-002.md @@ -0,0 +1,19 @@ +# C6-002 Status + +status: done +task: performance_security_gate +gate: G5 +updated: 2026-08-23 America/New_York + +C6-002 samples 50 independent WASM modifier dispatches in Chromium and checks +p95/max latency against the bounded 100/250 ms budget. The same run verifies +replay stale revisions, malformed payloads, and an external resource path that +does not match the active library context; all rejection paths preserve Main. + +Evidence is under `tests/golden/corrective/C6-002/`; legacy queue mutation +remains forbidden. + +All Chromium, normalized deterministic, typecheck, regression, governance, +protected-hash, task-context, and diff gates exited 0. Handoff manifest: +`tests/golden/corrective/C6-002/manifest.json`. Next corrective task: +`C6-003`. diff --git a/docs/status/C6-003.md b/docs/status/C6-003.md new file mode 100644 index 00000000..961f2684 --- /dev/null +++ b/docs/status/C6-003.md @@ -0,0 +1,18 @@ +# C6-003 Status + +status: in_progress +task: reactivate_queue +gate: G5 +updated: 2026-08-23 America/New_York + +The queue reactivation dry-run is complete and deterministic. It records the +legacy queue and parent hashes, three unique capability mappings, retained +negative evidence, expected additive candidates, and rollback path. The dry-run +and write preview bytes match exactly, and the explicit owner review approved +the protected write. + +The queue write completed atomically with exit code 0. `M16-GAP-00276` is now +`done`, the completion registry/plan/catalog/index were regenerated, and the +legacy queue points to `M16-GAP-00277` with parent manifest +`tests/golden/M16-GAP-00276/manifest.json`. The before/after bytes and rollback +receipt are recorded in `tests/golden/corrective/C6-003/`. diff --git a/docs/status/M16-GAP-00276.md b/docs/status/M16-GAP-00276.md new file mode 100644 index 00000000..f5c9fc72 --- /dev/null +++ b/docs/status/M16-GAP-00276.md @@ -0,0 +1,29 @@ +# M16-GAP-00276 Status + +status: done +task: asset.clear_single operator LOCAL_EXACT slice +updated: 2026-08-23 America/New_York + +scope: + +- The fixture links one object from external `WebGapAssetClearSingle.blend`. + Blender desktop observes the linked-data boundary as `poll=false`, records + `CANCELLED` for `ASSET_OT_clear_single`, and confirms no Main mutation. + Save/reopen preserves the Library record exactly. +- WASM/Main reads the same external Library with stable source path, + `EXTERNAL_REQUIRED` status, and an empty dependency closure. The comparator + confirms save/reopen stability and malformed-input rejection without Main + mutation. + +evidence: + +- Fixture generation, desktop checker, npm comparator, direct comparator, and + task context checks passed with exit code 0. Chromium-only policy was + preserved and no Firefox/WebKit run was made. Blender's expected missing + external-library warning is recorded by the comparator while the Library + state remains exact. +- Focused evidence is complete and the C6-003 owner review approved the + protected queue reactivation. The queue write is recorded under the C6-003 + evidence root and advances the next task to `M16-GAP-00277`. + +nextTask: `M16-GAP-00277` diff --git a/docs/status/M16-GAP-00277.md b/docs/status/M16-GAP-00277.md new file mode 100644 index 00000000..80d81dad --- /dev/null +++ b/docs/status/M16-GAP-00277.md @@ -0,0 +1,28 @@ +# M16-GAP-00277 Status + +status: done +task: asset.library_refresh operator LOCAL_EXACT slice +updated: 2026-08-23 America/New_York + +scope: + +- The fixture links one object from external `WebGapAssetLibraryRefresh.blend`. + Blender desktop observes the missing Asset Browser context as `poll=false`, + records `CANCELLED` for `ASSET_OT_library_refresh`, and confirms no Main + mutation. Save/reopen preserves the Library record exactly. +- WASM/Main reads the same external Library with stable source path, + `EXTERNAL_REQUIRED` status, and an empty dependency closure. The comparator + confirms save/reopen stability and malformed-input rejection without Main + mutation. + +evidence: + +- Fixture generation, desktop checker, npm comparator, direct comparator, and + task context checks passed with exit code 0. Chromium-only policy was + preserved and no Firefox/WebKit run was made. Blender's expected missing + external-library warning is recorded by the comparator while the Library + state remains exact. +- The focused reader path already exports Library state; no unrelated + data-block, editor, browser, or native-stub behavior was changed. + +nextTask: `M16-GAP-00278` diff --git a/docs/status/M16-GAP-00278.md b/docs/status/M16-GAP-00278.md new file mode 100644 index 00000000..e41352fb --- /dev/null +++ b/docs/status/M16-GAP-00278.md @@ -0,0 +1,27 @@ +# M16-GAP-00278 Status + +status: done +task: asset.library_reload_listing operator LOCAL_EXACT slice +updated: 2026-08-24 America/New_York + +scope: + +- The fixture links one object from external `WebGapAssetLibraryReloadListing.blend`. + Blender desktop observes the non-remote-library boundary as `poll=false`, records + `CANCELLED` for `ASSET_OT_library_reload_listing`, and confirms no Main mutation. + Save/reopen preserves the Library record exactly. +- WASM/Main reads the same external Library with stable source path, + `EXTERNAL_REQUIRED` status, and an empty dependency closure. The comparator + confirms save/reopen stability and malformed-input rejection without Main mutation. + +evidence: + +- Fixture generation, desktop checker, npm comparator, direct comparator, and + task-context handoff checks passed with exit code 0. Chromium-only policy was + preserved and no Firefox/WebKit run was made. Blender's expected missing + external-library warning is recorded by the comparator while the Library state + remains exact. +- The focused reader path already exports Library state; no unrelated data-block, + editor, browser, or native-stub behavior was changed. + +nextTask: `M16-GAP-00279` diff --git a/docs/status/M16-GAP-00279.md b/docs/status/M16-GAP-00279.md new file mode 100644 index 00000000..ffe48137 --- /dev/null +++ b/docs/status/M16-GAP-00279.md @@ -0,0 +1,27 @@ +# M16-GAP-00279 Status + +status: done +task: asset.mark operator LOCAL_EXACT slice +updated: 2026-08-24 America/New_York + +scope: + +- The minimal fixture marks `WebGapAssetMarkObject` as an asset and persists the + author, description, and `operator-mark` tag. Blender desktop observes the + missing Asset Browser/editor context as `poll=false`, records `CANCELLED` for + `ASSET_OT_mark`, and confirms no Main mutation. Save/reopen preserves the + asset metadata exactly. +- WASM/Main reads the same object asset metadata through Scene IR with + `marked=true`, matching author, description, and tags. The comparator confirms + save/reopen stability and malformed-input rejection without Main mutation. + +evidence: + +- Fixture generation, Blender desktop checker, WASM rebuild, npm comparator, + direct comparator, and task-context handoff checks passed with exit code 0. + Chromium-only policy was preserved and no Firefox/WebKit run was made. +- The focused reader path exports asset metadata for object IDs and the Scene IR + protocol declares the corresponding optional `assetData` shape; no unrelated + data-block, editor, browser, or native-stub behavior was changed. + +nextTask: `M16-GAP-00280` diff --git a/docs/status/M16-GAP-00280.md b/docs/status/M16-GAP-00280.md new file mode 100644 index 00000000..e5756604 --- /dev/null +++ b/docs/status/M16-GAP-00280.md @@ -0,0 +1,27 @@ +# M16-GAP-00280 Status + +status: done +task: asset.mark_single operator LOCAL_EXACT slice +updated: 2026-08-24 America/New_York + +scope: + +- The minimal fixture contains one marked object, `WebGapAssetMarkSingleObject`, + with stable author, description, and `operator-mark-single` tag metadata. + Blender desktop observes `asset.mark_single` as `poll=false`, records + `CANCELLED`, and confirms no Main mutation. Save/reopen preserves the + metadata exactly. +- WASM/Main reads the same fixture through the existing Scene IR asset metadata + path. The comparator confirms the object metadata matches desktop, survives + save/reopen, and rejects malformed input without changing Main. + +evidence: + +- Fixture generation, desktop checker, npm generated-gap comparator, direct + comparator, and task-context handoff checks passed with exit code 0. + Chromium-only policy was preserved and no Firefox/WebKit run was made. +- This task adds only the `mark_single` fixture/checker/comparator evidence; + the reader, Scene IR protocol, and WASM artifacts are the already verified + asset metadata path from M16-GAP-00279. + +nextTask: `M16-GAP-00281` diff --git a/docs/status/M16-GAP-00281.md b/docs/status/M16-GAP-00281.md new file mode 100644 index 00000000..cabf20a8 --- /dev/null +++ b/docs/status/M16-GAP-00281.md @@ -0,0 +1,27 @@ +# M16-GAP-00281 Status + +status: done +task: asset.open_containing_blend_file operator LOCAL_EXACT slice +updated: 2026-08-24 America/New_York + +scope: + +- The minimal fixture links one object from external `WebGapOpenContaining.blend`. + Blender desktop observes the no-selected-asset boundary as `poll=false`, records + `CANCELLED` for `asset.open_containing_blend_file`, and confirms no Main mutation. + Save/reopen preserves the Library record exactly. +- WASM/Main reads the same external Library with stable source path, + `EXTERNAL_REQUIRED` status, and an empty dependency closure. The comparator + confirms save/reopen stability and malformed-input rejection without Main + mutation. + +evidence: + +- Fixture generation, desktop checker, npm generated-gap comparator, direct + comparator, and task-context handoff checks passed with exit code 0. + Chromium-only policy was preserved and no Firefox/WebKit run was made. +- This task adds only the `open_containing_blend_file` fixture/checker/comparator + evidence; the reader, Scene IR library path, and WASM artifacts are the already + verified external Library path from adjacent asset operator tasks. + +nextTask: `M16-GAP-00282` diff --git a/docs/status/WBV2-BASELINE.md b/docs/status/WBV2-BASELINE.md new file mode 100644 index 00000000..bd940fe2 --- /dev/null +++ b/docs/status/WBV2-BASELINE.md @@ -0,0 +1,11 @@ +# WBV2 baseline status + +status: done +task: capability queue transition baseline +updated: 2026-08-24 America/New_York + +The WBV2 production lane starts without rewriting the immutable M16 manifests. The +legacy coverage checkpoint remains `M16-GAP-00282`, whose parent manifest is +`tests/golden/M16-GAP-00281/manifest.json`. Corrective C0-C6 evidence remains historical. + +nextTask: `WBV2-P0-001` diff --git a/docs/status/WBV2-P0-001.md b/docs/status/WBV2-P0-001.md new file mode 100644 index 00000000..6428f9d3 --- /dev/null +++ b/docs/status/WBV2-P0-001.md @@ -0,0 +1,22 @@ +# WBV2-P0-001 Status + +status: done +task: reconcile_scope_and_checkpoints +gate: G0 +updated: 2026-08-24 America/New_York + +The production queue is now capability-oriented. `WBV2-P0-001` is the only ready +task and is parented by the new transition baseline. The legacy M16 list remains +an immutable coverage lane with `M16-GAP-00282` as its checkpoint; its manifests, +reports, and generated index are not rewritten as capability evidence. + +The control plane reports 6,900 legacy cases, 281 completed coverage records, and +three capability clusters covering nine related legacy gaps. Corrective C0-C6 +pilots and their Chromium receipts are retained as historical reusable primitives. + +All focused plan, ancestry, control-plane, execution-health, task-context, +context-governance, execution-control, and diff gates passed with exit code 0. +No Blender/WASM startup was attempted for the legacy coverage task because it is +not the production lane. + +nextTask: `WBV2-P0-002` diff --git a/docs/tasks/M16-GAP-00277.md b/docs/tasks/M16-GAP-00277.md new file mode 100644 index 00000000..ed855dbf --- /dev/null +++ b/docs/tasks/M16-GAP-00277.md @@ -0,0 +1,37 @@ +# M16-GAP-00277: operator:asset.library_refresh LOCAL_EXACT slice + +- task: M16-GAP-00277 +- parent: M16-GAP-00276 +- status: in_progress +- gap: operator:asset.library_refresh +- ownerFamily: OPERATOR +- targetImplementationClass: LOCAL_EXACT + +## 目标 + +Make the same minimal fixture produce observable operator:asset.library_refresh data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers. + +## 输入与范围 + +- Fixture: `tests/files/web/generated/M16-GAP-00277-operator-asset.library_refresh.blend` +- Generator: `tools/web/generated/M16-GAP-00277.py` +- Production: `blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp` +- Checker: `tools/web/check-generated-gap.mjs` +- Do: field read, desktop/WASM comparison, save/reopen, structured report. +- Do not: other gaps, Firefox/WebKit, or full editor behavior. + +## 验收 + +build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00277.py -- tests/files/web/generated/M16-GAP-00277-operator-asset.library_refresh.blend +npm --prefix web run test:generated-gap -- --task M16-GAP-00277 +node tools/web/check-generated-gap.mjs --task M16-GAP-00277 + +Malformed/unsupported, cancellation, duplicate, over-budget, or hash-drift cases must keep in_progress; they must not change Main revision or advance nextTask. + +## 交付与回滚 + +- Reports: `tests/golden/M16-GAP-00277/` +- Status: `docs/status/M16-GAP-00277.md` +- Manifest: `tests/golden/M16-GAP-00277/manifest.json` +- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00277 --write` +- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence. diff --git a/docs/tasks/M16-GAP-00278.md b/docs/tasks/M16-GAP-00278.md new file mode 100644 index 00000000..1b4c3d3a --- /dev/null +++ b/docs/tasks/M16-GAP-00278.md @@ -0,0 +1,37 @@ +# M16-GAP-00278: operator:asset.library_reload_listing LOCAL_EXACT slice + +- task: M16-GAP-00278 +- parent: M16-GAP-00277 +- status: in_progress +- gap: operator:asset.library_reload_listing +- ownerFamily: OPERATOR +- targetImplementationClass: LOCAL_EXACT + +## 目标 + +Make the same minimal fixture produce observable operator:asset.library_reload_listing data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers. + +## 输入与范围 + +- Fixture: `tests/files/web/generated/M16-GAP-00278-operator-asset.library_reload_listing.blend` +- Generator: `tools/web/generated/M16-GAP-00278.py` +- Production: `blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp` +- Checker: `tools/web/check-generated-gap.mjs` +- Do: field read, desktop/WASM comparison, save/reopen, structured report. +- Do not: other gaps, Firefox/WebKit, or full editor behavior. + +## 验收 + +build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00278.py -- tests/files/web/generated/M16-GAP-00278-operator-asset.library_reload_listing.blend +npm --prefix web run test:generated-gap -- --task M16-GAP-00278 +node tools/web/check-generated-gap.mjs --task M16-GAP-00278 + +Malformed/unsupported, cancellation, duplicate, over-budget, or hash-drift cases must keep in_progress; they must not change Main revision or advance nextTask. + +## 交付与回滚 + +- Reports: `tests/golden/M16-GAP-00278/` +- Status: `docs/status/M16-GAP-00278.md` +- Manifest: `tests/golden/M16-GAP-00278/manifest.json` +- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00278 --write` +- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence. diff --git a/docs/tasks/M16-GAP-00279.md b/docs/tasks/M16-GAP-00279.md new file mode 100644 index 00000000..d77cc1ff --- /dev/null +++ b/docs/tasks/M16-GAP-00279.md @@ -0,0 +1,37 @@ +# M16-GAP-00279: operator:asset.mark LOCAL_EXACT slice + +- task: M16-GAP-00279 +- parent: M16-GAP-00278 +- status: in_progress +- gap: operator:asset.mark +- ownerFamily: OPERATOR +- targetImplementationClass: LOCAL_EXACT + +## 目标 + +Make the same minimal fixture produce observable operator:asset.mark data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers. + +## 输入与范围 + +- Fixture: `tests/files/web/generated/M16-GAP-00279-operator-asset.mark.blend` +- Generator: `tools/web/generated/M16-GAP-00279.py` +- Production: `blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp` +- Checker: `tools/web/check-generated-gap.mjs` +- Do: field read, desktop/WASM comparison, save/reopen, structured report. +- Do not: other gaps, Firefox/WebKit, or full editor behavior. + +## 验收 + +build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00279.py -- tests/files/web/generated/M16-GAP-00279-operator-asset.mark.blend +npm --prefix web run test:generated-gap -- --task M16-GAP-00279 +node tools/web/check-generated-gap.mjs --task M16-GAP-00279 + +Malformed/unsupported, cancellation, duplicate, over-budget, or hash-drift cases must keep in_progress; they must not change Main revision or advance nextTask. + +## 交付与回滚 + +- Reports: `tests/golden/M16-GAP-00279/` +- Status: `docs/status/M16-GAP-00279.md` +- Manifest: `tests/golden/M16-GAP-00279/manifest.json` +- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00279 --write` +- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence. diff --git a/docs/tasks/M16-GAP-00280.md b/docs/tasks/M16-GAP-00280.md new file mode 100644 index 00000000..2ca73863 --- /dev/null +++ b/docs/tasks/M16-GAP-00280.md @@ -0,0 +1,37 @@ +# M16-GAP-00280: operator:asset.mark_single LOCAL_EXACT slice + +- task: M16-GAP-00280 +- parent: M16-GAP-00279 +- status: in_progress +- gap: operator:asset.mark_single +- ownerFamily: OPERATOR +- targetImplementationClass: LOCAL_EXACT + +## 目标 + +Make the same minimal fixture produce observable operator:asset.mark_single data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers. + +## 输入与范围 + +- Fixture: `tests/files/web/generated/M16-GAP-00280-operator-asset.mark_single.blend` +- Generator: `tools/web/generated/M16-GAP-00280.py` +- Production: `blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp` +- Checker: `tools/web/check-generated-gap.mjs` +- Do: field read, desktop/WASM comparison, save/reopen, structured report. +- Do not: other gaps, Firefox/WebKit, or full editor behavior. + +## 验收 + +build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00280.py -- tests/files/web/generated/M16-GAP-00280-operator-asset.mark_single.blend +npm --prefix web run test:generated-gap -- --task M16-GAP-00280 +node tools/web/check-generated-gap.mjs --task M16-GAP-00280 + +Malformed/unsupported, cancellation, duplicate, over-budget, or hash-drift cases must keep in_progress; they must not change Main revision or advance nextTask. + +## 交付与回滚 + +- Reports: `tests/golden/M16-GAP-00280/` +- Status: `docs/status/M16-GAP-00280.md` +- Manifest: `tests/golden/M16-GAP-00280/manifest.json` +- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00280 --write` +- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence. diff --git a/docs/tasks/M16-GAP-00281.md b/docs/tasks/M16-GAP-00281.md new file mode 100644 index 00000000..23bceed7 --- /dev/null +++ b/docs/tasks/M16-GAP-00281.md @@ -0,0 +1,37 @@ +# M16-GAP-00281: operator:asset.open_containing_blend_file LOCAL_EXACT slice + +- task: M16-GAP-00281 +- parent: M16-GAP-00280 +- status: in_progress +- gap: operator:asset.open_containing_blend_file +- ownerFamily: OPERATOR +- targetImplementationClass: LOCAL_EXACT + +## 目标 + +Make the same minimal fixture produce observable operator:asset.open_containing_blend_file data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers. + +## 输入与范围 + +- Fixture: `tests/files/web/generated/M16-GAP-00281-operator-asset.open_containing_blend_file.blend` +- Generator: `tools/web/generated/M16-GAP-00281.py` +- Production: `blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp` +- Checker: `tools/web/check-generated-gap.mjs` +- Do: field read, desktop/WASM comparison, save/reopen, structured report. +- Do not: other gaps, Firefox/WebKit, or full editor behavior. + +## 验收 + +build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00281.py -- tests/files/web/generated/M16-GAP-00281-operator-asset.open_containing_blend_file.blend +npm --prefix web run test:generated-gap -- --task M16-GAP-00281 +node tools/web/check-generated-gap.mjs --task M16-GAP-00281 + +Malformed/unsupported, cancellation, duplicate, over-budget, or hash-drift cases must keep in_progress; they must not change Main revision or advance nextTask. + +## 交付与回滚 + +- Reports: `tests/golden/M16-GAP-00281/` +- Status: `docs/status/M16-GAP-00281.md` +- Manifest: `tests/golden/M16-GAP-00281/manifest.json` +- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00281 --write` +- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence. diff --git a/docs/tasks/WBV2-P0-001.md b/docs/tasks/WBV2-P0-001.md new file mode 100644 index 00000000..f4cc2cf4 --- /dev/null +++ b/docs/tasks/WBV2-P0-001.md @@ -0,0 +1,47 @@ +# WBV2-P0-001: reconcile scope and checkpoints + +- task: WBV2-P0-001 +- parent: WBV2-BASELINE +- status: in_progress +- gap: workflow:execution-control-plane +- ownerFamily: PROGRAM +- targetImplementationClass: LOCAL_BOUNDED + +## 目标 + +冻结 V1 与 Blender 5.2 full-parity 的业务边界,建立 capability production lane +和 legacy coverage lane,并证明 V2 指针、legacy checkpoint 与 corrective handoff +没有互相覆盖。 + +## 输入与范围 + +- `docs/BLENDER_WEB_PARITY_EXECUTION_PLAN_V2.md` +- `docs/BLENDER_WEB_PARITY_TASK_PLAN_V2.json` +- `docs/BLENDER_WEB_EXECUTION_CONTROL_PLANE.md` +- `docs/EXECUTION_QUEUE.md` +- `tests/golden/corrective/C6-003/handoff.json` +- `docs/WEB_BLENDER_MODELER_V1_SCOPE.md` + +做:计划 schema、依赖图、能力分类、双 lane index、checkpoint ancestry、protected +hash 交叉检查。保留 legacy manifest/status/corrective handoff,不重写历史证据。 + +## 验收 + +```bash +node tools/web/check-web-parity-v2-plan.mjs +node tools/web/check-corrective-plan.mjs +node tools/web/check-context-governance.mjs +npm --prefix web run test:execution-control-plane +git diff --check +``` + +Malformed plan、重复 ready task、parent mismatch、hash drift 或缺失 task card 必须失败, +不得推进 capability successor 或改写 legacy checkpoint。 + +## 交付与回滚 + +- Reports: `tests/golden/WBV2-P0-001/` +- Status: `docs/status/WBV2-P0-001.md` +- Manifest: `tests/golden/WBV2-P0-001/manifest.json` +- Handoff: `node tools/web/check-task-context.mjs --task WBV2-P0-001 --write` +- Rollback: restore `WBV2-BASELINE` as the capability queue tail; leave M16 and corrective evidence unchanged. diff --git a/docs/tasks/WBV2-P0-002.md b/docs/tasks/WBV2-P0-002.md new file mode 100644 index 00000000..9febb260 --- /dev/null +++ b/docs/tasks/WBV2-P0-002.md @@ -0,0 +1,47 @@ +# WBV2-P0-002: generate Blender 5.2 inventory and parity map + +- task: WBV2-P0-002 +- parent: WBV2-P0-001 +- status: in_progress +- gap: workflow:blender52-inventory +- ownerFamily: PARITY +- targetImplementationClass: LOCAL_BOUNDED + +## 目标 + +Generate a deterministic Blender 5.2 inventory and map each entry to a capability +family, completion class, parity level, owner, and evidence state. This is an +inventory change only; it must not claim feature parity or modify Blender runtime. + +## 输入与范围 + +- `docs/BLENDER_WEB_EXECUTION_CONTROL_PLANE.md` +- `tests/golden/corrective/C5-003/capability-manifest.json` +- `tests/golden/corrective/C5-003/coverage-report.json` +- `tests/golden/corrective/C5-003/inventory-gate.log` + +Do: stable IDs, family clustering, unknown classification, deterministic report and +source hashes. Do not: edit legacy manifests, execute arbitrary Blender operators, +or run Firefox/WebKit. + +## 验收 + +```bash +node tools/web/check-execution-control-plane.mjs +node tools/web/check-web-parity-v2-plan.mjs +node tools/web/check-corrective-plan.mjs +npm --prefix web run test:context-governance +``` + +Malformed inventory input, duplicate IDs, unsupported classification, hash drift, or +budget overflow must fail closed and keep this task `in_progress`/`blocked`; no +successor may be selected. + +## 交付与回滚 + +- Reports: `tests/golden/WBV2-P0-002/` +- Status: `docs/status/WBV2-P0-002.md` +- Manifest: `tests/golden/WBV2-P0-002/manifest.json` +- Handoff: `node tools/web/check-task-context.mjs --task WBV2-P0-002 --write` +- Rollback: remove only this task's report/status/manifest/context; restore + `WBV2-P0-001` as the queue tail without rewriting its evidence. diff --git a/nextTask.md b/nextTask.md index 9699b510..b42db39a 100644 --- a/nextTask.md +++ b/nextTask.md @@ -27,9 +27,10 @@ stop condition is reached: 2. Read only the current task card, parent manifest/status, and the focused files named by the task context. Never open the full `next-task-plan.json`, all `docs/status` logs, or historical plans. -3. Complete exactly the current task: implement the scoped behavior, generate - the fixture, run the focused desktop Blender check, npm comparator, and - direct comparator, then verify save/reopen and the malformed/negative case. +3. Complete exactly the current task using the commands in its task card. Legacy + `M*-GAP-*` tasks are coverage-only; capability `WBV2-*` tasks own production + behavior and may use shared desktop/WASM/Chromium runners. Do not run a + desktop fixture or comparator unless the current card requires it. Chromium is the only permitted browser runtime. 4. Keep long output in `tests/golden//command.log`; report only exit codes, short tails, artifact paths, and SHA-256 values. @@ -39,6 +40,7 @@ stop condition is reached: 6. Run every post-handoff gate: ```bash + node tools/web/check-execution-control-plane.mjs node tools/web/check-blender-next-task-plan.mjs node tools/web/check-task-index.mjs npm --prefix web run test:task-context @@ -238,12 +240,12 @@ Recorded: 2026-08-22 America/New_York | Field | Value | | --- | --- | -| Current task when this file was written | `M16-GAP-00227` | +| Current task when this file was written | `WBV2-P0-002` | | Current task state | `in_progress` | -| Parent manifest | `tests/golden/M16-GAP-00226/manifest.json` | -| Current task card | `docs/tasks/M16-GAP-00227.md` | -| Current task-context nextTask | `M16-GAP-00228` | -| Focused command | `npm --prefix web run test:generated-gap -- --task M16-GAP-00227` | +| Parent manifest | `tests/golden/WBV2-P0-001/manifest.json` | +| Current task card | `docs/tasks/WBV2-P0-002.md` | +| Current task-context nextTask | `WBV2-P0-003` | +| Focused command | `node tools/web/check-execution-control-plane.mjs` | The snapshot is informational and may become stale. On every resume, the queue, parent manifest, and fresh `print-task-context` output win. Never infer a task diff --git a/tests/files/web/generated/M16-GAP-00276-operator-asset.clear_single.blend b/tests/files/web/generated/M16-GAP-00276-operator-asset.clear_single.blend new file mode 100644 index 00000000..af7603d7 Binary files /dev/null and b/tests/files/web/generated/M16-GAP-00276-operator-asset.clear_single.blend differ diff --git a/tests/files/web/generated/M16-GAP-00277-operator-asset.library_refresh.blend b/tests/files/web/generated/M16-GAP-00277-operator-asset.library_refresh.blend new file mode 100644 index 00000000..e59c57d8 Binary files /dev/null and b/tests/files/web/generated/M16-GAP-00277-operator-asset.library_refresh.blend differ diff --git a/tests/files/web/generated/M16-GAP-00278-operator-asset.library_reload_listing.blend b/tests/files/web/generated/M16-GAP-00278-operator-asset.library_reload_listing.blend new file mode 100644 index 00000000..2f770e7d Binary files /dev/null and b/tests/files/web/generated/M16-GAP-00278-operator-asset.library_reload_listing.blend differ diff --git a/tests/files/web/generated/M16-GAP-00279-operator-asset.mark.blend b/tests/files/web/generated/M16-GAP-00279-operator-asset.mark.blend new file mode 100644 index 00000000..e64e5e1a Binary files /dev/null and b/tests/files/web/generated/M16-GAP-00279-operator-asset.mark.blend differ diff --git a/tests/files/web/generated/M16-GAP-00280-operator-asset.mark_single.blend b/tests/files/web/generated/M16-GAP-00280-operator-asset.mark_single.blend new file mode 100644 index 00000000..5c058cda Binary files /dev/null and b/tests/files/web/generated/M16-GAP-00280-operator-asset.mark_single.blend differ diff --git a/tests/files/web/generated/M16-GAP-00281-operator-asset.open_containing_blend_file.blend b/tests/files/web/generated/M16-GAP-00281-operator-asset.open_containing_blend_file.blend new file mode 100644 index 00000000..02fca0d7 Binary files /dev/null and b/tests/files/web/generated/M16-GAP-00281-operator-asset.open_containing_blend_file.blend differ diff --git a/tests/files/web/generated/WebGapAssetClearSingle.blend b/tests/files/web/generated/WebGapAssetClearSingle.blend new file mode 100644 index 00000000..5efce38d Binary files /dev/null and b/tests/files/web/generated/WebGapAssetClearSingle.blend differ diff --git a/tests/files/web/generated/WebGapAssetLibraryRefresh.blend b/tests/files/web/generated/WebGapAssetLibraryRefresh.blend new file mode 100644 index 00000000..32e88ce5 Binary files /dev/null and b/tests/files/web/generated/WebGapAssetLibraryRefresh.blend differ diff --git a/tests/files/web/generated/WebGapAssetLibraryReloadListing.blend b/tests/files/web/generated/WebGapAssetLibraryReloadListing.blend new file mode 100644 index 00000000..625d69fc Binary files /dev/null and b/tests/files/web/generated/WebGapAssetLibraryReloadListing.blend differ diff --git a/tests/files/web/generated/WebGapOpenContaining.blend b/tests/files/web/generated/WebGapOpenContaining.blend new file mode 100644 index 00000000..5301c830 Binary files /dev/null and b/tests/files/web/generated/WebGapOpenContaining.blend differ diff --git a/tests/golden/M15-03A/completed-gap-tasks.json b/tests/golden/M15-03A/completed-gap-tasks.json index 0e3aed2e..8a20ace9 100644 --- a/tests/golden/M15-03A/completed-gap-tasks.json +++ b/tests/golden/M15-03A/completed-gap-tasks.json @@ -273,5 +273,11 @@ "operator:asset.catalog_undo", "operator:asset.catalog_undo_push", "operator:asset.catalogs_save", - "operator:asset.clear" + "operator:asset.clear", + "operator:asset.clear_single", + "operator:asset.library_refresh", + "operator:asset.library_reload_listing", + "operator:asset.mark", + "operator:asset.mark_single", + "operator:asset.open_containing_blend_file" ] diff --git a/tests/golden/M15-03A/next-task-plan.json b/tests/golden/M15-03A/next-task-plan.json index 7eba41cd..f76c0a32 100644 --- a/tests/golden/M15-03A/next-task-plan.json +++ b/tests/golden/M15-03A/next-task-plan.json @@ -13,14 +13,14 @@ }, "completions": { "path": "tests/golden/M15-03A/completed-gap-tasks.json", - "sha256": "32f4c11ebf8563f3aa500583f3979c1b38d711cc7328a428968118f0375b90b4" + "sha256": "1dfc9c4ae8fb9a135e624ca4f9fe1ea10500ef16a2567a3cccdcfe48fbc38466" } }, "summary": { "taskCount": 6900, "active": 1, - "pending": 6624, - "completed": 275, + "pending": 6618, + "completed": 281, "blocked": 0, "byWave": { "M16": 2667, @@ -6363,7 +6363,7 @@ "gapId": "operator:asset.clear_single", "ownerFamily": "OPERATOR", "sourceTask": "M15-01B", - "state": "active", + "state": "completed", "dependencies": [], "targetImplementationClass": "LOCAL_EXACT", "fixture": { @@ -6386,7 +6386,7 @@ "gapId": "operator:asset.library_refresh", "ownerFamily": "OPERATOR", "sourceTask": "M15-01B", - "state": "pending", + "state": "completed", "dependencies": [], "targetImplementationClass": "LOCAL_EXACT", "fixture": { @@ -6409,7 +6409,7 @@ "gapId": "operator:asset.library_reload_listing", "ownerFamily": "OPERATOR", "sourceTask": "M15-01B", - "state": "pending", + "state": "completed", "dependencies": [], "targetImplementationClass": "LOCAL_EXACT", "fixture": { @@ -6432,7 +6432,7 @@ "gapId": "operator:asset.mark", "ownerFamily": "OPERATOR", "sourceTask": "M15-01B", - "state": "pending", + "state": "completed", "dependencies": [], "targetImplementationClass": "LOCAL_EXACT", "fixture": { @@ -6455,7 +6455,7 @@ "gapId": "operator:asset.mark_single", "ownerFamily": "OPERATOR", "sourceTask": "M15-01B", - "state": "pending", + "state": "completed", "dependencies": [], "targetImplementationClass": "LOCAL_EXACT", "fixture": { @@ -6478,7 +6478,7 @@ "gapId": "operator:asset.open_containing_blend_file", "ownerFamily": "OPERATOR", "sourceTask": "M15-01B", - "state": "pending", + "state": "completed", "dependencies": [], "targetImplementationClass": "LOCAL_EXACT", "fixture": { @@ -6501,7 +6501,7 @@ "gapId": "operator:asset.screenshot_preview", "ownerFamily": "OPERATOR", "sourceTask": "M15-01B", - "state": "pending", + "state": "active", "dependencies": [], "targetImplementationClass": "LOCAL_EXACT", "fixture": { @@ -158734,7 +158734,7 @@ ] } ], - "firstTask": "M16-GAP-00276", + "firstTask": "M16-GAP-00282", "closureGate": "M15-03E", "nextTask": "M15-03B" } diff --git a/tests/golden/M15-03A/task-catalog.jsonl b/tests/golden/M15-03A/task-catalog.jsonl index 4a54acf3..c9d93efb 100644 --- a/tests/golden/M15-03A/task-catalog.jsonl +++ b/tests/golden/M15-03A/task-catalog.jsonl @@ -273,13 +273,13 @@ {"id":"M16-GAP-00273","gapId":"operator:asset.catalog_undo_push","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} {"id":"M16-GAP-00274","gapId":"operator:asset.catalogs_save","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} {"id":"M16-GAP-00275","gapId":"operator:asset.clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} -{"id":"M16-GAP-00276","gapId":"operator:asset.clear_single","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"active","targetImplementationClass":"LOCAL_EXACT"} -{"id":"M16-GAP-00277","gapId":"operator:asset.library_refresh","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} -{"id":"M16-GAP-00278","gapId":"operator:asset.library_reload_listing","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} -{"id":"M16-GAP-00279","gapId":"operator:asset.mark","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} -{"id":"M16-GAP-00280","gapId":"operator:asset.mark_single","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} -{"id":"M16-GAP-00281","gapId":"operator:asset.open_containing_blend_file","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} -{"id":"M16-GAP-00282","gapId":"operator:asset.screenshot_preview","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00276","gapId":"operator:asset.clear_single","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00277","gapId":"operator:asset.library_refresh","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00278","gapId":"operator:asset.library_reload_listing","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00279","gapId":"operator:asset.mark","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00280","gapId":"operator:asset.mark_single","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00281","gapId":"operator:asset.open_containing_blend_file","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00282","gapId":"operator:asset.screenshot_preview","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"active","targetImplementationClass":"LOCAL_EXACT"} {"id":"M16-GAP-00283","gapId":"operator:asset.tag_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} {"id":"M16-GAP-00284","gapId":"operator:asset.tag_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} {"id":"M16-GAP-00285","gapId":"operator:boid.rule_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} diff --git a/tests/golden/M15-03A/task-index.json b/tests/golden/M15-03A/task-index.json index d8f09827..1d9cc9d3 100644 --- a/tests/golden/M15-03A/task-index.json +++ b/tests/golden/M15-03A/task-index.json @@ -1 +1 @@ -{"schemaVersion":1,"operation":"BLENDER_TASK_CONTEXT_INDEX","source":{"path":"tests/golden/M15-03A/next-task-plan.json","sha256":"edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17"},"catalog":{"path":"tests/golden/M15-03A/task-catalog.jsonl","sha256":"da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d"},"taskCount":6900,"activeTask":"M16-GAP-00276","entries":{"M16-GAP-00001":{"line":0,"offset":0,"length":165,"previous":null,"next":"M16-GAP-00002"},"M16-GAP-00002":{"line":1,"offset":165,"length":167,"previous":"M16-GAP-00001","next":"M16-GAP-00003"},"M16-GAP-00003":{"line":2,"offset":332,"length":164,"previous":"M16-GAP-00002","next":"M16-GAP-00004"},"M16-GAP-00004":{"line":3,"offset":496,"length":165,"previous":"M16-GAP-00003","next":"M16-GAP-00005"},"M16-GAP-00005":{"line":4,"offset":661,"length":169,"previous":"M16-GAP-00004","next":"M16-GAP-00006"},"M16-GAP-00006":{"line":5,"offset":830,"length":164,"previous":"M16-GAP-00005","next":"M16-GAP-00007"},"M16-GAP-00007":{"line":6,"offset":994,"length":165,"previous":"M16-GAP-00006","next":"M16-GAP-00008"},"M16-GAP-00008":{"line":7,"offset":1159,"length":177,"previous":"M16-GAP-00007","next":"M16-GAP-00009"},"M16-GAP-00009":{"line":8,"offset":1336,"length":171,"previous":"M16-GAP-00008","next":"M16-GAP-00010"},"M16-GAP-00010":{"line":9,"offset":1507,"length":166,"previous":"M16-GAP-00009","next":"M16-GAP-00011"},"M16-GAP-00011":{"line":10,"offset":1673,"length":166,"previous":"M16-GAP-00010","next":"M16-GAP-00012"},"M16-GAP-00012":{"line":11,"offset":1839,"length":164,"previous":"M16-GAP-00011","next":"M16-GAP-00013"},"M16-GAP-00013":{"line":12,"offset":2003,"length":167,"previous":"M16-GAP-00012","next":"M16-GAP-00014"},"M16-GAP-00014":{"line":13,"offset":2170,"length":163,"previous":"M16-GAP-00013","next":"M16-GAP-00015"},"M16-GAP-00015":{"line":14,"offset":2333,"length":167,"previous":"M16-GAP-00014","next":"M16-GAP-00016"},"M16-GAP-00016":{"line":15,"offset":2500,"length":167,"previous":"M16-GAP-00015","next":"M16-GAP-00017"},"M16-GAP-00017":{"line":16,"offset":2667,"length":165,"previous":"M16-GAP-00016","next":"M16-GAP-00018"},"M16-GAP-00018":{"line":17,"offset":2832,"length":175,"previous":"M16-GAP-00017","next":"M16-GAP-00019"},"M16-GAP-00019":{"line":18,"offset":3007,"length":169,"previous":"M16-GAP-00018","next":"M16-GAP-00020"},"M16-GAP-00020":{"line":19,"offset":3176,"length":164,"previous":"M16-GAP-00019","next":"M16-GAP-00021"},"M16-GAP-00021":{"line":20,"offset":3340,"length":165,"previous":"M16-GAP-00020","next":"M16-GAP-00022"},"M16-GAP-00022":{"line":21,"offset":3505,"length":164,"previous":"M16-GAP-00021","next":"M16-GAP-00023"},"M16-GAP-00023":{"line":22,"offset":3669,"length":166,"previous":"M16-GAP-00022","next":"M16-GAP-00024"},"M16-GAP-00024":{"line":23,"offset":3835,"length":163,"previous":"M16-GAP-00023","next":"M16-GAP-00025"},"M16-GAP-00025":{"line":24,"offset":3998,"length":166,"previous":"M16-GAP-00024","next":"M16-GAP-00026"},"M16-GAP-00026":{"line":25,"offset":4164,"length":165,"previous":"M16-GAP-00025","next":"M16-GAP-00027"},"M16-GAP-00027":{"line":26,"offset":4329,"length":172,"previous":"M16-GAP-00026","next":"M16-GAP-00028"},"M16-GAP-00028":{"line":27,"offset":4501,"length":168,"previous":"M16-GAP-00027","next":"M16-GAP-00029"},"M16-GAP-00029":{"line":28,"offset":4669,"length":164,"previous":"M16-GAP-00028","next":"M16-GAP-00030"},"M16-GAP-00030":{"line":29,"offset":4833,"length":161,"previous":"M16-GAP-00029","next":"M16-GAP-00031"},"M16-GAP-00031":{"line":30,"offset":4994,"length":158,"previous":"M16-GAP-00030","next":"M16-GAP-00032"},"M16-GAP-00032":{"line":31,"offset":5152,"length":158,"previous":"M16-GAP-00031","next":"M16-GAP-00033"},"M16-GAP-00033":{"line":32,"offset":5310,"length":160,"previous":"M16-GAP-00032","next":"M16-GAP-00034"},"M16-GAP-00034":{"line":33,"offset":5470,"length":158,"previous":"M16-GAP-00033","next":"M16-GAP-00035"},"M16-GAP-00035":{"line":34,"offset":5628,"length":157,"previous":"M16-GAP-00034","next":"M16-GAP-00036"},"M16-GAP-00036":{"line":35,"offset":5785,"length":158,"previous":"M16-GAP-00035","next":"M16-GAP-00037"},"M16-GAP-00037":{"line":36,"offset":5943,"length":162,"previous":"M16-GAP-00036","next":"M16-GAP-00038"},"M16-GAP-00038":{"line":37,"offset":6105,"length":170,"previous":"M16-GAP-00037","next":"M16-GAP-00039"},"M16-GAP-00039":{"line":38,"offset":6275,"length":158,"previous":"M16-GAP-00038","next":"M16-GAP-00040"},"M16-GAP-00040":{"line":39,"offset":6433,"length":166,"previous":"M16-GAP-00039","next":"M16-GAP-00041"},"M16-GAP-00041":{"line":40,"offset":6599,"length":161,"previous":"M16-GAP-00040","next":"M16-GAP-00042"},"M16-GAP-00042":{"line":41,"offset":6760,"length":161,"previous":"M16-GAP-00041","next":"M16-GAP-00043"},"M16-GAP-00043":{"line":42,"offset":6921,"length":166,"previous":"M16-GAP-00042","next":"M16-GAP-00044"},"M16-GAP-00044":{"line":43,"offset":7087,"length":163,"previous":"M16-GAP-00043","next":"M16-GAP-00045"},"M16-GAP-00045":{"line":44,"offset":7250,"length":160,"previous":"M16-GAP-00044","next":"M16-GAP-00046"},"M16-GAP-00046":{"line":45,"offset":7410,"length":158,"previous":"M16-GAP-00045","next":"M16-GAP-00047"},"M16-GAP-00047":{"line":46,"offset":7568,"length":175,"previous":"M16-GAP-00046","next":"M16-GAP-00048"},"M16-GAP-00048":{"line":47,"offset":7743,"length":172,"previous":"M16-GAP-00047","next":"M16-GAP-00049"},"M16-GAP-00049":{"line":48,"offset":7915,"length":172,"previous":"M16-GAP-00048","next":"M16-GAP-00050"},"M16-GAP-00050":{"line":49,"offset":8087,"length":172,"previous":"M16-GAP-00049","next":"M16-GAP-00051"},"M16-GAP-00051":{"line":50,"offset":8259,"length":171,"previous":"M16-GAP-00050","next":"M16-GAP-00052"},"M16-GAP-00052":{"line":51,"offset":8430,"length":175,"previous":"M16-GAP-00051","next":"M16-GAP-00053"},"M16-GAP-00053":{"line":52,"offset":8605,"length":171,"previous":"M16-GAP-00052","next":"M16-GAP-00054"},"M16-GAP-00054":{"line":53,"offset":8776,"length":174,"previous":"M16-GAP-00053","next":"M16-GAP-00055"},"M16-GAP-00055":{"line":54,"offset":8950,"length":173,"previous":"M16-GAP-00054","next":"M16-GAP-00056"},"M16-GAP-00056":{"line":55,"offset":9123,"length":173,"previous":"M16-GAP-00055","next":"M16-GAP-00057"},"M16-GAP-00057":{"line":56,"offset":9296,"length":175,"previous":"M16-GAP-00056","next":"M16-GAP-00058"},"M16-GAP-00058":{"line":57,"offset":9471,"length":172,"previous":"M16-GAP-00057","next":"M16-GAP-00059"},"M16-GAP-00059":{"line":58,"offset":9643,"length":173,"previous":"M16-GAP-00058","next":"M16-GAP-00060"},"M16-GAP-00060":{"line":59,"offset":9816,"length":174,"previous":"M16-GAP-00059","next":"M16-GAP-00061"},"M16-GAP-00061":{"line":60,"offset":9990,"length":174,"previous":"M16-GAP-00060","next":"M16-GAP-00062"},"M16-GAP-00062":{"line":61,"offset":10164,"length":177,"previous":"M16-GAP-00061","next":"M16-GAP-00063"},"M16-GAP-00063":{"line":62,"offset":10341,"length":175,"previous":"M16-GAP-00062","next":"M16-GAP-00064"},"M16-GAP-00064":{"line":63,"offset":10516,"length":173,"previous":"M16-GAP-00063","next":"M16-GAP-00065"},"M16-GAP-00065":{"line":64,"offset":10689,"length":173,"previous":"M16-GAP-00064","next":"M16-GAP-00066"},"M16-GAP-00066":{"line":65,"offset":10862,"length":174,"previous":"M16-GAP-00065","next":"M16-GAP-00067"},"M16-GAP-00067":{"line":66,"offset":11036,"length":176,"previous":"M16-GAP-00066","next":"M16-GAP-00068"},"M16-GAP-00068":{"line":67,"offset":11212,"length":171,"previous":"M16-GAP-00067","next":"M16-GAP-00069"},"M16-GAP-00069":{"line":68,"offset":11383,"length":171,"previous":"M16-GAP-00068","next":"M16-GAP-00070"},"M16-GAP-00070":{"line":69,"offset":11554,"length":186,"previous":"M16-GAP-00069","next":"M16-GAP-00071"},"M16-GAP-00071":{"line":70,"offset":11740,"length":190,"previous":"M16-GAP-00070","next":"M16-GAP-00072"},"M16-GAP-00072":{"line":71,"offset":11930,"length":157,"previous":"M16-GAP-00071","next":"M16-GAP-00073"},"M16-GAP-00073":{"line":72,"offset":12087,"length":168,"previous":"M16-GAP-00072","next":"M16-GAP-00074"},"M16-GAP-00074":{"line":73,"offset":12255,"length":168,"previous":"M16-GAP-00073","next":"M16-GAP-00075"},"M16-GAP-00075":{"line":74,"offset":12423,"length":160,"previous":"M16-GAP-00074","next":"M16-GAP-00076"},"M16-GAP-00076":{"line":75,"offset":12583,"length":160,"previous":"M16-GAP-00075","next":"M16-GAP-00077"},"M16-GAP-00077":{"line":76,"offset":12743,"length":157,"previous":"M16-GAP-00076","next":"M16-GAP-00078"},"M16-GAP-00078":{"line":77,"offset":12900,"length":163,"previous":"M16-GAP-00077","next":"M16-GAP-00079"},"M16-GAP-00079":{"line":78,"offset":13063,"length":164,"previous":"M16-GAP-00078","next":"M16-GAP-00080"},"M16-GAP-00080":{"line":79,"offset":13227,"length":172,"previous":"M16-GAP-00079","next":"M16-GAP-00081"},"M16-GAP-00081":{"line":80,"offset":13399,"length":167,"previous":"M16-GAP-00080","next":"M16-GAP-00082"},"M16-GAP-00082":{"line":81,"offset":13566,"length":159,"previous":"M16-GAP-00081","next":"M16-GAP-00083"},"M16-GAP-00083":{"line":82,"offset":13725,"length":161,"previous":"M16-GAP-00082","next":"M16-GAP-00084"},"M16-GAP-00084":{"line":83,"offset":13886,"length":158,"previous":"M16-GAP-00083","next":"M16-GAP-00085"},"M16-GAP-00085":{"line":84,"offset":14044,"length":164,"previous":"M16-GAP-00084","next":"M16-GAP-00086"},"M16-GAP-00086":{"line":85,"offset":14208,"length":158,"previous":"M16-GAP-00085","next":"M16-GAP-00087"},"M16-GAP-00087":{"line":86,"offset":14366,"length":170,"previous":"M16-GAP-00086","next":"M16-GAP-00088"},"M16-GAP-00088":{"line":87,"offset":14536,"length":168,"previous":"M16-GAP-00087","next":"M16-GAP-00089"},"M16-GAP-00089":{"line":88,"offset":14704,"length":159,"previous":"M16-GAP-00088","next":"M16-GAP-00090"},"M16-GAP-00090":{"line":89,"offset":14863,"length":158,"previous":"M16-GAP-00089","next":"M16-GAP-00091"},"M16-GAP-00091":{"line":90,"offset":15021,"length":163,"previous":"M16-GAP-00090","next":"M16-GAP-00092"},"M16-GAP-00092":{"line":91,"offset":15184,"length":166,"previous":"M16-GAP-00091","next":"M16-GAP-00093"},"M16-GAP-00093":{"line":92,"offset":15350,"length":157,"previous":"M16-GAP-00092","next":"M16-GAP-00094"},"M16-GAP-00094":{"line":93,"offset":15507,"length":159,"previous":"M16-GAP-00093","next":"M16-GAP-00095"},"M16-GAP-00095":{"line":94,"offset":15666,"length":162,"previous":"M16-GAP-00094","next":"M16-GAP-00096"},"M16-GAP-00096":{"line":95,"offset":15828,"length":161,"previous":"M16-GAP-00095","next":"M16-GAP-00097"},"M16-GAP-00097":{"line":96,"offset":15989,"length":160,"previous":"M16-GAP-00096","next":"M16-GAP-00098"},"M16-GAP-00098":{"line":97,"offset":16149,"length":160,"previous":"M16-GAP-00097","next":"M16-GAP-00099"},"M16-GAP-00099":{"line":98,"offset":16309,"length":167,"previous":"M16-GAP-00098","next":"M16-GAP-00100"},"M16-GAP-00100":{"line":99,"offset":16476,"length":164,"previous":"M16-GAP-00099","next":"M16-GAP-00101"},"M16-GAP-00101":{"line":100,"offset":16640,"length":163,"previous":"M16-GAP-00100","next":"M16-GAP-00102"},"M16-GAP-00102":{"line":101,"offset":16803,"length":160,"previous":"M16-GAP-00101","next":"M16-GAP-00103"},"M16-GAP-00103":{"line":102,"offset":16963,"length":171,"previous":"M16-GAP-00102","next":"M16-GAP-00104"},"M16-GAP-00104":{"line":103,"offset":17134,"length":170,"previous":"M16-GAP-00103","next":"M16-GAP-00105"},"M16-GAP-00105":{"line":104,"offset":17304,"length":176,"previous":"M16-GAP-00104","next":"M16-GAP-00106"},"M16-GAP-00106":{"line":105,"offset":17480,"length":168,"previous":"M16-GAP-00105","next":"M16-GAP-00107"},"M16-GAP-00107":{"line":106,"offset":17648,"length":167,"previous":"M16-GAP-00106","next":"M16-GAP-00108"},"M16-GAP-00108":{"line":107,"offset":17815,"length":157,"previous":"M16-GAP-00107","next":"M16-GAP-00109"},"M16-GAP-00109":{"line":108,"offset":17972,"length":157,"previous":"M16-GAP-00108","next":"M16-GAP-00110"},"M16-GAP-00110":{"line":109,"offset":18129,"length":168,"previous":"M16-GAP-00109","next":"M16-GAP-00111"},"M16-GAP-00111":{"line":110,"offset":18297,"length":157,"previous":"M16-GAP-00110","next":"M16-GAP-00112"},"M16-GAP-00112":{"line":111,"offset":18454,"length":162,"previous":"M16-GAP-00111","next":"M16-GAP-00113"},"M16-GAP-00113":{"line":112,"offset":18616,"length":169,"previous":"M16-GAP-00112","next":"M16-GAP-00114"},"M16-GAP-00114":{"line":113,"offset":18785,"length":165,"previous":"M16-GAP-00113","next":"M16-GAP-00115"},"M16-GAP-00115":{"line":114,"offset":18950,"length":171,"previous":"M16-GAP-00114","next":"M16-GAP-00116"},"M16-GAP-00116":{"line":115,"offset":19121,"length":164,"previous":"M16-GAP-00115","next":"M16-GAP-00117"},"M16-GAP-00117":{"line":116,"offset":19285,"length":166,"previous":"M16-GAP-00116","next":"M16-GAP-00118"},"M16-GAP-00118":{"line":117,"offset":19451,"length":169,"previous":"M16-GAP-00117","next":"M16-GAP-00119"},"M16-GAP-00119":{"line":118,"offset":19620,"length":174,"previous":"M16-GAP-00118","next":"M16-GAP-00120"},"M16-GAP-00120":{"line":119,"offset":19794,"length":171,"previous":"M16-GAP-00119","next":"M16-GAP-00121"},"M16-GAP-00121":{"line":120,"offset":19965,"length":178,"previous":"M16-GAP-00120","next":"M16-GAP-00122"},"M16-GAP-00122":{"line":121,"offset":20143,"length":170,"previous":"M16-GAP-00121","next":"M16-GAP-00123"},"M16-GAP-00123":{"line":122,"offset":20313,"length":171,"previous":"M16-GAP-00122","next":"M16-GAP-00124"},"M16-GAP-00124":{"line":123,"offset":20484,"length":178,"previous":"M16-GAP-00123","next":"M16-GAP-00125"},"M16-GAP-00125":{"line":124,"offset":20662,"length":175,"previous":"M16-GAP-00124","next":"M16-GAP-00126"},"M16-GAP-00126":{"line":125,"offset":20837,"length":173,"previous":"M16-GAP-00125","next":"M16-GAP-00127"},"M16-GAP-00127":{"line":126,"offset":21010,"length":178,"previous":"M16-GAP-00126","next":"M16-GAP-00128"},"M16-GAP-00128":{"line":127,"offset":21188,"length":166,"previous":"M16-GAP-00127","next":"M16-GAP-00129"},"M16-GAP-00129":{"line":128,"offset":21354,"length":163,"previous":"M16-GAP-00128","next":"M16-GAP-00130"},"M16-GAP-00130":{"line":129,"offset":21517,"length":165,"previous":"M16-GAP-00129","next":"M16-GAP-00131"},"M16-GAP-00131":{"line":130,"offset":21682,"length":176,"previous":"M16-GAP-00130","next":"M16-GAP-00132"},"M16-GAP-00132":{"line":131,"offset":21858,"length":169,"previous":"M16-GAP-00131","next":"M16-GAP-00133"},"M16-GAP-00133":{"line":132,"offset":22027,"length":170,"previous":"M16-GAP-00132","next":"M16-GAP-00134"},"M16-GAP-00134":{"line":133,"offset":22197,"length":170,"previous":"M16-GAP-00133","next":"M16-GAP-00135"},"M16-GAP-00135":{"line":134,"offset":22367,"length":174,"previous":"M16-GAP-00134","next":"M16-GAP-00136"},"M16-GAP-00136":{"line":135,"offset":22541,"length":173,"previous":"M16-GAP-00135","next":"M16-GAP-00137"},"M16-GAP-00137":{"line":136,"offset":22714,"length":173,"previous":"M16-GAP-00136","next":"M16-GAP-00138"},"M16-GAP-00138":{"line":137,"offset":22887,"length":172,"previous":"M16-GAP-00137","next":"M16-GAP-00139"},"M16-GAP-00139":{"line":138,"offset":23059,"length":176,"previous":"M16-GAP-00138","next":"M16-GAP-00140"},"M16-GAP-00140":{"line":139,"offset":23235,"length":171,"previous":"M16-GAP-00139","next":"M16-GAP-00141"},"M16-GAP-00141":{"line":140,"offset":23406,"length":173,"previous":"M16-GAP-00140","next":"M16-GAP-00142"},"M16-GAP-00142":{"line":141,"offset":23579,"length":171,"previous":"M16-GAP-00141","next":"M16-GAP-00143"},"M16-GAP-00143":{"line":142,"offset":23750,"length":164,"previous":"M16-GAP-00142","next":"M16-GAP-00144"},"M16-GAP-00144":{"line":143,"offset":23914,"length":165,"previous":"M16-GAP-00143","next":"M16-GAP-00145"},"M16-GAP-00145":{"line":144,"offset":24079,"length":176,"previous":"M16-GAP-00144","next":"M16-GAP-00146"},"M16-GAP-00146":{"line":145,"offset":24255,"length":166,"previous":"M16-GAP-00145","next":"M16-GAP-00147"},"M16-GAP-00147":{"line":146,"offset":24421,"length":168,"previous":"M16-GAP-00146","next":"M16-GAP-00148"},"M16-GAP-00148":{"line":147,"offset":24589,"length":170,"previous":"M16-GAP-00147","next":"M16-GAP-00149"},"M16-GAP-00149":{"line":148,"offset":24759,"length":173,"previous":"M16-GAP-00148","next":"M16-GAP-00150"},"M16-GAP-00150":{"line":149,"offset":24932,"length":170,"previous":"M16-GAP-00149","next":"M16-GAP-00151"},"M16-GAP-00151":{"line":150,"offset":25102,"length":177,"previous":"M16-GAP-00150","next":"M16-GAP-00152"},"M16-GAP-00152":{"line":151,"offset":25279,"length":175,"previous":"M16-GAP-00151","next":"M16-GAP-00153"},"M16-GAP-00153":{"line":152,"offset":25454,"length":171,"previous":"M16-GAP-00152","next":"M16-GAP-00154"},"M16-GAP-00154":{"line":153,"offset":25625,"length":178,"previous":"M16-GAP-00153","next":"M16-GAP-00155"},"M16-GAP-00155":{"line":154,"offset":25803,"length":172,"previous":"M16-GAP-00154","next":"M16-GAP-00156"},"M16-GAP-00156":{"line":155,"offset":25975,"length":175,"previous":"M16-GAP-00155","next":"M16-GAP-00157"},"M16-GAP-00157":{"line":156,"offset":26150,"length":173,"previous":"M16-GAP-00156","next":"M16-GAP-00158"},"M16-GAP-00158":{"line":157,"offset":26323,"length":182,"previous":"M16-GAP-00157","next":"M16-GAP-00159"},"M16-GAP-00159":{"line":158,"offset":26505,"length":173,"previous":"M16-GAP-00158","next":"M16-GAP-00160"},"M16-GAP-00160":{"line":159,"offset":26678,"length":181,"previous":"M16-GAP-00159","next":"M16-GAP-00161"},"M16-GAP-00161":{"line":160,"offset":26859,"length":172,"previous":"M16-GAP-00160","next":"M16-GAP-00162"},"M16-GAP-00162":{"line":161,"offset":27031,"length":171,"previous":"M16-GAP-00161","next":"M16-GAP-00163"},"M16-GAP-00163":{"line":162,"offset":27202,"length":173,"previous":"M16-GAP-00162","next":"M16-GAP-00164"},"M16-GAP-00164":{"line":163,"offset":27375,"length":177,"previous":"M16-GAP-00163","next":"M16-GAP-00165"},"M16-GAP-00165":{"line":164,"offset":27552,"length":177,"previous":"M16-GAP-00164","next":"M16-GAP-00166"},"M16-GAP-00166":{"line":165,"offset":27729,"length":180,"previous":"M16-GAP-00165","next":"M16-GAP-00167"},"M16-GAP-00167":{"line":166,"offset":27909,"length":182,"previous":"M16-GAP-00166","next":"M16-GAP-00168"},"M16-GAP-00168":{"line":167,"offset":28091,"length":181,"previous":"M16-GAP-00167","next":"M16-GAP-00169"},"M16-GAP-00169":{"line":168,"offset":28272,"length":181,"previous":"M16-GAP-00168","next":"M16-GAP-00170"},"M16-GAP-00170":{"line":169,"offset":28453,"length":174,"previous":"M16-GAP-00169","next":"M16-GAP-00171"},"M16-GAP-00171":{"line":170,"offset":28627,"length":180,"previous":"M16-GAP-00170","next":"M16-GAP-00172"},"M16-GAP-00172":{"line":171,"offset":28807,"length":179,"previous":"M16-GAP-00171","next":"M16-GAP-00173"},"M16-GAP-00173":{"line":172,"offset":28986,"length":176,"previous":"M16-GAP-00172","next":"M16-GAP-00174"},"M16-GAP-00174":{"line":173,"offset":29162,"length":175,"previous":"M16-GAP-00173","next":"M16-GAP-00175"},"M16-GAP-00175":{"line":174,"offset":29337,"length":176,"previous":"M16-GAP-00174","next":"M16-GAP-00176"},"M16-GAP-00176":{"line":175,"offset":29513,"length":178,"previous":"M16-GAP-00175","next":"M16-GAP-00177"},"M16-GAP-00177":{"line":176,"offset":29691,"length":171,"previous":"M16-GAP-00176","next":"M16-GAP-00178"},"M16-GAP-00178":{"line":177,"offset":29862,"length":179,"previous":"M16-GAP-00177","next":"M16-GAP-00179"},"M16-GAP-00179":{"line":178,"offset":30041,"length":176,"previous":"M16-GAP-00178","next":"M16-GAP-00180"},"M16-GAP-00180":{"line":179,"offset":30217,"length":176,"previous":"M16-GAP-00179","next":"M16-GAP-00181"},"M16-GAP-00181":{"line":180,"offset":30393,"length":173,"previous":"M16-GAP-00180","next":"M16-GAP-00182"},"M16-GAP-00182":{"line":181,"offset":30566,"length":180,"previous":"M16-GAP-00181","next":"M16-GAP-00183"},"M16-GAP-00183":{"line":182,"offset":30746,"length":181,"previous":"M16-GAP-00182","next":"M16-GAP-00184"},"M16-GAP-00184":{"line":183,"offset":30927,"length":177,"previous":"M16-GAP-00183","next":"M16-GAP-00185"},"M16-GAP-00185":{"line":184,"offset":31104,"length":177,"previous":"M16-GAP-00184","next":"M16-GAP-00186"},"M16-GAP-00186":{"line":185,"offset":31281,"length":173,"previous":"M16-GAP-00185","next":"M16-GAP-00187"},"M16-GAP-00187":{"line":186,"offset":31454,"length":180,"previous":"M16-GAP-00186","next":"M16-GAP-00188"},"M16-GAP-00188":{"line":187,"offset":31634,"length":181,"previous":"M16-GAP-00187","next":"M16-GAP-00189"},"M16-GAP-00189":{"line":188,"offset":31815,"length":178,"previous":"M16-GAP-00188","next":"M16-GAP-00190"},"M16-GAP-00190":{"line":189,"offset":31993,"length":179,"previous":"M16-GAP-00189","next":"M16-GAP-00191"},"M16-GAP-00191":{"line":190,"offset":32172,"length":172,"previous":"M16-GAP-00190","next":"M16-GAP-00192"},"M16-GAP-00192":{"line":191,"offset":32344,"length":175,"previous":"M16-GAP-00191","next":"M16-GAP-00193"},"M16-GAP-00193":{"line":192,"offset":32519,"length":177,"previous":"M16-GAP-00192","next":"M16-GAP-00194"},"M16-GAP-00194":{"line":193,"offset":32696,"length":180,"previous":"M16-GAP-00193","next":"M16-GAP-00195"},"M16-GAP-00195":{"line":194,"offset":32876,"length":175,"previous":"M16-GAP-00194","next":"M16-GAP-00196"},"M16-GAP-00196":{"line":195,"offset":33051,"length":178,"previous":"M16-GAP-00195","next":"M16-GAP-00197"},"M16-GAP-00197":{"line":196,"offset":33229,"length":181,"previous":"M16-GAP-00196","next":"M16-GAP-00198"},"M16-GAP-00198":{"line":197,"offset":33410,"length":173,"previous":"M16-GAP-00197","next":"M16-GAP-00199"},"M16-GAP-00199":{"line":198,"offset":33583,"length":177,"previous":"M16-GAP-00198","next":"M16-GAP-00200"},"M16-GAP-00200":{"line":199,"offset":33760,"length":176,"previous":"M16-GAP-00199","next":"M16-GAP-00201"},"M16-GAP-00201":{"line":200,"offset":33936,"length":174,"previous":"M16-GAP-00200","next":"M16-GAP-00202"},"M16-GAP-00202":{"line":201,"offset":34110,"length":172,"previous":"M16-GAP-00201","next":"M16-GAP-00203"},"M16-GAP-00203":{"line":202,"offset":34282,"length":176,"previous":"M16-GAP-00202","next":"M16-GAP-00204"},"M16-GAP-00204":{"line":203,"offset":34458,"length":175,"previous":"M16-GAP-00203","next":"M16-GAP-00205"},"M16-GAP-00205":{"line":204,"offset":34633,"length":172,"previous":"M16-GAP-00204","next":"M16-GAP-00206"},"M16-GAP-00206":{"line":205,"offset":34805,"length":190,"previous":"M16-GAP-00205","next":"M16-GAP-00207"},"M16-GAP-00207":{"line":206,"offset":34995,"length":173,"previous":"M16-GAP-00206","next":"M16-GAP-00208"},"M16-GAP-00208":{"line":207,"offset":35168,"length":187,"previous":"M16-GAP-00207","next":"M16-GAP-00209"},"M16-GAP-00209":{"line":208,"offset":35355,"length":179,"previous":"M16-GAP-00208","next":"M16-GAP-00210"},"M16-GAP-00210":{"line":209,"offset":35534,"length":186,"previous":"M16-GAP-00209","next":"M16-GAP-00211"},"M16-GAP-00211":{"line":210,"offset":35720,"length":173,"previous":"M16-GAP-00210","next":"M16-GAP-00212"},"M16-GAP-00212":{"line":211,"offset":35893,"length":195,"previous":"M16-GAP-00211","next":"M16-GAP-00213"},"M16-GAP-00213":{"line":212,"offset":36088,"length":184,"previous":"M16-GAP-00212","next":"M16-GAP-00214"},"M16-GAP-00214":{"line":213,"offset":36272,"length":184,"previous":"M16-GAP-00213","next":"M16-GAP-00215"},"M16-GAP-00215":{"line":214,"offset":36456,"length":167,"previous":"M16-GAP-00214","next":"M16-GAP-00216"},"M16-GAP-00216":{"line":215,"offset":36623,"length":182,"previous":"M16-GAP-00215","next":"M16-GAP-00217"},"M16-GAP-00217":{"line":216,"offset":36805,"length":176,"previous":"M16-GAP-00216","next":"M16-GAP-00218"},"M16-GAP-00218":{"line":217,"offset":36981,"length":180,"previous":"M16-GAP-00217","next":"M16-GAP-00219"},"M16-GAP-00219":{"line":218,"offset":37161,"length":176,"previous":"M16-GAP-00218","next":"M16-GAP-00220"},"M16-GAP-00220":{"line":219,"offset":37337,"length":175,"previous":"M16-GAP-00219","next":"M16-GAP-00221"},"M16-GAP-00221":{"line":220,"offset":37512,"length":176,"previous":"M16-GAP-00220","next":"M16-GAP-00222"},"M16-GAP-00222":{"line":221,"offset":37688,"length":179,"previous":"M16-GAP-00221","next":"M16-GAP-00223"},"M16-GAP-00223":{"line":222,"offset":37867,"length":190,"previous":"M16-GAP-00222","next":"M16-GAP-00224"},"M16-GAP-00224":{"line":223,"offset":38057,"length":181,"previous":"M16-GAP-00223","next":"M16-GAP-00225"},"M16-GAP-00225":{"line":224,"offset":38238,"length":177,"previous":"M16-GAP-00224","next":"M16-GAP-00226"},"M16-GAP-00226":{"line":225,"offset":38415,"length":179,"previous":"M16-GAP-00225","next":"M16-GAP-00227"},"M16-GAP-00227":{"line":226,"offset":38594,"length":186,"previous":"M16-GAP-00226","next":"M16-GAP-00228"},"M16-GAP-00228":{"line":227,"offset":38780,"length":179,"previous":"M16-GAP-00227","next":"M16-GAP-00229"},"M16-GAP-00229":{"line":228,"offset":38959,"length":181,"previous":"M16-GAP-00228","next":"M16-GAP-00230"},"M16-GAP-00230":{"line":229,"offset":39140,"length":181,"previous":"M16-GAP-00229","next":"M16-GAP-00231"},"M16-GAP-00231":{"line":230,"offset":39321,"length":187,"previous":"M16-GAP-00230","next":"M16-GAP-00232"},"M16-GAP-00232":{"line":231,"offset":39508,"length":183,"previous":"M16-GAP-00231","next":"M16-GAP-00233"},"M16-GAP-00233":{"line":232,"offset":39691,"length":189,"previous":"M16-GAP-00232","next":"M16-GAP-00234"},"M16-GAP-00234":{"line":233,"offset":39880,"length":168,"previous":"M16-GAP-00233","next":"M16-GAP-00235"},"M16-GAP-00235":{"line":234,"offset":40048,"length":170,"previous":"M16-GAP-00234","next":"M16-GAP-00236"},"M16-GAP-00236":{"line":235,"offset":40218,"length":171,"previous":"M16-GAP-00235","next":"M16-GAP-00237"},"M16-GAP-00237":{"line":236,"offset":40389,"length":176,"previous":"M16-GAP-00236","next":"M16-GAP-00238"},"M16-GAP-00238":{"line":237,"offset":40565,"length":178,"previous":"M16-GAP-00237","next":"M16-GAP-00239"},"M16-GAP-00239":{"line":238,"offset":40743,"length":169,"previous":"M16-GAP-00238","next":"M16-GAP-00240"},"M16-GAP-00240":{"line":239,"offset":40912,"length":176,"previous":"M16-GAP-00239","next":"M16-GAP-00241"},"M16-GAP-00241":{"line":240,"offset":41088,"length":174,"previous":"M16-GAP-00240","next":"M16-GAP-00242"},"M16-GAP-00242":{"line":241,"offset":41262,"length":166,"previous":"M16-GAP-00241","next":"M16-GAP-00243"},"M16-GAP-00243":{"line":242,"offset":41428,"length":172,"previous":"M16-GAP-00242","next":"M16-GAP-00244"},"M16-GAP-00244":{"line":243,"offset":41600,"length":166,"previous":"M16-GAP-00243","next":"M16-GAP-00245"},"M16-GAP-00245":{"line":244,"offset":41766,"length":180,"previous":"M16-GAP-00244","next":"M16-GAP-00246"},"M16-GAP-00246":{"line":245,"offset":41946,"length":174,"previous":"M16-GAP-00245","next":"M16-GAP-00247"},"M16-GAP-00247":{"line":246,"offset":42120,"length":172,"previous":"M16-GAP-00246","next":"M16-GAP-00248"},"M16-GAP-00248":{"line":247,"offset":42292,"length":168,"previous":"M16-GAP-00247","next":"M16-GAP-00249"},"M16-GAP-00249":{"line":248,"offset":42460,"length":172,"previous":"M16-GAP-00248","next":"M16-GAP-00250"},"M16-GAP-00250":{"line":249,"offset":42632,"length":172,"previous":"M16-GAP-00249","next":"M16-GAP-00251"},"M16-GAP-00251":{"line":250,"offset":42804,"length":178,"previous":"M16-GAP-00250","next":"M16-GAP-00252"},"M16-GAP-00252":{"line":251,"offset":42982,"length":173,"previous":"M16-GAP-00251","next":"M16-GAP-00253"},"M16-GAP-00253":{"line":252,"offset":43155,"length":175,"previous":"M16-GAP-00252","next":"M16-GAP-00254"},"M16-GAP-00254":{"line":253,"offset":43330,"length":180,"previous":"M16-GAP-00253","next":"M16-GAP-00255"},"M16-GAP-00255":{"line":254,"offset":43510,"length":175,"previous":"M16-GAP-00254","next":"M16-GAP-00256"},"M16-GAP-00256":{"line":255,"offset":43685,"length":173,"previous":"M16-GAP-00255","next":"M16-GAP-00257"},"M16-GAP-00257":{"line":256,"offset":43858,"length":176,"previous":"M16-GAP-00256","next":"M16-GAP-00258"},"M16-GAP-00258":{"line":257,"offset":44034,"length":170,"previous":"M16-GAP-00257","next":"M16-GAP-00259"},"M16-GAP-00259":{"line":258,"offset":44204,"length":180,"previous":"M16-GAP-00258","next":"M16-GAP-00260"},"M16-GAP-00260":{"line":259,"offset":44384,"length":167,"previous":"M16-GAP-00259","next":"M16-GAP-00261"},"M16-GAP-00261":{"line":260,"offset":44551,"length":171,"previous":"M16-GAP-00260","next":"M16-GAP-00262"},"M16-GAP-00262":{"line":261,"offset":44722,"length":178,"previous":"M16-GAP-00261","next":"M16-GAP-00263"},"M16-GAP-00263":{"line":262,"offset":44900,"length":172,"previous":"M16-GAP-00262","next":"M16-GAP-00264"},"M16-GAP-00264":{"line":263,"offset":45072,"length":173,"previous":"M16-GAP-00263","next":"M16-GAP-00265"},"M16-GAP-00265":{"line":264,"offset":45245,"length":174,"previous":"M16-GAP-00264","next":"M16-GAP-00266"},"M16-GAP-00266":{"line":265,"offset":45419,"length":172,"previous":"M16-GAP-00265","next":"M16-GAP-00267"},"M16-GAP-00267":{"line":266,"offset":45591,"length":187,"previous":"M16-GAP-00266","next":"M16-GAP-00268"},"M16-GAP-00268":{"line":267,"offset":45778,"length":173,"previous":"M16-GAP-00267","next":"M16-GAP-00269"},"M16-GAP-00269":{"line":268,"offset":45951,"length":173,"previous":"M16-GAP-00268","next":"M16-GAP-00270"},"M16-GAP-00270":{"line":269,"offset":46124,"length":170,"previous":"M16-GAP-00269","next":"M16-GAP-00271"},"M16-GAP-00271":{"line":270,"offset":46294,"length":171,"previous":"M16-GAP-00270","next":"M16-GAP-00272"},"M16-GAP-00272":{"line":271,"offset":46465,"length":171,"previous":"M16-GAP-00271","next":"M16-GAP-00273"},"M16-GAP-00273":{"line":272,"offset":46636,"length":176,"previous":"M16-GAP-00272","next":"M16-GAP-00274"},"M16-GAP-00274":{"line":273,"offset":46812,"length":172,"previous":"M16-GAP-00273","next":"M16-GAP-00275"},"M16-GAP-00275":{"line":274,"offset":46984,"length":164,"previous":"M16-GAP-00274","next":"M16-GAP-00276"},"M16-GAP-00276":{"line":275,"offset":47148,"length":168,"previous":"M16-GAP-00275","next":"M16-GAP-00277"},"M16-GAP-00277":{"line":276,"offset":47316,"length":172,"previous":"M16-GAP-00276","next":"M16-GAP-00278"},"M16-GAP-00278":{"line":277,"offset":47488,"length":179,"previous":"M16-GAP-00277","next":"M16-GAP-00279"},"M16-GAP-00279":{"line":278,"offset":47667,"length":161,"previous":"M16-GAP-00278","next":"M16-GAP-00280"},"M16-GAP-00280":{"line":279,"offset":47828,"length":168,"previous":"M16-GAP-00279","next":"M16-GAP-00281"},"M16-GAP-00281":{"line":280,"offset":47996,"length":183,"previous":"M16-GAP-00280","next":"M16-GAP-00282"},"M16-GAP-00282":{"line":281,"offset":48179,"length":175,"previous":"M16-GAP-00281","next":"M16-GAP-00283"},"M16-GAP-00283":{"line":282,"offset":48354,"length":164,"previous":"M16-GAP-00282","next":"M16-GAP-00284"},"M16-GAP-00284":{"line":283,"offset":48518,"length":167,"previous":"M16-GAP-00283","next":"M16-GAP-00285"},"M16-GAP-00285":{"line":284,"offset":48685,"length":164,"previous":"M16-GAP-00284","next":"M16-GAP-00286"},"M16-GAP-00286":{"line":285,"offset":48849,"length":164,"previous":"M16-GAP-00285","next":"M16-GAP-00287"},"M16-GAP-00287":{"line":286,"offset":49013,"length":170,"previous":"M16-GAP-00286","next":"M16-GAP-00288"},"M16-GAP-00288":{"line":287,"offset":49183,"length":168,"previous":"M16-GAP-00287","next":"M16-GAP-00289"},"M16-GAP-00289":{"line":288,"offset":49351,"length":165,"previous":"M16-GAP-00288","next":"M16-GAP-00290"},"M16-GAP-00290":{"line":289,"offset":49516,"length":165,"previous":"M16-GAP-00289","next":"M16-GAP-00291"},"M16-GAP-00291":{"line":290,"offset":49681,"length":171,"previous":"M16-GAP-00290","next":"M16-GAP-00292"},"M16-GAP-00292":{"line":291,"offset":49852,"length":169,"previous":"M16-GAP-00291","next":"M16-GAP-00293"},"M16-GAP-00293":{"line":292,"offset":50021,"length":171,"previous":"M16-GAP-00292","next":"M16-GAP-00294"},"M16-GAP-00294":{"line":293,"offset":50192,"length":169,"previous":"M16-GAP-00293","next":"M16-GAP-00295"},"M16-GAP-00295":{"line":294,"offset":50361,"length":176,"previous":"M16-GAP-00294","next":"M16-GAP-00296"},"M16-GAP-00296":{"line":295,"offset":50537,"length":175,"previous":"M16-GAP-00295","next":"M16-GAP-00297"},"M16-GAP-00297":{"line":296,"offset":50712,"length":169,"previous":"M16-GAP-00296","next":"M16-GAP-00298"},"M16-GAP-00298":{"line":297,"offset":50881,"length":167,"previous":"M16-GAP-00297","next":"M16-GAP-00299"},"M16-GAP-00299":{"line":298,"offset":51048,"length":170,"previous":"M16-GAP-00298","next":"M16-GAP-00300"},"M16-GAP-00300":{"line":299,"offset":51218,"length":167,"previous":"M16-GAP-00299","next":"M16-GAP-00301"},"M16-GAP-00301":{"line":300,"offset":51385,"length":172,"previous":"M16-GAP-00300","next":"M16-GAP-00302"},"M16-GAP-00302":{"line":301,"offset":51557,"length":181,"previous":"M16-GAP-00301","next":"M16-GAP-00303"},"M16-GAP-00303":{"line":302,"offset":51738,"length":180,"previous":"M16-GAP-00302","next":"M16-GAP-00304"},"M16-GAP-00304":{"line":303,"offset":51918,"length":171,"previous":"M16-GAP-00303","next":"M16-GAP-00305"},"M16-GAP-00305":{"line":304,"offset":52089,"length":171,"previous":"M16-GAP-00304","next":"M16-GAP-00306"},"M16-GAP-00306":{"line":305,"offset":52260,"length":175,"previous":"M16-GAP-00305","next":"M16-GAP-00307"},"M16-GAP-00307":{"line":306,"offset":52435,"length":170,"previous":"M16-GAP-00306","next":"M16-GAP-00308"},"M16-GAP-00308":{"line":307,"offset":52605,"length":171,"previous":"M16-GAP-00307","next":"M16-GAP-00309"},"M16-GAP-00309":{"line":308,"offset":52776,"length":169,"previous":"M16-GAP-00308","next":"M16-GAP-00310"},"M16-GAP-00310":{"line":309,"offset":52945,"length":170,"previous":"M16-GAP-00309","next":"M16-GAP-00311"},"M16-GAP-00311":{"line":310,"offset":53115,"length":171,"previous":"M16-GAP-00310","next":"M16-GAP-00312"},"M16-GAP-00312":{"line":311,"offset":53286,"length":173,"previous":"M16-GAP-00311","next":"M16-GAP-00313"},"M16-GAP-00313":{"line":312,"offset":53459,"length":165,"previous":"M16-GAP-00312","next":"M16-GAP-00314"},"M16-GAP-00314":{"line":313,"offset":53624,"length":167,"previous":"M16-GAP-00313","next":"M16-GAP-00315"},"M16-GAP-00315":{"line":314,"offset":53791,"length":168,"previous":"M16-GAP-00314","next":"M16-GAP-00316"},"M16-GAP-00316":{"line":315,"offset":53959,"length":179,"previous":"M16-GAP-00315","next":"M16-GAP-00317"},"M16-GAP-00317":{"line":316,"offset":54138,"length":166,"previous":"M16-GAP-00316","next":"M16-GAP-00318"},"M16-GAP-00318":{"line":317,"offset":54304,"length":175,"previous":"M16-GAP-00317","next":"M16-GAP-00319"},"M16-GAP-00319":{"line":318,"offset":54479,"length":171,"previous":"M16-GAP-00318","next":"M16-GAP-00320"},"M16-GAP-00320":{"line":319,"offset":54650,"length":172,"previous":"M16-GAP-00319","next":"M16-GAP-00321"},"M16-GAP-00321":{"line":320,"offset":54822,"length":176,"previous":"M16-GAP-00320","next":"M16-GAP-00322"},"M16-GAP-00322":{"line":321,"offset":54998,"length":170,"previous":"M16-GAP-00321","next":"M16-GAP-00323"},"M16-GAP-00323":{"line":322,"offset":55168,"length":171,"previous":"M16-GAP-00322","next":"M16-GAP-00324"},"M16-GAP-00324":{"line":323,"offset":55339,"length":173,"previous":"M16-GAP-00323","next":"M16-GAP-00325"},"M16-GAP-00325":{"line":324,"offset":55512,"length":168,"previous":"M16-GAP-00324","next":"M16-GAP-00326"},"M16-GAP-00326":{"line":325,"offset":55680,"length":168,"previous":"M16-GAP-00325","next":"M16-GAP-00327"},"M16-GAP-00327":{"line":326,"offset":55848,"length":170,"previous":"M16-GAP-00326","next":"M16-GAP-00328"},"M16-GAP-00328":{"line":327,"offset":56018,"length":172,"previous":"M16-GAP-00327","next":"M16-GAP-00329"},"M16-GAP-00329":{"line":328,"offset":56190,"length":176,"previous":"M16-GAP-00328","next":"M16-GAP-00330"},"M16-GAP-00330":{"line":329,"offset":56366,"length":167,"previous":"M16-GAP-00329","next":"M16-GAP-00331"},"M16-GAP-00331":{"line":330,"offset":56533,"length":174,"previous":"M16-GAP-00330","next":"M16-GAP-00332"},"M16-GAP-00332":{"line":331,"offset":56707,"length":166,"previous":"M16-GAP-00331","next":"M16-GAP-00333"},"M16-GAP-00333":{"line":332,"offset":56873,"length":169,"previous":"M16-GAP-00332","next":"M16-GAP-00334"},"M16-GAP-00334":{"line":333,"offset":57042,"length":168,"previous":"M16-GAP-00333","next":"M16-GAP-00335"},"M16-GAP-00335":{"line":334,"offset":57210,"length":168,"previous":"M16-GAP-00334","next":"M16-GAP-00336"},"M16-GAP-00336":{"line":335,"offset":57378,"length":171,"previous":"M16-GAP-00335","next":"M16-GAP-00337"},"M16-GAP-00337":{"line":336,"offset":57549,"length":171,"previous":"M16-GAP-00336","next":"M16-GAP-00338"},"M16-GAP-00338":{"line":337,"offset":57720,"length":180,"previous":"M16-GAP-00337","next":"M16-GAP-00339"},"M16-GAP-00339":{"line":338,"offset":57900,"length":174,"previous":"M16-GAP-00338","next":"M16-GAP-00340"},"M16-GAP-00340":{"line":339,"offset":58074,"length":169,"previous":"M16-GAP-00339","next":"M16-GAP-00341"},"M16-GAP-00341":{"line":340,"offset":58243,"length":166,"previous":"M16-GAP-00340","next":"M16-GAP-00342"},"M16-GAP-00342":{"line":341,"offset":58409,"length":182,"previous":"M16-GAP-00341","next":"M16-GAP-00343"},"M16-GAP-00343":{"line":342,"offset":58591,"length":174,"previous":"M16-GAP-00342","next":"M16-GAP-00344"},"M16-GAP-00344":{"line":343,"offset":58765,"length":173,"previous":"M16-GAP-00343","next":"M16-GAP-00345"},"M16-GAP-00345":{"line":344,"offset":58938,"length":177,"previous":"M16-GAP-00344","next":"M16-GAP-00346"},"M16-GAP-00346":{"line":345,"offset":59115,"length":168,"previous":"M16-GAP-00345","next":"M16-GAP-00347"},"M16-GAP-00347":{"line":346,"offset":59283,"length":180,"previous":"M16-GAP-00346","next":"M16-GAP-00348"},"M16-GAP-00348":{"line":347,"offset":59463,"length":172,"previous":"M16-GAP-00347","next":"M16-GAP-00349"},"M16-GAP-00349":{"line":348,"offset":59635,"length":170,"previous":"M16-GAP-00348","next":"M16-GAP-00350"},"M16-GAP-00350":{"line":349,"offset":59805,"length":167,"previous":"M16-GAP-00349","next":"M16-GAP-00351"},"M16-GAP-00351":{"line":350,"offset":59972,"length":173,"previous":"M16-GAP-00350","next":"M16-GAP-00352"},"M16-GAP-00352":{"line":351,"offset":60145,"length":167,"previous":"M16-GAP-00351","next":"M16-GAP-00353"},"M16-GAP-00353":{"line":352,"offset":60312,"length":171,"previous":"M16-GAP-00352","next":"M16-GAP-00354"},"M16-GAP-00354":{"line":353,"offset":60483,"length":171,"previous":"M16-GAP-00353","next":"M16-GAP-00355"},"M16-GAP-00355":{"line":354,"offset":60654,"length":177,"previous":"M16-GAP-00354","next":"M16-GAP-00356"},"M16-GAP-00356":{"line":355,"offset":60831,"length":167,"previous":"M16-GAP-00355","next":"M16-GAP-00357"},"M16-GAP-00357":{"line":356,"offset":60998,"length":164,"previous":"M16-GAP-00356","next":"M16-GAP-00358"},"M16-GAP-00358":{"line":357,"offset":61162,"length":183,"previous":"M16-GAP-00357","next":"M16-GAP-00359"},"M16-GAP-00359":{"line":358,"offset":61345,"length":160,"previous":"M16-GAP-00358","next":"M16-GAP-00360"},"M16-GAP-00360":{"line":359,"offset":61505,"length":168,"previous":"M16-GAP-00359","next":"M16-GAP-00361"},"M16-GAP-00361":{"line":360,"offset":61673,"length":164,"previous":"M16-GAP-00360","next":"M16-GAP-00362"},"M16-GAP-00362":{"line":361,"offset":61837,"length":169,"previous":"M16-GAP-00361","next":"M16-GAP-00363"},"M16-GAP-00363":{"line":362,"offset":62006,"length":170,"previous":"M16-GAP-00362","next":"M16-GAP-00364"},"M16-GAP-00364":{"line":363,"offset":62176,"length":162,"previous":"M16-GAP-00363","next":"M16-GAP-00365"},"M16-GAP-00365":{"line":364,"offset":62338,"length":162,"previous":"M16-GAP-00364","next":"M16-GAP-00366"},"M16-GAP-00366":{"line":365,"offset":62500,"length":166,"previous":"M16-GAP-00365","next":"M16-GAP-00367"},"M16-GAP-00367":{"line":366,"offset":62666,"length":166,"previous":"M16-GAP-00366","next":"M16-GAP-00368"},"M16-GAP-00368":{"line":367,"offset":62832,"length":169,"previous":"M16-GAP-00367","next":"M16-GAP-00369"},"M16-GAP-00369":{"line":368,"offset":63001,"length":170,"previous":"M16-GAP-00368","next":"M16-GAP-00370"},"M16-GAP-00370":{"line":369,"offset":63171,"length":168,"previous":"M16-GAP-00369","next":"M16-GAP-00371"},"M16-GAP-00371":{"line":370,"offset":63339,"length":171,"previous":"M16-GAP-00370","next":"M16-GAP-00372"},"M16-GAP-00372":{"line":371,"offset":63510,"length":164,"previous":"M16-GAP-00371","next":"M16-GAP-00373"},"M16-GAP-00373":{"line":372,"offset":63674,"length":166,"previous":"M16-GAP-00372","next":"M16-GAP-00374"},"M16-GAP-00374":{"line":373,"offset":63840,"length":165,"previous":"M16-GAP-00373","next":"M16-GAP-00375"},"M16-GAP-00375":{"line":374,"offset":64005,"length":165,"previous":"M16-GAP-00374","next":"M16-GAP-00376"},"M16-GAP-00376":{"line":375,"offset":64170,"length":172,"previous":"M16-GAP-00375","next":"M16-GAP-00377"},"M16-GAP-00377":{"line":376,"offset":64342,"length":174,"previous":"M16-GAP-00376","next":"M16-GAP-00378"},"M16-GAP-00378":{"line":377,"offset":64516,"length":175,"previous":"M16-GAP-00377","next":"M16-GAP-00379"},"M16-GAP-00379":{"line":378,"offset":64691,"length":179,"previous":"M16-GAP-00378","next":"M16-GAP-00380"},"M16-GAP-00380":{"line":379,"offset":64870,"length":176,"previous":"M16-GAP-00379","next":"M16-GAP-00381"},"M16-GAP-00381":{"line":380,"offset":65046,"length":168,"previous":"M16-GAP-00380","next":"M16-GAP-00382"},"M16-GAP-00382":{"line":381,"offset":65214,"length":174,"previous":"M16-GAP-00381","next":"M16-GAP-00383"},"M16-GAP-00383":{"line":382,"offset":65388,"length":168,"previous":"M16-GAP-00382","next":"M16-GAP-00384"},"M16-GAP-00384":{"line":383,"offset":65556,"length":172,"previous":"M16-GAP-00383","next":"M16-GAP-00385"},"M16-GAP-00385":{"line":384,"offset":65728,"length":175,"previous":"M16-GAP-00384","next":"M16-GAP-00386"},"M16-GAP-00386":{"line":385,"offset":65903,"length":181,"previous":"M16-GAP-00385","next":"M16-GAP-00387"},"M16-GAP-00387":{"line":386,"offset":66084,"length":184,"previous":"M16-GAP-00386","next":"M16-GAP-00388"},"M16-GAP-00388":{"line":387,"offset":66268,"length":184,"previous":"M16-GAP-00387","next":"M16-GAP-00389"},"M16-GAP-00389":{"line":388,"offset":66452,"length":175,"previous":"M16-GAP-00388","next":"M16-GAP-00390"},"M16-GAP-00390":{"line":389,"offset":66627,"length":178,"previous":"M16-GAP-00389","next":"M16-GAP-00391"},"M16-GAP-00391":{"line":390,"offset":66805,"length":172,"previous":"M16-GAP-00390","next":"M16-GAP-00392"},"M16-GAP-00392":{"line":391,"offset":66977,"length":169,"previous":"M16-GAP-00391","next":"M16-GAP-00393"},"M16-GAP-00393":{"line":392,"offset":67146,"length":181,"previous":"M16-GAP-00392","next":"M16-GAP-00394"},"M16-GAP-00394":{"line":393,"offset":67327,"length":179,"previous":"M16-GAP-00393","next":"M16-GAP-00395"},"M16-GAP-00395":{"line":394,"offset":67506,"length":170,"previous":"M16-GAP-00394","next":"M16-GAP-00396"},"M16-GAP-00396":{"line":395,"offset":67676,"length":175,"previous":"M16-GAP-00395","next":"M16-GAP-00397"},"M16-GAP-00397":{"line":396,"offset":67851,"length":178,"previous":"M16-GAP-00396","next":"M16-GAP-00398"},"M16-GAP-00398":{"line":397,"offset":68029,"length":184,"previous":"M16-GAP-00397","next":"M16-GAP-00399"},"M16-GAP-00399":{"line":398,"offset":68213,"length":186,"previous":"M16-GAP-00398","next":"M16-GAP-00400"},"M16-GAP-00400":{"line":399,"offset":68399,"length":164,"previous":"M16-GAP-00399","next":"M16-GAP-00401"},"M16-GAP-00401":{"line":400,"offset":68563,"length":174,"previous":"M16-GAP-00400","next":"M16-GAP-00402"},"M16-GAP-00402":{"line":401,"offset":68737,"length":165,"previous":"M16-GAP-00401","next":"M16-GAP-00403"},"M16-GAP-00403":{"line":402,"offset":68902,"length":164,"previous":"M16-GAP-00402","next":"M16-GAP-00404"},"M16-GAP-00404":{"line":403,"offset":69066,"length":169,"previous":"M16-GAP-00403","next":"M16-GAP-00405"},"M16-GAP-00405":{"line":404,"offset":69235,"length":165,"previous":"M16-GAP-00404","next":"M16-GAP-00406"},"M16-GAP-00406":{"line":405,"offset":69400,"length":168,"previous":"M16-GAP-00405","next":"M16-GAP-00407"},"M16-GAP-00407":{"line":406,"offset":69568,"length":169,"previous":"M16-GAP-00406","next":"M16-GAP-00408"},"M16-GAP-00408":{"line":407,"offset":69737,"length":171,"previous":"M16-GAP-00407","next":"M16-GAP-00409"},"M16-GAP-00409":{"line":408,"offset":69908,"length":167,"previous":"M16-GAP-00408","next":"M16-GAP-00410"},"M16-GAP-00410":{"line":409,"offset":70075,"length":168,"previous":"M16-GAP-00409","next":"M16-GAP-00411"},"M16-GAP-00411":{"line":410,"offset":70243,"length":172,"previous":"M16-GAP-00410","next":"M16-GAP-00412"},"M16-GAP-00412":{"line":411,"offset":70415,"length":174,"previous":"M16-GAP-00411","next":"M16-GAP-00413"},"M16-GAP-00413":{"line":412,"offset":70589,"length":177,"previous":"M16-GAP-00412","next":"M16-GAP-00414"},"M16-GAP-00414":{"line":413,"offset":70766,"length":175,"previous":"M16-GAP-00413","next":"M16-GAP-00415"},"M16-GAP-00415":{"line":414,"offset":70941,"length":177,"previous":"M16-GAP-00414","next":"M16-GAP-00416"},"M16-GAP-00416":{"line":415,"offset":71118,"length":174,"previous":"M16-GAP-00415","next":"M16-GAP-00417"},"M16-GAP-00417":{"line":416,"offset":71292,"length":177,"previous":"M16-GAP-00416","next":"M16-GAP-00418"},"M16-GAP-00418":{"line":417,"offset":71469,"length":180,"previous":"M16-GAP-00417","next":"M16-GAP-00419"},"M16-GAP-00419":{"line":418,"offset":71649,"length":176,"previous":"M16-GAP-00418","next":"M16-GAP-00420"},"M16-GAP-00420":{"line":419,"offset":71825,"length":183,"previous":"M16-GAP-00419","next":"M16-GAP-00421"},"M16-GAP-00421":{"line":420,"offset":72008,"length":180,"previous":"M16-GAP-00420","next":"M16-GAP-00422"},"M16-GAP-00422":{"line":421,"offset":72188,"length":171,"previous":"M16-GAP-00421","next":"M16-GAP-00423"},"M16-GAP-00423":{"line":422,"offset":72359,"length":165,"previous":"M16-GAP-00422","next":"M16-GAP-00424"},"M16-GAP-00424":{"line":423,"offset":72524,"length":164,"previous":"M16-GAP-00423","next":"M16-GAP-00425"},"M16-GAP-00425":{"line":424,"offset":72688,"length":169,"previous":"M16-GAP-00424","next":"M16-GAP-00426"},"M16-GAP-00426":{"line":425,"offset":72857,"length":163,"previous":"M16-GAP-00425","next":"M16-GAP-00427"},"M16-GAP-00427":{"line":426,"offset":73020,"length":173,"previous":"M16-GAP-00426","next":"M16-GAP-00428"},"M16-GAP-00428":{"line":427,"offset":73193,"length":165,"previous":"M16-GAP-00427","next":"M16-GAP-00429"},"M16-GAP-00429":{"line":428,"offset":73358,"length":166,"previous":"M16-GAP-00428","next":"M16-GAP-00430"},"M16-GAP-00430":{"line":429,"offset":73524,"length":173,"previous":"M16-GAP-00429","next":"M16-GAP-00431"},"M16-GAP-00431":{"line":430,"offset":73697,"length":172,"previous":"M16-GAP-00430","next":"M16-GAP-00432"},"M16-GAP-00432":{"line":431,"offset":73869,"length":165,"previous":"M16-GAP-00431","next":"M16-GAP-00433"},"M16-GAP-00433":{"line":432,"offset":74034,"length":181,"previous":"M16-GAP-00432","next":"M16-GAP-00434"},"M16-GAP-00434":{"line":433,"offset":74215,"length":165,"previous":"M16-GAP-00433","next":"M16-GAP-00435"},"M16-GAP-00435":{"line":434,"offset":74380,"length":167,"previous":"M16-GAP-00434","next":"M16-GAP-00436"},"M16-GAP-00436":{"line":435,"offset":74547,"length":163,"previous":"M16-GAP-00435","next":"M16-GAP-00437"},"M16-GAP-00437":{"line":436,"offset":74710,"length":164,"previous":"M16-GAP-00436","next":"M16-GAP-00438"},"M16-GAP-00438":{"line":437,"offset":74874,"length":176,"previous":"M16-GAP-00437","next":"M16-GAP-00439"},"M16-GAP-00439":{"line":438,"offset":75050,"length":169,"previous":"M16-GAP-00438","next":"M16-GAP-00440"},"M16-GAP-00440":{"line":439,"offset":75219,"length":169,"previous":"M16-GAP-00439","next":"M16-GAP-00441"},"M16-GAP-00441":{"line":440,"offset":75388,"length":170,"previous":"M16-GAP-00440","next":"M16-GAP-00442"},"M16-GAP-00442":{"line":441,"offset":75558,"length":167,"previous":"M16-GAP-00441","next":"M16-GAP-00443"},"M16-GAP-00443":{"line":442,"offset":75725,"length":172,"previous":"M16-GAP-00442","next":"M16-GAP-00444"},"M16-GAP-00444":{"line":443,"offset":75897,"length":167,"previous":"M16-GAP-00443","next":"M16-GAP-00445"},"M16-GAP-00445":{"line":444,"offset":76064,"length":183,"previous":"M16-GAP-00444","next":"M16-GAP-00446"},"M16-GAP-00446":{"line":445,"offset":76247,"length":181,"previous":"M16-GAP-00445","next":"M16-GAP-00447"},"M16-GAP-00447":{"line":446,"offset":76428,"length":166,"previous":"M16-GAP-00446","next":"M16-GAP-00448"},"M16-GAP-00448":{"line":447,"offset":76594,"length":178,"previous":"M16-GAP-00447","next":"M16-GAP-00449"},"M16-GAP-00449":{"line":448,"offset":76772,"length":168,"previous":"M16-GAP-00448","next":"M16-GAP-00450"},"M16-GAP-00450":{"line":449,"offset":76940,"length":184,"previous":"M16-GAP-00449","next":"M16-GAP-00451"},"M16-GAP-00451":{"line":450,"offset":77124,"length":185,"previous":"M16-GAP-00450","next":"M16-GAP-00452"},"M16-GAP-00452":{"line":451,"offset":77309,"length":181,"previous":"M16-GAP-00451","next":"M16-GAP-00453"},"M16-GAP-00453":{"line":452,"offset":77490,"length":171,"previous":"M16-GAP-00452","next":"M16-GAP-00454"},"M16-GAP-00454":{"line":453,"offset":77661,"length":175,"previous":"M16-GAP-00453","next":"M16-GAP-00455"},"M16-GAP-00455":{"line":454,"offset":77836,"length":169,"previous":"M16-GAP-00454","next":"M16-GAP-00456"},"M16-GAP-00456":{"line":455,"offset":78005,"length":186,"previous":"M16-GAP-00455","next":"M16-GAP-00457"},"M16-GAP-00457":{"line":456,"offset":78191,"length":188,"previous":"M16-GAP-00456","next":"M16-GAP-00458"},"M16-GAP-00458":{"line":457,"offset":78379,"length":186,"previous":"M16-GAP-00457","next":"M16-GAP-00459"},"M16-GAP-00459":{"line":458,"offset":78565,"length":175,"previous":"M16-GAP-00458","next":"M16-GAP-00460"},"M16-GAP-00460":{"line":459,"offset":78740,"length":177,"previous":"M16-GAP-00459","next":"M16-GAP-00461"},"M16-GAP-00461":{"line":460,"offset":78917,"length":170,"previous":"M16-GAP-00460","next":"M16-GAP-00462"},"M16-GAP-00462":{"line":461,"offset":79087,"length":172,"previous":"M16-GAP-00461","next":"M16-GAP-00463"},"M16-GAP-00463":{"line":462,"offset":79259,"length":171,"previous":"M16-GAP-00462","next":"M16-GAP-00464"},"M16-GAP-00464":{"line":463,"offset":79430,"length":165,"previous":"M16-GAP-00463","next":"M16-GAP-00465"},"M16-GAP-00465":{"line":464,"offset":79595,"length":163,"previous":"M16-GAP-00464","next":"M16-GAP-00466"},"M16-GAP-00466":{"line":465,"offset":79758,"length":171,"previous":"M16-GAP-00465","next":"M16-GAP-00467"},"M16-GAP-00467":{"line":466,"offset":79929,"length":161,"previous":"M16-GAP-00466","next":"M16-GAP-00468"},"M16-GAP-00468":{"line":467,"offset":80090,"length":166,"previous":"M16-GAP-00467","next":"M16-GAP-00469"},"M16-GAP-00469":{"line":468,"offset":80256,"length":171,"previous":"M16-GAP-00468","next":"M16-GAP-00470"},"M16-GAP-00470":{"line":469,"offset":80427,"length":164,"previous":"M16-GAP-00469","next":"M16-GAP-00471"},"M16-GAP-00471":{"line":470,"offset":80591,"length":169,"previous":"M16-GAP-00470","next":"M16-GAP-00472"},"M16-GAP-00472":{"line":471,"offset":80760,"length":172,"previous":"M16-GAP-00471","next":"M16-GAP-00473"},"M16-GAP-00473":{"line":472,"offset":80932,"length":161,"previous":"M16-GAP-00472","next":"M16-GAP-00474"},"M16-GAP-00474":{"line":473,"offset":81093,"length":169,"previous":"M16-GAP-00473","next":"M16-GAP-00475"},"M16-GAP-00475":{"line":474,"offset":81262,"length":176,"previous":"M16-GAP-00474","next":"M16-GAP-00476"},"M16-GAP-00476":{"line":475,"offset":81438,"length":180,"previous":"M16-GAP-00475","next":"M16-GAP-00477"},"M16-GAP-00477":{"line":476,"offset":81618,"length":160,"previous":"M16-GAP-00476","next":"M16-GAP-00478"},"M16-GAP-00478":{"line":477,"offset":81778,"length":184,"previous":"M16-GAP-00477","next":"M16-GAP-00479"},"M16-GAP-00479":{"line":478,"offset":81962,"length":183,"previous":"M16-GAP-00478","next":"M16-GAP-00480"},"M16-GAP-00480":{"line":479,"offset":82145,"length":183,"previous":"M16-GAP-00479","next":"M16-GAP-00481"},"M16-GAP-00481":{"line":480,"offset":82328,"length":182,"previous":"M16-GAP-00480","next":"M16-GAP-00482"},"M16-GAP-00482":{"line":481,"offset":82510,"length":181,"previous":"M16-GAP-00481","next":"M16-GAP-00483"},"M16-GAP-00483":{"line":482,"offset":82691,"length":167,"previous":"M16-GAP-00482","next":"M16-GAP-00484"},"M16-GAP-00484":{"line":483,"offset":82858,"length":163,"previous":"M16-GAP-00483","next":"M16-GAP-00485"},"M16-GAP-00485":{"line":484,"offset":83021,"length":167,"previous":"M16-GAP-00484","next":"M16-GAP-00486"},"M16-GAP-00486":{"line":485,"offset":83188,"length":168,"previous":"M16-GAP-00485","next":"M16-GAP-00487"},"M16-GAP-00487":{"line":486,"offset":83356,"length":170,"previous":"M16-GAP-00486","next":"M16-GAP-00488"},"M16-GAP-00488":{"line":487,"offset":83526,"length":175,"previous":"M16-GAP-00487","next":"M16-GAP-00489"},"M16-GAP-00489":{"line":488,"offset":83701,"length":168,"previous":"M16-GAP-00488","next":"M16-GAP-00490"},"M16-GAP-00490":{"line":489,"offset":83869,"length":168,"previous":"M16-GAP-00489","next":"M16-GAP-00491"},"M16-GAP-00491":{"line":490,"offset":84037,"length":167,"previous":"M16-GAP-00490","next":"M16-GAP-00492"},"M16-GAP-00492":{"line":491,"offset":84204,"length":172,"previous":"M16-GAP-00491","next":"M16-GAP-00493"},"M16-GAP-00493":{"line":492,"offset":84376,"length":170,"previous":"M16-GAP-00492","next":"M16-GAP-00494"},"M16-GAP-00494":{"line":493,"offset":84546,"length":167,"previous":"M16-GAP-00493","next":"M16-GAP-00495"},"M16-GAP-00495":{"line":494,"offset":84713,"length":171,"previous":"M16-GAP-00494","next":"M16-GAP-00496"},"M16-GAP-00496":{"line":495,"offset":84884,"length":165,"previous":"M16-GAP-00495","next":"M16-GAP-00497"},"M16-GAP-00497":{"line":496,"offset":85049,"length":167,"previous":"M16-GAP-00496","next":"M16-GAP-00498"},"M16-GAP-00498":{"line":497,"offset":85216,"length":169,"previous":"M16-GAP-00497","next":"M16-GAP-00499"},"M16-GAP-00499":{"line":498,"offset":85385,"length":175,"previous":"M16-GAP-00498","next":"M16-GAP-00500"},"M16-GAP-00500":{"line":499,"offset":85560,"length":163,"previous":"M16-GAP-00499","next":"M16-GAP-00501"},"M16-GAP-00501":{"line":500,"offset":85723,"length":170,"previous":"M16-GAP-00500","next":"M16-GAP-00502"},"M16-GAP-00502":{"line":501,"offset":85893,"length":168,"previous":"M16-GAP-00501","next":"M16-GAP-00503"},"M16-GAP-00503":{"line":502,"offset":86061,"length":170,"previous":"M16-GAP-00502","next":"M16-GAP-00504"},"M16-GAP-00504":{"line":503,"offset":86231,"length":161,"previous":"M16-GAP-00503","next":"M16-GAP-00505"},"M16-GAP-00505":{"line":504,"offset":86392,"length":172,"previous":"M16-GAP-00504","next":"M16-GAP-00506"},"M16-GAP-00506":{"line":505,"offset":86564,"length":174,"previous":"M16-GAP-00505","next":"M16-GAP-00507"},"M16-GAP-00507":{"line":506,"offset":86738,"length":162,"previous":"M16-GAP-00506","next":"M16-GAP-00508"},"M16-GAP-00508":{"line":507,"offset":86900,"length":166,"previous":"M16-GAP-00507","next":"M16-GAP-00509"},"M16-GAP-00509":{"line":508,"offset":87066,"length":173,"previous":"M16-GAP-00508","next":"M16-GAP-00510"},"M16-GAP-00510":{"line":509,"offset":87239,"length":167,"previous":"M16-GAP-00509","next":"M16-GAP-00511"},"M16-GAP-00511":{"line":510,"offset":87406,"length":167,"previous":"M16-GAP-00510","next":"M16-GAP-00512"},"M16-GAP-00512":{"line":511,"offset":87573,"length":168,"previous":"M16-GAP-00511","next":"M16-GAP-00513"},"M16-GAP-00513":{"line":512,"offset":87741,"length":168,"previous":"M16-GAP-00512","next":"M16-GAP-00514"},"M16-GAP-00514":{"line":513,"offset":87909,"length":171,"previous":"M16-GAP-00513","next":"M16-GAP-00515"},"M16-GAP-00515":{"line":514,"offset":88080,"length":186,"previous":"M16-GAP-00514","next":"M16-GAP-00516"},"M16-GAP-00516":{"line":515,"offset":88266,"length":184,"previous":"M16-GAP-00515","next":"M16-GAP-00517"},"M16-GAP-00517":{"line":516,"offset":88450,"length":172,"previous":"M16-GAP-00516","next":"M16-GAP-00518"},"M16-GAP-00518":{"line":517,"offset":88622,"length":171,"previous":"M16-GAP-00517","next":"M16-GAP-00519"},"M16-GAP-00519":{"line":518,"offset":88793,"length":164,"previous":"M16-GAP-00518","next":"M16-GAP-00520"},"M16-GAP-00520":{"line":519,"offset":88957,"length":162,"previous":"M16-GAP-00519","next":"M16-GAP-00521"},"M16-GAP-00521":{"line":520,"offset":89119,"length":167,"previous":"M16-GAP-00520","next":"M16-GAP-00522"},"M16-GAP-00522":{"line":521,"offset":89286,"length":172,"previous":"M16-GAP-00521","next":"M16-GAP-00523"},"M16-GAP-00523":{"line":522,"offset":89458,"length":165,"previous":"M16-GAP-00522","next":"M16-GAP-00524"},"M16-GAP-00524":{"line":523,"offset":89623,"length":170,"previous":"M16-GAP-00523","next":"M16-GAP-00525"},"M16-GAP-00525":{"line":524,"offset":89793,"length":173,"previous":"M16-GAP-00524","next":"M16-GAP-00526"},"M16-GAP-00526":{"line":525,"offset":89966,"length":161,"previous":"M16-GAP-00525","next":"M16-GAP-00527"},"M16-GAP-00527":{"line":526,"offset":90127,"length":175,"previous":"M16-GAP-00526","next":"M16-GAP-00528"},"M16-GAP-00528":{"line":527,"offset":90302,"length":168,"previous":"M16-GAP-00527","next":"M16-GAP-00529"},"M16-GAP-00529":{"line":528,"offset":90470,"length":169,"previous":"M16-GAP-00528","next":"M16-GAP-00530"},"M16-GAP-00530":{"line":529,"offset":90639,"length":169,"previous":"M16-GAP-00529","next":"M16-GAP-00531"},"M16-GAP-00531":{"line":530,"offset":90808,"length":171,"previous":"M16-GAP-00530","next":"M16-GAP-00532"},"M16-GAP-00532":{"line":531,"offset":90979,"length":176,"previous":"M16-GAP-00531","next":"M16-GAP-00533"},"M16-GAP-00533":{"line":532,"offset":91155,"length":169,"previous":"M16-GAP-00532","next":"M16-GAP-00534"},"M16-GAP-00534":{"line":533,"offset":91324,"length":171,"previous":"M16-GAP-00533","next":"M16-GAP-00535"},"M16-GAP-00535":{"line":534,"offset":91495,"length":166,"previous":"M16-GAP-00534","next":"M16-GAP-00536"},"M16-GAP-00536":{"line":535,"offset":91661,"length":178,"previous":"M16-GAP-00535","next":"M16-GAP-00537"},"M16-GAP-00537":{"line":536,"offset":91839,"length":180,"previous":"M16-GAP-00536","next":"M16-GAP-00538"},"M16-GAP-00538":{"line":537,"offset":92019,"length":163,"previous":"M16-GAP-00537","next":"M16-GAP-00539"},"M16-GAP-00539":{"line":538,"offset":92182,"length":167,"previous":"M16-GAP-00538","next":"M16-GAP-00540"},"M16-GAP-00540":{"line":539,"offset":92349,"length":169,"previous":"M16-GAP-00539","next":"M16-GAP-00541"},"M16-GAP-00541":{"line":540,"offset":92518,"length":174,"previous":"M16-GAP-00540","next":"M16-GAP-00542"},"M16-GAP-00542":{"line":541,"offset":92692,"length":168,"previous":"M16-GAP-00541","next":"M16-GAP-00543"},"M16-GAP-00543":{"line":542,"offset":92860,"length":175,"previous":"M16-GAP-00542","next":"M16-GAP-00544"},"M16-GAP-00544":{"line":543,"offset":93035,"length":170,"previous":"M16-GAP-00543","next":"M16-GAP-00545"},"M16-GAP-00545":{"line":544,"offset":93205,"length":175,"previous":"M16-GAP-00544","next":"M16-GAP-00546"},"M16-GAP-00546":{"line":545,"offset":93380,"length":162,"previous":"M16-GAP-00545","next":"M16-GAP-00547"},"M16-GAP-00547":{"line":546,"offset":93542,"length":171,"previous":"M16-GAP-00546","next":"M16-GAP-00548"},"M16-GAP-00548":{"line":547,"offset":93713,"length":174,"previous":"M16-GAP-00547","next":"M16-GAP-00549"},"M16-GAP-00549":{"line":548,"offset":93887,"length":177,"previous":"M16-GAP-00548","next":"M16-GAP-00550"},"M16-GAP-00550":{"line":549,"offset":94064,"length":169,"previous":"M16-GAP-00549","next":"M16-GAP-00551"},"M16-GAP-00551":{"line":550,"offset":94233,"length":165,"previous":"M16-GAP-00550","next":"M16-GAP-00552"},"M16-GAP-00552":{"line":551,"offset":94398,"length":177,"previous":"M16-GAP-00551","next":"M16-GAP-00553"},"M16-GAP-00553":{"line":552,"offset":94575,"length":177,"previous":"M16-GAP-00552","next":"M16-GAP-00554"},"M16-GAP-00554":{"line":553,"offset":94752,"length":189,"previous":"M16-GAP-00553","next":"M16-GAP-00555"},"M16-GAP-00555":{"line":554,"offset":94941,"length":180,"previous":"M16-GAP-00554","next":"M16-GAP-00556"},"M16-GAP-00556":{"line":555,"offset":95121,"length":185,"previous":"M16-GAP-00555","next":"M16-GAP-00557"},"M16-GAP-00557":{"line":556,"offset":95306,"length":175,"previous":"M16-GAP-00556","next":"M16-GAP-00558"},"M16-GAP-00558":{"line":557,"offset":95481,"length":167,"previous":"M16-GAP-00557","next":"M16-GAP-00559"},"M16-GAP-00559":{"line":558,"offset":95648,"length":158,"previous":"M16-GAP-00558","next":"M16-GAP-00560"},"M16-GAP-00560":{"line":559,"offset":95806,"length":158,"previous":"M16-GAP-00559","next":"M16-GAP-00561"},"M16-GAP-00561":{"line":560,"offset":95964,"length":166,"previous":"M16-GAP-00560","next":"M16-GAP-00562"},"M16-GAP-00562":{"line":561,"offset":96130,"length":163,"previous":"M16-GAP-00561","next":"M16-GAP-00563"},"M16-GAP-00563":{"line":562,"offset":96293,"length":163,"previous":"M16-GAP-00562","next":"M16-GAP-00564"},"M16-GAP-00564":{"line":563,"offset":96456,"length":166,"previous":"M16-GAP-00563","next":"M16-GAP-00565"},"M16-GAP-00565":{"line":564,"offset":96622,"length":167,"previous":"M16-GAP-00564","next":"M16-GAP-00566"},"M16-GAP-00566":{"line":565,"offset":96789,"length":168,"previous":"M16-GAP-00565","next":"M16-GAP-00567"},"M16-GAP-00567":{"line":566,"offset":96957,"length":177,"previous":"M16-GAP-00566","next":"M16-GAP-00568"},"M16-GAP-00568":{"line":567,"offset":97134,"length":177,"previous":"M16-GAP-00567","next":"M16-GAP-00569"},"M16-GAP-00569":{"line":568,"offset":97311,"length":183,"previous":"M16-GAP-00568","next":"M16-GAP-00570"},"M16-GAP-00570":{"line":569,"offset":97494,"length":184,"previous":"M16-GAP-00569","next":"M16-GAP-00571"},"M16-GAP-00571":{"line":570,"offset":97678,"length":180,"previous":"M16-GAP-00570","next":"M16-GAP-00572"},"M16-GAP-00572":{"line":571,"offset":97858,"length":184,"previous":"M16-GAP-00571","next":"M16-GAP-00573"},"M16-GAP-00573":{"line":572,"offset":98042,"length":178,"previous":"M16-GAP-00572","next":"M16-GAP-00574"},"M16-GAP-00574":{"line":573,"offset":98220,"length":182,"previous":"M16-GAP-00573","next":"M16-GAP-00575"},"M16-GAP-00575":{"line":574,"offset":98402,"length":185,"previous":"M16-GAP-00574","next":"M16-GAP-00576"},"M16-GAP-00576":{"line":575,"offset":98587,"length":180,"previous":"M16-GAP-00575","next":"M16-GAP-00577"},"M16-GAP-00577":{"line":576,"offset":98767,"length":178,"previous":"M16-GAP-00576","next":"M16-GAP-00578"},"M16-GAP-00578":{"line":577,"offset":98945,"length":183,"previous":"M16-GAP-00577","next":"M16-GAP-00579"},"M16-GAP-00579":{"line":578,"offset":99128,"length":183,"previous":"M16-GAP-00578","next":"M16-GAP-00580"},"M16-GAP-00580":{"line":579,"offset":99311,"length":182,"previous":"M16-GAP-00579","next":"M16-GAP-00581"},"M16-GAP-00581":{"line":580,"offset":99493,"length":179,"previous":"M16-GAP-00580","next":"M16-GAP-00582"},"M16-GAP-00582":{"line":581,"offset":99672,"length":186,"previous":"M16-GAP-00581","next":"M16-GAP-00583"},"M16-GAP-00583":{"line":582,"offset":99858,"length":186,"previous":"M16-GAP-00582","next":"M16-GAP-00584"},"M16-GAP-00584":{"line":583,"offset":100044,"length":181,"previous":"M16-GAP-00583","next":"M16-GAP-00585"},"M16-GAP-00585":{"line":584,"offset":100225,"length":183,"previous":"M16-GAP-00584","next":"M16-GAP-00586"},"M16-GAP-00586":{"line":585,"offset":100408,"length":175,"previous":"M16-GAP-00585","next":"M16-GAP-00587"},"M16-GAP-00587":{"line":586,"offset":100583,"length":178,"previous":"M16-GAP-00586","next":"M16-GAP-00588"},"M16-GAP-00588":{"line":587,"offset":100761,"length":171,"previous":"M16-GAP-00587","next":"M16-GAP-00589"},"M16-GAP-00589":{"line":588,"offset":100932,"length":175,"previous":"M16-GAP-00588","next":"M16-GAP-00590"},"M16-GAP-00590":{"line":589,"offset":101107,"length":173,"previous":"M16-GAP-00589","next":"M16-GAP-00591"},"M16-GAP-00591":{"line":590,"offset":101280,"length":177,"previous":"M16-GAP-00590","next":"M16-GAP-00592"},"M16-GAP-00592":{"line":591,"offset":101457,"length":174,"previous":"M16-GAP-00591","next":"M16-GAP-00593"},"M16-GAP-00593":{"line":592,"offset":101631,"length":181,"previous":"M16-GAP-00592","next":"M16-GAP-00594"},"M16-GAP-00594":{"line":593,"offset":101812,"length":183,"previous":"M16-GAP-00593","next":"M16-GAP-00595"},"M16-GAP-00595":{"line":594,"offset":101995,"length":189,"previous":"M16-GAP-00594","next":"M16-GAP-00596"},"M16-GAP-00596":{"line":595,"offset":102184,"length":186,"previous":"M16-GAP-00595","next":"M16-GAP-00597"},"M16-GAP-00597":{"line":596,"offset":102370,"length":182,"previous":"M16-GAP-00596","next":"M16-GAP-00598"},"M16-GAP-00598":{"line":597,"offset":102552,"length":179,"previous":"M16-GAP-00597","next":"M16-GAP-00599"},"M16-GAP-00599":{"line":598,"offset":102731,"length":171,"previous":"M16-GAP-00598","next":"M16-GAP-00600"},"M16-GAP-00600":{"line":599,"offset":102902,"length":168,"previous":"M16-GAP-00599","next":"M16-GAP-00601"},"M16-GAP-00601":{"line":600,"offset":103070,"length":172,"previous":"M16-GAP-00600","next":"M16-GAP-00602"},"M16-GAP-00602":{"line":601,"offset":103242,"length":171,"previous":"M16-GAP-00601","next":"M16-GAP-00603"},"M16-GAP-00603":{"line":602,"offset":103413,"length":169,"previous":"M16-GAP-00602","next":"M16-GAP-00604"},"M16-GAP-00604":{"line":603,"offset":103582,"length":162,"previous":"M16-GAP-00603","next":"M16-GAP-00605"},"M16-GAP-00605":{"line":604,"offset":103744,"length":162,"previous":"M16-GAP-00604","next":"M16-GAP-00606"},"M16-GAP-00606":{"line":605,"offset":103906,"length":169,"previous":"M16-GAP-00605","next":"M16-GAP-00607"},"M16-GAP-00607":{"line":606,"offset":104075,"length":175,"previous":"M16-GAP-00606","next":"M16-GAP-00608"},"M16-GAP-00608":{"line":607,"offset":104250,"length":163,"previous":"M16-GAP-00607","next":"M16-GAP-00609"},"M16-GAP-00609":{"line":608,"offset":104413,"length":174,"previous":"M16-GAP-00608","next":"M16-GAP-00610"},"M16-GAP-00610":{"line":609,"offset":104587,"length":163,"previous":"M16-GAP-00609","next":"M16-GAP-00611"},"M16-GAP-00611":{"line":610,"offset":104750,"length":169,"previous":"M16-GAP-00610","next":"M16-GAP-00612"},"M16-GAP-00612":{"line":611,"offset":104919,"length":174,"previous":"M16-GAP-00611","next":"M16-GAP-00613"},"M16-GAP-00613":{"line":612,"offset":105093,"length":163,"previous":"M16-GAP-00612","next":"M16-GAP-00614"},"M16-GAP-00614":{"line":613,"offset":105256,"length":165,"previous":"M16-GAP-00613","next":"M16-GAP-00615"},"M16-GAP-00615":{"line":614,"offset":105421,"length":175,"previous":"M16-GAP-00614","next":"M16-GAP-00616"},"M16-GAP-00616":{"line":615,"offset":105596,"length":175,"previous":"M16-GAP-00615","next":"M16-GAP-00617"},"M16-GAP-00617":{"line":616,"offset":105771,"length":169,"previous":"M16-GAP-00616","next":"M16-GAP-00618"},"M16-GAP-00618":{"line":617,"offset":105940,"length":160,"previous":"M16-GAP-00617","next":"M16-GAP-00619"},"M16-GAP-00619":{"line":618,"offset":106100,"length":164,"previous":"M16-GAP-00618","next":"M16-GAP-00620"},"M16-GAP-00620":{"line":619,"offset":106264,"length":170,"previous":"M16-GAP-00619","next":"M16-GAP-00621"},"M16-GAP-00621":{"line":620,"offset":106434,"length":162,"previous":"M16-GAP-00620","next":"M16-GAP-00622"},"M16-GAP-00622":{"line":621,"offset":106596,"length":164,"previous":"M16-GAP-00621","next":"M16-GAP-00623"},"M16-GAP-00623":{"line":622,"offset":106760,"length":163,"previous":"M16-GAP-00622","next":"M16-GAP-00624"},"M16-GAP-00624":{"line":623,"offset":106923,"length":162,"previous":"M16-GAP-00623","next":"M16-GAP-00625"},"M16-GAP-00625":{"line":624,"offset":107085,"length":176,"previous":"M16-GAP-00624","next":"M16-GAP-00626"},"M16-GAP-00626":{"line":625,"offset":107261,"length":168,"previous":"M16-GAP-00625","next":"M16-GAP-00627"},"M16-GAP-00627":{"line":626,"offset":107429,"length":162,"previous":"M16-GAP-00626","next":"M16-GAP-00628"},"M16-GAP-00628":{"line":627,"offset":107591,"length":166,"previous":"M16-GAP-00627","next":"M16-GAP-00629"},"M16-GAP-00629":{"line":628,"offset":107757,"length":171,"previous":"M16-GAP-00628","next":"M16-GAP-00630"},"M16-GAP-00630":{"line":629,"offset":107928,"length":166,"previous":"M16-GAP-00629","next":"M16-GAP-00631"},"M16-GAP-00631":{"line":630,"offset":108094,"length":167,"previous":"M16-GAP-00630","next":"M16-GAP-00632"},"M16-GAP-00632":{"line":631,"offset":108261,"length":168,"previous":"M16-GAP-00631","next":"M16-GAP-00633"},"M16-GAP-00633":{"line":632,"offset":108429,"length":178,"previous":"M16-GAP-00632","next":"M16-GAP-00634"},"M16-GAP-00634":{"line":633,"offset":108607,"length":168,"previous":"M16-GAP-00633","next":"M16-GAP-00635"},"M16-GAP-00635":{"line":634,"offset":108775,"length":166,"previous":"M16-GAP-00634","next":"M16-GAP-00636"},"M16-GAP-00636":{"line":635,"offset":108941,"length":167,"previous":"M16-GAP-00635","next":"M16-GAP-00637"},"M16-GAP-00637":{"line":636,"offset":109108,"length":172,"previous":"M16-GAP-00636","next":"M16-GAP-00638"},"M16-GAP-00638":{"line":637,"offset":109280,"length":169,"previous":"M16-GAP-00637","next":"M16-GAP-00639"},"M16-GAP-00639":{"line":638,"offset":109449,"length":165,"previous":"M16-GAP-00638","next":"M16-GAP-00640"},"M16-GAP-00640":{"line":639,"offset":109614,"length":166,"previous":"M16-GAP-00639","next":"M16-GAP-00641"},"M16-GAP-00641":{"line":640,"offset":109780,"length":168,"previous":"M16-GAP-00640","next":"M16-GAP-00642"},"M16-GAP-00642":{"line":641,"offset":109948,"length":166,"previous":"M16-GAP-00641","next":"M16-GAP-00643"},"M16-GAP-00643":{"line":642,"offset":110114,"length":167,"previous":"M16-GAP-00642","next":"M16-GAP-00644"},"M16-GAP-00644":{"line":643,"offset":110281,"length":171,"previous":"M16-GAP-00643","next":"M16-GAP-00645"},"M16-GAP-00645":{"line":644,"offset":110452,"length":165,"previous":"M16-GAP-00644","next":"M16-GAP-00646"},"M16-GAP-00646":{"line":645,"offset":110617,"length":166,"previous":"M16-GAP-00645","next":"M16-GAP-00647"},"M16-GAP-00647":{"line":646,"offset":110783,"length":168,"previous":"M16-GAP-00646","next":"M16-GAP-00648"},"M16-GAP-00648":{"line":647,"offset":110951,"length":166,"previous":"M16-GAP-00647","next":"M16-GAP-00649"},"M16-GAP-00649":{"line":648,"offset":111117,"length":167,"previous":"M16-GAP-00648","next":"M16-GAP-00650"},"M16-GAP-00650":{"line":649,"offset":111284,"length":171,"previous":"M16-GAP-00649","next":"M16-GAP-00651"},"M16-GAP-00651":{"line":650,"offset":111455,"length":167,"previous":"M16-GAP-00650","next":"M16-GAP-00652"},"M16-GAP-00652":{"line":651,"offset":111622,"length":167,"previous":"M16-GAP-00651","next":"M16-GAP-00653"},"M16-GAP-00653":{"line":652,"offset":111789,"length":164,"previous":"M16-GAP-00652","next":"M16-GAP-00654"},"M16-GAP-00654":{"line":653,"offset":111953,"length":167,"previous":"M16-GAP-00653","next":"M16-GAP-00655"},"M16-GAP-00655":{"line":654,"offset":112120,"length":172,"previous":"M16-GAP-00654","next":"M16-GAP-00656"},"M16-GAP-00656":{"line":655,"offset":112292,"length":170,"previous":"M16-GAP-00655","next":"M16-GAP-00657"},"M16-GAP-00657":{"line":656,"offset":112462,"length":162,"previous":"M16-GAP-00656","next":"M16-GAP-00658"},"M16-GAP-00658":{"line":657,"offset":112624,"length":166,"previous":"M16-GAP-00657","next":"M16-GAP-00659"},"M16-GAP-00659":{"line":658,"offset":112790,"length":160,"previous":"M16-GAP-00658","next":"M16-GAP-00660"},"M16-GAP-00660":{"line":659,"offset":112950,"length":167,"previous":"M16-GAP-00659","next":"M16-GAP-00661"},"M16-GAP-00661":{"line":660,"offset":113117,"length":160,"previous":"M16-GAP-00660","next":"M16-GAP-00662"},"M16-GAP-00662":{"line":661,"offset":113277,"length":166,"previous":"M16-GAP-00661","next":"M16-GAP-00663"},"M16-GAP-00663":{"line":662,"offset":113443,"length":167,"previous":"M16-GAP-00662","next":"M16-GAP-00664"},"M16-GAP-00664":{"line":663,"offset":113610,"length":169,"previous":"M16-GAP-00663","next":"M16-GAP-00665"},"M16-GAP-00665":{"line":664,"offset":113779,"length":165,"previous":"M16-GAP-00664","next":"M16-GAP-00666"},"M16-GAP-00666":{"line":665,"offset":113944,"length":168,"previous":"M16-GAP-00665","next":"M16-GAP-00667"},"M16-GAP-00667":{"line":666,"offset":114112,"length":165,"previous":"M16-GAP-00666","next":"M16-GAP-00668"},"M16-GAP-00668":{"line":667,"offset":114277,"length":164,"previous":"M16-GAP-00667","next":"M16-GAP-00669"},"M16-GAP-00669":{"line":668,"offset":114441,"length":167,"previous":"M16-GAP-00668","next":"M16-GAP-00670"},"M16-GAP-00670":{"line":669,"offset":114608,"length":175,"previous":"M16-GAP-00669","next":"M16-GAP-00671"},"M16-GAP-00671":{"line":670,"offset":114783,"length":166,"previous":"M16-GAP-00670","next":"M16-GAP-00672"},"M16-GAP-00672":{"line":671,"offset":114949,"length":176,"previous":"M16-GAP-00671","next":"M16-GAP-00673"},"M16-GAP-00673":{"line":672,"offset":115125,"length":167,"previous":"M16-GAP-00672","next":"M16-GAP-00674"},"M16-GAP-00674":{"line":673,"offset":115292,"length":170,"previous":"M16-GAP-00673","next":"M16-GAP-00675"},"M16-GAP-00675":{"line":674,"offset":115462,"length":162,"previous":"M16-GAP-00674","next":"M16-GAP-00676"},"M16-GAP-00676":{"line":675,"offset":115624,"length":173,"previous":"M16-GAP-00675","next":"M16-GAP-00677"},"M16-GAP-00677":{"line":676,"offset":115797,"length":177,"previous":"M16-GAP-00676","next":"M16-GAP-00678"},"M16-GAP-00678":{"line":677,"offset":115974,"length":176,"previous":"M16-GAP-00677","next":"M16-GAP-00679"},"M16-GAP-00679":{"line":678,"offset":116150,"length":179,"previous":"M16-GAP-00678","next":"M16-GAP-00680"},"M16-GAP-00680":{"line":679,"offset":116329,"length":183,"previous":"M16-GAP-00679","next":"M16-GAP-00681"},"M16-GAP-00681":{"line":680,"offset":116512,"length":185,"previous":"M16-GAP-00680","next":"M16-GAP-00682"},"M16-GAP-00682":{"line":681,"offset":116697,"length":182,"previous":"M16-GAP-00681","next":"M16-GAP-00683"},"M16-GAP-00683":{"line":682,"offset":116879,"length":186,"previous":"M16-GAP-00682","next":"M16-GAP-00684"},"M16-GAP-00684":{"line":683,"offset":117065,"length":182,"previous":"M16-GAP-00683","next":"M16-GAP-00685"},"M16-GAP-00685":{"line":684,"offset":117247,"length":174,"previous":"M16-GAP-00684","next":"M16-GAP-00686"},"M16-GAP-00686":{"line":685,"offset":117421,"length":173,"previous":"M16-GAP-00685","next":"M16-GAP-00687"},"M16-GAP-00687":{"line":686,"offset":117594,"length":167,"previous":"M16-GAP-00686","next":"M16-GAP-00688"},"M16-GAP-00688":{"line":687,"offset":117761,"length":189,"previous":"M16-GAP-00687","next":"M16-GAP-00689"},"M16-GAP-00689":{"line":688,"offset":117950,"length":173,"previous":"M16-GAP-00688","next":"M16-GAP-00690"},"M16-GAP-00690":{"line":689,"offset":118123,"length":170,"previous":"M16-GAP-00689","next":"M16-GAP-00691"},"M16-GAP-00691":{"line":690,"offset":118293,"length":179,"previous":"M16-GAP-00690","next":"M16-GAP-00692"},"M16-GAP-00692":{"line":691,"offset":118472,"length":180,"previous":"M16-GAP-00691","next":"M16-GAP-00693"},"M16-GAP-00693":{"line":692,"offset":118652,"length":182,"previous":"M16-GAP-00692","next":"M16-GAP-00694"},"M16-GAP-00694":{"line":693,"offset":118834,"length":166,"previous":"M16-GAP-00693","next":"M16-GAP-00695"},"M16-GAP-00695":{"line":694,"offset":119000,"length":169,"previous":"M16-GAP-00694","next":"M16-GAP-00696"},"M16-GAP-00696":{"line":695,"offset":119169,"length":173,"previous":"M16-GAP-00695","next":"M16-GAP-00697"},"M16-GAP-00697":{"line":696,"offset":119342,"length":170,"previous":"M16-GAP-00696","next":"M16-GAP-00698"},"M16-GAP-00698":{"line":697,"offset":119512,"length":174,"previous":"M16-GAP-00697","next":"M16-GAP-00699"},"M16-GAP-00699":{"line":698,"offset":119686,"length":166,"previous":"M16-GAP-00698","next":"M16-GAP-00700"},"M16-GAP-00700":{"line":699,"offset":119852,"length":175,"previous":"M16-GAP-00699","next":"M16-GAP-00701"},"M16-GAP-00701":{"line":700,"offset":120027,"length":162,"previous":"M16-GAP-00700","next":"M16-GAP-00702"},"M16-GAP-00702":{"line":701,"offset":120189,"length":169,"previous":"M16-GAP-00701","next":"M16-GAP-00703"},"M16-GAP-00703":{"line":702,"offset":120358,"length":168,"previous":"M16-GAP-00702","next":"M16-GAP-00704"},"M16-GAP-00704":{"line":703,"offset":120526,"length":161,"previous":"M16-GAP-00703","next":"M16-GAP-00705"},"M16-GAP-00705":{"line":704,"offset":120687,"length":167,"previous":"M16-GAP-00704","next":"M16-GAP-00706"},"M16-GAP-00706":{"line":705,"offset":120854,"length":165,"previous":"M16-GAP-00705","next":"M16-GAP-00707"},"M16-GAP-00707":{"line":706,"offset":121019,"length":163,"previous":"M16-GAP-00706","next":"M16-GAP-00708"},"M16-GAP-00708":{"line":707,"offset":121182,"length":178,"previous":"M16-GAP-00707","next":"M16-GAP-00709"},"M16-GAP-00709":{"line":708,"offset":121360,"length":178,"previous":"M16-GAP-00708","next":"M16-GAP-00710"},"M16-GAP-00710":{"line":709,"offset":121538,"length":179,"previous":"M16-GAP-00709","next":"M16-GAP-00711"},"M16-GAP-00711":{"line":710,"offset":121717,"length":166,"previous":"M16-GAP-00710","next":"M16-GAP-00712"},"M16-GAP-00712":{"line":711,"offset":121883,"length":171,"previous":"M16-GAP-00711","next":"M16-GAP-00713"},"M16-GAP-00713":{"line":712,"offset":122054,"length":161,"previous":"M16-GAP-00712","next":"M16-GAP-00714"},"M16-GAP-00714":{"line":713,"offset":122215,"length":168,"previous":"M16-GAP-00713","next":"M16-GAP-00715"},"M16-GAP-00715":{"line":714,"offset":122383,"length":173,"previous":"M16-GAP-00714","next":"M16-GAP-00716"},"M16-GAP-00716":{"line":715,"offset":122556,"length":169,"previous":"M16-GAP-00715","next":"M16-GAP-00717"},"M16-GAP-00717":{"line":716,"offset":122725,"length":175,"previous":"M16-GAP-00716","next":"M16-GAP-00718"},"M16-GAP-00718":{"line":717,"offset":122900,"length":170,"previous":"M16-GAP-00717","next":"M16-GAP-00719"},"M16-GAP-00719":{"line":718,"offset":123070,"length":171,"previous":"M16-GAP-00718","next":"M16-GAP-00720"},"M16-GAP-00720":{"line":719,"offset":123241,"length":173,"previous":"M16-GAP-00719","next":"M16-GAP-00721"},"M16-GAP-00721":{"line":720,"offset":123414,"length":172,"previous":"M16-GAP-00720","next":"M16-GAP-00722"},"M16-GAP-00722":{"line":721,"offset":123586,"length":167,"previous":"M16-GAP-00721","next":"M16-GAP-00723"},"M16-GAP-00723":{"line":722,"offset":123753,"length":172,"previous":"M16-GAP-00722","next":"M16-GAP-00724"},"M16-GAP-00724":{"line":723,"offset":123925,"length":175,"previous":"M16-GAP-00723","next":"M16-GAP-00725"},"M16-GAP-00725":{"line":724,"offset":124100,"length":176,"previous":"M16-GAP-00724","next":"M16-GAP-00726"},"M16-GAP-00726":{"line":725,"offset":124276,"length":168,"previous":"M16-GAP-00725","next":"M16-GAP-00727"},"M16-GAP-00727":{"line":726,"offset":124444,"length":161,"previous":"M16-GAP-00726","next":"M16-GAP-00728"},"M16-GAP-00728":{"line":727,"offset":124605,"length":175,"previous":"M16-GAP-00727","next":"M16-GAP-00729"},"M16-GAP-00729":{"line":728,"offset":124780,"length":172,"previous":"M16-GAP-00728","next":"M16-GAP-00730"},"M16-GAP-00730":{"line":729,"offset":124952,"length":170,"previous":"M16-GAP-00729","next":"M16-GAP-00731"},"M16-GAP-00731":{"line":730,"offset":125122,"length":172,"previous":"M16-GAP-00730","next":"M16-GAP-00732"},"M16-GAP-00732":{"line":731,"offset":125294,"length":167,"previous":"M16-GAP-00731","next":"M16-GAP-00733"},"M16-GAP-00733":{"line":732,"offset":125461,"length":168,"previous":"M16-GAP-00732","next":"M16-GAP-00734"},"M16-GAP-00734":{"line":733,"offset":125629,"length":163,"previous":"M16-GAP-00733","next":"M16-GAP-00735"},"M16-GAP-00735":{"line":734,"offset":125792,"length":162,"previous":"M16-GAP-00734","next":"M16-GAP-00736"},"M16-GAP-00736":{"line":735,"offset":125954,"length":173,"previous":"M16-GAP-00735","next":"M16-GAP-00737"},"M16-GAP-00737":{"line":736,"offset":126127,"length":166,"previous":"M16-GAP-00736","next":"M16-GAP-00738"},"M16-GAP-00738":{"line":737,"offset":126293,"length":163,"previous":"M16-GAP-00737","next":"M16-GAP-00739"},"M16-GAP-00739":{"line":738,"offset":126456,"length":172,"previous":"M16-GAP-00738","next":"M16-GAP-00740"},"M16-GAP-00740":{"line":739,"offset":126628,"length":170,"previous":"M16-GAP-00739","next":"M16-GAP-00741"},"M16-GAP-00741":{"line":740,"offset":126798,"length":176,"previous":"M16-GAP-00740","next":"M16-GAP-00742"},"M16-GAP-00742":{"line":741,"offset":126974,"length":167,"previous":"M16-GAP-00741","next":"M16-GAP-00743"},"M16-GAP-00743":{"line":742,"offset":127141,"length":167,"previous":"M16-GAP-00742","next":"M16-GAP-00744"},"M16-GAP-00744":{"line":743,"offset":127308,"length":170,"previous":"M16-GAP-00743","next":"M16-GAP-00745"},"M16-GAP-00745":{"line":744,"offset":127478,"length":170,"previous":"M16-GAP-00744","next":"M16-GAP-00746"},"M16-GAP-00746":{"line":745,"offset":127648,"length":175,"previous":"M16-GAP-00745","next":"M16-GAP-00747"},"M16-GAP-00747":{"line":746,"offset":127823,"length":169,"previous":"M16-GAP-00746","next":"M16-GAP-00748"},"M16-GAP-00748":{"line":747,"offset":127992,"length":173,"previous":"M16-GAP-00747","next":"M16-GAP-00749"},"M16-GAP-00749":{"line":748,"offset":128165,"length":168,"previous":"M16-GAP-00748","next":"M16-GAP-00750"},"M16-GAP-00750":{"line":749,"offset":128333,"length":170,"previous":"M16-GAP-00749","next":"M16-GAP-00751"},"M16-GAP-00751":{"line":750,"offset":128503,"length":168,"previous":"M16-GAP-00750","next":"M16-GAP-00752"},"M16-GAP-00752":{"line":751,"offset":128671,"length":162,"previous":"M16-GAP-00751","next":"M16-GAP-00753"},"M16-GAP-00753":{"line":752,"offset":128833,"length":163,"previous":"M16-GAP-00752","next":"M16-GAP-00754"},"M16-GAP-00754":{"line":753,"offset":128996,"length":161,"previous":"M16-GAP-00753","next":"M16-GAP-00755"},"M16-GAP-00755":{"line":754,"offset":129157,"length":174,"previous":"M16-GAP-00754","next":"M16-GAP-00756"},"M16-GAP-00756":{"line":755,"offset":129331,"length":173,"previous":"M16-GAP-00755","next":"M16-GAP-00757"},"M16-GAP-00757":{"line":756,"offset":129504,"length":168,"previous":"M16-GAP-00756","next":"M16-GAP-00758"},"M16-GAP-00758":{"line":757,"offset":129672,"length":165,"previous":"M16-GAP-00757","next":"M16-GAP-00759"},"M16-GAP-00759":{"line":758,"offset":129837,"length":167,"previous":"M16-GAP-00758","next":"M16-GAP-00760"},"M16-GAP-00760":{"line":759,"offset":130004,"length":170,"previous":"M16-GAP-00759","next":"M16-GAP-00761"},"M16-GAP-00761":{"line":760,"offset":130174,"length":184,"previous":"M16-GAP-00760","next":"M16-GAP-00762"},"M16-GAP-00762":{"line":761,"offset":130358,"length":193,"previous":"M16-GAP-00761","next":"M16-GAP-00763"},"M16-GAP-00763":{"line":762,"offset":130551,"length":177,"previous":"M16-GAP-00762","next":"M16-GAP-00764"},"M16-GAP-00764":{"line":763,"offset":130728,"length":173,"previous":"M16-GAP-00763","next":"M16-GAP-00765"},"M16-GAP-00765":{"line":764,"offset":130901,"length":176,"previous":"M16-GAP-00764","next":"M16-GAP-00766"},"M16-GAP-00766":{"line":765,"offset":131077,"length":183,"previous":"M16-GAP-00765","next":"M16-GAP-00767"},"M16-GAP-00767":{"line":766,"offset":131260,"length":169,"previous":"M16-GAP-00766","next":"M16-GAP-00768"},"M16-GAP-00768":{"line":767,"offset":131429,"length":177,"previous":"M16-GAP-00767","next":"M16-GAP-00769"},"M16-GAP-00769":{"line":768,"offset":131606,"length":171,"previous":"M16-GAP-00768","next":"M16-GAP-00770"},"M16-GAP-00770":{"line":769,"offset":131777,"length":181,"previous":"M16-GAP-00769","next":"M16-GAP-00771"},"M16-GAP-00771":{"line":770,"offset":131958,"length":177,"previous":"M16-GAP-00770","next":"M16-GAP-00772"},"M16-GAP-00772":{"line":771,"offset":132135,"length":173,"previous":"M16-GAP-00771","next":"M16-GAP-00773"},"M16-GAP-00773":{"line":772,"offset":132308,"length":174,"previous":"M16-GAP-00772","next":"M16-GAP-00774"},"M16-GAP-00774":{"line":773,"offset":132482,"length":179,"previous":"M16-GAP-00773","next":"M16-GAP-00775"},"M16-GAP-00775":{"line":774,"offset":132661,"length":174,"previous":"M16-GAP-00774","next":"M16-GAP-00776"},"M16-GAP-00776":{"line":775,"offset":132835,"length":176,"previous":"M16-GAP-00775","next":"M16-GAP-00777"},"M16-GAP-00777":{"line":776,"offset":133011,"length":172,"previous":"M16-GAP-00776","next":"M16-GAP-00778"},"M16-GAP-00778":{"line":777,"offset":133183,"length":177,"previous":"M16-GAP-00777","next":"M16-GAP-00779"},"M16-GAP-00779":{"line":778,"offset":133360,"length":169,"previous":"M16-GAP-00778","next":"M16-GAP-00780"},"M16-GAP-00780":{"line":779,"offset":133529,"length":186,"previous":"M16-GAP-00779","next":"M16-GAP-00781"},"M16-GAP-00781":{"line":780,"offset":133715,"length":180,"previous":"M16-GAP-00780","next":"M16-GAP-00782"},"M16-GAP-00782":{"line":781,"offset":133895,"length":183,"previous":"M16-GAP-00781","next":"M16-GAP-00783"},"M16-GAP-00783":{"line":782,"offset":134078,"length":176,"previous":"M16-GAP-00782","next":"M16-GAP-00784"},"M16-GAP-00784":{"line":783,"offset":134254,"length":185,"previous":"M16-GAP-00783","next":"M16-GAP-00785"},"M16-GAP-00785":{"line":784,"offset":134439,"length":175,"previous":"M16-GAP-00784","next":"M16-GAP-00786"},"M16-GAP-00786":{"line":785,"offset":134614,"length":179,"previous":"M16-GAP-00785","next":"M16-GAP-00787"},"M16-GAP-00787":{"line":786,"offset":134793,"length":177,"previous":"M16-GAP-00786","next":"M16-GAP-00788"},"M16-GAP-00788":{"line":787,"offset":134970,"length":174,"previous":"M16-GAP-00787","next":"M16-GAP-00789"},"M16-GAP-00789":{"line":788,"offset":135144,"length":180,"previous":"M16-GAP-00788","next":"M16-GAP-00790"},"M16-GAP-00790":{"line":789,"offset":135324,"length":187,"previous":"M16-GAP-00789","next":"M16-GAP-00791"},"M16-GAP-00791":{"line":790,"offset":135511,"length":180,"previous":"M16-GAP-00790","next":"M16-GAP-00792"},"M16-GAP-00792":{"line":791,"offset":135691,"length":186,"previous":"M16-GAP-00791","next":"M16-GAP-00793"},"M16-GAP-00793":{"line":792,"offset":135877,"length":183,"previous":"M16-GAP-00792","next":"M16-GAP-00794"},"M16-GAP-00794":{"line":793,"offset":136060,"length":175,"previous":"M16-GAP-00793","next":"M16-GAP-00795"},"M16-GAP-00795":{"line":794,"offset":136235,"length":178,"previous":"M16-GAP-00794","next":"M16-GAP-00796"},"M16-GAP-00796":{"line":795,"offset":136413,"length":179,"previous":"M16-GAP-00795","next":"M16-GAP-00797"},"M16-GAP-00797":{"line":796,"offset":136592,"length":179,"previous":"M16-GAP-00796","next":"M16-GAP-00798"},"M16-GAP-00798":{"line":797,"offset":136771,"length":182,"previous":"M16-GAP-00797","next":"M16-GAP-00799"},"M16-GAP-00799":{"line":798,"offset":136953,"length":183,"previous":"M16-GAP-00798","next":"M16-GAP-00800"},"M16-GAP-00800":{"line":799,"offset":137136,"length":176,"previous":"M16-GAP-00799","next":"M16-GAP-00801"},"M16-GAP-00801":{"line":800,"offset":137312,"length":175,"previous":"M16-GAP-00800","next":"M16-GAP-00802"},"M16-GAP-00802":{"line":801,"offset":137487,"length":177,"previous":"M16-GAP-00801","next":"M16-GAP-00803"},"M16-GAP-00803":{"line":802,"offset":137664,"length":177,"previous":"M16-GAP-00802","next":"M16-GAP-00804"},"M16-GAP-00804":{"line":803,"offset":137841,"length":188,"previous":"M16-GAP-00803","next":"M16-GAP-00805"},"M16-GAP-00805":{"line":804,"offset":138029,"length":178,"previous":"M16-GAP-00804","next":"M16-GAP-00806"},"M16-GAP-00806":{"line":805,"offset":138207,"length":181,"previous":"M16-GAP-00805","next":"M16-GAP-00807"},"M16-GAP-00807":{"line":806,"offset":138388,"length":182,"previous":"M16-GAP-00806","next":"M16-GAP-00808"},"M16-GAP-00808":{"line":807,"offset":138570,"length":189,"previous":"M16-GAP-00807","next":"M16-GAP-00809"},"M16-GAP-00809":{"line":808,"offset":138759,"length":185,"previous":"M16-GAP-00808","next":"M16-GAP-00810"},"M16-GAP-00810":{"line":809,"offset":138944,"length":180,"previous":"M16-GAP-00809","next":"M16-GAP-00811"},"M16-GAP-00811":{"line":810,"offset":139124,"length":180,"previous":"M16-GAP-00810","next":"M16-GAP-00812"},"M16-GAP-00812":{"line":811,"offset":139304,"length":184,"previous":"M16-GAP-00811","next":"M16-GAP-00813"},"M16-GAP-00813":{"line":812,"offset":139488,"length":178,"previous":"M16-GAP-00812","next":"M16-GAP-00814"},"M16-GAP-00814":{"line":813,"offset":139666,"length":172,"previous":"M16-GAP-00813","next":"M16-GAP-00815"},"M16-GAP-00815":{"line":814,"offset":139838,"length":181,"previous":"M16-GAP-00814","next":"M16-GAP-00816"},"M16-GAP-00816":{"line":815,"offset":140019,"length":170,"previous":"M16-GAP-00815","next":"M16-GAP-00817"},"M16-GAP-00817":{"line":816,"offset":140189,"length":168,"previous":"M16-GAP-00816","next":"M16-GAP-00818"},"M16-GAP-00818":{"line":817,"offset":140357,"length":178,"previous":"M16-GAP-00817","next":"M16-GAP-00819"},"M16-GAP-00819":{"line":818,"offset":140535,"length":178,"previous":"M16-GAP-00818","next":"M16-GAP-00820"},"M16-GAP-00820":{"line":819,"offset":140713,"length":181,"previous":"M16-GAP-00819","next":"M16-GAP-00821"},"M16-GAP-00821":{"line":820,"offset":140894,"length":180,"previous":"M16-GAP-00820","next":"M16-GAP-00822"},"M16-GAP-00822":{"line":821,"offset":141074,"length":179,"previous":"M16-GAP-00821","next":"M16-GAP-00823"},"M16-GAP-00823":{"line":822,"offset":141253,"length":183,"previous":"M16-GAP-00822","next":"M16-GAP-00824"},"M16-GAP-00824":{"line":823,"offset":141436,"length":188,"previous":"M16-GAP-00823","next":"M16-GAP-00825"},"M16-GAP-00825":{"line":824,"offset":141624,"length":183,"previous":"M16-GAP-00824","next":"M16-GAP-00826"},"M16-GAP-00826":{"line":825,"offset":141807,"length":172,"previous":"M16-GAP-00825","next":"M16-GAP-00827"},"M16-GAP-00827":{"line":826,"offset":141979,"length":174,"previous":"M16-GAP-00826","next":"M16-GAP-00828"},"M16-GAP-00828":{"line":827,"offset":142153,"length":174,"previous":"M16-GAP-00827","next":"M16-GAP-00829"},"M16-GAP-00829":{"line":828,"offset":142327,"length":177,"previous":"M16-GAP-00828","next":"M16-GAP-00830"},"M16-GAP-00830":{"line":829,"offset":142504,"length":182,"previous":"M16-GAP-00829","next":"M16-GAP-00831"},"M16-GAP-00831":{"line":830,"offset":142686,"length":175,"previous":"M16-GAP-00830","next":"M16-GAP-00832"},"M16-GAP-00832":{"line":831,"offset":142861,"length":181,"previous":"M16-GAP-00831","next":"M16-GAP-00833"},"M16-GAP-00833":{"line":832,"offset":143042,"length":186,"previous":"M16-GAP-00832","next":"M16-GAP-00834"},"M16-GAP-00834":{"line":833,"offset":143228,"length":176,"previous":"M16-GAP-00833","next":"M16-GAP-00835"},"M16-GAP-00835":{"line":834,"offset":143404,"length":176,"previous":"M16-GAP-00834","next":"M16-GAP-00836"},"M16-GAP-00836":{"line":835,"offset":143580,"length":176,"previous":"M16-GAP-00835","next":"M16-GAP-00837"},"M16-GAP-00837":{"line":836,"offset":143756,"length":178,"previous":"M16-GAP-00836","next":"M16-GAP-00838"},"M16-GAP-00838":{"line":837,"offset":143934,"length":176,"previous":"M16-GAP-00837","next":"M16-GAP-00839"},"M16-GAP-00839":{"line":838,"offset":144110,"length":178,"previous":"M16-GAP-00838","next":"M16-GAP-00840"},"M16-GAP-00840":{"line":839,"offset":144288,"length":179,"previous":"M16-GAP-00839","next":"M16-GAP-00841"},"M16-GAP-00841":{"line":840,"offset":144467,"length":173,"previous":"M16-GAP-00840","next":"M16-GAP-00842"},"M16-GAP-00842":{"line":841,"offset":144640,"length":179,"previous":"M16-GAP-00841","next":"M16-GAP-00843"},"M16-GAP-00843":{"line":842,"offset":144819,"length":184,"previous":"M16-GAP-00842","next":"M16-GAP-00844"},"M16-GAP-00844":{"line":843,"offset":145003,"length":180,"previous":"M16-GAP-00843","next":"M16-GAP-00845"},"M16-GAP-00845":{"line":844,"offset":145183,"length":185,"previous":"M16-GAP-00844","next":"M16-GAP-00846"},"M16-GAP-00846":{"line":845,"offset":145368,"length":179,"previous":"M16-GAP-00845","next":"M16-GAP-00847"},"M16-GAP-00847":{"line":846,"offset":145547,"length":180,"previous":"M16-GAP-00846","next":"M16-GAP-00848"},"M16-GAP-00848":{"line":847,"offset":145727,"length":177,"previous":"M16-GAP-00847","next":"M16-GAP-00849"},"M16-GAP-00849":{"line":848,"offset":145904,"length":183,"previous":"M16-GAP-00848","next":"M16-GAP-00850"},"M16-GAP-00850":{"line":849,"offset":146087,"length":180,"previous":"M16-GAP-00849","next":"M16-GAP-00851"},"M16-GAP-00851":{"line":850,"offset":146267,"length":180,"previous":"M16-GAP-00850","next":"M16-GAP-00852"},"M16-GAP-00852":{"line":851,"offset":146447,"length":184,"previous":"M16-GAP-00851","next":"M16-GAP-00853"},"M16-GAP-00853":{"line":852,"offset":146631,"length":186,"previous":"M16-GAP-00852","next":"M16-GAP-00854"},"M16-GAP-00854":{"line":853,"offset":146817,"length":188,"previous":"M16-GAP-00853","next":"M16-GAP-00855"},"M16-GAP-00855":{"line":854,"offset":147005,"length":179,"previous":"M16-GAP-00854","next":"M16-GAP-00856"},"M16-GAP-00856":{"line":855,"offset":147184,"length":177,"previous":"M16-GAP-00855","next":"M16-GAP-00857"},"M16-GAP-00857":{"line":856,"offset":147361,"length":184,"previous":"M16-GAP-00856","next":"M16-GAP-00858"},"M16-GAP-00858":{"line":857,"offset":147545,"length":189,"previous":"M16-GAP-00857","next":"M16-GAP-00859"},"M16-GAP-00859":{"line":858,"offset":147734,"length":190,"previous":"M16-GAP-00858","next":"M16-GAP-00860"},"M16-GAP-00860":{"line":859,"offset":147924,"length":180,"previous":"M16-GAP-00859","next":"M16-GAP-00861"},"M16-GAP-00861":{"line":860,"offset":148104,"length":178,"previous":"M16-GAP-00860","next":"M16-GAP-00862"},"M16-GAP-00862":{"line":861,"offset":148282,"length":177,"previous":"M16-GAP-00861","next":"M16-GAP-00863"},"M16-GAP-00863":{"line":862,"offset":148459,"length":181,"previous":"M16-GAP-00862","next":"M16-GAP-00864"},"M16-GAP-00864":{"line":863,"offset":148640,"length":188,"previous":"M16-GAP-00863","next":"M16-GAP-00865"},"M16-GAP-00865":{"line":864,"offset":148828,"length":188,"previous":"M16-GAP-00864","next":"M16-GAP-00866"},"M16-GAP-00866":{"line":865,"offset":149016,"length":176,"previous":"M16-GAP-00865","next":"M16-GAP-00867"},"M16-GAP-00867":{"line":866,"offset":149192,"length":181,"previous":"M16-GAP-00866","next":"M16-GAP-00868"},"M16-GAP-00868":{"line":867,"offset":149373,"length":176,"previous":"M16-GAP-00867","next":"M16-GAP-00869"},"M16-GAP-00869":{"line":868,"offset":149549,"length":184,"previous":"M16-GAP-00868","next":"M16-GAP-00870"},"M16-GAP-00870":{"line":869,"offset":149733,"length":197,"previous":"M16-GAP-00869","next":"M16-GAP-00871"},"M16-GAP-00871":{"line":870,"offset":149930,"length":181,"previous":"M16-GAP-00870","next":"M16-GAP-00872"},"M16-GAP-00872":{"line":871,"offset":150111,"length":184,"previous":"M16-GAP-00871","next":"M16-GAP-00873"},"M16-GAP-00873":{"line":872,"offset":150295,"length":184,"previous":"M16-GAP-00872","next":"M16-GAP-00874"},"M16-GAP-00874":{"line":873,"offset":150479,"length":181,"previous":"M16-GAP-00873","next":"M16-GAP-00875"},"M16-GAP-00875":{"line":874,"offset":150660,"length":187,"previous":"M16-GAP-00874","next":"M16-GAP-00876"},"M16-GAP-00876":{"line":875,"offset":150847,"length":191,"previous":"M16-GAP-00875","next":"M16-GAP-00877"},"M16-GAP-00877":{"line":876,"offset":151038,"length":184,"previous":"M16-GAP-00876","next":"M16-GAP-00878"},"M16-GAP-00878":{"line":877,"offset":151222,"length":182,"previous":"M16-GAP-00877","next":"M16-GAP-00879"},"M16-GAP-00879":{"line":878,"offset":151404,"length":184,"previous":"M16-GAP-00878","next":"M16-GAP-00880"},"M16-GAP-00880":{"line":879,"offset":151588,"length":178,"previous":"M16-GAP-00879","next":"M16-GAP-00881"},"M16-GAP-00881":{"line":880,"offset":151766,"length":178,"previous":"M16-GAP-00880","next":"M16-GAP-00882"},"M16-GAP-00882":{"line":881,"offset":151944,"length":188,"previous":"M16-GAP-00881","next":"M16-GAP-00883"},"M16-GAP-00883":{"line":882,"offset":152132,"length":182,"previous":"M16-GAP-00882","next":"M16-GAP-00884"},"M16-GAP-00884":{"line":883,"offset":152314,"length":172,"previous":"M16-GAP-00883","next":"M16-GAP-00885"},"M16-GAP-00885":{"line":884,"offset":152486,"length":169,"previous":"M16-GAP-00884","next":"M16-GAP-00886"},"M16-GAP-00886":{"line":885,"offset":152655,"length":176,"previous":"M16-GAP-00885","next":"M16-GAP-00887"},"M16-GAP-00887":{"line":886,"offset":152831,"length":174,"previous":"M16-GAP-00886","next":"M16-GAP-00888"},"M16-GAP-00888":{"line":887,"offset":153005,"length":171,"previous":"M16-GAP-00887","next":"M16-GAP-00889"},"M16-GAP-00889":{"line":888,"offset":153176,"length":172,"previous":"M16-GAP-00888","next":"M16-GAP-00890"},"M16-GAP-00890":{"line":889,"offset":153348,"length":178,"previous":"M16-GAP-00889","next":"M16-GAP-00891"},"M16-GAP-00891":{"line":890,"offset":153526,"length":173,"previous":"M16-GAP-00890","next":"M16-GAP-00892"},"M16-GAP-00892":{"line":891,"offset":153699,"length":174,"previous":"M16-GAP-00891","next":"M16-GAP-00893"},"M16-GAP-00893":{"line":892,"offset":153873,"length":170,"previous":"M16-GAP-00892","next":"M16-GAP-00894"},"M16-GAP-00894":{"line":893,"offset":154043,"length":168,"previous":"M16-GAP-00893","next":"M16-GAP-00895"},"M16-GAP-00895":{"line":894,"offset":154211,"length":161,"previous":"M16-GAP-00894","next":"M16-GAP-00896"},"M16-GAP-00896":{"line":895,"offset":154372,"length":178,"previous":"M16-GAP-00895","next":"M16-GAP-00897"},"M16-GAP-00897":{"line":896,"offset":154550,"length":163,"previous":"M16-GAP-00896","next":"M16-GAP-00898"},"M16-GAP-00898":{"line":897,"offset":154713,"length":175,"previous":"M16-GAP-00897","next":"M16-GAP-00899"},"M16-GAP-00899":{"line":898,"offset":154888,"length":160,"previous":"M16-GAP-00898","next":"M16-GAP-00900"},"M16-GAP-00900":{"line":899,"offset":155048,"length":161,"previous":"M16-GAP-00899","next":"M16-GAP-00901"},"M16-GAP-00901":{"line":900,"offset":155209,"length":168,"previous":"M16-GAP-00900","next":"M16-GAP-00902"},"M16-GAP-00902":{"line":901,"offset":155377,"length":161,"previous":"M16-GAP-00901","next":"M16-GAP-00903"},"M16-GAP-00903":{"line":902,"offset":155538,"length":170,"previous":"M16-GAP-00902","next":"M16-GAP-00904"},"M16-GAP-00904":{"line":903,"offset":155708,"length":169,"previous":"M16-GAP-00903","next":"M16-GAP-00905"},"M16-GAP-00905":{"line":904,"offset":155877,"length":172,"previous":"M16-GAP-00904","next":"M16-GAP-00906"},"M16-GAP-00906":{"line":905,"offset":156049,"length":163,"previous":"M16-GAP-00905","next":"M16-GAP-00907"},"M16-GAP-00907":{"line":906,"offset":156212,"length":175,"previous":"M16-GAP-00906","next":"M16-GAP-00908"},"M16-GAP-00908":{"line":907,"offset":156387,"length":170,"previous":"M16-GAP-00907","next":"M16-GAP-00909"},"M16-GAP-00909":{"line":908,"offset":156557,"length":164,"previous":"M16-GAP-00908","next":"M16-GAP-00910"},"M16-GAP-00910":{"line":909,"offset":156721,"length":163,"previous":"M16-GAP-00909","next":"M16-GAP-00911"},"M16-GAP-00911":{"line":910,"offset":156884,"length":174,"previous":"M16-GAP-00910","next":"M16-GAP-00912"},"M16-GAP-00912":{"line":911,"offset":157058,"length":163,"previous":"M16-GAP-00911","next":"M16-GAP-00913"},"M16-GAP-00913":{"line":912,"offset":157221,"length":168,"previous":"M16-GAP-00912","next":"M16-GAP-00914"},"M16-GAP-00914":{"line":913,"offset":157389,"length":161,"previous":"M16-GAP-00913","next":"M16-GAP-00915"},"M16-GAP-00915":{"line":914,"offset":157550,"length":174,"previous":"M16-GAP-00914","next":"M16-GAP-00916"},"M16-GAP-00916":{"line":915,"offset":157724,"length":164,"previous":"M16-GAP-00915","next":"M16-GAP-00917"},"M16-GAP-00917":{"line":916,"offset":157888,"length":170,"previous":"M16-GAP-00916","next":"M16-GAP-00918"},"M16-GAP-00918":{"line":917,"offset":158058,"length":165,"previous":"M16-GAP-00917","next":"M16-GAP-00919"},"M16-GAP-00919":{"line":918,"offset":158223,"length":166,"previous":"M16-GAP-00918","next":"M16-GAP-00920"},"M16-GAP-00920":{"line":919,"offset":158389,"length":168,"previous":"M16-GAP-00919","next":"M16-GAP-00921"},"M16-GAP-00921":{"line":920,"offset":158557,"length":163,"previous":"M16-GAP-00920","next":"M16-GAP-00922"},"M16-GAP-00922":{"line":921,"offset":158720,"length":165,"previous":"M16-GAP-00921","next":"M16-GAP-00923"},"M16-GAP-00923":{"line":922,"offset":158885,"length":175,"previous":"M16-GAP-00922","next":"M16-GAP-00924"},"M16-GAP-00924":{"line":923,"offset":159060,"length":175,"previous":"M16-GAP-00923","next":"M16-GAP-00925"},"M16-GAP-00925":{"line":924,"offset":159235,"length":166,"previous":"M16-GAP-00924","next":"M16-GAP-00926"},"M16-GAP-00926":{"line":925,"offset":159401,"length":165,"previous":"M16-GAP-00925","next":"M16-GAP-00927"},"M16-GAP-00927":{"line":926,"offset":159566,"length":170,"previous":"M16-GAP-00926","next":"M16-GAP-00928"},"M16-GAP-00928":{"line":927,"offset":159736,"length":166,"previous":"M16-GAP-00927","next":"M16-GAP-00929"},"M16-GAP-00929":{"line":928,"offset":159902,"length":173,"previous":"M16-GAP-00928","next":"M16-GAP-00930"},"M16-GAP-00930":{"line":929,"offset":160075,"length":169,"previous":"M16-GAP-00929","next":"M16-GAP-00931"},"M16-GAP-00931":{"line":930,"offset":160244,"length":170,"previous":"M16-GAP-00930","next":"M16-GAP-00932"},"M16-GAP-00932":{"line":931,"offset":160414,"length":172,"previous":"M16-GAP-00931","next":"M16-GAP-00933"},"M16-GAP-00933":{"line":932,"offset":160586,"length":166,"previous":"M16-GAP-00932","next":"M16-GAP-00934"},"M16-GAP-00934":{"line":933,"offset":160752,"length":167,"previous":"M16-GAP-00933","next":"M16-GAP-00935"},"M16-GAP-00935":{"line":934,"offset":160919,"length":167,"previous":"M16-GAP-00934","next":"M16-GAP-00936"},"M16-GAP-00936":{"line":935,"offset":161086,"length":168,"previous":"M16-GAP-00935","next":"M16-GAP-00937"},"M16-GAP-00937":{"line":936,"offset":161254,"length":167,"previous":"M16-GAP-00936","next":"M16-GAP-00938"},"M16-GAP-00938":{"line":937,"offset":161421,"length":169,"previous":"M16-GAP-00937","next":"M16-GAP-00939"},"M16-GAP-00939":{"line":938,"offset":161590,"length":169,"previous":"M16-GAP-00938","next":"M16-GAP-00940"},"M16-GAP-00940":{"line":939,"offset":161759,"length":178,"previous":"M16-GAP-00939","next":"M16-GAP-00941"},"M16-GAP-00941":{"line":940,"offset":161937,"length":166,"previous":"M16-GAP-00940","next":"M16-GAP-00942"},"M16-GAP-00942":{"line":941,"offset":162103,"length":166,"previous":"M16-GAP-00941","next":"M16-GAP-00943"},"M16-GAP-00943":{"line":942,"offset":162269,"length":167,"previous":"M16-GAP-00942","next":"M16-GAP-00944"},"M16-GAP-00944":{"line":943,"offset":162436,"length":163,"previous":"M16-GAP-00943","next":"M16-GAP-00945"},"M16-GAP-00945":{"line":944,"offset":162599,"length":171,"previous":"M16-GAP-00944","next":"M16-GAP-00946"},"M16-GAP-00946":{"line":945,"offset":162770,"length":169,"previous":"M16-GAP-00945","next":"M16-GAP-00947"},"M16-GAP-00947":{"line":946,"offset":162939,"length":170,"previous":"M16-GAP-00946","next":"M16-GAP-00948"},"M16-GAP-00948":{"line":947,"offset":163109,"length":172,"previous":"M16-GAP-00947","next":"M16-GAP-00949"},"M16-GAP-00949":{"line":948,"offset":163281,"length":170,"previous":"M16-GAP-00948","next":"M16-GAP-00950"},"M16-GAP-00950":{"line":949,"offset":163451,"length":172,"previous":"M16-GAP-00949","next":"M16-GAP-00951"},"M16-GAP-00951":{"line":950,"offset":163623,"length":175,"previous":"M16-GAP-00950","next":"M16-GAP-00952"},"M16-GAP-00952":{"line":951,"offset":163798,"length":161,"previous":"M16-GAP-00951","next":"M16-GAP-00953"},"M16-GAP-00953":{"line":952,"offset":163959,"length":169,"previous":"M16-GAP-00952","next":"M16-GAP-00954"},"M16-GAP-00954":{"line":953,"offset":164128,"length":164,"previous":"M16-GAP-00953","next":"M16-GAP-00955"},"M16-GAP-00955":{"line":954,"offset":164292,"length":167,"previous":"M16-GAP-00954","next":"M16-GAP-00956"},"M16-GAP-00956":{"line":955,"offset":164459,"length":174,"previous":"M16-GAP-00955","next":"M16-GAP-00957"},"M16-GAP-00957":{"line":956,"offset":164633,"length":162,"previous":"M16-GAP-00956","next":"M16-GAP-00958"},"M16-GAP-00958":{"line":957,"offset":164795,"length":164,"previous":"M16-GAP-00957","next":"M16-GAP-00959"},"M16-GAP-00959":{"line":958,"offset":164959,"length":164,"previous":"M16-GAP-00958","next":"M16-GAP-00960"},"M16-GAP-00960":{"line":959,"offset":165123,"length":168,"previous":"M16-GAP-00959","next":"M16-GAP-00961"},"M16-GAP-00961":{"line":960,"offset":165291,"length":168,"previous":"M16-GAP-00960","next":"M16-GAP-00962"},"M16-GAP-00962":{"line":961,"offset":165459,"length":174,"previous":"M16-GAP-00961","next":"M16-GAP-00963"},"M16-GAP-00963":{"line":962,"offset":165633,"length":174,"previous":"M16-GAP-00962","next":"M16-GAP-00964"},"M16-GAP-00964":{"line":963,"offset":165807,"length":180,"previous":"M16-GAP-00963","next":"M16-GAP-00965"},"M16-GAP-00965":{"line":964,"offset":165987,"length":166,"previous":"M16-GAP-00964","next":"M16-GAP-00966"},"M16-GAP-00966":{"line":965,"offset":166153,"length":172,"previous":"M16-GAP-00965","next":"M16-GAP-00967"},"M16-GAP-00967":{"line":966,"offset":166325,"length":168,"previous":"M16-GAP-00966","next":"M16-GAP-00968"},"M16-GAP-00968":{"line":967,"offset":166493,"length":169,"previous":"M16-GAP-00967","next":"M16-GAP-00969"},"M16-GAP-00969":{"line":968,"offset":166662,"length":162,"previous":"M16-GAP-00968","next":"M16-GAP-00970"},"M16-GAP-00970":{"line":969,"offset":166824,"length":165,"previous":"M16-GAP-00969","next":"M16-GAP-00971"},"M16-GAP-00971":{"line":970,"offset":166989,"length":170,"previous":"M16-GAP-00970","next":"M16-GAP-00972"},"M16-GAP-00972":{"line":971,"offset":167159,"length":176,"previous":"M16-GAP-00971","next":"M16-GAP-00973"},"M16-GAP-00973":{"line":972,"offset":167335,"length":171,"previous":"M16-GAP-00972","next":"M16-GAP-00974"},"M16-GAP-00974":{"line":973,"offset":167506,"length":171,"previous":"M16-GAP-00973","next":"M16-GAP-00975"},"M16-GAP-00975":{"line":974,"offset":167677,"length":169,"previous":"M16-GAP-00974","next":"M16-GAP-00976"},"M16-GAP-00976":{"line":975,"offset":167846,"length":166,"previous":"M16-GAP-00975","next":"M16-GAP-00977"},"M16-GAP-00977":{"line":976,"offset":168012,"length":165,"previous":"M16-GAP-00976","next":"M16-GAP-00978"},"M16-GAP-00978":{"line":977,"offset":168177,"length":168,"previous":"M16-GAP-00977","next":"M16-GAP-00979"},"M16-GAP-00979":{"line":978,"offset":168345,"length":169,"previous":"M16-GAP-00978","next":"M16-GAP-00980"},"M16-GAP-00980":{"line":979,"offset":168514,"length":159,"previous":"M16-GAP-00979","next":"M16-GAP-00981"},"M16-GAP-00981":{"line":980,"offset":168673,"length":179,"previous":"M16-GAP-00980","next":"M16-GAP-00982"},"M16-GAP-00982":{"line":981,"offset":168852,"length":168,"previous":"M16-GAP-00981","next":"M16-GAP-00983"},"M16-GAP-00983":{"line":982,"offset":169020,"length":166,"previous":"M16-GAP-00982","next":"M16-GAP-00984"},"M16-GAP-00984":{"line":983,"offset":169186,"length":169,"previous":"M16-GAP-00983","next":"M16-GAP-00985"},"M16-GAP-00985":{"line":984,"offset":169355,"length":176,"previous":"M16-GAP-00984","next":"M16-GAP-00986"},"M16-GAP-00986":{"line":985,"offset":169531,"length":176,"previous":"M16-GAP-00985","next":"M16-GAP-00987"},"M16-GAP-00987":{"line":986,"offset":169707,"length":162,"previous":"M16-GAP-00986","next":"M16-GAP-00988"},"M16-GAP-00988":{"line":987,"offset":169869,"length":166,"previous":"M16-GAP-00987","next":"M16-GAP-00989"},"M16-GAP-00989":{"line":988,"offset":170035,"length":166,"previous":"M16-GAP-00988","next":"M16-GAP-00990"},"M16-GAP-00990":{"line":989,"offset":170201,"length":169,"previous":"M16-GAP-00989","next":"M16-GAP-00991"},"M16-GAP-00991":{"line":990,"offset":170370,"length":168,"previous":"M16-GAP-00990","next":"M16-GAP-00992"},"M16-GAP-00992":{"line":991,"offset":170538,"length":167,"previous":"M16-GAP-00991","next":"M16-GAP-00993"},"M16-GAP-00993":{"line":992,"offset":170705,"length":169,"previous":"M16-GAP-00992","next":"M16-GAP-00994"},"M16-GAP-00994":{"line":993,"offset":170874,"length":174,"previous":"M16-GAP-00993","next":"M16-GAP-00995"},"M16-GAP-00995":{"line":994,"offset":171048,"length":167,"previous":"M16-GAP-00994","next":"M16-GAP-00996"},"M16-GAP-00996":{"line":995,"offset":171215,"length":171,"previous":"M16-GAP-00995","next":"M16-GAP-00997"},"M16-GAP-00997":{"line":996,"offset":171386,"length":179,"previous":"M16-GAP-00996","next":"M16-GAP-00998"},"M16-GAP-00998":{"line":997,"offset":171565,"length":172,"previous":"M16-GAP-00997","next":"M16-GAP-00999"},"M16-GAP-00999":{"line":998,"offset":171737,"length":171,"previous":"M16-GAP-00998","next":"M16-GAP-01000"},"M16-GAP-01000":{"line":999,"offset":171908,"length":167,"previous":"M16-GAP-00999","next":"M16-GAP-01001"},"M16-GAP-01001":{"line":1000,"offset":172075,"length":178,"previous":"M16-GAP-01000","next":"M16-GAP-01002"},"M16-GAP-01002":{"line":1001,"offset":172253,"length":172,"previous":"M16-GAP-01001","next":"M16-GAP-01003"},"M16-GAP-01003":{"line":1002,"offset":172425,"length":164,"previous":"M16-GAP-01002","next":"M16-GAP-01004"},"M16-GAP-01004":{"line":1003,"offset":172589,"length":163,"previous":"M16-GAP-01003","next":"M16-GAP-01005"},"M16-GAP-01005":{"line":1004,"offset":172752,"length":165,"previous":"M16-GAP-01004","next":"M16-GAP-01006"},"M16-GAP-01006":{"line":1005,"offset":172917,"length":173,"previous":"M16-GAP-01005","next":"M16-GAP-01007"},"M16-GAP-01007":{"line":1006,"offset":173090,"length":176,"previous":"M16-GAP-01006","next":"M16-GAP-01008"},"M16-GAP-01008":{"line":1007,"offset":173266,"length":171,"previous":"M16-GAP-01007","next":"M16-GAP-01009"},"M16-GAP-01009":{"line":1008,"offset":173437,"length":171,"previous":"M16-GAP-01008","next":"M16-GAP-01010"},"M16-GAP-01010":{"line":1009,"offset":173608,"length":173,"previous":"M16-GAP-01009","next":"M16-GAP-01011"},"M16-GAP-01011":{"line":1010,"offset":173781,"length":167,"previous":"M16-GAP-01010","next":"M16-GAP-01012"},"M16-GAP-01012":{"line":1011,"offset":173948,"length":180,"previous":"M16-GAP-01011","next":"M16-GAP-01013"},"M16-GAP-01013":{"line":1012,"offset":174128,"length":171,"previous":"M16-GAP-01012","next":"M16-GAP-01014"},"M16-GAP-01014":{"line":1013,"offset":174299,"length":169,"previous":"M16-GAP-01013","next":"M16-GAP-01015"},"M16-GAP-01015":{"line":1014,"offset":174468,"length":171,"previous":"M16-GAP-01014","next":"M16-GAP-01016"},"M16-GAP-01016":{"line":1015,"offset":174639,"length":169,"previous":"M16-GAP-01015","next":"M16-GAP-01017"},"M16-GAP-01017":{"line":1016,"offset":174808,"length":161,"previous":"M16-GAP-01016","next":"M16-GAP-01018"},"M16-GAP-01018":{"line":1017,"offset":174969,"length":162,"previous":"M16-GAP-01017","next":"M16-GAP-01019"},"M16-GAP-01019":{"line":1018,"offset":175131,"length":172,"previous":"M16-GAP-01018","next":"M16-GAP-01020"},"M16-GAP-01020":{"line":1019,"offset":175303,"length":173,"previous":"M16-GAP-01019","next":"M16-GAP-01021"},"M16-GAP-01021":{"line":1020,"offset":175476,"length":167,"previous":"M16-GAP-01020","next":"M16-GAP-01022"},"M16-GAP-01022":{"line":1021,"offset":175643,"length":170,"previous":"M16-GAP-01021","next":"M16-GAP-01023"},"M16-GAP-01023":{"line":1022,"offset":175813,"length":169,"previous":"M16-GAP-01022","next":"M16-GAP-01024"},"M16-GAP-01024":{"line":1023,"offset":175982,"length":167,"previous":"M16-GAP-01023","next":"M16-GAP-01025"},"M16-GAP-01025":{"line":1024,"offset":176149,"length":190,"previous":"M16-GAP-01024","next":"M16-GAP-01026"},"M16-GAP-01026":{"line":1025,"offset":176339,"length":192,"previous":"M16-GAP-01025","next":"M16-GAP-01027"},"M16-GAP-01027":{"line":1026,"offset":176531,"length":182,"previous":"M16-GAP-01026","next":"M16-GAP-01028"},"M16-GAP-01028":{"line":1027,"offset":176713,"length":177,"previous":"M16-GAP-01027","next":"M16-GAP-01029"},"M16-GAP-01029":{"line":1028,"offset":176890,"length":175,"previous":"M16-GAP-01028","next":"M16-GAP-01030"},"M16-GAP-01030":{"line":1029,"offset":177065,"length":177,"previous":"M16-GAP-01029","next":"M16-GAP-01031"},"M16-GAP-01031":{"line":1030,"offset":177242,"length":164,"previous":"M16-GAP-01030","next":"M16-GAP-01032"},"M16-GAP-01032":{"line":1031,"offset":177406,"length":162,"previous":"M16-GAP-01031","next":"M16-GAP-01033"},"M16-GAP-01033":{"line":1032,"offset":177568,"length":171,"previous":"M16-GAP-01032","next":"M16-GAP-01034"},"M16-GAP-01034":{"line":1033,"offset":177739,"length":168,"previous":"M16-GAP-01033","next":"M16-GAP-01035"},"M16-GAP-01035":{"line":1034,"offset":177907,"length":175,"previous":"M16-GAP-01034","next":"M16-GAP-01036"},"M16-GAP-01036":{"line":1035,"offset":178082,"length":170,"previous":"M16-GAP-01035","next":"M16-GAP-01037"},"M16-GAP-01037":{"line":1036,"offset":178252,"length":170,"previous":"M16-GAP-01036","next":"M16-GAP-01038"},"M16-GAP-01038":{"line":1037,"offset":178422,"length":172,"previous":"M16-GAP-01037","next":"M16-GAP-01039"},"M16-GAP-01039":{"line":1038,"offset":178594,"length":169,"previous":"M16-GAP-01038","next":"M16-GAP-01040"},"M16-GAP-01040":{"line":1039,"offset":178763,"length":170,"previous":"M16-GAP-01039","next":"M16-GAP-01041"},"M16-GAP-01041":{"line":1040,"offset":178933,"length":176,"previous":"M16-GAP-01040","next":"M16-GAP-01042"},"M16-GAP-01042":{"line":1041,"offset":179109,"length":165,"previous":"M16-GAP-01041","next":"M16-GAP-01043"},"M16-GAP-01043":{"line":1042,"offset":179274,"length":170,"previous":"M16-GAP-01042","next":"M16-GAP-01044"},"M16-GAP-01044":{"line":1043,"offset":179444,"length":169,"previous":"M16-GAP-01043","next":"M16-GAP-01045"},"M16-GAP-01045":{"line":1044,"offset":179613,"length":169,"previous":"M16-GAP-01044","next":"M16-GAP-01046"},"M16-GAP-01046":{"line":1045,"offset":179782,"length":167,"previous":"M16-GAP-01045","next":"M16-GAP-01047"},"M16-GAP-01047":{"line":1046,"offset":179949,"length":166,"previous":"M16-GAP-01046","next":"M16-GAP-01048"},"M16-GAP-01048":{"line":1047,"offset":180115,"length":171,"previous":"M16-GAP-01047","next":"M16-GAP-01049"},"M16-GAP-01049":{"line":1048,"offset":180286,"length":174,"previous":"M16-GAP-01048","next":"M16-GAP-01050"},"M16-GAP-01050":{"line":1049,"offset":180460,"length":171,"previous":"M16-GAP-01049","next":"M16-GAP-01051"},"M16-GAP-01051":{"line":1050,"offset":180631,"length":176,"previous":"M16-GAP-01050","next":"M16-GAP-01052"},"M16-GAP-01052":{"line":1051,"offset":180807,"length":175,"previous":"M16-GAP-01051","next":"M16-GAP-01053"},"M16-GAP-01053":{"line":1052,"offset":180982,"length":174,"previous":"M16-GAP-01052","next":"M16-GAP-01054"},"M16-GAP-01054":{"line":1053,"offset":181156,"length":175,"previous":"M16-GAP-01053","next":"M16-GAP-01055"},"M16-GAP-01055":{"line":1054,"offset":181331,"length":174,"previous":"M16-GAP-01054","next":"M16-GAP-01056"},"M16-GAP-01056":{"line":1055,"offset":181505,"length":172,"previous":"M16-GAP-01055","next":"M16-GAP-01057"},"M16-GAP-01057":{"line":1056,"offset":181677,"length":170,"previous":"M16-GAP-01056","next":"M16-GAP-01058"},"M16-GAP-01058":{"line":1057,"offset":181847,"length":175,"previous":"M16-GAP-01057","next":"M16-GAP-01059"},"M16-GAP-01059":{"line":1058,"offset":182022,"length":184,"previous":"M16-GAP-01058","next":"M16-GAP-01060"},"M16-GAP-01060":{"line":1059,"offset":182206,"length":170,"previous":"M16-GAP-01059","next":"M16-GAP-01061"},"M16-GAP-01061":{"line":1060,"offset":182376,"length":177,"previous":"M16-GAP-01060","next":"M16-GAP-01062"},"M16-GAP-01062":{"line":1061,"offset":182553,"length":175,"previous":"M16-GAP-01061","next":"M16-GAP-01063"},"M16-GAP-01063":{"line":1062,"offset":182728,"length":172,"previous":"M16-GAP-01062","next":"M16-GAP-01064"},"M16-GAP-01064":{"line":1063,"offset":182900,"length":175,"previous":"M16-GAP-01063","next":"M16-GAP-01065"},"M16-GAP-01065":{"line":1064,"offset":183075,"length":180,"previous":"M16-GAP-01064","next":"M16-GAP-01066"},"M16-GAP-01066":{"line":1065,"offset":183255,"length":172,"previous":"M16-GAP-01065","next":"M16-GAP-01067"},"M16-GAP-01067":{"line":1066,"offset":183427,"length":174,"previous":"M16-GAP-01066","next":"M16-GAP-01068"},"M16-GAP-01068":{"line":1067,"offset":183601,"length":160,"previous":"M16-GAP-01067","next":"M16-GAP-01069"},"M16-GAP-01069":{"line":1068,"offset":183761,"length":165,"previous":"M16-GAP-01068","next":"M16-GAP-01070"},"M16-GAP-01070":{"line":1069,"offset":183926,"length":166,"previous":"M16-GAP-01069","next":"M16-GAP-01071"},"M16-GAP-01071":{"line":1070,"offset":184092,"length":163,"previous":"M16-GAP-01070","next":"M16-GAP-01072"},"M16-GAP-01072":{"line":1071,"offset":184255,"length":168,"previous":"M16-GAP-01071","next":"M16-GAP-01073"},"M16-GAP-01073":{"line":1072,"offset":184423,"length":178,"previous":"M16-GAP-01072","next":"M16-GAP-01074"},"M16-GAP-01074":{"line":1073,"offset":184601,"length":160,"previous":"M16-GAP-01073","next":"M16-GAP-01075"},"M16-GAP-01075":{"line":1074,"offset":184761,"length":161,"previous":"M16-GAP-01074","next":"M16-GAP-01076"},"M16-GAP-01076":{"line":1075,"offset":184922,"length":165,"previous":"M16-GAP-01075","next":"M16-GAP-01077"},"M16-GAP-01077":{"line":1076,"offset":185087,"length":173,"previous":"M16-GAP-01076","next":"M16-GAP-01078"},"M16-GAP-01078":{"line":1077,"offset":185260,"length":169,"previous":"M16-GAP-01077","next":"M16-GAP-01079"},"M16-GAP-01079":{"line":1078,"offset":185429,"length":166,"previous":"M16-GAP-01078","next":"M16-GAP-01080"},"M16-GAP-01080":{"line":1079,"offset":185595,"length":167,"previous":"M16-GAP-01079","next":"M16-GAP-01081"},"M16-GAP-01081":{"line":1080,"offset":185762,"length":170,"previous":"M16-GAP-01080","next":"M16-GAP-01082"},"M16-GAP-01082":{"line":1081,"offset":185932,"length":163,"previous":"M16-GAP-01081","next":"M16-GAP-01083"},"M16-GAP-01083":{"line":1082,"offset":186095,"length":169,"previous":"M16-GAP-01082","next":"M16-GAP-01084"},"M16-GAP-01084":{"line":1083,"offset":186264,"length":175,"previous":"M16-GAP-01083","next":"M16-GAP-01085"},"M16-GAP-01085":{"line":1084,"offset":186439,"length":175,"previous":"M16-GAP-01084","next":"M16-GAP-01086"},"M16-GAP-01086":{"line":1085,"offset":186614,"length":165,"previous":"M16-GAP-01085","next":"M16-GAP-01087"},"M16-GAP-01087":{"line":1086,"offset":186779,"length":166,"previous":"M16-GAP-01086","next":"M16-GAP-01088"},"M16-GAP-01088":{"line":1087,"offset":186945,"length":161,"previous":"M16-GAP-01087","next":"M16-GAP-01089"},"M16-GAP-01089":{"line":1088,"offset":187106,"length":169,"previous":"M16-GAP-01088","next":"M16-GAP-01090"},"M16-GAP-01090":{"line":1089,"offset":187275,"length":177,"previous":"M16-GAP-01089","next":"M16-GAP-01091"},"M16-GAP-01091":{"line":1090,"offset":187452,"length":179,"previous":"M16-GAP-01090","next":"M16-GAP-01092"},"M16-GAP-01092":{"line":1091,"offset":187631,"length":169,"previous":"M16-GAP-01091","next":"M16-GAP-01093"},"M16-GAP-01093":{"line":1092,"offset":187800,"length":173,"previous":"M16-GAP-01092","next":"M16-GAP-01094"},"M16-GAP-01094":{"line":1093,"offset":187973,"length":179,"previous":"M16-GAP-01093","next":"M16-GAP-01095"},"M16-GAP-01095":{"line":1094,"offset":188152,"length":169,"previous":"M16-GAP-01094","next":"M16-GAP-01096"},"M16-GAP-01096":{"line":1095,"offset":188321,"length":160,"previous":"M16-GAP-01095","next":"M16-GAP-01097"},"M16-GAP-01097":{"line":1096,"offset":188481,"length":182,"previous":"M16-GAP-01096","next":"M16-GAP-01098"},"M16-GAP-01098":{"line":1097,"offset":188663,"length":184,"previous":"M16-GAP-01097","next":"M16-GAP-01099"},"M16-GAP-01099":{"line":1098,"offset":188847,"length":188,"previous":"M16-GAP-01098","next":"M16-GAP-01100"},"M16-GAP-01100":{"line":1099,"offset":189035,"length":180,"previous":"M16-GAP-01099","next":"M16-GAP-01101"},"M16-GAP-01101":{"line":1100,"offset":189215,"length":185,"previous":"M16-GAP-01100","next":"M16-GAP-01102"},"M16-GAP-01102":{"line":1101,"offset":189400,"length":181,"previous":"M16-GAP-01101","next":"M16-GAP-01103"},"M16-GAP-01103":{"line":1102,"offset":189581,"length":186,"previous":"M16-GAP-01102","next":"M16-GAP-01104"},"M16-GAP-01104":{"line":1103,"offset":189767,"length":185,"previous":"M16-GAP-01103","next":"M16-GAP-01105"},"M16-GAP-01105":{"line":1104,"offset":189952,"length":190,"previous":"M16-GAP-01104","next":"M16-GAP-01106"},"M16-GAP-01106":{"line":1105,"offset":190142,"length":176,"previous":"M16-GAP-01105","next":"M16-GAP-01107"},"M16-GAP-01107":{"line":1106,"offset":190318,"length":174,"previous":"M16-GAP-01106","next":"M16-GAP-01108"},"M16-GAP-01108":{"line":1107,"offset":190492,"length":174,"previous":"M16-GAP-01107","next":"M16-GAP-01109"},"M16-GAP-01109":{"line":1108,"offset":190666,"length":180,"previous":"M16-GAP-01108","next":"M16-GAP-01110"},"M16-GAP-01110":{"line":1109,"offset":190846,"length":178,"previous":"M16-GAP-01109","next":"M16-GAP-01111"},"M16-GAP-01111":{"line":1110,"offset":191024,"length":174,"previous":"M16-GAP-01110","next":"M16-GAP-01112"},"M16-GAP-01112":{"line":1111,"offset":191198,"length":180,"previous":"M16-GAP-01111","next":"M16-GAP-01113"},"M16-GAP-01113":{"line":1112,"offset":191378,"length":176,"previous":"M16-GAP-01112","next":"M16-GAP-01114"},"M16-GAP-01114":{"line":1113,"offset":191554,"length":175,"previous":"M16-GAP-01113","next":"M16-GAP-01115"},"M16-GAP-01115":{"line":1114,"offset":191729,"length":175,"previous":"M16-GAP-01114","next":"M16-GAP-01116"},"M16-GAP-01116":{"line":1115,"offset":191904,"length":179,"previous":"M16-GAP-01115","next":"M16-GAP-01117"},"M16-GAP-01117":{"line":1116,"offset":192083,"length":177,"previous":"M16-GAP-01116","next":"M16-GAP-01118"},"M16-GAP-01118":{"line":1117,"offset":192260,"length":170,"previous":"M16-GAP-01117","next":"M16-GAP-01119"},"M16-GAP-01119":{"line":1118,"offset":192430,"length":170,"previous":"M16-GAP-01118","next":"M16-GAP-01120"},"M16-GAP-01120":{"line":1119,"offset":192600,"length":180,"previous":"M16-GAP-01119","next":"M16-GAP-01121"},"M16-GAP-01121":{"line":1120,"offset":192780,"length":162,"previous":"M16-GAP-01120","next":"M16-GAP-01122"},"M16-GAP-01122":{"line":1121,"offset":192942,"length":159,"previous":"M16-GAP-01121","next":"M16-GAP-01123"},"M16-GAP-01123":{"line":1122,"offset":193101,"length":164,"previous":"M16-GAP-01122","next":"M16-GAP-01124"},"M16-GAP-01124":{"line":1123,"offset":193265,"length":169,"previous":"M16-GAP-01123","next":"M16-GAP-01125"},"M16-GAP-01125":{"line":1124,"offset":193434,"length":164,"previous":"M16-GAP-01124","next":"M16-GAP-01126"},"M16-GAP-01126":{"line":1125,"offset":193598,"length":161,"previous":"M16-GAP-01125","next":"M16-GAP-01127"},"M16-GAP-01127":{"line":1126,"offset":193759,"length":166,"previous":"M16-GAP-01126","next":"M16-GAP-01128"},"M16-GAP-01128":{"line":1127,"offset":193925,"length":167,"previous":"M16-GAP-01127","next":"M16-GAP-01129"},"M16-GAP-01129":{"line":1128,"offset":194092,"length":182,"previous":"M16-GAP-01128","next":"M16-GAP-01130"},"M16-GAP-01130":{"line":1129,"offset":194274,"length":175,"previous":"M16-GAP-01129","next":"M16-GAP-01131"},"M16-GAP-01131":{"line":1130,"offset":194449,"length":176,"previous":"M16-GAP-01130","next":"M16-GAP-01132"},"M16-GAP-01132":{"line":1131,"offset":194625,"length":178,"previous":"M16-GAP-01131","next":"M16-GAP-01133"},"M16-GAP-01133":{"line":1132,"offset":194803,"length":178,"previous":"M16-GAP-01132","next":"M16-GAP-01134"},"M16-GAP-01134":{"line":1133,"offset":194981,"length":176,"previous":"M16-GAP-01133","next":"M16-GAP-01135"},"M16-GAP-01135":{"line":1134,"offset":195157,"length":177,"previous":"M16-GAP-01134","next":"M16-GAP-01136"},"M16-GAP-01136":{"line":1135,"offset":195334,"length":167,"previous":"M16-GAP-01135","next":"M16-GAP-01137"},"M16-GAP-01137":{"line":1136,"offset":195501,"length":169,"previous":"M16-GAP-01136","next":"M16-GAP-01138"},"M16-GAP-01138":{"line":1137,"offset":195670,"length":174,"previous":"M16-GAP-01137","next":"M16-GAP-01139"},"M16-GAP-01139":{"line":1138,"offset":195844,"length":168,"previous":"M16-GAP-01138","next":"M16-GAP-01140"},"M16-GAP-01140":{"line":1139,"offset":196012,"length":169,"previous":"M16-GAP-01139","next":"M16-GAP-01141"},"M16-GAP-01141":{"line":1140,"offset":196181,"length":167,"previous":"M16-GAP-01140","next":"M16-GAP-01142"},"M16-GAP-01142":{"line":1141,"offset":196348,"length":167,"previous":"M16-GAP-01141","next":"M16-GAP-01143"},"M16-GAP-01143":{"line":1142,"offset":196515,"length":172,"previous":"M16-GAP-01142","next":"M16-GAP-01144"},"M16-GAP-01144":{"line":1143,"offset":196687,"length":175,"previous":"M16-GAP-01143","next":"M16-GAP-01145"},"M16-GAP-01145":{"line":1144,"offset":196862,"length":166,"previous":"M16-GAP-01144","next":"M16-GAP-01146"},"M16-GAP-01146":{"line":1145,"offset":197028,"length":172,"previous":"M16-GAP-01145","next":"M16-GAP-01147"},"M16-GAP-01147":{"line":1146,"offset":197200,"length":169,"previous":"M16-GAP-01146","next":"M16-GAP-01148"},"M16-GAP-01148":{"line":1147,"offset":197369,"length":170,"previous":"M16-GAP-01147","next":"M16-GAP-01149"},"M16-GAP-01149":{"line":1148,"offset":197539,"length":177,"previous":"M16-GAP-01148","next":"M16-GAP-01150"},"M16-GAP-01150":{"line":1149,"offset":197716,"length":172,"previous":"M16-GAP-01149","next":"M16-GAP-01151"},"M16-GAP-01151":{"line":1150,"offset":197888,"length":164,"previous":"M16-GAP-01150","next":"M16-GAP-01152"},"M16-GAP-01152":{"line":1151,"offset":198052,"length":178,"previous":"M16-GAP-01151","next":"M16-GAP-01153"},"M16-GAP-01153":{"line":1152,"offset":198230,"length":178,"previous":"M16-GAP-01152","next":"M16-GAP-01154"},"M16-GAP-01154":{"line":1153,"offset":198408,"length":178,"previous":"M16-GAP-01153","next":"M16-GAP-01155"},"M16-GAP-01155":{"line":1154,"offset":198586,"length":174,"previous":"M16-GAP-01154","next":"M16-GAP-01156"},"M16-GAP-01156":{"line":1155,"offset":198760,"length":176,"previous":"M16-GAP-01155","next":"M16-GAP-01157"},"M16-GAP-01157":{"line":1156,"offset":198936,"length":170,"previous":"M16-GAP-01156","next":"M16-GAP-01158"},"M16-GAP-01158":{"line":1157,"offset":199106,"length":164,"previous":"M16-GAP-01157","next":"M16-GAP-01159"},"M16-GAP-01159":{"line":1158,"offset":199270,"length":169,"previous":"M16-GAP-01158","next":"M16-GAP-01160"},"M16-GAP-01160":{"line":1159,"offset":199439,"length":179,"previous":"M16-GAP-01159","next":"M16-GAP-01161"},"M16-GAP-01161":{"line":1160,"offset":199618,"length":160,"previous":"M16-GAP-01160","next":"M16-GAP-01162"},"M16-GAP-01162":{"line":1161,"offset":199778,"length":161,"previous":"M16-GAP-01161","next":"M16-GAP-01163"},"M16-GAP-01163":{"line":1162,"offset":199939,"length":169,"previous":"M16-GAP-01162","next":"M16-GAP-01164"},"M16-GAP-01164":{"line":1163,"offset":200108,"length":165,"previous":"M16-GAP-01163","next":"M16-GAP-01165"},"M16-GAP-01165":{"line":1164,"offset":200273,"length":174,"previous":"M16-GAP-01164","next":"M16-GAP-01166"},"M16-GAP-01166":{"line":1165,"offset":200447,"length":166,"previous":"M16-GAP-01165","next":"M16-GAP-01167"},"M16-GAP-01167":{"line":1166,"offset":200613,"length":169,"previous":"M16-GAP-01166","next":"M16-GAP-01168"},"M16-GAP-01168":{"line":1167,"offset":200782,"length":177,"previous":"M16-GAP-01167","next":"M16-GAP-01169"},"M16-GAP-01169":{"line":1168,"offset":200959,"length":167,"previous":"M16-GAP-01168","next":"M16-GAP-01170"},"M16-GAP-01170":{"line":1169,"offset":201126,"length":170,"previous":"M16-GAP-01169","next":"M16-GAP-01171"},"M16-GAP-01171":{"line":1170,"offset":201296,"length":173,"previous":"M16-GAP-01170","next":"M16-GAP-01172"},"M16-GAP-01172":{"line":1171,"offset":201469,"length":167,"previous":"M16-GAP-01171","next":"M16-GAP-01173"},"M16-GAP-01173":{"line":1172,"offset":201636,"length":166,"previous":"M16-GAP-01172","next":"M16-GAP-01174"},"M16-GAP-01174":{"line":1173,"offset":201802,"length":168,"previous":"M16-GAP-01173","next":"M16-GAP-01175"},"M16-GAP-01175":{"line":1174,"offset":201970,"length":176,"previous":"M16-GAP-01174","next":"M16-GAP-01176"},"M16-GAP-01176":{"line":1175,"offset":202146,"length":178,"previous":"M16-GAP-01175","next":"M16-GAP-01177"},"M16-GAP-01177":{"line":1176,"offset":202324,"length":173,"previous":"M16-GAP-01176","next":"M16-GAP-01178"},"M16-GAP-01178":{"line":1177,"offset":202497,"length":171,"previous":"M16-GAP-01177","next":"M16-GAP-01179"},"M16-GAP-01179":{"line":1178,"offset":202668,"length":181,"previous":"M16-GAP-01178","next":"M16-GAP-01180"},"M16-GAP-01180":{"line":1179,"offset":202849,"length":165,"previous":"M16-GAP-01179","next":"M16-GAP-01181"},"M16-GAP-01181":{"line":1180,"offset":203014,"length":170,"previous":"M16-GAP-01180","next":"M16-GAP-01182"},"M16-GAP-01182":{"line":1181,"offset":203184,"length":173,"previous":"M16-GAP-01181","next":"M16-GAP-01183"},"M16-GAP-01183":{"line":1182,"offset":203357,"length":168,"previous":"M16-GAP-01182","next":"M16-GAP-01184"},"M16-GAP-01184":{"line":1183,"offset":203525,"length":169,"previous":"M16-GAP-01183","next":"M16-GAP-01185"},"M16-GAP-01185":{"line":1184,"offset":203694,"length":166,"previous":"M16-GAP-01184","next":"M16-GAP-01186"},"M16-GAP-01186":{"line":1185,"offset":203860,"length":159,"previous":"M16-GAP-01185","next":"M16-GAP-01187"},"M16-GAP-01187":{"line":1186,"offset":204019,"length":169,"previous":"M16-GAP-01186","next":"M16-GAP-01188"},"M16-GAP-01188":{"line":1187,"offset":204188,"length":166,"previous":"M16-GAP-01187","next":"M16-GAP-01189"},"M16-GAP-01189":{"line":1188,"offset":204354,"length":167,"previous":"M16-GAP-01188","next":"M16-GAP-01190"},"M16-GAP-01190":{"line":1189,"offset":204521,"length":161,"previous":"M16-GAP-01189","next":"M16-GAP-01191"},"M16-GAP-01191":{"line":1190,"offset":204682,"length":164,"previous":"M16-GAP-01190","next":"M16-GAP-01192"},"M16-GAP-01192":{"line":1191,"offset":204846,"length":176,"previous":"M16-GAP-01191","next":"M16-GAP-01193"},"M16-GAP-01193":{"line":1192,"offset":205022,"length":169,"previous":"M16-GAP-01192","next":"M16-GAP-01194"},"M16-GAP-01194":{"line":1193,"offset":205191,"length":168,"previous":"M16-GAP-01193","next":"M16-GAP-01195"},"M16-GAP-01195":{"line":1194,"offset":205359,"length":169,"previous":"M16-GAP-01194","next":"M16-GAP-01196"},"M16-GAP-01196":{"line":1195,"offset":205528,"length":170,"previous":"M16-GAP-01195","next":"M16-GAP-01197"},"M16-GAP-01197":{"line":1196,"offset":205698,"length":171,"previous":"M16-GAP-01196","next":"M16-GAP-01198"},"M16-GAP-01198":{"line":1197,"offset":205869,"length":163,"previous":"M16-GAP-01197","next":"M16-GAP-01199"},"M16-GAP-01199":{"line":1198,"offset":206032,"length":166,"previous":"M16-GAP-01198","next":"M16-GAP-01200"},"M16-GAP-01200":{"line":1199,"offset":206198,"length":164,"previous":"M16-GAP-01199","next":"M16-GAP-01201"},"M16-GAP-01201":{"line":1200,"offset":206362,"length":162,"previous":"M16-GAP-01200","next":"M16-GAP-01202"},"M16-GAP-01202":{"line":1201,"offset":206524,"length":166,"previous":"M16-GAP-01201","next":"M16-GAP-01203"},"M16-GAP-01203":{"line":1202,"offset":206690,"length":171,"previous":"M16-GAP-01202","next":"M16-GAP-01204"},"M16-GAP-01204":{"line":1203,"offset":206861,"length":165,"previous":"M16-GAP-01203","next":"M16-GAP-01205"},"M16-GAP-01205":{"line":1204,"offset":207026,"length":165,"previous":"M16-GAP-01204","next":"M16-GAP-01206"},"M16-GAP-01206":{"line":1205,"offset":207191,"length":171,"previous":"M16-GAP-01205","next":"M16-GAP-01207"},"M16-GAP-01207":{"line":1206,"offset":207362,"length":175,"previous":"M16-GAP-01206","next":"M16-GAP-01208"},"M16-GAP-01208":{"line":1207,"offset":207537,"length":159,"previous":"M16-GAP-01207","next":"M16-GAP-01209"},"M16-GAP-01209":{"line":1208,"offset":207696,"length":168,"previous":"M16-GAP-01208","next":"M16-GAP-01210"},"M16-GAP-01210":{"line":1209,"offset":207864,"length":160,"previous":"M16-GAP-01209","next":"M16-GAP-01211"},"M16-GAP-01211":{"line":1210,"offset":208024,"length":159,"previous":"M16-GAP-01210","next":"M16-GAP-01212"},"M16-GAP-01212":{"line":1211,"offset":208183,"length":165,"previous":"M16-GAP-01211","next":"M16-GAP-01213"},"M16-GAP-01213":{"line":1212,"offset":208348,"length":168,"previous":"M16-GAP-01212","next":"M16-GAP-01214"},"M16-GAP-01214":{"line":1213,"offset":208516,"length":169,"previous":"M16-GAP-01213","next":"M16-GAP-01215"},"M16-GAP-01215":{"line":1214,"offset":208685,"length":170,"previous":"M16-GAP-01214","next":"M16-GAP-01216"},"M16-GAP-01216":{"line":1215,"offset":208855,"length":169,"previous":"M16-GAP-01215","next":"M16-GAP-01217"},"M16-GAP-01217":{"line":1216,"offset":209024,"length":163,"previous":"M16-GAP-01216","next":"M16-GAP-01218"},"M16-GAP-01218":{"line":1217,"offset":209187,"length":165,"previous":"M16-GAP-01217","next":"M16-GAP-01219"},"M16-GAP-01219":{"line":1218,"offset":209352,"length":168,"previous":"M16-GAP-01218","next":"M16-GAP-01220"},"M16-GAP-01220":{"line":1219,"offset":209520,"length":171,"previous":"M16-GAP-01219","next":"M16-GAP-01221"},"M16-GAP-01221":{"line":1220,"offset":209691,"length":172,"previous":"M16-GAP-01220","next":"M16-GAP-01222"},"M16-GAP-01222":{"line":1221,"offset":209863,"length":170,"previous":"M16-GAP-01221","next":"M16-GAP-01223"},"M16-GAP-01223":{"line":1222,"offset":210033,"length":165,"previous":"M16-GAP-01222","next":"M16-GAP-01224"},"M16-GAP-01224":{"line":1223,"offset":210198,"length":171,"previous":"M16-GAP-01223","next":"M16-GAP-01225"},"M16-GAP-01225":{"line":1224,"offset":210369,"length":189,"previous":"M16-GAP-01224","next":"M16-GAP-01226"},"M16-GAP-01226":{"line":1225,"offset":210558,"length":165,"previous":"M16-GAP-01225","next":"M16-GAP-01227"},"M16-GAP-01227":{"line":1226,"offset":210723,"length":171,"previous":"M16-GAP-01226","next":"M16-GAP-01228"},"M16-GAP-01228":{"line":1227,"offset":210894,"length":176,"previous":"M16-GAP-01227","next":"M16-GAP-01229"},"M16-GAP-01229":{"line":1228,"offset":211070,"length":165,"previous":"M16-GAP-01228","next":"M16-GAP-01230"},"M16-GAP-01230":{"line":1229,"offset":211235,"length":171,"previous":"M16-GAP-01229","next":"M16-GAP-01231"},"M16-GAP-01231":{"line":1230,"offset":211406,"length":164,"previous":"M16-GAP-01230","next":"M16-GAP-01232"},"M16-GAP-01232":{"line":1231,"offset":211570,"length":168,"previous":"M16-GAP-01231","next":"M16-GAP-01233"},"M16-GAP-01233":{"line":1232,"offset":211738,"length":164,"previous":"M16-GAP-01232","next":"M16-GAP-01234"},"M16-GAP-01234":{"line":1233,"offset":211902,"length":166,"previous":"M16-GAP-01233","next":"M16-GAP-01235"},"M16-GAP-01235":{"line":1234,"offset":212068,"length":171,"previous":"M16-GAP-01234","next":"M16-GAP-01236"},"M16-GAP-01236":{"line":1235,"offset":212239,"length":167,"previous":"M16-GAP-01235","next":"M16-GAP-01237"},"M16-GAP-01237":{"line":1236,"offset":212406,"length":175,"previous":"M16-GAP-01236","next":"M16-GAP-01238"},"M16-GAP-01238":{"line":1237,"offset":212581,"length":172,"previous":"M16-GAP-01237","next":"M16-GAP-01239"},"M16-GAP-01239":{"line":1238,"offset":212753,"length":164,"previous":"M16-GAP-01238","next":"M16-GAP-01240"},"M16-GAP-01240":{"line":1239,"offset":212917,"length":162,"previous":"M16-GAP-01239","next":"M16-GAP-01241"},"M16-GAP-01241":{"line":1240,"offset":213079,"length":169,"previous":"M16-GAP-01240","next":"M16-GAP-01242"},"M16-GAP-01242":{"line":1241,"offset":213248,"length":170,"previous":"M16-GAP-01241","next":"M16-GAP-01243"},"M16-GAP-01243":{"line":1242,"offset":213418,"length":172,"previous":"M16-GAP-01242","next":"M16-GAP-01244"},"M16-GAP-01244":{"line":1243,"offset":213590,"length":170,"previous":"M16-GAP-01243","next":"M16-GAP-01245"},"M16-GAP-01245":{"line":1244,"offset":213760,"length":174,"previous":"M16-GAP-01244","next":"M16-GAP-01246"},"M16-GAP-01246":{"line":1245,"offset":213934,"length":175,"previous":"M16-GAP-01245","next":"M16-GAP-01247"},"M16-GAP-01247":{"line":1246,"offset":214109,"length":177,"previous":"M16-GAP-01246","next":"M16-GAP-01248"},"M16-GAP-01248":{"line":1247,"offset":214286,"length":182,"previous":"M16-GAP-01247","next":"M16-GAP-01249"},"M16-GAP-01249":{"line":1248,"offset":214468,"length":183,"previous":"M16-GAP-01248","next":"M16-GAP-01250"},"M16-GAP-01250":{"line":1249,"offset":214651,"length":185,"previous":"M16-GAP-01249","next":"M16-GAP-01251"},"M16-GAP-01251":{"line":1250,"offset":214836,"length":175,"previous":"M16-GAP-01250","next":"M16-GAP-01252"},"M16-GAP-01252":{"line":1251,"offset":215011,"length":170,"previous":"M16-GAP-01251","next":"M16-GAP-01253"},"M16-GAP-01253":{"line":1252,"offset":215181,"length":171,"previous":"M16-GAP-01252","next":"M16-GAP-01254"},"M16-GAP-01254":{"line":1253,"offset":215352,"length":178,"previous":"M16-GAP-01253","next":"M16-GAP-01255"},"M16-GAP-01255":{"line":1254,"offset":215530,"length":179,"previous":"M16-GAP-01254","next":"M16-GAP-01256"},"M16-GAP-01256":{"line":1255,"offset":215709,"length":181,"previous":"M16-GAP-01255","next":"M16-GAP-01257"},"M16-GAP-01257":{"line":1256,"offset":215890,"length":179,"previous":"M16-GAP-01256","next":"M16-GAP-01258"},"M16-GAP-01258":{"line":1257,"offset":216069,"length":180,"previous":"M16-GAP-01257","next":"M16-GAP-01259"},"M16-GAP-01259":{"line":1258,"offset":216249,"length":182,"previous":"M16-GAP-01258","next":"M16-GAP-01260"},"M16-GAP-01260":{"line":1259,"offset":216431,"length":180,"previous":"M16-GAP-01259","next":"M16-GAP-01261"},"M16-GAP-01261":{"line":1260,"offset":216611,"length":181,"previous":"M16-GAP-01260","next":"M16-GAP-01262"},"M16-GAP-01262":{"line":1261,"offset":216792,"length":183,"previous":"M16-GAP-01261","next":"M16-GAP-01263"},"M16-GAP-01263":{"line":1262,"offset":216975,"length":183,"previous":"M16-GAP-01262","next":"M16-GAP-01264"},"M16-GAP-01264":{"line":1263,"offset":217158,"length":179,"previous":"M16-GAP-01263","next":"M16-GAP-01265"},"M16-GAP-01265":{"line":1264,"offset":217337,"length":180,"previous":"M16-GAP-01264","next":"M16-GAP-01266"},"M16-GAP-01266":{"line":1265,"offset":217517,"length":182,"previous":"M16-GAP-01265","next":"M16-GAP-01267"},"M16-GAP-01267":{"line":1266,"offset":217699,"length":173,"previous":"M16-GAP-01266","next":"M16-GAP-01268"},"M16-GAP-01268":{"line":1267,"offset":217872,"length":177,"previous":"M16-GAP-01267","next":"M16-GAP-01269"},"M16-GAP-01269":{"line":1268,"offset":218049,"length":180,"previous":"M16-GAP-01268","next":"M16-GAP-01270"},"M16-GAP-01270":{"line":1269,"offset":218229,"length":173,"previous":"M16-GAP-01269","next":"M16-GAP-01271"},"M16-GAP-01271":{"line":1270,"offset":218402,"length":179,"previous":"M16-GAP-01270","next":"M16-GAP-01272"},"M16-GAP-01272":{"line":1271,"offset":218581,"length":162,"previous":"M16-GAP-01271","next":"M16-GAP-01273"},"M16-GAP-01273":{"line":1272,"offset":218743,"length":177,"previous":"M16-GAP-01272","next":"M16-GAP-01274"},"M16-GAP-01274":{"line":1273,"offset":218920,"length":172,"previous":"M16-GAP-01273","next":"M16-GAP-01275"},"M16-GAP-01275":{"line":1274,"offset":219092,"length":162,"previous":"M16-GAP-01274","next":"M16-GAP-01276"},"M16-GAP-01276":{"line":1275,"offset":219254,"length":179,"previous":"M16-GAP-01275","next":"M16-GAP-01277"},"M16-GAP-01277":{"line":1276,"offset":219433,"length":165,"previous":"M16-GAP-01276","next":"M16-GAP-01278"},"M16-GAP-01278":{"line":1277,"offset":219598,"length":197,"previous":"M16-GAP-01277","next":"M16-GAP-01279"},"M16-GAP-01279":{"line":1278,"offset":219795,"length":188,"previous":"M16-GAP-01278","next":"M16-GAP-01280"},"M16-GAP-01280":{"line":1279,"offset":219983,"length":170,"previous":"M16-GAP-01279","next":"M16-GAP-01281"},"M16-GAP-01281":{"line":1280,"offset":220153,"length":182,"previous":"M16-GAP-01280","next":"M16-GAP-01282"},"M16-GAP-01282":{"line":1281,"offset":220335,"length":177,"previous":"M16-GAP-01281","next":"M16-GAP-01283"},"M16-GAP-01283":{"line":1282,"offset":220512,"length":180,"previous":"M16-GAP-01282","next":"M16-GAP-01284"},"M16-GAP-01284":{"line":1283,"offset":220692,"length":181,"previous":"M16-GAP-01283","next":"M16-GAP-01285"},"M16-GAP-01285":{"line":1284,"offset":220873,"length":183,"previous":"M16-GAP-01284","next":"M16-GAP-01286"},"M16-GAP-01286":{"line":1285,"offset":221056,"length":187,"previous":"M16-GAP-01285","next":"M16-GAP-01287"},"M16-GAP-01287":{"line":1286,"offset":221243,"length":188,"previous":"M16-GAP-01286","next":"M16-GAP-01288"},"M16-GAP-01288":{"line":1287,"offset":221431,"length":190,"previous":"M16-GAP-01287","next":"M16-GAP-01289"},"M16-GAP-01289":{"line":1288,"offset":221621,"length":188,"previous":"M16-GAP-01288","next":"M16-GAP-01290"},"M16-GAP-01290":{"line":1289,"offset":221809,"length":189,"previous":"M16-GAP-01289","next":"M16-GAP-01291"},"M16-GAP-01291":{"line":1290,"offset":221998,"length":191,"previous":"M16-GAP-01290","next":"M16-GAP-01292"},"M16-GAP-01292":{"line":1291,"offset":222189,"length":178,"previous":"M16-GAP-01291","next":"M16-GAP-01293"},"M16-GAP-01293":{"line":1292,"offset":222367,"length":179,"previous":"M16-GAP-01292","next":"M16-GAP-01294"},"M16-GAP-01294":{"line":1293,"offset":222546,"length":181,"previous":"M16-GAP-01293","next":"M16-GAP-01295"},"M16-GAP-01295":{"line":1294,"offset":222727,"length":178,"previous":"M16-GAP-01294","next":"M16-GAP-01296"},"M16-GAP-01296":{"line":1295,"offset":222905,"length":179,"previous":"M16-GAP-01295","next":"M16-GAP-01297"},"M16-GAP-01297":{"line":1296,"offset":223084,"length":181,"previous":"M16-GAP-01296","next":"M16-GAP-01298"},"M16-GAP-01298":{"line":1297,"offset":223265,"length":176,"previous":"M16-GAP-01297","next":"M16-GAP-01299"},"M16-GAP-01299":{"line":1298,"offset":223441,"length":177,"previous":"M16-GAP-01298","next":"M16-GAP-01300"},"M16-GAP-01300":{"line":1299,"offset":223618,"length":179,"previous":"M16-GAP-01299","next":"M16-GAP-01301"},"M16-GAP-01301":{"line":1300,"offset":223797,"length":165,"previous":"M16-GAP-01300","next":"M16-GAP-01302"},"M16-GAP-01302":{"line":1301,"offset":223962,"length":205,"previous":"M16-GAP-01301","next":"M16-GAP-01303"},"M16-GAP-01303":{"line":1302,"offset":224167,"length":206,"previous":"M16-GAP-01302","next":"M16-GAP-01304"},"M16-GAP-01304":{"line":1303,"offset":224373,"length":208,"previous":"M16-GAP-01303","next":"M16-GAP-01305"},"M16-GAP-01305":{"line":1304,"offset":224581,"length":200,"previous":"M16-GAP-01304","next":"M16-GAP-01306"},"M16-GAP-01306":{"line":1305,"offset":224781,"length":201,"previous":"M16-GAP-01305","next":"M16-GAP-01307"},"M16-GAP-01307":{"line":1306,"offset":224982,"length":203,"previous":"M16-GAP-01306","next":"M16-GAP-01308"},"M16-GAP-01308":{"line":1307,"offset":225185,"length":199,"previous":"M16-GAP-01307","next":"M16-GAP-01309"},"M16-GAP-01309":{"line":1308,"offset":225384,"length":200,"previous":"M16-GAP-01308","next":"M16-GAP-01310"},"M16-GAP-01310":{"line":1309,"offset":225584,"length":202,"previous":"M16-GAP-01309","next":"M16-GAP-01311"},"M16-GAP-01311":{"line":1310,"offset":225786,"length":178,"previous":"M16-GAP-01310","next":"M16-GAP-01312"},"M16-GAP-01312":{"line":1311,"offset":225964,"length":179,"previous":"M16-GAP-01311","next":"M16-GAP-01313"},"M16-GAP-01313":{"line":1312,"offset":226143,"length":181,"previous":"M16-GAP-01312","next":"M16-GAP-01314"},"M16-GAP-01314":{"line":1313,"offset":226324,"length":186,"previous":"M16-GAP-01313","next":"M16-GAP-01315"},"M16-GAP-01315":{"line":1314,"offset":226510,"length":187,"previous":"M16-GAP-01314","next":"M16-GAP-01316"},"M16-GAP-01316":{"line":1315,"offset":226697,"length":189,"previous":"M16-GAP-01315","next":"M16-GAP-01317"},"M16-GAP-01317":{"line":1316,"offset":226886,"length":183,"previous":"M16-GAP-01316","next":"M16-GAP-01318"},"M16-GAP-01318":{"line":1317,"offset":227069,"length":166,"previous":"M16-GAP-01317","next":"M16-GAP-01319"},"M16-GAP-01319":{"line":1318,"offset":227235,"length":172,"previous":"M16-GAP-01318","next":"M16-GAP-01320"},"M16-GAP-01320":{"line":1319,"offset":227407,"length":168,"previous":"M16-GAP-01319","next":"M16-GAP-01321"},"M16-GAP-01321":{"line":1320,"offset":227575,"length":166,"previous":"M16-GAP-01320","next":"M16-GAP-01322"},"M16-GAP-01322":{"line":1321,"offset":227741,"length":170,"previous":"M16-GAP-01321","next":"M16-GAP-01323"},"M16-GAP-01323":{"line":1322,"offset":227911,"length":169,"previous":"M16-GAP-01322","next":"M16-GAP-01324"},"M16-GAP-01324":{"line":1323,"offset":228080,"length":174,"previous":"M16-GAP-01323","next":"M16-GAP-01325"},"M16-GAP-01325":{"line":1324,"offset":228254,"length":167,"previous":"M16-GAP-01324","next":"M16-GAP-01326"},"M16-GAP-01326":{"line":1325,"offset":228421,"length":177,"previous":"M16-GAP-01325","next":"M16-GAP-01327"},"M16-GAP-01327":{"line":1326,"offset":228598,"length":178,"previous":"M16-GAP-01326","next":"M16-GAP-01328"},"M16-GAP-01328":{"line":1327,"offset":228776,"length":180,"previous":"M16-GAP-01327","next":"M16-GAP-01329"},"M16-GAP-01329":{"line":1328,"offset":228956,"length":169,"previous":"M16-GAP-01328","next":"M16-GAP-01330"},"M16-GAP-01330":{"line":1329,"offset":229125,"length":180,"previous":"M16-GAP-01329","next":"M16-GAP-01331"},"M16-GAP-01331":{"line":1330,"offset":229305,"length":188,"previous":"M16-GAP-01330","next":"M16-GAP-01332"},"M16-GAP-01332":{"line":1331,"offset":229493,"length":174,"previous":"M16-GAP-01331","next":"M16-GAP-01333"},"M16-GAP-01333":{"line":1332,"offset":229667,"length":187,"previous":"M16-GAP-01332","next":"M16-GAP-01334"},"M16-GAP-01334":{"line":1333,"offset":229854,"length":177,"previous":"M16-GAP-01333","next":"M16-GAP-01335"},"M16-GAP-01335":{"line":1334,"offset":230031,"length":190,"previous":"M16-GAP-01334","next":"M16-GAP-01336"},"M16-GAP-01336":{"line":1335,"offset":230221,"length":160,"previous":"M16-GAP-01335","next":"M16-GAP-01337"},"M16-GAP-01337":{"line":1336,"offset":230381,"length":166,"previous":"M16-GAP-01336","next":"M16-GAP-01338"},"M16-GAP-01338":{"line":1337,"offset":230547,"length":166,"previous":"M16-GAP-01337","next":"M16-GAP-01339"},"M16-GAP-01339":{"line":1338,"offset":230713,"length":160,"previous":"M16-GAP-01338","next":"M16-GAP-01340"},"M16-GAP-01340":{"line":1339,"offset":230873,"length":180,"previous":"M16-GAP-01339","next":"M16-GAP-01341"},"M16-GAP-01341":{"line":1340,"offset":231053,"length":165,"previous":"M16-GAP-01340","next":"M16-GAP-01342"},"M16-GAP-01342":{"line":1341,"offset":231218,"length":167,"previous":"M16-GAP-01341","next":"M16-GAP-01343"},"M16-GAP-01343":{"line":1342,"offset":231385,"length":165,"previous":"M16-GAP-01342","next":"M16-GAP-01344"},"M16-GAP-01344":{"line":1343,"offset":231550,"length":168,"previous":"M16-GAP-01343","next":"M16-GAP-01345"},"M16-GAP-01345":{"line":1344,"offset":231718,"length":166,"previous":"M16-GAP-01344","next":"M16-GAP-01346"},"M16-GAP-01346":{"line":1345,"offset":231884,"length":173,"previous":"M16-GAP-01345","next":"M16-GAP-01347"},"M16-GAP-01347":{"line":1346,"offset":232057,"length":181,"previous":"M16-GAP-01346","next":"M16-GAP-01348"},"M16-GAP-01348":{"line":1347,"offset":232238,"length":167,"previous":"M16-GAP-01347","next":"M16-GAP-01349"},"M16-GAP-01349":{"line":1348,"offset":232405,"length":182,"previous":"M16-GAP-01348","next":"M16-GAP-01350"},"M16-GAP-01350":{"line":1349,"offset":232587,"length":191,"previous":"M16-GAP-01349","next":"M16-GAP-01351"},"M16-GAP-01351":{"line":1350,"offset":232778,"length":186,"previous":"M16-GAP-01350","next":"M16-GAP-01352"},"M16-GAP-01352":{"line":1351,"offset":232964,"length":184,"previous":"M16-GAP-01351","next":"M16-GAP-01353"},"M16-GAP-01353":{"line":1352,"offset":233148,"length":183,"previous":"M16-GAP-01352","next":"M16-GAP-01354"},"M16-GAP-01354":{"line":1353,"offset":233331,"length":169,"previous":"M16-GAP-01353","next":"M16-GAP-01355"},"M16-GAP-01355":{"line":1354,"offset":233500,"length":177,"previous":"M16-GAP-01354","next":"M16-GAP-01356"},"M16-GAP-01356":{"line":1355,"offset":233677,"length":171,"previous":"M16-GAP-01355","next":"M16-GAP-01357"},"M16-GAP-01357":{"line":1356,"offset":233848,"length":170,"previous":"M16-GAP-01356","next":"M16-GAP-01358"},"M16-GAP-01358":{"line":1357,"offset":234018,"length":166,"previous":"M16-GAP-01357","next":"M16-GAP-01359"},"M16-GAP-01359":{"line":1358,"offset":234184,"length":170,"previous":"M16-GAP-01358","next":"M16-GAP-01360"},"M16-GAP-01360":{"line":1359,"offset":234354,"length":171,"previous":"M16-GAP-01359","next":"M16-GAP-01361"},"M16-GAP-01361":{"line":1360,"offset":234525,"length":170,"previous":"M16-GAP-01360","next":"M16-GAP-01362"},"M16-GAP-01362":{"line":1361,"offset":234695,"length":176,"previous":"M16-GAP-01361","next":"M16-GAP-01363"},"M16-GAP-01363":{"line":1362,"offset":234871,"length":177,"previous":"M16-GAP-01362","next":"M16-GAP-01364"},"M16-GAP-01364":{"line":1363,"offset":235048,"length":179,"previous":"M16-GAP-01363","next":"M16-GAP-01365"},"M16-GAP-01365":{"line":1364,"offset":235227,"length":162,"previous":"M16-GAP-01364","next":"M16-GAP-01366"},"M16-GAP-01366":{"line":1365,"offset":235389,"length":187,"previous":"M16-GAP-01365","next":"M16-GAP-01367"},"M16-GAP-01367":{"line":1366,"offset":235576,"length":188,"previous":"M16-GAP-01366","next":"M16-GAP-01368"},"M16-GAP-01368":{"line":1367,"offset":235764,"length":190,"previous":"M16-GAP-01367","next":"M16-GAP-01369"},"M16-GAP-01369":{"line":1368,"offset":235954,"length":162,"previous":"M16-GAP-01368","next":"M16-GAP-01370"},"M16-GAP-01370":{"line":1369,"offset":236116,"length":166,"previous":"M16-GAP-01369","next":"M16-GAP-01371"},"M16-GAP-01371":{"line":1370,"offset":236282,"length":166,"previous":"M16-GAP-01370","next":"M16-GAP-01372"},"M16-GAP-01372":{"line":1371,"offset":236448,"length":169,"previous":"M16-GAP-01371","next":"M16-GAP-01373"},"M16-GAP-01373":{"line":1372,"offset":236617,"length":170,"previous":"M16-GAP-01372","next":"M16-GAP-01374"},"M16-GAP-01374":{"line":1373,"offset":236787,"length":168,"previous":"M16-GAP-01373","next":"M16-GAP-01375"},"M16-GAP-01375":{"line":1374,"offset":236955,"length":174,"previous":"M16-GAP-01374","next":"M16-GAP-01376"},"M16-GAP-01376":{"line":1375,"offset":237129,"length":174,"previous":"M16-GAP-01375","next":"M16-GAP-01377"},"M16-GAP-01377":{"line":1376,"offset":237303,"length":172,"previous":"M16-GAP-01376","next":"M16-GAP-01378"},"M16-GAP-01378":{"line":1377,"offset":237475,"length":177,"previous":"M16-GAP-01377","next":"M16-GAP-01379"},"M16-GAP-01379":{"line":1378,"offset":237652,"length":180,"previous":"M16-GAP-01378","next":"M16-GAP-01380"},"M16-GAP-01380":{"line":1379,"offset":237832,"length":181,"previous":"M16-GAP-01379","next":"M16-GAP-01381"},"M16-GAP-01381":{"line":1380,"offset":238013,"length":183,"previous":"M16-GAP-01380","next":"M16-GAP-01382"},"M16-GAP-01382":{"line":1381,"offset":238196,"length":176,"previous":"M16-GAP-01381","next":"M16-GAP-01383"},"M16-GAP-01383":{"line":1382,"offset":238372,"length":180,"previous":"M16-GAP-01382","next":"M16-GAP-01384"},"M16-GAP-01384":{"line":1383,"offset":238552,"length":181,"previous":"M16-GAP-01383","next":"M16-GAP-01385"},"M16-GAP-01385":{"line":1384,"offset":238733,"length":183,"previous":"M16-GAP-01384","next":"M16-GAP-01386"},"M16-GAP-01386":{"line":1385,"offset":238916,"length":168,"previous":"M16-GAP-01385","next":"M16-GAP-01387"},"M16-GAP-01387":{"line":1386,"offset":239084,"length":172,"previous":"M16-GAP-01386","next":"M16-GAP-01388"},"M16-GAP-01388":{"line":1387,"offset":239256,"length":172,"previous":"M16-GAP-01387","next":"M16-GAP-01389"},"M16-GAP-01389":{"line":1388,"offset":239428,"length":165,"previous":"M16-GAP-01388","next":"M16-GAP-01390"},"M16-GAP-01390":{"line":1389,"offset":239593,"length":173,"previous":"M16-GAP-01389","next":"M16-GAP-01391"},"M16-GAP-01391":{"line":1390,"offset":239766,"length":165,"previous":"M16-GAP-01390","next":"M16-GAP-01392"},"M16-GAP-01392":{"line":1391,"offset":239931,"length":182,"previous":"M16-GAP-01391","next":"M16-GAP-01393"},"M16-GAP-01393":{"line":1392,"offset":240113,"length":169,"previous":"M16-GAP-01392","next":"M16-GAP-01394"},"M16-GAP-01394":{"line":1393,"offset":240282,"length":172,"previous":"M16-GAP-01393","next":"M16-GAP-01395"},"M16-GAP-01395":{"line":1394,"offset":240454,"length":189,"previous":"M16-GAP-01394","next":"M16-GAP-01396"},"M16-GAP-01396":{"line":1395,"offset":240643,"length":172,"previous":"M16-GAP-01395","next":"M16-GAP-01397"},"M16-GAP-01397":{"line":1396,"offset":240815,"length":164,"previous":"M16-GAP-01396","next":"M16-GAP-01398"},"M16-GAP-01398":{"line":1397,"offset":240979,"length":169,"previous":"M16-GAP-01397","next":"M16-GAP-01399"},"M16-GAP-01399":{"line":1398,"offset":241148,"length":169,"previous":"M16-GAP-01398","next":"M16-GAP-01400"},"M16-GAP-01400":{"line":1399,"offset":241317,"length":175,"previous":"M16-GAP-01399","next":"M16-GAP-01401"},"M16-GAP-01401":{"line":1400,"offset":241492,"length":175,"previous":"M16-GAP-01400","next":"M16-GAP-01402"},"M16-GAP-01402":{"line":1401,"offset":241667,"length":161,"previous":"M16-GAP-01401","next":"M16-GAP-01403"},"M16-GAP-01403":{"line":1402,"offset":241828,"length":175,"previous":"M16-GAP-01402","next":"M16-GAP-01404"},"M16-GAP-01404":{"line":1403,"offset":242003,"length":167,"previous":"M16-GAP-01403","next":"M16-GAP-01405"},"M16-GAP-01405":{"line":1404,"offset":242170,"length":163,"previous":"M16-GAP-01404","next":"M16-GAP-01406"},"M16-GAP-01406":{"line":1405,"offset":242333,"length":183,"previous":"M16-GAP-01405","next":"M16-GAP-01407"},"M16-GAP-01407":{"line":1406,"offset":242516,"length":170,"previous":"M16-GAP-01406","next":"M16-GAP-01408"},"M16-GAP-01408":{"line":1407,"offset":242686,"length":182,"previous":"M16-GAP-01407","next":"M16-GAP-01409"},"M16-GAP-01409":{"line":1408,"offset":242868,"length":162,"previous":"M16-GAP-01408","next":"M16-GAP-01410"},"M16-GAP-01410":{"line":1409,"offset":243030,"length":168,"previous":"M16-GAP-01409","next":"M16-GAP-01411"},"M16-GAP-01411":{"line":1410,"offset":243198,"length":168,"previous":"M16-GAP-01410","next":"M16-GAP-01412"},"M16-GAP-01412":{"line":1411,"offset":243366,"length":178,"previous":"M16-GAP-01411","next":"M16-GAP-01413"},"M16-GAP-01413":{"line":1412,"offset":243544,"length":180,"previous":"M16-GAP-01412","next":"M16-GAP-01414"},"M16-GAP-01414":{"line":1413,"offset":243724,"length":172,"previous":"M16-GAP-01413","next":"M16-GAP-01415"},"M16-GAP-01415":{"line":1414,"offset":243896,"length":188,"previous":"M16-GAP-01414","next":"M16-GAP-01416"},"M16-GAP-01416":{"line":1415,"offset":244084,"length":181,"previous":"M16-GAP-01415","next":"M16-GAP-01417"},"M16-GAP-01417":{"line":1416,"offset":244265,"length":173,"previous":"M16-GAP-01416","next":"M16-GAP-01418"},"M16-GAP-01418":{"line":1417,"offset":244438,"length":183,"previous":"M16-GAP-01417","next":"M16-GAP-01419"},"M16-GAP-01419":{"line":1418,"offset":244621,"length":175,"previous":"M16-GAP-01418","next":"M16-GAP-01420"},"M16-GAP-01420":{"line":1419,"offset":244796,"length":175,"previous":"M16-GAP-01419","next":"M16-GAP-01421"},"M16-GAP-01421":{"line":1420,"offset":244971,"length":172,"previous":"M16-GAP-01420","next":"M16-GAP-01422"},"M16-GAP-01422":{"line":1421,"offset":245143,"length":185,"previous":"M16-GAP-01421","next":"M16-GAP-01423"},"M16-GAP-01423":{"line":1422,"offset":245328,"length":175,"previous":"M16-GAP-01422","next":"M16-GAP-01424"},"M16-GAP-01424":{"line":1423,"offset":245503,"length":174,"previous":"M16-GAP-01423","next":"M16-GAP-01425"},"M16-GAP-01425":{"line":1424,"offset":245677,"length":165,"previous":"M16-GAP-01424","next":"M16-GAP-01426"},"M16-GAP-01426":{"line":1425,"offset":245842,"length":179,"previous":"M16-GAP-01425","next":"M16-GAP-01427"},"M16-GAP-01427":{"line":1426,"offset":246021,"length":181,"previous":"M16-GAP-01426","next":"M16-GAP-01428"},"M16-GAP-01428":{"line":1427,"offset":246202,"length":179,"previous":"M16-GAP-01427","next":"M16-GAP-01429"},"M16-GAP-01429":{"line":1428,"offset":246381,"length":179,"previous":"M16-GAP-01428","next":"M16-GAP-01430"},"M16-GAP-01430":{"line":1429,"offset":246560,"length":175,"previous":"M16-GAP-01429","next":"M16-GAP-01431"},"M16-GAP-01431":{"line":1430,"offset":246735,"length":175,"previous":"M16-GAP-01430","next":"M16-GAP-01432"},"M16-GAP-01432":{"line":1431,"offset":246910,"length":171,"previous":"M16-GAP-01431","next":"M16-GAP-01433"},"M16-GAP-01433":{"line":1432,"offset":247081,"length":177,"previous":"M16-GAP-01432","next":"M16-GAP-01434"},"M16-GAP-01434":{"line":1433,"offset":247258,"length":164,"previous":"M16-GAP-01433","next":"M16-GAP-01435"},"M16-GAP-01435":{"line":1434,"offset":247422,"length":183,"previous":"M16-GAP-01434","next":"M16-GAP-01436"},"M16-GAP-01436":{"line":1435,"offset":247605,"length":177,"previous":"M16-GAP-01435","next":"M16-GAP-01437"},"M16-GAP-01437":{"line":1436,"offset":247782,"length":177,"previous":"M16-GAP-01436","next":"M16-GAP-01438"},"M16-GAP-01438":{"line":1437,"offset":247959,"length":167,"previous":"M16-GAP-01437","next":"M16-GAP-01439"},"M16-GAP-01439":{"line":1438,"offset":248126,"length":172,"previous":"M16-GAP-01438","next":"M16-GAP-01440"},"M16-GAP-01440":{"line":1439,"offset":248298,"length":179,"previous":"M16-GAP-01439","next":"M16-GAP-01441"},"M16-GAP-01441":{"line":1440,"offset":248477,"length":178,"previous":"M16-GAP-01440","next":"M16-GAP-01442"},"M16-GAP-01442":{"line":1441,"offset":248655,"length":173,"previous":"M16-GAP-01441","next":"M16-GAP-01443"},"M16-GAP-01443":{"line":1442,"offset":248828,"length":170,"previous":"M16-GAP-01442","next":"M16-GAP-01444"},"M16-GAP-01444":{"line":1443,"offset":248998,"length":167,"previous":"M16-GAP-01443","next":"M16-GAP-01445"},"M16-GAP-01445":{"line":1444,"offset":249165,"length":173,"previous":"M16-GAP-01444","next":"M16-GAP-01446"},"M16-GAP-01446":{"line":1445,"offset":249338,"length":173,"previous":"M16-GAP-01445","next":"M16-GAP-01447"},"M16-GAP-01447":{"line":1446,"offset":249511,"length":171,"previous":"M16-GAP-01446","next":"M16-GAP-01448"},"M16-GAP-01448":{"line":1447,"offset":249682,"length":175,"previous":"M16-GAP-01447","next":"M16-GAP-01449"},"M16-GAP-01449":{"line":1448,"offset":249857,"length":190,"previous":"M16-GAP-01448","next":"M16-GAP-01450"},"M16-GAP-01450":{"line":1449,"offset":250047,"length":188,"previous":"M16-GAP-01449","next":"M16-GAP-01451"},"M16-GAP-01451":{"line":1450,"offset":250235,"length":183,"previous":"M16-GAP-01450","next":"M16-GAP-01452"},"M16-GAP-01452":{"line":1451,"offset":250418,"length":190,"previous":"M16-GAP-01451","next":"M16-GAP-01453"},"M16-GAP-01453":{"line":1452,"offset":250608,"length":188,"previous":"M16-GAP-01452","next":"M16-GAP-01454"},"M16-GAP-01454":{"line":1453,"offset":250796,"length":195,"previous":"M16-GAP-01453","next":"M16-GAP-01455"},"M16-GAP-01455":{"line":1454,"offset":250991,"length":186,"previous":"M16-GAP-01454","next":"M16-GAP-01456"},"M16-GAP-01456":{"line":1455,"offset":251177,"length":175,"previous":"M16-GAP-01455","next":"M16-GAP-01457"},"M16-GAP-01457":{"line":1456,"offset":251352,"length":197,"previous":"M16-GAP-01456","next":"M16-GAP-01458"},"M16-GAP-01458":{"line":1457,"offset":251549,"length":198,"previous":"M16-GAP-01457","next":"M16-GAP-01459"},"M16-GAP-01459":{"line":1458,"offset":251747,"length":200,"previous":"M16-GAP-01458","next":"M16-GAP-01460"},"M16-GAP-01460":{"line":1459,"offset":251947,"length":197,"previous":"M16-GAP-01459","next":"M16-GAP-01461"},"M16-GAP-01461":{"line":1460,"offset":252144,"length":198,"previous":"M16-GAP-01460","next":"M16-GAP-01462"},"M16-GAP-01462":{"line":1461,"offset":252342,"length":200,"previous":"M16-GAP-01461","next":"M16-GAP-01463"},"M16-GAP-01463":{"line":1462,"offset":252542,"length":173,"previous":"M16-GAP-01462","next":"M16-GAP-01464"},"M16-GAP-01464":{"line":1463,"offset":252715,"length":179,"previous":"M16-GAP-01463","next":"M16-GAP-01465"},"M16-GAP-01465":{"line":1464,"offset":252894,"length":173,"previous":"M16-GAP-01464","next":"M16-GAP-01466"},"M16-GAP-01466":{"line":1465,"offset":253067,"length":171,"previous":"M16-GAP-01465","next":"M16-GAP-01467"},"M16-GAP-01467":{"line":1466,"offset":253238,"length":172,"previous":"M16-GAP-01466","next":"M16-GAP-01468"},"M16-GAP-01468":{"line":1467,"offset":253410,"length":172,"previous":"M16-GAP-01467","next":"M16-GAP-01469"},"M16-GAP-01469":{"line":1468,"offset":253582,"length":169,"previous":"M16-GAP-01468","next":"M16-GAP-01470"},"M16-GAP-01470":{"line":1469,"offset":253751,"length":171,"previous":"M16-GAP-01469","next":"M16-GAP-01471"},"M16-GAP-01471":{"line":1470,"offset":253922,"length":169,"previous":"M16-GAP-01470","next":"M16-GAP-01472"},"M16-GAP-01472":{"line":1471,"offset":254091,"length":168,"previous":"M16-GAP-01471","next":"M16-GAP-01473"},"M16-GAP-01473":{"line":1472,"offset":254259,"length":169,"previous":"M16-GAP-01472","next":"M16-GAP-01474"},"M16-GAP-01474":{"line":1473,"offset":254428,"length":185,"previous":"M16-GAP-01473","next":"M16-GAP-01475"},"M16-GAP-01475":{"line":1474,"offset":254613,"length":185,"previous":"M16-GAP-01474","next":"M16-GAP-01476"},"M16-GAP-01476":{"line":1475,"offset":254798,"length":183,"previous":"M16-GAP-01475","next":"M16-GAP-01477"},"M16-GAP-01477":{"line":1476,"offset":254981,"length":177,"previous":"M16-GAP-01476","next":"M16-GAP-01478"},"M16-GAP-01478":{"line":1477,"offset":255158,"length":162,"previous":"M16-GAP-01477","next":"M16-GAP-01479"},"M16-GAP-01479":{"line":1478,"offset":255320,"length":169,"previous":"M16-GAP-01478","next":"M16-GAP-01480"},"M16-GAP-01480":{"line":1479,"offset":255489,"length":166,"previous":"M16-GAP-01479","next":"M16-GAP-01481"},"M16-GAP-01481":{"line":1480,"offset":255655,"length":178,"previous":"M16-GAP-01480","next":"M16-GAP-01482"},"M16-GAP-01482":{"line":1481,"offset":255833,"length":181,"previous":"M16-GAP-01481","next":"M16-GAP-01483"},"M16-GAP-01483":{"line":1482,"offset":256014,"length":167,"previous":"M16-GAP-01482","next":"M16-GAP-01484"},"M16-GAP-01484":{"line":1483,"offset":256181,"length":194,"previous":"M16-GAP-01483","next":"M16-GAP-01485"},"M16-GAP-01485":{"line":1484,"offset":256375,"length":185,"previous":"M16-GAP-01484","next":"M16-GAP-01486"},"M16-GAP-01486":{"line":1485,"offset":256560,"length":187,"previous":"M16-GAP-01485","next":"M16-GAP-01487"},"M16-GAP-01487":{"line":1486,"offset":256747,"length":195,"previous":"M16-GAP-01486","next":"M16-GAP-01488"},"M16-GAP-01488":{"line":1487,"offset":256942,"length":186,"previous":"M16-GAP-01487","next":"M16-GAP-01489"},"M16-GAP-01489":{"line":1488,"offset":257128,"length":188,"previous":"M16-GAP-01488","next":"M16-GAP-01490"},"M16-GAP-01490":{"line":1489,"offset":257316,"length":194,"previous":"M16-GAP-01489","next":"M16-GAP-01491"},"M16-GAP-01491":{"line":1490,"offset":257510,"length":172,"previous":"M16-GAP-01490","next":"M16-GAP-01492"},"M16-GAP-01492":{"line":1491,"offset":257682,"length":179,"previous":"M16-GAP-01491","next":"M16-GAP-01493"},"M16-GAP-01493":{"line":1492,"offset":257861,"length":179,"previous":"M16-GAP-01492","next":"M16-GAP-01494"},"M16-GAP-01494":{"line":1493,"offset":258040,"length":178,"previous":"M16-GAP-01493","next":"M16-GAP-01495"},"M16-GAP-01495":{"line":1494,"offset":258218,"length":171,"previous":"M16-GAP-01494","next":"M16-GAP-01496"},"M16-GAP-01496":{"line":1495,"offset":258389,"length":176,"previous":"M16-GAP-01495","next":"M16-GAP-01497"},"M16-GAP-01497":{"line":1496,"offset":258565,"length":172,"previous":"M16-GAP-01496","next":"M16-GAP-01498"},"M16-GAP-01498":{"line":1497,"offset":258737,"length":173,"previous":"M16-GAP-01497","next":"M16-GAP-01499"},"M16-GAP-01499":{"line":1498,"offset":258910,"length":173,"previous":"M16-GAP-01498","next":"M16-GAP-01500"},"M16-GAP-01500":{"line":1499,"offset":259083,"length":174,"previous":"M16-GAP-01499","next":"M16-GAP-01501"},"M16-GAP-01501":{"line":1500,"offset":259257,"length":168,"previous":"M16-GAP-01500","next":"M16-GAP-01502"},"M16-GAP-01502":{"line":1501,"offset":259425,"length":179,"previous":"M16-GAP-01501","next":"M16-GAP-01503"},"M16-GAP-01503":{"line":1502,"offset":259604,"length":174,"previous":"M16-GAP-01502","next":"M16-GAP-01504"},"M16-GAP-01504":{"line":1503,"offset":259778,"length":175,"previous":"M16-GAP-01503","next":"M16-GAP-01505"},"M16-GAP-01505":{"line":1504,"offset":259953,"length":178,"previous":"M16-GAP-01504","next":"M16-GAP-01506"},"M16-GAP-01506":{"line":1505,"offset":260131,"length":176,"previous":"M16-GAP-01505","next":"M16-GAP-01507"},"M16-GAP-01507":{"line":1506,"offset":260307,"length":180,"previous":"M16-GAP-01506","next":"M16-GAP-01508"},"M16-GAP-01508":{"line":1507,"offset":260487,"length":176,"previous":"M16-GAP-01507","next":"M16-GAP-01509"},"M16-GAP-01509":{"line":1508,"offset":260663,"length":178,"previous":"M16-GAP-01508","next":"M16-GAP-01510"},"M16-GAP-01510":{"line":1509,"offset":260841,"length":182,"previous":"M16-GAP-01509","next":"M16-GAP-01511"},"M16-GAP-01511":{"line":1510,"offset":261023,"length":185,"previous":"M16-GAP-01510","next":"M16-GAP-01512"},"M16-GAP-01512":{"line":1511,"offset":261208,"length":178,"previous":"M16-GAP-01511","next":"M16-GAP-01513"},"M16-GAP-01513":{"line":1512,"offset":261386,"length":173,"previous":"M16-GAP-01512","next":"M16-GAP-01514"},"M16-GAP-01514":{"line":1513,"offset":261559,"length":170,"previous":"M16-GAP-01513","next":"M16-GAP-01515"},"M16-GAP-01515":{"line":1514,"offset":261729,"length":166,"previous":"M16-GAP-01514","next":"M16-GAP-01516"},"M16-GAP-01516":{"line":1515,"offset":261895,"length":179,"previous":"M16-GAP-01515","next":"M16-GAP-01517"},"M16-GAP-01517":{"line":1516,"offset":262074,"length":170,"previous":"M16-GAP-01516","next":"M16-GAP-01518"},"M16-GAP-01518":{"line":1517,"offset":262244,"length":181,"previous":"M16-GAP-01517","next":"M16-GAP-01519"},"M16-GAP-01519":{"line":1518,"offset":262425,"length":172,"previous":"M16-GAP-01518","next":"M16-GAP-01520"},"M16-GAP-01520":{"line":1519,"offset":262597,"length":184,"previous":"M16-GAP-01519","next":"M16-GAP-01521"},"M16-GAP-01521":{"line":1520,"offset":262781,"length":174,"previous":"M16-GAP-01520","next":"M16-GAP-01522"},"M16-GAP-01522":{"line":1521,"offset":262955,"length":171,"previous":"M16-GAP-01521","next":"M16-GAP-01523"},"M16-GAP-01523":{"line":1522,"offset":263126,"length":183,"previous":"M16-GAP-01522","next":"M16-GAP-01524"},"M16-GAP-01524":{"line":1523,"offset":263309,"length":176,"previous":"M16-GAP-01523","next":"M16-GAP-01525"},"M16-GAP-01525":{"line":1524,"offset":263485,"length":180,"previous":"M16-GAP-01524","next":"M16-GAP-01526"},"M16-GAP-01526":{"line":1525,"offset":263665,"length":174,"previous":"M16-GAP-01525","next":"M16-GAP-01527"},"M16-GAP-01527":{"line":1526,"offset":263839,"length":173,"previous":"M16-GAP-01526","next":"M16-GAP-01528"},"M16-GAP-01528":{"line":1527,"offset":264012,"length":177,"previous":"M16-GAP-01527","next":"M16-GAP-01529"},"M16-GAP-01529":{"line":1528,"offset":264189,"length":173,"previous":"M16-GAP-01528","next":"M16-GAP-01530"},"M16-GAP-01530":{"line":1529,"offset":264362,"length":184,"previous":"M16-GAP-01529","next":"M16-GAP-01531"},"M16-GAP-01531":{"line":1530,"offset":264546,"length":176,"previous":"M16-GAP-01530","next":"M16-GAP-01532"},"M16-GAP-01532":{"line":1531,"offset":264722,"length":177,"previous":"M16-GAP-01531","next":"M16-GAP-01533"},"M16-GAP-01533":{"line":1532,"offset":264899,"length":180,"previous":"M16-GAP-01532","next":"M16-GAP-01534"},"M16-GAP-01534":{"line":1533,"offset":265079,"length":180,"previous":"M16-GAP-01533","next":"M16-GAP-01535"},"M16-GAP-01535":{"line":1534,"offset":265259,"length":187,"previous":"M16-GAP-01534","next":"M16-GAP-01536"},"M16-GAP-01536":{"line":1535,"offset":265446,"length":181,"previous":"M16-GAP-01535","next":"M16-GAP-01537"},"M16-GAP-01537":{"line":1536,"offset":265627,"length":174,"previous":"M16-GAP-01536","next":"M16-GAP-01538"},"M16-GAP-01538":{"line":1537,"offset":265801,"length":176,"previous":"M16-GAP-01537","next":"M16-GAP-01539"},"M16-GAP-01539":{"line":1538,"offset":265977,"length":178,"previous":"M16-GAP-01538","next":"M16-GAP-01540"},"M16-GAP-01540":{"line":1539,"offset":266155,"length":168,"previous":"M16-GAP-01539","next":"M16-GAP-01541"},"M16-GAP-01541":{"line":1540,"offset":266323,"length":170,"previous":"M16-GAP-01540","next":"M16-GAP-01542"},"M16-GAP-01542":{"line":1541,"offset":266493,"length":168,"previous":"M16-GAP-01541","next":"M16-GAP-01543"},"M16-GAP-01543":{"line":1542,"offset":266661,"length":170,"previous":"M16-GAP-01542","next":"M16-GAP-01544"},"M16-GAP-01544":{"line":1543,"offset":266831,"length":178,"previous":"M16-GAP-01543","next":"M16-GAP-01545"},"M16-GAP-01545":{"line":1544,"offset":267009,"length":179,"previous":"M16-GAP-01544","next":"M16-GAP-01546"},"M16-GAP-01546":{"line":1545,"offset":267188,"length":168,"previous":"M16-GAP-01545","next":"M16-GAP-01547"},"M16-GAP-01547":{"line":1546,"offset":267356,"length":177,"previous":"M16-GAP-01546","next":"M16-GAP-01548"},"M16-GAP-01548":{"line":1547,"offset":267533,"length":180,"previous":"M16-GAP-01547","next":"M16-GAP-01549"},"M16-GAP-01549":{"line":1548,"offset":267713,"length":173,"previous":"M16-GAP-01548","next":"M16-GAP-01550"},"M16-GAP-01550":{"line":1549,"offset":267886,"length":173,"previous":"M16-GAP-01549","next":"M16-GAP-01551"},"M16-GAP-01551":{"line":1550,"offset":268059,"length":169,"previous":"M16-GAP-01550","next":"M16-GAP-01552"},"M16-GAP-01552":{"line":1551,"offset":268228,"length":170,"previous":"M16-GAP-01551","next":"M16-GAP-01553"},"M16-GAP-01553":{"line":1552,"offset":268398,"length":178,"previous":"M16-GAP-01552","next":"M16-GAP-01554"},"M16-GAP-01554":{"line":1553,"offset":268576,"length":179,"previous":"M16-GAP-01553","next":"M16-GAP-01555"},"M16-GAP-01555":{"line":1554,"offset":268755,"length":173,"previous":"M16-GAP-01554","next":"M16-GAP-01556"},"M16-GAP-01556":{"line":1555,"offset":268928,"length":175,"previous":"M16-GAP-01555","next":"M16-GAP-01557"},"M16-GAP-01557":{"line":1556,"offset":269103,"length":171,"previous":"M16-GAP-01556","next":"M16-GAP-01558"},"M16-GAP-01558":{"line":1557,"offset":269274,"length":167,"previous":"M16-GAP-01557","next":"M16-GAP-01559"},"M16-GAP-01559":{"line":1558,"offset":269441,"length":170,"previous":"M16-GAP-01558","next":"M16-GAP-01560"},"M16-GAP-01560":{"line":1559,"offset":269611,"length":169,"previous":"M16-GAP-01559","next":"M16-GAP-01561"},"M16-GAP-01561":{"line":1560,"offset":269780,"length":177,"previous":"M16-GAP-01560","next":"M16-GAP-01562"},"M16-GAP-01562":{"line":1561,"offset":269957,"length":180,"previous":"M16-GAP-01561","next":"M16-GAP-01563"},"M16-GAP-01563":{"line":1562,"offset":270137,"length":172,"previous":"M16-GAP-01562","next":"M16-GAP-01564"},"M16-GAP-01564":{"line":1563,"offset":270309,"length":169,"previous":"M16-GAP-01563","next":"M16-GAP-01565"},"M16-GAP-01565":{"line":1564,"offset":270478,"length":168,"previous":"M16-GAP-01564","next":"M16-GAP-01566"},"M16-GAP-01566":{"line":1565,"offset":270646,"length":172,"previous":"M16-GAP-01565","next":"M16-GAP-01567"},"M16-GAP-01567":{"line":1566,"offset":270818,"length":171,"previous":"M16-GAP-01566","next":"M16-GAP-01568"},"M16-GAP-01568":{"line":1567,"offset":270989,"length":172,"previous":"M16-GAP-01567","next":"M16-GAP-01569"},"M16-GAP-01569":{"line":1568,"offset":271161,"length":174,"previous":"M16-GAP-01568","next":"M16-GAP-01570"},"M16-GAP-01570":{"line":1569,"offset":271335,"length":169,"previous":"M16-GAP-01569","next":"M16-GAP-01571"},"M16-GAP-01571":{"line":1570,"offset":271504,"length":171,"previous":"M16-GAP-01570","next":"M16-GAP-01572"},"M16-GAP-01572":{"line":1571,"offset":271675,"length":171,"previous":"M16-GAP-01571","next":"M16-GAP-01573"},"M16-GAP-01573":{"line":1572,"offset":271846,"length":169,"previous":"M16-GAP-01572","next":"M16-GAP-01574"},"M16-GAP-01574":{"line":1573,"offset":272015,"length":172,"previous":"M16-GAP-01573","next":"M16-GAP-01575"},"M16-GAP-01575":{"line":1574,"offset":272187,"length":171,"previous":"M16-GAP-01574","next":"M16-GAP-01576"},"M16-GAP-01576":{"line":1575,"offset":272358,"length":180,"previous":"M16-GAP-01575","next":"M16-GAP-01577"},"M16-GAP-01577":{"line":1576,"offset":272538,"length":175,"previous":"M16-GAP-01576","next":"M16-GAP-01578"},"M16-GAP-01578":{"line":1577,"offset":272713,"length":168,"previous":"M16-GAP-01577","next":"M16-GAP-01579"},"M16-GAP-01579":{"line":1578,"offset":272881,"length":170,"previous":"M16-GAP-01578","next":"M16-GAP-01580"},"M16-GAP-01580":{"line":1579,"offset":273051,"length":179,"previous":"M16-GAP-01579","next":"M16-GAP-01581"},"M16-GAP-01581":{"line":1580,"offset":273230,"length":170,"previous":"M16-GAP-01580","next":"M16-GAP-01582"},"M16-GAP-01582":{"line":1581,"offset":273400,"length":171,"previous":"M16-GAP-01581","next":"M16-GAP-01583"},"M16-GAP-01583":{"line":1582,"offset":273571,"length":176,"previous":"M16-GAP-01582","next":"M16-GAP-01584"},"M16-GAP-01584":{"line":1583,"offset":273747,"length":180,"previous":"M16-GAP-01583","next":"M16-GAP-01585"},"M16-GAP-01585":{"line":1584,"offset":273927,"length":174,"previous":"M16-GAP-01584","next":"M16-GAP-01586"},"M16-GAP-01586":{"line":1585,"offset":274101,"length":173,"previous":"M16-GAP-01585","next":"M16-GAP-01587"},"M16-GAP-01587":{"line":1586,"offset":274274,"length":171,"previous":"M16-GAP-01586","next":"M16-GAP-01588"},"M16-GAP-01588":{"line":1587,"offset":274445,"length":182,"previous":"M16-GAP-01587","next":"M16-GAP-01589"},"M16-GAP-01589":{"line":1588,"offset":274627,"length":173,"previous":"M16-GAP-01588","next":"M16-GAP-01590"},"M16-GAP-01590":{"line":1589,"offset":274800,"length":172,"previous":"M16-GAP-01589","next":"M16-GAP-01591"},"M16-GAP-01591":{"line":1590,"offset":274972,"length":172,"previous":"M16-GAP-01590","next":"M16-GAP-01592"},"M16-GAP-01592":{"line":1591,"offset":275144,"length":178,"previous":"M16-GAP-01591","next":"M16-GAP-01593"},"M16-GAP-01593":{"line":1592,"offset":275322,"length":174,"previous":"M16-GAP-01592","next":"M16-GAP-01594"},"M16-GAP-01594":{"line":1593,"offset":275496,"length":172,"previous":"M16-GAP-01593","next":"M16-GAP-01595"},"M16-GAP-01595":{"line":1594,"offset":275668,"length":174,"previous":"M16-GAP-01594","next":"M16-GAP-01596"},"M16-GAP-01596":{"line":1595,"offset":275842,"length":174,"previous":"M16-GAP-01595","next":"M16-GAP-01597"},"M16-GAP-01597":{"line":1596,"offset":276016,"length":176,"previous":"M16-GAP-01596","next":"M16-GAP-01598"},"M16-GAP-01598":{"line":1597,"offset":276192,"length":185,"previous":"M16-GAP-01597","next":"M16-GAP-01599"},"M16-GAP-01599":{"line":1598,"offset":276377,"length":199,"previous":"M16-GAP-01598","next":"M16-GAP-01600"},"M16-GAP-01600":{"line":1599,"offset":276576,"length":187,"previous":"M16-GAP-01599","next":"M16-GAP-01601"},"M16-GAP-01601":{"line":1600,"offset":276763,"length":178,"previous":"M16-GAP-01600","next":"M16-GAP-01602"},"M16-GAP-01602":{"line":1601,"offset":276941,"length":179,"previous":"M16-GAP-01601","next":"M16-GAP-01603"},"M16-GAP-01603":{"line":1602,"offset":277120,"length":177,"previous":"M16-GAP-01602","next":"M16-GAP-01604"},"M16-GAP-01604":{"line":1603,"offset":277297,"length":172,"previous":"M16-GAP-01603","next":"M16-GAP-01605"},"M16-GAP-01605":{"line":1604,"offset":277469,"length":169,"previous":"M16-GAP-01604","next":"M16-GAP-01606"},"M16-GAP-01606":{"line":1605,"offset":277638,"length":173,"previous":"M16-GAP-01605","next":"M16-GAP-01607"},"M16-GAP-01607":{"line":1606,"offset":277811,"length":176,"previous":"M16-GAP-01606","next":"M16-GAP-01608"},"M16-GAP-01608":{"line":1607,"offset":277987,"length":166,"previous":"M16-GAP-01607","next":"M16-GAP-01609"},"M16-GAP-01609":{"line":1608,"offset":278153,"length":169,"previous":"M16-GAP-01608","next":"M16-GAP-01610"},"M16-GAP-01610":{"line":1609,"offset":278322,"length":167,"previous":"M16-GAP-01609","next":"M16-GAP-01611"},"M16-GAP-01611":{"line":1610,"offset":278489,"length":171,"previous":"M16-GAP-01610","next":"M16-GAP-01612"},"M16-GAP-01612":{"line":1611,"offset":278660,"length":173,"previous":"M16-GAP-01611","next":"M16-GAP-01613"},"M16-GAP-01613":{"line":1612,"offset":278833,"length":179,"previous":"M16-GAP-01612","next":"M16-GAP-01614"},"M16-GAP-01614":{"line":1613,"offset":279012,"length":176,"previous":"M16-GAP-01613","next":"M16-GAP-01615"},"M16-GAP-01615":{"line":1614,"offset":279188,"length":178,"previous":"M16-GAP-01614","next":"M16-GAP-01616"},"M16-GAP-01616":{"line":1615,"offset":279366,"length":169,"previous":"M16-GAP-01615","next":"M16-GAP-01617"},"M16-GAP-01617":{"line":1616,"offset":279535,"length":171,"previous":"M16-GAP-01616","next":"M16-GAP-01618"},"M16-GAP-01618":{"line":1617,"offset":279706,"length":174,"previous":"M16-GAP-01617","next":"M16-GAP-01619"},"M16-GAP-01619":{"line":1618,"offset":279880,"length":177,"previous":"M16-GAP-01618","next":"M16-GAP-01620"},"M16-GAP-01620":{"line":1619,"offset":280057,"length":181,"previous":"M16-GAP-01619","next":"M16-GAP-01621"},"M16-GAP-01621":{"line":1620,"offset":280238,"length":176,"previous":"M16-GAP-01620","next":"M16-GAP-01622"},"M16-GAP-01622":{"line":1621,"offset":280414,"length":175,"previous":"M16-GAP-01621","next":"M16-GAP-01623"},"M16-GAP-01623":{"line":1622,"offset":280589,"length":187,"previous":"M16-GAP-01622","next":"M16-GAP-01624"},"M16-GAP-01624":{"line":1623,"offset":280776,"length":179,"previous":"M16-GAP-01623","next":"M16-GAP-01625"},"M16-GAP-01625":{"line":1624,"offset":280955,"length":177,"previous":"M16-GAP-01624","next":"M16-GAP-01626"},"M16-GAP-01626":{"line":1625,"offset":281132,"length":177,"previous":"M16-GAP-01625","next":"M16-GAP-01627"},"M16-GAP-01627":{"line":1626,"offset":281309,"length":182,"previous":"M16-GAP-01626","next":"M16-GAP-01628"},"M16-GAP-01628":{"line":1627,"offset":281491,"length":175,"previous":"M16-GAP-01627","next":"M16-GAP-01629"},"M16-GAP-01629":{"line":1628,"offset":281666,"length":177,"previous":"M16-GAP-01628","next":"M16-GAP-01630"},"M16-GAP-01630":{"line":1629,"offset":281843,"length":175,"previous":"M16-GAP-01629","next":"M16-GAP-01631"},"M16-GAP-01631":{"line":1630,"offset":282018,"length":180,"previous":"M16-GAP-01630","next":"M16-GAP-01632"},"M16-GAP-01632":{"line":1631,"offset":282198,"length":184,"previous":"M16-GAP-01631","next":"M16-GAP-01633"},"M16-GAP-01633":{"line":1632,"offset":282382,"length":179,"previous":"M16-GAP-01632","next":"M16-GAP-01634"},"M16-GAP-01634":{"line":1633,"offset":282561,"length":177,"previous":"M16-GAP-01633","next":"M16-GAP-01635"},"M16-GAP-01635":{"line":1634,"offset":282738,"length":182,"previous":"M16-GAP-01634","next":"M16-GAP-01636"},"M16-GAP-01636":{"line":1635,"offset":282920,"length":177,"previous":"M16-GAP-01635","next":"M16-GAP-01637"},"M16-GAP-01637":{"line":1636,"offset":283097,"length":181,"previous":"M16-GAP-01636","next":"M16-GAP-01638"},"M16-GAP-01638":{"line":1637,"offset":283278,"length":177,"previous":"M16-GAP-01637","next":"M16-GAP-01639"},"M16-GAP-01639":{"line":1638,"offset":283455,"length":175,"previous":"M16-GAP-01638","next":"M16-GAP-01640"},"M16-GAP-01640":{"line":1639,"offset":283630,"length":175,"previous":"M16-GAP-01639","next":"M16-GAP-01641"},"M16-GAP-01641":{"line":1640,"offset":283805,"length":176,"previous":"M16-GAP-01640","next":"M16-GAP-01642"},"M16-GAP-01642":{"line":1641,"offset":283981,"length":178,"previous":"M16-GAP-01641","next":"M16-GAP-01643"},"M16-GAP-01643":{"line":1642,"offset":284159,"length":195,"previous":"M16-GAP-01642","next":"M16-GAP-01644"},"M16-GAP-01644":{"line":1643,"offset":284354,"length":177,"previous":"M16-GAP-01643","next":"M16-GAP-01645"},"M16-GAP-01645":{"line":1644,"offset":284531,"length":182,"previous":"M16-GAP-01644","next":"M16-GAP-01646"},"M16-GAP-01646":{"line":1645,"offset":284713,"length":184,"previous":"M16-GAP-01645","next":"M16-GAP-01647"},"M16-GAP-01647":{"line":1646,"offset":284897,"length":180,"previous":"M16-GAP-01646","next":"M16-GAP-01648"},"M16-GAP-01648":{"line":1647,"offset":285077,"length":168,"previous":"M16-GAP-01647","next":"M16-GAP-01649"},"M16-GAP-01649":{"line":1648,"offset":285245,"length":171,"previous":"M16-GAP-01648","next":"M16-GAP-01650"},"M16-GAP-01650":{"line":1649,"offset":285416,"length":170,"previous":"M16-GAP-01649","next":"M16-GAP-01651"},"M16-GAP-01651":{"line":1650,"offset":285586,"length":173,"previous":"M16-GAP-01650","next":"M16-GAP-01652"},"M16-GAP-01652":{"line":1651,"offset":285759,"length":170,"previous":"M16-GAP-01651","next":"M16-GAP-01653"},"M16-GAP-01653":{"line":1652,"offset":285929,"length":178,"previous":"M16-GAP-01652","next":"M16-GAP-01654"},"M16-GAP-01654":{"line":1653,"offset":286107,"length":172,"previous":"M16-GAP-01653","next":"M16-GAP-01655"},"M16-GAP-01655":{"line":1654,"offset":286279,"length":184,"previous":"M16-GAP-01654","next":"M16-GAP-01656"},"M16-GAP-01656":{"line":1655,"offset":286463,"length":178,"previous":"M16-GAP-01655","next":"M16-GAP-01657"},"M16-GAP-01657":{"line":1656,"offset":286641,"length":185,"previous":"M16-GAP-01656","next":"M16-GAP-01658"},"M16-GAP-01658":{"line":1657,"offset":286826,"length":175,"previous":"M16-GAP-01657","next":"M16-GAP-01659"},"M16-GAP-01659":{"line":1658,"offset":287001,"length":180,"previous":"M16-GAP-01658","next":"M16-GAP-01660"},"M16-GAP-01660":{"line":1659,"offset":287181,"length":187,"previous":"M16-GAP-01659","next":"M16-GAP-01661"},"M16-GAP-01661":{"line":1660,"offset":287368,"length":177,"previous":"M16-GAP-01660","next":"M16-GAP-01662"},"M16-GAP-01662":{"line":1661,"offset":287545,"length":184,"previous":"M16-GAP-01661","next":"M16-GAP-01663"},"M16-GAP-01663":{"line":1662,"offset":287729,"length":184,"previous":"M16-GAP-01662","next":"M16-GAP-01664"},"M16-GAP-01664":{"line":1663,"offset":287913,"length":182,"previous":"M16-GAP-01663","next":"M16-GAP-01665"},"M16-GAP-01665":{"line":1664,"offset":288095,"length":175,"previous":"M16-GAP-01664","next":"M16-GAP-01666"},"M16-GAP-01666":{"line":1665,"offset":288270,"length":182,"previous":"M16-GAP-01665","next":"M16-GAP-01667"},"M16-GAP-01667":{"line":1666,"offset":288452,"length":187,"previous":"M16-GAP-01666","next":"M16-GAP-01668"},"M16-GAP-01668":{"line":1667,"offset":288639,"length":184,"previous":"M16-GAP-01667","next":"M16-GAP-01669"},"M16-GAP-01669":{"line":1668,"offset":288823,"length":182,"previous":"M16-GAP-01668","next":"M16-GAP-01670"},"M16-GAP-01670":{"line":1669,"offset":289005,"length":190,"previous":"M16-GAP-01669","next":"M16-GAP-01671"},"M16-GAP-01671":{"line":1670,"offset":289195,"length":188,"previous":"M16-GAP-01670","next":"M16-GAP-01672"},"M16-GAP-01672":{"line":1671,"offset":289383,"length":179,"previous":"M16-GAP-01671","next":"M16-GAP-01673"},"M16-GAP-01673":{"line":1672,"offset":289562,"length":178,"previous":"M16-GAP-01672","next":"M16-GAP-01674"},"M16-GAP-01674":{"line":1673,"offset":289740,"length":175,"previous":"M16-GAP-01673","next":"M16-GAP-01675"},"M16-GAP-01675":{"line":1674,"offset":289915,"length":174,"previous":"M16-GAP-01674","next":"M16-GAP-01676"},"M16-GAP-01676":{"line":1675,"offset":290089,"length":187,"previous":"M16-GAP-01675","next":"M16-GAP-01677"},"M16-GAP-01677":{"line":1676,"offset":290276,"length":185,"previous":"M16-GAP-01676","next":"M16-GAP-01678"},"M16-GAP-01678":{"line":1677,"offset":290461,"length":175,"previous":"M16-GAP-01677","next":"M16-GAP-01679"},"M16-GAP-01679":{"line":1678,"offset":290636,"length":182,"previous":"M16-GAP-01678","next":"M16-GAP-01680"},"M16-GAP-01680":{"line":1679,"offset":290818,"length":180,"previous":"M16-GAP-01679","next":"M16-GAP-01681"},"M16-GAP-01681":{"line":1680,"offset":290998,"length":174,"previous":"M16-GAP-01680","next":"M16-GAP-01682"},"M16-GAP-01682":{"line":1681,"offset":291172,"length":174,"previous":"M16-GAP-01681","next":"M16-GAP-01683"},"M16-GAP-01683":{"line":1682,"offset":291346,"length":166,"previous":"M16-GAP-01682","next":"M16-GAP-01684"},"M16-GAP-01684":{"line":1683,"offset":291512,"length":180,"previous":"M16-GAP-01683","next":"M16-GAP-01685"},"M16-GAP-01685":{"line":1684,"offset":291692,"length":183,"previous":"M16-GAP-01684","next":"M16-GAP-01686"},"M16-GAP-01686":{"line":1685,"offset":291875,"length":175,"previous":"M16-GAP-01685","next":"M16-GAP-01687"},"M16-GAP-01687":{"line":1686,"offset":292050,"length":164,"previous":"M16-GAP-01686","next":"M16-GAP-01688"},"M16-GAP-01688":{"line":1687,"offset":292214,"length":176,"previous":"M16-GAP-01687","next":"M16-GAP-01689"},"M16-GAP-01689":{"line":1688,"offset":292390,"length":167,"previous":"M16-GAP-01688","next":"M16-GAP-01690"},"M16-GAP-01690":{"line":1689,"offset":292557,"length":169,"previous":"M16-GAP-01689","next":"M16-GAP-01691"},"M16-GAP-01691":{"line":1690,"offset":292726,"length":178,"previous":"M16-GAP-01690","next":"M16-GAP-01692"},"M16-GAP-01692":{"line":1691,"offset":292904,"length":172,"previous":"M16-GAP-01691","next":"M16-GAP-01693"},"M16-GAP-01693":{"line":1692,"offset":293076,"length":168,"previous":"M16-GAP-01692","next":"M16-GAP-01694"},"M16-GAP-01694":{"line":1693,"offset":293244,"length":168,"previous":"M16-GAP-01693","next":"M16-GAP-01695"},"M16-GAP-01695":{"line":1694,"offset":293412,"length":173,"previous":"M16-GAP-01694","next":"M16-GAP-01696"},"M16-GAP-01696":{"line":1695,"offset":293585,"length":174,"previous":"M16-GAP-01695","next":"M16-GAP-01697"},"M16-GAP-01697":{"line":1696,"offset":293759,"length":174,"previous":"M16-GAP-01696","next":"M16-GAP-01698"},"M16-GAP-01698":{"line":1697,"offset":293933,"length":171,"previous":"M16-GAP-01697","next":"M16-GAP-01699"},"M16-GAP-01699":{"line":1698,"offset":294104,"length":182,"previous":"M16-GAP-01698","next":"M16-GAP-01700"},"M16-GAP-01700":{"line":1699,"offset":294286,"length":185,"previous":"M16-GAP-01699","next":"M16-GAP-01701"},"M16-GAP-01701":{"line":1700,"offset":294471,"length":173,"previous":"M16-GAP-01700","next":"M16-GAP-01702"},"M16-GAP-01702":{"line":1701,"offset":294644,"length":172,"previous":"M16-GAP-01701","next":"M16-GAP-01703"},"M16-GAP-01703":{"line":1702,"offset":294816,"length":181,"previous":"M16-GAP-01702","next":"M16-GAP-01704"},"M16-GAP-01704":{"line":1703,"offset":294997,"length":187,"previous":"M16-GAP-01703","next":"M16-GAP-01705"},"M16-GAP-01705":{"line":1704,"offset":295184,"length":194,"previous":"M16-GAP-01704","next":"M16-GAP-01706"},"M16-GAP-01706":{"line":1705,"offset":295378,"length":173,"previous":"M16-GAP-01705","next":"M16-GAP-01707"},"M16-GAP-01707":{"line":1706,"offset":295551,"length":178,"previous":"M16-GAP-01706","next":"M16-GAP-01708"},"M16-GAP-01708":{"line":1707,"offset":295729,"length":176,"previous":"M16-GAP-01707","next":"M16-GAP-01709"},"M16-GAP-01709":{"line":1708,"offset":295905,"length":169,"previous":"M16-GAP-01708","next":"M16-GAP-01710"},"M16-GAP-01710":{"line":1709,"offset":296074,"length":174,"previous":"M16-GAP-01709","next":"M16-GAP-01711"},"M16-GAP-01711":{"line":1710,"offset":296248,"length":173,"previous":"M16-GAP-01710","next":"M16-GAP-01712"},"M16-GAP-01712":{"line":1711,"offset":296421,"length":172,"previous":"M16-GAP-01711","next":"M16-GAP-01713"},"M16-GAP-01713":{"line":1712,"offset":296593,"length":171,"previous":"M16-GAP-01712","next":"M16-GAP-01714"},"M16-GAP-01714":{"line":1713,"offset":296764,"length":170,"previous":"M16-GAP-01713","next":"M16-GAP-01715"},"M16-GAP-01715":{"line":1714,"offset":296934,"length":175,"previous":"M16-GAP-01714","next":"M16-GAP-01716"},"M16-GAP-01716":{"line":1715,"offset":297109,"length":171,"previous":"M16-GAP-01715","next":"M16-GAP-01717"},"M16-GAP-01717":{"line":1716,"offset":297280,"length":170,"previous":"M16-GAP-01716","next":"M16-GAP-01718"},"M16-GAP-01718":{"line":1717,"offset":297450,"length":170,"previous":"M16-GAP-01717","next":"M16-GAP-01719"},"M16-GAP-01719":{"line":1718,"offset":297620,"length":171,"previous":"M16-GAP-01718","next":"M16-GAP-01720"},"M16-GAP-01720":{"line":1719,"offset":297791,"length":171,"previous":"M16-GAP-01719","next":"M16-GAP-01721"},"M16-GAP-01721":{"line":1720,"offset":297962,"length":174,"previous":"M16-GAP-01720","next":"M16-GAP-01722"},"M16-GAP-01722":{"line":1721,"offset":298136,"length":174,"previous":"M16-GAP-01721","next":"M16-GAP-01723"},"M16-GAP-01723":{"line":1722,"offset":298310,"length":172,"previous":"M16-GAP-01722","next":"M16-GAP-01724"},"M16-GAP-01724":{"line":1723,"offset":298482,"length":170,"previous":"M16-GAP-01723","next":"M16-GAP-01725"},"M16-GAP-01725":{"line":1724,"offset":298652,"length":171,"previous":"M16-GAP-01724","next":"M16-GAP-01726"},"M16-GAP-01726":{"line":1725,"offset":298823,"length":179,"previous":"M16-GAP-01725","next":"M16-GAP-01727"},"M16-GAP-01727":{"line":1726,"offset":299002,"length":174,"previous":"M16-GAP-01726","next":"M16-GAP-01728"},"M16-GAP-01728":{"line":1727,"offset":299176,"length":172,"previous":"M16-GAP-01727","next":"M16-GAP-01729"},"M16-GAP-01729":{"line":1728,"offset":299348,"length":173,"previous":"M16-GAP-01728","next":"M16-GAP-01730"},"M16-GAP-01730":{"line":1729,"offset":299521,"length":173,"previous":"M16-GAP-01729","next":"M16-GAP-01731"},"M16-GAP-01731":{"line":1730,"offset":299694,"length":175,"previous":"M16-GAP-01730","next":"M16-GAP-01732"},"M16-GAP-01732":{"line":1731,"offset":299869,"length":180,"previous":"M16-GAP-01731","next":"M16-GAP-01733"},"M16-GAP-01733":{"line":1732,"offset":300049,"length":173,"previous":"M16-GAP-01732","next":"M16-GAP-01734"},"M16-GAP-01734":{"line":1733,"offset":300222,"length":173,"previous":"M16-GAP-01733","next":"M16-GAP-01735"},"M16-GAP-01735":{"line":1734,"offset":300395,"length":173,"previous":"M16-GAP-01734","next":"M16-GAP-01736"},"M16-GAP-01736":{"line":1735,"offset":300568,"length":167,"previous":"M16-GAP-01735","next":"M16-GAP-01737"},"M16-GAP-01737":{"line":1736,"offset":300735,"length":166,"previous":"M16-GAP-01736","next":"M16-GAP-01738"},"M16-GAP-01738":{"line":1737,"offset":300901,"length":170,"previous":"M16-GAP-01737","next":"M16-GAP-01739"},"M16-GAP-01739":{"line":1738,"offset":301071,"length":180,"previous":"M16-GAP-01738","next":"M16-GAP-01740"},"M16-GAP-01740":{"line":1739,"offset":301251,"length":179,"previous":"M16-GAP-01739","next":"M16-GAP-01741"},"M16-GAP-01741":{"line":1740,"offset":301430,"length":173,"previous":"M16-GAP-01740","next":"M16-GAP-01742"},"M16-GAP-01742":{"line":1741,"offset":301603,"length":183,"previous":"M16-GAP-01741","next":"M16-GAP-01743"},"M16-GAP-01743":{"line":1742,"offset":301786,"length":172,"previous":"M16-GAP-01742","next":"M16-GAP-01744"},"M16-GAP-01744":{"line":1743,"offset":301958,"length":168,"previous":"M16-GAP-01743","next":"M16-GAP-01745"},"M16-GAP-01745":{"line":1744,"offset":302126,"length":173,"previous":"M16-GAP-01744","next":"M16-GAP-01746"},"M16-GAP-01746":{"line":1745,"offset":302299,"length":172,"previous":"M16-GAP-01745","next":"M16-GAP-01747"},"M16-GAP-01747":{"line":1746,"offset":302471,"length":175,"previous":"M16-GAP-01746","next":"M16-GAP-01748"},"M16-GAP-01748":{"line":1747,"offset":302646,"length":174,"previous":"M16-GAP-01747","next":"M16-GAP-01749"},"M16-GAP-01749":{"line":1748,"offset":302820,"length":178,"previous":"M16-GAP-01748","next":"M16-GAP-01750"},"M16-GAP-01750":{"line":1749,"offset":302998,"length":170,"previous":"M16-GAP-01749","next":"M16-GAP-01751"},"M16-GAP-01751":{"line":1750,"offset":303168,"length":169,"previous":"M16-GAP-01750","next":"M16-GAP-01752"},"M16-GAP-01752":{"line":1751,"offset":303337,"length":177,"previous":"M16-GAP-01751","next":"M16-GAP-01753"},"M16-GAP-01753":{"line":1752,"offset":303514,"length":172,"previous":"M16-GAP-01752","next":"M16-GAP-01754"},"M16-GAP-01754":{"line":1753,"offset":303686,"length":173,"previous":"M16-GAP-01753","next":"M16-GAP-01755"},"M16-GAP-01755":{"line":1754,"offset":303859,"length":173,"previous":"M16-GAP-01754","next":"M16-GAP-01756"},"M16-GAP-01756":{"line":1755,"offset":304032,"length":175,"previous":"M16-GAP-01755","next":"M16-GAP-01757"},"M16-GAP-01757":{"line":1756,"offset":304207,"length":180,"previous":"M16-GAP-01756","next":"M16-GAP-01758"},"M16-GAP-01758":{"line":1757,"offset":304387,"length":173,"previous":"M16-GAP-01757","next":"M16-GAP-01759"},"M16-GAP-01759":{"line":1758,"offset":304560,"length":173,"previous":"M16-GAP-01758","next":"M16-GAP-01760"},"M16-GAP-01760":{"line":1759,"offset":304733,"length":178,"previous":"M16-GAP-01759","next":"M16-GAP-01761"},"M16-GAP-01761":{"line":1760,"offset":304911,"length":189,"previous":"M16-GAP-01760","next":"M16-GAP-01762"},"M16-GAP-01762":{"line":1761,"offset":305100,"length":174,"previous":"M16-GAP-01761","next":"M16-GAP-01763"},"M16-GAP-01763":{"line":1762,"offset":305274,"length":181,"previous":"M16-GAP-01762","next":"M16-GAP-01764"},"M16-GAP-01764":{"line":1763,"offset":305455,"length":173,"previous":"M16-GAP-01763","next":"M16-GAP-01765"},"M16-GAP-01765":{"line":1764,"offset":305628,"length":176,"previous":"M16-GAP-01764","next":"M16-GAP-01766"},"M16-GAP-01766":{"line":1765,"offset":305804,"length":176,"previous":"M16-GAP-01765","next":"M16-GAP-01767"},"M16-GAP-01767":{"line":1766,"offset":305980,"length":173,"previous":"M16-GAP-01766","next":"M16-GAP-01768"},"M16-GAP-01768":{"line":1767,"offset":306153,"length":176,"previous":"M16-GAP-01767","next":"M16-GAP-01769"},"M16-GAP-01769":{"line":1768,"offset":306329,"length":169,"previous":"M16-GAP-01768","next":"M16-GAP-01770"},"M16-GAP-01770":{"line":1769,"offset":306498,"length":176,"previous":"M16-GAP-01769","next":"M16-GAP-01771"},"M16-GAP-01771":{"line":1770,"offset":306674,"length":174,"previous":"M16-GAP-01770","next":"M16-GAP-01772"},"M16-GAP-01772":{"line":1771,"offset":306848,"length":174,"previous":"M16-GAP-01771","next":"M16-GAP-01773"},"M16-GAP-01773":{"line":1772,"offset":307022,"length":174,"previous":"M16-GAP-01772","next":"M16-GAP-01774"},"M16-GAP-01774":{"line":1773,"offset":307196,"length":172,"previous":"M16-GAP-01773","next":"M16-GAP-01775"},"M16-GAP-01775":{"line":1774,"offset":307368,"length":169,"previous":"M16-GAP-01774","next":"M16-GAP-01776"},"M16-GAP-01776":{"line":1775,"offset":307537,"length":176,"previous":"M16-GAP-01775","next":"M16-GAP-01777"},"M16-GAP-01777":{"line":1776,"offset":307713,"length":170,"previous":"M16-GAP-01776","next":"M16-GAP-01778"},"M16-GAP-01778":{"line":1777,"offset":307883,"length":176,"previous":"M16-GAP-01777","next":"M16-GAP-01779"},"M16-GAP-01779":{"line":1778,"offset":308059,"length":167,"previous":"M16-GAP-01778","next":"M16-GAP-01780"},"M16-GAP-01780":{"line":1779,"offset":308226,"length":171,"previous":"M16-GAP-01779","next":"M16-GAP-01781"},"M16-GAP-01781":{"line":1780,"offset":308397,"length":177,"previous":"M16-GAP-01780","next":"M16-GAP-01782"},"M16-GAP-01782":{"line":1781,"offset":308574,"length":168,"previous":"M16-GAP-01781","next":"M16-GAP-01783"},"M16-GAP-01783":{"line":1782,"offset":308742,"length":174,"previous":"M16-GAP-01782","next":"M16-GAP-01784"},"M16-GAP-01784":{"line":1783,"offset":308916,"length":166,"previous":"M16-GAP-01783","next":"M16-GAP-01785"},"M16-GAP-01785":{"line":1784,"offset":309082,"length":165,"previous":"M16-GAP-01784","next":"M16-GAP-01786"},"M16-GAP-01786":{"line":1785,"offset":309247,"length":168,"previous":"M16-GAP-01785","next":"M16-GAP-01787"},"M16-GAP-01787":{"line":1786,"offset":309415,"length":167,"previous":"M16-GAP-01786","next":"M16-GAP-01788"},"M16-GAP-01788":{"line":1787,"offset":309582,"length":168,"previous":"M16-GAP-01787","next":"M16-GAP-01789"},"M16-GAP-01789":{"line":1788,"offset":309750,"length":171,"previous":"M16-GAP-01788","next":"M16-GAP-01790"},"M16-GAP-01790":{"line":1789,"offset":309921,"length":169,"previous":"M16-GAP-01789","next":"M16-GAP-01791"},"M16-GAP-01791":{"line":1790,"offset":310090,"length":177,"previous":"M16-GAP-01790","next":"M16-GAP-01792"},"M16-GAP-01792":{"line":1791,"offset":310267,"length":163,"previous":"M16-GAP-01791","next":"M16-GAP-01793"},"M16-GAP-01793":{"line":1792,"offset":310430,"length":162,"previous":"M16-GAP-01792","next":"M16-GAP-01794"},"M16-GAP-01794":{"line":1793,"offset":310592,"length":163,"previous":"M16-GAP-01793","next":"M16-GAP-01795"},"M16-GAP-01795":{"line":1794,"offset":310755,"length":170,"previous":"M16-GAP-01794","next":"M16-GAP-01796"},"M16-GAP-01796":{"line":1795,"offset":310925,"length":172,"previous":"M16-GAP-01795","next":"M16-GAP-01797"},"M16-GAP-01797":{"line":1796,"offset":311097,"length":181,"previous":"M16-GAP-01796","next":"M16-GAP-01798"},"M16-GAP-01798":{"line":1797,"offset":311278,"length":166,"previous":"M16-GAP-01797","next":"M16-GAP-01799"},"M16-GAP-01799":{"line":1798,"offset":311444,"length":175,"previous":"M16-GAP-01798","next":"M16-GAP-01800"},"M16-GAP-01800":{"line":1799,"offset":311619,"length":185,"previous":"M16-GAP-01799","next":"M16-GAP-01801"},"M16-GAP-01801":{"line":1800,"offset":311804,"length":172,"previous":"M16-GAP-01800","next":"M16-GAP-01802"},"M16-GAP-01802":{"line":1801,"offset":311976,"length":177,"previous":"M16-GAP-01801","next":"M16-GAP-01803"},"M16-GAP-01803":{"line":1802,"offset":312153,"length":175,"previous":"M16-GAP-01802","next":"M16-GAP-01804"},"M16-GAP-01804":{"line":1803,"offset":312328,"length":175,"previous":"M16-GAP-01803","next":"M16-GAP-01805"},"M16-GAP-01805":{"line":1804,"offset":312503,"length":174,"previous":"M16-GAP-01804","next":"M16-GAP-01806"},"M16-GAP-01806":{"line":1805,"offset":312677,"length":172,"previous":"M16-GAP-01805","next":"M16-GAP-01807"},"M16-GAP-01807":{"line":1806,"offset":312849,"length":184,"previous":"M16-GAP-01806","next":"M16-GAP-01808"},"M16-GAP-01808":{"line":1807,"offset":313033,"length":164,"previous":"M16-GAP-01807","next":"M16-GAP-01809"},"M16-GAP-01809":{"line":1808,"offset":313197,"length":166,"previous":"M16-GAP-01808","next":"M16-GAP-01810"},"M16-GAP-01810":{"line":1809,"offset":313363,"length":163,"previous":"M16-GAP-01809","next":"M16-GAP-01811"},"M16-GAP-01811":{"line":1810,"offset":313526,"length":170,"previous":"M16-GAP-01810","next":"M16-GAP-01812"},"M16-GAP-01812":{"line":1811,"offset":313696,"length":180,"previous":"M16-GAP-01811","next":"M16-GAP-01813"},"M16-GAP-01813":{"line":1812,"offset":313876,"length":186,"previous":"M16-GAP-01812","next":"M16-GAP-01814"},"M16-GAP-01814":{"line":1813,"offset":314062,"length":165,"previous":"M16-GAP-01813","next":"M16-GAP-01815"},"M16-GAP-01815":{"line":1814,"offset":314227,"length":174,"previous":"M16-GAP-01814","next":"M16-GAP-01816"},"M16-GAP-01816":{"line":1815,"offset":314401,"length":166,"previous":"M16-GAP-01815","next":"M16-GAP-01817"},"M16-GAP-01817":{"line":1816,"offset":314567,"length":170,"previous":"M16-GAP-01816","next":"M16-GAP-01818"},"M16-GAP-01818":{"line":1817,"offset":314737,"length":171,"previous":"M16-GAP-01817","next":"M16-GAP-01819"},"M16-GAP-01819":{"line":1818,"offset":314908,"length":173,"previous":"M16-GAP-01818","next":"M16-GAP-01820"},"M16-GAP-01820":{"line":1819,"offset":315081,"length":178,"previous":"M16-GAP-01819","next":"M16-GAP-01821"},"M16-GAP-01821":{"line":1820,"offset":315259,"length":171,"previous":"M16-GAP-01820","next":"M16-GAP-01822"},"M16-GAP-01822":{"line":1821,"offset":315430,"length":173,"previous":"M16-GAP-01821","next":"M16-GAP-01823"},"M16-GAP-01823":{"line":1822,"offset":315603,"length":172,"previous":"M16-GAP-01822","next":"M16-GAP-01824"},"M16-GAP-01824":{"line":1823,"offset":315775,"length":171,"previous":"M16-GAP-01823","next":"M16-GAP-01825"},"M16-GAP-01825":{"line":1824,"offset":315946,"length":169,"previous":"M16-GAP-01824","next":"M16-GAP-01826"},"M16-GAP-01826":{"line":1825,"offset":316115,"length":169,"previous":"M16-GAP-01825","next":"M16-GAP-01827"},"M16-GAP-01827":{"line":1826,"offset":316284,"length":176,"previous":"M16-GAP-01826","next":"M16-GAP-01828"},"M16-GAP-01828":{"line":1827,"offset":316460,"length":174,"previous":"M16-GAP-01827","next":"M16-GAP-01829"},"M16-GAP-01829":{"line":1828,"offset":316634,"length":173,"previous":"M16-GAP-01828","next":"M16-GAP-01830"},"M16-GAP-01830":{"line":1829,"offset":316807,"length":172,"previous":"M16-GAP-01829","next":"M16-GAP-01831"},"M16-GAP-01831":{"line":1830,"offset":316979,"length":170,"previous":"M16-GAP-01830","next":"M16-GAP-01832"},"M16-GAP-01832":{"line":1831,"offset":317149,"length":175,"previous":"M16-GAP-01831","next":"M16-GAP-01833"},"M16-GAP-01833":{"line":1832,"offset":317324,"length":168,"previous":"M16-GAP-01832","next":"M16-GAP-01834"},"M16-GAP-01834":{"line":1833,"offset":317492,"length":171,"previous":"M16-GAP-01833","next":"M16-GAP-01835"},"M16-GAP-01835":{"line":1834,"offset":317663,"length":176,"previous":"M16-GAP-01834","next":"M16-GAP-01836"},"M16-GAP-01836":{"line":1835,"offset":317839,"length":172,"previous":"M16-GAP-01835","next":"M16-GAP-01837"},"M16-GAP-01837":{"line":1836,"offset":318011,"length":175,"previous":"M16-GAP-01836","next":"M16-GAP-01838"},"M16-GAP-01838":{"line":1837,"offset":318186,"length":170,"previous":"M16-GAP-01837","next":"M16-GAP-01839"},"M16-GAP-01839":{"line":1838,"offset":318356,"length":170,"previous":"M16-GAP-01838","next":"M16-GAP-01840"},"M16-GAP-01840":{"line":1839,"offset":318526,"length":170,"previous":"M16-GAP-01839","next":"M16-GAP-01841"},"M16-GAP-01841":{"line":1840,"offset":318696,"length":173,"previous":"M16-GAP-01840","next":"M16-GAP-01842"},"M16-GAP-01842":{"line":1841,"offset":318869,"length":171,"previous":"M16-GAP-01841","next":"M16-GAP-01843"},"M16-GAP-01843":{"line":1842,"offset":319040,"length":165,"previous":"M16-GAP-01842","next":"M16-GAP-01844"},"M16-GAP-01844":{"line":1843,"offset":319205,"length":170,"previous":"M16-GAP-01843","next":"M16-GAP-01845"},"M16-GAP-01845":{"line":1844,"offset":319375,"length":183,"previous":"M16-GAP-01844","next":"M16-GAP-01846"},"M16-GAP-01846":{"line":1845,"offset":319558,"length":173,"previous":"M16-GAP-01845","next":"M16-GAP-01847"},"M16-GAP-01847":{"line":1846,"offset":319731,"length":172,"previous":"M16-GAP-01846","next":"M16-GAP-01848"},"M16-GAP-01848":{"line":1847,"offset":319903,"length":160,"previous":"M16-GAP-01847","next":"M16-GAP-01849"},"M16-GAP-01849":{"line":1848,"offset":320063,"length":166,"previous":"M16-GAP-01848","next":"M16-GAP-01850"},"M16-GAP-01850":{"line":1849,"offset":320229,"length":160,"previous":"M16-GAP-01849","next":"M16-GAP-01851"},"M16-GAP-01851":{"line":1850,"offset":320389,"length":162,"previous":"M16-GAP-01850","next":"M16-GAP-01852"},"M16-GAP-01852":{"line":1851,"offset":320551,"length":164,"previous":"M16-GAP-01851","next":"M16-GAP-01853"},"M16-GAP-01853":{"line":1852,"offset":320715,"length":165,"previous":"M16-GAP-01852","next":"M16-GAP-01854"},"M16-GAP-01854":{"line":1853,"offset":320880,"length":161,"previous":"M16-GAP-01853","next":"M16-GAP-01855"},"M16-GAP-01855":{"line":1854,"offset":321041,"length":171,"previous":"M16-GAP-01854","next":"M16-GAP-01856"},"M16-GAP-01856":{"line":1855,"offset":321212,"length":167,"previous":"M16-GAP-01855","next":"M16-GAP-01857"},"M16-GAP-01857":{"line":1856,"offset":321379,"length":174,"previous":"M16-GAP-01856","next":"M16-GAP-01858"},"M16-GAP-01858":{"line":1857,"offset":321553,"length":168,"previous":"M16-GAP-01857","next":"M16-GAP-01859"},"M16-GAP-01859":{"line":1858,"offset":321721,"length":165,"previous":"M16-GAP-01858","next":"M16-GAP-01860"},"M16-GAP-01860":{"line":1859,"offset":321886,"length":160,"previous":"M16-GAP-01859","next":"M16-GAP-01861"},"M16-GAP-01861":{"line":1860,"offset":322046,"length":172,"previous":"M16-GAP-01860","next":"M16-GAP-01862"},"M16-GAP-01862":{"line":1861,"offset":322218,"length":161,"previous":"M16-GAP-01861","next":"M16-GAP-01863"},"M16-GAP-01863":{"line":1862,"offset":322379,"length":162,"previous":"M16-GAP-01862","next":"M16-GAP-01864"},"M16-GAP-01864":{"line":1863,"offset":322541,"length":165,"previous":"M16-GAP-01863","next":"M16-GAP-01865"},"M16-GAP-01865":{"line":1864,"offset":322706,"length":173,"previous":"M16-GAP-01864","next":"M16-GAP-01866"},"M16-GAP-01866":{"line":1865,"offset":322879,"length":167,"previous":"M16-GAP-01865","next":"M16-GAP-01867"},"M16-GAP-01867":{"line":1866,"offset":323046,"length":166,"previous":"M16-GAP-01866","next":"M16-GAP-01868"},"M16-GAP-01868":{"line":1867,"offset":323212,"length":180,"previous":"M16-GAP-01867","next":"M16-GAP-01869"},"M16-GAP-01869":{"line":1868,"offset":323392,"length":170,"previous":"M16-GAP-01868","next":"M16-GAP-01870"},"M16-GAP-01870":{"line":1869,"offset":323562,"length":172,"previous":"M16-GAP-01869","next":"M16-GAP-01871"},"M16-GAP-01871":{"line":1870,"offset":323734,"length":169,"previous":"M16-GAP-01870","next":"M16-GAP-01872"},"M16-GAP-01872":{"line":1871,"offset":323903,"length":174,"previous":"M16-GAP-01871","next":"M16-GAP-01873"},"M16-GAP-01873":{"line":1872,"offset":324077,"length":169,"previous":"M16-GAP-01872","next":"M16-GAP-01874"},"M16-GAP-01874":{"line":1873,"offset":324246,"length":169,"previous":"M16-GAP-01873","next":"M16-GAP-01875"},"M16-GAP-01875":{"line":1874,"offset":324415,"length":173,"previous":"M16-GAP-01874","next":"M16-GAP-01876"},"M16-GAP-01876":{"line":1875,"offset":324588,"length":184,"previous":"M16-GAP-01875","next":"M16-GAP-01877"},"M16-GAP-01877":{"line":1876,"offset":324772,"length":176,"previous":"M16-GAP-01876","next":"M16-GAP-01878"},"M16-GAP-01878":{"line":1877,"offset":324948,"length":174,"previous":"M16-GAP-01877","next":"M16-GAP-01879"},"M16-GAP-01879":{"line":1878,"offset":325122,"length":180,"previous":"M16-GAP-01878","next":"M16-GAP-01880"},"M16-GAP-01880":{"line":1879,"offset":325302,"length":178,"previous":"M16-GAP-01879","next":"M16-GAP-01881"},"M16-GAP-01881":{"line":1880,"offset":325480,"length":174,"previous":"M16-GAP-01880","next":"M16-GAP-01882"},"M16-GAP-01882":{"line":1881,"offset":325654,"length":175,"previous":"M16-GAP-01881","next":"M16-GAP-01883"},"M16-GAP-01883":{"line":1882,"offset":325829,"length":176,"previous":"M16-GAP-01882","next":"M16-GAP-01884"},"M16-GAP-01884":{"line":1883,"offset":326005,"length":182,"previous":"M16-GAP-01883","next":"M16-GAP-01885"},"M16-GAP-01885":{"line":1884,"offset":326187,"length":176,"previous":"M16-GAP-01884","next":"M16-GAP-01886"},"M16-GAP-01886":{"line":1885,"offset":326363,"length":178,"previous":"M16-GAP-01885","next":"M16-GAP-01887"},"M16-GAP-01887":{"line":1886,"offset":326541,"length":172,"previous":"M16-GAP-01886","next":"M16-GAP-01888"},"M16-GAP-01888":{"line":1887,"offset":326713,"length":177,"previous":"M16-GAP-01887","next":"M16-GAP-01889"},"M16-GAP-01889":{"line":1888,"offset":326890,"length":178,"previous":"M16-GAP-01888","next":"M16-GAP-01890"},"M16-GAP-01890":{"line":1889,"offset":327068,"length":175,"previous":"M16-GAP-01889","next":"M16-GAP-01891"},"M16-GAP-01891":{"line":1890,"offset":327243,"length":171,"previous":"M16-GAP-01890","next":"M16-GAP-01892"},"M16-GAP-01892":{"line":1891,"offset":327414,"length":171,"previous":"M16-GAP-01891","next":"M16-GAP-01893"},"M16-GAP-01893":{"line":1892,"offset":327585,"length":175,"previous":"M16-GAP-01892","next":"M16-GAP-01894"},"M16-GAP-01894":{"line":1893,"offset":327760,"length":172,"previous":"M16-GAP-01893","next":"M16-GAP-01895"},"M16-GAP-01895":{"line":1894,"offset":327932,"length":176,"previous":"M16-GAP-01894","next":"M16-GAP-01896"},"M16-GAP-01896":{"line":1895,"offset":328108,"length":170,"previous":"M16-GAP-01895","next":"M16-GAP-01897"},"M16-GAP-01897":{"line":1896,"offset":328278,"length":182,"previous":"M16-GAP-01896","next":"M16-GAP-01898"},"M16-GAP-01898":{"line":1897,"offset":328460,"length":182,"previous":"M16-GAP-01897","next":"M16-GAP-01899"},"M16-GAP-01899":{"line":1898,"offset":328642,"length":176,"previous":"M16-GAP-01898","next":"M16-GAP-01900"},"M16-GAP-01900":{"line":1899,"offset":328818,"length":175,"previous":"M16-GAP-01899","next":"M16-GAP-01901"},"M16-GAP-01901":{"line":1900,"offset":328993,"length":175,"previous":"M16-GAP-01900","next":"M16-GAP-01902"},"M16-GAP-01902":{"line":1901,"offset":329168,"length":176,"previous":"M16-GAP-01901","next":"M16-GAP-01903"},"M16-GAP-01903":{"line":1902,"offset":329344,"length":176,"previous":"M16-GAP-01902","next":"M16-GAP-01904"},"M16-GAP-01904":{"line":1903,"offset":329520,"length":175,"previous":"M16-GAP-01903","next":"M16-GAP-01905"},"M16-GAP-01905":{"line":1904,"offset":329695,"length":173,"previous":"M16-GAP-01904","next":"M16-GAP-01906"},"M16-GAP-01906":{"line":1905,"offset":329868,"length":183,"previous":"M16-GAP-01905","next":"M16-GAP-01907"},"M16-GAP-01907":{"line":1906,"offset":330051,"length":180,"previous":"M16-GAP-01906","next":"M16-GAP-01908"},"M16-GAP-01908":{"line":1907,"offset":330231,"length":183,"previous":"M16-GAP-01907","next":"M16-GAP-01909"},"M16-GAP-01909":{"line":1908,"offset":330414,"length":178,"previous":"M16-GAP-01908","next":"M16-GAP-01910"},"M16-GAP-01910":{"line":1909,"offset":330592,"length":180,"previous":"M16-GAP-01909","next":"M16-GAP-01911"},"M16-GAP-01911":{"line":1910,"offset":330772,"length":183,"previous":"M16-GAP-01910","next":"M16-GAP-01912"},"M16-GAP-01912":{"line":1911,"offset":330955,"length":175,"previous":"M16-GAP-01911","next":"M16-GAP-01913"},"M16-GAP-01913":{"line":1912,"offset":331130,"length":172,"previous":"M16-GAP-01912","next":"M16-GAP-01914"},"M16-GAP-01914":{"line":1913,"offset":331302,"length":181,"previous":"M16-GAP-01913","next":"M16-GAP-01915"},"M16-GAP-01915":{"line":1914,"offset":331483,"length":184,"previous":"M16-GAP-01914","next":"M16-GAP-01916"},"M16-GAP-01916":{"line":1915,"offset":331667,"length":181,"previous":"M16-GAP-01915","next":"M16-GAP-01917"},"M16-GAP-01917":{"line":1916,"offset":331848,"length":181,"previous":"M16-GAP-01916","next":"M16-GAP-01918"},"M16-GAP-01918":{"line":1917,"offset":332029,"length":179,"previous":"M16-GAP-01917","next":"M16-GAP-01919"},"M16-GAP-01919":{"line":1918,"offset":332208,"length":179,"previous":"M16-GAP-01918","next":"M16-GAP-01920"},"M16-GAP-01920":{"line":1919,"offset":332387,"length":179,"previous":"M16-GAP-01919","next":"M16-GAP-01921"},"M16-GAP-01921":{"line":1920,"offset":332566,"length":177,"previous":"M16-GAP-01920","next":"M16-GAP-01922"},"M16-GAP-01922":{"line":1921,"offset":332743,"length":174,"previous":"M16-GAP-01921","next":"M16-GAP-01923"},"M16-GAP-01923":{"line":1922,"offset":332917,"length":177,"previous":"M16-GAP-01922","next":"M16-GAP-01924"},"M16-GAP-01924":{"line":1923,"offset":333094,"length":178,"previous":"M16-GAP-01923","next":"M16-GAP-01925"},"M16-GAP-01925":{"line":1924,"offset":333272,"length":177,"previous":"M16-GAP-01924","next":"M16-GAP-01926"},"M16-GAP-01926":{"line":1925,"offset":333449,"length":182,"previous":"M16-GAP-01925","next":"M16-GAP-01927"},"M16-GAP-01927":{"line":1926,"offset":333631,"length":183,"previous":"M16-GAP-01926","next":"M16-GAP-01928"},"M16-GAP-01928":{"line":1927,"offset":333814,"length":186,"previous":"M16-GAP-01927","next":"M16-GAP-01929"},"M16-GAP-01929":{"line":1928,"offset":334000,"length":175,"previous":"M16-GAP-01928","next":"M16-GAP-01930"},"M16-GAP-01930":{"line":1929,"offset":334175,"length":188,"previous":"M16-GAP-01929","next":"M16-GAP-01931"},"M16-GAP-01931":{"line":1930,"offset":334363,"length":182,"previous":"M16-GAP-01930","next":"M16-GAP-01932"},"M16-GAP-01932":{"line":1931,"offset":334545,"length":178,"previous":"M16-GAP-01931","next":"M16-GAP-01933"},"M16-GAP-01933":{"line":1932,"offset":334723,"length":184,"previous":"M16-GAP-01932","next":"M16-GAP-01934"},"M16-GAP-01934":{"line":1933,"offset":334907,"length":176,"previous":"M16-GAP-01933","next":"M16-GAP-01935"},"M16-GAP-01935":{"line":1934,"offset":335083,"length":180,"previous":"M16-GAP-01934","next":"M16-GAP-01936"},"M16-GAP-01936":{"line":1935,"offset":335263,"length":162,"previous":"M16-GAP-01935","next":"M16-GAP-01937"},"M16-GAP-01937":{"line":1936,"offset":335425,"length":163,"previous":"M16-GAP-01936","next":"M16-GAP-01938"},"M16-GAP-01938":{"line":1937,"offset":335588,"length":167,"previous":"M16-GAP-01937","next":"M16-GAP-01939"},"M16-GAP-01939":{"line":1938,"offset":335755,"length":174,"previous":"M16-GAP-01938","next":"M16-GAP-01940"},"M16-GAP-01940":{"line":1939,"offset":335929,"length":168,"previous":"M16-GAP-01939","next":"M16-GAP-01941"},"M16-GAP-01941":{"line":1940,"offset":336097,"length":172,"previous":"M16-GAP-01940","next":"M16-GAP-01942"},"M16-GAP-01942":{"line":1941,"offset":336269,"length":165,"previous":"M16-GAP-01941","next":"M16-GAP-01943"},"M16-GAP-01943":{"line":1942,"offset":336434,"length":177,"previous":"M16-GAP-01942","next":"M16-GAP-01944"},"M16-GAP-01944":{"line":1943,"offset":336611,"length":199,"previous":"M16-GAP-01943","next":"M16-GAP-01945"},"M16-GAP-01945":{"line":1944,"offset":336810,"length":186,"previous":"M16-GAP-01944","next":"M16-GAP-01946"},"M16-GAP-01946":{"line":1945,"offset":336996,"length":187,"previous":"M16-GAP-01945","next":"M16-GAP-01947"},"M16-GAP-01947":{"line":1946,"offset":337183,"length":184,"previous":"M16-GAP-01946","next":"M16-GAP-01948"},"M16-GAP-01948":{"line":1947,"offset":337367,"length":193,"previous":"M16-GAP-01947","next":"M16-GAP-01949"},"M16-GAP-01949":{"line":1948,"offset":337560,"length":185,"previous":"M16-GAP-01948","next":"M16-GAP-01950"},"M16-GAP-01950":{"line":1949,"offset":337745,"length":180,"previous":"M16-GAP-01949","next":"M16-GAP-01951"},"M16-GAP-01951":{"line":1950,"offset":337925,"length":164,"previous":"M16-GAP-01950","next":"M16-GAP-01952"},"M16-GAP-01952":{"line":1951,"offset":338089,"length":176,"previous":"M16-GAP-01951","next":"M16-GAP-01953"},"M16-GAP-01953":{"line":1952,"offset":338265,"length":168,"previous":"M16-GAP-01952","next":"M16-GAP-01954"},"M16-GAP-01954":{"line":1953,"offset":338433,"length":164,"previous":"M16-GAP-01953","next":"M16-GAP-01955"},"M16-GAP-01955":{"line":1954,"offset":338597,"length":178,"previous":"M16-GAP-01954","next":"M16-GAP-01956"},"M16-GAP-01956":{"line":1955,"offset":338775,"length":173,"previous":"M16-GAP-01955","next":"M16-GAP-01957"},"M16-GAP-01957":{"line":1956,"offset":338948,"length":169,"previous":"M16-GAP-01956","next":"M16-GAP-01958"},"M16-GAP-01958":{"line":1957,"offset":339117,"length":167,"previous":"M16-GAP-01957","next":"M16-GAP-01959"},"M16-GAP-01959":{"line":1958,"offset":339284,"length":178,"previous":"M16-GAP-01958","next":"M16-GAP-01960"},"M16-GAP-01960":{"line":1959,"offset":339462,"length":168,"previous":"M16-GAP-01959","next":"M16-GAP-01961"},"M16-GAP-01961":{"line":1960,"offset":339630,"length":175,"previous":"M16-GAP-01960","next":"M16-GAP-01962"},"M16-GAP-01962":{"line":1961,"offset":339805,"length":178,"previous":"M16-GAP-01961","next":"M16-GAP-01963"},"M16-GAP-01963":{"line":1962,"offset":339983,"length":175,"previous":"M16-GAP-01962","next":"M16-GAP-01964"},"M16-GAP-01964":{"line":1963,"offset":340158,"length":171,"previous":"M16-GAP-01963","next":"M16-GAP-01965"},"M16-GAP-01965":{"line":1964,"offset":340329,"length":174,"previous":"M16-GAP-01964","next":"M16-GAP-01966"},"M16-GAP-01966":{"line":1965,"offset":340503,"length":181,"previous":"M16-GAP-01965","next":"M16-GAP-01967"},"M16-GAP-01967":{"line":1966,"offset":340684,"length":172,"previous":"M16-GAP-01966","next":"M16-GAP-01968"},"M16-GAP-01968":{"line":1967,"offset":340856,"length":175,"previous":"M16-GAP-01967","next":"M16-GAP-01969"},"M16-GAP-01969":{"line":1968,"offset":341031,"length":173,"previous":"M16-GAP-01968","next":"M16-GAP-01970"},"M16-GAP-01970":{"line":1969,"offset":341204,"length":170,"previous":"M16-GAP-01969","next":"M16-GAP-01971"},"M16-GAP-01971":{"line":1970,"offset":341374,"length":173,"previous":"M16-GAP-01970","next":"M16-GAP-01972"},"M16-GAP-01972":{"line":1971,"offset":341547,"length":163,"previous":"M16-GAP-01971","next":"M16-GAP-01973"},"M16-GAP-01973":{"line":1972,"offset":341710,"length":173,"previous":"M16-GAP-01972","next":"M16-GAP-01974"},"M16-GAP-01974":{"line":1973,"offset":341883,"length":195,"previous":"M16-GAP-01973","next":"M16-GAP-01975"},"M16-GAP-01975":{"line":1974,"offset":342078,"length":195,"previous":"M16-GAP-01974","next":"M16-GAP-01976"},"M16-GAP-01976":{"line":1975,"offset":342273,"length":185,"previous":"M16-GAP-01975","next":"M16-GAP-01977"},"M16-GAP-01977":{"line":1976,"offset":342458,"length":185,"previous":"M16-GAP-01976","next":"M16-GAP-01978"},"M16-GAP-01978":{"line":1977,"offset":342643,"length":190,"previous":"M16-GAP-01977","next":"M16-GAP-01979"},"M16-GAP-01979":{"line":1978,"offset":342833,"length":188,"previous":"M16-GAP-01978","next":"M16-GAP-01980"},"M16-GAP-01980":{"line":1979,"offset":343021,"length":178,"previous":"M16-GAP-01979","next":"M16-GAP-01981"},"M16-GAP-01981":{"line":1980,"offset":343199,"length":179,"previous":"M16-GAP-01980","next":"M16-GAP-01982"},"M16-GAP-01982":{"line":1981,"offset":343378,"length":179,"previous":"M16-GAP-01981","next":"M16-GAP-01983"},"M16-GAP-01983":{"line":1982,"offset":343557,"length":180,"previous":"M16-GAP-01982","next":"M16-GAP-01984"},"M16-GAP-01984":{"line":1983,"offset":343737,"length":181,"previous":"M16-GAP-01983","next":"M16-GAP-01985"},"M16-GAP-01985":{"line":1984,"offset":343918,"length":180,"previous":"M16-GAP-01984","next":"M16-GAP-01986"},"M16-GAP-01986":{"line":1985,"offset":344098,"length":180,"previous":"M16-GAP-01985","next":"M16-GAP-01987"},"M16-GAP-01987":{"line":1986,"offset":344278,"length":180,"previous":"M16-GAP-01986","next":"M16-GAP-01988"},"M16-GAP-01988":{"line":1987,"offset":344458,"length":182,"previous":"M16-GAP-01987","next":"M16-GAP-01989"},"M16-GAP-01989":{"line":1988,"offset":344640,"length":177,"previous":"M16-GAP-01988","next":"M16-GAP-01990"},"M16-GAP-01990":{"line":1989,"offset":344817,"length":178,"previous":"M16-GAP-01989","next":"M16-GAP-01991"},"M16-GAP-01991":{"line":1990,"offset":344995,"length":178,"previous":"M16-GAP-01990","next":"M16-GAP-01992"},"M16-GAP-01992":{"line":1991,"offset":345173,"length":180,"previous":"M16-GAP-01991","next":"M16-GAP-01993"},"M16-GAP-01993":{"line":1992,"offset":345353,"length":189,"previous":"M16-GAP-01992","next":"M16-GAP-01994"},"M16-GAP-01994":{"line":1993,"offset":345542,"length":189,"previous":"M16-GAP-01993","next":"M16-GAP-01995"},"M16-GAP-01995":{"line":1994,"offset":345731,"length":184,"previous":"M16-GAP-01994","next":"M16-GAP-01996"},"M16-GAP-01996":{"line":1995,"offset":345915,"length":181,"previous":"M16-GAP-01995","next":"M16-GAP-01997"},"M16-GAP-01997":{"line":1996,"offset":346096,"length":184,"previous":"M16-GAP-01996","next":"M16-GAP-01998"},"M16-GAP-01998":{"line":1997,"offset":346280,"length":160,"previous":"M16-GAP-01997","next":"M16-GAP-01999"},"M16-GAP-01999":{"line":1998,"offset":346440,"length":170,"previous":"M16-GAP-01998","next":"M16-GAP-02000"},"M16-GAP-02000":{"line":1999,"offset":346610,"length":176,"previous":"M16-GAP-01999","next":"M16-GAP-02001"},"M16-GAP-02001":{"line":2000,"offset":346786,"length":172,"previous":"M16-GAP-02000","next":"M16-GAP-02002"},"M16-GAP-02002":{"line":2001,"offset":346958,"length":175,"previous":"M16-GAP-02001","next":"M16-GAP-02003"},"M16-GAP-02003":{"line":2002,"offset":347133,"length":171,"previous":"M16-GAP-02002","next":"M16-GAP-02004"},"M16-GAP-02004":{"line":2003,"offset":347304,"length":175,"previous":"M16-GAP-02003","next":"M16-GAP-02005"},"M16-GAP-02005":{"line":2004,"offset":347479,"length":182,"previous":"M16-GAP-02004","next":"M16-GAP-02006"},"M16-GAP-02006":{"line":2005,"offset":347661,"length":188,"previous":"M16-GAP-02005","next":"M16-GAP-02007"},"M16-GAP-02007":{"line":2006,"offset":347849,"length":174,"previous":"M16-GAP-02006","next":"M16-GAP-02008"},"M16-GAP-02008":{"line":2007,"offset":348023,"length":178,"previous":"M16-GAP-02007","next":"M16-GAP-02009"},"M16-GAP-02009":{"line":2008,"offset":348201,"length":185,"previous":"M16-GAP-02008","next":"M16-GAP-02010"},"M16-GAP-02010":{"line":2009,"offset":348386,"length":193,"previous":"M16-GAP-02009","next":"M16-GAP-02011"},"M16-GAP-02011":{"line":2010,"offset":348579,"length":168,"previous":"M16-GAP-02010","next":"M16-GAP-02012"},"M16-GAP-02012":{"line":2011,"offset":348747,"length":174,"previous":"M16-GAP-02011","next":"M16-GAP-02013"},"M16-GAP-02013":{"line":2012,"offset":348921,"length":173,"previous":"M16-GAP-02012","next":"M16-GAP-02014"},"M16-GAP-02014":{"line":2013,"offset":349094,"length":172,"previous":"M16-GAP-02013","next":"M16-GAP-02015"},"M16-GAP-02015":{"line":2014,"offset":349266,"length":172,"previous":"M16-GAP-02014","next":"M16-GAP-02016"},"M16-GAP-02016":{"line":2015,"offset":349438,"length":168,"previous":"M16-GAP-02015","next":"M16-GAP-02017"},"M16-GAP-02017":{"line":2016,"offset":349606,"length":168,"previous":"M16-GAP-02016","next":"M16-GAP-02018"},"M16-GAP-02018":{"line":2017,"offset":349774,"length":167,"previous":"M16-GAP-02017","next":"M16-GAP-02019"},"M16-GAP-02019":{"line":2018,"offset":349941,"length":167,"previous":"M16-GAP-02018","next":"M16-GAP-02020"},"M16-GAP-02020":{"line":2019,"offset":350108,"length":170,"previous":"M16-GAP-02019","next":"M16-GAP-02021"},"M16-GAP-02021":{"line":2020,"offset":350278,"length":168,"previous":"M16-GAP-02020","next":"M16-GAP-02022"},"M16-GAP-02022":{"line":2021,"offset":350446,"length":167,"previous":"M16-GAP-02021","next":"M16-GAP-02023"},"M16-GAP-02023":{"line":2022,"offset":350613,"length":174,"previous":"M16-GAP-02022","next":"M16-GAP-02024"},"M16-GAP-02024":{"line":2023,"offset":350787,"length":164,"previous":"M16-GAP-02023","next":"M16-GAP-02025"},"M16-GAP-02025":{"line":2024,"offset":350951,"length":177,"previous":"M16-GAP-02024","next":"M16-GAP-02026"},"M16-GAP-02026":{"line":2025,"offset":351128,"length":168,"previous":"M16-GAP-02025","next":"M16-GAP-02027"},"M16-GAP-02027":{"line":2026,"offset":351296,"length":168,"previous":"M16-GAP-02026","next":"M16-GAP-02028"},"M16-GAP-02028":{"line":2027,"offset":351464,"length":170,"previous":"M16-GAP-02027","next":"M16-GAP-02029"},"M16-GAP-02029":{"line":2028,"offset":351634,"length":177,"previous":"M16-GAP-02028","next":"M16-GAP-02030"},"M16-GAP-02030":{"line":2029,"offset":351811,"length":171,"previous":"M16-GAP-02029","next":"M16-GAP-02031"},"M16-GAP-02031":{"line":2030,"offset":351982,"length":171,"previous":"M16-GAP-02030","next":"M16-GAP-02032"},"M16-GAP-02032":{"line":2031,"offset":352153,"length":169,"previous":"M16-GAP-02031","next":"M16-GAP-02033"},"M16-GAP-02033":{"line":2032,"offset":352322,"length":161,"previous":"M16-GAP-02032","next":"M16-GAP-02034"},"M16-GAP-02034":{"line":2033,"offset":352483,"length":171,"previous":"M16-GAP-02033","next":"M16-GAP-02035"},"M16-GAP-02035":{"line":2034,"offset":352654,"length":167,"previous":"M16-GAP-02034","next":"M16-GAP-02036"},"M16-GAP-02036":{"line":2035,"offset":352821,"length":170,"previous":"M16-GAP-02035","next":"M16-GAP-02037"},"M16-GAP-02037":{"line":2036,"offset":352991,"length":177,"previous":"M16-GAP-02036","next":"M16-GAP-02038"},"M16-GAP-02038":{"line":2037,"offset":353168,"length":169,"previous":"M16-GAP-02037","next":"M16-GAP-02039"},"M16-GAP-02039":{"line":2038,"offset":353337,"length":173,"previous":"M16-GAP-02038","next":"M16-GAP-02040"},"M16-GAP-02040":{"line":2039,"offset":353510,"length":170,"previous":"M16-GAP-02039","next":"M16-GAP-02041"},"M16-GAP-02041":{"line":2040,"offset":353680,"length":171,"previous":"M16-GAP-02040","next":"M16-GAP-02042"},"M16-GAP-02042":{"line":2041,"offset":353851,"length":172,"previous":"M16-GAP-02041","next":"M16-GAP-02043"},"M16-GAP-02043":{"line":2042,"offset":354023,"length":169,"previous":"M16-GAP-02042","next":"M16-GAP-02044"},"M16-GAP-02044":{"line":2043,"offset":354192,"length":174,"previous":"M16-GAP-02043","next":"M16-GAP-02045"},"M16-GAP-02045":{"line":2044,"offset":354366,"length":168,"previous":"M16-GAP-02044","next":"M16-GAP-02046"},"M16-GAP-02046":{"line":2045,"offset":354534,"length":168,"previous":"M16-GAP-02045","next":"M16-GAP-02047"},"M16-GAP-02047":{"line":2046,"offset":354702,"length":173,"previous":"M16-GAP-02046","next":"M16-GAP-02048"},"M16-GAP-02048":{"line":2047,"offset":354875,"length":177,"previous":"M16-GAP-02047","next":"M16-GAP-02049"},"M16-GAP-02049":{"line":2048,"offset":355052,"length":181,"previous":"M16-GAP-02048","next":"M16-GAP-02050"},"M16-GAP-02050":{"line":2049,"offset":355233,"length":175,"previous":"M16-GAP-02049","next":"M16-GAP-02051"},"M16-GAP-02051":{"line":2050,"offset":355408,"length":167,"previous":"M16-GAP-02050","next":"M16-GAP-02052"},"M16-GAP-02052":{"line":2051,"offset":355575,"length":171,"previous":"M16-GAP-02051","next":"M16-GAP-02053"},"M16-GAP-02053":{"line":2052,"offset":355746,"length":173,"previous":"M16-GAP-02052","next":"M16-GAP-02054"},"M16-GAP-02054":{"line":2053,"offset":355919,"length":172,"previous":"M16-GAP-02053","next":"M16-GAP-02055"},"M16-GAP-02055":{"line":2054,"offset":356091,"length":173,"previous":"M16-GAP-02054","next":"M16-GAP-02056"},"M16-GAP-02056":{"line":2055,"offset":356264,"length":164,"previous":"M16-GAP-02055","next":"M16-GAP-02057"},"M16-GAP-02057":{"line":2056,"offset":356428,"length":170,"previous":"M16-GAP-02056","next":"M16-GAP-02058"},"M16-GAP-02058":{"line":2057,"offset":356598,"length":170,"previous":"M16-GAP-02057","next":"M16-GAP-02059"},"M16-GAP-02059":{"line":2058,"offset":356768,"length":170,"previous":"M16-GAP-02058","next":"M16-GAP-02060"},"M16-GAP-02060":{"line":2059,"offset":356938,"length":175,"previous":"M16-GAP-02059","next":"M16-GAP-02061"},"M16-GAP-02061":{"line":2060,"offset":357113,"length":181,"previous":"M16-GAP-02060","next":"M16-GAP-02062"},"M16-GAP-02062":{"line":2061,"offset":357294,"length":182,"previous":"M16-GAP-02061","next":"M16-GAP-02063"},"M16-GAP-02063":{"line":2062,"offset":357476,"length":164,"previous":"M16-GAP-02062","next":"M16-GAP-02064"},"M16-GAP-02064":{"line":2063,"offset":357640,"length":178,"previous":"M16-GAP-02063","next":"M16-GAP-02065"},"M16-GAP-02065":{"line":2064,"offset":357818,"length":184,"previous":"M16-GAP-02064","next":"M16-GAP-02066"},"M16-GAP-02066":{"line":2065,"offset":358002,"length":171,"previous":"M16-GAP-02065","next":"M16-GAP-02067"},"M16-GAP-02067":{"line":2066,"offset":358173,"length":174,"previous":"M16-GAP-02066","next":"M16-GAP-02068"},"M16-GAP-02068":{"line":2067,"offset":358347,"length":180,"previous":"M16-GAP-02067","next":"M16-GAP-02069"},"M16-GAP-02069":{"line":2068,"offset":358527,"length":179,"previous":"M16-GAP-02068","next":"M16-GAP-02070"},"M16-GAP-02070":{"line":2069,"offset":358706,"length":183,"previous":"M16-GAP-02069","next":"M16-GAP-02071"},"M16-GAP-02071":{"line":2070,"offset":358889,"length":174,"previous":"M16-GAP-02070","next":"M16-GAP-02072"},"M16-GAP-02072":{"line":2071,"offset":359063,"length":172,"previous":"M16-GAP-02071","next":"M16-GAP-02073"},"M16-GAP-02073":{"line":2072,"offset":359235,"length":184,"previous":"M16-GAP-02072","next":"M16-GAP-02074"},"M16-GAP-02074":{"line":2073,"offset":359419,"length":171,"previous":"M16-GAP-02073","next":"M16-GAP-02075"},"M16-GAP-02075":{"line":2074,"offset":359590,"length":169,"previous":"M16-GAP-02074","next":"M16-GAP-02076"},"M16-GAP-02076":{"line":2075,"offset":359759,"length":176,"previous":"M16-GAP-02075","next":"M16-GAP-02077"},"M16-GAP-02077":{"line":2076,"offset":359935,"length":174,"previous":"M16-GAP-02076","next":"M16-GAP-02078"},"M16-GAP-02078":{"line":2077,"offset":360109,"length":167,"previous":"M16-GAP-02077","next":"M16-GAP-02079"},"M16-GAP-02079":{"line":2078,"offset":360276,"length":169,"previous":"M16-GAP-02078","next":"M16-GAP-02080"},"M16-GAP-02080":{"line":2079,"offset":360445,"length":166,"previous":"M16-GAP-02079","next":"M16-GAP-02081"},"M16-GAP-02081":{"line":2080,"offset":360611,"length":176,"previous":"M16-GAP-02080","next":"M16-GAP-02082"},"M16-GAP-02082":{"line":2081,"offset":360787,"length":174,"previous":"M16-GAP-02081","next":"M16-GAP-02083"},"M16-GAP-02083":{"line":2082,"offset":360961,"length":178,"previous":"M16-GAP-02082","next":"M16-GAP-02084"},"M16-GAP-02084":{"line":2083,"offset":361139,"length":176,"previous":"M16-GAP-02083","next":"M16-GAP-02085"},"M16-GAP-02085":{"line":2084,"offset":361315,"length":175,"previous":"M16-GAP-02084","next":"M16-GAP-02086"},"M16-GAP-02086":{"line":2085,"offset":361490,"length":177,"previous":"M16-GAP-02085","next":"M16-GAP-02087"},"M16-GAP-02087":{"line":2086,"offset":361667,"length":176,"previous":"M16-GAP-02086","next":"M16-GAP-02088"},"M16-GAP-02088":{"line":2087,"offset":361843,"length":168,"previous":"M16-GAP-02087","next":"M16-GAP-02089"},"M16-GAP-02089":{"line":2088,"offset":362011,"length":174,"previous":"M16-GAP-02088","next":"M16-GAP-02090"},"M16-GAP-02090":{"line":2089,"offset":362185,"length":176,"previous":"M16-GAP-02089","next":"M16-GAP-02091"},"M16-GAP-02091":{"line":2090,"offset":362361,"length":175,"previous":"M16-GAP-02090","next":"M16-GAP-02092"},"M16-GAP-02092":{"line":2091,"offset":362536,"length":179,"previous":"M16-GAP-02091","next":"M16-GAP-02093"},"M16-GAP-02093":{"line":2092,"offset":362715,"length":172,"previous":"M16-GAP-02092","next":"M16-GAP-02094"},"M16-GAP-02094":{"line":2093,"offset":362887,"length":173,"previous":"M16-GAP-02093","next":"M16-GAP-02095"},"M16-GAP-02095":{"line":2094,"offset":363060,"length":173,"previous":"M16-GAP-02094","next":"M16-GAP-02096"},"M16-GAP-02096":{"line":2095,"offset":363233,"length":177,"previous":"M16-GAP-02095","next":"M16-GAP-02097"},"M16-GAP-02097":{"line":2096,"offset":363410,"length":182,"previous":"M16-GAP-02096","next":"M16-GAP-02098"},"M16-GAP-02098":{"line":2097,"offset":363592,"length":176,"previous":"M16-GAP-02097","next":"M16-GAP-02099"},"M16-GAP-02099":{"line":2098,"offset":363768,"length":178,"previous":"M16-GAP-02098","next":"M16-GAP-02100"},"M16-GAP-02100":{"line":2099,"offset":363946,"length":193,"previous":"M16-GAP-02099","next":"M16-GAP-02101"},"M16-GAP-02101":{"line":2100,"offset":364139,"length":170,"previous":"M16-GAP-02100","next":"M16-GAP-02102"},"M16-GAP-02102":{"line":2101,"offset":364309,"length":179,"previous":"M16-GAP-02101","next":"M16-GAP-02103"},"M16-GAP-02103":{"line":2102,"offset":364488,"length":172,"previous":"M16-GAP-02102","next":"M16-GAP-02104"},"M16-GAP-02104":{"line":2103,"offset":364660,"length":173,"previous":"M16-GAP-02103","next":"M16-GAP-02105"},"M16-GAP-02105":{"line":2104,"offset":364833,"length":168,"previous":"M16-GAP-02104","next":"M16-GAP-02106"},"M16-GAP-02106":{"line":2105,"offset":365001,"length":165,"previous":"M16-GAP-02105","next":"M16-GAP-02107"},"M16-GAP-02107":{"line":2106,"offset":365166,"length":177,"previous":"M16-GAP-02106","next":"M16-GAP-02108"},"M16-GAP-02108":{"line":2107,"offset":365343,"length":171,"previous":"M16-GAP-02107","next":"M16-GAP-02109"},"M16-GAP-02109":{"line":2108,"offset":365514,"length":188,"previous":"M16-GAP-02108","next":"M16-GAP-02110"},"M16-GAP-02110":{"line":2109,"offset":365702,"length":167,"previous":"M16-GAP-02109","next":"M16-GAP-02111"},"M16-GAP-02111":{"line":2110,"offset":365869,"length":171,"previous":"M16-GAP-02110","next":"M16-GAP-02112"},"M16-GAP-02112":{"line":2111,"offset":366040,"length":170,"previous":"M16-GAP-02111","next":"M16-GAP-02113"},"M16-GAP-02113":{"line":2112,"offset":366210,"length":175,"previous":"M16-GAP-02112","next":"M16-GAP-02114"},"M16-GAP-02114":{"line":2113,"offset":366385,"length":182,"previous":"M16-GAP-02113","next":"M16-GAP-02115"},"M16-GAP-02115":{"line":2114,"offset":366567,"length":177,"previous":"M16-GAP-02114","next":"M16-GAP-02116"},"M16-GAP-02116":{"line":2115,"offset":366744,"length":175,"previous":"M16-GAP-02115","next":"M16-GAP-02117"},"M16-GAP-02117":{"line":2116,"offset":366919,"length":177,"previous":"M16-GAP-02116","next":"M16-GAP-02118"},"M16-GAP-02118":{"line":2117,"offset":367096,"length":170,"previous":"M16-GAP-02117","next":"M16-GAP-02119"},"M16-GAP-02119":{"line":2118,"offset":367266,"length":172,"previous":"M16-GAP-02118","next":"M16-GAP-02120"},"M16-GAP-02120":{"line":2119,"offset":367438,"length":171,"previous":"M16-GAP-02119","next":"M16-GAP-02121"},"M16-GAP-02121":{"line":2120,"offset":367609,"length":171,"previous":"M16-GAP-02120","next":"M16-GAP-02122"},"M16-GAP-02122":{"line":2121,"offset":367780,"length":176,"previous":"M16-GAP-02121","next":"M16-GAP-02123"},"M16-GAP-02123":{"line":2122,"offset":367956,"length":176,"previous":"M16-GAP-02122","next":"M16-GAP-02124"},"M16-GAP-02124":{"line":2123,"offset":368132,"length":165,"previous":"M16-GAP-02123","next":"M16-GAP-02125"},"M16-GAP-02125":{"line":2124,"offset":368297,"length":175,"previous":"M16-GAP-02124","next":"M16-GAP-02126"},"M16-GAP-02126":{"line":2125,"offset":368472,"length":170,"previous":"M16-GAP-02125","next":"M16-GAP-02127"},"M16-GAP-02127":{"line":2126,"offset":368642,"length":174,"previous":"M16-GAP-02126","next":"M16-GAP-02128"},"M16-GAP-02128":{"line":2127,"offset":368816,"length":172,"previous":"M16-GAP-02127","next":"M16-GAP-02129"},"M16-GAP-02129":{"line":2128,"offset":368988,"length":176,"previous":"M16-GAP-02128","next":"M16-GAP-02130"},"M16-GAP-02130":{"line":2129,"offset":369164,"length":180,"previous":"M16-GAP-02129","next":"M16-GAP-02131"},"M16-GAP-02131":{"line":2130,"offset":369344,"length":165,"previous":"M16-GAP-02130","next":"M16-GAP-02132"},"M16-GAP-02132":{"line":2131,"offset":369509,"length":173,"previous":"M16-GAP-02131","next":"M16-GAP-02133"},"M16-GAP-02133":{"line":2132,"offset":369682,"length":166,"previous":"M16-GAP-02132","next":"M16-GAP-02134"},"M16-GAP-02134":{"line":2133,"offset":369848,"length":183,"previous":"M16-GAP-02133","next":"M16-GAP-02135"},"M16-GAP-02135":{"line":2134,"offset":370031,"length":190,"previous":"M16-GAP-02134","next":"M16-GAP-02136"},"M16-GAP-02136":{"line":2135,"offset":370221,"length":176,"previous":"M16-GAP-02135","next":"M16-GAP-02137"},"M16-GAP-02137":{"line":2136,"offset":370397,"length":174,"previous":"M16-GAP-02136","next":"M16-GAP-02138"},"M16-GAP-02138":{"line":2137,"offset":370571,"length":172,"previous":"M16-GAP-02137","next":"M16-GAP-02139"},"M16-GAP-02139":{"line":2138,"offset":370743,"length":167,"previous":"M16-GAP-02138","next":"M16-GAP-02140"},"M16-GAP-02140":{"line":2139,"offset":370910,"length":175,"previous":"M16-GAP-02139","next":"M16-GAP-02141"},"M16-GAP-02141":{"line":2140,"offset":371085,"length":171,"previous":"M16-GAP-02140","next":"M16-GAP-02142"},"M16-GAP-02142":{"line":2141,"offset":371256,"length":192,"previous":"M16-GAP-02141","next":"M16-GAP-02143"},"M16-GAP-02143":{"line":2142,"offset":371448,"length":190,"previous":"M16-GAP-02142","next":"M16-GAP-02144"},"M16-GAP-02144":{"line":2143,"offset":371638,"length":186,"previous":"M16-GAP-02143","next":"M16-GAP-02145"},"M16-GAP-02145":{"line":2144,"offset":371824,"length":177,"previous":"M16-GAP-02144","next":"M16-GAP-02146"},"M16-GAP-02146":{"line":2145,"offset":372001,"length":180,"previous":"M16-GAP-02145","next":"M16-GAP-02147"},"M16-GAP-02147":{"line":2146,"offset":372181,"length":175,"previous":"M16-GAP-02146","next":"M16-GAP-02148"},"M16-GAP-02148":{"line":2147,"offset":372356,"length":187,"previous":"M16-GAP-02147","next":"M16-GAP-02149"},"M16-GAP-02149":{"line":2148,"offset":372543,"length":174,"previous":"M16-GAP-02148","next":"M16-GAP-02150"},"M16-GAP-02150":{"line":2149,"offset":372717,"length":184,"previous":"M16-GAP-02149","next":"M16-GAP-02151"},"M16-GAP-02151":{"line":2150,"offset":372901,"length":167,"previous":"M16-GAP-02150","next":"M16-GAP-02152"},"M16-GAP-02152":{"line":2151,"offset":373068,"length":185,"previous":"M16-GAP-02151","next":"M16-GAP-02153"},"M16-GAP-02153":{"line":2152,"offset":373253,"length":176,"previous":"M16-GAP-02152","next":"M16-GAP-02154"},"M16-GAP-02154":{"line":2153,"offset":373429,"length":180,"previous":"M16-GAP-02153","next":"M16-GAP-02155"},"M16-GAP-02155":{"line":2154,"offset":373609,"length":167,"previous":"M16-GAP-02154","next":"M16-GAP-02156"},"M16-GAP-02156":{"line":2155,"offset":373776,"length":171,"previous":"M16-GAP-02155","next":"M16-GAP-02157"},"M16-GAP-02157":{"line":2156,"offset":373947,"length":171,"previous":"M16-GAP-02156","next":"M16-GAP-02158"},"M16-GAP-02158":{"line":2157,"offset":374118,"length":174,"previous":"M16-GAP-02157","next":"M16-GAP-02159"},"M16-GAP-02159":{"line":2158,"offset":374292,"length":175,"previous":"M16-GAP-02158","next":"M16-GAP-02160"},"M16-GAP-02160":{"line":2159,"offset":374467,"length":174,"previous":"M16-GAP-02159","next":"M16-GAP-02161"},"M16-GAP-02161":{"line":2160,"offset":374641,"length":175,"previous":"M16-GAP-02160","next":"M16-GAP-02162"},"M16-GAP-02162":{"line":2161,"offset":374816,"length":173,"previous":"M16-GAP-02161","next":"M16-GAP-02163"},"M16-GAP-02163":{"line":2162,"offset":374989,"length":172,"previous":"M16-GAP-02162","next":"M16-GAP-02164"},"M16-GAP-02164":{"line":2163,"offset":375161,"length":174,"previous":"M16-GAP-02163","next":"M16-GAP-02165"},"M16-GAP-02165":{"line":2164,"offset":375335,"length":179,"previous":"M16-GAP-02164","next":"M16-GAP-02166"},"M16-GAP-02166":{"line":2165,"offset":375514,"length":172,"previous":"M16-GAP-02165","next":"M16-GAP-02167"},"M16-GAP-02167":{"line":2166,"offset":375686,"length":172,"previous":"M16-GAP-02166","next":"M16-GAP-02168"},"M16-GAP-02168":{"line":2167,"offset":375858,"length":181,"previous":"M16-GAP-02167","next":"M16-GAP-02169"},"M16-GAP-02169":{"line":2168,"offset":376039,"length":180,"previous":"M16-GAP-02168","next":"M16-GAP-02170"},"M16-GAP-02170":{"line":2169,"offset":376219,"length":165,"previous":"M16-GAP-02169","next":"M16-GAP-02171"},"M16-GAP-02171":{"line":2170,"offset":376384,"length":165,"previous":"M16-GAP-02170","next":"M16-GAP-02172"},"M16-GAP-02172":{"line":2171,"offset":376549,"length":176,"previous":"M16-GAP-02171","next":"M16-GAP-02173"},"M16-GAP-02173":{"line":2172,"offset":376725,"length":166,"previous":"M16-GAP-02172","next":"M16-GAP-02174"},"M16-GAP-02174":{"line":2173,"offset":376891,"length":175,"previous":"M16-GAP-02173","next":"M16-GAP-02175"},"M16-GAP-02175":{"line":2174,"offset":377066,"length":180,"previous":"M16-GAP-02174","next":"M16-GAP-02176"},"M16-GAP-02176":{"line":2175,"offset":377246,"length":171,"previous":"M16-GAP-02175","next":"M16-GAP-02177"},"M16-GAP-02177":{"line":2176,"offset":377417,"length":179,"previous":"M16-GAP-02176","next":"M16-GAP-02178"},"M16-GAP-02178":{"line":2177,"offset":377596,"length":190,"previous":"M16-GAP-02177","next":"M16-GAP-02179"},"M16-GAP-02179":{"line":2178,"offset":377786,"length":180,"previous":"M16-GAP-02178","next":"M16-GAP-02180"},"M16-GAP-02180":{"line":2179,"offset":377966,"length":185,"previous":"M16-GAP-02179","next":"M16-GAP-02181"},"M16-GAP-02181":{"line":2180,"offset":378151,"length":194,"previous":"M16-GAP-02180","next":"M16-GAP-02182"},"M16-GAP-02182":{"line":2181,"offset":378345,"length":180,"previous":"M16-GAP-02181","next":"M16-GAP-02183"},"M16-GAP-02183":{"line":2182,"offset":378525,"length":189,"previous":"M16-GAP-02182","next":"M16-GAP-02184"},"M16-GAP-02184":{"line":2183,"offset":378714,"length":182,"previous":"M16-GAP-02183","next":"M16-GAP-02185"},"M16-GAP-02185":{"line":2184,"offset":378896,"length":186,"previous":"M16-GAP-02184","next":"M16-GAP-02186"},"M16-GAP-02186":{"line":2185,"offset":379082,"length":182,"previous":"M16-GAP-02185","next":"M16-GAP-02187"},"M16-GAP-02187":{"line":2186,"offset":379264,"length":180,"previous":"M16-GAP-02186","next":"M16-GAP-02188"},"M16-GAP-02188":{"line":2187,"offset":379444,"length":165,"previous":"M16-GAP-02187","next":"M16-GAP-02189"},"M16-GAP-02189":{"line":2188,"offset":379609,"length":170,"previous":"M16-GAP-02188","next":"M16-GAP-02190"},"M16-GAP-02190":{"line":2189,"offset":379779,"length":172,"previous":"M16-GAP-02189","next":"M16-GAP-02191"},"M16-GAP-02191":{"line":2190,"offset":379951,"length":177,"previous":"M16-GAP-02190","next":"M16-GAP-02192"},"M16-GAP-02192":{"line":2191,"offset":380128,"length":176,"previous":"M16-GAP-02191","next":"M16-GAP-02193"},"M16-GAP-02193":{"line":2192,"offset":380304,"length":172,"previous":"M16-GAP-02192","next":"M16-GAP-02194"},"M16-GAP-02194":{"line":2193,"offset":380476,"length":178,"previous":"M16-GAP-02193","next":"M16-GAP-02195"},"M16-GAP-02195":{"line":2194,"offset":380654,"length":175,"previous":"M16-GAP-02194","next":"M16-GAP-02196"},"M16-GAP-02196":{"line":2195,"offset":380829,"length":174,"previous":"M16-GAP-02195","next":"M16-GAP-02197"},"M16-GAP-02197":{"line":2196,"offset":381003,"length":182,"previous":"M16-GAP-02196","next":"M16-GAP-02198"},"M16-GAP-02198":{"line":2197,"offset":381185,"length":176,"previous":"M16-GAP-02197","next":"M16-GAP-02199"},"M16-GAP-02199":{"line":2198,"offset":381361,"length":172,"previous":"M16-GAP-02198","next":"M16-GAP-02200"},"M16-GAP-02200":{"line":2199,"offset":381533,"length":176,"previous":"M16-GAP-02199","next":"M16-GAP-02201"},"M16-GAP-02201":{"line":2200,"offset":381709,"length":176,"previous":"M16-GAP-02200","next":"M16-GAP-02202"},"M16-GAP-02202":{"line":2201,"offset":381885,"length":188,"previous":"M16-GAP-02201","next":"M16-GAP-02203"},"M16-GAP-02203":{"line":2202,"offset":382073,"length":167,"previous":"M16-GAP-02202","next":"M16-GAP-02204"},"M16-GAP-02204":{"line":2203,"offset":382240,"length":167,"previous":"M16-GAP-02203","next":"M16-GAP-02205"},"M16-GAP-02205":{"line":2204,"offset":382407,"length":169,"previous":"M16-GAP-02204","next":"M16-GAP-02206"},"M16-GAP-02206":{"line":2205,"offset":382576,"length":177,"previous":"M16-GAP-02205","next":"M16-GAP-02207"},"M16-GAP-02207":{"line":2206,"offset":382753,"length":171,"previous":"M16-GAP-02206","next":"M16-GAP-02208"},"M16-GAP-02208":{"line":2207,"offset":382924,"length":178,"previous":"M16-GAP-02207","next":"M16-GAP-02209"},"M16-GAP-02209":{"line":2208,"offset":383102,"length":174,"previous":"M16-GAP-02208","next":"M16-GAP-02210"},"M16-GAP-02210":{"line":2209,"offset":383276,"length":176,"previous":"M16-GAP-02209","next":"M16-GAP-02211"},"M16-GAP-02211":{"line":2210,"offset":383452,"length":171,"previous":"M16-GAP-02210","next":"M16-GAP-02212"},"M16-GAP-02212":{"line":2211,"offset":383623,"length":164,"previous":"M16-GAP-02211","next":"M16-GAP-02213"},"M16-GAP-02213":{"line":2212,"offset":383787,"length":161,"previous":"M16-GAP-02212","next":"M16-GAP-02214"},"M16-GAP-02214":{"line":2213,"offset":383948,"length":166,"previous":"M16-GAP-02213","next":"M16-GAP-02215"},"M16-GAP-02215":{"line":2214,"offset":384114,"length":161,"previous":"M16-GAP-02214","next":"M16-GAP-02216"},"M16-GAP-02216":{"line":2215,"offset":384275,"length":163,"previous":"M16-GAP-02215","next":"M16-GAP-02217"},"M16-GAP-02217":{"line":2216,"offset":384438,"length":179,"previous":"M16-GAP-02216","next":"M16-GAP-02218"},"M16-GAP-02218":{"line":2217,"offset":384617,"length":182,"previous":"M16-GAP-02217","next":"M16-GAP-02219"},"M16-GAP-02219":{"line":2218,"offset":384799,"length":193,"previous":"M16-GAP-02218","next":"M16-GAP-02220"},"M16-GAP-02220":{"line":2219,"offset":384992,"length":173,"previous":"M16-GAP-02219","next":"M16-GAP-02221"},"M16-GAP-02221":{"line":2220,"offset":385165,"length":185,"previous":"M16-GAP-02220","next":"M16-GAP-02222"},"M16-GAP-02222":{"line":2221,"offset":385350,"length":178,"previous":"M16-GAP-02221","next":"M16-GAP-02223"},"M16-GAP-02223":{"line":2222,"offset":385528,"length":176,"previous":"M16-GAP-02222","next":"M16-GAP-02224"},"M16-GAP-02224":{"line":2223,"offset":385704,"length":173,"previous":"M16-GAP-02223","next":"M16-GAP-02225"},"M16-GAP-02225":{"line":2224,"offset":385877,"length":193,"previous":"M16-GAP-02224","next":"M16-GAP-02226"},"M16-GAP-02226":{"line":2225,"offset":386070,"length":192,"previous":"M16-GAP-02225","next":"M16-GAP-02227"},"M16-GAP-02227":{"line":2226,"offset":386262,"length":195,"previous":"M16-GAP-02226","next":"M16-GAP-02228"},"M16-GAP-02228":{"line":2227,"offset":386457,"length":193,"previous":"M16-GAP-02227","next":"M16-GAP-02229"},"M16-GAP-02229":{"line":2228,"offset":386650,"length":194,"previous":"M16-GAP-02228","next":"M16-GAP-02230"},"M16-GAP-02230":{"line":2229,"offset":386844,"length":192,"previous":"M16-GAP-02229","next":"M16-GAP-02231"},"M16-GAP-02231":{"line":2230,"offset":387036,"length":168,"previous":"M16-GAP-02230","next":"M16-GAP-02232"},"M16-GAP-02232":{"line":2231,"offset":387204,"length":170,"previous":"M16-GAP-02231","next":"M16-GAP-02233"},"M16-GAP-02233":{"line":2232,"offset":387374,"length":174,"previous":"M16-GAP-02232","next":"M16-GAP-02234"},"M16-GAP-02234":{"line":2233,"offset":387548,"length":160,"previous":"M16-GAP-02233","next":"M16-GAP-02235"},"M16-GAP-02235":{"line":2234,"offset":387708,"length":166,"previous":"M16-GAP-02234","next":"M16-GAP-02236"},"M16-GAP-02236":{"line":2235,"offset":387874,"length":159,"previous":"M16-GAP-02235","next":"M16-GAP-02237"},"M16-GAP-02237":{"line":2236,"offset":388033,"length":162,"previous":"M16-GAP-02236","next":"M16-GAP-02238"},"M16-GAP-02238":{"line":2237,"offset":388195,"length":170,"previous":"M16-GAP-02237","next":"M16-GAP-02239"},"M16-GAP-02239":{"line":2238,"offset":388365,"length":160,"previous":"M16-GAP-02238","next":"M16-GAP-02240"},"M16-GAP-02240":{"line":2239,"offset":388525,"length":173,"previous":"M16-GAP-02239","next":"M16-GAP-02241"},"M16-GAP-02241":{"line":2240,"offset":388698,"length":162,"previous":"M16-GAP-02240","next":"M16-GAP-02242"},"M16-GAP-02242":{"line":2241,"offset":388860,"length":178,"previous":"M16-GAP-02241","next":"M16-GAP-02243"},"M16-GAP-02243":{"line":2242,"offset":389038,"length":162,"previous":"M16-GAP-02242","next":"M16-GAP-02244"},"M16-GAP-02244":{"line":2243,"offset":389200,"length":160,"previous":"M16-GAP-02243","next":"M16-GAP-02245"},"M16-GAP-02245":{"line":2244,"offset":389360,"length":177,"previous":"M16-GAP-02244","next":"M16-GAP-02246"},"M16-GAP-02246":{"line":2245,"offset":389537,"length":166,"previous":"M16-GAP-02245","next":"M16-GAP-02247"},"M16-GAP-02247":{"line":2246,"offset":389703,"length":167,"previous":"M16-GAP-02246","next":"M16-GAP-02248"},"M16-GAP-02248":{"line":2247,"offset":389870,"length":169,"previous":"M16-GAP-02247","next":"M16-GAP-02249"},"M16-GAP-02249":{"line":2248,"offset":390039,"length":160,"previous":"M16-GAP-02248","next":"M16-GAP-02250"},"M16-GAP-02250":{"line":2249,"offset":390199,"length":166,"previous":"M16-GAP-02249","next":"M16-GAP-02251"},"M16-GAP-02251":{"line":2250,"offset":390365,"length":167,"previous":"M16-GAP-02250","next":"M16-GAP-02252"},"M16-GAP-02252":{"line":2251,"offset":390532,"length":159,"previous":"M16-GAP-02251","next":"M16-GAP-02253"},"M16-GAP-02253":{"line":2252,"offset":390691,"length":160,"previous":"M16-GAP-02252","next":"M16-GAP-02254"},"M16-GAP-02254":{"line":2253,"offset":390851,"length":172,"previous":"M16-GAP-02253","next":"M16-GAP-02255"},"M16-GAP-02255":{"line":2254,"offset":391023,"length":161,"previous":"M16-GAP-02254","next":"M16-GAP-02256"},"M16-GAP-02256":{"line":2255,"offset":391184,"length":162,"previous":"M16-GAP-02255","next":"M16-GAP-02257"},"M16-GAP-02257":{"line":2256,"offset":391346,"length":163,"previous":"M16-GAP-02256","next":"M16-GAP-02258"},"M16-GAP-02258":{"line":2257,"offset":391509,"length":176,"previous":"M16-GAP-02257","next":"M16-GAP-02259"},"M16-GAP-02259":{"line":2258,"offset":391685,"length":172,"previous":"M16-GAP-02258","next":"M16-GAP-02260"},"M16-GAP-02260":{"line":2259,"offset":391857,"length":166,"previous":"M16-GAP-02259","next":"M16-GAP-02261"},"M16-GAP-02261":{"line":2260,"offset":392023,"length":160,"previous":"M16-GAP-02260","next":"M16-GAP-02262"},"M16-GAP-02262":{"line":2261,"offset":392183,"length":163,"previous":"M16-GAP-02261","next":"M16-GAP-02263"},"M16-GAP-02263":{"line":2262,"offset":392346,"length":162,"previous":"M16-GAP-02262","next":"M16-GAP-02264"},"M16-GAP-02264":{"line":2263,"offset":392508,"length":166,"previous":"M16-GAP-02263","next":"M16-GAP-02265"},"M16-GAP-02265":{"line":2264,"offset":392674,"length":166,"previous":"M16-GAP-02264","next":"M16-GAP-02266"},"M16-GAP-02266":{"line":2265,"offset":392840,"length":167,"previous":"M16-GAP-02265","next":"M16-GAP-02267"},"M16-GAP-02267":{"line":2266,"offset":393007,"length":167,"previous":"M16-GAP-02266","next":"M16-GAP-02268"},"M16-GAP-02268":{"line":2267,"offset":393174,"length":169,"previous":"M16-GAP-02267","next":"M16-GAP-02269"},"M16-GAP-02269":{"line":2268,"offset":393343,"length":166,"previous":"M16-GAP-02268","next":"M16-GAP-02270"},"M16-GAP-02270":{"line":2269,"offset":393509,"length":168,"previous":"M16-GAP-02269","next":"M16-GAP-02271"},"M16-GAP-02271":{"line":2270,"offset":393677,"length":164,"previous":"M16-GAP-02270","next":"M16-GAP-02272"},"M16-GAP-02272":{"line":2271,"offset":393841,"length":162,"previous":"M16-GAP-02271","next":"M16-GAP-02273"},"M16-GAP-02273":{"line":2272,"offset":394003,"length":169,"previous":"M16-GAP-02272","next":"M16-GAP-02274"},"M16-GAP-02274":{"line":2273,"offset":394172,"length":173,"previous":"M16-GAP-02273","next":"M16-GAP-02275"},"M16-GAP-02275":{"line":2274,"offset":394345,"length":162,"previous":"M16-GAP-02274","next":"M16-GAP-02276"},"M16-GAP-02276":{"line":2275,"offset":394507,"length":168,"previous":"M16-GAP-02275","next":"M16-GAP-02277"},"M16-GAP-02277":{"line":2276,"offset":394675,"length":168,"previous":"M16-GAP-02276","next":"M16-GAP-02278"},"M16-GAP-02278":{"line":2277,"offset":394843,"length":169,"previous":"M16-GAP-02277","next":"M16-GAP-02279"},"M16-GAP-02279":{"line":2278,"offset":395012,"length":173,"previous":"M16-GAP-02278","next":"M16-GAP-02280"},"M16-GAP-02280":{"line":2279,"offset":395185,"length":165,"previous":"M16-GAP-02279","next":"M16-GAP-02281"},"M16-GAP-02281":{"line":2280,"offset":395350,"length":179,"previous":"M16-GAP-02280","next":"M16-GAP-02282"},"M16-GAP-02282":{"line":2281,"offset":395529,"length":179,"previous":"M16-GAP-02281","next":"M16-GAP-02283"},"M16-GAP-02283":{"line":2282,"offset":395708,"length":177,"previous":"M16-GAP-02282","next":"M16-GAP-02284"},"M16-GAP-02284":{"line":2283,"offset":395885,"length":172,"previous":"M16-GAP-02283","next":"M16-GAP-02285"},"M16-GAP-02285":{"line":2284,"offset":396057,"length":171,"previous":"M16-GAP-02284","next":"M16-GAP-02286"},"M16-GAP-02286":{"line":2285,"offset":396228,"length":171,"previous":"M16-GAP-02285","next":"M16-GAP-02287"},"M16-GAP-02287":{"line":2286,"offset":396399,"length":167,"previous":"M16-GAP-02286","next":"M16-GAP-02288"},"M16-GAP-02288":{"line":2287,"offset":396566,"length":170,"previous":"M16-GAP-02287","next":"M16-GAP-02289"},"M16-GAP-02289":{"line":2288,"offset":396736,"length":167,"previous":"M16-GAP-02288","next":"M16-GAP-02290"},"M16-GAP-02290":{"line":2289,"offset":396903,"length":167,"previous":"M16-GAP-02289","next":"M16-GAP-02291"},"M16-GAP-02291":{"line":2290,"offset":397070,"length":174,"previous":"M16-GAP-02290","next":"M16-GAP-02292"},"M16-GAP-02292":{"line":2291,"offset":397244,"length":179,"previous":"M16-GAP-02291","next":"M16-GAP-02293"},"M16-GAP-02293":{"line":2292,"offset":397423,"length":170,"previous":"M16-GAP-02292","next":"M16-GAP-02294"},"M16-GAP-02294":{"line":2293,"offset":397593,"length":166,"previous":"M16-GAP-02293","next":"M16-GAP-02295"},"M16-GAP-02295":{"line":2294,"offset":397759,"length":174,"previous":"M16-GAP-02294","next":"M16-GAP-02296"},"M16-GAP-02296":{"line":2295,"offset":397933,"length":172,"previous":"M16-GAP-02295","next":"M16-GAP-02297"},"M16-GAP-02297":{"line":2296,"offset":398105,"length":165,"previous":"M16-GAP-02296","next":"M16-GAP-02298"},"M16-GAP-02298":{"line":2297,"offset":398270,"length":169,"previous":"M16-GAP-02297","next":"M16-GAP-02299"},"M16-GAP-02299":{"line":2298,"offset":398439,"length":170,"previous":"M16-GAP-02298","next":"M16-GAP-02300"},"M16-GAP-02300":{"line":2299,"offset":398609,"length":170,"previous":"M16-GAP-02299","next":"M16-GAP-02301"},"M16-GAP-02301":{"line":2300,"offset":398779,"length":170,"previous":"M16-GAP-02300","next":"M16-GAP-02302"},"M16-GAP-02302":{"line":2301,"offset":398949,"length":172,"previous":"M16-GAP-02301","next":"M16-GAP-02303"},"M16-GAP-02303":{"line":2302,"offset":399121,"length":171,"previous":"M16-GAP-02302","next":"M16-GAP-02304"},"M16-GAP-02304":{"line":2303,"offset":399292,"length":174,"previous":"M16-GAP-02303","next":"M16-GAP-02305"},"M16-GAP-02305":{"line":2304,"offset":399466,"length":172,"previous":"M16-GAP-02304","next":"M16-GAP-02306"},"M16-GAP-02306":{"line":2305,"offset":399638,"length":175,"previous":"M16-GAP-02305","next":"M16-GAP-02307"},"M16-GAP-02307":{"line":2306,"offset":399813,"length":168,"previous":"M16-GAP-02306","next":"M16-GAP-02308"},"M16-GAP-02308":{"line":2307,"offset":399981,"length":173,"previous":"M16-GAP-02307","next":"M16-GAP-02309"},"M16-GAP-02309":{"line":2308,"offset":400154,"length":175,"previous":"M16-GAP-02308","next":"M16-GAP-02310"},"M16-GAP-02310":{"line":2309,"offset":400329,"length":175,"previous":"M16-GAP-02309","next":"M16-GAP-02311"},"M16-GAP-02311":{"line":2310,"offset":400504,"length":184,"previous":"M16-GAP-02310","next":"M16-GAP-02312"},"M16-GAP-02312":{"line":2311,"offset":400688,"length":180,"previous":"M16-GAP-02311","next":"M16-GAP-02313"},"M16-GAP-02313":{"line":2312,"offset":400868,"length":177,"previous":"M16-GAP-02312","next":"M16-GAP-02314"},"M16-GAP-02314":{"line":2313,"offset":401045,"length":164,"previous":"M16-GAP-02313","next":"M16-GAP-02315"},"M16-GAP-02315":{"line":2314,"offset":401209,"length":167,"previous":"M16-GAP-02314","next":"M16-GAP-02316"},"M16-GAP-02316":{"line":2315,"offset":401376,"length":163,"previous":"M16-GAP-02315","next":"M16-GAP-02317"},"M16-GAP-02317":{"line":2316,"offset":401539,"length":164,"previous":"M16-GAP-02316","next":"M16-GAP-02318"},"M16-GAP-02318":{"line":2317,"offset":401703,"length":169,"previous":"M16-GAP-02317","next":"M16-GAP-02319"},"M16-GAP-02319":{"line":2318,"offset":401872,"length":170,"previous":"M16-GAP-02318","next":"M16-GAP-02320"},"M16-GAP-02320":{"line":2319,"offset":402042,"length":174,"previous":"M16-GAP-02319","next":"M16-GAP-02321"},"M16-GAP-02321":{"line":2320,"offset":402216,"length":180,"previous":"M16-GAP-02320","next":"M16-GAP-02322"},"M16-GAP-02322":{"line":2321,"offset":402396,"length":170,"previous":"M16-GAP-02321","next":"M16-GAP-02323"},"M16-GAP-02323":{"line":2322,"offset":402566,"length":171,"previous":"M16-GAP-02322","next":"M16-GAP-02324"},"M16-GAP-02324":{"line":2323,"offset":402737,"length":184,"previous":"M16-GAP-02323","next":"M16-GAP-02325"},"M16-GAP-02325":{"line":2324,"offset":402921,"length":167,"previous":"M16-GAP-02324","next":"M16-GAP-02326"},"M16-GAP-02326":{"line":2325,"offset":403088,"length":175,"previous":"M16-GAP-02325","next":"M16-GAP-02327"},"M16-GAP-02327":{"line":2326,"offset":403263,"length":171,"previous":"M16-GAP-02326","next":"M16-GAP-02328"},"M16-GAP-02328":{"line":2327,"offset":403434,"length":173,"previous":"M16-GAP-02327","next":"M16-GAP-02329"},"M16-GAP-02329":{"line":2328,"offset":403607,"length":179,"previous":"M16-GAP-02328","next":"M16-GAP-02330"},"M16-GAP-02330":{"line":2329,"offset":403786,"length":178,"previous":"M16-GAP-02329","next":"M16-GAP-02331"},"M16-GAP-02331":{"line":2330,"offset":403964,"length":179,"previous":"M16-GAP-02330","next":"M16-GAP-02332"},"M16-GAP-02332":{"line":2331,"offset":404143,"length":176,"previous":"M16-GAP-02331","next":"M16-GAP-02333"},"M16-GAP-02333":{"line":2332,"offset":404319,"length":171,"previous":"M16-GAP-02332","next":"M16-GAP-02334"},"M16-GAP-02334":{"line":2333,"offset":404490,"length":174,"previous":"M16-GAP-02333","next":"M16-GAP-02335"},"M16-GAP-02335":{"line":2334,"offset":404664,"length":175,"previous":"M16-GAP-02334","next":"M16-GAP-02336"},"M16-GAP-02336":{"line":2335,"offset":404839,"length":163,"previous":"M16-GAP-02335","next":"M16-GAP-02337"},"M16-GAP-02337":{"line":2336,"offset":405002,"length":170,"previous":"M16-GAP-02336","next":"M16-GAP-02338"},"M16-GAP-02338":{"line":2337,"offset":405172,"length":169,"previous":"M16-GAP-02337","next":"M16-GAP-02339"},"M16-GAP-02339":{"line":2338,"offset":405341,"length":172,"previous":"M16-GAP-02338","next":"M16-GAP-02340"},"M16-GAP-02340":{"line":2339,"offset":405513,"length":170,"previous":"M16-GAP-02339","next":"M16-GAP-02341"},"M16-GAP-02341":{"line":2340,"offset":405683,"length":170,"previous":"M16-GAP-02340","next":"M16-GAP-02342"},"M16-GAP-02342":{"line":2341,"offset":405853,"length":165,"previous":"M16-GAP-02341","next":"M16-GAP-02343"},"M16-GAP-02343":{"line":2342,"offset":406018,"length":171,"previous":"M16-GAP-02342","next":"M16-GAP-02344"},"M16-GAP-02344":{"line":2343,"offset":406189,"length":167,"previous":"M16-GAP-02343","next":"M16-GAP-02345"},"M16-GAP-02345":{"line":2344,"offset":406356,"length":168,"previous":"M16-GAP-02344","next":"M16-GAP-02346"},"M16-GAP-02346":{"line":2345,"offset":406524,"length":170,"previous":"M16-GAP-02345","next":"M16-GAP-02347"},"M16-GAP-02347":{"line":2346,"offset":406694,"length":159,"previous":"M16-GAP-02346","next":"M16-GAP-02348"},"M16-GAP-02348":{"line":2347,"offset":406853,"length":168,"previous":"M16-GAP-02347","next":"M16-GAP-02349"},"M16-GAP-02349":{"line":2348,"offset":407021,"length":169,"previous":"M16-GAP-02348","next":"M16-GAP-02350"},"M16-GAP-02350":{"line":2349,"offset":407190,"length":175,"previous":"M16-GAP-02349","next":"M16-GAP-02351"},"M16-GAP-02351":{"line":2350,"offset":407365,"length":158,"previous":"M16-GAP-02350","next":"M16-GAP-02352"},"M16-GAP-02352":{"line":2351,"offset":407523,"length":173,"previous":"M16-GAP-02351","next":"M16-GAP-02353"},"M16-GAP-02353":{"line":2352,"offset":407696,"length":166,"previous":"M16-GAP-02352","next":"M16-GAP-02354"},"M16-GAP-02354":{"line":2353,"offset":407862,"length":164,"previous":"M16-GAP-02353","next":"M16-GAP-02355"},"M16-GAP-02355":{"line":2354,"offset":408026,"length":171,"previous":"M16-GAP-02354","next":"M16-GAP-02356"},"M16-GAP-02356":{"line":2355,"offset":408197,"length":170,"previous":"M16-GAP-02355","next":"M16-GAP-02357"},"M16-GAP-02357":{"line":2356,"offset":408367,"length":167,"previous":"M16-GAP-02356","next":"M16-GAP-02358"},"M16-GAP-02358":{"line":2357,"offset":408534,"length":173,"previous":"M16-GAP-02357","next":"M16-GAP-02359"},"M16-GAP-02359":{"line":2358,"offset":408707,"length":158,"previous":"M16-GAP-02358","next":"M16-GAP-02360"},"M16-GAP-02360":{"line":2359,"offset":408865,"length":167,"previous":"M16-GAP-02359","next":"M16-GAP-02361"},"M16-GAP-02361":{"line":2360,"offset":409032,"length":163,"previous":"M16-GAP-02360","next":"M16-GAP-02362"},"M16-GAP-02362":{"line":2361,"offset":409195,"length":170,"previous":"M16-GAP-02361","next":"M16-GAP-02363"},"M16-GAP-02363":{"line":2362,"offset":409365,"length":166,"previous":"M16-GAP-02362","next":"M16-GAP-02364"},"M16-GAP-02364":{"line":2363,"offset":409531,"length":166,"previous":"M16-GAP-02363","next":"M16-GAP-02365"},"M16-GAP-02365":{"line":2364,"offset":409697,"length":159,"previous":"M16-GAP-02364","next":"M16-GAP-02366"},"M16-GAP-02366":{"line":2365,"offset":409856,"length":157,"previous":"M16-GAP-02365","next":"M16-GAP-02367"},"M16-GAP-02367":{"line":2366,"offset":410013,"length":171,"previous":"M16-GAP-02366","next":"M16-GAP-02368"},"M16-GAP-02368":{"line":2367,"offset":410184,"length":176,"previous":"M16-GAP-02367","next":"M16-GAP-02369"},"M16-GAP-02369":{"line":2368,"offset":410360,"length":168,"previous":"M16-GAP-02368","next":"M16-GAP-02370"},"M16-GAP-02370":{"line":2369,"offset":410528,"length":159,"previous":"M16-GAP-02369","next":"M16-GAP-02371"},"M16-GAP-02371":{"line":2370,"offset":410687,"length":160,"previous":"M16-GAP-02370","next":"M16-GAP-02372"},"M16-GAP-02372":{"line":2371,"offset":410847,"length":157,"previous":"M16-GAP-02371","next":"M16-GAP-02373"},"M16-GAP-02373":{"line":2372,"offset":411004,"length":162,"previous":"M16-GAP-02372","next":"M16-GAP-02374"},"M16-GAP-02374":{"line":2373,"offset":411166,"length":172,"previous":"M16-GAP-02373","next":"M16-GAP-02375"},"M16-GAP-02375":{"line":2374,"offset":411338,"length":160,"previous":"M16-GAP-02374","next":"M16-GAP-02376"},"M16-GAP-02376":{"line":2375,"offset":411498,"length":164,"previous":"M16-GAP-02375","next":"M16-GAP-02377"},"M16-GAP-02377":{"line":2376,"offset":411662,"length":164,"previous":"M16-GAP-02376","next":"M16-GAP-02378"},"M16-GAP-02378":{"line":2377,"offset":411826,"length":171,"previous":"M16-GAP-02377","next":"M16-GAP-02379"},"M16-GAP-02379":{"line":2378,"offset":411997,"length":167,"previous":"M16-GAP-02378","next":"M16-GAP-02380"},"M16-GAP-02380":{"line":2379,"offset":412164,"length":170,"previous":"M16-GAP-02379","next":"M16-GAP-02381"},"M16-GAP-02381":{"line":2380,"offset":412334,"length":166,"previous":"M16-GAP-02380","next":"M16-GAP-02382"},"M16-GAP-02382":{"line":2381,"offset":412500,"length":165,"previous":"M16-GAP-02381","next":"M16-GAP-02383"},"M16-GAP-02383":{"line":2382,"offset":412665,"length":167,"previous":"M16-GAP-02382","next":"M16-GAP-02384"},"M16-GAP-02384":{"line":2383,"offset":412832,"length":172,"previous":"M16-GAP-02383","next":"M16-GAP-02385"},"M16-GAP-02385":{"line":2384,"offset":413004,"length":165,"previous":"M16-GAP-02384","next":"M16-GAP-02386"},"M16-GAP-02386":{"line":2385,"offset":413169,"length":165,"previous":"M16-GAP-02385","next":"M16-GAP-02387"},"M16-GAP-02387":{"line":2386,"offset":413334,"length":165,"previous":"M16-GAP-02386","next":"M16-GAP-02388"},"M16-GAP-02388":{"line":2387,"offset":413499,"length":168,"previous":"M16-GAP-02387","next":"M16-GAP-02389"},"M16-GAP-02389":{"line":2388,"offset":413667,"length":167,"previous":"M16-GAP-02388","next":"M16-GAP-02390"},"M16-GAP-02390":{"line":2389,"offset":413834,"length":168,"previous":"M16-GAP-02389","next":"M16-GAP-02391"},"M16-GAP-02391":{"line":2390,"offset":414002,"length":166,"previous":"M16-GAP-02390","next":"M16-GAP-02392"},"M16-GAP-02392":{"line":2391,"offset":414168,"length":165,"previous":"M16-GAP-02391","next":"M16-GAP-02393"},"M16-GAP-02393":{"line":2392,"offset":414333,"length":172,"previous":"M16-GAP-02392","next":"M16-GAP-02394"},"M16-GAP-02394":{"line":2393,"offset":414505,"length":174,"previous":"M16-GAP-02393","next":"M16-GAP-02395"},"M16-GAP-02395":{"line":2394,"offset":414679,"length":167,"previous":"M16-GAP-02394","next":"M16-GAP-02396"},"M16-GAP-02396":{"line":2395,"offset":414846,"length":165,"previous":"M16-GAP-02395","next":"M16-GAP-02397"},"M16-GAP-02397":{"line":2396,"offset":415011,"length":167,"previous":"M16-GAP-02396","next":"M16-GAP-02398"},"M16-GAP-02398":{"line":2397,"offset":415178,"length":168,"previous":"M16-GAP-02397","next":"M16-GAP-02399"},"M16-GAP-02399":{"line":2398,"offset":415346,"length":160,"previous":"M16-GAP-02398","next":"M16-GAP-02400"},"M16-GAP-02400":{"line":2399,"offset":415506,"length":160,"previous":"M16-GAP-02399","next":"M16-GAP-02401"},"M16-GAP-02401":{"line":2400,"offset":415666,"length":158,"previous":"M16-GAP-02400","next":"M16-GAP-02402"},"M16-GAP-02402":{"line":2401,"offset":415824,"length":166,"previous":"M16-GAP-02401","next":"M16-GAP-02403"},"M16-GAP-02403":{"line":2402,"offset":415990,"length":162,"previous":"M16-GAP-02402","next":"M16-GAP-02404"},"M16-GAP-02404":{"line":2403,"offset":416152,"length":161,"previous":"M16-GAP-02403","next":"M16-GAP-02405"},"M16-GAP-02405":{"line":2404,"offset":416313,"length":163,"previous":"M16-GAP-02404","next":"M16-GAP-02406"},"M16-GAP-02406":{"line":2405,"offset":416476,"length":169,"previous":"M16-GAP-02405","next":"M16-GAP-02407"},"M16-GAP-02407":{"line":2406,"offset":416645,"length":169,"previous":"M16-GAP-02406","next":"M16-GAP-02408"},"M16-GAP-02408":{"line":2407,"offset":416814,"length":170,"previous":"M16-GAP-02407","next":"M16-GAP-02409"},"M16-GAP-02409":{"line":2408,"offset":416984,"length":167,"previous":"M16-GAP-02408","next":"M16-GAP-02410"},"M16-GAP-02410":{"line":2409,"offset":417151,"length":175,"previous":"M16-GAP-02409","next":"M16-GAP-02411"},"M16-GAP-02411":{"line":2410,"offset":417326,"length":168,"previous":"M16-GAP-02410","next":"M16-GAP-02412"},"M16-GAP-02412":{"line":2411,"offset":417494,"length":162,"previous":"M16-GAP-02411","next":"M16-GAP-02413"},"M16-GAP-02413":{"line":2412,"offset":417656,"length":169,"previous":"M16-GAP-02412","next":"M16-GAP-02414"},"M16-GAP-02414":{"line":2413,"offset":417825,"length":165,"previous":"M16-GAP-02413","next":"M16-GAP-02415"},"M16-GAP-02415":{"line":2414,"offset":417990,"length":166,"previous":"M16-GAP-02414","next":"M16-GAP-02416"},"M16-GAP-02416":{"line":2415,"offset":418156,"length":174,"previous":"M16-GAP-02415","next":"M16-GAP-02417"},"M16-GAP-02417":{"line":2416,"offset":418330,"length":185,"previous":"M16-GAP-02416","next":"M16-GAP-02418"},"M16-GAP-02418":{"line":2417,"offset":418515,"length":188,"previous":"M16-GAP-02417","next":"M16-GAP-02419"},"M16-GAP-02419":{"line":2418,"offset":418703,"length":172,"previous":"M16-GAP-02418","next":"M16-GAP-02420"},"M16-GAP-02420":{"line":2419,"offset":418875,"length":181,"previous":"M16-GAP-02419","next":"M16-GAP-02421"},"M16-GAP-02421":{"line":2420,"offset":419056,"length":177,"previous":"M16-GAP-02420","next":"M16-GAP-02422"},"M16-GAP-02422":{"line":2421,"offset":419233,"length":169,"previous":"M16-GAP-02421","next":"M16-GAP-02423"},"M16-GAP-02423":{"line":2422,"offset":419402,"length":168,"previous":"M16-GAP-02422","next":"M16-GAP-02424"},"M16-GAP-02424":{"line":2423,"offset":419570,"length":166,"previous":"M16-GAP-02423","next":"M16-GAP-02425"},"M16-GAP-02425":{"line":2424,"offset":419736,"length":163,"previous":"M16-GAP-02424","next":"M16-GAP-02426"},"M16-GAP-02426":{"line":2425,"offset":419899,"length":168,"previous":"M16-GAP-02425","next":"M16-GAP-02427"},"M16-GAP-02427":{"line":2426,"offset":420067,"length":191,"previous":"M16-GAP-02426","next":"M16-GAP-02428"},"M16-GAP-02428":{"line":2427,"offset":420258,"length":191,"previous":"M16-GAP-02427","next":"M16-GAP-02429"},"M16-GAP-02429":{"line":2428,"offset":420449,"length":187,"previous":"M16-GAP-02428","next":"M16-GAP-02430"},"M16-GAP-02430":{"line":2429,"offset":420636,"length":194,"previous":"M16-GAP-02429","next":"M16-GAP-02431"},"M16-GAP-02431":{"line":2430,"offset":420830,"length":161,"previous":"M16-GAP-02430","next":"M16-GAP-02432"},"M16-GAP-02432":{"line":2431,"offset":420991,"length":173,"previous":"M16-GAP-02431","next":"M16-GAP-02433"},"M16-GAP-02433":{"line":2432,"offset":421164,"length":167,"previous":"M16-GAP-02432","next":"M16-GAP-02434"},"M16-GAP-02434":{"line":2433,"offset":421331,"length":179,"previous":"M16-GAP-02433","next":"M16-GAP-02435"},"M16-GAP-02435":{"line":2434,"offset":421510,"length":162,"previous":"M16-GAP-02434","next":"M16-GAP-02436"},"M16-GAP-02436":{"line":2435,"offset":421672,"length":166,"previous":"M16-GAP-02435","next":"M16-GAP-02437"},"M16-GAP-02437":{"line":2436,"offset":421838,"length":166,"previous":"M16-GAP-02436","next":"M16-GAP-02438"},"M16-GAP-02438":{"line":2437,"offset":422004,"length":168,"previous":"M16-GAP-02437","next":"M16-GAP-02439"},"M16-GAP-02439":{"line":2438,"offset":422172,"length":173,"previous":"M16-GAP-02438","next":"M16-GAP-02440"},"M16-GAP-02440":{"line":2439,"offset":422345,"length":166,"previous":"M16-GAP-02439","next":"M16-GAP-02441"},"M16-GAP-02441":{"line":2440,"offset":422511,"length":174,"previous":"M16-GAP-02440","next":"M16-GAP-02442"},"M16-GAP-02442":{"line":2441,"offset":422685,"length":183,"previous":"M16-GAP-02441","next":"M16-GAP-02443"},"M16-GAP-02443":{"line":2442,"offset":422868,"length":169,"previous":"M16-GAP-02442","next":"M16-GAP-02444"},"M16-GAP-02444":{"line":2443,"offset":423037,"length":171,"previous":"M16-GAP-02443","next":"M16-GAP-02445"},"M16-GAP-02445":{"line":2444,"offset":423208,"length":164,"previous":"M16-GAP-02444","next":"M16-GAP-02446"},"M16-GAP-02446":{"line":2445,"offset":423372,"length":167,"previous":"M16-GAP-02445","next":"M16-GAP-02447"},"M16-GAP-02447":{"line":2446,"offset":423539,"length":170,"previous":"M16-GAP-02446","next":"M16-GAP-02448"},"M16-GAP-02448":{"line":2447,"offset":423709,"length":164,"previous":"M16-GAP-02447","next":"M16-GAP-02449"},"M16-GAP-02449":{"line":2448,"offset":423873,"length":168,"previous":"M16-GAP-02448","next":"M16-GAP-02450"},"M16-GAP-02450":{"line":2449,"offset":424041,"length":171,"previous":"M16-GAP-02449","next":"M16-GAP-02451"},"M16-GAP-02451":{"line":2450,"offset":424212,"length":170,"previous":"M16-GAP-02450","next":"M16-GAP-02452"},"M16-GAP-02452":{"line":2451,"offset":424382,"length":169,"previous":"M16-GAP-02451","next":"M16-GAP-02453"},"M16-GAP-02453":{"line":2452,"offset":424551,"length":168,"previous":"M16-GAP-02452","next":"M16-GAP-02454"},"M16-GAP-02454":{"line":2453,"offset":424719,"length":179,"previous":"M16-GAP-02453","next":"M16-GAP-02455"},"M16-GAP-02455":{"line":2454,"offset":424898,"length":179,"previous":"M16-GAP-02454","next":"M16-GAP-02456"},"M16-GAP-02456":{"line":2455,"offset":425077,"length":177,"previous":"M16-GAP-02455","next":"M16-GAP-02457"},"M16-GAP-02457":{"line":2456,"offset":425254,"length":181,"previous":"M16-GAP-02456","next":"M16-GAP-02458"},"M16-GAP-02458":{"line":2457,"offset":425435,"length":181,"previous":"M16-GAP-02457","next":"M16-GAP-02459"},"M16-GAP-02459":{"line":2458,"offset":425616,"length":181,"previous":"M16-GAP-02458","next":"M16-GAP-02460"},"M16-GAP-02460":{"line":2459,"offset":425797,"length":179,"previous":"M16-GAP-02459","next":"M16-GAP-02461"},"M16-GAP-02461":{"line":2460,"offset":425976,"length":176,"previous":"M16-GAP-02460","next":"M16-GAP-02462"},"M16-GAP-02462":{"line":2461,"offset":426152,"length":172,"previous":"M16-GAP-02461","next":"M16-GAP-02463"},"M16-GAP-02463":{"line":2462,"offset":426324,"length":169,"previous":"M16-GAP-02462","next":"M16-GAP-02464"},"M16-GAP-02464":{"line":2463,"offset":426493,"length":177,"previous":"M16-GAP-02463","next":"M16-GAP-02465"},"M16-GAP-02465":{"line":2464,"offset":426670,"length":166,"previous":"M16-GAP-02464","next":"M16-GAP-02466"},"M16-GAP-02466":{"line":2465,"offset":426836,"length":167,"previous":"M16-GAP-02465","next":"M16-GAP-02467"},"M16-GAP-02467":{"line":2466,"offset":427003,"length":169,"previous":"M16-GAP-02466","next":"M16-GAP-02468"},"M16-GAP-02468":{"line":2467,"offset":427172,"length":176,"previous":"M16-GAP-02467","next":"M16-GAP-02469"},"M16-GAP-02469":{"line":2468,"offset":427348,"length":176,"previous":"M16-GAP-02468","next":"M16-GAP-02470"},"M16-GAP-02470":{"line":2469,"offset":427524,"length":174,"previous":"M16-GAP-02469","next":"M16-GAP-02471"},"M16-GAP-02471":{"line":2470,"offset":427698,"length":174,"previous":"M16-GAP-02470","next":"M16-GAP-02472"},"M16-GAP-02472":{"line":2471,"offset":427872,"length":173,"previous":"M16-GAP-02471","next":"M16-GAP-02473"},"M16-GAP-02473":{"line":2472,"offset":428045,"length":177,"previous":"M16-GAP-02472","next":"M16-GAP-02474"},"M16-GAP-02474":{"line":2473,"offset":428222,"length":168,"previous":"M16-GAP-02473","next":"M16-GAP-02475"},"M16-GAP-02475":{"line":2474,"offset":428390,"length":166,"previous":"M16-GAP-02474","next":"M16-GAP-02476"},"M16-GAP-02476":{"line":2475,"offset":428556,"length":173,"previous":"M16-GAP-02475","next":"M16-GAP-02477"},"M16-GAP-02477":{"line":2476,"offset":428729,"length":167,"previous":"M16-GAP-02476","next":"M16-GAP-02478"},"M16-GAP-02478":{"line":2477,"offset":428896,"length":171,"previous":"M16-GAP-02477","next":"M16-GAP-02479"},"M16-GAP-02479":{"line":2478,"offset":429067,"length":162,"previous":"M16-GAP-02478","next":"M16-GAP-02480"},"M16-GAP-02480":{"line":2479,"offset":429229,"length":162,"previous":"M16-GAP-02479","next":"M16-GAP-02481"},"M16-GAP-02481":{"line":2480,"offset":429391,"length":169,"previous":"M16-GAP-02480","next":"M16-GAP-02482"},"M16-GAP-02482":{"line":2481,"offset":429560,"length":176,"previous":"M16-GAP-02481","next":"M16-GAP-02483"},"M16-GAP-02483":{"line":2482,"offset":429736,"length":160,"previous":"M16-GAP-02482","next":"M16-GAP-02484"},"M16-GAP-02484":{"line":2483,"offset":429896,"length":166,"previous":"M16-GAP-02483","next":"M16-GAP-02485"},"M16-GAP-02485":{"line":2484,"offset":430062,"length":181,"previous":"M16-GAP-02484","next":"M16-GAP-02486"},"M16-GAP-02486":{"line":2485,"offset":430243,"length":178,"previous":"M16-GAP-02485","next":"M16-GAP-02487"},"M16-GAP-02487":{"line":2486,"offset":430421,"length":163,"previous":"M16-GAP-02486","next":"M16-GAP-02488"},"M16-GAP-02488":{"line":2487,"offset":430584,"length":167,"previous":"M16-GAP-02487","next":"M16-GAP-02489"},"M16-GAP-02489":{"line":2488,"offset":430751,"length":164,"previous":"M16-GAP-02488","next":"M16-GAP-02490"},"M16-GAP-02490":{"line":2489,"offset":430915,"length":172,"previous":"M16-GAP-02489","next":"M16-GAP-02491"},"M16-GAP-02491":{"line":2490,"offset":431087,"length":175,"previous":"M16-GAP-02490","next":"M16-GAP-02492"},"M16-GAP-02492":{"line":2491,"offset":431262,"length":184,"previous":"M16-GAP-02491","next":"M16-GAP-02493"},"M16-GAP-02493":{"line":2492,"offset":431446,"length":173,"previous":"M16-GAP-02492","next":"M16-GAP-02494"},"M16-GAP-02494":{"line":2493,"offset":431619,"length":172,"previous":"M16-GAP-02493","next":"M16-GAP-02495"},"M16-GAP-02495":{"line":2494,"offset":431791,"length":171,"previous":"M16-GAP-02494","next":"M16-GAP-02496"},"M16-GAP-02496":{"line":2495,"offset":431962,"length":171,"previous":"M16-GAP-02495","next":"M16-GAP-02497"},"M16-GAP-02497":{"line":2496,"offset":432133,"length":173,"previous":"M16-GAP-02496","next":"M16-GAP-02498"},"M16-GAP-02498":{"line":2497,"offset":432306,"length":170,"previous":"M16-GAP-02497","next":"M16-GAP-02499"},"M16-GAP-02499":{"line":2498,"offset":432476,"length":173,"previous":"M16-GAP-02498","next":"M16-GAP-02500"},"M16-GAP-02500":{"line":2499,"offset":432649,"length":171,"previous":"M16-GAP-02499","next":"M16-GAP-02501"},"M16-GAP-02501":{"line":2500,"offset":432820,"length":173,"previous":"M16-GAP-02500","next":"M16-GAP-02502"},"M16-GAP-02502":{"line":2501,"offset":432993,"length":170,"previous":"M16-GAP-02501","next":"M16-GAP-02503"},"M16-GAP-02503":{"line":2502,"offset":433163,"length":171,"previous":"M16-GAP-02502","next":"M16-GAP-02504"},"M16-GAP-02504":{"line":2503,"offset":433334,"length":168,"previous":"M16-GAP-02503","next":"M16-GAP-02505"},"M16-GAP-02505":{"line":2504,"offset":433502,"length":169,"previous":"M16-GAP-02504","next":"M16-GAP-02506"},"M16-GAP-02506":{"line":2505,"offset":433671,"length":172,"previous":"M16-GAP-02505","next":"M16-GAP-02507"},"M16-GAP-02507":{"line":2506,"offset":433843,"length":171,"previous":"M16-GAP-02506","next":"M16-GAP-02508"},"M16-GAP-02508":{"line":2507,"offset":434014,"length":168,"previous":"M16-GAP-02507","next":"M16-GAP-02509"},"M16-GAP-02509":{"line":2508,"offset":434182,"length":173,"previous":"M16-GAP-02508","next":"M16-GAP-02510"},"M16-GAP-02510":{"line":2509,"offset":434355,"length":164,"previous":"M16-GAP-02509","next":"M16-GAP-02511"},"M16-GAP-02511":{"line":2510,"offset":434519,"length":162,"previous":"M16-GAP-02510","next":"M16-GAP-02512"},"M16-GAP-02512":{"line":2511,"offset":434681,"length":169,"previous":"M16-GAP-02511","next":"M16-GAP-02513"},"M16-GAP-02513":{"line":2512,"offset":434850,"length":180,"previous":"M16-GAP-02512","next":"M16-GAP-02514"},"M16-GAP-02514":{"line":2513,"offset":435030,"length":169,"previous":"M16-GAP-02513","next":"M16-GAP-02515"},"M16-GAP-02515":{"line":2514,"offset":435199,"length":170,"previous":"M16-GAP-02514","next":"M16-GAP-02516"},"M16-GAP-02516":{"line":2515,"offset":435369,"length":164,"previous":"M16-GAP-02515","next":"M16-GAP-02517"},"M16-GAP-02517":{"line":2516,"offset":435533,"length":178,"previous":"M16-GAP-02516","next":"M16-GAP-02518"},"M16-GAP-02518":{"line":2517,"offset":435711,"length":178,"previous":"M16-GAP-02517","next":"M16-GAP-02519"},"M16-GAP-02519":{"line":2518,"offset":435889,"length":172,"previous":"M16-GAP-02518","next":"M16-GAP-02520"},"M16-GAP-02520":{"line":2519,"offset":436061,"length":180,"previous":"M16-GAP-02519","next":"M16-GAP-02521"},"M16-GAP-02521":{"line":2520,"offset":436241,"length":183,"previous":"M16-GAP-02520","next":"M16-GAP-02522"},"M16-GAP-02522":{"line":2521,"offset":436424,"length":181,"previous":"M16-GAP-02521","next":"M16-GAP-02523"},"M16-GAP-02523":{"line":2522,"offset":436605,"length":174,"previous":"M16-GAP-02522","next":"M16-GAP-02524"},"M16-GAP-02524":{"line":2523,"offset":436779,"length":177,"previous":"M16-GAP-02523","next":"M16-GAP-02525"},"M16-GAP-02525":{"line":2524,"offset":436956,"length":164,"previous":"M16-GAP-02524","next":"M16-GAP-02526"},"M16-GAP-02526":{"line":2525,"offset":437120,"length":166,"previous":"M16-GAP-02525","next":"M16-GAP-02527"},"M16-GAP-02527":{"line":2526,"offset":437286,"length":158,"previous":"M16-GAP-02526","next":"M16-GAP-02528"},"M16-GAP-02528":{"line":2527,"offset":437444,"length":171,"previous":"M16-GAP-02527","next":"M16-GAP-02529"},"M16-GAP-02529":{"line":2528,"offset":437615,"length":164,"previous":"M16-GAP-02528","next":"M16-GAP-02530"},"M16-GAP-02530":{"line":2529,"offset":437779,"length":164,"previous":"M16-GAP-02529","next":"M16-GAP-02531"},"M16-GAP-02531":{"line":2530,"offset":437943,"length":167,"previous":"M16-GAP-02530","next":"M16-GAP-02532"},"M16-GAP-02532":{"line":2531,"offset":438110,"length":174,"previous":"M16-GAP-02531","next":"M16-GAP-02533"},"M16-GAP-02533":{"line":2532,"offset":438284,"length":171,"previous":"M16-GAP-02532","next":"M16-GAP-02534"},"M16-GAP-02534":{"line":2533,"offset":438455,"length":171,"previous":"M16-GAP-02533","next":"M16-GAP-02535"},"M16-GAP-02535":{"line":2534,"offset":438626,"length":173,"previous":"M16-GAP-02534","next":"M16-GAP-02536"},"M16-GAP-02536":{"line":2535,"offset":438799,"length":178,"previous":"M16-GAP-02535","next":"M16-GAP-02537"},"M16-GAP-02537":{"line":2536,"offset":438977,"length":167,"previous":"M16-GAP-02536","next":"M16-GAP-02538"},"M16-GAP-02538":{"line":2537,"offset":439144,"length":166,"previous":"M16-GAP-02537","next":"M16-GAP-02539"},"M16-GAP-02539":{"line":2538,"offset":439310,"length":163,"previous":"M16-GAP-02538","next":"M16-GAP-02540"},"M16-GAP-02540":{"line":2539,"offset":439473,"length":164,"previous":"M16-GAP-02539","next":"M16-GAP-02541"},"M16-GAP-02541":{"line":2540,"offset":439637,"length":164,"previous":"M16-GAP-02540","next":"M16-GAP-02542"},"M16-GAP-02542":{"line":2541,"offset":439801,"length":174,"previous":"M16-GAP-02541","next":"M16-GAP-02543"},"M16-GAP-02543":{"line":2542,"offset":439975,"length":177,"previous":"M16-GAP-02542","next":"M16-GAP-02544"},"M16-GAP-02544":{"line":2543,"offset":440152,"length":168,"previous":"M16-GAP-02543","next":"M16-GAP-02545"},"M16-GAP-02545":{"line":2544,"offset":440320,"length":169,"previous":"M16-GAP-02544","next":"M16-GAP-02546"},"M16-GAP-02546":{"line":2545,"offset":440489,"length":168,"previous":"M16-GAP-02545","next":"M16-GAP-02547"},"M16-GAP-02547":{"line":2546,"offset":440657,"length":179,"previous":"M16-GAP-02546","next":"M16-GAP-02548"},"M16-GAP-02548":{"line":2547,"offset":440836,"length":169,"previous":"M16-GAP-02547","next":"M16-GAP-02549"},"M16-GAP-02549":{"line":2548,"offset":441005,"length":175,"previous":"M16-GAP-02548","next":"M16-GAP-02550"},"M16-GAP-02550":{"line":2549,"offset":441180,"length":171,"previous":"M16-GAP-02549","next":"M16-GAP-02551"},"M16-GAP-02551":{"line":2550,"offset":441351,"length":166,"previous":"M16-GAP-02550","next":"M16-GAP-02552"},"M16-GAP-02552":{"line":2551,"offset":441517,"length":168,"previous":"M16-GAP-02551","next":"M16-GAP-02553"},"M16-GAP-02553":{"line":2552,"offset":441685,"length":175,"previous":"M16-GAP-02552","next":"M16-GAP-02554"},"M16-GAP-02554":{"line":2553,"offset":441860,"length":175,"previous":"M16-GAP-02553","next":"M16-GAP-02555"},"M16-GAP-02555":{"line":2554,"offset":442035,"length":166,"previous":"M16-GAP-02554","next":"M16-GAP-02556"},"M16-GAP-02556":{"line":2555,"offset":442201,"length":167,"previous":"M16-GAP-02555","next":"M16-GAP-02557"},"M16-GAP-02557":{"line":2556,"offset":442368,"length":167,"previous":"M16-GAP-02556","next":"M16-GAP-02558"},"M16-GAP-02558":{"line":2557,"offset":442535,"length":171,"previous":"M16-GAP-02557","next":"M16-GAP-02559"},"M16-GAP-02559":{"line":2558,"offset":442706,"length":174,"previous":"M16-GAP-02558","next":"M16-GAP-02560"},"M16-GAP-02560":{"line":2559,"offset":442880,"length":166,"previous":"M16-GAP-02559","next":"M16-GAP-02561"},"M16-GAP-02561":{"line":2560,"offset":443046,"length":169,"previous":"M16-GAP-02560","next":"M16-GAP-02562"},"M16-GAP-02562":{"line":2561,"offset":443215,"length":170,"previous":"M16-GAP-02561","next":"M16-GAP-02563"},"M16-GAP-02563":{"line":2562,"offset":443385,"length":168,"previous":"M16-GAP-02562","next":"M16-GAP-02564"},"M16-GAP-02564":{"line":2563,"offset":443553,"length":167,"previous":"M16-GAP-02563","next":"M16-GAP-02565"},"M16-GAP-02565":{"line":2564,"offset":443720,"length":167,"previous":"M16-GAP-02564","next":"M16-GAP-02566"},"M16-GAP-02566":{"line":2565,"offset":443887,"length":167,"previous":"M16-GAP-02565","next":"M16-GAP-02567"},"M16-GAP-02567":{"line":2566,"offset":444054,"length":165,"previous":"M16-GAP-02566","next":"M16-GAP-02568"},"M16-GAP-02568":{"line":2567,"offset":444219,"length":169,"previous":"M16-GAP-02567","next":"M16-GAP-02569"},"M16-GAP-02569":{"line":2568,"offset":444388,"length":172,"previous":"M16-GAP-02568","next":"M16-GAP-02570"},"M16-GAP-02570":{"line":2569,"offset":444560,"length":167,"previous":"M16-GAP-02569","next":"M16-GAP-02571"},"M16-GAP-02571":{"line":2570,"offset":444727,"length":177,"previous":"M16-GAP-02570","next":"M16-GAP-02572"},"M16-GAP-02572":{"line":2571,"offset":444904,"length":160,"previous":"M16-GAP-02571","next":"M16-GAP-02573"},"M16-GAP-02573":{"line":2572,"offset":445064,"length":166,"previous":"M16-GAP-02572","next":"M16-GAP-02574"},"M16-GAP-02574":{"line":2573,"offset":445230,"length":164,"previous":"M16-GAP-02573","next":"M16-GAP-02575"},"M16-GAP-02575":{"line":2574,"offset":445394,"length":164,"previous":"M16-GAP-02574","next":"M16-GAP-02576"},"M16-GAP-02576":{"line":2575,"offset":445558,"length":161,"previous":"M16-GAP-02575","next":"M16-GAP-02577"},"M16-GAP-02577":{"line":2576,"offset":445719,"length":176,"previous":"M16-GAP-02576","next":"M16-GAP-02578"},"M16-GAP-02578":{"line":2577,"offset":445895,"length":168,"previous":"M16-GAP-02577","next":"M16-GAP-02579"},"M16-GAP-02579":{"line":2578,"offset":446063,"length":171,"previous":"M16-GAP-02578","next":"M16-GAP-02580"},"M16-GAP-02580":{"line":2579,"offset":446234,"length":161,"previous":"M16-GAP-02579","next":"M16-GAP-02581"},"M16-GAP-02581":{"line":2580,"offset":446395,"length":174,"previous":"M16-GAP-02580","next":"M16-GAP-02582"},"M16-GAP-02582":{"line":2581,"offset":446569,"length":168,"previous":"M16-GAP-02581","next":"M16-GAP-02583"},"M16-GAP-02583":{"line":2582,"offset":446737,"length":162,"previous":"M16-GAP-02582","next":"M16-GAP-02584"},"M16-GAP-02584":{"line":2583,"offset":446899,"length":169,"previous":"M16-GAP-02583","next":"M16-GAP-02585"},"M16-GAP-02585":{"line":2584,"offset":447068,"length":166,"previous":"M16-GAP-02584","next":"M16-GAP-02586"},"M16-GAP-02586":{"line":2585,"offset":447234,"length":178,"previous":"M16-GAP-02585","next":"M16-GAP-02587"},"M16-GAP-02587":{"line":2586,"offset":447412,"length":164,"previous":"M16-GAP-02586","next":"M16-GAP-02588"},"M16-GAP-02588":{"line":2587,"offset":447576,"length":169,"previous":"M16-GAP-02587","next":"M16-GAP-02589"},"M16-GAP-02589":{"line":2588,"offset":447745,"length":164,"previous":"M16-GAP-02588","next":"M16-GAP-02590"},"M16-GAP-02590":{"line":2589,"offset":447909,"length":176,"previous":"M16-GAP-02589","next":"M16-GAP-02591"},"M16-GAP-02591":{"line":2590,"offset":448085,"length":167,"previous":"M16-GAP-02590","next":"M16-GAP-02592"},"M16-GAP-02592":{"line":2591,"offset":448252,"length":178,"previous":"M16-GAP-02591","next":"M16-GAP-02593"},"M16-GAP-02593":{"line":2592,"offset":448430,"length":170,"previous":"M16-GAP-02592","next":"M16-GAP-02594"},"M16-GAP-02594":{"line":2593,"offset":448600,"length":176,"previous":"M16-GAP-02593","next":"M16-GAP-02595"},"M16-GAP-02595":{"line":2594,"offset":448776,"length":177,"previous":"M16-GAP-02594","next":"M16-GAP-02596"},"M16-GAP-02596":{"line":2595,"offset":448953,"length":177,"previous":"M16-GAP-02595","next":"M16-GAP-02597"},"M16-GAP-02597":{"line":2596,"offset":449130,"length":179,"previous":"M16-GAP-02596","next":"M16-GAP-02598"},"M16-GAP-02598":{"line":2597,"offset":449309,"length":160,"previous":"M16-GAP-02597","next":"M16-GAP-02599"},"M16-GAP-02599":{"line":2598,"offset":449469,"length":156,"previous":"M16-GAP-02598","next":"M16-GAP-02600"},"M16-GAP-02600":{"line":2599,"offset":449625,"length":163,"previous":"M16-GAP-02599","next":"M16-GAP-02601"},"M16-GAP-02601":{"line":2600,"offset":449788,"length":167,"previous":"M16-GAP-02600","next":"M16-GAP-02602"},"M16-GAP-02602":{"line":2601,"offset":449955,"length":165,"previous":"M16-GAP-02601","next":"M16-GAP-02603"},"M16-GAP-02603":{"line":2602,"offset":450120,"length":163,"previous":"M16-GAP-02602","next":"M16-GAP-02604"},"M16-GAP-02604":{"line":2603,"offset":450283,"length":166,"previous":"M16-GAP-02603","next":"M16-GAP-02605"},"M16-GAP-02605":{"line":2604,"offset":450449,"length":163,"previous":"M16-GAP-02604","next":"M16-GAP-02606"},"M16-GAP-02606":{"line":2605,"offset":450612,"length":167,"previous":"M16-GAP-02605","next":"M16-GAP-02607"},"M16-GAP-02607":{"line":2606,"offset":450779,"length":162,"previous":"M16-GAP-02606","next":"M16-GAP-02608"},"M16-GAP-02608":{"line":2607,"offset":450941,"length":161,"previous":"M16-GAP-02607","next":"M16-GAP-02609"},"M16-GAP-02609":{"line":2608,"offset":451102,"length":171,"previous":"M16-GAP-02608","next":"M16-GAP-02610"},"M16-GAP-02610":{"line":2609,"offset":451273,"length":166,"previous":"M16-GAP-02609","next":"M16-GAP-02611"},"M16-GAP-02611":{"line":2610,"offset":451439,"length":162,"previous":"M16-GAP-02610","next":"M16-GAP-02612"},"M16-GAP-02612":{"line":2611,"offset":451601,"length":164,"previous":"M16-GAP-02611","next":"M16-GAP-02613"},"M16-GAP-02613":{"line":2612,"offset":451765,"length":165,"previous":"M16-GAP-02612","next":"M16-GAP-02614"},"M16-GAP-02614":{"line":2613,"offset":451930,"length":162,"previous":"M16-GAP-02613","next":"M16-GAP-02615"},"M16-GAP-02615":{"line":2614,"offset":452092,"length":166,"previous":"M16-GAP-02614","next":"M16-GAP-02616"},"M16-GAP-02616":{"line":2615,"offset":452258,"length":161,"previous":"M16-GAP-02615","next":"M16-GAP-02617"},"M16-GAP-02617":{"line":2616,"offset":452419,"length":165,"previous":"M16-GAP-02616","next":"M16-GAP-02618"},"M16-GAP-02618":{"line":2617,"offset":452584,"length":162,"previous":"M16-GAP-02617","next":"M16-GAP-02619"},"M16-GAP-02619":{"line":2618,"offset":452746,"length":165,"previous":"M16-GAP-02618","next":"M16-GAP-02620"},"M16-GAP-02620":{"line":2619,"offset":452911,"length":166,"previous":"M16-GAP-02619","next":"M16-GAP-02621"},"M16-GAP-02621":{"line":2620,"offset":453077,"length":165,"previous":"M16-GAP-02620","next":"M16-GAP-02622"},"M16-GAP-02622":{"line":2621,"offset":453242,"length":163,"previous":"M16-GAP-02621","next":"M16-GAP-02623"},"M16-GAP-02623":{"line":2622,"offset":453405,"length":167,"previous":"M16-GAP-02622","next":"M16-GAP-02624"},"M16-GAP-02624":{"line":2623,"offset":453572,"length":164,"previous":"M16-GAP-02623","next":"M16-GAP-02625"},"M16-GAP-02625":{"line":2624,"offset":453736,"length":165,"previous":"M16-GAP-02624","next":"M16-GAP-02626"},"M16-GAP-02626":{"line":2625,"offset":453901,"length":167,"previous":"M16-GAP-02625","next":"M16-GAP-02627"},"M16-GAP-02627":{"line":2626,"offset":454068,"length":162,"previous":"M16-GAP-02626","next":"M16-GAP-02628"},"M16-GAP-02628":{"line":2627,"offset":454230,"length":162,"previous":"M16-GAP-02627","next":"M16-GAP-02629"},"M16-GAP-02629":{"line":2628,"offset":454392,"length":163,"previous":"M16-GAP-02628","next":"M16-GAP-02630"},"M16-GAP-02630":{"line":2629,"offset":454555,"length":162,"previous":"M16-GAP-02629","next":"M16-GAP-02631"},"M16-GAP-02631":{"line":2630,"offset":454717,"length":164,"previous":"M16-GAP-02630","next":"M16-GAP-02632"},"M16-GAP-02632":{"line":2631,"offset":454881,"length":161,"previous":"M16-GAP-02631","next":"M16-GAP-02633"},"M16-GAP-02633":{"line":2632,"offset":455042,"length":164,"previous":"M16-GAP-02632","next":"M16-GAP-02634"},"M16-GAP-02634":{"line":2633,"offset":455206,"length":163,"previous":"M16-GAP-02633","next":"M16-GAP-02635"},"M16-GAP-02635":{"line":2634,"offset":455369,"length":170,"previous":"M16-GAP-02634","next":"M16-GAP-02636"},"M16-GAP-02636":{"line":2635,"offset":455539,"length":166,"previous":"M16-GAP-02635","next":"M16-GAP-02637"},"M16-GAP-02637":{"line":2636,"offset":455705,"length":162,"previous":"M16-GAP-02636","next":"M16-GAP-02638"},"M16-GAP-02638":{"line":2637,"offset":455867,"length":156,"previous":"M16-GAP-02637","next":"M16-GAP-02639"},"M16-GAP-02639":{"line":2638,"offset":456023,"length":165,"previous":"M16-GAP-02638","next":"M16-GAP-02640"},"M16-GAP-02640":{"line":2639,"offset":456188,"length":160,"previous":"M16-GAP-02639","next":"M16-GAP-02641"},"M16-GAP-02641":{"line":2640,"offset":456348,"length":165,"previous":"M16-GAP-02640","next":"M16-GAP-02642"},"M16-GAP-02642":{"line":2641,"offset":456513,"length":161,"previous":"M16-GAP-02641","next":"M16-GAP-02643"},"M16-GAP-02643":{"line":2642,"offset":456674,"length":159,"previous":"M16-GAP-02642","next":"M16-GAP-02644"},"M16-GAP-02644":{"line":2643,"offset":456833,"length":151,"previous":"M16-GAP-02643","next":"M16-GAP-02645"},"M16-GAP-02645":{"line":2644,"offset":456984,"length":170,"previous":"M16-GAP-02644","next":"M16-GAP-02646"},"M16-GAP-02646":{"line":2645,"offset":457154,"length":164,"previous":"M16-GAP-02645","next":"M16-GAP-02647"},"M16-GAP-02647":{"line":2646,"offset":457318,"length":165,"previous":"M16-GAP-02646","next":"M16-GAP-02648"},"M16-GAP-02648":{"line":2647,"offset":457483,"length":155,"previous":"M16-GAP-02647","next":"M16-GAP-02649"},"M16-GAP-02649":{"line":2648,"offset":457638,"length":156,"previous":"M16-GAP-02648","next":"M16-GAP-02650"},"M16-GAP-02650":{"line":2649,"offset":457794,"length":155,"previous":"M16-GAP-02649","next":"M16-GAP-02651"},"M16-GAP-02651":{"line":2650,"offset":457949,"length":160,"previous":"M16-GAP-02650","next":"M16-GAP-02652"},"M16-GAP-02652":{"line":2651,"offset":458109,"length":165,"previous":"M16-GAP-02651","next":"M16-GAP-02653"},"M16-GAP-02653":{"line":2652,"offset":458274,"length":163,"previous":"M16-GAP-02652","next":"M16-GAP-02654"},"M16-GAP-02654":{"line":2653,"offset":458437,"length":164,"previous":"M16-GAP-02653","next":"M16-GAP-02655"},"M16-GAP-02655":{"line":2654,"offset":458601,"length":156,"previous":"M16-GAP-02654","next":"M16-GAP-02656"},"M16-GAP-02656":{"line":2655,"offset":458757,"length":162,"previous":"M16-GAP-02655","next":"M16-GAP-02657"},"M16-GAP-02657":{"line":2656,"offset":458919,"length":158,"previous":"M16-GAP-02656","next":"M16-GAP-02658"},"M16-GAP-02658":{"line":2657,"offset":459077,"length":159,"previous":"M16-GAP-02657","next":"M16-GAP-02659"},"M16-GAP-02659":{"line":2658,"offset":459236,"length":172,"previous":"M16-GAP-02658","next":"M16-GAP-02660"},"M16-GAP-02660":{"line":2659,"offset":459408,"length":161,"previous":"M16-GAP-02659","next":"M16-GAP-02661"},"M16-GAP-02661":{"line":2660,"offset":459569,"length":166,"previous":"M16-GAP-02660","next":"M16-GAP-02662"},"M16-GAP-02662":{"line":2661,"offset":459735,"length":158,"previous":"M16-GAP-02661","next":"M16-GAP-02663"},"M16-GAP-02663":{"line":2662,"offset":459893,"length":167,"previous":"M16-GAP-02662","next":"M16-GAP-02664"},"M16-GAP-02664":{"line":2663,"offset":460060,"length":157,"previous":"M16-GAP-02663","next":"M16-GAP-02665"},"M16-GAP-02665":{"line":2664,"offset":460217,"length":162,"previous":"M16-GAP-02664","next":"M16-GAP-02666"},"M16-GAP-02666":{"line":2665,"offset":460379,"length":157,"previous":"M16-GAP-02665","next":"M16-GAP-02667"},"M16-GAP-02667":{"line":2666,"offset":460536,"length":159,"previous":"M16-GAP-02666","next":"M17-GAP-00001"},"M17-GAP-00001":{"line":2667,"offset":460695,"length":161,"previous":"M16-GAP-02667","next":"M17-GAP-00002"},"M17-GAP-00002":{"line":2668,"offset":460856,"length":163,"previous":"M17-GAP-00001","next":"M17-GAP-00003"},"M17-GAP-00003":{"line":2669,"offset":461019,"length":168,"previous":"M17-GAP-00002","next":"M17-GAP-00004"},"M17-GAP-00004":{"line":2670,"offset":461187,"length":163,"previous":"M17-GAP-00003","next":"M17-GAP-00005"},"M17-GAP-00005":{"line":2671,"offset":461350,"length":163,"previous":"M17-GAP-00004","next":"M17-GAP-00006"},"M17-GAP-00006":{"line":2672,"offset":461513,"length":168,"previous":"M17-GAP-00005","next":"M17-GAP-00007"},"M17-GAP-00007":{"line":2673,"offset":461681,"length":168,"previous":"M17-GAP-00006","next":"M17-GAP-00008"},"M17-GAP-00008":{"line":2674,"offset":461849,"length":165,"previous":"M17-GAP-00007","next":"M17-GAP-00009"},"M17-GAP-00009":{"line":2675,"offset":462014,"length":170,"previous":"M17-GAP-00008","next":"M17-GAP-00010"},"M17-GAP-00010":{"line":2676,"offset":462184,"length":167,"previous":"M17-GAP-00009","next":"M17-GAP-00011"},"M17-GAP-00011":{"line":2677,"offset":462351,"length":160,"previous":"M17-GAP-00010","next":"M17-GAP-00012"},"M17-GAP-00012":{"line":2678,"offset":462511,"length":166,"previous":"M17-GAP-00011","next":"M17-GAP-00013"},"M17-GAP-00013":{"line":2679,"offset":462677,"length":167,"previous":"M17-GAP-00012","next":"M17-GAP-00014"},"M17-GAP-00014":{"line":2680,"offset":462844,"length":173,"previous":"M17-GAP-00013","next":"M17-GAP-00015"},"M17-GAP-00015":{"line":2681,"offset":463017,"length":157,"previous":"M17-GAP-00014","next":"M17-GAP-00016"},"M17-GAP-00016":{"line":2682,"offset":463174,"length":169,"previous":"M17-GAP-00015","next":"M17-GAP-00017"},"M17-GAP-00017":{"line":2683,"offset":463343,"length":169,"previous":"M17-GAP-00016","next":"M17-GAP-00018"},"M17-GAP-00018":{"line":2684,"offset":463512,"length":169,"previous":"M17-GAP-00017","next":"M17-GAP-00019"},"M17-GAP-00019":{"line":2685,"offset":463681,"length":166,"previous":"M17-GAP-00018","next":"M17-GAP-00020"},"M17-GAP-00020":{"line":2686,"offset":463847,"length":167,"previous":"M17-GAP-00019","next":"M17-GAP-00021"},"M17-GAP-00021":{"line":2687,"offset":464014,"length":170,"previous":"M17-GAP-00020","next":"M17-GAP-00022"},"M17-GAP-00022":{"line":2688,"offset":464184,"length":168,"previous":"M17-GAP-00021","next":"M17-GAP-00023"},"M17-GAP-00023":{"line":2689,"offset":464352,"length":160,"previous":"M17-GAP-00022","next":"M17-GAP-00024"},"M17-GAP-00024":{"line":2690,"offset":464512,"length":165,"previous":"M17-GAP-00023","next":"M17-GAP-00025"},"M17-GAP-00025":{"line":2691,"offset":464677,"length":164,"previous":"M17-GAP-00024","next":"M17-GAP-00026"},"M17-GAP-00026":{"line":2692,"offset":464841,"length":165,"previous":"M17-GAP-00025","next":"M17-GAP-00027"},"M17-GAP-00027":{"line":2693,"offset":465006,"length":163,"previous":"M17-GAP-00026","next":"M17-GAP-00028"},"M17-GAP-00028":{"line":2694,"offset":465169,"length":164,"previous":"M17-GAP-00027","next":"M17-GAP-00029"},"M17-GAP-00029":{"line":2695,"offset":465333,"length":170,"previous":"M17-GAP-00028","next":"M18-GAP-00001"},"M18-GAP-00001":{"line":2696,"offset":465503,"length":188,"previous":"M17-GAP-00029","next":"M18-GAP-00002"},"M18-GAP-00002":{"line":2697,"offset":465691,"length":191,"previous":"M18-GAP-00001","next":"M18-GAP-00003"},"M18-GAP-00003":{"line":2698,"offset":465882,"length":192,"previous":"M18-GAP-00002","next":"M18-GAP-00004"},"M18-GAP-00004":{"line":2699,"offset":466074,"length":189,"previous":"M18-GAP-00003","next":"M18-GAP-00005"},"M18-GAP-00005":{"line":2700,"offset":466263,"length":183,"previous":"M18-GAP-00004","next":"M18-GAP-00006"},"M18-GAP-00006":{"line":2701,"offset":466446,"length":188,"previous":"M18-GAP-00005","next":"M18-GAP-00007"},"M18-GAP-00007":{"line":2702,"offset":466634,"length":189,"previous":"M18-GAP-00006","next":"M18-GAP-00008"},"M18-GAP-00008":{"line":2703,"offset":466823,"length":186,"previous":"M18-GAP-00007","next":"M18-GAP-00009"},"M18-GAP-00009":{"line":2704,"offset":467009,"length":193,"previous":"M18-GAP-00008","next":"M18-GAP-00010"},"M18-GAP-00010":{"line":2705,"offset":467202,"length":191,"previous":"M18-GAP-00009","next":"M18-GAP-00011"},"M18-GAP-00011":{"line":2706,"offset":467393,"length":190,"previous":"M18-GAP-00010","next":"M18-GAP-00012"},"M18-GAP-00012":{"line":2707,"offset":467583,"length":191,"previous":"M18-GAP-00011","next":"M18-GAP-00013"},"M18-GAP-00013":{"line":2708,"offset":467774,"length":194,"previous":"M18-GAP-00012","next":"M18-GAP-00014"},"M18-GAP-00014":{"line":2709,"offset":467968,"length":189,"previous":"M18-GAP-00013","next":"M18-GAP-00015"},"M18-GAP-00015":{"line":2710,"offset":468157,"length":189,"previous":"M18-GAP-00014","next":"M18-GAP-00016"},"M18-GAP-00016":{"line":2711,"offset":468346,"length":191,"previous":"M18-GAP-00015","next":"M18-GAP-00017"},"M18-GAP-00017":{"line":2712,"offset":468537,"length":196,"previous":"M18-GAP-00016","next":"M18-GAP-00018"},"M18-GAP-00018":{"line":2713,"offset":468733,"length":195,"previous":"M18-GAP-00017","next":"M18-GAP-00019"},"M18-GAP-00019":{"line":2714,"offset":468928,"length":187,"previous":"M18-GAP-00018","next":"M18-GAP-00020"},"M18-GAP-00020":{"line":2715,"offset":469115,"length":188,"previous":"M18-GAP-00019","next":"M18-GAP-00021"},"M18-GAP-00021":{"line":2716,"offset":469303,"length":183,"previous":"M18-GAP-00020","next":"M18-GAP-00022"},"M18-GAP-00022":{"line":2717,"offset":469486,"length":190,"previous":"M18-GAP-00021","next":"M18-GAP-00023"},"M18-GAP-00023":{"line":2718,"offset":469676,"length":192,"previous":"M18-GAP-00022","next":"M18-GAP-00024"},"M18-GAP-00024":{"line":2719,"offset":469868,"length":187,"previous":"M18-GAP-00023","next":"M18-GAP-00025"},"M18-GAP-00025":{"line":2720,"offset":470055,"length":184,"previous":"M18-GAP-00024","next":"M18-GAP-00026"},"M18-GAP-00026":{"line":2721,"offset":470239,"length":186,"previous":"M18-GAP-00025","next":"M18-GAP-00027"},"M18-GAP-00027":{"line":2722,"offset":470425,"length":186,"previous":"M18-GAP-00026","next":"M18-GAP-00028"},"M18-GAP-00028":{"line":2723,"offset":470611,"length":188,"previous":"M18-GAP-00027","next":"M18-GAP-00029"},"M18-GAP-00029":{"line":2724,"offset":470799,"length":188,"previous":"M18-GAP-00028","next":"M18-GAP-00030"},"M18-GAP-00030":{"line":2725,"offset":470987,"length":190,"previous":"M18-GAP-00029","next":"M18-GAP-00031"},"M18-GAP-00031":{"line":2726,"offset":471177,"length":187,"previous":"M18-GAP-00030","next":"M18-GAP-00032"},"M18-GAP-00032":{"line":2727,"offset":471364,"length":192,"previous":"M18-GAP-00031","next":"M18-GAP-00033"},"M18-GAP-00033":{"line":2728,"offset":471556,"length":193,"previous":"M18-GAP-00032","next":"M18-GAP-00034"},"M18-GAP-00034":{"line":2729,"offset":471749,"length":190,"previous":"M18-GAP-00033","next":"M18-GAP-00035"},"M18-GAP-00035":{"line":2730,"offset":471939,"length":187,"previous":"M18-GAP-00034","next":"M18-GAP-00036"},"M18-GAP-00036":{"line":2731,"offset":472126,"length":185,"previous":"M18-GAP-00035","next":"M18-GAP-00037"},"M18-GAP-00037":{"line":2732,"offset":472311,"length":183,"previous":"M18-GAP-00036","next":"M18-GAP-00038"},"M18-GAP-00038":{"line":2733,"offset":472494,"length":184,"previous":"M18-GAP-00037","next":"M18-GAP-00039"},"M18-GAP-00039":{"line":2734,"offset":472678,"length":184,"previous":"M18-GAP-00038","next":"M18-GAP-00040"},"M18-GAP-00040":{"line":2735,"offset":472862,"length":189,"previous":"M18-GAP-00039","next":"M18-GAP-00041"},"M18-GAP-00041":{"line":2736,"offset":473051,"length":185,"previous":"M18-GAP-00040","next":"M18-GAP-00042"},"M18-GAP-00042":{"line":2737,"offset":473236,"length":185,"previous":"M18-GAP-00041","next":"M18-GAP-00043"},"M18-GAP-00043":{"line":2738,"offset":473421,"length":184,"previous":"M18-GAP-00042","next":"M18-GAP-00044"},"M18-GAP-00044":{"line":2739,"offset":473605,"length":195,"previous":"M18-GAP-00043","next":"M18-GAP-00045"},"M18-GAP-00045":{"line":2740,"offset":473800,"length":188,"previous":"M18-GAP-00044","next":"M18-GAP-00046"},"M18-GAP-00046":{"line":2741,"offset":473988,"length":186,"previous":"M18-GAP-00045","next":"M18-GAP-00047"},"M18-GAP-00047":{"line":2742,"offset":474174,"length":185,"previous":"M18-GAP-00046","next":"M18-GAP-00048"},"M18-GAP-00048":{"line":2743,"offset":474359,"length":185,"previous":"M18-GAP-00047","next":"M18-GAP-00049"},"M18-GAP-00049":{"line":2744,"offset":474544,"length":191,"previous":"M18-GAP-00048","next":"M18-GAP-00050"},"M18-GAP-00050":{"line":2745,"offset":474735,"length":187,"previous":"M18-GAP-00049","next":"M18-GAP-00051"},"M18-GAP-00051":{"line":2746,"offset":474922,"length":187,"previous":"M18-GAP-00050","next":"M18-GAP-00052"},"M18-GAP-00052":{"line":2747,"offset":475109,"length":185,"previous":"M18-GAP-00051","next":"M18-GAP-00053"},"M18-GAP-00053":{"line":2748,"offset":475294,"length":188,"previous":"M18-GAP-00052","next":"M18-GAP-00054"},"M18-GAP-00054":{"line":2749,"offset":475482,"length":184,"previous":"M18-GAP-00053","next":"M18-GAP-00055"},"M18-GAP-00055":{"line":2750,"offset":475666,"length":183,"previous":"M18-GAP-00054","next":"M18-GAP-00056"},"M18-GAP-00056":{"line":2751,"offset":475849,"length":188,"previous":"M18-GAP-00055","next":"M18-GAP-00057"},"M18-GAP-00057":{"line":2752,"offset":476037,"length":188,"previous":"M18-GAP-00056","next":"M18-GAP-00058"},"M18-GAP-00058":{"line":2753,"offset":476225,"length":194,"previous":"M18-GAP-00057","next":"M18-GAP-00059"},"M18-GAP-00059":{"line":2754,"offset":476419,"length":185,"previous":"M18-GAP-00058","next":"M18-GAP-00060"},"M18-GAP-00060":{"line":2755,"offset":476604,"length":188,"previous":"M18-GAP-00059","next":"M18-GAP-00061"},"M18-GAP-00061":{"line":2756,"offset":476792,"length":189,"previous":"M18-GAP-00060","next":"M18-GAP-00062"},"M18-GAP-00062":{"line":2757,"offset":476981,"length":187,"previous":"M18-GAP-00061","next":"M18-GAP-00063"},"M18-GAP-00063":{"line":2758,"offset":477168,"length":195,"previous":"M18-GAP-00062","next":"M18-GAP-00064"},"M18-GAP-00064":{"line":2759,"offset":477363,"length":188,"previous":"M18-GAP-00063","next":"M18-GAP-00065"},"M18-GAP-00065":{"line":2760,"offset":477551,"length":188,"previous":"M18-GAP-00064","next":"M18-GAP-00066"},"M18-GAP-00066":{"line":2761,"offset":477739,"length":182,"previous":"M18-GAP-00065","next":"M18-GAP-00067"},"M18-GAP-00067":{"line":2762,"offset":477921,"length":186,"previous":"M18-GAP-00066","next":"M18-GAP-00068"},"M18-GAP-00068":{"line":2763,"offset":478107,"length":186,"previous":"M18-GAP-00067","next":"M18-GAP-00069"},"M18-GAP-00069":{"line":2764,"offset":478293,"length":194,"previous":"M18-GAP-00068","next":"M18-GAP-00070"},"M18-GAP-00070":{"line":2765,"offset":478487,"length":185,"previous":"M18-GAP-00069","next":"M18-GAP-00071"},"M18-GAP-00071":{"line":2766,"offset":478672,"length":184,"previous":"M18-GAP-00070","next":"M18-GAP-00072"},"M18-GAP-00072":{"line":2767,"offset":478856,"length":188,"previous":"M18-GAP-00071","next":"M18-GAP-00073"},"M18-GAP-00073":{"line":2768,"offset":479044,"length":192,"previous":"M18-GAP-00072","next":"M18-GAP-00074"},"M18-GAP-00074":{"line":2769,"offset":479236,"length":197,"previous":"M18-GAP-00073","next":"M18-GAP-00075"},"M18-GAP-00075":{"line":2770,"offset":479433,"length":187,"previous":"M18-GAP-00074","next":"M18-GAP-00076"},"M18-GAP-00076":{"line":2771,"offset":479620,"length":184,"previous":"M18-GAP-00075","next":"M18-GAP-00077"},"M18-GAP-00077":{"line":2772,"offset":479804,"length":188,"previous":"M18-GAP-00076","next":"M18-GAP-00078"},"M18-GAP-00078":{"line":2773,"offset":479992,"length":192,"previous":"M18-GAP-00077","next":"M18-GAP-00079"},"M18-GAP-00079":{"line":2774,"offset":480184,"length":185,"previous":"M18-GAP-00078","next":"M18-GAP-00080"},"M18-GAP-00080":{"line":2775,"offset":480369,"length":189,"previous":"M18-GAP-00079","next":"M18-GAP-00081"},"M18-GAP-00081":{"line":2776,"offset":480558,"length":183,"previous":"M18-GAP-00080","next":"M18-GAP-00082"},"M18-GAP-00082":{"line":2777,"offset":480741,"length":186,"previous":"M18-GAP-00081","next":"M18-GAP-00083"},"M18-GAP-00083":{"line":2778,"offset":480927,"length":187,"previous":"M18-GAP-00082","next":"M18-GAP-00084"},"M18-GAP-00084":{"line":2779,"offset":481114,"length":188,"previous":"M18-GAP-00083","next":"M18-GAP-00085"},"M18-GAP-00085":{"line":2780,"offset":481302,"length":188,"previous":"M18-GAP-00084","next":"M18-GAP-00086"},"M18-GAP-00086":{"line":2781,"offset":481490,"length":186,"previous":"M18-GAP-00085","next":"M18-GAP-00087"},"M18-GAP-00087":{"line":2782,"offset":481676,"length":185,"previous":"M18-GAP-00086","next":"M18-GAP-00088"},"M18-GAP-00088":{"line":2783,"offset":481861,"length":187,"previous":"M18-GAP-00087","next":"M18-GAP-00089"},"M18-GAP-00089":{"line":2784,"offset":482048,"length":188,"previous":"M18-GAP-00088","next":"M18-GAP-00090"},"M18-GAP-00090":{"line":2785,"offset":482236,"length":192,"previous":"M18-GAP-00089","next":"M18-GAP-00091"},"M18-GAP-00091":{"line":2786,"offset":482428,"length":191,"previous":"M18-GAP-00090","next":"M18-GAP-00092"},"M18-GAP-00092":{"line":2787,"offset":482619,"length":177,"previous":"M18-GAP-00091","next":"M18-GAP-00093"},"M18-GAP-00093":{"line":2788,"offset":482796,"length":186,"previous":"M18-GAP-00092","next":"M18-GAP-00094"},"M18-GAP-00094":{"line":2789,"offset":482982,"length":181,"previous":"M18-GAP-00093","next":"M18-GAP-00095"},"M18-GAP-00095":{"line":2790,"offset":483163,"length":181,"previous":"M18-GAP-00094","next":"M18-GAP-00096"},"M18-GAP-00096":{"line":2791,"offset":483344,"length":183,"previous":"M18-GAP-00095","next":"M18-GAP-00097"},"M18-GAP-00097":{"line":2792,"offset":483527,"length":189,"previous":"M18-GAP-00096","next":"M18-GAP-00098"},"M18-GAP-00098":{"line":2793,"offset":483716,"length":186,"previous":"M18-GAP-00097","next":"M18-GAP-00099"},"M18-GAP-00099":{"line":2794,"offset":483902,"length":191,"previous":"M18-GAP-00098","next":"M18-GAP-00100"},"M18-GAP-00100":{"line":2795,"offset":484093,"length":190,"previous":"M18-GAP-00099","next":"M18-GAP-00101"},"M18-GAP-00101":{"line":2796,"offset":484283,"length":191,"previous":"M18-GAP-00100","next":"M18-GAP-00102"},"M18-GAP-00102":{"line":2797,"offset":484474,"length":187,"previous":"M18-GAP-00101","next":"M18-GAP-00103"},"M18-GAP-00103":{"line":2798,"offset":484661,"length":183,"previous":"M18-GAP-00102","next":"M18-GAP-00104"},"M18-GAP-00104":{"line":2799,"offset":484844,"length":186,"previous":"M18-GAP-00103","next":"M18-GAP-00105"},"M18-GAP-00105":{"line":2800,"offset":485030,"length":186,"previous":"M18-GAP-00104","next":"M18-GAP-00106"},"M18-GAP-00106":{"line":2801,"offset":485216,"length":188,"previous":"M18-GAP-00105","next":"M18-GAP-00107"},"M18-GAP-00107":{"line":2802,"offset":485404,"length":189,"previous":"M18-GAP-00106","next":"M18-GAP-00108"},"M18-GAP-00108":{"line":2803,"offset":485593,"length":181,"previous":"M18-GAP-00107","next":"M18-GAP-00109"},"M18-GAP-00109":{"line":2804,"offset":485774,"length":195,"previous":"M18-GAP-00108","next":"M18-GAP-00110"},"M18-GAP-00110":{"line":2805,"offset":485969,"length":197,"previous":"M18-GAP-00109","next":"M18-GAP-00111"},"M18-GAP-00111":{"line":2806,"offset":486166,"length":184,"previous":"M18-GAP-00110","next":"M18-GAP-00112"},"M18-GAP-00112":{"line":2807,"offset":486350,"length":185,"previous":"M18-GAP-00111","next":"M18-GAP-00113"},"M18-GAP-00113":{"line":2808,"offset":486535,"length":200,"previous":"M18-GAP-00112","next":"M18-GAP-00114"},"M18-GAP-00114":{"line":2809,"offset":486735,"length":193,"previous":"M18-GAP-00113","next":"M18-GAP-00115"},"M18-GAP-00115":{"line":2810,"offset":486928,"length":191,"previous":"M18-GAP-00114","next":"M18-GAP-00116"},"M18-GAP-00116":{"line":2811,"offset":487119,"length":200,"previous":"M18-GAP-00115","next":"M18-GAP-00117"},"M18-GAP-00117":{"line":2812,"offset":487319,"length":193,"previous":"M18-GAP-00116","next":"M18-GAP-00118"},"M18-GAP-00118":{"line":2813,"offset":487512,"length":188,"previous":"M18-GAP-00117","next":"M18-GAP-00119"},"M18-GAP-00119":{"line":2814,"offset":487700,"length":184,"previous":"M18-GAP-00118","next":"M18-GAP-00120"},"M18-GAP-00120":{"line":2815,"offset":487884,"length":188,"previous":"M18-GAP-00119","next":"M18-GAP-00121"},"M18-GAP-00121":{"line":2816,"offset":488072,"length":182,"previous":"M18-GAP-00120","next":"M18-GAP-00122"},"M18-GAP-00122":{"line":2817,"offset":488254,"length":184,"previous":"M18-GAP-00121","next":"M18-GAP-00123"},"M18-GAP-00123":{"line":2818,"offset":488438,"length":186,"previous":"M18-GAP-00122","next":"M18-GAP-00124"},"M18-GAP-00124":{"line":2819,"offset":488624,"length":193,"previous":"M18-GAP-00123","next":"M18-GAP-00125"},"M18-GAP-00125":{"line":2820,"offset":488817,"length":194,"previous":"M18-GAP-00124","next":"M18-GAP-00126"},"M18-GAP-00126":{"line":2821,"offset":489011,"length":187,"previous":"M18-GAP-00125","next":"M18-GAP-00127"},"M18-GAP-00127":{"line":2822,"offset":489198,"length":195,"previous":"M18-GAP-00126","next":"M18-GAP-00128"},"M18-GAP-00128":{"line":2823,"offset":489393,"length":197,"previous":"M18-GAP-00127","next":"M18-GAP-00129"},"M18-GAP-00129":{"line":2824,"offset":489590,"length":196,"previous":"M18-GAP-00128","next":"M18-GAP-00130"},"M18-GAP-00130":{"line":2825,"offset":489786,"length":181,"previous":"M18-GAP-00129","next":"M18-GAP-00131"},"M18-GAP-00131":{"line":2826,"offset":489967,"length":190,"previous":"M18-GAP-00130","next":"M18-GAP-00132"},"M18-GAP-00132":{"line":2827,"offset":490157,"length":190,"previous":"M18-GAP-00131","next":"M18-GAP-00133"},"M18-GAP-00133":{"line":2828,"offset":490347,"length":193,"previous":"M18-GAP-00132","next":"M18-GAP-00134"},"M18-GAP-00134":{"line":2829,"offset":490540,"length":186,"previous":"M18-GAP-00133","next":"M18-GAP-00135"},"M18-GAP-00135":{"line":2830,"offset":490726,"length":186,"previous":"M18-GAP-00134","next":"M18-GAP-00136"},"M18-GAP-00136":{"line":2831,"offset":490912,"length":190,"previous":"M18-GAP-00135","next":"M18-GAP-00137"},"M18-GAP-00137":{"line":2832,"offset":491102,"length":184,"previous":"M18-GAP-00136","next":"M18-GAP-00138"},"M18-GAP-00138":{"line":2833,"offset":491286,"length":185,"previous":"M18-GAP-00137","next":"M18-GAP-00139"},"M18-GAP-00139":{"line":2834,"offset":491471,"length":185,"previous":"M18-GAP-00138","next":"M18-GAP-00140"},"M18-GAP-00140":{"line":2835,"offset":491656,"length":185,"previous":"M18-GAP-00139","next":"M18-GAP-00141"},"M18-GAP-00141":{"line":2836,"offset":491841,"length":187,"previous":"M18-GAP-00140","next":"M18-GAP-00142"},"M18-GAP-00142":{"line":2837,"offset":492028,"length":186,"previous":"M18-GAP-00141","next":"M18-GAP-00143"},"M18-GAP-00143":{"line":2838,"offset":492214,"length":184,"previous":"M18-GAP-00142","next":"M18-GAP-00144"},"M18-GAP-00144":{"line":2839,"offset":492398,"length":184,"previous":"M18-GAP-00143","next":"M18-GAP-00145"},"M18-GAP-00145":{"line":2840,"offset":492582,"length":186,"previous":"M18-GAP-00144","next":"M18-GAP-00146"},"M18-GAP-00146":{"line":2841,"offset":492768,"length":182,"previous":"M18-GAP-00145","next":"M18-GAP-00147"},"M18-GAP-00147":{"line":2842,"offset":492950,"length":184,"previous":"M18-GAP-00146","next":"M18-GAP-00148"},"M18-GAP-00148":{"line":2843,"offset":493134,"length":183,"previous":"M18-GAP-00147","next":"M18-GAP-00149"},"M18-GAP-00149":{"line":2844,"offset":493317,"length":182,"previous":"M18-GAP-00148","next":"M18-GAP-00150"},"M18-GAP-00150":{"line":2845,"offset":493499,"length":200,"previous":"M18-GAP-00149","next":"M18-GAP-00151"},"M18-GAP-00151":{"line":2846,"offset":493699,"length":201,"previous":"M18-GAP-00150","next":"M18-GAP-00152"},"M18-GAP-00152":{"line":2847,"offset":493900,"length":191,"previous":"M18-GAP-00151","next":"M18-GAP-00153"},"M18-GAP-00153":{"line":2848,"offset":494091,"length":190,"previous":"M18-GAP-00152","next":"M18-GAP-00154"},"M18-GAP-00154":{"line":2849,"offset":494281,"length":190,"previous":"M18-GAP-00153","next":"M18-GAP-00155"},"M18-GAP-00155":{"line":2850,"offset":494471,"length":193,"previous":"M18-GAP-00154","next":"M18-GAP-00156"},"M18-GAP-00156":{"line":2851,"offset":494664,"length":185,"previous":"M18-GAP-00155","next":"M18-GAP-00157"},"M18-GAP-00157":{"line":2852,"offset":494849,"length":182,"previous":"M18-GAP-00156","next":"M18-GAP-00158"},"M18-GAP-00158":{"line":2853,"offset":495031,"length":184,"previous":"M18-GAP-00157","next":"M18-GAP-00159"},"M18-GAP-00159":{"line":2854,"offset":495215,"length":187,"previous":"M18-GAP-00158","next":"M18-GAP-00160"},"M18-GAP-00160":{"line":2855,"offset":495402,"length":193,"previous":"M18-GAP-00159","next":"M18-GAP-00161"},"M18-GAP-00161":{"line":2856,"offset":495595,"length":183,"previous":"M18-GAP-00160","next":"M18-GAP-00162"},"M18-GAP-00162":{"line":2857,"offset":495778,"length":181,"previous":"M18-GAP-00161","next":"M18-GAP-00163"},"M18-GAP-00163":{"line":2858,"offset":495959,"length":181,"previous":"M18-GAP-00162","next":"M18-GAP-00164"},"M18-GAP-00164":{"line":2859,"offset":496140,"length":191,"previous":"M18-GAP-00163","next":"M18-GAP-00165"},"M18-GAP-00165":{"line":2860,"offset":496331,"length":187,"previous":"M18-GAP-00164","next":"M18-GAP-00166"},"M18-GAP-00166":{"line":2861,"offset":496518,"length":185,"previous":"M18-GAP-00165","next":"M18-GAP-00167"},"M18-GAP-00167":{"line":2862,"offset":496703,"length":181,"previous":"M18-GAP-00166","next":"M18-GAP-00168"},"M18-GAP-00168":{"line":2863,"offset":496884,"length":186,"previous":"M18-GAP-00167","next":"M18-GAP-00169"},"M18-GAP-00169":{"line":2864,"offset":497070,"length":181,"previous":"M18-GAP-00168","next":"M18-GAP-00170"},"M18-GAP-00170":{"line":2865,"offset":497251,"length":183,"previous":"M18-GAP-00169","next":"M18-GAP-00171"},"M18-GAP-00171":{"line":2866,"offset":497434,"length":182,"previous":"M18-GAP-00170","next":"M18-GAP-00172"},"M18-GAP-00172":{"line":2867,"offset":497616,"length":183,"previous":"M18-GAP-00171","next":"M18-GAP-00173"},"M18-GAP-00173":{"line":2868,"offset":497799,"length":185,"previous":"M18-GAP-00172","next":"M18-GAP-00174"},"M18-GAP-00174":{"line":2869,"offset":497984,"length":185,"previous":"M18-GAP-00173","next":"M18-GAP-00175"},"M18-GAP-00175":{"line":2870,"offset":498169,"length":178,"previous":"M18-GAP-00174","next":"M18-GAP-00176"},"M18-GAP-00176":{"line":2871,"offset":498347,"length":182,"previous":"M18-GAP-00175","next":"M18-GAP-00177"},"M18-GAP-00177":{"line":2872,"offset":498529,"length":185,"previous":"M18-GAP-00176","next":"M18-GAP-00178"},"M18-GAP-00178":{"line":2873,"offset":498714,"length":182,"previous":"M18-GAP-00177","next":"M18-GAP-00179"},"M18-GAP-00179":{"line":2874,"offset":498896,"length":182,"previous":"M18-GAP-00178","next":"M18-GAP-00180"},"M18-GAP-00180":{"line":2875,"offset":499078,"length":182,"previous":"M18-GAP-00179","next":"M18-GAP-00181"},"M18-GAP-00181":{"line":2876,"offset":499260,"length":182,"previous":"M18-GAP-00180","next":"M18-GAP-00182"},"M18-GAP-00182":{"line":2877,"offset":499442,"length":183,"previous":"M18-GAP-00181","next":"M18-GAP-00183"},"M18-GAP-00183":{"line":2878,"offset":499625,"length":182,"previous":"M18-GAP-00182","next":"M18-GAP-00184"},"M18-GAP-00184":{"line":2879,"offset":499807,"length":187,"previous":"M18-GAP-00183","next":"M18-GAP-00185"},"M18-GAP-00185":{"line":2880,"offset":499994,"length":184,"previous":"M18-GAP-00184","next":"M18-GAP-00186"},"M18-GAP-00186":{"line":2881,"offset":500178,"length":190,"previous":"M18-GAP-00185","next":"M18-GAP-00187"},"M18-GAP-00187":{"line":2882,"offset":500368,"length":188,"previous":"M18-GAP-00186","next":"M18-GAP-00188"},"M18-GAP-00188":{"line":2883,"offset":500556,"length":198,"previous":"M18-GAP-00187","next":"M18-GAP-00189"},"M18-GAP-00189":{"line":2884,"offset":500754,"length":187,"previous":"M18-GAP-00188","next":"M18-GAP-00190"},"M18-GAP-00190":{"line":2885,"offset":500941,"length":188,"previous":"M18-GAP-00189","next":"M18-GAP-00191"},"M18-GAP-00191":{"line":2886,"offset":501129,"length":182,"previous":"M18-GAP-00190","next":"M18-GAP-00192"},"M18-GAP-00192":{"line":2887,"offset":501311,"length":180,"previous":"M18-GAP-00191","next":"M18-GAP-00193"},"M18-GAP-00193":{"line":2888,"offset":501491,"length":183,"previous":"M18-GAP-00192","next":"M18-GAP-00194"},"M18-GAP-00194":{"line":2889,"offset":501674,"length":183,"previous":"M18-GAP-00193","next":"M18-GAP-00195"},"M18-GAP-00195":{"line":2890,"offset":501857,"length":192,"previous":"M18-GAP-00194","next":"M18-GAP-00196"},"M18-GAP-00196":{"line":2891,"offset":502049,"length":195,"previous":"M18-GAP-00195","next":"M18-GAP-00197"},"M18-GAP-00197":{"line":2892,"offset":502244,"length":194,"previous":"M18-GAP-00196","next":"M18-GAP-00198"},"M18-GAP-00198":{"line":2893,"offset":502438,"length":191,"previous":"M18-GAP-00197","next":"M18-GAP-00199"},"M18-GAP-00199":{"line":2894,"offset":502629,"length":186,"previous":"M18-GAP-00198","next":"M18-GAP-00200"},"M18-GAP-00200":{"line":2895,"offset":502815,"length":191,"previous":"M18-GAP-00199","next":"M18-GAP-00201"},"M18-GAP-00201":{"line":2896,"offset":503006,"length":191,"previous":"M18-GAP-00200","next":"M18-GAP-00202"},"M18-GAP-00202":{"line":2897,"offset":503197,"length":195,"previous":"M18-GAP-00201","next":"M18-GAP-00203"},"M18-GAP-00203":{"line":2898,"offset":503392,"length":194,"previous":"M18-GAP-00202","next":"M18-GAP-00204"},"M18-GAP-00204":{"line":2899,"offset":503586,"length":190,"previous":"M18-GAP-00203","next":"M18-GAP-00205"},"M18-GAP-00205":{"line":2900,"offset":503776,"length":194,"previous":"M18-GAP-00204","next":"M18-GAP-00206"},"M18-GAP-00206":{"line":2901,"offset":503970,"length":195,"previous":"M18-GAP-00205","next":"M18-GAP-00207"},"M18-GAP-00207":{"line":2902,"offset":504165,"length":188,"previous":"M18-GAP-00206","next":"M18-GAP-00208"},"M18-GAP-00208":{"line":2903,"offset":504353,"length":197,"previous":"M18-GAP-00207","next":"M18-GAP-00209"},"M18-GAP-00209":{"line":2904,"offset":504550,"length":192,"previous":"M18-GAP-00208","next":"M18-GAP-00210"},"M18-GAP-00210":{"line":2905,"offset":504742,"length":197,"previous":"M18-GAP-00209","next":"M18-GAP-00211"},"M18-GAP-00211":{"line":2906,"offset":504939,"length":184,"previous":"M18-GAP-00210","next":"M18-GAP-00212"},"M18-GAP-00212":{"line":2907,"offset":505123,"length":184,"previous":"M18-GAP-00211","next":"M18-GAP-00213"},"M18-GAP-00213":{"line":2908,"offset":505307,"length":186,"previous":"M18-GAP-00212","next":"M18-GAP-00214"},"M18-GAP-00214":{"line":2909,"offset":505493,"length":184,"previous":"M18-GAP-00213","next":"M18-GAP-00215"},"M18-GAP-00215":{"line":2910,"offset":505677,"length":187,"previous":"M18-GAP-00214","next":"M18-GAP-00216"},"M18-GAP-00216":{"line":2911,"offset":505864,"length":189,"previous":"M18-GAP-00215","next":"M18-GAP-00217"},"M18-GAP-00217":{"line":2912,"offset":506053,"length":195,"previous":"M18-GAP-00216","next":"M18-GAP-00218"},"M18-GAP-00218":{"line":2913,"offset":506248,"length":190,"previous":"M18-GAP-00217","next":"M18-GAP-00219"},"M18-GAP-00219":{"line":2914,"offset":506438,"length":194,"previous":"M18-GAP-00218","next":"M18-GAP-00220"},"M18-GAP-00220":{"line":2915,"offset":506632,"length":185,"previous":"M18-GAP-00219","next":"M18-GAP-00221"},"M18-GAP-00221":{"line":2916,"offset":506817,"length":188,"previous":"M18-GAP-00220","next":"M18-GAP-00222"},"M18-GAP-00222":{"line":2917,"offset":507005,"length":189,"previous":"M18-GAP-00221","next":"M18-GAP-00223"},"M18-GAP-00223":{"line":2918,"offset":507194,"length":190,"previous":"M18-GAP-00222","next":"M18-GAP-00224"},"M18-GAP-00224":{"line":2919,"offset":507384,"length":190,"previous":"M18-GAP-00223","next":"M18-GAP-00225"},"M18-GAP-00225":{"line":2920,"offset":507574,"length":190,"previous":"M18-GAP-00224","next":"M18-GAP-00226"},"M18-GAP-00226":{"line":2921,"offset":507764,"length":183,"previous":"M18-GAP-00225","next":"M18-GAP-00227"},"M18-GAP-00227":{"line":2922,"offset":507947,"length":185,"previous":"M18-GAP-00226","next":"M18-GAP-00228"},"M18-GAP-00228":{"line":2923,"offset":508132,"length":184,"previous":"M18-GAP-00227","next":"M18-GAP-00229"},"M18-GAP-00229":{"line":2924,"offset":508316,"length":183,"previous":"M18-GAP-00228","next":"M18-GAP-00230"},"M18-GAP-00230":{"line":2925,"offset":508499,"length":190,"previous":"M18-GAP-00229","next":"M18-GAP-00231"},"M18-GAP-00231":{"line":2926,"offset":508689,"length":183,"previous":"M18-GAP-00230","next":"M18-GAP-00232"},"M18-GAP-00232":{"line":2927,"offset":508872,"length":188,"previous":"M18-GAP-00231","next":"M18-GAP-00233"},"M18-GAP-00233":{"line":2928,"offset":509060,"length":184,"previous":"M18-GAP-00232","next":"M18-GAP-00234"},"M18-GAP-00234":{"line":2929,"offset":509244,"length":184,"previous":"M18-GAP-00233","next":"M18-GAP-00235"},"M18-GAP-00235":{"line":2930,"offset":509428,"length":182,"previous":"M18-GAP-00234","next":"M18-GAP-00236"},"M18-GAP-00236":{"line":2931,"offset":509610,"length":184,"previous":"M18-GAP-00235","next":"M18-GAP-00237"},"M18-GAP-00237":{"line":2932,"offset":509794,"length":183,"previous":"M18-GAP-00236","next":"M18-GAP-00238"},"M18-GAP-00238":{"line":2933,"offset":509977,"length":181,"previous":"M18-GAP-00237","next":"M18-GAP-00239"},"M18-GAP-00239":{"line":2934,"offset":510158,"length":181,"previous":"M18-GAP-00238","next":"M18-GAP-00240"},"M18-GAP-00240":{"line":2935,"offset":510339,"length":185,"previous":"M18-GAP-00239","next":"M18-GAP-00241"},"M18-GAP-00241":{"line":2936,"offset":510524,"length":194,"previous":"M18-GAP-00240","next":"M18-GAP-00242"},"M18-GAP-00242":{"line":2937,"offset":510718,"length":181,"previous":"M18-GAP-00241","next":"M18-GAP-00243"},"M18-GAP-00243":{"line":2938,"offset":510899,"length":186,"previous":"M18-GAP-00242","next":"M18-GAP-00244"},"M18-GAP-00244":{"line":2939,"offset":511085,"length":181,"previous":"M18-GAP-00243","next":"M18-GAP-00245"},"M18-GAP-00245":{"line":2940,"offset":511266,"length":184,"previous":"M18-GAP-00244","next":"M18-GAP-00246"},"M18-GAP-00246":{"line":2941,"offset":511450,"length":190,"previous":"M18-GAP-00245","next":"M18-GAP-00247"},"M18-GAP-00247":{"line":2942,"offset":511640,"length":185,"previous":"M18-GAP-00246","next":"M18-GAP-00248"},"M18-GAP-00248":{"line":2943,"offset":511825,"length":186,"previous":"M18-GAP-00247","next":"M18-GAP-00249"},"M18-GAP-00249":{"line":2944,"offset":512011,"length":185,"previous":"M18-GAP-00248","next":"M18-GAP-00250"},"M18-GAP-00250":{"line":2945,"offset":512196,"length":185,"previous":"M18-GAP-00249","next":"M18-GAP-00251"},"M18-GAP-00251":{"line":2946,"offset":512381,"length":183,"previous":"M18-GAP-00250","next":"M18-GAP-00252"},"M18-GAP-00252":{"line":2947,"offset":512564,"length":191,"previous":"M18-GAP-00251","next":"M18-GAP-00253"},"M18-GAP-00253":{"line":2948,"offset":512755,"length":191,"previous":"M18-GAP-00252","next":"M18-GAP-00254"},"M18-GAP-00254":{"line":2949,"offset":512946,"length":179,"previous":"M18-GAP-00253","next":"M18-GAP-00255"},"M18-GAP-00255":{"line":2950,"offset":513125,"length":186,"previous":"M18-GAP-00254","next":"M18-GAP-00256"},"M18-GAP-00256":{"line":2951,"offset":513311,"length":187,"previous":"M18-GAP-00255","next":"M18-GAP-00257"},"M18-GAP-00257":{"line":2952,"offset":513498,"length":188,"previous":"M18-GAP-00256","next":"M18-GAP-00258"},"M18-GAP-00258":{"line":2953,"offset":513686,"length":189,"previous":"M18-GAP-00257","next":"M18-GAP-00259"},"M18-GAP-00259":{"line":2954,"offset":513875,"length":187,"previous":"M18-GAP-00258","next":"M18-GAP-00260"},"M18-GAP-00260":{"line":2955,"offset":514062,"length":182,"previous":"M18-GAP-00259","next":"M18-GAP-00261"},"M18-GAP-00261":{"line":2956,"offset":514244,"length":180,"previous":"M18-GAP-00260","next":"M18-GAP-00262"},"M18-GAP-00262":{"line":2957,"offset":514424,"length":189,"previous":"M18-GAP-00261","next":"M18-GAP-00263"},"M18-GAP-00263":{"line":2958,"offset":514613,"length":188,"previous":"M18-GAP-00262","next":"M18-GAP-00264"},"M18-GAP-00264":{"line":2959,"offset":514801,"length":188,"previous":"M18-GAP-00263","next":"M18-GAP-00265"},"M18-GAP-00265":{"line":2960,"offset":514989,"length":184,"previous":"M18-GAP-00264","next":"M18-GAP-00266"},"M18-GAP-00266":{"line":2961,"offset":515173,"length":185,"previous":"M18-GAP-00265","next":"M18-GAP-00267"},"M18-GAP-00267":{"line":2962,"offset":515358,"length":188,"previous":"M18-GAP-00266","next":"M18-GAP-00268"},"M18-GAP-00268":{"line":2963,"offset":515546,"length":186,"previous":"M18-GAP-00267","next":"M18-GAP-00269"},"M18-GAP-00269":{"line":2964,"offset":515732,"length":185,"previous":"M18-GAP-00268","next":"M18-GAP-00270"},"M18-GAP-00270":{"line":2965,"offset":515917,"length":188,"previous":"M18-GAP-00269","next":"M18-GAP-00271"},"M18-GAP-00271":{"line":2966,"offset":516105,"length":187,"previous":"M18-GAP-00270","next":"M18-GAP-00272"},"M18-GAP-00272":{"line":2967,"offset":516292,"length":186,"previous":"M18-GAP-00271","next":"M18-GAP-00273"},"M18-GAP-00273":{"line":2968,"offset":516478,"length":189,"previous":"M18-GAP-00272","next":"M18-GAP-00274"},"M18-GAP-00274":{"line":2969,"offset":516667,"length":184,"previous":"M18-GAP-00273","next":"M18-GAP-00275"},"M18-GAP-00275":{"line":2970,"offset":516851,"length":193,"previous":"M18-GAP-00274","next":"M18-GAP-00276"},"M18-GAP-00276":{"line":2971,"offset":517044,"length":186,"previous":"M18-GAP-00275","next":"M18-GAP-00277"},"M18-GAP-00277":{"line":2972,"offset":517230,"length":186,"previous":"M18-GAP-00276","next":"M18-GAP-00278"},"M18-GAP-00278":{"line":2973,"offset":517416,"length":184,"previous":"M18-GAP-00277","next":"M18-GAP-00279"},"M18-GAP-00279":{"line":2974,"offset":517600,"length":183,"previous":"M18-GAP-00278","next":"M18-GAP-00280"},"M18-GAP-00280":{"line":2975,"offset":517783,"length":188,"previous":"M18-GAP-00279","next":"M18-GAP-00281"},"M18-GAP-00281":{"line":2976,"offset":517971,"length":184,"previous":"M18-GAP-00280","next":"M18-GAP-00282"},"M18-GAP-00282":{"line":2977,"offset":518155,"length":186,"previous":"M18-GAP-00281","next":"M18-GAP-00283"},"M18-GAP-00283":{"line":2978,"offset":518341,"length":193,"previous":"M18-GAP-00282","next":"M18-GAP-00284"},"M18-GAP-00284":{"line":2979,"offset":518534,"length":195,"previous":"M18-GAP-00283","next":"M18-GAP-00285"},"M18-GAP-00285":{"line":2980,"offset":518729,"length":188,"previous":"M18-GAP-00284","next":"M18-GAP-00286"},"M18-GAP-00286":{"line":2981,"offset":518917,"length":186,"previous":"M18-GAP-00285","next":"M18-GAP-00287"},"M18-GAP-00287":{"line":2982,"offset":519103,"length":187,"previous":"M18-GAP-00286","next":"M18-GAP-00288"},"M18-GAP-00288":{"line":2983,"offset":519290,"length":183,"previous":"M18-GAP-00287","next":"M18-GAP-00289"},"M18-GAP-00289":{"line":2984,"offset":519473,"length":191,"previous":"M18-GAP-00288","next":"M18-GAP-00290"},"M18-GAP-00290":{"line":2985,"offset":519664,"length":189,"previous":"M18-GAP-00289","next":"M18-GAP-00291"},"M18-GAP-00291":{"line":2986,"offset":519853,"length":196,"previous":"M18-GAP-00290","next":"M18-GAP-00292"},"M18-GAP-00292":{"line":2987,"offset":520049,"length":187,"previous":"M18-GAP-00291","next":"M18-GAP-00293"},"M18-GAP-00293":{"line":2988,"offset":520236,"length":187,"previous":"M18-GAP-00292","next":"M18-GAP-00294"},"M18-GAP-00294":{"line":2989,"offset":520423,"length":185,"previous":"M18-GAP-00293","next":"M18-GAP-00295"},"M18-GAP-00295":{"line":2990,"offset":520608,"length":190,"previous":"M18-GAP-00294","next":"M18-GAP-00296"},"M18-GAP-00296":{"line":2991,"offset":520798,"length":188,"previous":"M18-GAP-00295","next":"M18-GAP-00297"},"M18-GAP-00297":{"line":2992,"offset":520986,"length":193,"previous":"M18-GAP-00296","next":"M18-GAP-00298"},"M18-GAP-00298":{"line":2993,"offset":521179,"length":193,"previous":"M18-GAP-00297","next":"M18-GAP-00299"},"M18-GAP-00299":{"line":2994,"offset":521372,"length":196,"previous":"M18-GAP-00298","next":"M18-GAP-00300"},"M18-GAP-00300":{"line":2995,"offset":521568,"length":190,"previous":"M18-GAP-00299","next":"M18-GAP-00301"},"M18-GAP-00301":{"line":2996,"offset":521758,"length":189,"previous":"M18-GAP-00300","next":"M18-GAP-00302"},"M18-GAP-00302":{"line":2997,"offset":521947,"length":178,"previous":"M18-GAP-00301","next":"M18-GAP-00303"},"M18-GAP-00303":{"line":2998,"offset":522125,"length":193,"previous":"M18-GAP-00302","next":"M18-GAP-00304"},"M18-GAP-00304":{"line":2999,"offset":522318,"length":184,"previous":"M18-GAP-00303","next":"M18-GAP-00305"},"M18-GAP-00305":{"line":3000,"offset":522502,"length":189,"previous":"M18-GAP-00304","next":"M18-GAP-00306"},"M18-GAP-00306":{"line":3001,"offset":522691,"length":186,"previous":"M18-GAP-00305","next":"M18-GAP-00307"},"M18-GAP-00307":{"line":3002,"offset":522877,"length":186,"previous":"M18-GAP-00306","next":"M18-GAP-00308"},"M18-GAP-00308":{"line":3003,"offset":523063,"length":187,"previous":"M18-GAP-00307","next":"M18-GAP-00309"},"M18-GAP-00309":{"line":3004,"offset":523250,"length":187,"previous":"M18-GAP-00308","next":"M18-GAP-00310"},"M18-GAP-00310":{"line":3005,"offset":523437,"length":184,"previous":"M18-GAP-00309","next":"M18-GAP-00311"},"M18-GAP-00311":{"line":3006,"offset":523621,"length":187,"previous":"M18-GAP-00310","next":"M18-GAP-00312"},"M18-GAP-00312":{"line":3007,"offset":523808,"length":188,"previous":"M18-GAP-00311","next":"M18-GAP-00313"},"M18-GAP-00313":{"line":3008,"offset":523996,"length":192,"previous":"M18-GAP-00312","next":"M18-GAP-00314"},"M18-GAP-00314":{"line":3009,"offset":524188,"length":188,"previous":"M18-GAP-00313","next":"M18-GAP-00315"},"M18-GAP-00315":{"line":3010,"offset":524376,"length":189,"previous":"M18-GAP-00314","next":"M18-GAP-00316"},"M18-GAP-00316":{"line":3011,"offset":524565,"length":185,"previous":"M18-GAP-00315","next":"M18-GAP-00317"},"M18-GAP-00317":{"line":3012,"offset":524750,"length":181,"previous":"M18-GAP-00316","next":"M18-GAP-00318"},"M18-GAP-00318":{"line":3013,"offset":524931,"length":185,"previous":"M18-GAP-00317","next":"M18-GAP-00319"},"M18-GAP-00319":{"line":3014,"offset":525116,"length":188,"previous":"M18-GAP-00318","next":"M18-GAP-00320"},"M18-GAP-00320":{"line":3015,"offset":525304,"length":183,"previous":"M18-GAP-00319","next":"M18-GAP-00321"},"M18-GAP-00321":{"line":3016,"offset":525487,"length":189,"previous":"M18-GAP-00320","next":"M18-GAP-00322"},"M18-GAP-00322":{"line":3017,"offset":525676,"length":192,"previous":"M18-GAP-00321","next":"M18-GAP-00323"},"M18-GAP-00323":{"line":3018,"offset":525868,"length":187,"previous":"M18-GAP-00322","next":"M18-GAP-00324"},"M18-GAP-00324":{"line":3019,"offset":526055,"length":183,"previous":"M18-GAP-00323","next":"M18-GAP-00325"},"M18-GAP-00325":{"line":3020,"offset":526238,"length":187,"previous":"M18-GAP-00324","next":"M18-GAP-00326"},"M18-GAP-00326":{"line":3021,"offset":526425,"length":187,"previous":"M18-GAP-00325","next":"M18-GAP-00327"},"M18-GAP-00327":{"line":3022,"offset":526612,"length":186,"previous":"M18-GAP-00326","next":"M18-GAP-00328"},"M18-GAP-00328":{"line":3023,"offset":526798,"length":191,"previous":"M18-GAP-00327","next":"M18-GAP-00329"},"M18-GAP-00329":{"line":3024,"offset":526989,"length":179,"previous":"M18-GAP-00328","next":"M18-GAP-00330"},"M18-GAP-00330":{"line":3025,"offset":527168,"length":182,"previous":"M18-GAP-00329","next":"M18-GAP-00331"},"M18-GAP-00331":{"line":3026,"offset":527350,"length":185,"previous":"M18-GAP-00330","next":"M18-GAP-00332"},"M18-GAP-00332":{"line":3027,"offset":527535,"length":190,"previous":"M18-GAP-00331","next":"M18-GAP-00333"},"M18-GAP-00333":{"line":3028,"offset":527725,"length":184,"previous":"M18-GAP-00332","next":"M18-GAP-00334"},"M18-GAP-00334":{"line":3029,"offset":527909,"length":190,"previous":"M18-GAP-00333","next":"M18-GAP-00335"},"M18-GAP-00335":{"line":3030,"offset":528099,"length":186,"previous":"M18-GAP-00334","next":"M18-GAP-00336"},"M18-GAP-00336":{"line":3031,"offset":528285,"length":187,"previous":"M18-GAP-00335","next":"M18-GAP-00337"},"M18-GAP-00337":{"line":3032,"offset":528472,"length":189,"previous":"M18-GAP-00336","next":"M18-GAP-00338"},"M18-GAP-00338":{"line":3033,"offset":528661,"length":191,"previous":"M18-GAP-00337","next":"M18-GAP-00339"},"M18-GAP-00339":{"line":3034,"offset":528852,"length":182,"previous":"M18-GAP-00338","next":"M18-GAP-00340"},"M18-GAP-00340":{"line":3035,"offset":529034,"length":191,"previous":"M18-GAP-00339","next":"M18-GAP-00341"},"M18-GAP-00341":{"line":3036,"offset":529225,"length":184,"previous":"M18-GAP-00340","next":"M18-GAP-00342"},"M18-GAP-00342":{"line":3037,"offset":529409,"length":182,"previous":"M18-GAP-00341","next":"M18-GAP-00343"},"M18-GAP-00343":{"line":3038,"offset":529591,"length":186,"previous":"M18-GAP-00342","next":"M18-GAP-00344"},"M18-GAP-00344":{"line":3039,"offset":529777,"length":182,"previous":"M18-GAP-00343","next":"M18-GAP-00345"},"M18-GAP-00345":{"line":3040,"offset":529959,"length":181,"previous":"M18-GAP-00344","next":"M18-GAP-00346"},"M18-GAP-00346":{"line":3041,"offset":530140,"length":187,"previous":"M18-GAP-00345","next":"M18-GAP-00347"},"M18-GAP-00347":{"line":3042,"offset":530327,"length":179,"previous":"M18-GAP-00346","next":"M18-GAP-00348"},"M18-GAP-00348":{"line":3043,"offset":530506,"length":190,"previous":"M18-GAP-00347","next":"M18-GAP-00349"},"M18-GAP-00349":{"line":3044,"offset":530696,"length":183,"previous":"M18-GAP-00348","next":"M18-GAP-00350"},"M18-GAP-00350":{"line":3045,"offset":530879,"length":185,"previous":"M18-GAP-00349","next":"M18-GAP-00351"},"M18-GAP-00351":{"line":3046,"offset":531064,"length":180,"previous":"M18-GAP-00350","next":"M18-GAP-00352"},"M18-GAP-00352":{"line":3047,"offset":531244,"length":183,"previous":"M18-GAP-00351","next":"M18-GAP-00353"},"M18-GAP-00353":{"line":3048,"offset":531427,"length":176,"previous":"M18-GAP-00352","next":"M18-GAP-00354"},"M18-GAP-00354":{"line":3049,"offset":531603,"length":183,"previous":"M18-GAP-00353","next":"M18-GAP-00355"},"M18-GAP-00355":{"line":3050,"offset":531786,"length":176,"previous":"M18-GAP-00354","next":"M18-GAP-00356"},"M18-GAP-00356":{"line":3051,"offset":531962,"length":177,"previous":"M18-GAP-00355","next":"M18-GAP-00357"},"M18-GAP-00357":{"line":3052,"offset":532139,"length":172,"previous":"M18-GAP-00356","next":"M18-GAP-00358"},"M18-GAP-00358":{"line":3053,"offset":532311,"length":176,"previous":"M18-GAP-00357","next":"M18-GAP-00359"},"M18-GAP-00359":{"line":3054,"offset":532487,"length":181,"previous":"M18-GAP-00358","next":"M18-GAP-00360"},"M18-GAP-00360":{"line":3055,"offset":532668,"length":182,"previous":"M18-GAP-00359","next":"M18-GAP-00361"},"M18-GAP-00361":{"line":3056,"offset":532850,"length":178,"previous":"M18-GAP-00360","next":"M18-GAP-00362"},"M18-GAP-00362":{"line":3057,"offset":533028,"length":176,"previous":"M18-GAP-00361","next":"M18-GAP-00363"},"M18-GAP-00363":{"line":3058,"offset":533204,"length":175,"previous":"M18-GAP-00362","next":"M18-GAP-00364"},"M18-GAP-00364":{"line":3059,"offset":533379,"length":185,"previous":"M18-GAP-00363","next":"M18-GAP-00365"},"M18-GAP-00365":{"line":3060,"offset":533564,"length":179,"previous":"M18-GAP-00364","next":"M18-GAP-00366"},"M18-GAP-00366":{"line":3061,"offset":533743,"length":181,"previous":"M18-GAP-00365","next":"M18-GAP-00367"},"M18-GAP-00367":{"line":3062,"offset":533924,"length":180,"previous":"M18-GAP-00366","next":"M18-GAP-00368"},"M18-GAP-00368":{"line":3063,"offset":534104,"length":181,"previous":"M18-GAP-00367","next":"M18-GAP-00369"},"M18-GAP-00369":{"line":3064,"offset":534285,"length":176,"previous":"M18-GAP-00368","next":"M18-GAP-00370"},"M18-GAP-00370":{"line":3065,"offset":534461,"length":175,"previous":"M18-GAP-00369","next":"M18-GAP-00371"},"M18-GAP-00371":{"line":3066,"offset":534636,"length":182,"previous":"M18-GAP-00370","next":"M18-GAP-00372"},"M18-GAP-00372":{"line":3067,"offset":534818,"length":182,"previous":"M18-GAP-00371","next":"M18-GAP-00373"},"M18-GAP-00373":{"line":3068,"offset":535000,"length":171,"previous":"M18-GAP-00372","next":"M18-GAP-00374"},"M18-GAP-00374":{"line":3069,"offset":535171,"length":177,"previous":"M18-GAP-00373","next":"M18-GAP-00375"},"M18-GAP-00375":{"line":3070,"offset":535348,"length":172,"previous":"M18-GAP-00374","next":"M18-GAP-00376"},"M18-GAP-00376":{"line":3071,"offset":535520,"length":179,"previous":"M18-GAP-00375","next":"M18-GAP-00377"},"M18-GAP-00377":{"line":3072,"offset":535699,"length":177,"previous":"M18-GAP-00376","next":"M18-GAP-00378"},"M18-GAP-00378":{"line":3073,"offset":535876,"length":179,"previous":"M18-GAP-00377","next":"M18-GAP-00379"},"M18-GAP-00379":{"line":3074,"offset":536055,"length":180,"previous":"M18-GAP-00378","next":"M18-GAP-00380"},"M18-GAP-00380":{"line":3075,"offset":536235,"length":175,"previous":"M18-GAP-00379","next":"M18-GAP-00381"},"M18-GAP-00381":{"line":3076,"offset":536410,"length":177,"previous":"M18-GAP-00380","next":"M18-GAP-00382"},"M18-GAP-00382":{"line":3077,"offset":536587,"length":174,"previous":"M18-GAP-00381","next":"M18-GAP-00383"},"M18-GAP-00383":{"line":3078,"offset":536761,"length":172,"previous":"M18-GAP-00382","next":"M18-GAP-00384"},"M18-GAP-00384":{"line":3079,"offset":536933,"length":172,"previous":"M18-GAP-00383","next":"M18-GAP-00385"},"M18-GAP-00385":{"line":3080,"offset":537105,"length":175,"previous":"M18-GAP-00384","next":"M18-GAP-00386"},"M18-GAP-00386":{"line":3081,"offset":537280,"length":174,"previous":"M18-GAP-00385","next":"M18-GAP-00387"},"M18-GAP-00387":{"line":3082,"offset":537454,"length":180,"previous":"M18-GAP-00386","next":"M18-GAP-00388"},"M18-GAP-00388":{"line":3083,"offset":537634,"length":173,"previous":"M18-GAP-00387","next":"M18-GAP-00389"},"M18-GAP-00389":{"line":3084,"offset":537807,"length":178,"previous":"M18-GAP-00388","next":"M18-GAP-00390"},"M18-GAP-00390":{"line":3085,"offset":537985,"length":179,"previous":"M18-GAP-00389","next":"M18-GAP-00391"},"M18-GAP-00391":{"line":3086,"offset":538164,"length":176,"previous":"M18-GAP-00390","next":"M18-GAP-00392"},"M18-GAP-00392":{"line":3087,"offset":538340,"length":175,"previous":"M18-GAP-00391","next":"M18-GAP-00393"},"M18-GAP-00393":{"line":3088,"offset":538515,"length":174,"previous":"M18-GAP-00392","next":"M18-GAP-00394"},"M18-GAP-00394":{"line":3089,"offset":538689,"length":171,"previous":"M18-GAP-00393","next":"M18-GAP-00395"},"M18-GAP-00395":{"line":3090,"offset":538860,"length":170,"previous":"M18-GAP-00394","next":"M18-GAP-00396"},"M18-GAP-00396":{"line":3091,"offset":539030,"length":173,"previous":"M18-GAP-00395","next":"M18-GAP-00397"},"M18-GAP-00397":{"line":3092,"offset":539203,"length":176,"previous":"M18-GAP-00396","next":"M18-GAP-00398"},"M18-GAP-00398":{"line":3093,"offset":539379,"length":178,"previous":"M18-GAP-00397","next":"M18-GAP-00399"},"M18-GAP-00399":{"line":3094,"offset":539557,"length":173,"previous":"M18-GAP-00398","next":"M18-GAP-00400"},"M18-GAP-00400":{"line":3095,"offset":539730,"length":176,"previous":"M18-GAP-00399","next":"M18-GAP-00401"},"M18-GAP-00401":{"line":3096,"offset":539906,"length":177,"previous":"M18-GAP-00400","next":"M18-GAP-00402"},"M18-GAP-00402":{"line":3097,"offset":540083,"length":176,"previous":"M18-GAP-00401","next":"M18-GAP-00403"},"M18-GAP-00403":{"line":3098,"offset":540259,"length":178,"previous":"M18-GAP-00402","next":"M18-GAP-00404"},"M18-GAP-00404":{"line":3099,"offset":540437,"length":182,"previous":"M18-GAP-00403","next":"M18-GAP-00405"},"M18-GAP-00405":{"line":3100,"offset":540619,"length":181,"previous":"M18-GAP-00404","next":"M18-GAP-00406"},"M18-GAP-00406":{"line":3101,"offset":540800,"length":178,"previous":"M18-GAP-00405","next":"M18-GAP-00407"},"M18-GAP-00407":{"line":3102,"offset":540978,"length":179,"previous":"M18-GAP-00406","next":"M18-GAP-00408"},"M18-GAP-00408":{"line":3103,"offset":541157,"length":176,"previous":"M18-GAP-00407","next":"M18-GAP-00409"},"M18-GAP-00409":{"line":3104,"offset":541333,"length":170,"previous":"M18-GAP-00408","next":"M18-GAP-00410"},"M18-GAP-00410":{"line":3105,"offset":541503,"length":175,"previous":"M18-GAP-00409","next":"M18-GAP-00411"},"M18-GAP-00411":{"line":3106,"offset":541678,"length":174,"previous":"M18-GAP-00410","next":"M18-GAP-00412"},"M18-GAP-00412":{"line":3107,"offset":541852,"length":179,"previous":"M18-GAP-00411","next":"M18-GAP-00413"},"M18-GAP-00413":{"line":3108,"offset":542031,"length":174,"previous":"M18-GAP-00412","next":"M18-GAP-00414"},"M18-GAP-00414":{"line":3109,"offset":542205,"length":173,"previous":"M18-GAP-00413","next":"M18-GAP-00415"},"M18-GAP-00415":{"line":3110,"offset":542378,"length":180,"previous":"M18-GAP-00414","next":"M18-GAP-00416"},"M18-GAP-00416":{"line":3111,"offset":542558,"length":178,"previous":"M18-GAP-00415","next":"M18-GAP-00417"},"M18-GAP-00417":{"line":3112,"offset":542736,"length":178,"previous":"M18-GAP-00416","next":"M18-GAP-00418"},"M18-GAP-00418":{"line":3113,"offset":542914,"length":174,"previous":"M18-GAP-00417","next":"M18-GAP-00419"},"M18-GAP-00419":{"line":3114,"offset":543088,"length":187,"previous":"M18-GAP-00418","next":"M18-GAP-00420"},"M18-GAP-00420":{"line":3115,"offset":543275,"length":174,"previous":"M18-GAP-00419","next":"M18-GAP-00421"},"M18-GAP-00421":{"line":3116,"offset":543449,"length":175,"previous":"M18-GAP-00420","next":"M18-GAP-00422"},"M18-GAP-00422":{"line":3117,"offset":543624,"length":177,"previous":"M18-GAP-00421","next":"M18-GAP-00423"},"M18-GAP-00423":{"line":3118,"offset":543801,"length":175,"previous":"M18-GAP-00422","next":"M18-GAP-00424"},"M18-GAP-00424":{"line":3119,"offset":543976,"length":181,"previous":"M18-GAP-00423","next":"M18-GAP-00425"},"M18-GAP-00425":{"line":3120,"offset":544157,"length":175,"previous":"M18-GAP-00424","next":"M18-GAP-00426"},"M18-GAP-00426":{"line":3121,"offset":544332,"length":178,"previous":"M18-GAP-00425","next":"M18-GAP-00427"},"M18-GAP-00427":{"line":3122,"offset":544510,"length":173,"previous":"M18-GAP-00426","next":"M18-GAP-00428"},"M18-GAP-00428":{"line":3123,"offset":544683,"length":175,"previous":"M18-GAP-00427","next":"M18-GAP-00429"},"M18-GAP-00429":{"line":3124,"offset":544858,"length":175,"previous":"M18-GAP-00428","next":"M18-GAP-00430"},"M18-GAP-00430":{"line":3125,"offset":545033,"length":175,"previous":"M18-GAP-00429","next":"M18-GAP-00431"},"M18-GAP-00431":{"line":3126,"offset":545208,"length":173,"previous":"M18-GAP-00430","next":"M18-GAP-00432"},"M18-GAP-00432":{"line":3127,"offset":545381,"length":177,"previous":"M18-GAP-00431","next":"M18-GAP-00433"},"M18-GAP-00433":{"line":3128,"offset":545558,"length":174,"previous":"M18-GAP-00432","next":"M18-GAP-00434"},"M18-GAP-00434":{"line":3129,"offset":545732,"length":180,"previous":"M18-GAP-00433","next":"M18-GAP-00435"},"M18-GAP-00435":{"line":3130,"offset":545912,"length":180,"previous":"M18-GAP-00434","next":"M18-GAP-00436"},"M18-GAP-00436":{"line":3131,"offset":546092,"length":172,"previous":"M18-GAP-00435","next":"M18-GAP-00437"},"M18-GAP-00437":{"line":3132,"offset":546264,"length":175,"previous":"M18-GAP-00436","next":"M18-GAP-00438"},"M18-GAP-00438":{"line":3133,"offset":546439,"length":172,"previous":"M18-GAP-00437","next":"M18-GAP-00439"},"M18-GAP-00439":{"line":3134,"offset":546611,"length":178,"previous":"M18-GAP-00438","next":"M18-GAP-00440"},"M18-GAP-00440":{"line":3135,"offset":546789,"length":185,"previous":"M18-GAP-00439","next":"M18-GAP-00441"},"M18-GAP-00441":{"line":3136,"offset":546974,"length":177,"previous":"M18-GAP-00440","next":"M18-GAP-00442"},"M18-GAP-00442":{"line":3137,"offset":547151,"length":179,"previous":"M18-GAP-00441","next":"M18-GAP-00443"},"M18-GAP-00443":{"line":3138,"offset":547330,"length":182,"previous":"M18-GAP-00442","next":"M18-GAP-00444"},"M18-GAP-00444":{"line":3139,"offset":547512,"length":178,"previous":"M18-GAP-00443","next":"M18-GAP-00445"},"M18-GAP-00445":{"line":3140,"offset":547690,"length":183,"previous":"M18-GAP-00444","next":"M18-GAP-00446"},"M18-GAP-00446":{"line":3141,"offset":547873,"length":185,"previous":"M18-GAP-00445","next":"M18-GAP-00447"},"M18-GAP-00447":{"line":3142,"offset":548058,"length":177,"previous":"M18-GAP-00446","next":"M18-GAP-00448"},"M18-GAP-00448":{"line":3143,"offset":548235,"length":183,"previous":"M18-GAP-00447","next":"M18-GAP-00449"},"M18-GAP-00449":{"line":3144,"offset":548418,"length":180,"previous":"M18-GAP-00448","next":"M18-GAP-00450"},"M18-GAP-00450":{"line":3145,"offset":548598,"length":177,"previous":"M18-GAP-00449","next":"M18-GAP-00451"},"M18-GAP-00451":{"line":3146,"offset":548775,"length":176,"previous":"M18-GAP-00450","next":"M19-GAP-00001"},"M19-GAP-00001":{"line":3147,"offset":548951,"length":153,"previous":"M18-GAP-00451","next":"M19-GAP-00002"},"M19-GAP-00002":{"line":3148,"offset":549104,"length":155,"previous":"M19-GAP-00001","next":"M19-GAP-00003"},"M19-GAP-00003":{"line":3149,"offset":549259,"length":152,"previous":"M19-GAP-00002","next":"M19-GAP-00004"},"M19-GAP-00004":{"line":3150,"offset":549411,"length":152,"previous":"M19-GAP-00003","next":"M19-GAP-00005"},"M19-GAP-00005":{"line":3151,"offset":549563,"length":153,"previous":"M19-GAP-00004","next":"M19-GAP-00006"},"M19-GAP-00006":{"line":3152,"offset":549716,"length":159,"previous":"M19-GAP-00005","next":"M19-GAP-00007"},"M19-GAP-00007":{"line":3153,"offset":549875,"length":149,"previous":"M19-GAP-00006","next":"M19-GAP-00008"},"M19-GAP-00008":{"line":3154,"offset":550024,"length":152,"previous":"M19-GAP-00007","next":"M19-GAP-00009"},"M19-GAP-00009":{"line":3155,"offset":550176,"length":150,"previous":"M19-GAP-00008","next":"M19-GAP-00010"},"M19-GAP-00010":{"line":3156,"offset":550326,"length":154,"previous":"M19-GAP-00009","next":"M19-GAP-00011"},"M19-GAP-00011":{"line":3157,"offset":550480,"length":151,"previous":"M19-GAP-00010","next":"M19-GAP-00012"},"M19-GAP-00012":{"line":3158,"offset":550631,"length":155,"previous":"M19-GAP-00011","next":"M19-GAP-00013"},"M19-GAP-00013":{"line":3159,"offset":550786,"length":156,"previous":"M19-GAP-00012","next":"M19-GAP-00014"},"M19-GAP-00014":{"line":3160,"offset":550942,"length":154,"previous":"M19-GAP-00013","next":"M19-GAP-00015"},"M19-GAP-00015":{"line":3161,"offset":551096,"length":163,"previous":"M19-GAP-00014","next":"M19-GAP-00016"},"M19-GAP-00016":{"line":3162,"offset":551259,"length":157,"previous":"M19-GAP-00015","next":"M19-GAP-00017"},"M19-GAP-00017":{"line":3163,"offset":551416,"length":152,"previous":"M19-GAP-00016","next":"M19-GAP-00018"},"M19-GAP-00018":{"line":3164,"offset":551568,"length":154,"previous":"M19-GAP-00017","next":"M19-GAP-00019"},"M19-GAP-00019":{"line":3165,"offset":551722,"length":151,"previous":"M19-GAP-00018","next":"M19-GAP-00020"},"M19-GAP-00020":{"line":3166,"offset":551873,"length":153,"previous":"M19-GAP-00019","next":"M20-GAP-00001"},"M20-GAP-00001":{"line":3167,"offset":552026,"length":161,"previous":"M19-GAP-00020","next":"M20-GAP-00002"},"M20-GAP-00002":{"line":3168,"offset":552187,"length":167,"previous":"M20-GAP-00001","next":"M20-GAP-00003"},"M20-GAP-00003":{"line":3169,"offset":552354,"length":157,"previous":"M20-GAP-00002","next":"M20-GAP-00004"},"M20-GAP-00004":{"line":3170,"offset":552511,"length":169,"previous":"M20-GAP-00003","next":"M20-GAP-00005"},"M20-GAP-00005":{"line":3171,"offset":552680,"length":162,"previous":"M20-GAP-00004","next":"M20-GAP-00006"},"M20-GAP-00006":{"line":3172,"offset":552842,"length":171,"previous":"M20-GAP-00005","next":"M20-GAP-00007"},"M20-GAP-00007":{"line":3173,"offset":553013,"length":162,"previous":"M20-GAP-00006","next":"M20-GAP-00008"},"M20-GAP-00008":{"line":3174,"offset":553175,"length":169,"previous":"M20-GAP-00007","next":"M20-GAP-00009"},"M20-GAP-00009":{"line":3175,"offset":553344,"length":161,"previous":"M20-GAP-00008","next":"M20-GAP-00010"},"M20-GAP-00010":{"line":3176,"offset":553505,"length":161,"previous":"M20-GAP-00009","next":"M20-GAP-00011"},"M20-GAP-00011":{"line":3177,"offset":553666,"length":158,"previous":"M20-GAP-00010","next":"M20-GAP-00012"},"M20-GAP-00012":{"line":3178,"offset":553824,"length":162,"previous":"M20-GAP-00011","next":"M20-GAP-00013"},"M20-GAP-00013":{"line":3179,"offset":553986,"length":171,"previous":"M20-GAP-00012","next":"M20-GAP-00014"},"M20-GAP-00014":{"line":3180,"offset":554157,"length":162,"previous":"M20-GAP-00013","next":"M20-GAP-00015"},"M20-GAP-00015":{"line":3181,"offset":554319,"length":162,"previous":"M20-GAP-00014","next":"M20-GAP-00016"},"M20-GAP-00016":{"line":3182,"offset":554481,"length":166,"previous":"M20-GAP-00015","next":"M20-GAP-00017"},"M20-GAP-00017":{"line":3183,"offset":554647,"length":166,"previous":"M20-GAP-00016","next":"M20-GAP-00018"},"M20-GAP-00018":{"line":3184,"offset":554813,"length":166,"previous":"M20-GAP-00017","next":"M20-GAP-00019"},"M20-GAP-00019":{"line":3185,"offset":554979,"length":174,"previous":"M20-GAP-00018","next":"M20-GAP-00020"},"M20-GAP-00020":{"line":3186,"offset":555153,"length":175,"previous":"M20-GAP-00019","next":"M20-GAP-00021"},"M20-GAP-00021":{"line":3187,"offset":555328,"length":169,"previous":"M20-GAP-00020","next":"M20-GAP-00022"},"M20-GAP-00022":{"line":3188,"offset":555497,"length":168,"previous":"M20-GAP-00021","next":"M20-GAP-00023"},"M20-GAP-00023":{"line":3189,"offset":555665,"length":169,"previous":"M20-GAP-00022","next":"M20-GAP-00024"},"M20-GAP-00024":{"line":3190,"offset":555834,"length":164,"previous":"M20-GAP-00023","next":"M20-GAP-00025"},"M20-GAP-00025":{"line":3191,"offset":555998,"length":162,"previous":"M20-GAP-00024","next":"M20-GAP-00026"},"M20-GAP-00026":{"line":3192,"offset":556160,"length":168,"previous":"M20-GAP-00025","next":"M20-GAP-00027"},"M20-GAP-00027":{"line":3193,"offset":556328,"length":170,"previous":"M20-GAP-00026","next":"M20-GAP-00028"},"M20-GAP-00028":{"line":3194,"offset":556498,"length":166,"previous":"M20-GAP-00027","next":"M20-GAP-00029"},"M20-GAP-00029":{"line":3195,"offset":556664,"length":162,"previous":"M20-GAP-00028","next":"M20-GAP-00030"},"M20-GAP-00030":{"line":3196,"offset":556826,"length":176,"previous":"M20-GAP-00029","next":"M20-GAP-00031"},"M20-GAP-00031":{"line":3197,"offset":557002,"length":173,"previous":"M20-GAP-00030","next":"M20-GAP-00032"},"M20-GAP-00032":{"line":3198,"offset":557175,"length":173,"previous":"M20-GAP-00031","next":"M20-GAP-00033"},"M20-GAP-00033":{"line":3199,"offset":557348,"length":175,"previous":"M20-GAP-00032","next":"M20-GAP-00034"},"M20-GAP-00034":{"line":3200,"offset":557523,"length":174,"previous":"M20-GAP-00033","next":"M20-GAP-00035"},"M20-GAP-00035":{"line":3201,"offset":557697,"length":172,"previous":"M20-GAP-00034","next":"M20-GAP-00036"},"M20-GAP-00036":{"line":3202,"offset":557869,"length":176,"previous":"M20-GAP-00035","next":"M20-GAP-00037"},"M20-GAP-00037":{"line":3203,"offset":558045,"length":177,"previous":"M20-GAP-00036","next":"M20-GAP-00038"},"M20-GAP-00038":{"line":3204,"offset":558222,"length":172,"previous":"M20-GAP-00037","next":"M20-GAP-00039"},"M20-GAP-00039":{"line":3205,"offset":558394,"length":176,"previous":"M20-GAP-00038","next":"M20-GAP-00040"},"M20-GAP-00040":{"line":3206,"offset":558570,"length":177,"previous":"M20-GAP-00039","next":"M20-GAP-00041"},"M20-GAP-00041":{"line":3207,"offset":558747,"length":174,"previous":"M20-GAP-00040","next":"M20-GAP-00042"},"M20-GAP-00042":{"line":3208,"offset":558921,"length":157,"previous":"M20-GAP-00041","next":"M20-GAP-00043"},"M20-GAP-00043":{"line":3209,"offset":559078,"length":162,"previous":"M20-GAP-00042","next":"M20-GAP-00044"},"M20-GAP-00044":{"line":3210,"offset":559240,"length":168,"previous":"M20-GAP-00043","next":"M20-GAP-00045"},"M20-GAP-00045":{"line":3211,"offset":559408,"length":161,"previous":"M20-GAP-00044","next":"M20-GAP-00046"},"M20-GAP-00046":{"line":3212,"offset":559569,"length":164,"previous":"M20-GAP-00045","next":"M20-GAP-00047"},"M20-GAP-00047":{"line":3213,"offset":559733,"length":173,"previous":"M20-GAP-00046","next":"M20-GAP-00048"},"M20-GAP-00048":{"line":3214,"offset":559906,"length":160,"previous":"M20-GAP-00047","next":"M20-GAP-00049"},"M20-GAP-00049":{"line":3215,"offset":560066,"length":165,"previous":"M20-GAP-00048","next":"M20-GAP-00050"},"M20-GAP-00050":{"line":3216,"offset":560231,"length":176,"previous":"M20-GAP-00049","next":"M20-GAP-00051"},"M20-GAP-00051":{"line":3217,"offset":560407,"length":177,"previous":"M20-GAP-00050","next":"M20-GAP-00052"},"M20-GAP-00052":{"line":3218,"offset":560584,"length":163,"previous":"M20-GAP-00051","next":"M20-GAP-00053"},"M20-GAP-00053":{"line":3219,"offset":560747,"length":171,"previous":"M20-GAP-00052","next":"M20-GAP-00054"},"M20-GAP-00054":{"line":3220,"offset":560918,"length":164,"previous":"M20-GAP-00053","next":"M20-GAP-00055"},"M20-GAP-00055":{"line":3221,"offset":561082,"length":163,"previous":"M20-GAP-00054","next":"M20-GAP-00056"},"M20-GAP-00056":{"line":3222,"offset":561245,"length":159,"previous":"M20-GAP-00055","next":"M20-GAP-00057"},"M20-GAP-00057":{"line":3223,"offset":561404,"length":163,"previous":"M20-GAP-00056","next":"M20-GAP-00058"},"M20-GAP-00058":{"line":3224,"offset":561567,"length":160,"previous":"M20-GAP-00057","next":"M20-GAP-00059"},"M20-GAP-00059":{"line":3225,"offset":561727,"length":168,"previous":"M20-GAP-00058","next":"M20-GAP-00060"},"M20-GAP-00060":{"line":3226,"offset":561895,"length":164,"previous":"M20-GAP-00059","next":"M20-GAP-00061"},"M20-GAP-00061":{"line":3227,"offset":562059,"length":163,"previous":"M20-GAP-00060","next":"M20-GAP-00062"},"M20-GAP-00062":{"line":3228,"offset":562222,"length":165,"previous":"M20-GAP-00061","next":"M20-GAP-00063"},"M20-GAP-00063":{"line":3229,"offset":562387,"length":171,"previous":"M20-GAP-00062","next":"M20-GAP-00064"},"M20-GAP-00064":{"line":3230,"offset":562558,"length":165,"previous":"M20-GAP-00063","next":"M20-GAP-00065"},"M20-GAP-00065":{"line":3231,"offset":562723,"length":165,"previous":"M20-GAP-00064","next":"M20-GAP-00066"},"M20-GAP-00066":{"line":3232,"offset":562888,"length":152,"previous":"M20-GAP-00065","next":"M20-GAP-00067"},"M20-GAP-00067":{"line":3233,"offset":563040,"length":159,"previous":"M20-GAP-00066","next":"M20-GAP-00068"},"M20-GAP-00068":{"line":3234,"offset":563199,"length":159,"previous":"M20-GAP-00067","next":"M20-GAP-00069"},"M20-GAP-00069":{"line":3235,"offset":563358,"length":160,"previous":"M20-GAP-00068","next":"M20-GAP-00070"},"M20-GAP-00070":{"line":3236,"offset":563518,"length":154,"previous":"M20-GAP-00069","next":"M20-GAP-00071"},"M20-GAP-00071":{"line":3237,"offset":563672,"length":157,"previous":"M20-GAP-00070","next":"M20-GAP-00072"},"M20-GAP-00072":{"line":3238,"offset":563829,"length":159,"previous":"M20-GAP-00071","next":"M20-GAP-00073"},"M20-GAP-00073":{"line":3239,"offset":563988,"length":154,"previous":"M20-GAP-00072","next":"M20-GAP-00074"},"M20-GAP-00074":{"line":3240,"offset":564142,"length":160,"previous":"M20-GAP-00073","next":"M20-GAP-00075"},"M20-GAP-00075":{"line":3241,"offset":564302,"length":162,"previous":"M20-GAP-00074","next":"M20-GAP-00076"},"M20-GAP-00076":{"line":3242,"offset":564464,"length":153,"previous":"M20-GAP-00075","next":"M20-GAP-00077"},"M20-GAP-00077":{"line":3243,"offset":564617,"length":154,"previous":"M20-GAP-00076","next":"M20-GAP-00078"},"M20-GAP-00078":{"line":3244,"offset":564771,"length":153,"previous":"M20-GAP-00077","next":"M20-GAP-00079"},"M20-GAP-00079":{"line":3245,"offset":564924,"length":153,"previous":"M20-GAP-00078","next":"M20-GAP-00080"},"M20-GAP-00080":{"line":3246,"offset":565077,"length":154,"previous":"M20-GAP-00079","next":"M20-GAP-00081"},"M20-GAP-00081":{"line":3247,"offset":565231,"length":158,"previous":"M20-GAP-00080","next":"M20-GAP-00082"},"M20-GAP-00082":{"line":3248,"offset":565389,"length":157,"previous":"M20-GAP-00081","next":"M20-GAP-00083"},"M20-GAP-00083":{"line":3249,"offset":565546,"length":157,"previous":"M20-GAP-00082","next":"M20-GAP-00084"},"M20-GAP-00084":{"line":3250,"offset":565703,"length":154,"previous":"M20-GAP-00083","next":"M20-GAP-00085"},"M20-GAP-00085":{"line":3251,"offset":565857,"length":154,"previous":"M20-GAP-00084","next":"M20-GAP-00086"},"M20-GAP-00086":{"line":3252,"offset":566011,"length":154,"previous":"M20-GAP-00085","next":"M20-GAP-00087"},"M20-GAP-00087":{"line":3253,"offset":566165,"length":157,"previous":"M20-GAP-00086","next":"M20-GAP-00088"},"M20-GAP-00088":{"line":3254,"offset":566322,"length":153,"previous":"M20-GAP-00087","next":"M20-GAP-00089"},"M20-GAP-00089":{"line":3255,"offset":566475,"length":153,"previous":"M20-GAP-00088","next":"M21-GAP-00001"},"M21-GAP-00001":{"line":3256,"offset":566628,"length":156,"previous":"M20-GAP-00089","next":"M21-GAP-00002"},"M21-GAP-00002":{"line":3257,"offset":566784,"length":152,"previous":"M21-GAP-00001","next":"M21-GAP-00003"},"M21-GAP-00003":{"line":3258,"offset":566936,"length":161,"previous":"M21-GAP-00002","next":"M21-GAP-00004"},"M21-GAP-00004":{"line":3259,"offset":567097,"length":150,"previous":"M21-GAP-00003","next":"M21-GAP-00005"},"M21-GAP-00005":{"line":3260,"offset":567247,"length":157,"previous":"M21-GAP-00004","next":"M21-GAP-00006"},"M21-GAP-00006":{"line":3261,"offset":567404,"length":157,"previous":"M21-GAP-00005","next":"M21-GAP-00007"},"M21-GAP-00007":{"line":3262,"offset":567561,"length":157,"previous":"M21-GAP-00006","next":"M21-GAP-00008"},"M21-GAP-00008":{"line":3263,"offset":567718,"length":149,"previous":"M21-GAP-00007","next":"M21-GAP-00009"},"M21-GAP-00009":{"line":3264,"offset":567867,"length":155,"previous":"M21-GAP-00008","next":"M21-GAP-00010"},"M21-GAP-00010":{"line":3265,"offset":568022,"length":156,"previous":"M21-GAP-00009","next":"M21-GAP-00011"},"M21-GAP-00011":{"line":3266,"offset":568178,"length":153,"previous":"M21-GAP-00010","next":"M21-GAP-00012"},"M21-GAP-00012":{"line":3267,"offset":568331,"length":156,"previous":"M21-GAP-00011","next":"M21-GAP-00013"},"M21-GAP-00013":{"line":3268,"offset":568487,"length":155,"previous":"M21-GAP-00012","next":"M21-GAP-00014"},"M21-GAP-00014":{"line":3269,"offset":568642,"length":160,"previous":"M21-GAP-00013","next":"M21-GAP-00015"},"M21-GAP-00015":{"line":3270,"offset":568802,"length":156,"previous":"M21-GAP-00014","next":"M21-GAP-00016"},"M21-GAP-00016":{"line":3271,"offset":568958,"length":154,"previous":"M21-GAP-00015","next":"M21-GAP-00017"},"M21-GAP-00017":{"line":3272,"offset":569112,"length":156,"previous":"M21-GAP-00016","next":"M21-GAP-00018"},"M21-GAP-00018":{"line":3273,"offset":569268,"length":151,"previous":"M21-GAP-00017","next":"M21-GAP-00019"},"M21-GAP-00019":{"line":3274,"offset":569419,"length":152,"previous":"M21-GAP-00018","next":"M21-GAP-00020"},"M21-GAP-00020":{"line":3275,"offset":569571,"length":172,"previous":"M21-GAP-00019","next":"M21-GAP-00021"},"M21-GAP-00021":{"line":3276,"offset":569743,"length":171,"previous":"M21-GAP-00020","next":"M21-GAP-00022"},"M21-GAP-00022":{"line":3277,"offset":569914,"length":173,"previous":"M21-GAP-00021","next":"M21-GAP-00023"},"M21-GAP-00023":{"line":3278,"offset":570087,"length":176,"previous":"M21-GAP-00022","next":"M21-GAP-00024"},"M21-GAP-00024":{"line":3279,"offset":570263,"length":174,"previous":"M21-GAP-00023","next":"M21-GAP-00025"},"M21-GAP-00025":{"line":3280,"offset":570437,"length":176,"previous":"M21-GAP-00024","next":"M21-GAP-00026"},"M21-GAP-00026":{"line":3281,"offset":570613,"length":173,"previous":"M21-GAP-00025","next":"M21-GAP-00027"},"M21-GAP-00027":{"line":3282,"offset":570786,"length":176,"previous":"M21-GAP-00026","next":"M21-GAP-00028"},"M21-GAP-00028":{"line":3283,"offset":570962,"length":165,"previous":"M21-GAP-00027","next":"M21-GAP-00029"},"M21-GAP-00029":{"line":3284,"offset":571127,"length":166,"previous":"M21-GAP-00028","next":"M21-GAP-00030"},"M21-GAP-00030":{"line":3285,"offset":571293,"length":167,"previous":"M21-GAP-00029","next":"M21-GAP-00031"},"M21-GAP-00031":{"line":3286,"offset":571460,"length":177,"previous":"M21-GAP-00030","next":"M21-GAP-00032"},"M21-GAP-00032":{"line":3287,"offset":571637,"length":165,"previous":"M21-GAP-00031","next":"M21-GAP-00033"},"M21-GAP-00033":{"line":3288,"offset":571802,"length":166,"previous":"M21-GAP-00032","next":"M21-GAP-00034"},"M21-GAP-00034":{"line":3289,"offset":571968,"length":166,"previous":"M21-GAP-00033","next":"M21-GAP-00035"},"M21-GAP-00035":{"line":3290,"offset":572134,"length":167,"previous":"M21-GAP-00034","next":"M21-GAP-00036"},"M21-GAP-00036":{"line":3291,"offset":572301,"length":170,"previous":"M21-GAP-00035","next":"M21-GAP-00037"},"M21-GAP-00037":{"line":3292,"offset":572471,"length":170,"previous":"M21-GAP-00036","next":"M21-GAP-00038"},"M21-GAP-00038":{"line":3293,"offset":572641,"length":178,"previous":"M21-GAP-00037","next":"M21-GAP-00039"},"M21-GAP-00039":{"line":3294,"offset":572819,"length":178,"previous":"M21-GAP-00038","next":"M21-GAP-00040"},"M21-GAP-00040":{"line":3295,"offset":572997,"length":176,"previous":"M21-GAP-00039","next":"M21-GAP-00041"},"M21-GAP-00041":{"line":3296,"offset":573173,"length":166,"previous":"M21-GAP-00040","next":"M21-GAP-00042"},"M21-GAP-00042":{"line":3297,"offset":573339,"length":174,"previous":"M21-GAP-00041","next":"M21-GAP-00043"},"M21-GAP-00043":{"line":3298,"offset":573513,"length":169,"previous":"M21-GAP-00042","next":"M21-GAP-00044"},"M21-GAP-00044":{"line":3299,"offset":573682,"length":163,"previous":"M21-GAP-00043","next":"M21-GAP-00045"},"M21-GAP-00045":{"line":3300,"offset":573845,"length":177,"previous":"M21-GAP-00044","next":"M21-GAP-00046"},"M21-GAP-00046":{"line":3301,"offset":574022,"length":177,"previous":"M21-GAP-00045","next":"M21-GAP-00047"},"M21-GAP-00047":{"line":3302,"offset":574199,"length":163,"previous":"M21-GAP-00046","next":"M21-GAP-00048"},"M21-GAP-00048":{"line":3303,"offset":574362,"length":163,"previous":"M21-GAP-00047","next":"M21-GAP-00049"},"M21-GAP-00049":{"line":3304,"offset":574525,"length":163,"previous":"M21-GAP-00048","next":"M21-GAP-00050"},"M21-GAP-00050":{"line":3305,"offset":574688,"length":163,"previous":"M21-GAP-00049","next":"M21-GAP-00051"},"M21-GAP-00051":{"line":3306,"offset":574851,"length":163,"previous":"M21-GAP-00050","next":"M21-GAP-00052"},"M21-GAP-00052":{"line":3307,"offset":575014,"length":163,"previous":"M21-GAP-00051","next":"M21-GAP-00053"},"M21-GAP-00053":{"line":3308,"offset":575177,"length":184,"previous":"M21-GAP-00052","next":"M21-GAP-00054"},"M21-GAP-00054":{"line":3309,"offset":575361,"length":184,"previous":"M21-GAP-00053","next":"M21-GAP-00055"},"M21-GAP-00055":{"line":3310,"offset":575545,"length":187,"previous":"M21-GAP-00054","next":"M21-GAP-00056"},"M21-GAP-00056":{"line":3311,"offset":575732,"length":194,"previous":"M21-GAP-00055","next":"M21-GAP-00057"},"M21-GAP-00057":{"line":3312,"offset":575926,"length":189,"previous":"M21-GAP-00056","next":"M21-GAP-00058"},"M21-GAP-00058":{"line":3313,"offset":576115,"length":189,"previous":"M21-GAP-00057","next":"M21-GAP-00059"},"M21-GAP-00059":{"line":3314,"offset":576304,"length":209,"previous":"M21-GAP-00058","next":"M21-GAP-00060"},"M21-GAP-00060":{"line":3315,"offset":576513,"length":211,"previous":"M21-GAP-00059","next":"M21-GAP-00061"},"M21-GAP-00061":{"line":3316,"offset":576724,"length":215,"previous":"M21-GAP-00060","next":"M21-GAP-00062"},"M21-GAP-00062":{"line":3317,"offset":576939,"length":205,"previous":"M21-GAP-00061","next":"M21-GAP-00063"},"M21-GAP-00063":{"line":3318,"offset":577144,"length":202,"previous":"M21-GAP-00062","next":"M21-GAP-00064"},"M21-GAP-00064":{"line":3319,"offset":577346,"length":204,"previous":"M21-GAP-00063","next":"M21-GAP-00065"},"M21-GAP-00065":{"line":3320,"offset":577550,"length":204,"previous":"M21-GAP-00064","next":"M21-GAP-00066"},"M21-GAP-00066":{"line":3321,"offset":577754,"length":204,"previous":"M21-GAP-00065","next":"M21-GAP-00067"},"M21-GAP-00067":{"line":3322,"offset":577958,"length":199,"previous":"M21-GAP-00066","next":"M21-GAP-00068"},"M21-GAP-00068":{"line":3323,"offset":578157,"length":212,"previous":"M21-GAP-00067","next":"M21-GAP-00069"},"M21-GAP-00069":{"line":3324,"offset":578369,"length":202,"previous":"M21-GAP-00068","next":"M21-GAP-00070"},"M21-GAP-00070":{"line":3325,"offset":578571,"length":201,"previous":"M21-GAP-00069","next":"M21-GAP-00071"},"M21-GAP-00071":{"line":3326,"offset":578772,"length":204,"previous":"M21-GAP-00070","next":"M21-GAP-00072"},"M21-GAP-00072":{"line":3327,"offset":578976,"length":199,"previous":"M21-GAP-00071","next":"M21-GAP-00073"},"M21-GAP-00073":{"line":3328,"offset":579175,"length":200,"previous":"M21-GAP-00072","next":"M21-GAP-00074"},"M21-GAP-00074":{"line":3329,"offset":579375,"length":199,"previous":"M21-GAP-00073","next":"M21-GAP-00075"},"M21-GAP-00075":{"line":3330,"offset":579574,"length":199,"previous":"M21-GAP-00074","next":"M21-GAP-00076"},"M21-GAP-00076":{"line":3331,"offset":579773,"length":199,"previous":"M21-GAP-00075","next":"M21-GAP-00077"},"M21-GAP-00077":{"line":3332,"offset":579972,"length":199,"previous":"M21-GAP-00076","next":"M21-GAP-00078"},"M21-GAP-00078":{"line":3333,"offset":580171,"length":211,"previous":"M21-GAP-00077","next":"M21-GAP-00079"},"M21-GAP-00079":{"line":3334,"offset":580382,"length":214,"previous":"M21-GAP-00078","next":"M21-GAP-00080"},"M21-GAP-00080":{"line":3335,"offset":580596,"length":206,"previous":"M21-GAP-00079","next":"M21-GAP-00081"},"M21-GAP-00081":{"line":3336,"offset":580802,"length":206,"previous":"M21-GAP-00080","next":"M21-GAP-00082"},"M21-GAP-00082":{"line":3337,"offset":581008,"length":206,"previous":"M21-GAP-00081","next":"M21-GAP-00083"},"M21-GAP-00083":{"line":3338,"offset":581214,"length":206,"previous":"M21-GAP-00082","next":"M21-GAP-00084"},"M21-GAP-00084":{"line":3339,"offset":581420,"length":199,"previous":"M21-GAP-00083","next":"M21-GAP-00085"},"M21-GAP-00085":{"line":3340,"offset":581619,"length":200,"previous":"M21-GAP-00084","next":"M21-GAP-00086"},"M21-GAP-00086":{"line":3341,"offset":581819,"length":204,"previous":"M21-GAP-00085","next":"M21-GAP-00087"},"M21-GAP-00087":{"line":3342,"offset":582023,"length":215,"previous":"M21-GAP-00086","next":"M21-GAP-00088"},"M21-GAP-00088":{"line":3343,"offset":582238,"length":212,"previous":"M21-GAP-00087","next":"M21-GAP-00089"},"M21-GAP-00089":{"line":3344,"offset":582450,"length":210,"previous":"M21-GAP-00088","next":"M21-GAP-00090"},"M21-GAP-00090":{"line":3345,"offset":582660,"length":208,"previous":"M21-GAP-00089","next":"M21-GAP-00091"},"M21-GAP-00091":{"line":3346,"offset":582868,"length":211,"previous":"M21-GAP-00090","next":"M21-GAP-00092"},"M21-GAP-00092":{"line":3347,"offset":583079,"length":205,"previous":"M21-GAP-00091","next":"M21-GAP-00093"},"M21-GAP-00093":{"line":3348,"offset":583284,"length":199,"previous":"M21-GAP-00092","next":"M21-GAP-00094"},"M21-GAP-00094":{"line":3349,"offset":583483,"length":202,"previous":"M21-GAP-00093","next":"M21-GAP-00095"},"M21-GAP-00095":{"line":3350,"offset":583685,"length":214,"previous":"M21-GAP-00094","next":"M21-GAP-00096"},"M21-GAP-00096":{"line":3351,"offset":583899,"length":204,"previous":"M21-GAP-00095","next":"M21-GAP-00097"},"M21-GAP-00097":{"line":3352,"offset":584103,"length":204,"previous":"M21-GAP-00096","next":"M21-GAP-00098"},"M21-GAP-00098":{"line":3353,"offset":584307,"length":204,"previous":"M21-GAP-00097","next":"M21-GAP-00099"},"M21-GAP-00099":{"line":3354,"offset":584511,"length":203,"previous":"M21-GAP-00098","next":"M21-GAP-00100"},"M21-GAP-00100":{"line":3355,"offset":584714,"length":203,"previous":"M21-GAP-00099","next":"M21-GAP-00101"},"M21-GAP-00101":{"line":3356,"offset":584917,"length":202,"previous":"M21-GAP-00100","next":"M21-GAP-00102"},"M21-GAP-00102":{"line":3357,"offset":585119,"length":204,"previous":"M21-GAP-00101","next":"M21-GAP-00103"},"M21-GAP-00103":{"line":3358,"offset":585323,"length":207,"previous":"M21-GAP-00102","next":"M21-GAP-00104"},"M21-GAP-00104":{"line":3359,"offset":585530,"length":200,"previous":"M21-GAP-00103","next":"M21-GAP-00105"},"M21-GAP-00105":{"line":3360,"offset":585730,"length":209,"previous":"M21-GAP-00104","next":"M21-GAP-00106"},"M21-GAP-00106":{"line":3361,"offset":585939,"length":198,"previous":"M21-GAP-00105","next":"M21-GAP-00107"},"M21-GAP-00107":{"line":3362,"offset":586137,"length":203,"previous":"M21-GAP-00106","next":"M21-GAP-00108"},"M21-GAP-00108":{"line":3363,"offset":586340,"length":206,"previous":"M21-GAP-00107","next":"M21-GAP-00109"},"M21-GAP-00109":{"line":3364,"offset":586546,"length":205,"previous":"M21-GAP-00108","next":"M21-GAP-00110"},"M21-GAP-00110":{"line":3365,"offset":586751,"length":205,"previous":"M21-GAP-00109","next":"M21-GAP-00111"},"M21-GAP-00111":{"line":3366,"offset":586956,"length":190,"previous":"M21-GAP-00110","next":"M21-GAP-00112"},"M21-GAP-00112":{"line":3367,"offset":587146,"length":190,"previous":"M21-GAP-00111","next":"M21-GAP-00113"},"M21-GAP-00113":{"line":3368,"offset":587336,"length":190,"previous":"M21-GAP-00112","next":"M21-GAP-00114"},"M21-GAP-00114":{"line":3369,"offset":587526,"length":187,"previous":"M21-GAP-00113","next":"M21-GAP-00115"},"M21-GAP-00115":{"line":3370,"offset":587713,"length":204,"previous":"M21-GAP-00114","next":"M21-GAP-00116"},"M21-GAP-00116":{"line":3371,"offset":587917,"length":207,"previous":"M21-GAP-00115","next":"M21-GAP-00117"},"M21-GAP-00117":{"line":3372,"offset":588124,"length":207,"previous":"M21-GAP-00116","next":"M21-GAP-00118"},"M21-GAP-00118":{"line":3373,"offset":588331,"length":207,"previous":"M21-GAP-00117","next":"M21-GAP-00119"},"M21-GAP-00119":{"line":3374,"offset":588538,"length":207,"previous":"M21-GAP-00118","next":"M21-GAP-00120"},"M21-GAP-00120":{"line":3375,"offset":588745,"length":207,"previous":"M21-GAP-00119","next":"M21-GAP-00121"},"M21-GAP-00121":{"line":3376,"offset":588952,"length":207,"previous":"M21-GAP-00120","next":"M21-GAP-00122"},"M21-GAP-00122":{"line":3377,"offset":589159,"length":210,"previous":"M21-GAP-00121","next":"M21-GAP-00123"},"M21-GAP-00123":{"line":3378,"offset":589369,"length":210,"previous":"M21-GAP-00122","next":"M21-GAP-00124"},"M21-GAP-00124":{"line":3379,"offset":589579,"length":210,"previous":"M21-GAP-00123","next":"M21-GAP-00125"},"M21-GAP-00125":{"line":3380,"offset":589789,"length":209,"previous":"M21-GAP-00124","next":"M21-GAP-00126"},"M21-GAP-00126":{"line":3381,"offset":589998,"length":214,"previous":"M21-GAP-00125","next":"M21-GAP-00127"},"M21-GAP-00127":{"line":3382,"offset":590212,"length":214,"previous":"M21-GAP-00126","next":"M21-GAP-00128"},"M21-GAP-00128":{"line":3383,"offset":590426,"length":214,"previous":"M21-GAP-00127","next":"M21-GAP-00129"},"M21-GAP-00129":{"line":3384,"offset":590640,"length":214,"previous":"M21-GAP-00128","next":"M21-GAP-00130"},"M21-GAP-00130":{"line":3385,"offset":590854,"length":215,"previous":"M21-GAP-00129","next":"M21-GAP-00131"},"M21-GAP-00131":{"line":3386,"offset":591069,"length":208,"previous":"M21-GAP-00130","next":"M21-GAP-00132"},"M21-GAP-00132":{"line":3387,"offset":591277,"length":208,"previous":"M21-GAP-00131","next":"M21-GAP-00133"},"M21-GAP-00133":{"line":3388,"offset":591485,"length":208,"previous":"M21-GAP-00132","next":"M21-GAP-00134"},"M21-GAP-00134":{"line":3389,"offset":591693,"length":212,"previous":"M21-GAP-00133","next":"M21-GAP-00135"},"M21-GAP-00135":{"line":3390,"offset":591905,"length":212,"previous":"M21-GAP-00134","next":"M21-GAP-00136"},"M21-GAP-00136":{"line":3391,"offset":592117,"length":208,"previous":"M21-GAP-00135","next":"M21-GAP-00137"},"M21-GAP-00137":{"line":3392,"offset":592325,"length":205,"previous":"M21-GAP-00136","next":"M21-GAP-00138"},"M21-GAP-00138":{"line":3393,"offset":592530,"length":216,"previous":"M21-GAP-00137","next":"M21-GAP-00139"},"M21-GAP-00139":{"line":3394,"offset":592746,"length":210,"previous":"M21-GAP-00138","next":"M21-GAP-00140"},"M21-GAP-00140":{"line":3395,"offset":592956,"length":210,"previous":"M21-GAP-00139","next":"M21-GAP-00141"},"M21-GAP-00141":{"line":3396,"offset":593166,"length":187,"previous":"M21-GAP-00140","next":"M21-GAP-00142"},"M21-GAP-00142":{"line":3397,"offset":593353,"length":188,"previous":"M21-GAP-00141","next":"M21-GAP-00143"},"M21-GAP-00143":{"line":3398,"offset":593541,"length":189,"previous":"M21-GAP-00142","next":"M21-GAP-00144"},"M21-GAP-00144":{"line":3399,"offset":593730,"length":188,"previous":"M21-GAP-00143","next":"M21-GAP-00145"},"M21-GAP-00145":{"line":3400,"offset":593918,"length":203,"previous":"M21-GAP-00144","next":"M21-GAP-00146"},"M21-GAP-00146":{"line":3401,"offset":594121,"length":199,"previous":"M21-GAP-00145","next":"M21-GAP-00147"},"M21-GAP-00147":{"line":3402,"offset":594320,"length":199,"previous":"M21-GAP-00146","next":"M21-GAP-00148"},"M21-GAP-00148":{"line":3403,"offset":594519,"length":199,"previous":"M21-GAP-00147","next":"M21-GAP-00149"},"M21-GAP-00149":{"line":3404,"offset":594718,"length":199,"previous":"M21-GAP-00148","next":"M21-GAP-00150"},"M21-GAP-00150":{"line":3405,"offset":594917,"length":199,"previous":"M21-GAP-00149","next":"M21-GAP-00151"},"M21-GAP-00151":{"line":3406,"offset":595116,"length":199,"previous":"M21-GAP-00150","next":"M21-GAP-00152"},"M21-GAP-00152":{"line":3407,"offset":595315,"length":203,"previous":"M21-GAP-00151","next":"M21-GAP-00153"},"M21-GAP-00153":{"line":3408,"offset":595518,"length":203,"previous":"M21-GAP-00152","next":"M21-GAP-00154"},"M21-GAP-00154":{"line":3409,"offset":595721,"length":203,"previous":"M21-GAP-00153","next":"M21-GAP-00155"},"M21-GAP-00155":{"line":3410,"offset":595924,"length":204,"previous":"M21-GAP-00154","next":"M21-GAP-00156"},"M21-GAP-00156":{"line":3411,"offset":596128,"length":205,"previous":"M21-GAP-00155","next":"M21-GAP-00157"},"M21-GAP-00157":{"line":3412,"offset":596333,"length":201,"previous":"M21-GAP-00156","next":"M21-GAP-00158"},"M21-GAP-00158":{"line":3413,"offset":596534,"length":201,"previous":"M21-GAP-00157","next":"M21-GAP-00159"},"M21-GAP-00159":{"line":3414,"offset":596735,"length":201,"previous":"M21-GAP-00158","next":"M21-GAP-00160"},"M21-GAP-00160":{"line":3415,"offset":596936,"length":201,"previous":"M21-GAP-00159","next":"M21-GAP-00161"},"M21-GAP-00161":{"line":3416,"offset":597137,"length":201,"previous":"M21-GAP-00160","next":"M21-GAP-00162"},"M21-GAP-00162":{"line":3417,"offset":597338,"length":201,"previous":"M21-GAP-00161","next":"M21-GAP-00163"},"M21-GAP-00163":{"line":3418,"offset":597539,"length":204,"previous":"M21-GAP-00162","next":"M21-GAP-00164"},"M21-GAP-00164":{"line":3419,"offset":597743,"length":200,"previous":"M21-GAP-00163","next":"M21-GAP-00165"},"M21-GAP-00165":{"line":3420,"offset":597943,"length":200,"previous":"M21-GAP-00164","next":"M21-GAP-00166"},"M21-GAP-00166":{"line":3421,"offset":598143,"length":200,"previous":"M21-GAP-00165","next":"M21-GAP-00167"},"M21-GAP-00167":{"line":3422,"offset":598343,"length":200,"previous":"M21-GAP-00166","next":"M21-GAP-00168"},"M21-GAP-00168":{"line":3423,"offset":598543,"length":200,"previous":"M21-GAP-00167","next":"M21-GAP-00169"},"M21-GAP-00169":{"line":3424,"offset":598743,"length":203,"previous":"M21-GAP-00168","next":"M21-GAP-00170"},"M21-GAP-00170":{"line":3425,"offset":598946,"length":200,"previous":"M21-GAP-00169","next":"M21-GAP-00171"},"M21-GAP-00171":{"line":3426,"offset":599146,"length":204,"previous":"M21-GAP-00170","next":"M21-GAP-00172"},"M21-GAP-00172":{"line":3427,"offset":599350,"length":202,"previous":"M21-GAP-00171","next":"M21-GAP-00173"},"M21-GAP-00173":{"line":3428,"offset":599552,"length":208,"previous":"M21-GAP-00172","next":"M21-GAP-00174"},"M21-GAP-00174":{"line":3429,"offset":599760,"length":204,"previous":"M21-GAP-00173","next":"M21-GAP-00175"},"M21-GAP-00175":{"line":3430,"offset":599964,"length":204,"previous":"M21-GAP-00174","next":"M21-GAP-00176"},"M21-GAP-00176":{"line":3431,"offset":600168,"length":204,"previous":"M21-GAP-00175","next":"M21-GAP-00177"},"M21-GAP-00177":{"line":3432,"offset":600372,"length":204,"previous":"M21-GAP-00176","next":"M21-GAP-00178"},"M21-GAP-00178":{"line":3433,"offset":600576,"length":204,"previous":"M21-GAP-00177","next":"M21-GAP-00179"},"M21-GAP-00179":{"line":3434,"offset":600780,"length":204,"previous":"M21-GAP-00178","next":"M21-GAP-00180"},"M21-GAP-00180":{"line":3435,"offset":600984,"length":204,"previous":"M21-GAP-00179","next":"M21-GAP-00181"},"M21-GAP-00181":{"line":3436,"offset":601188,"length":204,"previous":"M21-GAP-00180","next":"M21-GAP-00182"},"M21-GAP-00182":{"line":3437,"offset":601392,"length":204,"previous":"M21-GAP-00181","next":"M21-GAP-00183"},"M21-GAP-00183":{"line":3438,"offset":601596,"length":204,"previous":"M21-GAP-00182","next":"M21-GAP-00184"},"M21-GAP-00184":{"line":3439,"offset":601800,"length":204,"previous":"M21-GAP-00183","next":"M21-GAP-00185"},"M21-GAP-00185":{"line":3440,"offset":602004,"length":204,"previous":"M21-GAP-00184","next":"M21-GAP-00186"},"M21-GAP-00186":{"line":3441,"offset":602208,"length":204,"previous":"M21-GAP-00185","next":"M21-GAP-00187"},"M21-GAP-00187":{"line":3442,"offset":602412,"length":204,"previous":"M21-GAP-00186","next":"M21-GAP-00188"},"M21-GAP-00188":{"line":3443,"offset":602616,"length":204,"previous":"M21-GAP-00187","next":"M21-GAP-00189"},"M21-GAP-00189":{"line":3444,"offset":602820,"length":193,"previous":"M21-GAP-00188","next":"M21-GAP-00190"},"M21-GAP-00190":{"line":3445,"offset":603013,"length":193,"previous":"M21-GAP-00189","next":"M21-GAP-00191"},"M21-GAP-00191":{"line":3446,"offset":603206,"length":193,"previous":"M21-GAP-00190","next":"M21-GAP-00192"},"M21-GAP-00192":{"line":3447,"offset":603399,"length":193,"previous":"M21-GAP-00191","next":"M21-GAP-00193"},"M21-GAP-00193":{"line":3448,"offset":603592,"length":193,"previous":"M21-GAP-00192","next":"M21-GAP-00194"},"M21-GAP-00194":{"line":3449,"offset":603785,"length":193,"previous":"M21-GAP-00193","next":"M21-GAP-00195"},"M21-GAP-00195":{"line":3450,"offset":603978,"length":193,"previous":"M21-GAP-00194","next":"M21-GAP-00196"},"M21-GAP-00196":{"line":3451,"offset":604171,"length":193,"previous":"M21-GAP-00195","next":"M21-GAP-00197"},"M21-GAP-00197":{"line":3452,"offset":604364,"length":193,"previous":"M21-GAP-00196","next":"M21-GAP-00198"},"M21-GAP-00198":{"line":3453,"offset":604557,"length":193,"previous":"M21-GAP-00197","next":"M21-GAP-00199"},"M21-GAP-00199":{"line":3454,"offset":604750,"length":207,"previous":"M21-GAP-00198","next":"M21-GAP-00200"},"M21-GAP-00200":{"line":3455,"offset":604957,"length":207,"previous":"M21-GAP-00199","next":"M21-GAP-00201"},"M21-GAP-00201":{"line":3456,"offset":605164,"length":207,"previous":"M21-GAP-00200","next":"M21-GAP-00202"},"M21-GAP-00202":{"line":3457,"offset":605371,"length":207,"previous":"M21-GAP-00201","next":"M21-GAP-00203"},"M21-GAP-00203":{"line":3458,"offset":605578,"length":207,"previous":"M21-GAP-00202","next":"M21-GAP-00204"},"M21-GAP-00204":{"line":3459,"offset":605785,"length":207,"previous":"M21-GAP-00203","next":"M21-GAP-00205"},"M21-GAP-00205":{"line":3460,"offset":605992,"length":207,"previous":"M21-GAP-00204","next":"M21-GAP-00206"},"M21-GAP-00206":{"line":3461,"offset":606199,"length":207,"previous":"M21-GAP-00205","next":"M21-GAP-00207"},"M21-GAP-00207":{"line":3462,"offset":606406,"length":207,"previous":"M21-GAP-00206","next":"M21-GAP-00208"},"M21-GAP-00208":{"line":3463,"offset":606613,"length":196,"previous":"M21-GAP-00207","next":"M21-GAP-00209"},"M21-GAP-00209":{"line":3464,"offset":606809,"length":196,"previous":"M21-GAP-00208","next":"M21-GAP-00210"},"M21-GAP-00210":{"line":3465,"offset":607005,"length":196,"previous":"M21-GAP-00209","next":"M21-GAP-00211"},"M21-GAP-00211":{"line":3466,"offset":607201,"length":196,"previous":"M21-GAP-00210","next":"M21-GAP-00212"},"M21-GAP-00212":{"line":3467,"offset":607397,"length":196,"previous":"M21-GAP-00211","next":"M21-GAP-00213"},"M21-GAP-00213":{"line":3468,"offset":607593,"length":196,"previous":"M21-GAP-00212","next":"M21-GAP-00214"},"M21-GAP-00214":{"line":3469,"offset":607789,"length":196,"previous":"M21-GAP-00213","next":"M21-GAP-00215"},"M21-GAP-00215":{"line":3470,"offset":607985,"length":196,"previous":"M21-GAP-00214","next":"M21-GAP-00216"},"M21-GAP-00216":{"line":3471,"offset":608181,"length":196,"previous":"M21-GAP-00215","next":"M21-GAP-00217"},"M21-GAP-00217":{"line":3472,"offset":608377,"length":206,"previous":"M21-GAP-00216","next":"M21-GAP-00218"},"M21-GAP-00218":{"line":3473,"offset":608583,"length":206,"previous":"M21-GAP-00217","next":"M21-GAP-00219"},"M21-GAP-00219":{"line":3474,"offset":608789,"length":206,"previous":"M21-GAP-00218","next":"M21-GAP-00220"},"M21-GAP-00220":{"line":3475,"offset":608995,"length":206,"previous":"M21-GAP-00219","next":"M21-GAP-00221"},"M21-GAP-00221":{"line":3476,"offset":609201,"length":206,"previous":"M21-GAP-00220","next":"M21-GAP-00222"},"M21-GAP-00222":{"line":3477,"offset":609407,"length":206,"previous":"M21-GAP-00221","next":"M21-GAP-00223"},"M21-GAP-00223":{"line":3478,"offset":609613,"length":206,"previous":"M21-GAP-00222","next":"M21-GAP-00224"},"M21-GAP-00224":{"line":3479,"offset":609819,"length":206,"previous":"M21-GAP-00223","next":"M21-GAP-00225"},"M21-GAP-00225":{"line":3480,"offset":610025,"length":206,"previous":"M21-GAP-00224","next":"M21-GAP-00226"},"M21-GAP-00226":{"line":3481,"offset":610231,"length":206,"previous":"M21-GAP-00225","next":"M21-GAP-00227"},"M21-GAP-00227":{"line":3482,"offset":610437,"length":195,"previous":"M21-GAP-00226","next":"M21-GAP-00228"},"M21-GAP-00228":{"line":3483,"offset":610632,"length":195,"previous":"M21-GAP-00227","next":"M21-GAP-00229"},"M21-GAP-00229":{"line":3484,"offset":610827,"length":195,"previous":"M21-GAP-00228","next":"M21-GAP-00230"},"M21-GAP-00230":{"line":3485,"offset":611022,"length":195,"previous":"M21-GAP-00229","next":"M21-GAP-00231"},"M21-GAP-00231":{"line":3486,"offset":611217,"length":195,"previous":"M21-GAP-00230","next":"M21-GAP-00232"},"M21-GAP-00232":{"line":3487,"offset":611412,"length":195,"previous":"M21-GAP-00231","next":"M21-GAP-00233"},"M21-GAP-00233":{"line":3488,"offset":611607,"length":195,"previous":"M21-GAP-00232","next":"M21-GAP-00234"},"M21-GAP-00234":{"line":3489,"offset":611802,"length":195,"previous":"M21-GAP-00233","next":"M21-GAP-00235"},"M21-GAP-00235":{"line":3490,"offset":611997,"length":195,"previous":"M21-GAP-00234","next":"M21-GAP-00236"},"M21-GAP-00236":{"line":3491,"offset":612192,"length":195,"previous":"M21-GAP-00235","next":"M21-GAP-00237"},"M21-GAP-00237":{"line":3492,"offset":612387,"length":188,"previous":"M21-GAP-00236","next":"M21-GAP-00238"},"M21-GAP-00238":{"line":3493,"offset":612575,"length":188,"previous":"M21-GAP-00237","next":"M21-GAP-00239"},"M21-GAP-00239":{"line":3494,"offset":612763,"length":188,"previous":"M21-GAP-00238","next":"M21-GAP-00240"},"M21-GAP-00240":{"line":3495,"offset":612951,"length":192,"previous":"M21-GAP-00239","next":"M21-GAP-00241"},"M21-GAP-00241":{"line":3496,"offset":613143,"length":199,"previous":"M21-GAP-00240","next":"M21-GAP-00242"},"M21-GAP-00242":{"line":3497,"offset":613342,"length":199,"previous":"M21-GAP-00241","next":"M21-GAP-00243"},"M21-GAP-00243":{"line":3498,"offset":613541,"length":199,"previous":"M21-GAP-00242","next":"M21-GAP-00244"},"M21-GAP-00244":{"line":3499,"offset":613740,"length":199,"previous":"M21-GAP-00243","next":"M21-GAP-00245"},"M21-GAP-00245":{"line":3500,"offset":613939,"length":199,"previous":"M21-GAP-00244","next":"M21-GAP-00246"},"M21-GAP-00246":{"line":3501,"offset":614138,"length":199,"previous":"M21-GAP-00245","next":"M21-GAP-00247"},"M21-GAP-00247":{"line":3502,"offset":614337,"length":199,"previous":"M21-GAP-00246","next":"M21-GAP-00248"},"M21-GAP-00248":{"line":3503,"offset":614536,"length":199,"previous":"M21-GAP-00247","next":"M21-GAP-00249"},"M21-GAP-00249":{"line":3504,"offset":614735,"length":199,"previous":"M21-GAP-00248","next":"M21-GAP-00250"},"M21-GAP-00250":{"line":3505,"offset":614934,"length":188,"previous":"M21-GAP-00249","next":"M21-GAP-00251"},"M21-GAP-00251":{"line":3506,"offset":615122,"length":188,"previous":"M21-GAP-00250","next":"M21-GAP-00252"},"M21-GAP-00252":{"line":3507,"offset":615310,"length":188,"previous":"M21-GAP-00251","next":"M21-GAP-00253"},"M21-GAP-00253":{"line":3508,"offset":615498,"length":188,"previous":"M21-GAP-00252","next":"M21-GAP-00254"},"M21-GAP-00254":{"line":3509,"offset":615686,"length":188,"previous":"M21-GAP-00253","next":"M21-GAP-00255"},"M21-GAP-00255":{"line":3510,"offset":615874,"length":188,"previous":"M21-GAP-00254","next":"M21-GAP-00256"},"M21-GAP-00256":{"line":3511,"offset":616062,"length":188,"previous":"M21-GAP-00255","next":"M21-GAP-00257"},"M21-GAP-00257":{"line":3512,"offset":616250,"length":188,"previous":"M21-GAP-00256","next":"M21-GAP-00258"},"M21-GAP-00258":{"line":3513,"offset":616438,"length":188,"previous":"M21-GAP-00257","next":"M21-GAP-00259"},"M21-GAP-00259":{"line":3514,"offset":616626,"length":176,"previous":"M21-GAP-00258","next":"M21-GAP-00260"},"M21-GAP-00260":{"line":3515,"offset":616802,"length":176,"previous":"M21-GAP-00259","next":"M21-GAP-00261"},"M21-GAP-00261":{"line":3516,"offset":616978,"length":177,"previous":"M21-GAP-00260","next":"M21-GAP-00262"},"M21-GAP-00262":{"line":3517,"offset":617155,"length":178,"previous":"M21-GAP-00261","next":"M21-GAP-00263"},"M21-GAP-00263":{"line":3518,"offset":617333,"length":178,"previous":"M21-GAP-00262","next":"M21-GAP-00264"},"M21-GAP-00264":{"line":3519,"offset":617511,"length":178,"previous":"M21-GAP-00263","next":"M21-GAP-00265"},"M21-GAP-00265":{"line":3520,"offset":617689,"length":178,"previous":"M21-GAP-00264","next":"M21-GAP-00266"},"M21-GAP-00266":{"line":3521,"offset":617867,"length":178,"previous":"M21-GAP-00265","next":"M21-GAP-00267"},"M21-GAP-00267":{"line":3522,"offset":618045,"length":178,"previous":"M21-GAP-00266","next":"M21-GAP-00268"},"M21-GAP-00268":{"line":3523,"offset":618223,"length":178,"previous":"M21-GAP-00267","next":"M21-GAP-00269"},"M21-GAP-00269":{"line":3524,"offset":618401,"length":178,"previous":"M21-GAP-00268","next":"M21-GAP-00270"},"M21-GAP-00270":{"line":3525,"offset":618579,"length":178,"previous":"M21-GAP-00269","next":"M21-GAP-00271"},"M21-GAP-00271":{"line":3526,"offset":618757,"length":178,"previous":"M21-GAP-00270","next":"M21-GAP-00272"},"M21-GAP-00272":{"line":3527,"offset":618935,"length":177,"previous":"M21-GAP-00271","next":"M21-GAP-00273"},"M21-GAP-00273":{"line":3528,"offset":619112,"length":178,"previous":"M21-GAP-00272","next":"M21-GAP-00274"},"M21-GAP-00274":{"line":3529,"offset":619290,"length":178,"previous":"M21-GAP-00273","next":"M21-GAP-00275"},"M21-GAP-00275":{"line":3530,"offset":619468,"length":178,"previous":"M21-GAP-00274","next":"M21-GAP-00276"},"M21-GAP-00276":{"line":3531,"offset":619646,"length":178,"previous":"M21-GAP-00275","next":"M21-GAP-00277"},"M21-GAP-00277":{"line":3532,"offset":619824,"length":178,"previous":"M21-GAP-00276","next":"M21-GAP-00278"},"M21-GAP-00278":{"line":3533,"offset":620002,"length":178,"previous":"M21-GAP-00277","next":"M21-GAP-00279"},"M21-GAP-00279":{"line":3534,"offset":620180,"length":177,"previous":"M21-GAP-00278","next":"M21-GAP-00280"},"M21-GAP-00280":{"line":3535,"offset":620357,"length":177,"previous":"M21-GAP-00279","next":"M21-GAP-00281"},"M21-GAP-00281":{"line":3536,"offset":620534,"length":177,"previous":"M21-GAP-00280","next":"M21-GAP-00282"},"M21-GAP-00282":{"line":3537,"offset":620711,"length":177,"previous":"M21-GAP-00281","next":"M21-GAP-00283"},"M21-GAP-00283":{"line":3538,"offset":620888,"length":177,"previous":"M21-GAP-00282","next":"M21-GAP-00284"},"M21-GAP-00284":{"line":3539,"offset":621065,"length":177,"previous":"M21-GAP-00283","next":"M21-GAP-00285"},"M21-GAP-00285":{"line":3540,"offset":621242,"length":177,"previous":"M21-GAP-00284","next":"M21-GAP-00286"},"M21-GAP-00286":{"line":3541,"offset":621419,"length":177,"previous":"M21-GAP-00285","next":"M21-GAP-00287"},"M21-GAP-00287":{"line":3542,"offset":621596,"length":176,"previous":"M21-GAP-00286","next":"M21-GAP-00288"},"M21-GAP-00288":{"line":3543,"offset":621772,"length":177,"previous":"M21-GAP-00287","next":"M21-GAP-00289"},"M21-GAP-00289":{"line":3544,"offset":621949,"length":177,"previous":"M21-GAP-00288","next":"M21-GAP-00290"},"M21-GAP-00290":{"line":3545,"offset":622126,"length":177,"previous":"M21-GAP-00289","next":"M21-GAP-00291"},"M21-GAP-00291":{"line":3546,"offset":622303,"length":177,"previous":"M21-GAP-00290","next":"M21-GAP-00292"},"M21-GAP-00292":{"line":3547,"offset":622480,"length":177,"previous":"M21-GAP-00291","next":"M21-GAP-00293"},"M21-GAP-00293":{"line":3548,"offset":622657,"length":177,"previous":"M21-GAP-00292","next":"M21-GAP-00294"},"M21-GAP-00294":{"line":3549,"offset":622834,"length":177,"previous":"M21-GAP-00293","next":"M21-GAP-00295"},"M21-GAP-00295":{"line":3550,"offset":623011,"length":177,"previous":"M21-GAP-00294","next":"M21-GAP-00296"},"M21-GAP-00296":{"line":3551,"offset":623188,"length":177,"previous":"M21-GAP-00295","next":"M21-GAP-00297"},"M21-GAP-00297":{"line":3552,"offset":623365,"length":177,"previous":"M21-GAP-00296","next":"M21-GAP-00298"},"M21-GAP-00298":{"line":3553,"offset":623542,"length":176,"previous":"M21-GAP-00297","next":"M21-GAP-00299"},"M21-GAP-00299":{"line":3554,"offset":623718,"length":177,"previous":"M21-GAP-00298","next":"M21-GAP-00300"},"M21-GAP-00300":{"line":3555,"offset":623895,"length":177,"previous":"M21-GAP-00299","next":"M21-GAP-00301"},"M21-GAP-00301":{"line":3556,"offset":624072,"length":177,"previous":"M21-GAP-00300","next":"M21-GAP-00302"},"M21-GAP-00302":{"line":3557,"offset":624249,"length":177,"previous":"M21-GAP-00301","next":"M21-GAP-00303"},"M21-GAP-00303":{"line":3558,"offset":624426,"length":177,"previous":"M21-GAP-00302","next":"M21-GAP-00304"},"M21-GAP-00304":{"line":3559,"offset":624603,"length":177,"previous":"M21-GAP-00303","next":"M21-GAP-00305"},"M21-GAP-00305":{"line":3560,"offset":624780,"length":177,"previous":"M21-GAP-00304","next":"M21-GAP-00306"},"M21-GAP-00306":{"line":3561,"offset":624957,"length":177,"previous":"M21-GAP-00305","next":"M21-GAP-00307"},"M21-GAP-00307":{"line":3562,"offset":625134,"length":177,"previous":"M21-GAP-00306","next":"M21-GAP-00308"},"M21-GAP-00308":{"line":3563,"offset":625311,"length":177,"previous":"M21-GAP-00307","next":"M21-GAP-00309"},"M21-GAP-00309":{"line":3564,"offset":625488,"length":176,"previous":"M21-GAP-00308","next":"M21-GAP-00310"},"M21-GAP-00310":{"line":3565,"offset":625664,"length":177,"previous":"M21-GAP-00309","next":"M21-GAP-00311"},"M21-GAP-00311":{"line":3566,"offset":625841,"length":177,"previous":"M21-GAP-00310","next":"M21-GAP-00312"},"M21-GAP-00312":{"line":3567,"offset":626018,"length":177,"previous":"M21-GAP-00311","next":"M21-GAP-00313"},"M21-GAP-00313":{"line":3568,"offset":626195,"length":177,"previous":"M21-GAP-00312","next":"M21-GAP-00314"},"M21-GAP-00314":{"line":3569,"offset":626372,"length":177,"previous":"M21-GAP-00313","next":"M21-GAP-00315"},"M21-GAP-00315":{"line":3570,"offset":626549,"length":177,"previous":"M21-GAP-00314","next":"M21-GAP-00316"},"M21-GAP-00316":{"line":3571,"offset":626726,"length":177,"previous":"M21-GAP-00315","next":"M21-GAP-00317"},"M21-GAP-00317":{"line":3572,"offset":626903,"length":177,"previous":"M21-GAP-00316","next":"M21-GAP-00318"},"M21-GAP-00318":{"line":3573,"offset":627080,"length":177,"previous":"M21-GAP-00317","next":"M21-GAP-00319"},"M21-GAP-00319":{"line":3574,"offset":627257,"length":177,"previous":"M21-GAP-00318","next":"M21-GAP-00320"},"M21-GAP-00320":{"line":3575,"offset":627434,"length":176,"previous":"M21-GAP-00319","next":"M21-GAP-00321"},"M21-GAP-00321":{"line":3576,"offset":627610,"length":177,"previous":"M21-GAP-00320","next":"M21-GAP-00322"},"M21-GAP-00322":{"line":3577,"offset":627787,"length":177,"previous":"M21-GAP-00321","next":"M21-GAP-00323"},"M21-GAP-00323":{"line":3578,"offset":627964,"length":177,"previous":"M21-GAP-00322","next":"M21-GAP-00324"},"M21-GAP-00324":{"line":3579,"offset":628141,"length":177,"previous":"M21-GAP-00323","next":"M21-GAP-00325"},"M21-GAP-00325":{"line":3580,"offset":628318,"length":177,"previous":"M21-GAP-00324","next":"M21-GAP-00326"},"M21-GAP-00326":{"line":3581,"offset":628495,"length":177,"previous":"M21-GAP-00325","next":"M21-GAP-00327"},"M21-GAP-00327":{"line":3582,"offset":628672,"length":177,"previous":"M21-GAP-00326","next":"M21-GAP-00328"},"M21-GAP-00328":{"line":3583,"offset":628849,"length":177,"previous":"M21-GAP-00327","next":"M21-GAP-00329"},"M21-GAP-00329":{"line":3584,"offset":629026,"length":177,"previous":"M21-GAP-00328","next":"M21-GAP-00330"},"M21-GAP-00330":{"line":3585,"offset":629203,"length":177,"previous":"M21-GAP-00329","next":"M21-GAP-00331"},"M21-GAP-00331":{"line":3586,"offset":629380,"length":176,"previous":"M21-GAP-00330","next":"M21-GAP-00332"},"M21-GAP-00332":{"line":3587,"offset":629556,"length":177,"previous":"M21-GAP-00331","next":"M21-GAP-00333"},"M21-GAP-00333":{"line":3588,"offset":629733,"length":177,"previous":"M21-GAP-00332","next":"M21-GAP-00334"},"M21-GAP-00334":{"line":3589,"offset":629910,"length":177,"previous":"M21-GAP-00333","next":"M21-GAP-00335"},"M21-GAP-00335":{"line":3590,"offset":630087,"length":177,"previous":"M21-GAP-00334","next":"M21-GAP-00336"},"M21-GAP-00336":{"line":3591,"offset":630264,"length":177,"previous":"M21-GAP-00335","next":"M21-GAP-00337"},"M21-GAP-00337":{"line":3592,"offset":630441,"length":177,"previous":"M21-GAP-00336","next":"M21-GAP-00338"},"M21-GAP-00338":{"line":3593,"offset":630618,"length":177,"previous":"M21-GAP-00337","next":"M21-GAP-00339"},"M21-GAP-00339":{"line":3594,"offset":630795,"length":177,"previous":"M21-GAP-00338","next":"M21-GAP-00340"},"M21-GAP-00340":{"line":3595,"offset":630972,"length":177,"previous":"M21-GAP-00339","next":"M21-GAP-00341"},"M21-GAP-00341":{"line":3596,"offset":631149,"length":177,"previous":"M21-GAP-00340","next":"M21-GAP-00342"},"M21-GAP-00342":{"line":3597,"offset":631326,"length":176,"previous":"M21-GAP-00341","next":"M21-GAP-00343"},"M21-GAP-00343":{"line":3598,"offset":631502,"length":177,"previous":"M21-GAP-00342","next":"M21-GAP-00344"},"M21-GAP-00344":{"line":3599,"offset":631679,"length":177,"previous":"M21-GAP-00343","next":"M21-GAP-00345"},"M21-GAP-00345":{"line":3600,"offset":631856,"length":177,"previous":"M21-GAP-00344","next":"M21-GAP-00346"},"M21-GAP-00346":{"line":3601,"offset":632033,"length":177,"previous":"M21-GAP-00345","next":"M21-GAP-00347"},"M21-GAP-00347":{"line":3602,"offset":632210,"length":177,"previous":"M21-GAP-00346","next":"M21-GAP-00348"},"M21-GAP-00348":{"line":3603,"offset":632387,"length":177,"previous":"M21-GAP-00347","next":"M21-GAP-00349"},"M21-GAP-00349":{"line":3604,"offset":632564,"length":177,"previous":"M21-GAP-00348","next":"M21-GAP-00350"},"M21-GAP-00350":{"line":3605,"offset":632741,"length":177,"previous":"M21-GAP-00349","next":"M21-GAP-00351"},"M21-GAP-00351":{"line":3606,"offset":632918,"length":177,"previous":"M21-GAP-00350","next":"M21-GAP-00352"},"M21-GAP-00352":{"line":3607,"offset":633095,"length":177,"previous":"M21-GAP-00351","next":"M21-GAP-00353"},"M21-GAP-00353":{"line":3608,"offset":633272,"length":176,"previous":"M21-GAP-00352","next":"M21-GAP-00354"},"M21-GAP-00354":{"line":3609,"offset":633448,"length":177,"previous":"M21-GAP-00353","next":"M21-GAP-00355"},"M21-GAP-00355":{"line":3610,"offset":633625,"length":177,"previous":"M21-GAP-00354","next":"M21-GAP-00356"},"M21-GAP-00356":{"line":3611,"offset":633802,"length":177,"previous":"M21-GAP-00355","next":"M21-GAP-00357"},"M21-GAP-00357":{"line":3612,"offset":633979,"length":177,"previous":"M21-GAP-00356","next":"M21-GAP-00358"},"M21-GAP-00358":{"line":3613,"offset":634156,"length":177,"previous":"M21-GAP-00357","next":"M21-GAP-00359"},"M21-GAP-00359":{"line":3614,"offset":634333,"length":177,"previous":"M21-GAP-00358","next":"M21-GAP-00360"},"M21-GAP-00360":{"line":3615,"offset":634510,"length":177,"previous":"M21-GAP-00359","next":"M21-GAP-00361"},"M21-GAP-00361":{"line":3616,"offset":634687,"length":177,"previous":"M21-GAP-00360","next":"M21-GAP-00362"},"M21-GAP-00362":{"line":3617,"offset":634864,"length":177,"previous":"M21-GAP-00361","next":"M21-GAP-00363"},"M21-GAP-00363":{"line":3618,"offset":635041,"length":177,"previous":"M21-GAP-00362","next":"M21-GAP-00364"},"M21-GAP-00364":{"line":3619,"offset":635218,"length":176,"previous":"M21-GAP-00363","next":"M21-GAP-00365"},"M21-GAP-00365":{"line":3620,"offset":635394,"length":177,"previous":"M21-GAP-00364","next":"M21-GAP-00366"},"M21-GAP-00366":{"line":3621,"offset":635571,"length":177,"previous":"M21-GAP-00365","next":"M21-GAP-00367"},"M21-GAP-00367":{"line":3622,"offset":635748,"length":177,"previous":"M21-GAP-00366","next":"M21-GAP-00368"},"M21-GAP-00368":{"line":3623,"offset":635925,"length":177,"previous":"M21-GAP-00367","next":"M21-GAP-00369"},"M21-GAP-00369":{"line":3624,"offset":636102,"length":177,"previous":"M21-GAP-00368","next":"M21-GAP-00370"},"M21-GAP-00370":{"line":3625,"offset":636279,"length":177,"previous":"M21-GAP-00369","next":"M21-GAP-00371"},"M21-GAP-00371":{"line":3626,"offset":636456,"length":177,"previous":"M21-GAP-00370","next":"M21-GAP-00372"},"M21-GAP-00372":{"line":3627,"offset":636633,"length":177,"previous":"M21-GAP-00371","next":"M21-GAP-00373"},"M21-GAP-00373":{"line":3628,"offset":636810,"length":177,"previous":"M21-GAP-00372","next":"M21-GAP-00374"},"M21-GAP-00374":{"line":3629,"offset":636987,"length":177,"previous":"M21-GAP-00373","next":"M21-GAP-00375"},"M21-GAP-00375":{"line":3630,"offset":637164,"length":185,"previous":"M21-GAP-00374","next":"M21-GAP-00376"},"M21-GAP-00376":{"line":3631,"offset":637349,"length":185,"previous":"M21-GAP-00375","next":"M21-GAP-00377"},"M21-GAP-00377":{"line":3632,"offset":637534,"length":186,"previous":"M21-GAP-00376","next":"M21-GAP-00378"},"M21-GAP-00378":{"line":3633,"offset":637720,"length":186,"previous":"M21-GAP-00377","next":"M21-GAP-00379"},"M21-GAP-00379":{"line":3634,"offset":637906,"length":186,"previous":"M21-GAP-00378","next":"M21-GAP-00380"},"M21-GAP-00380":{"line":3635,"offset":638092,"length":186,"previous":"M21-GAP-00379","next":"M21-GAP-00381"},"M21-GAP-00381":{"line":3636,"offset":638278,"length":186,"previous":"M21-GAP-00380","next":"M21-GAP-00382"},"M21-GAP-00382":{"line":3637,"offset":638464,"length":186,"previous":"M21-GAP-00381","next":"M21-GAP-00383"},"M21-GAP-00383":{"line":3638,"offset":638650,"length":186,"previous":"M21-GAP-00382","next":"M21-GAP-00384"},"M21-GAP-00384":{"line":3639,"offset":638836,"length":186,"previous":"M21-GAP-00383","next":"M21-GAP-00385"},"M21-GAP-00385":{"line":3640,"offset":639022,"length":186,"previous":"M21-GAP-00384","next":"M21-GAP-00386"},"M21-GAP-00386":{"line":3641,"offset":639208,"length":186,"previous":"M21-GAP-00385","next":"M21-GAP-00387"},"M21-GAP-00387":{"line":3642,"offset":639394,"length":185,"previous":"M21-GAP-00386","next":"M21-GAP-00388"},"M21-GAP-00388":{"line":3643,"offset":639579,"length":186,"previous":"M21-GAP-00387","next":"M21-GAP-00389"},"M21-GAP-00389":{"line":3644,"offset":639765,"length":186,"previous":"M21-GAP-00388","next":"M21-GAP-00390"},"M21-GAP-00390":{"line":3645,"offset":639951,"length":186,"previous":"M21-GAP-00389","next":"M21-GAP-00391"},"M21-GAP-00391":{"line":3646,"offset":640137,"length":186,"previous":"M21-GAP-00390","next":"M21-GAP-00392"},"M21-GAP-00392":{"line":3647,"offset":640323,"length":186,"previous":"M21-GAP-00391","next":"M21-GAP-00393"},"M21-GAP-00393":{"line":3648,"offset":640509,"length":186,"previous":"M21-GAP-00392","next":"M21-GAP-00394"},"M21-GAP-00394":{"line":3649,"offset":640695,"length":186,"previous":"M21-GAP-00393","next":"M21-GAP-00395"},"M21-GAP-00395":{"line":3650,"offset":640881,"length":186,"previous":"M21-GAP-00394","next":"M21-GAP-00396"},"M21-GAP-00396":{"line":3651,"offset":641067,"length":186,"previous":"M21-GAP-00395","next":"M21-GAP-00397"},"M21-GAP-00397":{"line":3652,"offset":641253,"length":186,"previous":"M21-GAP-00396","next":"M21-GAP-00398"},"M21-GAP-00398":{"line":3653,"offset":641439,"length":185,"previous":"M21-GAP-00397","next":"M21-GAP-00399"},"M21-GAP-00399":{"line":3654,"offset":641624,"length":186,"previous":"M21-GAP-00398","next":"M21-GAP-00400"},"M21-GAP-00400":{"line":3655,"offset":641810,"length":186,"previous":"M21-GAP-00399","next":"M21-GAP-00401"},"M21-GAP-00401":{"line":3656,"offset":641996,"length":186,"previous":"M21-GAP-00400","next":"M21-GAP-00402"},"M21-GAP-00402":{"line":3657,"offset":642182,"length":186,"previous":"M21-GAP-00401","next":"M21-GAP-00403"},"M21-GAP-00403":{"line":3658,"offset":642368,"length":186,"previous":"M21-GAP-00402","next":"M21-GAP-00404"},"M21-GAP-00404":{"line":3659,"offset":642554,"length":186,"previous":"M21-GAP-00403","next":"M21-GAP-00405"},"M21-GAP-00405":{"line":3660,"offset":642740,"length":186,"previous":"M21-GAP-00404","next":"M21-GAP-00406"},"M21-GAP-00406":{"line":3661,"offset":642926,"length":185,"previous":"M21-GAP-00405","next":"M21-GAP-00407"},"M21-GAP-00407":{"line":3662,"offset":643111,"length":185,"previous":"M21-GAP-00406","next":"M21-GAP-00408"},"M21-GAP-00408":{"line":3663,"offset":643296,"length":185,"previous":"M21-GAP-00407","next":"M21-GAP-00409"},"M21-GAP-00409":{"line":3664,"offset":643481,"length":185,"previous":"M21-GAP-00408","next":"M21-GAP-00410"},"M21-GAP-00410":{"line":3665,"offset":643666,"length":185,"previous":"M21-GAP-00409","next":"M21-GAP-00411"},"M21-GAP-00411":{"line":3666,"offset":643851,"length":185,"previous":"M21-GAP-00410","next":"M21-GAP-00412"},"M21-GAP-00412":{"line":3667,"offset":644036,"length":176,"previous":"M21-GAP-00411","next":"M21-GAP-00413"},"M21-GAP-00413":{"line":3668,"offset":644212,"length":176,"previous":"M21-GAP-00412","next":"M21-GAP-00414"},"M21-GAP-00414":{"line":3669,"offset":644388,"length":176,"previous":"M21-GAP-00413","next":"M21-GAP-00415"},"M21-GAP-00415":{"line":3670,"offset":644564,"length":176,"previous":"M21-GAP-00414","next":"M21-GAP-00416"},"M21-GAP-00416":{"line":3671,"offset":644740,"length":176,"previous":"M21-GAP-00415","next":"M21-GAP-00417"},"M21-GAP-00417":{"line":3672,"offset":644916,"length":175,"previous":"M21-GAP-00416","next":"M21-GAP-00418"},"M21-GAP-00418":{"line":3673,"offset":645091,"length":175,"previous":"M21-GAP-00417","next":"M21-GAP-00419"},"M21-GAP-00419":{"line":3674,"offset":645266,"length":176,"previous":"M21-GAP-00418","next":"M21-GAP-00420"},"M21-GAP-00420":{"line":3675,"offset":645442,"length":176,"previous":"M21-GAP-00419","next":"M21-GAP-00421"},"M21-GAP-00421":{"line":3676,"offset":645618,"length":176,"previous":"M21-GAP-00420","next":"M21-GAP-00422"},"M21-GAP-00422":{"line":3677,"offset":645794,"length":176,"previous":"M21-GAP-00421","next":"M21-GAP-00423"},"M21-GAP-00423":{"line":3678,"offset":645970,"length":176,"previous":"M21-GAP-00422","next":"M21-GAP-00424"},"M21-GAP-00424":{"line":3679,"offset":646146,"length":176,"previous":"M21-GAP-00423","next":"M21-GAP-00425"},"M21-GAP-00425":{"line":3680,"offset":646322,"length":176,"previous":"M21-GAP-00424","next":"M21-GAP-00426"},"M21-GAP-00426":{"line":3681,"offset":646498,"length":176,"previous":"M21-GAP-00425","next":"M21-GAP-00427"},"M21-GAP-00427":{"line":3682,"offset":646674,"length":176,"previous":"M21-GAP-00426","next":"M21-GAP-00428"},"M21-GAP-00428":{"line":3683,"offset":646850,"length":176,"previous":"M21-GAP-00427","next":"M21-GAP-00429"},"M21-GAP-00429":{"line":3684,"offset":647026,"length":175,"previous":"M21-GAP-00428","next":"M21-GAP-00430"},"M21-GAP-00430":{"line":3685,"offset":647201,"length":176,"previous":"M21-GAP-00429","next":"M21-GAP-00431"},"M21-GAP-00431":{"line":3686,"offset":647377,"length":176,"previous":"M21-GAP-00430","next":"M21-GAP-00432"},"M21-GAP-00432":{"line":3687,"offset":647553,"length":176,"previous":"M21-GAP-00431","next":"M21-GAP-00433"},"M21-GAP-00433":{"line":3688,"offset":647729,"length":176,"previous":"M21-GAP-00432","next":"M21-GAP-00434"},"M21-GAP-00434":{"line":3689,"offset":647905,"length":176,"previous":"M21-GAP-00433","next":"M21-GAP-00435"},"M21-GAP-00435":{"line":3690,"offset":648081,"length":176,"previous":"M21-GAP-00434","next":"M21-GAP-00436"},"M21-GAP-00436":{"line":3691,"offset":648257,"length":176,"previous":"M21-GAP-00435","next":"M21-GAP-00437"},"M21-GAP-00437":{"line":3692,"offset":648433,"length":176,"previous":"M21-GAP-00436","next":"M21-GAP-00438"},"M21-GAP-00438":{"line":3693,"offset":648609,"length":176,"previous":"M21-GAP-00437","next":"M21-GAP-00439"},"M21-GAP-00439":{"line":3694,"offset":648785,"length":176,"previous":"M21-GAP-00438","next":"M21-GAP-00440"},"M21-GAP-00440":{"line":3695,"offset":648961,"length":175,"previous":"M21-GAP-00439","next":"M21-GAP-00441"},"M21-GAP-00441":{"line":3696,"offset":649136,"length":176,"previous":"M21-GAP-00440","next":"M21-GAP-00442"},"M21-GAP-00442":{"line":3697,"offset":649312,"length":176,"previous":"M21-GAP-00441","next":"M21-GAP-00443"},"M21-GAP-00443":{"line":3698,"offset":649488,"length":176,"previous":"M21-GAP-00442","next":"M21-GAP-00444"},"M21-GAP-00444":{"line":3699,"offset":649664,"length":176,"previous":"M21-GAP-00443","next":"M21-GAP-00445"},"M21-GAP-00445":{"line":3700,"offset":649840,"length":176,"previous":"M21-GAP-00444","next":"M21-GAP-00446"},"M21-GAP-00446":{"line":3701,"offset":650016,"length":176,"previous":"M21-GAP-00445","next":"M21-GAP-00447"},"M21-GAP-00447":{"line":3702,"offset":650192,"length":176,"previous":"M21-GAP-00446","next":"M21-GAP-00448"},"M21-GAP-00448":{"line":3703,"offset":650368,"length":176,"previous":"M21-GAP-00447","next":"M21-GAP-00449"},"M21-GAP-00449":{"line":3704,"offset":650544,"length":176,"previous":"M21-GAP-00448","next":"M21-GAP-00450"},"M21-GAP-00450":{"line":3705,"offset":650720,"length":176,"previous":"M21-GAP-00449","next":"M21-GAP-00451"},"M21-GAP-00451":{"line":3706,"offset":650896,"length":175,"previous":"M21-GAP-00450","next":"M21-GAP-00452"},"M21-GAP-00452":{"line":3707,"offset":651071,"length":176,"previous":"M21-GAP-00451","next":"M21-GAP-00453"},"M21-GAP-00453":{"line":3708,"offset":651247,"length":176,"previous":"M21-GAP-00452","next":"M21-GAP-00454"},"M21-GAP-00454":{"line":3709,"offset":651423,"length":176,"previous":"M21-GAP-00453","next":"M21-GAP-00455"},"M21-GAP-00455":{"line":3710,"offset":651599,"length":176,"previous":"M21-GAP-00454","next":"M21-GAP-00456"},"M21-GAP-00456":{"line":3711,"offset":651775,"length":176,"previous":"M21-GAP-00455","next":"M21-GAP-00457"},"M21-GAP-00457":{"line":3712,"offset":651951,"length":176,"previous":"M21-GAP-00456","next":"M21-GAP-00458"},"M21-GAP-00458":{"line":3713,"offset":652127,"length":176,"previous":"M21-GAP-00457","next":"M21-GAP-00459"},"M21-GAP-00459":{"line":3714,"offset":652303,"length":176,"previous":"M21-GAP-00458","next":"M21-GAP-00460"},"M21-GAP-00460":{"line":3715,"offset":652479,"length":176,"previous":"M21-GAP-00459","next":"M21-GAP-00461"},"M21-GAP-00461":{"line":3716,"offset":652655,"length":176,"previous":"M21-GAP-00460","next":"M21-GAP-00462"},"M21-GAP-00462":{"line":3717,"offset":652831,"length":175,"previous":"M21-GAP-00461","next":"M21-GAP-00463"},"M21-GAP-00463":{"line":3718,"offset":653006,"length":176,"previous":"M21-GAP-00462","next":"M21-GAP-00464"},"M21-GAP-00464":{"line":3719,"offset":653182,"length":176,"previous":"M21-GAP-00463","next":"M21-GAP-00465"},"M21-GAP-00465":{"line":3720,"offset":653358,"length":175,"previous":"M21-GAP-00464","next":"M21-GAP-00466"},"M21-GAP-00466":{"line":3721,"offset":653533,"length":175,"previous":"M21-GAP-00465","next":"M21-GAP-00467"},"M21-GAP-00467":{"line":3722,"offset":653708,"length":175,"previous":"M21-GAP-00466","next":"M21-GAP-00468"},"M21-GAP-00468":{"line":3723,"offset":653883,"length":175,"previous":"M21-GAP-00467","next":"M21-GAP-00469"},"M21-GAP-00469":{"line":3724,"offset":654058,"length":182,"previous":"M21-GAP-00468","next":"M21-GAP-00470"},"M21-GAP-00470":{"line":3725,"offset":654240,"length":182,"previous":"M21-GAP-00469","next":"M21-GAP-00471"},"M21-GAP-00471":{"line":3726,"offset":654422,"length":183,"previous":"M21-GAP-00470","next":"M21-GAP-00472"},"M21-GAP-00472":{"line":3727,"offset":654605,"length":183,"previous":"M21-GAP-00471","next":"M21-GAP-00473"},"M21-GAP-00473":{"line":3728,"offset":654788,"length":183,"previous":"M21-GAP-00472","next":"M21-GAP-00474"},"M21-GAP-00474":{"line":3729,"offset":654971,"length":183,"previous":"M21-GAP-00473","next":"M21-GAP-00475"},"M21-GAP-00475":{"line":3730,"offset":655154,"length":183,"previous":"M21-GAP-00474","next":"M21-GAP-00476"},"M21-GAP-00476":{"line":3731,"offset":655337,"length":183,"previous":"M21-GAP-00475","next":"M21-GAP-00477"},"M21-GAP-00477":{"line":3732,"offset":655520,"length":183,"previous":"M21-GAP-00476","next":"M21-GAP-00478"},"M21-GAP-00478":{"line":3733,"offset":655703,"length":183,"previous":"M21-GAP-00477","next":"M21-GAP-00479"},"M21-GAP-00479":{"line":3734,"offset":655886,"length":183,"previous":"M21-GAP-00478","next":"M21-GAP-00480"},"M21-GAP-00480":{"line":3735,"offset":656069,"length":183,"previous":"M21-GAP-00479","next":"M21-GAP-00481"},"M21-GAP-00481":{"line":3736,"offset":656252,"length":182,"previous":"M21-GAP-00480","next":"M21-GAP-00482"},"M21-GAP-00482":{"line":3737,"offset":656434,"length":183,"previous":"M21-GAP-00481","next":"M21-GAP-00483"},"M21-GAP-00483":{"line":3738,"offset":656617,"length":183,"previous":"M21-GAP-00482","next":"M21-GAP-00484"},"M21-GAP-00484":{"line":3739,"offset":656800,"length":183,"previous":"M21-GAP-00483","next":"M21-GAP-00485"},"M21-GAP-00485":{"line":3740,"offset":656983,"length":183,"previous":"M21-GAP-00484","next":"M21-GAP-00486"},"M21-GAP-00486":{"line":3741,"offset":657166,"length":183,"previous":"M21-GAP-00485","next":"M21-GAP-00487"},"M21-GAP-00487":{"line":3742,"offset":657349,"length":183,"previous":"M21-GAP-00486","next":"M21-GAP-00488"},"M21-GAP-00488":{"line":3743,"offset":657532,"length":183,"previous":"M21-GAP-00487","next":"M21-GAP-00489"},"M21-GAP-00489":{"line":3744,"offset":657715,"length":183,"previous":"M21-GAP-00488","next":"M21-GAP-00490"},"M21-GAP-00490":{"line":3745,"offset":657898,"length":183,"previous":"M21-GAP-00489","next":"M21-GAP-00491"},"M21-GAP-00491":{"line":3746,"offset":658081,"length":183,"previous":"M21-GAP-00490","next":"M21-GAP-00492"},"M21-GAP-00492":{"line":3747,"offset":658264,"length":182,"previous":"M21-GAP-00491","next":"M21-GAP-00493"},"M21-GAP-00493":{"line":3748,"offset":658446,"length":182,"previous":"M21-GAP-00492","next":"M21-GAP-00494"},"M21-GAP-00494":{"line":3749,"offset":658628,"length":182,"previous":"M21-GAP-00493","next":"M21-GAP-00495"},"M21-GAP-00495":{"line":3750,"offset":658810,"length":182,"previous":"M21-GAP-00494","next":"M21-GAP-00496"},"M21-GAP-00496":{"line":3751,"offset":658992,"length":182,"previous":"M21-GAP-00495","next":"M21-GAP-00497"},"M21-GAP-00497":{"line":3752,"offset":659174,"length":182,"previous":"M21-GAP-00496","next":"M21-GAP-00498"},"M21-GAP-00498":{"line":3753,"offset":659356,"length":182,"previous":"M21-GAP-00497","next":"M21-GAP-00499"},"M21-GAP-00499":{"line":3754,"offset":659538,"length":194,"previous":"M21-GAP-00498","next":"M21-GAP-00500"},"M21-GAP-00500":{"line":3755,"offset":659732,"length":194,"previous":"M21-GAP-00499","next":"M21-GAP-00501"},"M21-GAP-00501":{"line":3756,"offset":659926,"length":194,"previous":"M21-GAP-00500","next":"M21-GAP-00502"},"M21-GAP-00502":{"line":3757,"offset":660120,"length":194,"previous":"M21-GAP-00501","next":"M21-GAP-00503"},"M21-GAP-00503":{"line":3758,"offset":660314,"length":184,"previous":"M21-GAP-00502","next":"M21-GAP-00504"},"M21-GAP-00504":{"line":3759,"offset":660498,"length":184,"previous":"M21-GAP-00503","next":"M21-GAP-00505"},"M21-GAP-00505":{"line":3760,"offset":660682,"length":185,"previous":"M21-GAP-00504","next":"M21-GAP-00506"},"M21-GAP-00506":{"line":3761,"offset":660867,"length":185,"previous":"M21-GAP-00505","next":"M21-GAP-00507"},"M21-GAP-00507":{"line":3762,"offset":661052,"length":185,"previous":"M21-GAP-00506","next":"M21-GAP-00508"},"M21-GAP-00508":{"line":3763,"offset":661237,"length":185,"previous":"M21-GAP-00507","next":"M21-GAP-00509"},"M21-GAP-00509":{"line":3764,"offset":661422,"length":185,"previous":"M21-GAP-00508","next":"M21-GAP-00510"},"M21-GAP-00510":{"line":3765,"offset":661607,"length":185,"previous":"M21-GAP-00509","next":"M21-GAP-00511"},"M21-GAP-00511":{"line":3766,"offset":661792,"length":185,"previous":"M21-GAP-00510","next":"M21-GAP-00512"},"M21-GAP-00512":{"line":3767,"offset":661977,"length":185,"previous":"M21-GAP-00511","next":"M21-GAP-00513"},"M21-GAP-00513":{"line":3768,"offset":662162,"length":185,"previous":"M21-GAP-00512","next":"M21-GAP-00514"},"M21-GAP-00514":{"line":3769,"offset":662347,"length":185,"previous":"M21-GAP-00513","next":"M21-GAP-00515"},"M21-GAP-00515":{"line":3770,"offset":662532,"length":184,"previous":"M21-GAP-00514","next":"M21-GAP-00516"},"M21-GAP-00516":{"line":3771,"offset":662716,"length":185,"previous":"M21-GAP-00515","next":"M21-GAP-00517"},"M21-GAP-00517":{"line":3772,"offset":662901,"length":185,"previous":"M21-GAP-00516","next":"M21-GAP-00518"},"M21-GAP-00518":{"line":3773,"offset":663086,"length":185,"previous":"M21-GAP-00517","next":"M21-GAP-00519"},"M21-GAP-00519":{"line":3774,"offset":663271,"length":185,"previous":"M21-GAP-00518","next":"M21-GAP-00520"},"M21-GAP-00520":{"line":3775,"offset":663456,"length":185,"previous":"M21-GAP-00519","next":"M21-GAP-00521"},"M21-GAP-00521":{"line":3776,"offset":663641,"length":185,"previous":"M21-GAP-00520","next":"M21-GAP-00522"},"M21-GAP-00522":{"line":3777,"offset":663826,"length":185,"previous":"M21-GAP-00521","next":"M21-GAP-00523"},"M21-GAP-00523":{"line":3778,"offset":664011,"length":185,"previous":"M21-GAP-00522","next":"M21-GAP-00524"},"M21-GAP-00524":{"line":3779,"offset":664196,"length":185,"previous":"M21-GAP-00523","next":"M21-GAP-00525"},"M21-GAP-00525":{"line":3780,"offset":664381,"length":185,"previous":"M21-GAP-00524","next":"M21-GAP-00526"},"M21-GAP-00526":{"line":3781,"offset":664566,"length":184,"previous":"M21-GAP-00525","next":"M21-GAP-00527"},"M21-GAP-00527":{"line":3782,"offset":664750,"length":185,"previous":"M21-GAP-00526","next":"M21-GAP-00528"},"M21-GAP-00528":{"line":3783,"offset":664935,"length":185,"previous":"M21-GAP-00527","next":"M21-GAP-00529"},"M21-GAP-00529":{"line":3784,"offset":665120,"length":185,"previous":"M21-GAP-00528","next":"M21-GAP-00530"},"M21-GAP-00530":{"line":3785,"offset":665305,"length":185,"previous":"M21-GAP-00529","next":"M21-GAP-00531"},"M21-GAP-00531":{"line":3786,"offset":665490,"length":185,"previous":"M21-GAP-00530","next":"M21-GAP-00532"},"M21-GAP-00532":{"line":3787,"offset":665675,"length":185,"previous":"M21-GAP-00531","next":"M21-GAP-00533"},"M21-GAP-00533":{"line":3788,"offset":665860,"length":185,"previous":"M21-GAP-00532","next":"M21-GAP-00534"},"M21-GAP-00534":{"line":3789,"offset":666045,"length":185,"previous":"M21-GAP-00533","next":"M21-GAP-00535"},"M21-GAP-00535":{"line":3790,"offset":666230,"length":185,"previous":"M21-GAP-00534","next":"M21-GAP-00536"},"M21-GAP-00536":{"line":3791,"offset":666415,"length":185,"previous":"M21-GAP-00535","next":"M21-GAP-00537"},"M21-GAP-00537":{"line":3792,"offset":666600,"length":184,"previous":"M21-GAP-00536","next":"M21-GAP-00538"},"M21-GAP-00538":{"line":3793,"offset":666784,"length":185,"previous":"M21-GAP-00537","next":"M21-GAP-00539"},"M21-GAP-00539":{"line":3794,"offset":666969,"length":185,"previous":"M21-GAP-00538","next":"M21-GAP-00540"},"M21-GAP-00540":{"line":3795,"offset":667154,"length":185,"previous":"M21-GAP-00539","next":"M21-GAP-00541"},"M21-GAP-00541":{"line":3796,"offset":667339,"length":185,"previous":"M21-GAP-00540","next":"M21-GAP-00542"},"M21-GAP-00542":{"line":3797,"offset":667524,"length":185,"previous":"M21-GAP-00541","next":"M21-GAP-00543"},"M21-GAP-00543":{"line":3798,"offset":667709,"length":185,"previous":"M21-GAP-00542","next":"M21-GAP-00544"},"M21-GAP-00544":{"line":3799,"offset":667894,"length":185,"previous":"M21-GAP-00543","next":"M21-GAP-00545"},"M21-GAP-00545":{"line":3800,"offset":668079,"length":185,"previous":"M21-GAP-00544","next":"M21-GAP-00546"},"M21-GAP-00546":{"line":3801,"offset":668264,"length":185,"previous":"M21-GAP-00545","next":"M21-GAP-00547"},"M21-GAP-00547":{"line":3802,"offset":668449,"length":185,"previous":"M21-GAP-00546","next":"M21-GAP-00548"},"M21-GAP-00548":{"line":3803,"offset":668634,"length":184,"previous":"M21-GAP-00547","next":"M21-GAP-00549"},"M21-GAP-00549":{"line":3804,"offset":668818,"length":185,"previous":"M21-GAP-00548","next":"M21-GAP-00550"},"M21-GAP-00550":{"line":3805,"offset":669003,"length":185,"previous":"M21-GAP-00549","next":"M21-GAP-00551"},"M21-GAP-00551":{"line":3806,"offset":669188,"length":185,"previous":"M21-GAP-00550","next":"M21-GAP-00552"},"M21-GAP-00552":{"line":3807,"offset":669373,"length":185,"previous":"M21-GAP-00551","next":"M21-GAP-00553"},"M21-GAP-00553":{"line":3808,"offset":669558,"length":185,"previous":"M21-GAP-00552","next":"M21-GAP-00554"},"M21-GAP-00554":{"line":3809,"offset":669743,"length":185,"previous":"M21-GAP-00553","next":"M21-GAP-00555"},"M21-GAP-00555":{"line":3810,"offset":669928,"length":185,"previous":"M21-GAP-00554","next":"M21-GAP-00556"},"M21-GAP-00556":{"line":3811,"offset":670113,"length":185,"previous":"M21-GAP-00555","next":"M21-GAP-00557"},"M21-GAP-00557":{"line":3812,"offset":670298,"length":185,"previous":"M21-GAP-00556","next":"M21-GAP-00558"},"M21-GAP-00558":{"line":3813,"offset":670483,"length":185,"previous":"M21-GAP-00557","next":"M21-GAP-00559"},"M21-GAP-00559":{"line":3814,"offset":670668,"length":184,"previous":"M21-GAP-00558","next":"M21-GAP-00560"},"M21-GAP-00560":{"line":3815,"offset":670852,"length":185,"previous":"M21-GAP-00559","next":"M21-GAP-00561"},"M21-GAP-00561":{"line":3816,"offset":671037,"length":185,"previous":"M21-GAP-00560","next":"M21-GAP-00562"},"M21-GAP-00562":{"line":3817,"offset":671222,"length":185,"previous":"M21-GAP-00561","next":"M21-GAP-00563"},"M21-GAP-00563":{"line":3818,"offset":671407,"length":185,"previous":"M21-GAP-00562","next":"M21-GAP-00564"},"M21-GAP-00564":{"line":3819,"offset":671592,"length":185,"previous":"M21-GAP-00563","next":"M21-GAP-00565"},"M21-GAP-00565":{"line":3820,"offset":671777,"length":185,"previous":"M21-GAP-00564","next":"M21-GAP-00566"},"M21-GAP-00566":{"line":3821,"offset":671962,"length":185,"previous":"M21-GAP-00565","next":"M21-GAP-00567"},"M21-GAP-00567":{"line":3822,"offset":672147,"length":185,"previous":"M21-GAP-00566","next":"M21-GAP-00568"},"M21-GAP-00568":{"line":3823,"offset":672332,"length":185,"previous":"M21-GAP-00567","next":"M21-GAP-00569"},"M21-GAP-00569":{"line":3824,"offset":672517,"length":185,"previous":"M21-GAP-00568","next":"M21-GAP-00570"},"M21-GAP-00570":{"line":3825,"offset":672702,"length":184,"previous":"M21-GAP-00569","next":"M21-GAP-00571"},"M21-GAP-00571":{"line":3826,"offset":672886,"length":185,"previous":"M21-GAP-00570","next":"M21-GAP-00572"},"M21-GAP-00572":{"line":3827,"offset":673071,"length":185,"previous":"M21-GAP-00571","next":"M21-GAP-00573"},"M21-GAP-00573":{"line":3828,"offset":673256,"length":185,"previous":"M21-GAP-00572","next":"M21-GAP-00574"},"M21-GAP-00574":{"line":3829,"offset":673441,"length":185,"previous":"M21-GAP-00573","next":"M21-GAP-00575"},"M21-GAP-00575":{"line":3830,"offset":673626,"length":185,"previous":"M21-GAP-00574","next":"M21-GAP-00576"},"M21-GAP-00576":{"line":3831,"offset":673811,"length":185,"previous":"M21-GAP-00575","next":"M21-GAP-00577"},"M21-GAP-00577":{"line":3832,"offset":673996,"length":184,"previous":"M21-GAP-00576","next":"M21-GAP-00578"},"M21-GAP-00578":{"line":3833,"offset":674180,"length":184,"previous":"M21-GAP-00577","next":"M21-GAP-00579"},"M21-GAP-00579":{"line":3834,"offset":674364,"length":190,"previous":"M21-GAP-00578","next":"M21-GAP-00580"},"M21-GAP-00580":{"line":3835,"offset":674554,"length":190,"previous":"M21-GAP-00579","next":"M21-GAP-00581"},"M21-GAP-00581":{"line":3836,"offset":674744,"length":191,"previous":"M21-GAP-00580","next":"M21-GAP-00582"},"M21-GAP-00582":{"line":3837,"offset":674935,"length":191,"previous":"M21-GAP-00581","next":"M21-GAP-00583"},"M21-GAP-00583":{"line":3838,"offset":675126,"length":191,"previous":"M21-GAP-00582","next":"M21-GAP-00584"},"M21-GAP-00584":{"line":3839,"offset":675317,"length":191,"previous":"M21-GAP-00583","next":"M21-GAP-00585"},"M21-GAP-00585":{"line":3840,"offset":675508,"length":191,"previous":"M21-GAP-00584","next":"M21-GAP-00586"},"M21-GAP-00586":{"line":3841,"offset":675699,"length":191,"previous":"M21-GAP-00585","next":"M21-GAP-00587"},"M21-GAP-00587":{"line":3842,"offset":675890,"length":191,"previous":"M21-GAP-00586","next":"M21-GAP-00588"},"M21-GAP-00588":{"line":3843,"offset":676081,"length":191,"previous":"M21-GAP-00587","next":"M21-GAP-00589"},"M21-GAP-00589":{"line":3844,"offset":676272,"length":191,"previous":"M21-GAP-00588","next":"M21-GAP-00590"},"M21-GAP-00590":{"line":3845,"offset":676463,"length":191,"previous":"M21-GAP-00589","next":"M21-GAP-00591"},"M21-GAP-00591":{"line":3846,"offset":676654,"length":190,"previous":"M21-GAP-00590","next":"M21-GAP-00592"},"M21-GAP-00592":{"line":3847,"offset":676844,"length":191,"previous":"M21-GAP-00591","next":"M21-GAP-00593"},"M21-GAP-00593":{"line":3848,"offset":677035,"length":191,"previous":"M21-GAP-00592","next":"M21-GAP-00594"},"M21-GAP-00594":{"line":3849,"offset":677226,"length":191,"previous":"M21-GAP-00593","next":"M21-GAP-00595"},"M21-GAP-00595":{"line":3850,"offset":677417,"length":191,"previous":"M21-GAP-00594","next":"M21-GAP-00596"},"M21-GAP-00596":{"line":3851,"offset":677608,"length":190,"previous":"M21-GAP-00595","next":"M21-GAP-00597"},"M21-GAP-00597":{"line":3852,"offset":677798,"length":190,"previous":"M21-GAP-00596","next":"M21-GAP-00598"},"M21-GAP-00598":{"line":3853,"offset":677988,"length":190,"previous":"M21-GAP-00597","next":"M21-GAP-00599"},"M21-GAP-00599":{"line":3854,"offset":678178,"length":190,"previous":"M21-GAP-00598","next":"M21-GAP-00600"},"M21-GAP-00600":{"line":3855,"offset":678368,"length":190,"previous":"M21-GAP-00599","next":"M21-GAP-00601"},"M21-GAP-00601":{"line":3856,"offset":678558,"length":190,"previous":"M21-GAP-00600","next":"M21-GAP-00602"},"M21-GAP-00602":{"line":3857,"offset":678748,"length":190,"previous":"M21-GAP-00601","next":"M21-GAP-00603"},"M21-GAP-00603":{"line":3858,"offset":678938,"length":189,"previous":"M21-GAP-00602","next":"M21-GAP-00604"},"M21-GAP-00604":{"line":3859,"offset":679127,"length":177,"previous":"M21-GAP-00603","next":"M21-GAP-00605"},"M21-GAP-00605":{"line":3860,"offset":679304,"length":177,"previous":"M21-GAP-00604","next":"M21-GAP-00606"},"M21-GAP-00606":{"line":3861,"offset":679481,"length":178,"previous":"M21-GAP-00605","next":"M21-GAP-00607"},"M21-GAP-00607":{"line":3862,"offset":679659,"length":178,"previous":"M21-GAP-00606","next":"M21-GAP-00608"},"M21-GAP-00608":{"line":3863,"offset":679837,"length":178,"previous":"M21-GAP-00607","next":"M21-GAP-00609"},"M21-GAP-00609":{"line":3864,"offset":680015,"length":178,"previous":"M21-GAP-00608","next":"M21-GAP-00610"},"M21-GAP-00610":{"line":3865,"offset":680193,"length":177,"previous":"M21-GAP-00609","next":"M21-GAP-00611"},"M21-GAP-00611":{"line":3866,"offset":680370,"length":177,"previous":"M21-GAP-00610","next":"M21-GAP-00612"},"M21-GAP-00612":{"line":3867,"offset":680547,"length":177,"previous":"M21-GAP-00611","next":"M21-GAP-00613"},"M21-GAP-00613":{"line":3868,"offset":680724,"length":177,"previous":"M21-GAP-00612","next":"M21-GAP-00614"},"M21-GAP-00614":{"line":3869,"offset":680901,"length":177,"previous":"M21-GAP-00613","next":"M21-GAP-00615"},"M21-GAP-00615":{"line":3870,"offset":681078,"length":177,"previous":"M21-GAP-00614","next":"M21-GAP-00616"},"M21-GAP-00616":{"line":3871,"offset":681255,"length":177,"previous":"M21-GAP-00615","next":"M21-GAP-00617"},"M21-GAP-00617":{"line":3872,"offset":681432,"length":177,"previous":"M21-GAP-00616","next":"M21-GAP-00618"},"M21-GAP-00618":{"line":3873,"offset":681609,"length":176,"previous":"M21-GAP-00617","next":"M21-GAP-00619"},"M21-GAP-00619":{"line":3874,"offset":681785,"length":176,"previous":"M21-GAP-00618","next":"M21-GAP-00620"},"M21-GAP-00620":{"line":3875,"offset":681961,"length":177,"previous":"M21-GAP-00619","next":"M21-GAP-00621"},"M21-GAP-00621":{"line":3876,"offset":682138,"length":177,"previous":"M21-GAP-00620","next":"M21-GAP-00622"},"M21-GAP-00622":{"line":3877,"offset":682315,"length":177,"previous":"M21-GAP-00621","next":"M21-GAP-00623"},"M21-GAP-00623":{"line":3878,"offset":682492,"length":177,"previous":"M21-GAP-00622","next":"M21-GAP-00624"},"M21-GAP-00624":{"line":3879,"offset":682669,"length":177,"previous":"M21-GAP-00623","next":"M21-GAP-00625"},"M21-GAP-00625":{"line":3880,"offset":682846,"length":177,"previous":"M21-GAP-00624","next":"M21-GAP-00626"},"M21-GAP-00626":{"line":3881,"offset":683023,"length":177,"previous":"M21-GAP-00625","next":"M21-GAP-00627"},"M21-GAP-00627":{"line":3882,"offset":683200,"length":177,"previous":"M21-GAP-00626","next":"M21-GAP-00628"},"M21-GAP-00628":{"line":3883,"offset":683377,"length":177,"previous":"M21-GAP-00627","next":"M21-GAP-00629"},"M21-GAP-00629":{"line":3884,"offset":683554,"length":177,"previous":"M21-GAP-00628","next":"M21-GAP-00630"},"M21-GAP-00630":{"line":3885,"offset":683731,"length":176,"previous":"M21-GAP-00629","next":"M21-GAP-00631"},"M21-GAP-00631":{"line":3886,"offset":683907,"length":177,"previous":"M21-GAP-00630","next":"M21-GAP-00632"},"M21-GAP-00632":{"line":3887,"offset":684084,"length":177,"previous":"M21-GAP-00631","next":"M21-GAP-00633"},"M21-GAP-00633":{"line":3888,"offset":684261,"length":177,"previous":"M21-GAP-00632","next":"M21-GAP-00634"},"M21-GAP-00634":{"line":3889,"offset":684438,"length":177,"previous":"M21-GAP-00633","next":"M21-GAP-00635"},"M21-GAP-00635":{"line":3890,"offset":684615,"length":177,"previous":"M21-GAP-00634","next":"M21-GAP-00636"},"M21-GAP-00636":{"line":3891,"offset":684792,"length":177,"previous":"M21-GAP-00635","next":"M21-GAP-00637"},"M21-GAP-00637":{"line":3892,"offset":684969,"length":177,"previous":"M21-GAP-00636","next":"M21-GAP-00638"},"M21-GAP-00638":{"line":3893,"offset":685146,"length":177,"previous":"M21-GAP-00637","next":"M21-GAP-00639"},"M21-GAP-00639":{"line":3894,"offset":685323,"length":177,"previous":"M21-GAP-00638","next":"M21-GAP-00640"},"M21-GAP-00640":{"line":3895,"offset":685500,"length":177,"previous":"M21-GAP-00639","next":"M21-GAP-00641"},"M21-GAP-00641":{"line":3896,"offset":685677,"length":176,"previous":"M21-GAP-00640","next":"M21-GAP-00642"},"M21-GAP-00642":{"line":3897,"offset":685853,"length":177,"previous":"M21-GAP-00641","next":"M21-GAP-00643"},"M21-GAP-00643":{"line":3898,"offset":686030,"length":177,"previous":"M21-GAP-00642","next":"M21-GAP-00644"},"M21-GAP-00644":{"line":3899,"offset":686207,"length":177,"previous":"M21-GAP-00643","next":"M21-GAP-00645"},"M21-GAP-00645":{"line":3900,"offset":686384,"length":177,"previous":"M21-GAP-00644","next":"M21-GAP-00646"},"M21-GAP-00646":{"line":3901,"offset":686561,"length":177,"previous":"M21-GAP-00645","next":"M21-GAP-00647"},"M21-GAP-00647":{"line":3902,"offset":686738,"length":177,"previous":"M21-GAP-00646","next":"M21-GAP-00648"},"M21-GAP-00648":{"line":3903,"offset":686915,"length":177,"previous":"M21-GAP-00647","next":"M21-GAP-00649"},"M21-GAP-00649":{"line":3904,"offset":687092,"length":177,"previous":"M21-GAP-00648","next":"M21-GAP-00650"},"M21-GAP-00650":{"line":3905,"offset":687269,"length":177,"previous":"M21-GAP-00649","next":"M21-GAP-00651"},"M21-GAP-00651":{"line":3906,"offset":687446,"length":177,"previous":"M21-GAP-00650","next":"M21-GAP-00652"},"M21-GAP-00652":{"line":3907,"offset":687623,"length":176,"previous":"M21-GAP-00651","next":"M21-GAP-00653"},"M21-GAP-00653":{"line":3908,"offset":687799,"length":176,"previous":"M21-GAP-00652","next":"M21-GAP-00654"},"M21-GAP-00654":{"line":3909,"offset":687975,"length":176,"previous":"M21-GAP-00653","next":"M21-GAP-00655"},"M21-GAP-00655":{"line":3910,"offset":688151,"length":176,"previous":"M21-GAP-00654","next":"M21-GAP-00656"},"M21-GAP-00656":{"line":3911,"offset":688327,"length":176,"previous":"M21-GAP-00655","next":"M21-GAP-00657"},"M21-GAP-00657":{"line":3912,"offset":688503,"length":176,"previous":"M21-GAP-00656","next":"M21-GAP-00658"},"M21-GAP-00658":{"line":3913,"offset":688679,"length":186,"previous":"M21-GAP-00657","next":"M21-GAP-00659"},"M21-GAP-00659":{"line":3914,"offset":688865,"length":186,"previous":"M21-GAP-00658","next":"M21-GAP-00660"},"M21-GAP-00660":{"line":3915,"offset":689051,"length":186,"previous":"M21-GAP-00659","next":"M21-GAP-00661"},"M21-GAP-00661":{"line":3916,"offset":689237,"length":186,"previous":"M21-GAP-00660","next":"M21-GAP-00662"},"M21-GAP-00662":{"line":3917,"offset":689423,"length":186,"previous":"M21-GAP-00661","next":"M21-GAP-00663"},"M21-GAP-00663":{"line":3918,"offset":689609,"length":172,"previous":"M21-GAP-00662","next":"M21-GAP-00664"},"M21-GAP-00664":{"line":3919,"offset":689781,"length":172,"previous":"M21-GAP-00663","next":"M21-GAP-00665"},"M21-GAP-00665":{"line":3920,"offset":689953,"length":173,"previous":"M21-GAP-00664","next":"M21-GAP-00666"},"M21-GAP-00666":{"line":3921,"offset":690126,"length":173,"previous":"M21-GAP-00665","next":"M21-GAP-00667"},"M21-GAP-00667":{"line":3922,"offset":690299,"length":173,"previous":"M21-GAP-00666","next":"M21-GAP-00668"},"M21-GAP-00668":{"line":3923,"offset":690472,"length":173,"previous":"M21-GAP-00667","next":"M21-GAP-00669"},"M21-GAP-00669":{"line":3924,"offset":690645,"length":173,"previous":"M21-GAP-00668","next":"M21-GAP-00670"},"M21-GAP-00670":{"line":3925,"offset":690818,"length":173,"previous":"M21-GAP-00669","next":"M21-GAP-00671"},"M21-GAP-00671":{"line":3926,"offset":690991,"length":173,"previous":"M21-GAP-00670","next":"M21-GAP-00672"},"M21-GAP-00672":{"line":3927,"offset":691164,"length":173,"previous":"M21-GAP-00671","next":"M21-GAP-00673"},"M21-GAP-00673":{"line":3928,"offset":691337,"length":173,"previous":"M21-GAP-00672","next":"M21-GAP-00674"},"M21-GAP-00674":{"line":3929,"offset":691510,"length":173,"previous":"M21-GAP-00673","next":"M21-GAP-00675"},"M21-GAP-00675":{"line":3930,"offset":691683,"length":172,"previous":"M21-GAP-00674","next":"M21-GAP-00676"},"M21-GAP-00676":{"line":3931,"offset":691855,"length":173,"previous":"M21-GAP-00675","next":"M21-GAP-00677"},"M21-GAP-00677":{"line":3932,"offset":692028,"length":173,"previous":"M21-GAP-00676","next":"M21-GAP-00678"},"M21-GAP-00678":{"line":3933,"offset":692201,"length":173,"previous":"M21-GAP-00677","next":"M21-GAP-00679"},"M21-GAP-00679":{"line":3934,"offset":692374,"length":173,"previous":"M21-GAP-00678","next":"M21-GAP-00680"},"M21-GAP-00680":{"line":3935,"offset":692547,"length":173,"previous":"M21-GAP-00679","next":"M21-GAP-00681"},"M21-GAP-00681":{"line":3936,"offset":692720,"length":173,"previous":"M21-GAP-00680","next":"M21-GAP-00682"},"M21-GAP-00682":{"line":3937,"offset":692893,"length":173,"previous":"M21-GAP-00681","next":"M21-GAP-00683"},"M21-GAP-00683":{"line":3938,"offset":693066,"length":173,"previous":"M21-GAP-00682","next":"M21-GAP-00684"},"M21-GAP-00684":{"line":3939,"offset":693239,"length":173,"previous":"M21-GAP-00683","next":"M21-GAP-00685"},"M21-GAP-00685":{"line":3940,"offset":693412,"length":173,"previous":"M21-GAP-00684","next":"M21-GAP-00686"},"M21-GAP-00686":{"line":3941,"offset":693585,"length":172,"previous":"M21-GAP-00685","next":"M21-GAP-00687"},"M21-GAP-00687":{"line":3942,"offset":693757,"length":173,"previous":"M21-GAP-00686","next":"M21-GAP-00688"},"M21-GAP-00688":{"line":3943,"offset":693930,"length":173,"previous":"M21-GAP-00687","next":"M21-GAP-00689"},"M21-GAP-00689":{"line":3944,"offset":694103,"length":173,"previous":"M21-GAP-00688","next":"M21-GAP-00690"},"M21-GAP-00690":{"line":3945,"offset":694276,"length":173,"previous":"M21-GAP-00689","next":"M21-GAP-00691"},"M21-GAP-00691":{"line":3946,"offset":694449,"length":173,"previous":"M21-GAP-00690","next":"M21-GAP-00692"},"M21-GAP-00692":{"line":3947,"offset":694622,"length":173,"previous":"M21-GAP-00691","next":"M21-GAP-00693"},"M21-GAP-00693":{"line":3948,"offset":694795,"length":173,"previous":"M21-GAP-00692","next":"M21-GAP-00694"},"M21-GAP-00694":{"line":3949,"offset":694968,"length":173,"previous":"M21-GAP-00693","next":"M21-GAP-00695"},"M21-GAP-00695":{"line":3950,"offset":695141,"length":173,"previous":"M21-GAP-00694","next":"M21-GAP-00696"},"M21-GAP-00696":{"line":3951,"offset":695314,"length":173,"previous":"M21-GAP-00695","next":"M21-GAP-00697"},"M21-GAP-00697":{"line":3952,"offset":695487,"length":172,"previous":"M21-GAP-00696","next":"M21-GAP-00698"},"M21-GAP-00698":{"line":3953,"offset":695659,"length":173,"previous":"M21-GAP-00697","next":"M21-GAP-00699"},"M21-GAP-00699":{"line":3954,"offset":695832,"length":173,"previous":"M21-GAP-00698","next":"M21-GAP-00700"},"M21-GAP-00700":{"line":3955,"offset":696005,"length":173,"previous":"M21-GAP-00699","next":"M21-GAP-00701"},"M21-GAP-00701":{"line":3956,"offset":696178,"length":173,"previous":"M21-GAP-00700","next":"M21-GAP-00702"},"M21-GAP-00702":{"line":3957,"offset":696351,"length":173,"previous":"M21-GAP-00701","next":"M21-GAP-00703"},"M21-GAP-00703":{"line":3958,"offset":696524,"length":172,"previous":"M21-GAP-00702","next":"M21-GAP-00704"},"M21-GAP-00704":{"line":3959,"offset":696696,"length":172,"previous":"M21-GAP-00703","next":"M21-GAP-00705"},"M21-GAP-00705":{"line":3960,"offset":696868,"length":172,"previous":"M21-GAP-00704","next":"M21-GAP-00706"},"M21-GAP-00706":{"line":3961,"offset":697040,"length":172,"previous":"M21-GAP-00705","next":"M21-GAP-00707"},"M21-GAP-00707":{"line":3962,"offset":697212,"length":172,"previous":"M21-GAP-00706","next":"M21-GAP-00708"},"M21-GAP-00708":{"line":3963,"offset":697384,"length":173,"previous":"M21-GAP-00707","next":"M21-GAP-00709"},"M21-GAP-00709":{"line":3964,"offset":697557,"length":173,"previous":"M21-GAP-00708","next":"M21-GAP-00710"},"M21-GAP-00710":{"line":3965,"offset":697730,"length":174,"previous":"M21-GAP-00709","next":"M21-GAP-00711"},"M21-GAP-00711":{"line":3966,"offset":697904,"length":174,"previous":"M21-GAP-00710","next":"M21-GAP-00712"},"M21-GAP-00712":{"line":3967,"offset":698078,"length":174,"previous":"M21-GAP-00711","next":"M21-GAP-00713"},"M21-GAP-00713":{"line":3968,"offset":698252,"length":174,"previous":"M21-GAP-00712","next":"M21-GAP-00714"},"M21-GAP-00714":{"line":3969,"offset":698426,"length":174,"previous":"M21-GAP-00713","next":"M21-GAP-00715"},"M21-GAP-00715":{"line":3970,"offset":698600,"length":174,"previous":"M21-GAP-00714","next":"M21-GAP-00716"},"M21-GAP-00716":{"line":3971,"offset":698774,"length":174,"previous":"M21-GAP-00715","next":"M21-GAP-00717"},"M21-GAP-00717":{"line":3972,"offset":698948,"length":174,"previous":"M21-GAP-00716","next":"M21-GAP-00718"},"M21-GAP-00718":{"line":3973,"offset":699122,"length":174,"previous":"M21-GAP-00717","next":"M21-GAP-00719"},"M21-GAP-00719":{"line":3974,"offset":699296,"length":174,"previous":"M21-GAP-00718","next":"M21-GAP-00720"},"M21-GAP-00720":{"line":3975,"offset":699470,"length":173,"previous":"M21-GAP-00719","next":"M21-GAP-00721"},"M21-GAP-00721":{"line":3976,"offset":699643,"length":174,"previous":"M21-GAP-00720","next":"M21-GAP-00722"},"M21-GAP-00722":{"line":3977,"offset":699817,"length":174,"previous":"M21-GAP-00721","next":"M21-GAP-00723"},"M21-GAP-00723":{"line":3978,"offset":699991,"length":174,"previous":"M21-GAP-00722","next":"M21-GAP-00724"},"M21-GAP-00724":{"line":3979,"offset":700165,"length":174,"previous":"M21-GAP-00723","next":"M21-GAP-00725"},"M21-GAP-00725":{"line":3980,"offset":700339,"length":174,"previous":"M21-GAP-00724","next":"M21-GAP-00726"},"M21-GAP-00726":{"line":3981,"offset":700513,"length":174,"previous":"M21-GAP-00725","next":"M21-GAP-00727"},"M21-GAP-00727":{"line":3982,"offset":700687,"length":174,"previous":"M21-GAP-00726","next":"M21-GAP-00728"},"M21-GAP-00728":{"line":3983,"offset":700861,"length":174,"previous":"M21-GAP-00727","next":"M21-GAP-00729"},"M21-GAP-00729":{"line":3984,"offset":701035,"length":174,"previous":"M21-GAP-00728","next":"M21-GAP-00730"},"M21-GAP-00730":{"line":3985,"offset":701209,"length":174,"previous":"M21-GAP-00729","next":"M21-GAP-00731"},"M21-GAP-00731":{"line":3986,"offset":701383,"length":173,"previous":"M21-GAP-00730","next":"M21-GAP-00732"},"M21-GAP-00732":{"line":3987,"offset":701556,"length":174,"previous":"M21-GAP-00731","next":"M21-GAP-00733"},"M21-GAP-00733":{"line":3988,"offset":701730,"length":174,"previous":"M21-GAP-00732","next":"M21-GAP-00734"},"M21-GAP-00734":{"line":3989,"offset":701904,"length":174,"previous":"M21-GAP-00733","next":"M21-GAP-00735"},"M21-GAP-00735":{"line":3990,"offset":702078,"length":174,"previous":"M21-GAP-00734","next":"M21-GAP-00736"},"M21-GAP-00736":{"line":3991,"offset":702252,"length":173,"previous":"M21-GAP-00735","next":"M21-GAP-00737"},"M21-GAP-00737":{"line":3992,"offset":702425,"length":173,"previous":"M21-GAP-00736","next":"M21-GAP-00738"},"M21-GAP-00738":{"line":3993,"offset":702598,"length":173,"previous":"M21-GAP-00737","next":"M21-GAP-00739"},"M21-GAP-00739":{"line":3994,"offset":702771,"length":173,"previous":"M21-GAP-00738","next":"M21-GAP-00740"},"M21-GAP-00740":{"line":3995,"offset":702944,"length":173,"previous":"M21-GAP-00739","next":"M21-GAP-00741"},"M21-GAP-00741":{"line":3996,"offset":703117,"length":173,"previous":"M21-GAP-00740","next":"M21-GAP-00742"},"M21-GAP-00742":{"line":3997,"offset":703290,"length":191,"previous":"M21-GAP-00741","next":"M21-GAP-00743"},"M21-GAP-00743":{"line":3998,"offset":703481,"length":191,"previous":"M21-GAP-00742","next":"M21-GAP-00744"},"M21-GAP-00744":{"line":3999,"offset":703672,"length":192,"previous":"M21-GAP-00743","next":"M21-GAP-00745"},"M21-GAP-00745":{"line":4000,"offset":703864,"length":192,"previous":"M21-GAP-00744","next":"M21-GAP-00746"},"M21-GAP-00746":{"line":4001,"offset":704056,"length":192,"previous":"M21-GAP-00745","next":"M21-GAP-00747"},"M21-GAP-00747":{"line":4002,"offset":704248,"length":192,"previous":"M21-GAP-00746","next":"M21-GAP-00748"},"M21-GAP-00748":{"line":4003,"offset":704440,"length":191,"previous":"M21-GAP-00747","next":"M21-GAP-00749"},"M21-GAP-00749":{"line":4004,"offset":704631,"length":191,"previous":"M21-GAP-00748","next":"M21-GAP-00750"},"M21-GAP-00750":{"line":4005,"offset":704822,"length":191,"previous":"M21-GAP-00749","next":"M21-GAP-00751"},"M21-GAP-00751":{"line":4006,"offset":705013,"length":191,"previous":"M21-GAP-00750","next":"M21-GAP-00752"},"M21-GAP-00752":{"line":4007,"offset":705204,"length":191,"previous":"M21-GAP-00751","next":"M21-GAP-00753"},"M21-GAP-00753":{"line":4008,"offset":705395,"length":191,"previous":"M21-GAP-00752","next":"M21-GAP-00754"},"M21-GAP-00754":{"line":4009,"offset":705586,"length":191,"previous":"M21-GAP-00753","next":"M21-GAP-00755"},"M21-GAP-00755":{"line":4010,"offset":705777,"length":191,"previous":"M21-GAP-00754","next":"M21-GAP-00756"},"M21-GAP-00756":{"line":4011,"offset":705968,"length":195,"previous":"M21-GAP-00755","next":"M21-GAP-00757"},"M21-GAP-00757":{"line":4012,"offset":706163,"length":195,"previous":"M21-GAP-00756","next":"M21-GAP-00758"},"M21-GAP-00758":{"line":4013,"offset":706358,"length":195,"previous":"M21-GAP-00757","next":"M21-GAP-00759"},"M21-GAP-00759":{"line":4014,"offset":706553,"length":187,"previous":"M21-GAP-00758","next":"M21-GAP-00760"},"M21-GAP-00760":{"line":4015,"offset":706740,"length":187,"previous":"M21-GAP-00759","next":"M21-GAP-00761"},"M21-GAP-00761":{"line":4016,"offset":706927,"length":188,"previous":"M21-GAP-00760","next":"M21-GAP-00762"},"M21-GAP-00762":{"line":4017,"offset":707115,"length":188,"previous":"M21-GAP-00761","next":"M21-GAP-00763"},"M21-GAP-00763":{"line":4018,"offset":707303,"length":188,"previous":"M21-GAP-00762","next":"M21-GAP-00764"},"M21-GAP-00764":{"line":4019,"offset":707491,"length":188,"previous":"M21-GAP-00763","next":"M21-GAP-00765"},"M21-GAP-00765":{"line":4020,"offset":707679,"length":188,"previous":"M21-GAP-00764","next":"M21-GAP-00766"},"M21-GAP-00766":{"line":4021,"offset":707867,"length":188,"previous":"M21-GAP-00765","next":"M21-GAP-00767"},"M21-GAP-00767":{"line":4022,"offset":708055,"length":188,"previous":"M21-GAP-00766","next":"M21-GAP-00768"},"M21-GAP-00768":{"line":4023,"offset":708243,"length":188,"previous":"M21-GAP-00767","next":"M21-GAP-00769"},"M21-GAP-00769":{"line":4024,"offset":708431,"length":188,"previous":"M21-GAP-00768","next":"M21-GAP-00770"},"M21-GAP-00770":{"line":4025,"offset":708619,"length":188,"previous":"M21-GAP-00769","next":"M21-GAP-00771"},"M21-GAP-00771":{"line":4026,"offset":708807,"length":187,"previous":"M21-GAP-00770","next":"M21-GAP-00772"},"M21-GAP-00772":{"line":4027,"offset":708994,"length":188,"previous":"M21-GAP-00771","next":"M21-GAP-00773"},"M21-GAP-00773":{"line":4028,"offset":709182,"length":188,"previous":"M21-GAP-00772","next":"M21-GAP-00774"},"M21-GAP-00774":{"line":4029,"offset":709370,"length":188,"previous":"M21-GAP-00773","next":"M21-GAP-00775"},"M21-GAP-00775":{"line":4030,"offset":709558,"length":188,"previous":"M21-GAP-00774","next":"M21-GAP-00776"},"M21-GAP-00776":{"line":4031,"offset":709746,"length":188,"previous":"M21-GAP-00775","next":"M21-GAP-00777"},"M21-GAP-00777":{"line":4032,"offset":709934,"length":188,"previous":"M21-GAP-00776","next":"M21-GAP-00778"},"M21-GAP-00778":{"line":4033,"offset":710122,"length":188,"previous":"M21-GAP-00777","next":"M21-GAP-00779"},"M21-GAP-00779":{"line":4034,"offset":710310,"length":188,"previous":"M21-GAP-00778","next":"M21-GAP-00780"},"M21-GAP-00780":{"line":4035,"offset":710498,"length":188,"previous":"M21-GAP-00779","next":"M21-GAP-00781"},"M21-GAP-00781":{"line":4036,"offset":710686,"length":188,"previous":"M21-GAP-00780","next":"M21-GAP-00782"},"M21-GAP-00782":{"line":4037,"offset":710874,"length":187,"previous":"M21-GAP-00781","next":"M21-GAP-00783"},"M21-GAP-00783":{"line":4038,"offset":711061,"length":188,"previous":"M21-GAP-00782","next":"M21-GAP-00784"},"M21-GAP-00784":{"line":4039,"offset":711249,"length":188,"previous":"M21-GAP-00783","next":"M21-GAP-00785"},"M21-GAP-00785":{"line":4040,"offset":711437,"length":188,"previous":"M21-GAP-00784","next":"M21-GAP-00786"},"M21-GAP-00786":{"line":4041,"offset":711625,"length":188,"previous":"M21-GAP-00785","next":"M21-GAP-00787"},"M21-GAP-00787":{"line":4042,"offset":711813,"length":188,"previous":"M21-GAP-00786","next":"M21-GAP-00788"},"M21-GAP-00788":{"line":4043,"offset":712001,"length":188,"previous":"M21-GAP-00787","next":"M21-GAP-00789"},"M21-GAP-00789":{"line":4044,"offset":712189,"length":188,"previous":"M21-GAP-00788","next":"M21-GAP-00790"},"M21-GAP-00790":{"line":4045,"offset":712377,"length":188,"previous":"M21-GAP-00789","next":"M21-GAP-00791"},"M21-GAP-00791":{"line":4046,"offset":712565,"length":188,"previous":"M21-GAP-00790","next":"M21-GAP-00792"},"M21-GAP-00792":{"line":4047,"offset":712753,"length":188,"previous":"M21-GAP-00791","next":"M21-GAP-00793"},"M21-GAP-00793":{"line":4048,"offset":712941,"length":187,"previous":"M21-GAP-00792","next":"M21-GAP-00794"},"M21-GAP-00794":{"line":4049,"offset":713128,"length":188,"previous":"M21-GAP-00793","next":"M21-GAP-00795"},"M21-GAP-00795":{"line":4050,"offset":713316,"length":188,"previous":"M21-GAP-00794","next":"M21-GAP-00796"},"M21-GAP-00796":{"line":4051,"offset":713504,"length":188,"previous":"M21-GAP-00795","next":"M21-GAP-00797"},"M21-GAP-00797":{"line":4052,"offset":713692,"length":188,"previous":"M21-GAP-00796","next":"M21-GAP-00798"},"M21-GAP-00798":{"line":4053,"offset":713880,"length":188,"previous":"M21-GAP-00797","next":"M21-GAP-00799"},"M21-GAP-00799":{"line":4054,"offset":714068,"length":188,"previous":"M21-GAP-00798","next":"M21-GAP-00800"},"M21-GAP-00800":{"line":4055,"offset":714256,"length":188,"previous":"M21-GAP-00799","next":"M21-GAP-00801"},"M21-GAP-00801":{"line":4056,"offset":714444,"length":188,"previous":"M21-GAP-00800","next":"M21-GAP-00802"},"M21-GAP-00802":{"line":4057,"offset":714632,"length":188,"previous":"M21-GAP-00801","next":"M21-GAP-00803"},"M21-GAP-00803":{"line":4058,"offset":714820,"length":188,"previous":"M21-GAP-00802","next":"M21-GAP-00804"},"M21-GAP-00804":{"line":4059,"offset":715008,"length":187,"previous":"M21-GAP-00803","next":"M21-GAP-00805"},"M21-GAP-00805":{"line":4060,"offset":715195,"length":188,"previous":"M21-GAP-00804","next":"M21-GAP-00806"},"M21-GAP-00806":{"line":4061,"offset":715383,"length":188,"previous":"M21-GAP-00805","next":"M21-GAP-00807"},"M21-GAP-00807":{"line":4062,"offset":715571,"length":188,"previous":"M21-GAP-00806","next":"M21-GAP-00808"},"M21-GAP-00808":{"line":4063,"offset":715759,"length":188,"previous":"M21-GAP-00807","next":"M21-GAP-00809"},"M21-GAP-00809":{"line":4064,"offset":715947,"length":188,"previous":"M21-GAP-00808","next":"M21-GAP-00810"},"M21-GAP-00810":{"line":4065,"offset":716135,"length":188,"previous":"M21-GAP-00809","next":"M21-GAP-00811"},"M21-GAP-00811":{"line":4066,"offset":716323,"length":188,"previous":"M21-GAP-00810","next":"M21-GAP-00812"},"M21-GAP-00812":{"line":4067,"offset":716511,"length":188,"previous":"M21-GAP-00811","next":"M21-GAP-00813"},"M21-GAP-00813":{"line":4068,"offset":716699,"length":188,"previous":"M21-GAP-00812","next":"M21-GAP-00814"},"M21-GAP-00814":{"line":4069,"offset":716887,"length":188,"previous":"M21-GAP-00813","next":"M21-GAP-00815"},"M21-GAP-00815":{"line":4070,"offset":717075,"length":187,"previous":"M21-GAP-00814","next":"M21-GAP-00816"},"M21-GAP-00816":{"line":4071,"offset":717262,"length":188,"previous":"M21-GAP-00815","next":"M21-GAP-00817"},"M21-GAP-00817":{"line":4072,"offset":717450,"length":188,"previous":"M21-GAP-00816","next":"M21-GAP-00818"},"M21-GAP-00818":{"line":4073,"offset":717638,"length":188,"previous":"M21-GAP-00817","next":"M21-GAP-00819"},"M21-GAP-00819":{"line":4074,"offset":717826,"length":188,"previous":"M21-GAP-00818","next":"M21-GAP-00820"},"M21-GAP-00820":{"line":4075,"offset":718014,"length":188,"previous":"M21-GAP-00819","next":"M21-GAP-00821"},"M21-GAP-00821":{"line":4076,"offset":718202,"length":188,"previous":"M21-GAP-00820","next":"M21-GAP-00822"},"M21-GAP-00822":{"line":4077,"offset":718390,"length":188,"previous":"M21-GAP-00821","next":"M21-GAP-00823"},"M21-GAP-00823":{"line":4078,"offset":718578,"length":188,"previous":"M21-GAP-00822","next":"M21-GAP-00824"},"M21-GAP-00824":{"line":4079,"offset":718766,"length":187,"previous":"M21-GAP-00823","next":"M21-GAP-00825"},"M21-GAP-00825":{"line":4080,"offset":718953,"length":187,"previous":"M21-GAP-00824","next":"M21-GAP-00826"},"M21-GAP-00826":{"line":4081,"offset":719140,"length":187,"previous":"M21-GAP-00825","next":"M21-GAP-00827"},"M21-GAP-00827":{"line":4082,"offset":719327,"length":205,"previous":"M21-GAP-00826","next":"M21-GAP-00828"},"M21-GAP-00828":{"line":4083,"offset":719532,"length":205,"previous":"M21-GAP-00827","next":"M21-GAP-00829"},"M21-GAP-00829":{"line":4084,"offset":719737,"length":205,"previous":"M21-GAP-00828","next":"M21-GAP-00830"},"M21-GAP-00830":{"line":4085,"offset":719942,"length":205,"previous":"M21-GAP-00829","next":"M21-GAP-00831"},"M21-GAP-00831":{"line":4086,"offset":720147,"length":205,"previous":"M21-GAP-00830","next":"M21-GAP-00832"},"M21-GAP-00832":{"line":4087,"offset":720352,"length":205,"previous":"M21-GAP-00831","next":"M21-GAP-00833"},"M21-GAP-00833":{"line":4088,"offset":720557,"length":205,"previous":"M21-GAP-00832","next":"M21-GAP-00834"},"M21-GAP-00834":{"line":4089,"offset":720762,"length":187,"previous":"M21-GAP-00833","next":"M21-GAP-00835"},"M21-GAP-00835":{"line":4090,"offset":720949,"length":187,"previous":"M21-GAP-00834","next":"M21-GAP-00836"},"M21-GAP-00836":{"line":4091,"offset":721136,"length":187,"previous":"M21-GAP-00835","next":"M21-GAP-00837"},"M21-GAP-00837":{"line":4092,"offset":721323,"length":187,"previous":"M21-GAP-00836","next":"M21-GAP-00838"},"M21-GAP-00838":{"line":4093,"offset":721510,"length":187,"previous":"M21-GAP-00837","next":"M21-GAP-00839"},"M21-GAP-00839":{"line":4094,"offset":721697,"length":187,"previous":"M21-GAP-00838","next":"M21-GAP-00840"},"M21-GAP-00840":{"line":4095,"offset":721884,"length":187,"previous":"M21-GAP-00839","next":"M21-GAP-00841"},"M21-GAP-00841":{"line":4096,"offset":722071,"length":194,"previous":"M21-GAP-00840","next":"M21-GAP-00842"},"M21-GAP-00842":{"line":4097,"offset":722265,"length":194,"previous":"M21-GAP-00841","next":"M21-GAP-00843"},"M21-GAP-00843":{"line":4098,"offset":722459,"length":194,"previous":"M21-GAP-00842","next":"M21-GAP-00844"},"M21-GAP-00844":{"line":4099,"offset":722653,"length":194,"previous":"M21-GAP-00843","next":"M21-GAP-00845"},"M21-GAP-00845":{"line":4100,"offset":722847,"length":194,"previous":"M21-GAP-00844","next":"M21-GAP-00846"},"M21-GAP-00846":{"line":4101,"offset":723041,"length":194,"previous":"M21-GAP-00845","next":"M21-GAP-00847"},"M21-GAP-00847":{"line":4102,"offset":723235,"length":191,"previous":"M21-GAP-00846","next":"M21-GAP-00848"},"M21-GAP-00848":{"line":4103,"offset":723426,"length":191,"previous":"M21-GAP-00847","next":"M21-GAP-00849"},"M21-GAP-00849":{"line":4104,"offset":723617,"length":192,"previous":"M21-GAP-00848","next":"M21-GAP-00850"},"M21-GAP-00850":{"line":4105,"offset":723809,"length":192,"previous":"M21-GAP-00849","next":"M21-GAP-00851"},"M21-GAP-00851":{"line":4106,"offset":724001,"length":192,"previous":"M21-GAP-00850","next":"M21-GAP-00852"},"M21-GAP-00852":{"line":4107,"offset":724193,"length":192,"previous":"M21-GAP-00851","next":"M21-GAP-00853"},"M21-GAP-00853":{"line":4108,"offset":724385,"length":192,"previous":"M21-GAP-00852","next":"M21-GAP-00854"},"M21-GAP-00854":{"line":4109,"offset":724577,"length":192,"previous":"M21-GAP-00853","next":"M21-GAP-00855"},"M21-GAP-00855":{"line":4110,"offset":724769,"length":192,"previous":"M21-GAP-00854","next":"M21-GAP-00856"},"M21-GAP-00856":{"line":4111,"offset":724961,"length":192,"previous":"M21-GAP-00855","next":"M21-GAP-00857"},"M21-GAP-00857":{"line":4112,"offset":725153,"length":192,"previous":"M21-GAP-00856","next":"M21-GAP-00858"},"M21-GAP-00858":{"line":4113,"offset":725345,"length":192,"previous":"M21-GAP-00857","next":"M21-GAP-00859"},"M21-GAP-00859":{"line":4114,"offset":725537,"length":191,"previous":"M21-GAP-00858","next":"M21-GAP-00860"},"M21-GAP-00860":{"line":4115,"offset":725728,"length":192,"previous":"M21-GAP-00859","next":"M21-GAP-00861"},"M21-GAP-00861":{"line":4116,"offset":725920,"length":192,"previous":"M21-GAP-00860","next":"M21-GAP-00862"},"M21-GAP-00862":{"line":4117,"offset":726112,"length":192,"previous":"M21-GAP-00861","next":"M21-GAP-00863"},"M21-GAP-00863":{"line":4118,"offset":726304,"length":192,"previous":"M21-GAP-00862","next":"M21-GAP-00864"},"M21-GAP-00864":{"line":4119,"offset":726496,"length":192,"previous":"M21-GAP-00863","next":"M21-GAP-00865"},"M21-GAP-00865":{"line":4120,"offset":726688,"length":192,"previous":"M21-GAP-00864","next":"M21-GAP-00866"},"M21-GAP-00866":{"line":4121,"offset":726880,"length":192,"previous":"M21-GAP-00865","next":"M21-GAP-00867"},"M21-GAP-00867":{"line":4122,"offset":727072,"length":192,"previous":"M21-GAP-00866","next":"M21-GAP-00868"},"M21-GAP-00868":{"line":4123,"offset":727264,"length":192,"previous":"M21-GAP-00867","next":"M21-GAP-00869"},"M21-GAP-00869":{"line":4124,"offset":727456,"length":192,"previous":"M21-GAP-00868","next":"M21-GAP-00870"},"M21-GAP-00870":{"line":4125,"offset":727648,"length":191,"previous":"M21-GAP-00869","next":"M21-GAP-00871"},"M21-GAP-00871":{"line":4126,"offset":727839,"length":192,"previous":"M21-GAP-00870","next":"M21-GAP-00872"},"M21-GAP-00872":{"line":4127,"offset":728031,"length":192,"previous":"M21-GAP-00871","next":"M21-GAP-00873"},"M21-GAP-00873":{"line":4128,"offset":728223,"length":191,"previous":"M21-GAP-00872","next":"M21-GAP-00874"},"M21-GAP-00874":{"line":4129,"offset":728414,"length":191,"previous":"M21-GAP-00873","next":"M21-GAP-00875"},"M21-GAP-00875":{"line":4130,"offset":728605,"length":191,"previous":"M21-GAP-00874","next":"M21-GAP-00876"},"M21-GAP-00876":{"line":4131,"offset":728796,"length":191,"previous":"M21-GAP-00875","next":"M21-GAP-00877"},"M21-GAP-00877":{"line":4132,"offset":728987,"length":191,"previous":"M21-GAP-00876","next":"M21-GAP-00878"},"M21-GAP-00878":{"line":4133,"offset":729178,"length":191,"previous":"M21-GAP-00877","next":"M21-GAP-00879"},"M21-GAP-00879":{"line":4134,"offset":729369,"length":186,"previous":"M21-GAP-00878","next":"M21-GAP-00880"},"M21-GAP-00880":{"line":4135,"offset":729555,"length":186,"previous":"M21-GAP-00879","next":"M21-GAP-00881"},"M21-GAP-00881":{"line":4136,"offset":729741,"length":187,"previous":"M21-GAP-00880","next":"M21-GAP-00882"},"M21-GAP-00882":{"line":4137,"offset":729928,"length":187,"previous":"M21-GAP-00881","next":"M21-GAP-00883"},"M21-GAP-00883":{"line":4138,"offset":730115,"length":187,"previous":"M21-GAP-00882","next":"M21-GAP-00884"},"M21-GAP-00884":{"line":4139,"offset":730302,"length":187,"previous":"M21-GAP-00883","next":"M21-GAP-00885"},"M21-GAP-00885":{"line":4140,"offset":730489,"length":187,"previous":"M21-GAP-00884","next":"M21-GAP-00886"},"M21-GAP-00886":{"line":4141,"offset":730676,"length":187,"previous":"M21-GAP-00885","next":"M21-GAP-00887"},"M21-GAP-00887":{"line":4142,"offset":730863,"length":187,"previous":"M21-GAP-00886","next":"M21-GAP-00888"},"M21-GAP-00888":{"line":4143,"offset":731050,"length":187,"previous":"M21-GAP-00887","next":"M21-GAP-00889"},"M21-GAP-00889":{"line":4144,"offset":731237,"length":187,"previous":"M21-GAP-00888","next":"M21-GAP-00890"},"M21-GAP-00890":{"line":4145,"offset":731424,"length":187,"previous":"M21-GAP-00889","next":"M21-GAP-00891"},"M21-GAP-00891":{"line":4146,"offset":731611,"length":186,"previous":"M21-GAP-00890","next":"M21-GAP-00892"},"M21-GAP-00892":{"line":4147,"offset":731797,"length":187,"previous":"M21-GAP-00891","next":"M21-GAP-00893"},"M21-GAP-00893":{"line":4148,"offset":731984,"length":187,"previous":"M21-GAP-00892","next":"M21-GAP-00894"},"M21-GAP-00894":{"line":4149,"offset":732171,"length":187,"previous":"M21-GAP-00893","next":"M21-GAP-00895"},"M21-GAP-00895":{"line":4150,"offset":732358,"length":187,"previous":"M21-GAP-00894","next":"M21-GAP-00896"},"M21-GAP-00896":{"line":4151,"offset":732545,"length":187,"previous":"M21-GAP-00895","next":"M21-GAP-00897"},"M21-GAP-00897":{"line":4152,"offset":732732,"length":187,"previous":"M21-GAP-00896","next":"M21-GAP-00898"},"M21-GAP-00898":{"line":4153,"offset":732919,"length":187,"previous":"M21-GAP-00897","next":"M21-GAP-00899"},"M21-GAP-00899":{"line":4154,"offset":733106,"length":187,"previous":"M21-GAP-00898","next":"M21-GAP-00900"},"M21-GAP-00900":{"line":4155,"offset":733293,"length":187,"previous":"M21-GAP-00899","next":"M21-GAP-00901"},"M21-GAP-00901":{"line":4156,"offset":733480,"length":187,"previous":"M21-GAP-00900","next":"M21-GAP-00902"},"M21-GAP-00902":{"line":4157,"offset":733667,"length":186,"previous":"M21-GAP-00901","next":"M21-GAP-00903"},"M21-GAP-00903":{"line":4158,"offset":733853,"length":187,"previous":"M21-GAP-00902","next":"M21-GAP-00904"},"M21-GAP-00904":{"line":4159,"offset":734040,"length":187,"previous":"M21-GAP-00903","next":"M21-GAP-00905"},"M21-GAP-00905":{"line":4160,"offset":734227,"length":186,"previous":"M21-GAP-00904","next":"M21-GAP-00906"},"M21-GAP-00906":{"line":4161,"offset":734413,"length":186,"previous":"M21-GAP-00905","next":"M21-GAP-00907"},"M21-GAP-00907":{"line":4162,"offset":734599,"length":186,"previous":"M21-GAP-00906","next":"M21-GAP-00908"},"M21-GAP-00908":{"line":4163,"offset":734785,"length":186,"previous":"M21-GAP-00907","next":"M21-GAP-00909"},"M21-GAP-00909":{"line":4164,"offset":734971,"length":186,"previous":"M21-GAP-00908","next":"M21-GAP-00910"},"M21-GAP-00910":{"line":4165,"offset":735157,"length":186,"previous":"M21-GAP-00909","next":"M21-GAP-00911"},"M21-GAP-00911":{"line":4166,"offset":735343,"length":186,"previous":"M21-GAP-00910","next":"M21-GAP-00912"},"M21-GAP-00912":{"line":4167,"offset":735529,"length":186,"previous":"M21-GAP-00911","next":"M21-GAP-00913"},"M21-GAP-00913":{"line":4168,"offset":735715,"length":187,"previous":"M21-GAP-00912","next":"M21-GAP-00914"},"M21-GAP-00914":{"line":4169,"offset":735902,"length":187,"previous":"M21-GAP-00913","next":"M21-GAP-00915"},"M21-GAP-00915":{"line":4170,"offset":736089,"length":187,"previous":"M21-GAP-00914","next":"M21-GAP-00916"},"M21-GAP-00916":{"line":4171,"offset":736276,"length":187,"previous":"M21-GAP-00915","next":"M21-GAP-00917"},"M21-GAP-00917":{"line":4172,"offset":736463,"length":186,"previous":"M21-GAP-00916","next":"M21-GAP-00918"},"M21-GAP-00918":{"line":4173,"offset":736649,"length":186,"previous":"M21-GAP-00917","next":"M21-GAP-00919"},"M21-GAP-00919":{"line":4174,"offset":736835,"length":186,"previous":"M21-GAP-00918","next":"M21-GAP-00920"},"M21-GAP-00920":{"line":4175,"offset":737021,"length":186,"previous":"M21-GAP-00919","next":"M21-GAP-00921"},"M21-GAP-00921":{"line":4176,"offset":737207,"length":186,"previous":"M21-GAP-00920","next":"M21-GAP-00922"},"M21-GAP-00922":{"line":4177,"offset":737393,"length":186,"previous":"M21-GAP-00921","next":"M21-GAP-00923"},"M21-GAP-00923":{"line":4178,"offset":737579,"length":186,"previous":"M21-GAP-00922","next":"M21-GAP-00924"},"M21-GAP-00924":{"line":4179,"offset":737765,"length":186,"previous":"M21-GAP-00923","next":"M21-GAP-00925"},"M21-GAP-00925":{"line":4180,"offset":737951,"length":171,"previous":"M21-GAP-00924","next":"M21-GAP-00926"},"M21-GAP-00926":{"line":4181,"offset":738122,"length":171,"previous":"M21-GAP-00925","next":"M21-GAP-00927"},"M21-GAP-00927":{"line":4182,"offset":738293,"length":172,"previous":"M21-GAP-00926","next":"M21-GAP-00928"},"M21-GAP-00928":{"line":4183,"offset":738465,"length":172,"previous":"M21-GAP-00927","next":"M21-GAP-00929"},"M21-GAP-00929":{"line":4184,"offset":738637,"length":172,"previous":"M21-GAP-00928","next":"M21-GAP-00930"},"M21-GAP-00930":{"line":4185,"offset":738809,"length":172,"previous":"M21-GAP-00929","next":"M21-GAP-00931"},"M21-GAP-00931":{"line":4186,"offset":738981,"length":172,"previous":"M21-GAP-00930","next":"M21-GAP-00932"},"M21-GAP-00932":{"line":4187,"offset":739153,"length":172,"previous":"M21-GAP-00931","next":"M21-GAP-00933"},"M21-GAP-00933":{"line":4188,"offset":739325,"length":172,"previous":"M21-GAP-00932","next":"M21-GAP-00934"},"M21-GAP-00934":{"line":4189,"offset":739497,"length":172,"previous":"M21-GAP-00933","next":"M21-GAP-00935"},"M21-GAP-00935":{"line":4190,"offset":739669,"length":172,"previous":"M21-GAP-00934","next":"M21-GAP-00936"},"M21-GAP-00936":{"line":4191,"offset":739841,"length":172,"previous":"M21-GAP-00935","next":"M21-GAP-00937"},"M21-GAP-00937":{"line":4192,"offset":740013,"length":171,"previous":"M21-GAP-00936","next":"M21-GAP-00938"},"M21-GAP-00938":{"line":4193,"offset":740184,"length":172,"previous":"M21-GAP-00937","next":"M21-GAP-00939"},"M21-GAP-00939":{"line":4194,"offset":740356,"length":172,"previous":"M21-GAP-00938","next":"M21-GAP-00940"},"M21-GAP-00940":{"line":4195,"offset":740528,"length":172,"previous":"M21-GAP-00939","next":"M21-GAP-00941"},"M21-GAP-00941":{"line":4196,"offset":740700,"length":172,"previous":"M21-GAP-00940","next":"M21-GAP-00942"},"M21-GAP-00942":{"line":4197,"offset":740872,"length":172,"previous":"M21-GAP-00941","next":"M21-GAP-00943"},"M21-GAP-00943":{"line":4198,"offset":741044,"length":172,"previous":"M21-GAP-00942","next":"M21-GAP-00944"},"M21-GAP-00944":{"line":4199,"offset":741216,"length":172,"previous":"M21-GAP-00943","next":"M21-GAP-00945"},"M21-GAP-00945":{"line":4200,"offset":741388,"length":172,"previous":"M21-GAP-00944","next":"M21-GAP-00946"},"M21-GAP-00946":{"line":4201,"offset":741560,"length":172,"previous":"M21-GAP-00945","next":"M21-GAP-00947"},"M21-GAP-00947":{"line":4202,"offset":741732,"length":172,"previous":"M21-GAP-00946","next":"M21-GAP-00948"},"M21-GAP-00948":{"line":4203,"offset":741904,"length":171,"previous":"M21-GAP-00947","next":"M21-GAP-00949"},"M21-GAP-00949":{"line":4204,"offset":742075,"length":172,"previous":"M21-GAP-00948","next":"M21-GAP-00950"},"M21-GAP-00950":{"line":4205,"offset":742247,"length":172,"previous":"M21-GAP-00949","next":"M21-GAP-00951"},"M21-GAP-00951":{"line":4206,"offset":742419,"length":172,"previous":"M21-GAP-00950","next":"M21-GAP-00952"},"M21-GAP-00952":{"line":4207,"offset":742591,"length":172,"previous":"M21-GAP-00951","next":"M21-GAP-00953"},"M21-GAP-00953":{"line":4208,"offset":742763,"length":172,"previous":"M21-GAP-00952","next":"M21-GAP-00954"},"M21-GAP-00954":{"line":4209,"offset":742935,"length":172,"previous":"M21-GAP-00953","next":"M21-GAP-00955"},"M21-GAP-00955":{"line":4210,"offset":743107,"length":172,"previous":"M21-GAP-00954","next":"M21-GAP-00956"},"M21-GAP-00956":{"line":4211,"offset":743279,"length":172,"previous":"M21-GAP-00955","next":"M21-GAP-00957"},"M21-GAP-00957":{"line":4212,"offset":743451,"length":172,"previous":"M21-GAP-00956","next":"M21-GAP-00958"},"M21-GAP-00958":{"line":4213,"offset":743623,"length":172,"previous":"M21-GAP-00957","next":"M21-GAP-00959"},"M21-GAP-00959":{"line":4214,"offset":743795,"length":171,"previous":"M21-GAP-00958","next":"M21-GAP-00960"},"M21-GAP-00960":{"line":4215,"offset":743966,"length":172,"previous":"M21-GAP-00959","next":"M21-GAP-00961"},"M21-GAP-00961":{"line":4216,"offset":744138,"length":172,"previous":"M21-GAP-00960","next":"M21-GAP-00962"},"M21-GAP-00962":{"line":4217,"offset":744310,"length":172,"previous":"M21-GAP-00961","next":"M21-GAP-00963"},"M21-GAP-00963":{"line":4218,"offset":744482,"length":172,"previous":"M21-GAP-00962","next":"M21-GAP-00964"},"M21-GAP-00964":{"line":4219,"offset":744654,"length":172,"previous":"M21-GAP-00963","next":"M21-GAP-00965"},"M21-GAP-00965":{"line":4220,"offset":744826,"length":172,"previous":"M21-GAP-00964","next":"M21-GAP-00966"},"M21-GAP-00966":{"line":4221,"offset":744998,"length":172,"previous":"M21-GAP-00965","next":"M21-GAP-00967"},"M21-GAP-00967":{"line":4222,"offset":745170,"length":172,"previous":"M21-GAP-00966","next":"M21-GAP-00968"},"M21-GAP-00968":{"line":4223,"offset":745342,"length":172,"previous":"M21-GAP-00967","next":"M21-GAP-00969"},"M21-GAP-00969":{"line":4224,"offset":745514,"length":171,"previous":"M21-GAP-00968","next":"M21-GAP-00970"},"M21-GAP-00970":{"line":4225,"offset":745685,"length":171,"previous":"M21-GAP-00969","next":"M21-GAP-00971"},"M21-GAP-00971":{"line":4226,"offset":745856,"length":171,"previous":"M21-GAP-00970","next":"M21-GAP-00972"},"M21-GAP-00972":{"line":4227,"offset":746027,"length":171,"previous":"M21-GAP-00971","next":"M21-GAP-00973"},"M21-GAP-00973":{"line":4228,"offset":746198,"length":171,"previous":"M21-GAP-00972","next":"M21-GAP-00974"},"M21-GAP-00974":{"line":4229,"offset":746369,"length":173,"previous":"M21-GAP-00973","next":"M21-GAP-00975"},"M21-GAP-00975":{"line":4230,"offset":746542,"length":173,"previous":"M21-GAP-00974","next":"M21-GAP-00976"},"M21-GAP-00976":{"line":4231,"offset":746715,"length":174,"previous":"M21-GAP-00975","next":"M21-GAP-00977"},"M21-GAP-00977":{"line":4232,"offset":746889,"length":174,"previous":"M21-GAP-00976","next":"M21-GAP-00978"},"M21-GAP-00978":{"line":4233,"offset":747063,"length":174,"previous":"M21-GAP-00977","next":"M21-GAP-00979"},"M21-GAP-00979":{"line":4234,"offset":747237,"length":174,"previous":"M21-GAP-00978","next":"M21-GAP-00980"},"M21-GAP-00980":{"line":4235,"offset":747411,"length":174,"previous":"M21-GAP-00979","next":"M21-GAP-00981"},"M21-GAP-00981":{"line":4236,"offset":747585,"length":174,"previous":"M21-GAP-00980","next":"M21-GAP-00982"},"M21-GAP-00982":{"line":4237,"offset":747759,"length":174,"previous":"M21-GAP-00981","next":"M21-GAP-00983"},"M21-GAP-00983":{"line":4238,"offset":747933,"length":173,"previous":"M21-GAP-00982","next":"M21-GAP-00984"},"M21-GAP-00984":{"line":4239,"offset":748106,"length":173,"previous":"M21-GAP-00983","next":"M21-GAP-00985"},"M21-GAP-00985":{"line":4240,"offset":748279,"length":173,"previous":"M21-GAP-00984","next":"M21-GAP-00986"},"M21-GAP-00986":{"line":4241,"offset":748452,"length":173,"previous":"M21-GAP-00985","next":"M21-GAP-00987"},"M21-GAP-00987":{"line":4242,"offset":748625,"length":173,"previous":"M21-GAP-00986","next":"M21-GAP-00988"},"M21-GAP-00988":{"line":4243,"offset":748798,"length":173,"previous":"M21-GAP-00987","next":"M21-GAP-00989"},"M21-GAP-00989":{"line":4244,"offset":748971,"length":173,"previous":"M21-GAP-00988","next":"M21-GAP-00990"},"M21-GAP-00990":{"line":4245,"offset":749144,"length":173,"previous":"M21-GAP-00989","next":"M21-GAP-00991"},"M21-GAP-00991":{"line":4246,"offset":749317,"length":191,"previous":"M21-GAP-00990","next":"M21-GAP-00992"},"M21-GAP-00992":{"line":4247,"offset":749508,"length":191,"previous":"M21-GAP-00991","next":"M21-GAP-00993"},"M21-GAP-00993":{"line":4248,"offset":749699,"length":185,"previous":"M21-GAP-00992","next":"M21-GAP-00994"},"M21-GAP-00994":{"line":4249,"offset":749884,"length":191,"previous":"M21-GAP-00993","next":"M21-GAP-00995"},"M21-GAP-00995":{"line":4250,"offset":750075,"length":187,"previous":"M21-GAP-00994","next":"M21-GAP-00996"},"M21-GAP-00996":{"line":4251,"offset":750262,"length":196,"previous":"M21-GAP-00995","next":"M21-GAP-00997"},"M21-GAP-00997":{"line":4252,"offset":750458,"length":196,"previous":"M21-GAP-00996","next":"M21-GAP-00998"},"M21-GAP-00998":{"line":4253,"offset":750654,"length":197,"previous":"M21-GAP-00997","next":"M21-GAP-00999"},"M21-GAP-00999":{"line":4254,"offset":750851,"length":197,"previous":"M21-GAP-00998","next":"M21-GAP-01000"},"M21-GAP-01000":{"line":4255,"offset":751048,"length":196,"previous":"M21-GAP-00999","next":"M21-GAP-01001"},"M21-GAP-01001":{"line":4256,"offset":751244,"length":196,"previous":"M21-GAP-01000","next":"M21-GAP-01002"},"M21-GAP-01002":{"line":4257,"offset":751440,"length":196,"previous":"M21-GAP-01001","next":"M21-GAP-01003"},"M21-GAP-01003":{"line":4258,"offset":751636,"length":196,"previous":"M21-GAP-01002","next":"M21-GAP-01004"},"M21-GAP-01004":{"line":4259,"offset":751832,"length":196,"previous":"M21-GAP-01003","next":"M21-GAP-01005"},"M21-GAP-01005":{"line":4260,"offset":752028,"length":196,"previous":"M21-GAP-01004","next":"M21-GAP-01006"},"M21-GAP-01006":{"line":4261,"offset":752224,"length":196,"previous":"M21-GAP-01005","next":"M21-GAP-01007"},"M21-GAP-01007":{"line":4262,"offset":752420,"length":196,"previous":"M21-GAP-01006","next":"M21-GAP-01008"},"M21-GAP-01008":{"line":4263,"offset":752616,"length":180,"previous":"M21-GAP-01007","next":"M21-GAP-01009"},"M21-GAP-01009":{"line":4264,"offset":752796,"length":196,"previous":"M21-GAP-01008","next":"M21-GAP-01010"},"M21-GAP-01010":{"line":4265,"offset":752992,"length":196,"previous":"M21-GAP-01009","next":"M21-GAP-01011"},"M21-GAP-01011":{"line":4266,"offset":753188,"length":194,"previous":"M21-GAP-01010","next":"M21-GAP-01012"},"M21-GAP-01012":{"line":4267,"offset":753382,"length":194,"previous":"M21-GAP-01011","next":"M21-GAP-01013"},"M21-GAP-01013":{"line":4268,"offset":753576,"length":197,"previous":"M21-GAP-01012","next":"M21-GAP-01014"},"M21-GAP-01014":{"line":4269,"offset":753773,"length":197,"previous":"M21-GAP-01013","next":"M21-GAP-01015"},"M21-GAP-01015":{"line":4270,"offset":753970,"length":189,"previous":"M21-GAP-01014","next":"M21-GAP-01016"},"M21-GAP-01016":{"line":4271,"offset":754159,"length":189,"previous":"M21-GAP-01015","next":"M21-GAP-01017"},"M21-GAP-01017":{"line":4272,"offset":754348,"length":178,"previous":"M21-GAP-01016","next":"M21-GAP-01018"},"M21-GAP-01018":{"line":4273,"offset":754526,"length":178,"previous":"M21-GAP-01017","next":"M21-GAP-01019"},"M21-GAP-01019":{"line":4274,"offset":754704,"length":178,"previous":"M21-GAP-01018","next":"M21-GAP-01020"},"M21-GAP-01020":{"line":4275,"offset":754882,"length":178,"previous":"M21-GAP-01019","next":"M21-GAP-01021"},"M21-GAP-01021":{"line":4276,"offset":755060,"length":178,"previous":"M21-GAP-01020","next":"M21-GAP-01022"},"M21-GAP-01022":{"line":4277,"offset":755238,"length":178,"previous":"M21-GAP-01021","next":"M21-GAP-01023"},"M21-GAP-01023":{"line":4278,"offset":755416,"length":178,"previous":"M21-GAP-01022","next":"M21-GAP-01024"},"M21-GAP-01024":{"line":4279,"offset":755594,"length":178,"previous":"M21-GAP-01023","next":"M21-GAP-01025"},"M21-GAP-01025":{"line":4280,"offset":755772,"length":178,"previous":"M21-GAP-01024","next":"M21-GAP-01026"},"M21-GAP-01026":{"line":4281,"offset":755950,"length":178,"previous":"M21-GAP-01025","next":"M21-GAP-01027"},"M21-GAP-01027":{"line":4282,"offset":756128,"length":180,"previous":"M21-GAP-01026","next":"M21-GAP-01028"},"M21-GAP-01028":{"line":4283,"offset":756308,"length":183,"previous":"M21-GAP-01027","next":"M21-GAP-01029"},"M21-GAP-01029":{"line":4284,"offset":756491,"length":183,"previous":"M21-GAP-01028","next":"M21-GAP-01030"},"M21-GAP-01030":{"line":4285,"offset":756674,"length":183,"previous":"M21-GAP-01029","next":"M21-GAP-01031"},"M21-GAP-01031":{"line":4286,"offset":756857,"length":183,"previous":"M21-GAP-01030","next":"M21-GAP-01032"},"M21-GAP-01032":{"line":4287,"offset":757040,"length":183,"previous":"M21-GAP-01031","next":"M21-GAP-01033"},"M21-GAP-01033":{"line":4288,"offset":757223,"length":183,"previous":"M21-GAP-01032","next":"M21-GAP-01034"},"M21-GAP-01034":{"line":4289,"offset":757406,"length":188,"previous":"M21-GAP-01033","next":"M21-GAP-01035"},"M21-GAP-01035":{"line":4290,"offset":757594,"length":188,"previous":"M21-GAP-01034","next":"M21-GAP-01036"},"M21-GAP-01036":{"line":4291,"offset":757782,"length":188,"previous":"M21-GAP-01035","next":"M21-GAP-01037"},"M21-GAP-01037":{"line":4292,"offset":757970,"length":188,"previous":"M21-GAP-01036","next":"M21-GAP-01038"},"M21-GAP-01038":{"line":4293,"offset":758158,"length":188,"previous":"M21-GAP-01037","next":"M21-GAP-01039"},"M21-GAP-01039":{"line":4294,"offset":758346,"length":188,"previous":"M21-GAP-01038","next":"M21-GAP-01040"},"M21-GAP-01040":{"line":4295,"offset":758534,"length":188,"previous":"M21-GAP-01039","next":"M21-GAP-01041"},"M21-GAP-01041":{"line":4296,"offset":758722,"length":186,"previous":"M21-GAP-01040","next":"M21-GAP-01042"},"M21-GAP-01042":{"line":4297,"offset":758908,"length":186,"previous":"M21-GAP-01041","next":"M21-GAP-01043"},"M21-GAP-01043":{"line":4298,"offset":759094,"length":186,"previous":"M21-GAP-01042","next":"M21-GAP-01044"},"M21-GAP-01044":{"line":4299,"offset":759280,"length":186,"previous":"M21-GAP-01043","next":"M21-GAP-01045"},"M21-GAP-01045":{"line":4300,"offset":759466,"length":186,"previous":"M21-GAP-01044","next":"M21-GAP-01046"},"M21-GAP-01046":{"line":4301,"offset":759652,"length":186,"previous":"M21-GAP-01045","next":"M21-GAP-01047"},"M21-GAP-01047":{"line":4302,"offset":759838,"length":194,"previous":"M21-GAP-01046","next":"M21-GAP-01048"},"M21-GAP-01048":{"line":4303,"offset":760032,"length":194,"previous":"M21-GAP-01047","next":"M21-GAP-01049"},"M21-GAP-01049":{"line":4304,"offset":760226,"length":194,"previous":"M21-GAP-01048","next":"M21-GAP-01050"},"M21-GAP-01050":{"line":4305,"offset":760420,"length":194,"previous":"M21-GAP-01049","next":"M21-GAP-01051"},"M21-GAP-01051":{"line":4306,"offset":760614,"length":194,"previous":"M21-GAP-01050","next":"M21-GAP-01052"},"M21-GAP-01052":{"line":4307,"offset":760808,"length":194,"previous":"M21-GAP-01051","next":"M21-GAP-01053"},"M21-GAP-01053":{"line":4308,"offset":761002,"length":194,"previous":"M21-GAP-01052","next":"M21-GAP-01054"},"M21-GAP-01054":{"line":4309,"offset":761196,"length":194,"previous":"M21-GAP-01053","next":"M21-GAP-01055"},"M21-GAP-01055":{"line":4310,"offset":761390,"length":194,"previous":"M21-GAP-01054","next":"M21-GAP-01056"},"M21-GAP-01056":{"line":4311,"offset":761584,"length":194,"previous":"M21-GAP-01055","next":"M21-GAP-01057"},"M21-GAP-01057":{"line":4312,"offset":761778,"length":186,"previous":"M21-GAP-01056","next":"M21-GAP-01058"},"M21-GAP-01058":{"line":4313,"offset":761964,"length":186,"previous":"M21-GAP-01057","next":"M21-GAP-01059"},"M21-GAP-01059":{"line":4314,"offset":762150,"length":187,"previous":"M21-GAP-01058","next":"M21-GAP-01060"},"M21-GAP-01060":{"line":4315,"offset":762337,"length":187,"previous":"M21-GAP-01059","next":"M21-GAP-01061"},"M21-GAP-01061":{"line":4316,"offset":762524,"length":187,"previous":"M21-GAP-01060","next":"M21-GAP-01062"},"M21-GAP-01062":{"line":4317,"offset":762711,"length":187,"previous":"M21-GAP-01061","next":"M21-GAP-01063"},"M21-GAP-01063":{"line":4318,"offset":762898,"length":187,"previous":"M21-GAP-01062","next":"M21-GAP-01064"},"M21-GAP-01064":{"line":4319,"offset":763085,"length":187,"previous":"M21-GAP-01063","next":"M21-GAP-01065"},"M21-GAP-01065":{"line":4320,"offset":763272,"length":187,"previous":"M21-GAP-01064","next":"M21-GAP-01066"},"M21-GAP-01066":{"line":4321,"offset":763459,"length":187,"previous":"M21-GAP-01065","next":"M21-GAP-01067"},"M21-GAP-01067":{"line":4322,"offset":763646,"length":187,"previous":"M21-GAP-01066","next":"M21-GAP-01068"},"M21-GAP-01068":{"line":4323,"offset":763833,"length":187,"previous":"M21-GAP-01067","next":"M21-GAP-01069"},"M21-GAP-01069":{"line":4324,"offset":764020,"length":186,"previous":"M21-GAP-01068","next":"M21-GAP-01070"},"M21-GAP-01070":{"line":4325,"offset":764206,"length":187,"previous":"M21-GAP-01069","next":"M21-GAP-01071"},"M21-GAP-01071":{"line":4326,"offset":764393,"length":187,"previous":"M21-GAP-01070","next":"M21-GAP-01072"},"M21-GAP-01072":{"line":4327,"offset":764580,"length":187,"previous":"M21-GAP-01071","next":"M21-GAP-01073"},"M21-GAP-01073":{"line":4328,"offset":764767,"length":187,"previous":"M21-GAP-01072","next":"M21-GAP-01074"},"M21-GAP-01074":{"line":4329,"offset":764954,"length":187,"previous":"M21-GAP-01073","next":"M21-GAP-01075"},"M21-GAP-01075":{"line":4330,"offset":765141,"length":187,"previous":"M21-GAP-01074","next":"M21-GAP-01076"},"M21-GAP-01076":{"line":4331,"offset":765328,"length":187,"previous":"M21-GAP-01075","next":"M21-GAP-01077"},"M21-GAP-01077":{"line":4332,"offset":765515,"length":187,"previous":"M21-GAP-01076","next":"M21-GAP-01078"},"M21-GAP-01078":{"line":4333,"offset":765702,"length":187,"previous":"M21-GAP-01077","next":"M21-GAP-01079"},"M21-GAP-01079":{"line":4334,"offset":765889,"length":187,"previous":"M21-GAP-01078","next":"M21-GAP-01080"},"M21-GAP-01080":{"line":4335,"offset":766076,"length":186,"previous":"M21-GAP-01079","next":"M21-GAP-01081"},"M21-GAP-01081":{"line":4336,"offset":766262,"length":187,"previous":"M21-GAP-01080","next":"M21-GAP-01082"},"M21-GAP-01082":{"line":4337,"offset":766449,"length":187,"previous":"M21-GAP-01081","next":"M21-GAP-01083"},"M21-GAP-01083":{"line":4338,"offset":766636,"length":187,"previous":"M21-GAP-01082","next":"M21-GAP-01084"},"M21-GAP-01084":{"line":4339,"offset":766823,"length":187,"previous":"M21-GAP-01083","next":"M21-GAP-01085"},"M21-GAP-01085":{"line":4340,"offset":767010,"length":187,"previous":"M21-GAP-01084","next":"M21-GAP-01086"},"M21-GAP-01086":{"line":4341,"offset":767197,"length":187,"previous":"M21-GAP-01085","next":"M21-GAP-01087"},"M21-GAP-01087":{"line":4342,"offset":767384,"length":187,"previous":"M21-GAP-01086","next":"M21-GAP-01088"},"M21-GAP-01088":{"line":4343,"offset":767571,"length":187,"previous":"M21-GAP-01087","next":"M21-GAP-01089"},"M21-GAP-01089":{"line":4344,"offset":767758,"length":187,"previous":"M21-GAP-01088","next":"M21-GAP-01090"},"M21-GAP-01090":{"line":4345,"offset":767945,"length":187,"previous":"M21-GAP-01089","next":"M21-GAP-01091"},"M21-GAP-01091":{"line":4346,"offset":768132,"length":186,"previous":"M21-GAP-01090","next":"M21-GAP-01092"},"M21-GAP-01092":{"line":4347,"offset":768318,"length":187,"previous":"M21-GAP-01091","next":"M21-GAP-01093"},"M21-GAP-01093":{"line":4348,"offset":768505,"length":187,"previous":"M21-GAP-01092","next":"M21-GAP-01094"},"M21-GAP-01094":{"line":4349,"offset":768692,"length":187,"previous":"M21-GAP-01093","next":"M21-GAP-01095"},"M21-GAP-01095":{"line":4350,"offset":768879,"length":187,"previous":"M21-GAP-01094","next":"M21-GAP-01096"},"M21-GAP-01096":{"line":4351,"offset":769066,"length":187,"previous":"M21-GAP-01095","next":"M21-GAP-01097"},"M21-GAP-01097":{"line":4352,"offset":769253,"length":187,"previous":"M21-GAP-01096","next":"M21-GAP-01098"},"M21-GAP-01098":{"line":4353,"offset":769440,"length":187,"previous":"M21-GAP-01097","next":"M21-GAP-01099"},"M21-GAP-01099":{"line":4354,"offset":769627,"length":187,"previous":"M21-GAP-01098","next":"M21-GAP-01100"},"M21-GAP-01100":{"line":4355,"offset":769814,"length":187,"previous":"M21-GAP-01099","next":"M21-GAP-01101"},"M21-GAP-01101":{"line":4356,"offset":770001,"length":187,"previous":"M21-GAP-01100","next":"M21-GAP-01102"},"M21-GAP-01102":{"line":4357,"offset":770188,"length":186,"previous":"M21-GAP-01101","next":"M21-GAP-01103"},"M21-GAP-01103":{"line":4358,"offset":770374,"length":187,"previous":"M21-GAP-01102","next":"M21-GAP-01104"},"M21-GAP-01104":{"line":4359,"offset":770561,"length":187,"previous":"M21-GAP-01103","next":"M21-GAP-01105"},"M21-GAP-01105":{"line":4360,"offset":770748,"length":187,"previous":"M21-GAP-01104","next":"M21-GAP-01106"},"M21-GAP-01106":{"line":4361,"offset":770935,"length":187,"previous":"M21-GAP-01105","next":"M21-GAP-01107"},"M21-GAP-01107":{"line":4362,"offset":771122,"length":187,"previous":"M21-GAP-01106","next":"M21-GAP-01108"},"M21-GAP-01108":{"line":4363,"offset":771309,"length":187,"previous":"M21-GAP-01107","next":"M21-GAP-01109"},"M21-GAP-01109":{"line":4364,"offset":771496,"length":187,"previous":"M21-GAP-01108","next":"M21-GAP-01110"},"M21-GAP-01110":{"line":4365,"offset":771683,"length":187,"previous":"M21-GAP-01109","next":"M21-GAP-01111"},"M21-GAP-01111":{"line":4366,"offset":771870,"length":187,"previous":"M21-GAP-01110","next":"M21-GAP-01112"},"M21-GAP-01112":{"line":4367,"offset":772057,"length":187,"previous":"M21-GAP-01111","next":"M21-GAP-01113"},"M21-GAP-01113":{"line":4368,"offset":772244,"length":186,"previous":"M21-GAP-01112","next":"M21-GAP-01114"},"M21-GAP-01114":{"line":4369,"offset":772430,"length":187,"previous":"M21-GAP-01113","next":"M21-GAP-01115"},"M21-GAP-01115":{"line":4370,"offset":772617,"length":187,"previous":"M21-GAP-01114","next":"M21-GAP-01116"},"M21-GAP-01116":{"line":4371,"offset":772804,"length":187,"previous":"M21-GAP-01115","next":"M21-GAP-01117"},"M21-GAP-01117":{"line":4372,"offset":772991,"length":187,"previous":"M21-GAP-01116","next":"M21-GAP-01118"},"M21-GAP-01118":{"line":4373,"offset":773178,"length":187,"previous":"M21-GAP-01117","next":"M21-GAP-01119"},"M21-GAP-01119":{"line":4374,"offset":773365,"length":187,"previous":"M21-GAP-01118","next":"M21-GAP-01120"},"M21-GAP-01120":{"line":4375,"offset":773552,"length":187,"previous":"M21-GAP-01119","next":"M21-GAP-01121"},"M21-GAP-01121":{"line":4376,"offset":773739,"length":187,"previous":"M21-GAP-01120","next":"M21-GAP-01122"},"M21-GAP-01122":{"line":4377,"offset":773926,"length":187,"previous":"M21-GAP-01121","next":"M21-GAP-01123"},"M21-GAP-01123":{"line":4378,"offset":774113,"length":187,"previous":"M21-GAP-01122","next":"M21-GAP-01124"},"M21-GAP-01124":{"line":4379,"offset":774300,"length":186,"previous":"M21-GAP-01123","next":"M21-GAP-01125"},"M21-GAP-01125":{"line":4380,"offset":774486,"length":187,"previous":"M21-GAP-01124","next":"M21-GAP-01126"},"M21-GAP-01126":{"line":4381,"offset":774673,"length":186,"previous":"M21-GAP-01125","next":"M21-GAP-01127"},"M21-GAP-01127":{"line":4382,"offset":774859,"length":186,"previous":"M21-GAP-01126","next":"M21-GAP-01128"},"M21-GAP-01128":{"line":4383,"offset":775045,"length":193,"previous":"M21-GAP-01127","next":"M21-GAP-01129"},"M21-GAP-01129":{"line":4384,"offset":775238,"length":193,"previous":"M21-GAP-01128","next":"M21-GAP-01130"},"M21-GAP-01130":{"line":4385,"offset":775431,"length":193,"previous":"M21-GAP-01129","next":"M21-GAP-01131"},"M21-GAP-01131":{"line":4386,"offset":775624,"length":193,"previous":"M21-GAP-01130","next":"M21-GAP-01132"},"M21-GAP-01132":{"line":4387,"offset":775817,"length":193,"previous":"M21-GAP-01131","next":"M21-GAP-01133"},"M21-GAP-01133":{"line":4388,"offset":776010,"length":193,"previous":"M21-GAP-01132","next":"M21-GAP-01134"},"M21-GAP-01134":{"line":4389,"offset":776203,"length":190,"previous":"M21-GAP-01133","next":"M21-GAP-01135"},"M21-GAP-01135":{"line":4390,"offset":776393,"length":190,"previous":"M21-GAP-01134","next":"M21-GAP-01136"},"M21-GAP-01136":{"line":4391,"offset":776583,"length":191,"previous":"M21-GAP-01135","next":"M21-GAP-01137"},"M21-GAP-01137":{"line":4392,"offset":776774,"length":191,"previous":"M21-GAP-01136","next":"M21-GAP-01138"},"M21-GAP-01138":{"line":4393,"offset":776965,"length":191,"previous":"M21-GAP-01137","next":"M21-GAP-01139"},"M21-GAP-01139":{"line":4394,"offset":777156,"length":191,"previous":"M21-GAP-01138","next":"M21-GAP-01140"},"M21-GAP-01140":{"line":4395,"offset":777347,"length":191,"previous":"M21-GAP-01139","next":"M21-GAP-01141"},"M21-GAP-01141":{"line":4396,"offset":777538,"length":191,"previous":"M21-GAP-01140","next":"M21-GAP-01142"},"M21-GAP-01142":{"line":4397,"offset":777729,"length":191,"previous":"M21-GAP-01141","next":"M21-GAP-01143"},"M21-GAP-01143":{"line":4398,"offset":777920,"length":191,"previous":"M21-GAP-01142","next":"M21-GAP-01144"},"M21-GAP-01144":{"line":4399,"offset":778111,"length":191,"previous":"M21-GAP-01143","next":"M21-GAP-01145"},"M21-GAP-01145":{"line":4400,"offset":778302,"length":191,"previous":"M21-GAP-01144","next":"M21-GAP-01146"},"M21-GAP-01146":{"line":4401,"offset":778493,"length":190,"previous":"M21-GAP-01145","next":"M21-GAP-01147"},"M21-GAP-01147":{"line":4402,"offset":778683,"length":191,"previous":"M21-GAP-01146","next":"M21-GAP-01148"},"M21-GAP-01148":{"line":4403,"offset":778874,"length":191,"previous":"M21-GAP-01147","next":"M21-GAP-01149"},"M21-GAP-01149":{"line":4404,"offset":779065,"length":190,"previous":"M21-GAP-01148","next":"M21-GAP-01150"},"M21-GAP-01150":{"line":4405,"offset":779255,"length":190,"previous":"M21-GAP-01149","next":"M21-GAP-01151"},"M21-GAP-01151":{"line":4406,"offset":779445,"length":190,"previous":"M21-GAP-01150","next":"M21-GAP-01152"},"M21-GAP-01152":{"line":4407,"offset":779635,"length":190,"previous":"M21-GAP-01151","next":"M21-GAP-01153"},"M21-GAP-01153":{"line":4408,"offset":779825,"length":190,"previous":"M21-GAP-01152","next":"M21-GAP-01154"},"M21-GAP-01154":{"line":4409,"offset":780015,"length":190,"previous":"M21-GAP-01153","next":"M21-GAP-01155"},"M21-GAP-01155":{"line":4410,"offset":780205,"length":190,"previous":"M21-GAP-01154","next":"M21-GAP-01156"},"M21-GAP-01156":{"line":4411,"offset":780395,"length":190,"previous":"M21-GAP-01155","next":"M21-GAP-01157"},"M21-GAP-01157":{"line":4412,"offset":780585,"length":190,"previous":"M21-GAP-01156","next":"M21-GAP-01158"},"M21-GAP-01158":{"line":4413,"offset":780775,"length":191,"previous":"M21-GAP-01157","next":"M21-GAP-01159"},"M21-GAP-01159":{"line":4414,"offset":780966,"length":191,"previous":"M21-GAP-01158","next":"M21-GAP-01160"},"M21-GAP-01160":{"line":4415,"offset":781157,"length":191,"previous":"M21-GAP-01159","next":"M21-GAP-01161"},"M21-GAP-01161":{"line":4416,"offset":781348,"length":191,"previous":"M21-GAP-01160","next":"M21-GAP-01162"},"M21-GAP-01162":{"line":4417,"offset":781539,"length":191,"previous":"M21-GAP-01161","next":"M21-GAP-01163"},"M21-GAP-01163":{"line":4418,"offset":781730,"length":191,"previous":"M21-GAP-01162","next":"M21-GAP-01164"},"M21-GAP-01164":{"line":4419,"offset":781921,"length":191,"previous":"M21-GAP-01163","next":"M21-GAP-01165"},"M21-GAP-01165":{"line":4420,"offset":782112,"length":191,"previous":"M21-GAP-01164","next":"M21-GAP-01166"},"M21-GAP-01166":{"line":4421,"offset":782303,"length":191,"previous":"M21-GAP-01165","next":"M21-GAP-01167"},"M21-GAP-01167":{"line":4422,"offset":782494,"length":191,"previous":"M21-GAP-01166","next":"M21-GAP-01168"},"M21-GAP-01168":{"line":4423,"offset":782685,"length":190,"previous":"M21-GAP-01167","next":"M21-GAP-01169"},"M21-GAP-01169":{"line":4424,"offset":782875,"length":191,"previous":"M21-GAP-01168","next":"M21-GAP-01170"},"M21-GAP-01170":{"line":4425,"offset":783066,"length":191,"previous":"M21-GAP-01169","next":"M21-GAP-01171"},"M21-GAP-01171":{"line":4426,"offset":783257,"length":191,"previous":"M21-GAP-01170","next":"M21-GAP-01172"},"M21-GAP-01172":{"line":4427,"offset":783448,"length":191,"previous":"M21-GAP-01171","next":"M21-GAP-01173"},"M21-GAP-01173":{"line":4428,"offset":783639,"length":191,"previous":"M21-GAP-01172","next":"M21-GAP-01174"},"M21-GAP-01174":{"line":4429,"offset":783830,"length":191,"previous":"M21-GAP-01173","next":"M21-GAP-01175"},"M21-GAP-01175":{"line":4430,"offset":784021,"length":191,"previous":"M21-GAP-01174","next":"M21-GAP-01176"},"M21-GAP-01176":{"line":4431,"offset":784212,"length":191,"previous":"M21-GAP-01175","next":"M21-GAP-01177"},"M21-GAP-01177":{"line":4432,"offset":784403,"length":191,"previous":"M21-GAP-01176","next":"M21-GAP-01178"},"M21-GAP-01178":{"line":4433,"offset":784594,"length":191,"previous":"M21-GAP-01177","next":"M21-GAP-01179"},"M21-GAP-01179":{"line":4434,"offset":784785,"length":190,"previous":"M21-GAP-01178","next":"M21-GAP-01180"},"M21-GAP-01180":{"line":4435,"offset":784975,"length":191,"previous":"M21-GAP-01179","next":"M21-GAP-01181"},"M21-GAP-01181":{"line":4436,"offset":785166,"length":191,"previous":"M21-GAP-01180","next":"M21-GAP-01182"},"M21-GAP-01182":{"line":4437,"offset":785357,"length":191,"previous":"M21-GAP-01181","next":"M21-GAP-01183"},"M21-GAP-01183":{"line":4438,"offset":785548,"length":191,"previous":"M21-GAP-01182","next":"M21-GAP-01184"},"M21-GAP-01184":{"line":4439,"offset":785739,"length":191,"previous":"M21-GAP-01183","next":"M21-GAP-01185"},"M21-GAP-01185":{"line":4440,"offset":785930,"length":191,"previous":"M21-GAP-01184","next":"M21-GAP-01186"},"M21-GAP-01186":{"line":4441,"offset":786121,"length":191,"previous":"M21-GAP-01185","next":"M21-GAP-01187"},"M21-GAP-01187":{"line":4442,"offset":786312,"length":191,"previous":"M21-GAP-01186","next":"M21-GAP-01188"},"M21-GAP-01188":{"line":4443,"offset":786503,"length":191,"previous":"M21-GAP-01187","next":"M21-GAP-01189"},"M21-GAP-01189":{"line":4444,"offset":786694,"length":191,"previous":"M21-GAP-01188","next":"M21-GAP-01190"},"M21-GAP-01190":{"line":4445,"offset":786885,"length":190,"previous":"M21-GAP-01189","next":"M21-GAP-01191"},"M21-GAP-01191":{"line":4446,"offset":787075,"length":191,"previous":"M21-GAP-01190","next":"M21-GAP-01192"},"M21-GAP-01192":{"line":4447,"offset":787266,"length":191,"previous":"M21-GAP-01191","next":"M21-GAP-01193"},"M21-GAP-01193":{"line":4448,"offset":787457,"length":191,"previous":"M21-GAP-01192","next":"M21-GAP-01194"},"M21-GAP-01194":{"line":4449,"offset":787648,"length":191,"previous":"M21-GAP-01193","next":"M21-GAP-01195"},"M21-GAP-01195":{"line":4450,"offset":787839,"length":191,"previous":"M21-GAP-01194","next":"M21-GAP-01196"},"M21-GAP-01196":{"line":4451,"offset":788030,"length":191,"previous":"M21-GAP-01195","next":"M21-GAP-01197"},"M21-GAP-01197":{"line":4452,"offset":788221,"length":191,"previous":"M21-GAP-01196","next":"M21-GAP-01198"},"M21-GAP-01198":{"line":4453,"offset":788412,"length":191,"previous":"M21-GAP-01197","next":"M21-GAP-01199"},"M21-GAP-01199":{"line":4454,"offset":788603,"length":191,"previous":"M21-GAP-01198","next":"M21-GAP-01200"},"M21-GAP-01200":{"line":4455,"offset":788794,"length":191,"previous":"M21-GAP-01199","next":"M21-GAP-01201"},"M21-GAP-01201":{"line":4456,"offset":788985,"length":190,"previous":"M21-GAP-01200","next":"M21-GAP-01202"},"M21-GAP-01202":{"line":4457,"offset":789175,"length":191,"previous":"M21-GAP-01201","next":"M21-GAP-01203"},"M21-GAP-01203":{"line":4458,"offset":789366,"length":191,"previous":"M21-GAP-01202","next":"M21-GAP-01204"},"M21-GAP-01204":{"line":4459,"offset":789557,"length":191,"previous":"M21-GAP-01203","next":"M21-GAP-01205"},"M21-GAP-01205":{"line":4460,"offset":789748,"length":191,"previous":"M21-GAP-01204","next":"M21-GAP-01206"},"M21-GAP-01206":{"line":4461,"offset":789939,"length":191,"previous":"M21-GAP-01205","next":"M21-GAP-01207"},"M21-GAP-01207":{"line":4462,"offset":790130,"length":191,"previous":"M21-GAP-01206","next":"M21-GAP-01208"},"M21-GAP-01208":{"line":4463,"offset":790321,"length":191,"previous":"M21-GAP-01207","next":"M21-GAP-01209"},"M21-GAP-01209":{"line":4464,"offset":790512,"length":190,"previous":"M21-GAP-01208","next":"M21-GAP-01210"},"M21-GAP-01210":{"line":4465,"offset":790702,"length":190,"previous":"M21-GAP-01209","next":"M21-GAP-01211"},"M21-GAP-01211":{"line":4466,"offset":790892,"length":190,"previous":"M21-GAP-01210","next":"M21-GAP-01212"},"M21-GAP-01212":{"line":4467,"offset":791082,"length":190,"previous":"M21-GAP-01211","next":"M21-GAP-01213"},"M21-GAP-01213":{"line":4468,"offset":791272,"length":190,"previous":"M21-GAP-01212","next":"M21-GAP-01214"},"M21-GAP-01214":{"line":4469,"offset":791462,"length":190,"previous":"M21-GAP-01213","next":"M21-GAP-01215"},"M21-GAP-01215":{"line":4470,"offset":791652,"length":190,"previous":"M21-GAP-01214","next":"M21-GAP-01216"},"M21-GAP-01216":{"line":4471,"offset":791842,"length":192,"previous":"M21-GAP-01215","next":"M21-GAP-01217"},"M21-GAP-01217":{"line":4472,"offset":792034,"length":192,"previous":"M21-GAP-01216","next":"M21-GAP-01218"},"M21-GAP-01218":{"line":4473,"offset":792226,"length":193,"previous":"M21-GAP-01217","next":"M21-GAP-01219"},"M21-GAP-01219":{"line":4474,"offset":792419,"length":193,"previous":"M21-GAP-01218","next":"M21-GAP-01220"},"M21-GAP-01220":{"line":4475,"offset":792612,"length":193,"previous":"M21-GAP-01219","next":"M21-GAP-01221"},"M21-GAP-01221":{"line":4476,"offset":792805,"length":193,"previous":"M21-GAP-01220","next":"M21-GAP-01222"},"M21-GAP-01222":{"line":4477,"offset":792998,"length":193,"previous":"M21-GAP-01221","next":"M21-GAP-01223"},"M21-GAP-01223":{"line":4478,"offset":793191,"length":193,"previous":"M21-GAP-01222","next":"M21-GAP-01224"},"M21-GAP-01224":{"line":4479,"offset":793384,"length":193,"previous":"M21-GAP-01223","next":"M21-GAP-01225"},"M21-GAP-01225":{"line":4480,"offset":793577,"length":193,"previous":"M21-GAP-01224","next":"M21-GAP-01226"},"M21-GAP-01226":{"line":4481,"offset":793770,"length":193,"previous":"M21-GAP-01225","next":"M21-GAP-01227"},"M21-GAP-01227":{"line":4482,"offset":793963,"length":193,"previous":"M21-GAP-01226","next":"M21-GAP-01228"},"M21-GAP-01228":{"line":4483,"offset":794156,"length":192,"previous":"M21-GAP-01227","next":"M21-GAP-01229"},"M21-GAP-01229":{"line":4484,"offset":794348,"length":193,"previous":"M21-GAP-01228","next":"M21-GAP-01230"},"M21-GAP-01230":{"line":4485,"offset":794541,"length":193,"previous":"M21-GAP-01229","next":"M21-GAP-01231"},"M21-GAP-01231":{"line":4486,"offset":794734,"length":193,"previous":"M21-GAP-01230","next":"M21-GAP-01232"},"M21-GAP-01232":{"line":4487,"offset":794927,"length":193,"previous":"M21-GAP-01231","next":"M21-GAP-01233"},"M21-GAP-01233":{"line":4488,"offset":795120,"length":193,"previous":"M21-GAP-01232","next":"M21-GAP-01234"},"M21-GAP-01234":{"line":4489,"offset":795313,"length":193,"previous":"M21-GAP-01233","next":"M21-GAP-01235"},"M21-GAP-01235":{"line":4490,"offset":795506,"length":193,"previous":"M21-GAP-01234","next":"M21-GAP-01236"},"M21-GAP-01236":{"line":4491,"offset":795699,"length":192,"previous":"M21-GAP-01235","next":"M21-GAP-01237"},"M21-GAP-01237":{"line":4492,"offset":795891,"length":192,"previous":"M21-GAP-01236","next":"M21-GAP-01238"},"M21-GAP-01238":{"line":4493,"offset":796083,"length":192,"previous":"M21-GAP-01237","next":"M21-GAP-01239"},"M21-GAP-01239":{"line":4494,"offset":796275,"length":192,"previous":"M21-GAP-01238","next":"M21-GAP-01240"},"M21-GAP-01240":{"line":4495,"offset":796467,"length":192,"previous":"M21-GAP-01239","next":"M21-GAP-01241"},"M21-GAP-01241":{"line":4496,"offset":796659,"length":192,"previous":"M21-GAP-01240","next":"M21-GAP-01242"},"M21-GAP-01242":{"line":4497,"offset":796851,"length":192,"previous":"M21-GAP-01241","next":"M21-GAP-01243"},"M21-GAP-01243":{"line":4498,"offset":797043,"length":190,"previous":"M21-GAP-01242","next":"M21-GAP-01244"},"M21-GAP-01244":{"line":4499,"offset":797233,"length":190,"previous":"M21-GAP-01243","next":"M21-GAP-01245"},"M21-GAP-01245":{"line":4500,"offset":797423,"length":190,"previous":"M21-GAP-01244","next":"M21-GAP-01246"},"M21-GAP-01246":{"line":4501,"offset":797613,"length":190,"previous":"M21-GAP-01245","next":"M21-GAP-01247"},"M21-GAP-01247":{"line":4502,"offset":797803,"length":190,"previous":"M21-GAP-01246","next":"M21-GAP-01248"},"M21-GAP-01248":{"line":4503,"offset":797993,"length":190,"previous":"M21-GAP-01247","next":"M21-GAP-01249"},"M21-GAP-01249":{"line":4504,"offset":798183,"length":190,"previous":"M21-GAP-01248","next":"M21-GAP-01250"},"M21-GAP-01250":{"line":4505,"offset":798373,"length":190,"previous":"M21-GAP-01249","next":"M21-GAP-01251"},"M21-GAP-01251":{"line":4506,"offset":798563,"length":190,"previous":"M21-GAP-01250","next":"M21-GAP-01252"},"M21-GAP-01252":{"line":4507,"offset":798753,"length":190,"previous":"M21-GAP-01251","next":"M21-GAP-01253"},"M21-GAP-01253":{"line":4508,"offset":798943,"length":193,"previous":"M21-GAP-01252","next":"M21-GAP-01254"},"M21-GAP-01254":{"line":4509,"offset":799136,"length":193,"previous":"M21-GAP-01253","next":"M21-GAP-01255"},"M21-GAP-01255":{"line":4510,"offset":799329,"length":194,"previous":"M21-GAP-01254","next":"M21-GAP-01256"},"M21-GAP-01256":{"line":4511,"offset":799523,"length":194,"previous":"M21-GAP-01255","next":"M21-GAP-01257"},"M21-GAP-01257":{"line":4512,"offset":799717,"length":194,"previous":"M21-GAP-01256","next":"M21-GAP-01258"},"M21-GAP-01258":{"line":4513,"offset":799911,"length":194,"previous":"M21-GAP-01257","next":"M21-GAP-01259"},"M21-GAP-01259":{"line":4514,"offset":800105,"length":194,"previous":"M21-GAP-01258","next":"M21-GAP-01260"},"M21-GAP-01260":{"line":4515,"offset":800299,"length":194,"previous":"M21-GAP-01259","next":"M21-GAP-01261"},"M21-GAP-01261":{"line":4516,"offset":800493,"length":194,"previous":"M21-GAP-01260","next":"M21-GAP-01262"},"M21-GAP-01262":{"line":4517,"offset":800687,"length":194,"previous":"M21-GAP-01261","next":"M21-GAP-01263"},"M21-GAP-01263":{"line":4518,"offset":800881,"length":194,"previous":"M21-GAP-01262","next":"M21-GAP-01264"},"M21-GAP-01264":{"line":4519,"offset":801075,"length":194,"previous":"M21-GAP-01263","next":"M21-GAP-01265"},"M21-GAP-01265":{"line":4520,"offset":801269,"length":193,"previous":"M21-GAP-01264","next":"M21-GAP-01266"},"M21-GAP-01266":{"line":4521,"offset":801462,"length":194,"previous":"M21-GAP-01265","next":"M21-GAP-01267"},"M21-GAP-01267":{"line":4522,"offset":801656,"length":194,"previous":"M21-GAP-01266","next":"M21-GAP-01268"},"M21-GAP-01268":{"line":4523,"offset":801850,"length":193,"previous":"M21-GAP-01267","next":"M21-GAP-01269"},"M21-GAP-01269":{"line":4524,"offset":802043,"length":193,"previous":"M21-GAP-01268","next":"M21-GAP-01270"},"M21-GAP-01270":{"line":4525,"offset":802236,"length":193,"previous":"M21-GAP-01269","next":"M21-GAP-01271"},"M21-GAP-01271":{"line":4526,"offset":802429,"length":193,"previous":"M21-GAP-01270","next":"M21-GAP-01272"},"M21-GAP-01272":{"line":4527,"offset":802622,"length":193,"previous":"M21-GAP-01271","next":"M21-GAP-01273"},"M21-GAP-01273":{"line":4528,"offset":802815,"length":193,"previous":"M21-GAP-01272","next":"M21-GAP-01274"},"M21-GAP-01274":{"line":4529,"offset":803008,"length":193,"previous":"M21-GAP-01273","next":"M21-GAP-01275"},"M21-GAP-01275":{"line":4530,"offset":803201,"length":193,"previous":"M21-GAP-01274","next":"M21-GAP-01276"},"M21-GAP-01276":{"line":4531,"offset":803394,"length":193,"previous":"M21-GAP-01275","next":"M21-GAP-01277"},"M21-GAP-01277":{"line":4532,"offset":803587,"length":194,"previous":"M21-GAP-01276","next":"M21-GAP-01278"},"M21-GAP-01278":{"line":4533,"offset":803781,"length":194,"previous":"M21-GAP-01277","next":"M21-GAP-01279"},"M21-GAP-01279":{"line":4534,"offset":803975,"length":194,"previous":"M21-GAP-01278","next":"M21-GAP-01280"},"M21-GAP-01280":{"line":4535,"offset":804169,"length":194,"previous":"M21-GAP-01279","next":"M21-GAP-01281"},"M21-GAP-01281":{"line":4536,"offset":804363,"length":194,"previous":"M21-GAP-01280","next":"M21-GAP-01282"},"M21-GAP-01282":{"line":4537,"offset":804557,"length":194,"previous":"M21-GAP-01281","next":"M21-GAP-01283"},"M21-GAP-01283":{"line":4538,"offset":804751,"length":194,"previous":"M21-GAP-01282","next":"M21-GAP-01284"},"M21-GAP-01284":{"line":4539,"offset":804945,"length":194,"previous":"M21-GAP-01283","next":"M21-GAP-01285"},"M21-GAP-01285":{"line":4540,"offset":805139,"length":194,"previous":"M21-GAP-01284","next":"M21-GAP-01286"},"M21-GAP-01286":{"line":4541,"offset":805333,"length":194,"previous":"M21-GAP-01285","next":"M21-GAP-01287"},"M21-GAP-01287":{"line":4542,"offset":805527,"length":193,"previous":"M21-GAP-01286","next":"M21-GAP-01288"},"M21-GAP-01288":{"line":4543,"offset":805720,"length":194,"previous":"M21-GAP-01287","next":"M21-GAP-01289"},"M21-GAP-01289":{"line":4544,"offset":805914,"length":194,"previous":"M21-GAP-01288","next":"M21-GAP-01290"},"M21-GAP-01290":{"line":4545,"offset":806108,"length":194,"previous":"M21-GAP-01289","next":"M21-GAP-01291"},"M21-GAP-01291":{"line":4546,"offset":806302,"length":194,"previous":"M21-GAP-01290","next":"M21-GAP-01292"},"M21-GAP-01292":{"line":4547,"offset":806496,"length":194,"previous":"M21-GAP-01291","next":"M21-GAP-01293"},"M21-GAP-01293":{"line":4548,"offset":806690,"length":194,"previous":"M21-GAP-01292","next":"M21-GAP-01294"},"M21-GAP-01294":{"line":4549,"offset":806884,"length":193,"previous":"M21-GAP-01293","next":"M21-GAP-01295"},"M21-GAP-01295":{"line":4550,"offset":807077,"length":193,"previous":"M21-GAP-01294","next":"M21-GAP-01296"},"M21-GAP-01296":{"line":4551,"offset":807270,"length":193,"previous":"M21-GAP-01295","next":"M21-GAP-01297"},"M21-GAP-01297":{"line":4552,"offset":807463,"length":193,"previous":"M21-GAP-01296","next":"M21-GAP-01298"},"M21-GAP-01298":{"line":4553,"offset":807656,"length":193,"previous":"M21-GAP-01297","next":"M21-GAP-01299"},"M21-GAP-01299":{"line":4554,"offset":807849,"length":193,"previous":"M21-GAP-01298","next":"M21-GAP-01300"},"M21-GAP-01300":{"line":4555,"offset":808042,"length":193,"previous":"M21-GAP-01299","next":"M21-GAP-01301"},"M21-GAP-01301":{"line":4556,"offset":808235,"length":180,"previous":"M21-GAP-01300","next":"M21-GAP-01302"},"M21-GAP-01302":{"line":4557,"offset":808415,"length":180,"previous":"M21-GAP-01301","next":"M21-GAP-01303"},"M21-GAP-01303":{"line":4558,"offset":808595,"length":180,"previous":"M21-GAP-01302","next":"M21-GAP-01304"},"M21-GAP-01304":{"line":4559,"offset":808775,"length":180,"previous":"M21-GAP-01303","next":"M21-GAP-01305"},"M21-GAP-01305":{"line":4560,"offset":808955,"length":180,"previous":"M21-GAP-01304","next":"M21-GAP-01306"},"M21-GAP-01306":{"line":4561,"offset":809135,"length":202,"previous":"M21-GAP-01305","next":"M21-GAP-01307"},"M21-GAP-01307":{"line":4562,"offset":809337,"length":205,"previous":"M21-GAP-01306","next":"M21-GAP-01308"},"M21-GAP-01308":{"line":4563,"offset":809542,"length":205,"previous":"M21-GAP-01307","next":"M21-GAP-01309"},"M21-GAP-01309":{"line":4564,"offset":809747,"length":205,"previous":"M21-GAP-01308","next":"M21-GAP-01310"},"M21-GAP-01310":{"line":4565,"offset":809952,"length":203,"previous":"M21-GAP-01309","next":"M21-GAP-01311"},"M21-GAP-01311":{"line":4566,"offset":810155,"length":205,"previous":"M21-GAP-01310","next":"M21-GAP-01312"},"M21-GAP-01312":{"line":4567,"offset":810360,"length":204,"previous":"M21-GAP-01311","next":"M21-GAP-01313"},"M21-GAP-01313":{"line":4568,"offset":810564,"length":220,"previous":"M21-GAP-01312","next":"M21-GAP-01314"},"M21-GAP-01314":{"line":4569,"offset":810784,"length":220,"previous":"M21-GAP-01313","next":"M21-GAP-01315"},"M21-GAP-01315":{"line":4570,"offset":811004,"length":220,"previous":"M21-GAP-01314","next":"M21-GAP-01316"},"M21-GAP-01316":{"line":4571,"offset":811224,"length":209,"previous":"M21-GAP-01315","next":"M21-GAP-01317"},"M21-GAP-01317":{"line":4572,"offset":811433,"length":209,"previous":"M21-GAP-01316","next":"M21-GAP-01318"},"M21-GAP-01318":{"line":4573,"offset":811642,"length":209,"previous":"M21-GAP-01317","next":"M21-GAP-01319"},"M21-GAP-01319":{"line":4574,"offset":811851,"length":223,"previous":"M21-GAP-01318","next":"M21-GAP-01320"},"M21-GAP-01320":{"line":4575,"offset":812074,"length":223,"previous":"M21-GAP-01319","next":"M21-GAP-01321"},"M21-GAP-01321":{"line":4576,"offset":812297,"length":223,"previous":"M21-GAP-01320","next":"M21-GAP-01322"},"M21-GAP-01322":{"line":4577,"offset":812520,"length":212,"previous":"M21-GAP-01321","next":"M21-GAP-01323"},"M21-GAP-01323":{"line":4578,"offset":812732,"length":212,"previous":"M21-GAP-01322","next":"M21-GAP-01324"},"M21-GAP-01324":{"line":4579,"offset":812944,"length":212,"previous":"M21-GAP-01323","next":"M21-GAP-01325"},"M21-GAP-01325":{"line":4580,"offset":813156,"length":222,"previous":"M21-GAP-01324","next":"M21-GAP-01326"},"M21-GAP-01326":{"line":4581,"offset":813378,"length":222,"previous":"M21-GAP-01325","next":"M21-GAP-01327"},"M21-GAP-01327":{"line":4582,"offset":813600,"length":222,"previous":"M21-GAP-01326","next":"M21-GAP-01328"},"M21-GAP-01328":{"line":4583,"offset":813822,"length":211,"previous":"M21-GAP-01327","next":"M21-GAP-01329"},"M21-GAP-01329":{"line":4584,"offset":814033,"length":211,"previous":"M21-GAP-01328","next":"M21-GAP-01330"},"M21-GAP-01330":{"line":4585,"offset":814244,"length":211,"previous":"M21-GAP-01329","next":"M21-GAP-01331"},"M21-GAP-01331":{"line":4586,"offset":814455,"length":208,"previous":"M21-GAP-01330","next":"M21-GAP-01332"},"M21-GAP-01332":{"line":4587,"offset":814663,"length":215,"previous":"M21-GAP-01331","next":"M21-GAP-01333"},"M21-GAP-01333":{"line":4588,"offset":814878,"length":215,"previous":"M21-GAP-01332","next":"M21-GAP-01334"},"M21-GAP-01334":{"line":4589,"offset":815093,"length":215,"previous":"M21-GAP-01333","next":"M21-GAP-01335"},"M21-GAP-01335":{"line":4590,"offset":815308,"length":204,"previous":"M21-GAP-01334","next":"M21-GAP-01336"},"M21-GAP-01336":{"line":4591,"offset":815512,"length":204,"previous":"M21-GAP-01335","next":"M21-GAP-01337"},"M21-GAP-01337":{"line":4592,"offset":815716,"length":204,"previous":"M21-GAP-01336","next":"M21-GAP-01338"},"M21-GAP-01338":{"line":4593,"offset":815920,"length":199,"previous":"M21-GAP-01337","next":"M21-GAP-01339"},"M21-GAP-01339":{"line":4594,"offset":816119,"length":203,"previous":"M21-GAP-01338","next":"M21-GAP-01340"},"M21-GAP-01340":{"line":4595,"offset":816322,"length":203,"previous":"M21-GAP-01339","next":"M21-GAP-01341"},"M21-GAP-01341":{"line":4596,"offset":816525,"length":201,"previous":"M21-GAP-01340","next":"M21-GAP-01342"},"M21-GAP-01342":{"line":4597,"offset":816726,"length":201,"previous":"M21-GAP-01341","next":"M21-GAP-01343"},"M21-GAP-01343":{"line":4598,"offset":816927,"length":201,"previous":"M21-GAP-01342","next":"M21-GAP-01344"},"M21-GAP-01344":{"line":4599,"offset":817128,"length":201,"previous":"M21-GAP-01343","next":"M21-GAP-01345"},"M21-GAP-01345":{"line":4600,"offset":817329,"length":201,"previous":"M21-GAP-01344","next":"M21-GAP-01346"},"M21-GAP-01346":{"line":4601,"offset":817530,"length":201,"previous":"M21-GAP-01345","next":"M21-GAP-01347"},"M21-GAP-01347":{"line":4602,"offset":817731,"length":202,"previous":"M21-GAP-01346","next":"M21-GAP-01348"},"M21-GAP-01348":{"line":4603,"offset":817933,"length":202,"previous":"M21-GAP-01347","next":"M21-GAP-01349"},"M21-GAP-01349":{"line":4604,"offset":818135,"length":202,"previous":"M21-GAP-01348","next":"M21-GAP-01350"},"M21-GAP-01350":{"line":4605,"offset":818337,"length":202,"previous":"M21-GAP-01349","next":"M21-GAP-01351"},"M21-GAP-01351":{"line":4606,"offset":818539,"length":202,"previous":"M21-GAP-01350","next":"M21-GAP-01352"},"M21-GAP-01352":{"line":4607,"offset":818741,"length":202,"previous":"M21-GAP-01351","next":"M21-GAP-01353"},"M21-GAP-01353":{"line":4608,"offset":818943,"length":202,"previous":"M21-GAP-01352","next":"M21-GAP-01354"},"M21-GAP-01354":{"line":4609,"offset":819145,"length":202,"previous":"M21-GAP-01353","next":"M21-GAP-01355"},"M21-GAP-01355":{"line":4610,"offset":819347,"length":202,"previous":"M21-GAP-01354","next":"M21-GAP-01356"},"M21-GAP-01356":{"line":4611,"offset":819549,"length":202,"previous":"M21-GAP-01355","next":"M21-GAP-01357"},"M21-GAP-01357":{"line":4612,"offset":819751,"length":207,"previous":"M21-GAP-01356","next":"M21-GAP-01358"},"M21-GAP-01358":{"line":4613,"offset":819958,"length":203,"previous":"M21-GAP-01357","next":"M21-GAP-01359"},"M21-GAP-01359":{"line":4614,"offset":820161,"length":202,"previous":"M21-GAP-01358","next":"M21-GAP-01360"},"M21-GAP-01360":{"line":4615,"offset":820363,"length":218,"previous":"M21-GAP-01359","next":"M21-GAP-01361"},"M21-GAP-01361":{"line":4616,"offset":820581,"length":218,"previous":"M21-GAP-01360","next":"M21-GAP-01362"},"M21-GAP-01362":{"line":4617,"offset":820799,"length":218,"previous":"M21-GAP-01361","next":"M21-GAP-01363"},"M21-GAP-01363":{"line":4618,"offset":821017,"length":207,"previous":"M21-GAP-01362","next":"M21-GAP-01364"},"M21-GAP-01364":{"line":4619,"offset":821224,"length":207,"previous":"M21-GAP-01363","next":"M21-GAP-01365"},"M21-GAP-01365":{"line":4620,"offset":821431,"length":207,"previous":"M21-GAP-01364","next":"M21-GAP-01366"},"M21-GAP-01366":{"line":4621,"offset":821638,"length":221,"previous":"M21-GAP-01365","next":"M21-GAP-01367"},"M21-GAP-01367":{"line":4622,"offset":821859,"length":221,"previous":"M21-GAP-01366","next":"M21-GAP-01368"},"M21-GAP-01368":{"line":4623,"offset":822080,"length":221,"previous":"M21-GAP-01367","next":"M21-GAP-01369"},"M21-GAP-01369":{"line":4624,"offset":822301,"length":210,"previous":"M21-GAP-01368","next":"M21-GAP-01370"},"M21-GAP-01370":{"line":4625,"offset":822511,"length":210,"previous":"M21-GAP-01369","next":"M21-GAP-01371"},"M21-GAP-01371":{"line":4626,"offset":822721,"length":210,"previous":"M21-GAP-01370","next":"M21-GAP-01372"},"M21-GAP-01372":{"line":4627,"offset":822931,"length":220,"previous":"M21-GAP-01371","next":"M21-GAP-01373"},"M21-GAP-01373":{"line":4628,"offset":823151,"length":220,"previous":"M21-GAP-01372","next":"M21-GAP-01374"},"M21-GAP-01374":{"line":4629,"offset":823371,"length":220,"previous":"M21-GAP-01373","next":"M21-GAP-01375"},"M21-GAP-01375":{"line":4630,"offset":823591,"length":209,"previous":"M21-GAP-01374","next":"M21-GAP-01376"},"M21-GAP-01376":{"line":4631,"offset":823800,"length":209,"previous":"M21-GAP-01375","next":"M21-GAP-01377"},"M21-GAP-01377":{"line":4632,"offset":824009,"length":209,"previous":"M21-GAP-01376","next":"M21-GAP-01378"},"M21-GAP-01378":{"line":4633,"offset":824218,"length":213,"previous":"M21-GAP-01377","next":"M21-GAP-01379"},"M21-GAP-01379":{"line":4634,"offset":824431,"length":213,"previous":"M21-GAP-01378","next":"M21-GAP-01380"},"M21-GAP-01380":{"line":4635,"offset":824644,"length":213,"previous":"M21-GAP-01379","next":"M21-GAP-01381"},"M21-GAP-01381":{"line":4636,"offset":824857,"length":202,"previous":"M21-GAP-01380","next":"M21-GAP-01382"},"M21-GAP-01382":{"line":4637,"offset":825059,"length":202,"previous":"M21-GAP-01381","next":"M21-GAP-01383"},"M21-GAP-01383":{"line":4638,"offset":825261,"length":202,"previous":"M21-GAP-01382","next":"M21-GAP-01384"},"M21-GAP-01384":{"line":4639,"offset":825463,"length":187,"previous":"M21-GAP-01383","next":"M21-GAP-01385"},"M21-GAP-01385":{"line":4640,"offset":825650,"length":187,"previous":"M21-GAP-01384","next":"M21-GAP-01386"},"M21-GAP-01386":{"line":4641,"offset":825837,"length":188,"previous":"M21-GAP-01385","next":"M21-GAP-01387"},"M21-GAP-01387":{"line":4642,"offset":826025,"length":187,"previous":"M21-GAP-01386","next":"M21-GAP-01388"},"M21-GAP-01388":{"line":4643,"offset":826212,"length":187,"previous":"M21-GAP-01387","next":"M21-GAP-01389"},"M21-GAP-01389":{"line":4644,"offset":826399,"length":187,"previous":"M21-GAP-01388","next":"M21-GAP-01390"},"M21-GAP-01390":{"line":4645,"offset":826586,"length":187,"previous":"M21-GAP-01389","next":"M21-GAP-01391"},"M21-GAP-01391":{"line":4646,"offset":826773,"length":187,"previous":"M21-GAP-01390","next":"M21-GAP-01392"},"M21-GAP-01392":{"line":4647,"offset":826960,"length":187,"previous":"M21-GAP-01391","next":"M21-GAP-01393"},"M21-GAP-01393":{"line":4648,"offset":827147,"length":187,"previous":"M21-GAP-01392","next":"M21-GAP-01394"},"M21-GAP-01394":{"line":4649,"offset":827334,"length":187,"previous":"M21-GAP-01393","next":"M21-GAP-01395"},"M21-GAP-01395":{"line":4650,"offset":827521,"length":178,"previous":"M21-GAP-01394","next":"M21-GAP-01396"},"M21-GAP-01396":{"line":4651,"offset":827699,"length":178,"previous":"M21-GAP-01395","next":"M21-GAP-01397"},"M21-GAP-01397":{"line":4652,"offset":827877,"length":179,"previous":"M21-GAP-01396","next":"M21-GAP-01398"},"M21-GAP-01398":{"line":4653,"offset":828056,"length":179,"previous":"M21-GAP-01397","next":"M21-GAP-01399"},"M21-GAP-01399":{"line":4654,"offset":828235,"length":179,"previous":"M21-GAP-01398","next":"M21-GAP-01400"},"M21-GAP-01400":{"line":4655,"offset":828414,"length":179,"previous":"M21-GAP-01399","next":"M21-GAP-01401"},"M21-GAP-01401":{"line":4656,"offset":828593,"length":179,"previous":"M21-GAP-01400","next":"M21-GAP-01402"},"M21-GAP-01402":{"line":4657,"offset":828772,"length":179,"previous":"M21-GAP-01401","next":"M21-GAP-01403"},"M21-GAP-01403":{"line":4658,"offset":828951,"length":179,"previous":"M21-GAP-01402","next":"M21-GAP-01404"},"M21-GAP-01404":{"line":4659,"offset":829130,"length":179,"previous":"M21-GAP-01403","next":"M21-GAP-01405"},"M21-GAP-01405":{"line":4660,"offset":829309,"length":179,"previous":"M21-GAP-01404","next":"M21-GAP-01406"},"M21-GAP-01406":{"line":4661,"offset":829488,"length":179,"previous":"M21-GAP-01405","next":"M21-GAP-01407"},"M21-GAP-01407":{"line":4662,"offset":829667,"length":178,"previous":"M21-GAP-01406","next":"M21-GAP-01408"},"M21-GAP-01408":{"line":4663,"offset":829845,"length":179,"previous":"M21-GAP-01407","next":"M21-GAP-01409"},"M21-GAP-01409":{"line":4664,"offset":830024,"length":179,"previous":"M21-GAP-01408","next":"M21-GAP-01410"},"M21-GAP-01410":{"line":4665,"offset":830203,"length":179,"previous":"M21-GAP-01409","next":"M21-GAP-01411"},"M21-GAP-01411":{"line":4666,"offset":830382,"length":179,"previous":"M21-GAP-01410","next":"M21-GAP-01412"},"M21-GAP-01412":{"line":4667,"offset":830561,"length":179,"previous":"M21-GAP-01411","next":"M21-GAP-01413"},"M21-GAP-01413":{"line":4668,"offset":830740,"length":179,"previous":"M21-GAP-01412","next":"M21-GAP-01414"},"M21-GAP-01414":{"line":4669,"offset":830919,"length":178,"previous":"M21-GAP-01413","next":"M21-GAP-01415"},"M21-GAP-01415":{"line":4670,"offset":831097,"length":178,"previous":"M21-GAP-01414","next":"M21-GAP-01416"},"M21-GAP-01416":{"line":4671,"offset":831275,"length":178,"previous":"M21-GAP-01415","next":"M21-GAP-01417"},"M21-GAP-01417":{"line":4672,"offset":831453,"length":178,"previous":"M21-GAP-01416","next":"M21-GAP-01418"},"M21-GAP-01418":{"line":4673,"offset":831631,"length":178,"previous":"M21-GAP-01417","next":"M21-GAP-01419"},"M21-GAP-01419":{"line":4674,"offset":831809,"length":178,"previous":"M21-GAP-01418","next":"M21-GAP-01420"},"M21-GAP-01420":{"line":4675,"offset":831987,"length":178,"previous":"M21-GAP-01419","next":"M21-GAP-01421"},"M21-GAP-01421":{"line":4676,"offset":832165,"length":179,"previous":"M21-GAP-01420","next":"M21-GAP-01422"},"M21-GAP-01422":{"line":4677,"offset":832344,"length":179,"previous":"M21-GAP-01421","next":"M21-GAP-01423"},"M21-GAP-01423":{"line":4678,"offset":832523,"length":180,"previous":"M21-GAP-01422","next":"M21-GAP-01424"},"M21-GAP-01424":{"line":4679,"offset":832703,"length":180,"previous":"M21-GAP-01423","next":"M21-GAP-01425"},"M21-GAP-01425":{"line":4680,"offset":832883,"length":180,"previous":"M21-GAP-01424","next":"M21-GAP-01426"},"M21-GAP-01426":{"line":4681,"offset":833063,"length":180,"previous":"M21-GAP-01425","next":"M21-GAP-01427"},"M21-GAP-01427":{"line":4682,"offset":833243,"length":180,"previous":"M21-GAP-01426","next":"M21-GAP-01428"},"M21-GAP-01428":{"line":4683,"offset":833423,"length":180,"previous":"M21-GAP-01427","next":"M21-GAP-01429"},"M21-GAP-01429":{"line":4684,"offset":833603,"length":180,"previous":"M21-GAP-01428","next":"M21-GAP-01430"},"M21-GAP-01430":{"line":4685,"offset":833783,"length":180,"previous":"M21-GAP-01429","next":"M21-GAP-01431"},"M21-GAP-01431":{"line":4686,"offset":833963,"length":180,"previous":"M21-GAP-01430","next":"M21-GAP-01432"},"M21-GAP-01432":{"line":4687,"offset":834143,"length":180,"previous":"M21-GAP-01431","next":"M21-GAP-01433"},"M21-GAP-01433":{"line":4688,"offset":834323,"length":179,"previous":"M21-GAP-01432","next":"M21-GAP-01434"},"M21-GAP-01434":{"line":4689,"offset":834502,"length":180,"previous":"M21-GAP-01433","next":"M21-GAP-01435"},"M21-GAP-01435":{"line":4690,"offset":834682,"length":180,"previous":"M21-GAP-01434","next":"M21-GAP-01436"},"M21-GAP-01436":{"line":4691,"offset":834862,"length":180,"previous":"M21-GAP-01435","next":"M21-GAP-01437"},"M21-GAP-01437":{"line":4692,"offset":835042,"length":180,"previous":"M21-GAP-01436","next":"M21-GAP-01438"},"M21-GAP-01438":{"line":4693,"offset":835222,"length":180,"previous":"M21-GAP-01437","next":"M21-GAP-01439"},"M21-GAP-01439":{"line":4694,"offset":835402,"length":180,"previous":"M21-GAP-01438","next":"M21-GAP-01440"},"M21-GAP-01440":{"line":4695,"offset":835582,"length":180,"previous":"M21-GAP-01439","next":"M21-GAP-01441"},"M21-GAP-01441":{"line":4696,"offset":835762,"length":180,"previous":"M21-GAP-01440","next":"M21-GAP-01442"},"M21-GAP-01442":{"line":4697,"offset":835942,"length":180,"previous":"M21-GAP-01441","next":"M21-GAP-01443"},"M21-GAP-01443":{"line":4698,"offset":836122,"length":180,"previous":"M21-GAP-01442","next":"M21-GAP-01444"},"M21-GAP-01444":{"line":4699,"offset":836302,"length":179,"previous":"M21-GAP-01443","next":"M21-GAP-01445"},"M21-GAP-01445":{"line":4700,"offset":836481,"length":180,"previous":"M21-GAP-01444","next":"M21-GAP-01446"},"M21-GAP-01446":{"line":4701,"offset":836661,"length":180,"previous":"M21-GAP-01445","next":"M21-GAP-01447"},"M21-GAP-01447":{"line":4702,"offset":836841,"length":180,"previous":"M21-GAP-01446","next":"M21-GAP-01448"},"M21-GAP-01448":{"line":4703,"offset":837021,"length":180,"previous":"M21-GAP-01447","next":"M21-GAP-01449"},"M21-GAP-01449":{"line":4704,"offset":837201,"length":180,"previous":"M21-GAP-01448","next":"M21-GAP-01450"},"M21-GAP-01450":{"line":4705,"offset":837381,"length":180,"previous":"M21-GAP-01449","next":"M21-GAP-01451"},"M21-GAP-01451":{"line":4706,"offset":837561,"length":180,"previous":"M21-GAP-01450","next":"M21-GAP-01452"},"M21-GAP-01452":{"line":4707,"offset":837741,"length":180,"previous":"M21-GAP-01451","next":"M21-GAP-01453"},"M21-GAP-01453":{"line":4708,"offset":837921,"length":180,"previous":"M21-GAP-01452","next":"M21-GAP-01454"},"M21-GAP-01454":{"line":4709,"offset":838101,"length":180,"previous":"M21-GAP-01453","next":"M21-GAP-01455"},"M21-GAP-01455":{"line":4710,"offset":838281,"length":179,"previous":"M21-GAP-01454","next":"M21-GAP-01456"},"M21-GAP-01456":{"line":4711,"offset":838460,"length":180,"previous":"M21-GAP-01455","next":"M21-GAP-01457"},"M21-GAP-01457":{"line":4712,"offset":838640,"length":180,"previous":"M21-GAP-01456","next":"M21-GAP-01458"},"M21-GAP-01458":{"line":4713,"offset":838820,"length":180,"previous":"M21-GAP-01457","next":"M21-GAP-01459"},"M21-GAP-01459":{"line":4714,"offset":839000,"length":180,"previous":"M21-GAP-01458","next":"M21-GAP-01460"},"M21-GAP-01460":{"line":4715,"offset":839180,"length":180,"previous":"M21-GAP-01459","next":"M21-GAP-01461"},"M21-GAP-01461":{"line":4716,"offset":839360,"length":180,"previous":"M21-GAP-01460","next":"M21-GAP-01462"},"M21-GAP-01462":{"line":4717,"offset":839540,"length":180,"previous":"M21-GAP-01461","next":"M21-GAP-01463"},"M21-GAP-01463":{"line":4718,"offset":839720,"length":180,"previous":"M21-GAP-01462","next":"M21-GAP-01464"},"M21-GAP-01464":{"line":4719,"offset":839900,"length":180,"previous":"M21-GAP-01463","next":"M21-GAP-01465"},"M21-GAP-01465":{"line":4720,"offset":840080,"length":180,"previous":"M21-GAP-01464","next":"M21-GAP-01466"},"M21-GAP-01466":{"line":4721,"offset":840260,"length":179,"previous":"M21-GAP-01465","next":"M21-GAP-01467"},"M21-GAP-01467":{"line":4722,"offset":840439,"length":180,"previous":"M21-GAP-01466","next":"M21-GAP-01468"},"M21-GAP-01468":{"line":4723,"offset":840619,"length":179,"previous":"M21-GAP-01467","next":"M21-GAP-01469"},"M21-GAP-01469":{"line":4724,"offset":840798,"length":179,"previous":"M21-GAP-01468","next":"M21-GAP-01470"},"M21-GAP-01470":{"line":4725,"offset":840977,"length":179,"previous":"M21-GAP-01469","next":"M21-GAP-01471"},"M21-GAP-01471":{"line":4726,"offset":841156,"length":179,"previous":"M21-GAP-01470","next":"M21-GAP-01472"},"M21-GAP-01472":{"line":4727,"offset":841335,"length":170,"previous":"M21-GAP-01471","next":"M21-GAP-01473"},"M21-GAP-01473":{"line":4728,"offset":841505,"length":170,"previous":"M21-GAP-01472","next":"M21-GAP-01474"},"M21-GAP-01474":{"line":4729,"offset":841675,"length":171,"previous":"M21-GAP-01473","next":"M21-GAP-01475"},"M21-GAP-01475":{"line":4730,"offset":841846,"length":171,"previous":"M21-GAP-01474","next":"M21-GAP-01476"},"M21-GAP-01476":{"line":4731,"offset":842017,"length":171,"previous":"M21-GAP-01475","next":"M21-GAP-01477"},"M21-GAP-01477":{"line":4732,"offset":842188,"length":171,"previous":"M21-GAP-01476","next":"M21-GAP-01478"},"M21-GAP-01478":{"line":4733,"offset":842359,"length":170,"previous":"M21-GAP-01477","next":"M21-GAP-01479"},"M21-GAP-01479":{"line":4734,"offset":842529,"length":170,"previous":"M21-GAP-01478","next":"M21-GAP-01480"},"M21-GAP-01480":{"line":4735,"offset":842699,"length":170,"previous":"M21-GAP-01479","next":"M21-GAP-01481"},"M21-GAP-01481":{"line":4736,"offset":842869,"length":170,"previous":"M21-GAP-01480","next":"M21-GAP-01482"},"M21-GAP-01482":{"line":4737,"offset":843039,"length":170,"previous":"M21-GAP-01481","next":"M21-GAP-01483"},"M21-GAP-01483":{"line":4738,"offset":843209,"length":170,"previous":"M21-GAP-01482","next":"M21-GAP-01484"},"M21-GAP-01484":{"line":4739,"offset":843379,"length":170,"previous":"M21-GAP-01483","next":"M21-GAP-01485"},"M21-GAP-01485":{"line":4740,"offset":843549,"length":170,"previous":"M21-GAP-01484","next":"M21-GAP-01486"},"M21-GAP-01486":{"line":4741,"offset":843719,"length":193,"previous":"M21-GAP-01485","next":"M21-GAP-01487"},"M21-GAP-01487":{"line":4742,"offset":843912,"length":193,"previous":"M21-GAP-01486","next":"M21-GAP-01488"},"M21-GAP-01488":{"line":4743,"offset":844105,"length":193,"previous":"M21-GAP-01487","next":"M21-GAP-01489"},"M21-GAP-01489":{"line":4744,"offset":844298,"length":193,"previous":"M21-GAP-01488","next":"M21-GAP-01490"},"M21-GAP-01490":{"line":4745,"offset":844491,"length":193,"previous":"M21-GAP-01489","next":"M21-GAP-01491"},"M21-GAP-01491":{"line":4746,"offset":844684,"length":193,"previous":"M21-GAP-01490","next":"M21-GAP-01492"},"M21-GAP-01492":{"line":4747,"offset":844877,"length":193,"previous":"M21-GAP-01491","next":"M21-GAP-01493"},"M21-GAP-01493":{"line":4748,"offset":845070,"length":187,"previous":"M21-GAP-01492","next":"M21-GAP-01494"},"M21-GAP-01494":{"line":4749,"offset":845257,"length":187,"previous":"M21-GAP-01493","next":"M21-GAP-01495"},"M21-GAP-01495":{"line":4750,"offset":845444,"length":188,"previous":"M21-GAP-01494","next":"M21-GAP-01496"},"M21-GAP-01496":{"line":4751,"offset":845632,"length":188,"previous":"M21-GAP-01495","next":"M21-GAP-01497"},"M21-GAP-01497":{"line":4752,"offset":845820,"length":188,"previous":"M21-GAP-01496","next":"M21-GAP-01498"},"M21-GAP-01498":{"line":4753,"offset":846008,"length":188,"previous":"M21-GAP-01497","next":"M21-GAP-01499"},"M21-GAP-01499":{"line":4754,"offset":846196,"length":188,"previous":"M21-GAP-01498","next":"M21-GAP-01500"},"M21-GAP-01500":{"line":4755,"offset":846384,"length":188,"previous":"M21-GAP-01499","next":"M21-GAP-01501"},"M21-GAP-01501":{"line":4756,"offset":846572,"length":188,"previous":"M21-GAP-01500","next":"M21-GAP-01502"},"M21-GAP-01502":{"line":4757,"offset":846760,"length":188,"previous":"M21-GAP-01501","next":"M21-GAP-01503"},"M21-GAP-01503":{"line":4758,"offset":846948,"length":188,"previous":"M21-GAP-01502","next":"M21-GAP-01504"},"M21-GAP-01504":{"line":4759,"offset":847136,"length":188,"previous":"M21-GAP-01503","next":"M21-GAP-01505"},"M21-GAP-01505":{"line":4760,"offset":847324,"length":187,"previous":"M21-GAP-01504","next":"M21-GAP-01506"},"M21-GAP-01506":{"line":4761,"offset":847511,"length":188,"previous":"M21-GAP-01505","next":"M21-GAP-01507"},"M21-GAP-01507":{"line":4762,"offset":847699,"length":188,"previous":"M21-GAP-01506","next":"M21-GAP-01508"},"M21-GAP-01508":{"line":4763,"offset":847887,"length":188,"previous":"M21-GAP-01507","next":"M21-GAP-01509"},"M21-GAP-01509":{"line":4764,"offset":848075,"length":188,"previous":"M21-GAP-01508","next":"M21-GAP-01510"},"M21-GAP-01510":{"line":4765,"offset":848263,"length":188,"previous":"M21-GAP-01509","next":"M21-GAP-01511"},"M21-GAP-01511":{"line":4766,"offset":848451,"length":187,"previous":"M21-GAP-01510","next":"M21-GAP-01512"},"M21-GAP-01512":{"line":4767,"offset":848638,"length":187,"previous":"M21-GAP-01511","next":"M21-GAP-01513"},"M21-GAP-01513":{"line":4768,"offset":848825,"length":187,"previous":"M21-GAP-01512","next":"M21-GAP-01514"},"M21-GAP-01514":{"line":4769,"offset":849012,"length":187,"previous":"M21-GAP-01513","next":"M21-GAP-01515"},"M21-GAP-01515":{"line":4770,"offset":849199,"length":187,"previous":"M21-GAP-01514","next":"M21-GAP-01516"},"M21-GAP-01516":{"line":4771,"offset":849386,"length":187,"previous":"M21-GAP-01515","next":"M21-GAP-01517"},"M21-GAP-01517":{"line":4772,"offset":849573,"length":187,"previous":"M21-GAP-01516","next":"M21-GAP-01518"},"M21-GAP-01518":{"line":4773,"offset":849760,"length":174,"previous":"M21-GAP-01517","next":"M21-GAP-01519"},"M21-GAP-01519":{"line":4774,"offset":849934,"length":174,"previous":"M21-GAP-01518","next":"M21-GAP-01520"},"M21-GAP-01520":{"line":4775,"offset":850108,"length":175,"previous":"M21-GAP-01519","next":"M21-GAP-01521"},"M21-GAP-01521":{"line":4776,"offset":850283,"length":175,"previous":"M21-GAP-01520","next":"M21-GAP-01522"},"M21-GAP-01522":{"line":4777,"offset":850458,"length":175,"previous":"M21-GAP-01521","next":"M21-GAP-01523"},"M21-GAP-01523":{"line":4778,"offset":850633,"length":175,"previous":"M21-GAP-01522","next":"M21-GAP-01524"},"M21-GAP-01524":{"line":4779,"offset":850808,"length":175,"previous":"M21-GAP-01523","next":"M21-GAP-01525"},"M21-GAP-01525":{"line":4780,"offset":850983,"length":175,"previous":"M21-GAP-01524","next":"M21-GAP-01526"},"M21-GAP-01526":{"line":4781,"offset":851158,"length":175,"previous":"M21-GAP-01525","next":"M21-GAP-01527"},"M21-GAP-01527":{"line":4782,"offset":851333,"length":175,"previous":"M21-GAP-01526","next":"M21-GAP-01528"},"M21-GAP-01528":{"line":4783,"offset":851508,"length":175,"previous":"M21-GAP-01527","next":"M21-GAP-01529"},"M21-GAP-01529":{"line":4784,"offset":851683,"length":175,"previous":"M21-GAP-01528","next":"M21-GAP-01530"},"M21-GAP-01530":{"line":4785,"offset":851858,"length":174,"previous":"M21-GAP-01529","next":"M21-GAP-01531"},"M21-GAP-01531":{"line":4786,"offset":852032,"length":175,"previous":"M21-GAP-01530","next":"M21-GAP-01532"},"M21-GAP-01532":{"line":4787,"offset":852207,"length":174,"previous":"M21-GAP-01531","next":"M21-GAP-01533"},"M21-GAP-01533":{"line":4788,"offset":852381,"length":174,"previous":"M21-GAP-01532","next":"M21-GAP-01534"},"M21-GAP-01534":{"line":4789,"offset":852555,"length":174,"previous":"M21-GAP-01533","next":"M21-GAP-01535"},"M21-GAP-01535":{"line":4790,"offset":852729,"length":174,"previous":"M21-GAP-01534","next":"M21-GAP-01536"},"M21-GAP-01536":{"line":4791,"offset":852903,"length":174,"previous":"M21-GAP-01535","next":"M21-GAP-01537"},"M21-GAP-01537":{"line":4792,"offset":853077,"length":174,"previous":"M21-GAP-01536","next":"M21-GAP-01538"},"M21-GAP-01538":{"line":4793,"offset":853251,"length":174,"previous":"M21-GAP-01537","next":"M21-GAP-01539"},"M21-GAP-01539":{"line":4794,"offset":853425,"length":174,"previous":"M21-GAP-01538","next":"M21-GAP-01540"},"M21-GAP-01540":{"line":4795,"offset":853599,"length":174,"previous":"M21-GAP-01539","next":"M21-GAP-01541"},"M21-GAP-01541":{"line":4796,"offset":853773,"length":175,"previous":"M21-GAP-01540","next":"M21-GAP-01542"},"M21-GAP-01542":{"line":4797,"offset":853948,"length":175,"previous":"M21-GAP-01541","next":"M21-GAP-01543"},"M21-GAP-01543":{"line":4798,"offset":854123,"length":175,"previous":"M21-GAP-01542","next":"M21-GAP-01544"},"M21-GAP-01544":{"line":4799,"offset":854298,"length":175,"previous":"M21-GAP-01543","next":"M21-GAP-01545"},"M21-GAP-01545":{"line":4800,"offset":854473,"length":175,"previous":"M21-GAP-01544","next":"M21-GAP-01546"},"M21-GAP-01546":{"line":4801,"offset":854648,"length":175,"previous":"M21-GAP-01545","next":"M21-GAP-01547"},"M21-GAP-01547":{"line":4802,"offset":854823,"length":175,"previous":"M21-GAP-01546","next":"M21-GAP-01548"},"M21-GAP-01548":{"line":4803,"offset":854998,"length":175,"previous":"M21-GAP-01547","next":"M21-GAP-01549"},"M21-GAP-01549":{"line":4804,"offset":855173,"length":175,"previous":"M21-GAP-01548","next":"M21-GAP-01550"},"M21-GAP-01550":{"line":4805,"offset":855348,"length":175,"previous":"M21-GAP-01549","next":"M21-GAP-01551"},"M21-GAP-01551":{"line":4806,"offset":855523,"length":174,"previous":"M21-GAP-01550","next":"M21-GAP-01552"},"M21-GAP-01552":{"line":4807,"offset":855697,"length":175,"previous":"M21-GAP-01551","next":"M21-GAP-01553"},"M21-GAP-01553":{"line":4808,"offset":855872,"length":175,"previous":"M21-GAP-01552","next":"M21-GAP-01554"},"M21-GAP-01554":{"line":4809,"offset":856047,"length":175,"previous":"M21-GAP-01553","next":"M21-GAP-01555"},"M21-GAP-01555":{"line":4810,"offset":856222,"length":175,"previous":"M21-GAP-01554","next":"M21-GAP-01556"},"M21-GAP-01556":{"line":4811,"offset":856397,"length":175,"previous":"M21-GAP-01555","next":"M21-GAP-01557"},"M21-GAP-01557":{"line":4812,"offset":856572,"length":174,"previous":"M21-GAP-01556","next":"M21-GAP-01558"},"M21-GAP-01558":{"line":4813,"offset":856746,"length":174,"previous":"M21-GAP-01557","next":"M21-GAP-01559"},"M21-GAP-01559":{"line":4814,"offset":856920,"length":174,"previous":"M21-GAP-01558","next":"M21-GAP-01560"},"M21-GAP-01560":{"line":4815,"offset":857094,"length":174,"previous":"M21-GAP-01559","next":"M21-GAP-01561"},"M21-GAP-01561":{"line":4816,"offset":857268,"length":174,"previous":"M21-GAP-01560","next":"M21-GAP-01562"},"M21-GAP-01562":{"line":4817,"offset":857442,"length":174,"previous":"M21-GAP-01561","next":"M21-GAP-01563"},"M21-GAP-01563":{"line":4818,"offset":857616,"length":174,"previous":"M21-GAP-01562","next":"M21-GAP-01564"},"M21-GAP-01564":{"line":4819,"offset":857790,"length":179,"previous":"M21-GAP-01563","next":"M21-GAP-01565"},"M21-GAP-01565":{"line":4820,"offset":857969,"length":179,"previous":"M21-GAP-01564","next":"M21-GAP-01566"},"M21-GAP-01566":{"line":4821,"offset":858148,"length":180,"previous":"M21-GAP-01565","next":"M21-GAP-01567"},"M21-GAP-01567":{"line":4822,"offset":858328,"length":180,"previous":"M21-GAP-01566","next":"M21-GAP-01568"},"M21-GAP-01568":{"line":4823,"offset":858508,"length":180,"previous":"M21-GAP-01567","next":"M21-GAP-01569"},"M21-GAP-01569":{"line":4824,"offset":858688,"length":180,"previous":"M21-GAP-01568","next":"M21-GAP-01570"},"M21-GAP-01570":{"line":4825,"offset":858868,"length":180,"previous":"M21-GAP-01569","next":"M21-GAP-01571"},"M21-GAP-01571":{"line":4826,"offset":859048,"length":180,"previous":"M21-GAP-01570","next":"M21-GAP-01572"},"M21-GAP-01572":{"line":4827,"offset":859228,"length":180,"previous":"M21-GAP-01571","next":"M21-GAP-01573"},"M21-GAP-01573":{"line":4828,"offset":859408,"length":180,"previous":"M21-GAP-01572","next":"M21-GAP-01574"},"M21-GAP-01574":{"line":4829,"offset":859588,"length":180,"previous":"M21-GAP-01573","next":"M21-GAP-01575"},"M21-GAP-01575":{"line":4830,"offset":859768,"length":180,"previous":"M21-GAP-01574","next":"M21-GAP-01576"},"M21-GAP-01576":{"line":4831,"offset":859948,"length":179,"previous":"M21-GAP-01575","next":"M21-GAP-01577"},"M21-GAP-01577":{"line":4832,"offset":860127,"length":180,"previous":"M21-GAP-01576","next":"M21-GAP-01578"},"M21-GAP-01578":{"line":4833,"offset":860307,"length":180,"previous":"M21-GAP-01577","next":"M21-GAP-01579"},"M21-GAP-01579":{"line":4834,"offset":860487,"length":180,"previous":"M21-GAP-01578","next":"M21-GAP-01580"},"M21-GAP-01580":{"line":4835,"offset":860667,"length":180,"previous":"M21-GAP-01579","next":"M21-GAP-01581"},"M21-GAP-01581":{"line":4836,"offset":860847,"length":180,"previous":"M21-GAP-01580","next":"M21-GAP-01582"},"M21-GAP-01582":{"line":4837,"offset":861027,"length":180,"previous":"M21-GAP-01581","next":"M21-GAP-01583"},"M21-GAP-01583":{"line":4838,"offset":861207,"length":180,"previous":"M21-GAP-01582","next":"M21-GAP-01584"},"M21-GAP-01584":{"line":4839,"offset":861387,"length":180,"previous":"M21-GAP-01583","next":"M21-GAP-01585"},"M21-GAP-01585":{"line":4840,"offset":861567,"length":180,"previous":"M21-GAP-01584","next":"M21-GAP-01586"},"M21-GAP-01586":{"line":4841,"offset":861747,"length":180,"previous":"M21-GAP-01585","next":"M21-GAP-01587"},"M21-GAP-01587":{"line":4842,"offset":861927,"length":179,"previous":"M21-GAP-01586","next":"M21-GAP-01588"},"M21-GAP-01588":{"line":4843,"offset":862106,"length":180,"previous":"M21-GAP-01587","next":"M21-GAP-01589"},"M21-GAP-01589":{"line":4844,"offset":862286,"length":180,"previous":"M21-GAP-01588","next":"M21-GAP-01590"},"M21-GAP-01590":{"line":4845,"offset":862466,"length":180,"previous":"M21-GAP-01589","next":"M21-GAP-01591"},"M21-GAP-01591":{"line":4846,"offset":862646,"length":180,"previous":"M21-GAP-01590","next":"M21-GAP-01592"},"M21-GAP-01592":{"line":4847,"offset":862826,"length":180,"previous":"M21-GAP-01591","next":"M21-GAP-01593"},"M21-GAP-01593":{"line":4848,"offset":863006,"length":180,"previous":"M21-GAP-01592","next":"M21-GAP-01594"},"M21-GAP-01594":{"line":4849,"offset":863186,"length":180,"previous":"M21-GAP-01593","next":"M21-GAP-01595"},"M21-GAP-01595":{"line":4850,"offset":863366,"length":180,"previous":"M21-GAP-01594","next":"M21-GAP-01596"},"M21-GAP-01596":{"line":4851,"offset":863546,"length":180,"previous":"M21-GAP-01595","next":"M21-GAP-01597"},"M21-GAP-01597":{"line":4852,"offset":863726,"length":180,"previous":"M21-GAP-01596","next":"M21-GAP-01598"},"M21-GAP-01598":{"line":4853,"offset":863906,"length":179,"previous":"M21-GAP-01597","next":"M21-GAP-01599"},"M21-GAP-01599":{"line":4854,"offset":864085,"length":180,"previous":"M21-GAP-01598","next":"M21-GAP-01600"},"M21-GAP-01600":{"line":4855,"offset":864265,"length":180,"previous":"M21-GAP-01599","next":"M21-GAP-01601"},"M21-GAP-01601":{"line":4856,"offset":864445,"length":180,"previous":"M21-GAP-01600","next":"M21-GAP-01602"},"M21-GAP-01602":{"line":4857,"offset":864625,"length":180,"previous":"M21-GAP-01601","next":"M21-GAP-01603"},"M21-GAP-01603":{"line":4858,"offset":864805,"length":180,"previous":"M21-GAP-01602","next":"M21-GAP-01604"},"M21-GAP-01604":{"line":4859,"offset":864985,"length":180,"previous":"M21-GAP-01603","next":"M21-GAP-01605"},"M21-GAP-01605":{"line":4860,"offset":865165,"length":180,"previous":"M21-GAP-01604","next":"M21-GAP-01606"},"M21-GAP-01606":{"line":4861,"offset":865345,"length":180,"previous":"M21-GAP-01605","next":"M21-GAP-01607"},"M21-GAP-01607":{"line":4862,"offset":865525,"length":179,"previous":"M21-GAP-01606","next":"M21-GAP-01608"},"M21-GAP-01608":{"line":4863,"offset":865704,"length":179,"previous":"M21-GAP-01607","next":"M21-GAP-01609"},"M21-GAP-01609":{"line":4864,"offset":865883,"length":179,"previous":"M21-GAP-01608","next":"M21-GAP-01610"},"M21-GAP-01610":{"line":4865,"offset":866062,"length":179,"previous":"M21-GAP-01609","next":"M21-GAP-01611"},"M21-GAP-01611":{"line":4866,"offset":866241,"length":179,"previous":"M21-GAP-01610","next":"M21-GAP-01612"},"M21-GAP-01612":{"line":4867,"offset":866420,"length":188,"previous":"M21-GAP-01611","next":"M21-GAP-01613"},"M21-GAP-01613":{"line":4868,"offset":866608,"length":188,"previous":"M21-GAP-01612","next":"M21-GAP-01614"},"M21-GAP-01614":{"line":4869,"offset":866796,"length":188,"previous":"M21-GAP-01613","next":"M21-GAP-01615"},"M21-GAP-01615":{"line":4870,"offset":866984,"length":188,"previous":"M21-GAP-01614","next":"M21-GAP-01616"},"M21-GAP-01616":{"line":4871,"offset":867172,"length":188,"previous":"M21-GAP-01615","next":"M21-GAP-01617"},"M21-GAP-01617":{"line":4872,"offset":867360,"length":188,"previous":"M21-GAP-01616","next":"M21-GAP-01618"},"M21-GAP-01618":{"line":4873,"offset":867548,"length":171,"previous":"M21-GAP-01617","next":"M21-GAP-01619"},"M21-GAP-01619":{"line":4874,"offset":867719,"length":171,"previous":"M21-GAP-01618","next":"M21-GAP-01620"},"M21-GAP-01620":{"line":4875,"offset":867890,"length":172,"previous":"M21-GAP-01619","next":"M21-GAP-01621"},"M21-GAP-01621":{"line":4876,"offset":868062,"length":172,"previous":"M21-GAP-01620","next":"M21-GAP-01622"},"M21-GAP-01622":{"line":4877,"offset":868234,"length":172,"previous":"M21-GAP-01621","next":"M21-GAP-01623"},"M21-GAP-01623":{"line":4878,"offset":868406,"length":172,"previous":"M21-GAP-01622","next":"M21-GAP-01624"},"M21-GAP-01624":{"line":4879,"offset":868578,"length":172,"previous":"M21-GAP-01623","next":"M21-GAP-01625"},"M21-GAP-01625":{"line":4880,"offset":868750,"length":172,"previous":"M21-GAP-01624","next":"M21-GAP-01626"},"M21-GAP-01626":{"line":4881,"offset":868922,"length":172,"previous":"M21-GAP-01625","next":"M21-GAP-01627"},"M21-GAP-01627":{"line":4882,"offset":869094,"length":172,"previous":"M21-GAP-01626","next":"M21-GAP-01628"},"M21-GAP-01628":{"line":4883,"offset":869266,"length":172,"previous":"M21-GAP-01627","next":"M21-GAP-01629"},"M21-GAP-01629":{"line":4884,"offset":869438,"length":172,"previous":"M21-GAP-01628","next":"M21-GAP-01630"},"M21-GAP-01630":{"line":4885,"offset":869610,"length":171,"previous":"M21-GAP-01629","next":"M21-GAP-01631"},"M21-GAP-01631":{"line":4886,"offset":869781,"length":172,"previous":"M21-GAP-01630","next":"M21-GAP-01632"},"M21-GAP-01632":{"line":4887,"offset":869953,"length":172,"previous":"M21-GAP-01631","next":"M21-GAP-01633"},"M21-GAP-01633":{"line":4888,"offset":870125,"length":172,"previous":"M21-GAP-01632","next":"M21-GAP-01634"},"M21-GAP-01634":{"line":4889,"offset":870297,"length":172,"previous":"M21-GAP-01633","next":"M21-GAP-01635"},"M21-GAP-01635":{"line":4890,"offset":870469,"length":172,"previous":"M21-GAP-01634","next":"M21-GAP-01636"},"M21-GAP-01636":{"line":4891,"offset":870641,"length":172,"previous":"M21-GAP-01635","next":"M21-GAP-01637"},"M21-GAP-01637":{"line":4892,"offset":870813,"length":172,"previous":"M21-GAP-01636","next":"M21-GAP-01638"},"M21-GAP-01638":{"line":4893,"offset":870985,"length":172,"previous":"M21-GAP-01637","next":"M21-GAP-01639"},"M21-GAP-01639":{"line":4894,"offset":871157,"length":172,"previous":"M21-GAP-01638","next":"M21-GAP-01640"},"M21-GAP-01640":{"line":4895,"offset":871329,"length":172,"previous":"M21-GAP-01639","next":"M21-GAP-01641"},"M21-GAP-01641":{"line":4896,"offset":871501,"length":171,"previous":"M21-GAP-01640","next":"M21-GAP-01642"},"M21-GAP-01642":{"line":4897,"offset":871672,"length":172,"previous":"M21-GAP-01641","next":"M21-GAP-01643"},"M21-GAP-01643":{"line":4898,"offset":871844,"length":172,"previous":"M21-GAP-01642","next":"M21-GAP-01644"},"M21-GAP-01644":{"line":4899,"offset":872016,"length":172,"previous":"M21-GAP-01643","next":"M21-GAP-01645"},"M21-GAP-01645":{"line":4900,"offset":872188,"length":172,"previous":"M21-GAP-01644","next":"M21-GAP-01646"},"M21-GAP-01646":{"line":4901,"offset":872360,"length":172,"previous":"M21-GAP-01645","next":"M21-GAP-01647"},"M21-GAP-01647":{"line":4902,"offset":872532,"length":172,"previous":"M21-GAP-01646","next":"M21-GAP-01648"},"M21-GAP-01648":{"line":4903,"offset":872704,"length":172,"previous":"M21-GAP-01647","next":"M21-GAP-01649"},"M21-GAP-01649":{"line":4904,"offset":872876,"length":172,"previous":"M21-GAP-01648","next":"M21-GAP-01650"},"M21-GAP-01650":{"line":4905,"offset":873048,"length":172,"previous":"M21-GAP-01649","next":"M21-GAP-01651"},"M21-GAP-01651":{"line":4906,"offset":873220,"length":172,"previous":"M21-GAP-01650","next":"M21-GAP-01652"},"M21-GAP-01652":{"line":4907,"offset":873392,"length":171,"previous":"M21-GAP-01651","next":"M21-GAP-01653"},"M21-GAP-01653":{"line":4908,"offset":873563,"length":172,"previous":"M21-GAP-01652","next":"M21-GAP-01654"},"M21-GAP-01654":{"line":4909,"offset":873735,"length":172,"previous":"M21-GAP-01653","next":"M21-GAP-01655"},"M21-GAP-01655":{"line":4910,"offset":873907,"length":172,"previous":"M21-GAP-01654","next":"M21-GAP-01656"},"M21-GAP-01656":{"line":4911,"offset":874079,"length":172,"previous":"M21-GAP-01655","next":"M21-GAP-01657"},"M21-GAP-01657":{"line":4912,"offset":874251,"length":172,"previous":"M21-GAP-01656","next":"M21-GAP-01658"},"M21-GAP-01658":{"line":4913,"offset":874423,"length":172,"previous":"M21-GAP-01657","next":"M21-GAP-01659"},"M21-GAP-01659":{"line":4914,"offset":874595,"length":172,"previous":"M21-GAP-01658","next":"M21-GAP-01660"},"M21-GAP-01660":{"line":4915,"offset":874767,"length":172,"previous":"M21-GAP-01659","next":"M21-GAP-01661"},"M21-GAP-01661":{"line":4916,"offset":874939,"length":172,"previous":"M21-GAP-01660","next":"M21-GAP-01662"},"M21-GAP-01662":{"line":4917,"offset":875111,"length":172,"previous":"M21-GAP-01661","next":"M21-GAP-01663"},"M21-GAP-01663":{"line":4918,"offset":875283,"length":171,"previous":"M21-GAP-01662","next":"M21-GAP-01664"},"M21-GAP-01664":{"line":4919,"offset":875454,"length":172,"previous":"M21-GAP-01663","next":"M21-GAP-01665"},"M21-GAP-01665":{"line":4920,"offset":875626,"length":172,"previous":"M21-GAP-01664","next":"M21-GAP-01666"},"M21-GAP-01666":{"line":4921,"offset":875798,"length":172,"previous":"M21-GAP-01665","next":"M21-GAP-01667"},"M21-GAP-01667":{"line":4922,"offset":875970,"length":172,"previous":"M21-GAP-01666","next":"M21-GAP-01668"},"M21-GAP-01668":{"line":4923,"offset":876142,"length":172,"previous":"M21-GAP-01667","next":"M21-GAP-01669"},"M21-GAP-01669":{"line":4924,"offset":876314,"length":172,"previous":"M21-GAP-01668","next":"M21-GAP-01670"},"M21-GAP-01670":{"line":4925,"offset":876486,"length":172,"previous":"M21-GAP-01669","next":"M21-GAP-01671"},"M21-GAP-01671":{"line":4926,"offset":876658,"length":172,"previous":"M21-GAP-01670","next":"M21-GAP-01672"},"M21-GAP-01672":{"line":4927,"offset":876830,"length":172,"previous":"M21-GAP-01671","next":"M21-GAP-01673"},"M21-GAP-01673":{"line":4928,"offset":877002,"length":172,"previous":"M21-GAP-01672","next":"M21-GAP-01674"},"M21-GAP-01674":{"line":4929,"offset":877174,"length":171,"previous":"M21-GAP-01673","next":"M21-GAP-01675"},"M21-GAP-01675":{"line":4930,"offset":877345,"length":172,"previous":"M21-GAP-01674","next":"M21-GAP-01676"},"M21-GAP-01676":{"line":4931,"offset":877517,"length":172,"previous":"M21-GAP-01675","next":"M21-GAP-01677"},"M21-GAP-01677":{"line":4932,"offset":877689,"length":172,"previous":"M21-GAP-01676","next":"M21-GAP-01678"},"M21-GAP-01678":{"line":4933,"offset":877861,"length":172,"previous":"M21-GAP-01677","next":"M21-GAP-01679"},"M21-GAP-01679":{"line":4934,"offset":878033,"length":172,"previous":"M21-GAP-01678","next":"M21-GAP-01680"},"M21-GAP-01680":{"line":4935,"offset":878205,"length":172,"previous":"M21-GAP-01679","next":"M21-GAP-01681"},"M21-GAP-01681":{"line":4936,"offset":878377,"length":172,"previous":"M21-GAP-01680","next":"M21-GAP-01682"},"M21-GAP-01682":{"line":4937,"offset":878549,"length":172,"previous":"M21-GAP-01681","next":"M21-GAP-01683"},"M21-GAP-01683":{"line":4938,"offset":878721,"length":172,"previous":"M21-GAP-01682","next":"M21-GAP-01684"},"M21-GAP-01684":{"line":4939,"offset":878893,"length":172,"previous":"M21-GAP-01683","next":"M21-GAP-01685"},"M21-GAP-01685":{"line":4940,"offset":879065,"length":171,"previous":"M21-GAP-01684","next":"M21-GAP-01686"},"M21-GAP-01686":{"line":4941,"offset":879236,"length":172,"previous":"M21-GAP-01685","next":"M21-GAP-01687"},"M21-GAP-01687":{"line":4942,"offset":879408,"length":172,"previous":"M21-GAP-01686","next":"M21-GAP-01688"},"M21-GAP-01688":{"line":4943,"offset":879580,"length":172,"previous":"M21-GAP-01687","next":"M21-GAP-01689"},"M21-GAP-01689":{"line":4944,"offset":879752,"length":172,"previous":"M21-GAP-01688","next":"M21-GAP-01690"},"M21-GAP-01690":{"line":4945,"offset":879924,"length":172,"previous":"M21-GAP-01689","next":"M21-GAP-01691"},"M21-GAP-01691":{"line":4946,"offset":880096,"length":172,"previous":"M21-GAP-01690","next":"M21-GAP-01692"},"M21-GAP-01692":{"line":4947,"offset":880268,"length":172,"previous":"M21-GAP-01691","next":"M21-GAP-01693"},"M21-GAP-01693":{"line":4948,"offset":880440,"length":172,"previous":"M21-GAP-01692","next":"M21-GAP-01694"},"M21-GAP-01694":{"line":4949,"offset":880612,"length":172,"previous":"M21-GAP-01693","next":"M21-GAP-01695"},"M21-GAP-01695":{"line":4950,"offset":880784,"length":172,"previous":"M21-GAP-01694","next":"M21-GAP-01696"},"M21-GAP-01696":{"line":4951,"offset":880956,"length":171,"previous":"M21-GAP-01695","next":"M21-GAP-01697"},"M21-GAP-01697":{"line":4952,"offset":881127,"length":172,"previous":"M21-GAP-01696","next":"M21-GAP-01698"},"M21-GAP-01698":{"line":4953,"offset":881299,"length":172,"previous":"M21-GAP-01697","next":"M21-GAP-01699"},"M21-GAP-01699":{"line":4954,"offset":881471,"length":172,"previous":"M21-GAP-01698","next":"M21-GAP-01700"},"M21-GAP-01700":{"line":4955,"offset":881643,"length":172,"previous":"M21-GAP-01699","next":"M21-GAP-01701"},"M21-GAP-01701":{"line":4956,"offset":881815,"length":172,"previous":"M21-GAP-01700","next":"M21-GAP-01702"},"M21-GAP-01702":{"line":4957,"offset":881987,"length":172,"previous":"M21-GAP-01701","next":"M21-GAP-01703"},"M21-GAP-01703":{"line":4958,"offset":882159,"length":172,"previous":"M21-GAP-01702","next":"M21-GAP-01704"},"M21-GAP-01704":{"line":4959,"offset":882331,"length":172,"previous":"M21-GAP-01703","next":"M21-GAP-01705"},"M21-GAP-01705":{"line":4960,"offset":882503,"length":172,"previous":"M21-GAP-01704","next":"M21-GAP-01706"},"M21-GAP-01706":{"line":4961,"offset":882675,"length":172,"previous":"M21-GAP-01705","next":"M21-GAP-01707"},"M21-GAP-01707":{"line":4962,"offset":882847,"length":171,"previous":"M21-GAP-01706","next":"M21-GAP-01708"},"M21-GAP-01708":{"line":4963,"offset":883018,"length":172,"previous":"M21-GAP-01707","next":"M21-GAP-01709"},"M21-GAP-01709":{"line":4964,"offset":883190,"length":172,"previous":"M21-GAP-01708","next":"M21-GAP-01710"},"M21-GAP-01710":{"line":4965,"offset":883362,"length":172,"previous":"M21-GAP-01709","next":"M21-GAP-01711"},"M21-GAP-01711":{"line":4966,"offset":883534,"length":175,"previous":"M21-GAP-01710","next":"M21-GAP-01712"},"M21-GAP-01712":{"line":4967,"offset":883709,"length":175,"previous":"M21-GAP-01711","next":"M21-GAP-01713"},"M21-GAP-01713":{"line":4968,"offset":883884,"length":176,"previous":"M21-GAP-01712","next":"M21-GAP-01714"},"M21-GAP-01714":{"line":4969,"offset":884060,"length":176,"previous":"M21-GAP-01713","next":"M21-GAP-01715"},"M21-GAP-01715":{"line":4970,"offset":884236,"length":176,"previous":"M21-GAP-01714","next":"M21-GAP-01716"},"M21-GAP-01716":{"line":4971,"offset":884412,"length":176,"previous":"M21-GAP-01715","next":"M21-GAP-01717"},"M21-GAP-01717":{"line":4972,"offset":884588,"length":176,"previous":"M21-GAP-01716","next":"M21-GAP-01718"},"M21-GAP-01718":{"line":4973,"offset":884764,"length":176,"previous":"M21-GAP-01717","next":"M21-GAP-01719"},"M21-GAP-01719":{"line":4974,"offset":884940,"length":176,"previous":"M21-GAP-01718","next":"M21-GAP-01720"},"M21-GAP-01720":{"line":4975,"offset":885116,"length":176,"previous":"M21-GAP-01719","next":"M21-GAP-01721"},"M21-GAP-01721":{"line":4976,"offset":885292,"length":176,"previous":"M21-GAP-01720","next":"M21-GAP-01722"},"M21-GAP-01722":{"line":4977,"offset":885468,"length":176,"previous":"M21-GAP-01721","next":"M21-GAP-01723"},"M21-GAP-01723":{"line":4978,"offset":885644,"length":175,"previous":"M21-GAP-01722","next":"M21-GAP-01724"},"M21-GAP-01724":{"line":4979,"offset":885819,"length":176,"previous":"M21-GAP-01723","next":"M21-GAP-01725"},"M21-GAP-01725":{"line":4980,"offset":885995,"length":176,"previous":"M21-GAP-01724","next":"M21-GAP-01726"},"M21-GAP-01726":{"line":4981,"offset":886171,"length":175,"previous":"M21-GAP-01725","next":"M21-GAP-01727"},"M21-GAP-01727":{"line":4982,"offset":886346,"length":175,"previous":"M21-GAP-01726","next":"M21-GAP-01728"},"M21-GAP-01728":{"line":4983,"offset":886521,"length":175,"previous":"M21-GAP-01727","next":"M21-GAP-01729"},"M21-GAP-01729":{"line":4984,"offset":886696,"length":175,"previous":"M21-GAP-01728","next":"M21-GAP-01730"},"M21-GAP-01730":{"line":4985,"offset":886871,"length":175,"previous":"M21-GAP-01729","next":"M21-GAP-01731"},"M21-GAP-01731":{"line":4986,"offset":887046,"length":175,"previous":"M21-GAP-01730","next":"M21-GAP-01732"},"M21-GAP-01732":{"line":4987,"offset":887221,"length":175,"previous":"M21-GAP-01731","next":"M21-GAP-01733"},"M21-GAP-01733":{"line":4988,"offset":887396,"length":182,"previous":"M21-GAP-01732","next":"M21-GAP-01734"},"M21-GAP-01734":{"line":4989,"offset":887578,"length":182,"previous":"M21-GAP-01733","next":"M21-GAP-01735"},"M21-GAP-01735":{"line":4990,"offset":887760,"length":183,"previous":"M21-GAP-01734","next":"M21-GAP-01736"},"M21-GAP-01736":{"line":4991,"offset":887943,"length":183,"previous":"M21-GAP-01735","next":"M21-GAP-01737"},"M21-GAP-01737":{"line":4992,"offset":888126,"length":183,"previous":"M21-GAP-01736","next":"M21-GAP-01738"},"M21-GAP-01738":{"line":4993,"offset":888309,"length":183,"previous":"M21-GAP-01737","next":"M21-GAP-01739"},"M21-GAP-01739":{"line":4994,"offset":888492,"length":183,"previous":"M21-GAP-01738","next":"M21-GAP-01740"},"M21-GAP-01740":{"line":4995,"offset":888675,"length":183,"previous":"M21-GAP-01739","next":"M21-GAP-01741"},"M21-GAP-01741":{"line":4996,"offset":888858,"length":183,"previous":"M21-GAP-01740","next":"M21-GAP-01742"},"M21-GAP-01742":{"line":4997,"offset":889041,"length":183,"previous":"M21-GAP-01741","next":"M21-GAP-01743"},"M21-GAP-01743":{"line":4998,"offset":889224,"length":183,"previous":"M21-GAP-01742","next":"M21-GAP-01744"},"M21-GAP-01744":{"line":4999,"offset":889407,"length":183,"previous":"M21-GAP-01743","next":"M21-GAP-01745"},"M21-GAP-01745":{"line":5000,"offset":889590,"length":182,"previous":"M21-GAP-01744","next":"M21-GAP-01746"},"M21-GAP-01746":{"line":5001,"offset":889772,"length":183,"previous":"M21-GAP-01745","next":"M21-GAP-01747"},"M21-GAP-01747":{"line":5002,"offset":889955,"length":183,"previous":"M21-GAP-01746","next":"M21-GAP-01748"},"M21-GAP-01748":{"line":5003,"offset":890138,"length":183,"previous":"M21-GAP-01747","next":"M21-GAP-01749"},"M21-GAP-01749":{"line":5004,"offset":890321,"length":183,"previous":"M21-GAP-01748","next":"M21-GAP-01750"},"M21-GAP-01750":{"line":5005,"offset":890504,"length":183,"previous":"M21-GAP-01749","next":"M21-GAP-01751"},"M21-GAP-01751":{"line":5006,"offset":890687,"length":183,"previous":"M21-GAP-01750","next":"M21-GAP-01752"},"M21-GAP-01752":{"line":5007,"offset":890870,"length":183,"previous":"M21-GAP-01751","next":"M21-GAP-01753"},"M21-GAP-01753":{"line":5008,"offset":891053,"length":183,"previous":"M21-GAP-01752","next":"M21-GAP-01754"},"M21-GAP-01754":{"line":5009,"offset":891236,"length":183,"previous":"M21-GAP-01753","next":"M21-GAP-01755"},"M21-GAP-01755":{"line":5010,"offset":891419,"length":183,"previous":"M21-GAP-01754","next":"M21-GAP-01756"},"M21-GAP-01756":{"line":5011,"offset":891602,"length":182,"previous":"M21-GAP-01755","next":"M21-GAP-01757"},"M21-GAP-01757":{"line":5012,"offset":891784,"length":183,"previous":"M21-GAP-01756","next":"M21-GAP-01758"},"M21-GAP-01758":{"line":5013,"offset":891967,"length":183,"previous":"M21-GAP-01757","next":"M21-GAP-01759"},"M21-GAP-01759":{"line":5014,"offset":892150,"length":183,"previous":"M21-GAP-01758","next":"M21-GAP-01760"},"M21-GAP-01760":{"line":5015,"offset":892333,"length":183,"previous":"M21-GAP-01759","next":"M21-GAP-01761"},"M21-GAP-01761":{"line":5016,"offset":892516,"length":183,"previous":"M21-GAP-01760","next":"M21-GAP-01762"},"M21-GAP-01762":{"line":5017,"offset":892699,"length":183,"previous":"M21-GAP-01761","next":"M21-GAP-01763"},"M21-GAP-01763":{"line":5018,"offset":892882,"length":183,"previous":"M21-GAP-01762","next":"M21-GAP-01764"},"M21-GAP-01764":{"line":5019,"offset":893065,"length":183,"previous":"M21-GAP-01763","next":"M21-GAP-01765"},"M21-GAP-01765":{"line":5020,"offset":893248,"length":183,"previous":"M21-GAP-01764","next":"M21-GAP-01766"},"M21-GAP-01766":{"line":5021,"offset":893431,"length":183,"previous":"M21-GAP-01765","next":"M21-GAP-01767"},"M21-GAP-01767":{"line":5022,"offset":893614,"length":182,"previous":"M21-GAP-01766","next":"M21-GAP-01768"},"M21-GAP-01768":{"line":5023,"offset":893796,"length":183,"previous":"M21-GAP-01767","next":"M21-GAP-01769"},"M21-GAP-01769":{"line":5024,"offset":893979,"length":183,"previous":"M21-GAP-01768","next":"M21-GAP-01770"},"M21-GAP-01770":{"line":5025,"offset":894162,"length":183,"previous":"M21-GAP-01769","next":"M21-GAP-01771"},"M21-GAP-01771":{"line":5026,"offset":894345,"length":183,"previous":"M21-GAP-01770","next":"M21-GAP-01772"},"M21-GAP-01772":{"line":5027,"offset":894528,"length":183,"previous":"M21-GAP-01771","next":"M21-GAP-01773"},"M21-GAP-01773":{"line":5028,"offset":894711,"length":183,"previous":"M21-GAP-01772","next":"M21-GAP-01774"},"M21-GAP-01774":{"line":5029,"offset":894894,"length":183,"previous":"M21-GAP-01773","next":"M21-GAP-01775"},"M21-GAP-01775":{"line":5030,"offset":895077,"length":183,"previous":"M21-GAP-01774","next":"M21-GAP-01776"},"M21-GAP-01776":{"line":5031,"offset":895260,"length":183,"previous":"M21-GAP-01775","next":"M21-GAP-01777"},"M21-GAP-01777":{"line":5032,"offset":895443,"length":182,"previous":"M21-GAP-01776","next":"M21-GAP-01778"},"M21-GAP-01778":{"line":5033,"offset":895625,"length":182,"previous":"M21-GAP-01777","next":"M21-GAP-01779"},"M21-GAP-01779":{"line":5034,"offset":895807,"length":182,"previous":"M21-GAP-01778","next":"M21-GAP-01780"},"M21-GAP-01780":{"line":5035,"offset":895989,"length":182,"previous":"M21-GAP-01779","next":"M21-GAP-01781"},"M21-GAP-01781":{"line":5036,"offset":896171,"length":182,"previous":"M21-GAP-01780","next":"M21-GAP-01782"},"M21-GAP-01782":{"line":5037,"offset":896353,"length":183,"previous":"M21-GAP-01781","next":"M21-GAP-01783"},"M21-GAP-01783":{"line":5038,"offset":896536,"length":183,"previous":"M21-GAP-01782","next":"M21-GAP-01784"},"M21-GAP-01784":{"line":5039,"offset":896719,"length":183,"previous":"M21-GAP-01783","next":"M21-GAP-01785"},"M21-GAP-01785":{"line":5040,"offset":896902,"length":183,"previous":"M21-GAP-01784","next":"M21-GAP-01786"},"M21-GAP-01786":{"line":5041,"offset":897085,"length":183,"previous":"M21-GAP-01785","next":"M21-GAP-01787"},"M21-GAP-01787":{"line":5042,"offset":897268,"length":183,"previous":"M21-GAP-01786","next":"M21-GAP-01788"},"M21-GAP-01788":{"line":5043,"offset":897451,"length":182,"previous":"M21-GAP-01787","next":"M21-GAP-01789"},"M21-GAP-01789":{"line":5044,"offset":897633,"length":182,"previous":"M21-GAP-01788","next":"M21-GAP-01790"},"M21-GAP-01790":{"line":5045,"offset":897815,"length":182,"previous":"M21-GAP-01789","next":"M21-GAP-01791"},"M21-GAP-01791":{"line":5046,"offset":897997,"length":182,"previous":"M21-GAP-01790","next":"M21-GAP-01792"},"M21-GAP-01792":{"line":5047,"offset":898179,"length":182,"previous":"M21-GAP-01791","next":"M21-GAP-01793"},"M21-GAP-01793":{"line":5048,"offset":898361,"length":182,"previous":"M21-GAP-01792","next":"M21-GAP-01794"},"M21-GAP-01794":{"line":5049,"offset":898543,"length":182,"previous":"M21-GAP-01793","next":"M21-GAP-01795"},"M21-GAP-01795":{"line":5050,"offset":898725,"length":182,"previous":"M21-GAP-01794","next":"M21-GAP-01796"},"M21-GAP-01796":{"line":5051,"offset":898907,"length":184,"previous":"M21-GAP-01795","next":"M21-GAP-01797"},"M21-GAP-01797":{"line":5052,"offset":899091,"length":184,"previous":"M21-GAP-01796","next":"M21-GAP-01798"},"M21-GAP-01798":{"line":5053,"offset":899275,"length":185,"previous":"M21-GAP-01797","next":"M21-GAP-01799"},"M21-GAP-01799":{"line":5054,"offset":899460,"length":186,"previous":"M21-GAP-01798","next":"M21-GAP-01800"},"M21-GAP-01800":{"line":5055,"offset":899646,"length":186,"previous":"M21-GAP-01799","next":"M21-GAP-01801"},"M21-GAP-01801":{"line":5056,"offset":899832,"length":186,"previous":"M21-GAP-01800","next":"M21-GAP-01802"},"M21-GAP-01802":{"line":5057,"offset":900018,"length":186,"previous":"M21-GAP-01801","next":"M21-GAP-01803"},"M21-GAP-01803":{"line":5058,"offset":900204,"length":185,"previous":"M21-GAP-01802","next":"M21-GAP-01804"},"M21-GAP-01804":{"line":5059,"offset":900389,"length":185,"previous":"M21-GAP-01803","next":"M21-GAP-01805"},"M21-GAP-01805":{"line":5060,"offset":900574,"length":185,"previous":"M21-GAP-01804","next":"M21-GAP-01806"},"M21-GAP-01806":{"line":5061,"offset":900759,"length":185,"previous":"M21-GAP-01805","next":"M21-GAP-01807"},"M21-GAP-01807":{"line":5062,"offset":900944,"length":185,"previous":"M21-GAP-01806","next":"M21-GAP-01808"},"M21-GAP-01808":{"line":5063,"offset":901129,"length":185,"previous":"M21-GAP-01807","next":"M21-GAP-01809"},"M21-GAP-01809":{"line":5064,"offset":901314,"length":185,"previous":"M21-GAP-01808","next":"M21-GAP-01810"},"M21-GAP-01810":{"line":5065,"offset":901499,"length":185,"previous":"M21-GAP-01809","next":"M21-GAP-01811"},"M21-GAP-01811":{"line":5066,"offset":901684,"length":185,"previous":"M21-GAP-01810","next":"M21-GAP-01812"},"M21-GAP-01812":{"line":5067,"offset":901869,"length":184,"previous":"M21-GAP-01811","next":"M21-GAP-01813"},"M21-GAP-01813":{"line":5068,"offset":902053,"length":185,"previous":"M21-GAP-01812","next":"M21-GAP-01814"},"M21-GAP-01814":{"line":5069,"offset":902238,"length":185,"previous":"M21-GAP-01813","next":"M21-GAP-01815"},"M21-GAP-01815":{"line":5070,"offset":902423,"length":185,"previous":"M21-GAP-01814","next":"M21-GAP-01816"},"M21-GAP-01816":{"line":5071,"offset":902608,"length":185,"previous":"M21-GAP-01815","next":"M21-GAP-01817"},"M21-GAP-01817":{"line":5072,"offset":902793,"length":185,"previous":"M21-GAP-01816","next":"M21-GAP-01818"},"M21-GAP-01818":{"line":5073,"offset":902978,"length":185,"previous":"M21-GAP-01817","next":"M21-GAP-01819"},"M21-GAP-01819":{"line":5074,"offset":903163,"length":185,"previous":"M21-GAP-01818","next":"M21-GAP-01820"},"M21-GAP-01820":{"line":5075,"offset":903348,"length":185,"previous":"M21-GAP-01819","next":"M21-GAP-01821"},"M21-GAP-01821":{"line":5076,"offset":903533,"length":185,"previous":"M21-GAP-01820","next":"M21-GAP-01822"},"M21-GAP-01822":{"line":5077,"offset":903718,"length":185,"previous":"M21-GAP-01821","next":"M21-GAP-01823"},"M21-GAP-01823":{"line":5078,"offset":903903,"length":184,"previous":"M21-GAP-01822","next":"M21-GAP-01824"},"M21-GAP-01824":{"line":5079,"offset":904087,"length":185,"previous":"M21-GAP-01823","next":"M21-GAP-01825"},"M21-GAP-01825":{"line":5080,"offset":904272,"length":185,"previous":"M21-GAP-01824","next":"M21-GAP-01826"},"M21-GAP-01826":{"line":5081,"offset":904457,"length":185,"previous":"M21-GAP-01825","next":"M21-GAP-01827"},"M21-GAP-01827":{"line":5082,"offset":904642,"length":185,"previous":"M21-GAP-01826","next":"M21-GAP-01828"},"M21-GAP-01828":{"line":5083,"offset":904827,"length":185,"previous":"M21-GAP-01827","next":"M21-GAP-01829"},"M21-GAP-01829":{"line":5084,"offset":905012,"length":185,"previous":"M21-GAP-01828","next":"M21-GAP-01830"},"M21-GAP-01830":{"line":5085,"offset":905197,"length":185,"previous":"M21-GAP-01829","next":"M21-GAP-01831"},"M21-GAP-01831":{"line":5086,"offset":905382,"length":185,"previous":"M21-GAP-01830","next":"M21-GAP-01832"},"M21-GAP-01832":{"line":5087,"offset":905567,"length":185,"previous":"M21-GAP-01831","next":"M21-GAP-01833"},"M21-GAP-01833":{"line":5088,"offset":905752,"length":185,"previous":"M21-GAP-01832","next":"M21-GAP-01834"},"M21-GAP-01834":{"line":5089,"offset":905937,"length":184,"previous":"M21-GAP-01833","next":"M21-GAP-01835"},"M21-GAP-01835":{"line":5090,"offset":906121,"length":185,"previous":"M21-GAP-01834","next":"M21-GAP-01836"},"M21-GAP-01836":{"line":5091,"offset":906306,"length":185,"previous":"M21-GAP-01835","next":"M21-GAP-01837"},"M21-GAP-01837":{"line":5092,"offset":906491,"length":185,"previous":"M21-GAP-01836","next":"M21-GAP-01838"},"M21-GAP-01838":{"line":5093,"offset":906676,"length":185,"previous":"M21-GAP-01837","next":"M21-GAP-01839"},"M21-GAP-01839":{"line":5094,"offset":906861,"length":185,"previous":"M21-GAP-01838","next":"M21-GAP-01840"},"M21-GAP-01840":{"line":5095,"offset":907046,"length":185,"previous":"M21-GAP-01839","next":"M21-GAP-01841"},"M21-GAP-01841":{"line":5096,"offset":907231,"length":185,"previous":"M21-GAP-01840","next":"M21-GAP-01842"},"M21-GAP-01842":{"line":5097,"offset":907416,"length":185,"previous":"M21-GAP-01841","next":"M21-GAP-01843"},"M21-GAP-01843":{"line":5098,"offset":907601,"length":185,"previous":"M21-GAP-01842","next":"M21-GAP-01844"},"M21-GAP-01844":{"line":5099,"offset":907786,"length":185,"previous":"M21-GAP-01843","next":"M21-GAP-01845"},"M21-GAP-01845":{"line":5100,"offset":907971,"length":184,"previous":"M21-GAP-01844","next":"M21-GAP-01846"},"M21-GAP-01846":{"line":5101,"offset":908155,"length":185,"previous":"M21-GAP-01845","next":"M21-GAP-01847"},"M21-GAP-01847":{"line":5102,"offset":908340,"length":185,"previous":"M21-GAP-01846","next":"M21-GAP-01848"},"M21-GAP-01848":{"line":5103,"offset":908525,"length":185,"previous":"M21-GAP-01847","next":"M21-GAP-01849"},"M21-GAP-01849":{"line":5104,"offset":908710,"length":185,"previous":"M21-GAP-01848","next":"M21-GAP-01850"},"M21-GAP-01850":{"line":5105,"offset":908895,"length":185,"previous":"M21-GAP-01849","next":"M21-GAP-01851"},"M21-GAP-01851":{"line":5106,"offset":909080,"length":185,"previous":"M21-GAP-01850","next":"M21-GAP-01852"},"M21-GAP-01852":{"line":5107,"offset":909265,"length":185,"previous":"M21-GAP-01851","next":"M21-GAP-01853"},"M21-GAP-01853":{"line":5108,"offset":909450,"length":185,"previous":"M21-GAP-01852","next":"M21-GAP-01854"},"M21-GAP-01854":{"line":5109,"offset":909635,"length":185,"previous":"M21-GAP-01853","next":"M21-GAP-01855"},"M21-GAP-01855":{"line":5110,"offset":909820,"length":185,"previous":"M21-GAP-01854","next":"M21-GAP-01856"},"M21-GAP-01856":{"line":5111,"offset":910005,"length":184,"previous":"M21-GAP-01855","next":"M21-GAP-01857"},"M21-GAP-01857":{"line":5112,"offset":910189,"length":185,"previous":"M21-GAP-01856","next":"M21-GAP-01858"},"M21-GAP-01858":{"line":5113,"offset":910374,"length":185,"previous":"M21-GAP-01857","next":"M21-GAP-01859"},"M21-GAP-01859":{"line":5114,"offset":910559,"length":185,"previous":"M21-GAP-01858","next":"M21-GAP-01860"},"M21-GAP-01860":{"line":5115,"offset":910744,"length":185,"previous":"M21-GAP-01859","next":"M21-GAP-01861"},"M21-GAP-01861":{"line":5116,"offset":910929,"length":185,"previous":"M21-GAP-01860","next":"M21-GAP-01862"},"M21-GAP-01862":{"line":5117,"offset":911114,"length":185,"previous":"M21-GAP-01861","next":"M21-GAP-01863"},"M21-GAP-01863":{"line":5118,"offset":911299,"length":185,"previous":"M21-GAP-01862","next":"M21-GAP-01864"},"M21-GAP-01864":{"line":5119,"offset":911484,"length":185,"previous":"M21-GAP-01863","next":"M21-GAP-01865"},"M21-GAP-01865":{"line":5120,"offset":911669,"length":185,"previous":"M21-GAP-01864","next":"M21-GAP-01866"},"M21-GAP-01866":{"line":5121,"offset":911854,"length":185,"previous":"M21-GAP-01865","next":"M21-GAP-01867"},"M21-GAP-01867":{"line":5122,"offset":912039,"length":184,"previous":"M21-GAP-01866","next":"M21-GAP-01868"},"M21-GAP-01868":{"line":5123,"offset":912223,"length":185,"previous":"M21-GAP-01867","next":"M21-GAP-01869"},"M21-GAP-01869":{"line":5124,"offset":912408,"length":185,"previous":"M21-GAP-01868","next":"M21-GAP-01870"},"M21-GAP-01870":{"line":5125,"offset":912593,"length":185,"previous":"M21-GAP-01869","next":"M21-GAP-01871"},"M21-GAP-01871":{"line":5126,"offset":912778,"length":185,"previous":"M21-GAP-01870","next":"M21-GAP-01872"},"M21-GAP-01872":{"line":5127,"offset":912963,"length":185,"previous":"M21-GAP-01871","next":"M21-GAP-01873"},"M21-GAP-01873":{"line":5128,"offset":913148,"length":185,"previous":"M21-GAP-01872","next":"M21-GAP-01874"},"M21-GAP-01874":{"line":5129,"offset":913333,"length":185,"previous":"M21-GAP-01873","next":"M21-GAP-01875"},"M21-GAP-01875":{"line":5130,"offset":913518,"length":185,"previous":"M21-GAP-01874","next":"M21-GAP-01876"},"M21-GAP-01876":{"line":5131,"offset":913703,"length":185,"previous":"M21-GAP-01875","next":"M21-GAP-01877"},"M21-GAP-01877":{"line":5132,"offset":913888,"length":185,"previous":"M21-GAP-01876","next":"M21-GAP-01878"},"M21-GAP-01878":{"line":5133,"offset":914073,"length":184,"previous":"M21-GAP-01877","next":"M21-GAP-01879"},"M21-GAP-01879":{"line":5134,"offset":914257,"length":185,"previous":"M21-GAP-01878","next":"M21-GAP-01880"},"M21-GAP-01880":{"line":5135,"offset":914442,"length":185,"previous":"M21-GAP-01879","next":"M21-GAP-01881"},"M21-GAP-01881":{"line":5136,"offset":914627,"length":185,"previous":"M21-GAP-01880","next":"M21-GAP-01882"},"M21-GAP-01882":{"line":5137,"offset":914812,"length":185,"previous":"M21-GAP-01881","next":"M21-GAP-01883"},"M21-GAP-01883":{"line":5138,"offset":914997,"length":185,"previous":"M21-GAP-01882","next":"M21-GAP-01884"},"M21-GAP-01884":{"line":5139,"offset":915182,"length":185,"previous":"M21-GAP-01883","next":"M21-GAP-01885"},"M21-GAP-01885":{"line":5140,"offset":915367,"length":185,"previous":"M21-GAP-01884","next":"M21-GAP-01886"},"M21-GAP-01886":{"line":5141,"offset":915552,"length":185,"previous":"M21-GAP-01885","next":"M21-GAP-01887"},"M21-GAP-01887":{"line":5142,"offset":915737,"length":185,"previous":"M21-GAP-01886","next":"M21-GAP-01888"},"M21-GAP-01888":{"line":5143,"offset":915922,"length":185,"previous":"M21-GAP-01887","next":"M21-GAP-01889"},"M21-GAP-01889":{"line":5144,"offset":916107,"length":184,"previous":"M21-GAP-01888","next":"M21-GAP-01890"},"M21-GAP-01890":{"line":5145,"offset":916291,"length":185,"previous":"M21-GAP-01889","next":"M21-GAP-01891"},"M21-GAP-01891":{"line":5146,"offset":916476,"length":185,"previous":"M21-GAP-01890","next":"M21-GAP-01892"},"M21-GAP-01892":{"line":5147,"offset":916661,"length":185,"previous":"M21-GAP-01891","next":"M21-GAP-01893"},"M21-GAP-01893":{"line":5148,"offset":916846,"length":185,"previous":"M21-GAP-01892","next":"M21-GAP-01894"},"M21-GAP-01894":{"line":5149,"offset":917031,"length":185,"previous":"M21-GAP-01893","next":"M21-GAP-01895"},"M21-GAP-01895":{"line":5150,"offset":917216,"length":185,"previous":"M21-GAP-01894","next":"M21-GAP-01896"},"M21-GAP-01896":{"line":5151,"offset":917401,"length":185,"previous":"M21-GAP-01895","next":"M21-GAP-01897"},"M21-GAP-01897":{"line":5152,"offset":917586,"length":185,"previous":"M21-GAP-01896","next":"M21-GAP-01898"},"M21-GAP-01898":{"line":5153,"offset":917771,"length":185,"previous":"M21-GAP-01897","next":"M21-GAP-01899"},"M21-GAP-01899":{"line":5154,"offset":917956,"length":185,"previous":"M21-GAP-01898","next":"M21-GAP-01900"},"M21-GAP-01900":{"line":5155,"offset":918141,"length":185,"previous":"M21-GAP-01899","next":"M21-GAP-01901"},"M21-GAP-01901":{"line":5156,"offset":918326,"length":185,"previous":"M21-GAP-01900","next":"M21-GAP-01902"},"M21-GAP-01902":{"line":5157,"offset":918511,"length":186,"previous":"M21-GAP-01901","next":"M21-GAP-01903"},"M21-GAP-01903":{"line":5158,"offset":918697,"length":186,"previous":"M21-GAP-01902","next":"M21-GAP-01904"},"M21-GAP-01904":{"line":5159,"offset":918883,"length":186,"previous":"M21-GAP-01903","next":"M21-GAP-01905"},"M21-GAP-01905":{"line":5160,"offset":919069,"length":186,"previous":"M21-GAP-01904","next":"M21-GAP-01906"},"M21-GAP-01906":{"line":5161,"offset":919255,"length":186,"previous":"M21-GAP-01905","next":"M21-GAP-01907"},"M21-GAP-01907":{"line":5162,"offset":919441,"length":186,"previous":"M21-GAP-01906","next":"M21-GAP-01908"},"M21-GAP-01908":{"line":5163,"offset":919627,"length":188,"previous":"M21-GAP-01907","next":"M21-GAP-01909"},"M21-GAP-01909":{"line":5164,"offset":919815,"length":188,"previous":"M21-GAP-01908","next":"M21-GAP-01910"},"M21-GAP-01910":{"line":5165,"offset":920003,"length":188,"previous":"M21-GAP-01909","next":"M21-GAP-01911"},"M21-GAP-01911":{"line":5166,"offset":920191,"length":188,"previous":"M21-GAP-01910","next":"M21-GAP-01912"},"M21-GAP-01912":{"line":5167,"offset":920379,"length":188,"previous":"M21-GAP-01911","next":"M21-GAP-01913"},"M21-GAP-01913":{"line":5168,"offset":920567,"length":188,"previous":"M21-GAP-01912","next":"M21-GAP-01914"},"M21-GAP-01914":{"line":5169,"offset":920755,"length":188,"previous":"M21-GAP-01913","next":"M21-GAP-01915"},"M21-GAP-01915":{"line":5170,"offset":920943,"length":195,"previous":"M21-GAP-01914","next":"M21-GAP-01916"},"M21-GAP-01916":{"line":5171,"offset":921138,"length":193,"previous":"M21-GAP-01915","next":"M21-GAP-01917"},"M21-GAP-01917":{"line":5172,"offset":921331,"length":194,"previous":"M21-GAP-01916","next":"M21-GAP-01918"},"M21-GAP-01918":{"line":5173,"offset":921525,"length":205,"previous":"M21-GAP-01917","next":"M21-GAP-01919"},"M21-GAP-01919":{"line":5174,"offset":921730,"length":205,"previous":"M21-GAP-01918","next":"M21-GAP-01920"},"M21-GAP-01920":{"line":5175,"offset":921935,"length":206,"previous":"M21-GAP-01919","next":"M21-GAP-01921"},"M21-GAP-01921":{"line":5176,"offset":922141,"length":206,"previous":"M21-GAP-01920","next":"M21-GAP-01922"},"M21-GAP-01922":{"line":5177,"offset":922347,"length":205,"previous":"M21-GAP-01921","next":"M21-GAP-01923"},"M21-GAP-01923":{"line":5178,"offset":922552,"length":205,"previous":"M21-GAP-01922","next":"M21-GAP-01924"},"M21-GAP-01924":{"line":5179,"offset":922757,"length":205,"previous":"M21-GAP-01923","next":"M21-GAP-01925"},"M21-GAP-01925":{"line":5180,"offset":922962,"length":205,"previous":"M21-GAP-01924","next":"M21-GAP-01926"},"M21-GAP-01926":{"line":5181,"offset":923167,"length":205,"previous":"M21-GAP-01925","next":"M21-GAP-01927"},"M21-GAP-01927":{"line":5182,"offset":923372,"length":205,"previous":"M21-GAP-01926","next":"M21-GAP-01928"},"M21-GAP-01928":{"line":5183,"offset":923577,"length":205,"previous":"M21-GAP-01927","next":"M21-GAP-01929"},"M21-GAP-01929":{"line":5184,"offset":923782,"length":205,"previous":"M21-GAP-01928","next":"M21-GAP-01930"},"M21-GAP-01930":{"line":5185,"offset":923987,"length":194,"previous":"M21-GAP-01929","next":"M21-GAP-01931"},"M21-GAP-01931":{"line":5186,"offset":924181,"length":194,"previous":"M21-GAP-01930","next":"M21-GAP-01932"},"M21-GAP-01932":{"line":5187,"offset":924375,"length":195,"previous":"M21-GAP-01931","next":"M21-GAP-01933"},"M21-GAP-01933":{"line":5188,"offset":924570,"length":195,"previous":"M21-GAP-01932","next":"M21-GAP-01934"},"M21-GAP-01934":{"line":5189,"offset":924765,"length":194,"previous":"M21-GAP-01933","next":"M21-GAP-01935"},"M21-GAP-01935":{"line":5190,"offset":924959,"length":194,"previous":"M21-GAP-01934","next":"M21-GAP-01936"},"M21-GAP-01936":{"line":5191,"offset":925153,"length":194,"previous":"M21-GAP-01935","next":"M21-GAP-01937"},"M21-GAP-01937":{"line":5192,"offset":925347,"length":194,"previous":"M21-GAP-01936","next":"M21-GAP-01938"},"M21-GAP-01938":{"line":5193,"offset":925541,"length":194,"previous":"M21-GAP-01937","next":"M21-GAP-01939"},"M21-GAP-01939":{"line":5194,"offset":925735,"length":194,"previous":"M21-GAP-01938","next":"M21-GAP-01940"},"M21-GAP-01940":{"line":5195,"offset":925929,"length":194,"previous":"M21-GAP-01939","next":"M21-GAP-01941"},"M21-GAP-01941":{"line":5196,"offset":926123,"length":194,"previous":"M21-GAP-01940","next":"M21-GAP-01942"},"M21-GAP-01942":{"line":5197,"offset":926317,"length":208,"previous":"M21-GAP-01941","next":"M21-GAP-01943"},"M21-GAP-01943":{"line":5198,"offset":926525,"length":208,"previous":"M21-GAP-01942","next":"M21-GAP-01944"},"M21-GAP-01944":{"line":5199,"offset":926733,"length":208,"previous":"M21-GAP-01943","next":"M21-GAP-01945"},"M21-GAP-01945":{"line":5200,"offset":926941,"length":197,"previous":"M21-GAP-01944","next":"M21-GAP-01946"},"M21-GAP-01946":{"line":5201,"offset":927138,"length":197,"previous":"M21-GAP-01945","next":"M21-GAP-01947"},"M21-GAP-01947":{"line":5202,"offset":927335,"length":197,"previous":"M21-GAP-01946","next":"M21-GAP-01948"},"M21-GAP-01948":{"line":5203,"offset":927532,"length":207,"previous":"M21-GAP-01947","next":"M21-GAP-01949"},"M21-GAP-01949":{"line":5204,"offset":927739,"length":207,"previous":"M21-GAP-01948","next":"M21-GAP-01950"},"M21-GAP-01950":{"line":5205,"offset":927946,"length":207,"previous":"M21-GAP-01949","next":"M21-GAP-01951"},"M21-GAP-01951":{"line":5206,"offset":928153,"length":196,"previous":"M21-GAP-01950","next":"M21-GAP-01952"},"M21-GAP-01952":{"line":5207,"offset":928349,"length":196,"previous":"M21-GAP-01951","next":"M21-GAP-01953"},"M21-GAP-01953":{"line":5208,"offset":928545,"length":196,"previous":"M21-GAP-01952","next":"M21-GAP-01954"},"M21-GAP-01954":{"line":5209,"offset":928741,"length":200,"previous":"M21-GAP-01953","next":"M21-GAP-01955"},"M21-GAP-01955":{"line":5210,"offset":928941,"length":200,"previous":"M21-GAP-01954","next":"M21-GAP-01956"},"M21-GAP-01956":{"line":5211,"offset":929141,"length":200,"previous":"M21-GAP-01955","next":"M21-GAP-01957"},"M21-GAP-01957":{"line":5212,"offset":929341,"length":200,"previous":"M21-GAP-01956","next":"M21-GAP-01958"},"M21-GAP-01958":{"line":5213,"offset":929541,"length":200,"previous":"M21-GAP-01957","next":"M21-GAP-01959"},"M21-GAP-01959":{"line":5214,"offset":929741,"length":200,"previous":"M21-GAP-01958","next":"M21-GAP-01960"},"M21-GAP-01960":{"line":5215,"offset":929941,"length":200,"previous":"M21-GAP-01959","next":"M21-GAP-01961"},"M21-GAP-01961":{"line":5216,"offset":930141,"length":200,"previous":"M21-GAP-01960","next":"M21-GAP-01962"},"M21-GAP-01962":{"line":5217,"offset":930341,"length":200,"previous":"M21-GAP-01961","next":"M21-GAP-01963"},"M21-GAP-01963":{"line":5218,"offset":930541,"length":189,"previous":"M21-GAP-01962","next":"M21-GAP-01964"},"M21-GAP-01964":{"line":5219,"offset":930730,"length":189,"previous":"M21-GAP-01963","next":"M21-GAP-01965"},"M21-GAP-01965":{"line":5220,"offset":930919,"length":189,"previous":"M21-GAP-01964","next":"M21-GAP-01966"},"M21-GAP-01966":{"line":5221,"offset":931108,"length":189,"previous":"M21-GAP-01965","next":"M21-GAP-01967"},"M21-GAP-01967":{"line":5222,"offset":931297,"length":189,"previous":"M21-GAP-01966","next":"M21-GAP-01968"},"M21-GAP-01968":{"line":5223,"offset":931486,"length":189,"previous":"M21-GAP-01967","next":"M21-GAP-01969"},"M21-GAP-01969":{"line":5224,"offset":931675,"length":189,"previous":"M21-GAP-01968","next":"M21-GAP-01970"},"M21-GAP-01970":{"line":5225,"offset":931864,"length":189,"previous":"M21-GAP-01969","next":"M21-GAP-01971"},"M21-GAP-01971":{"line":5226,"offset":932053,"length":189,"previous":"M21-GAP-01970","next":"M21-GAP-01972"},"M21-GAP-01972":{"line":5227,"offset":932242,"length":178,"previous":"M21-GAP-01971","next":"M21-GAP-01973"},"M21-GAP-01973":{"line":5228,"offset":932420,"length":178,"previous":"M21-GAP-01972","next":"M21-GAP-01974"},"M21-GAP-01974":{"line":5229,"offset":932598,"length":179,"previous":"M21-GAP-01973","next":"M21-GAP-01975"},"M21-GAP-01975":{"line":5230,"offset":932777,"length":179,"previous":"M21-GAP-01974","next":"M21-GAP-01976"},"M21-GAP-01976":{"line":5231,"offset":932956,"length":179,"previous":"M21-GAP-01975","next":"M21-GAP-01977"},"M21-GAP-01977":{"line":5232,"offset":933135,"length":179,"previous":"M21-GAP-01976","next":"M21-GAP-01978"},"M21-GAP-01978":{"line":5233,"offset":933314,"length":179,"previous":"M21-GAP-01977","next":"M21-GAP-01979"},"M21-GAP-01979":{"line":5234,"offset":933493,"length":179,"previous":"M21-GAP-01978","next":"M21-GAP-01980"},"M21-GAP-01980":{"line":5235,"offset":933672,"length":179,"previous":"M21-GAP-01979","next":"M21-GAP-01981"},"M21-GAP-01981":{"line":5236,"offset":933851,"length":179,"previous":"M21-GAP-01980","next":"M21-GAP-01982"},"M21-GAP-01982":{"line":5237,"offset":934030,"length":179,"previous":"M21-GAP-01981","next":"M21-GAP-01983"},"M21-GAP-01983":{"line":5238,"offset":934209,"length":179,"previous":"M21-GAP-01982","next":"M21-GAP-01984"},"M21-GAP-01984":{"line":5239,"offset":934388,"length":178,"previous":"M21-GAP-01983","next":"M21-GAP-01985"},"M21-GAP-01985":{"line":5240,"offset":934566,"length":179,"previous":"M21-GAP-01984","next":"M21-GAP-01986"},"M21-GAP-01986":{"line":5241,"offset":934745,"length":179,"previous":"M21-GAP-01985","next":"M21-GAP-01987"},"M21-GAP-01987":{"line":5242,"offset":934924,"length":179,"previous":"M21-GAP-01986","next":"M21-GAP-01988"},"M21-GAP-01988":{"line":5243,"offset":935103,"length":179,"previous":"M21-GAP-01987","next":"M21-GAP-01989"},"M21-GAP-01989":{"line":5244,"offset":935282,"length":179,"previous":"M21-GAP-01988","next":"M21-GAP-01990"},"M21-GAP-01990":{"line":5245,"offset":935461,"length":179,"previous":"M21-GAP-01989","next":"M21-GAP-01991"},"M21-GAP-01991":{"line":5246,"offset":935640,"length":179,"previous":"M21-GAP-01990","next":"M21-GAP-01992"},"M21-GAP-01992":{"line":5247,"offset":935819,"length":179,"previous":"M21-GAP-01991","next":"M21-GAP-01993"},"M21-GAP-01993":{"line":5248,"offset":935998,"length":179,"previous":"M21-GAP-01992","next":"M21-GAP-01994"},"M21-GAP-01994":{"line":5249,"offset":936177,"length":179,"previous":"M21-GAP-01993","next":"M21-GAP-01995"},"M21-GAP-01995":{"line":5250,"offset":936356,"length":178,"previous":"M21-GAP-01994","next":"M21-GAP-01996"},"M21-GAP-01996":{"line":5251,"offset":936534,"length":179,"previous":"M21-GAP-01995","next":"M21-GAP-01997"},"M21-GAP-01997":{"line":5252,"offset":936713,"length":179,"previous":"M21-GAP-01996","next":"M21-GAP-01998"},"M21-GAP-01998":{"line":5253,"offset":936892,"length":179,"previous":"M21-GAP-01997","next":"M21-GAP-01999"},"M21-GAP-01999":{"line":5254,"offset":937071,"length":179,"previous":"M21-GAP-01998","next":"M21-GAP-02000"},"M21-GAP-02000":{"line":5255,"offset":937250,"length":179,"previous":"M21-GAP-01999","next":"M21-GAP-02001"},"M21-GAP-02001":{"line":5256,"offset":937429,"length":179,"previous":"M21-GAP-02000","next":"M21-GAP-02002"},"M21-GAP-02002":{"line":5257,"offset":937608,"length":179,"previous":"M21-GAP-02001","next":"M21-GAP-02003"},"M21-GAP-02003":{"line":5258,"offset":937787,"length":179,"previous":"M21-GAP-02002","next":"M21-GAP-02004"},"M21-GAP-02004":{"line":5259,"offset":937966,"length":179,"previous":"M21-GAP-02003","next":"M21-GAP-02005"},"M21-GAP-02005":{"line":5260,"offset":938145,"length":179,"previous":"M21-GAP-02004","next":"M21-GAP-02006"},"M21-GAP-02006":{"line":5261,"offset":938324,"length":178,"previous":"M21-GAP-02005","next":"M21-GAP-02007"},"M21-GAP-02007":{"line":5262,"offset":938502,"length":179,"previous":"M21-GAP-02006","next":"M21-GAP-02008"},"M21-GAP-02008":{"line":5263,"offset":938681,"length":179,"previous":"M21-GAP-02007","next":"M21-GAP-02009"},"M21-GAP-02009":{"line":5264,"offset":938860,"length":179,"previous":"M21-GAP-02008","next":"M21-GAP-02010"},"M21-GAP-02010":{"line":5265,"offset":939039,"length":179,"previous":"M21-GAP-02009","next":"M21-GAP-02011"},"M21-GAP-02011":{"line":5266,"offset":939218,"length":179,"previous":"M21-GAP-02010","next":"M21-GAP-02012"},"M21-GAP-02012":{"line":5267,"offset":939397,"length":179,"previous":"M21-GAP-02011","next":"M21-GAP-02013"},"M21-GAP-02013":{"line":5268,"offset":939576,"length":179,"previous":"M21-GAP-02012","next":"M21-GAP-02014"},"M21-GAP-02014":{"line":5269,"offset":939755,"length":179,"previous":"M21-GAP-02013","next":"M21-GAP-02015"},"M21-GAP-02015":{"line":5270,"offset":939934,"length":179,"previous":"M21-GAP-02014","next":"M21-GAP-02016"},"M21-GAP-02016":{"line":5271,"offset":940113,"length":179,"previous":"M21-GAP-02015","next":"M21-GAP-02017"},"M21-GAP-02017":{"line":5272,"offset":940292,"length":178,"previous":"M21-GAP-02016","next":"M21-GAP-02018"},"M21-GAP-02018":{"line":5273,"offset":940470,"length":179,"previous":"M21-GAP-02017","next":"M21-GAP-02019"},"M21-GAP-02019":{"line":5274,"offset":940649,"length":179,"previous":"M21-GAP-02018","next":"M21-GAP-02020"},"M21-GAP-02020":{"line":5275,"offset":940828,"length":179,"previous":"M21-GAP-02019","next":"M21-GAP-02021"},"M21-GAP-02021":{"line":5276,"offset":941007,"length":179,"previous":"M21-GAP-02020","next":"M21-GAP-02022"},"M21-GAP-02022":{"line":5277,"offset":941186,"length":179,"previous":"M21-GAP-02021","next":"M21-GAP-02023"},"M21-GAP-02023":{"line":5278,"offset":941365,"length":179,"previous":"M21-GAP-02022","next":"M21-GAP-02024"},"M21-GAP-02024":{"line":5279,"offset":941544,"length":179,"previous":"M21-GAP-02023","next":"M21-GAP-02025"},"M21-GAP-02025":{"line":5280,"offset":941723,"length":179,"previous":"M21-GAP-02024","next":"M21-GAP-02026"},"M21-GAP-02026":{"line":5281,"offset":941902,"length":179,"previous":"M21-GAP-02025","next":"M21-GAP-02027"},"M21-GAP-02027":{"line":5282,"offset":942081,"length":178,"previous":"M21-GAP-02026","next":"M21-GAP-02028"},"M21-GAP-02028":{"line":5283,"offset":942259,"length":178,"previous":"M21-GAP-02027","next":"M21-GAP-02029"},"M21-GAP-02029":{"line":5284,"offset":942437,"length":178,"previous":"M21-GAP-02028","next":"M21-GAP-02030"},"M21-GAP-02030":{"line":5285,"offset":942615,"length":178,"previous":"M21-GAP-02029","next":"M21-GAP-02031"},"M21-GAP-02031":{"line":5286,"offset":942793,"length":183,"previous":"M21-GAP-02030","next":"M21-GAP-02032"},"M21-GAP-02032":{"line":5287,"offset":942976,"length":183,"previous":"M21-GAP-02031","next":"M21-GAP-02033"},"M21-GAP-02033":{"line":5288,"offset":943159,"length":183,"previous":"M21-GAP-02032","next":"M21-GAP-02034"},"M21-GAP-02034":{"line":5289,"offset":943342,"length":178,"previous":"M21-GAP-02033","next":"M21-GAP-02035"},"M21-GAP-02035":{"line":5290,"offset":943520,"length":178,"previous":"M21-GAP-02034","next":"M21-GAP-02036"},"M21-GAP-02036":{"line":5291,"offset":943698,"length":179,"previous":"M21-GAP-02035","next":"M21-GAP-02037"},"M21-GAP-02037":{"line":5292,"offset":943877,"length":180,"previous":"M21-GAP-02036","next":"M21-GAP-02038"},"M21-GAP-02038":{"line":5293,"offset":944057,"length":180,"previous":"M21-GAP-02037","next":"M21-GAP-02039"},"M21-GAP-02039":{"line":5294,"offset":944237,"length":180,"previous":"M21-GAP-02038","next":"M21-GAP-02040"},"M21-GAP-02040":{"line":5295,"offset":944417,"length":179,"previous":"M21-GAP-02039","next":"M21-GAP-02041"},"M21-GAP-02041":{"line":5296,"offset":944596,"length":179,"previous":"M21-GAP-02040","next":"M21-GAP-02042"},"M21-GAP-02042":{"line":5297,"offset":944775,"length":179,"previous":"M21-GAP-02041","next":"M21-GAP-02043"},"M21-GAP-02043":{"line":5298,"offset":944954,"length":179,"previous":"M21-GAP-02042","next":"M21-GAP-02044"},"M21-GAP-02044":{"line":5299,"offset":945133,"length":179,"previous":"M21-GAP-02043","next":"M21-GAP-02045"},"M21-GAP-02045":{"line":5300,"offset":945312,"length":179,"previous":"M21-GAP-02044","next":"M21-GAP-02046"},"M21-GAP-02046":{"line":5301,"offset":945491,"length":179,"previous":"M21-GAP-02045","next":"M21-GAP-02047"},"M21-GAP-02047":{"line":5302,"offset":945670,"length":179,"previous":"M21-GAP-02046","next":"M21-GAP-02048"},"M21-GAP-02048":{"line":5303,"offset":945849,"length":179,"previous":"M21-GAP-02047","next":"M21-GAP-02049"},"M21-GAP-02049":{"line":5304,"offset":946028,"length":178,"previous":"M21-GAP-02048","next":"M21-GAP-02050"},"M21-GAP-02050":{"line":5305,"offset":946206,"length":179,"previous":"M21-GAP-02049","next":"M21-GAP-02051"},"M21-GAP-02051":{"line":5306,"offset":946385,"length":179,"previous":"M21-GAP-02050","next":"M21-GAP-02052"},"M21-GAP-02052":{"line":5307,"offset":946564,"length":179,"previous":"M21-GAP-02051","next":"M21-GAP-02053"},"M21-GAP-02053":{"line":5308,"offset":946743,"length":179,"previous":"M21-GAP-02052","next":"M21-GAP-02054"},"M21-GAP-02054":{"line":5309,"offset":946922,"length":179,"previous":"M21-GAP-02053","next":"M21-GAP-02055"},"M21-GAP-02055":{"line":5310,"offset":947101,"length":179,"previous":"M21-GAP-02054","next":"M21-GAP-02056"},"M21-GAP-02056":{"line":5311,"offset":947280,"length":179,"previous":"M21-GAP-02055","next":"M21-GAP-02057"},"M21-GAP-02057":{"line":5312,"offset":947459,"length":179,"previous":"M21-GAP-02056","next":"M21-GAP-02058"},"M21-GAP-02058":{"line":5313,"offset":947638,"length":179,"previous":"M21-GAP-02057","next":"M21-GAP-02059"},"M21-GAP-02059":{"line":5314,"offset":947817,"length":179,"previous":"M21-GAP-02058","next":"M21-GAP-02060"},"M21-GAP-02060":{"line":5315,"offset":947996,"length":178,"previous":"M21-GAP-02059","next":"M21-GAP-02061"},"M21-GAP-02061":{"line":5316,"offset":948174,"length":179,"previous":"M21-GAP-02060","next":"M21-GAP-02062"},"M21-GAP-02062":{"line":5317,"offset":948353,"length":179,"previous":"M21-GAP-02061","next":"M21-GAP-02063"},"M21-GAP-02063":{"line":5318,"offset":948532,"length":179,"previous":"M21-GAP-02062","next":"M21-GAP-02064"},"M21-GAP-02064":{"line":5319,"offset":948711,"length":179,"previous":"M21-GAP-02063","next":"M21-GAP-02065"},"M21-GAP-02065":{"line":5320,"offset":948890,"length":179,"previous":"M21-GAP-02064","next":"M21-GAP-02066"},"M21-GAP-02066":{"line":5321,"offset":949069,"length":179,"previous":"M21-GAP-02065","next":"M21-GAP-02067"},"M21-GAP-02067":{"line":5322,"offset":949248,"length":179,"previous":"M21-GAP-02066","next":"M21-GAP-02068"},"M21-GAP-02068":{"line":5323,"offset":949427,"length":179,"previous":"M21-GAP-02067","next":"M21-GAP-02069"},"M21-GAP-02069":{"line":5324,"offset":949606,"length":179,"previous":"M21-GAP-02068","next":"M21-GAP-02070"},"M21-GAP-02070":{"line":5325,"offset":949785,"length":179,"previous":"M21-GAP-02069","next":"M21-GAP-02071"},"M21-GAP-02071":{"line":5326,"offset":949964,"length":178,"previous":"M21-GAP-02070","next":"M21-GAP-02072"},"M21-GAP-02072":{"line":5327,"offset":950142,"length":179,"previous":"M21-GAP-02071","next":"M21-GAP-02073"},"M21-GAP-02073":{"line":5328,"offset":950321,"length":179,"previous":"M21-GAP-02072","next":"M21-GAP-02074"},"M21-GAP-02074":{"line":5329,"offset":950500,"length":179,"previous":"M21-GAP-02073","next":"M21-GAP-02075"},"M21-GAP-02075":{"line":5330,"offset":950679,"length":179,"previous":"M21-GAP-02074","next":"M21-GAP-02076"},"M21-GAP-02076":{"line":5331,"offset":950858,"length":179,"previous":"M21-GAP-02075","next":"M21-GAP-02077"},"M21-GAP-02077":{"line":5332,"offset":951037,"length":179,"previous":"M21-GAP-02076","next":"M21-GAP-02078"},"M21-GAP-02078":{"line":5333,"offset":951216,"length":179,"previous":"M21-GAP-02077","next":"M21-GAP-02079"},"M21-GAP-02079":{"line":5334,"offset":951395,"length":179,"previous":"M21-GAP-02078","next":"M21-GAP-02080"},"M21-GAP-02080":{"line":5335,"offset":951574,"length":179,"previous":"M21-GAP-02079","next":"M21-GAP-02081"},"M21-GAP-02081":{"line":5336,"offset":951753,"length":179,"previous":"M21-GAP-02080","next":"M21-GAP-02082"},"M21-GAP-02082":{"line":5337,"offset":951932,"length":178,"previous":"M21-GAP-02081","next":"M21-GAP-02083"},"M21-GAP-02083":{"line":5338,"offset":952110,"length":179,"previous":"M21-GAP-02082","next":"M21-GAP-02084"},"M21-GAP-02084":{"line":5339,"offset":952289,"length":179,"previous":"M21-GAP-02083","next":"M21-GAP-02085"},"M21-GAP-02085":{"line":5340,"offset":952468,"length":179,"previous":"M21-GAP-02084","next":"M21-GAP-02086"},"M21-GAP-02086":{"line":5341,"offset":952647,"length":179,"previous":"M21-GAP-02085","next":"M21-GAP-02087"},"M21-GAP-02087":{"line":5342,"offset":952826,"length":179,"previous":"M21-GAP-02086","next":"M21-GAP-02088"},"M21-GAP-02088":{"line":5343,"offset":953005,"length":179,"previous":"M21-GAP-02087","next":"M21-GAP-02089"},"M21-GAP-02089":{"line":5344,"offset":953184,"length":179,"previous":"M21-GAP-02088","next":"M21-GAP-02090"},"M21-GAP-02090":{"line":5345,"offset":953363,"length":179,"previous":"M21-GAP-02089","next":"M21-GAP-02091"},"M21-GAP-02091":{"line":5346,"offset":953542,"length":179,"previous":"M21-GAP-02090","next":"M21-GAP-02092"},"M21-GAP-02092":{"line":5347,"offset":953721,"length":179,"previous":"M21-GAP-02091","next":"M21-GAP-02093"},"M21-GAP-02093":{"line":5348,"offset":953900,"length":178,"previous":"M21-GAP-02092","next":"M21-GAP-02094"},"M21-GAP-02094":{"line":5349,"offset":954078,"length":179,"previous":"M21-GAP-02093","next":"M21-GAP-02095"},"M21-GAP-02095":{"line":5350,"offset":954257,"length":179,"previous":"M21-GAP-02094","next":"M21-GAP-02096"},"M21-GAP-02096":{"line":5351,"offset":954436,"length":179,"previous":"M21-GAP-02095","next":"M21-GAP-02097"},"M21-GAP-02097":{"line":5352,"offset":954615,"length":179,"previous":"M21-GAP-02096","next":"M21-GAP-02098"},"M21-GAP-02098":{"line":5353,"offset":954794,"length":179,"previous":"M21-GAP-02097","next":"M21-GAP-02099"},"M21-GAP-02099":{"line":5354,"offset":954973,"length":179,"previous":"M21-GAP-02098","next":"M21-GAP-02100"},"M21-GAP-02100":{"line":5355,"offset":955152,"length":179,"previous":"M21-GAP-02099","next":"M21-GAP-02101"},"M21-GAP-02101":{"line":5356,"offset":955331,"length":179,"previous":"M21-GAP-02100","next":"M21-GAP-02102"},"M21-GAP-02102":{"line":5357,"offset":955510,"length":179,"previous":"M21-GAP-02101","next":"M21-GAP-02103"},"M21-GAP-02103":{"line":5358,"offset":955689,"length":179,"previous":"M21-GAP-02102","next":"M21-GAP-02104"},"M21-GAP-02104":{"line":5359,"offset":955868,"length":178,"previous":"M21-GAP-02103","next":"M21-GAP-02105"},"M21-GAP-02105":{"line":5360,"offset":956046,"length":179,"previous":"M21-GAP-02104","next":"M21-GAP-02106"},"M21-GAP-02106":{"line":5361,"offset":956225,"length":179,"previous":"M21-GAP-02105","next":"M21-GAP-02107"},"M21-GAP-02107":{"line":5362,"offset":956404,"length":179,"previous":"M21-GAP-02106","next":"M21-GAP-02108"},"M21-GAP-02108":{"line":5363,"offset":956583,"length":179,"previous":"M21-GAP-02107","next":"M21-GAP-02109"},"M21-GAP-02109":{"line":5364,"offset":956762,"length":179,"previous":"M21-GAP-02108","next":"M21-GAP-02110"},"M21-GAP-02110":{"line":5365,"offset":956941,"length":179,"previous":"M21-GAP-02109","next":"M21-GAP-02111"},"M21-GAP-02111":{"line":5366,"offset":957120,"length":179,"previous":"M21-GAP-02110","next":"M21-GAP-02112"},"M21-GAP-02112":{"line":5367,"offset":957299,"length":179,"previous":"M21-GAP-02111","next":"M21-GAP-02113"},"M21-GAP-02113":{"line":5368,"offset":957478,"length":179,"previous":"M21-GAP-02112","next":"M21-GAP-02114"},"M21-GAP-02114":{"line":5369,"offset":957657,"length":179,"previous":"M21-GAP-02113","next":"M21-GAP-02115"},"M21-GAP-02115":{"line":5370,"offset":957836,"length":178,"previous":"M21-GAP-02114","next":"M21-GAP-02116"},"M21-GAP-02116":{"line":5371,"offset":958014,"length":179,"previous":"M21-GAP-02115","next":"M21-GAP-02117"},"M21-GAP-02117":{"line":5372,"offset":958193,"length":179,"previous":"M21-GAP-02116","next":"M21-GAP-02118"},"M21-GAP-02118":{"line":5373,"offset":958372,"length":179,"previous":"M21-GAP-02117","next":"M21-GAP-02119"},"M21-GAP-02119":{"line":5374,"offset":958551,"length":179,"previous":"M21-GAP-02118","next":"M21-GAP-02120"},"M21-GAP-02120":{"line":5375,"offset":958730,"length":179,"previous":"M21-GAP-02119","next":"M21-GAP-02121"},"M21-GAP-02121":{"line":5376,"offset":958909,"length":179,"previous":"M21-GAP-02120","next":"M21-GAP-02122"},"M21-GAP-02122":{"line":5377,"offset":959088,"length":179,"previous":"M21-GAP-02121","next":"M21-GAP-02123"},"M21-GAP-02123":{"line":5378,"offset":959267,"length":179,"previous":"M21-GAP-02122","next":"M21-GAP-02124"},"M21-GAP-02124":{"line":5379,"offset":959446,"length":179,"previous":"M21-GAP-02123","next":"M21-GAP-02125"},"M21-GAP-02125":{"line":5380,"offset":959625,"length":179,"previous":"M21-GAP-02124","next":"M21-GAP-02126"},"M21-GAP-02126":{"line":5381,"offset":959804,"length":178,"previous":"M21-GAP-02125","next":"M21-GAP-02127"},"M21-GAP-02127":{"line":5382,"offset":959982,"length":179,"previous":"M21-GAP-02126","next":"M21-GAP-02128"},"M21-GAP-02128":{"line":5383,"offset":960161,"length":179,"previous":"M21-GAP-02127","next":"M21-GAP-02129"},"M21-GAP-02129":{"line":5384,"offset":960340,"length":179,"previous":"M21-GAP-02128","next":"M21-GAP-02130"},"M21-GAP-02130":{"line":5385,"offset":960519,"length":179,"previous":"M21-GAP-02129","next":"M21-GAP-02131"},"M21-GAP-02131":{"line":5386,"offset":960698,"length":179,"previous":"M21-GAP-02130","next":"M21-GAP-02132"},"M21-GAP-02132":{"line":5387,"offset":960877,"length":179,"previous":"M21-GAP-02131","next":"M21-GAP-02133"},"M21-GAP-02133":{"line":5388,"offset":961056,"length":179,"previous":"M21-GAP-02132","next":"M21-GAP-02134"},"M21-GAP-02134":{"line":5389,"offset":961235,"length":179,"previous":"M21-GAP-02133","next":"M21-GAP-02135"},"M21-GAP-02135":{"line":5390,"offset":961414,"length":179,"previous":"M21-GAP-02134","next":"M21-GAP-02136"},"M21-GAP-02136":{"line":5391,"offset":961593,"length":179,"previous":"M21-GAP-02135","next":"M21-GAP-02137"},"M21-GAP-02137":{"line":5392,"offset":961772,"length":178,"previous":"M21-GAP-02136","next":"M21-GAP-02138"},"M21-GAP-02138":{"line":5393,"offset":961950,"length":178,"previous":"M21-GAP-02137","next":"M21-GAP-02139"},"M21-GAP-02139":{"line":5394,"offset":962128,"length":179,"previous":"M21-GAP-02138","next":"M21-GAP-02140"},"M21-GAP-02140":{"line":5395,"offset":962307,"length":179,"previous":"M21-GAP-02139","next":"M21-GAP-02141"},"M21-GAP-02141":{"line":5396,"offset":962486,"length":179,"previous":"M21-GAP-02140","next":"M21-GAP-02142"},"M21-GAP-02142":{"line":5397,"offset":962665,"length":179,"previous":"M21-GAP-02141","next":"M21-GAP-02143"},"M21-GAP-02143":{"line":5398,"offset":962844,"length":179,"previous":"M21-GAP-02142","next":"M21-GAP-02144"},"M21-GAP-02144":{"line":5399,"offset":963023,"length":178,"previous":"M21-GAP-02143","next":"M21-GAP-02145"},"M21-GAP-02145":{"line":5400,"offset":963201,"length":178,"previous":"M21-GAP-02144","next":"M21-GAP-02146"},"M21-GAP-02146":{"line":5401,"offset":963379,"length":178,"previous":"M21-GAP-02145","next":"M21-GAP-02147"},"M21-GAP-02147":{"line":5402,"offset":963557,"length":178,"previous":"M21-GAP-02146","next":"M21-GAP-02148"},"M21-GAP-02148":{"line":5403,"offset":963735,"length":178,"previous":"M21-GAP-02147","next":"M21-GAP-02149"},"M21-GAP-02149":{"line":5404,"offset":963913,"length":178,"previous":"M21-GAP-02148","next":"M21-GAP-02150"},"M21-GAP-02150":{"line":5405,"offset":964091,"length":178,"previous":"M21-GAP-02149","next":"M21-GAP-02151"},"M21-GAP-02151":{"line":5406,"offset":964269,"length":178,"previous":"M21-GAP-02150","next":"M21-GAP-02152"},"M21-GAP-02152":{"line":5407,"offset":964447,"length":208,"previous":"M21-GAP-02151","next":"M21-GAP-02153"},"M21-GAP-02153":{"line":5408,"offset":964655,"length":208,"previous":"M21-GAP-02152","next":"M21-GAP-02154"},"M21-GAP-02154":{"line":5409,"offset":964863,"length":209,"previous":"M21-GAP-02153","next":"M21-GAP-02155"},"M21-GAP-02155":{"line":5410,"offset":965072,"length":209,"previous":"M21-GAP-02154","next":"M21-GAP-02156"},"M21-GAP-02156":{"line":5411,"offset":965281,"length":209,"previous":"M21-GAP-02155","next":"M21-GAP-02157"},"M21-GAP-02157":{"line":5412,"offset":965490,"length":209,"previous":"M21-GAP-02156","next":"M21-GAP-02158"},"M21-GAP-02158":{"line":5413,"offset":965699,"length":208,"previous":"M21-GAP-02157","next":"M21-GAP-02159"},"M21-GAP-02159":{"line":5414,"offset":965907,"length":208,"previous":"M21-GAP-02158","next":"M21-GAP-02160"},"M21-GAP-02160":{"line":5415,"offset":966115,"length":208,"previous":"M21-GAP-02159","next":"M21-GAP-02161"},"M21-GAP-02161":{"line":5416,"offset":966323,"length":208,"previous":"M21-GAP-02160","next":"M21-GAP-02162"},"M21-GAP-02162":{"line":5417,"offset":966531,"length":208,"previous":"M21-GAP-02161","next":"M21-GAP-02163"},"M21-GAP-02163":{"line":5418,"offset":966739,"length":208,"previous":"M21-GAP-02162","next":"M21-GAP-02164"},"M21-GAP-02164":{"line":5419,"offset":966947,"length":208,"previous":"M21-GAP-02163","next":"M21-GAP-02165"},"M21-GAP-02165":{"line":5420,"offset":967155,"length":208,"previous":"M21-GAP-02164","next":"M21-GAP-02166"},"M21-GAP-02166":{"line":5421,"offset":967363,"length":185,"previous":"M21-GAP-02165","next":"M21-GAP-02167"},"M21-GAP-02167":{"line":5422,"offset":967548,"length":206,"previous":"M21-GAP-02166","next":"M21-GAP-02168"},"M21-GAP-02168":{"line":5423,"offset":967754,"length":206,"previous":"M21-GAP-02167","next":"M21-GAP-02169"},"M21-GAP-02169":{"line":5424,"offset":967960,"length":207,"previous":"M21-GAP-02168","next":"M21-GAP-02170"},"M21-GAP-02170":{"line":5425,"offset":968167,"length":207,"previous":"M21-GAP-02169","next":"M21-GAP-02171"},"M21-GAP-02171":{"line":5426,"offset":968374,"length":207,"previous":"M21-GAP-02170","next":"M21-GAP-02172"},"M21-GAP-02172":{"line":5427,"offset":968581,"length":207,"previous":"M21-GAP-02171","next":"M21-GAP-02173"},"M21-GAP-02173":{"line":5428,"offset":968788,"length":207,"previous":"M21-GAP-02172","next":"M21-GAP-02174"},"M21-GAP-02174":{"line":5429,"offset":968995,"length":207,"previous":"M21-GAP-02173","next":"M21-GAP-02175"},"M21-GAP-02175":{"line":5430,"offset":969202,"length":206,"previous":"M21-GAP-02174","next":"M21-GAP-02176"},"M21-GAP-02176":{"line":5431,"offset":969408,"length":206,"previous":"M21-GAP-02175","next":"M21-GAP-02177"},"M21-GAP-02177":{"line":5432,"offset":969614,"length":206,"previous":"M21-GAP-02176","next":"M21-GAP-02178"},"M21-GAP-02178":{"line":5433,"offset":969820,"length":206,"previous":"M21-GAP-02177","next":"M21-GAP-02179"},"M21-GAP-02179":{"line":5434,"offset":970026,"length":206,"previous":"M21-GAP-02178","next":"M21-GAP-02180"},"M21-GAP-02180":{"line":5435,"offset":970232,"length":206,"previous":"M21-GAP-02179","next":"M21-GAP-02181"},"M21-GAP-02181":{"line":5436,"offset":970438,"length":206,"previous":"M21-GAP-02180","next":"M21-GAP-02182"},"M21-GAP-02182":{"line":5437,"offset":970644,"length":206,"previous":"M21-GAP-02181","next":"M21-GAP-02183"},"M21-GAP-02183":{"line":5438,"offset":970850,"length":175,"previous":"M21-GAP-02182","next":"M21-GAP-02184"},"M21-GAP-02184":{"line":5439,"offset":971025,"length":175,"previous":"M21-GAP-02183","next":"M21-GAP-02185"},"M21-GAP-02185":{"line":5440,"offset":971200,"length":176,"previous":"M21-GAP-02184","next":"M21-GAP-02186"},"M21-GAP-02186":{"line":5441,"offset":971376,"length":176,"previous":"M21-GAP-02185","next":"M21-GAP-02187"},"M21-GAP-02187":{"line":5442,"offset":971552,"length":176,"previous":"M21-GAP-02186","next":"M21-GAP-02188"},"M21-GAP-02188":{"line":5443,"offset":971728,"length":176,"previous":"M21-GAP-02187","next":"M21-GAP-02189"},"M21-GAP-02189":{"line":5444,"offset":971904,"length":176,"previous":"M21-GAP-02188","next":"M21-GAP-02190"},"M21-GAP-02190":{"line":5445,"offset":972080,"length":176,"previous":"M21-GAP-02189","next":"M21-GAP-02191"},"M21-GAP-02191":{"line":5446,"offset":972256,"length":176,"previous":"M21-GAP-02190","next":"M21-GAP-02192"},"M21-GAP-02192":{"line":5447,"offset":972432,"length":176,"previous":"M21-GAP-02191","next":"M21-GAP-02193"},"M21-GAP-02193":{"line":5448,"offset":972608,"length":176,"previous":"M21-GAP-02192","next":"M21-GAP-02194"},"M21-GAP-02194":{"line":5449,"offset":972784,"length":176,"previous":"M21-GAP-02193","next":"M21-GAP-02195"},"M21-GAP-02195":{"line":5450,"offset":972960,"length":175,"previous":"M21-GAP-02194","next":"M21-GAP-02196"},"M21-GAP-02196":{"line":5451,"offset":973135,"length":176,"previous":"M21-GAP-02195","next":"M21-GAP-02197"},"M21-GAP-02197":{"line":5452,"offset":973311,"length":176,"previous":"M21-GAP-02196","next":"M21-GAP-02198"},"M21-GAP-02198":{"line":5453,"offset":973487,"length":176,"previous":"M21-GAP-02197","next":"M21-GAP-02199"},"M21-GAP-02199":{"line":5454,"offset":973663,"length":176,"previous":"M21-GAP-02198","next":"M21-GAP-02200"},"M21-GAP-02200":{"line":5455,"offset":973839,"length":176,"previous":"M21-GAP-02199","next":"M21-GAP-02201"},"M21-GAP-02201":{"line":5456,"offset":974015,"length":176,"previous":"M21-GAP-02200","next":"M21-GAP-02202"},"M21-GAP-02202":{"line":5457,"offset":974191,"length":176,"previous":"M21-GAP-02201","next":"M21-GAP-02203"},"M21-GAP-02203":{"line":5458,"offset":974367,"length":176,"previous":"M21-GAP-02202","next":"M21-GAP-02204"},"M21-GAP-02204":{"line":5459,"offset":974543,"length":176,"previous":"M21-GAP-02203","next":"M21-GAP-02205"},"M21-GAP-02205":{"line":5460,"offset":974719,"length":176,"previous":"M21-GAP-02204","next":"M21-GAP-02206"},"M21-GAP-02206":{"line":5461,"offset":974895,"length":175,"previous":"M21-GAP-02205","next":"M21-GAP-02207"},"M21-GAP-02207":{"line":5462,"offset":975070,"length":175,"previous":"M21-GAP-02206","next":"M21-GAP-02208"},"M21-GAP-02208":{"line":5463,"offset":975245,"length":175,"previous":"M21-GAP-02207","next":"M21-GAP-02209"},"M21-GAP-02209":{"line":5464,"offset":975420,"length":175,"previous":"M21-GAP-02208","next":"M21-GAP-02210"},"M21-GAP-02210":{"line":5465,"offset":975595,"length":175,"previous":"M21-GAP-02209","next":"M21-GAP-02211"},"M21-GAP-02211":{"line":5466,"offset":975770,"length":175,"previous":"M21-GAP-02210","next":"M21-GAP-02212"},"M21-GAP-02212":{"line":5467,"offset":975945,"length":175,"previous":"M21-GAP-02211","next":"M21-GAP-02213"},"M21-GAP-02213":{"line":5468,"offset":976120,"length":185,"previous":"M21-GAP-02212","next":"M21-GAP-02214"},"M21-GAP-02214":{"line":5469,"offset":976305,"length":185,"previous":"M21-GAP-02213","next":"M21-GAP-02215"},"M21-GAP-02215":{"line":5470,"offset":976490,"length":185,"previous":"M21-GAP-02214","next":"M21-GAP-02216"},"M21-GAP-02216":{"line":5471,"offset":976675,"length":178,"previous":"M21-GAP-02215","next":"M21-GAP-02217"},"M21-GAP-02217":{"line":5472,"offset":976853,"length":178,"previous":"M21-GAP-02216","next":"M21-GAP-02218"},"M21-GAP-02218":{"line":5473,"offset":977031,"length":179,"previous":"M21-GAP-02217","next":"M21-GAP-02219"},"M21-GAP-02219":{"line":5474,"offset":977210,"length":179,"previous":"M21-GAP-02218","next":"M21-GAP-02220"},"M21-GAP-02220":{"line":5475,"offset":977389,"length":179,"previous":"M21-GAP-02219","next":"M21-GAP-02221"},"M21-GAP-02221":{"line":5476,"offset":977568,"length":179,"previous":"M21-GAP-02220","next":"M21-GAP-02222"},"M21-GAP-02222":{"line":5477,"offset":977747,"length":179,"previous":"M21-GAP-02221","next":"M21-GAP-02223"},"M21-GAP-02223":{"line":5478,"offset":977926,"length":179,"previous":"M21-GAP-02222","next":"M21-GAP-02224"},"M21-GAP-02224":{"line":5479,"offset":978105,"length":179,"previous":"M21-GAP-02223","next":"M21-GAP-02225"},"M21-GAP-02225":{"line":5480,"offset":978284,"length":179,"previous":"M21-GAP-02224","next":"M21-GAP-02226"},"M21-GAP-02226":{"line":5481,"offset":978463,"length":178,"previous":"M21-GAP-02225","next":"M21-GAP-02227"},"M21-GAP-02227":{"line":5482,"offset":978641,"length":178,"previous":"M21-GAP-02226","next":"M21-GAP-02228"},"M21-GAP-02228":{"line":5483,"offset":978819,"length":178,"previous":"M21-GAP-02227","next":"M21-GAP-02229"},"M21-GAP-02229":{"line":5484,"offset":978997,"length":178,"previous":"M21-GAP-02228","next":"M21-GAP-02230"},"M21-GAP-02230":{"line":5485,"offset":979175,"length":178,"previous":"M21-GAP-02229","next":"M21-GAP-02231"},"M21-GAP-02231":{"line":5486,"offset":979353,"length":178,"previous":"M21-GAP-02230","next":"M21-GAP-02232"},"M21-GAP-02232":{"line":5487,"offset":979531,"length":178,"previous":"M21-GAP-02231","next":"M21-GAP-02233"},"M21-GAP-02233":{"line":5488,"offset":979709,"length":178,"previous":"M21-GAP-02232","next":"M21-GAP-02234"},"M21-GAP-02234":{"line":5489,"offset":979887,"length":171,"previous":"M21-GAP-02233","next":"M21-GAP-02235"},"M21-GAP-02235":{"line":5490,"offset":980058,"length":171,"previous":"M21-GAP-02234","next":"M21-GAP-02236"},"M21-GAP-02236":{"line":5491,"offset":980229,"length":172,"previous":"M21-GAP-02235","next":"M21-GAP-02237"},"M21-GAP-02237":{"line":5492,"offset":980401,"length":172,"previous":"M21-GAP-02236","next":"M21-GAP-02238"},"M21-GAP-02238":{"line":5493,"offset":980573,"length":172,"previous":"M21-GAP-02237","next":"M21-GAP-02239"},"M21-GAP-02239":{"line":5494,"offset":980745,"length":172,"previous":"M21-GAP-02238","next":"M21-GAP-02240"},"M21-GAP-02240":{"line":5495,"offset":980917,"length":172,"previous":"M21-GAP-02239","next":"M21-GAP-02241"},"M21-GAP-02241":{"line":5496,"offset":981089,"length":172,"previous":"M21-GAP-02240","next":"M21-GAP-02242"},"M21-GAP-02242":{"line":5497,"offset":981261,"length":172,"previous":"M21-GAP-02241","next":"M21-GAP-02243"},"M21-GAP-02243":{"line":5498,"offset":981433,"length":172,"previous":"M21-GAP-02242","next":"M21-GAP-02244"},"M21-GAP-02244":{"line":5499,"offset":981605,"length":172,"previous":"M21-GAP-02243","next":"M21-GAP-02245"},"M21-GAP-02245":{"line":5500,"offset":981777,"length":172,"previous":"M21-GAP-02244","next":"M21-GAP-02246"},"M21-GAP-02246":{"line":5501,"offset":981949,"length":171,"previous":"M21-GAP-02245","next":"M21-GAP-02247"},"M21-GAP-02247":{"line":5502,"offset":982120,"length":172,"previous":"M21-GAP-02246","next":"M21-GAP-02248"},"M21-GAP-02248":{"line":5503,"offset":982292,"length":172,"previous":"M21-GAP-02247","next":"M21-GAP-02249"},"M21-GAP-02249":{"line":5504,"offset":982464,"length":172,"previous":"M21-GAP-02248","next":"M21-GAP-02250"},"M21-GAP-02250":{"line":5505,"offset":982636,"length":172,"previous":"M21-GAP-02249","next":"M21-GAP-02251"},"M21-GAP-02251":{"line":5506,"offset":982808,"length":172,"previous":"M21-GAP-02250","next":"M21-GAP-02252"},"M21-GAP-02252":{"line":5507,"offset":982980,"length":172,"previous":"M21-GAP-02251","next":"M21-GAP-02253"},"M21-GAP-02253":{"line":5508,"offset":983152,"length":172,"previous":"M21-GAP-02252","next":"M21-GAP-02254"},"M21-GAP-02254":{"line":5509,"offset":983324,"length":172,"previous":"M21-GAP-02253","next":"M21-GAP-02255"},"M21-GAP-02255":{"line":5510,"offset":983496,"length":172,"previous":"M21-GAP-02254","next":"M21-GAP-02256"},"M21-GAP-02256":{"line":5511,"offset":983668,"length":172,"previous":"M21-GAP-02255","next":"M21-GAP-02257"},"M21-GAP-02257":{"line":5512,"offset":983840,"length":171,"previous":"M21-GAP-02256","next":"M21-GAP-02258"},"M21-GAP-02258":{"line":5513,"offset":984011,"length":172,"previous":"M21-GAP-02257","next":"M21-GAP-02259"},"M21-GAP-02259":{"line":5514,"offset":984183,"length":172,"previous":"M21-GAP-02258","next":"M21-GAP-02260"},"M21-GAP-02260":{"line":5515,"offset":984355,"length":172,"previous":"M21-GAP-02259","next":"M21-GAP-02261"},"M21-GAP-02261":{"line":5516,"offset":984527,"length":172,"previous":"M21-GAP-02260","next":"M21-GAP-02262"},"M21-GAP-02262":{"line":5517,"offset":984699,"length":172,"previous":"M21-GAP-02261","next":"M21-GAP-02263"},"M21-GAP-02263":{"line":5518,"offset":984871,"length":172,"previous":"M21-GAP-02262","next":"M21-GAP-02264"},"M21-GAP-02264":{"line":5519,"offset":985043,"length":172,"previous":"M21-GAP-02263","next":"M21-GAP-02265"},"M21-GAP-02265":{"line":5520,"offset":985215,"length":172,"previous":"M21-GAP-02264","next":"M21-GAP-02266"},"M21-GAP-02266":{"line":5521,"offset":985387,"length":172,"previous":"M21-GAP-02265","next":"M21-GAP-02267"},"M21-GAP-02267":{"line":5522,"offset":985559,"length":172,"previous":"M21-GAP-02266","next":"M21-GAP-02268"},"M21-GAP-02268":{"line":5523,"offset":985731,"length":171,"previous":"M21-GAP-02267","next":"M21-GAP-02269"},"M21-GAP-02269":{"line":5524,"offset":985902,"length":172,"previous":"M21-GAP-02268","next":"M21-GAP-02270"},"M21-GAP-02270":{"line":5525,"offset":986074,"length":172,"previous":"M21-GAP-02269","next":"M21-GAP-02271"},"M21-GAP-02271":{"line":5526,"offset":986246,"length":172,"previous":"M21-GAP-02270","next":"M21-GAP-02272"},"M21-GAP-02272":{"line":5527,"offset":986418,"length":172,"previous":"M21-GAP-02271","next":"M21-GAP-02273"},"M21-GAP-02273":{"line":5528,"offset":986590,"length":172,"previous":"M21-GAP-02272","next":"M21-GAP-02274"},"M21-GAP-02274":{"line":5529,"offset":986762,"length":172,"previous":"M21-GAP-02273","next":"M21-GAP-02275"},"M21-GAP-02275":{"line":5530,"offset":986934,"length":172,"previous":"M21-GAP-02274","next":"M21-GAP-02276"},"M21-GAP-02276":{"line":5531,"offset":987106,"length":172,"previous":"M21-GAP-02275","next":"M21-GAP-02277"},"M21-GAP-02277":{"line":5532,"offset":987278,"length":172,"previous":"M21-GAP-02276","next":"M21-GAP-02278"},"M21-GAP-02278":{"line":5533,"offset":987450,"length":172,"previous":"M21-GAP-02277","next":"M21-GAP-02279"},"M21-GAP-02279":{"line":5534,"offset":987622,"length":171,"previous":"M21-GAP-02278","next":"M21-GAP-02280"},"M21-GAP-02280":{"line":5535,"offset":987793,"length":172,"previous":"M21-GAP-02279","next":"M21-GAP-02281"},"M21-GAP-02281":{"line":5536,"offset":987965,"length":172,"previous":"M21-GAP-02280","next":"M21-GAP-02282"},"M21-GAP-02282":{"line":5537,"offset":988137,"length":172,"previous":"M21-GAP-02281","next":"M21-GAP-02283"},"M21-GAP-02283":{"line":5538,"offset":988309,"length":171,"previous":"M21-GAP-02282","next":"M21-GAP-02284"},"M21-GAP-02284":{"line":5539,"offset":988480,"length":171,"previous":"M21-GAP-02283","next":"M21-GAP-02285"},"M21-GAP-02285":{"line":5540,"offset":988651,"length":171,"previous":"M21-GAP-02284","next":"M21-GAP-02286"},"M21-GAP-02286":{"line":5541,"offset":988822,"length":171,"previous":"M21-GAP-02285","next":"M21-GAP-02287"},"M21-GAP-02287":{"line":5542,"offset":988993,"length":184,"previous":"M21-GAP-02286","next":"M21-GAP-02288"},"M21-GAP-02288":{"line":5543,"offset":989177,"length":184,"previous":"M21-GAP-02287","next":"M21-GAP-02289"},"M21-GAP-02289":{"line":5544,"offset":989361,"length":184,"previous":"M21-GAP-02288","next":"M21-GAP-02290"},"M21-GAP-02290":{"line":5545,"offset":989545,"length":184,"previous":"M21-GAP-02289","next":"M21-GAP-02291"},"M21-GAP-02291":{"line":5546,"offset":989729,"length":197,"previous":"M21-GAP-02290","next":"M21-GAP-02292"},"M21-GAP-02292":{"line":5547,"offset":989926,"length":197,"previous":"M21-GAP-02291","next":"M21-GAP-02293"},"M21-GAP-02293":{"line":5548,"offset":990123,"length":195,"previous":"M21-GAP-02292","next":"M21-GAP-02294"},"M21-GAP-02294":{"line":5549,"offset":990318,"length":197,"previous":"M21-GAP-02293","next":"M21-GAP-02295"},"M21-GAP-02295":{"line":5550,"offset":990515,"length":197,"previous":"M21-GAP-02294","next":"M21-GAP-02296"},"M21-GAP-02296":{"line":5551,"offset":990712,"length":196,"previous":"M21-GAP-02295","next":"M21-GAP-02297"},"M21-GAP-02297":{"line":5552,"offset":990908,"length":212,"previous":"M21-GAP-02296","next":"M21-GAP-02298"},"M21-GAP-02298":{"line":5553,"offset":991120,"length":212,"previous":"M21-GAP-02297","next":"M21-GAP-02299"},"M21-GAP-02299":{"line":5554,"offset":991332,"length":212,"previous":"M21-GAP-02298","next":"M21-GAP-02300"},"M21-GAP-02300":{"line":5555,"offset":991544,"length":212,"previous":"M21-GAP-02299","next":"M21-GAP-02301"},"M21-GAP-02301":{"line":5556,"offset":991756,"length":212,"previous":"M21-GAP-02300","next":"M21-GAP-02302"},"M21-GAP-02302":{"line":5557,"offset":991968,"length":201,"previous":"M21-GAP-02301","next":"M21-GAP-02303"},"M21-GAP-02303":{"line":5558,"offset":992169,"length":201,"previous":"M21-GAP-02302","next":"M21-GAP-02304"},"M21-GAP-02304":{"line":5559,"offset":992370,"length":201,"previous":"M21-GAP-02303","next":"M21-GAP-02305"},"M21-GAP-02305":{"line":5560,"offset":992571,"length":201,"previous":"M21-GAP-02304","next":"M21-GAP-02306"},"M21-GAP-02306":{"line":5561,"offset":992772,"length":201,"previous":"M21-GAP-02305","next":"M21-GAP-02307"},"M21-GAP-02307":{"line":5562,"offset":992973,"length":215,"previous":"M21-GAP-02306","next":"M21-GAP-02308"},"M21-GAP-02308":{"line":5563,"offset":993188,"length":215,"previous":"M21-GAP-02307","next":"M21-GAP-02309"},"M21-GAP-02309":{"line":5564,"offset":993403,"length":215,"previous":"M21-GAP-02308","next":"M21-GAP-02310"},"M21-GAP-02310":{"line":5565,"offset":993618,"length":204,"previous":"M21-GAP-02309","next":"M21-GAP-02311"},"M21-GAP-02311":{"line":5566,"offset":993822,"length":204,"previous":"M21-GAP-02310","next":"M21-GAP-02312"},"M21-GAP-02312":{"line":5567,"offset":994026,"length":204,"previous":"M21-GAP-02311","next":"M21-GAP-02313"},"M21-GAP-02313":{"line":5568,"offset":994230,"length":214,"previous":"M21-GAP-02312","next":"M21-GAP-02314"},"M21-GAP-02314":{"line":5569,"offset":994444,"length":214,"previous":"M21-GAP-02313","next":"M21-GAP-02315"},"M21-GAP-02315":{"line":5570,"offset":994658,"length":214,"previous":"M21-GAP-02314","next":"M21-GAP-02316"},"M21-GAP-02316":{"line":5571,"offset":994872,"length":203,"previous":"M21-GAP-02315","next":"M21-GAP-02317"},"M21-GAP-02317":{"line":5572,"offset":995075,"length":203,"previous":"M21-GAP-02316","next":"M21-GAP-02318"},"M21-GAP-02318":{"line":5573,"offset":995278,"length":203,"previous":"M21-GAP-02317","next":"M21-GAP-02319"},"M21-GAP-02319":{"line":5574,"offset":995481,"length":207,"previous":"M21-GAP-02318","next":"M21-GAP-02320"},"M21-GAP-02320":{"line":5575,"offset":995688,"length":207,"previous":"M21-GAP-02319","next":"M21-GAP-02321"},"M21-GAP-02321":{"line":5576,"offset":995895,"length":207,"previous":"M21-GAP-02320","next":"M21-GAP-02322"},"M21-GAP-02322":{"line":5577,"offset":996102,"length":207,"previous":"M21-GAP-02321","next":"M21-GAP-02323"},"M21-GAP-02323":{"line":5578,"offset":996309,"length":207,"previous":"M21-GAP-02322","next":"M21-GAP-02324"},"M21-GAP-02324":{"line":5579,"offset":996516,"length":196,"previous":"M21-GAP-02323","next":"M21-GAP-02325"},"M21-GAP-02325":{"line":5580,"offset":996712,"length":196,"previous":"M21-GAP-02324","next":"M21-GAP-02326"},"M21-GAP-02326":{"line":5581,"offset":996908,"length":196,"previous":"M21-GAP-02325","next":"M21-GAP-02327"},"M21-GAP-02327":{"line":5582,"offset":997104,"length":196,"previous":"M21-GAP-02326","next":"M21-GAP-02328"},"M21-GAP-02328":{"line":5583,"offset":997300,"length":196,"previous":"M21-GAP-02327","next":"M21-GAP-02329"},"M21-GAP-02329":{"line":5584,"offset":997496,"length":184,"previous":"M21-GAP-02328","next":"M21-GAP-02330"},"M21-GAP-02330":{"line":5585,"offset":997680,"length":184,"previous":"M21-GAP-02329","next":"M21-GAP-02331"},"M21-GAP-02331":{"line":5586,"offset":997864,"length":185,"previous":"M21-GAP-02330","next":"M21-GAP-02332"},"M21-GAP-02332":{"line":5587,"offset":998049,"length":185,"previous":"M21-GAP-02331","next":"M21-GAP-02333"},"M21-GAP-02333":{"line":5588,"offset":998234,"length":185,"previous":"M21-GAP-02332","next":"M21-GAP-02334"},"M21-GAP-02334":{"line":5589,"offset":998419,"length":185,"previous":"M21-GAP-02333","next":"M21-GAP-02335"},"M21-GAP-02335":{"line":5590,"offset":998604,"length":185,"previous":"M21-GAP-02334","next":"M21-GAP-02336"},"M21-GAP-02336":{"line":5591,"offset":998789,"length":185,"previous":"M21-GAP-02335","next":"M21-GAP-02337"},"M21-GAP-02337":{"line":5592,"offset":998974,"length":185,"previous":"M21-GAP-02336","next":"M21-GAP-02338"},"M21-GAP-02338":{"line":5593,"offset":999159,"length":185,"previous":"M21-GAP-02337","next":"M21-GAP-02339"},"M21-GAP-02339":{"line":5594,"offset":999344,"length":185,"previous":"M21-GAP-02338","next":"M21-GAP-02340"},"M21-GAP-02340":{"line":5595,"offset":999529,"length":185,"previous":"M21-GAP-02339","next":"M21-GAP-02341"},"M21-GAP-02341":{"line":5596,"offset":999714,"length":184,"previous":"M21-GAP-02340","next":"M21-GAP-02342"},"M21-GAP-02342":{"line":5597,"offset":999898,"length":185,"previous":"M21-GAP-02341","next":"M21-GAP-02343"},"M21-GAP-02343":{"line":5598,"offset":1000083,"length":185,"previous":"M21-GAP-02342","next":"M21-GAP-02344"},"M21-GAP-02344":{"line":5599,"offset":1000268,"length":185,"previous":"M21-GAP-02343","next":"M21-GAP-02345"},"M21-GAP-02345":{"line":5600,"offset":1000453,"length":185,"previous":"M21-GAP-02344","next":"M21-GAP-02346"},"M21-GAP-02346":{"line":5601,"offset":1000638,"length":185,"previous":"M21-GAP-02345","next":"M21-GAP-02347"},"M21-GAP-02347":{"line":5602,"offset":1000823,"length":185,"previous":"M21-GAP-02346","next":"M21-GAP-02348"},"M21-GAP-02348":{"line":5603,"offset":1001008,"length":185,"previous":"M21-GAP-02347","next":"M21-GAP-02349"},"M21-GAP-02349":{"line":5604,"offset":1001193,"length":185,"previous":"M21-GAP-02348","next":"M21-GAP-02350"},"M21-GAP-02350":{"line":5605,"offset":1001378,"length":185,"previous":"M21-GAP-02349","next":"M21-GAP-02351"},"M21-GAP-02351":{"line":5606,"offset":1001563,"length":185,"previous":"M21-GAP-02350","next":"M21-GAP-02352"},"M21-GAP-02352":{"line":5607,"offset":1001748,"length":184,"previous":"M21-GAP-02351","next":"M21-GAP-02353"},"M21-GAP-02353":{"line":5608,"offset":1001932,"length":185,"previous":"M21-GAP-02352","next":"M21-GAP-02354"},"M21-GAP-02354":{"line":5609,"offset":1002117,"length":185,"previous":"M21-GAP-02353","next":"M21-GAP-02355"},"M21-GAP-02355":{"line":5610,"offset":1002302,"length":185,"previous":"M21-GAP-02354","next":"M21-GAP-02356"},"M21-GAP-02356":{"line":5611,"offset":1002487,"length":185,"previous":"M21-GAP-02355","next":"M21-GAP-02357"},"M21-GAP-02357":{"line":5612,"offset":1002672,"length":185,"previous":"M21-GAP-02356","next":"M21-GAP-02358"},"M21-GAP-02358":{"line":5613,"offset":1002857,"length":185,"previous":"M21-GAP-02357","next":"M21-GAP-02359"},"M21-GAP-02359":{"line":5614,"offset":1003042,"length":185,"previous":"M21-GAP-02358","next":"M21-GAP-02360"},"M21-GAP-02360":{"line":5615,"offset":1003227,"length":185,"previous":"M21-GAP-02359","next":"M21-GAP-02361"},"M21-GAP-02361":{"line":5616,"offset":1003412,"length":185,"previous":"M21-GAP-02360","next":"M21-GAP-02362"},"M21-GAP-02362":{"line":5617,"offset":1003597,"length":185,"previous":"M21-GAP-02361","next":"M21-GAP-02363"},"M21-GAP-02363":{"line":5618,"offset":1003782,"length":184,"previous":"M21-GAP-02362","next":"M21-GAP-02364"},"M21-GAP-02364":{"line":5619,"offset":1003966,"length":185,"previous":"M21-GAP-02363","next":"M21-GAP-02365"},"M21-GAP-02365":{"line":5620,"offset":1004151,"length":185,"previous":"M21-GAP-02364","next":"M21-GAP-02366"},"M21-GAP-02366":{"line":5621,"offset":1004336,"length":185,"previous":"M21-GAP-02365","next":"M21-GAP-02367"},"M21-GAP-02367":{"line":5622,"offset":1004521,"length":185,"previous":"M21-GAP-02366","next":"M21-GAP-02368"},"M21-GAP-02368":{"line":5623,"offset":1004706,"length":185,"previous":"M21-GAP-02367","next":"M21-GAP-02369"},"M21-GAP-02369":{"line":5624,"offset":1004891,"length":185,"previous":"M21-GAP-02368","next":"M21-GAP-02370"},"M21-GAP-02370":{"line":5625,"offset":1005076,"length":185,"previous":"M21-GAP-02369","next":"M21-GAP-02371"},"M21-GAP-02371":{"line":5626,"offset":1005261,"length":185,"previous":"M21-GAP-02370","next":"M21-GAP-02372"},"M21-GAP-02372":{"line":5627,"offset":1005446,"length":185,"previous":"M21-GAP-02371","next":"M21-GAP-02373"},"M21-GAP-02373":{"line":5628,"offset":1005631,"length":185,"previous":"M21-GAP-02372","next":"M21-GAP-02374"},"M21-GAP-02374":{"line":5629,"offset":1005816,"length":184,"previous":"M21-GAP-02373","next":"M21-GAP-02375"},"M21-GAP-02375":{"line":5630,"offset":1006000,"length":185,"previous":"M21-GAP-02374","next":"M21-GAP-02376"},"M21-GAP-02376":{"line":5631,"offset":1006185,"length":185,"previous":"M21-GAP-02375","next":"M21-GAP-02377"},"M21-GAP-02377":{"line":5632,"offset":1006370,"length":185,"previous":"M21-GAP-02376","next":"M21-GAP-02378"},"M21-GAP-02378":{"line":5633,"offset":1006555,"length":185,"previous":"M21-GAP-02377","next":"M21-GAP-02379"},"M21-GAP-02379":{"line":5634,"offset":1006740,"length":185,"previous":"M21-GAP-02378","next":"M21-GAP-02380"},"M21-GAP-02380":{"line":5635,"offset":1006925,"length":185,"previous":"M21-GAP-02379","next":"M21-GAP-02381"},"M21-GAP-02381":{"line":5636,"offset":1007110,"length":185,"previous":"M21-GAP-02380","next":"M21-GAP-02382"},"M21-GAP-02382":{"line":5637,"offset":1007295,"length":185,"previous":"M21-GAP-02381","next":"M21-GAP-02383"},"M21-GAP-02383":{"line":5638,"offset":1007480,"length":185,"previous":"M21-GAP-02382","next":"M21-GAP-02384"},"M21-GAP-02384":{"line":5639,"offset":1007665,"length":185,"previous":"M21-GAP-02383","next":"M21-GAP-02385"},"M21-GAP-02385":{"line":5640,"offset":1007850,"length":184,"previous":"M21-GAP-02384","next":"M21-GAP-02386"},"M21-GAP-02386":{"line":5641,"offset":1008034,"length":185,"previous":"M21-GAP-02385","next":"M21-GAP-02387"},"M21-GAP-02387":{"line":5642,"offset":1008219,"length":185,"previous":"M21-GAP-02386","next":"M21-GAP-02388"},"M21-GAP-02388":{"line":5643,"offset":1008404,"length":185,"previous":"M21-GAP-02387","next":"M21-GAP-02389"},"M21-GAP-02389":{"line":5644,"offset":1008589,"length":185,"previous":"M21-GAP-02388","next":"M21-GAP-02390"},"M21-GAP-02390":{"line":5645,"offset":1008774,"length":185,"previous":"M21-GAP-02389","next":"M21-GAP-02391"},"M21-GAP-02391":{"line":5646,"offset":1008959,"length":185,"previous":"M21-GAP-02390","next":"M21-GAP-02392"},"M21-GAP-02392":{"line":5647,"offset":1009144,"length":185,"previous":"M21-GAP-02391","next":"M21-GAP-02393"},"M21-GAP-02393":{"line":5648,"offset":1009329,"length":185,"previous":"M21-GAP-02392","next":"M21-GAP-02394"},"M21-GAP-02394":{"line":5649,"offset":1009514,"length":185,"previous":"M21-GAP-02393","next":"M21-GAP-02395"},"M21-GAP-02395":{"line":5650,"offset":1009699,"length":185,"previous":"M21-GAP-02394","next":"M21-GAP-02396"},"M21-GAP-02396":{"line":5651,"offset":1009884,"length":184,"previous":"M21-GAP-02395","next":"M21-GAP-02397"},"M21-GAP-02397":{"line":5652,"offset":1010068,"length":185,"previous":"M21-GAP-02396","next":"M21-GAP-02398"},"M21-GAP-02398":{"line":5653,"offset":1010253,"length":185,"previous":"M21-GAP-02397","next":"M21-GAP-02399"},"M21-GAP-02399":{"line":5654,"offset":1010438,"length":185,"previous":"M21-GAP-02398","next":"M21-GAP-02400"},"M21-GAP-02400":{"line":5655,"offset":1010623,"length":185,"previous":"M21-GAP-02399","next":"M21-GAP-02401"},"M21-GAP-02401":{"line":5656,"offset":1010808,"length":185,"previous":"M21-GAP-02400","next":"M21-GAP-02402"},"M21-GAP-02402":{"line":5657,"offset":1010993,"length":185,"previous":"M21-GAP-02401","next":"M21-GAP-02403"},"M21-GAP-02403":{"line":5658,"offset":1011178,"length":185,"previous":"M21-GAP-02402","next":"M21-GAP-02404"},"M21-GAP-02404":{"line":5659,"offset":1011363,"length":185,"previous":"M21-GAP-02403","next":"M21-GAP-02405"},"M21-GAP-02405":{"line":5660,"offset":1011548,"length":185,"previous":"M21-GAP-02404","next":"M21-GAP-02406"},"M21-GAP-02406":{"line":5661,"offset":1011733,"length":185,"previous":"M21-GAP-02405","next":"M21-GAP-02407"},"M21-GAP-02407":{"line":5662,"offset":1011918,"length":184,"previous":"M21-GAP-02406","next":"M21-GAP-02408"},"M21-GAP-02408":{"line":5663,"offset":1012102,"length":185,"previous":"M21-GAP-02407","next":"M21-GAP-02409"},"M21-GAP-02409":{"line":5664,"offset":1012287,"length":185,"previous":"M21-GAP-02408","next":"M21-GAP-02410"},"M21-GAP-02410":{"line":5665,"offset":1012472,"length":185,"previous":"M21-GAP-02409","next":"M21-GAP-02411"},"M21-GAP-02411":{"line":5666,"offset":1012657,"length":185,"previous":"M21-GAP-02410","next":"M21-GAP-02412"},"M21-GAP-02412":{"line":5667,"offset":1012842,"length":185,"previous":"M21-GAP-02411","next":"M21-GAP-02413"},"M21-GAP-02413":{"line":5668,"offset":1013027,"length":185,"previous":"M21-GAP-02412","next":"M21-GAP-02414"},"M21-GAP-02414":{"line":5669,"offset":1013212,"length":185,"previous":"M21-GAP-02413","next":"M21-GAP-02415"},"M21-GAP-02415":{"line":5670,"offset":1013397,"length":185,"previous":"M21-GAP-02414","next":"M21-GAP-02416"},"M21-GAP-02416":{"line":5671,"offset":1013582,"length":184,"previous":"M21-GAP-02415","next":"M21-GAP-02417"},"M21-GAP-02417":{"line":5672,"offset":1013766,"length":191,"previous":"M21-GAP-02416","next":"M21-GAP-02418"},"M21-GAP-02418":{"line":5673,"offset":1013957,"length":191,"previous":"M21-GAP-02417","next":"M21-GAP-02419"},"M21-GAP-02419":{"line":5674,"offset":1014148,"length":192,"previous":"M21-GAP-02418","next":"M21-GAP-02420"},"M21-GAP-02420":{"line":5675,"offset":1014340,"length":192,"previous":"M21-GAP-02419","next":"M21-GAP-02421"},"M21-GAP-02421":{"line":5676,"offset":1014532,"length":192,"previous":"M21-GAP-02420","next":"M21-GAP-02422"},"M21-GAP-02422":{"line":5677,"offset":1014724,"length":192,"previous":"M21-GAP-02421","next":"M21-GAP-02423"},"M21-GAP-02423":{"line":5678,"offset":1014916,"length":191,"previous":"M21-GAP-02422","next":"M21-GAP-02424"},"M21-GAP-02424":{"line":5679,"offset":1015107,"length":191,"previous":"M21-GAP-02423","next":"M21-GAP-02425"},"M21-GAP-02425":{"line":5680,"offset":1015298,"length":191,"previous":"M21-GAP-02424","next":"M21-GAP-02426"},"M21-GAP-02426":{"line":5681,"offset":1015489,"length":191,"previous":"M21-GAP-02425","next":"M21-GAP-02427"},"M21-GAP-02427":{"line":5682,"offset":1015680,"length":191,"previous":"M21-GAP-02426","next":"M21-GAP-02428"},"M21-GAP-02428":{"line":5683,"offset":1015871,"length":191,"previous":"M21-GAP-02427","next":"M21-GAP-02429"},"M21-GAP-02429":{"line":5684,"offset":1016062,"length":191,"previous":"M21-GAP-02428","next":"M21-GAP-02430"},"M21-GAP-02430":{"line":5685,"offset":1016253,"length":191,"previous":"M21-GAP-02429","next":"M21-GAP-02431"},"M21-GAP-02431":{"line":5686,"offset":1016444,"length":187,"previous":"M21-GAP-02430","next":"M21-GAP-02432"},"M21-GAP-02432":{"line":5687,"offset":1016631,"length":187,"previous":"M21-GAP-02431","next":"M21-GAP-02433"},"M21-GAP-02433":{"line":5688,"offset":1016818,"length":188,"previous":"M21-GAP-02432","next":"M21-GAP-02434"},"M21-GAP-02434":{"line":5689,"offset":1017006,"length":188,"previous":"M21-GAP-02433","next":"M21-GAP-02435"},"M21-GAP-02435":{"line":5690,"offset":1017194,"length":188,"previous":"M21-GAP-02434","next":"M21-GAP-02436"},"M21-GAP-02436":{"line":5691,"offset":1017382,"length":188,"previous":"M21-GAP-02435","next":"M21-GAP-02437"},"M21-GAP-02437":{"line":5692,"offset":1017570,"length":188,"previous":"M21-GAP-02436","next":"M21-GAP-02438"},"M21-GAP-02438":{"line":5693,"offset":1017758,"length":188,"previous":"M21-GAP-02437","next":"M21-GAP-02439"},"M21-GAP-02439":{"line":5694,"offset":1017946,"length":188,"previous":"M21-GAP-02438","next":"M21-GAP-02440"},"M21-GAP-02440":{"line":5695,"offset":1018134,"length":188,"previous":"M21-GAP-02439","next":"M21-GAP-02441"},"M21-GAP-02441":{"line":5696,"offset":1018322,"length":188,"previous":"M21-GAP-02440","next":"M21-GAP-02442"},"M21-GAP-02442":{"line":5697,"offset":1018510,"length":188,"previous":"M21-GAP-02441","next":"M21-GAP-02443"},"M21-GAP-02443":{"line":5698,"offset":1018698,"length":187,"previous":"M21-GAP-02442","next":"M21-GAP-02444"},"M21-GAP-02444":{"line":5699,"offset":1018885,"length":187,"previous":"M21-GAP-02443","next":"M21-GAP-02445"},"M21-GAP-02445":{"line":5700,"offset":1019072,"length":187,"previous":"M21-GAP-02444","next":"M21-GAP-02446"},"M21-GAP-02446":{"line":5701,"offset":1019259,"length":187,"previous":"M21-GAP-02445","next":"M21-GAP-02447"},"M21-GAP-02447":{"line":5702,"offset":1019446,"length":187,"previous":"M21-GAP-02446","next":"M21-GAP-02448"},"M21-GAP-02448":{"line":5703,"offset":1019633,"length":187,"previous":"M21-GAP-02447","next":"M21-GAP-02449"},"M21-GAP-02449":{"line":5704,"offset":1019820,"length":187,"previous":"M21-GAP-02448","next":"M21-GAP-02450"},"M21-GAP-02450":{"line":5705,"offset":1020007,"length":187,"previous":"M21-GAP-02449","next":"M21-GAP-02451"},"M21-GAP-02451":{"line":5706,"offset":1020194,"length":186,"previous":"M21-GAP-02450","next":"M21-GAP-02452"},"M21-GAP-02452":{"line":5707,"offset":1020380,"length":181,"previous":"M21-GAP-02451","next":"M21-GAP-02453"},"M21-GAP-02453":{"line":5708,"offset":1020561,"length":181,"previous":"M21-GAP-02452","next":"M21-GAP-02454"},"M21-GAP-02454":{"line":5709,"offset":1020742,"length":182,"previous":"M21-GAP-02453","next":"M21-GAP-02455"},"M21-GAP-02455":{"line":5710,"offset":1020924,"length":182,"previous":"M21-GAP-02454","next":"M21-GAP-02456"},"M21-GAP-02456":{"line":5711,"offset":1021106,"length":182,"previous":"M21-GAP-02455","next":"M21-GAP-02457"},"M21-GAP-02457":{"line":5712,"offset":1021288,"length":182,"previous":"M21-GAP-02456","next":"M21-GAP-02458"},"M21-GAP-02458":{"line":5713,"offset":1021470,"length":181,"previous":"M21-GAP-02457","next":"M21-GAP-02459"},"M21-GAP-02459":{"line":5714,"offset":1021651,"length":181,"previous":"M21-GAP-02458","next":"M21-GAP-02460"},"M21-GAP-02460":{"line":5715,"offset":1021832,"length":181,"previous":"M21-GAP-02459","next":"M21-GAP-02461"},"M21-GAP-02461":{"line":5716,"offset":1022013,"length":181,"previous":"M21-GAP-02460","next":"M21-GAP-02462"},"M21-GAP-02462":{"line":5717,"offset":1022194,"length":181,"previous":"M21-GAP-02461","next":"M21-GAP-02463"},"M21-GAP-02463":{"line":5718,"offset":1022375,"length":181,"previous":"M21-GAP-02462","next":"M21-GAP-02464"},"M21-GAP-02464":{"line":5719,"offset":1022556,"length":181,"previous":"M21-GAP-02463","next":"M21-GAP-02465"},"M21-GAP-02465":{"line":5720,"offset":1022737,"length":181,"previous":"M21-GAP-02464","next":"M21-GAP-02466"},"M21-GAP-02466":{"line":5721,"offset":1022918,"length":173,"previous":"M21-GAP-02465","next":"M21-GAP-02467"},"M21-GAP-02467":{"line":5722,"offset":1023091,"length":173,"previous":"M21-GAP-02466","next":"M21-GAP-02468"},"M21-GAP-02468":{"line":5723,"offset":1023264,"length":174,"previous":"M21-GAP-02467","next":"M21-GAP-02469"},"M21-GAP-02469":{"line":5724,"offset":1023438,"length":174,"previous":"M21-GAP-02468","next":"M21-GAP-02470"},"M21-GAP-02470":{"line":5725,"offset":1023612,"length":174,"previous":"M21-GAP-02469","next":"M21-GAP-02471"},"M21-GAP-02471":{"line":5726,"offset":1023786,"length":174,"previous":"M21-GAP-02470","next":"M21-GAP-02472"},"M21-GAP-02472":{"line":5727,"offset":1023960,"length":174,"previous":"M21-GAP-02471","next":"M21-GAP-02473"},"M21-GAP-02473":{"line":5728,"offset":1024134,"length":174,"previous":"M21-GAP-02472","next":"M21-GAP-02474"},"M21-GAP-02474":{"line":5729,"offset":1024308,"length":174,"previous":"M21-GAP-02473","next":"M21-GAP-02475"},"M21-GAP-02475":{"line":5730,"offset":1024482,"length":174,"previous":"M21-GAP-02474","next":"M21-GAP-02476"},"M21-GAP-02476":{"line":5731,"offset":1024656,"length":174,"previous":"M21-GAP-02475","next":"M21-GAP-02477"},"M21-GAP-02477":{"line":5732,"offset":1024830,"length":174,"previous":"M21-GAP-02476","next":"M21-GAP-02478"},"M21-GAP-02478":{"line":5733,"offset":1025004,"length":173,"previous":"M21-GAP-02477","next":"M21-GAP-02479"},"M21-GAP-02479":{"line":5734,"offset":1025177,"length":174,"previous":"M21-GAP-02478","next":"M21-GAP-02480"},"M21-GAP-02480":{"line":5735,"offset":1025351,"length":174,"previous":"M21-GAP-02479","next":"M21-GAP-02481"},"M21-GAP-02481":{"line":5736,"offset":1025525,"length":174,"previous":"M21-GAP-02480","next":"M21-GAP-02482"},"M21-GAP-02482":{"line":5737,"offset":1025699,"length":174,"previous":"M21-GAP-02481","next":"M21-GAP-02483"},"M21-GAP-02483":{"line":5738,"offset":1025873,"length":174,"previous":"M21-GAP-02482","next":"M21-GAP-02484"},"M21-GAP-02484":{"line":5739,"offset":1026047,"length":174,"previous":"M21-GAP-02483","next":"M21-GAP-02485"},"M21-GAP-02485":{"line":5740,"offset":1026221,"length":173,"previous":"M21-GAP-02484","next":"M21-GAP-02486"},"M21-GAP-02486":{"line":5741,"offset":1026394,"length":173,"previous":"M21-GAP-02485","next":"M21-GAP-02487"},"M21-GAP-02487":{"line":5742,"offset":1026567,"length":173,"previous":"M21-GAP-02486","next":"M21-GAP-02488"},"M21-GAP-02488":{"line":5743,"offset":1026740,"length":173,"previous":"M21-GAP-02487","next":"M21-GAP-02489"},"M21-GAP-02489":{"line":5744,"offset":1026913,"length":173,"previous":"M21-GAP-02488","next":"M21-GAP-02490"},"M21-GAP-02490":{"line":5745,"offset":1027086,"length":173,"previous":"M21-GAP-02489","next":"M21-GAP-02491"},"M21-GAP-02491":{"line":5746,"offset":1027259,"length":173,"previous":"M21-GAP-02490","next":"M21-GAP-02492"},"M21-GAP-02492":{"line":5747,"offset":1027432,"length":180,"previous":"M21-GAP-02491","next":"M21-GAP-02493"},"M21-GAP-02493":{"line":5748,"offset":1027612,"length":180,"previous":"M21-GAP-02492","next":"M21-GAP-02494"},"M21-GAP-02494":{"line":5749,"offset":1027792,"length":181,"previous":"M21-GAP-02493","next":"M21-GAP-02495"},"M21-GAP-02495":{"line":5750,"offset":1027973,"length":181,"previous":"M21-GAP-02494","next":"M21-GAP-02496"},"M21-GAP-02496":{"line":5751,"offset":1028154,"length":181,"previous":"M21-GAP-02495","next":"M21-GAP-02497"},"M21-GAP-02497":{"line":5752,"offset":1028335,"length":181,"previous":"M21-GAP-02496","next":"M21-GAP-02498"},"M21-GAP-02498":{"line":5753,"offset":1028516,"length":181,"previous":"M21-GAP-02497","next":"M21-GAP-02499"},"M21-GAP-02499":{"line":5754,"offset":1028697,"length":181,"previous":"M21-GAP-02498","next":"M21-GAP-02500"},"M21-GAP-02500":{"line":5755,"offset":1028878,"length":180,"previous":"M21-GAP-02499","next":"M21-GAP-02501"},"M21-GAP-02501":{"line":5756,"offset":1029058,"length":180,"previous":"M21-GAP-02500","next":"M21-GAP-02502"},"M21-GAP-02502":{"line":5757,"offset":1029238,"length":180,"previous":"M21-GAP-02501","next":"M21-GAP-02503"},"M21-GAP-02503":{"line":5758,"offset":1029418,"length":180,"previous":"M21-GAP-02502","next":"M21-GAP-02504"},"M21-GAP-02504":{"line":5759,"offset":1029598,"length":180,"previous":"M21-GAP-02503","next":"M21-GAP-02505"},"M21-GAP-02505":{"line":5760,"offset":1029778,"length":180,"previous":"M21-GAP-02504","next":"M21-GAP-02506"},"M21-GAP-02506":{"line":5761,"offset":1029958,"length":180,"previous":"M21-GAP-02505","next":"M21-GAP-02507"},"M21-GAP-02507":{"line":5762,"offset":1030138,"length":180,"previous":"M21-GAP-02506","next":"M21-GAP-02508"},"M21-GAP-02508":{"line":5763,"offset":1030318,"length":186,"previous":"M21-GAP-02507","next":"M21-GAP-02509"},"M21-GAP-02509":{"line":5764,"offset":1030504,"length":186,"previous":"M21-GAP-02508","next":"M21-GAP-02510"},"M21-GAP-02510":{"line":5765,"offset":1030690,"length":187,"previous":"M21-GAP-02509","next":"M21-GAP-02511"},"M21-GAP-02511":{"line":5766,"offset":1030877,"length":187,"previous":"M21-GAP-02510","next":"M21-GAP-02512"},"M21-GAP-02512":{"line":5767,"offset":1031064,"length":187,"previous":"M21-GAP-02511","next":"M21-GAP-02513"},"M21-GAP-02513":{"line":5768,"offset":1031251,"length":187,"previous":"M21-GAP-02512","next":"M21-GAP-02514"},"M21-GAP-02514":{"line":5769,"offset":1031438,"length":187,"previous":"M21-GAP-02513","next":"M21-GAP-02515"},"M21-GAP-02515":{"line":5770,"offset":1031625,"length":187,"previous":"M21-GAP-02514","next":"M21-GAP-02516"},"M21-GAP-02516":{"line":5771,"offset":1031812,"length":187,"previous":"M21-GAP-02515","next":"M21-GAP-02517"},"M21-GAP-02517":{"line":5772,"offset":1031999,"length":187,"previous":"M21-GAP-02516","next":"M21-GAP-02518"},"M21-GAP-02518":{"line":5773,"offset":1032186,"length":187,"previous":"M21-GAP-02517","next":"M21-GAP-02519"},"M21-GAP-02519":{"line":5774,"offset":1032373,"length":187,"previous":"M21-GAP-02518","next":"M21-GAP-02520"},"M21-GAP-02520":{"line":5775,"offset":1032560,"length":186,"previous":"M21-GAP-02519","next":"M21-GAP-02521"},"M21-GAP-02521":{"line":5776,"offset":1032746,"length":187,"previous":"M21-GAP-02520","next":"M21-GAP-02522"},"M21-GAP-02522":{"line":5777,"offset":1032933,"length":187,"previous":"M21-GAP-02521","next":"M21-GAP-02523"},"M21-GAP-02523":{"line":5778,"offset":1033120,"length":187,"previous":"M21-GAP-02522","next":"M21-GAP-02524"},"M21-GAP-02524":{"line":5779,"offset":1033307,"length":187,"previous":"M21-GAP-02523","next":"M21-GAP-02525"},"M21-GAP-02525":{"line":5780,"offset":1033494,"length":187,"previous":"M21-GAP-02524","next":"M21-GAP-02526"},"M21-GAP-02526":{"line":5781,"offset":1033681,"length":186,"previous":"M21-GAP-02525","next":"M21-GAP-02527"},"M21-GAP-02527":{"line":5782,"offset":1033867,"length":186,"previous":"M21-GAP-02526","next":"M21-GAP-02528"},"M21-GAP-02528":{"line":5783,"offset":1034053,"length":186,"previous":"M21-GAP-02527","next":"M21-GAP-02529"},"M21-GAP-02529":{"line":5784,"offset":1034239,"length":186,"previous":"M21-GAP-02528","next":"M21-GAP-02530"},"M21-GAP-02530":{"line":5785,"offset":1034425,"length":186,"previous":"M21-GAP-02529","next":"M21-GAP-02531"},"M21-GAP-02531":{"line":5786,"offset":1034611,"length":186,"previous":"M21-GAP-02530","next":"M21-GAP-02532"},"M21-GAP-02532":{"line":5787,"offset":1034797,"length":186,"previous":"M21-GAP-02531","next":"M21-GAP-02533"},"M21-GAP-02533":{"line":5788,"offset":1034983,"length":173,"previous":"M21-GAP-02532","next":"M21-GAP-02534"},"M21-GAP-02534":{"line":5789,"offset":1035156,"length":173,"previous":"M21-GAP-02533","next":"M21-GAP-02535"},"M21-GAP-02535":{"line":5790,"offset":1035329,"length":174,"previous":"M21-GAP-02534","next":"M21-GAP-02536"},"M21-GAP-02536":{"line":5791,"offset":1035503,"length":174,"previous":"M21-GAP-02535","next":"M21-GAP-02537"},"M21-GAP-02537":{"line":5792,"offset":1035677,"length":174,"previous":"M21-GAP-02536","next":"M21-GAP-02538"},"M21-GAP-02538":{"line":5793,"offset":1035851,"length":174,"previous":"M21-GAP-02537","next":"M21-GAP-02539"},"M21-GAP-02539":{"line":5794,"offset":1036025,"length":174,"previous":"M21-GAP-02538","next":"M21-GAP-02540"},"M21-GAP-02540":{"line":5795,"offset":1036199,"length":174,"previous":"M21-GAP-02539","next":"M21-GAP-02541"},"M21-GAP-02541":{"line":5796,"offset":1036373,"length":174,"previous":"M21-GAP-02540","next":"M21-GAP-02542"},"M21-GAP-02542":{"line":5797,"offset":1036547,"length":174,"previous":"M21-GAP-02541","next":"M21-GAP-02543"},"M21-GAP-02543":{"line":5798,"offset":1036721,"length":174,"previous":"M21-GAP-02542","next":"M21-GAP-02544"},"M21-GAP-02544":{"line":5799,"offset":1036895,"length":174,"previous":"M21-GAP-02543","next":"M21-GAP-02545"},"M21-GAP-02545":{"line":5800,"offset":1037069,"length":173,"previous":"M21-GAP-02544","next":"M21-GAP-02546"},"M21-GAP-02546":{"line":5801,"offset":1037242,"length":174,"previous":"M21-GAP-02545","next":"M21-GAP-02547"},"M21-GAP-02547":{"line":5802,"offset":1037416,"length":174,"previous":"M21-GAP-02546","next":"M21-GAP-02548"},"M21-GAP-02548":{"line":5803,"offset":1037590,"length":174,"previous":"M21-GAP-02547","next":"M21-GAP-02549"},"M21-GAP-02549":{"line":5804,"offset":1037764,"length":174,"previous":"M21-GAP-02548","next":"M21-GAP-02550"},"M21-GAP-02550":{"line":5805,"offset":1037938,"length":174,"previous":"M21-GAP-02549","next":"M21-GAP-02551"},"M21-GAP-02551":{"line":5806,"offset":1038112,"length":174,"previous":"M21-GAP-02550","next":"M21-GAP-02552"},"M21-GAP-02552":{"line":5807,"offset":1038286,"length":174,"previous":"M21-GAP-02551","next":"M21-GAP-02553"},"M21-GAP-02553":{"line":5808,"offset":1038460,"length":174,"previous":"M21-GAP-02552","next":"M21-GAP-02554"},"M21-GAP-02554":{"line":5809,"offset":1038634,"length":174,"previous":"M21-GAP-02553","next":"M21-GAP-02555"},"M21-GAP-02555":{"line":5810,"offset":1038808,"length":174,"previous":"M21-GAP-02554","next":"M21-GAP-02556"},"M21-GAP-02556":{"line":5811,"offset":1038982,"length":173,"previous":"M21-GAP-02555","next":"M21-GAP-02557"},"M21-GAP-02557":{"line":5812,"offset":1039155,"length":174,"previous":"M21-GAP-02556","next":"M21-GAP-02558"},"M21-GAP-02558":{"line":5813,"offset":1039329,"length":174,"previous":"M21-GAP-02557","next":"M21-GAP-02559"},"M21-GAP-02559":{"line":5814,"offset":1039503,"length":174,"previous":"M21-GAP-02558","next":"M21-GAP-02560"},"M21-GAP-02560":{"line":5815,"offset":1039677,"length":174,"previous":"M21-GAP-02559","next":"M21-GAP-02561"},"M21-GAP-02561":{"line":5816,"offset":1039851,"length":174,"previous":"M21-GAP-02560","next":"M21-GAP-02562"},"M21-GAP-02562":{"line":5817,"offset":1040025,"length":174,"previous":"M21-GAP-02561","next":"M21-GAP-02563"},"M21-GAP-02563":{"line":5818,"offset":1040199,"length":174,"previous":"M21-GAP-02562","next":"M21-GAP-02564"},"M21-GAP-02564":{"line":5819,"offset":1040373,"length":174,"previous":"M21-GAP-02563","next":"M21-GAP-02565"},"M21-GAP-02565":{"line":5820,"offset":1040547,"length":174,"previous":"M21-GAP-02564","next":"M21-GAP-02566"},"M21-GAP-02566":{"line":5821,"offset":1040721,"length":174,"previous":"M21-GAP-02565","next":"M21-GAP-02567"},"M21-GAP-02567":{"line":5822,"offset":1040895,"length":173,"previous":"M21-GAP-02566","next":"M21-GAP-02568"},"M21-GAP-02568":{"line":5823,"offset":1041068,"length":174,"previous":"M21-GAP-02567","next":"M21-GAP-02569"},"M21-GAP-02569":{"line":5824,"offset":1041242,"length":174,"previous":"M21-GAP-02568","next":"M21-GAP-02570"},"M21-GAP-02570":{"line":5825,"offset":1041416,"length":174,"previous":"M21-GAP-02569","next":"M21-GAP-02571"},"M21-GAP-02571":{"line":5826,"offset":1041590,"length":174,"previous":"M21-GAP-02570","next":"M21-GAP-02572"},"M21-GAP-02572":{"line":5827,"offset":1041764,"length":174,"previous":"M21-GAP-02571","next":"M21-GAP-02573"},"M21-GAP-02573":{"line":5828,"offset":1041938,"length":174,"previous":"M21-GAP-02572","next":"M21-GAP-02574"},"M21-GAP-02574":{"line":5829,"offset":1042112,"length":174,"previous":"M21-GAP-02573","next":"M21-GAP-02575"},"M21-GAP-02575":{"line":5830,"offset":1042286,"length":174,"previous":"M21-GAP-02574","next":"M21-GAP-02576"},"M21-GAP-02576":{"line":5831,"offset":1042460,"length":174,"previous":"M21-GAP-02575","next":"M21-GAP-02577"},"M21-GAP-02577":{"line":5832,"offset":1042634,"length":174,"previous":"M21-GAP-02576","next":"M21-GAP-02578"},"M21-GAP-02578":{"line":5833,"offset":1042808,"length":173,"previous":"M21-GAP-02577","next":"M21-GAP-02579"},"M21-GAP-02579":{"line":5834,"offset":1042981,"length":174,"previous":"M21-GAP-02578","next":"M21-GAP-02580"},"M21-GAP-02580":{"line":5835,"offset":1043155,"length":174,"previous":"M21-GAP-02579","next":"M21-GAP-02581"},"M21-GAP-02581":{"line":5836,"offset":1043329,"length":174,"previous":"M21-GAP-02580","next":"M21-GAP-02582"},"M21-GAP-02582":{"line":5837,"offset":1043503,"length":174,"previous":"M21-GAP-02581","next":"M21-GAP-02583"},"M21-GAP-02583":{"line":5838,"offset":1043677,"length":174,"previous":"M21-GAP-02582","next":"M21-GAP-02584"},"M21-GAP-02584":{"line":5839,"offset":1043851,"length":174,"previous":"M21-GAP-02583","next":"M21-GAP-02585"},"M21-GAP-02585":{"line":5840,"offset":1044025,"length":174,"previous":"M21-GAP-02584","next":"M21-GAP-02586"},"M21-GAP-02586":{"line":5841,"offset":1044199,"length":174,"previous":"M21-GAP-02585","next":"M21-GAP-02587"},"M21-GAP-02587":{"line":5842,"offset":1044373,"length":174,"previous":"M21-GAP-02586","next":"M21-GAP-02588"},"M21-GAP-02588":{"line":5843,"offset":1044547,"length":174,"previous":"M21-GAP-02587","next":"M21-GAP-02589"},"M21-GAP-02589":{"line":5844,"offset":1044721,"length":173,"previous":"M21-GAP-02588","next":"M21-GAP-02590"},"M21-GAP-02590":{"line":5845,"offset":1044894,"length":174,"previous":"M21-GAP-02589","next":"M21-GAP-02591"},"M21-GAP-02591":{"line":5846,"offset":1045068,"length":174,"previous":"M21-GAP-02590","next":"M21-GAP-02592"},"M21-GAP-02592":{"line":5847,"offset":1045242,"length":174,"previous":"M21-GAP-02591","next":"M21-GAP-02593"},"M21-GAP-02593":{"line":5848,"offset":1045416,"length":174,"previous":"M21-GAP-02592","next":"M21-GAP-02594"},"M21-GAP-02594":{"line":5849,"offset":1045590,"length":174,"previous":"M21-GAP-02593","next":"M21-GAP-02595"},"M21-GAP-02595":{"line":5850,"offset":1045764,"length":174,"previous":"M21-GAP-02594","next":"M21-GAP-02596"},"M21-GAP-02596":{"line":5851,"offset":1045938,"length":174,"previous":"M21-GAP-02595","next":"M21-GAP-02597"},"M21-GAP-02597":{"line":5852,"offset":1046112,"length":173,"previous":"M21-GAP-02596","next":"M21-GAP-02598"},"M21-GAP-02598":{"line":5853,"offset":1046285,"length":173,"previous":"M21-GAP-02597","next":"M21-GAP-02599"},"M21-GAP-02599":{"line":5854,"offset":1046458,"length":173,"previous":"M21-GAP-02598","next":"M21-GAP-02600"},"M21-GAP-02600":{"line":5855,"offset":1046631,"length":195,"previous":"M21-GAP-02599","next":"M21-GAP-02601"},"M21-GAP-02601":{"line":5856,"offset":1046826,"length":195,"previous":"M21-GAP-02600","next":"M21-GAP-02602"},"M21-GAP-02602":{"line":5857,"offset":1047021,"length":198,"previous":"M21-GAP-02601","next":"M21-GAP-02603"},"M21-GAP-02603":{"line":5858,"offset":1047219,"length":198,"previous":"M21-GAP-02602","next":"M21-GAP-02604"},"M21-GAP-02604":{"line":5859,"offset":1047417,"length":198,"previous":"M21-GAP-02603","next":"M21-GAP-02605"},"M21-GAP-02605":{"line":5860,"offset":1047615,"length":198,"previous":"M21-GAP-02604","next":"M21-GAP-02606"},"M21-GAP-02606":{"line":5861,"offset":1047813,"length":198,"previous":"M21-GAP-02605","next":"M21-GAP-02607"},"M21-GAP-02607":{"line":5862,"offset":1048011,"length":198,"previous":"M21-GAP-02606","next":"M21-GAP-02608"},"M21-GAP-02608":{"line":5863,"offset":1048209,"length":214,"previous":"M21-GAP-02607","next":"M21-GAP-02609"},"M21-GAP-02609":{"line":5864,"offset":1048423,"length":214,"previous":"M21-GAP-02608","next":"M21-GAP-02610"},"M21-GAP-02610":{"line":5865,"offset":1048637,"length":214,"previous":"M21-GAP-02609","next":"M21-GAP-02611"},"M21-GAP-02611":{"line":5866,"offset":1048851,"length":214,"previous":"M21-GAP-02610","next":"M21-GAP-02612"},"M21-GAP-02612":{"line":5867,"offset":1049065,"length":214,"previous":"M21-GAP-02611","next":"M21-GAP-02613"},"M21-GAP-02613":{"line":5868,"offset":1049279,"length":214,"previous":"M21-GAP-02612","next":"M21-GAP-02614"},"M21-GAP-02614":{"line":5869,"offset":1049493,"length":203,"previous":"M21-GAP-02613","next":"M21-GAP-02615"},"M21-GAP-02615":{"line":5870,"offset":1049696,"length":203,"previous":"M21-GAP-02614","next":"M21-GAP-02616"},"M21-GAP-02616":{"line":5871,"offset":1049899,"length":203,"previous":"M21-GAP-02615","next":"M21-GAP-02617"},"M21-GAP-02617":{"line":5872,"offset":1050102,"length":203,"previous":"M21-GAP-02616","next":"M21-GAP-02618"},"M21-GAP-02618":{"line":5873,"offset":1050305,"length":203,"previous":"M21-GAP-02617","next":"M21-GAP-02619"},"M21-GAP-02619":{"line":5874,"offset":1050508,"length":203,"previous":"M21-GAP-02618","next":"M21-GAP-02620"},"M21-GAP-02620":{"line":5875,"offset":1050711,"length":217,"previous":"M21-GAP-02619","next":"M21-GAP-02621"},"M21-GAP-02621":{"line":5876,"offset":1050928,"length":217,"previous":"M21-GAP-02620","next":"M21-GAP-02622"},"M21-GAP-02622":{"line":5877,"offset":1051145,"length":217,"previous":"M21-GAP-02621","next":"M21-GAP-02623"},"M21-GAP-02623":{"line":5878,"offset":1051362,"length":206,"previous":"M21-GAP-02622","next":"M21-GAP-02624"},"M21-GAP-02624":{"line":5879,"offset":1051568,"length":206,"previous":"M21-GAP-02623","next":"M21-GAP-02625"},"M21-GAP-02625":{"line":5880,"offset":1051774,"length":206,"previous":"M21-GAP-02624","next":"M21-GAP-02626"},"M21-GAP-02626":{"line":5881,"offset":1051980,"length":216,"previous":"M21-GAP-02625","next":"M21-GAP-02627"},"M21-GAP-02627":{"line":5882,"offset":1052196,"length":216,"previous":"M21-GAP-02626","next":"M21-GAP-02628"},"M21-GAP-02628":{"line":5883,"offset":1052412,"length":216,"previous":"M21-GAP-02627","next":"M21-GAP-02629"},"M21-GAP-02629":{"line":5884,"offset":1052628,"length":205,"previous":"M21-GAP-02628","next":"M21-GAP-02630"},"M21-GAP-02630":{"line":5885,"offset":1052833,"length":205,"previous":"M21-GAP-02629","next":"M21-GAP-02631"},"M21-GAP-02631":{"line":5886,"offset":1053038,"length":205,"previous":"M21-GAP-02630","next":"M21-GAP-02632"},"M21-GAP-02632":{"line":5887,"offset":1053243,"length":197,"previous":"M21-GAP-02631","next":"M21-GAP-02633"},"M21-GAP-02633":{"line":5888,"offset":1053440,"length":197,"previous":"M21-GAP-02632","next":"M21-GAP-02634"},"M21-GAP-02634":{"line":5889,"offset":1053637,"length":186,"previous":"M21-GAP-02633","next":"M21-GAP-02635"},"M21-GAP-02635":{"line":5890,"offset":1053823,"length":186,"previous":"M21-GAP-02634","next":"M21-GAP-02636"},"M21-GAP-02636":{"line":5891,"offset":1054009,"length":187,"previous":"M21-GAP-02635","next":"M21-GAP-02637"},"M21-GAP-02637":{"line":5892,"offset":1054196,"length":187,"previous":"M21-GAP-02636","next":"M21-GAP-02638"},"M21-GAP-02638":{"line":5893,"offset":1054383,"length":187,"previous":"M21-GAP-02637","next":"M21-GAP-02639"},"M21-GAP-02639":{"line":5894,"offset":1054570,"length":187,"previous":"M21-GAP-02638","next":"M21-GAP-02640"},"M21-GAP-02640":{"line":5895,"offset":1054757,"length":187,"previous":"M21-GAP-02639","next":"M21-GAP-02641"},"M21-GAP-02641":{"line":5896,"offset":1054944,"length":187,"previous":"M21-GAP-02640","next":"M21-GAP-02642"},"M21-GAP-02642":{"line":5897,"offset":1055131,"length":187,"previous":"M21-GAP-02641","next":"M21-GAP-02643"},"M21-GAP-02643":{"line":5898,"offset":1055318,"length":187,"previous":"M21-GAP-02642","next":"M21-GAP-02644"},"M21-GAP-02644":{"line":5899,"offset":1055505,"length":187,"previous":"M21-GAP-02643","next":"M21-GAP-02645"},"M21-GAP-02645":{"line":5900,"offset":1055692,"length":187,"previous":"M21-GAP-02644","next":"M21-GAP-02646"},"M21-GAP-02646":{"line":5901,"offset":1055879,"length":186,"previous":"M21-GAP-02645","next":"M21-GAP-02647"},"M21-GAP-02647":{"line":5902,"offset":1056065,"length":187,"previous":"M21-GAP-02646","next":"M21-GAP-02648"},"M21-GAP-02648":{"line":5903,"offset":1056252,"length":187,"previous":"M21-GAP-02647","next":"M21-GAP-02649"},"M21-GAP-02649":{"line":5904,"offset":1056439,"length":187,"previous":"M21-GAP-02648","next":"M21-GAP-02650"},"M21-GAP-02650":{"line":5905,"offset":1056626,"length":187,"previous":"M21-GAP-02649","next":"M21-GAP-02651"},"M21-GAP-02651":{"line":5906,"offset":1056813,"length":187,"previous":"M21-GAP-02650","next":"M21-GAP-02652"},"M21-GAP-02652":{"line":5907,"offset":1057000,"length":187,"previous":"M21-GAP-02651","next":"M21-GAP-02653"},"M21-GAP-02653":{"line":5908,"offset":1057187,"length":187,"previous":"M21-GAP-02652","next":"M21-GAP-02654"},"M21-GAP-02654":{"line":5909,"offset":1057374,"length":187,"previous":"M21-GAP-02653","next":"M21-GAP-02655"},"M21-GAP-02655":{"line":5910,"offset":1057561,"length":187,"previous":"M21-GAP-02654","next":"M21-GAP-02656"},"M21-GAP-02656":{"line":5911,"offset":1057748,"length":187,"previous":"M21-GAP-02655","next":"M21-GAP-02657"},"M21-GAP-02657":{"line":5912,"offset":1057935,"length":186,"previous":"M21-GAP-02656","next":"M21-GAP-02658"},"M21-GAP-02658":{"line":5913,"offset":1058121,"length":187,"previous":"M21-GAP-02657","next":"M21-GAP-02659"},"M21-GAP-02659":{"line":5914,"offset":1058308,"length":187,"previous":"M21-GAP-02658","next":"M21-GAP-02660"},"M21-GAP-02660":{"line":5915,"offset":1058495,"length":187,"previous":"M21-GAP-02659","next":"M21-GAP-02661"},"M21-GAP-02661":{"line":5916,"offset":1058682,"length":187,"previous":"M21-GAP-02660","next":"M21-GAP-02662"},"M21-GAP-02662":{"line":5917,"offset":1058869,"length":187,"previous":"M21-GAP-02661","next":"M21-GAP-02663"},"M21-GAP-02663":{"line":5918,"offset":1059056,"length":187,"previous":"M21-GAP-02662","next":"M21-GAP-02664"},"M21-GAP-02664":{"line":5919,"offset":1059243,"length":187,"previous":"M21-GAP-02663","next":"M21-GAP-02665"},"M21-GAP-02665":{"line":5920,"offset":1059430,"length":187,"previous":"M21-GAP-02664","next":"M21-GAP-02666"},"M21-GAP-02666":{"line":5921,"offset":1059617,"length":187,"previous":"M21-GAP-02665","next":"M21-GAP-02667"},"M21-GAP-02667":{"line":5922,"offset":1059804,"length":187,"previous":"M21-GAP-02666","next":"M21-GAP-02668"},"M21-GAP-02668":{"line":5923,"offset":1059991,"length":186,"previous":"M21-GAP-02667","next":"M21-GAP-02669"},"M21-GAP-02669":{"line":5924,"offset":1060177,"length":187,"previous":"M21-GAP-02668","next":"M21-GAP-02670"},"M21-GAP-02670":{"line":5925,"offset":1060364,"length":187,"previous":"M21-GAP-02669","next":"M21-GAP-02671"},"M21-GAP-02671":{"line":5926,"offset":1060551,"length":187,"previous":"M21-GAP-02670","next":"M21-GAP-02672"},"M21-GAP-02672":{"line":5927,"offset":1060738,"length":187,"previous":"M21-GAP-02671","next":"M21-GAP-02673"},"M21-GAP-02673":{"line":5928,"offset":1060925,"length":187,"previous":"M21-GAP-02672","next":"M21-GAP-02674"},"M21-GAP-02674":{"line":5929,"offset":1061112,"length":187,"previous":"M21-GAP-02673","next":"M21-GAP-02675"},"M21-GAP-02675":{"line":5930,"offset":1061299,"length":187,"previous":"M21-GAP-02674","next":"M21-GAP-02676"},"M21-GAP-02676":{"line":5931,"offset":1061486,"length":187,"previous":"M21-GAP-02675","next":"M21-GAP-02677"},"M21-GAP-02677":{"line":5932,"offset":1061673,"length":187,"previous":"M21-GAP-02676","next":"M21-GAP-02678"},"M21-GAP-02678":{"line":5933,"offset":1061860,"length":187,"previous":"M21-GAP-02677","next":"M21-GAP-02679"},"M21-GAP-02679":{"line":5934,"offset":1062047,"length":186,"previous":"M21-GAP-02678","next":"M21-GAP-02680"},"M21-GAP-02680":{"line":5935,"offset":1062233,"length":187,"previous":"M21-GAP-02679","next":"M21-GAP-02681"},"M21-GAP-02681":{"line":5936,"offset":1062420,"length":187,"previous":"M21-GAP-02680","next":"M21-GAP-02682"},"M21-GAP-02682":{"line":5937,"offset":1062607,"length":187,"previous":"M21-GAP-02681","next":"M21-GAP-02683"},"M21-GAP-02683":{"line":5938,"offset":1062794,"length":187,"previous":"M21-GAP-02682","next":"M21-GAP-02684"},"M21-GAP-02684":{"line":5939,"offset":1062981,"length":187,"previous":"M21-GAP-02683","next":"M21-GAP-02685"},"M21-GAP-02685":{"line":5940,"offset":1063168,"length":187,"previous":"M21-GAP-02684","next":"M21-GAP-02686"},"M21-GAP-02686":{"line":5941,"offset":1063355,"length":187,"previous":"M21-GAP-02685","next":"M21-GAP-02687"},"M21-GAP-02687":{"line":5942,"offset":1063542,"length":187,"previous":"M21-GAP-02686","next":"M21-GAP-02688"},"M21-GAP-02688":{"line":5943,"offset":1063729,"length":187,"previous":"M21-GAP-02687","next":"M21-GAP-02689"},"M21-GAP-02689":{"line":5944,"offset":1063916,"length":187,"previous":"M21-GAP-02688","next":"M21-GAP-02690"},"M21-GAP-02690":{"line":5945,"offset":1064103,"length":186,"previous":"M21-GAP-02689","next":"M21-GAP-02691"},"M21-GAP-02691":{"line":5946,"offset":1064289,"length":187,"previous":"M21-GAP-02690","next":"M21-GAP-02692"},"M21-GAP-02692":{"line":5947,"offset":1064476,"length":187,"previous":"M21-GAP-02691","next":"M21-GAP-02693"},"M21-GAP-02693":{"line":5948,"offset":1064663,"length":187,"previous":"M21-GAP-02692","next":"M21-GAP-02694"},"M21-GAP-02694":{"line":5949,"offset":1064850,"length":187,"previous":"M21-GAP-02693","next":"M21-GAP-02695"},"M21-GAP-02695":{"line":5950,"offset":1065037,"length":187,"previous":"M21-GAP-02694","next":"M21-GAP-02696"},"M21-GAP-02696":{"line":5951,"offset":1065224,"length":187,"previous":"M21-GAP-02695","next":"M21-GAP-02697"},"M21-GAP-02697":{"line":5952,"offset":1065411,"length":187,"previous":"M21-GAP-02696","next":"M21-GAP-02698"},"M21-GAP-02698":{"line":5953,"offset":1065598,"length":187,"previous":"M21-GAP-02697","next":"M21-GAP-02699"},"M21-GAP-02699":{"line":5954,"offset":1065785,"length":187,"previous":"M21-GAP-02698","next":"M21-GAP-02700"},"M21-GAP-02700":{"line":5955,"offset":1065972,"length":187,"previous":"M21-GAP-02699","next":"M21-GAP-02701"},"M21-GAP-02701":{"line":5956,"offset":1066159,"length":186,"previous":"M21-GAP-02700","next":"M21-GAP-02702"},"M21-GAP-02702":{"line":5957,"offset":1066345,"length":187,"previous":"M21-GAP-02701","next":"M21-GAP-02703"},"M21-GAP-02703":{"line":5958,"offset":1066532,"length":187,"previous":"M21-GAP-02702","next":"M21-GAP-02704"},"M21-GAP-02704":{"line":5959,"offset":1066719,"length":187,"previous":"M21-GAP-02703","next":"M21-GAP-02705"},"M21-GAP-02705":{"line":5960,"offset":1066906,"length":187,"previous":"M21-GAP-02704","next":"M21-GAP-02706"},"M21-GAP-02706":{"line":5961,"offset":1067093,"length":187,"previous":"M21-GAP-02705","next":"M21-GAP-02707"},"M21-GAP-02707":{"line":5962,"offset":1067280,"length":187,"previous":"M21-GAP-02706","next":"M21-GAP-02708"},"M21-GAP-02708":{"line":5963,"offset":1067467,"length":187,"previous":"M21-GAP-02707","next":"M21-GAP-02709"},"M21-GAP-02709":{"line":5964,"offset":1067654,"length":187,"previous":"M21-GAP-02708","next":"M21-GAP-02710"},"M21-GAP-02710":{"line":5965,"offset":1067841,"length":187,"previous":"M21-GAP-02709","next":"M21-GAP-02711"},"M21-GAP-02711":{"line":5966,"offset":1068028,"length":187,"previous":"M21-GAP-02710","next":"M21-GAP-02712"},"M21-GAP-02712":{"line":5967,"offset":1068215,"length":186,"previous":"M21-GAP-02711","next":"M21-GAP-02713"},"M21-GAP-02713":{"line":5968,"offset":1068401,"length":187,"previous":"M21-GAP-02712","next":"M21-GAP-02714"},"M21-GAP-02714":{"line":5969,"offset":1068588,"length":187,"previous":"M21-GAP-02713","next":"M21-GAP-02715"},"M21-GAP-02715":{"line":5970,"offset":1068775,"length":187,"previous":"M21-GAP-02714","next":"M21-GAP-02716"},"M21-GAP-02716":{"line":5971,"offset":1068962,"length":187,"previous":"M21-GAP-02715","next":"M21-GAP-02717"},"M21-GAP-02717":{"line":5972,"offset":1069149,"length":187,"previous":"M21-GAP-02716","next":"M21-GAP-02718"},"M21-GAP-02718":{"line":5973,"offset":1069336,"length":187,"previous":"M21-GAP-02717","next":"M21-GAP-02719"},"M21-GAP-02719":{"line":5974,"offset":1069523,"length":187,"previous":"M21-GAP-02718","next":"M21-GAP-02720"},"M21-GAP-02720":{"line":5975,"offset":1069710,"length":187,"previous":"M21-GAP-02719","next":"M21-GAP-02721"},"M21-GAP-02721":{"line":5976,"offset":1069897,"length":187,"previous":"M21-GAP-02720","next":"M21-GAP-02722"},"M21-GAP-02722":{"line":5977,"offset":1070084,"length":187,"previous":"M21-GAP-02721","next":"M21-GAP-02723"},"M21-GAP-02723":{"line":5978,"offset":1070271,"length":186,"previous":"M21-GAP-02722","next":"M21-GAP-02724"},"M21-GAP-02724":{"line":5979,"offset":1070457,"length":187,"previous":"M21-GAP-02723","next":"M21-GAP-02725"},"M21-GAP-02725":{"line":5980,"offset":1070644,"length":187,"previous":"M21-GAP-02724","next":"M21-GAP-02726"},"M21-GAP-02726":{"line":5981,"offset":1070831,"length":187,"previous":"M21-GAP-02725","next":"M21-GAP-02727"},"M21-GAP-02727":{"line":5982,"offset":1071018,"length":187,"previous":"M21-GAP-02726","next":"M21-GAP-02728"},"M21-GAP-02728":{"line":5983,"offset":1071205,"length":187,"previous":"M21-GAP-02727","next":"M21-GAP-02729"},"M21-GAP-02729":{"line":5984,"offset":1071392,"length":177,"previous":"M21-GAP-02728","next":"M21-GAP-02730"},"M21-GAP-02730":{"line":5985,"offset":1071569,"length":177,"previous":"M21-GAP-02729","next":"M21-GAP-02731"},"M21-GAP-02731":{"line":5986,"offset":1071746,"length":178,"previous":"M21-GAP-02730","next":"M21-GAP-02732"},"M21-GAP-02732":{"line":5987,"offset":1071924,"length":178,"previous":"M21-GAP-02731","next":"M21-GAP-02733"},"M21-GAP-02733":{"line":5988,"offset":1072102,"length":177,"previous":"M21-GAP-02732","next":"M21-GAP-02734"},"M21-GAP-02734":{"line":5989,"offset":1072279,"length":177,"previous":"M21-GAP-02733","next":"M21-GAP-02735"},"M21-GAP-02735":{"line":5990,"offset":1072456,"length":177,"previous":"M21-GAP-02734","next":"M21-GAP-02736"},"M21-GAP-02736":{"line":5991,"offset":1072633,"length":177,"previous":"M21-GAP-02735","next":"M21-GAP-02737"},"M21-GAP-02737":{"line":5992,"offset":1072810,"length":177,"previous":"M21-GAP-02736","next":"M21-GAP-02738"},"M21-GAP-02738":{"line":5993,"offset":1072987,"length":177,"previous":"M21-GAP-02737","next":"M21-GAP-02739"},"M21-GAP-02739":{"line":5994,"offset":1073164,"length":177,"previous":"M21-GAP-02738","next":"M21-GAP-02740"},"M21-GAP-02740":{"line":5995,"offset":1073341,"length":177,"previous":"M21-GAP-02739","next":"M21-GAP-02741"},"M21-GAP-02741":{"line":5996,"offset":1073518,"length":192,"previous":"M21-GAP-02740","next":"M21-GAP-02742"},"M21-GAP-02742":{"line":5997,"offset":1073710,"length":192,"previous":"M21-GAP-02741","next":"M21-GAP-02743"},"M21-GAP-02743":{"line":5998,"offset":1073902,"length":192,"previous":"M21-GAP-02742","next":"M21-GAP-02744"},"M21-GAP-02744":{"line":5999,"offset":1074094,"length":192,"previous":"M21-GAP-02743","next":"M21-GAP-02745"},"M21-GAP-02745":{"line":6000,"offset":1074286,"length":192,"previous":"M21-GAP-02744","next":"M21-GAP-02746"},"M21-GAP-02746":{"line":6001,"offset":1074478,"length":185,"previous":"M21-GAP-02745","next":"M21-GAP-02747"},"M21-GAP-02747":{"line":6002,"offset":1074663,"length":185,"previous":"M21-GAP-02746","next":"M21-GAP-02748"},"M21-GAP-02748":{"line":6003,"offset":1074848,"length":185,"previous":"M21-GAP-02747","next":"M21-GAP-02749"},"M21-GAP-02749":{"line":6004,"offset":1075033,"length":185,"previous":"M21-GAP-02748","next":"M21-GAP-02750"},"M21-GAP-02750":{"line":6005,"offset":1075218,"length":185,"previous":"M21-GAP-02749","next":"M21-GAP-02751"},"M21-GAP-02751":{"line":6006,"offset":1075403,"length":185,"previous":"M21-GAP-02750","next":"M21-GAP-02752"},"M21-GAP-02752":{"line":6007,"offset":1075588,"length":185,"previous":"M21-GAP-02751","next":"M21-GAP-02753"},"M21-GAP-02753":{"line":6008,"offset":1075773,"length":185,"previous":"M21-GAP-02752","next":"M21-GAP-02754"},"M21-GAP-02754":{"line":6009,"offset":1075958,"length":185,"previous":"M21-GAP-02753","next":"M21-GAP-02755"},"M21-GAP-02755":{"line":6010,"offset":1076143,"length":185,"previous":"M21-GAP-02754","next":"M21-GAP-02756"},"M21-GAP-02756":{"line":6011,"offset":1076328,"length":185,"previous":"M21-GAP-02755","next":"M21-GAP-02757"},"M21-GAP-02757":{"line":6012,"offset":1076513,"length":185,"previous":"M21-GAP-02756","next":"M21-GAP-02758"},"M21-GAP-02758":{"line":6013,"offset":1076698,"length":185,"previous":"M21-GAP-02757","next":"M21-GAP-02759"},"M21-GAP-02759":{"line":6014,"offset":1076883,"length":177,"previous":"M21-GAP-02758","next":"M21-GAP-02760"},"M21-GAP-02760":{"line":6015,"offset":1077060,"length":177,"previous":"M21-GAP-02759","next":"M21-GAP-02761"},"M21-GAP-02761":{"line":6016,"offset":1077237,"length":178,"previous":"M21-GAP-02760","next":"M21-GAP-02762"},"M21-GAP-02762":{"line":6017,"offset":1077415,"length":178,"previous":"M21-GAP-02761","next":"M21-GAP-02763"},"M21-GAP-02763":{"line":6018,"offset":1077593,"length":178,"previous":"M21-GAP-02762","next":"M21-GAP-02764"},"M21-GAP-02764":{"line":6019,"offset":1077771,"length":178,"previous":"M21-GAP-02763","next":"M21-GAP-02765"},"M21-GAP-02765":{"line":6020,"offset":1077949,"length":178,"previous":"M21-GAP-02764","next":"M21-GAP-02766"},"M21-GAP-02766":{"line":6021,"offset":1078127,"length":178,"previous":"M21-GAP-02765","next":"M21-GAP-02767"},"M21-GAP-02767":{"line":6022,"offset":1078305,"length":178,"previous":"M21-GAP-02766","next":"M21-GAP-02768"},"M21-GAP-02768":{"line":6023,"offset":1078483,"length":178,"previous":"M21-GAP-02767","next":"M21-GAP-02769"},"M21-GAP-02769":{"line":6024,"offset":1078661,"length":178,"previous":"M21-GAP-02768","next":"M21-GAP-02770"},"M21-GAP-02770":{"line":6025,"offset":1078839,"length":178,"previous":"M21-GAP-02769","next":"M21-GAP-02771"},"M21-GAP-02771":{"line":6026,"offset":1079017,"length":177,"previous":"M21-GAP-02770","next":"M21-GAP-02772"},"M21-GAP-02772":{"line":6027,"offset":1079194,"length":178,"previous":"M21-GAP-02771","next":"M21-GAP-02773"},"M21-GAP-02773":{"line":6028,"offset":1079372,"length":178,"previous":"M21-GAP-02772","next":"M21-GAP-02774"},"M21-GAP-02774":{"line":6029,"offset":1079550,"length":178,"previous":"M21-GAP-02773","next":"M21-GAP-02775"},"M21-GAP-02775":{"line":6030,"offset":1079728,"length":178,"previous":"M21-GAP-02774","next":"M21-GAP-02776"},"M21-GAP-02776":{"line":6031,"offset":1079906,"length":178,"previous":"M21-GAP-02775","next":"M21-GAP-02777"},"M21-GAP-02777":{"line":6032,"offset":1080084,"length":178,"previous":"M21-GAP-02776","next":"M21-GAP-02778"},"M21-GAP-02778":{"line":6033,"offset":1080262,"length":178,"previous":"M21-GAP-02777","next":"M21-GAP-02779"},"M21-GAP-02779":{"line":6034,"offset":1080440,"length":178,"previous":"M21-GAP-02778","next":"M21-GAP-02780"},"M21-GAP-02780":{"line":6035,"offset":1080618,"length":178,"previous":"M21-GAP-02779","next":"M21-GAP-02781"},"M21-GAP-02781":{"line":6036,"offset":1080796,"length":178,"previous":"M21-GAP-02780","next":"M21-GAP-02782"},"M21-GAP-02782":{"line":6037,"offset":1080974,"length":177,"previous":"M21-GAP-02781","next":"M21-GAP-02783"},"M21-GAP-02783":{"line":6038,"offset":1081151,"length":178,"previous":"M21-GAP-02782","next":"M21-GAP-02784"},"M21-GAP-02784":{"line":6039,"offset":1081329,"length":178,"previous":"M21-GAP-02783","next":"M21-GAP-02785"},"M21-GAP-02785":{"line":6040,"offset":1081507,"length":178,"previous":"M21-GAP-02784","next":"M21-GAP-02786"},"M21-GAP-02786":{"line":6041,"offset":1081685,"length":178,"previous":"M21-GAP-02785","next":"M21-GAP-02787"},"M21-GAP-02787":{"line":6042,"offset":1081863,"length":178,"previous":"M21-GAP-02786","next":"M21-GAP-02788"},"M21-GAP-02788":{"line":6043,"offset":1082041,"length":178,"previous":"M21-GAP-02787","next":"M21-GAP-02789"},"M21-GAP-02789":{"line":6044,"offset":1082219,"length":178,"previous":"M21-GAP-02788","next":"M21-GAP-02790"},"M21-GAP-02790":{"line":6045,"offset":1082397,"length":178,"previous":"M21-GAP-02789","next":"M21-GAP-02791"},"M21-GAP-02791":{"line":6046,"offset":1082575,"length":178,"previous":"M21-GAP-02790","next":"M21-GAP-02792"},"M21-GAP-02792":{"line":6047,"offset":1082753,"length":178,"previous":"M21-GAP-02791","next":"M21-GAP-02793"},"M21-GAP-02793":{"line":6048,"offset":1082931,"length":177,"previous":"M21-GAP-02792","next":"M21-GAP-02794"},"M21-GAP-02794":{"line":6049,"offset":1083108,"length":178,"previous":"M21-GAP-02793","next":"M21-GAP-02795"},"M21-GAP-02795":{"line":6050,"offset":1083286,"length":178,"previous":"M21-GAP-02794","next":"M21-GAP-02796"},"M21-GAP-02796":{"line":6051,"offset":1083464,"length":178,"previous":"M21-GAP-02795","next":"M21-GAP-02797"},"M21-GAP-02797":{"line":6052,"offset":1083642,"length":178,"previous":"M21-GAP-02796","next":"M21-GAP-02798"},"M21-GAP-02798":{"line":6053,"offset":1083820,"length":178,"previous":"M21-GAP-02797","next":"M21-GAP-02799"},"M21-GAP-02799":{"line":6054,"offset":1083998,"length":178,"previous":"M21-GAP-02798","next":"M21-GAP-02800"},"M21-GAP-02800":{"line":6055,"offset":1084176,"length":178,"previous":"M21-GAP-02799","next":"M21-GAP-02801"},"M21-GAP-02801":{"line":6056,"offset":1084354,"length":178,"previous":"M21-GAP-02800","next":"M21-GAP-02802"},"M21-GAP-02802":{"line":6057,"offset":1084532,"length":178,"previous":"M21-GAP-02801","next":"M21-GAP-02803"},"M21-GAP-02803":{"line":6058,"offset":1084710,"length":178,"previous":"M21-GAP-02802","next":"M21-GAP-02804"},"M21-GAP-02804":{"line":6059,"offset":1084888,"length":177,"previous":"M21-GAP-02803","next":"M21-GAP-02805"},"M21-GAP-02805":{"line":6060,"offset":1085065,"length":178,"previous":"M21-GAP-02804","next":"M21-GAP-02806"},"M21-GAP-02806":{"line":6061,"offset":1085243,"length":178,"previous":"M21-GAP-02805","next":"M21-GAP-02807"},"M21-GAP-02807":{"line":6062,"offset":1085421,"length":178,"previous":"M21-GAP-02806","next":"M21-GAP-02808"},"M21-GAP-02808":{"line":6063,"offset":1085599,"length":178,"previous":"M21-GAP-02807","next":"M21-GAP-02809"},"M21-GAP-02809":{"line":6064,"offset":1085777,"length":178,"previous":"M21-GAP-02808","next":"M21-GAP-02810"},"M21-GAP-02810":{"line":6065,"offset":1085955,"length":178,"previous":"M21-GAP-02809","next":"M21-GAP-02811"},"M21-GAP-02811":{"line":6066,"offset":1086133,"length":178,"previous":"M21-GAP-02810","next":"M21-GAP-02812"},"M21-GAP-02812":{"line":6067,"offset":1086311,"length":178,"previous":"M21-GAP-02811","next":"M21-GAP-02813"},"M21-GAP-02813":{"line":6068,"offset":1086489,"length":178,"previous":"M21-GAP-02812","next":"M21-GAP-02814"},"M21-GAP-02814":{"line":6069,"offset":1086667,"length":178,"previous":"M21-GAP-02813","next":"M21-GAP-02815"},"M21-GAP-02815":{"line":6070,"offset":1086845,"length":177,"previous":"M21-GAP-02814","next":"M21-GAP-02816"},"M21-GAP-02816":{"line":6071,"offset":1087022,"length":178,"previous":"M21-GAP-02815","next":"M21-GAP-02817"},"M21-GAP-02817":{"line":6072,"offset":1087200,"length":178,"previous":"M21-GAP-02816","next":"M21-GAP-02818"},"M21-GAP-02818":{"line":6073,"offset":1087378,"length":178,"previous":"M21-GAP-02817","next":"M21-GAP-02819"},"M21-GAP-02819":{"line":6074,"offset":1087556,"length":178,"previous":"M21-GAP-02818","next":"M21-GAP-02820"},"M21-GAP-02820":{"line":6075,"offset":1087734,"length":178,"previous":"M21-GAP-02819","next":"M21-GAP-02821"},"M21-GAP-02821":{"line":6076,"offset":1087912,"length":178,"previous":"M21-GAP-02820","next":"M21-GAP-02822"},"M21-GAP-02822":{"line":6077,"offset":1088090,"length":178,"previous":"M21-GAP-02821","next":"M21-GAP-02823"},"M21-GAP-02823":{"line":6078,"offset":1088268,"length":178,"previous":"M21-GAP-02822","next":"M21-GAP-02824"},"M21-GAP-02824":{"line":6079,"offset":1088446,"length":178,"previous":"M21-GAP-02823","next":"M21-GAP-02825"},"M21-GAP-02825":{"line":6080,"offset":1088624,"length":178,"previous":"M21-GAP-02824","next":"M21-GAP-02826"},"M21-GAP-02826":{"line":6081,"offset":1088802,"length":177,"previous":"M21-GAP-02825","next":"M21-GAP-02827"},"M21-GAP-02827":{"line":6082,"offset":1088979,"length":178,"previous":"M21-GAP-02826","next":"M21-GAP-02828"},"M21-GAP-02828":{"line":6083,"offset":1089157,"length":177,"previous":"M21-GAP-02827","next":"M21-GAP-02829"},"M21-GAP-02829":{"line":6084,"offset":1089334,"length":177,"previous":"M21-GAP-02828","next":"M21-GAP-02830"},"M21-GAP-02830":{"line":6085,"offset":1089511,"length":177,"previous":"M21-GAP-02829","next":"M21-GAP-02831"},"M21-GAP-02831":{"line":6086,"offset":1089688,"length":183,"previous":"M21-GAP-02830","next":"M21-GAP-02832"},"M21-GAP-02832":{"line":6087,"offset":1089871,"length":183,"previous":"M21-GAP-02831","next":"M21-GAP-02833"},"M21-GAP-02833":{"line":6088,"offset":1090054,"length":183,"previous":"M21-GAP-02832","next":"M21-GAP-02834"},"M21-GAP-02834":{"line":6089,"offset":1090237,"length":183,"previous":"M21-GAP-02833","next":"M21-GAP-02835"},"M21-GAP-02835":{"line":6090,"offset":1090420,"length":183,"previous":"M21-GAP-02834","next":"M21-GAP-02836"},"M21-GAP-02836":{"line":6091,"offset":1090603,"length":198,"previous":"M21-GAP-02835","next":"M21-GAP-02837"},"M21-GAP-02837":{"line":6092,"offset":1090801,"length":198,"previous":"M21-GAP-02836","next":"M21-GAP-02838"},"M21-GAP-02838":{"line":6093,"offset":1090999,"length":198,"previous":"M21-GAP-02837","next":"M21-GAP-02839"},"M21-GAP-02839":{"line":6094,"offset":1091197,"length":198,"previous":"M21-GAP-02838","next":"M21-GAP-02840"},"M21-GAP-02840":{"line":6095,"offset":1091395,"length":198,"previous":"M21-GAP-02839","next":"M21-GAP-02841"},"M21-GAP-02841":{"line":6096,"offset":1091593,"length":198,"previous":"M21-GAP-02840","next":"M21-GAP-02842"},"M21-GAP-02842":{"line":6097,"offset":1091791,"length":198,"previous":"M21-GAP-02841","next":"M21-GAP-02843"},"M21-GAP-02843":{"line":6098,"offset":1091989,"length":198,"previous":"M21-GAP-02842","next":"M21-GAP-02844"},"M21-GAP-02844":{"line":6099,"offset":1092187,"length":198,"previous":"M21-GAP-02843","next":"M21-GAP-02845"},"M21-GAP-02845":{"line":6100,"offset":1092385,"length":186,"previous":"M21-GAP-02844","next":"M21-GAP-02846"},"M21-GAP-02846":{"line":6101,"offset":1092571,"length":186,"previous":"M21-GAP-02845","next":"M21-GAP-02847"},"M21-GAP-02847":{"line":6102,"offset":1092757,"length":187,"previous":"M21-GAP-02846","next":"M21-GAP-02848"},"M21-GAP-02848":{"line":6103,"offset":1092944,"length":187,"previous":"M21-GAP-02847","next":"M21-GAP-02849"},"M21-GAP-02849":{"line":6104,"offset":1093131,"length":187,"previous":"M21-GAP-02848","next":"M21-GAP-02850"},"M21-GAP-02850":{"line":6105,"offset":1093318,"length":187,"previous":"M21-GAP-02849","next":"M21-GAP-02851"},"M21-GAP-02851":{"line":6106,"offset":1093505,"length":187,"previous":"M21-GAP-02850","next":"M21-GAP-02852"},"M21-GAP-02852":{"line":6107,"offset":1093692,"length":187,"previous":"M21-GAP-02851","next":"M21-GAP-02853"},"M21-GAP-02853":{"line":6108,"offset":1093879,"length":187,"previous":"M21-GAP-02852","next":"M21-GAP-02854"},"M21-GAP-02854":{"line":6109,"offset":1094066,"length":187,"previous":"M21-GAP-02853","next":"M21-GAP-02855"},"M21-GAP-02855":{"line":6110,"offset":1094253,"length":187,"previous":"M21-GAP-02854","next":"M21-GAP-02856"},"M21-GAP-02856":{"line":6111,"offset":1094440,"length":187,"previous":"M21-GAP-02855","next":"M21-GAP-02857"},"M21-GAP-02857":{"line":6112,"offset":1094627,"length":186,"previous":"M21-GAP-02856","next":"M21-GAP-02858"},"M21-GAP-02858":{"line":6113,"offset":1094813,"length":187,"previous":"M21-GAP-02857","next":"M21-GAP-02859"},"M21-GAP-02859":{"line":6114,"offset":1095000,"length":187,"previous":"M21-GAP-02858","next":"M21-GAP-02860"},"M21-GAP-02860":{"line":6115,"offset":1095187,"length":187,"previous":"M21-GAP-02859","next":"M21-GAP-02861"},"M21-GAP-02861":{"line":6116,"offset":1095374,"length":187,"previous":"M21-GAP-02860","next":"M21-GAP-02862"},"M21-GAP-02862":{"line":6117,"offset":1095561,"length":187,"previous":"M21-GAP-02861","next":"M21-GAP-02863"},"M21-GAP-02863":{"line":6118,"offset":1095748,"length":187,"previous":"M21-GAP-02862","next":"M21-GAP-02864"},"M21-GAP-02864":{"line":6119,"offset":1095935,"length":187,"previous":"M21-GAP-02863","next":"M21-GAP-02865"},"M21-GAP-02865":{"line":6120,"offset":1096122,"length":187,"previous":"M21-GAP-02864","next":"M21-GAP-02866"},"M21-GAP-02866":{"line":6121,"offset":1096309,"length":187,"previous":"M21-GAP-02865","next":"M21-GAP-02867"},"M21-GAP-02867":{"line":6122,"offset":1096496,"length":187,"previous":"M21-GAP-02866","next":"M21-GAP-02868"},"M21-GAP-02868":{"line":6123,"offset":1096683,"length":186,"previous":"M21-GAP-02867","next":"M21-GAP-02869"},"M21-GAP-02869":{"line":6124,"offset":1096869,"length":187,"previous":"M21-GAP-02868","next":"M21-GAP-02870"},"M21-GAP-02870":{"line":6125,"offset":1097056,"length":187,"previous":"M21-GAP-02869","next":"M21-GAP-02871"},"M21-GAP-02871":{"line":6126,"offset":1097243,"length":187,"previous":"M21-GAP-02870","next":"M21-GAP-02872"},"M21-GAP-02872":{"line":6127,"offset":1097430,"length":187,"previous":"M21-GAP-02871","next":"M21-GAP-02873"},"M21-GAP-02873":{"line":6128,"offset":1097617,"length":187,"previous":"M21-GAP-02872","next":"M21-GAP-02874"},"M21-GAP-02874":{"line":6129,"offset":1097804,"length":187,"previous":"M21-GAP-02873","next":"M21-GAP-02875"},"M21-GAP-02875":{"line":6130,"offset":1097991,"length":187,"previous":"M21-GAP-02874","next":"M21-GAP-02876"},"M21-GAP-02876":{"line":6131,"offset":1098178,"length":187,"previous":"M21-GAP-02875","next":"M21-GAP-02877"},"M21-GAP-02877":{"line":6132,"offset":1098365,"length":187,"previous":"M21-GAP-02876","next":"M21-GAP-02878"},"M21-GAP-02878":{"line":6133,"offset":1098552,"length":187,"previous":"M21-GAP-02877","next":"M21-GAP-02879"},"M21-GAP-02879":{"line":6134,"offset":1098739,"length":186,"previous":"M21-GAP-02878","next":"M21-GAP-02880"},"M21-GAP-02880":{"line":6135,"offset":1098925,"length":187,"previous":"M21-GAP-02879","next":"M21-GAP-02881"},"M21-GAP-02881":{"line":6136,"offset":1099112,"length":187,"previous":"M21-GAP-02880","next":"M21-GAP-02882"},"M21-GAP-02882":{"line":6137,"offset":1099299,"length":187,"previous":"M21-GAP-02881","next":"M21-GAP-02883"},"M21-GAP-02883":{"line":6138,"offset":1099486,"length":187,"previous":"M21-GAP-02882","next":"M21-GAP-02884"},"M21-GAP-02884":{"line":6139,"offset":1099673,"length":187,"previous":"M21-GAP-02883","next":"M21-GAP-02885"},"M21-GAP-02885":{"line":6140,"offset":1099860,"length":187,"previous":"M21-GAP-02884","next":"M21-GAP-02886"},"M21-GAP-02886":{"line":6141,"offset":1100047,"length":187,"previous":"M21-GAP-02885","next":"M21-GAP-02887"},"M21-GAP-02887":{"line":6142,"offset":1100234,"length":187,"previous":"M21-GAP-02886","next":"M21-GAP-02888"},"M21-GAP-02888":{"line":6143,"offset":1100421,"length":187,"previous":"M21-GAP-02887","next":"M21-GAP-02889"},"M21-GAP-02889":{"line":6144,"offset":1100608,"length":187,"previous":"M21-GAP-02888","next":"M21-GAP-02890"},"M21-GAP-02890":{"line":6145,"offset":1100795,"length":186,"previous":"M21-GAP-02889","next":"M21-GAP-02891"},"M21-GAP-02891":{"line":6146,"offset":1100981,"length":187,"previous":"M21-GAP-02890","next":"M21-GAP-02892"},"M21-GAP-02892":{"line":6147,"offset":1101168,"length":187,"previous":"M21-GAP-02891","next":"M21-GAP-02893"},"M21-GAP-02893":{"line":6148,"offset":1101355,"length":187,"previous":"M21-GAP-02892","next":"M21-GAP-02894"},"M21-GAP-02894":{"line":6149,"offset":1101542,"length":187,"previous":"M21-GAP-02893","next":"M21-GAP-02895"},"M21-GAP-02895":{"line":6150,"offset":1101729,"length":187,"previous":"M21-GAP-02894","next":"M21-GAP-02896"},"M21-GAP-02896":{"line":6151,"offset":1101916,"length":187,"previous":"M21-GAP-02895","next":"M21-GAP-02897"},"M21-GAP-02897":{"line":6152,"offset":1102103,"length":186,"previous":"M21-GAP-02896","next":"M21-GAP-02898"},"M21-GAP-02898":{"line":6153,"offset":1102289,"length":186,"previous":"M21-GAP-02897","next":"M21-GAP-02899"},"M21-GAP-02899":{"line":6154,"offset":1102475,"length":186,"previous":"M21-GAP-02898","next":"M21-GAP-02900"},"M21-GAP-02900":{"line":6155,"offset":1102661,"length":186,"previous":"M21-GAP-02899","next":"M21-GAP-02901"},"M21-GAP-02901":{"line":6156,"offset":1102847,"length":176,"previous":"M21-GAP-02900","next":"M21-GAP-02902"},"M21-GAP-02902":{"line":6157,"offset":1103023,"length":176,"previous":"M21-GAP-02901","next":"M21-GAP-02903"},"M21-GAP-02903":{"line":6158,"offset":1103199,"length":177,"previous":"M21-GAP-02902","next":"M21-GAP-02904"},"M21-GAP-02904":{"line":6159,"offset":1103376,"length":177,"previous":"M21-GAP-02903","next":"M21-GAP-02905"},"M21-GAP-02905":{"line":6160,"offset":1103553,"length":177,"previous":"M21-GAP-02904","next":"M21-GAP-02906"},"M21-GAP-02906":{"line":6161,"offset":1103730,"length":177,"previous":"M21-GAP-02905","next":"M21-GAP-02907"},"M21-GAP-02907":{"line":6162,"offset":1103907,"length":177,"previous":"M21-GAP-02906","next":"M21-GAP-02908"},"M21-GAP-02908":{"line":6163,"offset":1104084,"length":177,"previous":"M21-GAP-02907","next":"M21-GAP-02909"},"M21-GAP-02909":{"line":6164,"offset":1104261,"length":177,"previous":"M21-GAP-02908","next":"M21-GAP-02910"},"M21-GAP-02910":{"line":6165,"offset":1104438,"length":177,"previous":"M21-GAP-02909","next":"M21-GAP-02911"},"M21-GAP-02911":{"line":6166,"offset":1104615,"length":177,"previous":"M21-GAP-02910","next":"M21-GAP-02912"},"M21-GAP-02912":{"line":6167,"offset":1104792,"length":177,"previous":"M21-GAP-02911","next":"M21-GAP-02913"},"M21-GAP-02913":{"line":6168,"offset":1104969,"length":176,"previous":"M21-GAP-02912","next":"M21-GAP-02914"},"M21-GAP-02914":{"line":6169,"offset":1105145,"length":177,"previous":"M21-GAP-02913","next":"M21-GAP-02915"},"M21-GAP-02915":{"line":6170,"offset":1105322,"length":177,"previous":"M21-GAP-02914","next":"M21-GAP-02916"},"M21-GAP-02916":{"line":6171,"offset":1105499,"length":177,"previous":"M21-GAP-02915","next":"M21-GAP-02917"},"M21-GAP-02917":{"line":6172,"offset":1105676,"length":177,"previous":"M21-GAP-02916","next":"M21-GAP-02918"},"M21-GAP-02918":{"line":6173,"offset":1105853,"length":177,"previous":"M21-GAP-02917","next":"M21-GAP-02919"},"M21-GAP-02919":{"line":6174,"offset":1106030,"length":177,"previous":"M21-GAP-02918","next":"M21-GAP-02920"},"M21-GAP-02920":{"line":6175,"offset":1106207,"length":177,"previous":"M21-GAP-02919","next":"M21-GAP-02921"},"M21-GAP-02921":{"line":6176,"offset":1106384,"length":177,"previous":"M21-GAP-02920","next":"M21-GAP-02922"},"M21-GAP-02922":{"line":6177,"offset":1106561,"length":177,"previous":"M21-GAP-02921","next":"M21-GAP-02923"},"M21-GAP-02923":{"line":6178,"offset":1106738,"length":177,"previous":"M21-GAP-02922","next":"M21-GAP-02924"},"M21-GAP-02924":{"line":6179,"offset":1106915,"length":176,"previous":"M21-GAP-02923","next":"M21-GAP-02925"},"M21-GAP-02925":{"line":6180,"offset":1107091,"length":177,"previous":"M21-GAP-02924","next":"M21-GAP-02926"},"M21-GAP-02926":{"line":6181,"offset":1107268,"length":177,"previous":"M21-GAP-02925","next":"M21-GAP-02927"},"M21-GAP-02927":{"line":6182,"offset":1107445,"length":177,"previous":"M21-GAP-02926","next":"M21-GAP-02928"},"M21-GAP-02928":{"line":6183,"offset":1107622,"length":177,"previous":"M21-GAP-02927","next":"M21-GAP-02929"},"M21-GAP-02929":{"line":6184,"offset":1107799,"length":177,"previous":"M21-GAP-02928","next":"M21-GAP-02930"},"M21-GAP-02930":{"line":6185,"offset":1107976,"length":177,"previous":"M21-GAP-02929","next":"M21-GAP-02931"},"M21-GAP-02931":{"line":6186,"offset":1108153,"length":177,"previous":"M21-GAP-02930","next":"M21-GAP-02932"},"M21-GAP-02932":{"line":6187,"offset":1108330,"length":177,"previous":"M21-GAP-02931","next":"M21-GAP-02933"},"M21-GAP-02933":{"line":6188,"offset":1108507,"length":177,"previous":"M21-GAP-02932","next":"M21-GAP-02934"},"M21-GAP-02934":{"line":6189,"offset":1108684,"length":177,"previous":"M21-GAP-02933","next":"M21-GAP-02935"},"M21-GAP-02935":{"line":6190,"offset":1108861,"length":176,"previous":"M21-GAP-02934","next":"M21-GAP-02936"},"M21-GAP-02936":{"line":6191,"offset":1109037,"length":177,"previous":"M21-GAP-02935","next":"M21-GAP-02937"},"M21-GAP-02937":{"line":6192,"offset":1109214,"length":177,"previous":"M21-GAP-02936","next":"M21-GAP-02938"},"M21-GAP-02938":{"line":6193,"offset":1109391,"length":177,"previous":"M21-GAP-02937","next":"M21-GAP-02939"},"M21-GAP-02939":{"line":6194,"offset":1109568,"length":177,"previous":"M21-GAP-02938","next":"M21-GAP-02940"},"M21-GAP-02940":{"line":6195,"offset":1109745,"length":177,"previous":"M21-GAP-02939","next":"M21-GAP-02941"},"M21-GAP-02941":{"line":6196,"offset":1109922,"length":177,"previous":"M21-GAP-02940","next":"M21-GAP-02942"},"M21-GAP-02942":{"line":6197,"offset":1110099,"length":177,"previous":"M21-GAP-02941","next":"M21-GAP-02943"},"M21-GAP-02943":{"line":6198,"offset":1110276,"length":177,"previous":"M21-GAP-02942","next":"M21-GAP-02944"},"M21-GAP-02944":{"line":6199,"offset":1110453,"length":177,"previous":"M21-GAP-02943","next":"M21-GAP-02945"},"M21-GAP-02945":{"line":6200,"offset":1110630,"length":177,"previous":"M21-GAP-02944","next":"M21-GAP-02946"},"M21-GAP-02946":{"line":6201,"offset":1110807,"length":176,"previous":"M21-GAP-02945","next":"M21-GAP-02947"},"M21-GAP-02947":{"line":6202,"offset":1110983,"length":177,"previous":"M21-GAP-02946","next":"M21-GAP-02948"},"M21-GAP-02948":{"line":6203,"offset":1111160,"length":177,"previous":"M21-GAP-02947","next":"M21-GAP-02949"},"M21-GAP-02949":{"line":6204,"offset":1111337,"length":177,"previous":"M21-GAP-02948","next":"M21-GAP-02950"},"M21-GAP-02950":{"line":6205,"offset":1111514,"length":177,"previous":"M21-GAP-02949","next":"M21-GAP-02951"},"M21-GAP-02951":{"line":6206,"offset":1111691,"length":177,"previous":"M21-GAP-02950","next":"M21-GAP-02952"},"M21-GAP-02952":{"line":6207,"offset":1111868,"length":177,"previous":"M21-GAP-02951","next":"M21-GAP-02953"},"M21-GAP-02953":{"line":6208,"offset":1112045,"length":177,"previous":"M21-GAP-02952","next":"M21-GAP-02954"},"M21-GAP-02954":{"line":6209,"offset":1112222,"length":177,"previous":"M21-GAP-02953","next":"M21-GAP-02955"},"M21-GAP-02955":{"line":6210,"offset":1112399,"length":177,"previous":"M21-GAP-02954","next":"M21-GAP-02956"},"M21-GAP-02956":{"line":6211,"offset":1112576,"length":177,"previous":"M21-GAP-02955","next":"M21-GAP-02957"},"M21-GAP-02957":{"line":6212,"offset":1112753,"length":176,"previous":"M21-GAP-02956","next":"M21-GAP-02958"},"M21-GAP-02958":{"line":6213,"offset":1112929,"length":177,"previous":"M21-GAP-02957","next":"M21-GAP-02959"},"M21-GAP-02959":{"line":6214,"offset":1113106,"length":177,"previous":"M21-GAP-02958","next":"M21-GAP-02960"},"M21-GAP-02960":{"line":6215,"offset":1113283,"length":177,"previous":"M21-GAP-02959","next":"M21-GAP-02961"},"M21-GAP-02961":{"line":6216,"offset":1113460,"length":177,"previous":"M21-GAP-02960","next":"M21-GAP-02962"},"M21-GAP-02962":{"line":6217,"offset":1113637,"length":177,"previous":"M21-GAP-02961","next":"M21-GAP-02963"},"M21-GAP-02963":{"line":6218,"offset":1113814,"length":177,"previous":"M21-GAP-02962","next":"M21-GAP-02964"},"M21-GAP-02964":{"line":6219,"offset":1113991,"length":177,"previous":"M21-GAP-02963","next":"M21-GAP-02965"},"M21-GAP-02965":{"line":6220,"offset":1114168,"length":177,"previous":"M21-GAP-02964","next":"M21-GAP-02966"},"M21-GAP-02966":{"line":6221,"offset":1114345,"length":177,"previous":"M21-GAP-02965","next":"M21-GAP-02967"},"M21-GAP-02967":{"line":6222,"offset":1114522,"length":177,"previous":"M21-GAP-02966","next":"M21-GAP-02968"},"M21-GAP-02968":{"line":6223,"offset":1114699,"length":176,"previous":"M21-GAP-02967","next":"M21-GAP-02969"},"M21-GAP-02969":{"line":6224,"offset":1114875,"length":177,"previous":"M21-GAP-02968","next":"M21-GAP-02970"},"M21-GAP-02970":{"line":6225,"offset":1115052,"length":177,"previous":"M21-GAP-02969","next":"M21-GAP-02971"},"M21-GAP-02971":{"line":6226,"offset":1115229,"length":177,"previous":"M21-GAP-02970","next":"M21-GAP-02972"},"M21-GAP-02972":{"line":6227,"offset":1115406,"length":177,"previous":"M21-GAP-02971","next":"M21-GAP-02973"},"M21-GAP-02973":{"line":6228,"offset":1115583,"length":177,"previous":"M21-GAP-02972","next":"M21-GAP-02974"},"M21-GAP-02974":{"line":6229,"offset":1115760,"length":177,"previous":"M21-GAP-02973","next":"M21-GAP-02975"},"M21-GAP-02975":{"line":6230,"offset":1115937,"length":177,"previous":"M21-GAP-02974","next":"M21-GAP-02976"},"M21-GAP-02976":{"line":6231,"offset":1116114,"length":177,"previous":"M21-GAP-02975","next":"M21-GAP-02977"},"M21-GAP-02977":{"line":6232,"offset":1116291,"length":177,"previous":"M21-GAP-02976","next":"M21-GAP-02978"},"M21-GAP-02978":{"line":6233,"offset":1116468,"length":177,"previous":"M21-GAP-02977","next":"M21-GAP-02979"},"M21-GAP-02979":{"line":6234,"offset":1116645,"length":176,"previous":"M21-GAP-02978","next":"M21-GAP-02980"},"M21-GAP-02980":{"line":6235,"offset":1116821,"length":177,"previous":"M21-GAP-02979","next":"M21-GAP-02981"},"M21-GAP-02981":{"line":6236,"offset":1116998,"length":177,"previous":"M21-GAP-02980","next":"M21-GAP-02982"},"M21-GAP-02982":{"line":6237,"offset":1117175,"length":177,"previous":"M21-GAP-02981","next":"M21-GAP-02983"},"M21-GAP-02983":{"line":6238,"offset":1117352,"length":177,"previous":"M21-GAP-02982","next":"M21-GAP-02984"},"M21-GAP-02984":{"line":6239,"offset":1117529,"length":177,"previous":"M21-GAP-02983","next":"M21-GAP-02985"},"M21-GAP-02985":{"line":6240,"offset":1117706,"length":177,"previous":"M21-GAP-02984","next":"M21-GAP-02986"},"M21-GAP-02986":{"line":6241,"offset":1117883,"length":177,"previous":"M21-GAP-02985","next":"M21-GAP-02987"},"M21-GAP-02987":{"line":6242,"offset":1118060,"length":177,"previous":"M21-GAP-02986","next":"M21-GAP-02988"},"M21-GAP-02988":{"line":6243,"offset":1118237,"length":176,"previous":"M21-GAP-02987","next":"M21-GAP-02989"},"M21-GAP-02989":{"line":6244,"offset":1118413,"length":181,"previous":"M21-GAP-02988","next":"M21-GAP-02990"},"M21-GAP-02990":{"line":6245,"offset":1118594,"length":181,"previous":"M21-GAP-02989","next":"M21-GAP-02991"},"M21-GAP-02991":{"line":6246,"offset":1118775,"length":182,"previous":"M21-GAP-02990","next":"M21-GAP-02992"},"M21-GAP-02992":{"line":6247,"offset":1118957,"length":182,"previous":"M21-GAP-02991","next":"M21-GAP-02993"},"M21-GAP-02993":{"line":6248,"offset":1119139,"length":182,"previous":"M21-GAP-02992","next":"M21-GAP-02994"},"M21-GAP-02994":{"line":6249,"offset":1119321,"length":182,"previous":"M21-GAP-02993","next":"M21-GAP-02995"},"M21-GAP-02995":{"line":6250,"offset":1119503,"length":182,"previous":"M21-GAP-02994","next":"M21-GAP-02996"},"M21-GAP-02996":{"line":6251,"offset":1119685,"length":182,"previous":"M21-GAP-02995","next":"M21-GAP-02997"},"M21-GAP-02997":{"line":6252,"offset":1119867,"length":182,"previous":"M21-GAP-02996","next":"M21-GAP-02998"},"M21-GAP-02998":{"line":6253,"offset":1120049,"length":182,"previous":"M21-GAP-02997","next":"M21-GAP-02999"},"M21-GAP-02999":{"line":6254,"offset":1120231,"length":182,"previous":"M21-GAP-02998","next":"M21-GAP-03000"},"M21-GAP-03000":{"line":6255,"offset":1120413,"length":182,"previous":"M21-GAP-02999","next":"M21-GAP-03001"},"M21-GAP-03001":{"line":6256,"offset":1120595,"length":181,"previous":"M21-GAP-03000","next":"M21-GAP-03002"},"M21-GAP-03002":{"line":6257,"offset":1120776,"length":182,"previous":"M21-GAP-03001","next":"M21-GAP-03003"},"M21-GAP-03003":{"line":6258,"offset":1120958,"length":182,"previous":"M21-GAP-03002","next":"M21-GAP-03004"},"M21-GAP-03004":{"line":6259,"offset":1121140,"length":182,"previous":"M21-GAP-03003","next":"M21-GAP-03005"},"M21-GAP-03005":{"line":6260,"offset":1121322,"length":182,"previous":"M21-GAP-03004","next":"M21-GAP-03006"},"M21-GAP-03006":{"line":6261,"offset":1121504,"length":182,"previous":"M21-GAP-03005","next":"M21-GAP-03007"},"M21-GAP-03007":{"line":6262,"offset":1121686,"length":182,"previous":"M21-GAP-03006","next":"M21-GAP-03008"},"M21-GAP-03008":{"line":6263,"offset":1121868,"length":182,"previous":"M21-GAP-03007","next":"M21-GAP-03009"},"M21-GAP-03009":{"line":6264,"offset":1122050,"length":182,"previous":"M21-GAP-03008","next":"M21-GAP-03010"},"M21-GAP-03010":{"line":6265,"offset":1122232,"length":182,"previous":"M21-GAP-03009","next":"M21-GAP-03011"},"M21-GAP-03011":{"line":6266,"offset":1122414,"length":182,"previous":"M21-GAP-03010","next":"M21-GAP-03012"},"M21-GAP-03012":{"line":6267,"offset":1122596,"length":181,"previous":"M21-GAP-03011","next":"M21-GAP-03013"},"M21-GAP-03013":{"line":6268,"offset":1122777,"length":182,"previous":"M21-GAP-03012","next":"M21-GAP-03014"},"M21-GAP-03014":{"line":6269,"offset":1122959,"length":182,"previous":"M21-GAP-03013","next":"M21-GAP-03015"},"M21-GAP-03015":{"line":6270,"offset":1123141,"length":182,"previous":"M21-GAP-03014","next":"M21-GAP-03016"},"M21-GAP-03016":{"line":6271,"offset":1123323,"length":181,"previous":"M21-GAP-03015","next":"M21-GAP-03017"},"M21-GAP-03017":{"line":6272,"offset":1123504,"length":181,"previous":"M21-GAP-03016","next":"M21-GAP-03018"},"M21-GAP-03018":{"line":6273,"offset":1123685,"length":181,"previous":"M21-GAP-03017","next":"M21-GAP-03019"},"M21-GAP-03019":{"line":6274,"offset":1123866,"length":181,"previous":"M21-GAP-03018","next":"M21-GAP-03020"},"M21-GAP-03020":{"line":6275,"offset":1124047,"length":181,"previous":"M21-GAP-03019","next":"M21-GAP-03021"},"M21-GAP-03021":{"line":6276,"offset":1124228,"length":181,"previous":"M21-GAP-03020","next":"M21-GAP-03022"},"M21-GAP-03022":{"line":6277,"offset":1124409,"length":179,"previous":"M21-GAP-03021","next":"M21-GAP-03023"},"M21-GAP-03023":{"line":6278,"offset":1124588,"length":179,"previous":"M21-GAP-03022","next":"M21-GAP-03024"},"M21-GAP-03024":{"line":6279,"offset":1124767,"length":180,"previous":"M21-GAP-03023","next":"M21-GAP-03025"},"M21-GAP-03025":{"line":6280,"offset":1124947,"length":180,"previous":"M21-GAP-03024","next":"M21-GAP-03026"},"M21-GAP-03026":{"line":6281,"offset":1125127,"length":180,"previous":"M21-GAP-03025","next":"M21-GAP-03027"},"M21-GAP-03027":{"line":6282,"offset":1125307,"length":180,"previous":"M21-GAP-03026","next":"M21-GAP-03028"},"M21-GAP-03028":{"line":6283,"offset":1125487,"length":180,"previous":"M21-GAP-03027","next":"M21-GAP-03029"},"M21-GAP-03029":{"line":6284,"offset":1125667,"length":180,"previous":"M21-GAP-03028","next":"M21-GAP-03030"},"M21-GAP-03030":{"line":6285,"offset":1125847,"length":180,"previous":"M21-GAP-03029","next":"M21-GAP-03031"},"M21-GAP-03031":{"line":6286,"offset":1126027,"length":180,"previous":"M21-GAP-03030","next":"M21-GAP-03032"},"M21-GAP-03032":{"line":6287,"offset":1126207,"length":180,"previous":"M21-GAP-03031","next":"M21-GAP-03033"},"M21-GAP-03033":{"line":6288,"offset":1126387,"length":180,"previous":"M21-GAP-03032","next":"M21-GAP-03034"},"M21-GAP-03034":{"line":6289,"offset":1126567,"length":179,"previous":"M21-GAP-03033","next":"M21-GAP-03035"},"M21-GAP-03035":{"line":6290,"offset":1126746,"length":180,"previous":"M21-GAP-03034","next":"M21-GAP-03036"},"M21-GAP-03036":{"line":6291,"offset":1126926,"length":180,"previous":"M21-GAP-03035","next":"M21-GAP-03037"},"M21-GAP-03037":{"line":6292,"offset":1127106,"length":180,"previous":"M21-GAP-03036","next":"M21-GAP-03038"},"M21-GAP-03038":{"line":6293,"offset":1127286,"length":180,"previous":"M21-GAP-03037","next":"M21-GAP-03039"},"M21-GAP-03039":{"line":6294,"offset":1127466,"length":180,"previous":"M21-GAP-03038","next":"M21-GAP-03040"},"M21-GAP-03040":{"line":6295,"offset":1127646,"length":180,"previous":"M21-GAP-03039","next":"M21-GAP-03041"},"M21-GAP-03041":{"line":6296,"offset":1127826,"length":179,"previous":"M21-GAP-03040","next":"M21-GAP-03042"},"M21-GAP-03042":{"line":6297,"offset":1128005,"length":179,"previous":"M21-GAP-03041","next":"M21-GAP-03043"},"M21-GAP-03043":{"line":6298,"offset":1128184,"length":179,"previous":"M21-GAP-03042","next":"M21-GAP-03044"},"M21-GAP-03044":{"line":6299,"offset":1128363,"length":179,"previous":"M21-GAP-03043","next":"M21-GAP-03045"},"M21-GAP-03045":{"line":6300,"offset":1128542,"length":179,"previous":"M21-GAP-03044","next":"M21-GAP-03046"},"M21-GAP-03046":{"line":6301,"offset":1128721,"length":179,"previous":"M21-GAP-03045","next":"M21-GAP-03047"},"M21-GAP-03047":{"line":6302,"offset":1128900,"length":179,"previous":"M21-GAP-03046","next":"M21-GAP-03048"},"M21-GAP-03048":{"line":6303,"offset":1129079,"length":198,"previous":"M21-GAP-03047","next":"M21-GAP-03049"},"M21-GAP-03049":{"line":6304,"offset":1129277,"length":198,"previous":"M21-GAP-03048","next":"M21-GAP-03050"},"M21-GAP-03050":{"line":6305,"offset":1129475,"length":198,"previous":"M21-GAP-03049","next":"M21-GAP-03051"},"M21-GAP-03051":{"line":6306,"offset":1129673,"length":198,"previous":"M21-GAP-03050","next":"M21-GAP-03052"},"M21-GAP-03052":{"line":6307,"offset":1129871,"length":198,"previous":"M21-GAP-03051","next":"M21-GAP-03053"},"M21-GAP-03053":{"line":6308,"offset":1130069,"length":198,"previous":"M21-GAP-03052","next":"M21-GAP-03054"},"M21-GAP-03054":{"line":6309,"offset":1130267,"length":198,"previous":"M21-GAP-03053","next":"M21-GAP-03055"},"M21-GAP-03055":{"line":6310,"offset":1130465,"length":186,"previous":"M21-GAP-03054","next":"M21-GAP-03056"},"M21-GAP-03056":{"line":6311,"offset":1130651,"length":186,"previous":"M21-GAP-03055","next":"M21-GAP-03057"},"M21-GAP-03057":{"line":6312,"offset":1130837,"length":187,"previous":"M21-GAP-03056","next":"M21-GAP-03058"},"M21-GAP-03058":{"line":6313,"offset":1131024,"length":187,"previous":"M21-GAP-03057","next":"M21-GAP-03059"},"M21-GAP-03059":{"line":6314,"offset":1131211,"length":187,"previous":"M21-GAP-03058","next":"M21-GAP-03060"},"M21-GAP-03060":{"line":6315,"offset":1131398,"length":187,"previous":"M21-GAP-03059","next":"M21-GAP-03061"},"M21-GAP-03061":{"line":6316,"offset":1131585,"length":186,"previous":"M21-GAP-03060","next":"M21-GAP-03062"},"M21-GAP-03062":{"line":6317,"offset":1131771,"length":186,"previous":"M21-GAP-03061","next":"M21-GAP-03063"},"M21-GAP-03063":{"line":6318,"offset":1131957,"length":186,"previous":"M21-GAP-03062","next":"M21-GAP-03064"},"M21-GAP-03064":{"line":6319,"offset":1132143,"length":186,"previous":"M21-GAP-03063","next":"M21-GAP-03065"},"M21-GAP-03065":{"line":6320,"offset":1132329,"length":186,"previous":"M21-GAP-03064","next":"M21-GAP-03066"},"M21-GAP-03066":{"line":6321,"offset":1132515,"length":186,"previous":"M21-GAP-03065","next":"M21-GAP-03067"},"M21-GAP-03067":{"line":6322,"offset":1132701,"length":186,"previous":"M21-GAP-03066","next":"M21-GAP-03068"},"M21-GAP-03068":{"line":6323,"offset":1132887,"length":186,"previous":"M21-GAP-03067","next":"M21-GAP-03069"},"M21-GAP-03069":{"line":6324,"offset":1133073,"length":173,"previous":"M21-GAP-03068","next":"M21-GAP-03070"},"M21-GAP-03070":{"line":6325,"offset":1133246,"length":173,"previous":"M21-GAP-03069","next":"M21-GAP-03071"},"M21-GAP-03071":{"line":6326,"offset":1133419,"length":174,"previous":"M21-GAP-03070","next":"M21-GAP-03072"},"M21-GAP-03072":{"line":6327,"offset":1133593,"length":174,"previous":"M21-GAP-03071","next":"M21-GAP-03073"},"M21-GAP-03073":{"line":6328,"offset":1133767,"length":174,"previous":"M21-GAP-03072","next":"M21-GAP-03074"},"M21-GAP-03074":{"line":6329,"offset":1133941,"length":174,"previous":"M21-GAP-03073","next":"M21-GAP-03075"},"M21-GAP-03075":{"line":6330,"offset":1134115,"length":174,"previous":"M21-GAP-03074","next":"M21-GAP-03076"},"M21-GAP-03076":{"line":6331,"offset":1134289,"length":174,"previous":"M21-GAP-03075","next":"M21-GAP-03077"},"M21-GAP-03077":{"line":6332,"offset":1134463,"length":174,"previous":"M21-GAP-03076","next":"M21-GAP-03078"},"M21-GAP-03078":{"line":6333,"offset":1134637,"length":174,"previous":"M21-GAP-03077","next":"M21-GAP-03079"},"M21-GAP-03079":{"line":6334,"offset":1134811,"length":174,"previous":"M21-GAP-03078","next":"M21-GAP-03080"},"M21-GAP-03080":{"line":6335,"offset":1134985,"length":174,"previous":"M21-GAP-03079","next":"M21-GAP-03081"},"M21-GAP-03081":{"line":6336,"offset":1135159,"length":173,"previous":"M21-GAP-03080","next":"M21-GAP-03082"},"M21-GAP-03082":{"line":6337,"offset":1135332,"length":174,"previous":"M21-GAP-03081","next":"M21-GAP-03083"},"M21-GAP-03083":{"line":6338,"offset":1135506,"length":174,"previous":"M21-GAP-03082","next":"M21-GAP-03084"},"M21-GAP-03084":{"line":6339,"offset":1135680,"length":174,"previous":"M21-GAP-03083","next":"M21-GAP-03085"},"M21-GAP-03085":{"line":6340,"offset":1135854,"length":174,"previous":"M21-GAP-03084","next":"M21-GAP-03086"},"M21-GAP-03086":{"line":6341,"offset":1136028,"length":174,"previous":"M21-GAP-03085","next":"M21-GAP-03087"},"M21-GAP-03087":{"line":6342,"offset":1136202,"length":173,"previous":"M21-GAP-03086","next":"M21-GAP-03088"},"M21-GAP-03088":{"line":6343,"offset":1136375,"length":173,"previous":"M21-GAP-03087","next":"M21-GAP-03089"},"M21-GAP-03089":{"line":6344,"offset":1136548,"length":173,"previous":"M21-GAP-03088","next":"M21-GAP-03090"},"M21-GAP-03090":{"line":6345,"offset":1136721,"length":173,"previous":"M21-GAP-03089","next":"M21-GAP-03091"},"M21-GAP-03091":{"line":6346,"offset":1136894,"length":173,"previous":"M21-GAP-03090","next":"M21-GAP-03092"},"M21-GAP-03092":{"line":6347,"offset":1137067,"length":173,"previous":"M21-GAP-03091","next":"M21-GAP-03093"},"M21-GAP-03093":{"line":6348,"offset":1137240,"length":173,"previous":"M21-GAP-03092","next":"M21-GAP-03094"},"M21-GAP-03094":{"line":6349,"offset":1137413,"length":185,"previous":"M21-GAP-03093","next":"M21-GAP-03095"},"M21-GAP-03095":{"line":6350,"offset":1137598,"length":183,"previous":"M21-GAP-03094","next":"M21-GAP-03096"},"M21-GAP-03096":{"line":6351,"offset":1137781,"length":183,"previous":"M21-GAP-03095","next":"M21-GAP-03097"},"M21-GAP-03097":{"line":6352,"offset":1137964,"length":184,"previous":"M21-GAP-03096","next":"M21-GAP-03098"},"M21-GAP-03098":{"line":6353,"offset":1138148,"length":184,"previous":"M21-GAP-03097","next":"M21-GAP-03099"},"M21-GAP-03099":{"line":6354,"offset":1138332,"length":184,"previous":"M21-GAP-03098","next":"M21-GAP-03100"},"M21-GAP-03100":{"line":6355,"offset":1138516,"length":184,"previous":"M21-GAP-03099","next":"M21-GAP-03101"},"M21-GAP-03101":{"line":6356,"offset":1138700,"length":184,"previous":"M21-GAP-03100","next":"M21-GAP-03102"},"M21-GAP-03102":{"line":6357,"offset":1138884,"length":184,"previous":"M21-GAP-03101","next":"M21-GAP-03103"},"M21-GAP-03103":{"line":6358,"offset":1139068,"length":184,"previous":"M21-GAP-03102","next":"M21-GAP-03104"},"M21-GAP-03104":{"line":6359,"offset":1139252,"length":184,"previous":"M21-GAP-03103","next":"M21-GAP-03105"},"M21-GAP-03105":{"line":6360,"offset":1139436,"length":184,"previous":"M21-GAP-03104","next":"M21-GAP-03106"},"M21-GAP-03106":{"line":6361,"offset":1139620,"length":184,"previous":"M21-GAP-03105","next":"M21-GAP-03107"},"M21-GAP-03107":{"line":6362,"offset":1139804,"length":183,"previous":"M21-GAP-03106","next":"M21-GAP-03108"},"M21-GAP-03108":{"line":6363,"offset":1139987,"length":184,"previous":"M21-GAP-03107","next":"M21-GAP-03109"},"M21-GAP-03109":{"line":6364,"offset":1140171,"length":184,"previous":"M21-GAP-03108","next":"M21-GAP-03110"},"M21-GAP-03110":{"line":6365,"offset":1140355,"length":184,"previous":"M21-GAP-03109","next":"M21-GAP-03111"},"M21-GAP-03111":{"line":6366,"offset":1140539,"length":184,"previous":"M21-GAP-03110","next":"M21-GAP-03112"},"M21-GAP-03112":{"line":6367,"offset":1140723,"length":184,"previous":"M21-GAP-03111","next":"M21-GAP-03113"},"M21-GAP-03113":{"line":6368,"offset":1140907,"length":184,"previous":"M21-GAP-03112","next":"M21-GAP-03114"},"M21-GAP-03114":{"line":6369,"offset":1141091,"length":184,"previous":"M21-GAP-03113","next":"M21-GAP-03115"},"M21-GAP-03115":{"line":6370,"offset":1141275,"length":184,"previous":"M21-GAP-03114","next":"M21-GAP-03116"},"M21-GAP-03116":{"line":6371,"offset":1141459,"length":184,"previous":"M21-GAP-03115","next":"M21-GAP-03117"},"M21-GAP-03117":{"line":6372,"offset":1141643,"length":184,"previous":"M21-GAP-03116","next":"M21-GAP-03118"},"M21-GAP-03118":{"line":6373,"offset":1141827,"length":183,"previous":"M21-GAP-03117","next":"M21-GAP-03119"},"M21-GAP-03119":{"line":6374,"offset":1142010,"length":184,"previous":"M21-GAP-03118","next":"M21-GAP-03120"},"M21-GAP-03120":{"line":6375,"offset":1142194,"length":184,"previous":"M21-GAP-03119","next":"M21-GAP-03121"},"M21-GAP-03121":{"line":6376,"offset":1142378,"length":184,"previous":"M21-GAP-03120","next":"M21-GAP-03122"},"M21-GAP-03122":{"line":6377,"offset":1142562,"length":184,"previous":"M21-GAP-03121","next":"M21-GAP-03123"},"M21-GAP-03123":{"line":6378,"offset":1142746,"length":184,"previous":"M21-GAP-03122","next":"M21-GAP-03124"},"M21-GAP-03124":{"line":6379,"offset":1142930,"length":184,"previous":"M21-GAP-03123","next":"M21-GAP-03125"},"M21-GAP-03125":{"line":6380,"offset":1143114,"length":184,"previous":"M21-GAP-03124","next":"M21-GAP-03126"},"M21-GAP-03126":{"line":6381,"offset":1143298,"length":184,"previous":"M21-GAP-03125","next":"M21-GAP-03127"},"M21-GAP-03127":{"line":6382,"offset":1143482,"length":184,"previous":"M21-GAP-03126","next":"M21-GAP-03128"},"M21-GAP-03128":{"line":6383,"offset":1143666,"length":183,"previous":"M21-GAP-03127","next":"M21-GAP-03129"},"M21-GAP-03129":{"line":6384,"offset":1143849,"length":183,"previous":"M21-GAP-03128","next":"M21-GAP-03130"},"M21-GAP-03130":{"line":6385,"offset":1144032,"length":183,"previous":"M21-GAP-03129","next":"M21-GAP-03131"},"M21-GAP-03131":{"line":6386,"offset":1144215,"length":183,"previous":"M21-GAP-03130","next":"M21-GAP-03132"},"M21-GAP-03132":{"line":6387,"offset":1144398,"length":183,"previous":"M21-GAP-03131","next":"M21-GAP-03133"},"M21-GAP-03133":{"line":6388,"offset":1144581,"length":183,"previous":"M21-GAP-03132","next":"M21-GAP-03134"},"M21-GAP-03134":{"line":6389,"offset":1144764,"length":188,"previous":"M21-GAP-03133","next":"M21-GAP-03135"},"M21-GAP-03135":{"line":6390,"offset":1144952,"length":188,"previous":"M21-GAP-03134","next":"M21-GAP-03136"},"M21-GAP-03136":{"line":6391,"offset":1145140,"length":189,"previous":"M21-GAP-03135","next":"M21-GAP-03137"},"M21-GAP-03137":{"line":6392,"offset":1145329,"length":189,"previous":"M21-GAP-03136","next":"M21-GAP-03138"},"M21-GAP-03138":{"line":6393,"offset":1145518,"length":189,"previous":"M21-GAP-03137","next":"M21-GAP-03139"},"M21-GAP-03139":{"line":6394,"offset":1145707,"length":189,"previous":"M21-GAP-03138","next":"M21-GAP-03140"},"M21-GAP-03140":{"line":6395,"offset":1145896,"length":188,"previous":"M21-GAP-03139","next":"M21-GAP-03141"},"M21-GAP-03141":{"line":6396,"offset":1146084,"length":188,"previous":"M21-GAP-03140","next":"M21-GAP-03142"},"M21-GAP-03142":{"line":6397,"offset":1146272,"length":188,"previous":"M21-GAP-03141","next":"M21-GAP-03143"},"M21-GAP-03143":{"line":6398,"offset":1146460,"length":188,"previous":"M21-GAP-03142","next":"M21-GAP-03144"},"M21-GAP-03144":{"line":6399,"offset":1146648,"length":188,"previous":"M21-GAP-03143","next":"M21-GAP-03145"},"M21-GAP-03145":{"line":6400,"offset":1146836,"length":188,"previous":"M21-GAP-03144","next":"M21-GAP-03146"},"M21-GAP-03146":{"line":6401,"offset":1147024,"length":188,"previous":"M21-GAP-03145","next":"M21-GAP-03147"},"M21-GAP-03147":{"line":6402,"offset":1147212,"length":188,"previous":"M21-GAP-03146","next":"M21-GAP-03148"},"M21-GAP-03148":{"line":6403,"offset":1147400,"length":184,"previous":"M21-GAP-03147","next":"M21-GAP-03149"},"M21-GAP-03149":{"line":6404,"offset":1147584,"length":189,"previous":"M21-GAP-03148","next":"M21-GAP-03150"},"M21-GAP-03150":{"line":6405,"offset":1147773,"length":189,"previous":"M21-GAP-03149","next":"M21-GAP-03151"},"M21-GAP-03151":{"line":6406,"offset":1147962,"length":190,"previous":"M21-GAP-03150","next":"M21-GAP-03152"},"M21-GAP-03152":{"line":6407,"offset":1148152,"length":190,"previous":"M21-GAP-03151","next":"M21-GAP-03153"},"M21-GAP-03153":{"line":6408,"offset":1148342,"length":189,"previous":"M21-GAP-03152","next":"M21-GAP-03154"},"M21-GAP-03154":{"line":6409,"offset":1148531,"length":189,"previous":"M21-GAP-03153","next":"M21-GAP-03155"},"M21-GAP-03155":{"line":6410,"offset":1148720,"length":189,"previous":"M21-GAP-03154","next":"M21-GAP-03156"},"M21-GAP-03156":{"line":6411,"offset":1148909,"length":189,"previous":"M21-GAP-03155","next":"M21-GAP-03157"},"M21-GAP-03157":{"line":6412,"offset":1149098,"length":189,"previous":"M21-GAP-03156","next":"M21-GAP-03158"},"M21-GAP-03158":{"line":6413,"offset":1149287,"length":189,"previous":"M21-GAP-03157","next":"M21-GAP-03159"},"M21-GAP-03159":{"line":6414,"offset":1149476,"length":189,"previous":"M21-GAP-03158","next":"M21-GAP-03160"},"M21-GAP-03160":{"line":6415,"offset":1149665,"length":189,"previous":"M21-GAP-03159","next":"M21-GAP-03161"},"M21-GAP-03161":{"line":6416,"offset":1149854,"length":186,"previous":"M21-GAP-03160","next":"M21-GAP-03162"},"M21-GAP-03162":{"line":6417,"offset":1150040,"length":186,"previous":"M21-GAP-03161","next":"M21-GAP-03163"},"M21-GAP-03163":{"line":6418,"offset":1150226,"length":186,"previous":"M21-GAP-03162","next":"M21-GAP-03164"},"M21-GAP-03164":{"line":6419,"offset":1150412,"length":186,"previous":"M21-GAP-03163","next":"M21-GAP-03165"},"M21-GAP-03165":{"line":6420,"offset":1150598,"length":186,"previous":"M21-GAP-03164","next":"M21-GAP-03166"},"M21-GAP-03166":{"line":6421,"offset":1150784,"length":215,"previous":"M21-GAP-03165","next":"M21-GAP-03167"},"M21-GAP-03167":{"line":6422,"offset":1150999,"length":215,"previous":"M21-GAP-03166","next":"M21-GAP-03168"},"M21-GAP-03168":{"line":6423,"offset":1151214,"length":215,"previous":"M21-GAP-03167","next":"M21-GAP-03169"},"M21-GAP-03169":{"line":6424,"offset":1151429,"length":215,"previous":"M21-GAP-03168","next":"M21-GAP-03170"},"M21-GAP-03170":{"line":6425,"offset":1151644,"length":215,"previous":"M21-GAP-03169","next":"M21-GAP-03171"},"M21-GAP-03171":{"line":6426,"offset":1151859,"length":215,"previous":"M21-GAP-03170","next":"M21-GAP-03172"},"M21-GAP-03172":{"line":6427,"offset":1152074,"length":184,"previous":"M21-GAP-03171","next":"M21-GAP-03173"},"M21-GAP-03173":{"line":6428,"offset":1152258,"length":184,"previous":"M21-GAP-03172","next":"M21-GAP-03174"},"M21-GAP-03174":{"line":6429,"offset":1152442,"length":185,"previous":"M21-GAP-03173","next":"M21-GAP-03175"},"M21-GAP-03175":{"line":6430,"offset":1152627,"length":185,"previous":"M21-GAP-03174","next":"M21-GAP-03176"},"M21-GAP-03176":{"line":6431,"offset":1152812,"length":185,"previous":"M21-GAP-03175","next":"M21-GAP-03177"},"M21-GAP-03177":{"line":6432,"offset":1152997,"length":185,"previous":"M21-GAP-03176","next":"M21-GAP-03178"},"M21-GAP-03178":{"line":6433,"offset":1153182,"length":185,"previous":"M21-GAP-03177","next":"M21-GAP-03179"},"M21-GAP-03179":{"line":6434,"offset":1153367,"length":185,"previous":"M21-GAP-03178","next":"M21-GAP-03180"},"M21-GAP-03180":{"line":6435,"offset":1153552,"length":185,"previous":"M21-GAP-03179","next":"M21-GAP-03181"},"M21-GAP-03181":{"line":6436,"offset":1153737,"length":185,"previous":"M21-GAP-03180","next":"M21-GAP-03182"},"M21-GAP-03182":{"line":6437,"offset":1153922,"length":185,"previous":"M21-GAP-03181","next":"M21-GAP-03183"},"M21-GAP-03183":{"line":6438,"offset":1154107,"length":185,"previous":"M21-GAP-03182","next":"M21-GAP-03184"},"M21-GAP-03184":{"line":6439,"offset":1154292,"length":184,"previous":"M21-GAP-03183","next":"M21-GAP-03185"},"M21-GAP-03185":{"line":6440,"offset":1154476,"length":185,"previous":"M21-GAP-03184","next":"M21-GAP-03186"},"M21-GAP-03186":{"line":6441,"offset":1154661,"length":185,"previous":"M21-GAP-03185","next":"M21-GAP-03187"},"M21-GAP-03187":{"line":6442,"offset":1154846,"length":185,"previous":"M21-GAP-03186","next":"M21-GAP-03188"},"M21-GAP-03188":{"line":6443,"offset":1155031,"length":185,"previous":"M21-GAP-03187","next":"M21-GAP-03189"},"M21-GAP-03189":{"line":6444,"offset":1155216,"length":185,"previous":"M21-GAP-03188","next":"M21-GAP-03190"},"M21-GAP-03190":{"line":6445,"offset":1155401,"length":185,"previous":"M21-GAP-03189","next":"M21-GAP-03191"},"M21-GAP-03191":{"line":6446,"offset":1155586,"length":185,"previous":"M21-GAP-03190","next":"M21-GAP-03192"},"M21-GAP-03192":{"line":6447,"offset":1155771,"length":185,"previous":"M21-GAP-03191","next":"M21-GAP-03193"},"M21-GAP-03193":{"line":6448,"offset":1155956,"length":185,"previous":"M21-GAP-03192","next":"M21-GAP-03194"},"M21-GAP-03194":{"line":6449,"offset":1156141,"length":185,"previous":"M21-GAP-03193","next":"M21-GAP-03195"},"M21-GAP-03195":{"line":6450,"offset":1156326,"length":184,"previous":"M21-GAP-03194","next":"M21-GAP-03196"},"M21-GAP-03196":{"line":6451,"offset":1156510,"length":185,"previous":"M21-GAP-03195","next":"M21-GAP-03197"},"M21-GAP-03197":{"line":6452,"offset":1156695,"length":185,"previous":"M21-GAP-03196","next":"M21-GAP-03198"},"M21-GAP-03198":{"line":6453,"offset":1156880,"length":185,"previous":"M21-GAP-03197","next":"M21-GAP-03199"},"M21-GAP-03199":{"line":6454,"offset":1157065,"length":185,"previous":"M21-GAP-03198","next":"M21-GAP-03200"},"M21-GAP-03200":{"line":6455,"offset":1157250,"length":185,"previous":"M21-GAP-03199","next":"M21-GAP-03201"},"M21-GAP-03201":{"line":6456,"offset":1157435,"length":185,"previous":"M21-GAP-03200","next":"M21-GAP-03202"},"M21-GAP-03202":{"line":6457,"offset":1157620,"length":185,"previous":"M21-GAP-03201","next":"M21-GAP-03203"},"M21-GAP-03203":{"line":6458,"offset":1157805,"length":185,"previous":"M21-GAP-03202","next":"M21-GAP-03204"},"M21-GAP-03204":{"line":6459,"offset":1157990,"length":185,"previous":"M21-GAP-03203","next":"M21-GAP-03205"},"M21-GAP-03205":{"line":6460,"offset":1158175,"length":185,"previous":"M21-GAP-03204","next":"M21-GAP-03206"},"M21-GAP-03206":{"line":6461,"offset":1158360,"length":184,"previous":"M21-GAP-03205","next":"M21-GAP-03207"},"M21-GAP-03207":{"line":6462,"offset":1158544,"length":185,"previous":"M21-GAP-03206","next":"M21-GAP-03208"},"M21-GAP-03208":{"line":6463,"offset":1158729,"length":185,"previous":"M21-GAP-03207","next":"M21-GAP-03209"},"M21-GAP-03209":{"line":6464,"offset":1158914,"length":185,"previous":"M21-GAP-03208","next":"M21-GAP-03210"},"M21-GAP-03210":{"line":6465,"offset":1159099,"length":185,"previous":"M21-GAP-03209","next":"M21-GAP-03211"},"M21-GAP-03211":{"line":6466,"offset":1159284,"length":185,"previous":"M21-GAP-03210","next":"M21-GAP-03212"},"M21-GAP-03212":{"line":6467,"offset":1159469,"length":185,"previous":"M21-GAP-03211","next":"M21-GAP-03213"},"M21-GAP-03213":{"line":6468,"offset":1159654,"length":185,"previous":"M21-GAP-03212","next":"M21-GAP-03214"},"M21-GAP-03214":{"line":6469,"offset":1159839,"length":185,"previous":"M21-GAP-03213","next":"M21-GAP-03215"},"M21-GAP-03215":{"line":6470,"offset":1160024,"length":185,"previous":"M21-GAP-03214","next":"M21-GAP-03216"},"M21-GAP-03216":{"line":6471,"offset":1160209,"length":185,"previous":"M21-GAP-03215","next":"M21-GAP-03217"},"M21-GAP-03217":{"line":6472,"offset":1160394,"length":184,"previous":"M21-GAP-03216","next":"M21-GAP-03218"},"M21-GAP-03218":{"line":6473,"offset":1160578,"length":184,"previous":"M21-GAP-03217","next":"M21-GAP-03219"},"M21-GAP-03219":{"line":6474,"offset":1160762,"length":184,"previous":"M21-GAP-03218","next":"M21-GAP-03220"},"M21-GAP-03220":{"line":6475,"offset":1160946,"length":184,"previous":"M21-GAP-03219","next":"M21-GAP-03221"},"M21-GAP-03221":{"line":6476,"offset":1161130,"length":184,"previous":"M21-GAP-03220","next":"M21-GAP-03222"},"M21-GAP-03222":{"line":6477,"offset":1161314,"length":184,"previous":"M21-GAP-03221","next":"M21-GAP-03223"},"M21-GAP-03223":{"line":6478,"offset":1161498,"length":179,"previous":"M21-GAP-03222","next":"M21-GAP-03224"},"M21-GAP-03224":{"line":6479,"offset":1161677,"length":179,"previous":"M21-GAP-03223","next":"M21-GAP-03225"},"M21-GAP-03225":{"line":6480,"offset":1161856,"length":180,"previous":"M21-GAP-03224","next":"M21-GAP-03226"},"M21-GAP-03226":{"line":6481,"offset":1162036,"length":180,"previous":"M21-GAP-03225","next":"M21-GAP-03227"},"M21-GAP-03227":{"line":6482,"offset":1162216,"length":180,"previous":"M21-GAP-03226","next":"M21-GAP-03228"},"M21-GAP-03228":{"line":6483,"offset":1162396,"length":180,"previous":"M21-GAP-03227","next":"M21-GAP-03229"},"M21-GAP-03229":{"line":6484,"offset":1162576,"length":180,"previous":"M21-GAP-03228","next":"M21-GAP-03230"},"M21-GAP-03230":{"line":6485,"offset":1162756,"length":180,"previous":"M21-GAP-03229","next":"M21-GAP-03231"},"M21-GAP-03231":{"line":6486,"offset":1162936,"length":180,"previous":"M21-GAP-03230","next":"M21-GAP-03232"},"M21-GAP-03232":{"line":6487,"offset":1163116,"length":180,"previous":"M21-GAP-03231","next":"M21-GAP-03233"},"M21-GAP-03233":{"line":6488,"offset":1163296,"length":180,"previous":"M21-GAP-03232","next":"M21-GAP-03234"},"M21-GAP-03234":{"line":6489,"offset":1163476,"length":180,"previous":"M21-GAP-03233","next":"M21-GAP-03235"},"M21-GAP-03235":{"line":6490,"offset":1163656,"length":179,"previous":"M21-GAP-03234","next":"M21-GAP-03236"},"M21-GAP-03236":{"line":6491,"offset":1163835,"length":180,"previous":"M21-GAP-03235","next":"M21-GAP-03237"},"M21-GAP-03237":{"line":6492,"offset":1164015,"length":180,"previous":"M21-GAP-03236","next":"M21-GAP-03238"},"M21-GAP-03238":{"line":6493,"offset":1164195,"length":180,"previous":"M21-GAP-03237","next":"M21-GAP-03239"},"M21-GAP-03239":{"line":6494,"offset":1164375,"length":180,"previous":"M21-GAP-03238","next":"M21-GAP-03240"},"M21-GAP-03240":{"line":6495,"offset":1164555,"length":180,"previous":"M21-GAP-03239","next":"M21-GAP-03241"},"M21-GAP-03241":{"line":6496,"offset":1164735,"length":179,"previous":"M21-GAP-03240","next":"M21-GAP-03242"},"M21-GAP-03242":{"line":6497,"offset":1164914,"length":179,"previous":"M21-GAP-03241","next":"M21-GAP-03243"},"M21-GAP-03243":{"line":6498,"offset":1165093,"length":179,"previous":"M21-GAP-03242","next":"M21-GAP-03244"},"M21-GAP-03244":{"line":6499,"offset":1165272,"length":179,"previous":"M21-GAP-03243","next":"M21-GAP-03245"},"M21-GAP-03245":{"line":6500,"offset":1165451,"length":179,"previous":"M21-GAP-03244","next":"M21-GAP-03246"},"M21-GAP-03246":{"line":6501,"offset":1165630,"length":179,"previous":"M21-GAP-03245","next":"M21-GAP-03247"},"M21-GAP-03247":{"line":6502,"offset":1165809,"length":179,"previous":"M21-GAP-03246","next":"M21-GAP-03248"},"M21-GAP-03248":{"line":6503,"offset":1165988,"length":173,"previous":"M21-GAP-03247","next":"M21-GAP-03249"},"M21-GAP-03249":{"line":6504,"offset":1166161,"length":173,"previous":"M21-GAP-03248","next":"M21-GAP-03250"},"M21-GAP-03250":{"line":6505,"offset":1166334,"length":174,"previous":"M21-GAP-03249","next":"M21-GAP-03251"},"M21-GAP-03251":{"line":6506,"offset":1166508,"length":174,"previous":"M21-GAP-03250","next":"M21-GAP-03252"},"M21-GAP-03252":{"line":6507,"offset":1166682,"length":174,"previous":"M21-GAP-03251","next":"M21-GAP-03253"},"M21-GAP-03253":{"line":6508,"offset":1166856,"length":174,"previous":"M21-GAP-03252","next":"M21-GAP-03254"},"M21-GAP-03254":{"line":6509,"offset":1167030,"length":174,"previous":"M21-GAP-03253","next":"M21-GAP-03255"},"M21-GAP-03255":{"line":6510,"offset":1167204,"length":174,"previous":"M21-GAP-03254","next":"M21-GAP-03256"},"M21-GAP-03256":{"line":6511,"offset":1167378,"length":174,"previous":"M21-GAP-03255","next":"M21-GAP-03257"},"M21-GAP-03257":{"line":6512,"offset":1167552,"length":174,"previous":"M21-GAP-03256","next":"M21-GAP-03258"},"M21-GAP-03258":{"line":6513,"offset":1167726,"length":174,"previous":"M21-GAP-03257","next":"M21-GAP-03259"},"M21-GAP-03259":{"line":6514,"offset":1167900,"length":174,"previous":"M21-GAP-03258","next":"M21-GAP-03260"},"M21-GAP-03260":{"line":6515,"offset":1168074,"length":173,"previous":"M21-GAP-03259","next":"M21-GAP-03261"},"M21-GAP-03261":{"line":6516,"offset":1168247,"length":174,"previous":"M21-GAP-03260","next":"M21-GAP-03262"},"M21-GAP-03262":{"line":6517,"offset":1168421,"length":174,"previous":"M21-GAP-03261","next":"M21-GAP-03263"},"M21-GAP-03263":{"line":6518,"offset":1168595,"length":174,"previous":"M21-GAP-03262","next":"M21-GAP-03264"},"M21-GAP-03264":{"line":6519,"offset":1168769,"length":174,"previous":"M21-GAP-03263","next":"M21-GAP-03265"},"M21-GAP-03265":{"line":6520,"offset":1168943,"length":174,"previous":"M21-GAP-03264","next":"M21-GAP-03266"},"M21-GAP-03266":{"line":6521,"offset":1169117,"length":174,"previous":"M21-GAP-03265","next":"M21-GAP-03267"},"M21-GAP-03267":{"line":6522,"offset":1169291,"length":174,"previous":"M21-GAP-03266","next":"M21-GAP-03268"},"M21-GAP-03268":{"line":6523,"offset":1169465,"length":174,"previous":"M21-GAP-03267","next":"M21-GAP-03269"},"M21-GAP-03269":{"line":6524,"offset":1169639,"length":174,"previous":"M21-GAP-03268","next":"M21-GAP-03270"},"M21-GAP-03270":{"line":6525,"offset":1169813,"length":174,"previous":"M21-GAP-03269","next":"M21-GAP-03271"},"M21-GAP-03271":{"line":6526,"offset":1169987,"length":173,"previous":"M21-GAP-03270","next":"M21-GAP-03272"},"M21-GAP-03272":{"line":6527,"offset":1170160,"length":174,"previous":"M21-GAP-03271","next":"M21-GAP-03273"},"M21-GAP-03273":{"line":6528,"offset":1170334,"length":174,"previous":"M21-GAP-03272","next":"M21-GAP-03274"},"M21-GAP-03274":{"line":6529,"offset":1170508,"length":174,"previous":"M21-GAP-03273","next":"M21-GAP-03275"},"M21-GAP-03275":{"line":6530,"offset":1170682,"length":173,"previous":"M21-GAP-03274","next":"M21-GAP-03276"},"M21-GAP-03276":{"line":6531,"offset":1170855,"length":173,"previous":"M21-GAP-03275","next":"M21-GAP-03277"},"M21-GAP-03277":{"line":6532,"offset":1171028,"length":173,"previous":"M21-GAP-03276","next":"M21-GAP-03278"},"M21-GAP-03278":{"line":6533,"offset":1171201,"length":173,"previous":"M21-GAP-03277","next":"M21-GAP-03279"},"M21-GAP-03279":{"line":6534,"offset":1171374,"length":173,"previous":"M21-GAP-03278","next":"M21-GAP-03280"},"M21-GAP-03280":{"line":6535,"offset":1171547,"length":173,"previous":"M21-GAP-03279","next":"M21-GAP-03281"},"M21-GAP-03281":{"line":6536,"offset":1171720,"length":177,"previous":"M21-GAP-03280","next":"M21-GAP-03282"},"M21-GAP-03282":{"line":6537,"offset":1171897,"length":180,"previous":"M21-GAP-03281","next":"M21-GAP-03283"},"M21-GAP-03283":{"line":6538,"offset":1172077,"length":187,"previous":"M21-GAP-03282","next":"M21-GAP-03284"},"M21-GAP-03284":{"line":6539,"offset":1172264,"length":182,"previous":"M21-GAP-03283","next":"M21-GAP-03285"},"M21-GAP-03285":{"line":6540,"offset":1172446,"length":202,"previous":"M21-GAP-03284","next":"M21-GAP-03286"},"M21-GAP-03286":{"line":6541,"offset":1172648,"length":204,"previous":"M21-GAP-03285","next":"M21-GAP-03287"},"M21-GAP-03287":{"line":6542,"offset":1172852,"length":208,"previous":"M21-GAP-03286","next":"M21-GAP-03288"},"M21-GAP-03288":{"line":6543,"offset":1173060,"length":198,"previous":"M21-GAP-03287","next":"M21-GAP-03289"},"M21-GAP-03289":{"line":6544,"offset":1173258,"length":195,"previous":"M21-GAP-03288","next":"M21-GAP-03290"},"M21-GAP-03290":{"line":6545,"offset":1173453,"length":197,"previous":"M21-GAP-03289","next":"M21-GAP-03291"},"M21-GAP-03291":{"line":6546,"offset":1173650,"length":192,"previous":"M21-GAP-03290","next":"M21-GAP-03292"},"M21-GAP-03292":{"line":6547,"offset":1173842,"length":205,"previous":"M21-GAP-03291","next":"M21-GAP-03293"},"M21-GAP-03293":{"line":6548,"offset":1174047,"length":195,"previous":"M21-GAP-03292","next":"M21-GAP-03294"},"M21-GAP-03294":{"line":6549,"offset":1174242,"length":194,"previous":"M21-GAP-03293","next":"M21-GAP-03295"},"M21-GAP-03295":{"line":6550,"offset":1174436,"length":197,"previous":"M21-GAP-03294","next":"M21-GAP-03296"},"M21-GAP-03296":{"line":6551,"offset":1174633,"length":192,"previous":"M21-GAP-03295","next":"M21-GAP-03297"},"M21-GAP-03297":{"line":6552,"offset":1174825,"length":193,"previous":"M21-GAP-03296","next":"M21-GAP-03298"},"M21-GAP-03298":{"line":6553,"offset":1175018,"length":192,"previous":"M21-GAP-03297","next":"M21-GAP-03299"},"M21-GAP-03299":{"line":6554,"offset":1175210,"length":204,"previous":"M21-GAP-03298","next":"M21-GAP-03300"},"M21-GAP-03300":{"line":6555,"offset":1175414,"length":207,"previous":"M21-GAP-03299","next":"M21-GAP-03301"},"M21-GAP-03301":{"line":6556,"offset":1175621,"length":199,"previous":"M21-GAP-03300","next":"M21-GAP-03302"},"M21-GAP-03302":{"line":6557,"offset":1175820,"length":192,"previous":"M21-GAP-03301","next":"M21-GAP-03303"},"M21-GAP-03303":{"line":6558,"offset":1176012,"length":193,"previous":"M21-GAP-03302","next":"M21-GAP-03304"},"M21-GAP-03304":{"line":6559,"offset":1176205,"length":197,"previous":"M21-GAP-03303","next":"M21-GAP-03305"},"M21-GAP-03305":{"line":6560,"offset":1176402,"length":208,"previous":"M21-GAP-03304","next":"M21-GAP-03306"},"M21-GAP-03306":{"line":6561,"offset":1176610,"length":205,"previous":"M21-GAP-03305","next":"M21-GAP-03307"},"M21-GAP-03307":{"line":6562,"offset":1176815,"length":203,"previous":"M21-GAP-03306","next":"M21-GAP-03308"},"M21-GAP-03308":{"line":6563,"offset":1177018,"length":201,"previous":"M21-GAP-03307","next":"M21-GAP-03309"},"M21-GAP-03309":{"line":6564,"offset":1177219,"length":204,"previous":"M21-GAP-03308","next":"M21-GAP-03310"},"M21-GAP-03310":{"line":6565,"offset":1177423,"length":198,"previous":"M21-GAP-03309","next":"M21-GAP-03311"},"M21-GAP-03311":{"line":6566,"offset":1177621,"length":192,"previous":"M21-GAP-03310","next":"M21-GAP-03312"},"M21-GAP-03312":{"line":6567,"offset":1177813,"length":195,"previous":"M21-GAP-03311","next":"M21-GAP-03313"},"M21-GAP-03313":{"line":6568,"offset":1178008,"length":207,"previous":"M21-GAP-03312","next":"M21-GAP-03314"},"M21-GAP-03314":{"line":6569,"offset":1178215,"length":197,"previous":"M21-GAP-03313","next":"M21-GAP-03315"},"M21-GAP-03315":{"line":6570,"offset":1178412,"length":196,"previous":"M21-GAP-03314","next":"M21-GAP-03316"},"M21-GAP-03316":{"line":6571,"offset":1178608,"length":196,"previous":"M21-GAP-03315","next":"M21-GAP-03317"},"M21-GAP-03317":{"line":6572,"offset":1178804,"length":195,"previous":"M21-GAP-03316","next":"M21-GAP-03318"},"M21-GAP-03318":{"line":6573,"offset":1178999,"length":197,"previous":"M21-GAP-03317","next":"M21-GAP-03319"},"M21-GAP-03319":{"line":6574,"offset":1179196,"length":200,"previous":"M21-GAP-03318","next":"M21-GAP-03320"},"M21-GAP-03320":{"line":6575,"offset":1179396,"length":193,"previous":"M21-GAP-03319","next":"M21-GAP-03321"},"M21-GAP-03321":{"line":6576,"offset":1179589,"length":202,"previous":"M21-GAP-03320","next":"M21-GAP-03322"},"M21-GAP-03322":{"line":6577,"offset":1179791,"length":191,"previous":"M21-GAP-03321","next":"M21-GAP-03323"},"M21-GAP-03323":{"line":6578,"offset":1179982,"length":196,"previous":"M21-GAP-03322","next":"M21-GAP-03324"},"M21-GAP-03324":{"line":6579,"offset":1180178,"length":199,"previous":"M21-GAP-03323","next":"M21-GAP-03325"},"M21-GAP-03325":{"line":6580,"offset":1180377,"length":198,"previous":"M21-GAP-03324","next":"M21-GAP-03326"},"M21-GAP-03326":{"line":6581,"offset":1180575,"length":183,"previous":"M21-GAP-03325","next":"M21-GAP-03327"},"M21-GAP-03327":{"line":6582,"offset":1180758,"length":180,"previous":"M21-GAP-03326","next":"M21-GAP-03328"},"M21-GAP-03328":{"line":6583,"offset":1180938,"length":197,"previous":"M21-GAP-03327","next":"M21-GAP-03329"},"M21-GAP-03329":{"line":6584,"offset":1181135,"length":200,"previous":"M21-GAP-03328","next":"M21-GAP-03330"},"M21-GAP-03330":{"line":6585,"offset":1181335,"length":200,"previous":"M21-GAP-03329","next":"M21-GAP-03331"},"M21-GAP-03331":{"line":6586,"offset":1181535,"length":203,"previous":"M21-GAP-03330","next":"M21-GAP-03332"},"M21-GAP-03332":{"line":6587,"offset":1181738,"length":202,"previous":"M21-GAP-03331","next":"M21-GAP-03333"},"M21-GAP-03333":{"line":6588,"offset":1181940,"length":207,"previous":"M21-GAP-03332","next":"M21-GAP-03334"},"M21-GAP-03334":{"line":6589,"offset":1182147,"length":208,"previous":"M21-GAP-03333","next":"M21-GAP-03335"},"M21-GAP-03335":{"line":6590,"offset":1182355,"length":201,"previous":"M21-GAP-03334","next":"M21-GAP-03336"},"M21-GAP-03336":{"line":6591,"offset":1182556,"length":205,"previous":"M21-GAP-03335","next":"M21-GAP-03337"},"M21-GAP-03337":{"line":6592,"offset":1182761,"length":201,"previous":"M21-GAP-03336","next":"M21-GAP-03338"},"M21-GAP-03338":{"line":6593,"offset":1182962,"length":198,"previous":"M21-GAP-03337","next":"M21-GAP-03339"},"M21-GAP-03339":{"line":6594,"offset":1183160,"length":209,"previous":"M21-GAP-03338","next":"M21-GAP-03340"},"M21-GAP-03340":{"line":6595,"offset":1183369,"length":203,"previous":"M21-GAP-03339","next":"M21-GAP-03341"},"M21-GAP-03341":{"line":6596,"offset":1183572,"length":180,"previous":"M21-GAP-03340","next":"M21-GAP-03342"},"M21-GAP-03342":{"line":6597,"offset":1183752,"length":181,"previous":"M21-GAP-03341","next":"M21-GAP-03343"},"M21-GAP-03343":{"line":6598,"offset":1183933,"length":182,"previous":"M21-GAP-03342","next":"M21-GAP-03344"},"M21-GAP-03344":{"line":6599,"offset":1184115,"length":181,"previous":"M21-GAP-03343","next":"M21-GAP-03345"},"M21-GAP-03345":{"line":6600,"offset":1184296,"length":196,"previous":"M21-GAP-03344","next":"M21-GAP-03346"},"M21-GAP-03346":{"line":6601,"offset":1184492,"length":192,"previous":"M21-GAP-03345","next":"M21-GAP-03347"},"M21-GAP-03347":{"line":6602,"offset":1184684,"length":192,"previous":"M21-GAP-03346","next":"M21-GAP-03348"},"M21-GAP-03348":{"line":6603,"offset":1184876,"length":192,"previous":"M21-GAP-03347","next":"M21-GAP-03349"},"M21-GAP-03349":{"line":6604,"offset":1185068,"length":196,"previous":"M21-GAP-03348","next":"M21-GAP-03350"},"M21-GAP-03350":{"line":6605,"offset":1185264,"length":196,"previous":"M21-GAP-03349","next":"M21-GAP-03351"},"M21-GAP-03351":{"line":6606,"offset":1185460,"length":197,"previous":"M21-GAP-03350","next":"M21-GAP-03352"},"M21-GAP-03352":{"line":6607,"offset":1185657,"length":198,"previous":"M21-GAP-03351","next":"M21-GAP-03353"},"M21-GAP-03353":{"line":6608,"offset":1185855,"length":194,"previous":"M21-GAP-03352","next":"M21-GAP-03354"},"M21-GAP-03354":{"line":6609,"offset":1186049,"length":194,"previous":"M21-GAP-03353","next":"M21-GAP-03355"},"M21-GAP-03355":{"line":6610,"offset":1186243,"length":194,"previous":"M21-GAP-03354","next":"M21-GAP-03356"},"M21-GAP-03356":{"line":6611,"offset":1186437,"length":197,"previous":"M21-GAP-03355","next":"M21-GAP-03357"},"M21-GAP-03357":{"line":6612,"offset":1186634,"length":193,"previous":"M21-GAP-03356","next":"M21-GAP-03358"},"M21-GAP-03358":{"line":6613,"offset":1186827,"length":193,"previous":"M21-GAP-03357","next":"M21-GAP-03359"},"M21-GAP-03359":{"line":6614,"offset":1187020,"length":196,"previous":"M21-GAP-03358","next":"M21-GAP-03360"},"M21-GAP-03360":{"line":6615,"offset":1187216,"length":193,"previous":"M21-GAP-03359","next":"M21-GAP-03361"},"M21-GAP-03361":{"line":6616,"offset":1187409,"length":197,"previous":"M21-GAP-03360","next":"M21-GAP-03362"},"M21-GAP-03362":{"line":6617,"offset":1187606,"length":195,"previous":"M21-GAP-03361","next":"M21-GAP-03363"},"M21-GAP-03363":{"line":6618,"offset":1187801,"length":201,"previous":"M21-GAP-03362","next":"M21-GAP-03364"},"M21-GAP-03364":{"line":6619,"offset":1188002,"length":197,"previous":"M21-GAP-03363","next":"M21-GAP-03365"},"M21-GAP-03365":{"line":6620,"offset":1188199,"length":197,"previous":"M21-GAP-03364","next":"M21-GAP-03366"},"M21-GAP-03366":{"line":6621,"offset":1188396,"length":197,"previous":"M21-GAP-03365","next":"M21-GAP-03367"},"M21-GAP-03367":{"line":6622,"offset":1188593,"length":197,"previous":"M21-GAP-03366","next":"M21-GAP-03368"},"M21-GAP-03368":{"line":6623,"offset":1188790,"length":186,"previous":"M21-GAP-03367","next":"M21-GAP-03369"},"M21-GAP-03369":{"line":6624,"offset":1188976,"length":200,"previous":"M21-GAP-03368","next":"M21-GAP-03370"},"M21-GAP-03370":{"line":6625,"offset":1189176,"length":189,"previous":"M21-GAP-03369","next":"M21-GAP-03371"},"M21-GAP-03371":{"line":6626,"offset":1189365,"length":199,"previous":"M21-GAP-03370","next":"M21-GAP-03372"},"M21-GAP-03372":{"line":6627,"offset":1189564,"length":188,"previous":"M21-GAP-03371","next":"M21-GAP-03373"},"M21-GAP-03373":{"line":6628,"offset":1189752,"length":181,"previous":"M21-GAP-03372","next":"M21-GAP-03374"},"M21-GAP-03374":{"line":6629,"offset":1189933,"length":185,"previous":"M21-GAP-03373","next":"M21-GAP-03375"},"M21-GAP-03375":{"line":6630,"offset":1190118,"length":192,"previous":"M21-GAP-03374","next":"M21-GAP-03376"},"M21-GAP-03376":{"line":6631,"offset":1190310,"length":181,"previous":"M21-GAP-03375","next":"M21-GAP-03377"},"M21-GAP-03377":{"line":6632,"offset":1190491,"length":169,"previous":"M21-GAP-03376","next":"M21-GAP-03378"},"M21-GAP-03378":{"line":6633,"offset":1190660,"length":178,"previous":"M21-GAP-03377","next":"M21-GAP-03379"},"M21-GAP-03379":{"line":6634,"offset":1190838,"length":169,"previous":"M21-GAP-03378","next":"M21-GAP-03380"},"M21-GAP-03380":{"line":6635,"offset":1191007,"length":168,"previous":"M21-GAP-03379","next":"M21-GAP-03381"},"M21-GAP-03381":{"line":6636,"offset":1191175,"length":175,"previous":"M21-GAP-03380","next":"M21-GAP-03382"},"M21-GAP-03382":{"line":6637,"offset":1191350,"length":187,"previous":"M21-GAP-03381","next":"M21-GAP-03383"},"M21-GAP-03383":{"line":6638,"offset":1191537,"length":177,"previous":"M21-GAP-03382","next":"M21-GAP-03384"},"M21-GAP-03384":{"line":6639,"offset":1191714,"length":183,"previous":"M21-GAP-03383","next":"M21-GAP-03385"},"M21-GAP-03385":{"line":6640,"offset":1191897,"length":182,"previous":"M21-GAP-03384","next":"M21-GAP-03386"},"M21-GAP-03386":{"line":6641,"offset":1192079,"length":170,"previous":"M21-GAP-03385","next":"M21-GAP-03387"},"M21-GAP-03387":{"line":6642,"offset":1192249,"length":169,"previous":"M21-GAP-03386","next":"M21-GAP-03388"},"M21-GAP-03388":{"line":6643,"offset":1192418,"length":179,"previous":"M21-GAP-03387","next":"M21-GAP-03389"},"M21-GAP-03389":{"line":6644,"offset":1192597,"length":165,"previous":"M21-GAP-03388","next":"M21-GAP-03390"},"M21-GAP-03390":{"line":6645,"offset":1192762,"length":166,"previous":"M21-GAP-03389","next":"M21-GAP-03391"},"M21-GAP-03391":{"line":6646,"offset":1192928,"length":184,"previous":"M21-GAP-03390","next":"M21-GAP-03392"},"M21-GAP-03392":{"line":6647,"offset":1193112,"length":188,"previous":"M21-GAP-03391","next":"M21-GAP-03393"},"M21-GAP-03393":{"line":6648,"offset":1193300,"length":180,"previous":"M21-GAP-03392","next":"M21-GAP-03394"},"M21-GAP-03394":{"line":6649,"offset":1193480,"length":198,"previous":"M21-GAP-03393","next":"M21-GAP-03395"},"M21-GAP-03395":{"line":6650,"offset":1193678,"length":180,"previous":"M21-GAP-03394","next":"M21-GAP-03396"},"M21-GAP-03396":{"line":6651,"offset":1193858,"length":187,"previous":"M21-GAP-03395","next":"M21-GAP-03397"},"M21-GAP-03397":{"line":6652,"offset":1194045,"length":184,"previous":"M21-GAP-03396","next":"M21-GAP-03398"},"M21-GAP-03398":{"line":6653,"offset":1194229,"length":179,"previous":"M21-GAP-03397","next":"M21-GAP-03399"},"M21-GAP-03399":{"line":6654,"offset":1194408,"length":179,"previous":"M21-GAP-03398","next":"M21-GAP-03400"},"M21-GAP-03400":{"line":6655,"offset":1194587,"length":164,"previous":"M21-GAP-03399","next":"M21-GAP-03401"},"M21-GAP-03401":{"line":6656,"offset":1194751,"length":166,"previous":"M21-GAP-03400","next":"M21-GAP-03402"},"M21-GAP-03402":{"line":6657,"offset":1194917,"length":184,"previous":"M21-GAP-03401","next":"M21-GAP-03403"},"M21-GAP-03403":{"line":6658,"offset":1195101,"length":178,"previous":"M21-GAP-03402","next":"M21-GAP-03404"},"M21-GAP-03404":{"line":6659,"offset":1195279,"length":184,"previous":"M21-GAP-03403","next":"M21-GAP-03405"},"M21-GAP-03405":{"line":6660,"offset":1195463,"length":180,"previous":"M21-GAP-03404","next":"M21-GAP-03406"},"M21-GAP-03406":{"line":6661,"offset":1195643,"length":189,"previous":"M21-GAP-03405","next":"M21-GAP-03407"},"M21-GAP-03407":{"line":6662,"offset":1195832,"length":173,"previous":"M21-GAP-03406","next":"M21-GAP-03408"},"M21-GAP-03408":{"line":6663,"offset":1196005,"length":189,"previous":"M21-GAP-03407","next":"M21-GAP-03409"},"M21-GAP-03409":{"line":6664,"offset":1196194,"length":187,"previous":"M21-GAP-03408","next":"M21-GAP-03410"},"M21-GAP-03410":{"line":6665,"offset":1196381,"length":190,"previous":"M21-GAP-03409","next":"M21-GAP-03411"},"M21-GAP-03411":{"line":6666,"offset":1196571,"length":182,"previous":"M21-GAP-03410","next":"M21-GAP-03412"},"M21-GAP-03412":{"line":6667,"offset":1196753,"length":171,"previous":"M21-GAP-03411","next":"M21-GAP-03413"},"M21-GAP-03413":{"line":6668,"offset":1196924,"length":173,"previous":"M21-GAP-03412","next":"M21-GAP-03414"},"M21-GAP-03414":{"line":6669,"offset":1197097,"length":176,"previous":"M21-GAP-03413","next":"M21-GAP-03415"},"M21-GAP-03415":{"line":6670,"offset":1197273,"length":181,"previous":"M21-GAP-03414","next":"M21-GAP-03416"},"M21-GAP-03416":{"line":6671,"offset":1197454,"length":179,"previous":"M21-GAP-03415","next":"M21-GAP-03417"},"M21-GAP-03417":{"line":6672,"offset":1197633,"length":187,"previous":"M21-GAP-03416","next":"M21-GAP-03418"},"M21-GAP-03418":{"line":6673,"offset":1197820,"length":179,"previous":"M21-GAP-03417","next":"M21-GAP-03419"},"M21-GAP-03419":{"line":6674,"offset":1197999,"length":186,"previous":"M21-GAP-03418","next":"M21-GAP-03420"},"M21-GAP-03420":{"line":6675,"offset":1198185,"length":183,"previous":"M21-GAP-03419","next":"M21-GAP-03421"},"M21-GAP-03421":{"line":6676,"offset":1198368,"length":183,"previous":"M21-GAP-03420","next":"M21-GAP-03422"},"M21-GAP-03422":{"line":6677,"offset":1198551,"length":183,"previous":"M21-GAP-03421","next":"M21-GAP-03423"},"M21-GAP-03423":{"line":6678,"offset":1198734,"length":185,"previous":"M21-GAP-03422","next":"M21-GAP-03424"},"M21-GAP-03424":{"line":6679,"offset":1198919,"length":183,"previous":"M21-GAP-03423","next":"M21-GAP-03425"},"M21-GAP-03425":{"line":6680,"offset":1199102,"length":186,"previous":"M21-GAP-03424","next":"M21-GAP-03426"},"M21-GAP-03426":{"line":6681,"offset":1199288,"length":186,"previous":"M21-GAP-03425","next":"M21-GAP-03427"},"M21-GAP-03427":{"line":6682,"offset":1199474,"length":173,"previous":"M21-GAP-03426","next":"M21-GAP-03428"},"M21-GAP-03428":{"line":6683,"offset":1199647,"length":195,"previous":"M21-GAP-03427","next":"M21-GAP-03429"},"M21-GAP-03429":{"line":6684,"offset":1199842,"length":198,"previous":"M21-GAP-03428","next":"M21-GAP-03430"},"M21-GAP-03430":{"line":6685,"offset":1200040,"length":198,"previous":"M21-GAP-03429","next":"M21-GAP-03431"},"M21-GAP-03431":{"line":6686,"offset":1200238,"length":196,"previous":"M21-GAP-03430","next":"M21-GAP-03432"},"M21-GAP-03432":{"line":6687,"offset":1200434,"length":198,"previous":"M21-GAP-03431","next":"M21-GAP-03433"},"M21-GAP-03433":{"line":6688,"offset":1200632,"length":197,"previous":"M21-GAP-03432","next":"M21-GAP-03434"},"M21-GAP-03434":{"line":6689,"offset":1200829,"length":213,"previous":"M21-GAP-03433","next":"M21-GAP-03435"},"M21-GAP-03435":{"line":6690,"offset":1201042,"length":202,"previous":"M21-GAP-03434","next":"M21-GAP-03436"},"M21-GAP-03436":{"line":6691,"offset":1201244,"length":216,"previous":"M21-GAP-03435","next":"M21-GAP-03437"},"M21-GAP-03437":{"line":6692,"offset":1201460,"length":205,"previous":"M21-GAP-03436","next":"M21-GAP-03438"},"M21-GAP-03438":{"line":6693,"offset":1201665,"length":215,"previous":"M21-GAP-03437","next":"M21-GAP-03439"},"M21-GAP-03439":{"line":6694,"offset":1201880,"length":204,"previous":"M21-GAP-03438","next":"M21-GAP-03440"},"M21-GAP-03440":{"line":6695,"offset":1202084,"length":201,"previous":"M21-GAP-03439","next":"M21-GAP-03441"},"M21-GAP-03441":{"line":6696,"offset":1202285,"length":208,"previous":"M21-GAP-03440","next":"M21-GAP-03442"},"M21-GAP-03442":{"line":6697,"offset":1202493,"length":197,"previous":"M21-GAP-03441","next":"M21-GAP-03443"},"M21-GAP-03443":{"line":6698,"offset":1202690,"length":192,"previous":"M21-GAP-03442","next":"M21-GAP-03444"},"M21-GAP-03444":{"line":6699,"offset":1202882,"length":196,"previous":"M21-GAP-03443","next":"M21-GAP-03445"},"M21-GAP-03445":{"line":6700,"offset":1203078,"length":194,"previous":"M21-GAP-03444","next":"M21-GAP-03446"},"M21-GAP-03446":{"line":6701,"offset":1203272,"length":194,"previous":"M21-GAP-03445","next":"M21-GAP-03447"},"M21-GAP-03447":{"line":6702,"offset":1203466,"length":195,"previous":"M21-GAP-03446","next":"M21-GAP-03448"},"M21-GAP-03448":{"line":6703,"offset":1203661,"length":195,"previous":"M21-GAP-03447","next":"M21-GAP-03449"},"M21-GAP-03449":{"line":6704,"offset":1203856,"length":200,"previous":"M21-GAP-03448","next":"M21-GAP-03450"},"M21-GAP-03450":{"line":6705,"offset":1204056,"length":196,"previous":"M21-GAP-03449","next":"M21-GAP-03451"},"M21-GAP-03451":{"line":6706,"offset":1204252,"length":195,"previous":"M21-GAP-03450","next":"M21-GAP-03452"},"M21-GAP-03452":{"line":6707,"offset":1204447,"length":211,"previous":"M21-GAP-03451","next":"M21-GAP-03453"},"M21-GAP-03453":{"line":6708,"offset":1204658,"length":200,"previous":"M21-GAP-03452","next":"M21-GAP-03454"},"M21-GAP-03454":{"line":6709,"offset":1204858,"length":214,"previous":"M21-GAP-03453","next":"M21-GAP-03455"},"M21-GAP-03455":{"line":6710,"offset":1205072,"length":203,"previous":"M21-GAP-03454","next":"M21-GAP-03456"},"M21-GAP-03456":{"line":6711,"offset":1205275,"length":213,"previous":"M21-GAP-03455","next":"M21-GAP-03457"},"M21-GAP-03457":{"line":6712,"offset":1205488,"length":202,"previous":"M21-GAP-03456","next":"M21-GAP-03458"},"M21-GAP-03458":{"line":6713,"offset":1205690,"length":206,"previous":"M21-GAP-03457","next":"M21-GAP-03459"},"M21-GAP-03459":{"line":6714,"offset":1205896,"length":195,"previous":"M21-GAP-03458","next":"M21-GAP-03460"},"M21-GAP-03460":{"line":6715,"offset":1206091,"length":180,"previous":"M21-GAP-03459","next":"M21-GAP-03461"},"M21-GAP-03461":{"line":6716,"offset":1206271,"length":171,"previous":"M21-GAP-03460","next":"M21-GAP-03462"},"M21-GAP-03462":{"line":6717,"offset":1206442,"length":172,"previous":"M21-GAP-03461","next":"M21-GAP-03463"},"M21-GAP-03463":{"line":6718,"offset":1206614,"length":163,"previous":"M21-GAP-03462","next":"M21-GAP-03464"},"M21-GAP-03464":{"line":6719,"offset":1206777,"length":186,"previous":"M21-GAP-03463","next":"M21-GAP-03465"},"M21-GAP-03465":{"line":6720,"offset":1206963,"length":180,"previous":"M21-GAP-03464","next":"M21-GAP-03466"},"M21-GAP-03466":{"line":6721,"offset":1207143,"length":167,"previous":"M21-GAP-03465","next":"M21-GAP-03467"},"M21-GAP-03467":{"line":6722,"offset":1207310,"length":167,"previous":"M21-GAP-03466","next":"M21-GAP-03468"},"M21-GAP-03468":{"line":6723,"offset":1207477,"length":172,"previous":"M21-GAP-03467","next":"M21-GAP-03469"},"M21-GAP-03469":{"line":6724,"offset":1207649,"length":181,"previous":"M21-GAP-03468","next":"M21-GAP-03470"},"M21-GAP-03470":{"line":6725,"offset":1207830,"length":164,"previous":"M21-GAP-03469","next":"M21-GAP-03471"},"M21-GAP-03471":{"line":6726,"offset":1207994,"length":168,"previous":"M21-GAP-03470","next":"M21-GAP-03472"},"M21-GAP-03472":{"line":6727,"offset":1208162,"length":175,"previous":"M21-GAP-03471","next":"M21-GAP-03473"},"M21-GAP-03473":{"line":6728,"offset":1208337,"length":176,"previous":"M21-GAP-03472","next":"M21-GAP-03474"},"M21-GAP-03474":{"line":6729,"offset":1208513,"length":175,"previous":"M21-GAP-03473","next":"M21-GAP-03475"},"M21-GAP-03475":{"line":6730,"offset":1208688,"length":177,"previous":"M21-GAP-03474","next":"M21-GAP-03476"},"M21-GAP-03476":{"line":6731,"offset":1208865,"length":178,"previous":"M21-GAP-03475","next":"M21-GAP-03477"},"M21-GAP-03477":{"line":6732,"offset":1209043,"length":179,"previous":"M21-GAP-03476","next":"M21-GAP-03478"},"M21-GAP-03478":{"line":6733,"offset":1209222,"length":181,"previous":"M21-GAP-03477","next":"M21-GAP-03479"},"M21-GAP-03479":{"line":6734,"offset":1209403,"length":188,"previous":"M21-GAP-03478","next":"M21-GAP-03480"},"M21-GAP-03480":{"line":6735,"offset":1209591,"length":186,"previous":"M21-GAP-03479","next":"M21-GAP-03481"},"M21-GAP-03481":{"line":6736,"offset":1209777,"length":187,"previous":"M21-GAP-03480","next":"M21-GAP-03482"},"M21-GAP-03482":{"line":6737,"offset":1209964,"length":198,"previous":"M21-GAP-03481","next":"M21-GAP-03483"},"M21-GAP-03483":{"line":6738,"offset":1210162,"length":187,"previous":"M21-GAP-03482","next":"M21-GAP-03484"},"M21-GAP-03484":{"line":6739,"offset":1210349,"length":201,"previous":"M21-GAP-03483","next":"M21-GAP-03485"},"M21-GAP-03485":{"line":6740,"offset":1210550,"length":190,"previous":"M21-GAP-03484","next":"M21-GAP-03486"},"M21-GAP-03486":{"line":6741,"offset":1210740,"length":200,"previous":"M21-GAP-03485","next":"M21-GAP-03487"},"M21-GAP-03487":{"line":6742,"offset":1210940,"length":189,"previous":"M21-GAP-03486","next":"M21-GAP-03488"},"M21-GAP-03488":{"line":6743,"offset":1211129,"length":193,"previous":"M21-GAP-03487","next":"M21-GAP-03489"},"M21-GAP-03489":{"line":6744,"offset":1211322,"length":182,"previous":"M21-GAP-03488","next":"M21-GAP-03490"},"M21-GAP-03490":{"line":6745,"offset":1211504,"length":171,"previous":"M21-GAP-03489","next":"M21-GAP-03491"},"M21-GAP-03491":{"line":6746,"offset":1211675,"length":176,"previous":"M21-GAP-03490","next":"M21-GAP-03492"},"M21-GAP-03492":{"line":6747,"offset":1211851,"length":171,"previous":"M21-GAP-03491","next":"M21-GAP-03493"},"M21-GAP-03493":{"line":6748,"offset":1212022,"length":171,"previous":"M21-GAP-03492","next":"M21-GAP-03494"},"M21-GAP-03494":{"line":6749,"offset":1212193,"length":201,"previous":"M21-GAP-03493","next":"M21-GAP-03495"},"M21-GAP-03495":{"line":6750,"offset":1212394,"length":178,"previous":"M21-GAP-03494","next":"M21-GAP-03496"},"M21-GAP-03496":{"line":6751,"offset":1212572,"length":199,"previous":"M21-GAP-03495","next":"M21-GAP-03497"},"M21-GAP-03497":{"line":6752,"offset":1212771,"length":168,"previous":"M21-GAP-03496","next":"M21-GAP-03498"},"M21-GAP-03498":{"line":6753,"offset":1212939,"length":178,"previous":"M21-GAP-03497","next":"M21-GAP-03499"},"M21-GAP-03499":{"line":6754,"offset":1213117,"length":171,"previous":"M21-GAP-03498","next":"M21-GAP-03500"},"M21-GAP-03500":{"line":6755,"offset":1213288,"length":164,"previous":"M21-GAP-03499","next":"M21-GAP-03501"},"M21-GAP-03501":{"line":6756,"offset":1213452,"length":177,"previous":"M21-GAP-03500","next":"M21-GAP-03502"},"M21-GAP-03502":{"line":6757,"offset":1213629,"length":177,"previous":"M21-GAP-03501","next":"M21-GAP-03503"},"M21-GAP-03503":{"line":6758,"offset":1213806,"length":190,"previous":"M21-GAP-03502","next":"M21-GAP-03504"},"M21-GAP-03504":{"line":6759,"offset":1213996,"length":188,"previous":"M21-GAP-03503","next":"M21-GAP-03505"},"M21-GAP-03505":{"line":6760,"offset":1214184,"length":190,"previous":"M21-GAP-03504","next":"M21-GAP-03506"},"M21-GAP-03506":{"line":6761,"offset":1214374,"length":190,"previous":"M21-GAP-03505","next":"M21-GAP-03507"},"M21-GAP-03507":{"line":6762,"offset":1214564,"length":189,"previous":"M21-GAP-03506","next":"M21-GAP-03508"},"M21-GAP-03508":{"line":6763,"offset":1214753,"length":205,"previous":"M21-GAP-03507","next":"M21-GAP-03509"},"M21-GAP-03509":{"line":6764,"offset":1214958,"length":194,"previous":"M21-GAP-03508","next":"M21-GAP-03510"},"M21-GAP-03510":{"line":6765,"offset":1215152,"length":208,"previous":"M21-GAP-03509","next":"M21-GAP-03511"},"M21-GAP-03511":{"line":6766,"offset":1215360,"length":197,"previous":"M21-GAP-03510","next":"M21-GAP-03512"},"M21-GAP-03512":{"line":6767,"offset":1215557,"length":207,"previous":"M21-GAP-03511","next":"M21-GAP-03513"},"M21-GAP-03513":{"line":6768,"offset":1215764,"length":196,"previous":"M21-GAP-03512","next":"M21-GAP-03514"},"M21-GAP-03514":{"line":6769,"offset":1215960,"length":200,"previous":"M21-GAP-03513","next":"M21-GAP-03515"},"M21-GAP-03515":{"line":6770,"offset":1216160,"length":189,"previous":"M21-GAP-03514","next":"M21-GAP-03516"},"M21-GAP-03516":{"line":6771,"offset":1216349,"length":177,"previous":"M21-GAP-03515","next":"M21-GAP-03517"},"M21-GAP-03517":{"line":6772,"offset":1216526,"length":184,"previous":"M21-GAP-03516","next":"M21-GAP-03518"},"M21-GAP-03518":{"line":6773,"offset":1216710,"length":180,"previous":"M21-GAP-03517","next":"M21-GAP-03519"},"M21-GAP-03519":{"line":6774,"offset":1216890,"length":179,"previous":"M21-GAP-03518","next":"M21-GAP-03520"},"M21-GAP-03520":{"line":6775,"offset":1217069,"length":174,"previous":"M21-GAP-03519","next":"M21-GAP-03521"},"M21-GAP-03521":{"line":6776,"offset":1217243,"length":166,"previous":"M21-GAP-03520","next":"M21-GAP-03522"},"M21-GAP-03522":{"line":6777,"offset":1217409,"length":173,"previous":"M21-GAP-03521","next":"M21-GAP-03523"},"M21-GAP-03523":{"line":6778,"offset":1217582,"length":179,"previous":"M21-GAP-03522","next":"M21-GAP-03524"},"M21-GAP-03524":{"line":6779,"offset":1217761,"length":166,"previous":"M21-GAP-03523","next":"M21-GAP-03525"},"M21-GAP-03525":{"line":6780,"offset":1217927,"length":188,"previous":"M21-GAP-03524","next":"M21-GAP-03526"},"M21-GAP-03526":{"line":6781,"offset":1218115,"length":191,"previous":"M21-GAP-03525","next":"M21-GAP-03527"},"M21-GAP-03527":{"line":6782,"offset":1218306,"length":207,"previous":"M21-GAP-03526","next":"M21-GAP-03528"},"M21-GAP-03528":{"line":6783,"offset":1218513,"length":196,"previous":"M21-GAP-03527","next":"M21-GAP-03529"},"M21-GAP-03529":{"line":6784,"offset":1218709,"length":210,"previous":"M21-GAP-03528","next":"M21-GAP-03530"},"M21-GAP-03530":{"line":6785,"offset":1218919,"length":199,"previous":"M21-GAP-03529","next":"M21-GAP-03531"},"M21-GAP-03531":{"line":6786,"offset":1219118,"length":209,"previous":"M21-GAP-03530","next":"M21-GAP-03532"},"M21-GAP-03532":{"line":6787,"offset":1219327,"length":198,"previous":"M21-GAP-03531","next":"M21-GAP-03533"},"M21-GAP-03533":{"line":6788,"offset":1219525,"length":190,"previous":"M21-GAP-03532","next":"M21-GAP-03534"},"M21-GAP-03534":{"line":6789,"offset":1219715,"length":179,"previous":"M21-GAP-03533","next":"M21-GAP-03535"},"M21-GAP-03535":{"line":6790,"offset":1219894,"length":170,"previous":"M21-GAP-03534","next":"M21-GAP-03536"},"M21-GAP-03536":{"line":6791,"offset":1220064,"length":185,"previous":"M21-GAP-03535","next":"M21-GAP-03537"},"M21-GAP-03537":{"line":6792,"offset":1220249,"length":178,"previous":"M21-GAP-03536","next":"M21-GAP-03538"},"M21-GAP-03538":{"line":6793,"offset":1220427,"length":178,"previous":"M21-GAP-03537","next":"M21-GAP-03539"},"M21-GAP-03539":{"line":6794,"offset":1220605,"length":170,"previous":"M21-GAP-03538","next":"M21-GAP-03540"},"M21-GAP-03540":{"line":6795,"offset":1220775,"length":170,"previous":"M21-GAP-03539","next":"M21-GAP-03541"},"M21-GAP-03541":{"line":6796,"offset":1220945,"length":176,"previous":"M21-GAP-03540","next":"M21-GAP-03542"},"M21-GAP-03542":{"line":6797,"offset":1221121,"length":191,"previous":"M21-GAP-03541","next":"M21-GAP-03543"},"M21-GAP-03543":{"line":6798,"offset":1221312,"length":179,"previous":"M21-GAP-03542","next":"M21-GAP-03544"},"M21-GAP-03544":{"line":6799,"offset":1221491,"length":169,"previous":"M21-GAP-03543","next":"M21-GAP-03545"},"M21-GAP-03545":{"line":6800,"offset":1221660,"length":174,"previous":"M21-GAP-03544","next":"M21-GAP-03546"},"M21-GAP-03546":{"line":6801,"offset":1221834,"length":172,"previous":"M21-GAP-03545","next":"M21-GAP-03547"},"M21-GAP-03547":{"line":6802,"offset":1222006,"length":191,"previous":"M21-GAP-03546","next":"M21-GAP-03548"},"M21-GAP-03548":{"line":6803,"offset":1222197,"length":179,"previous":"M21-GAP-03547","next":"M21-GAP-03549"},"M21-GAP-03549":{"line":6804,"offset":1222376,"length":166,"previous":"M21-GAP-03548","next":"M21-GAP-03550"},"M21-GAP-03550":{"line":6805,"offset":1222542,"length":178,"previous":"M21-GAP-03549","next":"M21-GAP-03551"},"M21-GAP-03551":{"line":6806,"offset":1222720,"length":176,"previous":"M21-GAP-03550","next":"M21-GAP-03552"},"M21-GAP-03552":{"line":6807,"offset":1222896,"length":181,"previous":"M21-GAP-03551","next":"M21-GAP-03553"},"M21-GAP-03553":{"line":6808,"offset":1223077,"length":177,"previous":"M21-GAP-03552","next":"M21-GAP-03554"},"M21-GAP-03554":{"line":6809,"offset":1223254,"length":182,"previous":"M21-GAP-03553","next":"M21-GAP-03555"},"M21-GAP-03555":{"line":6810,"offset":1223436,"length":179,"previous":"M21-GAP-03554","next":"M21-GAP-03556"},"M21-GAP-03556":{"line":6811,"offset":1223615,"length":208,"previous":"M21-GAP-03555","next":"M21-GAP-03557"},"M21-GAP-03557":{"line":6812,"offset":1223823,"length":177,"previous":"M21-GAP-03556","next":"M21-GAP-03558"},"M21-GAP-03558":{"line":6813,"offset":1224000,"length":177,"previous":"M21-GAP-03557","next":"M21-GAP-03559"},"M21-GAP-03559":{"line":6814,"offset":1224177,"length":172,"previous":"M21-GAP-03558","next":"M21-GAP-03560"},"M21-GAP-03560":{"line":6815,"offset":1224349,"length":166,"previous":"M21-GAP-03559","next":"M21-GAP-03561"},"M21-GAP-03561":{"line":6816,"offset":1224515,"length":158,"previous":"M21-GAP-03560","next":"M21-GAP-03562"},"M21-GAP-03562":{"line":6817,"offset":1224673,"length":165,"previous":"M21-GAP-03561","next":"M21-GAP-03563"},"M21-GAP-03563":{"line":6818,"offset":1224838,"length":155,"previous":"M21-GAP-03562","next":"M21-GAP-03564"},"M21-GAP-03564":{"line":6819,"offset":1224993,"length":154,"previous":"M21-GAP-03563","next":"M21-GAP-03565"},"M21-GAP-03565":{"line":6820,"offset":1225147,"length":153,"previous":"M21-GAP-03564","next":"M21-GAP-03566"},"M21-GAP-03566":{"line":6821,"offset":1225300,"length":153,"previous":"M21-GAP-03565","next":"M21-GAP-03567"},"M21-GAP-03567":{"line":6822,"offset":1225453,"length":150,"previous":"M21-GAP-03566","next":"M21-GAP-03568"},"M21-GAP-03568":{"line":6823,"offset":1225603,"length":161,"previous":"M21-GAP-03567","next":"M21-GAP-03569"},"M21-GAP-03569":{"line":6824,"offset":1225764,"length":154,"previous":"M21-GAP-03568","next":"M21-GAP-03570"},"M21-GAP-03570":{"line":6825,"offset":1225918,"length":156,"previous":"M21-GAP-03569","next":"M21-GAP-03571"},"M21-GAP-03571":{"line":6826,"offset":1226074,"length":156,"previous":"M21-GAP-03570","next":"M21-GAP-03572"},"M21-GAP-03572":{"line":6827,"offset":1226230,"length":152,"previous":"M21-GAP-03571","next":"M21-GAP-03573"},"M21-GAP-03573":{"line":6828,"offset":1226382,"length":158,"previous":"M21-GAP-03572","next":"M21-GAP-03574"},"M21-GAP-03574":{"line":6829,"offset":1226540,"length":157,"previous":"M21-GAP-03573","next":"M21-GAP-03575"},"M21-GAP-03575":{"line":6830,"offset":1226697,"length":149,"previous":"M21-GAP-03574","next":"M21-GAP-03576"},"M21-GAP-03576":{"line":6831,"offset":1226846,"length":153,"previous":"M21-GAP-03575","next":"M21-GAP-03577"},"M21-GAP-03577":{"line":6832,"offset":1226999,"length":149,"previous":"M21-GAP-03576","next":"M21-GAP-03578"},"M21-GAP-03578":{"line":6833,"offset":1227148,"length":166,"previous":"M21-GAP-03577","next":"M21-GAP-03579"},"M21-GAP-03579":{"line":6834,"offset":1227314,"length":163,"previous":"M21-GAP-03578","next":"M21-GAP-03580"},"M21-GAP-03580":{"line":6835,"offset":1227477,"length":171,"previous":"M21-GAP-03579","next":"M21-GAP-03581"},"M21-GAP-03581":{"line":6836,"offset":1227648,"length":167,"previous":"M21-GAP-03580","next":"M21-GAP-03582"},"M21-GAP-03582":{"line":6837,"offset":1227815,"length":167,"previous":"M21-GAP-03581","next":"M21-GAP-03583"},"M21-GAP-03583":{"line":6838,"offset":1227982,"length":167,"previous":"M21-GAP-03582","next":"M21-GAP-03584"},"M21-GAP-03584":{"line":6839,"offset":1228149,"length":160,"previous":"M21-GAP-03583","next":"M21-GAP-03585"},"M21-GAP-03585":{"line":6840,"offset":1228309,"length":159,"previous":"M21-GAP-03584","next":"M21-GAP-03586"},"M21-GAP-03586":{"line":6841,"offset":1228468,"length":166,"previous":"M21-GAP-03585","next":"M21-GAP-03587"},"M21-GAP-03587":{"line":6842,"offset":1228634,"length":164,"previous":"M21-GAP-03586","next":"M21-GAP-03588"},"M21-GAP-03588":{"line":6843,"offset":1228798,"length":167,"previous":"M21-GAP-03587","next":"M21-GAP-03589"},"M21-GAP-03589":{"line":6844,"offset":1228965,"length":166,"previous":"M21-GAP-03588","next":"M21-GAP-03590"},"M21-GAP-03590":{"line":6845,"offset":1229131,"length":170,"previous":"M21-GAP-03589","next":"M21-GAP-03591"},"M21-GAP-03591":{"line":6846,"offset":1229301,"length":167,"previous":"M21-GAP-03590","next":"M21-GAP-03592"},"M21-GAP-03592":{"line":6847,"offset":1229468,"length":166,"previous":"M21-GAP-03591","next":"M21-GAP-03593"},"M21-GAP-03593":{"line":6848,"offset":1229634,"length":162,"previous":"M21-GAP-03592","next":"M21-GAP-03594"},"M21-GAP-03594":{"line":6849,"offset":1229796,"length":156,"previous":"M21-GAP-03593","next":"M21-GAP-03595"},"M21-GAP-03595":{"line":6850,"offset":1229952,"length":152,"previous":"M21-GAP-03594","next":"M21-GAP-03596"},"M21-GAP-03596":{"line":6851,"offset":1230104,"length":161,"previous":"M21-GAP-03595","next":"M21-GAP-03597"},"M21-GAP-03597":{"line":6852,"offset":1230265,"length":150,"previous":"M21-GAP-03596","next":"M21-GAP-03598"},"M21-GAP-03598":{"line":6853,"offset":1230415,"length":157,"previous":"M21-GAP-03597","next":"M21-GAP-03599"},"M21-GAP-03599":{"line":6854,"offset":1230572,"length":157,"previous":"M21-GAP-03598","next":"M21-GAP-03600"},"M21-GAP-03600":{"line":6855,"offset":1230729,"length":157,"previous":"M21-GAP-03599","next":"M21-GAP-03601"},"M21-GAP-03601":{"line":6856,"offset":1230886,"length":149,"previous":"M21-GAP-03600","next":"M21-GAP-03602"},"M21-GAP-03602":{"line":6857,"offset":1231035,"length":155,"previous":"M21-GAP-03601","next":"M21-GAP-03603"},"M21-GAP-03603":{"line":6858,"offset":1231190,"length":156,"previous":"M21-GAP-03602","next":"M21-GAP-03604"},"M21-GAP-03604":{"line":6859,"offset":1231346,"length":153,"previous":"M21-GAP-03603","next":"M21-GAP-03605"},"M21-GAP-03605":{"line":6860,"offset":1231499,"length":156,"previous":"M21-GAP-03604","next":"M21-GAP-03606"},"M21-GAP-03606":{"line":6861,"offset":1231655,"length":155,"previous":"M21-GAP-03605","next":"M21-GAP-03607"},"M21-GAP-03607":{"line":6862,"offset":1231810,"length":160,"previous":"M21-GAP-03606","next":"M21-GAP-03608"},"M21-GAP-03608":{"line":6863,"offset":1231970,"length":156,"previous":"M21-GAP-03607","next":"M21-GAP-03609"},"M21-GAP-03609":{"line":6864,"offset":1232126,"length":154,"previous":"M21-GAP-03608","next":"M21-GAP-03610"},"M21-GAP-03610":{"line":6865,"offset":1232280,"length":156,"previous":"M21-GAP-03609","next":"M21-GAP-03611"},"M21-GAP-03611":{"line":6866,"offset":1232436,"length":151,"previous":"M21-GAP-03610","next":"M21-GAP-03612"},"M21-GAP-03612":{"line":6867,"offset":1232587,"length":152,"previous":"M21-GAP-03611","next":"M21-GAP-03613"},"M21-GAP-03613":{"line":6868,"offset":1232739,"length":157,"previous":"M21-GAP-03612","next":"M21-GAP-03614"},"M21-GAP-03614":{"line":6869,"offset":1232896,"length":165,"previous":"M21-GAP-03613","next":"M21-GAP-03615"},"M21-GAP-03615":{"line":6870,"offset":1233061,"length":159,"previous":"M21-GAP-03614","next":"M21-GAP-03616"},"M21-GAP-03616":{"line":6871,"offset":1233220,"length":172,"previous":"M21-GAP-03615","next":"M21-GAP-03617"},"M21-GAP-03617":{"line":6872,"offset":1233392,"length":166,"previous":"M21-GAP-03616","next":"M21-GAP-03618"},"M21-GAP-03618":{"line":6873,"offset":1233558,"length":157,"previous":"M21-GAP-03617","next":"M21-GAP-03619"},"M21-GAP-03619":{"line":6874,"offset":1233715,"length":159,"previous":"M21-GAP-03618","next":"M21-GAP-03620"},"M21-GAP-03620":{"line":6875,"offset":1233874,"length":173,"previous":"M21-GAP-03619","next":"M21-GAP-03621"},"M21-GAP-03621":{"line":6876,"offset":1234047,"length":166,"previous":"M21-GAP-03620","next":"M21-GAP-03622"},"M21-GAP-03622":{"line":6877,"offset":1234213,"length":173,"previous":"M21-GAP-03621","next":"M21-GAP-03623"},"M21-GAP-03623":{"line":6878,"offset":1234386,"length":165,"previous":"M21-GAP-03622","next":"M21-GAP-03624"},"M21-GAP-03624":{"line":6879,"offset":1234551,"length":173,"previous":"M21-GAP-03623","next":"M21-GAP-03625"},"M21-GAP-03625":{"line":6880,"offset":1234724,"length":165,"previous":"M21-GAP-03624","next":"M22-GAP-00001"},"M22-GAP-00001":{"line":6881,"offset":1234889,"length":166,"previous":"M21-GAP-03625","next":"M22-GAP-00002"},"M22-GAP-00002":{"line":6882,"offset":1235055,"length":180,"previous":"M22-GAP-00001","next":"M22-GAP-00003"},"M22-GAP-00003":{"line":6883,"offset":1235235,"length":172,"previous":"M22-GAP-00002","next":"M22-GAP-00004"},"M22-GAP-00004":{"line":6884,"offset":1235407,"length":155,"previous":"M22-GAP-00003","next":"M22-GAP-00005"},"M22-GAP-00005":{"line":6885,"offset":1235562,"length":159,"previous":"M22-GAP-00004","next":"M22-GAP-00006"},"M22-GAP-00006":{"line":6886,"offset":1235721,"length":159,"previous":"M22-GAP-00005","next":"M22-GAP-00007"},"M22-GAP-00007":{"line":6887,"offset":1235880,"length":164,"previous":"M22-GAP-00006","next":"M22-GAP-00008"},"M22-GAP-00008":{"line":6888,"offset":1236044,"length":154,"previous":"M22-GAP-00007","next":"M22-GAP-00009"},"M22-GAP-00009":{"line":6889,"offset":1236198,"length":157,"previous":"M22-GAP-00008","next":"M22-GAP-00010"},"M22-GAP-00010":{"line":6890,"offset":1236355,"length":157,"previous":"M22-GAP-00009","next":"M22-GAP-00011"},"M22-GAP-00011":{"line":6891,"offset":1236512,"length":157,"previous":"M22-GAP-00010","next":"M22-GAP-00012"},"M22-GAP-00012":{"line":6892,"offset":1236669,"length":155,"previous":"M22-GAP-00011","next":"M22-GAP-00013"},"M22-GAP-00013":{"line":6893,"offset":1236824,"length":163,"previous":"M22-GAP-00012","next":"M22-GAP-00014"},"M22-GAP-00014":{"line":6894,"offset":1236987,"length":154,"previous":"M22-GAP-00013","next":"M22-GAP-00015"},"M22-GAP-00015":{"line":6895,"offset":1237141,"length":155,"previous":"M22-GAP-00014","next":"M22-GAP-00016"},"M22-GAP-00016":{"line":6896,"offset":1237296,"length":158,"previous":"M22-GAP-00015","next":"M22-GAP-00017"},"M22-GAP-00017":{"line":6897,"offset":1237454,"length":155,"previous":"M22-GAP-00016","next":"M22-GAP-00018"},"M22-GAP-00018":{"line":6898,"offset":1237609,"length":162,"previous":"M22-GAP-00017","next":"M22-GAP-00019"},"M22-GAP-00019":{"line":6899,"offset":1237771,"length":154,"previous":"M22-GAP-00018","next":null}}} +{"schemaVersion":1,"operation":"BLENDER_TASK_CONTEXT_INDEX","source":{"path":"tests/golden/M15-03A/next-task-plan.json","sha256":"bad0d7822c0d4d764bd174c86d9da897229e71de6363940125a594b8017e07f5"},"catalog":{"path":"tests/golden/M15-03A/task-catalog.jsonl","sha256":"7f1febab7fdc4c4529334e8bcbcd9d7cdcaa910561d4dbeb6dc84c259d9e98ee"},"taskCount":6900,"activeTask":"M16-GAP-00282","entries":{"M16-GAP-00001":{"line":0,"offset":0,"length":165,"previous":null,"next":"M16-GAP-00002"},"M16-GAP-00002":{"line":1,"offset":165,"length":167,"previous":"M16-GAP-00001","next":"M16-GAP-00003"},"M16-GAP-00003":{"line":2,"offset":332,"length":164,"previous":"M16-GAP-00002","next":"M16-GAP-00004"},"M16-GAP-00004":{"line":3,"offset":496,"length":165,"previous":"M16-GAP-00003","next":"M16-GAP-00005"},"M16-GAP-00005":{"line":4,"offset":661,"length":169,"previous":"M16-GAP-00004","next":"M16-GAP-00006"},"M16-GAP-00006":{"line":5,"offset":830,"length":164,"previous":"M16-GAP-00005","next":"M16-GAP-00007"},"M16-GAP-00007":{"line":6,"offset":994,"length":165,"previous":"M16-GAP-00006","next":"M16-GAP-00008"},"M16-GAP-00008":{"line":7,"offset":1159,"length":177,"previous":"M16-GAP-00007","next":"M16-GAP-00009"},"M16-GAP-00009":{"line":8,"offset":1336,"length":171,"previous":"M16-GAP-00008","next":"M16-GAP-00010"},"M16-GAP-00010":{"line":9,"offset":1507,"length":166,"previous":"M16-GAP-00009","next":"M16-GAP-00011"},"M16-GAP-00011":{"line":10,"offset":1673,"length":166,"previous":"M16-GAP-00010","next":"M16-GAP-00012"},"M16-GAP-00012":{"line":11,"offset":1839,"length":164,"previous":"M16-GAP-00011","next":"M16-GAP-00013"},"M16-GAP-00013":{"line":12,"offset":2003,"length":167,"previous":"M16-GAP-00012","next":"M16-GAP-00014"},"M16-GAP-00014":{"line":13,"offset":2170,"length":163,"previous":"M16-GAP-00013","next":"M16-GAP-00015"},"M16-GAP-00015":{"line":14,"offset":2333,"length":167,"previous":"M16-GAP-00014","next":"M16-GAP-00016"},"M16-GAP-00016":{"line":15,"offset":2500,"length":167,"previous":"M16-GAP-00015","next":"M16-GAP-00017"},"M16-GAP-00017":{"line":16,"offset":2667,"length":165,"previous":"M16-GAP-00016","next":"M16-GAP-00018"},"M16-GAP-00018":{"line":17,"offset":2832,"length":175,"previous":"M16-GAP-00017","next":"M16-GAP-00019"},"M16-GAP-00019":{"line":18,"offset":3007,"length":169,"previous":"M16-GAP-00018","next":"M16-GAP-00020"},"M16-GAP-00020":{"line":19,"offset":3176,"length":164,"previous":"M16-GAP-00019","next":"M16-GAP-00021"},"M16-GAP-00021":{"line":20,"offset":3340,"length":165,"previous":"M16-GAP-00020","next":"M16-GAP-00022"},"M16-GAP-00022":{"line":21,"offset":3505,"length":164,"previous":"M16-GAP-00021","next":"M16-GAP-00023"},"M16-GAP-00023":{"line":22,"offset":3669,"length":166,"previous":"M16-GAP-00022","next":"M16-GAP-00024"},"M16-GAP-00024":{"line":23,"offset":3835,"length":163,"previous":"M16-GAP-00023","next":"M16-GAP-00025"},"M16-GAP-00025":{"line":24,"offset":3998,"length":166,"previous":"M16-GAP-00024","next":"M16-GAP-00026"},"M16-GAP-00026":{"line":25,"offset":4164,"length":165,"previous":"M16-GAP-00025","next":"M16-GAP-00027"},"M16-GAP-00027":{"line":26,"offset":4329,"length":172,"previous":"M16-GAP-00026","next":"M16-GAP-00028"},"M16-GAP-00028":{"line":27,"offset":4501,"length":168,"previous":"M16-GAP-00027","next":"M16-GAP-00029"},"M16-GAP-00029":{"line":28,"offset":4669,"length":164,"previous":"M16-GAP-00028","next":"M16-GAP-00030"},"M16-GAP-00030":{"line":29,"offset":4833,"length":161,"previous":"M16-GAP-00029","next":"M16-GAP-00031"},"M16-GAP-00031":{"line":30,"offset":4994,"length":158,"previous":"M16-GAP-00030","next":"M16-GAP-00032"},"M16-GAP-00032":{"line":31,"offset":5152,"length":158,"previous":"M16-GAP-00031","next":"M16-GAP-00033"},"M16-GAP-00033":{"line":32,"offset":5310,"length":160,"previous":"M16-GAP-00032","next":"M16-GAP-00034"},"M16-GAP-00034":{"line":33,"offset":5470,"length":158,"previous":"M16-GAP-00033","next":"M16-GAP-00035"},"M16-GAP-00035":{"line":34,"offset":5628,"length":157,"previous":"M16-GAP-00034","next":"M16-GAP-00036"},"M16-GAP-00036":{"line":35,"offset":5785,"length":158,"previous":"M16-GAP-00035","next":"M16-GAP-00037"},"M16-GAP-00037":{"line":36,"offset":5943,"length":162,"previous":"M16-GAP-00036","next":"M16-GAP-00038"},"M16-GAP-00038":{"line":37,"offset":6105,"length":170,"previous":"M16-GAP-00037","next":"M16-GAP-00039"},"M16-GAP-00039":{"line":38,"offset":6275,"length":158,"previous":"M16-GAP-00038","next":"M16-GAP-00040"},"M16-GAP-00040":{"line":39,"offset":6433,"length":166,"previous":"M16-GAP-00039","next":"M16-GAP-00041"},"M16-GAP-00041":{"line":40,"offset":6599,"length":161,"previous":"M16-GAP-00040","next":"M16-GAP-00042"},"M16-GAP-00042":{"line":41,"offset":6760,"length":161,"previous":"M16-GAP-00041","next":"M16-GAP-00043"},"M16-GAP-00043":{"line":42,"offset":6921,"length":166,"previous":"M16-GAP-00042","next":"M16-GAP-00044"},"M16-GAP-00044":{"line":43,"offset":7087,"length":163,"previous":"M16-GAP-00043","next":"M16-GAP-00045"},"M16-GAP-00045":{"line":44,"offset":7250,"length":160,"previous":"M16-GAP-00044","next":"M16-GAP-00046"},"M16-GAP-00046":{"line":45,"offset":7410,"length":158,"previous":"M16-GAP-00045","next":"M16-GAP-00047"},"M16-GAP-00047":{"line":46,"offset":7568,"length":175,"previous":"M16-GAP-00046","next":"M16-GAP-00048"},"M16-GAP-00048":{"line":47,"offset":7743,"length":172,"previous":"M16-GAP-00047","next":"M16-GAP-00049"},"M16-GAP-00049":{"line":48,"offset":7915,"length":172,"previous":"M16-GAP-00048","next":"M16-GAP-00050"},"M16-GAP-00050":{"line":49,"offset":8087,"length":172,"previous":"M16-GAP-00049","next":"M16-GAP-00051"},"M16-GAP-00051":{"line":50,"offset":8259,"length":171,"previous":"M16-GAP-00050","next":"M16-GAP-00052"},"M16-GAP-00052":{"line":51,"offset":8430,"length":175,"previous":"M16-GAP-00051","next":"M16-GAP-00053"},"M16-GAP-00053":{"line":52,"offset":8605,"length":171,"previous":"M16-GAP-00052","next":"M16-GAP-00054"},"M16-GAP-00054":{"line":53,"offset":8776,"length":174,"previous":"M16-GAP-00053","next":"M16-GAP-00055"},"M16-GAP-00055":{"line":54,"offset":8950,"length":173,"previous":"M16-GAP-00054","next":"M16-GAP-00056"},"M16-GAP-00056":{"line":55,"offset":9123,"length":173,"previous":"M16-GAP-00055","next":"M16-GAP-00057"},"M16-GAP-00057":{"line":56,"offset":9296,"length":175,"previous":"M16-GAP-00056","next":"M16-GAP-00058"},"M16-GAP-00058":{"line":57,"offset":9471,"length":172,"previous":"M16-GAP-00057","next":"M16-GAP-00059"},"M16-GAP-00059":{"line":58,"offset":9643,"length":173,"previous":"M16-GAP-00058","next":"M16-GAP-00060"},"M16-GAP-00060":{"line":59,"offset":9816,"length":174,"previous":"M16-GAP-00059","next":"M16-GAP-00061"},"M16-GAP-00061":{"line":60,"offset":9990,"length":174,"previous":"M16-GAP-00060","next":"M16-GAP-00062"},"M16-GAP-00062":{"line":61,"offset":10164,"length":177,"previous":"M16-GAP-00061","next":"M16-GAP-00063"},"M16-GAP-00063":{"line":62,"offset":10341,"length":175,"previous":"M16-GAP-00062","next":"M16-GAP-00064"},"M16-GAP-00064":{"line":63,"offset":10516,"length":173,"previous":"M16-GAP-00063","next":"M16-GAP-00065"},"M16-GAP-00065":{"line":64,"offset":10689,"length":173,"previous":"M16-GAP-00064","next":"M16-GAP-00066"},"M16-GAP-00066":{"line":65,"offset":10862,"length":174,"previous":"M16-GAP-00065","next":"M16-GAP-00067"},"M16-GAP-00067":{"line":66,"offset":11036,"length":176,"previous":"M16-GAP-00066","next":"M16-GAP-00068"},"M16-GAP-00068":{"line":67,"offset":11212,"length":171,"previous":"M16-GAP-00067","next":"M16-GAP-00069"},"M16-GAP-00069":{"line":68,"offset":11383,"length":171,"previous":"M16-GAP-00068","next":"M16-GAP-00070"},"M16-GAP-00070":{"line":69,"offset":11554,"length":186,"previous":"M16-GAP-00069","next":"M16-GAP-00071"},"M16-GAP-00071":{"line":70,"offset":11740,"length":190,"previous":"M16-GAP-00070","next":"M16-GAP-00072"},"M16-GAP-00072":{"line":71,"offset":11930,"length":157,"previous":"M16-GAP-00071","next":"M16-GAP-00073"},"M16-GAP-00073":{"line":72,"offset":12087,"length":168,"previous":"M16-GAP-00072","next":"M16-GAP-00074"},"M16-GAP-00074":{"line":73,"offset":12255,"length":168,"previous":"M16-GAP-00073","next":"M16-GAP-00075"},"M16-GAP-00075":{"line":74,"offset":12423,"length":160,"previous":"M16-GAP-00074","next":"M16-GAP-00076"},"M16-GAP-00076":{"line":75,"offset":12583,"length":160,"previous":"M16-GAP-00075","next":"M16-GAP-00077"},"M16-GAP-00077":{"line":76,"offset":12743,"length":157,"previous":"M16-GAP-00076","next":"M16-GAP-00078"},"M16-GAP-00078":{"line":77,"offset":12900,"length":163,"previous":"M16-GAP-00077","next":"M16-GAP-00079"},"M16-GAP-00079":{"line":78,"offset":13063,"length":164,"previous":"M16-GAP-00078","next":"M16-GAP-00080"},"M16-GAP-00080":{"line":79,"offset":13227,"length":172,"previous":"M16-GAP-00079","next":"M16-GAP-00081"},"M16-GAP-00081":{"line":80,"offset":13399,"length":167,"previous":"M16-GAP-00080","next":"M16-GAP-00082"},"M16-GAP-00082":{"line":81,"offset":13566,"length":159,"previous":"M16-GAP-00081","next":"M16-GAP-00083"},"M16-GAP-00083":{"line":82,"offset":13725,"length":161,"previous":"M16-GAP-00082","next":"M16-GAP-00084"},"M16-GAP-00084":{"line":83,"offset":13886,"length":158,"previous":"M16-GAP-00083","next":"M16-GAP-00085"},"M16-GAP-00085":{"line":84,"offset":14044,"length":164,"previous":"M16-GAP-00084","next":"M16-GAP-00086"},"M16-GAP-00086":{"line":85,"offset":14208,"length":158,"previous":"M16-GAP-00085","next":"M16-GAP-00087"},"M16-GAP-00087":{"line":86,"offset":14366,"length":170,"previous":"M16-GAP-00086","next":"M16-GAP-00088"},"M16-GAP-00088":{"line":87,"offset":14536,"length":168,"previous":"M16-GAP-00087","next":"M16-GAP-00089"},"M16-GAP-00089":{"line":88,"offset":14704,"length":159,"previous":"M16-GAP-00088","next":"M16-GAP-00090"},"M16-GAP-00090":{"line":89,"offset":14863,"length":158,"previous":"M16-GAP-00089","next":"M16-GAP-00091"},"M16-GAP-00091":{"line":90,"offset":15021,"length":163,"previous":"M16-GAP-00090","next":"M16-GAP-00092"},"M16-GAP-00092":{"line":91,"offset":15184,"length":166,"previous":"M16-GAP-00091","next":"M16-GAP-00093"},"M16-GAP-00093":{"line":92,"offset":15350,"length":157,"previous":"M16-GAP-00092","next":"M16-GAP-00094"},"M16-GAP-00094":{"line":93,"offset":15507,"length":159,"previous":"M16-GAP-00093","next":"M16-GAP-00095"},"M16-GAP-00095":{"line":94,"offset":15666,"length":162,"previous":"M16-GAP-00094","next":"M16-GAP-00096"},"M16-GAP-00096":{"line":95,"offset":15828,"length":161,"previous":"M16-GAP-00095","next":"M16-GAP-00097"},"M16-GAP-00097":{"line":96,"offset":15989,"length":160,"previous":"M16-GAP-00096","next":"M16-GAP-00098"},"M16-GAP-00098":{"line":97,"offset":16149,"length":160,"previous":"M16-GAP-00097","next":"M16-GAP-00099"},"M16-GAP-00099":{"line":98,"offset":16309,"length":167,"previous":"M16-GAP-00098","next":"M16-GAP-00100"},"M16-GAP-00100":{"line":99,"offset":16476,"length":164,"previous":"M16-GAP-00099","next":"M16-GAP-00101"},"M16-GAP-00101":{"line":100,"offset":16640,"length":163,"previous":"M16-GAP-00100","next":"M16-GAP-00102"},"M16-GAP-00102":{"line":101,"offset":16803,"length":160,"previous":"M16-GAP-00101","next":"M16-GAP-00103"},"M16-GAP-00103":{"line":102,"offset":16963,"length":171,"previous":"M16-GAP-00102","next":"M16-GAP-00104"},"M16-GAP-00104":{"line":103,"offset":17134,"length":170,"previous":"M16-GAP-00103","next":"M16-GAP-00105"},"M16-GAP-00105":{"line":104,"offset":17304,"length":176,"previous":"M16-GAP-00104","next":"M16-GAP-00106"},"M16-GAP-00106":{"line":105,"offset":17480,"length":168,"previous":"M16-GAP-00105","next":"M16-GAP-00107"},"M16-GAP-00107":{"line":106,"offset":17648,"length":167,"previous":"M16-GAP-00106","next":"M16-GAP-00108"},"M16-GAP-00108":{"line":107,"offset":17815,"length":157,"previous":"M16-GAP-00107","next":"M16-GAP-00109"},"M16-GAP-00109":{"line":108,"offset":17972,"length":157,"previous":"M16-GAP-00108","next":"M16-GAP-00110"},"M16-GAP-00110":{"line":109,"offset":18129,"length":168,"previous":"M16-GAP-00109","next":"M16-GAP-00111"},"M16-GAP-00111":{"line":110,"offset":18297,"length":157,"previous":"M16-GAP-00110","next":"M16-GAP-00112"},"M16-GAP-00112":{"line":111,"offset":18454,"length":162,"previous":"M16-GAP-00111","next":"M16-GAP-00113"},"M16-GAP-00113":{"line":112,"offset":18616,"length":169,"previous":"M16-GAP-00112","next":"M16-GAP-00114"},"M16-GAP-00114":{"line":113,"offset":18785,"length":165,"previous":"M16-GAP-00113","next":"M16-GAP-00115"},"M16-GAP-00115":{"line":114,"offset":18950,"length":171,"previous":"M16-GAP-00114","next":"M16-GAP-00116"},"M16-GAP-00116":{"line":115,"offset":19121,"length":164,"previous":"M16-GAP-00115","next":"M16-GAP-00117"},"M16-GAP-00117":{"line":116,"offset":19285,"length":166,"previous":"M16-GAP-00116","next":"M16-GAP-00118"},"M16-GAP-00118":{"line":117,"offset":19451,"length":169,"previous":"M16-GAP-00117","next":"M16-GAP-00119"},"M16-GAP-00119":{"line":118,"offset":19620,"length":174,"previous":"M16-GAP-00118","next":"M16-GAP-00120"},"M16-GAP-00120":{"line":119,"offset":19794,"length":171,"previous":"M16-GAP-00119","next":"M16-GAP-00121"},"M16-GAP-00121":{"line":120,"offset":19965,"length":178,"previous":"M16-GAP-00120","next":"M16-GAP-00122"},"M16-GAP-00122":{"line":121,"offset":20143,"length":170,"previous":"M16-GAP-00121","next":"M16-GAP-00123"},"M16-GAP-00123":{"line":122,"offset":20313,"length":171,"previous":"M16-GAP-00122","next":"M16-GAP-00124"},"M16-GAP-00124":{"line":123,"offset":20484,"length":178,"previous":"M16-GAP-00123","next":"M16-GAP-00125"},"M16-GAP-00125":{"line":124,"offset":20662,"length":175,"previous":"M16-GAP-00124","next":"M16-GAP-00126"},"M16-GAP-00126":{"line":125,"offset":20837,"length":173,"previous":"M16-GAP-00125","next":"M16-GAP-00127"},"M16-GAP-00127":{"line":126,"offset":21010,"length":178,"previous":"M16-GAP-00126","next":"M16-GAP-00128"},"M16-GAP-00128":{"line":127,"offset":21188,"length":166,"previous":"M16-GAP-00127","next":"M16-GAP-00129"},"M16-GAP-00129":{"line":128,"offset":21354,"length":163,"previous":"M16-GAP-00128","next":"M16-GAP-00130"},"M16-GAP-00130":{"line":129,"offset":21517,"length":165,"previous":"M16-GAP-00129","next":"M16-GAP-00131"},"M16-GAP-00131":{"line":130,"offset":21682,"length":176,"previous":"M16-GAP-00130","next":"M16-GAP-00132"},"M16-GAP-00132":{"line":131,"offset":21858,"length":169,"previous":"M16-GAP-00131","next":"M16-GAP-00133"},"M16-GAP-00133":{"line":132,"offset":22027,"length":170,"previous":"M16-GAP-00132","next":"M16-GAP-00134"},"M16-GAP-00134":{"line":133,"offset":22197,"length":170,"previous":"M16-GAP-00133","next":"M16-GAP-00135"},"M16-GAP-00135":{"line":134,"offset":22367,"length":174,"previous":"M16-GAP-00134","next":"M16-GAP-00136"},"M16-GAP-00136":{"line":135,"offset":22541,"length":173,"previous":"M16-GAP-00135","next":"M16-GAP-00137"},"M16-GAP-00137":{"line":136,"offset":22714,"length":173,"previous":"M16-GAP-00136","next":"M16-GAP-00138"},"M16-GAP-00138":{"line":137,"offset":22887,"length":172,"previous":"M16-GAP-00137","next":"M16-GAP-00139"},"M16-GAP-00139":{"line":138,"offset":23059,"length":176,"previous":"M16-GAP-00138","next":"M16-GAP-00140"},"M16-GAP-00140":{"line":139,"offset":23235,"length":171,"previous":"M16-GAP-00139","next":"M16-GAP-00141"},"M16-GAP-00141":{"line":140,"offset":23406,"length":173,"previous":"M16-GAP-00140","next":"M16-GAP-00142"},"M16-GAP-00142":{"line":141,"offset":23579,"length":171,"previous":"M16-GAP-00141","next":"M16-GAP-00143"},"M16-GAP-00143":{"line":142,"offset":23750,"length":164,"previous":"M16-GAP-00142","next":"M16-GAP-00144"},"M16-GAP-00144":{"line":143,"offset":23914,"length":165,"previous":"M16-GAP-00143","next":"M16-GAP-00145"},"M16-GAP-00145":{"line":144,"offset":24079,"length":176,"previous":"M16-GAP-00144","next":"M16-GAP-00146"},"M16-GAP-00146":{"line":145,"offset":24255,"length":166,"previous":"M16-GAP-00145","next":"M16-GAP-00147"},"M16-GAP-00147":{"line":146,"offset":24421,"length":168,"previous":"M16-GAP-00146","next":"M16-GAP-00148"},"M16-GAP-00148":{"line":147,"offset":24589,"length":170,"previous":"M16-GAP-00147","next":"M16-GAP-00149"},"M16-GAP-00149":{"line":148,"offset":24759,"length":173,"previous":"M16-GAP-00148","next":"M16-GAP-00150"},"M16-GAP-00150":{"line":149,"offset":24932,"length":170,"previous":"M16-GAP-00149","next":"M16-GAP-00151"},"M16-GAP-00151":{"line":150,"offset":25102,"length":177,"previous":"M16-GAP-00150","next":"M16-GAP-00152"},"M16-GAP-00152":{"line":151,"offset":25279,"length":175,"previous":"M16-GAP-00151","next":"M16-GAP-00153"},"M16-GAP-00153":{"line":152,"offset":25454,"length":171,"previous":"M16-GAP-00152","next":"M16-GAP-00154"},"M16-GAP-00154":{"line":153,"offset":25625,"length":178,"previous":"M16-GAP-00153","next":"M16-GAP-00155"},"M16-GAP-00155":{"line":154,"offset":25803,"length":172,"previous":"M16-GAP-00154","next":"M16-GAP-00156"},"M16-GAP-00156":{"line":155,"offset":25975,"length":175,"previous":"M16-GAP-00155","next":"M16-GAP-00157"},"M16-GAP-00157":{"line":156,"offset":26150,"length":173,"previous":"M16-GAP-00156","next":"M16-GAP-00158"},"M16-GAP-00158":{"line":157,"offset":26323,"length":182,"previous":"M16-GAP-00157","next":"M16-GAP-00159"},"M16-GAP-00159":{"line":158,"offset":26505,"length":173,"previous":"M16-GAP-00158","next":"M16-GAP-00160"},"M16-GAP-00160":{"line":159,"offset":26678,"length":181,"previous":"M16-GAP-00159","next":"M16-GAP-00161"},"M16-GAP-00161":{"line":160,"offset":26859,"length":172,"previous":"M16-GAP-00160","next":"M16-GAP-00162"},"M16-GAP-00162":{"line":161,"offset":27031,"length":171,"previous":"M16-GAP-00161","next":"M16-GAP-00163"},"M16-GAP-00163":{"line":162,"offset":27202,"length":173,"previous":"M16-GAP-00162","next":"M16-GAP-00164"},"M16-GAP-00164":{"line":163,"offset":27375,"length":177,"previous":"M16-GAP-00163","next":"M16-GAP-00165"},"M16-GAP-00165":{"line":164,"offset":27552,"length":177,"previous":"M16-GAP-00164","next":"M16-GAP-00166"},"M16-GAP-00166":{"line":165,"offset":27729,"length":180,"previous":"M16-GAP-00165","next":"M16-GAP-00167"},"M16-GAP-00167":{"line":166,"offset":27909,"length":182,"previous":"M16-GAP-00166","next":"M16-GAP-00168"},"M16-GAP-00168":{"line":167,"offset":28091,"length":181,"previous":"M16-GAP-00167","next":"M16-GAP-00169"},"M16-GAP-00169":{"line":168,"offset":28272,"length":181,"previous":"M16-GAP-00168","next":"M16-GAP-00170"},"M16-GAP-00170":{"line":169,"offset":28453,"length":174,"previous":"M16-GAP-00169","next":"M16-GAP-00171"},"M16-GAP-00171":{"line":170,"offset":28627,"length":180,"previous":"M16-GAP-00170","next":"M16-GAP-00172"},"M16-GAP-00172":{"line":171,"offset":28807,"length":179,"previous":"M16-GAP-00171","next":"M16-GAP-00173"},"M16-GAP-00173":{"line":172,"offset":28986,"length":176,"previous":"M16-GAP-00172","next":"M16-GAP-00174"},"M16-GAP-00174":{"line":173,"offset":29162,"length":175,"previous":"M16-GAP-00173","next":"M16-GAP-00175"},"M16-GAP-00175":{"line":174,"offset":29337,"length":176,"previous":"M16-GAP-00174","next":"M16-GAP-00176"},"M16-GAP-00176":{"line":175,"offset":29513,"length":178,"previous":"M16-GAP-00175","next":"M16-GAP-00177"},"M16-GAP-00177":{"line":176,"offset":29691,"length":171,"previous":"M16-GAP-00176","next":"M16-GAP-00178"},"M16-GAP-00178":{"line":177,"offset":29862,"length":179,"previous":"M16-GAP-00177","next":"M16-GAP-00179"},"M16-GAP-00179":{"line":178,"offset":30041,"length":176,"previous":"M16-GAP-00178","next":"M16-GAP-00180"},"M16-GAP-00180":{"line":179,"offset":30217,"length":176,"previous":"M16-GAP-00179","next":"M16-GAP-00181"},"M16-GAP-00181":{"line":180,"offset":30393,"length":173,"previous":"M16-GAP-00180","next":"M16-GAP-00182"},"M16-GAP-00182":{"line":181,"offset":30566,"length":180,"previous":"M16-GAP-00181","next":"M16-GAP-00183"},"M16-GAP-00183":{"line":182,"offset":30746,"length":181,"previous":"M16-GAP-00182","next":"M16-GAP-00184"},"M16-GAP-00184":{"line":183,"offset":30927,"length":177,"previous":"M16-GAP-00183","next":"M16-GAP-00185"},"M16-GAP-00185":{"line":184,"offset":31104,"length":177,"previous":"M16-GAP-00184","next":"M16-GAP-00186"},"M16-GAP-00186":{"line":185,"offset":31281,"length":173,"previous":"M16-GAP-00185","next":"M16-GAP-00187"},"M16-GAP-00187":{"line":186,"offset":31454,"length":180,"previous":"M16-GAP-00186","next":"M16-GAP-00188"},"M16-GAP-00188":{"line":187,"offset":31634,"length":181,"previous":"M16-GAP-00187","next":"M16-GAP-00189"},"M16-GAP-00189":{"line":188,"offset":31815,"length":178,"previous":"M16-GAP-00188","next":"M16-GAP-00190"},"M16-GAP-00190":{"line":189,"offset":31993,"length":179,"previous":"M16-GAP-00189","next":"M16-GAP-00191"},"M16-GAP-00191":{"line":190,"offset":32172,"length":172,"previous":"M16-GAP-00190","next":"M16-GAP-00192"},"M16-GAP-00192":{"line":191,"offset":32344,"length":175,"previous":"M16-GAP-00191","next":"M16-GAP-00193"},"M16-GAP-00193":{"line":192,"offset":32519,"length":177,"previous":"M16-GAP-00192","next":"M16-GAP-00194"},"M16-GAP-00194":{"line":193,"offset":32696,"length":180,"previous":"M16-GAP-00193","next":"M16-GAP-00195"},"M16-GAP-00195":{"line":194,"offset":32876,"length":175,"previous":"M16-GAP-00194","next":"M16-GAP-00196"},"M16-GAP-00196":{"line":195,"offset":33051,"length":178,"previous":"M16-GAP-00195","next":"M16-GAP-00197"},"M16-GAP-00197":{"line":196,"offset":33229,"length":181,"previous":"M16-GAP-00196","next":"M16-GAP-00198"},"M16-GAP-00198":{"line":197,"offset":33410,"length":173,"previous":"M16-GAP-00197","next":"M16-GAP-00199"},"M16-GAP-00199":{"line":198,"offset":33583,"length":177,"previous":"M16-GAP-00198","next":"M16-GAP-00200"},"M16-GAP-00200":{"line":199,"offset":33760,"length":176,"previous":"M16-GAP-00199","next":"M16-GAP-00201"},"M16-GAP-00201":{"line":200,"offset":33936,"length":174,"previous":"M16-GAP-00200","next":"M16-GAP-00202"},"M16-GAP-00202":{"line":201,"offset":34110,"length":172,"previous":"M16-GAP-00201","next":"M16-GAP-00203"},"M16-GAP-00203":{"line":202,"offset":34282,"length":176,"previous":"M16-GAP-00202","next":"M16-GAP-00204"},"M16-GAP-00204":{"line":203,"offset":34458,"length":175,"previous":"M16-GAP-00203","next":"M16-GAP-00205"},"M16-GAP-00205":{"line":204,"offset":34633,"length":172,"previous":"M16-GAP-00204","next":"M16-GAP-00206"},"M16-GAP-00206":{"line":205,"offset":34805,"length":190,"previous":"M16-GAP-00205","next":"M16-GAP-00207"},"M16-GAP-00207":{"line":206,"offset":34995,"length":173,"previous":"M16-GAP-00206","next":"M16-GAP-00208"},"M16-GAP-00208":{"line":207,"offset":35168,"length":187,"previous":"M16-GAP-00207","next":"M16-GAP-00209"},"M16-GAP-00209":{"line":208,"offset":35355,"length":179,"previous":"M16-GAP-00208","next":"M16-GAP-00210"},"M16-GAP-00210":{"line":209,"offset":35534,"length":186,"previous":"M16-GAP-00209","next":"M16-GAP-00211"},"M16-GAP-00211":{"line":210,"offset":35720,"length":173,"previous":"M16-GAP-00210","next":"M16-GAP-00212"},"M16-GAP-00212":{"line":211,"offset":35893,"length":195,"previous":"M16-GAP-00211","next":"M16-GAP-00213"},"M16-GAP-00213":{"line":212,"offset":36088,"length":184,"previous":"M16-GAP-00212","next":"M16-GAP-00214"},"M16-GAP-00214":{"line":213,"offset":36272,"length":184,"previous":"M16-GAP-00213","next":"M16-GAP-00215"},"M16-GAP-00215":{"line":214,"offset":36456,"length":167,"previous":"M16-GAP-00214","next":"M16-GAP-00216"},"M16-GAP-00216":{"line":215,"offset":36623,"length":182,"previous":"M16-GAP-00215","next":"M16-GAP-00217"},"M16-GAP-00217":{"line":216,"offset":36805,"length":176,"previous":"M16-GAP-00216","next":"M16-GAP-00218"},"M16-GAP-00218":{"line":217,"offset":36981,"length":180,"previous":"M16-GAP-00217","next":"M16-GAP-00219"},"M16-GAP-00219":{"line":218,"offset":37161,"length":176,"previous":"M16-GAP-00218","next":"M16-GAP-00220"},"M16-GAP-00220":{"line":219,"offset":37337,"length":175,"previous":"M16-GAP-00219","next":"M16-GAP-00221"},"M16-GAP-00221":{"line":220,"offset":37512,"length":176,"previous":"M16-GAP-00220","next":"M16-GAP-00222"},"M16-GAP-00222":{"line":221,"offset":37688,"length":179,"previous":"M16-GAP-00221","next":"M16-GAP-00223"},"M16-GAP-00223":{"line":222,"offset":37867,"length":190,"previous":"M16-GAP-00222","next":"M16-GAP-00224"},"M16-GAP-00224":{"line":223,"offset":38057,"length":181,"previous":"M16-GAP-00223","next":"M16-GAP-00225"},"M16-GAP-00225":{"line":224,"offset":38238,"length":177,"previous":"M16-GAP-00224","next":"M16-GAP-00226"},"M16-GAP-00226":{"line":225,"offset":38415,"length":179,"previous":"M16-GAP-00225","next":"M16-GAP-00227"},"M16-GAP-00227":{"line":226,"offset":38594,"length":186,"previous":"M16-GAP-00226","next":"M16-GAP-00228"},"M16-GAP-00228":{"line":227,"offset":38780,"length":179,"previous":"M16-GAP-00227","next":"M16-GAP-00229"},"M16-GAP-00229":{"line":228,"offset":38959,"length":181,"previous":"M16-GAP-00228","next":"M16-GAP-00230"},"M16-GAP-00230":{"line":229,"offset":39140,"length":181,"previous":"M16-GAP-00229","next":"M16-GAP-00231"},"M16-GAP-00231":{"line":230,"offset":39321,"length":187,"previous":"M16-GAP-00230","next":"M16-GAP-00232"},"M16-GAP-00232":{"line":231,"offset":39508,"length":183,"previous":"M16-GAP-00231","next":"M16-GAP-00233"},"M16-GAP-00233":{"line":232,"offset":39691,"length":189,"previous":"M16-GAP-00232","next":"M16-GAP-00234"},"M16-GAP-00234":{"line":233,"offset":39880,"length":168,"previous":"M16-GAP-00233","next":"M16-GAP-00235"},"M16-GAP-00235":{"line":234,"offset":40048,"length":170,"previous":"M16-GAP-00234","next":"M16-GAP-00236"},"M16-GAP-00236":{"line":235,"offset":40218,"length":171,"previous":"M16-GAP-00235","next":"M16-GAP-00237"},"M16-GAP-00237":{"line":236,"offset":40389,"length":176,"previous":"M16-GAP-00236","next":"M16-GAP-00238"},"M16-GAP-00238":{"line":237,"offset":40565,"length":178,"previous":"M16-GAP-00237","next":"M16-GAP-00239"},"M16-GAP-00239":{"line":238,"offset":40743,"length":169,"previous":"M16-GAP-00238","next":"M16-GAP-00240"},"M16-GAP-00240":{"line":239,"offset":40912,"length":176,"previous":"M16-GAP-00239","next":"M16-GAP-00241"},"M16-GAP-00241":{"line":240,"offset":41088,"length":174,"previous":"M16-GAP-00240","next":"M16-GAP-00242"},"M16-GAP-00242":{"line":241,"offset":41262,"length":166,"previous":"M16-GAP-00241","next":"M16-GAP-00243"},"M16-GAP-00243":{"line":242,"offset":41428,"length":172,"previous":"M16-GAP-00242","next":"M16-GAP-00244"},"M16-GAP-00244":{"line":243,"offset":41600,"length":166,"previous":"M16-GAP-00243","next":"M16-GAP-00245"},"M16-GAP-00245":{"line":244,"offset":41766,"length":180,"previous":"M16-GAP-00244","next":"M16-GAP-00246"},"M16-GAP-00246":{"line":245,"offset":41946,"length":174,"previous":"M16-GAP-00245","next":"M16-GAP-00247"},"M16-GAP-00247":{"line":246,"offset":42120,"length":172,"previous":"M16-GAP-00246","next":"M16-GAP-00248"},"M16-GAP-00248":{"line":247,"offset":42292,"length":168,"previous":"M16-GAP-00247","next":"M16-GAP-00249"},"M16-GAP-00249":{"line":248,"offset":42460,"length":172,"previous":"M16-GAP-00248","next":"M16-GAP-00250"},"M16-GAP-00250":{"line":249,"offset":42632,"length":172,"previous":"M16-GAP-00249","next":"M16-GAP-00251"},"M16-GAP-00251":{"line":250,"offset":42804,"length":178,"previous":"M16-GAP-00250","next":"M16-GAP-00252"},"M16-GAP-00252":{"line":251,"offset":42982,"length":173,"previous":"M16-GAP-00251","next":"M16-GAP-00253"},"M16-GAP-00253":{"line":252,"offset":43155,"length":175,"previous":"M16-GAP-00252","next":"M16-GAP-00254"},"M16-GAP-00254":{"line":253,"offset":43330,"length":180,"previous":"M16-GAP-00253","next":"M16-GAP-00255"},"M16-GAP-00255":{"line":254,"offset":43510,"length":175,"previous":"M16-GAP-00254","next":"M16-GAP-00256"},"M16-GAP-00256":{"line":255,"offset":43685,"length":173,"previous":"M16-GAP-00255","next":"M16-GAP-00257"},"M16-GAP-00257":{"line":256,"offset":43858,"length":176,"previous":"M16-GAP-00256","next":"M16-GAP-00258"},"M16-GAP-00258":{"line":257,"offset":44034,"length":170,"previous":"M16-GAP-00257","next":"M16-GAP-00259"},"M16-GAP-00259":{"line":258,"offset":44204,"length":180,"previous":"M16-GAP-00258","next":"M16-GAP-00260"},"M16-GAP-00260":{"line":259,"offset":44384,"length":167,"previous":"M16-GAP-00259","next":"M16-GAP-00261"},"M16-GAP-00261":{"line":260,"offset":44551,"length":171,"previous":"M16-GAP-00260","next":"M16-GAP-00262"},"M16-GAP-00262":{"line":261,"offset":44722,"length":178,"previous":"M16-GAP-00261","next":"M16-GAP-00263"},"M16-GAP-00263":{"line":262,"offset":44900,"length":172,"previous":"M16-GAP-00262","next":"M16-GAP-00264"},"M16-GAP-00264":{"line":263,"offset":45072,"length":173,"previous":"M16-GAP-00263","next":"M16-GAP-00265"},"M16-GAP-00265":{"line":264,"offset":45245,"length":174,"previous":"M16-GAP-00264","next":"M16-GAP-00266"},"M16-GAP-00266":{"line":265,"offset":45419,"length":172,"previous":"M16-GAP-00265","next":"M16-GAP-00267"},"M16-GAP-00267":{"line":266,"offset":45591,"length":187,"previous":"M16-GAP-00266","next":"M16-GAP-00268"},"M16-GAP-00268":{"line":267,"offset":45778,"length":173,"previous":"M16-GAP-00267","next":"M16-GAP-00269"},"M16-GAP-00269":{"line":268,"offset":45951,"length":173,"previous":"M16-GAP-00268","next":"M16-GAP-00270"},"M16-GAP-00270":{"line":269,"offset":46124,"length":170,"previous":"M16-GAP-00269","next":"M16-GAP-00271"},"M16-GAP-00271":{"line":270,"offset":46294,"length":171,"previous":"M16-GAP-00270","next":"M16-GAP-00272"},"M16-GAP-00272":{"line":271,"offset":46465,"length":171,"previous":"M16-GAP-00271","next":"M16-GAP-00273"},"M16-GAP-00273":{"line":272,"offset":46636,"length":176,"previous":"M16-GAP-00272","next":"M16-GAP-00274"},"M16-GAP-00274":{"line":273,"offset":46812,"length":172,"previous":"M16-GAP-00273","next":"M16-GAP-00275"},"M16-GAP-00275":{"line":274,"offset":46984,"length":164,"previous":"M16-GAP-00274","next":"M16-GAP-00276"},"M16-GAP-00276":{"line":275,"offset":47148,"length":171,"previous":"M16-GAP-00275","next":"M16-GAP-00277"},"M16-GAP-00277":{"line":276,"offset":47319,"length":174,"previous":"M16-GAP-00276","next":"M16-GAP-00278"},"M16-GAP-00278":{"line":277,"offset":47493,"length":181,"previous":"M16-GAP-00277","next":"M16-GAP-00279"},"M16-GAP-00279":{"line":278,"offset":47674,"length":163,"previous":"M16-GAP-00278","next":"M16-GAP-00280"},"M16-GAP-00280":{"line":279,"offset":47837,"length":170,"previous":"M16-GAP-00279","next":"M16-GAP-00281"},"M16-GAP-00281":{"line":280,"offset":48007,"length":185,"previous":"M16-GAP-00280","next":"M16-GAP-00282"},"M16-GAP-00282":{"line":281,"offset":48192,"length":174,"previous":"M16-GAP-00281","next":"M16-GAP-00283"},"M16-GAP-00283":{"line":282,"offset":48366,"length":164,"previous":"M16-GAP-00282","next":"M16-GAP-00284"},"M16-GAP-00284":{"line":283,"offset":48530,"length":167,"previous":"M16-GAP-00283","next":"M16-GAP-00285"},"M16-GAP-00285":{"line":284,"offset":48697,"length":164,"previous":"M16-GAP-00284","next":"M16-GAP-00286"},"M16-GAP-00286":{"line":285,"offset":48861,"length":164,"previous":"M16-GAP-00285","next":"M16-GAP-00287"},"M16-GAP-00287":{"line":286,"offset":49025,"length":170,"previous":"M16-GAP-00286","next":"M16-GAP-00288"},"M16-GAP-00288":{"line":287,"offset":49195,"length":168,"previous":"M16-GAP-00287","next":"M16-GAP-00289"},"M16-GAP-00289":{"line":288,"offset":49363,"length":165,"previous":"M16-GAP-00288","next":"M16-GAP-00290"},"M16-GAP-00290":{"line":289,"offset":49528,"length":165,"previous":"M16-GAP-00289","next":"M16-GAP-00291"},"M16-GAP-00291":{"line":290,"offset":49693,"length":171,"previous":"M16-GAP-00290","next":"M16-GAP-00292"},"M16-GAP-00292":{"line":291,"offset":49864,"length":169,"previous":"M16-GAP-00291","next":"M16-GAP-00293"},"M16-GAP-00293":{"line":292,"offset":50033,"length":171,"previous":"M16-GAP-00292","next":"M16-GAP-00294"},"M16-GAP-00294":{"line":293,"offset":50204,"length":169,"previous":"M16-GAP-00293","next":"M16-GAP-00295"},"M16-GAP-00295":{"line":294,"offset":50373,"length":176,"previous":"M16-GAP-00294","next":"M16-GAP-00296"},"M16-GAP-00296":{"line":295,"offset":50549,"length":175,"previous":"M16-GAP-00295","next":"M16-GAP-00297"},"M16-GAP-00297":{"line":296,"offset":50724,"length":169,"previous":"M16-GAP-00296","next":"M16-GAP-00298"},"M16-GAP-00298":{"line":297,"offset":50893,"length":167,"previous":"M16-GAP-00297","next":"M16-GAP-00299"},"M16-GAP-00299":{"line":298,"offset":51060,"length":170,"previous":"M16-GAP-00298","next":"M16-GAP-00300"},"M16-GAP-00300":{"line":299,"offset":51230,"length":167,"previous":"M16-GAP-00299","next":"M16-GAP-00301"},"M16-GAP-00301":{"line":300,"offset":51397,"length":172,"previous":"M16-GAP-00300","next":"M16-GAP-00302"},"M16-GAP-00302":{"line":301,"offset":51569,"length":181,"previous":"M16-GAP-00301","next":"M16-GAP-00303"},"M16-GAP-00303":{"line":302,"offset":51750,"length":180,"previous":"M16-GAP-00302","next":"M16-GAP-00304"},"M16-GAP-00304":{"line":303,"offset":51930,"length":171,"previous":"M16-GAP-00303","next":"M16-GAP-00305"},"M16-GAP-00305":{"line":304,"offset":52101,"length":171,"previous":"M16-GAP-00304","next":"M16-GAP-00306"},"M16-GAP-00306":{"line":305,"offset":52272,"length":175,"previous":"M16-GAP-00305","next":"M16-GAP-00307"},"M16-GAP-00307":{"line":306,"offset":52447,"length":170,"previous":"M16-GAP-00306","next":"M16-GAP-00308"},"M16-GAP-00308":{"line":307,"offset":52617,"length":171,"previous":"M16-GAP-00307","next":"M16-GAP-00309"},"M16-GAP-00309":{"line":308,"offset":52788,"length":169,"previous":"M16-GAP-00308","next":"M16-GAP-00310"},"M16-GAP-00310":{"line":309,"offset":52957,"length":170,"previous":"M16-GAP-00309","next":"M16-GAP-00311"},"M16-GAP-00311":{"line":310,"offset":53127,"length":171,"previous":"M16-GAP-00310","next":"M16-GAP-00312"},"M16-GAP-00312":{"line":311,"offset":53298,"length":173,"previous":"M16-GAP-00311","next":"M16-GAP-00313"},"M16-GAP-00313":{"line":312,"offset":53471,"length":165,"previous":"M16-GAP-00312","next":"M16-GAP-00314"},"M16-GAP-00314":{"line":313,"offset":53636,"length":167,"previous":"M16-GAP-00313","next":"M16-GAP-00315"},"M16-GAP-00315":{"line":314,"offset":53803,"length":168,"previous":"M16-GAP-00314","next":"M16-GAP-00316"},"M16-GAP-00316":{"line":315,"offset":53971,"length":179,"previous":"M16-GAP-00315","next":"M16-GAP-00317"},"M16-GAP-00317":{"line":316,"offset":54150,"length":166,"previous":"M16-GAP-00316","next":"M16-GAP-00318"},"M16-GAP-00318":{"line":317,"offset":54316,"length":175,"previous":"M16-GAP-00317","next":"M16-GAP-00319"},"M16-GAP-00319":{"line":318,"offset":54491,"length":171,"previous":"M16-GAP-00318","next":"M16-GAP-00320"},"M16-GAP-00320":{"line":319,"offset":54662,"length":172,"previous":"M16-GAP-00319","next":"M16-GAP-00321"},"M16-GAP-00321":{"line":320,"offset":54834,"length":176,"previous":"M16-GAP-00320","next":"M16-GAP-00322"},"M16-GAP-00322":{"line":321,"offset":55010,"length":170,"previous":"M16-GAP-00321","next":"M16-GAP-00323"},"M16-GAP-00323":{"line":322,"offset":55180,"length":171,"previous":"M16-GAP-00322","next":"M16-GAP-00324"},"M16-GAP-00324":{"line":323,"offset":55351,"length":173,"previous":"M16-GAP-00323","next":"M16-GAP-00325"},"M16-GAP-00325":{"line":324,"offset":55524,"length":168,"previous":"M16-GAP-00324","next":"M16-GAP-00326"},"M16-GAP-00326":{"line":325,"offset":55692,"length":168,"previous":"M16-GAP-00325","next":"M16-GAP-00327"},"M16-GAP-00327":{"line":326,"offset":55860,"length":170,"previous":"M16-GAP-00326","next":"M16-GAP-00328"},"M16-GAP-00328":{"line":327,"offset":56030,"length":172,"previous":"M16-GAP-00327","next":"M16-GAP-00329"},"M16-GAP-00329":{"line":328,"offset":56202,"length":176,"previous":"M16-GAP-00328","next":"M16-GAP-00330"},"M16-GAP-00330":{"line":329,"offset":56378,"length":167,"previous":"M16-GAP-00329","next":"M16-GAP-00331"},"M16-GAP-00331":{"line":330,"offset":56545,"length":174,"previous":"M16-GAP-00330","next":"M16-GAP-00332"},"M16-GAP-00332":{"line":331,"offset":56719,"length":166,"previous":"M16-GAP-00331","next":"M16-GAP-00333"},"M16-GAP-00333":{"line":332,"offset":56885,"length":169,"previous":"M16-GAP-00332","next":"M16-GAP-00334"},"M16-GAP-00334":{"line":333,"offset":57054,"length":168,"previous":"M16-GAP-00333","next":"M16-GAP-00335"},"M16-GAP-00335":{"line":334,"offset":57222,"length":168,"previous":"M16-GAP-00334","next":"M16-GAP-00336"},"M16-GAP-00336":{"line":335,"offset":57390,"length":171,"previous":"M16-GAP-00335","next":"M16-GAP-00337"},"M16-GAP-00337":{"line":336,"offset":57561,"length":171,"previous":"M16-GAP-00336","next":"M16-GAP-00338"},"M16-GAP-00338":{"line":337,"offset":57732,"length":180,"previous":"M16-GAP-00337","next":"M16-GAP-00339"},"M16-GAP-00339":{"line":338,"offset":57912,"length":174,"previous":"M16-GAP-00338","next":"M16-GAP-00340"},"M16-GAP-00340":{"line":339,"offset":58086,"length":169,"previous":"M16-GAP-00339","next":"M16-GAP-00341"},"M16-GAP-00341":{"line":340,"offset":58255,"length":166,"previous":"M16-GAP-00340","next":"M16-GAP-00342"},"M16-GAP-00342":{"line":341,"offset":58421,"length":182,"previous":"M16-GAP-00341","next":"M16-GAP-00343"},"M16-GAP-00343":{"line":342,"offset":58603,"length":174,"previous":"M16-GAP-00342","next":"M16-GAP-00344"},"M16-GAP-00344":{"line":343,"offset":58777,"length":173,"previous":"M16-GAP-00343","next":"M16-GAP-00345"},"M16-GAP-00345":{"line":344,"offset":58950,"length":177,"previous":"M16-GAP-00344","next":"M16-GAP-00346"},"M16-GAP-00346":{"line":345,"offset":59127,"length":168,"previous":"M16-GAP-00345","next":"M16-GAP-00347"},"M16-GAP-00347":{"line":346,"offset":59295,"length":180,"previous":"M16-GAP-00346","next":"M16-GAP-00348"},"M16-GAP-00348":{"line":347,"offset":59475,"length":172,"previous":"M16-GAP-00347","next":"M16-GAP-00349"},"M16-GAP-00349":{"line":348,"offset":59647,"length":170,"previous":"M16-GAP-00348","next":"M16-GAP-00350"},"M16-GAP-00350":{"line":349,"offset":59817,"length":167,"previous":"M16-GAP-00349","next":"M16-GAP-00351"},"M16-GAP-00351":{"line":350,"offset":59984,"length":173,"previous":"M16-GAP-00350","next":"M16-GAP-00352"},"M16-GAP-00352":{"line":351,"offset":60157,"length":167,"previous":"M16-GAP-00351","next":"M16-GAP-00353"},"M16-GAP-00353":{"line":352,"offset":60324,"length":171,"previous":"M16-GAP-00352","next":"M16-GAP-00354"},"M16-GAP-00354":{"line":353,"offset":60495,"length":171,"previous":"M16-GAP-00353","next":"M16-GAP-00355"},"M16-GAP-00355":{"line":354,"offset":60666,"length":177,"previous":"M16-GAP-00354","next":"M16-GAP-00356"},"M16-GAP-00356":{"line":355,"offset":60843,"length":167,"previous":"M16-GAP-00355","next":"M16-GAP-00357"},"M16-GAP-00357":{"line":356,"offset":61010,"length":164,"previous":"M16-GAP-00356","next":"M16-GAP-00358"},"M16-GAP-00358":{"line":357,"offset":61174,"length":183,"previous":"M16-GAP-00357","next":"M16-GAP-00359"},"M16-GAP-00359":{"line":358,"offset":61357,"length":160,"previous":"M16-GAP-00358","next":"M16-GAP-00360"},"M16-GAP-00360":{"line":359,"offset":61517,"length":168,"previous":"M16-GAP-00359","next":"M16-GAP-00361"},"M16-GAP-00361":{"line":360,"offset":61685,"length":164,"previous":"M16-GAP-00360","next":"M16-GAP-00362"},"M16-GAP-00362":{"line":361,"offset":61849,"length":169,"previous":"M16-GAP-00361","next":"M16-GAP-00363"},"M16-GAP-00363":{"line":362,"offset":62018,"length":170,"previous":"M16-GAP-00362","next":"M16-GAP-00364"},"M16-GAP-00364":{"line":363,"offset":62188,"length":162,"previous":"M16-GAP-00363","next":"M16-GAP-00365"},"M16-GAP-00365":{"line":364,"offset":62350,"length":162,"previous":"M16-GAP-00364","next":"M16-GAP-00366"},"M16-GAP-00366":{"line":365,"offset":62512,"length":166,"previous":"M16-GAP-00365","next":"M16-GAP-00367"},"M16-GAP-00367":{"line":366,"offset":62678,"length":166,"previous":"M16-GAP-00366","next":"M16-GAP-00368"},"M16-GAP-00368":{"line":367,"offset":62844,"length":169,"previous":"M16-GAP-00367","next":"M16-GAP-00369"},"M16-GAP-00369":{"line":368,"offset":63013,"length":170,"previous":"M16-GAP-00368","next":"M16-GAP-00370"},"M16-GAP-00370":{"line":369,"offset":63183,"length":168,"previous":"M16-GAP-00369","next":"M16-GAP-00371"},"M16-GAP-00371":{"line":370,"offset":63351,"length":171,"previous":"M16-GAP-00370","next":"M16-GAP-00372"},"M16-GAP-00372":{"line":371,"offset":63522,"length":164,"previous":"M16-GAP-00371","next":"M16-GAP-00373"},"M16-GAP-00373":{"line":372,"offset":63686,"length":166,"previous":"M16-GAP-00372","next":"M16-GAP-00374"},"M16-GAP-00374":{"line":373,"offset":63852,"length":165,"previous":"M16-GAP-00373","next":"M16-GAP-00375"},"M16-GAP-00375":{"line":374,"offset":64017,"length":165,"previous":"M16-GAP-00374","next":"M16-GAP-00376"},"M16-GAP-00376":{"line":375,"offset":64182,"length":172,"previous":"M16-GAP-00375","next":"M16-GAP-00377"},"M16-GAP-00377":{"line":376,"offset":64354,"length":174,"previous":"M16-GAP-00376","next":"M16-GAP-00378"},"M16-GAP-00378":{"line":377,"offset":64528,"length":175,"previous":"M16-GAP-00377","next":"M16-GAP-00379"},"M16-GAP-00379":{"line":378,"offset":64703,"length":179,"previous":"M16-GAP-00378","next":"M16-GAP-00380"},"M16-GAP-00380":{"line":379,"offset":64882,"length":176,"previous":"M16-GAP-00379","next":"M16-GAP-00381"},"M16-GAP-00381":{"line":380,"offset":65058,"length":168,"previous":"M16-GAP-00380","next":"M16-GAP-00382"},"M16-GAP-00382":{"line":381,"offset":65226,"length":174,"previous":"M16-GAP-00381","next":"M16-GAP-00383"},"M16-GAP-00383":{"line":382,"offset":65400,"length":168,"previous":"M16-GAP-00382","next":"M16-GAP-00384"},"M16-GAP-00384":{"line":383,"offset":65568,"length":172,"previous":"M16-GAP-00383","next":"M16-GAP-00385"},"M16-GAP-00385":{"line":384,"offset":65740,"length":175,"previous":"M16-GAP-00384","next":"M16-GAP-00386"},"M16-GAP-00386":{"line":385,"offset":65915,"length":181,"previous":"M16-GAP-00385","next":"M16-GAP-00387"},"M16-GAP-00387":{"line":386,"offset":66096,"length":184,"previous":"M16-GAP-00386","next":"M16-GAP-00388"},"M16-GAP-00388":{"line":387,"offset":66280,"length":184,"previous":"M16-GAP-00387","next":"M16-GAP-00389"},"M16-GAP-00389":{"line":388,"offset":66464,"length":175,"previous":"M16-GAP-00388","next":"M16-GAP-00390"},"M16-GAP-00390":{"line":389,"offset":66639,"length":178,"previous":"M16-GAP-00389","next":"M16-GAP-00391"},"M16-GAP-00391":{"line":390,"offset":66817,"length":172,"previous":"M16-GAP-00390","next":"M16-GAP-00392"},"M16-GAP-00392":{"line":391,"offset":66989,"length":169,"previous":"M16-GAP-00391","next":"M16-GAP-00393"},"M16-GAP-00393":{"line":392,"offset":67158,"length":181,"previous":"M16-GAP-00392","next":"M16-GAP-00394"},"M16-GAP-00394":{"line":393,"offset":67339,"length":179,"previous":"M16-GAP-00393","next":"M16-GAP-00395"},"M16-GAP-00395":{"line":394,"offset":67518,"length":170,"previous":"M16-GAP-00394","next":"M16-GAP-00396"},"M16-GAP-00396":{"line":395,"offset":67688,"length":175,"previous":"M16-GAP-00395","next":"M16-GAP-00397"},"M16-GAP-00397":{"line":396,"offset":67863,"length":178,"previous":"M16-GAP-00396","next":"M16-GAP-00398"},"M16-GAP-00398":{"line":397,"offset":68041,"length":184,"previous":"M16-GAP-00397","next":"M16-GAP-00399"},"M16-GAP-00399":{"line":398,"offset":68225,"length":186,"previous":"M16-GAP-00398","next":"M16-GAP-00400"},"M16-GAP-00400":{"line":399,"offset":68411,"length":164,"previous":"M16-GAP-00399","next":"M16-GAP-00401"},"M16-GAP-00401":{"line":400,"offset":68575,"length":174,"previous":"M16-GAP-00400","next":"M16-GAP-00402"},"M16-GAP-00402":{"line":401,"offset":68749,"length":165,"previous":"M16-GAP-00401","next":"M16-GAP-00403"},"M16-GAP-00403":{"line":402,"offset":68914,"length":164,"previous":"M16-GAP-00402","next":"M16-GAP-00404"},"M16-GAP-00404":{"line":403,"offset":69078,"length":169,"previous":"M16-GAP-00403","next":"M16-GAP-00405"},"M16-GAP-00405":{"line":404,"offset":69247,"length":165,"previous":"M16-GAP-00404","next":"M16-GAP-00406"},"M16-GAP-00406":{"line":405,"offset":69412,"length":168,"previous":"M16-GAP-00405","next":"M16-GAP-00407"},"M16-GAP-00407":{"line":406,"offset":69580,"length":169,"previous":"M16-GAP-00406","next":"M16-GAP-00408"},"M16-GAP-00408":{"line":407,"offset":69749,"length":171,"previous":"M16-GAP-00407","next":"M16-GAP-00409"},"M16-GAP-00409":{"line":408,"offset":69920,"length":167,"previous":"M16-GAP-00408","next":"M16-GAP-00410"},"M16-GAP-00410":{"line":409,"offset":70087,"length":168,"previous":"M16-GAP-00409","next":"M16-GAP-00411"},"M16-GAP-00411":{"line":410,"offset":70255,"length":172,"previous":"M16-GAP-00410","next":"M16-GAP-00412"},"M16-GAP-00412":{"line":411,"offset":70427,"length":174,"previous":"M16-GAP-00411","next":"M16-GAP-00413"},"M16-GAP-00413":{"line":412,"offset":70601,"length":177,"previous":"M16-GAP-00412","next":"M16-GAP-00414"},"M16-GAP-00414":{"line":413,"offset":70778,"length":175,"previous":"M16-GAP-00413","next":"M16-GAP-00415"},"M16-GAP-00415":{"line":414,"offset":70953,"length":177,"previous":"M16-GAP-00414","next":"M16-GAP-00416"},"M16-GAP-00416":{"line":415,"offset":71130,"length":174,"previous":"M16-GAP-00415","next":"M16-GAP-00417"},"M16-GAP-00417":{"line":416,"offset":71304,"length":177,"previous":"M16-GAP-00416","next":"M16-GAP-00418"},"M16-GAP-00418":{"line":417,"offset":71481,"length":180,"previous":"M16-GAP-00417","next":"M16-GAP-00419"},"M16-GAP-00419":{"line":418,"offset":71661,"length":176,"previous":"M16-GAP-00418","next":"M16-GAP-00420"},"M16-GAP-00420":{"line":419,"offset":71837,"length":183,"previous":"M16-GAP-00419","next":"M16-GAP-00421"},"M16-GAP-00421":{"line":420,"offset":72020,"length":180,"previous":"M16-GAP-00420","next":"M16-GAP-00422"},"M16-GAP-00422":{"line":421,"offset":72200,"length":171,"previous":"M16-GAP-00421","next":"M16-GAP-00423"},"M16-GAP-00423":{"line":422,"offset":72371,"length":165,"previous":"M16-GAP-00422","next":"M16-GAP-00424"},"M16-GAP-00424":{"line":423,"offset":72536,"length":164,"previous":"M16-GAP-00423","next":"M16-GAP-00425"},"M16-GAP-00425":{"line":424,"offset":72700,"length":169,"previous":"M16-GAP-00424","next":"M16-GAP-00426"},"M16-GAP-00426":{"line":425,"offset":72869,"length":163,"previous":"M16-GAP-00425","next":"M16-GAP-00427"},"M16-GAP-00427":{"line":426,"offset":73032,"length":173,"previous":"M16-GAP-00426","next":"M16-GAP-00428"},"M16-GAP-00428":{"line":427,"offset":73205,"length":165,"previous":"M16-GAP-00427","next":"M16-GAP-00429"},"M16-GAP-00429":{"line":428,"offset":73370,"length":166,"previous":"M16-GAP-00428","next":"M16-GAP-00430"},"M16-GAP-00430":{"line":429,"offset":73536,"length":173,"previous":"M16-GAP-00429","next":"M16-GAP-00431"},"M16-GAP-00431":{"line":430,"offset":73709,"length":172,"previous":"M16-GAP-00430","next":"M16-GAP-00432"},"M16-GAP-00432":{"line":431,"offset":73881,"length":165,"previous":"M16-GAP-00431","next":"M16-GAP-00433"},"M16-GAP-00433":{"line":432,"offset":74046,"length":181,"previous":"M16-GAP-00432","next":"M16-GAP-00434"},"M16-GAP-00434":{"line":433,"offset":74227,"length":165,"previous":"M16-GAP-00433","next":"M16-GAP-00435"},"M16-GAP-00435":{"line":434,"offset":74392,"length":167,"previous":"M16-GAP-00434","next":"M16-GAP-00436"},"M16-GAP-00436":{"line":435,"offset":74559,"length":163,"previous":"M16-GAP-00435","next":"M16-GAP-00437"},"M16-GAP-00437":{"line":436,"offset":74722,"length":164,"previous":"M16-GAP-00436","next":"M16-GAP-00438"},"M16-GAP-00438":{"line":437,"offset":74886,"length":176,"previous":"M16-GAP-00437","next":"M16-GAP-00439"},"M16-GAP-00439":{"line":438,"offset":75062,"length":169,"previous":"M16-GAP-00438","next":"M16-GAP-00440"},"M16-GAP-00440":{"line":439,"offset":75231,"length":169,"previous":"M16-GAP-00439","next":"M16-GAP-00441"},"M16-GAP-00441":{"line":440,"offset":75400,"length":170,"previous":"M16-GAP-00440","next":"M16-GAP-00442"},"M16-GAP-00442":{"line":441,"offset":75570,"length":167,"previous":"M16-GAP-00441","next":"M16-GAP-00443"},"M16-GAP-00443":{"line":442,"offset":75737,"length":172,"previous":"M16-GAP-00442","next":"M16-GAP-00444"},"M16-GAP-00444":{"line":443,"offset":75909,"length":167,"previous":"M16-GAP-00443","next":"M16-GAP-00445"},"M16-GAP-00445":{"line":444,"offset":76076,"length":183,"previous":"M16-GAP-00444","next":"M16-GAP-00446"},"M16-GAP-00446":{"line":445,"offset":76259,"length":181,"previous":"M16-GAP-00445","next":"M16-GAP-00447"},"M16-GAP-00447":{"line":446,"offset":76440,"length":166,"previous":"M16-GAP-00446","next":"M16-GAP-00448"},"M16-GAP-00448":{"line":447,"offset":76606,"length":178,"previous":"M16-GAP-00447","next":"M16-GAP-00449"},"M16-GAP-00449":{"line":448,"offset":76784,"length":168,"previous":"M16-GAP-00448","next":"M16-GAP-00450"},"M16-GAP-00450":{"line":449,"offset":76952,"length":184,"previous":"M16-GAP-00449","next":"M16-GAP-00451"},"M16-GAP-00451":{"line":450,"offset":77136,"length":185,"previous":"M16-GAP-00450","next":"M16-GAP-00452"},"M16-GAP-00452":{"line":451,"offset":77321,"length":181,"previous":"M16-GAP-00451","next":"M16-GAP-00453"},"M16-GAP-00453":{"line":452,"offset":77502,"length":171,"previous":"M16-GAP-00452","next":"M16-GAP-00454"},"M16-GAP-00454":{"line":453,"offset":77673,"length":175,"previous":"M16-GAP-00453","next":"M16-GAP-00455"},"M16-GAP-00455":{"line":454,"offset":77848,"length":169,"previous":"M16-GAP-00454","next":"M16-GAP-00456"},"M16-GAP-00456":{"line":455,"offset":78017,"length":186,"previous":"M16-GAP-00455","next":"M16-GAP-00457"},"M16-GAP-00457":{"line":456,"offset":78203,"length":188,"previous":"M16-GAP-00456","next":"M16-GAP-00458"},"M16-GAP-00458":{"line":457,"offset":78391,"length":186,"previous":"M16-GAP-00457","next":"M16-GAP-00459"},"M16-GAP-00459":{"line":458,"offset":78577,"length":175,"previous":"M16-GAP-00458","next":"M16-GAP-00460"},"M16-GAP-00460":{"line":459,"offset":78752,"length":177,"previous":"M16-GAP-00459","next":"M16-GAP-00461"},"M16-GAP-00461":{"line":460,"offset":78929,"length":170,"previous":"M16-GAP-00460","next":"M16-GAP-00462"},"M16-GAP-00462":{"line":461,"offset":79099,"length":172,"previous":"M16-GAP-00461","next":"M16-GAP-00463"},"M16-GAP-00463":{"line":462,"offset":79271,"length":171,"previous":"M16-GAP-00462","next":"M16-GAP-00464"},"M16-GAP-00464":{"line":463,"offset":79442,"length":165,"previous":"M16-GAP-00463","next":"M16-GAP-00465"},"M16-GAP-00465":{"line":464,"offset":79607,"length":163,"previous":"M16-GAP-00464","next":"M16-GAP-00466"},"M16-GAP-00466":{"line":465,"offset":79770,"length":171,"previous":"M16-GAP-00465","next":"M16-GAP-00467"},"M16-GAP-00467":{"line":466,"offset":79941,"length":161,"previous":"M16-GAP-00466","next":"M16-GAP-00468"},"M16-GAP-00468":{"line":467,"offset":80102,"length":166,"previous":"M16-GAP-00467","next":"M16-GAP-00469"},"M16-GAP-00469":{"line":468,"offset":80268,"length":171,"previous":"M16-GAP-00468","next":"M16-GAP-00470"},"M16-GAP-00470":{"line":469,"offset":80439,"length":164,"previous":"M16-GAP-00469","next":"M16-GAP-00471"},"M16-GAP-00471":{"line":470,"offset":80603,"length":169,"previous":"M16-GAP-00470","next":"M16-GAP-00472"},"M16-GAP-00472":{"line":471,"offset":80772,"length":172,"previous":"M16-GAP-00471","next":"M16-GAP-00473"},"M16-GAP-00473":{"line":472,"offset":80944,"length":161,"previous":"M16-GAP-00472","next":"M16-GAP-00474"},"M16-GAP-00474":{"line":473,"offset":81105,"length":169,"previous":"M16-GAP-00473","next":"M16-GAP-00475"},"M16-GAP-00475":{"line":474,"offset":81274,"length":176,"previous":"M16-GAP-00474","next":"M16-GAP-00476"},"M16-GAP-00476":{"line":475,"offset":81450,"length":180,"previous":"M16-GAP-00475","next":"M16-GAP-00477"},"M16-GAP-00477":{"line":476,"offset":81630,"length":160,"previous":"M16-GAP-00476","next":"M16-GAP-00478"},"M16-GAP-00478":{"line":477,"offset":81790,"length":184,"previous":"M16-GAP-00477","next":"M16-GAP-00479"},"M16-GAP-00479":{"line":478,"offset":81974,"length":183,"previous":"M16-GAP-00478","next":"M16-GAP-00480"},"M16-GAP-00480":{"line":479,"offset":82157,"length":183,"previous":"M16-GAP-00479","next":"M16-GAP-00481"},"M16-GAP-00481":{"line":480,"offset":82340,"length":182,"previous":"M16-GAP-00480","next":"M16-GAP-00482"},"M16-GAP-00482":{"line":481,"offset":82522,"length":181,"previous":"M16-GAP-00481","next":"M16-GAP-00483"},"M16-GAP-00483":{"line":482,"offset":82703,"length":167,"previous":"M16-GAP-00482","next":"M16-GAP-00484"},"M16-GAP-00484":{"line":483,"offset":82870,"length":163,"previous":"M16-GAP-00483","next":"M16-GAP-00485"},"M16-GAP-00485":{"line":484,"offset":83033,"length":167,"previous":"M16-GAP-00484","next":"M16-GAP-00486"},"M16-GAP-00486":{"line":485,"offset":83200,"length":168,"previous":"M16-GAP-00485","next":"M16-GAP-00487"},"M16-GAP-00487":{"line":486,"offset":83368,"length":170,"previous":"M16-GAP-00486","next":"M16-GAP-00488"},"M16-GAP-00488":{"line":487,"offset":83538,"length":175,"previous":"M16-GAP-00487","next":"M16-GAP-00489"},"M16-GAP-00489":{"line":488,"offset":83713,"length":168,"previous":"M16-GAP-00488","next":"M16-GAP-00490"},"M16-GAP-00490":{"line":489,"offset":83881,"length":168,"previous":"M16-GAP-00489","next":"M16-GAP-00491"},"M16-GAP-00491":{"line":490,"offset":84049,"length":167,"previous":"M16-GAP-00490","next":"M16-GAP-00492"},"M16-GAP-00492":{"line":491,"offset":84216,"length":172,"previous":"M16-GAP-00491","next":"M16-GAP-00493"},"M16-GAP-00493":{"line":492,"offset":84388,"length":170,"previous":"M16-GAP-00492","next":"M16-GAP-00494"},"M16-GAP-00494":{"line":493,"offset":84558,"length":167,"previous":"M16-GAP-00493","next":"M16-GAP-00495"},"M16-GAP-00495":{"line":494,"offset":84725,"length":171,"previous":"M16-GAP-00494","next":"M16-GAP-00496"},"M16-GAP-00496":{"line":495,"offset":84896,"length":165,"previous":"M16-GAP-00495","next":"M16-GAP-00497"},"M16-GAP-00497":{"line":496,"offset":85061,"length":167,"previous":"M16-GAP-00496","next":"M16-GAP-00498"},"M16-GAP-00498":{"line":497,"offset":85228,"length":169,"previous":"M16-GAP-00497","next":"M16-GAP-00499"},"M16-GAP-00499":{"line":498,"offset":85397,"length":175,"previous":"M16-GAP-00498","next":"M16-GAP-00500"},"M16-GAP-00500":{"line":499,"offset":85572,"length":163,"previous":"M16-GAP-00499","next":"M16-GAP-00501"},"M16-GAP-00501":{"line":500,"offset":85735,"length":170,"previous":"M16-GAP-00500","next":"M16-GAP-00502"},"M16-GAP-00502":{"line":501,"offset":85905,"length":168,"previous":"M16-GAP-00501","next":"M16-GAP-00503"},"M16-GAP-00503":{"line":502,"offset":86073,"length":170,"previous":"M16-GAP-00502","next":"M16-GAP-00504"},"M16-GAP-00504":{"line":503,"offset":86243,"length":161,"previous":"M16-GAP-00503","next":"M16-GAP-00505"},"M16-GAP-00505":{"line":504,"offset":86404,"length":172,"previous":"M16-GAP-00504","next":"M16-GAP-00506"},"M16-GAP-00506":{"line":505,"offset":86576,"length":174,"previous":"M16-GAP-00505","next":"M16-GAP-00507"},"M16-GAP-00507":{"line":506,"offset":86750,"length":162,"previous":"M16-GAP-00506","next":"M16-GAP-00508"},"M16-GAP-00508":{"line":507,"offset":86912,"length":166,"previous":"M16-GAP-00507","next":"M16-GAP-00509"},"M16-GAP-00509":{"line":508,"offset":87078,"length":173,"previous":"M16-GAP-00508","next":"M16-GAP-00510"},"M16-GAP-00510":{"line":509,"offset":87251,"length":167,"previous":"M16-GAP-00509","next":"M16-GAP-00511"},"M16-GAP-00511":{"line":510,"offset":87418,"length":167,"previous":"M16-GAP-00510","next":"M16-GAP-00512"},"M16-GAP-00512":{"line":511,"offset":87585,"length":168,"previous":"M16-GAP-00511","next":"M16-GAP-00513"},"M16-GAP-00513":{"line":512,"offset":87753,"length":168,"previous":"M16-GAP-00512","next":"M16-GAP-00514"},"M16-GAP-00514":{"line":513,"offset":87921,"length":171,"previous":"M16-GAP-00513","next":"M16-GAP-00515"},"M16-GAP-00515":{"line":514,"offset":88092,"length":186,"previous":"M16-GAP-00514","next":"M16-GAP-00516"},"M16-GAP-00516":{"line":515,"offset":88278,"length":184,"previous":"M16-GAP-00515","next":"M16-GAP-00517"},"M16-GAP-00517":{"line":516,"offset":88462,"length":172,"previous":"M16-GAP-00516","next":"M16-GAP-00518"},"M16-GAP-00518":{"line":517,"offset":88634,"length":171,"previous":"M16-GAP-00517","next":"M16-GAP-00519"},"M16-GAP-00519":{"line":518,"offset":88805,"length":164,"previous":"M16-GAP-00518","next":"M16-GAP-00520"},"M16-GAP-00520":{"line":519,"offset":88969,"length":162,"previous":"M16-GAP-00519","next":"M16-GAP-00521"},"M16-GAP-00521":{"line":520,"offset":89131,"length":167,"previous":"M16-GAP-00520","next":"M16-GAP-00522"},"M16-GAP-00522":{"line":521,"offset":89298,"length":172,"previous":"M16-GAP-00521","next":"M16-GAP-00523"},"M16-GAP-00523":{"line":522,"offset":89470,"length":165,"previous":"M16-GAP-00522","next":"M16-GAP-00524"},"M16-GAP-00524":{"line":523,"offset":89635,"length":170,"previous":"M16-GAP-00523","next":"M16-GAP-00525"},"M16-GAP-00525":{"line":524,"offset":89805,"length":173,"previous":"M16-GAP-00524","next":"M16-GAP-00526"},"M16-GAP-00526":{"line":525,"offset":89978,"length":161,"previous":"M16-GAP-00525","next":"M16-GAP-00527"},"M16-GAP-00527":{"line":526,"offset":90139,"length":175,"previous":"M16-GAP-00526","next":"M16-GAP-00528"},"M16-GAP-00528":{"line":527,"offset":90314,"length":168,"previous":"M16-GAP-00527","next":"M16-GAP-00529"},"M16-GAP-00529":{"line":528,"offset":90482,"length":169,"previous":"M16-GAP-00528","next":"M16-GAP-00530"},"M16-GAP-00530":{"line":529,"offset":90651,"length":169,"previous":"M16-GAP-00529","next":"M16-GAP-00531"},"M16-GAP-00531":{"line":530,"offset":90820,"length":171,"previous":"M16-GAP-00530","next":"M16-GAP-00532"},"M16-GAP-00532":{"line":531,"offset":90991,"length":176,"previous":"M16-GAP-00531","next":"M16-GAP-00533"},"M16-GAP-00533":{"line":532,"offset":91167,"length":169,"previous":"M16-GAP-00532","next":"M16-GAP-00534"},"M16-GAP-00534":{"line":533,"offset":91336,"length":171,"previous":"M16-GAP-00533","next":"M16-GAP-00535"},"M16-GAP-00535":{"line":534,"offset":91507,"length":166,"previous":"M16-GAP-00534","next":"M16-GAP-00536"},"M16-GAP-00536":{"line":535,"offset":91673,"length":178,"previous":"M16-GAP-00535","next":"M16-GAP-00537"},"M16-GAP-00537":{"line":536,"offset":91851,"length":180,"previous":"M16-GAP-00536","next":"M16-GAP-00538"},"M16-GAP-00538":{"line":537,"offset":92031,"length":163,"previous":"M16-GAP-00537","next":"M16-GAP-00539"},"M16-GAP-00539":{"line":538,"offset":92194,"length":167,"previous":"M16-GAP-00538","next":"M16-GAP-00540"},"M16-GAP-00540":{"line":539,"offset":92361,"length":169,"previous":"M16-GAP-00539","next":"M16-GAP-00541"},"M16-GAP-00541":{"line":540,"offset":92530,"length":174,"previous":"M16-GAP-00540","next":"M16-GAP-00542"},"M16-GAP-00542":{"line":541,"offset":92704,"length":168,"previous":"M16-GAP-00541","next":"M16-GAP-00543"},"M16-GAP-00543":{"line":542,"offset":92872,"length":175,"previous":"M16-GAP-00542","next":"M16-GAP-00544"},"M16-GAP-00544":{"line":543,"offset":93047,"length":170,"previous":"M16-GAP-00543","next":"M16-GAP-00545"},"M16-GAP-00545":{"line":544,"offset":93217,"length":175,"previous":"M16-GAP-00544","next":"M16-GAP-00546"},"M16-GAP-00546":{"line":545,"offset":93392,"length":162,"previous":"M16-GAP-00545","next":"M16-GAP-00547"},"M16-GAP-00547":{"line":546,"offset":93554,"length":171,"previous":"M16-GAP-00546","next":"M16-GAP-00548"},"M16-GAP-00548":{"line":547,"offset":93725,"length":174,"previous":"M16-GAP-00547","next":"M16-GAP-00549"},"M16-GAP-00549":{"line":548,"offset":93899,"length":177,"previous":"M16-GAP-00548","next":"M16-GAP-00550"},"M16-GAP-00550":{"line":549,"offset":94076,"length":169,"previous":"M16-GAP-00549","next":"M16-GAP-00551"},"M16-GAP-00551":{"line":550,"offset":94245,"length":165,"previous":"M16-GAP-00550","next":"M16-GAP-00552"},"M16-GAP-00552":{"line":551,"offset":94410,"length":177,"previous":"M16-GAP-00551","next":"M16-GAP-00553"},"M16-GAP-00553":{"line":552,"offset":94587,"length":177,"previous":"M16-GAP-00552","next":"M16-GAP-00554"},"M16-GAP-00554":{"line":553,"offset":94764,"length":189,"previous":"M16-GAP-00553","next":"M16-GAP-00555"},"M16-GAP-00555":{"line":554,"offset":94953,"length":180,"previous":"M16-GAP-00554","next":"M16-GAP-00556"},"M16-GAP-00556":{"line":555,"offset":95133,"length":185,"previous":"M16-GAP-00555","next":"M16-GAP-00557"},"M16-GAP-00557":{"line":556,"offset":95318,"length":175,"previous":"M16-GAP-00556","next":"M16-GAP-00558"},"M16-GAP-00558":{"line":557,"offset":95493,"length":167,"previous":"M16-GAP-00557","next":"M16-GAP-00559"},"M16-GAP-00559":{"line":558,"offset":95660,"length":158,"previous":"M16-GAP-00558","next":"M16-GAP-00560"},"M16-GAP-00560":{"line":559,"offset":95818,"length":158,"previous":"M16-GAP-00559","next":"M16-GAP-00561"},"M16-GAP-00561":{"line":560,"offset":95976,"length":166,"previous":"M16-GAP-00560","next":"M16-GAP-00562"},"M16-GAP-00562":{"line":561,"offset":96142,"length":163,"previous":"M16-GAP-00561","next":"M16-GAP-00563"},"M16-GAP-00563":{"line":562,"offset":96305,"length":163,"previous":"M16-GAP-00562","next":"M16-GAP-00564"},"M16-GAP-00564":{"line":563,"offset":96468,"length":166,"previous":"M16-GAP-00563","next":"M16-GAP-00565"},"M16-GAP-00565":{"line":564,"offset":96634,"length":167,"previous":"M16-GAP-00564","next":"M16-GAP-00566"},"M16-GAP-00566":{"line":565,"offset":96801,"length":168,"previous":"M16-GAP-00565","next":"M16-GAP-00567"},"M16-GAP-00567":{"line":566,"offset":96969,"length":177,"previous":"M16-GAP-00566","next":"M16-GAP-00568"},"M16-GAP-00568":{"line":567,"offset":97146,"length":177,"previous":"M16-GAP-00567","next":"M16-GAP-00569"},"M16-GAP-00569":{"line":568,"offset":97323,"length":183,"previous":"M16-GAP-00568","next":"M16-GAP-00570"},"M16-GAP-00570":{"line":569,"offset":97506,"length":184,"previous":"M16-GAP-00569","next":"M16-GAP-00571"},"M16-GAP-00571":{"line":570,"offset":97690,"length":180,"previous":"M16-GAP-00570","next":"M16-GAP-00572"},"M16-GAP-00572":{"line":571,"offset":97870,"length":184,"previous":"M16-GAP-00571","next":"M16-GAP-00573"},"M16-GAP-00573":{"line":572,"offset":98054,"length":178,"previous":"M16-GAP-00572","next":"M16-GAP-00574"},"M16-GAP-00574":{"line":573,"offset":98232,"length":182,"previous":"M16-GAP-00573","next":"M16-GAP-00575"},"M16-GAP-00575":{"line":574,"offset":98414,"length":185,"previous":"M16-GAP-00574","next":"M16-GAP-00576"},"M16-GAP-00576":{"line":575,"offset":98599,"length":180,"previous":"M16-GAP-00575","next":"M16-GAP-00577"},"M16-GAP-00577":{"line":576,"offset":98779,"length":178,"previous":"M16-GAP-00576","next":"M16-GAP-00578"},"M16-GAP-00578":{"line":577,"offset":98957,"length":183,"previous":"M16-GAP-00577","next":"M16-GAP-00579"},"M16-GAP-00579":{"line":578,"offset":99140,"length":183,"previous":"M16-GAP-00578","next":"M16-GAP-00580"},"M16-GAP-00580":{"line":579,"offset":99323,"length":182,"previous":"M16-GAP-00579","next":"M16-GAP-00581"},"M16-GAP-00581":{"line":580,"offset":99505,"length":179,"previous":"M16-GAP-00580","next":"M16-GAP-00582"},"M16-GAP-00582":{"line":581,"offset":99684,"length":186,"previous":"M16-GAP-00581","next":"M16-GAP-00583"},"M16-GAP-00583":{"line":582,"offset":99870,"length":186,"previous":"M16-GAP-00582","next":"M16-GAP-00584"},"M16-GAP-00584":{"line":583,"offset":100056,"length":181,"previous":"M16-GAP-00583","next":"M16-GAP-00585"},"M16-GAP-00585":{"line":584,"offset":100237,"length":183,"previous":"M16-GAP-00584","next":"M16-GAP-00586"},"M16-GAP-00586":{"line":585,"offset":100420,"length":175,"previous":"M16-GAP-00585","next":"M16-GAP-00587"},"M16-GAP-00587":{"line":586,"offset":100595,"length":178,"previous":"M16-GAP-00586","next":"M16-GAP-00588"},"M16-GAP-00588":{"line":587,"offset":100773,"length":171,"previous":"M16-GAP-00587","next":"M16-GAP-00589"},"M16-GAP-00589":{"line":588,"offset":100944,"length":175,"previous":"M16-GAP-00588","next":"M16-GAP-00590"},"M16-GAP-00590":{"line":589,"offset":101119,"length":173,"previous":"M16-GAP-00589","next":"M16-GAP-00591"},"M16-GAP-00591":{"line":590,"offset":101292,"length":177,"previous":"M16-GAP-00590","next":"M16-GAP-00592"},"M16-GAP-00592":{"line":591,"offset":101469,"length":174,"previous":"M16-GAP-00591","next":"M16-GAP-00593"},"M16-GAP-00593":{"line":592,"offset":101643,"length":181,"previous":"M16-GAP-00592","next":"M16-GAP-00594"},"M16-GAP-00594":{"line":593,"offset":101824,"length":183,"previous":"M16-GAP-00593","next":"M16-GAP-00595"},"M16-GAP-00595":{"line":594,"offset":102007,"length":189,"previous":"M16-GAP-00594","next":"M16-GAP-00596"},"M16-GAP-00596":{"line":595,"offset":102196,"length":186,"previous":"M16-GAP-00595","next":"M16-GAP-00597"},"M16-GAP-00597":{"line":596,"offset":102382,"length":182,"previous":"M16-GAP-00596","next":"M16-GAP-00598"},"M16-GAP-00598":{"line":597,"offset":102564,"length":179,"previous":"M16-GAP-00597","next":"M16-GAP-00599"},"M16-GAP-00599":{"line":598,"offset":102743,"length":171,"previous":"M16-GAP-00598","next":"M16-GAP-00600"},"M16-GAP-00600":{"line":599,"offset":102914,"length":168,"previous":"M16-GAP-00599","next":"M16-GAP-00601"},"M16-GAP-00601":{"line":600,"offset":103082,"length":172,"previous":"M16-GAP-00600","next":"M16-GAP-00602"},"M16-GAP-00602":{"line":601,"offset":103254,"length":171,"previous":"M16-GAP-00601","next":"M16-GAP-00603"},"M16-GAP-00603":{"line":602,"offset":103425,"length":169,"previous":"M16-GAP-00602","next":"M16-GAP-00604"},"M16-GAP-00604":{"line":603,"offset":103594,"length":162,"previous":"M16-GAP-00603","next":"M16-GAP-00605"},"M16-GAP-00605":{"line":604,"offset":103756,"length":162,"previous":"M16-GAP-00604","next":"M16-GAP-00606"},"M16-GAP-00606":{"line":605,"offset":103918,"length":169,"previous":"M16-GAP-00605","next":"M16-GAP-00607"},"M16-GAP-00607":{"line":606,"offset":104087,"length":175,"previous":"M16-GAP-00606","next":"M16-GAP-00608"},"M16-GAP-00608":{"line":607,"offset":104262,"length":163,"previous":"M16-GAP-00607","next":"M16-GAP-00609"},"M16-GAP-00609":{"line":608,"offset":104425,"length":174,"previous":"M16-GAP-00608","next":"M16-GAP-00610"},"M16-GAP-00610":{"line":609,"offset":104599,"length":163,"previous":"M16-GAP-00609","next":"M16-GAP-00611"},"M16-GAP-00611":{"line":610,"offset":104762,"length":169,"previous":"M16-GAP-00610","next":"M16-GAP-00612"},"M16-GAP-00612":{"line":611,"offset":104931,"length":174,"previous":"M16-GAP-00611","next":"M16-GAP-00613"},"M16-GAP-00613":{"line":612,"offset":105105,"length":163,"previous":"M16-GAP-00612","next":"M16-GAP-00614"},"M16-GAP-00614":{"line":613,"offset":105268,"length":165,"previous":"M16-GAP-00613","next":"M16-GAP-00615"},"M16-GAP-00615":{"line":614,"offset":105433,"length":175,"previous":"M16-GAP-00614","next":"M16-GAP-00616"},"M16-GAP-00616":{"line":615,"offset":105608,"length":175,"previous":"M16-GAP-00615","next":"M16-GAP-00617"},"M16-GAP-00617":{"line":616,"offset":105783,"length":169,"previous":"M16-GAP-00616","next":"M16-GAP-00618"},"M16-GAP-00618":{"line":617,"offset":105952,"length":160,"previous":"M16-GAP-00617","next":"M16-GAP-00619"},"M16-GAP-00619":{"line":618,"offset":106112,"length":164,"previous":"M16-GAP-00618","next":"M16-GAP-00620"},"M16-GAP-00620":{"line":619,"offset":106276,"length":170,"previous":"M16-GAP-00619","next":"M16-GAP-00621"},"M16-GAP-00621":{"line":620,"offset":106446,"length":162,"previous":"M16-GAP-00620","next":"M16-GAP-00622"},"M16-GAP-00622":{"line":621,"offset":106608,"length":164,"previous":"M16-GAP-00621","next":"M16-GAP-00623"},"M16-GAP-00623":{"line":622,"offset":106772,"length":163,"previous":"M16-GAP-00622","next":"M16-GAP-00624"},"M16-GAP-00624":{"line":623,"offset":106935,"length":162,"previous":"M16-GAP-00623","next":"M16-GAP-00625"},"M16-GAP-00625":{"line":624,"offset":107097,"length":176,"previous":"M16-GAP-00624","next":"M16-GAP-00626"},"M16-GAP-00626":{"line":625,"offset":107273,"length":168,"previous":"M16-GAP-00625","next":"M16-GAP-00627"},"M16-GAP-00627":{"line":626,"offset":107441,"length":162,"previous":"M16-GAP-00626","next":"M16-GAP-00628"},"M16-GAP-00628":{"line":627,"offset":107603,"length":166,"previous":"M16-GAP-00627","next":"M16-GAP-00629"},"M16-GAP-00629":{"line":628,"offset":107769,"length":171,"previous":"M16-GAP-00628","next":"M16-GAP-00630"},"M16-GAP-00630":{"line":629,"offset":107940,"length":166,"previous":"M16-GAP-00629","next":"M16-GAP-00631"},"M16-GAP-00631":{"line":630,"offset":108106,"length":167,"previous":"M16-GAP-00630","next":"M16-GAP-00632"},"M16-GAP-00632":{"line":631,"offset":108273,"length":168,"previous":"M16-GAP-00631","next":"M16-GAP-00633"},"M16-GAP-00633":{"line":632,"offset":108441,"length":178,"previous":"M16-GAP-00632","next":"M16-GAP-00634"},"M16-GAP-00634":{"line":633,"offset":108619,"length":168,"previous":"M16-GAP-00633","next":"M16-GAP-00635"},"M16-GAP-00635":{"line":634,"offset":108787,"length":166,"previous":"M16-GAP-00634","next":"M16-GAP-00636"},"M16-GAP-00636":{"line":635,"offset":108953,"length":167,"previous":"M16-GAP-00635","next":"M16-GAP-00637"},"M16-GAP-00637":{"line":636,"offset":109120,"length":172,"previous":"M16-GAP-00636","next":"M16-GAP-00638"},"M16-GAP-00638":{"line":637,"offset":109292,"length":169,"previous":"M16-GAP-00637","next":"M16-GAP-00639"},"M16-GAP-00639":{"line":638,"offset":109461,"length":165,"previous":"M16-GAP-00638","next":"M16-GAP-00640"},"M16-GAP-00640":{"line":639,"offset":109626,"length":166,"previous":"M16-GAP-00639","next":"M16-GAP-00641"},"M16-GAP-00641":{"line":640,"offset":109792,"length":168,"previous":"M16-GAP-00640","next":"M16-GAP-00642"},"M16-GAP-00642":{"line":641,"offset":109960,"length":166,"previous":"M16-GAP-00641","next":"M16-GAP-00643"},"M16-GAP-00643":{"line":642,"offset":110126,"length":167,"previous":"M16-GAP-00642","next":"M16-GAP-00644"},"M16-GAP-00644":{"line":643,"offset":110293,"length":171,"previous":"M16-GAP-00643","next":"M16-GAP-00645"},"M16-GAP-00645":{"line":644,"offset":110464,"length":165,"previous":"M16-GAP-00644","next":"M16-GAP-00646"},"M16-GAP-00646":{"line":645,"offset":110629,"length":166,"previous":"M16-GAP-00645","next":"M16-GAP-00647"},"M16-GAP-00647":{"line":646,"offset":110795,"length":168,"previous":"M16-GAP-00646","next":"M16-GAP-00648"},"M16-GAP-00648":{"line":647,"offset":110963,"length":166,"previous":"M16-GAP-00647","next":"M16-GAP-00649"},"M16-GAP-00649":{"line":648,"offset":111129,"length":167,"previous":"M16-GAP-00648","next":"M16-GAP-00650"},"M16-GAP-00650":{"line":649,"offset":111296,"length":171,"previous":"M16-GAP-00649","next":"M16-GAP-00651"},"M16-GAP-00651":{"line":650,"offset":111467,"length":167,"previous":"M16-GAP-00650","next":"M16-GAP-00652"},"M16-GAP-00652":{"line":651,"offset":111634,"length":167,"previous":"M16-GAP-00651","next":"M16-GAP-00653"},"M16-GAP-00653":{"line":652,"offset":111801,"length":164,"previous":"M16-GAP-00652","next":"M16-GAP-00654"},"M16-GAP-00654":{"line":653,"offset":111965,"length":167,"previous":"M16-GAP-00653","next":"M16-GAP-00655"},"M16-GAP-00655":{"line":654,"offset":112132,"length":172,"previous":"M16-GAP-00654","next":"M16-GAP-00656"},"M16-GAP-00656":{"line":655,"offset":112304,"length":170,"previous":"M16-GAP-00655","next":"M16-GAP-00657"},"M16-GAP-00657":{"line":656,"offset":112474,"length":162,"previous":"M16-GAP-00656","next":"M16-GAP-00658"},"M16-GAP-00658":{"line":657,"offset":112636,"length":166,"previous":"M16-GAP-00657","next":"M16-GAP-00659"},"M16-GAP-00659":{"line":658,"offset":112802,"length":160,"previous":"M16-GAP-00658","next":"M16-GAP-00660"},"M16-GAP-00660":{"line":659,"offset":112962,"length":167,"previous":"M16-GAP-00659","next":"M16-GAP-00661"},"M16-GAP-00661":{"line":660,"offset":113129,"length":160,"previous":"M16-GAP-00660","next":"M16-GAP-00662"},"M16-GAP-00662":{"line":661,"offset":113289,"length":166,"previous":"M16-GAP-00661","next":"M16-GAP-00663"},"M16-GAP-00663":{"line":662,"offset":113455,"length":167,"previous":"M16-GAP-00662","next":"M16-GAP-00664"},"M16-GAP-00664":{"line":663,"offset":113622,"length":169,"previous":"M16-GAP-00663","next":"M16-GAP-00665"},"M16-GAP-00665":{"line":664,"offset":113791,"length":165,"previous":"M16-GAP-00664","next":"M16-GAP-00666"},"M16-GAP-00666":{"line":665,"offset":113956,"length":168,"previous":"M16-GAP-00665","next":"M16-GAP-00667"},"M16-GAP-00667":{"line":666,"offset":114124,"length":165,"previous":"M16-GAP-00666","next":"M16-GAP-00668"},"M16-GAP-00668":{"line":667,"offset":114289,"length":164,"previous":"M16-GAP-00667","next":"M16-GAP-00669"},"M16-GAP-00669":{"line":668,"offset":114453,"length":167,"previous":"M16-GAP-00668","next":"M16-GAP-00670"},"M16-GAP-00670":{"line":669,"offset":114620,"length":175,"previous":"M16-GAP-00669","next":"M16-GAP-00671"},"M16-GAP-00671":{"line":670,"offset":114795,"length":166,"previous":"M16-GAP-00670","next":"M16-GAP-00672"},"M16-GAP-00672":{"line":671,"offset":114961,"length":176,"previous":"M16-GAP-00671","next":"M16-GAP-00673"},"M16-GAP-00673":{"line":672,"offset":115137,"length":167,"previous":"M16-GAP-00672","next":"M16-GAP-00674"},"M16-GAP-00674":{"line":673,"offset":115304,"length":170,"previous":"M16-GAP-00673","next":"M16-GAP-00675"},"M16-GAP-00675":{"line":674,"offset":115474,"length":162,"previous":"M16-GAP-00674","next":"M16-GAP-00676"},"M16-GAP-00676":{"line":675,"offset":115636,"length":173,"previous":"M16-GAP-00675","next":"M16-GAP-00677"},"M16-GAP-00677":{"line":676,"offset":115809,"length":177,"previous":"M16-GAP-00676","next":"M16-GAP-00678"},"M16-GAP-00678":{"line":677,"offset":115986,"length":176,"previous":"M16-GAP-00677","next":"M16-GAP-00679"},"M16-GAP-00679":{"line":678,"offset":116162,"length":179,"previous":"M16-GAP-00678","next":"M16-GAP-00680"},"M16-GAP-00680":{"line":679,"offset":116341,"length":183,"previous":"M16-GAP-00679","next":"M16-GAP-00681"},"M16-GAP-00681":{"line":680,"offset":116524,"length":185,"previous":"M16-GAP-00680","next":"M16-GAP-00682"},"M16-GAP-00682":{"line":681,"offset":116709,"length":182,"previous":"M16-GAP-00681","next":"M16-GAP-00683"},"M16-GAP-00683":{"line":682,"offset":116891,"length":186,"previous":"M16-GAP-00682","next":"M16-GAP-00684"},"M16-GAP-00684":{"line":683,"offset":117077,"length":182,"previous":"M16-GAP-00683","next":"M16-GAP-00685"},"M16-GAP-00685":{"line":684,"offset":117259,"length":174,"previous":"M16-GAP-00684","next":"M16-GAP-00686"},"M16-GAP-00686":{"line":685,"offset":117433,"length":173,"previous":"M16-GAP-00685","next":"M16-GAP-00687"},"M16-GAP-00687":{"line":686,"offset":117606,"length":167,"previous":"M16-GAP-00686","next":"M16-GAP-00688"},"M16-GAP-00688":{"line":687,"offset":117773,"length":189,"previous":"M16-GAP-00687","next":"M16-GAP-00689"},"M16-GAP-00689":{"line":688,"offset":117962,"length":173,"previous":"M16-GAP-00688","next":"M16-GAP-00690"},"M16-GAP-00690":{"line":689,"offset":118135,"length":170,"previous":"M16-GAP-00689","next":"M16-GAP-00691"},"M16-GAP-00691":{"line":690,"offset":118305,"length":179,"previous":"M16-GAP-00690","next":"M16-GAP-00692"},"M16-GAP-00692":{"line":691,"offset":118484,"length":180,"previous":"M16-GAP-00691","next":"M16-GAP-00693"},"M16-GAP-00693":{"line":692,"offset":118664,"length":182,"previous":"M16-GAP-00692","next":"M16-GAP-00694"},"M16-GAP-00694":{"line":693,"offset":118846,"length":166,"previous":"M16-GAP-00693","next":"M16-GAP-00695"},"M16-GAP-00695":{"line":694,"offset":119012,"length":169,"previous":"M16-GAP-00694","next":"M16-GAP-00696"},"M16-GAP-00696":{"line":695,"offset":119181,"length":173,"previous":"M16-GAP-00695","next":"M16-GAP-00697"},"M16-GAP-00697":{"line":696,"offset":119354,"length":170,"previous":"M16-GAP-00696","next":"M16-GAP-00698"},"M16-GAP-00698":{"line":697,"offset":119524,"length":174,"previous":"M16-GAP-00697","next":"M16-GAP-00699"},"M16-GAP-00699":{"line":698,"offset":119698,"length":166,"previous":"M16-GAP-00698","next":"M16-GAP-00700"},"M16-GAP-00700":{"line":699,"offset":119864,"length":175,"previous":"M16-GAP-00699","next":"M16-GAP-00701"},"M16-GAP-00701":{"line":700,"offset":120039,"length":162,"previous":"M16-GAP-00700","next":"M16-GAP-00702"},"M16-GAP-00702":{"line":701,"offset":120201,"length":169,"previous":"M16-GAP-00701","next":"M16-GAP-00703"},"M16-GAP-00703":{"line":702,"offset":120370,"length":168,"previous":"M16-GAP-00702","next":"M16-GAP-00704"},"M16-GAP-00704":{"line":703,"offset":120538,"length":161,"previous":"M16-GAP-00703","next":"M16-GAP-00705"},"M16-GAP-00705":{"line":704,"offset":120699,"length":167,"previous":"M16-GAP-00704","next":"M16-GAP-00706"},"M16-GAP-00706":{"line":705,"offset":120866,"length":165,"previous":"M16-GAP-00705","next":"M16-GAP-00707"},"M16-GAP-00707":{"line":706,"offset":121031,"length":163,"previous":"M16-GAP-00706","next":"M16-GAP-00708"},"M16-GAP-00708":{"line":707,"offset":121194,"length":178,"previous":"M16-GAP-00707","next":"M16-GAP-00709"},"M16-GAP-00709":{"line":708,"offset":121372,"length":178,"previous":"M16-GAP-00708","next":"M16-GAP-00710"},"M16-GAP-00710":{"line":709,"offset":121550,"length":179,"previous":"M16-GAP-00709","next":"M16-GAP-00711"},"M16-GAP-00711":{"line":710,"offset":121729,"length":166,"previous":"M16-GAP-00710","next":"M16-GAP-00712"},"M16-GAP-00712":{"line":711,"offset":121895,"length":171,"previous":"M16-GAP-00711","next":"M16-GAP-00713"},"M16-GAP-00713":{"line":712,"offset":122066,"length":161,"previous":"M16-GAP-00712","next":"M16-GAP-00714"},"M16-GAP-00714":{"line":713,"offset":122227,"length":168,"previous":"M16-GAP-00713","next":"M16-GAP-00715"},"M16-GAP-00715":{"line":714,"offset":122395,"length":173,"previous":"M16-GAP-00714","next":"M16-GAP-00716"},"M16-GAP-00716":{"line":715,"offset":122568,"length":169,"previous":"M16-GAP-00715","next":"M16-GAP-00717"},"M16-GAP-00717":{"line":716,"offset":122737,"length":175,"previous":"M16-GAP-00716","next":"M16-GAP-00718"},"M16-GAP-00718":{"line":717,"offset":122912,"length":170,"previous":"M16-GAP-00717","next":"M16-GAP-00719"},"M16-GAP-00719":{"line":718,"offset":123082,"length":171,"previous":"M16-GAP-00718","next":"M16-GAP-00720"},"M16-GAP-00720":{"line":719,"offset":123253,"length":173,"previous":"M16-GAP-00719","next":"M16-GAP-00721"},"M16-GAP-00721":{"line":720,"offset":123426,"length":172,"previous":"M16-GAP-00720","next":"M16-GAP-00722"},"M16-GAP-00722":{"line":721,"offset":123598,"length":167,"previous":"M16-GAP-00721","next":"M16-GAP-00723"},"M16-GAP-00723":{"line":722,"offset":123765,"length":172,"previous":"M16-GAP-00722","next":"M16-GAP-00724"},"M16-GAP-00724":{"line":723,"offset":123937,"length":175,"previous":"M16-GAP-00723","next":"M16-GAP-00725"},"M16-GAP-00725":{"line":724,"offset":124112,"length":176,"previous":"M16-GAP-00724","next":"M16-GAP-00726"},"M16-GAP-00726":{"line":725,"offset":124288,"length":168,"previous":"M16-GAP-00725","next":"M16-GAP-00727"},"M16-GAP-00727":{"line":726,"offset":124456,"length":161,"previous":"M16-GAP-00726","next":"M16-GAP-00728"},"M16-GAP-00728":{"line":727,"offset":124617,"length":175,"previous":"M16-GAP-00727","next":"M16-GAP-00729"},"M16-GAP-00729":{"line":728,"offset":124792,"length":172,"previous":"M16-GAP-00728","next":"M16-GAP-00730"},"M16-GAP-00730":{"line":729,"offset":124964,"length":170,"previous":"M16-GAP-00729","next":"M16-GAP-00731"},"M16-GAP-00731":{"line":730,"offset":125134,"length":172,"previous":"M16-GAP-00730","next":"M16-GAP-00732"},"M16-GAP-00732":{"line":731,"offset":125306,"length":167,"previous":"M16-GAP-00731","next":"M16-GAP-00733"},"M16-GAP-00733":{"line":732,"offset":125473,"length":168,"previous":"M16-GAP-00732","next":"M16-GAP-00734"},"M16-GAP-00734":{"line":733,"offset":125641,"length":163,"previous":"M16-GAP-00733","next":"M16-GAP-00735"},"M16-GAP-00735":{"line":734,"offset":125804,"length":162,"previous":"M16-GAP-00734","next":"M16-GAP-00736"},"M16-GAP-00736":{"line":735,"offset":125966,"length":173,"previous":"M16-GAP-00735","next":"M16-GAP-00737"},"M16-GAP-00737":{"line":736,"offset":126139,"length":166,"previous":"M16-GAP-00736","next":"M16-GAP-00738"},"M16-GAP-00738":{"line":737,"offset":126305,"length":163,"previous":"M16-GAP-00737","next":"M16-GAP-00739"},"M16-GAP-00739":{"line":738,"offset":126468,"length":172,"previous":"M16-GAP-00738","next":"M16-GAP-00740"},"M16-GAP-00740":{"line":739,"offset":126640,"length":170,"previous":"M16-GAP-00739","next":"M16-GAP-00741"},"M16-GAP-00741":{"line":740,"offset":126810,"length":176,"previous":"M16-GAP-00740","next":"M16-GAP-00742"},"M16-GAP-00742":{"line":741,"offset":126986,"length":167,"previous":"M16-GAP-00741","next":"M16-GAP-00743"},"M16-GAP-00743":{"line":742,"offset":127153,"length":167,"previous":"M16-GAP-00742","next":"M16-GAP-00744"},"M16-GAP-00744":{"line":743,"offset":127320,"length":170,"previous":"M16-GAP-00743","next":"M16-GAP-00745"},"M16-GAP-00745":{"line":744,"offset":127490,"length":170,"previous":"M16-GAP-00744","next":"M16-GAP-00746"},"M16-GAP-00746":{"line":745,"offset":127660,"length":175,"previous":"M16-GAP-00745","next":"M16-GAP-00747"},"M16-GAP-00747":{"line":746,"offset":127835,"length":169,"previous":"M16-GAP-00746","next":"M16-GAP-00748"},"M16-GAP-00748":{"line":747,"offset":128004,"length":173,"previous":"M16-GAP-00747","next":"M16-GAP-00749"},"M16-GAP-00749":{"line":748,"offset":128177,"length":168,"previous":"M16-GAP-00748","next":"M16-GAP-00750"},"M16-GAP-00750":{"line":749,"offset":128345,"length":170,"previous":"M16-GAP-00749","next":"M16-GAP-00751"},"M16-GAP-00751":{"line":750,"offset":128515,"length":168,"previous":"M16-GAP-00750","next":"M16-GAP-00752"},"M16-GAP-00752":{"line":751,"offset":128683,"length":162,"previous":"M16-GAP-00751","next":"M16-GAP-00753"},"M16-GAP-00753":{"line":752,"offset":128845,"length":163,"previous":"M16-GAP-00752","next":"M16-GAP-00754"},"M16-GAP-00754":{"line":753,"offset":129008,"length":161,"previous":"M16-GAP-00753","next":"M16-GAP-00755"},"M16-GAP-00755":{"line":754,"offset":129169,"length":174,"previous":"M16-GAP-00754","next":"M16-GAP-00756"},"M16-GAP-00756":{"line":755,"offset":129343,"length":173,"previous":"M16-GAP-00755","next":"M16-GAP-00757"},"M16-GAP-00757":{"line":756,"offset":129516,"length":168,"previous":"M16-GAP-00756","next":"M16-GAP-00758"},"M16-GAP-00758":{"line":757,"offset":129684,"length":165,"previous":"M16-GAP-00757","next":"M16-GAP-00759"},"M16-GAP-00759":{"line":758,"offset":129849,"length":167,"previous":"M16-GAP-00758","next":"M16-GAP-00760"},"M16-GAP-00760":{"line":759,"offset":130016,"length":170,"previous":"M16-GAP-00759","next":"M16-GAP-00761"},"M16-GAP-00761":{"line":760,"offset":130186,"length":184,"previous":"M16-GAP-00760","next":"M16-GAP-00762"},"M16-GAP-00762":{"line":761,"offset":130370,"length":193,"previous":"M16-GAP-00761","next":"M16-GAP-00763"},"M16-GAP-00763":{"line":762,"offset":130563,"length":177,"previous":"M16-GAP-00762","next":"M16-GAP-00764"},"M16-GAP-00764":{"line":763,"offset":130740,"length":173,"previous":"M16-GAP-00763","next":"M16-GAP-00765"},"M16-GAP-00765":{"line":764,"offset":130913,"length":176,"previous":"M16-GAP-00764","next":"M16-GAP-00766"},"M16-GAP-00766":{"line":765,"offset":131089,"length":183,"previous":"M16-GAP-00765","next":"M16-GAP-00767"},"M16-GAP-00767":{"line":766,"offset":131272,"length":169,"previous":"M16-GAP-00766","next":"M16-GAP-00768"},"M16-GAP-00768":{"line":767,"offset":131441,"length":177,"previous":"M16-GAP-00767","next":"M16-GAP-00769"},"M16-GAP-00769":{"line":768,"offset":131618,"length":171,"previous":"M16-GAP-00768","next":"M16-GAP-00770"},"M16-GAP-00770":{"line":769,"offset":131789,"length":181,"previous":"M16-GAP-00769","next":"M16-GAP-00771"},"M16-GAP-00771":{"line":770,"offset":131970,"length":177,"previous":"M16-GAP-00770","next":"M16-GAP-00772"},"M16-GAP-00772":{"line":771,"offset":132147,"length":173,"previous":"M16-GAP-00771","next":"M16-GAP-00773"},"M16-GAP-00773":{"line":772,"offset":132320,"length":174,"previous":"M16-GAP-00772","next":"M16-GAP-00774"},"M16-GAP-00774":{"line":773,"offset":132494,"length":179,"previous":"M16-GAP-00773","next":"M16-GAP-00775"},"M16-GAP-00775":{"line":774,"offset":132673,"length":174,"previous":"M16-GAP-00774","next":"M16-GAP-00776"},"M16-GAP-00776":{"line":775,"offset":132847,"length":176,"previous":"M16-GAP-00775","next":"M16-GAP-00777"},"M16-GAP-00777":{"line":776,"offset":133023,"length":172,"previous":"M16-GAP-00776","next":"M16-GAP-00778"},"M16-GAP-00778":{"line":777,"offset":133195,"length":177,"previous":"M16-GAP-00777","next":"M16-GAP-00779"},"M16-GAP-00779":{"line":778,"offset":133372,"length":169,"previous":"M16-GAP-00778","next":"M16-GAP-00780"},"M16-GAP-00780":{"line":779,"offset":133541,"length":186,"previous":"M16-GAP-00779","next":"M16-GAP-00781"},"M16-GAP-00781":{"line":780,"offset":133727,"length":180,"previous":"M16-GAP-00780","next":"M16-GAP-00782"},"M16-GAP-00782":{"line":781,"offset":133907,"length":183,"previous":"M16-GAP-00781","next":"M16-GAP-00783"},"M16-GAP-00783":{"line":782,"offset":134090,"length":176,"previous":"M16-GAP-00782","next":"M16-GAP-00784"},"M16-GAP-00784":{"line":783,"offset":134266,"length":185,"previous":"M16-GAP-00783","next":"M16-GAP-00785"},"M16-GAP-00785":{"line":784,"offset":134451,"length":175,"previous":"M16-GAP-00784","next":"M16-GAP-00786"},"M16-GAP-00786":{"line":785,"offset":134626,"length":179,"previous":"M16-GAP-00785","next":"M16-GAP-00787"},"M16-GAP-00787":{"line":786,"offset":134805,"length":177,"previous":"M16-GAP-00786","next":"M16-GAP-00788"},"M16-GAP-00788":{"line":787,"offset":134982,"length":174,"previous":"M16-GAP-00787","next":"M16-GAP-00789"},"M16-GAP-00789":{"line":788,"offset":135156,"length":180,"previous":"M16-GAP-00788","next":"M16-GAP-00790"},"M16-GAP-00790":{"line":789,"offset":135336,"length":187,"previous":"M16-GAP-00789","next":"M16-GAP-00791"},"M16-GAP-00791":{"line":790,"offset":135523,"length":180,"previous":"M16-GAP-00790","next":"M16-GAP-00792"},"M16-GAP-00792":{"line":791,"offset":135703,"length":186,"previous":"M16-GAP-00791","next":"M16-GAP-00793"},"M16-GAP-00793":{"line":792,"offset":135889,"length":183,"previous":"M16-GAP-00792","next":"M16-GAP-00794"},"M16-GAP-00794":{"line":793,"offset":136072,"length":175,"previous":"M16-GAP-00793","next":"M16-GAP-00795"},"M16-GAP-00795":{"line":794,"offset":136247,"length":178,"previous":"M16-GAP-00794","next":"M16-GAP-00796"},"M16-GAP-00796":{"line":795,"offset":136425,"length":179,"previous":"M16-GAP-00795","next":"M16-GAP-00797"},"M16-GAP-00797":{"line":796,"offset":136604,"length":179,"previous":"M16-GAP-00796","next":"M16-GAP-00798"},"M16-GAP-00798":{"line":797,"offset":136783,"length":182,"previous":"M16-GAP-00797","next":"M16-GAP-00799"},"M16-GAP-00799":{"line":798,"offset":136965,"length":183,"previous":"M16-GAP-00798","next":"M16-GAP-00800"},"M16-GAP-00800":{"line":799,"offset":137148,"length":176,"previous":"M16-GAP-00799","next":"M16-GAP-00801"},"M16-GAP-00801":{"line":800,"offset":137324,"length":175,"previous":"M16-GAP-00800","next":"M16-GAP-00802"},"M16-GAP-00802":{"line":801,"offset":137499,"length":177,"previous":"M16-GAP-00801","next":"M16-GAP-00803"},"M16-GAP-00803":{"line":802,"offset":137676,"length":177,"previous":"M16-GAP-00802","next":"M16-GAP-00804"},"M16-GAP-00804":{"line":803,"offset":137853,"length":188,"previous":"M16-GAP-00803","next":"M16-GAP-00805"},"M16-GAP-00805":{"line":804,"offset":138041,"length":178,"previous":"M16-GAP-00804","next":"M16-GAP-00806"},"M16-GAP-00806":{"line":805,"offset":138219,"length":181,"previous":"M16-GAP-00805","next":"M16-GAP-00807"},"M16-GAP-00807":{"line":806,"offset":138400,"length":182,"previous":"M16-GAP-00806","next":"M16-GAP-00808"},"M16-GAP-00808":{"line":807,"offset":138582,"length":189,"previous":"M16-GAP-00807","next":"M16-GAP-00809"},"M16-GAP-00809":{"line":808,"offset":138771,"length":185,"previous":"M16-GAP-00808","next":"M16-GAP-00810"},"M16-GAP-00810":{"line":809,"offset":138956,"length":180,"previous":"M16-GAP-00809","next":"M16-GAP-00811"},"M16-GAP-00811":{"line":810,"offset":139136,"length":180,"previous":"M16-GAP-00810","next":"M16-GAP-00812"},"M16-GAP-00812":{"line":811,"offset":139316,"length":184,"previous":"M16-GAP-00811","next":"M16-GAP-00813"},"M16-GAP-00813":{"line":812,"offset":139500,"length":178,"previous":"M16-GAP-00812","next":"M16-GAP-00814"},"M16-GAP-00814":{"line":813,"offset":139678,"length":172,"previous":"M16-GAP-00813","next":"M16-GAP-00815"},"M16-GAP-00815":{"line":814,"offset":139850,"length":181,"previous":"M16-GAP-00814","next":"M16-GAP-00816"},"M16-GAP-00816":{"line":815,"offset":140031,"length":170,"previous":"M16-GAP-00815","next":"M16-GAP-00817"},"M16-GAP-00817":{"line":816,"offset":140201,"length":168,"previous":"M16-GAP-00816","next":"M16-GAP-00818"},"M16-GAP-00818":{"line":817,"offset":140369,"length":178,"previous":"M16-GAP-00817","next":"M16-GAP-00819"},"M16-GAP-00819":{"line":818,"offset":140547,"length":178,"previous":"M16-GAP-00818","next":"M16-GAP-00820"},"M16-GAP-00820":{"line":819,"offset":140725,"length":181,"previous":"M16-GAP-00819","next":"M16-GAP-00821"},"M16-GAP-00821":{"line":820,"offset":140906,"length":180,"previous":"M16-GAP-00820","next":"M16-GAP-00822"},"M16-GAP-00822":{"line":821,"offset":141086,"length":179,"previous":"M16-GAP-00821","next":"M16-GAP-00823"},"M16-GAP-00823":{"line":822,"offset":141265,"length":183,"previous":"M16-GAP-00822","next":"M16-GAP-00824"},"M16-GAP-00824":{"line":823,"offset":141448,"length":188,"previous":"M16-GAP-00823","next":"M16-GAP-00825"},"M16-GAP-00825":{"line":824,"offset":141636,"length":183,"previous":"M16-GAP-00824","next":"M16-GAP-00826"},"M16-GAP-00826":{"line":825,"offset":141819,"length":172,"previous":"M16-GAP-00825","next":"M16-GAP-00827"},"M16-GAP-00827":{"line":826,"offset":141991,"length":174,"previous":"M16-GAP-00826","next":"M16-GAP-00828"},"M16-GAP-00828":{"line":827,"offset":142165,"length":174,"previous":"M16-GAP-00827","next":"M16-GAP-00829"},"M16-GAP-00829":{"line":828,"offset":142339,"length":177,"previous":"M16-GAP-00828","next":"M16-GAP-00830"},"M16-GAP-00830":{"line":829,"offset":142516,"length":182,"previous":"M16-GAP-00829","next":"M16-GAP-00831"},"M16-GAP-00831":{"line":830,"offset":142698,"length":175,"previous":"M16-GAP-00830","next":"M16-GAP-00832"},"M16-GAP-00832":{"line":831,"offset":142873,"length":181,"previous":"M16-GAP-00831","next":"M16-GAP-00833"},"M16-GAP-00833":{"line":832,"offset":143054,"length":186,"previous":"M16-GAP-00832","next":"M16-GAP-00834"},"M16-GAP-00834":{"line":833,"offset":143240,"length":176,"previous":"M16-GAP-00833","next":"M16-GAP-00835"},"M16-GAP-00835":{"line":834,"offset":143416,"length":176,"previous":"M16-GAP-00834","next":"M16-GAP-00836"},"M16-GAP-00836":{"line":835,"offset":143592,"length":176,"previous":"M16-GAP-00835","next":"M16-GAP-00837"},"M16-GAP-00837":{"line":836,"offset":143768,"length":178,"previous":"M16-GAP-00836","next":"M16-GAP-00838"},"M16-GAP-00838":{"line":837,"offset":143946,"length":176,"previous":"M16-GAP-00837","next":"M16-GAP-00839"},"M16-GAP-00839":{"line":838,"offset":144122,"length":178,"previous":"M16-GAP-00838","next":"M16-GAP-00840"},"M16-GAP-00840":{"line":839,"offset":144300,"length":179,"previous":"M16-GAP-00839","next":"M16-GAP-00841"},"M16-GAP-00841":{"line":840,"offset":144479,"length":173,"previous":"M16-GAP-00840","next":"M16-GAP-00842"},"M16-GAP-00842":{"line":841,"offset":144652,"length":179,"previous":"M16-GAP-00841","next":"M16-GAP-00843"},"M16-GAP-00843":{"line":842,"offset":144831,"length":184,"previous":"M16-GAP-00842","next":"M16-GAP-00844"},"M16-GAP-00844":{"line":843,"offset":145015,"length":180,"previous":"M16-GAP-00843","next":"M16-GAP-00845"},"M16-GAP-00845":{"line":844,"offset":145195,"length":185,"previous":"M16-GAP-00844","next":"M16-GAP-00846"},"M16-GAP-00846":{"line":845,"offset":145380,"length":179,"previous":"M16-GAP-00845","next":"M16-GAP-00847"},"M16-GAP-00847":{"line":846,"offset":145559,"length":180,"previous":"M16-GAP-00846","next":"M16-GAP-00848"},"M16-GAP-00848":{"line":847,"offset":145739,"length":177,"previous":"M16-GAP-00847","next":"M16-GAP-00849"},"M16-GAP-00849":{"line":848,"offset":145916,"length":183,"previous":"M16-GAP-00848","next":"M16-GAP-00850"},"M16-GAP-00850":{"line":849,"offset":146099,"length":180,"previous":"M16-GAP-00849","next":"M16-GAP-00851"},"M16-GAP-00851":{"line":850,"offset":146279,"length":180,"previous":"M16-GAP-00850","next":"M16-GAP-00852"},"M16-GAP-00852":{"line":851,"offset":146459,"length":184,"previous":"M16-GAP-00851","next":"M16-GAP-00853"},"M16-GAP-00853":{"line":852,"offset":146643,"length":186,"previous":"M16-GAP-00852","next":"M16-GAP-00854"},"M16-GAP-00854":{"line":853,"offset":146829,"length":188,"previous":"M16-GAP-00853","next":"M16-GAP-00855"},"M16-GAP-00855":{"line":854,"offset":147017,"length":179,"previous":"M16-GAP-00854","next":"M16-GAP-00856"},"M16-GAP-00856":{"line":855,"offset":147196,"length":177,"previous":"M16-GAP-00855","next":"M16-GAP-00857"},"M16-GAP-00857":{"line":856,"offset":147373,"length":184,"previous":"M16-GAP-00856","next":"M16-GAP-00858"},"M16-GAP-00858":{"line":857,"offset":147557,"length":189,"previous":"M16-GAP-00857","next":"M16-GAP-00859"},"M16-GAP-00859":{"line":858,"offset":147746,"length":190,"previous":"M16-GAP-00858","next":"M16-GAP-00860"},"M16-GAP-00860":{"line":859,"offset":147936,"length":180,"previous":"M16-GAP-00859","next":"M16-GAP-00861"},"M16-GAP-00861":{"line":860,"offset":148116,"length":178,"previous":"M16-GAP-00860","next":"M16-GAP-00862"},"M16-GAP-00862":{"line":861,"offset":148294,"length":177,"previous":"M16-GAP-00861","next":"M16-GAP-00863"},"M16-GAP-00863":{"line":862,"offset":148471,"length":181,"previous":"M16-GAP-00862","next":"M16-GAP-00864"},"M16-GAP-00864":{"line":863,"offset":148652,"length":188,"previous":"M16-GAP-00863","next":"M16-GAP-00865"},"M16-GAP-00865":{"line":864,"offset":148840,"length":188,"previous":"M16-GAP-00864","next":"M16-GAP-00866"},"M16-GAP-00866":{"line":865,"offset":149028,"length":176,"previous":"M16-GAP-00865","next":"M16-GAP-00867"},"M16-GAP-00867":{"line":866,"offset":149204,"length":181,"previous":"M16-GAP-00866","next":"M16-GAP-00868"},"M16-GAP-00868":{"line":867,"offset":149385,"length":176,"previous":"M16-GAP-00867","next":"M16-GAP-00869"},"M16-GAP-00869":{"line":868,"offset":149561,"length":184,"previous":"M16-GAP-00868","next":"M16-GAP-00870"},"M16-GAP-00870":{"line":869,"offset":149745,"length":197,"previous":"M16-GAP-00869","next":"M16-GAP-00871"},"M16-GAP-00871":{"line":870,"offset":149942,"length":181,"previous":"M16-GAP-00870","next":"M16-GAP-00872"},"M16-GAP-00872":{"line":871,"offset":150123,"length":184,"previous":"M16-GAP-00871","next":"M16-GAP-00873"},"M16-GAP-00873":{"line":872,"offset":150307,"length":184,"previous":"M16-GAP-00872","next":"M16-GAP-00874"},"M16-GAP-00874":{"line":873,"offset":150491,"length":181,"previous":"M16-GAP-00873","next":"M16-GAP-00875"},"M16-GAP-00875":{"line":874,"offset":150672,"length":187,"previous":"M16-GAP-00874","next":"M16-GAP-00876"},"M16-GAP-00876":{"line":875,"offset":150859,"length":191,"previous":"M16-GAP-00875","next":"M16-GAP-00877"},"M16-GAP-00877":{"line":876,"offset":151050,"length":184,"previous":"M16-GAP-00876","next":"M16-GAP-00878"},"M16-GAP-00878":{"line":877,"offset":151234,"length":182,"previous":"M16-GAP-00877","next":"M16-GAP-00879"},"M16-GAP-00879":{"line":878,"offset":151416,"length":184,"previous":"M16-GAP-00878","next":"M16-GAP-00880"},"M16-GAP-00880":{"line":879,"offset":151600,"length":178,"previous":"M16-GAP-00879","next":"M16-GAP-00881"},"M16-GAP-00881":{"line":880,"offset":151778,"length":178,"previous":"M16-GAP-00880","next":"M16-GAP-00882"},"M16-GAP-00882":{"line":881,"offset":151956,"length":188,"previous":"M16-GAP-00881","next":"M16-GAP-00883"},"M16-GAP-00883":{"line":882,"offset":152144,"length":182,"previous":"M16-GAP-00882","next":"M16-GAP-00884"},"M16-GAP-00884":{"line":883,"offset":152326,"length":172,"previous":"M16-GAP-00883","next":"M16-GAP-00885"},"M16-GAP-00885":{"line":884,"offset":152498,"length":169,"previous":"M16-GAP-00884","next":"M16-GAP-00886"},"M16-GAP-00886":{"line":885,"offset":152667,"length":176,"previous":"M16-GAP-00885","next":"M16-GAP-00887"},"M16-GAP-00887":{"line":886,"offset":152843,"length":174,"previous":"M16-GAP-00886","next":"M16-GAP-00888"},"M16-GAP-00888":{"line":887,"offset":153017,"length":171,"previous":"M16-GAP-00887","next":"M16-GAP-00889"},"M16-GAP-00889":{"line":888,"offset":153188,"length":172,"previous":"M16-GAP-00888","next":"M16-GAP-00890"},"M16-GAP-00890":{"line":889,"offset":153360,"length":178,"previous":"M16-GAP-00889","next":"M16-GAP-00891"},"M16-GAP-00891":{"line":890,"offset":153538,"length":173,"previous":"M16-GAP-00890","next":"M16-GAP-00892"},"M16-GAP-00892":{"line":891,"offset":153711,"length":174,"previous":"M16-GAP-00891","next":"M16-GAP-00893"},"M16-GAP-00893":{"line":892,"offset":153885,"length":170,"previous":"M16-GAP-00892","next":"M16-GAP-00894"},"M16-GAP-00894":{"line":893,"offset":154055,"length":168,"previous":"M16-GAP-00893","next":"M16-GAP-00895"},"M16-GAP-00895":{"line":894,"offset":154223,"length":161,"previous":"M16-GAP-00894","next":"M16-GAP-00896"},"M16-GAP-00896":{"line":895,"offset":154384,"length":178,"previous":"M16-GAP-00895","next":"M16-GAP-00897"},"M16-GAP-00897":{"line":896,"offset":154562,"length":163,"previous":"M16-GAP-00896","next":"M16-GAP-00898"},"M16-GAP-00898":{"line":897,"offset":154725,"length":175,"previous":"M16-GAP-00897","next":"M16-GAP-00899"},"M16-GAP-00899":{"line":898,"offset":154900,"length":160,"previous":"M16-GAP-00898","next":"M16-GAP-00900"},"M16-GAP-00900":{"line":899,"offset":155060,"length":161,"previous":"M16-GAP-00899","next":"M16-GAP-00901"},"M16-GAP-00901":{"line":900,"offset":155221,"length":168,"previous":"M16-GAP-00900","next":"M16-GAP-00902"},"M16-GAP-00902":{"line":901,"offset":155389,"length":161,"previous":"M16-GAP-00901","next":"M16-GAP-00903"},"M16-GAP-00903":{"line":902,"offset":155550,"length":170,"previous":"M16-GAP-00902","next":"M16-GAP-00904"},"M16-GAP-00904":{"line":903,"offset":155720,"length":169,"previous":"M16-GAP-00903","next":"M16-GAP-00905"},"M16-GAP-00905":{"line":904,"offset":155889,"length":172,"previous":"M16-GAP-00904","next":"M16-GAP-00906"},"M16-GAP-00906":{"line":905,"offset":156061,"length":163,"previous":"M16-GAP-00905","next":"M16-GAP-00907"},"M16-GAP-00907":{"line":906,"offset":156224,"length":175,"previous":"M16-GAP-00906","next":"M16-GAP-00908"},"M16-GAP-00908":{"line":907,"offset":156399,"length":170,"previous":"M16-GAP-00907","next":"M16-GAP-00909"},"M16-GAP-00909":{"line":908,"offset":156569,"length":164,"previous":"M16-GAP-00908","next":"M16-GAP-00910"},"M16-GAP-00910":{"line":909,"offset":156733,"length":163,"previous":"M16-GAP-00909","next":"M16-GAP-00911"},"M16-GAP-00911":{"line":910,"offset":156896,"length":174,"previous":"M16-GAP-00910","next":"M16-GAP-00912"},"M16-GAP-00912":{"line":911,"offset":157070,"length":163,"previous":"M16-GAP-00911","next":"M16-GAP-00913"},"M16-GAP-00913":{"line":912,"offset":157233,"length":168,"previous":"M16-GAP-00912","next":"M16-GAP-00914"},"M16-GAP-00914":{"line":913,"offset":157401,"length":161,"previous":"M16-GAP-00913","next":"M16-GAP-00915"},"M16-GAP-00915":{"line":914,"offset":157562,"length":174,"previous":"M16-GAP-00914","next":"M16-GAP-00916"},"M16-GAP-00916":{"line":915,"offset":157736,"length":164,"previous":"M16-GAP-00915","next":"M16-GAP-00917"},"M16-GAP-00917":{"line":916,"offset":157900,"length":170,"previous":"M16-GAP-00916","next":"M16-GAP-00918"},"M16-GAP-00918":{"line":917,"offset":158070,"length":165,"previous":"M16-GAP-00917","next":"M16-GAP-00919"},"M16-GAP-00919":{"line":918,"offset":158235,"length":166,"previous":"M16-GAP-00918","next":"M16-GAP-00920"},"M16-GAP-00920":{"line":919,"offset":158401,"length":168,"previous":"M16-GAP-00919","next":"M16-GAP-00921"},"M16-GAP-00921":{"line":920,"offset":158569,"length":163,"previous":"M16-GAP-00920","next":"M16-GAP-00922"},"M16-GAP-00922":{"line":921,"offset":158732,"length":165,"previous":"M16-GAP-00921","next":"M16-GAP-00923"},"M16-GAP-00923":{"line":922,"offset":158897,"length":175,"previous":"M16-GAP-00922","next":"M16-GAP-00924"},"M16-GAP-00924":{"line":923,"offset":159072,"length":175,"previous":"M16-GAP-00923","next":"M16-GAP-00925"},"M16-GAP-00925":{"line":924,"offset":159247,"length":166,"previous":"M16-GAP-00924","next":"M16-GAP-00926"},"M16-GAP-00926":{"line":925,"offset":159413,"length":165,"previous":"M16-GAP-00925","next":"M16-GAP-00927"},"M16-GAP-00927":{"line":926,"offset":159578,"length":170,"previous":"M16-GAP-00926","next":"M16-GAP-00928"},"M16-GAP-00928":{"line":927,"offset":159748,"length":166,"previous":"M16-GAP-00927","next":"M16-GAP-00929"},"M16-GAP-00929":{"line":928,"offset":159914,"length":173,"previous":"M16-GAP-00928","next":"M16-GAP-00930"},"M16-GAP-00930":{"line":929,"offset":160087,"length":169,"previous":"M16-GAP-00929","next":"M16-GAP-00931"},"M16-GAP-00931":{"line":930,"offset":160256,"length":170,"previous":"M16-GAP-00930","next":"M16-GAP-00932"},"M16-GAP-00932":{"line":931,"offset":160426,"length":172,"previous":"M16-GAP-00931","next":"M16-GAP-00933"},"M16-GAP-00933":{"line":932,"offset":160598,"length":166,"previous":"M16-GAP-00932","next":"M16-GAP-00934"},"M16-GAP-00934":{"line":933,"offset":160764,"length":167,"previous":"M16-GAP-00933","next":"M16-GAP-00935"},"M16-GAP-00935":{"line":934,"offset":160931,"length":167,"previous":"M16-GAP-00934","next":"M16-GAP-00936"},"M16-GAP-00936":{"line":935,"offset":161098,"length":168,"previous":"M16-GAP-00935","next":"M16-GAP-00937"},"M16-GAP-00937":{"line":936,"offset":161266,"length":167,"previous":"M16-GAP-00936","next":"M16-GAP-00938"},"M16-GAP-00938":{"line":937,"offset":161433,"length":169,"previous":"M16-GAP-00937","next":"M16-GAP-00939"},"M16-GAP-00939":{"line":938,"offset":161602,"length":169,"previous":"M16-GAP-00938","next":"M16-GAP-00940"},"M16-GAP-00940":{"line":939,"offset":161771,"length":178,"previous":"M16-GAP-00939","next":"M16-GAP-00941"},"M16-GAP-00941":{"line":940,"offset":161949,"length":166,"previous":"M16-GAP-00940","next":"M16-GAP-00942"},"M16-GAP-00942":{"line":941,"offset":162115,"length":166,"previous":"M16-GAP-00941","next":"M16-GAP-00943"},"M16-GAP-00943":{"line":942,"offset":162281,"length":167,"previous":"M16-GAP-00942","next":"M16-GAP-00944"},"M16-GAP-00944":{"line":943,"offset":162448,"length":163,"previous":"M16-GAP-00943","next":"M16-GAP-00945"},"M16-GAP-00945":{"line":944,"offset":162611,"length":171,"previous":"M16-GAP-00944","next":"M16-GAP-00946"},"M16-GAP-00946":{"line":945,"offset":162782,"length":169,"previous":"M16-GAP-00945","next":"M16-GAP-00947"},"M16-GAP-00947":{"line":946,"offset":162951,"length":170,"previous":"M16-GAP-00946","next":"M16-GAP-00948"},"M16-GAP-00948":{"line":947,"offset":163121,"length":172,"previous":"M16-GAP-00947","next":"M16-GAP-00949"},"M16-GAP-00949":{"line":948,"offset":163293,"length":170,"previous":"M16-GAP-00948","next":"M16-GAP-00950"},"M16-GAP-00950":{"line":949,"offset":163463,"length":172,"previous":"M16-GAP-00949","next":"M16-GAP-00951"},"M16-GAP-00951":{"line":950,"offset":163635,"length":175,"previous":"M16-GAP-00950","next":"M16-GAP-00952"},"M16-GAP-00952":{"line":951,"offset":163810,"length":161,"previous":"M16-GAP-00951","next":"M16-GAP-00953"},"M16-GAP-00953":{"line":952,"offset":163971,"length":169,"previous":"M16-GAP-00952","next":"M16-GAP-00954"},"M16-GAP-00954":{"line":953,"offset":164140,"length":164,"previous":"M16-GAP-00953","next":"M16-GAP-00955"},"M16-GAP-00955":{"line":954,"offset":164304,"length":167,"previous":"M16-GAP-00954","next":"M16-GAP-00956"},"M16-GAP-00956":{"line":955,"offset":164471,"length":174,"previous":"M16-GAP-00955","next":"M16-GAP-00957"},"M16-GAP-00957":{"line":956,"offset":164645,"length":162,"previous":"M16-GAP-00956","next":"M16-GAP-00958"},"M16-GAP-00958":{"line":957,"offset":164807,"length":164,"previous":"M16-GAP-00957","next":"M16-GAP-00959"},"M16-GAP-00959":{"line":958,"offset":164971,"length":164,"previous":"M16-GAP-00958","next":"M16-GAP-00960"},"M16-GAP-00960":{"line":959,"offset":165135,"length":168,"previous":"M16-GAP-00959","next":"M16-GAP-00961"},"M16-GAP-00961":{"line":960,"offset":165303,"length":168,"previous":"M16-GAP-00960","next":"M16-GAP-00962"},"M16-GAP-00962":{"line":961,"offset":165471,"length":174,"previous":"M16-GAP-00961","next":"M16-GAP-00963"},"M16-GAP-00963":{"line":962,"offset":165645,"length":174,"previous":"M16-GAP-00962","next":"M16-GAP-00964"},"M16-GAP-00964":{"line":963,"offset":165819,"length":180,"previous":"M16-GAP-00963","next":"M16-GAP-00965"},"M16-GAP-00965":{"line":964,"offset":165999,"length":166,"previous":"M16-GAP-00964","next":"M16-GAP-00966"},"M16-GAP-00966":{"line":965,"offset":166165,"length":172,"previous":"M16-GAP-00965","next":"M16-GAP-00967"},"M16-GAP-00967":{"line":966,"offset":166337,"length":168,"previous":"M16-GAP-00966","next":"M16-GAP-00968"},"M16-GAP-00968":{"line":967,"offset":166505,"length":169,"previous":"M16-GAP-00967","next":"M16-GAP-00969"},"M16-GAP-00969":{"line":968,"offset":166674,"length":162,"previous":"M16-GAP-00968","next":"M16-GAP-00970"},"M16-GAP-00970":{"line":969,"offset":166836,"length":165,"previous":"M16-GAP-00969","next":"M16-GAP-00971"},"M16-GAP-00971":{"line":970,"offset":167001,"length":170,"previous":"M16-GAP-00970","next":"M16-GAP-00972"},"M16-GAP-00972":{"line":971,"offset":167171,"length":176,"previous":"M16-GAP-00971","next":"M16-GAP-00973"},"M16-GAP-00973":{"line":972,"offset":167347,"length":171,"previous":"M16-GAP-00972","next":"M16-GAP-00974"},"M16-GAP-00974":{"line":973,"offset":167518,"length":171,"previous":"M16-GAP-00973","next":"M16-GAP-00975"},"M16-GAP-00975":{"line":974,"offset":167689,"length":169,"previous":"M16-GAP-00974","next":"M16-GAP-00976"},"M16-GAP-00976":{"line":975,"offset":167858,"length":166,"previous":"M16-GAP-00975","next":"M16-GAP-00977"},"M16-GAP-00977":{"line":976,"offset":168024,"length":165,"previous":"M16-GAP-00976","next":"M16-GAP-00978"},"M16-GAP-00978":{"line":977,"offset":168189,"length":168,"previous":"M16-GAP-00977","next":"M16-GAP-00979"},"M16-GAP-00979":{"line":978,"offset":168357,"length":169,"previous":"M16-GAP-00978","next":"M16-GAP-00980"},"M16-GAP-00980":{"line":979,"offset":168526,"length":159,"previous":"M16-GAP-00979","next":"M16-GAP-00981"},"M16-GAP-00981":{"line":980,"offset":168685,"length":179,"previous":"M16-GAP-00980","next":"M16-GAP-00982"},"M16-GAP-00982":{"line":981,"offset":168864,"length":168,"previous":"M16-GAP-00981","next":"M16-GAP-00983"},"M16-GAP-00983":{"line":982,"offset":169032,"length":166,"previous":"M16-GAP-00982","next":"M16-GAP-00984"},"M16-GAP-00984":{"line":983,"offset":169198,"length":169,"previous":"M16-GAP-00983","next":"M16-GAP-00985"},"M16-GAP-00985":{"line":984,"offset":169367,"length":176,"previous":"M16-GAP-00984","next":"M16-GAP-00986"},"M16-GAP-00986":{"line":985,"offset":169543,"length":176,"previous":"M16-GAP-00985","next":"M16-GAP-00987"},"M16-GAP-00987":{"line":986,"offset":169719,"length":162,"previous":"M16-GAP-00986","next":"M16-GAP-00988"},"M16-GAP-00988":{"line":987,"offset":169881,"length":166,"previous":"M16-GAP-00987","next":"M16-GAP-00989"},"M16-GAP-00989":{"line":988,"offset":170047,"length":166,"previous":"M16-GAP-00988","next":"M16-GAP-00990"},"M16-GAP-00990":{"line":989,"offset":170213,"length":169,"previous":"M16-GAP-00989","next":"M16-GAP-00991"},"M16-GAP-00991":{"line":990,"offset":170382,"length":168,"previous":"M16-GAP-00990","next":"M16-GAP-00992"},"M16-GAP-00992":{"line":991,"offset":170550,"length":167,"previous":"M16-GAP-00991","next":"M16-GAP-00993"},"M16-GAP-00993":{"line":992,"offset":170717,"length":169,"previous":"M16-GAP-00992","next":"M16-GAP-00994"},"M16-GAP-00994":{"line":993,"offset":170886,"length":174,"previous":"M16-GAP-00993","next":"M16-GAP-00995"},"M16-GAP-00995":{"line":994,"offset":171060,"length":167,"previous":"M16-GAP-00994","next":"M16-GAP-00996"},"M16-GAP-00996":{"line":995,"offset":171227,"length":171,"previous":"M16-GAP-00995","next":"M16-GAP-00997"},"M16-GAP-00997":{"line":996,"offset":171398,"length":179,"previous":"M16-GAP-00996","next":"M16-GAP-00998"},"M16-GAP-00998":{"line":997,"offset":171577,"length":172,"previous":"M16-GAP-00997","next":"M16-GAP-00999"},"M16-GAP-00999":{"line":998,"offset":171749,"length":171,"previous":"M16-GAP-00998","next":"M16-GAP-01000"},"M16-GAP-01000":{"line":999,"offset":171920,"length":167,"previous":"M16-GAP-00999","next":"M16-GAP-01001"},"M16-GAP-01001":{"line":1000,"offset":172087,"length":178,"previous":"M16-GAP-01000","next":"M16-GAP-01002"},"M16-GAP-01002":{"line":1001,"offset":172265,"length":172,"previous":"M16-GAP-01001","next":"M16-GAP-01003"},"M16-GAP-01003":{"line":1002,"offset":172437,"length":164,"previous":"M16-GAP-01002","next":"M16-GAP-01004"},"M16-GAP-01004":{"line":1003,"offset":172601,"length":163,"previous":"M16-GAP-01003","next":"M16-GAP-01005"},"M16-GAP-01005":{"line":1004,"offset":172764,"length":165,"previous":"M16-GAP-01004","next":"M16-GAP-01006"},"M16-GAP-01006":{"line":1005,"offset":172929,"length":173,"previous":"M16-GAP-01005","next":"M16-GAP-01007"},"M16-GAP-01007":{"line":1006,"offset":173102,"length":176,"previous":"M16-GAP-01006","next":"M16-GAP-01008"},"M16-GAP-01008":{"line":1007,"offset":173278,"length":171,"previous":"M16-GAP-01007","next":"M16-GAP-01009"},"M16-GAP-01009":{"line":1008,"offset":173449,"length":171,"previous":"M16-GAP-01008","next":"M16-GAP-01010"},"M16-GAP-01010":{"line":1009,"offset":173620,"length":173,"previous":"M16-GAP-01009","next":"M16-GAP-01011"},"M16-GAP-01011":{"line":1010,"offset":173793,"length":167,"previous":"M16-GAP-01010","next":"M16-GAP-01012"},"M16-GAP-01012":{"line":1011,"offset":173960,"length":180,"previous":"M16-GAP-01011","next":"M16-GAP-01013"},"M16-GAP-01013":{"line":1012,"offset":174140,"length":171,"previous":"M16-GAP-01012","next":"M16-GAP-01014"},"M16-GAP-01014":{"line":1013,"offset":174311,"length":169,"previous":"M16-GAP-01013","next":"M16-GAP-01015"},"M16-GAP-01015":{"line":1014,"offset":174480,"length":171,"previous":"M16-GAP-01014","next":"M16-GAP-01016"},"M16-GAP-01016":{"line":1015,"offset":174651,"length":169,"previous":"M16-GAP-01015","next":"M16-GAP-01017"},"M16-GAP-01017":{"line":1016,"offset":174820,"length":161,"previous":"M16-GAP-01016","next":"M16-GAP-01018"},"M16-GAP-01018":{"line":1017,"offset":174981,"length":162,"previous":"M16-GAP-01017","next":"M16-GAP-01019"},"M16-GAP-01019":{"line":1018,"offset":175143,"length":172,"previous":"M16-GAP-01018","next":"M16-GAP-01020"},"M16-GAP-01020":{"line":1019,"offset":175315,"length":173,"previous":"M16-GAP-01019","next":"M16-GAP-01021"},"M16-GAP-01021":{"line":1020,"offset":175488,"length":167,"previous":"M16-GAP-01020","next":"M16-GAP-01022"},"M16-GAP-01022":{"line":1021,"offset":175655,"length":170,"previous":"M16-GAP-01021","next":"M16-GAP-01023"},"M16-GAP-01023":{"line":1022,"offset":175825,"length":169,"previous":"M16-GAP-01022","next":"M16-GAP-01024"},"M16-GAP-01024":{"line":1023,"offset":175994,"length":167,"previous":"M16-GAP-01023","next":"M16-GAP-01025"},"M16-GAP-01025":{"line":1024,"offset":176161,"length":190,"previous":"M16-GAP-01024","next":"M16-GAP-01026"},"M16-GAP-01026":{"line":1025,"offset":176351,"length":192,"previous":"M16-GAP-01025","next":"M16-GAP-01027"},"M16-GAP-01027":{"line":1026,"offset":176543,"length":182,"previous":"M16-GAP-01026","next":"M16-GAP-01028"},"M16-GAP-01028":{"line":1027,"offset":176725,"length":177,"previous":"M16-GAP-01027","next":"M16-GAP-01029"},"M16-GAP-01029":{"line":1028,"offset":176902,"length":175,"previous":"M16-GAP-01028","next":"M16-GAP-01030"},"M16-GAP-01030":{"line":1029,"offset":177077,"length":177,"previous":"M16-GAP-01029","next":"M16-GAP-01031"},"M16-GAP-01031":{"line":1030,"offset":177254,"length":164,"previous":"M16-GAP-01030","next":"M16-GAP-01032"},"M16-GAP-01032":{"line":1031,"offset":177418,"length":162,"previous":"M16-GAP-01031","next":"M16-GAP-01033"},"M16-GAP-01033":{"line":1032,"offset":177580,"length":171,"previous":"M16-GAP-01032","next":"M16-GAP-01034"},"M16-GAP-01034":{"line":1033,"offset":177751,"length":168,"previous":"M16-GAP-01033","next":"M16-GAP-01035"},"M16-GAP-01035":{"line":1034,"offset":177919,"length":175,"previous":"M16-GAP-01034","next":"M16-GAP-01036"},"M16-GAP-01036":{"line":1035,"offset":178094,"length":170,"previous":"M16-GAP-01035","next":"M16-GAP-01037"},"M16-GAP-01037":{"line":1036,"offset":178264,"length":170,"previous":"M16-GAP-01036","next":"M16-GAP-01038"},"M16-GAP-01038":{"line":1037,"offset":178434,"length":172,"previous":"M16-GAP-01037","next":"M16-GAP-01039"},"M16-GAP-01039":{"line":1038,"offset":178606,"length":169,"previous":"M16-GAP-01038","next":"M16-GAP-01040"},"M16-GAP-01040":{"line":1039,"offset":178775,"length":170,"previous":"M16-GAP-01039","next":"M16-GAP-01041"},"M16-GAP-01041":{"line":1040,"offset":178945,"length":176,"previous":"M16-GAP-01040","next":"M16-GAP-01042"},"M16-GAP-01042":{"line":1041,"offset":179121,"length":165,"previous":"M16-GAP-01041","next":"M16-GAP-01043"},"M16-GAP-01043":{"line":1042,"offset":179286,"length":170,"previous":"M16-GAP-01042","next":"M16-GAP-01044"},"M16-GAP-01044":{"line":1043,"offset":179456,"length":169,"previous":"M16-GAP-01043","next":"M16-GAP-01045"},"M16-GAP-01045":{"line":1044,"offset":179625,"length":169,"previous":"M16-GAP-01044","next":"M16-GAP-01046"},"M16-GAP-01046":{"line":1045,"offset":179794,"length":167,"previous":"M16-GAP-01045","next":"M16-GAP-01047"},"M16-GAP-01047":{"line":1046,"offset":179961,"length":166,"previous":"M16-GAP-01046","next":"M16-GAP-01048"},"M16-GAP-01048":{"line":1047,"offset":180127,"length":171,"previous":"M16-GAP-01047","next":"M16-GAP-01049"},"M16-GAP-01049":{"line":1048,"offset":180298,"length":174,"previous":"M16-GAP-01048","next":"M16-GAP-01050"},"M16-GAP-01050":{"line":1049,"offset":180472,"length":171,"previous":"M16-GAP-01049","next":"M16-GAP-01051"},"M16-GAP-01051":{"line":1050,"offset":180643,"length":176,"previous":"M16-GAP-01050","next":"M16-GAP-01052"},"M16-GAP-01052":{"line":1051,"offset":180819,"length":175,"previous":"M16-GAP-01051","next":"M16-GAP-01053"},"M16-GAP-01053":{"line":1052,"offset":180994,"length":174,"previous":"M16-GAP-01052","next":"M16-GAP-01054"},"M16-GAP-01054":{"line":1053,"offset":181168,"length":175,"previous":"M16-GAP-01053","next":"M16-GAP-01055"},"M16-GAP-01055":{"line":1054,"offset":181343,"length":174,"previous":"M16-GAP-01054","next":"M16-GAP-01056"},"M16-GAP-01056":{"line":1055,"offset":181517,"length":172,"previous":"M16-GAP-01055","next":"M16-GAP-01057"},"M16-GAP-01057":{"line":1056,"offset":181689,"length":170,"previous":"M16-GAP-01056","next":"M16-GAP-01058"},"M16-GAP-01058":{"line":1057,"offset":181859,"length":175,"previous":"M16-GAP-01057","next":"M16-GAP-01059"},"M16-GAP-01059":{"line":1058,"offset":182034,"length":184,"previous":"M16-GAP-01058","next":"M16-GAP-01060"},"M16-GAP-01060":{"line":1059,"offset":182218,"length":170,"previous":"M16-GAP-01059","next":"M16-GAP-01061"},"M16-GAP-01061":{"line":1060,"offset":182388,"length":177,"previous":"M16-GAP-01060","next":"M16-GAP-01062"},"M16-GAP-01062":{"line":1061,"offset":182565,"length":175,"previous":"M16-GAP-01061","next":"M16-GAP-01063"},"M16-GAP-01063":{"line":1062,"offset":182740,"length":172,"previous":"M16-GAP-01062","next":"M16-GAP-01064"},"M16-GAP-01064":{"line":1063,"offset":182912,"length":175,"previous":"M16-GAP-01063","next":"M16-GAP-01065"},"M16-GAP-01065":{"line":1064,"offset":183087,"length":180,"previous":"M16-GAP-01064","next":"M16-GAP-01066"},"M16-GAP-01066":{"line":1065,"offset":183267,"length":172,"previous":"M16-GAP-01065","next":"M16-GAP-01067"},"M16-GAP-01067":{"line":1066,"offset":183439,"length":174,"previous":"M16-GAP-01066","next":"M16-GAP-01068"},"M16-GAP-01068":{"line":1067,"offset":183613,"length":160,"previous":"M16-GAP-01067","next":"M16-GAP-01069"},"M16-GAP-01069":{"line":1068,"offset":183773,"length":165,"previous":"M16-GAP-01068","next":"M16-GAP-01070"},"M16-GAP-01070":{"line":1069,"offset":183938,"length":166,"previous":"M16-GAP-01069","next":"M16-GAP-01071"},"M16-GAP-01071":{"line":1070,"offset":184104,"length":163,"previous":"M16-GAP-01070","next":"M16-GAP-01072"},"M16-GAP-01072":{"line":1071,"offset":184267,"length":168,"previous":"M16-GAP-01071","next":"M16-GAP-01073"},"M16-GAP-01073":{"line":1072,"offset":184435,"length":178,"previous":"M16-GAP-01072","next":"M16-GAP-01074"},"M16-GAP-01074":{"line":1073,"offset":184613,"length":160,"previous":"M16-GAP-01073","next":"M16-GAP-01075"},"M16-GAP-01075":{"line":1074,"offset":184773,"length":161,"previous":"M16-GAP-01074","next":"M16-GAP-01076"},"M16-GAP-01076":{"line":1075,"offset":184934,"length":165,"previous":"M16-GAP-01075","next":"M16-GAP-01077"},"M16-GAP-01077":{"line":1076,"offset":185099,"length":173,"previous":"M16-GAP-01076","next":"M16-GAP-01078"},"M16-GAP-01078":{"line":1077,"offset":185272,"length":169,"previous":"M16-GAP-01077","next":"M16-GAP-01079"},"M16-GAP-01079":{"line":1078,"offset":185441,"length":166,"previous":"M16-GAP-01078","next":"M16-GAP-01080"},"M16-GAP-01080":{"line":1079,"offset":185607,"length":167,"previous":"M16-GAP-01079","next":"M16-GAP-01081"},"M16-GAP-01081":{"line":1080,"offset":185774,"length":170,"previous":"M16-GAP-01080","next":"M16-GAP-01082"},"M16-GAP-01082":{"line":1081,"offset":185944,"length":163,"previous":"M16-GAP-01081","next":"M16-GAP-01083"},"M16-GAP-01083":{"line":1082,"offset":186107,"length":169,"previous":"M16-GAP-01082","next":"M16-GAP-01084"},"M16-GAP-01084":{"line":1083,"offset":186276,"length":175,"previous":"M16-GAP-01083","next":"M16-GAP-01085"},"M16-GAP-01085":{"line":1084,"offset":186451,"length":175,"previous":"M16-GAP-01084","next":"M16-GAP-01086"},"M16-GAP-01086":{"line":1085,"offset":186626,"length":165,"previous":"M16-GAP-01085","next":"M16-GAP-01087"},"M16-GAP-01087":{"line":1086,"offset":186791,"length":166,"previous":"M16-GAP-01086","next":"M16-GAP-01088"},"M16-GAP-01088":{"line":1087,"offset":186957,"length":161,"previous":"M16-GAP-01087","next":"M16-GAP-01089"},"M16-GAP-01089":{"line":1088,"offset":187118,"length":169,"previous":"M16-GAP-01088","next":"M16-GAP-01090"},"M16-GAP-01090":{"line":1089,"offset":187287,"length":177,"previous":"M16-GAP-01089","next":"M16-GAP-01091"},"M16-GAP-01091":{"line":1090,"offset":187464,"length":179,"previous":"M16-GAP-01090","next":"M16-GAP-01092"},"M16-GAP-01092":{"line":1091,"offset":187643,"length":169,"previous":"M16-GAP-01091","next":"M16-GAP-01093"},"M16-GAP-01093":{"line":1092,"offset":187812,"length":173,"previous":"M16-GAP-01092","next":"M16-GAP-01094"},"M16-GAP-01094":{"line":1093,"offset":187985,"length":179,"previous":"M16-GAP-01093","next":"M16-GAP-01095"},"M16-GAP-01095":{"line":1094,"offset":188164,"length":169,"previous":"M16-GAP-01094","next":"M16-GAP-01096"},"M16-GAP-01096":{"line":1095,"offset":188333,"length":160,"previous":"M16-GAP-01095","next":"M16-GAP-01097"},"M16-GAP-01097":{"line":1096,"offset":188493,"length":182,"previous":"M16-GAP-01096","next":"M16-GAP-01098"},"M16-GAP-01098":{"line":1097,"offset":188675,"length":184,"previous":"M16-GAP-01097","next":"M16-GAP-01099"},"M16-GAP-01099":{"line":1098,"offset":188859,"length":188,"previous":"M16-GAP-01098","next":"M16-GAP-01100"},"M16-GAP-01100":{"line":1099,"offset":189047,"length":180,"previous":"M16-GAP-01099","next":"M16-GAP-01101"},"M16-GAP-01101":{"line":1100,"offset":189227,"length":185,"previous":"M16-GAP-01100","next":"M16-GAP-01102"},"M16-GAP-01102":{"line":1101,"offset":189412,"length":181,"previous":"M16-GAP-01101","next":"M16-GAP-01103"},"M16-GAP-01103":{"line":1102,"offset":189593,"length":186,"previous":"M16-GAP-01102","next":"M16-GAP-01104"},"M16-GAP-01104":{"line":1103,"offset":189779,"length":185,"previous":"M16-GAP-01103","next":"M16-GAP-01105"},"M16-GAP-01105":{"line":1104,"offset":189964,"length":190,"previous":"M16-GAP-01104","next":"M16-GAP-01106"},"M16-GAP-01106":{"line":1105,"offset":190154,"length":176,"previous":"M16-GAP-01105","next":"M16-GAP-01107"},"M16-GAP-01107":{"line":1106,"offset":190330,"length":174,"previous":"M16-GAP-01106","next":"M16-GAP-01108"},"M16-GAP-01108":{"line":1107,"offset":190504,"length":174,"previous":"M16-GAP-01107","next":"M16-GAP-01109"},"M16-GAP-01109":{"line":1108,"offset":190678,"length":180,"previous":"M16-GAP-01108","next":"M16-GAP-01110"},"M16-GAP-01110":{"line":1109,"offset":190858,"length":178,"previous":"M16-GAP-01109","next":"M16-GAP-01111"},"M16-GAP-01111":{"line":1110,"offset":191036,"length":174,"previous":"M16-GAP-01110","next":"M16-GAP-01112"},"M16-GAP-01112":{"line":1111,"offset":191210,"length":180,"previous":"M16-GAP-01111","next":"M16-GAP-01113"},"M16-GAP-01113":{"line":1112,"offset":191390,"length":176,"previous":"M16-GAP-01112","next":"M16-GAP-01114"},"M16-GAP-01114":{"line":1113,"offset":191566,"length":175,"previous":"M16-GAP-01113","next":"M16-GAP-01115"},"M16-GAP-01115":{"line":1114,"offset":191741,"length":175,"previous":"M16-GAP-01114","next":"M16-GAP-01116"},"M16-GAP-01116":{"line":1115,"offset":191916,"length":179,"previous":"M16-GAP-01115","next":"M16-GAP-01117"},"M16-GAP-01117":{"line":1116,"offset":192095,"length":177,"previous":"M16-GAP-01116","next":"M16-GAP-01118"},"M16-GAP-01118":{"line":1117,"offset":192272,"length":170,"previous":"M16-GAP-01117","next":"M16-GAP-01119"},"M16-GAP-01119":{"line":1118,"offset":192442,"length":170,"previous":"M16-GAP-01118","next":"M16-GAP-01120"},"M16-GAP-01120":{"line":1119,"offset":192612,"length":180,"previous":"M16-GAP-01119","next":"M16-GAP-01121"},"M16-GAP-01121":{"line":1120,"offset":192792,"length":162,"previous":"M16-GAP-01120","next":"M16-GAP-01122"},"M16-GAP-01122":{"line":1121,"offset":192954,"length":159,"previous":"M16-GAP-01121","next":"M16-GAP-01123"},"M16-GAP-01123":{"line":1122,"offset":193113,"length":164,"previous":"M16-GAP-01122","next":"M16-GAP-01124"},"M16-GAP-01124":{"line":1123,"offset":193277,"length":169,"previous":"M16-GAP-01123","next":"M16-GAP-01125"},"M16-GAP-01125":{"line":1124,"offset":193446,"length":164,"previous":"M16-GAP-01124","next":"M16-GAP-01126"},"M16-GAP-01126":{"line":1125,"offset":193610,"length":161,"previous":"M16-GAP-01125","next":"M16-GAP-01127"},"M16-GAP-01127":{"line":1126,"offset":193771,"length":166,"previous":"M16-GAP-01126","next":"M16-GAP-01128"},"M16-GAP-01128":{"line":1127,"offset":193937,"length":167,"previous":"M16-GAP-01127","next":"M16-GAP-01129"},"M16-GAP-01129":{"line":1128,"offset":194104,"length":182,"previous":"M16-GAP-01128","next":"M16-GAP-01130"},"M16-GAP-01130":{"line":1129,"offset":194286,"length":175,"previous":"M16-GAP-01129","next":"M16-GAP-01131"},"M16-GAP-01131":{"line":1130,"offset":194461,"length":176,"previous":"M16-GAP-01130","next":"M16-GAP-01132"},"M16-GAP-01132":{"line":1131,"offset":194637,"length":178,"previous":"M16-GAP-01131","next":"M16-GAP-01133"},"M16-GAP-01133":{"line":1132,"offset":194815,"length":178,"previous":"M16-GAP-01132","next":"M16-GAP-01134"},"M16-GAP-01134":{"line":1133,"offset":194993,"length":176,"previous":"M16-GAP-01133","next":"M16-GAP-01135"},"M16-GAP-01135":{"line":1134,"offset":195169,"length":177,"previous":"M16-GAP-01134","next":"M16-GAP-01136"},"M16-GAP-01136":{"line":1135,"offset":195346,"length":167,"previous":"M16-GAP-01135","next":"M16-GAP-01137"},"M16-GAP-01137":{"line":1136,"offset":195513,"length":169,"previous":"M16-GAP-01136","next":"M16-GAP-01138"},"M16-GAP-01138":{"line":1137,"offset":195682,"length":174,"previous":"M16-GAP-01137","next":"M16-GAP-01139"},"M16-GAP-01139":{"line":1138,"offset":195856,"length":168,"previous":"M16-GAP-01138","next":"M16-GAP-01140"},"M16-GAP-01140":{"line":1139,"offset":196024,"length":169,"previous":"M16-GAP-01139","next":"M16-GAP-01141"},"M16-GAP-01141":{"line":1140,"offset":196193,"length":167,"previous":"M16-GAP-01140","next":"M16-GAP-01142"},"M16-GAP-01142":{"line":1141,"offset":196360,"length":167,"previous":"M16-GAP-01141","next":"M16-GAP-01143"},"M16-GAP-01143":{"line":1142,"offset":196527,"length":172,"previous":"M16-GAP-01142","next":"M16-GAP-01144"},"M16-GAP-01144":{"line":1143,"offset":196699,"length":175,"previous":"M16-GAP-01143","next":"M16-GAP-01145"},"M16-GAP-01145":{"line":1144,"offset":196874,"length":166,"previous":"M16-GAP-01144","next":"M16-GAP-01146"},"M16-GAP-01146":{"line":1145,"offset":197040,"length":172,"previous":"M16-GAP-01145","next":"M16-GAP-01147"},"M16-GAP-01147":{"line":1146,"offset":197212,"length":169,"previous":"M16-GAP-01146","next":"M16-GAP-01148"},"M16-GAP-01148":{"line":1147,"offset":197381,"length":170,"previous":"M16-GAP-01147","next":"M16-GAP-01149"},"M16-GAP-01149":{"line":1148,"offset":197551,"length":177,"previous":"M16-GAP-01148","next":"M16-GAP-01150"},"M16-GAP-01150":{"line":1149,"offset":197728,"length":172,"previous":"M16-GAP-01149","next":"M16-GAP-01151"},"M16-GAP-01151":{"line":1150,"offset":197900,"length":164,"previous":"M16-GAP-01150","next":"M16-GAP-01152"},"M16-GAP-01152":{"line":1151,"offset":198064,"length":178,"previous":"M16-GAP-01151","next":"M16-GAP-01153"},"M16-GAP-01153":{"line":1152,"offset":198242,"length":178,"previous":"M16-GAP-01152","next":"M16-GAP-01154"},"M16-GAP-01154":{"line":1153,"offset":198420,"length":178,"previous":"M16-GAP-01153","next":"M16-GAP-01155"},"M16-GAP-01155":{"line":1154,"offset":198598,"length":174,"previous":"M16-GAP-01154","next":"M16-GAP-01156"},"M16-GAP-01156":{"line":1155,"offset":198772,"length":176,"previous":"M16-GAP-01155","next":"M16-GAP-01157"},"M16-GAP-01157":{"line":1156,"offset":198948,"length":170,"previous":"M16-GAP-01156","next":"M16-GAP-01158"},"M16-GAP-01158":{"line":1157,"offset":199118,"length":164,"previous":"M16-GAP-01157","next":"M16-GAP-01159"},"M16-GAP-01159":{"line":1158,"offset":199282,"length":169,"previous":"M16-GAP-01158","next":"M16-GAP-01160"},"M16-GAP-01160":{"line":1159,"offset":199451,"length":179,"previous":"M16-GAP-01159","next":"M16-GAP-01161"},"M16-GAP-01161":{"line":1160,"offset":199630,"length":160,"previous":"M16-GAP-01160","next":"M16-GAP-01162"},"M16-GAP-01162":{"line":1161,"offset":199790,"length":161,"previous":"M16-GAP-01161","next":"M16-GAP-01163"},"M16-GAP-01163":{"line":1162,"offset":199951,"length":169,"previous":"M16-GAP-01162","next":"M16-GAP-01164"},"M16-GAP-01164":{"line":1163,"offset":200120,"length":165,"previous":"M16-GAP-01163","next":"M16-GAP-01165"},"M16-GAP-01165":{"line":1164,"offset":200285,"length":174,"previous":"M16-GAP-01164","next":"M16-GAP-01166"},"M16-GAP-01166":{"line":1165,"offset":200459,"length":166,"previous":"M16-GAP-01165","next":"M16-GAP-01167"},"M16-GAP-01167":{"line":1166,"offset":200625,"length":169,"previous":"M16-GAP-01166","next":"M16-GAP-01168"},"M16-GAP-01168":{"line":1167,"offset":200794,"length":177,"previous":"M16-GAP-01167","next":"M16-GAP-01169"},"M16-GAP-01169":{"line":1168,"offset":200971,"length":167,"previous":"M16-GAP-01168","next":"M16-GAP-01170"},"M16-GAP-01170":{"line":1169,"offset":201138,"length":170,"previous":"M16-GAP-01169","next":"M16-GAP-01171"},"M16-GAP-01171":{"line":1170,"offset":201308,"length":173,"previous":"M16-GAP-01170","next":"M16-GAP-01172"},"M16-GAP-01172":{"line":1171,"offset":201481,"length":167,"previous":"M16-GAP-01171","next":"M16-GAP-01173"},"M16-GAP-01173":{"line":1172,"offset":201648,"length":166,"previous":"M16-GAP-01172","next":"M16-GAP-01174"},"M16-GAP-01174":{"line":1173,"offset":201814,"length":168,"previous":"M16-GAP-01173","next":"M16-GAP-01175"},"M16-GAP-01175":{"line":1174,"offset":201982,"length":176,"previous":"M16-GAP-01174","next":"M16-GAP-01176"},"M16-GAP-01176":{"line":1175,"offset":202158,"length":178,"previous":"M16-GAP-01175","next":"M16-GAP-01177"},"M16-GAP-01177":{"line":1176,"offset":202336,"length":173,"previous":"M16-GAP-01176","next":"M16-GAP-01178"},"M16-GAP-01178":{"line":1177,"offset":202509,"length":171,"previous":"M16-GAP-01177","next":"M16-GAP-01179"},"M16-GAP-01179":{"line":1178,"offset":202680,"length":181,"previous":"M16-GAP-01178","next":"M16-GAP-01180"},"M16-GAP-01180":{"line":1179,"offset":202861,"length":165,"previous":"M16-GAP-01179","next":"M16-GAP-01181"},"M16-GAP-01181":{"line":1180,"offset":203026,"length":170,"previous":"M16-GAP-01180","next":"M16-GAP-01182"},"M16-GAP-01182":{"line":1181,"offset":203196,"length":173,"previous":"M16-GAP-01181","next":"M16-GAP-01183"},"M16-GAP-01183":{"line":1182,"offset":203369,"length":168,"previous":"M16-GAP-01182","next":"M16-GAP-01184"},"M16-GAP-01184":{"line":1183,"offset":203537,"length":169,"previous":"M16-GAP-01183","next":"M16-GAP-01185"},"M16-GAP-01185":{"line":1184,"offset":203706,"length":166,"previous":"M16-GAP-01184","next":"M16-GAP-01186"},"M16-GAP-01186":{"line":1185,"offset":203872,"length":159,"previous":"M16-GAP-01185","next":"M16-GAP-01187"},"M16-GAP-01187":{"line":1186,"offset":204031,"length":169,"previous":"M16-GAP-01186","next":"M16-GAP-01188"},"M16-GAP-01188":{"line":1187,"offset":204200,"length":166,"previous":"M16-GAP-01187","next":"M16-GAP-01189"},"M16-GAP-01189":{"line":1188,"offset":204366,"length":167,"previous":"M16-GAP-01188","next":"M16-GAP-01190"},"M16-GAP-01190":{"line":1189,"offset":204533,"length":161,"previous":"M16-GAP-01189","next":"M16-GAP-01191"},"M16-GAP-01191":{"line":1190,"offset":204694,"length":164,"previous":"M16-GAP-01190","next":"M16-GAP-01192"},"M16-GAP-01192":{"line":1191,"offset":204858,"length":176,"previous":"M16-GAP-01191","next":"M16-GAP-01193"},"M16-GAP-01193":{"line":1192,"offset":205034,"length":169,"previous":"M16-GAP-01192","next":"M16-GAP-01194"},"M16-GAP-01194":{"line":1193,"offset":205203,"length":168,"previous":"M16-GAP-01193","next":"M16-GAP-01195"},"M16-GAP-01195":{"line":1194,"offset":205371,"length":169,"previous":"M16-GAP-01194","next":"M16-GAP-01196"},"M16-GAP-01196":{"line":1195,"offset":205540,"length":170,"previous":"M16-GAP-01195","next":"M16-GAP-01197"},"M16-GAP-01197":{"line":1196,"offset":205710,"length":171,"previous":"M16-GAP-01196","next":"M16-GAP-01198"},"M16-GAP-01198":{"line":1197,"offset":205881,"length":163,"previous":"M16-GAP-01197","next":"M16-GAP-01199"},"M16-GAP-01199":{"line":1198,"offset":206044,"length":166,"previous":"M16-GAP-01198","next":"M16-GAP-01200"},"M16-GAP-01200":{"line":1199,"offset":206210,"length":164,"previous":"M16-GAP-01199","next":"M16-GAP-01201"},"M16-GAP-01201":{"line":1200,"offset":206374,"length":162,"previous":"M16-GAP-01200","next":"M16-GAP-01202"},"M16-GAP-01202":{"line":1201,"offset":206536,"length":166,"previous":"M16-GAP-01201","next":"M16-GAP-01203"},"M16-GAP-01203":{"line":1202,"offset":206702,"length":171,"previous":"M16-GAP-01202","next":"M16-GAP-01204"},"M16-GAP-01204":{"line":1203,"offset":206873,"length":165,"previous":"M16-GAP-01203","next":"M16-GAP-01205"},"M16-GAP-01205":{"line":1204,"offset":207038,"length":165,"previous":"M16-GAP-01204","next":"M16-GAP-01206"},"M16-GAP-01206":{"line":1205,"offset":207203,"length":171,"previous":"M16-GAP-01205","next":"M16-GAP-01207"},"M16-GAP-01207":{"line":1206,"offset":207374,"length":175,"previous":"M16-GAP-01206","next":"M16-GAP-01208"},"M16-GAP-01208":{"line":1207,"offset":207549,"length":159,"previous":"M16-GAP-01207","next":"M16-GAP-01209"},"M16-GAP-01209":{"line":1208,"offset":207708,"length":168,"previous":"M16-GAP-01208","next":"M16-GAP-01210"},"M16-GAP-01210":{"line":1209,"offset":207876,"length":160,"previous":"M16-GAP-01209","next":"M16-GAP-01211"},"M16-GAP-01211":{"line":1210,"offset":208036,"length":159,"previous":"M16-GAP-01210","next":"M16-GAP-01212"},"M16-GAP-01212":{"line":1211,"offset":208195,"length":165,"previous":"M16-GAP-01211","next":"M16-GAP-01213"},"M16-GAP-01213":{"line":1212,"offset":208360,"length":168,"previous":"M16-GAP-01212","next":"M16-GAP-01214"},"M16-GAP-01214":{"line":1213,"offset":208528,"length":169,"previous":"M16-GAP-01213","next":"M16-GAP-01215"},"M16-GAP-01215":{"line":1214,"offset":208697,"length":170,"previous":"M16-GAP-01214","next":"M16-GAP-01216"},"M16-GAP-01216":{"line":1215,"offset":208867,"length":169,"previous":"M16-GAP-01215","next":"M16-GAP-01217"},"M16-GAP-01217":{"line":1216,"offset":209036,"length":163,"previous":"M16-GAP-01216","next":"M16-GAP-01218"},"M16-GAP-01218":{"line":1217,"offset":209199,"length":165,"previous":"M16-GAP-01217","next":"M16-GAP-01219"},"M16-GAP-01219":{"line":1218,"offset":209364,"length":168,"previous":"M16-GAP-01218","next":"M16-GAP-01220"},"M16-GAP-01220":{"line":1219,"offset":209532,"length":171,"previous":"M16-GAP-01219","next":"M16-GAP-01221"},"M16-GAP-01221":{"line":1220,"offset":209703,"length":172,"previous":"M16-GAP-01220","next":"M16-GAP-01222"},"M16-GAP-01222":{"line":1221,"offset":209875,"length":170,"previous":"M16-GAP-01221","next":"M16-GAP-01223"},"M16-GAP-01223":{"line":1222,"offset":210045,"length":165,"previous":"M16-GAP-01222","next":"M16-GAP-01224"},"M16-GAP-01224":{"line":1223,"offset":210210,"length":171,"previous":"M16-GAP-01223","next":"M16-GAP-01225"},"M16-GAP-01225":{"line":1224,"offset":210381,"length":189,"previous":"M16-GAP-01224","next":"M16-GAP-01226"},"M16-GAP-01226":{"line":1225,"offset":210570,"length":165,"previous":"M16-GAP-01225","next":"M16-GAP-01227"},"M16-GAP-01227":{"line":1226,"offset":210735,"length":171,"previous":"M16-GAP-01226","next":"M16-GAP-01228"},"M16-GAP-01228":{"line":1227,"offset":210906,"length":176,"previous":"M16-GAP-01227","next":"M16-GAP-01229"},"M16-GAP-01229":{"line":1228,"offset":211082,"length":165,"previous":"M16-GAP-01228","next":"M16-GAP-01230"},"M16-GAP-01230":{"line":1229,"offset":211247,"length":171,"previous":"M16-GAP-01229","next":"M16-GAP-01231"},"M16-GAP-01231":{"line":1230,"offset":211418,"length":164,"previous":"M16-GAP-01230","next":"M16-GAP-01232"},"M16-GAP-01232":{"line":1231,"offset":211582,"length":168,"previous":"M16-GAP-01231","next":"M16-GAP-01233"},"M16-GAP-01233":{"line":1232,"offset":211750,"length":164,"previous":"M16-GAP-01232","next":"M16-GAP-01234"},"M16-GAP-01234":{"line":1233,"offset":211914,"length":166,"previous":"M16-GAP-01233","next":"M16-GAP-01235"},"M16-GAP-01235":{"line":1234,"offset":212080,"length":171,"previous":"M16-GAP-01234","next":"M16-GAP-01236"},"M16-GAP-01236":{"line":1235,"offset":212251,"length":167,"previous":"M16-GAP-01235","next":"M16-GAP-01237"},"M16-GAP-01237":{"line":1236,"offset":212418,"length":175,"previous":"M16-GAP-01236","next":"M16-GAP-01238"},"M16-GAP-01238":{"line":1237,"offset":212593,"length":172,"previous":"M16-GAP-01237","next":"M16-GAP-01239"},"M16-GAP-01239":{"line":1238,"offset":212765,"length":164,"previous":"M16-GAP-01238","next":"M16-GAP-01240"},"M16-GAP-01240":{"line":1239,"offset":212929,"length":162,"previous":"M16-GAP-01239","next":"M16-GAP-01241"},"M16-GAP-01241":{"line":1240,"offset":213091,"length":169,"previous":"M16-GAP-01240","next":"M16-GAP-01242"},"M16-GAP-01242":{"line":1241,"offset":213260,"length":170,"previous":"M16-GAP-01241","next":"M16-GAP-01243"},"M16-GAP-01243":{"line":1242,"offset":213430,"length":172,"previous":"M16-GAP-01242","next":"M16-GAP-01244"},"M16-GAP-01244":{"line":1243,"offset":213602,"length":170,"previous":"M16-GAP-01243","next":"M16-GAP-01245"},"M16-GAP-01245":{"line":1244,"offset":213772,"length":174,"previous":"M16-GAP-01244","next":"M16-GAP-01246"},"M16-GAP-01246":{"line":1245,"offset":213946,"length":175,"previous":"M16-GAP-01245","next":"M16-GAP-01247"},"M16-GAP-01247":{"line":1246,"offset":214121,"length":177,"previous":"M16-GAP-01246","next":"M16-GAP-01248"},"M16-GAP-01248":{"line":1247,"offset":214298,"length":182,"previous":"M16-GAP-01247","next":"M16-GAP-01249"},"M16-GAP-01249":{"line":1248,"offset":214480,"length":183,"previous":"M16-GAP-01248","next":"M16-GAP-01250"},"M16-GAP-01250":{"line":1249,"offset":214663,"length":185,"previous":"M16-GAP-01249","next":"M16-GAP-01251"},"M16-GAP-01251":{"line":1250,"offset":214848,"length":175,"previous":"M16-GAP-01250","next":"M16-GAP-01252"},"M16-GAP-01252":{"line":1251,"offset":215023,"length":170,"previous":"M16-GAP-01251","next":"M16-GAP-01253"},"M16-GAP-01253":{"line":1252,"offset":215193,"length":171,"previous":"M16-GAP-01252","next":"M16-GAP-01254"},"M16-GAP-01254":{"line":1253,"offset":215364,"length":178,"previous":"M16-GAP-01253","next":"M16-GAP-01255"},"M16-GAP-01255":{"line":1254,"offset":215542,"length":179,"previous":"M16-GAP-01254","next":"M16-GAP-01256"},"M16-GAP-01256":{"line":1255,"offset":215721,"length":181,"previous":"M16-GAP-01255","next":"M16-GAP-01257"},"M16-GAP-01257":{"line":1256,"offset":215902,"length":179,"previous":"M16-GAP-01256","next":"M16-GAP-01258"},"M16-GAP-01258":{"line":1257,"offset":216081,"length":180,"previous":"M16-GAP-01257","next":"M16-GAP-01259"},"M16-GAP-01259":{"line":1258,"offset":216261,"length":182,"previous":"M16-GAP-01258","next":"M16-GAP-01260"},"M16-GAP-01260":{"line":1259,"offset":216443,"length":180,"previous":"M16-GAP-01259","next":"M16-GAP-01261"},"M16-GAP-01261":{"line":1260,"offset":216623,"length":181,"previous":"M16-GAP-01260","next":"M16-GAP-01262"},"M16-GAP-01262":{"line":1261,"offset":216804,"length":183,"previous":"M16-GAP-01261","next":"M16-GAP-01263"},"M16-GAP-01263":{"line":1262,"offset":216987,"length":183,"previous":"M16-GAP-01262","next":"M16-GAP-01264"},"M16-GAP-01264":{"line":1263,"offset":217170,"length":179,"previous":"M16-GAP-01263","next":"M16-GAP-01265"},"M16-GAP-01265":{"line":1264,"offset":217349,"length":180,"previous":"M16-GAP-01264","next":"M16-GAP-01266"},"M16-GAP-01266":{"line":1265,"offset":217529,"length":182,"previous":"M16-GAP-01265","next":"M16-GAP-01267"},"M16-GAP-01267":{"line":1266,"offset":217711,"length":173,"previous":"M16-GAP-01266","next":"M16-GAP-01268"},"M16-GAP-01268":{"line":1267,"offset":217884,"length":177,"previous":"M16-GAP-01267","next":"M16-GAP-01269"},"M16-GAP-01269":{"line":1268,"offset":218061,"length":180,"previous":"M16-GAP-01268","next":"M16-GAP-01270"},"M16-GAP-01270":{"line":1269,"offset":218241,"length":173,"previous":"M16-GAP-01269","next":"M16-GAP-01271"},"M16-GAP-01271":{"line":1270,"offset":218414,"length":179,"previous":"M16-GAP-01270","next":"M16-GAP-01272"},"M16-GAP-01272":{"line":1271,"offset":218593,"length":162,"previous":"M16-GAP-01271","next":"M16-GAP-01273"},"M16-GAP-01273":{"line":1272,"offset":218755,"length":177,"previous":"M16-GAP-01272","next":"M16-GAP-01274"},"M16-GAP-01274":{"line":1273,"offset":218932,"length":172,"previous":"M16-GAP-01273","next":"M16-GAP-01275"},"M16-GAP-01275":{"line":1274,"offset":219104,"length":162,"previous":"M16-GAP-01274","next":"M16-GAP-01276"},"M16-GAP-01276":{"line":1275,"offset":219266,"length":179,"previous":"M16-GAP-01275","next":"M16-GAP-01277"},"M16-GAP-01277":{"line":1276,"offset":219445,"length":165,"previous":"M16-GAP-01276","next":"M16-GAP-01278"},"M16-GAP-01278":{"line":1277,"offset":219610,"length":197,"previous":"M16-GAP-01277","next":"M16-GAP-01279"},"M16-GAP-01279":{"line":1278,"offset":219807,"length":188,"previous":"M16-GAP-01278","next":"M16-GAP-01280"},"M16-GAP-01280":{"line":1279,"offset":219995,"length":170,"previous":"M16-GAP-01279","next":"M16-GAP-01281"},"M16-GAP-01281":{"line":1280,"offset":220165,"length":182,"previous":"M16-GAP-01280","next":"M16-GAP-01282"},"M16-GAP-01282":{"line":1281,"offset":220347,"length":177,"previous":"M16-GAP-01281","next":"M16-GAP-01283"},"M16-GAP-01283":{"line":1282,"offset":220524,"length":180,"previous":"M16-GAP-01282","next":"M16-GAP-01284"},"M16-GAP-01284":{"line":1283,"offset":220704,"length":181,"previous":"M16-GAP-01283","next":"M16-GAP-01285"},"M16-GAP-01285":{"line":1284,"offset":220885,"length":183,"previous":"M16-GAP-01284","next":"M16-GAP-01286"},"M16-GAP-01286":{"line":1285,"offset":221068,"length":187,"previous":"M16-GAP-01285","next":"M16-GAP-01287"},"M16-GAP-01287":{"line":1286,"offset":221255,"length":188,"previous":"M16-GAP-01286","next":"M16-GAP-01288"},"M16-GAP-01288":{"line":1287,"offset":221443,"length":190,"previous":"M16-GAP-01287","next":"M16-GAP-01289"},"M16-GAP-01289":{"line":1288,"offset":221633,"length":188,"previous":"M16-GAP-01288","next":"M16-GAP-01290"},"M16-GAP-01290":{"line":1289,"offset":221821,"length":189,"previous":"M16-GAP-01289","next":"M16-GAP-01291"},"M16-GAP-01291":{"line":1290,"offset":222010,"length":191,"previous":"M16-GAP-01290","next":"M16-GAP-01292"},"M16-GAP-01292":{"line":1291,"offset":222201,"length":178,"previous":"M16-GAP-01291","next":"M16-GAP-01293"},"M16-GAP-01293":{"line":1292,"offset":222379,"length":179,"previous":"M16-GAP-01292","next":"M16-GAP-01294"},"M16-GAP-01294":{"line":1293,"offset":222558,"length":181,"previous":"M16-GAP-01293","next":"M16-GAP-01295"},"M16-GAP-01295":{"line":1294,"offset":222739,"length":178,"previous":"M16-GAP-01294","next":"M16-GAP-01296"},"M16-GAP-01296":{"line":1295,"offset":222917,"length":179,"previous":"M16-GAP-01295","next":"M16-GAP-01297"},"M16-GAP-01297":{"line":1296,"offset":223096,"length":181,"previous":"M16-GAP-01296","next":"M16-GAP-01298"},"M16-GAP-01298":{"line":1297,"offset":223277,"length":176,"previous":"M16-GAP-01297","next":"M16-GAP-01299"},"M16-GAP-01299":{"line":1298,"offset":223453,"length":177,"previous":"M16-GAP-01298","next":"M16-GAP-01300"},"M16-GAP-01300":{"line":1299,"offset":223630,"length":179,"previous":"M16-GAP-01299","next":"M16-GAP-01301"},"M16-GAP-01301":{"line":1300,"offset":223809,"length":165,"previous":"M16-GAP-01300","next":"M16-GAP-01302"},"M16-GAP-01302":{"line":1301,"offset":223974,"length":205,"previous":"M16-GAP-01301","next":"M16-GAP-01303"},"M16-GAP-01303":{"line":1302,"offset":224179,"length":206,"previous":"M16-GAP-01302","next":"M16-GAP-01304"},"M16-GAP-01304":{"line":1303,"offset":224385,"length":208,"previous":"M16-GAP-01303","next":"M16-GAP-01305"},"M16-GAP-01305":{"line":1304,"offset":224593,"length":200,"previous":"M16-GAP-01304","next":"M16-GAP-01306"},"M16-GAP-01306":{"line":1305,"offset":224793,"length":201,"previous":"M16-GAP-01305","next":"M16-GAP-01307"},"M16-GAP-01307":{"line":1306,"offset":224994,"length":203,"previous":"M16-GAP-01306","next":"M16-GAP-01308"},"M16-GAP-01308":{"line":1307,"offset":225197,"length":199,"previous":"M16-GAP-01307","next":"M16-GAP-01309"},"M16-GAP-01309":{"line":1308,"offset":225396,"length":200,"previous":"M16-GAP-01308","next":"M16-GAP-01310"},"M16-GAP-01310":{"line":1309,"offset":225596,"length":202,"previous":"M16-GAP-01309","next":"M16-GAP-01311"},"M16-GAP-01311":{"line":1310,"offset":225798,"length":178,"previous":"M16-GAP-01310","next":"M16-GAP-01312"},"M16-GAP-01312":{"line":1311,"offset":225976,"length":179,"previous":"M16-GAP-01311","next":"M16-GAP-01313"},"M16-GAP-01313":{"line":1312,"offset":226155,"length":181,"previous":"M16-GAP-01312","next":"M16-GAP-01314"},"M16-GAP-01314":{"line":1313,"offset":226336,"length":186,"previous":"M16-GAP-01313","next":"M16-GAP-01315"},"M16-GAP-01315":{"line":1314,"offset":226522,"length":187,"previous":"M16-GAP-01314","next":"M16-GAP-01316"},"M16-GAP-01316":{"line":1315,"offset":226709,"length":189,"previous":"M16-GAP-01315","next":"M16-GAP-01317"},"M16-GAP-01317":{"line":1316,"offset":226898,"length":183,"previous":"M16-GAP-01316","next":"M16-GAP-01318"},"M16-GAP-01318":{"line":1317,"offset":227081,"length":166,"previous":"M16-GAP-01317","next":"M16-GAP-01319"},"M16-GAP-01319":{"line":1318,"offset":227247,"length":172,"previous":"M16-GAP-01318","next":"M16-GAP-01320"},"M16-GAP-01320":{"line":1319,"offset":227419,"length":168,"previous":"M16-GAP-01319","next":"M16-GAP-01321"},"M16-GAP-01321":{"line":1320,"offset":227587,"length":166,"previous":"M16-GAP-01320","next":"M16-GAP-01322"},"M16-GAP-01322":{"line":1321,"offset":227753,"length":170,"previous":"M16-GAP-01321","next":"M16-GAP-01323"},"M16-GAP-01323":{"line":1322,"offset":227923,"length":169,"previous":"M16-GAP-01322","next":"M16-GAP-01324"},"M16-GAP-01324":{"line":1323,"offset":228092,"length":174,"previous":"M16-GAP-01323","next":"M16-GAP-01325"},"M16-GAP-01325":{"line":1324,"offset":228266,"length":167,"previous":"M16-GAP-01324","next":"M16-GAP-01326"},"M16-GAP-01326":{"line":1325,"offset":228433,"length":177,"previous":"M16-GAP-01325","next":"M16-GAP-01327"},"M16-GAP-01327":{"line":1326,"offset":228610,"length":178,"previous":"M16-GAP-01326","next":"M16-GAP-01328"},"M16-GAP-01328":{"line":1327,"offset":228788,"length":180,"previous":"M16-GAP-01327","next":"M16-GAP-01329"},"M16-GAP-01329":{"line":1328,"offset":228968,"length":169,"previous":"M16-GAP-01328","next":"M16-GAP-01330"},"M16-GAP-01330":{"line":1329,"offset":229137,"length":180,"previous":"M16-GAP-01329","next":"M16-GAP-01331"},"M16-GAP-01331":{"line":1330,"offset":229317,"length":188,"previous":"M16-GAP-01330","next":"M16-GAP-01332"},"M16-GAP-01332":{"line":1331,"offset":229505,"length":174,"previous":"M16-GAP-01331","next":"M16-GAP-01333"},"M16-GAP-01333":{"line":1332,"offset":229679,"length":187,"previous":"M16-GAP-01332","next":"M16-GAP-01334"},"M16-GAP-01334":{"line":1333,"offset":229866,"length":177,"previous":"M16-GAP-01333","next":"M16-GAP-01335"},"M16-GAP-01335":{"line":1334,"offset":230043,"length":190,"previous":"M16-GAP-01334","next":"M16-GAP-01336"},"M16-GAP-01336":{"line":1335,"offset":230233,"length":160,"previous":"M16-GAP-01335","next":"M16-GAP-01337"},"M16-GAP-01337":{"line":1336,"offset":230393,"length":166,"previous":"M16-GAP-01336","next":"M16-GAP-01338"},"M16-GAP-01338":{"line":1337,"offset":230559,"length":166,"previous":"M16-GAP-01337","next":"M16-GAP-01339"},"M16-GAP-01339":{"line":1338,"offset":230725,"length":160,"previous":"M16-GAP-01338","next":"M16-GAP-01340"},"M16-GAP-01340":{"line":1339,"offset":230885,"length":180,"previous":"M16-GAP-01339","next":"M16-GAP-01341"},"M16-GAP-01341":{"line":1340,"offset":231065,"length":165,"previous":"M16-GAP-01340","next":"M16-GAP-01342"},"M16-GAP-01342":{"line":1341,"offset":231230,"length":167,"previous":"M16-GAP-01341","next":"M16-GAP-01343"},"M16-GAP-01343":{"line":1342,"offset":231397,"length":165,"previous":"M16-GAP-01342","next":"M16-GAP-01344"},"M16-GAP-01344":{"line":1343,"offset":231562,"length":168,"previous":"M16-GAP-01343","next":"M16-GAP-01345"},"M16-GAP-01345":{"line":1344,"offset":231730,"length":166,"previous":"M16-GAP-01344","next":"M16-GAP-01346"},"M16-GAP-01346":{"line":1345,"offset":231896,"length":173,"previous":"M16-GAP-01345","next":"M16-GAP-01347"},"M16-GAP-01347":{"line":1346,"offset":232069,"length":181,"previous":"M16-GAP-01346","next":"M16-GAP-01348"},"M16-GAP-01348":{"line":1347,"offset":232250,"length":167,"previous":"M16-GAP-01347","next":"M16-GAP-01349"},"M16-GAP-01349":{"line":1348,"offset":232417,"length":182,"previous":"M16-GAP-01348","next":"M16-GAP-01350"},"M16-GAP-01350":{"line":1349,"offset":232599,"length":191,"previous":"M16-GAP-01349","next":"M16-GAP-01351"},"M16-GAP-01351":{"line":1350,"offset":232790,"length":186,"previous":"M16-GAP-01350","next":"M16-GAP-01352"},"M16-GAP-01352":{"line":1351,"offset":232976,"length":184,"previous":"M16-GAP-01351","next":"M16-GAP-01353"},"M16-GAP-01353":{"line":1352,"offset":233160,"length":183,"previous":"M16-GAP-01352","next":"M16-GAP-01354"},"M16-GAP-01354":{"line":1353,"offset":233343,"length":169,"previous":"M16-GAP-01353","next":"M16-GAP-01355"},"M16-GAP-01355":{"line":1354,"offset":233512,"length":177,"previous":"M16-GAP-01354","next":"M16-GAP-01356"},"M16-GAP-01356":{"line":1355,"offset":233689,"length":171,"previous":"M16-GAP-01355","next":"M16-GAP-01357"},"M16-GAP-01357":{"line":1356,"offset":233860,"length":170,"previous":"M16-GAP-01356","next":"M16-GAP-01358"},"M16-GAP-01358":{"line":1357,"offset":234030,"length":166,"previous":"M16-GAP-01357","next":"M16-GAP-01359"},"M16-GAP-01359":{"line":1358,"offset":234196,"length":170,"previous":"M16-GAP-01358","next":"M16-GAP-01360"},"M16-GAP-01360":{"line":1359,"offset":234366,"length":171,"previous":"M16-GAP-01359","next":"M16-GAP-01361"},"M16-GAP-01361":{"line":1360,"offset":234537,"length":170,"previous":"M16-GAP-01360","next":"M16-GAP-01362"},"M16-GAP-01362":{"line":1361,"offset":234707,"length":176,"previous":"M16-GAP-01361","next":"M16-GAP-01363"},"M16-GAP-01363":{"line":1362,"offset":234883,"length":177,"previous":"M16-GAP-01362","next":"M16-GAP-01364"},"M16-GAP-01364":{"line":1363,"offset":235060,"length":179,"previous":"M16-GAP-01363","next":"M16-GAP-01365"},"M16-GAP-01365":{"line":1364,"offset":235239,"length":162,"previous":"M16-GAP-01364","next":"M16-GAP-01366"},"M16-GAP-01366":{"line":1365,"offset":235401,"length":187,"previous":"M16-GAP-01365","next":"M16-GAP-01367"},"M16-GAP-01367":{"line":1366,"offset":235588,"length":188,"previous":"M16-GAP-01366","next":"M16-GAP-01368"},"M16-GAP-01368":{"line":1367,"offset":235776,"length":190,"previous":"M16-GAP-01367","next":"M16-GAP-01369"},"M16-GAP-01369":{"line":1368,"offset":235966,"length":162,"previous":"M16-GAP-01368","next":"M16-GAP-01370"},"M16-GAP-01370":{"line":1369,"offset":236128,"length":166,"previous":"M16-GAP-01369","next":"M16-GAP-01371"},"M16-GAP-01371":{"line":1370,"offset":236294,"length":166,"previous":"M16-GAP-01370","next":"M16-GAP-01372"},"M16-GAP-01372":{"line":1371,"offset":236460,"length":169,"previous":"M16-GAP-01371","next":"M16-GAP-01373"},"M16-GAP-01373":{"line":1372,"offset":236629,"length":170,"previous":"M16-GAP-01372","next":"M16-GAP-01374"},"M16-GAP-01374":{"line":1373,"offset":236799,"length":168,"previous":"M16-GAP-01373","next":"M16-GAP-01375"},"M16-GAP-01375":{"line":1374,"offset":236967,"length":174,"previous":"M16-GAP-01374","next":"M16-GAP-01376"},"M16-GAP-01376":{"line":1375,"offset":237141,"length":174,"previous":"M16-GAP-01375","next":"M16-GAP-01377"},"M16-GAP-01377":{"line":1376,"offset":237315,"length":172,"previous":"M16-GAP-01376","next":"M16-GAP-01378"},"M16-GAP-01378":{"line":1377,"offset":237487,"length":177,"previous":"M16-GAP-01377","next":"M16-GAP-01379"},"M16-GAP-01379":{"line":1378,"offset":237664,"length":180,"previous":"M16-GAP-01378","next":"M16-GAP-01380"},"M16-GAP-01380":{"line":1379,"offset":237844,"length":181,"previous":"M16-GAP-01379","next":"M16-GAP-01381"},"M16-GAP-01381":{"line":1380,"offset":238025,"length":183,"previous":"M16-GAP-01380","next":"M16-GAP-01382"},"M16-GAP-01382":{"line":1381,"offset":238208,"length":176,"previous":"M16-GAP-01381","next":"M16-GAP-01383"},"M16-GAP-01383":{"line":1382,"offset":238384,"length":180,"previous":"M16-GAP-01382","next":"M16-GAP-01384"},"M16-GAP-01384":{"line":1383,"offset":238564,"length":181,"previous":"M16-GAP-01383","next":"M16-GAP-01385"},"M16-GAP-01385":{"line":1384,"offset":238745,"length":183,"previous":"M16-GAP-01384","next":"M16-GAP-01386"},"M16-GAP-01386":{"line":1385,"offset":238928,"length":168,"previous":"M16-GAP-01385","next":"M16-GAP-01387"},"M16-GAP-01387":{"line":1386,"offset":239096,"length":172,"previous":"M16-GAP-01386","next":"M16-GAP-01388"},"M16-GAP-01388":{"line":1387,"offset":239268,"length":172,"previous":"M16-GAP-01387","next":"M16-GAP-01389"},"M16-GAP-01389":{"line":1388,"offset":239440,"length":165,"previous":"M16-GAP-01388","next":"M16-GAP-01390"},"M16-GAP-01390":{"line":1389,"offset":239605,"length":173,"previous":"M16-GAP-01389","next":"M16-GAP-01391"},"M16-GAP-01391":{"line":1390,"offset":239778,"length":165,"previous":"M16-GAP-01390","next":"M16-GAP-01392"},"M16-GAP-01392":{"line":1391,"offset":239943,"length":182,"previous":"M16-GAP-01391","next":"M16-GAP-01393"},"M16-GAP-01393":{"line":1392,"offset":240125,"length":169,"previous":"M16-GAP-01392","next":"M16-GAP-01394"},"M16-GAP-01394":{"line":1393,"offset":240294,"length":172,"previous":"M16-GAP-01393","next":"M16-GAP-01395"},"M16-GAP-01395":{"line":1394,"offset":240466,"length":189,"previous":"M16-GAP-01394","next":"M16-GAP-01396"},"M16-GAP-01396":{"line":1395,"offset":240655,"length":172,"previous":"M16-GAP-01395","next":"M16-GAP-01397"},"M16-GAP-01397":{"line":1396,"offset":240827,"length":164,"previous":"M16-GAP-01396","next":"M16-GAP-01398"},"M16-GAP-01398":{"line":1397,"offset":240991,"length":169,"previous":"M16-GAP-01397","next":"M16-GAP-01399"},"M16-GAP-01399":{"line":1398,"offset":241160,"length":169,"previous":"M16-GAP-01398","next":"M16-GAP-01400"},"M16-GAP-01400":{"line":1399,"offset":241329,"length":175,"previous":"M16-GAP-01399","next":"M16-GAP-01401"},"M16-GAP-01401":{"line":1400,"offset":241504,"length":175,"previous":"M16-GAP-01400","next":"M16-GAP-01402"},"M16-GAP-01402":{"line":1401,"offset":241679,"length":161,"previous":"M16-GAP-01401","next":"M16-GAP-01403"},"M16-GAP-01403":{"line":1402,"offset":241840,"length":175,"previous":"M16-GAP-01402","next":"M16-GAP-01404"},"M16-GAP-01404":{"line":1403,"offset":242015,"length":167,"previous":"M16-GAP-01403","next":"M16-GAP-01405"},"M16-GAP-01405":{"line":1404,"offset":242182,"length":163,"previous":"M16-GAP-01404","next":"M16-GAP-01406"},"M16-GAP-01406":{"line":1405,"offset":242345,"length":183,"previous":"M16-GAP-01405","next":"M16-GAP-01407"},"M16-GAP-01407":{"line":1406,"offset":242528,"length":170,"previous":"M16-GAP-01406","next":"M16-GAP-01408"},"M16-GAP-01408":{"line":1407,"offset":242698,"length":182,"previous":"M16-GAP-01407","next":"M16-GAP-01409"},"M16-GAP-01409":{"line":1408,"offset":242880,"length":162,"previous":"M16-GAP-01408","next":"M16-GAP-01410"},"M16-GAP-01410":{"line":1409,"offset":243042,"length":168,"previous":"M16-GAP-01409","next":"M16-GAP-01411"},"M16-GAP-01411":{"line":1410,"offset":243210,"length":168,"previous":"M16-GAP-01410","next":"M16-GAP-01412"},"M16-GAP-01412":{"line":1411,"offset":243378,"length":178,"previous":"M16-GAP-01411","next":"M16-GAP-01413"},"M16-GAP-01413":{"line":1412,"offset":243556,"length":180,"previous":"M16-GAP-01412","next":"M16-GAP-01414"},"M16-GAP-01414":{"line":1413,"offset":243736,"length":172,"previous":"M16-GAP-01413","next":"M16-GAP-01415"},"M16-GAP-01415":{"line":1414,"offset":243908,"length":188,"previous":"M16-GAP-01414","next":"M16-GAP-01416"},"M16-GAP-01416":{"line":1415,"offset":244096,"length":181,"previous":"M16-GAP-01415","next":"M16-GAP-01417"},"M16-GAP-01417":{"line":1416,"offset":244277,"length":173,"previous":"M16-GAP-01416","next":"M16-GAP-01418"},"M16-GAP-01418":{"line":1417,"offset":244450,"length":183,"previous":"M16-GAP-01417","next":"M16-GAP-01419"},"M16-GAP-01419":{"line":1418,"offset":244633,"length":175,"previous":"M16-GAP-01418","next":"M16-GAP-01420"},"M16-GAP-01420":{"line":1419,"offset":244808,"length":175,"previous":"M16-GAP-01419","next":"M16-GAP-01421"},"M16-GAP-01421":{"line":1420,"offset":244983,"length":172,"previous":"M16-GAP-01420","next":"M16-GAP-01422"},"M16-GAP-01422":{"line":1421,"offset":245155,"length":185,"previous":"M16-GAP-01421","next":"M16-GAP-01423"},"M16-GAP-01423":{"line":1422,"offset":245340,"length":175,"previous":"M16-GAP-01422","next":"M16-GAP-01424"},"M16-GAP-01424":{"line":1423,"offset":245515,"length":174,"previous":"M16-GAP-01423","next":"M16-GAP-01425"},"M16-GAP-01425":{"line":1424,"offset":245689,"length":165,"previous":"M16-GAP-01424","next":"M16-GAP-01426"},"M16-GAP-01426":{"line":1425,"offset":245854,"length":179,"previous":"M16-GAP-01425","next":"M16-GAP-01427"},"M16-GAP-01427":{"line":1426,"offset":246033,"length":181,"previous":"M16-GAP-01426","next":"M16-GAP-01428"},"M16-GAP-01428":{"line":1427,"offset":246214,"length":179,"previous":"M16-GAP-01427","next":"M16-GAP-01429"},"M16-GAP-01429":{"line":1428,"offset":246393,"length":179,"previous":"M16-GAP-01428","next":"M16-GAP-01430"},"M16-GAP-01430":{"line":1429,"offset":246572,"length":175,"previous":"M16-GAP-01429","next":"M16-GAP-01431"},"M16-GAP-01431":{"line":1430,"offset":246747,"length":175,"previous":"M16-GAP-01430","next":"M16-GAP-01432"},"M16-GAP-01432":{"line":1431,"offset":246922,"length":171,"previous":"M16-GAP-01431","next":"M16-GAP-01433"},"M16-GAP-01433":{"line":1432,"offset":247093,"length":177,"previous":"M16-GAP-01432","next":"M16-GAP-01434"},"M16-GAP-01434":{"line":1433,"offset":247270,"length":164,"previous":"M16-GAP-01433","next":"M16-GAP-01435"},"M16-GAP-01435":{"line":1434,"offset":247434,"length":183,"previous":"M16-GAP-01434","next":"M16-GAP-01436"},"M16-GAP-01436":{"line":1435,"offset":247617,"length":177,"previous":"M16-GAP-01435","next":"M16-GAP-01437"},"M16-GAP-01437":{"line":1436,"offset":247794,"length":177,"previous":"M16-GAP-01436","next":"M16-GAP-01438"},"M16-GAP-01438":{"line":1437,"offset":247971,"length":167,"previous":"M16-GAP-01437","next":"M16-GAP-01439"},"M16-GAP-01439":{"line":1438,"offset":248138,"length":172,"previous":"M16-GAP-01438","next":"M16-GAP-01440"},"M16-GAP-01440":{"line":1439,"offset":248310,"length":179,"previous":"M16-GAP-01439","next":"M16-GAP-01441"},"M16-GAP-01441":{"line":1440,"offset":248489,"length":178,"previous":"M16-GAP-01440","next":"M16-GAP-01442"},"M16-GAP-01442":{"line":1441,"offset":248667,"length":173,"previous":"M16-GAP-01441","next":"M16-GAP-01443"},"M16-GAP-01443":{"line":1442,"offset":248840,"length":170,"previous":"M16-GAP-01442","next":"M16-GAP-01444"},"M16-GAP-01444":{"line":1443,"offset":249010,"length":167,"previous":"M16-GAP-01443","next":"M16-GAP-01445"},"M16-GAP-01445":{"line":1444,"offset":249177,"length":173,"previous":"M16-GAP-01444","next":"M16-GAP-01446"},"M16-GAP-01446":{"line":1445,"offset":249350,"length":173,"previous":"M16-GAP-01445","next":"M16-GAP-01447"},"M16-GAP-01447":{"line":1446,"offset":249523,"length":171,"previous":"M16-GAP-01446","next":"M16-GAP-01448"},"M16-GAP-01448":{"line":1447,"offset":249694,"length":175,"previous":"M16-GAP-01447","next":"M16-GAP-01449"},"M16-GAP-01449":{"line":1448,"offset":249869,"length":190,"previous":"M16-GAP-01448","next":"M16-GAP-01450"},"M16-GAP-01450":{"line":1449,"offset":250059,"length":188,"previous":"M16-GAP-01449","next":"M16-GAP-01451"},"M16-GAP-01451":{"line":1450,"offset":250247,"length":183,"previous":"M16-GAP-01450","next":"M16-GAP-01452"},"M16-GAP-01452":{"line":1451,"offset":250430,"length":190,"previous":"M16-GAP-01451","next":"M16-GAP-01453"},"M16-GAP-01453":{"line":1452,"offset":250620,"length":188,"previous":"M16-GAP-01452","next":"M16-GAP-01454"},"M16-GAP-01454":{"line":1453,"offset":250808,"length":195,"previous":"M16-GAP-01453","next":"M16-GAP-01455"},"M16-GAP-01455":{"line":1454,"offset":251003,"length":186,"previous":"M16-GAP-01454","next":"M16-GAP-01456"},"M16-GAP-01456":{"line":1455,"offset":251189,"length":175,"previous":"M16-GAP-01455","next":"M16-GAP-01457"},"M16-GAP-01457":{"line":1456,"offset":251364,"length":197,"previous":"M16-GAP-01456","next":"M16-GAP-01458"},"M16-GAP-01458":{"line":1457,"offset":251561,"length":198,"previous":"M16-GAP-01457","next":"M16-GAP-01459"},"M16-GAP-01459":{"line":1458,"offset":251759,"length":200,"previous":"M16-GAP-01458","next":"M16-GAP-01460"},"M16-GAP-01460":{"line":1459,"offset":251959,"length":197,"previous":"M16-GAP-01459","next":"M16-GAP-01461"},"M16-GAP-01461":{"line":1460,"offset":252156,"length":198,"previous":"M16-GAP-01460","next":"M16-GAP-01462"},"M16-GAP-01462":{"line":1461,"offset":252354,"length":200,"previous":"M16-GAP-01461","next":"M16-GAP-01463"},"M16-GAP-01463":{"line":1462,"offset":252554,"length":173,"previous":"M16-GAP-01462","next":"M16-GAP-01464"},"M16-GAP-01464":{"line":1463,"offset":252727,"length":179,"previous":"M16-GAP-01463","next":"M16-GAP-01465"},"M16-GAP-01465":{"line":1464,"offset":252906,"length":173,"previous":"M16-GAP-01464","next":"M16-GAP-01466"},"M16-GAP-01466":{"line":1465,"offset":253079,"length":171,"previous":"M16-GAP-01465","next":"M16-GAP-01467"},"M16-GAP-01467":{"line":1466,"offset":253250,"length":172,"previous":"M16-GAP-01466","next":"M16-GAP-01468"},"M16-GAP-01468":{"line":1467,"offset":253422,"length":172,"previous":"M16-GAP-01467","next":"M16-GAP-01469"},"M16-GAP-01469":{"line":1468,"offset":253594,"length":169,"previous":"M16-GAP-01468","next":"M16-GAP-01470"},"M16-GAP-01470":{"line":1469,"offset":253763,"length":171,"previous":"M16-GAP-01469","next":"M16-GAP-01471"},"M16-GAP-01471":{"line":1470,"offset":253934,"length":169,"previous":"M16-GAP-01470","next":"M16-GAP-01472"},"M16-GAP-01472":{"line":1471,"offset":254103,"length":168,"previous":"M16-GAP-01471","next":"M16-GAP-01473"},"M16-GAP-01473":{"line":1472,"offset":254271,"length":169,"previous":"M16-GAP-01472","next":"M16-GAP-01474"},"M16-GAP-01474":{"line":1473,"offset":254440,"length":185,"previous":"M16-GAP-01473","next":"M16-GAP-01475"},"M16-GAP-01475":{"line":1474,"offset":254625,"length":185,"previous":"M16-GAP-01474","next":"M16-GAP-01476"},"M16-GAP-01476":{"line":1475,"offset":254810,"length":183,"previous":"M16-GAP-01475","next":"M16-GAP-01477"},"M16-GAP-01477":{"line":1476,"offset":254993,"length":177,"previous":"M16-GAP-01476","next":"M16-GAP-01478"},"M16-GAP-01478":{"line":1477,"offset":255170,"length":162,"previous":"M16-GAP-01477","next":"M16-GAP-01479"},"M16-GAP-01479":{"line":1478,"offset":255332,"length":169,"previous":"M16-GAP-01478","next":"M16-GAP-01480"},"M16-GAP-01480":{"line":1479,"offset":255501,"length":166,"previous":"M16-GAP-01479","next":"M16-GAP-01481"},"M16-GAP-01481":{"line":1480,"offset":255667,"length":178,"previous":"M16-GAP-01480","next":"M16-GAP-01482"},"M16-GAP-01482":{"line":1481,"offset":255845,"length":181,"previous":"M16-GAP-01481","next":"M16-GAP-01483"},"M16-GAP-01483":{"line":1482,"offset":256026,"length":167,"previous":"M16-GAP-01482","next":"M16-GAP-01484"},"M16-GAP-01484":{"line":1483,"offset":256193,"length":194,"previous":"M16-GAP-01483","next":"M16-GAP-01485"},"M16-GAP-01485":{"line":1484,"offset":256387,"length":185,"previous":"M16-GAP-01484","next":"M16-GAP-01486"},"M16-GAP-01486":{"line":1485,"offset":256572,"length":187,"previous":"M16-GAP-01485","next":"M16-GAP-01487"},"M16-GAP-01487":{"line":1486,"offset":256759,"length":195,"previous":"M16-GAP-01486","next":"M16-GAP-01488"},"M16-GAP-01488":{"line":1487,"offset":256954,"length":186,"previous":"M16-GAP-01487","next":"M16-GAP-01489"},"M16-GAP-01489":{"line":1488,"offset":257140,"length":188,"previous":"M16-GAP-01488","next":"M16-GAP-01490"},"M16-GAP-01490":{"line":1489,"offset":257328,"length":194,"previous":"M16-GAP-01489","next":"M16-GAP-01491"},"M16-GAP-01491":{"line":1490,"offset":257522,"length":172,"previous":"M16-GAP-01490","next":"M16-GAP-01492"},"M16-GAP-01492":{"line":1491,"offset":257694,"length":179,"previous":"M16-GAP-01491","next":"M16-GAP-01493"},"M16-GAP-01493":{"line":1492,"offset":257873,"length":179,"previous":"M16-GAP-01492","next":"M16-GAP-01494"},"M16-GAP-01494":{"line":1493,"offset":258052,"length":178,"previous":"M16-GAP-01493","next":"M16-GAP-01495"},"M16-GAP-01495":{"line":1494,"offset":258230,"length":171,"previous":"M16-GAP-01494","next":"M16-GAP-01496"},"M16-GAP-01496":{"line":1495,"offset":258401,"length":176,"previous":"M16-GAP-01495","next":"M16-GAP-01497"},"M16-GAP-01497":{"line":1496,"offset":258577,"length":172,"previous":"M16-GAP-01496","next":"M16-GAP-01498"},"M16-GAP-01498":{"line":1497,"offset":258749,"length":173,"previous":"M16-GAP-01497","next":"M16-GAP-01499"},"M16-GAP-01499":{"line":1498,"offset":258922,"length":173,"previous":"M16-GAP-01498","next":"M16-GAP-01500"},"M16-GAP-01500":{"line":1499,"offset":259095,"length":174,"previous":"M16-GAP-01499","next":"M16-GAP-01501"},"M16-GAP-01501":{"line":1500,"offset":259269,"length":168,"previous":"M16-GAP-01500","next":"M16-GAP-01502"},"M16-GAP-01502":{"line":1501,"offset":259437,"length":179,"previous":"M16-GAP-01501","next":"M16-GAP-01503"},"M16-GAP-01503":{"line":1502,"offset":259616,"length":174,"previous":"M16-GAP-01502","next":"M16-GAP-01504"},"M16-GAP-01504":{"line":1503,"offset":259790,"length":175,"previous":"M16-GAP-01503","next":"M16-GAP-01505"},"M16-GAP-01505":{"line":1504,"offset":259965,"length":178,"previous":"M16-GAP-01504","next":"M16-GAP-01506"},"M16-GAP-01506":{"line":1505,"offset":260143,"length":176,"previous":"M16-GAP-01505","next":"M16-GAP-01507"},"M16-GAP-01507":{"line":1506,"offset":260319,"length":180,"previous":"M16-GAP-01506","next":"M16-GAP-01508"},"M16-GAP-01508":{"line":1507,"offset":260499,"length":176,"previous":"M16-GAP-01507","next":"M16-GAP-01509"},"M16-GAP-01509":{"line":1508,"offset":260675,"length":178,"previous":"M16-GAP-01508","next":"M16-GAP-01510"},"M16-GAP-01510":{"line":1509,"offset":260853,"length":182,"previous":"M16-GAP-01509","next":"M16-GAP-01511"},"M16-GAP-01511":{"line":1510,"offset":261035,"length":185,"previous":"M16-GAP-01510","next":"M16-GAP-01512"},"M16-GAP-01512":{"line":1511,"offset":261220,"length":178,"previous":"M16-GAP-01511","next":"M16-GAP-01513"},"M16-GAP-01513":{"line":1512,"offset":261398,"length":173,"previous":"M16-GAP-01512","next":"M16-GAP-01514"},"M16-GAP-01514":{"line":1513,"offset":261571,"length":170,"previous":"M16-GAP-01513","next":"M16-GAP-01515"},"M16-GAP-01515":{"line":1514,"offset":261741,"length":166,"previous":"M16-GAP-01514","next":"M16-GAP-01516"},"M16-GAP-01516":{"line":1515,"offset":261907,"length":179,"previous":"M16-GAP-01515","next":"M16-GAP-01517"},"M16-GAP-01517":{"line":1516,"offset":262086,"length":170,"previous":"M16-GAP-01516","next":"M16-GAP-01518"},"M16-GAP-01518":{"line":1517,"offset":262256,"length":181,"previous":"M16-GAP-01517","next":"M16-GAP-01519"},"M16-GAP-01519":{"line":1518,"offset":262437,"length":172,"previous":"M16-GAP-01518","next":"M16-GAP-01520"},"M16-GAP-01520":{"line":1519,"offset":262609,"length":184,"previous":"M16-GAP-01519","next":"M16-GAP-01521"},"M16-GAP-01521":{"line":1520,"offset":262793,"length":174,"previous":"M16-GAP-01520","next":"M16-GAP-01522"},"M16-GAP-01522":{"line":1521,"offset":262967,"length":171,"previous":"M16-GAP-01521","next":"M16-GAP-01523"},"M16-GAP-01523":{"line":1522,"offset":263138,"length":183,"previous":"M16-GAP-01522","next":"M16-GAP-01524"},"M16-GAP-01524":{"line":1523,"offset":263321,"length":176,"previous":"M16-GAP-01523","next":"M16-GAP-01525"},"M16-GAP-01525":{"line":1524,"offset":263497,"length":180,"previous":"M16-GAP-01524","next":"M16-GAP-01526"},"M16-GAP-01526":{"line":1525,"offset":263677,"length":174,"previous":"M16-GAP-01525","next":"M16-GAP-01527"},"M16-GAP-01527":{"line":1526,"offset":263851,"length":173,"previous":"M16-GAP-01526","next":"M16-GAP-01528"},"M16-GAP-01528":{"line":1527,"offset":264024,"length":177,"previous":"M16-GAP-01527","next":"M16-GAP-01529"},"M16-GAP-01529":{"line":1528,"offset":264201,"length":173,"previous":"M16-GAP-01528","next":"M16-GAP-01530"},"M16-GAP-01530":{"line":1529,"offset":264374,"length":184,"previous":"M16-GAP-01529","next":"M16-GAP-01531"},"M16-GAP-01531":{"line":1530,"offset":264558,"length":176,"previous":"M16-GAP-01530","next":"M16-GAP-01532"},"M16-GAP-01532":{"line":1531,"offset":264734,"length":177,"previous":"M16-GAP-01531","next":"M16-GAP-01533"},"M16-GAP-01533":{"line":1532,"offset":264911,"length":180,"previous":"M16-GAP-01532","next":"M16-GAP-01534"},"M16-GAP-01534":{"line":1533,"offset":265091,"length":180,"previous":"M16-GAP-01533","next":"M16-GAP-01535"},"M16-GAP-01535":{"line":1534,"offset":265271,"length":187,"previous":"M16-GAP-01534","next":"M16-GAP-01536"},"M16-GAP-01536":{"line":1535,"offset":265458,"length":181,"previous":"M16-GAP-01535","next":"M16-GAP-01537"},"M16-GAP-01537":{"line":1536,"offset":265639,"length":174,"previous":"M16-GAP-01536","next":"M16-GAP-01538"},"M16-GAP-01538":{"line":1537,"offset":265813,"length":176,"previous":"M16-GAP-01537","next":"M16-GAP-01539"},"M16-GAP-01539":{"line":1538,"offset":265989,"length":178,"previous":"M16-GAP-01538","next":"M16-GAP-01540"},"M16-GAP-01540":{"line":1539,"offset":266167,"length":168,"previous":"M16-GAP-01539","next":"M16-GAP-01541"},"M16-GAP-01541":{"line":1540,"offset":266335,"length":170,"previous":"M16-GAP-01540","next":"M16-GAP-01542"},"M16-GAP-01542":{"line":1541,"offset":266505,"length":168,"previous":"M16-GAP-01541","next":"M16-GAP-01543"},"M16-GAP-01543":{"line":1542,"offset":266673,"length":170,"previous":"M16-GAP-01542","next":"M16-GAP-01544"},"M16-GAP-01544":{"line":1543,"offset":266843,"length":178,"previous":"M16-GAP-01543","next":"M16-GAP-01545"},"M16-GAP-01545":{"line":1544,"offset":267021,"length":179,"previous":"M16-GAP-01544","next":"M16-GAP-01546"},"M16-GAP-01546":{"line":1545,"offset":267200,"length":168,"previous":"M16-GAP-01545","next":"M16-GAP-01547"},"M16-GAP-01547":{"line":1546,"offset":267368,"length":177,"previous":"M16-GAP-01546","next":"M16-GAP-01548"},"M16-GAP-01548":{"line":1547,"offset":267545,"length":180,"previous":"M16-GAP-01547","next":"M16-GAP-01549"},"M16-GAP-01549":{"line":1548,"offset":267725,"length":173,"previous":"M16-GAP-01548","next":"M16-GAP-01550"},"M16-GAP-01550":{"line":1549,"offset":267898,"length":173,"previous":"M16-GAP-01549","next":"M16-GAP-01551"},"M16-GAP-01551":{"line":1550,"offset":268071,"length":169,"previous":"M16-GAP-01550","next":"M16-GAP-01552"},"M16-GAP-01552":{"line":1551,"offset":268240,"length":170,"previous":"M16-GAP-01551","next":"M16-GAP-01553"},"M16-GAP-01553":{"line":1552,"offset":268410,"length":178,"previous":"M16-GAP-01552","next":"M16-GAP-01554"},"M16-GAP-01554":{"line":1553,"offset":268588,"length":179,"previous":"M16-GAP-01553","next":"M16-GAP-01555"},"M16-GAP-01555":{"line":1554,"offset":268767,"length":173,"previous":"M16-GAP-01554","next":"M16-GAP-01556"},"M16-GAP-01556":{"line":1555,"offset":268940,"length":175,"previous":"M16-GAP-01555","next":"M16-GAP-01557"},"M16-GAP-01557":{"line":1556,"offset":269115,"length":171,"previous":"M16-GAP-01556","next":"M16-GAP-01558"},"M16-GAP-01558":{"line":1557,"offset":269286,"length":167,"previous":"M16-GAP-01557","next":"M16-GAP-01559"},"M16-GAP-01559":{"line":1558,"offset":269453,"length":170,"previous":"M16-GAP-01558","next":"M16-GAP-01560"},"M16-GAP-01560":{"line":1559,"offset":269623,"length":169,"previous":"M16-GAP-01559","next":"M16-GAP-01561"},"M16-GAP-01561":{"line":1560,"offset":269792,"length":177,"previous":"M16-GAP-01560","next":"M16-GAP-01562"},"M16-GAP-01562":{"line":1561,"offset":269969,"length":180,"previous":"M16-GAP-01561","next":"M16-GAP-01563"},"M16-GAP-01563":{"line":1562,"offset":270149,"length":172,"previous":"M16-GAP-01562","next":"M16-GAP-01564"},"M16-GAP-01564":{"line":1563,"offset":270321,"length":169,"previous":"M16-GAP-01563","next":"M16-GAP-01565"},"M16-GAP-01565":{"line":1564,"offset":270490,"length":168,"previous":"M16-GAP-01564","next":"M16-GAP-01566"},"M16-GAP-01566":{"line":1565,"offset":270658,"length":172,"previous":"M16-GAP-01565","next":"M16-GAP-01567"},"M16-GAP-01567":{"line":1566,"offset":270830,"length":171,"previous":"M16-GAP-01566","next":"M16-GAP-01568"},"M16-GAP-01568":{"line":1567,"offset":271001,"length":172,"previous":"M16-GAP-01567","next":"M16-GAP-01569"},"M16-GAP-01569":{"line":1568,"offset":271173,"length":174,"previous":"M16-GAP-01568","next":"M16-GAP-01570"},"M16-GAP-01570":{"line":1569,"offset":271347,"length":169,"previous":"M16-GAP-01569","next":"M16-GAP-01571"},"M16-GAP-01571":{"line":1570,"offset":271516,"length":171,"previous":"M16-GAP-01570","next":"M16-GAP-01572"},"M16-GAP-01572":{"line":1571,"offset":271687,"length":171,"previous":"M16-GAP-01571","next":"M16-GAP-01573"},"M16-GAP-01573":{"line":1572,"offset":271858,"length":169,"previous":"M16-GAP-01572","next":"M16-GAP-01574"},"M16-GAP-01574":{"line":1573,"offset":272027,"length":172,"previous":"M16-GAP-01573","next":"M16-GAP-01575"},"M16-GAP-01575":{"line":1574,"offset":272199,"length":171,"previous":"M16-GAP-01574","next":"M16-GAP-01576"},"M16-GAP-01576":{"line":1575,"offset":272370,"length":180,"previous":"M16-GAP-01575","next":"M16-GAP-01577"},"M16-GAP-01577":{"line":1576,"offset":272550,"length":175,"previous":"M16-GAP-01576","next":"M16-GAP-01578"},"M16-GAP-01578":{"line":1577,"offset":272725,"length":168,"previous":"M16-GAP-01577","next":"M16-GAP-01579"},"M16-GAP-01579":{"line":1578,"offset":272893,"length":170,"previous":"M16-GAP-01578","next":"M16-GAP-01580"},"M16-GAP-01580":{"line":1579,"offset":273063,"length":179,"previous":"M16-GAP-01579","next":"M16-GAP-01581"},"M16-GAP-01581":{"line":1580,"offset":273242,"length":170,"previous":"M16-GAP-01580","next":"M16-GAP-01582"},"M16-GAP-01582":{"line":1581,"offset":273412,"length":171,"previous":"M16-GAP-01581","next":"M16-GAP-01583"},"M16-GAP-01583":{"line":1582,"offset":273583,"length":176,"previous":"M16-GAP-01582","next":"M16-GAP-01584"},"M16-GAP-01584":{"line":1583,"offset":273759,"length":180,"previous":"M16-GAP-01583","next":"M16-GAP-01585"},"M16-GAP-01585":{"line":1584,"offset":273939,"length":174,"previous":"M16-GAP-01584","next":"M16-GAP-01586"},"M16-GAP-01586":{"line":1585,"offset":274113,"length":173,"previous":"M16-GAP-01585","next":"M16-GAP-01587"},"M16-GAP-01587":{"line":1586,"offset":274286,"length":171,"previous":"M16-GAP-01586","next":"M16-GAP-01588"},"M16-GAP-01588":{"line":1587,"offset":274457,"length":182,"previous":"M16-GAP-01587","next":"M16-GAP-01589"},"M16-GAP-01589":{"line":1588,"offset":274639,"length":173,"previous":"M16-GAP-01588","next":"M16-GAP-01590"},"M16-GAP-01590":{"line":1589,"offset":274812,"length":172,"previous":"M16-GAP-01589","next":"M16-GAP-01591"},"M16-GAP-01591":{"line":1590,"offset":274984,"length":172,"previous":"M16-GAP-01590","next":"M16-GAP-01592"},"M16-GAP-01592":{"line":1591,"offset":275156,"length":178,"previous":"M16-GAP-01591","next":"M16-GAP-01593"},"M16-GAP-01593":{"line":1592,"offset":275334,"length":174,"previous":"M16-GAP-01592","next":"M16-GAP-01594"},"M16-GAP-01594":{"line":1593,"offset":275508,"length":172,"previous":"M16-GAP-01593","next":"M16-GAP-01595"},"M16-GAP-01595":{"line":1594,"offset":275680,"length":174,"previous":"M16-GAP-01594","next":"M16-GAP-01596"},"M16-GAP-01596":{"line":1595,"offset":275854,"length":174,"previous":"M16-GAP-01595","next":"M16-GAP-01597"},"M16-GAP-01597":{"line":1596,"offset":276028,"length":176,"previous":"M16-GAP-01596","next":"M16-GAP-01598"},"M16-GAP-01598":{"line":1597,"offset":276204,"length":185,"previous":"M16-GAP-01597","next":"M16-GAP-01599"},"M16-GAP-01599":{"line":1598,"offset":276389,"length":199,"previous":"M16-GAP-01598","next":"M16-GAP-01600"},"M16-GAP-01600":{"line":1599,"offset":276588,"length":187,"previous":"M16-GAP-01599","next":"M16-GAP-01601"},"M16-GAP-01601":{"line":1600,"offset":276775,"length":178,"previous":"M16-GAP-01600","next":"M16-GAP-01602"},"M16-GAP-01602":{"line":1601,"offset":276953,"length":179,"previous":"M16-GAP-01601","next":"M16-GAP-01603"},"M16-GAP-01603":{"line":1602,"offset":277132,"length":177,"previous":"M16-GAP-01602","next":"M16-GAP-01604"},"M16-GAP-01604":{"line":1603,"offset":277309,"length":172,"previous":"M16-GAP-01603","next":"M16-GAP-01605"},"M16-GAP-01605":{"line":1604,"offset":277481,"length":169,"previous":"M16-GAP-01604","next":"M16-GAP-01606"},"M16-GAP-01606":{"line":1605,"offset":277650,"length":173,"previous":"M16-GAP-01605","next":"M16-GAP-01607"},"M16-GAP-01607":{"line":1606,"offset":277823,"length":176,"previous":"M16-GAP-01606","next":"M16-GAP-01608"},"M16-GAP-01608":{"line":1607,"offset":277999,"length":166,"previous":"M16-GAP-01607","next":"M16-GAP-01609"},"M16-GAP-01609":{"line":1608,"offset":278165,"length":169,"previous":"M16-GAP-01608","next":"M16-GAP-01610"},"M16-GAP-01610":{"line":1609,"offset":278334,"length":167,"previous":"M16-GAP-01609","next":"M16-GAP-01611"},"M16-GAP-01611":{"line":1610,"offset":278501,"length":171,"previous":"M16-GAP-01610","next":"M16-GAP-01612"},"M16-GAP-01612":{"line":1611,"offset":278672,"length":173,"previous":"M16-GAP-01611","next":"M16-GAP-01613"},"M16-GAP-01613":{"line":1612,"offset":278845,"length":179,"previous":"M16-GAP-01612","next":"M16-GAP-01614"},"M16-GAP-01614":{"line":1613,"offset":279024,"length":176,"previous":"M16-GAP-01613","next":"M16-GAP-01615"},"M16-GAP-01615":{"line":1614,"offset":279200,"length":178,"previous":"M16-GAP-01614","next":"M16-GAP-01616"},"M16-GAP-01616":{"line":1615,"offset":279378,"length":169,"previous":"M16-GAP-01615","next":"M16-GAP-01617"},"M16-GAP-01617":{"line":1616,"offset":279547,"length":171,"previous":"M16-GAP-01616","next":"M16-GAP-01618"},"M16-GAP-01618":{"line":1617,"offset":279718,"length":174,"previous":"M16-GAP-01617","next":"M16-GAP-01619"},"M16-GAP-01619":{"line":1618,"offset":279892,"length":177,"previous":"M16-GAP-01618","next":"M16-GAP-01620"},"M16-GAP-01620":{"line":1619,"offset":280069,"length":181,"previous":"M16-GAP-01619","next":"M16-GAP-01621"},"M16-GAP-01621":{"line":1620,"offset":280250,"length":176,"previous":"M16-GAP-01620","next":"M16-GAP-01622"},"M16-GAP-01622":{"line":1621,"offset":280426,"length":175,"previous":"M16-GAP-01621","next":"M16-GAP-01623"},"M16-GAP-01623":{"line":1622,"offset":280601,"length":187,"previous":"M16-GAP-01622","next":"M16-GAP-01624"},"M16-GAP-01624":{"line":1623,"offset":280788,"length":179,"previous":"M16-GAP-01623","next":"M16-GAP-01625"},"M16-GAP-01625":{"line":1624,"offset":280967,"length":177,"previous":"M16-GAP-01624","next":"M16-GAP-01626"},"M16-GAP-01626":{"line":1625,"offset":281144,"length":177,"previous":"M16-GAP-01625","next":"M16-GAP-01627"},"M16-GAP-01627":{"line":1626,"offset":281321,"length":182,"previous":"M16-GAP-01626","next":"M16-GAP-01628"},"M16-GAP-01628":{"line":1627,"offset":281503,"length":175,"previous":"M16-GAP-01627","next":"M16-GAP-01629"},"M16-GAP-01629":{"line":1628,"offset":281678,"length":177,"previous":"M16-GAP-01628","next":"M16-GAP-01630"},"M16-GAP-01630":{"line":1629,"offset":281855,"length":175,"previous":"M16-GAP-01629","next":"M16-GAP-01631"},"M16-GAP-01631":{"line":1630,"offset":282030,"length":180,"previous":"M16-GAP-01630","next":"M16-GAP-01632"},"M16-GAP-01632":{"line":1631,"offset":282210,"length":184,"previous":"M16-GAP-01631","next":"M16-GAP-01633"},"M16-GAP-01633":{"line":1632,"offset":282394,"length":179,"previous":"M16-GAP-01632","next":"M16-GAP-01634"},"M16-GAP-01634":{"line":1633,"offset":282573,"length":177,"previous":"M16-GAP-01633","next":"M16-GAP-01635"},"M16-GAP-01635":{"line":1634,"offset":282750,"length":182,"previous":"M16-GAP-01634","next":"M16-GAP-01636"},"M16-GAP-01636":{"line":1635,"offset":282932,"length":177,"previous":"M16-GAP-01635","next":"M16-GAP-01637"},"M16-GAP-01637":{"line":1636,"offset":283109,"length":181,"previous":"M16-GAP-01636","next":"M16-GAP-01638"},"M16-GAP-01638":{"line":1637,"offset":283290,"length":177,"previous":"M16-GAP-01637","next":"M16-GAP-01639"},"M16-GAP-01639":{"line":1638,"offset":283467,"length":175,"previous":"M16-GAP-01638","next":"M16-GAP-01640"},"M16-GAP-01640":{"line":1639,"offset":283642,"length":175,"previous":"M16-GAP-01639","next":"M16-GAP-01641"},"M16-GAP-01641":{"line":1640,"offset":283817,"length":176,"previous":"M16-GAP-01640","next":"M16-GAP-01642"},"M16-GAP-01642":{"line":1641,"offset":283993,"length":178,"previous":"M16-GAP-01641","next":"M16-GAP-01643"},"M16-GAP-01643":{"line":1642,"offset":284171,"length":195,"previous":"M16-GAP-01642","next":"M16-GAP-01644"},"M16-GAP-01644":{"line":1643,"offset":284366,"length":177,"previous":"M16-GAP-01643","next":"M16-GAP-01645"},"M16-GAP-01645":{"line":1644,"offset":284543,"length":182,"previous":"M16-GAP-01644","next":"M16-GAP-01646"},"M16-GAP-01646":{"line":1645,"offset":284725,"length":184,"previous":"M16-GAP-01645","next":"M16-GAP-01647"},"M16-GAP-01647":{"line":1646,"offset":284909,"length":180,"previous":"M16-GAP-01646","next":"M16-GAP-01648"},"M16-GAP-01648":{"line":1647,"offset":285089,"length":168,"previous":"M16-GAP-01647","next":"M16-GAP-01649"},"M16-GAP-01649":{"line":1648,"offset":285257,"length":171,"previous":"M16-GAP-01648","next":"M16-GAP-01650"},"M16-GAP-01650":{"line":1649,"offset":285428,"length":170,"previous":"M16-GAP-01649","next":"M16-GAP-01651"},"M16-GAP-01651":{"line":1650,"offset":285598,"length":173,"previous":"M16-GAP-01650","next":"M16-GAP-01652"},"M16-GAP-01652":{"line":1651,"offset":285771,"length":170,"previous":"M16-GAP-01651","next":"M16-GAP-01653"},"M16-GAP-01653":{"line":1652,"offset":285941,"length":178,"previous":"M16-GAP-01652","next":"M16-GAP-01654"},"M16-GAP-01654":{"line":1653,"offset":286119,"length":172,"previous":"M16-GAP-01653","next":"M16-GAP-01655"},"M16-GAP-01655":{"line":1654,"offset":286291,"length":184,"previous":"M16-GAP-01654","next":"M16-GAP-01656"},"M16-GAP-01656":{"line":1655,"offset":286475,"length":178,"previous":"M16-GAP-01655","next":"M16-GAP-01657"},"M16-GAP-01657":{"line":1656,"offset":286653,"length":185,"previous":"M16-GAP-01656","next":"M16-GAP-01658"},"M16-GAP-01658":{"line":1657,"offset":286838,"length":175,"previous":"M16-GAP-01657","next":"M16-GAP-01659"},"M16-GAP-01659":{"line":1658,"offset":287013,"length":180,"previous":"M16-GAP-01658","next":"M16-GAP-01660"},"M16-GAP-01660":{"line":1659,"offset":287193,"length":187,"previous":"M16-GAP-01659","next":"M16-GAP-01661"},"M16-GAP-01661":{"line":1660,"offset":287380,"length":177,"previous":"M16-GAP-01660","next":"M16-GAP-01662"},"M16-GAP-01662":{"line":1661,"offset":287557,"length":184,"previous":"M16-GAP-01661","next":"M16-GAP-01663"},"M16-GAP-01663":{"line":1662,"offset":287741,"length":184,"previous":"M16-GAP-01662","next":"M16-GAP-01664"},"M16-GAP-01664":{"line":1663,"offset":287925,"length":182,"previous":"M16-GAP-01663","next":"M16-GAP-01665"},"M16-GAP-01665":{"line":1664,"offset":288107,"length":175,"previous":"M16-GAP-01664","next":"M16-GAP-01666"},"M16-GAP-01666":{"line":1665,"offset":288282,"length":182,"previous":"M16-GAP-01665","next":"M16-GAP-01667"},"M16-GAP-01667":{"line":1666,"offset":288464,"length":187,"previous":"M16-GAP-01666","next":"M16-GAP-01668"},"M16-GAP-01668":{"line":1667,"offset":288651,"length":184,"previous":"M16-GAP-01667","next":"M16-GAP-01669"},"M16-GAP-01669":{"line":1668,"offset":288835,"length":182,"previous":"M16-GAP-01668","next":"M16-GAP-01670"},"M16-GAP-01670":{"line":1669,"offset":289017,"length":190,"previous":"M16-GAP-01669","next":"M16-GAP-01671"},"M16-GAP-01671":{"line":1670,"offset":289207,"length":188,"previous":"M16-GAP-01670","next":"M16-GAP-01672"},"M16-GAP-01672":{"line":1671,"offset":289395,"length":179,"previous":"M16-GAP-01671","next":"M16-GAP-01673"},"M16-GAP-01673":{"line":1672,"offset":289574,"length":178,"previous":"M16-GAP-01672","next":"M16-GAP-01674"},"M16-GAP-01674":{"line":1673,"offset":289752,"length":175,"previous":"M16-GAP-01673","next":"M16-GAP-01675"},"M16-GAP-01675":{"line":1674,"offset":289927,"length":174,"previous":"M16-GAP-01674","next":"M16-GAP-01676"},"M16-GAP-01676":{"line":1675,"offset":290101,"length":187,"previous":"M16-GAP-01675","next":"M16-GAP-01677"},"M16-GAP-01677":{"line":1676,"offset":290288,"length":185,"previous":"M16-GAP-01676","next":"M16-GAP-01678"},"M16-GAP-01678":{"line":1677,"offset":290473,"length":175,"previous":"M16-GAP-01677","next":"M16-GAP-01679"},"M16-GAP-01679":{"line":1678,"offset":290648,"length":182,"previous":"M16-GAP-01678","next":"M16-GAP-01680"},"M16-GAP-01680":{"line":1679,"offset":290830,"length":180,"previous":"M16-GAP-01679","next":"M16-GAP-01681"},"M16-GAP-01681":{"line":1680,"offset":291010,"length":174,"previous":"M16-GAP-01680","next":"M16-GAP-01682"},"M16-GAP-01682":{"line":1681,"offset":291184,"length":174,"previous":"M16-GAP-01681","next":"M16-GAP-01683"},"M16-GAP-01683":{"line":1682,"offset":291358,"length":166,"previous":"M16-GAP-01682","next":"M16-GAP-01684"},"M16-GAP-01684":{"line":1683,"offset":291524,"length":180,"previous":"M16-GAP-01683","next":"M16-GAP-01685"},"M16-GAP-01685":{"line":1684,"offset":291704,"length":183,"previous":"M16-GAP-01684","next":"M16-GAP-01686"},"M16-GAP-01686":{"line":1685,"offset":291887,"length":175,"previous":"M16-GAP-01685","next":"M16-GAP-01687"},"M16-GAP-01687":{"line":1686,"offset":292062,"length":164,"previous":"M16-GAP-01686","next":"M16-GAP-01688"},"M16-GAP-01688":{"line":1687,"offset":292226,"length":176,"previous":"M16-GAP-01687","next":"M16-GAP-01689"},"M16-GAP-01689":{"line":1688,"offset":292402,"length":167,"previous":"M16-GAP-01688","next":"M16-GAP-01690"},"M16-GAP-01690":{"line":1689,"offset":292569,"length":169,"previous":"M16-GAP-01689","next":"M16-GAP-01691"},"M16-GAP-01691":{"line":1690,"offset":292738,"length":178,"previous":"M16-GAP-01690","next":"M16-GAP-01692"},"M16-GAP-01692":{"line":1691,"offset":292916,"length":172,"previous":"M16-GAP-01691","next":"M16-GAP-01693"},"M16-GAP-01693":{"line":1692,"offset":293088,"length":168,"previous":"M16-GAP-01692","next":"M16-GAP-01694"},"M16-GAP-01694":{"line":1693,"offset":293256,"length":168,"previous":"M16-GAP-01693","next":"M16-GAP-01695"},"M16-GAP-01695":{"line":1694,"offset":293424,"length":173,"previous":"M16-GAP-01694","next":"M16-GAP-01696"},"M16-GAP-01696":{"line":1695,"offset":293597,"length":174,"previous":"M16-GAP-01695","next":"M16-GAP-01697"},"M16-GAP-01697":{"line":1696,"offset":293771,"length":174,"previous":"M16-GAP-01696","next":"M16-GAP-01698"},"M16-GAP-01698":{"line":1697,"offset":293945,"length":171,"previous":"M16-GAP-01697","next":"M16-GAP-01699"},"M16-GAP-01699":{"line":1698,"offset":294116,"length":182,"previous":"M16-GAP-01698","next":"M16-GAP-01700"},"M16-GAP-01700":{"line":1699,"offset":294298,"length":185,"previous":"M16-GAP-01699","next":"M16-GAP-01701"},"M16-GAP-01701":{"line":1700,"offset":294483,"length":173,"previous":"M16-GAP-01700","next":"M16-GAP-01702"},"M16-GAP-01702":{"line":1701,"offset":294656,"length":172,"previous":"M16-GAP-01701","next":"M16-GAP-01703"},"M16-GAP-01703":{"line":1702,"offset":294828,"length":181,"previous":"M16-GAP-01702","next":"M16-GAP-01704"},"M16-GAP-01704":{"line":1703,"offset":295009,"length":187,"previous":"M16-GAP-01703","next":"M16-GAP-01705"},"M16-GAP-01705":{"line":1704,"offset":295196,"length":194,"previous":"M16-GAP-01704","next":"M16-GAP-01706"},"M16-GAP-01706":{"line":1705,"offset":295390,"length":173,"previous":"M16-GAP-01705","next":"M16-GAP-01707"},"M16-GAP-01707":{"line":1706,"offset":295563,"length":178,"previous":"M16-GAP-01706","next":"M16-GAP-01708"},"M16-GAP-01708":{"line":1707,"offset":295741,"length":176,"previous":"M16-GAP-01707","next":"M16-GAP-01709"},"M16-GAP-01709":{"line":1708,"offset":295917,"length":169,"previous":"M16-GAP-01708","next":"M16-GAP-01710"},"M16-GAP-01710":{"line":1709,"offset":296086,"length":174,"previous":"M16-GAP-01709","next":"M16-GAP-01711"},"M16-GAP-01711":{"line":1710,"offset":296260,"length":173,"previous":"M16-GAP-01710","next":"M16-GAP-01712"},"M16-GAP-01712":{"line":1711,"offset":296433,"length":172,"previous":"M16-GAP-01711","next":"M16-GAP-01713"},"M16-GAP-01713":{"line":1712,"offset":296605,"length":171,"previous":"M16-GAP-01712","next":"M16-GAP-01714"},"M16-GAP-01714":{"line":1713,"offset":296776,"length":170,"previous":"M16-GAP-01713","next":"M16-GAP-01715"},"M16-GAP-01715":{"line":1714,"offset":296946,"length":175,"previous":"M16-GAP-01714","next":"M16-GAP-01716"},"M16-GAP-01716":{"line":1715,"offset":297121,"length":171,"previous":"M16-GAP-01715","next":"M16-GAP-01717"},"M16-GAP-01717":{"line":1716,"offset":297292,"length":170,"previous":"M16-GAP-01716","next":"M16-GAP-01718"},"M16-GAP-01718":{"line":1717,"offset":297462,"length":170,"previous":"M16-GAP-01717","next":"M16-GAP-01719"},"M16-GAP-01719":{"line":1718,"offset":297632,"length":171,"previous":"M16-GAP-01718","next":"M16-GAP-01720"},"M16-GAP-01720":{"line":1719,"offset":297803,"length":171,"previous":"M16-GAP-01719","next":"M16-GAP-01721"},"M16-GAP-01721":{"line":1720,"offset":297974,"length":174,"previous":"M16-GAP-01720","next":"M16-GAP-01722"},"M16-GAP-01722":{"line":1721,"offset":298148,"length":174,"previous":"M16-GAP-01721","next":"M16-GAP-01723"},"M16-GAP-01723":{"line":1722,"offset":298322,"length":172,"previous":"M16-GAP-01722","next":"M16-GAP-01724"},"M16-GAP-01724":{"line":1723,"offset":298494,"length":170,"previous":"M16-GAP-01723","next":"M16-GAP-01725"},"M16-GAP-01725":{"line":1724,"offset":298664,"length":171,"previous":"M16-GAP-01724","next":"M16-GAP-01726"},"M16-GAP-01726":{"line":1725,"offset":298835,"length":179,"previous":"M16-GAP-01725","next":"M16-GAP-01727"},"M16-GAP-01727":{"line":1726,"offset":299014,"length":174,"previous":"M16-GAP-01726","next":"M16-GAP-01728"},"M16-GAP-01728":{"line":1727,"offset":299188,"length":172,"previous":"M16-GAP-01727","next":"M16-GAP-01729"},"M16-GAP-01729":{"line":1728,"offset":299360,"length":173,"previous":"M16-GAP-01728","next":"M16-GAP-01730"},"M16-GAP-01730":{"line":1729,"offset":299533,"length":173,"previous":"M16-GAP-01729","next":"M16-GAP-01731"},"M16-GAP-01731":{"line":1730,"offset":299706,"length":175,"previous":"M16-GAP-01730","next":"M16-GAP-01732"},"M16-GAP-01732":{"line":1731,"offset":299881,"length":180,"previous":"M16-GAP-01731","next":"M16-GAP-01733"},"M16-GAP-01733":{"line":1732,"offset":300061,"length":173,"previous":"M16-GAP-01732","next":"M16-GAP-01734"},"M16-GAP-01734":{"line":1733,"offset":300234,"length":173,"previous":"M16-GAP-01733","next":"M16-GAP-01735"},"M16-GAP-01735":{"line":1734,"offset":300407,"length":173,"previous":"M16-GAP-01734","next":"M16-GAP-01736"},"M16-GAP-01736":{"line":1735,"offset":300580,"length":167,"previous":"M16-GAP-01735","next":"M16-GAP-01737"},"M16-GAP-01737":{"line":1736,"offset":300747,"length":166,"previous":"M16-GAP-01736","next":"M16-GAP-01738"},"M16-GAP-01738":{"line":1737,"offset":300913,"length":170,"previous":"M16-GAP-01737","next":"M16-GAP-01739"},"M16-GAP-01739":{"line":1738,"offset":301083,"length":180,"previous":"M16-GAP-01738","next":"M16-GAP-01740"},"M16-GAP-01740":{"line":1739,"offset":301263,"length":179,"previous":"M16-GAP-01739","next":"M16-GAP-01741"},"M16-GAP-01741":{"line":1740,"offset":301442,"length":173,"previous":"M16-GAP-01740","next":"M16-GAP-01742"},"M16-GAP-01742":{"line":1741,"offset":301615,"length":183,"previous":"M16-GAP-01741","next":"M16-GAP-01743"},"M16-GAP-01743":{"line":1742,"offset":301798,"length":172,"previous":"M16-GAP-01742","next":"M16-GAP-01744"},"M16-GAP-01744":{"line":1743,"offset":301970,"length":168,"previous":"M16-GAP-01743","next":"M16-GAP-01745"},"M16-GAP-01745":{"line":1744,"offset":302138,"length":173,"previous":"M16-GAP-01744","next":"M16-GAP-01746"},"M16-GAP-01746":{"line":1745,"offset":302311,"length":172,"previous":"M16-GAP-01745","next":"M16-GAP-01747"},"M16-GAP-01747":{"line":1746,"offset":302483,"length":175,"previous":"M16-GAP-01746","next":"M16-GAP-01748"},"M16-GAP-01748":{"line":1747,"offset":302658,"length":174,"previous":"M16-GAP-01747","next":"M16-GAP-01749"},"M16-GAP-01749":{"line":1748,"offset":302832,"length":178,"previous":"M16-GAP-01748","next":"M16-GAP-01750"},"M16-GAP-01750":{"line":1749,"offset":303010,"length":170,"previous":"M16-GAP-01749","next":"M16-GAP-01751"},"M16-GAP-01751":{"line":1750,"offset":303180,"length":169,"previous":"M16-GAP-01750","next":"M16-GAP-01752"},"M16-GAP-01752":{"line":1751,"offset":303349,"length":177,"previous":"M16-GAP-01751","next":"M16-GAP-01753"},"M16-GAP-01753":{"line":1752,"offset":303526,"length":172,"previous":"M16-GAP-01752","next":"M16-GAP-01754"},"M16-GAP-01754":{"line":1753,"offset":303698,"length":173,"previous":"M16-GAP-01753","next":"M16-GAP-01755"},"M16-GAP-01755":{"line":1754,"offset":303871,"length":173,"previous":"M16-GAP-01754","next":"M16-GAP-01756"},"M16-GAP-01756":{"line":1755,"offset":304044,"length":175,"previous":"M16-GAP-01755","next":"M16-GAP-01757"},"M16-GAP-01757":{"line":1756,"offset":304219,"length":180,"previous":"M16-GAP-01756","next":"M16-GAP-01758"},"M16-GAP-01758":{"line":1757,"offset":304399,"length":173,"previous":"M16-GAP-01757","next":"M16-GAP-01759"},"M16-GAP-01759":{"line":1758,"offset":304572,"length":173,"previous":"M16-GAP-01758","next":"M16-GAP-01760"},"M16-GAP-01760":{"line":1759,"offset":304745,"length":178,"previous":"M16-GAP-01759","next":"M16-GAP-01761"},"M16-GAP-01761":{"line":1760,"offset":304923,"length":189,"previous":"M16-GAP-01760","next":"M16-GAP-01762"},"M16-GAP-01762":{"line":1761,"offset":305112,"length":174,"previous":"M16-GAP-01761","next":"M16-GAP-01763"},"M16-GAP-01763":{"line":1762,"offset":305286,"length":181,"previous":"M16-GAP-01762","next":"M16-GAP-01764"},"M16-GAP-01764":{"line":1763,"offset":305467,"length":173,"previous":"M16-GAP-01763","next":"M16-GAP-01765"},"M16-GAP-01765":{"line":1764,"offset":305640,"length":176,"previous":"M16-GAP-01764","next":"M16-GAP-01766"},"M16-GAP-01766":{"line":1765,"offset":305816,"length":176,"previous":"M16-GAP-01765","next":"M16-GAP-01767"},"M16-GAP-01767":{"line":1766,"offset":305992,"length":173,"previous":"M16-GAP-01766","next":"M16-GAP-01768"},"M16-GAP-01768":{"line":1767,"offset":306165,"length":176,"previous":"M16-GAP-01767","next":"M16-GAP-01769"},"M16-GAP-01769":{"line":1768,"offset":306341,"length":169,"previous":"M16-GAP-01768","next":"M16-GAP-01770"},"M16-GAP-01770":{"line":1769,"offset":306510,"length":176,"previous":"M16-GAP-01769","next":"M16-GAP-01771"},"M16-GAP-01771":{"line":1770,"offset":306686,"length":174,"previous":"M16-GAP-01770","next":"M16-GAP-01772"},"M16-GAP-01772":{"line":1771,"offset":306860,"length":174,"previous":"M16-GAP-01771","next":"M16-GAP-01773"},"M16-GAP-01773":{"line":1772,"offset":307034,"length":174,"previous":"M16-GAP-01772","next":"M16-GAP-01774"},"M16-GAP-01774":{"line":1773,"offset":307208,"length":172,"previous":"M16-GAP-01773","next":"M16-GAP-01775"},"M16-GAP-01775":{"line":1774,"offset":307380,"length":169,"previous":"M16-GAP-01774","next":"M16-GAP-01776"},"M16-GAP-01776":{"line":1775,"offset":307549,"length":176,"previous":"M16-GAP-01775","next":"M16-GAP-01777"},"M16-GAP-01777":{"line":1776,"offset":307725,"length":170,"previous":"M16-GAP-01776","next":"M16-GAP-01778"},"M16-GAP-01778":{"line":1777,"offset":307895,"length":176,"previous":"M16-GAP-01777","next":"M16-GAP-01779"},"M16-GAP-01779":{"line":1778,"offset":308071,"length":167,"previous":"M16-GAP-01778","next":"M16-GAP-01780"},"M16-GAP-01780":{"line":1779,"offset":308238,"length":171,"previous":"M16-GAP-01779","next":"M16-GAP-01781"},"M16-GAP-01781":{"line":1780,"offset":308409,"length":177,"previous":"M16-GAP-01780","next":"M16-GAP-01782"},"M16-GAP-01782":{"line":1781,"offset":308586,"length":168,"previous":"M16-GAP-01781","next":"M16-GAP-01783"},"M16-GAP-01783":{"line":1782,"offset":308754,"length":174,"previous":"M16-GAP-01782","next":"M16-GAP-01784"},"M16-GAP-01784":{"line":1783,"offset":308928,"length":166,"previous":"M16-GAP-01783","next":"M16-GAP-01785"},"M16-GAP-01785":{"line":1784,"offset":309094,"length":165,"previous":"M16-GAP-01784","next":"M16-GAP-01786"},"M16-GAP-01786":{"line":1785,"offset":309259,"length":168,"previous":"M16-GAP-01785","next":"M16-GAP-01787"},"M16-GAP-01787":{"line":1786,"offset":309427,"length":167,"previous":"M16-GAP-01786","next":"M16-GAP-01788"},"M16-GAP-01788":{"line":1787,"offset":309594,"length":168,"previous":"M16-GAP-01787","next":"M16-GAP-01789"},"M16-GAP-01789":{"line":1788,"offset":309762,"length":171,"previous":"M16-GAP-01788","next":"M16-GAP-01790"},"M16-GAP-01790":{"line":1789,"offset":309933,"length":169,"previous":"M16-GAP-01789","next":"M16-GAP-01791"},"M16-GAP-01791":{"line":1790,"offset":310102,"length":177,"previous":"M16-GAP-01790","next":"M16-GAP-01792"},"M16-GAP-01792":{"line":1791,"offset":310279,"length":163,"previous":"M16-GAP-01791","next":"M16-GAP-01793"},"M16-GAP-01793":{"line":1792,"offset":310442,"length":162,"previous":"M16-GAP-01792","next":"M16-GAP-01794"},"M16-GAP-01794":{"line":1793,"offset":310604,"length":163,"previous":"M16-GAP-01793","next":"M16-GAP-01795"},"M16-GAP-01795":{"line":1794,"offset":310767,"length":170,"previous":"M16-GAP-01794","next":"M16-GAP-01796"},"M16-GAP-01796":{"line":1795,"offset":310937,"length":172,"previous":"M16-GAP-01795","next":"M16-GAP-01797"},"M16-GAP-01797":{"line":1796,"offset":311109,"length":181,"previous":"M16-GAP-01796","next":"M16-GAP-01798"},"M16-GAP-01798":{"line":1797,"offset":311290,"length":166,"previous":"M16-GAP-01797","next":"M16-GAP-01799"},"M16-GAP-01799":{"line":1798,"offset":311456,"length":175,"previous":"M16-GAP-01798","next":"M16-GAP-01800"},"M16-GAP-01800":{"line":1799,"offset":311631,"length":185,"previous":"M16-GAP-01799","next":"M16-GAP-01801"},"M16-GAP-01801":{"line":1800,"offset":311816,"length":172,"previous":"M16-GAP-01800","next":"M16-GAP-01802"},"M16-GAP-01802":{"line":1801,"offset":311988,"length":177,"previous":"M16-GAP-01801","next":"M16-GAP-01803"},"M16-GAP-01803":{"line":1802,"offset":312165,"length":175,"previous":"M16-GAP-01802","next":"M16-GAP-01804"},"M16-GAP-01804":{"line":1803,"offset":312340,"length":175,"previous":"M16-GAP-01803","next":"M16-GAP-01805"},"M16-GAP-01805":{"line":1804,"offset":312515,"length":174,"previous":"M16-GAP-01804","next":"M16-GAP-01806"},"M16-GAP-01806":{"line":1805,"offset":312689,"length":172,"previous":"M16-GAP-01805","next":"M16-GAP-01807"},"M16-GAP-01807":{"line":1806,"offset":312861,"length":184,"previous":"M16-GAP-01806","next":"M16-GAP-01808"},"M16-GAP-01808":{"line":1807,"offset":313045,"length":164,"previous":"M16-GAP-01807","next":"M16-GAP-01809"},"M16-GAP-01809":{"line":1808,"offset":313209,"length":166,"previous":"M16-GAP-01808","next":"M16-GAP-01810"},"M16-GAP-01810":{"line":1809,"offset":313375,"length":163,"previous":"M16-GAP-01809","next":"M16-GAP-01811"},"M16-GAP-01811":{"line":1810,"offset":313538,"length":170,"previous":"M16-GAP-01810","next":"M16-GAP-01812"},"M16-GAP-01812":{"line":1811,"offset":313708,"length":180,"previous":"M16-GAP-01811","next":"M16-GAP-01813"},"M16-GAP-01813":{"line":1812,"offset":313888,"length":186,"previous":"M16-GAP-01812","next":"M16-GAP-01814"},"M16-GAP-01814":{"line":1813,"offset":314074,"length":165,"previous":"M16-GAP-01813","next":"M16-GAP-01815"},"M16-GAP-01815":{"line":1814,"offset":314239,"length":174,"previous":"M16-GAP-01814","next":"M16-GAP-01816"},"M16-GAP-01816":{"line":1815,"offset":314413,"length":166,"previous":"M16-GAP-01815","next":"M16-GAP-01817"},"M16-GAP-01817":{"line":1816,"offset":314579,"length":170,"previous":"M16-GAP-01816","next":"M16-GAP-01818"},"M16-GAP-01818":{"line":1817,"offset":314749,"length":171,"previous":"M16-GAP-01817","next":"M16-GAP-01819"},"M16-GAP-01819":{"line":1818,"offset":314920,"length":173,"previous":"M16-GAP-01818","next":"M16-GAP-01820"},"M16-GAP-01820":{"line":1819,"offset":315093,"length":178,"previous":"M16-GAP-01819","next":"M16-GAP-01821"},"M16-GAP-01821":{"line":1820,"offset":315271,"length":171,"previous":"M16-GAP-01820","next":"M16-GAP-01822"},"M16-GAP-01822":{"line":1821,"offset":315442,"length":173,"previous":"M16-GAP-01821","next":"M16-GAP-01823"},"M16-GAP-01823":{"line":1822,"offset":315615,"length":172,"previous":"M16-GAP-01822","next":"M16-GAP-01824"},"M16-GAP-01824":{"line":1823,"offset":315787,"length":171,"previous":"M16-GAP-01823","next":"M16-GAP-01825"},"M16-GAP-01825":{"line":1824,"offset":315958,"length":169,"previous":"M16-GAP-01824","next":"M16-GAP-01826"},"M16-GAP-01826":{"line":1825,"offset":316127,"length":169,"previous":"M16-GAP-01825","next":"M16-GAP-01827"},"M16-GAP-01827":{"line":1826,"offset":316296,"length":176,"previous":"M16-GAP-01826","next":"M16-GAP-01828"},"M16-GAP-01828":{"line":1827,"offset":316472,"length":174,"previous":"M16-GAP-01827","next":"M16-GAP-01829"},"M16-GAP-01829":{"line":1828,"offset":316646,"length":173,"previous":"M16-GAP-01828","next":"M16-GAP-01830"},"M16-GAP-01830":{"line":1829,"offset":316819,"length":172,"previous":"M16-GAP-01829","next":"M16-GAP-01831"},"M16-GAP-01831":{"line":1830,"offset":316991,"length":170,"previous":"M16-GAP-01830","next":"M16-GAP-01832"},"M16-GAP-01832":{"line":1831,"offset":317161,"length":175,"previous":"M16-GAP-01831","next":"M16-GAP-01833"},"M16-GAP-01833":{"line":1832,"offset":317336,"length":168,"previous":"M16-GAP-01832","next":"M16-GAP-01834"},"M16-GAP-01834":{"line":1833,"offset":317504,"length":171,"previous":"M16-GAP-01833","next":"M16-GAP-01835"},"M16-GAP-01835":{"line":1834,"offset":317675,"length":176,"previous":"M16-GAP-01834","next":"M16-GAP-01836"},"M16-GAP-01836":{"line":1835,"offset":317851,"length":172,"previous":"M16-GAP-01835","next":"M16-GAP-01837"},"M16-GAP-01837":{"line":1836,"offset":318023,"length":175,"previous":"M16-GAP-01836","next":"M16-GAP-01838"},"M16-GAP-01838":{"line":1837,"offset":318198,"length":170,"previous":"M16-GAP-01837","next":"M16-GAP-01839"},"M16-GAP-01839":{"line":1838,"offset":318368,"length":170,"previous":"M16-GAP-01838","next":"M16-GAP-01840"},"M16-GAP-01840":{"line":1839,"offset":318538,"length":170,"previous":"M16-GAP-01839","next":"M16-GAP-01841"},"M16-GAP-01841":{"line":1840,"offset":318708,"length":173,"previous":"M16-GAP-01840","next":"M16-GAP-01842"},"M16-GAP-01842":{"line":1841,"offset":318881,"length":171,"previous":"M16-GAP-01841","next":"M16-GAP-01843"},"M16-GAP-01843":{"line":1842,"offset":319052,"length":165,"previous":"M16-GAP-01842","next":"M16-GAP-01844"},"M16-GAP-01844":{"line":1843,"offset":319217,"length":170,"previous":"M16-GAP-01843","next":"M16-GAP-01845"},"M16-GAP-01845":{"line":1844,"offset":319387,"length":183,"previous":"M16-GAP-01844","next":"M16-GAP-01846"},"M16-GAP-01846":{"line":1845,"offset":319570,"length":173,"previous":"M16-GAP-01845","next":"M16-GAP-01847"},"M16-GAP-01847":{"line":1846,"offset":319743,"length":172,"previous":"M16-GAP-01846","next":"M16-GAP-01848"},"M16-GAP-01848":{"line":1847,"offset":319915,"length":160,"previous":"M16-GAP-01847","next":"M16-GAP-01849"},"M16-GAP-01849":{"line":1848,"offset":320075,"length":166,"previous":"M16-GAP-01848","next":"M16-GAP-01850"},"M16-GAP-01850":{"line":1849,"offset":320241,"length":160,"previous":"M16-GAP-01849","next":"M16-GAP-01851"},"M16-GAP-01851":{"line":1850,"offset":320401,"length":162,"previous":"M16-GAP-01850","next":"M16-GAP-01852"},"M16-GAP-01852":{"line":1851,"offset":320563,"length":164,"previous":"M16-GAP-01851","next":"M16-GAP-01853"},"M16-GAP-01853":{"line":1852,"offset":320727,"length":165,"previous":"M16-GAP-01852","next":"M16-GAP-01854"},"M16-GAP-01854":{"line":1853,"offset":320892,"length":161,"previous":"M16-GAP-01853","next":"M16-GAP-01855"},"M16-GAP-01855":{"line":1854,"offset":321053,"length":171,"previous":"M16-GAP-01854","next":"M16-GAP-01856"},"M16-GAP-01856":{"line":1855,"offset":321224,"length":167,"previous":"M16-GAP-01855","next":"M16-GAP-01857"},"M16-GAP-01857":{"line":1856,"offset":321391,"length":174,"previous":"M16-GAP-01856","next":"M16-GAP-01858"},"M16-GAP-01858":{"line":1857,"offset":321565,"length":168,"previous":"M16-GAP-01857","next":"M16-GAP-01859"},"M16-GAP-01859":{"line":1858,"offset":321733,"length":165,"previous":"M16-GAP-01858","next":"M16-GAP-01860"},"M16-GAP-01860":{"line":1859,"offset":321898,"length":160,"previous":"M16-GAP-01859","next":"M16-GAP-01861"},"M16-GAP-01861":{"line":1860,"offset":322058,"length":172,"previous":"M16-GAP-01860","next":"M16-GAP-01862"},"M16-GAP-01862":{"line":1861,"offset":322230,"length":161,"previous":"M16-GAP-01861","next":"M16-GAP-01863"},"M16-GAP-01863":{"line":1862,"offset":322391,"length":162,"previous":"M16-GAP-01862","next":"M16-GAP-01864"},"M16-GAP-01864":{"line":1863,"offset":322553,"length":165,"previous":"M16-GAP-01863","next":"M16-GAP-01865"},"M16-GAP-01865":{"line":1864,"offset":322718,"length":173,"previous":"M16-GAP-01864","next":"M16-GAP-01866"},"M16-GAP-01866":{"line":1865,"offset":322891,"length":167,"previous":"M16-GAP-01865","next":"M16-GAP-01867"},"M16-GAP-01867":{"line":1866,"offset":323058,"length":166,"previous":"M16-GAP-01866","next":"M16-GAP-01868"},"M16-GAP-01868":{"line":1867,"offset":323224,"length":180,"previous":"M16-GAP-01867","next":"M16-GAP-01869"},"M16-GAP-01869":{"line":1868,"offset":323404,"length":170,"previous":"M16-GAP-01868","next":"M16-GAP-01870"},"M16-GAP-01870":{"line":1869,"offset":323574,"length":172,"previous":"M16-GAP-01869","next":"M16-GAP-01871"},"M16-GAP-01871":{"line":1870,"offset":323746,"length":169,"previous":"M16-GAP-01870","next":"M16-GAP-01872"},"M16-GAP-01872":{"line":1871,"offset":323915,"length":174,"previous":"M16-GAP-01871","next":"M16-GAP-01873"},"M16-GAP-01873":{"line":1872,"offset":324089,"length":169,"previous":"M16-GAP-01872","next":"M16-GAP-01874"},"M16-GAP-01874":{"line":1873,"offset":324258,"length":169,"previous":"M16-GAP-01873","next":"M16-GAP-01875"},"M16-GAP-01875":{"line":1874,"offset":324427,"length":173,"previous":"M16-GAP-01874","next":"M16-GAP-01876"},"M16-GAP-01876":{"line":1875,"offset":324600,"length":184,"previous":"M16-GAP-01875","next":"M16-GAP-01877"},"M16-GAP-01877":{"line":1876,"offset":324784,"length":176,"previous":"M16-GAP-01876","next":"M16-GAP-01878"},"M16-GAP-01878":{"line":1877,"offset":324960,"length":174,"previous":"M16-GAP-01877","next":"M16-GAP-01879"},"M16-GAP-01879":{"line":1878,"offset":325134,"length":180,"previous":"M16-GAP-01878","next":"M16-GAP-01880"},"M16-GAP-01880":{"line":1879,"offset":325314,"length":178,"previous":"M16-GAP-01879","next":"M16-GAP-01881"},"M16-GAP-01881":{"line":1880,"offset":325492,"length":174,"previous":"M16-GAP-01880","next":"M16-GAP-01882"},"M16-GAP-01882":{"line":1881,"offset":325666,"length":175,"previous":"M16-GAP-01881","next":"M16-GAP-01883"},"M16-GAP-01883":{"line":1882,"offset":325841,"length":176,"previous":"M16-GAP-01882","next":"M16-GAP-01884"},"M16-GAP-01884":{"line":1883,"offset":326017,"length":182,"previous":"M16-GAP-01883","next":"M16-GAP-01885"},"M16-GAP-01885":{"line":1884,"offset":326199,"length":176,"previous":"M16-GAP-01884","next":"M16-GAP-01886"},"M16-GAP-01886":{"line":1885,"offset":326375,"length":178,"previous":"M16-GAP-01885","next":"M16-GAP-01887"},"M16-GAP-01887":{"line":1886,"offset":326553,"length":172,"previous":"M16-GAP-01886","next":"M16-GAP-01888"},"M16-GAP-01888":{"line":1887,"offset":326725,"length":177,"previous":"M16-GAP-01887","next":"M16-GAP-01889"},"M16-GAP-01889":{"line":1888,"offset":326902,"length":178,"previous":"M16-GAP-01888","next":"M16-GAP-01890"},"M16-GAP-01890":{"line":1889,"offset":327080,"length":175,"previous":"M16-GAP-01889","next":"M16-GAP-01891"},"M16-GAP-01891":{"line":1890,"offset":327255,"length":171,"previous":"M16-GAP-01890","next":"M16-GAP-01892"},"M16-GAP-01892":{"line":1891,"offset":327426,"length":171,"previous":"M16-GAP-01891","next":"M16-GAP-01893"},"M16-GAP-01893":{"line":1892,"offset":327597,"length":175,"previous":"M16-GAP-01892","next":"M16-GAP-01894"},"M16-GAP-01894":{"line":1893,"offset":327772,"length":172,"previous":"M16-GAP-01893","next":"M16-GAP-01895"},"M16-GAP-01895":{"line":1894,"offset":327944,"length":176,"previous":"M16-GAP-01894","next":"M16-GAP-01896"},"M16-GAP-01896":{"line":1895,"offset":328120,"length":170,"previous":"M16-GAP-01895","next":"M16-GAP-01897"},"M16-GAP-01897":{"line":1896,"offset":328290,"length":182,"previous":"M16-GAP-01896","next":"M16-GAP-01898"},"M16-GAP-01898":{"line":1897,"offset":328472,"length":182,"previous":"M16-GAP-01897","next":"M16-GAP-01899"},"M16-GAP-01899":{"line":1898,"offset":328654,"length":176,"previous":"M16-GAP-01898","next":"M16-GAP-01900"},"M16-GAP-01900":{"line":1899,"offset":328830,"length":175,"previous":"M16-GAP-01899","next":"M16-GAP-01901"},"M16-GAP-01901":{"line":1900,"offset":329005,"length":175,"previous":"M16-GAP-01900","next":"M16-GAP-01902"},"M16-GAP-01902":{"line":1901,"offset":329180,"length":176,"previous":"M16-GAP-01901","next":"M16-GAP-01903"},"M16-GAP-01903":{"line":1902,"offset":329356,"length":176,"previous":"M16-GAP-01902","next":"M16-GAP-01904"},"M16-GAP-01904":{"line":1903,"offset":329532,"length":175,"previous":"M16-GAP-01903","next":"M16-GAP-01905"},"M16-GAP-01905":{"line":1904,"offset":329707,"length":173,"previous":"M16-GAP-01904","next":"M16-GAP-01906"},"M16-GAP-01906":{"line":1905,"offset":329880,"length":183,"previous":"M16-GAP-01905","next":"M16-GAP-01907"},"M16-GAP-01907":{"line":1906,"offset":330063,"length":180,"previous":"M16-GAP-01906","next":"M16-GAP-01908"},"M16-GAP-01908":{"line":1907,"offset":330243,"length":183,"previous":"M16-GAP-01907","next":"M16-GAP-01909"},"M16-GAP-01909":{"line":1908,"offset":330426,"length":178,"previous":"M16-GAP-01908","next":"M16-GAP-01910"},"M16-GAP-01910":{"line":1909,"offset":330604,"length":180,"previous":"M16-GAP-01909","next":"M16-GAP-01911"},"M16-GAP-01911":{"line":1910,"offset":330784,"length":183,"previous":"M16-GAP-01910","next":"M16-GAP-01912"},"M16-GAP-01912":{"line":1911,"offset":330967,"length":175,"previous":"M16-GAP-01911","next":"M16-GAP-01913"},"M16-GAP-01913":{"line":1912,"offset":331142,"length":172,"previous":"M16-GAP-01912","next":"M16-GAP-01914"},"M16-GAP-01914":{"line":1913,"offset":331314,"length":181,"previous":"M16-GAP-01913","next":"M16-GAP-01915"},"M16-GAP-01915":{"line":1914,"offset":331495,"length":184,"previous":"M16-GAP-01914","next":"M16-GAP-01916"},"M16-GAP-01916":{"line":1915,"offset":331679,"length":181,"previous":"M16-GAP-01915","next":"M16-GAP-01917"},"M16-GAP-01917":{"line":1916,"offset":331860,"length":181,"previous":"M16-GAP-01916","next":"M16-GAP-01918"},"M16-GAP-01918":{"line":1917,"offset":332041,"length":179,"previous":"M16-GAP-01917","next":"M16-GAP-01919"},"M16-GAP-01919":{"line":1918,"offset":332220,"length":179,"previous":"M16-GAP-01918","next":"M16-GAP-01920"},"M16-GAP-01920":{"line":1919,"offset":332399,"length":179,"previous":"M16-GAP-01919","next":"M16-GAP-01921"},"M16-GAP-01921":{"line":1920,"offset":332578,"length":177,"previous":"M16-GAP-01920","next":"M16-GAP-01922"},"M16-GAP-01922":{"line":1921,"offset":332755,"length":174,"previous":"M16-GAP-01921","next":"M16-GAP-01923"},"M16-GAP-01923":{"line":1922,"offset":332929,"length":177,"previous":"M16-GAP-01922","next":"M16-GAP-01924"},"M16-GAP-01924":{"line":1923,"offset":333106,"length":178,"previous":"M16-GAP-01923","next":"M16-GAP-01925"},"M16-GAP-01925":{"line":1924,"offset":333284,"length":177,"previous":"M16-GAP-01924","next":"M16-GAP-01926"},"M16-GAP-01926":{"line":1925,"offset":333461,"length":182,"previous":"M16-GAP-01925","next":"M16-GAP-01927"},"M16-GAP-01927":{"line":1926,"offset":333643,"length":183,"previous":"M16-GAP-01926","next":"M16-GAP-01928"},"M16-GAP-01928":{"line":1927,"offset":333826,"length":186,"previous":"M16-GAP-01927","next":"M16-GAP-01929"},"M16-GAP-01929":{"line":1928,"offset":334012,"length":175,"previous":"M16-GAP-01928","next":"M16-GAP-01930"},"M16-GAP-01930":{"line":1929,"offset":334187,"length":188,"previous":"M16-GAP-01929","next":"M16-GAP-01931"},"M16-GAP-01931":{"line":1930,"offset":334375,"length":182,"previous":"M16-GAP-01930","next":"M16-GAP-01932"},"M16-GAP-01932":{"line":1931,"offset":334557,"length":178,"previous":"M16-GAP-01931","next":"M16-GAP-01933"},"M16-GAP-01933":{"line":1932,"offset":334735,"length":184,"previous":"M16-GAP-01932","next":"M16-GAP-01934"},"M16-GAP-01934":{"line":1933,"offset":334919,"length":176,"previous":"M16-GAP-01933","next":"M16-GAP-01935"},"M16-GAP-01935":{"line":1934,"offset":335095,"length":180,"previous":"M16-GAP-01934","next":"M16-GAP-01936"},"M16-GAP-01936":{"line":1935,"offset":335275,"length":162,"previous":"M16-GAP-01935","next":"M16-GAP-01937"},"M16-GAP-01937":{"line":1936,"offset":335437,"length":163,"previous":"M16-GAP-01936","next":"M16-GAP-01938"},"M16-GAP-01938":{"line":1937,"offset":335600,"length":167,"previous":"M16-GAP-01937","next":"M16-GAP-01939"},"M16-GAP-01939":{"line":1938,"offset":335767,"length":174,"previous":"M16-GAP-01938","next":"M16-GAP-01940"},"M16-GAP-01940":{"line":1939,"offset":335941,"length":168,"previous":"M16-GAP-01939","next":"M16-GAP-01941"},"M16-GAP-01941":{"line":1940,"offset":336109,"length":172,"previous":"M16-GAP-01940","next":"M16-GAP-01942"},"M16-GAP-01942":{"line":1941,"offset":336281,"length":165,"previous":"M16-GAP-01941","next":"M16-GAP-01943"},"M16-GAP-01943":{"line":1942,"offset":336446,"length":177,"previous":"M16-GAP-01942","next":"M16-GAP-01944"},"M16-GAP-01944":{"line":1943,"offset":336623,"length":199,"previous":"M16-GAP-01943","next":"M16-GAP-01945"},"M16-GAP-01945":{"line":1944,"offset":336822,"length":186,"previous":"M16-GAP-01944","next":"M16-GAP-01946"},"M16-GAP-01946":{"line":1945,"offset":337008,"length":187,"previous":"M16-GAP-01945","next":"M16-GAP-01947"},"M16-GAP-01947":{"line":1946,"offset":337195,"length":184,"previous":"M16-GAP-01946","next":"M16-GAP-01948"},"M16-GAP-01948":{"line":1947,"offset":337379,"length":193,"previous":"M16-GAP-01947","next":"M16-GAP-01949"},"M16-GAP-01949":{"line":1948,"offset":337572,"length":185,"previous":"M16-GAP-01948","next":"M16-GAP-01950"},"M16-GAP-01950":{"line":1949,"offset":337757,"length":180,"previous":"M16-GAP-01949","next":"M16-GAP-01951"},"M16-GAP-01951":{"line":1950,"offset":337937,"length":164,"previous":"M16-GAP-01950","next":"M16-GAP-01952"},"M16-GAP-01952":{"line":1951,"offset":338101,"length":176,"previous":"M16-GAP-01951","next":"M16-GAP-01953"},"M16-GAP-01953":{"line":1952,"offset":338277,"length":168,"previous":"M16-GAP-01952","next":"M16-GAP-01954"},"M16-GAP-01954":{"line":1953,"offset":338445,"length":164,"previous":"M16-GAP-01953","next":"M16-GAP-01955"},"M16-GAP-01955":{"line":1954,"offset":338609,"length":178,"previous":"M16-GAP-01954","next":"M16-GAP-01956"},"M16-GAP-01956":{"line":1955,"offset":338787,"length":173,"previous":"M16-GAP-01955","next":"M16-GAP-01957"},"M16-GAP-01957":{"line":1956,"offset":338960,"length":169,"previous":"M16-GAP-01956","next":"M16-GAP-01958"},"M16-GAP-01958":{"line":1957,"offset":339129,"length":167,"previous":"M16-GAP-01957","next":"M16-GAP-01959"},"M16-GAP-01959":{"line":1958,"offset":339296,"length":178,"previous":"M16-GAP-01958","next":"M16-GAP-01960"},"M16-GAP-01960":{"line":1959,"offset":339474,"length":168,"previous":"M16-GAP-01959","next":"M16-GAP-01961"},"M16-GAP-01961":{"line":1960,"offset":339642,"length":175,"previous":"M16-GAP-01960","next":"M16-GAP-01962"},"M16-GAP-01962":{"line":1961,"offset":339817,"length":178,"previous":"M16-GAP-01961","next":"M16-GAP-01963"},"M16-GAP-01963":{"line":1962,"offset":339995,"length":175,"previous":"M16-GAP-01962","next":"M16-GAP-01964"},"M16-GAP-01964":{"line":1963,"offset":340170,"length":171,"previous":"M16-GAP-01963","next":"M16-GAP-01965"},"M16-GAP-01965":{"line":1964,"offset":340341,"length":174,"previous":"M16-GAP-01964","next":"M16-GAP-01966"},"M16-GAP-01966":{"line":1965,"offset":340515,"length":181,"previous":"M16-GAP-01965","next":"M16-GAP-01967"},"M16-GAP-01967":{"line":1966,"offset":340696,"length":172,"previous":"M16-GAP-01966","next":"M16-GAP-01968"},"M16-GAP-01968":{"line":1967,"offset":340868,"length":175,"previous":"M16-GAP-01967","next":"M16-GAP-01969"},"M16-GAP-01969":{"line":1968,"offset":341043,"length":173,"previous":"M16-GAP-01968","next":"M16-GAP-01970"},"M16-GAP-01970":{"line":1969,"offset":341216,"length":170,"previous":"M16-GAP-01969","next":"M16-GAP-01971"},"M16-GAP-01971":{"line":1970,"offset":341386,"length":173,"previous":"M16-GAP-01970","next":"M16-GAP-01972"},"M16-GAP-01972":{"line":1971,"offset":341559,"length":163,"previous":"M16-GAP-01971","next":"M16-GAP-01973"},"M16-GAP-01973":{"line":1972,"offset":341722,"length":173,"previous":"M16-GAP-01972","next":"M16-GAP-01974"},"M16-GAP-01974":{"line":1973,"offset":341895,"length":195,"previous":"M16-GAP-01973","next":"M16-GAP-01975"},"M16-GAP-01975":{"line":1974,"offset":342090,"length":195,"previous":"M16-GAP-01974","next":"M16-GAP-01976"},"M16-GAP-01976":{"line":1975,"offset":342285,"length":185,"previous":"M16-GAP-01975","next":"M16-GAP-01977"},"M16-GAP-01977":{"line":1976,"offset":342470,"length":185,"previous":"M16-GAP-01976","next":"M16-GAP-01978"},"M16-GAP-01978":{"line":1977,"offset":342655,"length":190,"previous":"M16-GAP-01977","next":"M16-GAP-01979"},"M16-GAP-01979":{"line":1978,"offset":342845,"length":188,"previous":"M16-GAP-01978","next":"M16-GAP-01980"},"M16-GAP-01980":{"line":1979,"offset":343033,"length":178,"previous":"M16-GAP-01979","next":"M16-GAP-01981"},"M16-GAP-01981":{"line":1980,"offset":343211,"length":179,"previous":"M16-GAP-01980","next":"M16-GAP-01982"},"M16-GAP-01982":{"line":1981,"offset":343390,"length":179,"previous":"M16-GAP-01981","next":"M16-GAP-01983"},"M16-GAP-01983":{"line":1982,"offset":343569,"length":180,"previous":"M16-GAP-01982","next":"M16-GAP-01984"},"M16-GAP-01984":{"line":1983,"offset":343749,"length":181,"previous":"M16-GAP-01983","next":"M16-GAP-01985"},"M16-GAP-01985":{"line":1984,"offset":343930,"length":180,"previous":"M16-GAP-01984","next":"M16-GAP-01986"},"M16-GAP-01986":{"line":1985,"offset":344110,"length":180,"previous":"M16-GAP-01985","next":"M16-GAP-01987"},"M16-GAP-01987":{"line":1986,"offset":344290,"length":180,"previous":"M16-GAP-01986","next":"M16-GAP-01988"},"M16-GAP-01988":{"line":1987,"offset":344470,"length":182,"previous":"M16-GAP-01987","next":"M16-GAP-01989"},"M16-GAP-01989":{"line":1988,"offset":344652,"length":177,"previous":"M16-GAP-01988","next":"M16-GAP-01990"},"M16-GAP-01990":{"line":1989,"offset":344829,"length":178,"previous":"M16-GAP-01989","next":"M16-GAP-01991"},"M16-GAP-01991":{"line":1990,"offset":345007,"length":178,"previous":"M16-GAP-01990","next":"M16-GAP-01992"},"M16-GAP-01992":{"line":1991,"offset":345185,"length":180,"previous":"M16-GAP-01991","next":"M16-GAP-01993"},"M16-GAP-01993":{"line":1992,"offset":345365,"length":189,"previous":"M16-GAP-01992","next":"M16-GAP-01994"},"M16-GAP-01994":{"line":1993,"offset":345554,"length":189,"previous":"M16-GAP-01993","next":"M16-GAP-01995"},"M16-GAP-01995":{"line":1994,"offset":345743,"length":184,"previous":"M16-GAP-01994","next":"M16-GAP-01996"},"M16-GAP-01996":{"line":1995,"offset":345927,"length":181,"previous":"M16-GAP-01995","next":"M16-GAP-01997"},"M16-GAP-01997":{"line":1996,"offset":346108,"length":184,"previous":"M16-GAP-01996","next":"M16-GAP-01998"},"M16-GAP-01998":{"line":1997,"offset":346292,"length":160,"previous":"M16-GAP-01997","next":"M16-GAP-01999"},"M16-GAP-01999":{"line":1998,"offset":346452,"length":170,"previous":"M16-GAP-01998","next":"M16-GAP-02000"},"M16-GAP-02000":{"line":1999,"offset":346622,"length":176,"previous":"M16-GAP-01999","next":"M16-GAP-02001"},"M16-GAP-02001":{"line":2000,"offset":346798,"length":172,"previous":"M16-GAP-02000","next":"M16-GAP-02002"},"M16-GAP-02002":{"line":2001,"offset":346970,"length":175,"previous":"M16-GAP-02001","next":"M16-GAP-02003"},"M16-GAP-02003":{"line":2002,"offset":347145,"length":171,"previous":"M16-GAP-02002","next":"M16-GAP-02004"},"M16-GAP-02004":{"line":2003,"offset":347316,"length":175,"previous":"M16-GAP-02003","next":"M16-GAP-02005"},"M16-GAP-02005":{"line":2004,"offset":347491,"length":182,"previous":"M16-GAP-02004","next":"M16-GAP-02006"},"M16-GAP-02006":{"line":2005,"offset":347673,"length":188,"previous":"M16-GAP-02005","next":"M16-GAP-02007"},"M16-GAP-02007":{"line":2006,"offset":347861,"length":174,"previous":"M16-GAP-02006","next":"M16-GAP-02008"},"M16-GAP-02008":{"line":2007,"offset":348035,"length":178,"previous":"M16-GAP-02007","next":"M16-GAP-02009"},"M16-GAP-02009":{"line":2008,"offset":348213,"length":185,"previous":"M16-GAP-02008","next":"M16-GAP-02010"},"M16-GAP-02010":{"line":2009,"offset":348398,"length":193,"previous":"M16-GAP-02009","next":"M16-GAP-02011"},"M16-GAP-02011":{"line":2010,"offset":348591,"length":168,"previous":"M16-GAP-02010","next":"M16-GAP-02012"},"M16-GAP-02012":{"line":2011,"offset":348759,"length":174,"previous":"M16-GAP-02011","next":"M16-GAP-02013"},"M16-GAP-02013":{"line":2012,"offset":348933,"length":173,"previous":"M16-GAP-02012","next":"M16-GAP-02014"},"M16-GAP-02014":{"line":2013,"offset":349106,"length":172,"previous":"M16-GAP-02013","next":"M16-GAP-02015"},"M16-GAP-02015":{"line":2014,"offset":349278,"length":172,"previous":"M16-GAP-02014","next":"M16-GAP-02016"},"M16-GAP-02016":{"line":2015,"offset":349450,"length":168,"previous":"M16-GAP-02015","next":"M16-GAP-02017"},"M16-GAP-02017":{"line":2016,"offset":349618,"length":168,"previous":"M16-GAP-02016","next":"M16-GAP-02018"},"M16-GAP-02018":{"line":2017,"offset":349786,"length":167,"previous":"M16-GAP-02017","next":"M16-GAP-02019"},"M16-GAP-02019":{"line":2018,"offset":349953,"length":167,"previous":"M16-GAP-02018","next":"M16-GAP-02020"},"M16-GAP-02020":{"line":2019,"offset":350120,"length":170,"previous":"M16-GAP-02019","next":"M16-GAP-02021"},"M16-GAP-02021":{"line":2020,"offset":350290,"length":168,"previous":"M16-GAP-02020","next":"M16-GAP-02022"},"M16-GAP-02022":{"line":2021,"offset":350458,"length":167,"previous":"M16-GAP-02021","next":"M16-GAP-02023"},"M16-GAP-02023":{"line":2022,"offset":350625,"length":174,"previous":"M16-GAP-02022","next":"M16-GAP-02024"},"M16-GAP-02024":{"line":2023,"offset":350799,"length":164,"previous":"M16-GAP-02023","next":"M16-GAP-02025"},"M16-GAP-02025":{"line":2024,"offset":350963,"length":177,"previous":"M16-GAP-02024","next":"M16-GAP-02026"},"M16-GAP-02026":{"line":2025,"offset":351140,"length":168,"previous":"M16-GAP-02025","next":"M16-GAP-02027"},"M16-GAP-02027":{"line":2026,"offset":351308,"length":168,"previous":"M16-GAP-02026","next":"M16-GAP-02028"},"M16-GAP-02028":{"line":2027,"offset":351476,"length":170,"previous":"M16-GAP-02027","next":"M16-GAP-02029"},"M16-GAP-02029":{"line":2028,"offset":351646,"length":177,"previous":"M16-GAP-02028","next":"M16-GAP-02030"},"M16-GAP-02030":{"line":2029,"offset":351823,"length":171,"previous":"M16-GAP-02029","next":"M16-GAP-02031"},"M16-GAP-02031":{"line":2030,"offset":351994,"length":171,"previous":"M16-GAP-02030","next":"M16-GAP-02032"},"M16-GAP-02032":{"line":2031,"offset":352165,"length":169,"previous":"M16-GAP-02031","next":"M16-GAP-02033"},"M16-GAP-02033":{"line":2032,"offset":352334,"length":161,"previous":"M16-GAP-02032","next":"M16-GAP-02034"},"M16-GAP-02034":{"line":2033,"offset":352495,"length":171,"previous":"M16-GAP-02033","next":"M16-GAP-02035"},"M16-GAP-02035":{"line":2034,"offset":352666,"length":167,"previous":"M16-GAP-02034","next":"M16-GAP-02036"},"M16-GAP-02036":{"line":2035,"offset":352833,"length":170,"previous":"M16-GAP-02035","next":"M16-GAP-02037"},"M16-GAP-02037":{"line":2036,"offset":353003,"length":177,"previous":"M16-GAP-02036","next":"M16-GAP-02038"},"M16-GAP-02038":{"line":2037,"offset":353180,"length":169,"previous":"M16-GAP-02037","next":"M16-GAP-02039"},"M16-GAP-02039":{"line":2038,"offset":353349,"length":173,"previous":"M16-GAP-02038","next":"M16-GAP-02040"},"M16-GAP-02040":{"line":2039,"offset":353522,"length":170,"previous":"M16-GAP-02039","next":"M16-GAP-02041"},"M16-GAP-02041":{"line":2040,"offset":353692,"length":171,"previous":"M16-GAP-02040","next":"M16-GAP-02042"},"M16-GAP-02042":{"line":2041,"offset":353863,"length":172,"previous":"M16-GAP-02041","next":"M16-GAP-02043"},"M16-GAP-02043":{"line":2042,"offset":354035,"length":169,"previous":"M16-GAP-02042","next":"M16-GAP-02044"},"M16-GAP-02044":{"line":2043,"offset":354204,"length":174,"previous":"M16-GAP-02043","next":"M16-GAP-02045"},"M16-GAP-02045":{"line":2044,"offset":354378,"length":168,"previous":"M16-GAP-02044","next":"M16-GAP-02046"},"M16-GAP-02046":{"line":2045,"offset":354546,"length":168,"previous":"M16-GAP-02045","next":"M16-GAP-02047"},"M16-GAP-02047":{"line":2046,"offset":354714,"length":173,"previous":"M16-GAP-02046","next":"M16-GAP-02048"},"M16-GAP-02048":{"line":2047,"offset":354887,"length":177,"previous":"M16-GAP-02047","next":"M16-GAP-02049"},"M16-GAP-02049":{"line":2048,"offset":355064,"length":181,"previous":"M16-GAP-02048","next":"M16-GAP-02050"},"M16-GAP-02050":{"line":2049,"offset":355245,"length":175,"previous":"M16-GAP-02049","next":"M16-GAP-02051"},"M16-GAP-02051":{"line":2050,"offset":355420,"length":167,"previous":"M16-GAP-02050","next":"M16-GAP-02052"},"M16-GAP-02052":{"line":2051,"offset":355587,"length":171,"previous":"M16-GAP-02051","next":"M16-GAP-02053"},"M16-GAP-02053":{"line":2052,"offset":355758,"length":173,"previous":"M16-GAP-02052","next":"M16-GAP-02054"},"M16-GAP-02054":{"line":2053,"offset":355931,"length":172,"previous":"M16-GAP-02053","next":"M16-GAP-02055"},"M16-GAP-02055":{"line":2054,"offset":356103,"length":173,"previous":"M16-GAP-02054","next":"M16-GAP-02056"},"M16-GAP-02056":{"line":2055,"offset":356276,"length":164,"previous":"M16-GAP-02055","next":"M16-GAP-02057"},"M16-GAP-02057":{"line":2056,"offset":356440,"length":170,"previous":"M16-GAP-02056","next":"M16-GAP-02058"},"M16-GAP-02058":{"line":2057,"offset":356610,"length":170,"previous":"M16-GAP-02057","next":"M16-GAP-02059"},"M16-GAP-02059":{"line":2058,"offset":356780,"length":170,"previous":"M16-GAP-02058","next":"M16-GAP-02060"},"M16-GAP-02060":{"line":2059,"offset":356950,"length":175,"previous":"M16-GAP-02059","next":"M16-GAP-02061"},"M16-GAP-02061":{"line":2060,"offset":357125,"length":181,"previous":"M16-GAP-02060","next":"M16-GAP-02062"},"M16-GAP-02062":{"line":2061,"offset":357306,"length":182,"previous":"M16-GAP-02061","next":"M16-GAP-02063"},"M16-GAP-02063":{"line":2062,"offset":357488,"length":164,"previous":"M16-GAP-02062","next":"M16-GAP-02064"},"M16-GAP-02064":{"line":2063,"offset":357652,"length":178,"previous":"M16-GAP-02063","next":"M16-GAP-02065"},"M16-GAP-02065":{"line":2064,"offset":357830,"length":184,"previous":"M16-GAP-02064","next":"M16-GAP-02066"},"M16-GAP-02066":{"line":2065,"offset":358014,"length":171,"previous":"M16-GAP-02065","next":"M16-GAP-02067"},"M16-GAP-02067":{"line":2066,"offset":358185,"length":174,"previous":"M16-GAP-02066","next":"M16-GAP-02068"},"M16-GAP-02068":{"line":2067,"offset":358359,"length":180,"previous":"M16-GAP-02067","next":"M16-GAP-02069"},"M16-GAP-02069":{"line":2068,"offset":358539,"length":179,"previous":"M16-GAP-02068","next":"M16-GAP-02070"},"M16-GAP-02070":{"line":2069,"offset":358718,"length":183,"previous":"M16-GAP-02069","next":"M16-GAP-02071"},"M16-GAP-02071":{"line":2070,"offset":358901,"length":174,"previous":"M16-GAP-02070","next":"M16-GAP-02072"},"M16-GAP-02072":{"line":2071,"offset":359075,"length":172,"previous":"M16-GAP-02071","next":"M16-GAP-02073"},"M16-GAP-02073":{"line":2072,"offset":359247,"length":184,"previous":"M16-GAP-02072","next":"M16-GAP-02074"},"M16-GAP-02074":{"line":2073,"offset":359431,"length":171,"previous":"M16-GAP-02073","next":"M16-GAP-02075"},"M16-GAP-02075":{"line":2074,"offset":359602,"length":169,"previous":"M16-GAP-02074","next":"M16-GAP-02076"},"M16-GAP-02076":{"line":2075,"offset":359771,"length":176,"previous":"M16-GAP-02075","next":"M16-GAP-02077"},"M16-GAP-02077":{"line":2076,"offset":359947,"length":174,"previous":"M16-GAP-02076","next":"M16-GAP-02078"},"M16-GAP-02078":{"line":2077,"offset":360121,"length":167,"previous":"M16-GAP-02077","next":"M16-GAP-02079"},"M16-GAP-02079":{"line":2078,"offset":360288,"length":169,"previous":"M16-GAP-02078","next":"M16-GAP-02080"},"M16-GAP-02080":{"line":2079,"offset":360457,"length":166,"previous":"M16-GAP-02079","next":"M16-GAP-02081"},"M16-GAP-02081":{"line":2080,"offset":360623,"length":176,"previous":"M16-GAP-02080","next":"M16-GAP-02082"},"M16-GAP-02082":{"line":2081,"offset":360799,"length":174,"previous":"M16-GAP-02081","next":"M16-GAP-02083"},"M16-GAP-02083":{"line":2082,"offset":360973,"length":178,"previous":"M16-GAP-02082","next":"M16-GAP-02084"},"M16-GAP-02084":{"line":2083,"offset":361151,"length":176,"previous":"M16-GAP-02083","next":"M16-GAP-02085"},"M16-GAP-02085":{"line":2084,"offset":361327,"length":175,"previous":"M16-GAP-02084","next":"M16-GAP-02086"},"M16-GAP-02086":{"line":2085,"offset":361502,"length":177,"previous":"M16-GAP-02085","next":"M16-GAP-02087"},"M16-GAP-02087":{"line":2086,"offset":361679,"length":176,"previous":"M16-GAP-02086","next":"M16-GAP-02088"},"M16-GAP-02088":{"line":2087,"offset":361855,"length":168,"previous":"M16-GAP-02087","next":"M16-GAP-02089"},"M16-GAP-02089":{"line":2088,"offset":362023,"length":174,"previous":"M16-GAP-02088","next":"M16-GAP-02090"},"M16-GAP-02090":{"line":2089,"offset":362197,"length":176,"previous":"M16-GAP-02089","next":"M16-GAP-02091"},"M16-GAP-02091":{"line":2090,"offset":362373,"length":175,"previous":"M16-GAP-02090","next":"M16-GAP-02092"},"M16-GAP-02092":{"line":2091,"offset":362548,"length":179,"previous":"M16-GAP-02091","next":"M16-GAP-02093"},"M16-GAP-02093":{"line":2092,"offset":362727,"length":172,"previous":"M16-GAP-02092","next":"M16-GAP-02094"},"M16-GAP-02094":{"line":2093,"offset":362899,"length":173,"previous":"M16-GAP-02093","next":"M16-GAP-02095"},"M16-GAP-02095":{"line":2094,"offset":363072,"length":173,"previous":"M16-GAP-02094","next":"M16-GAP-02096"},"M16-GAP-02096":{"line":2095,"offset":363245,"length":177,"previous":"M16-GAP-02095","next":"M16-GAP-02097"},"M16-GAP-02097":{"line":2096,"offset":363422,"length":182,"previous":"M16-GAP-02096","next":"M16-GAP-02098"},"M16-GAP-02098":{"line":2097,"offset":363604,"length":176,"previous":"M16-GAP-02097","next":"M16-GAP-02099"},"M16-GAP-02099":{"line":2098,"offset":363780,"length":178,"previous":"M16-GAP-02098","next":"M16-GAP-02100"},"M16-GAP-02100":{"line":2099,"offset":363958,"length":193,"previous":"M16-GAP-02099","next":"M16-GAP-02101"},"M16-GAP-02101":{"line":2100,"offset":364151,"length":170,"previous":"M16-GAP-02100","next":"M16-GAP-02102"},"M16-GAP-02102":{"line":2101,"offset":364321,"length":179,"previous":"M16-GAP-02101","next":"M16-GAP-02103"},"M16-GAP-02103":{"line":2102,"offset":364500,"length":172,"previous":"M16-GAP-02102","next":"M16-GAP-02104"},"M16-GAP-02104":{"line":2103,"offset":364672,"length":173,"previous":"M16-GAP-02103","next":"M16-GAP-02105"},"M16-GAP-02105":{"line":2104,"offset":364845,"length":168,"previous":"M16-GAP-02104","next":"M16-GAP-02106"},"M16-GAP-02106":{"line":2105,"offset":365013,"length":165,"previous":"M16-GAP-02105","next":"M16-GAP-02107"},"M16-GAP-02107":{"line":2106,"offset":365178,"length":177,"previous":"M16-GAP-02106","next":"M16-GAP-02108"},"M16-GAP-02108":{"line":2107,"offset":365355,"length":171,"previous":"M16-GAP-02107","next":"M16-GAP-02109"},"M16-GAP-02109":{"line":2108,"offset":365526,"length":188,"previous":"M16-GAP-02108","next":"M16-GAP-02110"},"M16-GAP-02110":{"line":2109,"offset":365714,"length":167,"previous":"M16-GAP-02109","next":"M16-GAP-02111"},"M16-GAP-02111":{"line":2110,"offset":365881,"length":171,"previous":"M16-GAP-02110","next":"M16-GAP-02112"},"M16-GAP-02112":{"line":2111,"offset":366052,"length":170,"previous":"M16-GAP-02111","next":"M16-GAP-02113"},"M16-GAP-02113":{"line":2112,"offset":366222,"length":175,"previous":"M16-GAP-02112","next":"M16-GAP-02114"},"M16-GAP-02114":{"line":2113,"offset":366397,"length":182,"previous":"M16-GAP-02113","next":"M16-GAP-02115"},"M16-GAP-02115":{"line":2114,"offset":366579,"length":177,"previous":"M16-GAP-02114","next":"M16-GAP-02116"},"M16-GAP-02116":{"line":2115,"offset":366756,"length":175,"previous":"M16-GAP-02115","next":"M16-GAP-02117"},"M16-GAP-02117":{"line":2116,"offset":366931,"length":177,"previous":"M16-GAP-02116","next":"M16-GAP-02118"},"M16-GAP-02118":{"line":2117,"offset":367108,"length":170,"previous":"M16-GAP-02117","next":"M16-GAP-02119"},"M16-GAP-02119":{"line":2118,"offset":367278,"length":172,"previous":"M16-GAP-02118","next":"M16-GAP-02120"},"M16-GAP-02120":{"line":2119,"offset":367450,"length":171,"previous":"M16-GAP-02119","next":"M16-GAP-02121"},"M16-GAP-02121":{"line":2120,"offset":367621,"length":171,"previous":"M16-GAP-02120","next":"M16-GAP-02122"},"M16-GAP-02122":{"line":2121,"offset":367792,"length":176,"previous":"M16-GAP-02121","next":"M16-GAP-02123"},"M16-GAP-02123":{"line":2122,"offset":367968,"length":176,"previous":"M16-GAP-02122","next":"M16-GAP-02124"},"M16-GAP-02124":{"line":2123,"offset":368144,"length":165,"previous":"M16-GAP-02123","next":"M16-GAP-02125"},"M16-GAP-02125":{"line":2124,"offset":368309,"length":175,"previous":"M16-GAP-02124","next":"M16-GAP-02126"},"M16-GAP-02126":{"line":2125,"offset":368484,"length":170,"previous":"M16-GAP-02125","next":"M16-GAP-02127"},"M16-GAP-02127":{"line":2126,"offset":368654,"length":174,"previous":"M16-GAP-02126","next":"M16-GAP-02128"},"M16-GAP-02128":{"line":2127,"offset":368828,"length":172,"previous":"M16-GAP-02127","next":"M16-GAP-02129"},"M16-GAP-02129":{"line":2128,"offset":369000,"length":176,"previous":"M16-GAP-02128","next":"M16-GAP-02130"},"M16-GAP-02130":{"line":2129,"offset":369176,"length":180,"previous":"M16-GAP-02129","next":"M16-GAP-02131"},"M16-GAP-02131":{"line":2130,"offset":369356,"length":165,"previous":"M16-GAP-02130","next":"M16-GAP-02132"},"M16-GAP-02132":{"line":2131,"offset":369521,"length":173,"previous":"M16-GAP-02131","next":"M16-GAP-02133"},"M16-GAP-02133":{"line":2132,"offset":369694,"length":166,"previous":"M16-GAP-02132","next":"M16-GAP-02134"},"M16-GAP-02134":{"line":2133,"offset":369860,"length":183,"previous":"M16-GAP-02133","next":"M16-GAP-02135"},"M16-GAP-02135":{"line":2134,"offset":370043,"length":190,"previous":"M16-GAP-02134","next":"M16-GAP-02136"},"M16-GAP-02136":{"line":2135,"offset":370233,"length":176,"previous":"M16-GAP-02135","next":"M16-GAP-02137"},"M16-GAP-02137":{"line":2136,"offset":370409,"length":174,"previous":"M16-GAP-02136","next":"M16-GAP-02138"},"M16-GAP-02138":{"line":2137,"offset":370583,"length":172,"previous":"M16-GAP-02137","next":"M16-GAP-02139"},"M16-GAP-02139":{"line":2138,"offset":370755,"length":167,"previous":"M16-GAP-02138","next":"M16-GAP-02140"},"M16-GAP-02140":{"line":2139,"offset":370922,"length":175,"previous":"M16-GAP-02139","next":"M16-GAP-02141"},"M16-GAP-02141":{"line":2140,"offset":371097,"length":171,"previous":"M16-GAP-02140","next":"M16-GAP-02142"},"M16-GAP-02142":{"line":2141,"offset":371268,"length":192,"previous":"M16-GAP-02141","next":"M16-GAP-02143"},"M16-GAP-02143":{"line":2142,"offset":371460,"length":190,"previous":"M16-GAP-02142","next":"M16-GAP-02144"},"M16-GAP-02144":{"line":2143,"offset":371650,"length":186,"previous":"M16-GAP-02143","next":"M16-GAP-02145"},"M16-GAP-02145":{"line":2144,"offset":371836,"length":177,"previous":"M16-GAP-02144","next":"M16-GAP-02146"},"M16-GAP-02146":{"line":2145,"offset":372013,"length":180,"previous":"M16-GAP-02145","next":"M16-GAP-02147"},"M16-GAP-02147":{"line":2146,"offset":372193,"length":175,"previous":"M16-GAP-02146","next":"M16-GAP-02148"},"M16-GAP-02148":{"line":2147,"offset":372368,"length":187,"previous":"M16-GAP-02147","next":"M16-GAP-02149"},"M16-GAP-02149":{"line":2148,"offset":372555,"length":174,"previous":"M16-GAP-02148","next":"M16-GAP-02150"},"M16-GAP-02150":{"line":2149,"offset":372729,"length":184,"previous":"M16-GAP-02149","next":"M16-GAP-02151"},"M16-GAP-02151":{"line":2150,"offset":372913,"length":167,"previous":"M16-GAP-02150","next":"M16-GAP-02152"},"M16-GAP-02152":{"line":2151,"offset":373080,"length":185,"previous":"M16-GAP-02151","next":"M16-GAP-02153"},"M16-GAP-02153":{"line":2152,"offset":373265,"length":176,"previous":"M16-GAP-02152","next":"M16-GAP-02154"},"M16-GAP-02154":{"line":2153,"offset":373441,"length":180,"previous":"M16-GAP-02153","next":"M16-GAP-02155"},"M16-GAP-02155":{"line":2154,"offset":373621,"length":167,"previous":"M16-GAP-02154","next":"M16-GAP-02156"},"M16-GAP-02156":{"line":2155,"offset":373788,"length":171,"previous":"M16-GAP-02155","next":"M16-GAP-02157"},"M16-GAP-02157":{"line":2156,"offset":373959,"length":171,"previous":"M16-GAP-02156","next":"M16-GAP-02158"},"M16-GAP-02158":{"line":2157,"offset":374130,"length":174,"previous":"M16-GAP-02157","next":"M16-GAP-02159"},"M16-GAP-02159":{"line":2158,"offset":374304,"length":175,"previous":"M16-GAP-02158","next":"M16-GAP-02160"},"M16-GAP-02160":{"line":2159,"offset":374479,"length":174,"previous":"M16-GAP-02159","next":"M16-GAP-02161"},"M16-GAP-02161":{"line":2160,"offset":374653,"length":175,"previous":"M16-GAP-02160","next":"M16-GAP-02162"},"M16-GAP-02162":{"line":2161,"offset":374828,"length":173,"previous":"M16-GAP-02161","next":"M16-GAP-02163"},"M16-GAP-02163":{"line":2162,"offset":375001,"length":172,"previous":"M16-GAP-02162","next":"M16-GAP-02164"},"M16-GAP-02164":{"line":2163,"offset":375173,"length":174,"previous":"M16-GAP-02163","next":"M16-GAP-02165"},"M16-GAP-02165":{"line":2164,"offset":375347,"length":179,"previous":"M16-GAP-02164","next":"M16-GAP-02166"},"M16-GAP-02166":{"line":2165,"offset":375526,"length":172,"previous":"M16-GAP-02165","next":"M16-GAP-02167"},"M16-GAP-02167":{"line":2166,"offset":375698,"length":172,"previous":"M16-GAP-02166","next":"M16-GAP-02168"},"M16-GAP-02168":{"line":2167,"offset":375870,"length":181,"previous":"M16-GAP-02167","next":"M16-GAP-02169"},"M16-GAP-02169":{"line":2168,"offset":376051,"length":180,"previous":"M16-GAP-02168","next":"M16-GAP-02170"},"M16-GAP-02170":{"line":2169,"offset":376231,"length":165,"previous":"M16-GAP-02169","next":"M16-GAP-02171"},"M16-GAP-02171":{"line":2170,"offset":376396,"length":165,"previous":"M16-GAP-02170","next":"M16-GAP-02172"},"M16-GAP-02172":{"line":2171,"offset":376561,"length":176,"previous":"M16-GAP-02171","next":"M16-GAP-02173"},"M16-GAP-02173":{"line":2172,"offset":376737,"length":166,"previous":"M16-GAP-02172","next":"M16-GAP-02174"},"M16-GAP-02174":{"line":2173,"offset":376903,"length":175,"previous":"M16-GAP-02173","next":"M16-GAP-02175"},"M16-GAP-02175":{"line":2174,"offset":377078,"length":180,"previous":"M16-GAP-02174","next":"M16-GAP-02176"},"M16-GAP-02176":{"line":2175,"offset":377258,"length":171,"previous":"M16-GAP-02175","next":"M16-GAP-02177"},"M16-GAP-02177":{"line":2176,"offset":377429,"length":179,"previous":"M16-GAP-02176","next":"M16-GAP-02178"},"M16-GAP-02178":{"line":2177,"offset":377608,"length":190,"previous":"M16-GAP-02177","next":"M16-GAP-02179"},"M16-GAP-02179":{"line":2178,"offset":377798,"length":180,"previous":"M16-GAP-02178","next":"M16-GAP-02180"},"M16-GAP-02180":{"line":2179,"offset":377978,"length":185,"previous":"M16-GAP-02179","next":"M16-GAP-02181"},"M16-GAP-02181":{"line":2180,"offset":378163,"length":194,"previous":"M16-GAP-02180","next":"M16-GAP-02182"},"M16-GAP-02182":{"line":2181,"offset":378357,"length":180,"previous":"M16-GAP-02181","next":"M16-GAP-02183"},"M16-GAP-02183":{"line":2182,"offset":378537,"length":189,"previous":"M16-GAP-02182","next":"M16-GAP-02184"},"M16-GAP-02184":{"line":2183,"offset":378726,"length":182,"previous":"M16-GAP-02183","next":"M16-GAP-02185"},"M16-GAP-02185":{"line":2184,"offset":378908,"length":186,"previous":"M16-GAP-02184","next":"M16-GAP-02186"},"M16-GAP-02186":{"line":2185,"offset":379094,"length":182,"previous":"M16-GAP-02185","next":"M16-GAP-02187"},"M16-GAP-02187":{"line":2186,"offset":379276,"length":180,"previous":"M16-GAP-02186","next":"M16-GAP-02188"},"M16-GAP-02188":{"line":2187,"offset":379456,"length":165,"previous":"M16-GAP-02187","next":"M16-GAP-02189"},"M16-GAP-02189":{"line":2188,"offset":379621,"length":170,"previous":"M16-GAP-02188","next":"M16-GAP-02190"},"M16-GAP-02190":{"line":2189,"offset":379791,"length":172,"previous":"M16-GAP-02189","next":"M16-GAP-02191"},"M16-GAP-02191":{"line":2190,"offset":379963,"length":177,"previous":"M16-GAP-02190","next":"M16-GAP-02192"},"M16-GAP-02192":{"line":2191,"offset":380140,"length":176,"previous":"M16-GAP-02191","next":"M16-GAP-02193"},"M16-GAP-02193":{"line":2192,"offset":380316,"length":172,"previous":"M16-GAP-02192","next":"M16-GAP-02194"},"M16-GAP-02194":{"line":2193,"offset":380488,"length":178,"previous":"M16-GAP-02193","next":"M16-GAP-02195"},"M16-GAP-02195":{"line":2194,"offset":380666,"length":175,"previous":"M16-GAP-02194","next":"M16-GAP-02196"},"M16-GAP-02196":{"line":2195,"offset":380841,"length":174,"previous":"M16-GAP-02195","next":"M16-GAP-02197"},"M16-GAP-02197":{"line":2196,"offset":381015,"length":182,"previous":"M16-GAP-02196","next":"M16-GAP-02198"},"M16-GAP-02198":{"line":2197,"offset":381197,"length":176,"previous":"M16-GAP-02197","next":"M16-GAP-02199"},"M16-GAP-02199":{"line":2198,"offset":381373,"length":172,"previous":"M16-GAP-02198","next":"M16-GAP-02200"},"M16-GAP-02200":{"line":2199,"offset":381545,"length":176,"previous":"M16-GAP-02199","next":"M16-GAP-02201"},"M16-GAP-02201":{"line":2200,"offset":381721,"length":176,"previous":"M16-GAP-02200","next":"M16-GAP-02202"},"M16-GAP-02202":{"line":2201,"offset":381897,"length":188,"previous":"M16-GAP-02201","next":"M16-GAP-02203"},"M16-GAP-02203":{"line":2202,"offset":382085,"length":167,"previous":"M16-GAP-02202","next":"M16-GAP-02204"},"M16-GAP-02204":{"line":2203,"offset":382252,"length":167,"previous":"M16-GAP-02203","next":"M16-GAP-02205"},"M16-GAP-02205":{"line":2204,"offset":382419,"length":169,"previous":"M16-GAP-02204","next":"M16-GAP-02206"},"M16-GAP-02206":{"line":2205,"offset":382588,"length":177,"previous":"M16-GAP-02205","next":"M16-GAP-02207"},"M16-GAP-02207":{"line":2206,"offset":382765,"length":171,"previous":"M16-GAP-02206","next":"M16-GAP-02208"},"M16-GAP-02208":{"line":2207,"offset":382936,"length":178,"previous":"M16-GAP-02207","next":"M16-GAP-02209"},"M16-GAP-02209":{"line":2208,"offset":383114,"length":174,"previous":"M16-GAP-02208","next":"M16-GAP-02210"},"M16-GAP-02210":{"line":2209,"offset":383288,"length":176,"previous":"M16-GAP-02209","next":"M16-GAP-02211"},"M16-GAP-02211":{"line":2210,"offset":383464,"length":171,"previous":"M16-GAP-02210","next":"M16-GAP-02212"},"M16-GAP-02212":{"line":2211,"offset":383635,"length":164,"previous":"M16-GAP-02211","next":"M16-GAP-02213"},"M16-GAP-02213":{"line":2212,"offset":383799,"length":161,"previous":"M16-GAP-02212","next":"M16-GAP-02214"},"M16-GAP-02214":{"line":2213,"offset":383960,"length":166,"previous":"M16-GAP-02213","next":"M16-GAP-02215"},"M16-GAP-02215":{"line":2214,"offset":384126,"length":161,"previous":"M16-GAP-02214","next":"M16-GAP-02216"},"M16-GAP-02216":{"line":2215,"offset":384287,"length":163,"previous":"M16-GAP-02215","next":"M16-GAP-02217"},"M16-GAP-02217":{"line":2216,"offset":384450,"length":179,"previous":"M16-GAP-02216","next":"M16-GAP-02218"},"M16-GAP-02218":{"line":2217,"offset":384629,"length":182,"previous":"M16-GAP-02217","next":"M16-GAP-02219"},"M16-GAP-02219":{"line":2218,"offset":384811,"length":193,"previous":"M16-GAP-02218","next":"M16-GAP-02220"},"M16-GAP-02220":{"line":2219,"offset":385004,"length":173,"previous":"M16-GAP-02219","next":"M16-GAP-02221"},"M16-GAP-02221":{"line":2220,"offset":385177,"length":185,"previous":"M16-GAP-02220","next":"M16-GAP-02222"},"M16-GAP-02222":{"line":2221,"offset":385362,"length":178,"previous":"M16-GAP-02221","next":"M16-GAP-02223"},"M16-GAP-02223":{"line":2222,"offset":385540,"length":176,"previous":"M16-GAP-02222","next":"M16-GAP-02224"},"M16-GAP-02224":{"line":2223,"offset":385716,"length":173,"previous":"M16-GAP-02223","next":"M16-GAP-02225"},"M16-GAP-02225":{"line":2224,"offset":385889,"length":193,"previous":"M16-GAP-02224","next":"M16-GAP-02226"},"M16-GAP-02226":{"line":2225,"offset":386082,"length":192,"previous":"M16-GAP-02225","next":"M16-GAP-02227"},"M16-GAP-02227":{"line":2226,"offset":386274,"length":195,"previous":"M16-GAP-02226","next":"M16-GAP-02228"},"M16-GAP-02228":{"line":2227,"offset":386469,"length":193,"previous":"M16-GAP-02227","next":"M16-GAP-02229"},"M16-GAP-02229":{"line":2228,"offset":386662,"length":194,"previous":"M16-GAP-02228","next":"M16-GAP-02230"},"M16-GAP-02230":{"line":2229,"offset":386856,"length":192,"previous":"M16-GAP-02229","next":"M16-GAP-02231"},"M16-GAP-02231":{"line":2230,"offset":387048,"length":168,"previous":"M16-GAP-02230","next":"M16-GAP-02232"},"M16-GAP-02232":{"line":2231,"offset":387216,"length":170,"previous":"M16-GAP-02231","next":"M16-GAP-02233"},"M16-GAP-02233":{"line":2232,"offset":387386,"length":174,"previous":"M16-GAP-02232","next":"M16-GAP-02234"},"M16-GAP-02234":{"line":2233,"offset":387560,"length":160,"previous":"M16-GAP-02233","next":"M16-GAP-02235"},"M16-GAP-02235":{"line":2234,"offset":387720,"length":166,"previous":"M16-GAP-02234","next":"M16-GAP-02236"},"M16-GAP-02236":{"line":2235,"offset":387886,"length":159,"previous":"M16-GAP-02235","next":"M16-GAP-02237"},"M16-GAP-02237":{"line":2236,"offset":388045,"length":162,"previous":"M16-GAP-02236","next":"M16-GAP-02238"},"M16-GAP-02238":{"line":2237,"offset":388207,"length":170,"previous":"M16-GAP-02237","next":"M16-GAP-02239"},"M16-GAP-02239":{"line":2238,"offset":388377,"length":160,"previous":"M16-GAP-02238","next":"M16-GAP-02240"},"M16-GAP-02240":{"line":2239,"offset":388537,"length":173,"previous":"M16-GAP-02239","next":"M16-GAP-02241"},"M16-GAP-02241":{"line":2240,"offset":388710,"length":162,"previous":"M16-GAP-02240","next":"M16-GAP-02242"},"M16-GAP-02242":{"line":2241,"offset":388872,"length":178,"previous":"M16-GAP-02241","next":"M16-GAP-02243"},"M16-GAP-02243":{"line":2242,"offset":389050,"length":162,"previous":"M16-GAP-02242","next":"M16-GAP-02244"},"M16-GAP-02244":{"line":2243,"offset":389212,"length":160,"previous":"M16-GAP-02243","next":"M16-GAP-02245"},"M16-GAP-02245":{"line":2244,"offset":389372,"length":177,"previous":"M16-GAP-02244","next":"M16-GAP-02246"},"M16-GAP-02246":{"line":2245,"offset":389549,"length":166,"previous":"M16-GAP-02245","next":"M16-GAP-02247"},"M16-GAP-02247":{"line":2246,"offset":389715,"length":167,"previous":"M16-GAP-02246","next":"M16-GAP-02248"},"M16-GAP-02248":{"line":2247,"offset":389882,"length":169,"previous":"M16-GAP-02247","next":"M16-GAP-02249"},"M16-GAP-02249":{"line":2248,"offset":390051,"length":160,"previous":"M16-GAP-02248","next":"M16-GAP-02250"},"M16-GAP-02250":{"line":2249,"offset":390211,"length":166,"previous":"M16-GAP-02249","next":"M16-GAP-02251"},"M16-GAP-02251":{"line":2250,"offset":390377,"length":167,"previous":"M16-GAP-02250","next":"M16-GAP-02252"},"M16-GAP-02252":{"line":2251,"offset":390544,"length":159,"previous":"M16-GAP-02251","next":"M16-GAP-02253"},"M16-GAP-02253":{"line":2252,"offset":390703,"length":160,"previous":"M16-GAP-02252","next":"M16-GAP-02254"},"M16-GAP-02254":{"line":2253,"offset":390863,"length":172,"previous":"M16-GAP-02253","next":"M16-GAP-02255"},"M16-GAP-02255":{"line":2254,"offset":391035,"length":161,"previous":"M16-GAP-02254","next":"M16-GAP-02256"},"M16-GAP-02256":{"line":2255,"offset":391196,"length":162,"previous":"M16-GAP-02255","next":"M16-GAP-02257"},"M16-GAP-02257":{"line":2256,"offset":391358,"length":163,"previous":"M16-GAP-02256","next":"M16-GAP-02258"},"M16-GAP-02258":{"line":2257,"offset":391521,"length":176,"previous":"M16-GAP-02257","next":"M16-GAP-02259"},"M16-GAP-02259":{"line":2258,"offset":391697,"length":172,"previous":"M16-GAP-02258","next":"M16-GAP-02260"},"M16-GAP-02260":{"line":2259,"offset":391869,"length":166,"previous":"M16-GAP-02259","next":"M16-GAP-02261"},"M16-GAP-02261":{"line":2260,"offset":392035,"length":160,"previous":"M16-GAP-02260","next":"M16-GAP-02262"},"M16-GAP-02262":{"line":2261,"offset":392195,"length":163,"previous":"M16-GAP-02261","next":"M16-GAP-02263"},"M16-GAP-02263":{"line":2262,"offset":392358,"length":162,"previous":"M16-GAP-02262","next":"M16-GAP-02264"},"M16-GAP-02264":{"line":2263,"offset":392520,"length":166,"previous":"M16-GAP-02263","next":"M16-GAP-02265"},"M16-GAP-02265":{"line":2264,"offset":392686,"length":166,"previous":"M16-GAP-02264","next":"M16-GAP-02266"},"M16-GAP-02266":{"line":2265,"offset":392852,"length":167,"previous":"M16-GAP-02265","next":"M16-GAP-02267"},"M16-GAP-02267":{"line":2266,"offset":393019,"length":167,"previous":"M16-GAP-02266","next":"M16-GAP-02268"},"M16-GAP-02268":{"line":2267,"offset":393186,"length":169,"previous":"M16-GAP-02267","next":"M16-GAP-02269"},"M16-GAP-02269":{"line":2268,"offset":393355,"length":166,"previous":"M16-GAP-02268","next":"M16-GAP-02270"},"M16-GAP-02270":{"line":2269,"offset":393521,"length":168,"previous":"M16-GAP-02269","next":"M16-GAP-02271"},"M16-GAP-02271":{"line":2270,"offset":393689,"length":164,"previous":"M16-GAP-02270","next":"M16-GAP-02272"},"M16-GAP-02272":{"line":2271,"offset":393853,"length":162,"previous":"M16-GAP-02271","next":"M16-GAP-02273"},"M16-GAP-02273":{"line":2272,"offset":394015,"length":169,"previous":"M16-GAP-02272","next":"M16-GAP-02274"},"M16-GAP-02274":{"line":2273,"offset":394184,"length":173,"previous":"M16-GAP-02273","next":"M16-GAP-02275"},"M16-GAP-02275":{"line":2274,"offset":394357,"length":162,"previous":"M16-GAP-02274","next":"M16-GAP-02276"},"M16-GAP-02276":{"line":2275,"offset":394519,"length":168,"previous":"M16-GAP-02275","next":"M16-GAP-02277"},"M16-GAP-02277":{"line":2276,"offset":394687,"length":168,"previous":"M16-GAP-02276","next":"M16-GAP-02278"},"M16-GAP-02278":{"line":2277,"offset":394855,"length":169,"previous":"M16-GAP-02277","next":"M16-GAP-02279"},"M16-GAP-02279":{"line":2278,"offset":395024,"length":173,"previous":"M16-GAP-02278","next":"M16-GAP-02280"},"M16-GAP-02280":{"line":2279,"offset":395197,"length":165,"previous":"M16-GAP-02279","next":"M16-GAP-02281"},"M16-GAP-02281":{"line":2280,"offset":395362,"length":179,"previous":"M16-GAP-02280","next":"M16-GAP-02282"},"M16-GAP-02282":{"line":2281,"offset":395541,"length":179,"previous":"M16-GAP-02281","next":"M16-GAP-02283"},"M16-GAP-02283":{"line":2282,"offset":395720,"length":177,"previous":"M16-GAP-02282","next":"M16-GAP-02284"},"M16-GAP-02284":{"line":2283,"offset":395897,"length":172,"previous":"M16-GAP-02283","next":"M16-GAP-02285"},"M16-GAP-02285":{"line":2284,"offset":396069,"length":171,"previous":"M16-GAP-02284","next":"M16-GAP-02286"},"M16-GAP-02286":{"line":2285,"offset":396240,"length":171,"previous":"M16-GAP-02285","next":"M16-GAP-02287"},"M16-GAP-02287":{"line":2286,"offset":396411,"length":167,"previous":"M16-GAP-02286","next":"M16-GAP-02288"},"M16-GAP-02288":{"line":2287,"offset":396578,"length":170,"previous":"M16-GAP-02287","next":"M16-GAP-02289"},"M16-GAP-02289":{"line":2288,"offset":396748,"length":167,"previous":"M16-GAP-02288","next":"M16-GAP-02290"},"M16-GAP-02290":{"line":2289,"offset":396915,"length":167,"previous":"M16-GAP-02289","next":"M16-GAP-02291"},"M16-GAP-02291":{"line":2290,"offset":397082,"length":174,"previous":"M16-GAP-02290","next":"M16-GAP-02292"},"M16-GAP-02292":{"line":2291,"offset":397256,"length":179,"previous":"M16-GAP-02291","next":"M16-GAP-02293"},"M16-GAP-02293":{"line":2292,"offset":397435,"length":170,"previous":"M16-GAP-02292","next":"M16-GAP-02294"},"M16-GAP-02294":{"line":2293,"offset":397605,"length":166,"previous":"M16-GAP-02293","next":"M16-GAP-02295"},"M16-GAP-02295":{"line":2294,"offset":397771,"length":174,"previous":"M16-GAP-02294","next":"M16-GAP-02296"},"M16-GAP-02296":{"line":2295,"offset":397945,"length":172,"previous":"M16-GAP-02295","next":"M16-GAP-02297"},"M16-GAP-02297":{"line":2296,"offset":398117,"length":165,"previous":"M16-GAP-02296","next":"M16-GAP-02298"},"M16-GAP-02298":{"line":2297,"offset":398282,"length":169,"previous":"M16-GAP-02297","next":"M16-GAP-02299"},"M16-GAP-02299":{"line":2298,"offset":398451,"length":170,"previous":"M16-GAP-02298","next":"M16-GAP-02300"},"M16-GAP-02300":{"line":2299,"offset":398621,"length":170,"previous":"M16-GAP-02299","next":"M16-GAP-02301"},"M16-GAP-02301":{"line":2300,"offset":398791,"length":170,"previous":"M16-GAP-02300","next":"M16-GAP-02302"},"M16-GAP-02302":{"line":2301,"offset":398961,"length":172,"previous":"M16-GAP-02301","next":"M16-GAP-02303"},"M16-GAP-02303":{"line":2302,"offset":399133,"length":171,"previous":"M16-GAP-02302","next":"M16-GAP-02304"},"M16-GAP-02304":{"line":2303,"offset":399304,"length":174,"previous":"M16-GAP-02303","next":"M16-GAP-02305"},"M16-GAP-02305":{"line":2304,"offset":399478,"length":172,"previous":"M16-GAP-02304","next":"M16-GAP-02306"},"M16-GAP-02306":{"line":2305,"offset":399650,"length":175,"previous":"M16-GAP-02305","next":"M16-GAP-02307"},"M16-GAP-02307":{"line":2306,"offset":399825,"length":168,"previous":"M16-GAP-02306","next":"M16-GAP-02308"},"M16-GAP-02308":{"line":2307,"offset":399993,"length":173,"previous":"M16-GAP-02307","next":"M16-GAP-02309"},"M16-GAP-02309":{"line":2308,"offset":400166,"length":175,"previous":"M16-GAP-02308","next":"M16-GAP-02310"},"M16-GAP-02310":{"line":2309,"offset":400341,"length":175,"previous":"M16-GAP-02309","next":"M16-GAP-02311"},"M16-GAP-02311":{"line":2310,"offset":400516,"length":184,"previous":"M16-GAP-02310","next":"M16-GAP-02312"},"M16-GAP-02312":{"line":2311,"offset":400700,"length":180,"previous":"M16-GAP-02311","next":"M16-GAP-02313"},"M16-GAP-02313":{"line":2312,"offset":400880,"length":177,"previous":"M16-GAP-02312","next":"M16-GAP-02314"},"M16-GAP-02314":{"line":2313,"offset":401057,"length":164,"previous":"M16-GAP-02313","next":"M16-GAP-02315"},"M16-GAP-02315":{"line":2314,"offset":401221,"length":167,"previous":"M16-GAP-02314","next":"M16-GAP-02316"},"M16-GAP-02316":{"line":2315,"offset":401388,"length":163,"previous":"M16-GAP-02315","next":"M16-GAP-02317"},"M16-GAP-02317":{"line":2316,"offset":401551,"length":164,"previous":"M16-GAP-02316","next":"M16-GAP-02318"},"M16-GAP-02318":{"line":2317,"offset":401715,"length":169,"previous":"M16-GAP-02317","next":"M16-GAP-02319"},"M16-GAP-02319":{"line":2318,"offset":401884,"length":170,"previous":"M16-GAP-02318","next":"M16-GAP-02320"},"M16-GAP-02320":{"line":2319,"offset":402054,"length":174,"previous":"M16-GAP-02319","next":"M16-GAP-02321"},"M16-GAP-02321":{"line":2320,"offset":402228,"length":180,"previous":"M16-GAP-02320","next":"M16-GAP-02322"},"M16-GAP-02322":{"line":2321,"offset":402408,"length":170,"previous":"M16-GAP-02321","next":"M16-GAP-02323"},"M16-GAP-02323":{"line":2322,"offset":402578,"length":171,"previous":"M16-GAP-02322","next":"M16-GAP-02324"},"M16-GAP-02324":{"line":2323,"offset":402749,"length":184,"previous":"M16-GAP-02323","next":"M16-GAP-02325"},"M16-GAP-02325":{"line":2324,"offset":402933,"length":167,"previous":"M16-GAP-02324","next":"M16-GAP-02326"},"M16-GAP-02326":{"line":2325,"offset":403100,"length":175,"previous":"M16-GAP-02325","next":"M16-GAP-02327"},"M16-GAP-02327":{"line":2326,"offset":403275,"length":171,"previous":"M16-GAP-02326","next":"M16-GAP-02328"},"M16-GAP-02328":{"line":2327,"offset":403446,"length":173,"previous":"M16-GAP-02327","next":"M16-GAP-02329"},"M16-GAP-02329":{"line":2328,"offset":403619,"length":179,"previous":"M16-GAP-02328","next":"M16-GAP-02330"},"M16-GAP-02330":{"line":2329,"offset":403798,"length":178,"previous":"M16-GAP-02329","next":"M16-GAP-02331"},"M16-GAP-02331":{"line":2330,"offset":403976,"length":179,"previous":"M16-GAP-02330","next":"M16-GAP-02332"},"M16-GAP-02332":{"line":2331,"offset":404155,"length":176,"previous":"M16-GAP-02331","next":"M16-GAP-02333"},"M16-GAP-02333":{"line":2332,"offset":404331,"length":171,"previous":"M16-GAP-02332","next":"M16-GAP-02334"},"M16-GAP-02334":{"line":2333,"offset":404502,"length":174,"previous":"M16-GAP-02333","next":"M16-GAP-02335"},"M16-GAP-02335":{"line":2334,"offset":404676,"length":175,"previous":"M16-GAP-02334","next":"M16-GAP-02336"},"M16-GAP-02336":{"line":2335,"offset":404851,"length":163,"previous":"M16-GAP-02335","next":"M16-GAP-02337"},"M16-GAP-02337":{"line":2336,"offset":405014,"length":170,"previous":"M16-GAP-02336","next":"M16-GAP-02338"},"M16-GAP-02338":{"line":2337,"offset":405184,"length":169,"previous":"M16-GAP-02337","next":"M16-GAP-02339"},"M16-GAP-02339":{"line":2338,"offset":405353,"length":172,"previous":"M16-GAP-02338","next":"M16-GAP-02340"},"M16-GAP-02340":{"line":2339,"offset":405525,"length":170,"previous":"M16-GAP-02339","next":"M16-GAP-02341"},"M16-GAP-02341":{"line":2340,"offset":405695,"length":170,"previous":"M16-GAP-02340","next":"M16-GAP-02342"},"M16-GAP-02342":{"line":2341,"offset":405865,"length":165,"previous":"M16-GAP-02341","next":"M16-GAP-02343"},"M16-GAP-02343":{"line":2342,"offset":406030,"length":171,"previous":"M16-GAP-02342","next":"M16-GAP-02344"},"M16-GAP-02344":{"line":2343,"offset":406201,"length":167,"previous":"M16-GAP-02343","next":"M16-GAP-02345"},"M16-GAP-02345":{"line":2344,"offset":406368,"length":168,"previous":"M16-GAP-02344","next":"M16-GAP-02346"},"M16-GAP-02346":{"line":2345,"offset":406536,"length":170,"previous":"M16-GAP-02345","next":"M16-GAP-02347"},"M16-GAP-02347":{"line":2346,"offset":406706,"length":159,"previous":"M16-GAP-02346","next":"M16-GAP-02348"},"M16-GAP-02348":{"line":2347,"offset":406865,"length":168,"previous":"M16-GAP-02347","next":"M16-GAP-02349"},"M16-GAP-02349":{"line":2348,"offset":407033,"length":169,"previous":"M16-GAP-02348","next":"M16-GAP-02350"},"M16-GAP-02350":{"line":2349,"offset":407202,"length":175,"previous":"M16-GAP-02349","next":"M16-GAP-02351"},"M16-GAP-02351":{"line":2350,"offset":407377,"length":158,"previous":"M16-GAP-02350","next":"M16-GAP-02352"},"M16-GAP-02352":{"line":2351,"offset":407535,"length":173,"previous":"M16-GAP-02351","next":"M16-GAP-02353"},"M16-GAP-02353":{"line":2352,"offset":407708,"length":166,"previous":"M16-GAP-02352","next":"M16-GAP-02354"},"M16-GAP-02354":{"line":2353,"offset":407874,"length":164,"previous":"M16-GAP-02353","next":"M16-GAP-02355"},"M16-GAP-02355":{"line":2354,"offset":408038,"length":171,"previous":"M16-GAP-02354","next":"M16-GAP-02356"},"M16-GAP-02356":{"line":2355,"offset":408209,"length":170,"previous":"M16-GAP-02355","next":"M16-GAP-02357"},"M16-GAP-02357":{"line":2356,"offset":408379,"length":167,"previous":"M16-GAP-02356","next":"M16-GAP-02358"},"M16-GAP-02358":{"line":2357,"offset":408546,"length":173,"previous":"M16-GAP-02357","next":"M16-GAP-02359"},"M16-GAP-02359":{"line":2358,"offset":408719,"length":158,"previous":"M16-GAP-02358","next":"M16-GAP-02360"},"M16-GAP-02360":{"line":2359,"offset":408877,"length":167,"previous":"M16-GAP-02359","next":"M16-GAP-02361"},"M16-GAP-02361":{"line":2360,"offset":409044,"length":163,"previous":"M16-GAP-02360","next":"M16-GAP-02362"},"M16-GAP-02362":{"line":2361,"offset":409207,"length":170,"previous":"M16-GAP-02361","next":"M16-GAP-02363"},"M16-GAP-02363":{"line":2362,"offset":409377,"length":166,"previous":"M16-GAP-02362","next":"M16-GAP-02364"},"M16-GAP-02364":{"line":2363,"offset":409543,"length":166,"previous":"M16-GAP-02363","next":"M16-GAP-02365"},"M16-GAP-02365":{"line":2364,"offset":409709,"length":159,"previous":"M16-GAP-02364","next":"M16-GAP-02366"},"M16-GAP-02366":{"line":2365,"offset":409868,"length":157,"previous":"M16-GAP-02365","next":"M16-GAP-02367"},"M16-GAP-02367":{"line":2366,"offset":410025,"length":171,"previous":"M16-GAP-02366","next":"M16-GAP-02368"},"M16-GAP-02368":{"line":2367,"offset":410196,"length":176,"previous":"M16-GAP-02367","next":"M16-GAP-02369"},"M16-GAP-02369":{"line":2368,"offset":410372,"length":168,"previous":"M16-GAP-02368","next":"M16-GAP-02370"},"M16-GAP-02370":{"line":2369,"offset":410540,"length":159,"previous":"M16-GAP-02369","next":"M16-GAP-02371"},"M16-GAP-02371":{"line":2370,"offset":410699,"length":160,"previous":"M16-GAP-02370","next":"M16-GAP-02372"},"M16-GAP-02372":{"line":2371,"offset":410859,"length":157,"previous":"M16-GAP-02371","next":"M16-GAP-02373"},"M16-GAP-02373":{"line":2372,"offset":411016,"length":162,"previous":"M16-GAP-02372","next":"M16-GAP-02374"},"M16-GAP-02374":{"line":2373,"offset":411178,"length":172,"previous":"M16-GAP-02373","next":"M16-GAP-02375"},"M16-GAP-02375":{"line":2374,"offset":411350,"length":160,"previous":"M16-GAP-02374","next":"M16-GAP-02376"},"M16-GAP-02376":{"line":2375,"offset":411510,"length":164,"previous":"M16-GAP-02375","next":"M16-GAP-02377"},"M16-GAP-02377":{"line":2376,"offset":411674,"length":164,"previous":"M16-GAP-02376","next":"M16-GAP-02378"},"M16-GAP-02378":{"line":2377,"offset":411838,"length":171,"previous":"M16-GAP-02377","next":"M16-GAP-02379"},"M16-GAP-02379":{"line":2378,"offset":412009,"length":167,"previous":"M16-GAP-02378","next":"M16-GAP-02380"},"M16-GAP-02380":{"line":2379,"offset":412176,"length":170,"previous":"M16-GAP-02379","next":"M16-GAP-02381"},"M16-GAP-02381":{"line":2380,"offset":412346,"length":166,"previous":"M16-GAP-02380","next":"M16-GAP-02382"},"M16-GAP-02382":{"line":2381,"offset":412512,"length":165,"previous":"M16-GAP-02381","next":"M16-GAP-02383"},"M16-GAP-02383":{"line":2382,"offset":412677,"length":167,"previous":"M16-GAP-02382","next":"M16-GAP-02384"},"M16-GAP-02384":{"line":2383,"offset":412844,"length":172,"previous":"M16-GAP-02383","next":"M16-GAP-02385"},"M16-GAP-02385":{"line":2384,"offset":413016,"length":165,"previous":"M16-GAP-02384","next":"M16-GAP-02386"},"M16-GAP-02386":{"line":2385,"offset":413181,"length":165,"previous":"M16-GAP-02385","next":"M16-GAP-02387"},"M16-GAP-02387":{"line":2386,"offset":413346,"length":165,"previous":"M16-GAP-02386","next":"M16-GAP-02388"},"M16-GAP-02388":{"line":2387,"offset":413511,"length":168,"previous":"M16-GAP-02387","next":"M16-GAP-02389"},"M16-GAP-02389":{"line":2388,"offset":413679,"length":167,"previous":"M16-GAP-02388","next":"M16-GAP-02390"},"M16-GAP-02390":{"line":2389,"offset":413846,"length":168,"previous":"M16-GAP-02389","next":"M16-GAP-02391"},"M16-GAP-02391":{"line":2390,"offset":414014,"length":166,"previous":"M16-GAP-02390","next":"M16-GAP-02392"},"M16-GAP-02392":{"line":2391,"offset":414180,"length":165,"previous":"M16-GAP-02391","next":"M16-GAP-02393"},"M16-GAP-02393":{"line":2392,"offset":414345,"length":172,"previous":"M16-GAP-02392","next":"M16-GAP-02394"},"M16-GAP-02394":{"line":2393,"offset":414517,"length":174,"previous":"M16-GAP-02393","next":"M16-GAP-02395"},"M16-GAP-02395":{"line":2394,"offset":414691,"length":167,"previous":"M16-GAP-02394","next":"M16-GAP-02396"},"M16-GAP-02396":{"line":2395,"offset":414858,"length":165,"previous":"M16-GAP-02395","next":"M16-GAP-02397"},"M16-GAP-02397":{"line":2396,"offset":415023,"length":167,"previous":"M16-GAP-02396","next":"M16-GAP-02398"},"M16-GAP-02398":{"line":2397,"offset":415190,"length":168,"previous":"M16-GAP-02397","next":"M16-GAP-02399"},"M16-GAP-02399":{"line":2398,"offset":415358,"length":160,"previous":"M16-GAP-02398","next":"M16-GAP-02400"},"M16-GAP-02400":{"line":2399,"offset":415518,"length":160,"previous":"M16-GAP-02399","next":"M16-GAP-02401"},"M16-GAP-02401":{"line":2400,"offset":415678,"length":158,"previous":"M16-GAP-02400","next":"M16-GAP-02402"},"M16-GAP-02402":{"line":2401,"offset":415836,"length":166,"previous":"M16-GAP-02401","next":"M16-GAP-02403"},"M16-GAP-02403":{"line":2402,"offset":416002,"length":162,"previous":"M16-GAP-02402","next":"M16-GAP-02404"},"M16-GAP-02404":{"line":2403,"offset":416164,"length":161,"previous":"M16-GAP-02403","next":"M16-GAP-02405"},"M16-GAP-02405":{"line":2404,"offset":416325,"length":163,"previous":"M16-GAP-02404","next":"M16-GAP-02406"},"M16-GAP-02406":{"line":2405,"offset":416488,"length":169,"previous":"M16-GAP-02405","next":"M16-GAP-02407"},"M16-GAP-02407":{"line":2406,"offset":416657,"length":169,"previous":"M16-GAP-02406","next":"M16-GAP-02408"},"M16-GAP-02408":{"line":2407,"offset":416826,"length":170,"previous":"M16-GAP-02407","next":"M16-GAP-02409"},"M16-GAP-02409":{"line":2408,"offset":416996,"length":167,"previous":"M16-GAP-02408","next":"M16-GAP-02410"},"M16-GAP-02410":{"line":2409,"offset":417163,"length":175,"previous":"M16-GAP-02409","next":"M16-GAP-02411"},"M16-GAP-02411":{"line":2410,"offset":417338,"length":168,"previous":"M16-GAP-02410","next":"M16-GAP-02412"},"M16-GAP-02412":{"line":2411,"offset":417506,"length":162,"previous":"M16-GAP-02411","next":"M16-GAP-02413"},"M16-GAP-02413":{"line":2412,"offset":417668,"length":169,"previous":"M16-GAP-02412","next":"M16-GAP-02414"},"M16-GAP-02414":{"line":2413,"offset":417837,"length":165,"previous":"M16-GAP-02413","next":"M16-GAP-02415"},"M16-GAP-02415":{"line":2414,"offset":418002,"length":166,"previous":"M16-GAP-02414","next":"M16-GAP-02416"},"M16-GAP-02416":{"line":2415,"offset":418168,"length":174,"previous":"M16-GAP-02415","next":"M16-GAP-02417"},"M16-GAP-02417":{"line":2416,"offset":418342,"length":185,"previous":"M16-GAP-02416","next":"M16-GAP-02418"},"M16-GAP-02418":{"line":2417,"offset":418527,"length":188,"previous":"M16-GAP-02417","next":"M16-GAP-02419"},"M16-GAP-02419":{"line":2418,"offset":418715,"length":172,"previous":"M16-GAP-02418","next":"M16-GAP-02420"},"M16-GAP-02420":{"line":2419,"offset":418887,"length":181,"previous":"M16-GAP-02419","next":"M16-GAP-02421"},"M16-GAP-02421":{"line":2420,"offset":419068,"length":177,"previous":"M16-GAP-02420","next":"M16-GAP-02422"},"M16-GAP-02422":{"line":2421,"offset":419245,"length":169,"previous":"M16-GAP-02421","next":"M16-GAP-02423"},"M16-GAP-02423":{"line":2422,"offset":419414,"length":168,"previous":"M16-GAP-02422","next":"M16-GAP-02424"},"M16-GAP-02424":{"line":2423,"offset":419582,"length":166,"previous":"M16-GAP-02423","next":"M16-GAP-02425"},"M16-GAP-02425":{"line":2424,"offset":419748,"length":163,"previous":"M16-GAP-02424","next":"M16-GAP-02426"},"M16-GAP-02426":{"line":2425,"offset":419911,"length":168,"previous":"M16-GAP-02425","next":"M16-GAP-02427"},"M16-GAP-02427":{"line":2426,"offset":420079,"length":191,"previous":"M16-GAP-02426","next":"M16-GAP-02428"},"M16-GAP-02428":{"line":2427,"offset":420270,"length":191,"previous":"M16-GAP-02427","next":"M16-GAP-02429"},"M16-GAP-02429":{"line":2428,"offset":420461,"length":187,"previous":"M16-GAP-02428","next":"M16-GAP-02430"},"M16-GAP-02430":{"line":2429,"offset":420648,"length":194,"previous":"M16-GAP-02429","next":"M16-GAP-02431"},"M16-GAP-02431":{"line":2430,"offset":420842,"length":161,"previous":"M16-GAP-02430","next":"M16-GAP-02432"},"M16-GAP-02432":{"line":2431,"offset":421003,"length":173,"previous":"M16-GAP-02431","next":"M16-GAP-02433"},"M16-GAP-02433":{"line":2432,"offset":421176,"length":167,"previous":"M16-GAP-02432","next":"M16-GAP-02434"},"M16-GAP-02434":{"line":2433,"offset":421343,"length":179,"previous":"M16-GAP-02433","next":"M16-GAP-02435"},"M16-GAP-02435":{"line":2434,"offset":421522,"length":162,"previous":"M16-GAP-02434","next":"M16-GAP-02436"},"M16-GAP-02436":{"line":2435,"offset":421684,"length":166,"previous":"M16-GAP-02435","next":"M16-GAP-02437"},"M16-GAP-02437":{"line":2436,"offset":421850,"length":166,"previous":"M16-GAP-02436","next":"M16-GAP-02438"},"M16-GAP-02438":{"line":2437,"offset":422016,"length":168,"previous":"M16-GAP-02437","next":"M16-GAP-02439"},"M16-GAP-02439":{"line":2438,"offset":422184,"length":173,"previous":"M16-GAP-02438","next":"M16-GAP-02440"},"M16-GAP-02440":{"line":2439,"offset":422357,"length":166,"previous":"M16-GAP-02439","next":"M16-GAP-02441"},"M16-GAP-02441":{"line":2440,"offset":422523,"length":174,"previous":"M16-GAP-02440","next":"M16-GAP-02442"},"M16-GAP-02442":{"line":2441,"offset":422697,"length":183,"previous":"M16-GAP-02441","next":"M16-GAP-02443"},"M16-GAP-02443":{"line":2442,"offset":422880,"length":169,"previous":"M16-GAP-02442","next":"M16-GAP-02444"},"M16-GAP-02444":{"line":2443,"offset":423049,"length":171,"previous":"M16-GAP-02443","next":"M16-GAP-02445"},"M16-GAP-02445":{"line":2444,"offset":423220,"length":164,"previous":"M16-GAP-02444","next":"M16-GAP-02446"},"M16-GAP-02446":{"line":2445,"offset":423384,"length":167,"previous":"M16-GAP-02445","next":"M16-GAP-02447"},"M16-GAP-02447":{"line":2446,"offset":423551,"length":170,"previous":"M16-GAP-02446","next":"M16-GAP-02448"},"M16-GAP-02448":{"line":2447,"offset":423721,"length":164,"previous":"M16-GAP-02447","next":"M16-GAP-02449"},"M16-GAP-02449":{"line":2448,"offset":423885,"length":168,"previous":"M16-GAP-02448","next":"M16-GAP-02450"},"M16-GAP-02450":{"line":2449,"offset":424053,"length":171,"previous":"M16-GAP-02449","next":"M16-GAP-02451"},"M16-GAP-02451":{"line":2450,"offset":424224,"length":170,"previous":"M16-GAP-02450","next":"M16-GAP-02452"},"M16-GAP-02452":{"line":2451,"offset":424394,"length":169,"previous":"M16-GAP-02451","next":"M16-GAP-02453"},"M16-GAP-02453":{"line":2452,"offset":424563,"length":168,"previous":"M16-GAP-02452","next":"M16-GAP-02454"},"M16-GAP-02454":{"line":2453,"offset":424731,"length":179,"previous":"M16-GAP-02453","next":"M16-GAP-02455"},"M16-GAP-02455":{"line":2454,"offset":424910,"length":179,"previous":"M16-GAP-02454","next":"M16-GAP-02456"},"M16-GAP-02456":{"line":2455,"offset":425089,"length":177,"previous":"M16-GAP-02455","next":"M16-GAP-02457"},"M16-GAP-02457":{"line":2456,"offset":425266,"length":181,"previous":"M16-GAP-02456","next":"M16-GAP-02458"},"M16-GAP-02458":{"line":2457,"offset":425447,"length":181,"previous":"M16-GAP-02457","next":"M16-GAP-02459"},"M16-GAP-02459":{"line":2458,"offset":425628,"length":181,"previous":"M16-GAP-02458","next":"M16-GAP-02460"},"M16-GAP-02460":{"line":2459,"offset":425809,"length":179,"previous":"M16-GAP-02459","next":"M16-GAP-02461"},"M16-GAP-02461":{"line":2460,"offset":425988,"length":176,"previous":"M16-GAP-02460","next":"M16-GAP-02462"},"M16-GAP-02462":{"line":2461,"offset":426164,"length":172,"previous":"M16-GAP-02461","next":"M16-GAP-02463"},"M16-GAP-02463":{"line":2462,"offset":426336,"length":169,"previous":"M16-GAP-02462","next":"M16-GAP-02464"},"M16-GAP-02464":{"line":2463,"offset":426505,"length":177,"previous":"M16-GAP-02463","next":"M16-GAP-02465"},"M16-GAP-02465":{"line":2464,"offset":426682,"length":166,"previous":"M16-GAP-02464","next":"M16-GAP-02466"},"M16-GAP-02466":{"line":2465,"offset":426848,"length":167,"previous":"M16-GAP-02465","next":"M16-GAP-02467"},"M16-GAP-02467":{"line":2466,"offset":427015,"length":169,"previous":"M16-GAP-02466","next":"M16-GAP-02468"},"M16-GAP-02468":{"line":2467,"offset":427184,"length":176,"previous":"M16-GAP-02467","next":"M16-GAP-02469"},"M16-GAP-02469":{"line":2468,"offset":427360,"length":176,"previous":"M16-GAP-02468","next":"M16-GAP-02470"},"M16-GAP-02470":{"line":2469,"offset":427536,"length":174,"previous":"M16-GAP-02469","next":"M16-GAP-02471"},"M16-GAP-02471":{"line":2470,"offset":427710,"length":174,"previous":"M16-GAP-02470","next":"M16-GAP-02472"},"M16-GAP-02472":{"line":2471,"offset":427884,"length":173,"previous":"M16-GAP-02471","next":"M16-GAP-02473"},"M16-GAP-02473":{"line":2472,"offset":428057,"length":177,"previous":"M16-GAP-02472","next":"M16-GAP-02474"},"M16-GAP-02474":{"line":2473,"offset":428234,"length":168,"previous":"M16-GAP-02473","next":"M16-GAP-02475"},"M16-GAP-02475":{"line":2474,"offset":428402,"length":166,"previous":"M16-GAP-02474","next":"M16-GAP-02476"},"M16-GAP-02476":{"line":2475,"offset":428568,"length":173,"previous":"M16-GAP-02475","next":"M16-GAP-02477"},"M16-GAP-02477":{"line":2476,"offset":428741,"length":167,"previous":"M16-GAP-02476","next":"M16-GAP-02478"},"M16-GAP-02478":{"line":2477,"offset":428908,"length":171,"previous":"M16-GAP-02477","next":"M16-GAP-02479"},"M16-GAP-02479":{"line":2478,"offset":429079,"length":162,"previous":"M16-GAP-02478","next":"M16-GAP-02480"},"M16-GAP-02480":{"line":2479,"offset":429241,"length":162,"previous":"M16-GAP-02479","next":"M16-GAP-02481"},"M16-GAP-02481":{"line":2480,"offset":429403,"length":169,"previous":"M16-GAP-02480","next":"M16-GAP-02482"},"M16-GAP-02482":{"line":2481,"offset":429572,"length":176,"previous":"M16-GAP-02481","next":"M16-GAP-02483"},"M16-GAP-02483":{"line":2482,"offset":429748,"length":160,"previous":"M16-GAP-02482","next":"M16-GAP-02484"},"M16-GAP-02484":{"line":2483,"offset":429908,"length":166,"previous":"M16-GAP-02483","next":"M16-GAP-02485"},"M16-GAP-02485":{"line":2484,"offset":430074,"length":181,"previous":"M16-GAP-02484","next":"M16-GAP-02486"},"M16-GAP-02486":{"line":2485,"offset":430255,"length":178,"previous":"M16-GAP-02485","next":"M16-GAP-02487"},"M16-GAP-02487":{"line":2486,"offset":430433,"length":163,"previous":"M16-GAP-02486","next":"M16-GAP-02488"},"M16-GAP-02488":{"line":2487,"offset":430596,"length":167,"previous":"M16-GAP-02487","next":"M16-GAP-02489"},"M16-GAP-02489":{"line":2488,"offset":430763,"length":164,"previous":"M16-GAP-02488","next":"M16-GAP-02490"},"M16-GAP-02490":{"line":2489,"offset":430927,"length":172,"previous":"M16-GAP-02489","next":"M16-GAP-02491"},"M16-GAP-02491":{"line":2490,"offset":431099,"length":175,"previous":"M16-GAP-02490","next":"M16-GAP-02492"},"M16-GAP-02492":{"line":2491,"offset":431274,"length":184,"previous":"M16-GAP-02491","next":"M16-GAP-02493"},"M16-GAP-02493":{"line":2492,"offset":431458,"length":173,"previous":"M16-GAP-02492","next":"M16-GAP-02494"},"M16-GAP-02494":{"line":2493,"offset":431631,"length":172,"previous":"M16-GAP-02493","next":"M16-GAP-02495"},"M16-GAP-02495":{"line":2494,"offset":431803,"length":171,"previous":"M16-GAP-02494","next":"M16-GAP-02496"},"M16-GAP-02496":{"line":2495,"offset":431974,"length":171,"previous":"M16-GAP-02495","next":"M16-GAP-02497"},"M16-GAP-02497":{"line":2496,"offset":432145,"length":173,"previous":"M16-GAP-02496","next":"M16-GAP-02498"},"M16-GAP-02498":{"line":2497,"offset":432318,"length":170,"previous":"M16-GAP-02497","next":"M16-GAP-02499"},"M16-GAP-02499":{"line":2498,"offset":432488,"length":173,"previous":"M16-GAP-02498","next":"M16-GAP-02500"},"M16-GAP-02500":{"line":2499,"offset":432661,"length":171,"previous":"M16-GAP-02499","next":"M16-GAP-02501"},"M16-GAP-02501":{"line":2500,"offset":432832,"length":173,"previous":"M16-GAP-02500","next":"M16-GAP-02502"},"M16-GAP-02502":{"line":2501,"offset":433005,"length":170,"previous":"M16-GAP-02501","next":"M16-GAP-02503"},"M16-GAP-02503":{"line":2502,"offset":433175,"length":171,"previous":"M16-GAP-02502","next":"M16-GAP-02504"},"M16-GAP-02504":{"line":2503,"offset":433346,"length":168,"previous":"M16-GAP-02503","next":"M16-GAP-02505"},"M16-GAP-02505":{"line":2504,"offset":433514,"length":169,"previous":"M16-GAP-02504","next":"M16-GAP-02506"},"M16-GAP-02506":{"line":2505,"offset":433683,"length":172,"previous":"M16-GAP-02505","next":"M16-GAP-02507"},"M16-GAP-02507":{"line":2506,"offset":433855,"length":171,"previous":"M16-GAP-02506","next":"M16-GAP-02508"},"M16-GAP-02508":{"line":2507,"offset":434026,"length":168,"previous":"M16-GAP-02507","next":"M16-GAP-02509"},"M16-GAP-02509":{"line":2508,"offset":434194,"length":173,"previous":"M16-GAP-02508","next":"M16-GAP-02510"},"M16-GAP-02510":{"line":2509,"offset":434367,"length":164,"previous":"M16-GAP-02509","next":"M16-GAP-02511"},"M16-GAP-02511":{"line":2510,"offset":434531,"length":162,"previous":"M16-GAP-02510","next":"M16-GAP-02512"},"M16-GAP-02512":{"line":2511,"offset":434693,"length":169,"previous":"M16-GAP-02511","next":"M16-GAP-02513"},"M16-GAP-02513":{"line":2512,"offset":434862,"length":180,"previous":"M16-GAP-02512","next":"M16-GAP-02514"},"M16-GAP-02514":{"line":2513,"offset":435042,"length":169,"previous":"M16-GAP-02513","next":"M16-GAP-02515"},"M16-GAP-02515":{"line":2514,"offset":435211,"length":170,"previous":"M16-GAP-02514","next":"M16-GAP-02516"},"M16-GAP-02516":{"line":2515,"offset":435381,"length":164,"previous":"M16-GAP-02515","next":"M16-GAP-02517"},"M16-GAP-02517":{"line":2516,"offset":435545,"length":178,"previous":"M16-GAP-02516","next":"M16-GAP-02518"},"M16-GAP-02518":{"line":2517,"offset":435723,"length":178,"previous":"M16-GAP-02517","next":"M16-GAP-02519"},"M16-GAP-02519":{"line":2518,"offset":435901,"length":172,"previous":"M16-GAP-02518","next":"M16-GAP-02520"},"M16-GAP-02520":{"line":2519,"offset":436073,"length":180,"previous":"M16-GAP-02519","next":"M16-GAP-02521"},"M16-GAP-02521":{"line":2520,"offset":436253,"length":183,"previous":"M16-GAP-02520","next":"M16-GAP-02522"},"M16-GAP-02522":{"line":2521,"offset":436436,"length":181,"previous":"M16-GAP-02521","next":"M16-GAP-02523"},"M16-GAP-02523":{"line":2522,"offset":436617,"length":174,"previous":"M16-GAP-02522","next":"M16-GAP-02524"},"M16-GAP-02524":{"line":2523,"offset":436791,"length":177,"previous":"M16-GAP-02523","next":"M16-GAP-02525"},"M16-GAP-02525":{"line":2524,"offset":436968,"length":164,"previous":"M16-GAP-02524","next":"M16-GAP-02526"},"M16-GAP-02526":{"line":2525,"offset":437132,"length":166,"previous":"M16-GAP-02525","next":"M16-GAP-02527"},"M16-GAP-02527":{"line":2526,"offset":437298,"length":158,"previous":"M16-GAP-02526","next":"M16-GAP-02528"},"M16-GAP-02528":{"line":2527,"offset":437456,"length":171,"previous":"M16-GAP-02527","next":"M16-GAP-02529"},"M16-GAP-02529":{"line":2528,"offset":437627,"length":164,"previous":"M16-GAP-02528","next":"M16-GAP-02530"},"M16-GAP-02530":{"line":2529,"offset":437791,"length":164,"previous":"M16-GAP-02529","next":"M16-GAP-02531"},"M16-GAP-02531":{"line":2530,"offset":437955,"length":167,"previous":"M16-GAP-02530","next":"M16-GAP-02532"},"M16-GAP-02532":{"line":2531,"offset":438122,"length":174,"previous":"M16-GAP-02531","next":"M16-GAP-02533"},"M16-GAP-02533":{"line":2532,"offset":438296,"length":171,"previous":"M16-GAP-02532","next":"M16-GAP-02534"},"M16-GAP-02534":{"line":2533,"offset":438467,"length":171,"previous":"M16-GAP-02533","next":"M16-GAP-02535"},"M16-GAP-02535":{"line":2534,"offset":438638,"length":173,"previous":"M16-GAP-02534","next":"M16-GAP-02536"},"M16-GAP-02536":{"line":2535,"offset":438811,"length":178,"previous":"M16-GAP-02535","next":"M16-GAP-02537"},"M16-GAP-02537":{"line":2536,"offset":438989,"length":167,"previous":"M16-GAP-02536","next":"M16-GAP-02538"},"M16-GAP-02538":{"line":2537,"offset":439156,"length":166,"previous":"M16-GAP-02537","next":"M16-GAP-02539"},"M16-GAP-02539":{"line":2538,"offset":439322,"length":163,"previous":"M16-GAP-02538","next":"M16-GAP-02540"},"M16-GAP-02540":{"line":2539,"offset":439485,"length":164,"previous":"M16-GAP-02539","next":"M16-GAP-02541"},"M16-GAP-02541":{"line":2540,"offset":439649,"length":164,"previous":"M16-GAP-02540","next":"M16-GAP-02542"},"M16-GAP-02542":{"line":2541,"offset":439813,"length":174,"previous":"M16-GAP-02541","next":"M16-GAP-02543"},"M16-GAP-02543":{"line":2542,"offset":439987,"length":177,"previous":"M16-GAP-02542","next":"M16-GAP-02544"},"M16-GAP-02544":{"line":2543,"offset":440164,"length":168,"previous":"M16-GAP-02543","next":"M16-GAP-02545"},"M16-GAP-02545":{"line":2544,"offset":440332,"length":169,"previous":"M16-GAP-02544","next":"M16-GAP-02546"},"M16-GAP-02546":{"line":2545,"offset":440501,"length":168,"previous":"M16-GAP-02545","next":"M16-GAP-02547"},"M16-GAP-02547":{"line":2546,"offset":440669,"length":179,"previous":"M16-GAP-02546","next":"M16-GAP-02548"},"M16-GAP-02548":{"line":2547,"offset":440848,"length":169,"previous":"M16-GAP-02547","next":"M16-GAP-02549"},"M16-GAP-02549":{"line":2548,"offset":441017,"length":175,"previous":"M16-GAP-02548","next":"M16-GAP-02550"},"M16-GAP-02550":{"line":2549,"offset":441192,"length":171,"previous":"M16-GAP-02549","next":"M16-GAP-02551"},"M16-GAP-02551":{"line":2550,"offset":441363,"length":166,"previous":"M16-GAP-02550","next":"M16-GAP-02552"},"M16-GAP-02552":{"line":2551,"offset":441529,"length":168,"previous":"M16-GAP-02551","next":"M16-GAP-02553"},"M16-GAP-02553":{"line":2552,"offset":441697,"length":175,"previous":"M16-GAP-02552","next":"M16-GAP-02554"},"M16-GAP-02554":{"line":2553,"offset":441872,"length":175,"previous":"M16-GAP-02553","next":"M16-GAP-02555"},"M16-GAP-02555":{"line":2554,"offset":442047,"length":166,"previous":"M16-GAP-02554","next":"M16-GAP-02556"},"M16-GAP-02556":{"line":2555,"offset":442213,"length":167,"previous":"M16-GAP-02555","next":"M16-GAP-02557"},"M16-GAP-02557":{"line":2556,"offset":442380,"length":167,"previous":"M16-GAP-02556","next":"M16-GAP-02558"},"M16-GAP-02558":{"line":2557,"offset":442547,"length":171,"previous":"M16-GAP-02557","next":"M16-GAP-02559"},"M16-GAP-02559":{"line":2558,"offset":442718,"length":174,"previous":"M16-GAP-02558","next":"M16-GAP-02560"},"M16-GAP-02560":{"line":2559,"offset":442892,"length":166,"previous":"M16-GAP-02559","next":"M16-GAP-02561"},"M16-GAP-02561":{"line":2560,"offset":443058,"length":169,"previous":"M16-GAP-02560","next":"M16-GAP-02562"},"M16-GAP-02562":{"line":2561,"offset":443227,"length":170,"previous":"M16-GAP-02561","next":"M16-GAP-02563"},"M16-GAP-02563":{"line":2562,"offset":443397,"length":168,"previous":"M16-GAP-02562","next":"M16-GAP-02564"},"M16-GAP-02564":{"line":2563,"offset":443565,"length":167,"previous":"M16-GAP-02563","next":"M16-GAP-02565"},"M16-GAP-02565":{"line":2564,"offset":443732,"length":167,"previous":"M16-GAP-02564","next":"M16-GAP-02566"},"M16-GAP-02566":{"line":2565,"offset":443899,"length":167,"previous":"M16-GAP-02565","next":"M16-GAP-02567"},"M16-GAP-02567":{"line":2566,"offset":444066,"length":165,"previous":"M16-GAP-02566","next":"M16-GAP-02568"},"M16-GAP-02568":{"line":2567,"offset":444231,"length":169,"previous":"M16-GAP-02567","next":"M16-GAP-02569"},"M16-GAP-02569":{"line":2568,"offset":444400,"length":172,"previous":"M16-GAP-02568","next":"M16-GAP-02570"},"M16-GAP-02570":{"line":2569,"offset":444572,"length":167,"previous":"M16-GAP-02569","next":"M16-GAP-02571"},"M16-GAP-02571":{"line":2570,"offset":444739,"length":177,"previous":"M16-GAP-02570","next":"M16-GAP-02572"},"M16-GAP-02572":{"line":2571,"offset":444916,"length":160,"previous":"M16-GAP-02571","next":"M16-GAP-02573"},"M16-GAP-02573":{"line":2572,"offset":445076,"length":166,"previous":"M16-GAP-02572","next":"M16-GAP-02574"},"M16-GAP-02574":{"line":2573,"offset":445242,"length":164,"previous":"M16-GAP-02573","next":"M16-GAP-02575"},"M16-GAP-02575":{"line":2574,"offset":445406,"length":164,"previous":"M16-GAP-02574","next":"M16-GAP-02576"},"M16-GAP-02576":{"line":2575,"offset":445570,"length":161,"previous":"M16-GAP-02575","next":"M16-GAP-02577"},"M16-GAP-02577":{"line":2576,"offset":445731,"length":176,"previous":"M16-GAP-02576","next":"M16-GAP-02578"},"M16-GAP-02578":{"line":2577,"offset":445907,"length":168,"previous":"M16-GAP-02577","next":"M16-GAP-02579"},"M16-GAP-02579":{"line":2578,"offset":446075,"length":171,"previous":"M16-GAP-02578","next":"M16-GAP-02580"},"M16-GAP-02580":{"line":2579,"offset":446246,"length":161,"previous":"M16-GAP-02579","next":"M16-GAP-02581"},"M16-GAP-02581":{"line":2580,"offset":446407,"length":174,"previous":"M16-GAP-02580","next":"M16-GAP-02582"},"M16-GAP-02582":{"line":2581,"offset":446581,"length":168,"previous":"M16-GAP-02581","next":"M16-GAP-02583"},"M16-GAP-02583":{"line":2582,"offset":446749,"length":162,"previous":"M16-GAP-02582","next":"M16-GAP-02584"},"M16-GAP-02584":{"line":2583,"offset":446911,"length":169,"previous":"M16-GAP-02583","next":"M16-GAP-02585"},"M16-GAP-02585":{"line":2584,"offset":447080,"length":166,"previous":"M16-GAP-02584","next":"M16-GAP-02586"},"M16-GAP-02586":{"line":2585,"offset":447246,"length":178,"previous":"M16-GAP-02585","next":"M16-GAP-02587"},"M16-GAP-02587":{"line":2586,"offset":447424,"length":164,"previous":"M16-GAP-02586","next":"M16-GAP-02588"},"M16-GAP-02588":{"line":2587,"offset":447588,"length":169,"previous":"M16-GAP-02587","next":"M16-GAP-02589"},"M16-GAP-02589":{"line":2588,"offset":447757,"length":164,"previous":"M16-GAP-02588","next":"M16-GAP-02590"},"M16-GAP-02590":{"line":2589,"offset":447921,"length":176,"previous":"M16-GAP-02589","next":"M16-GAP-02591"},"M16-GAP-02591":{"line":2590,"offset":448097,"length":167,"previous":"M16-GAP-02590","next":"M16-GAP-02592"},"M16-GAP-02592":{"line":2591,"offset":448264,"length":178,"previous":"M16-GAP-02591","next":"M16-GAP-02593"},"M16-GAP-02593":{"line":2592,"offset":448442,"length":170,"previous":"M16-GAP-02592","next":"M16-GAP-02594"},"M16-GAP-02594":{"line":2593,"offset":448612,"length":176,"previous":"M16-GAP-02593","next":"M16-GAP-02595"},"M16-GAP-02595":{"line":2594,"offset":448788,"length":177,"previous":"M16-GAP-02594","next":"M16-GAP-02596"},"M16-GAP-02596":{"line":2595,"offset":448965,"length":177,"previous":"M16-GAP-02595","next":"M16-GAP-02597"},"M16-GAP-02597":{"line":2596,"offset":449142,"length":179,"previous":"M16-GAP-02596","next":"M16-GAP-02598"},"M16-GAP-02598":{"line":2597,"offset":449321,"length":160,"previous":"M16-GAP-02597","next":"M16-GAP-02599"},"M16-GAP-02599":{"line":2598,"offset":449481,"length":156,"previous":"M16-GAP-02598","next":"M16-GAP-02600"},"M16-GAP-02600":{"line":2599,"offset":449637,"length":163,"previous":"M16-GAP-02599","next":"M16-GAP-02601"},"M16-GAP-02601":{"line":2600,"offset":449800,"length":167,"previous":"M16-GAP-02600","next":"M16-GAP-02602"},"M16-GAP-02602":{"line":2601,"offset":449967,"length":165,"previous":"M16-GAP-02601","next":"M16-GAP-02603"},"M16-GAP-02603":{"line":2602,"offset":450132,"length":163,"previous":"M16-GAP-02602","next":"M16-GAP-02604"},"M16-GAP-02604":{"line":2603,"offset":450295,"length":166,"previous":"M16-GAP-02603","next":"M16-GAP-02605"},"M16-GAP-02605":{"line":2604,"offset":450461,"length":163,"previous":"M16-GAP-02604","next":"M16-GAP-02606"},"M16-GAP-02606":{"line":2605,"offset":450624,"length":167,"previous":"M16-GAP-02605","next":"M16-GAP-02607"},"M16-GAP-02607":{"line":2606,"offset":450791,"length":162,"previous":"M16-GAP-02606","next":"M16-GAP-02608"},"M16-GAP-02608":{"line":2607,"offset":450953,"length":161,"previous":"M16-GAP-02607","next":"M16-GAP-02609"},"M16-GAP-02609":{"line":2608,"offset":451114,"length":171,"previous":"M16-GAP-02608","next":"M16-GAP-02610"},"M16-GAP-02610":{"line":2609,"offset":451285,"length":166,"previous":"M16-GAP-02609","next":"M16-GAP-02611"},"M16-GAP-02611":{"line":2610,"offset":451451,"length":162,"previous":"M16-GAP-02610","next":"M16-GAP-02612"},"M16-GAP-02612":{"line":2611,"offset":451613,"length":164,"previous":"M16-GAP-02611","next":"M16-GAP-02613"},"M16-GAP-02613":{"line":2612,"offset":451777,"length":165,"previous":"M16-GAP-02612","next":"M16-GAP-02614"},"M16-GAP-02614":{"line":2613,"offset":451942,"length":162,"previous":"M16-GAP-02613","next":"M16-GAP-02615"},"M16-GAP-02615":{"line":2614,"offset":452104,"length":166,"previous":"M16-GAP-02614","next":"M16-GAP-02616"},"M16-GAP-02616":{"line":2615,"offset":452270,"length":161,"previous":"M16-GAP-02615","next":"M16-GAP-02617"},"M16-GAP-02617":{"line":2616,"offset":452431,"length":165,"previous":"M16-GAP-02616","next":"M16-GAP-02618"},"M16-GAP-02618":{"line":2617,"offset":452596,"length":162,"previous":"M16-GAP-02617","next":"M16-GAP-02619"},"M16-GAP-02619":{"line":2618,"offset":452758,"length":165,"previous":"M16-GAP-02618","next":"M16-GAP-02620"},"M16-GAP-02620":{"line":2619,"offset":452923,"length":166,"previous":"M16-GAP-02619","next":"M16-GAP-02621"},"M16-GAP-02621":{"line":2620,"offset":453089,"length":165,"previous":"M16-GAP-02620","next":"M16-GAP-02622"},"M16-GAP-02622":{"line":2621,"offset":453254,"length":163,"previous":"M16-GAP-02621","next":"M16-GAP-02623"},"M16-GAP-02623":{"line":2622,"offset":453417,"length":167,"previous":"M16-GAP-02622","next":"M16-GAP-02624"},"M16-GAP-02624":{"line":2623,"offset":453584,"length":164,"previous":"M16-GAP-02623","next":"M16-GAP-02625"},"M16-GAP-02625":{"line":2624,"offset":453748,"length":165,"previous":"M16-GAP-02624","next":"M16-GAP-02626"},"M16-GAP-02626":{"line":2625,"offset":453913,"length":167,"previous":"M16-GAP-02625","next":"M16-GAP-02627"},"M16-GAP-02627":{"line":2626,"offset":454080,"length":162,"previous":"M16-GAP-02626","next":"M16-GAP-02628"},"M16-GAP-02628":{"line":2627,"offset":454242,"length":162,"previous":"M16-GAP-02627","next":"M16-GAP-02629"},"M16-GAP-02629":{"line":2628,"offset":454404,"length":163,"previous":"M16-GAP-02628","next":"M16-GAP-02630"},"M16-GAP-02630":{"line":2629,"offset":454567,"length":162,"previous":"M16-GAP-02629","next":"M16-GAP-02631"},"M16-GAP-02631":{"line":2630,"offset":454729,"length":164,"previous":"M16-GAP-02630","next":"M16-GAP-02632"},"M16-GAP-02632":{"line":2631,"offset":454893,"length":161,"previous":"M16-GAP-02631","next":"M16-GAP-02633"},"M16-GAP-02633":{"line":2632,"offset":455054,"length":164,"previous":"M16-GAP-02632","next":"M16-GAP-02634"},"M16-GAP-02634":{"line":2633,"offset":455218,"length":163,"previous":"M16-GAP-02633","next":"M16-GAP-02635"},"M16-GAP-02635":{"line":2634,"offset":455381,"length":170,"previous":"M16-GAP-02634","next":"M16-GAP-02636"},"M16-GAP-02636":{"line":2635,"offset":455551,"length":166,"previous":"M16-GAP-02635","next":"M16-GAP-02637"},"M16-GAP-02637":{"line":2636,"offset":455717,"length":162,"previous":"M16-GAP-02636","next":"M16-GAP-02638"},"M16-GAP-02638":{"line":2637,"offset":455879,"length":156,"previous":"M16-GAP-02637","next":"M16-GAP-02639"},"M16-GAP-02639":{"line":2638,"offset":456035,"length":165,"previous":"M16-GAP-02638","next":"M16-GAP-02640"},"M16-GAP-02640":{"line":2639,"offset":456200,"length":160,"previous":"M16-GAP-02639","next":"M16-GAP-02641"},"M16-GAP-02641":{"line":2640,"offset":456360,"length":165,"previous":"M16-GAP-02640","next":"M16-GAP-02642"},"M16-GAP-02642":{"line":2641,"offset":456525,"length":161,"previous":"M16-GAP-02641","next":"M16-GAP-02643"},"M16-GAP-02643":{"line":2642,"offset":456686,"length":159,"previous":"M16-GAP-02642","next":"M16-GAP-02644"},"M16-GAP-02644":{"line":2643,"offset":456845,"length":151,"previous":"M16-GAP-02643","next":"M16-GAP-02645"},"M16-GAP-02645":{"line":2644,"offset":456996,"length":170,"previous":"M16-GAP-02644","next":"M16-GAP-02646"},"M16-GAP-02646":{"line":2645,"offset":457166,"length":164,"previous":"M16-GAP-02645","next":"M16-GAP-02647"},"M16-GAP-02647":{"line":2646,"offset":457330,"length":165,"previous":"M16-GAP-02646","next":"M16-GAP-02648"},"M16-GAP-02648":{"line":2647,"offset":457495,"length":155,"previous":"M16-GAP-02647","next":"M16-GAP-02649"},"M16-GAP-02649":{"line":2648,"offset":457650,"length":156,"previous":"M16-GAP-02648","next":"M16-GAP-02650"},"M16-GAP-02650":{"line":2649,"offset":457806,"length":155,"previous":"M16-GAP-02649","next":"M16-GAP-02651"},"M16-GAP-02651":{"line":2650,"offset":457961,"length":160,"previous":"M16-GAP-02650","next":"M16-GAP-02652"},"M16-GAP-02652":{"line":2651,"offset":458121,"length":165,"previous":"M16-GAP-02651","next":"M16-GAP-02653"},"M16-GAP-02653":{"line":2652,"offset":458286,"length":163,"previous":"M16-GAP-02652","next":"M16-GAP-02654"},"M16-GAP-02654":{"line":2653,"offset":458449,"length":164,"previous":"M16-GAP-02653","next":"M16-GAP-02655"},"M16-GAP-02655":{"line":2654,"offset":458613,"length":156,"previous":"M16-GAP-02654","next":"M16-GAP-02656"},"M16-GAP-02656":{"line":2655,"offset":458769,"length":162,"previous":"M16-GAP-02655","next":"M16-GAP-02657"},"M16-GAP-02657":{"line":2656,"offset":458931,"length":158,"previous":"M16-GAP-02656","next":"M16-GAP-02658"},"M16-GAP-02658":{"line":2657,"offset":459089,"length":159,"previous":"M16-GAP-02657","next":"M16-GAP-02659"},"M16-GAP-02659":{"line":2658,"offset":459248,"length":172,"previous":"M16-GAP-02658","next":"M16-GAP-02660"},"M16-GAP-02660":{"line":2659,"offset":459420,"length":161,"previous":"M16-GAP-02659","next":"M16-GAP-02661"},"M16-GAP-02661":{"line":2660,"offset":459581,"length":166,"previous":"M16-GAP-02660","next":"M16-GAP-02662"},"M16-GAP-02662":{"line":2661,"offset":459747,"length":158,"previous":"M16-GAP-02661","next":"M16-GAP-02663"},"M16-GAP-02663":{"line":2662,"offset":459905,"length":167,"previous":"M16-GAP-02662","next":"M16-GAP-02664"},"M16-GAP-02664":{"line":2663,"offset":460072,"length":157,"previous":"M16-GAP-02663","next":"M16-GAP-02665"},"M16-GAP-02665":{"line":2664,"offset":460229,"length":162,"previous":"M16-GAP-02664","next":"M16-GAP-02666"},"M16-GAP-02666":{"line":2665,"offset":460391,"length":157,"previous":"M16-GAP-02665","next":"M16-GAP-02667"},"M16-GAP-02667":{"line":2666,"offset":460548,"length":159,"previous":"M16-GAP-02666","next":"M17-GAP-00001"},"M17-GAP-00001":{"line":2667,"offset":460707,"length":161,"previous":"M16-GAP-02667","next":"M17-GAP-00002"},"M17-GAP-00002":{"line":2668,"offset":460868,"length":163,"previous":"M17-GAP-00001","next":"M17-GAP-00003"},"M17-GAP-00003":{"line":2669,"offset":461031,"length":168,"previous":"M17-GAP-00002","next":"M17-GAP-00004"},"M17-GAP-00004":{"line":2670,"offset":461199,"length":163,"previous":"M17-GAP-00003","next":"M17-GAP-00005"},"M17-GAP-00005":{"line":2671,"offset":461362,"length":163,"previous":"M17-GAP-00004","next":"M17-GAP-00006"},"M17-GAP-00006":{"line":2672,"offset":461525,"length":168,"previous":"M17-GAP-00005","next":"M17-GAP-00007"},"M17-GAP-00007":{"line":2673,"offset":461693,"length":168,"previous":"M17-GAP-00006","next":"M17-GAP-00008"},"M17-GAP-00008":{"line":2674,"offset":461861,"length":165,"previous":"M17-GAP-00007","next":"M17-GAP-00009"},"M17-GAP-00009":{"line":2675,"offset":462026,"length":170,"previous":"M17-GAP-00008","next":"M17-GAP-00010"},"M17-GAP-00010":{"line":2676,"offset":462196,"length":167,"previous":"M17-GAP-00009","next":"M17-GAP-00011"},"M17-GAP-00011":{"line":2677,"offset":462363,"length":160,"previous":"M17-GAP-00010","next":"M17-GAP-00012"},"M17-GAP-00012":{"line":2678,"offset":462523,"length":166,"previous":"M17-GAP-00011","next":"M17-GAP-00013"},"M17-GAP-00013":{"line":2679,"offset":462689,"length":167,"previous":"M17-GAP-00012","next":"M17-GAP-00014"},"M17-GAP-00014":{"line":2680,"offset":462856,"length":173,"previous":"M17-GAP-00013","next":"M17-GAP-00015"},"M17-GAP-00015":{"line":2681,"offset":463029,"length":157,"previous":"M17-GAP-00014","next":"M17-GAP-00016"},"M17-GAP-00016":{"line":2682,"offset":463186,"length":169,"previous":"M17-GAP-00015","next":"M17-GAP-00017"},"M17-GAP-00017":{"line":2683,"offset":463355,"length":169,"previous":"M17-GAP-00016","next":"M17-GAP-00018"},"M17-GAP-00018":{"line":2684,"offset":463524,"length":169,"previous":"M17-GAP-00017","next":"M17-GAP-00019"},"M17-GAP-00019":{"line":2685,"offset":463693,"length":166,"previous":"M17-GAP-00018","next":"M17-GAP-00020"},"M17-GAP-00020":{"line":2686,"offset":463859,"length":167,"previous":"M17-GAP-00019","next":"M17-GAP-00021"},"M17-GAP-00021":{"line":2687,"offset":464026,"length":170,"previous":"M17-GAP-00020","next":"M17-GAP-00022"},"M17-GAP-00022":{"line":2688,"offset":464196,"length":168,"previous":"M17-GAP-00021","next":"M17-GAP-00023"},"M17-GAP-00023":{"line":2689,"offset":464364,"length":160,"previous":"M17-GAP-00022","next":"M17-GAP-00024"},"M17-GAP-00024":{"line":2690,"offset":464524,"length":165,"previous":"M17-GAP-00023","next":"M17-GAP-00025"},"M17-GAP-00025":{"line":2691,"offset":464689,"length":164,"previous":"M17-GAP-00024","next":"M17-GAP-00026"},"M17-GAP-00026":{"line":2692,"offset":464853,"length":165,"previous":"M17-GAP-00025","next":"M17-GAP-00027"},"M17-GAP-00027":{"line":2693,"offset":465018,"length":163,"previous":"M17-GAP-00026","next":"M17-GAP-00028"},"M17-GAP-00028":{"line":2694,"offset":465181,"length":164,"previous":"M17-GAP-00027","next":"M17-GAP-00029"},"M17-GAP-00029":{"line":2695,"offset":465345,"length":170,"previous":"M17-GAP-00028","next":"M18-GAP-00001"},"M18-GAP-00001":{"line":2696,"offset":465515,"length":188,"previous":"M17-GAP-00029","next":"M18-GAP-00002"},"M18-GAP-00002":{"line":2697,"offset":465703,"length":191,"previous":"M18-GAP-00001","next":"M18-GAP-00003"},"M18-GAP-00003":{"line":2698,"offset":465894,"length":192,"previous":"M18-GAP-00002","next":"M18-GAP-00004"},"M18-GAP-00004":{"line":2699,"offset":466086,"length":189,"previous":"M18-GAP-00003","next":"M18-GAP-00005"},"M18-GAP-00005":{"line":2700,"offset":466275,"length":183,"previous":"M18-GAP-00004","next":"M18-GAP-00006"},"M18-GAP-00006":{"line":2701,"offset":466458,"length":188,"previous":"M18-GAP-00005","next":"M18-GAP-00007"},"M18-GAP-00007":{"line":2702,"offset":466646,"length":189,"previous":"M18-GAP-00006","next":"M18-GAP-00008"},"M18-GAP-00008":{"line":2703,"offset":466835,"length":186,"previous":"M18-GAP-00007","next":"M18-GAP-00009"},"M18-GAP-00009":{"line":2704,"offset":467021,"length":193,"previous":"M18-GAP-00008","next":"M18-GAP-00010"},"M18-GAP-00010":{"line":2705,"offset":467214,"length":191,"previous":"M18-GAP-00009","next":"M18-GAP-00011"},"M18-GAP-00011":{"line":2706,"offset":467405,"length":190,"previous":"M18-GAP-00010","next":"M18-GAP-00012"},"M18-GAP-00012":{"line":2707,"offset":467595,"length":191,"previous":"M18-GAP-00011","next":"M18-GAP-00013"},"M18-GAP-00013":{"line":2708,"offset":467786,"length":194,"previous":"M18-GAP-00012","next":"M18-GAP-00014"},"M18-GAP-00014":{"line":2709,"offset":467980,"length":189,"previous":"M18-GAP-00013","next":"M18-GAP-00015"},"M18-GAP-00015":{"line":2710,"offset":468169,"length":189,"previous":"M18-GAP-00014","next":"M18-GAP-00016"},"M18-GAP-00016":{"line":2711,"offset":468358,"length":191,"previous":"M18-GAP-00015","next":"M18-GAP-00017"},"M18-GAP-00017":{"line":2712,"offset":468549,"length":196,"previous":"M18-GAP-00016","next":"M18-GAP-00018"},"M18-GAP-00018":{"line":2713,"offset":468745,"length":195,"previous":"M18-GAP-00017","next":"M18-GAP-00019"},"M18-GAP-00019":{"line":2714,"offset":468940,"length":187,"previous":"M18-GAP-00018","next":"M18-GAP-00020"},"M18-GAP-00020":{"line":2715,"offset":469127,"length":188,"previous":"M18-GAP-00019","next":"M18-GAP-00021"},"M18-GAP-00021":{"line":2716,"offset":469315,"length":183,"previous":"M18-GAP-00020","next":"M18-GAP-00022"},"M18-GAP-00022":{"line":2717,"offset":469498,"length":190,"previous":"M18-GAP-00021","next":"M18-GAP-00023"},"M18-GAP-00023":{"line":2718,"offset":469688,"length":192,"previous":"M18-GAP-00022","next":"M18-GAP-00024"},"M18-GAP-00024":{"line":2719,"offset":469880,"length":187,"previous":"M18-GAP-00023","next":"M18-GAP-00025"},"M18-GAP-00025":{"line":2720,"offset":470067,"length":184,"previous":"M18-GAP-00024","next":"M18-GAP-00026"},"M18-GAP-00026":{"line":2721,"offset":470251,"length":186,"previous":"M18-GAP-00025","next":"M18-GAP-00027"},"M18-GAP-00027":{"line":2722,"offset":470437,"length":186,"previous":"M18-GAP-00026","next":"M18-GAP-00028"},"M18-GAP-00028":{"line":2723,"offset":470623,"length":188,"previous":"M18-GAP-00027","next":"M18-GAP-00029"},"M18-GAP-00029":{"line":2724,"offset":470811,"length":188,"previous":"M18-GAP-00028","next":"M18-GAP-00030"},"M18-GAP-00030":{"line":2725,"offset":470999,"length":190,"previous":"M18-GAP-00029","next":"M18-GAP-00031"},"M18-GAP-00031":{"line":2726,"offset":471189,"length":187,"previous":"M18-GAP-00030","next":"M18-GAP-00032"},"M18-GAP-00032":{"line":2727,"offset":471376,"length":192,"previous":"M18-GAP-00031","next":"M18-GAP-00033"},"M18-GAP-00033":{"line":2728,"offset":471568,"length":193,"previous":"M18-GAP-00032","next":"M18-GAP-00034"},"M18-GAP-00034":{"line":2729,"offset":471761,"length":190,"previous":"M18-GAP-00033","next":"M18-GAP-00035"},"M18-GAP-00035":{"line":2730,"offset":471951,"length":187,"previous":"M18-GAP-00034","next":"M18-GAP-00036"},"M18-GAP-00036":{"line":2731,"offset":472138,"length":185,"previous":"M18-GAP-00035","next":"M18-GAP-00037"},"M18-GAP-00037":{"line":2732,"offset":472323,"length":183,"previous":"M18-GAP-00036","next":"M18-GAP-00038"},"M18-GAP-00038":{"line":2733,"offset":472506,"length":184,"previous":"M18-GAP-00037","next":"M18-GAP-00039"},"M18-GAP-00039":{"line":2734,"offset":472690,"length":184,"previous":"M18-GAP-00038","next":"M18-GAP-00040"},"M18-GAP-00040":{"line":2735,"offset":472874,"length":189,"previous":"M18-GAP-00039","next":"M18-GAP-00041"},"M18-GAP-00041":{"line":2736,"offset":473063,"length":185,"previous":"M18-GAP-00040","next":"M18-GAP-00042"},"M18-GAP-00042":{"line":2737,"offset":473248,"length":185,"previous":"M18-GAP-00041","next":"M18-GAP-00043"},"M18-GAP-00043":{"line":2738,"offset":473433,"length":184,"previous":"M18-GAP-00042","next":"M18-GAP-00044"},"M18-GAP-00044":{"line":2739,"offset":473617,"length":195,"previous":"M18-GAP-00043","next":"M18-GAP-00045"},"M18-GAP-00045":{"line":2740,"offset":473812,"length":188,"previous":"M18-GAP-00044","next":"M18-GAP-00046"},"M18-GAP-00046":{"line":2741,"offset":474000,"length":186,"previous":"M18-GAP-00045","next":"M18-GAP-00047"},"M18-GAP-00047":{"line":2742,"offset":474186,"length":185,"previous":"M18-GAP-00046","next":"M18-GAP-00048"},"M18-GAP-00048":{"line":2743,"offset":474371,"length":185,"previous":"M18-GAP-00047","next":"M18-GAP-00049"},"M18-GAP-00049":{"line":2744,"offset":474556,"length":191,"previous":"M18-GAP-00048","next":"M18-GAP-00050"},"M18-GAP-00050":{"line":2745,"offset":474747,"length":187,"previous":"M18-GAP-00049","next":"M18-GAP-00051"},"M18-GAP-00051":{"line":2746,"offset":474934,"length":187,"previous":"M18-GAP-00050","next":"M18-GAP-00052"},"M18-GAP-00052":{"line":2747,"offset":475121,"length":185,"previous":"M18-GAP-00051","next":"M18-GAP-00053"},"M18-GAP-00053":{"line":2748,"offset":475306,"length":188,"previous":"M18-GAP-00052","next":"M18-GAP-00054"},"M18-GAP-00054":{"line":2749,"offset":475494,"length":184,"previous":"M18-GAP-00053","next":"M18-GAP-00055"},"M18-GAP-00055":{"line":2750,"offset":475678,"length":183,"previous":"M18-GAP-00054","next":"M18-GAP-00056"},"M18-GAP-00056":{"line":2751,"offset":475861,"length":188,"previous":"M18-GAP-00055","next":"M18-GAP-00057"},"M18-GAP-00057":{"line":2752,"offset":476049,"length":188,"previous":"M18-GAP-00056","next":"M18-GAP-00058"},"M18-GAP-00058":{"line":2753,"offset":476237,"length":194,"previous":"M18-GAP-00057","next":"M18-GAP-00059"},"M18-GAP-00059":{"line":2754,"offset":476431,"length":185,"previous":"M18-GAP-00058","next":"M18-GAP-00060"},"M18-GAP-00060":{"line":2755,"offset":476616,"length":188,"previous":"M18-GAP-00059","next":"M18-GAP-00061"},"M18-GAP-00061":{"line":2756,"offset":476804,"length":189,"previous":"M18-GAP-00060","next":"M18-GAP-00062"},"M18-GAP-00062":{"line":2757,"offset":476993,"length":187,"previous":"M18-GAP-00061","next":"M18-GAP-00063"},"M18-GAP-00063":{"line":2758,"offset":477180,"length":195,"previous":"M18-GAP-00062","next":"M18-GAP-00064"},"M18-GAP-00064":{"line":2759,"offset":477375,"length":188,"previous":"M18-GAP-00063","next":"M18-GAP-00065"},"M18-GAP-00065":{"line":2760,"offset":477563,"length":188,"previous":"M18-GAP-00064","next":"M18-GAP-00066"},"M18-GAP-00066":{"line":2761,"offset":477751,"length":182,"previous":"M18-GAP-00065","next":"M18-GAP-00067"},"M18-GAP-00067":{"line":2762,"offset":477933,"length":186,"previous":"M18-GAP-00066","next":"M18-GAP-00068"},"M18-GAP-00068":{"line":2763,"offset":478119,"length":186,"previous":"M18-GAP-00067","next":"M18-GAP-00069"},"M18-GAP-00069":{"line":2764,"offset":478305,"length":194,"previous":"M18-GAP-00068","next":"M18-GAP-00070"},"M18-GAP-00070":{"line":2765,"offset":478499,"length":185,"previous":"M18-GAP-00069","next":"M18-GAP-00071"},"M18-GAP-00071":{"line":2766,"offset":478684,"length":184,"previous":"M18-GAP-00070","next":"M18-GAP-00072"},"M18-GAP-00072":{"line":2767,"offset":478868,"length":188,"previous":"M18-GAP-00071","next":"M18-GAP-00073"},"M18-GAP-00073":{"line":2768,"offset":479056,"length":192,"previous":"M18-GAP-00072","next":"M18-GAP-00074"},"M18-GAP-00074":{"line":2769,"offset":479248,"length":197,"previous":"M18-GAP-00073","next":"M18-GAP-00075"},"M18-GAP-00075":{"line":2770,"offset":479445,"length":187,"previous":"M18-GAP-00074","next":"M18-GAP-00076"},"M18-GAP-00076":{"line":2771,"offset":479632,"length":184,"previous":"M18-GAP-00075","next":"M18-GAP-00077"},"M18-GAP-00077":{"line":2772,"offset":479816,"length":188,"previous":"M18-GAP-00076","next":"M18-GAP-00078"},"M18-GAP-00078":{"line":2773,"offset":480004,"length":192,"previous":"M18-GAP-00077","next":"M18-GAP-00079"},"M18-GAP-00079":{"line":2774,"offset":480196,"length":185,"previous":"M18-GAP-00078","next":"M18-GAP-00080"},"M18-GAP-00080":{"line":2775,"offset":480381,"length":189,"previous":"M18-GAP-00079","next":"M18-GAP-00081"},"M18-GAP-00081":{"line":2776,"offset":480570,"length":183,"previous":"M18-GAP-00080","next":"M18-GAP-00082"},"M18-GAP-00082":{"line":2777,"offset":480753,"length":186,"previous":"M18-GAP-00081","next":"M18-GAP-00083"},"M18-GAP-00083":{"line":2778,"offset":480939,"length":187,"previous":"M18-GAP-00082","next":"M18-GAP-00084"},"M18-GAP-00084":{"line":2779,"offset":481126,"length":188,"previous":"M18-GAP-00083","next":"M18-GAP-00085"},"M18-GAP-00085":{"line":2780,"offset":481314,"length":188,"previous":"M18-GAP-00084","next":"M18-GAP-00086"},"M18-GAP-00086":{"line":2781,"offset":481502,"length":186,"previous":"M18-GAP-00085","next":"M18-GAP-00087"},"M18-GAP-00087":{"line":2782,"offset":481688,"length":185,"previous":"M18-GAP-00086","next":"M18-GAP-00088"},"M18-GAP-00088":{"line":2783,"offset":481873,"length":187,"previous":"M18-GAP-00087","next":"M18-GAP-00089"},"M18-GAP-00089":{"line":2784,"offset":482060,"length":188,"previous":"M18-GAP-00088","next":"M18-GAP-00090"},"M18-GAP-00090":{"line":2785,"offset":482248,"length":192,"previous":"M18-GAP-00089","next":"M18-GAP-00091"},"M18-GAP-00091":{"line":2786,"offset":482440,"length":191,"previous":"M18-GAP-00090","next":"M18-GAP-00092"},"M18-GAP-00092":{"line":2787,"offset":482631,"length":177,"previous":"M18-GAP-00091","next":"M18-GAP-00093"},"M18-GAP-00093":{"line":2788,"offset":482808,"length":186,"previous":"M18-GAP-00092","next":"M18-GAP-00094"},"M18-GAP-00094":{"line":2789,"offset":482994,"length":181,"previous":"M18-GAP-00093","next":"M18-GAP-00095"},"M18-GAP-00095":{"line":2790,"offset":483175,"length":181,"previous":"M18-GAP-00094","next":"M18-GAP-00096"},"M18-GAP-00096":{"line":2791,"offset":483356,"length":183,"previous":"M18-GAP-00095","next":"M18-GAP-00097"},"M18-GAP-00097":{"line":2792,"offset":483539,"length":189,"previous":"M18-GAP-00096","next":"M18-GAP-00098"},"M18-GAP-00098":{"line":2793,"offset":483728,"length":186,"previous":"M18-GAP-00097","next":"M18-GAP-00099"},"M18-GAP-00099":{"line":2794,"offset":483914,"length":191,"previous":"M18-GAP-00098","next":"M18-GAP-00100"},"M18-GAP-00100":{"line":2795,"offset":484105,"length":190,"previous":"M18-GAP-00099","next":"M18-GAP-00101"},"M18-GAP-00101":{"line":2796,"offset":484295,"length":191,"previous":"M18-GAP-00100","next":"M18-GAP-00102"},"M18-GAP-00102":{"line":2797,"offset":484486,"length":187,"previous":"M18-GAP-00101","next":"M18-GAP-00103"},"M18-GAP-00103":{"line":2798,"offset":484673,"length":183,"previous":"M18-GAP-00102","next":"M18-GAP-00104"},"M18-GAP-00104":{"line":2799,"offset":484856,"length":186,"previous":"M18-GAP-00103","next":"M18-GAP-00105"},"M18-GAP-00105":{"line":2800,"offset":485042,"length":186,"previous":"M18-GAP-00104","next":"M18-GAP-00106"},"M18-GAP-00106":{"line":2801,"offset":485228,"length":188,"previous":"M18-GAP-00105","next":"M18-GAP-00107"},"M18-GAP-00107":{"line":2802,"offset":485416,"length":189,"previous":"M18-GAP-00106","next":"M18-GAP-00108"},"M18-GAP-00108":{"line":2803,"offset":485605,"length":181,"previous":"M18-GAP-00107","next":"M18-GAP-00109"},"M18-GAP-00109":{"line":2804,"offset":485786,"length":195,"previous":"M18-GAP-00108","next":"M18-GAP-00110"},"M18-GAP-00110":{"line":2805,"offset":485981,"length":197,"previous":"M18-GAP-00109","next":"M18-GAP-00111"},"M18-GAP-00111":{"line":2806,"offset":486178,"length":184,"previous":"M18-GAP-00110","next":"M18-GAP-00112"},"M18-GAP-00112":{"line":2807,"offset":486362,"length":185,"previous":"M18-GAP-00111","next":"M18-GAP-00113"},"M18-GAP-00113":{"line":2808,"offset":486547,"length":200,"previous":"M18-GAP-00112","next":"M18-GAP-00114"},"M18-GAP-00114":{"line":2809,"offset":486747,"length":193,"previous":"M18-GAP-00113","next":"M18-GAP-00115"},"M18-GAP-00115":{"line":2810,"offset":486940,"length":191,"previous":"M18-GAP-00114","next":"M18-GAP-00116"},"M18-GAP-00116":{"line":2811,"offset":487131,"length":200,"previous":"M18-GAP-00115","next":"M18-GAP-00117"},"M18-GAP-00117":{"line":2812,"offset":487331,"length":193,"previous":"M18-GAP-00116","next":"M18-GAP-00118"},"M18-GAP-00118":{"line":2813,"offset":487524,"length":188,"previous":"M18-GAP-00117","next":"M18-GAP-00119"},"M18-GAP-00119":{"line":2814,"offset":487712,"length":184,"previous":"M18-GAP-00118","next":"M18-GAP-00120"},"M18-GAP-00120":{"line":2815,"offset":487896,"length":188,"previous":"M18-GAP-00119","next":"M18-GAP-00121"},"M18-GAP-00121":{"line":2816,"offset":488084,"length":182,"previous":"M18-GAP-00120","next":"M18-GAP-00122"},"M18-GAP-00122":{"line":2817,"offset":488266,"length":184,"previous":"M18-GAP-00121","next":"M18-GAP-00123"},"M18-GAP-00123":{"line":2818,"offset":488450,"length":186,"previous":"M18-GAP-00122","next":"M18-GAP-00124"},"M18-GAP-00124":{"line":2819,"offset":488636,"length":193,"previous":"M18-GAP-00123","next":"M18-GAP-00125"},"M18-GAP-00125":{"line":2820,"offset":488829,"length":194,"previous":"M18-GAP-00124","next":"M18-GAP-00126"},"M18-GAP-00126":{"line":2821,"offset":489023,"length":187,"previous":"M18-GAP-00125","next":"M18-GAP-00127"},"M18-GAP-00127":{"line":2822,"offset":489210,"length":195,"previous":"M18-GAP-00126","next":"M18-GAP-00128"},"M18-GAP-00128":{"line":2823,"offset":489405,"length":197,"previous":"M18-GAP-00127","next":"M18-GAP-00129"},"M18-GAP-00129":{"line":2824,"offset":489602,"length":196,"previous":"M18-GAP-00128","next":"M18-GAP-00130"},"M18-GAP-00130":{"line":2825,"offset":489798,"length":181,"previous":"M18-GAP-00129","next":"M18-GAP-00131"},"M18-GAP-00131":{"line":2826,"offset":489979,"length":190,"previous":"M18-GAP-00130","next":"M18-GAP-00132"},"M18-GAP-00132":{"line":2827,"offset":490169,"length":190,"previous":"M18-GAP-00131","next":"M18-GAP-00133"},"M18-GAP-00133":{"line":2828,"offset":490359,"length":193,"previous":"M18-GAP-00132","next":"M18-GAP-00134"},"M18-GAP-00134":{"line":2829,"offset":490552,"length":186,"previous":"M18-GAP-00133","next":"M18-GAP-00135"},"M18-GAP-00135":{"line":2830,"offset":490738,"length":186,"previous":"M18-GAP-00134","next":"M18-GAP-00136"},"M18-GAP-00136":{"line":2831,"offset":490924,"length":190,"previous":"M18-GAP-00135","next":"M18-GAP-00137"},"M18-GAP-00137":{"line":2832,"offset":491114,"length":184,"previous":"M18-GAP-00136","next":"M18-GAP-00138"},"M18-GAP-00138":{"line":2833,"offset":491298,"length":185,"previous":"M18-GAP-00137","next":"M18-GAP-00139"},"M18-GAP-00139":{"line":2834,"offset":491483,"length":185,"previous":"M18-GAP-00138","next":"M18-GAP-00140"},"M18-GAP-00140":{"line":2835,"offset":491668,"length":185,"previous":"M18-GAP-00139","next":"M18-GAP-00141"},"M18-GAP-00141":{"line":2836,"offset":491853,"length":187,"previous":"M18-GAP-00140","next":"M18-GAP-00142"},"M18-GAP-00142":{"line":2837,"offset":492040,"length":186,"previous":"M18-GAP-00141","next":"M18-GAP-00143"},"M18-GAP-00143":{"line":2838,"offset":492226,"length":184,"previous":"M18-GAP-00142","next":"M18-GAP-00144"},"M18-GAP-00144":{"line":2839,"offset":492410,"length":184,"previous":"M18-GAP-00143","next":"M18-GAP-00145"},"M18-GAP-00145":{"line":2840,"offset":492594,"length":186,"previous":"M18-GAP-00144","next":"M18-GAP-00146"},"M18-GAP-00146":{"line":2841,"offset":492780,"length":182,"previous":"M18-GAP-00145","next":"M18-GAP-00147"},"M18-GAP-00147":{"line":2842,"offset":492962,"length":184,"previous":"M18-GAP-00146","next":"M18-GAP-00148"},"M18-GAP-00148":{"line":2843,"offset":493146,"length":183,"previous":"M18-GAP-00147","next":"M18-GAP-00149"},"M18-GAP-00149":{"line":2844,"offset":493329,"length":182,"previous":"M18-GAP-00148","next":"M18-GAP-00150"},"M18-GAP-00150":{"line":2845,"offset":493511,"length":200,"previous":"M18-GAP-00149","next":"M18-GAP-00151"},"M18-GAP-00151":{"line":2846,"offset":493711,"length":201,"previous":"M18-GAP-00150","next":"M18-GAP-00152"},"M18-GAP-00152":{"line":2847,"offset":493912,"length":191,"previous":"M18-GAP-00151","next":"M18-GAP-00153"},"M18-GAP-00153":{"line":2848,"offset":494103,"length":190,"previous":"M18-GAP-00152","next":"M18-GAP-00154"},"M18-GAP-00154":{"line":2849,"offset":494293,"length":190,"previous":"M18-GAP-00153","next":"M18-GAP-00155"},"M18-GAP-00155":{"line":2850,"offset":494483,"length":193,"previous":"M18-GAP-00154","next":"M18-GAP-00156"},"M18-GAP-00156":{"line":2851,"offset":494676,"length":185,"previous":"M18-GAP-00155","next":"M18-GAP-00157"},"M18-GAP-00157":{"line":2852,"offset":494861,"length":182,"previous":"M18-GAP-00156","next":"M18-GAP-00158"},"M18-GAP-00158":{"line":2853,"offset":495043,"length":184,"previous":"M18-GAP-00157","next":"M18-GAP-00159"},"M18-GAP-00159":{"line":2854,"offset":495227,"length":187,"previous":"M18-GAP-00158","next":"M18-GAP-00160"},"M18-GAP-00160":{"line":2855,"offset":495414,"length":193,"previous":"M18-GAP-00159","next":"M18-GAP-00161"},"M18-GAP-00161":{"line":2856,"offset":495607,"length":183,"previous":"M18-GAP-00160","next":"M18-GAP-00162"},"M18-GAP-00162":{"line":2857,"offset":495790,"length":181,"previous":"M18-GAP-00161","next":"M18-GAP-00163"},"M18-GAP-00163":{"line":2858,"offset":495971,"length":181,"previous":"M18-GAP-00162","next":"M18-GAP-00164"},"M18-GAP-00164":{"line":2859,"offset":496152,"length":191,"previous":"M18-GAP-00163","next":"M18-GAP-00165"},"M18-GAP-00165":{"line":2860,"offset":496343,"length":187,"previous":"M18-GAP-00164","next":"M18-GAP-00166"},"M18-GAP-00166":{"line":2861,"offset":496530,"length":185,"previous":"M18-GAP-00165","next":"M18-GAP-00167"},"M18-GAP-00167":{"line":2862,"offset":496715,"length":181,"previous":"M18-GAP-00166","next":"M18-GAP-00168"},"M18-GAP-00168":{"line":2863,"offset":496896,"length":186,"previous":"M18-GAP-00167","next":"M18-GAP-00169"},"M18-GAP-00169":{"line":2864,"offset":497082,"length":181,"previous":"M18-GAP-00168","next":"M18-GAP-00170"},"M18-GAP-00170":{"line":2865,"offset":497263,"length":183,"previous":"M18-GAP-00169","next":"M18-GAP-00171"},"M18-GAP-00171":{"line":2866,"offset":497446,"length":182,"previous":"M18-GAP-00170","next":"M18-GAP-00172"},"M18-GAP-00172":{"line":2867,"offset":497628,"length":183,"previous":"M18-GAP-00171","next":"M18-GAP-00173"},"M18-GAP-00173":{"line":2868,"offset":497811,"length":185,"previous":"M18-GAP-00172","next":"M18-GAP-00174"},"M18-GAP-00174":{"line":2869,"offset":497996,"length":185,"previous":"M18-GAP-00173","next":"M18-GAP-00175"},"M18-GAP-00175":{"line":2870,"offset":498181,"length":178,"previous":"M18-GAP-00174","next":"M18-GAP-00176"},"M18-GAP-00176":{"line":2871,"offset":498359,"length":182,"previous":"M18-GAP-00175","next":"M18-GAP-00177"},"M18-GAP-00177":{"line":2872,"offset":498541,"length":185,"previous":"M18-GAP-00176","next":"M18-GAP-00178"},"M18-GAP-00178":{"line":2873,"offset":498726,"length":182,"previous":"M18-GAP-00177","next":"M18-GAP-00179"},"M18-GAP-00179":{"line":2874,"offset":498908,"length":182,"previous":"M18-GAP-00178","next":"M18-GAP-00180"},"M18-GAP-00180":{"line":2875,"offset":499090,"length":182,"previous":"M18-GAP-00179","next":"M18-GAP-00181"},"M18-GAP-00181":{"line":2876,"offset":499272,"length":182,"previous":"M18-GAP-00180","next":"M18-GAP-00182"},"M18-GAP-00182":{"line":2877,"offset":499454,"length":183,"previous":"M18-GAP-00181","next":"M18-GAP-00183"},"M18-GAP-00183":{"line":2878,"offset":499637,"length":182,"previous":"M18-GAP-00182","next":"M18-GAP-00184"},"M18-GAP-00184":{"line":2879,"offset":499819,"length":187,"previous":"M18-GAP-00183","next":"M18-GAP-00185"},"M18-GAP-00185":{"line":2880,"offset":500006,"length":184,"previous":"M18-GAP-00184","next":"M18-GAP-00186"},"M18-GAP-00186":{"line":2881,"offset":500190,"length":190,"previous":"M18-GAP-00185","next":"M18-GAP-00187"},"M18-GAP-00187":{"line":2882,"offset":500380,"length":188,"previous":"M18-GAP-00186","next":"M18-GAP-00188"},"M18-GAP-00188":{"line":2883,"offset":500568,"length":198,"previous":"M18-GAP-00187","next":"M18-GAP-00189"},"M18-GAP-00189":{"line":2884,"offset":500766,"length":187,"previous":"M18-GAP-00188","next":"M18-GAP-00190"},"M18-GAP-00190":{"line":2885,"offset":500953,"length":188,"previous":"M18-GAP-00189","next":"M18-GAP-00191"},"M18-GAP-00191":{"line":2886,"offset":501141,"length":182,"previous":"M18-GAP-00190","next":"M18-GAP-00192"},"M18-GAP-00192":{"line":2887,"offset":501323,"length":180,"previous":"M18-GAP-00191","next":"M18-GAP-00193"},"M18-GAP-00193":{"line":2888,"offset":501503,"length":183,"previous":"M18-GAP-00192","next":"M18-GAP-00194"},"M18-GAP-00194":{"line":2889,"offset":501686,"length":183,"previous":"M18-GAP-00193","next":"M18-GAP-00195"},"M18-GAP-00195":{"line":2890,"offset":501869,"length":192,"previous":"M18-GAP-00194","next":"M18-GAP-00196"},"M18-GAP-00196":{"line":2891,"offset":502061,"length":195,"previous":"M18-GAP-00195","next":"M18-GAP-00197"},"M18-GAP-00197":{"line":2892,"offset":502256,"length":194,"previous":"M18-GAP-00196","next":"M18-GAP-00198"},"M18-GAP-00198":{"line":2893,"offset":502450,"length":191,"previous":"M18-GAP-00197","next":"M18-GAP-00199"},"M18-GAP-00199":{"line":2894,"offset":502641,"length":186,"previous":"M18-GAP-00198","next":"M18-GAP-00200"},"M18-GAP-00200":{"line":2895,"offset":502827,"length":191,"previous":"M18-GAP-00199","next":"M18-GAP-00201"},"M18-GAP-00201":{"line":2896,"offset":503018,"length":191,"previous":"M18-GAP-00200","next":"M18-GAP-00202"},"M18-GAP-00202":{"line":2897,"offset":503209,"length":195,"previous":"M18-GAP-00201","next":"M18-GAP-00203"},"M18-GAP-00203":{"line":2898,"offset":503404,"length":194,"previous":"M18-GAP-00202","next":"M18-GAP-00204"},"M18-GAP-00204":{"line":2899,"offset":503598,"length":190,"previous":"M18-GAP-00203","next":"M18-GAP-00205"},"M18-GAP-00205":{"line":2900,"offset":503788,"length":194,"previous":"M18-GAP-00204","next":"M18-GAP-00206"},"M18-GAP-00206":{"line":2901,"offset":503982,"length":195,"previous":"M18-GAP-00205","next":"M18-GAP-00207"},"M18-GAP-00207":{"line":2902,"offset":504177,"length":188,"previous":"M18-GAP-00206","next":"M18-GAP-00208"},"M18-GAP-00208":{"line":2903,"offset":504365,"length":197,"previous":"M18-GAP-00207","next":"M18-GAP-00209"},"M18-GAP-00209":{"line":2904,"offset":504562,"length":192,"previous":"M18-GAP-00208","next":"M18-GAP-00210"},"M18-GAP-00210":{"line":2905,"offset":504754,"length":197,"previous":"M18-GAP-00209","next":"M18-GAP-00211"},"M18-GAP-00211":{"line":2906,"offset":504951,"length":184,"previous":"M18-GAP-00210","next":"M18-GAP-00212"},"M18-GAP-00212":{"line":2907,"offset":505135,"length":184,"previous":"M18-GAP-00211","next":"M18-GAP-00213"},"M18-GAP-00213":{"line":2908,"offset":505319,"length":186,"previous":"M18-GAP-00212","next":"M18-GAP-00214"},"M18-GAP-00214":{"line":2909,"offset":505505,"length":184,"previous":"M18-GAP-00213","next":"M18-GAP-00215"},"M18-GAP-00215":{"line":2910,"offset":505689,"length":187,"previous":"M18-GAP-00214","next":"M18-GAP-00216"},"M18-GAP-00216":{"line":2911,"offset":505876,"length":189,"previous":"M18-GAP-00215","next":"M18-GAP-00217"},"M18-GAP-00217":{"line":2912,"offset":506065,"length":195,"previous":"M18-GAP-00216","next":"M18-GAP-00218"},"M18-GAP-00218":{"line":2913,"offset":506260,"length":190,"previous":"M18-GAP-00217","next":"M18-GAP-00219"},"M18-GAP-00219":{"line":2914,"offset":506450,"length":194,"previous":"M18-GAP-00218","next":"M18-GAP-00220"},"M18-GAP-00220":{"line":2915,"offset":506644,"length":185,"previous":"M18-GAP-00219","next":"M18-GAP-00221"},"M18-GAP-00221":{"line":2916,"offset":506829,"length":188,"previous":"M18-GAP-00220","next":"M18-GAP-00222"},"M18-GAP-00222":{"line":2917,"offset":507017,"length":189,"previous":"M18-GAP-00221","next":"M18-GAP-00223"},"M18-GAP-00223":{"line":2918,"offset":507206,"length":190,"previous":"M18-GAP-00222","next":"M18-GAP-00224"},"M18-GAP-00224":{"line":2919,"offset":507396,"length":190,"previous":"M18-GAP-00223","next":"M18-GAP-00225"},"M18-GAP-00225":{"line":2920,"offset":507586,"length":190,"previous":"M18-GAP-00224","next":"M18-GAP-00226"},"M18-GAP-00226":{"line":2921,"offset":507776,"length":183,"previous":"M18-GAP-00225","next":"M18-GAP-00227"},"M18-GAP-00227":{"line":2922,"offset":507959,"length":185,"previous":"M18-GAP-00226","next":"M18-GAP-00228"},"M18-GAP-00228":{"line":2923,"offset":508144,"length":184,"previous":"M18-GAP-00227","next":"M18-GAP-00229"},"M18-GAP-00229":{"line":2924,"offset":508328,"length":183,"previous":"M18-GAP-00228","next":"M18-GAP-00230"},"M18-GAP-00230":{"line":2925,"offset":508511,"length":190,"previous":"M18-GAP-00229","next":"M18-GAP-00231"},"M18-GAP-00231":{"line":2926,"offset":508701,"length":183,"previous":"M18-GAP-00230","next":"M18-GAP-00232"},"M18-GAP-00232":{"line":2927,"offset":508884,"length":188,"previous":"M18-GAP-00231","next":"M18-GAP-00233"},"M18-GAP-00233":{"line":2928,"offset":509072,"length":184,"previous":"M18-GAP-00232","next":"M18-GAP-00234"},"M18-GAP-00234":{"line":2929,"offset":509256,"length":184,"previous":"M18-GAP-00233","next":"M18-GAP-00235"},"M18-GAP-00235":{"line":2930,"offset":509440,"length":182,"previous":"M18-GAP-00234","next":"M18-GAP-00236"},"M18-GAP-00236":{"line":2931,"offset":509622,"length":184,"previous":"M18-GAP-00235","next":"M18-GAP-00237"},"M18-GAP-00237":{"line":2932,"offset":509806,"length":183,"previous":"M18-GAP-00236","next":"M18-GAP-00238"},"M18-GAP-00238":{"line":2933,"offset":509989,"length":181,"previous":"M18-GAP-00237","next":"M18-GAP-00239"},"M18-GAP-00239":{"line":2934,"offset":510170,"length":181,"previous":"M18-GAP-00238","next":"M18-GAP-00240"},"M18-GAP-00240":{"line":2935,"offset":510351,"length":185,"previous":"M18-GAP-00239","next":"M18-GAP-00241"},"M18-GAP-00241":{"line":2936,"offset":510536,"length":194,"previous":"M18-GAP-00240","next":"M18-GAP-00242"},"M18-GAP-00242":{"line":2937,"offset":510730,"length":181,"previous":"M18-GAP-00241","next":"M18-GAP-00243"},"M18-GAP-00243":{"line":2938,"offset":510911,"length":186,"previous":"M18-GAP-00242","next":"M18-GAP-00244"},"M18-GAP-00244":{"line":2939,"offset":511097,"length":181,"previous":"M18-GAP-00243","next":"M18-GAP-00245"},"M18-GAP-00245":{"line":2940,"offset":511278,"length":184,"previous":"M18-GAP-00244","next":"M18-GAP-00246"},"M18-GAP-00246":{"line":2941,"offset":511462,"length":190,"previous":"M18-GAP-00245","next":"M18-GAP-00247"},"M18-GAP-00247":{"line":2942,"offset":511652,"length":185,"previous":"M18-GAP-00246","next":"M18-GAP-00248"},"M18-GAP-00248":{"line":2943,"offset":511837,"length":186,"previous":"M18-GAP-00247","next":"M18-GAP-00249"},"M18-GAP-00249":{"line":2944,"offset":512023,"length":185,"previous":"M18-GAP-00248","next":"M18-GAP-00250"},"M18-GAP-00250":{"line":2945,"offset":512208,"length":185,"previous":"M18-GAP-00249","next":"M18-GAP-00251"},"M18-GAP-00251":{"line":2946,"offset":512393,"length":183,"previous":"M18-GAP-00250","next":"M18-GAP-00252"},"M18-GAP-00252":{"line":2947,"offset":512576,"length":191,"previous":"M18-GAP-00251","next":"M18-GAP-00253"},"M18-GAP-00253":{"line":2948,"offset":512767,"length":191,"previous":"M18-GAP-00252","next":"M18-GAP-00254"},"M18-GAP-00254":{"line":2949,"offset":512958,"length":179,"previous":"M18-GAP-00253","next":"M18-GAP-00255"},"M18-GAP-00255":{"line":2950,"offset":513137,"length":186,"previous":"M18-GAP-00254","next":"M18-GAP-00256"},"M18-GAP-00256":{"line":2951,"offset":513323,"length":187,"previous":"M18-GAP-00255","next":"M18-GAP-00257"},"M18-GAP-00257":{"line":2952,"offset":513510,"length":188,"previous":"M18-GAP-00256","next":"M18-GAP-00258"},"M18-GAP-00258":{"line":2953,"offset":513698,"length":189,"previous":"M18-GAP-00257","next":"M18-GAP-00259"},"M18-GAP-00259":{"line":2954,"offset":513887,"length":187,"previous":"M18-GAP-00258","next":"M18-GAP-00260"},"M18-GAP-00260":{"line":2955,"offset":514074,"length":182,"previous":"M18-GAP-00259","next":"M18-GAP-00261"},"M18-GAP-00261":{"line":2956,"offset":514256,"length":180,"previous":"M18-GAP-00260","next":"M18-GAP-00262"},"M18-GAP-00262":{"line":2957,"offset":514436,"length":189,"previous":"M18-GAP-00261","next":"M18-GAP-00263"},"M18-GAP-00263":{"line":2958,"offset":514625,"length":188,"previous":"M18-GAP-00262","next":"M18-GAP-00264"},"M18-GAP-00264":{"line":2959,"offset":514813,"length":188,"previous":"M18-GAP-00263","next":"M18-GAP-00265"},"M18-GAP-00265":{"line":2960,"offset":515001,"length":184,"previous":"M18-GAP-00264","next":"M18-GAP-00266"},"M18-GAP-00266":{"line":2961,"offset":515185,"length":185,"previous":"M18-GAP-00265","next":"M18-GAP-00267"},"M18-GAP-00267":{"line":2962,"offset":515370,"length":188,"previous":"M18-GAP-00266","next":"M18-GAP-00268"},"M18-GAP-00268":{"line":2963,"offset":515558,"length":186,"previous":"M18-GAP-00267","next":"M18-GAP-00269"},"M18-GAP-00269":{"line":2964,"offset":515744,"length":185,"previous":"M18-GAP-00268","next":"M18-GAP-00270"},"M18-GAP-00270":{"line":2965,"offset":515929,"length":188,"previous":"M18-GAP-00269","next":"M18-GAP-00271"},"M18-GAP-00271":{"line":2966,"offset":516117,"length":187,"previous":"M18-GAP-00270","next":"M18-GAP-00272"},"M18-GAP-00272":{"line":2967,"offset":516304,"length":186,"previous":"M18-GAP-00271","next":"M18-GAP-00273"},"M18-GAP-00273":{"line":2968,"offset":516490,"length":189,"previous":"M18-GAP-00272","next":"M18-GAP-00274"},"M18-GAP-00274":{"line":2969,"offset":516679,"length":184,"previous":"M18-GAP-00273","next":"M18-GAP-00275"},"M18-GAP-00275":{"line":2970,"offset":516863,"length":193,"previous":"M18-GAP-00274","next":"M18-GAP-00276"},"M18-GAP-00276":{"line":2971,"offset":517056,"length":186,"previous":"M18-GAP-00275","next":"M18-GAP-00277"},"M18-GAP-00277":{"line":2972,"offset":517242,"length":186,"previous":"M18-GAP-00276","next":"M18-GAP-00278"},"M18-GAP-00278":{"line":2973,"offset":517428,"length":184,"previous":"M18-GAP-00277","next":"M18-GAP-00279"},"M18-GAP-00279":{"line":2974,"offset":517612,"length":183,"previous":"M18-GAP-00278","next":"M18-GAP-00280"},"M18-GAP-00280":{"line":2975,"offset":517795,"length":188,"previous":"M18-GAP-00279","next":"M18-GAP-00281"},"M18-GAP-00281":{"line":2976,"offset":517983,"length":184,"previous":"M18-GAP-00280","next":"M18-GAP-00282"},"M18-GAP-00282":{"line":2977,"offset":518167,"length":186,"previous":"M18-GAP-00281","next":"M18-GAP-00283"},"M18-GAP-00283":{"line":2978,"offset":518353,"length":193,"previous":"M18-GAP-00282","next":"M18-GAP-00284"},"M18-GAP-00284":{"line":2979,"offset":518546,"length":195,"previous":"M18-GAP-00283","next":"M18-GAP-00285"},"M18-GAP-00285":{"line":2980,"offset":518741,"length":188,"previous":"M18-GAP-00284","next":"M18-GAP-00286"},"M18-GAP-00286":{"line":2981,"offset":518929,"length":186,"previous":"M18-GAP-00285","next":"M18-GAP-00287"},"M18-GAP-00287":{"line":2982,"offset":519115,"length":187,"previous":"M18-GAP-00286","next":"M18-GAP-00288"},"M18-GAP-00288":{"line":2983,"offset":519302,"length":183,"previous":"M18-GAP-00287","next":"M18-GAP-00289"},"M18-GAP-00289":{"line":2984,"offset":519485,"length":191,"previous":"M18-GAP-00288","next":"M18-GAP-00290"},"M18-GAP-00290":{"line":2985,"offset":519676,"length":189,"previous":"M18-GAP-00289","next":"M18-GAP-00291"},"M18-GAP-00291":{"line":2986,"offset":519865,"length":196,"previous":"M18-GAP-00290","next":"M18-GAP-00292"},"M18-GAP-00292":{"line":2987,"offset":520061,"length":187,"previous":"M18-GAP-00291","next":"M18-GAP-00293"},"M18-GAP-00293":{"line":2988,"offset":520248,"length":187,"previous":"M18-GAP-00292","next":"M18-GAP-00294"},"M18-GAP-00294":{"line":2989,"offset":520435,"length":185,"previous":"M18-GAP-00293","next":"M18-GAP-00295"},"M18-GAP-00295":{"line":2990,"offset":520620,"length":190,"previous":"M18-GAP-00294","next":"M18-GAP-00296"},"M18-GAP-00296":{"line":2991,"offset":520810,"length":188,"previous":"M18-GAP-00295","next":"M18-GAP-00297"},"M18-GAP-00297":{"line":2992,"offset":520998,"length":193,"previous":"M18-GAP-00296","next":"M18-GAP-00298"},"M18-GAP-00298":{"line":2993,"offset":521191,"length":193,"previous":"M18-GAP-00297","next":"M18-GAP-00299"},"M18-GAP-00299":{"line":2994,"offset":521384,"length":196,"previous":"M18-GAP-00298","next":"M18-GAP-00300"},"M18-GAP-00300":{"line":2995,"offset":521580,"length":190,"previous":"M18-GAP-00299","next":"M18-GAP-00301"},"M18-GAP-00301":{"line":2996,"offset":521770,"length":189,"previous":"M18-GAP-00300","next":"M18-GAP-00302"},"M18-GAP-00302":{"line":2997,"offset":521959,"length":178,"previous":"M18-GAP-00301","next":"M18-GAP-00303"},"M18-GAP-00303":{"line":2998,"offset":522137,"length":193,"previous":"M18-GAP-00302","next":"M18-GAP-00304"},"M18-GAP-00304":{"line":2999,"offset":522330,"length":184,"previous":"M18-GAP-00303","next":"M18-GAP-00305"},"M18-GAP-00305":{"line":3000,"offset":522514,"length":189,"previous":"M18-GAP-00304","next":"M18-GAP-00306"},"M18-GAP-00306":{"line":3001,"offset":522703,"length":186,"previous":"M18-GAP-00305","next":"M18-GAP-00307"},"M18-GAP-00307":{"line":3002,"offset":522889,"length":186,"previous":"M18-GAP-00306","next":"M18-GAP-00308"},"M18-GAP-00308":{"line":3003,"offset":523075,"length":187,"previous":"M18-GAP-00307","next":"M18-GAP-00309"},"M18-GAP-00309":{"line":3004,"offset":523262,"length":187,"previous":"M18-GAP-00308","next":"M18-GAP-00310"},"M18-GAP-00310":{"line":3005,"offset":523449,"length":184,"previous":"M18-GAP-00309","next":"M18-GAP-00311"},"M18-GAP-00311":{"line":3006,"offset":523633,"length":187,"previous":"M18-GAP-00310","next":"M18-GAP-00312"},"M18-GAP-00312":{"line":3007,"offset":523820,"length":188,"previous":"M18-GAP-00311","next":"M18-GAP-00313"},"M18-GAP-00313":{"line":3008,"offset":524008,"length":192,"previous":"M18-GAP-00312","next":"M18-GAP-00314"},"M18-GAP-00314":{"line":3009,"offset":524200,"length":188,"previous":"M18-GAP-00313","next":"M18-GAP-00315"},"M18-GAP-00315":{"line":3010,"offset":524388,"length":189,"previous":"M18-GAP-00314","next":"M18-GAP-00316"},"M18-GAP-00316":{"line":3011,"offset":524577,"length":185,"previous":"M18-GAP-00315","next":"M18-GAP-00317"},"M18-GAP-00317":{"line":3012,"offset":524762,"length":181,"previous":"M18-GAP-00316","next":"M18-GAP-00318"},"M18-GAP-00318":{"line":3013,"offset":524943,"length":185,"previous":"M18-GAP-00317","next":"M18-GAP-00319"},"M18-GAP-00319":{"line":3014,"offset":525128,"length":188,"previous":"M18-GAP-00318","next":"M18-GAP-00320"},"M18-GAP-00320":{"line":3015,"offset":525316,"length":183,"previous":"M18-GAP-00319","next":"M18-GAP-00321"},"M18-GAP-00321":{"line":3016,"offset":525499,"length":189,"previous":"M18-GAP-00320","next":"M18-GAP-00322"},"M18-GAP-00322":{"line":3017,"offset":525688,"length":192,"previous":"M18-GAP-00321","next":"M18-GAP-00323"},"M18-GAP-00323":{"line":3018,"offset":525880,"length":187,"previous":"M18-GAP-00322","next":"M18-GAP-00324"},"M18-GAP-00324":{"line":3019,"offset":526067,"length":183,"previous":"M18-GAP-00323","next":"M18-GAP-00325"},"M18-GAP-00325":{"line":3020,"offset":526250,"length":187,"previous":"M18-GAP-00324","next":"M18-GAP-00326"},"M18-GAP-00326":{"line":3021,"offset":526437,"length":187,"previous":"M18-GAP-00325","next":"M18-GAP-00327"},"M18-GAP-00327":{"line":3022,"offset":526624,"length":186,"previous":"M18-GAP-00326","next":"M18-GAP-00328"},"M18-GAP-00328":{"line":3023,"offset":526810,"length":191,"previous":"M18-GAP-00327","next":"M18-GAP-00329"},"M18-GAP-00329":{"line":3024,"offset":527001,"length":179,"previous":"M18-GAP-00328","next":"M18-GAP-00330"},"M18-GAP-00330":{"line":3025,"offset":527180,"length":182,"previous":"M18-GAP-00329","next":"M18-GAP-00331"},"M18-GAP-00331":{"line":3026,"offset":527362,"length":185,"previous":"M18-GAP-00330","next":"M18-GAP-00332"},"M18-GAP-00332":{"line":3027,"offset":527547,"length":190,"previous":"M18-GAP-00331","next":"M18-GAP-00333"},"M18-GAP-00333":{"line":3028,"offset":527737,"length":184,"previous":"M18-GAP-00332","next":"M18-GAP-00334"},"M18-GAP-00334":{"line":3029,"offset":527921,"length":190,"previous":"M18-GAP-00333","next":"M18-GAP-00335"},"M18-GAP-00335":{"line":3030,"offset":528111,"length":186,"previous":"M18-GAP-00334","next":"M18-GAP-00336"},"M18-GAP-00336":{"line":3031,"offset":528297,"length":187,"previous":"M18-GAP-00335","next":"M18-GAP-00337"},"M18-GAP-00337":{"line":3032,"offset":528484,"length":189,"previous":"M18-GAP-00336","next":"M18-GAP-00338"},"M18-GAP-00338":{"line":3033,"offset":528673,"length":191,"previous":"M18-GAP-00337","next":"M18-GAP-00339"},"M18-GAP-00339":{"line":3034,"offset":528864,"length":182,"previous":"M18-GAP-00338","next":"M18-GAP-00340"},"M18-GAP-00340":{"line":3035,"offset":529046,"length":191,"previous":"M18-GAP-00339","next":"M18-GAP-00341"},"M18-GAP-00341":{"line":3036,"offset":529237,"length":184,"previous":"M18-GAP-00340","next":"M18-GAP-00342"},"M18-GAP-00342":{"line":3037,"offset":529421,"length":182,"previous":"M18-GAP-00341","next":"M18-GAP-00343"},"M18-GAP-00343":{"line":3038,"offset":529603,"length":186,"previous":"M18-GAP-00342","next":"M18-GAP-00344"},"M18-GAP-00344":{"line":3039,"offset":529789,"length":182,"previous":"M18-GAP-00343","next":"M18-GAP-00345"},"M18-GAP-00345":{"line":3040,"offset":529971,"length":181,"previous":"M18-GAP-00344","next":"M18-GAP-00346"},"M18-GAP-00346":{"line":3041,"offset":530152,"length":187,"previous":"M18-GAP-00345","next":"M18-GAP-00347"},"M18-GAP-00347":{"line":3042,"offset":530339,"length":179,"previous":"M18-GAP-00346","next":"M18-GAP-00348"},"M18-GAP-00348":{"line":3043,"offset":530518,"length":190,"previous":"M18-GAP-00347","next":"M18-GAP-00349"},"M18-GAP-00349":{"line":3044,"offset":530708,"length":183,"previous":"M18-GAP-00348","next":"M18-GAP-00350"},"M18-GAP-00350":{"line":3045,"offset":530891,"length":185,"previous":"M18-GAP-00349","next":"M18-GAP-00351"},"M18-GAP-00351":{"line":3046,"offset":531076,"length":180,"previous":"M18-GAP-00350","next":"M18-GAP-00352"},"M18-GAP-00352":{"line":3047,"offset":531256,"length":183,"previous":"M18-GAP-00351","next":"M18-GAP-00353"},"M18-GAP-00353":{"line":3048,"offset":531439,"length":176,"previous":"M18-GAP-00352","next":"M18-GAP-00354"},"M18-GAP-00354":{"line":3049,"offset":531615,"length":183,"previous":"M18-GAP-00353","next":"M18-GAP-00355"},"M18-GAP-00355":{"line":3050,"offset":531798,"length":176,"previous":"M18-GAP-00354","next":"M18-GAP-00356"},"M18-GAP-00356":{"line":3051,"offset":531974,"length":177,"previous":"M18-GAP-00355","next":"M18-GAP-00357"},"M18-GAP-00357":{"line":3052,"offset":532151,"length":172,"previous":"M18-GAP-00356","next":"M18-GAP-00358"},"M18-GAP-00358":{"line":3053,"offset":532323,"length":176,"previous":"M18-GAP-00357","next":"M18-GAP-00359"},"M18-GAP-00359":{"line":3054,"offset":532499,"length":181,"previous":"M18-GAP-00358","next":"M18-GAP-00360"},"M18-GAP-00360":{"line":3055,"offset":532680,"length":182,"previous":"M18-GAP-00359","next":"M18-GAP-00361"},"M18-GAP-00361":{"line":3056,"offset":532862,"length":178,"previous":"M18-GAP-00360","next":"M18-GAP-00362"},"M18-GAP-00362":{"line":3057,"offset":533040,"length":176,"previous":"M18-GAP-00361","next":"M18-GAP-00363"},"M18-GAP-00363":{"line":3058,"offset":533216,"length":175,"previous":"M18-GAP-00362","next":"M18-GAP-00364"},"M18-GAP-00364":{"line":3059,"offset":533391,"length":185,"previous":"M18-GAP-00363","next":"M18-GAP-00365"},"M18-GAP-00365":{"line":3060,"offset":533576,"length":179,"previous":"M18-GAP-00364","next":"M18-GAP-00366"},"M18-GAP-00366":{"line":3061,"offset":533755,"length":181,"previous":"M18-GAP-00365","next":"M18-GAP-00367"},"M18-GAP-00367":{"line":3062,"offset":533936,"length":180,"previous":"M18-GAP-00366","next":"M18-GAP-00368"},"M18-GAP-00368":{"line":3063,"offset":534116,"length":181,"previous":"M18-GAP-00367","next":"M18-GAP-00369"},"M18-GAP-00369":{"line":3064,"offset":534297,"length":176,"previous":"M18-GAP-00368","next":"M18-GAP-00370"},"M18-GAP-00370":{"line":3065,"offset":534473,"length":175,"previous":"M18-GAP-00369","next":"M18-GAP-00371"},"M18-GAP-00371":{"line":3066,"offset":534648,"length":182,"previous":"M18-GAP-00370","next":"M18-GAP-00372"},"M18-GAP-00372":{"line":3067,"offset":534830,"length":182,"previous":"M18-GAP-00371","next":"M18-GAP-00373"},"M18-GAP-00373":{"line":3068,"offset":535012,"length":171,"previous":"M18-GAP-00372","next":"M18-GAP-00374"},"M18-GAP-00374":{"line":3069,"offset":535183,"length":177,"previous":"M18-GAP-00373","next":"M18-GAP-00375"},"M18-GAP-00375":{"line":3070,"offset":535360,"length":172,"previous":"M18-GAP-00374","next":"M18-GAP-00376"},"M18-GAP-00376":{"line":3071,"offset":535532,"length":179,"previous":"M18-GAP-00375","next":"M18-GAP-00377"},"M18-GAP-00377":{"line":3072,"offset":535711,"length":177,"previous":"M18-GAP-00376","next":"M18-GAP-00378"},"M18-GAP-00378":{"line":3073,"offset":535888,"length":179,"previous":"M18-GAP-00377","next":"M18-GAP-00379"},"M18-GAP-00379":{"line":3074,"offset":536067,"length":180,"previous":"M18-GAP-00378","next":"M18-GAP-00380"},"M18-GAP-00380":{"line":3075,"offset":536247,"length":175,"previous":"M18-GAP-00379","next":"M18-GAP-00381"},"M18-GAP-00381":{"line":3076,"offset":536422,"length":177,"previous":"M18-GAP-00380","next":"M18-GAP-00382"},"M18-GAP-00382":{"line":3077,"offset":536599,"length":174,"previous":"M18-GAP-00381","next":"M18-GAP-00383"},"M18-GAP-00383":{"line":3078,"offset":536773,"length":172,"previous":"M18-GAP-00382","next":"M18-GAP-00384"},"M18-GAP-00384":{"line":3079,"offset":536945,"length":172,"previous":"M18-GAP-00383","next":"M18-GAP-00385"},"M18-GAP-00385":{"line":3080,"offset":537117,"length":175,"previous":"M18-GAP-00384","next":"M18-GAP-00386"},"M18-GAP-00386":{"line":3081,"offset":537292,"length":174,"previous":"M18-GAP-00385","next":"M18-GAP-00387"},"M18-GAP-00387":{"line":3082,"offset":537466,"length":180,"previous":"M18-GAP-00386","next":"M18-GAP-00388"},"M18-GAP-00388":{"line":3083,"offset":537646,"length":173,"previous":"M18-GAP-00387","next":"M18-GAP-00389"},"M18-GAP-00389":{"line":3084,"offset":537819,"length":178,"previous":"M18-GAP-00388","next":"M18-GAP-00390"},"M18-GAP-00390":{"line":3085,"offset":537997,"length":179,"previous":"M18-GAP-00389","next":"M18-GAP-00391"},"M18-GAP-00391":{"line":3086,"offset":538176,"length":176,"previous":"M18-GAP-00390","next":"M18-GAP-00392"},"M18-GAP-00392":{"line":3087,"offset":538352,"length":175,"previous":"M18-GAP-00391","next":"M18-GAP-00393"},"M18-GAP-00393":{"line":3088,"offset":538527,"length":174,"previous":"M18-GAP-00392","next":"M18-GAP-00394"},"M18-GAP-00394":{"line":3089,"offset":538701,"length":171,"previous":"M18-GAP-00393","next":"M18-GAP-00395"},"M18-GAP-00395":{"line":3090,"offset":538872,"length":170,"previous":"M18-GAP-00394","next":"M18-GAP-00396"},"M18-GAP-00396":{"line":3091,"offset":539042,"length":173,"previous":"M18-GAP-00395","next":"M18-GAP-00397"},"M18-GAP-00397":{"line":3092,"offset":539215,"length":176,"previous":"M18-GAP-00396","next":"M18-GAP-00398"},"M18-GAP-00398":{"line":3093,"offset":539391,"length":178,"previous":"M18-GAP-00397","next":"M18-GAP-00399"},"M18-GAP-00399":{"line":3094,"offset":539569,"length":173,"previous":"M18-GAP-00398","next":"M18-GAP-00400"},"M18-GAP-00400":{"line":3095,"offset":539742,"length":176,"previous":"M18-GAP-00399","next":"M18-GAP-00401"},"M18-GAP-00401":{"line":3096,"offset":539918,"length":177,"previous":"M18-GAP-00400","next":"M18-GAP-00402"},"M18-GAP-00402":{"line":3097,"offset":540095,"length":176,"previous":"M18-GAP-00401","next":"M18-GAP-00403"},"M18-GAP-00403":{"line":3098,"offset":540271,"length":178,"previous":"M18-GAP-00402","next":"M18-GAP-00404"},"M18-GAP-00404":{"line":3099,"offset":540449,"length":182,"previous":"M18-GAP-00403","next":"M18-GAP-00405"},"M18-GAP-00405":{"line":3100,"offset":540631,"length":181,"previous":"M18-GAP-00404","next":"M18-GAP-00406"},"M18-GAP-00406":{"line":3101,"offset":540812,"length":178,"previous":"M18-GAP-00405","next":"M18-GAP-00407"},"M18-GAP-00407":{"line":3102,"offset":540990,"length":179,"previous":"M18-GAP-00406","next":"M18-GAP-00408"},"M18-GAP-00408":{"line":3103,"offset":541169,"length":176,"previous":"M18-GAP-00407","next":"M18-GAP-00409"},"M18-GAP-00409":{"line":3104,"offset":541345,"length":170,"previous":"M18-GAP-00408","next":"M18-GAP-00410"},"M18-GAP-00410":{"line":3105,"offset":541515,"length":175,"previous":"M18-GAP-00409","next":"M18-GAP-00411"},"M18-GAP-00411":{"line":3106,"offset":541690,"length":174,"previous":"M18-GAP-00410","next":"M18-GAP-00412"},"M18-GAP-00412":{"line":3107,"offset":541864,"length":179,"previous":"M18-GAP-00411","next":"M18-GAP-00413"},"M18-GAP-00413":{"line":3108,"offset":542043,"length":174,"previous":"M18-GAP-00412","next":"M18-GAP-00414"},"M18-GAP-00414":{"line":3109,"offset":542217,"length":173,"previous":"M18-GAP-00413","next":"M18-GAP-00415"},"M18-GAP-00415":{"line":3110,"offset":542390,"length":180,"previous":"M18-GAP-00414","next":"M18-GAP-00416"},"M18-GAP-00416":{"line":3111,"offset":542570,"length":178,"previous":"M18-GAP-00415","next":"M18-GAP-00417"},"M18-GAP-00417":{"line":3112,"offset":542748,"length":178,"previous":"M18-GAP-00416","next":"M18-GAP-00418"},"M18-GAP-00418":{"line":3113,"offset":542926,"length":174,"previous":"M18-GAP-00417","next":"M18-GAP-00419"},"M18-GAP-00419":{"line":3114,"offset":543100,"length":187,"previous":"M18-GAP-00418","next":"M18-GAP-00420"},"M18-GAP-00420":{"line":3115,"offset":543287,"length":174,"previous":"M18-GAP-00419","next":"M18-GAP-00421"},"M18-GAP-00421":{"line":3116,"offset":543461,"length":175,"previous":"M18-GAP-00420","next":"M18-GAP-00422"},"M18-GAP-00422":{"line":3117,"offset":543636,"length":177,"previous":"M18-GAP-00421","next":"M18-GAP-00423"},"M18-GAP-00423":{"line":3118,"offset":543813,"length":175,"previous":"M18-GAP-00422","next":"M18-GAP-00424"},"M18-GAP-00424":{"line":3119,"offset":543988,"length":181,"previous":"M18-GAP-00423","next":"M18-GAP-00425"},"M18-GAP-00425":{"line":3120,"offset":544169,"length":175,"previous":"M18-GAP-00424","next":"M18-GAP-00426"},"M18-GAP-00426":{"line":3121,"offset":544344,"length":178,"previous":"M18-GAP-00425","next":"M18-GAP-00427"},"M18-GAP-00427":{"line":3122,"offset":544522,"length":173,"previous":"M18-GAP-00426","next":"M18-GAP-00428"},"M18-GAP-00428":{"line":3123,"offset":544695,"length":175,"previous":"M18-GAP-00427","next":"M18-GAP-00429"},"M18-GAP-00429":{"line":3124,"offset":544870,"length":175,"previous":"M18-GAP-00428","next":"M18-GAP-00430"},"M18-GAP-00430":{"line":3125,"offset":545045,"length":175,"previous":"M18-GAP-00429","next":"M18-GAP-00431"},"M18-GAP-00431":{"line":3126,"offset":545220,"length":173,"previous":"M18-GAP-00430","next":"M18-GAP-00432"},"M18-GAP-00432":{"line":3127,"offset":545393,"length":177,"previous":"M18-GAP-00431","next":"M18-GAP-00433"},"M18-GAP-00433":{"line":3128,"offset":545570,"length":174,"previous":"M18-GAP-00432","next":"M18-GAP-00434"},"M18-GAP-00434":{"line":3129,"offset":545744,"length":180,"previous":"M18-GAP-00433","next":"M18-GAP-00435"},"M18-GAP-00435":{"line":3130,"offset":545924,"length":180,"previous":"M18-GAP-00434","next":"M18-GAP-00436"},"M18-GAP-00436":{"line":3131,"offset":546104,"length":172,"previous":"M18-GAP-00435","next":"M18-GAP-00437"},"M18-GAP-00437":{"line":3132,"offset":546276,"length":175,"previous":"M18-GAP-00436","next":"M18-GAP-00438"},"M18-GAP-00438":{"line":3133,"offset":546451,"length":172,"previous":"M18-GAP-00437","next":"M18-GAP-00439"},"M18-GAP-00439":{"line":3134,"offset":546623,"length":178,"previous":"M18-GAP-00438","next":"M18-GAP-00440"},"M18-GAP-00440":{"line":3135,"offset":546801,"length":185,"previous":"M18-GAP-00439","next":"M18-GAP-00441"},"M18-GAP-00441":{"line":3136,"offset":546986,"length":177,"previous":"M18-GAP-00440","next":"M18-GAP-00442"},"M18-GAP-00442":{"line":3137,"offset":547163,"length":179,"previous":"M18-GAP-00441","next":"M18-GAP-00443"},"M18-GAP-00443":{"line":3138,"offset":547342,"length":182,"previous":"M18-GAP-00442","next":"M18-GAP-00444"},"M18-GAP-00444":{"line":3139,"offset":547524,"length":178,"previous":"M18-GAP-00443","next":"M18-GAP-00445"},"M18-GAP-00445":{"line":3140,"offset":547702,"length":183,"previous":"M18-GAP-00444","next":"M18-GAP-00446"},"M18-GAP-00446":{"line":3141,"offset":547885,"length":185,"previous":"M18-GAP-00445","next":"M18-GAP-00447"},"M18-GAP-00447":{"line":3142,"offset":548070,"length":177,"previous":"M18-GAP-00446","next":"M18-GAP-00448"},"M18-GAP-00448":{"line":3143,"offset":548247,"length":183,"previous":"M18-GAP-00447","next":"M18-GAP-00449"},"M18-GAP-00449":{"line":3144,"offset":548430,"length":180,"previous":"M18-GAP-00448","next":"M18-GAP-00450"},"M18-GAP-00450":{"line":3145,"offset":548610,"length":177,"previous":"M18-GAP-00449","next":"M18-GAP-00451"},"M18-GAP-00451":{"line":3146,"offset":548787,"length":176,"previous":"M18-GAP-00450","next":"M19-GAP-00001"},"M19-GAP-00001":{"line":3147,"offset":548963,"length":153,"previous":"M18-GAP-00451","next":"M19-GAP-00002"},"M19-GAP-00002":{"line":3148,"offset":549116,"length":155,"previous":"M19-GAP-00001","next":"M19-GAP-00003"},"M19-GAP-00003":{"line":3149,"offset":549271,"length":152,"previous":"M19-GAP-00002","next":"M19-GAP-00004"},"M19-GAP-00004":{"line":3150,"offset":549423,"length":152,"previous":"M19-GAP-00003","next":"M19-GAP-00005"},"M19-GAP-00005":{"line":3151,"offset":549575,"length":153,"previous":"M19-GAP-00004","next":"M19-GAP-00006"},"M19-GAP-00006":{"line":3152,"offset":549728,"length":159,"previous":"M19-GAP-00005","next":"M19-GAP-00007"},"M19-GAP-00007":{"line":3153,"offset":549887,"length":149,"previous":"M19-GAP-00006","next":"M19-GAP-00008"},"M19-GAP-00008":{"line":3154,"offset":550036,"length":152,"previous":"M19-GAP-00007","next":"M19-GAP-00009"},"M19-GAP-00009":{"line":3155,"offset":550188,"length":150,"previous":"M19-GAP-00008","next":"M19-GAP-00010"},"M19-GAP-00010":{"line":3156,"offset":550338,"length":154,"previous":"M19-GAP-00009","next":"M19-GAP-00011"},"M19-GAP-00011":{"line":3157,"offset":550492,"length":151,"previous":"M19-GAP-00010","next":"M19-GAP-00012"},"M19-GAP-00012":{"line":3158,"offset":550643,"length":155,"previous":"M19-GAP-00011","next":"M19-GAP-00013"},"M19-GAP-00013":{"line":3159,"offset":550798,"length":156,"previous":"M19-GAP-00012","next":"M19-GAP-00014"},"M19-GAP-00014":{"line":3160,"offset":550954,"length":154,"previous":"M19-GAP-00013","next":"M19-GAP-00015"},"M19-GAP-00015":{"line":3161,"offset":551108,"length":163,"previous":"M19-GAP-00014","next":"M19-GAP-00016"},"M19-GAP-00016":{"line":3162,"offset":551271,"length":157,"previous":"M19-GAP-00015","next":"M19-GAP-00017"},"M19-GAP-00017":{"line":3163,"offset":551428,"length":152,"previous":"M19-GAP-00016","next":"M19-GAP-00018"},"M19-GAP-00018":{"line":3164,"offset":551580,"length":154,"previous":"M19-GAP-00017","next":"M19-GAP-00019"},"M19-GAP-00019":{"line":3165,"offset":551734,"length":151,"previous":"M19-GAP-00018","next":"M19-GAP-00020"},"M19-GAP-00020":{"line":3166,"offset":551885,"length":153,"previous":"M19-GAP-00019","next":"M20-GAP-00001"},"M20-GAP-00001":{"line":3167,"offset":552038,"length":161,"previous":"M19-GAP-00020","next":"M20-GAP-00002"},"M20-GAP-00002":{"line":3168,"offset":552199,"length":167,"previous":"M20-GAP-00001","next":"M20-GAP-00003"},"M20-GAP-00003":{"line":3169,"offset":552366,"length":157,"previous":"M20-GAP-00002","next":"M20-GAP-00004"},"M20-GAP-00004":{"line":3170,"offset":552523,"length":169,"previous":"M20-GAP-00003","next":"M20-GAP-00005"},"M20-GAP-00005":{"line":3171,"offset":552692,"length":162,"previous":"M20-GAP-00004","next":"M20-GAP-00006"},"M20-GAP-00006":{"line":3172,"offset":552854,"length":171,"previous":"M20-GAP-00005","next":"M20-GAP-00007"},"M20-GAP-00007":{"line":3173,"offset":553025,"length":162,"previous":"M20-GAP-00006","next":"M20-GAP-00008"},"M20-GAP-00008":{"line":3174,"offset":553187,"length":169,"previous":"M20-GAP-00007","next":"M20-GAP-00009"},"M20-GAP-00009":{"line":3175,"offset":553356,"length":161,"previous":"M20-GAP-00008","next":"M20-GAP-00010"},"M20-GAP-00010":{"line":3176,"offset":553517,"length":161,"previous":"M20-GAP-00009","next":"M20-GAP-00011"},"M20-GAP-00011":{"line":3177,"offset":553678,"length":158,"previous":"M20-GAP-00010","next":"M20-GAP-00012"},"M20-GAP-00012":{"line":3178,"offset":553836,"length":162,"previous":"M20-GAP-00011","next":"M20-GAP-00013"},"M20-GAP-00013":{"line":3179,"offset":553998,"length":171,"previous":"M20-GAP-00012","next":"M20-GAP-00014"},"M20-GAP-00014":{"line":3180,"offset":554169,"length":162,"previous":"M20-GAP-00013","next":"M20-GAP-00015"},"M20-GAP-00015":{"line":3181,"offset":554331,"length":162,"previous":"M20-GAP-00014","next":"M20-GAP-00016"},"M20-GAP-00016":{"line":3182,"offset":554493,"length":166,"previous":"M20-GAP-00015","next":"M20-GAP-00017"},"M20-GAP-00017":{"line":3183,"offset":554659,"length":166,"previous":"M20-GAP-00016","next":"M20-GAP-00018"},"M20-GAP-00018":{"line":3184,"offset":554825,"length":166,"previous":"M20-GAP-00017","next":"M20-GAP-00019"},"M20-GAP-00019":{"line":3185,"offset":554991,"length":174,"previous":"M20-GAP-00018","next":"M20-GAP-00020"},"M20-GAP-00020":{"line":3186,"offset":555165,"length":175,"previous":"M20-GAP-00019","next":"M20-GAP-00021"},"M20-GAP-00021":{"line":3187,"offset":555340,"length":169,"previous":"M20-GAP-00020","next":"M20-GAP-00022"},"M20-GAP-00022":{"line":3188,"offset":555509,"length":168,"previous":"M20-GAP-00021","next":"M20-GAP-00023"},"M20-GAP-00023":{"line":3189,"offset":555677,"length":169,"previous":"M20-GAP-00022","next":"M20-GAP-00024"},"M20-GAP-00024":{"line":3190,"offset":555846,"length":164,"previous":"M20-GAP-00023","next":"M20-GAP-00025"},"M20-GAP-00025":{"line":3191,"offset":556010,"length":162,"previous":"M20-GAP-00024","next":"M20-GAP-00026"},"M20-GAP-00026":{"line":3192,"offset":556172,"length":168,"previous":"M20-GAP-00025","next":"M20-GAP-00027"},"M20-GAP-00027":{"line":3193,"offset":556340,"length":170,"previous":"M20-GAP-00026","next":"M20-GAP-00028"},"M20-GAP-00028":{"line":3194,"offset":556510,"length":166,"previous":"M20-GAP-00027","next":"M20-GAP-00029"},"M20-GAP-00029":{"line":3195,"offset":556676,"length":162,"previous":"M20-GAP-00028","next":"M20-GAP-00030"},"M20-GAP-00030":{"line":3196,"offset":556838,"length":176,"previous":"M20-GAP-00029","next":"M20-GAP-00031"},"M20-GAP-00031":{"line":3197,"offset":557014,"length":173,"previous":"M20-GAP-00030","next":"M20-GAP-00032"},"M20-GAP-00032":{"line":3198,"offset":557187,"length":173,"previous":"M20-GAP-00031","next":"M20-GAP-00033"},"M20-GAP-00033":{"line":3199,"offset":557360,"length":175,"previous":"M20-GAP-00032","next":"M20-GAP-00034"},"M20-GAP-00034":{"line":3200,"offset":557535,"length":174,"previous":"M20-GAP-00033","next":"M20-GAP-00035"},"M20-GAP-00035":{"line":3201,"offset":557709,"length":172,"previous":"M20-GAP-00034","next":"M20-GAP-00036"},"M20-GAP-00036":{"line":3202,"offset":557881,"length":176,"previous":"M20-GAP-00035","next":"M20-GAP-00037"},"M20-GAP-00037":{"line":3203,"offset":558057,"length":177,"previous":"M20-GAP-00036","next":"M20-GAP-00038"},"M20-GAP-00038":{"line":3204,"offset":558234,"length":172,"previous":"M20-GAP-00037","next":"M20-GAP-00039"},"M20-GAP-00039":{"line":3205,"offset":558406,"length":176,"previous":"M20-GAP-00038","next":"M20-GAP-00040"},"M20-GAP-00040":{"line":3206,"offset":558582,"length":177,"previous":"M20-GAP-00039","next":"M20-GAP-00041"},"M20-GAP-00041":{"line":3207,"offset":558759,"length":174,"previous":"M20-GAP-00040","next":"M20-GAP-00042"},"M20-GAP-00042":{"line":3208,"offset":558933,"length":157,"previous":"M20-GAP-00041","next":"M20-GAP-00043"},"M20-GAP-00043":{"line":3209,"offset":559090,"length":162,"previous":"M20-GAP-00042","next":"M20-GAP-00044"},"M20-GAP-00044":{"line":3210,"offset":559252,"length":168,"previous":"M20-GAP-00043","next":"M20-GAP-00045"},"M20-GAP-00045":{"line":3211,"offset":559420,"length":161,"previous":"M20-GAP-00044","next":"M20-GAP-00046"},"M20-GAP-00046":{"line":3212,"offset":559581,"length":164,"previous":"M20-GAP-00045","next":"M20-GAP-00047"},"M20-GAP-00047":{"line":3213,"offset":559745,"length":173,"previous":"M20-GAP-00046","next":"M20-GAP-00048"},"M20-GAP-00048":{"line":3214,"offset":559918,"length":160,"previous":"M20-GAP-00047","next":"M20-GAP-00049"},"M20-GAP-00049":{"line":3215,"offset":560078,"length":165,"previous":"M20-GAP-00048","next":"M20-GAP-00050"},"M20-GAP-00050":{"line":3216,"offset":560243,"length":176,"previous":"M20-GAP-00049","next":"M20-GAP-00051"},"M20-GAP-00051":{"line":3217,"offset":560419,"length":177,"previous":"M20-GAP-00050","next":"M20-GAP-00052"},"M20-GAP-00052":{"line":3218,"offset":560596,"length":163,"previous":"M20-GAP-00051","next":"M20-GAP-00053"},"M20-GAP-00053":{"line":3219,"offset":560759,"length":171,"previous":"M20-GAP-00052","next":"M20-GAP-00054"},"M20-GAP-00054":{"line":3220,"offset":560930,"length":164,"previous":"M20-GAP-00053","next":"M20-GAP-00055"},"M20-GAP-00055":{"line":3221,"offset":561094,"length":163,"previous":"M20-GAP-00054","next":"M20-GAP-00056"},"M20-GAP-00056":{"line":3222,"offset":561257,"length":159,"previous":"M20-GAP-00055","next":"M20-GAP-00057"},"M20-GAP-00057":{"line":3223,"offset":561416,"length":163,"previous":"M20-GAP-00056","next":"M20-GAP-00058"},"M20-GAP-00058":{"line":3224,"offset":561579,"length":160,"previous":"M20-GAP-00057","next":"M20-GAP-00059"},"M20-GAP-00059":{"line":3225,"offset":561739,"length":168,"previous":"M20-GAP-00058","next":"M20-GAP-00060"},"M20-GAP-00060":{"line":3226,"offset":561907,"length":164,"previous":"M20-GAP-00059","next":"M20-GAP-00061"},"M20-GAP-00061":{"line":3227,"offset":562071,"length":163,"previous":"M20-GAP-00060","next":"M20-GAP-00062"},"M20-GAP-00062":{"line":3228,"offset":562234,"length":165,"previous":"M20-GAP-00061","next":"M20-GAP-00063"},"M20-GAP-00063":{"line":3229,"offset":562399,"length":171,"previous":"M20-GAP-00062","next":"M20-GAP-00064"},"M20-GAP-00064":{"line":3230,"offset":562570,"length":165,"previous":"M20-GAP-00063","next":"M20-GAP-00065"},"M20-GAP-00065":{"line":3231,"offset":562735,"length":165,"previous":"M20-GAP-00064","next":"M20-GAP-00066"},"M20-GAP-00066":{"line":3232,"offset":562900,"length":152,"previous":"M20-GAP-00065","next":"M20-GAP-00067"},"M20-GAP-00067":{"line":3233,"offset":563052,"length":159,"previous":"M20-GAP-00066","next":"M20-GAP-00068"},"M20-GAP-00068":{"line":3234,"offset":563211,"length":159,"previous":"M20-GAP-00067","next":"M20-GAP-00069"},"M20-GAP-00069":{"line":3235,"offset":563370,"length":160,"previous":"M20-GAP-00068","next":"M20-GAP-00070"},"M20-GAP-00070":{"line":3236,"offset":563530,"length":154,"previous":"M20-GAP-00069","next":"M20-GAP-00071"},"M20-GAP-00071":{"line":3237,"offset":563684,"length":157,"previous":"M20-GAP-00070","next":"M20-GAP-00072"},"M20-GAP-00072":{"line":3238,"offset":563841,"length":159,"previous":"M20-GAP-00071","next":"M20-GAP-00073"},"M20-GAP-00073":{"line":3239,"offset":564000,"length":154,"previous":"M20-GAP-00072","next":"M20-GAP-00074"},"M20-GAP-00074":{"line":3240,"offset":564154,"length":160,"previous":"M20-GAP-00073","next":"M20-GAP-00075"},"M20-GAP-00075":{"line":3241,"offset":564314,"length":162,"previous":"M20-GAP-00074","next":"M20-GAP-00076"},"M20-GAP-00076":{"line":3242,"offset":564476,"length":153,"previous":"M20-GAP-00075","next":"M20-GAP-00077"},"M20-GAP-00077":{"line":3243,"offset":564629,"length":154,"previous":"M20-GAP-00076","next":"M20-GAP-00078"},"M20-GAP-00078":{"line":3244,"offset":564783,"length":153,"previous":"M20-GAP-00077","next":"M20-GAP-00079"},"M20-GAP-00079":{"line":3245,"offset":564936,"length":153,"previous":"M20-GAP-00078","next":"M20-GAP-00080"},"M20-GAP-00080":{"line":3246,"offset":565089,"length":154,"previous":"M20-GAP-00079","next":"M20-GAP-00081"},"M20-GAP-00081":{"line":3247,"offset":565243,"length":158,"previous":"M20-GAP-00080","next":"M20-GAP-00082"},"M20-GAP-00082":{"line":3248,"offset":565401,"length":157,"previous":"M20-GAP-00081","next":"M20-GAP-00083"},"M20-GAP-00083":{"line":3249,"offset":565558,"length":157,"previous":"M20-GAP-00082","next":"M20-GAP-00084"},"M20-GAP-00084":{"line":3250,"offset":565715,"length":154,"previous":"M20-GAP-00083","next":"M20-GAP-00085"},"M20-GAP-00085":{"line":3251,"offset":565869,"length":154,"previous":"M20-GAP-00084","next":"M20-GAP-00086"},"M20-GAP-00086":{"line":3252,"offset":566023,"length":154,"previous":"M20-GAP-00085","next":"M20-GAP-00087"},"M20-GAP-00087":{"line":3253,"offset":566177,"length":157,"previous":"M20-GAP-00086","next":"M20-GAP-00088"},"M20-GAP-00088":{"line":3254,"offset":566334,"length":153,"previous":"M20-GAP-00087","next":"M20-GAP-00089"},"M20-GAP-00089":{"line":3255,"offset":566487,"length":153,"previous":"M20-GAP-00088","next":"M21-GAP-00001"},"M21-GAP-00001":{"line":3256,"offset":566640,"length":156,"previous":"M20-GAP-00089","next":"M21-GAP-00002"},"M21-GAP-00002":{"line":3257,"offset":566796,"length":152,"previous":"M21-GAP-00001","next":"M21-GAP-00003"},"M21-GAP-00003":{"line":3258,"offset":566948,"length":161,"previous":"M21-GAP-00002","next":"M21-GAP-00004"},"M21-GAP-00004":{"line":3259,"offset":567109,"length":150,"previous":"M21-GAP-00003","next":"M21-GAP-00005"},"M21-GAP-00005":{"line":3260,"offset":567259,"length":157,"previous":"M21-GAP-00004","next":"M21-GAP-00006"},"M21-GAP-00006":{"line":3261,"offset":567416,"length":157,"previous":"M21-GAP-00005","next":"M21-GAP-00007"},"M21-GAP-00007":{"line":3262,"offset":567573,"length":157,"previous":"M21-GAP-00006","next":"M21-GAP-00008"},"M21-GAP-00008":{"line":3263,"offset":567730,"length":149,"previous":"M21-GAP-00007","next":"M21-GAP-00009"},"M21-GAP-00009":{"line":3264,"offset":567879,"length":155,"previous":"M21-GAP-00008","next":"M21-GAP-00010"},"M21-GAP-00010":{"line":3265,"offset":568034,"length":156,"previous":"M21-GAP-00009","next":"M21-GAP-00011"},"M21-GAP-00011":{"line":3266,"offset":568190,"length":153,"previous":"M21-GAP-00010","next":"M21-GAP-00012"},"M21-GAP-00012":{"line":3267,"offset":568343,"length":156,"previous":"M21-GAP-00011","next":"M21-GAP-00013"},"M21-GAP-00013":{"line":3268,"offset":568499,"length":155,"previous":"M21-GAP-00012","next":"M21-GAP-00014"},"M21-GAP-00014":{"line":3269,"offset":568654,"length":160,"previous":"M21-GAP-00013","next":"M21-GAP-00015"},"M21-GAP-00015":{"line":3270,"offset":568814,"length":156,"previous":"M21-GAP-00014","next":"M21-GAP-00016"},"M21-GAP-00016":{"line":3271,"offset":568970,"length":154,"previous":"M21-GAP-00015","next":"M21-GAP-00017"},"M21-GAP-00017":{"line":3272,"offset":569124,"length":156,"previous":"M21-GAP-00016","next":"M21-GAP-00018"},"M21-GAP-00018":{"line":3273,"offset":569280,"length":151,"previous":"M21-GAP-00017","next":"M21-GAP-00019"},"M21-GAP-00019":{"line":3274,"offset":569431,"length":152,"previous":"M21-GAP-00018","next":"M21-GAP-00020"},"M21-GAP-00020":{"line":3275,"offset":569583,"length":172,"previous":"M21-GAP-00019","next":"M21-GAP-00021"},"M21-GAP-00021":{"line":3276,"offset":569755,"length":171,"previous":"M21-GAP-00020","next":"M21-GAP-00022"},"M21-GAP-00022":{"line":3277,"offset":569926,"length":173,"previous":"M21-GAP-00021","next":"M21-GAP-00023"},"M21-GAP-00023":{"line":3278,"offset":570099,"length":176,"previous":"M21-GAP-00022","next":"M21-GAP-00024"},"M21-GAP-00024":{"line":3279,"offset":570275,"length":174,"previous":"M21-GAP-00023","next":"M21-GAP-00025"},"M21-GAP-00025":{"line":3280,"offset":570449,"length":176,"previous":"M21-GAP-00024","next":"M21-GAP-00026"},"M21-GAP-00026":{"line":3281,"offset":570625,"length":173,"previous":"M21-GAP-00025","next":"M21-GAP-00027"},"M21-GAP-00027":{"line":3282,"offset":570798,"length":176,"previous":"M21-GAP-00026","next":"M21-GAP-00028"},"M21-GAP-00028":{"line":3283,"offset":570974,"length":165,"previous":"M21-GAP-00027","next":"M21-GAP-00029"},"M21-GAP-00029":{"line":3284,"offset":571139,"length":166,"previous":"M21-GAP-00028","next":"M21-GAP-00030"},"M21-GAP-00030":{"line":3285,"offset":571305,"length":167,"previous":"M21-GAP-00029","next":"M21-GAP-00031"},"M21-GAP-00031":{"line":3286,"offset":571472,"length":177,"previous":"M21-GAP-00030","next":"M21-GAP-00032"},"M21-GAP-00032":{"line":3287,"offset":571649,"length":165,"previous":"M21-GAP-00031","next":"M21-GAP-00033"},"M21-GAP-00033":{"line":3288,"offset":571814,"length":166,"previous":"M21-GAP-00032","next":"M21-GAP-00034"},"M21-GAP-00034":{"line":3289,"offset":571980,"length":166,"previous":"M21-GAP-00033","next":"M21-GAP-00035"},"M21-GAP-00035":{"line":3290,"offset":572146,"length":167,"previous":"M21-GAP-00034","next":"M21-GAP-00036"},"M21-GAP-00036":{"line":3291,"offset":572313,"length":170,"previous":"M21-GAP-00035","next":"M21-GAP-00037"},"M21-GAP-00037":{"line":3292,"offset":572483,"length":170,"previous":"M21-GAP-00036","next":"M21-GAP-00038"},"M21-GAP-00038":{"line":3293,"offset":572653,"length":178,"previous":"M21-GAP-00037","next":"M21-GAP-00039"},"M21-GAP-00039":{"line":3294,"offset":572831,"length":178,"previous":"M21-GAP-00038","next":"M21-GAP-00040"},"M21-GAP-00040":{"line":3295,"offset":573009,"length":176,"previous":"M21-GAP-00039","next":"M21-GAP-00041"},"M21-GAP-00041":{"line":3296,"offset":573185,"length":166,"previous":"M21-GAP-00040","next":"M21-GAP-00042"},"M21-GAP-00042":{"line":3297,"offset":573351,"length":174,"previous":"M21-GAP-00041","next":"M21-GAP-00043"},"M21-GAP-00043":{"line":3298,"offset":573525,"length":169,"previous":"M21-GAP-00042","next":"M21-GAP-00044"},"M21-GAP-00044":{"line":3299,"offset":573694,"length":163,"previous":"M21-GAP-00043","next":"M21-GAP-00045"},"M21-GAP-00045":{"line":3300,"offset":573857,"length":177,"previous":"M21-GAP-00044","next":"M21-GAP-00046"},"M21-GAP-00046":{"line":3301,"offset":574034,"length":177,"previous":"M21-GAP-00045","next":"M21-GAP-00047"},"M21-GAP-00047":{"line":3302,"offset":574211,"length":163,"previous":"M21-GAP-00046","next":"M21-GAP-00048"},"M21-GAP-00048":{"line":3303,"offset":574374,"length":163,"previous":"M21-GAP-00047","next":"M21-GAP-00049"},"M21-GAP-00049":{"line":3304,"offset":574537,"length":163,"previous":"M21-GAP-00048","next":"M21-GAP-00050"},"M21-GAP-00050":{"line":3305,"offset":574700,"length":163,"previous":"M21-GAP-00049","next":"M21-GAP-00051"},"M21-GAP-00051":{"line":3306,"offset":574863,"length":163,"previous":"M21-GAP-00050","next":"M21-GAP-00052"},"M21-GAP-00052":{"line":3307,"offset":575026,"length":163,"previous":"M21-GAP-00051","next":"M21-GAP-00053"},"M21-GAP-00053":{"line":3308,"offset":575189,"length":184,"previous":"M21-GAP-00052","next":"M21-GAP-00054"},"M21-GAP-00054":{"line":3309,"offset":575373,"length":184,"previous":"M21-GAP-00053","next":"M21-GAP-00055"},"M21-GAP-00055":{"line":3310,"offset":575557,"length":187,"previous":"M21-GAP-00054","next":"M21-GAP-00056"},"M21-GAP-00056":{"line":3311,"offset":575744,"length":194,"previous":"M21-GAP-00055","next":"M21-GAP-00057"},"M21-GAP-00057":{"line":3312,"offset":575938,"length":189,"previous":"M21-GAP-00056","next":"M21-GAP-00058"},"M21-GAP-00058":{"line":3313,"offset":576127,"length":189,"previous":"M21-GAP-00057","next":"M21-GAP-00059"},"M21-GAP-00059":{"line":3314,"offset":576316,"length":209,"previous":"M21-GAP-00058","next":"M21-GAP-00060"},"M21-GAP-00060":{"line":3315,"offset":576525,"length":211,"previous":"M21-GAP-00059","next":"M21-GAP-00061"},"M21-GAP-00061":{"line":3316,"offset":576736,"length":215,"previous":"M21-GAP-00060","next":"M21-GAP-00062"},"M21-GAP-00062":{"line":3317,"offset":576951,"length":205,"previous":"M21-GAP-00061","next":"M21-GAP-00063"},"M21-GAP-00063":{"line":3318,"offset":577156,"length":202,"previous":"M21-GAP-00062","next":"M21-GAP-00064"},"M21-GAP-00064":{"line":3319,"offset":577358,"length":204,"previous":"M21-GAP-00063","next":"M21-GAP-00065"},"M21-GAP-00065":{"line":3320,"offset":577562,"length":204,"previous":"M21-GAP-00064","next":"M21-GAP-00066"},"M21-GAP-00066":{"line":3321,"offset":577766,"length":204,"previous":"M21-GAP-00065","next":"M21-GAP-00067"},"M21-GAP-00067":{"line":3322,"offset":577970,"length":199,"previous":"M21-GAP-00066","next":"M21-GAP-00068"},"M21-GAP-00068":{"line":3323,"offset":578169,"length":212,"previous":"M21-GAP-00067","next":"M21-GAP-00069"},"M21-GAP-00069":{"line":3324,"offset":578381,"length":202,"previous":"M21-GAP-00068","next":"M21-GAP-00070"},"M21-GAP-00070":{"line":3325,"offset":578583,"length":201,"previous":"M21-GAP-00069","next":"M21-GAP-00071"},"M21-GAP-00071":{"line":3326,"offset":578784,"length":204,"previous":"M21-GAP-00070","next":"M21-GAP-00072"},"M21-GAP-00072":{"line":3327,"offset":578988,"length":199,"previous":"M21-GAP-00071","next":"M21-GAP-00073"},"M21-GAP-00073":{"line":3328,"offset":579187,"length":200,"previous":"M21-GAP-00072","next":"M21-GAP-00074"},"M21-GAP-00074":{"line":3329,"offset":579387,"length":199,"previous":"M21-GAP-00073","next":"M21-GAP-00075"},"M21-GAP-00075":{"line":3330,"offset":579586,"length":199,"previous":"M21-GAP-00074","next":"M21-GAP-00076"},"M21-GAP-00076":{"line":3331,"offset":579785,"length":199,"previous":"M21-GAP-00075","next":"M21-GAP-00077"},"M21-GAP-00077":{"line":3332,"offset":579984,"length":199,"previous":"M21-GAP-00076","next":"M21-GAP-00078"},"M21-GAP-00078":{"line":3333,"offset":580183,"length":211,"previous":"M21-GAP-00077","next":"M21-GAP-00079"},"M21-GAP-00079":{"line":3334,"offset":580394,"length":214,"previous":"M21-GAP-00078","next":"M21-GAP-00080"},"M21-GAP-00080":{"line":3335,"offset":580608,"length":206,"previous":"M21-GAP-00079","next":"M21-GAP-00081"},"M21-GAP-00081":{"line":3336,"offset":580814,"length":206,"previous":"M21-GAP-00080","next":"M21-GAP-00082"},"M21-GAP-00082":{"line":3337,"offset":581020,"length":206,"previous":"M21-GAP-00081","next":"M21-GAP-00083"},"M21-GAP-00083":{"line":3338,"offset":581226,"length":206,"previous":"M21-GAP-00082","next":"M21-GAP-00084"},"M21-GAP-00084":{"line":3339,"offset":581432,"length":199,"previous":"M21-GAP-00083","next":"M21-GAP-00085"},"M21-GAP-00085":{"line":3340,"offset":581631,"length":200,"previous":"M21-GAP-00084","next":"M21-GAP-00086"},"M21-GAP-00086":{"line":3341,"offset":581831,"length":204,"previous":"M21-GAP-00085","next":"M21-GAP-00087"},"M21-GAP-00087":{"line":3342,"offset":582035,"length":215,"previous":"M21-GAP-00086","next":"M21-GAP-00088"},"M21-GAP-00088":{"line":3343,"offset":582250,"length":212,"previous":"M21-GAP-00087","next":"M21-GAP-00089"},"M21-GAP-00089":{"line":3344,"offset":582462,"length":210,"previous":"M21-GAP-00088","next":"M21-GAP-00090"},"M21-GAP-00090":{"line":3345,"offset":582672,"length":208,"previous":"M21-GAP-00089","next":"M21-GAP-00091"},"M21-GAP-00091":{"line":3346,"offset":582880,"length":211,"previous":"M21-GAP-00090","next":"M21-GAP-00092"},"M21-GAP-00092":{"line":3347,"offset":583091,"length":205,"previous":"M21-GAP-00091","next":"M21-GAP-00093"},"M21-GAP-00093":{"line":3348,"offset":583296,"length":199,"previous":"M21-GAP-00092","next":"M21-GAP-00094"},"M21-GAP-00094":{"line":3349,"offset":583495,"length":202,"previous":"M21-GAP-00093","next":"M21-GAP-00095"},"M21-GAP-00095":{"line":3350,"offset":583697,"length":214,"previous":"M21-GAP-00094","next":"M21-GAP-00096"},"M21-GAP-00096":{"line":3351,"offset":583911,"length":204,"previous":"M21-GAP-00095","next":"M21-GAP-00097"},"M21-GAP-00097":{"line":3352,"offset":584115,"length":204,"previous":"M21-GAP-00096","next":"M21-GAP-00098"},"M21-GAP-00098":{"line":3353,"offset":584319,"length":204,"previous":"M21-GAP-00097","next":"M21-GAP-00099"},"M21-GAP-00099":{"line":3354,"offset":584523,"length":203,"previous":"M21-GAP-00098","next":"M21-GAP-00100"},"M21-GAP-00100":{"line":3355,"offset":584726,"length":203,"previous":"M21-GAP-00099","next":"M21-GAP-00101"},"M21-GAP-00101":{"line":3356,"offset":584929,"length":202,"previous":"M21-GAP-00100","next":"M21-GAP-00102"},"M21-GAP-00102":{"line":3357,"offset":585131,"length":204,"previous":"M21-GAP-00101","next":"M21-GAP-00103"},"M21-GAP-00103":{"line":3358,"offset":585335,"length":207,"previous":"M21-GAP-00102","next":"M21-GAP-00104"},"M21-GAP-00104":{"line":3359,"offset":585542,"length":200,"previous":"M21-GAP-00103","next":"M21-GAP-00105"},"M21-GAP-00105":{"line":3360,"offset":585742,"length":209,"previous":"M21-GAP-00104","next":"M21-GAP-00106"},"M21-GAP-00106":{"line":3361,"offset":585951,"length":198,"previous":"M21-GAP-00105","next":"M21-GAP-00107"},"M21-GAP-00107":{"line":3362,"offset":586149,"length":203,"previous":"M21-GAP-00106","next":"M21-GAP-00108"},"M21-GAP-00108":{"line":3363,"offset":586352,"length":206,"previous":"M21-GAP-00107","next":"M21-GAP-00109"},"M21-GAP-00109":{"line":3364,"offset":586558,"length":205,"previous":"M21-GAP-00108","next":"M21-GAP-00110"},"M21-GAP-00110":{"line":3365,"offset":586763,"length":205,"previous":"M21-GAP-00109","next":"M21-GAP-00111"},"M21-GAP-00111":{"line":3366,"offset":586968,"length":190,"previous":"M21-GAP-00110","next":"M21-GAP-00112"},"M21-GAP-00112":{"line":3367,"offset":587158,"length":190,"previous":"M21-GAP-00111","next":"M21-GAP-00113"},"M21-GAP-00113":{"line":3368,"offset":587348,"length":190,"previous":"M21-GAP-00112","next":"M21-GAP-00114"},"M21-GAP-00114":{"line":3369,"offset":587538,"length":187,"previous":"M21-GAP-00113","next":"M21-GAP-00115"},"M21-GAP-00115":{"line":3370,"offset":587725,"length":204,"previous":"M21-GAP-00114","next":"M21-GAP-00116"},"M21-GAP-00116":{"line":3371,"offset":587929,"length":207,"previous":"M21-GAP-00115","next":"M21-GAP-00117"},"M21-GAP-00117":{"line":3372,"offset":588136,"length":207,"previous":"M21-GAP-00116","next":"M21-GAP-00118"},"M21-GAP-00118":{"line":3373,"offset":588343,"length":207,"previous":"M21-GAP-00117","next":"M21-GAP-00119"},"M21-GAP-00119":{"line":3374,"offset":588550,"length":207,"previous":"M21-GAP-00118","next":"M21-GAP-00120"},"M21-GAP-00120":{"line":3375,"offset":588757,"length":207,"previous":"M21-GAP-00119","next":"M21-GAP-00121"},"M21-GAP-00121":{"line":3376,"offset":588964,"length":207,"previous":"M21-GAP-00120","next":"M21-GAP-00122"},"M21-GAP-00122":{"line":3377,"offset":589171,"length":210,"previous":"M21-GAP-00121","next":"M21-GAP-00123"},"M21-GAP-00123":{"line":3378,"offset":589381,"length":210,"previous":"M21-GAP-00122","next":"M21-GAP-00124"},"M21-GAP-00124":{"line":3379,"offset":589591,"length":210,"previous":"M21-GAP-00123","next":"M21-GAP-00125"},"M21-GAP-00125":{"line":3380,"offset":589801,"length":209,"previous":"M21-GAP-00124","next":"M21-GAP-00126"},"M21-GAP-00126":{"line":3381,"offset":590010,"length":214,"previous":"M21-GAP-00125","next":"M21-GAP-00127"},"M21-GAP-00127":{"line":3382,"offset":590224,"length":214,"previous":"M21-GAP-00126","next":"M21-GAP-00128"},"M21-GAP-00128":{"line":3383,"offset":590438,"length":214,"previous":"M21-GAP-00127","next":"M21-GAP-00129"},"M21-GAP-00129":{"line":3384,"offset":590652,"length":214,"previous":"M21-GAP-00128","next":"M21-GAP-00130"},"M21-GAP-00130":{"line":3385,"offset":590866,"length":215,"previous":"M21-GAP-00129","next":"M21-GAP-00131"},"M21-GAP-00131":{"line":3386,"offset":591081,"length":208,"previous":"M21-GAP-00130","next":"M21-GAP-00132"},"M21-GAP-00132":{"line":3387,"offset":591289,"length":208,"previous":"M21-GAP-00131","next":"M21-GAP-00133"},"M21-GAP-00133":{"line":3388,"offset":591497,"length":208,"previous":"M21-GAP-00132","next":"M21-GAP-00134"},"M21-GAP-00134":{"line":3389,"offset":591705,"length":212,"previous":"M21-GAP-00133","next":"M21-GAP-00135"},"M21-GAP-00135":{"line":3390,"offset":591917,"length":212,"previous":"M21-GAP-00134","next":"M21-GAP-00136"},"M21-GAP-00136":{"line":3391,"offset":592129,"length":208,"previous":"M21-GAP-00135","next":"M21-GAP-00137"},"M21-GAP-00137":{"line":3392,"offset":592337,"length":205,"previous":"M21-GAP-00136","next":"M21-GAP-00138"},"M21-GAP-00138":{"line":3393,"offset":592542,"length":216,"previous":"M21-GAP-00137","next":"M21-GAP-00139"},"M21-GAP-00139":{"line":3394,"offset":592758,"length":210,"previous":"M21-GAP-00138","next":"M21-GAP-00140"},"M21-GAP-00140":{"line":3395,"offset":592968,"length":210,"previous":"M21-GAP-00139","next":"M21-GAP-00141"},"M21-GAP-00141":{"line":3396,"offset":593178,"length":187,"previous":"M21-GAP-00140","next":"M21-GAP-00142"},"M21-GAP-00142":{"line":3397,"offset":593365,"length":188,"previous":"M21-GAP-00141","next":"M21-GAP-00143"},"M21-GAP-00143":{"line":3398,"offset":593553,"length":189,"previous":"M21-GAP-00142","next":"M21-GAP-00144"},"M21-GAP-00144":{"line":3399,"offset":593742,"length":188,"previous":"M21-GAP-00143","next":"M21-GAP-00145"},"M21-GAP-00145":{"line":3400,"offset":593930,"length":203,"previous":"M21-GAP-00144","next":"M21-GAP-00146"},"M21-GAP-00146":{"line":3401,"offset":594133,"length":199,"previous":"M21-GAP-00145","next":"M21-GAP-00147"},"M21-GAP-00147":{"line":3402,"offset":594332,"length":199,"previous":"M21-GAP-00146","next":"M21-GAP-00148"},"M21-GAP-00148":{"line":3403,"offset":594531,"length":199,"previous":"M21-GAP-00147","next":"M21-GAP-00149"},"M21-GAP-00149":{"line":3404,"offset":594730,"length":199,"previous":"M21-GAP-00148","next":"M21-GAP-00150"},"M21-GAP-00150":{"line":3405,"offset":594929,"length":199,"previous":"M21-GAP-00149","next":"M21-GAP-00151"},"M21-GAP-00151":{"line":3406,"offset":595128,"length":199,"previous":"M21-GAP-00150","next":"M21-GAP-00152"},"M21-GAP-00152":{"line":3407,"offset":595327,"length":203,"previous":"M21-GAP-00151","next":"M21-GAP-00153"},"M21-GAP-00153":{"line":3408,"offset":595530,"length":203,"previous":"M21-GAP-00152","next":"M21-GAP-00154"},"M21-GAP-00154":{"line":3409,"offset":595733,"length":203,"previous":"M21-GAP-00153","next":"M21-GAP-00155"},"M21-GAP-00155":{"line":3410,"offset":595936,"length":204,"previous":"M21-GAP-00154","next":"M21-GAP-00156"},"M21-GAP-00156":{"line":3411,"offset":596140,"length":205,"previous":"M21-GAP-00155","next":"M21-GAP-00157"},"M21-GAP-00157":{"line":3412,"offset":596345,"length":201,"previous":"M21-GAP-00156","next":"M21-GAP-00158"},"M21-GAP-00158":{"line":3413,"offset":596546,"length":201,"previous":"M21-GAP-00157","next":"M21-GAP-00159"},"M21-GAP-00159":{"line":3414,"offset":596747,"length":201,"previous":"M21-GAP-00158","next":"M21-GAP-00160"},"M21-GAP-00160":{"line":3415,"offset":596948,"length":201,"previous":"M21-GAP-00159","next":"M21-GAP-00161"},"M21-GAP-00161":{"line":3416,"offset":597149,"length":201,"previous":"M21-GAP-00160","next":"M21-GAP-00162"},"M21-GAP-00162":{"line":3417,"offset":597350,"length":201,"previous":"M21-GAP-00161","next":"M21-GAP-00163"},"M21-GAP-00163":{"line":3418,"offset":597551,"length":204,"previous":"M21-GAP-00162","next":"M21-GAP-00164"},"M21-GAP-00164":{"line":3419,"offset":597755,"length":200,"previous":"M21-GAP-00163","next":"M21-GAP-00165"},"M21-GAP-00165":{"line":3420,"offset":597955,"length":200,"previous":"M21-GAP-00164","next":"M21-GAP-00166"},"M21-GAP-00166":{"line":3421,"offset":598155,"length":200,"previous":"M21-GAP-00165","next":"M21-GAP-00167"},"M21-GAP-00167":{"line":3422,"offset":598355,"length":200,"previous":"M21-GAP-00166","next":"M21-GAP-00168"},"M21-GAP-00168":{"line":3423,"offset":598555,"length":200,"previous":"M21-GAP-00167","next":"M21-GAP-00169"},"M21-GAP-00169":{"line":3424,"offset":598755,"length":203,"previous":"M21-GAP-00168","next":"M21-GAP-00170"},"M21-GAP-00170":{"line":3425,"offset":598958,"length":200,"previous":"M21-GAP-00169","next":"M21-GAP-00171"},"M21-GAP-00171":{"line":3426,"offset":599158,"length":204,"previous":"M21-GAP-00170","next":"M21-GAP-00172"},"M21-GAP-00172":{"line":3427,"offset":599362,"length":202,"previous":"M21-GAP-00171","next":"M21-GAP-00173"},"M21-GAP-00173":{"line":3428,"offset":599564,"length":208,"previous":"M21-GAP-00172","next":"M21-GAP-00174"},"M21-GAP-00174":{"line":3429,"offset":599772,"length":204,"previous":"M21-GAP-00173","next":"M21-GAP-00175"},"M21-GAP-00175":{"line":3430,"offset":599976,"length":204,"previous":"M21-GAP-00174","next":"M21-GAP-00176"},"M21-GAP-00176":{"line":3431,"offset":600180,"length":204,"previous":"M21-GAP-00175","next":"M21-GAP-00177"},"M21-GAP-00177":{"line":3432,"offset":600384,"length":204,"previous":"M21-GAP-00176","next":"M21-GAP-00178"},"M21-GAP-00178":{"line":3433,"offset":600588,"length":204,"previous":"M21-GAP-00177","next":"M21-GAP-00179"},"M21-GAP-00179":{"line":3434,"offset":600792,"length":204,"previous":"M21-GAP-00178","next":"M21-GAP-00180"},"M21-GAP-00180":{"line":3435,"offset":600996,"length":204,"previous":"M21-GAP-00179","next":"M21-GAP-00181"},"M21-GAP-00181":{"line":3436,"offset":601200,"length":204,"previous":"M21-GAP-00180","next":"M21-GAP-00182"},"M21-GAP-00182":{"line":3437,"offset":601404,"length":204,"previous":"M21-GAP-00181","next":"M21-GAP-00183"},"M21-GAP-00183":{"line":3438,"offset":601608,"length":204,"previous":"M21-GAP-00182","next":"M21-GAP-00184"},"M21-GAP-00184":{"line":3439,"offset":601812,"length":204,"previous":"M21-GAP-00183","next":"M21-GAP-00185"},"M21-GAP-00185":{"line":3440,"offset":602016,"length":204,"previous":"M21-GAP-00184","next":"M21-GAP-00186"},"M21-GAP-00186":{"line":3441,"offset":602220,"length":204,"previous":"M21-GAP-00185","next":"M21-GAP-00187"},"M21-GAP-00187":{"line":3442,"offset":602424,"length":204,"previous":"M21-GAP-00186","next":"M21-GAP-00188"},"M21-GAP-00188":{"line":3443,"offset":602628,"length":204,"previous":"M21-GAP-00187","next":"M21-GAP-00189"},"M21-GAP-00189":{"line":3444,"offset":602832,"length":193,"previous":"M21-GAP-00188","next":"M21-GAP-00190"},"M21-GAP-00190":{"line":3445,"offset":603025,"length":193,"previous":"M21-GAP-00189","next":"M21-GAP-00191"},"M21-GAP-00191":{"line":3446,"offset":603218,"length":193,"previous":"M21-GAP-00190","next":"M21-GAP-00192"},"M21-GAP-00192":{"line":3447,"offset":603411,"length":193,"previous":"M21-GAP-00191","next":"M21-GAP-00193"},"M21-GAP-00193":{"line":3448,"offset":603604,"length":193,"previous":"M21-GAP-00192","next":"M21-GAP-00194"},"M21-GAP-00194":{"line":3449,"offset":603797,"length":193,"previous":"M21-GAP-00193","next":"M21-GAP-00195"},"M21-GAP-00195":{"line":3450,"offset":603990,"length":193,"previous":"M21-GAP-00194","next":"M21-GAP-00196"},"M21-GAP-00196":{"line":3451,"offset":604183,"length":193,"previous":"M21-GAP-00195","next":"M21-GAP-00197"},"M21-GAP-00197":{"line":3452,"offset":604376,"length":193,"previous":"M21-GAP-00196","next":"M21-GAP-00198"},"M21-GAP-00198":{"line":3453,"offset":604569,"length":193,"previous":"M21-GAP-00197","next":"M21-GAP-00199"},"M21-GAP-00199":{"line":3454,"offset":604762,"length":207,"previous":"M21-GAP-00198","next":"M21-GAP-00200"},"M21-GAP-00200":{"line":3455,"offset":604969,"length":207,"previous":"M21-GAP-00199","next":"M21-GAP-00201"},"M21-GAP-00201":{"line":3456,"offset":605176,"length":207,"previous":"M21-GAP-00200","next":"M21-GAP-00202"},"M21-GAP-00202":{"line":3457,"offset":605383,"length":207,"previous":"M21-GAP-00201","next":"M21-GAP-00203"},"M21-GAP-00203":{"line":3458,"offset":605590,"length":207,"previous":"M21-GAP-00202","next":"M21-GAP-00204"},"M21-GAP-00204":{"line":3459,"offset":605797,"length":207,"previous":"M21-GAP-00203","next":"M21-GAP-00205"},"M21-GAP-00205":{"line":3460,"offset":606004,"length":207,"previous":"M21-GAP-00204","next":"M21-GAP-00206"},"M21-GAP-00206":{"line":3461,"offset":606211,"length":207,"previous":"M21-GAP-00205","next":"M21-GAP-00207"},"M21-GAP-00207":{"line":3462,"offset":606418,"length":207,"previous":"M21-GAP-00206","next":"M21-GAP-00208"},"M21-GAP-00208":{"line":3463,"offset":606625,"length":196,"previous":"M21-GAP-00207","next":"M21-GAP-00209"},"M21-GAP-00209":{"line":3464,"offset":606821,"length":196,"previous":"M21-GAP-00208","next":"M21-GAP-00210"},"M21-GAP-00210":{"line":3465,"offset":607017,"length":196,"previous":"M21-GAP-00209","next":"M21-GAP-00211"},"M21-GAP-00211":{"line":3466,"offset":607213,"length":196,"previous":"M21-GAP-00210","next":"M21-GAP-00212"},"M21-GAP-00212":{"line":3467,"offset":607409,"length":196,"previous":"M21-GAP-00211","next":"M21-GAP-00213"},"M21-GAP-00213":{"line":3468,"offset":607605,"length":196,"previous":"M21-GAP-00212","next":"M21-GAP-00214"},"M21-GAP-00214":{"line":3469,"offset":607801,"length":196,"previous":"M21-GAP-00213","next":"M21-GAP-00215"},"M21-GAP-00215":{"line":3470,"offset":607997,"length":196,"previous":"M21-GAP-00214","next":"M21-GAP-00216"},"M21-GAP-00216":{"line":3471,"offset":608193,"length":196,"previous":"M21-GAP-00215","next":"M21-GAP-00217"},"M21-GAP-00217":{"line":3472,"offset":608389,"length":206,"previous":"M21-GAP-00216","next":"M21-GAP-00218"},"M21-GAP-00218":{"line":3473,"offset":608595,"length":206,"previous":"M21-GAP-00217","next":"M21-GAP-00219"},"M21-GAP-00219":{"line":3474,"offset":608801,"length":206,"previous":"M21-GAP-00218","next":"M21-GAP-00220"},"M21-GAP-00220":{"line":3475,"offset":609007,"length":206,"previous":"M21-GAP-00219","next":"M21-GAP-00221"},"M21-GAP-00221":{"line":3476,"offset":609213,"length":206,"previous":"M21-GAP-00220","next":"M21-GAP-00222"},"M21-GAP-00222":{"line":3477,"offset":609419,"length":206,"previous":"M21-GAP-00221","next":"M21-GAP-00223"},"M21-GAP-00223":{"line":3478,"offset":609625,"length":206,"previous":"M21-GAP-00222","next":"M21-GAP-00224"},"M21-GAP-00224":{"line":3479,"offset":609831,"length":206,"previous":"M21-GAP-00223","next":"M21-GAP-00225"},"M21-GAP-00225":{"line":3480,"offset":610037,"length":206,"previous":"M21-GAP-00224","next":"M21-GAP-00226"},"M21-GAP-00226":{"line":3481,"offset":610243,"length":206,"previous":"M21-GAP-00225","next":"M21-GAP-00227"},"M21-GAP-00227":{"line":3482,"offset":610449,"length":195,"previous":"M21-GAP-00226","next":"M21-GAP-00228"},"M21-GAP-00228":{"line":3483,"offset":610644,"length":195,"previous":"M21-GAP-00227","next":"M21-GAP-00229"},"M21-GAP-00229":{"line":3484,"offset":610839,"length":195,"previous":"M21-GAP-00228","next":"M21-GAP-00230"},"M21-GAP-00230":{"line":3485,"offset":611034,"length":195,"previous":"M21-GAP-00229","next":"M21-GAP-00231"},"M21-GAP-00231":{"line":3486,"offset":611229,"length":195,"previous":"M21-GAP-00230","next":"M21-GAP-00232"},"M21-GAP-00232":{"line":3487,"offset":611424,"length":195,"previous":"M21-GAP-00231","next":"M21-GAP-00233"},"M21-GAP-00233":{"line":3488,"offset":611619,"length":195,"previous":"M21-GAP-00232","next":"M21-GAP-00234"},"M21-GAP-00234":{"line":3489,"offset":611814,"length":195,"previous":"M21-GAP-00233","next":"M21-GAP-00235"},"M21-GAP-00235":{"line":3490,"offset":612009,"length":195,"previous":"M21-GAP-00234","next":"M21-GAP-00236"},"M21-GAP-00236":{"line":3491,"offset":612204,"length":195,"previous":"M21-GAP-00235","next":"M21-GAP-00237"},"M21-GAP-00237":{"line":3492,"offset":612399,"length":188,"previous":"M21-GAP-00236","next":"M21-GAP-00238"},"M21-GAP-00238":{"line":3493,"offset":612587,"length":188,"previous":"M21-GAP-00237","next":"M21-GAP-00239"},"M21-GAP-00239":{"line":3494,"offset":612775,"length":188,"previous":"M21-GAP-00238","next":"M21-GAP-00240"},"M21-GAP-00240":{"line":3495,"offset":612963,"length":192,"previous":"M21-GAP-00239","next":"M21-GAP-00241"},"M21-GAP-00241":{"line":3496,"offset":613155,"length":199,"previous":"M21-GAP-00240","next":"M21-GAP-00242"},"M21-GAP-00242":{"line":3497,"offset":613354,"length":199,"previous":"M21-GAP-00241","next":"M21-GAP-00243"},"M21-GAP-00243":{"line":3498,"offset":613553,"length":199,"previous":"M21-GAP-00242","next":"M21-GAP-00244"},"M21-GAP-00244":{"line":3499,"offset":613752,"length":199,"previous":"M21-GAP-00243","next":"M21-GAP-00245"},"M21-GAP-00245":{"line":3500,"offset":613951,"length":199,"previous":"M21-GAP-00244","next":"M21-GAP-00246"},"M21-GAP-00246":{"line":3501,"offset":614150,"length":199,"previous":"M21-GAP-00245","next":"M21-GAP-00247"},"M21-GAP-00247":{"line":3502,"offset":614349,"length":199,"previous":"M21-GAP-00246","next":"M21-GAP-00248"},"M21-GAP-00248":{"line":3503,"offset":614548,"length":199,"previous":"M21-GAP-00247","next":"M21-GAP-00249"},"M21-GAP-00249":{"line":3504,"offset":614747,"length":199,"previous":"M21-GAP-00248","next":"M21-GAP-00250"},"M21-GAP-00250":{"line":3505,"offset":614946,"length":188,"previous":"M21-GAP-00249","next":"M21-GAP-00251"},"M21-GAP-00251":{"line":3506,"offset":615134,"length":188,"previous":"M21-GAP-00250","next":"M21-GAP-00252"},"M21-GAP-00252":{"line":3507,"offset":615322,"length":188,"previous":"M21-GAP-00251","next":"M21-GAP-00253"},"M21-GAP-00253":{"line":3508,"offset":615510,"length":188,"previous":"M21-GAP-00252","next":"M21-GAP-00254"},"M21-GAP-00254":{"line":3509,"offset":615698,"length":188,"previous":"M21-GAP-00253","next":"M21-GAP-00255"},"M21-GAP-00255":{"line":3510,"offset":615886,"length":188,"previous":"M21-GAP-00254","next":"M21-GAP-00256"},"M21-GAP-00256":{"line":3511,"offset":616074,"length":188,"previous":"M21-GAP-00255","next":"M21-GAP-00257"},"M21-GAP-00257":{"line":3512,"offset":616262,"length":188,"previous":"M21-GAP-00256","next":"M21-GAP-00258"},"M21-GAP-00258":{"line":3513,"offset":616450,"length":188,"previous":"M21-GAP-00257","next":"M21-GAP-00259"},"M21-GAP-00259":{"line":3514,"offset":616638,"length":176,"previous":"M21-GAP-00258","next":"M21-GAP-00260"},"M21-GAP-00260":{"line":3515,"offset":616814,"length":176,"previous":"M21-GAP-00259","next":"M21-GAP-00261"},"M21-GAP-00261":{"line":3516,"offset":616990,"length":177,"previous":"M21-GAP-00260","next":"M21-GAP-00262"},"M21-GAP-00262":{"line":3517,"offset":617167,"length":178,"previous":"M21-GAP-00261","next":"M21-GAP-00263"},"M21-GAP-00263":{"line":3518,"offset":617345,"length":178,"previous":"M21-GAP-00262","next":"M21-GAP-00264"},"M21-GAP-00264":{"line":3519,"offset":617523,"length":178,"previous":"M21-GAP-00263","next":"M21-GAP-00265"},"M21-GAP-00265":{"line":3520,"offset":617701,"length":178,"previous":"M21-GAP-00264","next":"M21-GAP-00266"},"M21-GAP-00266":{"line":3521,"offset":617879,"length":178,"previous":"M21-GAP-00265","next":"M21-GAP-00267"},"M21-GAP-00267":{"line":3522,"offset":618057,"length":178,"previous":"M21-GAP-00266","next":"M21-GAP-00268"},"M21-GAP-00268":{"line":3523,"offset":618235,"length":178,"previous":"M21-GAP-00267","next":"M21-GAP-00269"},"M21-GAP-00269":{"line":3524,"offset":618413,"length":178,"previous":"M21-GAP-00268","next":"M21-GAP-00270"},"M21-GAP-00270":{"line":3525,"offset":618591,"length":178,"previous":"M21-GAP-00269","next":"M21-GAP-00271"},"M21-GAP-00271":{"line":3526,"offset":618769,"length":178,"previous":"M21-GAP-00270","next":"M21-GAP-00272"},"M21-GAP-00272":{"line":3527,"offset":618947,"length":177,"previous":"M21-GAP-00271","next":"M21-GAP-00273"},"M21-GAP-00273":{"line":3528,"offset":619124,"length":178,"previous":"M21-GAP-00272","next":"M21-GAP-00274"},"M21-GAP-00274":{"line":3529,"offset":619302,"length":178,"previous":"M21-GAP-00273","next":"M21-GAP-00275"},"M21-GAP-00275":{"line":3530,"offset":619480,"length":178,"previous":"M21-GAP-00274","next":"M21-GAP-00276"},"M21-GAP-00276":{"line":3531,"offset":619658,"length":178,"previous":"M21-GAP-00275","next":"M21-GAP-00277"},"M21-GAP-00277":{"line":3532,"offset":619836,"length":178,"previous":"M21-GAP-00276","next":"M21-GAP-00278"},"M21-GAP-00278":{"line":3533,"offset":620014,"length":178,"previous":"M21-GAP-00277","next":"M21-GAP-00279"},"M21-GAP-00279":{"line":3534,"offset":620192,"length":177,"previous":"M21-GAP-00278","next":"M21-GAP-00280"},"M21-GAP-00280":{"line":3535,"offset":620369,"length":177,"previous":"M21-GAP-00279","next":"M21-GAP-00281"},"M21-GAP-00281":{"line":3536,"offset":620546,"length":177,"previous":"M21-GAP-00280","next":"M21-GAP-00282"},"M21-GAP-00282":{"line":3537,"offset":620723,"length":177,"previous":"M21-GAP-00281","next":"M21-GAP-00283"},"M21-GAP-00283":{"line":3538,"offset":620900,"length":177,"previous":"M21-GAP-00282","next":"M21-GAP-00284"},"M21-GAP-00284":{"line":3539,"offset":621077,"length":177,"previous":"M21-GAP-00283","next":"M21-GAP-00285"},"M21-GAP-00285":{"line":3540,"offset":621254,"length":177,"previous":"M21-GAP-00284","next":"M21-GAP-00286"},"M21-GAP-00286":{"line":3541,"offset":621431,"length":177,"previous":"M21-GAP-00285","next":"M21-GAP-00287"},"M21-GAP-00287":{"line":3542,"offset":621608,"length":176,"previous":"M21-GAP-00286","next":"M21-GAP-00288"},"M21-GAP-00288":{"line":3543,"offset":621784,"length":177,"previous":"M21-GAP-00287","next":"M21-GAP-00289"},"M21-GAP-00289":{"line":3544,"offset":621961,"length":177,"previous":"M21-GAP-00288","next":"M21-GAP-00290"},"M21-GAP-00290":{"line":3545,"offset":622138,"length":177,"previous":"M21-GAP-00289","next":"M21-GAP-00291"},"M21-GAP-00291":{"line":3546,"offset":622315,"length":177,"previous":"M21-GAP-00290","next":"M21-GAP-00292"},"M21-GAP-00292":{"line":3547,"offset":622492,"length":177,"previous":"M21-GAP-00291","next":"M21-GAP-00293"},"M21-GAP-00293":{"line":3548,"offset":622669,"length":177,"previous":"M21-GAP-00292","next":"M21-GAP-00294"},"M21-GAP-00294":{"line":3549,"offset":622846,"length":177,"previous":"M21-GAP-00293","next":"M21-GAP-00295"},"M21-GAP-00295":{"line":3550,"offset":623023,"length":177,"previous":"M21-GAP-00294","next":"M21-GAP-00296"},"M21-GAP-00296":{"line":3551,"offset":623200,"length":177,"previous":"M21-GAP-00295","next":"M21-GAP-00297"},"M21-GAP-00297":{"line":3552,"offset":623377,"length":177,"previous":"M21-GAP-00296","next":"M21-GAP-00298"},"M21-GAP-00298":{"line":3553,"offset":623554,"length":176,"previous":"M21-GAP-00297","next":"M21-GAP-00299"},"M21-GAP-00299":{"line":3554,"offset":623730,"length":177,"previous":"M21-GAP-00298","next":"M21-GAP-00300"},"M21-GAP-00300":{"line":3555,"offset":623907,"length":177,"previous":"M21-GAP-00299","next":"M21-GAP-00301"},"M21-GAP-00301":{"line":3556,"offset":624084,"length":177,"previous":"M21-GAP-00300","next":"M21-GAP-00302"},"M21-GAP-00302":{"line":3557,"offset":624261,"length":177,"previous":"M21-GAP-00301","next":"M21-GAP-00303"},"M21-GAP-00303":{"line":3558,"offset":624438,"length":177,"previous":"M21-GAP-00302","next":"M21-GAP-00304"},"M21-GAP-00304":{"line":3559,"offset":624615,"length":177,"previous":"M21-GAP-00303","next":"M21-GAP-00305"},"M21-GAP-00305":{"line":3560,"offset":624792,"length":177,"previous":"M21-GAP-00304","next":"M21-GAP-00306"},"M21-GAP-00306":{"line":3561,"offset":624969,"length":177,"previous":"M21-GAP-00305","next":"M21-GAP-00307"},"M21-GAP-00307":{"line":3562,"offset":625146,"length":177,"previous":"M21-GAP-00306","next":"M21-GAP-00308"},"M21-GAP-00308":{"line":3563,"offset":625323,"length":177,"previous":"M21-GAP-00307","next":"M21-GAP-00309"},"M21-GAP-00309":{"line":3564,"offset":625500,"length":176,"previous":"M21-GAP-00308","next":"M21-GAP-00310"},"M21-GAP-00310":{"line":3565,"offset":625676,"length":177,"previous":"M21-GAP-00309","next":"M21-GAP-00311"},"M21-GAP-00311":{"line":3566,"offset":625853,"length":177,"previous":"M21-GAP-00310","next":"M21-GAP-00312"},"M21-GAP-00312":{"line":3567,"offset":626030,"length":177,"previous":"M21-GAP-00311","next":"M21-GAP-00313"},"M21-GAP-00313":{"line":3568,"offset":626207,"length":177,"previous":"M21-GAP-00312","next":"M21-GAP-00314"},"M21-GAP-00314":{"line":3569,"offset":626384,"length":177,"previous":"M21-GAP-00313","next":"M21-GAP-00315"},"M21-GAP-00315":{"line":3570,"offset":626561,"length":177,"previous":"M21-GAP-00314","next":"M21-GAP-00316"},"M21-GAP-00316":{"line":3571,"offset":626738,"length":177,"previous":"M21-GAP-00315","next":"M21-GAP-00317"},"M21-GAP-00317":{"line":3572,"offset":626915,"length":177,"previous":"M21-GAP-00316","next":"M21-GAP-00318"},"M21-GAP-00318":{"line":3573,"offset":627092,"length":177,"previous":"M21-GAP-00317","next":"M21-GAP-00319"},"M21-GAP-00319":{"line":3574,"offset":627269,"length":177,"previous":"M21-GAP-00318","next":"M21-GAP-00320"},"M21-GAP-00320":{"line":3575,"offset":627446,"length":176,"previous":"M21-GAP-00319","next":"M21-GAP-00321"},"M21-GAP-00321":{"line":3576,"offset":627622,"length":177,"previous":"M21-GAP-00320","next":"M21-GAP-00322"},"M21-GAP-00322":{"line":3577,"offset":627799,"length":177,"previous":"M21-GAP-00321","next":"M21-GAP-00323"},"M21-GAP-00323":{"line":3578,"offset":627976,"length":177,"previous":"M21-GAP-00322","next":"M21-GAP-00324"},"M21-GAP-00324":{"line":3579,"offset":628153,"length":177,"previous":"M21-GAP-00323","next":"M21-GAP-00325"},"M21-GAP-00325":{"line":3580,"offset":628330,"length":177,"previous":"M21-GAP-00324","next":"M21-GAP-00326"},"M21-GAP-00326":{"line":3581,"offset":628507,"length":177,"previous":"M21-GAP-00325","next":"M21-GAP-00327"},"M21-GAP-00327":{"line":3582,"offset":628684,"length":177,"previous":"M21-GAP-00326","next":"M21-GAP-00328"},"M21-GAP-00328":{"line":3583,"offset":628861,"length":177,"previous":"M21-GAP-00327","next":"M21-GAP-00329"},"M21-GAP-00329":{"line":3584,"offset":629038,"length":177,"previous":"M21-GAP-00328","next":"M21-GAP-00330"},"M21-GAP-00330":{"line":3585,"offset":629215,"length":177,"previous":"M21-GAP-00329","next":"M21-GAP-00331"},"M21-GAP-00331":{"line":3586,"offset":629392,"length":176,"previous":"M21-GAP-00330","next":"M21-GAP-00332"},"M21-GAP-00332":{"line":3587,"offset":629568,"length":177,"previous":"M21-GAP-00331","next":"M21-GAP-00333"},"M21-GAP-00333":{"line":3588,"offset":629745,"length":177,"previous":"M21-GAP-00332","next":"M21-GAP-00334"},"M21-GAP-00334":{"line":3589,"offset":629922,"length":177,"previous":"M21-GAP-00333","next":"M21-GAP-00335"},"M21-GAP-00335":{"line":3590,"offset":630099,"length":177,"previous":"M21-GAP-00334","next":"M21-GAP-00336"},"M21-GAP-00336":{"line":3591,"offset":630276,"length":177,"previous":"M21-GAP-00335","next":"M21-GAP-00337"},"M21-GAP-00337":{"line":3592,"offset":630453,"length":177,"previous":"M21-GAP-00336","next":"M21-GAP-00338"},"M21-GAP-00338":{"line":3593,"offset":630630,"length":177,"previous":"M21-GAP-00337","next":"M21-GAP-00339"},"M21-GAP-00339":{"line":3594,"offset":630807,"length":177,"previous":"M21-GAP-00338","next":"M21-GAP-00340"},"M21-GAP-00340":{"line":3595,"offset":630984,"length":177,"previous":"M21-GAP-00339","next":"M21-GAP-00341"},"M21-GAP-00341":{"line":3596,"offset":631161,"length":177,"previous":"M21-GAP-00340","next":"M21-GAP-00342"},"M21-GAP-00342":{"line":3597,"offset":631338,"length":176,"previous":"M21-GAP-00341","next":"M21-GAP-00343"},"M21-GAP-00343":{"line":3598,"offset":631514,"length":177,"previous":"M21-GAP-00342","next":"M21-GAP-00344"},"M21-GAP-00344":{"line":3599,"offset":631691,"length":177,"previous":"M21-GAP-00343","next":"M21-GAP-00345"},"M21-GAP-00345":{"line":3600,"offset":631868,"length":177,"previous":"M21-GAP-00344","next":"M21-GAP-00346"},"M21-GAP-00346":{"line":3601,"offset":632045,"length":177,"previous":"M21-GAP-00345","next":"M21-GAP-00347"},"M21-GAP-00347":{"line":3602,"offset":632222,"length":177,"previous":"M21-GAP-00346","next":"M21-GAP-00348"},"M21-GAP-00348":{"line":3603,"offset":632399,"length":177,"previous":"M21-GAP-00347","next":"M21-GAP-00349"},"M21-GAP-00349":{"line":3604,"offset":632576,"length":177,"previous":"M21-GAP-00348","next":"M21-GAP-00350"},"M21-GAP-00350":{"line":3605,"offset":632753,"length":177,"previous":"M21-GAP-00349","next":"M21-GAP-00351"},"M21-GAP-00351":{"line":3606,"offset":632930,"length":177,"previous":"M21-GAP-00350","next":"M21-GAP-00352"},"M21-GAP-00352":{"line":3607,"offset":633107,"length":177,"previous":"M21-GAP-00351","next":"M21-GAP-00353"},"M21-GAP-00353":{"line":3608,"offset":633284,"length":176,"previous":"M21-GAP-00352","next":"M21-GAP-00354"},"M21-GAP-00354":{"line":3609,"offset":633460,"length":177,"previous":"M21-GAP-00353","next":"M21-GAP-00355"},"M21-GAP-00355":{"line":3610,"offset":633637,"length":177,"previous":"M21-GAP-00354","next":"M21-GAP-00356"},"M21-GAP-00356":{"line":3611,"offset":633814,"length":177,"previous":"M21-GAP-00355","next":"M21-GAP-00357"},"M21-GAP-00357":{"line":3612,"offset":633991,"length":177,"previous":"M21-GAP-00356","next":"M21-GAP-00358"},"M21-GAP-00358":{"line":3613,"offset":634168,"length":177,"previous":"M21-GAP-00357","next":"M21-GAP-00359"},"M21-GAP-00359":{"line":3614,"offset":634345,"length":177,"previous":"M21-GAP-00358","next":"M21-GAP-00360"},"M21-GAP-00360":{"line":3615,"offset":634522,"length":177,"previous":"M21-GAP-00359","next":"M21-GAP-00361"},"M21-GAP-00361":{"line":3616,"offset":634699,"length":177,"previous":"M21-GAP-00360","next":"M21-GAP-00362"},"M21-GAP-00362":{"line":3617,"offset":634876,"length":177,"previous":"M21-GAP-00361","next":"M21-GAP-00363"},"M21-GAP-00363":{"line":3618,"offset":635053,"length":177,"previous":"M21-GAP-00362","next":"M21-GAP-00364"},"M21-GAP-00364":{"line":3619,"offset":635230,"length":176,"previous":"M21-GAP-00363","next":"M21-GAP-00365"},"M21-GAP-00365":{"line":3620,"offset":635406,"length":177,"previous":"M21-GAP-00364","next":"M21-GAP-00366"},"M21-GAP-00366":{"line":3621,"offset":635583,"length":177,"previous":"M21-GAP-00365","next":"M21-GAP-00367"},"M21-GAP-00367":{"line":3622,"offset":635760,"length":177,"previous":"M21-GAP-00366","next":"M21-GAP-00368"},"M21-GAP-00368":{"line":3623,"offset":635937,"length":177,"previous":"M21-GAP-00367","next":"M21-GAP-00369"},"M21-GAP-00369":{"line":3624,"offset":636114,"length":177,"previous":"M21-GAP-00368","next":"M21-GAP-00370"},"M21-GAP-00370":{"line":3625,"offset":636291,"length":177,"previous":"M21-GAP-00369","next":"M21-GAP-00371"},"M21-GAP-00371":{"line":3626,"offset":636468,"length":177,"previous":"M21-GAP-00370","next":"M21-GAP-00372"},"M21-GAP-00372":{"line":3627,"offset":636645,"length":177,"previous":"M21-GAP-00371","next":"M21-GAP-00373"},"M21-GAP-00373":{"line":3628,"offset":636822,"length":177,"previous":"M21-GAP-00372","next":"M21-GAP-00374"},"M21-GAP-00374":{"line":3629,"offset":636999,"length":177,"previous":"M21-GAP-00373","next":"M21-GAP-00375"},"M21-GAP-00375":{"line":3630,"offset":637176,"length":185,"previous":"M21-GAP-00374","next":"M21-GAP-00376"},"M21-GAP-00376":{"line":3631,"offset":637361,"length":185,"previous":"M21-GAP-00375","next":"M21-GAP-00377"},"M21-GAP-00377":{"line":3632,"offset":637546,"length":186,"previous":"M21-GAP-00376","next":"M21-GAP-00378"},"M21-GAP-00378":{"line":3633,"offset":637732,"length":186,"previous":"M21-GAP-00377","next":"M21-GAP-00379"},"M21-GAP-00379":{"line":3634,"offset":637918,"length":186,"previous":"M21-GAP-00378","next":"M21-GAP-00380"},"M21-GAP-00380":{"line":3635,"offset":638104,"length":186,"previous":"M21-GAP-00379","next":"M21-GAP-00381"},"M21-GAP-00381":{"line":3636,"offset":638290,"length":186,"previous":"M21-GAP-00380","next":"M21-GAP-00382"},"M21-GAP-00382":{"line":3637,"offset":638476,"length":186,"previous":"M21-GAP-00381","next":"M21-GAP-00383"},"M21-GAP-00383":{"line":3638,"offset":638662,"length":186,"previous":"M21-GAP-00382","next":"M21-GAP-00384"},"M21-GAP-00384":{"line":3639,"offset":638848,"length":186,"previous":"M21-GAP-00383","next":"M21-GAP-00385"},"M21-GAP-00385":{"line":3640,"offset":639034,"length":186,"previous":"M21-GAP-00384","next":"M21-GAP-00386"},"M21-GAP-00386":{"line":3641,"offset":639220,"length":186,"previous":"M21-GAP-00385","next":"M21-GAP-00387"},"M21-GAP-00387":{"line":3642,"offset":639406,"length":185,"previous":"M21-GAP-00386","next":"M21-GAP-00388"},"M21-GAP-00388":{"line":3643,"offset":639591,"length":186,"previous":"M21-GAP-00387","next":"M21-GAP-00389"},"M21-GAP-00389":{"line":3644,"offset":639777,"length":186,"previous":"M21-GAP-00388","next":"M21-GAP-00390"},"M21-GAP-00390":{"line":3645,"offset":639963,"length":186,"previous":"M21-GAP-00389","next":"M21-GAP-00391"},"M21-GAP-00391":{"line":3646,"offset":640149,"length":186,"previous":"M21-GAP-00390","next":"M21-GAP-00392"},"M21-GAP-00392":{"line":3647,"offset":640335,"length":186,"previous":"M21-GAP-00391","next":"M21-GAP-00393"},"M21-GAP-00393":{"line":3648,"offset":640521,"length":186,"previous":"M21-GAP-00392","next":"M21-GAP-00394"},"M21-GAP-00394":{"line":3649,"offset":640707,"length":186,"previous":"M21-GAP-00393","next":"M21-GAP-00395"},"M21-GAP-00395":{"line":3650,"offset":640893,"length":186,"previous":"M21-GAP-00394","next":"M21-GAP-00396"},"M21-GAP-00396":{"line":3651,"offset":641079,"length":186,"previous":"M21-GAP-00395","next":"M21-GAP-00397"},"M21-GAP-00397":{"line":3652,"offset":641265,"length":186,"previous":"M21-GAP-00396","next":"M21-GAP-00398"},"M21-GAP-00398":{"line":3653,"offset":641451,"length":185,"previous":"M21-GAP-00397","next":"M21-GAP-00399"},"M21-GAP-00399":{"line":3654,"offset":641636,"length":186,"previous":"M21-GAP-00398","next":"M21-GAP-00400"},"M21-GAP-00400":{"line":3655,"offset":641822,"length":186,"previous":"M21-GAP-00399","next":"M21-GAP-00401"},"M21-GAP-00401":{"line":3656,"offset":642008,"length":186,"previous":"M21-GAP-00400","next":"M21-GAP-00402"},"M21-GAP-00402":{"line":3657,"offset":642194,"length":186,"previous":"M21-GAP-00401","next":"M21-GAP-00403"},"M21-GAP-00403":{"line":3658,"offset":642380,"length":186,"previous":"M21-GAP-00402","next":"M21-GAP-00404"},"M21-GAP-00404":{"line":3659,"offset":642566,"length":186,"previous":"M21-GAP-00403","next":"M21-GAP-00405"},"M21-GAP-00405":{"line":3660,"offset":642752,"length":186,"previous":"M21-GAP-00404","next":"M21-GAP-00406"},"M21-GAP-00406":{"line":3661,"offset":642938,"length":185,"previous":"M21-GAP-00405","next":"M21-GAP-00407"},"M21-GAP-00407":{"line":3662,"offset":643123,"length":185,"previous":"M21-GAP-00406","next":"M21-GAP-00408"},"M21-GAP-00408":{"line":3663,"offset":643308,"length":185,"previous":"M21-GAP-00407","next":"M21-GAP-00409"},"M21-GAP-00409":{"line":3664,"offset":643493,"length":185,"previous":"M21-GAP-00408","next":"M21-GAP-00410"},"M21-GAP-00410":{"line":3665,"offset":643678,"length":185,"previous":"M21-GAP-00409","next":"M21-GAP-00411"},"M21-GAP-00411":{"line":3666,"offset":643863,"length":185,"previous":"M21-GAP-00410","next":"M21-GAP-00412"},"M21-GAP-00412":{"line":3667,"offset":644048,"length":176,"previous":"M21-GAP-00411","next":"M21-GAP-00413"},"M21-GAP-00413":{"line":3668,"offset":644224,"length":176,"previous":"M21-GAP-00412","next":"M21-GAP-00414"},"M21-GAP-00414":{"line":3669,"offset":644400,"length":176,"previous":"M21-GAP-00413","next":"M21-GAP-00415"},"M21-GAP-00415":{"line":3670,"offset":644576,"length":176,"previous":"M21-GAP-00414","next":"M21-GAP-00416"},"M21-GAP-00416":{"line":3671,"offset":644752,"length":176,"previous":"M21-GAP-00415","next":"M21-GAP-00417"},"M21-GAP-00417":{"line":3672,"offset":644928,"length":175,"previous":"M21-GAP-00416","next":"M21-GAP-00418"},"M21-GAP-00418":{"line":3673,"offset":645103,"length":175,"previous":"M21-GAP-00417","next":"M21-GAP-00419"},"M21-GAP-00419":{"line":3674,"offset":645278,"length":176,"previous":"M21-GAP-00418","next":"M21-GAP-00420"},"M21-GAP-00420":{"line":3675,"offset":645454,"length":176,"previous":"M21-GAP-00419","next":"M21-GAP-00421"},"M21-GAP-00421":{"line":3676,"offset":645630,"length":176,"previous":"M21-GAP-00420","next":"M21-GAP-00422"},"M21-GAP-00422":{"line":3677,"offset":645806,"length":176,"previous":"M21-GAP-00421","next":"M21-GAP-00423"},"M21-GAP-00423":{"line":3678,"offset":645982,"length":176,"previous":"M21-GAP-00422","next":"M21-GAP-00424"},"M21-GAP-00424":{"line":3679,"offset":646158,"length":176,"previous":"M21-GAP-00423","next":"M21-GAP-00425"},"M21-GAP-00425":{"line":3680,"offset":646334,"length":176,"previous":"M21-GAP-00424","next":"M21-GAP-00426"},"M21-GAP-00426":{"line":3681,"offset":646510,"length":176,"previous":"M21-GAP-00425","next":"M21-GAP-00427"},"M21-GAP-00427":{"line":3682,"offset":646686,"length":176,"previous":"M21-GAP-00426","next":"M21-GAP-00428"},"M21-GAP-00428":{"line":3683,"offset":646862,"length":176,"previous":"M21-GAP-00427","next":"M21-GAP-00429"},"M21-GAP-00429":{"line":3684,"offset":647038,"length":175,"previous":"M21-GAP-00428","next":"M21-GAP-00430"},"M21-GAP-00430":{"line":3685,"offset":647213,"length":176,"previous":"M21-GAP-00429","next":"M21-GAP-00431"},"M21-GAP-00431":{"line":3686,"offset":647389,"length":176,"previous":"M21-GAP-00430","next":"M21-GAP-00432"},"M21-GAP-00432":{"line":3687,"offset":647565,"length":176,"previous":"M21-GAP-00431","next":"M21-GAP-00433"},"M21-GAP-00433":{"line":3688,"offset":647741,"length":176,"previous":"M21-GAP-00432","next":"M21-GAP-00434"},"M21-GAP-00434":{"line":3689,"offset":647917,"length":176,"previous":"M21-GAP-00433","next":"M21-GAP-00435"},"M21-GAP-00435":{"line":3690,"offset":648093,"length":176,"previous":"M21-GAP-00434","next":"M21-GAP-00436"},"M21-GAP-00436":{"line":3691,"offset":648269,"length":176,"previous":"M21-GAP-00435","next":"M21-GAP-00437"},"M21-GAP-00437":{"line":3692,"offset":648445,"length":176,"previous":"M21-GAP-00436","next":"M21-GAP-00438"},"M21-GAP-00438":{"line":3693,"offset":648621,"length":176,"previous":"M21-GAP-00437","next":"M21-GAP-00439"},"M21-GAP-00439":{"line":3694,"offset":648797,"length":176,"previous":"M21-GAP-00438","next":"M21-GAP-00440"},"M21-GAP-00440":{"line":3695,"offset":648973,"length":175,"previous":"M21-GAP-00439","next":"M21-GAP-00441"},"M21-GAP-00441":{"line":3696,"offset":649148,"length":176,"previous":"M21-GAP-00440","next":"M21-GAP-00442"},"M21-GAP-00442":{"line":3697,"offset":649324,"length":176,"previous":"M21-GAP-00441","next":"M21-GAP-00443"},"M21-GAP-00443":{"line":3698,"offset":649500,"length":176,"previous":"M21-GAP-00442","next":"M21-GAP-00444"},"M21-GAP-00444":{"line":3699,"offset":649676,"length":176,"previous":"M21-GAP-00443","next":"M21-GAP-00445"},"M21-GAP-00445":{"line":3700,"offset":649852,"length":176,"previous":"M21-GAP-00444","next":"M21-GAP-00446"},"M21-GAP-00446":{"line":3701,"offset":650028,"length":176,"previous":"M21-GAP-00445","next":"M21-GAP-00447"},"M21-GAP-00447":{"line":3702,"offset":650204,"length":176,"previous":"M21-GAP-00446","next":"M21-GAP-00448"},"M21-GAP-00448":{"line":3703,"offset":650380,"length":176,"previous":"M21-GAP-00447","next":"M21-GAP-00449"},"M21-GAP-00449":{"line":3704,"offset":650556,"length":176,"previous":"M21-GAP-00448","next":"M21-GAP-00450"},"M21-GAP-00450":{"line":3705,"offset":650732,"length":176,"previous":"M21-GAP-00449","next":"M21-GAP-00451"},"M21-GAP-00451":{"line":3706,"offset":650908,"length":175,"previous":"M21-GAP-00450","next":"M21-GAP-00452"},"M21-GAP-00452":{"line":3707,"offset":651083,"length":176,"previous":"M21-GAP-00451","next":"M21-GAP-00453"},"M21-GAP-00453":{"line":3708,"offset":651259,"length":176,"previous":"M21-GAP-00452","next":"M21-GAP-00454"},"M21-GAP-00454":{"line":3709,"offset":651435,"length":176,"previous":"M21-GAP-00453","next":"M21-GAP-00455"},"M21-GAP-00455":{"line":3710,"offset":651611,"length":176,"previous":"M21-GAP-00454","next":"M21-GAP-00456"},"M21-GAP-00456":{"line":3711,"offset":651787,"length":176,"previous":"M21-GAP-00455","next":"M21-GAP-00457"},"M21-GAP-00457":{"line":3712,"offset":651963,"length":176,"previous":"M21-GAP-00456","next":"M21-GAP-00458"},"M21-GAP-00458":{"line":3713,"offset":652139,"length":176,"previous":"M21-GAP-00457","next":"M21-GAP-00459"},"M21-GAP-00459":{"line":3714,"offset":652315,"length":176,"previous":"M21-GAP-00458","next":"M21-GAP-00460"},"M21-GAP-00460":{"line":3715,"offset":652491,"length":176,"previous":"M21-GAP-00459","next":"M21-GAP-00461"},"M21-GAP-00461":{"line":3716,"offset":652667,"length":176,"previous":"M21-GAP-00460","next":"M21-GAP-00462"},"M21-GAP-00462":{"line":3717,"offset":652843,"length":175,"previous":"M21-GAP-00461","next":"M21-GAP-00463"},"M21-GAP-00463":{"line":3718,"offset":653018,"length":176,"previous":"M21-GAP-00462","next":"M21-GAP-00464"},"M21-GAP-00464":{"line":3719,"offset":653194,"length":176,"previous":"M21-GAP-00463","next":"M21-GAP-00465"},"M21-GAP-00465":{"line":3720,"offset":653370,"length":175,"previous":"M21-GAP-00464","next":"M21-GAP-00466"},"M21-GAP-00466":{"line":3721,"offset":653545,"length":175,"previous":"M21-GAP-00465","next":"M21-GAP-00467"},"M21-GAP-00467":{"line":3722,"offset":653720,"length":175,"previous":"M21-GAP-00466","next":"M21-GAP-00468"},"M21-GAP-00468":{"line":3723,"offset":653895,"length":175,"previous":"M21-GAP-00467","next":"M21-GAP-00469"},"M21-GAP-00469":{"line":3724,"offset":654070,"length":182,"previous":"M21-GAP-00468","next":"M21-GAP-00470"},"M21-GAP-00470":{"line":3725,"offset":654252,"length":182,"previous":"M21-GAP-00469","next":"M21-GAP-00471"},"M21-GAP-00471":{"line":3726,"offset":654434,"length":183,"previous":"M21-GAP-00470","next":"M21-GAP-00472"},"M21-GAP-00472":{"line":3727,"offset":654617,"length":183,"previous":"M21-GAP-00471","next":"M21-GAP-00473"},"M21-GAP-00473":{"line":3728,"offset":654800,"length":183,"previous":"M21-GAP-00472","next":"M21-GAP-00474"},"M21-GAP-00474":{"line":3729,"offset":654983,"length":183,"previous":"M21-GAP-00473","next":"M21-GAP-00475"},"M21-GAP-00475":{"line":3730,"offset":655166,"length":183,"previous":"M21-GAP-00474","next":"M21-GAP-00476"},"M21-GAP-00476":{"line":3731,"offset":655349,"length":183,"previous":"M21-GAP-00475","next":"M21-GAP-00477"},"M21-GAP-00477":{"line":3732,"offset":655532,"length":183,"previous":"M21-GAP-00476","next":"M21-GAP-00478"},"M21-GAP-00478":{"line":3733,"offset":655715,"length":183,"previous":"M21-GAP-00477","next":"M21-GAP-00479"},"M21-GAP-00479":{"line":3734,"offset":655898,"length":183,"previous":"M21-GAP-00478","next":"M21-GAP-00480"},"M21-GAP-00480":{"line":3735,"offset":656081,"length":183,"previous":"M21-GAP-00479","next":"M21-GAP-00481"},"M21-GAP-00481":{"line":3736,"offset":656264,"length":182,"previous":"M21-GAP-00480","next":"M21-GAP-00482"},"M21-GAP-00482":{"line":3737,"offset":656446,"length":183,"previous":"M21-GAP-00481","next":"M21-GAP-00483"},"M21-GAP-00483":{"line":3738,"offset":656629,"length":183,"previous":"M21-GAP-00482","next":"M21-GAP-00484"},"M21-GAP-00484":{"line":3739,"offset":656812,"length":183,"previous":"M21-GAP-00483","next":"M21-GAP-00485"},"M21-GAP-00485":{"line":3740,"offset":656995,"length":183,"previous":"M21-GAP-00484","next":"M21-GAP-00486"},"M21-GAP-00486":{"line":3741,"offset":657178,"length":183,"previous":"M21-GAP-00485","next":"M21-GAP-00487"},"M21-GAP-00487":{"line":3742,"offset":657361,"length":183,"previous":"M21-GAP-00486","next":"M21-GAP-00488"},"M21-GAP-00488":{"line":3743,"offset":657544,"length":183,"previous":"M21-GAP-00487","next":"M21-GAP-00489"},"M21-GAP-00489":{"line":3744,"offset":657727,"length":183,"previous":"M21-GAP-00488","next":"M21-GAP-00490"},"M21-GAP-00490":{"line":3745,"offset":657910,"length":183,"previous":"M21-GAP-00489","next":"M21-GAP-00491"},"M21-GAP-00491":{"line":3746,"offset":658093,"length":183,"previous":"M21-GAP-00490","next":"M21-GAP-00492"},"M21-GAP-00492":{"line":3747,"offset":658276,"length":182,"previous":"M21-GAP-00491","next":"M21-GAP-00493"},"M21-GAP-00493":{"line":3748,"offset":658458,"length":182,"previous":"M21-GAP-00492","next":"M21-GAP-00494"},"M21-GAP-00494":{"line":3749,"offset":658640,"length":182,"previous":"M21-GAP-00493","next":"M21-GAP-00495"},"M21-GAP-00495":{"line":3750,"offset":658822,"length":182,"previous":"M21-GAP-00494","next":"M21-GAP-00496"},"M21-GAP-00496":{"line":3751,"offset":659004,"length":182,"previous":"M21-GAP-00495","next":"M21-GAP-00497"},"M21-GAP-00497":{"line":3752,"offset":659186,"length":182,"previous":"M21-GAP-00496","next":"M21-GAP-00498"},"M21-GAP-00498":{"line":3753,"offset":659368,"length":182,"previous":"M21-GAP-00497","next":"M21-GAP-00499"},"M21-GAP-00499":{"line":3754,"offset":659550,"length":194,"previous":"M21-GAP-00498","next":"M21-GAP-00500"},"M21-GAP-00500":{"line":3755,"offset":659744,"length":194,"previous":"M21-GAP-00499","next":"M21-GAP-00501"},"M21-GAP-00501":{"line":3756,"offset":659938,"length":194,"previous":"M21-GAP-00500","next":"M21-GAP-00502"},"M21-GAP-00502":{"line":3757,"offset":660132,"length":194,"previous":"M21-GAP-00501","next":"M21-GAP-00503"},"M21-GAP-00503":{"line":3758,"offset":660326,"length":184,"previous":"M21-GAP-00502","next":"M21-GAP-00504"},"M21-GAP-00504":{"line":3759,"offset":660510,"length":184,"previous":"M21-GAP-00503","next":"M21-GAP-00505"},"M21-GAP-00505":{"line":3760,"offset":660694,"length":185,"previous":"M21-GAP-00504","next":"M21-GAP-00506"},"M21-GAP-00506":{"line":3761,"offset":660879,"length":185,"previous":"M21-GAP-00505","next":"M21-GAP-00507"},"M21-GAP-00507":{"line":3762,"offset":661064,"length":185,"previous":"M21-GAP-00506","next":"M21-GAP-00508"},"M21-GAP-00508":{"line":3763,"offset":661249,"length":185,"previous":"M21-GAP-00507","next":"M21-GAP-00509"},"M21-GAP-00509":{"line":3764,"offset":661434,"length":185,"previous":"M21-GAP-00508","next":"M21-GAP-00510"},"M21-GAP-00510":{"line":3765,"offset":661619,"length":185,"previous":"M21-GAP-00509","next":"M21-GAP-00511"},"M21-GAP-00511":{"line":3766,"offset":661804,"length":185,"previous":"M21-GAP-00510","next":"M21-GAP-00512"},"M21-GAP-00512":{"line":3767,"offset":661989,"length":185,"previous":"M21-GAP-00511","next":"M21-GAP-00513"},"M21-GAP-00513":{"line":3768,"offset":662174,"length":185,"previous":"M21-GAP-00512","next":"M21-GAP-00514"},"M21-GAP-00514":{"line":3769,"offset":662359,"length":185,"previous":"M21-GAP-00513","next":"M21-GAP-00515"},"M21-GAP-00515":{"line":3770,"offset":662544,"length":184,"previous":"M21-GAP-00514","next":"M21-GAP-00516"},"M21-GAP-00516":{"line":3771,"offset":662728,"length":185,"previous":"M21-GAP-00515","next":"M21-GAP-00517"},"M21-GAP-00517":{"line":3772,"offset":662913,"length":185,"previous":"M21-GAP-00516","next":"M21-GAP-00518"},"M21-GAP-00518":{"line":3773,"offset":663098,"length":185,"previous":"M21-GAP-00517","next":"M21-GAP-00519"},"M21-GAP-00519":{"line":3774,"offset":663283,"length":185,"previous":"M21-GAP-00518","next":"M21-GAP-00520"},"M21-GAP-00520":{"line":3775,"offset":663468,"length":185,"previous":"M21-GAP-00519","next":"M21-GAP-00521"},"M21-GAP-00521":{"line":3776,"offset":663653,"length":185,"previous":"M21-GAP-00520","next":"M21-GAP-00522"},"M21-GAP-00522":{"line":3777,"offset":663838,"length":185,"previous":"M21-GAP-00521","next":"M21-GAP-00523"},"M21-GAP-00523":{"line":3778,"offset":664023,"length":185,"previous":"M21-GAP-00522","next":"M21-GAP-00524"},"M21-GAP-00524":{"line":3779,"offset":664208,"length":185,"previous":"M21-GAP-00523","next":"M21-GAP-00525"},"M21-GAP-00525":{"line":3780,"offset":664393,"length":185,"previous":"M21-GAP-00524","next":"M21-GAP-00526"},"M21-GAP-00526":{"line":3781,"offset":664578,"length":184,"previous":"M21-GAP-00525","next":"M21-GAP-00527"},"M21-GAP-00527":{"line":3782,"offset":664762,"length":185,"previous":"M21-GAP-00526","next":"M21-GAP-00528"},"M21-GAP-00528":{"line":3783,"offset":664947,"length":185,"previous":"M21-GAP-00527","next":"M21-GAP-00529"},"M21-GAP-00529":{"line":3784,"offset":665132,"length":185,"previous":"M21-GAP-00528","next":"M21-GAP-00530"},"M21-GAP-00530":{"line":3785,"offset":665317,"length":185,"previous":"M21-GAP-00529","next":"M21-GAP-00531"},"M21-GAP-00531":{"line":3786,"offset":665502,"length":185,"previous":"M21-GAP-00530","next":"M21-GAP-00532"},"M21-GAP-00532":{"line":3787,"offset":665687,"length":185,"previous":"M21-GAP-00531","next":"M21-GAP-00533"},"M21-GAP-00533":{"line":3788,"offset":665872,"length":185,"previous":"M21-GAP-00532","next":"M21-GAP-00534"},"M21-GAP-00534":{"line":3789,"offset":666057,"length":185,"previous":"M21-GAP-00533","next":"M21-GAP-00535"},"M21-GAP-00535":{"line":3790,"offset":666242,"length":185,"previous":"M21-GAP-00534","next":"M21-GAP-00536"},"M21-GAP-00536":{"line":3791,"offset":666427,"length":185,"previous":"M21-GAP-00535","next":"M21-GAP-00537"},"M21-GAP-00537":{"line":3792,"offset":666612,"length":184,"previous":"M21-GAP-00536","next":"M21-GAP-00538"},"M21-GAP-00538":{"line":3793,"offset":666796,"length":185,"previous":"M21-GAP-00537","next":"M21-GAP-00539"},"M21-GAP-00539":{"line":3794,"offset":666981,"length":185,"previous":"M21-GAP-00538","next":"M21-GAP-00540"},"M21-GAP-00540":{"line":3795,"offset":667166,"length":185,"previous":"M21-GAP-00539","next":"M21-GAP-00541"},"M21-GAP-00541":{"line":3796,"offset":667351,"length":185,"previous":"M21-GAP-00540","next":"M21-GAP-00542"},"M21-GAP-00542":{"line":3797,"offset":667536,"length":185,"previous":"M21-GAP-00541","next":"M21-GAP-00543"},"M21-GAP-00543":{"line":3798,"offset":667721,"length":185,"previous":"M21-GAP-00542","next":"M21-GAP-00544"},"M21-GAP-00544":{"line":3799,"offset":667906,"length":185,"previous":"M21-GAP-00543","next":"M21-GAP-00545"},"M21-GAP-00545":{"line":3800,"offset":668091,"length":185,"previous":"M21-GAP-00544","next":"M21-GAP-00546"},"M21-GAP-00546":{"line":3801,"offset":668276,"length":185,"previous":"M21-GAP-00545","next":"M21-GAP-00547"},"M21-GAP-00547":{"line":3802,"offset":668461,"length":185,"previous":"M21-GAP-00546","next":"M21-GAP-00548"},"M21-GAP-00548":{"line":3803,"offset":668646,"length":184,"previous":"M21-GAP-00547","next":"M21-GAP-00549"},"M21-GAP-00549":{"line":3804,"offset":668830,"length":185,"previous":"M21-GAP-00548","next":"M21-GAP-00550"},"M21-GAP-00550":{"line":3805,"offset":669015,"length":185,"previous":"M21-GAP-00549","next":"M21-GAP-00551"},"M21-GAP-00551":{"line":3806,"offset":669200,"length":185,"previous":"M21-GAP-00550","next":"M21-GAP-00552"},"M21-GAP-00552":{"line":3807,"offset":669385,"length":185,"previous":"M21-GAP-00551","next":"M21-GAP-00553"},"M21-GAP-00553":{"line":3808,"offset":669570,"length":185,"previous":"M21-GAP-00552","next":"M21-GAP-00554"},"M21-GAP-00554":{"line":3809,"offset":669755,"length":185,"previous":"M21-GAP-00553","next":"M21-GAP-00555"},"M21-GAP-00555":{"line":3810,"offset":669940,"length":185,"previous":"M21-GAP-00554","next":"M21-GAP-00556"},"M21-GAP-00556":{"line":3811,"offset":670125,"length":185,"previous":"M21-GAP-00555","next":"M21-GAP-00557"},"M21-GAP-00557":{"line":3812,"offset":670310,"length":185,"previous":"M21-GAP-00556","next":"M21-GAP-00558"},"M21-GAP-00558":{"line":3813,"offset":670495,"length":185,"previous":"M21-GAP-00557","next":"M21-GAP-00559"},"M21-GAP-00559":{"line":3814,"offset":670680,"length":184,"previous":"M21-GAP-00558","next":"M21-GAP-00560"},"M21-GAP-00560":{"line":3815,"offset":670864,"length":185,"previous":"M21-GAP-00559","next":"M21-GAP-00561"},"M21-GAP-00561":{"line":3816,"offset":671049,"length":185,"previous":"M21-GAP-00560","next":"M21-GAP-00562"},"M21-GAP-00562":{"line":3817,"offset":671234,"length":185,"previous":"M21-GAP-00561","next":"M21-GAP-00563"},"M21-GAP-00563":{"line":3818,"offset":671419,"length":185,"previous":"M21-GAP-00562","next":"M21-GAP-00564"},"M21-GAP-00564":{"line":3819,"offset":671604,"length":185,"previous":"M21-GAP-00563","next":"M21-GAP-00565"},"M21-GAP-00565":{"line":3820,"offset":671789,"length":185,"previous":"M21-GAP-00564","next":"M21-GAP-00566"},"M21-GAP-00566":{"line":3821,"offset":671974,"length":185,"previous":"M21-GAP-00565","next":"M21-GAP-00567"},"M21-GAP-00567":{"line":3822,"offset":672159,"length":185,"previous":"M21-GAP-00566","next":"M21-GAP-00568"},"M21-GAP-00568":{"line":3823,"offset":672344,"length":185,"previous":"M21-GAP-00567","next":"M21-GAP-00569"},"M21-GAP-00569":{"line":3824,"offset":672529,"length":185,"previous":"M21-GAP-00568","next":"M21-GAP-00570"},"M21-GAP-00570":{"line":3825,"offset":672714,"length":184,"previous":"M21-GAP-00569","next":"M21-GAP-00571"},"M21-GAP-00571":{"line":3826,"offset":672898,"length":185,"previous":"M21-GAP-00570","next":"M21-GAP-00572"},"M21-GAP-00572":{"line":3827,"offset":673083,"length":185,"previous":"M21-GAP-00571","next":"M21-GAP-00573"},"M21-GAP-00573":{"line":3828,"offset":673268,"length":185,"previous":"M21-GAP-00572","next":"M21-GAP-00574"},"M21-GAP-00574":{"line":3829,"offset":673453,"length":185,"previous":"M21-GAP-00573","next":"M21-GAP-00575"},"M21-GAP-00575":{"line":3830,"offset":673638,"length":185,"previous":"M21-GAP-00574","next":"M21-GAP-00576"},"M21-GAP-00576":{"line":3831,"offset":673823,"length":185,"previous":"M21-GAP-00575","next":"M21-GAP-00577"},"M21-GAP-00577":{"line":3832,"offset":674008,"length":184,"previous":"M21-GAP-00576","next":"M21-GAP-00578"},"M21-GAP-00578":{"line":3833,"offset":674192,"length":184,"previous":"M21-GAP-00577","next":"M21-GAP-00579"},"M21-GAP-00579":{"line":3834,"offset":674376,"length":190,"previous":"M21-GAP-00578","next":"M21-GAP-00580"},"M21-GAP-00580":{"line":3835,"offset":674566,"length":190,"previous":"M21-GAP-00579","next":"M21-GAP-00581"},"M21-GAP-00581":{"line":3836,"offset":674756,"length":191,"previous":"M21-GAP-00580","next":"M21-GAP-00582"},"M21-GAP-00582":{"line":3837,"offset":674947,"length":191,"previous":"M21-GAP-00581","next":"M21-GAP-00583"},"M21-GAP-00583":{"line":3838,"offset":675138,"length":191,"previous":"M21-GAP-00582","next":"M21-GAP-00584"},"M21-GAP-00584":{"line":3839,"offset":675329,"length":191,"previous":"M21-GAP-00583","next":"M21-GAP-00585"},"M21-GAP-00585":{"line":3840,"offset":675520,"length":191,"previous":"M21-GAP-00584","next":"M21-GAP-00586"},"M21-GAP-00586":{"line":3841,"offset":675711,"length":191,"previous":"M21-GAP-00585","next":"M21-GAP-00587"},"M21-GAP-00587":{"line":3842,"offset":675902,"length":191,"previous":"M21-GAP-00586","next":"M21-GAP-00588"},"M21-GAP-00588":{"line":3843,"offset":676093,"length":191,"previous":"M21-GAP-00587","next":"M21-GAP-00589"},"M21-GAP-00589":{"line":3844,"offset":676284,"length":191,"previous":"M21-GAP-00588","next":"M21-GAP-00590"},"M21-GAP-00590":{"line":3845,"offset":676475,"length":191,"previous":"M21-GAP-00589","next":"M21-GAP-00591"},"M21-GAP-00591":{"line":3846,"offset":676666,"length":190,"previous":"M21-GAP-00590","next":"M21-GAP-00592"},"M21-GAP-00592":{"line":3847,"offset":676856,"length":191,"previous":"M21-GAP-00591","next":"M21-GAP-00593"},"M21-GAP-00593":{"line":3848,"offset":677047,"length":191,"previous":"M21-GAP-00592","next":"M21-GAP-00594"},"M21-GAP-00594":{"line":3849,"offset":677238,"length":191,"previous":"M21-GAP-00593","next":"M21-GAP-00595"},"M21-GAP-00595":{"line":3850,"offset":677429,"length":191,"previous":"M21-GAP-00594","next":"M21-GAP-00596"},"M21-GAP-00596":{"line":3851,"offset":677620,"length":190,"previous":"M21-GAP-00595","next":"M21-GAP-00597"},"M21-GAP-00597":{"line":3852,"offset":677810,"length":190,"previous":"M21-GAP-00596","next":"M21-GAP-00598"},"M21-GAP-00598":{"line":3853,"offset":678000,"length":190,"previous":"M21-GAP-00597","next":"M21-GAP-00599"},"M21-GAP-00599":{"line":3854,"offset":678190,"length":190,"previous":"M21-GAP-00598","next":"M21-GAP-00600"},"M21-GAP-00600":{"line":3855,"offset":678380,"length":190,"previous":"M21-GAP-00599","next":"M21-GAP-00601"},"M21-GAP-00601":{"line":3856,"offset":678570,"length":190,"previous":"M21-GAP-00600","next":"M21-GAP-00602"},"M21-GAP-00602":{"line":3857,"offset":678760,"length":190,"previous":"M21-GAP-00601","next":"M21-GAP-00603"},"M21-GAP-00603":{"line":3858,"offset":678950,"length":189,"previous":"M21-GAP-00602","next":"M21-GAP-00604"},"M21-GAP-00604":{"line":3859,"offset":679139,"length":177,"previous":"M21-GAP-00603","next":"M21-GAP-00605"},"M21-GAP-00605":{"line":3860,"offset":679316,"length":177,"previous":"M21-GAP-00604","next":"M21-GAP-00606"},"M21-GAP-00606":{"line":3861,"offset":679493,"length":178,"previous":"M21-GAP-00605","next":"M21-GAP-00607"},"M21-GAP-00607":{"line":3862,"offset":679671,"length":178,"previous":"M21-GAP-00606","next":"M21-GAP-00608"},"M21-GAP-00608":{"line":3863,"offset":679849,"length":178,"previous":"M21-GAP-00607","next":"M21-GAP-00609"},"M21-GAP-00609":{"line":3864,"offset":680027,"length":178,"previous":"M21-GAP-00608","next":"M21-GAP-00610"},"M21-GAP-00610":{"line":3865,"offset":680205,"length":177,"previous":"M21-GAP-00609","next":"M21-GAP-00611"},"M21-GAP-00611":{"line":3866,"offset":680382,"length":177,"previous":"M21-GAP-00610","next":"M21-GAP-00612"},"M21-GAP-00612":{"line":3867,"offset":680559,"length":177,"previous":"M21-GAP-00611","next":"M21-GAP-00613"},"M21-GAP-00613":{"line":3868,"offset":680736,"length":177,"previous":"M21-GAP-00612","next":"M21-GAP-00614"},"M21-GAP-00614":{"line":3869,"offset":680913,"length":177,"previous":"M21-GAP-00613","next":"M21-GAP-00615"},"M21-GAP-00615":{"line":3870,"offset":681090,"length":177,"previous":"M21-GAP-00614","next":"M21-GAP-00616"},"M21-GAP-00616":{"line":3871,"offset":681267,"length":177,"previous":"M21-GAP-00615","next":"M21-GAP-00617"},"M21-GAP-00617":{"line":3872,"offset":681444,"length":177,"previous":"M21-GAP-00616","next":"M21-GAP-00618"},"M21-GAP-00618":{"line":3873,"offset":681621,"length":176,"previous":"M21-GAP-00617","next":"M21-GAP-00619"},"M21-GAP-00619":{"line":3874,"offset":681797,"length":176,"previous":"M21-GAP-00618","next":"M21-GAP-00620"},"M21-GAP-00620":{"line":3875,"offset":681973,"length":177,"previous":"M21-GAP-00619","next":"M21-GAP-00621"},"M21-GAP-00621":{"line":3876,"offset":682150,"length":177,"previous":"M21-GAP-00620","next":"M21-GAP-00622"},"M21-GAP-00622":{"line":3877,"offset":682327,"length":177,"previous":"M21-GAP-00621","next":"M21-GAP-00623"},"M21-GAP-00623":{"line":3878,"offset":682504,"length":177,"previous":"M21-GAP-00622","next":"M21-GAP-00624"},"M21-GAP-00624":{"line":3879,"offset":682681,"length":177,"previous":"M21-GAP-00623","next":"M21-GAP-00625"},"M21-GAP-00625":{"line":3880,"offset":682858,"length":177,"previous":"M21-GAP-00624","next":"M21-GAP-00626"},"M21-GAP-00626":{"line":3881,"offset":683035,"length":177,"previous":"M21-GAP-00625","next":"M21-GAP-00627"},"M21-GAP-00627":{"line":3882,"offset":683212,"length":177,"previous":"M21-GAP-00626","next":"M21-GAP-00628"},"M21-GAP-00628":{"line":3883,"offset":683389,"length":177,"previous":"M21-GAP-00627","next":"M21-GAP-00629"},"M21-GAP-00629":{"line":3884,"offset":683566,"length":177,"previous":"M21-GAP-00628","next":"M21-GAP-00630"},"M21-GAP-00630":{"line":3885,"offset":683743,"length":176,"previous":"M21-GAP-00629","next":"M21-GAP-00631"},"M21-GAP-00631":{"line":3886,"offset":683919,"length":177,"previous":"M21-GAP-00630","next":"M21-GAP-00632"},"M21-GAP-00632":{"line":3887,"offset":684096,"length":177,"previous":"M21-GAP-00631","next":"M21-GAP-00633"},"M21-GAP-00633":{"line":3888,"offset":684273,"length":177,"previous":"M21-GAP-00632","next":"M21-GAP-00634"},"M21-GAP-00634":{"line":3889,"offset":684450,"length":177,"previous":"M21-GAP-00633","next":"M21-GAP-00635"},"M21-GAP-00635":{"line":3890,"offset":684627,"length":177,"previous":"M21-GAP-00634","next":"M21-GAP-00636"},"M21-GAP-00636":{"line":3891,"offset":684804,"length":177,"previous":"M21-GAP-00635","next":"M21-GAP-00637"},"M21-GAP-00637":{"line":3892,"offset":684981,"length":177,"previous":"M21-GAP-00636","next":"M21-GAP-00638"},"M21-GAP-00638":{"line":3893,"offset":685158,"length":177,"previous":"M21-GAP-00637","next":"M21-GAP-00639"},"M21-GAP-00639":{"line":3894,"offset":685335,"length":177,"previous":"M21-GAP-00638","next":"M21-GAP-00640"},"M21-GAP-00640":{"line":3895,"offset":685512,"length":177,"previous":"M21-GAP-00639","next":"M21-GAP-00641"},"M21-GAP-00641":{"line":3896,"offset":685689,"length":176,"previous":"M21-GAP-00640","next":"M21-GAP-00642"},"M21-GAP-00642":{"line":3897,"offset":685865,"length":177,"previous":"M21-GAP-00641","next":"M21-GAP-00643"},"M21-GAP-00643":{"line":3898,"offset":686042,"length":177,"previous":"M21-GAP-00642","next":"M21-GAP-00644"},"M21-GAP-00644":{"line":3899,"offset":686219,"length":177,"previous":"M21-GAP-00643","next":"M21-GAP-00645"},"M21-GAP-00645":{"line":3900,"offset":686396,"length":177,"previous":"M21-GAP-00644","next":"M21-GAP-00646"},"M21-GAP-00646":{"line":3901,"offset":686573,"length":177,"previous":"M21-GAP-00645","next":"M21-GAP-00647"},"M21-GAP-00647":{"line":3902,"offset":686750,"length":177,"previous":"M21-GAP-00646","next":"M21-GAP-00648"},"M21-GAP-00648":{"line":3903,"offset":686927,"length":177,"previous":"M21-GAP-00647","next":"M21-GAP-00649"},"M21-GAP-00649":{"line":3904,"offset":687104,"length":177,"previous":"M21-GAP-00648","next":"M21-GAP-00650"},"M21-GAP-00650":{"line":3905,"offset":687281,"length":177,"previous":"M21-GAP-00649","next":"M21-GAP-00651"},"M21-GAP-00651":{"line":3906,"offset":687458,"length":177,"previous":"M21-GAP-00650","next":"M21-GAP-00652"},"M21-GAP-00652":{"line":3907,"offset":687635,"length":176,"previous":"M21-GAP-00651","next":"M21-GAP-00653"},"M21-GAP-00653":{"line":3908,"offset":687811,"length":176,"previous":"M21-GAP-00652","next":"M21-GAP-00654"},"M21-GAP-00654":{"line":3909,"offset":687987,"length":176,"previous":"M21-GAP-00653","next":"M21-GAP-00655"},"M21-GAP-00655":{"line":3910,"offset":688163,"length":176,"previous":"M21-GAP-00654","next":"M21-GAP-00656"},"M21-GAP-00656":{"line":3911,"offset":688339,"length":176,"previous":"M21-GAP-00655","next":"M21-GAP-00657"},"M21-GAP-00657":{"line":3912,"offset":688515,"length":176,"previous":"M21-GAP-00656","next":"M21-GAP-00658"},"M21-GAP-00658":{"line":3913,"offset":688691,"length":186,"previous":"M21-GAP-00657","next":"M21-GAP-00659"},"M21-GAP-00659":{"line":3914,"offset":688877,"length":186,"previous":"M21-GAP-00658","next":"M21-GAP-00660"},"M21-GAP-00660":{"line":3915,"offset":689063,"length":186,"previous":"M21-GAP-00659","next":"M21-GAP-00661"},"M21-GAP-00661":{"line":3916,"offset":689249,"length":186,"previous":"M21-GAP-00660","next":"M21-GAP-00662"},"M21-GAP-00662":{"line":3917,"offset":689435,"length":186,"previous":"M21-GAP-00661","next":"M21-GAP-00663"},"M21-GAP-00663":{"line":3918,"offset":689621,"length":172,"previous":"M21-GAP-00662","next":"M21-GAP-00664"},"M21-GAP-00664":{"line":3919,"offset":689793,"length":172,"previous":"M21-GAP-00663","next":"M21-GAP-00665"},"M21-GAP-00665":{"line":3920,"offset":689965,"length":173,"previous":"M21-GAP-00664","next":"M21-GAP-00666"},"M21-GAP-00666":{"line":3921,"offset":690138,"length":173,"previous":"M21-GAP-00665","next":"M21-GAP-00667"},"M21-GAP-00667":{"line":3922,"offset":690311,"length":173,"previous":"M21-GAP-00666","next":"M21-GAP-00668"},"M21-GAP-00668":{"line":3923,"offset":690484,"length":173,"previous":"M21-GAP-00667","next":"M21-GAP-00669"},"M21-GAP-00669":{"line":3924,"offset":690657,"length":173,"previous":"M21-GAP-00668","next":"M21-GAP-00670"},"M21-GAP-00670":{"line":3925,"offset":690830,"length":173,"previous":"M21-GAP-00669","next":"M21-GAP-00671"},"M21-GAP-00671":{"line":3926,"offset":691003,"length":173,"previous":"M21-GAP-00670","next":"M21-GAP-00672"},"M21-GAP-00672":{"line":3927,"offset":691176,"length":173,"previous":"M21-GAP-00671","next":"M21-GAP-00673"},"M21-GAP-00673":{"line":3928,"offset":691349,"length":173,"previous":"M21-GAP-00672","next":"M21-GAP-00674"},"M21-GAP-00674":{"line":3929,"offset":691522,"length":173,"previous":"M21-GAP-00673","next":"M21-GAP-00675"},"M21-GAP-00675":{"line":3930,"offset":691695,"length":172,"previous":"M21-GAP-00674","next":"M21-GAP-00676"},"M21-GAP-00676":{"line":3931,"offset":691867,"length":173,"previous":"M21-GAP-00675","next":"M21-GAP-00677"},"M21-GAP-00677":{"line":3932,"offset":692040,"length":173,"previous":"M21-GAP-00676","next":"M21-GAP-00678"},"M21-GAP-00678":{"line":3933,"offset":692213,"length":173,"previous":"M21-GAP-00677","next":"M21-GAP-00679"},"M21-GAP-00679":{"line":3934,"offset":692386,"length":173,"previous":"M21-GAP-00678","next":"M21-GAP-00680"},"M21-GAP-00680":{"line":3935,"offset":692559,"length":173,"previous":"M21-GAP-00679","next":"M21-GAP-00681"},"M21-GAP-00681":{"line":3936,"offset":692732,"length":173,"previous":"M21-GAP-00680","next":"M21-GAP-00682"},"M21-GAP-00682":{"line":3937,"offset":692905,"length":173,"previous":"M21-GAP-00681","next":"M21-GAP-00683"},"M21-GAP-00683":{"line":3938,"offset":693078,"length":173,"previous":"M21-GAP-00682","next":"M21-GAP-00684"},"M21-GAP-00684":{"line":3939,"offset":693251,"length":173,"previous":"M21-GAP-00683","next":"M21-GAP-00685"},"M21-GAP-00685":{"line":3940,"offset":693424,"length":173,"previous":"M21-GAP-00684","next":"M21-GAP-00686"},"M21-GAP-00686":{"line":3941,"offset":693597,"length":172,"previous":"M21-GAP-00685","next":"M21-GAP-00687"},"M21-GAP-00687":{"line":3942,"offset":693769,"length":173,"previous":"M21-GAP-00686","next":"M21-GAP-00688"},"M21-GAP-00688":{"line":3943,"offset":693942,"length":173,"previous":"M21-GAP-00687","next":"M21-GAP-00689"},"M21-GAP-00689":{"line":3944,"offset":694115,"length":173,"previous":"M21-GAP-00688","next":"M21-GAP-00690"},"M21-GAP-00690":{"line":3945,"offset":694288,"length":173,"previous":"M21-GAP-00689","next":"M21-GAP-00691"},"M21-GAP-00691":{"line":3946,"offset":694461,"length":173,"previous":"M21-GAP-00690","next":"M21-GAP-00692"},"M21-GAP-00692":{"line":3947,"offset":694634,"length":173,"previous":"M21-GAP-00691","next":"M21-GAP-00693"},"M21-GAP-00693":{"line":3948,"offset":694807,"length":173,"previous":"M21-GAP-00692","next":"M21-GAP-00694"},"M21-GAP-00694":{"line":3949,"offset":694980,"length":173,"previous":"M21-GAP-00693","next":"M21-GAP-00695"},"M21-GAP-00695":{"line":3950,"offset":695153,"length":173,"previous":"M21-GAP-00694","next":"M21-GAP-00696"},"M21-GAP-00696":{"line":3951,"offset":695326,"length":173,"previous":"M21-GAP-00695","next":"M21-GAP-00697"},"M21-GAP-00697":{"line":3952,"offset":695499,"length":172,"previous":"M21-GAP-00696","next":"M21-GAP-00698"},"M21-GAP-00698":{"line":3953,"offset":695671,"length":173,"previous":"M21-GAP-00697","next":"M21-GAP-00699"},"M21-GAP-00699":{"line":3954,"offset":695844,"length":173,"previous":"M21-GAP-00698","next":"M21-GAP-00700"},"M21-GAP-00700":{"line":3955,"offset":696017,"length":173,"previous":"M21-GAP-00699","next":"M21-GAP-00701"},"M21-GAP-00701":{"line":3956,"offset":696190,"length":173,"previous":"M21-GAP-00700","next":"M21-GAP-00702"},"M21-GAP-00702":{"line":3957,"offset":696363,"length":173,"previous":"M21-GAP-00701","next":"M21-GAP-00703"},"M21-GAP-00703":{"line":3958,"offset":696536,"length":172,"previous":"M21-GAP-00702","next":"M21-GAP-00704"},"M21-GAP-00704":{"line":3959,"offset":696708,"length":172,"previous":"M21-GAP-00703","next":"M21-GAP-00705"},"M21-GAP-00705":{"line":3960,"offset":696880,"length":172,"previous":"M21-GAP-00704","next":"M21-GAP-00706"},"M21-GAP-00706":{"line":3961,"offset":697052,"length":172,"previous":"M21-GAP-00705","next":"M21-GAP-00707"},"M21-GAP-00707":{"line":3962,"offset":697224,"length":172,"previous":"M21-GAP-00706","next":"M21-GAP-00708"},"M21-GAP-00708":{"line":3963,"offset":697396,"length":173,"previous":"M21-GAP-00707","next":"M21-GAP-00709"},"M21-GAP-00709":{"line":3964,"offset":697569,"length":173,"previous":"M21-GAP-00708","next":"M21-GAP-00710"},"M21-GAP-00710":{"line":3965,"offset":697742,"length":174,"previous":"M21-GAP-00709","next":"M21-GAP-00711"},"M21-GAP-00711":{"line":3966,"offset":697916,"length":174,"previous":"M21-GAP-00710","next":"M21-GAP-00712"},"M21-GAP-00712":{"line":3967,"offset":698090,"length":174,"previous":"M21-GAP-00711","next":"M21-GAP-00713"},"M21-GAP-00713":{"line":3968,"offset":698264,"length":174,"previous":"M21-GAP-00712","next":"M21-GAP-00714"},"M21-GAP-00714":{"line":3969,"offset":698438,"length":174,"previous":"M21-GAP-00713","next":"M21-GAP-00715"},"M21-GAP-00715":{"line":3970,"offset":698612,"length":174,"previous":"M21-GAP-00714","next":"M21-GAP-00716"},"M21-GAP-00716":{"line":3971,"offset":698786,"length":174,"previous":"M21-GAP-00715","next":"M21-GAP-00717"},"M21-GAP-00717":{"line":3972,"offset":698960,"length":174,"previous":"M21-GAP-00716","next":"M21-GAP-00718"},"M21-GAP-00718":{"line":3973,"offset":699134,"length":174,"previous":"M21-GAP-00717","next":"M21-GAP-00719"},"M21-GAP-00719":{"line":3974,"offset":699308,"length":174,"previous":"M21-GAP-00718","next":"M21-GAP-00720"},"M21-GAP-00720":{"line":3975,"offset":699482,"length":173,"previous":"M21-GAP-00719","next":"M21-GAP-00721"},"M21-GAP-00721":{"line":3976,"offset":699655,"length":174,"previous":"M21-GAP-00720","next":"M21-GAP-00722"},"M21-GAP-00722":{"line":3977,"offset":699829,"length":174,"previous":"M21-GAP-00721","next":"M21-GAP-00723"},"M21-GAP-00723":{"line":3978,"offset":700003,"length":174,"previous":"M21-GAP-00722","next":"M21-GAP-00724"},"M21-GAP-00724":{"line":3979,"offset":700177,"length":174,"previous":"M21-GAP-00723","next":"M21-GAP-00725"},"M21-GAP-00725":{"line":3980,"offset":700351,"length":174,"previous":"M21-GAP-00724","next":"M21-GAP-00726"},"M21-GAP-00726":{"line":3981,"offset":700525,"length":174,"previous":"M21-GAP-00725","next":"M21-GAP-00727"},"M21-GAP-00727":{"line":3982,"offset":700699,"length":174,"previous":"M21-GAP-00726","next":"M21-GAP-00728"},"M21-GAP-00728":{"line":3983,"offset":700873,"length":174,"previous":"M21-GAP-00727","next":"M21-GAP-00729"},"M21-GAP-00729":{"line":3984,"offset":701047,"length":174,"previous":"M21-GAP-00728","next":"M21-GAP-00730"},"M21-GAP-00730":{"line":3985,"offset":701221,"length":174,"previous":"M21-GAP-00729","next":"M21-GAP-00731"},"M21-GAP-00731":{"line":3986,"offset":701395,"length":173,"previous":"M21-GAP-00730","next":"M21-GAP-00732"},"M21-GAP-00732":{"line":3987,"offset":701568,"length":174,"previous":"M21-GAP-00731","next":"M21-GAP-00733"},"M21-GAP-00733":{"line":3988,"offset":701742,"length":174,"previous":"M21-GAP-00732","next":"M21-GAP-00734"},"M21-GAP-00734":{"line":3989,"offset":701916,"length":174,"previous":"M21-GAP-00733","next":"M21-GAP-00735"},"M21-GAP-00735":{"line":3990,"offset":702090,"length":174,"previous":"M21-GAP-00734","next":"M21-GAP-00736"},"M21-GAP-00736":{"line":3991,"offset":702264,"length":173,"previous":"M21-GAP-00735","next":"M21-GAP-00737"},"M21-GAP-00737":{"line":3992,"offset":702437,"length":173,"previous":"M21-GAP-00736","next":"M21-GAP-00738"},"M21-GAP-00738":{"line":3993,"offset":702610,"length":173,"previous":"M21-GAP-00737","next":"M21-GAP-00739"},"M21-GAP-00739":{"line":3994,"offset":702783,"length":173,"previous":"M21-GAP-00738","next":"M21-GAP-00740"},"M21-GAP-00740":{"line":3995,"offset":702956,"length":173,"previous":"M21-GAP-00739","next":"M21-GAP-00741"},"M21-GAP-00741":{"line":3996,"offset":703129,"length":173,"previous":"M21-GAP-00740","next":"M21-GAP-00742"},"M21-GAP-00742":{"line":3997,"offset":703302,"length":191,"previous":"M21-GAP-00741","next":"M21-GAP-00743"},"M21-GAP-00743":{"line":3998,"offset":703493,"length":191,"previous":"M21-GAP-00742","next":"M21-GAP-00744"},"M21-GAP-00744":{"line":3999,"offset":703684,"length":192,"previous":"M21-GAP-00743","next":"M21-GAP-00745"},"M21-GAP-00745":{"line":4000,"offset":703876,"length":192,"previous":"M21-GAP-00744","next":"M21-GAP-00746"},"M21-GAP-00746":{"line":4001,"offset":704068,"length":192,"previous":"M21-GAP-00745","next":"M21-GAP-00747"},"M21-GAP-00747":{"line":4002,"offset":704260,"length":192,"previous":"M21-GAP-00746","next":"M21-GAP-00748"},"M21-GAP-00748":{"line":4003,"offset":704452,"length":191,"previous":"M21-GAP-00747","next":"M21-GAP-00749"},"M21-GAP-00749":{"line":4004,"offset":704643,"length":191,"previous":"M21-GAP-00748","next":"M21-GAP-00750"},"M21-GAP-00750":{"line":4005,"offset":704834,"length":191,"previous":"M21-GAP-00749","next":"M21-GAP-00751"},"M21-GAP-00751":{"line":4006,"offset":705025,"length":191,"previous":"M21-GAP-00750","next":"M21-GAP-00752"},"M21-GAP-00752":{"line":4007,"offset":705216,"length":191,"previous":"M21-GAP-00751","next":"M21-GAP-00753"},"M21-GAP-00753":{"line":4008,"offset":705407,"length":191,"previous":"M21-GAP-00752","next":"M21-GAP-00754"},"M21-GAP-00754":{"line":4009,"offset":705598,"length":191,"previous":"M21-GAP-00753","next":"M21-GAP-00755"},"M21-GAP-00755":{"line":4010,"offset":705789,"length":191,"previous":"M21-GAP-00754","next":"M21-GAP-00756"},"M21-GAP-00756":{"line":4011,"offset":705980,"length":195,"previous":"M21-GAP-00755","next":"M21-GAP-00757"},"M21-GAP-00757":{"line":4012,"offset":706175,"length":195,"previous":"M21-GAP-00756","next":"M21-GAP-00758"},"M21-GAP-00758":{"line":4013,"offset":706370,"length":195,"previous":"M21-GAP-00757","next":"M21-GAP-00759"},"M21-GAP-00759":{"line":4014,"offset":706565,"length":187,"previous":"M21-GAP-00758","next":"M21-GAP-00760"},"M21-GAP-00760":{"line":4015,"offset":706752,"length":187,"previous":"M21-GAP-00759","next":"M21-GAP-00761"},"M21-GAP-00761":{"line":4016,"offset":706939,"length":188,"previous":"M21-GAP-00760","next":"M21-GAP-00762"},"M21-GAP-00762":{"line":4017,"offset":707127,"length":188,"previous":"M21-GAP-00761","next":"M21-GAP-00763"},"M21-GAP-00763":{"line":4018,"offset":707315,"length":188,"previous":"M21-GAP-00762","next":"M21-GAP-00764"},"M21-GAP-00764":{"line":4019,"offset":707503,"length":188,"previous":"M21-GAP-00763","next":"M21-GAP-00765"},"M21-GAP-00765":{"line":4020,"offset":707691,"length":188,"previous":"M21-GAP-00764","next":"M21-GAP-00766"},"M21-GAP-00766":{"line":4021,"offset":707879,"length":188,"previous":"M21-GAP-00765","next":"M21-GAP-00767"},"M21-GAP-00767":{"line":4022,"offset":708067,"length":188,"previous":"M21-GAP-00766","next":"M21-GAP-00768"},"M21-GAP-00768":{"line":4023,"offset":708255,"length":188,"previous":"M21-GAP-00767","next":"M21-GAP-00769"},"M21-GAP-00769":{"line":4024,"offset":708443,"length":188,"previous":"M21-GAP-00768","next":"M21-GAP-00770"},"M21-GAP-00770":{"line":4025,"offset":708631,"length":188,"previous":"M21-GAP-00769","next":"M21-GAP-00771"},"M21-GAP-00771":{"line":4026,"offset":708819,"length":187,"previous":"M21-GAP-00770","next":"M21-GAP-00772"},"M21-GAP-00772":{"line":4027,"offset":709006,"length":188,"previous":"M21-GAP-00771","next":"M21-GAP-00773"},"M21-GAP-00773":{"line":4028,"offset":709194,"length":188,"previous":"M21-GAP-00772","next":"M21-GAP-00774"},"M21-GAP-00774":{"line":4029,"offset":709382,"length":188,"previous":"M21-GAP-00773","next":"M21-GAP-00775"},"M21-GAP-00775":{"line":4030,"offset":709570,"length":188,"previous":"M21-GAP-00774","next":"M21-GAP-00776"},"M21-GAP-00776":{"line":4031,"offset":709758,"length":188,"previous":"M21-GAP-00775","next":"M21-GAP-00777"},"M21-GAP-00777":{"line":4032,"offset":709946,"length":188,"previous":"M21-GAP-00776","next":"M21-GAP-00778"},"M21-GAP-00778":{"line":4033,"offset":710134,"length":188,"previous":"M21-GAP-00777","next":"M21-GAP-00779"},"M21-GAP-00779":{"line":4034,"offset":710322,"length":188,"previous":"M21-GAP-00778","next":"M21-GAP-00780"},"M21-GAP-00780":{"line":4035,"offset":710510,"length":188,"previous":"M21-GAP-00779","next":"M21-GAP-00781"},"M21-GAP-00781":{"line":4036,"offset":710698,"length":188,"previous":"M21-GAP-00780","next":"M21-GAP-00782"},"M21-GAP-00782":{"line":4037,"offset":710886,"length":187,"previous":"M21-GAP-00781","next":"M21-GAP-00783"},"M21-GAP-00783":{"line":4038,"offset":711073,"length":188,"previous":"M21-GAP-00782","next":"M21-GAP-00784"},"M21-GAP-00784":{"line":4039,"offset":711261,"length":188,"previous":"M21-GAP-00783","next":"M21-GAP-00785"},"M21-GAP-00785":{"line":4040,"offset":711449,"length":188,"previous":"M21-GAP-00784","next":"M21-GAP-00786"},"M21-GAP-00786":{"line":4041,"offset":711637,"length":188,"previous":"M21-GAP-00785","next":"M21-GAP-00787"},"M21-GAP-00787":{"line":4042,"offset":711825,"length":188,"previous":"M21-GAP-00786","next":"M21-GAP-00788"},"M21-GAP-00788":{"line":4043,"offset":712013,"length":188,"previous":"M21-GAP-00787","next":"M21-GAP-00789"},"M21-GAP-00789":{"line":4044,"offset":712201,"length":188,"previous":"M21-GAP-00788","next":"M21-GAP-00790"},"M21-GAP-00790":{"line":4045,"offset":712389,"length":188,"previous":"M21-GAP-00789","next":"M21-GAP-00791"},"M21-GAP-00791":{"line":4046,"offset":712577,"length":188,"previous":"M21-GAP-00790","next":"M21-GAP-00792"},"M21-GAP-00792":{"line":4047,"offset":712765,"length":188,"previous":"M21-GAP-00791","next":"M21-GAP-00793"},"M21-GAP-00793":{"line":4048,"offset":712953,"length":187,"previous":"M21-GAP-00792","next":"M21-GAP-00794"},"M21-GAP-00794":{"line":4049,"offset":713140,"length":188,"previous":"M21-GAP-00793","next":"M21-GAP-00795"},"M21-GAP-00795":{"line":4050,"offset":713328,"length":188,"previous":"M21-GAP-00794","next":"M21-GAP-00796"},"M21-GAP-00796":{"line":4051,"offset":713516,"length":188,"previous":"M21-GAP-00795","next":"M21-GAP-00797"},"M21-GAP-00797":{"line":4052,"offset":713704,"length":188,"previous":"M21-GAP-00796","next":"M21-GAP-00798"},"M21-GAP-00798":{"line":4053,"offset":713892,"length":188,"previous":"M21-GAP-00797","next":"M21-GAP-00799"},"M21-GAP-00799":{"line":4054,"offset":714080,"length":188,"previous":"M21-GAP-00798","next":"M21-GAP-00800"},"M21-GAP-00800":{"line":4055,"offset":714268,"length":188,"previous":"M21-GAP-00799","next":"M21-GAP-00801"},"M21-GAP-00801":{"line":4056,"offset":714456,"length":188,"previous":"M21-GAP-00800","next":"M21-GAP-00802"},"M21-GAP-00802":{"line":4057,"offset":714644,"length":188,"previous":"M21-GAP-00801","next":"M21-GAP-00803"},"M21-GAP-00803":{"line":4058,"offset":714832,"length":188,"previous":"M21-GAP-00802","next":"M21-GAP-00804"},"M21-GAP-00804":{"line":4059,"offset":715020,"length":187,"previous":"M21-GAP-00803","next":"M21-GAP-00805"},"M21-GAP-00805":{"line":4060,"offset":715207,"length":188,"previous":"M21-GAP-00804","next":"M21-GAP-00806"},"M21-GAP-00806":{"line":4061,"offset":715395,"length":188,"previous":"M21-GAP-00805","next":"M21-GAP-00807"},"M21-GAP-00807":{"line":4062,"offset":715583,"length":188,"previous":"M21-GAP-00806","next":"M21-GAP-00808"},"M21-GAP-00808":{"line":4063,"offset":715771,"length":188,"previous":"M21-GAP-00807","next":"M21-GAP-00809"},"M21-GAP-00809":{"line":4064,"offset":715959,"length":188,"previous":"M21-GAP-00808","next":"M21-GAP-00810"},"M21-GAP-00810":{"line":4065,"offset":716147,"length":188,"previous":"M21-GAP-00809","next":"M21-GAP-00811"},"M21-GAP-00811":{"line":4066,"offset":716335,"length":188,"previous":"M21-GAP-00810","next":"M21-GAP-00812"},"M21-GAP-00812":{"line":4067,"offset":716523,"length":188,"previous":"M21-GAP-00811","next":"M21-GAP-00813"},"M21-GAP-00813":{"line":4068,"offset":716711,"length":188,"previous":"M21-GAP-00812","next":"M21-GAP-00814"},"M21-GAP-00814":{"line":4069,"offset":716899,"length":188,"previous":"M21-GAP-00813","next":"M21-GAP-00815"},"M21-GAP-00815":{"line":4070,"offset":717087,"length":187,"previous":"M21-GAP-00814","next":"M21-GAP-00816"},"M21-GAP-00816":{"line":4071,"offset":717274,"length":188,"previous":"M21-GAP-00815","next":"M21-GAP-00817"},"M21-GAP-00817":{"line":4072,"offset":717462,"length":188,"previous":"M21-GAP-00816","next":"M21-GAP-00818"},"M21-GAP-00818":{"line":4073,"offset":717650,"length":188,"previous":"M21-GAP-00817","next":"M21-GAP-00819"},"M21-GAP-00819":{"line":4074,"offset":717838,"length":188,"previous":"M21-GAP-00818","next":"M21-GAP-00820"},"M21-GAP-00820":{"line":4075,"offset":718026,"length":188,"previous":"M21-GAP-00819","next":"M21-GAP-00821"},"M21-GAP-00821":{"line":4076,"offset":718214,"length":188,"previous":"M21-GAP-00820","next":"M21-GAP-00822"},"M21-GAP-00822":{"line":4077,"offset":718402,"length":188,"previous":"M21-GAP-00821","next":"M21-GAP-00823"},"M21-GAP-00823":{"line":4078,"offset":718590,"length":188,"previous":"M21-GAP-00822","next":"M21-GAP-00824"},"M21-GAP-00824":{"line":4079,"offset":718778,"length":187,"previous":"M21-GAP-00823","next":"M21-GAP-00825"},"M21-GAP-00825":{"line":4080,"offset":718965,"length":187,"previous":"M21-GAP-00824","next":"M21-GAP-00826"},"M21-GAP-00826":{"line":4081,"offset":719152,"length":187,"previous":"M21-GAP-00825","next":"M21-GAP-00827"},"M21-GAP-00827":{"line":4082,"offset":719339,"length":205,"previous":"M21-GAP-00826","next":"M21-GAP-00828"},"M21-GAP-00828":{"line":4083,"offset":719544,"length":205,"previous":"M21-GAP-00827","next":"M21-GAP-00829"},"M21-GAP-00829":{"line":4084,"offset":719749,"length":205,"previous":"M21-GAP-00828","next":"M21-GAP-00830"},"M21-GAP-00830":{"line":4085,"offset":719954,"length":205,"previous":"M21-GAP-00829","next":"M21-GAP-00831"},"M21-GAP-00831":{"line":4086,"offset":720159,"length":205,"previous":"M21-GAP-00830","next":"M21-GAP-00832"},"M21-GAP-00832":{"line":4087,"offset":720364,"length":205,"previous":"M21-GAP-00831","next":"M21-GAP-00833"},"M21-GAP-00833":{"line":4088,"offset":720569,"length":205,"previous":"M21-GAP-00832","next":"M21-GAP-00834"},"M21-GAP-00834":{"line":4089,"offset":720774,"length":187,"previous":"M21-GAP-00833","next":"M21-GAP-00835"},"M21-GAP-00835":{"line":4090,"offset":720961,"length":187,"previous":"M21-GAP-00834","next":"M21-GAP-00836"},"M21-GAP-00836":{"line":4091,"offset":721148,"length":187,"previous":"M21-GAP-00835","next":"M21-GAP-00837"},"M21-GAP-00837":{"line":4092,"offset":721335,"length":187,"previous":"M21-GAP-00836","next":"M21-GAP-00838"},"M21-GAP-00838":{"line":4093,"offset":721522,"length":187,"previous":"M21-GAP-00837","next":"M21-GAP-00839"},"M21-GAP-00839":{"line":4094,"offset":721709,"length":187,"previous":"M21-GAP-00838","next":"M21-GAP-00840"},"M21-GAP-00840":{"line":4095,"offset":721896,"length":187,"previous":"M21-GAP-00839","next":"M21-GAP-00841"},"M21-GAP-00841":{"line":4096,"offset":722083,"length":194,"previous":"M21-GAP-00840","next":"M21-GAP-00842"},"M21-GAP-00842":{"line":4097,"offset":722277,"length":194,"previous":"M21-GAP-00841","next":"M21-GAP-00843"},"M21-GAP-00843":{"line":4098,"offset":722471,"length":194,"previous":"M21-GAP-00842","next":"M21-GAP-00844"},"M21-GAP-00844":{"line":4099,"offset":722665,"length":194,"previous":"M21-GAP-00843","next":"M21-GAP-00845"},"M21-GAP-00845":{"line":4100,"offset":722859,"length":194,"previous":"M21-GAP-00844","next":"M21-GAP-00846"},"M21-GAP-00846":{"line":4101,"offset":723053,"length":194,"previous":"M21-GAP-00845","next":"M21-GAP-00847"},"M21-GAP-00847":{"line":4102,"offset":723247,"length":191,"previous":"M21-GAP-00846","next":"M21-GAP-00848"},"M21-GAP-00848":{"line":4103,"offset":723438,"length":191,"previous":"M21-GAP-00847","next":"M21-GAP-00849"},"M21-GAP-00849":{"line":4104,"offset":723629,"length":192,"previous":"M21-GAP-00848","next":"M21-GAP-00850"},"M21-GAP-00850":{"line":4105,"offset":723821,"length":192,"previous":"M21-GAP-00849","next":"M21-GAP-00851"},"M21-GAP-00851":{"line":4106,"offset":724013,"length":192,"previous":"M21-GAP-00850","next":"M21-GAP-00852"},"M21-GAP-00852":{"line":4107,"offset":724205,"length":192,"previous":"M21-GAP-00851","next":"M21-GAP-00853"},"M21-GAP-00853":{"line":4108,"offset":724397,"length":192,"previous":"M21-GAP-00852","next":"M21-GAP-00854"},"M21-GAP-00854":{"line":4109,"offset":724589,"length":192,"previous":"M21-GAP-00853","next":"M21-GAP-00855"},"M21-GAP-00855":{"line":4110,"offset":724781,"length":192,"previous":"M21-GAP-00854","next":"M21-GAP-00856"},"M21-GAP-00856":{"line":4111,"offset":724973,"length":192,"previous":"M21-GAP-00855","next":"M21-GAP-00857"},"M21-GAP-00857":{"line":4112,"offset":725165,"length":192,"previous":"M21-GAP-00856","next":"M21-GAP-00858"},"M21-GAP-00858":{"line":4113,"offset":725357,"length":192,"previous":"M21-GAP-00857","next":"M21-GAP-00859"},"M21-GAP-00859":{"line":4114,"offset":725549,"length":191,"previous":"M21-GAP-00858","next":"M21-GAP-00860"},"M21-GAP-00860":{"line":4115,"offset":725740,"length":192,"previous":"M21-GAP-00859","next":"M21-GAP-00861"},"M21-GAP-00861":{"line":4116,"offset":725932,"length":192,"previous":"M21-GAP-00860","next":"M21-GAP-00862"},"M21-GAP-00862":{"line":4117,"offset":726124,"length":192,"previous":"M21-GAP-00861","next":"M21-GAP-00863"},"M21-GAP-00863":{"line":4118,"offset":726316,"length":192,"previous":"M21-GAP-00862","next":"M21-GAP-00864"},"M21-GAP-00864":{"line":4119,"offset":726508,"length":192,"previous":"M21-GAP-00863","next":"M21-GAP-00865"},"M21-GAP-00865":{"line":4120,"offset":726700,"length":192,"previous":"M21-GAP-00864","next":"M21-GAP-00866"},"M21-GAP-00866":{"line":4121,"offset":726892,"length":192,"previous":"M21-GAP-00865","next":"M21-GAP-00867"},"M21-GAP-00867":{"line":4122,"offset":727084,"length":192,"previous":"M21-GAP-00866","next":"M21-GAP-00868"},"M21-GAP-00868":{"line":4123,"offset":727276,"length":192,"previous":"M21-GAP-00867","next":"M21-GAP-00869"},"M21-GAP-00869":{"line":4124,"offset":727468,"length":192,"previous":"M21-GAP-00868","next":"M21-GAP-00870"},"M21-GAP-00870":{"line":4125,"offset":727660,"length":191,"previous":"M21-GAP-00869","next":"M21-GAP-00871"},"M21-GAP-00871":{"line":4126,"offset":727851,"length":192,"previous":"M21-GAP-00870","next":"M21-GAP-00872"},"M21-GAP-00872":{"line":4127,"offset":728043,"length":192,"previous":"M21-GAP-00871","next":"M21-GAP-00873"},"M21-GAP-00873":{"line":4128,"offset":728235,"length":191,"previous":"M21-GAP-00872","next":"M21-GAP-00874"},"M21-GAP-00874":{"line":4129,"offset":728426,"length":191,"previous":"M21-GAP-00873","next":"M21-GAP-00875"},"M21-GAP-00875":{"line":4130,"offset":728617,"length":191,"previous":"M21-GAP-00874","next":"M21-GAP-00876"},"M21-GAP-00876":{"line":4131,"offset":728808,"length":191,"previous":"M21-GAP-00875","next":"M21-GAP-00877"},"M21-GAP-00877":{"line":4132,"offset":728999,"length":191,"previous":"M21-GAP-00876","next":"M21-GAP-00878"},"M21-GAP-00878":{"line":4133,"offset":729190,"length":191,"previous":"M21-GAP-00877","next":"M21-GAP-00879"},"M21-GAP-00879":{"line":4134,"offset":729381,"length":186,"previous":"M21-GAP-00878","next":"M21-GAP-00880"},"M21-GAP-00880":{"line":4135,"offset":729567,"length":186,"previous":"M21-GAP-00879","next":"M21-GAP-00881"},"M21-GAP-00881":{"line":4136,"offset":729753,"length":187,"previous":"M21-GAP-00880","next":"M21-GAP-00882"},"M21-GAP-00882":{"line":4137,"offset":729940,"length":187,"previous":"M21-GAP-00881","next":"M21-GAP-00883"},"M21-GAP-00883":{"line":4138,"offset":730127,"length":187,"previous":"M21-GAP-00882","next":"M21-GAP-00884"},"M21-GAP-00884":{"line":4139,"offset":730314,"length":187,"previous":"M21-GAP-00883","next":"M21-GAP-00885"},"M21-GAP-00885":{"line":4140,"offset":730501,"length":187,"previous":"M21-GAP-00884","next":"M21-GAP-00886"},"M21-GAP-00886":{"line":4141,"offset":730688,"length":187,"previous":"M21-GAP-00885","next":"M21-GAP-00887"},"M21-GAP-00887":{"line":4142,"offset":730875,"length":187,"previous":"M21-GAP-00886","next":"M21-GAP-00888"},"M21-GAP-00888":{"line":4143,"offset":731062,"length":187,"previous":"M21-GAP-00887","next":"M21-GAP-00889"},"M21-GAP-00889":{"line":4144,"offset":731249,"length":187,"previous":"M21-GAP-00888","next":"M21-GAP-00890"},"M21-GAP-00890":{"line":4145,"offset":731436,"length":187,"previous":"M21-GAP-00889","next":"M21-GAP-00891"},"M21-GAP-00891":{"line":4146,"offset":731623,"length":186,"previous":"M21-GAP-00890","next":"M21-GAP-00892"},"M21-GAP-00892":{"line":4147,"offset":731809,"length":187,"previous":"M21-GAP-00891","next":"M21-GAP-00893"},"M21-GAP-00893":{"line":4148,"offset":731996,"length":187,"previous":"M21-GAP-00892","next":"M21-GAP-00894"},"M21-GAP-00894":{"line":4149,"offset":732183,"length":187,"previous":"M21-GAP-00893","next":"M21-GAP-00895"},"M21-GAP-00895":{"line":4150,"offset":732370,"length":187,"previous":"M21-GAP-00894","next":"M21-GAP-00896"},"M21-GAP-00896":{"line":4151,"offset":732557,"length":187,"previous":"M21-GAP-00895","next":"M21-GAP-00897"},"M21-GAP-00897":{"line":4152,"offset":732744,"length":187,"previous":"M21-GAP-00896","next":"M21-GAP-00898"},"M21-GAP-00898":{"line":4153,"offset":732931,"length":187,"previous":"M21-GAP-00897","next":"M21-GAP-00899"},"M21-GAP-00899":{"line":4154,"offset":733118,"length":187,"previous":"M21-GAP-00898","next":"M21-GAP-00900"},"M21-GAP-00900":{"line":4155,"offset":733305,"length":187,"previous":"M21-GAP-00899","next":"M21-GAP-00901"},"M21-GAP-00901":{"line":4156,"offset":733492,"length":187,"previous":"M21-GAP-00900","next":"M21-GAP-00902"},"M21-GAP-00902":{"line":4157,"offset":733679,"length":186,"previous":"M21-GAP-00901","next":"M21-GAP-00903"},"M21-GAP-00903":{"line":4158,"offset":733865,"length":187,"previous":"M21-GAP-00902","next":"M21-GAP-00904"},"M21-GAP-00904":{"line":4159,"offset":734052,"length":187,"previous":"M21-GAP-00903","next":"M21-GAP-00905"},"M21-GAP-00905":{"line":4160,"offset":734239,"length":186,"previous":"M21-GAP-00904","next":"M21-GAP-00906"},"M21-GAP-00906":{"line":4161,"offset":734425,"length":186,"previous":"M21-GAP-00905","next":"M21-GAP-00907"},"M21-GAP-00907":{"line":4162,"offset":734611,"length":186,"previous":"M21-GAP-00906","next":"M21-GAP-00908"},"M21-GAP-00908":{"line":4163,"offset":734797,"length":186,"previous":"M21-GAP-00907","next":"M21-GAP-00909"},"M21-GAP-00909":{"line":4164,"offset":734983,"length":186,"previous":"M21-GAP-00908","next":"M21-GAP-00910"},"M21-GAP-00910":{"line":4165,"offset":735169,"length":186,"previous":"M21-GAP-00909","next":"M21-GAP-00911"},"M21-GAP-00911":{"line":4166,"offset":735355,"length":186,"previous":"M21-GAP-00910","next":"M21-GAP-00912"},"M21-GAP-00912":{"line":4167,"offset":735541,"length":186,"previous":"M21-GAP-00911","next":"M21-GAP-00913"},"M21-GAP-00913":{"line":4168,"offset":735727,"length":187,"previous":"M21-GAP-00912","next":"M21-GAP-00914"},"M21-GAP-00914":{"line":4169,"offset":735914,"length":187,"previous":"M21-GAP-00913","next":"M21-GAP-00915"},"M21-GAP-00915":{"line":4170,"offset":736101,"length":187,"previous":"M21-GAP-00914","next":"M21-GAP-00916"},"M21-GAP-00916":{"line":4171,"offset":736288,"length":187,"previous":"M21-GAP-00915","next":"M21-GAP-00917"},"M21-GAP-00917":{"line":4172,"offset":736475,"length":186,"previous":"M21-GAP-00916","next":"M21-GAP-00918"},"M21-GAP-00918":{"line":4173,"offset":736661,"length":186,"previous":"M21-GAP-00917","next":"M21-GAP-00919"},"M21-GAP-00919":{"line":4174,"offset":736847,"length":186,"previous":"M21-GAP-00918","next":"M21-GAP-00920"},"M21-GAP-00920":{"line":4175,"offset":737033,"length":186,"previous":"M21-GAP-00919","next":"M21-GAP-00921"},"M21-GAP-00921":{"line":4176,"offset":737219,"length":186,"previous":"M21-GAP-00920","next":"M21-GAP-00922"},"M21-GAP-00922":{"line":4177,"offset":737405,"length":186,"previous":"M21-GAP-00921","next":"M21-GAP-00923"},"M21-GAP-00923":{"line":4178,"offset":737591,"length":186,"previous":"M21-GAP-00922","next":"M21-GAP-00924"},"M21-GAP-00924":{"line":4179,"offset":737777,"length":186,"previous":"M21-GAP-00923","next":"M21-GAP-00925"},"M21-GAP-00925":{"line":4180,"offset":737963,"length":171,"previous":"M21-GAP-00924","next":"M21-GAP-00926"},"M21-GAP-00926":{"line":4181,"offset":738134,"length":171,"previous":"M21-GAP-00925","next":"M21-GAP-00927"},"M21-GAP-00927":{"line":4182,"offset":738305,"length":172,"previous":"M21-GAP-00926","next":"M21-GAP-00928"},"M21-GAP-00928":{"line":4183,"offset":738477,"length":172,"previous":"M21-GAP-00927","next":"M21-GAP-00929"},"M21-GAP-00929":{"line":4184,"offset":738649,"length":172,"previous":"M21-GAP-00928","next":"M21-GAP-00930"},"M21-GAP-00930":{"line":4185,"offset":738821,"length":172,"previous":"M21-GAP-00929","next":"M21-GAP-00931"},"M21-GAP-00931":{"line":4186,"offset":738993,"length":172,"previous":"M21-GAP-00930","next":"M21-GAP-00932"},"M21-GAP-00932":{"line":4187,"offset":739165,"length":172,"previous":"M21-GAP-00931","next":"M21-GAP-00933"},"M21-GAP-00933":{"line":4188,"offset":739337,"length":172,"previous":"M21-GAP-00932","next":"M21-GAP-00934"},"M21-GAP-00934":{"line":4189,"offset":739509,"length":172,"previous":"M21-GAP-00933","next":"M21-GAP-00935"},"M21-GAP-00935":{"line":4190,"offset":739681,"length":172,"previous":"M21-GAP-00934","next":"M21-GAP-00936"},"M21-GAP-00936":{"line":4191,"offset":739853,"length":172,"previous":"M21-GAP-00935","next":"M21-GAP-00937"},"M21-GAP-00937":{"line":4192,"offset":740025,"length":171,"previous":"M21-GAP-00936","next":"M21-GAP-00938"},"M21-GAP-00938":{"line":4193,"offset":740196,"length":172,"previous":"M21-GAP-00937","next":"M21-GAP-00939"},"M21-GAP-00939":{"line":4194,"offset":740368,"length":172,"previous":"M21-GAP-00938","next":"M21-GAP-00940"},"M21-GAP-00940":{"line":4195,"offset":740540,"length":172,"previous":"M21-GAP-00939","next":"M21-GAP-00941"},"M21-GAP-00941":{"line":4196,"offset":740712,"length":172,"previous":"M21-GAP-00940","next":"M21-GAP-00942"},"M21-GAP-00942":{"line":4197,"offset":740884,"length":172,"previous":"M21-GAP-00941","next":"M21-GAP-00943"},"M21-GAP-00943":{"line":4198,"offset":741056,"length":172,"previous":"M21-GAP-00942","next":"M21-GAP-00944"},"M21-GAP-00944":{"line":4199,"offset":741228,"length":172,"previous":"M21-GAP-00943","next":"M21-GAP-00945"},"M21-GAP-00945":{"line":4200,"offset":741400,"length":172,"previous":"M21-GAP-00944","next":"M21-GAP-00946"},"M21-GAP-00946":{"line":4201,"offset":741572,"length":172,"previous":"M21-GAP-00945","next":"M21-GAP-00947"},"M21-GAP-00947":{"line":4202,"offset":741744,"length":172,"previous":"M21-GAP-00946","next":"M21-GAP-00948"},"M21-GAP-00948":{"line":4203,"offset":741916,"length":171,"previous":"M21-GAP-00947","next":"M21-GAP-00949"},"M21-GAP-00949":{"line":4204,"offset":742087,"length":172,"previous":"M21-GAP-00948","next":"M21-GAP-00950"},"M21-GAP-00950":{"line":4205,"offset":742259,"length":172,"previous":"M21-GAP-00949","next":"M21-GAP-00951"},"M21-GAP-00951":{"line":4206,"offset":742431,"length":172,"previous":"M21-GAP-00950","next":"M21-GAP-00952"},"M21-GAP-00952":{"line":4207,"offset":742603,"length":172,"previous":"M21-GAP-00951","next":"M21-GAP-00953"},"M21-GAP-00953":{"line":4208,"offset":742775,"length":172,"previous":"M21-GAP-00952","next":"M21-GAP-00954"},"M21-GAP-00954":{"line":4209,"offset":742947,"length":172,"previous":"M21-GAP-00953","next":"M21-GAP-00955"},"M21-GAP-00955":{"line":4210,"offset":743119,"length":172,"previous":"M21-GAP-00954","next":"M21-GAP-00956"},"M21-GAP-00956":{"line":4211,"offset":743291,"length":172,"previous":"M21-GAP-00955","next":"M21-GAP-00957"},"M21-GAP-00957":{"line":4212,"offset":743463,"length":172,"previous":"M21-GAP-00956","next":"M21-GAP-00958"},"M21-GAP-00958":{"line":4213,"offset":743635,"length":172,"previous":"M21-GAP-00957","next":"M21-GAP-00959"},"M21-GAP-00959":{"line":4214,"offset":743807,"length":171,"previous":"M21-GAP-00958","next":"M21-GAP-00960"},"M21-GAP-00960":{"line":4215,"offset":743978,"length":172,"previous":"M21-GAP-00959","next":"M21-GAP-00961"},"M21-GAP-00961":{"line":4216,"offset":744150,"length":172,"previous":"M21-GAP-00960","next":"M21-GAP-00962"},"M21-GAP-00962":{"line":4217,"offset":744322,"length":172,"previous":"M21-GAP-00961","next":"M21-GAP-00963"},"M21-GAP-00963":{"line":4218,"offset":744494,"length":172,"previous":"M21-GAP-00962","next":"M21-GAP-00964"},"M21-GAP-00964":{"line":4219,"offset":744666,"length":172,"previous":"M21-GAP-00963","next":"M21-GAP-00965"},"M21-GAP-00965":{"line":4220,"offset":744838,"length":172,"previous":"M21-GAP-00964","next":"M21-GAP-00966"},"M21-GAP-00966":{"line":4221,"offset":745010,"length":172,"previous":"M21-GAP-00965","next":"M21-GAP-00967"},"M21-GAP-00967":{"line":4222,"offset":745182,"length":172,"previous":"M21-GAP-00966","next":"M21-GAP-00968"},"M21-GAP-00968":{"line":4223,"offset":745354,"length":172,"previous":"M21-GAP-00967","next":"M21-GAP-00969"},"M21-GAP-00969":{"line":4224,"offset":745526,"length":171,"previous":"M21-GAP-00968","next":"M21-GAP-00970"},"M21-GAP-00970":{"line":4225,"offset":745697,"length":171,"previous":"M21-GAP-00969","next":"M21-GAP-00971"},"M21-GAP-00971":{"line":4226,"offset":745868,"length":171,"previous":"M21-GAP-00970","next":"M21-GAP-00972"},"M21-GAP-00972":{"line":4227,"offset":746039,"length":171,"previous":"M21-GAP-00971","next":"M21-GAP-00973"},"M21-GAP-00973":{"line":4228,"offset":746210,"length":171,"previous":"M21-GAP-00972","next":"M21-GAP-00974"},"M21-GAP-00974":{"line":4229,"offset":746381,"length":173,"previous":"M21-GAP-00973","next":"M21-GAP-00975"},"M21-GAP-00975":{"line":4230,"offset":746554,"length":173,"previous":"M21-GAP-00974","next":"M21-GAP-00976"},"M21-GAP-00976":{"line":4231,"offset":746727,"length":174,"previous":"M21-GAP-00975","next":"M21-GAP-00977"},"M21-GAP-00977":{"line":4232,"offset":746901,"length":174,"previous":"M21-GAP-00976","next":"M21-GAP-00978"},"M21-GAP-00978":{"line":4233,"offset":747075,"length":174,"previous":"M21-GAP-00977","next":"M21-GAP-00979"},"M21-GAP-00979":{"line":4234,"offset":747249,"length":174,"previous":"M21-GAP-00978","next":"M21-GAP-00980"},"M21-GAP-00980":{"line":4235,"offset":747423,"length":174,"previous":"M21-GAP-00979","next":"M21-GAP-00981"},"M21-GAP-00981":{"line":4236,"offset":747597,"length":174,"previous":"M21-GAP-00980","next":"M21-GAP-00982"},"M21-GAP-00982":{"line":4237,"offset":747771,"length":174,"previous":"M21-GAP-00981","next":"M21-GAP-00983"},"M21-GAP-00983":{"line":4238,"offset":747945,"length":173,"previous":"M21-GAP-00982","next":"M21-GAP-00984"},"M21-GAP-00984":{"line":4239,"offset":748118,"length":173,"previous":"M21-GAP-00983","next":"M21-GAP-00985"},"M21-GAP-00985":{"line":4240,"offset":748291,"length":173,"previous":"M21-GAP-00984","next":"M21-GAP-00986"},"M21-GAP-00986":{"line":4241,"offset":748464,"length":173,"previous":"M21-GAP-00985","next":"M21-GAP-00987"},"M21-GAP-00987":{"line":4242,"offset":748637,"length":173,"previous":"M21-GAP-00986","next":"M21-GAP-00988"},"M21-GAP-00988":{"line":4243,"offset":748810,"length":173,"previous":"M21-GAP-00987","next":"M21-GAP-00989"},"M21-GAP-00989":{"line":4244,"offset":748983,"length":173,"previous":"M21-GAP-00988","next":"M21-GAP-00990"},"M21-GAP-00990":{"line":4245,"offset":749156,"length":173,"previous":"M21-GAP-00989","next":"M21-GAP-00991"},"M21-GAP-00991":{"line":4246,"offset":749329,"length":191,"previous":"M21-GAP-00990","next":"M21-GAP-00992"},"M21-GAP-00992":{"line":4247,"offset":749520,"length":191,"previous":"M21-GAP-00991","next":"M21-GAP-00993"},"M21-GAP-00993":{"line":4248,"offset":749711,"length":185,"previous":"M21-GAP-00992","next":"M21-GAP-00994"},"M21-GAP-00994":{"line":4249,"offset":749896,"length":191,"previous":"M21-GAP-00993","next":"M21-GAP-00995"},"M21-GAP-00995":{"line":4250,"offset":750087,"length":187,"previous":"M21-GAP-00994","next":"M21-GAP-00996"},"M21-GAP-00996":{"line":4251,"offset":750274,"length":196,"previous":"M21-GAP-00995","next":"M21-GAP-00997"},"M21-GAP-00997":{"line":4252,"offset":750470,"length":196,"previous":"M21-GAP-00996","next":"M21-GAP-00998"},"M21-GAP-00998":{"line":4253,"offset":750666,"length":197,"previous":"M21-GAP-00997","next":"M21-GAP-00999"},"M21-GAP-00999":{"line":4254,"offset":750863,"length":197,"previous":"M21-GAP-00998","next":"M21-GAP-01000"},"M21-GAP-01000":{"line":4255,"offset":751060,"length":196,"previous":"M21-GAP-00999","next":"M21-GAP-01001"},"M21-GAP-01001":{"line":4256,"offset":751256,"length":196,"previous":"M21-GAP-01000","next":"M21-GAP-01002"},"M21-GAP-01002":{"line":4257,"offset":751452,"length":196,"previous":"M21-GAP-01001","next":"M21-GAP-01003"},"M21-GAP-01003":{"line":4258,"offset":751648,"length":196,"previous":"M21-GAP-01002","next":"M21-GAP-01004"},"M21-GAP-01004":{"line":4259,"offset":751844,"length":196,"previous":"M21-GAP-01003","next":"M21-GAP-01005"},"M21-GAP-01005":{"line":4260,"offset":752040,"length":196,"previous":"M21-GAP-01004","next":"M21-GAP-01006"},"M21-GAP-01006":{"line":4261,"offset":752236,"length":196,"previous":"M21-GAP-01005","next":"M21-GAP-01007"},"M21-GAP-01007":{"line":4262,"offset":752432,"length":196,"previous":"M21-GAP-01006","next":"M21-GAP-01008"},"M21-GAP-01008":{"line":4263,"offset":752628,"length":180,"previous":"M21-GAP-01007","next":"M21-GAP-01009"},"M21-GAP-01009":{"line":4264,"offset":752808,"length":196,"previous":"M21-GAP-01008","next":"M21-GAP-01010"},"M21-GAP-01010":{"line":4265,"offset":753004,"length":196,"previous":"M21-GAP-01009","next":"M21-GAP-01011"},"M21-GAP-01011":{"line":4266,"offset":753200,"length":194,"previous":"M21-GAP-01010","next":"M21-GAP-01012"},"M21-GAP-01012":{"line":4267,"offset":753394,"length":194,"previous":"M21-GAP-01011","next":"M21-GAP-01013"},"M21-GAP-01013":{"line":4268,"offset":753588,"length":197,"previous":"M21-GAP-01012","next":"M21-GAP-01014"},"M21-GAP-01014":{"line":4269,"offset":753785,"length":197,"previous":"M21-GAP-01013","next":"M21-GAP-01015"},"M21-GAP-01015":{"line":4270,"offset":753982,"length":189,"previous":"M21-GAP-01014","next":"M21-GAP-01016"},"M21-GAP-01016":{"line":4271,"offset":754171,"length":189,"previous":"M21-GAP-01015","next":"M21-GAP-01017"},"M21-GAP-01017":{"line":4272,"offset":754360,"length":178,"previous":"M21-GAP-01016","next":"M21-GAP-01018"},"M21-GAP-01018":{"line":4273,"offset":754538,"length":178,"previous":"M21-GAP-01017","next":"M21-GAP-01019"},"M21-GAP-01019":{"line":4274,"offset":754716,"length":178,"previous":"M21-GAP-01018","next":"M21-GAP-01020"},"M21-GAP-01020":{"line":4275,"offset":754894,"length":178,"previous":"M21-GAP-01019","next":"M21-GAP-01021"},"M21-GAP-01021":{"line":4276,"offset":755072,"length":178,"previous":"M21-GAP-01020","next":"M21-GAP-01022"},"M21-GAP-01022":{"line":4277,"offset":755250,"length":178,"previous":"M21-GAP-01021","next":"M21-GAP-01023"},"M21-GAP-01023":{"line":4278,"offset":755428,"length":178,"previous":"M21-GAP-01022","next":"M21-GAP-01024"},"M21-GAP-01024":{"line":4279,"offset":755606,"length":178,"previous":"M21-GAP-01023","next":"M21-GAP-01025"},"M21-GAP-01025":{"line":4280,"offset":755784,"length":178,"previous":"M21-GAP-01024","next":"M21-GAP-01026"},"M21-GAP-01026":{"line":4281,"offset":755962,"length":178,"previous":"M21-GAP-01025","next":"M21-GAP-01027"},"M21-GAP-01027":{"line":4282,"offset":756140,"length":180,"previous":"M21-GAP-01026","next":"M21-GAP-01028"},"M21-GAP-01028":{"line":4283,"offset":756320,"length":183,"previous":"M21-GAP-01027","next":"M21-GAP-01029"},"M21-GAP-01029":{"line":4284,"offset":756503,"length":183,"previous":"M21-GAP-01028","next":"M21-GAP-01030"},"M21-GAP-01030":{"line":4285,"offset":756686,"length":183,"previous":"M21-GAP-01029","next":"M21-GAP-01031"},"M21-GAP-01031":{"line":4286,"offset":756869,"length":183,"previous":"M21-GAP-01030","next":"M21-GAP-01032"},"M21-GAP-01032":{"line":4287,"offset":757052,"length":183,"previous":"M21-GAP-01031","next":"M21-GAP-01033"},"M21-GAP-01033":{"line":4288,"offset":757235,"length":183,"previous":"M21-GAP-01032","next":"M21-GAP-01034"},"M21-GAP-01034":{"line":4289,"offset":757418,"length":188,"previous":"M21-GAP-01033","next":"M21-GAP-01035"},"M21-GAP-01035":{"line":4290,"offset":757606,"length":188,"previous":"M21-GAP-01034","next":"M21-GAP-01036"},"M21-GAP-01036":{"line":4291,"offset":757794,"length":188,"previous":"M21-GAP-01035","next":"M21-GAP-01037"},"M21-GAP-01037":{"line":4292,"offset":757982,"length":188,"previous":"M21-GAP-01036","next":"M21-GAP-01038"},"M21-GAP-01038":{"line":4293,"offset":758170,"length":188,"previous":"M21-GAP-01037","next":"M21-GAP-01039"},"M21-GAP-01039":{"line":4294,"offset":758358,"length":188,"previous":"M21-GAP-01038","next":"M21-GAP-01040"},"M21-GAP-01040":{"line":4295,"offset":758546,"length":188,"previous":"M21-GAP-01039","next":"M21-GAP-01041"},"M21-GAP-01041":{"line":4296,"offset":758734,"length":186,"previous":"M21-GAP-01040","next":"M21-GAP-01042"},"M21-GAP-01042":{"line":4297,"offset":758920,"length":186,"previous":"M21-GAP-01041","next":"M21-GAP-01043"},"M21-GAP-01043":{"line":4298,"offset":759106,"length":186,"previous":"M21-GAP-01042","next":"M21-GAP-01044"},"M21-GAP-01044":{"line":4299,"offset":759292,"length":186,"previous":"M21-GAP-01043","next":"M21-GAP-01045"},"M21-GAP-01045":{"line":4300,"offset":759478,"length":186,"previous":"M21-GAP-01044","next":"M21-GAP-01046"},"M21-GAP-01046":{"line":4301,"offset":759664,"length":186,"previous":"M21-GAP-01045","next":"M21-GAP-01047"},"M21-GAP-01047":{"line":4302,"offset":759850,"length":194,"previous":"M21-GAP-01046","next":"M21-GAP-01048"},"M21-GAP-01048":{"line":4303,"offset":760044,"length":194,"previous":"M21-GAP-01047","next":"M21-GAP-01049"},"M21-GAP-01049":{"line":4304,"offset":760238,"length":194,"previous":"M21-GAP-01048","next":"M21-GAP-01050"},"M21-GAP-01050":{"line":4305,"offset":760432,"length":194,"previous":"M21-GAP-01049","next":"M21-GAP-01051"},"M21-GAP-01051":{"line":4306,"offset":760626,"length":194,"previous":"M21-GAP-01050","next":"M21-GAP-01052"},"M21-GAP-01052":{"line":4307,"offset":760820,"length":194,"previous":"M21-GAP-01051","next":"M21-GAP-01053"},"M21-GAP-01053":{"line":4308,"offset":761014,"length":194,"previous":"M21-GAP-01052","next":"M21-GAP-01054"},"M21-GAP-01054":{"line":4309,"offset":761208,"length":194,"previous":"M21-GAP-01053","next":"M21-GAP-01055"},"M21-GAP-01055":{"line":4310,"offset":761402,"length":194,"previous":"M21-GAP-01054","next":"M21-GAP-01056"},"M21-GAP-01056":{"line":4311,"offset":761596,"length":194,"previous":"M21-GAP-01055","next":"M21-GAP-01057"},"M21-GAP-01057":{"line":4312,"offset":761790,"length":186,"previous":"M21-GAP-01056","next":"M21-GAP-01058"},"M21-GAP-01058":{"line":4313,"offset":761976,"length":186,"previous":"M21-GAP-01057","next":"M21-GAP-01059"},"M21-GAP-01059":{"line":4314,"offset":762162,"length":187,"previous":"M21-GAP-01058","next":"M21-GAP-01060"},"M21-GAP-01060":{"line":4315,"offset":762349,"length":187,"previous":"M21-GAP-01059","next":"M21-GAP-01061"},"M21-GAP-01061":{"line":4316,"offset":762536,"length":187,"previous":"M21-GAP-01060","next":"M21-GAP-01062"},"M21-GAP-01062":{"line":4317,"offset":762723,"length":187,"previous":"M21-GAP-01061","next":"M21-GAP-01063"},"M21-GAP-01063":{"line":4318,"offset":762910,"length":187,"previous":"M21-GAP-01062","next":"M21-GAP-01064"},"M21-GAP-01064":{"line":4319,"offset":763097,"length":187,"previous":"M21-GAP-01063","next":"M21-GAP-01065"},"M21-GAP-01065":{"line":4320,"offset":763284,"length":187,"previous":"M21-GAP-01064","next":"M21-GAP-01066"},"M21-GAP-01066":{"line":4321,"offset":763471,"length":187,"previous":"M21-GAP-01065","next":"M21-GAP-01067"},"M21-GAP-01067":{"line":4322,"offset":763658,"length":187,"previous":"M21-GAP-01066","next":"M21-GAP-01068"},"M21-GAP-01068":{"line":4323,"offset":763845,"length":187,"previous":"M21-GAP-01067","next":"M21-GAP-01069"},"M21-GAP-01069":{"line":4324,"offset":764032,"length":186,"previous":"M21-GAP-01068","next":"M21-GAP-01070"},"M21-GAP-01070":{"line":4325,"offset":764218,"length":187,"previous":"M21-GAP-01069","next":"M21-GAP-01071"},"M21-GAP-01071":{"line":4326,"offset":764405,"length":187,"previous":"M21-GAP-01070","next":"M21-GAP-01072"},"M21-GAP-01072":{"line":4327,"offset":764592,"length":187,"previous":"M21-GAP-01071","next":"M21-GAP-01073"},"M21-GAP-01073":{"line":4328,"offset":764779,"length":187,"previous":"M21-GAP-01072","next":"M21-GAP-01074"},"M21-GAP-01074":{"line":4329,"offset":764966,"length":187,"previous":"M21-GAP-01073","next":"M21-GAP-01075"},"M21-GAP-01075":{"line":4330,"offset":765153,"length":187,"previous":"M21-GAP-01074","next":"M21-GAP-01076"},"M21-GAP-01076":{"line":4331,"offset":765340,"length":187,"previous":"M21-GAP-01075","next":"M21-GAP-01077"},"M21-GAP-01077":{"line":4332,"offset":765527,"length":187,"previous":"M21-GAP-01076","next":"M21-GAP-01078"},"M21-GAP-01078":{"line":4333,"offset":765714,"length":187,"previous":"M21-GAP-01077","next":"M21-GAP-01079"},"M21-GAP-01079":{"line":4334,"offset":765901,"length":187,"previous":"M21-GAP-01078","next":"M21-GAP-01080"},"M21-GAP-01080":{"line":4335,"offset":766088,"length":186,"previous":"M21-GAP-01079","next":"M21-GAP-01081"},"M21-GAP-01081":{"line":4336,"offset":766274,"length":187,"previous":"M21-GAP-01080","next":"M21-GAP-01082"},"M21-GAP-01082":{"line":4337,"offset":766461,"length":187,"previous":"M21-GAP-01081","next":"M21-GAP-01083"},"M21-GAP-01083":{"line":4338,"offset":766648,"length":187,"previous":"M21-GAP-01082","next":"M21-GAP-01084"},"M21-GAP-01084":{"line":4339,"offset":766835,"length":187,"previous":"M21-GAP-01083","next":"M21-GAP-01085"},"M21-GAP-01085":{"line":4340,"offset":767022,"length":187,"previous":"M21-GAP-01084","next":"M21-GAP-01086"},"M21-GAP-01086":{"line":4341,"offset":767209,"length":187,"previous":"M21-GAP-01085","next":"M21-GAP-01087"},"M21-GAP-01087":{"line":4342,"offset":767396,"length":187,"previous":"M21-GAP-01086","next":"M21-GAP-01088"},"M21-GAP-01088":{"line":4343,"offset":767583,"length":187,"previous":"M21-GAP-01087","next":"M21-GAP-01089"},"M21-GAP-01089":{"line":4344,"offset":767770,"length":187,"previous":"M21-GAP-01088","next":"M21-GAP-01090"},"M21-GAP-01090":{"line":4345,"offset":767957,"length":187,"previous":"M21-GAP-01089","next":"M21-GAP-01091"},"M21-GAP-01091":{"line":4346,"offset":768144,"length":186,"previous":"M21-GAP-01090","next":"M21-GAP-01092"},"M21-GAP-01092":{"line":4347,"offset":768330,"length":187,"previous":"M21-GAP-01091","next":"M21-GAP-01093"},"M21-GAP-01093":{"line":4348,"offset":768517,"length":187,"previous":"M21-GAP-01092","next":"M21-GAP-01094"},"M21-GAP-01094":{"line":4349,"offset":768704,"length":187,"previous":"M21-GAP-01093","next":"M21-GAP-01095"},"M21-GAP-01095":{"line":4350,"offset":768891,"length":187,"previous":"M21-GAP-01094","next":"M21-GAP-01096"},"M21-GAP-01096":{"line":4351,"offset":769078,"length":187,"previous":"M21-GAP-01095","next":"M21-GAP-01097"},"M21-GAP-01097":{"line":4352,"offset":769265,"length":187,"previous":"M21-GAP-01096","next":"M21-GAP-01098"},"M21-GAP-01098":{"line":4353,"offset":769452,"length":187,"previous":"M21-GAP-01097","next":"M21-GAP-01099"},"M21-GAP-01099":{"line":4354,"offset":769639,"length":187,"previous":"M21-GAP-01098","next":"M21-GAP-01100"},"M21-GAP-01100":{"line":4355,"offset":769826,"length":187,"previous":"M21-GAP-01099","next":"M21-GAP-01101"},"M21-GAP-01101":{"line":4356,"offset":770013,"length":187,"previous":"M21-GAP-01100","next":"M21-GAP-01102"},"M21-GAP-01102":{"line":4357,"offset":770200,"length":186,"previous":"M21-GAP-01101","next":"M21-GAP-01103"},"M21-GAP-01103":{"line":4358,"offset":770386,"length":187,"previous":"M21-GAP-01102","next":"M21-GAP-01104"},"M21-GAP-01104":{"line":4359,"offset":770573,"length":187,"previous":"M21-GAP-01103","next":"M21-GAP-01105"},"M21-GAP-01105":{"line":4360,"offset":770760,"length":187,"previous":"M21-GAP-01104","next":"M21-GAP-01106"},"M21-GAP-01106":{"line":4361,"offset":770947,"length":187,"previous":"M21-GAP-01105","next":"M21-GAP-01107"},"M21-GAP-01107":{"line":4362,"offset":771134,"length":187,"previous":"M21-GAP-01106","next":"M21-GAP-01108"},"M21-GAP-01108":{"line":4363,"offset":771321,"length":187,"previous":"M21-GAP-01107","next":"M21-GAP-01109"},"M21-GAP-01109":{"line":4364,"offset":771508,"length":187,"previous":"M21-GAP-01108","next":"M21-GAP-01110"},"M21-GAP-01110":{"line":4365,"offset":771695,"length":187,"previous":"M21-GAP-01109","next":"M21-GAP-01111"},"M21-GAP-01111":{"line":4366,"offset":771882,"length":187,"previous":"M21-GAP-01110","next":"M21-GAP-01112"},"M21-GAP-01112":{"line":4367,"offset":772069,"length":187,"previous":"M21-GAP-01111","next":"M21-GAP-01113"},"M21-GAP-01113":{"line":4368,"offset":772256,"length":186,"previous":"M21-GAP-01112","next":"M21-GAP-01114"},"M21-GAP-01114":{"line":4369,"offset":772442,"length":187,"previous":"M21-GAP-01113","next":"M21-GAP-01115"},"M21-GAP-01115":{"line":4370,"offset":772629,"length":187,"previous":"M21-GAP-01114","next":"M21-GAP-01116"},"M21-GAP-01116":{"line":4371,"offset":772816,"length":187,"previous":"M21-GAP-01115","next":"M21-GAP-01117"},"M21-GAP-01117":{"line":4372,"offset":773003,"length":187,"previous":"M21-GAP-01116","next":"M21-GAP-01118"},"M21-GAP-01118":{"line":4373,"offset":773190,"length":187,"previous":"M21-GAP-01117","next":"M21-GAP-01119"},"M21-GAP-01119":{"line":4374,"offset":773377,"length":187,"previous":"M21-GAP-01118","next":"M21-GAP-01120"},"M21-GAP-01120":{"line":4375,"offset":773564,"length":187,"previous":"M21-GAP-01119","next":"M21-GAP-01121"},"M21-GAP-01121":{"line":4376,"offset":773751,"length":187,"previous":"M21-GAP-01120","next":"M21-GAP-01122"},"M21-GAP-01122":{"line":4377,"offset":773938,"length":187,"previous":"M21-GAP-01121","next":"M21-GAP-01123"},"M21-GAP-01123":{"line":4378,"offset":774125,"length":187,"previous":"M21-GAP-01122","next":"M21-GAP-01124"},"M21-GAP-01124":{"line":4379,"offset":774312,"length":186,"previous":"M21-GAP-01123","next":"M21-GAP-01125"},"M21-GAP-01125":{"line":4380,"offset":774498,"length":187,"previous":"M21-GAP-01124","next":"M21-GAP-01126"},"M21-GAP-01126":{"line":4381,"offset":774685,"length":186,"previous":"M21-GAP-01125","next":"M21-GAP-01127"},"M21-GAP-01127":{"line":4382,"offset":774871,"length":186,"previous":"M21-GAP-01126","next":"M21-GAP-01128"},"M21-GAP-01128":{"line":4383,"offset":775057,"length":193,"previous":"M21-GAP-01127","next":"M21-GAP-01129"},"M21-GAP-01129":{"line":4384,"offset":775250,"length":193,"previous":"M21-GAP-01128","next":"M21-GAP-01130"},"M21-GAP-01130":{"line":4385,"offset":775443,"length":193,"previous":"M21-GAP-01129","next":"M21-GAP-01131"},"M21-GAP-01131":{"line":4386,"offset":775636,"length":193,"previous":"M21-GAP-01130","next":"M21-GAP-01132"},"M21-GAP-01132":{"line":4387,"offset":775829,"length":193,"previous":"M21-GAP-01131","next":"M21-GAP-01133"},"M21-GAP-01133":{"line":4388,"offset":776022,"length":193,"previous":"M21-GAP-01132","next":"M21-GAP-01134"},"M21-GAP-01134":{"line":4389,"offset":776215,"length":190,"previous":"M21-GAP-01133","next":"M21-GAP-01135"},"M21-GAP-01135":{"line":4390,"offset":776405,"length":190,"previous":"M21-GAP-01134","next":"M21-GAP-01136"},"M21-GAP-01136":{"line":4391,"offset":776595,"length":191,"previous":"M21-GAP-01135","next":"M21-GAP-01137"},"M21-GAP-01137":{"line":4392,"offset":776786,"length":191,"previous":"M21-GAP-01136","next":"M21-GAP-01138"},"M21-GAP-01138":{"line":4393,"offset":776977,"length":191,"previous":"M21-GAP-01137","next":"M21-GAP-01139"},"M21-GAP-01139":{"line":4394,"offset":777168,"length":191,"previous":"M21-GAP-01138","next":"M21-GAP-01140"},"M21-GAP-01140":{"line":4395,"offset":777359,"length":191,"previous":"M21-GAP-01139","next":"M21-GAP-01141"},"M21-GAP-01141":{"line":4396,"offset":777550,"length":191,"previous":"M21-GAP-01140","next":"M21-GAP-01142"},"M21-GAP-01142":{"line":4397,"offset":777741,"length":191,"previous":"M21-GAP-01141","next":"M21-GAP-01143"},"M21-GAP-01143":{"line":4398,"offset":777932,"length":191,"previous":"M21-GAP-01142","next":"M21-GAP-01144"},"M21-GAP-01144":{"line":4399,"offset":778123,"length":191,"previous":"M21-GAP-01143","next":"M21-GAP-01145"},"M21-GAP-01145":{"line":4400,"offset":778314,"length":191,"previous":"M21-GAP-01144","next":"M21-GAP-01146"},"M21-GAP-01146":{"line":4401,"offset":778505,"length":190,"previous":"M21-GAP-01145","next":"M21-GAP-01147"},"M21-GAP-01147":{"line":4402,"offset":778695,"length":191,"previous":"M21-GAP-01146","next":"M21-GAP-01148"},"M21-GAP-01148":{"line":4403,"offset":778886,"length":191,"previous":"M21-GAP-01147","next":"M21-GAP-01149"},"M21-GAP-01149":{"line":4404,"offset":779077,"length":190,"previous":"M21-GAP-01148","next":"M21-GAP-01150"},"M21-GAP-01150":{"line":4405,"offset":779267,"length":190,"previous":"M21-GAP-01149","next":"M21-GAP-01151"},"M21-GAP-01151":{"line":4406,"offset":779457,"length":190,"previous":"M21-GAP-01150","next":"M21-GAP-01152"},"M21-GAP-01152":{"line":4407,"offset":779647,"length":190,"previous":"M21-GAP-01151","next":"M21-GAP-01153"},"M21-GAP-01153":{"line":4408,"offset":779837,"length":190,"previous":"M21-GAP-01152","next":"M21-GAP-01154"},"M21-GAP-01154":{"line":4409,"offset":780027,"length":190,"previous":"M21-GAP-01153","next":"M21-GAP-01155"},"M21-GAP-01155":{"line":4410,"offset":780217,"length":190,"previous":"M21-GAP-01154","next":"M21-GAP-01156"},"M21-GAP-01156":{"line":4411,"offset":780407,"length":190,"previous":"M21-GAP-01155","next":"M21-GAP-01157"},"M21-GAP-01157":{"line":4412,"offset":780597,"length":190,"previous":"M21-GAP-01156","next":"M21-GAP-01158"},"M21-GAP-01158":{"line":4413,"offset":780787,"length":191,"previous":"M21-GAP-01157","next":"M21-GAP-01159"},"M21-GAP-01159":{"line":4414,"offset":780978,"length":191,"previous":"M21-GAP-01158","next":"M21-GAP-01160"},"M21-GAP-01160":{"line":4415,"offset":781169,"length":191,"previous":"M21-GAP-01159","next":"M21-GAP-01161"},"M21-GAP-01161":{"line":4416,"offset":781360,"length":191,"previous":"M21-GAP-01160","next":"M21-GAP-01162"},"M21-GAP-01162":{"line":4417,"offset":781551,"length":191,"previous":"M21-GAP-01161","next":"M21-GAP-01163"},"M21-GAP-01163":{"line":4418,"offset":781742,"length":191,"previous":"M21-GAP-01162","next":"M21-GAP-01164"},"M21-GAP-01164":{"line":4419,"offset":781933,"length":191,"previous":"M21-GAP-01163","next":"M21-GAP-01165"},"M21-GAP-01165":{"line":4420,"offset":782124,"length":191,"previous":"M21-GAP-01164","next":"M21-GAP-01166"},"M21-GAP-01166":{"line":4421,"offset":782315,"length":191,"previous":"M21-GAP-01165","next":"M21-GAP-01167"},"M21-GAP-01167":{"line":4422,"offset":782506,"length":191,"previous":"M21-GAP-01166","next":"M21-GAP-01168"},"M21-GAP-01168":{"line":4423,"offset":782697,"length":190,"previous":"M21-GAP-01167","next":"M21-GAP-01169"},"M21-GAP-01169":{"line":4424,"offset":782887,"length":191,"previous":"M21-GAP-01168","next":"M21-GAP-01170"},"M21-GAP-01170":{"line":4425,"offset":783078,"length":191,"previous":"M21-GAP-01169","next":"M21-GAP-01171"},"M21-GAP-01171":{"line":4426,"offset":783269,"length":191,"previous":"M21-GAP-01170","next":"M21-GAP-01172"},"M21-GAP-01172":{"line":4427,"offset":783460,"length":191,"previous":"M21-GAP-01171","next":"M21-GAP-01173"},"M21-GAP-01173":{"line":4428,"offset":783651,"length":191,"previous":"M21-GAP-01172","next":"M21-GAP-01174"},"M21-GAP-01174":{"line":4429,"offset":783842,"length":191,"previous":"M21-GAP-01173","next":"M21-GAP-01175"},"M21-GAP-01175":{"line":4430,"offset":784033,"length":191,"previous":"M21-GAP-01174","next":"M21-GAP-01176"},"M21-GAP-01176":{"line":4431,"offset":784224,"length":191,"previous":"M21-GAP-01175","next":"M21-GAP-01177"},"M21-GAP-01177":{"line":4432,"offset":784415,"length":191,"previous":"M21-GAP-01176","next":"M21-GAP-01178"},"M21-GAP-01178":{"line":4433,"offset":784606,"length":191,"previous":"M21-GAP-01177","next":"M21-GAP-01179"},"M21-GAP-01179":{"line":4434,"offset":784797,"length":190,"previous":"M21-GAP-01178","next":"M21-GAP-01180"},"M21-GAP-01180":{"line":4435,"offset":784987,"length":191,"previous":"M21-GAP-01179","next":"M21-GAP-01181"},"M21-GAP-01181":{"line":4436,"offset":785178,"length":191,"previous":"M21-GAP-01180","next":"M21-GAP-01182"},"M21-GAP-01182":{"line":4437,"offset":785369,"length":191,"previous":"M21-GAP-01181","next":"M21-GAP-01183"},"M21-GAP-01183":{"line":4438,"offset":785560,"length":191,"previous":"M21-GAP-01182","next":"M21-GAP-01184"},"M21-GAP-01184":{"line":4439,"offset":785751,"length":191,"previous":"M21-GAP-01183","next":"M21-GAP-01185"},"M21-GAP-01185":{"line":4440,"offset":785942,"length":191,"previous":"M21-GAP-01184","next":"M21-GAP-01186"},"M21-GAP-01186":{"line":4441,"offset":786133,"length":191,"previous":"M21-GAP-01185","next":"M21-GAP-01187"},"M21-GAP-01187":{"line":4442,"offset":786324,"length":191,"previous":"M21-GAP-01186","next":"M21-GAP-01188"},"M21-GAP-01188":{"line":4443,"offset":786515,"length":191,"previous":"M21-GAP-01187","next":"M21-GAP-01189"},"M21-GAP-01189":{"line":4444,"offset":786706,"length":191,"previous":"M21-GAP-01188","next":"M21-GAP-01190"},"M21-GAP-01190":{"line":4445,"offset":786897,"length":190,"previous":"M21-GAP-01189","next":"M21-GAP-01191"},"M21-GAP-01191":{"line":4446,"offset":787087,"length":191,"previous":"M21-GAP-01190","next":"M21-GAP-01192"},"M21-GAP-01192":{"line":4447,"offset":787278,"length":191,"previous":"M21-GAP-01191","next":"M21-GAP-01193"},"M21-GAP-01193":{"line":4448,"offset":787469,"length":191,"previous":"M21-GAP-01192","next":"M21-GAP-01194"},"M21-GAP-01194":{"line":4449,"offset":787660,"length":191,"previous":"M21-GAP-01193","next":"M21-GAP-01195"},"M21-GAP-01195":{"line":4450,"offset":787851,"length":191,"previous":"M21-GAP-01194","next":"M21-GAP-01196"},"M21-GAP-01196":{"line":4451,"offset":788042,"length":191,"previous":"M21-GAP-01195","next":"M21-GAP-01197"},"M21-GAP-01197":{"line":4452,"offset":788233,"length":191,"previous":"M21-GAP-01196","next":"M21-GAP-01198"},"M21-GAP-01198":{"line":4453,"offset":788424,"length":191,"previous":"M21-GAP-01197","next":"M21-GAP-01199"},"M21-GAP-01199":{"line":4454,"offset":788615,"length":191,"previous":"M21-GAP-01198","next":"M21-GAP-01200"},"M21-GAP-01200":{"line":4455,"offset":788806,"length":191,"previous":"M21-GAP-01199","next":"M21-GAP-01201"},"M21-GAP-01201":{"line":4456,"offset":788997,"length":190,"previous":"M21-GAP-01200","next":"M21-GAP-01202"},"M21-GAP-01202":{"line":4457,"offset":789187,"length":191,"previous":"M21-GAP-01201","next":"M21-GAP-01203"},"M21-GAP-01203":{"line":4458,"offset":789378,"length":191,"previous":"M21-GAP-01202","next":"M21-GAP-01204"},"M21-GAP-01204":{"line":4459,"offset":789569,"length":191,"previous":"M21-GAP-01203","next":"M21-GAP-01205"},"M21-GAP-01205":{"line":4460,"offset":789760,"length":191,"previous":"M21-GAP-01204","next":"M21-GAP-01206"},"M21-GAP-01206":{"line":4461,"offset":789951,"length":191,"previous":"M21-GAP-01205","next":"M21-GAP-01207"},"M21-GAP-01207":{"line":4462,"offset":790142,"length":191,"previous":"M21-GAP-01206","next":"M21-GAP-01208"},"M21-GAP-01208":{"line":4463,"offset":790333,"length":191,"previous":"M21-GAP-01207","next":"M21-GAP-01209"},"M21-GAP-01209":{"line":4464,"offset":790524,"length":190,"previous":"M21-GAP-01208","next":"M21-GAP-01210"},"M21-GAP-01210":{"line":4465,"offset":790714,"length":190,"previous":"M21-GAP-01209","next":"M21-GAP-01211"},"M21-GAP-01211":{"line":4466,"offset":790904,"length":190,"previous":"M21-GAP-01210","next":"M21-GAP-01212"},"M21-GAP-01212":{"line":4467,"offset":791094,"length":190,"previous":"M21-GAP-01211","next":"M21-GAP-01213"},"M21-GAP-01213":{"line":4468,"offset":791284,"length":190,"previous":"M21-GAP-01212","next":"M21-GAP-01214"},"M21-GAP-01214":{"line":4469,"offset":791474,"length":190,"previous":"M21-GAP-01213","next":"M21-GAP-01215"},"M21-GAP-01215":{"line":4470,"offset":791664,"length":190,"previous":"M21-GAP-01214","next":"M21-GAP-01216"},"M21-GAP-01216":{"line":4471,"offset":791854,"length":192,"previous":"M21-GAP-01215","next":"M21-GAP-01217"},"M21-GAP-01217":{"line":4472,"offset":792046,"length":192,"previous":"M21-GAP-01216","next":"M21-GAP-01218"},"M21-GAP-01218":{"line":4473,"offset":792238,"length":193,"previous":"M21-GAP-01217","next":"M21-GAP-01219"},"M21-GAP-01219":{"line":4474,"offset":792431,"length":193,"previous":"M21-GAP-01218","next":"M21-GAP-01220"},"M21-GAP-01220":{"line":4475,"offset":792624,"length":193,"previous":"M21-GAP-01219","next":"M21-GAP-01221"},"M21-GAP-01221":{"line":4476,"offset":792817,"length":193,"previous":"M21-GAP-01220","next":"M21-GAP-01222"},"M21-GAP-01222":{"line":4477,"offset":793010,"length":193,"previous":"M21-GAP-01221","next":"M21-GAP-01223"},"M21-GAP-01223":{"line":4478,"offset":793203,"length":193,"previous":"M21-GAP-01222","next":"M21-GAP-01224"},"M21-GAP-01224":{"line":4479,"offset":793396,"length":193,"previous":"M21-GAP-01223","next":"M21-GAP-01225"},"M21-GAP-01225":{"line":4480,"offset":793589,"length":193,"previous":"M21-GAP-01224","next":"M21-GAP-01226"},"M21-GAP-01226":{"line":4481,"offset":793782,"length":193,"previous":"M21-GAP-01225","next":"M21-GAP-01227"},"M21-GAP-01227":{"line":4482,"offset":793975,"length":193,"previous":"M21-GAP-01226","next":"M21-GAP-01228"},"M21-GAP-01228":{"line":4483,"offset":794168,"length":192,"previous":"M21-GAP-01227","next":"M21-GAP-01229"},"M21-GAP-01229":{"line":4484,"offset":794360,"length":193,"previous":"M21-GAP-01228","next":"M21-GAP-01230"},"M21-GAP-01230":{"line":4485,"offset":794553,"length":193,"previous":"M21-GAP-01229","next":"M21-GAP-01231"},"M21-GAP-01231":{"line":4486,"offset":794746,"length":193,"previous":"M21-GAP-01230","next":"M21-GAP-01232"},"M21-GAP-01232":{"line":4487,"offset":794939,"length":193,"previous":"M21-GAP-01231","next":"M21-GAP-01233"},"M21-GAP-01233":{"line":4488,"offset":795132,"length":193,"previous":"M21-GAP-01232","next":"M21-GAP-01234"},"M21-GAP-01234":{"line":4489,"offset":795325,"length":193,"previous":"M21-GAP-01233","next":"M21-GAP-01235"},"M21-GAP-01235":{"line":4490,"offset":795518,"length":193,"previous":"M21-GAP-01234","next":"M21-GAP-01236"},"M21-GAP-01236":{"line":4491,"offset":795711,"length":192,"previous":"M21-GAP-01235","next":"M21-GAP-01237"},"M21-GAP-01237":{"line":4492,"offset":795903,"length":192,"previous":"M21-GAP-01236","next":"M21-GAP-01238"},"M21-GAP-01238":{"line":4493,"offset":796095,"length":192,"previous":"M21-GAP-01237","next":"M21-GAP-01239"},"M21-GAP-01239":{"line":4494,"offset":796287,"length":192,"previous":"M21-GAP-01238","next":"M21-GAP-01240"},"M21-GAP-01240":{"line":4495,"offset":796479,"length":192,"previous":"M21-GAP-01239","next":"M21-GAP-01241"},"M21-GAP-01241":{"line":4496,"offset":796671,"length":192,"previous":"M21-GAP-01240","next":"M21-GAP-01242"},"M21-GAP-01242":{"line":4497,"offset":796863,"length":192,"previous":"M21-GAP-01241","next":"M21-GAP-01243"},"M21-GAP-01243":{"line":4498,"offset":797055,"length":190,"previous":"M21-GAP-01242","next":"M21-GAP-01244"},"M21-GAP-01244":{"line":4499,"offset":797245,"length":190,"previous":"M21-GAP-01243","next":"M21-GAP-01245"},"M21-GAP-01245":{"line":4500,"offset":797435,"length":190,"previous":"M21-GAP-01244","next":"M21-GAP-01246"},"M21-GAP-01246":{"line":4501,"offset":797625,"length":190,"previous":"M21-GAP-01245","next":"M21-GAP-01247"},"M21-GAP-01247":{"line":4502,"offset":797815,"length":190,"previous":"M21-GAP-01246","next":"M21-GAP-01248"},"M21-GAP-01248":{"line":4503,"offset":798005,"length":190,"previous":"M21-GAP-01247","next":"M21-GAP-01249"},"M21-GAP-01249":{"line":4504,"offset":798195,"length":190,"previous":"M21-GAP-01248","next":"M21-GAP-01250"},"M21-GAP-01250":{"line":4505,"offset":798385,"length":190,"previous":"M21-GAP-01249","next":"M21-GAP-01251"},"M21-GAP-01251":{"line":4506,"offset":798575,"length":190,"previous":"M21-GAP-01250","next":"M21-GAP-01252"},"M21-GAP-01252":{"line":4507,"offset":798765,"length":190,"previous":"M21-GAP-01251","next":"M21-GAP-01253"},"M21-GAP-01253":{"line":4508,"offset":798955,"length":193,"previous":"M21-GAP-01252","next":"M21-GAP-01254"},"M21-GAP-01254":{"line":4509,"offset":799148,"length":193,"previous":"M21-GAP-01253","next":"M21-GAP-01255"},"M21-GAP-01255":{"line":4510,"offset":799341,"length":194,"previous":"M21-GAP-01254","next":"M21-GAP-01256"},"M21-GAP-01256":{"line":4511,"offset":799535,"length":194,"previous":"M21-GAP-01255","next":"M21-GAP-01257"},"M21-GAP-01257":{"line":4512,"offset":799729,"length":194,"previous":"M21-GAP-01256","next":"M21-GAP-01258"},"M21-GAP-01258":{"line":4513,"offset":799923,"length":194,"previous":"M21-GAP-01257","next":"M21-GAP-01259"},"M21-GAP-01259":{"line":4514,"offset":800117,"length":194,"previous":"M21-GAP-01258","next":"M21-GAP-01260"},"M21-GAP-01260":{"line":4515,"offset":800311,"length":194,"previous":"M21-GAP-01259","next":"M21-GAP-01261"},"M21-GAP-01261":{"line":4516,"offset":800505,"length":194,"previous":"M21-GAP-01260","next":"M21-GAP-01262"},"M21-GAP-01262":{"line":4517,"offset":800699,"length":194,"previous":"M21-GAP-01261","next":"M21-GAP-01263"},"M21-GAP-01263":{"line":4518,"offset":800893,"length":194,"previous":"M21-GAP-01262","next":"M21-GAP-01264"},"M21-GAP-01264":{"line":4519,"offset":801087,"length":194,"previous":"M21-GAP-01263","next":"M21-GAP-01265"},"M21-GAP-01265":{"line":4520,"offset":801281,"length":193,"previous":"M21-GAP-01264","next":"M21-GAP-01266"},"M21-GAP-01266":{"line":4521,"offset":801474,"length":194,"previous":"M21-GAP-01265","next":"M21-GAP-01267"},"M21-GAP-01267":{"line":4522,"offset":801668,"length":194,"previous":"M21-GAP-01266","next":"M21-GAP-01268"},"M21-GAP-01268":{"line":4523,"offset":801862,"length":193,"previous":"M21-GAP-01267","next":"M21-GAP-01269"},"M21-GAP-01269":{"line":4524,"offset":802055,"length":193,"previous":"M21-GAP-01268","next":"M21-GAP-01270"},"M21-GAP-01270":{"line":4525,"offset":802248,"length":193,"previous":"M21-GAP-01269","next":"M21-GAP-01271"},"M21-GAP-01271":{"line":4526,"offset":802441,"length":193,"previous":"M21-GAP-01270","next":"M21-GAP-01272"},"M21-GAP-01272":{"line":4527,"offset":802634,"length":193,"previous":"M21-GAP-01271","next":"M21-GAP-01273"},"M21-GAP-01273":{"line":4528,"offset":802827,"length":193,"previous":"M21-GAP-01272","next":"M21-GAP-01274"},"M21-GAP-01274":{"line":4529,"offset":803020,"length":193,"previous":"M21-GAP-01273","next":"M21-GAP-01275"},"M21-GAP-01275":{"line":4530,"offset":803213,"length":193,"previous":"M21-GAP-01274","next":"M21-GAP-01276"},"M21-GAP-01276":{"line":4531,"offset":803406,"length":193,"previous":"M21-GAP-01275","next":"M21-GAP-01277"},"M21-GAP-01277":{"line":4532,"offset":803599,"length":194,"previous":"M21-GAP-01276","next":"M21-GAP-01278"},"M21-GAP-01278":{"line":4533,"offset":803793,"length":194,"previous":"M21-GAP-01277","next":"M21-GAP-01279"},"M21-GAP-01279":{"line":4534,"offset":803987,"length":194,"previous":"M21-GAP-01278","next":"M21-GAP-01280"},"M21-GAP-01280":{"line":4535,"offset":804181,"length":194,"previous":"M21-GAP-01279","next":"M21-GAP-01281"},"M21-GAP-01281":{"line":4536,"offset":804375,"length":194,"previous":"M21-GAP-01280","next":"M21-GAP-01282"},"M21-GAP-01282":{"line":4537,"offset":804569,"length":194,"previous":"M21-GAP-01281","next":"M21-GAP-01283"},"M21-GAP-01283":{"line":4538,"offset":804763,"length":194,"previous":"M21-GAP-01282","next":"M21-GAP-01284"},"M21-GAP-01284":{"line":4539,"offset":804957,"length":194,"previous":"M21-GAP-01283","next":"M21-GAP-01285"},"M21-GAP-01285":{"line":4540,"offset":805151,"length":194,"previous":"M21-GAP-01284","next":"M21-GAP-01286"},"M21-GAP-01286":{"line":4541,"offset":805345,"length":194,"previous":"M21-GAP-01285","next":"M21-GAP-01287"},"M21-GAP-01287":{"line":4542,"offset":805539,"length":193,"previous":"M21-GAP-01286","next":"M21-GAP-01288"},"M21-GAP-01288":{"line":4543,"offset":805732,"length":194,"previous":"M21-GAP-01287","next":"M21-GAP-01289"},"M21-GAP-01289":{"line":4544,"offset":805926,"length":194,"previous":"M21-GAP-01288","next":"M21-GAP-01290"},"M21-GAP-01290":{"line":4545,"offset":806120,"length":194,"previous":"M21-GAP-01289","next":"M21-GAP-01291"},"M21-GAP-01291":{"line":4546,"offset":806314,"length":194,"previous":"M21-GAP-01290","next":"M21-GAP-01292"},"M21-GAP-01292":{"line":4547,"offset":806508,"length":194,"previous":"M21-GAP-01291","next":"M21-GAP-01293"},"M21-GAP-01293":{"line":4548,"offset":806702,"length":194,"previous":"M21-GAP-01292","next":"M21-GAP-01294"},"M21-GAP-01294":{"line":4549,"offset":806896,"length":193,"previous":"M21-GAP-01293","next":"M21-GAP-01295"},"M21-GAP-01295":{"line":4550,"offset":807089,"length":193,"previous":"M21-GAP-01294","next":"M21-GAP-01296"},"M21-GAP-01296":{"line":4551,"offset":807282,"length":193,"previous":"M21-GAP-01295","next":"M21-GAP-01297"},"M21-GAP-01297":{"line":4552,"offset":807475,"length":193,"previous":"M21-GAP-01296","next":"M21-GAP-01298"},"M21-GAP-01298":{"line":4553,"offset":807668,"length":193,"previous":"M21-GAP-01297","next":"M21-GAP-01299"},"M21-GAP-01299":{"line":4554,"offset":807861,"length":193,"previous":"M21-GAP-01298","next":"M21-GAP-01300"},"M21-GAP-01300":{"line":4555,"offset":808054,"length":193,"previous":"M21-GAP-01299","next":"M21-GAP-01301"},"M21-GAP-01301":{"line":4556,"offset":808247,"length":180,"previous":"M21-GAP-01300","next":"M21-GAP-01302"},"M21-GAP-01302":{"line":4557,"offset":808427,"length":180,"previous":"M21-GAP-01301","next":"M21-GAP-01303"},"M21-GAP-01303":{"line":4558,"offset":808607,"length":180,"previous":"M21-GAP-01302","next":"M21-GAP-01304"},"M21-GAP-01304":{"line":4559,"offset":808787,"length":180,"previous":"M21-GAP-01303","next":"M21-GAP-01305"},"M21-GAP-01305":{"line":4560,"offset":808967,"length":180,"previous":"M21-GAP-01304","next":"M21-GAP-01306"},"M21-GAP-01306":{"line":4561,"offset":809147,"length":202,"previous":"M21-GAP-01305","next":"M21-GAP-01307"},"M21-GAP-01307":{"line":4562,"offset":809349,"length":205,"previous":"M21-GAP-01306","next":"M21-GAP-01308"},"M21-GAP-01308":{"line":4563,"offset":809554,"length":205,"previous":"M21-GAP-01307","next":"M21-GAP-01309"},"M21-GAP-01309":{"line":4564,"offset":809759,"length":205,"previous":"M21-GAP-01308","next":"M21-GAP-01310"},"M21-GAP-01310":{"line":4565,"offset":809964,"length":203,"previous":"M21-GAP-01309","next":"M21-GAP-01311"},"M21-GAP-01311":{"line":4566,"offset":810167,"length":205,"previous":"M21-GAP-01310","next":"M21-GAP-01312"},"M21-GAP-01312":{"line":4567,"offset":810372,"length":204,"previous":"M21-GAP-01311","next":"M21-GAP-01313"},"M21-GAP-01313":{"line":4568,"offset":810576,"length":220,"previous":"M21-GAP-01312","next":"M21-GAP-01314"},"M21-GAP-01314":{"line":4569,"offset":810796,"length":220,"previous":"M21-GAP-01313","next":"M21-GAP-01315"},"M21-GAP-01315":{"line":4570,"offset":811016,"length":220,"previous":"M21-GAP-01314","next":"M21-GAP-01316"},"M21-GAP-01316":{"line":4571,"offset":811236,"length":209,"previous":"M21-GAP-01315","next":"M21-GAP-01317"},"M21-GAP-01317":{"line":4572,"offset":811445,"length":209,"previous":"M21-GAP-01316","next":"M21-GAP-01318"},"M21-GAP-01318":{"line":4573,"offset":811654,"length":209,"previous":"M21-GAP-01317","next":"M21-GAP-01319"},"M21-GAP-01319":{"line":4574,"offset":811863,"length":223,"previous":"M21-GAP-01318","next":"M21-GAP-01320"},"M21-GAP-01320":{"line":4575,"offset":812086,"length":223,"previous":"M21-GAP-01319","next":"M21-GAP-01321"},"M21-GAP-01321":{"line":4576,"offset":812309,"length":223,"previous":"M21-GAP-01320","next":"M21-GAP-01322"},"M21-GAP-01322":{"line":4577,"offset":812532,"length":212,"previous":"M21-GAP-01321","next":"M21-GAP-01323"},"M21-GAP-01323":{"line":4578,"offset":812744,"length":212,"previous":"M21-GAP-01322","next":"M21-GAP-01324"},"M21-GAP-01324":{"line":4579,"offset":812956,"length":212,"previous":"M21-GAP-01323","next":"M21-GAP-01325"},"M21-GAP-01325":{"line":4580,"offset":813168,"length":222,"previous":"M21-GAP-01324","next":"M21-GAP-01326"},"M21-GAP-01326":{"line":4581,"offset":813390,"length":222,"previous":"M21-GAP-01325","next":"M21-GAP-01327"},"M21-GAP-01327":{"line":4582,"offset":813612,"length":222,"previous":"M21-GAP-01326","next":"M21-GAP-01328"},"M21-GAP-01328":{"line":4583,"offset":813834,"length":211,"previous":"M21-GAP-01327","next":"M21-GAP-01329"},"M21-GAP-01329":{"line":4584,"offset":814045,"length":211,"previous":"M21-GAP-01328","next":"M21-GAP-01330"},"M21-GAP-01330":{"line":4585,"offset":814256,"length":211,"previous":"M21-GAP-01329","next":"M21-GAP-01331"},"M21-GAP-01331":{"line":4586,"offset":814467,"length":208,"previous":"M21-GAP-01330","next":"M21-GAP-01332"},"M21-GAP-01332":{"line":4587,"offset":814675,"length":215,"previous":"M21-GAP-01331","next":"M21-GAP-01333"},"M21-GAP-01333":{"line":4588,"offset":814890,"length":215,"previous":"M21-GAP-01332","next":"M21-GAP-01334"},"M21-GAP-01334":{"line":4589,"offset":815105,"length":215,"previous":"M21-GAP-01333","next":"M21-GAP-01335"},"M21-GAP-01335":{"line":4590,"offset":815320,"length":204,"previous":"M21-GAP-01334","next":"M21-GAP-01336"},"M21-GAP-01336":{"line":4591,"offset":815524,"length":204,"previous":"M21-GAP-01335","next":"M21-GAP-01337"},"M21-GAP-01337":{"line":4592,"offset":815728,"length":204,"previous":"M21-GAP-01336","next":"M21-GAP-01338"},"M21-GAP-01338":{"line":4593,"offset":815932,"length":199,"previous":"M21-GAP-01337","next":"M21-GAP-01339"},"M21-GAP-01339":{"line":4594,"offset":816131,"length":203,"previous":"M21-GAP-01338","next":"M21-GAP-01340"},"M21-GAP-01340":{"line":4595,"offset":816334,"length":203,"previous":"M21-GAP-01339","next":"M21-GAP-01341"},"M21-GAP-01341":{"line":4596,"offset":816537,"length":201,"previous":"M21-GAP-01340","next":"M21-GAP-01342"},"M21-GAP-01342":{"line":4597,"offset":816738,"length":201,"previous":"M21-GAP-01341","next":"M21-GAP-01343"},"M21-GAP-01343":{"line":4598,"offset":816939,"length":201,"previous":"M21-GAP-01342","next":"M21-GAP-01344"},"M21-GAP-01344":{"line":4599,"offset":817140,"length":201,"previous":"M21-GAP-01343","next":"M21-GAP-01345"},"M21-GAP-01345":{"line":4600,"offset":817341,"length":201,"previous":"M21-GAP-01344","next":"M21-GAP-01346"},"M21-GAP-01346":{"line":4601,"offset":817542,"length":201,"previous":"M21-GAP-01345","next":"M21-GAP-01347"},"M21-GAP-01347":{"line":4602,"offset":817743,"length":202,"previous":"M21-GAP-01346","next":"M21-GAP-01348"},"M21-GAP-01348":{"line":4603,"offset":817945,"length":202,"previous":"M21-GAP-01347","next":"M21-GAP-01349"},"M21-GAP-01349":{"line":4604,"offset":818147,"length":202,"previous":"M21-GAP-01348","next":"M21-GAP-01350"},"M21-GAP-01350":{"line":4605,"offset":818349,"length":202,"previous":"M21-GAP-01349","next":"M21-GAP-01351"},"M21-GAP-01351":{"line":4606,"offset":818551,"length":202,"previous":"M21-GAP-01350","next":"M21-GAP-01352"},"M21-GAP-01352":{"line":4607,"offset":818753,"length":202,"previous":"M21-GAP-01351","next":"M21-GAP-01353"},"M21-GAP-01353":{"line":4608,"offset":818955,"length":202,"previous":"M21-GAP-01352","next":"M21-GAP-01354"},"M21-GAP-01354":{"line":4609,"offset":819157,"length":202,"previous":"M21-GAP-01353","next":"M21-GAP-01355"},"M21-GAP-01355":{"line":4610,"offset":819359,"length":202,"previous":"M21-GAP-01354","next":"M21-GAP-01356"},"M21-GAP-01356":{"line":4611,"offset":819561,"length":202,"previous":"M21-GAP-01355","next":"M21-GAP-01357"},"M21-GAP-01357":{"line":4612,"offset":819763,"length":207,"previous":"M21-GAP-01356","next":"M21-GAP-01358"},"M21-GAP-01358":{"line":4613,"offset":819970,"length":203,"previous":"M21-GAP-01357","next":"M21-GAP-01359"},"M21-GAP-01359":{"line":4614,"offset":820173,"length":202,"previous":"M21-GAP-01358","next":"M21-GAP-01360"},"M21-GAP-01360":{"line":4615,"offset":820375,"length":218,"previous":"M21-GAP-01359","next":"M21-GAP-01361"},"M21-GAP-01361":{"line":4616,"offset":820593,"length":218,"previous":"M21-GAP-01360","next":"M21-GAP-01362"},"M21-GAP-01362":{"line":4617,"offset":820811,"length":218,"previous":"M21-GAP-01361","next":"M21-GAP-01363"},"M21-GAP-01363":{"line":4618,"offset":821029,"length":207,"previous":"M21-GAP-01362","next":"M21-GAP-01364"},"M21-GAP-01364":{"line":4619,"offset":821236,"length":207,"previous":"M21-GAP-01363","next":"M21-GAP-01365"},"M21-GAP-01365":{"line":4620,"offset":821443,"length":207,"previous":"M21-GAP-01364","next":"M21-GAP-01366"},"M21-GAP-01366":{"line":4621,"offset":821650,"length":221,"previous":"M21-GAP-01365","next":"M21-GAP-01367"},"M21-GAP-01367":{"line":4622,"offset":821871,"length":221,"previous":"M21-GAP-01366","next":"M21-GAP-01368"},"M21-GAP-01368":{"line":4623,"offset":822092,"length":221,"previous":"M21-GAP-01367","next":"M21-GAP-01369"},"M21-GAP-01369":{"line":4624,"offset":822313,"length":210,"previous":"M21-GAP-01368","next":"M21-GAP-01370"},"M21-GAP-01370":{"line":4625,"offset":822523,"length":210,"previous":"M21-GAP-01369","next":"M21-GAP-01371"},"M21-GAP-01371":{"line":4626,"offset":822733,"length":210,"previous":"M21-GAP-01370","next":"M21-GAP-01372"},"M21-GAP-01372":{"line":4627,"offset":822943,"length":220,"previous":"M21-GAP-01371","next":"M21-GAP-01373"},"M21-GAP-01373":{"line":4628,"offset":823163,"length":220,"previous":"M21-GAP-01372","next":"M21-GAP-01374"},"M21-GAP-01374":{"line":4629,"offset":823383,"length":220,"previous":"M21-GAP-01373","next":"M21-GAP-01375"},"M21-GAP-01375":{"line":4630,"offset":823603,"length":209,"previous":"M21-GAP-01374","next":"M21-GAP-01376"},"M21-GAP-01376":{"line":4631,"offset":823812,"length":209,"previous":"M21-GAP-01375","next":"M21-GAP-01377"},"M21-GAP-01377":{"line":4632,"offset":824021,"length":209,"previous":"M21-GAP-01376","next":"M21-GAP-01378"},"M21-GAP-01378":{"line":4633,"offset":824230,"length":213,"previous":"M21-GAP-01377","next":"M21-GAP-01379"},"M21-GAP-01379":{"line":4634,"offset":824443,"length":213,"previous":"M21-GAP-01378","next":"M21-GAP-01380"},"M21-GAP-01380":{"line":4635,"offset":824656,"length":213,"previous":"M21-GAP-01379","next":"M21-GAP-01381"},"M21-GAP-01381":{"line":4636,"offset":824869,"length":202,"previous":"M21-GAP-01380","next":"M21-GAP-01382"},"M21-GAP-01382":{"line":4637,"offset":825071,"length":202,"previous":"M21-GAP-01381","next":"M21-GAP-01383"},"M21-GAP-01383":{"line":4638,"offset":825273,"length":202,"previous":"M21-GAP-01382","next":"M21-GAP-01384"},"M21-GAP-01384":{"line":4639,"offset":825475,"length":187,"previous":"M21-GAP-01383","next":"M21-GAP-01385"},"M21-GAP-01385":{"line":4640,"offset":825662,"length":187,"previous":"M21-GAP-01384","next":"M21-GAP-01386"},"M21-GAP-01386":{"line":4641,"offset":825849,"length":188,"previous":"M21-GAP-01385","next":"M21-GAP-01387"},"M21-GAP-01387":{"line":4642,"offset":826037,"length":187,"previous":"M21-GAP-01386","next":"M21-GAP-01388"},"M21-GAP-01388":{"line":4643,"offset":826224,"length":187,"previous":"M21-GAP-01387","next":"M21-GAP-01389"},"M21-GAP-01389":{"line":4644,"offset":826411,"length":187,"previous":"M21-GAP-01388","next":"M21-GAP-01390"},"M21-GAP-01390":{"line":4645,"offset":826598,"length":187,"previous":"M21-GAP-01389","next":"M21-GAP-01391"},"M21-GAP-01391":{"line":4646,"offset":826785,"length":187,"previous":"M21-GAP-01390","next":"M21-GAP-01392"},"M21-GAP-01392":{"line":4647,"offset":826972,"length":187,"previous":"M21-GAP-01391","next":"M21-GAP-01393"},"M21-GAP-01393":{"line":4648,"offset":827159,"length":187,"previous":"M21-GAP-01392","next":"M21-GAP-01394"},"M21-GAP-01394":{"line":4649,"offset":827346,"length":187,"previous":"M21-GAP-01393","next":"M21-GAP-01395"},"M21-GAP-01395":{"line":4650,"offset":827533,"length":178,"previous":"M21-GAP-01394","next":"M21-GAP-01396"},"M21-GAP-01396":{"line":4651,"offset":827711,"length":178,"previous":"M21-GAP-01395","next":"M21-GAP-01397"},"M21-GAP-01397":{"line":4652,"offset":827889,"length":179,"previous":"M21-GAP-01396","next":"M21-GAP-01398"},"M21-GAP-01398":{"line":4653,"offset":828068,"length":179,"previous":"M21-GAP-01397","next":"M21-GAP-01399"},"M21-GAP-01399":{"line":4654,"offset":828247,"length":179,"previous":"M21-GAP-01398","next":"M21-GAP-01400"},"M21-GAP-01400":{"line":4655,"offset":828426,"length":179,"previous":"M21-GAP-01399","next":"M21-GAP-01401"},"M21-GAP-01401":{"line":4656,"offset":828605,"length":179,"previous":"M21-GAP-01400","next":"M21-GAP-01402"},"M21-GAP-01402":{"line":4657,"offset":828784,"length":179,"previous":"M21-GAP-01401","next":"M21-GAP-01403"},"M21-GAP-01403":{"line":4658,"offset":828963,"length":179,"previous":"M21-GAP-01402","next":"M21-GAP-01404"},"M21-GAP-01404":{"line":4659,"offset":829142,"length":179,"previous":"M21-GAP-01403","next":"M21-GAP-01405"},"M21-GAP-01405":{"line":4660,"offset":829321,"length":179,"previous":"M21-GAP-01404","next":"M21-GAP-01406"},"M21-GAP-01406":{"line":4661,"offset":829500,"length":179,"previous":"M21-GAP-01405","next":"M21-GAP-01407"},"M21-GAP-01407":{"line":4662,"offset":829679,"length":178,"previous":"M21-GAP-01406","next":"M21-GAP-01408"},"M21-GAP-01408":{"line":4663,"offset":829857,"length":179,"previous":"M21-GAP-01407","next":"M21-GAP-01409"},"M21-GAP-01409":{"line":4664,"offset":830036,"length":179,"previous":"M21-GAP-01408","next":"M21-GAP-01410"},"M21-GAP-01410":{"line":4665,"offset":830215,"length":179,"previous":"M21-GAP-01409","next":"M21-GAP-01411"},"M21-GAP-01411":{"line":4666,"offset":830394,"length":179,"previous":"M21-GAP-01410","next":"M21-GAP-01412"},"M21-GAP-01412":{"line":4667,"offset":830573,"length":179,"previous":"M21-GAP-01411","next":"M21-GAP-01413"},"M21-GAP-01413":{"line":4668,"offset":830752,"length":179,"previous":"M21-GAP-01412","next":"M21-GAP-01414"},"M21-GAP-01414":{"line":4669,"offset":830931,"length":178,"previous":"M21-GAP-01413","next":"M21-GAP-01415"},"M21-GAP-01415":{"line":4670,"offset":831109,"length":178,"previous":"M21-GAP-01414","next":"M21-GAP-01416"},"M21-GAP-01416":{"line":4671,"offset":831287,"length":178,"previous":"M21-GAP-01415","next":"M21-GAP-01417"},"M21-GAP-01417":{"line":4672,"offset":831465,"length":178,"previous":"M21-GAP-01416","next":"M21-GAP-01418"},"M21-GAP-01418":{"line":4673,"offset":831643,"length":178,"previous":"M21-GAP-01417","next":"M21-GAP-01419"},"M21-GAP-01419":{"line":4674,"offset":831821,"length":178,"previous":"M21-GAP-01418","next":"M21-GAP-01420"},"M21-GAP-01420":{"line":4675,"offset":831999,"length":178,"previous":"M21-GAP-01419","next":"M21-GAP-01421"},"M21-GAP-01421":{"line":4676,"offset":832177,"length":179,"previous":"M21-GAP-01420","next":"M21-GAP-01422"},"M21-GAP-01422":{"line":4677,"offset":832356,"length":179,"previous":"M21-GAP-01421","next":"M21-GAP-01423"},"M21-GAP-01423":{"line":4678,"offset":832535,"length":180,"previous":"M21-GAP-01422","next":"M21-GAP-01424"},"M21-GAP-01424":{"line":4679,"offset":832715,"length":180,"previous":"M21-GAP-01423","next":"M21-GAP-01425"},"M21-GAP-01425":{"line":4680,"offset":832895,"length":180,"previous":"M21-GAP-01424","next":"M21-GAP-01426"},"M21-GAP-01426":{"line":4681,"offset":833075,"length":180,"previous":"M21-GAP-01425","next":"M21-GAP-01427"},"M21-GAP-01427":{"line":4682,"offset":833255,"length":180,"previous":"M21-GAP-01426","next":"M21-GAP-01428"},"M21-GAP-01428":{"line":4683,"offset":833435,"length":180,"previous":"M21-GAP-01427","next":"M21-GAP-01429"},"M21-GAP-01429":{"line":4684,"offset":833615,"length":180,"previous":"M21-GAP-01428","next":"M21-GAP-01430"},"M21-GAP-01430":{"line":4685,"offset":833795,"length":180,"previous":"M21-GAP-01429","next":"M21-GAP-01431"},"M21-GAP-01431":{"line":4686,"offset":833975,"length":180,"previous":"M21-GAP-01430","next":"M21-GAP-01432"},"M21-GAP-01432":{"line":4687,"offset":834155,"length":180,"previous":"M21-GAP-01431","next":"M21-GAP-01433"},"M21-GAP-01433":{"line":4688,"offset":834335,"length":179,"previous":"M21-GAP-01432","next":"M21-GAP-01434"},"M21-GAP-01434":{"line":4689,"offset":834514,"length":180,"previous":"M21-GAP-01433","next":"M21-GAP-01435"},"M21-GAP-01435":{"line":4690,"offset":834694,"length":180,"previous":"M21-GAP-01434","next":"M21-GAP-01436"},"M21-GAP-01436":{"line":4691,"offset":834874,"length":180,"previous":"M21-GAP-01435","next":"M21-GAP-01437"},"M21-GAP-01437":{"line":4692,"offset":835054,"length":180,"previous":"M21-GAP-01436","next":"M21-GAP-01438"},"M21-GAP-01438":{"line":4693,"offset":835234,"length":180,"previous":"M21-GAP-01437","next":"M21-GAP-01439"},"M21-GAP-01439":{"line":4694,"offset":835414,"length":180,"previous":"M21-GAP-01438","next":"M21-GAP-01440"},"M21-GAP-01440":{"line":4695,"offset":835594,"length":180,"previous":"M21-GAP-01439","next":"M21-GAP-01441"},"M21-GAP-01441":{"line":4696,"offset":835774,"length":180,"previous":"M21-GAP-01440","next":"M21-GAP-01442"},"M21-GAP-01442":{"line":4697,"offset":835954,"length":180,"previous":"M21-GAP-01441","next":"M21-GAP-01443"},"M21-GAP-01443":{"line":4698,"offset":836134,"length":180,"previous":"M21-GAP-01442","next":"M21-GAP-01444"},"M21-GAP-01444":{"line":4699,"offset":836314,"length":179,"previous":"M21-GAP-01443","next":"M21-GAP-01445"},"M21-GAP-01445":{"line":4700,"offset":836493,"length":180,"previous":"M21-GAP-01444","next":"M21-GAP-01446"},"M21-GAP-01446":{"line":4701,"offset":836673,"length":180,"previous":"M21-GAP-01445","next":"M21-GAP-01447"},"M21-GAP-01447":{"line":4702,"offset":836853,"length":180,"previous":"M21-GAP-01446","next":"M21-GAP-01448"},"M21-GAP-01448":{"line":4703,"offset":837033,"length":180,"previous":"M21-GAP-01447","next":"M21-GAP-01449"},"M21-GAP-01449":{"line":4704,"offset":837213,"length":180,"previous":"M21-GAP-01448","next":"M21-GAP-01450"},"M21-GAP-01450":{"line":4705,"offset":837393,"length":180,"previous":"M21-GAP-01449","next":"M21-GAP-01451"},"M21-GAP-01451":{"line":4706,"offset":837573,"length":180,"previous":"M21-GAP-01450","next":"M21-GAP-01452"},"M21-GAP-01452":{"line":4707,"offset":837753,"length":180,"previous":"M21-GAP-01451","next":"M21-GAP-01453"},"M21-GAP-01453":{"line":4708,"offset":837933,"length":180,"previous":"M21-GAP-01452","next":"M21-GAP-01454"},"M21-GAP-01454":{"line":4709,"offset":838113,"length":180,"previous":"M21-GAP-01453","next":"M21-GAP-01455"},"M21-GAP-01455":{"line":4710,"offset":838293,"length":179,"previous":"M21-GAP-01454","next":"M21-GAP-01456"},"M21-GAP-01456":{"line":4711,"offset":838472,"length":180,"previous":"M21-GAP-01455","next":"M21-GAP-01457"},"M21-GAP-01457":{"line":4712,"offset":838652,"length":180,"previous":"M21-GAP-01456","next":"M21-GAP-01458"},"M21-GAP-01458":{"line":4713,"offset":838832,"length":180,"previous":"M21-GAP-01457","next":"M21-GAP-01459"},"M21-GAP-01459":{"line":4714,"offset":839012,"length":180,"previous":"M21-GAP-01458","next":"M21-GAP-01460"},"M21-GAP-01460":{"line":4715,"offset":839192,"length":180,"previous":"M21-GAP-01459","next":"M21-GAP-01461"},"M21-GAP-01461":{"line":4716,"offset":839372,"length":180,"previous":"M21-GAP-01460","next":"M21-GAP-01462"},"M21-GAP-01462":{"line":4717,"offset":839552,"length":180,"previous":"M21-GAP-01461","next":"M21-GAP-01463"},"M21-GAP-01463":{"line":4718,"offset":839732,"length":180,"previous":"M21-GAP-01462","next":"M21-GAP-01464"},"M21-GAP-01464":{"line":4719,"offset":839912,"length":180,"previous":"M21-GAP-01463","next":"M21-GAP-01465"},"M21-GAP-01465":{"line":4720,"offset":840092,"length":180,"previous":"M21-GAP-01464","next":"M21-GAP-01466"},"M21-GAP-01466":{"line":4721,"offset":840272,"length":179,"previous":"M21-GAP-01465","next":"M21-GAP-01467"},"M21-GAP-01467":{"line":4722,"offset":840451,"length":180,"previous":"M21-GAP-01466","next":"M21-GAP-01468"},"M21-GAP-01468":{"line":4723,"offset":840631,"length":179,"previous":"M21-GAP-01467","next":"M21-GAP-01469"},"M21-GAP-01469":{"line":4724,"offset":840810,"length":179,"previous":"M21-GAP-01468","next":"M21-GAP-01470"},"M21-GAP-01470":{"line":4725,"offset":840989,"length":179,"previous":"M21-GAP-01469","next":"M21-GAP-01471"},"M21-GAP-01471":{"line":4726,"offset":841168,"length":179,"previous":"M21-GAP-01470","next":"M21-GAP-01472"},"M21-GAP-01472":{"line":4727,"offset":841347,"length":170,"previous":"M21-GAP-01471","next":"M21-GAP-01473"},"M21-GAP-01473":{"line":4728,"offset":841517,"length":170,"previous":"M21-GAP-01472","next":"M21-GAP-01474"},"M21-GAP-01474":{"line":4729,"offset":841687,"length":171,"previous":"M21-GAP-01473","next":"M21-GAP-01475"},"M21-GAP-01475":{"line":4730,"offset":841858,"length":171,"previous":"M21-GAP-01474","next":"M21-GAP-01476"},"M21-GAP-01476":{"line":4731,"offset":842029,"length":171,"previous":"M21-GAP-01475","next":"M21-GAP-01477"},"M21-GAP-01477":{"line":4732,"offset":842200,"length":171,"previous":"M21-GAP-01476","next":"M21-GAP-01478"},"M21-GAP-01478":{"line":4733,"offset":842371,"length":170,"previous":"M21-GAP-01477","next":"M21-GAP-01479"},"M21-GAP-01479":{"line":4734,"offset":842541,"length":170,"previous":"M21-GAP-01478","next":"M21-GAP-01480"},"M21-GAP-01480":{"line":4735,"offset":842711,"length":170,"previous":"M21-GAP-01479","next":"M21-GAP-01481"},"M21-GAP-01481":{"line":4736,"offset":842881,"length":170,"previous":"M21-GAP-01480","next":"M21-GAP-01482"},"M21-GAP-01482":{"line":4737,"offset":843051,"length":170,"previous":"M21-GAP-01481","next":"M21-GAP-01483"},"M21-GAP-01483":{"line":4738,"offset":843221,"length":170,"previous":"M21-GAP-01482","next":"M21-GAP-01484"},"M21-GAP-01484":{"line":4739,"offset":843391,"length":170,"previous":"M21-GAP-01483","next":"M21-GAP-01485"},"M21-GAP-01485":{"line":4740,"offset":843561,"length":170,"previous":"M21-GAP-01484","next":"M21-GAP-01486"},"M21-GAP-01486":{"line":4741,"offset":843731,"length":193,"previous":"M21-GAP-01485","next":"M21-GAP-01487"},"M21-GAP-01487":{"line":4742,"offset":843924,"length":193,"previous":"M21-GAP-01486","next":"M21-GAP-01488"},"M21-GAP-01488":{"line":4743,"offset":844117,"length":193,"previous":"M21-GAP-01487","next":"M21-GAP-01489"},"M21-GAP-01489":{"line":4744,"offset":844310,"length":193,"previous":"M21-GAP-01488","next":"M21-GAP-01490"},"M21-GAP-01490":{"line":4745,"offset":844503,"length":193,"previous":"M21-GAP-01489","next":"M21-GAP-01491"},"M21-GAP-01491":{"line":4746,"offset":844696,"length":193,"previous":"M21-GAP-01490","next":"M21-GAP-01492"},"M21-GAP-01492":{"line":4747,"offset":844889,"length":193,"previous":"M21-GAP-01491","next":"M21-GAP-01493"},"M21-GAP-01493":{"line":4748,"offset":845082,"length":187,"previous":"M21-GAP-01492","next":"M21-GAP-01494"},"M21-GAP-01494":{"line":4749,"offset":845269,"length":187,"previous":"M21-GAP-01493","next":"M21-GAP-01495"},"M21-GAP-01495":{"line":4750,"offset":845456,"length":188,"previous":"M21-GAP-01494","next":"M21-GAP-01496"},"M21-GAP-01496":{"line":4751,"offset":845644,"length":188,"previous":"M21-GAP-01495","next":"M21-GAP-01497"},"M21-GAP-01497":{"line":4752,"offset":845832,"length":188,"previous":"M21-GAP-01496","next":"M21-GAP-01498"},"M21-GAP-01498":{"line":4753,"offset":846020,"length":188,"previous":"M21-GAP-01497","next":"M21-GAP-01499"},"M21-GAP-01499":{"line":4754,"offset":846208,"length":188,"previous":"M21-GAP-01498","next":"M21-GAP-01500"},"M21-GAP-01500":{"line":4755,"offset":846396,"length":188,"previous":"M21-GAP-01499","next":"M21-GAP-01501"},"M21-GAP-01501":{"line":4756,"offset":846584,"length":188,"previous":"M21-GAP-01500","next":"M21-GAP-01502"},"M21-GAP-01502":{"line":4757,"offset":846772,"length":188,"previous":"M21-GAP-01501","next":"M21-GAP-01503"},"M21-GAP-01503":{"line":4758,"offset":846960,"length":188,"previous":"M21-GAP-01502","next":"M21-GAP-01504"},"M21-GAP-01504":{"line":4759,"offset":847148,"length":188,"previous":"M21-GAP-01503","next":"M21-GAP-01505"},"M21-GAP-01505":{"line":4760,"offset":847336,"length":187,"previous":"M21-GAP-01504","next":"M21-GAP-01506"},"M21-GAP-01506":{"line":4761,"offset":847523,"length":188,"previous":"M21-GAP-01505","next":"M21-GAP-01507"},"M21-GAP-01507":{"line":4762,"offset":847711,"length":188,"previous":"M21-GAP-01506","next":"M21-GAP-01508"},"M21-GAP-01508":{"line":4763,"offset":847899,"length":188,"previous":"M21-GAP-01507","next":"M21-GAP-01509"},"M21-GAP-01509":{"line":4764,"offset":848087,"length":188,"previous":"M21-GAP-01508","next":"M21-GAP-01510"},"M21-GAP-01510":{"line":4765,"offset":848275,"length":188,"previous":"M21-GAP-01509","next":"M21-GAP-01511"},"M21-GAP-01511":{"line":4766,"offset":848463,"length":187,"previous":"M21-GAP-01510","next":"M21-GAP-01512"},"M21-GAP-01512":{"line":4767,"offset":848650,"length":187,"previous":"M21-GAP-01511","next":"M21-GAP-01513"},"M21-GAP-01513":{"line":4768,"offset":848837,"length":187,"previous":"M21-GAP-01512","next":"M21-GAP-01514"},"M21-GAP-01514":{"line":4769,"offset":849024,"length":187,"previous":"M21-GAP-01513","next":"M21-GAP-01515"},"M21-GAP-01515":{"line":4770,"offset":849211,"length":187,"previous":"M21-GAP-01514","next":"M21-GAP-01516"},"M21-GAP-01516":{"line":4771,"offset":849398,"length":187,"previous":"M21-GAP-01515","next":"M21-GAP-01517"},"M21-GAP-01517":{"line":4772,"offset":849585,"length":187,"previous":"M21-GAP-01516","next":"M21-GAP-01518"},"M21-GAP-01518":{"line":4773,"offset":849772,"length":174,"previous":"M21-GAP-01517","next":"M21-GAP-01519"},"M21-GAP-01519":{"line":4774,"offset":849946,"length":174,"previous":"M21-GAP-01518","next":"M21-GAP-01520"},"M21-GAP-01520":{"line":4775,"offset":850120,"length":175,"previous":"M21-GAP-01519","next":"M21-GAP-01521"},"M21-GAP-01521":{"line":4776,"offset":850295,"length":175,"previous":"M21-GAP-01520","next":"M21-GAP-01522"},"M21-GAP-01522":{"line":4777,"offset":850470,"length":175,"previous":"M21-GAP-01521","next":"M21-GAP-01523"},"M21-GAP-01523":{"line":4778,"offset":850645,"length":175,"previous":"M21-GAP-01522","next":"M21-GAP-01524"},"M21-GAP-01524":{"line":4779,"offset":850820,"length":175,"previous":"M21-GAP-01523","next":"M21-GAP-01525"},"M21-GAP-01525":{"line":4780,"offset":850995,"length":175,"previous":"M21-GAP-01524","next":"M21-GAP-01526"},"M21-GAP-01526":{"line":4781,"offset":851170,"length":175,"previous":"M21-GAP-01525","next":"M21-GAP-01527"},"M21-GAP-01527":{"line":4782,"offset":851345,"length":175,"previous":"M21-GAP-01526","next":"M21-GAP-01528"},"M21-GAP-01528":{"line":4783,"offset":851520,"length":175,"previous":"M21-GAP-01527","next":"M21-GAP-01529"},"M21-GAP-01529":{"line":4784,"offset":851695,"length":175,"previous":"M21-GAP-01528","next":"M21-GAP-01530"},"M21-GAP-01530":{"line":4785,"offset":851870,"length":174,"previous":"M21-GAP-01529","next":"M21-GAP-01531"},"M21-GAP-01531":{"line":4786,"offset":852044,"length":175,"previous":"M21-GAP-01530","next":"M21-GAP-01532"},"M21-GAP-01532":{"line":4787,"offset":852219,"length":174,"previous":"M21-GAP-01531","next":"M21-GAP-01533"},"M21-GAP-01533":{"line":4788,"offset":852393,"length":174,"previous":"M21-GAP-01532","next":"M21-GAP-01534"},"M21-GAP-01534":{"line":4789,"offset":852567,"length":174,"previous":"M21-GAP-01533","next":"M21-GAP-01535"},"M21-GAP-01535":{"line":4790,"offset":852741,"length":174,"previous":"M21-GAP-01534","next":"M21-GAP-01536"},"M21-GAP-01536":{"line":4791,"offset":852915,"length":174,"previous":"M21-GAP-01535","next":"M21-GAP-01537"},"M21-GAP-01537":{"line":4792,"offset":853089,"length":174,"previous":"M21-GAP-01536","next":"M21-GAP-01538"},"M21-GAP-01538":{"line":4793,"offset":853263,"length":174,"previous":"M21-GAP-01537","next":"M21-GAP-01539"},"M21-GAP-01539":{"line":4794,"offset":853437,"length":174,"previous":"M21-GAP-01538","next":"M21-GAP-01540"},"M21-GAP-01540":{"line":4795,"offset":853611,"length":174,"previous":"M21-GAP-01539","next":"M21-GAP-01541"},"M21-GAP-01541":{"line":4796,"offset":853785,"length":175,"previous":"M21-GAP-01540","next":"M21-GAP-01542"},"M21-GAP-01542":{"line":4797,"offset":853960,"length":175,"previous":"M21-GAP-01541","next":"M21-GAP-01543"},"M21-GAP-01543":{"line":4798,"offset":854135,"length":175,"previous":"M21-GAP-01542","next":"M21-GAP-01544"},"M21-GAP-01544":{"line":4799,"offset":854310,"length":175,"previous":"M21-GAP-01543","next":"M21-GAP-01545"},"M21-GAP-01545":{"line":4800,"offset":854485,"length":175,"previous":"M21-GAP-01544","next":"M21-GAP-01546"},"M21-GAP-01546":{"line":4801,"offset":854660,"length":175,"previous":"M21-GAP-01545","next":"M21-GAP-01547"},"M21-GAP-01547":{"line":4802,"offset":854835,"length":175,"previous":"M21-GAP-01546","next":"M21-GAP-01548"},"M21-GAP-01548":{"line":4803,"offset":855010,"length":175,"previous":"M21-GAP-01547","next":"M21-GAP-01549"},"M21-GAP-01549":{"line":4804,"offset":855185,"length":175,"previous":"M21-GAP-01548","next":"M21-GAP-01550"},"M21-GAP-01550":{"line":4805,"offset":855360,"length":175,"previous":"M21-GAP-01549","next":"M21-GAP-01551"},"M21-GAP-01551":{"line":4806,"offset":855535,"length":174,"previous":"M21-GAP-01550","next":"M21-GAP-01552"},"M21-GAP-01552":{"line":4807,"offset":855709,"length":175,"previous":"M21-GAP-01551","next":"M21-GAP-01553"},"M21-GAP-01553":{"line":4808,"offset":855884,"length":175,"previous":"M21-GAP-01552","next":"M21-GAP-01554"},"M21-GAP-01554":{"line":4809,"offset":856059,"length":175,"previous":"M21-GAP-01553","next":"M21-GAP-01555"},"M21-GAP-01555":{"line":4810,"offset":856234,"length":175,"previous":"M21-GAP-01554","next":"M21-GAP-01556"},"M21-GAP-01556":{"line":4811,"offset":856409,"length":175,"previous":"M21-GAP-01555","next":"M21-GAP-01557"},"M21-GAP-01557":{"line":4812,"offset":856584,"length":174,"previous":"M21-GAP-01556","next":"M21-GAP-01558"},"M21-GAP-01558":{"line":4813,"offset":856758,"length":174,"previous":"M21-GAP-01557","next":"M21-GAP-01559"},"M21-GAP-01559":{"line":4814,"offset":856932,"length":174,"previous":"M21-GAP-01558","next":"M21-GAP-01560"},"M21-GAP-01560":{"line":4815,"offset":857106,"length":174,"previous":"M21-GAP-01559","next":"M21-GAP-01561"},"M21-GAP-01561":{"line":4816,"offset":857280,"length":174,"previous":"M21-GAP-01560","next":"M21-GAP-01562"},"M21-GAP-01562":{"line":4817,"offset":857454,"length":174,"previous":"M21-GAP-01561","next":"M21-GAP-01563"},"M21-GAP-01563":{"line":4818,"offset":857628,"length":174,"previous":"M21-GAP-01562","next":"M21-GAP-01564"},"M21-GAP-01564":{"line":4819,"offset":857802,"length":179,"previous":"M21-GAP-01563","next":"M21-GAP-01565"},"M21-GAP-01565":{"line":4820,"offset":857981,"length":179,"previous":"M21-GAP-01564","next":"M21-GAP-01566"},"M21-GAP-01566":{"line":4821,"offset":858160,"length":180,"previous":"M21-GAP-01565","next":"M21-GAP-01567"},"M21-GAP-01567":{"line":4822,"offset":858340,"length":180,"previous":"M21-GAP-01566","next":"M21-GAP-01568"},"M21-GAP-01568":{"line":4823,"offset":858520,"length":180,"previous":"M21-GAP-01567","next":"M21-GAP-01569"},"M21-GAP-01569":{"line":4824,"offset":858700,"length":180,"previous":"M21-GAP-01568","next":"M21-GAP-01570"},"M21-GAP-01570":{"line":4825,"offset":858880,"length":180,"previous":"M21-GAP-01569","next":"M21-GAP-01571"},"M21-GAP-01571":{"line":4826,"offset":859060,"length":180,"previous":"M21-GAP-01570","next":"M21-GAP-01572"},"M21-GAP-01572":{"line":4827,"offset":859240,"length":180,"previous":"M21-GAP-01571","next":"M21-GAP-01573"},"M21-GAP-01573":{"line":4828,"offset":859420,"length":180,"previous":"M21-GAP-01572","next":"M21-GAP-01574"},"M21-GAP-01574":{"line":4829,"offset":859600,"length":180,"previous":"M21-GAP-01573","next":"M21-GAP-01575"},"M21-GAP-01575":{"line":4830,"offset":859780,"length":180,"previous":"M21-GAP-01574","next":"M21-GAP-01576"},"M21-GAP-01576":{"line":4831,"offset":859960,"length":179,"previous":"M21-GAP-01575","next":"M21-GAP-01577"},"M21-GAP-01577":{"line":4832,"offset":860139,"length":180,"previous":"M21-GAP-01576","next":"M21-GAP-01578"},"M21-GAP-01578":{"line":4833,"offset":860319,"length":180,"previous":"M21-GAP-01577","next":"M21-GAP-01579"},"M21-GAP-01579":{"line":4834,"offset":860499,"length":180,"previous":"M21-GAP-01578","next":"M21-GAP-01580"},"M21-GAP-01580":{"line":4835,"offset":860679,"length":180,"previous":"M21-GAP-01579","next":"M21-GAP-01581"},"M21-GAP-01581":{"line":4836,"offset":860859,"length":180,"previous":"M21-GAP-01580","next":"M21-GAP-01582"},"M21-GAP-01582":{"line":4837,"offset":861039,"length":180,"previous":"M21-GAP-01581","next":"M21-GAP-01583"},"M21-GAP-01583":{"line":4838,"offset":861219,"length":180,"previous":"M21-GAP-01582","next":"M21-GAP-01584"},"M21-GAP-01584":{"line":4839,"offset":861399,"length":180,"previous":"M21-GAP-01583","next":"M21-GAP-01585"},"M21-GAP-01585":{"line":4840,"offset":861579,"length":180,"previous":"M21-GAP-01584","next":"M21-GAP-01586"},"M21-GAP-01586":{"line":4841,"offset":861759,"length":180,"previous":"M21-GAP-01585","next":"M21-GAP-01587"},"M21-GAP-01587":{"line":4842,"offset":861939,"length":179,"previous":"M21-GAP-01586","next":"M21-GAP-01588"},"M21-GAP-01588":{"line":4843,"offset":862118,"length":180,"previous":"M21-GAP-01587","next":"M21-GAP-01589"},"M21-GAP-01589":{"line":4844,"offset":862298,"length":180,"previous":"M21-GAP-01588","next":"M21-GAP-01590"},"M21-GAP-01590":{"line":4845,"offset":862478,"length":180,"previous":"M21-GAP-01589","next":"M21-GAP-01591"},"M21-GAP-01591":{"line":4846,"offset":862658,"length":180,"previous":"M21-GAP-01590","next":"M21-GAP-01592"},"M21-GAP-01592":{"line":4847,"offset":862838,"length":180,"previous":"M21-GAP-01591","next":"M21-GAP-01593"},"M21-GAP-01593":{"line":4848,"offset":863018,"length":180,"previous":"M21-GAP-01592","next":"M21-GAP-01594"},"M21-GAP-01594":{"line":4849,"offset":863198,"length":180,"previous":"M21-GAP-01593","next":"M21-GAP-01595"},"M21-GAP-01595":{"line":4850,"offset":863378,"length":180,"previous":"M21-GAP-01594","next":"M21-GAP-01596"},"M21-GAP-01596":{"line":4851,"offset":863558,"length":180,"previous":"M21-GAP-01595","next":"M21-GAP-01597"},"M21-GAP-01597":{"line":4852,"offset":863738,"length":180,"previous":"M21-GAP-01596","next":"M21-GAP-01598"},"M21-GAP-01598":{"line":4853,"offset":863918,"length":179,"previous":"M21-GAP-01597","next":"M21-GAP-01599"},"M21-GAP-01599":{"line":4854,"offset":864097,"length":180,"previous":"M21-GAP-01598","next":"M21-GAP-01600"},"M21-GAP-01600":{"line":4855,"offset":864277,"length":180,"previous":"M21-GAP-01599","next":"M21-GAP-01601"},"M21-GAP-01601":{"line":4856,"offset":864457,"length":180,"previous":"M21-GAP-01600","next":"M21-GAP-01602"},"M21-GAP-01602":{"line":4857,"offset":864637,"length":180,"previous":"M21-GAP-01601","next":"M21-GAP-01603"},"M21-GAP-01603":{"line":4858,"offset":864817,"length":180,"previous":"M21-GAP-01602","next":"M21-GAP-01604"},"M21-GAP-01604":{"line":4859,"offset":864997,"length":180,"previous":"M21-GAP-01603","next":"M21-GAP-01605"},"M21-GAP-01605":{"line":4860,"offset":865177,"length":180,"previous":"M21-GAP-01604","next":"M21-GAP-01606"},"M21-GAP-01606":{"line":4861,"offset":865357,"length":180,"previous":"M21-GAP-01605","next":"M21-GAP-01607"},"M21-GAP-01607":{"line":4862,"offset":865537,"length":179,"previous":"M21-GAP-01606","next":"M21-GAP-01608"},"M21-GAP-01608":{"line":4863,"offset":865716,"length":179,"previous":"M21-GAP-01607","next":"M21-GAP-01609"},"M21-GAP-01609":{"line":4864,"offset":865895,"length":179,"previous":"M21-GAP-01608","next":"M21-GAP-01610"},"M21-GAP-01610":{"line":4865,"offset":866074,"length":179,"previous":"M21-GAP-01609","next":"M21-GAP-01611"},"M21-GAP-01611":{"line":4866,"offset":866253,"length":179,"previous":"M21-GAP-01610","next":"M21-GAP-01612"},"M21-GAP-01612":{"line":4867,"offset":866432,"length":188,"previous":"M21-GAP-01611","next":"M21-GAP-01613"},"M21-GAP-01613":{"line":4868,"offset":866620,"length":188,"previous":"M21-GAP-01612","next":"M21-GAP-01614"},"M21-GAP-01614":{"line":4869,"offset":866808,"length":188,"previous":"M21-GAP-01613","next":"M21-GAP-01615"},"M21-GAP-01615":{"line":4870,"offset":866996,"length":188,"previous":"M21-GAP-01614","next":"M21-GAP-01616"},"M21-GAP-01616":{"line":4871,"offset":867184,"length":188,"previous":"M21-GAP-01615","next":"M21-GAP-01617"},"M21-GAP-01617":{"line":4872,"offset":867372,"length":188,"previous":"M21-GAP-01616","next":"M21-GAP-01618"},"M21-GAP-01618":{"line":4873,"offset":867560,"length":171,"previous":"M21-GAP-01617","next":"M21-GAP-01619"},"M21-GAP-01619":{"line":4874,"offset":867731,"length":171,"previous":"M21-GAP-01618","next":"M21-GAP-01620"},"M21-GAP-01620":{"line":4875,"offset":867902,"length":172,"previous":"M21-GAP-01619","next":"M21-GAP-01621"},"M21-GAP-01621":{"line":4876,"offset":868074,"length":172,"previous":"M21-GAP-01620","next":"M21-GAP-01622"},"M21-GAP-01622":{"line":4877,"offset":868246,"length":172,"previous":"M21-GAP-01621","next":"M21-GAP-01623"},"M21-GAP-01623":{"line":4878,"offset":868418,"length":172,"previous":"M21-GAP-01622","next":"M21-GAP-01624"},"M21-GAP-01624":{"line":4879,"offset":868590,"length":172,"previous":"M21-GAP-01623","next":"M21-GAP-01625"},"M21-GAP-01625":{"line":4880,"offset":868762,"length":172,"previous":"M21-GAP-01624","next":"M21-GAP-01626"},"M21-GAP-01626":{"line":4881,"offset":868934,"length":172,"previous":"M21-GAP-01625","next":"M21-GAP-01627"},"M21-GAP-01627":{"line":4882,"offset":869106,"length":172,"previous":"M21-GAP-01626","next":"M21-GAP-01628"},"M21-GAP-01628":{"line":4883,"offset":869278,"length":172,"previous":"M21-GAP-01627","next":"M21-GAP-01629"},"M21-GAP-01629":{"line":4884,"offset":869450,"length":172,"previous":"M21-GAP-01628","next":"M21-GAP-01630"},"M21-GAP-01630":{"line":4885,"offset":869622,"length":171,"previous":"M21-GAP-01629","next":"M21-GAP-01631"},"M21-GAP-01631":{"line":4886,"offset":869793,"length":172,"previous":"M21-GAP-01630","next":"M21-GAP-01632"},"M21-GAP-01632":{"line":4887,"offset":869965,"length":172,"previous":"M21-GAP-01631","next":"M21-GAP-01633"},"M21-GAP-01633":{"line":4888,"offset":870137,"length":172,"previous":"M21-GAP-01632","next":"M21-GAP-01634"},"M21-GAP-01634":{"line":4889,"offset":870309,"length":172,"previous":"M21-GAP-01633","next":"M21-GAP-01635"},"M21-GAP-01635":{"line":4890,"offset":870481,"length":172,"previous":"M21-GAP-01634","next":"M21-GAP-01636"},"M21-GAP-01636":{"line":4891,"offset":870653,"length":172,"previous":"M21-GAP-01635","next":"M21-GAP-01637"},"M21-GAP-01637":{"line":4892,"offset":870825,"length":172,"previous":"M21-GAP-01636","next":"M21-GAP-01638"},"M21-GAP-01638":{"line":4893,"offset":870997,"length":172,"previous":"M21-GAP-01637","next":"M21-GAP-01639"},"M21-GAP-01639":{"line":4894,"offset":871169,"length":172,"previous":"M21-GAP-01638","next":"M21-GAP-01640"},"M21-GAP-01640":{"line":4895,"offset":871341,"length":172,"previous":"M21-GAP-01639","next":"M21-GAP-01641"},"M21-GAP-01641":{"line":4896,"offset":871513,"length":171,"previous":"M21-GAP-01640","next":"M21-GAP-01642"},"M21-GAP-01642":{"line":4897,"offset":871684,"length":172,"previous":"M21-GAP-01641","next":"M21-GAP-01643"},"M21-GAP-01643":{"line":4898,"offset":871856,"length":172,"previous":"M21-GAP-01642","next":"M21-GAP-01644"},"M21-GAP-01644":{"line":4899,"offset":872028,"length":172,"previous":"M21-GAP-01643","next":"M21-GAP-01645"},"M21-GAP-01645":{"line":4900,"offset":872200,"length":172,"previous":"M21-GAP-01644","next":"M21-GAP-01646"},"M21-GAP-01646":{"line":4901,"offset":872372,"length":172,"previous":"M21-GAP-01645","next":"M21-GAP-01647"},"M21-GAP-01647":{"line":4902,"offset":872544,"length":172,"previous":"M21-GAP-01646","next":"M21-GAP-01648"},"M21-GAP-01648":{"line":4903,"offset":872716,"length":172,"previous":"M21-GAP-01647","next":"M21-GAP-01649"},"M21-GAP-01649":{"line":4904,"offset":872888,"length":172,"previous":"M21-GAP-01648","next":"M21-GAP-01650"},"M21-GAP-01650":{"line":4905,"offset":873060,"length":172,"previous":"M21-GAP-01649","next":"M21-GAP-01651"},"M21-GAP-01651":{"line":4906,"offset":873232,"length":172,"previous":"M21-GAP-01650","next":"M21-GAP-01652"},"M21-GAP-01652":{"line":4907,"offset":873404,"length":171,"previous":"M21-GAP-01651","next":"M21-GAP-01653"},"M21-GAP-01653":{"line":4908,"offset":873575,"length":172,"previous":"M21-GAP-01652","next":"M21-GAP-01654"},"M21-GAP-01654":{"line":4909,"offset":873747,"length":172,"previous":"M21-GAP-01653","next":"M21-GAP-01655"},"M21-GAP-01655":{"line":4910,"offset":873919,"length":172,"previous":"M21-GAP-01654","next":"M21-GAP-01656"},"M21-GAP-01656":{"line":4911,"offset":874091,"length":172,"previous":"M21-GAP-01655","next":"M21-GAP-01657"},"M21-GAP-01657":{"line":4912,"offset":874263,"length":172,"previous":"M21-GAP-01656","next":"M21-GAP-01658"},"M21-GAP-01658":{"line":4913,"offset":874435,"length":172,"previous":"M21-GAP-01657","next":"M21-GAP-01659"},"M21-GAP-01659":{"line":4914,"offset":874607,"length":172,"previous":"M21-GAP-01658","next":"M21-GAP-01660"},"M21-GAP-01660":{"line":4915,"offset":874779,"length":172,"previous":"M21-GAP-01659","next":"M21-GAP-01661"},"M21-GAP-01661":{"line":4916,"offset":874951,"length":172,"previous":"M21-GAP-01660","next":"M21-GAP-01662"},"M21-GAP-01662":{"line":4917,"offset":875123,"length":172,"previous":"M21-GAP-01661","next":"M21-GAP-01663"},"M21-GAP-01663":{"line":4918,"offset":875295,"length":171,"previous":"M21-GAP-01662","next":"M21-GAP-01664"},"M21-GAP-01664":{"line":4919,"offset":875466,"length":172,"previous":"M21-GAP-01663","next":"M21-GAP-01665"},"M21-GAP-01665":{"line":4920,"offset":875638,"length":172,"previous":"M21-GAP-01664","next":"M21-GAP-01666"},"M21-GAP-01666":{"line":4921,"offset":875810,"length":172,"previous":"M21-GAP-01665","next":"M21-GAP-01667"},"M21-GAP-01667":{"line":4922,"offset":875982,"length":172,"previous":"M21-GAP-01666","next":"M21-GAP-01668"},"M21-GAP-01668":{"line":4923,"offset":876154,"length":172,"previous":"M21-GAP-01667","next":"M21-GAP-01669"},"M21-GAP-01669":{"line":4924,"offset":876326,"length":172,"previous":"M21-GAP-01668","next":"M21-GAP-01670"},"M21-GAP-01670":{"line":4925,"offset":876498,"length":172,"previous":"M21-GAP-01669","next":"M21-GAP-01671"},"M21-GAP-01671":{"line":4926,"offset":876670,"length":172,"previous":"M21-GAP-01670","next":"M21-GAP-01672"},"M21-GAP-01672":{"line":4927,"offset":876842,"length":172,"previous":"M21-GAP-01671","next":"M21-GAP-01673"},"M21-GAP-01673":{"line":4928,"offset":877014,"length":172,"previous":"M21-GAP-01672","next":"M21-GAP-01674"},"M21-GAP-01674":{"line":4929,"offset":877186,"length":171,"previous":"M21-GAP-01673","next":"M21-GAP-01675"},"M21-GAP-01675":{"line":4930,"offset":877357,"length":172,"previous":"M21-GAP-01674","next":"M21-GAP-01676"},"M21-GAP-01676":{"line":4931,"offset":877529,"length":172,"previous":"M21-GAP-01675","next":"M21-GAP-01677"},"M21-GAP-01677":{"line":4932,"offset":877701,"length":172,"previous":"M21-GAP-01676","next":"M21-GAP-01678"},"M21-GAP-01678":{"line":4933,"offset":877873,"length":172,"previous":"M21-GAP-01677","next":"M21-GAP-01679"},"M21-GAP-01679":{"line":4934,"offset":878045,"length":172,"previous":"M21-GAP-01678","next":"M21-GAP-01680"},"M21-GAP-01680":{"line":4935,"offset":878217,"length":172,"previous":"M21-GAP-01679","next":"M21-GAP-01681"},"M21-GAP-01681":{"line":4936,"offset":878389,"length":172,"previous":"M21-GAP-01680","next":"M21-GAP-01682"},"M21-GAP-01682":{"line":4937,"offset":878561,"length":172,"previous":"M21-GAP-01681","next":"M21-GAP-01683"},"M21-GAP-01683":{"line":4938,"offset":878733,"length":172,"previous":"M21-GAP-01682","next":"M21-GAP-01684"},"M21-GAP-01684":{"line":4939,"offset":878905,"length":172,"previous":"M21-GAP-01683","next":"M21-GAP-01685"},"M21-GAP-01685":{"line":4940,"offset":879077,"length":171,"previous":"M21-GAP-01684","next":"M21-GAP-01686"},"M21-GAP-01686":{"line":4941,"offset":879248,"length":172,"previous":"M21-GAP-01685","next":"M21-GAP-01687"},"M21-GAP-01687":{"line":4942,"offset":879420,"length":172,"previous":"M21-GAP-01686","next":"M21-GAP-01688"},"M21-GAP-01688":{"line":4943,"offset":879592,"length":172,"previous":"M21-GAP-01687","next":"M21-GAP-01689"},"M21-GAP-01689":{"line":4944,"offset":879764,"length":172,"previous":"M21-GAP-01688","next":"M21-GAP-01690"},"M21-GAP-01690":{"line":4945,"offset":879936,"length":172,"previous":"M21-GAP-01689","next":"M21-GAP-01691"},"M21-GAP-01691":{"line":4946,"offset":880108,"length":172,"previous":"M21-GAP-01690","next":"M21-GAP-01692"},"M21-GAP-01692":{"line":4947,"offset":880280,"length":172,"previous":"M21-GAP-01691","next":"M21-GAP-01693"},"M21-GAP-01693":{"line":4948,"offset":880452,"length":172,"previous":"M21-GAP-01692","next":"M21-GAP-01694"},"M21-GAP-01694":{"line":4949,"offset":880624,"length":172,"previous":"M21-GAP-01693","next":"M21-GAP-01695"},"M21-GAP-01695":{"line":4950,"offset":880796,"length":172,"previous":"M21-GAP-01694","next":"M21-GAP-01696"},"M21-GAP-01696":{"line":4951,"offset":880968,"length":171,"previous":"M21-GAP-01695","next":"M21-GAP-01697"},"M21-GAP-01697":{"line":4952,"offset":881139,"length":172,"previous":"M21-GAP-01696","next":"M21-GAP-01698"},"M21-GAP-01698":{"line":4953,"offset":881311,"length":172,"previous":"M21-GAP-01697","next":"M21-GAP-01699"},"M21-GAP-01699":{"line":4954,"offset":881483,"length":172,"previous":"M21-GAP-01698","next":"M21-GAP-01700"},"M21-GAP-01700":{"line":4955,"offset":881655,"length":172,"previous":"M21-GAP-01699","next":"M21-GAP-01701"},"M21-GAP-01701":{"line":4956,"offset":881827,"length":172,"previous":"M21-GAP-01700","next":"M21-GAP-01702"},"M21-GAP-01702":{"line":4957,"offset":881999,"length":172,"previous":"M21-GAP-01701","next":"M21-GAP-01703"},"M21-GAP-01703":{"line":4958,"offset":882171,"length":172,"previous":"M21-GAP-01702","next":"M21-GAP-01704"},"M21-GAP-01704":{"line":4959,"offset":882343,"length":172,"previous":"M21-GAP-01703","next":"M21-GAP-01705"},"M21-GAP-01705":{"line":4960,"offset":882515,"length":172,"previous":"M21-GAP-01704","next":"M21-GAP-01706"},"M21-GAP-01706":{"line":4961,"offset":882687,"length":172,"previous":"M21-GAP-01705","next":"M21-GAP-01707"},"M21-GAP-01707":{"line":4962,"offset":882859,"length":171,"previous":"M21-GAP-01706","next":"M21-GAP-01708"},"M21-GAP-01708":{"line":4963,"offset":883030,"length":172,"previous":"M21-GAP-01707","next":"M21-GAP-01709"},"M21-GAP-01709":{"line":4964,"offset":883202,"length":172,"previous":"M21-GAP-01708","next":"M21-GAP-01710"},"M21-GAP-01710":{"line":4965,"offset":883374,"length":172,"previous":"M21-GAP-01709","next":"M21-GAP-01711"},"M21-GAP-01711":{"line":4966,"offset":883546,"length":175,"previous":"M21-GAP-01710","next":"M21-GAP-01712"},"M21-GAP-01712":{"line":4967,"offset":883721,"length":175,"previous":"M21-GAP-01711","next":"M21-GAP-01713"},"M21-GAP-01713":{"line":4968,"offset":883896,"length":176,"previous":"M21-GAP-01712","next":"M21-GAP-01714"},"M21-GAP-01714":{"line":4969,"offset":884072,"length":176,"previous":"M21-GAP-01713","next":"M21-GAP-01715"},"M21-GAP-01715":{"line":4970,"offset":884248,"length":176,"previous":"M21-GAP-01714","next":"M21-GAP-01716"},"M21-GAP-01716":{"line":4971,"offset":884424,"length":176,"previous":"M21-GAP-01715","next":"M21-GAP-01717"},"M21-GAP-01717":{"line":4972,"offset":884600,"length":176,"previous":"M21-GAP-01716","next":"M21-GAP-01718"},"M21-GAP-01718":{"line":4973,"offset":884776,"length":176,"previous":"M21-GAP-01717","next":"M21-GAP-01719"},"M21-GAP-01719":{"line":4974,"offset":884952,"length":176,"previous":"M21-GAP-01718","next":"M21-GAP-01720"},"M21-GAP-01720":{"line":4975,"offset":885128,"length":176,"previous":"M21-GAP-01719","next":"M21-GAP-01721"},"M21-GAP-01721":{"line":4976,"offset":885304,"length":176,"previous":"M21-GAP-01720","next":"M21-GAP-01722"},"M21-GAP-01722":{"line":4977,"offset":885480,"length":176,"previous":"M21-GAP-01721","next":"M21-GAP-01723"},"M21-GAP-01723":{"line":4978,"offset":885656,"length":175,"previous":"M21-GAP-01722","next":"M21-GAP-01724"},"M21-GAP-01724":{"line":4979,"offset":885831,"length":176,"previous":"M21-GAP-01723","next":"M21-GAP-01725"},"M21-GAP-01725":{"line":4980,"offset":886007,"length":176,"previous":"M21-GAP-01724","next":"M21-GAP-01726"},"M21-GAP-01726":{"line":4981,"offset":886183,"length":175,"previous":"M21-GAP-01725","next":"M21-GAP-01727"},"M21-GAP-01727":{"line":4982,"offset":886358,"length":175,"previous":"M21-GAP-01726","next":"M21-GAP-01728"},"M21-GAP-01728":{"line":4983,"offset":886533,"length":175,"previous":"M21-GAP-01727","next":"M21-GAP-01729"},"M21-GAP-01729":{"line":4984,"offset":886708,"length":175,"previous":"M21-GAP-01728","next":"M21-GAP-01730"},"M21-GAP-01730":{"line":4985,"offset":886883,"length":175,"previous":"M21-GAP-01729","next":"M21-GAP-01731"},"M21-GAP-01731":{"line":4986,"offset":887058,"length":175,"previous":"M21-GAP-01730","next":"M21-GAP-01732"},"M21-GAP-01732":{"line":4987,"offset":887233,"length":175,"previous":"M21-GAP-01731","next":"M21-GAP-01733"},"M21-GAP-01733":{"line":4988,"offset":887408,"length":182,"previous":"M21-GAP-01732","next":"M21-GAP-01734"},"M21-GAP-01734":{"line":4989,"offset":887590,"length":182,"previous":"M21-GAP-01733","next":"M21-GAP-01735"},"M21-GAP-01735":{"line":4990,"offset":887772,"length":183,"previous":"M21-GAP-01734","next":"M21-GAP-01736"},"M21-GAP-01736":{"line":4991,"offset":887955,"length":183,"previous":"M21-GAP-01735","next":"M21-GAP-01737"},"M21-GAP-01737":{"line":4992,"offset":888138,"length":183,"previous":"M21-GAP-01736","next":"M21-GAP-01738"},"M21-GAP-01738":{"line":4993,"offset":888321,"length":183,"previous":"M21-GAP-01737","next":"M21-GAP-01739"},"M21-GAP-01739":{"line":4994,"offset":888504,"length":183,"previous":"M21-GAP-01738","next":"M21-GAP-01740"},"M21-GAP-01740":{"line":4995,"offset":888687,"length":183,"previous":"M21-GAP-01739","next":"M21-GAP-01741"},"M21-GAP-01741":{"line":4996,"offset":888870,"length":183,"previous":"M21-GAP-01740","next":"M21-GAP-01742"},"M21-GAP-01742":{"line":4997,"offset":889053,"length":183,"previous":"M21-GAP-01741","next":"M21-GAP-01743"},"M21-GAP-01743":{"line":4998,"offset":889236,"length":183,"previous":"M21-GAP-01742","next":"M21-GAP-01744"},"M21-GAP-01744":{"line":4999,"offset":889419,"length":183,"previous":"M21-GAP-01743","next":"M21-GAP-01745"},"M21-GAP-01745":{"line":5000,"offset":889602,"length":182,"previous":"M21-GAP-01744","next":"M21-GAP-01746"},"M21-GAP-01746":{"line":5001,"offset":889784,"length":183,"previous":"M21-GAP-01745","next":"M21-GAP-01747"},"M21-GAP-01747":{"line":5002,"offset":889967,"length":183,"previous":"M21-GAP-01746","next":"M21-GAP-01748"},"M21-GAP-01748":{"line":5003,"offset":890150,"length":183,"previous":"M21-GAP-01747","next":"M21-GAP-01749"},"M21-GAP-01749":{"line":5004,"offset":890333,"length":183,"previous":"M21-GAP-01748","next":"M21-GAP-01750"},"M21-GAP-01750":{"line":5005,"offset":890516,"length":183,"previous":"M21-GAP-01749","next":"M21-GAP-01751"},"M21-GAP-01751":{"line":5006,"offset":890699,"length":183,"previous":"M21-GAP-01750","next":"M21-GAP-01752"},"M21-GAP-01752":{"line":5007,"offset":890882,"length":183,"previous":"M21-GAP-01751","next":"M21-GAP-01753"},"M21-GAP-01753":{"line":5008,"offset":891065,"length":183,"previous":"M21-GAP-01752","next":"M21-GAP-01754"},"M21-GAP-01754":{"line":5009,"offset":891248,"length":183,"previous":"M21-GAP-01753","next":"M21-GAP-01755"},"M21-GAP-01755":{"line":5010,"offset":891431,"length":183,"previous":"M21-GAP-01754","next":"M21-GAP-01756"},"M21-GAP-01756":{"line":5011,"offset":891614,"length":182,"previous":"M21-GAP-01755","next":"M21-GAP-01757"},"M21-GAP-01757":{"line":5012,"offset":891796,"length":183,"previous":"M21-GAP-01756","next":"M21-GAP-01758"},"M21-GAP-01758":{"line":5013,"offset":891979,"length":183,"previous":"M21-GAP-01757","next":"M21-GAP-01759"},"M21-GAP-01759":{"line":5014,"offset":892162,"length":183,"previous":"M21-GAP-01758","next":"M21-GAP-01760"},"M21-GAP-01760":{"line":5015,"offset":892345,"length":183,"previous":"M21-GAP-01759","next":"M21-GAP-01761"},"M21-GAP-01761":{"line":5016,"offset":892528,"length":183,"previous":"M21-GAP-01760","next":"M21-GAP-01762"},"M21-GAP-01762":{"line":5017,"offset":892711,"length":183,"previous":"M21-GAP-01761","next":"M21-GAP-01763"},"M21-GAP-01763":{"line":5018,"offset":892894,"length":183,"previous":"M21-GAP-01762","next":"M21-GAP-01764"},"M21-GAP-01764":{"line":5019,"offset":893077,"length":183,"previous":"M21-GAP-01763","next":"M21-GAP-01765"},"M21-GAP-01765":{"line":5020,"offset":893260,"length":183,"previous":"M21-GAP-01764","next":"M21-GAP-01766"},"M21-GAP-01766":{"line":5021,"offset":893443,"length":183,"previous":"M21-GAP-01765","next":"M21-GAP-01767"},"M21-GAP-01767":{"line":5022,"offset":893626,"length":182,"previous":"M21-GAP-01766","next":"M21-GAP-01768"},"M21-GAP-01768":{"line":5023,"offset":893808,"length":183,"previous":"M21-GAP-01767","next":"M21-GAP-01769"},"M21-GAP-01769":{"line":5024,"offset":893991,"length":183,"previous":"M21-GAP-01768","next":"M21-GAP-01770"},"M21-GAP-01770":{"line":5025,"offset":894174,"length":183,"previous":"M21-GAP-01769","next":"M21-GAP-01771"},"M21-GAP-01771":{"line":5026,"offset":894357,"length":183,"previous":"M21-GAP-01770","next":"M21-GAP-01772"},"M21-GAP-01772":{"line":5027,"offset":894540,"length":183,"previous":"M21-GAP-01771","next":"M21-GAP-01773"},"M21-GAP-01773":{"line":5028,"offset":894723,"length":183,"previous":"M21-GAP-01772","next":"M21-GAP-01774"},"M21-GAP-01774":{"line":5029,"offset":894906,"length":183,"previous":"M21-GAP-01773","next":"M21-GAP-01775"},"M21-GAP-01775":{"line":5030,"offset":895089,"length":183,"previous":"M21-GAP-01774","next":"M21-GAP-01776"},"M21-GAP-01776":{"line":5031,"offset":895272,"length":183,"previous":"M21-GAP-01775","next":"M21-GAP-01777"},"M21-GAP-01777":{"line":5032,"offset":895455,"length":182,"previous":"M21-GAP-01776","next":"M21-GAP-01778"},"M21-GAP-01778":{"line":5033,"offset":895637,"length":182,"previous":"M21-GAP-01777","next":"M21-GAP-01779"},"M21-GAP-01779":{"line":5034,"offset":895819,"length":182,"previous":"M21-GAP-01778","next":"M21-GAP-01780"},"M21-GAP-01780":{"line":5035,"offset":896001,"length":182,"previous":"M21-GAP-01779","next":"M21-GAP-01781"},"M21-GAP-01781":{"line":5036,"offset":896183,"length":182,"previous":"M21-GAP-01780","next":"M21-GAP-01782"},"M21-GAP-01782":{"line":5037,"offset":896365,"length":183,"previous":"M21-GAP-01781","next":"M21-GAP-01783"},"M21-GAP-01783":{"line":5038,"offset":896548,"length":183,"previous":"M21-GAP-01782","next":"M21-GAP-01784"},"M21-GAP-01784":{"line":5039,"offset":896731,"length":183,"previous":"M21-GAP-01783","next":"M21-GAP-01785"},"M21-GAP-01785":{"line":5040,"offset":896914,"length":183,"previous":"M21-GAP-01784","next":"M21-GAP-01786"},"M21-GAP-01786":{"line":5041,"offset":897097,"length":183,"previous":"M21-GAP-01785","next":"M21-GAP-01787"},"M21-GAP-01787":{"line":5042,"offset":897280,"length":183,"previous":"M21-GAP-01786","next":"M21-GAP-01788"},"M21-GAP-01788":{"line":5043,"offset":897463,"length":182,"previous":"M21-GAP-01787","next":"M21-GAP-01789"},"M21-GAP-01789":{"line":5044,"offset":897645,"length":182,"previous":"M21-GAP-01788","next":"M21-GAP-01790"},"M21-GAP-01790":{"line":5045,"offset":897827,"length":182,"previous":"M21-GAP-01789","next":"M21-GAP-01791"},"M21-GAP-01791":{"line":5046,"offset":898009,"length":182,"previous":"M21-GAP-01790","next":"M21-GAP-01792"},"M21-GAP-01792":{"line":5047,"offset":898191,"length":182,"previous":"M21-GAP-01791","next":"M21-GAP-01793"},"M21-GAP-01793":{"line":5048,"offset":898373,"length":182,"previous":"M21-GAP-01792","next":"M21-GAP-01794"},"M21-GAP-01794":{"line":5049,"offset":898555,"length":182,"previous":"M21-GAP-01793","next":"M21-GAP-01795"},"M21-GAP-01795":{"line":5050,"offset":898737,"length":182,"previous":"M21-GAP-01794","next":"M21-GAP-01796"},"M21-GAP-01796":{"line":5051,"offset":898919,"length":184,"previous":"M21-GAP-01795","next":"M21-GAP-01797"},"M21-GAP-01797":{"line":5052,"offset":899103,"length":184,"previous":"M21-GAP-01796","next":"M21-GAP-01798"},"M21-GAP-01798":{"line":5053,"offset":899287,"length":185,"previous":"M21-GAP-01797","next":"M21-GAP-01799"},"M21-GAP-01799":{"line":5054,"offset":899472,"length":186,"previous":"M21-GAP-01798","next":"M21-GAP-01800"},"M21-GAP-01800":{"line":5055,"offset":899658,"length":186,"previous":"M21-GAP-01799","next":"M21-GAP-01801"},"M21-GAP-01801":{"line":5056,"offset":899844,"length":186,"previous":"M21-GAP-01800","next":"M21-GAP-01802"},"M21-GAP-01802":{"line":5057,"offset":900030,"length":186,"previous":"M21-GAP-01801","next":"M21-GAP-01803"},"M21-GAP-01803":{"line":5058,"offset":900216,"length":185,"previous":"M21-GAP-01802","next":"M21-GAP-01804"},"M21-GAP-01804":{"line":5059,"offset":900401,"length":185,"previous":"M21-GAP-01803","next":"M21-GAP-01805"},"M21-GAP-01805":{"line":5060,"offset":900586,"length":185,"previous":"M21-GAP-01804","next":"M21-GAP-01806"},"M21-GAP-01806":{"line":5061,"offset":900771,"length":185,"previous":"M21-GAP-01805","next":"M21-GAP-01807"},"M21-GAP-01807":{"line":5062,"offset":900956,"length":185,"previous":"M21-GAP-01806","next":"M21-GAP-01808"},"M21-GAP-01808":{"line":5063,"offset":901141,"length":185,"previous":"M21-GAP-01807","next":"M21-GAP-01809"},"M21-GAP-01809":{"line":5064,"offset":901326,"length":185,"previous":"M21-GAP-01808","next":"M21-GAP-01810"},"M21-GAP-01810":{"line":5065,"offset":901511,"length":185,"previous":"M21-GAP-01809","next":"M21-GAP-01811"},"M21-GAP-01811":{"line":5066,"offset":901696,"length":185,"previous":"M21-GAP-01810","next":"M21-GAP-01812"},"M21-GAP-01812":{"line":5067,"offset":901881,"length":184,"previous":"M21-GAP-01811","next":"M21-GAP-01813"},"M21-GAP-01813":{"line":5068,"offset":902065,"length":185,"previous":"M21-GAP-01812","next":"M21-GAP-01814"},"M21-GAP-01814":{"line":5069,"offset":902250,"length":185,"previous":"M21-GAP-01813","next":"M21-GAP-01815"},"M21-GAP-01815":{"line":5070,"offset":902435,"length":185,"previous":"M21-GAP-01814","next":"M21-GAP-01816"},"M21-GAP-01816":{"line":5071,"offset":902620,"length":185,"previous":"M21-GAP-01815","next":"M21-GAP-01817"},"M21-GAP-01817":{"line":5072,"offset":902805,"length":185,"previous":"M21-GAP-01816","next":"M21-GAP-01818"},"M21-GAP-01818":{"line":5073,"offset":902990,"length":185,"previous":"M21-GAP-01817","next":"M21-GAP-01819"},"M21-GAP-01819":{"line":5074,"offset":903175,"length":185,"previous":"M21-GAP-01818","next":"M21-GAP-01820"},"M21-GAP-01820":{"line":5075,"offset":903360,"length":185,"previous":"M21-GAP-01819","next":"M21-GAP-01821"},"M21-GAP-01821":{"line":5076,"offset":903545,"length":185,"previous":"M21-GAP-01820","next":"M21-GAP-01822"},"M21-GAP-01822":{"line":5077,"offset":903730,"length":185,"previous":"M21-GAP-01821","next":"M21-GAP-01823"},"M21-GAP-01823":{"line":5078,"offset":903915,"length":184,"previous":"M21-GAP-01822","next":"M21-GAP-01824"},"M21-GAP-01824":{"line":5079,"offset":904099,"length":185,"previous":"M21-GAP-01823","next":"M21-GAP-01825"},"M21-GAP-01825":{"line":5080,"offset":904284,"length":185,"previous":"M21-GAP-01824","next":"M21-GAP-01826"},"M21-GAP-01826":{"line":5081,"offset":904469,"length":185,"previous":"M21-GAP-01825","next":"M21-GAP-01827"},"M21-GAP-01827":{"line":5082,"offset":904654,"length":185,"previous":"M21-GAP-01826","next":"M21-GAP-01828"},"M21-GAP-01828":{"line":5083,"offset":904839,"length":185,"previous":"M21-GAP-01827","next":"M21-GAP-01829"},"M21-GAP-01829":{"line":5084,"offset":905024,"length":185,"previous":"M21-GAP-01828","next":"M21-GAP-01830"},"M21-GAP-01830":{"line":5085,"offset":905209,"length":185,"previous":"M21-GAP-01829","next":"M21-GAP-01831"},"M21-GAP-01831":{"line":5086,"offset":905394,"length":185,"previous":"M21-GAP-01830","next":"M21-GAP-01832"},"M21-GAP-01832":{"line":5087,"offset":905579,"length":185,"previous":"M21-GAP-01831","next":"M21-GAP-01833"},"M21-GAP-01833":{"line":5088,"offset":905764,"length":185,"previous":"M21-GAP-01832","next":"M21-GAP-01834"},"M21-GAP-01834":{"line":5089,"offset":905949,"length":184,"previous":"M21-GAP-01833","next":"M21-GAP-01835"},"M21-GAP-01835":{"line":5090,"offset":906133,"length":185,"previous":"M21-GAP-01834","next":"M21-GAP-01836"},"M21-GAP-01836":{"line":5091,"offset":906318,"length":185,"previous":"M21-GAP-01835","next":"M21-GAP-01837"},"M21-GAP-01837":{"line":5092,"offset":906503,"length":185,"previous":"M21-GAP-01836","next":"M21-GAP-01838"},"M21-GAP-01838":{"line":5093,"offset":906688,"length":185,"previous":"M21-GAP-01837","next":"M21-GAP-01839"},"M21-GAP-01839":{"line":5094,"offset":906873,"length":185,"previous":"M21-GAP-01838","next":"M21-GAP-01840"},"M21-GAP-01840":{"line":5095,"offset":907058,"length":185,"previous":"M21-GAP-01839","next":"M21-GAP-01841"},"M21-GAP-01841":{"line":5096,"offset":907243,"length":185,"previous":"M21-GAP-01840","next":"M21-GAP-01842"},"M21-GAP-01842":{"line":5097,"offset":907428,"length":185,"previous":"M21-GAP-01841","next":"M21-GAP-01843"},"M21-GAP-01843":{"line":5098,"offset":907613,"length":185,"previous":"M21-GAP-01842","next":"M21-GAP-01844"},"M21-GAP-01844":{"line":5099,"offset":907798,"length":185,"previous":"M21-GAP-01843","next":"M21-GAP-01845"},"M21-GAP-01845":{"line":5100,"offset":907983,"length":184,"previous":"M21-GAP-01844","next":"M21-GAP-01846"},"M21-GAP-01846":{"line":5101,"offset":908167,"length":185,"previous":"M21-GAP-01845","next":"M21-GAP-01847"},"M21-GAP-01847":{"line":5102,"offset":908352,"length":185,"previous":"M21-GAP-01846","next":"M21-GAP-01848"},"M21-GAP-01848":{"line":5103,"offset":908537,"length":185,"previous":"M21-GAP-01847","next":"M21-GAP-01849"},"M21-GAP-01849":{"line":5104,"offset":908722,"length":185,"previous":"M21-GAP-01848","next":"M21-GAP-01850"},"M21-GAP-01850":{"line":5105,"offset":908907,"length":185,"previous":"M21-GAP-01849","next":"M21-GAP-01851"},"M21-GAP-01851":{"line":5106,"offset":909092,"length":185,"previous":"M21-GAP-01850","next":"M21-GAP-01852"},"M21-GAP-01852":{"line":5107,"offset":909277,"length":185,"previous":"M21-GAP-01851","next":"M21-GAP-01853"},"M21-GAP-01853":{"line":5108,"offset":909462,"length":185,"previous":"M21-GAP-01852","next":"M21-GAP-01854"},"M21-GAP-01854":{"line":5109,"offset":909647,"length":185,"previous":"M21-GAP-01853","next":"M21-GAP-01855"},"M21-GAP-01855":{"line":5110,"offset":909832,"length":185,"previous":"M21-GAP-01854","next":"M21-GAP-01856"},"M21-GAP-01856":{"line":5111,"offset":910017,"length":184,"previous":"M21-GAP-01855","next":"M21-GAP-01857"},"M21-GAP-01857":{"line":5112,"offset":910201,"length":185,"previous":"M21-GAP-01856","next":"M21-GAP-01858"},"M21-GAP-01858":{"line":5113,"offset":910386,"length":185,"previous":"M21-GAP-01857","next":"M21-GAP-01859"},"M21-GAP-01859":{"line":5114,"offset":910571,"length":185,"previous":"M21-GAP-01858","next":"M21-GAP-01860"},"M21-GAP-01860":{"line":5115,"offset":910756,"length":185,"previous":"M21-GAP-01859","next":"M21-GAP-01861"},"M21-GAP-01861":{"line":5116,"offset":910941,"length":185,"previous":"M21-GAP-01860","next":"M21-GAP-01862"},"M21-GAP-01862":{"line":5117,"offset":911126,"length":185,"previous":"M21-GAP-01861","next":"M21-GAP-01863"},"M21-GAP-01863":{"line":5118,"offset":911311,"length":185,"previous":"M21-GAP-01862","next":"M21-GAP-01864"},"M21-GAP-01864":{"line":5119,"offset":911496,"length":185,"previous":"M21-GAP-01863","next":"M21-GAP-01865"},"M21-GAP-01865":{"line":5120,"offset":911681,"length":185,"previous":"M21-GAP-01864","next":"M21-GAP-01866"},"M21-GAP-01866":{"line":5121,"offset":911866,"length":185,"previous":"M21-GAP-01865","next":"M21-GAP-01867"},"M21-GAP-01867":{"line":5122,"offset":912051,"length":184,"previous":"M21-GAP-01866","next":"M21-GAP-01868"},"M21-GAP-01868":{"line":5123,"offset":912235,"length":185,"previous":"M21-GAP-01867","next":"M21-GAP-01869"},"M21-GAP-01869":{"line":5124,"offset":912420,"length":185,"previous":"M21-GAP-01868","next":"M21-GAP-01870"},"M21-GAP-01870":{"line":5125,"offset":912605,"length":185,"previous":"M21-GAP-01869","next":"M21-GAP-01871"},"M21-GAP-01871":{"line":5126,"offset":912790,"length":185,"previous":"M21-GAP-01870","next":"M21-GAP-01872"},"M21-GAP-01872":{"line":5127,"offset":912975,"length":185,"previous":"M21-GAP-01871","next":"M21-GAP-01873"},"M21-GAP-01873":{"line":5128,"offset":913160,"length":185,"previous":"M21-GAP-01872","next":"M21-GAP-01874"},"M21-GAP-01874":{"line":5129,"offset":913345,"length":185,"previous":"M21-GAP-01873","next":"M21-GAP-01875"},"M21-GAP-01875":{"line":5130,"offset":913530,"length":185,"previous":"M21-GAP-01874","next":"M21-GAP-01876"},"M21-GAP-01876":{"line":5131,"offset":913715,"length":185,"previous":"M21-GAP-01875","next":"M21-GAP-01877"},"M21-GAP-01877":{"line":5132,"offset":913900,"length":185,"previous":"M21-GAP-01876","next":"M21-GAP-01878"},"M21-GAP-01878":{"line":5133,"offset":914085,"length":184,"previous":"M21-GAP-01877","next":"M21-GAP-01879"},"M21-GAP-01879":{"line":5134,"offset":914269,"length":185,"previous":"M21-GAP-01878","next":"M21-GAP-01880"},"M21-GAP-01880":{"line":5135,"offset":914454,"length":185,"previous":"M21-GAP-01879","next":"M21-GAP-01881"},"M21-GAP-01881":{"line":5136,"offset":914639,"length":185,"previous":"M21-GAP-01880","next":"M21-GAP-01882"},"M21-GAP-01882":{"line":5137,"offset":914824,"length":185,"previous":"M21-GAP-01881","next":"M21-GAP-01883"},"M21-GAP-01883":{"line":5138,"offset":915009,"length":185,"previous":"M21-GAP-01882","next":"M21-GAP-01884"},"M21-GAP-01884":{"line":5139,"offset":915194,"length":185,"previous":"M21-GAP-01883","next":"M21-GAP-01885"},"M21-GAP-01885":{"line":5140,"offset":915379,"length":185,"previous":"M21-GAP-01884","next":"M21-GAP-01886"},"M21-GAP-01886":{"line":5141,"offset":915564,"length":185,"previous":"M21-GAP-01885","next":"M21-GAP-01887"},"M21-GAP-01887":{"line":5142,"offset":915749,"length":185,"previous":"M21-GAP-01886","next":"M21-GAP-01888"},"M21-GAP-01888":{"line":5143,"offset":915934,"length":185,"previous":"M21-GAP-01887","next":"M21-GAP-01889"},"M21-GAP-01889":{"line":5144,"offset":916119,"length":184,"previous":"M21-GAP-01888","next":"M21-GAP-01890"},"M21-GAP-01890":{"line":5145,"offset":916303,"length":185,"previous":"M21-GAP-01889","next":"M21-GAP-01891"},"M21-GAP-01891":{"line":5146,"offset":916488,"length":185,"previous":"M21-GAP-01890","next":"M21-GAP-01892"},"M21-GAP-01892":{"line":5147,"offset":916673,"length":185,"previous":"M21-GAP-01891","next":"M21-GAP-01893"},"M21-GAP-01893":{"line":5148,"offset":916858,"length":185,"previous":"M21-GAP-01892","next":"M21-GAP-01894"},"M21-GAP-01894":{"line":5149,"offset":917043,"length":185,"previous":"M21-GAP-01893","next":"M21-GAP-01895"},"M21-GAP-01895":{"line":5150,"offset":917228,"length":185,"previous":"M21-GAP-01894","next":"M21-GAP-01896"},"M21-GAP-01896":{"line":5151,"offset":917413,"length":185,"previous":"M21-GAP-01895","next":"M21-GAP-01897"},"M21-GAP-01897":{"line":5152,"offset":917598,"length":185,"previous":"M21-GAP-01896","next":"M21-GAP-01898"},"M21-GAP-01898":{"line":5153,"offset":917783,"length":185,"previous":"M21-GAP-01897","next":"M21-GAP-01899"},"M21-GAP-01899":{"line":5154,"offset":917968,"length":185,"previous":"M21-GAP-01898","next":"M21-GAP-01900"},"M21-GAP-01900":{"line":5155,"offset":918153,"length":185,"previous":"M21-GAP-01899","next":"M21-GAP-01901"},"M21-GAP-01901":{"line":5156,"offset":918338,"length":185,"previous":"M21-GAP-01900","next":"M21-GAP-01902"},"M21-GAP-01902":{"line":5157,"offset":918523,"length":186,"previous":"M21-GAP-01901","next":"M21-GAP-01903"},"M21-GAP-01903":{"line":5158,"offset":918709,"length":186,"previous":"M21-GAP-01902","next":"M21-GAP-01904"},"M21-GAP-01904":{"line":5159,"offset":918895,"length":186,"previous":"M21-GAP-01903","next":"M21-GAP-01905"},"M21-GAP-01905":{"line":5160,"offset":919081,"length":186,"previous":"M21-GAP-01904","next":"M21-GAP-01906"},"M21-GAP-01906":{"line":5161,"offset":919267,"length":186,"previous":"M21-GAP-01905","next":"M21-GAP-01907"},"M21-GAP-01907":{"line":5162,"offset":919453,"length":186,"previous":"M21-GAP-01906","next":"M21-GAP-01908"},"M21-GAP-01908":{"line":5163,"offset":919639,"length":188,"previous":"M21-GAP-01907","next":"M21-GAP-01909"},"M21-GAP-01909":{"line":5164,"offset":919827,"length":188,"previous":"M21-GAP-01908","next":"M21-GAP-01910"},"M21-GAP-01910":{"line":5165,"offset":920015,"length":188,"previous":"M21-GAP-01909","next":"M21-GAP-01911"},"M21-GAP-01911":{"line":5166,"offset":920203,"length":188,"previous":"M21-GAP-01910","next":"M21-GAP-01912"},"M21-GAP-01912":{"line":5167,"offset":920391,"length":188,"previous":"M21-GAP-01911","next":"M21-GAP-01913"},"M21-GAP-01913":{"line":5168,"offset":920579,"length":188,"previous":"M21-GAP-01912","next":"M21-GAP-01914"},"M21-GAP-01914":{"line":5169,"offset":920767,"length":188,"previous":"M21-GAP-01913","next":"M21-GAP-01915"},"M21-GAP-01915":{"line":5170,"offset":920955,"length":195,"previous":"M21-GAP-01914","next":"M21-GAP-01916"},"M21-GAP-01916":{"line":5171,"offset":921150,"length":193,"previous":"M21-GAP-01915","next":"M21-GAP-01917"},"M21-GAP-01917":{"line":5172,"offset":921343,"length":194,"previous":"M21-GAP-01916","next":"M21-GAP-01918"},"M21-GAP-01918":{"line":5173,"offset":921537,"length":205,"previous":"M21-GAP-01917","next":"M21-GAP-01919"},"M21-GAP-01919":{"line":5174,"offset":921742,"length":205,"previous":"M21-GAP-01918","next":"M21-GAP-01920"},"M21-GAP-01920":{"line":5175,"offset":921947,"length":206,"previous":"M21-GAP-01919","next":"M21-GAP-01921"},"M21-GAP-01921":{"line":5176,"offset":922153,"length":206,"previous":"M21-GAP-01920","next":"M21-GAP-01922"},"M21-GAP-01922":{"line":5177,"offset":922359,"length":205,"previous":"M21-GAP-01921","next":"M21-GAP-01923"},"M21-GAP-01923":{"line":5178,"offset":922564,"length":205,"previous":"M21-GAP-01922","next":"M21-GAP-01924"},"M21-GAP-01924":{"line":5179,"offset":922769,"length":205,"previous":"M21-GAP-01923","next":"M21-GAP-01925"},"M21-GAP-01925":{"line":5180,"offset":922974,"length":205,"previous":"M21-GAP-01924","next":"M21-GAP-01926"},"M21-GAP-01926":{"line":5181,"offset":923179,"length":205,"previous":"M21-GAP-01925","next":"M21-GAP-01927"},"M21-GAP-01927":{"line":5182,"offset":923384,"length":205,"previous":"M21-GAP-01926","next":"M21-GAP-01928"},"M21-GAP-01928":{"line":5183,"offset":923589,"length":205,"previous":"M21-GAP-01927","next":"M21-GAP-01929"},"M21-GAP-01929":{"line":5184,"offset":923794,"length":205,"previous":"M21-GAP-01928","next":"M21-GAP-01930"},"M21-GAP-01930":{"line":5185,"offset":923999,"length":194,"previous":"M21-GAP-01929","next":"M21-GAP-01931"},"M21-GAP-01931":{"line":5186,"offset":924193,"length":194,"previous":"M21-GAP-01930","next":"M21-GAP-01932"},"M21-GAP-01932":{"line":5187,"offset":924387,"length":195,"previous":"M21-GAP-01931","next":"M21-GAP-01933"},"M21-GAP-01933":{"line":5188,"offset":924582,"length":195,"previous":"M21-GAP-01932","next":"M21-GAP-01934"},"M21-GAP-01934":{"line":5189,"offset":924777,"length":194,"previous":"M21-GAP-01933","next":"M21-GAP-01935"},"M21-GAP-01935":{"line":5190,"offset":924971,"length":194,"previous":"M21-GAP-01934","next":"M21-GAP-01936"},"M21-GAP-01936":{"line":5191,"offset":925165,"length":194,"previous":"M21-GAP-01935","next":"M21-GAP-01937"},"M21-GAP-01937":{"line":5192,"offset":925359,"length":194,"previous":"M21-GAP-01936","next":"M21-GAP-01938"},"M21-GAP-01938":{"line":5193,"offset":925553,"length":194,"previous":"M21-GAP-01937","next":"M21-GAP-01939"},"M21-GAP-01939":{"line":5194,"offset":925747,"length":194,"previous":"M21-GAP-01938","next":"M21-GAP-01940"},"M21-GAP-01940":{"line":5195,"offset":925941,"length":194,"previous":"M21-GAP-01939","next":"M21-GAP-01941"},"M21-GAP-01941":{"line":5196,"offset":926135,"length":194,"previous":"M21-GAP-01940","next":"M21-GAP-01942"},"M21-GAP-01942":{"line":5197,"offset":926329,"length":208,"previous":"M21-GAP-01941","next":"M21-GAP-01943"},"M21-GAP-01943":{"line":5198,"offset":926537,"length":208,"previous":"M21-GAP-01942","next":"M21-GAP-01944"},"M21-GAP-01944":{"line":5199,"offset":926745,"length":208,"previous":"M21-GAP-01943","next":"M21-GAP-01945"},"M21-GAP-01945":{"line":5200,"offset":926953,"length":197,"previous":"M21-GAP-01944","next":"M21-GAP-01946"},"M21-GAP-01946":{"line":5201,"offset":927150,"length":197,"previous":"M21-GAP-01945","next":"M21-GAP-01947"},"M21-GAP-01947":{"line":5202,"offset":927347,"length":197,"previous":"M21-GAP-01946","next":"M21-GAP-01948"},"M21-GAP-01948":{"line":5203,"offset":927544,"length":207,"previous":"M21-GAP-01947","next":"M21-GAP-01949"},"M21-GAP-01949":{"line":5204,"offset":927751,"length":207,"previous":"M21-GAP-01948","next":"M21-GAP-01950"},"M21-GAP-01950":{"line":5205,"offset":927958,"length":207,"previous":"M21-GAP-01949","next":"M21-GAP-01951"},"M21-GAP-01951":{"line":5206,"offset":928165,"length":196,"previous":"M21-GAP-01950","next":"M21-GAP-01952"},"M21-GAP-01952":{"line":5207,"offset":928361,"length":196,"previous":"M21-GAP-01951","next":"M21-GAP-01953"},"M21-GAP-01953":{"line":5208,"offset":928557,"length":196,"previous":"M21-GAP-01952","next":"M21-GAP-01954"},"M21-GAP-01954":{"line":5209,"offset":928753,"length":200,"previous":"M21-GAP-01953","next":"M21-GAP-01955"},"M21-GAP-01955":{"line":5210,"offset":928953,"length":200,"previous":"M21-GAP-01954","next":"M21-GAP-01956"},"M21-GAP-01956":{"line":5211,"offset":929153,"length":200,"previous":"M21-GAP-01955","next":"M21-GAP-01957"},"M21-GAP-01957":{"line":5212,"offset":929353,"length":200,"previous":"M21-GAP-01956","next":"M21-GAP-01958"},"M21-GAP-01958":{"line":5213,"offset":929553,"length":200,"previous":"M21-GAP-01957","next":"M21-GAP-01959"},"M21-GAP-01959":{"line":5214,"offset":929753,"length":200,"previous":"M21-GAP-01958","next":"M21-GAP-01960"},"M21-GAP-01960":{"line":5215,"offset":929953,"length":200,"previous":"M21-GAP-01959","next":"M21-GAP-01961"},"M21-GAP-01961":{"line":5216,"offset":930153,"length":200,"previous":"M21-GAP-01960","next":"M21-GAP-01962"},"M21-GAP-01962":{"line":5217,"offset":930353,"length":200,"previous":"M21-GAP-01961","next":"M21-GAP-01963"},"M21-GAP-01963":{"line":5218,"offset":930553,"length":189,"previous":"M21-GAP-01962","next":"M21-GAP-01964"},"M21-GAP-01964":{"line":5219,"offset":930742,"length":189,"previous":"M21-GAP-01963","next":"M21-GAP-01965"},"M21-GAP-01965":{"line":5220,"offset":930931,"length":189,"previous":"M21-GAP-01964","next":"M21-GAP-01966"},"M21-GAP-01966":{"line":5221,"offset":931120,"length":189,"previous":"M21-GAP-01965","next":"M21-GAP-01967"},"M21-GAP-01967":{"line":5222,"offset":931309,"length":189,"previous":"M21-GAP-01966","next":"M21-GAP-01968"},"M21-GAP-01968":{"line":5223,"offset":931498,"length":189,"previous":"M21-GAP-01967","next":"M21-GAP-01969"},"M21-GAP-01969":{"line":5224,"offset":931687,"length":189,"previous":"M21-GAP-01968","next":"M21-GAP-01970"},"M21-GAP-01970":{"line":5225,"offset":931876,"length":189,"previous":"M21-GAP-01969","next":"M21-GAP-01971"},"M21-GAP-01971":{"line":5226,"offset":932065,"length":189,"previous":"M21-GAP-01970","next":"M21-GAP-01972"},"M21-GAP-01972":{"line":5227,"offset":932254,"length":178,"previous":"M21-GAP-01971","next":"M21-GAP-01973"},"M21-GAP-01973":{"line":5228,"offset":932432,"length":178,"previous":"M21-GAP-01972","next":"M21-GAP-01974"},"M21-GAP-01974":{"line":5229,"offset":932610,"length":179,"previous":"M21-GAP-01973","next":"M21-GAP-01975"},"M21-GAP-01975":{"line":5230,"offset":932789,"length":179,"previous":"M21-GAP-01974","next":"M21-GAP-01976"},"M21-GAP-01976":{"line":5231,"offset":932968,"length":179,"previous":"M21-GAP-01975","next":"M21-GAP-01977"},"M21-GAP-01977":{"line":5232,"offset":933147,"length":179,"previous":"M21-GAP-01976","next":"M21-GAP-01978"},"M21-GAP-01978":{"line":5233,"offset":933326,"length":179,"previous":"M21-GAP-01977","next":"M21-GAP-01979"},"M21-GAP-01979":{"line":5234,"offset":933505,"length":179,"previous":"M21-GAP-01978","next":"M21-GAP-01980"},"M21-GAP-01980":{"line":5235,"offset":933684,"length":179,"previous":"M21-GAP-01979","next":"M21-GAP-01981"},"M21-GAP-01981":{"line":5236,"offset":933863,"length":179,"previous":"M21-GAP-01980","next":"M21-GAP-01982"},"M21-GAP-01982":{"line":5237,"offset":934042,"length":179,"previous":"M21-GAP-01981","next":"M21-GAP-01983"},"M21-GAP-01983":{"line":5238,"offset":934221,"length":179,"previous":"M21-GAP-01982","next":"M21-GAP-01984"},"M21-GAP-01984":{"line":5239,"offset":934400,"length":178,"previous":"M21-GAP-01983","next":"M21-GAP-01985"},"M21-GAP-01985":{"line":5240,"offset":934578,"length":179,"previous":"M21-GAP-01984","next":"M21-GAP-01986"},"M21-GAP-01986":{"line":5241,"offset":934757,"length":179,"previous":"M21-GAP-01985","next":"M21-GAP-01987"},"M21-GAP-01987":{"line":5242,"offset":934936,"length":179,"previous":"M21-GAP-01986","next":"M21-GAP-01988"},"M21-GAP-01988":{"line":5243,"offset":935115,"length":179,"previous":"M21-GAP-01987","next":"M21-GAP-01989"},"M21-GAP-01989":{"line":5244,"offset":935294,"length":179,"previous":"M21-GAP-01988","next":"M21-GAP-01990"},"M21-GAP-01990":{"line":5245,"offset":935473,"length":179,"previous":"M21-GAP-01989","next":"M21-GAP-01991"},"M21-GAP-01991":{"line":5246,"offset":935652,"length":179,"previous":"M21-GAP-01990","next":"M21-GAP-01992"},"M21-GAP-01992":{"line":5247,"offset":935831,"length":179,"previous":"M21-GAP-01991","next":"M21-GAP-01993"},"M21-GAP-01993":{"line":5248,"offset":936010,"length":179,"previous":"M21-GAP-01992","next":"M21-GAP-01994"},"M21-GAP-01994":{"line":5249,"offset":936189,"length":179,"previous":"M21-GAP-01993","next":"M21-GAP-01995"},"M21-GAP-01995":{"line":5250,"offset":936368,"length":178,"previous":"M21-GAP-01994","next":"M21-GAP-01996"},"M21-GAP-01996":{"line":5251,"offset":936546,"length":179,"previous":"M21-GAP-01995","next":"M21-GAP-01997"},"M21-GAP-01997":{"line":5252,"offset":936725,"length":179,"previous":"M21-GAP-01996","next":"M21-GAP-01998"},"M21-GAP-01998":{"line":5253,"offset":936904,"length":179,"previous":"M21-GAP-01997","next":"M21-GAP-01999"},"M21-GAP-01999":{"line":5254,"offset":937083,"length":179,"previous":"M21-GAP-01998","next":"M21-GAP-02000"},"M21-GAP-02000":{"line":5255,"offset":937262,"length":179,"previous":"M21-GAP-01999","next":"M21-GAP-02001"},"M21-GAP-02001":{"line":5256,"offset":937441,"length":179,"previous":"M21-GAP-02000","next":"M21-GAP-02002"},"M21-GAP-02002":{"line":5257,"offset":937620,"length":179,"previous":"M21-GAP-02001","next":"M21-GAP-02003"},"M21-GAP-02003":{"line":5258,"offset":937799,"length":179,"previous":"M21-GAP-02002","next":"M21-GAP-02004"},"M21-GAP-02004":{"line":5259,"offset":937978,"length":179,"previous":"M21-GAP-02003","next":"M21-GAP-02005"},"M21-GAP-02005":{"line":5260,"offset":938157,"length":179,"previous":"M21-GAP-02004","next":"M21-GAP-02006"},"M21-GAP-02006":{"line":5261,"offset":938336,"length":178,"previous":"M21-GAP-02005","next":"M21-GAP-02007"},"M21-GAP-02007":{"line":5262,"offset":938514,"length":179,"previous":"M21-GAP-02006","next":"M21-GAP-02008"},"M21-GAP-02008":{"line":5263,"offset":938693,"length":179,"previous":"M21-GAP-02007","next":"M21-GAP-02009"},"M21-GAP-02009":{"line":5264,"offset":938872,"length":179,"previous":"M21-GAP-02008","next":"M21-GAP-02010"},"M21-GAP-02010":{"line":5265,"offset":939051,"length":179,"previous":"M21-GAP-02009","next":"M21-GAP-02011"},"M21-GAP-02011":{"line":5266,"offset":939230,"length":179,"previous":"M21-GAP-02010","next":"M21-GAP-02012"},"M21-GAP-02012":{"line":5267,"offset":939409,"length":179,"previous":"M21-GAP-02011","next":"M21-GAP-02013"},"M21-GAP-02013":{"line":5268,"offset":939588,"length":179,"previous":"M21-GAP-02012","next":"M21-GAP-02014"},"M21-GAP-02014":{"line":5269,"offset":939767,"length":179,"previous":"M21-GAP-02013","next":"M21-GAP-02015"},"M21-GAP-02015":{"line":5270,"offset":939946,"length":179,"previous":"M21-GAP-02014","next":"M21-GAP-02016"},"M21-GAP-02016":{"line":5271,"offset":940125,"length":179,"previous":"M21-GAP-02015","next":"M21-GAP-02017"},"M21-GAP-02017":{"line":5272,"offset":940304,"length":178,"previous":"M21-GAP-02016","next":"M21-GAP-02018"},"M21-GAP-02018":{"line":5273,"offset":940482,"length":179,"previous":"M21-GAP-02017","next":"M21-GAP-02019"},"M21-GAP-02019":{"line":5274,"offset":940661,"length":179,"previous":"M21-GAP-02018","next":"M21-GAP-02020"},"M21-GAP-02020":{"line":5275,"offset":940840,"length":179,"previous":"M21-GAP-02019","next":"M21-GAP-02021"},"M21-GAP-02021":{"line":5276,"offset":941019,"length":179,"previous":"M21-GAP-02020","next":"M21-GAP-02022"},"M21-GAP-02022":{"line":5277,"offset":941198,"length":179,"previous":"M21-GAP-02021","next":"M21-GAP-02023"},"M21-GAP-02023":{"line":5278,"offset":941377,"length":179,"previous":"M21-GAP-02022","next":"M21-GAP-02024"},"M21-GAP-02024":{"line":5279,"offset":941556,"length":179,"previous":"M21-GAP-02023","next":"M21-GAP-02025"},"M21-GAP-02025":{"line":5280,"offset":941735,"length":179,"previous":"M21-GAP-02024","next":"M21-GAP-02026"},"M21-GAP-02026":{"line":5281,"offset":941914,"length":179,"previous":"M21-GAP-02025","next":"M21-GAP-02027"},"M21-GAP-02027":{"line":5282,"offset":942093,"length":178,"previous":"M21-GAP-02026","next":"M21-GAP-02028"},"M21-GAP-02028":{"line":5283,"offset":942271,"length":178,"previous":"M21-GAP-02027","next":"M21-GAP-02029"},"M21-GAP-02029":{"line":5284,"offset":942449,"length":178,"previous":"M21-GAP-02028","next":"M21-GAP-02030"},"M21-GAP-02030":{"line":5285,"offset":942627,"length":178,"previous":"M21-GAP-02029","next":"M21-GAP-02031"},"M21-GAP-02031":{"line":5286,"offset":942805,"length":183,"previous":"M21-GAP-02030","next":"M21-GAP-02032"},"M21-GAP-02032":{"line":5287,"offset":942988,"length":183,"previous":"M21-GAP-02031","next":"M21-GAP-02033"},"M21-GAP-02033":{"line":5288,"offset":943171,"length":183,"previous":"M21-GAP-02032","next":"M21-GAP-02034"},"M21-GAP-02034":{"line":5289,"offset":943354,"length":178,"previous":"M21-GAP-02033","next":"M21-GAP-02035"},"M21-GAP-02035":{"line":5290,"offset":943532,"length":178,"previous":"M21-GAP-02034","next":"M21-GAP-02036"},"M21-GAP-02036":{"line":5291,"offset":943710,"length":179,"previous":"M21-GAP-02035","next":"M21-GAP-02037"},"M21-GAP-02037":{"line":5292,"offset":943889,"length":180,"previous":"M21-GAP-02036","next":"M21-GAP-02038"},"M21-GAP-02038":{"line":5293,"offset":944069,"length":180,"previous":"M21-GAP-02037","next":"M21-GAP-02039"},"M21-GAP-02039":{"line":5294,"offset":944249,"length":180,"previous":"M21-GAP-02038","next":"M21-GAP-02040"},"M21-GAP-02040":{"line":5295,"offset":944429,"length":179,"previous":"M21-GAP-02039","next":"M21-GAP-02041"},"M21-GAP-02041":{"line":5296,"offset":944608,"length":179,"previous":"M21-GAP-02040","next":"M21-GAP-02042"},"M21-GAP-02042":{"line":5297,"offset":944787,"length":179,"previous":"M21-GAP-02041","next":"M21-GAP-02043"},"M21-GAP-02043":{"line":5298,"offset":944966,"length":179,"previous":"M21-GAP-02042","next":"M21-GAP-02044"},"M21-GAP-02044":{"line":5299,"offset":945145,"length":179,"previous":"M21-GAP-02043","next":"M21-GAP-02045"},"M21-GAP-02045":{"line":5300,"offset":945324,"length":179,"previous":"M21-GAP-02044","next":"M21-GAP-02046"},"M21-GAP-02046":{"line":5301,"offset":945503,"length":179,"previous":"M21-GAP-02045","next":"M21-GAP-02047"},"M21-GAP-02047":{"line":5302,"offset":945682,"length":179,"previous":"M21-GAP-02046","next":"M21-GAP-02048"},"M21-GAP-02048":{"line":5303,"offset":945861,"length":179,"previous":"M21-GAP-02047","next":"M21-GAP-02049"},"M21-GAP-02049":{"line":5304,"offset":946040,"length":178,"previous":"M21-GAP-02048","next":"M21-GAP-02050"},"M21-GAP-02050":{"line":5305,"offset":946218,"length":179,"previous":"M21-GAP-02049","next":"M21-GAP-02051"},"M21-GAP-02051":{"line":5306,"offset":946397,"length":179,"previous":"M21-GAP-02050","next":"M21-GAP-02052"},"M21-GAP-02052":{"line":5307,"offset":946576,"length":179,"previous":"M21-GAP-02051","next":"M21-GAP-02053"},"M21-GAP-02053":{"line":5308,"offset":946755,"length":179,"previous":"M21-GAP-02052","next":"M21-GAP-02054"},"M21-GAP-02054":{"line":5309,"offset":946934,"length":179,"previous":"M21-GAP-02053","next":"M21-GAP-02055"},"M21-GAP-02055":{"line":5310,"offset":947113,"length":179,"previous":"M21-GAP-02054","next":"M21-GAP-02056"},"M21-GAP-02056":{"line":5311,"offset":947292,"length":179,"previous":"M21-GAP-02055","next":"M21-GAP-02057"},"M21-GAP-02057":{"line":5312,"offset":947471,"length":179,"previous":"M21-GAP-02056","next":"M21-GAP-02058"},"M21-GAP-02058":{"line":5313,"offset":947650,"length":179,"previous":"M21-GAP-02057","next":"M21-GAP-02059"},"M21-GAP-02059":{"line":5314,"offset":947829,"length":179,"previous":"M21-GAP-02058","next":"M21-GAP-02060"},"M21-GAP-02060":{"line":5315,"offset":948008,"length":178,"previous":"M21-GAP-02059","next":"M21-GAP-02061"},"M21-GAP-02061":{"line":5316,"offset":948186,"length":179,"previous":"M21-GAP-02060","next":"M21-GAP-02062"},"M21-GAP-02062":{"line":5317,"offset":948365,"length":179,"previous":"M21-GAP-02061","next":"M21-GAP-02063"},"M21-GAP-02063":{"line":5318,"offset":948544,"length":179,"previous":"M21-GAP-02062","next":"M21-GAP-02064"},"M21-GAP-02064":{"line":5319,"offset":948723,"length":179,"previous":"M21-GAP-02063","next":"M21-GAP-02065"},"M21-GAP-02065":{"line":5320,"offset":948902,"length":179,"previous":"M21-GAP-02064","next":"M21-GAP-02066"},"M21-GAP-02066":{"line":5321,"offset":949081,"length":179,"previous":"M21-GAP-02065","next":"M21-GAP-02067"},"M21-GAP-02067":{"line":5322,"offset":949260,"length":179,"previous":"M21-GAP-02066","next":"M21-GAP-02068"},"M21-GAP-02068":{"line":5323,"offset":949439,"length":179,"previous":"M21-GAP-02067","next":"M21-GAP-02069"},"M21-GAP-02069":{"line":5324,"offset":949618,"length":179,"previous":"M21-GAP-02068","next":"M21-GAP-02070"},"M21-GAP-02070":{"line":5325,"offset":949797,"length":179,"previous":"M21-GAP-02069","next":"M21-GAP-02071"},"M21-GAP-02071":{"line":5326,"offset":949976,"length":178,"previous":"M21-GAP-02070","next":"M21-GAP-02072"},"M21-GAP-02072":{"line":5327,"offset":950154,"length":179,"previous":"M21-GAP-02071","next":"M21-GAP-02073"},"M21-GAP-02073":{"line":5328,"offset":950333,"length":179,"previous":"M21-GAP-02072","next":"M21-GAP-02074"},"M21-GAP-02074":{"line":5329,"offset":950512,"length":179,"previous":"M21-GAP-02073","next":"M21-GAP-02075"},"M21-GAP-02075":{"line":5330,"offset":950691,"length":179,"previous":"M21-GAP-02074","next":"M21-GAP-02076"},"M21-GAP-02076":{"line":5331,"offset":950870,"length":179,"previous":"M21-GAP-02075","next":"M21-GAP-02077"},"M21-GAP-02077":{"line":5332,"offset":951049,"length":179,"previous":"M21-GAP-02076","next":"M21-GAP-02078"},"M21-GAP-02078":{"line":5333,"offset":951228,"length":179,"previous":"M21-GAP-02077","next":"M21-GAP-02079"},"M21-GAP-02079":{"line":5334,"offset":951407,"length":179,"previous":"M21-GAP-02078","next":"M21-GAP-02080"},"M21-GAP-02080":{"line":5335,"offset":951586,"length":179,"previous":"M21-GAP-02079","next":"M21-GAP-02081"},"M21-GAP-02081":{"line":5336,"offset":951765,"length":179,"previous":"M21-GAP-02080","next":"M21-GAP-02082"},"M21-GAP-02082":{"line":5337,"offset":951944,"length":178,"previous":"M21-GAP-02081","next":"M21-GAP-02083"},"M21-GAP-02083":{"line":5338,"offset":952122,"length":179,"previous":"M21-GAP-02082","next":"M21-GAP-02084"},"M21-GAP-02084":{"line":5339,"offset":952301,"length":179,"previous":"M21-GAP-02083","next":"M21-GAP-02085"},"M21-GAP-02085":{"line":5340,"offset":952480,"length":179,"previous":"M21-GAP-02084","next":"M21-GAP-02086"},"M21-GAP-02086":{"line":5341,"offset":952659,"length":179,"previous":"M21-GAP-02085","next":"M21-GAP-02087"},"M21-GAP-02087":{"line":5342,"offset":952838,"length":179,"previous":"M21-GAP-02086","next":"M21-GAP-02088"},"M21-GAP-02088":{"line":5343,"offset":953017,"length":179,"previous":"M21-GAP-02087","next":"M21-GAP-02089"},"M21-GAP-02089":{"line":5344,"offset":953196,"length":179,"previous":"M21-GAP-02088","next":"M21-GAP-02090"},"M21-GAP-02090":{"line":5345,"offset":953375,"length":179,"previous":"M21-GAP-02089","next":"M21-GAP-02091"},"M21-GAP-02091":{"line":5346,"offset":953554,"length":179,"previous":"M21-GAP-02090","next":"M21-GAP-02092"},"M21-GAP-02092":{"line":5347,"offset":953733,"length":179,"previous":"M21-GAP-02091","next":"M21-GAP-02093"},"M21-GAP-02093":{"line":5348,"offset":953912,"length":178,"previous":"M21-GAP-02092","next":"M21-GAP-02094"},"M21-GAP-02094":{"line":5349,"offset":954090,"length":179,"previous":"M21-GAP-02093","next":"M21-GAP-02095"},"M21-GAP-02095":{"line":5350,"offset":954269,"length":179,"previous":"M21-GAP-02094","next":"M21-GAP-02096"},"M21-GAP-02096":{"line":5351,"offset":954448,"length":179,"previous":"M21-GAP-02095","next":"M21-GAP-02097"},"M21-GAP-02097":{"line":5352,"offset":954627,"length":179,"previous":"M21-GAP-02096","next":"M21-GAP-02098"},"M21-GAP-02098":{"line":5353,"offset":954806,"length":179,"previous":"M21-GAP-02097","next":"M21-GAP-02099"},"M21-GAP-02099":{"line":5354,"offset":954985,"length":179,"previous":"M21-GAP-02098","next":"M21-GAP-02100"},"M21-GAP-02100":{"line":5355,"offset":955164,"length":179,"previous":"M21-GAP-02099","next":"M21-GAP-02101"},"M21-GAP-02101":{"line":5356,"offset":955343,"length":179,"previous":"M21-GAP-02100","next":"M21-GAP-02102"},"M21-GAP-02102":{"line":5357,"offset":955522,"length":179,"previous":"M21-GAP-02101","next":"M21-GAP-02103"},"M21-GAP-02103":{"line":5358,"offset":955701,"length":179,"previous":"M21-GAP-02102","next":"M21-GAP-02104"},"M21-GAP-02104":{"line":5359,"offset":955880,"length":178,"previous":"M21-GAP-02103","next":"M21-GAP-02105"},"M21-GAP-02105":{"line":5360,"offset":956058,"length":179,"previous":"M21-GAP-02104","next":"M21-GAP-02106"},"M21-GAP-02106":{"line":5361,"offset":956237,"length":179,"previous":"M21-GAP-02105","next":"M21-GAP-02107"},"M21-GAP-02107":{"line":5362,"offset":956416,"length":179,"previous":"M21-GAP-02106","next":"M21-GAP-02108"},"M21-GAP-02108":{"line":5363,"offset":956595,"length":179,"previous":"M21-GAP-02107","next":"M21-GAP-02109"},"M21-GAP-02109":{"line":5364,"offset":956774,"length":179,"previous":"M21-GAP-02108","next":"M21-GAP-02110"},"M21-GAP-02110":{"line":5365,"offset":956953,"length":179,"previous":"M21-GAP-02109","next":"M21-GAP-02111"},"M21-GAP-02111":{"line":5366,"offset":957132,"length":179,"previous":"M21-GAP-02110","next":"M21-GAP-02112"},"M21-GAP-02112":{"line":5367,"offset":957311,"length":179,"previous":"M21-GAP-02111","next":"M21-GAP-02113"},"M21-GAP-02113":{"line":5368,"offset":957490,"length":179,"previous":"M21-GAP-02112","next":"M21-GAP-02114"},"M21-GAP-02114":{"line":5369,"offset":957669,"length":179,"previous":"M21-GAP-02113","next":"M21-GAP-02115"},"M21-GAP-02115":{"line":5370,"offset":957848,"length":178,"previous":"M21-GAP-02114","next":"M21-GAP-02116"},"M21-GAP-02116":{"line":5371,"offset":958026,"length":179,"previous":"M21-GAP-02115","next":"M21-GAP-02117"},"M21-GAP-02117":{"line":5372,"offset":958205,"length":179,"previous":"M21-GAP-02116","next":"M21-GAP-02118"},"M21-GAP-02118":{"line":5373,"offset":958384,"length":179,"previous":"M21-GAP-02117","next":"M21-GAP-02119"},"M21-GAP-02119":{"line":5374,"offset":958563,"length":179,"previous":"M21-GAP-02118","next":"M21-GAP-02120"},"M21-GAP-02120":{"line":5375,"offset":958742,"length":179,"previous":"M21-GAP-02119","next":"M21-GAP-02121"},"M21-GAP-02121":{"line":5376,"offset":958921,"length":179,"previous":"M21-GAP-02120","next":"M21-GAP-02122"},"M21-GAP-02122":{"line":5377,"offset":959100,"length":179,"previous":"M21-GAP-02121","next":"M21-GAP-02123"},"M21-GAP-02123":{"line":5378,"offset":959279,"length":179,"previous":"M21-GAP-02122","next":"M21-GAP-02124"},"M21-GAP-02124":{"line":5379,"offset":959458,"length":179,"previous":"M21-GAP-02123","next":"M21-GAP-02125"},"M21-GAP-02125":{"line":5380,"offset":959637,"length":179,"previous":"M21-GAP-02124","next":"M21-GAP-02126"},"M21-GAP-02126":{"line":5381,"offset":959816,"length":178,"previous":"M21-GAP-02125","next":"M21-GAP-02127"},"M21-GAP-02127":{"line":5382,"offset":959994,"length":179,"previous":"M21-GAP-02126","next":"M21-GAP-02128"},"M21-GAP-02128":{"line":5383,"offset":960173,"length":179,"previous":"M21-GAP-02127","next":"M21-GAP-02129"},"M21-GAP-02129":{"line":5384,"offset":960352,"length":179,"previous":"M21-GAP-02128","next":"M21-GAP-02130"},"M21-GAP-02130":{"line":5385,"offset":960531,"length":179,"previous":"M21-GAP-02129","next":"M21-GAP-02131"},"M21-GAP-02131":{"line":5386,"offset":960710,"length":179,"previous":"M21-GAP-02130","next":"M21-GAP-02132"},"M21-GAP-02132":{"line":5387,"offset":960889,"length":179,"previous":"M21-GAP-02131","next":"M21-GAP-02133"},"M21-GAP-02133":{"line":5388,"offset":961068,"length":179,"previous":"M21-GAP-02132","next":"M21-GAP-02134"},"M21-GAP-02134":{"line":5389,"offset":961247,"length":179,"previous":"M21-GAP-02133","next":"M21-GAP-02135"},"M21-GAP-02135":{"line":5390,"offset":961426,"length":179,"previous":"M21-GAP-02134","next":"M21-GAP-02136"},"M21-GAP-02136":{"line":5391,"offset":961605,"length":179,"previous":"M21-GAP-02135","next":"M21-GAP-02137"},"M21-GAP-02137":{"line":5392,"offset":961784,"length":178,"previous":"M21-GAP-02136","next":"M21-GAP-02138"},"M21-GAP-02138":{"line":5393,"offset":961962,"length":178,"previous":"M21-GAP-02137","next":"M21-GAP-02139"},"M21-GAP-02139":{"line":5394,"offset":962140,"length":179,"previous":"M21-GAP-02138","next":"M21-GAP-02140"},"M21-GAP-02140":{"line":5395,"offset":962319,"length":179,"previous":"M21-GAP-02139","next":"M21-GAP-02141"},"M21-GAP-02141":{"line":5396,"offset":962498,"length":179,"previous":"M21-GAP-02140","next":"M21-GAP-02142"},"M21-GAP-02142":{"line":5397,"offset":962677,"length":179,"previous":"M21-GAP-02141","next":"M21-GAP-02143"},"M21-GAP-02143":{"line":5398,"offset":962856,"length":179,"previous":"M21-GAP-02142","next":"M21-GAP-02144"},"M21-GAP-02144":{"line":5399,"offset":963035,"length":178,"previous":"M21-GAP-02143","next":"M21-GAP-02145"},"M21-GAP-02145":{"line":5400,"offset":963213,"length":178,"previous":"M21-GAP-02144","next":"M21-GAP-02146"},"M21-GAP-02146":{"line":5401,"offset":963391,"length":178,"previous":"M21-GAP-02145","next":"M21-GAP-02147"},"M21-GAP-02147":{"line":5402,"offset":963569,"length":178,"previous":"M21-GAP-02146","next":"M21-GAP-02148"},"M21-GAP-02148":{"line":5403,"offset":963747,"length":178,"previous":"M21-GAP-02147","next":"M21-GAP-02149"},"M21-GAP-02149":{"line":5404,"offset":963925,"length":178,"previous":"M21-GAP-02148","next":"M21-GAP-02150"},"M21-GAP-02150":{"line":5405,"offset":964103,"length":178,"previous":"M21-GAP-02149","next":"M21-GAP-02151"},"M21-GAP-02151":{"line":5406,"offset":964281,"length":178,"previous":"M21-GAP-02150","next":"M21-GAP-02152"},"M21-GAP-02152":{"line":5407,"offset":964459,"length":208,"previous":"M21-GAP-02151","next":"M21-GAP-02153"},"M21-GAP-02153":{"line":5408,"offset":964667,"length":208,"previous":"M21-GAP-02152","next":"M21-GAP-02154"},"M21-GAP-02154":{"line":5409,"offset":964875,"length":209,"previous":"M21-GAP-02153","next":"M21-GAP-02155"},"M21-GAP-02155":{"line":5410,"offset":965084,"length":209,"previous":"M21-GAP-02154","next":"M21-GAP-02156"},"M21-GAP-02156":{"line":5411,"offset":965293,"length":209,"previous":"M21-GAP-02155","next":"M21-GAP-02157"},"M21-GAP-02157":{"line":5412,"offset":965502,"length":209,"previous":"M21-GAP-02156","next":"M21-GAP-02158"},"M21-GAP-02158":{"line":5413,"offset":965711,"length":208,"previous":"M21-GAP-02157","next":"M21-GAP-02159"},"M21-GAP-02159":{"line":5414,"offset":965919,"length":208,"previous":"M21-GAP-02158","next":"M21-GAP-02160"},"M21-GAP-02160":{"line":5415,"offset":966127,"length":208,"previous":"M21-GAP-02159","next":"M21-GAP-02161"},"M21-GAP-02161":{"line":5416,"offset":966335,"length":208,"previous":"M21-GAP-02160","next":"M21-GAP-02162"},"M21-GAP-02162":{"line":5417,"offset":966543,"length":208,"previous":"M21-GAP-02161","next":"M21-GAP-02163"},"M21-GAP-02163":{"line":5418,"offset":966751,"length":208,"previous":"M21-GAP-02162","next":"M21-GAP-02164"},"M21-GAP-02164":{"line":5419,"offset":966959,"length":208,"previous":"M21-GAP-02163","next":"M21-GAP-02165"},"M21-GAP-02165":{"line":5420,"offset":967167,"length":208,"previous":"M21-GAP-02164","next":"M21-GAP-02166"},"M21-GAP-02166":{"line":5421,"offset":967375,"length":185,"previous":"M21-GAP-02165","next":"M21-GAP-02167"},"M21-GAP-02167":{"line":5422,"offset":967560,"length":206,"previous":"M21-GAP-02166","next":"M21-GAP-02168"},"M21-GAP-02168":{"line":5423,"offset":967766,"length":206,"previous":"M21-GAP-02167","next":"M21-GAP-02169"},"M21-GAP-02169":{"line":5424,"offset":967972,"length":207,"previous":"M21-GAP-02168","next":"M21-GAP-02170"},"M21-GAP-02170":{"line":5425,"offset":968179,"length":207,"previous":"M21-GAP-02169","next":"M21-GAP-02171"},"M21-GAP-02171":{"line":5426,"offset":968386,"length":207,"previous":"M21-GAP-02170","next":"M21-GAP-02172"},"M21-GAP-02172":{"line":5427,"offset":968593,"length":207,"previous":"M21-GAP-02171","next":"M21-GAP-02173"},"M21-GAP-02173":{"line":5428,"offset":968800,"length":207,"previous":"M21-GAP-02172","next":"M21-GAP-02174"},"M21-GAP-02174":{"line":5429,"offset":969007,"length":207,"previous":"M21-GAP-02173","next":"M21-GAP-02175"},"M21-GAP-02175":{"line":5430,"offset":969214,"length":206,"previous":"M21-GAP-02174","next":"M21-GAP-02176"},"M21-GAP-02176":{"line":5431,"offset":969420,"length":206,"previous":"M21-GAP-02175","next":"M21-GAP-02177"},"M21-GAP-02177":{"line":5432,"offset":969626,"length":206,"previous":"M21-GAP-02176","next":"M21-GAP-02178"},"M21-GAP-02178":{"line":5433,"offset":969832,"length":206,"previous":"M21-GAP-02177","next":"M21-GAP-02179"},"M21-GAP-02179":{"line":5434,"offset":970038,"length":206,"previous":"M21-GAP-02178","next":"M21-GAP-02180"},"M21-GAP-02180":{"line":5435,"offset":970244,"length":206,"previous":"M21-GAP-02179","next":"M21-GAP-02181"},"M21-GAP-02181":{"line":5436,"offset":970450,"length":206,"previous":"M21-GAP-02180","next":"M21-GAP-02182"},"M21-GAP-02182":{"line":5437,"offset":970656,"length":206,"previous":"M21-GAP-02181","next":"M21-GAP-02183"},"M21-GAP-02183":{"line":5438,"offset":970862,"length":175,"previous":"M21-GAP-02182","next":"M21-GAP-02184"},"M21-GAP-02184":{"line":5439,"offset":971037,"length":175,"previous":"M21-GAP-02183","next":"M21-GAP-02185"},"M21-GAP-02185":{"line":5440,"offset":971212,"length":176,"previous":"M21-GAP-02184","next":"M21-GAP-02186"},"M21-GAP-02186":{"line":5441,"offset":971388,"length":176,"previous":"M21-GAP-02185","next":"M21-GAP-02187"},"M21-GAP-02187":{"line":5442,"offset":971564,"length":176,"previous":"M21-GAP-02186","next":"M21-GAP-02188"},"M21-GAP-02188":{"line":5443,"offset":971740,"length":176,"previous":"M21-GAP-02187","next":"M21-GAP-02189"},"M21-GAP-02189":{"line":5444,"offset":971916,"length":176,"previous":"M21-GAP-02188","next":"M21-GAP-02190"},"M21-GAP-02190":{"line":5445,"offset":972092,"length":176,"previous":"M21-GAP-02189","next":"M21-GAP-02191"},"M21-GAP-02191":{"line":5446,"offset":972268,"length":176,"previous":"M21-GAP-02190","next":"M21-GAP-02192"},"M21-GAP-02192":{"line":5447,"offset":972444,"length":176,"previous":"M21-GAP-02191","next":"M21-GAP-02193"},"M21-GAP-02193":{"line":5448,"offset":972620,"length":176,"previous":"M21-GAP-02192","next":"M21-GAP-02194"},"M21-GAP-02194":{"line":5449,"offset":972796,"length":176,"previous":"M21-GAP-02193","next":"M21-GAP-02195"},"M21-GAP-02195":{"line":5450,"offset":972972,"length":175,"previous":"M21-GAP-02194","next":"M21-GAP-02196"},"M21-GAP-02196":{"line":5451,"offset":973147,"length":176,"previous":"M21-GAP-02195","next":"M21-GAP-02197"},"M21-GAP-02197":{"line":5452,"offset":973323,"length":176,"previous":"M21-GAP-02196","next":"M21-GAP-02198"},"M21-GAP-02198":{"line":5453,"offset":973499,"length":176,"previous":"M21-GAP-02197","next":"M21-GAP-02199"},"M21-GAP-02199":{"line":5454,"offset":973675,"length":176,"previous":"M21-GAP-02198","next":"M21-GAP-02200"},"M21-GAP-02200":{"line":5455,"offset":973851,"length":176,"previous":"M21-GAP-02199","next":"M21-GAP-02201"},"M21-GAP-02201":{"line":5456,"offset":974027,"length":176,"previous":"M21-GAP-02200","next":"M21-GAP-02202"},"M21-GAP-02202":{"line":5457,"offset":974203,"length":176,"previous":"M21-GAP-02201","next":"M21-GAP-02203"},"M21-GAP-02203":{"line":5458,"offset":974379,"length":176,"previous":"M21-GAP-02202","next":"M21-GAP-02204"},"M21-GAP-02204":{"line":5459,"offset":974555,"length":176,"previous":"M21-GAP-02203","next":"M21-GAP-02205"},"M21-GAP-02205":{"line":5460,"offset":974731,"length":176,"previous":"M21-GAP-02204","next":"M21-GAP-02206"},"M21-GAP-02206":{"line":5461,"offset":974907,"length":175,"previous":"M21-GAP-02205","next":"M21-GAP-02207"},"M21-GAP-02207":{"line":5462,"offset":975082,"length":175,"previous":"M21-GAP-02206","next":"M21-GAP-02208"},"M21-GAP-02208":{"line":5463,"offset":975257,"length":175,"previous":"M21-GAP-02207","next":"M21-GAP-02209"},"M21-GAP-02209":{"line":5464,"offset":975432,"length":175,"previous":"M21-GAP-02208","next":"M21-GAP-02210"},"M21-GAP-02210":{"line":5465,"offset":975607,"length":175,"previous":"M21-GAP-02209","next":"M21-GAP-02211"},"M21-GAP-02211":{"line":5466,"offset":975782,"length":175,"previous":"M21-GAP-02210","next":"M21-GAP-02212"},"M21-GAP-02212":{"line":5467,"offset":975957,"length":175,"previous":"M21-GAP-02211","next":"M21-GAP-02213"},"M21-GAP-02213":{"line":5468,"offset":976132,"length":185,"previous":"M21-GAP-02212","next":"M21-GAP-02214"},"M21-GAP-02214":{"line":5469,"offset":976317,"length":185,"previous":"M21-GAP-02213","next":"M21-GAP-02215"},"M21-GAP-02215":{"line":5470,"offset":976502,"length":185,"previous":"M21-GAP-02214","next":"M21-GAP-02216"},"M21-GAP-02216":{"line":5471,"offset":976687,"length":178,"previous":"M21-GAP-02215","next":"M21-GAP-02217"},"M21-GAP-02217":{"line":5472,"offset":976865,"length":178,"previous":"M21-GAP-02216","next":"M21-GAP-02218"},"M21-GAP-02218":{"line":5473,"offset":977043,"length":179,"previous":"M21-GAP-02217","next":"M21-GAP-02219"},"M21-GAP-02219":{"line":5474,"offset":977222,"length":179,"previous":"M21-GAP-02218","next":"M21-GAP-02220"},"M21-GAP-02220":{"line":5475,"offset":977401,"length":179,"previous":"M21-GAP-02219","next":"M21-GAP-02221"},"M21-GAP-02221":{"line":5476,"offset":977580,"length":179,"previous":"M21-GAP-02220","next":"M21-GAP-02222"},"M21-GAP-02222":{"line":5477,"offset":977759,"length":179,"previous":"M21-GAP-02221","next":"M21-GAP-02223"},"M21-GAP-02223":{"line":5478,"offset":977938,"length":179,"previous":"M21-GAP-02222","next":"M21-GAP-02224"},"M21-GAP-02224":{"line":5479,"offset":978117,"length":179,"previous":"M21-GAP-02223","next":"M21-GAP-02225"},"M21-GAP-02225":{"line":5480,"offset":978296,"length":179,"previous":"M21-GAP-02224","next":"M21-GAP-02226"},"M21-GAP-02226":{"line":5481,"offset":978475,"length":178,"previous":"M21-GAP-02225","next":"M21-GAP-02227"},"M21-GAP-02227":{"line":5482,"offset":978653,"length":178,"previous":"M21-GAP-02226","next":"M21-GAP-02228"},"M21-GAP-02228":{"line":5483,"offset":978831,"length":178,"previous":"M21-GAP-02227","next":"M21-GAP-02229"},"M21-GAP-02229":{"line":5484,"offset":979009,"length":178,"previous":"M21-GAP-02228","next":"M21-GAP-02230"},"M21-GAP-02230":{"line":5485,"offset":979187,"length":178,"previous":"M21-GAP-02229","next":"M21-GAP-02231"},"M21-GAP-02231":{"line":5486,"offset":979365,"length":178,"previous":"M21-GAP-02230","next":"M21-GAP-02232"},"M21-GAP-02232":{"line":5487,"offset":979543,"length":178,"previous":"M21-GAP-02231","next":"M21-GAP-02233"},"M21-GAP-02233":{"line":5488,"offset":979721,"length":178,"previous":"M21-GAP-02232","next":"M21-GAP-02234"},"M21-GAP-02234":{"line":5489,"offset":979899,"length":171,"previous":"M21-GAP-02233","next":"M21-GAP-02235"},"M21-GAP-02235":{"line":5490,"offset":980070,"length":171,"previous":"M21-GAP-02234","next":"M21-GAP-02236"},"M21-GAP-02236":{"line":5491,"offset":980241,"length":172,"previous":"M21-GAP-02235","next":"M21-GAP-02237"},"M21-GAP-02237":{"line":5492,"offset":980413,"length":172,"previous":"M21-GAP-02236","next":"M21-GAP-02238"},"M21-GAP-02238":{"line":5493,"offset":980585,"length":172,"previous":"M21-GAP-02237","next":"M21-GAP-02239"},"M21-GAP-02239":{"line":5494,"offset":980757,"length":172,"previous":"M21-GAP-02238","next":"M21-GAP-02240"},"M21-GAP-02240":{"line":5495,"offset":980929,"length":172,"previous":"M21-GAP-02239","next":"M21-GAP-02241"},"M21-GAP-02241":{"line":5496,"offset":981101,"length":172,"previous":"M21-GAP-02240","next":"M21-GAP-02242"},"M21-GAP-02242":{"line":5497,"offset":981273,"length":172,"previous":"M21-GAP-02241","next":"M21-GAP-02243"},"M21-GAP-02243":{"line":5498,"offset":981445,"length":172,"previous":"M21-GAP-02242","next":"M21-GAP-02244"},"M21-GAP-02244":{"line":5499,"offset":981617,"length":172,"previous":"M21-GAP-02243","next":"M21-GAP-02245"},"M21-GAP-02245":{"line":5500,"offset":981789,"length":172,"previous":"M21-GAP-02244","next":"M21-GAP-02246"},"M21-GAP-02246":{"line":5501,"offset":981961,"length":171,"previous":"M21-GAP-02245","next":"M21-GAP-02247"},"M21-GAP-02247":{"line":5502,"offset":982132,"length":172,"previous":"M21-GAP-02246","next":"M21-GAP-02248"},"M21-GAP-02248":{"line":5503,"offset":982304,"length":172,"previous":"M21-GAP-02247","next":"M21-GAP-02249"},"M21-GAP-02249":{"line":5504,"offset":982476,"length":172,"previous":"M21-GAP-02248","next":"M21-GAP-02250"},"M21-GAP-02250":{"line":5505,"offset":982648,"length":172,"previous":"M21-GAP-02249","next":"M21-GAP-02251"},"M21-GAP-02251":{"line":5506,"offset":982820,"length":172,"previous":"M21-GAP-02250","next":"M21-GAP-02252"},"M21-GAP-02252":{"line":5507,"offset":982992,"length":172,"previous":"M21-GAP-02251","next":"M21-GAP-02253"},"M21-GAP-02253":{"line":5508,"offset":983164,"length":172,"previous":"M21-GAP-02252","next":"M21-GAP-02254"},"M21-GAP-02254":{"line":5509,"offset":983336,"length":172,"previous":"M21-GAP-02253","next":"M21-GAP-02255"},"M21-GAP-02255":{"line":5510,"offset":983508,"length":172,"previous":"M21-GAP-02254","next":"M21-GAP-02256"},"M21-GAP-02256":{"line":5511,"offset":983680,"length":172,"previous":"M21-GAP-02255","next":"M21-GAP-02257"},"M21-GAP-02257":{"line":5512,"offset":983852,"length":171,"previous":"M21-GAP-02256","next":"M21-GAP-02258"},"M21-GAP-02258":{"line":5513,"offset":984023,"length":172,"previous":"M21-GAP-02257","next":"M21-GAP-02259"},"M21-GAP-02259":{"line":5514,"offset":984195,"length":172,"previous":"M21-GAP-02258","next":"M21-GAP-02260"},"M21-GAP-02260":{"line":5515,"offset":984367,"length":172,"previous":"M21-GAP-02259","next":"M21-GAP-02261"},"M21-GAP-02261":{"line":5516,"offset":984539,"length":172,"previous":"M21-GAP-02260","next":"M21-GAP-02262"},"M21-GAP-02262":{"line":5517,"offset":984711,"length":172,"previous":"M21-GAP-02261","next":"M21-GAP-02263"},"M21-GAP-02263":{"line":5518,"offset":984883,"length":172,"previous":"M21-GAP-02262","next":"M21-GAP-02264"},"M21-GAP-02264":{"line":5519,"offset":985055,"length":172,"previous":"M21-GAP-02263","next":"M21-GAP-02265"},"M21-GAP-02265":{"line":5520,"offset":985227,"length":172,"previous":"M21-GAP-02264","next":"M21-GAP-02266"},"M21-GAP-02266":{"line":5521,"offset":985399,"length":172,"previous":"M21-GAP-02265","next":"M21-GAP-02267"},"M21-GAP-02267":{"line":5522,"offset":985571,"length":172,"previous":"M21-GAP-02266","next":"M21-GAP-02268"},"M21-GAP-02268":{"line":5523,"offset":985743,"length":171,"previous":"M21-GAP-02267","next":"M21-GAP-02269"},"M21-GAP-02269":{"line":5524,"offset":985914,"length":172,"previous":"M21-GAP-02268","next":"M21-GAP-02270"},"M21-GAP-02270":{"line":5525,"offset":986086,"length":172,"previous":"M21-GAP-02269","next":"M21-GAP-02271"},"M21-GAP-02271":{"line":5526,"offset":986258,"length":172,"previous":"M21-GAP-02270","next":"M21-GAP-02272"},"M21-GAP-02272":{"line":5527,"offset":986430,"length":172,"previous":"M21-GAP-02271","next":"M21-GAP-02273"},"M21-GAP-02273":{"line":5528,"offset":986602,"length":172,"previous":"M21-GAP-02272","next":"M21-GAP-02274"},"M21-GAP-02274":{"line":5529,"offset":986774,"length":172,"previous":"M21-GAP-02273","next":"M21-GAP-02275"},"M21-GAP-02275":{"line":5530,"offset":986946,"length":172,"previous":"M21-GAP-02274","next":"M21-GAP-02276"},"M21-GAP-02276":{"line":5531,"offset":987118,"length":172,"previous":"M21-GAP-02275","next":"M21-GAP-02277"},"M21-GAP-02277":{"line":5532,"offset":987290,"length":172,"previous":"M21-GAP-02276","next":"M21-GAP-02278"},"M21-GAP-02278":{"line":5533,"offset":987462,"length":172,"previous":"M21-GAP-02277","next":"M21-GAP-02279"},"M21-GAP-02279":{"line":5534,"offset":987634,"length":171,"previous":"M21-GAP-02278","next":"M21-GAP-02280"},"M21-GAP-02280":{"line":5535,"offset":987805,"length":172,"previous":"M21-GAP-02279","next":"M21-GAP-02281"},"M21-GAP-02281":{"line":5536,"offset":987977,"length":172,"previous":"M21-GAP-02280","next":"M21-GAP-02282"},"M21-GAP-02282":{"line":5537,"offset":988149,"length":172,"previous":"M21-GAP-02281","next":"M21-GAP-02283"},"M21-GAP-02283":{"line":5538,"offset":988321,"length":171,"previous":"M21-GAP-02282","next":"M21-GAP-02284"},"M21-GAP-02284":{"line":5539,"offset":988492,"length":171,"previous":"M21-GAP-02283","next":"M21-GAP-02285"},"M21-GAP-02285":{"line":5540,"offset":988663,"length":171,"previous":"M21-GAP-02284","next":"M21-GAP-02286"},"M21-GAP-02286":{"line":5541,"offset":988834,"length":171,"previous":"M21-GAP-02285","next":"M21-GAP-02287"},"M21-GAP-02287":{"line":5542,"offset":989005,"length":184,"previous":"M21-GAP-02286","next":"M21-GAP-02288"},"M21-GAP-02288":{"line":5543,"offset":989189,"length":184,"previous":"M21-GAP-02287","next":"M21-GAP-02289"},"M21-GAP-02289":{"line":5544,"offset":989373,"length":184,"previous":"M21-GAP-02288","next":"M21-GAP-02290"},"M21-GAP-02290":{"line":5545,"offset":989557,"length":184,"previous":"M21-GAP-02289","next":"M21-GAP-02291"},"M21-GAP-02291":{"line":5546,"offset":989741,"length":197,"previous":"M21-GAP-02290","next":"M21-GAP-02292"},"M21-GAP-02292":{"line":5547,"offset":989938,"length":197,"previous":"M21-GAP-02291","next":"M21-GAP-02293"},"M21-GAP-02293":{"line":5548,"offset":990135,"length":195,"previous":"M21-GAP-02292","next":"M21-GAP-02294"},"M21-GAP-02294":{"line":5549,"offset":990330,"length":197,"previous":"M21-GAP-02293","next":"M21-GAP-02295"},"M21-GAP-02295":{"line":5550,"offset":990527,"length":197,"previous":"M21-GAP-02294","next":"M21-GAP-02296"},"M21-GAP-02296":{"line":5551,"offset":990724,"length":196,"previous":"M21-GAP-02295","next":"M21-GAP-02297"},"M21-GAP-02297":{"line":5552,"offset":990920,"length":212,"previous":"M21-GAP-02296","next":"M21-GAP-02298"},"M21-GAP-02298":{"line":5553,"offset":991132,"length":212,"previous":"M21-GAP-02297","next":"M21-GAP-02299"},"M21-GAP-02299":{"line":5554,"offset":991344,"length":212,"previous":"M21-GAP-02298","next":"M21-GAP-02300"},"M21-GAP-02300":{"line":5555,"offset":991556,"length":212,"previous":"M21-GAP-02299","next":"M21-GAP-02301"},"M21-GAP-02301":{"line":5556,"offset":991768,"length":212,"previous":"M21-GAP-02300","next":"M21-GAP-02302"},"M21-GAP-02302":{"line":5557,"offset":991980,"length":201,"previous":"M21-GAP-02301","next":"M21-GAP-02303"},"M21-GAP-02303":{"line":5558,"offset":992181,"length":201,"previous":"M21-GAP-02302","next":"M21-GAP-02304"},"M21-GAP-02304":{"line":5559,"offset":992382,"length":201,"previous":"M21-GAP-02303","next":"M21-GAP-02305"},"M21-GAP-02305":{"line":5560,"offset":992583,"length":201,"previous":"M21-GAP-02304","next":"M21-GAP-02306"},"M21-GAP-02306":{"line":5561,"offset":992784,"length":201,"previous":"M21-GAP-02305","next":"M21-GAP-02307"},"M21-GAP-02307":{"line":5562,"offset":992985,"length":215,"previous":"M21-GAP-02306","next":"M21-GAP-02308"},"M21-GAP-02308":{"line":5563,"offset":993200,"length":215,"previous":"M21-GAP-02307","next":"M21-GAP-02309"},"M21-GAP-02309":{"line":5564,"offset":993415,"length":215,"previous":"M21-GAP-02308","next":"M21-GAP-02310"},"M21-GAP-02310":{"line":5565,"offset":993630,"length":204,"previous":"M21-GAP-02309","next":"M21-GAP-02311"},"M21-GAP-02311":{"line":5566,"offset":993834,"length":204,"previous":"M21-GAP-02310","next":"M21-GAP-02312"},"M21-GAP-02312":{"line":5567,"offset":994038,"length":204,"previous":"M21-GAP-02311","next":"M21-GAP-02313"},"M21-GAP-02313":{"line":5568,"offset":994242,"length":214,"previous":"M21-GAP-02312","next":"M21-GAP-02314"},"M21-GAP-02314":{"line":5569,"offset":994456,"length":214,"previous":"M21-GAP-02313","next":"M21-GAP-02315"},"M21-GAP-02315":{"line":5570,"offset":994670,"length":214,"previous":"M21-GAP-02314","next":"M21-GAP-02316"},"M21-GAP-02316":{"line":5571,"offset":994884,"length":203,"previous":"M21-GAP-02315","next":"M21-GAP-02317"},"M21-GAP-02317":{"line":5572,"offset":995087,"length":203,"previous":"M21-GAP-02316","next":"M21-GAP-02318"},"M21-GAP-02318":{"line":5573,"offset":995290,"length":203,"previous":"M21-GAP-02317","next":"M21-GAP-02319"},"M21-GAP-02319":{"line":5574,"offset":995493,"length":207,"previous":"M21-GAP-02318","next":"M21-GAP-02320"},"M21-GAP-02320":{"line":5575,"offset":995700,"length":207,"previous":"M21-GAP-02319","next":"M21-GAP-02321"},"M21-GAP-02321":{"line":5576,"offset":995907,"length":207,"previous":"M21-GAP-02320","next":"M21-GAP-02322"},"M21-GAP-02322":{"line":5577,"offset":996114,"length":207,"previous":"M21-GAP-02321","next":"M21-GAP-02323"},"M21-GAP-02323":{"line":5578,"offset":996321,"length":207,"previous":"M21-GAP-02322","next":"M21-GAP-02324"},"M21-GAP-02324":{"line":5579,"offset":996528,"length":196,"previous":"M21-GAP-02323","next":"M21-GAP-02325"},"M21-GAP-02325":{"line":5580,"offset":996724,"length":196,"previous":"M21-GAP-02324","next":"M21-GAP-02326"},"M21-GAP-02326":{"line":5581,"offset":996920,"length":196,"previous":"M21-GAP-02325","next":"M21-GAP-02327"},"M21-GAP-02327":{"line":5582,"offset":997116,"length":196,"previous":"M21-GAP-02326","next":"M21-GAP-02328"},"M21-GAP-02328":{"line":5583,"offset":997312,"length":196,"previous":"M21-GAP-02327","next":"M21-GAP-02329"},"M21-GAP-02329":{"line":5584,"offset":997508,"length":184,"previous":"M21-GAP-02328","next":"M21-GAP-02330"},"M21-GAP-02330":{"line":5585,"offset":997692,"length":184,"previous":"M21-GAP-02329","next":"M21-GAP-02331"},"M21-GAP-02331":{"line":5586,"offset":997876,"length":185,"previous":"M21-GAP-02330","next":"M21-GAP-02332"},"M21-GAP-02332":{"line":5587,"offset":998061,"length":185,"previous":"M21-GAP-02331","next":"M21-GAP-02333"},"M21-GAP-02333":{"line":5588,"offset":998246,"length":185,"previous":"M21-GAP-02332","next":"M21-GAP-02334"},"M21-GAP-02334":{"line":5589,"offset":998431,"length":185,"previous":"M21-GAP-02333","next":"M21-GAP-02335"},"M21-GAP-02335":{"line":5590,"offset":998616,"length":185,"previous":"M21-GAP-02334","next":"M21-GAP-02336"},"M21-GAP-02336":{"line":5591,"offset":998801,"length":185,"previous":"M21-GAP-02335","next":"M21-GAP-02337"},"M21-GAP-02337":{"line":5592,"offset":998986,"length":185,"previous":"M21-GAP-02336","next":"M21-GAP-02338"},"M21-GAP-02338":{"line":5593,"offset":999171,"length":185,"previous":"M21-GAP-02337","next":"M21-GAP-02339"},"M21-GAP-02339":{"line":5594,"offset":999356,"length":185,"previous":"M21-GAP-02338","next":"M21-GAP-02340"},"M21-GAP-02340":{"line":5595,"offset":999541,"length":185,"previous":"M21-GAP-02339","next":"M21-GAP-02341"},"M21-GAP-02341":{"line":5596,"offset":999726,"length":184,"previous":"M21-GAP-02340","next":"M21-GAP-02342"},"M21-GAP-02342":{"line":5597,"offset":999910,"length":185,"previous":"M21-GAP-02341","next":"M21-GAP-02343"},"M21-GAP-02343":{"line":5598,"offset":1000095,"length":185,"previous":"M21-GAP-02342","next":"M21-GAP-02344"},"M21-GAP-02344":{"line":5599,"offset":1000280,"length":185,"previous":"M21-GAP-02343","next":"M21-GAP-02345"},"M21-GAP-02345":{"line":5600,"offset":1000465,"length":185,"previous":"M21-GAP-02344","next":"M21-GAP-02346"},"M21-GAP-02346":{"line":5601,"offset":1000650,"length":185,"previous":"M21-GAP-02345","next":"M21-GAP-02347"},"M21-GAP-02347":{"line":5602,"offset":1000835,"length":185,"previous":"M21-GAP-02346","next":"M21-GAP-02348"},"M21-GAP-02348":{"line":5603,"offset":1001020,"length":185,"previous":"M21-GAP-02347","next":"M21-GAP-02349"},"M21-GAP-02349":{"line":5604,"offset":1001205,"length":185,"previous":"M21-GAP-02348","next":"M21-GAP-02350"},"M21-GAP-02350":{"line":5605,"offset":1001390,"length":185,"previous":"M21-GAP-02349","next":"M21-GAP-02351"},"M21-GAP-02351":{"line":5606,"offset":1001575,"length":185,"previous":"M21-GAP-02350","next":"M21-GAP-02352"},"M21-GAP-02352":{"line":5607,"offset":1001760,"length":184,"previous":"M21-GAP-02351","next":"M21-GAP-02353"},"M21-GAP-02353":{"line":5608,"offset":1001944,"length":185,"previous":"M21-GAP-02352","next":"M21-GAP-02354"},"M21-GAP-02354":{"line":5609,"offset":1002129,"length":185,"previous":"M21-GAP-02353","next":"M21-GAP-02355"},"M21-GAP-02355":{"line":5610,"offset":1002314,"length":185,"previous":"M21-GAP-02354","next":"M21-GAP-02356"},"M21-GAP-02356":{"line":5611,"offset":1002499,"length":185,"previous":"M21-GAP-02355","next":"M21-GAP-02357"},"M21-GAP-02357":{"line":5612,"offset":1002684,"length":185,"previous":"M21-GAP-02356","next":"M21-GAP-02358"},"M21-GAP-02358":{"line":5613,"offset":1002869,"length":185,"previous":"M21-GAP-02357","next":"M21-GAP-02359"},"M21-GAP-02359":{"line":5614,"offset":1003054,"length":185,"previous":"M21-GAP-02358","next":"M21-GAP-02360"},"M21-GAP-02360":{"line":5615,"offset":1003239,"length":185,"previous":"M21-GAP-02359","next":"M21-GAP-02361"},"M21-GAP-02361":{"line":5616,"offset":1003424,"length":185,"previous":"M21-GAP-02360","next":"M21-GAP-02362"},"M21-GAP-02362":{"line":5617,"offset":1003609,"length":185,"previous":"M21-GAP-02361","next":"M21-GAP-02363"},"M21-GAP-02363":{"line":5618,"offset":1003794,"length":184,"previous":"M21-GAP-02362","next":"M21-GAP-02364"},"M21-GAP-02364":{"line":5619,"offset":1003978,"length":185,"previous":"M21-GAP-02363","next":"M21-GAP-02365"},"M21-GAP-02365":{"line":5620,"offset":1004163,"length":185,"previous":"M21-GAP-02364","next":"M21-GAP-02366"},"M21-GAP-02366":{"line":5621,"offset":1004348,"length":185,"previous":"M21-GAP-02365","next":"M21-GAP-02367"},"M21-GAP-02367":{"line":5622,"offset":1004533,"length":185,"previous":"M21-GAP-02366","next":"M21-GAP-02368"},"M21-GAP-02368":{"line":5623,"offset":1004718,"length":185,"previous":"M21-GAP-02367","next":"M21-GAP-02369"},"M21-GAP-02369":{"line":5624,"offset":1004903,"length":185,"previous":"M21-GAP-02368","next":"M21-GAP-02370"},"M21-GAP-02370":{"line":5625,"offset":1005088,"length":185,"previous":"M21-GAP-02369","next":"M21-GAP-02371"},"M21-GAP-02371":{"line":5626,"offset":1005273,"length":185,"previous":"M21-GAP-02370","next":"M21-GAP-02372"},"M21-GAP-02372":{"line":5627,"offset":1005458,"length":185,"previous":"M21-GAP-02371","next":"M21-GAP-02373"},"M21-GAP-02373":{"line":5628,"offset":1005643,"length":185,"previous":"M21-GAP-02372","next":"M21-GAP-02374"},"M21-GAP-02374":{"line":5629,"offset":1005828,"length":184,"previous":"M21-GAP-02373","next":"M21-GAP-02375"},"M21-GAP-02375":{"line":5630,"offset":1006012,"length":185,"previous":"M21-GAP-02374","next":"M21-GAP-02376"},"M21-GAP-02376":{"line":5631,"offset":1006197,"length":185,"previous":"M21-GAP-02375","next":"M21-GAP-02377"},"M21-GAP-02377":{"line":5632,"offset":1006382,"length":185,"previous":"M21-GAP-02376","next":"M21-GAP-02378"},"M21-GAP-02378":{"line":5633,"offset":1006567,"length":185,"previous":"M21-GAP-02377","next":"M21-GAP-02379"},"M21-GAP-02379":{"line":5634,"offset":1006752,"length":185,"previous":"M21-GAP-02378","next":"M21-GAP-02380"},"M21-GAP-02380":{"line":5635,"offset":1006937,"length":185,"previous":"M21-GAP-02379","next":"M21-GAP-02381"},"M21-GAP-02381":{"line":5636,"offset":1007122,"length":185,"previous":"M21-GAP-02380","next":"M21-GAP-02382"},"M21-GAP-02382":{"line":5637,"offset":1007307,"length":185,"previous":"M21-GAP-02381","next":"M21-GAP-02383"},"M21-GAP-02383":{"line":5638,"offset":1007492,"length":185,"previous":"M21-GAP-02382","next":"M21-GAP-02384"},"M21-GAP-02384":{"line":5639,"offset":1007677,"length":185,"previous":"M21-GAP-02383","next":"M21-GAP-02385"},"M21-GAP-02385":{"line":5640,"offset":1007862,"length":184,"previous":"M21-GAP-02384","next":"M21-GAP-02386"},"M21-GAP-02386":{"line":5641,"offset":1008046,"length":185,"previous":"M21-GAP-02385","next":"M21-GAP-02387"},"M21-GAP-02387":{"line":5642,"offset":1008231,"length":185,"previous":"M21-GAP-02386","next":"M21-GAP-02388"},"M21-GAP-02388":{"line":5643,"offset":1008416,"length":185,"previous":"M21-GAP-02387","next":"M21-GAP-02389"},"M21-GAP-02389":{"line":5644,"offset":1008601,"length":185,"previous":"M21-GAP-02388","next":"M21-GAP-02390"},"M21-GAP-02390":{"line":5645,"offset":1008786,"length":185,"previous":"M21-GAP-02389","next":"M21-GAP-02391"},"M21-GAP-02391":{"line":5646,"offset":1008971,"length":185,"previous":"M21-GAP-02390","next":"M21-GAP-02392"},"M21-GAP-02392":{"line":5647,"offset":1009156,"length":185,"previous":"M21-GAP-02391","next":"M21-GAP-02393"},"M21-GAP-02393":{"line":5648,"offset":1009341,"length":185,"previous":"M21-GAP-02392","next":"M21-GAP-02394"},"M21-GAP-02394":{"line":5649,"offset":1009526,"length":185,"previous":"M21-GAP-02393","next":"M21-GAP-02395"},"M21-GAP-02395":{"line":5650,"offset":1009711,"length":185,"previous":"M21-GAP-02394","next":"M21-GAP-02396"},"M21-GAP-02396":{"line":5651,"offset":1009896,"length":184,"previous":"M21-GAP-02395","next":"M21-GAP-02397"},"M21-GAP-02397":{"line":5652,"offset":1010080,"length":185,"previous":"M21-GAP-02396","next":"M21-GAP-02398"},"M21-GAP-02398":{"line":5653,"offset":1010265,"length":185,"previous":"M21-GAP-02397","next":"M21-GAP-02399"},"M21-GAP-02399":{"line":5654,"offset":1010450,"length":185,"previous":"M21-GAP-02398","next":"M21-GAP-02400"},"M21-GAP-02400":{"line":5655,"offset":1010635,"length":185,"previous":"M21-GAP-02399","next":"M21-GAP-02401"},"M21-GAP-02401":{"line":5656,"offset":1010820,"length":185,"previous":"M21-GAP-02400","next":"M21-GAP-02402"},"M21-GAP-02402":{"line":5657,"offset":1011005,"length":185,"previous":"M21-GAP-02401","next":"M21-GAP-02403"},"M21-GAP-02403":{"line":5658,"offset":1011190,"length":185,"previous":"M21-GAP-02402","next":"M21-GAP-02404"},"M21-GAP-02404":{"line":5659,"offset":1011375,"length":185,"previous":"M21-GAP-02403","next":"M21-GAP-02405"},"M21-GAP-02405":{"line":5660,"offset":1011560,"length":185,"previous":"M21-GAP-02404","next":"M21-GAP-02406"},"M21-GAP-02406":{"line":5661,"offset":1011745,"length":185,"previous":"M21-GAP-02405","next":"M21-GAP-02407"},"M21-GAP-02407":{"line":5662,"offset":1011930,"length":184,"previous":"M21-GAP-02406","next":"M21-GAP-02408"},"M21-GAP-02408":{"line":5663,"offset":1012114,"length":185,"previous":"M21-GAP-02407","next":"M21-GAP-02409"},"M21-GAP-02409":{"line":5664,"offset":1012299,"length":185,"previous":"M21-GAP-02408","next":"M21-GAP-02410"},"M21-GAP-02410":{"line":5665,"offset":1012484,"length":185,"previous":"M21-GAP-02409","next":"M21-GAP-02411"},"M21-GAP-02411":{"line":5666,"offset":1012669,"length":185,"previous":"M21-GAP-02410","next":"M21-GAP-02412"},"M21-GAP-02412":{"line":5667,"offset":1012854,"length":185,"previous":"M21-GAP-02411","next":"M21-GAP-02413"},"M21-GAP-02413":{"line":5668,"offset":1013039,"length":185,"previous":"M21-GAP-02412","next":"M21-GAP-02414"},"M21-GAP-02414":{"line":5669,"offset":1013224,"length":185,"previous":"M21-GAP-02413","next":"M21-GAP-02415"},"M21-GAP-02415":{"line":5670,"offset":1013409,"length":185,"previous":"M21-GAP-02414","next":"M21-GAP-02416"},"M21-GAP-02416":{"line":5671,"offset":1013594,"length":184,"previous":"M21-GAP-02415","next":"M21-GAP-02417"},"M21-GAP-02417":{"line":5672,"offset":1013778,"length":191,"previous":"M21-GAP-02416","next":"M21-GAP-02418"},"M21-GAP-02418":{"line":5673,"offset":1013969,"length":191,"previous":"M21-GAP-02417","next":"M21-GAP-02419"},"M21-GAP-02419":{"line":5674,"offset":1014160,"length":192,"previous":"M21-GAP-02418","next":"M21-GAP-02420"},"M21-GAP-02420":{"line":5675,"offset":1014352,"length":192,"previous":"M21-GAP-02419","next":"M21-GAP-02421"},"M21-GAP-02421":{"line":5676,"offset":1014544,"length":192,"previous":"M21-GAP-02420","next":"M21-GAP-02422"},"M21-GAP-02422":{"line":5677,"offset":1014736,"length":192,"previous":"M21-GAP-02421","next":"M21-GAP-02423"},"M21-GAP-02423":{"line":5678,"offset":1014928,"length":191,"previous":"M21-GAP-02422","next":"M21-GAP-02424"},"M21-GAP-02424":{"line":5679,"offset":1015119,"length":191,"previous":"M21-GAP-02423","next":"M21-GAP-02425"},"M21-GAP-02425":{"line":5680,"offset":1015310,"length":191,"previous":"M21-GAP-02424","next":"M21-GAP-02426"},"M21-GAP-02426":{"line":5681,"offset":1015501,"length":191,"previous":"M21-GAP-02425","next":"M21-GAP-02427"},"M21-GAP-02427":{"line":5682,"offset":1015692,"length":191,"previous":"M21-GAP-02426","next":"M21-GAP-02428"},"M21-GAP-02428":{"line":5683,"offset":1015883,"length":191,"previous":"M21-GAP-02427","next":"M21-GAP-02429"},"M21-GAP-02429":{"line":5684,"offset":1016074,"length":191,"previous":"M21-GAP-02428","next":"M21-GAP-02430"},"M21-GAP-02430":{"line":5685,"offset":1016265,"length":191,"previous":"M21-GAP-02429","next":"M21-GAP-02431"},"M21-GAP-02431":{"line":5686,"offset":1016456,"length":187,"previous":"M21-GAP-02430","next":"M21-GAP-02432"},"M21-GAP-02432":{"line":5687,"offset":1016643,"length":187,"previous":"M21-GAP-02431","next":"M21-GAP-02433"},"M21-GAP-02433":{"line":5688,"offset":1016830,"length":188,"previous":"M21-GAP-02432","next":"M21-GAP-02434"},"M21-GAP-02434":{"line":5689,"offset":1017018,"length":188,"previous":"M21-GAP-02433","next":"M21-GAP-02435"},"M21-GAP-02435":{"line":5690,"offset":1017206,"length":188,"previous":"M21-GAP-02434","next":"M21-GAP-02436"},"M21-GAP-02436":{"line":5691,"offset":1017394,"length":188,"previous":"M21-GAP-02435","next":"M21-GAP-02437"},"M21-GAP-02437":{"line":5692,"offset":1017582,"length":188,"previous":"M21-GAP-02436","next":"M21-GAP-02438"},"M21-GAP-02438":{"line":5693,"offset":1017770,"length":188,"previous":"M21-GAP-02437","next":"M21-GAP-02439"},"M21-GAP-02439":{"line":5694,"offset":1017958,"length":188,"previous":"M21-GAP-02438","next":"M21-GAP-02440"},"M21-GAP-02440":{"line":5695,"offset":1018146,"length":188,"previous":"M21-GAP-02439","next":"M21-GAP-02441"},"M21-GAP-02441":{"line":5696,"offset":1018334,"length":188,"previous":"M21-GAP-02440","next":"M21-GAP-02442"},"M21-GAP-02442":{"line":5697,"offset":1018522,"length":188,"previous":"M21-GAP-02441","next":"M21-GAP-02443"},"M21-GAP-02443":{"line":5698,"offset":1018710,"length":187,"previous":"M21-GAP-02442","next":"M21-GAP-02444"},"M21-GAP-02444":{"line":5699,"offset":1018897,"length":187,"previous":"M21-GAP-02443","next":"M21-GAP-02445"},"M21-GAP-02445":{"line":5700,"offset":1019084,"length":187,"previous":"M21-GAP-02444","next":"M21-GAP-02446"},"M21-GAP-02446":{"line":5701,"offset":1019271,"length":187,"previous":"M21-GAP-02445","next":"M21-GAP-02447"},"M21-GAP-02447":{"line":5702,"offset":1019458,"length":187,"previous":"M21-GAP-02446","next":"M21-GAP-02448"},"M21-GAP-02448":{"line":5703,"offset":1019645,"length":187,"previous":"M21-GAP-02447","next":"M21-GAP-02449"},"M21-GAP-02449":{"line":5704,"offset":1019832,"length":187,"previous":"M21-GAP-02448","next":"M21-GAP-02450"},"M21-GAP-02450":{"line":5705,"offset":1020019,"length":187,"previous":"M21-GAP-02449","next":"M21-GAP-02451"},"M21-GAP-02451":{"line":5706,"offset":1020206,"length":186,"previous":"M21-GAP-02450","next":"M21-GAP-02452"},"M21-GAP-02452":{"line":5707,"offset":1020392,"length":181,"previous":"M21-GAP-02451","next":"M21-GAP-02453"},"M21-GAP-02453":{"line":5708,"offset":1020573,"length":181,"previous":"M21-GAP-02452","next":"M21-GAP-02454"},"M21-GAP-02454":{"line":5709,"offset":1020754,"length":182,"previous":"M21-GAP-02453","next":"M21-GAP-02455"},"M21-GAP-02455":{"line":5710,"offset":1020936,"length":182,"previous":"M21-GAP-02454","next":"M21-GAP-02456"},"M21-GAP-02456":{"line":5711,"offset":1021118,"length":182,"previous":"M21-GAP-02455","next":"M21-GAP-02457"},"M21-GAP-02457":{"line":5712,"offset":1021300,"length":182,"previous":"M21-GAP-02456","next":"M21-GAP-02458"},"M21-GAP-02458":{"line":5713,"offset":1021482,"length":181,"previous":"M21-GAP-02457","next":"M21-GAP-02459"},"M21-GAP-02459":{"line":5714,"offset":1021663,"length":181,"previous":"M21-GAP-02458","next":"M21-GAP-02460"},"M21-GAP-02460":{"line":5715,"offset":1021844,"length":181,"previous":"M21-GAP-02459","next":"M21-GAP-02461"},"M21-GAP-02461":{"line":5716,"offset":1022025,"length":181,"previous":"M21-GAP-02460","next":"M21-GAP-02462"},"M21-GAP-02462":{"line":5717,"offset":1022206,"length":181,"previous":"M21-GAP-02461","next":"M21-GAP-02463"},"M21-GAP-02463":{"line":5718,"offset":1022387,"length":181,"previous":"M21-GAP-02462","next":"M21-GAP-02464"},"M21-GAP-02464":{"line":5719,"offset":1022568,"length":181,"previous":"M21-GAP-02463","next":"M21-GAP-02465"},"M21-GAP-02465":{"line":5720,"offset":1022749,"length":181,"previous":"M21-GAP-02464","next":"M21-GAP-02466"},"M21-GAP-02466":{"line":5721,"offset":1022930,"length":173,"previous":"M21-GAP-02465","next":"M21-GAP-02467"},"M21-GAP-02467":{"line":5722,"offset":1023103,"length":173,"previous":"M21-GAP-02466","next":"M21-GAP-02468"},"M21-GAP-02468":{"line":5723,"offset":1023276,"length":174,"previous":"M21-GAP-02467","next":"M21-GAP-02469"},"M21-GAP-02469":{"line":5724,"offset":1023450,"length":174,"previous":"M21-GAP-02468","next":"M21-GAP-02470"},"M21-GAP-02470":{"line":5725,"offset":1023624,"length":174,"previous":"M21-GAP-02469","next":"M21-GAP-02471"},"M21-GAP-02471":{"line":5726,"offset":1023798,"length":174,"previous":"M21-GAP-02470","next":"M21-GAP-02472"},"M21-GAP-02472":{"line":5727,"offset":1023972,"length":174,"previous":"M21-GAP-02471","next":"M21-GAP-02473"},"M21-GAP-02473":{"line":5728,"offset":1024146,"length":174,"previous":"M21-GAP-02472","next":"M21-GAP-02474"},"M21-GAP-02474":{"line":5729,"offset":1024320,"length":174,"previous":"M21-GAP-02473","next":"M21-GAP-02475"},"M21-GAP-02475":{"line":5730,"offset":1024494,"length":174,"previous":"M21-GAP-02474","next":"M21-GAP-02476"},"M21-GAP-02476":{"line":5731,"offset":1024668,"length":174,"previous":"M21-GAP-02475","next":"M21-GAP-02477"},"M21-GAP-02477":{"line":5732,"offset":1024842,"length":174,"previous":"M21-GAP-02476","next":"M21-GAP-02478"},"M21-GAP-02478":{"line":5733,"offset":1025016,"length":173,"previous":"M21-GAP-02477","next":"M21-GAP-02479"},"M21-GAP-02479":{"line":5734,"offset":1025189,"length":174,"previous":"M21-GAP-02478","next":"M21-GAP-02480"},"M21-GAP-02480":{"line":5735,"offset":1025363,"length":174,"previous":"M21-GAP-02479","next":"M21-GAP-02481"},"M21-GAP-02481":{"line":5736,"offset":1025537,"length":174,"previous":"M21-GAP-02480","next":"M21-GAP-02482"},"M21-GAP-02482":{"line":5737,"offset":1025711,"length":174,"previous":"M21-GAP-02481","next":"M21-GAP-02483"},"M21-GAP-02483":{"line":5738,"offset":1025885,"length":174,"previous":"M21-GAP-02482","next":"M21-GAP-02484"},"M21-GAP-02484":{"line":5739,"offset":1026059,"length":174,"previous":"M21-GAP-02483","next":"M21-GAP-02485"},"M21-GAP-02485":{"line":5740,"offset":1026233,"length":173,"previous":"M21-GAP-02484","next":"M21-GAP-02486"},"M21-GAP-02486":{"line":5741,"offset":1026406,"length":173,"previous":"M21-GAP-02485","next":"M21-GAP-02487"},"M21-GAP-02487":{"line":5742,"offset":1026579,"length":173,"previous":"M21-GAP-02486","next":"M21-GAP-02488"},"M21-GAP-02488":{"line":5743,"offset":1026752,"length":173,"previous":"M21-GAP-02487","next":"M21-GAP-02489"},"M21-GAP-02489":{"line":5744,"offset":1026925,"length":173,"previous":"M21-GAP-02488","next":"M21-GAP-02490"},"M21-GAP-02490":{"line":5745,"offset":1027098,"length":173,"previous":"M21-GAP-02489","next":"M21-GAP-02491"},"M21-GAP-02491":{"line":5746,"offset":1027271,"length":173,"previous":"M21-GAP-02490","next":"M21-GAP-02492"},"M21-GAP-02492":{"line":5747,"offset":1027444,"length":180,"previous":"M21-GAP-02491","next":"M21-GAP-02493"},"M21-GAP-02493":{"line":5748,"offset":1027624,"length":180,"previous":"M21-GAP-02492","next":"M21-GAP-02494"},"M21-GAP-02494":{"line":5749,"offset":1027804,"length":181,"previous":"M21-GAP-02493","next":"M21-GAP-02495"},"M21-GAP-02495":{"line":5750,"offset":1027985,"length":181,"previous":"M21-GAP-02494","next":"M21-GAP-02496"},"M21-GAP-02496":{"line":5751,"offset":1028166,"length":181,"previous":"M21-GAP-02495","next":"M21-GAP-02497"},"M21-GAP-02497":{"line":5752,"offset":1028347,"length":181,"previous":"M21-GAP-02496","next":"M21-GAP-02498"},"M21-GAP-02498":{"line":5753,"offset":1028528,"length":181,"previous":"M21-GAP-02497","next":"M21-GAP-02499"},"M21-GAP-02499":{"line":5754,"offset":1028709,"length":181,"previous":"M21-GAP-02498","next":"M21-GAP-02500"},"M21-GAP-02500":{"line":5755,"offset":1028890,"length":180,"previous":"M21-GAP-02499","next":"M21-GAP-02501"},"M21-GAP-02501":{"line":5756,"offset":1029070,"length":180,"previous":"M21-GAP-02500","next":"M21-GAP-02502"},"M21-GAP-02502":{"line":5757,"offset":1029250,"length":180,"previous":"M21-GAP-02501","next":"M21-GAP-02503"},"M21-GAP-02503":{"line":5758,"offset":1029430,"length":180,"previous":"M21-GAP-02502","next":"M21-GAP-02504"},"M21-GAP-02504":{"line":5759,"offset":1029610,"length":180,"previous":"M21-GAP-02503","next":"M21-GAP-02505"},"M21-GAP-02505":{"line":5760,"offset":1029790,"length":180,"previous":"M21-GAP-02504","next":"M21-GAP-02506"},"M21-GAP-02506":{"line":5761,"offset":1029970,"length":180,"previous":"M21-GAP-02505","next":"M21-GAP-02507"},"M21-GAP-02507":{"line":5762,"offset":1030150,"length":180,"previous":"M21-GAP-02506","next":"M21-GAP-02508"},"M21-GAP-02508":{"line":5763,"offset":1030330,"length":186,"previous":"M21-GAP-02507","next":"M21-GAP-02509"},"M21-GAP-02509":{"line":5764,"offset":1030516,"length":186,"previous":"M21-GAP-02508","next":"M21-GAP-02510"},"M21-GAP-02510":{"line":5765,"offset":1030702,"length":187,"previous":"M21-GAP-02509","next":"M21-GAP-02511"},"M21-GAP-02511":{"line":5766,"offset":1030889,"length":187,"previous":"M21-GAP-02510","next":"M21-GAP-02512"},"M21-GAP-02512":{"line":5767,"offset":1031076,"length":187,"previous":"M21-GAP-02511","next":"M21-GAP-02513"},"M21-GAP-02513":{"line":5768,"offset":1031263,"length":187,"previous":"M21-GAP-02512","next":"M21-GAP-02514"},"M21-GAP-02514":{"line":5769,"offset":1031450,"length":187,"previous":"M21-GAP-02513","next":"M21-GAP-02515"},"M21-GAP-02515":{"line":5770,"offset":1031637,"length":187,"previous":"M21-GAP-02514","next":"M21-GAP-02516"},"M21-GAP-02516":{"line":5771,"offset":1031824,"length":187,"previous":"M21-GAP-02515","next":"M21-GAP-02517"},"M21-GAP-02517":{"line":5772,"offset":1032011,"length":187,"previous":"M21-GAP-02516","next":"M21-GAP-02518"},"M21-GAP-02518":{"line":5773,"offset":1032198,"length":187,"previous":"M21-GAP-02517","next":"M21-GAP-02519"},"M21-GAP-02519":{"line":5774,"offset":1032385,"length":187,"previous":"M21-GAP-02518","next":"M21-GAP-02520"},"M21-GAP-02520":{"line":5775,"offset":1032572,"length":186,"previous":"M21-GAP-02519","next":"M21-GAP-02521"},"M21-GAP-02521":{"line":5776,"offset":1032758,"length":187,"previous":"M21-GAP-02520","next":"M21-GAP-02522"},"M21-GAP-02522":{"line":5777,"offset":1032945,"length":187,"previous":"M21-GAP-02521","next":"M21-GAP-02523"},"M21-GAP-02523":{"line":5778,"offset":1033132,"length":187,"previous":"M21-GAP-02522","next":"M21-GAP-02524"},"M21-GAP-02524":{"line":5779,"offset":1033319,"length":187,"previous":"M21-GAP-02523","next":"M21-GAP-02525"},"M21-GAP-02525":{"line":5780,"offset":1033506,"length":187,"previous":"M21-GAP-02524","next":"M21-GAP-02526"},"M21-GAP-02526":{"line":5781,"offset":1033693,"length":186,"previous":"M21-GAP-02525","next":"M21-GAP-02527"},"M21-GAP-02527":{"line":5782,"offset":1033879,"length":186,"previous":"M21-GAP-02526","next":"M21-GAP-02528"},"M21-GAP-02528":{"line":5783,"offset":1034065,"length":186,"previous":"M21-GAP-02527","next":"M21-GAP-02529"},"M21-GAP-02529":{"line":5784,"offset":1034251,"length":186,"previous":"M21-GAP-02528","next":"M21-GAP-02530"},"M21-GAP-02530":{"line":5785,"offset":1034437,"length":186,"previous":"M21-GAP-02529","next":"M21-GAP-02531"},"M21-GAP-02531":{"line":5786,"offset":1034623,"length":186,"previous":"M21-GAP-02530","next":"M21-GAP-02532"},"M21-GAP-02532":{"line":5787,"offset":1034809,"length":186,"previous":"M21-GAP-02531","next":"M21-GAP-02533"},"M21-GAP-02533":{"line":5788,"offset":1034995,"length":173,"previous":"M21-GAP-02532","next":"M21-GAP-02534"},"M21-GAP-02534":{"line":5789,"offset":1035168,"length":173,"previous":"M21-GAP-02533","next":"M21-GAP-02535"},"M21-GAP-02535":{"line":5790,"offset":1035341,"length":174,"previous":"M21-GAP-02534","next":"M21-GAP-02536"},"M21-GAP-02536":{"line":5791,"offset":1035515,"length":174,"previous":"M21-GAP-02535","next":"M21-GAP-02537"},"M21-GAP-02537":{"line":5792,"offset":1035689,"length":174,"previous":"M21-GAP-02536","next":"M21-GAP-02538"},"M21-GAP-02538":{"line":5793,"offset":1035863,"length":174,"previous":"M21-GAP-02537","next":"M21-GAP-02539"},"M21-GAP-02539":{"line":5794,"offset":1036037,"length":174,"previous":"M21-GAP-02538","next":"M21-GAP-02540"},"M21-GAP-02540":{"line":5795,"offset":1036211,"length":174,"previous":"M21-GAP-02539","next":"M21-GAP-02541"},"M21-GAP-02541":{"line":5796,"offset":1036385,"length":174,"previous":"M21-GAP-02540","next":"M21-GAP-02542"},"M21-GAP-02542":{"line":5797,"offset":1036559,"length":174,"previous":"M21-GAP-02541","next":"M21-GAP-02543"},"M21-GAP-02543":{"line":5798,"offset":1036733,"length":174,"previous":"M21-GAP-02542","next":"M21-GAP-02544"},"M21-GAP-02544":{"line":5799,"offset":1036907,"length":174,"previous":"M21-GAP-02543","next":"M21-GAP-02545"},"M21-GAP-02545":{"line":5800,"offset":1037081,"length":173,"previous":"M21-GAP-02544","next":"M21-GAP-02546"},"M21-GAP-02546":{"line":5801,"offset":1037254,"length":174,"previous":"M21-GAP-02545","next":"M21-GAP-02547"},"M21-GAP-02547":{"line":5802,"offset":1037428,"length":174,"previous":"M21-GAP-02546","next":"M21-GAP-02548"},"M21-GAP-02548":{"line":5803,"offset":1037602,"length":174,"previous":"M21-GAP-02547","next":"M21-GAP-02549"},"M21-GAP-02549":{"line":5804,"offset":1037776,"length":174,"previous":"M21-GAP-02548","next":"M21-GAP-02550"},"M21-GAP-02550":{"line":5805,"offset":1037950,"length":174,"previous":"M21-GAP-02549","next":"M21-GAP-02551"},"M21-GAP-02551":{"line":5806,"offset":1038124,"length":174,"previous":"M21-GAP-02550","next":"M21-GAP-02552"},"M21-GAP-02552":{"line":5807,"offset":1038298,"length":174,"previous":"M21-GAP-02551","next":"M21-GAP-02553"},"M21-GAP-02553":{"line":5808,"offset":1038472,"length":174,"previous":"M21-GAP-02552","next":"M21-GAP-02554"},"M21-GAP-02554":{"line":5809,"offset":1038646,"length":174,"previous":"M21-GAP-02553","next":"M21-GAP-02555"},"M21-GAP-02555":{"line":5810,"offset":1038820,"length":174,"previous":"M21-GAP-02554","next":"M21-GAP-02556"},"M21-GAP-02556":{"line":5811,"offset":1038994,"length":173,"previous":"M21-GAP-02555","next":"M21-GAP-02557"},"M21-GAP-02557":{"line":5812,"offset":1039167,"length":174,"previous":"M21-GAP-02556","next":"M21-GAP-02558"},"M21-GAP-02558":{"line":5813,"offset":1039341,"length":174,"previous":"M21-GAP-02557","next":"M21-GAP-02559"},"M21-GAP-02559":{"line":5814,"offset":1039515,"length":174,"previous":"M21-GAP-02558","next":"M21-GAP-02560"},"M21-GAP-02560":{"line":5815,"offset":1039689,"length":174,"previous":"M21-GAP-02559","next":"M21-GAP-02561"},"M21-GAP-02561":{"line":5816,"offset":1039863,"length":174,"previous":"M21-GAP-02560","next":"M21-GAP-02562"},"M21-GAP-02562":{"line":5817,"offset":1040037,"length":174,"previous":"M21-GAP-02561","next":"M21-GAP-02563"},"M21-GAP-02563":{"line":5818,"offset":1040211,"length":174,"previous":"M21-GAP-02562","next":"M21-GAP-02564"},"M21-GAP-02564":{"line":5819,"offset":1040385,"length":174,"previous":"M21-GAP-02563","next":"M21-GAP-02565"},"M21-GAP-02565":{"line":5820,"offset":1040559,"length":174,"previous":"M21-GAP-02564","next":"M21-GAP-02566"},"M21-GAP-02566":{"line":5821,"offset":1040733,"length":174,"previous":"M21-GAP-02565","next":"M21-GAP-02567"},"M21-GAP-02567":{"line":5822,"offset":1040907,"length":173,"previous":"M21-GAP-02566","next":"M21-GAP-02568"},"M21-GAP-02568":{"line":5823,"offset":1041080,"length":174,"previous":"M21-GAP-02567","next":"M21-GAP-02569"},"M21-GAP-02569":{"line":5824,"offset":1041254,"length":174,"previous":"M21-GAP-02568","next":"M21-GAP-02570"},"M21-GAP-02570":{"line":5825,"offset":1041428,"length":174,"previous":"M21-GAP-02569","next":"M21-GAP-02571"},"M21-GAP-02571":{"line":5826,"offset":1041602,"length":174,"previous":"M21-GAP-02570","next":"M21-GAP-02572"},"M21-GAP-02572":{"line":5827,"offset":1041776,"length":174,"previous":"M21-GAP-02571","next":"M21-GAP-02573"},"M21-GAP-02573":{"line":5828,"offset":1041950,"length":174,"previous":"M21-GAP-02572","next":"M21-GAP-02574"},"M21-GAP-02574":{"line":5829,"offset":1042124,"length":174,"previous":"M21-GAP-02573","next":"M21-GAP-02575"},"M21-GAP-02575":{"line":5830,"offset":1042298,"length":174,"previous":"M21-GAP-02574","next":"M21-GAP-02576"},"M21-GAP-02576":{"line":5831,"offset":1042472,"length":174,"previous":"M21-GAP-02575","next":"M21-GAP-02577"},"M21-GAP-02577":{"line":5832,"offset":1042646,"length":174,"previous":"M21-GAP-02576","next":"M21-GAP-02578"},"M21-GAP-02578":{"line":5833,"offset":1042820,"length":173,"previous":"M21-GAP-02577","next":"M21-GAP-02579"},"M21-GAP-02579":{"line":5834,"offset":1042993,"length":174,"previous":"M21-GAP-02578","next":"M21-GAP-02580"},"M21-GAP-02580":{"line":5835,"offset":1043167,"length":174,"previous":"M21-GAP-02579","next":"M21-GAP-02581"},"M21-GAP-02581":{"line":5836,"offset":1043341,"length":174,"previous":"M21-GAP-02580","next":"M21-GAP-02582"},"M21-GAP-02582":{"line":5837,"offset":1043515,"length":174,"previous":"M21-GAP-02581","next":"M21-GAP-02583"},"M21-GAP-02583":{"line":5838,"offset":1043689,"length":174,"previous":"M21-GAP-02582","next":"M21-GAP-02584"},"M21-GAP-02584":{"line":5839,"offset":1043863,"length":174,"previous":"M21-GAP-02583","next":"M21-GAP-02585"},"M21-GAP-02585":{"line":5840,"offset":1044037,"length":174,"previous":"M21-GAP-02584","next":"M21-GAP-02586"},"M21-GAP-02586":{"line":5841,"offset":1044211,"length":174,"previous":"M21-GAP-02585","next":"M21-GAP-02587"},"M21-GAP-02587":{"line":5842,"offset":1044385,"length":174,"previous":"M21-GAP-02586","next":"M21-GAP-02588"},"M21-GAP-02588":{"line":5843,"offset":1044559,"length":174,"previous":"M21-GAP-02587","next":"M21-GAP-02589"},"M21-GAP-02589":{"line":5844,"offset":1044733,"length":173,"previous":"M21-GAP-02588","next":"M21-GAP-02590"},"M21-GAP-02590":{"line":5845,"offset":1044906,"length":174,"previous":"M21-GAP-02589","next":"M21-GAP-02591"},"M21-GAP-02591":{"line":5846,"offset":1045080,"length":174,"previous":"M21-GAP-02590","next":"M21-GAP-02592"},"M21-GAP-02592":{"line":5847,"offset":1045254,"length":174,"previous":"M21-GAP-02591","next":"M21-GAP-02593"},"M21-GAP-02593":{"line":5848,"offset":1045428,"length":174,"previous":"M21-GAP-02592","next":"M21-GAP-02594"},"M21-GAP-02594":{"line":5849,"offset":1045602,"length":174,"previous":"M21-GAP-02593","next":"M21-GAP-02595"},"M21-GAP-02595":{"line":5850,"offset":1045776,"length":174,"previous":"M21-GAP-02594","next":"M21-GAP-02596"},"M21-GAP-02596":{"line":5851,"offset":1045950,"length":174,"previous":"M21-GAP-02595","next":"M21-GAP-02597"},"M21-GAP-02597":{"line":5852,"offset":1046124,"length":173,"previous":"M21-GAP-02596","next":"M21-GAP-02598"},"M21-GAP-02598":{"line":5853,"offset":1046297,"length":173,"previous":"M21-GAP-02597","next":"M21-GAP-02599"},"M21-GAP-02599":{"line":5854,"offset":1046470,"length":173,"previous":"M21-GAP-02598","next":"M21-GAP-02600"},"M21-GAP-02600":{"line":5855,"offset":1046643,"length":195,"previous":"M21-GAP-02599","next":"M21-GAP-02601"},"M21-GAP-02601":{"line":5856,"offset":1046838,"length":195,"previous":"M21-GAP-02600","next":"M21-GAP-02602"},"M21-GAP-02602":{"line":5857,"offset":1047033,"length":198,"previous":"M21-GAP-02601","next":"M21-GAP-02603"},"M21-GAP-02603":{"line":5858,"offset":1047231,"length":198,"previous":"M21-GAP-02602","next":"M21-GAP-02604"},"M21-GAP-02604":{"line":5859,"offset":1047429,"length":198,"previous":"M21-GAP-02603","next":"M21-GAP-02605"},"M21-GAP-02605":{"line":5860,"offset":1047627,"length":198,"previous":"M21-GAP-02604","next":"M21-GAP-02606"},"M21-GAP-02606":{"line":5861,"offset":1047825,"length":198,"previous":"M21-GAP-02605","next":"M21-GAP-02607"},"M21-GAP-02607":{"line":5862,"offset":1048023,"length":198,"previous":"M21-GAP-02606","next":"M21-GAP-02608"},"M21-GAP-02608":{"line":5863,"offset":1048221,"length":214,"previous":"M21-GAP-02607","next":"M21-GAP-02609"},"M21-GAP-02609":{"line":5864,"offset":1048435,"length":214,"previous":"M21-GAP-02608","next":"M21-GAP-02610"},"M21-GAP-02610":{"line":5865,"offset":1048649,"length":214,"previous":"M21-GAP-02609","next":"M21-GAP-02611"},"M21-GAP-02611":{"line":5866,"offset":1048863,"length":214,"previous":"M21-GAP-02610","next":"M21-GAP-02612"},"M21-GAP-02612":{"line":5867,"offset":1049077,"length":214,"previous":"M21-GAP-02611","next":"M21-GAP-02613"},"M21-GAP-02613":{"line":5868,"offset":1049291,"length":214,"previous":"M21-GAP-02612","next":"M21-GAP-02614"},"M21-GAP-02614":{"line":5869,"offset":1049505,"length":203,"previous":"M21-GAP-02613","next":"M21-GAP-02615"},"M21-GAP-02615":{"line":5870,"offset":1049708,"length":203,"previous":"M21-GAP-02614","next":"M21-GAP-02616"},"M21-GAP-02616":{"line":5871,"offset":1049911,"length":203,"previous":"M21-GAP-02615","next":"M21-GAP-02617"},"M21-GAP-02617":{"line":5872,"offset":1050114,"length":203,"previous":"M21-GAP-02616","next":"M21-GAP-02618"},"M21-GAP-02618":{"line":5873,"offset":1050317,"length":203,"previous":"M21-GAP-02617","next":"M21-GAP-02619"},"M21-GAP-02619":{"line":5874,"offset":1050520,"length":203,"previous":"M21-GAP-02618","next":"M21-GAP-02620"},"M21-GAP-02620":{"line":5875,"offset":1050723,"length":217,"previous":"M21-GAP-02619","next":"M21-GAP-02621"},"M21-GAP-02621":{"line":5876,"offset":1050940,"length":217,"previous":"M21-GAP-02620","next":"M21-GAP-02622"},"M21-GAP-02622":{"line":5877,"offset":1051157,"length":217,"previous":"M21-GAP-02621","next":"M21-GAP-02623"},"M21-GAP-02623":{"line":5878,"offset":1051374,"length":206,"previous":"M21-GAP-02622","next":"M21-GAP-02624"},"M21-GAP-02624":{"line":5879,"offset":1051580,"length":206,"previous":"M21-GAP-02623","next":"M21-GAP-02625"},"M21-GAP-02625":{"line":5880,"offset":1051786,"length":206,"previous":"M21-GAP-02624","next":"M21-GAP-02626"},"M21-GAP-02626":{"line":5881,"offset":1051992,"length":216,"previous":"M21-GAP-02625","next":"M21-GAP-02627"},"M21-GAP-02627":{"line":5882,"offset":1052208,"length":216,"previous":"M21-GAP-02626","next":"M21-GAP-02628"},"M21-GAP-02628":{"line":5883,"offset":1052424,"length":216,"previous":"M21-GAP-02627","next":"M21-GAP-02629"},"M21-GAP-02629":{"line":5884,"offset":1052640,"length":205,"previous":"M21-GAP-02628","next":"M21-GAP-02630"},"M21-GAP-02630":{"line":5885,"offset":1052845,"length":205,"previous":"M21-GAP-02629","next":"M21-GAP-02631"},"M21-GAP-02631":{"line":5886,"offset":1053050,"length":205,"previous":"M21-GAP-02630","next":"M21-GAP-02632"},"M21-GAP-02632":{"line":5887,"offset":1053255,"length":197,"previous":"M21-GAP-02631","next":"M21-GAP-02633"},"M21-GAP-02633":{"line":5888,"offset":1053452,"length":197,"previous":"M21-GAP-02632","next":"M21-GAP-02634"},"M21-GAP-02634":{"line":5889,"offset":1053649,"length":186,"previous":"M21-GAP-02633","next":"M21-GAP-02635"},"M21-GAP-02635":{"line":5890,"offset":1053835,"length":186,"previous":"M21-GAP-02634","next":"M21-GAP-02636"},"M21-GAP-02636":{"line":5891,"offset":1054021,"length":187,"previous":"M21-GAP-02635","next":"M21-GAP-02637"},"M21-GAP-02637":{"line":5892,"offset":1054208,"length":187,"previous":"M21-GAP-02636","next":"M21-GAP-02638"},"M21-GAP-02638":{"line":5893,"offset":1054395,"length":187,"previous":"M21-GAP-02637","next":"M21-GAP-02639"},"M21-GAP-02639":{"line":5894,"offset":1054582,"length":187,"previous":"M21-GAP-02638","next":"M21-GAP-02640"},"M21-GAP-02640":{"line":5895,"offset":1054769,"length":187,"previous":"M21-GAP-02639","next":"M21-GAP-02641"},"M21-GAP-02641":{"line":5896,"offset":1054956,"length":187,"previous":"M21-GAP-02640","next":"M21-GAP-02642"},"M21-GAP-02642":{"line":5897,"offset":1055143,"length":187,"previous":"M21-GAP-02641","next":"M21-GAP-02643"},"M21-GAP-02643":{"line":5898,"offset":1055330,"length":187,"previous":"M21-GAP-02642","next":"M21-GAP-02644"},"M21-GAP-02644":{"line":5899,"offset":1055517,"length":187,"previous":"M21-GAP-02643","next":"M21-GAP-02645"},"M21-GAP-02645":{"line":5900,"offset":1055704,"length":187,"previous":"M21-GAP-02644","next":"M21-GAP-02646"},"M21-GAP-02646":{"line":5901,"offset":1055891,"length":186,"previous":"M21-GAP-02645","next":"M21-GAP-02647"},"M21-GAP-02647":{"line":5902,"offset":1056077,"length":187,"previous":"M21-GAP-02646","next":"M21-GAP-02648"},"M21-GAP-02648":{"line":5903,"offset":1056264,"length":187,"previous":"M21-GAP-02647","next":"M21-GAP-02649"},"M21-GAP-02649":{"line":5904,"offset":1056451,"length":187,"previous":"M21-GAP-02648","next":"M21-GAP-02650"},"M21-GAP-02650":{"line":5905,"offset":1056638,"length":187,"previous":"M21-GAP-02649","next":"M21-GAP-02651"},"M21-GAP-02651":{"line":5906,"offset":1056825,"length":187,"previous":"M21-GAP-02650","next":"M21-GAP-02652"},"M21-GAP-02652":{"line":5907,"offset":1057012,"length":187,"previous":"M21-GAP-02651","next":"M21-GAP-02653"},"M21-GAP-02653":{"line":5908,"offset":1057199,"length":187,"previous":"M21-GAP-02652","next":"M21-GAP-02654"},"M21-GAP-02654":{"line":5909,"offset":1057386,"length":187,"previous":"M21-GAP-02653","next":"M21-GAP-02655"},"M21-GAP-02655":{"line":5910,"offset":1057573,"length":187,"previous":"M21-GAP-02654","next":"M21-GAP-02656"},"M21-GAP-02656":{"line":5911,"offset":1057760,"length":187,"previous":"M21-GAP-02655","next":"M21-GAP-02657"},"M21-GAP-02657":{"line":5912,"offset":1057947,"length":186,"previous":"M21-GAP-02656","next":"M21-GAP-02658"},"M21-GAP-02658":{"line":5913,"offset":1058133,"length":187,"previous":"M21-GAP-02657","next":"M21-GAP-02659"},"M21-GAP-02659":{"line":5914,"offset":1058320,"length":187,"previous":"M21-GAP-02658","next":"M21-GAP-02660"},"M21-GAP-02660":{"line":5915,"offset":1058507,"length":187,"previous":"M21-GAP-02659","next":"M21-GAP-02661"},"M21-GAP-02661":{"line":5916,"offset":1058694,"length":187,"previous":"M21-GAP-02660","next":"M21-GAP-02662"},"M21-GAP-02662":{"line":5917,"offset":1058881,"length":187,"previous":"M21-GAP-02661","next":"M21-GAP-02663"},"M21-GAP-02663":{"line":5918,"offset":1059068,"length":187,"previous":"M21-GAP-02662","next":"M21-GAP-02664"},"M21-GAP-02664":{"line":5919,"offset":1059255,"length":187,"previous":"M21-GAP-02663","next":"M21-GAP-02665"},"M21-GAP-02665":{"line":5920,"offset":1059442,"length":187,"previous":"M21-GAP-02664","next":"M21-GAP-02666"},"M21-GAP-02666":{"line":5921,"offset":1059629,"length":187,"previous":"M21-GAP-02665","next":"M21-GAP-02667"},"M21-GAP-02667":{"line":5922,"offset":1059816,"length":187,"previous":"M21-GAP-02666","next":"M21-GAP-02668"},"M21-GAP-02668":{"line":5923,"offset":1060003,"length":186,"previous":"M21-GAP-02667","next":"M21-GAP-02669"},"M21-GAP-02669":{"line":5924,"offset":1060189,"length":187,"previous":"M21-GAP-02668","next":"M21-GAP-02670"},"M21-GAP-02670":{"line":5925,"offset":1060376,"length":187,"previous":"M21-GAP-02669","next":"M21-GAP-02671"},"M21-GAP-02671":{"line":5926,"offset":1060563,"length":187,"previous":"M21-GAP-02670","next":"M21-GAP-02672"},"M21-GAP-02672":{"line":5927,"offset":1060750,"length":187,"previous":"M21-GAP-02671","next":"M21-GAP-02673"},"M21-GAP-02673":{"line":5928,"offset":1060937,"length":187,"previous":"M21-GAP-02672","next":"M21-GAP-02674"},"M21-GAP-02674":{"line":5929,"offset":1061124,"length":187,"previous":"M21-GAP-02673","next":"M21-GAP-02675"},"M21-GAP-02675":{"line":5930,"offset":1061311,"length":187,"previous":"M21-GAP-02674","next":"M21-GAP-02676"},"M21-GAP-02676":{"line":5931,"offset":1061498,"length":187,"previous":"M21-GAP-02675","next":"M21-GAP-02677"},"M21-GAP-02677":{"line":5932,"offset":1061685,"length":187,"previous":"M21-GAP-02676","next":"M21-GAP-02678"},"M21-GAP-02678":{"line":5933,"offset":1061872,"length":187,"previous":"M21-GAP-02677","next":"M21-GAP-02679"},"M21-GAP-02679":{"line":5934,"offset":1062059,"length":186,"previous":"M21-GAP-02678","next":"M21-GAP-02680"},"M21-GAP-02680":{"line":5935,"offset":1062245,"length":187,"previous":"M21-GAP-02679","next":"M21-GAP-02681"},"M21-GAP-02681":{"line":5936,"offset":1062432,"length":187,"previous":"M21-GAP-02680","next":"M21-GAP-02682"},"M21-GAP-02682":{"line":5937,"offset":1062619,"length":187,"previous":"M21-GAP-02681","next":"M21-GAP-02683"},"M21-GAP-02683":{"line":5938,"offset":1062806,"length":187,"previous":"M21-GAP-02682","next":"M21-GAP-02684"},"M21-GAP-02684":{"line":5939,"offset":1062993,"length":187,"previous":"M21-GAP-02683","next":"M21-GAP-02685"},"M21-GAP-02685":{"line":5940,"offset":1063180,"length":187,"previous":"M21-GAP-02684","next":"M21-GAP-02686"},"M21-GAP-02686":{"line":5941,"offset":1063367,"length":187,"previous":"M21-GAP-02685","next":"M21-GAP-02687"},"M21-GAP-02687":{"line":5942,"offset":1063554,"length":187,"previous":"M21-GAP-02686","next":"M21-GAP-02688"},"M21-GAP-02688":{"line":5943,"offset":1063741,"length":187,"previous":"M21-GAP-02687","next":"M21-GAP-02689"},"M21-GAP-02689":{"line":5944,"offset":1063928,"length":187,"previous":"M21-GAP-02688","next":"M21-GAP-02690"},"M21-GAP-02690":{"line":5945,"offset":1064115,"length":186,"previous":"M21-GAP-02689","next":"M21-GAP-02691"},"M21-GAP-02691":{"line":5946,"offset":1064301,"length":187,"previous":"M21-GAP-02690","next":"M21-GAP-02692"},"M21-GAP-02692":{"line":5947,"offset":1064488,"length":187,"previous":"M21-GAP-02691","next":"M21-GAP-02693"},"M21-GAP-02693":{"line":5948,"offset":1064675,"length":187,"previous":"M21-GAP-02692","next":"M21-GAP-02694"},"M21-GAP-02694":{"line":5949,"offset":1064862,"length":187,"previous":"M21-GAP-02693","next":"M21-GAP-02695"},"M21-GAP-02695":{"line":5950,"offset":1065049,"length":187,"previous":"M21-GAP-02694","next":"M21-GAP-02696"},"M21-GAP-02696":{"line":5951,"offset":1065236,"length":187,"previous":"M21-GAP-02695","next":"M21-GAP-02697"},"M21-GAP-02697":{"line":5952,"offset":1065423,"length":187,"previous":"M21-GAP-02696","next":"M21-GAP-02698"},"M21-GAP-02698":{"line":5953,"offset":1065610,"length":187,"previous":"M21-GAP-02697","next":"M21-GAP-02699"},"M21-GAP-02699":{"line":5954,"offset":1065797,"length":187,"previous":"M21-GAP-02698","next":"M21-GAP-02700"},"M21-GAP-02700":{"line":5955,"offset":1065984,"length":187,"previous":"M21-GAP-02699","next":"M21-GAP-02701"},"M21-GAP-02701":{"line":5956,"offset":1066171,"length":186,"previous":"M21-GAP-02700","next":"M21-GAP-02702"},"M21-GAP-02702":{"line":5957,"offset":1066357,"length":187,"previous":"M21-GAP-02701","next":"M21-GAP-02703"},"M21-GAP-02703":{"line":5958,"offset":1066544,"length":187,"previous":"M21-GAP-02702","next":"M21-GAP-02704"},"M21-GAP-02704":{"line":5959,"offset":1066731,"length":187,"previous":"M21-GAP-02703","next":"M21-GAP-02705"},"M21-GAP-02705":{"line":5960,"offset":1066918,"length":187,"previous":"M21-GAP-02704","next":"M21-GAP-02706"},"M21-GAP-02706":{"line":5961,"offset":1067105,"length":187,"previous":"M21-GAP-02705","next":"M21-GAP-02707"},"M21-GAP-02707":{"line":5962,"offset":1067292,"length":187,"previous":"M21-GAP-02706","next":"M21-GAP-02708"},"M21-GAP-02708":{"line":5963,"offset":1067479,"length":187,"previous":"M21-GAP-02707","next":"M21-GAP-02709"},"M21-GAP-02709":{"line":5964,"offset":1067666,"length":187,"previous":"M21-GAP-02708","next":"M21-GAP-02710"},"M21-GAP-02710":{"line":5965,"offset":1067853,"length":187,"previous":"M21-GAP-02709","next":"M21-GAP-02711"},"M21-GAP-02711":{"line":5966,"offset":1068040,"length":187,"previous":"M21-GAP-02710","next":"M21-GAP-02712"},"M21-GAP-02712":{"line":5967,"offset":1068227,"length":186,"previous":"M21-GAP-02711","next":"M21-GAP-02713"},"M21-GAP-02713":{"line":5968,"offset":1068413,"length":187,"previous":"M21-GAP-02712","next":"M21-GAP-02714"},"M21-GAP-02714":{"line":5969,"offset":1068600,"length":187,"previous":"M21-GAP-02713","next":"M21-GAP-02715"},"M21-GAP-02715":{"line":5970,"offset":1068787,"length":187,"previous":"M21-GAP-02714","next":"M21-GAP-02716"},"M21-GAP-02716":{"line":5971,"offset":1068974,"length":187,"previous":"M21-GAP-02715","next":"M21-GAP-02717"},"M21-GAP-02717":{"line":5972,"offset":1069161,"length":187,"previous":"M21-GAP-02716","next":"M21-GAP-02718"},"M21-GAP-02718":{"line":5973,"offset":1069348,"length":187,"previous":"M21-GAP-02717","next":"M21-GAP-02719"},"M21-GAP-02719":{"line":5974,"offset":1069535,"length":187,"previous":"M21-GAP-02718","next":"M21-GAP-02720"},"M21-GAP-02720":{"line":5975,"offset":1069722,"length":187,"previous":"M21-GAP-02719","next":"M21-GAP-02721"},"M21-GAP-02721":{"line":5976,"offset":1069909,"length":187,"previous":"M21-GAP-02720","next":"M21-GAP-02722"},"M21-GAP-02722":{"line":5977,"offset":1070096,"length":187,"previous":"M21-GAP-02721","next":"M21-GAP-02723"},"M21-GAP-02723":{"line":5978,"offset":1070283,"length":186,"previous":"M21-GAP-02722","next":"M21-GAP-02724"},"M21-GAP-02724":{"line":5979,"offset":1070469,"length":187,"previous":"M21-GAP-02723","next":"M21-GAP-02725"},"M21-GAP-02725":{"line":5980,"offset":1070656,"length":187,"previous":"M21-GAP-02724","next":"M21-GAP-02726"},"M21-GAP-02726":{"line":5981,"offset":1070843,"length":187,"previous":"M21-GAP-02725","next":"M21-GAP-02727"},"M21-GAP-02727":{"line":5982,"offset":1071030,"length":187,"previous":"M21-GAP-02726","next":"M21-GAP-02728"},"M21-GAP-02728":{"line":5983,"offset":1071217,"length":187,"previous":"M21-GAP-02727","next":"M21-GAP-02729"},"M21-GAP-02729":{"line":5984,"offset":1071404,"length":177,"previous":"M21-GAP-02728","next":"M21-GAP-02730"},"M21-GAP-02730":{"line":5985,"offset":1071581,"length":177,"previous":"M21-GAP-02729","next":"M21-GAP-02731"},"M21-GAP-02731":{"line":5986,"offset":1071758,"length":178,"previous":"M21-GAP-02730","next":"M21-GAP-02732"},"M21-GAP-02732":{"line":5987,"offset":1071936,"length":178,"previous":"M21-GAP-02731","next":"M21-GAP-02733"},"M21-GAP-02733":{"line":5988,"offset":1072114,"length":177,"previous":"M21-GAP-02732","next":"M21-GAP-02734"},"M21-GAP-02734":{"line":5989,"offset":1072291,"length":177,"previous":"M21-GAP-02733","next":"M21-GAP-02735"},"M21-GAP-02735":{"line":5990,"offset":1072468,"length":177,"previous":"M21-GAP-02734","next":"M21-GAP-02736"},"M21-GAP-02736":{"line":5991,"offset":1072645,"length":177,"previous":"M21-GAP-02735","next":"M21-GAP-02737"},"M21-GAP-02737":{"line":5992,"offset":1072822,"length":177,"previous":"M21-GAP-02736","next":"M21-GAP-02738"},"M21-GAP-02738":{"line":5993,"offset":1072999,"length":177,"previous":"M21-GAP-02737","next":"M21-GAP-02739"},"M21-GAP-02739":{"line":5994,"offset":1073176,"length":177,"previous":"M21-GAP-02738","next":"M21-GAP-02740"},"M21-GAP-02740":{"line":5995,"offset":1073353,"length":177,"previous":"M21-GAP-02739","next":"M21-GAP-02741"},"M21-GAP-02741":{"line":5996,"offset":1073530,"length":192,"previous":"M21-GAP-02740","next":"M21-GAP-02742"},"M21-GAP-02742":{"line":5997,"offset":1073722,"length":192,"previous":"M21-GAP-02741","next":"M21-GAP-02743"},"M21-GAP-02743":{"line":5998,"offset":1073914,"length":192,"previous":"M21-GAP-02742","next":"M21-GAP-02744"},"M21-GAP-02744":{"line":5999,"offset":1074106,"length":192,"previous":"M21-GAP-02743","next":"M21-GAP-02745"},"M21-GAP-02745":{"line":6000,"offset":1074298,"length":192,"previous":"M21-GAP-02744","next":"M21-GAP-02746"},"M21-GAP-02746":{"line":6001,"offset":1074490,"length":185,"previous":"M21-GAP-02745","next":"M21-GAP-02747"},"M21-GAP-02747":{"line":6002,"offset":1074675,"length":185,"previous":"M21-GAP-02746","next":"M21-GAP-02748"},"M21-GAP-02748":{"line":6003,"offset":1074860,"length":185,"previous":"M21-GAP-02747","next":"M21-GAP-02749"},"M21-GAP-02749":{"line":6004,"offset":1075045,"length":185,"previous":"M21-GAP-02748","next":"M21-GAP-02750"},"M21-GAP-02750":{"line":6005,"offset":1075230,"length":185,"previous":"M21-GAP-02749","next":"M21-GAP-02751"},"M21-GAP-02751":{"line":6006,"offset":1075415,"length":185,"previous":"M21-GAP-02750","next":"M21-GAP-02752"},"M21-GAP-02752":{"line":6007,"offset":1075600,"length":185,"previous":"M21-GAP-02751","next":"M21-GAP-02753"},"M21-GAP-02753":{"line":6008,"offset":1075785,"length":185,"previous":"M21-GAP-02752","next":"M21-GAP-02754"},"M21-GAP-02754":{"line":6009,"offset":1075970,"length":185,"previous":"M21-GAP-02753","next":"M21-GAP-02755"},"M21-GAP-02755":{"line":6010,"offset":1076155,"length":185,"previous":"M21-GAP-02754","next":"M21-GAP-02756"},"M21-GAP-02756":{"line":6011,"offset":1076340,"length":185,"previous":"M21-GAP-02755","next":"M21-GAP-02757"},"M21-GAP-02757":{"line":6012,"offset":1076525,"length":185,"previous":"M21-GAP-02756","next":"M21-GAP-02758"},"M21-GAP-02758":{"line":6013,"offset":1076710,"length":185,"previous":"M21-GAP-02757","next":"M21-GAP-02759"},"M21-GAP-02759":{"line":6014,"offset":1076895,"length":177,"previous":"M21-GAP-02758","next":"M21-GAP-02760"},"M21-GAP-02760":{"line":6015,"offset":1077072,"length":177,"previous":"M21-GAP-02759","next":"M21-GAP-02761"},"M21-GAP-02761":{"line":6016,"offset":1077249,"length":178,"previous":"M21-GAP-02760","next":"M21-GAP-02762"},"M21-GAP-02762":{"line":6017,"offset":1077427,"length":178,"previous":"M21-GAP-02761","next":"M21-GAP-02763"},"M21-GAP-02763":{"line":6018,"offset":1077605,"length":178,"previous":"M21-GAP-02762","next":"M21-GAP-02764"},"M21-GAP-02764":{"line":6019,"offset":1077783,"length":178,"previous":"M21-GAP-02763","next":"M21-GAP-02765"},"M21-GAP-02765":{"line":6020,"offset":1077961,"length":178,"previous":"M21-GAP-02764","next":"M21-GAP-02766"},"M21-GAP-02766":{"line":6021,"offset":1078139,"length":178,"previous":"M21-GAP-02765","next":"M21-GAP-02767"},"M21-GAP-02767":{"line":6022,"offset":1078317,"length":178,"previous":"M21-GAP-02766","next":"M21-GAP-02768"},"M21-GAP-02768":{"line":6023,"offset":1078495,"length":178,"previous":"M21-GAP-02767","next":"M21-GAP-02769"},"M21-GAP-02769":{"line":6024,"offset":1078673,"length":178,"previous":"M21-GAP-02768","next":"M21-GAP-02770"},"M21-GAP-02770":{"line":6025,"offset":1078851,"length":178,"previous":"M21-GAP-02769","next":"M21-GAP-02771"},"M21-GAP-02771":{"line":6026,"offset":1079029,"length":177,"previous":"M21-GAP-02770","next":"M21-GAP-02772"},"M21-GAP-02772":{"line":6027,"offset":1079206,"length":178,"previous":"M21-GAP-02771","next":"M21-GAP-02773"},"M21-GAP-02773":{"line":6028,"offset":1079384,"length":178,"previous":"M21-GAP-02772","next":"M21-GAP-02774"},"M21-GAP-02774":{"line":6029,"offset":1079562,"length":178,"previous":"M21-GAP-02773","next":"M21-GAP-02775"},"M21-GAP-02775":{"line":6030,"offset":1079740,"length":178,"previous":"M21-GAP-02774","next":"M21-GAP-02776"},"M21-GAP-02776":{"line":6031,"offset":1079918,"length":178,"previous":"M21-GAP-02775","next":"M21-GAP-02777"},"M21-GAP-02777":{"line":6032,"offset":1080096,"length":178,"previous":"M21-GAP-02776","next":"M21-GAP-02778"},"M21-GAP-02778":{"line":6033,"offset":1080274,"length":178,"previous":"M21-GAP-02777","next":"M21-GAP-02779"},"M21-GAP-02779":{"line":6034,"offset":1080452,"length":178,"previous":"M21-GAP-02778","next":"M21-GAP-02780"},"M21-GAP-02780":{"line":6035,"offset":1080630,"length":178,"previous":"M21-GAP-02779","next":"M21-GAP-02781"},"M21-GAP-02781":{"line":6036,"offset":1080808,"length":178,"previous":"M21-GAP-02780","next":"M21-GAP-02782"},"M21-GAP-02782":{"line":6037,"offset":1080986,"length":177,"previous":"M21-GAP-02781","next":"M21-GAP-02783"},"M21-GAP-02783":{"line":6038,"offset":1081163,"length":178,"previous":"M21-GAP-02782","next":"M21-GAP-02784"},"M21-GAP-02784":{"line":6039,"offset":1081341,"length":178,"previous":"M21-GAP-02783","next":"M21-GAP-02785"},"M21-GAP-02785":{"line":6040,"offset":1081519,"length":178,"previous":"M21-GAP-02784","next":"M21-GAP-02786"},"M21-GAP-02786":{"line":6041,"offset":1081697,"length":178,"previous":"M21-GAP-02785","next":"M21-GAP-02787"},"M21-GAP-02787":{"line":6042,"offset":1081875,"length":178,"previous":"M21-GAP-02786","next":"M21-GAP-02788"},"M21-GAP-02788":{"line":6043,"offset":1082053,"length":178,"previous":"M21-GAP-02787","next":"M21-GAP-02789"},"M21-GAP-02789":{"line":6044,"offset":1082231,"length":178,"previous":"M21-GAP-02788","next":"M21-GAP-02790"},"M21-GAP-02790":{"line":6045,"offset":1082409,"length":178,"previous":"M21-GAP-02789","next":"M21-GAP-02791"},"M21-GAP-02791":{"line":6046,"offset":1082587,"length":178,"previous":"M21-GAP-02790","next":"M21-GAP-02792"},"M21-GAP-02792":{"line":6047,"offset":1082765,"length":178,"previous":"M21-GAP-02791","next":"M21-GAP-02793"},"M21-GAP-02793":{"line":6048,"offset":1082943,"length":177,"previous":"M21-GAP-02792","next":"M21-GAP-02794"},"M21-GAP-02794":{"line":6049,"offset":1083120,"length":178,"previous":"M21-GAP-02793","next":"M21-GAP-02795"},"M21-GAP-02795":{"line":6050,"offset":1083298,"length":178,"previous":"M21-GAP-02794","next":"M21-GAP-02796"},"M21-GAP-02796":{"line":6051,"offset":1083476,"length":178,"previous":"M21-GAP-02795","next":"M21-GAP-02797"},"M21-GAP-02797":{"line":6052,"offset":1083654,"length":178,"previous":"M21-GAP-02796","next":"M21-GAP-02798"},"M21-GAP-02798":{"line":6053,"offset":1083832,"length":178,"previous":"M21-GAP-02797","next":"M21-GAP-02799"},"M21-GAP-02799":{"line":6054,"offset":1084010,"length":178,"previous":"M21-GAP-02798","next":"M21-GAP-02800"},"M21-GAP-02800":{"line":6055,"offset":1084188,"length":178,"previous":"M21-GAP-02799","next":"M21-GAP-02801"},"M21-GAP-02801":{"line":6056,"offset":1084366,"length":178,"previous":"M21-GAP-02800","next":"M21-GAP-02802"},"M21-GAP-02802":{"line":6057,"offset":1084544,"length":178,"previous":"M21-GAP-02801","next":"M21-GAP-02803"},"M21-GAP-02803":{"line":6058,"offset":1084722,"length":178,"previous":"M21-GAP-02802","next":"M21-GAP-02804"},"M21-GAP-02804":{"line":6059,"offset":1084900,"length":177,"previous":"M21-GAP-02803","next":"M21-GAP-02805"},"M21-GAP-02805":{"line":6060,"offset":1085077,"length":178,"previous":"M21-GAP-02804","next":"M21-GAP-02806"},"M21-GAP-02806":{"line":6061,"offset":1085255,"length":178,"previous":"M21-GAP-02805","next":"M21-GAP-02807"},"M21-GAP-02807":{"line":6062,"offset":1085433,"length":178,"previous":"M21-GAP-02806","next":"M21-GAP-02808"},"M21-GAP-02808":{"line":6063,"offset":1085611,"length":178,"previous":"M21-GAP-02807","next":"M21-GAP-02809"},"M21-GAP-02809":{"line":6064,"offset":1085789,"length":178,"previous":"M21-GAP-02808","next":"M21-GAP-02810"},"M21-GAP-02810":{"line":6065,"offset":1085967,"length":178,"previous":"M21-GAP-02809","next":"M21-GAP-02811"},"M21-GAP-02811":{"line":6066,"offset":1086145,"length":178,"previous":"M21-GAP-02810","next":"M21-GAP-02812"},"M21-GAP-02812":{"line":6067,"offset":1086323,"length":178,"previous":"M21-GAP-02811","next":"M21-GAP-02813"},"M21-GAP-02813":{"line":6068,"offset":1086501,"length":178,"previous":"M21-GAP-02812","next":"M21-GAP-02814"},"M21-GAP-02814":{"line":6069,"offset":1086679,"length":178,"previous":"M21-GAP-02813","next":"M21-GAP-02815"},"M21-GAP-02815":{"line":6070,"offset":1086857,"length":177,"previous":"M21-GAP-02814","next":"M21-GAP-02816"},"M21-GAP-02816":{"line":6071,"offset":1087034,"length":178,"previous":"M21-GAP-02815","next":"M21-GAP-02817"},"M21-GAP-02817":{"line":6072,"offset":1087212,"length":178,"previous":"M21-GAP-02816","next":"M21-GAP-02818"},"M21-GAP-02818":{"line":6073,"offset":1087390,"length":178,"previous":"M21-GAP-02817","next":"M21-GAP-02819"},"M21-GAP-02819":{"line":6074,"offset":1087568,"length":178,"previous":"M21-GAP-02818","next":"M21-GAP-02820"},"M21-GAP-02820":{"line":6075,"offset":1087746,"length":178,"previous":"M21-GAP-02819","next":"M21-GAP-02821"},"M21-GAP-02821":{"line":6076,"offset":1087924,"length":178,"previous":"M21-GAP-02820","next":"M21-GAP-02822"},"M21-GAP-02822":{"line":6077,"offset":1088102,"length":178,"previous":"M21-GAP-02821","next":"M21-GAP-02823"},"M21-GAP-02823":{"line":6078,"offset":1088280,"length":178,"previous":"M21-GAP-02822","next":"M21-GAP-02824"},"M21-GAP-02824":{"line":6079,"offset":1088458,"length":178,"previous":"M21-GAP-02823","next":"M21-GAP-02825"},"M21-GAP-02825":{"line":6080,"offset":1088636,"length":178,"previous":"M21-GAP-02824","next":"M21-GAP-02826"},"M21-GAP-02826":{"line":6081,"offset":1088814,"length":177,"previous":"M21-GAP-02825","next":"M21-GAP-02827"},"M21-GAP-02827":{"line":6082,"offset":1088991,"length":178,"previous":"M21-GAP-02826","next":"M21-GAP-02828"},"M21-GAP-02828":{"line":6083,"offset":1089169,"length":177,"previous":"M21-GAP-02827","next":"M21-GAP-02829"},"M21-GAP-02829":{"line":6084,"offset":1089346,"length":177,"previous":"M21-GAP-02828","next":"M21-GAP-02830"},"M21-GAP-02830":{"line":6085,"offset":1089523,"length":177,"previous":"M21-GAP-02829","next":"M21-GAP-02831"},"M21-GAP-02831":{"line":6086,"offset":1089700,"length":183,"previous":"M21-GAP-02830","next":"M21-GAP-02832"},"M21-GAP-02832":{"line":6087,"offset":1089883,"length":183,"previous":"M21-GAP-02831","next":"M21-GAP-02833"},"M21-GAP-02833":{"line":6088,"offset":1090066,"length":183,"previous":"M21-GAP-02832","next":"M21-GAP-02834"},"M21-GAP-02834":{"line":6089,"offset":1090249,"length":183,"previous":"M21-GAP-02833","next":"M21-GAP-02835"},"M21-GAP-02835":{"line":6090,"offset":1090432,"length":183,"previous":"M21-GAP-02834","next":"M21-GAP-02836"},"M21-GAP-02836":{"line":6091,"offset":1090615,"length":198,"previous":"M21-GAP-02835","next":"M21-GAP-02837"},"M21-GAP-02837":{"line":6092,"offset":1090813,"length":198,"previous":"M21-GAP-02836","next":"M21-GAP-02838"},"M21-GAP-02838":{"line":6093,"offset":1091011,"length":198,"previous":"M21-GAP-02837","next":"M21-GAP-02839"},"M21-GAP-02839":{"line":6094,"offset":1091209,"length":198,"previous":"M21-GAP-02838","next":"M21-GAP-02840"},"M21-GAP-02840":{"line":6095,"offset":1091407,"length":198,"previous":"M21-GAP-02839","next":"M21-GAP-02841"},"M21-GAP-02841":{"line":6096,"offset":1091605,"length":198,"previous":"M21-GAP-02840","next":"M21-GAP-02842"},"M21-GAP-02842":{"line":6097,"offset":1091803,"length":198,"previous":"M21-GAP-02841","next":"M21-GAP-02843"},"M21-GAP-02843":{"line":6098,"offset":1092001,"length":198,"previous":"M21-GAP-02842","next":"M21-GAP-02844"},"M21-GAP-02844":{"line":6099,"offset":1092199,"length":198,"previous":"M21-GAP-02843","next":"M21-GAP-02845"},"M21-GAP-02845":{"line":6100,"offset":1092397,"length":186,"previous":"M21-GAP-02844","next":"M21-GAP-02846"},"M21-GAP-02846":{"line":6101,"offset":1092583,"length":186,"previous":"M21-GAP-02845","next":"M21-GAP-02847"},"M21-GAP-02847":{"line":6102,"offset":1092769,"length":187,"previous":"M21-GAP-02846","next":"M21-GAP-02848"},"M21-GAP-02848":{"line":6103,"offset":1092956,"length":187,"previous":"M21-GAP-02847","next":"M21-GAP-02849"},"M21-GAP-02849":{"line":6104,"offset":1093143,"length":187,"previous":"M21-GAP-02848","next":"M21-GAP-02850"},"M21-GAP-02850":{"line":6105,"offset":1093330,"length":187,"previous":"M21-GAP-02849","next":"M21-GAP-02851"},"M21-GAP-02851":{"line":6106,"offset":1093517,"length":187,"previous":"M21-GAP-02850","next":"M21-GAP-02852"},"M21-GAP-02852":{"line":6107,"offset":1093704,"length":187,"previous":"M21-GAP-02851","next":"M21-GAP-02853"},"M21-GAP-02853":{"line":6108,"offset":1093891,"length":187,"previous":"M21-GAP-02852","next":"M21-GAP-02854"},"M21-GAP-02854":{"line":6109,"offset":1094078,"length":187,"previous":"M21-GAP-02853","next":"M21-GAP-02855"},"M21-GAP-02855":{"line":6110,"offset":1094265,"length":187,"previous":"M21-GAP-02854","next":"M21-GAP-02856"},"M21-GAP-02856":{"line":6111,"offset":1094452,"length":187,"previous":"M21-GAP-02855","next":"M21-GAP-02857"},"M21-GAP-02857":{"line":6112,"offset":1094639,"length":186,"previous":"M21-GAP-02856","next":"M21-GAP-02858"},"M21-GAP-02858":{"line":6113,"offset":1094825,"length":187,"previous":"M21-GAP-02857","next":"M21-GAP-02859"},"M21-GAP-02859":{"line":6114,"offset":1095012,"length":187,"previous":"M21-GAP-02858","next":"M21-GAP-02860"},"M21-GAP-02860":{"line":6115,"offset":1095199,"length":187,"previous":"M21-GAP-02859","next":"M21-GAP-02861"},"M21-GAP-02861":{"line":6116,"offset":1095386,"length":187,"previous":"M21-GAP-02860","next":"M21-GAP-02862"},"M21-GAP-02862":{"line":6117,"offset":1095573,"length":187,"previous":"M21-GAP-02861","next":"M21-GAP-02863"},"M21-GAP-02863":{"line":6118,"offset":1095760,"length":187,"previous":"M21-GAP-02862","next":"M21-GAP-02864"},"M21-GAP-02864":{"line":6119,"offset":1095947,"length":187,"previous":"M21-GAP-02863","next":"M21-GAP-02865"},"M21-GAP-02865":{"line":6120,"offset":1096134,"length":187,"previous":"M21-GAP-02864","next":"M21-GAP-02866"},"M21-GAP-02866":{"line":6121,"offset":1096321,"length":187,"previous":"M21-GAP-02865","next":"M21-GAP-02867"},"M21-GAP-02867":{"line":6122,"offset":1096508,"length":187,"previous":"M21-GAP-02866","next":"M21-GAP-02868"},"M21-GAP-02868":{"line":6123,"offset":1096695,"length":186,"previous":"M21-GAP-02867","next":"M21-GAP-02869"},"M21-GAP-02869":{"line":6124,"offset":1096881,"length":187,"previous":"M21-GAP-02868","next":"M21-GAP-02870"},"M21-GAP-02870":{"line":6125,"offset":1097068,"length":187,"previous":"M21-GAP-02869","next":"M21-GAP-02871"},"M21-GAP-02871":{"line":6126,"offset":1097255,"length":187,"previous":"M21-GAP-02870","next":"M21-GAP-02872"},"M21-GAP-02872":{"line":6127,"offset":1097442,"length":187,"previous":"M21-GAP-02871","next":"M21-GAP-02873"},"M21-GAP-02873":{"line":6128,"offset":1097629,"length":187,"previous":"M21-GAP-02872","next":"M21-GAP-02874"},"M21-GAP-02874":{"line":6129,"offset":1097816,"length":187,"previous":"M21-GAP-02873","next":"M21-GAP-02875"},"M21-GAP-02875":{"line":6130,"offset":1098003,"length":187,"previous":"M21-GAP-02874","next":"M21-GAP-02876"},"M21-GAP-02876":{"line":6131,"offset":1098190,"length":187,"previous":"M21-GAP-02875","next":"M21-GAP-02877"},"M21-GAP-02877":{"line":6132,"offset":1098377,"length":187,"previous":"M21-GAP-02876","next":"M21-GAP-02878"},"M21-GAP-02878":{"line":6133,"offset":1098564,"length":187,"previous":"M21-GAP-02877","next":"M21-GAP-02879"},"M21-GAP-02879":{"line":6134,"offset":1098751,"length":186,"previous":"M21-GAP-02878","next":"M21-GAP-02880"},"M21-GAP-02880":{"line":6135,"offset":1098937,"length":187,"previous":"M21-GAP-02879","next":"M21-GAP-02881"},"M21-GAP-02881":{"line":6136,"offset":1099124,"length":187,"previous":"M21-GAP-02880","next":"M21-GAP-02882"},"M21-GAP-02882":{"line":6137,"offset":1099311,"length":187,"previous":"M21-GAP-02881","next":"M21-GAP-02883"},"M21-GAP-02883":{"line":6138,"offset":1099498,"length":187,"previous":"M21-GAP-02882","next":"M21-GAP-02884"},"M21-GAP-02884":{"line":6139,"offset":1099685,"length":187,"previous":"M21-GAP-02883","next":"M21-GAP-02885"},"M21-GAP-02885":{"line":6140,"offset":1099872,"length":187,"previous":"M21-GAP-02884","next":"M21-GAP-02886"},"M21-GAP-02886":{"line":6141,"offset":1100059,"length":187,"previous":"M21-GAP-02885","next":"M21-GAP-02887"},"M21-GAP-02887":{"line":6142,"offset":1100246,"length":187,"previous":"M21-GAP-02886","next":"M21-GAP-02888"},"M21-GAP-02888":{"line":6143,"offset":1100433,"length":187,"previous":"M21-GAP-02887","next":"M21-GAP-02889"},"M21-GAP-02889":{"line":6144,"offset":1100620,"length":187,"previous":"M21-GAP-02888","next":"M21-GAP-02890"},"M21-GAP-02890":{"line":6145,"offset":1100807,"length":186,"previous":"M21-GAP-02889","next":"M21-GAP-02891"},"M21-GAP-02891":{"line":6146,"offset":1100993,"length":187,"previous":"M21-GAP-02890","next":"M21-GAP-02892"},"M21-GAP-02892":{"line":6147,"offset":1101180,"length":187,"previous":"M21-GAP-02891","next":"M21-GAP-02893"},"M21-GAP-02893":{"line":6148,"offset":1101367,"length":187,"previous":"M21-GAP-02892","next":"M21-GAP-02894"},"M21-GAP-02894":{"line":6149,"offset":1101554,"length":187,"previous":"M21-GAP-02893","next":"M21-GAP-02895"},"M21-GAP-02895":{"line":6150,"offset":1101741,"length":187,"previous":"M21-GAP-02894","next":"M21-GAP-02896"},"M21-GAP-02896":{"line":6151,"offset":1101928,"length":187,"previous":"M21-GAP-02895","next":"M21-GAP-02897"},"M21-GAP-02897":{"line":6152,"offset":1102115,"length":186,"previous":"M21-GAP-02896","next":"M21-GAP-02898"},"M21-GAP-02898":{"line":6153,"offset":1102301,"length":186,"previous":"M21-GAP-02897","next":"M21-GAP-02899"},"M21-GAP-02899":{"line":6154,"offset":1102487,"length":186,"previous":"M21-GAP-02898","next":"M21-GAP-02900"},"M21-GAP-02900":{"line":6155,"offset":1102673,"length":186,"previous":"M21-GAP-02899","next":"M21-GAP-02901"},"M21-GAP-02901":{"line":6156,"offset":1102859,"length":176,"previous":"M21-GAP-02900","next":"M21-GAP-02902"},"M21-GAP-02902":{"line":6157,"offset":1103035,"length":176,"previous":"M21-GAP-02901","next":"M21-GAP-02903"},"M21-GAP-02903":{"line":6158,"offset":1103211,"length":177,"previous":"M21-GAP-02902","next":"M21-GAP-02904"},"M21-GAP-02904":{"line":6159,"offset":1103388,"length":177,"previous":"M21-GAP-02903","next":"M21-GAP-02905"},"M21-GAP-02905":{"line":6160,"offset":1103565,"length":177,"previous":"M21-GAP-02904","next":"M21-GAP-02906"},"M21-GAP-02906":{"line":6161,"offset":1103742,"length":177,"previous":"M21-GAP-02905","next":"M21-GAP-02907"},"M21-GAP-02907":{"line":6162,"offset":1103919,"length":177,"previous":"M21-GAP-02906","next":"M21-GAP-02908"},"M21-GAP-02908":{"line":6163,"offset":1104096,"length":177,"previous":"M21-GAP-02907","next":"M21-GAP-02909"},"M21-GAP-02909":{"line":6164,"offset":1104273,"length":177,"previous":"M21-GAP-02908","next":"M21-GAP-02910"},"M21-GAP-02910":{"line":6165,"offset":1104450,"length":177,"previous":"M21-GAP-02909","next":"M21-GAP-02911"},"M21-GAP-02911":{"line":6166,"offset":1104627,"length":177,"previous":"M21-GAP-02910","next":"M21-GAP-02912"},"M21-GAP-02912":{"line":6167,"offset":1104804,"length":177,"previous":"M21-GAP-02911","next":"M21-GAP-02913"},"M21-GAP-02913":{"line":6168,"offset":1104981,"length":176,"previous":"M21-GAP-02912","next":"M21-GAP-02914"},"M21-GAP-02914":{"line":6169,"offset":1105157,"length":177,"previous":"M21-GAP-02913","next":"M21-GAP-02915"},"M21-GAP-02915":{"line":6170,"offset":1105334,"length":177,"previous":"M21-GAP-02914","next":"M21-GAP-02916"},"M21-GAP-02916":{"line":6171,"offset":1105511,"length":177,"previous":"M21-GAP-02915","next":"M21-GAP-02917"},"M21-GAP-02917":{"line":6172,"offset":1105688,"length":177,"previous":"M21-GAP-02916","next":"M21-GAP-02918"},"M21-GAP-02918":{"line":6173,"offset":1105865,"length":177,"previous":"M21-GAP-02917","next":"M21-GAP-02919"},"M21-GAP-02919":{"line":6174,"offset":1106042,"length":177,"previous":"M21-GAP-02918","next":"M21-GAP-02920"},"M21-GAP-02920":{"line":6175,"offset":1106219,"length":177,"previous":"M21-GAP-02919","next":"M21-GAP-02921"},"M21-GAP-02921":{"line":6176,"offset":1106396,"length":177,"previous":"M21-GAP-02920","next":"M21-GAP-02922"},"M21-GAP-02922":{"line":6177,"offset":1106573,"length":177,"previous":"M21-GAP-02921","next":"M21-GAP-02923"},"M21-GAP-02923":{"line":6178,"offset":1106750,"length":177,"previous":"M21-GAP-02922","next":"M21-GAP-02924"},"M21-GAP-02924":{"line":6179,"offset":1106927,"length":176,"previous":"M21-GAP-02923","next":"M21-GAP-02925"},"M21-GAP-02925":{"line":6180,"offset":1107103,"length":177,"previous":"M21-GAP-02924","next":"M21-GAP-02926"},"M21-GAP-02926":{"line":6181,"offset":1107280,"length":177,"previous":"M21-GAP-02925","next":"M21-GAP-02927"},"M21-GAP-02927":{"line":6182,"offset":1107457,"length":177,"previous":"M21-GAP-02926","next":"M21-GAP-02928"},"M21-GAP-02928":{"line":6183,"offset":1107634,"length":177,"previous":"M21-GAP-02927","next":"M21-GAP-02929"},"M21-GAP-02929":{"line":6184,"offset":1107811,"length":177,"previous":"M21-GAP-02928","next":"M21-GAP-02930"},"M21-GAP-02930":{"line":6185,"offset":1107988,"length":177,"previous":"M21-GAP-02929","next":"M21-GAP-02931"},"M21-GAP-02931":{"line":6186,"offset":1108165,"length":177,"previous":"M21-GAP-02930","next":"M21-GAP-02932"},"M21-GAP-02932":{"line":6187,"offset":1108342,"length":177,"previous":"M21-GAP-02931","next":"M21-GAP-02933"},"M21-GAP-02933":{"line":6188,"offset":1108519,"length":177,"previous":"M21-GAP-02932","next":"M21-GAP-02934"},"M21-GAP-02934":{"line":6189,"offset":1108696,"length":177,"previous":"M21-GAP-02933","next":"M21-GAP-02935"},"M21-GAP-02935":{"line":6190,"offset":1108873,"length":176,"previous":"M21-GAP-02934","next":"M21-GAP-02936"},"M21-GAP-02936":{"line":6191,"offset":1109049,"length":177,"previous":"M21-GAP-02935","next":"M21-GAP-02937"},"M21-GAP-02937":{"line":6192,"offset":1109226,"length":177,"previous":"M21-GAP-02936","next":"M21-GAP-02938"},"M21-GAP-02938":{"line":6193,"offset":1109403,"length":177,"previous":"M21-GAP-02937","next":"M21-GAP-02939"},"M21-GAP-02939":{"line":6194,"offset":1109580,"length":177,"previous":"M21-GAP-02938","next":"M21-GAP-02940"},"M21-GAP-02940":{"line":6195,"offset":1109757,"length":177,"previous":"M21-GAP-02939","next":"M21-GAP-02941"},"M21-GAP-02941":{"line":6196,"offset":1109934,"length":177,"previous":"M21-GAP-02940","next":"M21-GAP-02942"},"M21-GAP-02942":{"line":6197,"offset":1110111,"length":177,"previous":"M21-GAP-02941","next":"M21-GAP-02943"},"M21-GAP-02943":{"line":6198,"offset":1110288,"length":177,"previous":"M21-GAP-02942","next":"M21-GAP-02944"},"M21-GAP-02944":{"line":6199,"offset":1110465,"length":177,"previous":"M21-GAP-02943","next":"M21-GAP-02945"},"M21-GAP-02945":{"line":6200,"offset":1110642,"length":177,"previous":"M21-GAP-02944","next":"M21-GAP-02946"},"M21-GAP-02946":{"line":6201,"offset":1110819,"length":176,"previous":"M21-GAP-02945","next":"M21-GAP-02947"},"M21-GAP-02947":{"line":6202,"offset":1110995,"length":177,"previous":"M21-GAP-02946","next":"M21-GAP-02948"},"M21-GAP-02948":{"line":6203,"offset":1111172,"length":177,"previous":"M21-GAP-02947","next":"M21-GAP-02949"},"M21-GAP-02949":{"line":6204,"offset":1111349,"length":177,"previous":"M21-GAP-02948","next":"M21-GAP-02950"},"M21-GAP-02950":{"line":6205,"offset":1111526,"length":177,"previous":"M21-GAP-02949","next":"M21-GAP-02951"},"M21-GAP-02951":{"line":6206,"offset":1111703,"length":177,"previous":"M21-GAP-02950","next":"M21-GAP-02952"},"M21-GAP-02952":{"line":6207,"offset":1111880,"length":177,"previous":"M21-GAP-02951","next":"M21-GAP-02953"},"M21-GAP-02953":{"line":6208,"offset":1112057,"length":177,"previous":"M21-GAP-02952","next":"M21-GAP-02954"},"M21-GAP-02954":{"line":6209,"offset":1112234,"length":177,"previous":"M21-GAP-02953","next":"M21-GAP-02955"},"M21-GAP-02955":{"line":6210,"offset":1112411,"length":177,"previous":"M21-GAP-02954","next":"M21-GAP-02956"},"M21-GAP-02956":{"line":6211,"offset":1112588,"length":177,"previous":"M21-GAP-02955","next":"M21-GAP-02957"},"M21-GAP-02957":{"line":6212,"offset":1112765,"length":176,"previous":"M21-GAP-02956","next":"M21-GAP-02958"},"M21-GAP-02958":{"line":6213,"offset":1112941,"length":177,"previous":"M21-GAP-02957","next":"M21-GAP-02959"},"M21-GAP-02959":{"line":6214,"offset":1113118,"length":177,"previous":"M21-GAP-02958","next":"M21-GAP-02960"},"M21-GAP-02960":{"line":6215,"offset":1113295,"length":177,"previous":"M21-GAP-02959","next":"M21-GAP-02961"},"M21-GAP-02961":{"line":6216,"offset":1113472,"length":177,"previous":"M21-GAP-02960","next":"M21-GAP-02962"},"M21-GAP-02962":{"line":6217,"offset":1113649,"length":177,"previous":"M21-GAP-02961","next":"M21-GAP-02963"},"M21-GAP-02963":{"line":6218,"offset":1113826,"length":177,"previous":"M21-GAP-02962","next":"M21-GAP-02964"},"M21-GAP-02964":{"line":6219,"offset":1114003,"length":177,"previous":"M21-GAP-02963","next":"M21-GAP-02965"},"M21-GAP-02965":{"line":6220,"offset":1114180,"length":177,"previous":"M21-GAP-02964","next":"M21-GAP-02966"},"M21-GAP-02966":{"line":6221,"offset":1114357,"length":177,"previous":"M21-GAP-02965","next":"M21-GAP-02967"},"M21-GAP-02967":{"line":6222,"offset":1114534,"length":177,"previous":"M21-GAP-02966","next":"M21-GAP-02968"},"M21-GAP-02968":{"line":6223,"offset":1114711,"length":176,"previous":"M21-GAP-02967","next":"M21-GAP-02969"},"M21-GAP-02969":{"line":6224,"offset":1114887,"length":177,"previous":"M21-GAP-02968","next":"M21-GAP-02970"},"M21-GAP-02970":{"line":6225,"offset":1115064,"length":177,"previous":"M21-GAP-02969","next":"M21-GAP-02971"},"M21-GAP-02971":{"line":6226,"offset":1115241,"length":177,"previous":"M21-GAP-02970","next":"M21-GAP-02972"},"M21-GAP-02972":{"line":6227,"offset":1115418,"length":177,"previous":"M21-GAP-02971","next":"M21-GAP-02973"},"M21-GAP-02973":{"line":6228,"offset":1115595,"length":177,"previous":"M21-GAP-02972","next":"M21-GAP-02974"},"M21-GAP-02974":{"line":6229,"offset":1115772,"length":177,"previous":"M21-GAP-02973","next":"M21-GAP-02975"},"M21-GAP-02975":{"line":6230,"offset":1115949,"length":177,"previous":"M21-GAP-02974","next":"M21-GAP-02976"},"M21-GAP-02976":{"line":6231,"offset":1116126,"length":177,"previous":"M21-GAP-02975","next":"M21-GAP-02977"},"M21-GAP-02977":{"line":6232,"offset":1116303,"length":177,"previous":"M21-GAP-02976","next":"M21-GAP-02978"},"M21-GAP-02978":{"line":6233,"offset":1116480,"length":177,"previous":"M21-GAP-02977","next":"M21-GAP-02979"},"M21-GAP-02979":{"line":6234,"offset":1116657,"length":176,"previous":"M21-GAP-02978","next":"M21-GAP-02980"},"M21-GAP-02980":{"line":6235,"offset":1116833,"length":177,"previous":"M21-GAP-02979","next":"M21-GAP-02981"},"M21-GAP-02981":{"line":6236,"offset":1117010,"length":177,"previous":"M21-GAP-02980","next":"M21-GAP-02982"},"M21-GAP-02982":{"line":6237,"offset":1117187,"length":177,"previous":"M21-GAP-02981","next":"M21-GAP-02983"},"M21-GAP-02983":{"line":6238,"offset":1117364,"length":177,"previous":"M21-GAP-02982","next":"M21-GAP-02984"},"M21-GAP-02984":{"line":6239,"offset":1117541,"length":177,"previous":"M21-GAP-02983","next":"M21-GAP-02985"},"M21-GAP-02985":{"line":6240,"offset":1117718,"length":177,"previous":"M21-GAP-02984","next":"M21-GAP-02986"},"M21-GAP-02986":{"line":6241,"offset":1117895,"length":177,"previous":"M21-GAP-02985","next":"M21-GAP-02987"},"M21-GAP-02987":{"line":6242,"offset":1118072,"length":177,"previous":"M21-GAP-02986","next":"M21-GAP-02988"},"M21-GAP-02988":{"line":6243,"offset":1118249,"length":176,"previous":"M21-GAP-02987","next":"M21-GAP-02989"},"M21-GAP-02989":{"line":6244,"offset":1118425,"length":181,"previous":"M21-GAP-02988","next":"M21-GAP-02990"},"M21-GAP-02990":{"line":6245,"offset":1118606,"length":181,"previous":"M21-GAP-02989","next":"M21-GAP-02991"},"M21-GAP-02991":{"line":6246,"offset":1118787,"length":182,"previous":"M21-GAP-02990","next":"M21-GAP-02992"},"M21-GAP-02992":{"line":6247,"offset":1118969,"length":182,"previous":"M21-GAP-02991","next":"M21-GAP-02993"},"M21-GAP-02993":{"line":6248,"offset":1119151,"length":182,"previous":"M21-GAP-02992","next":"M21-GAP-02994"},"M21-GAP-02994":{"line":6249,"offset":1119333,"length":182,"previous":"M21-GAP-02993","next":"M21-GAP-02995"},"M21-GAP-02995":{"line":6250,"offset":1119515,"length":182,"previous":"M21-GAP-02994","next":"M21-GAP-02996"},"M21-GAP-02996":{"line":6251,"offset":1119697,"length":182,"previous":"M21-GAP-02995","next":"M21-GAP-02997"},"M21-GAP-02997":{"line":6252,"offset":1119879,"length":182,"previous":"M21-GAP-02996","next":"M21-GAP-02998"},"M21-GAP-02998":{"line":6253,"offset":1120061,"length":182,"previous":"M21-GAP-02997","next":"M21-GAP-02999"},"M21-GAP-02999":{"line":6254,"offset":1120243,"length":182,"previous":"M21-GAP-02998","next":"M21-GAP-03000"},"M21-GAP-03000":{"line":6255,"offset":1120425,"length":182,"previous":"M21-GAP-02999","next":"M21-GAP-03001"},"M21-GAP-03001":{"line":6256,"offset":1120607,"length":181,"previous":"M21-GAP-03000","next":"M21-GAP-03002"},"M21-GAP-03002":{"line":6257,"offset":1120788,"length":182,"previous":"M21-GAP-03001","next":"M21-GAP-03003"},"M21-GAP-03003":{"line":6258,"offset":1120970,"length":182,"previous":"M21-GAP-03002","next":"M21-GAP-03004"},"M21-GAP-03004":{"line":6259,"offset":1121152,"length":182,"previous":"M21-GAP-03003","next":"M21-GAP-03005"},"M21-GAP-03005":{"line":6260,"offset":1121334,"length":182,"previous":"M21-GAP-03004","next":"M21-GAP-03006"},"M21-GAP-03006":{"line":6261,"offset":1121516,"length":182,"previous":"M21-GAP-03005","next":"M21-GAP-03007"},"M21-GAP-03007":{"line":6262,"offset":1121698,"length":182,"previous":"M21-GAP-03006","next":"M21-GAP-03008"},"M21-GAP-03008":{"line":6263,"offset":1121880,"length":182,"previous":"M21-GAP-03007","next":"M21-GAP-03009"},"M21-GAP-03009":{"line":6264,"offset":1122062,"length":182,"previous":"M21-GAP-03008","next":"M21-GAP-03010"},"M21-GAP-03010":{"line":6265,"offset":1122244,"length":182,"previous":"M21-GAP-03009","next":"M21-GAP-03011"},"M21-GAP-03011":{"line":6266,"offset":1122426,"length":182,"previous":"M21-GAP-03010","next":"M21-GAP-03012"},"M21-GAP-03012":{"line":6267,"offset":1122608,"length":181,"previous":"M21-GAP-03011","next":"M21-GAP-03013"},"M21-GAP-03013":{"line":6268,"offset":1122789,"length":182,"previous":"M21-GAP-03012","next":"M21-GAP-03014"},"M21-GAP-03014":{"line":6269,"offset":1122971,"length":182,"previous":"M21-GAP-03013","next":"M21-GAP-03015"},"M21-GAP-03015":{"line":6270,"offset":1123153,"length":182,"previous":"M21-GAP-03014","next":"M21-GAP-03016"},"M21-GAP-03016":{"line":6271,"offset":1123335,"length":181,"previous":"M21-GAP-03015","next":"M21-GAP-03017"},"M21-GAP-03017":{"line":6272,"offset":1123516,"length":181,"previous":"M21-GAP-03016","next":"M21-GAP-03018"},"M21-GAP-03018":{"line":6273,"offset":1123697,"length":181,"previous":"M21-GAP-03017","next":"M21-GAP-03019"},"M21-GAP-03019":{"line":6274,"offset":1123878,"length":181,"previous":"M21-GAP-03018","next":"M21-GAP-03020"},"M21-GAP-03020":{"line":6275,"offset":1124059,"length":181,"previous":"M21-GAP-03019","next":"M21-GAP-03021"},"M21-GAP-03021":{"line":6276,"offset":1124240,"length":181,"previous":"M21-GAP-03020","next":"M21-GAP-03022"},"M21-GAP-03022":{"line":6277,"offset":1124421,"length":179,"previous":"M21-GAP-03021","next":"M21-GAP-03023"},"M21-GAP-03023":{"line":6278,"offset":1124600,"length":179,"previous":"M21-GAP-03022","next":"M21-GAP-03024"},"M21-GAP-03024":{"line":6279,"offset":1124779,"length":180,"previous":"M21-GAP-03023","next":"M21-GAP-03025"},"M21-GAP-03025":{"line":6280,"offset":1124959,"length":180,"previous":"M21-GAP-03024","next":"M21-GAP-03026"},"M21-GAP-03026":{"line":6281,"offset":1125139,"length":180,"previous":"M21-GAP-03025","next":"M21-GAP-03027"},"M21-GAP-03027":{"line":6282,"offset":1125319,"length":180,"previous":"M21-GAP-03026","next":"M21-GAP-03028"},"M21-GAP-03028":{"line":6283,"offset":1125499,"length":180,"previous":"M21-GAP-03027","next":"M21-GAP-03029"},"M21-GAP-03029":{"line":6284,"offset":1125679,"length":180,"previous":"M21-GAP-03028","next":"M21-GAP-03030"},"M21-GAP-03030":{"line":6285,"offset":1125859,"length":180,"previous":"M21-GAP-03029","next":"M21-GAP-03031"},"M21-GAP-03031":{"line":6286,"offset":1126039,"length":180,"previous":"M21-GAP-03030","next":"M21-GAP-03032"},"M21-GAP-03032":{"line":6287,"offset":1126219,"length":180,"previous":"M21-GAP-03031","next":"M21-GAP-03033"},"M21-GAP-03033":{"line":6288,"offset":1126399,"length":180,"previous":"M21-GAP-03032","next":"M21-GAP-03034"},"M21-GAP-03034":{"line":6289,"offset":1126579,"length":179,"previous":"M21-GAP-03033","next":"M21-GAP-03035"},"M21-GAP-03035":{"line":6290,"offset":1126758,"length":180,"previous":"M21-GAP-03034","next":"M21-GAP-03036"},"M21-GAP-03036":{"line":6291,"offset":1126938,"length":180,"previous":"M21-GAP-03035","next":"M21-GAP-03037"},"M21-GAP-03037":{"line":6292,"offset":1127118,"length":180,"previous":"M21-GAP-03036","next":"M21-GAP-03038"},"M21-GAP-03038":{"line":6293,"offset":1127298,"length":180,"previous":"M21-GAP-03037","next":"M21-GAP-03039"},"M21-GAP-03039":{"line":6294,"offset":1127478,"length":180,"previous":"M21-GAP-03038","next":"M21-GAP-03040"},"M21-GAP-03040":{"line":6295,"offset":1127658,"length":180,"previous":"M21-GAP-03039","next":"M21-GAP-03041"},"M21-GAP-03041":{"line":6296,"offset":1127838,"length":179,"previous":"M21-GAP-03040","next":"M21-GAP-03042"},"M21-GAP-03042":{"line":6297,"offset":1128017,"length":179,"previous":"M21-GAP-03041","next":"M21-GAP-03043"},"M21-GAP-03043":{"line":6298,"offset":1128196,"length":179,"previous":"M21-GAP-03042","next":"M21-GAP-03044"},"M21-GAP-03044":{"line":6299,"offset":1128375,"length":179,"previous":"M21-GAP-03043","next":"M21-GAP-03045"},"M21-GAP-03045":{"line":6300,"offset":1128554,"length":179,"previous":"M21-GAP-03044","next":"M21-GAP-03046"},"M21-GAP-03046":{"line":6301,"offset":1128733,"length":179,"previous":"M21-GAP-03045","next":"M21-GAP-03047"},"M21-GAP-03047":{"line":6302,"offset":1128912,"length":179,"previous":"M21-GAP-03046","next":"M21-GAP-03048"},"M21-GAP-03048":{"line":6303,"offset":1129091,"length":198,"previous":"M21-GAP-03047","next":"M21-GAP-03049"},"M21-GAP-03049":{"line":6304,"offset":1129289,"length":198,"previous":"M21-GAP-03048","next":"M21-GAP-03050"},"M21-GAP-03050":{"line":6305,"offset":1129487,"length":198,"previous":"M21-GAP-03049","next":"M21-GAP-03051"},"M21-GAP-03051":{"line":6306,"offset":1129685,"length":198,"previous":"M21-GAP-03050","next":"M21-GAP-03052"},"M21-GAP-03052":{"line":6307,"offset":1129883,"length":198,"previous":"M21-GAP-03051","next":"M21-GAP-03053"},"M21-GAP-03053":{"line":6308,"offset":1130081,"length":198,"previous":"M21-GAP-03052","next":"M21-GAP-03054"},"M21-GAP-03054":{"line":6309,"offset":1130279,"length":198,"previous":"M21-GAP-03053","next":"M21-GAP-03055"},"M21-GAP-03055":{"line":6310,"offset":1130477,"length":186,"previous":"M21-GAP-03054","next":"M21-GAP-03056"},"M21-GAP-03056":{"line":6311,"offset":1130663,"length":186,"previous":"M21-GAP-03055","next":"M21-GAP-03057"},"M21-GAP-03057":{"line":6312,"offset":1130849,"length":187,"previous":"M21-GAP-03056","next":"M21-GAP-03058"},"M21-GAP-03058":{"line":6313,"offset":1131036,"length":187,"previous":"M21-GAP-03057","next":"M21-GAP-03059"},"M21-GAP-03059":{"line":6314,"offset":1131223,"length":187,"previous":"M21-GAP-03058","next":"M21-GAP-03060"},"M21-GAP-03060":{"line":6315,"offset":1131410,"length":187,"previous":"M21-GAP-03059","next":"M21-GAP-03061"},"M21-GAP-03061":{"line":6316,"offset":1131597,"length":186,"previous":"M21-GAP-03060","next":"M21-GAP-03062"},"M21-GAP-03062":{"line":6317,"offset":1131783,"length":186,"previous":"M21-GAP-03061","next":"M21-GAP-03063"},"M21-GAP-03063":{"line":6318,"offset":1131969,"length":186,"previous":"M21-GAP-03062","next":"M21-GAP-03064"},"M21-GAP-03064":{"line":6319,"offset":1132155,"length":186,"previous":"M21-GAP-03063","next":"M21-GAP-03065"},"M21-GAP-03065":{"line":6320,"offset":1132341,"length":186,"previous":"M21-GAP-03064","next":"M21-GAP-03066"},"M21-GAP-03066":{"line":6321,"offset":1132527,"length":186,"previous":"M21-GAP-03065","next":"M21-GAP-03067"},"M21-GAP-03067":{"line":6322,"offset":1132713,"length":186,"previous":"M21-GAP-03066","next":"M21-GAP-03068"},"M21-GAP-03068":{"line":6323,"offset":1132899,"length":186,"previous":"M21-GAP-03067","next":"M21-GAP-03069"},"M21-GAP-03069":{"line":6324,"offset":1133085,"length":173,"previous":"M21-GAP-03068","next":"M21-GAP-03070"},"M21-GAP-03070":{"line":6325,"offset":1133258,"length":173,"previous":"M21-GAP-03069","next":"M21-GAP-03071"},"M21-GAP-03071":{"line":6326,"offset":1133431,"length":174,"previous":"M21-GAP-03070","next":"M21-GAP-03072"},"M21-GAP-03072":{"line":6327,"offset":1133605,"length":174,"previous":"M21-GAP-03071","next":"M21-GAP-03073"},"M21-GAP-03073":{"line":6328,"offset":1133779,"length":174,"previous":"M21-GAP-03072","next":"M21-GAP-03074"},"M21-GAP-03074":{"line":6329,"offset":1133953,"length":174,"previous":"M21-GAP-03073","next":"M21-GAP-03075"},"M21-GAP-03075":{"line":6330,"offset":1134127,"length":174,"previous":"M21-GAP-03074","next":"M21-GAP-03076"},"M21-GAP-03076":{"line":6331,"offset":1134301,"length":174,"previous":"M21-GAP-03075","next":"M21-GAP-03077"},"M21-GAP-03077":{"line":6332,"offset":1134475,"length":174,"previous":"M21-GAP-03076","next":"M21-GAP-03078"},"M21-GAP-03078":{"line":6333,"offset":1134649,"length":174,"previous":"M21-GAP-03077","next":"M21-GAP-03079"},"M21-GAP-03079":{"line":6334,"offset":1134823,"length":174,"previous":"M21-GAP-03078","next":"M21-GAP-03080"},"M21-GAP-03080":{"line":6335,"offset":1134997,"length":174,"previous":"M21-GAP-03079","next":"M21-GAP-03081"},"M21-GAP-03081":{"line":6336,"offset":1135171,"length":173,"previous":"M21-GAP-03080","next":"M21-GAP-03082"},"M21-GAP-03082":{"line":6337,"offset":1135344,"length":174,"previous":"M21-GAP-03081","next":"M21-GAP-03083"},"M21-GAP-03083":{"line":6338,"offset":1135518,"length":174,"previous":"M21-GAP-03082","next":"M21-GAP-03084"},"M21-GAP-03084":{"line":6339,"offset":1135692,"length":174,"previous":"M21-GAP-03083","next":"M21-GAP-03085"},"M21-GAP-03085":{"line":6340,"offset":1135866,"length":174,"previous":"M21-GAP-03084","next":"M21-GAP-03086"},"M21-GAP-03086":{"line":6341,"offset":1136040,"length":174,"previous":"M21-GAP-03085","next":"M21-GAP-03087"},"M21-GAP-03087":{"line":6342,"offset":1136214,"length":173,"previous":"M21-GAP-03086","next":"M21-GAP-03088"},"M21-GAP-03088":{"line":6343,"offset":1136387,"length":173,"previous":"M21-GAP-03087","next":"M21-GAP-03089"},"M21-GAP-03089":{"line":6344,"offset":1136560,"length":173,"previous":"M21-GAP-03088","next":"M21-GAP-03090"},"M21-GAP-03090":{"line":6345,"offset":1136733,"length":173,"previous":"M21-GAP-03089","next":"M21-GAP-03091"},"M21-GAP-03091":{"line":6346,"offset":1136906,"length":173,"previous":"M21-GAP-03090","next":"M21-GAP-03092"},"M21-GAP-03092":{"line":6347,"offset":1137079,"length":173,"previous":"M21-GAP-03091","next":"M21-GAP-03093"},"M21-GAP-03093":{"line":6348,"offset":1137252,"length":173,"previous":"M21-GAP-03092","next":"M21-GAP-03094"},"M21-GAP-03094":{"line":6349,"offset":1137425,"length":185,"previous":"M21-GAP-03093","next":"M21-GAP-03095"},"M21-GAP-03095":{"line":6350,"offset":1137610,"length":183,"previous":"M21-GAP-03094","next":"M21-GAP-03096"},"M21-GAP-03096":{"line":6351,"offset":1137793,"length":183,"previous":"M21-GAP-03095","next":"M21-GAP-03097"},"M21-GAP-03097":{"line":6352,"offset":1137976,"length":184,"previous":"M21-GAP-03096","next":"M21-GAP-03098"},"M21-GAP-03098":{"line":6353,"offset":1138160,"length":184,"previous":"M21-GAP-03097","next":"M21-GAP-03099"},"M21-GAP-03099":{"line":6354,"offset":1138344,"length":184,"previous":"M21-GAP-03098","next":"M21-GAP-03100"},"M21-GAP-03100":{"line":6355,"offset":1138528,"length":184,"previous":"M21-GAP-03099","next":"M21-GAP-03101"},"M21-GAP-03101":{"line":6356,"offset":1138712,"length":184,"previous":"M21-GAP-03100","next":"M21-GAP-03102"},"M21-GAP-03102":{"line":6357,"offset":1138896,"length":184,"previous":"M21-GAP-03101","next":"M21-GAP-03103"},"M21-GAP-03103":{"line":6358,"offset":1139080,"length":184,"previous":"M21-GAP-03102","next":"M21-GAP-03104"},"M21-GAP-03104":{"line":6359,"offset":1139264,"length":184,"previous":"M21-GAP-03103","next":"M21-GAP-03105"},"M21-GAP-03105":{"line":6360,"offset":1139448,"length":184,"previous":"M21-GAP-03104","next":"M21-GAP-03106"},"M21-GAP-03106":{"line":6361,"offset":1139632,"length":184,"previous":"M21-GAP-03105","next":"M21-GAP-03107"},"M21-GAP-03107":{"line":6362,"offset":1139816,"length":183,"previous":"M21-GAP-03106","next":"M21-GAP-03108"},"M21-GAP-03108":{"line":6363,"offset":1139999,"length":184,"previous":"M21-GAP-03107","next":"M21-GAP-03109"},"M21-GAP-03109":{"line":6364,"offset":1140183,"length":184,"previous":"M21-GAP-03108","next":"M21-GAP-03110"},"M21-GAP-03110":{"line":6365,"offset":1140367,"length":184,"previous":"M21-GAP-03109","next":"M21-GAP-03111"},"M21-GAP-03111":{"line":6366,"offset":1140551,"length":184,"previous":"M21-GAP-03110","next":"M21-GAP-03112"},"M21-GAP-03112":{"line":6367,"offset":1140735,"length":184,"previous":"M21-GAP-03111","next":"M21-GAP-03113"},"M21-GAP-03113":{"line":6368,"offset":1140919,"length":184,"previous":"M21-GAP-03112","next":"M21-GAP-03114"},"M21-GAP-03114":{"line":6369,"offset":1141103,"length":184,"previous":"M21-GAP-03113","next":"M21-GAP-03115"},"M21-GAP-03115":{"line":6370,"offset":1141287,"length":184,"previous":"M21-GAP-03114","next":"M21-GAP-03116"},"M21-GAP-03116":{"line":6371,"offset":1141471,"length":184,"previous":"M21-GAP-03115","next":"M21-GAP-03117"},"M21-GAP-03117":{"line":6372,"offset":1141655,"length":184,"previous":"M21-GAP-03116","next":"M21-GAP-03118"},"M21-GAP-03118":{"line":6373,"offset":1141839,"length":183,"previous":"M21-GAP-03117","next":"M21-GAP-03119"},"M21-GAP-03119":{"line":6374,"offset":1142022,"length":184,"previous":"M21-GAP-03118","next":"M21-GAP-03120"},"M21-GAP-03120":{"line":6375,"offset":1142206,"length":184,"previous":"M21-GAP-03119","next":"M21-GAP-03121"},"M21-GAP-03121":{"line":6376,"offset":1142390,"length":184,"previous":"M21-GAP-03120","next":"M21-GAP-03122"},"M21-GAP-03122":{"line":6377,"offset":1142574,"length":184,"previous":"M21-GAP-03121","next":"M21-GAP-03123"},"M21-GAP-03123":{"line":6378,"offset":1142758,"length":184,"previous":"M21-GAP-03122","next":"M21-GAP-03124"},"M21-GAP-03124":{"line":6379,"offset":1142942,"length":184,"previous":"M21-GAP-03123","next":"M21-GAP-03125"},"M21-GAP-03125":{"line":6380,"offset":1143126,"length":184,"previous":"M21-GAP-03124","next":"M21-GAP-03126"},"M21-GAP-03126":{"line":6381,"offset":1143310,"length":184,"previous":"M21-GAP-03125","next":"M21-GAP-03127"},"M21-GAP-03127":{"line":6382,"offset":1143494,"length":184,"previous":"M21-GAP-03126","next":"M21-GAP-03128"},"M21-GAP-03128":{"line":6383,"offset":1143678,"length":183,"previous":"M21-GAP-03127","next":"M21-GAP-03129"},"M21-GAP-03129":{"line":6384,"offset":1143861,"length":183,"previous":"M21-GAP-03128","next":"M21-GAP-03130"},"M21-GAP-03130":{"line":6385,"offset":1144044,"length":183,"previous":"M21-GAP-03129","next":"M21-GAP-03131"},"M21-GAP-03131":{"line":6386,"offset":1144227,"length":183,"previous":"M21-GAP-03130","next":"M21-GAP-03132"},"M21-GAP-03132":{"line":6387,"offset":1144410,"length":183,"previous":"M21-GAP-03131","next":"M21-GAP-03133"},"M21-GAP-03133":{"line":6388,"offset":1144593,"length":183,"previous":"M21-GAP-03132","next":"M21-GAP-03134"},"M21-GAP-03134":{"line":6389,"offset":1144776,"length":188,"previous":"M21-GAP-03133","next":"M21-GAP-03135"},"M21-GAP-03135":{"line":6390,"offset":1144964,"length":188,"previous":"M21-GAP-03134","next":"M21-GAP-03136"},"M21-GAP-03136":{"line":6391,"offset":1145152,"length":189,"previous":"M21-GAP-03135","next":"M21-GAP-03137"},"M21-GAP-03137":{"line":6392,"offset":1145341,"length":189,"previous":"M21-GAP-03136","next":"M21-GAP-03138"},"M21-GAP-03138":{"line":6393,"offset":1145530,"length":189,"previous":"M21-GAP-03137","next":"M21-GAP-03139"},"M21-GAP-03139":{"line":6394,"offset":1145719,"length":189,"previous":"M21-GAP-03138","next":"M21-GAP-03140"},"M21-GAP-03140":{"line":6395,"offset":1145908,"length":188,"previous":"M21-GAP-03139","next":"M21-GAP-03141"},"M21-GAP-03141":{"line":6396,"offset":1146096,"length":188,"previous":"M21-GAP-03140","next":"M21-GAP-03142"},"M21-GAP-03142":{"line":6397,"offset":1146284,"length":188,"previous":"M21-GAP-03141","next":"M21-GAP-03143"},"M21-GAP-03143":{"line":6398,"offset":1146472,"length":188,"previous":"M21-GAP-03142","next":"M21-GAP-03144"},"M21-GAP-03144":{"line":6399,"offset":1146660,"length":188,"previous":"M21-GAP-03143","next":"M21-GAP-03145"},"M21-GAP-03145":{"line":6400,"offset":1146848,"length":188,"previous":"M21-GAP-03144","next":"M21-GAP-03146"},"M21-GAP-03146":{"line":6401,"offset":1147036,"length":188,"previous":"M21-GAP-03145","next":"M21-GAP-03147"},"M21-GAP-03147":{"line":6402,"offset":1147224,"length":188,"previous":"M21-GAP-03146","next":"M21-GAP-03148"},"M21-GAP-03148":{"line":6403,"offset":1147412,"length":184,"previous":"M21-GAP-03147","next":"M21-GAP-03149"},"M21-GAP-03149":{"line":6404,"offset":1147596,"length":189,"previous":"M21-GAP-03148","next":"M21-GAP-03150"},"M21-GAP-03150":{"line":6405,"offset":1147785,"length":189,"previous":"M21-GAP-03149","next":"M21-GAP-03151"},"M21-GAP-03151":{"line":6406,"offset":1147974,"length":190,"previous":"M21-GAP-03150","next":"M21-GAP-03152"},"M21-GAP-03152":{"line":6407,"offset":1148164,"length":190,"previous":"M21-GAP-03151","next":"M21-GAP-03153"},"M21-GAP-03153":{"line":6408,"offset":1148354,"length":189,"previous":"M21-GAP-03152","next":"M21-GAP-03154"},"M21-GAP-03154":{"line":6409,"offset":1148543,"length":189,"previous":"M21-GAP-03153","next":"M21-GAP-03155"},"M21-GAP-03155":{"line":6410,"offset":1148732,"length":189,"previous":"M21-GAP-03154","next":"M21-GAP-03156"},"M21-GAP-03156":{"line":6411,"offset":1148921,"length":189,"previous":"M21-GAP-03155","next":"M21-GAP-03157"},"M21-GAP-03157":{"line":6412,"offset":1149110,"length":189,"previous":"M21-GAP-03156","next":"M21-GAP-03158"},"M21-GAP-03158":{"line":6413,"offset":1149299,"length":189,"previous":"M21-GAP-03157","next":"M21-GAP-03159"},"M21-GAP-03159":{"line":6414,"offset":1149488,"length":189,"previous":"M21-GAP-03158","next":"M21-GAP-03160"},"M21-GAP-03160":{"line":6415,"offset":1149677,"length":189,"previous":"M21-GAP-03159","next":"M21-GAP-03161"},"M21-GAP-03161":{"line":6416,"offset":1149866,"length":186,"previous":"M21-GAP-03160","next":"M21-GAP-03162"},"M21-GAP-03162":{"line":6417,"offset":1150052,"length":186,"previous":"M21-GAP-03161","next":"M21-GAP-03163"},"M21-GAP-03163":{"line":6418,"offset":1150238,"length":186,"previous":"M21-GAP-03162","next":"M21-GAP-03164"},"M21-GAP-03164":{"line":6419,"offset":1150424,"length":186,"previous":"M21-GAP-03163","next":"M21-GAP-03165"},"M21-GAP-03165":{"line":6420,"offset":1150610,"length":186,"previous":"M21-GAP-03164","next":"M21-GAP-03166"},"M21-GAP-03166":{"line":6421,"offset":1150796,"length":215,"previous":"M21-GAP-03165","next":"M21-GAP-03167"},"M21-GAP-03167":{"line":6422,"offset":1151011,"length":215,"previous":"M21-GAP-03166","next":"M21-GAP-03168"},"M21-GAP-03168":{"line":6423,"offset":1151226,"length":215,"previous":"M21-GAP-03167","next":"M21-GAP-03169"},"M21-GAP-03169":{"line":6424,"offset":1151441,"length":215,"previous":"M21-GAP-03168","next":"M21-GAP-03170"},"M21-GAP-03170":{"line":6425,"offset":1151656,"length":215,"previous":"M21-GAP-03169","next":"M21-GAP-03171"},"M21-GAP-03171":{"line":6426,"offset":1151871,"length":215,"previous":"M21-GAP-03170","next":"M21-GAP-03172"},"M21-GAP-03172":{"line":6427,"offset":1152086,"length":184,"previous":"M21-GAP-03171","next":"M21-GAP-03173"},"M21-GAP-03173":{"line":6428,"offset":1152270,"length":184,"previous":"M21-GAP-03172","next":"M21-GAP-03174"},"M21-GAP-03174":{"line":6429,"offset":1152454,"length":185,"previous":"M21-GAP-03173","next":"M21-GAP-03175"},"M21-GAP-03175":{"line":6430,"offset":1152639,"length":185,"previous":"M21-GAP-03174","next":"M21-GAP-03176"},"M21-GAP-03176":{"line":6431,"offset":1152824,"length":185,"previous":"M21-GAP-03175","next":"M21-GAP-03177"},"M21-GAP-03177":{"line":6432,"offset":1153009,"length":185,"previous":"M21-GAP-03176","next":"M21-GAP-03178"},"M21-GAP-03178":{"line":6433,"offset":1153194,"length":185,"previous":"M21-GAP-03177","next":"M21-GAP-03179"},"M21-GAP-03179":{"line":6434,"offset":1153379,"length":185,"previous":"M21-GAP-03178","next":"M21-GAP-03180"},"M21-GAP-03180":{"line":6435,"offset":1153564,"length":185,"previous":"M21-GAP-03179","next":"M21-GAP-03181"},"M21-GAP-03181":{"line":6436,"offset":1153749,"length":185,"previous":"M21-GAP-03180","next":"M21-GAP-03182"},"M21-GAP-03182":{"line":6437,"offset":1153934,"length":185,"previous":"M21-GAP-03181","next":"M21-GAP-03183"},"M21-GAP-03183":{"line":6438,"offset":1154119,"length":185,"previous":"M21-GAP-03182","next":"M21-GAP-03184"},"M21-GAP-03184":{"line":6439,"offset":1154304,"length":184,"previous":"M21-GAP-03183","next":"M21-GAP-03185"},"M21-GAP-03185":{"line":6440,"offset":1154488,"length":185,"previous":"M21-GAP-03184","next":"M21-GAP-03186"},"M21-GAP-03186":{"line":6441,"offset":1154673,"length":185,"previous":"M21-GAP-03185","next":"M21-GAP-03187"},"M21-GAP-03187":{"line":6442,"offset":1154858,"length":185,"previous":"M21-GAP-03186","next":"M21-GAP-03188"},"M21-GAP-03188":{"line":6443,"offset":1155043,"length":185,"previous":"M21-GAP-03187","next":"M21-GAP-03189"},"M21-GAP-03189":{"line":6444,"offset":1155228,"length":185,"previous":"M21-GAP-03188","next":"M21-GAP-03190"},"M21-GAP-03190":{"line":6445,"offset":1155413,"length":185,"previous":"M21-GAP-03189","next":"M21-GAP-03191"},"M21-GAP-03191":{"line":6446,"offset":1155598,"length":185,"previous":"M21-GAP-03190","next":"M21-GAP-03192"},"M21-GAP-03192":{"line":6447,"offset":1155783,"length":185,"previous":"M21-GAP-03191","next":"M21-GAP-03193"},"M21-GAP-03193":{"line":6448,"offset":1155968,"length":185,"previous":"M21-GAP-03192","next":"M21-GAP-03194"},"M21-GAP-03194":{"line":6449,"offset":1156153,"length":185,"previous":"M21-GAP-03193","next":"M21-GAP-03195"},"M21-GAP-03195":{"line":6450,"offset":1156338,"length":184,"previous":"M21-GAP-03194","next":"M21-GAP-03196"},"M21-GAP-03196":{"line":6451,"offset":1156522,"length":185,"previous":"M21-GAP-03195","next":"M21-GAP-03197"},"M21-GAP-03197":{"line":6452,"offset":1156707,"length":185,"previous":"M21-GAP-03196","next":"M21-GAP-03198"},"M21-GAP-03198":{"line":6453,"offset":1156892,"length":185,"previous":"M21-GAP-03197","next":"M21-GAP-03199"},"M21-GAP-03199":{"line":6454,"offset":1157077,"length":185,"previous":"M21-GAP-03198","next":"M21-GAP-03200"},"M21-GAP-03200":{"line":6455,"offset":1157262,"length":185,"previous":"M21-GAP-03199","next":"M21-GAP-03201"},"M21-GAP-03201":{"line":6456,"offset":1157447,"length":185,"previous":"M21-GAP-03200","next":"M21-GAP-03202"},"M21-GAP-03202":{"line":6457,"offset":1157632,"length":185,"previous":"M21-GAP-03201","next":"M21-GAP-03203"},"M21-GAP-03203":{"line":6458,"offset":1157817,"length":185,"previous":"M21-GAP-03202","next":"M21-GAP-03204"},"M21-GAP-03204":{"line":6459,"offset":1158002,"length":185,"previous":"M21-GAP-03203","next":"M21-GAP-03205"},"M21-GAP-03205":{"line":6460,"offset":1158187,"length":185,"previous":"M21-GAP-03204","next":"M21-GAP-03206"},"M21-GAP-03206":{"line":6461,"offset":1158372,"length":184,"previous":"M21-GAP-03205","next":"M21-GAP-03207"},"M21-GAP-03207":{"line":6462,"offset":1158556,"length":185,"previous":"M21-GAP-03206","next":"M21-GAP-03208"},"M21-GAP-03208":{"line":6463,"offset":1158741,"length":185,"previous":"M21-GAP-03207","next":"M21-GAP-03209"},"M21-GAP-03209":{"line":6464,"offset":1158926,"length":185,"previous":"M21-GAP-03208","next":"M21-GAP-03210"},"M21-GAP-03210":{"line":6465,"offset":1159111,"length":185,"previous":"M21-GAP-03209","next":"M21-GAP-03211"},"M21-GAP-03211":{"line":6466,"offset":1159296,"length":185,"previous":"M21-GAP-03210","next":"M21-GAP-03212"},"M21-GAP-03212":{"line":6467,"offset":1159481,"length":185,"previous":"M21-GAP-03211","next":"M21-GAP-03213"},"M21-GAP-03213":{"line":6468,"offset":1159666,"length":185,"previous":"M21-GAP-03212","next":"M21-GAP-03214"},"M21-GAP-03214":{"line":6469,"offset":1159851,"length":185,"previous":"M21-GAP-03213","next":"M21-GAP-03215"},"M21-GAP-03215":{"line":6470,"offset":1160036,"length":185,"previous":"M21-GAP-03214","next":"M21-GAP-03216"},"M21-GAP-03216":{"line":6471,"offset":1160221,"length":185,"previous":"M21-GAP-03215","next":"M21-GAP-03217"},"M21-GAP-03217":{"line":6472,"offset":1160406,"length":184,"previous":"M21-GAP-03216","next":"M21-GAP-03218"},"M21-GAP-03218":{"line":6473,"offset":1160590,"length":184,"previous":"M21-GAP-03217","next":"M21-GAP-03219"},"M21-GAP-03219":{"line":6474,"offset":1160774,"length":184,"previous":"M21-GAP-03218","next":"M21-GAP-03220"},"M21-GAP-03220":{"line":6475,"offset":1160958,"length":184,"previous":"M21-GAP-03219","next":"M21-GAP-03221"},"M21-GAP-03221":{"line":6476,"offset":1161142,"length":184,"previous":"M21-GAP-03220","next":"M21-GAP-03222"},"M21-GAP-03222":{"line":6477,"offset":1161326,"length":184,"previous":"M21-GAP-03221","next":"M21-GAP-03223"},"M21-GAP-03223":{"line":6478,"offset":1161510,"length":179,"previous":"M21-GAP-03222","next":"M21-GAP-03224"},"M21-GAP-03224":{"line":6479,"offset":1161689,"length":179,"previous":"M21-GAP-03223","next":"M21-GAP-03225"},"M21-GAP-03225":{"line":6480,"offset":1161868,"length":180,"previous":"M21-GAP-03224","next":"M21-GAP-03226"},"M21-GAP-03226":{"line":6481,"offset":1162048,"length":180,"previous":"M21-GAP-03225","next":"M21-GAP-03227"},"M21-GAP-03227":{"line":6482,"offset":1162228,"length":180,"previous":"M21-GAP-03226","next":"M21-GAP-03228"},"M21-GAP-03228":{"line":6483,"offset":1162408,"length":180,"previous":"M21-GAP-03227","next":"M21-GAP-03229"},"M21-GAP-03229":{"line":6484,"offset":1162588,"length":180,"previous":"M21-GAP-03228","next":"M21-GAP-03230"},"M21-GAP-03230":{"line":6485,"offset":1162768,"length":180,"previous":"M21-GAP-03229","next":"M21-GAP-03231"},"M21-GAP-03231":{"line":6486,"offset":1162948,"length":180,"previous":"M21-GAP-03230","next":"M21-GAP-03232"},"M21-GAP-03232":{"line":6487,"offset":1163128,"length":180,"previous":"M21-GAP-03231","next":"M21-GAP-03233"},"M21-GAP-03233":{"line":6488,"offset":1163308,"length":180,"previous":"M21-GAP-03232","next":"M21-GAP-03234"},"M21-GAP-03234":{"line":6489,"offset":1163488,"length":180,"previous":"M21-GAP-03233","next":"M21-GAP-03235"},"M21-GAP-03235":{"line":6490,"offset":1163668,"length":179,"previous":"M21-GAP-03234","next":"M21-GAP-03236"},"M21-GAP-03236":{"line":6491,"offset":1163847,"length":180,"previous":"M21-GAP-03235","next":"M21-GAP-03237"},"M21-GAP-03237":{"line":6492,"offset":1164027,"length":180,"previous":"M21-GAP-03236","next":"M21-GAP-03238"},"M21-GAP-03238":{"line":6493,"offset":1164207,"length":180,"previous":"M21-GAP-03237","next":"M21-GAP-03239"},"M21-GAP-03239":{"line":6494,"offset":1164387,"length":180,"previous":"M21-GAP-03238","next":"M21-GAP-03240"},"M21-GAP-03240":{"line":6495,"offset":1164567,"length":180,"previous":"M21-GAP-03239","next":"M21-GAP-03241"},"M21-GAP-03241":{"line":6496,"offset":1164747,"length":179,"previous":"M21-GAP-03240","next":"M21-GAP-03242"},"M21-GAP-03242":{"line":6497,"offset":1164926,"length":179,"previous":"M21-GAP-03241","next":"M21-GAP-03243"},"M21-GAP-03243":{"line":6498,"offset":1165105,"length":179,"previous":"M21-GAP-03242","next":"M21-GAP-03244"},"M21-GAP-03244":{"line":6499,"offset":1165284,"length":179,"previous":"M21-GAP-03243","next":"M21-GAP-03245"},"M21-GAP-03245":{"line":6500,"offset":1165463,"length":179,"previous":"M21-GAP-03244","next":"M21-GAP-03246"},"M21-GAP-03246":{"line":6501,"offset":1165642,"length":179,"previous":"M21-GAP-03245","next":"M21-GAP-03247"},"M21-GAP-03247":{"line":6502,"offset":1165821,"length":179,"previous":"M21-GAP-03246","next":"M21-GAP-03248"},"M21-GAP-03248":{"line":6503,"offset":1166000,"length":173,"previous":"M21-GAP-03247","next":"M21-GAP-03249"},"M21-GAP-03249":{"line":6504,"offset":1166173,"length":173,"previous":"M21-GAP-03248","next":"M21-GAP-03250"},"M21-GAP-03250":{"line":6505,"offset":1166346,"length":174,"previous":"M21-GAP-03249","next":"M21-GAP-03251"},"M21-GAP-03251":{"line":6506,"offset":1166520,"length":174,"previous":"M21-GAP-03250","next":"M21-GAP-03252"},"M21-GAP-03252":{"line":6507,"offset":1166694,"length":174,"previous":"M21-GAP-03251","next":"M21-GAP-03253"},"M21-GAP-03253":{"line":6508,"offset":1166868,"length":174,"previous":"M21-GAP-03252","next":"M21-GAP-03254"},"M21-GAP-03254":{"line":6509,"offset":1167042,"length":174,"previous":"M21-GAP-03253","next":"M21-GAP-03255"},"M21-GAP-03255":{"line":6510,"offset":1167216,"length":174,"previous":"M21-GAP-03254","next":"M21-GAP-03256"},"M21-GAP-03256":{"line":6511,"offset":1167390,"length":174,"previous":"M21-GAP-03255","next":"M21-GAP-03257"},"M21-GAP-03257":{"line":6512,"offset":1167564,"length":174,"previous":"M21-GAP-03256","next":"M21-GAP-03258"},"M21-GAP-03258":{"line":6513,"offset":1167738,"length":174,"previous":"M21-GAP-03257","next":"M21-GAP-03259"},"M21-GAP-03259":{"line":6514,"offset":1167912,"length":174,"previous":"M21-GAP-03258","next":"M21-GAP-03260"},"M21-GAP-03260":{"line":6515,"offset":1168086,"length":173,"previous":"M21-GAP-03259","next":"M21-GAP-03261"},"M21-GAP-03261":{"line":6516,"offset":1168259,"length":174,"previous":"M21-GAP-03260","next":"M21-GAP-03262"},"M21-GAP-03262":{"line":6517,"offset":1168433,"length":174,"previous":"M21-GAP-03261","next":"M21-GAP-03263"},"M21-GAP-03263":{"line":6518,"offset":1168607,"length":174,"previous":"M21-GAP-03262","next":"M21-GAP-03264"},"M21-GAP-03264":{"line":6519,"offset":1168781,"length":174,"previous":"M21-GAP-03263","next":"M21-GAP-03265"},"M21-GAP-03265":{"line":6520,"offset":1168955,"length":174,"previous":"M21-GAP-03264","next":"M21-GAP-03266"},"M21-GAP-03266":{"line":6521,"offset":1169129,"length":174,"previous":"M21-GAP-03265","next":"M21-GAP-03267"},"M21-GAP-03267":{"line":6522,"offset":1169303,"length":174,"previous":"M21-GAP-03266","next":"M21-GAP-03268"},"M21-GAP-03268":{"line":6523,"offset":1169477,"length":174,"previous":"M21-GAP-03267","next":"M21-GAP-03269"},"M21-GAP-03269":{"line":6524,"offset":1169651,"length":174,"previous":"M21-GAP-03268","next":"M21-GAP-03270"},"M21-GAP-03270":{"line":6525,"offset":1169825,"length":174,"previous":"M21-GAP-03269","next":"M21-GAP-03271"},"M21-GAP-03271":{"line":6526,"offset":1169999,"length":173,"previous":"M21-GAP-03270","next":"M21-GAP-03272"},"M21-GAP-03272":{"line":6527,"offset":1170172,"length":174,"previous":"M21-GAP-03271","next":"M21-GAP-03273"},"M21-GAP-03273":{"line":6528,"offset":1170346,"length":174,"previous":"M21-GAP-03272","next":"M21-GAP-03274"},"M21-GAP-03274":{"line":6529,"offset":1170520,"length":174,"previous":"M21-GAP-03273","next":"M21-GAP-03275"},"M21-GAP-03275":{"line":6530,"offset":1170694,"length":173,"previous":"M21-GAP-03274","next":"M21-GAP-03276"},"M21-GAP-03276":{"line":6531,"offset":1170867,"length":173,"previous":"M21-GAP-03275","next":"M21-GAP-03277"},"M21-GAP-03277":{"line":6532,"offset":1171040,"length":173,"previous":"M21-GAP-03276","next":"M21-GAP-03278"},"M21-GAP-03278":{"line":6533,"offset":1171213,"length":173,"previous":"M21-GAP-03277","next":"M21-GAP-03279"},"M21-GAP-03279":{"line":6534,"offset":1171386,"length":173,"previous":"M21-GAP-03278","next":"M21-GAP-03280"},"M21-GAP-03280":{"line":6535,"offset":1171559,"length":173,"previous":"M21-GAP-03279","next":"M21-GAP-03281"},"M21-GAP-03281":{"line":6536,"offset":1171732,"length":177,"previous":"M21-GAP-03280","next":"M21-GAP-03282"},"M21-GAP-03282":{"line":6537,"offset":1171909,"length":180,"previous":"M21-GAP-03281","next":"M21-GAP-03283"},"M21-GAP-03283":{"line":6538,"offset":1172089,"length":187,"previous":"M21-GAP-03282","next":"M21-GAP-03284"},"M21-GAP-03284":{"line":6539,"offset":1172276,"length":182,"previous":"M21-GAP-03283","next":"M21-GAP-03285"},"M21-GAP-03285":{"line":6540,"offset":1172458,"length":202,"previous":"M21-GAP-03284","next":"M21-GAP-03286"},"M21-GAP-03286":{"line":6541,"offset":1172660,"length":204,"previous":"M21-GAP-03285","next":"M21-GAP-03287"},"M21-GAP-03287":{"line":6542,"offset":1172864,"length":208,"previous":"M21-GAP-03286","next":"M21-GAP-03288"},"M21-GAP-03288":{"line":6543,"offset":1173072,"length":198,"previous":"M21-GAP-03287","next":"M21-GAP-03289"},"M21-GAP-03289":{"line":6544,"offset":1173270,"length":195,"previous":"M21-GAP-03288","next":"M21-GAP-03290"},"M21-GAP-03290":{"line":6545,"offset":1173465,"length":197,"previous":"M21-GAP-03289","next":"M21-GAP-03291"},"M21-GAP-03291":{"line":6546,"offset":1173662,"length":192,"previous":"M21-GAP-03290","next":"M21-GAP-03292"},"M21-GAP-03292":{"line":6547,"offset":1173854,"length":205,"previous":"M21-GAP-03291","next":"M21-GAP-03293"},"M21-GAP-03293":{"line":6548,"offset":1174059,"length":195,"previous":"M21-GAP-03292","next":"M21-GAP-03294"},"M21-GAP-03294":{"line":6549,"offset":1174254,"length":194,"previous":"M21-GAP-03293","next":"M21-GAP-03295"},"M21-GAP-03295":{"line":6550,"offset":1174448,"length":197,"previous":"M21-GAP-03294","next":"M21-GAP-03296"},"M21-GAP-03296":{"line":6551,"offset":1174645,"length":192,"previous":"M21-GAP-03295","next":"M21-GAP-03297"},"M21-GAP-03297":{"line":6552,"offset":1174837,"length":193,"previous":"M21-GAP-03296","next":"M21-GAP-03298"},"M21-GAP-03298":{"line":6553,"offset":1175030,"length":192,"previous":"M21-GAP-03297","next":"M21-GAP-03299"},"M21-GAP-03299":{"line":6554,"offset":1175222,"length":204,"previous":"M21-GAP-03298","next":"M21-GAP-03300"},"M21-GAP-03300":{"line":6555,"offset":1175426,"length":207,"previous":"M21-GAP-03299","next":"M21-GAP-03301"},"M21-GAP-03301":{"line":6556,"offset":1175633,"length":199,"previous":"M21-GAP-03300","next":"M21-GAP-03302"},"M21-GAP-03302":{"line":6557,"offset":1175832,"length":192,"previous":"M21-GAP-03301","next":"M21-GAP-03303"},"M21-GAP-03303":{"line":6558,"offset":1176024,"length":193,"previous":"M21-GAP-03302","next":"M21-GAP-03304"},"M21-GAP-03304":{"line":6559,"offset":1176217,"length":197,"previous":"M21-GAP-03303","next":"M21-GAP-03305"},"M21-GAP-03305":{"line":6560,"offset":1176414,"length":208,"previous":"M21-GAP-03304","next":"M21-GAP-03306"},"M21-GAP-03306":{"line":6561,"offset":1176622,"length":205,"previous":"M21-GAP-03305","next":"M21-GAP-03307"},"M21-GAP-03307":{"line":6562,"offset":1176827,"length":203,"previous":"M21-GAP-03306","next":"M21-GAP-03308"},"M21-GAP-03308":{"line":6563,"offset":1177030,"length":201,"previous":"M21-GAP-03307","next":"M21-GAP-03309"},"M21-GAP-03309":{"line":6564,"offset":1177231,"length":204,"previous":"M21-GAP-03308","next":"M21-GAP-03310"},"M21-GAP-03310":{"line":6565,"offset":1177435,"length":198,"previous":"M21-GAP-03309","next":"M21-GAP-03311"},"M21-GAP-03311":{"line":6566,"offset":1177633,"length":192,"previous":"M21-GAP-03310","next":"M21-GAP-03312"},"M21-GAP-03312":{"line":6567,"offset":1177825,"length":195,"previous":"M21-GAP-03311","next":"M21-GAP-03313"},"M21-GAP-03313":{"line":6568,"offset":1178020,"length":207,"previous":"M21-GAP-03312","next":"M21-GAP-03314"},"M21-GAP-03314":{"line":6569,"offset":1178227,"length":197,"previous":"M21-GAP-03313","next":"M21-GAP-03315"},"M21-GAP-03315":{"line":6570,"offset":1178424,"length":196,"previous":"M21-GAP-03314","next":"M21-GAP-03316"},"M21-GAP-03316":{"line":6571,"offset":1178620,"length":196,"previous":"M21-GAP-03315","next":"M21-GAP-03317"},"M21-GAP-03317":{"line":6572,"offset":1178816,"length":195,"previous":"M21-GAP-03316","next":"M21-GAP-03318"},"M21-GAP-03318":{"line":6573,"offset":1179011,"length":197,"previous":"M21-GAP-03317","next":"M21-GAP-03319"},"M21-GAP-03319":{"line":6574,"offset":1179208,"length":200,"previous":"M21-GAP-03318","next":"M21-GAP-03320"},"M21-GAP-03320":{"line":6575,"offset":1179408,"length":193,"previous":"M21-GAP-03319","next":"M21-GAP-03321"},"M21-GAP-03321":{"line":6576,"offset":1179601,"length":202,"previous":"M21-GAP-03320","next":"M21-GAP-03322"},"M21-GAP-03322":{"line":6577,"offset":1179803,"length":191,"previous":"M21-GAP-03321","next":"M21-GAP-03323"},"M21-GAP-03323":{"line":6578,"offset":1179994,"length":196,"previous":"M21-GAP-03322","next":"M21-GAP-03324"},"M21-GAP-03324":{"line":6579,"offset":1180190,"length":199,"previous":"M21-GAP-03323","next":"M21-GAP-03325"},"M21-GAP-03325":{"line":6580,"offset":1180389,"length":198,"previous":"M21-GAP-03324","next":"M21-GAP-03326"},"M21-GAP-03326":{"line":6581,"offset":1180587,"length":183,"previous":"M21-GAP-03325","next":"M21-GAP-03327"},"M21-GAP-03327":{"line":6582,"offset":1180770,"length":180,"previous":"M21-GAP-03326","next":"M21-GAP-03328"},"M21-GAP-03328":{"line":6583,"offset":1180950,"length":197,"previous":"M21-GAP-03327","next":"M21-GAP-03329"},"M21-GAP-03329":{"line":6584,"offset":1181147,"length":200,"previous":"M21-GAP-03328","next":"M21-GAP-03330"},"M21-GAP-03330":{"line":6585,"offset":1181347,"length":200,"previous":"M21-GAP-03329","next":"M21-GAP-03331"},"M21-GAP-03331":{"line":6586,"offset":1181547,"length":203,"previous":"M21-GAP-03330","next":"M21-GAP-03332"},"M21-GAP-03332":{"line":6587,"offset":1181750,"length":202,"previous":"M21-GAP-03331","next":"M21-GAP-03333"},"M21-GAP-03333":{"line":6588,"offset":1181952,"length":207,"previous":"M21-GAP-03332","next":"M21-GAP-03334"},"M21-GAP-03334":{"line":6589,"offset":1182159,"length":208,"previous":"M21-GAP-03333","next":"M21-GAP-03335"},"M21-GAP-03335":{"line":6590,"offset":1182367,"length":201,"previous":"M21-GAP-03334","next":"M21-GAP-03336"},"M21-GAP-03336":{"line":6591,"offset":1182568,"length":205,"previous":"M21-GAP-03335","next":"M21-GAP-03337"},"M21-GAP-03337":{"line":6592,"offset":1182773,"length":201,"previous":"M21-GAP-03336","next":"M21-GAP-03338"},"M21-GAP-03338":{"line":6593,"offset":1182974,"length":198,"previous":"M21-GAP-03337","next":"M21-GAP-03339"},"M21-GAP-03339":{"line":6594,"offset":1183172,"length":209,"previous":"M21-GAP-03338","next":"M21-GAP-03340"},"M21-GAP-03340":{"line":6595,"offset":1183381,"length":203,"previous":"M21-GAP-03339","next":"M21-GAP-03341"},"M21-GAP-03341":{"line":6596,"offset":1183584,"length":180,"previous":"M21-GAP-03340","next":"M21-GAP-03342"},"M21-GAP-03342":{"line":6597,"offset":1183764,"length":181,"previous":"M21-GAP-03341","next":"M21-GAP-03343"},"M21-GAP-03343":{"line":6598,"offset":1183945,"length":182,"previous":"M21-GAP-03342","next":"M21-GAP-03344"},"M21-GAP-03344":{"line":6599,"offset":1184127,"length":181,"previous":"M21-GAP-03343","next":"M21-GAP-03345"},"M21-GAP-03345":{"line":6600,"offset":1184308,"length":196,"previous":"M21-GAP-03344","next":"M21-GAP-03346"},"M21-GAP-03346":{"line":6601,"offset":1184504,"length":192,"previous":"M21-GAP-03345","next":"M21-GAP-03347"},"M21-GAP-03347":{"line":6602,"offset":1184696,"length":192,"previous":"M21-GAP-03346","next":"M21-GAP-03348"},"M21-GAP-03348":{"line":6603,"offset":1184888,"length":192,"previous":"M21-GAP-03347","next":"M21-GAP-03349"},"M21-GAP-03349":{"line":6604,"offset":1185080,"length":196,"previous":"M21-GAP-03348","next":"M21-GAP-03350"},"M21-GAP-03350":{"line":6605,"offset":1185276,"length":196,"previous":"M21-GAP-03349","next":"M21-GAP-03351"},"M21-GAP-03351":{"line":6606,"offset":1185472,"length":197,"previous":"M21-GAP-03350","next":"M21-GAP-03352"},"M21-GAP-03352":{"line":6607,"offset":1185669,"length":198,"previous":"M21-GAP-03351","next":"M21-GAP-03353"},"M21-GAP-03353":{"line":6608,"offset":1185867,"length":194,"previous":"M21-GAP-03352","next":"M21-GAP-03354"},"M21-GAP-03354":{"line":6609,"offset":1186061,"length":194,"previous":"M21-GAP-03353","next":"M21-GAP-03355"},"M21-GAP-03355":{"line":6610,"offset":1186255,"length":194,"previous":"M21-GAP-03354","next":"M21-GAP-03356"},"M21-GAP-03356":{"line":6611,"offset":1186449,"length":197,"previous":"M21-GAP-03355","next":"M21-GAP-03357"},"M21-GAP-03357":{"line":6612,"offset":1186646,"length":193,"previous":"M21-GAP-03356","next":"M21-GAP-03358"},"M21-GAP-03358":{"line":6613,"offset":1186839,"length":193,"previous":"M21-GAP-03357","next":"M21-GAP-03359"},"M21-GAP-03359":{"line":6614,"offset":1187032,"length":196,"previous":"M21-GAP-03358","next":"M21-GAP-03360"},"M21-GAP-03360":{"line":6615,"offset":1187228,"length":193,"previous":"M21-GAP-03359","next":"M21-GAP-03361"},"M21-GAP-03361":{"line":6616,"offset":1187421,"length":197,"previous":"M21-GAP-03360","next":"M21-GAP-03362"},"M21-GAP-03362":{"line":6617,"offset":1187618,"length":195,"previous":"M21-GAP-03361","next":"M21-GAP-03363"},"M21-GAP-03363":{"line":6618,"offset":1187813,"length":201,"previous":"M21-GAP-03362","next":"M21-GAP-03364"},"M21-GAP-03364":{"line":6619,"offset":1188014,"length":197,"previous":"M21-GAP-03363","next":"M21-GAP-03365"},"M21-GAP-03365":{"line":6620,"offset":1188211,"length":197,"previous":"M21-GAP-03364","next":"M21-GAP-03366"},"M21-GAP-03366":{"line":6621,"offset":1188408,"length":197,"previous":"M21-GAP-03365","next":"M21-GAP-03367"},"M21-GAP-03367":{"line":6622,"offset":1188605,"length":197,"previous":"M21-GAP-03366","next":"M21-GAP-03368"},"M21-GAP-03368":{"line":6623,"offset":1188802,"length":186,"previous":"M21-GAP-03367","next":"M21-GAP-03369"},"M21-GAP-03369":{"line":6624,"offset":1188988,"length":200,"previous":"M21-GAP-03368","next":"M21-GAP-03370"},"M21-GAP-03370":{"line":6625,"offset":1189188,"length":189,"previous":"M21-GAP-03369","next":"M21-GAP-03371"},"M21-GAP-03371":{"line":6626,"offset":1189377,"length":199,"previous":"M21-GAP-03370","next":"M21-GAP-03372"},"M21-GAP-03372":{"line":6627,"offset":1189576,"length":188,"previous":"M21-GAP-03371","next":"M21-GAP-03373"},"M21-GAP-03373":{"line":6628,"offset":1189764,"length":181,"previous":"M21-GAP-03372","next":"M21-GAP-03374"},"M21-GAP-03374":{"line":6629,"offset":1189945,"length":185,"previous":"M21-GAP-03373","next":"M21-GAP-03375"},"M21-GAP-03375":{"line":6630,"offset":1190130,"length":192,"previous":"M21-GAP-03374","next":"M21-GAP-03376"},"M21-GAP-03376":{"line":6631,"offset":1190322,"length":181,"previous":"M21-GAP-03375","next":"M21-GAP-03377"},"M21-GAP-03377":{"line":6632,"offset":1190503,"length":169,"previous":"M21-GAP-03376","next":"M21-GAP-03378"},"M21-GAP-03378":{"line":6633,"offset":1190672,"length":178,"previous":"M21-GAP-03377","next":"M21-GAP-03379"},"M21-GAP-03379":{"line":6634,"offset":1190850,"length":169,"previous":"M21-GAP-03378","next":"M21-GAP-03380"},"M21-GAP-03380":{"line":6635,"offset":1191019,"length":168,"previous":"M21-GAP-03379","next":"M21-GAP-03381"},"M21-GAP-03381":{"line":6636,"offset":1191187,"length":175,"previous":"M21-GAP-03380","next":"M21-GAP-03382"},"M21-GAP-03382":{"line":6637,"offset":1191362,"length":187,"previous":"M21-GAP-03381","next":"M21-GAP-03383"},"M21-GAP-03383":{"line":6638,"offset":1191549,"length":177,"previous":"M21-GAP-03382","next":"M21-GAP-03384"},"M21-GAP-03384":{"line":6639,"offset":1191726,"length":183,"previous":"M21-GAP-03383","next":"M21-GAP-03385"},"M21-GAP-03385":{"line":6640,"offset":1191909,"length":182,"previous":"M21-GAP-03384","next":"M21-GAP-03386"},"M21-GAP-03386":{"line":6641,"offset":1192091,"length":170,"previous":"M21-GAP-03385","next":"M21-GAP-03387"},"M21-GAP-03387":{"line":6642,"offset":1192261,"length":169,"previous":"M21-GAP-03386","next":"M21-GAP-03388"},"M21-GAP-03388":{"line":6643,"offset":1192430,"length":179,"previous":"M21-GAP-03387","next":"M21-GAP-03389"},"M21-GAP-03389":{"line":6644,"offset":1192609,"length":165,"previous":"M21-GAP-03388","next":"M21-GAP-03390"},"M21-GAP-03390":{"line":6645,"offset":1192774,"length":166,"previous":"M21-GAP-03389","next":"M21-GAP-03391"},"M21-GAP-03391":{"line":6646,"offset":1192940,"length":184,"previous":"M21-GAP-03390","next":"M21-GAP-03392"},"M21-GAP-03392":{"line":6647,"offset":1193124,"length":188,"previous":"M21-GAP-03391","next":"M21-GAP-03393"},"M21-GAP-03393":{"line":6648,"offset":1193312,"length":180,"previous":"M21-GAP-03392","next":"M21-GAP-03394"},"M21-GAP-03394":{"line":6649,"offset":1193492,"length":198,"previous":"M21-GAP-03393","next":"M21-GAP-03395"},"M21-GAP-03395":{"line":6650,"offset":1193690,"length":180,"previous":"M21-GAP-03394","next":"M21-GAP-03396"},"M21-GAP-03396":{"line":6651,"offset":1193870,"length":187,"previous":"M21-GAP-03395","next":"M21-GAP-03397"},"M21-GAP-03397":{"line":6652,"offset":1194057,"length":184,"previous":"M21-GAP-03396","next":"M21-GAP-03398"},"M21-GAP-03398":{"line":6653,"offset":1194241,"length":179,"previous":"M21-GAP-03397","next":"M21-GAP-03399"},"M21-GAP-03399":{"line":6654,"offset":1194420,"length":179,"previous":"M21-GAP-03398","next":"M21-GAP-03400"},"M21-GAP-03400":{"line":6655,"offset":1194599,"length":164,"previous":"M21-GAP-03399","next":"M21-GAP-03401"},"M21-GAP-03401":{"line":6656,"offset":1194763,"length":166,"previous":"M21-GAP-03400","next":"M21-GAP-03402"},"M21-GAP-03402":{"line":6657,"offset":1194929,"length":184,"previous":"M21-GAP-03401","next":"M21-GAP-03403"},"M21-GAP-03403":{"line":6658,"offset":1195113,"length":178,"previous":"M21-GAP-03402","next":"M21-GAP-03404"},"M21-GAP-03404":{"line":6659,"offset":1195291,"length":184,"previous":"M21-GAP-03403","next":"M21-GAP-03405"},"M21-GAP-03405":{"line":6660,"offset":1195475,"length":180,"previous":"M21-GAP-03404","next":"M21-GAP-03406"},"M21-GAP-03406":{"line":6661,"offset":1195655,"length":189,"previous":"M21-GAP-03405","next":"M21-GAP-03407"},"M21-GAP-03407":{"line":6662,"offset":1195844,"length":173,"previous":"M21-GAP-03406","next":"M21-GAP-03408"},"M21-GAP-03408":{"line":6663,"offset":1196017,"length":189,"previous":"M21-GAP-03407","next":"M21-GAP-03409"},"M21-GAP-03409":{"line":6664,"offset":1196206,"length":187,"previous":"M21-GAP-03408","next":"M21-GAP-03410"},"M21-GAP-03410":{"line":6665,"offset":1196393,"length":190,"previous":"M21-GAP-03409","next":"M21-GAP-03411"},"M21-GAP-03411":{"line":6666,"offset":1196583,"length":182,"previous":"M21-GAP-03410","next":"M21-GAP-03412"},"M21-GAP-03412":{"line":6667,"offset":1196765,"length":171,"previous":"M21-GAP-03411","next":"M21-GAP-03413"},"M21-GAP-03413":{"line":6668,"offset":1196936,"length":173,"previous":"M21-GAP-03412","next":"M21-GAP-03414"},"M21-GAP-03414":{"line":6669,"offset":1197109,"length":176,"previous":"M21-GAP-03413","next":"M21-GAP-03415"},"M21-GAP-03415":{"line":6670,"offset":1197285,"length":181,"previous":"M21-GAP-03414","next":"M21-GAP-03416"},"M21-GAP-03416":{"line":6671,"offset":1197466,"length":179,"previous":"M21-GAP-03415","next":"M21-GAP-03417"},"M21-GAP-03417":{"line":6672,"offset":1197645,"length":187,"previous":"M21-GAP-03416","next":"M21-GAP-03418"},"M21-GAP-03418":{"line":6673,"offset":1197832,"length":179,"previous":"M21-GAP-03417","next":"M21-GAP-03419"},"M21-GAP-03419":{"line":6674,"offset":1198011,"length":186,"previous":"M21-GAP-03418","next":"M21-GAP-03420"},"M21-GAP-03420":{"line":6675,"offset":1198197,"length":183,"previous":"M21-GAP-03419","next":"M21-GAP-03421"},"M21-GAP-03421":{"line":6676,"offset":1198380,"length":183,"previous":"M21-GAP-03420","next":"M21-GAP-03422"},"M21-GAP-03422":{"line":6677,"offset":1198563,"length":183,"previous":"M21-GAP-03421","next":"M21-GAP-03423"},"M21-GAP-03423":{"line":6678,"offset":1198746,"length":185,"previous":"M21-GAP-03422","next":"M21-GAP-03424"},"M21-GAP-03424":{"line":6679,"offset":1198931,"length":183,"previous":"M21-GAP-03423","next":"M21-GAP-03425"},"M21-GAP-03425":{"line":6680,"offset":1199114,"length":186,"previous":"M21-GAP-03424","next":"M21-GAP-03426"},"M21-GAP-03426":{"line":6681,"offset":1199300,"length":186,"previous":"M21-GAP-03425","next":"M21-GAP-03427"},"M21-GAP-03427":{"line":6682,"offset":1199486,"length":173,"previous":"M21-GAP-03426","next":"M21-GAP-03428"},"M21-GAP-03428":{"line":6683,"offset":1199659,"length":195,"previous":"M21-GAP-03427","next":"M21-GAP-03429"},"M21-GAP-03429":{"line":6684,"offset":1199854,"length":198,"previous":"M21-GAP-03428","next":"M21-GAP-03430"},"M21-GAP-03430":{"line":6685,"offset":1200052,"length":198,"previous":"M21-GAP-03429","next":"M21-GAP-03431"},"M21-GAP-03431":{"line":6686,"offset":1200250,"length":196,"previous":"M21-GAP-03430","next":"M21-GAP-03432"},"M21-GAP-03432":{"line":6687,"offset":1200446,"length":198,"previous":"M21-GAP-03431","next":"M21-GAP-03433"},"M21-GAP-03433":{"line":6688,"offset":1200644,"length":197,"previous":"M21-GAP-03432","next":"M21-GAP-03434"},"M21-GAP-03434":{"line":6689,"offset":1200841,"length":213,"previous":"M21-GAP-03433","next":"M21-GAP-03435"},"M21-GAP-03435":{"line":6690,"offset":1201054,"length":202,"previous":"M21-GAP-03434","next":"M21-GAP-03436"},"M21-GAP-03436":{"line":6691,"offset":1201256,"length":216,"previous":"M21-GAP-03435","next":"M21-GAP-03437"},"M21-GAP-03437":{"line":6692,"offset":1201472,"length":205,"previous":"M21-GAP-03436","next":"M21-GAP-03438"},"M21-GAP-03438":{"line":6693,"offset":1201677,"length":215,"previous":"M21-GAP-03437","next":"M21-GAP-03439"},"M21-GAP-03439":{"line":6694,"offset":1201892,"length":204,"previous":"M21-GAP-03438","next":"M21-GAP-03440"},"M21-GAP-03440":{"line":6695,"offset":1202096,"length":201,"previous":"M21-GAP-03439","next":"M21-GAP-03441"},"M21-GAP-03441":{"line":6696,"offset":1202297,"length":208,"previous":"M21-GAP-03440","next":"M21-GAP-03442"},"M21-GAP-03442":{"line":6697,"offset":1202505,"length":197,"previous":"M21-GAP-03441","next":"M21-GAP-03443"},"M21-GAP-03443":{"line":6698,"offset":1202702,"length":192,"previous":"M21-GAP-03442","next":"M21-GAP-03444"},"M21-GAP-03444":{"line":6699,"offset":1202894,"length":196,"previous":"M21-GAP-03443","next":"M21-GAP-03445"},"M21-GAP-03445":{"line":6700,"offset":1203090,"length":194,"previous":"M21-GAP-03444","next":"M21-GAP-03446"},"M21-GAP-03446":{"line":6701,"offset":1203284,"length":194,"previous":"M21-GAP-03445","next":"M21-GAP-03447"},"M21-GAP-03447":{"line":6702,"offset":1203478,"length":195,"previous":"M21-GAP-03446","next":"M21-GAP-03448"},"M21-GAP-03448":{"line":6703,"offset":1203673,"length":195,"previous":"M21-GAP-03447","next":"M21-GAP-03449"},"M21-GAP-03449":{"line":6704,"offset":1203868,"length":200,"previous":"M21-GAP-03448","next":"M21-GAP-03450"},"M21-GAP-03450":{"line":6705,"offset":1204068,"length":196,"previous":"M21-GAP-03449","next":"M21-GAP-03451"},"M21-GAP-03451":{"line":6706,"offset":1204264,"length":195,"previous":"M21-GAP-03450","next":"M21-GAP-03452"},"M21-GAP-03452":{"line":6707,"offset":1204459,"length":211,"previous":"M21-GAP-03451","next":"M21-GAP-03453"},"M21-GAP-03453":{"line":6708,"offset":1204670,"length":200,"previous":"M21-GAP-03452","next":"M21-GAP-03454"},"M21-GAP-03454":{"line":6709,"offset":1204870,"length":214,"previous":"M21-GAP-03453","next":"M21-GAP-03455"},"M21-GAP-03455":{"line":6710,"offset":1205084,"length":203,"previous":"M21-GAP-03454","next":"M21-GAP-03456"},"M21-GAP-03456":{"line":6711,"offset":1205287,"length":213,"previous":"M21-GAP-03455","next":"M21-GAP-03457"},"M21-GAP-03457":{"line":6712,"offset":1205500,"length":202,"previous":"M21-GAP-03456","next":"M21-GAP-03458"},"M21-GAP-03458":{"line":6713,"offset":1205702,"length":206,"previous":"M21-GAP-03457","next":"M21-GAP-03459"},"M21-GAP-03459":{"line":6714,"offset":1205908,"length":195,"previous":"M21-GAP-03458","next":"M21-GAP-03460"},"M21-GAP-03460":{"line":6715,"offset":1206103,"length":180,"previous":"M21-GAP-03459","next":"M21-GAP-03461"},"M21-GAP-03461":{"line":6716,"offset":1206283,"length":171,"previous":"M21-GAP-03460","next":"M21-GAP-03462"},"M21-GAP-03462":{"line":6717,"offset":1206454,"length":172,"previous":"M21-GAP-03461","next":"M21-GAP-03463"},"M21-GAP-03463":{"line":6718,"offset":1206626,"length":163,"previous":"M21-GAP-03462","next":"M21-GAP-03464"},"M21-GAP-03464":{"line":6719,"offset":1206789,"length":186,"previous":"M21-GAP-03463","next":"M21-GAP-03465"},"M21-GAP-03465":{"line":6720,"offset":1206975,"length":180,"previous":"M21-GAP-03464","next":"M21-GAP-03466"},"M21-GAP-03466":{"line":6721,"offset":1207155,"length":167,"previous":"M21-GAP-03465","next":"M21-GAP-03467"},"M21-GAP-03467":{"line":6722,"offset":1207322,"length":167,"previous":"M21-GAP-03466","next":"M21-GAP-03468"},"M21-GAP-03468":{"line":6723,"offset":1207489,"length":172,"previous":"M21-GAP-03467","next":"M21-GAP-03469"},"M21-GAP-03469":{"line":6724,"offset":1207661,"length":181,"previous":"M21-GAP-03468","next":"M21-GAP-03470"},"M21-GAP-03470":{"line":6725,"offset":1207842,"length":164,"previous":"M21-GAP-03469","next":"M21-GAP-03471"},"M21-GAP-03471":{"line":6726,"offset":1208006,"length":168,"previous":"M21-GAP-03470","next":"M21-GAP-03472"},"M21-GAP-03472":{"line":6727,"offset":1208174,"length":175,"previous":"M21-GAP-03471","next":"M21-GAP-03473"},"M21-GAP-03473":{"line":6728,"offset":1208349,"length":176,"previous":"M21-GAP-03472","next":"M21-GAP-03474"},"M21-GAP-03474":{"line":6729,"offset":1208525,"length":175,"previous":"M21-GAP-03473","next":"M21-GAP-03475"},"M21-GAP-03475":{"line":6730,"offset":1208700,"length":177,"previous":"M21-GAP-03474","next":"M21-GAP-03476"},"M21-GAP-03476":{"line":6731,"offset":1208877,"length":178,"previous":"M21-GAP-03475","next":"M21-GAP-03477"},"M21-GAP-03477":{"line":6732,"offset":1209055,"length":179,"previous":"M21-GAP-03476","next":"M21-GAP-03478"},"M21-GAP-03478":{"line":6733,"offset":1209234,"length":181,"previous":"M21-GAP-03477","next":"M21-GAP-03479"},"M21-GAP-03479":{"line":6734,"offset":1209415,"length":188,"previous":"M21-GAP-03478","next":"M21-GAP-03480"},"M21-GAP-03480":{"line":6735,"offset":1209603,"length":186,"previous":"M21-GAP-03479","next":"M21-GAP-03481"},"M21-GAP-03481":{"line":6736,"offset":1209789,"length":187,"previous":"M21-GAP-03480","next":"M21-GAP-03482"},"M21-GAP-03482":{"line":6737,"offset":1209976,"length":198,"previous":"M21-GAP-03481","next":"M21-GAP-03483"},"M21-GAP-03483":{"line":6738,"offset":1210174,"length":187,"previous":"M21-GAP-03482","next":"M21-GAP-03484"},"M21-GAP-03484":{"line":6739,"offset":1210361,"length":201,"previous":"M21-GAP-03483","next":"M21-GAP-03485"},"M21-GAP-03485":{"line":6740,"offset":1210562,"length":190,"previous":"M21-GAP-03484","next":"M21-GAP-03486"},"M21-GAP-03486":{"line":6741,"offset":1210752,"length":200,"previous":"M21-GAP-03485","next":"M21-GAP-03487"},"M21-GAP-03487":{"line":6742,"offset":1210952,"length":189,"previous":"M21-GAP-03486","next":"M21-GAP-03488"},"M21-GAP-03488":{"line":6743,"offset":1211141,"length":193,"previous":"M21-GAP-03487","next":"M21-GAP-03489"},"M21-GAP-03489":{"line":6744,"offset":1211334,"length":182,"previous":"M21-GAP-03488","next":"M21-GAP-03490"},"M21-GAP-03490":{"line":6745,"offset":1211516,"length":171,"previous":"M21-GAP-03489","next":"M21-GAP-03491"},"M21-GAP-03491":{"line":6746,"offset":1211687,"length":176,"previous":"M21-GAP-03490","next":"M21-GAP-03492"},"M21-GAP-03492":{"line":6747,"offset":1211863,"length":171,"previous":"M21-GAP-03491","next":"M21-GAP-03493"},"M21-GAP-03493":{"line":6748,"offset":1212034,"length":171,"previous":"M21-GAP-03492","next":"M21-GAP-03494"},"M21-GAP-03494":{"line":6749,"offset":1212205,"length":201,"previous":"M21-GAP-03493","next":"M21-GAP-03495"},"M21-GAP-03495":{"line":6750,"offset":1212406,"length":178,"previous":"M21-GAP-03494","next":"M21-GAP-03496"},"M21-GAP-03496":{"line":6751,"offset":1212584,"length":199,"previous":"M21-GAP-03495","next":"M21-GAP-03497"},"M21-GAP-03497":{"line":6752,"offset":1212783,"length":168,"previous":"M21-GAP-03496","next":"M21-GAP-03498"},"M21-GAP-03498":{"line":6753,"offset":1212951,"length":178,"previous":"M21-GAP-03497","next":"M21-GAP-03499"},"M21-GAP-03499":{"line":6754,"offset":1213129,"length":171,"previous":"M21-GAP-03498","next":"M21-GAP-03500"},"M21-GAP-03500":{"line":6755,"offset":1213300,"length":164,"previous":"M21-GAP-03499","next":"M21-GAP-03501"},"M21-GAP-03501":{"line":6756,"offset":1213464,"length":177,"previous":"M21-GAP-03500","next":"M21-GAP-03502"},"M21-GAP-03502":{"line":6757,"offset":1213641,"length":177,"previous":"M21-GAP-03501","next":"M21-GAP-03503"},"M21-GAP-03503":{"line":6758,"offset":1213818,"length":190,"previous":"M21-GAP-03502","next":"M21-GAP-03504"},"M21-GAP-03504":{"line":6759,"offset":1214008,"length":188,"previous":"M21-GAP-03503","next":"M21-GAP-03505"},"M21-GAP-03505":{"line":6760,"offset":1214196,"length":190,"previous":"M21-GAP-03504","next":"M21-GAP-03506"},"M21-GAP-03506":{"line":6761,"offset":1214386,"length":190,"previous":"M21-GAP-03505","next":"M21-GAP-03507"},"M21-GAP-03507":{"line":6762,"offset":1214576,"length":189,"previous":"M21-GAP-03506","next":"M21-GAP-03508"},"M21-GAP-03508":{"line":6763,"offset":1214765,"length":205,"previous":"M21-GAP-03507","next":"M21-GAP-03509"},"M21-GAP-03509":{"line":6764,"offset":1214970,"length":194,"previous":"M21-GAP-03508","next":"M21-GAP-03510"},"M21-GAP-03510":{"line":6765,"offset":1215164,"length":208,"previous":"M21-GAP-03509","next":"M21-GAP-03511"},"M21-GAP-03511":{"line":6766,"offset":1215372,"length":197,"previous":"M21-GAP-03510","next":"M21-GAP-03512"},"M21-GAP-03512":{"line":6767,"offset":1215569,"length":207,"previous":"M21-GAP-03511","next":"M21-GAP-03513"},"M21-GAP-03513":{"line":6768,"offset":1215776,"length":196,"previous":"M21-GAP-03512","next":"M21-GAP-03514"},"M21-GAP-03514":{"line":6769,"offset":1215972,"length":200,"previous":"M21-GAP-03513","next":"M21-GAP-03515"},"M21-GAP-03515":{"line":6770,"offset":1216172,"length":189,"previous":"M21-GAP-03514","next":"M21-GAP-03516"},"M21-GAP-03516":{"line":6771,"offset":1216361,"length":177,"previous":"M21-GAP-03515","next":"M21-GAP-03517"},"M21-GAP-03517":{"line":6772,"offset":1216538,"length":184,"previous":"M21-GAP-03516","next":"M21-GAP-03518"},"M21-GAP-03518":{"line":6773,"offset":1216722,"length":180,"previous":"M21-GAP-03517","next":"M21-GAP-03519"},"M21-GAP-03519":{"line":6774,"offset":1216902,"length":179,"previous":"M21-GAP-03518","next":"M21-GAP-03520"},"M21-GAP-03520":{"line":6775,"offset":1217081,"length":174,"previous":"M21-GAP-03519","next":"M21-GAP-03521"},"M21-GAP-03521":{"line":6776,"offset":1217255,"length":166,"previous":"M21-GAP-03520","next":"M21-GAP-03522"},"M21-GAP-03522":{"line":6777,"offset":1217421,"length":173,"previous":"M21-GAP-03521","next":"M21-GAP-03523"},"M21-GAP-03523":{"line":6778,"offset":1217594,"length":179,"previous":"M21-GAP-03522","next":"M21-GAP-03524"},"M21-GAP-03524":{"line":6779,"offset":1217773,"length":166,"previous":"M21-GAP-03523","next":"M21-GAP-03525"},"M21-GAP-03525":{"line":6780,"offset":1217939,"length":188,"previous":"M21-GAP-03524","next":"M21-GAP-03526"},"M21-GAP-03526":{"line":6781,"offset":1218127,"length":191,"previous":"M21-GAP-03525","next":"M21-GAP-03527"},"M21-GAP-03527":{"line":6782,"offset":1218318,"length":207,"previous":"M21-GAP-03526","next":"M21-GAP-03528"},"M21-GAP-03528":{"line":6783,"offset":1218525,"length":196,"previous":"M21-GAP-03527","next":"M21-GAP-03529"},"M21-GAP-03529":{"line":6784,"offset":1218721,"length":210,"previous":"M21-GAP-03528","next":"M21-GAP-03530"},"M21-GAP-03530":{"line":6785,"offset":1218931,"length":199,"previous":"M21-GAP-03529","next":"M21-GAP-03531"},"M21-GAP-03531":{"line":6786,"offset":1219130,"length":209,"previous":"M21-GAP-03530","next":"M21-GAP-03532"},"M21-GAP-03532":{"line":6787,"offset":1219339,"length":198,"previous":"M21-GAP-03531","next":"M21-GAP-03533"},"M21-GAP-03533":{"line":6788,"offset":1219537,"length":190,"previous":"M21-GAP-03532","next":"M21-GAP-03534"},"M21-GAP-03534":{"line":6789,"offset":1219727,"length":179,"previous":"M21-GAP-03533","next":"M21-GAP-03535"},"M21-GAP-03535":{"line":6790,"offset":1219906,"length":170,"previous":"M21-GAP-03534","next":"M21-GAP-03536"},"M21-GAP-03536":{"line":6791,"offset":1220076,"length":185,"previous":"M21-GAP-03535","next":"M21-GAP-03537"},"M21-GAP-03537":{"line":6792,"offset":1220261,"length":178,"previous":"M21-GAP-03536","next":"M21-GAP-03538"},"M21-GAP-03538":{"line":6793,"offset":1220439,"length":178,"previous":"M21-GAP-03537","next":"M21-GAP-03539"},"M21-GAP-03539":{"line":6794,"offset":1220617,"length":170,"previous":"M21-GAP-03538","next":"M21-GAP-03540"},"M21-GAP-03540":{"line":6795,"offset":1220787,"length":170,"previous":"M21-GAP-03539","next":"M21-GAP-03541"},"M21-GAP-03541":{"line":6796,"offset":1220957,"length":176,"previous":"M21-GAP-03540","next":"M21-GAP-03542"},"M21-GAP-03542":{"line":6797,"offset":1221133,"length":191,"previous":"M21-GAP-03541","next":"M21-GAP-03543"},"M21-GAP-03543":{"line":6798,"offset":1221324,"length":179,"previous":"M21-GAP-03542","next":"M21-GAP-03544"},"M21-GAP-03544":{"line":6799,"offset":1221503,"length":169,"previous":"M21-GAP-03543","next":"M21-GAP-03545"},"M21-GAP-03545":{"line":6800,"offset":1221672,"length":174,"previous":"M21-GAP-03544","next":"M21-GAP-03546"},"M21-GAP-03546":{"line":6801,"offset":1221846,"length":172,"previous":"M21-GAP-03545","next":"M21-GAP-03547"},"M21-GAP-03547":{"line":6802,"offset":1222018,"length":191,"previous":"M21-GAP-03546","next":"M21-GAP-03548"},"M21-GAP-03548":{"line":6803,"offset":1222209,"length":179,"previous":"M21-GAP-03547","next":"M21-GAP-03549"},"M21-GAP-03549":{"line":6804,"offset":1222388,"length":166,"previous":"M21-GAP-03548","next":"M21-GAP-03550"},"M21-GAP-03550":{"line":6805,"offset":1222554,"length":178,"previous":"M21-GAP-03549","next":"M21-GAP-03551"},"M21-GAP-03551":{"line":6806,"offset":1222732,"length":176,"previous":"M21-GAP-03550","next":"M21-GAP-03552"},"M21-GAP-03552":{"line":6807,"offset":1222908,"length":181,"previous":"M21-GAP-03551","next":"M21-GAP-03553"},"M21-GAP-03553":{"line":6808,"offset":1223089,"length":177,"previous":"M21-GAP-03552","next":"M21-GAP-03554"},"M21-GAP-03554":{"line":6809,"offset":1223266,"length":182,"previous":"M21-GAP-03553","next":"M21-GAP-03555"},"M21-GAP-03555":{"line":6810,"offset":1223448,"length":179,"previous":"M21-GAP-03554","next":"M21-GAP-03556"},"M21-GAP-03556":{"line":6811,"offset":1223627,"length":208,"previous":"M21-GAP-03555","next":"M21-GAP-03557"},"M21-GAP-03557":{"line":6812,"offset":1223835,"length":177,"previous":"M21-GAP-03556","next":"M21-GAP-03558"},"M21-GAP-03558":{"line":6813,"offset":1224012,"length":177,"previous":"M21-GAP-03557","next":"M21-GAP-03559"},"M21-GAP-03559":{"line":6814,"offset":1224189,"length":172,"previous":"M21-GAP-03558","next":"M21-GAP-03560"},"M21-GAP-03560":{"line":6815,"offset":1224361,"length":166,"previous":"M21-GAP-03559","next":"M21-GAP-03561"},"M21-GAP-03561":{"line":6816,"offset":1224527,"length":158,"previous":"M21-GAP-03560","next":"M21-GAP-03562"},"M21-GAP-03562":{"line":6817,"offset":1224685,"length":165,"previous":"M21-GAP-03561","next":"M21-GAP-03563"},"M21-GAP-03563":{"line":6818,"offset":1224850,"length":155,"previous":"M21-GAP-03562","next":"M21-GAP-03564"},"M21-GAP-03564":{"line":6819,"offset":1225005,"length":154,"previous":"M21-GAP-03563","next":"M21-GAP-03565"},"M21-GAP-03565":{"line":6820,"offset":1225159,"length":153,"previous":"M21-GAP-03564","next":"M21-GAP-03566"},"M21-GAP-03566":{"line":6821,"offset":1225312,"length":153,"previous":"M21-GAP-03565","next":"M21-GAP-03567"},"M21-GAP-03567":{"line":6822,"offset":1225465,"length":150,"previous":"M21-GAP-03566","next":"M21-GAP-03568"},"M21-GAP-03568":{"line":6823,"offset":1225615,"length":161,"previous":"M21-GAP-03567","next":"M21-GAP-03569"},"M21-GAP-03569":{"line":6824,"offset":1225776,"length":154,"previous":"M21-GAP-03568","next":"M21-GAP-03570"},"M21-GAP-03570":{"line":6825,"offset":1225930,"length":156,"previous":"M21-GAP-03569","next":"M21-GAP-03571"},"M21-GAP-03571":{"line":6826,"offset":1226086,"length":156,"previous":"M21-GAP-03570","next":"M21-GAP-03572"},"M21-GAP-03572":{"line":6827,"offset":1226242,"length":152,"previous":"M21-GAP-03571","next":"M21-GAP-03573"},"M21-GAP-03573":{"line":6828,"offset":1226394,"length":158,"previous":"M21-GAP-03572","next":"M21-GAP-03574"},"M21-GAP-03574":{"line":6829,"offset":1226552,"length":157,"previous":"M21-GAP-03573","next":"M21-GAP-03575"},"M21-GAP-03575":{"line":6830,"offset":1226709,"length":149,"previous":"M21-GAP-03574","next":"M21-GAP-03576"},"M21-GAP-03576":{"line":6831,"offset":1226858,"length":153,"previous":"M21-GAP-03575","next":"M21-GAP-03577"},"M21-GAP-03577":{"line":6832,"offset":1227011,"length":149,"previous":"M21-GAP-03576","next":"M21-GAP-03578"},"M21-GAP-03578":{"line":6833,"offset":1227160,"length":166,"previous":"M21-GAP-03577","next":"M21-GAP-03579"},"M21-GAP-03579":{"line":6834,"offset":1227326,"length":163,"previous":"M21-GAP-03578","next":"M21-GAP-03580"},"M21-GAP-03580":{"line":6835,"offset":1227489,"length":171,"previous":"M21-GAP-03579","next":"M21-GAP-03581"},"M21-GAP-03581":{"line":6836,"offset":1227660,"length":167,"previous":"M21-GAP-03580","next":"M21-GAP-03582"},"M21-GAP-03582":{"line":6837,"offset":1227827,"length":167,"previous":"M21-GAP-03581","next":"M21-GAP-03583"},"M21-GAP-03583":{"line":6838,"offset":1227994,"length":167,"previous":"M21-GAP-03582","next":"M21-GAP-03584"},"M21-GAP-03584":{"line":6839,"offset":1228161,"length":160,"previous":"M21-GAP-03583","next":"M21-GAP-03585"},"M21-GAP-03585":{"line":6840,"offset":1228321,"length":159,"previous":"M21-GAP-03584","next":"M21-GAP-03586"},"M21-GAP-03586":{"line":6841,"offset":1228480,"length":166,"previous":"M21-GAP-03585","next":"M21-GAP-03587"},"M21-GAP-03587":{"line":6842,"offset":1228646,"length":164,"previous":"M21-GAP-03586","next":"M21-GAP-03588"},"M21-GAP-03588":{"line":6843,"offset":1228810,"length":167,"previous":"M21-GAP-03587","next":"M21-GAP-03589"},"M21-GAP-03589":{"line":6844,"offset":1228977,"length":166,"previous":"M21-GAP-03588","next":"M21-GAP-03590"},"M21-GAP-03590":{"line":6845,"offset":1229143,"length":170,"previous":"M21-GAP-03589","next":"M21-GAP-03591"},"M21-GAP-03591":{"line":6846,"offset":1229313,"length":167,"previous":"M21-GAP-03590","next":"M21-GAP-03592"},"M21-GAP-03592":{"line":6847,"offset":1229480,"length":166,"previous":"M21-GAP-03591","next":"M21-GAP-03593"},"M21-GAP-03593":{"line":6848,"offset":1229646,"length":162,"previous":"M21-GAP-03592","next":"M21-GAP-03594"},"M21-GAP-03594":{"line":6849,"offset":1229808,"length":156,"previous":"M21-GAP-03593","next":"M21-GAP-03595"},"M21-GAP-03595":{"line":6850,"offset":1229964,"length":152,"previous":"M21-GAP-03594","next":"M21-GAP-03596"},"M21-GAP-03596":{"line":6851,"offset":1230116,"length":161,"previous":"M21-GAP-03595","next":"M21-GAP-03597"},"M21-GAP-03597":{"line":6852,"offset":1230277,"length":150,"previous":"M21-GAP-03596","next":"M21-GAP-03598"},"M21-GAP-03598":{"line":6853,"offset":1230427,"length":157,"previous":"M21-GAP-03597","next":"M21-GAP-03599"},"M21-GAP-03599":{"line":6854,"offset":1230584,"length":157,"previous":"M21-GAP-03598","next":"M21-GAP-03600"},"M21-GAP-03600":{"line":6855,"offset":1230741,"length":157,"previous":"M21-GAP-03599","next":"M21-GAP-03601"},"M21-GAP-03601":{"line":6856,"offset":1230898,"length":149,"previous":"M21-GAP-03600","next":"M21-GAP-03602"},"M21-GAP-03602":{"line":6857,"offset":1231047,"length":155,"previous":"M21-GAP-03601","next":"M21-GAP-03603"},"M21-GAP-03603":{"line":6858,"offset":1231202,"length":156,"previous":"M21-GAP-03602","next":"M21-GAP-03604"},"M21-GAP-03604":{"line":6859,"offset":1231358,"length":153,"previous":"M21-GAP-03603","next":"M21-GAP-03605"},"M21-GAP-03605":{"line":6860,"offset":1231511,"length":156,"previous":"M21-GAP-03604","next":"M21-GAP-03606"},"M21-GAP-03606":{"line":6861,"offset":1231667,"length":155,"previous":"M21-GAP-03605","next":"M21-GAP-03607"},"M21-GAP-03607":{"line":6862,"offset":1231822,"length":160,"previous":"M21-GAP-03606","next":"M21-GAP-03608"},"M21-GAP-03608":{"line":6863,"offset":1231982,"length":156,"previous":"M21-GAP-03607","next":"M21-GAP-03609"},"M21-GAP-03609":{"line":6864,"offset":1232138,"length":154,"previous":"M21-GAP-03608","next":"M21-GAP-03610"},"M21-GAP-03610":{"line":6865,"offset":1232292,"length":156,"previous":"M21-GAP-03609","next":"M21-GAP-03611"},"M21-GAP-03611":{"line":6866,"offset":1232448,"length":151,"previous":"M21-GAP-03610","next":"M21-GAP-03612"},"M21-GAP-03612":{"line":6867,"offset":1232599,"length":152,"previous":"M21-GAP-03611","next":"M21-GAP-03613"},"M21-GAP-03613":{"line":6868,"offset":1232751,"length":157,"previous":"M21-GAP-03612","next":"M21-GAP-03614"},"M21-GAP-03614":{"line":6869,"offset":1232908,"length":165,"previous":"M21-GAP-03613","next":"M21-GAP-03615"},"M21-GAP-03615":{"line":6870,"offset":1233073,"length":159,"previous":"M21-GAP-03614","next":"M21-GAP-03616"},"M21-GAP-03616":{"line":6871,"offset":1233232,"length":172,"previous":"M21-GAP-03615","next":"M21-GAP-03617"},"M21-GAP-03617":{"line":6872,"offset":1233404,"length":166,"previous":"M21-GAP-03616","next":"M21-GAP-03618"},"M21-GAP-03618":{"line":6873,"offset":1233570,"length":157,"previous":"M21-GAP-03617","next":"M21-GAP-03619"},"M21-GAP-03619":{"line":6874,"offset":1233727,"length":159,"previous":"M21-GAP-03618","next":"M21-GAP-03620"},"M21-GAP-03620":{"line":6875,"offset":1233886,"length":173,"previous":"M21-GAP-03619","next":"M21-GAP-03621"},"M21-GAP-03621":{"line":6876,"offset":1234059,"length":166,"previous":"M21-GAP-03620","next":"M21-GAP-03622"},"M21-GAP-03622":{"line":6877,"offset":1234225,"length":173,"previous":"M21-GAP-03621","next":"M21-GAP-03623"},"M21-GAP-03623":{"line":6878,"offset":1234398,"length":165,"previous":"M21-GAP-03622","next":"M21-GAP-03624"},"M21-GAP-03624":{"line":6879,"offset":1234563,"length":173,"previous":"M21-GAP-03623","next":"M21-GAP-03625"},"M21-GAP-03625":{"line":6880,"offset":1234736,"length":165,"previous":"M21-GAP-03624","next":"M22-GAP-00001"},"M22-GAP-00001":{"line":6881,"offset":1234901,"length":166,"previous":"M21-GAP-03625","next":"M22-GAP-00002"},"M22-GAP-00002":{"line":6882,"offset":1235067,"length":180,"previous":"M22-GAP-00001","next":"M22-GAP-00003"},"M22-GAP-00003":{"line":6883,"offset":1235247,"length":172,"previous":"M22-GAP-00002","next":"M22-GAP-00004"},"M22-GAP-00004":{"line":6884,"offset":1235419,"length":155,"previous":"M22-GAP-00003","next":"M22-GAP-00005"},"M22-GAP-00005":{"line":6885,"offset":1235574,"length":159,"previous":"M22-GAP-00004","next":"M22-GAP-00006"},"M22-GAP-00006":{"line":6886,"offset":1235733,"length":159,"previous":"M22-GAP-00005","next":"M22-GAP-00007"},"M22-GAP-00007":{"line":6887,"offset":1235892,"length":164,"previous":"M22-GAP-00006","next":"M22-GAP-00008"},"M22-GAP-00008":{"line":6888,"offset":1236056,"length":154,"previous":"M22-GAP-00007","next":"M22-GAP-00009"},"M22-GAP-00009":{"line":6889,"offset":1236210,"length":157,"previous":"M22-GAP-00008","next":"M22-GAP-00010"},"M22-GAP-00010":{"line":6890,"offset":1236367,"length":157,"previous":"M22-GAP-00009","next":"M22-GAP-00011"},"M22-GAP-00011":{"line":6891,"offset":1236524,"length":157,"previous":"M22-GAP-00010","next":"M22-GAP-00012"},"M22-GAP-00012":{"line":6892,"offset":1236681,"length":155,"previous":"M22-GAP-00011","next":"M22-GAP-00013"},"M22-GAP-00013":{"line":6893,"offset":1236836,"length":163,"previous":"M22-GAP-00012","next":"M22-GAP-00014"},"M22-GAP-00014":{"line":6894,"offset":1236999,"length":154,"previous":"M22-GAP-00013","next":"M22-GAP-00015"},"M22-GAP-00015":{"line":6895,"offset":1237153,"length":155,"previous":"M22-GAP-00014","next":"M22-GAP-00016"},"M22-GAP-00016":{"line":6896,"offset":1237308,"length":158,"previous":"M22-GAP-00015","next":"M22-GAP-00017"},"M22-GAP-00017":{"line":6897,"offset":1237466,"length":155,"previous":"M22-GAP-00016","next":"M22-GAP-00018"},"M22-GAP-00018":{"line":6898,"offset":1237621,"length":162,"previous":"M22-GAP-00017","next":"M22-GAP-00019"},"M22-GAP-00019":{"line":6899,"offset":1237783,"length":154,"previous":"M22-GAP-00018","next":null}}} diff --git a/tests/golden/M16-GAP-00192/WebGapAnimKeyingSetExportSet.py b/tests/golden/M16-GAP-00192/WebGapAnimKeyingSetExportSet.py new file mode 100644 index 00000000..c2bb939b --- /dev/null +++ b/tests/golden/M16-GAP-00192/WebGapAnimKeyingSetExportSet.py @@ -0,0 +1,18 @@ +# Keying Set: WebGapAnimKeyingSetExportSet +import bpy + +scene = bpy.context.scene + +# Keying Set Level declarations +ks = scene.keying_sets.new(idname='WebGapAnimKeyingSetExportSet', name='WebGapAnimKeyingSetExportSet') +ks.bl_description = '' + +ks.use_insertkey_needed = False +ks.use_insertkey_visual = False + +# ID's that are commonly used +id_0 = bpy.data.objects["WebGapAnimKeyingSetExportObject"] + +# Path Definitions +ksp = ks.paths.add(id_0, '["export_target"]', index=0) + diff --git a/tests/golden/M16-GAP-00276/asset-clear-single-desktop-report.json b/tests/golden/M16-GAP-00276/asset-clear-single-desktop-report.json new file mode 100644 index 00000000..28944557 --- /dev/null +++ b/tests/golden/M16-GAP-00276/asset-clear-single-desktop-report.json @@ -0,0 +1,22 @@ +{ + "after": { + "filepath": "//WebGapAssetClearSingle.blend", + "name": "WebGapAssetClearSingle.blend", + "packed": false + }, + "before": { + "filepath": "//WebGapAssetClearSingle.blend", + "name": "WebGapAssetClearSingle.blend", + "packed": false + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00276-operator-asset.clear_single.blend", + "fixtureSha256": "28a672f360e4bfb459c3281999a811654a736e70949f721ee1e263e90b2c80fe", + "mainMutation": "NONE", + "operation": "ASSET_CLEAR_SINGLE_DESKTOP", + "operatorStatus": "CANCELLED", + "poll": false, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00276" +} diff --git a/tests/golden/M16-GAP-00276/asset-clear-single-local-exact-report.json b/tests/golden/M16-GAP-00276/asset-clear-single-local-exact-report.json new file mode 100644 index 00000000..e7665538 --- /dev/null +++ b/tests/golden/M16-GAP-00276/asset-clear-single-local-exact-report.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00276", + "operation": "ASSET_CLEAR_SINGLE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00276-operator-asset.clear_single.blend", + "sha256": "28a672f360e4bfb459c3281999a811654a736e70949f721ee1e263e90b2c80fe" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00276/asset-clear-single-desktop-report.json", + "poll": false, + "operatorStatus": "CANCELLED", + "mainMutation": "NONE" + }, + "wasm": { + "status": "EXACT", + "libraryId": "library:WebGapAssetClearSingle.blend", + "sourcePath": "//WebGapAssetClearSingle.blend", + "libraryStatus": "EXTERNAL_REQUIRED", + "dependencyIds": [] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00277" +} diff --git a/tests/golden/M16-GAP-00276/manifest.json b/tests/golden/M16-GAP-00276/manifest.json new file mode 100644 index 00000000..0d5a2ab2 --- /dev/null +++ b/tests/golden/M16-GAP-00276/manifest.json @@ -0,0 +1,29 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00276", + "parentTask": "M16-GAP-00275", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ASSET_CLEAR_SINGLE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00275/manifest.json", "sha256": "c0db50bd8d2a3cbe9fd609714d1cb3dce75e1942855666ebcf5f12446e414949"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00276-operator-asset.clear_single.blend", "sha256": "28a672f360e4bfb459c3281999a811654a736e70949f721ee1e263e90b2c80fe"}, + "librarySource": {"path": "tests/files/web/generated/WebGapAssetClearSingle.blend", "sha256": "927e7d562a3f9f03416fed5c8e2943ad2bacf49a2c6e89ff7eb2f55ad9f51922"}, + "generator": {"path": "tools/web/generated/M16-GAP-00276.py", "sha256": "4db9afe38293f5fd231feb7e59b3a14323f19cb49d7d7b7a5d6e9fbd78e12da1"}, + "desktopChecker": {"path": "tools/web/check-action-asset-clear-single-desktop.py", "sha256": "14fee29a5e77fa4193f4a2c930e11dbf2e6a192f582ae71e74dfd157d5cae396"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "75ab17e39e0a575e13e1c73ca86214424c59a270d2ba1d83600ebb6937ecdb2c"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711"}, + "nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00276/asset-clear-single-desktop-report.json", "sha256": "032345a71948560fa9348bbd73ff9f54508a808d0f6d3561b271aa4542aa49da"}, + "webReport": {"path": "tests/golden/M16-GAP-00276/asset-clear-single-local-exact-report.json", "sha256": "6a9329b1f8d4b09343d92cf2aeaffab2bb90c6cf0165de7cf7376bdab05680b6"}, + "status": {"path": "docs/status/M16-GAP-00276.md", "sha256": "95a58460d0eaf26559db74d42e8823338d89c00369f770ca8feca911d2bceba0"}, + "taskContext": {"path": "tests/golden/M16-GAP-00276/task-context.json", "sha256": "ccbd1d071bace3b02e53fa59922b6f93398ce1fc028c25083edd5bd8fc3926ec"} + }, + "nextTask": "M16-GAP-00277" +} diff --git a/tests/golden/M16-GAP-00276/task-context.json b/tests/golden/M16-GAP-00276/task-context.json new file mode 100644 index 00000000..5aada43e --- /dev/null +++ b/tests/golden/M16-GAP-00276/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00276", + "parentTask": "M16-GAP-00275", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:asset.clear_single data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:asset.clear_single", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00276.py -- tests/files/web/generated/M16-GAP-00276-operator-asset.clear_single.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00276", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00276" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00276.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1847, + "contextRemainingTokens": 461 + }, + "source": { + "bytes": 8057, + "tokens": 2015 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00276.py", + "bytes": 1457, + "tokens": 365 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00276-operator-asset.clear_single.blend", + "bytes": 85897, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 831637, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00276/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00276.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00276/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1457, + "tokens": 365 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00277", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00276.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00275/manifest.json", + "parentStatus": "docs/status/M16-GAP-00275.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00276.md", + "tests/golden/M16-GAP-00275/manifest.json", + "docs/status/M16-GAP-00275.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00275", + "parentTask": "M16-GAP-00274", + "status": "done", + "nextTask": "M16-GAP-00276", + "artifactCount": 16 + }, + "statusSummary": [ + "# M16-GAP-00275 Status", + "status: done", + "task: asset.clear operator LOCAL_EXACT slice", + "updated: 2026-08-23 America/New_York", + "scope:", + "- The fixture links one object from external `WebGapAssetClear.blend`.", + " Blender desktop observes the no-local-asset boundary as `poll=false`,", + " records `CANCELLED` for `ASSET_OT_clear`, and confirms no Main mutation." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1779, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 445 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00276.md", + "bytes": 1779, + "lines": 38, + "tokens": 445 + }, + { + "path": "tests/golden/M16-GAP-00275/manifest.json", + "bytes": 2788, + "lines": 30, + "tokens": 697 + }, + { + "path": "docs/status/M16-GAP-00275.md", + "bytes": 995, + "lines": 27, + "tokens": 249 + } + ], + "sourceTokens": 2015, + "evidenceFiles": 1, + "evidenceBytes": 1457, + "evidenceTokens": 365, + "totalTokens": 2380, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3404, + "serializedContextTokens": 753, + "withinBudget": true + } +} diff --git a/tests/golden/M16-GAP-00277/asset-library-refresh-desktop-report.json b/tests/golden/M16-GAP-00277/asset-library-refresh-desktop-report.json new file mode 100644 index 00000000..3383d963 --- /dev/null +++ b/tests/golden/M16-GAP-00277/asset-library-refresh-desktop-report.json @@ -0,0 +1,22 @@ +{ + "after": { + "filepath": "//WebGapAssetLibraryRefresh.blend", + "name": "WebGapAssetLibraryRefresh.blend", + "packed": false + }, + "before": { + "filepath": "//WebGapAssetLibraryRefresh.blend", + "name": "WebGapAssetLibraryRefresh.blend", + "packed": false + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00277-operator-asset.library_refresh.blend", + "fixtureSha256": "afc722ccb0278518c4bae713a72642e2bec8789a0a7b12f6255ab9370782e437", + "mainMutation": "NONE", + "operation": "ASSET_LIBRARY_REFRESH_DESKTOP", + "operatorStatus": "CANCELLED", + "poll": false, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00277" +} diff --git a/tests/golden/M16-GAP-00277/asset-library-refresh-local-exact-report.json b/tests/golden/M16-GAP-00277/asset-library-refresh-local-exact-report.json new file mode 100644 index 00000000..386ce9b1 --- /dev/null +++ b/tests/golden/M16-GAP-00277/asset-library-refresh-local-exact-report.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00277", + "operation": "ASSET_LIBRARY_REFRESH_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00277-operator-asset.library_refresh.blend", + "sha256": "afc722ccb0278518c4bae713a72642e2bec8789a0a7b12f6255ab9370782e437" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00277/asset-library-refresh-desktop-report.json", + "poll": false, + "operatorStatus": "CANCELLED", + "mainMutation": "NONE" + }, + "wasm": { + "status": "EXACT", + "libraryId": "library:WebGapAssetLibraryRefresh.blend", + "sourcePath": "//WebGapAssetLibraryRefresh.blend", + "libraryStatus": "EXTERNAL_REQUIRED", + "dependencyIds": [] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00278" +} diff --git a/tests/golden/M16-GAP-00277/manifest.json b/tests/golden/M16-GAP-00277/manifest.json new file mode 100644 index 00000000..c750bf0b --- /dev/null +++ b/tests/golden/M16-GAP-00277/manifest.json @@ -0,0 +1,77 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00277", + "parentTask": "M16-GAP-00276", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ASSET_LIBRARY_REFRESH_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00276/manifest.json", + "sha256": "fa533919efd82e97be6e14a521f8ca8b64a5d12d125b5d3880f36c02bd502fc0" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00277-operator-asset.library_refresh.blend", + "sha256": "afc722ccb0278518c4bae713a72642e2bec8789a0a7b12f6255ab9370782e437" + }, + "librarySource": { + "path": "tests/files/web/generated/WebGapAssetLibraryRefresh.blend", + "sha256": "c274d8aa13b1dff0808a34289387b71c1ea2733e5feb8dfba7c4894af2728247" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00277.py", + "sha256": "feaeb2df7ff3b127a7a16900f5a210548e035872433b05e53061d95876602503" + }, + "desktopChecker": { + "path": "tools/web/check-action-asset-library-refresh-desktop.py", + "sha256": "ae264963a87d8bbd9c82a0806fb64b79731ddf7ee2efdf30170dffdc3c7aa452" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "74f5e88ba582aef9ec7173d222845d8bbe477ee2b58e58387bd22b72afed5301" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00277/asset-library-refresh-desktop-report.json", + "sha256": "535b7e49f358b454c59a7377859c2fc1d0670a7558b23cbba7db6e901138342f" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00277/asset-library-refresh-local-exact-report.json", + "sha256": "abaf6522c6aa2fc8e02f558717e18add7a731a7e42f4728877280d815b9e216b" + }, + "status": { + "path": "docs/status/M16-GAP-00277.md", + "sha256": "463c5b20a9010ca2af33989442f23ad4723001f7b96650cd40116456c0490da4" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00277/task-context.json", + "sha256": "1cf23718ef2778a6b3085119f49606a541f09135fd7fe4619dc77b96ea452664" + } + }, + "nextTask": "M16-GAP-00278" +} diff --git a/tests/golden/M16-GAP-00277/task-context.json b/tests/golden/M16-GAP-00277/task-context.json new file mode 100644 index 00000000..f9a80a79 --- /dev/null +++ b/tests/golden/M16-GAP-00277/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00277", + "parentTask": "M16-GAP-00276", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:asset.library_refresh data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:asset.library_refresh", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00277.py -- tests/files/web/generated/M16-GAP-00277-operator-asset.library_refresh.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00277", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00277" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00277.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1562, + "contextRemainingTokens": 389 + }, + "source": { + "bytes": 8342, + "tokens": 2087 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00277.py", + "bytes": 1472, + "tokens": 368 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00277-operator-asset.library_refresh.blend", + "bytes": 85890, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 835228, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00277/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00277.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00277/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1472, + "tokens": 368 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00278", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00277.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00276/manifest.json", + "parentStatus": "docs/status/M16-GAP-00276.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00277.md", + "tests/golden/M16-GAP-00276/manifest.json", + "docs/status/M16-GAP-00276.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00276", + "parentTask": "M16-GAP-00275", + "status": "done", + "nextTask": "M16-GAP-00277", + "artifactCount": 16 + }, + "statusSummary": [ + "# M16-GAP-00276 Status", + "status: done", + "task: asset.clear_single operator LOCAL_EXACT slice", + "updated: 2026-08-23 America/New_York", + "scope:", + "- The fixture links one object from external `WebGapAssetClearSingle.blend`.", + " Blender desktop observes the linked-data boundary as `poll=false`, records", + " `CANCELLED` for `ASSET_OT_clear_single`, and confirms no Main mutation." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1794, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 449 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00277.md", + "bytes": 1794, + "lines": 38, + "tokens": 449 + }, + { + "path": "tests/golden/M16-GAP-00276/manifest.json", + "bytes": 2829, + "lines": 30, + "tokens": 708 + }, + { + "path": "docs/status/M16-GAP-00276.md", + "bytes": 1224, + "lines": 30, + "tokens": 306 + } + ], + "sourceTokens": 2087, + "evidenceFiles": 1, + "evidenceBytes": 1472, + "evidenceTokens": 368, + "totalTokens": 2455, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3479, + "serializedContextTokens": 755, + "withinBudget": true + } +} diff --git a/tests/golden/M16-GAP-00278/asset-library-reload-listing-desktop-report.json b/tests/golden/M16-GAP-00278/asset-library-reload-listing-desktop-report.json new file mode 100644 index 00000000..60436c98 --- /dev/null +++ b/tests/golden/M16-GAP-00278/asset-library-reload-listing-desktop-report.json @@ -0,0 +1,22 @@ +{ + "after": { + "filepath": "//WebGapAssetLibraryReloadListing.blend", + "name": "WebGapAssetLibraryReloadListing.blend", + "packed": false + }, + "before": { + "filepath": "//WebGapAssetLibraryReloadListing.blend", + "name": "WebGapAssetLibraryReloadListing.blend", + "packed": false + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00278-operator-asset.library_reload_listing.blend", + "fixtureSha256": "a00495252942d98e3fc89e8777220bf86dacadb71cea9c67b5181a27657cfb67", + "mainMutation": "NONE", + "operation": "ASSET_LIBRARY_RELOAD_LISTING_DESKTOP", + "operatorStatus": "CANCELLED", + "poll": false, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00278" +} diff --git a/tests/golden/M16-GAP-00278/asset-library-reload-listing-local-exact-report.json b/tests/golden/M16-GAP-00278/asset-library-reload-listing-local-exact-report.json new file mode 100644 index 00000000..9aafad4b --- /dev/null +++ b/tests/golden/M16-GAP-00278/asset-library-reload-listing-local-exact-report.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00278", + "operation": "ASSET_LIBRARY_RELOAD_LISTING_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00278-operator-asset.library_reload_listing.blend", + "sha256": "a00495252942d98e3fc89e8777220bf86dacadb71cea9c67b5181a27657cfb67" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00278/asset-library-reload-listing-desktop-report.json", + "poll": false, + "operatorStatus": "CANCELLED", + "mainMutation": "NONE" + }, + "wasm": { + "status": "EXACT", + "libraryId": "library:WebGapAssetLibraryReloadListing.blend", + "sourcePath": "//WebGapAssetLibraryReloadListing.blend", + "libraryStatus": "EXTERNAL_REQUIRED", + "dependencyIds": [] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00279" +} diff --git a/tests/golden/M16-GAP-00278/manifest.json b/tests/golden/M16-GAP-00278/manifest.json new file mode 100644 index 00000000..4b35904c --- /dev/null +++ b/tests/golden/M16-GAP-00278/manifest.json @@ -0,0 +1,29 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00278", + "parentTask": "M16-GAP-00277", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ASSET_LIBRARY_RELOAD_LISTING_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00277/manifest.json", "sha256": "e28fb129b023f3adca72433bb09a13a981705cd6a7c379f3f410120837d21f72"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00278-operator-asset.library_reload_listing.blend", "sha256": "a00495252942d98e3fc89e8777220bf86dacadb71cea9c67b5181a27657cfb67"}, + "librarySource": {"path": "tests/files/web/generated/WebGapAssetLibraryReloadListing.blend", "sha256": "ff841fd2f2dba15fb990bba24856064aeced5a5339205de749af4451cbd4062e"}, + "generator": {"path": "tools/web/generated/M16-GAP-00278.py", "sha256": "bc00a04cc1fab867862b4ad54feb41cac8eb3507cba57e9ec7870c2989925784"}, + "desktopChecker": {"path": "tools/web/check-action-asset-library-reload-listing-desktop.py", "sha256": "b1bdfbcf5f2cb95afdc8309922e04437175ac90825517f6d3b2f5bc1098972a5"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "f0ce94b6bef7224d17c2f6ac280b1ed4b9fa780ff0c3422b759e098326d3050e"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711"}, + "nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00278/asset-library-reload-listing-desktop-report.json", "sha256": "b99fee3dc4c04dfa89c50cf9d575a89b6363eebec97b3c07e5fda82c1c64f46a"}, + "webReport": {"path": "tests/golden/M16-GAP-00278/asset-library-reload-listing-local-exact-report.json", "sha256": "a25d22cded541a11baa4961993dfab85d7aee4510c213cc73d7b6131106b1da7"}, + "status": {"path": "docs/status/M16-GAP-00278.md", "sha256": "698c779a806776ec51183336d390fb0c8ed9a1ca558dc2e4f4e75ecfc0843741"}, + "taskContext": {"path": "tests/golden/M16-GAP-00278/task-context.json", "sha256": "898677874b73caeef7b00e5207fdf040fb4462f0730436f0d896f272a74a92ac"} + }, + "nextTask": "M16-GAP-00279" +} diff --git a/tests/golden/M16-GAP-00278/task-context.json b/tests/golden/M16-GAP-00278/task-context.json new file mode 100644 index 00000000..c7f3a52a --- /dev/null +++ b/tests/golden/M16-GAP-00278/task-context.json @@ -0,0 +1,182 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00278", + "parentTask": "M16-GAP-00277", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:asset.library_reload_listing data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:asset.library_reload_listing", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00278.py -- tests/files/web/generated/M16-GAP-00278-operator-asset.library_reload_listing.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00278", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00278" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1277, + "contextRemainingTokens": 318 + }, + "source": { + "bytes": 8627, + "tokens": 2158 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00278-operator-asset.library_reload_listing.blend", + "bytes": 85924, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/generated/M16-GAP-00278.py", + "bytes": 1504, + "reason": "CONTEXT_REMAINING_SPACE" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 838860, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00278/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00278.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00278/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00279", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00278.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00277/manifest.json", + "parentStatus": "docs/status/M16-GAP-00277.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00278.md", + "tests/golden/M16-GAP-00277/manifest.json", + "docs/status/M16-GAP-00277.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00277", + "parentTask": "M16-GAP-00276", + "status": "done", + "nextTask": "M16-GAP-00278", + "artifactCount": 16 + }, + "statusSummary": [ + "# M16-GAP-00277 Status", + "status: done", + "task: asset.library_refresh operator LOCAL_EXACT slice", + "updated: 2026-08-23 America/New_York", + "scope:", + "- The fixture links one object from external `WebGapAssetLibraryRefresh.blend`.", + " Blender desktop observes the missing Asset Browser context as `poll=false`,", + " records `CANCELLED` for `ASSET_OT_library_refresh`, and confirms no Main" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1829, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 458 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00278.md", + "bytes": 1829, + "lines": 38, + "tokens": 458 + }, + { + "path": "tests/golden/M16-GAP-00277/manifest.json", + "bytes": 3135, + "lines": 78, + "tokens": 784 + }, + { + "path": "docs/status/M16-GAP-00277.md", + "bytes": 1168, + "lines": 29, + "tokens": 292 + } + ], + "sourceTokens": 2158, + "evidenceFiles": 0, + "evidenceBytes": 0, + "evidenceTokens": 0, + "totalTokens": 2158, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3182, + "serializedContextTokens": 725, + "withinBudget": true + } +} diff --git a/tests/golden/M16-GAP-00279/asset-mark-desktop-report.json b/tests/golden/M16-GAP-00279/asset-mark-desktop-report.json new file mode 100644 index 00000000..ac430183 --- /dev/null +++ b/tests/golden/M16-GAP-00279/asset-mark-desktop-report.json @@ -0,0 +1,30 @@ +{ + "after": { + "assetMarked": true, + "author": "M16 Fixture", + "description": "Asset mark operator fixture", + "name": "WebGapAssetMarkObject", + "tags": [ + "operator-mark" + ] + }, + "before": { + "assetMarked": true, + "author": "M16 Fixture", + "description": "Asset mark operator fixture", + "name": "WebGapAssetMarkObject", + "tags": [ + "operator-mark" + ] + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00279-operator-asset.mark.blend", + "fixtureSha256": "e2d2ee3b4fc59538e519c4131e40b90f36a83cf84c4c6731db8bb2fd65538d8b", + "mainMutation": "NONE", + "operation": "ASSET_MARK_DESKTOP", + "operatorStatus": "CANCELLED", + "poll": false, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00279" +} diff --git a/tests/golden/M16-GAP-00279/asset-mark-local-exact-report.json b/tests/golden/M16-GAP-00279/asset-mark-local-exact-report.json new file mode 100644 index 00000000..ca3c2819 --- /dev/null +++ b/tests/golden/M16-GAP-00279/asset-mark-local-exact-report.json @@ -0,0 +1,38 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00279", + "operation": "ASSET_MARK_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00279-operator-asset.mark.blend", + "sha256": "e2d2ee3b4fc59538e519c4131e40b90f36a83cf84c4c6731db8bb2fd65538d8b" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00279/asset-mark-desktop-report.json", + "poll": false, + "operatorStatus": "CANCELLED", + "mainMutation": "NONE" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapAssetMarkObject", + "assetData": { + "activeTag": 0, + "author": "M16 Fixture", + "catalogSimpleName": "", + "copyright": "", + "description": "Asset mark operator fixture", + "license": "", + "marked": true, + "preferredImportMethod": 1, + "tags": [ + "operator-mark" + ] + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00280" +} diff --git a/tests/golden/M16-GAP-00279/manifest.json b/tests/golden/M16-GAP-00279/manifest.json new file mode 100644 index 00000000..1329f143 --- /dev/null +++ b/tests/golden/M16-GAP-00279/manifest.json @@ -0,0 +1,29 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00279", + "parentTask": "M16-GAP-00278", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ASSET_MARK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00278/manifest.json", "sha256": "5ea558d23c10de4933484ff6c926ce5971d71bc5190223ae9bf1b0536cb171a5"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00279-operator-asset.mark.blend", "sha256": "e2d2ee3b4fc59538e519c4131e40b90f36a83cf84c4c6731db8bb2fd65538d8b"}, + "generator": {"path": "tools/web/generated/M16-GAP-00279.py", "sha256": "f6ea8cdec792b31ca1c7008046062b426e2c639bda03c490982beebc647b3536"}, + "desktopChecker": {"path": "tools/web/check-action-asset-mark-desktop.py", "sha256": "03605b412d6abadb89a2acbe7f34abc3f56b47569b1857a51cc57ef9f1569ac0"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "fd3d7ccd837b92b1087ea5f35da6777d094bac1f10dcfa4670c8ab133f018b04"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "050abd03517a7e826facadcfa241985c410865d46141997a31a97529da47cb1b"}, + "sceneIrProtocol": {"path": "web/protocol/scene-ir.ts", "sha256": "fbf15c996758dc9f2dab934ba7bb1252705453fe2b57f73a84cb37bfafa8a3b8"}, + "nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "269a4bbff670e0cbc8c2fd6cc3eabfadc03ba50929b30c8bd3695d958f399169"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "269a4bbff670e0cbc8c2fd6cc3eabfadc03ba50929b30c8bd3695d958f399169"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00279/asset-mark-desktop-report.json", "sha256": "907c40ffa8d36efe882300b5261ca7ef459b8420928c3c52a8a1a52d2c97fdfc"}, + "webReport": {"path": "tests/golden/M16-GAP-00279/asset-mark-local-exact-report.json", "sha256": "089816cd63bd18eecf95ebbc0b6e363e6e452db6b15c4d5ce4e6ba702d364fc1"}, + "status": {"path": "docs/status/M16-GAP-00279.md", "sha256": "002721d45174316fdef73861acf389f130f5c10bc37ad398edb4fa1e73ad1ad0"}, + "taskContext": {"path": "tests/golden/M16-GAP-00279/task-context.json", "sha256": "402cd9054d04c0e13fe2f9fa18271f46c3cecdb02e89ae4062f44643131513de"} + }, + "nextTask": "M16-GAP-00280" +} diff --git a/tests/golden/M16-GAP-00279/task-context.json b/tests/golden/M16-GAP-00279/task-context.json new file mode 100644 index 00000000..65b7686a --- /dev/null +++ b/tests/golden/M16-GAP-00279/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00279", + "parentTask": "M16-GAP-00278", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:asset.mark data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:asset.mark", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00279.py -- tests/files/web/generated/M16-GAP-00279-operator-asset.mark.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00279", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00279" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00279.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1590, + "contextRemainingTokens": 397 + }, + "source": { + "bytes": 8314, + "tokens": 2079 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00279.py", + "bytes": 1153, + "tokens": 289 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00279-operator-asset.mark.blend", + "bytes": 86527, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 242091, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 842156, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00279/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00279.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00279/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1153, + "tokens": 289 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00280", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00279.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00278/manifest.json", + "parentStatus": "docs/status/M16-GAP-00278.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00279.md", + "tests/golden/M16-GAP-00278/manifest.json", + "docs/status/M16-GAP-00278.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00278", + "parentTask": "M16-GAP-00277", + "status": "done", + "nextTask": "M16-GAP-00279", + "artifactCount": 16 + }, + "statusSummary": [ + "# M16-GAP-00278 Status", + "status: done", + "task: asset.library_reload_listing operator LOCAL_EXACT slice", + "updated: 2026-08-24 America/New_York", + "scope:", + "- The fixture links one object from external `WebGapAssetLibraryReloadListing.blend`.", + " Blender desktop observes the non-remote-library boundary as `poll=false`, records", + " `CANCELLED` for `ASSET_OT_library_reload_listing`, and confirms no Main mutation." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1739, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 435 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00279.md", + "bytes": 1739, + "lines": 38, + "tokens": 435 + }, + { + "path": "tests/golden/M16-GAP-00278/manifest.json", + "bytes": 2888, + "lines": 30, + "tokens": 722 + }, + { + "path": "docs/status/M16-GAP-00278.md", + "bytes": 1192, + "lines": 28, + "tokens": 298 + } + ], + "sourceTokens": 2079, + "evidenceFiles": 1, + "evidenceBytes": 1153, + "evidenceTokens": 289, + "totalTokens": 2368, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3392, + "serializedContextTokens": 747, + "withinBudget": true + } +} diff --git a/tests/golden/M16-GAP-00280/asset-mark-single-desktop-report.json b/tests/golden/M16-GAP-00280/asset-mark-single-desktop-report.json new file mode 100644 index 00000000..fb31562f --- /dev/null +++ b/tests/golden/M16-GAP-00280/asset-mark-single-desktop-report.json @@ -0,0 +1,30 @@ +{ + "after": { + "assetMarked": true, + "author": "M16 Fixture", + "description": "Asset mark single operator fixture", + "name": "WebGapAssetMarkSingleObject", + "tags": [ + "operator-mark-single" + ] + }, + "before": { + "assetMarked": true, + "author": "M16 Fixture", + "description": "Asset mark single operator fixture", + "name": "WebGapAssetMarkSingleObject", + "tags": [ + "operator-mark-single" + ] + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00280-operator-asset.mark_single.blend", + "fixtureSha256": "4e22282735f42eae9344980eedeab2ef458e95d916ab287388555006d5b46097", + "mainMutation": "NONE", + "operation": "ASSET_MARK_SINGLE_DESKTOP", + "operatorStatus": "CANCELLED", + "poll": false, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00280" +} diff --git a/tests/golden/M16-GAP-00280/asset-mark-single-local-exact-report.json b/tests/golden/M16-GAP-00280/asset-mark-single-local-exact-report.json new file mode 100644 index 00000000..a631bfd2 --- /dev/null +++ b/tests/golden/M16-GAP-00280/asset-mark-single-local-exact-report.json @@ -0,0 +1,38 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00280", + "operation": "ASSET_MARK_SINGLE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00280-operator-asset.mark_single.blend", + "sha256": "4e22282735f42eae9344980eedeab2ef458e95d916ab287388555006d5b46097" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00280/asset-mark-single-desktop-report.json", + "poll": false, + "operatorStatus": "CANCELLED", + "mainMutation": "NONE" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapAssetMarkSingleObject", + "assetData": { + "activeTag": 0, + "author": "M16 Fixture", + "catalogSimpleName": "", + "copyright": "", + "description": "Asset mark single operator fixture", + "license": "", + "marked": true, + "preferredImportMethod": 1, + "tags": [ + "operator-mark-single" + ] + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00281" +} diff --git a/tests/golden/M16-GAP-00280/manifest.json b/tests/golden/M16-GAP-00280/manifest.json new file mode 100644 index 00000000..9756fee2 --- /dev/null +++ b/tests/golden/M16-GAP-00280/manifest.json @@ -0,0 +1,29 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00280", + "parentTask": "M16-GAP-00279", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ASSET_MARK_SINGLE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00279/manifest.json", "sha256": "ff4213944c22081966b0da4f70b1c4a798579dc2b2b4aa2080b80e8c4925315e"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00280-operator-asset.mark_single.blend", "sha256": "4e22282735f42eae9344980eedeab2ef458e95d916ab287388555006d5b46097"}, + "generator": {"path": "tools/web/generated/M16-GAP-00280.py", "sha256": "7c1cbe66cc2ebbb695afe4d4831c4e796729fa2de7de9b364c048a4fe17da50a"}, + "desktopChecker": {"path": "tools/web/check-action-asset-mark-single-desktop.py", "sha256": "c5e05c3d07474473a4ac0e824ee6b524443cc82343136e70bfcfae015d9ee9ba"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "ed774c01101eaf1739952017b6a0a5aa62bd26a9585e944f099f99ec9dbfd218"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "050abd03517a7e826facadcfa241985c410865d46141997a31a97529da47cb1b"}, + "sceneIrProtocol": {"path": "web/protocol/scene-ir.ts", "sha256": "fbf15c996758dc9f2dab934ba7bb1252705453fe2b57f73a84cb37bfafa8a3b8"}, + "nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "269a4bbff670e0cbc8c2fd6cc3eabfadc03ba50929b30c8bd3695d958f399169"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "269a4bbff670e0cbc8c2fd6cc3eabfadc03ba50929b30c8bd3695d958f399169"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00280/asset-mark-single-desktop-report.json", "sha256": "cee452d111427d339f27a92dfeb11086d4da184bc8616cb5b35bf5aa96ff9aad"}, + "webReport": {"path": "tests/golden/M16-GAP-00280/asset-mark-single-local-exact-report.json", "sha256": "cb81eba35e79e9d30e79311d60e34b43183b5dc98775ef98294d2848390afb6c"}, + "status": {"path": "docs/status/M16-GAP-00280.md", "sha256": "6006277684f975fdd96dbe788a49a66865eb56f9f8806702ce5b28fb6b5f6e7f"}, + "taskContext": {"path": "tests/golden/M16-GAP-00280/task-context.json", "sha256": "2cb4a5c83539e7fbaca6f21a751a213403f4047bc3ead43c3bd37c0d506c0e13"} + }, + "nextTask": "M16-GAP-00281" +} diff --git a/tests/golden/M16-GAP-00280/task-context.json b/tests/golden/M16-GAP-00280/task-context.json new file mode 100644 index 00000000..99b37b54 --- /dev/null +++ b/tests/golden/M16-GAP-00280/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00280", + "parentTask": "M16-GAP-00279", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:asset.mark_single data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:asset.mark_single", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00280.py -- tests/files/web/generated/M16-GAP-00280-operator-asset.mark_single.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00280", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00280" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00280.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1683, + "contextRemainingTokens": 419 + }, + "source": { + "bytes": 8221, + "tokens": 2057 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00280.py", + "bytes": 1109, + "tokens": 278 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00280-operator-asset.mark_single.blend", + "bytes": 86535, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 242091, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 845493, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00280/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00280.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00280/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1109, + "tokens": 278 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00281", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00280.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00279/manifest.json", + "parentStatus": "docs/status/M16-GAP-00279.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00280.md", + "tests/golden/M16-GAP-00279/manifest.json", + "docs/status/M16-GAP-00279.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00279", + "parentTask": "M16-GAP-00278", + "status": "done", + "nextTask": "M16-GAP-00280", + "artifactCount": 16 + }, + "statusSummary": [ + "# M16-GAP-00279 Status", + "status: done", + "task: asset.mark operator LOCAL_EXACT slice", + "updated: 2026-08-24 America/New_York", + "scope:", + "- The minimal fixture marks `WebGapAssetMarkObject` as an asset and persists the", + " author, description, and `operator-mark` tag. Blender desktop observes the", + " missing Asset Browser/editor context as `poll=false`, records `CANCELLED` for" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1774, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 444 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00280.md", + "bytes": 1774, + "lines": 38, + "tokens": 444 + }, + { + "path": "tests/golden/M16-GAP-00279/manifest.json", + "bytes": 2761, + "lines": 30, + "tokens": 691 + }, + { + "path": "docs/status/M16-GAP-00279.md", + "bytes": 1191, + "lines": 28, + "tokens": 298 + } + ], + "sourceTokens": 2057, + "evidenceFiles": 1, + "evidenceBytes": 1109, + "evidenceTokens": 278, + "totalTokens": 2335, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3359, + "serializedContextTokens": 752, + "withinBudget": true + } +} diff --git a/tests/golden/M16-GAP-00281/manifest.json b/tests/golden/M16-GAP-00281/manifest.json new file mode 100644 index 00000000..1442db0c --- /dev/null +++ b/tests/golden/M16-GAP-00281/manifest.json @@ -0,0 +1,30 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00281", + "parentTask": "M16-GAP-00280", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ASSET_OPEN_CONTAINING_BLEND_FILE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00280/manifest.json", "sha256": "2cb4a5c83539e7fbaca6f21a751a213403f4047bc3ead43c3bd37c0d506c0e13"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00281-operator-asset.open_containing_blend_file.blend", "sha256": "97a440671019043e15e20883e308429220012a66bbdce138492e44a3d19b2572"}, + "librarySource": {"path": "tests/files/web/generated/WebGapOpenContaining.blend", "sha256": "0bf2f0d5dda3e7f4e341973f7d394ce7b096f7bd142915d67c5267b6ff55b223"}, + "generator": {"path": "tools/web/generated/M16-GAP-00281.py", "sha256": "5f3331695d69921031fe291d6ccd900cdce2e64b62d2e9b0fd616b8aca18451b"}, + "desktopChecker": {"path": "tools/web/check-action-open-containing-blend-file-desktop.py", "sha256": "5df4d4476f84ed68ae320b529e9f4bee47007948dee7aeecd6bf360b22dc0953"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "d5d9eaca335df87a9447f20bbd20e0c3b76b7087e4d74a8b9bf1ff10cb57ca25"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "050abd03517a7e826facadcfa241985c410865d46141997a31a97529da47cb1b"}, + "sceneIrProtocol": {"path": "web/protocol/scene-ir.ts", "sha256": "fbf15c996758dc9f2dab934ba7bb1252705453fe2b57f73a84cb37bfafa8a3b8"}, + "nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "269a4bbff670e0cbc8c2fd6cc3eabfadc03ba50929b30c8bd3695d958f399169"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "269a4bbff670e0cbc8c2fd6cc3eabfadc03ba50929b30c8bd3695d958f399169"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00281/open-containing-desktop-report.json", "sha256": "08d6ea11250bc645acf28b6e452a91da62c960d549a41a01e70f5f9c7c2d34a2"}, + "webReport": {"path": "tests/golden/M16-GAP-00281/open-containing-local-exact-report.json", "sha256": "56ad229dbaac780579308f13ee8c1aa049a2ec16aae8a0c9fa777f5e7274aad8"}, + "status": {"path": "docs/status/M16-GAP-00281.md", "sha256": "6d798d81632a92844b8a5e42da5afb2b72d7321070e401a57583324fd081d691"}, + "taskContext": {"path": "tests/golden/M16-GAP-00281/task-context.json", "sha256": "f44fdc0cf3a99877675286268bca920ed8c1ac8fa515bce5a7dfd0f3608f59ed"} + }, + "nextTask": "M16-GAP-00282" +} diff --git a/tests/golden/M16-GAP-00281/open-containing-desktop-report.json b/tests/golden/M16-GAP-00281/open-containing-desktop-report.json new file mode 100644 index 00000000..fbe414ae --- /dev/null +++ b/tests/golden/M16-GAP-00281/open-containing-desktop-report.json @@ -0,0 +1,22 @@ +{ + "after": { + "filepath": "//WebGapOpenContaining.blend", + "name": "WebGapOpenContaining.blend", + "packed": false + }, + "before": { + "filepath": "//WebGapOpenContaining.blend", + "name": "WebGapOpenContaining.blend", + "packed": false + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00281-operator-asset.open_containing_blend_file.blend", + "fixtureSha256": "97a440671019043e15e20883e308429220012a66bbdce138492e44a3d19b2572", + "mainMutation": "NONE", + "operation": "ASSET_OPEN_CONTAINING_BLEND_FILE_DESKTOP", + "operatorStatus": "CANCELLED", + "poll": false, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00281" +} diff --git a/tests/golden/M16-GAP-00281/open-containing-local-exact-report.json b/tests/golden/M16-GAP-00281/open-containing-local-exact-report.json new file mode 100644 index 00000000..c4968cd0 --- /dev/null +++ b/tests/golden/M16-GAP-00281/open-containing-local-exact-report.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00281", + "operation": "ASSET_OPEN_CONTAINING_BLEND_FILE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00281-operator-asset.open_containing_blend_file.blend", + "sha256": "97a440671019043e15e20883e308429220012a66bbdce138492e44a3d19b2572" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00281/open-containing-desktop-report.json", + "poll": false, + "operatorStatus": "CANCELLED", + "mainMutation": "NONE" + }, + "wasm": { + "status": "EXACT", + "libraryId": "library:WebGapOpenContaining.blend", + "sourcePath": "//WebGapOpenContaining.blend", + "libraryStatus": "EXTERNAL_REQUIRED", + "dependencyIds": [] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00282" +} diff --git a/tests/golden/M16-GAP-00281/task-context.json b/tests/golden/M16-GAP-00281/task-context.json new file mode 100644 index 00000000..ed467f15 --- /dev/null +++ b/tests/golden/M16-GAP-00281/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00281", + "parentTask": "M16-GAP-00280", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:asset.open_containing_blend_file data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:asset.open_containing_blend_file", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00281.py -- tests/files/web/generated/M16-GAP-00281-operator-asset.open_containing_blend_file.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00281", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00281" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00281.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1630, + "contextRemainingTokens": 406 + }, + "source": { + "bytes": 8274, + "tokens": 2070 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00281.py", + "bytes": 1592, + "tokens": 398 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00281-operator-asset.open_containing_blend_file.blend", + "bytes": 85917, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 242091, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 849148, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00281/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00281.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00281/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1592, + "tokens": 398 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00282", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00281.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00280/manifest.json", + "parentStatus": "docs/status/M16-GAP-00280.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00281.md", + "tests/golden/M16-GAP-00280/manifest.json", + "docs/status/M16-GAP-00280.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00280", + "parentTask": "M16-GAP-00279", + "status": "done", + "nextTask": "M16-GAP-00281", + "artifactCount": 16 + }, + "statusSummary": [ + "# M16-GAP-00280 Status", + "status: done", + "task: asset.mark_single operator LOCAL_EXACT slice", + "updated: 2026-08-24 America/New_York", + "scope:", + "- The minimal fixture contains one marked object, `WebGapAssetMarkSingleObject`,", + " with stable author, description, and `operator-mark-single` tag metadata.", + " Blender desktop observes `asset.mark_single` as `poll=false`, records" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1849, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 463 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00281.md", + "bytes": 1849, + "lines": 38, + "tokens": 463 + }, + { + "path": "tests/golden/M16-GAP-00280/manifest.json", + "bytes": 2796, + "lines": 30, + "tokens": 699 + }, + { + "path": "docs/status/M16-GAP-00280.md", + "bytes": 1134, + "lines": 28, + "tokens": 284 + } + ], + "sourceTokens": 2070, + "evidenceFiles": 1, + "evidenceBytes": 1592, + "evidenceTokens": 398, + "totalTokens": 2468, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3492, + "serializedContextTokens": 763, + "withinBudget": true + } +} diff --git a/tests/golden/WBV2-BASELINE/manifest.json b/tests/golden/WBV2-BASELINE/manifest.json new file mode 100644 index 00000000..35cd28cc --- /dev/null +++ b/tests/golden/WBV2-BASELINE/manifest.json @@ -0,0 +1,13 @@ +{ + "schemaVersion": 1, + "task": "WBV2-BASELINE", + "parentTask": "M16-GAP-00281", + "enablingTask": true, + "parityStateChange": false, + "runtime": "EXECUTION_CONTROL_PLANE", + "operation": "ACTIVATE_CAPABILITY_QUEUE_WITH_LEGACY_COVERAGE_CHECKPOINT", + "status": "done", + "artifacts": {}, + "legacyCoverageCheckpoint": "M16-GAP-00282", + "nextTask": "WBV2-P0-001" +} diff --git a/tests/golden/WBV2-P0-001/control-plane-report.json b/tests/golden/WBV2-P0-001/control-plane-report.json new file mode 100644 index 00000000..6df306b5 --- /dev/null +++ b/tests/golden/WBV2-P0-001/control-plane-report.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "WBV2-P0-001", + "operation": "CAPABILITY_QUEUE_RECONCILIATION", + "status": "PASS", + "executionPointer": { + "task": "WBV2-P0-001", + "parentManifest": "tests/golden/WBV2-BASELINE/manifest.json", + "parentNextTask": "WBV2-P0-001", + "nextTask": "WBV2-P0-002" + }, + "legacyCoverage": { + "task": "M16-GAP-00282", + "parentManifest": "tests/golden/M16-GAP-00281/manifest.json", + "state": "active", + "meaning": "regression coverage only; not a production capability task" + }, + "correctiveCheckpoint": { + "task": "C6-003", + "handoff": "tests/golden/corrective/C6-003/handoff.json", + "queueMutation": true, + "meaning": "historical migration evidence" + }, + "efficiency": { + "legacyGapTasks": 6900, + "legacyCompleted": 281, + "capabilityClusters": 3, + "mappedLegacyGaps": 9, + "averageGapsPerCapability": 3, + "parallelism": "read-only inventory/schema/checkers may parallelize; Main and generated pointers remain serialized" + }, + "commands": [ + {"command": "node tools/web/check-web-parity-v2-plan.mjs", "exitCode": 0}, + {"command": "node tools/web/check-corrective-plan.mjs", "exitCode": 0}, + {"command": "node tools/web/check-execution-control-plane.mjs", "exitCode": 0}, + {"command": "node tools/web/check-execution-health.mjs", "exitCode": 0}, + {"command": "npm --prefix web run test:task-context", "exitCode": 0}, + {"command": "npm --prefix web run test:context-governance", "exitCode": 0}, + {"command": "npm --prefix web run test:execution-control-plane", "exitCode": 0}, + {"command": "git diff --check", "exitCode": 0} + ], + "failurePolicy": "hash drift, malformed plan, duplicate ready task, missing parent or context budget failure keeps the current task in_progress/blocked" +} diff --git a/tests/golden/WBV2-P0-001/manifest.json b/tests/golden/WBV2-P0-001/manifest.json new file mode 100644 index 00000000..696e339f --- /dev/null +++ b/tests/golden/WBV2-P0-001/manifest.json @@ -0,0 +1,19 @@ +{ + "schemaVersion": 1, + "task": "WBV2-P0-001", + "parentTask": "WBV2-BASELINE", + "enablingTask": true, + "parityStateChange": false, + "runtime": "EXECUTION_CONTROL_PLANE", + "operation": "CAPABILITY_QUEUE_RECONCILIATION", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/WBV2-BASELINE/manifest.json", "sha256": "181490cca1aaff90559206d8e4869e4d87c8b0e9e1907dcfc996e95efb328ccb"}, + "controlPlaneReport": {"path": "tests/golden/WBV2-P0-001/control-plane-report.json", "sha256": "423651d3534b055a099bb08a882270383b75c344ae737f16a82cc15f90e0e3c0"}, + "status": {"path": "docs/status/WBV2-P0-001.md", "sha256": "14bbb5fcee8a2b8a8904ecdda1dc0cfb4821d18095a8f3ecdc9b45d7b0194f89"}, + "taskContext": {"path": "tests/golden/WBV2-P0-001/task-context.json", "sha256": "c587edb6172b3d8cb8d5853ae4a89b15f4b0494e0bf21fc67a7bfca2b9e3e921"}, + "controlPlaneChecker": {"path": "tools/web/check-execution-control-plane.mjs", "sha256": "77a64d6106505ac13a593870d73577cf6a34f28308557114aa2862e51a21076e"}, + "contextRunner": {"path": "tools/web/task-context-lib.mjs", "sha256": "eb6fabeb6faac9c3b916326e58db3b5b4b33b30288198caf528b078263b9d606"} + }, + "nextTask": "WBV2-P0-002" +} diff --git a/tests/golden/WBV2-P0-001/task-context.json b/tests/golden/WBV2-P0-001/task-context.json new file mode 100644 index 00000000..1e45ec54 --- /dev/null +++ b/tests/golden/WBV2-P0-001/task-context.json @@ -0,0 +1,179 @@ +{ + "schemaVersion": 1, + "task": "WBV2-P0-001", + "parentTask": "WBV2-BASELINE", + "status": "in_progress", + "goal": "冻结 V1 与 Blender 5.2 full-parity 的业务边界,建立 capability production lane", + "scope": { + "gap": "workflow:execution-control-plane", + "ownerFamily": "PROGRAM", + "implementationClass": "LOCAL_BOUNDED" + }, + "commands": [ + "node tools/web/check-web-parity-v2-plan.mjs", + "node tools/web/check-corrective-plan.mjs", + "node tools/web/check-context-governance.mjs", + "npm --prefix web run test:execution-control-plane" + ], + "inputPaths": [ + "docs/BLENDER_WEB_EXECUTION_CONTROL_PLANE.md" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 4700, + "contextRemainingTokens": 1173 + }, + "source": { + "bytes": 5204, + "tokens": 1303 + }, + "selected": [ + { + "path": "docs/BLENDER_WEB_EXECUTION_CONTROL_PLANE.md", + "bytes": 3634, + "tokens": 909 + } + ], + "excluded": [ + { + "path": "docs/BLENDER_WEB_PARITY_EXECUTION_PLAN_V2.md", + "bytes": 11045, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "docs/BLENDER_WEB_PARITY_TASK_PLAN_V2.json", + "bytes": 23705, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 0, + "reason": "ALREADY_IN_CONTEXT" + }, + { + "path": "tests/golden/corrective/C6-003/handoff.json", + "bytes": 6516, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "bytes": 4061, + "reason": "CONTEXT_REMAINING_SPACE" + } + ], + "totals": { + "files": 1, + "bytes": 3634, + "tokens": 909 + } + }, + "exitCriteria": [ + "corrective owner-review status is explicit", + "legacy parent pointer is unchanged", + "plan has one activation gate" + ], + "nextTask": "WBV2-P0-002", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/WBV2-P0-001.md", + "taskIndex": "tests/golden/WBV2/task-index.json", + "parentManifest": "tests/golden/WBV2-BASELINE/manifest.json", + "parentStatus": "docs/status/WBV2-BASELINE.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/WBV2-P0-001.md", + "tests/golden/WBV2-BASELINE/manifest.json", + "docs/status/WBV2-BASELINE.md" + ], + "machineOnly": [ + "tests/golden/WBV2/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "WBV2-BASELINE", + "parentTask": "M16-GAP-00281", + "status": "done", + "nextTask": "WBV2-P0-001", + "artifactCount": 0 + }, + "statusSummary": [ + "# WBV2 baseline status", + "status: done", + "task: capability queue transition baseline", + "updated: 2026-08-24 America/New_York", + "The WBV2 production lane starts without rewriting the immutable M16 manifests. The", + "legacy coverage checkpoint remains `M16-GAP-00282`, whose parent manifest is", + "`tests/golden/M16-GAP-00281/manifest.json`. Corrective C0-C6 evidence remains historical.", + "nextTask: `WBV2-P0-001`" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1639, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 48, + "taskTokens": 410 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2802, + "lines": 51, + "tokens": 701 + }, + { + "path": "docs/tasks/WBV2-P0-001.md", + "bytes": 1639, + "lines": 48, + "tokens": 410 + }, + { + "path": "tests/golden/WBV2-BASELINE/manifest.json", + "bytes": 370, + "lines": 14, + "tokens": 93 + }, + { + "path": "docs/status/WBV2-BASELINE.md", + "bytes": 393, + "lines": 12, + "tokens": 99 + } + ], + "sourceTokens": 1303, + "evidenceFiles": 1, + "evidenceBytes": 3634, + "evidenceTokens": 909, + "totalTokens": 2212, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3236, + "serializedContextTokens": 688, + "withinBudget": true + } +} diff --git a/tests/golden/WBV2/task-catalog.jsonl b/tests/golden/WBV2/task-catalog.jsonl new file mode 100644 index 00000000..abc20043 --- /dev/null +++ b/tests/golden/WBV2/task-catalog.jsonl @@ -0,0 +1,31 @@ +{"id":"WBV2-P0-001","gapId":"workflow:reconcile_scope_and_checkpoints","ownerFamily":"PROGRAM","sourceTask":"P0","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["corrective owner-review status is explicit","legacy parent pointer is unchanged","plan has one activation gate"]} +{"id":"WBV2-P0-002","gapId":"workflow:generate_blender52_inventory_and_parity_map","ownerFamily":"PARITY","sourceTask":"P0","state":"active","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["unknown entries are classified","inventory is deterministic","no entry claims feature parity without evidence"]} +{"id":"WBV2-P0-003","gapId":"workflow:freeze_capability_error_budget_contract","ownerFamily":"PROTOCOL","sourceTask":"P0","state":"pending","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["unsupported input fails closed","schema hashes are stable","migration policy preserves unknown data"]} +{"id":"WBV2-P1-001","gapId":"workflow:stabilize_runtime_variants_and_source_receipts","ownerFamily":"RUNTIME","sourceTask":"P1","state":"pending","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["variant fallback is deterministic","source/build hash is verified","one engine session has one generation"]} +{"id":"WBV2-P1-002","gapId":"workflow:unify_sceneir_stable_ids_and_binary_deltas","ownerFamily":"MAIN","sourceTask":"P1","state":"pending","targetImplementationClass":"LOCAL_EXACT","exitCriteria":["IDs survive save/reopen","malformed chunk is rejected","desktop and WASM canonical hashes match"]} +{"id":"WBV2-P1-003","gapId":"workflow:unify_main_transaction_history_and_save","ownerFamily":"MAIN","sourceTask":"P1","state":"pending","targetImplementationClass":"LOCAL_EXACT","exitCriteria":["failed/no-op commands add no history","stale revision cannot commit","reopen state is byte/hash stable"]} +{"id":"WBV2-P1-004","gapId":"workflow:harden_worker_cancel_restart_and_dispose","ownerFamily":"RUNTIME","sourceTask":"P1","state":"pending","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["cancel never publishes result","generation mismatch is rejected","CPU/WASM/GPU owners return to budget"]} +{"id":"WBV2-P1-005","gapId":"workflow:harden_opfs_indexeddb_journal_recovery","ownerFamily":"STORAGE","sourceTask":"P1","state":"pending","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["interrupted commit leaves old project usable","hash mismatch quarantines payload","small project recovers after restart"]} +{"id":"WBV2-P2-001","gapId":"EDITOR.OPEN_SCENE","ownerFamily":"EDITOR","sourceTask":"P2","state":"pending","targetImplementationClass":"LOCAL_EXACT","exitCriteria":["stable IDs and selection revision match","missing data is structured","reopen preserves context"]} +{"id":"WBV2-P2-002","gapId":"OBJECT.TRANSFORM_HIERARCHY","ownerFamily":"EDITOR","sourceTask":"P2","state":"pending","targetImplementationClass":"LOCAL_EXACT","exitCriteria":["world matrix parity","cycle/locked/library edits reject","undo/redo/save/reopen stable"]} +{"id":"WBV2-P2-003","gapId":"MESH.EDIT_CORE","ownerFamily":"MESH","sourceTask":"P2","state":"pending","targetImplementationClass":"LOCAL_EXACT","exitCriteria":["topology/attributes match","invalid selection and budget fail closed","single transaction and reopen stable"]} +{"id":"WBV2-P2-004","gapId":"VIEWPORT.MAIN_OFFSCREEN","ownerFamily":"VIEWPORT","sourceTask":"P2","state":"pending","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["both paths have nonblank pixels","selection/camera revision is shared","device loss releases resources"]} +{"id":"WBV2-P2-005","gapId":"WORKFLOW.P0_USER_LOOP","ownerFamily":"INTEGRATION","sourceTask":"P2","state":"pending","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["Main revision and exported asset are bound","fault/cancel leaves old state","Chromium production path passes"]} +{"id":"WBV2-P3-001","gapId":"MATERIAL.PBR_UV","ownerFamily":"MATERIAL","sourceTask":"P3","state":"pending","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["desktop/WASM node fields match","unsupported node retained/blocked","packed asset survives reopen"]} +{"id":"WBV2-P3-002","gapId":"ANIMATION.TRS_ACTION","ownerFamily":"ANIMATION","sourceTask":"P3","state":"pending","targetImplementationClass":"LOCAL_EXACT","exitCriteria":["sampled values and handles match","stale frame result rejected","undo/save/reopen stable"]} +{"id":"WBV2-P3-003","gapId":"RIG.POSE_SKIN","ownerFamily":"RIG","sourceTask":"P3","state":"pending","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["pose matrices and weights match","unsupported constraint is explicit","save/reopen and small recovery pass"]} +{"id":"WBV2-P3-004","gapId":"IO.GLB_ROUNDTRIP","ownerFamily":"IO","sourceTask":"P3","state":"pending","targetImplementationClass":"LOCAL_EXACT","exitCriteria":["roundtrip canonical graph matches","sparse/external URI/budget negatives reject","no silent loss"]} +{"id":"WBV2-P3-005","gapId":"ASSET.LIBRARY_OPERATIONS","ownerFamily":"ASSET","sourceTask":"P3","state":"pending","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["source/hash/owner identity preserved","linked mutation blocked","stale generation and missing source fail closed"]} +{"id":"WBV2-P4-001","gapId":"MODIFIER.DECLARED_SLICES","ownerFamily":"MODIFIER","sourceTask":"P4","state":"pending","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["desktop/evaluated Main match","unknown modifier retained and blocked","apply/undo/save/reopen stable"]} +{"id":"WBV2-P4-002","gapId":"NODES.ALLOWLIST","ownerFamily":"NODES","sourceTask":"P4","state":"pending","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["node/socket/link/default parity","budget and unknown-node block before commit","compile failure rolls back"]} +{"id":"WBV2-P4-003","gapId":"SCULPT.NONMESH.PAINT_BOUNDED","ownerFamily":"SCULPT","sourceTask":"P4","state":"pending","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["Main commit is atomic","unsupported brush/solver returns stable code","GPU/OOM/restart recovery passes"]} +{"id":"WBV2-P4-004","gapId":"SIMULATION.CACHE_LIFECYCLE","ownerFamily":"SIMULATION","sourceTask":"P4","state":"pending","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["stale/corrupt cache never publishes","small cache recovers after restart","budget release is observable"]} +{"id":"WBV2-P5-001","gapId":"RENDER.ROUTING","ownerFamily":"RENDER","sourceTask":"P5","state":"pending","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["source/settings/build identity bound","unsupported route cannot pretend local success","cancel/device loss releases resources"]} +{"id":"WBV2-P5-002","gapId":"MEDIA.BOUNDED_WORKFLOW","ownerFamily":"MEDIA","sourceTask":"P5","state":"pending","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["seek/decode revision ordering","cancel/timeout does not publish","quota/OOM/restart leaves project valid"]} +{"id":"WBV2-P5-003","gapId":"SERVER.JOB_BINDING","ownerFamily":"SERVER","sourceTask":"P5","state":"pending","targetImplementationClass":"SERVER_EXACT","exitCriteria":["duplicate request is idempotent","stale result cannot bind","timeout/cancel/OOM produces no READY output"]} +{"id":"WBV2-P6-001","gapId":"SECURITY.SCRIPTING","ownerFamily":"SECURITY","sourceTask":"P6","state":"pending","targetImplementationClass":"EXCLUDED","exitCriteria":["autorun/network/add-on defaults deny","sandbox cancellation/dispose works","no secret or filesystem escape"]} +{"id":"WBV2-P6-002","gapId":"workflow:performance_fault_and_recovery_matrix","ownerFamily":"RELIABILITY","sourceTask":"P6","state":"pending","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["100k/1M/10M thresholds recorded","fault leaves old revision usable","all owned resources return to budget"]} +{"id":"WBV2-P6-003","gapId":"workflow:offline_ci_sbom_and_rollback_release","ownerFamily":"RELEASE","sourceTask":"P6","state":"pending","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["quick/Chromium/release lanes pass","artifact hashes reproduce","upgrade/rollback and known limitations are tested"]} +{"id":"WBV2-P7-001","gapId":"workflow:cluster_full_blender_gap_inventory","ownerFamily":"PARITY","sourceTask":"P7","state":"pending","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["each gap has stable ID and owner","negative-only/unsupported is not positive parity","clusters are deterministic"]} +{"id":"WBV2-P7-002","gapId":"workflow:generate_atomic_family_gap_queue","ownerFamily":"PROGRAM","sourceTask":"P7","state":"pending","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["one active ready task","no guessed successor","each card fits context budget"]} +{"id":"WBV2-P7-003","gapId":"workflow:full_parity_candidate_release_gate","ownerFamily":"RELEASE","sourceTask":"P7","state":"pending","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["all claims bind to evidence","blocked/excluded/server classes remain explicit","queue and protected hashes pass"]} diff --git a/tests/golden/WBV2/task-index.json b/tests/golden/WBV2/task-index.json new file mode 100644 index 00000000..1d376785 --- /dev/null +++ b/tests/golden/WBV2/task-index.json @@ -0,0 +1 @@ +{"schemaVersion":1,"operation":"BLENDER_WEB_CAPABILITY_TASK_INDEX","source":{"path":"docs/BLENDER_WEB_PARITY_TASK_PLAN_V2.json","sha256":"8a08f2e916de56c112e5ce27f51575baaeba03d783fcb298b59bfd4d16c8e02c"},"catalog":{"path":"tests/golden/WBV2/task-catalog.jsonl","sha256":"b717a08a8128d2ad44fb11906d5aa48a86884f558ad30c8365bd46a54dfacd50"},"taskCount":31,"activeTask":"WBV2-P0-002","entries":{"WBV2-P0-001":{"line":0,"offset":0,"length":308,"previous":null,"next":"WBV2-P0-002"},"WBV2-P0-002":{"line":1,"offset":308,"length":315,"previous":"WBV2-P0-001","next":"WBV2-P0-003"},"WBV2-P0-003":{"line":2,"offset":623,"length":304,"previous":"WBV2-P0-002","next":"WBV2-P1-001"},"WBV2-P1-001":{"line":3,"offset":927,"length":316,"previous":"WBV2-P0-003","next":"WBV2-P1-002"},"WBV2-P1-002":{"line":4,"offset":1243,"length":297,"previous":"WBV2-P0-003","next":"WBV2-P1-003"},"WBV2-P1-003":{"line":5,"offset":1540,"length":301,"previous":"WBV2-P1-002","next":"WBV2-P1-004"},"WBV2-P1-004":{"line":6,"offset":1841,"length":307,"previous":"WBV2-P1-003","next":"WBV2-P1-005"},"WBV2-P1-005":{"line":7,"offset":2148,"length":322,"previous":"WBV2-P1-004","next":"WBV2-P2-001"},"WBV2-P2-001":{"line":8,"offset":2470,"length":265,"previous":"WBV2-P1-005","next":"WBV2-P2-002"},"WBV2-P2-002":{"line":9,"offset":2735,"length":265,"previous":"WBV2-P1-003","next":"WBV2-P2-003"},"WBV2-P2-003":{"line":10,"offset":3000,"length":272,"previous":"WBV2-P1-002","next":"WBV2-P2-004"},"WBV2-P2-004":{"line":11,"offset":3272,"length":282,"previous":"WBV2-P1-004","next":"WBV2-P2-005"},"WBV2-P2-005":{"line":12,"offset":3554,"length":289,"previous":"WBV2-P1-005","next":"WBV2-P3-001"},"WBV2-P3-001":{"line":13,"offset":3843,"length":269,"previous":"WBV2-P2-005","next":"WBV2-P3-002"},"WBV2-P3-002":{"line":14,"offset":4112,"length":264,"previous":"WBV2-P2-005","next":"WBV2-P3-003"},"WBV2-P3-003":{"line":15,"offset":4376,"length":271,"previous":"WBV2-P3-002","next":"WBV2-P3-004"},"WBV2-P3-004":{"line":16,"offset":4647,"length":261,"previous":"WBV2-P3-003","next":"WBV2-P3-005"},"WBV2-P3-005":{"line":17,"offset":4908,"length":290,"previous":"WBV2-P2-001","next":"WBV2-P4-001"},"WBV2-P4-001":{"line":18,"offset":5198,"length":281,"previous":"WBV2-P2-005","next":"WBV2-P4-002"},"WBV2-P4-002":{"line":19,"offset":5479,"length":275,"previous":"WBV2-P4-001","next":"WBV2-P4-003"},"WBV2-P4-003":{"line":20,"offset":5754,"length":285,"previous":"WBV2-P2-004","next":"WBV2-P4-004"},"WBV2-P4-004":{"line":21,"offset":6039,"length":288,"previous":"WBV2-P4-002","next":"WBV2-P5-001"},"WBV2-P5-001":{"line":22,"offset":6327,"length":294,"previous":"WBV2-P4-002","next":"WBV2-P5-002"},"WBV2-P5-002":{"line":23,"offset":6621,"length":280,"previous":"WBV2-P5-001","next":"WBV2-P5-003"},"WBV2-P5-003":{"line":24,"offset":6901,"length":276,"previous":"WBV2-P5-001","next":"WBV2-P6-001"},"WBV2-P6-001":{"line":25,"offset":7177,"length":276,"previous":"WBV2-P5-003","next":"WBV2-P6-002"},"WBV2-P6-002":{"line":26,"offset":7453,"length":311,"previous":"WBV2-P2-004","next":"WBV2-P6-003"},"WBV2-P6-003":{"line":27,"offset":7764,"length":314,"previous":"WBV2-P6-002","next":"WBV2-P7-001"},"WBV2-P7-001":{"line":28,"offset":8078,"length":310,"previous":"WBV2-P6-003","next":"WBV2-P7-002"},"WBV2-P7-002":{"line":29,"offset":8388,"length":273,"previous":"WBV2-P7-001","next":"WBV2-P7-003"},"WBV2-P7-003":{"line":30,"offset":8661,"length":310,"previous":"WBV2-P7-002","next":null}}} diff --git a/tests/golden/corrective/C0-001/baseline-second.json b/tests/golden/corrective/C0-001/baseline-second.json new file mode 100644 index 00000000..43f52d30 --- /dev/null +++ b/tests/golden/corrective/C0-001/baseline-second.json @@ -0,0 +1,34 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00274", + "queue": { + "currentTask": "M16-GAP-00274", + "parentManifest": "tests/golden/M16-GAP-00273/manifest.json", + "parentNextTask": "M16-GAP-00274" + }, + "generatedState": { + "catalogActiveTask": "M16-GAP-00274", + "catalogActiveIds": [ + "M16-GAP-00274" + ], + "planFirstTask": "M16-GAP-00274", + "planNextTask": "M15-03B", + "completionCount": 264, + "legacyEvidenceDirectoryCount": 274 + }, + "sourceHashes": { + "docs/EXECUTION_QUEUE.md": "eeaca50828c3feb3ed53d1869626a703d9e50fefd9c70d871cc6eec03fc84bcd", + "tests/golden/M16-GAP-00273/manifest.json": "3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1", + "docs/status/M16-GAP-00273.md": "5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8", + "tests/golden/M15-03A/completed-gap-tasks.json": "f9f4f1116b5975aa1b47fee15856f2029ec8f02161e432e9a24b846384cd1c5b", + "tests/golden/M15-03A/task-catalog.jsonl": "278d51b867d63a5975635b8fd108c9025668de0893576499a77bd3d571a0f14b", + "tests/golden/M15-03A/task-index.json": "9c79926a5a91b137b023a62f8a98d7c7421018846fdf658c9bea13ee5c5cbcea", + "tests/golden/M15-03A/next-task-plan.json": "2235d0d250d28e63ab1c9b0e956292560785cf340c612312b316be0ceb2463a9" + }, + "invariants": { + "queueMutationAllowed": false, + "parentPointerMatchesCurrent": true, + "exactlyOneCatalogActive": true, + "catalogActiveMatchesPlan": true + } +} diff --git a/tests/golden/corrective/C0-001/baseline.json b/tests/golden/corrective/C0-001/baseline.json new file mode 100644 index 00000000..43f52d30 --- /dev/null +++ b/tests/golden/corrective/C0-001/baseline.json @@ -0,0 +1,34 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00274", + "queue": { + "currentTask": "M16-GAP-00274", + "parentManifest": "tests/golden/M16-GAP-00273/manifest.json", + "parentNextTask": "M16-GAP-00274" + }, + "generatedState": { + "catalogActiveTask": "M16-GAP-00274", + "catalogActiveIds": [ + "M16-GAP-00274" + ], + "planFirstTask": "M16-GAP-00274", + "planNextTask": "M15-03B", + "completionCount": 264, + "legacyEvidenceDirectoryCount": 274 + }, + "sourceHashes": { + "docs/EXECUTION_QUEUE.md": "eeaca50828c3feb3ed53d1869626a703d9e50fefd9c70d871cc6eec03fc84bcd", + "tests/golden/M16-GAP-00273/manifest.json": "3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1", + "docs/status/M16-GAP-00273.md": "5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8", + "tests/golden/M15-03A/completed-gap-tasks.json": "f9f4f1116b5975aa1b47fee15856f2029ec8f02161e432e9a24b846384cd1c5b", + "tests/golden/M15-03A/task-catalog.jsonl": "278d51b867d63a5975635b8fd108c9025668de0893576499a77bd3d571a0f14b", + "tests/golden/M15-03A/task-index.json": "9c79926a5a91b137b023a62f8a98d7c7421018846fdf658c9bea13ee5c5cbcea", + "tests/golden/M15-03A/next-task-plan.json": "2235d0d250d28e63ab1c9b0e956292560785cf340c612312b316be0ceb2463a9" + }, + "invariants": { + "queueMutationAllowed": false, + "parentPointerMatchesCurrent": true, + "exactlyOneCatalogActive": true, + "catalogActiveMatchesPlan": true + } +} diff --git a/tests/golden/corrective/C0-001/handoff.json b/tests/golden/corrective/C0-001/handoff.json new file mode 100644 index 00000000..258fc52b --- /dev/null +++ b/tests/golden/corrective/C0-001/handoff.json @@ -0,0 +1,67 @@ +{ + "schemaVersion": 1, + "task": "C0-001", + "status": "done", + "gate": "G0", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C0-001", + "artifactCount": 11, + "artifacts": [ + { + "path": "tests/golden/corrective/C0-001/baseline-check.log", + "sha256": "5755e26c327a104784c3d0ce448cfad800951b4b03bd1a1b32f2afd59e64f611", + "bytes": 78 + }, + { + "path": "tests/golden/corrective/C0-001/baseline-second.json", + "sha256": "8f35198ac5f62ab78dcb7987dde2574e5cc835ab3a6470d25bc1a7143ab002f2", + "bytes": 1451 + }, + { + "path": "tests/golden/corrective/C0-001/baseline.json", + "sha256": "8f35198ac5f62ab78dcb7987dde2574e5cc835ab3a6470d25bc1a7143ab002f2", + "bytes": 1451 + }, + { + "path": "tests/golden/corrective/C0-001/check-task-context.log", + "sha256": "d878b0cb346102d780a0de68deeb14a36d9c2e7aec63f1010a3d6454e276563a", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C0-001/context-governance.log", + "sha256": "8b4a0add34d164d2e514192c430269e780f03f92697d77e494aa35825b5861f3", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C0-001/corrective-plan.log", + "sha256": "8d43d87f24c770dea5b56022f4ac010d6474e05ff2863c90035b741587a9f3d6", + "bytes": 88 + }, + { + "path": "tests/golden/corrective/C0-001/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C0-001/git-status.log", + "sha256": "841e05e8bc1fdeec6e7c1a546911c3b79e1e05acac035fe93b12429ba02097d1", + "bytes": 23222 + }, + { + "path": "tests/golden/corrective/C0-001/print-task-context.log", + "sha256": "f5fd8b4fbcd70b9ae9e9fc065c51f396b3571d51e1be0c419757624f87c364ce", + "bytes": 3040 + }, + { + "path": "tests/golden/corrective/C0-001/source-hashes-after.txt", + "sha256": "024cda0fbacc185a04acb8835488673c9962ee464edfe578f090fe9cf575b46b", + "bytes": 428 + }, + { + "path": "tests/golden/corrective/C0-001/source-hashes.txt", + "sha256": "c0e309fa9967f34e0ddb500cd5619ea50b97d9d0cb3ce6f6861c9d6e8e19d0e7", + "bytes": 720 + } + ], + "nextCorrectiveTask": "C0-002" +} diff --git a/tests/golden/corrective/C0-001/manifest.json b/tests/golden/corrective/C0-001/manifest.json new file mode 100644 index 00000000..258fc52b --- /dev/null +++ b/tests/golden/corrective/C0-001/manifest.json @@ -0,0 +1,67 @@ +{ + "schemaVersion": 1, + "task": "C0-001", + "status": "done", + "gate": "G0", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C0-001", + "artifactCount": 11, + "artifacts": [ + { + "path": "tests/golden/corrective/C0-001/baseline-check.log", + "sha256": "5755e26c327a104784c3d0ce448cfad800951b4b03bd1a1b32f2afd59e64f611", + "bytes": 78 + }, + { + "path": "tests/golden/corrective/C0-001/baseline-second.json", + "sha256": "8f35198ac5f62ab78dcb7987dde2574e5cc835ab3a6470d25bc1a7143ab002f2", + "bytes": 1451 + }, + { + "path": "tests/golden/corrective/C0-001/baseline.json", + "sha256": "8f35198ac5f62ab78dcb7987dde2574e5cc835ab3a6470d25bc1a7143ab002f2", + "bytes": 1451 + }, + { + "path": "tests/golden/corrective/C0-001/check-task-context.log", + "sha256": "d878b0cb346102d780a0de68deeb14a36d9c2e7aec63f1010a3d6454e276563a", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C0-001/context-governance.log", + "sha256": "8b4a0add34d164d2e514192c430269e780f03f92697d77e494aa35825b5861f3", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C0-001/corrective-plan.log", + "sha256": "8d43d87f24c770dea5b56022f4ac010d6474e05ff2863c90035b741587a9f3d6", + "bytes": 88 + }, + { + "path": "tests/golden/corrective/C0-001/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C0-001/git-status.log", + "sha256": "841e05e8bc1fdeec6e7c1a546911c3b79e1e05acac035fe93b12429ba02097d1", + "bytes": 23222 + }, + { + "path": "tests/golden/corrective/C0-001/print-task-context.log", + "sha256": "f5fd8b4fbcd70b9ae9e9fc065c51f396b3571d51e1be0c419757624f87c364ce", + "bytes": 3040 + }, + { + "path": "tests/golden/corrective/C0-001/source-hashes-after.txt", + "sha256": "024cda0fbacc185a04acb8835488673c9962ee464edfe578f090fe9cf575b46b", + "bytes": 428 + }, + { + "path": "tests/golden/corrective/C0-001/source-hashes.txt", + "sha256": "c0e309fa9967f34e0ddb500cd5619ea50b97d9d0cb3ce6f6861c9d6e8e19d0e7", + "bytes": 720 + } + ], + "nextCorrectiveTask": "C0-002" +} diff --git a/tests/golden/corrective/C0-001/source-hashes-after.txt b/tests/golden/corrective/C0-001/source-hashes-after.txt new file mode 100644 index 00000000..9ac4cf6d --- /dev/null +++ b/tests/golden/corrective/C0-001/source-hashes-after.txt @@ -0,0 +1,4 @@ +f9f4f1116b5975aa1b47fee15856f2029ec8f02161e432e9a24b846384cd1c5b tests/golden/M15-03A/completed-gap-tasks.json +278d51b867d63a5975635b8fd108c9025668de0893576499a77bd3d571a0f14b tests/golden/M15-03A/task-catalog.jsonl +9c79926a5a91b137b023a62f8a98d7c7421018846fdf658c9bea13ee5c5cbcea tests/golden/M15-03A/task-index.json +2235d0d250d28e63ab1c9b0e956292560785cf340c612312b316be0ceb2463a9 tests/golden/M15-03A/next-task-plan.json diff --git a/tests/golden/corrective/C0-001/source-hashes.txt b/tests/golden/corrective/C0-001/source-hashes.txt new file mode 100644 index 00000000..6a385863 --- /dev/null +++ b/tests/golden/corrective/C0-001/source-hashes.txt @@ -0,0 +1,7 @@ +eeaca50828c3feb3ed53d1869626a703d9e50fefd9c70d871cc6eec03fc84bcd docs/EXECUTION_QUEUE.md +3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1 tests/golden/M16-GAP-00273/manifest.json +5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8 docs/status/M16-GAP-00273.md +f9f4f1116b5975aa1b47fee15856f2029ec8f02161e432e9a24b846384cd1c5b tests/golden/M15-03A/completed-gap-tasks.json +278d51b867d63a5975635b8fd108c9025668de0893576499a77bd3d571a0f14b tests/golden/M15-03A/task-catalog.jsonl +9c79926a5a91b137b023a62f8a98d7c7421018846fdf658c9bea13ee5c5cbcea tests/golden/M15-03A/task-index.json +2235d0d250d28e63ab1c9b0e956292560785cf340c612312b316be0ceb2463a9 tests/golden/M15-03A/next-task-plan.json diff --git a/tests/golden/corrective/C0-002/command-exit-codes.json b/tests/golden/corrective/C0-002/command-exit-codes.json new file mode 100644 index 00000000..2eb08428 --- /dev/null +++ b/tests/golden/corrective/C0-002/command-exit-codes.json @@ -0,0 +1,17 @@ +{ + "resign": 0, + "validation": 0, + "planCheck": null, + "indexCheck": null, + "contextCheck": null, + "governanceCheck": null, + "diffCheck": null, + "commandExitCodes": { + "planCheck": 1, + "indexCheck": 0, + "contextCheck": 0, + "contextGovernanceTest": 0, + "governanceCheck": 0, + "diffCheck": 0 + } +} diff --git a/tests/golden/corrective/C0-002/dry-run.json b/tests/golden/corrective/C0-002/dry-run.json new file mode 100644 index 00000000..215bc29e --- /dev/null +++ b/tests/golden/corrective/C0-002/dry-run.json @@ -0,0 +1,7538 @@ +{ + "schemaVersion": 1, + "operation": "CORRECTIVE_STATE_RECONCILIATION", + "mode": "dry-run", + "status": "BLOCKED", + "queueMutation": false, + "queue": { + "currentTask": "M16-GAP-00274", + "parentManifest": "tests/golden/M16-GAP-00273/manifest.json", + "parentNextTask": "M16-GAP-00274" + }, + "inputTaskCount": 274, + "manifestDoneCount": 273, + "registeredCompletedCount": 264, + "eligibleCompletedTaskIds": [], + "eligibleCompletedGaps": [], + "registryComparison": { + "eligibleNotRegistered": [], + "registeredNotEligible": [ + "datablock:Action", + "datablock:Armature", + "datablock:Brush", + "datablock:Camera", + "datablock:Collection", + "datablock:Curve", + "datablock:Curves", + "datablock:FreestyleLineStyle", + "datablock:GreasePencil", + "datablock:Lattice", + "datablock:Library", + "datablock:Light", + "datablock:Material", + "datablock:Mesh", + "datablock:MetaBall", + "datablock:NodeTree", + "datablock:Object", + "datablock:ParticleSettings", + "datablock:PointCloud", + "datablock:Scene", + "datablock:Screen", + "datablock:Sound", + "datablock:Speaker", + "datablock:Text", + "datablock:Texture", + "datablock:Volume", + "datablock:WindowManager", + "datablock:WorkSpace", + "datablock:World", + "modifier:ARMATURE", + "modifier:ARRAY", + "modifier:BEVEL", + "modifier:BOOLEAN", + "modifier:BUILD", + "modifier:CAST", + "modifier:CLOTH", + "modifier:COLLISION", + "modifier:CORRECTIVE_SMOOTH", + "modifier:CURVE", + "modifier:DATA_TRANSFER", + "modifier:DECIMATE", + "modifier:DISPLACE", + "modifier:DYNAMIC_PAINT", + "modifier:EDGE_SPLIT", + "modifier:EXPLODE", + "modifier:FLUID", + "modifier:GREASE_PENCIL_ARMATURE", + "modifier:GREASE_PENCIL_ARRAY", + "modifier:GREASE_PENCIL_BUILD", + "modifier:GREASE_PENCIL_COLOR", + "modifier:GREASE_PENCIL_DASH", + "modifier:GREASE_PENCIL_ENVELOPE", + "modifier:GREASE_PENCIL_HOOK", + "modifier:GREASE_PENCIL_LATTICE", + "modifier:GREASE_PENCIL_LENGTH", + "modifier:GREASE_PENCIL_MIRROR", + "modifier:GREASE_PENCIL_MULTIPLY", + "modifier:GREASE_PENCIL_NOISE", + "modifier:GREASE_PENCIL_OFFSET", + "modifier:GREASE_PENCIL_OPACITY", + "modifier:GREASE_PENCIL_OUTLINE", + "modifier:GREASE_PENCIL_SHRINKWRAP", + "modifier:GREASE_PENCIL_SIMPLIFY", + "modifier:GREASE_PENCIL_SMOOTH", + "modifier:GREASE_PENCIL_SUBDIV", + "modifier:GREASE_PENCIL_TEXTURE", + "modifier:GREASE_PENCIL_THICKNESS", + "modifier:GREASE_PENCIL_TIME", + "modifier:GREASE_PENCIL_TINT", + "modifier:GREASE_PENCIL_VERTEX_WEIGHT_ANGLE", + "modifier:GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY", + "modifier:HOOK", + "modifier:LAPLACIANDEFORM", + "modifier:LAPLACIANSMOOTH", + "modifier:LATTICE", + "modifier:LINEART", + "modifier:MASK", + "modifier:MESH_CACHE", + "modifier:MESH_DEFORM", + "modifier:MESH_SEQUENCE_CACHE", + "modifier:MESH_TO_VOLUME", + "modifier:MIRROR", + "modifier:MULTIRES", + "modifier:NODES", + "modifier:NORMAL_EDIT", + "modifier:OCEAN", + "modifier:PARTICLE_INSTANCE", + "modifier:PARTICLE_SYSTEM", + "modifier:REMESH", + "modifier:SCREW", + "modifier:SHRINKWRAP", + "modifier:SIMPLE_DEFORM", + "modifier:SKIN", + "modifier:SMOOTH", + "modifier:SOFT_BODY", + "modifier:SOLIDIFY", + "modifier:SUBSURF", + "modifier:SURFACE", + "modifier:SURFACE_DEFORM", + "modifier:TRIANGULATE", + "modifier:UV_PROJECT", + "modifier:UV_WARP", + "modifier:VERTEX_WEIGHT_EDIT", + "modifier:VERTEX_WEIGHT_MIX", + "modifier:VERTEX_WEIGHT_PROXIMITY", + "modifier:VOLUME_DISPLACE", + "modifier:VOLUME_TO_MESH", + "modifier:WARP", + "modifier:WAVE", + "modifier:WEIGHTED_NORMAL", + "modifier:WELD", + "modifier:WIREFRAME", + "operator:action.bake_keys", + "operator:action.clean", + "operator:action.clickselect", + "operator:action.copy", + "operator:action.delete", + "operator:action.duplicate", + "operator:action.duplicate_move", + "operator:action.easing_type", + "operator:action.extrapolation_type", + "operator:action.frame_jump", + "operator:action.handle_type", + "operator:action.interpolation_type", + "operator:action.keyframe_insert", + "operator:action.keyframe_type", + "operator:action.markers_make_local", + "operator:action.mirror", + "operator:action.new", + "operator:action.paste", + "operator:action.previewrange_set", + "operator:action.push_down", + "operator:action.select_all", + "operator:action.select_box", + "operator:action.select_by_type", + "operator:action.select_circle", + "operator:action.select_column", + "operator:action.select_lasso", + "operator:action.select_leftright", + "operator:action.select_less", + "operator:action.select_linked", + "operator:action.select_more", + "operator:action.snap", + "operator:action.stash", + "operator:action.stash_and_create", + "operator:action.unlink", + "operator:action.view_all", + "operator:action.view_frame", + "operator:action.view_selected", + "operator:anim.change_frame", + "operator:anim.channel_select_keys", + "operator:anim.channel_view_pick", + "operator:anim.channels_bake", + "operator:anim.channels_clean_empty", + "operator:anim.channels_click", + "operator:anim.channels_collapse", + "operator:anim.channels_delete", + "operator:anim.channels_editable_toggle", + "operator:anim.channels_expand", + "operator:anim.channels_fcurves_enable", + "operator:anim.channels_group", + "operator:anim.channels_move", + "operator:anim.channels_rename", + "operator:anim.channels_select_all", + "operator:anim.channels_select_box", + "operator:anim.channels_select_filter", + "operator:anim.channels_setting_disable", + "operator:anim.channels_setting_enable", + "operator:anim.channels_setting_toggle", + "operator:anim.channels_ungroup", + "operator:anim.channels_view_selected", + "operator:anim.clear_useless_actions", + "operator:anim.copy_driver_button", + "operator:anim.driver_button_add", + "operator:anim.driver_button_edit", + "operator:anim.driver_button_remove", + "operator:anim.end_frame_set", + "operator:anim.keyframe_clear_button", + "operator:anim.keyframe_clear_v3d", + "operator:anim.keyframe_clear_vse", + "operator:anim.keyframe_delete", + "operator:anim.keyframe_delete_button", + "operator:anim.keyframe_delete_by_name", + "operator:anim.keyframe_delete_v3d", + "operator:anim.keyframe_delete_vse", + "operator:anim.keyframe_insert", + "operator:anim.keyframe_insert_button", + "operator:anim.keyframe_insert_by_name", + "operator:anim.keyframe_insert_menu", + "operator:anim.keying_set_active_set", + "operator:anim.keying_set_add", + "operator:anim.keying_set_export", + "operator:anim.keying_set_path_add", + "operator:anim.keying_set_path_remove", + "operator:anim.keying_set_remove", + "operator:anim.keyingset_button_add", + "operator:anim.keyingset_button_remove", + "operator:anim.merge_animation", + "operator:anim.paste_driver_button", + "operator:anim.previewrange_clear", + "operator:anim.previewrange_set", + "operator:anim.replace_action", + "operator:anim.replace_action_new", + "operator:anim.scene_range_frame", + "operator:anim.separate_slots", + "operator:anim.slot_channels_move_to_new_action", + "operator:anim.slot_new_for_id", + "operator:anim.slot_unassign_from_constraint", + "operator:anim.slot_unassign_from_id", + "operator:anim.slot_unassign_from_nla_strip", + "operator:anim.start_frame_set", + "operator:anim.update_animated_transform_constraints", + "operator:anim.version_bone_hide_property", + "operator:anim.view_curve_in_graph_editor", + "operator:armature.align", + "operator:armature.assign_to_collection", + "operator:armature.autoside_names", + "operator:armature.bone_primitive_add", + "operator:armature.calculate_roll", + "operator:armature.click_extrude", + "operator:armature.collection_add", + "operator:armature.collection_assign", + "operator:armature.collection_create_and_assign", + "operator:armature.collection_deselect", + "operator:armature.collection_move", + "operator:armature.collection_remove", + "operator:armature.collection_remove_unused", + "operator:armature.collection_select", + "operator:armature.collection_show_all", + "operator:armature.collection_unassign", + "operator:armature.collection_unassign_named", + "operator:armature.collection_unsolo_all", + "operator:armature.copy_bone_color_to_selected", + "operator:armature.delete", + "operator:armature.dissolve", + "operator:armature.duplicate", + "operator:armature.duplicate_move", + "operator:armature.duplicate_rename", + "operator:armature.extrude", + "operator:armature.extrude_forked", + "operator:armature.extrude_move", + "operator:armature.fill", + "operator:armature.flip_names", + "operator:armature.hide", + "operator:armature.move_to_collection", + "operator:armature.parent_clear", + "operator:armature.parent_set", + "operator:armature.reveal", + "operator:armature.roll_clear", + "operator:armature.select_all", + "operator:armature.select_hierarchy", + "operator:armature.select_less", + "operator:armature.select_linked", + "operator:armature.select_linked_pick", + "operator:armature.select_mirror", + "operator:armature.select_more", + "operator:armature.select_similar", + "operator:armature.separate", + "operator:armature.shortest_path_pick", + "operator:armature.split", + "operator:armature.subdivide", + "operator:armature.switch_direction", + "operator:armature.symmetrize", + "operator:asset.asset_download" + ], + "manifestDoneNotEligible": [ + "datablock:Action", + "datablock:Armature", + "datablock:Brush", + "datablock:Camera", + "datablock:Collection", + "datablock:Curve", + "datablock:Curves", + "datablock:FreestyleLineStyle", + "datablock:GreasePencil", + "datablock:Lattice", + "datablock:Library", + "datablock:Light", + "datablock:Material", + "datablock:Mesh", + "datablock:MetaBall", + "datablock:NodeTree", + "datablock:Object", + "datablock:ParticleSettings", + "datablock:PointCloud", + "datablock:Scene", + "datablock:Screen", + "datablock:Sound", + "datablock:Speaker", + "datablock:Text", + "datablock:Texture", + "datablock:Volume", + "datablock:WindowManager", + "datablock:WorkSpace", + "datablock:World", + "modifier:ARMATURE", + "modifier:ARRAY", + "modifier:BEVEL", + "modifier:BOOLEAN", + "modifier:BUILD", + "modifier:CAST", + "modifier:CLOTH", + "modifier:COLLISION", + "modifier:CORRECTIVE_SMOOTH", + "modifier:CURVE", + "modifier:DATA_TRANSFER", + "modifier:DECIMATE", + "modifier:DISPLACE", + "modifier:DYNAMIC_PAINT", + "modifier:EDGE_SPLIT", + "modifier:EXPLODE", + "modifier:FLUID", + "modifier:GREASE_PENCIL_ARMATURE", + "modifier:GREASE_PENCIL_ARRAY", + "modifier:GREASE_PENCIL_BUILD", + "modifier:GREASE_PENCIL_COLOR", + "modifier:GREASE_PENCIL_DASH", + "modifier:GREASE_PENCIL_ENVELOPE", + "modifier:GREASE_PENCIL_HOOK", + "modifier:GREASE_PENCIL_LATTICE", + "modifier:GREASE_PENCIL_LENGTH", + "modifier:GREASE_PENCIL_MIRROR", + "modifier:GREASE_PENCIL_MULTIPLY", + "modifier:GREASE_PENCIL_NOISE", + "modifier:GREASE_PENCIL_OFFSET", + "modifier:GREASE_PENCIL_OPACITY", + "modifier:GREASE_PENCIL_OUTLINE", + "modifier:GREASE_PENCIL_SHRINKWRAP", + "modifier:GREASE_PENCIL_SIMPLIFY", + "modifier:GREASE_PENCIL_SMOOTH", + "modifier:GREASE_PENCIL_SUBDIV", + "modifier:GREASE_PENCIL_TEXTURE", + "modifier:GREASE_PENCIL_THICKNESS", + "modifier:GREASE_PENCIL_TIME", + "modifier:GREASE_PENCIL_TINT", + "modifier:GREASE_PENCIL_VERTEX_WEIGHT_ANGLE", + "modifier:GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY", + "modifier:HOOK", + "modifier:LAPLACIANDEFORM", + "modifier:LAPLACIANSMOOTH", + "modifier:LATTICE", + "modifier:LINEART", + "modifier:MASK", + "modifier:MESH_CACHE", + "modifier:MESH_DEFORM", + "modifier:MESH_SEQUENCE_CACHE", + "modifier:MESH_TO_VOLUME", + "modifier:MIRROR", + "modifier:MULTIRES", + "modifier:NODES", + "modifier:NORMAL_EDIT", + "modifier:OCEAN", + "modifier:PARTICLE_INSTANCE", + "modifier:PARTICLE_SYSTEM", + "modifier:REMESH", + "modifier:SCREW", + "modifier:SHRINKWRAP", + "modifier:SIMPLE_DEFORM", + "modifier:SKIN", + "modifier:SMOOTH", + "modifier:SOFT_BODY", + "modifier:SOLIDIFY", + "modifier:SUBSURF", + "modifier:SURFACE", + "modifier:SURFACE_DEFORM", + "modifier:TRIANGULATE", + "modifier:UV_PROJECT", + "modifier:UV_WARP", + "modifier:VERTEX_WEIGHT_EDIT", + "modifier:VERTEX_WEIGHT_MIX", + "modifier:VERTEX_WEIGHT_PROXIMITY", + "modifier:VOLUME_DISPLACE", + "modifier:VOLUME_TO_MESH", + "modifier:WARP", + "modifier:WAVE", + "modifier:WEIGHTED_NORMAL", + "modifier:WELD", + "modifier:WIREFRAME", + "operator:action.bake_keys", + "operator:action.clean", + "operator:action.clickselect", + "operator:action.copy", + "operator:action.delete", + "operator:action.duplicate", + "operator:action.duplicate_move", + "operator:action.easing_type", + "operator:action.extrapolation_type", + "operator:action.frame_jump", + "operator:action.handle_type", + "operator:action.interpolation_type", + "operator:action.keyframe_insert", + "operator:action.keyframe_type", + "operator:action.markers_make_local", + "operator:action.mirror", + "operator:action.new", + "operator:action.paste", + "operator:action.previewrange_set", + "operator:action.push_down", + "operator:action.select_all", + "operator:action.select_box", + "operator:action.select_by_type", + "operator:action.select_circle", + "operator:action.select_column", + "operator:action.select_lasso", + "operator:action.select_leftright", + "operator:action.select_less", + "operator:action.select_linked", + "operator:action.select_more", + "operator:action.snap", + "operator:action.stash", + "operator:action.stash_and_create", + "operator:action.unlink", + "operator:action.view_all", + "operator:action.view_frame", + "operator:action.view_selected", + "operator:anim.change_frame", + "operator:anim.channel_select_keys", + "operator:anim.channel_view_pick", + "operator:anim.channels_bake", + "operator:anim.channels_clean_empty", + "operator:anim.channels_click", + "operator:anim.channels_collapse", + "operator:anim.channels_delete", + "operator:anim.channels_editable_toggle", + "operator:anim.channels_expand", + "operator:anim.channels_fcurves_enable", + "operator:anim.channels_group", + "operator:anim.channels_move", + "operator:anim.channels_rename", + "operator:anim.channels_select_all", + "operator:anim.channels_select_box", + "operator:anim.channels_select_filter", + "operator:anim.channels_setting_disable", + "operator:anim.channels_setting_enable", + "operator:anim.channels_setting_toggle", + "operator:anim.channels_ungroup", + "operator:anim.channels_view_selected", + "operator:anim.clear_useless_actions", + "operator:anim.copy_driver_button", + "operator:anim.driver_button_add", + "operator:anim.driver_button_edit", + "operator:anim.driver_button_remove", + "operator:anim.end_frame_set", + "operator:anim.keyframe_clear_button", + "operator:anim.keyframe_clear_v3d", + "operator:anim.keyframe_clear_vse", + "operator:anim.keyframe_delete", + "operator:anim.keyframe_delete_button", + "operator:anim.keyframe_delete_by_name", + "operator:anim.keyframe_delete_v3d", + "operator:anim.keyframe_delete_vse", + "operator:anim.keyframe_insert", + "operator:anim.keyframe_insert_button", + "operator:anim.keyframe_insert_by_name", + "operator:anim.keyframe_insert_menu", + "operator:anim.keying_set_active_set", + "operator:anim.keying_set_add", + "operator:anim.keying_set_export", + "operator:anim.keying_set_path_add", + "operator:anim.keying_set_path_remove", + "operator:anim.keying_set_remove", + "operator:anim.keyingset_button_add", + "operator:anim.keyingset_button_remove", + "operator:anim.merge_animation", + "operator:anim.paste_driver_button", + "operator:anim.previewrange_clear", + "operator:anim.previewrange_set", + "operator:anim.replace_action", + "operator:anim.replace_action_new", + "operator:anim.scene_range_frame", + "operator:anim.separate_slots", + "operator:anim.slot_channels_move_to_new_action", + "operator:anim.slot_new_for_id", + "operator:anim.slot_unassign_from_constraint", + "operator:anim.slot_unassign_from_id", + "operator:anim.slot_unassign_from_nla_strip", + "operator:anim.start_frame_set", + "operator:anim.update_animated_transform_constraints", + "operator:anim.version_bone_hide_property", + "operator:anim.view_curve_in_graph_editor", + "operator:armature.align", + "operator:armature.assign_to_collection", + "operator:armature.autoside_names", + "operator:armature.bone_primitive_add", + "operator:armature.calculate_roll", + "operator:armature.click_extrude", + "operator:armature.collection_add", + "operator:armature.collection_assign", + "operator:armature.collection_create_and_assign", + "operator:armature.collection_deselect", + "operator:armature.collection_move", + "operator:armature.collection_remove", + "operator:armature.collection_remove_unused", + "operator:armature.collection_select", + "operator:armature.collection_show_all", + "operator:armature.collection_unassign", + "operator:armature.collection_unassign_named", + "operator:armature.collection_unsolo_all", + "operator:armature.copy_bone_color_to_selected", + "operator:armature.delete", + "operator:armature.dissolve", + "operator:armature.duplicate", + "operator:armature.duplicate_move", + "operator:armature.duplicate_rename", + "operator:armature.extrude", + "operator:armature.extrude_forked", + "operator:armature.extrude_move", + "operator:armature.fill", + "operator:armature.flip_names", + "operator:armature.hide", + "operator:armature.move_to_collection", + "operator:armature.parent_clear", + "operator:armature.parent_set", + "operator:armature.reveal", + "operator:armature.roll_clear", + "operator:armature.select_all", + "operator:armature.select_hierarchy", + "operator:armature.select_less", + "operator:armature.select_linked", + "operator:armature.select_linked_pick", + "operator:armature.select_mirror", + "operator:armature.select_more", + "operator:armature.select_similar", + "operator:armature.separate", + "operator:armature.shortest_path_pick", + "operator:armature.split", + "operator:armature.subdivide", + "operator:armature.switch_direction", + "operator:armature.symmetrize", + "operator:asset.asset_download", + "operator:asset.assets_download", + "operator:asset.assign_action", + "operator:asset.browse_containing_blend_file", + "operator:asset.bundle_install", + "operator:asset.catalog_delete", + "operator:asset.catalog_new", + "operator:asset.catalog_redo", + "operator:asset.catalog_undo", + "operator:asset.catalog_undo_push" + ] + }, + "candidateActiveTask": "M16-GAP-00274", + "sourceHashes": { + "docs/EXECUTION_QUEUE.md": "eeaca50828c3feb3ed53d1869626a703d9e50fefd9c70d871cc6eec03fc84bcd", + "tests/golden/M16-GAP-00273/manifest.json": "3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1", + "tests/golden/M15-03A/completed-gap-tasks.json": "f9f4f1116b5975aa1b47fee15856f2029ec8f02161e432e9a24b846384cd1c5b", + "tests/golden/M15-03A/next-task-plan.json": "2235d0d250d28e63ab1c9b0e956292560785cf340c612312b316be0ceb2463a9", + "tests/golden/M15-03A/task-catalog.jsonl": "278d51b867d63a5975635b8fd108c9025668de0893576499a77bd3d571a0f14b", + "tests/golden/M15-03A/task-index.json": "9c79926a5a91b137b023a62f8a98d7c7421018846fdf658c9bea13ee5c5cbcea", + "docs/BLENDER_WASM_CORRECTIVE_TASK_PLAN.json": "2336fafe07c8c670b0d58746af818c07ed21534aeeff02fea3279a8618655c91" + }, + "inputDigest": "41de2aa1e9456d42ea3dc4ff5121437d9ae759e1df74b56184b728242a6552d2", + "issueSummary": [ + { + "code": "ARTIFACT_HASH_DRIFT", + "count": 1355, + "taskCount": 273, + "sampleTasks": [ + "M16-GAP-00001", + "M16-GAP-00002", + "M16-GAP-00003", + "M16-GAP-00004", + "M16-GAP-00005" + ], + "pathCount": 23, + "samplePaths": [ + "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "docs/status/M16-GAP-00162.md", + "tests/files/web/generated/M16-GAP-00177-operator-anim.end_frame_set.blend" + ] + }, + { + "code": "MISSING_TASK_CONTEXT", + "count": 24, + "taskCount": 24, + "sampleTasks": [ + "M16-GAP-00001", + "M16-GAP-00002", + "M16-GAP-00003", + "M16-GAP-00004", + "M16-GAP-00005" + ], + "pathCount": 0, + "samplePaths": [] + }, + { + "code": "PLAN_NONDETERMINISTIC", + "count": 1, + "taskCount": 0, + "sampleTasks": [], + "pathCount": 1, + "samplePaths": [ + "tests/golden/M15-03A/next-task-plan.json" + ] + } + ], + "issueCount": 1380, + "issues": [ + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00001" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03E/manifest.json", + "task": "M16-GAP-00001" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00001" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03A/next-task-plan.json", + "task": "M16-GAP-00001" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/package.json", + "task": "M16-GAP-00001" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00002" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00002" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03A/next-task-plan.json", + "task": "M16-GAP-00002" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/package.json", + "task": "M16-GAP-00002" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00003" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00003" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00003" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00003" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00003" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03A/next-task-plan.json", + "task": "M16-GAP-00003" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/package.json", + "task": "M16-GAP-00003" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00004" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00004" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00004" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03A/next-task-plan.json", + "task": "M16-GAP-00004" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00005" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00005" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03A/next-task-plan.json", + "task": "M16-GAP-00005" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00006" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00006" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00006" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03A/next-task-plan.json", + "task": "M16-GAP-00006" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00007" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00007" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00007" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03A/next-task-plan.json", + "task": "M16-GAP-00007" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00008" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00008" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00008" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00008" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00008" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03A/next-task-plan.json", + "task": "M16-GAP-00008" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00009" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00009" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03A/next-task-plan.json", + "task": "M16-GAP-00009" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00010" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00010" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00010" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00010" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00010" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00010" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00011" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00011" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00011" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00011" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00011" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00012" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00012" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00012" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00012" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00012" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00013" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00013" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00013" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00013" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00013" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00014" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00014" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00014" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00014" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00014" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00015" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00015" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00015" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00015" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00015" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00016" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00016" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00016" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00016" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00016" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00017" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00017" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00017" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00017" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00017" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00018" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00018" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "task": "M16-GAP-00018" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00018" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00018" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00018" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00019" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00019" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00019" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00019" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00019" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00020" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00020" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00020" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00020" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00020" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00021" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00021" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00021" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00021" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00021" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00022" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00022" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00022" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00022" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00022" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00022" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00023" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00023" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00023" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00023" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00023" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00023" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00024" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00024" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00024" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00024" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00024" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00024" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00025" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00025" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00025" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00025" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00025" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00025" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00026" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00026" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00026" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00026" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00026" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00026" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00027" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00027" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00027" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00027" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00027" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00027" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00028" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00028" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00028" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00028" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00028" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00028" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00029" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00029" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00029" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00029" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00029" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00029" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00030" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00030" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00030" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00030" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00030" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00030" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00031" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00031" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00031" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00031" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00031" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00031" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00032" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00032" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00032" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00032" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00032" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00032" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00033" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00033" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00033" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00033" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00033" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00033" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00034" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00034" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00034" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00034" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00034" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00034" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00035" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00035" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00035" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00035" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00035" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00035" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00036" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00036" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00036" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00036" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00036" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00036" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00037" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00037" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00037" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00037" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00037" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00037" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00038" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00038" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00038" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00038" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00038" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00038" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00038" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00039" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00039" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00039" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00039" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00039" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00039" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00039" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00040" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00040" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00040" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00040" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00040" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00040" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00040" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00041" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00041" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00041" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00041" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00041" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00041" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00041" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00042" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00042" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00042" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00042" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00042" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00042" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00042" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00043" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00043" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00043" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00043" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00043" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00043" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00043" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00044" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00044" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00044" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00044" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00044" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00044" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00044" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00045" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00045" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00045" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00045" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00045" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00045" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00045" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00046" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00046" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00046" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00046" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00046" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00046" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00046" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00047" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00047" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00047" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00047" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00047" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00047" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00047" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00048" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00048" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00048" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00048" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00048" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00048" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00048" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00049" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00049" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00049" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00049" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00049" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00049" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00049" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00050" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00050" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00050" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00050" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00050" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00050" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00050" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00051" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00051" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00051" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00051" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00051" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00051" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00051" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00052" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00052" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00052" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00052" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00052" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00052" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00052" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00053" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00053" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00053" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00053" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00053" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00053" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00053" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00054" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00054" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00054" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00054" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00054" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00054" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00054" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00055" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00055" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00055" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00055" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00055" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00055" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00055" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00056" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00056" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00056" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00056" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00056" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00056" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00056" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00057" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00057" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00057" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00057" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00057" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00057" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00057" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00058" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00058" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00058" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00058" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00058" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00058" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00058" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00059" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00059" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00059" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00059" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00059" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00059" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00060" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00060" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00060" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00060" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00060" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00060" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00061" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00061" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00061" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00061" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00061" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00061" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00062" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00062" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00062" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00062" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00062" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00062" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00063" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00063" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00063" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00063" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00063" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00063" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00064" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00064" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00064" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00064" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00064" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00064" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00065" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00065" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00065" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00065" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00065" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00065" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00066" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00066" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00066" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00066" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00066" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00066" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00067" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00067" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00067" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00067" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00067" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00067" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00068" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00068" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00068" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00068" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00068" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00068" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00069" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00069" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00069" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00069" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00069" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00069" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00070" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00070" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00070" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00070" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00070" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00070" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00070" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M16-GAP-00070/manifest.json", + "task": "M16-GAP-00071" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00071" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00071" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00071" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00071" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00071" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00071" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00072" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00072" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00072" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00072" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00072" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00072" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00072" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00073" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00073" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00073" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00073" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00073" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00073" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00073" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00074" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00074" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00074" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00074" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00074" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00074" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00074" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00075" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00075" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00075" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00075" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00075" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00075" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00075" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00076" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00076" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00076" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00076" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00076" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00076" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00077" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00077" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00077" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00077" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00077" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00077" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00078" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00078" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00078" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00078" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00078" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00078" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00079" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00079" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00079" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00079" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00079" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00079" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00080" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00080" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00080" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00080" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00080" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00080" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00081" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00081" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00081" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00081" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00081" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00081" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00082" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00082" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00082" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00082" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00082" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00082" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00083" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00083" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00083" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00083" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00083" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00083" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00084" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00084" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00084" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00084" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00084" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00084" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00085" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00085" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00085" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00085" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00085" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00085" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00086" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00086" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00086" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00086" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00086" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00086" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00087" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00087" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00087" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00087" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00087" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00087" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00088" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00088" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00088" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00088" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00088" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00088" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00089" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00089" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00089" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00089" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00089" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00089" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00090" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00090" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00090" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00090" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00090" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00090" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00091" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00091" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00091" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00091" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00091" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00091" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00092" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00092" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00092" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00092" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00092" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00092" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00093" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00093" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00093" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00093" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00093" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00093" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00094" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00094" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00094" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00094" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00094" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00094" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00095" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00095" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00095" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00095" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00095" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00095" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00096" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00096" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00096" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00096" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00096" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00096" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00097" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00097" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00097" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00097" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00097" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00097" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00098" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00098" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00098" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00098" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00098" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00098" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00099" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00099" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00099" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00099" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00099" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00099" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00099" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00100" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00100" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00100" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00100" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00100" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00100" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00100" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00101" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00101" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00101" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00101" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00101" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00101" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00101" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00102" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00102" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00102" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00102" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00102" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00102" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00102" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00103" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00103" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00103" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00103" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00103" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00103" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00103" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00103" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00104" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00104" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00104" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00104" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00104" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00104" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00104" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00104" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00105" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00105" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00105" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00105" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00105" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00105" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00105" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00105" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00106" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00106" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00106" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00106" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00106" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00106" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00106" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00106" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00107" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00107" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00107" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00107" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00107" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00107" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00107" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00107" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00108" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00108" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00108" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00108" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00108" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00108" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00108" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00109" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00109" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00109" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00109" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00109" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00109" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00109" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00110" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00110" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00110" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00110" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00110" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00110" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00110" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00111" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00111" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00111" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00111" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00111" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00111" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00111" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00112" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00112" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00112" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00112" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00112" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00113" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00113" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00113" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00113" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00113" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00113" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00114" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00114" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00114" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00114" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00114" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00115" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00115" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00115" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00115" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00115" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00116" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00116" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00116" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00116" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00116" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00117" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00117" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00117" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00117" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00117" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00118" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00118" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00118" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00118" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00118" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00119" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00119" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00119" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00119" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00119" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00120" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00120" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00120" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00120" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00120" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00121" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00121" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00121" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00121" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00121" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00122" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00122" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00122" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00122" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00122" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00123" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00123" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00123" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00123" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00123" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00124" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00124" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00124" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00124" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00124" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-action-keyframe-insert-desktop.py", + "task": "M16-GAP-00125" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00125" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00125" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00125" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00125" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00125" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00126" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00126" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00126" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00126" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00126" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00127" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00127" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00127" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00127" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00127" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00128" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00128" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00128" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00128" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00128" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00129" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00129" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00129" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00129" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00129" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00130" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00130" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00130" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00130" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00130" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-action-previewrange-set-desktop.py", + "task": "M16-GAP-00131" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00131" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00131" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00131" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00131" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00131" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00132" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00132" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00132" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00132" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00132" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00133" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00133" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00133" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00133" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00133" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00134" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00134" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00134" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00134" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00134" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00135" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00135" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00135" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00135" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00135" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00136" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00136" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00136" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00136" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00136" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00137" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00137" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00137" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00137" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00137" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00138" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00138" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00138" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00138" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00138" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00139" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00139" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00139" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00139" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00139" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00140" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00140" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00140" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00140" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00140" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00141" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00141" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00141" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00141" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00141" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00142" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00142" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00142" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00142" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00142" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00143" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00143" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00143" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00143" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00143" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00144" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00144" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00144" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00144" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00144" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00145" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00145" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00145" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00145" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00145" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00146" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00146" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00146" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00146" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00146" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00147" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00147" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00147" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00147" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00147" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00148" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00148" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00148" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00148" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00148" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00149" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00149" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00149" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00149" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00149" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00150" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00150" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00150" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00150" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00150" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00151" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00151" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00151" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00151" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00151" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00152" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00152" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00152" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00152" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00152" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00153" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00153" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00153" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00153" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00153" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00154" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00154" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00154" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00154" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00154" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00155" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00155" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00155" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00155" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00155" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-action-channels-collapse-desktop.py", + "task": "M16-GAP-00156" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00156" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00156" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00156" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00156" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00156" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00157" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00157" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00157" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00157" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00157" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00158" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00158" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00158" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00158" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00158" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00159" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00159" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00159" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00159" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00159" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00160" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00160" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00160" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00160" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00160" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00160" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00161" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00161" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00161" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00161" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00161" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00161" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M16-GAP-00161/manifest.json", + "task": "M16-GAP-00162" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00162" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00162" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00162" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00162" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00162" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00162" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "docs/status/M16-GAP-00162.md", + "task": "M16-GAP-00162" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M16-GAP-00162/task-context.json", + "task": "M16-GAP-00162" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00163" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00163" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00163" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00163" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00163" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00163" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00164" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00164" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00164" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00164" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00164" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00165" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00165" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00165" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00165" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00165" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00166" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00166" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00166" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00166" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00166" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00167" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00167" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00167" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00167" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00167" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00168" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00168" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00168" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00168" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00168" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00169" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00169" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00169" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00169" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00169" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00170" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00170" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00170" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00170" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00170" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00171" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00171" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00171" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00171" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00171" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00172" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00172" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00172" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00172" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00172" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00173" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00173" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00173" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00173" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00173" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00174" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00174" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00174" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00174" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00174" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00175" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00175" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00175" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00175" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00175" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00176" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00176" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00176" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00176" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00176" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/files/web/generated/M16-GAP-00177-operator-anim.end_frame_set.blend", + "task": "M16-GAP-00177" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00177" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00177" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00177" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00177" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00177" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M16-GAP-00177/anim-end-frame-set-desktop-report.json", + "task": "M16-GAP-00177" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M16-GAP-00177/anim-end-frame-set-local-exact-report.json", + "task": "M16-GAP-00177" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00178" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00178" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00178" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00178" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00178" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00179" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00179" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00179" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00179" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00179" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00180" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00180" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00180" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00180" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00180" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00181" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00181" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00181" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00181" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00181" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00182" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00182" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00182" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00182" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00182" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00183" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00183" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00183" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00183" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00183" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00184" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00184" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00184" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00184" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00184" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00185" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00185" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00185" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00185" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00185" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00186" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00186" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00186" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00186" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00186" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00187" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00187" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00187" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00187" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00187" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00188" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00188" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00188" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00188" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00188" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00189" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00189" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00189" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00189" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00189" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00190" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00190" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00190" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00190" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00190" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00191" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00191" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00191" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00191" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00191" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00192" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00192" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00192" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00192" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00192" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00193" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00193" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00193" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00193" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00193" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00194" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00194" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00194" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00194" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00194" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00195" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00195" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00195" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00195" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00195" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00196" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00196" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00196" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00196" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00196" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00197" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00197" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00197" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00197" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00197" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00198" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00198" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00198" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00198" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00198" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00199" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00199" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00199" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00199" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00199" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00200" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00200" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00200" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00200" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00200" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00201" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00201" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00201" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00201" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00201" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00202" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00202" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00202" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00202" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00202" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00203" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00203" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00203" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00203" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00203" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00204" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00204" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00204" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00204" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00204" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00205" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00205" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00205" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00205" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00205" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00206" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00206" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00206" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00206" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00206" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00207" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00207" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00207" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00207" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00207" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.js", + "task": "M16-GAP-00207" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00208" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00208" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00208" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00208" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00208" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.js", + "task": "M16-GAP-00208" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00209" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00209" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00209" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00209" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00210" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00210" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00210" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00210" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00211" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00211" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00211" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00211" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00212" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00212" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00212" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00212" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00213" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00213" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00213" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00213" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00214" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00214" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00214" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00214" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00215" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00215" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00215" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00215" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00216" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00216" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00216" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00216" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00217" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00217" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00217" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00217" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00218" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00218" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00218" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00218" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00219" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00219" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00219" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00219" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00220" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00220" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00220" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00220" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00221" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00221" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00221" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00221" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00222" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00222" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00222" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00222" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00223" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00223" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00223" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00223" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00224" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00224" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00224" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00224" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00225" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00225" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00225" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00225" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00226" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00226" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00226" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00226" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00227" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00227" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00227" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00227" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00228" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00228" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00228" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00228" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00229" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00229" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00229" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00229" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00230" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00230" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00230" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00230" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00231" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00231" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00231" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00231" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00232" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00232" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00232" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00232" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00233" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00233" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00233" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00233" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00234" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00234" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00234" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00234" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00235" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00235" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00235" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00235" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00236" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00236" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00236" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00236" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00237" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00237" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00237" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00237" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00238" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00238" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00238" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00238" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00239" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00239" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00239" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00239" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00240" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00240" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00240" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00240" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00241" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00241" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00241" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00241" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00242" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00242" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00242" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00242" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00243" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00243" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00243" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00243" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00244" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00244" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00244" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00244" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00245" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00245" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00245" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00245" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00246" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00246" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00246" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00246" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00247" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00247" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00247" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00247" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00248" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00248" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00248" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00248" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00249" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00249" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00249" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00249" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00250" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00250" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00250" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00250" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00251" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00252" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00253" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00254" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00255" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00256" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00257" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00258" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00259" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00260" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00261" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00262" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00263" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00264" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00265" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00266" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00267" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00268" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00269" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00270" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00271" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00272" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00273" + }, + { + "code": "PLAN_NONDETERMINISTIC", + "path": "tests/golden/M15-03A/next-task-plan.json", + "detail": "generator output differs from committed plan" + } + ], + "repairPlan": { + "actions": [ + { + "code": "MISSING_TASK_CONTEXT", + "priority": "P1", + "action": "repair only when the task parent pointer is independently valid; otherwise preserve BLOCKED", + "writes": [ + "corrective evidence only" + ] + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "priority": "P0", + "action": "obtain an immutable source snapshot or classify the task BLOCKED; never rewrite historical manifests", + "writes": [] + }, + { + "code": "STATUS_MISMATCH", + "priority": "P0", + "action": "compare manifest/status provenance and stop; do not normalize by hand", + "writes": [] + }, + { + "code": "PARENT_NEXT_TASK_MISMATCH", + "priority": "P0", + "action": "repair through the repository generator only after evidence review", + "writes": [] + }, + { + "code": "PLAN_NONDETERMINISTIC", + "priority": "P0", + "action": "rebuild generator inputs in staging and compare canonical bytes", + "writes": [ + "corrective evidence only" + ] + } + ], + "approvalRequired": true, + "queueMutationAllowed": false + }, + "writeOutcome": "DRY_RUN_ONLY" +} diff --git a/tests/golden/corrective/C0-002/handoff.json b/tests/golden/corrective/C0-002/handoff.json new file mode 100644 index 00000000..529e9fe8 --- /dev/null +++ b/tests/golden/corrective/C0-002/handoff.json @@ -0,0 +1,8199 @@ +{ + "schemaVersion": 1, + "task": "C0-002", + "status": "done", + "gate": "G0", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C0-002", + "artifactCount": 1632, + "artifacts": [ + { + "path": "tests/golden/corrective/C0-002/check-blender-next-task-plan-final.log", + "sha256": "e68a0bc36c6c8fbdf0d35a03307eb1b7bcd8b3e89d53cab7911d91cd859a6a72", + "bytes": 2334 + }, + { + "path": "tests/golden/corrective/C0-002/check-blender-next-task-plan.log", + "sha256": "e68a0bc36c6c8fbdf0d35a03307eb1b7bcd8b3e89d53cab7911d91cd859a6a72", + "bytes": 2334 + }, + { + "path": "tests/golden/corrective/C0-002/check-context-governance-final.log", + "sha256": "8b4a0add34d164d2e514192c430269e780f03f92697d77e494aa35825b5861f3", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C0-002/check-context-governance.log", + "sha256": "8b4a0add34d164d2e514192c430269e780f03f92697d77e494aa35825b5861f3", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C0-002/check-task-index-final.log", + "sha256": "ce310f4a62f095235c7d6096c324e8404e02588871f62cd27a4116a1fac8c2cc", + "bytes": 94 + }, + { + "path": "tests/golden/corrective/C0-002/check-task-index.log", + "sha256": "ce310f4a62f095235c7d6096c324e8404e02588871f62cd27a4116a1fac8c2cc", + "bytes": 94 + }, + { + "path": "tests/golden/corrective/C0-002/command-exit-codes.json", + "sha256": "350620865bb42ed39ae9d3f778fb0c10273c4853e11f623c0200f7a195c57ddd", + "bytes": 322 + }, + { + "path": "tests/golden/corrective/C0-002/corrective-plan-final.log", + "sha256": "8d43d87f24c770dea5b56022f4ac010d6474e05ff2863c90035b741587a9f3d6", + "bytes": 88 + }, + { + "path": "tests/golden/corrective/C0-002/diff-check-final.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C0-002/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C0-002/dry-run.json", + "sha256": "e3deaaaeff177f894f427391716b92229b84d37a00e45eddf8bd95a72780b43b", + "bytes": 218906 + }, + { + "path": "tests/golden/corrective/C0-002/handoff-command.log", + "sha256": "441a4548ab496a3bb756b082a0fb17f8109b6160e6a393fe5c0fef20136a867c", + "bytes": 82 + }, + { + "path": "tests/golden/corrective/C0-002/no-candidate-final.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C0-002/protected-hashes-after.log", + "sha256": "aa2222f10d6732d4585984a4349f25f83c3da0d720582e47f0d471657df48e66", + "bytes": 1316 + }, + { + "path": "tests/golden/corrective/C0-002/protected-hashes-before.log", + "sha256": "aa2222f10d6732d4585984a4349f25f83c3da0d720582e47f0d471657df48e66", + "bytes": 1316 + }, + { + "path": "tests/golden/corrective/C0-002/reconcile-command.log", + "sha256": "7c5dce670016adbb11204a948f3dbb49b9477fdb7968e32f985624b9b79ae679", + "bytes": 126 + }, + { + "path": "tests/golden/corrective/C0-002/reconcile-report-command.log", + "sha256": "473297832f7ee568d6ddc6cc6ebbd1767232ff793d255aea9b60e7385fabbcfe", + "bytes": 135 + }, + { + "path": "tests/golden/corrective/C0-002/reconcile-report.json", + "sha256": "e3deaaaeff177f894f427391716b92229b84d37a00e45eddf8bd95a72780b43b", + "bytes": 218906 + }, + { + "path": "tests/golden/corrective/C0-002/resign-check-command.log", + "sha256": "5ceb6e0fe696da0bb647e159d8ec247dcff1ba713572bb5ed99d1fb27b137fc3", + "bytes": 85 + }, + { + "path": "tests/golden/corrective/C0-002/resign-check.json", + "sha256": "aee2a8c4e6ac94d40dfb8f25f79e5e25815a917f809c3abb7bf8a5d274d65f69", + "bytes": 1567 + }, + { + "path": "tests/golden/corrective/C0-002/resign-command.log", + "sha256": "9bd1a791abf80ce766c7f569dc328b1c04422b873a6cf7d6a4a062bc70c013ff", + "bytes": 116 + }, + { + "path": "tests/golden/corrective/C0-002/resign.json", + "sha256": "cf7b9c23a8573b8dbbde4caa4eeeda9f48eaf33f84a32c23f01fd9e8c00bb751", + "bytes": 203700 + }, + { + "path": "tests/golden/corrective/C0-002/staged/completed-gap-tasks.candidate.json", + "sha256": "f5da902feecdafc1f12773568d3f48a5bab1ae8581e9661d8a7c888f4b62026e", + "bytes": 8996 + }, + { + "path": "tests/golden/corrective/C0-002/staged/next-task-plan.candidate.json", + "sha256": "3d5c74c519d3ac9a53c2ae516c4ad37adccf6999909ff1672e0ef74caae695a8", + "bytes": 7095296 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00001/task-context.json", + "sha256": "edadec3488020baf6d04872d0067a9e94e9c26f59b94dd4d85c041483bb75c11", + "bytes": 3156 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00002/task-context.json", + "sha256": "6264a3ceab31c6b41cde332cf35852479e1cbc0cdbb8c67d68dfc3b50d0d82a8", + "bytes": 3408 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00003/task-context.json", + "sha256": "4fd90216fb0279eab0890d563f5745ec770f517df2ff700b93d317761aa5d109", + "bytes": 3538 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00004/task-context.json", + "sha256": "19db6ddb4d3faea4e0cee3ef2820f9746e3f79fea6e2a206cfb7e3835198d32e", + "bytes": 3536 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00005/task-context.json", + "sha256": "52999f09111394f8487ef74eded2727c128accf57b0721e18bb7dbfd2c9e6bf4", + "bytes": 3547 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00006/task-context.json", + "sha256": "904647124704e6c17082d388f26aae25bf808b01e2174df469f6feb329f6d05a", + "bytes": 3469 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00007/task-context.json", + "sha256": "c2384964c9ac9e5ee2c7218b19fe7bec2f02f95d44b33cf75f91c46c06bdf4f4", + "bytes": 3523 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00008/task-context.json", + "sha256": "4055f7194d3cbc3018e9ceab497c02eca15c14ac9b51532d6d626702d69741c3", + "bytes": 3574 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00009/task-context.json", + "sha256": "6313a77cb68e1172dc5945b52b4c058e59dfa909a29c51d925e0b312120eb77d", + "bytes": 3662 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00010/task-context.json", + "sha256": "1977b3f08bc4a58d6482c04620c375d5a0d25bf059620610f0eec8b4feab9b3c", + "bytes": 4057 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00070/task-context.json", + "sha256": "ef69ccd734e89b834d8f3a2ee5ff2de5e1b3d9f2933157ce9be2d9eefcb014ee", + "bytes": 4579 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00072/task-context.json", + "sha256": "13025a4ec3eed8b7f59093c357a0bbea27eec75a23f7f931c5da2762666810c6", + "bytes": 4535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00073/task-context.json", + "sha256": "25eec580e82676b1c5be258f09a4361b252a8bf0b7b8a51e34e663edc89213ba", + "bytes": 4482 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00074/task-context.json", + "sha256": "7feeee0a9c2dffe77b21c91b91f8ea5916a91337fe63800ab32d5fddb7628105", + "bytes": 4524 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00075/task-context.json", + "sha256": "74fa739be0a72e31c20314aa8fd86bcbaac03553cae96e1ff45172d377fda220", + "bytes": 4492 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00099/task-context.json", + "sha256": "098003b24895f0fa7b5fb7045872fc624aaf5e042cc61af128dec35b8e414037", + "bytes": 4537 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00100/task-context.json", + "sha256": "010e42bede90c628c5b1a00cdf3d1a0331fc66c6266b760f1dc8e7673e3f0612", + "bytes": 4565 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00101/task-context.json", + "sha256": "905778ae41fcae54ee2f0923e4b3259aa9758e2bc3bd611ed083d5966417538e", + "bytes": 4577 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00102/task-context.json", + "sha256": "d7c1e1640b3ad9bfdc07b4bc84edd517f1408854707593cd864d1a5824579b98", + "bytes": 4523 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00103/task-context.json", + "sha256": "e9e9dac3cce44cf0f6a3795928f6c5f56a0536fa5b49c8f55bc578c2856d6db2", + "bytes": 4551 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00104/task-context.json", + "sha256": "52978ea6814d414298b3e829746800a98b5957c1565c1310c157d6eb747ca082", + "bytes": 4656 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00105/task-context.json", + "sha256": "3e65396f0a1afc40ed546f2c5a7199a6555025a73f7e4d6357646f6ff8aa0431", + "bytes": 4629 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00106/task-context.json", + "sha256": "9b3ff28395e1b58fe792150f78fc99857eb8a8ed7ccbdea30d10868201c8504f", + "bytes": 4631 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00107/task-context.json", + "sha256": "7038a6c9e49843f3749193bb19e15772e0e1f90a801697b0c15be86d07101e84", + "bytes": 4613 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/blender-5.2.0/source/blender/blenkernel/intern/particle.cc", + "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c", + "bytes": 173369 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/blender-5.2.0/source/blender/modifiers/CMakeLists.txt", + "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127", + "bytes": 6248 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f", + "bytes": 10138 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "sha256": "1944fbb1153eca61e4f6c8589f16fced60bfac7f4e96da1355428b263651e2ae", + "bytes": 126613 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "bytes": 240371 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded", + "bytes": 243066 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00158.md", + "sha256": "7cbb2c0af79def8810641264087eba11d45a8d6cf5d63710364dc6c970fea382", + "bytes": 563 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00159.md", + "sha256": "f93526ce6fcafb2734cbe1c86ecde24da0e94c702b711e72efa080a25201d84f", + "bytes": 582 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00160.md", + "sha256": "b363159100041b87476b7263631cbf91bf02a83795eb8ce78e019d71e888ce55", + "bytes": 625 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00161.md", + "sha256": "45a504a53e49b7e1df0d93b487125218aeaef5c5e227ba08e78f2681211a22bb", + "bytes": 584 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00162.md", + "sha256": "a510bffd34faf4ee5d6a4ed4c7e53eab5a249a4b3ce8e6ff5d5c0b8b06bd814e", + "bytes": 575 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00163.md", + "sha256": "08d4c8ebe07e9db2eefaba13d861bb5828316f2411117ab0604eb27cbd2308d7", + "bytes": 715 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00164.md", + "sha256": "a3f31d41ab5714e6ee808c241b92f409074b4c699956df655026af1a1cf1b1fb", + "bytes": 785 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00165.md", + "sha256": "e1248ff14af9e870516f009da7e64fce0b5ae9ca8da87725d11d2f3424e03399", + "bytes": 765 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00166.md", + "sha256": "212de0356fd48f2696bdf4004758d0bee9c55630a9563adab88c6772b7248d67", + "bytes": 859 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00167.md", + "sha256": "fdb2aec90eac4e9fda1907234d7ecda51c2c09ed05f2d23dc2809fe3aeb6c06b", + "bytes": 744 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00168.md", + "sha256": "e1f398011436d8673616ae1412746b16b92e687a8601ee16d9e01ed5fe9bc9bb", + "bytes": 707 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00169.md", + "sha256": "6270aa94f27514e4ce112f0daa7cc7fc4f6507d53055bc7f42f5a0e9fe254e1a", + "bytes": 737 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00170.md", + "sha256": "07ff672b4319741a3e8fefb9b614b1ce3176a957212200d84600e99e8c65848b", + "bytes": 701 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00171.md", + "sha256": "79b24742a11e7456b82154b13ccae7d2b57dc4b3ed4493d77ad4fc36c894e443", + "bytes": 699 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00172.md", + "sha256": "7b6f81442dfb91ad7eaafcd293dd8cfecde3750f2d9ad50b6a5d8b19e4430846", + "bytes": 718 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00173.md", + "sha256": "b97b46a2f391fd6c00adb3369652709f1fa447a9a05a931a0817ef81800805b6", + "bytes": 934 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00174.md", + "sha256": "ab5ff18f67b8aeae1b2c2e41b15f9d0a27eb0db61904f07a582b77b9a6576782", + "bytes": 1013 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00175.md", + "sha256": "7a5a2a5e308ce9804db350cc06fbdac36b959892a1f2245531fc515388c0146c", + "bytes": 806 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00176.md", + "sha256": "f40dac4690310310d87b5cf020995ad109daf4c9167ab953c9d001c31c7e84b8", + "bytes": 764 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00177.md", + "sha256": "c87a6acb0b22e57107bae051a9d8ce524ae296363a6e3f25fb98bc8872bf03f2", + "bytes": 657 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00178.md", + "sha256": "0525407475c3c4cc8ed880d29fe077b178017f3710c56002558bd032362808d5", + "bytes": 1027 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00179.md", + "sha256": "c1d842b67de5e7275d040a033eb5cd16319ec2c5f77e1b67ed1d55b1c9e0dc4e", + "bytes": 1006 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00180.md", + "sha256": "6af17dd941fdf1f76753ee23a18f97689b7d9719c37ce8714628b0acda11fc5f", + "bytes": 1058 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00181.md", + "sha256": "16ef18b3c2a4035e283a5a9af1968d0250763a0a3a2b52fb5a8f4f05821968c2", + "bytes": 1310 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00182.md", + "sha256": "43e96981d4987ee1b32b07ce6053bca47b50106526d8e932e2b67d0005b576dc", + "bytes": 1288 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00183.md", + "sha256": "e583e704854dd1eca1fa5c672c3184cef8e2433138628aee92b11fb8a3345f98", + "bytes": 1270 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00184.md", + "sha256": "44d3f28d968aae9c4315f08dd7581cca309347a839e20db4b8f19288bfbe706e", + "bytes": 1181 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00185.md", + "sha256": "de8e22ea2619605053b10e19061de49f94ed241fba16c8b7aa0b0099be3a3b2b", + "bytes": 1247 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00186.md", + "sha256": "1f2f3ec3947f4593dd5204d1058a125127f396013063a8fa0d447c189f4f50ce", + "bytes": 1234 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00187.md", + "sha256": "16c75cd97e157bcb23bce603f7e27f6f095ce1c76c3f11501355a9431472e691", + "bytes": 1333 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00188.md", + "sha256": "bf958a16b78eae1da59438bfac089fcf16197982a23d91dbcd6d386942bc6425", + "bytes": 1297 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00189.md", + "sha256": "f57b7b340a8c137afda5bb04daa4a71de372e2b0bd74fdb692029bea2da5e7c4", + "bytes": 1264 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00190.md", + "sha256": "59def4f8ecb6005d53b5f1b335da97abf89a21f55ceb3589bd87493e2d06b9bd", + "bytes": 1205 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00191.md", + "sha256": "c4d82279105c2e1821577084e539495d09bd99de99eaefadc1f23ed95841a333", + "bytes": 1097 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00192.md", + "sha256": "1367262e064964fa586ffe5c09ee1702f9be0d7f5f55f5794d54a48ebe8c5349", + "bytes": 1120 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00193.md", + "sha256": "f5510b2a17b16c1ffdd873b30c0b397b25d6d1660eb7f16cfcbcfdccbb4ae668", + "bytes": 1081 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00194.md", + "sha256": "54a5b5384704b1a16d541cbc6d70c98001495cb010fe1f9235e73d23a0fc2d9d", + "bytes": 1061 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00195.md", + "sha256": "cdb8e80052164365b81fb210701cd5283ea022f219eb1a1e14d561ef178e7420", + "bytes": 1073 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00196.md", + "sha256": "b1a31309d96dc8fa456c95e45e78aa192472f84573a8ab9ad21bac1a047a3a8c", + "bytes": 1103 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00197.md", + "sha256": "5f9ee54b01a17a8c4554d58c4f9f415a7feac5790a56aa2545a560ffa4ef2362", + "bytes": 1120 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00198.md", + "sha256": "7bf5d2f34a6fa5b19efca51fe360358da8e8030419fd78687314e690598125aa", + "bytes": 1206 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00199.md", + "sha256": "920d779ace3658975b5f2451fb48b644f7d64ce81129b89d6e1eb9fc5ac6e6c9", + "bytes": 1125 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00200.md", + "sha256": "314c2534f8291496721d190b7345954f1e7e9218b9756d1b6bfdc4486a112b9e", + "bytes": 977 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00201.md", + "sha256": "9b5e2b1a31558340dc633d476fb379bd4bb460b8d246f4b2b4576b1734b3a95b", + "bytes": 926 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00202.md", + "sha256": "2e3f248c5393a4e17b060d48f73f553764a66f224d38a3aa29252a66dc0cc475", + "bytes": 1125 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00203.md", + "sha256": "0504f0cc178ce3f7d3678d0170294f3fdc5c0c0ff40458a9891ef471e8bded96", + "bytes": 1103 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00204.md", + "sha256": "9f42dcc4c93fff48d9f1c739feb9df5f0000f18ef1a9ea11644207534cc3a9f8", + "bytes": 950 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00205.md", + "sha256": "504475606c2d54e38587d7880653c6328666b9731c29857dbc68d127a6249d71", + "bytes": 1013 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00206.md", + "sha256": "28a15b08f7d20ec17fa242954206715e1b8a50bb7ae1391c9a187119aaf8be26", + "bytes": 1077 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00207.md", + "sha256": "6cb10e433730afa5fea28840824d849c492461f4b5b9350a41d5a0f995d4f504", + "bytes": 1086 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00208.md", + "sha256": "957439dbc9be432dbb8187be6e3b2f12a27665e4e344a87897d51008380e7bee", + "bytes": 1134 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00209.md", + "sha256": "9c436780681f0309420bd6c3e9def7e970e483175b4183e691320d5dd73cc108", + "bytes": 1108 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00210.md", + "sha256": "1a2fb7129a562a6ca35ae61159d1cf28c3069be6a121d738d4b621138033e8ab", + "bytes": 1086 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00211.md", + "sha256": "73b13a7c83a37e2edbd5498035987f542538d49650812b4cbb8ed6b27be85cd4", + "bytes": 1028 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00212.md", + "sha256": "6007b1fe88b4bc38d416bf092d9becd2a8e30a50a56f12f19b6c62ee515a34af", + "bytes": 1256 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00213.md", + "sha256": "ee58d81b60550da7abf3a6f6a99cf53d33e5570fcaa7c49bed46db66ecbb9b4d", + "bytes": 1268 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00214.md", + "sha256": "67c9c89f921f7c911bfb5172da5eefa1fe68a9749b41e61b55383d63ba65de6c", + "bytes": 1227 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00215.md", + "sha256": "9bdd9c23820e98dfbb1bb57c2c1c7339f07e54c4abf2ba06d5b18a3fc0c0762d", + "bytes": 1037 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00216.md", + "sha256": "8e4d7487a830aa736ca668bdffc059ab4bc366fd65f9ef159d10905ed3e27a37", + "bytes": 1172 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00217.md", + "sha256": "a735bae8a60c2d32b47221d4f5547489808daa8e939c7dec4bd7c729eeb23a3c", + "bytes": 1023 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00218.md", + "sha256": "44c52e0bbeabf7ba66894db6f51f04a5ab793c921483796176568c5d25f97711", + "bytes": 1057 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00219.md", + "sha256": "66adfb1390f39daeeedc52b0db0cfe1a4542af738ea6c5944a292faa53936e57", + "bytes": 1045 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00220.md", + "sha256": "5c5274c86b019432f5b22e474947272001ad2af14b2437b577578547d2230511", + "bytes": 1089 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00221.md", + "sha256": "56727977918f6e76af983feeeff59da94ea0e1d020569acfe6eb5ff8fcce49e4", + "bytes": 1032 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00222.md", + "sha256": "61664acc268f0ddc6e53aec409e07b907dcff1e4bd75882f0b2fd0c92ad0c989", + "bytes": 1055 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00223.md", + "sha256": "4067ee986f0ff940d8ec7ba937bbdf4b7f81eab5779a3cbdd7287dbb7fdc6de5", + "bytes": 1171 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00224.md", + "sha256": "25f0a2dc6478e179122efad2467952a0e75eb5ff0437e0c0f2b3639f034d744c", + "bytes": 1096 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00225.md", + "sha256": "3330f1d33b17b920a261497023dc4ca06079837f69ba39251ab8d48a31bc73c0", + "bytes": 1092 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00226.md", + "sha256": "e4d4e214d2f1fd8c1872978d18ce28bee65fc7c4ded0c6869780af0343d12d5d", + "bytes": 1129 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00227.md", + "sha256": "e92da7d66c4674271bbf2a43d524145b19926e1d919eacb27e4afc9ee3ceab51", + "bytes": 1146 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00228.md", + "sha256": "347c7884e48c5ca488105422e401c93d7b2569886a43230c6d26afa103700132", + "bytes": 1164 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00229.md", + "sha256": "938515604dab298a7d7d5f02a89ca3b587071db63af3aad1c7327873196ba14d", + "bytes": 1117 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00230.md", + "sha256": "1b3945852e234096ae9be98f83bf3e6d647b06a0811346afaaab5c657501f9f6", + "bytes": 1089 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00231.md", + "sha256": "d03df95a10f54abacdb1d45c6e6b186c61211fe8ebf6e710b22349e100f1801e", + "bytes": 1185 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00232.md", + "sha256": "2c00d0f68f961158b9cb931a2071f83d7e2a402a7078789260c9263fcd7cae3d", + "bytes": 1212 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00233.md", + "sha256": "7f05db1dbd06d1570d98aef79177784423fc73706dcd2c6e967ba5aff294c0cd", + "bytes": 1380 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00234.md", + "sha256": "68beffb770ac5633f4b3ce112fc9e623702eacfe86ad3bbe0362158633ba4d4c", + "bytes": 1146 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00235.md", + "sha256": "eeace6c617236ea29331ba7824d85f30fb84d674e1a3ef385da4b22c632fa2eb", + "bytes": 1296 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00236.md", + "sha256": "de335028bda9f8c51d13d244e81c3c1952cd074bddc74896c8cf5554389f9aa5", + "bytes": 1224 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00237.md", + "sha256": "9f3084ee5e5e0c6c195f71590e51e8294790164272a4592e8cb60982fc037ad1", + "bytes": 1232 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00238.md", + "sha256": "a0cd13391e19a1b3acb3e84608cccc9805b0e11b9c7c791a94b3f47731381077", + "bytes": 1273 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00239.md", + "sha256": "06f69cd41bf79caf33eeb65b3ee0a14dca930bfac46984ce2b2b3c01a53218d7", + "bytes": 1289 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00240.md", + "sha256": "e50e0e1f6cbbbe7ca87686fa32b554bd1e9027452139638c055966cfad1a0b35", + "bytes": 1298 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00241.md", + "sha256": "3a467ab859b73c7ebd3258c6f15f15ba2db2b197c8bf4a2441d7bcfdac26e06c", + "bytes": 1340 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00242.md", + "sha256": "fb18cd303bcd1455f363897d6e2d34320a81156c1a096ec6ca0560e3f59e3cbb", + "bytes": 1307 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00243.md", + "sha256": "3fa12d4941b7ea5131682f3727020b2bd45bb6ddd15368d42bb723002e1c9e2d", + "bytes": 973 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00244.md", + "sha256": "efdfd1529460078ff569106961bd018f6ae75a3d9aa17da816639448268be17a", + "bytes": 998 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00245.md", + "sha256": "bad2709c02906d0e84d1771308245f3c2e3d52b3b9436719efd3d47155c0eae0", + "bytes": 1005 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00246.md", + "sha256": "5cc88cc19daa3fe9ad1a50f568d0d482c71c8b535a2e8bf024625bc7d9ca4592", + "bytes": 957 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00247.md", + "sha256": "26711b27363845b086c413d07119622c93ef468f28f412576842b1f809f6b5b6", + "bytes": 1040 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00248.md", + "sha256": "fb619f3dabf2d6f3593417893901d0eac7d73ccab4b836ba1824834bf6d46a95", + "bytes": 935 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00249.md", + "sha256": "99656df59b260315621efa7792d2e4eaee6709ff434058d848c86b6b9a674771", + "bytes": 952 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00250.md", + "sha256": "dcc9e9890aa1e9bf5df7f2c91155c98fcce954896258cad6b2b4778048e502d2", + "bytes": 946 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00251.md", + "sha256": "67e04c31b88c5821592269c0f629dce00cf675bef9bb0879dd78d6818127f92d", + "bytes": 1070 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00252.md", + "sha256": "3a8cf46d4f0b5efae6dfbdef3ef8ce808dd603d3a80146b15f0b2f95dabfa302", + "bytes": 920 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00253.md", + "sha256": "e6627177fb89e16a7c18efddf495d46e01a0d1d70d14f324813a05dc5c9fdb6f", + "bytes": 906 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00254.md", + "sha256": "711b0fb2e6dbbc12a25d1c5ad19ea3a3085d9b7fbfac45ef633735053479dc19", + "bytes": 926 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00255.md", + "sha256": "0dba82e5720f86c24fc442bb14472d1f2a14929df2652566d0b0bf0db7ef101b", + "bytes": 887 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00256.md", + "sha256": "cd01bfc800c3e3f8931793179a8c73070318f49129f36c9d62cfebef36dc6134", + "bytes": 885 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00257.md", + "sha256": "6da68ce35f3ff17a22f5f5378c503304fe8e28ab65a73ff0eae35125c94600d1", + "bytes": 876 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00258.md", + "sha256": "d4d7b7a215c7acd495971e9dbe1c41bc5ee500d7f9f1f02c4ce0c6241a7edd58", + "bytes": 908 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00259.md", + "sha256": "cdcff44be62d2d855e75d393c79883034d78784471191fefaf25d999e34587e7", + "bytes": 842 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00260.md", + "sha256": "fdf1a22b08d328a15a7fb473034cc058530ee5fd28a227098db0577b02a5cc7b", + "bytes": 715 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00261.md", + "sha256": "6a8177d5e252433cff846d1febe3e98759861118e7c7dcbccfb6dacac3930ce2", + "bytes": 714 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00262.md", + "sha256": "011e5786081b22f6e706f3efdb9e7ce3d2422ab499be32ab7875d50986e26e3e", + "bytes": 730 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00263.md", + "sha256": "cd501a7510dd967be05d259465ae7bc9a2144122770b95cf951627e10341559d", + "bytes": 830 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00264.md", + "sha256": "57cdac22f8e6e6bb5e233b4568e9d06885869341fac96ec5bd8e717f040edcac", + "bytes": 989 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00265.md", + "sha256": "377f5180ae25d3912237ca1b3283f0a5f9d5292fe28952515918ec22467f8d9f", + "bytes": 948 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00266.md", + "sha256": "5173d19e5d61195f3a6b4688d607274a099e47b5c2bcbc39d0ed1d6ad5caaccb", + "bytes": 956 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00267.md", + "sha256": "2784e307c2f4747a99dfecea527d413b5aea42c640cb2e5f0e5d3636619a8874", + "bytes": 1050 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00268.md", + "sha256": "7556cb0df348aca6d83dadc3d155e5ab9d9403e1e470f765acebcaa851a7d058", + "bytes": 1010 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00269.md", + "sha256": "6c65ae2c6884a89c9051b13d5336cb9e8c454ccb8e9ed8d80e84b09ef84db0c7", + "bytes": 1022 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00270.md", + "sha256": "293a56ae16f499b98784f05b12d1ef0ec4e9a844763ac1515b1c11d7f26fdcd9", + "bytes": 1013 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00271.md", + "sha256": "d660b0ec53156000900bfbc2794d583a321788acba6298de35f228cf8cf6111b", + "bytes": 1016 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00272.md", + "sha256": "522fe8b32558b75f87488fafe11ebc17994bb9742f24663c5ea5a85d64e6598c", + "bytes": 1016 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00273.md", + "sha256": "5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8", + "bytes": 1030 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00274.md", + "sha256": "e77fcd7c5e95a64df591af09cee6dba5a3f60c1616f39a3601841f0d88c4fe3b", + "bytes": 1330 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00001-datablock-Action.blend", + "sha256": "cb921e862eff1dcf68f22d77ef8558679207203ace0b80239a5bc5874ec2a551", + "bytes": 86769 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00002-datablock-Armature.blend", + "sha256": "b7d1c05b70e97be9a70890d45fea60b143073462d2a4f62eb3cc607bd2d665ca", + "bytes": 87320 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00003-datablock-Brush.blend", + "sha256": "f1f6922c4c9c31542a9cefad6932d616ef5dcde0067c0a9668f67902023f4f80", + "bytes": 86159 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00004-datablock-Camera.blend", + "sha256": "c637587ce3011cbe9b038ab87803a9a2f945d4512b55d616a5dda268628988a0", + "bytes": 86379 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00005-datablock-Collection.blend", + "sha256": "c33d2b1b85b0272aa3bf06a012000db5f383a9a73b79bd4b90042110b70a912b", + "bytes": 86454 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00006-datablock-Curve.blend", + "sha256": "49af45a70c7e050277a9b4b643c41aa9f29978b1df5214b5e48dc629b0027a21", + "bytes": 86153 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00007-datablock-Curves.blend", + "sha256": "d6489313473ced7f55cc1d43f3fa73181672c0a5db4b6854002f18354ca1d9a6", + "bytes": 86489 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00008-datablock-FreestyleLineStyle.blend", + "sha256": "94de965ad54018f7072f2b4f4b752dc6f28f6608836040dc353d18d19fe31fd9", + "bytes": 85885 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00009-datablock-GreasePencil.blend", + "sha256": "3a8525077807f9178dac3a5ba84b524e5f8e80874b15c54e2a6658ecb80315a3", + "bytes": 87788 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00010-datablock-Lattice.blend", + "sha256": "ec40e2661e20c8f7e3b18d9b42f9e585175be8c2f210a1c8c190e76a6e9fbc63", + "bytes": 86081 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00011-datablock-Library.blend", + "sha256": "d6b00d6cdc0c1c73158ba91433d8344f4b6b0a2f1d5c81e57cc4e0b42d23c34a", + "bytes": 85914 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00012-datablock-Light.blend", + "sha256": "b92565305572d48cc2311b749d50024f1df68c4084ae8bc52ce2ba2c3832a3fa", + "bytes": 86529 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00013-datablock-Material.blend", + "sha256": "e17880024b28e0fbc8fac5b815a2c673fe11d5000cb1d23a794cdc3d83658d76", + "bytes": 88264 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00014-datablock-Mesh.blend", + "sha256": "1676a26f95de4eb90e55ea169a497c382ca68f195c6b883de49b6a3223d84bb5", + "bytes": 86393 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00015-datablock-MetaBall.blend", + "sha256": "b4901e5c71f10b79a2061bf7599b43ff1b20b7df59f227aa78c1e66a38080b4f", + "bytes": 86061 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00016-datablock-NodeTree.blend", + "sha256": "7075a345a9991d456fc2c6cc68b3a836fc837dbfd99328173f0018b59e0e483c", + "bytes": 88360 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00017-datablock-Object.blend", + "sha256": "527eefc6ea01671a21634a3191790a8228038dd72a0744b6f00969be048e36ef", + "bytes": 85914 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00018-datablock-ParticleSettings.blend", + "sha256": "1a51117f3225e6fb1aa98fd135fc39bbfb9444f741f89956c52bc3e0252fc6c0", + "bytes": 85999 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00019-datablock-PointCloud.blend", + "sha256": "57ef80323ae70ce21842c00b3777e8ef484b7e332a6645c165fd5f029a522089", + "bytes": 86126 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00020-datablock-Scene.blend", + "sha256": "c12826c7a71f092ee8dc3c32495be295dae95f1f96e6b8310476893c7c76a81b", + "bytes": 85789 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00021-datablock-Screen.blend", + "sha256": "0975c534e78b6a05c7c10adc7313cb611a3350cc3c7f6e9bfd4013c334b9f376", + "bytes": 85718 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00022-datablock-Sound.blend", + "sha256": "42785a635a7ac560a01e00135555c31e20a60c454ffb62a466da25ddbe3b5c39", + "bytes": 85859 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00023-datablock-Speaker.blend", + "sha256": "6e422e16f6e020af7ab0a6f3fad3c721b42c924c8a0392bc98546c3f39ee9d23", + "bytes": 85935 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00024-datablock-Text.blend", + "sha256": "7999f758dfbf7b5984f16464d1e5346d806c54c83ca68a583df54942c5e3b7d3", + "bytes": 85906 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00025-datablock-Texture.blend", + "sha256": "482857e3b3868f7d4dc87d9b53c5552d10d608ed26a301cc5a6a080b275651c2", + "bytes": 85833 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00026-datablock-Volume.blend", + "sha256": "725ee2ac502aec3ffe6fc91bcaaf9ce1c8225dc71b3162b10db8d598bed0b8d0", + "bytes": 85843 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00027-datablock-WindowManager.blend", + "sha256": "88052ddeb5b8e35ce537910d9ce3b005b92c58b001f9b74a369a3c854ccebb23", + "bytes": 85714 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00028-datablock-WorkSpace.blend", + "sha256": "fbb4fc85b46a30dd8913e5d2d75b73688cef1a3f64861337c7fbd94a687c87df", + "bytes": 85705 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00029-datablock-World.blend", + "sha256": "33501247b59cec137aa857b0bd4ea59526f30bb3632de9996e6026d4bd3f0401", + "bytes": 86353 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00030-modifier-ARMATURE.blend", + "sha256": "4725dda93e7bece9fb121a5cf91856c43ac043a598c038b297eef8aad95d2552", + "bytes": 86858 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00031-modifier-ARRAY.blend", + "sha256": "ff8619e63a5611dbc78599f849d27f0e4e2dc3c1c5849e9db86349e00106c23b", + "bytes": 87078 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00032-modifier-BEVEL.blend", + "sha256": "3a27883c1faf12a8a0281b7c0e9747915784138efb24c0f1680b525cd50b84c7", + "bytes": 86569 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00033-modifier-BOOLEAN.blend", + "sha256": "ea909948fb2b92f288684886a3d488f74a707108dc94778e9a78a6cb082cbe38", + "bytes": 86903 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00034-modifier-BUILD.blend", + "sha256": "46b05aed641ab8cd6cc280587cf9672223190c2b730af8d8c21f1cf98cb68901", + "bytes": 86383 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00035-modifier-CAST.blend", + "sha256": "7dfe1faa6b605f6bd394f07c4da96a3e70401eeedd00714b3dbf533d0100ed4e", + "bytes": 86512 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00036-modifier-CLOTH.blend", + "sha256": "c2da02610f891f4de38f3b8d55929a599c84528d3c67317a8e698854367d2d74", + "bytes": 86552 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00037-modifier-COLLISION.blend", + "sha256": "20cd128c83e9729377864f496c85393a2090c72a22f7d1c0b15f834293100764", + "bytes": 86434 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00038-modifier-CORRECTIVE_SMOOTH.blend", + "sha256": "059890c5b228851c6e32643e71a142523cb1c0f02726a72902a6b88e24e71fbf", + "bytes": 86517 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00039-modifier-CURVE.blend", + "sha256": "b68aa51151cf19b1795701967eb1fa514387c04b967c646547ed33a727a8a58a", + "bytes": 86516 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00040-modifier-DATA_TRANSFER.blend", + "sha256": "5cbcab6db651f6b44387e6688cf02a8813aeeccb07e6fdc5fbb6e4ac34da050b", + "bytes": 86540 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00041-modifier-DECIMATE.blend", + "sha256": "24161163630d29eedb3dd194070dff9b5a4f762f8a0ce4889b9e6a5310e54153", + "bytes": 86540 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00042-modifier-DISPLACE.blend", + "sha256": "d6314c42a4bccfe4ff125bf19570bd8b52eb196f3cd3dfc82fcad21a5390ba76", + "bytes": 86522 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00043-modifier-DYNAMIC_PAINT.blend", + "sha256": "f715974fc528ade28e3658a9468a36ba2ac8605f009c284ada97de3dec5091f1", + "bytes": 86512 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00044-modifier-EDGE_SPLIT.blend", + "sha256": "825b593e3792dbb69379ae5d83713226fe8818317c1b68285a19e9070bd76bae", + "bytes": 86521 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00045-modifier-EXPLODE.blend", + "sha256": "f05a2ee7c15544e1b39de2a35fd6eee19a31deb821ca56fc642418c939e28b12", + "bytes": 86513 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00046-modifier-FLUID.blend", + "sha256": "e5061df121df88e723c87360ab0ccef630ada11c31183f11d6ee17114ad70690", + "bytes": 86520 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00047-modifier-GREASE_PENCIL_ARMATURE.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00048-modifier-GREASE_PENCIL_ARRAY.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00049-modifier-GREASE_PENCIL_BUILD.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00050-modifier-GREASE_PENCIL_COLOR.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00051-modifier-GREASE_PENCIL_DASH.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00052-modifier-GREASE_PENCIL_ENVELOPE.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00053-modifier-GREASE_PENCIL_HOOK.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00054-modifier-GREASE_PENCIL_LATTICE.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00055-modifier-GREASE_PENCIL_LENGTH.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00056-modifier-GREASE_PENCIL_MIRROR.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00057-modifier-GREASE_PENCIL_MULTIPLY.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00058-modifier-GREASE_PENCIL_NOISE.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00059-modifier-GREASE_PENCIL_OFFSET.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00060-modifier-GREASE_PENCIL_OPACITY.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00061-modifier-GREASE_PENCIL_OUTLINE.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00062-modifier-GREASE_PENCIL_SHRINKWRAP.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00063-modifier-GREASE_PENCIL_SIMPLIFY.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00064-modifier-GREASE_PENCIL_SMOOTH.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00065-modifier-GREASE_PENCIL_SUBDIV.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00066-modifier-GREASE_PENCIL_TEXTURE.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00067-modifier-GREASE_PENCIL_THICKNESS.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00068-modifier-GREASE_PENCIL_TIME.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00069-modifier-GREASE_PENCIL_TINT.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00070-modifier-GREASE_PENCIL_VERTEX_WEIGHT_ANGLE.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00071-modifier-GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00072-modifier-HOOK.blend", + "sha256": "9fee2803c1400f07d4a58fb05a708b8e5bdf878820d636c57cecbb6deda9adec", + "bytes": 86521 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00073-modifier-LAPLACIANDEFORM.blend", + "sha256": "d4a01fc520b4641442f56506a5a320d4c4efee57fcec779021cc10d17d62e1e0", + "bytes": 86523 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00074-modifier-LAPLACIANSMOOTH.blend", + "sha256": "0f1ff155e600a04f0a717584716ae1ca5811ed9642354494a26c2a8d90590b99", + "bytes": 86545 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00075-modifier-LATTICE.blend", + "sha256": "907149629b82fb0289da70535b29cea8bae0b24d745b92c0d4116a3a24b95494", + "bytes": 86504 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00076-modifier-LINEART.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00077-modifier-MASK.blend", + "sha256": "62d3740eb3c43d79fa8018e992d0f21dc1b0efac5f8e41965a9564e0c765deee", + "bytes": 86507 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00078-modifier-MESH_CACHE.blend", + "sha256": "7c381314e4b8c95aa2b01acbd2f8ec0664bb27264dd6c6dd6456602adc42f6e8", + "bytes": 86412 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00079-modifier-MESH_DEFORM.blend", + "sha256": "91d67a1b79c80b452e0637bc515030c8d8a2bb23d88399029ca57160f7facf20", + "bytes": 86406 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00080-modifier-MESH_SEQUENCE_CACHE.blend", + "sha256": "817ed4b1a395d83b8166c84206f6dd7fef22a7c1dd8b62f85414125f4a5a927b", + "bytes": 86419 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00081-modifier-MESH_TO_VOLUME.blend", + "sha256": "52ab00ddd22c609f59f06c3747700b17f5b970ee4980dd287076446d289439db", + "bytes": 86084 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00082-modifier-MIRROR.blend", + "sha256": "0ef4742c3f30a3bbb59cd1924e99d22f57454c77e625c9ccb4ecd802559d8842", + "bytes": 86417 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00083-modifier-MULTIRES.blend", + "sha256": "6cad4d91397b06ba4779ad5336056e7551774c4f96261f2e8d3dd729c81b7b52", + "bytes": 86396 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00084-modifier-NODES.blend", + "sha256": "b8e7982ab3969a297ff8337fcdf966004e845189a2dfe5480ea60aecca3493b7", + "bytes": 86398 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00085-modifier-NORMAL_EDIT.blend", + "sha256": "e0d6b77f0bc97f682534efce4c0901a056bf5d9a104525e634c53284ddd858aa", + "bytes": 86406 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00086-modifier-OCEAN.blend", + "sha256": "1b6a43508676777d94770f3fbbee33161a578ed93ad7054bed48ff91a96ecae1", + "bytes": 86471 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00087-modifier-PARTICLE_INSTANCE.blend", + "sha256": "d4f4667cac6061406c5a7bf8231fdaf9e6ee589ee57d168b21fa9347f90395da", + "bytes": 86412 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00088-modifier-PARTICLE_SYSTEM.blend", + "sha256": "b0e15d7d4821cd9b60e977686142f7bf26c197c6f76c31c59d5dbe06fa5316bf", + "bytes": 86762 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00089-modifier-REMESH.blend", + "sha256": "6cf821a751ef19f4719d29a7c73c3d5acefcb381c5d8afb61673ca4ec068a70e", + "bytes": 86403 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00090-modifier-SCREW.blend", + "sha256": "3cfe313b349aff539f46496c520b04696842252655f8d15230c9a7b24b857d2c", + "bytes": 86396 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00091-modifier-SHRINKWRAP.blend", + "sha256": "05047e750c6b03b39ac18a3090e450960092ed0ab03a61b649ca11c0a0b5aa85", + "bytes": 86404 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00092-modifier-SIMPLE_DEFORM.blend", + "sha256": "3be9ab1afb8c518382aa329797e0a4b7369ab7f01cab6fec1481fcda187062af", + "bytes": 86407 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00093-modifier-SKIN.blend", + "sha256": "e24d021bdb48b6a17945b1b6c6a1933ab3a9fabd321775f5bf0313bc6e7797f3", + "bytes": 86438 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00094-modifier-SMOOTH.blend", + "sha256": "2e416d62faeeb22313d56ba073cb184618f80b751cf31f100ce8e0c78565de02", + "bytes": 86496 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00095-modifier-SOFT_BODY.blend", + "sha256": "2bfd58334380f70c1309ebfd00c092c531bb7b3921620e799c57752c7ee5596f", + "bytes": 86559 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00096-modifier-SOLIDIFY.blend", + "sha256": "0b319df9e6c4f677728af992114196e4fa29f80effabc01b3dbfd639bc2b66d5", + "bytes": 86420 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00097-modifier-SUBSURF.blend", + "sha256": "f0c3e9801b4138c3701599e24242374dbb6217f223e2decc7c04d5558094108a", + "bytes": 86391 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00098-modifier-SURFACE.blend", + "sha256": "41aa335359773ce72a3f372784d1fbf74a1ec65c077652f0cb98d34793edc937", + "bytes": 86387 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00099-modifier-SURFACE_DEFORM.blend", + "sha256": "cb459101d9ecdd4e5761a3e216dcf3eda99a09eaad5642573ef0ba0b4c063072", + "bytes": 86421 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00100-modifier-TRIANGULATE.blend", + "sha256": "4475c06ab20bc9f9f771556173e7d5782049548dfcb845e7febba79c27f5ffcf", + "bytes": 86387 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00101-modifier-UV_PROJECT.blend", + "sha256": "e5cf137ee1feddf7b03f287b04299a7a78177b58e63545ccca15c78f202ce2a4", + "bytes": 86395 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00102-modifier-UV_WARP.blend", + "sha256": "ad3f2ba8f4d282b2333fc192f3e2fdc598c06125f3b14c9c47b4721f9a1a0df9", + "bytes": 86398 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00103-modifier-VERTEX_WEIGHT_EDIT.blend", + "sha256": "2ecafafb8d81c27842512406dd93978754f624f0e9012e4a2036d32eac1178b2", + "bytes": 86454 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00104-modifier-VERTEX_WEIGHT_MIX.blend", + "sha256": "19a164b591a6fbe02df07797c422aea350e26f1e9125589037067f609095105a", + "bytes": 86411 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00105-modifier-VERTEX_WEIGHT_PROXIMITY.blend", + "sha256": "53234cfd0e10e91b78465d8f18a4b8d863885d1d93c0757c07f0d31da486fbf2", + "bytes": 86460 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00106-modifier-VOLUME_DISPLACE.blend", + "sha256": "95a922b90fb5bce90cb2f7995761805709a4a18b9206fab7f30e3848160b2c95", + "bytes": 86077 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00107-modifier-VOLUME_TO_MESH.blend", + "sha256": "fab68f64a3d9bbf1b224393518bc43a454601eabf8d936020aee5b478012356f", + "bytes": 86415 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00108-modifier-WARP.blend", + "sha256": "a328ef4b4cbcf265de0483012f80860fccb75e53fcb25bd6ccbe81dc97cb0ba5", + "bytes": 86403 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00109-modifier-WAVE.blend", + "sha256": "41c81c36b176656e08a33c9c428da5a257c11ab6e9f0f8bfa530336b7ab159a8", + "bytes": 86396 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00110-modifier-WEIGHTED_NORMAL.blend", + "sha256": "26469e905bbc2c52467b4b1361f80ffb75b756206974724debbae5e06fd363f0", + "bytes": 86410 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00111-modifier-WELD.blend", + "sha256": "fa82df1cc06f762f90acfd62c6172c631534838342d971e2ecba931d9bbb4b14", + "bytes": 86394 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00112-modifier-WIREFRAME.blend", + "sha256": "b1952474708ab9f56145f661b3cf5562dc0535a5fa0fe6903c71864af73b0641", + "bytes": 86399 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00113-operator-action.bake_keys.blend", + "sha256": "6253d0f8f008dcf8881bae4326d09648d21977a844c0f604c1a4773ef8372931", + "bytes": 86996 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00114-operator-action.clean.blend", + "sha256": "edd9074159f387a456bc1eb7bb37053fa63038532b928de849378fdcaab9d3e4", + "bytes": 86804 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00115-operator-action.clickselect.blend", + "sha256": "862548b70dd61ae3a132854a495648a2e265df2997054cadd1160e135ec3f059", + "bytes": 87093 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00116-operator-action.copy.blend", + "sha256": "d291508ed19a9ba575908253a13310eab58dffa168cf07b401816f2ffd6a5448", + "bytes": 87090 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00117-operator-action.delete.blend", + "sha256": "5112a074973e086eb2eaa00e604786dc2d7b8dffb1691de800c9dde97592de78", + "bytes": 86816 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00118-operator-action.duplicate.blend", + "sha256": "090e668d61cbdf9a9618c3f592e8337b1776386ab71dda115aacd3591e5a2718", + "bytes": 86896 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00119-operator-action.duplicate_move.blend", + "sha256": "1a40c2e579708731f99bd4f25d255acb3be51431c86fe19d89f741043e4dc085", + "bytes": 86906 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00120-operator-action.easing_type.blend", + "sha256": "828206cdfd525388464e7ec281a9968c96a7add8cca8db275641031e14627caa", + "bytes": 86877 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00121-operator-action.extrapolation_type.blend", + "sha256": "39c4559926b71ed7b364b6f618c6b19c215d23031b994460d0180537879ff10f", + "bytes": 86924 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00122-operator-action.frame_jump.blend", + "sha256": "332f117de8b826abb0d044715daa2d01a203b03080c61aaed7671ef67fa2da44", + "bytes": 86875 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00123-operator-action.handle_type.blend", + "sha256": "69281e445ba7741ce639dc98bf115e265e52bdb4900d82de9b25c70e6cd9d42e", + "bytes": 86907 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00124-operator-action.interpolation_type.blend", + "sha256": "b05e3fe799dd077db20569b98a6849800e4d8e5b1b95b2018ccef70f3d2e77ca", + "bytes": 86881 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00125-operator-action.keyframe_insert.blend", + "sha256": "0ff15cd87241927e76bbcfdfdc6048238467b3e09d2e9d304d14b3858f2d95a7", + "bytes": 86896 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00126-operator-action.keyframe_type.blend", + "sha256": "a99bcef879a29da4f423a3efc67ab5f497beef3927ad2e65fcb9ae556826a81a", + "bytes": 86863 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00127-operator-action.markers_make_local.blend", + "sha256": "767f97663e2fd45d8491b1bf8cea0a9a628faa9f4b14993d65953e90f27d7a12", + "bytes": 86876 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00128-operator-action.mirror.blend", + "sha256": "92ab7f13ff0f250d0c173bc3db5d21fedab4bfa7ff4b70c66b4f12af5039a8e5", + "bytes": 86910 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00129-operator-action.new.blend", + "sha256": "9d189452cbc1e0cf6c87093f7fb6ffc8728def0ac3bc976a4a3be814d42f10e5", + "bytes": 87114 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00130-operator-action.paste.blend", + "sha256": "fc332fb6c877fb7a39fb418416168cce6637befba392dafb8b18ca17fb2b66c1", + "bytes": 86900 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00131-operator-action.previewrange_set.blend", + "sha256": "8b0222547b3e31480dede4804353edd4d056cc806ad2cede24c73e81070bb9b6", + "bytes": 86898 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00132-operator-action.push_down.blend", + "sha256": "e3e933bfc5595d288a5ab2e2f0e661d76474aff88b33d0acc62f7e540757e2e9", + "bytes": 86944 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00133-operator-action.select_all.blend", + "sha256": "f7ebc1bb7b45d6838d6e2bdccc809f2142a70cb3a9c9ecabcc5e1b5a91426526", + "bytes": 86850 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00134-operator-action.select_box.blend", + "sha256": "100744edae87b08ef300ae23ae4a5556dd6576f1a5d30630967475736e3a4ba8", + "bytes": 86871 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00135-operator-action.select_by_type.blend", + "sha256": "3069eba61f2bdfa1c772afc62c075a06a95a803888b4213078d6dd1a68aa6bf5", + "bytes": 86891 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00136-operator-action.select_circle.blend", + "sha256": "16ae2413cd86d4fa8df384ef1e2d167c4e79caa48114b5b12facd33e1ca37b8b", + "bytes": 86883 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00137-operator-action.select_column.blend", + "sha256": "01b13092985f0c672a5ac639ce1e556caf8c405ed3574249b0c4680aedecdc27", + "bytes": 86891 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00138-operator-action.select_lasso.blend", + "sha256": "d3ef22466ef1615aeb2f96ffbb70e8a2a13ca7ce9de7fac91e75101ab01415de", + "bytes": 86894 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00139-operator-action.select_leftright.blend", + "sha256": "ed6f8c69f70b5dcef868fffc9381395c7884401bbe24fdd8d9984557284e66c9", + "bytes": 86867 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00140-operator-action.select_less.blend", + "sha256": "3acc7908b362f9c224e825c5429b59d549a77dab4e2b45b285221e5c54fa0c2b", + "bytes": 86865 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00141-operator-action.select_linked.blend", + "sha256": "62ddf7e0141f7bf5b0bfbf85b8faa0cb0ae602681f70e2c5e979db033b14056f", + "bytes": 86861 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00142-operator-action.select_more.blend", + "sha256": "9f0a3fad228c1a7200cd9ac76af24fb8a853dd261f49ef2186491690713ec726", + "bytes": 86855 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00143-operator-action.snap.blend", + "sha256": "d12a490f3d76a0b599f4fdffbb2dd65e01d0c637a2de6bbe78a44b887676995a", + "bytes": 86847 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00144-operator-action.stash.blend", + "sha256": "7d617c7e82a5673eedd2f48178a5991066a276a2c149f7be92c5f5975adc4234", + "bytes": 86955 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00145-operator-action.stash_and_create.blend", + "sha256": "f7b2dc080c9aa23cc45b9a2c59114f23ce3f1369f00618c9ef51569516692f38", + "bytes": 87002 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00146-operator-action.unlink.blend", + "sha256": "80d5a85825c441b1835e82af730df148dd664fbae988aabb9aab6e74ac605f11", + "bytes": 86881 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00147-operator-action.view_all.blend", + "sha256": "ef2a4fd9a28a6a97d40b258beb11f8e00899c4715e0ba6e0703a25aecd678ec5", + "bytes": 86846 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00148-operator-action.view_frame.blend", + "sha256": "142f7036c4c1a196ae0affc43fd62d6a196576898ee969f9aa83655917e0960c", + "bytes": 87098 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00149-operator-action.view_selected.blend", + "sha256": "108a69ae276722c4d9396deb51f7f1909799d48ce310d82675305a59b1196fc7", + "bytes": 87111 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00150-operator-anim.change_frame.blend", + "sha256": "04ba48b6b81449b47cd8c038a012518f773dbfbe542ec29861686cf9a1a0cedb", + "bytes": 87111 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00151-operator-anim.channel_select_keys.blend", + "sha256": "f8ed4706c765c28e850c752bf4fc367b815c298b574cbed741997a5770826b43", + "bytes": 87099 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00152-operator-anim.channel_view_pick.blend", + "sha256": "e3a0c3158f43b96f05006d54b451614754d0fca9a07fbcc3b1c9cc3a4e076d29", + "bytes": 87117 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00153-operator-anim.channels_bake.blend", + "sha256": "1818a2a90d3eea5b38ad4d6e3cb1bd0394022ca62a8384734cefc36305d884eb", + "bytes": 87182 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00154-operator-anim.channels_clean_empty.blend", + "sha256": "8e1c2b7578c3679a5c1ad63aef3a621f7a6f8c486598c936076a81fc19728c7a", + "bytes": 87446 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00155-operator-anim.channels_click.blend", + "sha256": "6ebd45981b70fb1a915008d4fa4d8c574b02bf5440b49e93e16792b819a721e5", + "bytes": 87124 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00156-operator-anim.channels_collapse.blend", + "sha256": "6b6c488604fa8dd8ec8e79f97961a4e74f6ca673a14658dd890a0b85e18a4dc9", + "bytes": 87090 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00157-operator-anim.channels_delete.blend", + "sha256": "c5355b82bb3ce08f8a55d436eb47e2e8cd49711c6518e016c13345c5a8683876", + "bytes": 86834 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00158-operator-anim.channels_editable_toggle.blend", + "sha256": "6a983e51050eb6a6b8300c153216a37d61a16e20c09716405c6d9a96912a612f", + "bytes": 87112 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00159-operator-anim.channels_expand.blend", + "sha256": "7e8658f9238b0cfbb08775388cddf2f7e453c6a2683fe908974b0dd55a852ca7", + "bytes": 87114 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00160-operator-anim.channels_fcurves_enable.blend", + "sha256": "091c8bd8ceb6206cd7ef7f5d8cac03dd4ee554c4ec13f588e8b9ef5933c24ebf", + "bytes": 87103 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00161-operator-anim.channels_group.blend", + "sha256": "dfa3cbf7b6511926f549134cfd157e2c4350d9f2f4fa5c30dc01ada3dc071cea", + "bytes": 87091 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00162-operator-anim.channels_move.blend", + "sha256": "d75500ad33614d2ebe9cf705757971cb76556ae18b77b1064e13420f514f41ea", + "bytes": 87080 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00163-operator-anim.channels_rename.blend", + "sha256": "e26a89d3f532f3bbcb62036d20a5c6eb82331591cb7db7e3202a750870087e24", + "bytes": 87123 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00164-operator-anim.channels_select_all.blend", + "sha256": "8931b05c45cbe7109d5c14fff6b753ab6cea2042bbdfa86dcadb0ae8762aa0fc", + "bytes": 87114 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00165-operator-anim.channels_select_box.blend", + "sha256": "3f11ff84cbe69116b6b008b9c5d12f35e7796c2f571776f33025bb068ab46ccc", + "bytes": 87102 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00166-operator-anim.channels_select_filter.blend", + "sha256": "2d21685dd8ae6ad9658d1ee910acb36645d3cea7c6bf0f674b8437790d0df727", + "bytes": 87110 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00167-operator-anim.channels_setting_disable.blend", + "sha256": "849ad29b595845b1f7f17dbfab50adc616dcbe0e47c1e57d5238e32e84a3a7b5", + "bytes": 87116 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00168-operator-anim.channels_setting_enable.blend", + "sha256": "7bc30ee108b1f7f9ec5422ac855b1467a8231336cfb67d47898ea6f27618aed6", + "bytes": 87113 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00169-operator-anim.channels_setting_toggle.blend", + "sha256": "f346c3480ca423d8174798cf97020fe0e6659d54c5c21fff1b5028b159143560", + "bytes": 87107 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00170-operator-anim.channels_ungroup.blend", + "sha256": "edc38bf325e129aa9dc1ff8f1563aef552eff06acb64d3f1dcd539277db18b6b", + "bytes": 87064 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00171-operator-anim.channels_view_selected.blend", + "sha256": "31ea53097e3624a267b733b2d07c768aaf588d72c87268b7e5980371dfcb57ae", + "bytes": 87134 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00172-operator-anim.clear_useless_actions.blend", + "sha256": "f5467c45c551de275b2a97c813b82fc8cf2dd5ae4fe93a5a3f07dd22bd4a8b79", + "bytes": 87523 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00173-operator-anim.copy_driver_button.blend", + "sha256": "473f5f6ddb99f8244bb9218bf3bf9a5f7b9b6e23847bdd546c22427e904de84e", + "bytes": 86616 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00174-operator-anim.driver_button_add.blend", + "sha256": "088331e435e3f43c0db5077f2fff300f381db761076ceaa922f21ec599041221", + "bytes": 86672 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00175-operator-anim.driver_button_edit.blend", + "sha256": "40ee0435bc330c7d1baa8d40150f2cc4f62ec4cfd195cce2e0e73ad006f7131a", + "bytes": 86619 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00176-operator-anim.driver_button_remove.blend", + "sha256": "292203abee32979f8fcc7568b78e66846d5d6280c194fcfa5c7be56170247012", + "bytes": 86464 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00177-operator-anim.end_frame_set.blend", + "sha256": "b86b4daff038a40e597d1814a021c28fe6cb65e09fb7cfc9ee7bc59f665d9809", + "bytes": 85580 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00178-operator-anim.keyframe_clear_button.blend", + "sha256": "75aa5f056fc9afe3562ad101a7f3b8aacf93ad54fae06519b236b5fc345831b6", + "bytes": 86642 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00179-operator-anim.keyframe_clear_v3d.blend", + "sha256": "0e079b73025f3623872e92c1e961e012cbcfaff4a64b2c7741a2ff08c935afdd", + "bytes": 86603 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00180-operator-anim.keyframe_clear_vse.blend", + "sha256": "e2ef76b206578af5a77919d7f9625ca76ec58bb0a5d9074f907ced31cdd96c4d", + "bytes": 86461 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00181-operator-anim.keyframe_delete.blend", + "sha256": "0d6d1e45f430c051e4ecaf1f799f4b7666fa8311e2abf188502cf9cdc0011855", + "bytes": 86782 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00182-operator-anim.keyframe_delete_button.blend", + "sha256": "8e62660db44872553a7f32f5965afe7811e69261425beba97e6e29cdd5575073", + "bytes": 86755 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00183-operator-anim.keyframe_delete_by_name.blend", + "sha256": "ea5a587aeeabd6692977d5a7660bf49bb7134d4fc81e8ff1a3fa9acd8a75026c", + "bytes": 86770 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00184-operator-anim.keyframe_delete_v3d.blend", + "sha256": "56cc035995506dfa6c68efced79708c11dc50a20ac3d0e7e9ee59fe29e741995", + "bytes": 86712 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00185-operator-anim.keyframe_delete_vse.blend", + "sha256": "c01f342471fcae64138f95287363f0e801c4da96992aa4a3d8a4173b0ec0f464", + "bytes": 86629 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00186-operator-anim.keyframe_insert.blend", + "sha256": "582dfb8c8dfe6897937afa687d5ebfdb4aeb2e3ae7db73ed02cf6385745bbf70", + "bytes": 86814 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00187-operator-anim.keyframe_insert_button.blend", + "sha256": "5398394b340d509043a2e8130249dbbb0736fa540c833a303445c07c9f775e9a", + "bytes": 86812 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00188-operator-anim.keyframe_insert_by_name.blend", + "sha256": "b0be38528561fad722c52000ced9b4c44bff594d5fcf134ab89295ab8b97554d", + "bytes": 86813 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00189-operator-anim.keyframe_insert_menu.blend", + "sha256": "8c34e11c10c2de3de7209006c87594db1a1df0b62a6f9b92dac45f2cb176a52f", + "bytes": 86801 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00190-operator-anim.keying_set_active_set.blend", + "sha256": "54d342c6054339281d8d380e01eb64f038e4735626a69248de66fadee34fbcae", + "bytes": 86889 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00191-operator-anim.keying_set_add.blend", + "sha256": "a87db22a399c85cb282baf65a58763df7656603df9571bc34cdece31ef439187", + "bytes": 86785 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00192-operator-anim.keying_set_export.blend", + "sha256": "ff0342e9d493bc8b20d85acba9177c7115d77f5f515e1d70fc1caf056957c29f", + "bytes": 86891 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00193-operator-anim.keying_set_path_add.blend", + "sha256": "4e14a61ca8cd86b528747d576aa89ff8dcd3c9d3b8f52625a46ff5b7594cc107", + "bytes": 86860 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00194-operator-anim.keying_set_path_remove.blend", + "sha256": "b1161cfd0ac095844825cb2fa19fcbe9819bce552d02535f2d32deef3c8cbb79", + "bytes": 86865 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00195-operator-anim.keying_set_remove.blend", + "sha256": "d4fa5993c2580e5521cf2ee66817c416f50de82f5ec4e32298e52db14fa0a9a9", + "bytes": 86811 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00196-operator-anim.keyingset_button_add.blend", + "sha256": "2e49572a29dadcdfdae956f7e16bd465c5de06bf8ae94ebdc11da8b1821eb562", + "bytes": 86863 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00197-operator-anim.keyingset_button_remove.blend", + "sha256": "21b52146f8466fb9fd9ca9073d611b6052f7cbb89399b926d8db6e950883e61d", + "bytes": 86831 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00198-operator-anim.merge_animation.blend", + "sha256": "0c37b1290f08b1ad872efdf8a52c795d24778a1ecab516ea749ff2ae858bd2fb", + "bytes": 87247 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00199-operator-anim.paste_driver_button.blend", + "sha256": "971782396db424a9b427f7fb9d9d1495ddc572a2ae1bf7b7b8c3320f5d8d77d9", + "bytes": 86601 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00200-operator-anim.previewrange_clear.blend", + "sha256": "c9b586fb0a87f38c4fb1e4e1834805fda1345549ecdc558702080ea66af65a9e", + "bytes": 86336 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00201-operator-anim.previewrange_set.blend", + "sha256": "91d61fe3989324a23db7dabbb178c7b0a963af155c117c57859a24e4c415945e", + "bytes": 86352 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00202-operator-anim.replace_action.blend", + "sha256": "f29c88ecc031b1a56c68cea244417035bf8744db5baaab623627e6dab889f956", + "bytes": 87690 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00203-operator-anim.replace_action_new.blend", + "sha256": "dd278ab743c34b61566c20e545b90e42bcfe641ecbb523550fcdacea188f12b4", + "bytes": 87267 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00204-operator-anim.scene_range_frame.blend", + "sha256": "aa332513c910b461ea53db9c6f8c6de2801c7b79bc84c083c366360aec2a36dd", + "bytes": 85932 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00205-operator-anim.separate_slots.blend", + "sha256": "55c92c2622d2b532060fae13fc9fc035b8d936f21ff766b6b49938632140fd82", + "bytes": 87353 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00206-operator-anim.slot_channels_move_to_new_action.blend", + "sha256": "4dddfa7e19686d28ea2e6918bb7221943ea26a4ba8831d7fef0736ee8fd52534", + "bytes": 87458 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00207-operator-anim.slot_new_for_id.blend", + "sha256": "55feef5fa86ba311964057b6fa5b24b5362fa7c2fc9ab061736c4fec6927a532", + "bytes": 86860 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00208-operator-anim.slot_unassign_from_constraint.blend", + "sha256": "517bba0bc6e4dfab4eeafc9d902de560b76360718789a06a6417d9e9f8be7df9", + "bytes": 86531 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00209-operator-anim.slot_unassign_from_id.blend", + "sha256": "69fb5253dfd28f45ea25f29947d08afb4513e222105b4b8bc94a5b6be05b7238", + "bytes": 86803 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00210-operator-anim.slot_unassign_from_nla_strip.blend", + "sha256": "4740a95b74bf2d4f71af7019158ee116643bf6cb315ff6a31717fb6894c3f2e5", + "bytes": 86885 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00211-operator-anim.start_frame_set.blend", + "sha256": "d2f5cf3f5c3603b0d811c9df3581c10b5c28e3f80adeb30319b079bd95567a36", + "bytes": 85586 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00212-operator-anim.update_animated_transform_constraints.blend", + "sha256": "116684a811bdc591c554c5a8f259d995ca9ba49b102e8ccb79f1a03741fd28f2", + "bytes": 86923 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00213-operator-anim.version_bone_hide_property.blend", + "sha256": "5455d4f3f44ccc40db7ac379d5c6d4bbb099c3861a348237a1541697597956c1", + "bytes": 86812 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00214-operator-anim.view_curve_in_graph_editor.blend", + "sha256": "405825a29d3bf69cd85e461bf0c1a727631febe354b11ed1fd722d72f0faaea2", + "bytes": 87074 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00215-operator-armature.align.blend", + "sha256": "772ad751d2ad898214e27469c451ab44ce0463bb99271b160b70f57941e9b419", + "bytes": 86317 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00216-operator-armature.assign_to_collection.blend", + "sha256": "be79a2c05b090aaf1e7ce9f777a6adea68b5fb6b7750ffe130eebf2ab4608b43", + "bytes": 86423 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00217-operator-armature.autoside_names.blend", + "sha256": "9dafd4489858ab080988c474877d6e9a9e5a7884b8e00d42c070b7769d2ed57f", + "bytes": 86309 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00218-operator-armature.bone_primitive_add.blend", + "sha256": "b6857f1212fd591bc78dea3451ee38da3547a3415c32637f974c8187bfd28f73", + "bytes": 86250 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00219-operator-armature.calculate_roll.blend", + "sha256": "7c6f851456147c2e69de3ddf1136885ccff9bd907cd480a5af5fd81f5769c862", + "bytes": 86240 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00220-operator-armature.click_extrude.blend", + "sha256": "7b9ded05ba9a6bb02b729ef474ec3f37a67f41fa0e8da53c7e3c58a56b64e065", + "bytes": 86415 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00221-operator-armature.collection_add.blend", + "sha256": "a081193e2c16de9c072b0b7cc57f9d7b5f3f12863fcb2f06e16641cebdcf0b34", + "bytes": 86279 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00222-operator-armature.collection_assign.blend", + "sha256": "c742316be6dbd00fe3d5caf804b41067839a344a0725fe3c3aa78d1ebc024b8a", + "bytes": 86283 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00223-operator-armature.collection_create_and_assign.blend", + "sha256": "a028eb51fe9f4e81778cd5e237820c050c88588266cb39cd2a0fb4b15d33c8c8", + "bytes": 86294 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00224-operator-armature.collection_deselect.blend", + "sha256": "1a8405355bb6fda930f31f396f9e34ec97c95ceed4b639fce9522c1e82f73b7f", + "bytes": 86420 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00225-operator-armature.collection_move.blend", + "sha256": "ae87b298fce55732961119fd8a36568c137023eed9002c26a9575578d3d983b5", + "bytes": 86467 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00226-operator-armature.collection_remove.blend", + "sha256": "1e3ba5e46b8b45ca974b93b0f357cc5305c787032564ecbecfc9e1ae4e8ff9d5", + "bytes": 86430 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00227-operator-armature.collection_remove_unused.blend", + "sha256": "0c898c98dc011e51f086cda66e3af03a08a7b1f27eb0e76f40915f18018a6d97", + "bytes": 86356 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00228-operator-armature.collection_select.blend", + "sha256": "426b86f668d316254e06ff11f6fe59cd79d99216772573d17b2b74187d3ea6ea", + "bytes": 86518 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00229-operator-armature.collection_show_all.blend", + "sha256": "b50107f0d15d2f0be497ea8f69385411f8354d04b1907e7e6382600d5e885795", + "bytes": 86447 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00230-operator-armature.collection_unassign.blend", + "sha256": "b1f942b4b3eb548ce6a4ebeb62fb295cea9ce038ef69a34d60d7c54a9c2c8882", + "bytes": 86283 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00231-operator-armature.collection_unassign_named.blend", + "sha256": "452747b1003c527ffa6538c8d0aa48957968f57d8b8d61451c3a43c59f88abb8", + "bytes": 86292 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00232-operator-armature.collection_unsolo_all.blend", + "sha256": "be849eaac644443d8db0318d176767a3f861ee0309b69aff2a130decbf56b21c", + "bytes": 86446 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00233-operator-armature.copy_bone_color_to_selected.blend", + "sha256": "d5ab14cabded3332b4c882c1eaee7f9966a41155d2623bc73f88917d0639634a", + "bytes": 86391 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00234-operator-armature.delete.blend", + "sha256": "52c3c28c6cba72d0b40c32bc46b4d5894482f05b2ee621e44efde6999008556e", + "bytes": 86269 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00235-operator-armature.dissolve.blend", + "sha256": "951ea935f05ed06ced6ea61d4a9293e7dd3226902ea6ae3c0c466779dcbcf24b", + "bytes": 86289 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00236-operator-armature.duplicate.blend", + "sha256": "fb0ddc4b599f05941c6d719be3eab14f354755017f574ca9e6984369474b42a8", + "bytes": 86362 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00237-operator-armature.duplicate_move.blend", + "sha256": "18332d833556dc395719a7badd2c2fe0f5630fa1f9b809399ae0ebb4edf47f19", + "bytes": 86393 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00238-operator-armature.duplicate_rename.blend", + "sha256": "95b9236be44ca3e40482203032ce2fe14a8ba79f5d94396d9fa7af2ab5b711d1", + "bytes": 86313 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00239-operator-armature.extrude.blend", + "sha256": "f4b86c585af6349dc43c50e23c93a482917145ba0b5bbd9ab3f8a7cf5018e661", + "bytes": 86358 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00240-operator-armature.extrude_forked.blend", + "sha256": "bf0a7def9d8ff9c30218d5f11a23f533b777bfb02e35b1bf87f0c9a285af637f", + "bytes": 86397 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00241-operator-armature.extrude_move.blend", + "sha256": "3959f29bfef358c9a7f10720605b9706bf03830f18ae713e4409b6396b3ea18c", + "bytes": 86364 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00242-operator-armature.fill.blend", + "sha256": "b7f20bcc4f7a6045bc38fdec9394872e399a55f3de9e4081b40dde3b911d770d", + "bytes": 86429 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00243-operator-armature.flip_names.blend", + "sha256": "b21a9ececf220be55c9d17d99c7fcbb0fe43b2fea6ffac88eb4eb34be1ebb5ba", + "bytes": 86395 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00244-operator-armature.hide.blend", + "sha256": "1a3486ca531e5f679886228539fc841d5afc7c9eb7315fb0d5f31061d5f26aa4", + "bytes": 86303 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00245-operator-armature.move_to_collection.blend", + "sha256": "81ce010acf7df4374101651e498eb1ef4fdbd31aa79e395fcab17667cea2d6ad", + "bytes": 86400 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00246-operator-armature.parent_clear.blend", + "sha256": "c6b8c2871a84389b732ff63c320e1e6543e832f69a89aa7af8cd0049fbee82f2", + "bytes": 86343 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00247-operator-armature.parent_set.blend", + "sha256": "227b3294c94147755638a6542955fd7a57ad2a6e6a7464bed2509eb7a5ab6b19", + "bytes": 86366 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00248-operator-armature.reveal.blend", + "sha256": "5f1ee7176f2d030247abb278a66f79cc6b7fc49fd6650b2dba7cc349e2b0aedb", + "bytes": 86308 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00249-operator-armature.roll_clear.blend", + "sha256": "74c3bebdac81def2d5dad922854b06c1c0b112154605a955628754bf5eb3cef7", + "bytes": 86204 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00250-operator-armature.select_all.blend", + "sha256": "5a271a11ec041966bbdb02724d632b1a1ec4db2207038fdbf3fffbd8c3d6de8d", + "bytes": 86286 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00251-operator-armature.select_hierarchy.blend", + "sha256": "527167dc4d5c40e18196b8b63818373494bf28efd9592ce1ee28b790aecad9c4", + "bytes": 86367 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00252-operator-armature.select_less.blend", + "sha256": "6c10d6a2bfb01565d415740efcb5366433cf1ddc722392605530769e6a8f729b", + "bytes": 86377 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00253-operator-armature.select_linked.blend", + "sha256": "dfc4b49ad0c1165e771368b99c7cf589890586ea4f6b142aa319a42ad9390316", + "bytes": 86468 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00254-operator-armature.select_linked_pick.blend", + "sha256": "10e4053f9aea2a2cad6314e3ab4d981db9bc4281933c1172ad77247f4c6500fd", + "bytes": 86478 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00255-operator-armature.select_mirror.blend", + "sha256": "af187a9ffb0c6b8f422fd0da0896699dcde8209c8d5d6fbf807ba72cc4a64abb", + "bytes": 86324 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00256-operator-armature.select_more.blend", + "sha256": "7acc23a6cf8bf14d13c3e1571106d62e3ddf8fcfd6af910009da833672ec6242", + "bytes": 86474 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00257-operator-armature.select_similar.blend", + "sha256": "72ed76cd6970d683de6c528a653e8279bdeec13f8f1a4a2e8bc9c8b2f63cf94b", + "bytes": 86368 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00258-operator-armature.separate.blend", + "sha256": "e995623dfaf3e5a34b4843beb5291f82144501d7a6f0b53a4ffada844440d269", + "bytes": 86391 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00259-operator-armature.shortest_path_pick.blend", + "sha256": "3b213642cef60cdc96fed3e14846125b06ca80b53d89fdb3a08c3c60f7a454c6", + "bytes": 86467 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00260-operator-armature.split.blend", + "sha256": "e5e2497024c8f9738caa5badff72f38130c061a2b27cfc610780bf0a97992b9d", + "bytes": 86342 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00261-operator-armature.subdivide.blend", + "sha256": "b29bcbddbc05f2ec1443699a9348abcbe52531f2fea5b03e51286ddb8305c2c4", + "bytes": 86372 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00262-operator-armature.switch_direction.blend", + "sha256": "385ebcd486385b6b68a7c7294e111af2b0f4d334247ff3e933f2c1433321cd17", + "bytes": 86409 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00263-operator-armature.symmetrize.blend", + "sha256": "fa490213eee2cd604d52d435cf446cdaa37ef882602147893c9f9f999cd43f2b", + "bytes": 86394 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00264-operator-asset.asset_download.blend", + "sha256": "79332080394950857a3b99087140aba51df6ad2fd731e314af67c473a48602b4", + "bytes": 85874 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00265-operator-asset.assets_download.blend", + "sha256": "d2c09f34febbef1db3de830c37c33c1f7de8d6fc7ea1ef2aaf9eed7de243bb27", + "bytes": 85879 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00266-operator-asset.assign_action.blend", + "sha256": "6cefa4e22e0e8d5b2482cbe62c36e10cc58f51fa94fe843e6b953c438479fa98", + "bytes": 86324 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00267-operator-asset.browse_containing_blend_file.blend", + "sha256": "29e5e42f3ebe458a4ded1d1a7a0a1cd0fecb50867b193ee3ec98485df36e7d61", + "bytes": 85938 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00268-operator-asset.bundle_install.blend", + "sha256": "64dd97ac23f70c83261635fc2337555b62818b92ffedee60cb13f3335851a994", + "bytes": 85884 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00269-operator-asset.catalog_delete.blend", + "sha256": "7fa8ebaf85c2bd474dcaa9e4ce94ad81665b501841d15c48e371bb8f033702a2", + "bytes": 85903 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00270-operator-asset.catalog_new.blend", + "sha256": "8c874d8ec51cb7cbfa787780ca7c8e636ce9a98b4998ef81ddbd9fdd34658662", + "bytes": 85912 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00271-operator-asset.catalog_redo.blend", + "sha256": "2e3481a9f155900774bbcc3e5d07ca65bedc2029e3281e86857fd943e81396cd", + "bytes": 85877 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00272-operator-asset.catalog_undo.blend", + "sha256": "fa003b726f82cf42dfbd5ae027ad6b6c8ff03bdcc337154d835cae241a1265cd", + "bytes": 85892 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00273-operator-asset.catalog_undo_push.blend", + "sha256": "f835a3088b975a283a99a69738dbf0ecc8a71b463b3c124da15ea6e54599256b", + "bytes": 85934 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00274-operator-asset.catalogs_save.blend", + "sha256": "7b8be4b5cc90415b7295fcd2ceb560761b6e0df2b17aff0e62a339c7e43dbab3", + "bytes": 85904 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapBrowseContaining.blend", + "sha256": "661f398dd346bc18484308b154845ca5d7d82af9e9e367767c2c1ef20f3fd369", + "bytes": 86346 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapBundleInstall.blend", + "sha256": "89537577e6e5939da73f37fb22d40ec336a30e7ad491043b4054b0b14e4418fe", + "bytes": 86339 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapCatalogDelete.blend", + "sha256": "137a558e0ac46a6b9c466b1023a871adb6666ec0de0f9756e041ce8858ed374d", + "bytes": 86329 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapCatalogNew.blend", + "sha256": "a12a6480d7254d290d0617e16f72c93ef4cbd043ebc004f94559436988a66ef2", + "bytes": 86327 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapCatalogRedo.blend", + "sha256": "53367b4765383ae0cf232e02eaca1fbf07407946a600c91cf8d1f5303e21d0c7", + "bytes": 86321 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapCatalogsSave.blend", + "sha256": "1036247ac5432b6d9f30bde8c080d470248ce2e840e5bdf7de7f08a64838204e", + "bytes": 86337 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapCatalogUndo.blend", + "sha256": "2ee954737c6f35b5f9af2eb5f350ea3e34a9ff6f491b8a4184ccb18875c6f3b8", + "bytes": 86329 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapCatalogUndoPush.blend", + "sha256": "448fdabd5281e25a949ceefdb0b76804f2a47d2d9e5b784f8f998f0be289fd4c", + "bytes": 86343 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapLibrary.blend", + "sha256": "1fe24e423713bc18dc936e723e97f7c306db4aa62cc24736055eb2d341375088", + "bytes": 86339 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M15-03A/next-task-plan.json", + "sha256": "2235d0d250d28e63ab1c9b0e956292560785cf340c612312b316be0ceb2463a9", + "bytes": 7095269 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00001/action-desktop-report.json", + "sha256": "f6bea0003a9e8eb25048797156bc0ab59b6a63d76ce4156283b6d9761dbfb0ee", + "bytes": 714 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00001/action-local-exact-report.json", + "sha256": "eb7a604af8b071c3186a39a30f3a9974a6fed03008751da5319d54d170b841d6", + "bytes": 735 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00002/armature-desktop-report.json", + "sha256": "970538d481dd9b2169c5e39e6901e6eeff0d9b2d26b42491837321841bcb4a5e", + "bytes": 853 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00002/armature-local-exact-report.json", + "sha256": "eeb775648b186a9728851b8cffa0fa9c41701de4a8142e73f6ad98ef050dc877", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00003/brush-desktop-report.json", + "sha256": "ca992c23e2c302ef0b85b91305eabdbf71da6b5bc60c49b71710d145d0787e09", + "bytes": 518 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00003/brush-local-exact-report.json", + "sha256": "e48dcad3974b94404d5d9f0c7222b6c45ea5f3b7a467ea2b88691a6ff50e22a6", + "bytes": 712 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00004/camera-desktop-report.json", + "sha256": "b11254b3e0cdeb5e5c39e350ea1d349f5e2991f8c62a5ad28f744c391beab3b5", + "bytes": 511 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00004/camera-local-exact-report.json", + "sha256": "a2b2c321efbcf2ed765f2e8b1019fef7e2cd34af872f78474d18594c6cee5d1c", + "bytes": 656 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00005/collection-desktop-report.json", + "sha256": "6e6bcf8e5575d46c324d51409d19be6f89e5397b1f094f528b164ea72c607887", + "bytes": 629 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00005/collection-local-exact-report.json", + "sha256": "2db40433007886b24f5ceb18dccf7470e0c393163838a11f2feb48bab516d740", + "bytes": 855 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00006/curve-desktop-report.json", + "sha256": "85e8eee37daea993653bfa1785f5df19f953c2d013543e8a27743ed74d49d4ff", + "bytes": 741 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00006/curve-local-exact-report.json", + "sha256": "048c9fb9116ab2a1b4460c74696340a263cd342ba4886ce56f8b03bef8743e58", + "bytes": 605 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00007/curves-desktop-report.json", + "sha256": "db15e64bfe202720b463ab742cbed2e6ec80b872456b825078afbba7a2540531", + "bytes": 444 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00007/curves-local-exact-report.json", + "sha256": "bf093708e23b8318e1f50b925b5c033d66aa8c1f97303174ad2489a82191705f", + "bytes": 568 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00008/freestyle-desktop-report.json", + "sha256": "2c42936cd8e4046b752f7e86949927769d1cb8f2086a2c9ba27eebf61a6f4a89", + "bytes": 670 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00008/freestyle-local-exact-report.json", + "sha256": "ab75a7fdfa71a4abd4a5e97f7e726440bde7891163c0b256be0815e1cc51a99a", + "bytes": 685 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00009/grease-pencil-desktop-report.json", + "sha256": "6a1145d7447a08f51d751dca797e67f2be7eb12cba052a726c4c2f8ee28b585e", + "bytes": 531 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00009/grease-pencil-local-exact-report.json", + "sha256": "94aaf84cc072ef13998517d610740d81d94c14593ba776ea7f4b88c673a0a71f", + "bytes": 584 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00010/lattice-desktop-report.json", + "sha256": "bb8effdcf18a89794914d88311a598b3285e64f18c402c9cff477ae5700ba089", + "bytes": 2496 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00010/lattice-local-exact-report.json", + "sha256": "489c9d25a6e4164860f5528944eca0e173f8a7e4130e89404b6fa09da9b469a0", + "bytes": 810 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00011/library-desktop-report.json", + "sha256": "0bc9032490f2450e99d30fd67fe95b164f8d359ca042d0e0b772ee1a28e39dbd", + "bytes": 564 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00011/library-local-exact-report.json", + "sha256": "82c3a7ebb204da9dd8f817f0378374be062993892a4405d01f81c960677f45bf", + "bytes": 750 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00012/light-desktop-report.json", + "sha256": "92bd381ec7b8242de6379d9e266ebbb63bd34c2d28e852d2ac7610eb7e67b8d3", + "bytes": 808 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00012/light-local-exact-report.json", + "sha256": "103958f99cc13fccef7acb4128f3707e48580c8ad86813821a2ce40986c5a964", + "bytes": 834 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00013/material-desktop-report.json", + "sha256": "7adfdd70f9b116268301e0bb6cf7e0b88cf8eb2ab20d25c944586df3a9cc000c", + "bytes": 923 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00013/material-local-exact-report.json", + "sha256": "229f3fc85518da4539e311e6ca70fd6b156cdcc9ae4c4b901e0de5c895b3d333", + "bytes": 771 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00014/mesh-desktop-report.json", + "sha256": "e26f0333707fa915b7261f305af413340f9edb26d050a82fb3c6afac12ee2169", + "bytes": 920 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00014/mesh-local-exact-report.json", + "sha256": "36066f715b9993f0e789e12a0d29f9c0c9e79e0b5ff5914268e839fa648cb28a", + "bytes": 704 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00015/metaball-desktop-report.json", + "sha256": "5b2b7d79397675792bf54b568646a1714f75fab355049e7227f634403345c74c", + "bytes": 931 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00015/metaball-local-exact-report.json", + "sha256": "7253a7de7d2aad035ef38cceee33c0bd04ca743f181f28ac740e09799684a636", + "bytes": 748 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00016/nodetree-desktop-report.json", + "sha256": "b1a6608a41fdbbaeb670dfc0222fbef3b6b73e3728add751564194dda1eb2924", + "bytes": 946 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00016/nodetree-local-exact-report.json", + "sha256": "8df89df7ef013b8eed71c19e748eff6b7288772a10f139306a87cb2431eb26b3", + "bytes": 779 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00017/object-desktop-report.json", + "sha256": "6c9b16af1d114b00df2711b095778eef239c27b55588063d68872434f08631fd", + "bytes": 700 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00017/object-local-exact-report.json", + "sha256": "38fbe19a794e05d1a05c0df5de7fca919c229c179ac59c452df08cc0c827ca91", + "bytes": 765 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00018/particle-settings-desktop-report.json", + "sha256": "5d1c855ee65c7dc8f715341ed0a2b1269aa1a2f6e3ecde5ca590f393af3042eb", + "bytes": 697 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00018/particle-settings-local-exact-report.json", + "sha256": "fb3eb8a193cbbf8ee8b98457042d560977e309ba1496903abf638e93c7641b6f", + "bytes": 927 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00019/pointcloud-desktop-report.json", + "sha256": "c3c874f8f5e95c97f2862d6b2c4711ac78a90f3a5de289bfdb9a5ae0459dc1d7", + "bytes": 711 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00019/pointcloud-local-exact-report.json", + "sha256": "e304b3dd36b08a43307f1dc2a70a14cb6b29214d324b18faf8d8225f7342b23d", + "bytes": 880 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00020/scene-desktop-report.json", + "sha256": "fc9fdf2a37f36327e7456d3c17dcfd240b67ce27d9d2f0861fde5db237b2675d", + "bytes": 614 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00020/scene-local-exact-report.json", + "sha256": "d964c61c0717865a42574c28d5e4fffdcb45c3c962e9bce4608c5f9438828504", + "bytes": 782 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00021/screen-desktop-report.json", + "sha256": "41a5d58883238d89e4e6ed3805b452bc165632b63e0065109529de3c0e230ecd", + "bytes": 582 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00021/screen-local-exact-report.json", + "sha256": "792206b5b046411d921b3b916d2b76222aab39050df8028a64c39437e285023c", + "bytes": 785 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00022/sound-desktop-report.json", + "sha256": "cb23ace7920d6762f931296701a596f3453ccfa7e966447d0efa198b92d65a69", + "bytes": 574 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00022/sound-local-exact-report.json", + "sha256": "741b67484c81c156c51b5b88e52f32d5e0114292dcbe689c641d2670cd4e82bd", + "bytes": 763 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00023/speaker-desktop-report.json", + "sha256": "8ee6e52568f2c37098a8f64983f90243b2df69df1c16a0c4eaae855a7e9fad9d", + "bytes": 807 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00023/speaker-local-exact-report.json", + "sha256": "7d48447d03e39e5e29f41bf18a95040c5436ed73229cee1bdc32e09f7aae594d", + "bytes": 996 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00024/text-desktop-report.json", + "sha256": "50006b807fc8f41603e939f9f2748c4d5cacfcaa19a1c60a7270e9f9962b621c", + "bytes": 718 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00024/text-local-exact-report.json", + "sha256": "73c22077cbbe47e1effd7c24d310e43010fbd48925587cb00efe507838b4f1eb", + "bytes": 852 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00025/texture-desktop-report.json", + "sha256": "ead3d25554f69580a272c3a4c45139632592ba2ca83370c79174683b2c7a982a", + "bytes": 612 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00025/texture-local-exact-report.json", + "sha256": "4e503817eb7053370b627cc9a2edb03fc2ac8b8919534a90064133eaf9e0f4e7", + "bytes": 805 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00026/volume-desktop-report.json", + "sha256": "60c12879158b8a8e548a135778f90618cec8d42b39a95e460398fe6cfe563c86", + "bytes": 615 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00026/volume-local-exact-report.json", + "sha256": "649e2bace33f8d9708b3ce0b4979e0cd6e9a0b78b8f4ee2b75776a94e68362be", + "bytes": 881 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00027/window-manager-desktop-report.json", + "sha256": "2b50759c964b06b38410f44c11679616a8f172d5bc05bd2e5b54a416ec781c15", + "bytes": 537 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00027/window-manager-local-exact-report.json", + "sha256": "9e92475873db0072f32d708e6f1468387637fac39008c4928060c39a719a5dc0", + "bytes": 792 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00028/workspace-desktop-report.json", + "sha256": "4ab3274ecfcd512964db37e661f8b5e8c53077687094115c11dab4fbe39a12b9", + "bytes": 475 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00028/workspace-local-exact-report.json", + "sha256": "3b12cbb0533284f29ad1d0f4659ecd1ce128ae5b24545610819f994252b79e6d", + "bytes": 721 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00029/world-desktop-report.json", + "sha256": "2818f250b67524e0517ad117619a00fbcb09f51141c4f228e3c0095f0ee4afad", + "bytes": 785 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00029/world-local-exact-report.json", + "sha256": "22eacfe0c2fa9cdce05b0965fac8f8f59bbd17726a89606678a8d3ed804dbf4d", + "bytes": 1047 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00030/armature-modifier-desktop-report.json", + "sha256": "32ca0be514d0f5b02150c23a42e99784903da9c211aebb7f2736229daa069220", + "bytes": 880 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00030/armature-modifier-local-exact-report.json", + "sha256": "fad61c1ebb8396b4af4143e7079a7fc1db4bf3f7ff945ce4717650c5493510a5", + "bytes": 1359 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00031/array-modifier-desktop-report.json", + "sha256": "739ae5333a5046cd4b0c60333eec89bf4f0bb9508d95022238a173f4a698833f", + "bytes": 750 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00031/array-modifier-local-exact-report.json", + "sha256": "df9326e8ddbb5ace859ade67dff067229c55f19536c568ee6e102d981971c17a", + "bytes": 1318 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00032/bevel-modifier-desktop-report.json", + "sha256": "a6e1e88a9e418bb18b2a323285c0d05a07e6c038bf2cf4f7e04bfa188900daf3", + "bytes": 682 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00032/bevel-modifier-local-exact-report.json", + "sha256": "318d68f88e3838fc3920d33a8d1b2995411de39c9c2f39d97e1f2c3b4e7a7c1e", + "bytes": 1197 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00033/boolean-modifier-desktop-report.json", + "sha256": "2f0c9dfb183f39a65ef018d1618ef6f12fe05ada0a6c7ff40011491686ea00c7", + "bytes": 746 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00033/boolean-modifier-local-exact-report.json", + "sha256": "aa33f396b5910e3829c1965e62c80bd1267ac764a58862b72be555ebd5bd1b0d", + "bytes": 1285 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00034/build-modifier-desktop-report.json", + "sha256": "b05d06b2408cfa2b0509489434d80489e11d967748f48639d1d50febbcd64974", + "bytes": 725 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00034/build-modifier-local-exact-report.json", + "sha256": "6e5e3f89148decd1996802bddf903ee704700308be90e1af9c3c66e7e58796fa", + "bytes": 1180 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00035/cast-modifier-desktop-report.json", + "sha256": "46d920371f2b315034286e20db585b5830edde5c12f97470db05141acdfa3975", + "bytes": 745 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00035/cast-modifier-local-exact-report.json", + "sha256": "56d0c12614b99a60617ca6b3aaa8308c103b0d926c67ffa6d374713f1939923c", + "bytes": 1149 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00036/cloth-modifier-desktop-report.json", + "sha256": "bcfa83207cc5d5d6d971c41d8bb649d272c7e8f03e7499dc0efa4f3bbcb4d1ef", + "bytes": 618 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00036/cloth-modifier-local-exact-report.json", + "sha256": "37344e3d5c930fb6815016b03432a6f86a2e763a89546e2e435e0f957f99270a", + "bytes": 1091 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00037/collision-modifier-desktop-report.json", + "sha256": "be458864a8ce628d18002e69cbba9d524377fadff0bb7a3c3a6ed07a6fcb6bc0", + "bytes": 638 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00037/collision-modifier-local-exact-report.json", + "sha256": "3352147756f312df1ffb4b9c889347e74403147cafb770128c6fbd61810acc8a", + "bytes": 1117 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00038/corrective-smooth-modifier-desktop-report.json", + "sha256": "81b0dac10d007f32a7ccd1939fb82494ad230cfd09a5d5e3d9051716631a6012", + "bytes": 711 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00038/corrective-smooth-modifier-local-exact-report.json", + "sha256": "e0f51299b53f2694cc0421d249acc633d6d3db07d2302d1358927aab15981d0b", + "bytes": 1176 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00039/curve-modifier-desktop-report.json", + "sha256": "7758f93e53d1b01a80e7cc2d4ce4948cadfb6882a2eec0d34e7e9fbdc7ac69bf", + "bytes": 668 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00039/curve-modifier-local-exact-report.json", + "sha256": "7b3cf6ec8eec1a1b0c8d630578bfa09b29d8e8597ed860aa98737e7c7798cf91", + "bytes": 1203 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00040/data-transfer-modifier-desktop-report.json", + "sha256": "3b75a6318947c1c18b04af6a05bc275aac4f6fde4352cc249c431c64fde7174d", + "bytes": 691 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00040/data-transfer-modifier-local-exact-report.json", + "sha256": "45c8b9c2b0a07902e7680fc44b648cd0fc349e4a248c52824c3ed70debb0c9a1", + "bytes": 1148 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00041/decimate-modifier-desktop-report.json", + "sha256": "a056e81f2d0dceca465b185060d9874f4e0a10099b0820a42e50de3c20f56433", + "bytes": 824 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00041/decimate-modifier-local-exact-report.json", + "sha256": "ac3efd1614cd440aff79d370f61a8243a69feac82d9aa4afb2c2d2ac2196d811", + "bytes": 1301 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00042/displace-modifier-desktop-report.json", + "sha256": "8b5e69f2643e33607c36c6e786477d13c962eb041f64044be4b5d1277b2ad4a3", + "bytes": 783 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00042/displace-modifier-local-exact-report.json", + "sha256": "f29ae1fd8d9dd004194347d9ab9d138d9c10db71ffae8baba554748de835fe09", + "bytes": 1272 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00043/dynamic-paint-modifier-desktop-report.json", + "sha256": "d15d596c1c2fbf176c59b7fb933f6a2ceeb09ff578ba2cf894c12deec480471b", + "bytes": 691 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00043/dynamic-paint-modifier-local-exact-report.json", + "sha256": "e04b9f0427010f85ffd5119eeb2d926ad0fa5d7099c67807ba46b6e66db5b0f3", + "bytes": 1150 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00044/edge-split-modifier-desktop-report.json", + "sha256": "4f741f923ed60af4142691643fb70cd650b3e7c12507002595d8f52d78a41a61", + "bytes": 716 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00044/edge-split-modifier-local-exact-report.json", + "sha256": "114e41e7c6f3238d4888b61f2d9fd59b37d4a9a4f2f7485fd1a9b9a48c8ba9ac", + "bytes": 1177 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00045/explode-modifier-desktop-report.json", + "sha256": "6f2da8d3cc19177ceedef1e31d2ddd2bb73e061a40164393fb717050b442b43c", + "bytes": 663 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00045/explode-modifier-local-exact-report.json", + "sha256": "fdd2bfc6407872afbb3f1393b79c1d551f030f485ce4169863b07742c994122f", + "bytes": 1111 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00046/fluid-modifier-desktop-report.json", + "sha256": "5e2140d9a0e8089c6fe1f31f34bfe7fa8473f642556051598436cb78636d451b", + "bytes": 653 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00046/fluid-modifier-local-exact-report.json", + "sha256": "3e0adc749a8f15c52231fdd37afd01246b21d0c5630be569a0756b4f7d05194c", + "bytes": 1095 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00047/grease-pencil-armature-modifier-desktop-report.json", + "sha256": "aaa319ab7fc68ba6763c29b97659cb3a4f71425df5edd93dbd9aa5b998e96c1a", + "bytes": 705 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00047/grease-pencil-armature-modifier-local-exact-report.json", + "sha256": "0e343bf170e7cb7c0b61a20308a7034f3ced1572580c4f94074e162e14bfcf43", + "bytes": 1166 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00048/grease-pencil-array-modifier-desktop-report.json", + "sha256": "caf437b45e130c12406ce3ee8d699d7266673f8e595d63d017f5482c474f29f3", + "bytes": 693 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00048/grease-pencil-array-modifier-local-exact-report.json", + "sha256": "e583037d0c80eb40b6e511cb2b11feae3c9f5f0e1c0374727f5af6c8c1b0c6b5", + "bytes": 1213 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00049/grease-pencil-build-modifier-desktop-report.json", + "sha256": "e9d70bb6ba43a387d29683473bfc8286ab9818f771e796194a0344ed31bd00cb", + "bytes": 693 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00049/grease-pencil-build-modifier-local-exact-report.json", + "sha256": "b1df18f0aafe0a47ef55b7fd64ac5935020a99e45e58708cd7958d919d8fa558", + "bytes": 1213 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00050/grease-pencil-color-modifier-desktop-report.json", + "sha256": "79e44b5d0443f81d2ba334902990f73c20601b4c15e890aff1b73fae4879f771", + "bytes": 693 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00050/grease-pencil-color-modifier-local-exact-report.json", + "sha256": "73126cf9fc415f9eccf9538d1d23055857fa9c772e1b15721470e1653bc2ce73", + "bytes": 1213 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00051/grease-pencil-dash-modifier-desktop-report.json", + "sha256": "0c87ebea369c798bbb2f0f70f698066e482ce372eda0042008f9993cfe116bf6", + "bytes": 689 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00051/grease-pencil-dash-modifier-local-exact-report.json", + "sha256": "6da74df88b5ed5b1cb7cb64420020924143e30cad7c8f1efc11e62fd39b33dbb", + "bytes": 1208 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00052/grease-pencil-envelope-modifier-desktop-report.json", + "sha256": "4ce0e867ab2f8346e6121060c3f18c9a1f48e97c67dd5b9362c2eaca6e7e5f78", + "bytes": 705 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00052/grease-pencil-envelope-modifier-local-exact-report.json", + "sha256": "af02545ba19b116b4ce39b87aaab3f8e3e33504164694c04b1ec6da7f159ee59", + "bytes": 1228 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00053/grease-pencil-hook-modifier-desktop-report.json", + "sha256": "67b0ddf84c0d9690832b8aeae76b503572bf9ac725123254a95a351e55075c54", + "bytes": 689 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00053/grease-pencil-hook-modifier-local-exact-report.json", + "sha256": "eb44b966e835d186f5f05420377a00895764cee2b5cb379f3704f89aed334d16", + "bytes": 1210 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00054/grease-pencil-lattice-modifier-desktop-report.json", + "sha256": "565931e3614f74c666c375ae3d879ca85b4274d1bc980cd5480c877593d23a63", + "bytes": 701 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00054/grease-pencil-lattice-modifier-local-exact-report.json", + "sha256": "4d0bda74ab6c6667530fa5f64fff6944c316449b3c9f1c25d6c623d7523a5ed1", + "bytes": 1224 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00055/grease-pencil-length-modifier-desktop-report.json", + "sha256": "367ea4ff3cef4d5ec0e07b3f69f2f5a15d2604753b8efe9083775e97854af2b6", + "bytes": 697 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00055/grease-pencil-length-modifier-local-exact-report.json", + "sha256": "5715882f691e9022fc3049f1937b90e39d9e7702583f9a946b7aabf22e2093d5", + "bytes": 1220 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00056/grease-pencil-mirror-modifier-desktop-report.json", + "sha256": "60122c5212975d2a0de279415ea35699fa10c7c3b350ef991a2ef04c096c4e3c", + "bytes": 697 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00056/grease-pencil-mirror-modifier-local-exact-report.json", + "sha256": "ac905bdcf602af4f8d63e62ea78f251d737052c00aa4454807aeaa648344ea89", + "bytes": 1221 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00057/grease-pencil-multiply-modifier-desktop-report.json", + "sha256": "c891fa44f7623a0eb1dd8c848cace0f8289c0c181a03a400fce36aa1a020069c", + "bytes": 705 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00057/grease-pencil-multiply-modifier-local-exact-report.json", + "sha256": "5e9c1ab5db3f884cb1f78ce212e2714ea8500ddcc6691774092a745a71013e10", + "bytes": 1231 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00058/grease-pencil-noise-modifier-desktop-report.json", + "sha256": "04c853b535d820f10859c47d51901fbbf51c4a5cb7f7387cbf59bbebfc108a2c", + "bytes": 693 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00058/grease-pencil-noise-modifier-local-exact-report.json", + "sha256": "ce892ec22b69bd93060fcd8d29d91a97c68f75361bf9b782d73e502ecb7a6f47", + "bytes": 1212 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00059/grease-pencil-offset-modifier-desktop-report.json", + "sha256": "4119db33aad242414ed52d9e6614bdede6e0b4a551604a6886e01dc5bf90ea4e", + "bytes": 697 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00059/grease-pencil-offset-modifier-local-exact-report.json", + "sha256": "e9ef09a250821a1dd7f10c574f1911f534baf65515e879f9ac423fb4877c7b5b", + "bytes": 1217 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00060/grease-pencil-opacity-modifier-desktop-report.json", + "sha256": "678e7c0028c38f2a84cee2377ecfd7de1d1303561e75fcf8f380359338f6b4b8", + "bytes": 701 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00060/grease-pencil-opacity-modifier-local-exact-report.json", + "sha256": "b62b13a20f921815f9fc4b32b406598a1a08d701cee27e07ee3a0009dda2a2f5", + "bytes": 1221 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00061/grease-pencil-outline-modifier-desktop-report.json", + "sha256": "2a6994ca45c8262a592cedb8deb8f026d366ee2df3bfe6ea0d375e8e214ba6c0", + "bytes": 701 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00061/grease-pencil-outline-modifier-local-exact-report.json", + "sha256": "f490b2dc9b173a3172529ab529889a3292fe39f0cbd3951baaee8566464a0c43", + "bytes": 1222 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00062/grease-pencil-shrinkwrap-modifier-desktop-report.json", + "sha256": "6631f00a27489de3b3d5cd2288f1a1b395b3a7295f9fc4b72c2091d5ce333a45", + "bytes": 713 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00062/grease-pencil-shrinkwrap-modifier-local-exact-report.json", + "sha256": "a00004d09bc0170a0f3148197dd3dd24fb39fac60c723214cce73e527c998e8c", + "bytes": 1240 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00063/grease-pencil-simplify-modifier-desktop-report.json", + "sha256": "14de85a86a150ace281a6b632a5cdf3076104c623b3d313201a2efeb5bac6695", + "bytes": 705 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00063/grease-pencil-simplify-modifier-local-exact-report.json", + "sha256": "6214778590468549ab03aa4bb67dcad6ae2f22d151dc6012c9e293e01ffa9dbe", + "bytes": 1229 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00064/grease-pencil-smooth-modifier-desktop-report.json", + "sha256": "b58983c079c8271ab9d5230e478d36e16d49102826178e90566cd0a8913dd325", + "bytes": 697 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00064/grease-pencil-smooth-modifier-local-exact-report.json", + "sha256": "da42e7440e07f1033f98fbd26274654b4f516821fa0e4c08db68df9468598564", + "bytes": 1218 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00065/grease-pencil-subdiv-modifier-desktop-report.json", + "sha256": "e4e86404702f4b46f207c66070adcc0a52e580aff6106f5404c97ab16351a2d2", + "bytes": 697 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00065/grease-pencil-subdiv-modifier-local-exact-report.json", + "sha256": "3e09deb0756dd36c85e53e6011f3ca011c9ad4a237b577d529238675a9dd7213", + "bytes": 1220 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00066/grease-pencil-texture-modifier-desktop-report.json", + "sha256": "d3900098ba128c202ff28323c6e2945d78dd3c35512bbc2c5d611493b8b1e42d", + "bytes": 701 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00066/grease-pencil-texture-modifier-local-exact-report.json", + "sha256": "b9831dad063cdfaa81aeb8894776b914652c6542d2e0a244cef321547e183068", + "bytes": 1226 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00067/grease-pencil-thickness-modifier-desktop-report.json", + "sha256": "664ec1a6c595fcb5fac0888ae866f70a48ef5d057035c5c614ed0d97a9d08108", + "bytes": 709 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00067/grease-pencil-thickness-modifier-local-exact-report.json", + "sha256": "6e1eee5cf87df42fc94c144f5171f9653df4196372eccd001cef6907ef518e94", + "bytes": 1236 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00068/grease-pencil-time-modifier-desktop-report.json", + "sha256": "761dd7ad0a350e9f3c175575cdb4d71f5bd0a56e1872626148d73c9a7229468f", + "bytes": 689 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00068/grease-pencil-time-modifier-local-exact-report.json", + "sha256": "5cc9edb3f0fd508b25730b4d32deaa9a804381d7fbd8b4007af5e7782d27c590", + "bytes": 1209 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00069/grease-pencil-tint-modifier-desktop-report.json", + "sha256": "e66d9b22a901a41e9c7b0d460f970722192550f75a4f3f54612b97fcf9ed9238", + "bytes": 689 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00069/grease-pencil-tint-modifier-local-exact-report.json", + "sha256": "44d113b3d6c291a18401d6dadbf915dfb907413c8ed96e092011484879f5e050", + "bytes": 1208 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00070/grease-pencil-vertex-weight-angle-modifier-desktop-report.json", + "sha256": "0c3fdcbf998064e77023d66239a6f0e9763cba14aced60d6d71bfd8968844e66", + "bytes": 749 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00070/grease-pencil-vertex-weight-angle-modifier-local-exact-report.json", + "sha256": "79d31b01cb87a8a380d4e84ea69e9b3f19b5109029ad4c1193d15ab6058b8d01", + "bytes": 1285 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00071/grease-pencil-vertex-weight-proximity-modifier-desktop-report.json", + "sha256": "bfb4354d4b25894879f6cd15f1f9758eeebc88aef6c45237ffebd16bb670ffdd", + "bytes": 765 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00071/grease-pencil-vertex-weight-proximity-modifier-local-exact-report.json", + "sha256": "08a439a692bc167a2dff093527586132b3e1baca4a8d7be4dfd47cfe18a04bd9", + "bytes": 1302 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00072/hook-modifier-desktop-report.json", + "sha256": "819375aad6fbf6814a1fe85802472d12df216a205067f5ee0e132a8d383f247d", + "bytes": 690 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00072/hook-modifier-local-exact-report.json", + "sha256": "929d2a3e679e4972149ffac8ff1a7d692452cb9b1029418eea86434aa8d4c6d1", + "bytes": 1258 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00073/laplaciandeform-modifier-desktop-report.json", + "sha256": "20b1fa4731e697c539cbeda56daf567a39ea0e4157519480400d3aa0116b5d9c", + "bytes": 757 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00073/laplaciandeform-modifier-local-exact-report.json", + "sha256": "4661ab5868a5664206f47bebbc93f6f0cc4dcaab362f45d59540c8900a3c4ca2", + "bytes": 1219 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00074/laplaciansmooth-modifier-desktop-report.json", + "sha256": "9aa6928bb41744895ec5d471a3c290d5880d75357f556c310f692dfbf0c587a6", + "bytes": 757 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00074/laplaciansmooth-modifier-local-exact-report.json", + "sha256": "0ae4447208034f80469647e51469225032cb0e8f40b6e887d2aa66888d8b9d65", + "bytes": 1219 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00075/lattice-modifier-desktop-report.json", + "sha256": "c06a312fdf79abca4eb6560e271e62adfdc79e4b8fd61db57cf53c148195cd6a", + "bytes": 732 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00075/lattice-modifier-local-exact-report.json", + "sha256": "62bf9e34273df25cddda1f64b614626cac4163e861c253cb44b39624390266f5", + "bytes": 1269 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00076/lineart-modifier-desktop-report.json", + "sha256": "dfc59d7f349a96352e9b7147cf2745754664513b17f8541828552cd04d6e2434", + "bytes": 657 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00076/lineart-modifier-local-exact-report.json", + "sha256": "b97956de8af04e761d23e69c7c40f31ddfafe0fa54e600123154c77a74ee41f1", + "bytes": 1166 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00077/mask-modifier-desktop-report.json", + "sha256": "b727c810beee272ab8f70754d50aed53404ec5a5d9147f912d6f880d1554576f", + "bytes": 686 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00077/mask-modifier-local-exact-report.json", + "sha256": "ef4b6d8b4c1fb2d336fafebe4f232478704d442d8b166305d8c0dbed0523bed6", + "bytes": 1126 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00078/mesh-cache-modifier-desktop-report.json", + "sha256": "4f78ab7adae556fb49dfde5b4c4e95f9bb0c2777c8425bc48d410955d9686d46", + "bytes": 719 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00078/mesh-cache-modifier-local-exact-report.json", + "sha256": "6d6baa891a387fe56c4ee27c3bc5bde6ecb28f6a6e71f49c1560fe04b26d24df", + "bytes": 1172 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00079/mesh-deform-modifier-desktop-report.json", + "sha256": "8f7ae61828ea8395a3dd1a5f01ccef9e634b03cf831b2d80f891c2db434190af", + "bytes": 725 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00079/mesh-deform-modifier-local-exact-report.json", + "sha256": "6a2be2737f7510539d27d0504b47012dc801b5a3b428f1ab6f2264f4df2ded87", + "bytes": 1266 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00080/mesh-sequence-cache-modifier-desktop-report.json", + "sha256": "0dfdf7f2e779c96397d0686f0d8ef9ba21e017c80a47da1b04639721942f3b2a", + "bytes": 770 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00080/mesh-sequence-cache-modifier-local-exact-report.json", + "sha256": "086758c58ae3b0b7124fd35b802d8ec3ad3254ff8e71f668ff976e05725a3a31", + "bytes": 1240 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00081/mesh-to-volume-modifier-desktop-report.json", + "sha256": "0a485f27d6f6246d74e3737b8b945715fca96f343a675257dab9abb70319bb1d", + "bytes": 695 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00081/mesh-to-volume-modifier-local-exact-report.json", + "sha256": "af033e5bd3d0491f464db098661621f0ac32afdcbed61a76614f4f06125559aa", + "bytes": 1153 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00082/mirror-modifier-desktop-report.json", + "sha256": "cc149f9c8f6f3b59ebf0b07f891d8b023d889cf2f281a7f1fce9f0f62b72e2ee", + "bytes": 696 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00082/mirror-modifier-local-exact-report.json", + "sha256": "a0d7259bba97e30b97d57b776e3b067cd4bbd7ed734fcd8867c24efa4b5c469d", + "bytes": 1198 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00083/multires-modifier-desktop-report.json", + "sha256": "ad00dd2b8cadad79107f8433f06324f05ff5cb9672ca31bbab358813a48d3eaf", + "bytes": 710 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00083/multires-modifier-local-exact-report.json", + "sha256": "d6ec0b7cf1eba19e79174c8d137ec1dd92eca40b7438f1739ce74df18bf712bb", + "bytes": 1158 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00084/nodes-modifier-desktop-report.json", + "sha256": "d5de72e4e7fd671474d0a385818337063952eecb3e765a694ddda811a420c9fc", + "bytes": 691 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00084/nodes-modifier-local-exact-report.json", + "sha256": "987e987122bb5eac6f0208b0d453b59aa0b1e46888c17c68db1501fd04ed2432", + "bytes": 1139 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00085/normal-edit-modifier-desktop-report.json", + "sha256": "cc4dfff0ac64efdd2e93eaee11fcfd7f9e2fe55fd4e21ea1e5f1a72dd14855cf", + "bytes": 724 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00085/normal-edit-modifier-local-exact-report.json", + "sha256": "bbe513c4076d32a374083c0ae4ad6069e97f411a25bccb968e2f06c0b361da88", + "bytes": 1175 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00086/ocean-modifier-desktop-report.json", + "sha256": "d2217b8def179e48ea11a5bfcd9376765d2fca8ce22d1673b3d46d284f21af3f", + "bytes": 691 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00086/ocean-modifier-local-exact-report.json", + "sha256": "33a86a21a856190f97c618df2aa307ad102e11da5260ce45f48aec961bf1acdd", + "bytes": 1135 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00087/particle-instance-modifier-desktop-report.json", + "sha256": "a680090b9010d79608825fa02593b6a27506e233bf331b043085a41bf3d912a8", + "bytes": 760 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00087/particle-instance-modifier-local-exact-report.json", + "sha256": "b68f61eb0596709da28a4ca0e4f19e3bc6f213191ff64c40c04d2be9ed5dbde7", + "bytes": 1225 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00088/particle-system-modifier-desktop-report.json", + "sha256": "a53c039a969a1a9affe57d435c281707882fcdb2f4772473801fed6c8ee45914", + "bytes": 749 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00088/particle-system-modifier-local-exact-report.json", + "sha256": "905fae2ec36e1447a28d314cfc6ddce00dd71ddf090be505b16b76860f5e3643", + "bytes": 1212 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00089/remesh-modifier-desktop-report.json", + "sha256": "ac36dcb7a2c59b6f8df45b67b00f45966c38de93dbfa8d016aeef77a8a92b665", + "bytes": 698 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00089/remesh-modifier-local-exact-report.json", + "sha256": "0cc329e5779c02b15cdffc48030451134017870505149a10b9c5e23876d83ba6", + "bytes": 1144 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00090/screw-modifier-desktop-report.json", + "sha256": "af225b5b2f660ae70fe0315527b79d5e74db996db3722222bed98194023de28e", + "bytes": 691 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00090/screw-modifier-local-exact-report.json", + "sha256": "3998657085e2d1f963540cd97afd7980cdcd50ec96897ab22d612183a0e5e531", + "bytes": 1226 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00091/shrinkwrap-modifier-desktop-report.json", + "sha256": "4bc01b8e0d79256b2e5fa9e149bc53667790eab383beda260fdff77d6f4f0c6e", + "bytes": 721 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00091/shrinkwrap-modifier-local-exact-report.json", + "sha256": "db44cad8b1b6173303ca5f63c442eb82805324e08c6786323f6803803d52d391", + "bytes": 1315 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00092/simple-deform-modifier-desktop-report.json", + "sha256": "532ad0f944d179ec640fdf706b9e4e78eaaa3635410b404f7a146b68a400768c", + "bytes": 736 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00092/simple-deform-modifier-local-exact-report.json", + "sha256": "24eacc0f43139fbd4fe232e9418d7c81a8eee8bc9b10b15bc2818e1df0794aff", + "bytes": 1291 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00093/skin-modifier-desktop-report.json", + "sha256": "cf30f79bb5f5e90749068d678a6746808c87175aa9ad51117f69b6b90aad7884", + "bytes": 685 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00093/skin-modifier-local-exact-report.json", + "sha256": "e2df081504aab183867915c78f4829d90e51fb610586a1722752cceaee0da674", + "bytes": 1214 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00094/smooth-modifier-desktop-report.json", + "sha256": "762f02f1f460bd1deb71a7441ff85b969ff8ef916b32d95e46fe243ce110d1cb", + "bytes": 813 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00094/smooth-modifier-local-exact-report.json", + "sha256": "0373da7c5ce2b369840c080bfe5dd341596208098fc2f3c3ae864031d965bc6c", + "bytes": 1267 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00095/soft-body-modifier-desktop-report.json", + "sha256": "5228fc63f22473e4e1ef9d82e9018c4739c6b63469da4b693240ac307336bba7", + "bytes": 713 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00095/soft-body-modifier-local-exact-report.json", + "sha256": "e0767cb702d9c0612c8e8bc140dd2e00f5af6f782c3f63c5ae15407a6c5fcaa9", + "bytes": 1168 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00096/solidify-modifier-desktop-report.json", + "sha256": "914187f8ec57e442d85fae5710aa98bd058e91930bdacd7928694281bad54df3", + "bytes": 784 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00096/solidify-modifier-local-exact-report.json", + "sha256": "b6437999773cc18296a54e041c8df8b33d595f9ebe67c826a47f62308d307232", + "bytes": 1242 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00097/subsurf-modifier-desktop-report.json", + "sha256": "e1ce95f66a26b4e687bd32fc6f975044033d921703954e0e26674dfbce556bea", + "bytes": 774 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00097/subsurf-modifier-local-exact-report.json", + "sha256": "c146dabc29a94e25df4f09e6de727a3377f48ea706dbe74f51b903efbc5a293d", + "bytes": 1234 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00098/surface-modifier-desktop-report.json", + "sha256": "75a588cd606fe0395c7f6541eed4ca26daa0109d7f6fa62cffe87e41149d0a95", + "bytes": 704 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00098/surface-modifier-local-exact-report.json", + "sha256": "7b004c755290ebe920a9296a7768ff3231eaec66e1836536d98dffa4d6c6dbab", + "bytes": 1150 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00099/surface-deform-modifier-desktop-report.json", + "sha256": "bfd91c545efcf0688bfa9cee24e65de82224eecf715a1ab4385061a7d7df4db1", + "bytes": 743 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00099/surface-deform-modifier-local-exact-report.json", + "sha256": "7d5f760727e03951c3f5b2c3e885b33ce92af7293ca101732fa490136dc25ed5", + "bytes": 1313 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00100/triangulate-modifier-desktop-report.json", + "sha256": "8e1472c739110448d2c1987c32403714b9465606c0e8b3a8e3ae4867743ba377", + "bytes": 773 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00100/triangulate-modifier-local-exact-report.json", + "sha256": "d715e77c6e2ef82c9611a68a3808057d08feb3de715ab1a3f07c6e1b67b6b69d", + "bytes": 1239 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00101/uv-project-modifier-desktop-report.json", + "sha256": "18364763d8956b1426ae0ce7809491562d66833cbf77b7e00b141c002c54d8ed", + "bytes": 718 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00101/uv-project-modifier-local-exact-report.json", + "sha256": "b0605455ac7287165072c928a06d556af759f9f7bd1ba1fac32cccb0ca0e0556", + "bytes": 1169 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00102/uv-warp-modifier-desktop-report.json", + "sha256": "ed6bf6150e20eef0b7207397cee12db3408836075866f05bb48da92e706ab828", + "bytes": 700 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00102/uv-warp-modifier-local-exact-report.json", + "sha256": "9499f499401b3703ee7e4ebab55516710fc235f08cdbd93271d9b348b066ba5f", + "bytes": 1147 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00103/vertex-weight-edit-modifier-desktop-report.json", + "sha256": "442287f280444efcc0dcfc8602d935066af17aeca0072e978f64ffa3e6e13b9d", + "bytes": 764 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00103/vertex-weight-edit-modifier-local-exact-report.json", + "sha256": "23d26e90775bce127efb1a8572c7a9f92acdf4d22b41bd1de6c78a11b7246ba8", + "bytes": 1232 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00104/vertex-weight-mix-modifier-desktop-report.json", + "sha256": "6121a089239450b95037c25858958ab5d067af538657f56452fdce81186834a6", + "bytes": 758 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00104/vertex-weight-mix-modifier-local-exact-report.json", + "sha256": "a755e5c88c8a22305155dc02c455e9fe6ccb1e92b7053be7a3ca57da2aa48971", + "bytes": 1224 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00105/vertex-weight-proximity-modifier-desktop-report.json", + "sha256": "7e6ebaf459de04781a6e6467be84c6065039a4f3fb6b4c748fcbeda3b4806179", + "bytes": 794 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00105/vertex-weight-proximity-modifier-local-exact-report.json", + "sha256": "7594f78376b061793524a4c586ecd2335d7aa9064d4e31b840f92e03819fac1f", + "bytes": 1272 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00106/volume-displace-modifier-desktop-report.json", + "sha256": "00ee176bc712320454f7ddb585710ccab243b9b5b89f2e2f0eb364c536bddcd6", + "bytes": 702 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00106/volume-displace-modifier-local-exact-report.json", + "sha256": "9c44441bc0cfadbdce570f5c3e7b074e3da00f19a7f8a2e8d84d0ae6167164f8", + "bytes": 1165 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00107/volume-to-mesh-modifier-desktop-report.json", + "sha256": "7cbfeae24f5f74a8b9509da418a65520a595530b164733bbd9ecf9de99212f02", + "bytes": 740 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00107/volume-to-mesh-modifier-local-exact-report.json", + "sha256": "1083d3e4144e172245c61b1ff8afa8b1bcf80b9bfae4d066e7eb0cfab80f5279", + "bytes": 1198 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00108/warp-modifier-desktop-report.json", + "sha256": "5daba0b7befe92e75dab3dca35e00ee1e3c211ab02e9f5ec3ec9bdb5c6164250", + "bytes": 686 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00108/warp-modifier-local-exact-report.json", + "sha256": "0aeac2276b0828180780358383b626295b1ef43fece15ac6fcadff880f861dd3", + "bytes": 1126 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00109/wave-modifier-desktop-report.json", + "sha256": "ddec88c688169daaaeda211a7b5b1ad2a7e9bd2f5baf29c8c85c5d5ae2265f3c", + "bytes": 778 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00109/wave-modifier-local-exact-report.json", + "sha256": "29e011eec263333878bc92b5514ec9b153142872bd59d89cecba740395f7e7bc", + "bytes": 1232 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00110/weighted-normal-modifier-desktop-report.json", + "sha256": "ae59fdc10466bfa461dbaed1aa45bb2ac6211b8a303e58de8ea3ee9c5e0e40ba", + "bytes": 825 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00110/weighted-normal-modifier-local-exact-report.json", + "sha256": "6360a1706e7456a5d51fa2effbc7505cd7209818690ab1b7665abf0bbff7a311", + "bytes": 1239 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00111/weld-modifier-desktop-report.json", + "sha256": "cef902e3eaaae85c8c441320ed1dad00b1193a73003c098e61ba179538972d9d", + "bytes": 716 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00111/weld-modifier-local-exact-report.json", + "sha256": "91ec33d946f8b526ae5af1f0b533896e5c6678655b9ddaa844ca5fafdb773e9e", + "bytes": 1166 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00112/wireframe-modifier-desktop-report.json", + "sha256": "f83750dfca898b529013b6d3fbefa283e5800a00312c3c613d06735a362ee26a", + "bytes": 756 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00112/wireframe-modifier-local-exact-report.json", + "sha256": "b74f89e88d7e280175c4ff534ebf20477ca35aed189b53ebd4a69fbdacc7e92c", + "bytes": 1216 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00113/action-bake-keys-desktop-report.json", + "sha256": "3226d30e020b3384b3a5504c72fe1481f43c048f0827ff6bcbfa1327d9cfd330", + "bytes": 956 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00113/action-bake-keys-local-exact-report.json", + "sha256": "d8a6aaa82c299916a37f2b8ef477349ac675a930d95ff7800450dc6e5a282d58", + "bytes": 842 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00114/action-clean-desktop-report.json", + "sha256": "94e987bcc4704cc880a88b510d7f01a2b990c04a109c9296b6e896d108d1e95d", + "bytes": 786 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00114/action-clean-local-exact-report.json", + "sha256": "58e3dfb9fc14a88bc57c616d02870ce0cb995a596f84bc57a686eb63e2e2952a", + "bytes": 756 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00115/action-clickselect-desktop-report.json", + "sha256": "8f6090591fd02d88ea4714ed6a570bbe1e9315226a7496a1382a1bcfb4a8dfe6", + "bytes": 1199 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00115/action-clickselect-local-exact-report.json", + "sha256": "ca2832eaceaf118bc1ce6b3efef1d5c4f9c63dae410d451b42b42f62316bbe37", + "bytes": 812 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00116/action-copy-desktop-report.json", + "sha256": "688cff599ed4b5b6ff17bc79141a040f8f9de59e6912285ae294af68efed0772", + "bytes": 1157 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00116/action-copy-local-exact-report.json", + "sha256": "d1698dbf04e3d7c7983734cdc88c7b109f61e10b33b09192e4576c60e2762b5e", + "bytes": 842 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00117/action-delete-desktop-report.json", + "sha256": "9c3f91e026c110496626bc0214a719c5475c71357572f6861cc0287a2948169e", + "bytes": 1045 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00117/action-delete-local-exact-report.json", + "sha256": "a2b9dda82da0c7a7751ac7bf36a958a624291a8ebe4cea12d54587fb3f441aa2", + "bytes": 859 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00118/action-duplicate-desktop-report.json", + "sha256": "1b84545f6b5f01877c191170b8b5a0d21035e5448373506b4cca50399780e1be", + "bytes": 1246 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00118/action-duplicate-local-exact-report.json", + "sha256": "31b61f287906adee9b83d2c05cb302b76012cf5284f96cf45a8ea349a855c320", + "bytes": 947 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00119/action-duplicate-move-desktop-report.json", + "sha256": "f1ba7739899913c3478ce9f2e1bfb92b7a73ccebe3176e98d2e9c57072ab7d97", + "bytes": 1174 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00119/action-duplicate-move-local-exact-report.json", + "sha256": "47d8a5de2a50807b33695b011ba1774883c3c8823a6326a3bfc537fab4a2ef52", + "bytes": 889 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00120/action-easing-type-desktop-report.json", + "sha256": "e34d9007483d2913166486f7fe736adae145ca27b1b90240ce36e62c4b8f1bbc", + "bytes": 1422 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00120/action-easing-type-local-exact-report.json", + "sha256": "9ce9af87fc9f42682de1fa7b02f3f320a64965dad5e3a34f808dbb072481896c", + "bytes": 977 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00121/action-extrapolation-type-desktop-report.json", + "sha256": "d9c594e10b0196fb9a906cbd6ed31f26196c8ee1ede6a23c50d3a6ac9de0012d", + "bytes": 1031 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00121/action-extrapolation-type-local-exact-report.json", + "sha256": "c898764e6629bfa752e6375c1944c579a02c62cb25059792fd9e582042a8a3ab", + "bytes": 856 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00122/action-frame-jump-desktop-report.json", + "sha256": "2a03fd1c8b4faea5fbf908e43df73758044dec705684842c0061023e999edf79", + "bytes": 1137 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00122/action-frame-jump-local-exact-report.json", + "sha256": "ac695d4436de8399842d39b412bb734c1e98d021f18a71c414627405aaa27fee", + "bytes": 829 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00123/action-handle-type-desktop-report.json", + "sha256": "4e37880d7ed3a2f506c2b93b93883c282011d0578d656dfe4c461a4e111201c9", + "bytes": 1426 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00123/action-handle-type-local-exact-report.json", + "sha256": "18fa52777177e3312534e981d7e2b1b6fd51b8ed72472c11f0959925907a6287", + "bytes": 964 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00124/action-interpolation-type-desktop-report.json", + "sha256": "94ec52af816fb75cfed2339ebb4b821b4aa13d822c6fe2697f9923309331804f", + "bytes": 1463 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00124/action-interpolation-type-local-exact-report.json", + "sha256": "a93a5394419001a0555103f76c91653b1127a21a454a076d71a78050a00130d2", + "bytes": 1018 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00125/action-keyframe-insert-desktop-report.json", + "sha256": "6a4445c9725cdd1ce4bf97e510ef7f1772f47652fd3a0486c1fb8a4d7dbaa9fb", + "bytes": 1377 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00125/action-keyframe-insert-local-exact-report.json", + "sha256": "4e0d65afeac1d262fcad6e8c3756ed63529c6586261379f9d15fa1c971e67cc6", + "bytes": 922 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00126/action-keyframe-type-desktop-report.json", + "sha256": "dafa72f7acc2a84f993615e8ed963013a948980776cb96e19ef5bc0ebce578b6", + "bytes": 1464 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00126/action-keyframe-type-local-exact-report.json", + "sha256": "42cc333a864b20769f80bba46cef162ce2c864509bcfc35191caac5405f2d5db", + "bytes": 1002 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00127/action-markers-make-local-desktop-report.json", + "sha256": "ced98aa43f04b58ac2aa66fed217fe895cdadc108739b4c335942114e8a69ce0", + "bytes": 614 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00127/action-markers-make-local-local-exact-report.json", + "sha256": "9b3737730a2f5fe7daa8a9a8109254daf4eeeacff25f632820288fb01ee45f6f", + "bytes": 828 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00128/action-mirror-desktop-report.json", + "sha256": "ce9a779ce2d03bc2a2bda252c40aabb56c649be858fe82486ed04bfa96a04793", + "bytes": 1358 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00128/action-mirror-local-exact-report.json", + "sha256": "7a91dc7d6c72d100a7da42646adeb100efacf81dd25c2b12672281d86702b37b", + "bytes": 892 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00129/action-new-desktop-report.json", + "sha256": "834607cbbbd91aa8ad74ce2f8818cca54dd5adbf4e871b8733853c924eac8c75", + "bytes": 437 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00129/action-new-local-exact-report.json", + "sha256": "abe030dd587dd2e21d04a3755a9294eb26c545f5d645c0910c2eeed4b5670430", + "bytes": 749 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00130/action-paste-desktop-report.json", + "sha256": "1494252e4ec2870131a2d810a5bc884374edf35272926a0943ac230a67e24fb7", + "bytes": 1190 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00130/action-paste-local-exact-report.json", + "sha256": "6f37a4b1cf1af54bd8437a0df2ed4389f12fa830e298f86c2f70b67e853ffa61", + "bytes": 905 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00131/action-previewrange-set-desktop-report.json", + "sha256": "e0ad513329a4a26d70e239d65c30b9048e78c1fcb480a6e4013d941e85d94470", + "bytes": 433 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00131/action-previewrange-set-local-exact-report.json", + "sha256": "7cd2170ba8134e088c23a4939d96f9a23b62779370051fac2185c7ad092e20d0", + "bytes": 721 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00132/action-push-down-desktop-report.json", + "sha256": "1341e50c48f9adc16d7c9269bd31738d852299c4c8ed0ea03071efe934f5dabc", + "bytes": 706 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00132/action-push-down-local-exact-report.json", + "sha256": "3d9ac3404080630e5241a39902229089b2528e784ec3b107aced1d1956ed9b33", + "bytes": 1657 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00133/action-select-all-desktop-report.json", + "sha256": "06d1ae064a91784d1122141bdded039a4761ed15341dda9d9bb5f0649e9305bb", + "bytes": 1134 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00133/action-select-all-local-exact-report.json", + "sha256": "50808e1aa34a12e83afbe68bd47206b5990efb0e0a5c13b614e99abc8326c641", + "bytes": 735 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00134/action-select-box-desktop-report.json", + "sha256": "20f1d2012eff7ee00744009455d8b34fd3ced10ae681af80065d2761f07838d4", + "bytes": 1137 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00134/action-select-box-local-exact-report.json", + "sha256": "d6bb840a51e5845681d83a381a5eed831dd0b727816400518f884af44c80a256", + "bytes": 833 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00135/action-select-by-type-desktop-report.json", + "sha256": "4e7ad68e84576c6ef5153302911e682242b028f022eddf9deb18b39e28851298", + "bytes": 1241 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00135/action-select-by-type-local-exact-report.json", + "sha256": "7b07b6f31ad375a4d7461f375c2fb036021ef80d34176ecd0db37d752ff9b963", + "bytes": 860 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00136/action-select-circle-desktop-report.json", + "sha256": "405d31329386086ba1f833795630a0180880bfce17e02d93fd586ce15bb6f1c0", + "bytes": 1146 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00136/action-select-circle-local-exact-report.json", + "sha256": "489863284d53857629642ae8fadb9c7066a4c492117eb8b7cbe0c823d65d9db5", + "bytes": 848 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00136/task-context.json", + "sha256": "fc4b89652b93f26d0e7ee929ca442fa4954e47b677ddb75604d3dfacb0c1498e", + "bytes": 5450 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00137/action-select-column-desktop-report.json", + "sha256": "71916a53336e89a4be1d07e1fec163b215661d1554d86a1446a79dad0411ba88", + "bytes": 1146 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00137/action-select-column-local-exact-report.json", + "sha256": "c9747457cd2746e4bcd27c10c87564e92f74664c6d59129222e826b17ace7815", + "bytes": 848 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00137/task-context.json", + "sha256": "847fe153913ff003ef06c7f17c952667a603b31f95a5bc1a9a06fb8a077c6e6b", + "bytes": 5306 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00138/action-select-lasso-desktop-report.json", + "sha256": "0b08c6f6e71af41aee20187546477ea962cd84d8c4aade1d85aefd0e9f7f1e65", + "bytes": 1143 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00138/action-select-lasso-local-exact-report.json", + "sha256": "80b30bbb0abd93e0e4d034d65e916171446e2549c7b224befb98f37f4e22eee9", + "bytes": 843 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00138/task-context.json", + "sha256": "9ac60ee1fef3eb3809f9cd4ba251272406a7f391cfe26621f076d098d9b0d524", + "bytes": 5316 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00139/action-select-leftright-desktop-report.json", + "sha256": "7caa17c7eb256a4bea4e95d03edd3e2b3a31286fd30581188915fca174a89f56", + "bytes": 1188 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00139/action-select-leftright-local-exact-report.json", + "sha256": "70476940cd710d7ac0305d1caa428e9b0ac7f71a8e7f55900139c94be7433ee2", + "bytes": 940 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00139/task-context.json", + "sha256": "70af07e854ffebad8dcf9403c3485732c25b7100062b49a0bf1f16fb9b730bbb", + "bytes": 5315 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00140/action-select-less-desktop-report.json", + "sha256": "f8527dd5d6d953fbda5b86bb1f42d6257b244a50296ceeb074c57a7b007a3aef", + "bytes": 1140 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00140/action-select-less-local-exact-report.json", + "sha256": "243dedadaa9776d7195883a99689e4cb8ee07599bf6c9786aaf8ee5910135e17", + "bytes": 838 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00140/task-context.json", + "sha256": "fc860324c53484ebaa1b1266cf51530abf10645c7e4546db5a495a25778ed03d", + "bytes": 5344 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00141/action-select-linked-desktop-report.json", + "sha256": "7072809e5ceef8161b75594deaaf809e31ea01a67ef6261ac2d9e9fabbb5e296", + "bytes": 1201 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00141/action-select-linked-local-exact-report.json", + "sha256": "261490656ea23b3c1800ca523a9d00911347b7f46e40b7b1d16e693470ddc8d4", + "bytes": 985 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00141/task-context.json", + "sha256": "cf032562d9fc471a6a72b2e8dc50021e383ddc0fd628fca14e971647b64c5ad6", + "bytes": 5337 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00142/action-select-more-desktop-report.json", + "sha256": "56944dfcacb924d7650b8652e52bfc254fb1673b40b04109a57f69ad67e3fe9a", + "bytes": 1295 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00142/action-select-more-local-exact-report.json", + "sha256": "91f1ef2bf23e75b681beea332836b359da9daf1902b8d77cb683b0e1657562a0", + "bytes": 918 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00142/task-context.json", + "sha256": "727493f7483e1fc0c42a516da51e469393881b5d15c5c362f04138bcd4c6944e", + "bytes": 5367 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00143/action-snap-desktop-report.json", + "sha256": "0da5db63e20db1a97fed02019368de5c6a758e6e34c8b43af52800d33dfa48e0", + "bytes": 1137 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00143/action-snap-local-exact-report.json", + "sha256": "61afb2360dc9814da3b741a133b07728b4a560676e7a436f995d1c07e1a4d17e", + "bytes": 1003 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00143/task-context.json", + "sha256": "8fbac173dc0bf7f0775d149161c7ea2ddf2cdd489f0f634669f860983806c1f1", + "bytes": 5342 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00144/action-stash-desktop-report.json", + "sha256": "c7b38407179b23e212f2fff6d34424b3c9f21e024f8ce936cae8f4a6746c4904", + "bytes": 680 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00144/action-stash-local-exact-report.json", + "sha256": "0dd4d10207503d6ea41c2d630b137471587961ceaa26870132936c8c91a72752", + "bytes": 1612 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00144/task-context.json", + "sha256": "45bc5f26682956126524444937f5af263c238b91d66f23f295a4bf37e49d42a2", + "bytes": 5311 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00145/action-stash-and-create-desktop-report.json", + "sha256": "05f9f233a10822b8de85e9b2070863d6f584e60123b4fc91e4d147a93e120df7", + "bytes": 718 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00145/action-stash-and-create-local-exact-report.json", + "sha256": "2820c70ab69ad674d6bee5424fceb98062fc33b0e309de98d0fe092515f0f4ea", + "bytes": 1722 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00145/task-context.json", + "sha256": "d785cecfb165f45ec6fcefe072c7cbed452e0ccb0ef6fba5fbf22b1b85224596", + "bytes": 5327 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00146/action-unlink-desktop-report.json", + "sha256": "a328397950846c7ee22fc7d0ab5788eb5174a8296f79c70763f007274977f5b6", + "bytes": 1025 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00146/action-unlink-local-exact-report.json", + "sha256": "2190f23628b0b4ecb68a8c5aafb096e412c7fe5f654bad094686b0700c8e388c", + "bytes": 777 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00146/task-context.json", + "sha256": "5fe6424cd98d78ea065bb1fb0cd34bae92552171592698a48182d08b943a4c08", + "bytes": 5304 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00147/action-view-all-desktop-report.json", + "sha256": "d1eb6d018b05f2f00d16498dea4d34d49f07ed4489f2ee0dabcf9409dd76deaf", + "bytes": 678 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00147/action-view-all-local-exact-report.json", + "sha256": "f23dd5aae9e4f649c6f29ae6cc971d7e358386bc4cbdd3466e7a075f065f362c", + "bytes": 888 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00147/task-context.json", + "sha256": "f03fa466b214f882119db539bbd7e6f79da5b16624e61f067d217dfc2480ac33", + "bytes": 5303 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00148/action-view-frame-desktop-report.json", + "sha256": "1895f562b9d1a67164256dd47b40a9a0280f5c45f0f153184cde5d54afca2d63", + "bytes": 707 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00148/action-view-frame-local-exact-report.json", + "sha256": "a5b4db975c15055bf295f72f5a52aeb66bfa5d81959dba303e89472ce92ff83a", + "bytes": 919 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00148/task-context.json", + "sha256": "52781cdba0dae2569088c7d80e4c5028cf1fefb5beb187dbd8f767d4b5122b32", + "bytes": 5317 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00149/action-view-selected-desktop-report.json", + "sha256": "002328f69d528d49570dda4976ea7ae0bb9229fa84f8a3bb1b5b6e3cc061a188", + "bytes": 1361 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00149/action-view-selected-local-exact-report.json", + "sha256": "6d2e450cece242a95b9b861292d74654ec7a8e3f191364a64c2c9b809a7e0bb4", + "bytes": 1089 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00149/task-context.json", + "sha256": "da34e2c587ec836b745ae0d69dc27b75c77ce17a73d18c223ac817e9365e29c7", + "bytes": 5315 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00150/anim-change-frame-desktop-report.json", + "sha256": "b0367cd339a51049f1eb511875c0beee269439694f99c2ee69513d71a5cd5453", + "bytes": 1159 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00150/anim-change-frame-local-exact-report.json", + "sha256": "358a97f75cf727ba385434f4e42c9e2857d046131fa15d1460f60eba68c72288", + "bytes": 910 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00150/task-context.json", + "sha256": "f3e8a8d194110019633496b55623589f1d13c8c3f062ec1c03aac023276a50c3", + "bytes": 5368 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00151/anim-channel-select-keys-desktop-report.json", + "sha256": "f71376397c83a380252e3e69a4f295153f2e46a7be0bf1de4871605bf0bec16f", + "bytes": 1208 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00151/anim-channel-select-keys-local-exact-report.json", + "sha256": "225fa87a2cfe47daee71149a1a2122ff9d9f80a602b48ff64bd11b0edf4dcc51", + "bytes": 917 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00151/task-context.json", + "sha256": "73e8f89962ce32d7446fe7a61cdaab43105628ca0661b840e93db8236b8691b6", + "bytes": 5367 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00152/anim-channel-view-pick-desktop-report.json", + "sha256": "e8ddb6bb82386a4c93fb2525ac8c76b965034f827d28c0caa7c2df349833dc7c", + "bytes": 1098 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00152/anim-channel-view-pick-local-exact-report.json", + "sha256": "813990cb73567d995b784e23f47b7493f6bd3da83278ba86e4161044bfb98b8b", + "bytes": 1012 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00152/task-context.json", + "sha256": "c2f0b3acf3ac531ec577583e204e75d15a41f12f3c00b5d7326fe85da4e68547", + "bytes": 5380 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00153/anim-channels-bake-desktop-report.json", + "sha256": "bcc459445eb7da0b2898302b72b726cd128572a25c23012dc7dfee9b03d945a6", + "bytes": 1018 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00153/anim-channels-bake-local-exact-report.json", + "sha256": "517f2a16e4a3a46e52709c58987e940d1c07235adc8c4c9d6401363173c7d09b", + "bytes": 1014 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00153/task-context.json", + "sha256": "076fcdce0aaede9f992ce804e4e2cabbc2bbc69a0316038bba6880704933d26d", + "bytes": 5328 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00154/anim-channels-clean-empty-desktop-report.json", + "sha256": "592c8f75f00e03e0af3f8cc6de4b9b681ab2d1c5546826d363a01be41e498848", + "bytes": 933 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00154/anim-channels-clean-empty-local-exact-report.json", + "sha256": "ec0ae1e60911edfaee779d6ed6c52fb5965d7b182534e1864c27aaaaeb1a7795", + "bytes": 959 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00154/task-context.json", + "sha256": "e03fd089cd8874792ee9c5aeaf32843742f0522ad71f47c12c1e5ef674c4352c", + "bytes": 5374 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00155/anim-channels-click-desktop-report.json", + "sha256": "c080797b74218a9ca21654420e96138ae7fc7e795d9f821a1ca1285bdb08038e", + "bytes": 1193 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00155/anim-channels-click-local-exact-report.json", + "sha256": "f76c822378b6dffd7a247354d33874515aa551e952401e82188a6e7337a67d55", + "bytes": 893 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00155/task-context.json", + "sha256": "b47551bafd1fd13f5ed2cd5e9dbf642df1472c6403e1b4c8902e3c6802026146", + "bytes": 5400 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00156/anim-channels-collapse-desktop-report.json", + "sha256": "0c7633299bc11c3b2dcc6c255e557b625d61e4a6214b717dd19f7eaf59e2c06a", + "bytes": 914 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00156/anim-channels-collapse-local-exact-report.json", + "sha256": "469e345742980e8647110df56278592ac12e6b945b6d45e11f9ec2da5c8cb094", + "bytes": 936 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00156/task-context.json", + "sha256": "67d970a10a88c35ee050d4b35ed5dba501907c669c9d36467e9e4151c7593c15", + "bytes": 5357 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00157/anim-channels-delete-desktop-report.json", + "sha256": "330b2caa7f2f2dcbf4f903a8ac8bd1fdaf22fa676014fd0a2aa58675c28e77e3", + "bytes": 555 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00157/anim-channels-delete-local-exact-report.json", + "sha256": "667833b173528247f33341fe15edf52b4389bc44e0de4a6dc1fb2e14ee57a986", + "bytes": 744 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00157/task-context.json", + "sha256": "94c06044e7620dfb82d250775d7a8460cebcb13327e805442ff47585b610574a", + "bytes": 5330 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00158/anim-channels-editable-toggle-desktop-report.json", + "sha256": "c700699f731764385ab6a9103adfc3592effdae2dc09b913682b134de16298f5", + "bytes": 1015 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00158/anim-channels-editable-toggle-local-exact-report.json", + "sha256": "4e1e28c4baa75abd098eaed07ea83fda9676d6bd875dafac9742bd1d89cf16dd", + "bytes": 863 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00158/task-context.json", + "sha256": "35a89633fba80fbb4df306e948e31117bf1189e7a9c9b8458e391d3cdbb3ae45", + "bytes": 5409 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00159/anim-channels-expand-desktop-report.json", + "sha256": "56feacbf947430f5799612b9e01395ec2f901f455ef1811af58315bc97981c58", + "bytes": 1122 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00159/anim-channels-expand-local-exact-report.json", + "sha256": "705189c2b5571ee5645c50932fdff1bdaff3f9205cd031533969f1bc8d09418e", + "bytes": 826 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00159/task-context.json", + "sha256": "fc453afe062994a58a0bc5108a915f246afd8eb75b9a90cb30ec47fd92aac464", + "bytes": 5343 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00160/anim-channels-fcurves-enable-desktop-report.json", + "sha256": "694c307f9ccc22b4eca8e64185e5397bd778e45da07c5ad26a60120220ebe4c5", + "bytes": 1030 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00160/anim-channels-fcurves-enable-local-exact-report.json", + "sha256": "42b1b070a9975db3284dd616a3c101cf1ec1ee3701372f77eeb04e0a03e52b9a", + "bytes": 854 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00160/task-context.json", + "sha256": "c1a8d564de0ad1c377f22af1f6c8152256e66c3da974a5f18e2716f48334276e", + "bytes": 5394 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00161/anim-channels-group-desktop-report.json", + "sha256": "c7df9940aecaa3fa127116325e053c182a183167d8f222e9af072c6415ef379b", + "bytes": 1055 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00161/anim-channels-group-local-exact-report.json", + "sha256": "e455f560ac9e6047b84971a96b3aa7f58ee4cf08dccf5f6394310820d10715d2", + "bytes": 792 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00161/task-context.json", + "sha256": "cdc0f7f91f24f2ede4406c025ce8ee0eec9898a512c8d255c915851537263f30", + "bytes": 5343 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00162/anim-channels-move-desktop-report.json", + "sha256": "8b12fad79622d6171f5afce0017b89cae20fea109dacc0851c10c8d96d19f1c0", + "bytes": 901 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00162/anim-channels-move-local-exact-report.json", + "sha256": "0dad9d166f9fdd3466f0a96bc32e02118259a5aa7ac8312d716c93fb0b8fcf31", + "bytes": 791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00162/task-context.json", + "sha256": "0ba8fe850b95ac1b5d55feba65ac8b994ead423ff98be590491b2501c378bc3d", + "bytes": 5298 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00163/anim-channels-rename-desktop-report.json", + "sha256": "ab51d4972965553550c3a31a01d5ead41d4a1edb4f3d5229e0072035f032cc63", + "bytes": 1083 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00163/anim-channels-rename-local-exact-report.json", + "sha256": "f83a4dc64627ec6679826be1a49942a869af4ffc1bad317ecc60a9ff056729ab", + "bytes": 855 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00163/task-context.json", + "sha256": "1038e4979b2f480d971af8c15a568db264a1612f6e86ec49cec3cf6f25a48684", + "bytes": 5270 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00164/anim-channels-select-all-desktop-report.json", + "sha256": "27582c87f7d705f7b2a935d29df9fd4b65e60f8cc7f1e1f9803b2788aeb43f22", + "bytes": 1274 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00164/anim-channels-select-all-local-exact-report.json", + "sha256": "8bfb174ed2610c2d518c5c62721e489e3314875d70f12cd3304b10ca4e7e3d6e", + "bytes": 821 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00164/task-context.json", + "sha256": "eea368ca4eb17f607e0f948b80e2c1964d7a1cf9f44cb85823ba078783d3eb81", + "bytes": 5382 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00165/anim-channels-select-box-desktop-report.json", + "sha256": "3e4d0f296a24bbc60e94edbcdef95d0256311b3c7465ee975b1a072a3553340d", + "bytes": 1299 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00165/anim-channels-select-box-local-exact-report.json", + "sha256": "1ea7eff113700fb1c7294d3737dff83df271963f62997583540cc1e998f00e21", + "bytes": 821 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00165/task-context.json", + "sha256": "63a484301223406881332d310e647407758f09f6c5c3b1d0e9836a404332973f", + "bytes": 5359 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00166/anim-channels-select-filter-desktop-report.json", + "sha256": "a8a86feb4763e08f655de55c654befa13d42b490ca4e6efc5d6736170f0d6a37", + "bytes": 932 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00166/anim-channels-select-filter-local-exact-report.json", + "sha256": "538167ec546842a9206d6232a213d271dabe96f5801f074b6804a1d14e12e4ba", + "bytes": 831 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00166/task-context.json", + "sha256": "3ccd5a0066ad1ca475e020ebb4b6eeb724b431b7a6ffc125553b3a6048cb4449", + "bytes": 5371 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00167/anim-channels-setting-disable-desktop-report.json", + "sha256": "9e647359438803ddfd6065611d064e723c5371b3ef696cbfdfdb50c166ab3835", + "bytes": 1040 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00167/anim-channels-setting-disable-local-exact-report.json", + "sha256": "c73201d925e7526d25f647870a346976773ffc4cd4abb94325d4cf1261def14d", + "bytes": 890 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00167/task-context.json", + "sha256": "496f89ec6d6545cd16d0b787e741e3dcb78d992d308fea0533183214d5325e6a", + "bytes": 5393 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00168/anim-channels-setting-enable-desktop-report.json", + "sha256": "d2265aaf9aee9d9bcc8a72f66f9878c4f44b4a5c28e5d13ff388c194adac773e", + "bytes": 1036 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00168/anim-channels-setting-enable-local-exact-report.json", + "sha256": "68bd2a37e4fb89e130cf7d9fec26e23f60903543b39cc33813b84bf525313817", + "bytes": 884 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00168/task-context.json", + "sha256": "30def7e3fbd5e1786203e5c88aa3c5ba22f40af2fb0e9ad1809be6183151683e", + "bytes": 5363 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00169/anim-channels-setting-toggle-desktop-report.json", + "sha256": "6bc9a6a97c53a6b4fa510c0b670bdf341ec4f82d0586a21c04438eaeda9a10f6", + "bytes": 1036 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00169/anim-channels-setting-toggle-local-exact-report.json", + "sha256": "e493b763baef0ff2d5e2782107a92b66db63d0ec82ffd8c677df7d30f68c76fe", + "bytes": 884 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00169/task-context.json", + "sha256": "39bb03cf425db496671100f840eb671a90b9f0802d524c6718869ee436a20b1a", + "bytes": 5346 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00170/anim-channels-ungroup-desktop-report.json", + "sha256": "6da3c452af5fdefcbb5a7390e5e7effe440dbb8602bc7c4ee7d57f38e1f58f05", + "bytes": 1015 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00170/anim-channels-ungroup-local-exact-report.json", + "sha256": "4de0a7349f21103b953ebbd860f983d9c199fe682af77fc2b4198fc03993ec53", + "bytes": 838 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00170/task-context.json", + "sha256": "7a62f73abdd10efce2e0decb2bb437f62973fdd572ce199ec637d54433a95d8f", + "bytes": 5348 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00171/anim-channels-view-selected-desktop-report.json", + "sha256": "20a3371ebf683cc16911820be35f1c4ebf8af48132339574937899d267568fd1", + "bytes": 1226 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00171/anim-channels-view-selected-local-exact-report.json", + "sha256": "2829a891ac2d66ca3d5b0a4fac8b88bfe267280c8fb05f080b49e3e2cf880c8d", + "bytes": 1094 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00171/task-context.json", + "sha256": "699e03fa824e973741bcba370b5de0f0c27b8462b7c205287878dc5fed8565d6", + "bytes": 5331 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00172/anim-clear-useless-actions-desktop-report.json", + "sha256": "d2b1784129a81b79ef30e8203ab1192613da16bdca25b15f18ada408d355a410", + "bytes": 1771 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00172/anim-clear-useless-actions-local-exact-report.json", + "sha256": "c7cfbd670b09aa46a4597867af4d8e3de6c14030dac5c9d5f21f09a9db789973", + "bytes": 948 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00172/task-context.json", + "sha256": "e502eadd8178060357899c10e31d70ad63553c927ca240773ee7469466ee0730", + "bytes": 5446 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00173/anim-copy-driver-button-desktop-report.json", + "sha256": "ba54f7de66ecfc9fb100010d28b4d26b61b585af83a8981ff1c9a77869cacb37", + "bytes": 632 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00173/anim-copy-driver-button-local-exact-report.json", + "sha256": "561380ce0b0a8d06afe41a63c4c86e3c990ff0fd4fb08aae1433b4810377752e", + "bytes": 1067 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00173/task-context.json", + "sha256": "72c30f4fe3fefec72959112af15987a0d1fa85483ea1a465f980584c68fdef9d", + "bytes": 5478 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00174/anim-driver-button-add-desktop-report.json", + "sha256": "ec69ea475f22b9c49318c7bf984200c513e6841b953d837f1cbfc925fe53307b", + "bytes": 678 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00174/anim-driver-button-add-local-exact-report.json", + "sha256": "755195e7c3c31c8d3cf19cd51f569a25d0d694312c32101cea49749a15fdb3ed", + "bytes": 1193 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00174/task-context.json", + "sha256": "6a10343b930d4e375e39b8ce1b6d1ffba2d3c535daa70bf49f5c323568f1d500", + "bytes": 5446 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00175/anim-driver-button-edit-desktop-report.json", + "sha256": "0e712a373d6c4d28cb14c38fcd911987c7216466ef52a9d3d19a3ce34e913112", + "bytes": 650 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00175/anim-driver-button-edit-local-exact-report.json", + "sha256": "9bc321582ce9a45951ec4e8a43236b69a571053fc8cf48fe4cdf8b29113aada0", + "bytes": 1086 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00175/task-context.json", + "sha256": "80eb9962039ff734c5b7c5a3f908be62c92a5cffd9cfe4de80f19ccd07ad9670", + "bytes": 5592 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00176/anim-driver-button-remove-desktop-report.json", + "sha256": "369081c441e48ee8ad39d9f4c90a4c2f80b4802143f0243e2d3e0d92f9198ee9", + "bytes": 534 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00176/anim-driver-button-remove-local-exact-report.json", + "sha256": "44e366eb69905cd48d27decfab478c13dd6b1b715fcaae8ef7d3c75d09f1a311", + "bytes": 805 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00176/task-context.json", + "sha256": "0811175e4a76169bdf347bb9fc858e67d4559ce1aa40b81e9c0e9b604d122550", + "bytes": 5606 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00177/anim-end-frame-set-desktop-report.json", + "sha256": "332660f12353d5750b4bc613f99c77fe3dd126bee2f9051c9d742db7c5f09c3f", + "bytes": 519 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00177/anim-end-frame-set-local-exact-report.json", + "sha256": "50b9716d2813795e26324a9dd3c8e32d4b8baaee92e45b893a47bddec18657b0", + "bytes": 780 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00177/task-context.json", + "sha256": "06ee966e3f4ae02711eefa7b9562493e348ec9fd2fdf09592ff3d5f5d4f2b89c", + "bytes": 5538 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00178/anim-keyframe-clear-button-desktop-report.json", + "sha256": "ba35b96dc8c7aa46427b64465aa223a87ffe2d5bf37ef42a4bd17afc430b4bee", + "bytes": 1085 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00178/anim-keyframe-clear-button-local-exact-report.json", + "sha256": "9969372551c877505755cf23454610ca8211cc77a6e1267b366e848ebd69e30d", + "bytes": 1587 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00178/task-context.json", + "sha256": "ff864d8ebd9e42c478667639926c27b4580c35baf72c77f7cb0df71d0022e179", + "bytes": 5531 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00179/anim-keyframe-clear-v3d-desktop-report.json", + "sha256": "2e63bae9cbb613ab96faf2fa802e34caf5aca2e7c3968c93ef0dc9de6a16fecf", + "bytes": 1157 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00179/anim-keyframe-clear-v3d-local-exact-report.json", + "sha256": "6b675af2fd56ce8ee146676101ca9f0be6365a9702b80d8def8c27460a1e7ae9", + "bytes": 1566 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00179/task-context.json", + "sha256": "74ae2d753d5a89d6692a3e73552849d7303e576de19f54d78311b53ba49c5608", + "bytes": 5764 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00180/anim-keyframe-clear-vse-desktop-report.json", + "sha256": "6885cc9103c1b9c8396a684559d08d0899ca096580278a5fa321ee6cec4412ec", + "bytes": 1226 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00180/anim-keyframe-clear-vse-local-exact-report.json", + "sha256": "9e05fde557e26ac9be8dc8c7983be4a25e7637542643aa8b38708a1868de27ad", + "bytes": 1693 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00180/task-context.json", + "sha256": "a90f35e4b60f26bac6d8900a1838d08cbfc20638f65f45f8dbf2306c7160f1d4", + "bytes": 5739 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00181/anim-keyframe-delete-desktop-report.json", + "sha256": "cec3f76e20a38572bf4a38789e1df1aa83ffd4f332e940c238e4d633dd841c7d", + "bytes": 1552 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00181/anim-keyframe-delete-local-exact-report.json", + "sha256": "4e75034a44e46afef417e241e6c81d84a1d46a8bf34e779495d9c6885c3b8bfc", + "bytes": 2020 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00181/task-context.json", + "sha256": "ad1b7ad175eaa42b41c75f1a36d7b55f190c8bbd39d8861e7e7aaa016984b6e1", + "bytes": 5793 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00182/anim-keyframe-delete-button-desktop-report.json", + "sha256": "5df192b8cf82b0e53efa947f9102424cfccf05b29a4e293342ea2e3ace60b0d1", + "bytes": 1470 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00182/anim-keyframe-delete-button-local-exact-report.json", + "sha256": "097fdcab03f3e748077c3b1d8cdcfbb9a9b2d7df9b1ca03c54b9f0a3a637c947", + "bytes": 2083 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00182/task-context.json", + "sha256": "76d618d236a7741f912e09f4e48ec7bbdce9ac93c3fafee48dfe7ca2ebeae03c", + "bytes": 5779 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00183/anim-keyframe-delete-by-name-desktop-report.json", + "sha256": "105d464e66e7ac9c3cee66c3a33a47101c95b08f9851a875373d43370c48f70e", + "bytes": 1592 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00183/anim-keyframe-delete-by-name-local-exact-report.json", + "sha256": "3e8dd9268e4aa73f673dbbe5c9abc3d9c00acfdbe1cc019673c49925e342deca", + "bytes": 2086 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00183/task-context.json", + "sha256": "655cf1b0482f7159b63228a6db2bd2828836d707147f3de74727e9fcdc8a07f4", + "bytes": 5772 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00184/anim-keyframe-delete-v3d-desktop-report.json", + "sha256": "576e712c7d4d72dc15fc2b9a4b65748c2ddd4b43f69c86a57e3365621f19db43", + "bytes": 1458 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00184/anim-keyframe-delete-v3d-local-exact-report.json", + "sha256": "3737dbe1e6189cd8312cc3cd3f328e764b2a9ce173a48946e9413a82e8fa4a47", + "bytes": 2053 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00184/task-context.json", + "sha256": "41f3f005f99d3e9130a4335fa5cde7982598096f57756e5760f092d3b78792ec", + "bytes": 5742 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00185/anim-keyframe-delete-vse-desktop-report.json", + "sha256": "a7fb103d0746837b7d56ae89e6b8fa6de374f11cfff8cdf79d88fba199449721", + "bytes": 1586 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00185/anim-keyframe-delete-vse-local-exact-report.json", + "sha256": "aecbd1f8b711b2299db7e7665931a549a7318d638942eb2d343d680fc0ce5acc", + "bytes": 2151 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00185/task-context.json", + "sha256": "3badb8af0ff6bd1168e2576568f8be4c44f4b77a175ea86b8e6650a9ef92077f", + "bytes": 5653 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00186/anim-keyframe-insert-desktop-report.json", + "sha256": "dfb8191a85b427ab80a3f6cb2fa118f0f7ddc1ce895b93c8c6e4ddf34f4d780c", + "bytes": 1555 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00186/anim-keyframe-insert-local-exact-report.json", + "sha256": "17e4943e084a1323e1de9eca68039b4a6a9e9d060c9e3d3e44e663c8a9d93ce1", + "bytes": 2024 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00186/task-context.json", + "sha256": "4115c25ef7bce2ce0cd3fcadedf6c8aba24fbcd4eb0f037f60f1d0548316d540", + "bytes": 5642 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00187/anim-keyframe-insert-button-desktop-report.json", + "sha256": "b7de5f8ac81d96e316a6d13b1f03650339841bf043ff3a4c9b3396a14420f506", + "bytes": 1473 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00187/anim-keyframe-insert-button-local-exact-report.json", + "sha256": "460c2285310d2cf456ced4f1438ab6fd609a1470dde4a37cd09b349099f90873", + "bytes": 2087 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00187/task-context.json", + "sha256": "cdfc0b01d9e76dfaed39d9e6c44836cf3aea3df2a363689177e775d2286e0182", + "bytes": 5718 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00188/anim-keyframe-insert-by-name-desktop-report.json", + "sha256": "d89d0950420ef0a81ca983619bf0f168b173e1a631769bcb4b342cfe3b2a9c09", + "bytes": 1595 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00188/anim-keyframe-insert-by-name-local-exact-report.json", + "sha256": "4928e35b98ac71b76c68fe2eccbd86481bb854123d428b1af66fbc7270df7e42", + "bytes": 2090 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00188/task-context.json", + "sha256": "64ceb67dd3d00a7e07a5dd4f263527326442a591b1b5a404c2235809c05274d0", + "bytes": 5779 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00189/anim-keyframe-insert-menu-desktop-report.json", + "sha256": "8f01c695716b3902e0d8caa4b335bc67257e4688a4af5e35fd61b5d98d9b3d03", + "bytes": 1581 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00189/anim-keyframe-insert-menu-local-exact-report.json", + "sha256": "a95cc2b84481263298f5bef1fbe0d46a2ab272de25ce5e0a39e84457453e0144", + "bytes": 2067 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00189/task-context.json", + "sha256": "46d321ed3909a9a52fdaf4b2c1f2ee9be2d16c2c8aff32ce4baca43c09f41682", + "bytes": 5773 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00190/anim-keying-set-active-set-desktop-report.json", + "sha256": "69ff6f5b3862697e6d17545c63264a0361aa9f6996b874897dd25a138257bc38", + "bytes": 1625 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00190/anim-keying-set-active-set-local-exact-report.json", + "sha256": "70e94768b98b0b14a1d03e9e016e62374838b4ad6fa68f893519fed6674f709d", + "bytes": 2545 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00190/task-context.json", + "sha256": "aaff27f84e2eb6f2d49c31ef6467e512acd01efca64a46dbe0fb967f19aedd98", + "bytes": 5706 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00191/anim-keying-set-add-desktop-report.json", + "sha256": "b19f86edd48c4fb40f3077af333baa89127d51218ca110861f2e77063caff304", + "bytes": 1599 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00191/anim-keying-set-add-local-exact-report.json", + "sha256": "d244b7788db82edae28bf1ceebe5d5a8978b317ea8a259abd4ecc1c071fdc68a", + "bytes": 2498 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00191/task-context.json", + "sha256": "640288c7b699719aae7d92a951846b7dcdd31e944e1ba88440300331de3af570", + "bytes": 5691 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00192/anim-keying-set-export-desktop-report.json", + "sha256": "14b1c5675c9088305246d5afea8f291ef989c6735c3795e377b42524af2f7fed", + "bytes": 1849 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00192/anim-keying-set-export-local-exact-report.json", + "sha256": "0544edee932393df992ac05a4dbb07b4b1c82e4045cb15b674b182989105d0fa", + "bytes": 2738 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00192/task-context.json", + "sha256": "5bdca225c7027399992cc26b67f0e7ed37726d1adc7afd1009677a9eaf491c30", + "bytes": 5595 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00192/WebGapAnimKeyingSetExportSet.py", + "sha256": "ef38d3cd23ef00a277e66202010b2001efca51cec053b34762924db32592f966", + "bytes": 471 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00193/anim-keying-set-path-add-desktop-report.json", + "sha256": "0deab04ebdbf06c6b344707bf3025677d445c6995cbe3ea1268808c59ec74472", + "bytes": 1991 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00193/anim-keying-set-path-add-local-exact-report.json", + "sha256": "61e41fbc56bc7c6c1cbceb4ad3e28cb599e072f8c865f0a573091b47ba53790f", + "bytes": 2950 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00193/task-context.json", + "sha256": "d459521fe19a776c7b81dd7b49dc3aba7e3f5eba864612f0817fd1ca9bb4dda9", + "bytes": 5598 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00194/anim-keying-set-path-remove-desktop-report.json", + "sha256": "36ec6d4232418b56ea06b375bd0562718ef0cb787c393a860fcf69b663aa3a89", + "bytes": 2042 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00194/anim-keying-set-path-remove-local-exact-report.json", + "sha256": "a840e751c3e8c7ef6b02f388e8db434ebcd6cb4d0a151fbb3350d98f6689f438", + "bytes": 3022 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00194/task-context.json", + "sha256": "ecd39a4fd55eb2f7fcc3bacaa8046ab21d56ce5ae8e936898c2fa9a85b9f08cd", + "bytes": 5588 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00195/anim-keying-set-remove-desktop-report.json", + "sha256": "67fc9add6112f6513a95028ba2170d468b1ca82d83cf1b8d1afe2da98b907b15", + "bytes": 1678 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00195/anim-keying-set-remove-local-exact-report.json", + "sha256": "f1a6dc449055b1cddb1f796b885eaa347cf1c64ca082af7940c9c751a59dec9e", + "bytes": 2602 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00195/task-context.json", + "sha256": "e462b1602ed761491ad2054fc7152fb36306b21a0c14f2511a3cbc21b2b740d2", + "bytes": 5548 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00196/anim-keyingset-button-add-desktop-report.json", + "sha256": "a213760a261879356db09714df719221fef2f0a4c26865e12396b80089c21583", + "bytes": 1919 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00196/anim-keyingset-button-add-local-exact-report.json", + "sha256": "3146c77b1f77e3db9b1dc855c31408b0c076ecfea258aea8a86a834ab06ad9b3", + "bytes": 2883 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00196/task-context.json", + "sha256": "325c63d0601e3b9adf8afb69f6d3cbfd970e3fc281eaa70b13d7cddb0399e324", + "bytes": 5572 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00197/anim-keyingset-button-remove-desktop-report.json", + "sha256": "223020f990cda11b261e3d0daf3171450718604cee9f923b5bd3aad8c9377b8a", + "bytes": 1968 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00197/anim-keyingset-button-remove-local-exact-report.json", + "sha256": "e44421253fcb26b9d313d9f97324b22a46fa8bbd8b734508416bc7bcd43c8f7b", + "bytes": 2957 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00197/task-context.json", + "sha256": "e94b2c9d77d75b841ae3fe60df18005fbbd9da080417e91ec06c79ca62a3d67f", + "bytes": 5605 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00198/anim-merge-animation-desktop-report.json", + "sha256": "e170913f6dd5161a10853f04c2e56ea1181de5de12fdf5fbb1159745dcd0f757", + "bytes": 3405 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00198/anim-merge-animation-local-exact-report.json", + "sha256": "914ef24f01a81d7baceeed4f67f317abf529cedec6ddbbd22c1ed35bb94039e2", + "bytes": 4909 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00198/task-context.json", + "sha256": "33a275667991c5fc655596a0197bb46467f233a307bcb7752f5531ee9a3819d3", + "bytes": 5605 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00199/anim-paste-driver-button-desktop-report.json", + "sha256": "b20074b47768751a5e6c884165c4119e95296eb7a6fc4812e8bef3676e7aaf08", + "bytes": 1558 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00199/anim-paste-driver-button-local-exact-report.json", + "sha256": "7f860445f0e6889e6993e458b0e81f075c5b97fe8c2cf35b0eae4846e2d4cc5e", + "bytes": 1391 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00199/task-context.json", + "sha256": "e054e382aa573e117fc34d47e2e2d8733ac17d75d490dc4f5de397e3fb9658f7", + "bytes": 5614 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00200/anim-previewrange-clear-desktop-report.json", + "sha256": "b1e7212248ff23d323e9c00645db52b38c4570f42c344b6325f1506c404704c4", + "bytes": 634 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00200/anim-previewrange-clear-local-exact-report.json", + "sha256": "7ba44c02fcfa34df1c4e25fb3567474893b47dc4a20522f33634cd3ad36fe940", + "bytes": 822 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00200/task-context.json", + "sha256": "1cb7806458458bc5e417a84b556e3fb777457f2af1e1dcd2fc4936911cfc508a", + "bytes": 5554 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00201/anim-previewrange-set-desktop-report.json", + "sha256": "9a4abf76db56b660808f66834d941771a0cf860a662d53771ff8bf309bf2a162", + "bytes": 591 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00201/anim-previewrange-set-local-exact-report.json", + "sha256": "7751033cb2d246ed4b87d10592894f27574d3409b5d48f3161a583f186786b67", + "bytes": 848 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00201/task-context.json", + "sha256": "0ac3856c852d6f7e08c7709f2b6435b46e1ddb2514004d9c9caf10d255b71e72", + "bytes": 5472 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00202/anim-replace-action-desktop-report.json", + "sha256": "fdb5531aa70842959bb57b8b9490c9839037af9a69191e23834e8793b507ac10", + "bytes": 3818 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00202/anim-replace-action-local-exact-report.json", + "sha256": "c122dbb9daadb8a449032ac742d308e7b9473bb4d05ae7855cf80ed3982f4263", + "bytes": 1065 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00202/task-context.json", + "sha256": "1a27a9755974d092a7c1a3599657e27f19ca2d56455836c6f99142547c0866b3", + "bytes": 5431 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00203/anim-replace-action-new-desktop-report.json", + "sha256": "1017546d241a1e8b8f26c02bb392269a1325b18cbba90b1598f786250f13976a", + "bytes": 2390 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00203/anim-replace-action-new-local-exact-report.json", + "sha256": "d743947398ac1b4beca0f6cf86f676bf24d668488e1a9a575ec561d2445a1ed6", + "bytes": 1063 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00203/task-context.json", + "sha256": "772d0122a85d60e0f0ed73fb53f700a89d251e2f8581ca84b2ee01c7792e66ca", + "bytes": 5570 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00204/anim-scene-range-frame-desktop-report.json", + "sha256": "fd7943551bf6662d8cf43f623cdb966e7242b172eff8ca0f3bfee71c3b67dbed", + "bytes": 765 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00204/anim-scene-range-frame-local-exact-report.json", + "sha256": "3195131f4c4cfa050656a4a301840d857f5eb65e2929aaa867d3b056d3fe631c", + "bytes": 988 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00204/task-context.json", + "sha256": "5b90524611e783f9f9103ebc4d9504450edad0b471f9d86f62c2602c7c7d2edf", + "bytes": 5566 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00205/anim-separate-slots-desktop-report.json", + "sha256": "d3976e54b5617745cd29ed3979a030553a6692a54d8cd59454593efac1e419be", + "bytes": 3023 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00205/anim-separate-slots-local-exact-report.json", + "sha256": "421feb4b3b822a8bb13999e268a42f3378408d4d725879d1e05c3c8efe359a84", + "bytes": 1055 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00205/task-context.json", + "sha256": "744b861440cf850c81545c532cf78c6c946c2214f539d14da72d7e2fda23ff51", + "bytes": 5451 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00206/anim-slot-channels-move-desktop-report.json", + "sha256": "17e021647d84852ea074b134a722de8dedeea70db3cf180fa60456892ebc86df", + "bytes": 2953 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00206/anim-slot-channels-move-local-exact-report.json", + "sha256": "4c92663dc8eb44d504ba95d4a978211656bd44273ff53cb468101f00ef20f8a3", + "bytes": 976 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00206/task-context.json", + "sha256": "da58033c8325bdf4c16687776315ba7689c9a0d908f327dbabf98507699bbc3c", + "bytes": 5504 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00207/anim-slot-new-for-id-desktop-report.json", + "sha256": "62998821fb29ec9edb1c2796f984e009091cb9d12ccca4ec058094aea695a6f3", + "bytes": 1605 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00207/anim-slot-new-for-id-local-exact-report.json", + "sha256": "2c843b2611ac386e68943adb36fc826dcb694c8fb30df9b0abf10f8970b4f4fc", + "bytes": 883 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00207/task-context.json", + "sha256": "37746bd730e6642f8a2ca14fe36b590977c2a409cf0df23e338ef43d7a22fd13", + "bytes": 5523 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00208/anim-slot-unassign-from-constraint-desktop-report.json", + "sha256": "a303a5e1060fde95fbaaa0cf6e759cb4af330cf233b65ae1462953960fca51cd", + "bytes": 962 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00208/anim-slot-unassign-from-constraint-local-exact-report.json", + "sha256": "cc7a531c48dc232d822ae6ffcc19f459d44d02976eb3b2f04133435d7a98b158", + "bytes": 1044 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00208/task-context.json", + "sha256": "d5bd4bdecaafbb137b89769a001b6e966e47d31059bce66b524384ea3e8a0a01", + "bytes": 5590 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00209/anim-slot-unassign-from-id-desktop-report.json", + "sha256": "12d1d6492c6d682a519045cc840c0e8f8b212b9eca9f0bdfa15536dc4602f17f", + "bytes": 1438 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00209/anim-slot-unassign-from-id-local-exact-report.json", + "sha256": "e42355c5cd82a7b06e5560312869fec9eed33ba7db613668c7920b3363901122", + "bytes": 957 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00209/task-context.json", + "sha256": "c6c9e58a950aee3230dc6a2a04f1ec5b8273caf2a4cf34cf86006193eaf4f78e", + "bytes": 5544 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00210/anim-slot-unassign-from-nla-strip-desktop-report.json", + "sha256": "35c89ff2c01b3887949572d83f27665b76eee49c5486e40b2c1b9e649916c9a2", + "bytes": 1070 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00210/anim-slot-unassign-from-nla-strip-local-exact-report.json", + "sha256": "d83b48f105f430cb7bbc2151b837fa589944a7c8d36a6156269ce4552aea5d41", + "bytes": 1040 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00210/task-context.json", + "sha256": "8d6bebc0df33dd02879078f9d824883255a290c2d9b72609bbecf689e3b49c66", + "bytes": 5541 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00211/anim-start-frame-set-desktop-report.json", + "sha256": "b17a936ea363e216aa819cd90c79669a8f95c0c9cdb6aae74c5e24df13a4e240", + "bytes": 527 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00211/anim-start-frame-set-local-exact-report.json", + "sha256": "b145f06715d9d6ef03a304e79d9cf635912db731d00991cd3be4dd56a6cc1a71", + "bytes": 790 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00211/task-context.json", + "sha256": "910687fefc3ca3b8661d437c62816ebb19c3c263ec745ec70dcf039dfe0fcc43", + "bytes": 5454 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00212/anim-update-animated-transform-constraints-desktop-report.json", + "sha256": "6e486664dd967eec8f93569db555e23400fc147d40d172b7c1af19188e7e25e1", + "bytes": 1513 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00212/anim-update-animated-transform-constraints-local-exact-report.json", + "sha256": "98592f2cfe53ea6f2d59b34203211b0a45d3969ff546857313e2463f7f8e7b57", + "bytes": 1207 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00212/task-context.json", + "sha256": "b1e138449cd81cc88bfe78855410f9b640db035bbfc59bc21fd750f5887ca3e6", + "bytes": 5621 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00213/anim-version-bone-hide-property-desktop-report.json", + "sha256": "35c3ee64110db16c946056cd3c3044321d6101a4ee68c2fd68038cbab4576616", + "bytes": 2086 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00213/anim-version-bone-hide-property-local-exact-report.json", + "sha256": "117e80e3ee5caf95979201d85b650de27967196242bf6f5656d24c3cec973d85", + "bytes": 1206 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00213/task-context.json", + "sha256": "a9cbb2cffc15ad50810b4e806492a6dda84b30757f085c17a0c754c4160c9868", + "bytes": 5635 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00214/anim-view-curve-in-graph-editor-desktop-report.json", + "sha256": "127e6168e198cae8661d358b457d1459f9b515f79d2a6e86aa0c1022fb3210c6", + "bytes": 2044 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00214/anim-view-curve-in-graph-editor-local-exact-report.json", + "sha256": "bfa381ab96c2f2f0d9d16dcc7afd7a0200284a5704610cb70a6f0db402c3698b", + "bytes": 1513 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00214/task-context.json", + "sha256": "905f7ee4e419109e77a274f385c405132f5e471cf0c4f0e24c363fd60dffb431", + "bytes": 5704 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00215/armature-align-desktop-report.json", + "sha256": "f0f94981885773704748c302cad95cf7b0a24137cfb6d36921e8d464c408cb40", + "bytes": 1667 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00215/armature-align-local-exact-report.json", + "sha256": "d9b19ad3b36bc1a7303207b9ed9f3c2b32df072fce5349718b2783019e144e4e", + "bytes": 1250 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00215/task-context.json", + "sha256": "82b2e30643461bfcff8612e29aebe38d50f2585b8be9b1c780ae6d762298ab87", + "bytes": 5648 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00216/armature-assign-to-collection-desktop-report.json", + "sha256": "f9ea1aedef9d6286d5038e9244cd82fec979238d3d72da76201b7bc3ac18b7e2", + "bytes": 1396 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00216/armature-assign-to-collection-local-exact-report.json", + "sha256": "4d063e44db5ebe56585caf6e1e28c9ba5dfaee8ddd95c4402a0d40474b94187c", + "bytes": 1381 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00216/task-context.json", + "sha256": "0f93744560fa885b9cf0d8e1c6ed605f922ea4bc44c521fee023adae2c0e5cae", + "bytes": 5611 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00217/armature-autoside-names-desktop-report.json", + "sha256": "2ccaaa1f2b8549abc17bd0640add62b658ccc77b9a2792456df929dd209e466d", + "bytes": 1625 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00217/armature-autoside-names-local-exact-report.json", + "sha256": "2a479e88f080b7e7530f1f8f6ac87fe5aa5ca7ffaf69a068eaf4eeb99b257e80", + "bytes": 1097 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00217/task-context.json", + "sha256": "0dc798480ef127c5528973b78ba24a99f8514b04212578e0f3b5633be8da06fa", + "bytes": 5707 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00218/armature-bone-primitive-add-desktop-report.json", + "sha256": "7176938d759ad47b1c4fd6a4c4b73cc3af615518f30540d535a0f997bfdfc3ef", + "bytes": 1395 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00218/armature-bone-primitive-add-local-exact-report.json", + "sha256": "042cee11ebc0ccac3108e51773fb486c08c8ef6f745d018b0abb6469678f4fb7", + "bytes": 1104 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00218/task-context.json", + "sha256": "42735f344b07d948bd9f302e4e21ae7580ca97506d5903667b56c24b4af02d48", + "bytes": 5597 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00219/armature-calculate-roll-desktop-report.json", + "sha256": "b4ea9eee1596aa99d045e7064b96a763faf7b29d6f7c79b95045d75ff26dd922", + "bytes": 1783 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00219/armature-calculate-roll-local-exact-report.json", + "sha256": "1c888b9739c03fcd5aed2b1de20a2aea3871c80cff6b6fcb464e09a5478f5c23", + "bytes": 1346 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00219/task-context.json", + "sha256": "1c6a55bdc4fd17687a7695b44fba71bd5ad26644919dbcd363b6a7dec07cbde9", + "bytes": 5638 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00220/armature-click-extrude-desktop-report.json", + "sha256": "5fe98d54a481df86862f9f3bcdcb854fa9ea4abfb7de9de6819a07beb2bdb4af", + "bytes": 3760 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00220/armature-click-extrude-local-exact-report.json", + "sha256": "dbe683725d4e05220b6abaf837450c31f66cb8c82eb4ef75130c332ba98125d8", + "bytes": 1894 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00220/task-context.json", + "sha256": "dfba3c91da5262603b2958c8011b317a5edd25bd1cf5b1a58cbe6bfd224024f7", + "bytes": 5619 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00221/armature-collection-add-desktop-report.json", + "sha256": "ccbe838e9d73ce8d63f7b81b5d7b28acf038b802fd5f76c5b806f21925df6e3b", + "bytes": 1356 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00221/armature-collection-add-local-exact-report.json", + "sha256": "edd1a7688e96982df6a0b3216784c437d668c70fb817e58f11be9a6be6a10dcd", + "bytes": 1327 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00221/task-context.json", + "sha256": "33c38758f90a7a49b0864dbccd1176d04ae0057829e7a1aed56ee8ff66e57610", + "bytes": 5670 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00222/armature-collection-assign-desktop-report.json", + "sha256": "db90ed0998768c9009f1c19b9eec12392d5c73bc7ca914a780bdd6721b41e932", + "bytes": 1528 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00222/armature-collection-assign-local-exact-report.json", + "sha256": "1b8650f03a1d51cd58f28be3a2bca0d44b34284b82708f5c16972360b9695791", + "bytes": 1609 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00222/task-context.json", + "sha256": "c512eb33c57c21e0d140eab83a6bf9df69011a31148a08449aefc8a63de195da", + "bytes": 5594 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00223/armature-collection-create-assign-desktop-report.json", + "sha256": "d02d028f7ec561db7363feea7f5504c5f8f7d719cd36b6a6f2edb70847996b4c", + "bytes": 1665 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00223/armature-collection-create-assign-local-exact-report.json", + "sha256": "14b7947dd2485e11eeb2045d565fe97732865abc4aceb0e6765e3ab2fbe0f63f", + "bytes": 1735 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00223/task-context.json", + "sha256": "a9b51398cc072d9ca64ea26ed4a10e5988ec4ba428dc1af18a54997c640d7638", + "bytes": 5669 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00224/armature-collection-deselect-desktop-report.json", + "sha256": "78b8615c71b02dbcb6b2b88086118b9c713aa3762ddf5d947ae0b696d72d7744", + "bytes": 1314 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00224/armature-collection-deselect-local-exact-report.json", + "sha256": "9bfc7c03a0e46bb31069e987c0a60dea1ebb0b5c17dbe382fb1d1847ad42595c", + "bytes": 1190 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00224/task-context.json", + "sha256": "7201e11f59e90287699d96e377865963fe9f8aede63b4447941642bf877e2574", + "bytes": 5718 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00225/armature-collection-move-desktop-report.json", + "sha256": "06074b980f8df448546afcf0c96e89e47bcb160b309db81c869d525b35b281ad", + "bytes": 1908 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00225/armature-collection-move-local-exact-report.json", + "sha256": "aa0becd48b2e42dc3c3ac7222d6e0486ffc8089bceefb3670f102fecd6d1f2e6", + "bytes": 1968 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00225/task-context.json", + "sha256": "a946ed0bc5ef3004a227fb461dec0b46e1a571ddeeb7deaac46f08d4a4e840d6", + "bytes": 5651 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00226/armature-collection-remove-desktop-report.json", + "sha256": "525ca8c6954750c9982bf91cbb3f26c9ad7a81911d56890dd6570cccfdbe3b37", + "bytes": 1912 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00226/armature-collection-remove-local-exact-report.json", + "sha256": "6df4c731b900161076a59892d26f15a8775d18571f27eb88321f890f91c9b9a0", + "bytes": 1734 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00226/task-context.json", + "sha256": "b5bb4620750aea7f1773049c127349b7fca058c3345cecae20e302d8054632f8", + "bytes": 5639 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00227/armature-collection-remove-unused-desktop-report.json", + "sha256": "4909e040db7be0d5ac84148d52bb47cbdf0f12a30612e6c1bae1067fd4f04dca", + "bytes": 2060 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00227/armature-collection-remove-unused-local-exact-report.json", + "sha256": "b41c86788e6b9e21b04d42bdfaa645d29e669f8dfec9fdfaf96fa09771c64475", + "bytes": 1784 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00227/task-context.json", + "sha256": "e7b8b69221ddde77585cf8e66e3c9de3fcc1cedc61739fd4af2e1385e9b5dabd", + "bytes": 5688 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00228/armature-collection-select-desktop-report.json", + "sha256": "569c817b422e7947c30e202de7223a8da949127a022ce2b1e4f28de15202a440", + "bytes": 2582 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00228/armature-collection-select-local-exact-report.json", + "sha256": "cdb8e8196179776f53406eb67c2d6e838d547a2bae9b3dbb3a337646656abe64", + "bytes": 2200 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00228/task-context.json", + "sha256": "1518cfbe7e66961eaa29ed27eed18d473e3194fc89575dcaea86007bb74c993b", + "bytes": 5649 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00229/armature-collection-show-all-desktop-report.json", + "sha256": "afe66c1b338702309a1c2a4af59d33365f31baf0db1797a95b0f980ecc76bc0a", + "bytes": 2342 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00229/armature-collection-show-all-local-exact-report.json", + "sha256": "1f4afb14bbdc7db07aad0b6df361b89e7020427ef63edc3fa641b3526dc05994", + "bytes": 1974 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00229/task-context.json", + "sha256": "2fe7e53c051464cc86e984cd9be592ee05b3e827e4d171aa3ad1c7bd49e68de7", + "bytes": 5724 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00230/armature-collection-unassign-desktop-report.json", + "sha256": "289f7d681eadad4d426faad60787a12b75e27a728a1b02725b06c130cc501abe", + "bytes": 1858 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00230/armature-collection-unassign-local-exact-report.json", + "sha256": "4fdb066cafc7b138c1b2bde389ebd9794236971416ce27ee51b8348a5f3cb18f", + "bytes": 1648 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00230/task-context.json", + "sha256": "9c0f7fe99c270e6a97f497162dcbe83c1b5ecd8efba6578ac95bd808f05cfed8", + "bytes": 5669 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00231/armature-collection-unassign-named-desktop-report.json", + "sha256": "abdac650cb16974e738ec81067a0f44ac42fa3e9cf7c0cf86d5c0969b4cf1155", + "bytes": 2019 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00231/armature-collection-unassign-named-local-exact-report.json", + "sha256": "9800642cf4e7763d144b4d16dbfdd9c36c765bb8bef41407bcf7dafae0540208", + "bytes": 1777 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00231/task-context.json", + "sha256": "76040c7c526c8bac16b7fe04603b6997755d4d1a70f99c09cfdef5c0e59a3f4b", + "bytes": 5672 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00232/armature-collection-unsolo-all-desktop-report.json", + "sha256": "e42a8ace07205e1954b5685c46103736827bc6cdea98f182dc9cc63f1340094d", + "bytes": 2697 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00232/armature-collection-unsolo-all-local-exact-report.json", + "sha256": "9be85459dec5551c4245cea4cfd025ca3dcef6be5e01ee24cb42249852e0ec0d", + "bytes": 2155 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00232/task-context.json", + "sha256": "f4119c512efba997ef39caabb833c12294db92e703df7ff9218841d47a0313c5", + "bytes": 5709 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00233/armature-copy-bone-color-desktop-report.json", + "sha256": "45464ed86aa52df4a5db68c0fac749585dc7f09b2d2c86080be467e1bf54c068", + "bytes": 3637 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00233/armature-copy-bone-color-local-exact-report.json", + "sha256": "1f8e2f7ba0c32ff17d12ed24da24426d8359d45ac3aa8badef68d2c98cea2ec2", + "bytes": 2221 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00233/task-context.json", + "sha256": "17f3369193e212c22b7cd12d9041f46dae78b19bf693ba5a1a791f3650f2d175", + "bytes": 5741 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00234/armature-delete-desktop-report.json", + "sha256": "d6c85736295a6f07950292425294e188a6b17228c91eb1151a38e6da4833679e", + "bytes": 1283 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00234/armature-delete-local-exact-report.json", + "sha256": "89e0b6b13dd025e4d0d72eec409845c44f43d90e52fb4f506282cad455b5c0a8", + "bytes": 1083 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00234/task-context.json", + "sha256": "da2f3111822b6a7238e2fa21d03976db0d614565da4365b6b8158877335ba70d", + "bytes": 5803 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00235/armature-dissolve-desktop-report.json", + "sha256": "bb9acbe5fd923532f125e511f6f113ef3543b519bfd757a942e4466eef7e2c79", + "bytes": 1998 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00235/armature-dissolve-local-exact-report.json", + "sha256": "97e46604d0c79afccd2968e64127da80382a92053f53b6f0b706d7b742aa608e", + "bytes": 1537 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00235/task-context.json", + "sha256": "87839be45f3d7071cc81118d5977cf405bd84ca8c59cc759ebea7bdc32541f03", + "bytes": 5594 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00236/armature-duplicate-desktop-report.json", + "sha256": "b648c7d518227a03b4d142a61ad4e3f15de71cf58e3fc23b603f7fdd26e1bf0b", + "bytes": 3062 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00236/armature-duplicate-local-exact-report.json", + "sha256": "2c005ed1342943cec21b7a71371449af4d01909026bd18c8cd9ca65f868d51a9", + "bytes": 1268 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00236/task-context.json", + "sha256": "91d3c4acf7697b24a72bcba8a093f2a3d1ea58578583983155ff2bc92b060184", + "bytes": 5747 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00237/armature-duplicate-move-desktop-report.json", + "sha256": "94745cd286e017a11dd6fd8df308a22e4d4b5e572bbc3115ee8bbac5fa430bea", + "bytes": 3188 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00237/armature-duplicate-move-local-exact-report.json", + "sha256": "3b99961a3aaf2e61d64aa6c9ac9c76e9c5db72e2b5bf14887f613d1bb0723ff9", + "bytes": 1437 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00237/task-context.json", + "sha256": "553e1d6a385d20840eed34b7617b3496e7bded0fdccdb2b68e1ea61228bcbb80", + "bytes": 5677 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00238/armature-duplicate-rename-desktop-report.json", + "sha256": "90a4d915eb9967f97495ede7b6f855d2049ea1059208b99e75128d79e7f51911", + "bytes": 3185 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00238/armature-duplicate-rename-local-exact-report.json", + "sha256": "f3e103b6c1a311bfeaad31c96066060519b091b3ae14c925a3d18e89e6ba8d2a", + "bytes": 1446 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00238/task-context.json", + "sha256": "5f58af69bdf6921fa2e46c229206c3a26ff737a9f04ad3602ba46e80061169cd", + "bytes": 5687 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00239/armature-extrude-desktop-report.json", + "sha256": "3f264c22cc013676e33e82b98458a5baff8703addaaee26812ed2205aa062fed", + "bytes": 3122 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00239/armature-extrude-local-exact-report.json", + "sha256": "524adb7be53d523d48f87773d6782bd78db1e81eb6d88c6eba3641ff283e5269", + "bytes": 1492 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00239/task-context.json", + "sha256": "ef9bc0d189399baae95fef4e518ed6997c26b21ade00d4cda06ff1b086a57cfb", + "bytes": 5693 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00240/armature-extrude-forked-desktop-report.json", + "sha256": "37ca8eb97c454cc572f70143aa98f01cba23190ea889bce7b688529d415945a4", + "bytes": 3260 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00240/armature-extrude-forked-local-exact-report.json", + "sha256": "957d36b2188d063415a2dcb70995bacddfeac01152872cf06ae27bba941a3ce6", + "bytes": 1627 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00240/task-context.json", + "sha256": "3756f32ea6e1bf3b36c5480563a90e004f9a8e0836e18aeaa9f3e7b5d7abc545", + "bytes": 5719 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00241/armature-extrude-move-desktop-report.json", + "sha256": "a24fb58e990504c5bd8a8d7a2d010f16028e070f099137bb26e5a2769a7fcc38", + "bytes": 3206 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00241/armature-extrude-move-local-exact-report.json", + "sha256": "05293986bab59aed5d1629d9a9e28c3499db619b33294f6f5d7557a463bfc001", + "bytes": 1584 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00241/task-context.json", + "sha256": "ddbe88064be8649f792d2c731a9269ccb3eabe35a08430e613ca8cba0b25ddbb", + "bytes": 5734 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00242/armature-fill-desktop-report.json", + "sha256": "39f5db8f1a77e188ef3d4c3084c9bcf961551767211b40f006499a66ad51f56f", + "bytes": 3730 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00242/armature-fill-local-exact-report.json", + "sha256": "f4d927d1e6a10c9db3bd0b6a32b771aa96a25af9f9a5ab4a01741932173a293a", + "bytes": 1546 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00242/task-context.json", + "sha256": "59d07c1a9a8151af3b530ca1e6ffa56b0747ce67637ac9851c94c63e70b0ded8", + "bytes": 5714 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00243/armature-flip-names-desktop-report.json", + "sha256": "489a05e88b2f35bfa0c910623db17897d70041afbbeecd2ad6575997c62d5a7f", + "bytes": 3038 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00243/armature-flip-names-local-exact-report.json", + "sha256": "e3a6efe370d43e0d05e4668994c70dade862aec0f45b50978558d3468e022d93", + "bytes": 1345 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00243/task-context.json", + "sha256": "c71f199a41f023b1724f3075c1755b509f014918cbd27937779323e4d6d16974", + "bytes": 5733 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00244/armature-hide-desktop-report.json", + "sha256": "382b6abd52f5d54e519690cc3760fc5cddf1db2516abe8fe3e2acfedb500ed83", + "bytes": 2366 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00244/armature-hide-local-exact-report.json", + "sha256": "295134cdf0ed210c1eebdb166ad3251dd47234ff4b23e084a6c6f4e26e8615ea", + "bytes": 1104 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00244/task-context.json", + "sha256": "4103d8304ec404adcd995b030bd6f266d76971fd91068159fb8b7686106fc738", + "bytes": 5594 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00245/armature-move-to-collection-desktop-report.json", + "sha256": "26ba97ec93b9e190d06dc912b8b441eb14c49d3a409ae2635aba0adc8dfa6f9b", + "bytes": 3196 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00245/armature-move-to-collection-local-exact-report.json", + "sha256": "d898f1ffaa59f14b7a92e88d90413d0b3c200548ee5288342938f3803077e186", + "bytes": 1740 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00245/task-context.json", + "sha256": "a0e24448ada6a6649940caca0934e6cac7783f5e486efeb73baa352874e971c0", + "bytes": 5613 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00246/armature-parent-clear-desktop-report.json", + "sha256": "e59a8594cbc6f313ac9651706575eeabd2d58fb2520eafdf825c5a467a2d9b7a", + "bytes": 3246 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00246/armature-parent-clear-local-exact-report.json", + "sha256": "3e89fd698b0a8d118b0dcfb428f957ad7cc051e5a7a5b898cf90f49c996080a2", + "bytes": 1304 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00246/task-context.json", + "sha256": "bc87cb6e78492af2c7c31afa6da9ea79e919ecdc793d7a720b1fa6127df6fc93", + "bytes": 5621 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00247/armature-parent-set-desktop-report.json", + "sha256": "c2348f9a4e51030006f9c1a2756f016e2c454d957a952e2d07a2948dabba9f4a", + "bytes": 3266 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00247/armature-parent-set-local-exact-report.json", + "sha256": "ed5125f71cbe8af51244c5bc8798b2d0722d3272a331b9999ba22f5606926139", + "bytes": 1385 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00247/task-context.json", + "sha256": "63cae595ebf9ce8be4b1d02e48e6130371978eaae49133e5da24b87dfcca7b53", + "bytes": 5602 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00248/armature-reveal-desktop-report.json", + "sha256": "7f972847f4646f54f02e2e25efefd993c083c0be15ed18c2b570640bc314059a", + "bytes": 2373 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00248/armature-reveal-local-exact-report.json", + "sha256": "35ca506d64f000444107c2a6da1b8a7074204c415dc6d4ea4afc9492aeb57209", + "bytes": 1124 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00248/task-context.json", + "sha256": "db45073631709d276137b75c98057adc5b96605f45b929c42067333b9607cade", + "bytes": 5328 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00249/armature-roll-clear-desktop-report.json", + "sha256": "d4961663044d04bed11d79948c12d7672d541da799cc519a7e0043023fd0540a", + "bytes": 2002 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00249/armature-roll-clear-local-exact-report.json", + "sha256": "60aff7413075c183ce0f8c443784b01cbb57343463588185c5f1839636e07ee6", + "bytes": 1196 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00249/task-context.json", + "sha256": "ca58f30a8476e7f61c6b3dec4d2225582cfcb9f4af454b62a42a48d2449ed74b", + "bytes": 5357 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00250/armature-select-all-desktop-report.json", + "sha256": "0d68d0d0b4f3880339f29ef467bc7ab241623bdf3422ca83c53b49efec5e7295", + "bytes": 2463 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00250/armature-select-all-local-exact-report.json", + "sha256": "e8d922dde3d8401c79adc75621523ee3441a4d97f74416816e2f2209083297b2", + "bytes": 1395 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00250/task-context.json", + "sha256": "75f8b5a9a167a179607417792bf5520b1cbb4c0eec5e665be7769c65265554d5", + "bytes": 5361 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00251/armature-select-hierarchy-desktop-report.json", + "sha256": "8d57e6ce5bc33f6e87eaba09ffb411bf68b752a4729438de9f78063f7354c092", + "bytes": 3493 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00251/armature-select-hierarchy-local-exact-report.json", + "sha256": "4d36c680a2947be8c29e076849d3d4ec8ad2a2c1a2ccf9e7330b311c0d4be5ac", + "bytes": 1851 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00251/task-context.json", + "sha256": "a8e92d107ef3e012f2d0321a00b7c55c9475848346488de1804645c238618ca5", + "bytes": 5352 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00252/armature-select-less-desktop-report.json", + "sha256": "a7cb4e98fbf96079ef88c8de7491a43e611e1c759525d7bffdef785cadf458f7", + "bytes": 3347 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00252/armature-select-less-local-exact-report.json", + "sha256": "5e9743ec56f672990fca63850abe1abd567c6c0488926be44a00dd6295b96c39", + "bytes": 1779 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00252/task-context.json", + "sha256": "ea27cc467ccdccd6292bd5e76f1ecbabfe0ddcbb553335684b8512ff207db7a2", + "bytes": 5315 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00253/armature-select-linked-desktop-report.json", + "sha256": "3a2b4e82aeaa2fdea3ae01df802c8de371f184dc0b018cc1c16d2349d19b9fa3", + "bytes": 4202 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00253/armature-select-linked-local-exact-report.json", + "sha256": "d184c248dd13878698f5b973331bbe7d65cde2defa697f22e4c05df9a433b42a", + "bytes": 1794 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00253/task-context.json", + "sha256": "94c2ded148413fd67032d63cdcdcdf5b332cd99569b02804e3a743471fb3cda9", + "bytes": 5326 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00254/armature-select-linked-pick-desktop-report.json", + "sha256": "1338c391ecabbb35166c5df8e36a8a0f5b65deca3994f7c2ee1d799b564906d0", + "bytes": 4382 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00254/armature-select-linked-pick-local-exact-report.json", + "sha256": "14560b0b43aa917fa31fe8c9023992285313204c858d7260da22347a8696b9bb", + "bytes": 1963 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00254/task-context.json", + "sha256": "dc292fe37486b022284f46739ad523b5a6ee406157a325aa855411ee3e24c3f6", + "bytes": 5348 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00255/armature-select-mirror-desktop-report.json", + "sha256": "d5b76fb51060be4e1b56e81d238d74df4556b09ceae84dcb0f9c545dfa1bf35f", + "bytes": 3216 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00255/armature-select-mirror-local-exact-report.json", + "sha256": "e87ab4016b6ef049c7ed7177d9dee54d44dbcb88d5bbab6f0dbefddadce6b48c", + "bytes": 1454 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00255/task-context.json", + "sha256": "1072a60c75f9ba38bbef954deeda027e2906ce86485b94b7a0315409aabd682a", + "bytes": 5382 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00256/armature-select-more-desktop-report.json", + "sha256": "76c4cbf93b70f19535b1e4b2f9b580ca6803da03ac3c7aeafa4523fca6a24baf", + "bytes": 4142 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00256/armature-select-more-local-exact-report.json", + "sha256": "d091f0032c51091e234da5ff0c931855cb1491dd86d9cd51ef0fc2e7143e9017", + "bytes": 1691 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00256/task-context.json", + "sha256": "03b45f7ec25e3cf1c82806959ab14a1b678ab66d47e05ce9d2f11ddec004871a", + "bytes": 5343 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00257/armature-select-similar-desktop-report.json", + "sha256": "22cdd9b6ce61fedfda0b76fcedb0c122176d4e17c5ca7ae06277d221ef1ac22e", + "bytes": 3524 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00257/armature-select-similar-local-exact-report.json", + "sha256": "cc8a91b14a765d9643289230ca8e38800cabcecc74883845b8e06087f528be4c", + "bytes": 1470 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00257/task-context.json", + "sha256": "9464e6917cbd8e532889f70781049e38e5131f841c3c638bdf6a6f0342f35429", + "bytes": 5371 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00258/armature-separate-desktop-report.json", + "sha256": "8226ce041d7bd04dc31d93e01537bd8a598886fdfc1feaa36e3d98910007e720", + "bytes": 2790 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00258/armature-separate-local-exact-report.json", + "sha256": "4cefec2f7519e0a3e23eed6ba3e199760ed46f6af0cbe36b48932270211ea3b4", + "bytes": 1474 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00258/task-context.json", + "sha256": "6261d1f9cc72a6cf1129913f10efee4898da9c1bb7b8ca264d255d3835043572", + "bytes": 5348 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00259/armature-shortest-path-pick-desktop-report.json", + "sha256": "3a42c0aaa54538109b1bec89e12976848464e18fdd27c30cc43b302a78557fd8", + "bytes": 3790 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00259/armature-shortest-path-pick-local-exact-report.json", + "sha256": "35348832a78139d10dc5c8217f64453c54430be47ee8968d59f76a76ccf2ceda", + "bytes": 1625 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00259/task-context.json", + "sha256": "efd58e511f54e130b2625a01f9cad988ba054648023d2616506dcfea9e4313fb", + "bytes": 5387 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00260/armature-split-desktop-report.json", + "sha256": "3f7022cc9a1e6398b124763aa8f99c42e633dc036a7cae887e3fb252afd4352e", + "bytes": 2530 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00260/armature-split-local-exact-report.json", + "sha256": "38a055ec0e21dc6adf0818089dafce97ddcbdbed78e9a6be0080ad960b94361e", + "bytes": 1103 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00260/task-context.json", + "sha256": "0f70c73e731acd6e334ba69b6b16404e02f544e2ea4adbfe5e38f73af3a7c5ca", + "bytes": 5337 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00261/armature-subdivide-desktop-report.json", + "sha256": "77e3d698de66ad1d1b5d595049f6e515e3fddbcdb83ef8a3bce25afa79c84c23", + "bytes": 2916 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00261/armature-subdivide-local-exact-report.json", + "sha256": "dca39b46351f9447faaa84c11cebee86a1dc87876052b55df3a5e2d1a0cd291a", + "bytes": 1260 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00261/task-context.json", + "sha256": "3c715414fd5097f5296ab31ee86407dbb62ee02d1d804cc5d1eb9dee8a251a30", + "bytes": 5350 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00262/armature-switch-direction-desktop-report.json", + "sha256": "b354e79b081ed5a42edafb0d2ff7c2811b3793b06997ffd493cb0412c10637ac", + "bytes": 2733 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00262/armature-switch-direction-local-exact-report.json", + "sha256": "a70785bfc13f65f94e22747c67eff0b4a07b0aa3afbaa999a5f39ab706769cda", + "bytes": 1467 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00262/task-context.json", + "sha256": "60148b63a69b0e197dcde3f81e322335806a7e9bd2f2a33c7dee44daac2da996", + "bytes": 5378 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00263/armature-symmetrize-desktop-report.json", + "sha256": "2ca4f83737867b62fd8c4b42bc6092a59178baa4a18f8bc192764c859d1e5c88", + "bytes": 2961 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00263/armature-symmetrize-local-exact-report.json", + "sha256": "1dbef4a312f55198108fcdcab216e0739f08c237a19084e28b21a63f53f9dab7", + "bytes": 1603 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00263/task-context.json", + "sha256": "61576b4aa53a9fe9c2eb5ff564a47ac218343ba32fcccd00322d4d9a1420d9c7", + "bytes": 5350 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00264/asset-download-desktop-report.json", + "sha256": "399aed90c3b236f1c169fad88dbc92f5409d26ca35bdeb5768bb9272a50a7157", + "bytes": 829 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00264/asset-download-local-exact-report.json", + "sha256": "ad88b3a8b18007bf61d4351185ee2cab8c09e9e3a74958d521f94ff1a221795c", + "bytes": 867 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00264/task-context.json", + "sha256": "d22c02c55e889b252ab0e11580693c6fc44225d4d650591942bee294557f4134", + "bytes": 5348 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00265/assets-download-desktop-report.json", + "sha256": "1ce5009ec4582730437cbefbb5722699bc6d2fe0824eede52bf8de98b85ccb24", + "bytes": 836 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00265/assets-download-local-exact-report.json", + "sha256": "35d1005b88bb477b0bc686297d4e178fbdf1c3feeb7fb29bb443a019d7a34b4d", + "bytes": 873 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00265/task-context.json", + "sha256": "d9b040e30c2443cfb11dc196dbb042b1aa6a72a3a27b599ccdc591a98e340395", + "bytes": 5354 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00266/assign-action-desktop-report.json", + "sha256": "aacd8ad7641a390a2f2b4990d4b324bb9478ee0a45a42c9bf4e52720038dfab4", + "bytes": 846 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00266/assign-action-local-exact-report.json", + "sha256": "e2376fd259124a1d90db2ded522f1231df3d12d0f5eb3d82c229e95fc680f1dc", + "bytes": 887 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00266/task-context.json", + "sha256": "167bfdff69ccc7568d7c20d4c61be173604255e1a9cd698e55df690444763dfb", + "bytes": 5350 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00267/browse-containing-desktop-report.json", + "sha256": "cad41d8dfb33770fdbd87f44d2eb04b070cdb120665a188a379c0436fc25f324", + "bytes": 742 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00267/browse-containing-local-exact-report.json", + "sha256": "2c522d5b6c545f7bf8d7238d881a94c2d6463abcb41bf24989b3218962a51ac1", + "bytes": 876 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00267/task-context.json", + "sha256": "47039236bfbb8d1e2d130708d25ead95b54027b1b061d91ae73f686ed75660b0", + "bytes": 5405 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00268/bundle-install-desktop-report.json", + "sha256": "088fbc1390ae171dc219c201f09519f8c0fc460bc61138d13d189e3e6ec6d1c0", + "bytes": 702 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00268/bundle-install-local-exact-report.json", + "sha256": "be82a7849a167cebed509f7ac451f3c1c1756757afe34e940453df686b507d97", + "bytes": 839 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00268/task-context.json", + "sha256": "e44a443c29beab5923dbbab2a7e8e8e830654873f8d093345b24c3cd758620ad", + "bytes": 5377 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00269/catalog-delete-desktop-report.json", + "sha256": "68070e257397148441c11e1ecfc9a2202f9955cee17a3f8ee878d4e0f1310790", + "bytes": 702 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00269/catalog-delete-local-exact-report.json", + "sha256": "1cd38bfab4ba20d3238bbb11fc9838b5479f96c345c6f98e479eea25fe229bd1", + "bytes": 839 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00269/task-context.json", + "sha256": "e1bb2480ec7894a2ce1b8c5ae2b221f6e55cf19c7c4e72aef04d89d5da147878", + "bytes": 5355 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00270/catalog-new-desktop-report.json", + "sha256": "a8037c3b339c215db7bc4143ce0999074a366019a8868516baec00086378e2d9", + "bytes": 684 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00270/catalog-new-local-exact-report.json", + "sha256": "99f10be076dd573ee658256e2b2e08c40af1997b344268a84cdc0fa8fe939e81", + "bytes": 824 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00270/task-context.json", + "sha256": "ee463f5baf378f77c68c9f30d5f21caebcd027138222b5bf4007a5e14696ff56", + "bytes": 5345 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00271/catalog-redo-desktop-report.json", + "sha256": "31dedccda115a8219307ad7f677602fc907e6e012297b4e6a6a68f19fb1415d5", + "bytes": 690 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00271/catalog-redo-local-exact-report.json", + "sha256": "25e5b338ad95d2e09e0cc651fd14f5c66a21be78f3d0d0039f8b161386e2fdb9", + "bytes": 829 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00271/task-context.json", + "sha256": "1ef1edcfb45f3ce201efec1aa2efb39f95aeaec909eccb02e13cc7f98335a11b", + "bytes": 5340 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00272/catalog-undo-desktop-report.json", + "sha256": "21d131f2b2c5ffe8772bcb4606dbf16388467572cd0542c6dd16c66e1730b712", + "bytes": 690 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00272/catalog-undo-local-exact-report.json", + "sha256": "4cb20b624a5f96d417c33d928b760befaacb8c59610f197ff1a666d1fc78a5f0", + "bytes": 829 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00272/task-context.json", + "sha256": "ce9557e77c46435c6153a6173fb59b5d50686d8738bbab96490d631965219867", + "bytes": 5340 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00273/catalog-undo-push-desktop-report.json", + "sha256": "03421f7e7ffe6eb3f0ec93c6f09cd505f806e228145cf4ce6d55e3b841b8b34b", + "bytes": 716 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00273/catalog-undo-push-local-exact-report.json", + "sha256": "86e5cabacde4ee419d71011b902e0fc561e7da94028879bca4ca0315ad1d4f72", + "bytes": 852 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00273/task-context.json", + "sha256": "8679b3271d07fe1d4eaf2c6dcc6ef833d9c2853dda4643339071c60dc8bfe2f7", + "bytes": 5363 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00274/catalogs-save-desktop-report.json", + "sha256": "4030bf70be443ef6dd4704ec43f93c596414b3657bb1dec3402f844173c1103d", + "bytes": 696 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00274/catalogs-save-local-exact-report.json", + "sha256": "459c689249e40c69a61202980a100325a6f106606b559eca653ec4e9bb91927e", + "bytes": 834 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00274/task-context.json", + "sha256": "a539fbe4a83846344834b96a7f62320fc6a858aae1146629988b14b883d87020", + "bytes": 5361 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-align-desktop.py", + "sha256": "a406c012536580f3dfc6b5851015bb65ccf578acce6e606c0994e4428de83738", + "bytes": 5514 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-assign-to-collection-desktop.py", + "sha256": "0a2aa43cfb3d08fc2904b9b36dd6fca160309f936bd5006038a56cf355990718", + "bytes": 4705 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-autoside-names-desktop.py", + "sha256": "1d8983980d621a559bef9b0bd14eecc1dbf95b43fee2eecaecf970f7052b1e1d", + "bytes": 4353 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-bone-primitive-add-desktop.py", + "sha256": "fa0d91a10c5d2dc9cae127c02927fc98be37110f25e3ab3570cd7cf733ce329e", + "bytes": 4827 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-calculate-roll-desktop.py", + "sha256": "570471197617ea452db37d8d972f372db07de15c3f78fd934905ecdbfe3e3a7f", + "bytes": 5202 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-click-extrude-desktop.py", + "sha256": "2fc6347da08d334e4b28a5316d1db45d189021ee38f4e5f8574e3a66cc177d51", + "bytes": 5457 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-add-desktop.py", + "sha256": "8acf8ab1c9b9e27bc83fe568edd0d418b6c824c72b539126561955f05e5ba9f8", + "bytes": 4877 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-assign-desktop.py", + "sha256": "92c6b8d031631ace79523ef4200508621aa8bd0b9ae2d5a8cd84a9cdbd91a559", + "bytes": 5346 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-create-assign-desktop.py", + "sha256": "4e6ee367c86279625bed4475f05abd3596329c2bd1c54c295f96118d5156cec1", + "bytes": 5525 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-deselect-desktop.py", + "sha256": "302d827119a02a62770a172cf3624c84b9c83463b0ef10d35c1854a5e767ffb3", + "bytes": 5777 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-move-desktop.py", + "sha256": "6babe7d65549e4b06f4a9790af3ce6dabdf3131831f5d26442d6c1c6d0099f90", + "bytes": 5243 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-remove-desktop.py", + "sha256": "071d8360f7aff11fa3466e96133c9401525a5f31a4beec6c5fde46b43329dbc8", + "bytes": 5314 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-remove-unused-desktop.py", + "sha256": "8bd8c0dfd8170779c3e834a8b3ad8c90e5a646263108b818c19e34be21353bc6", + "bytes": 5681 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-select-desktop.py", + "sha256": "cb1db0e83e3ac1dab0db182b786cee39651c90e32817793f262b53a1b8caec89", + "bytes": 6034 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-show-all-desktop.py", + "sha256": "3f81be36e3957ffa1de5581b4f2843c0b03e519ec153249c5fbb3b4cd53205b3", + "bytes": 5422 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-unassign-desktop.py", + "sha256": "addb723b6f5e003a726885241aba042138d5593adc7ba446228b8a41d5b51c0d", + "bytes": 5985 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-unassign-named-desktop.py", + "sha256": "ef3b5f6cadbceca45a32161b9f8ca213215962d2cb213dbd80e76002725fd16e", + "bytes": 6211 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-unsolo-all-desktop.py", + "sha256": "a4df03942060ccfe0eb19be415bade14f4f7c4a5649a5c3cfbbdd66b1104e98d", + "bytes": 5885 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-copy-bone-color-desktop.py", + "sha256": "4e28192646754a1e0c253f40e15fea28b43bcd60305fbd40273caad1908f34c1", + "bytes": 6185 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-delete-desktop.py", + "sha256": "2b0358f9e0a96da53f8c7f889ae18068aac2653d4aa6e804a0471a92e66ddd6b", + "bytes": 5176 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-dissolve-desktop.py", + "sha256": "27a1aa29a7fe9ef6ad5b13b17ee0e30cf7c943df5d0ce3be97e44513cec33d01", + "bytes": 6275 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-duplicate-desktop.py", + "sha256": "47c4546402e3e8692583e3d3075a1351092cd61fce09f5d96d13dc06bf2ce1d2", + "bytes": 6577 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-duplicate-move-desktop.py", + "sha256": "32d82956a3c5fba3cb844ce37a3eb174124a1b25fd7c958578c9a97a5138e1a6", + "bytes": 7002 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-duplicate-rename-desktop.py", + "sha256": "1eadb6c273b4bc77f6c3df9f0060a361c6da2e95b84341ac2173a749f4b72d07", + "bytes": 6754 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-extrude-desktop.py", + "sha256": "066e1851024ebedcec78e4e3962516ce8c43ae87ef87522d7acc8b6ca1f49a4d", + "bytes": 7640 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-extrude-forked-desktop.py", + "sha256": "cd13871abd4e28e9230388693209bbeb7d3b8f1e9daf99d3df09c9071bc9930a", + "bytes": 7928 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-extrude-move-desktop.py", + "sha256": "9e1496c7022f9e70ade8cb937a815a7a0f0d3db9679d39b4b14b3e9cfae4bf85", + "bytes": 7813 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-fill-desktop.py", + "sha256": "fa8f3e577dd5b3924f8266509346f1c459a45bc62ac597926b412a962c4a9017", + "bytes": 8328 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-flip-names-desktop.py", + "sha256": "5b3bc16b1fdfed70b6be9ca37ee1c949ce02129f4d396216f70edc022ba1082a", + "bytes": 6407 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-hide-desktop.py", + "sha256": "455d76e6dbd6100f9a33a517a31232605f3d878d165e5938a6aae50682d1fc9c", + "bytes": 5938 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-move-to-collection-desktop.py", + "sha256": "d70bbd2d42be0c4f95dc2fcc683daaad5d1eb2e71240dc8025dec2133f2d42dc", + "bytes": 7040 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-parent-clear-desktop.py", + "sha256": "14c76e67447509588d74055eb26dd12401b3608fac335bf732a09980a2d6c443", + "bytes": 6664 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-parent-set-desktop.py", + "sha256": "ced6127b73540a64f95327103cea846d95b3da829a41b64e66de6e160ff2d7cb", + "bytes": 6741 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-reveal-desktop.py", + "sha256": "06564434a76ea6670110e916f73efdec46238cc1b2c8e1aa3d1c893b8089331d", + "bytes": 6095 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-roll-clear-desktop.py", + "sha256": "c5f507c1601fd4fe026f37b4c720a684881a01272eb92fd663dfb2ec2d43057b", + "bytes": 5966 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-all-desktop.py", + "sha256": "3dff6a053b4a497ed19b67b6e0d38958abd6f34c603b994a8eb59323f4ab95e5", + "bytes": 6371 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-hierarchy-desktop.py", + "sha256": "f6d261b067815d740a7e39aa8c8a8ae6d605b675c6ba2a144eaab65d104840ae", + "bytes": 7243 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-less-desktop.py", + "sha256": "ebe6ff995d37310dd1f726246e0c3627960b75c6b506b181286742829ec4423b", + "bytes": 7411 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-linked-desktop.py", + "sha256": "99901e2c2a744563c9fff9105244cd07368b6ed0cc52c6c1c94eb65c3e964ac5", + "bytes": 7002 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-linked-pick-desktop.py", + "sha256": "8909666d24df353cf64f225b857a1ccc48c460320df52e385f69c8e13200d686", + "bytes": 5474 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-mirror-desktop.py", + "sha256": "21a152a785b6bdb794c6488685cdebf3ce27c3573b3f46e38002c8be0bd0fc43", + "bytes": 5044 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-more-desktop.py", + "sha256": "dfd686370601ddd0d43ba0434e7d9fde5ff80d12170f423d571f5344f281fc56", + "bytes": 4750 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-similar-desktop.py", + "sha256": "62d26209267be4d01cb079f467b4027623cea284b894787029199188e486e25a", + "bytes": 5959 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-separate-desktop.py", + "sha256": "586bcf4a9b34e7e1ed87e78af45011b0c004aa9dcea063d03c6fafe968f8e689", + "bytes": 5800 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-shortest-path-pick-desktop.py", + "sha256": "7ddd284bae79567206ca1fafe1f9ee0cd0d13ea2719af08a2bc27f0b848e8390", + "bytes": 3737 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-split-desktop.py", + "sha256": "e1044a0a74a25f1e71b7d1fd9e027d9e4f92dee9876a72828bdb3954a2b05d43", + "bytes": 3187 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-subdivide-desktop.py", + "sha256": "80ae7b6ada923052ee31deca4da972311a1b22e528e6149467e07f61d7472846", + "bytes": 4037 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-switch-direction-desktop.py", + "sha256": "ee29b85c9ff1f49ad3bd731f0996ba351a82a087b636899c1ef00d6db175b87e", + "bytes": 3372 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-symmetrize-desktop.py", + "sha256": "1b84a01bdacb1b66952822b609144acaa3638aee86b4f6999df37575478a148b", + "bytes": 5732 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-asset-download-desktop.py", + "sha256": "c8af3ac7b0fd53e955a9c5d925e0ea004f219ef9c5b6629fdb57e6fecdba55a6", + "bytes": 2922 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-assets-download-desktop.py", + "sha256": "512737cde0efa6cc6a669939c243e7b609cc7c37fc223c4923cc6a9adc035318", + "bytes": 3014 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-assign-action-desktop.py", + "sha256": "b4ffdc3bd9120c2823fdcf29278695e49c21b3ee07345daa15712ef6d57ca6ec", + "bytes": 3580 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-bake-keys-desktop.py", + "sha256": "a03213895003f141054a80fd7ddf8060b59ded44994eefc8f3e4699313923fb6", + "bytes": 2650 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-browse-containing-blend-file-desktop.py", + "sha256": "05b68021e96e9b480298ddb2bd5c814ecf919a622d57ceabac7534eec31aad90", + "bytes": 3085 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-bundle-install-desktop.py", + "sha256": "a34f4c2095c0ea2d47837f5d631d8dea6a19a70a620982333ddc9abd0a227099", + "bytes": 3033 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-catalog-delete-desktop.py", + "sha256": "d0347a61c6a0388062e0f9cdaa6c9a25fc3662c667b6641705543ac816e0a355", + "bytes": 2929 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-catalog-new-desktop.py", + "sha256": "1a5331f11bf741efb897f4c719ea4ff2457e15823c10ca805085d63e059984c1", + "bytes": 2893 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-catalog-redo-desktop.py", + "sha256": "89ff11f1ec2f76c1d34c49549e2499db2df084fff63fcfb156d65e3c1f46d8f1", + "bytes": 2237 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-catalog-undo-desktop.py", + "sha256": "4a4866dc48a2fc8318549ef5a143697b2ba51643b8be3865975596882569c773", + "bytes": 2170 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-catalog-undo-push-desktop.py", + "sha256": "7e218eff97f8d4a2bd475d9957a94a784f4a76da3b35938389eb59eae7592795", + "bytes": 2225 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-catalogs-save-desktop.py", + "sha256": "ffa7e28e8bfb2669ff2e05a10edc7794eb43c31c0d4abaa3841b1887424bea92", + "bytes": 3038 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-change-frame-desktop.py", + "sha256": "18fcc3ea0f0cf7a503651791d283852b4ae0b219339258880351837a59726327", + "bytes": 3017 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channel-select-keys-desktop.py", + "sha256": "5d09b95946aa6f7a754cfcd60259e14d388ecc98f4aca0fcb651bc99fabf292f", + "bytes": 2977 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channel-view-pick-desktop.py", + "sha256": "2b2c904295211cdcf7689cdda060eed9856338c4295a84e0d74da862bee719a9", + "bytes": 3889 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-bake-desktop.py", + "sha256": "87eccc9a6dd652d94cbe49e771937c39d223765ca7658e239e99017356613a2c", + "bytes": 2791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-clean-empty-desktop.py", + "sha256": "f6a8ef3666d4672e53d9678c3d9f0dd0f9ee92f9d05e4078f81555a9ea047d20", + "bytes": 3108 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-click-desktop.py", + "sha256": "3984998cbb1a42541f447b317777ed96183147fbb470d2842bdf1d7bfc8aa600", + "bytes": 2934 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-collapse-desktop.py", + "sha256": "e899e95b4bda42f69040d24396d007eae2f35acd1c44594cecf4c25a4d0e1e6c", + "bytes": 2797 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-delete-desktop.py", + "sha256": "b340793fe720b0bd60ca3d81a19c4a9bfba2c679b91bd2d6cbe371fe2e4ef657", + "bytes": 2731 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-editable-toggle-desktop.py", + "sha256": "9d16d09a1f009d160731523de610360a0bc9dd730648b1f9251ef9a8c6e61428", + "bytes": 3013 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-expand-desktop.py", + "sha256": "b8cc37161161746bbf2cce1da08b0658fa5e911507b6049d5f05b1cc0abb7148", + "bytes": 3247 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-fcurves-enable-desktop.py", + "sha256": "0124b78950409836682c690f2158c76d8eba8fc2ab5c35b11aacb73dbc2ad5a9", + "bytes": 2978 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-group-desktop.py", + "sha256": "0cf05f15c8441bdae97c96a44687b30527149165c16f1f31df10ff29e6fecb85", + "bytes": 3122 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-move-desktop.py", + "sha256": "0410afc446a73d3083d96fde83b36b3c1754e133b95af2554de064ab928ded5f", + "bytes": 2808 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-rename-desktop.py", + "sha256": "16c276e94e9020e685d52d527cde9dc68f3fea64fdac61ce9cf99f74643d594e", + "bytes": 3473 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-select-all-desktop.py", + "sha256": "3f89d79ab79fc4a6e82c624c4703a71d6448d38a62c9f5237959a8215c96cc4e", + "bytes": 3626 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-select-box-desktop.py", + "sha256": "07de6dfe6d70e4f208e60a4b6f18c8322044f9d0a4b34812a63f36eec6e804b1", + "bytes": 3761 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-select-filter-desktop.py", + "sha256": "f1893daef821328506372894e8b052d3d7d8e2632a90332bdd7e49725d3a3dd1", + "bytes": 3572 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-setting-disable-desktop.py", + "sha256": "cd697b916faa275dd6e44698a7c2945b9c070125d0132ce92f28855c447fcc0d", + "bytes": 3066 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-setting-enable-desktop.py", + "sha256": "936f925cf68eb27eeb911a5fc8179248201f7fa1fd672053a2fff0745c455e8a", + "bytes": 3054 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-setting-toggle-desktop.py", + "sha256": "1282a6f5e4743fc78f74cb8e76025f5cbc0e5adbbb9e2335c617e8b29f35fdbd", + "bytes": 3057 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-ungroup-desktop.py", + "sha256": "169f95d2dd14592f554642bfd62f299568a08efbc8542a994fe433ff059e0675", + "bytes": 3154 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-view-selected-desktop.py", + "sha256": "c7cafb9739ec0838ef9a838810066faf1884bb4927364e01c99c271e4da28630", + "bytes": 4538 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-clean-desktop.py", + "sha256": "4ab652e99fa8fa98cdec6832157f3bbb2e1ac7e5779f01ddd974f192945ea58e", + "bytes": 2588 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-clear-useless-actions-desktop.py", + "sha256": "942289d85bf2a716e5c7283471141b479fc68d086e5835cd08e65411ca76a7e5", + "bytes": 3452 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-clickselect-desktop.py", + "sha256": "29f5ab8b8489b38ec874b8bf1d779b45e19934862bec3b730b0f3aee08700f74", + "bytes": 2887 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-copy-desktop.py", + "sha256": "d5db0d6d0962ec780faa5a2c6fc1960a7e7d7babfced9d362ca05e46e0889c7c", + "bytes": 3452 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-copy-driver-button-desktop.py", + "sha256": "12c6c2af98710a4989241e33383876b381c697320125d23508d87e2a78eacead", + "bytes": 3824 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-delete-desktop.py", + "sha256": "3655cc712601ed60095f850b4a419499007e13a7cceeebcd6c38bf42f7a1a6c0", + "bytes": 2791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-desktop.py", + "sha256": "7c32d786a8daedcf5e995d0ff29b6034e7c4f4c25c309ccd0542adecc19319f2", + "bytes": 2321 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-driver-button-add-desktop.py", + "sha256": "154a9e8eb687299b1279c6c8c6d30a6658650bf224a22312efba65f782ffcd7c", + "bytes": 10530 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-driver-button-edit-desktop.py", + "sha256": "864c46ed3df66b0341660e715c6609d845851dc71afa7bd96348e19bce0db530", + "bytes": 3956 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-driver-button-remove-desktop.py", + "sha256": "34db1bdf7b6086dca2447c00726703642da7ce58b572ded0ae57595e4ba5a359", + "bytes": 8520 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-duplicate-desktop.py", + "sha256": "281551ded3cdad0c4abc4e9b937b99e37ee51ecdfdb923137afc3ce7b0c5b29f", + "bytes": 2963 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-duplicate-move-desktop.py", + "sha256": "7738a3a07f4971ed3f564d3cd6d09243853a602ac1253056ac5bdaa9522c91a5", + "bytes": 2940 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-easing-type-desktop.py", + "sha256": "37233be661cbcf08ece72e5293de7016c4408d3708256902380ba608c7985abf", + "bytes": 2887 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-end-frame-set-desktop.py", + "sha256": "7ea71a9a4e48775fde115223a115f9f31df016ce57e4a13af60b89d5bc7d836a", + "bytes": 4846 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-extrapolation-type-desktop.py", + "sha256": "8abb11eb1c484b008cc6157d0a5d9c786ebad25b196d117ea5fb015770f70abc", + "bytes": 2645 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-frame-jump-desktop.py", + "sha256": "169ea06f3ed471014162d67bcb8b79945e85b7f91d1291f15b62ccecaf3a8126", + "bytes": 2707 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-handle-type-desktop.py", + "sha256": "81711dabd6dd4cf0a40b79f3d54a4243de6bd362f0295702c2d9f5d0336b35c2", + "bytes": 2580 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-interpolation-type-desktop.py", + "sha256": "5d61995b4ef75f1e47e277df59d5327609be283fc744014791857ef61f9b0ce5", + "bytes": 2974 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-clear-button-desktop.py", + "sha256": "53c60181c3ca7da0eb16446a8eacf499963aa8e8a6e328b09a21a3301744c0b7", + "bytes": 9311 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-clear-v3d-desktop.py", + "sha256": "1d2a7e2bf29a8bc62b6e4e3ebdc9489160f9494d9b7284f7159cc536f2bca1c0", + "bytes": 7757 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-clear-vse-desktop.py", + "sha256": "09aeec25d69a57b657bd690998058a23980b6a4b9425fd63dbb26f14f4edee8f", + "bytes": 8143 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-delete-button-desktop.py", + "sha256": "fdb36e2d97ed687a20682a769f107f10801ab8845ad5e1061565893bad2cebd9", + "bytes": 9793 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-delete-by-name-desktop.py", + "sha256": "b3c5726677eb6881950a96a13b5221eb74d5b4e13be118ad7f20679c842a64ea", + "bytes": 8308 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-delete-desktop.py", + "sha256": "697bd750b9b3971fa108981e6b8f14f372705eeb39a7e20b33dffa9c1fa55c4c", + "bytes": 8114 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-delete-v3d-desktop.py", + "sha256": "a761edaab49b1a81a7374a465b64b67836ebe06fba9626ba3d5233f91072d541", + "bytes": 7884 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-delete-vse-desktop.py", + "sha256": "67f18d3fc73b9e16cdccc572f551eb2f0f16d496db952889678189eb8fa9253d", + "bytes": 8385 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-insert-button-desktop.py", + "sha256": "0fa0478deb1eb742105b5902070e5764113378ed1c7d390155cd2be61e991b08", + "bytes": 9955 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-insert-by-name-desktop.py", + "sha256": "754eaa916735252fd9a462629da646890fbb9285c201d569e36314ca1b1d8bb2", + "bytes": 7760 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-insert-desktop.py", + "sha256": "4c09e55f4f9935b4b4be4c7212451a5c1b01a569aa446c94fe80cdbaff5acda9", + "bytes": 8230 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-insert-menu-desktop.py", + "sha256": "a8a378ecd1242852dac76e83d5a19412aa6caf70a85f23364f17d48c806bb921", + "bytes": 7461 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-type-desktop.py", + "sha256": "32b826a427ee36e8a34f45280ff107118295fffb184cbdf4fbedc3b229a36a51", + "bytes": 2917 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keying-set-active-set-desktop.py", + "sha256": "c0aaab7f5aae2982303ca0ab4cb05186d3d67ba21728bb49a2f8615a300d05f5", + "bytes": 7065 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keying-set-add-desktop.py", + "sha256": "70f33c905c82b3668c51e0f0c177dc4676417f8a6d9f2c1e0c87d6b9f433a958", + "bytes": 6792 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keying-set-export-desktop.py", + "sha256": "e75538f411751b309e6eb2d4376839b0e1e70784414463356ab36ae39a7ad799", + "bytes": 4427 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keying-set-path-add-desktop.py", + "sha256": "62a65a5b58bdf9d883691d47c13ece9759f763acf58ab46660a6fc93f486e04d", + "bytes": 7673 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keying-set-path-remove-desktop.py", + "sha256": "91e9ae1891106babe828ead19c2f07fd955c06883fa4b03f1b4f12fb8a41824e", + "bytes": 6759 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keying-set-remove-desktop.py", + "sha256": "34a45f49def53589fb7e5b3bcfaaaf500af5e5dba069a8175eff1dd19ba354cc", + "bytes": 6327 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyingset-button-add-desktop.py", + "sha256": "15b1b30ea2793313f52c914021d148c50cd02ba5bcb8d983c37755f811bcd16f", + "bytes": 8938 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyingset-button-remove-desktop.py", + "sha256": "0a6c7361b44ef548f4d9bb7ef756e35bd9c09e82ec46edc60626a6918afc57b6", + "bytes": 9145 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-markers-make-local-desktop.py", + "sha256": "959fc711e2eb5c35d2635a65fd6119ec1aad4c44573b1bf0b65ecb3b05945902", + "bytes": 2283 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-merge-animation-desktop.py", + "sha256": "0f7aabaad764f96992e4a1cbe56a586ce0c03e67b0cdc642073a5222cf5b5fcb", + "bytes": 5943 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-mirror-desktop.py", + "sha256": "88f211cd8726e7214a68c90a2b0ccbbe0bdcfb237a7d1e2fb210a9b7bac8cf3f", + "bytes": 2895 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-new-desktop.py", + "sha256": "e0c6c14b6a8bc95ab86d49df53aae91b05f611572c2f3394f89f3495f477f77f", + "bytes": 2123 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-paste-desktop.py", + "sha256": "a687641f71ad1b2db47da6717a7341a14e3b3d4cb45cc3a94f447684073201d2", + "bytes": 2517 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-paste-driver-button-desktop.py", + "sha256": "2c167b38e9688880b499abe97babd2f51134b2b83efd5bb34140bb0b81079375", + "bytes": 10641 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-previewrange-clear-desktop.py", + "sha256": "02b2704fd6edae72cb31d603c6a1ddf4a3054370627044ba4c1f66e30c488e3e", + "bytes": 3887 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-previewrange-set-desktop.py", + "sha256": "0c667ab6e9ca9e866234fa9e190dc30587b59ffeba5616b4b37853569e6d24a9", + "bytes": 3493 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-push-down-desktop.py", + "sha256": "1bb759da4d9776f84bb5be2d615b7bd5edb6a4fafd9141fcb8e769c8076410e8", + "bytes": 2328 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-replace-action-desktop.py", + "sha256": "9415485899bb577d178c2345240dccf42ef90f1146a9c7be7064ddfeef9df0b1", + "bytes": 5232 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-replace-action-new-desktop.py", + "sha256": "9920d9911715035ed99a9615df37e8cfdb70c3aa9b96f12fd5296c52047b0c64", + "bytes": 5353 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-scene-range-frame-desktop.py", + "sha256": "054bbc89615177ecd199f28b55910e6aadbe1b87d04056679810c549ffdd8c08", + "bytes": 3993 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-all-desktop.py", + "sha256": "fe285ee6be545e1cbb9982563d35b98bee213d86a74dceefc274979ed887c73b", + "bytes": 2570 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-box-desktop.py", + "sha256": "5a37f76f9da69f172fba64ed83424ea7bec521f498f556c3b0142fc2d284f0e3", + "bytes": 2572 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-by-type-desktop.py", + "sha256": "1ed90bea542349826d6297378fd27e55c8b8370d6bc7dcf5251ac8b112887a30", + "bytes": 2670 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-circle-desktop.py", + "sha256": "3e5abe08be97e7db93a0229b63eeef48b6577a9d10be49339d36c0974126be70", + "bytes": 2563 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-column-desktop.py", + "sha256": "7e4c5fcef9b85239b3f561db2736eaa80de819d042b8caa3eaaf7fb3230cc189", + "bytes": 2854 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-lasso-desktop.py", + "sha256": "e730e9ae9740fb7a97113edb9af6c7f862128bf79509865727c432a275c3504a", + "bytes": 2557 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-leftright-desktop.py", + "sha256": "bf20b5d05883481b1b455d0eaab9951f9c4abc73406f3a499f1a03c49b044832", + "bytes": 2923 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-less-desktop.py", + "sha256": "52a4f3d5f5232f5843612286b35db8fb19050b8610c573a1bdcbbdae627d261f", + "bytes": 2836 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-linked-desktop.py", + "sha256": "4a1baae0c4add326934d50647d014248b43acf8e7ad90360921e1a487c25b150", + "bytes": 2985 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-more-desktop.py", + "sha256": "7bfff8a2113d7933e76c0339232810c8cd43d1a633eee7832acb4c4069790f5b", + "bytes": 2995 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-separate-slots-desktop.py", + "sha256": "4f1ea94c58a36b764cff6c40380794b927cd67212421aa36db8062b3817748a5", + "bytes": 4534 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-slot-channels-move-desktop.py", + "sha256": "8625500da296a6eee287dbafb242da7178e9f101d171f8cc62ecf8baffe2b0d3", + "bytes": 4855 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-slot-new-for-id-desktop.py", + "sha256": "76c3ed3a2046d4c5befa9f761ba020bf37859f5758a11f874e688d91bbcbc7e3", + "bytes": 5523 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-slot-unassign-from-constraint-desktop.py", + "sha256": "89120dd2da7f4c7f24fb12af02ce94d5929002e0d87cad765c8828999c74afdb", + "bytes": 5238 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-slot-unassign-from-id-desktop.py", + "sha256": "3166defd69de7fb19a52c7b9646df52da9efb330c27037e77c4d34f92c6b43f5", + "bytes": 5752 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-slot-unassign-from-nla-strip-desktop.py", + "sha256": "dadd0204062fb1bb54de6b2cf998e4313ed7dee32b201467ef3327200ba04685", + "bytes": 5497 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-snap-desktop.py", + "sha256": "01064fe4acd586e99986372a8b39a72340d1a961506c7c189b074ce7928cd568", + "bytes": 2959 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-start-frame-set-desktop.py", + "sha256": "a4957a066065a6e4ae474e1fb700fd97179dbc12472fb2ff19f7d5048bbcd3d9", + "bytes": 4784 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-stash-and-create-desktop.py", + "sha256": "5bb7d73a5be061df3d95ce46357a5b0f48e863be217a4677f25f33d31d960cd5", + "bytes": 2374 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-stash-desktop.py", + "sha256": "dca0ae7cc8914f9598a0638ff19d0c8a490efd794b9a6fde331d8e45306c97df", + "bytes": 2526 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-unlink-desktop.py", + "sha256": "e0f244be5712faa8caaa094efdfefc69c5ffaa9cb4e7e1185414f3da35e239ae", + "bytes": 3055 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-update-animated-transform-constraints-desktop.py", + "sha256": "3417ba9f8ef8d086457623fe2b69be2de5d3983a4a7b3be57450b7083889ba5f", + "bytes": 5385 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-version-bone-hide-property-desktop.py", + "sha256": "6b03a7faf073e652eb260a01068dd7d167e6ff88e46f75dfa9e1445edda1ab29", + "bytes": 5896 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-view-all-desktop.py", + "sha256": "67a1a212702db13b924daa567cabad7c117ea9627d43b07a7bd70243379b76eb", + "bytes": 2982 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-view-curve-in-graph-editor-desktop.py", + "sha256": "38e8a54df8725315b0c60bec955c77a3e2a1022d01898377f097268165be81cf", + "bytes": 8200 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-view-frame-desktop.py", + "sha256": "11a2b6c2d6d1bb5670a161a0db02a7f0b65392cc820d263bd21df15196d9a4cd", + "bytes": 3236 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-view-selected-desktop.py", + "sha256": "fa74311b3ca77b04212ed894c0511fcab7489cff781fc934177ce4e40a139647", + "bytes": 4456 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-armature-desktop.py", + "sha256": "5a03e4c6d195219b6fe567973565b0d29f8957716d03c419b04d2003ed67429e", + "bytes": 1872 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-armature-modifier-desktop.py", + "sha256": "3cb59a6bd15b97a5fb33fc5643bd58fe3155264a2598e1cdae17aa72626e146f", + "bytes": 3207 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-array-modifier-desktop.py", + "sha256": "82d5e59a60324101b1c97a277ab07afa2e1c52c55d1914fee27076d1c1619489", + "bytes": 2719 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-bevel-modifier-desktop.py", + "sha256": "abf8dd2a65c48883c8e8ad7c022d06629206f2e55a63184a8e26abc44e678279", + "bytes": 2626 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-boolean-modifier-desktop.py", + "sha256": "b84d0c7d6cc1554d59de2a11ce4140d504816fe140e74faf892a5495e8c3905f", + "bytes": 2684 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-brush-desktop.py", + "sha256": "515b1eab3b6e2dc0a4e9a65d20764816916228f41082739c98efd6cc882926bf", + "bytes": 1788 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-build-modifier-desktop.py", + "sha256": "18bbc10043f8a8820370fb4ea6c5a411398e4622c7956fea20add56f1f8d1087", + "bytes": 2561 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-camera-desktop.py", + "sha256": "27831385e1ed7e464c6b627bcbcb81af01ad2afa7ec66f28d2256641005802b4", + "bytes": 1787 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-cast-modifier-desktop.py", + "sha256": "c8a28c4f06077a9649b150cde2537055f64c0b27163b820148ba81e36b49c251", + "bytes": 2259 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-cloth-modifier-desktop.py", + "sha256": "308e449c9d896a870f33c8eb15fb6604a4fe7a22f646d754d356d5bc55fd94dc", + "bytes": 2062 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-collection-desktop.py", + "sha256": "fca7970f55b654527226b1b39a88934db35da787772c69ba65075f11e2664f26", + "bytes": 1662 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-collision-modifier-desktop.py", + "sha256": "21d816a1c929b96c873d15a719ee79187ba7201d79740a2ba9ccf81e4e566a32", + "bytes": 1846 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-curve-desktop.py", + "sha256": "e66ba2ae04f6de97e9643e581fa4426650ce4ddcfea0ffc8b3bf9fb14fdd26ee", + "bytes": 1933 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-curves-desktop.py", + "sha256": "3a8372a8ba072df2f5a3a1b3cccef44d219dde2193b551110017436cbd38e85c", + "bytes": 1813 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-freestyle-desktop.py", + "sha256": "7621b52c88adbae0bb611b2fd6ea2ccf1a0666341c36d4d03eda8f4c565efdc8", + "bytes": 2001 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c", + "bytes": 824532 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19", + "bytes": 5653 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-grease-pencil-desktop.py", + "sha256": "4d99d5e81fcdc8289e462279f2da278e2aea573f4d947fa5e71e959b506d1ee1", + "bytes": 1809 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-lattice-desktop.py", + "sha256": "56f48405407b4baba4ee9a13038fddc951c6fe607a3d64d6894a00e61d30be9b", + "bytes": 2588 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-library-desktop.py", + "sha256": "34eda5a724ca7eab9fcb2e4f39cec46125e363f548fc77beb3f09133151fdeb4", + "bytes": 2065 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-light-desktop.py", + "sha256": "90025507cc88c1c2be028e52a0b6e0b80561915bf109f38c64b95191c716505c", + "bytes": 2794 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-material-desktop.py", + "sha256": "42a870bb79eceb8e1789686db689842dfe390d58db2744fded8dd571fe9cd8f5", + "bytes": 3376 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-mesh-desktop.py", + "sha256": "8fe5859138f84079ddb43030fc8d22b596044b08d4f863da5dd25acaeedafdd5", + "bytes": 2616 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-metaball-desktop.py", + "sha256": "77a03db581b17eda4219b42ffbf18e5d1809dfb3bf45f3ac0c0051f27934dc0c", + "bytes": 2179 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-nodetree-desktop.py", + "sha256": "e0fa9c2dbe5f9877c00c33d83e5aa2407606a003163be086a082e631da3cd9a5", + "bytes": 2224 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-object-desktop.py", + "sha256": "3cb263b0bd2606cdce38bd433f90d50e738e93bf482c9fd16217306efb1521c0", + "bytes": 2054 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-particle-settings-desktop.py", + "sha256": "d49ba0b987adf412c1692819b041a35905330f2fa633464c9425932450419afa", + "bytes": 2667 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-pointcloud-desktop.py", + "sha256": "7223e0684f4bb8559228ffdd118b69dfd31c42959643ed17b885f13bb57eb400", + "bytes": 2324 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-scene-desktop.py", + "sha256": "ada4022a310510ffe37ccd7ef31a6bab8b37dfbd7a0b914f40fe379ba13db083", + "bytes": 2225 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-screen-desktop.py", + "sha256": "16ba526404558472d2dacc48e6f51440031556483dfeab9b52a43f69a3d5644e", + "bytes": 1927 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-sound-desktop.py", + "sha256": "aeeebdac9d14740843cc703150143087b7985138372ac1278fd3894e850c1ab7", + "bytes": 2058 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-speaker-desktop.py", + "sha256": "4f2b6e3359aeba90754ade475f1683acccc8d2f44a75552c3b04f79a0ddf13d5", + "bytes": 2365 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-text-desktop.py", + "sha256": "9ff73dbca7389f05aaf4834c4fb5a734a5c2cb2ef5e1a65962edbc0662ce0557", + "bytes": 2149 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-texture-desktop.py", + "sha256": "a91f9f69d389df79d7292e75ad64bd7a65a19bab063bac2ba311342b7d4fbb03", + "bytes": 2202 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-volume-desktop.py", + "sha256": "fd5b2110877e9372056292b543d23f1912ffcad32ea5d882054110202c6e3b16", + "bytes": 2016 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-window-manager-desktop.py", + "sha256": "29ac8b293e20b71a917fa834809cd15d881362cec0749a6ea1f7241b7409c6f1", + "bytes": 1826 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-workspace-desktop.py", + "sha256": "5e01f8a7802eface955fcb0396c99a3f0c2570751bb672cd2b3401389e80cf08", + "bytes": 1658 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-world-desktop.py", + "sha256": "fb4d115af8370f0d48a94ecc6d609eac5c0ca826a0f6d5bef90304b8c593d34b", + "bytes": 1721 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generate-brush-fixture.py", + "sha256": "c4fd4a6c28c595b742b1ef083285ac87f9af56b65d75ba03750925079a0aa637", + "bytes": 582 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generate-camera-fixture.py", + "sha256": "23c1bf411ed483f4bf111fb52f63e9ec77610f30819c68ac248075a851a59c97", + "bytes": 722 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generate-collection-fixture.py", + "sha256": "3f2a02903a1c1d74a3ba707342b6617b39a3857ccf58e30162ab993c7e112544", + "bytes": 809 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generate-curve-fixture.py", + "sha256": "bb93a2ca07e8e8ae81341c46edc7cbceb72ada2023b8fe956ee3b6ad03c7ae11", + "bytes": 971 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generate-curves-fixture.py", + "sha256": "792ec1d58d495cd9d425215aa631dd5e1d66f7bd5cf75e783b961760667faacc", + "bytes": 1308 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generate-freestyle-fixture.py", + "sha256": "e73088d9097c6ee94baaa07d3e8e279a55a0a34ccec2618e629699f840fd1ed1", + "bytes": 815 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00010.py", + "sha256": "35303113c57f1cc6c6b7bd1afc269be0c824b71f0c7bfbb0fd33f35fea40a8c2", + "bytes": 1286 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00011.py", + "sha256": "f33b9d5482193439fedd34f138b192d2e086db01205560276fa43bfd08ed430a", + "bytes": 1587 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00012.py", + "sha256": "9b261d7d516e0514e6e96a876661d0ab8eb83b844e92cd72dc4ffda460da0b2b", + "bytes": 977 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00013.py", + "sha256": "bb04dd1da461e061c27be9d4e160b2787026855198661e72ff4fee802b72c817", + "bytes": 2075 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00014.py", + "sha256": "c1333fbd1f86bac31f1db1f09056d2152f3b537fe59353f3d6f50767e8d724db", + "bytes": 977 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00015.py", + "sha256": "db1da7ca090d37b6590eab38f49cbcac9972e7ade1966d78f316048c6b0acf54", + "bytes": 1026 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00016.py", + "sha256": "12033eb9f1ef9f09fe86135259382e7cc938928c23a89b637d39e8e36c51982e", + "bytes": 1417 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00017.py", + "sha256": "64bb9f488573946dcf7d2358bd5d5f540055bb2813942e98ed154da179cb201b", + "bytes": 810 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00018.py", + "sha256": "c2b7b9c33e92952e9f10ca08b854b4bc0603350aa66f0277d08af4513d18d45e", + "bytes": 900 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00019.py", + "sha256": "36ead922241d5372ba4ae5c4656d449faeb62bb8958b4e96231c09b6b316fa13", + "bytes": 1048 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00020.py", + "sha256": "51890c98ae84cd4751896e0e84b9b63d5caa3fa58d47bba6f4074489b88dc24e", + "bytes": 870 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00021.py", + "sha256": "f6a97289626552e3e319fe72f3932beb610289c7da8710c0d4219312b0566c1e", + "bytes": 644 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00022.py", + "sha256": "10ef16727dfee1c69ea7e6b48f151016cc02a18a6586c478c286be2ed0c7a3ea", + "bytes": 762 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00023.py", + "sha256": "7bb8465ba094c9f7edbfbb66fd9f6d8b0a2e2b955d5fb990313daea09adbd22c", + "bytes": 1162 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00024.py", + "sha256": "85a16b7ebb4b00dffdc9277d11780b744267e0c789e75844b2749517c23e8ebd", + "bytes": 659 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00025.py", + "sha256": "849dddfddf9841b866cf2531af3f74b3fc42b5b6303eaa5f2273cba2a0b1cee0", + "bytes": 732 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00026.py", + "sha256": "e8cf1a2397e5a03f6cd246add30287ead990b9bfb932e34bfbbb4e95d7a98036", + "bytes": 732 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00027.py", + "sha256": "f93ea3ef289853f45ad9e1553007e47e89376d15ac2dd2e623ed2c3b783cd036", + "bytes": 553 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00028.py", + "sha256": "6d1a74f7340820917461720442888c5a705ac8140d6ad0d4809aace082c27469", + "bytes": 627 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00029.py", + "sha256": "b57d5f058a3f3862d6c4a8e4383ebd8c544ec2118338298eb5756fadc8aa306f", + "bytes": 742 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00030.py", + "sha256": "f3fb565611e07d2eb5a30f6557a3848d5f1d6e5231dcc9d4da80ec4973158f24", + "bytes": 1850 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00031.py", + "sha256": "28504da60ebf881eda9ed407884b403029bb8ced6131c425b64f512c82b2d292", + "bytes": 1701 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00032.py", + "sha256": "1af887a0beed22a1eaf199723535e2d1952c7458ea60bf22485c5b433dc17d2d", + "bytes": 1382 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00033.py", + "sha256": "4eeb3bae0015883cd91ebebed89b78ebd5c7732d3be16ac88561eca87eb5d053", + "bytes": 1567 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00034.py", + "sha256": "4523e086c326df712e621a9fdbc54bd29af0d94d241a09c437a247f824bbd8db", + "bytes": 1180 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00035.py", + "sha256": "24e6f54012d0454bfd6dc99a0fa6fe9fbfd3482781534479cdc1afb461305324", + "bytes": 1302 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00036.py", + "sha256": "219d0f2ecc7b67050865a46163e64cf7b28de75ce5c8cc52cdcf3a32817bd093", + "bytes": 1008 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00037.py", + "sha256": "b96eb3c62c590e55be3e442757a40c30b3b9c1deb8abc67d71f61b00b9c61fc1", + "bytes": 936 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00038.py", + "sha256": "e0726e2db3c360e0397d6aa1d480a63e5f4800c381c9d4e1cde33e36ebc0a5dc", + "bytes": 438 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00039.py", + "sha256": "3709078f49c92c34424c6e47d7f8870ba81c0bc2765bb5522199adfd4231e8e5", + "bytes": 412 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00040.py", + "sha256": "62aec1123186b57c5e1ffa58eea9833ea5d996a7509d49473331ac5f1843be44", + "bytes": 427 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00041.py", + "sha256": "241568c40f9308d09a1d33d87b47bb2549204f28820901133b778b640f086ec2", + "bytes": 1026 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00042.py", + "sha256": "b9ed8fdb43f5b4b7b1830881db7c770432f0023627429ffe51989e16b2f09746", + "bytes": 1028 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00043.py", + "sha256": "1fb842dde99a67cda98ec4a6feb139216ad277388b490ff65699e9f742ae095a", + "bytes": 428 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00044.py", + "sha256": "835413a7f88c4f2eb6b508d1913f1eb20489b8b5b1b1c35bceb2d094ee4f7292", + "bytes": 1008 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00045.py", + "sha256": "ac5a0a3c7a0a842a12499f06336700e0b17923619f27ce3872f6f05f299508ad", + "bytes": 417 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00046.py", + "sha256": "16cc612933b0c0137b4b986d4807ce12f838bae52457e941fd53f79c48677cab", + "bytes": 413 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00047.py", + "sha256": "d107f117b147b955027c694f6a82147e64a931dbb57e8ce0425ade9cbc9a1d99", + "bytes": 551 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00048.py", + "sha256": "46d0a48bac2f893ce03ffb055881159a3f55327e8314ef24f2530a6212ddf868", + "bytes": 608 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00049.py", + "sha256": "1d351d2f7f82f92d41ce1e1837b7bbaff41ec7046d51d118cb9a744b2f130347", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00050.py", + "sha256": "3940edc4cca7b1d5cf9a335b8190be744cbbd6e6201614372dbf39163ff9efa1", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00051.py", + "sha256": "c6f60bcce29d2015308c78d764b57579616d644d84dc27bb98a118b162348808", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00052.py", + "sha256": "53a12d6ac62873a4cc6d384c811030e43f57b08485a8c50c70d638a7433ec333", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00053.py", + "sha256": "2f3523d2f8378fbdef7083d93ac666059a3649c29fdd8c4bf5e44fdbb8e596fa", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00054.py", + "sha256": "e033647018764ecb7015f9d7c1e6201306ca36ecf3df29a8a12ecadfa19238bb", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00055.py", + "sha256": "6cd72429c65a9e5e36e099f0c35f523e51ed26d4c796be7b3e4397c3bb71509c", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00056.py", + "sha256": "b604fc0351b563558a59be40fbfbdd83481ec3c0eeda6ec020fc5e21bc527de3", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00057.py", + "sha256": "b2fed8f2d445c0eb10ed833385cc6e6e91394a97e367c6c76a3dbc4b61f5abb7", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00058.py", + "sha256": "01dd91ba30acebe5749feef841e8ca9f096ac35a9fb6b454ae30ed94941ddd21", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00059.py", + "sha256": "1077df2f66d6a954a239cbdb6d55f5b05ef382b7224c9bbd886695d47dbf3b15", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00060.py", + "sha256": "4bc32e262c02b41bbc4bccf0ae76e280a3b97cc5cb28495361f7e044868f9b51", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00061.py", + "sha256": "d99b89a5f9daaa8a454abd747b4903f0391ad21af6b315a46cd92bbcaf08ac7d", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00062.py", + "sha256": "b3e97d53919cb031f359cc15429f5801ac59614ba8f6993183f9db8deb280e3f", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00063.py", + "sha256": "a7b77f92944e9d61c4f52f478ee004f4caef642a810f1ed18d51318be04b0ff4", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00064.py", + "sha256": "1df74ba06ff31269cf1f98214aa6c0ca6aa0cc600e459315f92196f8aeb3dd4f", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00065.py", + "sha256": "977935d2e28afb3d9322e77d64440f5b69fdbf714ff6d8350a06acc1ea9cbce9", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00066.py", + "sha256": "e51850c49d2fc333b943f421c92fe6bdbfcf79d23ccab95ee87f783bfa57f8f1", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00067.py", + "sha256": "89a64c14a4b1007dc3011bde0b5cb27c4bf77bbffd7ae3e89c5f6aac30f40cb9", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00068.py", + "sha256": "cd982ce4a34537a22a20a4b8efcf676624ce2d7a7dfbd8896ed2c37494889282", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00069.py", + "sha256": "6ebf4e9475f40e8ef0da9c0fe99beb221f965efaad0953cd507c3d24be2d951f", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00070.py", + "sha256": "777e53fca82084ced7003328672cda678c8480db9c56c07517a19609ae353ecf", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00071.py", + "sha256": "d811aa0a430d7fb4db838627e8e71fa1ec812ec932d894512acf24a2d98ac6dd", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00072.py", + "sha256": "239d1ec0c9cb68b93e48becd7451a80fcbead84430cb3de2fb7545a9da658bcf", + "bytes": 411 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00073.py", + "sha256": "ce9be025d573d87c48bd4975f4cee1c343749156d163abe51a04a05e9d951ad5", + "bytes": 433 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00074.py", + "sha256": "c4d29eb33cf3abbca68333cf064e634a6202889170f20eb0d47868cacbd47cc7", + "bytes": 433 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00075.py", + "sha256": "d5d161608d986e04d66afb8871ef34eae2c27bbf8fe654b2982c6a10553150eb", + "bytes": 425 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00076.py", + "sha256": "45797f19ee517501033c3c95e79f13f4fc7f8699c17ecacc54367b3932ffa63d", + "bytes": 550 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00077.py", + "sha256": "b3b946e1348773aafd1df5c9aa192e566e79adaf06112e23e2d7a00c6c6fde01", + "bytes": 1082 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00078.py", + "sha256": "614c0b5bc0bfe91fe29a956067e1cef0ffc1b6a072e4178682323143a86861e1", + "bytes": 968 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00079.py", + "sha256": "06ae4b6e3e7f9fa3a2a999bdd916ff3f8b482bb44e2971d4775e5fc3a1fd41eb", + "bytes": 972 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00080.py", + "sha256": "394a6517eeeb12cc033b7ae43d4cebd8d99a2c31077486909ca65613da51f0ec", + "bytes": 1001 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00081.py", + "sha256": "a6d2734582c3e8f746267b682bddd0356a231609162f40cebb79484e47e4ef42", + "bytes": 840 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00082.py", + "sha256": "32c0bcc7edcf14fbbd9e12465ce61cb7e0d15c7754062096329ebd6d6cd9ee46", + "bytes": 1020 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00083.py", + "sha256": "43920644f5f247ca216205f3bbf3aa39568dc1a29b205bf5852a0fe6e803acab", + "bytes": 963 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00084.py", + "sha256": "0b5d9510f41f00719d7ddd95d23fb5ee75a561bac8cdb65a1a66950c24366698", + "bytes": 951 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00085.py", + "sha256": "6a88aac132385510134ec5df930649ec34398d57ef67a5176aec9fcf4ba2db3b", + "bytes": 972 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00086.py", + "sha256": "808f73b3c5cd06d60f96d9040189c4a2da64487326d9c8c9dc385f7715d8c4c7", + "bytes": 951 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00087.py", + "sha256": "d9ee675f1c26cbed6e95daaac356c5eaec6c76f065d874cecd6710dec46e6261", + "bytes": 996 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00088.py", + "sha256": "1aa118a77f3639ec6761c0083876c4fcb70b504734ffb1f1a6366e670ecd3255", + "bytes": 915 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00089.py", + "sha256": "bf07af3faa32ab5533ad352b46c4cfdcca45f2f8d22e9e2b894aa7566f1ee250", + "bytes": 955 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00090.py", + "sha256": "8a3687c6baed4826d7acb1e07c01ad7fc706b7279076eb32267f290c1c1538dd", + "bytes": 951 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00091.py", + "sha256": "9c31a3c7fb798db179e37d43d89b633141e9b8b18dbfd34a7eb1502c5ef805df", + "bytes": 971 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00092.py", + "sha256": "93acc4af7e20ddf63e1bc6ffb4e200b06af28a4ab943311b2170a8c01c248c06", + "bytes": 980 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00093.py", + "sha256": "3fad88717f143ab554d3926f86d218ed47ee4a682db379d337f897c41df2088f", + "bytes": 947 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00094.py", + "sha256": "3e10f94a84a52c1b6114d1d6fcf764481b8bf79dfc8cb533389c016c34c36938", + "bytes": 1269 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00095.py", + "sha256": "a82183922f2228f641d8bd59689e807e8caa495886a581e58e86f9c307b0f45b", + "bytes": 964 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00096.py", + "sha256": "8ffa8697f2d4490f9ca2f04d4eaa3866be4bdecbe17e9d5db11c13882034c009", + "bytes": 1021 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00097.py", + "sha256": "cd26d7bd580a78e40a78f7bd47526dbd3430d75b9c1f9c63849668b613277960", + "bytes": 1073 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00098.py", + "sha256": "988ad257572050d657a7c82ece4f639246a93e700ee3cb216469fb73bbb948e9", + "bytes": 977 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00099.py", + "sha256": "bafaa8cf007d02851acca674b3894d758a8dc3874ca87c184d705a07fdfc724d", + "bytes": 1002 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00100.py", + "sha256": "38d58e97c7b10b34abb70090deea9127a9bfda58bf446a8fa6fa7b8835482e82", + "bytes": 1062 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00101.py", + "sha256": "d86878aacd79189a5c1fce75f94eab1f7c04039562acefa101152cc097334765", + "bytes": 986 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00102.py", + "sha256": "aa91e891f053d2d4716e204c64e54a9c139f8dc9e53b23bf43e7f9c4cbba93b8", + "bytes": 974 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00103.py", + "sha256": "383166f3a110e555a87ba5e0f62d5805c6890d736cf79c6f1dd8972e6e6b0a2a", + "bytes": 1015 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00104.py", + "sha256": "d3d6405f1f20036043610b8a8bb22faf5e8652d6e47ee08cc40cd5e9f5567464", + "bytes": 1011 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00105.py", + "sha256": "59dfdb7ba6bb853ebc3d5d24a7c63c6a09fdda5381d62febc211128a87adc7d9", + "bytes": 1035 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00106.py", + "sha256": "7aad13aed9fc5da77c671e89961dc744228cfea00c65044270000f0fb8e4c396", + "bytes": 918 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00107.py", + "sha256": "9730c26f96cd994d92cf2e2670718124f899e0ce2e3d044a10404f8b0fafa834", + "bytes": 999 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00108.py", + "sha256": "ee8667312b3608fff806a2f888edca90cad3a960184ee64d0b7b33fd9cad2657", + "bytes": 965 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00109.py", + "sha256": "2c8f4bfe4a36a069fd6e106fc80836bf38df2663e2343a6cde15114f00cbffdc", + "bytes": 1044 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00110.py", + "sha256": "17fb8ee025fe4fadff5ca63401d795ace27920d88fd4dbe4c32af7614e0892ab", + "bytes": 1101 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00111.py", + "sha256": "70a5a835615617c1feaa7795f1ee8c4dc2e07021a62c97ea87915a4231ef509c", + "bytes": 1002 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00112.py", + "sha256": "403b955f748db90be606506213ee1cd50f8c95f45ecc4ed1bda8a847dd18ab6d", + "bytes": 1043 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00113.py", + "sha256": "e1eb89000230ec1d198930f06da6b5b35207a83a93eaf3e333c69560d212c5ae", + "bytes": 2339 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00114.py", + "sha256": "ab1e15afe86016892d2abf43ae84836ff4c84df917d15ca8f1d8b245e138bd52", + "bytes": 1981 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00115.py", + "sha256": "e91f19fa0f133900cace0b2708ee5a7fcb6efe589e036963b2b0fa6ff5bbaef9", + "bytes": 2658 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00116.py", + "sha256": "318545fd674bc2477d674292bc3c273684978e101c526a258f52af965dc3eb6f", + "bytes": 2388 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00117.py", + "sha256": "517943d741eaceb53e7f8d89a8bed07282afa157d4357e3a25690fb8f5df89b4", + "bytes": 2216 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00118.py", + "sha256": "6829baf79faa5225c6fb8a18201a5d91a2371ac4480ba1180534c7e8a8e89624", + "bytes": 2227 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00119.py", + "sha256": "2db8ee3d18c634ae2f28d1dd2a3ced2bf9490be578795b59a1ca9e96eb1992af", + "bytes": 2357 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00120.py", + "sha256": "0db649027d8772539a011bf5b5eb021efbd95728f9af706b4b42a361e88f8c3d", + "bytes": 2243 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00121.py", + "sha256": "09a7f42b438f7fb6b14eab1fd8fc436ee938ec62af8f11d62b24a46215d7a05a", + "bytes": 2267 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00122.py", + "sha256": "a80fec742fa6c4f9f0846bcc9ed7817e68ae9b78a3789b5e9ffd873a4f71ba22", + "bytes": 2223 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00123.py", + "sha256": "8b144f6bc50ec8234906f07e81bf661353fe123e0ff85dcb1874185914f4d844", + "bytes": 2224 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00124.py", + "sha256": "c80a0232ad6d5628eac7ed5b59c83f6e9741cfa0f793491db339171ee79a4ec8", + "bytes": 2294 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00125.py", + "sha256": "10ca9311b9454c1926c870a171b0bed6e3c6057086be253bad11e2c86f0637cc", + "bytes": 1949 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00126.py", + "sha256": "973f3fd3109a9f36948e11db0d46fad117fe7353a867a2a673fa77faaa6f2e60", + "bytes": 2257 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00127.py", + "sha256": "56daad95fab95e4d7896e5b2b4e30f84a8f33df7e920f41458d95e55a93991c1", + "bytes": 2017 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00128.py", + "sha256": "e6697304148d72a7305900d6893861f284fe3b42ec88c3b35b8bb2f78b728180", + "bytes": 2179 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00129.py", + "sha256": "b7c42577aec64a99b2533c236124c6afea9741a82666065dd1ff0d7570c9aff1", + "bytes": 2135 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00130.py", + "sha256": "889c12feb0e8064612f899c7ad431f647d735cc00f6da56d79e8669225378b9a", + "bytes": 2496 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00131.py", + "sha256": "f679375cd1a45f13e2423cd540b557e9eab841d4c0d535c064beb5794887738e", + "bytes": 2288 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00132.py", + "sha256": "728a07f627b276ffceb7f5ddff059829095ab7f7175ecbfeb41129f6b43b306e", + "bytes": 1878 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00133.py", + "sha256": "5bb6e8720b5f126590fb36b92a5fd05becfe6c710e99eac6694b391675e10572", + "bytes": 2212 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00134.py", + "sha256": "5760b84ac789d3aaafb2577441a7638da28fc983c0dcfb126fb36cfb1b5748e7", + "bytes": 2581 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00135.py", + "sha256": "3072ac8ebeb375655730d030e0fc757fdc8002811ad2747376ec12dbfac1c993", + "bytes": 2575 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00136.py", + "sha256": "7d29d879169aef8362f53a39130b2a4ef0ab3ac83069024a78338197e09ae030", + "bytes": 3018 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00137.py", + "sha256": "8743db045d9df0505233a88785b92b0fadb2551788b909047d1aa2376e8e9516", + "bytes": 2267 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00138.py", + "sha256": "182db872745d0ce5746919db571e67ff715c1114b3936bfa659b6e71acf303a7", + "bytes": 3008 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00139.py", + "sha256": "d1175acf47e8ec1c4998582e22d9434a4eea921f551b6c99f9b85b7f5a6727be", + "bytes": 2305 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00140.py", + "sha256": "62fe22db41e856439c50c542d0a62b6db4fbfc80facedf625ba58291d3b4a928", + "bytes": 2195 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00141.py", + "sha256": "3e27b0fffe763b6526e4e32fa9b40aae72f229038e846237b90e72312aa1a8eb", + "bytes": 2274 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00142.py", + "sha256": "36dc0cf95dae703e72f8071625b94617e8d13a1845dc148835b5584625281d16", + "bytes": 2258 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00143.py", + "sha256": "fe0b8f6c70b0a2fece59b696e5e83e55cb2f72705bb89db43b8ed4e953a198be", + "bytes": 2223 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00144.py", + "sha256": "66275fb985c801c659e063f2379d9154093550cb7d5916013332b88aa25dfbec", + "bytes": 1848 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00145.py", + "sha256": "cbbc5b2e3e84ec8442c4acb065be91a6818ff7c1d2d92e7a0e13253696b8389d", + "bytes": 1926 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00146.py", + "sha256": "ab4682dbd1e828f8f18d2bb0cc17ff6a795d364fefe5f0dadb88b74f55220638", + "bytes": 2007 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00147.py", + "sha256": "738d70668b71d9be03b8aab088c9a71e82f102f97cc0435c58a19c6838566ca0", + "bytes": 2197 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00148.py", + "sha256": "7c21cdadfb8d08c2f44ba2e58d53f9c879773b488a53135bc3a9ad4ae96aa3d5", + "bytes": 2184 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00149.py", + "sha256": "9d7d4a10fb148fe40a1f624886491d64c9dde1bf86cdf21a97c86ec167f7cb92", + "bytes": 2517 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00150.py", + "sha256": "582a5e470a2b47095762ddd6df93ff8ffe8a67ea45aa2b483f87528a9ca7180c", + "bytes": 2130 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00151.py", + "sha256": "6ac3acd4031a4dc3967d1f49546148fb45854ca1caa3c0569b7246d996cf06a1", + "bytes": 2883 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00152.py", + "sha256": "dc920602484d5b9d90b714de6044c5687f9001fd601170de87019ed194941284", + "bytes": 2474 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00153.py", + "sha256": "a1dba3b7bd0b5011eb2867f12428b89b9d76b103ebe6109e78c9711dfc0596de", + "bytes": 2235 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00154.py", + "sha256": "0deaaa7054c65927a2cdd8c5ebbce257ea05a0b81e0c4df98d6cca559553af0d", + "bytes": 3020 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00155.py", + "sha256": "14be8a2dd379b1bbb1504618a18f15fa1aa64fba64c29569896b3e5d32f3e001", + "bytes": 3046 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00156.py", + "sha256": "63e9b942070f44dcd5b8a20f82aca62d880d57a5955ff8f82914b9a9f92dcf60", + "bytes": 2136 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00157.py", + "sha256": "5613100e6c50539e8dd7371cd3c4e2c8469ec3ca384c42126e11a210ad0d5d7b", + "bytes": 2519 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00158.py", + "sha256": "1cc7409084194b006ae60b80da804de4972e671e073b6762353f9db516ea05df", + "bytes": 2795 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00159.py", + "sha256": "04988ce930276e01b61838b48860601bb829fdaf7e7d9652eb1fa2f3b36b6f6b", + "bytes": 2485 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00160.py", + "sha256": "83337ffc4859fc026819640065e8bf0aa889d5fd9b23815366a96190a45df956", + "bytes": 2935 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00161.py", + "sha256": "f042c1f5ea55d2f146c81e9765b451ea2a58c82768095c76d632ea9de46b198e", + "bytes": 2584 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00162.py", + "sha256": "ac23b4652f68035ba12003a44c75d7104be17132f8a2edce5f9b3f64052a57d4", + "bytes": 2996 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00163.py", + "sha256": "fe2d78ca3844f1b81af065855f95f4f0ba1b70259e9b9260f828a6509f3304ce", + "bytes": 3868 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00164.py", + "sha256": "84fe57e8233f869bd359215f6fc90e4291ee07fc06ebd58e45fb302778862000", + "bytes": 2758 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00165.py", + "sha256": "1c3521dd8c3ae4f8ed564391ca8a8d434bfce4e67e78dc0fc19e809aeb030040", + "bytes": 3729 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00166.py", + "sha256": "1689d5a753d6a0e51c9ebd066ef08938342c038568151739d3e10b7e86f52c50", + "bytes": 2430 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00167.py", + "sha256": "7b9cd25c07e698fd4f389011a147489fd2b343dea1fd94f14bf16ad78aa237ae", + "bytes": 2859 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00168.py", + "sha256": "b9ac34e412e9f8f8a85fdf9155201cc9e2382c1fb5bfee98a47421ce76b23e9a", + "bytes": 2705 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00169.py", + "sha256": "06268638700a3aa6312e8cc86500e3eb3eb0b3271ecc8da9d8cce3db0af33b9c", + "bytes": 2705 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00170.py", + "sha256": "9d8ad51d5a174ccd376baf67ce5323c59af5306c74d5da18bdb1c44df2a30c42", + "bytes": 2873 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00171.py", + "sha256": "a3ae3c94e453977cc8caa62b725896e352ef763e5ca8a03ac1ee8d9a95d32ddb", + "bytes": 2916 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00172.py", + "sha256": "61dcbd69b1d6a3c88eb0c1d0e9c40499730a8e006e160d83b2d1f1da55b02ad8", + "bytes": 1988 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00173.py", + "sha256": "6b8a666c9683a87182c0a35c6cdbf54f4fab873c743898e66f8ae4eef7043829", + "bytes": 1166 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00174.py", + "sha256": "95bc46b2ea19b5a7012cd75c885a87eb7ea8ad79fbab0b10841205889e4381fc", + "bytes": 920 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00175.py", + "sha256": "e4edbf58ccda3bcd61d4cb4fa2d80c2f68bad6313c94bc0c84115eaa1a4b12be", + "bytes": 1168 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00176.py", + "sha256": "9591dac532101bf681890f06a1f88f2f1a106e728846e3b86829abb834f1291b", + "bytes": 1172 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00177.py", + "sha256": "c8f783aa06acd980ebd0f3e228f4065e779434b22059e6b032b652adb521a1d7", + "bytes": 590 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00178.py", + "sha256": "2182c0a9dda794a1f037cea8178151382cfc9c15c1599c23f3d81d4d1883f6da", + "bytes": 1319 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00179.py", + "sha256": "600336ccf298afe28fdd1141a2dbac794fde599f28c31f9d7a7a8eb15bb80443", + "bytes": 1310 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00180.py", + "sha256": "e72a0c68e1ac8173c70944bc48f7bd03365913e24b831708da40a28bde936f4d", + "bytes": 1317 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00181.py", + "sha256": "bc42dcd74150bdc50dba1190dcda12f0c7f40cd8886e94c541243c5e6df460b7", + "bytes": 1630 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00182.py", + "sha256": "8424d4ca63c32c9127c9cf1d095a6dde62121ae8ddccea5dc0bbd8ba37b27a20", + "bytes": 1325 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00183.py", + "sha256": "482995ad5ea8beeb8e6a3c4a004de282587d09f5186bac854a0513c747e316b0", + "bytes": 1654 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00184.py", + "sha256": "9bd3112772fe91a57b1cb89a781067316442d4d06e7fbd7fc84429a67fe0272a", + "bytes": 1392 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00185.py", + "sha256": "9abb73d74b639eef255794c35ce8bb102959a53d4d12f8818d45c28946b1e791", + "bytes": 1371 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00186.py", + "sha256": "edd44185e79eb16c51f2160e5bec5d6ee5dd5ad2d1b662533fa0cfe399e713cd", + "bytes": 1651 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00187.py", + "sha256": "7eaac0eb63db785dea7da7df596fa19ed5447b356b13667c5f25e5ee1cecf14d", + "bytes": 1346 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00188.py", + "sha256": "109653bb9dd32d38ba755a6b284bdc75cca195894327db2f96feaf47faf8d935", + "bytes": 1665 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00189.py", + "sha256": "20c8d28aea4b14e24dfe83e1b7c3906e8bf1f2ed1fbb723542320a7ece13f73f", + "bytes": 1620 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00190.py", + "sha256": "f54bc93cb7b686883ae9bf3b36406d953af3c8246dca01e439999b5e09e4574a", + "bytes": 1743 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00191.py", + "sha256": "42f787b67fd1858ef184ffaa76438a025d92fc49fe80cdf3a3334e314839a123", + "bytes": 1296 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00192.py", + "sha256": "cb932180b82d9eabe3fac18fa461f4107fc6d1016a262c120c8be0758eeeeafb", + "bytes": 1476 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00193.py", + "sha256": "bf3d651dd050b39186f50095519cd02e16fbc9d652e2d307b7f5a05703ab18d7", + "bytes": 1534 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00194.py", + "sha256": "182bc9eda4c6383e83f353cb0ee8fee299caf954537592f58cd68f1e1b1328e2", + "bytes": 1618 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00195.py", + "sha256": "4f8fb118aa60518844dd181607994d857dc8828d66acd526fe0de727491f54e6", + "bytes": 1524 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00196.py", + "sha256": "61eefce310c581808e90c8378b1f085c00d7d28878c0c62946489225b020f2d8", + "bytes": 1349 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00197.py", + "sha256": "34b9c47630db975f40df4ebc156c9b0488dc7bc85ff0fe6cbcc4603aae2da14c", + "bytes": 1613 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00198.py", + "sha256": "85004c8e8f9e92eea7a87f266de34d07950b993b7af6bd09e642d99bd1f54eb7", + "bytes": 1665 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00199.py", + "sha256": "6ef118516c3eed69fa601631d26f5ecef355fe9f58907a1c7e33c4a8cd2be88e", + "bytes": 1222 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00200.py", + "sha256": "92d82b88dd301e895fe075c7d1760b1cb4147c7049a3c6d69509fc17e14b64d1", + "bytes": 1765 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00201.py", + "sha256": "94fac7954b5c1fd566c48b4dfac58fa2581b6068360cccee7b436e30e5bed9c0", + "bytes": 1707 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00202.py", + "sha256": "bf8fc46f38503e773ffa46248feca82de6120321888924eafb3779dc232984e8", + "bytes": 1870 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00203.py", + "sha256": "7da43b3e6d4774e5cd90ecbe51e6249a34778e58caec85945fbc9f3abfe83c4f", + "bytes": 1565 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00204.py", + "sha256": "bda30fc04f8985b0dbdce2e239ee7a05a12e9362ca162803b54154684844d226", + "bytes": 1641 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00205.py", + "sha256": "54a5039afb72cbdd942e1b9c77cbbe5bb09a4380ebca186268dd676a357621eb", + "bytes": 1754 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00206.py", + "sha256": "a0dda3e2468216bebc829cf9d64ff8b2124d243007bf466653df78aadb1e109a", + "bytes": 2190 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00207.py", + "sha256": "6c664ddeab1eb7cbe143c2c23ece749225b7f70a641590922af6a76fd61d44eb", + "bytes": 1491 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00208.py", + "sha256": "47a3962e2c07fc2cef07570c671001c612ece290ed811bc4317143391e99a82d", + "bytes": 1455 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00209.py", + "sha256": "45e9b34637496caa72e521214539d9ef60646191e90dbed5bcd76c3fa7366701", + "bytes": 1506 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00210.py", + "sha256": "82ae2a1e60b7a8f1adfa9fd0451dda47daabba420bc658177172fe3080aaadd1", + "bytes": 1712 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00211.py", + "sha256": "587d7d78764c9f107677dccd537f0265ca0c340e25127938fea64e99b33fff38", + "bytes": 590 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00212.py", + "sha256": "d38cdea9f5584506f0b3ac87fa734da388fd891c81a0438031e5bb881ffd77f5", + "bytes": 1600 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00213.py", + "sha256": "f5e1eefa9c012d091f413ec771f6dab8dac496f2d4481e33fa288a61a6ef4c86", + "bytes": 2312 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00214.py", + "sha256": "a5c2ab327f0540ac3b80088e9022c9231be30408defe536263a87c3394677b80", + "bytes": 2640 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00215.py", + "sha256": "b755086a190245ff4ed5effb4c713790ea8e1b066c79800ecb7b32cbfc1c1764", + "bytes": 1343 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00216.py", + "sha256": "1e14f51d34a6a3781b299f826ef1a449efa4ad0dc744960b529a00671ffac017", + "bytes": 1512 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00217.py", + "sha256": "037230ad7bb83e69a7c89aca12b62a87dd13d18307bf5f6dcc2c6b0ce059c51d", + "bytes": 1252 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00218.py", + "sha256": "a59d8918c3372dc41d1fdf06efea2fa8bdaadcadd0a1602af029d3682a7cf924", + "bytes": 871 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00219.py", + "sha256": "97a7da237cc8f8154f08b96e2ba6b5d6e608a6bc1b0bfa20fe165c00a3bb68b7", + "bytes": 1104 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00220.py", + "sha256": "3af1d354e35b31da18a187e0ef5f5e2b5a2f11111058ff1dc3648f6134679b41", + "bytes": 1239 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00221.py", + "sha256": "b2eea8780bb0095ab12b3a0f6e437054f6d01450a9a111030da0724b134bdc69", + "bytes": 1290 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00222.py", + "sha256": "74ddcb85092783361facd3388f3bfae2ea1794b6d1395f2381928f8e296d3c5c", + "bytes": 1403 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00223.py", + "sha256": "8edf3fc266d93bb225a0f13d16034a2518f2a85f424931d9c570626417c5ce11", + "bytes": 1320 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00224.py", + "sha256": "26498cbab951fc7494cc364a6487de4b2901ddf17844b95c1c5416dcb058087c", + "bytes": 1881 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00225.py", + "sha256": "60175e59c0362eff81649fcdcbd180fea7f06233ebd7d42cb3d35d2e66804901", + "bytes": 1764 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00226.py", + "sha256": "bf2375e84e871ada6615365fbda390de46a6f7adf1202d76ff6d6b34ea7ef364", + "bytes": 1789 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00227.py", + "sha256": "c08cad057124430d914c10b3a9f8f79d94809fdd283778397a91085364784ed5", + "bytes": 1833 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00228.py", + "sha256": "06377349aec2193a46188eea4f6b00c2122442636bea2547166ec96caef2e7a4", + "bytes": 1957 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00229.py", + "sha256": "008fdaad2977e6eb878e28e46d7d9b1eee6600b5328f954ca251576b17ff6e19", + "bytes": 1828 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00230.py", + "sha256": "4f71a937c4dd2f7284f1f13347f67c7fa1a640016c681bbd73818e334b3d984b", + "bytes": 1477 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00231.py", + "sha256": "3c735e79dc4e8f6b7f32c95ba1613ad7ed59b90c81821c0cf5e1cc9535b745a1", + "bytes": 1502 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00232.py", + "sha256": "10bd16bd644bd55dd57d427216828a7aab6cbda49a1d5cbb570d6e78e72fdb18", + "bytes": 1862 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00233.py", + "sha256": "c7da3085c85ea178b7dc834df8a05950197d005ee2d6da7da420ebe2c9ea8711", + "bytes": 1735 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00234.py", + "sha256": "408362122138a1f2e8fbe837c9d78795ff42445cdeb2359bf001888cfc6ed538", + "bytes": 1401 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00235.py", + "sha256": "9dcb072c97f9c758d33de0280685665fe089c24393f6f72b06fb02e490e2befb", + "bytes": 1753 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00236.py", + "sha256": "7f4e66d90c76efa8c4f5ed0f0e052ed1a00ca815ff24630d08a201daab94233d", + "bytes": 1429 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00237.py", + "sha256": "2345158899b35752b6875a28a243668369c51a087eef596eb420e603f0393a75", + "bytes": 1662 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00238.py", + "sha256": "dd00c6d9952cc91579c298a700c1698e1bfbe55542400bb694c6ea3c9b79bf5d", + "bytes": 1663 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00239.py", + "sha256": "651deeb3808998b44611bcecdfab9adc903245f53b66f521fad03443b900e047", + "bytes": 1422 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00240.py", + "sha256": "586f9ed3d865bf4ca759b36d010013ba33a34ff8862578c65b25acc9f53a4a69", + "bytes": 1446 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00241.py", + "sha256": "ba7a8fb5d46dc073f2e93180534340008d9f35824bdcbe829ede880015061a08", + "bytes": 1438 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00242.py", + "sha256": "0e2b56d0020066bcd69d7ee4970c4eaaf3f3cdf02a9f528903997246b3a9ea48", + "bytes": 1657 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00243.py", + "sha256": "444c10dac8003527409024263844587d5c7b6d1cec495fc8e408b6af14e60fde", + "bytes": 1640 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00244.py", + "sha256": "848e43152c5035fc40d6ffafa566dbcbf4a7940d32fbd75a7d696321d125c938", + "bytes": 1409 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00245.py", + "sha256": "9a7de621f6e88acc93d19697d4a3db5223943318e70e4561983fd989cf120aa3", + "bytes": 1703 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00246.py", + "sha256": "2d2f7b43517d2b39a44f6a2606ecf932925f31b6896c01a657ce2dfe8008e703", + "bytes": 1736 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00247.py", + "sha256": "1767464c3c6a2a24207c56bb59fecfd20f49ef7b83055716b209de354a04ff5d", + "bytes": 1669 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00248.py", + "sha256": "8fac586cf7c3f54822111df0c88151797e68af0283e39f075dd9cd70d080ed93", + "bytes": 1444 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00249.py", + "sha256": "38b8b84ca841093bff16caf3aa8b10e8f033f16649f58c7b77292b34fb94c08e", + "bytes": 1208 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00250.py", + "sha256": "fd1e6bca22e8b9e29cdaee6d7df3b561d7b1cfaff4d8ac96e9a7b807a8940e8f", + "bytes": 1429 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00251.py", + "sha256": "a6eda558d5ca8f973a6cebaba1160453c6ca5a9dec3b47cb05f89dca31f31d86", + "bytes": 1737 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00252.py", + "sha256": "8d394493b9b2a43fe98a666d6eaef5f1facf699d5063ba82a8b3ff461037715f", + "bytes": 1711 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00253.py", + "sha256": "d64e0a3681f8501775ecb6fafafec3fba567b42c10fbcda3507624560ddb05fa", + "bytes": 2077 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00254.py", + "sha256": "f08a4362f6bfbbdd8eeeac7e9961613f21450b64fcf5138fd2674515c97229af", + "bytes": 2037 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00255.py", + "sha256": "19e723cd74e3e0adad28ed2feaec157ae4725f88e4863457c91ab0b9aac4ade3", + "bytes": 1596 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00256.py", + "sha256": "2e644c7207d74ac4a1e3e9c9163af7dd823b155622e2caacb4cdf6f47b7a49c1", + "bytes": 1793 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00257.py", + "sha256": "eca6a8b77191833657b65e86c190c6d4942df4b560cb57a86a0aafcad26566c1", + "bytes": 1699 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00258.py", + "sha256": "5b4a7669e1232b981973a7317ff946fde216854b10eee36a7adee5b707f8d00f", + "bytes": 1472 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00259.py", + "sha256": "1fd82486ed5774b54fe3ddb79f7396a32754f2cc60cd139aa87c335a1222f8a9", + "bytes": 1649 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00260.py", + "sha256": "2260f113bec783fde138407c7eba120e72e860d3961b9779d1d9151c5247d7dc", + "bytes": 1250 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00261.py", + "sha256": "49aa287e8b24d914f2157f9fffe4c4c63cc7bc963b2610e8ea3ccaba0de7188d", + "bytes": 1207 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00262.py", + "sha256": "e4865caae23b80ebb893349e49fb8f8b313babb9d63e7e80c919e8b9ec9dfa90", + "bytes": 1278 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00263.py", + "sha256": "d2c2558f53a666ae73e4074fcf6c9db8d39dd7fb3de65537e66c17a70533ff70", + "bytes": 1437 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00264.py", + "sha256": "e7fd141d87414ee12669a83dbfe54ef47b557a9c517ba8ec164264882c80e8bd", + "bytes": 738 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00265.py", + "sha256": "1a86706f3c011d4a0f0b443bb6db3500704b898f0b42af5795ed2ee94b6c4286", + "bytes": 740 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00266.py", + "sha256": "e299bf65f70bc4eb08204f42894c961d0a7c2c69bfab5e4a26ed8924f52a6271", + "bytes": 1014 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00267.py", + "sha256": "bc950bc190d2e9c607a6d41cfc448977fe478b98723640287f63f4f42fcd2052", + "bytes": 1602 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00268.py", + "sha256": "4b9ab994369328b54f630882410066f5ef04980108a692d686430b8331454b6c", + "bytes": 1587 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00269.py", + "sha256": "2be254c3d36647b1d6dfb06af054ab96a0def10666f911bedc3a4225206ff749", + "bytes": 1536 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00270.py", + "sha256": "ccaa0c91694f931c0fb6313695b8bb5eae795e8003d24ff67f0eb21328184727", + "bytes": 1425 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00271.py", + "sha256": "8012efb7f85f89625f13686743798051fa5febaae361b179117c992ca4bc972c", + "bytes": 1043 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00272.py", + "sha256": "e7aac853fe0c589dc19375ab30259635e5af15c59aeb12a75eb8f7c6ac745052", + "bytes": 995 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00273.py", + "sha256": "120262e67b215a5d778100b820d74b8d3f216b20e36402a4f389099751a728c2", + "bytes": 1007 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00274.py", + "sha256": "7db1e65ed1f4329210791cfffc2888c321073bfb557cbac158577d7d4375bb59", + "bytes": 1435 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/modifier_gap_fixture.py", + "sha256": "85d5bc91e433a402099aeefccb5bed1a3711c88ea3484ac6083ce45a6c4517aa", + "bytes": 1068 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "bytes": 132196 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "bytes": 15610535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "bytes": 132196 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "bytes": 15610535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "bytes": 18938 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/web/package.json", + "sha256": "9c553a1e0614bcd190149a409759c8fe5d83a0bd00fe49b4bce049ffa01e0f0a", + "bytes": 35813 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "bytes": 17846 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "bytes": 86260 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/snapshot-manifest.json", + "sha256": "dba8bff7cfe61d77c144c97cbed6e6f2b1311a7578d935ba2a7341aad71254a3", + "bytes": 606364 + }, + { + "path": "tests/golden/corrective/C0-002/staged/task-cards/M16-GAP-00274.md", + "sha256": "d20ac20a4d38188e091b28cc0ffc68ca6f5af5013594ab08940c462a454562cd", + "bytes": 1784 + }, + { + "path": "tests/golden/corrective/C0-002/staged/task-index/task-catalog.jsonl", + "sha256": "278d51b867d63a5975635b8fd108c9025668de0893576499a77bd3d571a0f14b", + "bytes": 1237921 + }, + { + "path": "tests/golden/corrective/C0-002/staged/task-index/task-index.json", + "sha256": "ac377c38541c4962c694c4c2b0785100736e1cd12bd5f27dbc2917748405944d", + "bytes": 752065 + }, + { + "path": "tests/golden/corrective/C0-002/test-context-governance-final.log", + "sha256": "000159139131d8deb770bbce20132bee5b2bd35431329487d116d8fe2509b1c2", + "bytes": 2580 + }, + { + "path": "tests/golden/corrective/C0-002/test-context-governance.log", + "sha256": "957992d2b4e1ebeff6d55b30f22f44af108cf8354d14b43798fc839e17d8d19c", + "bytes": 2579 + }, + { + "path": "tests/golden/corrective/C0-002/test-task-context-final.log", + "sha256": "3ac32640f061860a6c328cc0eeacff4d4f248b5169ec0a8297898b5464e7cae4", + "bytes": 1573 + }, + { + "path": "tests/golden/corrective/C0-002/test-task-context.log", + "sha256": "46d7576c29781e30a3d34626c2b629b43c569a432567ad98ab0edaa045b44614", + "bytes": 1570 + }, + { + "path": "tests/golden/corrective/C0-002/write-command.log", + "sha256": "4f6f9e9a4667748cb310e3d15e261f4f426daef62591cb420fee18aece2128c1", + "bytes": 122 + }, + { + "path": "tests/golden/corrective/C0-002/write.json", + "sha256": "eab0519f90b4f35165c0affaa23c3c93917b80ae8f74815f55f464bd97bb0b7f", + "bytes": 218908 + } + ], + "inputDigest": "e3ea4c578a30fa0b0a80ee28645c0583b10f24f0780b3b6ef67088cddd8815b0", + "sourceHashes": { + "docs/EXECUTION_QUEUE.md": "eeaca50828c3feb3ed53d1869626a703d9e50fefd9c70d871cc6eec03fc84bcd", + "tests/golden/M16-GAP-00273/manifest.json": "3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1", + "tests/golden/M15-03A/completed-gap-tasks.json": "f9f4f1116b5975aa1b47fee15856f2029ec8f02161e432e9a24b846384cd1c5b", + "tests/golden/M15-03A/next-task-plan.json": "2235d0d250d28e63ab1c9b0e956292560785cf340c612312b316be0ceb2463a9", + "tests/golden/M15-03A/task-catalog.jsonl": "278d51b867d63a5975635b8fd108c9025668de0893576499a77bd3d571a0f14b", + "tests/golden/M15-03A/task-index.json": "9c79926a5a91b137b023a62f8a98d7c7421018846fdf658c9bea13ee5c5cbcea" + }, + "commandExitCodes": { + "planCheck": 1, + "indexCheck": 0, + "contextCheck": 0, + "contextGovernanceTest": 0, + "governanceCheck": 0, + "diffCheck": 0 + }, + "resolution": { + "status": "PASS_WITH_REPAIR", + "writeOutcome": "STAGED_RE_SIGN_CANDIDATE", + "authorization": { + "mode": "CURRENT_WORKTREE_RESIGN", + "userApproved": true, + "legacyFilesOverwritten": false + }, + "candidate": null + }, + "nextCorrectiveTask": "C0-003" +} diff --git a/tests/golden/corrective/C0-002/manifest.json b/tests/golden/corrective/C0-002/manifest.json new file mode 100644 index 00000000..529e9fe8 --- /dev/null +++ b/tests/golden/corrective/C0-002/manifest.json @@ -0,0 +1,8199 @@ +{ + "schemaVersion": 1, + "task": "C0-002", + "status": "done", + "gate": "G0", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C0-002", + "artifactCount": 1632, + "artifacts": [ + { + "path": "tests/golden/corrective/C0-002/check-blender-next-task-plan-final.log", + "sha256": "e68a0bc36c6c8fbdf0d35a03307eb1b7bcd8b3e89d53cab7911d91cd859a6a72", + "bytes": 2334 + }, + { + "path": "tests/golden/corrective/C0-002/check-blender-next-task-plan.log", + "sha256": "e68a0bc36c6c8fbdf0d35a03307eb1b7bcd8b3e89d53cab7911d91cd859a6a72", + "bytes": 2334 + }, + { + "path": "tests/golden/corrective/C0-002/check-context-governance-final.log", + "sha256": "8b4a0add34d164d2e514192c430269e780f03f92697d77e494aa35825b5861f3", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C0-002/check-context-governance.log", + "sha256": "8b4a0add34d164d2e514192c430269e780f03f92697d77e494aa35825b5861f3", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C0-002/check-task-index-final.log", + "sha256": "ce310f4a62f095235c7d6096c324e8404e02588871f62cd27a4116a1fac8c2cc", + "bytes": 94 + }, + { + "path": "tests/golden/corrective/C0-002/check-task-index.log", + "sha256": "ce310f4a62f095235c7d6096c324e8404e02588871f62cd27a4116a1fac8c2cc", + "bytes": 94 + }, + { + "path": "tests/golden/corrective/C0-002/command-exit-codes.json", + "sha256": "350620865bb42ed39ae9d3f778fb0c10273c4853e11f623c0200f7a195c57ddd", + "bytes": 322 + }, + { + "path": "tests/golden/corrective/C0-002/corrective-plan-final.log", + "sha256": "8d43d87f24c770dea5b56022f4ac010d6474e05ff2863c90035b741587a9f3d6", + "bytes": 88 + }, + { + "path": "tests/golden/corrective/C0-002/diff-check-final.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C0-002/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C0-002/dry-run.json", + "sha256": "e3deaaaeff177f894f427391716b92229b84d37a00e45eddf8bd95a72780b43b", + "bytes": 218906 + }, + { + "path": "tests/golden/corrective/C0-002/handoff-command.log", + "sha256": "441a4548ab496a3bb756b082a0fb17f8109b6160e6a393fe5c0fef20136a867c", + "bytes": 82 + }, + { + "path": "tests/golden/corrective/C0-002/no-candidate-final.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C0-002/protected-hashes-after.log", + "sha256": "aa2222f10d6732d4585984a4349f25f83c3da0d720582e47f0d471657df48e66", + "bytes": 1316 + }, + { + "path": "tests/golden/corrective/C0-002/protected-hashes-before.log", + "sha256": "aa2222f10d6732d4585984a4349f25f83c3da0d720582e47f0d471657df48e66", + "bytes": 1316 + }, + { + "path": "tests/golden/corrective/C0-002/reconcile-command.log", + "sha256": "7c5dce670016adbb11204a948f3dbb49b9477fdb7968e32f985624b9b79ae679", + "bytes": 126 + }, + { + "path": "tests/golden/corrective/C0-002/reconcile-report-command.log", + "sha256": "473297832f7ee568d6ddc6cc6ebbd1767232ff793d255aea9b60e7385fabbcfe", + "bytes": 135 + }, + { + "path": "tests/golden/corrective/C0-002/reconcile-report.json", + "sha256": "e3deaaaeff177f894f427391716b92229b84d37a00e45eddf8bd95a72780b43b", + "bytes": 218906 + }, + { + "path": "tests/golden/corrective/C0-002/resign-check-command.log", + "sha256": "5ceb6e0fe696da0bb647e159d8ec247dcff1ba713572bb5ed99d1fb27b137fc3", + "bytes": 85 + }, + { + "path": "tests/golden/corrective/C0-002/resign-check.json", + "sha256": "aee2a8c4e6ac94d40dfb8f25f79e5e25815a917f809c3abb7bf8a5d274d65f69", + "bytes": 1567 + }, + { + "path": "tests/golden/corrective/C0-002/resign-command.log", + "sha256": "9bd1a791abf80ce766c7f569dc328b1c04422b873a6cf7d6a4a062bc70c013ff", + "bytes": 116 + }, + { + "path": "tests/golden/corrective/C0-002/resign.json", + "sha256": "cf7b9c23a8573b8dbbde4caa4eeeda9f48eaf33f84a32c23f01fd9e8c00bb751", + "bytes": 203700 + }, + { + "path": "tests/golden/corrective/C0-002/staged/completed-gap-tasks.candidate.json", + "sha256": "f5da902feecdafc1f12773568d3f48a5bab1ae8581e9661d8a7c888f4b62026e", + "bytes": 8996 + }, + { + "path": "tests/golden/corrective/C0-002/staged/next-task-plan.candidate.json", + "sha256": "3d5c74c519d3ac9a53c2ae516c4ad37adccf6999909ff1672e0ef74caae695a8", + "bytes": 7095296 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00001/task-context.json", + "sha256": "edadec3488020baf6d04872d0067a9e94e9c26f59b94dd4d85c041483bb75c11", + "bytes": 3156 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00002/task-context.json", + "sha256": "6264a3ceab31c6b41cde332cf35852479e1cbc0cdbb8c67d68dfc3b50d0d82a8", + "bytes": 3408 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00003/task-context.json", + "sha256": "4fd90216fb0279eab0890d563f5745ec770f517df2ff700b93d317761aa5d109", + "bytes": 3538 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00004/task-context.json", + "sha256": "19db6ddb4d3faea4e0cee3ef2820f9746e3f79fea6e2a206cfb7e3835198d32e", + "bytes": 3536 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00005/task-context.json", + "sha256": "52999f09111394f8487ef74eded2727c128accf57b0721e18bb7dbfd2c9e6bf4", + "bytes": 3547 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00006/task-context.json", + "sha256": "904647124704e6c17082d388f26aae25bf808b01e2174df469f6feb329f6d05a", + "bytes": 3469 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00007/task-context.json", + "sha256": "c2384964c9ac9e5ee2c7218b19fe7bec2f02f95d44b33cf75f91c46c06bdf4f4", + "bytes": 3523 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00008/task-context.json", + "sha256": "4055f7194d3cbc3018e9ceab497c02eca15c14ac9b51532d6d626702d69741c3", + "bytes": 3574 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00009/task-context.json", + "sha256": "6313a77cb68e1172dc5945b52b4c058e59dfa909a29c51d925e0b312120eb77d", + "bytes": 3662 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00010/task-context.json", + "sha256": "1977b3f08bc4a58d6482c04620c375d5a0d25bf059620610f0eec8b4feab9b3c", + "bytes": 4057 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00070/task-context.json", + "sha256": "ef69ccd734e89b834d8f3a2ee5ff2de5e1b3d9f2933157ce9be2d9eefcb014ee", + "bytes": 4579 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00072/task-context.json", + "sha256": "13025a4ec3eed8b7f59093c357a0bbea27eec75a23f7f931c5da2762666810c6", + "bytes": 4535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00073/task-context.json", + "sha256": "25eec580e82676b1c5be258f09a4361b252a8bf0b7b8a51e34e663edc89213ba", + "bytes": 4482 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00074/task-context.json", + "sha256": "7feeee0a9c2dffe77b21c91b91f8ea5916a91337fe63800ab32d5fddb7628105", + "bytes": 4524 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00075/task-context.json", + "sha256": "74fa739be0a72e31c20314aa8fd86bcbaac03553cae96e1ff45172d377fda220", + "bytes": 4492 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00099/task-context.json", + "sha256": "098003b24895f0fa7b5fb7045872fc624aaf5e042cc61af128dec35b8e414037", + "bytes": 4537 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00100/task-context.json", + "sha256": "010e42bede90c628c5b1a00cdf3d1a0331fc66c6266b760f1dc8e7673e3f0612", + "bytes": 4565 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00101/task-context.json", + "sha256": "905778ae41fcae54ee2f0923e4b3259aa9758e2bc3bd611ed083d5966417538e", + "bytes": 4577 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00102/task-context.json", + "sha256": "d7c1e1640b3ad9bfdc07b4bc84edd517f1408854707593cd864d1a5824579b98", + "bytes": 4523 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00103/task-context.json", + "sha256": "e9e9dac3cce44cf0f6a3795928f6c5f56a0536fa5b49c8f55bc578c2856d6db2", + "bytes": 4551 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00104/task-context.json", + "sha256": "52978ea6814d414298b3e829746800a98b5957c1565c1310c157d6eb747ca082", + "bytes": 4656 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00105/task-context.json", + "sha256": "3e65396f0a1afc40ed546f2c5a7199a6555025a73f7e4d6357646f6ff8aa0431", + "bytes": 4629 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00106/task-context.json", + "sha256": "9b3ff28395e1b58fe792150f78fc99857eb8a8ed7ccbdea30d10868201c8504f", + "bytes": 4631 + }, + { + "path": "tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00107/task-context.json", + "sha256": "7038a6c9e49843f3749193bb19e15772e0e1f90a801697b0c15be86d07101e84", + "bytes": 4613 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/blender-5.2.0/source/blender/blenkernel/intern/particle.cc", + "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c", + "bytes": 173369 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/blender-5.2.0/source/blender/modifiers/CMakeLists.txt", + "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127", + "bytes": 6248 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f", + "bytes": 10138 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "sha256": "1944fbb1153eca61e4f6c8589f16fced60bfac7f4e96da1355428b263651e2ae", + "bytes": 126613 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "bytes": 240371 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded", + "bytes": 243066 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00158.md", + "sha256": "7cbb2c0af79def8810641264087eba11d45a8d6cf5d63710364dc6c970fea382", + "bytes": 563 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00159.md", + "sha256": "f93526ce6fcafb2734cbe1c86ecde24da0e94c702b711e72efa080a25201d84f", + "bytes": 582 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00160.md", + "sha256": "b363159100041b87476b7263631cbf91bf02a83795eb8ce78e019d71e888ce55", + "bytes": 625 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00161.md", + "sha256": "45a504a53e49b7e1df0d93b487125218aeaef5c5e227ba08e78f2681211a22bb", + "bytes": 584 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00162.md", + "sha256": "a510bffd34faf4ee5d6a4ed4c7e53eab5a249a4b3ce8e6ff5d5c0b8b06bd814e", + "bytes": 575 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00163.md", + "sha256": "08d4c8ebe07e9db2eefaba13d861bb5828316f2411117ab0604eb27cbd2308d7", + "bytes": 715 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00164.md", + "sha256": "a3f31d41ab5714e6ee808c241b92f409074b4c699956df655026af1a1cf1b1fb", + "bytes": 785 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00165.md", + "sha256": "e1248ff14af9e870516f009da7e64fce0b5ae9ca8da87725d11d2f3424e03399", + "bytes": 765 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00166.md", + "sha256": "212de0356fd48f2696bdf4004758d0bee9c55630a9563adab88c6772b7248d67", + "bytes": 859 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00167.md", + "sha256": "fdb2aec90eac4e9fda1907234d7ecda51c2c09ed05f2d23dc2809fe3aeb6c06b", + "bytes": 744 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00168.md", + "sha256": "e1f398011436d8673616ae1412746b16b92e687a8601ee16d9e01ed5fe9bc9bb", + "bytes": 707 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00169.md", + "sha256": "6270aa94f27514e4ce112f0daa7cc7fc4f6507d53055bc7f42f5a0e9fe254e1a", + "bytes": 737 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00170.md", + "sha256": "07ff672b4319741a3e8fefb9b614b1ce3176a957212200d84600e99e8c65848b", + "bytes": 701 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00171.md", + "sha256": "79b24742a11e7456b82154b13ccae7d2b57dc4b3ed4493d77ad4fc36c894e443", + "bytes": 699 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00172.md", + "sha256": "7b6f81442dfb91ad7eaafcd293dd8cfecde3750f2d9ad50b6a5d8b19e4430846", + "bytes": 718 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00173.md", + "sha256": "b97b46a2f391fd6c00adb3369652709f1fa447a9a05a931a0817ef81800805b6", + "bytes": 934 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00174.md", + "sha256": "ab5ff18f67b8aeae1b2c2e41b15f9d0a27eb0db61904f07a582b77b9a6576782", + "bytes": 1013 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00175.md", + "sha256": "7a5a2a5e308ce9804db350cc06fbdac36b959892a1f2245531fc515388c0146c", + "bytes": 806 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00176.md", + "sha256": "f40dac4690310310d87b5cf020995ad109daf4c9167ab953c9d001c31c7e84b8", + "bytes": 764 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00177.md", + "sha256": "c87a6acb0b22e57107bae051a9d8ce524ae296363a6e3f25fb98bc8872bf03f2", + "bytes": 657 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00178.md", + "sha256": "0525407475c3c4cc8ed880d29fe077b178017f3710c56002558bd032362808d5", + "bytes": 1027 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00179.md", + "sha256": "c1d842b67de5e7275d040a033eb5cd16319ec2c5f77e1b67ed1d55b1c9e0dc4e", + "bytes": 1006 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00180.md", + "sha256": "6af17dd941fdf1f76753ee23a18f97689b7d9719c37ce8714628b0acda11fc5f", + "bytes": 1058 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00181.md", + "sha256": "16ef18b3c2a4035e283a5a9af1968d0250763a0a3a2b52fb5a8f4f05821968c2", + "bytes": 1310 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00182.md", + "sha256": "43e96981d4987ee1b32b07ce6053bca47b50106526d8e932e2b67d0005b576dc", + "bytes": 1288 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00183.md", + "sha256": "e583e704854dd1eca1fa5c672c3184cef8e2433138628aee92b11fb8a3345f98", + "bytes": 1270 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00184.md", + "sha256": "44d3f28d968aae9c4315f08dd7581cca309347a839e20db4b8f19288bfbe706e", + "bytes": 1181 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00185.md", + "sha256": "de8e22ea2619605053b10e19061de49f94ed241fba16c8b7aa0b0099be3a3b2b", + "bytes": 1247 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00186.md", + "sha256": "1f2f3ec3947f4593dd5204d1058a125127f396013063a8fa0d447c189f4f50ce", + "bytes": 1234 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00187.md", + "sha256": "16c75cd97e157bcb23bce603f7e27f6f095ce1c76c3f11501355a9431472e691", + "bytes": 1333 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00188.md", + "sha256": "bf958a16b78eae1da59438bfac089fcf16197982a23d91dbcd6d386942bc6425", + "bytes": 1297 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00189.md", + "sha256": "f57b7b340a8c137afda5bb04daa4a71de372e2b0bd74fdb692029bea2da5e7c4", + "bytes": 1264 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00190.md", + "sha256": "59def4f8ecb6005d53b5f1b335da97abf89a21f55ceb3589bd87493e2d06b9bd", + "bytes": 1205 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00191.md", + "sha256": "c4d82279105c2e1821577084e539495d09bd99de99eaefadc1f23ed95841a333", + "bytes": 1097 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00192.md", + "sha256": "1367262e064964fa586ffe5c09ee1702f9be0d7f5f55f5794d54a48ebe8c5349", + "bytes": 1120 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00193.md", + "sha256": "f5510b2a17b16c1ffdd873b30c0b397b25d6d1660eb7f16cfcbcfdccbb4ae668", + "bytes": 1081 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00194.md", + "sha256": "54a5b5384704b1a16d541cbc6d70c98001495cb010fe1f9235e73d23a0fc2d9d", + "bytes": 1061 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00195.md", + "sha256": "cdb8e80052164365b81fb210701cd5283ea022f219eb1a1e14d561ef178e7420", + "bytes": 1073 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00196.md", + "sha256": "b1a31309d96dc8fa456c95e45e78aa192472f84573a8ab9ad21bac1a047a3a8c", + "bytes": 1103 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00197.md", + "sha256": "5f9ee54b01a17a8c4554d58c4f9f415a7feac5790a56aa2545a560ffa4ef2362", + "bytes": 1120 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00198.md", + "sha256": "7bf5d2f34a6fa5b19efca51fe360358da8e8030419fd78687314e690598125aa", + "bytes": 1206 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00199.md", + "sha256": "920d779ace3658975b5f2451fb48b644f7d64ce81129b89d6e1eb9fc5ac6e6c9", + "bytes": 1125 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00200.md", + "sha256": "314c2534f8291496721d190b7345954f1e7e9218b9756d1b6bfdc4486a112b9e", + "bytes": 977 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00201.md", + "sha256": "9b5e2b1a31558340dc633d476fb379bd4bb460b8d246f4b2b4576b1734b3a95b", + "bytes": 926 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00202.md", + "sha256": "2e3f248c5393a4e17b060d48f73f553764a66f224d38a3aa29252a66dc0cc475", + "bytes": 1125 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00203.md", + "sha256": "0504f0cc178ce3f7d3678d0170294f3fdc5c0c0ff40458a9891ef471e8bded96", + "bytes": 1103 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00204.md", + "sha256": "9f42dcc4c93fff48d9f1c739feb9df5f0000f18ef1a9ea11644207534cc3a9f8", + "bytes": 950 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00205.md", + "sha256": "504475606c2d54e38587d7880653c6328666b9731c29857dbc68d127a6249d71", + "bytes": 1013 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00206.md", + "sha256": "28a15b08f7d20ec17fa242954206715e1b8a50bb7ae1391c9a187119aaf8be26", + "bytes": 1077 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00207.md", + "sha256": "6cb10e433730afa5fea28840824d849c492461f4b5b9350a41d5a0f995d4f504", + "bytes": 1086 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00208.md", + "sha256": "957439dbc9be432dbb8187be6e3b2f12a27665e4e344a87897d51008380e7bee", + "bytes": 1134 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00209.md", + "sha256": "9c436780681f0309420bd6c3e9def7e970e483175b4183e691320d5dd73cc108", + "bytes": 1108 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00210.md", + "sha256": "1a2fb7129a562a6ca35ae61159d1cf28c3069be6a121d738d4b621138033e8ab", + "bytes": 1086 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00211.md", + "sha256": "73b13a7c83a37e2edbd5498035987f542538d49650812b4cbb8ed6b27be85cd4", + "bytes": 1028 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00212.md", + "sha256": "6007b1fe88b4bc38d416bf092d9becd2a8e30a50a56f12f19b6c62ee515a34af", + "bytes": 1256 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00213.md", + "sha256": "ee58d81b60550da7abf3a6f6a99cf53d33e5570fcaa7c49bed46db66ecbb9b4d", + "bytes": 1268 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00214.md", + "sha256": "67c9c89f921f7c911bfb5172da5eefa1fe68a9749b41e61b55383d63ba65de6c", + "bytes": 1227 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00215.md", + "sha256": "9bdd9c23820e98dfbb1bb57c2c1c7339f07e54c4abf2ba06d5b18a3fc0c0762d", + "bytes": 1037 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00216.md", + "sha256": "8e4d7487a830aa736ca668bdffc059ab4bc366fd65f9ef159d10905ed3e27a37", + "bytes": 1172 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00217.md", + "sha256": "a735bae8a60c2d32b47221d4f5547489808daa8e939c7dec4bd7c729eeb23a3c", + "bytes": 1023 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00218.md", + "sha256": "44c52e0bbeabf7ba66894db6f51f04a5ab793c921483796176568c5d25f97711", + "bytes": 1057 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00219.md", + "sha256": "66adfb1390f39daeeedc52b0db0cfe1a4542af738ea6c5944a292faa53936e57", + "bytes": 1045 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00220.md", + "sha256": "5c5274c86b019432f5b22e474947272001ad2af14b2437b577578547d2230511", + "bytes": 1089 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00221.md", + "sha256": "56727977918f6e76af983feeeff59da94ea0e1d020569acfe6eb5ff8fcce49e4", + "bytes": 1032 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00222.md", + "sha256": "61664acc268f0ddc6e53aec409e07b907dcff1e4bd75882f0b2fd0c92ad0c989", + "bytes": 1055 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00223.md", + "sha256": "4067ee986f0ff940d8ec7ba937bbdf4b7f81eab5779a3cbdd7287dbb7fdc6de5", + "bytes": 1171 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00224.md", + "sha256": "25f0a2dc6478e179122efad2467952a0e75eb5ff0437e0c0f2b3639f034d744c", + "bytes": 1096 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00225.md", + "sha256": "3330f1d33b17b920a261497023dc4ca06079837f69ba39251ab8d48a31bc73c0", + "bytes": 1092 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00226.md", + "sha256": "e4d4e214d2f1fd8c1872978d18ce28bee65fc7c4ded0c6869780af0343d12d5d", + "bytes": 1129 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00227.md", + "sha256": "e92da7d66c4674271bbf2a43d524145b19926e1d919eacb27e4afc9ee3ceab51", + "bytes": 1146 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00228.md", + "sha256": "347c7884e48c5ca488105422e401c93d7b2569886a43230c6d26afa103700132", + "bytes": 1164 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00229.md", + "sha256": "938515604dab298a7d7d5f02a89ca3b587071db63af3aad1c7327873196ba14d", + "bytes": 1117 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00230.md", + "sha256": "1b3945852e234096ae9be98f83bf3e6d647b06a0811346afaaab5c657501f9f6", + "bytes": 1089 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00231.md", + "sha256": "d03df95a10f54abacdb1d45c6e6b186c61211fe8ebf6e710b22349e100f1801e", + "bytes": 1185 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00232.md", + "sha256": "2c00d0f68f961158b9cb931a2071f83d7e2a402a7078789260c9263fcd7cae3d", + "bytes": 1212 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00233.md", + "sha256": "7f05db1dbd06d1570d98aef79177784423fc73706dcd2c6e967ba5aff294c0cd", + "bytes": 1380 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00234.md", + "sha256": "68beffb770ac5633f4b3ce112fc9e623702eacfe86ad3bbe0362158633ba4d4c", + "bytes": 1146 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00235.md", + "sha256": "eeace6c617236ea29331ba7824d85f30fb84d674e1a3ef385da4b22c632fa2eb", + "bytes": 1296 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00236.md", + "sha256": "de335028bda9f8c51d13d244e81c3c1952cd074bddc74896c8cf5554389f9aa5", + "bytes": 1224 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00237.md", + "sha256": "9f3084ee5e5e0c6c195f71590e51e8294790164272a4592e8cb60982fc037ad1", + "bytes": 1232 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00238.md", + "sha256": "a0cd13391e19a1b3acb3e84608cccc9805b0e11b9c7c791a94b3f47731381077", + "bytes": 1273 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00239.md", + "sha256": "06f69cd41bf79caf33eeb65b3ee0a14dca930bfac46984ce2b2b3c01a53218d7", + "bytes": 1289 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00240.md", + "sha256": "e50e0e1f6cbbbe7ca87686fa32b554bd1e9027452139638c055966cfad1a0b35", + "bytes": 1298 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00241.md", + "sha256": "3a467ab859b73c7ebd3258c6f15f15ba2db2b197c8bf4a2441d7bcfdac26e06c", + "bytes": 1340 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00242.md", + "sha256": "fb18cd303bcd1455f363897d6e2d34320a81156c1a096ec6ca0560e3f59e3cbb", + "bytes": 1307 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00243.md", + "sha256": "3fa12d4941b7ea5131682f3727020b2bd45bb6ddd15368d42bb723002e1c9e2d", + "bytes": 973 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00244.md", + "sha256": "efdfd1529460078ff569106961bd018f6ae75a3d9aa17da816639448268be17a", + "bytes": 998 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00245.md", + "sha256": "bad2709c02906d0e84d1771308245f3c2e3d52b3b9436719efd3d47155c0eae0", + "bytes": 1005 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00246.md", + "sha256": "5cc88cc19daa3fe9ad1a50f568d0d482c71c8b535a2e8bf024625bc7d9ca4592", + "bytes": 957 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00247.md", + "sha256": "26711b27363845b086c413d07119622c93ef468f28f412576842b1f809f6b5b6", + "bytes": 1040 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00248.md", + "sha256": "fb619f3dabf2d6f3593417893901d0eac7d73ccab4b836ba1824834bf6d46a95", + "bytes": 935 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00249.md", + "sha256": "99656df59b260315621efa7792d2e4eaee6709ff434058d848c86b6b9a674771", + "bytes": 952 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00250.md", + "sha256": "dcc9e9890aa1e9bf5df7f2c91155c98fcce954896258cad6b2b4778048e502d2", + "bytes": 946 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00251.md", + "sha256": "67e04c31b88c5821592269c0f629dce00cf675bef9bb0879dd78d6818127f92d", + "bytes": 1070 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00252.md", + "sha256": "3a8cf46d4f0b5efae6dfbdef3ef8ce808dd603d3a80146b15f0b2f95dabfa302", + "bytes": 920 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00253.md", + "sha256": "e6627177fb89e16a7c18efddf495d46e01a0d1d70d14f324813a05dc5c9fdb6f", + "bytes": 906 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00254.md", + "sha256": "711b0fb2e6dbbc12a25d1c5ad19ea3a3085d9b7fbfac45ef633735053479dc19", + "bytes": 926 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00255.md", + "sha256": "0dba82e5720f86c24fc442bb14472d1f2a14929df2652566d0b0bf0db7ef101b", + "bytes": 887 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00256.md", + "sha256": "cd01bfc800c3e3f8931793179a8c73070318f49129f36c9d62cfebef36dc6134", + "bytes": 885 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00257.md", + "sha256": "6da68ce35f3ff17a22f5f5378c503304fe8e28ab65a73ff0eae35125c94600d1", + "bytes": 876 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00258.md", + "sha256": "d4d7b7a215c7acd495971e9dbe1c41bc5ee500d7f9f1f02c4ce0c6241a7edd58", + "bytes": 908 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00259.md", + "sha256": "cdcff44be62d2d855e75d393c79883034d78784471191fefaf25d999e34587e7", + "bytes": 842 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00260.md", + "sha256": "fdf1a22b08d328a15a7fb473034cc058530ee5fd28a227098db0577b02a5cc7b", + "bytes": 715 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00261.md", + "sha256": "6a8177d5e252433cff846d1febe3e98759861118e7c7dcbccfb6dacac3930ce2", + "bytes": 714 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00262.md", + "sha256": "011e5786081b22f6e706f3efdb9e7ce3d2422ab499be32ab7875d50986e26e3e", + "bytes": 730 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00263.md", + "sha256": "cd501a7510dd967be05d259465ae7bc9a2144122770b95cf951627e10341559d", + "bytes": 830 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00264.md", + "sha256": "57cdac22f8e6e6bb5e233b4568e9d06885869341fac96ec5bd8e717f040edcac", + "bytes": 989 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00265.md", + "sha256": "377f5180ae25d3912237ca1b3283f0a5f9d5292fe28952515918ec22467f8d9f", + "bytes": 948 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00266.md", + "sha256": "5173d19e5d61195f3a6b4688d607274a099e47b5c2bcbc39d0ed1d6ad5caaccb", + "bytes": 956 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00267.md", + "sha256": "2784e307c2f4747a99dfecea527d413b5aea42c640cb2e5f0e5d3636619a8874", + "bytes": 1050 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00268.md", + "sha256": "7556cb0df348aca6d83dadc3d155e5ab9d9403e1e470f765acebcaa851a7d058", + "bytes": 1010 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00269.md", + "sha256": "6c65ae2c6884a89c9051b13d5336cb9e8c454ccb8e9ed8d80e84b09ef84db0c7", + "bytes": 1022 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00270.md", + "sha256": "293a56ae16f499b98784f05b12d1ef0ec4e9a844763ac1515b1c11d7f26fdcd9", + "bytes": 1013 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00271.md", + "sha256": "d660b0ec53156000900bfbc2794d583a321788acba6298de35f228cf8cf6111b", + "bytes": 1016 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00272.md", + "sha256": "522fe8b32558b75f87488fafe11ebc17994bb9742f24663c5ea5a85d64e6598c", + "bytes": 1016 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00273.md", + "sha256": "5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8", + "bytes": 1030 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00274.md", + "sha256": "e77fcd7c5e95a64df591af09cee6dba5a3f60c1616f39a3601841f0d88c4fe3b", + "bytes": 1330 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00001-datablock-Action.blend", + "sha256": "cb921e862eff1dcf68f22d77ef8558679207203ace0b80239a5bc5874ec2a551", + "bytes": 86769 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00002-datablock-Armature.blend", + "sha256": "b7d1c05b70e97be9a70890d45fea60b143073462d2a4f62eb3cc607bd2d665ca", + "bytes": 87320 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00003-datablock-Brush.blend", + "sha256": "f1f6922c4c9c31542a9cefad6932d616ef5dcde0067c0a9668f67902023f4f80", + "bytes": 86159 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00004-datablock-Camera.blend", + "sha256": "c637587ce3011cbe9b038ab87803a9a2f945d4512b55d616a5dda268628988a0", + "bytes": 86379 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00005-datablock-Collection.blend", + "sha256": "c33d2b1b85b0272aa3bf06a012000db5f383a9a73b79bd4b90042110b70a912b", + "bytes": 86454 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00006-datablock-Curve.blend", + "sha256": "49af45a70c7e050277a9b4b643c41aa9f29978b1df5214b5e48dc629b0027a21", + "bytes": 86153 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00007-datablock-Curves.blend", + "sha256": "d6489313473ced7f55cc1d43f3fa73181672c0a5db4b6854002f18354ca1d9a6", + "bytes": 86489 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00008-datablock-FreestyleLineStyle.blend", + "sha256": "94de965ad54018f7072f2b4f4b752dc6f28f6608836040dc353d18d19fe31fd9", + "bytes": 85885 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00009-datablock-GreasePencil.blend", + "sha256": "3a8525077807f9178dac3a5ba84b524e5f8e80874b15c54e2a6658ecb80315a3", + "bytes": 87788 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00010-datablock-Lattice.blend", + "sha256": "ec40e2661e20c8f7e3b18d9b42f9e585175be8c2f210a1c8c190e76a6e9fbc63", + "bytes": 86081 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00011-datablock-Library.blend", + "sha256": "d6b00d6cdc0c1c73158ba91433d8344f4b6b0a2f1d5c81e57cc4e0b42d23c34a", + "bytes": 85914 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00012-datablock-Light.blend", + "sha256": "b92565305572d48cc2311b749d50024f1df68c4084ae8bc52ce2ba2c3832a3fa", + "bytes": 86529 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00013-datablock-Material.blend", + "sha256": "e17880024b28e0fbc8fac5b815a2c673fe11d5000cb1d23a794cdc3d83658d76", + "bytes": 88264 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00014-datablock-Mesh.blend", + "sha256": "1676a26f95de4eb90e55ea169a497c382ca68f195c6b883de49b6a3223d84bb5", + "bytes": 86393 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00015-datablock-MetaBall.blend", + "sha256": "b4901e5c71f10b79a2061bf7599b43ff1b20b7df59f227aa78c1e66a38080b4f", + "bytes": 86061 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00016-datablock-NodeTree.blend", + "sha256": "7075a345a9991d456fc2c6cc68b3a836fc837dbfd99328173f0018b59e0e483c", + "bytes": 88360 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00017-datablock-Object.blend", + "sha256": "527eefc6ea01671a21634a3191790a8228038dd72a0744b6f00969be048e36ef", + "bytes": 85914 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00018-datablock-ParticleSettings.blend", + "sha256": "1a51117f3225e6fb1aa98fd135fc39bbfb9444f741f89956c52bc3e0252fc6c0", + "bytes": 85999 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00019-datablock-PointCloud.blend", + "sha256": "57ef80323ae70ce21842c00b3777e8ef484b7e332a6645c165fd5f029a522089", + "bytes": 86126 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00020-datablock-Scene.blend", + "sha256": "c12826c7a71f092ee8dc3c32495be295dae95f1f96e6b8310476893c7c76a81b", + "bytes": 85789 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00021-datablock-Screen.blend", + "sha256": "0975c534e78b6a05c7c10adc7313cb611a3350cc3c7f6e9bfd4013c334b9f376", + "bytes": 85718 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00022-datablock-Sound.blend", + "sha256": "42785a635a7ac560a01e00135555c31e20a60c454ffb62a466da25ddbe3b5c39", + "bytes": 85859 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00023-datablock-Speaker.blend", + "sha256": "6e422e16f6e020af7ab0a6f3fad3c721b42c924c8a0392bc98546c3f39ee9d23", + "bytes": 85935 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00024-datablock-Text.blend", + "sha256": "7999f758dfbf7b5984f16464d1e5346d806c54c83ca68a583df54942c5e3b7d3", + "bytes": 85906 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00025-datablock-Texture.blend", + "sha256": "482857e3b3868f7d4dc87d9b53c5552d10d608ed26a301cc5a6a080b275651c2", + "bytes": 85833 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00026-datablock-Volume.blend", + "sha256": "725ee2ac502aec3ffe6fc91bcaaf9ce1c8225dc71b3162b10db8d598bed0b8d0", + "bytes": 85843 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00027-datablock-WindowManager.blend", + "sha256": "88052ddeb5b8e35ce537910d9ce3b005b92c58b001f9b74a369a3c854ccebb23", + "bytes": 85714 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00028-datablock-WorkSpace.blend", + "sha256": "fbb4fc85b46a30dd8913e5d2d75b73688cef1a3f64861337c7fbd94a687c87df", + "bytes": 85705 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00029-datablock-World.blend", + "sha256": "33501247b59cec137aa857b0bd4ea59526f30bb3632de9996e6026d4bd3f0401", + "bytes": 86353 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00030-modifier-ARMATURE.blend", + "sha256": "4725dda93e7bece9fb121a5cf91856c43ac043a598c038b297eef8aad95d2552", + "bytes": 86858 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00031-modifier-ARRAY.blend", + "sha256": "ff8619e63a5611dbc78599f849d27f0e4e2dc3c1c5849e9db86349e00106c23b", + "bytes": 87078 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00032-modifier-BEVEL.blend", + "sha256": "3a27883c1faf12a8a0281b7c0e9747915784138efb24c0f1680b525cd50b84c7", + "bytes": 86569 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00033-modifier-BOOLEAN.blend", + "sha256": "ea909948fb2b92f288684886a3d488f74a707108dc94778e9a78a6cb082cbe38", + "bytes": 86903 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00034-modifier-BUILD.blend", + "sha256": "46b05aed641ab8cd6cc280587cf9672223190c2b730af8d8c21f1cf98cb68901", + "bytes": 86383 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00035-modifier-CAST.blend", + "sha256": "7dfe1faa6b605f6bd394f07c4da96a3e70401eeedd00714b3dbf533d0100ed4e", + "bytes": 86512 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00036-modifier-CLOTH.blend", + "sha256": "c2da02610f891f4de38f3b8d55929a599c84528d3c67317a8e698854367d2d74", + "bytes": 86552 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00037-modifier-COLLISION.blend", + "sha256": "20cd128c83e9729377864f496c85393a2090c72a22f7d1c0b15f834293100764", + "bytes": 86434 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00038-modifier-CORRECTIVE_SMOOTH.blend", + "sha256": "059890c5b228851c6e32643e71a142523cb1c0f02726a72902a6b88e24e71fbf", + "bytes": 86517 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00039-modifier-CURVE.blend", + "sha256": "b68aa51151cf19b1795701967eb1fa514387c04b967c646547ed33a727a8a58a", + "bytes": 86516 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00040-modifier-DATA_TRANSFER.blend", + "sha256": "5cbcab6db651f6b44387e6688cf02a8813aeeccb07e6fdc5fbb6e4ac34da050b", + "bytes": 86540 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00041-modifier-DECIMATE.blend", + "sha256": "24161163630d29eedb3dd194070dff9b5a4f762f8a0ce4889b9e6a5310e54153", + "bytes": 86540 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00042-modifier-DISPLACE.blend", + "sha256": "d6314c42a4bccfe4ff125bf19570bd8b52eb196f3cd3dfc82fcad21a5390ba76", + "bytes": 86522 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00043-modifier-DYNAMIC_PAINT.blend", + "sha256": "f715974fc528ade28e3658a9468a36ba2ac8605f009c284ada97de3dec5091f1", + "bytes": 86512 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00044-modifier-EDGE_SPLIT.blend", + "sha256": "825b593e3792dbb69379ae5d83713226fe8818317c1b68285a19e9070bd76bae", + "bytes": 86521 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00045-modifier-EXPLODE.blend", + "sha256": "f05a2ee7c15544e1b39de2a35fd6eee19a31deb821ca56fc642418c939e28b12", + "bytes": 86513 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00046-modifier-FLUID.blend", + "sha256": "e5061df121df88e723c87360ab0ccef630ada11c31183f11d6ee17114ad70690", + "bytes": 86520 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00047-modifier-GREASE_PENCIL_ARMATURE.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00048-modifier-GREASE_PENCIL_ARRAY.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00049-modifier-GREASE_PENCIL_BUILD.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00050-modifier-GREASE_PENCIL_COLOR.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00051-modifier-GREASE_PENCIL_DASH.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00052-modifier-GREASE_PENCIL_ENVELOPE.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00053-modifier-GREASE_PENCIL_HOOK.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00054-modifier-GREASE_PENCIL_LATTICE.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00055-modifier-GREASE_PENCIL_LENGTH.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00056-modifier-GREASE_PENCIL_MIRROR.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00057-modifier-GREASE_PENCIL_MULTIPLY.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00058-modifier-GREASE_PENCIL_NOISE.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00059-modifier-GREASE_PENCIL_OFFSET.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00060-modifier-GREASE_PENCIL_OPACITY.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00061-modifier-GREASE_PENCIL_OUTLINE.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00062-modifier-GREASE_PENCIL_SHRINKWRAP.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00063-modifier-GREASE_PENCIL_SIMPLIFY.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00064-modifier-GREASE_PENCIL_SMOOTH.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00065-modifier-GREASE_PENCIL_SUBDIV.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00066-modifier-GREASE_PENCIL_TEXTURE.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00067-modifier-GREASE_PENCIL_THICKNESS.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00068-modifier-GREASE_PENCIL_TIME.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00069-modifier-GREASE_PENCIL_TINT.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00070-modifier-GREASE_PENCIL_VERTEX_WEIGHT_ANGLE.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00071-modifier-GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00072-modifier-HOOK.blend", + "sha256": "9fee2803c1400f07d4a58fb05a708b8e5bdf878820d636c57cecbb6deda9adec", + "bytes": 86521 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00073-modifier-LAPLACIANDEFORM.blend", + "sha256": "d4a01fc520b4641442f56506a5a320d4c4efee57fcec779021cc10d17d62e1e0", + "bytes": 86523 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00074-modifier-LAPLACIANSMOOTH.blend", + "sha256": "0f1ff155e600a04f0a717584716ae1ca5811ed9642354494a26c2a8d90590b99", + "bytes": 86545 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00075-modifier-LATTICE.blend", + "sha256": "907149629b82fb0289da70535b29cea8bae0b24d745b92c0d4116a3a24b95494", + "bytes": 86504 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00076-modifier-LINEART.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00077-modifier-MASK.blend", + "sha256": "62d3740eb3c43d79fa8018e992d0f21dc1b0efac5f8e41965a9564e0c765deee", + "bytes": 86507 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00078-modifier-MESH_CACHE.blend", + "sha256": "7c381314e4b8c95aa2b01acbd2f8ec0664bb27264dd6c6dd6456602adc42f6e8", + "bytes": 86412 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00079-modifier-MESH_DEFORM.blend", + "sha256": "91d67a1b79c80b452e0637bc515030c8d8a2bb23d88399029ca57160f7facf20", + "bytes": 86406 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00080-modifier-MESH_SEQUENCE_CACHE.blend", + "sha256": "817ed4b1a395d83b8166c84206f6dd7fef22a7c1dd8b62f85414125f4a5a927b", + "bytes": 86419 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00081-modifier-MESH_TO_VOLUME.blend", + "sha256": "52ab00ddd22c609f59f06c3747700b17f5b970ee4980dd287076446d289439db", + "bytes": 86084 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00082-modifier-MIRROR.blend", + "sha256": "0ef4742c3f30a3bbb59cd1924e99d22f57454c77e625c9ccb4ecd802559d8842", + "bytes": 86417 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00083-modifier-MULTIRES.blend", + "sha256": "6cad4d91397b06ba4779ad5336056e7551774c4f96261f2e8d3dd729c81b7b52", + "bytes": 86396 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00084-modifier-NODES.blend", + "sha256": "b8e7982ab3969a297ff8337fcdf966004e845189a2dfe5480ea60aecca3493b7", + "bytes": 86398 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00085-modifier-NORMAL_EDIT.blend", + "sha256": "e0d6b77f0bc97f682534efce4c0901a056bf5d9a104525e634c53284ddd858aa", + "bytes": 86406 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00086-modifier-OCEAN.blend", + "sha256": "1b6a43508676777d94770f3fbbee33161a578ed93ad7054bed48ff91a96ecae1", + "bytes": 86471 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00087-modifier-PARTICLE_INSTANCE.blend", + "sha256": "d4f4667cac6061406c5a7bf8231fdaf9e6ee589ee57d168b21fa9347f90395da", + "bytes": 86412 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00088-modifier-PARTICLE_SYSTEM.blend", + "sha256": "b0e15d7d4821cd9b60e977686142f7bf26c197c6f76c31c59d5dbe06fa5316bf", + "bytes": 86762 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00089-modifier-REMESH.blend", + "sha256": "6cf821a751ef19f4719d29a7c73c3d5acefcb381c5d8afb61673ca4ec068a70e", + "bytes": 86403 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00090-modifier-SCREW.blend", + "sha256": "3cfe313b349aff539f46496c520b04696842252655f8d15230c9a7b24b857d2c", + "bytes": 86396 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00091-modifier-SHRINKWRAP.blend", + "sha256": "05047e750c6b03b39ac18a3090e450960092ed0ab03a61b649ca11c0a0b5aa85", + "bytes": 86404 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00092-modifier-SIMPLE_DEFORM.blend", + "sha256": "3be9ab1afb8c518382aa329797e0a4b7369ab7f01cab6fec1481fcda187062af", + "bytes": 86407 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00093-modifier-SKIN.blend", + "sha256": "e24d021bdb48b6a17945b1b6c6a1933ab3a9fabd321775f5bf0313bc6e7797f3", + "bytes": 86438 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00094-modifier-SMOOTH.blend", + "sha256": "2e416d62faeeb22313d56ba073cb184618f80b751cf31f100ce8e0c78565de02", + "bytes": 86496 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00095-modifier-SOFT_BODY.blend", + "sha256": "2bfd58334380f70c1309ebfd00c092c531bb7b3921620e799c57752c7ee5596f", + "bytes": 86559 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00096-modifier-SOLIDIFY.blend", + "sha256": "0b319df9e6c4f677728af992114196e4fa29f80effabc01b3dbfd639bc2b66d5", + "bytes": 86420 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00097-modifier-SUBSURF.blend", + "sha256": "f0c3e9801b4138c3701599e24242374dbb6217f223e2decc7c04d5558094108a", + "bytes": 86391 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00098-modifier-SURFACE.blend", + "sha256": "41aa335359773ce72a3f372784d1fbf74a1ec65c077652f0cb98d34793edc937", + "bytes": 86387 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00099-modifier-SURFACE_DEFORM.blend", + "sha256": "cb459101d9ecdd4e5761a3e216dcf3eda99a09eaad5642573ef0ba0b4c063072", + "bytes": 86421 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00100-modifier-TRIANGULATE.blend", + "sha256": "4475c06ab20bc9f9f771556173e7d5782049548dfcb845e7febba79c27f5ffcf", + "bytes": 86387 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00101-modifier-UV_PROJECT.blend", + "sha256": "e5cf137ee1feddf7b03f287b04299a7a78177b58e63545ccca15c78f202ce2a4", + "bytes": 86395 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00102-modifier-UV_WARP.blend", + "sha256": "ad3f2ba8f4d282b2333fc192f3e2fdc598c06125f3b14c9c47b4721f9a1a0df9", + "bytes": 86398 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00103-modifier-VERTEX_WEIGHT_EDIT.blend", + "sha256": "2ecafafb8d81c27842512406dd93978754f624f0e9012e4a2036d32eac1178b2", + "bytes": 86454 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00104-modifier-VERTEX_WEIGHT_MIX.blend", + "sha256": "19a164b591a6fbe02df07797c422aea350e26f1e9125589037067f609095105a", + "bytes": 86411 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00105-modifier-VERTEX_WEIGHT_PROXIMITY.blend", + "sha256": "53234cfd0e10e91b78465d8f18a4b8d863885d1d93c0757c07f0d31da486fbf2", + "bytes": 86460 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00106-modifier-VOLUME_DISPLACE.blend", + "sha256": "95a922b90fb5bce90cb2f7995761805709a4a18b9206fab7f30e3848160b2c95", + "bytes": 86077 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00107-modifier-VOLUME_TO_MESH.blend", + "sha256": "fab68f64a3d9bbf1b224393518bc43a454601eabf8d936020aee5b478012356f", + "bytes": 86415 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00108-modifier-WARP.blend", + "sha256": "a328ef4b4cbcf265de0483012f80860fccb75e53fcb25bd6ccbe81dc97cb0ba5", + "bytes": 86403 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00109-modifier-WAVE.blend", + "sha256": "41c81c36b176656e08a33c9c428da5a257c11ab6e9f0f8bfa530336b7ab159a8", + "bytes": 86396 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00110-modifier-WEIGHTED_NORMAL.blend", + "sha256": "26469e905bbc2c52467b4b1361f80ffb75b756206974724debbae5e06fd363f0", + "bytes": 86410 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00111-modifier-WELD.blend", + "sha256": "fa82df1cc06f762f90acfd62c6172c631534838342d971e2ecba931d9bbb4b14", + "bytes": 86394 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00112-modifier-WIREFRAME.blend", + "sha256": "b1952474708ab9f56145f661b3cf5562dc0535a5fa0fe6903c71864af73b0641", + "bytes": 86399 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00113-operator-action.bake_keys.blend", + "sha256": "6253d0f8f008dcf8881bae4326d09648d21977a844c0f604c1a4773ef8372931", + "bytes": 86996 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00114-operator-action.clean.blend", + "sha256": "edd9074159f387a456bc1eb7bb37053fa63038532b928de849378fdcaab9d3e4", + "bytes": 86804 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00115-operator-action.clickselect.blend", + "sha256": "862548b70dd61ae3a132854a495648a2e265df2997054cadd1160e135ec3f059", + "bytes": 87093 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00116-operator-action.copy.blend", + "sha256": "d291508ed19a9ba575908253a13310eab58dffa168cf07b401816f2ffd6a5448", + "bytes": 87090 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00117-operator-action.delete.blend", + "sha256": "5112a074973e086eb2eaa00e604786dc2d7b8dffb1691de800c9dde97592de78", + "bytes": 86816 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00118-operator-action.duplicate.blend", + "sha256": "090e668d61cbdf9a9618c3f592e8337b1776386ab71dda115aacd3591e5a2718", + "bytes": 86896 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00119-operator-action.duplicate_move.blend", + "sha256": "1a40c2e579708731f99bd4f25d255acb3be51431c86fe19d89f741043e4dc085", + "bytes": 86906 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00120-operator-action.easing_type.blend", + "sha256": "828206cdfd525388464e7ec281a9968c96a7add8cca8db275641031e14627caa", + "bytes": 86877 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00121-operator-action.extrapolation_type.blend", + "sha256": "39c4559926b71ed7b364b6f618c6b19c215d23031b994460d0180537879ff10f", + "bytes": 86924 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00122-operator-action.frame_jump.blend", + "sha256": "332f117de8b826abb0d044715daa2d01a203b03080c61aaed7671ef67fa2da44", + "bytes": 86875 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00123-operator-action.handle_type.blend", + "sha256": "69281e445ba7741ce639dc98bf115e265e52bdb4900d82de9b25c70e6cd9d42e", + "bytes": 86907 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00124-operator-action.interpolation_type.blend", + "sha256": "b05e3fe799dd077db20569b98a6849800e4d8e5b1b95b2018ccef70f3d2e77ca", + "bytes": 86881 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00125-operator-action.keyframe_insert.blend", + "sha256": "0ff15cd87241927e76bbcfdfdc6048238467b3e09d2e9d304d14b3858f2d95a7", + "bytes": 86896 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00126-operator-action.keyframe_type.blend", + "sha256": "a99bcef879a29da4f423a3efc67ab5f497beef3927ad2e65fcb9ae556826a81a", + "bytes": 86863 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00127-operator-action.markers_make_local.blend", + "sha256": "767f97663e2fd45d8491b1bf8cea0a9a628faa9f4b14993d65953e90f27d7a12", + "bytes": 86876 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00128-operator-action.mirror.blend", + "sha256": "92ab7f13ff0f250d0c173bc3db5d21fedab4bfa7ff4b70c66b4f12af5039a8e5", + "bytes": 86910 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00129-operator-action.new.blend", + "sha256": "9d189452cbc1e0cf6c87093f7fb6ffc8728def0ac3bc976a4a3be814d42f10e5", + "bytes": 87114 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00130-operator-action.paste.blend", + "sha256": "fc332fb6c877fb7a39fb418416168cce6637befba392dafb8b18ca17fb2b66c1", + "bytes": 86900 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00131-operator-action.previewrange_set.blend", + "sha256": "8b0222547b3e31480dede4804353edd4d056cc806ad2cede24c73e81070bb9b6", + "bytes": 86898 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00132-operator-action.push_down.blend", + "sha256": "e3e933bfc5595d288a5ab2e2f0e661d76474aff88b33d0acc62f7e540757e2e9", + "bytes": 86944 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00133-operator-action.select_all.blend", + "sha256": "f7ebc1bb7b45d6838d6e2bdccc809f2142a70cb3a9c9ecabcc5e1b5a91426526", + "bytes": 86850 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00134-operator-action.select_box.blend", + "sha256": "100744edae87b08ef300ae23ae4a5556dd6576f1a5d30630967475736e3a4ba8", + "bytes": 86871 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00135-operator-action.select_by_type.blend", + "sha256": "3069eba61f2bdfa1c772afc62c075a06a95a803888b4213078d6dd1a68aa6bf5", + "bytes": 86891 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00136-operator-action.select_circle.blend", + "sha256": "16ae2413cd86d4fa8df384ef1e2d167c4e79caa48114b5b12facd33e1ca37b8b", + "bytes": 86883 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00137-operator-action.select_column.blend", + "sha256": "01b13092985f0c672a5ac639ce1e556caf8c405ed3574249b0c4680aedecdc27", + "bytes": 86891 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00138-operator-action.select_lasso.blend", + "sha256": "d3ef22466ef1615aeb2f96ffbb70e8a2a13ca7ce9de7fac91e75101ab01415de", + "bytes": 86894 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00139-operator-action.select_leftright.blend", + "sha256": "ed6f8c69f70b5dcef868fffc9381395c7884401bbe24fdd8d9984557284e66c9", + "bytes": 86867 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00140-operator-action.select_less.blend", + "sha256": "3acc7908b362f9c224e825c5429b59d549a77dab4e2b45b285221e5c54fa0c2b", + "bytes": 86865 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00141-operator-action.select_linked.blend", + "sha256": "62ddf7e0141f7bf5b0bfbf85b8faa0cb0ae602681f70e2c5e979db033b14056f", + "bytes": 86861 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00142-operator-action.select_more.blend", + "sha256": "9f0a3fad228c1a7200cd9ac76af24fb8a853dd261f49ef2186491690713ec726", + "bytes": 86855 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00143-operator-action.snap.blend", + "sha256": "d12a490f3d76a0b599f4fdffbb2dd65e01d0c637a2de6bbe78a44b887676995a", + "bytes": 86847 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00144-operator-action.stash.blend", + "sha256": "7d617c7e82a5673eedd2f48178a5991066a276a2c149f7be92c5f5975adc4234", + "bytes": 86955 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00145-operator-action.stash_and_create.blend", + "sha256": "f7b2dc080c9aa23cc45b9a2c59114f23ce3f1369f00618c9ef51569516692f38", + "bytes": 87002 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00146-operator-action.unlink.blend", + "sha256": "80d5a85825c441b1835e82af730df148dd664fbae988aabb9aab6e74ac605f11", + "bytes": 86881 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00147-operator-action.view_all.blend", + "sha256": "ef2a4fd9a28a6a97d40b258beb11f8e00899c4715e0ba6e0703a25aecd678ec5", + "bytes": 86846 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00148-operator-action.view_frame.blend", + "sha256": "142f7036c4c1a196ae0affc43fd62d6a196576898ee969f9aa83655917e0960c", + "bytes": 87098 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00149-operator-action.view_selected.blend", + "sha256": "108a69ae276722c4d9396deb51f7f1909799d48ce310d82675305a59b1196fc7", + "bytes": 87111 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00150-operator-anim.change_frame.blend", + "sha256": "04ba48b6b81449b47cd8c038a012518f773dbfbe542ec29861686cf9a1a0cedb", + "bytes": 87111 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00151-operator-anim.channel_select_keys.blend", + "sha256": "f8ed4706c765c28e850c752bf4fc367b815c298b574cbed741997a5770826b43", + "bytes": 87099 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00152-operator-anim.channel_view_pick.blend", + "sha256": "e3a0c3158f43b96f05006d54b451614754d0fca9a07fbcc3b1c9cc3a4e076d29", + "bytes": 87117 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00153-operator-anim.channels_bake.blend", + "sha256": "1818a2a90d3eea5b38ad4d6e3cb1bd0394022ca62a8384734cefc36305d884eb", + "bytes": 87182 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00154-operator-anim.channels_clean_empty.blend", + "sha256": "8e1c2b7578c3679a5c1ad63aef3a621f7a6f8c486598c936076a81fc19728c7a", + "bytes": 87446 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00155-operator-anim.channels_click.blend", + "sha256": "6ebd45981b70fb1a915008d4fa4d8c574b02bf5440b49e93e16792b819a721e5", + "bytes": 87124 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00156-operator-anim.channels_collapse.blend", + "sha256": "6b6c488604fa8dd8ec8e79f97961a4e74f6ca673a14658dd890a0b85e18a4dc9", + "bytes": 87090 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00157-operator-anim.channels_delete.blend", + "sha256": "c5355b82bb3ce08f8a55d436eb47e2e8cd49711c6518e016c13345c5a8683876", + "bytes": 86834 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00158-operator-anim.channels_editable_toggle.blend", + "sha256": "6a983e51050eb6a6b8300c153216a37d61a16e20c09716405c6d9a96912a612f", + "bytes": 87112 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00159-operator-anim.channels_expand.blend", + "sha256": "7e8658f9238b0cfbb08775388cddf2f7e453c6a2683fe908974b0dd55a852ca7", + "bytes": 87114 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00160-operator-anim.channels_fcurves_enable.blend", + "sha256": "091c8bd8ceb6206cd7ef7f5d8cac03dd4ee554c4ec13f588e8b9ef5933c24ebf", + "bytes": 87103 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00161-operator-anim.channels_group.blend", + "sha256": "dfa3cbf7b6511926f549134cfd157e2c4350d9f2f4fa5c30dc01ada3dc071cea", + "bytes": 87091 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00162-operator-anim.channels_move.blend", + "sha256": "d75500ad33614d2ebe9cf705757971cb76556ae18b77b1064e13420f514f41ea", + "bytes": 87080 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00163-operator-anim.channels_rename.blend", + "sha256": "e26a89d3f532f3bbcb62036d20a5c6eb82331591cb7db7e3202a750870087e24", + "bytes": 87123 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00164-operator-anim.channels_select_all.blend", + "sha256": "8931b05c45cbe7109d5c14fff6b753ab6cea2042bbdfa86dcadb0ae8762aa0fc", + "bytes": 87114 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00165-operator-anim.channels_select_box.blend", + "sha256": "3f11ff84cbe69116b6b008b9c5d12f35e7796c2f571776f33025bb068ab46ccc", + "bytes": 87102 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00166-operator-anim.channels_select_filter.blend", + "sha256": "2d21685dd8ae6ad9658d1ee910acb36645d3cea7c6bf0f674b8437790d0df727", + "bytes": 87110 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00167-operator-anim.channels_setting_disable.blend", + "sha256": "849ad29b595845b1f7f17dbfab50adc616dcbe0e47c1e57d5238e32e84a3a7b5", + "bytes": 87116 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00168-operator-anim.channels_setting_enable.blend", + "sha256": "7bc30ee108b1f7f9ec5422ac855b1467a8231336cfb67d47898ea6f27618aed6", + "bytes": 87113 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00169-operator-anim.channels_setting_toggle.blend", + "sha256": "f346c3480ca423d8174798cf97020fe0e6659d54c5c21fff1b5028b159143560", + "bytes": 87107 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00170-operator-anim.channels_ungroup.blend", + "sha256": "edc38bf325e129aa9dc1ff8f1563aef552eff06acb64d3f1dcd539277db18b6b", + "bytes": 87064 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00171-operator-anim.channels_view_selected.blend", + "sha256": "31ea53097e3624a267b733b2d07c768aaf588d72c87268b7e5980371dfcb57ae", + "bytes": 87134 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00172-operator-anim.clear_useless_actions.blend", + "sha256": "f5467c45c551de275b2a97c813b82fc8cf2dd5ae4fe93a5a3f07dd22bd4a8b79", + "bytes": 87523 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00173-operator-anim.copy_driver_button.blend", + "sha256": "473f5f6ddb99f8244bb9218bf3bf9a5f7b9b6e23847bdd546c22427e904de84e", + "bytes": 86616 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00174-operator-anim.driver_button_add.blend", + "sha256": "088331e435e3f43c0db5077f2fff300f381db761076ceaa922f21ec599041221", + "bytes": 86672 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00175-operator-anim.driver_button_edit.blend", + "sha256": "40ee0435bc330c7d1baa8d40150f2cc4f62ec4cfd195cce2e0e73ad006f7131a", + "bytes": 86619 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00176-operator-anim.driver_button_remove.blend", + "sha256": "292203abee32979f8fcc7568b78e66846d5d6280c194fcfa5c7be56170247012", + "bytes": 86464 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00177-operator-anim.end_frame_set.blend", + "sha256": "b86b4daff038a40e597d1814a021c28fe6cb65e09fb7cfc9ee7bc59f665d9809", + "bytes": 85580 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00178-operator-anim.keyframe_clear_button.blend", + "sha256": "75aa5f056fc9afe3562ad101a7f3b8aacf93ad54fae06519b236b5fc345831b6", + "bytes": 86642 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00179-operator-anim.keyframe_clear_v3d.blend", + "sha256": "0e079b73025f3623872e92c1e961e012cbcfaff4a64b2c7741a2ff08c935afdd", + "bytes": 86603 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00180-operator-anim.keyframe_clear_vse.blend", + "sha256": "e2ef76b206578af5a77919d7f9625ca76ec58bb0a5d9074f907ced31cdd96c4d", + "bytes": 86461 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00181-operator-anim.keyframe_delete.blend", + "sha256": "0d6d1e45f430c051e4ecaf1f799f4b7666fa8311e2abf188502cf9cdc0011855", + "bytes": 86782 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00182-operator-anim.keyframe_delete_button.blend", + "sha256": "8e62660db44872553a7f32f5965afe7811e69261425beba97e6e29cdd5575073", + "bytes": 86755 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00183-operator-anim.keyframe_delete_by_name.blend", + "sha256": "ea5a587aeeabd6692977d5a7660bf49bb7134d4fc81e8ff1a3fa9acd8a75026c", + "bytes": 86770 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00184-operator-anim.keyframe_delete_v3d.blend", + "sha256": "56cc035995506dfa6c68efced79708c11dc50a20ac3d0e7e9ee59fe29e741995", + "bytes": 86712 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00185-operator-anim.keyframe_delete_vse.blend", + "sha256": "c01f342471fcae64138f95287363f0e801c4da96992aa4a3d8a4173b0ec0f464", + "bytes": 86629 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00186-operator-anim.keyframe_insert.blend", + "sha256": "582dfb8c8dfe6897937afa687d5ebfdb4aeb2e3ae7db73ed02cf6385745bbf70", + "bytes": 86814 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00187-operator-anim.keyframe_insert_button.blend", + "sha256": "5398394b340d509043a2e8130249dbbb0736fa540c833a303445c07c9f775e9a", + "bytes": 86812 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00188-operator-anim.keyframe_insert_by_name.blend", + "sha256": "b0be38528561fad722c52000ced9b4c44bff594d5fcf134ab89295ab8b97554d", + "bytes": 86813 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00189-operator-anim.keyframe_insert_menu.blend", + "sha256": "8c34e11c10c2de3de7209006c87594db1a1df0b62a6f9b92dac45f2cb176a52f", + "bytes": 86801 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00190-operator-anim.keying_set_active_set.blend", + "sha256": "54d342c6054339281d8d380e01eb64f038e4735626a69248de66fadee34fbcae", + "bytes": 86889 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00191-operator-anim.keying_set_add.blend", + "sha256": "a87db22a399c85cb282baf65a58763df7656603df9571bc34cdece31ef439187", + "bytes": 86785 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00192-operator-anim.keying_set_export.blend", + "sha256": "ff0342e9d493bc8b20d85acba9177c7115d77f5f515e1d70fc1caf056957c29f", + "bytes": 86891 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00193-operator-anim.keying_set_path_add.blend", + "sha256": "4e14a61ca8cd86b528747d576aa89ff8dcd3c9d3b8f52625a46ff5b7594cc107", + "bytes": 86860 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00194-operator-anim.keying_set_path_remove.blend", + "sha256": "b1161cfd0ac095844825cb2fa19fcbe9819bce552d02535f2d32deef3c8cbb79", + "bytes": 86865 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00195-operator-anim.keying_set_remove.blend", + "sha256": "d4fa5993c2580e5521cf2ee66817c416f50de82f5ec4e32298e52db14fa0a9a9", + "bytes": 86811 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00196-operator-anim.keyingset_button_add.blend", + "sha256": "2e49572a29dadcdfdae956f7e16bd465c5de06bf8ae94ebdc11da8b1821eb562", + "bytes": 86863 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00197-operator-anim.keyingset_button_remove.blend", + "sha256": "21b52146f8466fb9fd9ca9073d611b6052f7cbb89399b926d8db6e950883e61d", + "bytes": 86831 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00198-operator-anim.merge_animation.blend", + "sha256": "0c37b1290f08b1ad872efdf8a52c795d24778a1ecab516ea749ff2ae858bd2fb", + "bytes": 87247 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00199-operator-anim.paste_driver_button.blend", + "sha256": "971782396db424a9b427f7fb9d9d1495ddc572a2ae1bf7b7b8c3320f5d8d77d9", + "bytes": 86601 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00200-operator-anim.previewrange_clear.blend", + "sha256": "c9b586fb0a87f38c4fb1e4e1834805fda1345549ecdc558702080ea66af65a9e", + "bytes": 86336 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00201-operator-anim.previewrange_set.blend", + "sha256": "91d61fe3989324a23db7dabbb178c7b0a963af155c117c57859a24e4c415945e", + "bytes": 86352 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00202-operator-anim.replace_action.blend", + "sha256": "f29c88ecc031b1a56c68cea244417035bf8744db5baaab623627e6dab889f956", + "bytes": 87690 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00203-operator-anim.replace_action_new.blend", + "sha256": "dd278ab743c34b61566c20e545b90e42bcfe641ecbb523550fcdacea188f12b4", + "bytes": 87267 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00204-operator-anim.scene_range_frame.blend", + "sha256": "aa332513c910b461ea53db9c6f8c6de2801c7b79bc84c083c366360aec2a36dd", + "bytes": 85932 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00205-operator-anim.separate_slots.blend", + "sha256": "55c92c2622d2b532060fae13fc9fc035b8d936f21ff766b6b49938632140fd82", + "bytes": 87353 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00206-operator-anim.slot_channels_move_to_new_action.blend", + "sha256": "4dddfa7e19686d28ea2e6918bb7221943ea26a4ba8831d7fef0736ee8fd52534", + "bytes": 87458 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00207-operator-anim.slot_new_for_id.blend", + "sha256": "55feef5fa86ba311964057b6fa5b24b5362fa7c2fc9ab061736c4fec6927a532", + "bytes": 86860 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00208-operator-anim.slot_unassign_from_constraint.blend", + "sha256": "517bba0bc6e4dfab4eeafc9d902de560b76360718789a06a6417d9e9f8be7df9", + "bytes": 86531 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00209-operator-anim.slot_unassign_from_id.blend", + "sha256": "69fb5253dfd28f45ea25f29947d08afb4513e222105b4b8bc94a5b6be05b7238", + "bytes": 86803 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00210-operator-anim.slot_unassign_from_nla_strip.blend", + "sha256": "4740a95b74bf2d4f71af7019158ee116643bf6cb315ff6a31717fb6894c3f2e5", + "bytes": 86885 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00211-operator-anim.start_frame_set.blend", + "sha256": "d2f5cf3f5c3603b0d811c9df3581c10b5c28e3f80adeb30319b079bd95567a36", + "bytes": 85586 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00212-operator-anim.update_animated_transform_constraints.blend", + "sha256": "116684a811bdc591c554c5a8f259d995ca9ba49b102e8ccb79f1a03741fd28f2", + "bytes": 86923 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00213-operator-anim.version_bone_hide_property.blend", + "sha256": "5455d4f3f44ccc40db7ac379d5c6d4bbb099c3861a348237a1541697597956c1", + "bytes": 86812 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00214-operator-anim.view_curve_in_graph_editor.blend", + "sha256": "405825a29d3bf69cd85e461bf0c1a727631febe354b11ed1fd722d72f0faaea2", + "bytes": 87074 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00215-operator-armature.align.blend", + "sha256": "772ad751d2ad898214e27469c451ab44ce0463bb99271b160b70f57941e9b419", + "bytes": 86317 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00216-operator-armature.assign_to_collection.blend", + "sha256": "be79a2c05b090aaf1e7ce9f777a6adea68b5fb6b7750ffe130eebf2ab4608b43", + "bytes": 86423 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00217-operator-armature.autoside_names.blend", + "sha256": "9dafd4489858ab080988c474877d6e9a9e5a7884b8e00d42c070b7769d2ed57f", + "bytes": 86309 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00218-operator-armature.bone_primitive_add.blend", + "sha256": "b6857f1212fd591bc78dea3451ee38da3547a3415c32637f974c8187bfd28f73", + "bytes": 86250 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00219-operator-armature.calculate_roll.blend", + "sha256": "7c6f851456147c2e69de3ddf1136885ccff9bd907cd480a5af5fd81f5769c862", + "bytes": 86240 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00220-operator-armature.click_extrude.blend", + "sha256": "7b9ded05ba9a6bb02b729ef474ec3f37a67f41fa0e8da53c7e3c58a56b64e065", + "bytes": 86415 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00221-operator-armature.collection_add.blend", + "sha256": "a081193e2c16de9c072b0b7cc57f9d7b5f3f12863fcb2f06e16641cebdcf0b34", + "bytes": 86279 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00222-operator-armature.collection_assign.blend", + "sha256": "c742316be6dbd00fe3d5caf804b41067839a344a0725fe3c3aa78d1ebc024b8a", + "bytes": 86283 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00223-operator-armature.collection_create_and_assign.blend", + "sha256": "a028eb51fe9f4e81778cd5e237820c050c88588266cb39cd2a0fb4b15d33c8c8", + "bytes": 86294 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00224-operator-armature.collection_deselect.blend", + "sha256": "1a8405355bb6fda930f31f396f9e34ec97c95ceed4b639fce9522c1e82f73b7f", + "bytes": 86420 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00225-operator-armature.collection_move.blend", + "sha256": "ae87b298fce55732961119fd8a36568c137023eed9002c26a9575578d3d983b5", + "bytes": 86467 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00226-operator-armature.collection_remove.blend", + "sha256": "1e3ba5e46b8b45ca974b93b0f357cc5305c787032564ecbecfc9e1ae4e8ff9d5", + "bytes": 86430 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00227-operator-armature.collection_remove_unused.blend", + "sha256": "0c898c98dc011e51f086cda66e3af03a08a7b1f27eb0e76f40915f18018a6d97", + "bytes": 86356 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00228-operator-armature.collection_select.blend", + "sha256": "426b86f668d316254e06ff11f6fe59cd79d99216772573d17b2b74187d3ea6ea", + "bytes": 86518 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00229-operator-armature.collection_show_all.blend", + "sha256": "b50107f0d15d2f0be497ea8f69385411f8354d04b1907e7e6382600d5e885795", + "bytes": 86447 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00230-operator-armature.collection_unassign.blend", + "sha256": "b1f942b4b3eb548ce6a4ebeb62fb295cea9ce038ef69a34d60d7c54a9c2c8882", + "bytes": 86283 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00231-operator-armature.collection_unassign_named.blend", + "sha256": "452747b1003c527ffa6538c8d0aa48957968f57d8b8d61451c3a43c59f88abb8", + "bytes": 86292 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00232-operator-armature.collection_unsolo_all.blend", + "sha256": "be849eaac644443d8db0318d176767a3f861ee0309b69aff2a130decbf56b21c", + "bytes": 86446 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00233-operator-armature.copy_bone_color_to_selected.blend", + "sha256": "d5ab14cabded3332b4c882c1eaee7f9966a41155d2623bc73f88917d0639634a", + "bytes": 86391 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00234-operator-armature.delete.blend", + "sha256": "52c3c28c6cba72d0b40c32bc46b4d5894482f05b2ee621e44efde6999008556e", + "bytes": 86269 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00235-operator-armature.dissolve.blend", + "sha256": "951ea935f05ed06ced6ea61d4a9293e7dd3226902ea6ae3c0c466779dcbcf24b", + "bytes": 86289 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00236-operator-armature.duplicate.blend", + "sha256": "fb0ddc4b599f05941c6d719be3eab14f354755017f574ca9e6984369474b42a8", + "bytes": 86362 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00237-operator-armature.duplicate_move.blend", + "sha256": "18332d833556dc395719a7badd2c2fe0f5630fa1f9b809399ae0ebb4edf47f19", + "bytes": 86393 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00238-operator-armature.duplicate_rename.blend", + "sha256": "95b9236be44ca3e40482203032ce2fe14a8ba79f5d94396d9fa7af2ab5b711d1", + "bytes": 86313 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00239-operator-armature.extrude.blend", + "sha256": "f4b86c585af6349dc43c50e23c93a482917145ba0b5bbd9ab3f8a7cf5018e661", + "bytes": 86358 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00240-operator-armature.extrude_forked.blend", + "sha256": "bf0a7def9d8ff9c30218d5f11a23f533b777bfb02e35b1bf87f0c9a285af637f", + "bytes": 86397 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00241-operator-armature.extrude_move.blend", + "sha256": "3959f29bfef358c9a7f10720605b9706bf03830f18ae713e4409b6396b3ea18c", + "bytes": 86364 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00242-operator-armature.fill.blend", + "sha256": "b7f20bcc4f7a6045bc38fdec9394872e399a55f3de9e4081b40dde3b911d770d", + "bytes": 86429 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00243-operator-armature.flip_names.blend", + "sha256": "b21a9ececf220be55c9d17d99c7fcbb0fe43b2fea6ffac88eb4eb34be1ebb5ba", + "bytes": 86395 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00244-operator-armature.hide.blend", + "sha256": "1a3486ca531e5f679886228539fc841d5afc7c9eb7315fb0d5f31061d5f26aa4", + "bytes": 86303 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00245-operator-armature.move_to_collection.blend", + "sha256": "81ce010acf7df4374101651e498eb1ef4fdbd31aa79e395fcab17667cea2d6ad", + "bytes": 86400 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00246-operator-armature.parent_clear.blend", + "sha256": "c6b8c2871a84389b732ff63c320e1e6543e832f69a89aa7af8cd0049fbee82f2", + "bytes": 86343 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00247-operator-armature.parent_set.blend", + "sha256": "227b3294c94147755638a6542955fd7a57ad2a6e6a7464bed2509eb7a5ab6b19", + "bytes": 86366 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00248-operator-armature.reveal.blend", + "sha256": "5f1ee7176f2d030247abb278a66f79cc6b7fc49fd6650b2dba7cc349e2b0aedb", + "bytes": 86308 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00249-operator-armature.roll_clear.blend", + "sha256": "74c3bebdac81def2d5dad922854b06c1c0b112154605a955628754bf5eb3cef7", + "bytes": 86204 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00250-operator-armature.select_all.blend", + "sha256": "5a271a11ec041966bbdb02724d632b1a1ec4db2207038fdbf3fffbd8c3d6de8d", + "bytes": 86286 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00251-operator-armature.select_hierarchy.blend", + "sha256": "527167dc4d5c40e18196b8b63818373494bf28efd9592ce1ee28b790aecad9c4", + "bytes": 86367 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00252-operator-armature.select_less.blend", + "sha256": "6c10d6a2bfb01565d415740efcb5366433cf1ddc722392605530769e6a8f729b", + "bytes": 86377 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00253-operator-armature.select_linked.blend", + "sha256": "dfc4b49ad0c1165e771368b99c7cf589890586ea4f6b142aa319a42ad9390316", + "bytes": 86468 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00254-operator-armature.select_linked_pick.blend", + "sha256": "10e4053f9aea2a2cad6314e3ab4d981db9bc4281933c1172ad77247f4c6500fd", + "bytes": 86478 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00255-operator-armature.select_mirror.blend", + "sha256": "af187a9ffb0c6b8f422fd0da0896699dcde8209c8d5d6fbf807ba72cc4a64abb", + "bytes": 86324 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00256-operator-armature.select_more.blend", + "sha256": "7acc23a6cf8bf14d13c3e1571106d62e3ddf8fcfd6af910009da833672ec6242", + "bytes": 86474 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00257-operator-armature.select_similar.blend", + "sha256": "72ed76cd6970d683de6c528a653e8279bdeec13f8f1a4a2e8bc9c8b2f63cf94b", + "bytes": 86368 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00258-operator-armature.separate.blend", + "sha256": "e995623dfaf3e5a34b4843beb5291f82144501d7a6f0b53a4ffada844440d269", + "bytes": 86391 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00259-operator-armature.shortest_path_pick.blend", + "sha256": "3b213642cef60cdc96fed3e14846125b06ca80b53d89fdb3a08c3c60f7a454c6", + "bytes": 86467 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00260-operator-armature.split.blend", + "sha256": "e5e2497024c8f9738caa5badff72f38130c061a2b27cfc610780bf0a97992b9d", + "bytes": 86342 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00261-operator-armature.subdivide.blend", + "sha256": "b29bcbddbc05f2ec1443699a9348abcbe52531f2fea5b03e51286ddb8305c2c4", + "bytes": 86372 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00262-operator-armature.switch_direction.blend", + "sha256": "385ebcd486385b6b68a7c7294e111af2b0f4d334247ff3e933f2c1433321cd17", + "bytes": 86409 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00263-operator-armature.symmetrize.blend", + "sha256": "fa490213eee2cd604d52d435cf446cdaa37ef882602147893c9f9f999cd43f2b", + "bytes": 86394 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00264-operator-asset.asset_download.blend", + "sha256": "79332080394950857a3b99087140aba51df6ad2fd731e314af67c473a48602b4", + "bytes": 85874 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00265-operator-asset.assets_download.blend", + "sha256": "d2c09f34febbef1db3de830c37c33c1f7de8d6fc7ea1ef2aaf9eed7de243bb27", + "bytes": 85879 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00266-operator-asset.assign_action.blend", + "sha256": "6cefa4e22e0e8d5b2482cbe62c36e10cc58f51fa94fe843e6b953c438479fa98", + "bytes": 86324 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00267-operator-asset.browse_containing_blend_file.blend", + "sha256": "29e5e42f3ebe458a4ded1d1a7a0a1cd0fecb50867b193ee3ec98485df36e7d61", + "bytes": 85938 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00268-operator-asset.bundle_install.blend", + "sha256": "64dd97ac23f70c83261635fc2337555b62818b92ffedee60cb13f3335851a994", + "bytes": 85884 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00269-operator-asset.catalog_delete.blend", + "sha256": "7fa8ebaf85c2bd474dcaa9e4ce94ad81665b501841d15c48e371bb8f033702a2", + "bytes": 85903 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00270-operator-asset.catalog_new.blend", + "sha256": "8c874d8ec51cb7cbfa787780ca7c8e636ce9a98b4998ef81ddbd9fdd34658662", + "bytes": 85912 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00271-operator-asset.catalog_redo.blend", + "sha256": "2e3481a9f155900774bbcc3e5d07ca65bedc2029e3281e86857fd943e81396cd", + "bytes": 85877 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00272-operator-asset.catalog_undo.blend", + "sha256": "fa003b726f82cf42dfbd5ae027ad6b6c8ff03bdcc337154d835cae241a1265cd", + "bytes": 85892 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00273-operator-asset.catalog_undo_push.blend", + "sha256": "f835a3088b975a283a99a69738dbf0ecc8a71b463b3c124da15ea6e54599256b", + "bytes": 85934 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00274-operator-asset.catalogs_save.blend", + "sha256": "7b8be4b5cc90415b7295fcd2ceb560761b6e0df2b17aff0e62a339c7e43dbab3", + "bytes": 85904 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapBrowseContaining.blend", + "sha256": "661f398dd346bc18484308b154845ca5d7d82af9e9e367767c2c1ef20f3fd369", + "bytes": 86346 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapBundleInstall.blend", + "sha256": "89537577e6e5939da73f37fb22d40ec336a30e7ad491043b4054b0b14e4418fe", + "bytes": 86339 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapCatalogDelete.blend", + "sha256": "137a558e0ac46a6b9c466b1023a871adb6666ec0de0f9756e041ce8858ed374d", + "bytes": 86329 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapCatalogNew.blend", + "sha256": "a12a6480d7254d290d0617e16f72c93ef4cbd043ebc004f94559436988a66ef2", + "bytes": 86327 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapCatalogRedo.blend", + "sha256": "53367b4765383ae0cf232e02eaca1fbf07407946a600c91cf8d1f5303e21d0c7", + "bytes": 86321 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapCatalogsSave.blend", + "sha256": "1036247ac5432b6d9f30bde8c080d470248ce2e840e5bdf7de7f08a64838204e", + "bytes": 86337 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapCatalogUndo.blend", + "sha256": "2ee954737c6f35b5f9af2eb5f350ea3e34a9ff6f491b8a4184ccb18875c6f3b8", + "bytes": 86329 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapCatalogUndoPush.blend", + "sha256": "448fdabd5281e25a949ceefdb0b76804f2a47d2d9e5b784f8f998f0be289fd4c", + "bytes": 86343 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapLibrary.blend", + "sha256": "1fe24e423713bc18dc936e723e97f7c306db4aa62cc24736055eb2d341375088", + "bytes": 86339 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M15-03A/next-task-plan.json", + "sha256": "2235d0d250d28e63ab1c9b0e956292560785cf340c612312b316be0ceb2463a9", + "bytes": 7095269 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00001/action-desktop-report.json", + "sha256": "f6bea0003a9e8eb25048797156bc0ab59b6a63d76ce4156283b6d9761dbfb0ee", + "bytes": 714 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00001/action-local-exact-report.json", + "sha256": "eb7a604af8b071c3186a39a30f3a9974a6fed03008751da5319d54d170b841d6", + "bytes": 735 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00002/armature-desktop-report.json", + "sha256": "970538d481dd9b2169c5e39e6901e6eeff0d9b2d26b42491837321841bcb4a5e", + "bytes": 853 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00002/armature-local-exact-report.json", + "sha256": "eeb775648b186a9728851b8cffa0fa9c41701de4a8142e73f6ad98ef050dc877", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00003/brush-desktop-report.json", + "sha256": "ca992c23e2c302ef0b85b91305eabdbf71da6b5bc60c49b71710d145d0787e09", + "bytes": 518 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00003/brush-local-exact-report.json", + "sha256": "e48dcad3974b94404d5d9f0c7222b6c45ea5f3b7a467ea2b88691a6ff50e22a6", + "bytes": 712 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00004/camera-desktop-report.json", + "sha256": "b11254b3e0cdeb5e5c39e350ea1d349f5e2991f8c62a5ad28f744c391beab3b5", + "bytes": 511 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00004/camera-local-exact-report.json", + "sha256": "a2b2c321efbcf2ed765f2e8b1019fef7e2cd34af872f78474d18594c6cee5d1c", + "bytes": 656 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00005/collection-desktop-report.json", + "sha256": "6e6bcf8e5575d46c324d51409d19be6f89e5397b1f094f528b164ea72c607887", + "bytes": 629 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00005/collection-local-exact-report.json", + "sha256": "2db40433007886b24f5ceb18dccf7470e0c393163838a11f2feb48bab516d740", + "bytes": 855 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00006/curve-desktop-report.json", + "sha256": "85e8eee37daea993653bfa1785f5df19f953c2d013543e8a27743ed74d49d4ff", + "bytes": 741 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00006/curve-local-exact-report.json", + "sha256": "048c9fb9116ab2a1b4460c74696340a263cd342ba4886ce56f8b03bef8743e58", + "bytes": 605 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00007/curves-desktop-report.json", + "sha256": "db15e64bfe202720b463ab742cbed2e6ec80b872456b825078afbba7a2540531", + "bytes": 444 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00007/curves-local-exact-report.json", + "sha256": "bf093708e23b8318e1f50b925b5c033d66aa8c1f97303174ad2489a82191705f", + "bytes": 568 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00008/freestyle-desktop-report.json", + "sha256": "2c42936cd8e4046b752f7e86949927769d1cb8f2086a2c9ba27eebf61a6f4a89", + "bytes": 670 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00008/freestyle-local-exact-report.json", + "sha256": "ab75a7fdfa71a4abd4a5e97f7e726440bde7891163c0b256be0815e1cc51a99a", + "bytes": 685 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00009/grease-pencil-desktop-report.json", + "sha256": "6a1145d7447a08f51d751dca797e67f2be7eb12cba052a726c4c2f8ee28b585e", + "bytes": 531 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00009/grease-pencil-local-exact-report.json", + "sha256": "94aaf84cc072ef13998517d610740d81d94c14593ba776ea7f4b88c673a0a71f", + "bytes": 584 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00010/lattice-desktop-report.json", + "sha256": "bb8effdcf18a89794914d88311a598b3285e64f18c402c9cff477ae5700ba089", + "bytes": 2496 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00010/lattice-local-exact-report.json", + "sha256": "489c9d25a6e4164860f5528944eca0e173f8a7e4130e89404b6fa09da9b469a0", + "bytes": 810 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00011/library-desktop-report.json", + "sha256": "0bc9032490f2450e99d30fd67fe95b164f8d359ca042d0e0b772ee1a28e39dbd", + "bytes": 564 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00011/library-local-exact-report.json", + "sha256": "82c3a7ebb204da9dd8f817f0378374be062993892a4405d01f81c960677f45bf", + "bytes": 750 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00012/light-desktop-report.json", + "sha256": "92bd381ec7b8242de6379d9e266ebbb63bd34c2d28e852d2ac7610eb7e67b8d3", + "bytes": 808 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00012/light-local-exact-report.json", + "sha256": "103958f99cc13fccef7acb4128f3707e48580c8ad86813821a2ce40986c5a964", + "bytes": 834 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00013/material-desktop-report.json", + "sha256": "7adfdd70f9b116268301e0bb6cf7e0b88cf8eb2ab20d25c944586df3a9cc000c", + "bytes": 923 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00013/material-local-exact-report.json", + "sha256": "229f3fc85518da4539e311e6ca70fd6b156cdcc9ae4c4b901e0de5c895b3d333", + "bytes": 771 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00014/mesh-desktop-report.json", + "sha256": "e26f0333707fa915b7261f305af413340f9edb26d050a82fb3c6afac12ee2169", + "bytes": 920 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00014/mesh-local-exact-report.json", + "sha256": "36066f715b9993f0e789e12a0d29f9c0c9e79e0b5ff5914268e839fa648cb28a", + "bytes": 704 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00015/metaball-desktop-report.json", + "sha256": "5b2b7d79397675792bf54b568646a1714f75fab355049e7227f634403345c74c", + "bytes": 931 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00015/metaball-local-exact-report.json", + "sha256": "7253a7de7d2aad035ef38cceee33c0bd04ca743f181f28ac740e09799684a636", + "bytes": 748 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00016/nodetree-desktop-report.json", + "sha256": "b1a6608a41fdbbaeb670dfc0222fbef3b6b73e3728add751564194dda1eb2924", + "bytes": 946 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00016/nodetree-local-exact-report.json", + "sha256": "8df89df7ef013b8eed71c19e748eff6b7288772a10f139306a87cb2431eb26b3", + "bytes": 779 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00017/object-desktop-report.json", + "sha256": "6c9b16af1d114b00df2711b095778eef239c27b55588063d68872434f08631fd", + "bytes": 700 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00017/object-local-exact-report.json", + "sha256": "38fbe19a794e05d1a05c0df5de7fca919c229c179ac59c452df08cc0c827ca91", + "bytes": 765 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00018/particle-settings-desktop-report.json", + "sha256": "5d1c855ee65c7dc8f715341ed0a2b1269aa1a2f6e3ecde5ca590f393af3042eb", + "bytes": 697 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00018/particle-settings-local-exact-report.json", + "sha256": "fb3eb8a193cbbf8ee8b98457042d560977e309ba1496903abf638e93c7641b6f", + "bytes": 927 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00019/pointcloud-desktop-report.json", + "sha256": "c3c874f8f5e95c97f2862d6b2c4711ac78a90f3a5de289bfdb9a5ae0459dc1d7", + "bytes": 711 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00019/pointcloud-local-exact-report.json", + "sha256": "e304b3dd36b08a43307f1dc2a70a14cb6b29214d324b18faf8d8225f7342b23d", + "bytes": 880 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00020/scene-desktop-report.json", + "sha256": "fc9fdf2a37f36327e7456d3c17dcfd240b67ce27d9d2f0861fde5db237b2675d", + "bytes": 614 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00020/scene-local-exact-report.json", + "sha256": "d964c61c0717865a42574c28d5e4fffdcb45c3c962e9bce4608c5f9438828504", + "bytes": 782 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00021/screen-desktop-report.json", + "sha256": "41a5d58883238d89e4e6ed3805b452bc165632b63e0065109529de3c0e230ecd", + "bytes": 582 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00021/screen-local-exact-report.json", + "sha256": "792206b5b046411d921b3b916d2b76222aab39050df8028a64c39437e285023c", + "bytes": 785 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00022/sound-desktop-report.json", + "sha256": "cb23ace7920d6762f931296701a596f3453ccfa7e966447d0efa198b92d65a69", + "bytes": 574 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00022/sound-local-exact-report.json", + "sha256": "741b67484c81c156c51b5b88e52f32d5e0114292dcbe689c641d2670cd4e82bd", + "bytes": 763 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00023/speaker-desktop-report.json", + "sha256": "8ee6e52568f2c37098a8f64983f90243b2df69df1c16a0c4eaae855a7e9fad9d", + "bytes": 807 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00023/speaker-local-exact-report.json", + "sha256": "7d48447d03e39e5e29f41bf18a95040c5436ed73229cee1bdc32e09f7aae594d", + "bytes": 996 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00024/text-desktop-report.json", + "sha256": "50006b807fc8f41603e939f9f2748c4d5cacfcaa19a1c60a7270e9f9962b621c", + "bytes": 718 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00024/text-local-exact-report.json", + "sha256": "73c22077cbbe47e1effd7c24d310e43010fbd48925587cb00efe507838b4f1eb", + "bytes": 852 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00025/texture-desktop-report.json", + "sha256": "ead3d25554f69580a272c3a4c45139632592ba2ca83370c79174683b2c7a982a", + "bytes": 612 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00025/texture-local-exact-report.json", + "sha256": "4e503817eb7053370b627cc9a2edb03fc2ac8b8919534a90064133eaf9e0f4e7", + "bytes": 805 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00026/volume-desktop-report.json", + "sha256": "60c12879158b8a8e548a135778f90618cec8d42b39a95e460398fe6cfe563c86", + "bytes": 615 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00026/volume-local-exact-report.json", + "sha256": "649e2bace33f8d9708b3ce0b4979e0cd6e9a0b78b8f4ee2b75776a94e68362be", + "bytes": 881 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00027/window-manager-desktop-report.json", + "sha256": "2b50759c964b06b38410f44c11679616a8f172d5bc05bd2e5b54a416ec781c15", + "bytes": 537 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00027/window-manager-local-exact-report.json", + "sha256": "9e92475873db0072f32d708e6f1468387637fac39008c4928060c39a719a5dc0", + "bytes": 792 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00028/workspace-desktop-report.json", + "sha256": "4ab3274ecfcd512964db37e661f8b5e8c53077687094115c11dab4fbe39a12b9", + "bytes": 475 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00028/workspace-local-exact-report.json", + "sha256": "3b12cbb0533284f29ad1d0f4659ecd1ce128ae5b24545610819f994252b79e6d", + "bytes": 721 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00029/world-desktop-report.json", + "sha256": "2818f250b67524e0517ad117619a00fbcb09f51141c4f228e3c0095f0ee4afad", + "bytes": 785 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00029/world-local-exact-report.json", + "sha256": "22eacfe0c2fa9cdce05b0965fac8f8f59bbd17726a89606678a8d3ed804dbf4d", + "bytes": 1047 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00030/armature-modifier-desktop-report.json", + "sha256": "32ca0be514d0f5b02150c23a42e99784903da9c211aebb7f2736229daa069220", + "bytes": 880 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00030/armature-modifier-local-exact-report.json", + "sha256": "fad61c1ebb8396b4af4143e7079a7fc1db4bf3f7ff945ce4717650c5493510a5", + "bytes": 1359 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00031/array-modifier-desktop-report.json", + "sha256": "739ae5333a5046cd4b0c60333eec89bf4f0bb9508d95022238a173f4a698833f", + "bytes": 750 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00031/array-modifier-local-exact-report.json", + "sha256": "df9326e8ddbb5ace859ade67dff067229c55f19536c568ee6e102d981971c17a", + "bytes": 1318 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00032/bevel-modifier-desktop-report.json", + "sha256": "a6e1e88a9e418bb18b2a323285c0d05a07e6c038bf2cf4f7e04bfa188900daf3", + "bytes": 682 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00032/bevel-modifier-local-exact-report.json", + "sha256": "318d68f88e3838fc3920d33a8d1b2995411de39c9c2f39d97e1f2c3b4e7a7c1e", + "bytes": 1197 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00033/boolean-modifier-desktop-report.json", + "sha256": "2f0c9dfb183f39a65ef018d1618ef6f12fe05ada0a6c7ff40011491686ea00c7", + "bytes": 746 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00033/boolean-modifier-local-exact-report.json", + "sha256": "aa33f396b5910e3829c1965e62c80bd1267ac764a58862b72be555ebd5bd1b0d", + "bytes": 1285 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00034/build-modifier-desktop-report.json", + "sha256": "b05d06b2408cfa2b0509489434d80489e11d967748f48639d1d50febbcd64974", + "bytes": 725 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00034/build-modifier-local-exact-report.json", + "sha256": "6e5e3f89148decd1996802bddf903ee704700308be90e1af9c3c66e7e58796fa", + "bytes": 1180 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00035/cast-modifier-desktop-report.json", + "sha256": "46d920371f2b315034286e20db585b5830edde5c12f97470db05141acdfa3975", + "bytes": 745 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00035/cast-modifier-local-exact-report.json", + "sha256": "56d0c12614b99a60617ca6b3aaa8308c103b0d926c67ffa6d374713f1939923c", + "bytes": 1149 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00036/cloth-modifier-desktop-report.json", + "sha256": "bcfa83207cc5d5d6d971c41d8bb649d272c7e8f03e7499dc0efa4f3bbcb4d1ef", + "bytes": 618 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00036/cloth-modifier-local-exact-report.json", + "sha256": "37344e3d5c930fb6815016b03432a6f86a2e763a89546e2e435e0f957f99270a", + "bytes": 1091 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00037/collision-modifier-desktop-report.json", + "sha256": "be458864a8ce628d18002e69cbba9d524377fadff0bb7a3c3a6ed07a6fcb6bc0", + "bytes": 638 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00037/collision-modifier-local-exact-report.json", + "sha256": "3352147756f312df1ffb4b9c889347e74403147cafb770128c6fbd61810acc8a", + "bytes": 1117 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00038/corrective-smooth-modifier-desktop-report.json", + "sha256": "81b0dac10d007f32a7ccd1939fb82494ad230cfd09a5d5e3d9051716631a6012", + "bytes": 711 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00038/corrective-smooth-modifier-local-exact-report.json", + "sha256": "e0f51299b53f2694cc0421d249acc633d6d3db07d2302d1358927aab15981d0b", + "bytes": 1176 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00039/curve-modifier-desktop-report.json", + "sha256": "7758f93e53d1b01a80e7cc2d4ce4948cadfb6882a2eec0d34e7e9fbdc7ac69bf", + "bytes": 668 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00039/curve-modifier-local-exact-report.json", + "sha256": "7b3cf6ec8eec1a1b0c8d630578bfa09b29d8e8597ed860aa98737e7c7798cf91", + "bytes": 1203 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00040/data-transfer-modifier-desktop-report.json", + "sha256": "3b75a6318947c1c18b04af6a05bc275aac4f6fde4352cc249c431c64fde7174d", + "bytes": 691 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00040/data-transfer-modifier-local-exact-report.json", + "sha256": "45c8b9c2b0a07902e7680fc44b648cd0fc349e4a248c52824c3ed70debb0c9a1", + "bytes": 1148 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00041/decimate-modifier-desktop-report.json", + "sha256": "a056e81f2d0dceca465b185060d9874f4e0a10099b0820a42e50de3c20f56433", + "bytes": 824 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00041/decimate-modifier-local-exact-report.json", + "sha256": "ac3efd1614cd440aff79d370f61a8243a69feac82d9aa4afb2c2d2ac2196d811", + "bytes": 1301 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00042/displace-modifier-desktop-report.json", + "sha256": "8b5e69f2643e33607c36c6e786477d13c962eb041f64044be4b5d1277b2ad4a3", + "bytes": 783 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00042/displace-modifier-local-exact-report.json", + "sha256": "f29ae1fd8d9dd004194347d9ab9d138d9c10db71ffae8baba554748de835fe09", + "bytes": 1272 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00043/dynamic-paint-modifier-desktop-report.json", + "sha256": "d15d596c1c2fbf176c59b7fb933f6a2ceeb09ff578ba2cf894c12deec480471b", + "bytes": 691 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00043/dynamic-paint-modifier-local-exact-report.json", + "sha256": "e04b9f0427010f85ffd5119eeb2d926ad0fa5d7099c67807ba46b6e66db5b0f3", + "bytes": 1150 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00044/edge-split-modifier-desktop-report.json", + "sha256": "4f741f923ed60af4142691643fb70cd650b3e7c12507002595d8f52d78a41a61", + "bytes": 716 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00044/edge-split-modifier-local-exact-report.json", + "sha256": "114e41e7c6f3238d4888b61f2d9fd59b37d4a9a4f2f7485fd1a9b9a48c8ba9ac", + "bytes": 1177 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00045/explode-modifier-desktop-report.json", + "sha256": "6f2da8d3cc19177ceedef1e31d2ddd2bb73e061a40164393fb717050b442b43c", + "bytes": 663 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00045/explode-modifier-local-exact-report.json", + "sha256": "fdd2bfc6407872afbb3f1393b79c1d551f030f485ce4169863b07742c994122f", + "bytes": 1111 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00046/fluid-modifier-desktop-report.json", + "sha256": "5e2140d9a0e8089c6fe1f31f34bfe7fa8473f642556051598436cb78636d451b", + "bytes": 653 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00046/fluid-modifier-local-exact-report.json", + "sha256": "3e0adc749a8f15c52231fdd37afd01246b21d0c5630be569a0756b4f7d05194c", + "bytes": 1095 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00047/grease-pencil-armature-modifier-desktop-report.json", + "sha256": "aaa319ab7fc68ba6763c29b97659cb3a4f71425df5edd93dbd9aa5b998e96c1a", + "bytes": 705 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00047/grease-pencil-armature-modifier-local-exact-report.json", + "sha256": "0e343bf170e7cb7c0b61a20308a7034f3ced1572580c4f94074e162e14bfcf43", + "bytes": 1166 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00048/grease-pencil-array-modifier-desktop-report.json", + "sha256": "caf437b45e130c12406ce3ee8d699d7266673f8e595d63d017f5482c474f29f3", + "bytes": 693 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00048/grease-pencil-array-modifier-local-exact-report.json", + "sha256": "e583037d0c80eb40b6e511cb2b11feae3c9f5f0e1c0374727f5af6c8c1b0c6b5", + "bytes": 1213 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00049/grease-pencil-build-modifier-desktop-report.json", + "sha256": "e9d70bb6ba43a387d29683473bfc8286ab9818f771e796194a0344ed31bd00cb", + "bytes": 693 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00049/grease-pencil-build-modifier-local-exact-report.json", + "sha256": "b1df18f0aafe0a47ef55b7fd64ac5935020a99e45e58708cd7958d919d8fa558", + "bytes": 1213 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00050/grease-pencil-color-modifier-desktop-report.json", + "sha256": "79e44b5d0443f81d2ba334902990f73c20601b4c15e890aff1b73fae4879f771", + "bytes": 693 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00050/grease-pencil-color-modifier-local-exact-report.json", + "sha256": "73126cf9fc415f9eccf9538d1d23055857fa9c772e1b15721470e1653bc2ce73", + "bytes": 1213 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00051/grease-pencil-dash-modifier-desktop-report.json", + "sha256": "0c87ebea369c798bbb2f0f70f698066e482ce372eda0042008f9993cfe116bf6", + "bytes": 689 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00051/grease-pencil-dash-modifier-local-exact-report.json", + "sha256": "6da74df88b5ed5b1cb7cb64420020924143e30cad7c8f1efc11e62fd39b33dbb", + "bytes": 1208 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00052/grease-pencil-envelope-modifier-desktop-report.json", + "sha256": "4ce0e867ab2f8346e6121060c3f18c9a1f48e97c67dd5b9362c2eaca6e7e5f78", + "bytes": 705 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00052/grease-pencil-envelope-modifier-local-exact-report.json", + "sha256": "af02545ba19b116b4ce39b87aaab3f8e3e33504164694c04b1ec6da7f159ee59", + "bytes": 1228 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00053/grease-pencil-hook-modifier-desktop-report.json", + "sha256": "67b0ddf84c0d9690832b8aeae76b503572bf9ac725123254a95a351e55075c54", + "bytes": 689 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00053/grease-pencil-hook-modifier-local-exact-report.json", + "sha256": "eb44b966e835d186f5f05420377a00895764cee2b5cb379f3704f89aed334d16", + "bytes": 1210 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00054/grease-pencil-lattice-modifier-desktop-report.json", + "sha256": "565931e3614f74c666c375ae3d879ca85b4274d1bc980cd5480c877593d23a63", + "bytes": 701 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00054/grease-pencil-lattice-modifier-local-exact-report.json", + "sha256": "4d0bda74ab6c6667530fa5f64fff6944c316449b3c9f1c25d6c623d7523a5ed1", + "bytes": 1224 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00055/grease-pencil-length-modifier-desktop-report.json", + "sha256": "367ea4ff3cef4d5ec0e07b3f69f2f5a15d2604753b8efe9083775e97854af2b6", + "bytes": 697 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00055/grease-pencil-length-modifier-local-exact-report.json", + "sha256": "5715882f691e9022fc3049f1937b90e39d9e7702583f9a946b7aabf22e2093d5", + "bytes": 1220 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00056/grease-pencil-mirror-modifier-desktop-report.json", + "sha256": "60122c5212975d2a0de279415ea35699fa10c7c3b350ef991a2ef04c096c4e3c", + "bytes": 697 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00056/grease-pencil-mirror-modifier-local-exact-report.json", + "sha256": "ac905bdcf602af4f8d63e62ea78f251d737052c00aa4454807aeaa648344ea89", + "bytes": 1221 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00057/grease-pencil-multiply-modifier-desktop-report.json", + "sha256": "c891fa44f7623a0eb1dd8c848cace0f8289c0c181a03a400fce36aa1a020069c", + "bytes": 705 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00057/grease-pencil-multiply-modifier-local-exact-report.json", + "sha256": "5e9c1ab5db3f884cb1f78ce212e2714ea8500ddcc6691774092a745a71013e10", + "bytes": 1231 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00058/grease-pencil-noise-modifier-desktop-report.json", + "sha256": "04c853b535d820f10859c47d51901fbbf51c4a5cb7f7387cbf59bbebfc108a2c", + "bytes": 693 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00058/grease-pencil-noise-modifier-local-exact-report.json", + "sha256": "ce892ec22b69bd93060fcd8d29d91a97c68f75361bf9b782d73e502ecb7a6f47", + "bytes": 1212 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00059/grease-pencil-offset-modifier-desktop-report.json", + "sha256": "4119db33aad242414ed52d9e6614bdede6e0b4a551604a6886e01dc5bf90ea4e", + "bytes": 697 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00059/grease-pencil-offset-modifier-local-exact-report.json", + "sha256": "e9ef09a250821a1dd7f10c574f1911f534baf65515e879f9ac423fb4877c7b5b", + "bytes": 1217 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00060/grease-pencil-opacity-modifier-desktop-report.json", + "sha256": "678e7c0028c38f2a84cee2377ecfd7de1d1303561e75fcf8f380359338f6b4b8", + "bytes": 701 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00060/grease-pencil-opacity-modifier-local-exact-report.json", + "sha256": "b62b13a20f921815f9fc4b32b406598a1a08d701cee27e07ee3a0009dda2a2f5", + "bytes": 1221 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00061/grease-pencil-outline-modifier-desktop-report.json", + "sha256": "2a6994ca45c8262a592cedb8deb8f026d366ee2df3bfe6ea0d375e8e214ba6c0", + "bytes": 701 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00061/grease-pencil-outline-modifier-local-exact-report.json", + "sha256": "f490b2dc9b173a3172529ab529889a3292fe39f0cbd3951baaee8566464a0c43", + "bytes": 1222 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00062/grease-pencil-shrinkwrap-modifier-desktop-report.json", + "sha256": "6631f00a27489de3b3d5cd2288f1a1b395b3a7295f9fc4b72c2091d5ce333a45", + "bytes": 713 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00062/grease-pencil-shrinkwrap-modifier-local-exact-report.json", + "sha256": "a00004d09bc0170a0f3148197dd3dd24fb39fac60c723214cce73e527c998e8c", + "bytes": 1240 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00063/grease-pencil-simplify-modifier-desktop-report.json", + "sha256": "14de85a86a150ace281a6b632a5cdf3076104c623b3d313201a2efeb5bac6695", + "bytes": 705 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00063/grease-pencil-simplify-modifier-local-exact-report.json", + "sha256": "6214778590468549ab03aa4bb67dcad6ae2f22d151dc6012c9e293e01ffa9dbe", + "bytes": 1229 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00064/grease-pencil-smooth-modifier-desktop-report.json", + "sha256": "b58983c079c8271ab9d5230e478d36e16d49102826178e90566cd0a8913dd325", + "bytes": 697 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00064/grease-pencil-smooth-modifier-local-exact-report.json", + "sha256": "da42e7440e07f1033f98fbd26274654b4f516821fa0e4c08db68df9468598564", + "bytes": 1218 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00065/grease-pencil-subdiv-modifier-desktop-report.json", + "sha256": "e4e86404702f4b46f207c66070adcc0a52e580aff6106f5404c97ab16351a2d2", + "bytes": 697 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00065/grease-pencil-subdiv-modifier-local-exact-report.json", + "sha256": "3e09deb0756dd36c85e53e6011f3ca011c9ad4a237b577d529238675a9dd7213", + "bytes": 1220 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00066/grease-pencil-texture-modifier-desktop-report.json", + "sha256": "d3900098ba128c202ff28323c6e2945d78dd3c35512bbc2c5d611493b8b1e42d", + "bytes": 701 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00066/grease-pencil-texture-modifier-local-exact-report.json", + "sha256": "b9831dad063cdfaa81aeb8894776b914652c6542d2e0a244cef321547e183068", + "bytes": 1226 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00067/grease-pencil-thickness-modifier-desktop-report.json", + "sha256": "664ec1a6c595fcb5fac0888ae866f70a48ef5d057035c5c614ed0d97a9d08108", + "bytes": 709 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00067/grease-pencil-thickness-modifier-local-exact-report.json", + "sha256": "6e1eee5cf87df42fc94c144f5171f9653df4196372eccd001cef6907ef518e94", + "bytes": 1236 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00068/grease-pencil-time-modifier-desktop-report.json", + "sha256": "761dd7ad0a350e9f3c175575cdb4d71f5bd0a56e1872626148d73c9a7229468f", + "bytes": 689 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00068/grease-pencil-time-modifier-local-exact-report.json", + "sha256": "5cc9edb3f0fd508b25730b4d32deaa9a804381d7fbd8b4007af5e7782d27c590", + "bytes": 1209 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00069/grease-pencil-tint-modifier-desktop-report.json", + "sha256": "e66d9b22a901a41e9c7b0d460f970722192550f75a4f3f54612b97fcf9ed9238", + "bytes": 689 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00069/grease-pencil-tint-modifier-local-exact-report.json", + "sha256": "44d113b3d6c291a18401d6dadbf915dfb907413c8ed96e092011484879f5e050", + "bytes": 1208 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00070/grease-pencil-vertex-weight-angle-modifier-desktop-report.json", + "sha256": "0c3fdcbf998064e77023d66239a6f0e9763cba14aced60d6d71bfd8968844e66", + "bytes": 749 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00070/grease-pencil-vertex-weight-angle-modifier-local-exact-report.json", + "sha256": "79d31b01cb87a8a380d4e84ea69e9b3f19b5109029ad4c1193d15ab6058b8d01", + "bytes": 1285 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00071/grease-pencil-vertex-weight-proximity-modifier-desktop-report.json", + "sha256": "bfb4354d4b25894879f6cd15f1f9758eeebc88aef6c45237ffebd16bb670ffdd", + "bytes": 765 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00071/grease-pencil-vertex-weight-proximity-modifier-local-exact-report.json", + "sha256": "08a439a692bc167a2dff093527586132b3e1baca4a8d7be4dfd47cfe18a04bd9", + "bytes": 1302 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00072/hook-modifier-desktop-report.json", + "sha256": "819375aad6fbf6814a1fe85802472d12df216a205067f5ee0e132a8d383f247d", + "bytes": 690 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00072/hook-modifier-local-exact-report.json", + "sha256": "929d2a3e679e4972149ffac8ff1a7d692452cb9b1029418eea86434aa8d4c6d1", + "bytes": 1258 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00073/laplaciandeform-modifier-desktop-report.json", + "sha256": "20b1fa4731e697c539cbeda56daf567a39ea0e4157519480400d3aa0116b5d9c", + "bytes": 757 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00073/laplaciandeform-modifier-local-exact-report.json", + "sha256": "4661ab5868a5664206f47bebbc93f6f0cc4dcaab362f45d59540c8900a3c4ca2", + "bytes": 1219 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00074/laplaciansmooth-modifier-desktop-report.json", + "sha256": "9aa6928bb41744895ec5d471a3c290d5880d75357f556c310f692dfbf0c587a6", + "bytes": 757 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00074/laplaciansmooth-modifier-local-exact-report.json", + "sha256": "0ae4447208034f80469647e51469225032cb0e8f40b6e887d2aa66888d8b9d65", + "bytes": 1219 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00075/lattice-modifier-desktop-report.json", + "sha256": "c06a312fdf79abca4eb6560e271e62adfdc79e4b8fd61db57cf53c148195cd6a", + "bytes": 732 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00075/lattice-modifier-local-exact-report.json", + "sha256": "62bf9e34273df25cddda1f64b614626cac4163e861c253cb44b39624390266f5", + "bytes": 1269 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00076/lineart-modifier-desktop-report.json", + "sha256": "dfc59d7f349a96352e9b7147cf2745754664513b17f8541828552cd04d6e2434", + "bytes": 657 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00076/lineart-modifier-local-exact-report.json", + "sha256": "b97956de8af04e761d23e69c7c40f31ddfafe0fa54e600123154c77a74ee41f1", + "bytes": 1166 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00077/mask-modifier-desktop-report.json", + "sha256": "b727c810beee272ab8f70754d50aed53404ec5a5d9147f912d6f880d1554576f", + "bytes": 686 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00077/mask-modifier-local-exact-report.json", + "sha256": "ef4b6d8b4c1fb2d336fafebe4f232478704d442d8b166305d8c0dbed0523bed6", + "bytes": 1126 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00078/mesh-cache-modifier-desktop-report.json", + "sha256": "4f78ab7adae556fb49dfde5b4c4e95f9bb0c2777c8425bc48d410955d9686d46", + "bytes": 719 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00078/mesh-cache-modifier-local-exact-report.json", + "sha256": "6d6baa891a387fe56c4ee27c3bc5bde6ecb28f6a6e71f49c1560fe04b26d24df", + "bytes": 1172 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00079/mesh-deform-modifier-desktop-report.json", + "sha256": "8f7ae61828ea8395a3dd1a5f01ccef9e634b03cf831b2d80f891c2db434190af", + "bytes": 725 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00079/mesh-deform-modifier-local-exact-report.json", + "sha256": "6a2be2737f7510539d27d0504b47012dc801b5a3b428f1ab6f2264f4df2ded87", + "bytes": 1266 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00080/mesh-sequence-cache-modifier-desktop-report.json", + "sha256": "0dfdf7f2e779c96397d0686f0d8ef9ba21e017c80a47da1b04639721942f3b2a", + "bytes": 770 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00080/mesh-sequence-cache-modifier-local-exact-report.json", + "sha256": "086758c58ae3b0b7124fd35b802d8ec3ad3254ff8e71f668ff976e05725a3a31", + "bytes": 1240 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00081/mesh-to-volume-modifier-desktop-report.json", + "sha256": "0a485f27d6f6246d74e3737b8b945715fca96f343a675257dab9abb70319bb1d", + "bytes": 695 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00081/mesh-to-volume-modifier-local-exact-report.json", + "sha256": "af033e5bd3d0491f464db098661621f0ac32afdcbed61a76614f4f06125559aa", + "bytes": 1153 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00082/mirror-modifier-desktop-report.json", + "sha256": "cc149f9c8f6f3b59ebf0b07f891d8b023d889cf2f281a7f1fce9f0f62b72e2ee", + "bytes": 696 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00082/mirror-modifier-local-exact-report.json", + "sha256": "a0d7259bba97e30b97d57b776e3b067cd4bbd7ed734fcd8867c24efa4b5c469d", + "bytes": 1198 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00083/multires-modifier-desktop-report.json", + "sha256": "ad00dd2b8cadad79107f8433f06324f05ff5cb9672ca31bbab358813a48d3eaf", + "bytes": 710 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00083/multires-modifier-local-exact-report.json", + "sha256": "d6ec0b7cf1eba19e79174c8d137ec1dd92eca40b7438f1739ce74df18bf712bb", + "bytes": 1158 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00084/nodes-modifier-desktop-report.json", + "sha256": "d5de72e4e7fd671474d0a385818337063952eecb3e765a694ddda811a420c9fc", + "bytes": 691 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00084/nodes-modifier-local-exact-report.json", + "sha256": "987e987122bb5eac6f0208b0d453b59aa0b1e46888c17c68db1501fd04ed2432", + "bytes": 1139 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00085/normal-edit-modifier-desktop-report.json", + "sha256": "cc4dfff0ac64efdd2e93eaee11fcfd7f9e2fe55fd4e21ea1e5f1a72dd14855cf", + "bytes": 724 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00085/normal-edit-modifier-local-exact-report.json", + "sha256": "bbe513c4076d32a374083c0ae4ad6069e97f411a25bccb968e2f06c0b361da88", + "bytes": 1175 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00086/ocean-modifier-desktop-report.json", + "sha256": "d2217b8def179e48ea11a5bfcd9376765d2fca8ce22d1673b3d46d284f21af3f", + "bytes": 691 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00086/ocean-modifier-local-exact-report.json", + "sha256": "33a86a21a856190f97c618df2aa307ad102e11da5260ce45f48aec961bf1acdd", + "bytes": 1135 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00087/particle-instance-modifier-desktop-report.json", + "sha256": "a680090b9010d79608825fa02593b6a27506e233bf331b043085a41bf3d912a8", + "bytes": 760 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00087/particle-instance-modifier-local-exact-report.json", + "sha256": "b68f61eb0596709da28a4ca0e4f19e3bc6f213191ff64c40c04d2be9ed5dbde7", + "bytes": 1225 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00088/particle-system-modifier-desktop-report.json", + "sha256": "a53c039a969a1a9affe57d435c281707882fcdb2f4772473801fed6c8ee45914", + "bytes": 749 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00088/particle-system-modifier-local-exact-report.json", + "sha256": "905fae2ec36e1447a28d314cfc6ddce00dd71ddf090be505b16b76860f5e3643", + "bytes": 1212 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00089/remesh-modifier-desktop-report.json", + "sha256": "ac36dcb7a2c59b6f8df45b67b00f45966c38de93dbfa8d016aeef77a8a92b665", + "bytes": 698 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00089/remesh-modifier-local-exact-report.json", + "sha256": "0cc329e5779c02b15cdffc48030451134017870505149a10b9c5e23876d83ba6", + "bytes": 1144 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00090/screw-modifier-desktop-report.json", + "sha256": "af225b5b2f660ae70fe0315527b79d5e74db996db3722222bed98194023de28e", + "bytes": 691 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00090/screw-modifier-local-exact-report.json", + "sha256": "3998657085e2d1f963540cd97afd7980cdcd50ec96897ab22d612183a0e5e531", + "bytes": 1226 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00091/shrinkwrap-modifier-desktop-report.json", + "sha256": "4bc01b8e0d79256b2e5fa9e149bc53667790eab383beda260fdff77d6f4f0c6e", + "bytes": 721 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00091/shrinkwrap-modifier-local-exact-report.json", + "sha256": "db44cad8b1b6173303ca5f63c442eb82805324e08c6786323f6803803d52d391", + "bytes": 1315 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00092/simple-deform-modifier-desktop-report.json", + "sha256": "532ad0f944d179ec640fdf706b9e4e78eaaa3635410b404f7a146b68a400768c", + "bytes": 736 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00092/simple-deform-modifier-local-exact-report.json", + "sha256": "24eacc0f43139fbd4fe232e9418d7c81a8eee8bc9b10b15bc2818e1df0794aff", + "bytes": 1291 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00093/skin-modifier-desktop-report.json", + "sha256": "cf30f79bb5f5e90749068d678a6746808c87175aa9ad51117f69b6b90aad7884", + "bytes": 685 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00093/skin-modifier-local-exact-report.json", + "sha256": "e2df081504aab183867915c78f4829d90e51fb610586a1722752cceaee0da674", + "bytes": 1214 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00094/smooth-modifier-desktop-report.json", + "sha256": "762f02f1f460bd1deb71a7441ff85b969ff8ef916b32d95e46fe243ce110d1cb", + "bytes": 813 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00094/smooth-modifier-local-exact-report.json", + "sha256": "0373da7c5ce2b369840c080bfe5dd341596208098fc2f3c3ae864031d965bc6c", + "bytes": 1267 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00095/soft-body-modifier-desktop-report.json", + "sha256": "5228fc63f22473e4e1ef9d82e9018c4739c6b63469da4b693240ac307336bba7", + "bytes": 713 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00095/soft-body-modifier-local-exact-report.json", + "sha256": "e0767cb702d9c0612c8e8bc140dd2e00f5af6f782c3f63c5ae15407a6c5fcaa9", + "bytes": 1168 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00096/solidify-modifier-desktop-report.json", + "sha256": "914187f8ec57e442d85fae5710aa98bd058e91930bdacd7928694281bad54df3", + "bytes": 784 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00096/solidify-modifier-local-exact-report.json", + "sha256": "b6437999773cc18296a54e041c8df8b33d595f9ebe67c826a47f62308d307232", + "bytes": 1242 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00097/subsurf-modifier-desktop-report.json", + "sha256": "e1ce95f66a26b4e687bd32fc6f975044033d921703954e0e26674dfbce556bea", + "bytes": 774 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00097/subsurf-modifier-local-exact-report.json", + "sha256": "c146dabc29a94e25df4f09e6de727a3377f48ea706dbe74f51b903efbc5a293d", + "bytes": 1234 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00098/surface-modifier-desktop-report.json", + "sha256": "75a588cd606fe0395c7f6541eed4ca26daa0109d7f6fa62cffe87e41149d0a95", + "bytes": 704 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00098/surface-modifier-local-exact-report.json", + "sha256": "7b004c755290ebe920a9296a7768ff3231eaec66e1836536d98dffa4d6c6dbab", + "bytes": 1150 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00099/surface-deform-modifier-desktop-report.json", + "sha256": "bfd91c545efcf0688bfa9cee24e65de82224eecf715a1ab4385061a7d7df4db1", + "bytes": 743 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00099/surface-deform-modifier-local-exact-report.json", + "sha256": "7d5f760727e03951c3f5b2c3e885b33ce92af7293ca101732fa490136dc25ed5", + "bytes": 1313 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00100/triangulate-modifier-desktop-report.json", + "sha256": "8e1472c739110448d2c1987c32403714b9465606c0e8b3a8e3ae4867743ba377", + "bytes": 773 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00100/triangulate-modifier-local-exact-report.json", + "sha256": "d715e77c6e2ef82c9611a68a3808057d08feb3de715ab1a3f07c6e1b67b6b69d", + "bytes": 1239 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00101/uv-project-modifier-desktop-report.json", + "sha256": "18364763d8956b1426ae0ce7809491562d66833cbf77b7e00b141c002c54d8ed", + "bytes": 718 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00101/uv-project-modifier-local-exact-report.json", + "sha256": "b0605455ac7287165072c928a06d556af759f9f7bd1ba1fac32cccb0ca0e0556", + "bytes": 1169 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00102/uv-warp-modifier-desktop-report.json", + "sha256": "ed6bf6150e20eef0b7207397cee12db3408836075866f05bb48da92e706ab828", + "bytes": 700 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00102/uv-warp-modifier-local-exact-report.json", + "sha256": "9499f499401b3703ee7e4ebab55516710fc235f08cdbd93271d9b348b066ba5f", + "bytes": 1147 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00103/vertex-weight-edit-modifier-desktop-report.json", + "sha256": "442287f280444efcc0dcfc8602d935066af17aeca0072e978f64ffa3e6e13b9d", + "bytes": 764 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00103/vertex-weight-edit-modifier-local-exact-report.json", + "sha256": "23d26e90775bce127efb1a8572c7a9f92acdf4d22b41bd1de6c78a11b7246ba8", + "bytes": 1232 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00104/vertex-weight-mix-modifier-desktop-report.json", + "sha256": "6121a089239450b95037c25858958ab5d067af538657f56452fdce81186834a6", + "bytes": 758 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00104/vertex-weight-mix-modifier-local-exact-report.json", + "sha256": "a755e5c88c8a22305155dc02c455e9fe6ccb1e92b7053be7a3ca57da2aa48971", + "bytes": 1224 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00105/vertex-weight-proximity-modifier-desktop-report.json", + "sha256": "7e6ebaf459de04781a6e6467be84c6065039a4f3fb6b4c748fcbeda3b4806179", + "bytes": 794 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00105/vertex-weight-proximity-modifier-local-exact-report.json", + "sha256": "7594f78376b061793524a4c586ecd2335d7aa9064d4e31b840f92e03819fac1f", + "bytes": 1272 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00106/volume-displace-modifier-desktop-report.json", + "sha256": "00ee176bc712320454f7ddb585710ccab243b9b5b89f2e2f0eb364c536bddcd6", + "bytes": 702 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00106/volume-displace-modifier-local-exact-report.json", + "sha256": "9c44441bc0cfadbdce570f5c3e7b074e3da00f19a7f8a2e8d84d0ae6167164f8", + "bytes": 1165 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00107/volume-to-mesh-modifier-desktop-report.json", + "sha256": "7cbfeae24f5f74a8b9509da418a65520a595530b164733bbd9ecf9de99212f02", + "bytes": 740 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00107/volume-to-mesh-modifier-local-exact-report.json", + "sha256": "1083d3e4144e172245c61b1ff8afa8b1bcf80b9bfae4d066e7eb0cfab80f5279", + "bytes": 1198 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00108/warp-modifier-desktop-report.json", + "sha256": "5daba0b7befe92e75dab3dca35e00ee1e3c211ab02e9f5ec3ec9bdb5c6164250", + "bytes": 686 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00108/warp-modifier-local-exact-report.json", + "sha256": "0aeac2276b0828180780358383b626295b1ef43fece15ac6fcadff880f861dd3", + "bytes": 1126 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00109/wave-modifier-desktop-report.json", + "sha256": "ddec88c688169daaaeda211a7b5b1ad2a7e9bd2f5baf29c8c85c5d5ae2265f3c", + "bytes": 778 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00109/wave-modifier-local-exact-report.json", + "sha256": "29e011eec263333878bc92b5514ec9b153142872bd59d89cecba740395f7e7bc", + "bytes": 1232 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00110/weighted-normal-modifier-desktop-report.json", + "sha256": "ae59fdc10466bfa461dbaed1aa45bb2ac6211b8a303e58de8ea3ee9c5e0e40ba", + "bytes": 825 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00110/weighted-normal-modifier-local-exact-report.json", + "sha256": "6360a1706e7456a5d51fa2effbc7505cd7209818690ab1b7665abf0bbff7a311", + "bytes": 1239 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00111/weld-modifier-desktop-report.json", + "sha256": "cef902e3eaaae85c8c441320ed1dad00b1193a73003c098e61ba179538972d9d", + "bytes": 716 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00111/weld-modifier-local-exact-report.json", + "sha256": "91ec33d946f8b526ae5af1f0b533896e5c6678655b9ddaa844ca5fafdb773e9e", + "bytes": 1166 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00112/wireframe-modifier-desktop-report.json", + "sha256": "f83750dfca898b529013b6d3fbefa283e5800a00312c3c613d06735a362ee26a", + "bytes": 756 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00112/wireframe-modifier-local-exact-report.json", + "sha256": "b74f89e88d7e280175c4ff534ebf20477ca35aed189b53ebd4a69fbdacc7e92c", + "bytes": 1216 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00113/action-bake-keys-desktop-report.json", + "sha256": "3226d30e020b3384b3a5504c72fe1481f43c048f0827ff6bcbfa1327d9cfd330", + "bytes": 956 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00113/action-bake-keys-local-exact-report.json", + "sha256": "d8a6aaa82c299916a37f2b8ef477349ac675a930d95ff7800450dc6e5a282d58", + "bytes": 842 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00114/action-clean-desktop-report.json", + "sha256": "94e987bcc4704cc880a88b510d7f01a2b990c04a109c9296b6e896d108d1e95d", + "bytes": 786 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00114/action-clean-local-exact-report.json", + "sha256": "58e3dfb9fc14a88bc57c616d02870ce0cb995a596f84bc57a686eb63e2e2952a", + "bytes": 756 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00115/action-clickselect-desktop-report.json", + "sha256": "8f6090591fd02d88ea4714ed6a570bbe1e9315226a7496a1382a1bcfb4a8dfe6", + "bytes": 1199 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00115/action-clickselect-local-exact-report.json", + "sha256": "ca2832eaceaf118bc1ce6b3efef1d5c4f9c63dae410d451b42b42f62316bbe37", + "bytes": 812 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00116/action-copy-desktop-report.json", + "sha256": "688cff599ed4b5b6ff17bc79141a040f8f9de59e6912285ae294af68efed0772", + "bytes": 1157 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00116/action-copy-local-exact-report.json", + "sha256": "d1698dbf04e3d7c7983734cdc88c7b109f61e10b33b09192e4576c60e2762b5e", + "bytes": 842 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00117/action-delete-desktop-report.json", + "sha256": "9c3f91e026c110496626bc0214a719c5475c71357572f6861cc0287a2948169e", + "bytes": 1045 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00117/action-delete-local-exact-report.json", + "sha256": "a2b9dda82da0c7a7751ac7bf36a958a624291a8ebe4cea12d54587fb3f441aa2", + "bytes": 859 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00118/action-duplicate-desktop-report.json", + "sha256": "1b84545f6b5f01877c191170b8b5a0d21035e5448373506b4cca50399780e1be", + "bytes": 1246 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00118/action-duplicate-local-exact-report.json", + "sha256": "31b61f287906adee9b83d2c05cb302b76012cf5284f96cf45a8ea349a855c320", + "bytes": 947 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00119/action-duplicate-move-desktop-report.json", + "sha256": "f1ba7739899913c3478ce9f2e1bfb92b7a73ccebe3176e98d2e9c57072ab7d97", + "bytes": 1174 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00119/action-duplicate-move-local-exact-report.json", + "sha256": "47d8a5de2a50807b33695b011ba1774883c3c8823a6326a3bfc537fab4a2ef52", + "bytes": 889 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00120/action-easing-type-desktop-report.json", + "sha256": "e34d9007483d2913166486f7fe736adae145ca27b1b90240ce36e62c4b8f1bbc", + "bytes": 1422 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00120/action-easing-type-local-exact-report.json", + "sha256": "9ce9af87fc9f42682de1fa7b02f3f320a64965dad5e3a34f808dbb072481896c", + "bytes": 977 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00121/action-extrapolation-type-desktop-report.json", + "sha256": "d9c594e10b0196fb9a906cbd6ed31f26196c8ee1ede6a23c50d3a6ac9de0012d", + "bytes": 1031 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00121/action-extrapolation-type-local-exact-report.json", + "sha256": "c898764e6629bfa752e6375c1944c579a02c62cb25059792fd9e582042a8a3ab", + "bytes": 856 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00122/action-frame-jump-desktop-report.json", + "sha256": "2a03fd1c8b4faea5fbf908e43df73758044dec705684842c0061023e999edf79", + "bytes": 1137 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00122/action-frame-jump-local-exact-report.json", + "sha256": "ac695d4436de8399842d39b412bb734c1e98d021f18a71c414627405aaa27fee", + "bytes": 829 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00123/action-handle-type-desktop-report.json", + "sha256": "4e37880d7ed3a2f506c2b93b93883c282011d0578d656dfe4c461a4e111201c9", + "bytes": 1426 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00123/action-handle-type-local-exact-report.json", + "sha256": "18fa52777177e3312534e981d7e2b1b6fd51b8ed72472c11f0959925907a6287", + "bytes": 964 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00124/action-interpolation-type-desktop-report.json", + "sha256": "94ec52af816fb75cfed2339ebb4b821b4aa13d822c6fe2697f9923309331804f", + "bytes": 1463 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00124/action-interpolation-type-local-exact-report.json", + "sha256": "a93a5394419001a0555103f76c91653b1127a21a454a076d71a78050a00130d2", + "bytes": 1018 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00125/action-keyframe-insert-desktop-report.json", + "sha256": "6a4445c9725cdd1ce4bf97e510ef7f1772f47652fd3a0486c1fb8a4d7dbaa9fb", + "bytes": 1377 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00125/action-keyframe-insert-local-exact-report.json", + "sha256": "4e0d65afeac1d262fcad6e8c3756ed63529c6586261379f9d15fa1c971e67cc6", + "bytes": 922 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00126/action-keyframe-type-desktop-report.json", + "sha256": "dafa72f7acc2a84f993615e8ed963013a948980776cb96e19ef5bc0ebce578b6", + "bytes": 1464 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00126/action-keyframe-type-local-exact-report.json", + "sha256": "42cc333a864b20769f80bba46cef162ce2c864509bcfc35191caac5405f2d5db", + "bytes": 1002 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00127/action-markers-make-local-desktop-report.json", + "sha256": "ced98aa43f04b58ac2aa66fed217fe895cdadc108739b4c335942114e8a69ce0", + "bytes": 614 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00127/action-markers-make-local-local-exact-report.json", + "sha256": "9b3737730a2f5fe7daa8a9a8109254daf4eeeacff25f632820288fb01ee45f6f", + "bytes": 828 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00128/action-mirror-desktop-report.json", + "sha256": "ce9a779ce2d03bc2a2bda252c40aabb56c649be858fe82486ed04bfa96a04793", + "bytes": 1358 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00128/action-mirror-local-exact-report.json", + "sha256": "7a91dc7d6c72d100a7da42646adeb100efacf81dd25c2b12672281d86702b37b", + "bytes": 892 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00129/action-new-desktop-report.json", + "sha256": "834607cbbbd91aa8ad74ce2f8818cca54dd5adbf4e871b8733853c924eac8c75", + "bytes": 437 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00129/action-new-local-exact-report.json", + "sha256": "abe030dd587dd2e21d04a3755a9294eb26c545f5d645c0910c2eeed4b5670430", + "bytes": 749 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00130/action-paste-desktop-report.json", + "sha256": "1494252e4ec2870131a2d810a5bc884374edf35272926a0943ac230a67e24fb7", + "bytes": 1190 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00130/action-paste-local-exact-report.json", + "sha256": "6f37a4b1cf1af54bd8437a0df2ed4389f12fa830e298f86c2f70b67e853ffa61", + "bytes": 905 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00131/action-previewrange-set-desktop-report.json", + "sha256": "e0ad513329a4a26d70e239d65c30b9048e78c1fcb480a6e4013d941e85d94470", + "bytes": 433 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00131/action-previewrange-set-local-exact-report.json", + "sha256": "7cd2170ba8134e088c23a4939d96f9a23b62779370051fac2185c7ad092e20d0", + "bytes": 721 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00132/action-push-down-desktop-report.json", + "sha256": "1341e50c48f9adc16d7c9269bd31738d852299c4c8ed0ea03071efe934f5dabc", + "bytes": 706 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00132/action-push-down-local-exact-report.json", + "sha256": "3d9ac3404080630e5241a39902229089b2528e784ec3b107aced1d1956ed9b33", + "bytes": 1657 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00133/action-select-all-desktop-report.json", + "sha256": "06d1ae064a91784d1122141bdded039a4761ed15341dda9d9bb5f0649e9305bb", + "bytes": 1134 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00133/action-select-all-local-exact-report.json", + "sha256": "50808e1aa34a12e83afbe68bd47206b5990efb0e0a5c13b614e99abc8326c641", + "bytes": 735 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00134/action-select-box-desktop-report.json", + "sha256": "20f1d2012eff7ee00744009455d8b34fd3ced10ae681af80065d2761f07838d4", + "bytes": 1137 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00134/action-select-box-local-exact-report.json", + "sha256": "d6bb840a51e5845681d83a381a5eed831dd0b727816400518f884af44c80a256", + "bytes": 833 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00135/action-select-by-type-desktop-report.json", + "sha256": "4e7ad68e84576c6ef5153302911e682242b028f022eddf9deb18b39e28851298", + "bytes": 1241 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00135/action-select-by-type-local-exact-report.json", + "sha256": "7b07b6f31ad375a4d7461f375c2fb036021ef80d34176ecd0db37d752ff9b963", + "bytes": 860 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00136/action-select-circle-desktop-report.json", + "sha256": "405d31329386086ba1f833795630a0180880bfce17e02d93fd586ce15bb6f1c0", + "bytes": 1146 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00136/action-select-circle-local-exact-report.json", + "sha256": "489863284d53857629642ae8fadb9c7066a4c492117eb8b7cbe0c823d65d9db5", + "bytes": 848 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00136/task-context.json", + "sha256": "fc4b89652b93f26d0e7ee929ca442fa4954e47b677ddb75604d3dfacb0c1498e", + "bytes": 5450 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00137/action-select-column-desktop-report.json", + "sha256": "71916a53336e89a4be1d07e1fec163b215661d1554d86a1446a79dad0411ba88", + "bytes": 1146 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00137/action-select-column-local-exact-report.json", + "sha256": "c9747457cd2746e4bcd27c10c87564e92f74664c6d59129222e826b17ace7815", + "bytes": 848 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00137/task-context.json", + "sha256": "847fe153913ff003ef06c7f17c952667a603b31f95a5bc1a9a06fb8a077c6e6b", + "bytes": 5306 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00138/action-select-lasso-desktop-report.json", + "sha256": "0b08c6f6e71af41aee20187546477ea962cd84d8c4aade1d85aefd0e9f7f1e65", + "bytes": 1143 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00138/action-select-lasso-local-exact-report.json", + "sha256": "80b30bbb0abd93e0e4d034d65e916171446e2549c7b224befb98f37f4e22eee9", + "bytes": 843 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00138/task-context.json", + "sha256": "9ac60ee1fef3eb3809f9cd4ba251272406a7f391cfe26621f076d098d9b0d524", + "bytes": 5316 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00139/action-select-leftright-desktop-report.json", + "sha256": "7caa17c7eb256a4bea4e95d03edd3e2b3a31286fd30581188915fca174a89f56", + "bytes": 1188 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00139/action-select-leftright-local-exact-report.json", + "sha256": "70476940cd710d7ac0305d1caa428e9b0ac7f71a8e7f55900139c94be7433ee2", + "bytes": 940 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00139/task-context.json", + "sha256": "70af07e854ffebad8dcf9403c3485732c25b7100062b49a0bf1f16fb9b730bbb", + "bytes": 5315 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00140/action-select-less-desktop-report.json", + "sha256": "f8527dd5d6d953fbda5b86bb1f42d6257b244a50296ceeb074c57a7b007a3aef", + "bytes": 1140 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00140/action-select-less-local-exact-report.json", + "sha256": "243dedadaa9776d7195883a99689e4cb8ee07599bf6c9786aaf8ee5910135e17", + "bytes": 838 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00140/task-context.json", + "sha256": "fc860324c53484ebaa1b1266cf51530abf10645c7e4546db5a495a25778ed03d", + "bytes": 5344 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00141/action-select-linked-desktop-report.json", + "sha256": "7072809e5ceef8161b75594deaaf809e31ea01a67ef6261ac2d9e9fabbb5e296", + "bytes": 1201 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00141/action-select-linked-local-exact-report.json", + "sha256": "261490656ea23b3c1800ca523a9d00911347b7f46e40b7b1d16e693470ddc8d4", + "bytes": 985 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00141/task-context.json", + "sha256": "cf032562d9fc471a6a72b2e8dc50021e383ddc0fd628fca14e971647b64c5ad6", + "bytes": 5337 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00142/action-select-more-desktop-report.json", + "sha256": "56944dfcacb924d7650b8652e52bfc254fb1673b40b04109a57f69ad67e3fe9a", + "bytes": 1295 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00142/action-select-more-local-exact-report.json", + "sha256": "91f1ef2bf23e75b681beea332836b359da9daf1902b8d77cb683b0e1657562a0", + "bytes": 918 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00142/task-context.json", + "sha256": "727493f7483e1fc0c42a516da51e469393881b5d15c5c362f04138bcd4c6944e", + "bytes": 5367 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00143/action-snap-desktop-report.json", + "sha256": "0da5db63e20db1a97fed02019368de5c6a758e6e34c8b43af52800d33dfa48e0", + "bytes": 1137 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00143/action-snap-local-exact-report.json", + "sha256": "61afb2360dc9814da3b741a133b07728b4a560676e7a436f995d1c07e1a4d17e", + "bytes": 1003 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00143/task-context.json", + "sha256": "8fbac173dc0bf7f0775d149161c7ea2ddf2cdd489f0f634669f860983806c1f1", + "bytes": 5342 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00144/action-stash-desktop-report.json", + "sha256": "c7b38407179b23e212f2fff6d34424b3c9f21e024f8ce936cae8f4a6746c4904", + "bytes": 680 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00144/action-stash-local-exact-report.json", + "sha256": "0dd4d10207503d6ea41c2d630b137471587961ceaa26870132936c8c91a72752", + "bytes": 1612 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00144/task-context.json", + "sha256": "45bc5f26682956126524444937f5af263c238b91d66f23f295a4bf37e49d42a2", + "bytes": 5311 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00145/action-stash-and-create-desktop-report.json", + "sha256": "05f9f233a10822b8de85e9b2070863d6f584e60123b4fc91e4d147a93e120df7", + "bytes": 718 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00145/action-stash-and-create-local-exact-report.json", + "sha256": "2820c70ab69ad674d6bee5424fceb98062fc33b0e309de98d0fe092515f0f4ea", + "bytes": 1722 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00145/task-context.json", + "sha256": "d785cecfb165f45ec6fcefe072c7cbed452e0ccb0ef6fba5fbf22b1b85224596", + "bytes": 5327 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00146/action-unlink-desktop-report.json", + "sha256": "a328397950846c7ee22fc7d0ab5788eb5174a8296f79c70763f007274977f5b6", + "bytes": 1025 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00146/action-unlink-local-exact-report.json", + "sha256": "2190f23628b0b4ecb68a8c5aafb096e412c7fe5f654bad094686b0700c8e388c", + "bytes": 777 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00146/task-context.json", + "sha256": "5fe6424cd98d78ea065bb1fb0cd34bae92552171592698a48182d08b943a4c08", + "bytes": 5304 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00147/action-view-all-desktop-report.json", + "sha256": "d1eb6d018b05f2f00d16498dea4d34d49f07ed4489f2ee0dabcf9409dd76deaf", + "bytes": 678 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00147/action-view-all-local-exact-report.json", + "sha256": "f23dd5aae9e4f649c6f29ae6cc971d7e358386bc4cbdd3466e7a075f065f362c", + "bytes": 888 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00147/task-context.json", + "sha256": "f03fa466b214f882119db539bbd7e6f79da5b16624e61f067d217dfc2480ac33", + "bytes": 5303 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00148/action-view-frame-desktop-report.json", + "sha256": "1895f562b9d1a67164256dd47b40a9a0280f5c45f0f153184cde5d54afca2d63", + "bytes": 707 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00148/action-view-frame-local-exact-report.json", + "sha256": "a5b4db975c15055bf295f72f5a52aeb66bfa5d81959dba303e89472ce92ff83a", + "bytes": 919 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00148/task-context.json", + "sha256": "52781cdba0dae2569088c7d80e4c5028cf1fefb5beb187dbd8f767d4b5122b32", + "bytes": 5317 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00149/action-view-selected-desktop-report.json", + "sha256": "002328f69d528d49570dda4976ea7ae0bb9229fa84f8a3bb1b5b6e3cc061a188", + "bytes": 1361 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00149/action-view-selected-local-exact-report.json", + "sha256": "6d2e450cece242a95b9b861292d74654ec7a8e3f191364a64c2c9b809a7e0bb4", + "bytes": 1089 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00149/task-context.json", + "sha256": "da34e2c587ec836b745ae0d69dc27b75c77ce17a73d18c223ac817e9365e29c7", + "bytes": 5315 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00150/anim-change-frame-desktop-report.json", + "sha256": "b0367cd339a51049f1eb511875c0beee269439694f99c2ee69513d71a5cd5453", + "bytes": 1159 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00150/anim-change-frame-local-exact-report.json", + "sha256": "358a97f75cf727ba385434f4e42c9e2857d046131fa15d1460f60eba68c72288", + "bytes": 910 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00150/task-context.json", + "sha256": "f3e8a8d194110019633496b55623589f1d13c8c3f062ec1c03aac023276a50c3", + "bytes": 5368 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00151/anim-channel-select-keys-desktop-report.json", + "sha256": "f71376397c83a380252e3e69a4f295153f2e46a7be0bf1de4871605bf0bec16f", + "bytes": 1208 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00151/anim-channel-select-keys-local-exact-report.json", + "sha256": "225fa87a2cfe47daee71149a1a2122ff9d9f80a602b48ff64bd11b0edf4dcc51", + "bytes": 917 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00151/task-context.json", + "sha256": "73e8f89962ce32d7446fe7a61cdaab43105628ca0661b840e93db8236b8691b6", + "bytes": 5367 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00152/anim-channel-view-pick-desktop-report.json", + "sha256": "e8ddb6bb82386a4c93fb2525ac8c76b965034f827d28c0caa7c2df349833dc7c", + "bytes": 1098 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00152/anim-channel-view-pick-local-exact-report.json", + "sha256": "813990cb73567d995b784e23f47b7493f6bd3da83278ba86e4161044bfb98b8b", + "bytes": 1012 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00152/task-context.json", + "sha256": "c2f0b3acf3ac531ec577583e204e75d15a41f12f3c00b5d7326fe85da4e68547", + "bytes": 5380 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00153/anim-channels-bake-desktop-report.json", + "sha256": "bcc459445eb7da0b2898302b72b726cd128572a25c23012dc7dfee9b03d945a6", + "bytes": 1018 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00153/anim-channels-bake-local-exact-report.json", + "sha256": "517f2a16e4a3a46e52709c58987e940d1c07235adc8c4c9d6401363173c7d09b", + "bytes": 1014 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00153/task-context.json", + "sha256": "076fcdce0aaede9f992ce804e4e2cabbc2bbc69a0316038bba6880704933d26d", + "bytes": 5328 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00154/anim-channels-clean-empty-desktop-report.json", + "sha256": "592c8f75f00e03e0af3f8cc6de4b9b681ab2d1c5546826d363a01be41e498848", + "bytes": 933 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00154/anim-channels-clean-empty-local-exact-report.json", + "sha256": "ec0ae1e60911edfaee779d6ed6c52fb5965d7b182534e1864c27aaaaeb1a7795", + "bytes": 959 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00154/task-context.json", + "sha256": "e03fd089cd8874792ee9c5aeaf32843742f0522ad71f47c12c1e5ef674c4352c", + "bytes": 5374 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00155/anim-channels-click-desktop-report.json", + "sha256": "c080797b74218a9ca21654420e96138ae7fc7e795d9f821a1ca1285bdb08038e", + "bytes": 1193 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00155/anim-channels-click-local-exact-report.json", + "sha256": "f76c822378b6dffd7a247354d33874515aa551e952401e82188a6e7337a67d55", + "bytes": 893 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00155/task-context.json", + "sha256": "b47551bafd1fd13f5ed2cd5e9dbf642df1472c6403e1b4c8902e3c6802026146", + "bytes": 5400 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00156/anim-channels-collapse-desktop-report.json", + "sha256": "0c7633299bc11c3b2dcc6c255e557b625d61e4a6214b717dd19f7eaf59e2c06a", + "bytes": 914 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00156/anim-channels-collapse-local-exact-report.json", + "sha256": "469e345742980e8647110df56278592ac12e6b945b6d45e11f9ec2da5c8cb094", + "bytes": 936 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00156/task-context.json", + "sha256": "67d970a10a88c35ee050d4b35ed5dba501907c669c9d36467e9e4151c7593c15", + "bytes": 5357 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00157/anim-channels-delete-desktop-report.json", + "sha256": "330b2caa7f2f2dcbf4f903a8ac8bd1fdaf22fa676014fd0a2aa58675c28e77e3", + "bytes": 555 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00157/anim-channels-delete-local-exact-report.json", + "sha256": "667833b173528247f33341fe15edf52b4389bc44e0de4a6dc1fb2e14ee57a986", + "bytes": 744 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00157/task-context.json", + "sha256": "94c06044e7620dfb82d250775d7a8460cebcb13327e805442ff47585b610574a", + "bytes": 5330 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00158/anim-channels-editable-toggle-desktop-report.json", + "sha256": "c700699f731764385ab6a9103adfc3592effdae2dc09b913682b134de16298f5", + "bytes": 1015 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00158/anim-channels-editable-toggle-local-exact-report.json", + "sha256": "4e1e28c4baa75abd098eaed07ea83fda9676d6bd875dafac9742bd1d89cf16dd", + "bytes": 863 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00158/task-context.json", + "sha256": "35a89633fba80fbb4df306e948e31117bf1189e7a9c9b8458e391d3cdbb3ae45", + "bytes": 5409 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00159/anim-channels-expand-desktop-report.json", + "sha256": "56feacbf947430f5799612b9e01395ec2f901f455ef1811af58315bc97981c58", + "bytes": 1122 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00159/anim-channels-expand-local-exact-report.json", + "sha256": "705189c2b5571ee5645c50932fdff1bdaff3f9205cd031533969f1bc8d09418e", + "bytes": 826 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00159/task-context.json", + "sha256": "fc453afe062994a58a0bc5108a915f246afd8eb75b9a90cb30ec47fd92aac464", + "bytes": 5343 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00160/anim-channels-fcurves-enable-desktop-report.json", + "sha256": "694c307f9ccc22b4eca8e64185e5397bd778e45da07c5ad26a60120220ebe4c5", + "bytes": 1030 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00160/anim-channels-fcurves-enable-local-exact-report.json", + "sha256": "42b1b070a9975db3284dd616a3c101cf1ec1ee3701372f77eeb04e0a03e52b9a", + "bytes": 854 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00160/task-context.json", + "sha256": "c1a8d564de0ad1c377f22af1f6c8152256e66c3da974a5f18e2716f48334276e", + "bytes": 5394 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00161/anim-channels-group-desktop-report.json", + "sha256": "c7df9940aecaa3fa127116325e053c182a183167d8f222e9af072c6415ef379b", + "bytes": 1055 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00161/anim-channels-group-local-exact-report.json", + "sha256": "e455f560ac9e6047b84971a96b3aa7f58ee4cf08dccf5f6394310820d10715d2", + "bytes": 792 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00161/task-context.json", + "sha256": "cdc0f7f91f24f2ede4406c025ce8ee0eec9898a512c8d255c915851537263f30", + "bytes": 5343 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00162/anim-channels-move-desktop-report.json", + "sha256": "8b12fad79622d6171f5afce0017b89cae20fea109dacc0851c10c8d96d19f1c0", + "bytes": 901 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00162/anim-channels-move-local-exact-report.json", + "sha256": "0dad9d166f9fdd3466f0a96bc32e02118259a5aa7ac8312d716c93fb0b8fcf31", + "bytes": 791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00162/task-context.json", + "sha256": "0ba8fe850b95ac1b5d55feba65ac8b994ead423ff98be590491b2501c378bc3d", + "bytes": 5298 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00163/anim-channels-rename-desktop-report.json", + "sha256": "ab51d4972965553550c3a31a01d5ead41d4a1edb4f3d5229e0072035f032cc63", + "bytes": 1083 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00163/anim-channels-rename-local-exact-report.json", + "sha256": "f83a4dc64627ec6679826be1a49942a869af4ffc1bad317ecc60a9ff056729ab", + "bytes": 855 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00163/task-context.json", + "sha256": "1038e4979b2f480d971af8c15a568db264a1612f6e86ec49cec3cf6f25a48684", + "bytes": 5270 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00164/anim-channels-select-all-desktop-report.json", + "sha256": "27582c87f7d705f7b2a935d29df9fd4b65e60f8cc7f1e1f9803b2788aeb43f22", + "bytes": 1274 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00164/anim-channels-select-all-local-exact-report.json", + "sha256": "8bfb174ed2610c2d518c5c62721e489e3314875d70f12cd3304b10ca4e7e3d6e", + "bytes": 821 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00164/task-context.json", + "sha256": "eea368ca4eb17f607e0f948b80e2c1964d7a1cf9f44cb85823ba078783d3eb81", + "bytes": 5382 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00165/anim-channels-select-box-desktop-report.json", + "sha256": "3e4d0f296a24bbc60e94edbcdef95d0256311b3c7465ee975b1a072a3553340d", + "bytes": 1299 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00165/anim-channels-select-box-local-exact-report.json", + "sha256": "1ea7eff113700fb1c7294d3737dff83df271963f62997583540cc1e998f00e21", + "bytes": 821 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00165/task-context.json", + "sha256": "63a484301223406881332d310e647407758f09f6c5c3b1d0e9836a404332973f", + "bytes": 5359 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00166/anim-channels-select-filter-desktop-report.json", + "sha256": "a8a86feb4763e08f655de55c654befa13d42b490ca4e6efc5d6736170f0d6a37", + "bytes": 932 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00166/anim-channels-select-filter-local-exact-report.json", + "sha256": "538167ec546842a9206d6232a213d271dabe96f5801f074b6804a1d14e12e4ba", + "bytes": 831 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00166/task-context.json", + "sha256": "3ccd5a0066ad1ca475e020ebb4b6eeb724b431b7a6ffc125553b3a6048cb4449", + "bytes": 5371 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00167/anim-channels-setting-disable-desktop-report.json", + "sha256": "9e647359438803ddfd6065611d064e723c5371b3ef696cbfdfdb50c166ab3835", + "bytes": 1040 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00167/anim-channels-setting-disable-local-exact-report.json", + "sha256": "c73201d925e7526d25f647870a346976773ffc4cd4abb94325d4cf1261def14d", + "bytes": 890 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00167/task-context.json", + "sha256": "496f89ec6d6545cd16d0b787e741e3dcb78d992d308fea0533183214d5325e6a", + "bytes": 5393 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00168/anim-channels-setting-enable-desktop-report.json", + "sha256": "d2265aaf9aee9d9bcc8a72f66f9878c4f44b4a5c28e5d13ff388c194adac773e", + "bytes": 1036 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00168/anim-channels-setting-enable-local-exact-report.json", + "sha256": "68bd2a37e4fb89e130cf7d9fec26e23f60903543b39cc33813b84bf525313817", + "bytes": 884 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00168/task-context.json", + "sha256": "30def7e3fbd5e1786203e5c88aa3c5ba22f40af2fb0e9ad1809be6183151683e", + "bytes": 5363 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00169/anim-channels-setting-toggle-desktop-report.json", + "sha256": "6bc9a6a97c53a6b4fa510c0b670bdf341ec4f82d0586a21c04438eaeda9a10f6", + "bytes": 1036 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00169/anim-channels-setting-toggle-local-exact-report.json", + "sha256": "e493b763baef0ff2d5e2782107a92b66db63d0ec82ffd8c677df7d30f68c76fe", + "bytes": 884 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00169/task-context.json", + "sha256": "39bb03cf425db496671100f840eb671a90b9f0802d524c6718869ee436a20b1a", + "bytes": 5346 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00170/anim-channels-ungroup-desktop-report.json", + "sha256": "6da3c452af5fdefcbb5a7390e5e7effe440dbb8602bc7c4ee7d57f38e1f58f05", + "bytes": 1015 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00170/anim-channels-ungroup-local-exact-report.json", + "sha256": "4de0a7349f21103b953ebbd860f983d9c199fe682af77fc2b4198fc03993ec53", + "bytes": 838 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00170/task-context.json", + "sha256": "7a62f73abdd10efce2e0decb2bb437f62973fdd572ce199ec637d54433a95d8f", + "bytes": 5348 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00171/anim-channels-view-selected-desktop-report.json", + "sha256": "20a3371ebf683cc16911820be35f1c4ebf8af48132339574937899d267568fd1", + "bytes": 1226 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00171/anim-channels-view-selected-local-exact-report.json", + "sha256": "2829a891ac2d66ca3d5b0a4fac8b88bfe267280c8fb05f080b49e3e2cf880c8d", + "bytes": 1094 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00171/task-context.json", + "sha256": "699e03fa824e973741bcba370b5de0f0c27b8462b7c205287878dc5fed8565d6", + "bytes": 5331 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00172/anim-clear-useless-actions-desktop-report.json", + "sha256": "d2b1784129a81b79ef30e8203ab1192613da16bdca25b15f18ada408d355a410", + "bytes": 1771 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00172/anim-clear-useless-actions-local-exact-report.json", + "sha256": "c7cfbd670b09aa46a4597867af4d8e3de6c14030dac5c9d5f21f09a9db789973", + "bytes": 948 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00172/task-context.json", + "sha256": "e502eadd8178060357899c10e31d70ad63553c927ca240773ee7469466ee0730", + "bytes": 5446 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00173/anim-copy-driver-button-desktop-report.json", + "sha256": "ba54f7de66ecfc9fb100010d28b4d26b61b585af83a8981ff1c9a77869cacb37", + "bytes": 632 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00173/anim-copy-driver-button-local-exact-report.json", + "sha256": "561380ce0b0a8d06afe41a63c4c86e3c990ff0fd4fb08aae1433b4810377752e", + "bytes": 1067 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00173/task-context.json", + "sha256": "72c30f4fe3fefec72959112af15987a0d1fa85483ea1a465f980584c68fdef9d", + "bytes": 5478 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00174/anim-driver-button-add-desktop-report.json", + "sha256": "ec69ea475f22b9c49318c7bf984200c513e6841b953d837f1cbfc925fe53307b", + "bytes": 678 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00174/anim-driver-button-add-local-exact-report.json", + "sha256": "755195e7c3c31c8d3cf19cd51f569a25d0d694312c32101cea49749a15fdb3ed", + "bytes": 1193 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00174/task-context.json", + "sha256": "6a10343b930d4e375e39b8ce1b6d1ffba2d3c535daa70bf49f5c323568f1d500", + "bytes": 5446 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00175/anim-driver-button-edit-desktop-report.json", + "sha256": "0e712a373d6c4d28cb14c38fcd911987c7216466ef52a9d3d19a3ce34e913112", + "bytes": 650 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00175/anim-driver-button-edit-local-exact-report.json", + "sha256": "9bc321582ce9a45951ec4e8a43236b69a571053fc8cf48fe4cdf8b29113aada0", + "bytes": 1086 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00175/task-context.json", + "sha256": "80eb9962039ff734c5b7c5a3f908be62c92a5cffd9cfe4de80f19ccd07ad9670", + "bytes": 5592 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00176/anim-driver-button-remove-desktop-report.json", + "sha256": "369081c441e48ee8ad39d9f4c90a4c2f80b4802143f0243e2d3e0d92f9198ee9", + "bytes": 534 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00176/anim-driver-button-remove-local-exact-report.json", + "sha256": "44e366eb69905cd48d27decfab478c13dd6b1b715fcaae8ef7d3c75d09f1a311", + "bytes": 805 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00176/task-context.json", + "sha256": "0811175e4a76169bdf347bb9fc858e67d4559ce1aa40b81e9c0e9b604d122550", + "bytes": 5606 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00177/anim-end-frame-set-desktop-report.json", + "sha256": "332660f12353d5750b4bc613f99c77fe3dd126bee2f9051c9d742db7c5f09c3f", + "bytes": 519 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00177/anim-end-frame-set-local-exact-report.json", + "sha256": "50b9716d2813795e26324a9dd3c8e32d4b8baaee92e45b893a47bddec18657b0", + "bytes": 780 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00177/task-context.json", + "sha256": "06ee966e3f4ae02711eefa7b9562493e348ec9fd2fdf09592ff3d5f5d4f2b89c", + "bytes": 5538 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00178/anim-keyframe-clear-button-desktop-report.json", + "sha256": "ba35b96dc8c7aa46427b64465aa223a87ffe2d5bf37ef42a4bd17afc430b4bee", + "bytes": 1085 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00178/anim-keyframe-clear-button-local-exact-report.json", + "sha256": "9969372551c877505755cf23454610ca8211cc77a6e1267b366e848ebd69e30d", + "bytes": 1587 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00178/task-context.json", + "sha256": "ff864d8ebd9e42c478667639926c27b4580c35baf72c77f7cb0df71d0022e179", + "bytes": 5531 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00179/anim-keyframe-clear-v3d-desktop-report.json", + "sha256": "2e63bae9cbb613ab96faf2fa802e34caf5aca2e7c3968c93ef0dc9de6a16fecf", + "bytes": 1157 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00179/anim-keyframe-clear-v3d-local-exact-report.json", + "sha256": "6b675af2fd56ce8ee146676101ca9f0be6365a9702b80d8def8c27460a1e7ae9", + "bytes": 1566 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00179/task-context.json", + "sha256": "74ae2d753d5a89d6692a3e73552849d7303e576de19f54d78311b53ba49c5608", + "bytes": 5764 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00180/anim-keyframe-clear-vse-desktop-report.json", + "sha256": "6885cc9103c1b9c8396a684559d08d0899ca096580278a5fa321ee6cec4412ec", + "bytes": 1226 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00180/anim-keyframe-clear-vse-local-exact-report.json", + "sha256": "9e05fde557e26ac9be8dc8c7983be4a25e7637542643aa8b38708a1868de27ad", + "bytes": 1693 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00180/task-context.json", + "sha256": "a90f35e4b60f26bac6d8900a1838d08cbfc20638f65f45f8dbf2306c7160f1d4", + "bytes": 5739 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00181/anim-keyframe-delete-desktop-report.json", + "sha256": "cec3f76e20a38572bf4a38789e1df1aa83ffd4f332e940c238e4d633dd841c7d", + "bytes": 1552 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00181/anim-keyframe-delete-local-exact-report.json", + "sha256": "4e75034a44e46afef417e241e6c81d84a1d46a8bf34e779495d9c6885c3b8bfc", + "bytes": 2020 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00181/task-context.json", + "sha256": "ad1b7ad175eaa42b41c75f1a36d7b55f190c8bbd39d8861e7e7aaa016984b6e1", + "bytes": 5793 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00182/anim-keyframe-delete-button-desktop-report.json", + "sha256": "5df192b8cf82b0e53efa947f9102424cfccf05b29a4e293342ea2e3ace60b0d1", + "bytes": 1470 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00182/anim-keyframe-delete-button-local-exact-report.json", + "sha256": "097fdcab03f3e748077c3b1d8cdcfbb9a9b2d7df9b1ca03c54b9f0a3a637c947", + "bytes": 2083 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00182/task-context.json", + "sha256": "76d618d236a7741f912e09f4e48ec7bbdce9ac93c3fafee48dfe7ca2ebeae03c", + "bytes": 5779 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00183/anim-keyframe-delete-by-name-desktop-report.json", + "sha256": "105d464e66e7ac9c3cee66c3a33a47101c95b08f9851a875373d43370c48f70e", + "bytes": 1592 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00183/anim-keyframe-delete-by-name-local-exact-report.json", + "sha256": "3e8dd9268e4aa73f673dbbe5c9abc3d9c00acfdbe1cc019673c49925e342deca", + "bytes": 2086 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00183/task-context.json", + "sha256": "655cf1b0482f7159b63228a6db2bd2828836d707147f3de74727e9fcdc8a07f4", + "bytes": 5772 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00184/anim-keyframe-delete-v3d-desktop-report.json", + "sha256": "576e712c7d4d72dc15fc2b9a4b65748c2ddd4b43f69c86a57e3365621f19db43", + "bytes": 1458 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00184/anim-keyframe-delete-v3d-local-exact-report.json", + "sha256": "3737dbe1e6189cd8312cc3cd3f328e764b2a9ce173a48946e9413a82e8fa4a47", + "bytes": 2053 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00184/task-context.json", + "sha256": "41f3f005f99d3e9130a4335fa5cde7982598096f57756e5760f092d3b78792ec", + "bytes": 5742 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00185/anim-keyframe-delete-vse-desktop-report.json", + "sha256": "a7fb103d0746837b7d56ae89e6b8fa6de374f11cfff8cdf79d88fba199449721", + "bytes": 1586 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00185/anim-keyframe-delete-vse-local-exact-report.json", + "sha256": "aecbd1f8b711b2299db7e7665931a549a7318d638942eb2d343d680fc0ce5acc", + "bytes": 2151 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00185/task-context.json", + "sha256": "3badb8af0ff6bd1168e2576568f8be4c44f4b77a175ea86b8e6650a9ef92077f", + "bytes": 5653 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00186/anim-keyframe-insert-desktop-report.json", + "sha256": "dfb8191a85b427ab80a3f6cb2fa118f0f7ddc1ce895b93c8c6e4ddf34f4d780c", + "bytes": 1555 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00186/anim-keyframe-insert-local-exact-report.json", + "sha256": "17e4943e084a1323e1de9eca68039b4a6a9e9d060c9e3d3e44e663c8a9d93ce1", + "bytes": 2024 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00186/task-context.json", + "sha256": "4115c25ef7bce2ce0cd3fcadedf6c8aba24fbcd4eb0f037f60f1d0548316d540", + "bytes": 5642 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00187/anim-keyframe-insert-button-desktop-report.json", + "sha256": "b7de5f8ac81d96e316a6d13b1f03650339841bf043ff3a4c9b3396a14420f506", + "bytes": 1473 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00187/anim-keyframe-insert-button-local-exact-report.json", + "sha256": "460c2285310d2cf456ced4f1438ab6fd609a1470dde4a37cd09b349099f90873", + "bytes": 2087 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00187/task-context.json", + "sha256": "cdfc0b01d9e76dfaed39d9e6c44836cf3aea3df2a363689177e775d2286e0182", + "bytes": 5718 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00188/anim-keyframe-insert-by-name-desktop-report.json", + "sha256": "d89d0950420ef0a81ca983619bf0f168b173e1a631769bcb4b342cfe3b2a9c09", + "bytes": 1595 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00188/anim-keyframe-insert-by-name-local-exact-report.json", + "sha256": "4928e35b98ac71b76c68fe2eccbd86481bb854123d428b1af66fbc7270df7e42", + "bytes": 2090 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00188/task-context.json", + "sha256": "64ceb67dd3d00a7e07a5dd4f263527326442a591b1b5a404c2235809c05274d0", + "bytes": 5779 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00189/anim-keyframe-insert-menu-desktop-report.json", + "sha256": "8f01c695716b3902e0d8caa4b335bc67257e4688a4af5e35fd61b5d98d9b3d03", + "bytes": 1581 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00189/anim-keyframe-insert-menu-local-exact-report.json", + "sha256": "a95cc2b84481263298f5bef1fbe0d46a2ab272de25ce5e0a39e84457453e0144", + "bytes": 2067 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00189/task-context.json", + "sha256": "46d321ed3909a9a52fdaf4b2c1f2ee9be2d16c2c8aff32ce4baca43c09f41682", + "bytes": 5773 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00190/anim-keying-set-active-set-desktop-report.json", + "sha256": "69ff6f5b3862697e6d17545c63264a0361aa9f6996b874897dd25a138257bc38", + "bytes": 1625 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00190/anim-keying-set-active-set-local-exact-report.json", + "sha256": "70e94768b98b0b14a1d03e9e016e62374838b4ad6fa68f893519fed6674f709d", + "bytes": 2545 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00190/task-context.json", + "sha256": "aaff27f84e2eb6f2d49c31ef6467e512acd01efca64a46dbe0fb967f19aedd98", + "bytes": 5706 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00191/anim-keying-set-add-desktop-report.json", + "sha256": "b19f86edd48c4fb40f3077af333baa89127d51218ca110861f2e77063caff304", + "bytes": 1599 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00191/anim-keying-set-add-local-exact-report.json", + "sha256": "d244b7788db82edae28bf1ceebe5d5a8978b317ea8a259abd4ecc1c071fdc68a", + "bytes": 2498 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00191/task-context.json", + "sha256": "640288c7b699719aae7d92a951846b7dcdd31e944e1ba88440300331de3af570", + "bytes": 5691 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00192/anim-keying-set-export-desktop-report.json", + "sha256": "14b1c5675c9088305246d5afea8f291ef989c6735c3795e377b42524af2f7fed", + "bytes": 1849 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00192/anim-keying-set-export-local-exact-report.json", + "sha256": "0544edee932393df992ac05a4dbb07b4b1c82e4045cb15b674b182989105d0fa", + "bytes": 2738 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00192/task-context.json", + "sha256": "5bdca225c7027399992cc26b67f0e7ed37726d1adc7afd1009677a9eaf491c30", + "bytes": 5595 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00192/WebGapAnimKeyingSetExportSet.py", + "sha256": "ef38d3cd23ef00a277e66202010b2001efca51cec053b34762924db32592f966", + "bytes": 471 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00193/anim-keying-set-path-add-desktop-report.json", + "sha256": "0deab04ebdbf06c6b344707bf3025677d445c6995cbe3ea1268808c59ec74472", + "bytes": 1991 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00193/anim-keying-set-path-add-local-exact-report.json", + "sha256": "61e41fbc56bc7c6c1cbceb4ad3e28cb599e072f8c865f0a573091b47ba53790f", + "bytes": 2950 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00193/task-context.json", + "sha256": "d459521fe19a776c7b81dd7b49dc3aba7e3f5eba864612f0817fd1ca9bb4dda9", + "bytes": 5598 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00194/anim-keying-set-path-remove-desktop-report.json", + "sha256": "36ec6d4232418b56ea06b375bd0562718ef0cb787c393a860fcf69b663aa3a89", + "bytes": 2042 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00194/anim-keying-set-path-remove-local-exact-report.json", + "sha256": "a840e751c3e8c7ef6b02f388e8db434ebcd6cb4d0a151fbb3350d98f6689f438", + "bytes": 3022 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00194/task-context.json", + "sha256": "ecd39a4fd55eb2f7fcc3bacaa8046ab21d56ce5ae8e936898c2fa9a85b9f08cd", + "bytes": 5588 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00195/anim-keying-set-remove-desktop-report.json", + "sha256": "67fc9add6112f6513a95028ba2170d468b1ca82d83cf1b8d1afe2da98b907b15", + "bytes": 1678 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00195/anim-keying-set-remove-local-exact-report.json", + "sha256": "f1a6dc449055b1cddb1f796b885eaa347cf1c64ca082af7940c9c751a59dec9e", + "bytes": 2602 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00195/task-context.json", + "sha256": "e462b1602ed761491ad2054fc7152fb36306b21a0c14f2511a3cbc21b2b740d2", + "bytes": 5548 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00196/anim-keyingset-button-add-desktop-report.json", + "sha256": "a213760a261879356db09714df719221fef2f0a4c26865e12396b80089c21583", + "bytes": 1919 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00196/anim-keyingset-button-add-local-exact-report.json", + "sha256": "3146c77b1f77e3db9b1dc855c31408b0c076ecfea258aea8a86a834ab06ad9b3", + "bytes": 2883 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00196/task-context.json", + "sha256": "325c63d0601e3b9adf8afb69f6d3cbfd970e3fc281eaa70b13d7cddb0399e324", + "bytes": 5572 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00197/anim-keyingset-button-remove-desktop-report.json", + "sha256": "223020f990cda11b261e3d0daf3171450718604cee9f923b5bd3aad8c9377b8a", + "bytes": 1968 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00197/anim-keyingset-button-remove-local-exact-report.json", + "sha256": "e44421253fcb26b9d313d9f97324b22a46fa8bbd8b734508416bc7bcd43c8f7b", + "bytes": 2957 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00197/task-context.json", + "sha256": "e94b2c9d77d75b841ae3fe60df18005fbbd9da080417e91ec06c79ca62a3d67f", + "bytes": 5605 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00198/anim-merge-animation-desktop-report.json", + "sha256": "e170913f6dd5161a10853f04c2e56ea1181de5de12fdf5fbb1159745dcd0f757", + "bytes": 3405 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00198/anim-merge-animation-local-exact-report.json", + "sha256": "914ef24f01a81d7baceeed4f67f317abf529cedec6ddbbd22c1ed35bb94039e2", + "bytes": 4909 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00198/task-context.json", + "sha256": "33a275667991c5fc655596a0197bb46467f233a307bcb7752f5531ee9a3819d3", + "bytes": 5605 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00199/anim-paste-driver-button-desktop-report.json", + "sha256": "b20074b47768751a5e6c884165c4119e95296eb7a6fc4812e8bef3676e7aaf08", + "bytes": 1558 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00199/anim-paste-driver-button-local-exact-report.json", + "sha256": "7f860445f0e6889e6993e458b0e81f075c5b97fe8c2cf35b0eae4846e2d4cc5e", + "bytes": 1391 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00199/task-context.json", + "sha256": "e054e382aa573e117fc34d47e2e2d8733ac17d75d490dc4f5de397e3fb9658f7", + "bytes": 5614 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00200/anim-previewrange-clear-desktop-report.json", + "sha256": "b1e7212248ff23d323e9c00645db52b38c4570f42c344b6325f1506c404704c4", + "bytes": 634 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00200/anim-previewrange-clear-local-exact-report.json", + "sha256": "7ba44c02fcfa34df1c4e25fb3567474893b47dc4a20522f33634cd3ad36fe940", + "bytes": 822 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00200/task-context.json", + "sha256": "1cb7806458458bc5e417a84b556e3fb777457f2af1e1dcd2fc4936911cfc508a", + "bytes": 5554 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00201/anim-previewrange-set-desktop-report.json", + "sha256": "9a4abf76db56b660808f66834d941771a0cf860a662d53771ff8bf309bf2a162", + "bytes": 591 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00201/anim-previewrange-set-local-exact-report.json", + "sha256": "7751033cb2d246ed4b87d10592894f27574d3409b5d48f3161a583f186786b67", + "bytes": 848 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00201/task-context.json", + "sha256": "0ac3856c852d6f7e08c7709f2b6435b46e1ddb2514004d9c9caf10d255b71e72", + "bytes": 5472 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00202/anim-replace-action-desktop-report.json", + "sha256": "fdb5531aa70842959bb57b8b9490c9839037af9a69191e23834e8793b507ac10", + "bytes": 3818 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00202/anim-replace-action-local-exact-report.json", + "sha256": "c122dbb9daadb8a449032ac742d308e7b9473bb4d05ae7855cf80ed3982f4263", + "bytes": 1065 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00202/task-context.json", + "sha256": "1a27a9755974d092a7c1a3599657e27f19ca2d56455836c6f99142547c0866b3", + "bytes": 5431 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00203/anim-replace-action-new-desktop-report.json", + "sha256": "1017546d241a1e8b8f26c02bb392269a1325b18cbba90b1598f786250f13976a", + "bytes": 2390 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00203/anim-replace-action-new-local-exact-report.json", + "sha256": "d743947398ac1b4beca0f6cf86f676bf24d668488e1a9a575ec561d2445a1ed6", + "bytes": 1063 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00203/task-context.json", + "sha256": "772d0122a85d60e0f0ed73fb53f700a89d251e2f8581ca84b2ee01c7792e66ca", + "bytes": 5570 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00204/anim-scene-range-frame-desktop-report.json", + "sha256": "fd7943551bf6662d8cf43f623cdb966e7242b172eff8ca0f3bfee71c3b67dbed", + "bytes": 765 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00204/anim-scene-range-frame-local-exact-report.json", + "sha256": "3195131f4c4cfa050656a4a301840d857f5eb65e2929aaa867d3b056d3fe631c", + "bytes": 988 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00204/task-context.json", + "sha256": "5b90524611e783f9f9103ebc4d9504450edad0b471f9d86f62c2602c7c7d2edf", + "bytes": 5566 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00205/anim-separate-slots-desktop-report.json", + "sha256": "d3976e54b5617745cd29ed3979a030553a6692a54d8cd59454593efac1e419be", + "bytes": 3023 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00205/anim-separate-slots-local-exact-report.json", + "sha256": "421feb4b3b822a8bb13999e268a42f3378408d4d725879d1e05c3c8efe359a84", + "bytes": 1055 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00205/task-context.json", + "sha256": "744b861440cf850c81545c532cf78c6c946c2214f539d14da72d7e2fda23ff51", + "bytes": 5451 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00206/anim-slot-channels-move-desktop-report.json", + "sha256": "17e021647d84852ea074b134a722de8dedeea70db3cf180fa60456892ebc86df", + "bytes": 2953 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00206/anim-slot-channels-move-local-exact-report.json", + "sha256": "4c92663dc8eb44d504ba95d4a978211656bd44273ff53cb468101f00ef20f8a3", + "bytes": 976 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00206/task-context.json", + "sha256": "da58033c8325bdf4c16687776315ba7689c9a0d908f327dbabf98507699bbc3c", + "bytes": 5504 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00207/anim-slot-new-for-id-desktop-report.json", + "sha256": "62998821fb29ec9edb1c2796f984e009091cb9d12ccca4ec058094aea695a6f3", + "bytes": 1605 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00207/anim-slot-new-for-id-local-exact-report.json", + "sha256": "2c843b2611ac386e68943adb36fc826dcb694c8fb30df9b0abf10f8970b4f4fc", + "bytes": 883 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00207/task-context.json", + "sha256": "37746bd730e6642f8a2ca14fe36b590977c2a409cf0df23e338ef43d7a22fd13", + "bytes": 5523 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00208/anim-slot-unassign-from-constraint-desktop-report.json", + "sha256": "a303a5e1060fde95fbaaa0cf6e759cb4af330cf233b65ae1462953960fca51cd", + "bytes": 962 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00208/anim-slot-unassign-from-constraint-local-exact-report.json", + "sha256": "cc7a531c48dc232d822ae6ffcc19f459d44d02976eb3b2f04133435d7a98b158", + "bytes": 1044 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00208/task-context.json", + "sha256": "d5bd4bdecaafbb137b89769a001b6e966e47d31059bce66b524384ea3e8a0a01", + "bytes": 5590 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00209/anim-slot-unassign-from-id-desktop-report.json", + "sha256": "12d1d6492c6d682a519045cc840c0e8f8b212b9eca9f0bdfa15536dc4602f17f", + "bytes": 1438 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00209/anim-slot-unassign-from-id-local-exact-report.json", + "sha256": "e42355c5cd82a7b06e5560312869fec9eed33ba7db613668c7920b3363901122", + "bytes": 957 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00209/task-context.json", + "sha256": "c6c9e58a950aee3230dc6a2a04f1ec5b8273caf2a4cf34cf86006193eaf4f78e", + "bytes": 5544 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00210/anim-slot-unassign-from-nla-strip-desktop-report.json", + "sha256": "35c89ff2c01b3887949572d83f27665b76eee49c5486e40b2c1b9e649916c9a2", + "bytes": 1070 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00210/anim-slot-unassign-from-nla-strip-local-exact-report.json", + "sha256": "d83b48f105f430cb7bbc2151b837fa589944a7c8d36a6156269ce4552aea5d41", + "bytes": 1040 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00210/task-context.json", + "sha256": "8d6bebc0df33dd02879078f9d824883255a290c2d9b72609bbecf689e3b49c66", + "bytes": 5541 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00211/anim-start-frame-set-desktop-report.json", + "sha256": "b17a936ea363e216aa819cd90c79669a8f95c0c9cdb6aae74c5e24df13a4e240", + "bytes": 527 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00211/anim-start-frame-set-local-exact-report.json", + "sha256": "b145f06715d9d6ef03a304e79d9cf635912db731d00991cd3be4dd56a6cc1a71", + "bytes": 790 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00211/task-context.json", + "sha256": "910687fefc3ca3b8661d437c62816ebb19c3c263ec745ec70dcf039dfe0fcc43", + "bytes": 5454 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00212/anim-update-animated-transform-constraints-desktop-report.json", + "sha256": "6e486664dd967eec8f93569db555e23400fc147d40d172b7c1af19188e7e25e1", + "bytes": 1513 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00212/anim-update-animated-transform-constraints-local-exact-report.json", + "sha256": "98592f2cfe53ea6f2d59b34203211b0a45d3969ff546857313e2463f7f8e7b57", + "bytes": 1207 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00212/task-context.json", + "sha256": "b1e138449cd81cc88bfe78855410f9b640db035bbfc59bc21fd750f5887ca3e6", + "bytes": 5621 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00213/anim-version-bone-hide-property-desktop-report.json", + "sha256": "35c3ee64110db16c946056cd3c3044321d6101a4ee68c2fd68038cbab4576616", + "bytes": 2086 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00213/anim-version-bone-hide-property-local-exact-report.json", + "sha256": "117e80e3ee5caf95979201d85b650de27967196242bf6f5656d24c3cec973d85", + "bytes": 1206 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00213/task-context.json", + "sha256": "a9cbb2cffc15ad50810b4e806492a6dda84b30757f085c17a0c754c4160c9868", + "bytes": 5635 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00214/anim-view-curve-in-graph-editor-desktop-report.json", + "sha256": "127e6168e198cae8661d358b457d1459f9b515f79d2a6e86aa0c1022fb3210c6", + "bytes": 2044 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00214/anim-view-curve-in-graph-editor-local-exact-report.json", + "sha256": "bfa381ab96c2f2f0d9d16dcc7afd7a0200284a5704610cb70a6f0db402c3698b", + "bytes": 1513 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00214/task-context.json", + "sha256": "905f7ee4e419109e77a274f385c405132f5e471cf0c4f0e24c363fd60dffb431", + "bytes": 5704 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00215/armature-align-desktop-report.json", + "sha256": "f0f94981885773704748c302cad95cf7b0a24137cfb6d36921e8d464c408cb40", + "bytes": 1667 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00215/armature-align-local-exact-report.json", + "sha256": "d9b19ad3b36bc1a7303207b9ed9f3c2b32df072fce5349718b2783019e144e4e", + "bytes": 1250 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00215/task-context.json", + "sha256": "82b2e30643461bfcff8612e29aebe38d50f2585b8be9b1c780ae6d762298ab87", + "bytes": 5648 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00216/armature-assign-to-collection-desktop-report.json", + "sha256": "f9ea1aedef9d6286d5038e9244cd82fec979238d3d72da76201b7bc3ac18b7e2", + "bytes": 1396 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00216/armature-assign-to-collection-local-exact-report.json", + "sha256": "4d063e44db5ebe56585caf6e1e28c9ba5dfaee8ddd95c4402a0d40474b94187c", + "bytes": 1381 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00216/task-context.json", + "sha256": "0f93744560fa885b9cf0d8e1c6ed605f922ea4bc44c521fee023adae2c0e5cae", + "bytes": 5611 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00217/armature-autoside-names-desktop-report.json", + "sha256": "2ccaaa1f2b8549abc17bd0640add62b658ccc77b9a2792456df929dd209e466d", + "bytes": 1625 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00217/armature-autoside-names-local-exact-report.json", + "sha256": "2a479e88f080b7e7530f1f8f6ac87fe5aa5ca7ffaf69a068eaf4eeb99b257e80", + "bytes": 1097 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00217/task-context.json", + "sha256": "0dc798480ef127c5528973b78ba24a99f8514b04212578e0f3b5633be8da06fa", + "bytes": 5707 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00218/armature-bone-primitive-add-desktop-report.json", + "sha256": "7176938d759ad47b1c4fd6a4c4b73cc3af615518f30540d535a0f997bfdfc3ef", + "bytes": 1395 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00218/armature-bone-primitive-add-local-exact-report.json", + "sha256": "042cee11ebc0ccac3108e51773fb486c08c8ef6f745d018b0abb6469678f4fb7", + "bytes": 1104 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00218/task-context.json", + "sha256": "42735f344b07d948bd9f302e4e21ae7580ca97506d5903667b56c24b4af02d48", + "bytes": 5597 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00219/armature-calculate-roll-desktop-report.json", + "sha256": "b4ea9eee1596aa99d045e7064b96a763faf7b29d6f7c79b95045d75ff26dd922", + "bytes": 1783 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00219/armature-calculate-roll-local-exact-report.json", + "sha256": "1c888b9739c03fcd5aed2b1de20a2aea3871c80cff6b6fcb464e09a5478f5c23", + "bytes": 1346 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00219/task-context.json", + "sha256": "1c6a55bdc4fd17687a7695b44fba71bd5ad26644919dbcd363b6a7dec07cbde9", + "bytes": 5638 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00220/armature-click-extrude-desktop-report.json", + "sha256": "5fe98d54a481df86862f9f3bcdcb854fa9ea4abfb7de9de6819a07beb2bdb4af", + "bytes": 3760 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00220/armature-click-extrude-local-exact-report.json", + "sha256": "dbe683725d4e05220b6abaf837450c31f66cb8c82eb4ef75130c332ba98125d8", + "bytes": 1894 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00220/task-context.json", + "sha256": "dfba3c91da5262603b2958c8011b317a5edd25bd1cf5b1a58cbe6bfd224024f7", + "bytes": 5619 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00221/armature-collection-add-desktop-report.json", + "sha256": "ccbe838e9d73ce8d63f7b81b5d7b28acf038b802fd5f76c5b806f21925df6e3b", + "bytes": 1356 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00221/armature-collection-add-local-exact-report.json", + "sha256": "edd1a7688e96982df6a0b3216784c437d668c70fb817e58f11be9a6be6a10dcd", + "bytes": 1327 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00221/task-context.json", + "sha256": "33c38758f90a7a49b0864dbccd1176d04ae0057829e7a1aed56ee8ff66e57610", + "bytes": 5670 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00222/armature-collection-assign-desktop-report.json", + "sha256": "db90ed0998768c9009f1c19b9eec12392d5c73bc7ca914a780bdd6721b41e932", + "bytes": 1528 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00222/armature-collection-assign-local-exact-report.json", + "sha256": "1b8650f03a1d51cd58f28be3a2bca0d44b34284b82708f5c16972360b9695791", + "bytes": 1609 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00222/task-context.json", + "sha256": "c512eb33c57c21e0d140eab83a6bf9df69011a31148a08449aefc8a63de195da", + "bytes": 5594 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00223/armature-collection-create-assign-desktop-report.json", + "sha256": "d02d028f7ec561db7363feea7f5504c5f8f7d719cd36b6a6f2edb70847996b4c", + "bytes": 1665 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00223/armature-collection-create-assign-local-exact-report.json", + "sha256": "14b7947dd2485e11eeb2045d565fe97732865abc4aceb0e6765e3ab2fbe0f63f", + "bytes": 1735 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00223/task-context.json", + "sha256": "a9b51398cc072d9ca64ea26ed4a10e5988ec4ba428dc1af18a54997c640d7638", + "bytes": 5669 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00224/armature-collection-deselect-desktop-report.json", + "sha256": "78b8615c71b02dbcb6b2b88086118b9c713aa3762ddf5d947ae0b696d72d7744", + "bytes": 1314 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00224/armature-collection-deselect-local-exact-report.json", + "sha256": "9bfc7c03a0e46bb31069e987c0a60dea1ebb0b5c17dbe382fb1d1847ad42595c", + "bytes": 1190 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00224/task-context.json", + "sha256": "7201e11f59e90287699d96e377865963fe9f8aede63b4447941642bf877e2574", + "bytes": 5718 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00225/armature-collection-move-desktop-report.json", + "sha256": "06074b980f8df448546afcf0c96e89e47bcb160b309db81c869d525b35b281ad", + "bytes": 1908 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00225/armature-collection-move-local-exact-report.json", + "sha256": "aa0becd48b2e42dc3c3ac7222d6e0486ffc8089bceefb3670f102fecd6d1f2e6", + "bytes": 1968 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00225/task-context.json", + "sha256": "a946ed0bc5ef3004a227fb461dec0b46e1a571ddeeb7deaac46f08d4a4e840d6", + "bytes": 5651 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00226/armature-collection-remove-desktop-report.json", + "sha256": "525ca8c6954750c9982bf91cbb3f26c9ad7a81911d56890dd6570cccfdbe3b37", + "bytes": 1912 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00226/armature-collection-remove-local-exact-report.json", + "sha256": "6df4c731b900161076a59892d26f15a8775d18571f27eb88321f890f91c9b9a0", + "bytes": 1734 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00226/task-context.json", + "sha256": "b5bb4620750aea7f1773049c127349b7fca058c3345cecae20e302d8054632f8", + "bytes": 5639 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00227/armature-collection-remove-unused-desktop-report.json", + "sha256": "4909e040db7be0d5ac84148d52bb47cbdf0f12a30612e6c1bae1067fd4f04dca", + "bytes": 2060 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00227/armature-collection-remove-unused-local-exact-report.json", + "sha256": "b41c86788e6b9e21b04d42bdfaa645d29e669f8dfec9fdfaf96fa09771c64475", + "bytes": 1784 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00227/task-context.json", + "sha256": "e7b8b69221ddde77585cf8e66e3c9de3fcc1cedc61739fd4af2e1385e9b5dabd", + "bytes": 5688 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00228/armature-collection-select-desktop-report.json", + "sha256": "569c817b422e7947c30e202de7223a8da949127a022ce2b1e4f28de15202a440", + "bytes": 2582 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00228/armature-collection-select-local-exact-report.json", + "sha256": "cdb8e8196179776f53406eb67c2d6e838d547a2bae9b3dbb3a337646656abe64", + "bytes": 2200 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00228/task-context.json", + "sha256": "1518cfbe7e66961eaa29ed27eed18d473e3194fc89575dcaea86007bb74c993b", + "bytes": 5649 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00229/armature-collection-show-all-desktop-report.json", + "sha256": "afe66c1b338702309a1c2a4af59d33365f31baf0db1797a95b0f980ecc76bc0a", + "bytes": 2342 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00229/armature-collection-show-all-local-exact-report.json", + "sha256": "1f4afb14bbdc7db07aad0b6df361b89e7020427ef63edc3fa641b3526dc05994", + "bytes": 1974 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00229/task-context.json", + "sha256": "2fe7e53c051464cc86e984cd9be592ee05b3e827e4d171aa3ad1c7bd49e68de7", + "bytes": 5724 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00230/armature-collection-unassign-desktop-report.json", + "sha256": "289f7d681eadad4d426faad60787a12b75e27a728a1b02725b06c130cc501abe", + "bytes": 1858 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00230/armature-collection-unassign-local-exact-report.json", + "sha256": "4fdb066cafc7b138c1b2bde389ebd9794236971416ce27ee51b8348a5f3cb18f", + "bytes": 1648 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00230/task-context.json", + "sha256": "9c0f7fe99c270e6a97f497162dcbe83c1b5ecd8efba6578ac95bd808f05cfed8", + "bytes": 5669 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00231/armature-collection-unassign-named-desktop-report.json", + "sha256": "abdac650cb16974e738ec81067a0f44ac42fa3e9cf7c0cf86d5c0969b4cf1155", + "bytes": 2019 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00231/armature-collection-unassign-named-local-exact-report.json", + "sha256": "9800642cf4e7763d144b4d16dbfdd9c36c765bb8bef41407bcf7dafae0540208", + "bytes": 1777 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00231/task-context.json", + "sha256": "76040c7c526c8bac16b7fe04603b6997755d4d1a70f99c09cfdef5c0e59a3f4b", + "bytes": 5672 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00232/armature-collection-unsolo-all-desktop-report.json", + "sha256": "e42a8ace07205e1954b5685c46103736827bc6cdea98f182dc9cc63f1340094d", + "bytes": 2697 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00232/armature-collection-unsolo-all-local-exact-report.json", + "sha256": "9be85459dec5551c4245cea4cfd025ca3dcef6be5e01ee24cb42249852e0ec0d", + "bytes": 2155 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00232/task-context.json", + "sha256": "f4119c512efba997ef39caabb833c12294db92e703df7ff9218841d47a0313c5", + "bytes": 5709 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00233/armature-copy-bone-color-desktop-report.json", + "sha256": "45464ed86aa52df4a5db68c0fac749585dc7f09b2d2c86080be467e1bf54c068", + "bytes": 3637 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00233/armature-copy-bone-color-local-exact-report.json", + "sha256": "1f8e2f7ba0c32ff17d12ed24da24426d8359d45ac3aa8badef68d2c98cea2ec2", + "bytes": 2221 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00233/task-context.json", + "sha256": "17f3369193e212c22b7cd12d9041f46dae78b19bf693ba5a1a791f3650f2d175", + "bytes": 5741 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00234/armature-delete-desktop-report.json", + "sha256": "d6c85736295a6f07950292425294e188a6b17228c91eb1151a38e6da4833679e", + "bytes": 1283 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00234/armature-delete-local-exact-report.json", + "sha256": "89e0b6b13dd025e4d0d72eec409845c44f43d90e52fb4f506282cad455b5c0a8", + "bytes": 1083 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00234/task-context.json", + "sha256": "da2f3111822b6a7238e2fa21d03976db0d614565da4365b6b8158877335ba70d", + "bytes": 5803 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00235/armature-dissolve-desktop-report.json", + "sha256": "bb9acbe5fd923532f125e511f6f113ef3543b519bfd757a942e4466eef7e2c79", + "bytes": 1998 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00235/armature-dissolve-local-exact-report.json", + "sha256": "97e46604d0c79afccd2968e64127da80382a92053f53b6f0b706d7b742aa608e", + "bytes": 1537 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00235/task-context.json", + "sha256": "87839be45f3d7071cc81118d5977cf405bd84ca8c59cc759ebea7bdc32541f03", + "bytes": 5594 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00236/armature-duplicate-desktop-report.json", + "sha256": "b648c7d518227a03b4d142a61ad4e3f15de71cf58e3fc23b603f7fdd26e1bf0b", + "bytes": 3062 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00236/armature-duplicate-local-exact-report.json", + "sha256": "2c005ed1342943cec21b7a71371449af4d01909026bd18c8cd9ca65f868d51a9", + "bytes": 1268 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00236/task-context.json", + "sha256": "91d3c4acf7697b24a72bcba8a093f2a3d1ea58578583983155ff2bc92b060184", + "bytes": 5747 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00237/armature-duplicate-move-desktop-report.json", + "sha256": "94745cd286e017a11dd6fd8df308a22e4d4b5e572bbc3115ee8bbac5fa430bea", + "bytes": 3188 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00237/armature-duplicate-move-local-exact-report.json", + "sha256": "3b99961a3aaf2e61d64aa6c9ac9c76e9c5db72e2b5bf14887f613d1bb0723ff9", + "bytes": 1437 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00237/task-context.json", + "sha256": "553e1d6a385d20840eed34b7617b3496e7bded0fdccdb2b68e1ea61228bcbb80", + "bytes": 5677 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00238/armature-duplicate-rename-desktop-report.json", + "sha256": "90a4d915eb9967f97495ede7b6f855d2049ea1059208b99e75128d79e7f51911", + "bytes": 3185 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00238/armature-duplicate-rename-local-exact-report.json", + "sha256": "f3e103b6c1a311bfeaad31c96066060519b091b3ae14c925a3d18e89e6ba8d2a", + "bytes": 1446 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00238/task-context.json", + "sha256": "5f58af69bdf6921fa2e46c229206c3a26ff737a9f04ad3602ba46e80061169cd", + "bytes": 5687 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00239/armature-extrude-desktop-report.json", + "sha256": "3f264c22cc013676e33e82b98458a5baff8703addaaee26812ed2205aa062fed", + "bytes": 3122 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00239/armature-extrude-local-exact-report.json", + "sha256": "524adb7be53d523d48f87773d6782bd78db1e81eb6d88c6eba3641ff283e5269", + "bytes": 1492 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00239/task-context.json", + "sha256": "ef9bc0d189399baae95fef4e518ed6997c26b21ade00d4cda06ff1b086a57cfb", + "bytes": 5693 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00240/armature-extrude-forked-desktop-report.json", + "sha256": "37ca8eb97c454cc572f70143aa98f01cba23190ea889bce7b688529d415945a4", + "bytes": 3260 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00240/armature-extrude-forked-local-exact-report.json", + "sha256": "957d36b2188d063415a2dcb70995bacddfeac01152872cf06ae27bba941a3ce6", + "bytes": 1627 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00240/task-context.json", + "sha256": "3756f32ea6e1bf3b36c5480563a90e004f9a8e0836e18aeaa9f3e7b5d7abc545", + "bytes": 5719 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00241/armature-extrude-move-desktop-report.json", + "sha256": "a24fb58e990504c5bd8a8d7a2d010f16028e070f099137bb26e5a2769a7fcc38", + "bytes": 3206 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00241/armature-extrude-move-local-exact-report.json", + "sha256": "05293986bab59aed5d1629d9a9e28c3499db619b33294f6f5d7557a463bfc001", + "bytes": 1584 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00241/task-context.json", + "sha256": "ddbe88064be8649f792d2c731a9269ccb3eabe35a08430e613ca8cba0b25ddbb", + "bytes": 5734 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00242/armature-fill-desktop-report.json", + "sha256": "39f5db8f1a77e188ef3d4c3084c9bcf961551767211b40f006499a66ad51f56f", + "bytes": 3730 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00242/armature-fill-local-exact-report.json", + "sha256": "f4d927d1e6a10c9db3bd0b6a32b771aa96a25af9f9a5ab4a01741932173a293a", + "bytes": 1546 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00242/task-context.json", + "sha256": "59d07c1a9a8151af3b530ca1e6ffa56b0747ce67637ac9851c94c63e70b0ded8", + "bytes": 5714 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00243/armature-flip-names-desktop-report.json", + "sha256": "489a05e88b2f35bfa0c910623db17897d70041afbbeecd2ad6575997c62d5a7f", + "bytes": 3038 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00243/armature-flip-names-local-exact-report.json", + "sha256": "e3a6efe370d43e0d05e4668994c70dade862aec0f45b50978558d3468e022d93", + "bytes": 1345 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00243/task-context.json", + "sha256": "c71f199a41f023b1724f3075c1755b509f014918cbd27937779323e4d6d16974", + "bytes": 5733 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00244/armature-hide-desktop-report.json", + "sha256": "382b6abd52f5d54e519690cc3760fc5cddf1db2516abe8fe3e2acfedb500ed83", + "bytes": 2366 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00244/armature-hide-local-exact-report.json", + "sha256": "295134cdf0ed210c1eebdb166ad3251dd47234ff4b23e084a6c6f4e26e8615ea", + "bytes": 1104 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00244/task-context.json", + "sha256": "4103d8304ec404adcd995b030bd6f266d76971fd91068159fb8b7686106fc738", + "bytes": 5594 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00245/armature-move-to-collection-desktop-report.json", + "sha256": "26ba97ec93b9e190d06dc912b8b441eb14c49d3a409ae2635aba0adc8dfa6f9b", + "bytes": 3196 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00245/armature-move-to-collection-local-exact-report.json", + "sha256": "d898f1ffaa59f14b7a92e88d90413d0b3c200548ee5288342938f3803077e186", + "bytes": 1740 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00245/task-context.json", + "sha256": "a0e24448ada6a6649940caca0934e6cac7783f5e486efeb73baa352874e971c0", + "bytes": 5613 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00246/armature-parent-clear-desktop-report.json", + "sha256": "e59a8594cbc6f313ac9651706575eeabd2d58fb2520eafdf825c5a467a2d9b7a", + "bytes": 3246 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00246/armature-parent-clear-local-exact-report.json", + "sha256": "3e89fd698b0a8d118b0dcfb428f957ad7cc051e5a7a5b898cf90f49c996080a2", + "bytes": 1304 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00246/task-context.json", + "sha256": "bc87cb6e78492af2c7c31afa6da9ea79e919ecdc793d7a720b1fa6127df6fc93", + "bytes": 5621 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00247/armature-parent-set-desktop-report.json", + "sha256": "c2348f9a4e51030006f9c1a2756f016e2c454d957a952e2d07a2948dabba9f4a", + "bytes": 3266 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00247/armature-parent-set-local-exact-report.json", + "sha256": "ed5125f71cbe8af51244c5bc8798b2d0722d3272a331b9999ba22f5606926139", + "bytes": 1385 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00247/task-context.json", + "sha256": "63cae595ebf9ce8be4b1d02e48e6130371978eaae49133e5da24b87dfcca7b53", + "bytes": 5602 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00248/armature-reveal-desktop-report.json", + "sha256": "7f972847f4646f54f02e2e25efefd993c083c0be15ed18c2b570640bc314059a", + "bytes": 2373 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00248/armature-reveal-local-exact-report.json", + "sha256": "35ca506d64f000444107c2a6da1b8a7074204c415dc6d4ea4afc9492aeb57209", + "bytes": 1124 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00248/task-context.json", + "sha256": "db45073631709d276137b75c98057adc5b96605f45b929c42067333b9607cade", + "bytes": 5328 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00249/armature-roll-clear-desktop-report.json", + "sha256": "d4961663044d04bed11d79948c12d7672d541da799cc519a7e0043023fd0540a", + "bytes": 2002 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00249/armature-roll-clear-local-exact-report.json", + "sha256": "60aff7413075c183ce0f8c443784b01cbb57343463588185c5f1839636e07ee6", + "bytes": 1196 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00249/task-context.json", + "sha256": "ca58f30a8476e7f61c6b3dec4d2225582cfcb9f4af454b62a42a48d2449ed74b", + "bytes": 5357 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00250/armature-select-all-desktop-report.json", + "sha256": "0d68d0d0b4f3880339f29ef467bc7ab241623bdf3422ca83c53b49efec5e7295", + "bytes": 2463 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00250/armature-select-all-local-exact-report.json", + "sha256": "e8d922dde3d8401c79adc75621523ee3441a4d97f74416816e2f2209083297b2", + "bytes": 1395 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00250/task-context.json", + "sha256": "75f8b5a9a167a179607417792bf5520b1cbb4c0eec5e665be7769c65265554d5", + "bytes": 5361 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00251/armature-select-hierarchy-desktop-report.json", + "sha256": "8d57e6ce5bc33f6e87eaba09ffb411bf68b752a4729438de9f78063f7354c092", + "bytes": 3493 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00251/armature-select-hierarchy-local-exact-report.json", + "sha256": "4d36c680a2947be8c29e076849d3d4ec8ad2a2c1a2ccf9e7330b311c0d4be5ac", + "bytes": 1851 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00251/task-context.json", + "sha256": "a8e92d107ef3e012f2d0321a00b7c55c9475848346488de1804645c238618ca5", + "bytes": 5352 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00252/armature-select-less-desktop-report.json", + "sha256": "a7cb4e98fbf96079ef88c8de7491a43e611e1c759525d7bffdef785cadf458f7", + "bytes": 3347 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00252/armature-select-less-local-exact-report.json", + "sha256": "5e9743ec56f672990fca63850abe1abd567c6c0488926be44a00dd6295b96c39", + "bytes": 1779 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00252/task-context.json", + "sha256": "ea27cc467ccdccd6292bd5e76f1ecbabfe0ddcbb553335684b8512ff207db7a2", + "bytes": 5315 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00253/armature-select-linked-desktop-report.json", + "sha256": "3a2b4e82aeaa2fdea3ae01df802c8de371f184dc0b018cc1c16d2349d19b9fa3", + "bytes": 4202 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00253/armature-select-linked-local-exact-report.json", + "sha256": "d184c248dd13878698f5b973331bbe7d65cde2defa697f22e4c05df9a433b42a", + "bytes": 1794 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00253/task-context.json", + "sha256": "94c2ded148413fd67032d63cdcdcdf5b332cd99569b02804e3a743471fb3cda9", + "bytes": 5326 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00254/armature-select-linked-pick-desktop-report.json", + "sha256": "1338c391ecabbb35166c5df8e36a8a0f5b65deca3994f7c2ee1d799b564906d0", + "bytes": 4382 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00254/armature-select-linked-pick-local-exact-report.json", + "sha256": "14560b0b43aa917fa31fe8c9023992285313204c858d7260da22347a8696b9bb", + "bytes": 1963 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00254/task-context.json", + "sha256": "dc292fe37486b022284f46739ad523b5a6ee406157a325aa855411ee3e24c3f6", + "bytes": 5348 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00255/armature-select-mirror-desktop-report.json", + "sha256": "d5b76fb51060be4e1b56e81d238d74df4556b09ceae84dcb0f9c545dfa1bf35f", + "bytes": 3216 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00255/armature-select-mirror-local-exact-report.json", + "sha256": "e87ab4016b6ef049c7ed7177d9dee54d44dbcb88d5bbab6f0dbefddadce6b48c", + "bytes": 1454 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00255/task-context.json", + "sha256": "1072a60c75f9ba38bbef954deeda027e2906ce86485b94b7a0315409aabd682a", + "bytes": 5382 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00256/armature-select-more-desktop-report.json", + "sha256": "76c4cbf93b70f19535b1e4b2f9b580ca6803da03ac3c7aeafa4523fca6a24baf", + "bytes": 4142 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00256/armature-select-more-local-exact-report.json", + "sha256": "d091f0032c51091e234da5ff0c931855cb1491dd86d9cd51ef0fc2e7143e9017", + "bytes": 1691 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00256/task-context.json", + "sha256": "03b45f7ec25e3cf1c82806959ab14a1b678ab66d47e05ce9d2f11ddec004871a", + "bytes": 5343 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00257/armature-select-similar-desktop-report.json", + "sha256": "22cdd9b6ce61fedfda0b76fcedb0c122176d4e17c5ca7ae06277d221ef1ac22e", + "bytes": 3524 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00257/armature-select-similar-local-exact-report.json", + "sha256": "cc8a91b14a765d9643289230ca8e38800cabcecc74883845b8e06087f528be4c", + "bytes": 1470 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00257/task-context.json", + "sha256": "9464e6917cbd8e532889f70781049e38e5131f841c3c638bdf6a6f0342f35429", + "bytes": 5371 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00258/armature-separate-desktop-report.json", + "sha256": "8226ce041d7bd04dc31d93e01537bd8a598886fdfc1feaa36e3d98910007e720", + "bytes": 2790 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00258/armature-separate-local-exact-report.json", + "sha256": "4cefec2f7519e0a3e23eed6ba3e199760ed46f6af0cbe36b48932270211ea3b4", + "bytes": 1474 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00258/task-context.json", + "sha256": "6261d1f9cc72a6cf1129913f10efee4898da9c1bb7b8ca264d255d3835043572", + "bytes": 5348 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00259/armature-shortest-path-pick-desktop-report.json", + "sha256": "3a42c0aaa54538109b1bec89e12976848464e18fdd27c30cc43b302a78557fd8", + "bytes": 3790 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00259/armature-shortest-path-pick-local-exact-report.json", + "sha256": "35348832a78139d10dc5c8217f64453c54430be47ee8968d59f76a76ccf2ceda", + "bytes": 1625 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00259/task-context.json", + "sha256": "efd58e511f54e130b2625a01f9cad988ba054648023d2616506dcfea9e4313fb", + "bytes": 5387 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00260/armature-split-desktop-report.json", + "sha256": "3f7022cc9a1e6398b124763aa8f99c42e633dc036a7cae887e3fb252afd4352e", + "bytes": 2530 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00260/armature-split-local-exact-report.json", + "sha256": "38a055ec0e21dc6adf0818089dafce97ddcbdbed78e9a6be0080ad960b94361e", + "bytes": 1103 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00260/task-context.json", + "sha256": "0f70c73e731acd6e334ba69b6b16404e02f544e2ea4adbfe5e38f73af3a7c5ca", + "bytes": 5337 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00261/armature-subdivide-desktop-report.json", + "sha256": "77e3d698de66ad1d1b5d595049f6e515e3fddbcdb83ef8a3bce25afa79c84c23", + "bytes": 2916 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00261/armature-subdivide-local-exact-report.json", + "sha256": "dca39b46351f9447faaa84c11cebee86a1dc87876052b55df3a5e2d1a0cd291a", + "bytes": 1260 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00261/task-context.json", + "sha256": "3c715414fd5097f5296ab31ee86407dbb62ee02d1d804cc5d1eb9dee8a251a30", + "bytes": 5350 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00262/armature-switch-direction-desktop-report.json", + "sha256": "b354e79b081ed5a42edafb0d2ff7c2811b3793b06997ffd493cb0412c10637ac", + "bytes": 2733 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00262/armature-switch-direction-local-exact-report.json", + "sha256": "a70785bfc13f65f94e22747c67eff0b4a07b0aa3afbaa999a5f39ab706769cda", + "bytes": 1467 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00262/task-context.json", + "sha256": "60148b63a69b0e197dcde3f81e322335806a7e9bd2f2a33c7dee44daac2da996", + "bytes": 5378 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00263/armature-symmetrize-desktop-report.json", + "sha256": "2ca4f83737867b62fd8c4b42bc6092a59178baa4a18f8bc192764c859d1e5c88", + "bytes": 2961 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00263/armature-symmetrize-local-exact-report.json", + "sha256": "1dbef4a312f55198108fcdcab216e0739f08c237a19084e28b21a63f53f9dab7", + "bytes": 1603 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00263/task-context.json", + "sha256": "61576b4aa53a9fe9c2eb5ff564a47ac218343ba32fcccd00322d4d9a1420d9c7", + "bytes": 5350 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00264/asset-download-desktop-report.json", + "sha256": "399aed90c3b236f1c169fad88dbc92f5409d26ca35bdeb5768bb9272a50a7157", + "bytes": 829 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00264/asset-download-local-exact-report.json", + "sha256": "ad88b3a8b18007bf61d4351185ee2cab8c09e9e3a74958d521f94ff1a221795c", + "bytes": 867 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00264/task-context.json", + "sha256": "d22c02c55e889b252ab0e11580693c6fc44225d4d650591942bee294557f4134", + "bytes": 5348 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00265/assets-download-desktop-report.json", + "sha256": "1ce5009ec4582730437cbefbb5722699bc6d2fe0824eede52bf8de98b85ccb24", + "bytes": 836 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00265/assets-download-local-exact-report.json", + "sha256": "35d1005b88bb477b0bc686297d4e178fbdf1c3feeb7fb29bb443a019d7a34b4d", + "bytes": 873 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00265/task-context.json", + "sha256": "d9b040e30c2443cfb11dc196dbb042b1aa6a72a3a27b599ccdc591a98e340395", + "bytes": 5354 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00266/assign-action-desktop-report.json", + "sha256": "aacd8ad7641a390a2f2b4990d4b324bb9478ee0a45a42c9bf4e52720038dfab4", + "bytes": 846 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00266/assign-action-local-exact-report.json", + "sha256": "e2376fd259124a1d90db2ded522f1231df3d12d0f5eb3d82c229e95fc680f1dc", + "bytes": 887 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00266/task-context.json", + "sha256": "167bfdff69ccc7568d7c20d4c61be173604255e1a9cd698e55df690444763dfb", + "bytes": 5350 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00267/browse-containing-desktop-report.json", + "sha256": "cad41d8dfb33770fdbd87f44d2eb04b070cdb120665a188a379c0436fc25f324", + "bytes": 742 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00267/browse-containing-local-exact-report.json", + "sha256": "2c522d5b6c545f7bf8d7238d881a94c2d6463abcb41bf24989b3218962a51ac1", + "bytes": 876 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00267/task-context.json", + "sha256": "47039236bfbb8d1e2d130708d25ead95b54027b1b061d91ae73f686ed75660b0", + "bytes": 5405 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00268/bundle-install-desktop-report.json", + "sha256": "088fbc1390ae171dc219c201f09519f8c0fc460bc61138d13d189e3e6ec6d1c0", + "bytes": 702 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00268/bundle-install-local-exact-report.json", + "sha256": "be82a7849a167cebed509f7ac451f3c1c1756757afe34e940453df686b507d97", + "bytes": 839 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00268/task-context.json", + "sha256": "e44a443c29beab5923dbbab2a7e8e8e830654873f8d093345b24c3cd758620ad", + "bytes": 5377 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00269/catalog-delete-desktop-report.json", + "sha256": "68070e257397148441c11e1ecfc9a2202f9955cee17a3f8ee878d4e0f1310790", + "bytes": 702 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00269/catalog-delete-local-exact-report.json", + "sha256": "1cd38bfab4ba20d3238bbb11fc9838b5479f96c345c6f98e479eea25fe229bd1", + "bytes": 839 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00269/task-context.json", + "sha256": "e1bb2480ec7894a2ce1b8c5ae2b221f6e55cf19c7c4e72aef04d89d5da147878", + "bytes": 5355 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00270/catalog-new-desktop-report.json", + "sha256": "a8037c3b339c215db7bc4143ce0999074a366019a8868516baec00086378e2d9", + "bytes": 684 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00270/catalog-new-local-exact-report.json", + "sha256": "99f10be076dd573ee658256e2b2e08c40af1997b344268a84cdc0fa8fe939e81", + "bytes": 824 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00270/task-context.json", + "sha256": "ee463f5baf378f77c68c9f30d5f21caebcd027138222b5bf4007a5e14696ff56", + "bytes": 5345 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00271/catalog-redo-desktop-report.json", + "sha256": "31dedccda115a8219307ad7f677602fc907e6e012297b4e6a6a68f19fb1415d5", + "bytes": 690 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00271/catalog-redo-local-exact-report.json", + "sha256": "25e5b338ad95d2e09e0cc651fd14f5c66a21be78f3d0d0039f8b161386e2fdb9", + "bytes": 829 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00271/task-context.json", + "sha256": "1ef1edcfb45f3ce201efec1aa2efb39f95aeaec909eccb02e13cc7f98335a11b", + "bytes": 5340 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00272/catalog-undo-desktop-report.json", + "sha256": "21d131f2b2c5ffe8772bcb4606dbf16388467572cd0542c6dd16c66e1730b712", + "bytes": 690 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00272/catalog-undo-local-exact-report.json", + "sha256": "4cb20b624a5f96d417c33d928b760befaacb8c59610f197ff1a666d1fc78a5f0", + "bytes": 829 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00272/task-context.json", + "sha256": "ce9557e77c46435c6153a6173fb59b5d50686d8738bbab96490d631965219867", + "bytes": 5340 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00273/catalog-undo-push-desktop-report.json", + "sha256": "03421f7e7ffe6eb3f0ec93c6f09cd505f806e228145cf4ce6d55e3b841b8b34b", + "bytes": 716 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00273/catalog-undo-push-local-exact-report.json", + "sha256": "86e5cabacde4ee419d71011b902e0fc561e7da94028879bca4ca0315ad1d4f72", + "bytes": 852 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00273/task-context.json", + "sha256": "8679b3271d07fe1d4eaf2c6dcc6ef833d9c2853dda4643339071c60dc8bfe2f7", + "bytes": 5363 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00274/catalogs-save-desktop-report.json", + "sha256": "4030bf70be443ef6dd4704ec43f93c596414b3657bb1dec3402f844173c1103d", + "bytes": 696 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00274/catalogs-save-local-exact-report.json", + "sha256": "459c689249e40c69a61202980a100325a6f106606b559eca653ec4e9bb91927e", + "bytes": 834 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00274/task-context.json", + "sha256": "a539fbe4a83846344834b96a7f62320fc6a858aae1146629988b14b883d87020", + "bytes": 5361 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-align-desktop.py", + "sha256": "a406c012536580f3dfc6b5851015bb65ccf578acce6e606c0994e4428de83738", + "bytes": 5514 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-assign-to-collection-desktop.py", + "sha256": "0a2aa43cfb3d08fc2904b9b36dd6fca160309f936bd5006038a56cf355990718", + "bytes": 4705 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-autoside-names-desktop.py", + "sha256": "1d8983980d621a559bef9b0bd14eecc1dbf95b43fee2eecaecf970f7052b1e1d", + "bytes": 4353 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-bone-primitive-add-desktop.py", + "sha256": "fa0d91a10c5d2dc9cae127c02927fc98be37110f25e3ab3570cd7cf733ce329e", + "bytes": 4827 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-calculate-roll-desktop.py", + "sha256": "570471197617ea452db37d8d972f372db07de15c3f78fd934905ecdbfe3e3a7f", + "bytes": 5202 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-click-extrude-desktop.py", + "sha256": "2fc6347da08d334e4b28a5316d1db45d189021ee38f4e5f8574e3a66cc177d51", + "bytes": 5457 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-add-desktop.py", + "sha256": "8acf8ab1c9b9e27bc83fe568edd0d418b6c824c72b539126561955f05e5ba9f8", + "bytes": 4877 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-assign-desktop.py", + "sha256": "92c6b8d031631ace79523ef4200508621aa8bd0b9ae2d5a8cd84a9cdbd91a559", + "bytes": 5346 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-create-assign-desktop.py", + "sha256": "4e6ee367c86279625bed4475f05abd3596329c2bd1c54c295f96118d5156cec1", + "bytes": 5525 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-deselect-desktop.py", + "sha256": "302d827119a02a62770a172cf3624c84b9c83463b0ef10d35c1854a5e767ffb3", + "bytes": 5777 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-move-desktop.py", + "sha256": "6babe7d65549e4b06f4a9790af3ce6dabdf3131831f5d26442d6c1c6d0099f90", + "bytes": 5243 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-remove-desktop.py", + "sha256": "071d8360f7aff11fa3466e96133c9401525a5f31a4beec6c5fde46b43329dbc8", + "bytes": 5314 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-remove-unused-desktop.py", + "sha256": "8bd8c0dfd8170779c3e834a8b3ad8c90e5a646263108b818c19e34be21353bc6", + "bytes": 5681 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-select-desktop.py", + "sha256": "cb1db0e83e3ac1dab0db182b786cee39651c90e32817793f262b53a1b8caec89", + "bytes": 6034 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-show-all-desktop.py", + "sha256": "3f81be36e3957ffa1de5581b4f2843c0b03e519ec153249c5fbb3b4cd53205b3", + "bytes": 5422 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-unassign-desktop.py", + "sha256": "addb723b6f5e003a726885241aba042138d5593adc7ba446228b8a41d5b51c0d", + "bytes": 5985 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-unassign-named-desktop.py", + "sha256": "ef3b5f6cadbceca45a32161b9f8ca213215962d2cb213dbd80e76002725fd16e", + "bytes": 6211 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-unsolo-all-desktop.py", + "sha256": "a4df03942060ccfe0eb19be415bade14f4f7c4a5649a5c3cfbbdd66b1104e98d", + "bytes": 5885 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-copy-bone-color-desktop.py", + "sha256": "4e28192646754a1e0c253f40e15fea28b43bcd60305fbd40273caad1908f34c1", + "bytes": 6185 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-delete-desktop.py", + "sha256": "2b0358f9e0a96da53f8c7f889ae18068aac2653d4aa6e804a0471a92e66ddd6b", + "bytes": 5176 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-dissolve-desktop.py", + "sha256": "27a1aa29a7fe9ef6ad5b13b17ee0e30cf7c943df5d0ce3be97e44513cec33d01", + "bytes": 6275 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-duplicate-desktop.py", + "sha256": "47c4546402e3e8692583e3d3075a1351092cd61fce09f5d96d13dc06bf2ce1d2", + "bytes": 6577 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-duplicate-move-desktop.py", + "sha256": "32d82956a3c5fba3cb844ce37a3eb174124a1b25fd7c958578c9a97a5138e1a6", + "bytes": 7002 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-duplicate-rename-desktop.py", + "sha256": "1eadb6c273b4bc77f6c3df9f0060a361c6da2e95b84341ac2173a749f4b72d07", + "bytes": 6754 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-extrude-desktop.py", + "sha256": "066e1851024ebedcec78e4e3962516ce8c43ae87ef87522d7acc8b6ca1f49a4d", + "bytes": 7640 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-extrude-forked-desktop.py", + "sha256": "cd13871abd4e28e9230388693209bbeb7d3b8f1e9daf99d3df09c9071bc9930a", + "bytes": 7928 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-extrude-move-desktop.py", + "sha256": "9e1496c7022f9e70ade8cb937a815a7a0f0d3db9679d39b4b14b3e9cfae4bf85", + "bytes": 7813 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-fill-desktop.py", + "sha256": "fa8f3e577dd5b3924f8266509346f1c459a45bc62ac597926b412a962c4a9017", + "bytes": 8328 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-flip-names-desktop.py", + "sha256": "5b3bc16b1fdfed70b6be9ca37ee1c949ce02129f4d396216f70edc022ba1082a", + "bytes": 6407 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-hide-desktop.py", + "sha256": "455d76e6dbd6100f9a33a517a31232605f3d878d165e5938a6aae50682d1fc9c", + "bytes": 5938 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-move-to-collection-desktop.py", + "sha256": "d70bbd2d42be0c4f95dc2fcc683daaad5d1eb2e71240dc8025dec2133f2d42dc", + "bytes": 7040 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-parent-clear-desktop.py", + "sha256": "14c76e67447509588d74055eb26dd12401b3608fac335bf732a09980a2d6c443", + "bytes": 6664 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-parent-set-desktop.py", + "sha256": "ced6127b73540a64f95327103cea846d95b3da829a41b64e66de6e160ff2d7cb", + "bytes": 6741 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-reveal-desktop.py", + "sha256": "06564434a76ea6670110e916f73efdec46238cc1b2c8e1aa3d1c893b8089331d", + "bytes": 6095 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-roll-clear-desktop.py", + "sha256": "c5f507c1601fd4fe026f37b4c720a684881a01272eb92fd663dfb2ec2d43057b", + "bytes": 5966 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-all-desktop.py", + "sha256": "3dff6a053b4a497ed19b67b6e0d38958abd6f34c603b994a8eb59323f4ab95e5", + "bytes": 6371 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-hierarchy-desktop.py", + "sha256": "f6d261b067815d740a7e39aa8c8a8ae6d605b675c6ba2a144eaab65d104840ae", + "bytes": 7243 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-less-desktop.py", + "sha256": "ebe6ff995d37310dd1f726246e0c3627960b75c6b506b181286742829ec4423b", + "bytes": 7411 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-linked-desktop.py", + "sha256": "99901e2c2a744563c9fff9105244cd07368b6ed0cc52c6c1c94eb65c3e964ac5", + "bytes": 7002 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-linked-pick-desktop.py", + "sha256": "8909666d24df353cf64f225b857a1ccc48c460320df52e385f69c8e13200d686", + "bytes": 5474 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-mirror-desktop.py", + "sha256": "21a152a785b6bdb794c6488685cdebf3ce27c3573b3f46e38002c8be0bd0fc43", + "bytes": 5044 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-more-desktop.py", + "sha256": "dfd686370601ddd0d43ba0434e7d9fde5ff80d12170f423d571f5344f281fc56", + "bytes": 4750 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-similar-desktop.py", + "sha256": "62d26209267be4d01cb079f467b4027623cea284b894787029199188e486e25a", + "bytes": 5959 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-separate-desktop.py", + "sha256": "586bcf4a9b34e7e1ed87e78af45011b0c004aa9dcea063d03c6fafe968f8e689", + "bytes": 5800 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-shortest-path-pick-desktop.py", + "sha256": "7ddd284bae79567206ca1fafe1f9ee0cd0d13ea2719af08a2bc27f0b848e8390", + "bytes": 3737 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-split-desktop.py", + "sha256": "e1044a0a74a25f1e71b7d1fd9e027d9e4f92dee9876a72828bdb3954a2b05d43", + "bytes": 3187 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-subdivide-desktop.py", + "sha256": "80ae7b6ada923052ee31deca4da972311a1b22e528e6149467e07f61d7472846", + "bytes": 4037 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-switch-direction-desktop.py", + "sha256": "ee29b85c9ff1f49ad3bd731f0996ba351a82a087b636899c1ef00d6db175b87e", + "bytes": 3372 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-symmetrize-desktop.py", + "sha256": "1b84a01bdacb1b66952822b609144acaa3638aee86b4f6999df37575478a148b", + "bytes": 5732 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-asset-download-desktop.py", + "sha256": "c8af3ac7b0fd53e955a9c5d925e0ea004f219ef9c5b6629fdb57e6fecdba55a6", + "bytes": 2922 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-assets-download-desktop.py", + "sha256": "512737cde0efa6cc6a669939c243e7b609cc7c37fc223c4923cc6a9adc035318", + "bytes": 3014 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-assign-action-desktop.py", + "sha256": "b4ffdc3bd9120c2823fdcf29278695e49c21b3ee07345daa15712ef6d57ca6ec", + "bytes": 3580 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-bake-keys-desktop.py", + "sha256": "a03213895003f141054a80fd7ddf8060b59ded44994eefc8f3e4699313923fb6", + "bytes": 2650 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-browse-containing-blend-file-desktop.py", + "sha256": "05b68021e96e9b480298ddb2bd5c814ecf919a622d57ceabac7534eec31aad90", + "bytes": 3085 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-bundle-install-desktop.py", + "sha256": "a34f4c2095c0ea2d47837f5d631d8dea6a19a70a620982333ddc9abd0a227099", + "bytes": 3033 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-catalog-delete-desktop.py", + "sha256": "d0347a61c6a0388062e0f9cdaa6c9a25fc3662c667b6641705543ac816e0a355", + "bytes": 2929 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-catalog-new-desktop.py", + "sha256": "1a5331f11bf741efb897f4c719ea4ff2457e15823c10ca805085d63e059984c1", + "bytes": 2893 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-catalog-redo-desktop.py", + "sha256": "89ff11f1ec2f76c1d34c49549e2499db2df084fff63fcfb156d65e3c1f46d8f1", + "bytes": 2237 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-catalog-undo-desktop.py", + "sha256": "4a4866dc48a2fc8318549ef5a143697b2ba51643b8be3865975596882569c773", + "bytes": 2170 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-catalog-undo-push-desktop.py", + "sha256": "7e218eff97f8d4a2bd475d9957a94a784f4a76da3b35938389eb59eae7592795", + "bytes": 2225 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-catalogs-save-desktop.py", + "sha256": "ffa7e28e8bfb2669ff2e05a10edc7794eb43c31c0d4abaa3841b1887424bea92", + "bytes": 3038 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-change-frame-desktop.py", + "sha256": "18fcc3ea0f0cf7a503651791d283852b4ae0b219339258880351837a59726327", + "bytes": 3017 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channel-select-keys-desktop.py", + "sha256": "5d09b95946aa6f7a754cfcd60259e14d388ecc98f4aca0fcb651bc99fabf292f", + "bytes": 2977 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channel-view-pick-desktop.py", + "sha256": "2b2c904295211cdcf7689cdda060eed9856338c4295a84e0d74da862bee719a9", + "bytes": 3889 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-bake-desktop.py", + "sha256": "87eccc9a6dd652d94cbe49e771937c39d223765ca7658e239e99017356613a2c", + "bytes": 2791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-clean-empty-desktop.py", + "sha256": "f6a8ef3666d4672e53d9678c3d9f0dd0f9ee92f9d05e4078f81555a9ea047d20", + "bytes": 3108 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-click-desktop.py", + "sha256": "3984998cbb1a42541f447b317777ed96183147fbb470d2842bdf1d7bfc8aa600", + "bytes": 2934 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-collapse-desktop.py", + "sha256": "e899e95b4bda42f69040d24396d007eae2f35acd1c44594cecf4c25a4d0e1e6c", + "bytes": 2797 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-delete-desktop.py", + "sha256": "b340793fe720b0bd60ca3d81a19c4a9bfba2c679b91bd2d6cbe371fe2e4ef657", + "bytes": 2731 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-editable-toggle-desktop.py", + "sha256": "9d16d09a1f009d160731523de610360a0bc9dd730648b1f9251ef9a8c6e61428", + "bytes": 3013 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-expand-desktop.py", + "sha256": "b8cc37161161746bbf2cce1da08b0658fa5e911507b6049d5f05b1cc0abb7148", + "bytes": 3247 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-fcurves-enable-desktop.py", + "sha256": "0124b78950409836682c690f2158c76d8eba8fc2ab5c35b11aacb73dbc2ad5a9", + "bytes": 2978 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-group-desktop.py", + "sha256": "0cf05f15c8441bdae97c96a44687b30527149165c16f1f31df10ff29e6fecb85", + "bytes": 3122 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-move-desktop.py", + "sha256": "0410afc446a73d3083d96fde83b36b3c1754e133b95af2554de064ab928ded5f", + "bytes": 2808 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-rename-desktop.py", + "sha256": "16c276e94e9020e685d52d527cde9dc68f3fea64fdac61ce9cf99f74643d594e", + "bytes": 3473 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-select-all-desktop.py", + "sha256": "3f89d79ab79fc4a6e82c624c4703a71d6448d38a62c9f5237959a8215c96cc4e", + "bytes": 3626 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-select-box-desktop.py", + "sha256": "07de6dfe6d70e4f208e60a4b6f18c8322044f9d0a4b34812a63f36eec6e804b1", + "bytes": 3761 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-select-filter-desktop.py", + "sha256": "f1893daef821328506372894e8b052d3d7d8e2632a90332bdd7e49725d3a3dd1", + "bytes": 3572 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-setting-disable-desktop.py", + "sha256": "cd697b916faa275dd6e44698a7c2945b9c070125d0132ce92f28855c447fcc0d", + "bytes": 3066 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-setting-enable-desktop.py", + "sha256": "936f925cf68eb27eeb911a5fc8179248201f7fa1fd672053a2fff0745c455e8a", + "bytes": 3054 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-setting-toggle-desktop.py", + "sha256": "1282a6f5e4743fc78f74cb8e76025f5cbc0e5adbbb9e2335c617e8b29f35fdbd", + "bytes": 3057 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-ungroup-desktop.py", + "sha256": "169f95d2dd14592f554642bfd62f299568a08efbc8542a994fe433ff059e0675", + "bytes": 3154 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-view-selected-desktop.py", + "sha256": "c7cafb9739ec0838ef9a838810066faf1884bb4927364e01c99c271e4da28630", + "bytes": 4538 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-clean-desktop.py", + "sha256": "4ab652e99fa8fa98cdec6832157f3bbb2e1ac7e5779f01ddd974f192945ea58e", + "bytes": 2588 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-clear-useless-actions-desktop.py", + "sha256": "942289d85bf2a716e5c7283471141b479fc68d086e5835cd08e65411ca76a7e5", + "bytes": 3452 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-clickselect-desktop.py", + "sha256": "29f5ab8b8489b38ec874b8bf1d779b45e19934862bec3b730b0f3aee08700f74", + "bytes": 2887 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-copy-desktop.py", + "sha256": "d5db0d6d0962ec780faa5a2c6fc1960a7e7d7babfced9d362ca05e46e0889c7c", + "bytes": 3452 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-copy-driver-button-desktop.py", + "sha256": "12c6c2af98710a4989241e33383876b381c697320125d23508d87e2a78eacead", + "bytes": 3824 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-delete-desktop.py", + "sha256": "3655cc712601ed60095f850b4a419499007e13a7cceeebcd6c38bf42f7a1a6c0", + "bytes": 2791 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-desktop.py", + "sha256": "7c32d786a8daedcf5e995d0ff29b6034e7c4f4c25c309ccd0542adecc19319f2", + "bytes": 2321 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-driver-button-add-desktop.py", + "sha256": "154a9e8eb687299b1279c6c8c6d30a6658650bf224a22312efba65f782ffcd7c", + "bytes": 10530 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-driver-button-edit-desktop.py", + "sha256": "864c46ed3df66b0341660e715c6609d845851dc71afa7bd96348e19bce0db530", + "bytes": 3956 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-driver-button-remove-desktop.py", + "sha256": "34db1bdf7b6086dca2447c00726703642da7ce58b572ded0ae57595e4ba5a359", + "bytes": 8520 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-duplicate-desktop.py", + "sha256": "281551ded3cdad0c4abc4e9b937b99e37ee51ecdfdb923137afc3ce7b0c5b29f", + "bytes": 2963 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-duplicate-move-desktop.py", + "sha256": "7738a3a07f4971ed3f564d3cd6d09243853a602ac1253056ac5bdaa9522c91a5", + "bytes": 2940 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-easing-type-desktop.py", + "sha256": "37233be661cbcf08ece72e5293de7016c4408d3708256902380ba608c7985abf", + "bytes": 2887 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-end-frame-set-desktop.py", + "sha256": "7ea71a9a4e48775fde115223a115f9f31df016ce57e4a13af60b89d5bc7d836a", + "bytes": 4846 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-extrapolation-type-desktop.py", + "sha256": "8abb11eb1c484b008cc6157d0a5d9c786ebad25b196d117ea5fb015770f70abc", + "bytes": 2645 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-frame-jump-desktop.py", + "sha256": "169ea06f3ed471014162d67bcb8b79945e85b7f91d1291f15b62ccecaf3a8126", + "bytes": 2707 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-handle-type-desktop.py", + "sha256": "81711dabd6dd4cf0a40b79f3d54a4243de6bd362f0295702c2d9f5d0336b35c2", + "bytes": 2580 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-interpolation-type-desktop.py", + "sha256": "5d61995b4ef75f1e47e277df59d5327609be283fc744014791857ef61f9b0ce5", + "bytes": 2974 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-clear-button-desktop.py", + "sha256": "53c60181c3ca7da0eb16446a8eacf499963aa8e8a6e328b09a21a3301744c0b7", + "bytes": 9311 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-clear-v3d-desktop.py", + "sha256": "1d2a7e2bf29a8bc62b6e4e3ebdc9489160f9494d9b7284f7159cc536f2bca1c0", + "bytes": 7757 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-clear-vse-desktop.py", + "sha256": "09aeec25d69a57b657bd690998058a23980b6a4b9425fd63dbb26f14f4edee8f", + "bytes": 8143 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-delete-button-desktop.py", + "sha256": "fdb36e2d97ed687a20682a769f107f10801ab8845ad5e1061565893bad2cebd9", + "bytes": 9793 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-delete-by-name-desktop.py", + "sha256": "b3c5726677eb6881950a96a13b5221eb74d5b4e13be118ad7f20679c842a64ea", + "bytes": 8308 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-delete-desktop.py", + "sha256": "697bd750b9b3971fa108981e6b8f14f372705eeb39a7e20b33dffa9c1fa55c4c", + "bytes": 8114 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-delete-v3d-desktop.py", + "sha256": "a761edaab49b1a81a7374a465b64b67836ebe06fba9626ba3d5233f91072d541", + "bytes": 7884 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-delete-vse-desktop.py", + "sha256": "67f18d3fc73b9e16cdccc572f551eb2f0f16d496db952889678189eb8fa9253d", + "bytes": 8385 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-insert-button-desktop.py", + "sha256": "0fa0478deb1eb742105b5902070e5764113378ed1c7d390155cd2be61e991b08", + "bytes": 9955 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-insert-by-name-desktop.py", + "sha256": "754eaa916735252fd9a462629da646890fbb9285c201d569e36314ca1b1d8bb2", + "bytes": 7760 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-insert-desktop.py", + "sha256": "4c09e55f4f9935b4b4be4c7212451a5c1b01a569aa446c94fe80cdbaff5acda9", + "bytes": 8230 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-insert-menu-desktop.py", + "sha256": "a8a378ecd1242852dac76e83d5a19412aa6caf70a85f23364f17d48c806bb921", + "bytes": 7461 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-type-desktop.py", + "sha256": "32b826a427ee36e8a34f45280ff107118295fffb184cbdf4fbedc3b229a36a51", + "bytes": 2917 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keying-set-active-set-desktop.py", + "sha256": "c0aaab7f5aae2982303ca0ab4cb05186d3d67ba21728bb49a2f8615a300d05f5", + "bytes": 7065 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keying-set-add-desktop.py", + "sha256": "70f33c905c82b3668c51e0f0c177dc4676417f8a6d9f2c1e0c87d6b9f433a958", + "bytes": 6792 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keying-set-export-desktop.py", + "sha256": "e75538f411751b309e6eb2d4376839b0e1e70784414463356ab36ae39a7ad799", + "bytes": 4427 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keying-set-path-add-desktop.py", + "sha256": "62a65a5b58bdf9d883691d47c13ece9759f763acf58ab46660a6fc93f486e04d", + "bytes": 7673 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keying-set-path-remove-desktop.py", + "sha256": "91e9ae1891106babe828ead19c2f07fd955c06883fa4b03f1b4f12fb8a41824e", + "bytes": 6759 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keying-set-remove-desktop.py", + "sha256": "34a45f49def53589fb7e5b3bcfaaaf500af5e5dba069a8175eff1dd19ba354cc", + "bytes": 6327 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyingset-button-add-desktop.py", + "sha256": "15b1b30ea2793313f52c914021d148c50cd02ba5bcb8d983c37755f811bcd16f", + "bytes": 8938 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyingset-button-remove-desktop.py", + "sha256": "0a6c7361b44ef548f4d9bb7ef756e35bd9c09e82ec46edc60626a6918afc57b6", + "bytes": 9145 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-markers-make-local-desktop.py", + "sha256": "959fc711e2eb5c35d2635a65fd6119ec1aad4c44573b1bf0b65ecb3b05945902", + "bytes": 2283 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-merge-animation-desktop.py", + "sha256": "0f7aabaad764f96992e4a1cbe56a586ce0c03e67b0cdc642073a5222cf5b5fcb", + "bytes": 5943 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-mirror-desktop.py", + "sha256": "88f211cd8726e7214a68c90a2b0ccbbe0bdcfb237a7d1e2fb210a9b7bac8cf3f", + "bytes": 2895 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-new-desktop.py", + "sha256": "e0c6c14b6a8bc95ab86d49df53aae91b05f611572c2f3394f89f3495f477f77f", + "bytes": 2123 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-paste-desktop.py", + "sha256": "a687641f71ad1b2db47da6717a7341a14e3b3d4cb45cc3a94f447684073201d2", + "bytes": 2517 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-paste-driver-button-desktop.py", + "sha256": "2c167b38e9688880b499abe97babd2f51134b2b83efd5bb34140bb0b81079375", + "bytes": 10641 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-previewrange-clear-desktop.py", + "sha256": "02b2704fd6edae72cb31d603c6a1ddf4a3054370627044ba4c1f66e30c488e3e", + "bytes": 3887 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-previewrange-set-desktop.py", + "sha256": "0c667ab6e9ca9e866234fa9e190dc30587b59ffeba5616b4b37853569e6d24a9", + "bytes": 3493 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-push-down-desktop.py", + "sha256": "1bb759da4d9776f84bb5be2d615b7bd5edb6a4fafd9141fcb8e769c8076410e8", + "bytes": 2328 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-replace-action-desktop.py", + "sha256": "9415485899bb577d178c2345240dccf42ef90f1146a9c7be7064ddfeef9df0b1", + "bytes": 5232 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-replace-action-new-desktop.py", + "sha256": "9920d9911715035ed99a9615df37e8cfdb70c3aa9b96f12fd5296c52047b0c64", + "bytes": 5353 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-scene-range-frame-desktop.py", + "sha256": "054bbc89615177ecd199f28b55910e6aadbe1b87d04056679810c549ffdd8c08", + "bytes": 3993 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-all-desktop.py", + "sha256": "fe285ee6be545e1cbb9982563d35b98bee213d86a74dceefc274979ed887c73b", + "bytes": 2570 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-box-desktop.py", + "sha256": "5a37f76f9da69f172fba64ed83424ea7bec521f498f556c3b0142fc2d284f0e3", + "bytes": 2572 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-by-type-desktop.py", + "sha256": "1ed90bea542349826d6297378fd27e55c8b8370d6bc7dcf5251ac8b112887a30", + "bytes": 2670 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-circle-desktop.py", + "sha256": "3e5abe08be97e7db93a0229b63eeef48b6577a9d10be49339d36c0974126be70", + "bytes": 2563 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-column-desktop.py", + "sha256": "7e4c5fcef9b85239b3f561db2736eaa80de819d042b8caa3eaaf7fb3230cc189", + "bytes": 2854 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-lasso-desktop.py", + "sha256": "e730e9ae9740fb7a97113edb9af6c7f862128bf79509865727c432a275c3504a", + "bytes": 2557 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-leftright-desktop.py", + "sha256": "bf20b5d05883481b1b455d0eaab9951f9c4abc73406f3a499f1a03c49b044832", + "bytes": 2923 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-less-desktop.py", + "sha256": "52a4f3d5f5232f5843612286b35db8fb19050b8610c573a1bdcbbdae627d261f", + "bytes": 2836 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-linked-desktop.py", + "sha256": "4a1baae0c4add326934d50647d014248b43acf8e7ad90360921e1a487c25b150", + "bytes": 2985 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-more-desktop.py", + "sha256": "7bfff8a2113d7933e76c0339232810c8cd43d1a633eee7832acb4c4069790f5b", + "bytes": 2995 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-separate-slots-desktop.py", + "sha256": "4f1ea94c58a36b764cff6c40380794b927cd67212421aa36db8062b3817748a5", + "bytes": 4534 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-slot-channels-move-desktop.py", + "sha256": "8625500da296a6eee287dbafb242da7178e9f101d171f8cc62ecf8baffe2b0d3", + "bytes": 4855 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-slot-new-for-id-desktop.py", + "sha256": "76c3ed3a2046d4c5befa9f761ba020bf37859f5758a11f874e688d91bbcbc7e3", + "bytes": 5523 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-slot-unassign-from-constraint-desktop.py", + "sha256": "89120dd2da7f4c7f24fb12af02ce94d5929002e0d87cad765c8828999c74afdb", + "bytes": 5238 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-slot-unassign-from-id-desktop.py", + "sha256": "3166defd69de7fb19a52c7b9646df52da9efb330c27037e77c4d34f92c6b43f5", + "bytes": 5752 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-slot-unassign-from-nla-strip-desktop.py", + "sha256": "dadd0204062fb1bb54de6b2cf998e4313ed7dee32b201467ef3327200ba04685", + "bytes": 5497 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-snap-desktop.py", + "sha256": "01064fe4acd586e99986372a8b39a72340d1a961506c7c189b074ce7928cd568", + "bytes": 2959 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-start-frame-set-desktop.py", + "sha256": "a4957a066065a6e4ae474e1fb700fd97179dbc12472fb2ff19f7d5048bbcd3d9", + "bytes": 4784 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-stash-and-create-desktop.py", + "sha256": "5bb7d73a5be061df3d95ce46357a5b0f48e863be217a4677f25f33d31d960cd5", + "bytes": 2374 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-stash-desktop.py", + "sha256": "dca0ae7cc8914f9598a0638ff19d0c8a490efd794b9a6fde331d8e45306c97df", + "bytes": 2526 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-unlink-desktop.py", + "sha256": "e0f244be5712faa8caaa094efdfefc69c5ffaa9cb4e7e1185414f3da35e239ae", + "bytes": 3055 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-update-animated-transform-constraints-desktop.py", + "sha256": "3417ba9f8ef8d086457623fe2b69be2de5d3983a4a7b3be57450b7083889ba5f", + "bytes": 5385 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-version-bone-hide-property-desktop.py", + "sha256": "6b03a7faf073e652eb260a01068dd7d167e6ff88e46f75dfa9e1445edda1ab29", + "bytes": 5896 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-view-all-desktop.py", + "sha256": "67a1a212702db13b924daa567cabad7c117ea9627d43b07a7bd70243379b76eb", + "bytes": 2982 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-view-curve-in-graph-editor-desktop.py", + "sha256": "38e8a54df8725315b0c60bec955c77a3e2a1022d01898377f097268165be81cf", + "bytes": 8200 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-view-frame-desktop.py", + "sha256": "11a2b6c2d6d1bb5670a161a0db02a7f0b65392cc820d263bd21df15196d9a4cd", + "bytes": 3236 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-view-selected-desktop.py", + "sha256": "fa74311b3ca77b04212ed894c0511fcab7489cff781fc934177ce4e40a139647", + "bytes": 4456 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-armature-desktop.py", + "sha256": "5a03e4c6d195219b6fe567973565b0d29f8957716d03c419b04d2003ed67429e", + "bytes": 1872 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-armature-modifier-desktop.py", + "sha256": "3cb59a6bd15b97a5fb33fc5643bd58fe3155264a2598e1cdae17aa72626e146f", + "bytes": 3207 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-array-modifier-desktop.py", + "sha256": "82d5e59a60324101b1c97a277ab07afa2e1c52c55d1914fee27076d1c1619489", + "bytes": 2719 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-bevel-modifier-desktop.py", + "sha256": "abf8dd2a65c48883c8e8ad7c022d06629206f2e55a63184a8e26abc44e678279", + "bytes": 2626 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-boolean-modifier-desktop.py", + "sha256": "b84d0c7d6cc1554d59de2a11ce4140d504816fe140e74faf892a5495e8c3905f", + "bytes": 2684 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-brush-desktop.py", + "sha256": "515b1eab3b6e2dc0a4e9a65d20764816916228f41082739c98efd6cc882926bf", + "bytes": 1788 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-build-modifier-desktop.py", + "sha256": "18bbc10043f8a8820370fb4ea6c5a411398e4622c7956fea20add56f1f8d1087", + "bytes": 2561 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-camera-desktop.py", + "sha256": "27831385e1ed7e464c6b627bcbcb81af01ad2afa7ec66f28d2256641005802b4", + "bytes": 1787 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-cast-modifier-desktop.py", + "sha256": "c8a28c4f06077a9649b150cde2537055f64c0b27163b820148ba81e36b49c251", + "bytes": 2259 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-cloth-modifier-desktop.py", + "sha256": "308e449c9d896a870f33c8eb15fb6604a4fe7a22f646d754d356d5bc55fd94dc", + "bytes": 2062 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-collection-desktop.py", + "sha256": "fca7970f55b654527226b1b39a88934db35da787772c69ba65075f11e2664f26", + "bytes": 1662 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-collision-modifier-desktop.py", + "sha256": "21d816a1c929b96c873d15a719ee79187ba7201d79740a2ba9ccf81e4e566a32", + "bytes": 1846 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-curve-desktop.py", + "sha256": "e66ba2ae04f6de97e9643e581fa4426650ce4ddcfea0ffc8b3bf9fb14fdd26ee", + "bytes": 1933 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-curves-desktop.py", + "sha256": "3a8372a8ba072df2f5a3a1b3cccef44d219dde2193b551110017436cbd38e85c", + "bytes": 1813 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-freestyle-desktop.py", + "sha256": "7621b52c88adbae0bb611b2fd6ea2ccf1a0666341c36d4d03eda8f4c565efdc8", + "bytes": 2001 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c", + "bytes": 824532 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19", + "bytes": 5653 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-grease-pencil-desktop.py", + "sha256": "4d99d5e81fcdc8289e462279f2da278e2aea573f4d947fa5e71e959b506d1ee1", + "bytes": 1809 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-lattice-desktop.py", + "sha256": "56f48405407b4baba4ee9a13038fddc951c6fe607a3d64d6894a00e61d30be9b", + "bytes": 2588 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-library-desktop.py", + "sha256": "34eda5a724ca7eab9fcb2e4f39cec46125e363f548fc77beb3f09133151fdeb4", + "bytes": 2065 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-light-desktop.py", + "sha256": "90025507cc88c1c2be028e52a0b6e0b80561915bf109f38c64b95191c716505c", + "bytes": 2794 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-material-desktop.py", + "sha256": "42a870bb79eceb8e1789686db689842dfe390d58db2744fded8dd571fe9cd8f5", + "bytes": 3376 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-mesh-desktop.py", + "sha256": "8fe5859138f84079ddb43030fc8d22b596044b08d4f863da5dd25acaeedafdd5", + "bytes": 2616 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-metaball-desktop.py", + "sha256": "77a03db581b17eda4219b42ffbf18e5d1809dfb3bf45f3ac0c0051f27934dc0c", + "bytes": 2179 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-nodetree-desktop.py", + "sha256": "e0fa9c2dbe5f9877c00c33d83e5aa2407606a003163be086a082e631da3cd9a5", + "bytes": 2224 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-object-desktop.py", + "sha256": "3cb263b0bd2606cdce38bd433f90d50e738e93bf482c9fd16217306efb1521c0", + "bytes": 2054 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-particle-settings-desktop.py", + "sha256": "d49ba0b987adf412c1692819b041a35905330f2fa633464c9425932450419afa", + "bytes": 2667 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-pointcloud-desktop.py", + "sha256": "7223e0684f4bb8559228ffdd118b69dfd31c42959643ed17b885f13bb57eb400", + "bytes": 2324 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-scene-desktop.py", + "sha256": "ada4022a310510ffe37ccd7ef31a6bab8b37dfbd7a0b914f40fe379ba13db083", + "bytes": 2225 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-screen-desktop.py", + "sha256": "16ba526404558472d2dacc48e6f51440031556483dfeab9b52a43f69a3d5644e", + "bytes": 1927 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-sound-desktop.py", + "sha256": "aeeebdac9d14740843cc703150143087b7985138372ac1278fd3894e850c1ab7", + "bytes": 2058 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-speaker-desktop.py", + "sha256": "4f2b6e3359aeba90754ade475f1683acccc8d2f44a75552c3b04f79a0ddf13d5", + "bytes": 2365 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-text-desktop.py", + "sha256": "9ff73dbca7389f05aaf4834c4fb5a734a5c2cb2ef5e1a65962edbc0662ce0557", + "bytes": 2149 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-texture-desktop.py", + "sha256": "a91f9f69d389df79d7292e75ad64bd7a65a19bab063bac2ba311342b7d4fbb03", + "bytes": 2202 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-volume-desktop.py", + "sha256": "fd5b2110877e9372056292b543d23f1912ffcad32ea5d882054110202c6e3b16", + "bytes": 2016 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-window-manager-desktop.py", + "sha256": "29ac8b293e20b71a917fa834809cd15d881362cec0749a6ea1f7241b7409c6f1", + "bytes": 1826 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-workspace-desktop.py", + "sha256": "5e01f8a7802eface955fcb0396c99a3f0c2570751bb672cd2b3401389e80cf08", + "bytes": 1658 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-world-desktop.py", + "sha256": "fb4d115af8370f0d48a94ecc6d609eac5c0ca826a0f6d5bef90304b8c593d34b", + "bytes": 1721 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generate-brush-fixture.py", + "sha256": "c4fd4a6c28c595b742b1ef083285ac87f9af56b65d75ba03750925079a0aa637", + "bytes": 582 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generate-camera-fixture.py", + "sha256": "23c1bf411ed483f4bf111fb52f63e9ec77610f30819c68ac248075a851a59c97", + "bytes": 722 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generate-collection-fixture.py", + "sha256": "3f2a02903a1c1d74a3ba707342b6617b39a3857ccf58e30162ab993c7e112544", + "bytes": 809 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generate-curve-fixture.py", + "sha256": "bb93a2ca07e8e8ae81341c46edc7cbceb72ada2023b8fe956ee3b6ad03c7ae11", + "bytes": 971 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generate-curves-fixture.py", + "sha256": "792ec1d58d495cd9d425215aa631dd5e1d66f7bd5cf75e783b961760667faacc", + "bytes": 1308 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generate-freestyle-fixture.py", + "sha256": "e73088d9097c6ee94baaa07d3e8e279a55a0a34ccec2618e629699f840fd1ed1", + "bytes": 815 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00010.py", + "sha256": "35303113c57f1cc6c6b7bd1afc269be0c824b71f0c7bfbb0fd33f35fea40a8c2", + "bytes": 1286 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00011.py", + "sha256": "f33b9d5482193439fedd34f138b192d2e086db01205560276fa43bfd08ed430a", + "bytes": 1587 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00012.py", + "sha256": "9b261d7d516e0514e6e96a876661d0ab8eb83b844e92cd72dc4ffda460da0b2b", + "bytes": 977 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00013.py", + "sha256": "bb04dd1da461e061c27be9d4e160b2787026855198661e72ff4fee802b72c817", + "bytes": 2075 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00014.py", + "sha256": "c1333fbd1f86bac31f1db1f09056d2152f3b537fe59353f3d6f50767e8d724db", + "bytes": 977 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00015.py", + "sha256": "db1da7ca090d37b6590eab38f49cbcac9972e7ade1966d78f316048c6b0acf54", + "bytes": 1026 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00016.py", + "sha256": "12033eb9f1ef9f09fe86135259382e7cc938928c23a89b637d39e8e36c51982e", + "bytes": 1417 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00017.py", + "sha256": "64bb9f488573946dcf7d2358bd5d5f540055bb2813942e98ed154da179cb201b", + "bytes": 810 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00018.py", + "sha256": "c2b7b9c33e92952e9f10ca08b854b4bc0603350aa66f0277d08af4513d18d45e", + "bytes": 900 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00019.py", + "sha256": "36ead922241d5372ba4ae5c4656d449faeb62bb8958b4e96231c09b6b316fa13", + "bytes": 1048 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00020.py", + "sha256": "51890c98ae84cd4751896e0e84b9b63d5caa3fa58d47bba6f4074489b88dc24e", + "bytes": 870 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00021.py", + "sha256": "f6a97289626552e3e319fe72f3932beb610289c7da8710c0d4219312b0566c1e", + "bytes": 644 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00022.py", + "sha256": "10ef16727dfee1c69ea7e6b48f151016cc02a18a6586c478c286be2ed0c7a3ea", + "bytes": 762 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00023.py", + "sha256": "7bb8465ba094c9f7edbfbb66fd9f6d8b0a2e2b955d5fb990313daea09adbd22c", + "bytes": 1162 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00024.py", + "sha256": "85a16b7ebb4b00dffdc9277d11780b744267e0c789e75844b2749517c23e8ebd", + "bytes": 659 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00025.py", + "sha256": "849dddfddf9841b866cf2531af3f74b3fc42b5b6303eaa5f2273cba2a0b1cee0", + "bytes": 732 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00026.py", + "sha256": "e8cf1a2397e5a03f6cd246add30287ead990b9bfb932e34bfbbb4e95d7a98036", + "bytes": 732 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00027.py", + "sha256": "f93ea3ef289853f45ad9e1553007e47e89376d15ac2dd2e623ed2c3b783cd036", + "bytes": 553 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00028.py", + "sha256": "6d1a74f7340820917461720442888c5a705ac8140d6ad0d4809aace082c27469", + "bytes": 627 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00029.py", + "sha256": "b57d5f058a3f3862d6c4a8e4383ebd8c544ec2118338298eb5756fadc8aa306f", + "bytes": 742 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00030.py", + "sha256": "f3fb565611e07d2eb5a30f6557a3848d5f1d6e5231dcc9d4da80ec4973158f24", + "bytes": 1850 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00031.py", + "sha256": "28504da60ebf881eda9ed407884b403029bb8ced6131c425b64f512c82b2d292", + "bytes": 1701 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00032.py", + "sha256": "1af887a0beed22a1eaf199723535e2d1952c7458ea60bf22485c5b433dc17d2d", + "bytes": 1382 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00033.py", + "sha256": "4eeb3bae0015883cd91ebebed89b78ebd5c7732d3be16ac88561eca87eb5d053", + "bytes": 1567 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00034.py", + "sha256": "4523e086c326df712e621a9fdbc54bd29af0d94d241a09c437a247f824bbd8db", + "bytes": 1180 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00035.py", + "sha256": "24e6f54012d0454bfd6dc99a0fa6fe9fbfd3482781534479cdc1afb461305324", + "bytes": 1302 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00036.py", + "sha256": "219d0f2ecc7b67050865a46163e64cf7b28de75ce5c8cc52cdcf3a32817bd093", + "bytes": 1008 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00037.py", + "sha256": "b96eb3c62c590e55be3e442757a40c30b3b9c1deb8abc67d71f61b00b9c61fc1", + "bytes": 936 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00038.py", + "sha256": "e0726e2db3c360e0397d6aa1d480a63e5f4800c381c9d4e1cde33e36ebc0a5dc", + "bytes": 438 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00039.py", + "sha256": "3709078f49c92c34424c6e47d7f8870ba81c0bc2765bb5522199adfd4231e8e5", + "bytes": 412 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00040.py", + "sha256": "62aec1123186b57c5e1ffa58eea9833ea5d996a7509d49473331ac5f1843be44", + "bytes": 427 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00041.py", + "sha256": "241568c40f9308d09a1d33d87b47bb2549204f28820901133b778b640f086ec2", + "bytes": 1026 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00042.py", + "sha256": "b9ed8fdb43f5b4b7b1830881db7c770432f0023627429ffe51989e16b2f09746", + "bytes": 1028 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00043.py", + "sha256": "1fb842dde99a67cda98ec4a6feb139216ad277388b490ff65699e9f742ae095a", + "bytes": 428 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00044.py", + "sha256": "835413a7f88c4f2eb6b508d1913f1eb20489b8b5b1b1c35bceb2d094ee4f7292", + "bytes": 1008 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00045.py", + "sha256": "ac5a0a3c7a0a842a12499f06336700e0b17923619f27ce3872f6f05f299508ad", + "bytes": 417 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00046.py", + "sha256": "16cc612933b0c0137b4b986d4807ce12f838bae52457e941fd53f79c48677cab", + "bytes": 413 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00047.py", + "sha256": "d107f117b147b955027c694f6a82147e64a931dbb57e8ce0425ade9cbc9a1d99", + "bytes": 551 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00048.py", + "sha256": "46d0a48bac2f893ce03ffb055881159a3f55327e8314ef24f2530a6212ddf868", + "bytes": 608 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00049.py", + "sha256": "1d351d2f7f82f92d41ce1e1837b7bbaff41ec7046d51d118cb9a744b2f130347", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00050.py", + "sha256": "3940edc4cca7b1d5cf9a335b8190be744cbbd6e6201614372dbf39163ff9efa1", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00051.py", + "sha256": "c6f60bcce29d2015308c78d764b57579616d644d84dc27bb98a118b162348808", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00052.py", + "sha256": "53a12d6ac62873a4cc6d384c811030e43f57b08485a8c50c70d638a7433ec333", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00053.py", + "sha256": "2f3523d2f8378fbdef7083d93ac666059a3649c29fdd8c4bf5e44fdbb8e596fa", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00054.py", + "sha256": "e033647018764ecb7015f9d7c1e6201306ca36ecf3df29a8a12ecadfa19238bb", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00055.py", + "sha256": "6cd72429c65a9e5e36e099f0c35f523e51ed26d4c796be7b3e4397c3bb71509c", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00056.py", + "sha256": "b604fc0351b563558a59be40fbfbdd83481ec3c0eeda6ec020fc5e21bc527de3", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00057.py", + "sha256": "b2fed8f2d445c0eb10ed833385cc6e6e91394a97e367c6c76a3dbc4b61f5abb7", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00058.py", + "sha256": "01dd91ba30acebe5749feef841e8ca9f096ac35a9fb6b454ae30ed94941ddd21", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00059.py", + "sha256": "1077df2f66d6a954a239cbdb6d55f5b05ef382b7224c9bbd886695d47dbf3b15", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00060.py", + "sha256": "4bc32e262c02b41bbc4bccf0ae76e280a3b97cc5cb28495361f7e044868f9b51", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00061.py", + "sha256": "d99b89a5f9daaa8a454abd747b4903f0391ad21af6b315a46cd92bbcaf08ac7d", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00062.py", + "sha256": "b3e97d53919cb031f359cc15429f5801ac59614ba8f6993183f9db8deb280e3f", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00063.py", + "sha256": "a7b77f92944e9d61c4f52f478ee004f4caef642a810f1ed18d51318be04b0ff4", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00064.py", + "sha256": "1df74ba06ff31269cf1f98214aa6c0ca6aa0cc600e459315f92196f8aeb3dd4f", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00065.py", + "sha256": "977935d2e28afb3d9322e77d64440f5b69fdbf714ff6d8350a06acc1ea9cbce9", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00066.py", + "sha256": "e51850c49d2fc333b943f421c92fe6bdbfcf79d23ccab95ee87f783bfa57f8f1", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00067.py", + "sha256": "89a64c14a4b1007dc3011bde0b5cb27c4bf77bbffd7ae3e89c5f6aac30f40cb9", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00068.py", + "sha256": "cd982ce4a34537a22a20a4b8efcf676624ce2d7a7dfbd8896ed2c37494889282", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00069.py", + "sha256": "6ebf4e9475f40e8ef0da9c0fe99beb221f965efaad0953cd507c3d24be2d951f", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00070.py", + "sha256": "777e53fca82084ced7003328672cda678c8480db9c56c07517a19609ae353ecf", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00071.py", + "sha256": "d811aa0a430d7fb4db838627e8e71fa1ec812ec932d894512acf24a2d98ac6dd", + "bytes": 535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00072.py", + "sha256": "239d1ec0c9cb68b93e48becd7451a80fcbead84430cb3de2fb7545a9da658bcf", + "bytes": 411 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00073.py", + "sha256": "ce9be025d573d87c48bd4975f4cee1c343749156d163abe51a04a05e9d951ad5", + "bytes": 433 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00074.py", + "sha256": "c4d29eb33cf3abbca68333cf064e634a6202889170f20eb0d47868cacbd47cc7", + "bytes": 433 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00075.py", + "sha256": "d5d161608d986e04d66afb8871ef34eae2c27bbf8fe654b2982c6a10553150eb", + "bytes": 425 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00076.py", + "sha256": "45797f19ee517501033c3c95e79f13f4fc7f8699c17ecacc54367b3932ffa63d", + "bytes": 550 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00077.py", + "sha256": "b3b946e1348773aafd1df5c9aa192e566e79adaf06112e23e2d7a00c6c6fde01", + "bytes": 1082 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00078.py", + "sha256": "614c0b5bc0bfe91fe29a956067e1cef0ffc1b6a072e4178682323143a86861e1", + "bytes": 968 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00079.py", + "sha256": "06ae4b6e3e7f9fa3a2a999bdd916ff3f8b482bb44e2971d4775e5fc3a1fd41eb", + "bytes": 972 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00080.py", + "sha256": "394a6517eeeb12cc033b7ae43d4cebd8d99a2c31077486909ca65613da51f0ec", + "bytes": 1001 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00081.py", + "sha256": "a6d2734582c3e8f746267b682bddd0356a231609162f40cebb79484e47e4ef42", + "bytes": 840 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00082.py", + "sha256": "32c0bcc7edcf14fbbd9e12465ce61cb7e0d15c7754062096329ebd6d6cd9ee46", + "bytes": 1020 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00083.py", + "sha256": "43920644f5f247ca216205f3bbf3aa39568dc1a29b205bf5852a0fe6e803acab", + "bytes": 963 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00084.py", + "sha256": "0b5d9510f41f00719d7ddd95d23fb5ee75a561bac8cdb65a1a66950c24366698", + "bytes": 951 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00085.py", + "sha256": "6a88aac132385510134ec5df930649ec34398d57ef67a5176aec9fcf4ba2db3b", + "bytes": 972 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00086.py", + "sha256": "808f73b3c5cd06d60f96d9040189c4a2da64487326d9c8c9dc385f7715d8c4c7", + "bytes": 951 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00087.py", + "sha256": "d9ee675f1c26cbed6e95daaac356c5eaec6c76f065d874cecd6710dec46e6261", + "bytes": 996 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00088.py", + "sha256": "1aa118a77f3639ec6761c0083876c4fcb70b504734ffb1f1a6366e670ecd3255", + "bytes": 915 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00089.py", + "sha256": "bf07af3faa32ab5533ad352b46c4cfdcca45f2f8d22e9e2b894aa7566f1ee250", + "bytes": 955 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00090.py", + "sha256": "8a3687c6baed4826d7acb1e07c01ad7fc706b7279076eb32267f290c1c1538dd", + "bytes": 951 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00091.py", + "sha256": "9c31a3c7fb798db179e37d43d89b633141e9b8b18dbfd34a7eb1502c5ef805df", + "bytes": 971 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00092.py", + "sha256": "93acc4af7e20ddf63e1bc6ffb4e200b06af28a4ab943311b2170a8c01c248c06", + "bytes": 980 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00093.py", + "sha256": "3fad88717f143ab554d3926f86d218ed47ee4a682db379d337f897c41df2088f", + "bytes": 947 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00094.py", + "sha256": "3e10f94a84a52c1b6114d1d6fcf764481b8bf79dfc8cb533389c016c34c36938", + "bytes": 1269 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00095.py", + "sha256": "a82183922f2228f641d8bd59689e807e8caa495886a581e58e86f9c307b0f45b", + "bytes": 964 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00096.py", + "sha256": "8ffa8697f2d4490f9ca2f04d4eaa3866be4bdecbe17e9d5db11c13882034c009", + "bytes": 1021 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00097.py", + "sha256": "cd26d7bd580a78e40a78f7bd47526dbd3430d75b9c1f9c63849668b613277960", + "bytes": 1073 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00098.py", + "sha256": "988ad257572050d657a7c82ece4f639246a93e700ee3cb216469fb73bbb948e9", + "bytes": 977 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00099.py", + "sha256": "bafaa8cf007d02851acca674b3894d758a8dc3874ca87c184d705a07fdfc724d", + "bytes": 1002 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00100.py", + "sha256": "38d58e97c7b10b34abb70090deea9127a9bfda58bf446a8fa6fa7b8835482e82", + "bytes": 1062 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00101.py", + "sha256": "d86878aacd79189a5c1fce75f94eab1f7c04039562acefa101152cc097334765", + "bytes": 986 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00102.py", + "sha256": "aa91e891f053d2d4716e204c64e54a9c139f8dc9e53b23bf43e7f9c4cbba93b8", + "bytes": 974 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00103.py", + "sha256": "383166f3a110e555a87ba5e0f62d5805c6890d736cf79c6f1dd8972e6e6b0a2a", + "bytes": 1015 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00104.py", + "sha256": "d3d6405f1f20036043610b8a8bb22faf5e8652d6e47ee08cc40cd5e9f5567464", + "bytes": 1011 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00105.py", + "sha256": "59dfdb7ba6bb853ebc3d5d24a7c63c6a09fdda5381d62febc211128a87adc7d9", + "bytes": 1035 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00106.py", + "sha256": "7aad13aed9fc5da77c671e89961dc744228cfea00c65044270000f0fb8e4c396", + "bytes": 918 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00107.py", + "sha256": "9730c26f96cd994d92cf2e2670718124f899e0ce2e3d044a10404f8b0fafa834", + "bytes": 999 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00108.py", + "sha256": "ee8667312b3608fff806a2f888edca90cad3a960184ee64d0b7b33fd9cad2657", + "bytes": 965 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00109.py", + "sha256": "2c8f4bfe4a36a069fd6e106fc80836bf38df2663e2343a6cde15114f00cbffdc", + "bytes": 1044 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00110.py", + "sha256": "17fb8ee025fe4fadff5ca63401d795ace27920d88fd4dbe4c32af7614e0892ab", + "bytes": 1101 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00111.py", + "sha256": "70a5a835615617c1feaa7795f1ee8c4dc2e07021a62c97ea87915a4231ef509c", + "bytes": 1002 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00112.py", + "sha256": "403b955f748db90be606506213ee1cd50f8c95f45ecc4ed1bda8a847dd18ab6d", + "bytes": 1043 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00113.py", + "sha256": "e1eb89000230ec1d198930f06da6b5b35207a83a93eaf3e333c69560d212c5ae", + "bytes": 2339 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00114.py", + "sha256": "ab1e15afe86016892d2abf43ae84836ff4c84df917d15ca8f1d8b245e138bd52", + "bytes": 1981 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00115.py", + "sha256": "e91f19fa0f133900cace0b2708ee5a7fcb6efe589e036963b2b0fa6ff5bbaef9", + "bytes": 2658 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00116.py", + "sha256": "318545fd674bc2477d674292bc3c273684978e101c526a258f52af965dc3eb6f", + "bytes": 2388 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00117.py", + "sha256": "517943d741eaceb53e7f8d89a8bed07282afa157d4357e3a25690fb8f5df89b4", + "bytes": 2216 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00118.py", + "sha256": "6829baf79faa5225c6fb8a18201a5d91a2371ac4480ba1180534c7e8a8e89624", + "bytes": 2227 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00119.py", + "sha256": "2db8ee3d18c634ae2f28d1dd2a3ced2bf9490be578795b59a1ca9e96eb1992af", + "bytes": 2357 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00120.py", + "sha256": "0db649027d8772539a011bf5b5eb021efbd95728f9af706b4b42a361e88f8c3d", + "bytes": 2243 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00121.py", + "sha256": "09a7f42b438f7fb6b14eab1fd8fc436ee938ec62af8f11d62b24a46215d7a05a", + "bytes": 2267 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00122.py", + "sha256": "a80fec742fa6c4f9f0846bcc9ed7817e68ae9b78a3789b5e9ffd873a4f71ba22", + "bytes": 2223 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00123.py", + "sha256": "8b144f6bc50ec8234906f07e81bf661353fe123e0ff85dcb1874185914f4d844", + "bytes": 2224 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00124.py", + "sha256": "c80a0232ad6d5628eac7ed5b59c83f6e9741cfa0f793491db339171ee79a4ec8", + "bytes": 2294 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00125.py", + "sha256": "10ca9311b9454c1926c870a171b0bed6e3c6057086be253bad11e2c86f0637cc", + "bytes": 1949 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00126.py", + "sha256": "973f3fd3109a9f36948e11db0d46fad117fe7353a867a2a673fa77faaa6f2e60", + "bytes": 2257 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00127.py", + "sha256": "56daad95fab95e4d7896e5b2b4e30f84a8f33df7e920f41458d95e55a93991c1", + "bytes": 2017 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00128.py", + "sha256": "e6697304148d72a7305900d6893861f284fe3b42ec88c3b35b8bb2f78b728180", + "bytes": 2179 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00129.py", + "sha256": "b7c42577aec64a99b2533c236124c6afea9741a82666065dd1ff0d7570c9aff1", + "bytes": 2135 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00130.py", + "sha256": "889c12feb0e8064612f899c7ad431f647d735cc00f6da56d79e8669225378b9a", + "bytes": 2496 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00131.py", + "sha256": "f679375cd1a45f13e2423cd540b557e9eab841d4c0d535c064beb5794887738e", + "bytes": 2288 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00132.py", + "sha256": "728a07f627b276ffceb7f5ddff059829095ab7f7175ecbfeb41129f6b43b306e", + "bytes": 1878 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00133.py", + "sha256": "5bb6e8720b5f126590fb36b92a5fd05becfe6c710e99eac6694b391675e10572", + "bytes": 2212 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00134.py", + "sha256": "5760b84ac789d3aaafb2577441a7638da28fc983c0dcfb126fb36cfb1b5748e7", + "bytes": 2581 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00135.py", + "sha256": "3072ac8ebeb375655730d030e0fc757fdc8002811ad2747376ec12dbfac1c993", + "bytes": 2575 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00136.py", + "sha256": "7d29d879169aef8362f53a39130b2a4ef0ab3ac83069024a78338197e09ae030", + "bytes": 3018 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00137.py", + "sha256": "8743db045d9df0505233a88785b92b0fadb2551788b909047d1aa2376e8e9516", + "bytes": 2267 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00138.py", + "sha256": "182db872745d0ce5746919db571e67ff715c1114b3936bfa659b6e71acf303a7", + "bytes": 3008 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00139.py", + "sha256": "d1175acf47e8ec1c4998582e22d9434a4eea921f551b6c99f9b85b7f5a6727be", + "bytes": 2305 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00140.py", + "sha256": "62fe22db41e856439c50c542d0a62b6db4fbfc80facedf625ba58291d3b4a928", + "bytes": 2195 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00141.py", + "sha256": "3e27b0fffe763b6526e4e32fa9b40aae72f229038e846237b90e72312aa1a8eb", + "bytes": 2274 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00142.py", + "sha256": "36dc0cf95dae703e72f8071625b94617e8d13a1845dc148835b5584625281d16", + "bytes": 2258 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00143.py", + "sha256": "fe0b8f6c70b0a2fece59b696e5e83e55cb2f72705bb89db43b8ed4e953a198be", + "bytes": 2223 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00144.py", + "sha256": "66275fb985c801c659e063f2379d9154093550cb7d5916013332b88aa25dfbec", + "bytes": 1848 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00145.py", + "sha256": "cbbc5b2e3e84ec8442c4acb065be91a6818ff7c1d2d92e7a0e13253696b8389d", + "bytes": 1926 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00146.py", + "sha256": "ab4682dbd1e828f8f18d2bb0cc17ff6a795d364fefe5f0dadb88b74f55220638", + "bytes": 2007 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00147.py", + "sha256": "738d70668b71d9be03b8aab088c9a71e82f102f97cc0435c58a19c6838566ca0", + "bytes": 2197 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00148.py", + "sha256": "7c21cdadfb8d08c2f44ba2e58d53f9c879773b488a53135bc3a9ad4ae96aa3d5", + "bytes": 2184 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00149.py", + "sha256": "9d7d4a10fb148fe40a1f624886491d64c9dde1bf86cdf21a97c86ec167f7cb92", + "bytes": 2517 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00150.py", + "sha256": "582a5e470a2b47095762ddd6df93ff8ffe8a67ea45aa2b483f87528a9ca7180c", + "bytes": 2130 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00151.py", + "sha256": "6ac3acd4031a4dc3967d1f49546148fb45854ca1caa3c0569b7246d996cf06a1", + "bytes": 2883 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00152.py", + "sha256": "dc920602484d5b9d90b714de6044c5687f9001fd601170de87019ed194941284", + "bytes": 2474 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00153.py", + "sha256": "a1dba3b7bd0b5011eb2867f12428b89b9d76b103ebe6109e78c9711dfc0596de", + "bytes": 2235 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00154.py", + "sha256": "0deaaa7054c65927a2cdd8c5ebbce257ea05a0b81e0c4df98d6cca559553af0d", + "bytes": 3020 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00155.py", + "sha256": "14be8a2dd379b1bbb1504618a18f15fa1aa64fba64c29569896b3e5d32f3e001", + "bytes": 3046 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00156.py", + "sha256": "63e9b942070f44dcd5b8a20f82aca62d880d57a5955ff8f82914b9a9f92dcf60", + "bytes": 2136 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00157.py", + "sha256": "5613100e6c50539e8dd7371cd3c4e2c8469ec3ca384c42126e11a210ad0d5d7b", + "bytes": 2519 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00158.py", + "sha256": "1cc7409084194b006ae60b80da804de4972e671e073b6762353f9db516ea05df", + "bytes": 2795 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00159.py", + "sha256": "04988ce930276e01b61838b48860601bb829fdaf7e7d9652eb1fa2f3b36b6f6b", + "bytes": 2485 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00160.py", + "sha256": "83337ffc4859fc026819640065e8bf0aa889d5fd9b23815366a96190a45df956", + "bytes": 2935 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00161.py", + "sha256": "f042c1f5ea55d2f146c81e9765b451ea2a58c82768095c76d632ea9de46b198e", + "bytes": 2584 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00162.py", + "sha256": "ac23b4652f68035ba12003a44c75d7104be17132f8a2edce5f9b3f64052a57d4", + "bytes": 2996 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00163.py", + "sha256": "fe2d78ca3844f1b81af065855f95f4f0ba1b70259e9b9260f828a6509f3304ce", + "bytes": 3868 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00164.py", + "sha256": "84fe57e8233f869bd359215f6fc90e4291ee07fc06ebd58e45fb302778862000", + "bytes": 2758 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00165.py", + "sha256": "1c3521dd8c3ae4f8ed564391ca8a8d434bfce4e67e78dc0fc19e809aeb030040", + "bytes": 3729 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00166.py", + "sha256": "1689d5a753d6a0e51c9ebd066ef08938342c038568151739d3e10b7e86f52c50", + "bytes": 2430 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00167.py", + "sha256": "7b9cd25c07e698fd4f389011a147489fd2b343dea1fd94f14bf16ad78aa237ae", + "bytes": 2859 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00168.py", + "sha256": "b9ac34e412e9f8f8a85fdf9155201cc9e2382c1fb5bfee98a47421ce76b23e9a", + "bytes": 2705 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00169.py", + "sha256": "06268638700a3aa6312e8cc86500e3eb3eb0b3271ecc8da9d8cce3db0af33b9c", + "bytes": 2705 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00170.py", + "sha256": "9d8ad51d5a174ccd376baf67ce5323c59af5306c74d5da18bdb1c44df2a30c42", + "bytes": 2873 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00171.py", + "sha256": "a3ae3c94e453977cc8caa62b725896e352ef763e5ca8a03ac1ee8d9a95d32ddb", + "bytes": 2916 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00172.py", + "sha256": "61dcbd69b1d6a3c88eb0c1d0e9c40499730a8e006e160d83b2d1f1da55b02ad8", + "bytes": 1988 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00173.py", + "sha256": "6b8a666c9683a87182c0a35c6cdbf54f4fab873c743898e66f8ae4eef7043829", + "bytes": 1166 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00174.py", + "sha256": "95bc46b2ea19b5a7012cd75c885a87eb7ea8ad79fbab0b10841205889e4381fc", + "bytes": 920 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00175.py", + "sha256": "e4edbf58ccda3bcd61d4cb4fa2d80c2f68bad6313c94bc0c84115eaa1a4b12be", + "bytes": 1168 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00176.py", + "sha256": "9591dac532101bf681890f06a1f88f2f1a106e728846e3b86829abb834f1291b", + "bytes": 1172 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00177.py", + "sha256": "c8f783aa06acd980ebd0f3e228f4065e779434b22059e6b032b652adb521a1d7", + "bytes": 590 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00178.py", + "sha256": "2182c0a9dda794a1f037cea8178151382cfc9c15c1599c23f3d81d4d1883f6da", + "bytes": 1319 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00179.py", + "sha256": "600336ccf298afe28fdd1141a2dbac794fde599f28c31f9d7a7a8eb15bb80443", + "bytes": 1310 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00180.py", + "sha256": "e72a0c68e1ac8173c70944bc48f7bd03365913e24b831708da40a28bde936f4d", + "bytes": 1317 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00181.py", + "sha256": "bc42dcd74150bdc50dba1190dcda12f0c7f40cd8886e94c541243c5e6df460b7", + "bytes": 1630 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00182.py", + "sha256": "8424d4ca63c32c9127c9cf1d095a6dde62121ae8ddccea5dc0bbd8ba37b27a20", + "bytes": 1325 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00183.py", + "sha256": "482995ad5ea8beeb8e6a3c4a004de282587d09f5186bac854a0513c747e316b0", + "bytes": 1654 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00184.py", + "sha256": "9bd3112772fe91a57b1cb89a781067316442d4d06e7fbd7fc84429a67fe0272a", + "bytes": 1392 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00185.py", + "sha256": "9abb73d74b639eef255794c35ce8bb102959a53d4d12f8818d45c28946b1e791", + "bytes": 1371 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00186.py", + "sha256": "edd44185e79eb16c51f2160e5bec5d6ee5dd5ad2d1b662533fa0cfe399e713cd", + "bytes": 1651 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00187.py", + "sha256": "7eaac0eb63db785dea7da7df596fa19ed5447b356b13667c5f25e5ee1cecf14d", + "bytes": 1346 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00188.py", + "sha256": "109653bb9dd32d38ba755a6b284bdc75cca195894327db2f96feaf47faf8d935", + "bytes": 1665 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00189.py", + "sha256": "20c8d28aea4b14e24dfe83e1b7c3906e8bf1f2ed1fbb723542320a7ece13f73f", + "bytes": 1620 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00190.py", + "sha256": "f54bc93cb7b686883ae9bf3b36406d953af3c8246dca01e439999b5e09e4574a", + "bytes": 1743 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00191.py", + "sha256": "42f787b67fd1858ef184ffaa76438a025d92fc49fe80cdf3a3334e314839a123", + "bytes": 1296 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00192.py", + "sha256": "cb932180b82d9eabe3fac18fa461f4107fc6d1016a262c120c8be0758eeeeafb", + "bytes": 1476 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00193.py", + "sha256": "bf3d651dd050b39186f50095519cd02e16fbc9d652e2d307b7f5a05703ab18d7", + "bytes": 1534 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00194.py", + "sha256": "182bc9eda4c6383e83f353cb0ee8fee299caf954537592f58cd68f1e1b1328e2", + "bytes": 1618 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00195.py", + "sha256": "4f8fb118aa60518844dd181607994d857dc8828d66acd526fe0de727491f54e6", + "bytes": 1524 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00196.py", + "sha256": "61eefce310c581808e90c8378b1f085c00d7d28878c0c62946489225b020f2d8", + "bytes": 1349 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00197.py", + "sha256": "34b9c47630db975f40df4ebc156c9b0488dc7bc85ff0fe6cbcc4603aae2da14c", + "bytes": 1613 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00198.py", + "sha256": "85004c8e8f9e92eea7a87f266de34d07950b993b7af6bd09e642d99bd1f54eb7", + "bytes": 1665 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00199.py", + "sha256": "6ef118516c3eed69fa601631d26f5ecef355fe9f58907a1c7e33c4a8cd2be88e", + "bytes": 1222 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00200.py", + "sha256": "92d82b88dd301e895fe075c7d1760b1cb4147c7049a3c6d69509fc17e14b64d1", + "bytes": 1765 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00201.py", + "sha256": "94fac7954b5c1fd566c48b4dfac58fa2581b6068360cccee7b436e30e5bed9c0", + "bytes": 1707 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00202.py", + "sha256": "bf8fc46f38503e773ffa46248feca82de6120321888924eafb3779dc232984e8", + "bytes": 1870 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00203.py", + "sha256": "7da43b3e6d4774e5cd90ecbe51e6249a34778e58caec85945fbc9f3abfe83c4f", + "bytes": 1565 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00204.py", + "sha256": "bda30fc04f8985b0dbdce2e239ee7a05a12e9362ca162803b54154684844d226", + "bytes": 1641 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00205.py", + "sha256": "54a5039afb72cbdd942e1b9c77cbbe5bb09a4380ebca186268dd676a357621eb", + "bytes": 1754 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00206.py", + "sha256": "a0dda3e2468216bebc829cf9d64ff8b2124d243007bf466653df78aadb1e109a", + "bytes": 2190 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00207.py", + "sha256": "6c664ddeab1eb7cbe143c2c23ece749225b7f70a641590922af6a76fd61d44eb", + "bytes": 1491 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00208.py", + "sha256": "47a3962e2c07fc2cef07570c671001c612ece290ed811bc4317143391e99a82d", + "bytes": 1455 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00209.py", + "sha256": "45e9b34637496caa72e521214539d9ef60646191e90dbed5bcd76c3fa7366701", + "bytes": 1506 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00210.py", + "sha256": "82ae2a1e60b7a8f1adfa9fd0451dda47daabba420bc658177172fe3080aaadd1", + "bytes": 1712 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00211.py", + "sha256": "587d7d78764c9f107677dccd537f0265ca0c340e25127938fea64e99b33fff38", + "bytes": 590 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00212.py", + "sha256": "d38cdea9f5584506f0b3ac87fa734da388fd891c81a0438031e5bb881ffd77f5", + "bytes": 1600 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00213.py", + "sha256": "f5e1eefa9c012d091f413ec771f6dab8dac496f2d4481e33fa288a61a6ef4c86", + "bytes": 2312 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00214.py", + "sha256": "a5c2ab327f0540ac3b80088e9022c9231be30408defe536263a87c3394677b80", + "bytes": 2640 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00215.py", + "sha256": "b755086a190245ff4ed5effb4c713790ea8e1b066c79800ecb7b32cbfc1c1764", + "bytes": 1343 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00216.py", + "sha256": "1e14f51d34a6a3781b299f826ef1a449efa4ad0dc744960b529a00671ffac017", + "bytes": 1512 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00217.py", + "sha256": "037230ad7bb83e69a7c89aca12b62a87dd13d18307bf5f6dcc2c6b0ce059c51d", + "bytes": 1252 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00218.py", + "sha256": "a59d8918c3372dc41d1fdf06efea2fa8bdaadcadd0a1602af029d3682a7cf924", + "bytes": 871 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00219.py", + "sha256": "97a7da237cc8f8154f08b96e2ba6b5d6e608a6bc1b0bfa20fe165c00a3bb68b7", + "bytes": 1104 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00220.py", + "sha256": "3af1d354e35b31da18a187e0ef5f5e2b5a2f11111058ff1dc3648f6134679b41", + "bytes": 1239 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00221.py", + "sha256": "b2eea8780bb0095ab12b3a0f6e437054f6d01450a9a111030da0724b134bdc69", + "bytes": 1290 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00222.py", + "sha256": "74ddcb85092783361facd3388f3bfae2ea1794b6d1395f2381928f8e296d3c5c", + "bytes": 1403 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00223.py", + "sha256": "8edf3fc266d93bb225a0f13d16034a2518f2a85f424931d9c570626417c5ce11", + "bytes": 1320 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00224.py", + "sha256": "26498cbab951fc7494cc364a6487de4b2901ddf17844b95c1c5416dcb058087c", + "bytes": 1881 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00225.py", + "sha256": "60175e59c0362eff81649fcdcbd180fea7f06233ebd7d42cb3d35d2e66804901", + "bytes": 1764 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00226.py", + "sha256": "bf2375e84e871ada6615365fbda390de46a6f7adf1202d76ff6d6b34ea7ef364", + "bytes": 1789 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00227.py", + "sha256": "c08cad057124430d914c10b3a9f8f79d94809fdd283778397a91085364784ed5", + "bytes": 1833 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00228.py", + "sha256": "06377349aec2193a46188eea4f6b00c2122442636bea2547166ec96caef2e7a4", + "bytes": 1957 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00229.py", + "sha256": "008fdaad2977e6eb878e28e46d7d9b1eee6600b5328f954ca251576b17ff6e19", + "bytes": 1828 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00230.py", + "sha256": "4f71a937c4dd2f7284f1f13347f67c7fa1a640016c681bbd73818e334b3d984b", + "bytes": 1477 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00231.py", + "sha256": "3c735e79dc4e8f6b7f32c95ba1613ad7ed59b90c81821c0cf5e1cc9535b745a1", + "bytes": 1502 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00232.py", + "sha256": "10bd16bd644bd55dd57d427216828a7aab6cbda49a1d5cbb570d6e78e72fdb18", + "bytes": 1862 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00233.py", + "sha256": "c7da3085c85ea178b7dc834df8a05950197d005ee2d6da7da420ebe2c9ea8711", + "bytes": 1735 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00234.py", + "sha256": "408362122138a1f2e8fbe837c9d78795ff42445cdeb2359bf001888cfc6ed538", + "bytes": 1401 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00235.py", + "sha256": "9dcb072c97f9c758d33de0280685665fe089c24393f6f72b06fb02e490e2befb", + "bytes": 1753 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00236.py", + "sha256": "7f4e66d90c76efa8c4f5ed0f0e052ed1a00ca815ff24630d08a201daab94233d", + "bytes": 1429 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00237.py", + "sha256": "2345158899b35752b6875a28a243668369c51a087eef596eb420e603f0393a75", + "bytes": 1662 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00238.py", + "sha256": "dd00c6d9952cc91579c298a700c1698e1bfbe55542400bb694c6ea3c9b79bf5d", + "bytes": 1663 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00239.py", + "sha256": "651deeb3808998b44611bcecdfab9adc903245f53b66f521fad03443b900e047", + "bytes": 1422 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00240.py", + "sha256": "586f9ed3d865bf4ca759b36d010013ba33a34ff8862578c65b25acc9f53a4a69", + "bytes": 1446 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00241.py", + "sha256": "ba7a8fb5d46dc073f2e93180534340008d9f35824bdcbe829ede880015061a08", + "bytes": 1438 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00242.py", + "sha256": "0e2b56d0020066bcd69d7ee4970c4eaaf3f3cdf02a9f528903997246b3a9ea48", + "bytes": 1657 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00243.py", + "sha256": "444c10dac8003527409024263844587d5c7b6d1cec495fc8e408b6af14e60fde", + "bytes": 1640 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00244.py", + "sha256": "848e43152c5035fc40d6ffafa566dbcbf4a7940d32fbd75a7d696321d125c938", + "bytes": 1409 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00245.py", + "sha256": "9a7de621f6e88acc93d19697d4a3db5223943318e70e4561983fd989cf120aa3", + "bytes": 1703 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00246.py", + "sha256": "2d2f7b43517d2b39a44f6a2606ecf932925f31b6896c01a657ce2dfe8008e703", + "bytes": 1736 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00247.py", + "sha256": "1767464c3c6a2a24207c56bb59fecfd20f49ef7b83055716b209de354a04ff5d", + "bytes": 1669 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00248.py", + "sha256": "8fac586cf7c3f54822111df0c88151797e68af0283e39f075dd9cd70d080ed93", + "bytes": 1444 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00249.py", + "sha256": "38b8b84ca841093bff16caf3aa8b10e8f033f16649f58c7b77292b34fb94c08e", + "bytes": 1208 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00250.py", + "sha256": "fd1e6bca22e8b9e29cdaee6d7df3b561d7b1cfaff4d8ac96e9a7b807a8940e8f", + "bytes": 1429 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00251.py", + "sha256": "a6eda558d5ca8f973a6cebaba1160453c6ca5a9dec3b47cb05f89dca31f31d86", + "bytes": 1737 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00252.py", + "sha256": "8d394493b9b2a43fe98a666d6eaef5f1facf699d5063ba82a8b3ff461037715f", + "bytes": 1711 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00253.py", + "sha256": "d64e0a3681f8501775ecb6fafafec3fba567b42c10fbcda3507624560ddb05fa", + "bytes": 2077 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00254.py", + "sha256": "f08a4362f6bfbbdd8eeeac7e9961613f21450b64fcf5138fd2674515c97229af", + "bytes": 2037 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00255.py", + "sha256": "19e723cd74e3e0adad28ed2feaec157ae4725f88e4863457c91ab0b9aac4ade3", + "bytes": 1596 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00256.py", + "sha256": "2e644c7207d74ac4a1e3e9c9163af7dd823b155622e2caacb4cdf6f47b7a49c1", + "bytes": 1793 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00257.py", + "sha256": "eca6a8b77191833657b65e86c190c6d4942df4b560cb57a86a0aafcad26566c1", + "bytes": 1699 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00258.py", + "sha256": "5b4a7669e1232b981973a7317ff946fde216854b10eee36a7adee5b707f8d00f", + "bytes": 1472 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00259.py", + "sha256": "1fd82486ed5774b54fe3ddb79f7396a32754f2cc60cd139aa87c335a1222f8a9", + "bytes": 1649 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00260.py", + "sha256": "2260f113bec783fde138407c7eba120e72e860d3961b9779d1d9151c5247d7dc", + "bytes": 1250 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00261.py", + "sha256": "49aa287e8b24d914f2157f9fffe4c4c63cc7bc963b2610e8ea3ccaba0de7188d", + "bytes": 1207 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00262.py", + "sha256": "e4865caae23b80ebb893349e49fb8f8b313babb9d63e7e80c919e8b9ec9dfa90", + "bytes": 1278 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00263.py", + "sha256": "d2c2558f53a666ae73e4074fcf6c9db8d39dd7fb3de65537e66c17a70533ff70", + "bytes": 1437 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00264.py", + "sha256": "e7fd141d87414ee12669a83dbfe54ef47b557a9c517ba8ec164264882c80e8bd", + "bytes": 738 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00265.py", + "sha256": "1a86706f3c011d4a0f0b443bb6db3500704b898f0b42af5795ed2ee94b6c4286", + "bytes": 740 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00266.py", + "sha256": "e299bf65f70bc4eb08204f42894c961d0a7c2c69bfab5e4a26ed8924f52a6271", + "bytes": 1014 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00267.py", + "sha256": "bc950bc190d2e9c607a6d41cfc448977fe478b98723640287f63f4f42fcd2052", + "bytes": 1602 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00268.py", + "sha256": "4b9ab994369328b54f630882410066f5ef04980108a692d686430b8331454b6c", + "bytes": 1587 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00269.py", + "sha256": "2be254c3d36647b1d6dfb06af054ab96a0def10666f911bedc3a4225206ff749", + "bytes": 1536 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00270.py", + "sha256": "ccaa0c91694f931c0fb6313695b8bb5eae795e8003d24ff67f0eb21328184727", + "bytes": 1425 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00271.py", + "sha256": "8012efb7f85f89625f13686743798051fa5febaae361b179117c992ca4bc972c", + "bytes": 1043 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00272.py", + "sha256": "e7aac853fe0c589dc19375ab30259635e5af15c59aeb12a75eb8f7c6ac745052", + "bytes": 995 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00273.py", + "sha256": "120262e67b215a5d778100b820d74b8d3f216b20e36402a4f389099751a728c2", + "bytes": 1007 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00274.py", + "sha256": "7db1e65ed1f4329210791cfffc2888c321073bfb557cbac158577d7d4375bb59", + "bytes": 1435 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/modifier_gap_fixture.py", + "sha256": "85d5bc91e433a402099aeefccb5bed1a3711c88ea3484ac6083ce45a6c4517aa", + "bytes": 1068 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "bytes": 132196 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "bytes": 15610535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "bytes": 132196 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "bytes": 15610535 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "bytes": 18938 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/web/package.json", + "sha256": "9c553a1e0614bcd190149a409759c8fe5d83a0bd00fe49b4bce049ffa01e0f0a", + "bytes": 35813 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "bytes": 17846 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/files/web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "bytes": 86260 + }, + { + "path": "tests/golden/corrective/C0-002/staged/source-snapshot/snapshot-manifest.json", + "sha256": "dba8bff7cfe61d77c144c97cbed6e6f2b1311a7578d935ba2a7341aad71254a3", + "bytes": 606364 + }, + { + "path": "tests/golden/corrective/C0-002/staged/task-cards/M16-GAP-00274.md", + "sha256": "d20ac20a4d38188e091b28cc0ffc68ca6f5af5013594ab08940c462a454562cd", + "bytes": 1784 + }, + { + "path": "tests/golden/corrective/C0-002/staged/task-index/task-catalog.jsonl", + "sha256": "278d51b867d63a5975635b8fd108c9025668de0893576499a77bd3d571a0f14b", + "bytes": 1237921 + }, + { + "path": "tests/golden/corrective/C0-002/staged/task-index/task-index.json", + "sha256": "ac377c38541c4962c694c4c2b0785100736e1cd12bd5f27dbc2917748405944d", + "bytes": 752065 + }, + { + "path": "tests/golden/corrective/C0-002/test-context-governance-final.log", + "sha256": "000159139131d8deb770bbce20132bee5b2bd35431329487d116d8fe2509b1c2", + "bytes": 2580 + }, + { + "path": "tests/golden/corrective/C0-002/test-context-governance.log", + "sha256": "957992d2b4e1ebeff6d55b30f22f44af108cf8354d14b43798fc839e17d8d19c", + "bytes": 2579 + }, + { + "path": "tests/golden/corrective/C0-002/test-task-context-final.log", + "sha256": "3ac32640f061860a6c328cc0eeacff4d4f248b5169ec0a8297898b5464e7cae4", + "bytes": 1573 + }, + { + "path": "tests/golden/corrective/C0-002/test-task-context.log", + "sha256": "46d7576c29781e30a3d34626c2b629b43c569a432567ad98ab0edaa045b44614", + "bytes": 1570 + }, + { + "path": "tests/golden/corrective/C0-002/write-command.log", + "sha256": "4f6f9e9a4667748cb310e3d15e261f4f426daef62591cb420fee18aece2128c1", + "bytes": 122 + }, + { + "path": "tests/golden/corrective/C0-002/write.json", + "sha256": "eab0519f90b4f35165c0affaa23c3c93917b80ae8f74815f55f464bd97bb0b7f", + "bytes": 218908 + } + ], + "inputDigest": "e3ea4c578a30fa0b0a80ee28645c0583b10f24f0780b3b6ef67088cddd8815b0", + "sourceHashes": { + "docs/EXECUTION_QUEUE.md": "eeaca50828c3feb3ed53d1869626a703d9e50fefd9c70d871cc6eec03fc84bcd", + "tests/golden/M16-GAP-00273/manifest.json": "3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1", + "tests/golden/M15-03A/completed-gap-tasks.json": "f9f4f1116b5975aa1b47fee15856f2029ec8f02161e432e9a24b846384cd1c5b", + "tests/golden/M15-03A/next-task-plan.json": "2235d0d250d28e63ab1c9b0e956292560785cf340c612312b316be0ceb2463a9", + "tests/golden/M15-03A/task-catalog.jsonl": "278d51b867d63a5975635b8fd108c9025668de0893576499a77bd3d571a0f14b", + "tests/golden/M15-03A/task-index.json": "9c79926a5a91b137b023a62f8a98d7c7421018846fdf658c9bea13ee5c5cbcea" + }, + "commandExitCodes": { + "planCheck": 1, + "indexCheck": 0, + "contextCheck": 0, + "contextGovernanceTest": 0, + "governanceCheck": 0, + "diffCheck": 0 + }, + "resolution": { + "status": "PASS_WITH_REPAIR", + "writeOutcome": "STAGED_RE_SIGN_CANDIDATE", + "authorization": { + "mode": "CURRENT_WORKTREE_RESIGN", + "userApproved": true, + "legacyFilesOverwritten": false + }, + "candidate": null + }, + "nextCorrectiveTask": "C0-003" +} diff --git a/tests/golden/corrective/C0-002/reconcile-report.json b/tests/golden/corrective/C0-002/reconcile-report.json new file mode 100644 index 00000000..215bc29e --- /dev/null +++ b/tests/golden/corrective/C0-002/reconcile-report.json @@ -0,0 +1,7538 @@ +{ + "schemaVersion": 1, + "operation": "CORRECTIVE_STATE_RECONCILIATION", + "mode": "dry-run", + "status": "BLOCKED", + "queueMutation": false, + "queue": { + "currentTask": "M16-GAP-00274", + "parentManifest": "tests/golden/M16-GAP-00273/manifest.json", + "parentNextTask": "M16-GAP-00274" + }, + "inputTaskCount": 274, + "manifestDoneCount": 273, + "registeredCompletedCount": 264, + "eligibleCompletedTaskIds": [], + "eligibleCompletedGaps": [], + "registryComparison": { + "eligibleNotRegistered": [], + "registeredNotEligible": [ + "datablock:Action", + "datablock:Armature", + "datablock:Brush", + "datablock:Camera", + "datablock:Collection", + "datablock:Curve", + "datablock:Curves", + "datablock:FreestyleLineStyle", + "datablock:GreasePencil", + "datablock:Lattice", + "datablock:Library", + "datablock:Light", + "datablock:Material", + "datablock:Mesh", + "datablock:MetaBall", + "datablock:NodeTree", + "datablock:Object", + "datablock:ParticleSettings", + "datablock:PointCloud", + "datablock:Scene", + "datablock:Screen", + "datablock:Sound", + "datablock:Speaker", + "datablock:Text", + "datablock:Texture", + "datablock:Volume", + "datablock:WindowManager", + "datablock:WorkSpace", + "datablock:World", + "modifier:ARMATURE", + "modifier:ARRAY", + "modifier:BEVEL", + "modifier:BOOLEAN", + "modifier:BUILD", + "modifier:CAST", + "modifier:CLOTH", + "modifier:COLLISION", + "modifier:CORRECTIVE_SMOOTH", + "modifier:CURVE", + "modifier:DATA_TRANSFER", + "modifier:DECIMATE", + "modifier:DISPLACE", + "modifier:DYNAMIC_PAINT", + "modifier:EDGE_SPLIT", + "modifier:EXPLODE", + "modifier:FLUID", + "modifier:GREASE_PENCIL_ARMATURE", + "modifier:GREASE_PENCIL_ARRAY", + "modifier:GREASE_PENCIL_BUILD", + "modifier:GREASE_PENCIL_COLOR", + "modifier:GREASE_PENCIL_DASH", + "modifier:GREASE_PENCIL_ENVELOPE", + "modifier:GREASE_PENCIL_HOOK", + "modifier:GREASE_PENCIL_LATTICE", + "modifier:GREASE_PENCIL_LENGTH", + "modifier:GREASE_PENCIL_MIRROR", + "modifier:GREASE_PENCIL_MULTIPLY", + "modifier:GREASE_PENCIL_NOISE", + "modifier:GREASE_PENCIL_OFFSET", + "modifier:GREASE_PENCIL_OPACITY", + "modifier:GREASE_PENCIL_OUTLINE", + "modifier:GREASE_PENCIL_SHRINKWRAP", + "modifier:GREASE_PENCIL_SIMPLIFY", + "modifier:GREASE_PENCIL_SMOOTH", + "modifier:GREASE_PENCIL_SUBDIV", + "modifier:GREASE_PENCIL_TEXTURE", + "modifier:GREASE_PENCIL_THICKNESS", + "modifier:GREASE_PENCIL_TIME", + "modifier:GREASE_PENCIL_TINT", + "modifier:GREASE_PENCIL_VERTEX_WEIGHT_ANGLE", + "modifier:GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY", + "modifier:HOOK", + "modifier:LAPLACIANDEFORM", + "modifier:LAPLACIANSMOOTH", + "modifier:LATTICE", + "modifier:LINEART", + "modifier:MASK", + "modifier:MESH_CACHE", + "modifier:MESH_DEFORM", + "modifier:MESH_SEQUENCE_CACHE", + "modifier:MESH_TO_VOLUME", + "modifier:MIRROR", + "modifier:MULTIRES", + "modifier:NODES", + "modifier:NORMAL_EDIT", + "modifier:OCEAN", + "modifier:PARTICLE_INSTANCE", + "modifier:PARTICLE_SYSTEM", + "modifier:REMESH", + "modifier:SCREW", + "modifier:SHRINKWRAP", + "modifier:SIMPLE_DEFORM", + "modifier:SKIN", + "modifier:SMOOTH", + "modifier:SOFT_BODY", + "modifier:SOLIDIFY", + "modifier:SUBSURF", + "modifier:SURFACE", + "modifier:SURFACE_DEFORM", + "modifier:TRIANGULATE", + "modifier:UV_PROJECT", + "modifier:UV_WARP", + "modifier:VERTEX_WEIGHT_EDIT", + "modifier:VERTEX_WEIGHT_MIX", + "modifier:VERTEX_WEIGHT_PROXIMITY", + "modifier:VOLUME_DISPLACE", + "modifier:VOLUME_TO_MESH", + "modifier:WARP", + "modifier:WAVE", + "modifier:WEIGHTED_NORMAL", + "modifier:WELD", + "modifier:WIREFRAME", + "operator:action.bake_keys", + "operator:action.clean", + "operator:action.clickselect", + "operator:action.copy", + "operator:action.delete", + "operator:action.duplicate", + "operator:action.duplicate_move", + "operator:action.easing_type", + "operator:action.extrapolation_type", + "operator:action.frame_jump", + "operator:action.handle_type", + "operator:action.interpolation_type", + "operator:action.keyframe_insert", + "operator:action.keyframe_type", + "operator:action.markers_make_local", + "operator:action.mirror", + "operator:action.new", + "operator:action.paste", + "operator:action.previewrange_set", + "operator:action.push_down", + "operator:action.select_all", + "operator:action.select_box", + "operator:action.select_by_type", + "operator:action.select_circle", + "operator:action.select_column", + "operator:action.select_lasso", + "operator:action.select_leftright", + "operator:action.select_less", + "operator:action.select_linked", + "operator:action.select_more", + "operator:action.snap", + "operator:action.stash", + "operator:action.stash_and_create", + "operator:action.unlink", + "operator:action.view_all", + "operator:action.view_frame", + "operator:action.view_selected", + "operator:anim.change_frame", + "operator:anim.channel_select_keys", + "operator:anim.channel_view_pick", + "operator:anim.channels_bake", + "operator:anim.channels_clean_empty", + "operator:anim.channels_click", + "operator:anim.channels_collapse", + "operator:anim.channels_delete", + "operator:anim.channels_editable_toggle", + "operator:anim.channels_expand", + "operator:anim.channels_fcurves_enable", + "operator:anim.channels_group", + "operator:anim.channels_move", + "operator:anim.channels_rename", + "operator:anim.channels_select_all", + "operator:anim.channels_select_box", + "operator:anim.channels_select_filter", + "operator:anim.channels_setting_disable", + "operator:anim.channels_setting_enable", + "operator:anim.channels_setting_toggle", + "operator:anim.channels_ungroup", + "operator:anim.channels_view_selected", + "operator:anim.clear_useless_actions", + "operator:anim.copy_driver_button", + "operator:anim.driver_button_add", + "operator:anim.driver_button_edit", + "operator:anim.driver_button_remove", + "operator:anim.end_frame_set", + "operator:anim.keyframe_clear_button", + "operator:anim.keyframe_clear_v3d", + "operator:anim.keyframe_clear_vse", + "operator:anim.keyframe_delete", + "operator:anim.keyframe_delete_button", + "operator:anim.keyframe_delete_by_name", + "operator:anim.keyframe_delete_v3d", + "operator:anim.keyframe_delete_vse", + "operator:anim.keyframe_insert", + "operator:anim.keyframe_insert_button", + "operator:anim.keyframe_insert_by_name", + "operator:anim.keyframe_insert_menu", + "operator:anim.keying_set_active_set", + "operator:anim.keying_set_add", + "operator:anim.keying_set_export", + "operator:anim.keying_set_path_add", + "operator:anim.keying_set_path_remove", + "operator:anim.keying_set_remove", + "operator:anim.keyingset_button_add", + "operator:anim.keyingset_button_remove", + "operator:anim.merge_animation", + "operator:anim.paste_driver_button", + "operator:anim.previewrange_clear", + "operator:anim.previewrange_set", + "operator:anim.replace_action", + "operator:anim.replace_action_new", + "operator:anim.scene_range_frame", + "operator:anim.separate_slots", + "operator:anim.slot_channels_move_to_new_action", + "operator:anim.slot_new_for_id", + "operator:anim.slot_unassign_from_constraint", + "operator:anim.slot_unassign_from_id", + "operator:anim.slot_unassign_from_nla_strip", + "operator:anim.start_frame_set", + "operator:anim.update_animated_transform_constraints", + "operator:anim.version_bone_hide_property", + "operator:anim.view_curve_in_graph_editor", + "operator:armature.align", + "operator:armature.assign_to_collection", + "operator:armature.autoside_names", + "operator:armature.bone_primitive_add", + "operator:armature.calculate_roll", + "operator:armature.click_extrude", + "operator:armature.collection_add", + "operator:armature.collection_assign", + "operator:armature.collection_create_and_assign", + "operator:armature.collection_deselect", + "operator:armature.collection_move", + "operator:armature.collection_remove", + "operator:armature.collection_remove_unused", + "operator:armature.collection_select", + "operator:armature.collection_show_all", + "operator:armature.collection_unassign", + "operator:armature.collection_unassign_named", + "operator:armature.collection_unsolo_all", + "operator:armature.copy_bone_color_to_selected", + "operator:armature.delete", + "operator:armature.dissolve", + "operator:armature.duplicate", + "operator:armature.duplicate_move", + "operator:armature.duplicate_rename", + "operator:armature.extrude", + "operator:armature.extrude_forked", + "operator:armature.extrude_move", + "operator:armature.fill", + "operator:armature.flip_names", + "operator:armature.hide", + "operator:armature.move_to_collection", + "operator:armature.parent_clear", + "operator:armature.parent_set", + "operator:armature.reveal", + "operator:armature.roll_clear", + "operator:armature.select_all", + "operator:armature.select_hierarchy", + "operator:armature.select_less", + "operator:armature.select_linked", + "operator:armature.select_linked_pick", + "operator:armature.select_mirror", + "operator:armature.select_more", + "operator:armature.select_similar", + "operator:armature.separate", + "operator:armature.shortest_path_pick", + "operator:armature.split", + "operator:armature.subdivide", + "operator:armature.switch_direction", + "operator:armature.symmetrize", + "operator:asset.asset_download" + ], + "manifestDoneNotEligible": [ + "datablock:Action", + "datablock:Armature", + "datablock:Brush", + "datablock:Camera", + "datablock:Collection", + "datablock:Curve", + "datablock:Curves", + "datablock:FreestyleLineStyle", + "datablock:GreasePencil", + "datablock:Lattice", + "datablock:Library", + "datablock:Light", + "datablock:Material", + "datablock:Mesh", + "datablock:MetaBall", + "datablock:NodeTree", + "datablock:Object", + "datablock:ParticleSettings", + "datablock:PointCloud", + "datablock:Scene", + "datablock:Screen", + "datablock:Sound", + "datablock:Speaker", + "datablock:Text", + "datablock:Texture", + "datablock:Volume", + "datablock:WindowManager", + "datablock:WorkSpace", + "datablock:World", + "modifier:ARMATURE", + "modifier:ARRAY", + "modifier:BEVEL", + "modifier:BOOLEAN", + "modifier:BUILD", + "modifier:CAST", + "modifier:CLOTH", + "modifier:COLLISION", + "modifier:CORRECTIVE_SMOOTH", + "modifier:CURVE", + "modifier:DATA_TRANSFER", + "modifier:DECIMATE", + "modifier:DISPLACE", + "modifier:DYNAMIC_PAINT", + "modifier:EDGE_SPLIT", + "modifier:EXPLODE", + "modifier:FLUID", + "modifier:GREASE_PENCIL_ARMATURE", + "modifier:GREASE_PENCIL_ARRAY", + "modifier:GREASE_PENCIL_BUILD", + "modifier:GREASE_PENCIL_COLOR", + "modifier:GREASE_PENCIL_DASH", + "modifier:GREASE_PENCIL_ENVELOPE", + "modifier:GREASE_PENCIL_HOOK", + "modifier:GREASE_PENCIL_LATTICE", + "modifier:GREASE_PENCIL_LENGTH", + "modifier:GREASE_PENCIL_MIRROR", + "modifier:GREASE_PENCIL_MULTIPLY", + "modifier:GREASE_PENCIL_NOISE", + "modifier:GREASE_PENCIL_OFFSET", + "modifier:GREASE_PENCIL_OPACITY", + "modifier:GREASE_PENCIL_OUTLINE", + "modifier:GREASE_PENCIL_SHRINKWRAP", + "modifier:GREASE_PENCIL_SIMPLIFY", + "modifier:GREASE_PENCIL_SMOOTH", + "modifier:GREASE_PENCIL_SUBDIV", + "modifier:GREASE_PENCIL_TEXTURE", + "modifier:GREASE_PENCIL_THICKNESS", + "modifier:GREASE_PENCIL_TIME", + "modifier:GREASE_PENCIL_TINT", + "modifier:GREASE_PENCIL_VERTEX_WEIGHT_ANGLE", + "modifier:GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY", + "modifier:HOOK", + "modifier:LAPLACIANDEFORM", + "modifier:LAPLACIANSMOOTH", + "modifier:LATTICE", + "modifier:LINEART", + "modifier:MASK", + "modifier:MESH_CACHE", + "modifier:MESH_DEFORM", + "modifier:MESH_SEQUENCE_CACHE", + "modifier:MESH_TO_VOLUME", + "modifier:MIRROR", + "modifier:MULTIRES", + "modifier:NODES", + "modifier:NORMAL_EDIT", + "modifier:OCEAN", + "modifier:PARTICLE_INSTANCE", + "modifier:PARTICLE_SYSTEM", + "modifier:REMESH", + "modifier:SCREW", + "modifier:SHRINKWRAP", + "modifier:SIMPLE_DEFORM", + "modifier:SKIN", + "modifier:SMOOTH", + "modifier:SOFT_BODY", + "modifier:SOLIDIFY", + "modifier:SUBSURF", + "modifier:SURFACE", + "modifier:SURFACE_DEFORM", + "modifier:TRIANGULATE", + "modifier:UV_PROJECT", + "modifier:UV_WARP", + "modifier:VERTEX_WEIGHT_EDIT", + "modifier:VERTEX_WEIGHT_MIX", + "modifier:VERTEX_WEIGHT_PROXIMITY", + "modifier:VOLUME_DISPLACE", + "modifier:VOLUME_TO_MESH", + "modifier:WARP", + "modifier:WAVE", + "modifier:WEIGHTED_NORMAL", + "modifier:WELD", + "modifier:WIREFRAME", + "operator:action.bake_keys", + "operator:action.clean", + "operator:action.clickselect", + "operator:action.copy", + "operator:action.delete", + "operator:action.duplicate", + "operator:action.duplicate_move", + "operator:action.easing_type", + "operator:action.extrapolation_type", + "operator:action.frame_jump", + "operator:action.handle_type", + "operator:action.interpolation_type", + "operator:action.keyframe_insert", + "operator:action.keyframe_type", + "operator:action.markers_make_local", + "operator:action.mirror", + "operator:action.new", + "operator:action.paste", + "operator:action.previewrange_set", + "operator:action.push_down", + "operator:action.select_all", + "operator:action.select_box", + "operator:action.select_by_type", + "operator:action.select_circle", + "operator:action.select_column", + "operator:action.select_lasso", + "operator:action.select_leftright", + "operator:action.select_less", + "operator:action.select_linked", + "operator:action.select_more", + "operator:action.snap", + "operator:action.stash", + "operator:action.stash_and_create", + "operator:action.unlink", + "operator:action.view_all", + "operator:action.view_frame", + "operator:action.view_selected", + "operator:anim.change_frame", + "operator:anim.channel_select_keys", + "operator:anim.channel_view_pick", + "operator:anim.channels_bake", + "operator:anim.channels_clean_empty", + "operator:anim.channels_click", + "operator:anim.channels_collapse", + "operator:anim.channels_delete", + "operator:anim.channels_editable_toggle", + "operator:anim.channels_expand", + "operator:anim.channels_fcurves_enable", + "operator:anim.channels_group", + "operator:anim.channels_move", + "operator:anim.channels_rename", + "operator:anim.channels_select_all", + "operator:anim.channels_select_box", + "operator:anim.channels_select_filter", + "operator:anim.channels_setting_disable", + "operator:anim.channels_setting_enable", + "operator:anim.channels_setting_toggle", + "operator:anim.channels_ungroup", + "operator:anim.channels_view_selected", + "operator:anim.clear_useless_actions", + "operator:anim.copy_driver_button", + "operator:anim.driver_button_add", + "operator:anim.driver_button_edit", + "operator:anim.driver_button_remove", + "operator:anim.end_frame_set", + "operator:anim.keyframe_clear_button", + "operator:anim.keyframe_clear_v3d", + "operator:anim.keyframe_clear_vse", + "operator:anim.keyframe_delete", + "operator:anim.keyframe_delete_button", + "operator:anim.keyframe_delete_by_name", + "operator:anim.keyframe_delete_v3d", + "operator:anim.keyframe_delete_vse", + "operator:anim.keyframe_insert", + "operator:anim.keyframe_insert_button", + "operator:anim.keyframe_insert_by_name", + "operator:anim.keyframe_insert_menu", + "operator:anim.keying_set_active_set", + "operator:anim.keying_set_add", + "operator:anim.keying_set_export", + "operator:anim.keying_set_path_add", + "operator:anim.keying_set_path_remove", + "operator:anim.keying_set_remove", + "operator:anim.keyingset_button_add", + "operator:anim.keyingset_button_remove", + "operator:anim.merge_animation", + "operator:anim.paste_driver_button", + "operator:anim.previewrange_clear", + "operator:anim.previewrange_set", + "operator:anim.replace_action", + "operator:anim.replace_action_new", + "operator:anim.scene_range_frame", + "operator:anim.separate_slots", + "operator:anim.slot_channels_move_to_new_action", + "operator:anim.slot_new_for_id", + "operator:anim.slot_unassign_from_constraint", + "operator:anim.slot_unassign_from_id", + "operator:anim.slot_unassign_from_nla_strip", + "operator:anim.start_frame_set", + "operator:anim.update_animated_transform_constraints", + "operator:anim.version_bone_hide_property", + "operator:anim.view_curve_in_graph_editor", + "operator:armature.align", + "operator:armature.assign_to_collection", + "operator:armature.autoside_names", + "operator:armature.bone_primitive_add", + "operator:armature.calculate_roll", + "operator:armature.click_extrude", + "operator:armature.collection_add", + "operator:armature.collection_assign", + "operator:armature.collection_create_and_assign", + "operator:armature.collection_deselect", + "operator:armature.collection_move", + "operator:armature.collection_remove", + "operator:armature.collection_remove_unused", + "operator:armature.collection_select", + "operator:armature.collection_show_all", + "operator:armature.collection_unassign", + "operator:armature.collection_unassign_named", + "operator:armature.collection_unsolo_all", + "operator:armature.copy_bone_color_to_selected", + "operator:armature.delete", + "operator:armature.dissolve", + "operator:armature.duplicate", + "operator:armature.duplicate_move", + "operator:armature.duplicate_rename", + "operator:armature.extrude", + "operator:armature.extrude_forked", + "operator:armature.extrude_move", + "operator:armature.fill", + "operator:armature.flip_names", + "operator:armature.hide", + "operator:armature.move_to_collection", + "operator:armature.parent_clear", + "operator:armature.parent_set", + "operator:armature.reveal", + "operator:armature.roll_clear", + "operator:armature.select_all", + "operator:armature.select_hierarchy", + "operator:armature.select_less", + "operator:armature.select_linked", + "operator:armature.select_linked_pick", + "operator:armature.select_mirror", + "operator:armature.select_more", + "operator:armature.select_similar", + "operator:armature.separate", + "operator:armature.shortest_path_pick", + "operator:armature.split", + "operator:armature.subdivide", + "operator:armature.switch_direction", + "operator:armature.symmetrize", + "operator:asset.asset_download", + "operator:asset.assets_download", + "operator:asset.assign_action", + "operator:asset.browse_containing_blend_file", + "operator:asset.bundle_install", + "operator:asset.catalog_delete", + "operator:asset.catalog_new", + "operator:asset.catalog_redo", + "operator:asset.catalog_undo", + "operator:asset.catalog_undo_push" + ] + }, + "candidateActiveTask": "M16-GAP-00274", + "sourceHashes": { + "docs/EXECUTION_QUEUE.md": "eeaca50828c3feb3ed53d1869626a703d9e50fefd9c70d871cc6eec03fc84bcd", + "tests/golden/M16-GAP-00273/manifest.json": "3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1", + "tests/golden/M15-03A/completed-gap-tasks.json": "f9f4f1116b5975aa1b47fee15856f2029ec8f02161e432e9a24b846384cd1c5b", + "tests/golden/M15-03A/next-task-plan.json": "2235d0d250d28e63ab1c9b0e956292560785cf340c612312b316be0ceb2463a9", + "tests/golden/M15-03A/task-catalog.jsonl": "278d51b867d63a5975635b8fd108c9025668de0893576499a77bd3d571a0f14b", + "tests/golden/M15-03A/task-index.json": "9c79926a5a91b137b023a62f8a98d7c7421018846fdf658c9bea13ee5c5cbcea", + "docs/BLENDER_WASM_CORRECTIVE_TASK_PLAN.json": "2336fafe07c8c670b0d58746af818c07ed21534aeeff02fea3279a8618655c91" + }, + "inputDigest": "41de2aa1e9456d42ea3dc4ff5121437d9ae759e1df74b56184b728242a6552d2", + "issueSummary": [ + { + "code": "ARTIFACT_HASH_DRIFT", + "count": 1355, + "taskCount": 273, + "sampleTasks": [ + "M16-GAP-00001", + "M16-GAP-00002", + "M16-GAP-00003", + "M16-GAP-00004", + "M16-GAP-00005" + ], + "pathCount": 23, + "samplePaths": [ + "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "docs/status/M16-GAP-00162.md", + "tests/files/web/generated/M16-GAP-00177-operator-anim.end_frame_set.blend" + ] + }, + { + "code": "MISSING_TASK_CONTEXT", + "count": 24, + "taskCount": 24, + "sampleTasks": [ + "M16-GAP-00001", + "M16-GAP-00002", + "M16-GAP-00003", + "M16-GAP-00004", + "M16-GAP-00005" + ], + "pathCount": 0, + "samplePaths": [] + }, + { + "code": "PLAN_NONDETERMINISTIC", + "count": 1, + "taskCount": 0, + "sampleTasks": [], + "pathCount": 1, + "samplePaths": [ + "tests/golden/M15-03A/next-task-plan.json" + ] + } + ], + "issueCount": 1380, + "issues": [ + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00001" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03E/manifest.json", + "task": "M16-GAP-00001" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00001" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03A/next-task-plan.json", + "task": "M16-GAP-00001" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/package.json", + "task": "M16-GAP-00001" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00002" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00002" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03A/next-task-plan.json", + "task": "M16-GAP-00002" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/package.json", + "task": "M16-GAP-00002" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00003" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00003" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00003" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00003" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00003" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03A/next-task-plan.json", + "task": "M16-GAP-00003" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/package.json", + "task": "M16-GAP-00003" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00004" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00004" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00004" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03A/next-task-plan.json", + "task": "M16-GAP-00004" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00005" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00005" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03A/next-task-plan.json", + "task": "M16-GAP-00005" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00006" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00006" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00006" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03A/next-task-plan.json", + "task": "M16-GAP-00006" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00007" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00007" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00007" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03A/next-task-plan.json", + "task": "M16-GAP-00007" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00008" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00008" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00008" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00008" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00008" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03A/next-task-plan.json", + "task": "M16-GAP-00008" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00009" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00009" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03A/next-task-plan.json", + "task": "M16-GAP-00009" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00010" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00010" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00010" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00010" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00010" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00010" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00011" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00011" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00011" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00011" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00011" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00012" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00012" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00012" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00012" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00012" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00013" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00013" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00013" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00013" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00013" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00014" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00014" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00014" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00014" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00014" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00015" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00015" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00015" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00015" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00015" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00016" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00016" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00016" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00016" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00016" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00017" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00017" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00017" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00017" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00017" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00018" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00018" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "task": "M16-GAP-00018" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00018" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00018" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00018" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00019" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00019" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00019" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00019" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00019" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00020" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00020" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00020" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00020" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00020" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00021" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00021" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00021" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00021" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00021" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00022" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00022" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00022" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00022" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00022" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00022" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00023" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00023" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00023" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00023" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00023" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00023" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00024" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00024" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00024" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00024" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00024" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00024" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00025" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00025" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00025" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00025" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00025" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00025" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00026" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00026" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00026" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00026" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00026" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00026" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00027" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00027" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00027" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00027" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00027" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00027" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00028" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00028" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00028" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00028" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00028" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00028" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00029" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00029" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00029" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00029" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00029" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00029" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00030" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00030" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00030" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00030" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00030" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00030" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00031" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00031" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00031" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00031" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00031" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00031" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00032" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00032" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00032" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00032" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00032" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00032" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00033" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00033" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00033" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00033" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00033" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00033" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00034" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00034" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00034" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00034" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00034" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00034" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00035" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00035" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00035" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00035" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00035" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00035" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00036" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00036" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00036" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00036" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00036" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00036" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00037" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00037" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00037" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00037" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00037" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00037" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00038" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00038" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00038" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00038" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00038" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00038" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00038" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00039" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00039" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00039" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00039" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00039" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00039" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00039" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00040" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00040" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00040" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00040" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00040" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00040" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00040" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00041" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00041" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00041" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00041" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00041" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00041" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00041" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00042" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00042" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00042" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00042" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00042" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00042" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00042" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00043" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00043" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00043" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00043" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00043" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00043" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00043" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00044" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00044" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00044" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00044" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00044" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00044" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00044" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00045" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00045" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00045" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00045" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00045" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00045" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00045" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00046" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00046" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00046" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00046" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00046" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00046" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00046" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00047" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00047" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00047" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00047" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00047" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00047" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00047" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00048" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00048" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00048" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00048" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00048" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00048" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00048" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00049" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00049" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00049" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00049" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00049" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00049" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00049" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00050" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00050" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00050" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00050" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00050" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00050" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00050" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00051" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00051" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00051" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00051" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00051" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00051" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00051" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00052" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00052" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00052" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00052" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00052" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00052" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00052" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00053" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00053" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00053" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00053" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00053" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00053" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00053" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00054" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00054" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00054" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00054" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00054" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00054" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00054" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00055" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00055" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00055" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00055" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00055" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00055" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00055" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00056" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00056" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00056" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00056" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00056" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00056" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00056" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00057" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00057" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00057" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00057" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00057" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00057" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00057" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00058" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00058" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00058" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00058" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00058" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00058" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00058" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00059" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00059" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00059" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00059" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00059" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00059" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00060" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00060" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00060" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00060" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00060" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00060" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00061" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00061" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00061" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00061" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00061" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00061" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00062" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00062" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00062" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00062" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00062" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00062" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00063" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00063" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00063" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00063" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00063" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00063" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00064" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00064" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00064" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00064" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00064" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00064" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00065" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00065" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00065" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00065" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00065" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00065" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00066" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00066" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00066" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00066" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00066" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00066" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00067" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00067" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00067" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00067" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00067" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00067" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00068" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00068" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00068" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00068" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00068" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00068" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00069" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00069" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00069" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00069" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00069" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00069" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00070" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00070" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00070" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00070" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00070" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00070" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00070" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M16-GAP-00070/manifest.json", + "task": "M16-GAP-00071" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00071" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00071" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00071" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00071" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00071" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00071" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00072" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00072" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00072" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00072" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00072" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00072" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00072" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00073" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00073" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00073" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00073" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00073" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00073" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00073" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00074" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00074" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00074" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00074" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00074" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00074" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00074" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00075" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00075" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00075" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00075" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00075" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00075" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00075" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00076" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00076" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00076" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00076" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00076" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00076" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00077" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00077" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00077" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00077" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00077" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00077" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00078" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00078" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00078" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00078" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00078" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00078" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00079" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00079" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00079" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00079" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00079" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00079" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00080" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00080" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00080" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00080" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00080" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00080" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00081" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00081" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00081" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00081" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00081" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00081" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00082" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00082" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00082" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00082" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00082" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00082" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00083" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00083" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00083" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00083" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00083" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00083" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00084" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00084" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00084" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00084" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00084" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00084" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00085" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00085" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00085" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00085" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00085" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00085" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00086" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00086" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00086" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00086" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00086" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00086" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00087" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00087" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00087" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00087" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00087" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00087" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00088" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00088" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00088" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00088" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00088" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00088" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00089" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00089" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00089" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00089" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00089" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00089" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00090" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00090" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00090" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00090" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00090" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00090" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00091" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00091" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00091" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00091" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00091" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00091" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00092" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00092" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00092" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00092" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00092" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00092" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00093" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00093" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00093" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00093" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00093" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00093" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00094" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00094" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00094" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00094" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00094" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00094" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00095" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00095" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00095" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00095" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00095" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00095" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00096" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00096" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00096" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00096" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00096" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00096" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00097" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00097" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00097" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00097" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00097" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00097" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00098" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00098" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00098" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00098" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00098" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00098" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00099" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00099" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00099" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00099" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00099" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00099" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00099" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00100" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00100" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00100" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00100" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00100" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00100" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00100" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00101" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00101" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00101" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00101" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00101" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00101" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00101" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00102" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00102" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00102" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00102" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00102" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00102" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00102" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00103" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00103" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00103" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00103" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00103" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00103" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00103" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00103" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00104" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00104" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00104" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00104" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00104" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00104" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00104" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00104" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00105" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00105" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00105" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00105" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00105" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00105" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00105" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00105" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00106" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00106" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00106" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00106" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00106" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00106" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00106" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00106" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00107" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00107" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00107" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00107" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00107" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00107" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00107" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00107" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00108" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00108" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00108" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00108" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00108" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00108" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00108" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00109" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00109" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00109" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00109" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00109" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00109" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00109" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00110" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00110" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00110" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00110" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00110" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00110" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00110" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00111" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00111" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00111" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00111" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00111" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00111" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00111" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00112" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00112" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00112" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00112" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00112" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00113" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00113" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00113" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00113" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00113" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00113" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00114" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00114" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00114" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00114" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00114" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00115" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00115" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00115" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00115" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00115" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00116" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00116" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00116" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00116" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00116" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00117" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00117" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00117" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00117" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00117" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00118" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00118" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00118" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00118" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00118" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00119" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00119" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00119" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00119" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00119" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00120" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00120" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00120" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00120" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00120" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00121" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00121" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00121" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00121" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00121" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00122" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00122" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00122" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00122" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00122" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00123" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00123" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00123" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00123" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00123" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00124" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00124" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00124" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00124" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00124" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-action-keyframe-insert-desktop.py", + "task": "M16-GAP-00125" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00125" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00125" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00125" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00125" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00125" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00126" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00126" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00126" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00126" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00126" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00127" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00127" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00127" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00127" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00127" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00128" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00128" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00128" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00128" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00128" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00129" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00129" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00129" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00129" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00129" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00130" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00130" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00130" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00130" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00130" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-action-previewrange-set-desktop.py", + "task": "M16-GAP-00131" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00131" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00131" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00131" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00131" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00131" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00132" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00132" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00132" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00132" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00132" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00133" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00133" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00133" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00133" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00133" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00134" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00134" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00134" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00134" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00134" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00135" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00135" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00135" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00135" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00135" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00136" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00136" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00136" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00136" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00136" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00137" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00137" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00137" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00137" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00137" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00138" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00138" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00138" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00138" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00138" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00139" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00139" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00139" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00139" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00139" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00140" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00140" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00140" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00140" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00140" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00141" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00141" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00141" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00141" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00141" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00142" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00142" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00142" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00142" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00142" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00143" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00143" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00143" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00143" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00143" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00144" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00144" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00144" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00144" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00144" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00145" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00145" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00145" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00145" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00145" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00146" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00146" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00146" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00146" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00146" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00147" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00147" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00147" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00147" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00147" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00148" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00148" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00148" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00148" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00148" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00149" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00149" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00149" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00149" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00149" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00150" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00150" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00150" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00150" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00150" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00151" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00151" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00151" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00151" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00151" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00152" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00152" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00152" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00152" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00152" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00153" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00153" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00153" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00153" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00153" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00154" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00154" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00154" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00154" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00154" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00155" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00155" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00155" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00155" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00155" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-action-channels-collapse-desktop.py", + "task": "M16-GAP-00156" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00156" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00156" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00156" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00156" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00156" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00157" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00157" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00157" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00157" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00157" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00158" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00158" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00158" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00158" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00158" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00159" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00159" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00159" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00159" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00159" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00160" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00160" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00160" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00160" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00160" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00160" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00161" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00161" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00161" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00161" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00161" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00161" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M16-GAP-00161/manifest.json", + "task": "M16-GAP-00162" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00162" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00162" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00162" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00162" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00162" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00162" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "docs/status/M16-GAP-00162.md", + "task": "M16-GAP-00162" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M16-GAP-00162/task-context.json", + "task": "M16-GAP-00162" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00163" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00163" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00163" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00163" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00163" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00163" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00164" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00164" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00164" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00164" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00164" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00165" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00165" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00165" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00165" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00165" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00166" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00166" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00166" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00166" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00166" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00167" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00167" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00167" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00167" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00167" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00168" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00168" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00168" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00168" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00168" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00169" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00169" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00169" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00169" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00169" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00170" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00170" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00170" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00170" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00170" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00171" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00171" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00171" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00171" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00171" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00172" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00172" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00172" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00172" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00172" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00173" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00173" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00173" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00173" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00173" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00174" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00174" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00174" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00174" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00174" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00175" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00175" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00175" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00175" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00175" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00176" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00176" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00176" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00176" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00176" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/files/web/generated/M16-GAP-00177-operator-anim.end_frame_set.blend", + "task": "M16-GAP-00177" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00177" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00177" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00177" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00177" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00177" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M16-GAP-00177/anim-end-frame-set-desktop-report.json", + "task": "M16-GAP-00177" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M16-GAP-00177/anim-end-frame-set-local-exact-report.json", + "task": "M16-GAP-00177" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00178" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00178" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00178" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00178" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00178" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00179" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00179" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00179" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00179" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00179" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00180" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00180" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00180" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00180" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00180" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00181" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00181" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00181" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00181" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00181" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00182" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00182" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00182" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00182" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00182" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00183" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00183" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00183" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00183" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00183" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00184" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00184" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00184" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00184" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00184" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00185" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00185" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00185" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00185" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00185" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00186" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00186" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00186" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00186" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00186" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00187" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00187" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00187" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00187" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00187" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00188" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00188" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00188" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00188" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00188" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00189" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00189" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00189" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00189" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00189" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00190" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00190" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00190" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00190" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00190" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00191" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00191" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00191" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00191" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00191" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00192" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00192" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00192" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00192" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00192" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00193" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00193" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00193" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00193" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00193" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00194" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00194" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00194" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00194" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00194" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00195" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00195" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00195" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00195" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00195" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00196" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00196" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00196" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00196" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00196" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00197" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00197" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00197" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00197" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00197" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00198" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00198" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00198" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00198" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00198" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00199" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00199" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00199" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00199" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00199" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00200" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00200" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00200" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00200" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00200" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00201" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00201" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00201" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00201" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00201" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00202" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00202" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00202" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00202" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00202" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00203" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00203" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00203" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00203" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00203" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00204" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00204" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00204" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00204" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00204" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00205" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00205" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00205" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00205" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00205" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00206" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00206" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00206" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00206" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00206" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00207" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00207" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00207" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00207" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00207" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.js", + "task": "M16-GAP-00207" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00208" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00208" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00208" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00208" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00208" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.js", + "task": "M16-GAP-00208" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00209" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00209" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00209" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00209" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00210" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00210" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00210" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00210" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00211" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00211" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00211" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00211" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00212" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00212" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00212" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00212" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00213" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00213" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00213" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00213" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00214" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00214" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00214" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00214" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00215" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00215" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00215" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00215" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00216" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00216" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00216" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00216" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00217" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00217" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00217" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00217" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00218" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00218" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00218" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00218" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00219" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00219" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00219" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00219" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00220" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00220" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00220" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00220" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00221" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00221" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00221" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00221" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00222" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00222" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00222" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00222" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00223" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00223" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00223" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00223" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00224" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00224" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00224" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00224" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00225" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00225" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00225" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00225" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00226" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00226" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00226" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00226" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00227" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00227" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00227" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00227" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00228" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00228" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00228" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00228" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00229" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00229" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00229" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00229" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00230" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00230" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00230" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00230" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00231" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00231" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00231" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00231" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00232" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00232" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00232" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00232" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00233" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00233" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00233" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00233" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00234" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00234" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00234" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00234" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00235" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00235" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00235" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00235" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00236" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00236" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00236" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00236" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00237" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00237" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00237" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00237" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00238" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00238" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00238" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00238" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00239" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00239" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00239" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00239" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00240" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00240" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00240" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00240" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00241" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00241" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00241" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00241" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00242" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00242" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00242" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00242" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00243" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00243" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00243" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00243" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00244" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00244" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00244" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00244" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00245" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00245" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00245" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00245" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00246" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00246" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00246" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00246" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00247" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00247" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00247" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00247" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00248" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00248" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00248" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00248" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00249" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00249" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00249" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00249" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00250" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00250" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00250" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00250" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00251" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00252" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00253" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00254" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00255" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00256" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00257" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00258" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00259" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00260" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00261" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00262" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00263" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00264" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00265" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00266" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00267" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00268" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00269" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00270" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00271" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00272" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00273" + }, + { + "code": "PLAN_NONDETERMINISTIC", + "path": "tests/golden/M15-03A/next-task-plan.json", + "detail": "generator output differs from committed plan" + } + ], + "repairPlan": { + "actions": [ + { + "code": "MISSING_TASK_CONTEXT", + "priority": "P1", + "action": "repair only when the task parent pointer is independently valid; otherwise preserve BLOCKED", + "writes": [ + "corrective evidence only" + ] + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "priority": "P0", + "action": "obtain an immutable source snapshot or classify the task BLOCKED; never rewrite historical manifests", + "writes": [] + }, + { + "code": "STATUS_MISMATCH", + "priority": "P0", + "action": "compare manifest/status provenance and stop; do not normalize by hand", + "writes": [] + }, + { + "code": "PARENT_NEXT_TASK_MISMATCH", + "priority": "P0", + "action": "repair through the repository generator only after evidence review", + "writes": [] + }, + { + "code": "PLAN_NONDETERMINISTIC", + "priority": "P0", + "action": "rebuild generator inputs in staging and compare canonical bytes", + "writes": [ + "corrective evidence only" + ] + } + ], + "approvalRequired": true, + "queueMutationAllowed": false + }, + "writeOutcome": "DRY_RUN_ONLY" +} diff --git a/tests/golden/corrective/C0-002/resign-check.json b/tests/golden/corrective/C0-002/resign-check.json new file mode 100644 index 00000000..5478c9f3 --- /dev/null +++ b/tests/golden/corrective/C0-002/resign-check.json @@ -0,0 +1,81 @@ +{ + "schemaVersion": 1, + "operation": "CORRECTIVE_STATE_RECONCILIATION_RESIGN_CHECK", + "status": "PASS", + "queueMutation": false, + "stagedRoot": "tests/golden/corrective/C0-002/staged", + "checks": [ + { + "name": "registry-count", + "status": "PASS", + "value": 273 + }, + { + "name": "registry-unique", + "status": "PASS" + }, + { + "name": "plan-shape", + "status": "PASS" + }, + { + "name": "plan-source-hash", + "status": "PASS" + }, + { + "name": "index-plan-hash", + "status": "PASS" + }, + { + "name": "index-catalog-hash", + "status": "PASS" + }, + { + "name": "index-active", + "status": "PASS" + }, + { + "name": "snapshot-nonempty", + "status": "PASS", + "value": 1848 + }, + { + "name": "snapshot-hashes", + "status": "PASS", + "files": 1848, + "bytes": 68399904 + }, + { + "name": "resigned-manifest-count", + "status": "PASS", + "value": 274 + }, + { + "name": "resigned-manifest-done-count", + "status": "PASS", + "value": 273 + }, + { + "name": "root-parent-repaired", + "status": "PASS" + }, + { + "name": "repaired-context-count", + "status": "PASS", + "value": 24 + }, + { + "name": "repaired-context-links", + "status": "PASS", + "files": 24 + }, + { + "name": "candidate-plan-deterministic", + "status": "PASS" + } + ], + "artifactCount": 1848, + "planTaskCount": 6900, + "completedCount": 273, + "activeTask": "M16-GAP-00274" +} diff --git a/tests/golden/corrective/C0-002/resign.json b/tests/golden/corrective/C0-002/resign.json new file mode 100644 index 00000000..5cb12eb3 --- /dev/null +++ b/tests/golden/corrective/C0-002/resign.json @@ -0,0 +1,7015 @@ +{ + "schemaVersion": 1, + "operation": "CORRECTIVE_STATE_RECONCILIATION_RESIGN", + "mode": "write", + "status": "PASS_WITH_REPAIR", + "queueMutation": false, + "authorization": { + "mode": "CURRENT_WORKTREE_RESIGN", + "userApproved": true, + "legacyFilesOverwritten": false + }, + "queue": { + "currentTask": "M16-GAP-00274", + "parentManifest": "tests/golden/M16-GAP-00273/manifest.json", + "parentNextTask": "M16-GAP-00274" + }, + "inputTaskCount": 274, + "candidateActiveTask": "M16-GAP-00274", + "sourceHashes": { + "docs/EXECUTION_QUEUE.md": "eeaca50828c3feb3ed53d1869626a703d9e50fefd9c70d871cc6eec03fc84bcd", + "tests/golden/M16-GAP-00273/manifest.json": "3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1", + "tests/golden/M15-03A/completed-gap-tasks.json": "f9f4f1116b5975aa1b47fee15856f2029ec8f02161e432e9a24b846384cd1c5b", + "tests/golden/M15-03A/next-task-plan.json": "2235d0d250d28e63ab1c9b0e956292560785cf340c612312b316be0ceb2463a9", + "tests/golden/M15-03A/task-catalog.jsonl": "278d51b867d63a5975635b8fd108c9025668de0893576499a77bd3d571a0f14b", + "tests/golden/M15-03A/task-index.json": "9c79926a5a91b137b023a62f8a98d7c7421018846fdf658c9bea13ee5c5cbcea" + }, + "inputDigest": "e3ea4c578a30fa0b0a80ee28645c0583b10f24f0780b3b6ef67088cddd8815b0", + "issueSummary": [ + { + "code": "ARTIFACT_HASH_RESIGNED", + "count": 1355, + "taskCount": 273, + "sampleTasks": [ + "M16-GAP-00001", + "M16-GAP-00002", + "M16-GAP-00003", + "M16-GAP-00004", + "M16-GAP-00005" + ], + "pathCount": 23, + "samplePaths": [ + "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "docs/status/M16-GAP-00162.md", + "tests/files/web/generated/M16-GAP-00177-operator-anim.end_frame_set.blend" + ] + }, + { + "code": "MISSING_TASK_CONTEXT", + "count": 24, + "taskCount": 24, + "sampleTasks": [ + "M16-GAP-00001", + "M16-GAP-00002", + "M16-GAP-00003", + "M16-GAP-00004", + "M16-GAP-00005" + ], + "pathCount": 0, + "samplePaths": [] + }, + { + "code": "PARENT_POINTER_RESIGNED", + "count": 1, + "taskCount": 1, + "sampleTasks": [ + "M16-GAP-00001" + ], + "pathCount": 0, + "samplePaths": [] + } + ], + "issueCount": 1380, + "issues": [ + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00001", + "repaired": true + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00001", + "path": "tests/golden/M15-03E/manifest.json" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00001", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00001", + "path": "tests/golden/M15-03A/next-task-plan.json" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00001", + "path": "web/package.json" + }, + { + "code": "PARENT_POINTER_RESIGNED", + "task": "M16-GAP-00001", + "parent": "M15-03E", + "originalNextTask": "M16-GAP-00018" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00002", + "repaired": true + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00002", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00002", + "path": "tests/golden/M15-03A/next-task-plan.json" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00002", + "path": "web/package.json" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00003", + "repaired": true + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00003", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00003", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00003", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00003", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00003", + "path": "tests/golden/M15-03A/next-task-plan.json" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00003", + "path": "web/package.json" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00004", + "repaired": true + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00004", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00004", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00004", + "path": "tests/golden/M15-03A/next-task-plan.json" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00005", + "repaired": true + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00005", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00005", + "path": "tests/golden/M15-03A/next-task-plan.json" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00006", + "repaired": true + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00006", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00006", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00006", + "path": "tests/golden/M15-03A/next-task-plan.json" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00007", + "repaired": true + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00007", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00007", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00007", + "path": "tests/golden/M15-03A/next-task-plan.json" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00008", + "repaired": true + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00008", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00008", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00008", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00008", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00008", + "path": "tests/golden/M15-03A/next-task-plan.json" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00009", + "repaired": true + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00009", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00009", + "path": "tests/golden/M15-03A/next-task-plan.json" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00010", + "repaired": true + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00010", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00010", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00010", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00010", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00010", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00011", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00011", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00011", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00011", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00011", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00012", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00012", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00012", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00012", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00012", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00013", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00013", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00013", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00013", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00013", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00014", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00014", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00014", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00014", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00014", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00015", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00015", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00015", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00015", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00015", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00016", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00016", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00016", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00016", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00016", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00017", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00017", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00017", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00017", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00017", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00018", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00018", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00018", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00018", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00018", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00018", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00019", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00019", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00019", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00019", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00019", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00020", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00020", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00020", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00020", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00020", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00021", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00021", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00021", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00021", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00021", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00022", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00022", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00022", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00022", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00022", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00022", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00023", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00023", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00023", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00023", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00023", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00023", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00024", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00024", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00024", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00024", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00024", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00024", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00025", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00025", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00025", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00025", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00025", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00025", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00026", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00026", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00026", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00026", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00026", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00026", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00027", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00027", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00027", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00027", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00027", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00027", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00028", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00028", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00028", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00028", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00028", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00028", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00029", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00029", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00029", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00029", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00029", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00029", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00030", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00030", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00030", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00030", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00030", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00030", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00031", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00031", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00031", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00031", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00031", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00031", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00032", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00032", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00032", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00032", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00032", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00032", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00033", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00033", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00033", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00033", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00033", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00033", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00034", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00034", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00034", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00034", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00034", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00034", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00035", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00035", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00035", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00035", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00035", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00035", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00036", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00036", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00036", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00036", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00036", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00036", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00037", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00037", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00037", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00037", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00037", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00037", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00038", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00038", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00038", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00038", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00038", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00038", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00038", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00039", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00039", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00039", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00039", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00039", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00039", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00039", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00040", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00040", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00040", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00040", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00040", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00040", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00040", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00041", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00041", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00041", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00041", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00041", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00041", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00041", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00042", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00042", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00042", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00042", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00042", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00042", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00042", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00043", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00043", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00043", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00043", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00043", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00043", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00043", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00044", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00044", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00044", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00044", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00044", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00044", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00044", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00045", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00045", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00045", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00045", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00045", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00045", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00045", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00046", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00046", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00046", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00046", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00046", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00046", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00046", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00047", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00047", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00047", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00047", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00047", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00047", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00047", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00048", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00048", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00048", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00048", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00048", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00048", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00048", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00049", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00049", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00049", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00049", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00049", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00049", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00049", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00050", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00050", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00050", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00050", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00050", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00050", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00050", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00051", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00051", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00051", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00051", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00051", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00051", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00051", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00052", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00052", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00052", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00052", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00052", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00052", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00052", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00053", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00053", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00053", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00053", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00053", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00053", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00053", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00054", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00054", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00054", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00054", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00054", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00054", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00054", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00055", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00055", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00055", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00055", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00055", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00055", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00055", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00056", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00056", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00056", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00056", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00056", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00056", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00056", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00057", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00057", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00057", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00057", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00057", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00057", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00057", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00058", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00058", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00058", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00058", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00058", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00058", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00058", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00059", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00059", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00059", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00059", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00059", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00059", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00060", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00060", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00060", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00060", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00060", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00060", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00061", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00061", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00061", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00061", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00061", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00061", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00062", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00062", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00062", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00062", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00062", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00062", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00063", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00063", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00063", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00063", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00063", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00063", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00064", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00064", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00064", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00064", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00064", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00064", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00065", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00065", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00065", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00065", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00065", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00065", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00066", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00066", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00066", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00066", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00066", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00066", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00067", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00067", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00067", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00067", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00067", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00067", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00068", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00068", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00068", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00068", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00068", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00068", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00069", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00069", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00069", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00069", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00069", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00069", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00070", + "repaired": true + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00070", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00070", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00070", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00070", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00070", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00070", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00071", + "path": "tests/golden/M16-GAP-00070/manifest.json" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00071", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00071", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00071", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00071", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00071", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00071", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00072", + "repaired": true + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00072", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00072", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00072", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00072", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00072", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00072", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00073", + "repaired": true + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00073", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00073", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00073", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00073", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00073", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00073", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00074", + "repaired": true + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00074", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00074", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00074", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00074", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00074", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00074", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00075", + "repaired": true + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00075", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00075", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00075", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00075", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00075", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00075", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00076", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00076", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00076", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00076", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00076", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00076", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00077", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00077", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00077", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00077", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00077", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00077", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00078", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00078", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00078", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00078", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00078", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00078", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00079", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00079", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00079", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00079", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00079", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00079", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00080", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00080", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00080", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00080", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00080", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00080", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00081", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00081", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00081", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00081", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00081", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00081", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00082", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00082", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00082", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00082", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00082", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00082", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00083", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00083", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00083", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00083", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00083", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00083", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00084", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00084", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00084", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00084", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00084", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00084", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00085", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00085", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00085", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00085", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00085", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00085", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00086", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00086", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00086", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00086", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00086", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00086", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00087", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00087", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00087", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00087", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00087", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00087", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00088", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00088", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00088", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00088", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00088", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00088", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00089", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00089", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00089", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00089", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00089", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00089", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00090", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00090", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00090", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00090", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00090", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00090", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00091", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00091", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00091", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00091", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00091", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00091", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00092", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00092", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00092", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00092", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00092", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00092", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00093", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00093", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00093", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00093", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00093", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00093", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00094", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00094", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00094", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00094", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00094", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00094", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00095", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00095", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00095", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00095", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00095", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00095", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00096", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00096", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00096", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00096", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00096", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00096", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00097", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00097", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00097", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00097", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00097", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00097", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00098", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00098", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00098", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00098", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00098", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00098", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00099", + "repaired": true + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00099", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00099", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00099", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00099", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00099", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00099", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00100", + "repaired": true + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00100", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00100", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00100", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00100", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00100", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00100", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00101", + "repaired": true + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00101", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00101", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00101", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00101", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00101", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00101", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00102", + "repaired": true + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00102", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00102", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00102", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00102", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00102", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00102", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00103", + "repaired": true + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00103", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00103", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00103", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00103", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00103", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00103", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00103", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00104", + "repaired": true + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00104", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00104", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00104", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00104", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00104", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00104", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00104", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00105", + "repaired": true + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00105", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00105", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00105", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00105", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00105", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00105", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00105", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00106", + "repaired": true + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00106", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00106", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00106", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00106", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00106", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00106", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00106", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00107", + "repaired": true + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00107", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00107", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00107", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00107", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00107", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00107", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00107", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00108", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00108", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00108", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00108", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00108", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00108", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00108", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00109", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00109", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00109", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00109", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00109", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00109", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00109", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00110", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00110", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00110", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00110", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00110", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00110", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00110", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00111", + "path": "tools/web/check-generic-modifier-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00111", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00111", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00111", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00111", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00111", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00111", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00112", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00112", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00112", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00112", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00112", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00113", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00113", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00113", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00113", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00113", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00113", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00114", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00114", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00114", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00114", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00114", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00115", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00115", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00115", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00115", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00115", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00116", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00116", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00116", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00116", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00116", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00117", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00117", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00117", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00117", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00117", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00118", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00118", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00118", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00118", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00118", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00119", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00119", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00119", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00119", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00119", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00120", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00120", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00120", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00120", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00120", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00121", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00121", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00121", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00121", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00121", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00122", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00122", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00122", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00122", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00122", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00123", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00123", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00123", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00123", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00123", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00124", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00124", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00124", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00124", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00124", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00125", + "path": "tools/web/check-action-keyframe-insert-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00125", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00125", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00125", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00125", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00125", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00126", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00126", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00126", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00126", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00126", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00127", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00127", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00127", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00127", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00127", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00128", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00128", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00128", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00128", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00128", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00129", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00129", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00129", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00129", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00129", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00130", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00130", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00130", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00130", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00130", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00131", + "path": "tools/web/check-action-previewrange-set-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00131", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00131", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00131", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00131", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00131", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00132", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00132", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00132", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00132", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00132", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00133", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00133", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00133", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00133", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00133", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00134", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00134", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00134", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00134", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00134", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00135", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00135", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00135", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00135", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00135", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00136", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00136", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00136", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00136", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00136", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00137", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00137", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00137", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00137", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00137", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00138", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00138", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00138", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00138", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00138", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00139", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00139", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00139", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00139", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00139", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00140", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00140", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00140", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00140", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00140", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00141", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00141", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00141", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00141", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00141", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00142", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00142", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00142", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00142", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00142", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00143", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00143", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00143", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00143", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00143", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00144", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00144", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00144", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00144", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00144", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00145", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00145", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00145", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00145", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00145", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00146", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00146", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00146", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00146", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00146", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00147", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00147", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00147", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00147", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00147", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00148", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00148", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00148", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00148", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00148", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00149", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00149", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00149", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00149", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00149", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00150", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00150", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00150", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00150", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00150", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00151", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00151", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00151", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00151", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00151", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00152", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00152", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00152", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00152", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00152", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00153", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00153", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00153", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00153", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00153", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00154", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00154", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00154", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00154", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00154", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00155", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00155", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00155", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00155", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00155", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00156", + "path": "tools/web/check-action-channels-collapse-desktop.py" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00156", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00156", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00156", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00156", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00156", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00157", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00157", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00157", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00157", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00157", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00158", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00158", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00158", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00158", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00158", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00159", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00159", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00159", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00159", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00159", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00160", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00160", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00160", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00160", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00160", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00160", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00161", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00161", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00161", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00161", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00161", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00161", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00162", + "path": "tests/golden/M16-GAP-00161/manifest.json" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00162", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00162", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00162", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00162", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00162", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00162", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00162", + "path": "docs/status/M16-GAP-00162.md" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00162", + "path": "tests/golden/M16-GAP-00162/task-context.json" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00163", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00163", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00163", + "path": "web/protocol/scene-ir.ts" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00163", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00163", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00163", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00164", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00164", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00164", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00164", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00164", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00165", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00165", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00165", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00165", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00165", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00166", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00166", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00166", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00166", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00166", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00167", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00167", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00167", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00167", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00167", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00168", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00168", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00168", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00168", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00168", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00169", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00169", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00169", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00169", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00169", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00170", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00170", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00170", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00170", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00170", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00171", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00171", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00171", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00171", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00171", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00172", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00172", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00172", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00172", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00172", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00173", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00173", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00173", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00173", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00173", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00174", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00174", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00174", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00174", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00174", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00175", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00175", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00175", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00175", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00175", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00176", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00176", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00176", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00176", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00176", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00177", + "path": "tests/files/web/generated/M16-GAP-00177-operator-anim.end_frame_set.blend" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00177", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00177", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00177", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00177", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00177", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00177", + "path": "tests/golden/M16-GAP-00177/anim-end-frame-set-desktop-report.json" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00177", + "path": "tests/golden/M16-GAP-00177/anim-end-frame-set-local-exact-report.json" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00178", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00178", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00178", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00178", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00178", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00179", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00179", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00179", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00179", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00179", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00180", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00180", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00180", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00180", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00180", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00181", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00181", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00181", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00181", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00181", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00182", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00182", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00182", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00182", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00182", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00183", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00183", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00183", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00183", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00183", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00184", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00184", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00184", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00184", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00184", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00185", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00185", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00185", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00185", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00185", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00186", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00186", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00186", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00186", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00186", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00187", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00187", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00187", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00187", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00187", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00188", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00188", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00188", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00188", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00188", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00189", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00189", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00189", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00189", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00189", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00190", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00190", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00190", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00190", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00190", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00191", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00191", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00191", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00191", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00191", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00192", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00192", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00192", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00192", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00192", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00193", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00193", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00193", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00193", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00193", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00194", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00194", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00194", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00194", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00194", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00195", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00195", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00195", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00195", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00195", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00196", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00196", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00196", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00196", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00196", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00197", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00197", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00197", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00197", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00197", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00198", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00198", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00198", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00198", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00198", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00199", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00199", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00199", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00199", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00199", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00200", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00200", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00200", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00200", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00200", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00201", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00201", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00201", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00201", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00201", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00202", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00202", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00202", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00202", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00202", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00203", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00203", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00203", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00203", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00203", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00204", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00204", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00204", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00204", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00204", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00205", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00205", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00205", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00205", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00205", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00206", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00206", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00206", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00206", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00206", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00207", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00207", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00207", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00207", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00207", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00207", + "path": "web/app/public/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00208", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00208", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00208", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00208", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00208", + "path": "web/app/src/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00208", + "path": "web/app/public/vendor/blender/web_engine.js" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00209", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00209", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00209", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00209", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00210", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00210", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00210", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00210", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00211", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00211", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00211", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00211", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00212", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00212", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00212", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00212", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00213", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00213", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00213", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00213", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00214", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00214", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00214", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00214", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00215", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00215", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00215", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00215", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00216", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00216", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00216", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00216", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00217", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00217", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00217", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00217", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00218", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00218", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00218", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00218", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00219", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00219", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00219", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00219", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00220", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00220", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00220", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00220", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00221", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00221", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00221", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00221", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00222", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00222", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00222", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00222", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00223", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00223", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00223", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00223", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00224", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00224", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00224", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00224", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00225", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00225", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00225", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00225", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00226", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00226", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00226", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00226", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00227", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00227", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00227", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00227", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00228", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00228", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00228", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00228", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00229", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00229", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00229", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00229", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00230", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00230", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00230", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00230", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00231", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00231", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00231", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00231", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00232", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00232", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00232", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00232", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00233", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00233", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00233", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00233", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00234", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00234", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00234", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00234", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00235", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00235", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00235", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00235", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00236", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00236", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00236", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00236", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00237", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00237", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00237", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00237", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00238", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00238", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00238", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00238", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00239", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00239", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00239", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00239", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00240", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00240", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00240", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00240", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00241", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00241", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00241", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00241", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00242", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00242", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00242", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00242", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00243", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00243", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00243", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00243", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00244", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00244", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00244", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00244", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00245", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00245", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00245", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00245", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00246", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00246", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00246", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00246", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00247", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00247", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00247", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00247", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00248", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00248", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00248", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00248", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00249", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00249", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00249", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00249", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00250", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00250", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00250", + "path": "web/app/src/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00250", + "path": "web/app/public/vendor/blender/web_engine.wasm" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00251", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00252", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00253", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00254", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00255", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00256", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00257", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00258", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00259", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00260", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00261", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00262", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00263", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00264", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00265", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00266", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00267", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00268", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00269", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00270", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00271", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00272", + "path": "tools/web/check-generated-gap.mjs" + }, + { + "code": "ARTIFACT_HASH_RESIGNED", + "task": "M16-GAP-00273", + "path": "tools/web/check-generated-gap.mjs" + } + ], + "registryComparison": { + "candidateCompletedTaskCount": 273, + "candidateCompletedGapCount": 273, + "previousRegistryPath": "tests/golden/M15-03A/completed-gap-tasks.json" + }, + "repairPlan": { + "approvalRequired": false, + "queueMutationAllowed": false, + "actions": [ + "re-sign current artifact hashes in staged manifests", + "repair contexts with valid indexed parent data", + "record M16-GAP-00001 parent pointer as a staged repair", + "regenerate registry, plan, catalog, index and active card in staging" + ] + }, + "writeOutcome": "STAGED_RE_SIGN_CANDIDATE", + "commandExitCodes": { + "resign": null, + "validation": null, + "planCheck": null, + "indexCheck": null, + "contextCheck": null, + "governanceCheck": null, + "diffCheck": null + }, + "candidates": { + "completionRegistry": "tests/golden/corrective/C0-002/staged/completed-gap-tasks.candidate.json", + "plan": "tests/golden/corrective/C0-002/staged/next-task-plan.candidate.json", + "taskIndex": "tests/golden/corrective/C0-002/staged/task-index/task-index.json", + "catalog": "tests/golden/corrective/C0-002/staged/task-index/task-catalog.jsonl", + "activeTaskCard": "tests/golden/corrective/C0-002/staged/task-cards/M16-GAP-00274.md", + "sourceSnapshot": "tests/golden/corrective/C0-002/staged/source-snapshot/snapshot-manifest.json", + "sourceSnapshotFileCount": 1848, + "resignedManifestCount": 274, + "repairedContextCount": 24, + "repairedParentCount": 1 + } +} diff --git a/tests/golden/corrective/C0-002/staged/completed-gap-tasks.candidate.json b/tests/golden/corrective/C0-002/staged/completed-gap-tasks.candidate.json new file mode 100644 index 00000000..c837c22d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/completed-gap-tasks.candidate.json @@ -0,0 +1,275 @@ +[ + "datablock:Action", + "datablock:Armature", + "datablock:Brush", + "datablock:Camera", + "datablock:Collection", + "datablock:Curve", + "datablock:Curves", + "datablock:FreestyleLineStyle", + "datablock:GreasePencil", + "datablock:Lattice", + "datablock:Library", + "datablock:Light", + "datablock:Material", + "datablock:Mesh", + "datablock:MetaBall", + "datablock:NodeTree", + "datablock:Object", + "datablock:ParticleSettings", + "datablock:PointCloud", + "datablock:Scene", + "datablock:Screen", + "datablock:Sound", + "datablock:Speaker", + "datablock:Text", + "datablock:Texture", + "datablock:Volume", + "datablock:WindowManager", + "datablock:WorkSpace", + "datablock:World", + "modifier:ARMATURE", + "modifier:ARRAY", + "modifier:BEVEL", + "modifier:BOOLEAN", + "modifier:BUILD", + "modifier:CAST", + "modifier:CLOTH", + "modifier:COLLISION", + "modifier:CORRECTIVE_SMOOTH", + "modifier:CURVE", + "modifier:DATA_TRANSFER", + "modifier:DECIMATE", + "modifier:DISPLACE", + "modifier:DYNAMIC_PAINT", + "modifier:EDGE_SPLIT", + "modifier:EXPLODE", + "modifier:FLUID", + "modifier:GREASE_PENCIL_ARMATURE", + "modifier:GREASE_PENCIL_ARRAY", + "modifier:GREASE_PENCIL_BUILD", + "modifier:GREASE_PENCIL_COLOR", + "modifier:GREASE_PENCIL_DASH", + "modifier:GREASE_PENCIL_ENVELOPE", + "modifier:GREASE_PENCIL_HOOK", + "modifier:GREASE_PENCIL_LATTICE", + "modifier:GREASE_PENCIL_LENGTH", + "modifier:GREASE_PENCIL_MIRROR", + "modifier:GREASE_PENCIL_MULTIPLY", + "modifier:GREASE_PENCIL_NOISE", + "modifier:GREASE_PENCIL_OFFSET", + "modifier:GREASE_PENCIL_OPACITY", + "modifier:GREASE_PENCIL_OUTLINE", + "modifier:GREASE_PENCIL_SHRINKWRAP", + "modifier:GREASE_PENCIL_SIMPLIFY", + "modifier:GREASE_PENCIL_SMOOTH", + "modifier:GREASE_PENCIL_SUBDIV", + "modifier:GREASE_PENCIL_TEXTURE", + "modifier:GREASE_PENCIL_THICKNESS", + "modifier:GREASE_PENCIL_TIME", + "modifier:GREASE_PENCIL_TINT", + "modifier:GREASE_PENCIL_VERTEX_WEIGHT_ANGLE", + "modifier:GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY", + "modifier:HOOK", + "modifier:LAPLACIANDEFORM", + "modifier:LAPLACIANSMOOTH", + "modifier:LATTICE", + "modifier:LINEART", + "modifier:MASK", + "modifier:MESH_CACHE", + "modifier:MESH_DEFORM", + "modifier:MESH_SEQUENCE_CACHE", + "modifier:MESH_TO_VOLUME", + "modifier:MIRROR", + "modifier:MULTIRES", + "modifier:NODES", + "modifier:NORMAL_EDIT", + "modifier:OCEAN", + "modifier:PARTICLE_INSTANCE", + "modifier:PARTICLE_SYSTEM", + "modifier:REMESH", + "modifier:SCREW", + "modifier:SHRINKWRAP", + "modifier:SIMPLE_DEFORM", + "modifier:SKIN", + "modifier:SMOOTH", + "modifier:SOFT_BODY", + "modifier:SOLIDIFY", + "modifier:SUBSURF", + "modifier:SURFACE", + "modifier:SURFACE_DEFORM", + "modifier:TRIANGULATE", + "modifier:UV_PROJECT", + "modifier:UV_WARP", + "modifier:VERTEX_WEIGHT_EDIT", + "modifier:VERTEX_WEIGHT_MIX", + "modifier:VERTEX_WEIGHT_PROXIMITY", + "modifier:VOLUME_DISPLACE", + "modifier:VOLUME_TO_MESH", + "modifier:WARP", + "modifier:WAVE", + "modifier:WEIGHTED_NORMAL", + "modifier:WELD", + "modifier:WIREFRAME", + "operator:action.bake_keys", + "operator:action.clean", + "operator:action.clickselect", + "operator:action.copy", + "operator:action.delete", + "operator:action.duplicate", + "operator:action.duplicate_move", + "operator:action.easing_type", + "operator:action.extrapolation_type", + "operator:action.frame_jump", + "operator:action.handle_type", + "operator:action.interpolation_type", + "operator:action.keyframe_insert", + "operator:action.keyframe_type", + "operator:action.markers_make_local", + "operator:action.mirror", + "operator:action.new", + "operator:action.paste", + "operator:action.previewrange_set", + "operator:action.push_down", + "operator:action.select_all", + "operator:action.select_box", + "operator:action.select_by_type", + "operator:action.select_circle", + "operator:action.select_column", + "operator:action.select_lasso", + "operator:action.select_leftright", + "operator:action.select_less", + "operator:action.select_linked", + "operator:action.select_more", + "operator:action.snap", + "operator:action.stash", + "operator:action.stash_and_create", + "operator:action.unlink", + "operator:action.view_all", + "operator:action.view_frame", + "operator:action.view_selected", + "operator:anim.change_frame", + "operator:anim.channel_select_keys", + "operator:anim.channel_view_pick", + "operator:anim.channels_bake", + "operator:anim.channels_clean_empty", + "operator:anim.channels_click", + "operator:anim.channels_collapse", + "operator:anim.channels_delete", + "operator:anim.channels_editable_toggle", + "operator:anim.channels_expand", + "operator:anim.channels_fcurves_enable", + "operator:anim.channels_group", + "operator:anim.channels_move", + "operator:anim.channels_rename", + "operator:anim.channels_select_all", + "operator:anim.channels_select_box", + "operator:anim.channels_select_filter", + "operator:anim.channels_setting_disable", + "operator:anim.channels_setting_enable", + "operator:anim.channels_setting_toggle", + "operator:anim.channels_ungroup", + "operator:anim.channels_view_selected", + "operator:anim.clear_useless_actions", + "operator:anim.copy_driver_button", + "operator:anim.driver_button_add", + "operator:anim.driver_button_edit", + "operator:anim.driver_button_remove", + "operator:anim.end_frame_set", + "operator:anim.keyframe_clear_button", + "operator:anim.keyframe_clear_v3d", + "operator:anim.keyframe_clear_vse", + "operator:anim.keyframe_delete", + "operator:anim.keyframe_delete_button", + "operator:anim.keyframe_delete_by_name", + "operator:anim.keyframe_delete_v3d", + "operator:anim.keyframe_delete_vse", + "operator:anim.keyframe_insert", + "operator:anim.keyframe_insert_button", + "operator:anim.keyframe_insert_by_name", + "operator:anim.keyframe_insert_menu", + "operator:anim.keying_set_active_set", + "operator:anim.keying_set_add", + "operator:anim.keying_set_export", + "operator:anim.keying_set_path_add", + "operator:anim.keying_set_path_remove", + "operator:anim.keying_set_remove", + "operator:anim.keyingset_button_add", + "operator:anim.keyingset_button_remove", + "operator:anim.merge_animation", + "operator:anim.paste_driver_button", + "operator:anim.previewrange_clear", + "operator:anim.previewrange_set", + "operator:anim.replace_action", + "operator:anim.replace_action_new", + "operator:anim.scene_range_frame", + "operator:anim.separate_slots", + "operator:anim.slot_channels_move_to_new_action", + "operator:anim.slot_new_for_id", + "operator:anim.slot_unassign_from_constraint", + "operator:anim.slot_unassign_from_id", + "operator:anim.slot_unassign_from_nla_strip", + "operator:anim.start_frame_set", + "operator:anim.update_animated_transform_constraints", + "operator:anim.version_bone_hide_property", + "operator:anim.view_curve_in_graph_editor", + "operator:armature.align", + "operator:armature.assign_to_collection", + "operator:armature.autoside_names", + "operator:armature.bone_primitive_add", + "operator:armature.calculate_roll", + "operator:armature.click_extrude", + "operator:armature.collection_add", + "operator:armature.collection_assign", + "operator:armature.collection_create_and_assign", + "operator:armature.collection_deselect", + "operator:armature.collection_move", + "operator:armature.collection_remove", + "operator:armature.collection_remove_unused", + "operator:armature.collection_select", + "operator:armature.collection_show_all", + "operator:armature.collection_unassign", + "operator:armature.collection_unassign_named", + "operator:armature.collection_unsolo_all", + "operator:armature.copy_bone_color_to_selected", + "operator:armature.delete", + "operator:armature.dissolve", + "operator:armature.duplicate", + "operator:armature.duplicate_move", + "operator:armature.duplicate_rename", + "operator:armature.extrude", + "operator:armature.extrude_forked", + "operator:armature.extrude_move", + "operator:armature.fill", + "operator:armature.flip_names", + "operator:armature.hide", + "operator:armature.move_to_collection", + "operator:armature.parent_clear", + "operator:armature.parent_set", + "operator:armature.reveal", + "operator:armature.roll_clear", + "operator:armature.select_all", + "operator:armature.select_hierarchy", + "operator:armature.select_less", + "operator:armature.select_linked", + "operator:armature.select_linked_pick", + "operator:armature.select_mirror", + "operator:armature.select_more", + "operator:armature.select_similar", + "operator:armature.separate", + "operator:armature.shortest_path_pick", + "operator:armature.split", + "operator:armature.subdivide", + "operator:armature.switch_direction", + "operator:armature.symmetrize", + "operator:asset.asset_download", + "operator:asset.assets_download", + "operator:asset.assign_action", + "operator:asset.browse_containing_blend_file", + "operator:asset.bundle_install", + "operator:asset.catalog_delete", + "operator:asset.catalog_new", + "operator:asset.catalog_redo", + "operator:asset.catalog_undo", + "operator:asset.catalog_undo_push" +] diff --git a/tests/golden/corrective/C0-002/staged/next-task-plan.candidate.json b/tests/golden/corrective/C0-002/staged/next-task-plan.candidate.json new file mode 100644 index 00000000..c256b7f2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/next-task-plan.candidate.json @@ -0,0 +1,158740 @@ +{ + "schemaVersion": 1, + "task": "M15-03A", + "operation": "BLENDER_NEXT_TASK_PLAN", + "sources": { + "parityMap": { + "path": "tests/golden/M15-02A/blender-parity-map.json", + "sha256": "f3e757f26e58a4252b6cc2a7f9275428bbe5bf659cc0f0ff6350a147bdf2809c" + }, + "gapAudit": { + "path": "tests/golden/M15-02B/blender-gap-audit.json", + "sha256": "e976ff40d2f3491a5a57ffcdd0d0c0f0586e57d06984e4a4aa05ba1b36800faa" + }, + "completions": { + "path": "tests/golden/corrective/C0-002/staged/completed-gap-tasks.candidate.json", + "sha256": "f5da902feecdafc1f12773568d3f48a5bab1ae8581e9661d8a7c888f4b62026e" + } + }, + "summary": { + "taskCount": 6900, + "active": 1, + "pending": 6626, + "completed": 273, + "blocked": 0, + "byWave": { + "M16": 2667, + "M17": 29, + "M18": 451, + "M19": 20, + "M20": 89, + "M21": 3625, + "M22": 19 + } + }, + "tasks": [ + { + "id": "M16-GAP-00001", + "gapId": "datablock:Action", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00001-datablock-Action.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00001.py -- tests/files/web/generated/M16-GAP-00001-datablock-Action.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00001", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00001", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00002", + "gapId": "datablock:Armature", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00002-datablock-Armature.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00002.py -- tests/files/web/generated/M16-GAP-00002-datablock-Armature.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00002", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00002", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00003", + "gapId": "datablock:Brush", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00003-datablock-Brush.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00003.py -- tests/files/web/generated/M16-GAP-00003-datablock-Brush.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00003", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00003", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00004", + "gapId": "datablock:Camera", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00004-datablock-Camera.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00004.py -- tests/files/web/generated/M16-GAP-00004-datablock-Camera.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00004", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00004", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00005", + "gapId": "datablock:Collection", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00005-datablock-Collection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00005.py -- tests/files/web/generated/M16-GAP-00005-datablock-Collection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00005", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00005", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00006", + "gapId": "datablock:Curve", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00006-datablock-Curve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00006.py -- tests/files/web/generated/M16-GAP-00006-datablock-Curve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00006", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00006", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00007", + "gapId": "datablock:Curves", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00007-datablock-Curves.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00007.py -- tests/files/web/generated/M16-GAP-00007-datablock-Curves.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00007", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00007", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00008", + "gapId": "datablock:FreestyleLineStyle", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00008-datablock-FreestyleLineStyle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00008.py -- tests/files/web/generated/M16-GAP-00008-datablock-FreestyleLineStyle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00008", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00008", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00009", + "gapId": "datablock:GreasePencil", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00009-datablock-GreasePencil.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00009.py -- tests/files/web/generated/M16-GAP-00009-datablock-GreasePencil.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00009", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00009", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00010", + "gapId": "datablock:Lattice", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00010-datablock-Lattice.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00010.py -- tests/files/web/generated/M16-GAP-00010-datablock-Lattice.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00010", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00010", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00011", + "gapId": "datablock:Library", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00011-datablock-Library.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00011.py -- tests/files/web/generated/M16-GAP-00011-datablock-Library.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00011", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00011", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00012", + "gapId": "datablock:Light", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00012-datablock-Light.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00012.py -- tests/files/web/generated/M16-GAP-00012-datablock-Light.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00012", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00012", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00013", + "gapId": "datablock:Material", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00013-datablock-Material.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00013.py -- tests/files/web/generated/M16-GAP-00013-datablock-Material.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00013", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00013", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00014", + "gapId": "datablock:Mesh", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00014-datablock-Mesh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00014.py -- tests/files/web/generated/M16-GAP-00014-datablock-Mesh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00014", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00014", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00015", + "gapId": "datablock:MetaBall", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00015-datablock-MetaBall.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00015.py -- tests/files/web/generated/M16-GAP-00015-datablock-MetaBall.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00015", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00015", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00016", + "gapId": "datablock:NodeTree", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00016-datablock-NodeTree.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00016.py -- tests/files/web/generated/M16-GAP-00016-datablock-NodeTree.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00016", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00016", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00017", + "gapId": "datablock:Object", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00017-datablock-Object.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00017.py -- tests/files/web/generated/M16-GAP-00017-datablock-Object.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00017", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00017", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00018", + "gapId": "datablock:ParticleSettings", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00018-datablock-ParticleSettings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00018.py -- tests/files/web/generated/M16-GAP-00018-datablock-ParticleSettings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00018", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00018", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00019", + "gapId": "datablock:PointCloud", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00019-datablock-PointCloud.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00019.py -- tests/files/web/generated/M16-GAP-00019-datablock-PointCloud.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00019", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00019", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00020", + "gapId": "datablock:Scene", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00020-datablock-Scene.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00020.py -- tests/files/web/generated/M16-GAP-00020-datablock-Scene.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00020", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00020", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00021", + "gapId": "datablock:Screen", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00021-datablock-Screen.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00021.py -- tests/files/web/generated/M16-GAP-00021-datablock-Screen.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00021", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00021", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00022", + "gapId": "datablock:Sound", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00022-datablock-Sound.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00022.py -- tests/files/web/generated/M16-GAP-00022-datablock-Sound.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00022", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00022", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00023", + "gapId": "datablock:Speaker", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00023-datablock-Speaker.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00023.py -- tests/files/web/generated/M16-GAP-00023-datablock-Speaker.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00023", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00023", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00024", + "gapId": "datablock:Text", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00024-datablock-Text.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00024.py -- tests/files/web/generated/M16-GAP-00024-datablock-Text.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00024", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00024", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00025", + "gapId": "datablock:Texture", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00025-datablock-Texture.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00025.py -- tests/files/web/generated/M16-GAP-00025-datablock-Texture.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00025", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00025", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00026", + "gapId": "datablock:Volume", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00026-datablock-Volume.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00026.py -- tests/files/web/generated/M16-GAP-00026-datablock-Volume.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00026", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00026", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00027", + "gapId": "datablock:WindowManager", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00027-datablock-WindowManager.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00027.py -- tests/files/web/generated/M16-GAP-00027-datablock-WindowManager.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00027", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00027", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00028", + "gapId": "datablock:WorkSpace", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00028-datablock-WorkSpace.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00028.py -- tests/files/web/generated/M16-GAP-00028-datablock-WorkSpace.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00028", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00028", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00029", + "gapId": "datablock:World", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00029-datablock-World.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00029.py -- tests/files/web/generated/M16-GAP-00029-datablock-World.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00029", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00029", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00030", + "gapId": "modifier:ARMATURE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00030-modifier-ARMATURE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00030.py -- tests/files/web/generated/M16-GAP-00030-modifier-ARMATURE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00030", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00030", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00031", + "gapId": "modifier:ARRAY", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00031-modifier-ARRAY.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00031.py -- tests/files/web/generated/M16-GAP-00031-modifier-ARRAY.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00031", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00031", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00032", + "gapId": "modifier:BEVEL", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00032-modifier-BEVEL.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00032.py -- tests/files/web/generated/M16-GAP-00032-modifier-BEVEL.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00032", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00032", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00033", + "gapId": "modifier:BOOLEAN", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00033-modifier-BOOLEAN.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00033.py -- tests/files/web/generated/M16-GAP-00033-modifier-BOOLEAN.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00033", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00033", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00034", + "gapId": "modifier:BUILD", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00034-modifier-BUILD.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00034.py -- tests/files/web/generated/M16-GAP-00034-modifier-BUILD.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00034", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00034", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00035", + "gapId": "modifier:CAST", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00035-modifier-CAST.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00035.py -- tests/files/web/generated/M16-GAP-00035-modifier-CAST.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00035", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00035", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00036", + "gapId": "modifier:CLOTH", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00036-modifier-CLOTH.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00036.py -- tests/files/web/generated/M16-GAP-00036-modifier-CLOTH.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00036", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00036", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00037", + "gapId": "modifier:COLLISION", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00037-modifier-COLLISION.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00037.py -- tests/files/web/generated/M16-GAP-00037-modifier-COLLISION.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00037", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00037", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00038", + "gapId": "modifier:CORRECTIVE_SMOOTH", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00038-modifier-CORRECTIVE_SMOOTH.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00038.py -- tests/files/web/generated/M16-GAP-00038-modifier-CORRECTIVE_SMOOTH.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00038", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00038", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00039", + "gapId": "modifier:CURVE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00039-modifier-CURVE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00039.py -- tests/files/web/generated/M16-GAP-00039-modifier-CURVE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00039", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00039", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00040", + "gapId": "modifier:DATA_TRANSFER", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00040-modifier-DATA_TRANSFER.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00040.py -- tests/files/web/generated/M16-GAP-00040-modifier-DATA_TRANSFER.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00040", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00040", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00041", + "gapId": "modifier:DECIMATE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00041-modifier-DECIMATE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00041.py -- tests/files/web/generated/M16-GAP-00041-modifier-DECIMATE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00041", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00041", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00042", + "gapId": "modifier:DISPLACE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00042-modifier-DISPLACE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00042.py -- tests/files/web/generated/M16-GAP-00042-modifier-DISPLACE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00042", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00042", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00043", + "gapId": "modifier:DYNAMIC_PAINT", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00043-modifier-DYNAMIC_PAINT.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00043.py -- tests/files/web/generated/M16-GAP-00043-modifier-DYNAMIC_PAINT.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00043", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00043", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00044", + "gapId": "modifier:EDGE_SPLIT", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00044-modifier-EDGE_SPLIT.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00044.py -- tests/files/web/generated/M16-GAP-00044-modifier-EDGE_SPLIT.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00044", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00044", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00045", + "gapId": "modifier:EXPLODE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00045-modifier-EXPLODE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00045.py -- tests/files/web/generated/M16-GAP-00045-modifier-EXPLODE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00045", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00045", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00046", + "gapId": "modifier:FLUID", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00046-modifier-FLUID.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00046.py -- tests/files/web/generated/M16-GAP-00046-modifier-FLUID.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00046", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00046", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00047", + "gapId": "modifier:GREASE_PENCIL_ARMATURE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00047-modifier-GREASE_PENCIL_ARMATURE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00047.py -- tests/files/web/generated/M16-GAP-00047-modifier-GREASE_PENCIL_ARMATURE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00047", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00047", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00048", + "gapId": "modifier:GREASE_PENCIL_ARRAY", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00048-modifier-GREASE_PENCIL_ARRAY.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00048.py -- tests/files/web/generated/M16-GAP-00048-modifier-GREASE_PENCIL_ARRAY.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00048", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00048", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00049", + "gapId": "modifier:GREASE_PENCIL_BUILD", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00049-modifier-GREASE_PENCIL_BUILD.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00049.py -- tests/files/web/generated/M16-GAP-00049-modifier-GREASE_PENCIL_BUILD.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00049", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00049", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00050", + "gapId": "modifier:GREASE_PENCIL_COLOR", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00050-modifier-GREASE_PENCIL_COLOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00050.py -- tests/files/web/generated/M16-GAP-00050-modifier-GREASE_PENCIL_COLOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00050", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00050", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00051", + "gapId": "modifier:GREASE_PENCIL_DASH", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00051-modifier-GREASE_PENCIL_DASH.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00051.py -- tests/files/web/generated/M16-GAP-00051-modifier-GREASE_PENCIL_DASH.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00051", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00051", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00052", + "gapId": "modifier:GREASE_PENCIL_ENVELOPE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00052-modifier-GREASE_PENCIL_ENVELOPE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00052.py -- tests/files/web/generated/M16-GAP-00052-modifier-GREASE_PENCIL_ENVELOPE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00052", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00052", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00053", + "gapId": "modifier:GREASE_PENCIL_HOOK", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00053-modifier-GREASE_PENCIL_HOOK.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00053.py -- tests/files/web/generated/M16-GAP-00053-modifier-GREASE_PENCIL_HOOK.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00053", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00053", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00054", + "gapId": "modifier:GREASE_PENCIL_LATTICE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00054-modifier-GREASE_PENCIL_LATTICE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00054.py -- tests/files/web/generated/M16-GAP-00054-modifier-GREASE_PENCIL_LATTICE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00054", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00054", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00055", + "gapId": "modifier:GREASE_PENCIL_LENGTH", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00055-modifier-GREASE_PENCIL_LENGTH.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00055.py -- tests/files/web/generated/M16-GAP-00055-modifier-GREASE_PENCIL_LENGTH.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00055", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00055", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00056", + "gapId": "modifier:GREASE_PENCIL_MIRROR", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00056-modifier-GREASE_PENCIL_MIRROR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00056.py -- tests/files/web/generated/M16-GAP-00056-modifier-GREASE_PENCIL_MIRROR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00056", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00056", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00057", + "gapId": "modifier:GREASE_PENCIL_MULTIPLY", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00057-modifier-GREASE_PENCIL_MULTIPLY.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00057.py -- tests/files/web/generated/M16-GAP-00057-modifier-GREASE_PENCIL_MULTIPLY.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00057", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00057", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00058", + "gapId": "modifier:GREASE_PENCIL_NOISE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00058-modifier-GREASE_PENCIL_NOISE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00058.py -- tests/files/web/generated/M16-GAP-00058-modifier-GREASE_PENCIL_NOISE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00058", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00058", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00059", + "gapId": "modifier:GREASE_PENCIL_OFFSET", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00059-modifier-GREASE_PENCIL_OFFSET.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00059.py -- tests/files/web/generated/M16-GAP-00059-modifier-GREASE_PENCIL_OFFSET.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00059", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00059", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00060", + "gapId": "modifier:GREASE_PENCIL_OPACITY", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00060-modifier-GREASE_PENCIL_OPACITY.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00060.py -- tests/files/web/generated/M16-GAP-00060-modifier-GREASE_PENCIL_OPACITY.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00060", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00060", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00061", + "gapId": "modifier:GREASE_PENCIL_OUTLINE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00061-modifier-GREASE_PENCIL_OUTLINE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00061.py -- tests/files/web/generated/M16-GAP-00061-modifier-GREASE_PENCIL_OUTLINE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00061", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00061", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00062", + "gapId": "modifier:GREASE_PENCIL_SHRINKWRAP", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00062-modifier-GREASE_PENCIL_SHRINKWRAP.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00062.py -- tests/files/web/generated/M16-GAP-00062-modifier-GREASE_PENCIL_SHRINKWRAP.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00062", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00062", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00063", + "gapId": "modifier:GREASE_PENCIL_SIMPLIFY", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00063-modifier-GREASE_PENCIL_SIMPLIFY.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00063.py -- tests/files/web/generated/M16-GAP-00063-modifier-GREASE_PENCIL_SIMPLIFY.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00063", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00063", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00064", + "gapId": "modifier:GREASE_PENCIL_SMOOTH", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00064-modifier-GREASE_PENCIL_SMOOTH.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00064.py -- tests/files/web/generated/M16-GAP-00064-modifier-GREASE_PENCIL_SMOOTH.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00064", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00064", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00065", + "gapId": "modifier:GREASE_PENCIL_SUBDIV", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00065-modifier-GREASE_PENCIL_SUBDIV.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00065.py -- tests/files/web/generated/M16-GAP-00065-modifier-GREASE_PENCIL_SUBDIV.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00065", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00065", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00066", + "gapId": "modifier:GREASE_PENCIL_TEXTURE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00066-modifier-GREASE_PENCIL_TEXTURE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00066.py -- tests/files/web/generated/M16-GAP-00066-modifier-GREASE_PENCIL_TEXTURE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00066", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00066", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00067", + "gapId": "modifier:GREASE_PENCIL_THICKNESS", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00067-modifier-GREASE_PENCIL_THICKNESS.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00067.py -- tests/files/web/generated/M16-GAP-00067-modifier-GREASE_PENCIL_THICKNESS.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00067", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00067", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00068", + "gapId": "modifier:GREASE_PENCIL_TIME", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00068-modifier-GREASE_PENCIL_TIME.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00068.py -- tests/files/web/generated/M16-GAP-00068-modifier-GREASE_PENCIL_TIME.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00068", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00068", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00069", + "gapId": "modifier:GREASE_PENCIL_TINT", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00069-modifier-GREASE_PENCIL_TINT.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00069.py -- tests/files/web/generated/M16-GAP-00069-modifier-GREASE_PENCIL_TINT.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00069", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00069", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00070", + "gapId": "modifier:GREASE_PENCIL_VERTEX_WEIGHT_ANGLE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00070-modifier-GREASE_PENCIL_VERTEX_WEIGHT_ANGLE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00070.py -- tests/files/web/generated/M16-GAP-00070-modifier-GREASE_PENCIL_VERTEX_WEIGHT_ANGLE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00070", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00070", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00071", + "gapId": "modifier:GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00071-modifier-GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00071.py -- tests/files/web/generated/M16-GAP-00071-modifier-GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00071", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00071", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00072", + "gapId": "modifier:HOOK", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00072-modifier-HOOK.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00072.py -- tests/files/web/generated/M16-GAP-00072-modifier-HOOK.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00072", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00072", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00073", + "gapId": "modifier:LAPLACIANDEFORM", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00073-modifier-LAPLACIANDEFORM.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00073.py -- tests/files/web/generated/M16-GAP-00073-modifier-LAPLACIANDEFORM.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00073", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00073", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00074", + "gapId": "modifier:LAPLACIANSMOOTH", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00074-modifier-LAPLACIANSMOOTH.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00074.py -- tests/files/web/generated/M16-GAP-00074-modifier-LAPLACIANSMOOTH.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00074", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00074", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00075", + "gapId": "modifier:LATTICE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00075-modifier-LATTICE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00075.py -- tests/files/web/generated/M16-GAP-00075-modifier-LATTICE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00075", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00075", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00076", + "gapId": "modifier:LINEART", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00076-modifier-LINEART.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00076.py -- tests/files/web/generated/M16-GAP-00076-modifier-LINEART.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00076", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00076", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00077", + "gapId": "modifier:MASK", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00077-modifier-MASK.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00077.py -- tests/files/web/generated/M16-GAP-00077-modifier-MASK.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00077", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00077", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00078", + "gapId": "modifier:MESH_CACHE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00078-modifier-MESH_CACHE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00078.py -- tests/files/web/generated/M16-GAP-00078-modifier-MESH_CACHE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00078", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00078", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00079", + "gapId": "modifier:MESH_DEFORM", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00079-modifier-MESH_DEFORM.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00079.py -- tests/files/web/generated/M16-GAP-00079-modifier-MESH_DEFORM.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00079", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00079", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00080", + "gapId": "modifier:MESH_SEQUENCE_CACHE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00080-modifier-MESH_SEQUENCE_CACHE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00080.py -- tests/files/web/generated/M16-GAP-00080-modifier-MESH_SEQUENCE_CACHE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00080", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00080", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00081", + "gapId": "modifier:MESH_TO_VOLUME", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00081-modifier-MESH_TO_VOLUME.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00081.py -- tests/files/web/generated/M16-GAP-00081-modifier-MESH_TO_VOLUME.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00081", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00081", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00082", + "gapId": "modifier:MIRROR", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00082-modifier-MIRROR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00082.py -- tests/files/web/generated/M16-GAP-00082-modifier-MIRROR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00082", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00082", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00083", + "gapId": "modifier:MULTIRES", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00083-modifier-MULTIRES.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00083.py -- tests/files/web/generated/M16-GAP-00083-modifier-MULTIRES.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00083", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00083", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00084", + "gapId": "modifier:NODES", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00084-modifier-NODES.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00084.py -- tests/files/web/generated/M16-GAP-00084-modifier-NODES.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00084", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00084", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00085", + "gapId": "modifier:NORMAL_EDIT", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00085-modifier-NORMAL_EDIT.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00085.py -- tests/files/web/generated/M16-GAP-00085-modifier-NORMAL_EDIT.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00085", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00085", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00086", + "gapId": "modifier:OCEAN", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00086-modifier-OCEAN.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00086.py -- tests/files/web/generated/M16-GAP-00086-modifier-OCEAN.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00086", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00086", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00087", + "gapId": "modifier:PARTICLE_INSTANCE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00087-modifier-PARTICLE_INSTANCE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00087.py -- tests/files/web/generated/M16-GAP-00087-modifier-PARTICLE_INSTANCE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00087", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00087", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00088", + "gapId": "modifier:PARTICLE_SYSTEM", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00088-modifier-PARTICLE_SYSTEM.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00088.py -- tests/files/web/generated/M16-GAP-00088-modifier-PARTICLE_SYSTEM.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00088", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00088", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00089", + "gapId": "modifier:REMESH", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00089-modifier-REMESH.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00089.py -- tests/files/web/generated/M16-GAP-00089-modifier-REMESH.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00089", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00089", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00090", + "gapId": "modifier:SCREW", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00090-modifier-SCREW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00090.py -- tests/files/web/generated/M16-GAP-00090-modifier-SCREW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00090", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00090", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00091", + "gapId": "modifier:SHRINKWRAP", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00091-modifier-SHRINKWRAP.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00091.py -- tests/files/web/generated/M16-GAP-00091-modifier-SHRINKWRAP.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00091", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00091", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00092", + "gapId": "modifier:SIMPLE_DEFORM", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00092-modifier-SIMPLE_DEFORM.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00092.py -- tests/files/web/generated/M16-GAP-00092-modifier-SIMPLE_DEFORM.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00092", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00092", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00093", + "gapId": "modifier:SKIN", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00093-modifier-SKIN.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00093.py -- tests/files/web/generated/M16-GAP-00093-modifier-SKIN.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00093", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00093", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00094", + "gapId": "modifier:SMOOTH", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00094-modifier-SMOOTH.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00094.py -- tests/files/web/generated/M16-GAP-00094-modifier-SMOOTH.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00094", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00094", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00095", + "gapId": "modifier:SOFT_BODY", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00095-modifier-SOFT_BODY.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00095.py -- tests/files/web/generated/M16-GAP-00095-modifier-SOFT_BODY.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00095", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00095", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00096", + "gapId": "modifier:SOLIDIFY", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00096-modifier-SOLIDIFY.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00096.py -- tests/files/web/generated/M16-GAP-00096-modifier-SOLIDIFY.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00096", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00096", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00097", + "gapId": "modifier:SUBSURF", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00097-modifier-SUBSURF.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00097.py -- tests/files/web/generated/M16-GAP-00097-modifier-SUBSURF.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00097", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00097", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00098", + "gapId": "modifier:SURFACE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00098-modifier-SURFACE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00098.py -- tests/files/web/generated/M16-GAP-00098-modifier-SURFACE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00098", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00098", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00099", + "gapId": "modifier:SURFACE_DEFORM", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00099-modifier-SURFACE_DEFORM.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00099.py -- tests/files/web/generated/M16-GAP-00099-modifier-SURFACE_DEFORM.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00099", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00099", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00100", + "gapId": "modifier:TRIANGULATE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00100-modifier-TRIANGULATE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00100.py -- tests/files/web/generated/M16-GAP-00100-modifier-TRIANGULATE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00100", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00100", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00101", + "gapId": "modifier:UV_PROJECT", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00101-modifier-UV_PROJECT.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00101.py -- tests/files/web/generated/M16-GAP-00101-modifier-UV_PROJECT.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00101", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00101", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00102", + "gapId": "modifier:UV_WARP", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00102-modifier-UV_WARP.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00102.py -- tests/files/web/generated/M16-GAP-00102-modifier-UV_WARP.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00102", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00102", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00103", + "gapId": "modifier:VERTEX_WEIGHT_EDIT", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00103-modifier-VERTEX_WEIGHT_EDIT.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00103.py -- tests/files/web/generated/M16-GAP-00103-modifier-VERTEX_WEIGHT_EDIT.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00103", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00103", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00104", + "gapId": "modifier:VERTEX_WEIGHT_MIX", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00104-modifier-VERTEX_WEIGHT_MIX.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00104.py -- tests/files/web/generated/M16-GAP-00104-modifier-VERTEX_WEIGHT_MIX.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00104", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00104", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00105", + "gapId": "modifier:VERTEX_WEIGHT_PROXIMITY", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00105-modifier-VERTEX_WEIGHT_PROXIMITY.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00105.py -- tests/files/web/generated/M16-GAP-00105-modifier-VERTEX_WEIGHT_PROXIMITY.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00105", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00105", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00106", + "gapId": "modifier:VOLUME_DISPLACE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00106-modifier-VOLUME_DISPLACE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00106.py -- tests/files/web/generated/M16-GAP-00106-modifier-VOLUME_DISPLACE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00106", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00106", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00107", + "gapId": "modifier:VOLUME_TO_MESH", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00107-modifier-VOLUME_TO_MESH.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00107.py -- tests/files/web/generated/M16-GAP-00107-modifier-VOLUME_TO_MESH.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00107", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00107", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00108", + "gapId": "modifier:WARP", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00108-modifier-WARP.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00108.py -- tests/files/web/generated/M16-GAP-00108-modifier-WARP.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00108", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00108", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00109", + "gapId": "modifier:WAVE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00109-modifier-WAVE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00109.py -- tests/files/web/generated/M16-GAP-00109-modifier-WAVE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00109", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00109", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00110", + "gapId": "modifier:WEIGHTED_NORMAL", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00110-modifier-WEIGHTED_NORMAL.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00110.py -- tests/files/web/generated/M16-GAP-00110-modifier-WEIGHTED_NORMAL.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00110", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00110", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00111", + "gapId": "modifier:WELD", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00111-modifier-WELD.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00111.py -- tests/files/web/generated/M16-GAP-00111-modifier-WELD.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00111", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00111", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00112", + "gapId": "modifier:WIREFRAME", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00112-modifier-WIREFRAME.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00112.py -- tests/files/web/generated/M16-GAP-00112-modifier-WIREFRAME.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00112", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00112", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00113", + "gapId": "operator:action.bake_keys", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00113-operator-action.bake_keys.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00113.py -- tests/files/web/generated/M16-GAP-00113-operator-action.bake_keys.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00113", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00113", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00114", + "gapId": "operator:action.clean", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00114-operator-action.clean.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00114.py -- tests/files/web/generated/M16-GAP-00114-operator-action.clean.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00114", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00114", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00115", + "gapId": "operator:action.clickselect", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00115-operator-action.clickselect.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00115.py -- tests/files/web/generated/M16-GAP-00115-operator-action.clickselect.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00115", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00115", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00116", + "gapId": "operator:action.copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00116-operator-action.copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00116.py -- tests/files/web/generated/M16-GAP-00116-operator-action.copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00116", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00116", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00117", + "gapId": "operator:action.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00117-operator-action.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00117.py -- tests/files/web/generated/M16-GAP-00117-operator-action.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00117", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00117", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00118", + "gapId": "operator:action.duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00118-operator-action.duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00118.py -- tests/files/web/generated/M16-GAP-00118-operator-action.duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00118", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00118", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00119", + "gapId": "operator:action.duplicate_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00119-operator-action.duplicate_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00119.py -- tests/files/web/generated/M16-GAP-00119-operator-action.duplicate_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00119", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00119", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00120", + "gapId": "operator:action.easing_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00120-operator-action.easing_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00120.py -- tests/files/web/generated/M16-GAP-00120-operator-action.easing_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00120", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00120", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00121", + "gapId": "operator:action.extrapolation_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00121-operator-action.extrapolation_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00121.py -- tests/files/web/generated/M16-GAP-00121-operator-action.extrapolation_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00121", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00121", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00122", + "gapId": "operator:action.frame_jump", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00122-operator-action.frame_jump.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00122.py -- tests/files/web/generated/M16-GAP-00122-operator-action.frame_jump.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00122", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00122", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00123", + "gapId": "operator:action.handle_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00123-operator-action.handle_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00123.py -- tests/files/web/generated/M16-GAP-00123-operator-action.handle_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00123", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00123", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00124", + "gapId": "operator:action.interpolation_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00124-operator-action.interpolation_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00124.py -- tests/files/web/generated/M16-GAP-00124-operator-action.interpolation_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00124", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00124", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00125", + "gapId": "operator:action.keyframe_insert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00125-operator-action.keyframe_insert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00125.py -- tests/files/web/generated/M16-GAP-00125-operator-action.keyframe_insert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00125", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00125", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00126", + "gapId": "operator:action.keyframe_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00126-operator-action.keyframe_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00126.py -- tests/files/web/generated/M16-GAP-00126-operator-action.keyframe_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00126", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00126", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00127", + "gapId": "operator:action.markers_make_local", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00127-operator-action.markers_make_local.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00127.py -- tests/files/web/generated/M16-GAP-00127-operator-action.markers_make_local.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00127", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00127", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00128", + "gapId": "operator:action.mirror", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00128-operator-action.mirror.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00128.py -- tests/files/web/generated/M16-GAP-00128-operator-action.mirror.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00128", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00128", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00129", + "gapId": "operator:action.new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00129-operator-action.new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00129.py -- tests/files/web/generated/M16-GAP-00129-operator-action.new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00129", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00129", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00130", + "gapId": "operator:action.paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00130-operator-action.paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00130.py -- tests/files/web/generated/M16-GAP-00130-operator-action.paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00130", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00130", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00131", + "gapId": "operator:action.previewrange_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00131-operator-action.previewrange_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00131.py -- tests/files/web/generated/M16-GAP-00131-operator-action.previewrange_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00131", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00131", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00132", + "gapId": "operator:action.push_down", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00132-operator-action.push_down.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00132.py -- tests/files/web/generated/M16-GAP-00132-operator-action.push_down.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00132", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00132", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00133", + "gapId": "operator:action.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00133-operator-action.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00133.py -- tests/files/web/generated/M16-GAP-00133-operator-action.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00133", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00133", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00134", + "gapId": "operator:action.select_box", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00134-operator-action.select_box.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00134.py -- tests/files/web/generated/M16-GAP-00134-operator-action.select_box.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00134", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00134", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00135", + "gapId": "operator:action.select_by_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00135-operator-action.select_by_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00135.py -- tests/files/web/generated/M16-GAP-00135-operator-action.select_by_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00135", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00135", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00136", + "gapId": "operator:action.select_circle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00136-operator-action.select_circle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00136.py -- tests/files/web/generated/M16-GAP-00136-operator-action.select_circle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00136", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00136", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00137", + "gapId": "operator:action.select_column", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00137-operator-action.select_column.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00137.py -- tests/files/web/generated/M16-GAP-00137-operator-action.select_column.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00137", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00137", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00138", + "gapId": "operator:action.select_lasso", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00138-operator-action.select_lasso.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00138.py -- tests/files/web/generated/M16-GAP-00138-operator-action.select_lasso.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00138", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00138", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00139", + "gapId": "operator:action.select_leftright", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00139-operator-action.select_leftright.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00139.py -- tests/files/web/generated/M16-GAP-00139-operator-action.select_leftright.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00139", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00139", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00140", + "gapId": "operator:action.select_less", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00140-operator-action.select_less.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00140.py -- tests/files/web/generated/M16-GAP-00140-operator-action.select_less.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00140", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00140", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00141", + "gapId": "operator:action.select_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00141-operator-action.select_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00141.py -- tests/files/web/generated/M16-GAP-00141-operator-action.select_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00141", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00141", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00142", + "gapId": "operator:action.select_more", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00142-operator-action.select_more.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00142.py -- tests/files/web/generated/M16-GAP-00142-operator-action.select_more.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00142", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00142", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00143", + "gapId": "operator:action.snap", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00143-operator-action.snap.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00143.py -- tests/files/web/generated/M16-GAP-00143-operator-action.snap.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00143", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00143", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00144", + "gapId": "operator:action.stash", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00144-operator-action.stash.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00144.py -- tests/files/web/generated/M16-GAP-00144-operator-action.stash.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00144", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00144", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00145", + "gapId": "operator:action.stash_and_create", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00145-operator-action.stash_and_create.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00145.py -- tests/files/web/generated/M16-GAP-00145-operator-action.stash_and_create.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00145", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00145", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00146", + "gapId": "operator:action.unlink", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00146-operator-action.unlink.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00146.py -- tests/files/web/generated/M16-GAP-00146-operator-action.unlink.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00146", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00146", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00147", + "gapId": "operator:action.view_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00147-operator-action.view_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00147.py -- tests/files/web/generated/M16-GAP-00147-operator-action.view_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00147", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00147", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00148", + "gapId": "operator:action.view_frame", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00148-operator-action.view_frame.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00148.py -- tests/files/web/generated/M16-GAP-00148-operator-action.view_frame.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00148", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00148", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00149", + "gapId": "operator:action.view_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00149-operator-action.view_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00149.py -- tests/files/web/generated/M16-GAP-00149-operator-action.view_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00149", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00149", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00150", + "gapId": "operator:anim.change_frame", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00150-operator-anim.change_frame.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00150.py -- tests/files/web/generated/M16-GAP-00150-operator-anim.change_frame.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00150", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00150", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00151", + "gapId": "operator:anim.channel_select_keys", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00151-operator-anim.channel_select_keys.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00151.py -- tests/files/web/generated/M16-GAP-00151-operator-anim.channel_select_keys.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00151", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00151", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00152", + "gapId": "operator:anim.channel_view_pick", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00152-operator-anim.channel_view_pick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00152.py -- tests/files/web/generated/M16-GAP-00152-operator-anim.channel_view_pick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00152", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00152", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00153", + "gapId": "operator:anim.channels_bake", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00153-operator-anim.channels_bake.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00153.py -- tests/files/web/generated/M16-GAP-00153-operator-anim.channels_bake.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00153", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00153", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00154", + "gapId": "operator:anim.channels_clean_empty", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00154-operator-anim.channels_clean_empty.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00154.py -- tests/files/web/generated/M16-GAP-00154-operator-anim.channels_clean_empty.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00154", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00154", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00155", + "gapId": "operator:anim.channels_click", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00155-operator-anim.channels_click.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00155.py -- tests/files/web/generated/M16-GAP-00155-operator-anim.channels_click.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00155", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00155", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00156", + "gapId": "operator:anim.channels_collapse", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00156-operator-anim.channels_collapse.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00156.py -- tests/files/web/generated/M16-GAP-00156-operator-anim.channels_collapse.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00156", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00156", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00157", + "gapId": "operator:anim.channels_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00157-operator-anim.channels_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00157.py -- tests/files/web/generated/M16-GAP-00157-operator-anim.channels_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00157", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00157", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00158", + "gapId": "operator:anim.channels_editable_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00158-operator-anim.channels_editable_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00158.py -- tests/files/web/generated/M16-GAP-00158-operator-anim.channels_editable_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00158", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00158", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00159", + "gapId": "operator:anim.channels_expand", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00159-operator-anim.channels_expand.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00159.py -- tests/files/web/generated/M16-GAP-00159-operator-anim.channels_expand.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00159", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00159", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00160", + "gapId": "operator:anim.channels_fcurves_enable", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00160-operator-anim.channels_fcurves_enable.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00160.py -- tests/files/web/generated/M16-GAP-00160-operator-anim.channels_fcurves_enable.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00160", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00160", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00161", + "gapId": "operator:anim.channels_group", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00161-operator-anim.channels_group.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00161.py -- tests/files/web/generated/M16-GAP-00161-operator-anim.channels_group.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00161", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00161", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00162", + "gapId": "operator:anim.channels_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00162-operator-anim.channels_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00162.py -- tests/files/web/generated/M16-GAP-00162-operator-anim.channels_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00162", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00162", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00163", + "gapId": "operator:anim.channels_rename", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00163-operator-anim.channels_rename.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00163.py -- tests/files/web/generated/M16-GAP-00163-operator-anim.channels_rename.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00163", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00163", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00164", + "gapId": "operator:anim.channels_select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00164-operator-anim.channels_select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00164.py -- tests/files/web/generated/M16-GAP-00164-operator-anim.channels_select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00164", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00164", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00165", + "gapId": "operator:anim.channels_select_box", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00165-operator-anim.channels_select_box.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00165.py -- tests/files/web/generated/M16-GAP-00165-operator-anim.channels_select_box.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00165", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00165", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00166", + "gapId": "operator:anim.channels_select_filter", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00166-operator-anim.channels_select_filter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00166.py -- tests/files/web/generated/M16-GAP-00166-operator-anim.channels_select_filter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00166", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00166", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00167", + "gapId": "operator:anim.channels_setting_disable", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00167-operator-anim.channels_setting_disable.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00167.py -- tests/files/web/generated/M16-GAP-00167-operator-anim.channels_setting_disable.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00167", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00167", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00168", + "gapId": "operator:anim.channels_setting_enable", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00168-operator-anim.channels_setting_enable.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00168.py -- tests/files/web/generated/M16-GAP-00168-operator-anim.channels_setting_enable.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00168", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00168", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00169", + "gapId": "operator:anim.channels_setting_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00169-operator-anim.channels_setting_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00169.py -- tests/files/web/generated/M16-GAP-00169-operator-anim.channels_setting_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00169", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00169", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00170", + "gapId": "operator:anim.channels_ungroup", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00170-operator-anim.channels_ungroup.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00170.py -- tests/files/web/generated/M16-GAP-00170-operator-anim.channels_ungroup.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00170", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00170", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00171", + "gapId": "operator:anim.channels_view_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00171-operator-anim.channels_view_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00171.py -- tests/files/web/generated/M16-GAP-00171-operator-anim.channels_view_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00171", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00171", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00172", + "gapId": "operator:anim.clear_useless_actions", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00172-operator-anim.clear_useless_actions.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00172.py -- tests/files/web/generated/M16-GAP-00172-operator-anim.clear_useless_actions.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00172", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00172", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00173", + "gapId": "operator:anim.copy_driver_button", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00173-operator-anim.copy_driver_button.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00173.py -- tests/files/web/generated/M16-GAP-00173-operator-anim.copy_driver_button.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00173", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00173", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00174", + "gapId": "operator:anim.driver_button_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00174-operator-anim.driver_button_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00174.py -- tests/files/web/generated/M16-GAP-00174-operator-anim.driver_button_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00174", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00174", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00175", + "gapId": "operator:anim.driver_button_edit", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00175-operator-anim.driver_button_edit.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00175.py -- tests/files/web/generated/M16-GAP-00175-operator-anim.driver_button_edit.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00175", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00175", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00176", + "gapId": "operator:anim.driver_button_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00176-operator-anim.driver_button_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00176.py -- tests/files/web/generated/M16-GAP-00176-operator-anim.driver_button_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00176", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00176", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00177", + "gapId": "operator:anim.end_frame_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00177-operator-anim.end_frame_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00177.py -- tests/files/web/generated/M16-GAP-00177-operator-anim.end_frame_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00177", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00177", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00178", + "gapId": "operator:anim.keyframe_clear_button", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00178-operator-anim.keyframe_clear_button.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00178.py -- tests/files/web/generated/M16-GAP-00178-operator-anim.keyframe_clear_button.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00178", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00178", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00179", + "gapId": "operator:anim.keyframe_clear_v3d", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00179-operator-anim.keyframe_clear_v3d.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00179.py -- tests/files/web/generated/M16-GAP-00179-operator-anim.keyframe_clear_v3d.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00179", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00179", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00180", + "gapId": "operator:anim.keyframe_clear_vse", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00180-operator-anim.keyframe_clear_vse.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00180.py -- tests/files/web/generated/M16-GAP-00180-operator-anim.keyframe_clear_vse.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00180", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00180", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00181", + "gapId": "operator:anim.keyframe_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00181-operator-anim.keyframe_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00181.py -- tests/files/web/generated/M16-GAP-00181-operator-anim.keyframe_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00181", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00181", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00182", + "gapId": "operator:anim.keyframe_delete_button", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00182-operator-anim.keyframe_delete_button.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00182.py -- tests/files/web/generated/M16-GAP-00182-operator-anim.keyframe_delete_button.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00182", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00182", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00183", + "gapId": "operator:anim.keyframe_delete_by_name", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00183-operator-anim.keyframe_delete_by_name.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00183.py -- tests/files/web/generated/M16-GAP-00183-operator-anim.keyframe_delete_by_name.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00183", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00183", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00184", + "gapId": "operator:anim.keyframe_delete_v3d", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00184-operator-anim.keyframe_delete_v3d.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00184.py -- tests/files/web/generated/M16-GAP-00184-operator-anim.keyframe_delete_v3d.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00184", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00184", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00185", + "gapId": "operator:anim.keyframe_delete_vse", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00185-operator-anim.keyframe_delete_vse.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00185.py -- tests/files/web/generated/M16-GAP-00185-operator-anim.keyframe_delete_vse.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00185", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00185", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00186", + "gapId": "operator:anim.keyframe_insert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00186-operator-anim.keyframe_insert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00186.py -- tests/files/web/generated/M16-GAP-00186-operator-anim.keyframe_insert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00186", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00186", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00187", + "gapId": "operator:anim.keyframe_insert_button", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00187-operator-anim.keyframe_insert_button.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00187.py -- tests/files/web/generated/M16-GAP-00187-operator-anim.keyframe_insert_button.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00187", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00187", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00188", + "gapId": "operator:anim.keyframe_insert_by_name", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00188-operator-anim.keyframe_insert_by_name.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00188.py -- tests/files/web/generated/M16-GAP-00188-operator-anim.keyframe_insert_by_name.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00188", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00188", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00189", + "gapId": "operator:anim.keyframe_insert_menu", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00189-operator-anim.keyframe_insert_menu.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00189.py -- tests/files/web/generated/M16-GAP-00189-operator-anim.keyframe_insert_menu.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00189", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00189", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00190", + "gapId": "operator:anim.keying_set_active_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00190-operator-anim.keying_set_active_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00190.py -- tests/files/web/generated/M16-GAP-00190-operator-anim.keying_set_active_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00190", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00190", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00191", + "gapId": "operator:anim.keying_set_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00191-operator-anim.keying_set_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00191.py -- tests/files/web/generated/M16-GAP-00191-operator-anim.keying_set_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00191", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00191", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00192", + "gapId": "operator:anim.keying_set_export", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00192-operator-anim.keying_set_export.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00192.py -- tests/files/web/generated/M16-GAP-00192-operator-anim.keying_set_export.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00192", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00192", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00193", + "gapId": "operator:anim.keying_set_path_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00193-operator-anim.keying_set_path_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00193.py -- tests/files/web/generated/M16-GAP-00193-operator-anim.keying_set_path_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00193", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00193", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00194", + "gapId": "operator:anim.keying_set_path_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00194-operator-anim.keying_set_path_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00194.py -- tests/files/web/generated/M16-GAP-00194-operator-anim.keying_set_path_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00194", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00194", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00195", + "gapId": "operator:anim.keying_set_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00195-operator-anim.keying_set_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00195.py -- tests/files/web/generated/M16-GAP-00195-operator-anim.keying_set_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00195", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00195", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00196", + "gapId": "operator:anim.keyingset_button_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00196-operator-anim.keyingset_button_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00196.py -- tests/files/web/generated/M16-GAP-00196-operator-anim.keyingset_button_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00196", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00196", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00197", + "gapId": "operator:anim.keyingset_button_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00197-operator-anim.keyingset_button_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00197.py -- tests/files/web/generated/M16-GAP-00197-operator-anim.keyingset_button_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00197", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00197", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00198", + "gapId": "operator:anim.merge_animation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00198-operator-anim.merge_animation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00198.py -- tests/files/web/generated/M16-GAP-00198-operator-anim.merge_animation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00198", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00198", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00199", + "gapId": "operator:anim.paste_driver_button", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00199-operator-anim.paste_driver_button.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00199.py -- tests/files/web/generated/M16-GAP-00199-operator-anim.paste_driver_button.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00199", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00199", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00200", + "gapId": "operator:anim.previewrange_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00200-operator-anim.previewrange_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00200.py -- tests/files/web/generated/M16-GAP-00200-operator-anim.previewrange_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00200", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00200", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00201", + "gapId": "operator:anim.previewrange_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00201-operator-anim.previewrange_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00201.py -- tests/files/web/generated/M16-GAP-00201-operator-anim.previewrange_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00201", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00201", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00202", + "gapId": "operator:anim.replace_action", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00202-operator-anim.replace_action.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00202.py -- tests/files/web/generated/M16-GAP-00202-operator-anim.replace_action.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00202", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00202", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00203", + "gapId": "operator:anim.replace_action_new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00203-operator-anim.replace_action_new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00203.py -- tests/files/web/generated/M16-GAP-00203-operator-anim.replace_action_new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00203", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00203", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00204", + "gapId": "operator:anim.scene_range_frame", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00204-operator-anim.scene_range_frame.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00204.py -- tests/files/web/generated/M16-GAP-00204-operator-anim.scene_range_frame.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00204", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00204", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00205", + "gapId": "operator:anim.separate_slots", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00205-operator-anim.separate_slots.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00205.py -- tests/files/web/generated/M16-GAP-00205-operator-anim.separate_slots.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00205", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00205", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00206", + "gapId": "operator:anim.slot_channels_move_to_new_action", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00206-operator-anim.slot_channels_move_to_new_action.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00206.py -- tests/files/web/generated/M16-GAP-00206-operator-anim.slot_channels_move_to_new_action.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00206", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00206", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00207", + "gapId": "operator:anim.slot_new_for_id", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00207-operator-anim.slot_new_for_id.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00207.py -- tests/files/web/generated/M16-GAP-00207-operator-anim.slot_new_for_id.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00207", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00207", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00208", + "gapId": "operator:anim.slot_unassign_from_constraint", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00208-operator-anim.slot_unassign_from_constraint.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00208.py -- tests/files/web/generated/M16-GAP-00208-operator-anim.slot_unassign_from_constraint.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00208", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00208", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00209", + "gapId": "operator:anim.slot_unassign_from_id", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00209-operator-anim.slot_unassign_from_id.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00209.py -- tests/files/web/generated/M16-GAP-00209-operator-anim.slot_unassign_from_id.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00209", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00209", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00210", + "gapId": "operator:anim.slot_unassign_from_nla_strip", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00210-operator-anim.slot_unassign_from_nla_strip.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00210.py -- tests/files/web/generated/M16-GAP-00210-operator-anim.slot_unassign_from_nla_strip.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00210", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00210", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00211", + "gapId": "operator:anim.start_frame_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00211-operator-anim.start_frame_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00211.py -- tests/files/web/generated/M16-GAP-00211-operator-anim.start_frame_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00211", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00211", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00212", + "gapId": "operator:anim.update_animated_transform_constraints", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00212-operator-anim.update_animated_transform_constraints.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00212.py -- tests/files/web/generated/M16-GAP-00212-operator-anim.update_animated_transform_constraints.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00212", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00212", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00213", + "gapId": "operator:anim.version_bone_hide_property", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00213-operator-anim.version_bone_hide_property.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00213.py -- tests/files/web/generated/M16-GAP-00213-operator-anim.version_bone_hide_property.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00213", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00213", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00214", + "gapId": "operator:anim.view_curve_in_graph_editor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00214-operator-anim.view_curve_in_graph_editor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00214.py -- tests/files/web/generated/M16-GAP-00214-operator-anim.view_curve_in_graph_editor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00214", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00214", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00215", + "gapId": "operator:armature.align", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00215-operator-armature.align.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00215.py -- tests/files/web/generated/M16-GAP-00215-operator-armature.align.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00215", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00215", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00216", + "gapId": "operator:armature.assign_to_collection", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00216-operator-armature.assign_to_collection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00216.py -- tests/files/web/generated/M16-GAP-00216-operator-armature.assign_to_collection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00216", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00216", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00217", + "gapId": "operator:armature.autoside_names", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00217-operator-armature.autoside_names.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00217.py -- tests/files/web/generated/M16-GAP-00217-operator-armature.autoside_names.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00217", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00217", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00218", + "gapId": "operator:armature.bone_primitive_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00218-operator-armature.bone_primitive_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00218.py -- tests/files/web/generated/M16-GAP-00218-operator-armature.bone_primitive_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00218", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00218", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00219", + "gapId": "operator:armature.calculate_roll", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00219-operator-armature.calculate_roll.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00219.py -- tests/files/web/generated/M16-GAP-00219-operator-armature.calculate_roll.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00219", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00219", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00220", + "gapId": "operator:armature.click_extrude", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00220-operator-armature.click_extrude.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00220.py -- tests/files/web/generated/M16-GAP-00220-operator-armature.click_extrude.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00220", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00220", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00221", + "gapId": "operator:armature.collection_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00221-operator-armature.collection_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00221.py -- tests/files/web/generated/M16-GAP-00221-operator-armature.collection_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00221", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00221", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00222", + "gapId": "operator:armature.collection_assign", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00222-operator-armature.collection_assign.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00222.py -- tests/files/web/generated/M16-GAP-00222-operator-armature.collection_assign.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00222", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00222", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00223", + "gapId": "operator:armature.collection_create_and_assign", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00223-operator-armature.collection_create_and_assign.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00223.py -- tests/files/web/generated/M16-GAP-00223-operator-armature.collection_create_and_assign.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00223", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00223", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00224", + "gapId": "operator:armature.collection_deselect", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00224-operator-armature.collection_deselect.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00224.py -- tests/files/web/generated/M16-GAP-00224-operator-armature.collection_deselect.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00224", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00224", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00225", + "gapId": "operator:armature.collection_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00225-operator-armature.collection_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00225.py -- tests/files/web/generated/M16-GAP-00225-operator-armature.collection_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00225", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00225", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00226", + "gapId": "operator:armature.collection_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00226-operator-armature.collection_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00226.py -- tests/files/web/generated/M16-GAP-00226-operator-armature.collection_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00226", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00226", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00227", + "gapId": "operator:armature.collection_remove_unused", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00227-operator-armature.collection_remove_unused.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00227.py -- tests/files/web/generated/M16-GAP-00227-operator-armature.collection_remove_unused.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00227", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00227", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00228", + "gapId": "operator:armature.collection_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00228-operator-armature.collection_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00228.py -- tests/files/web/generated/M16-GAP-00228-operator-armature.collection_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00228", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00228", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00229", + "gapId": "operator:armature.collection_show_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00229-operator-armature.collection_show_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00229.py -- tests/files/web/generated/M16-GAP-00229-operator-armature.collection_show_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00229", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00229", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00230", + "gapId": "operator:armature.collection_unassign", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00230-operator-armature.collection_unassign.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00230.py -- tests/files/web/generated/M16-GAP-00230-operator-armature.collection_unassign.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00230", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00230", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00231", + "gapId": "operator:armature.collection_unassign_named", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00231-operator-armature.collection_unassign_named.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00231.py -- tests/files/web/generated/M16-GAP-00231-operator-armature.collection_unassign_named.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00231", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00231", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00232", + "gapId": "operator:armature.collection_unsolo_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00232-operator-armature.collection_unsolo_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00232.py -- tests/files/web/generated/M16-GAP-00232-operator-armature.collection_unsolo_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00232", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00232", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00233", + "gapId": "operator:armature.copy_bone_color_to_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00233-operator-armature.copy_bone_color_to_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00233.py -- tests/files/web/generated/M16-GAP-00233-operator-armature.copy_bone_color_to_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00233", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00233", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00234", + "gapId": "operator:armature.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00234-operator-armature.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00234.py -- tests/files/web/generated/M16-GAP-00234-operator-armature.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00234", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00234", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00235", + "gapId": "operator:armature.dissolve", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00235-operator-armature.dissolve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00235.py -- tests/files/web/generated/M16-GAP-00235-operator-armature.dissolve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00235", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00235", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00236", + "gapId": "operator:armature.duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00236-operator-armature.duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00236.py -- tests/files/web/generated/M16-GAP-00236-operator-armature.duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00236", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00236", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00237", + "gapId": "operator:armature.duplicate_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00237-operator-armature.duplicate_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00237.py -- tests/files/web/generated/M16-GAP-00237-operator-armature.duplicate_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00237", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00237", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00238", + "gapId": "operator:armature.duplicate_rename", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00238-operator-armature.duplicate_rename.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00238.py -- tests/files/web/generated/M16-GAP-00238-operator-armature.duplicate_rename.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00238", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00238", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00239", + "gapId": "operator:armature.extrude", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00239-operator-armature.extrude.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00239.py -- tests/files/web/generated/M16-GAP-00239-operator-armature.extrude.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00239", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00239", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00240", + "gapId": "operator:armature.extrude_forked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00240-operator-armature.extrude_forked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00240.py -- tests/files/web/generated/M16-GAP-00240-operator-armature.extrude_forked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00240", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00240", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00241", + "gapId": "operator:armature.extrude_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00241-operator-armature.extrude_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00241.py -- tests/files/web/generated/M16-GAP-00241-operator-armature.extrude_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00241", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00241", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00242", + "gapId": "operator:armature.fill", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00242-operator-armature.fill.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00242.py -- tests/files/web/generated/M16-GAP-00242-operator-armature.fill.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00242", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00242", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00243", + "gapId": "operator:armature.flip_names", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00243-operator-armature.flip_names.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00243.py -- tests/files/web/generated/M16-GAP-00243-operator-armature.flip_names.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00243", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00243", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00244", + "gapId": "operator:armature.hide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00244-operator-armature.hide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00244.py -- tests/files/web/generated/M16-GAP-00244-operator-armature.hide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00244", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00244", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00245", + "gapId": "operator:armature.move_to_collection", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00245-operator-armature.move_to_collection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00245.py -- tests/files/web/generated/M16-GAP-00245-operator-armature.move_to_collection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00245", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00245", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00246", + "gapId": "operator:armature.parent_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00246-operator-armature.parent_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00246.py -- tests/files/web/generated/M16-GAP-00246-operator-armature.parent_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00246", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00246", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00247", + "gapId": "operator:armature.parent_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00247-operator-armature.parent_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00247.py -- tests/files/web/generated/M16-GAP-00247-operator-armature.parent_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00247", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00247", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00248", + "gapId": "operator:armature.reveal", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00248-operator-armature.reveal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00248.py -- tests/files/web/generated/M16-GAP-00248-operator-armature.reveal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00248", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00248", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00249", + "gapId": "operator:armature.roll_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00249-operator-armature.roll_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00249.py -- tests/files/web/generated/M16-GAP-00249-operator-armature.roll_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00249", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00249", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00250", + "gapId": "operator:armature.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00250-operator-armature.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00250.py -- tests/files/web/generated/M16-GAP-00250-operator-armature.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00250", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00250", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00251", + "gapId": "operator:armature.select_hierarchy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00251-operator-armature.select_hierarchy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00251.py -- tests/files/web/generated/M16-GAP-00251-operator-armature.select_hierarchy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00251", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00251", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00252", + "gapId": "operator:armature.select_less", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00252-operator-armature.select_less.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00252.py -- tests/files/web/generated/M16-GAP-00252-operator-armature.select_less.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00252", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00252", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00253", + "gapId": "operator:armature.select_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00253-operator-armature.select_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00253.py -- tests/files/web/generated/M16-GAP-00253-operator-armature.select_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00253", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00253", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00254", + "gapId": "operator:armature.select_linked_pick", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00254-operator-armature.select_linked_pick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00254.py -- tests/files/web/generated/M16-GAP-00254-operator-armature.select_linked_pick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00254", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00254", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00255", + "gapId": "operator:armature.select_mirror", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00255-operator-armature.select_mirror.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00255.py -- tests/files/web/generated/M16-GAP-00255-operator-armature.select_mirror.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00255", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00255", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00256", + "gapId": "operator:armature.select_more", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00256-operator-armature.select_more.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00256.py -- tests/files/web/generated/M16-GAP-00256-operator-armature.select_more.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00256", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00256", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00257", + "gapId": "operator:armature.select_similar", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00257-operator-armature.select_similar.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00257.py -- tests/files/web/generated/M16-GAP-00257-operator-armature.select_similar.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00257", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00257", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00258", + "gapId": "operator:armature.separate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00258-operator-armature.separate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00258.py -- tests/files/web/generated/M16-GAP-00258-operator-armature.separate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00258", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00258", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00259", + "gapId": "operator:armature.shortest_path_pick", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00259-operator-armature.shortest_path_pick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00259.py -- tests/files/web/generated/M16-GAP-00259-operator-armature.shortest_path_pick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00259", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00259", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00260", + "gapId": "operator:armature.split", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00260-operator-armature.split.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00260.py -- tests/files/web/generated/M16-GAP-00260-operator-armature.split.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00260", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00260", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00261", + "gapId": "operator:armature.subdivide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00261-operator-armature.subdivide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00261.py -- tests/files/web/generated/M16-GAP-00261-operator-armature.subdivide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00261", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00261", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00262", + "gapId": "operator:armature.switch_direction", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00262-operator-armature.switch_direction.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00262.py -- tests/files/web/generated/M16-GAP-00262-operator-armature.switch_direction.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00262", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00262", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00263", + "gapId": "operator:armature.symmetrize", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00263-operator-armature.symmetrize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00263.py -- tests/files/web/generated/M16-GAP-00263-operator-armature.symmetrize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00263", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00263", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00264", + "gapId": "operator:asset.asset_download", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00264-operator-asset.asset_download.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00264.py -- tests/files/web/generated/M16-GAP-00264-operator-asset.asset_download.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00264", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00264", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00265", + "gapId": "operator:asset.assets_download", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00265-operator-asset.assets_download.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00265.py -- tests/files/web/generated/M16-GAP-00265-operator-asset.assets_download.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00265", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00265", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00266", + "gapId": "operator:asset.assign_action", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00266-operator-asset.assign_action.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00266.py -- tests/files/web/generated/M16-GAP-00266-operator-asset.assign_action.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00266", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00266", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00267", + "gapId": "operator:asset.browse_containing_blend_file", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00267-operator-asset.browse_containing_blend_file.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00267.py -- tests/files/web/generated/M16-GAP-00267-operator-asset.browse_containing_blend_file.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00267", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00267", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00268", + "gapId": "operator:asset.bundle_install", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00268-operator-asset.bundle_install.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00268.py -- tests/files/web/generated/M16-GAP-00268-operator-asset.bundle_install.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00268", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00268", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00269", + "gapId": "operator:asset.catalog_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00269-operator-asset.catalog_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00269.py -- tests/files/web/generated/M16-GAP-00269-operator-asset.catalog_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00269", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00269", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00270", + "gapId": "operator:asset.catalog_new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00270-operator-asset.catalog_new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00270.py -- tests/files/web/generated/M16-GAP-00270-operator-asset.catalog_new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00270", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00270", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00271", + "gapId": "operator:asset.catalog_redo", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00271-operator-asset.catalog_redo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00271.py -- tests/files/web/generated/M16-GAP-00271-operator-asset.catalog_redo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00271", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00271", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00272", + "gapId": "operator:asset.catalog_undo", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00272-operator-asset.catalog_undo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00272.py -- tests/files/web/generated/M16-GAP-00272-operator-asset.catalog_undo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00272", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00272", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00273", + "gapId": "operator:asset.catalog_undo_push", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00273-operator-asset.catalog_undo_push.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00273.py -- tests/files/web/generated/M16-GAP-00273-operator-asset.catalog_undo_push.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00273", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00273", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00274", + "gapId": "operator:asset.catalogs_save", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "active", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00274-operator-asset.catalogs_save.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00274.py -- tests/files/web/generated/M16-GAP-00274-operator-asset.catalogs_save.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00274", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00274", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00275", + "gapId": "operator:asset.clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00275-operator-asset.clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00275.py -- tests/files/web/generated/M16-GAP-00275-operator-asset.clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00275", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00275", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00276", + "gapId": "operator:asset.clear_single", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00276-operator-asset.clear_single.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00276.py -- tests/files/web/generated/M16-GAP-00276-operator-asset.clear_single.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00276", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00276", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00277", + "gapId": "operator:asset.library_refresh", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00277-operator-asset.library_refresh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00277.py -- tests/files/web/generated/M16-GAP-00277-operator-asset.library_refresh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00277", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00277", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00278", + "gapId": "operator:asset.library_reload_listing", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00278-operator-asset.library_reload_listing.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00278.py -- tests/files/web/generated/M16-GAP-00278-operator-asset.library_reload_listing.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00278", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00278", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00279", + "gapId": "operator:asset.mark", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00279-operator-asset.mark.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00279.py -- tests/files/web/generated/M16-GAP-00279-operator-asset.mark.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00279", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00279", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00280", + "gapId": "operator:asset.mark_single", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00280-operator-asset.mark_single.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00280.py -- tests/files/web/generated/M16-GAP-00280-operator-asset.mark_single.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00280", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00280", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00281", + "gapId": "operator:asset.open_containing_blend_file", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00281-operator-asset.open_containing_blend_file.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00281.py -- tests/files/web/generated/M16-GAP-00281-operator-asset.open_containing_blend_file.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00281", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00281", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00282", + "gapId": "operator:asset.screenshot_preview", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00282-operator-asset.screenshot_preview.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00282.py -- tests/files/web/generated/M16-GAP-00282-operator-asset.screenshot_preview.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00282", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00282", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00283", + "gapId": "operator:asset.tag_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00283-operator-asset.tag_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00283.py -- tests/files/web/generated/M16-GAP-00283-operator-asset.tag_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00283", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00283", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00284", + "gapId": "operator:asset.tag_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00284-operator-asset.tag_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00284.py -- tests/files/web/generated/M16-GAP-00284-operator-asset.tag_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00284", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00284", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00285", + "gapId": "operator:boid.rule_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00285-operator-boid.rule_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00285.py -- tests/files/web/generated/M16-GAP-00285-operator-boid.rule_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00285", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00285", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00286", + "gapId": "operator:boid.rule_del", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00286-operator-boid.rule_del.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00286.py -- tests/files/web/generated/M16-GAP-00286-operator-boid.rule_del.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00286", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00286", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00287", + "gapId": "operator:boid.rule_move_down", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00287-operator-boid.rule_move_down.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00287.py -- tests/files/web/generated/M16-GAP-00287-operator-boid.rule_move_down.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00287", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00287", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00288", + "gapId": "operator:boid.rule_move_up", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00288-operator-boid.rule_move_up.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00288.py -- tests/files/web/generated/M16-GAP-00288-operator-boid.rule_move_up.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00288", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00288", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00289", + "gapId": "operator:boid.state_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00289-operator-boid.state_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00289.py -- tests/files/web/generated/M16-GAP-00289-operator-boid.state_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00289", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00289", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00290", + "gapId": "operator:boid.state_del", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00290-operator-boid.state_del.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00290.py -- tests/files/web/generated/M16-GAP-00290-operator-boid.state_del.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00290", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00290", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00291", + "gapId": "operator:boid.state_move_down", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00291-operator-boid.state_move_down.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00291.py -- tests/files/web/generated/M16-GAP-00291-operator-boid.state_move_down.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00291", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00291", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00292", + "gapId": "operator:boid.state_move_up", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00292-operator-boid.state_move_up.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00292.py -- tests/files/web/generated/M16-GAP-00292-operator-boid.state_move_up.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00292", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00292", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00293", + "gapId": "operator:brush.asset_activate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00293-operator-brush.asset_activate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00293.py -- tests/files/web/generated/M16-GAP-00293-operator-brush.asset_activate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00293", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00293", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00294", + "gapId": "operator:brush.asset_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00294-operator-brush.asset_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00294.py -- tests/files/web/generated/M16-GAP-00294-operator-brush.asset_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00294", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00294", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00295", + "gapId": "operator:brush.asset_edit_metadata", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00295-operator-brush.asset_edit_metadata.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00295.py -- tests/files/web/generated/M16-GAP-00295-operator-brush.asset_edit_metadata.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00295", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00295", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00296", + "gapId": "operator:brush.asset_load_preview", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00296-operator-brush.asset_load_preview.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00296.py -- tests/files/web/generated/M16-GAP-00296-operator-brush.asset_load_preview.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00296", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00296", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00297", + "gapId": "operator:brush.asset_revert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00297-operator-brush.asset_revert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00297.py -- tests/files/web/generated/M16-GAP-00297-operator-brush.asset_revert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00297", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00297", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00298", + "gapId": "operator:brush.asset_save", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00298-operator-brush.asset_save.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00298.py -- tests/files/web/generated/M16-GAP-00298-operator-brush.asset_save.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00298", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00298", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00299", + "gapId": "operator:brush.asset_save_as", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00299-operator-brush.asset_save_as.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00299.py -- tests/files/web/generated/M16-GAP-00299-operator-brush.asset_save_as.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00299", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00299", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00300", + "gapId": "operator:brush.scale_size", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00300-operator-brush.scale_size.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00300.py -- tests/files/web/generated/M16-GAP-00300-operator-brush.scale_size.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00300", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00300", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00301", + "gapId": "operator:brush.stencil_control", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00301-operator-brush.stencil_control.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00301.py -- tests/files/web/generated/M16-GAP-00301-operator-brush.stencil_control.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00301", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00301", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00302", + "gapId": "operator:brush.stencil_fit_image_aspect", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00302-operator-brush.stencil_fit_image_aspect.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00302.py -- tests/files/web/generated/M16-GAP-00302-operator-brush.stencil_fit_image_aspect.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00302", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00302", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00303", + "gapId": "operator:brush.stencil_reset_transform", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00303-operator-brush.stencil_reset_transform.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00303.py -- tests/files/web/generated/M16-GAP-00303-operator-brush.stencil_reset_transform.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00303", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00303", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00304", + "gapId": "operator:buttons.clear_filter", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00304-operator-buttons.clear_filter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00304.py -- tests/files/web/generated/M16-GAP-00304-operator-buttons.clear_filter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00304", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00304", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00305", + "gapId": "operator:buttons.context_menu", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00305-operator-buttons.context_menu.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00305.py -- tests/files/web/generated/M16-GAP-00305-operator-buttons.context_menu.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00305", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00305", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00306", + "gapId": "operator:buttons.directory_browse", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00306-operator-buttons.directory_browse.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00306.py -- tests/files/web/generated/M16-GAP-00306-operator-buttons.directory_browse.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00306", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00306", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00307", + "gapId": "operator:buttons.file_browse", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00307-operator-buttons.file_browse.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00307.py -- tests/files/web/generated/M16-GAP-00307-operator-buttons.file_browse.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00307", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00307", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00308", + "gapId": "operator:buttons.start_filter", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00308-operator-buttons.start_filter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00308.py -- tests/files/web/generated/M16-GAP-00308-operator-buttons.start_filter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00308", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00308", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00309", + "gapId": "operator:buttons.toggle_pin", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00309-operator-buttons.toggle_pin.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00309.py -- tests/files/web/generated/M16-GAP-00309-operator-buttons.toggle_pin.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00309", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00309", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00310", + "gapId": "operator:cachefile.layer_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00310-operator-cachefile.layer_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00310.py -- tests/files/web/generated/M16-GAP-00310-operator-cachefile.layer_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00310", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00310", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00311", + "gapId": "operator:cachefile.layer_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00311-operator-cachefile.layer_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00311.py -- tests/files/web/generated/M16-GAP-00311-operator-cachefile.layer_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00311", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00311", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00312", + "gapId": "operator:cachefile.layer_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00312-operator-cachefile.layer_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00312.py -- tests/files/web/generated/M16-GAP-00312-operator-cachefile.layer_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00312", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00312", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00313", + "gapId": "operator:cachefile.open", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00313-operator-cachefile.open.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00313.py -- tests/files/web/generated/M16-GAP-00313-operator-cachefile.open.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00313", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00313", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00314", + "gapId": "operator:cachefile.reload", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00314-operator-cachefile.reload.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00314.py -- tests/files/web/generated/M16-GAP-00314-operator-cachefile.reload.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00314", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00314", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00315", + "gapId": "operator:camera.preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00315-operator-camera.preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00315.py -- tests/files/web/generated/M16-GAP-00315-operator-camera.preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00315", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00315", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00316", + "gapId": "operator:camera.safe_areas_preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00316-operator-camera.safe_areas_preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00316.py -- tests/files/web/generated/M16-GAP-00316-operator-camera.safe_areas_preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00316", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00316", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00317", + "gapId": "operator:clip.add_marker", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00317-operator-clip.add_marker.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00317.py -- tests/files/web/generated/M16-GAP-00317-operator-clip.add_marker.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00317", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00317", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00318", + "gapId": "operator:clip.add_marker_at_click", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00318-operator-clip.add_marker_at_click.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00318.py -- tests/files/web/generated/M16-GAP-00318-operator-clip.add_marker_at_click.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00318", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00318", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00319", + "gapId": "operator:clip.add_marker_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00319-operator-clip.add_marker_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00319.py -- tests/files/web/generated/M16-GAP-00319-operator-clip.add_marker_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00319", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00319", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00320", + "gapId": "operator:clip.add_marker_slide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00320-operator-clip.add_marker_slide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00320.py -- tests/files/web/generated/M16-GAP-00320-operator-clip.add_marker_slide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00320", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00320", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00321", + "gapId": "operator:clip.apply_solution_scale", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00321-operator-clip.apply_solution_scale.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00321.py -- tests/files/web/generated/M16-GAP-00321-operator-clip.apply_solution_scale.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00321", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00321", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00322", + "gapId": "operator:clip.average_tracks", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00322-operator-clip.average_tracks.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00322.py -- tests/files/web/generated/M16-GAP-00322-operator-clip.average_tracks.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00322", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00322", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00323", + "gapId": "operator:clip.bundles_to_mesh", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00323-operator-clip.bundles_to_mesh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00323.py -- tests/files/web/generated/M16-GAP-00323-operator-clip.bundles_to_mesh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00323", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00323", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00324", + "gapId": "operator:clip.camera_preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00324-operator-clip.camera_preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00324.py -- tests/files/web/generated/M16-GAP-00324-operator-clip.camera_preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00324", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00324", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00325", + "gapId": "operator:clip.change_frame", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00325-operator-clip.change_frame.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00325.py -- tests/files/web/generated/M16-GAP-00325-operator-clip.change_frame.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00325", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00325", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00326", + "gapId": "operator:clip.clean_tracks", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00326-operator-clip.clean_tracks.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00326.py -- tests/files/web/generated/M16-GAP-00326-operator-clip.clean_tracks.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00326", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00326", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00327", + "gapId": "operator:clip.clear_solution", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00327-operator-clip.clear_solution.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00327.py -- tests/files/web/generated/M16-GAP-00327-operator-clip.clear_solution.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00327", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00327", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00328", + "gapId": "operator:clip.clear_track_path", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00328-operator-clip.clear_track_path.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00328.py -- tests/files/web/generated/M16-GAP-00328-operator-clip.clear_track_path.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00328", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00328", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00329", + "gapId": "operator:clip.constraint_to_fcurve", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00329-operator-clip.constraint_to_fcurve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00329.py -- tests/files/web/generated/M16-GAP-00329-operator-clip.constraint_to_fcurve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00329", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00329", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00330", + "gapId": "operator:clip.copy_tracks", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00330-operator-clip.copy_tracks.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00330.py -- tests/files/web/generated/M16-GAP-00330-operator-clip.copy_tracks.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00330", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00330", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00331", + "gapId": "operator:clip.create_plane_track", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00331-operator-clip.create_plane_track.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00331.py -- tests/files/web/generated/M16-GAP-00331-operator-clip.create_plane_track.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00331", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00331", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00332", + "gapId": "operator:clip.cursor_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00332-operator-clip.cursor_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00332.py -- tests/files/web/generated/M16-GAP-00332-operator-clip.cursor_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00332", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00332", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00333", + "gapId": "operator:clip.delete_marker", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00333-operator-clip.delete_marker.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00333.py -- tests/files/web/generated/M16-GAP-00333-operator-clip.delete_marker.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00333", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00333", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00334", + "gapId": "operator:clip.delete_proxy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00334-operator-clip.delete_proxy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00334.py -- tests/files/web/generated/M16-GAP-00334-operator-clip.delete_proxy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00334", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00334", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00335", + "gapId": "operator:clip.delete_track", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00335-operator-clip.delete_track.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00335.py -- tests/files/web/generated/M16-GAP-00335-operator-clip.delete_track.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00335", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00335", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00336", + "gapId": "operator:clip.detect_features", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00336-operator-clip.detect_features.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00336.py -- tests/files/web/generated/M16-GAP-00336-operator-clip.detect_features.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00336", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00336", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00337", + "gapId": "operator:clip.disable_markers", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00337-operator-clip.disable_markers.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00337.py -- tests/files/web/generated/M16-GAP-00337-operator-clip.disable_markers.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00337", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00337", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00338", + "gapId": "operator:clip.dopesheet_select_channel", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00338-operator-clip.dopesheet_select_channel.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00338.py -- tests/files/web/generated/M16-GAP-00338-operator-clip.dopesheet_select_channel.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00338", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00338", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00339", + "gapId": "operator:clip.dopesheet_view_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00339-operator-clip.dopesheet_view_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00339.py -- tests/files/web/generated/M16-GAP-00339-operator-clip.dopesheet_view_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00339", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00339", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00340", + "gapId": "operator:clip.filter_tracks", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00340-operator-clip.filter_tracks.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00340.py -- tests/files/web/generated/M16-GAP-00340-operator-clip.filter_tracks.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00340", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00340", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00341", + "gapId": "operator:clip.frame_jump", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00341-operator-clip.frame_jump.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00341.py -- tests/files/web/generated/M16-GAP-00341-operator-clip.frame_jump.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00341", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00341", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00342", + "gapId": "operator:clip.graph_center_current_frame", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00342-operator-clip.graph_center_current_frame.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00342.py -- tests/files/web/generated/M16-GAP-00342-operator-clip.graph_center_current_frame.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00342", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00342", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00343", + "gapId": "operator:clip.graph_delete_curve", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00343-operator-clip.graph_delete_curve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00343.py -- tests/files/web/generated/M16-GAP-00343-operator-clip.graph_delete_curve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00343", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00343", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00344", + "gapId": "operator:clip.graph_delete_knot", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00344-operator-clip.graph_delete_knot.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00344.py -- tests/files/web/generated/M16-GAP-00344-operator-clip.graph_delete_knot.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00344", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00344", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00345", + "gapId": "operator:clip.graph_disable_markers", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00345-operator-clip.graph_disable_markers.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00345.py -- tests/files/web/generated/M16-GAP-00345-operator-clip.graph_disable_markers.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00345", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00345", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00346", + "gapId": "operator:clip.graph_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00346-operator-clip.graph_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00346.py -- tests/files/web/generated/M16-GAP-00346-operator-clip.graph_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00346", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00346", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00347", + "gapId": "operator:clip.graph_select_all_markers", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00347-operator-clip.graph_select_all_markers.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00347.py -- tests/files/web/generated/M16-GAP-00347-operator-clip.graph_select_all_markers.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00347", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00347", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00348", + "gapId": "operator:clip.graph_select_box", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00348-operator-clip.graph_select_box.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00348.py -- tests/files/web/generated/M16-GAP-00348-operator-clip.graph_select_box.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00348", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00348", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00349", + "gapId": "operator:clip.graph_view_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00349-operator-clip.graph_view_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00349.py -- tests/files/web/generated/M16-GAP-00349-operator-clip.graph_view_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00349", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00349", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00350", + "gapId": "operator:clip.hide_tracks", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00350-operator-clip.hide_tracks.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00350.py -- tests/files/web/generated/M16-GAP-00350-operator-clip.hide_tracks.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00350", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00350", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00351", + "gapId": "operator:clip.hide_tracks_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00351-operator-clip.hide_tracks_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00351.py -- tests/files/web/generated/M16-GAP-00351-operator-clip.hide_tracks_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00351", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00351", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00352", + "gapId": "operator:clip.join_tracks", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00352-operator-clip.join_tracks.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00352.py -- tests/files/web/generated/M16-GAP-00352-operator-clip.join_tracks.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00352", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00352", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00353", + "gapId": "operator:clip.keyframe_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00353-operator-clip.keyframe_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00353.py -- tests/files/web/generated/M16-GAP-00353-operator-clip.keyframe_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00353", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00353", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00354", + "gapId": "operator:clip.keyframe_insert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00354-operator-clip.keyframe_insert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00354.py -- tests/files/web/generated/M16-GAP-00354-operator-clip.keyframe_insert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00354", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00354", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00355", + "gapId": "operator:clip.lock_selection_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00355-operator-clip.lock_selection_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00355.py -- tests/files/web/generated/M16-GAP-00355-operator-clip.lock_selection_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00355", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00355", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00356", + "gapId": "operator:clip.lock_tracks", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00356-operator-clip.lock_tracks.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00356.py -- tests/files/web/generated/M16-GAP-00356-operator-clip.lock_tracks.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00356", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00356", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00357", + "gapId": "operator:clip.mode_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00357-operator-clip.mode_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00357.py -- tests/files/web/generated/M16-GAP-00357-operator-clip.mode_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00357", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00357", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00358", + "gapId": "operator:clip.new_image_from_plane_marker", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00358-operator-clip.new_image_from_plane_marker.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00358.py -- tests/files/web/generated/M16-GAP-00358-operator-clip.new_image_from_plane_marker.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00358", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00358", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00359", + "gapId": "operator:clip.open", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00359-operator-clip.open.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00359.py -- tests/files/web/generated/M16-GAP-00359-operator-clip.open.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00359", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00359", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00360", + "gapId": "operator:clip.paste_tracks", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00360-operator-clip.paste_tracks.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00360.py -- tests/files/web/generated/M16-GAP-00360-operator-clip.paste_tracks.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00360", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00360", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00361", + "gapId": "operator:clip.prefetch", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00361-operator-clip.prefetch.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00361.py -- tests/files/web/generated/M16-GAP-00361-operator-clip.prefetch.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00361", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00361", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00362", + "gapId": "operator:clip.rebuild_proxy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00362-operator-clip.rebuild_proxy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00362.py -- tests/files/web/generated/M16-GAP-00362-operator-clip.rebuild_proxy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00362", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00362", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00363", + "gapId": "operator:clip.refine_markers", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00363-operator-clip.refine_markers.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00363.py -- tests/files/web/generated/M16-GAP-00363-operator-clip.refine_markers.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00363", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00363", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00364", + "gapId": "operator:clip.reload", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00364-operator-clip.reload.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00364.py -- tests/files/web/generated/M16-GAP-00364-operator-clip.reload.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00364", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00364", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00365", + "gapId": "operator:clip.select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00365-operator-clip.select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00365.py -- tests/files/web/generated/M16-GAP-00365-operator-clip.select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00365", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00365", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00366", + "gapId": "operator:clip.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00366-operator-clip.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00366.py -- tests/files/web/generated/M16-GAP-00366-operator-clip.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00366", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00366", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00367", + "gapId": "operator:clip.select_box", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00367-operator-clip.select_box.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00367.py -- tests/files/web/generated/M16-GAP-00367-operator-clip.select_box.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00367", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00367", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00368", + "gapId": "operator:clip.select_circle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00368-operator-clip.select_circle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00368.py -- tests/files/web/generated/M16-GAP-00368-operator-clip.select_circle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00368", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00368", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00369", + "gapId": "operator:clip.select_grouped", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00369-operator-clip.select_grouped.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00369.py -- tests/files/web/generated/M16-GAP-00369-operator-clip.select_grouped.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00369", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00369", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00370", + "gapId": "operator:clip.select_lasso", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00370-operator-clip.select_lasso.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00370.py -- tests/files/web/generated/M16-GAP-00370-operator-clip.select_lasso.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00370", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00370", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00371", + "gapId": "operator:clip.set_active_clip", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00371-operator-clip.set_active_clip.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00371.py -- tests/files/web/generated/M16-GAP-00371-operator-clip.set_active_clip.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00371", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00371", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00372", + "gapId": "operator:clip.set_axis", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00372-operator-clip.set_axis.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00372.py -- tests/files/web/generated/M16-GAP-00372-operator-clip.set_axis.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00372", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00372", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00373", + "gapId": "operator:clip.set_origin", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00373-operator-clip.set_origin.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00373.py -- tests/files/web/generated/M16-GAP-00373-operator-clip.set_origin.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00373", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00373", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00374", + "gapId": "operator:clip.set_plane", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00374-operator-clip.set_plane.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00374.py -- tests/files/web/generated/M16-GAP-00374-operator-clip.set_plane.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00374", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00374", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00375", + "gapId": "operator:clip.set_scale", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00375-operator-clip.set_scale.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00375.py -- tests/files/web/generated/M16-GAP-00375-operator-clip.set_scale.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00375", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00375", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00376", + "gapId": "operator:clip.set_scene_frames", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00376-operator-clip.set_scene_frames.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00376.py -- tests/files/web/generated/M16-GAP-00376-operator-clip.set_scene_frames.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00376", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00376", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00377", + "gapId": "operator:clip.set_solution_scale", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00377-operator-clip.set_solution_scale.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00377.py -- tests/files/web/generated/M16-GAP-00377-operator-clip.set_solution_scale.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00377", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00377", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00378", + "gapId": "operator:clip.set_solver_keyframe", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00378-operator-clip.set_solver_keyframe.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00378.py -- tests/files/web/generated/M16-GAP-00378-operator-clip.set_solver_keyframe.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00378", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00378", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00379", + "gapId": "operator:clip.set_viewport_background", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00379-operator-clip.set_viewport_background.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00379.py -- tests/files/web/generated/M16-GAP-00379-operator-clip.set_viewport_background.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00379", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00379", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00380", + "gapId": "operator:clip.setup_tracking_scene", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00380-operator-clip.setup_tracking_scene.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00380.py -- tests/files/web/generated/M16-GAP-00380-operator-clip.setup_tracking_scene.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00380", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00380", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00381", + "gapId": "operator:clip.slide_marker", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00381-operator-clip.slide_marker.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00381.py -- tests/files/web/generated/M16-GAP-00381-operator-clip.slide_marker.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00381", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00381", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00382", + "gapId": "operator:clip.slide_plane_marker", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00382-operator-clip.slide_plane_marker.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00382.py -- tests/files/web/generated/M16-GAP-00382-operator-clip.slide_plane_marker.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00382", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00382", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00383", + "gapId": "operator:clip.solve_camera", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00383-operator-clip.solve_camera.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00383.py -- tests/files/web/generated/M16-GAP-00383-operator-clip.solve_camera.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00383", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00383", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00384", + "gapId": "operator:clip.stabilize_2d_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00384-operator-clip.stabilize_2d_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00384.py -- tests/files/web/generated/M16-GAP-00384-operator-clip.stabilize_2d_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00384", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00384", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00385", + "gapId": "operator:clip.stabilize_2d_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00385-operator-clip.stabilize_2d_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00385.py -- tests/files/web/generated/M16-GAP-00385-operator-clip.stabilize_2d_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00385", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00385", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00386", + "gapId": "operator:clip.stabilize_2d_rotation_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00386-operator-clip.stabilize_2d_rotation_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00386.py -- tests/files/web/generated/M16-GAP-00386-operator-clip.stabilize_2d_rotation_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00386", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00386", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00387", + "gapId": "operator:clip.stabilize_2d_rotation_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00387-operator-clip.stabilize_2d_rotation_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00387.py -- tests/files/web/generated/M16-GAP-00387-operator-clip.stabilize_2d_rotation_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00387", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00387", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00388", + "gapId": "operator:clip.stabilize_2d_rotation_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00388-operator-clip.stabilize_2d_rotation_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00388.py -- tests/files/web/generated/M16-GAP-00388-operator-clip.stabilize_2d_rotation_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00388", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00388", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00389", + "gapId": "operator:clip.stabilize_2d_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00389-operator-clip.stabilize_2d_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00389.py -- tests/files/web/generated/M16-GAP-00389-operator-clip.stabilize_2d_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00389", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00389", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00390", + "gapId": "operator:clip.track_color_preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00390-operator-clip.track_color_preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00390.py -- tests/files/web/generated/M16-GAP-00390-operator-clip.track_color_preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00390", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00390", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00391", + "gapId": "operator:clip.track_copy_color", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00391-operator-clip.track_copy_color.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00391.py -- tests/files/web/generated/M16-GAP-00391-operator-clip.track_copy_color.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00391", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00391", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00392", + "gapId": "operator:clip.track_markers", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00392-operator-clip.track_markers.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00392.py -- tests/files/web/generated/M16-GAP-00392-operator-clip.track_markers.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00392", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00392", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00393", + "gapId": "operator:clip.track_settings_as_default", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00393-operator-clip.track_settings_as_default.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00393.py -- tests/files/web/generated/M16-GAP-00393-operator-clip.track_settings_as_default.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00393", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00393", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00394", + "gapId": "operator:clip.track_settings_to_track", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00394-operator-clip.track_settings_to_track.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00394.py -- tests/files/web/generated/M16-GAP-00394-operator-clip.track_settings_to_track.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00394", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00394", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00395", + "gapId": "operator:clip.track_to_empty", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00395-operator-clip.track_to_empty.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00395.py -- tests/files/web/generated/M16-GAP-00395-operator-clip.track_to_empty.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00395", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00395", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00396", + "gapId": "operator:clip.tracking_object_new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00396-operator-clip.tracking_object_new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00396.py -- tests/files/web/generated/M16-GAP-00396-operator-clip.tracking_object_new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00396", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00396", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00397", + "gapId": "operator:clip.tracking_object_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00397-operator-clip.tracking_object_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00397.py -- tests/files/web/generated/M16-GAP-00397-operator-clip.tracking_object_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00397", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00397", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00398", + "gapId": "operator:clip.tracking_settings_preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00398-operator-clip.tracking_settings_preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00398.py -- tests/files/web/generated/M16-GAP-00398-operator-clip.tracking_settings_preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00398", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00398", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00399", + "gapId": "operator:clip.update_image_from_plane_marker", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00399-operator-clip.update_image_from_plane_marker.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00399.py -- tests/files/web/generated/M16-GAP-00399-operator-clip.update_image_from_plane_marker.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00399", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00399", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00400", + "gapId": "operator:clip.view_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00400-operator-clip.view_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00400.py -- tests/files/web/generated/M16-GAP-00400-operator-clip.view_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00400", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00400", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00401", + "gapId": "operator:clip.view_center_cursor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00401-operator-clip.view_center_cursor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00401.py -- tests/files/web/generated/M16-GAP-00401-operator-clip.view_center_cursor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00401", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00401", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00402", + "gapId": "operator:clip.view_ndof", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00402-operator-clip.view_ndof.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00402.py -- tests/files/web/generated/M16-GAP-00402-operator-clip.view_ndof.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00402", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00402", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00403", + "gapId": "operator:clip.view_pan", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00403-operator-clip.view_pan.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00403.py -- tests/files/web/generated/M16-GAP-00403-operator-clip.view_pan.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00403", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00403", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00404", + "gapId": "operator:clip.view_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00404-operator-clip.view_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00404.py -- tests/files/web/generated/M16-GAP-00404-operator-clip.view_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00404", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00404", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00405", + "gapId": "operator:clip.view_zoom", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00405-operator-clip.view_zoom.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00405.py -- tests/files/web/generated/M16-GAP-00405-operator-clip.view_zoom.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00405", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00405", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00406", + "gapId": "operator:clip.view_zoom_in", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00406-operator-clip.view_zoom_in.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00406.py -- tests/files/web/generated/M16-GAP-00406-operator-clip.view_zoom_in.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00406", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00406", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00407", + "gapId": "operator:clip.view_zoom_out", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00407-operator-clip.view_zoom_out.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00407.py -- tests/files/web/generated/M16-GAP-00407-operator-clip.view_zoom_out.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00407", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00407", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00408", + "gapId": "operator:clip.view_zoom_ratio", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00408-operator-clip.view_zoom_ratio.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00408.py -- tests/files/web/generated/M16-GAP-00408-operator-clip.view_zoom_ratio.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00408", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00408", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00409", + "gapId": "operator:cloth.preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00409-operator-cloth.preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00409.py -- tests/files/web/generated/M16-GAP-00409-operator-cloth.preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00409", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00409", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00410", + "gapId": "operator:collection.create", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00410-operator-collection.create.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00410.py -- tests/files/web/generated/M16-GAP-00410-operator-collection.create.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00410", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00410", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00411", + "gapId": "operator:collection.export_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00411-operator-collection.export_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00411.py -- tests/files/web/generated/M16-GAP-00411-operator-collection.export_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00411", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00411", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00412", + "gapId": "operator:collection.exporter_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00412-operator-collection.exporter_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00412.py -- tests/files/web/generated/M16-GAP-00412-operator-collection.exporter_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00412", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00412", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00413", + "gapId": "operator:collection.exporter_export", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00413-operator-collection.exporter_export.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00413.py -- tests/files/web/generated/M16-GAP-00413-operator-collection.exporter_export.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00413", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00413", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00414", + "gapId": "operator:collection.exporter_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00414-operator-collection.exporter_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00414.py -- tests/files/web/generated/M16-GAP-00414-operator-collection.exporter_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00414", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00414", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00415", + "gapId": "operator:collection.exporter_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00415-operator-collection.exporter_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00415.py -- tests/files/web/generated/M16-GAP-00415-operator-collection.exporter_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00415", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00415", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00416", + "gapId": "operator:collection.importer_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00416-operator-collection.importer_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00416.py -- tests/files/web/generated/M16-GAP-00416-operator-collection.importer_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00416", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00416", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00417", + "gapId": "operator:collection.importer_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00417-operator-collection.importer_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00417.py -- tests/files/web/generated/M16-GAP-00417-operator-collection.importer_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00417", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00417", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00418", + "gapId": "operator:collection.objects_add_active", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00418-operator-collection.objects_add_active.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00418.py -- tests/files/web/generated/M16-GAP-00418-operator-collection.objects_add_active.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00418", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00418", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00419", + "gapId": "operator:collection.objects_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00419-operator-collection.objects_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00419.py -- tests/files/web/generated/M16-GAP-00419-operator-collection.objects_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00419", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00419", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00420", + "gapId": "operator:collection.objects_remove_active", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00420-operator-collection.objects_remove_active.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00420.py -- tests/files/web/generated/M16-GAP-00420-operator-collection.objects_remove_active.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00420", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00420", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00421", + "gapId": "operator:collection.objects_remove_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00421-operator-collection.objects_remove_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00421.py -- tests/files/web/generated/M16-GAP-00421-operator-collection.objects_remove_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00421", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00421", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00422", + "gapId": "operator:console.autocomplete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00422-operator-console.autocomplete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00422.py -- tests/files/web/generated/M16-GAP-00422-operator-console.autocomplete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00422", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00422", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00423", + "gapId": "operator:console.banner", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00423-operator-console.banner.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00423.py -- tests/files/web/generated/M16-GAP-00423-operator-console.banner.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00423", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00423", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00424", + "gapId": "operator:console.clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00424-operator-console.clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00424.py -- tests/files/web/generated/M16-GAP-00424-operator-console.clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00424", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00424", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00425", + "gapId": "operator:console.clear_line", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00425-operator-console.clear_line.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00425.py -- tests/files/web/generated/M16-GAP-00425-operator-console.clear_line.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00425", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00425", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00426", + "gapId": "operator:console.copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00426-operator-console.copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00426.py -- tests/files/web/generated/M16-GAP-00426-operator-console.copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00426", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00426", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00427", + "gapId": "operator:console.copy_as_script", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00427-operator-console.copy_as_script.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00427.py -- tests/files/web/generated/M16-GAP-00427-operator-console.copy_as_script.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00427", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00427", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00428", + "gapId": "operator:console.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00428-operator-console.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00428.py -- tests/files/web/generated/M16-GAP-00428-operator-console.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00428", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00428", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00429", + "gapId": "operator:console.execute", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00429-operator-console.execute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00429.py -- tests/files/web/generated/M16-GAP-00429-operator-console.execute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00429", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00429", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00430", + "gapId": "operator:console.history_append", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00430-operator-console.history_append.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00430.py -- tests/files/web/generated/M16-GAP-00430-operator-console.history_append.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00430", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00430", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00431", + "gapId": "operator:console.history_cycle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00431-operator-console.history_cycle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00431.py -- tests/files/web/generated/M16-GAP-00431-operator-console.history_cycle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00431", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00431", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00432", + "gapId": "operator:console.indent", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00432-operator-console.indent.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00432.py -- tests/files/web/generated/M16-GAP-00432-operator-console.indent.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00432", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00432", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00433", + "gapId": "operator:console.indent_or_autocomplete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00433-operator-console.indent_or_autocomplete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00433.py -- tests/files/web/generated/M16-GAP-00433-operator-console.indent_or_autocomplete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00433", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00433", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00434", + "gapId": "operator:console.insert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00434-operator-console.insert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00434.py -- tests/files/web/generated/M16-GAP-00434-operator-console.insert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00434", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00434", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00435", + "gapId": "operator:console.language", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00435-operator-console.language.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00435.py -- tests/files/web/generated/M16-GAP-00435-operator-console.language.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00435", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00435", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00436", + "gapId": "operator:console.move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00436-operator-console.move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00436.py -- tests/files/web/generated/M16-GAP-00436-operator-console.move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00436", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00436", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00437", + "gapId": "operator:console.paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00437-operator-console.paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00437.py -- tests/files/web/generated/M16-GAP-00437-operator-console.paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00437", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00437", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00438", + "gapId": "operator:console.scrollback_append", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00438-operator-console.scrollback_append.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00438.py -- tests/files/web/generated/M16-GAP-00438-operator-console.scrollback_append.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00438", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00438", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00439", + "gapId": "operator:console.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00439-operator-console.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00439.py -- tests/files/web/generated/M16-GAP-00439-operator-console.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00439", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00439", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00440", + "gapId": "operator:console.select_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00440-operator-console.select_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00440.py -- tests/files/web/generated/M16-GAP-00440-operator-console.select_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00440", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00440", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00441", + "gapId": "operator:console.select_word", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00441-operator-console.select_word.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00441.py -- tests/files/web/generated/M16-GAP-00441-operator-console.select_word.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00441", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00441", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00442", + "gapId": "operator:console.unindent", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00442-operator-console.unindent.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00442.py -- tests/files/web/generated/M16-GAP-00442-operator-console.unindent.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00442", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00442", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00443", + "gapId": "operator:constraint.add_target", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00443-operator-constraint.add_target.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00443.py -- tests/files/web/generated/M16-GAP-00443-operator-constraint.add_target.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00443", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00443", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00444", + "gapId": "operator:constraint.apply", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00444-operator-constraint.apply.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00444.py -- tests/files/web/generated/M16-GAP-00444-operator-constraint.apply.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00444", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00444", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00445", + "gapId": "operator:constraint.childof_clear_inverse", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00445-operator-constraint.childof_clear_inverse.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00445.py -- tests/files/web/generated/M16-GAP-00445-operator-constraint.childof_clear_inverse.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00445", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00445", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00446", + "gapId": "operator:constraint.childof_set_inverse", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00446-operator-constraint.childof_set_inverse.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00446.py -- tests/files/web/generated/M16-GAP-00446-operator-constraint.childof_set_inverse.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00446", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00446", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00447", + "gapId": "operator:constraint.copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00447-operator-constraint.copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00447.py -- tests/files/web/generated/M16-GAP-00447-operator-constraint.copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00447", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00447", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00448", + "gapId": "operator:constraint.copy_to_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00448-operator-constraint.copy_to_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00448.py -- tests/files/web/generated/M16-GAP-00448-operator-constraint.copy_to_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00448", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00448", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00449", + "gapId": "operator:constraint.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00449-operator-constraint.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00449.py -- tests/files/web/generated/M16-GAP-00449-operator-constraint.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00449", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00449", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00450", + "gapId": "operator:constraint.disable_keep_transform", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00450-operator-constraint.disable_keep_transform.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00450.py -- tests/files/web/generated/M16-GAP-00450-operator-constraint.disable_keep_transform.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00450", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00450", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00451", + "gapId": "operator:constraint.followpath_path_animate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00451-operator-constraint.followpath_path_animate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00451.py -- tests/files/web/generated/M16-GAP-00451-operator-constraint.followpath_path_animate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00451", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00451", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00452", + "gapId": "operator:constraint.limitdistance_reset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00452-operator-constraint.limitdistance_reset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00452.py -- tests/files/web/generated/M16-GAP-00452-operator-constraint.limitdistance_reset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00452", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00452", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00453", + "gapId": "operator:constraint.move_down", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00453-operator-constraint.move_down.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00453.py -- tests/files/web/generated/M16-GAP-00453-operator-constraint.move_down.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00453", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00453", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00454", + "gapId": "operator:constraint.move_to_index", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00454-operator-constraint.move_to_index.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00454.py -- tests/files/web/generated/M16-GAP-00454-operator-constraint.move_to_index.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00454", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00454", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00455", + "gapId": "operator:constraint.move_up", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00455-operator-constraint.move_up.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00455.py -- tests/files/web/generated/M16-GAP-00455-operator-constraint.move_up.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00455", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00455", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00456", + "gapId": "operator:constraint.normalize_target_weights", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00456-operator-constraint.normalize_target_weights.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00456.py -- tests/files/web/generated/M16-GAP-00456-operator-constraint.normalize_target_weights.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00456", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00456", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00457", + "gapId": "operator:constraint.objectsolver_clear_inverse", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00457-operator-constraint.objectsolver_clear_inverse.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00457.py -- tests/files/web/generated/M16-GAP-00457-operator-constraint.objectsolver_clear_inverse.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00457", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00457", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00458", + "gapId": "operator:constraint.objectsolver_set_inverse", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00458-operator-constraint.objectsolver_set_inverse.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00458.py -- tests/files/web/generated/M16-GAP-00458-operator-constraint.objectsolver_set_inverse.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00458", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00458", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00459", + "gapId": "operator:constraint.remove_target", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00459-operator-constraint.remove_target.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00459.py -- tests/files/web/generated/M16-GAP-00459-operator-constraint.remove_target.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00459", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00459", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00460", + "gapId": "operator:constraint.stretchto_reset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00460-operator-constraint.stretchto_reset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00460.py -- tests/files/web/generated/M16-GAP-00460-operator-constraint.stretchto_reset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00460", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00460", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00461", + "gapId": "operator:curve.cyclic_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00461-operator-curve.cyclic_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00461.py -- tests/files/web/generated/M16-GAP-00461-operator-curve.cyclic_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00461", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00461", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00462", + "gapId": "operator:curve.de_select_first", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00462-operator-curve.de_select_first.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00462.py -- tests/files/web/generated/M16-GAP-00462-operator-curve.de_select_first.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00462", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00462", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00463", + "gapId": "operator:curve.de_select_last", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00463-operator-curve.de_select_last.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00463.py -- tests/files/web/generated/M16-GAP-00463-operator-curve.de_select_last.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00463", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00463", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00464", + "gapId": "operator:curve.decimate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00464-operator-curve.decimate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00464.py -- tests/files/web/generated/M16-GAP-00464-operator-curve.decimate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00464", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00464", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00465", + "gapId": "operator:curve.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00465-operator-curve.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00465.py -- tests/files/web/generated/M16-GAP-00465-operator-curve.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00465", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00465", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00466", + "gapId": "operator:curve.dissolve_verts", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00466-operator-curve.dissolve_verts.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00466.py -- tests/files/web/generated/M16-GAP-00466-operator-curve.dissolve_verts.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00466", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00466", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00467", + "gapId": "operator:curve.draw", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00467-operator-curve.draw.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00467.py -- tests/files/web/generated/M16-GAP-00467-operator-curve.draw.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00467", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00467", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00468", + "gapId": "operator:curve.duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00468-operator-curve.duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00468.py -- tests/files/web/generated/M16-GAP-00468-operator-curve.duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00468", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00468", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00469", + "gapId": "operator:curve.duplicate_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00469-operator-curve.duplicate_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00469.py -- tests/files/web/generated/M16-GAP-00469-operator-curve.duplicate_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00469", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00469", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00470", + "gapId": "operator:curve.extrude", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00470-operator-curve.extrude.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00470.py -- tests/files/web/generated/M16-GAP-00470-operator-curve.extrude.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00470", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00470", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00471", + "gapId": "operator:curve.extrude_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00471-operator-curve.extrude_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00471.py -- tests/files/web/generated/M16-GAP-00471-operator-curve.extrude_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00471", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00471", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00472", + "gapId": "operator:curve.handle_type_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00472-operator-curve.handle_type_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00472.py -- tests/files/web/generated/M16-GAP-00472-operator-curve.handle_type_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00472", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00472", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00473", + "gapId": "operator:curve.hide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00473-operator-curve.hide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00473.py -- tests/files/web/generated/M16-GAP-00473-operator-curve.hide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00473", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00473", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00474", + "gapId": "operator:curve.make_segment", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00474-operator-curve.make_segment.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00474.py -- tests/files/web/generated/M16-GAP-00474-operator-curve.make_segment.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00474", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00474", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00475", + "gapId": "operator:curve.match_texture_space", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00475-operator-curve.match_texture_space.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00475.py -- tests/files/web/generated/M16-GAP-00475-operator-curve.match_texture_space.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00475", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00475", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00476", + "gapId": "operator:curve.normals_make_consistent", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00476-operator-curve.normals_make_consistent.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00476.py -- tests/files/web/generated/M16-GAP-00476-operator-curve.normals_make_consistent.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00476", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00476", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00477", + "gapId": "operator:curve.pen", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00477-operator-curve.pen.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00477.py -- tests/files/web/generated/M16-GAP-00477-operator-curve.pen.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00477", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00477", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00478", + "gapId": "operator:curve.primitive_bezier_circle_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00478-operator-curve.primitive_bezier_circle_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00478.py -- tests/files/web/generated/M16-GAP-00478-operator-curve.primitive_bezier_circle_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00478", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00478", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00479", + "gapId": "operator:curve.primitive_bezier_curve_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00479-operator-curve.primitive_bezier_curve_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00479.py -- tests/files/web/generated/M16-GAP-00479-operator-curve.primitive_bezier_curve_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00479", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00479", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00480", + "gapId": "operator:curve.primitive_nurbs_circle_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00480-operator-curve.primitive_nurbs_circle_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00480.py -- tests/files/web/generated/M16-GAP-00480-operator-curve.primitive_nurbs_circle_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00480", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00480", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00481", + "gapId": "operator:curve.primitive_nurbs_curve_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00481-operator-curve.primitive_nurbs_curve_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00481.py -- tests/files/web/generated/M16-GAP-00481-operator-curve.primitive_nurbs_curve_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00481", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00481", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00482", + "gapId": "operator:curve.primitive_nurbs_path_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00482-operator-curve.primitive_nurbs_path_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00482.py -- tests/files/web/generated/M16-GAP-00482-operator-curve.primitive_nurbs_path_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00482", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00482", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00483", + "gapId": "operator:curve.radius_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00483-operator-curve.radius_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00483.py -- tests/files/web/generated/M16-GAP-00483-operator-curve.radius_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00483", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00483", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00484", + "gapId": "operator:curve.reveal", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00484-operator-curve.reveal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00484.py -- tests/files/web/generated/M16-GAP-00484-operator-curve.reveal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00484", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00484", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00485", + "gapId": "operator:curve.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00485-operator-curve.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00485.py -- tests/files/web/generated/M16-GAP-00485-operator-curve.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00485", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00485", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00486", + "gapId": "operator:curve.select_less", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00486-operator-curve.select_less.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00486.py -- tests/files/web/generated/M16-GAP-00486-operator-curve.select_less.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00486", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00486", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00487", + "gapId": "operator:curve.select_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00487-operator-curve.select_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00487.py -- tests/files/web/generated/M16-GAP-00487-operator-curve.select_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00487", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00487", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00488", + "gapId": "operator:curve.select_linked_pick", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00488-operator-curve.select_linked_pick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00488.py -- tests/files/web/generated/M16-GAP-00488-operator-curve.select_linked_pick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00488", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00488", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00489", + "gapId": "operator:curve.select_more", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00489-operator-curve.select_more.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00489.py -- tests/files/web/generated/M16-GAP-00489-operator-curve.select_more.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00489", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00489", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00490", + "gapId": "operator:curve.select_next", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00490-operator-curve.select_next.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00490.py -- tests/files/web/generated/M16-GAP-00490-operator-curve.select_next.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00490", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00490", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00491", + "gapId": "operator:curve.select_nth", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00491-operator-curve.select_nth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00491.py -- tests/files/web/generated/M16-GAP-00491-operator-curve.select_nth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00491", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00491", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00492", + "gapId": "operator:curve.select_previous", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00492-operator-curve.select_previous.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00492.py -- tests/files/web/generated/M16-GAP-00492-operator-curve.select_previous.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00492", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00492", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00493", + "gapId": "operator:curve.select_random", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00493-operator-curve.select_random.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00493.py -- tests/files/web/generated/M16-GAP-00493-operator-curve.select_random.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00493", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00493", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00494", + "gapId": "operator:curve.select_row", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00494-operator-curve.select_row.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00494.py -- tests/files/web/generated/M16-GAP-00494-operator-curve.select_row.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00494", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00494", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00495", + "gapId": "operator:curve.select_similar", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00495-operator-curve.select_similar.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00495.py -- tests/files/web/generated/M16-GAP-00495-operator-curve.select_similar.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00495", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00495", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00496", + "gapId": "operator:curve.separate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00496-operator-curve.separate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00496.py -- tests/files/web/generated/M16-GAP-00496-operator-curve.separate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00496", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00496", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00497", + "gapId": "operator:curve.shade_flat", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00497-operator-curve.shade_flat.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00497.py -- tests/files/web/generated/M16-GAP-00497-operator-curve.shade_flat.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00497", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00497", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00498", + "gapId": "operator:curve.shade_smooth", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00498-operator-curve.shade_smooth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00498.py -- tests/files/web/generated/M16-GAP-00498-operator-curve.shade_smooth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00498", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00498", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00499", + "gapId": "operator:curve.shortest_path_pick", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00499-operator-curve.shortest_path_pick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00499.py -- tests/files/web/generated/M16-GAP-00499-operator-curve.shortest_path_pick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00499", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00499", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00500", + "gapId": "operator:curve.smooth", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00500-operator-curve.smooth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00500.py -- tests/files/web/generated/M16-GAP-00500-operator-curve.smooth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00500", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00500", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00501", + "gapId": "operator:curve.smooth_radius", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00501-operator-curve.smooth_radius.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00501.py -- tests/files/web/generated/M16-GAP-00501-operator-curve.smooth_radius.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00501", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00501", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00502", + "gapId": "operator:curve.smooth_tilt", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00502-operator-curve.smooth_tilt.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00502.py -- tests/files/web/generated/M16-GAP-00502-operator-curve.smooth_tilt.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00502", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00502", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00503", + "gapId": "operator:curve.smooth_weight", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00503-operator-curve.smooth_weight.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00503.py -- tests/files/web/generated/M16-GAP-00503-operator-curve.smooth_weight.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00503", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00503", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00504", + "gapId": "operator:curve.spin", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00504-operator-curve.spin.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00504.py -- tests/files/web/generated/M16-GAP-00504-operator-curve.spin.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00504", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00504", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00505", + "gapId": "operator:curve.spline_type_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00505-operator-curve.spline_type_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00505.py -- tests/files/web/generated/M16-GAP-00505-operator-curve.spline_type_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00505", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00505", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00506", + "gapId": "operator:curve.spline_weight_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00506-operator-curve.spline_weight_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00506.py -- tests/files/web/generated/M16-GAP-00506-operator-curve.spline_weight_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00506", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00506", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00507", + "gapId": "operator:curve.split", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00507-operator-curve.split.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00507.py -- tests/files/web/generated/M16-GAP-00507-operator-curve.split.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00507", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00507", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00508", + "gapId": "operator:curve.subdivide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00508-operator-curve.subdivide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00508.py -- tests/files/web/generated/M16-GAP-00508-operator-curve.subdivide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00508", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00508", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00509", + "gapId": "operator:curve.switch_direction", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00509-operator-curve.switch_direction.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00509.py -- tests/files/web/generated/M16-GAP-00509-operator-curve.switch_direction.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00509", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00509", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00510", + "gapId": "operator:curve.tilt_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00510-operator-curve.tilt_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00510.py -- tests/files/web/generated/M16-GAP-00510-operator-curve.tilt_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00510", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00510", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00511", + "gapId": "operator:curve.vertex_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00511-operator-curve.vertex_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00511.py -- tests/files/web/generated/M16-GAP-00511-operator-curve.vertex_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00511", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00511", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00512", + "gapId": "operator:curves.add_bezier", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00512-operator-curves.add_bezier.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00512.py -- tests/files/web/generated/M16-GAP-00512-operator-curves.add_bezier.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00512", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00512", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00513", + "gapId": "operator:curves.add_circle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00513-operator-curves.add_circle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00513.py -- tests/files/web/generated/M16-GAP-00513-operator-curves.add_circle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00513", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00513", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00514", + "gapId": "operator:curves.attribute_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00514-operator-curves.attribute_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00514.py -- tests/files/web/generated/M16-GAP-00514-operator-curves.attribute_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00514", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00514", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00515", + "gapId": "operator:curves.convert_from_particle_system", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00515-operator-curves.convert_from_particle_system.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00515.py -- tests/files/web/generated/M16-GAP-00515-operator-curves.convert_from_particle_system.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00515", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00515", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00516", + "gapId": "operator:curves.convert_to_particle_system", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00516-operator-curves.convert_to_particle_system.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00516.py -- tests/files/web/generated/M16-GAP-00516-operator-curves.convert_to_particle_system.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00516", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00516", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00517", + "gapId": "operator:curves.curve_type_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00517-operator-curves.curve_type_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00517.py -- tests/files/web/generated/M16-GAP-00517-operator-curves.curve_type_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00517", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00517", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00518", + "gapId": "operator:curves.cyclic_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00518-operator-curves.cyclic_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00518.py -- tests/files/web/generated/M16-GAP-00518-operator-curves.cyclic_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00518", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00518", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00519", + "gapId": "operator:curves.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00519-operator-curves.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00519.py -- tests/files/web/generated/M16-GAP-00519-operator-curves.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00519", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00519", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00520", + "gapId": "operator:curves.draw", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00520-operator-curves.draw.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00520.py -- tests/files/web/generated/M16-GAP-00520-operator-curves.draw.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00520", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00520", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00521", + "gapId": "operator:curves.duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00521-operator-curves.duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00521.py -- tests/files/web/generated/M16-GAP-00521-operator-curves.duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00521", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00521", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00522", + "gapId": "operator:curves.duplicate_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00522-operator-curves.duplicate_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00522.py -- tests/files/web/generated/M16-GAP-00522-operator-curves.duplicate_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00522", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00522", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00523", + "gapId": "operator:curves.extrude", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00523-operator-curves.extrude.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00523.py -- tests/files/web/generated/M16-GAP-00523-operator-curves.extrude.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00523", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00523", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00524", + "gapId": "operator:curves.extrude_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00524-operator-curves.extrude_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00524.py -- tests/files/web/generated/M16-GAP-00524-operator-curves.extrude_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00524", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00524", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00525", + "gapId": "operator:curves.handle_type_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00525-operator-curves.handle_type_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00525.py -- tests/files/web/generated/M16-GAP-00525-operator-curves.handle_type_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00525", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00525", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00526", + "gapId": "operator:curves.pen", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00526-operator-curves.pen.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00526.py -- tests/files/web/generated/M16-GAP-00526-operator-curves.pen.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00526", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00526", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00527", + "gapId": "operator:curves.sculptmode_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00527-operator-curves.sculptmode_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00527.py -- tests/files/web/generated/M16-GAP-00527-operator-curves.sculptmode_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00527", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00527", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00528", + "gapId": "operator:curves.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00528-operator-curves.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00528.py -- tests/files/web/generated/M16-GAP-00528-operator-curves.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00528", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00528", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00529", + "gapId": "operator:curves.select_ends", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00529-operator-curves.select_ends.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00529.py -- tests/files/web/generated/M16-GAP-00529-operator-curves.select_ends.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00529", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00529", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00530", + "gapId": "operator:curves.select_less", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00530-operator-curves.select_less.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00530.py -- tests/files/web/generated/M16-GAP-00530-operator-curves.select_less.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00530", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00530", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00531", + "gapId": "operator:curves.select_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00531-operator-curves.select_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00531.py -- tests/files/web/generated/M16-GAP-00531-operator-curves.select_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00531", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00531", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00532", + "gapId": "operator:curves.select_linked_pick", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00532-operator-curves.select_linked_pick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00532.py -- tests/files/web/generated/M16-GAP-00532-operator-curves.select_linked_pick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00532", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00532", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00533", + "gapId": "operator:curves.select_more", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00533-operator-curves.select_more.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00533.py -- tests/files/web/generated/M16-GAP-00533-operator-curves.select_more.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00533", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00533", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00534", + "gapId": "operator:curves.select_random", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00534-operator-curves.select_random.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00534.py -- tests/files/web/generated/M16-GAP-00534-operator-curves.select_random.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00534", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00534", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00535", + "gapId": "operator:curves.separate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00535-operator-curves.separate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00535.py -- tests/files/web/generated/M16-GAP-00535-operator-curves.separate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00535", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00535", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00536", + "gapId": "operator:curves.set_selection_domain", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00536-operator-curves.set_selection_domain.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00536.py -- tests/files/web/generated/M16-GAP-00536-operator-curves.set_selection_domain.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00536", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00536", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00537", + "gapId": "operator:curves.snap_curves_to_surface", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00537-operator-curves.snap_curves_to_surface.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00537.py -- tests/files/web/generated/M16-GAP-00537-operator-curves.snap_curves_to_surface.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00537", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00537", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00538", + "gapId": "operator:curves.split", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00538-operator-curves.split.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00538.py -- tests/files/web/generated/M16-GAP-00538-operator-curves.split.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00538", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00538", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00539", + "gapId": "operator:curves.subdivide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00539-operator-curves.subdivide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00539.py -- tests/files/web/generated/M16-GAP-00539-operator-curves.subdivide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00539", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00539", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00540", + "gapId": "operator:curves.surface_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00540-operator-curves.surface_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00540.py -- tests/files/web/generated/M16-GAP-00540-operator-curves.surface_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00540", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00540", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00541", + "gapId": "operator:curves.switch_direction", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00541-operator-curves.switch_direction.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00541.py -- tests/files/web/generated/M16-GAP-00541-operator-curves.switch_direction.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00541", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00541", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00542", + "gapId": "operator:curves.tilt_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00542-operator-curves.tilt_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00542.py -- tests/files/web/generated/M16-GAP-00542-operator-curves.tilt_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00542", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00542", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00543", + "gapId": "operator:cycles.denoise_animation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00543-operator-cycles.denoise_animation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00543.py -- tests/files/web/generated/M16-GAP-00543-operator-cycles.denoise_animation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00543", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00543", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00544", + "gapId": "operator:cycles.merge_images", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00544-operator-cycles.merge_images.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00544.py -- tests/files/web/generated/M16-GAP-00544-operator-cycles.merge_images.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00544", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00544", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00545", + "gapId": "operator:cycles.use_shading_nodes", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00545-operator-cycles.use_shading_nodes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00545.py -- tests/files/web/generated/M16-GAP-00545-operator-cycles.use_shading_nodes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00545", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00545", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00546", + "gapId": "operator:dpaint.bake", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00546-operator-dpaint.bake.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00546.py -- tests/files/web/generated/M16-GAP-00546-operator-dpaint.bake.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00546", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00546", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00547", + "gapId": "operator:dpaint.output_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00547-operator-dpaint.output_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00547.py -- tests/files/web/generated/M16-GAP-00547-operator-dpaint.output_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00547", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00547", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00548", + "gapId": "operator:dpaint.surface_slot_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00548-operator-dpaint.surface_slot_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00548.py -- tests/files/web/generated/M16-GAP-00548-operator-dpaint.surface_slot_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00548", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00548", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00549", + "gapId": "operator:dpaint.surface_slot_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00549-operator-dpaint.surface_slot_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00549.py -- tests/files/web/generated/M16-GAP-00549-operator-dpaint.surface_slot_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00549", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00549", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00550", + "gapId": "operator:dpaint.type_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00550-operator-dpaint.type_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00550.py -- tests/files/web/generated/M16-GAP-00550-operator-dpaint.type_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00550", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00550", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00551", + "gapId": "operator:ed.flush_edits", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00551-operator-ed.flush_edits.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00551.py -- tests/files/web/generated/M16-GAP-00551-operator-ed.flush_edits.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00551", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00551", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00552", + "gapId": "operator:ed.lib_id_fake_user_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00552-operator-ed.lib_id_fake_user_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00552.py -- tests/files/web/generated/M16-GAP-00552-operator-ed.lib_id_fake_user_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00552", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00552", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00553", + "gapId": "operator:ed.lib_id_generate_preview", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00553-operator-ed.lib_id_generate_preview.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00553.py -- tests/files/web/generated/M16-GAP-00553-operator-ed.lib_id_generate_preview.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00553", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00553", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00554", + "gapId": "operator:ed.lib_id_generate_preview_from_object", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00554-operator-ed.lib_id_generate_preview_from_object.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00554.py -- tests/files/web/generated/M16-GAP-00554-operator-ed.lib_id_generate_preview_from_object.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00554", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00554", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00555", + "gapId": "operator:ed.lib_id_load_custom_preview", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00555-operator-ed.lib_id_load_custom_preview.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00555.py -- tests/files/web/generated/M16-GAP-00555-operator-ed.lib_id_load_custom_preview.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00555", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00555", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00556", + "gapId": "operator:ed.lib_id_override_editable_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00556-operator-ed.lib_id_override_editable_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00556.py -- tests/files/web/generated/M16-GAP-00556-operator-ed.lib_id_override_editable_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00556", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00556", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00557", + "gapId": "operator:ed.lib_id_remove_preview", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00557-operator-ed.lib_id_remove_preview.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00557.py -- tests/files/web/generated/M16-GAP-00557-operator-ed.lib_id_remove_preview.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00557", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00557", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00558", + "gapId": "operator:ed.lib_id_unlink", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00558-operator-ed.lib_id_unlink.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00558.py -- tests/files/web/generated/M16-GAP-00558-operator-ed.lib_id_unlink.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00558", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00558", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00559", + "gapId": "operator:ed.redo", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00559-operator-ed.redo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00559.py -- tests/files/web/generated/M16-GAP-00559-operator-ed.redo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00559", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00559", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00560", + "gapId": "operator:ed.undo", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00560-operator-ed.undo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00560.py -- tests/files/web/generated/M16-GAP-00560-operator-ed.undo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00560", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00560", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00561", + "gapId": "operator:ed.undo_history", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00561-operator-ed.undo_history.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00561.py -- tests/files/web/generated/M16-GAP-00561-operator-ed.undo_history.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00561", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00561", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00562", + "gapId": "operator:ed.undo_push", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00562-operator-ed.undo_push.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00562.py -- tests/files/web/generated/M16-GAP-00562-operator-ed.undo_push.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00562", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00562", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00563", + "gapId": "operator:ed.undo_redo", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00563-operator-ed.undo_redo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00563.py -- tests/files/web/generated/M16-GAP-00563-operator-ed.undo_redo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00563", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00563", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00564", + "gapId": "operator:export_anim.bvh", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00564-operator-export_anim.bvh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00564.py -- tests/files/web/generated/M16-GAP-00564-operator-export_anim.bvh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00564", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00564", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00565", + "gapId": "operator:export_scene.fbx", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00565-operator-export_scene.fbx.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00565.py -- tests/files/web/generated/M16-GAP-00565-operator-export_scene.fbx.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00565", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00565", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00566", + "gapId": "operator:export_scene.gltf", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00566-operator-export_scene.gltf.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00566.py -- tests/files/web/generated/M16-GAP-00566-operator-export_scene.gltf.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00566", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00566", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00567", + "gapId": "operator:extensions.package_disable", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00567-operator-extensions.package_disable.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00567.py -- tests/files/web/generated/M16-GAP-00567-operator-extensions.package_disable.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00567", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00567", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00568", + "gapId": "operator:extensions.package_install", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00568-operator-extensions.package_install.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00568.py -- tests/files/web/generated/M16-GAP-00568-operator-extensions.package_install.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00568", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00568", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00569", + "gapId": "operator:extensions.package_install_files", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00569-operator-extensions.package_install_files.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00569.py -- tests/files/web/generated/M16-GAP-00569-operator-extensions.package_install_files.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00569", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00569", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00570", + "gapId": "operator:extensions.package_install_marked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00570-operator-extensions.package_install_marked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00570.py -- tests/files/web/generated/M16-GAP-00570-operator-extensions.package_install_marked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00570", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00570", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00571", + "gapId": "operator:extensions.package_mark_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00571-operator-extensions.package_mark_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00571.py -- tests/files/web/generated/M16-GAP-00571-operator-extensions.package_mark_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00571", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00571", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00572", + "gapId": "operator:extensions.package_mark_clear_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00572-operator-extensions.package_mark_clear_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00572.py -- tests/files/web/generated/M16-GAP-00572-operator-extensions.package_mark_clear_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00572", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00572", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00573", + "gapId": "operator:extensions.package_mark_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00573-operator-extensions.package_mark_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00573.py -- tests/files/web/generated/M16-GAP-00573-operator-extensions.package_mark_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00573", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00573", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00574", + "gapId": "operator:extensions.package_mark_set_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00574-operator-extensions.package_mark_set_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00574.py -- tests/files/web/generated/M16-GAP-00574-operator-extensions.package_mark_set_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00574", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00574", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00575", + "gapId": "operator:extensions.package_obsolete_marked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00575-operator-extensions.package_obsolete_marked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00575.py -- tests/files/web/generated/M16-GAP-00575-operator-extensions.package_obsolete_marked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00575", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00575", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00576", + "gapId": "operator:extensions.package_show_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00576-operator-extensions.package_show_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00576.py -- tests/files/web/generated/M16-GAP-00576-operator-extensions.package_show_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00576", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00576", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00577", + "gapId": "operator:extensions.package_show_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00577-operator-extensions.package_show_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00577.py -- tests/files/web/generated/M16-GAP-00577-operator-extensions.package_show_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00577", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00577", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00578", + "gapId": "operator:extensions.package_show_settings", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00578-operator-extensions.package_show_settings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00578.py -- tests/files/web/generated/M16-GAP-00578-operator-extensions.package_show_settings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00578", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00578", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00579", + "gapId": "operator:extensions.package_theme_disable", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00579-operator-extensions.package_theme_disable.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00579.py -- tests/files/web/generated/M16-GAP-00579-operator-extensions.package_theme_disable.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00579", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00579", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00580", + "gapId": "operator:extensions.package_theme_enable", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00580-operator-extensions.package_theme_enable.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00580.py -- tests/files/web/generated/M16-GAP-00580-operator-extensions.package_theme_enable.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00580", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00580", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00581", + "gapId": "operator:extensions.package_uninstall", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00581-operator-extensions.package_uninstall.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00581.py -- tests/files/web/generated/M16-GAP-00581-operator-extensions.package_uninstall.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00581", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00581", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00582", + "gapId": "operator:extensions.package_uninstall_marked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00582-operator-extensions.package_uninstall_marked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00582.py -- tests/files/web/generated/M16-GAP-00582-operator-extensions.package_uninstall_marked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00582", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00582", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00583", + "gapId": "operator:extensions.package_uninstall_system", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00583-operator-extensions.package_uninstall_system.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00583.py -- tests/files/web/generated/M16-GAP-00583-operator-extensions.package_uninstall_system.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00583", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00583", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00584", + "gapId": "operator:extensions.package_upgrade_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00584-operator-extensions.package_upgrade_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00584.py -- tests/files/web/generated/M16-GAP-00584-operator-extensions.package_upgrade_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00584", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00584", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00585", + "gapId": "operator:extensions.repo_enable_from_drop", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00585-operator-extensions.repo_enable_from_drop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00585.py -- tests/files/web/generated/M16-GAP-00585-operator-extensions.repo_enable_from_drop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00585", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00585", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00586", + "gapId": "operator:extensions.repo_lock_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00586-operator-extensions.repo_lock_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00586.py -- tests/files/web/generated/M16-GAP-00586-operator-extensions.repo_lock_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00586", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00586", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00587", + "gapId": "operator:extensions.repo_refresh_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00587-operator-extensions.repo_refresh_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00587.py -- tests/files/web/generated/M16-GAP-00587-operator-extensions.repo_refresh_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00587", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00587", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00588", + "gapId": "operator:extensions.repo_sync", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00588-operator-extensions.repo_sync.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00588.py -- tests/files/web/generated/M16-GAP-00588-operator-extensions.repo_sync.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00588", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00588", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00589", + "gapId": "operator:extensions.repo_sync_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00589-operator-extensions.repo_sync_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00589.py -- tests/files/web/generated/M16-GAP-00589-operator-extensions.repo_sync_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00589", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00589", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00590", + "gapId": "operator:extensions.repo_unlock", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00590-operator-extensions.repo_unlock.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00590.py -- tests/files/web/generated/M16-GAP-00590-operator-extensions.repo_unlock.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00590", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00590", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00591", + "gapId": "operator:extensions.repo_unlock_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00591-operator-extensions.repo_unlock_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00591.py -- tests/files/web/generated/M16-GAP-00591-operator-extensions.repo_unlock_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00591", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00591", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00592", + "gapId": "operator:extensions.status_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00592-operator-extensions.status_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00592.py -- tests/files/web/generated/M16-GAP-00592-operator-extensions.status_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00592", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00592", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00593", + "gapId": "operator:extensions.status_clear_errors", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00593-operator-extensions.status_clear_errors.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00593.py -- tests/files/web/generated/M16-GAP-00593-operator-extensions.status_clear_errors.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00593", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00593", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00594", + "gapId": "operator:extensions.userpref_allow_online", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00594-operator-extensions.userpref_allow_online.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00594.py -- tests/files/web/generated/M16-GAP-00594-operator-extensions.userpref_allow_online.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00594", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00594", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00595", + "gapId": "operator:extensions.userpref_allow_online_popup", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00595-operator-extensions.userpref_allow_online_popup.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00595.py -- tests/files/web/generated/M16-GAP-00595-operator-extensions.userpref_allow_online_popup.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00595", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00595", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00596", + "gapId": "operator:extensions.userpref_show_for_update", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00596-operator-extensions.userpref_show_for_update.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00596.py -- tests/files/web/generated/M16-GAP-00596-operator-extensions.userpref_show_for_update.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00596", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00596", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00597", + "gapId": "operator:extensions.userpref_show_online", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00597-operator-extensions.userpref_show_online.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00597.py -- tests/files/web/generated/M16-GAP-00597-operator-extensions.userpref_show_online.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00597", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00597", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00598", + "gapId": "operator:extensions.userpref_tags_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00598-operator-extensions.userpref_tags_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00598.py -- tests/files/web/generated/M16-GAP-00598-operator-extensions.userpref_tags_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00598", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00598", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00599", + "gapId": "operator:file.autopack_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00599-operator-file.autopack_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00599.py -- tests/files/web/generated/M16-GAP-00599-operator-file.autopack_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00599", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00599", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00600", + "gapId": "operator:file.bookmark_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00600-operator-file.bookmark_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00600.py -- tests/files/web/generated/M16-GAP-00600-operator-file.bookmark_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00600", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00600", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00601", + "gapId": "operator:file.bookmark_cleanup", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00601-operator-file.bookmark_cleanup.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00601.py -- tests/files/web/generated/M16-GAP-00601-operator-file.bookmark_cleanup.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00601", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00601", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00602", + "gapId": "operator:file.bookmark_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00602-operator-file.bookmark_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00602.py -- tests/files/web/generated/M16-GAP-00602-operator-file.bookmark_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00602", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00602", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00603", + "gapId": "operator:file.bookmark_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00603-operator-file.bookmark_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00603.py -- tests/files/web/generated/M16-GAP-00603-operator-file.bookmark_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00603", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00603", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00604", + "gapId": "operator:file.cancel", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00604-operator-file.cancel.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00604.py -- tests/files/web/generated/M16-GAP-00604-operator-file.cancel.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00604", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00604", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00605", + "gapId": "operator:file.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00605-operator-file.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00605.py -- tests/files/web/generated/M16-GAP-00605-operator-file.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00605", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00605", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00606", + "gapId": "operator:file.directory_new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00606-operator-file.directory_new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00606.py -- tests/files/web/generated/M16-GAP-00606-operator-file.directory_new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00606", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00606", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00607", + "gapId": "operator:file.edit_directory_path", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00607-operator-file.edit_directory_path.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00607.py -- tests/files/web/generated/M16-GAP-00607-operator-file.edit_directory_path.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00607", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00607", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00608", + "gapId": "operator:file.execute", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00608-operator-file.execute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00608.py -- tests/files/web/generated/M16-GAP-00608-operator-file.execute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00608", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00608", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00609", + "gapId": "operator:file.external_operation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00609-operator-file.external_operation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00609.py -- tests/files/web/generated/M16-GAP-00609-operator-file.external_operation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00609", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00609", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00610", + "gapId": "operator:file.filenum", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00610-operator-file.filenum.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00610.py -- tests/files/web/generated/M16-GAP-00610-operator-file.filenum.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00610", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00610", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00611", + "gapId": "operator:file.filepath_drop", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00611-operator-file.filepath_drop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00611.py -- tests/files/web/generated/M16-GAP-00611-operator-file.filepath_drop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00611", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00611", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00612", + "gapId": "operator:file.find_missing_files", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00612-operator-file.find_missing_files.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00612.py -- tests/files/web/generated/M16-GAP-00612-operator-file.find_missing_files.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00612", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00612", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00613", + "gapId": "operator:file.hidedot", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00613-operator-file.hidedot.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00613.py -- tests/files/web/generated/M16-GAP-00613-operator-file.hidedot.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00613", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00613", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00614", + "gapId": "operator:file.highlight", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00614-operator-file.highlight.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00614.py -- tests/files/web/generated/M16-GAP-00614-operator-file.highlight.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00614", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00614", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00615", + "gapId": "operator:file.make_paths_absolute", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00615-operator-file.make_paths_absolute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00615.py -- tests/files/web/generated/M16-GAP-00615-operator-file.make_paths_absolute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00615", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00615", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00616", + "gapId": "operator:file.make_paths_relative", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00616-operator-file.make_paths_relative.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00616.py -- tests/files/web/generated/M16-GAP-00616-operator-file.make_paths_relative.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00616", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00616", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00617", + "gapId": "operator:file.mouse_execute", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00617-operator-file.mouse_execute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00617.py -- tests/files/web/generated/M16-GAP-00617-operator-file.mouse_execute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00617", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00617", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00618", + "gapId": "operator:file.next", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00618-operator-file.next.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00618.py -- tests/files/web/generated/M16-GAP-00618-operator-file.next.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00618", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00618", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00619", + "gapId": "operator:file.pack_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00619-operator-file.pack_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00619.py -- tests/files/web/generated/M16-GAP-00619-operator-file.pack_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00619", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00619", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00620", + "gapId": "operator:file.pack_libraries", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00620-operator-file.pack_libraries.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00620.py -- tests/files/web/generated/M16-GAP-00620-operator-file.pack_libraries.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00620", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00620", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00621", + "gapId": "operator:file.parent", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00621-operator-file.parent.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00621.py -- tests/files/web/generated/M16-GAP-00621-operator-file.parent.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00621", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00621", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00622", + "gapId": "operator:file.previous", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00622-operator-file.previous.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00622.py -- tests/files/web/generated/M16-GAP-00622-operator-file.previous.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00622", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00622", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00623", + "gapId": "operator:file.refresh", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00623-operator-file.refresh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00623.py -- tests/files/web/generated/M16-GAP-00623-operator-file.refresh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00623", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00623", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00624", + "gapId": "operator:file.rename", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00624-operator-file.rename.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00624.py -- tests/files/web/generated/M16-GAP-00624-operator-file.rename.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00624", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00624", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00625", + "gapId": "operator:file.report_missing_files", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00625-operator-file.report_missing_files.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00625.py -- tests/files/web/generated/M16-GAP-00625-operator-file.report_missing_files.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00625", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00625", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00626", + "gapId": "operator:file.reset_recent", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00626-operator-file.reset_recent.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00626.py -- tests/files/web/generated/M16-GAP-00626-operator-file.reset_recent.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00626", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00626", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00627", + "gapId": "operator:file.select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00627-operator-file.select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00627.py -- tests/files/web/generated/M16-GAP-00627-operator-file.select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00627", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00627", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00628", + "gapId": "operator:file.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00628-operator-file.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00628.py -- tests/files/web/generated/M16-GAP-00628-operator-file.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00628", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00628", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00629", + "gapId": "operator:file.select_bookmark", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00629-operator-file.select_bookmark.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00629.py -- tests/files/web/generated/M16-GAP-00629-operator-file.select_bookmark.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00629", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00629", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00630", + "gapId": "operator:file.select_box", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00630-operator-file.select_box.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00630.py -- tests/files/web/generated/M16-GAP-00630-operator-file.select_box.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00630", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00630", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00631", + "gapId": "operator:file.select_walk", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00631-operator-file.select_walk.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00631.py -- tests/files/web/generated/M16-GAP-00631-operator-file.select_walk.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00631", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00631", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00632", + "gapId": "operator:file.smoothscroll", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00632-operator-file.smoothscroll.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00632.py -- tests/files/web/generated/M16-GAP-00632-operator-file.smoothscroll.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00632", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00632", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00633", + "gapId": "operator:file.sort_column_ui_context", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00633-operator-file.sort_column_ui_context.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00633.py -- tests/files/web/generated/M16-GAP-00633-operator-file.sort_column_ui_context.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00633", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00633", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00634", + "gapId": "operator:file.start_filter", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00634-operator-file.start_filter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00634.py -- tests/files/web/generated/M16-GAP-00634-operator-file.start_filter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00634", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00634", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00635", + "gapId": "operator:file.unpack_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00635-operator-file.unpack_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00635.py -- tests/files/web/generated/M16-GAP-00635-operator-file.unpack_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00635", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00635", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00636", + "gapId": "operator:file.unpack_item", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00636-operator-file.unpack_item.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00636.py -- tests/files/web/generated/M16-GAP-00636-operator-file.unpack_item.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00636", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00636", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00637", + "gapId": "operator:file.unpack_libraries", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00637-operator-file.unpack_libraries.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00637.py -- tests/files/web/generated/M16-GAP-00637-operator-file.unpack_libraries.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00637", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00637", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00638", + "gapId": "operator:file.view_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00638-operator-file.view_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00638.py -- tests/files/web/generated/M16-GAP-00638-operator-file.view_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00638", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00638", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00639", + "gapId": "operator:fluid.bake_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00639-operator-fluid.bake_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00639.py -- tests/files/web/generated/M16-GAP-00639-operator-fluid.bake_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00639", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00639", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00640", + "gapId": "operator:fluid.bake_data", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00640-operator-fluid.bake_data.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00640.py -- tests/files/web/generated/M16-GAP-00640-operator-fluid.bake_data.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00640", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00640", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00641", + "gapId": "operator:fluid.bake_guides", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00641-operator-fluid.bake_guides.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00641.py -- tests/files/web/generated/M16-GAP-00641-operator-fluid.bake_guides.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00641", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00641", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00642", + "gapId": "operator:fluid.bake_mesh", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00642-operator-fluid.bake_mesh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00642.py -- tests/files/web/generated/M16-GAP-00642-operator-fluid.bake_mesh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00642", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00642", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00643", + "gapId": "operator:fluid.bake_noise", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00643-operator-fluid.bake_noise.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00643.py -- tests/files/web/generated/M16-GAP-00643-operator-fluid.bake_noise.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00643", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00643", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00644", + "gapId": "operator:fluid.bake_particles", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00644-operator-fluid.bake_particles.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00644.py -- tests/files/web/generated/M16-GAP-00644-operator-fluid.bake_particles.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00644", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00644", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00645", + "gapId": "operator:fluid.free_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00645-operator-fluid.free_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00645.py -- tests/files/web/generated/M16-GAP-00645-operator-fluid.free_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00645", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00645", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00646", + "gapId": "operator:fluid.free_data", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00646-operator-fluid.free_data.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00646.py -- tests/files/web/generated/M16-GAP-00646-operator-fluid.free_data.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00646", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00646", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00647", + "gapId": "operator:fluid.free_guides", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00647-operator-fluid.free_guides.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00647.py -- tests/files/web/generated/M16-GAP-00647-operator-fluid.free_guides.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00647", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00647", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00648", + "gapId": "operator:fluid.free_mesh", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00648-operator-fluid.free_mesh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00648.py -- tests/files/web/generated/M16-GAP-00648-operator-fluid.free_mesh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00648", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00648", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00649", + "gapId": "operator:fluid.free_noise", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00649-operator-fluid.free_noise.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00649.py -- tests/files/web/generated/M16-GAP-00649-operator-fluid.free_noise.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00649", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00649", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00650", + "gapId": "operator:fluid.free_particles", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00650-operator-fluid.free_particles.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00650.py -- tests/files/web/generated/M16-GAP-00650-operator-fluid.free_particles.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00650", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00650", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00651", + "gapId": "operator:fluid.pause_bake", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00651-operator-fluid.pause_bake.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00651.py -- tests/files/web/generated/M16-GAP-00651-operator-fluid.pause_bake.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00651", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00651", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00652", + "gapId": "operator:fluid.preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00652-operator-fluid.preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00652.py -- tests/files/web/generated/M16-GAP-00652-operator-fluid.preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00652", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00652", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00653", + "gapId": "operator:font.case_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00653-operator-font.case_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00653.py -- tests/files/web/generated/M16-GAP-00653-operator-font.case_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00653", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00653", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00654", + "gapId": "operator:font.case_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00654-operator-font.case_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00654.py -- tests/files/web/generated/M16-GAP-00654-operator-font.case_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00654", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00654", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00655", + "gapId": "operator:font.change_character", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00655-operator-font.change_character.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00655.py -- tests/files/web/generated/M16-GAP-00655-operator-font.change_character.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00655", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00655", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00656", + "gapId": "operator:font.change_spacing", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00656-operator-font.change_spacing.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00656.py -- tests/files/web/generated/M16-GAP-00656-operator-font.change_spacing.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00656", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00656", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00657", + "gapId": "operator:font.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00657-operator-font.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00657.py -- tests/files/web/generated/M16-GAP-00657-operator-font.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00657", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00657", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00658", + "gapId": "operator:font.line_break", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00658-operator-font.line_break.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00658.py -- tests/files/web/generated/M16-GAP-00658-operator-font.line_break.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00658", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00658", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00659", + "gapId": "operator:font.move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00659-operator-font.move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00659.py -- tests/files/web/generated/M16-GAP-00659-operator-font.move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00659", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00659", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00660", + "gapId": "operator:font.move_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00660-operator-font.move_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00660.py -- tests/files/web/generated/M16-GAP-00660-operator-font.move_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00660", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00660", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00661", + "gapId": "operator:font.open", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00661-operator-font.open.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00661.py -- tests/files/web/generated/M16-GAP-00661-operator-font.open.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00661", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00661", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00662", + "gapId": "operator:font.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00662-operator-font.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00662.py -- tests/files/web/generated/M16-GAP-00662-operator-font.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00662", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00662", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00663", + "gapId": "operator:font.select_word", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00663-operator-font.select_word.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00663.py -- tests/files/web/generated/M16-GAP-00663-operator-font.select_word.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00663", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00663", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00664", + "gapId": "operator:font.selection_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00664-operator-font.selection_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00664.py -- tests/files/web/generated/M16-GAP-00664-operator-font.selection_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00664", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00664", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00665", + "gapId": "operator:font.style_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00665-operator-font.style_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00665.py -- tests/files/web/generated/M16-GAP-00665-operator-font.style_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00665", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00665", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00666", + "gapId": "operator:font.style_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00666-operator-font.style_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00666.py -- tests/files/web/generated/M16-GAP-00666-operator-font.style_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00666", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00666", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00667", + "gapId": "operator:font.text_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00667-operator-font.text_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00667.py -- tests/files/web/generated/M16-GAP-00667-operator-font.text_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00667", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00667", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00668", + "gapId": "operator:font.text_cut", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00668-operator-font.text_cut.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00668.py -- tests/files/web/generated/M16-GAP-00668-operator-font.text_cut.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00668", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00668", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00669", + "gapId": "operator:font.text_insert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00669-operator-font.text_insert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00669.py -- tests/files/web/generated/M16-GAP-00669-operator-font.text_insert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00669", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00669", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00670", + "gapId": "operator:font.text_insert_unicode", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00670-operator-font.text_insert_unicode.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00670.py -- tests/files/web/generated/M16-GAP-00670-operator-font.text_insert_unicode.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00670", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00670", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00671", + "gapId": "operator:font.text_paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00671-operator-font.text_paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00671.py -- tests/files/web/generated/M16-GAP-00671-operator-font.text_paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00671", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00671", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00672", + "gapId": "operator:font.text_paste_from_file", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00672-operator-font.text_paste_from_file.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00672.py -- tests/files/web/generated/M16-GAP-00672-operator-font.text_paste_from_file.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00672", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00672", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00673", + "gapId": "operator:font.textbox_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00673-operator-font.textbox_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00673.py -- tests/files/web/generated/M16-GAP-00673-operator-font.textbox_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00673", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00673", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00674", + "gapId": "operator:font.textbox_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00674-operator-font.textbox_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00674.py -- tests/files/web/generated/M16-GAP-00674-operator-font.textbox_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00674", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00674", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00675", + "gapId": "operator:font.unlink", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00675-operator-font.unlink.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00675.py -- tests/files/web/generated/M16-GAP-00675-operator-font.unlink.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00675", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00675", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00676", + "gapId": "operator:geometry.attribute_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00676-operator-geometry.attribute_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00676.py -- tests/files/web/generated/M16-GAP-00676-operator-geometry.attribute_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00676", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00676", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00677", + "gapId": "operator:geometry.attribute_convert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00677-operator-geometry.attribute_convert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00677.py -- tests/files/web/generated/M16-GAP-00677-operator-geometry.attribute_convert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00677", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00677", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00678", + "gapId": "operator:geometry.attribute_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00678-operator-geometry.attribute_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00678.py -- tests/files/web/generated/M16-GAP-00678-operator-geometry.attribute_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00678", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00678", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00679", + "gapId": "operator:geometry.color_attribute_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00679-operator-geometry.color_attribute_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00679.py -- tests/files/web/generated/M16-GAP-00679-operator-geometry.color_attribute_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00679", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00679", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00680", + "gapId": "operator:geometry.color_attribute_convert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00680-operator-geometry.color_attribute_convert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00680.py -- tests/files/web/generated/M16-GAP-00680-operator-geometry.color_attribute_convert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00680", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00680", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00681", + "gapId": "operator:geometry.color_attribute_duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00681-operator-geometry.color_attribute_duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00681.py -- tests/files/web/generated/M16-GAP-00681-operator-geometry.color_attribute_duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00681", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00681", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00682", + "gapId": "operator:geometry.color_attribute_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00682-operator-geometry.color_attribute_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00682.py -- tests/files/web/generated/M16-GAP-00682-operator-geometry.color_attribute_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00682", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00682", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00683", + "gapId": "operator:geometry.color_attribute_render_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00683-operator-geometry.color_attribute_render_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00683.py -- tests/files/web/generated/M16-GAP-00683-operator-geometry.color_attribute_render_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00683", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00683", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00684", + "gapId": "operator:geometry.geometry_randomization", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00684-operator-geometry.geometry_randomization.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00684.py -- tests/files/web/generated/M16-GAP-00684-operator-geometry.geometry_randomization.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00684", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00684", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00685", + "gapId": "operator:gizmogroup.gizmo_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00685-operator-gizmogroup.gizmo_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00685.py -- tests/files/web/generated/M16-GAP-00685-operator-gizmogroup.gizmo_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00685", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00685", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00686", + "gapId": "operator:gizmogroup.gizmo_tweak", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00686-operator-gizmogroup.gizmo_tweak.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00686.py -- tests/files/web/generated/M16-GAP-00686-operator-gizmogroup.gizmo_tweak.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00686", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00686", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00687", + "gapId": "operator:gpencil.annotate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00687-operator-gpencil.annotate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00687.py -- tests/files/web/generated/M16-GAP-00687-operator-gpencil.annotate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00687", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00687", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00688", + "gapId": "operator:gpencil.annotation_active_frame_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00688-operator-gpencil.annotation_active_frame_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00688.py -- tests/files/web/generated/M16-GAP-00688-operator-gpencil.annotation_active_frame_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00688", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00688", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00689", + "gapId": "operator:gpencil.annotation_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00689-operator-gpencil.annotation_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00689.py -- tests/files/web/generated/M16-GAP-00689-operator-gpencil.annotation_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00689", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00689", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00690", + "gapId": "operator:gpencil.data_unlink", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00690-operator-gpencil.data_unlink.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00690.py -- tests/files/web/generated/M16-GAP-00690-operator-gpencil.data_unlink.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00690", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00690", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00691", + "gapId": "operator:gpencil.layer_annotation_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00691-operator-gpencil.layer_annotation_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00691.py -- tests/files/web/generated/M16-GAP-00691-operator-gpencil.layer_annotation_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00691", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00691", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00692", + "gapId": "operator:gpencil.layer_annotation_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00692-operator-gpencil.layer_annotation_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00692.py -- tests/files/web/generated/M16-GAP-00692-operator-gpencil.layer_annotation_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00692", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00692", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00693", + "gapId": "operator:gpencil.layer_annotation_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00693-operator-gpencil.layer_annotation_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00693.py -- tests/files/web/generated/M16-GAP-00693-operator-gpencil.layer_annotation_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00693", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00693", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00694", + "gapId": "operator:graph.bake_keys", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00694-operator-graph.bake_keys.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00694.py -- tests/files/web/generated/M16-GAP-00694-operator-graph.bake_keys.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00694", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00694", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00695", + "gapId": "operator:graph.blend_offset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00695-operator-graph.blend_offset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00695.py -- tests/files/web/generated/M16-GAP-00695-operator-graph.blend_offset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00695", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00695", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00696", + "gapId": "operator:graph.blend_to_default", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00696-operator-graph.blend_to_default.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00696.py -- tests/files/web/generated/M16-GAP-00696-operator-graph.blend_to_default.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00696", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00696", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00697", + "gapId": "operator:graph.blend_to_ease", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00697-operator-graph.blend_to_ease.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00697.py -- tests/files/web/generated/M16-GAP-00697-operator-graph.blend_to_ease.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00697", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00697", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00698", + "gapId": "operator:graph.blend_to_neighbor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00698-operator-graph.blend_to_neighbor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00698.py -- tests/files/web/generated/M16-GAP-00698-operator-graph.blend_to_neighbor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00698", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00698", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00699", + "gapId": "operator:graph.breakdown", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00699-operator-graph.breakdown.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00699.py -- tests/files/web/generated/M16-GAP-00699-operator-graph.breakdown.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00699", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00699", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00700", + "gapId": "operator:graph.butterworth_smooth", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00700-operator-graph.butterworth_smooth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00700.py -- tests/files/web/generated/M16-GAP-00700-operator-graph.butterworth_smooth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00700", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00700", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00701", + "gapId": "operator:graph.clean", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00701-operator-graph.clean.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00701.py -- tests/files/web/generated/M16-GAP-00701-operator-graph.clean.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00701", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00701", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00702", + "gapId": "operator:graph.click_insert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00702-operator-graph.click_insert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00702.py -- tests/files/web/generated/M16-GAP-00702-operator-graph.click_insert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00702", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00702", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00703", + "gapId": "operator:graph.clickselect", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00703-operator-graph.clickselect.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00703.py -- tests/files/web/generated/M16-GAP-00703-operator-graph.clickselect.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00703", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00703", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00704", + "gapId": "operator:graph.copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00704-operator-graph.copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00704.py -- tests/files/web/generated/M16-GAP-00704-operator-graph.copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00704", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00704", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00705", + "gapId": "operator:graph.cursor_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00705-operator-graph.cursor_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00705.py -- tests/files/web/generated/M16-GAP-00705-operator-graph.cursor_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00705", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00705", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00706", + "gapId": "operator:graph.decimate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00706-operator-graph.decimate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00706.py -- tests/files/web/generated/M16-GAP-00706-operator-graph.decimate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00706", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00706", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00707", + "gapId": "operator:graph.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00707-operator-graph.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00707.py -- tests/files/web/generated/M16-GAP-00707-operator-graph.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00707", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00707", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00708", + "gapId": "operator:graph.driver_delete_invalid", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00708-operator-graph.driver_delete_invalid.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00708.py -- tests/files/web/generated/M16-GAP-00708-operator-graph.driver_delete_invalid.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00708", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00708", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00709", + "gapId": "operator:graph.driver_variables_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00709-operator-graph.driver_variables_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00709.py -- tests/files/web/generated/M16-GAP-00709-operator-graph.driver_variables_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00709", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00709", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00710", + "gapId": "operator:graph.driver_variables_paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00710-operator-graph.driver_variables_paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00710.py -- tests/files/web/generated/M16-GAP-00710-operator-graph.driver_variables_paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00710", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00710", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00711", + "gapId": "operator:graph.duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00711-operator-graph.duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00711.py -- tests/files/web/generated/M16-GAP-00711-operator-graph.duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00711", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00711", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00712", + "gapId": "operator:graph.duplicate_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00712-operator-graph.duplicate_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00712.py -- tests/files/web/generated/M16-GAP-00712-operator-graph.duplicate_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00712", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00712", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00713", + "gapId": "operator:graph.ease", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00713-operator-graph.ease.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00713.py -- tests/files/web/generated/M16-GAP-00713-operator-graph.ease.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00713", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00713", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00714", + "gapId": "operator:graph.easing_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00714-operator-graph.easing_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00714.py -- tests/files/web/generated/M16-GAP-00714-operator-graph.easing_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00714", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00714", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00715", + "gapId": "operator:graph.equalize_handles", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00715-operator-graph.equalize_handles.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00715.py -- tests/files/web/generated/M16-GAP-00715-operator-graph.equalize_handles.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00715", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00715", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00716", + "gapId": "operator:graph.euler_filter", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00716-operator-graph.euler_filter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00716.py -- tests/files/web/generated/M16-GAP-00716-operator-graph.euler_filter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00716", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00716", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00717", + "gapId": "operator:graph.extrapolation_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00717-operator-graph.extrapolation_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00717.py -- tests/files/web/generated/M16-GAP-00717-operator-graph.extrapolation_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00717", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00717", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00718", + "gapId": "operator:graph.fmodifier_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00718-operator-graph.fmodifier_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00718.py -- tests/files/web/generated/M16-GAP-00718-operator-graph.fmodifier_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00718", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00718", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00719", + "gapId": "operator:graph.fmodifier_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00719-operator-graph.fmodifier_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00719.py -- tests/files/web/generated/M16-GAP-00719-operator-graph.fmodifier_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00719", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00719", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00720", + "gapId": "operator:graph.fmodifier_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00720-operator-graph.fmodifier_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00720.py -- tests/files/web/generated/M16-GAP-00720-operator-graph.fmodifier_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00720", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00720", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00721", + "gapId": "operator:graph.fmodifier_paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00721-operator-graph.fmodifier_paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00721.py -- tests/files/web/generated/M16-GAP-00721-operator-graph.fmodifier_paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00721", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00721", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00722", + "gapId": "operator:graph.frame_jump", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00722-operator-graph.frame_jump.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00722.py -- tests/files/web/generated/M16-GAP-00722-operator-graph.frame_jump.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00722", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00722", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00723", + "gapId": "operator:graph.gaussian_smooth", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00723-operator-graph.gaussian_smooth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00723.py -- tests/files/web/generated/M16-GAP-00723-operator-graph.gaussian_smooth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00723", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00723", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00724", + "gapId": "operator:graph.ghost_curves_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00724-operator-graph.ghost_curves_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00724.py -- tests/files/web/generated/M16-GAP-00724-operator-graph.ghost_curves_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00724", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00724", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00725", + "gapId": "operator:graph.ghost_curves_create", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00725-operator-graph.ghost_curves_create.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00725.py -- tests/files/web/generated/M16-GAP-00725-operator-graph.ghost_curves_create.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00725", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00725", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00726", + "gapId": "operator:graph.handle_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00726-operator-graph.handle_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00726.py -- tests/files/web/generated/M16-GAP-00726-operator-graph.handle_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00726", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00726", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00727", + "gapId": "operator:graph.hide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00727-operator-graph.hide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00727.py -- tests/files/web/generated/M16-GAP-00727-operator-graph.hide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00727", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00727", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00728", + "gapId": "operator:graph.interpolation_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00728-operator-graph.interpolation_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00728.py -- tests/files/web/generated/M16-GAP-00728-operator-graph.interpolation_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00728", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00728", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00729", + "gapId": "operator:graph.keyframe_insert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00729-operator-graph.keyframe_insert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00729.py -- tests/files/web/generated/M16-GAP-00729-operator-graph.keyframe_insert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00729", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00729", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00730", + "gapId": "operator:graph.keyframe_jump", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00730-operator-graph.keyframe_jump.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00730.py -- tests/files/web/generated/M16-GAP-00730-operator-graph.keyframe_jump.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00730", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00730", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00731", + "gapId": "operator:graph.keys_to_samples", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00731-operator-graph.keys_to_samples.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00731.py -- tests/files/web/generated/M16-GAP-00731-operator-graph.keys_to_samples.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00731", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00731", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00732", + "gapId": "operator:graph.local_view", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00732-operator-graph.local_view.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00732.py -- tests/files/web/generated/M16-GAP-00732-operator-graph.local_view.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00732", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00732", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00733", + "gapId": "operator:graph.match_slope", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00733-operator-graph.match_slope.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00733.py -- tests/files/web/generated/M16-GAP-00733-operator-graph.match_slope.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00733", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00733", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00734", + "gapId": "operator:graph.mirror", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00734-operator-graph.mirror.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00734.py -- tests/files/web/generated/M16-GAP-00734-operator-graph.mirror.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00734", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00734", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00735", + "gapId": "operator:graph.paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00735-operator-graph.paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00735.py -- tests/files/web/generated/M16-GAP-00735-operator-graph.paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00735", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00735", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00736", + "gapId": "operator:graph.previewrange_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00736-operator-graph.previewrange_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00736.py -- tests/files/web/generated/M16-GAP-00736-operator-graph.previewrange_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00736", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00736", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00737", + "gapId": "operator:graph.push_pull", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00737-operator-graph.push_pull.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00737.py -- tests/files/web/generated/M16-GAP-00737-operator-graph.push_pull.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00737", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00737", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00738", + "gapId": "operator:graph.reveal", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00738-operator-graph.reveal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00738.py -- tests/files/web/generated/M16-GAP-00738-operator-graph.reveal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00738", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00738", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00739", + "gapId": "operator:graph.samples_to_keys", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00739-operator-graph.samples_to_keys.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00739.py -- tests/files/web/generated/M16-GAP-00739-operator-graph.samples_to_keys.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00739", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00739", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00740", + "gapId": "operator:graph.scale_average", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00740-operator-graph.scale_average.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00740.py -- tests/files/web/generated/M16-GAP-00740-operator-graph.scale_average.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00740", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00740", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00741", + "gapId": "operator:graph.scale_from_neighbor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00741-operator-graph.scale_from_neighbor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00741.py -- tests/files/web/generated/M16-GAP-00741-operator-graph.scale_from_neighbor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00741", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00741", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00742", + "gapId": "operator:graph.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00742-operator-graph.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00742.py -- tests/files/web/generated/M16-GAP-00742-operator-graph.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00742", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00742", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00743", + "gapId": "operator:graph.select_box", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00743-operator-graph.select_box.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00743.py -- tests/files/web/generated/M16-GAP-00743-operator-graph.select_box.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00743", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00743", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00744", + "gapId": "operator:graph.select_circle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00744-operator-graph.select_circle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00744.py -- tests/files/web/generated/M16-GAP-00744-operator-graph.select_circle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00744", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00744", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00745", + "gapId": "operator:graph.select_column", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00745-operator-graph.select_column.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00745.py -- tests/files/web/generated/M16-GAP-00745-operator-graph.select_column.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00745", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00745", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00746", + "gapId": "operator:graph.select_key_handles", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00746-operator-graph.select_key_handles.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00746.py -- tests/files/web/generated/M16-GAP-00746-operator-graph.select_key_handles.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00746", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00746", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00747", + "gapId": "operator:graph.select_lasso", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00747-operator-graph.select_lasso.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00747.py -- tests/files/web/generated/M16-GAP-00747-operator-graph.select_lasso.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00747", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00747", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00748", + "gapId": "operator:graph.select_leftright", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00748-operator-graph.select_leftright.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00748.py -- tests/files/web/generated/M16-GAP-00748-operator-graph.select_leftright.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00748", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00748", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00749", + "gapId": "operator:graph.select_less", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00749-operator-graph.select_less.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00749.py -- tests/files/web/generated/M16-GAP-00749-operator-graph.select_less.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00749", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00749", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00750", + "gapId": "operator:graph.select_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00750-operator-graph.select_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00750.py -- tests/files/web/generated/M16-GAP-00750-operator-graph.select_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00750", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00750", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00751", + "gapId": "operator:graph.select_more", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00751-operator-graph.select_more.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00751.py -- tests/files/web/generated/M16-GAP-00751-operator-graph.select_more.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00751", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00751", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00752", + "gapId": "operator:graph.shear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00752-operator-graph.shear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00752.py -- tests/files/web/generated/M16-GAP-00752-operator-graph.shear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00752", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00752", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00753", + "gapId": "operator:graph.smooth", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00753-operator-graph.smooth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00753.py -- tests/files/web/generated/M16-GAP-00753-operator-graph.smooth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00753", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00753", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00754", + "gapId": "operator:graph.snap", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00754-operator-graph.snap.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00754.py -- tests/files/web/generated/M16-GAP-00754-operator-graph.snap.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00754", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00754", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00755", + "gapId": "operator:graph.snap_cursor_value", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00755-operator-graph.snap_cursor_value.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00755.py -- tests/files/web/generated/M16-GAP-00755-operator-graph.snap_cursor_value.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00755", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00755", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00756", + "gapId": "operator:graph.sound_to_samples", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00756-operator-graph.sound_to_samples.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00756.py -- tests/files/web/generated/M16-GAP-00756-operator-graph.sound_to_samples.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00756", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00756", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00757", + "gapId": "operator:graph.time_offset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00757-operator-graph.time_offset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00757.py -- tests/files/web/generated/M16-GAP-00757-operator-graph.time_offset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00757", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00757", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00758", + "gapId": "operator:graph.view_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00758-operator-graph.view_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00758.py -- tests/files/web/generated/M16-GAP-00758-operator-graph.view_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00758", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00758", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00759", + "gapId": "operator:graph.view_frame", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00759-operator-graph.view_frame.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00759.py -- tests/files/web/generated/M16-GAP-00759-operator-graph.view_frame.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00759", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00759", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00760", + "gapId": "operator:graph.view_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00760-operator-graph.view_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00760.py -- tests/files/web/generated/M16-GAP-00760-operator-graph.view_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00760", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00760", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00761", + "gapId": "operator:grease_pencil.active_frame_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00761-operator-grease_pencil.active_frame_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00761.py -- tests/files/web/generated/M16-GAP-00761-operator-grease_pencil.active_frame_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00761", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00761", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00762", + "gapId": "operator:grease_pencil.bake_grease_pencil_animation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00762-operator-grease_pencil.bake_grease_pencil_animation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00762.py -- tests/files/web/generated/M16-GAP-00762-operator-grease_pencil.bake_grease_pencil_animation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00762", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00762", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00763", + "gapId": "operator:grease_pencil.brush_stroke", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00763-operator-grease_pencil.brush_stroke.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00763.py -- tests/files/web/generated/M16-GAP-00763-operator-grease_pencil.brush_stroke.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00763", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00763", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00764", + "gapId": "operator:grease_pencil.caps_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00764-operator-grease_pencil.caps_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00764.py -- tests/files/web/generated/M16-GAP-00764-operator-grease_pencil.caps_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00764", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00764", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00765", + "gapId": "operator:grease_pencil.clean_loose", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00765-operator-grease_pencil.clean_loose.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00765.py -- tests/files/web/generated/M16-GAP-00765-operator-grease_pencil.clean_loose.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00765", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00765", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00766", + "gapId": "operator:grease_pencil.convert_curve_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00766-operator-grease_pencil.convert_curve_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00766.py -- tests/files/web/generated/M16-GAP-00766-operator-grease_pencil.convert_curve_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00766", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00766", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00767", + "gapId": "operator:grease_pencil.copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00767-operator-grease_pencil.copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00767.py -- tests/files/web/generated/M16-GAP-00767-operator-grease_pencil.copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00767", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00767", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00768", + "gapId": "operator:grease_pencil.cyclical_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00768-operator-grease_pencil.cyclical_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00768.py -- tests/files/web/generated/M16-GAP-00768-operator-grease_pencil.cyclical_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00768", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00768", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00769", + "gapId": "operator:grease_pencil.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00769-operator-grease_pencil.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00769.py -- tests/files/web/generated/M16-GAP-00769-operator-grease_pencil.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00769", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00769", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00770", + "gapId": "operator:grease_pencil.delete_breakdown", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00770-operator-grease_pencil.delete_breakdown.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00770.py -- tests/files/web/generated/M16-GAP-00770-operator-grease_pencil.delete_breakdown.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00770", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00770", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00771", + "gapId": "operator:grease_pencil.delete_frame", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00771-operator-grease_pencil.delete_frame.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00771.py -- tests/files/web/generated/M16-GAP-00771-operator-grease_pencil.delete_frame.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00771", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00771", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00772", + "gapId": "operator:grease_pencil.dissolve", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00772-operator-grease_pencil.dissolve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00772.py -- tests/files/web/generated/M16-GAP-00772-operator-grease_pencil.dissolve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00772", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00772", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00773", + "gapId": "operator:grease_pencil.duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00773-operator-grease_pencil.duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00773.py -- tests/files/web/generated/M16-GAP-00773-operator-grease_pencil.duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00773", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00773", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00774", + "gapId": "operator:grease_pencil.duplicate_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00774-operator-grease_pencil.duplicate_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00774.py -- tests/files/web/generated/M16-GAP-00774-operator-grease_pencil.duplicate_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00774", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00774", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00775", + "gapId": "operator:grease_pencil.erase_box", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00775-operator-grease_pencil.erase_box.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00775.py -- tests/files/web/generated/M16-GAP-00775-operator-grease_pencil.erase_box.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00775", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00775", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00776", + "gapId": "operator:grease_pencil.erase_lasso", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00776-operator-grease_pencil.erase_lasso.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00776.py -- tests/files/web/generated/M16-GAP-00776-operator-grease_pencil.erase_lasso.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00776", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00776", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00777", + "gapId": "operator:grease_pencil.extrude", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00777-operator-grease_pencil.extrude.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00777.py -- tests/files/web/generated/M16-GAP-00777-operator-grease_pencil.extrude.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00777", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00777", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00778", + "gapId": "operator:grease_pencil.extrude_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00778-operator-grease_pencil.extrude_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00778.py -- tests/files/web/generated/M16-GAP-00778-operator-grease_pencil.extrude_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00778", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00778", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00779", + "gapId": "operator:grease_pencil.fill", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00779-operator-grease_pencil.fill.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00779.py -- tests/files/web/generated/M16-GAP-00779-operator-grease_pencil.fill.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00779", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00779", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00780", + "gapId": "operator:grease_pencil.frame_clean_duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00780-operator-grease_pencil.frame_clean_duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00780.py -- tests/files/web/generated/M16-GAP-00780-operator-grease_pencil.frame_clean_duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00780", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00780", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00781", + "gapId": "operator:grease_pencil.frame_duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00781-operator-grease_pencil.frame_duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00781.py -- tests/files/web/generated/M16-GAP-00781-operator-grease_pencil.frame_duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00781", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00781", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00782", + "gapId": "operator:grease_pencil.insert_blank_frame", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00782-operator-grease_pencil.insert_blank_frame.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00782.py -- tests/files/web/generated/M16-GAP-00782-operator-grease_pencil.insert_blank_frame.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00782", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00782", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00783", + "gapId": "operator:grease_pencil.interpolate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00783-operator-grease_pencil.interpolate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00783.py -- tests/files/web/generated/M16-GAP-00783-operator-grease_pencil.interpolate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00783", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00783", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00784", + "gapId": "operator:grease_pencil.interpolate_sequence", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00784-operator-grease_pencil.interpolate_sequence.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00784.py -- tests/files/web/generated/M16-GAP-00784-operator-grease_pencil.interpolate_sequence.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00784", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00784", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00785", + "gapId": "operator:grease_pencil.join_fills", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00785-operator-grease_pencil.join_fills.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00785.py -- tests/files/web/generated/M16-GAP-00785-operator-grease_pencil.join_fills.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00785", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00785", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00786", + "gapId": "operator:grease_pencil.join_selection", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00786-operator-grease_pencil.join_selection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00786.py -- tests/files/web/generated/M16-GAP-00786-operator-grease_pencil.join_selection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00786", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00786", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00787", + "gapId": "operator:grease_pencil.layer_active", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00787-operator-grease_pencil.layer_active.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00787.py -- tests/files/web/generated/M16-GAP-00787-operator-grease_pencil.layer_active.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00787", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00787", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00788", + "gapId": "operator:grease_pencil.layer_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00788-operator-grease_pencil.layer_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00788.py -- tests/files/web/generated/M16-GAP-00788-operator-grease_pencil.layer_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00788", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00788", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00789", + "gapId": "operator:grease_pencil.layer_duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00789-operator-grease_pencil.layer_duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00789.py -- tests/files/web/generated/M16-GAP-00789-operator-grease_pencil.layer_duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00789", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00789", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00790", + "gapId": "operator:grease_pencil.layer_duplicate_object", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00790-operator-grease_pencil.layer_duplicate_object.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00790.py -- tests/files/web/generated/M16-GAP-00790-operator-grease_pencil.layer_duplicate_object.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00790", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00790", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00791", + "gapId": "operator:grease_pencil.layer_group_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00791-operator-grease_pencil.layer_group_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00791.py -- tests/files/web/generated/M16-GAP-00791-operator-grease_pencil.layer_group_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00791", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00791", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00792", + "gapId": "operator:grease_pencil.layer_group_color_tag", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00792-operator-grease_pencil.layer_group_color_tag.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00792.py -- tests/files/web/generated/M16-GAP-00792-operator-grease_pencil.layer_group_color_tag.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00792", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00792", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00793", + "gapId": "operator:grease_pencil.layer_group_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00793-operator-grease_pencil.layer_group_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00793.py -- tests/files/web/generated/M16-GAP-00793-operator-grease_pencil.layer_group_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00793", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00793", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00794", + "gapId": "operator:grease_pencil.layer_hide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00794-operator-grease_pencil.layer_hide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00794.py -- tests/files/web/generated/M16-GAP-00794-operator-grease_pencil.layer_hide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00794", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00794", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00795", + "gapId": "operator:grease_pencil.layer_isolate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00795-operator-grease_pencil.layer_isolate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00795.py -- tests/files/web/generated/M16-GAP-00795-operator-grease_pencil.layer_isolate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00795", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00795", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00796", + "gapId": "operator:grease_pencil.layer_lock_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00796-operator-grease_pencil.layer_lock_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00796.py -- tests/files/web/generated/M16-GAP-00796-operator-grease_pencil.layer_lock_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00796", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00796", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00797", + "gapId": "operator:grease_pencil.layer_mask_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00797-operator-grease_pencil.layer_mask_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00797.py -- tests/files/web/generated/M16-GAP-00797-operator-grease_pencil.layer_mask_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00797", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00797", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00798", + "gapId": "operator:grease_pencil.layer_mask_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00798-operator-grease_pencil.layer_mask_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00798.py -- tests/files/web/generated/M16-GAP-00798-operator-grease_pencil.layer_mask_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00798", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00798", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00799", + "gapId": "operator:grease_pencil.layer_mask_reorder", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00799-operator-grease_pencil.layer_mask_reorder.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00799.py -- tests/files/web/generated/M16-GAP-00799-operator-grease_pencil.layer_mask_reorder.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00799", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00799", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00800", + "gapId": "operator:grease_pencil.layer_merge", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00800-operator-grease_pencil.layer_merge.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00800.py -- tests/files/web/generated/M16-GAP-00800-operator-grease_pencil.layer_merge.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00800", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00800", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00801", + "gapId": "operator:grease_pencil.layer_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00801-operator-grease_pencil.layer_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00801.py -- tests/files/web/generated/M16-GAP-00801-operator-grease_pencil.layer_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00801", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00801", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00802", + "gapId": "operator:grease_pencil.layer_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00802-operator-grease_pencil.layer_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00802.py -- tests/files/web/generated/M16-GAP-00802-operator-grease_pencil.layer_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00802", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00802", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00803", + "gapId": "operator:grease_pencil.layer_reveal", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00803-operator-grease_pencil.layer_reveal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00803.py -- tests/files/web/generated/M16-GAP-00803-operator-grease_pencil.layer_reveal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00803", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00803", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00804", + "gapId": "operator:grease_pencil.material_copy_to_object", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00804-operator-grease_pencil.material_copy_to_object.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00804.py -- tests/files/web/generated/M16-GAP-00804-operator-grease_pencil.material_copy_to_object.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00804", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00804", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00805", + "gapId": "operator:grease_pencil.material_hide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00805-operator-grease_pencil.material_hide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00805.py -- tests/files/web/generated/M16-GAP-00805-operator-grease_pencil.material_hide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00805", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00805", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00806", + "gapId": "operator:grease_pencil.material_isolate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00806-operator-grease_pencil.material_isolate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00806.py -- tests/files/web/generated/M16-GAP-00806-operator-grease_pencil.material_isolate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00806", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00806", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00807", + "gapId": "operator:grease_pencil.material_lock_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00807-operator-grease_pencil.material_lock_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00807.py -- tests/files/web/generated/M16-GAP-00807-operator-grease_pencil.material_lock_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00807", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00807", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00808", + "gapId": "operator:grease_pencil.material_lock_unselected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00808-operator-grease_pencil.material_lock_unselected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00808.py -- tests/files/web/generated/M16-GAP-00808-operator-grease_pencil.material_lock_unselected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00808", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00808", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00809", + "gapId": "operator:grease_pencil.material_lock_unused", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00809-operator-grease_pencil.material_lock_unused.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00809.py -- tests/files/web/generated/M16-GAP-00809-operator-grease_pencil.material_lock_unused.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00809", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00809", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00810", + "gapId": "operator:grease_pencil.material_reveal", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00810-operator-grease_pencil.material_reveal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00810.py -- tests/files/web/generated/M16-GAP-00810-operator-grease_pencil.material_reveal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00810", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00810", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00811", + "gapId": "operator:grease_pencil.material_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00811-operator-grease_pencil.material_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00811.py -- tests/files/web/generated/M16-GAP-00811-operator-grease_pencil.material_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00811", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00811", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00812", + "gapId": "operator:grease_pencil.material_unlock_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00812-operator-grease_pencil.material_unlock_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00812.py -- tests/files/web/generated/M16-GAP-00812-operator-grease_pencil.material_unlock_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00812", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00812", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00813", + "gapId": "operator:grease_pencil.move_to_layer", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00813-operator-grease_pencil.move_to_layer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00813.py -- tests/files/web/generated/M16-GAP-00813-operator-grease_pencil.move_to_layer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00813", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00813", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00814", + "gapId": "operator:grease_pencil.outline", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00814-operator-grease_pencil.outline.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00814.py -- tests/files/web/generated/M16-GAP-00814-operator-grease_pencil.outline.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00814", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00814", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00815", + "gapId": "operator:grease_pencil.paintmode_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00815-operator-grease_pencil.paintmode_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00815.py -- tests/files/web/generated/M16-GAP-00815-operator-grease_pencil.paintmode_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00815", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00815", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00816", + "gapId": "operator:grease_pencil.paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00816-operator-grease_pencil.paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00816.py -- tests/files/web/generated/M16-GAP-00816-operator-grease_pencil.paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00816", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00816", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00817", + "gapId": "operator:grease_pencil.pen", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00817-operator-grease_pencil.pen.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00817.py -- tests/files/web/generated/M16-GAP-00817-operator-grease_pencil.pen.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00817", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00817", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00818", + "gapId": "operator:grease_pencil.primitive_arc", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00818-operator-grease_pencil.primitive_arc.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00818.py -- tests/files/web/generated/M16-GAP-00818-operator-grease_pencil.primitive_arc.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00818", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00818", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00819", + "gapId": "operator:grease_pencil.primitive_box", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00819-operator-grease_pencil.primitive_box.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00819.py -- tests/files/web/generated/M16-GAP-00819-operator-grease_pencil.primitive_box.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00819", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00819", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00820", + "gapId": "operator:grease_pencil.primitive_circle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00820-operator-grease_pencil.primitive_circle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00820.py -- tests/files/web/generated/M16-GAP-00820-operator-grease_pencil.primitive_circle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00820", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00820", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00821", + "gapId": "operator:grease_pencil.primitive_curve", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00821-operator-grease_pencil.primitive_curve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00821.py -- tests/files/web/generated/M16-GAP-00821-operator-grease_pencil.primitive_curve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00821", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00821", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00822", + "gapId": "operator:grease_pencil.primitive_line", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00822-operator-grease_pencil.primitive_line.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00822.py -- tests/files/web/generated/M16-GAP-00822-operator-grease_pencil.primitive_line.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00822", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00822", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00823", + "gapId": "operator:grease_pencil.primitive_polyline", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00823-operator-grease_pencil.primitive_polyline.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00823.py -- tests/files/web/generated/M16-GAP-00823-operator-grease_pencil.primitive_polyline.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00823", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00823", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00824", + "gapId": "operator:grease_pencil.relative_layer_mask_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00824-operator-grease_pencil.relative_layer_mask_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00824.py -- tests/files/web/generated/M16-GAP-00824-operator-grease_pencil.relative_layer_mask_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00824", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00824", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00825", + "gapId": "operator:grease_pencil.remove_fill_guides", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00825-operator-grease_pencil.remove_fill_guides.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00825.py -- tests/files/web/generated/M16-GAP-00825-operator-grease_pencil.remove_fill_guides.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00825", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00825", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00826", + "gapId": "operator:grease_pencil.reorder", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00826-operator-grease_pencil.reorder.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00826.py -- tests/files/web/generated/M16-GAP-00826-operator-grease_pencil.reorder.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00826", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00826", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00827", + "gapId": "operator:grease_pencil.reproject", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00827-operator-grease_pencil.reproject.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00827.py -- tests/files/web/generated/M16-GAP-00827-operator-grease_pencil.reproject.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00827", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00827", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00828", + "gapId": "operator:grease_pencil.reset_uvs", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00828-operator-grease_pencil.reset_uvs.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00828.py -- tests/files/web/generated/M16-GAP-00828-operator-grease_pencil.reset_uvs.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00828", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00828", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00829", + "gapId": "operator:grease_pencil.sculpt_paint", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00829-operator-grease_pencil.sculpt_paint.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00829.py -- tests/files/web/generated/M16-GAP-00829-operator-grease_pencil.sculpt_paint.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00829", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00829", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00830", + "gapId": "operator:grease_pencil.sculptmode_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00830-operator-grease_pencil.sculptmode_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00830.py -- tests/files/web/generated/M16-GAP-00830-operator-grease_pencil.sculptmode_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00830", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00830", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00831", + "gapId": "operator:grease_pencil.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00831-operator-grease_pencil.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00831.py -- tests/files/web/generated/M16-GAP-00831-operator-grease_pencil.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00831", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00831", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00832", + "gapId": "operator:grease_pencil.select_alternate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00832-operator-grease_pencil.select_alternate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00832.py -- tests/files/web/generated/M16-GAP-00832-operator-grease_pencil.select_alternate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00832", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00832", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00833", + "gapId": "operator:grease_pencil.select_by_stroke_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00833-operator-grease_pencil.select_by_stroke_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00833.py -- tests/files/web/generated/M16-GAP-00833-operator-grease_pencil.select_by_stroke_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00833", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00833", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00834", + "gapId": "operator:grease_pencil.select_ends", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00834-operator-grease_pencil.select_ends.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00834.py -- tests/files/web/generated/M16-GAP-00834-operator-grease_pencil.select_ends.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00834", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00834", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00835", + "gapId": "operator:grease_pencil.select_fill", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00835-operator-grease_pencil.select_fill.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00835.py -- tests/files/web/generated/M16-GAP-00835-operator-grease_pencil.select_fill.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00835", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00835", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00836", + "gapId": "operator:grease_pencil.select_less", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00836-operator-grease_pencil.select_less.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00836.py -- tests/files/web/generated/M16-GAP-00836-operator-grease_pencil.select_less.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00836", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00836", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00837", + "gapId": "operator:grease_pencil.select_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00837-operator-grease_pencil.select_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00837.py -- tests/files/web/generated/M16-GAP-00837-operator-grease_pencil.select_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00837", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00837", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00838", + "gapId": "operator:grease_pencil.select_more", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00838-operator-grease_pencil.select_more.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00838.py -- tests/files/web/generated/M16-GAP-00838-operator-grease_pencil.select_more.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00838", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00838", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00839", + "gapId": "operator:grease_pencil.select_random", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00839-operator-grease_pencil.select_random.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00839.py -- tests/files/web/generated/M16-GAP-00839-operator-grease_pencil.select_random.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00839", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00839", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00840", + "gapId": "operator:grease_pencil.select_similar", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00840-operator-grease_pencil.select_similar.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00840.py -- tests/files/web/generated/M16-GAP-00840-operator-grease_pencil.select_similar.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00840", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00840", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00841", + "gapId": "operator:grease_pencil.separate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00841-operator-grease_pencil.separate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00841.py -- tests/files/web/generated/M16-GAP-00841-operator-grease_pencil.separate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00841", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00841", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00842", + "gapId": "operator:grease_pencil.separate_fills", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00842-operator-grease_pencil.separate_fills.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00842.py -- tests/files/web/generated/M16-GAP-00842-operator-grease_pencil.separate_fills.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00842", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00842", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00843", + "gapId": "operator:grease_pencil.set_active_material", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00843-operator-grease_pencil.set_active_material.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00843.py -- tests/files/web/generated/M16-GAP-00843-operator-grease_pencil.set_active_material.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00843", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00843", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00844", + "gapId": "operator:grease_pencil.set_corner_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00844-operator-grease_pencil.set_corner_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00844.py -- tests/files/web/generated/M16-GAP-00844-operator-grease_pencil.set_corner_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00844", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00844", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00845", + "gapId": "operator:grease_pencil.set_curve_resolution", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00845-operator-grease_pencil.set_curve_resolution.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00845.py -- tests/files/web/generated/M16-GAP-00845-operator-grease_pencil.set_curve_resolution.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00845", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00845", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00846", + "gapId": "operator:grease_pencil.set_curve_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00846-operator-grease_pencil.set_curve_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00846.py -- tests/files/web/generated/M16-GAP-00846-operator-grease_pencil.set_curve_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00846", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00846", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00847", + "gapId": "operator:grease_pencil.set_handle_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00847-operator-grease_pencil.set_handle_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00847.py -- tests/files/web/generated/M16-GAP-00847-operator-grease_pencil.set_handle_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00847", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00847", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00848", + "gapId": "operator:grease_pencil.set_material", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00848-operator-grease_pencil.set_material.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00848.py -- tests/files/web/generated/M16-GAP-00848-operator-grease_pencil.set_material.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00848", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00848", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00849", + "gapId": "operator:grease_pencil.set_selection_mode", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00849-operator-grease_pencil.set_selection_mode.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00849.py -- tests/files/web/generated/M16-GAP-00849-operator-grease_pencil.set_selection_mode.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00849", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00849", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00850", + "gapId": "operator:grease_pencil.set_start_point", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00850-operator-grease_pencil.set_start_point.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00850.py -- tests/files/web/generated/M16-GAP-00850-operator-grease_pencil.set_start_point.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00850", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00850", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00851", + "gapId": "operator:grease_pencil.set_stroke_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00851-operator-grease_pencil.set_stroke_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00851.py -- tests/files/web/generated/M16-GAP-00851-operator-grease_pencil.set_stroke_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00851", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00851", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00852", + "gapId": "operator:grease_pencil.set_uniform_opacity", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00852-operator-grease_pencil.set_uniform_opacity.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00852.py -- tests/files/web/generated/M16-GAP-00852-operator-grease_pencil.set_uniform_opacity.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00852", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00852", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00853", + "gapId": "operator:grease_pencil.set_uniform_thickness", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00853-operator-grease_pencil.set_uniform_thickness.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00853.py -- tests/files/web/generated/M16-GAP-00853-operator-grease_pencil.set_uniform_thickness.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00853", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00853", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00854", + "gapId": "operator:grease_pencil.snap_cursor_to_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00854-operator-grease_pencil.snap_cursor_to_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00854.py -- tests/files/web/generated/M16-GAP-00854-operator-grease_pencil.snap_cursor_to_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00854", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00854", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00855", + "gapId": "operator:grease_pencil.snap_to_cursor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00855-operator-grease_pencil.snap_to_cursor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00855.py -- tests/files/web/generated/M16-GAP-00855-operator-grease_pencil.snap_to_cursor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00855", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00855", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00856", + "gapId": "operator:grease_pencil.snap_to_grid", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00856-operator-grease_pencil.snap_to_grid.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00856.py -- tests/files/web/generated/M16-GAP-00856-operator-grease_pencil.snap_to_grid.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00856", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00856", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00857", + "gapId": "operator:grease_pencil.stroke_material_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00857-operator-grease_pencil.stroke_material_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00857.py -- tests/files/web/generated/M16-GAP-00857-operator-grease_pencil.stroke_material_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00857", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00857", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00858", + "gapId": "operator:grease_pencil.stroke_merge_by_distance", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00858-operator-grease_pencil.stroke_merge_by_distance.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00858.py -- tests/files/web/generated/M16-GAP-00858-operator-grease_pencil.stroke_merge_by_distance.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00858", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00858", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00859", + "gapId": "operator:grease_pencil.stroke_reset_vertex_color", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00859-operator-grease_pencil.stroke_reset_vertex_color.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00859.py -- tests/files/web/generated/M16-GAP-00859-operator-grease_pencil.stroke_reset_vertex_color.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00859", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00859", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00860", + "gapId": "operator:grease_pencil.stroke_simplify", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00860-operator-grease_pencil.stroke_simplify.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00860.py -- tests/files/web/generated/M16-GAP-00860-operator-grease_pencil.stroke_simplify.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00860", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00860", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00861", + "gapId": "operator:grease_pencil.stroke_smooth", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00861-operator-grease_pencil.stroke_smooth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00861.py -- tests/files/web/generated/M16-GAP-00861-operator-grease_pencil.stroke_smooth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00861", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00861", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00862", + "gapId": "operator:grease_pencil.stroke_split", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00862-operator-grease_pencil.stroke_split.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00862.py -- tests/files/web/generated/M16-GAP-00862-operator-grease_pencil.stroke_split.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00862", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00862", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00863", + "gapId": "operator:grease_pencil.stroke_subdivide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00863-operator-grease_pencil.stroke_subdivide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00863.py -- tests/files/web/generated/M16-GAP-00863-operator-grease_pencil.stroke_subdivide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00863", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00863", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00864", + "gapId": "operator:grease_pencil.stroke_subdivide_smooth", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00864-operator-grease_pencil.stroke_subdivide_smooth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00864.py -- tests/files/web/generated/M16-GAP-00864-operator-grease_pencil.stroke_subdivide_smooth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00864", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00864", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00865", + "gapId": "operator:grease_pencil.stroke_switch_direction", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00865-operator-grease_pencil.stroke_switch_direction.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00865.py -- tests/files/web/generated/M16-GAP-00865-operator-grease_pencil.stroke_switch_direction.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00865", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00865", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00866", + "gapId": "operator:grease_pencil.stroke_trim", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00866-operator-grease_pencil.stroke_trim.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00866.py -- tests/files/web/generated/M16-GAP-00866-operator-grease_pencil.stroke_trim.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00866", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00866", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00867", + "gapId": "operator:grease_pencil.texture_gradient", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00867-operator-grease_pencil.texture_gradient.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00867.py -- tests/files/web/generated/M16-GAP-00867-operator-grease_pencil.texture_gradient.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00867", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00867", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00868", + "gapId": "operator:grease_pencil.trace_image", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00868-operator-grease_pencil.trace_image.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00868.py -- tests/files/web/generated/M16-GAP-00868-operator-grease_pencil.trace_image.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00868", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00868", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00869", + "gapId": "operator:grease_pencil.vertex_brush_stroke", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00869-operator-grease_pencil.vertex_brush_stroke.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00869.py -- tests/files/web/generated/M16-GAP-00869-operator-grease_pencil.vertex_brush_stroke.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00869", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00869", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00870", + "gapId": "operator:grease_pencil.vertex_color_brightness_contrast", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00870-operator-grease_pencil.vertex_color_brightness_contrast.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00870.py -- tests/files/web/generated/M16-GAP-00870-operator-grease_pencil.vertex_color_brightness_contrast.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00870", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00870", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00871", + "gapId": "operator:grease_pencil.vertex_color_hsv", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00871-operator-grease_pencil.vertex_color_hsv.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00871.py -- tests/files/web/generated/M16-GAP-00871-operator-grease_pencil.vertex_color_hsv.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00871", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00871", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00872", + "gapId": "operator:grease_pencil.vertex_color_invert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00872-operator-grease_pencil.vertex_color_invert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00872.py -- tests/files/web/generated/M16-GAP-00872-operator-grease_pencil.vertex_color_invert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00872", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00872", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00873", + "gapId": "operator:grease_pencil.vertex_color_levels", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00873-operator-grease_pencil.vertex_color_levels.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00873.py -- tests/files/web/generated/M16-GAP-00873-operator-grease_pencil.vertex_color_levels.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00873", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00873", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00874", + "gapId": "operator:grease_pencil.vertex_color_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00874-operator-grease_pencil.vertex_color_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00874.py -- tests/files/web/generated/M16-GAP-00874-operator-grease_pencil.vertex_color_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00874", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00874", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00875", + "gapId": "operator:grease_pencil.vertex_group_normalize", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00875-operator-grease_pencil.vertex_group_normalize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00875.py -- tests/files/web/generated/M16-GAP-00875-operator-grease_pencil.vertex_group_normalize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00875", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00875", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00876", + "gapId": "operator:grease_pencil.vertex_group_normalize_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00876-operator-grease_pencil.vertex_group_normalize_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00876.py -- tests/files/web/generated/M16-GAP-00876-operator-grease_pencil.vertex_group_normalize_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00876", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00876", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00877", + "gapId": "operator:grease_pencil.vertex_group_smooth", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00877-operator-grease_pencil.vertex_group_smooth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00877.py -- tests/files/web/generated/M16-GAP-00877-operator-grease_pencil.vertex_group_smooth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00877", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00877", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00878", + "gapId": "operator:grease_pencil.vertexmode_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00878-operator-grease_pencil.vertexmode_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00878.py -- tests/files/web/generated/M16-GAP-00878-operator-grease_pencil.vertexmode_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00878", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00878", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00879", + "gapId": "operator:grease_pencil.weight_brush_stroke", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00879-operator-grease_pencil.weight_brush_stroke.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00879.py -- tests/files/web/generated/M16-GAP-00879-operator-grease_pencil.weight_brush_stroke.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00879", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00879", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00880", + "gapId": "operator:grease_pencil.weight_invert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00880-operator-grease_pencil.weight_invert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00880.py -- tests/files/web/generated/M16-GAP-00880-operator-grease_pencil.weight_invert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00880", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00880", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00881", + "gapId": "operator:grease_pencil.weight_sample", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00881-operator-grease_pencil.weight_sample.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00881.py -- tests/files/web/generated/M16-GAP-00881-operator-grease_pencil.weight_sample.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00881", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00881", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00882", + "gapId": "operator:grease_pencil.weight_toggle_direction", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00882-operator-grease_pencil.weight_toggle_direction.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00882.py -- tests/files/web/generated/M16-GAP-00882-operator-grease_pencil.weight_toggle_direction.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00882", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00882", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00883", + "gapId": "operator:grease_pencil.weightmode_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00883-operator-grease_pencil.weightmode_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00883.py -- tests/files/web/generated/M16-GAP-00883-operator-grease_pencil.weightmode_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00883", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00883", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00884", + "gapId": "operator:image.add_render_slot", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00884-operator-image.add_render_slot.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00884.py -- tests/files/web/generated/M16-GAP-00884-operator-image.add_render_slot.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00884", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00884", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00885", + "gapId": "operator:image.change_frame", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00885-operator-image.change_frame.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00885.py -- tests/files/web/generated/M16-GAP-00885-operator-image.change_frame.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00885", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00885", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00886", + "gapId": "operator:image.clear_render_border", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00886-operator-image.clear_render_border.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00886.py -- tests/files/web/generated/M16-GAP-00886-operator-image.clear_render_border.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00886", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00886", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00887", + "gapId": "operator:image.clear_render_slot", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00887-operator-image.clear_render_slot.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00887.py -- tests/files/web/generated/M16-GAP-00887-operator-image.clear_render_slot.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00887", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00887", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00888", + "gapId": "operator:image.clipboard_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00888-operator-image.clipboard_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00888.py -- tests/files/web/generated/M16-GAP-00888-operator-image.clipboard_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00888", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00888", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00889", + "gapId": "operator:image.clipboard_paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00889-operator-image.clipboard_paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00889.py -- tests/files/web/generated/M16-GAP-00889-operator-image.clipboard_paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00889", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00889", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00890", + "gapId": "operator:image.convert_to_mesh_plane", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00890-operator-image.convert_to_mesh_plane.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00890.py -- tests/files/web/generated/M16-GAP-00890-operator-image.convert_to_mesh_plane.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00890", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00890", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00891", + "gapId": "operator:image.curves_point_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00891-operator-image.curves_point_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00891.py -- tests/files/web/generated/M16-GAP-00891-operator-image.curves_point_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00891", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00891", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00892", + "gapId": "operator:image.cycle_render_slot", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00892-operator-image.cycle_render_slot.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00892.py -- tests/files/web/generated/M16-GAP-00892-operator-image.cycle_render_slot.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00892", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00892", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00893", + "gapId": "operator:image.external_edit", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00893-operator-image.external_edit.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00893.py -- tests/files/web/generated/M16-GAP-00893-operator-image.external_edit.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00893", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00893", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00894", + "gapId": "operator:image.file_browse", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00894-operator-image.file_browse.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00894.py -- tests/files/web/generated/M16-GAP-00894-operator-image.file_browse.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00894", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00894", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00895", + "gapId": "operator:image.flip", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00895-operator-image.flip.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00895.py -- tests/files/web/generated/M16-GAP-00895-operator-image.flip.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00895", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00895", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00896", + "gapId": "operator:image.import_as_mesh_planes", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00896-operator-image.import_as_mesh_planes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00896.py -- tests/files/web/generated/M16-GAP-00896-operator-image.import_as_mesh_planes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00896", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00896", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00897", + "gapId": "operator:image.invert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00897-operator-image.invert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00897.py -- tests/files/web/generated/M16-GAP-00897-operator-image.invert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00897", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00897", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00898", + "gapId": "operator:image.match_movie_length", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00898-operator-image.match_movie_length.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00898.py -- tests/files/web/generated/M16-GAP-00898-operator-image.match_movie_length.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00898", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00898", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00899", + "gapId": "operator:image.new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00899-operator-image.new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00899.py -- tests/files/web/generated/M16-GAP-00899-operator-image.new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00899", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00899", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00900", + "gapId": "operator:image.open", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00900-operator-image.open.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00900.py -- tests/files/web/generated/M16-GAP-00900-operator-image.open.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00900", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00900", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00901", + "gapId": "operator:image.open_images", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00901-operator-image.open_images.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00901.py -- tests/files/web/generated/M16-GAP-00901-operator-image.open_images.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00901", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00901", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00902", + "gapId": "operator:image.pack", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00902-operator-image.pack.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00902.py -- tests/files/web/generated/M16-GAP-00902-operator-image.pack.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00902", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00902", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00903", + "gapId": "operator:image.project_apply", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00903-operator-image.project_apply.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00903.py -- tests/files/web/generated/M16-GAP-00903-operator-image.project_apply.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00903", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00903", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00904", + "gapId": "operator:image.project_edit", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00904-operator-image.project_edit.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00904.py -- tests/files/web/generated/M16-GAP-00904-operator-image.project_edit.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00904", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00904", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00905", + "gapId": "operator:image.read_viewlayers", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00905-operator-image.read_viewlayers.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00905.py -- tests/files/web/generated/M16-GAP-00905-operator-image.read_viewlayers.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00905", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00905", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00906", + "gapId": "operator:image.reload", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00906-operator-image.reload.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00906.py -- tests/files/web/generated/M16-GAP-00906-operator-image.reload.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00906", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00906", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00907", + "gapId": "operator:image.remove_render_slot", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00907-operator-image.remove_render_slot.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00907.py -- tests/files/web/generated/M16-GAP-00907-operator-image.remove_render_slot.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00907", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00907", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00908", + "gapId": "operator:image.render_border", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00908-operator-image.render_border.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00908.py -- tests/files/web/generated/M16-GAP-00908-operator-image.render_border.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00908", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00908", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00909", + "gapId": "operator:image.replace", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00909-operator-image.replace.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00909.py -- tests/files/web/generated/M16-GAP-00909-operator-image.replace.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00909", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00909", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00910", + "gapId": "operator:image.resize", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00910-operator-image.resize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00910.py -- tests/files/web/generated/M16-GAP-00910-operator-image.resize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00910", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00910", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00911", + "gapId": "operator:image.rotate_orthogonal", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00911-operator-image.rotate_orthogonal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00911.py -- tests/files/web/generated/M16-GAP-00911-operator-image.rotate_orthogonal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00911", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00911", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00912", + "gapId": "operator:image.sample", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00912-operator-image.sample.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00912.py -- tests/files/web/generated/M16-GAP-00912-operator-image.sample.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00912", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00912", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00913", + "gapId": "operator:image.sample_line", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00913-operator-image.sample_line.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00913.py -- tests/files/web/generated/M16-GAP-00913-operator-image.sample_line.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00913", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00913", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00914", + "gapId": "operator:image.save", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00914-operator-image.save.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00914.py -- tests/files/web/generated/M16-GAP-00914-operator-image.save.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00914", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00914", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00915", + "gapId": "operator:image.save_all_modified", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00915-operator-image.save_all_modified.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00915.py -- tests/files/web/generated/M16-GAP-00915-operator-image.save_all_modified.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00915", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00915", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00916", + "gapId": "operator:image.save_as", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00916-operator-image.save_as.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00916.py -- tests/files/web/generated/M16-GAP-00916-operator-image.save_as.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00916", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00916", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00917", + "gapId": "operator:image.save_sequence", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00917-operator-image.save_sequence.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00917.py -- tests/files/web/generated/M16-GAP-00917-operator-image.save_sequence.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00917", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00917", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00918", + "gapId": "operator:image.tile_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00918-operator-image.tile_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00918.py -- tests/files/web/generated/M16-GAP-00918-operator-image.tile_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00918", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00918", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00919", + "gapId": "operator:image.tile_fill", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00919-operator-image.tile_fill.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00919.py -- tests/files/web/generated/M16-GAP-00919-operator-image.tile_fill.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00919", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00919", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00920", + "gapId": "operator:image.tile_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00920-operator-image.tile_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00920.py -- tests/files/web/generated/M16-GAP-00920-operator-image.tile_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00920", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00920", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00921", + "gapId": "operator:image.unpack", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00921-operator-image.unpack.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00921.py -- tests/files/web/generated/M16-GAP-00921-operator-image.unpack.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00921", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00921", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00922", + "gapId": "operator:image.view_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00922-operator-image.view_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00922.py -- tests/files/web/generated/M16-GAP-00922-operator-image.view_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00922", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00922", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00923", + "gapId": "operator:image.view_center_cursor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00923-operator-image.view_center_cursor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00923.py -- tests/files/web/generated/M16-GAP-00923-operator-image.view_center_cursor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00923", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00923", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00924", + "gapId": "operator:image.view_cursor_center", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00924-operator-image.view_cursor_center.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00924.py -- tests/files/web/generated/M16-GAP-00924-operator-image.view_cursor_center.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00924", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00924", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00925", + "gapId": "operator:image.view_ndof", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00925-operator-image.view_ndof.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00925.py -- tests/files/web/generated/M16-GAP-00925-operator-image.view_ndof.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00925", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00925", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00926", + "gapId": "operator:image.view_pan", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00926-operator-image.view_pan.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00926.py -- tests/files/web/generated/M16-GAP-00926-operator-image.view_pan.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00926", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00926", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00927", + "gapId": "operator:image.view_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00927-operator-image.view_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00927.py -- tests/files/web/generated/M16-GAP-00927-operator-image.view_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00927", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00927", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00928", + "gapId": "operator:image.view_zoom", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00928-operator-image.view_zoom.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00928.py -- tests/files/web/generated/M16-GAP-00928-operator-image.view_zoom.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00928", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00928", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00929", + "gapId": "operator:image.view_zoom_border", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00929-operator-image.view_zoom_border.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00929.py -- tests/files/web/generated/M16-GAP-00929-operator-image.view_zoom_border.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00929", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00929", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00930", + "gapId": "operator:image.view_zoom_in", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00930-operator-image.view_zoom_in.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00930.py -- tests/files/web/generated/M16-GAP-00930-operator-image.view_zoom_in.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00930", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00930", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00931", + "gapId": "operator:image.view_zoom_out", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00931-operator-image.view_zoom_out.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00931.py -- tests/files/web/generated/M16-GAP-00931-operator-image.view_zoom_out.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00931", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00931", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00932", + "gapId": "operator:image.view_zoom_ratio", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00932-operator-image.view_zoom_ratio.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00932.py -- tests/files/web/generated/M16-GAP-00932-operator-image.view_zoom_ratio.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00932", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00932", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00933", + "gapId": "operator:import_anim.bvh", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00933-operator-import_anim.bvh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00933.py -- tests/files/web/generated/M16-GAP-00933-operator-import_anim.bvh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00933", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00933", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00934", + "gapId": "operator:import_curve.svg", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00934-operator-import_curve.svg.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00934.py -- tests/files/web/generated/M16-GAP-00934-operator-import_curve.svg.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00934", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00934", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00935", + "gapId": "operator:import_scene.fbx", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00935-operator-import_scene.fbx.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00935.py -- tests/files/web/generated/M16-GAP-00935-operator-import_scene.fbx.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00935", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00935", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00936", + "gapId": "operator:import_scene.gltf", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00936-operator-import_scene.gltf.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00936.py -- tests/files/web/generated/M16-GAP-00936-operator-import_scene.gltf.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00936", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00936", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00937", + "gapId": "operator:info.report_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00937-operator-info.report_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00937.py -- tests/files/web/generated/M16-GAP-00937-operator-info.report_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00937", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00937", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00938", + "gapId": "operator:info.report_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00938-operator-info.report_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00938.py -- tests/files/web/generated/M16-GAP-00938-operator-info.report_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00938", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00938", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00939", + "gapId": "operator:info.report_replay", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00939-operator-info.report_replay.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00939.py -- tests/files/web/generated/M16-GAP-00939-operator-info.report_replay.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00939", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00939", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00940", + "gapId": "operator:info.reports_display_update", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00940-operator-info.reports_display_update.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00940.py -- tests/files/web/generated/M16-GAP-00940-operator-info.reports_display_update.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00940", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00940", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00941", + "gapId": "operator:info.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00941-operator-info.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00941.py -- tests/files/web/generated/M16-GAP-00941-operator-info.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00941", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00941", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00942", + "gapId": "operator:info.select_box", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00942-operator-info.select_box.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00942.py -- tests/files/web/generated/M16-GAP-00942-operator-info.select_box.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00942", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00942", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00943", + "gapId": "operator:info.select_pick", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00943-operator-info.select_pick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00943.py -- tests/files/web/generated/M16-GAP-00943-operator-info.select_pick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00943", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00943", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00944", + "gapId": "operator:lattice.flip", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00944-operator-lattice.flip.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00944.py -- tests/files/web/generated/M16-GAP-00944-operator-lattice.flip.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00944", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00944", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00945", + "gapId": "operator:lattice.make_regular", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00945-operator-lattice.make_regular.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00945.py -- tests/files/web/generated/M16-GAP-00945-operator-lattice.make_regular.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00945", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00945", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00946", + "gapId": "operator:lattice.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00946-operator-lattice.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00946.py -- tests/files/web/generated/M16-GAP-00946-operator-lattice.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00946", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00946", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00947", + "gapId": "operator:lattice.select_less", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00947-operator-lattice.select_less.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00947.py -- tests/files/web/generated/M16-GAP-00947-operator-lattice.select_less.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00947", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00947", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00948", + "gapId": "operator:lattice.select_mirror", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00948-operator-lattice.select_mirror.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00948.py -- tests/files/web/generated/M16-GAP-00948-operator-lattice.select_mirror.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00948", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00948", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00949", + "gapId": "operator:lattice.select_more", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00949-operator-lattice.select_more.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00949.py -- tests/files/web/generated/M16-GAP-00949-operator-lattice.select_more.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00949", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00949", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00950", + "gapId": "operator:lattice.select_random", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00950-operator-lattice.select_random.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00950.py -- tests/files/web/generated/M16-GAP-00950-operator-lattice.select_random.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00950", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00950", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00951", + "gapId": "operator:lattice.select_ungrouped", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00951-operator-lattice.select_ungrouped.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00951.py -- tests/files/web/generated/M16-GAP-00951-operator-lattice.select_ungrouped.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00951", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00951", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00952", + "gapId": "operator:marker.add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00952-operator-marker.add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00952.py -- tests/files/web/generated/M16-GAP-00952-operator-marker.add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00952", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00952", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00953", + "gapId": "operator:marker.camera_bind", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00953-operator-marker.camera_bind.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00953.py -- tests/files/web/generated/M16-GAP-00953-operator-marker.camera_bind.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00953", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00953", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00954", + "gapId": "operator:marker.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00954-operator-marker.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00954.py -- tests/files/web/generated/M16-GAP-00954-operator-marker.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00954", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00954", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00955", + "gapId": "operator:marker.duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00955-operator-marker.duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00955.py -- tests/files/web/generated/M16-GAP-00955-operator-marker.duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00955", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00955", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00956", + "gapId": "operator:marker.make_links_scene", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00956-operator-marker.make_links_scene.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00956.py -- tests/files/web/generated/M16-GAP-00956-operator-marker.make_links_scene.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00956", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00956", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00957", + "gapId": "operator:marker.move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00957-operator-marker.move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00957.py -- tests/files/web/generated/M16-GAP-00957-operator-marker.move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00957", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00957", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00958", + "gapId": "operator:marker.rename", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00958-operator-marker.rename.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00958.py -- tests/files/web/generated/M16-GAP-00958-operator-marker.rename.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00958", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00958", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00959", + "gapId": "operator:marker.select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00959-operator-marker.select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00959.py -- tests/files/web/generated/M16-GAP-00959-operator-marker.select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00959", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00959", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00960", + "gapId": "operator:marker.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00960-operator-marker.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00960.py -- tests/files/web/generated/M16-GAP-00960-operator-marker.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00960", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00960", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00961", + "gapId": "operator:marker.select_box", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00961-operator-marker.select_box.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00961.py -- tests/files/web/generated/M16-GAP-00961-operator-marker.select_box.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00961", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00961", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00962", + "gapId": "operator:marker.select_leftright", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00962-operator-marker.select_leftright.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00962.py -- tests/files/web/generated/M16-GAP-00962-operator-marker.select_leftright.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00962", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00962", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00963", + "gapId": "operator:mask.add_feather_vertex", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00963-operator-mask.add_feather_vertex.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00963.py -- tests/files/web/generated/M16-GAP-00963-operator-mask.add_feather_vertex.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00963", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00963", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00964", + "gapId": "operator:mask.add_feather_vertex_slide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00964-operator-mask.add_feather_vertex_slide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00964.py -- tests/files/web/generated/M16-GAP-00964-operator-mask.add_feather_vertex_slide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00964", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00964", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00965", + "gapId": "operator:mask.add_vertex", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00965-operator-mask.add_vertex.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00965.py -- tests/files/web/generated/M16-GAP-00965-operator-mask.add_vertex.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00965", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00965", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00966", + "gapId": "operator:mask.add_vertex_slide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00966-operator-mask.add_vertex_slide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00966.py -- tests/files/web/generated/M16-GAP-00966-operator-mask.add_vertex_slide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00966", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00966", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00967", + "gapId": "operator:mask.copy_splines", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00967-operator-mask.copy_splines.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00967.py -- tests/files/web/generated/M16-GAP-00967-operator-mask.copy_splines.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00967", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00967", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00968", + "gapId": "operator:mask.cyclic_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00968-operator-mask.cyclic_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00968.py -- tests/files/web/generated/M16-GAP-00968-operator-mask.cyclic_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00968", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00968", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00969", + "gapId": "operator:mask.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00969-operator-mask.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00969.py -- tests/files/web/generated/M16-GAP-00969-operator-mask.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00969", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00969", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00970", + "gapId": "operator:mask.duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00970-operator-mask.duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00970.py -- tests/files/web/generated/M16-GAP-00970-operator-mask.duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00970", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00970", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00971", + "gapId": "operator:mask.duplicate_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00971-operator-mask.duplicate_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00971.py -- tests/files/web/generated/M16-GAP-00971-operator-mask.duplicate_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00971", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00971", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00972", + "gapId": "operator:mask.feather_weight_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00972-operator-mask.feather_weight_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00972.py -- tests/files/web/generated/M16-GAP-00972-operator-mask.feather_weight_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00972", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00972", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00973", + "gapId": "operator:mask.handle_type_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00973-operator-mask.handle_type_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00973.py -- tests/files/web/generated/M16-GAP-00973-operator-mask.handle_type_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00973", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00973", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00974", + "gapId": "operator:mask.hide_view_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00974-operator-mask.hide_view_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00974.py -- tests/files/web/generated/M16-GAP-00974-operator-mask.hide_view_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00974", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00974", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00975", + "gapId": "operator:mask.hide_view_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00975-operator-mask.hide_view_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00975.py -- tests/files/web/generated/M16-GAP-00975-operator-mask.hide_view_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00975", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00975", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00976", + "gapId": "operator:mask.layer_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00976-operator-mask.layer_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00976.py -- tests/files/web/generated/M16-GAP-00976-operator-mask.layer_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00976", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00976", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00977", + "gapId": "operator:mask.layer_new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00977-operator-mask.layer_new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00977.py -- tests/files/web/generated/M16-GAP-00977-operator-mask.layer_new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00977", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00977", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00978", + "gapId": "operator:mask.layer_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00978-operator-mask.layer_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00978.py -- tests/files/web/generated/M16-GAP-00978-operator-mask.layer_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00978", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00978", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00979", + "gapId": "operator:mask.move_to_layer", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00979-operator-mask.move_to_layer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00979.py -- tests/files/web/generated/M16-GAP-00979-operator-mask.move_to_layer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00979", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00979", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00980", + "gapId": "operator:mask.new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00980-operator-mask.new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00980.py -- tests/files/web/generated/M16-GAP-00980-operator-mask.new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00980", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00980", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00981", + "gapId": "operator:mask.normals_make_consistent", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00981-operator-mask.normals_make_consistent.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00981.py -- tests/files/web/generated/M16-GAP-00981-operator-mask.normals_make_consistent.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00981", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00981", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00982", + "gapId": "operator:mask.parent_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00982-operator-mask.parent_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00982.py -- tests/files/web/generated/M16-GAP-00982-operator-mask.parent_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00982", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00982", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00983", + "gapId": "operator:mask.parent_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00983-operator-mask.parent_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00983.py -- tests/files/web/generated/M16-GAP-00983-operator-mask.parent_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00983", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00983", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00984", + "gapId": "operator:mask.paste_splines", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00984-operator-mask.paste_splines.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00984.py -- tests/files/web/generated/M16-GAP-00984-operator-mask.paste_splines.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00984", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00984", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00985", + "gapId": "operator:mask.primitive_circle_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00985-operator-mask.primitive_circle_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00985.py -- tests/files/web/generated/M16-GAP-00985-operator-mask.primitive_circle_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00985", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00985", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00986", + "gapId": "operator:mask.primitive_square_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00986-operator-mask.primitive_square_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00986.py -- tests/files/web/generated/M16-GAP-00986-operator-mask.primitive_square_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00986", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00986", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00987", + "gapId": "operator:mask.select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00987-operator-mask.select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00987.py -- tests/files/web/generated/M16-GAP-00987-operator-mask.select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00987", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00987", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00988", + "gapId": "operator:mask.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00988-operator-mask.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00988.py -- tests/files/web/generated/M16-GAP-00988-operator-mask.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00988", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00988", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00989", + "gapId": "operator:mask.select_box", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00989-operator-mask.select_box.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00989.py -- tests/files/web/generated/M16-GAP-00989-operator-mask.select_box.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00989", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00989", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00990", + "gapId": "operator:mask.select_circle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00990-operator-mask.select_circle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00990.py -- tests/files/web/generated/M16-GAP-00990-operator-mask.select_circle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00990", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00990", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00991", + "gapId": "operator:mask.select_lasso", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00991-operator-mask.select_lasso.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00991.py -- tests/files/web/generated/M16-GAP-00991-operator-mask.select_lasso.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00991", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00991", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00992", + "gapId": "operator:mask.select_less", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00992-operator-mask.select_less.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00992.py -- tests/files/web/generated/M16-GAP-00992-operator-mask.select_less.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00992", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00992", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00993", + "gapId": "operator:mask.select_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00993-operator-mask.select_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00993.py -- tests/files/web/generated/M16-GAP-00993-operator-mask.select_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00993", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00993", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00994", + "gapId": "operator:mask.select_linked_pick", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00994-operator-mask.select_linked_pick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00994.py -- tests/files/web/generated/M16-GAP-00994-operator-mask.select_linked_pick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00994", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00994", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00995", + "gapId": "operator:mask.select_more", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00995-operator-mask.select_more.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00995.py -- tests/files/web/generated/M16-GAP-00995-operator-mask.select_more.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00995", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00995", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00996", + "gapId": "operator:mask.shape_key_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00996-operator-mask.shape_key_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00996.py -- tests/files/web/generated/M16-GAP-00996-operator-mask.shape_key_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00996", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00996", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00997", + "gapId": "operator:mask.shape_key_feather_reset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00997-operator-mask.shape_key_feather_reset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00997.py -- tests/files/web/generated/M16-GAP-00997-operator-mask.shape_key_feather_reset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00997", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00997", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00998", + "gapId": "operator:mask.shape_key_insert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00998-operator-mask.shape_key_insert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00998.py -- tests/files/web/generated/M16-GAP-00998-operator-mask.shape_key_insert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00998", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00998", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00999", + "gapId": "operator:mask.shape_key_rekey", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00999-operator-mask.shape_key_rekey.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00999.py -- tests/files/web/generated/M16-GAP-00999-operator-mask.shape_key_rekey.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00999", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00999", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01000", + "gapId": "operator:mask.slide_point", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01000-operator-mask.slide_point.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01000.py -- tests/files/web/generated/M16-GAP-01000-operator-mask.slide_point.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01000", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01000", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01001", + "gapId": "operator:mask.slide_spline_curvature", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01001-operator-mask.slide_spline_curvature.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01001.py -- tests/files/web/generated/M16-GAP-01001-operator-mask.slide_spline_curvature.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01001", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01001", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01002", + "gapId": "operator:mask.switch_direction", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01002-operator-mask.switch_direction.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01002.py -- tests/files/web/generated/M16-GAP-01002-operator-mask.switch_direction.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01002", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01002", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01003", + "gapId": "operator:material.copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01003-operator-material.copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01003.py -- tests/files/web/generated/M16-GAP-01003-operator-material.copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01003", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01003", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01004", + "gapId": "operator:material.new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01004-operator-material.new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01004.py -- tests/files/web/generated/M16-GAP-01004-operator-material.new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01004", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01004", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01005", + "gapId": "operator:material.paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01005-operator-material.paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01005.py -- tests/files/web/generated/M16-GAP-01005-operator-material.paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01005", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01005", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01006", + "gapId": "operator:mball.delete_metaelems", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01006-operator-mball.delete_metaelems.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01006.py -- tests/files/web/generated/M16-GAP-01006-operator-mball.delete_metaelems.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01006", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01006", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01007", + "gapId": "operator:mball.duplicate_metaelems", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01007-operator-mball.duplicate_metaelems.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01007.py -- tests/files/web/generated/M16-GAP-01007-operator-mball.duplicate_metaelems.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01007", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01007", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01008", + "gapId": "operator:mball.duplicate_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01008-operator-mball.duplicate_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01008.py -- tests/files/web/generated/M16-GAP-01008-operator-mball.duplicate_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01008", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01008", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01009", + "gapId": "operator:mball.hide_metaelems", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01009-operator-mball.hide_metaelems.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01009.py -- tests/files/web/generated/M16-GAP-01009-operator-mball.hide_metaelems.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01009", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01009", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01010", + "gapId": "operator:mball.reveal_metaelems", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01010-operator-mball.reveal_metaelems.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01010.py -- tests/files/web/generated/M16-GAP-01010-operator-mball.reveal_metaelems.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01010", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01010", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01011", + "gapId": "operator:mball.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01011-operator-mball.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01011.py -- tests/files/web/generated/M16-GAP-01011-operator-mball.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01011", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01011", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01012", + "gapId": "operator:mball.select_random_metaelems", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01012-operator-mball.select_random_metaelems.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01012.py -- tests/files/web/generated/M16-GAP-01012-operator-mball.select_random_metaelems.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01012", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01012", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01013", + "gapId": "operator:mball.select_similar", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01013-operator-mball.select_similar.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01013.py -- tests/files/web/generated/M16-GAP-01013-operator-mball.select_similar.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01013", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01013", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01014", + "gapId": "operator:mesh.attribute_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01014-operator-mesh.attribute_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01014.py -- tests/files/web/generated/M16-GAP-01014-operator-mesh.attribute_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01014", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01014", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01015", + "gapId": "operator:mesh.average_normals", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01015-operator-mesh.average_normals.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01015.py -- tests/files/web/generated/M16-GAP-01015-operator-mesh.average_normals.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01015", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01015", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01016", + "gapId": "operator:mesh.beautify_fill", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01016-operator-mesh.beautify_fill.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01016.py -- tests/files/web/generated/M16-GAP-01016-operator-mesh.beautify_fill.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01016", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01016", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01017", + "gapId": "operator:mesh.bevel", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01017-operator-mesh.bevel.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01017.py -- tests/files/web/generated/M16-GAP-01017-operator-mesh.bevel.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01017", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01017", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01018", + "gapId": "operator:mesh.bisect", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01018-operator-mesh.bisect.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01018.py -- tests/files/web/generated/M16-GAP-01018-operator-mesh.bisect.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01018", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01018", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01019", + "gapId": "operator:mesh.blend_from_shape", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01019-operator-mesh.blend_from_shape.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01019.py -- tests/files/web/generated/M16-GAP-01019-operator-mesh.blend_from_shape.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01019", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01019", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01020", + "gapId": "operator:mesh.bridge_edge_loops", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01020-operator-mesh.bridge_edge_loops.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01020.py -- tests/files/web/generated/M16-GAP-01020-operator-mesh.bridge_edge_loops.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01020", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01020", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01021", + "gapId": "operator:mesh.circularize", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01021-operator-mesh.circularize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01021.py -- tests/files/web/generated/M16-GAP-01021-operator-mesh.circularize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01021", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01021", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01022", + "gapId": "operator:mesh.colors_reverse", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01022-operator-mesh.colors_reverse.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01022.py -- tests/files/web/generated/M16-GAP-01022-operator-mesh.colors_reverse.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01022", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01022", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01023", + "gapId": "operator:mesh.colors_rotate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01023-operator-mesh.colors_rotate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01023.py -- tests/files/web/generated/M16-GAP-01023-operator-mesh.colors_rotate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01023", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01023", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01024", + "gapId": "operator:mesh.convex_hull", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01024-operator-mesh.convex_hull.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01024.py -- tests/files/web/generated/M16-GAP-01024-operator-mesh.convex_hull.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01024", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01024", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01025", + "gapId": "operator:mesh.customdata_custom_splitnormals_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01025-operator-mesh.customdata_custom_splitnormals_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01025.py -- tests/files/web/generated/M16-GAP-01025-operator-mesh.customdata_custom_splitnormals_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01025", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01025", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01026", + "gapId": "operator:mesh.customdata_custom_splitnormals_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01026-operator-mesh.customdata_custom_splitnormals_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01026.py -- tests/files/web/generated/M16-GAP-01026-operator-mesh.customdata_custom_splitnormals_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01026", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01026", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01027", + "gapId": "operator:mesh.customdata_face_sets_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01027-operator-mesh.customdata_face_sets_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01027.py -- tests/files/web/generated/M16-GAP-01027-operator-mesh.customdata_face_sets_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01027", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01027", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01028", + "gapId": "operator:mesh.customdata_mask_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01028-operator-mesh.customdata_mask_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01028.py -- tests/files/web/generated/M16-GAP-01028-operator-mesh.customdata_mask_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01028", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01028", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01029", + "gapId": "operator:mesh.customdata_skin_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01029-operator-mesh.customdata_skin_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01029.py -- tests/files/web/generated/M16-GAP-01029-operator-mesh.customdata_skin_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01029", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01029", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01030", + "gapId": "operator:mesh.customdata_skin_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01030-operator-mesh.customdata_skin_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01030.py -- tests/files/web/generated/M16-GAP-01030-operator-mesh.customdata_skin_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01030", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01030", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01031", + "gapId": "operator:mesh.decimate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01031-operator-mesh.decimate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01031.py -- tests/files/web/generated/M16-GAP-01031-operator-mesh.decimate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01031", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01031", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01032", + "gapId": "operator:mesh.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01032-operator-mesh.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01032.py -- tests/files/web/generated/M16-GAP-01032-operator-mesh.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01032", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01032", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01033", + "gapId": "operator:mesh.delete_edgeloop", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01033-operator-mesh.delete_edgeloop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01033.py -- tests/files/web/generated/M16-GAP-01033-operator-mesh.delete_edgeloop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01033", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01033", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01034", + "gapId": "operator:mesh.delete_loose", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01034-operator-mesh.delete_loose.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01034.py -- tests/files/web/generated/M16-GAP-01034-operator-mesh.delete_loose.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01034", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01034", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01035", + "gapId": "operator:mesh.dissolve_degenerate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01035-operator-mesh.dissolve_degenerate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01035.py -- tests/files/web/generated/M16-GAP-01035-operator-mesh.dissolve_degenerate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01035", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01035", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01036", + "gapId": "operator:mesh.dissolve_edges", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01036-operator-mesh.dissolve_edges.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01036.py -- tests/files/web/generated/M16-GAP-01036-operator-mesh.dissolve_edges.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01036", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01036", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01037", + "gapId": "operator:mesh.dissolve_faces", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01037-operator-mesh.dissolve_faces.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01037.py -- tests/files/web/generated/M16-GAP-01037-operator-mesh.dissolve_faces.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01037", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01037", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01038", + "gapId": "operator:mesh.dissolve_limited", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01038-operator-mesh.dissolve_limited.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01038.py -- tests/files/web/generated/M16-GAP-01038-operator-mesh.dissolve_limited.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01038", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01038", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01039", + "gapId": "operator:mesh.dissolve_mode", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01039-operator-mesh.dissolve_mode.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01039.py -- tests/files/web/generated/M16-GAP-01039-operator-mesh.dissolve_mode.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01039", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01039", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01040", + "gapId": "operator:mesh.dissolve_verts", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01040-operator-mesh.dissolve_verts.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01040.py -- tests/files/web/generated/M16-GAP-01040-operator-mesh.dissolve_verts.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01040", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01040", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01041", + "gapId": "operator:mesh.dupli_extrude_cursor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01041-operator-mesh.dupli_extrude_cursor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01041.py -- tests/files/web/generated/M16-GAP-01041-operator-mesh.dupli_extrude_cursor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01041", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01041", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01042", + "gapId": "operator:mesh.duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01042-operator-mesh.duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01042.py -- tests/files/web/generated/M16-GAP-01042-operator-mesh.duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01042", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01042", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01043", + "gapId": "operator:mesh.duplicate_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01043-operator-mesh.duplicate_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01043.py -- tests/files/web/generated/M16-GAP-01043-operator-mesh.duplicate_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01043", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01043", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01044", + "gapId": "operator:mesh.edge_collapse", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01044-operator-mesh.edge_collapse.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01044.py -- tests/files/web/generated/M16-GAP-01044-operator-mesh.edge_collapse.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01044", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01044", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01045", + "gapId": "operator:mesh.edge_face_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01045-operator-mesh.edge_face_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01045.py -- tests/files/web/generated/M16-GAP-01045-operator-mesh.edge_face_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01045", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01045", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01046", + "gapId": "operator:mesh.edge_rotate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01046-operator-mesh.edge_rotate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01046.py -- tests/files/web/generated/M16-GAP-01046-operator-mesh.edge_rotate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01046", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01046", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01047", + "gapId": "operator:mesh.edge_split", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01047-operator-mesh.edge_split.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01047.py -- tests/files/web/generated/M16-GAP-01047-operator-mesh.edge_split.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01047", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01047", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01048", + "gapId": "operator:mesh.edgering_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01048-operator-mesh.edgering_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01048.py -- tests/files/web/generated/M16-GAP-01048-operator-mesh.edgering_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01048", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01048", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01049", + "gapId": "operator:mesh.edges_select_sharp", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01049-operator-mesh.edges_select_sharp.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01049.py -- tests/files/web/generated/M16-GAP-01049-operator-mesh.edges_select_sharp.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01049", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01049", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01050", + "gapId": "operator:mesh.extrude_context", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01050-operator-mesh.extrude_context.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01050.py -- tests/files/web/generated/M16-GAP-01050-operator-mesh.extrude_context.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01050", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01050", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01051", + "gapId": "operator:mesh.extrude_context_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01051-operator-mesh.extrude_context_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01051.py -- tests/files/web/generated/M16-GAP-01051-operator-mesh.extrude_context_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01051", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01051", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01052", + "gapId": "operator:mesh.extrude_edges_indiv", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01052-operator-mesh.extrude_edges_indiv.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01052.py -- tests/files/web/generated/M16-GAP-01052-operator-mesh.extrude_edges_indiv.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01052", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01052", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01053", + "gapId": "operator:mesh.extrude_edges_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01053-operator-mesh.extrude_edges_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01053.py -- tests/files/web/generated/M16-GAP-01053-operator-mesh.extrude_edges_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01053", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01053", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01054", + "gapId": "operator:mesh.extrude_faces_indiv", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01054-operator-mesh.extrude_faces_indiv.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01054.py -- tests/files/web/generated/M16-GAP-01054-operator-mesh.extrude_faces_indiv.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01054", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01054", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01055", + "gapId": "operator:mesh.extrude_faces_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01055-operator-mesh.extrude_faces_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01055.py -- tests/files/web/generated/M16-GAP-01055-operator-mesh.extrude_faces_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01055", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01055", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01056", + "gapId": "operator:mesh.extrude_manifold", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01056-operator-mesh.extrude_manifold.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01056.py -- tests/files/web/generated/M16-GAP-01056-operator-mesh.extrude_manifold.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01056", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01056", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01057", + "gapId": "operator:mesh.extrude_region", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01057-operator-mesh.extrude_region.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01057.py -- tests/files/web/generated/M16-GAP-01057-operator-mesh.extrude_region.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01057", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01057", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01058", + "gapId": "operator:mesh.extrude_region_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01058-operator-mesh.extrude_region_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01058.py -- tests/files/web/generated/M16-GAP-01058-operator-mesh.extrude_region_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01058", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01058", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01059", + "gapId": "operator:mesh.extrude_region_shrink_fatten", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01059-operator-mesh.extrude_region_shrink_fatten.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01059.py -- tests/files/web/generated/M16-GAP-01059-operator-mesh.extrude_region_shrink_fatten.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01059", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01059", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01060", + "gapId": "operator:mesh.extrude_repeat", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01060-operator-mesh.extrude_repeat.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01060.py -- tests/files/web/generated/M16-GAP-01060-operator-mesh.extrude_repeat.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01060", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01060", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01061", + "gapId": "operator:mesh.extrude_vertices_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01061-operator-mesh.extrude_vertices_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01061.py -- tests/files/web/generated/M16-GAP-01061-operator-mesh.extrude_vertices_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01061", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01061", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01062", + "gapId": "operator:mesh.extrude_verts_indiv", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01062-operator-mesh.extrude_verts_indiv.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01062.py -- tests/files/web/generated/M16-GAP-01062-operator-mesh.extrude_verts_indiv.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01062", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01062", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01063", + "gapId": "operator:mesh.face_make_planar", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01063-operator-mesh.face_make_planar.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01063.py -- tests/files/web/generated/M16-GAP-01063-operator-mesh.face_make_planar.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01063", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01063", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01064", + "gapId": "operator:mesh.face_split_by_edges", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01064-operator-mesh.face_split_by_edges.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01064.py -- tests/files/web/generated/M16-GAP-01064-operator-mesh.face_split_by_edges.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01064", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01064", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01065", + "gapId": "operator:mesh.faces_select_linked_flat", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01065-operator-mesh.faces_select_linked_flat.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01065.py -- tests/files/web/generated/M16-GAP-01065-operator-mesh.faces_select_linked_flat.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01065", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01065", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01066", + "gapId": "operator:mesh.faces_shade_flat", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01066-operator-mesh.faces_shade_flat.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01066.py -- tests/files/web/generated/M16-GAP-01066-operator-mesh.faces_shade_flat.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01066", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01066", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01067", + "gapId": "operator:mesh.faces_shade_smooth", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01067-operator-mesh.faces_shade_smooth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01067.py -- tests/files/web/generated/M16-GAP-01067-operator-mesh.faces_shade_smooth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01067", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01067", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01068", + "gapId": "operator:mesh.fill", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01068-operator-mesh.fill.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01068.py -- tests/files/web/generated/M16-GAP-01068-operator-mesh.fill.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01068", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01068", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01069", + "gapId": "operator:mesh.fill_grid", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01069-operator-mesh.fill_grid.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01069.py -- tests/files/web/generated/M16-GAP-01069-operator-mesh.fill_grid.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01069", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01069", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01070", + "gapId": "operator:mesh.fill_holes", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01070-operator-mesh.fill_holes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01070.py -- tests/files/web/generated/M16-GAP-01070-operator-mesh.fill_holes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01070", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01070", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01071", + "gapId": "operator:mesh.flatten", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01071-operator-mesh.flatten.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01071.py -- tests/files/web/generated/M16-GAP-01071-operator-mesh.flatten.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01071", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01071", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01072", + "gapId": "operator:mesh.flip_normals", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01072-operator-mesh.flip_normals.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01072.py -- tests/files/web/generated/M16-GAP-01072-operator-mesh.flip_normals.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01072", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01072", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01073", + "gapId": "operator:mesh.flip_quad_tessellation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01073-operator-mesh.flip_quad_tessellation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01073.py -- tests/files/web/generated/M16-GAP-01073-operator-mesh.flip_quad_tessellation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01073", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01073", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01074", + "gapId": "operator:mesh.hide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01074-operator-mesh.hide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01074.py -- tests/files/web/generated/M16-GAP-01074-operator-mesh.hide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01074", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01074", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01075", + "gapId": "operator:mesh.inset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01075-operator-mesh.inset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01075.py -- tests/files/web/generated/M16-GAP-01075-operator-mesh.inset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01075", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01075", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01076", + "gapId": "operator:mesh.intersect", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01076-operator-mesh.intersect.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01076.py -- tests/files/web/generated/M16-GAP-01076-operator-mesh.intersect.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01076", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01076", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01077", + "gapId": "operator:mesh.intersect_boolean", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01077-operator-mesh.intersect_boolean.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01077.py -- tests/files/web/generated/M16-GAP-01077-operator-mesh.intersect_boolean.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01077", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01077", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01078", + "gapId": "operator:mesh.knife_project", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01078-operator-mesh.knife_project.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01078.py -- tests/files/web/generated/M16-GAP-01078-operator-mesh.knife_project.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01078", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01078", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01079", + "gapId": "operator:mesh.knife_tool", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01079-operator-mesh.knife_tool.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01079.py -- tests/files/web/generated/M16-GAP-01079-operator-mesh.knife_tool.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01079", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01079", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01080", + "gapId": "operator:mesh.loop_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01080-operator-mesh.loop_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01080.py -- tests/files/web/generated/M16-GAP-01080-operator-mesh.loop_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01080", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01080", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01081", + "gapId": "operator:mesh.loop_to_region", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01081-operator-mesh.loop_to_region.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01081.py -- tests/files/web/generated/M16-GAP-01081-operator-mesh.loop_to_region.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01081", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01081", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01082", + "gapId": "operator:mesh.loopcut", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01082-operator-mesh.loopcut.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01082.py -- tests/files/web/generated/M16-GAP-01082-operator-mesh.loopcut.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01082", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01082", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01083", + "gapId": "operator:mesh.loopcut_slide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01083-operator-mesh.loopcut_slide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01083.py -- tests/files/web/generated/M16-GAP-01083-operator-mesh.loopcut_slide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01083", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01083", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01084", + "gapId": "operator:mesh.mark_freestyle_edge", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01084-operator-mesh.mark_freestyle_edge.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01084.py -- tests/files/web/generated/M16-GAP-01084-operator-mesh.mark_freestyle_edge.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01084", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01084", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01085", + "gapId": "operator:mesh.mark_freestyle_face", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01085-operator-mesh.mark_freestyle_face.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01085.py -- tests/files/web/generated/M16-GAP-01085-operator-mesh.mark_freestyle_face.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01085", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01085", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01086", + "gapId": "operator:mesh.mark_seam", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01086-operator-mesh.mark_seam.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01086.py -- tests/files/web/generated/M16-GAP-01086-operator-mesh.mark_seam.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01086", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01086", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01087", + "gapId": "operator:mesh.mark_sharp", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01087-operator-mesh.mark_sharp.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01087.py -- tests/files/web/generated/M16-GAP-01087-operator-mesh.mark_sharp.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01087", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01087", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01088", + "gapId": "operator:mesh.merge", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01088-operator-mesh.merge.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01088.py -- tests/files/web/generated/M16-GAP-01088-operator-mesh.merge.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01088", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01088", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01089", + "gapId": "operator:mesh.merge_normals", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01089-operator-mesh.merge_normals.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01089.py -- tests/files/web/generated/M16-GAP-01089-operator-mesh.merge_normals.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01089", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01089", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01090", + "gapId": "operator:mesh.mod_weighted_strength", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01090-operator-mesh.mod_weighted_strength.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01090.py -- tests/files/web/generated/M16-GAP-01090-operator-mesh.mod_weighted_strength.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01090", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01090", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01091", + "gapId": "operator:mesh.normals_make_consistent", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01091-operator-mesh.normals_make_consistent.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01091.py -- tests/files/web/generated/M16-GAP-01091-operator-mesh.normals_make_consistent.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01091", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01091", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01092", + "gapId": "operator:mesh.normals_tools", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01092-operator-mesh.normals_tools.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01092.py -- tests/files/web/generated/M16-GAP-01092-operator-mesh.normals_tools.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01092", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01092", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01093", + "gapId": "operator:mesh.offset_edge_loops", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01093-operator-mesh.offset_edge_loops.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01093.py -- tests/files/web/generated/M16-GAP-01093-operator-mesh.offset_edge_loops.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01093", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01093", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01094", + "gapId": "operator:mesh.offset_edge_loops_slide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01094-operator-mesh.offset_edge_loops_slide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01094.py -- tests/files/web/generated/M16-GAP-01094-operator-mesh.offset_edge_loops_slide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01094", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01094", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01095", + "gapId": "operator:mesh.point_normals", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01095-operator-mesh.point_normals.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01095.py -- tests/files/web/generated/M16-GAP-01095-operator-mesh.point_normals.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01095", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01095", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01096", + "gapId": "operator:mesh.poke", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01096-operator-mesh.poke.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01096.py -- tests/files/web/generated/M16-GAP-01096-operator-mesh.poke.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01096", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01096", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01097", + "gapId": "operator:mesh.polybuild_delete_at_cursor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01097-operator-mesh.polybuild_delete_at_cursor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01097.py -- tests/files/web/generated/M16-GAP-01097-operator-mesh.polybuild_delete_at_cursor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01097", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01097", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01098", + "gapId": "operator:mesh.polybuild_dissolve_at_cursor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01098-operator-mesh.polybuild_dissolve_at_cursor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01098.py -- tests/files/web/generated/M16-GAP-01098-operator-mesh.polybuild_dissolve_at_cursor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01098", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01098", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01099", + "gapId": "operator:mesh.polybuild_extrude_at_cursor_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01099-operator-mesh.polybuild_extrude_at_cursor_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01099.py -- tests/files/web/generated/M16-GAP-01099-operator-mesh.polybuild_extrude_at_cursor_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01099", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01099", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01100", + "gapId": "operator:mesh.polybuild_face_at_cursor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01100-operator-mesh.polybuild_face_at_cursor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01100.py -- tests/files/web/generated/M16-GAP-01100-operator-mesh.polybuild_face_at_cursor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01100", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01100", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01101", + "gapId": "operator:mesh.polybuild_face_at_cursor_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01101-operator-mesh.polybuild_face_at_cursor_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01101.py -- tests/files/web/generated/M16-GAP-01101-operator-mesh.polybuild_face_at_cursor_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01101", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01101", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01102", + "gapId": "operator:mesh.polybuild_split_at_cursor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01102-operator-mesh.polybuild_split_at_cursor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01102.py -- tests/files/web/generated/M16-GAP-01102-operator-mesh.polybuild_split_at_cursor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01102", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01102", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01103", + "gapId": "operator:mesh.polybuild_split_at_cursor_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01103-operator-mesh.polybuild_split_at_cursor_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01103.py -- tests/files/web/generated/M16-GAP-01103-operator-mesh.polybuild_split_at_cursor_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01103", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01103", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01104", + "gapId": "operator:mesh.polybuild_transform_at_cursor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01104-operator-mesh.polybuild_transform_at_cursor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01104.py -- tests/files/web/generated/M16-GAP-01104-operator-mesh.polybuild_transform_at_cursor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01104", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01104", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01105", + "gapId": "operator:mesh.polybuild_transform_at_cursor_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01105-operator-mesh.polybuild_transform_at_cursor_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01105.py -- tests/files/web/generated/M16-GAP-01105-operator-mesh.polybuild_transform_at_cursor_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01105", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01105", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01106", + "gapId": "operator:mesh.primitive_circle_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01106-operator-mesh.primitive_circle_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01106.py -- tests/files/web/generated/M16-GAP-01106-operator-mesh.primitive_circle_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01106", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01106", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01107", + "gapId": "operator:mesh.primitive_cone_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01107-operator-mesh.primitive_cone_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01107.py -- tests/files/web/generated/M16-GAP-01107-operator-mesh.primitive_cone_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01107", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01107", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01108", + "gapId": "operator:mesh.primitive_cube_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01108-operator-mesh.primitive_cube_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01108.py -- tests/files/web/generated/M16-GAP-01108-operator-mesh.primitive_cube_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01108", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01108", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01109", + "gapId": "operator:mesh.primitive_cube_add_gizmo", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01109-operator-mesh.primitive_cube_add_gizmo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01109.py -- tests/files/web/generated/M16-GAP-01109-operator-mesh.primitive_cube_add_gizmo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01109", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01109", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01110", + "gapId": "operator:mesh.primitive_cylinder_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01110-operator-mesh.primitive_cylinder_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01110.py -- tests/files/web/generated/M16-GAP-01110-operator-mesh.primitive_cylinder_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01110", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01110", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01111", + "gapId": "operator:mesh.primitive_grid_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01111-operator-mesh.primitive_grid_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01111.py -- tests/files/web/generated/M16-GAP-01111-operator-mesh.primitive_grid_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01111", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01111", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01112", + "gapId": "operator:mesh.primitive_ico_sphere_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01112-operator-mesh.primitive_ico_sphere_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01112.py -- tests/files/web/generated/M16-GAP-01112-operator-mesh.primitive_ico_sphere_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01112", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01112", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01113", + "gapId": "operator:mesh.primitive_monkey_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01113-operator-mesh.primitive_monkey_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01113.py -- tests/files/web/generated/M16-GAP-01113-operator-mesh.primitive_monkey_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01113", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01113", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01114", + "gapId": "operator:mesh.primitive_plane_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01114-operator-mesh.primitive_plane_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01114.py -- tests/files/web/generated/M16-GAP-01114-operator-mesh.primitive_plane_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01114", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01114", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01115", + "gapId": "operator:mesh.primitive_torus_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01115-operator-mesh.primitive_torus_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01115.py -- tests/files/web/generated/M16-GAP-01115-operator-mesh.primitive_torus_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01115", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01115", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01116", + "gapId": "operator:mesh.primitive_uv_sphere_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01116-operator-mesh.primitive_uv_sphere_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01116.py -- tests/files/web/generated/M16-GAP-01116-operator-mesh.primitive_uv_sphere_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01116", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01116", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01117", + "gapId": "operator:mesh.quads_convert_to_tris", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01117-operator-mesh.quads_convert_to_tris.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01117.py -- tests/files/web/generated/M16-GAP-01117-operator-mesh.quads_convert_to_tris.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01117", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01117", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01118", + "gapId": "operator:mesh.region_to_loop", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01118-operator-mesh.region_to_loop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01118.py -- tests/files/web/generated/M16-GAP-01118-operator-mesh.region_to_loop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01118", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01118", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01119", + "gapId": "operator:mesh.remove_doubles", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01119-operator-mesh.remove_doubles.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01119.py -- tests/files/web/generated/M16-GAP-01119-operator-mesh.remove_doubles.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01119", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01119", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01120", + "gapId": "operator:mesh.reorder_vertices_spatial", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01120-operator-mesh.reorder_vertices_spatial.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01120.py -- tests/files/web/generated/M16-GAP-01120-operator-mesh.reorder_vertices_spatial.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01120", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01120", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01121", + "gapId": "operator:mesh.reveal", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01121-operator-mesh.reveal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01121.py -- tests/files/web/generated/M16-GAP-01121-operator-mesh.reveal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01121", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01121", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01122", + "gapId": "operator:mesh.rip", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01122-operator-mesh.rip.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01122.py -- tests/files/web/generated/M16-GAP-01122-operator-mesh.rip.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01122", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01122", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01123", + "gapId": "operator:mesh.rip_edge", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01123-operator-mesh.rip_edge.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01123.py -- tests/files/web/generated/M16-GAP-01123-operator-mesh.rip_edge.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01123", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01123", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01124", + "gapId": "operator:mesh.rip_edge_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01124-operator-mesh.rip_edge_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01124.py -- tests/files/web/generated/M16-GAP-01124-operator-mesh.rip_edge_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01124", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01124", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01125", + "gapId": "operator:mesh.rip_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01125-operator-mesh.rip_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01125.py -- tests/files/web/generated/M16-GAP-01125-operator-mesh.rip_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01125", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01125", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01126", + "gapId": "operator:mesh.screw", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01126-operator-mesh.screw.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01126.py -- tests/files/web/generated/M16-GAP-01126-operator-mesh.screw.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01126", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01126", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01127", + "gapId": "operator:mesh.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01127-operator-mesh.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01127.py -- tests/files/web/generated/M16-GAP-01127-operator-mesh.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01127", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01127", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01128", + "gapId": "operator:mesh.select_axis", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01128-operator-mesh.select_axis.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01128.py -- tests/files/web/generated/M16-GAP-01128-operator-mesh.select_axis.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01128", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01128", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01129", + "gapId": "operator:mesh.select_boundary_loop_multi", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01129-operator-mesh.select_boundary_loop_multi.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01129.py -- tests/files/web/generated/M16-GAP-01129-operator-mesh.select_boundary_loop_multi.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01129", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01129", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01130", + "gapId": "operator:mesh.select_by_attribute", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01130-operator-mesh.select_by_attribute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01130.py -- tests/files/web/generated/M16-GAP-01130-operator-mesh.select_by_attribute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01130", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01130", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01131", + "gapId": "operator:mesh.select_by_pole_count", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01131-operator-mesh.select_by_pole_count.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01131.py -- tests/files/web/generated/M16-GAP-01131-operator-mesh.select_by_pole_count.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01131", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01131", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01132", + "gapId": "operator:mesh.select_edge_loop_multi", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01132-operator-mesh.select_edge_loop_multi.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01132.py -- tests/files/web/generated/M16-GAP-01132-operator-mesh.select_edge_loop_multi.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01132", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01132", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01133", + "gapId": "operator:mesh.select_edge_ring_multi", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01133-operator-mesh.select_edge_ring_multi.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01133.py -- tests/files/web/generated/M16-GAP-01133-operator-mesh.select_edge_ring_multi.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01133", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01133", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01134", + "gapId": "operator:mesh.select_face_by_sides", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01134-operator-mesh.select_face_by_sides.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01134.py -- tests/files/web/generated/M16-GAP-01134-operator-mesh.select_face_by_sides.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01134", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01134", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01135", + "gapId": "operator:mesh.select_interior_faces", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01135-operator-mesh.select_interior_faces.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01135.py -- tests/files/web/generated/M16-GAP-01135-operator-mesh.select_interior_faces.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01135", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01135", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01136", + "gapId": "operator:mesh.select_less", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01136-operator-mesh.select_less.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01136.py -- tests/files/web/generated/M16-GAP-01136-operator-mesh.select_less.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01136", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01136", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01137", + "gapId": "operator:mesh.select_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01137-operator-mesh.select_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01137.py -- tests/files/web/generated/M16-GAP-01137-operator-mesh.select_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01137", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01137", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01138", + "gapId": "operator:mesh.select_linked_pick", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01138-operator-mesh.select_linked_pick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01138.py -- tests/files/web/generated/M16-GAP-01138-operator-mesh.select_linked_pick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01138", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01138", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01139", + "gapId": "operator:mesh.select_loose", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01139-operator-mesh.select_loose.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01139.py -- tests/files/web/generated/M16-GAP-01139-operator-mesh.select_loose.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01139", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01139", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01140", + "gapId": "operator:mesh.select_mirror", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01140-operator-mesh.select_mirror.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01140.py -- tests/files/web/generated/M16-GAP-01140-operator-mesh.select_mirror.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01140", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01140", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01141", + "gapId": "operator:mesh.select_mode", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01141-operator-mesh.select_mode.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01141.py -- tests/files/web/generated/M16-GAP-01141-operator-mesh.select_mode.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01141", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01141", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01142", + "gapId": "operator:mesh.select_more", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01142-operator-mesh.select_more.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01142.py -- tests/files/web/generated/M16-GAP-01142-operator-mesh.select_more.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01142", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01142", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01143", + "gapId": "operator:mesh.select_next_item", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01143-operator-mesh.select_next_item.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01143.py -- tests/files/web/generated/M16-GAP-01143-operator-mesh.select_next_item.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01143", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01143", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01144", + "gapId": "operator:mesh.select_non_manifold", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01144-operator-mesh.select_non_manifold.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01144.py -- tests/files/web/generated/M16-GAP-01144-operator-mesh.select_non_manifold.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01144", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01144", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01145", + "gapId": "operator:mesh.select_nth", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01145-operator-mesh.select_nth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01145.py -- tests/files/web/generated/M16-GAP-01145-operator-mesh.select_nth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01145", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01145", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01146", + "gapId": "operator:mesh.select_prev_item", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01146-operator-mesh.select_prev_item.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01146.py -- tests/files/web/generated/M16-GAP-01146-operator-mesh.select_prev_item.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01146", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01146", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01147", + "gapId": "operator:mesh.select_random", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01147-operator-mesh.select_random.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01147.py -- tests/files/web/generated/M16-GAP-01147-operator-mesh.select_random.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01147", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01147", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01148", + "gapId": "operator:mesh.select_similar", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01148-operator-mesh.select_similar.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01148.py -- tests/files/web/generated/M16-GAP-01148-operator-mesh.select_similar.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01148", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01148", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01149", + "gapId": "operator:mesh.select_similar_region", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01149-operator-mesh.select_similar_region.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01149.py -- tests/files/web/generated/M16-GAP-01149-operator-mesh.select_similar_region.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01149", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01149", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01150", + "gapId": "operator:mesh.select_ungrouped", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01150-operator-mesh.select_ungrouped.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01150.py -- tests/files/web/generated/M16-GAP-01150-operator-mesh.select_ungrouped.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01150", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01150", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01151", + "gapId": "operator:mesh.separate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01151-operator-mesh.separate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01151.py -- tests/files/web/generated/M16-GAP-01151-operator-mesh.separate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01151", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01151", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01152", + "gapId": "operator:mesh.set_normals_from_faces", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01152-operator-mesh.set_normals_from_faces.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01152.py -- tests/files/web/generated/M16-GAP-01152-operator-mesh.set_normals_from_faces.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01152", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01152", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01153", + "gapId": "operator:mesh.set_sharpness_by_angle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01153-operator-mesh.set_sharpness_by_angle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01153.py -- tests/files/web/generated/M16-GAP-01153-operator-mesh.set_sharpness_by_angle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01153", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01153", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01154", + "gapId": "operator:mesh.shape_propagate_to_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01154-operator-mesh.shape_propagate_to_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01154.py -- tests/files/web/generated/M16-GAP-01154-operator-mesh.shape_propagate_to_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01154", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01154", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01155", + "gapId": "operator:mesh.shortest_path_pick", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01155-operator-mesh.shortest_path_pick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01155.py -- tests/files/web/generated/M16-GAP-01155-operator-mesh.shortest_path_pick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01155", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01155", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01156", + "gapId": "operator:mesh.shortest_path_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01156-operator-mesh.shortest_path_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01156.py -- tests/files/web/generated/M16-GAP-01156-operator-mesh.shortest_path_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01156", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01156", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01157", + "gapId": "operator:mesh.smooth_normals", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01157-operator-mesh.smooth_normals.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01157.py -- tests/files/web/generated/M16-GAP-01157-operator-mesh.smooth_normals.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01157", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01157", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01158", + "gapId": "operator:mesh.solidify", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01158-operator-mesh.solidify.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01158.py -- tests/files/web/generated/M16-GAP-01158-operator-mesh.solidify.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01158", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01158", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01159", + "gapId": "operator:mesh.sort_elements", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01159-operator-mesh.sort_elements.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01159.py -- tests/files/web/generated/M16-GAP-01159-operator-mesh.sort_elements.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01159", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01159", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01160", + "gapId": "operator:mesh.space_edge_loops_evenly", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01160-operator-mesh.space_edge_loops_evenly.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01160.py -- tests/files/web/generated/M16-GAP-01160-operator-mesh.space_edge_loops_evenly.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01160", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01160", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01161", + "gapId": "operator:mesh.spin", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01161-operator-mesh.spin.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01161.py -- tests/files/web/generated/M16-GAP-01161-operator-mesh.spin.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01161", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01161", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01162", + "gapId": "operator:mesh.split", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01162-operator-mesh.split.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01162.py -- tests/files/web/generated/M16-GAP-01162-operator-mesh.split.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01162", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01162", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01163", + "gapId": "operator:mesh.split_normals", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01163-operator-mesh.split_normals.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01163.py -- tests/files/web/generated/M16-GAP-01163-operator-mesh.split_normals.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01163", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01163", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01164", + "gapId": "operator:mesh.subdivide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01164-operator-mesh.subdivide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01164.py -- tests/files/web/generated/M16-GAP-01164-operator-mesh.subdivide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01164", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01164", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01165", + "gapId": "operator:mesh.subdivide_edgering", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01165-operator-mesh.subdivide_edgering.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01165.py -- tests/files/web/generated/M16-GAP-01165-operator-mesh.subdivide_edgering.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01165", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01165", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01166", + "gapId": "operator:mesh.symmetrize", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01166-operator-mesh.symmetrize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01166.py -- tests/files/web/generated/M16-GAP-01166-operator-mesh.symmetrize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01166", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01166", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01167", + "gapId": "operator:mesh.symmetry_snap", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01167-operator-mesh.symmetry_snap.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01167.py -- tests/files/web/generated/M16-GAP-01167-operator-mesh.symmetry_snap.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01167", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01167", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01168", + "gapId": "operator:mesh.tris_convert_to_quads", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01168-operator-mesh.tris_convert_to_quads.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01168.py -- tests/files/web/generated/M16-GAP-01168-operator-mesh.tris_convert_to_quads.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01168", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01168", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01169", + "gapId": "operator:mesh.unsubdivide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01169-operator-mesh.unsubdivide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01169.py -- tests/files/web/generated/M16-GAP-01169-operator-mesh.unsubdivide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01169", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01169", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01170", + "gapId": "operator:mesh.uv_texture_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01170-operator-mesh.uv_texture_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01170.py -- tests/files/web/generated/M16-GAP-01170-operator-mesh.uv_texture_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01170", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01170", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01171", + "gapId": "operator:mesh.uv_texture_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01171-operator-mesh.uv_texture_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01171.py -- tests/files/web/generated/M16-GAP-01171-operator-mesh.uv_texture_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01171", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01171", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01172", + "gapId": "operator:mesh.uvs_reverse", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01172-operator-mesh.uvs_reverse.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01172.py -- tests/files/web/generated/M16-GAP-01172-operator-mesh.uvs_reverse.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01172", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01172", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01173", + "gapId": "operator:mesh.uvs_rotate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01173-operator-mesh.uvs_rotate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01173.py -- tests/files/web/generated/M16-GAP-01173-operator-mesh.uvs_rotate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01173", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01173", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01174", + "gapId": "operator:mesh.vert_connect", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01174-operator-mesh.vert_connect.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01174.py -- tests/files/web/generated/M16-GAP-01174-operator-mesh.vert_connect.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01174", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01174", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01175", + "gapId": "operator:mesh.vert_connect_concave", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01175-operator-mesh.vert_connect_concave.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01175.py -- tests/files/web/generated/M16-GAP-01175-operator-mesh.vert_connect_concave.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01175", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01175", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01176", + "gapId": "operator:mesh.vert_connect_nonplanar", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01176-operator-mesh.vert_connect_nonplanar.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01176.py -- tests/files/web/generated/M16-GAP-01176-operator-mesh.vert_connect_nonplanar.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01176", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01176", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01177", + "gapId": "operator:mesh.vert_connect_path", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01177-operator-mesh.vert_connect_path.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01177.py -- tests/files/web/generated/M16-GAP-01177-operator-mesh.vert_connect_path.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01177", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01177", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01178", + "gapId": "operator:mesh.vertices_smooth", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01178-operator-mesh.vertices_smooth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01178.py -- tests/files/web/generated/M16-GAP-01178-operator-mesh.vertices_smooth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01178", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01178", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01179", + "gapId": "operator:mesh.vertices_smooth_laplacian", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01179-operator-mesh.vertices_smooth_laplacian.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01179.py -- tests/files/web/generated/M16-GAP-01179-operator-mesh.vertices_smooth_laplacian.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01179", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01179", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01180", + "gapId": "operator:mesh.wireframe", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01180-operator-mesh.wireframe.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01180.py -- tests/files/web/generated/M16-GAP-01180-operator-mesh.wireframe.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01180", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01180", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01181", + "gapId": "operator:nla.action_pushdown", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01181-operator-nla.action_pushdown.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01181.py -- tests/files/web/generated/M16-GAP-01181-operator-nla.action_pushdown.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01181", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01181", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01182", + "gapId": "operator:nla.action_sync_length", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01182-operator-nla.action_sync_length.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01182.py -- tests/files/web/generated/M16-GAP-01182-operator-nla.action_sync_length.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01182", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01182", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01183", + "gapId": "operator:nla.action_unlink", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01183-operator-nla.action_unlink.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01183.py -- tests/files/web/generated/M16-GAP-01183-operator-nla.action_unlink.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01183", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01183", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01184", + "gapId": "operator:nla.actionclip_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01184-operator-nla.actionclip_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01184.py -- tests/files/web/generated/M16-GAP-01184-operator-nla.actionclip_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01184", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01184", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01185", + "gapId": "operator:nla.apply_scale", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01185-operator-nla.apply_scale.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01185.py -- tests/files/web/generated/M16-GAP-01185-operator-nla.apply_scale.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01185", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01185", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01186", + "gapId": "operator:nla.bake", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01186-operator-nla.bake.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01186.py -- tests/files/web/generated/M16-GAP-01186-operator-nla.bake.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01186", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01186", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01187", + "gapId": "operator:nla.channels_click", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01187-operator-nla.channels_click.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01187.py -- tests/files/web/generated/M16-GAP-01187-operator-nla.channels_click.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01187", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01187", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01188", + "gapId": "operator:nla.clear_scale", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01188-operator-nla.clear_scale.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01188.py -- tests/files/web/generated/M16-GAP-01188-operator-nla.clear_scale.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01188", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01188", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01189", + "gapId": "operator:nla.click_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01189-operator-nla.click_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01189.py -- tests/files/web/generated/M16-GAP-01189-operator-nla.click_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01189", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01189", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01190", + "gapId": "operator:nla.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01190-operator-nla.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01190.py -- tests/files/web/generated/M16-GAP-01190-operator-nla.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01190", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01190", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01191", + "gapId": "operator:nla.duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01191-operator-nla.duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01191.py -- tests/files/web/generated/M16-GAP-01191-operator-nla.duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01191", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01191", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01192", + "gapId": "operator:nla.duplicate_linked_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01192-operator-nla.duplicate_linked_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01192.py -- tests/files/web/generated/M16-GAP-01192-operator-nla.duplicate_linked_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01192", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01192", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01193", + "gapId": "operator:nla.duplicate_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01193-operator-nla.duplicate_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01193.py -- tests/files/web/generated/M16-GAP-01193-operator-nla.duplicate_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01193", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01193", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01194", + "gapId": "operator:nla.fmodifier_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01194-operator-nla.fmodifier_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01194.py -- tests/files/web/generated/M16-GAP-01194-operator-nla.fmodifier_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01194", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01194", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01195", + "gapId": "operator:nla.fmodifier_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01195-operator-nla.fmodifier_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01195.py -- tests/files/web/generated/M16-GAP-01195-operator-nla.fmodifier_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01195", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01195", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01196", + "gapId": "operator:nla.fmodifier_paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01196-operator-nla.fmodifier_paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01196.py -- tests/files/web/generated/M16-GAP-01196-operator-nla.fmodifier_paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01196", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01196", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01197", + "gapId": "operator:nla.make_single_user", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01197-operator-nla.make_single_user.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01197.py -- tests/files/web/generated/M16-GAP-01197-operator-nla.make_single_user.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01197", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01197", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01198", + "gapId": "operator:nla.meta_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01198-operator-nla.meta_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01198.py -- tests/files/web/generated/M16-GAP-01198-operator-nla.meta_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01198", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01198", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01199", + "gapId": "operator:nla.meta_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01199-operator-nla.meta_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01199.py -- tests/files/web/generated/M16-GAP-01199-operator-nla.meta_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01199", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01199", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01200", + "gapId": "operator:nla.move_down", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01200-operator-nla.move_down.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01200.py -- tests/files/web/generated/M16-GAP-01200-operator-nla.move_down.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01200", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01200", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01201", + "gapId": "operator:nla.move_up", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01201-operator-nla.move_up.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01201.py -- tests/files/web/generated/M16-GAP-01201-operator-nla.move_up.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01201", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01201", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01202", + "gapId": "operator:nla.mute_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01202-operator-nla.mute_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01202.py -- tests/files/web/generated/M16-GAP-01202-operator-nla.mute_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01202", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01202", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01203", + "gapId": "operator:nla.previewrange_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01203-operator-nla.previewrange_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01203.py -- tests/files/web/generated/M16-GAP-01203-operator-nla.previewrange_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01203", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01203", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01204", + "gapId": "operator:nla.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01204-operator-nla.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01204.py -- tests/files/web/generated/M16-GAP-01204-operator-nla.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01204", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01204", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01205", + "gapId": "operator:nla.select_box", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01205-operator-nla.select_box.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01205.py -- tests/files/web/generated/M16-GAP-01205-operator-nla.select_box.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01205", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01205", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01206", + "gapId": "operator:nla.select_leftright", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01206-operator-nla.select_leftright.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01206.py -- tests/files/web/generated/M16-GAP-01206-operator-nla.select_leftright.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01206", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01206", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01207", + "gapId": "operator:nla.selected_objects_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01207-operator-nla.selected_objects_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01207.py -- tests/files/web/generated/M16-GAP-01207-operator-nla.selected_objects_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01207", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01207", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01208", + "gapId": "operator:nla.snap", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01208-operator-nla.snap.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01208.py -- tests/files/web/generated/M16-GAP-01208-operator-nla.snap.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01208", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01208", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01209", + "gapId": "operator:nla.soundclip_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01209-operator-nla.soundclip_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01209.py -- tests/files/web/generated/M16-GAP-01209-operator-nla.soundclip_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01209", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01209", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01210", + "gapId": "operator:nla.split", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01210-operator-nla.split.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01210.py -- tests/files/web/generated/M16-GAP-01210-operator-nla.split.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01210", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01210", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01211", + "gapId": "operator:nla.swap", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01211-operator-nla.swap.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01211.py -- tests/files/web/generated/M16-GAP-01211-operator-nla.swap.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01211", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01211", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01212", + "gapId": "operator:nla.tracks_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01212-operator-nla.tracks_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01212.py -- tests/files/web/generated/M16-GAP-01212-operator-nla.tracks_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01212", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01212", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01213", + "gapId": "operator:nla.tracks_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01213-operator-nla.tracks_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01213.py -- tests/files/web/generated/M16-GAP-01213-operator-nla.tracks_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01213", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01213", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01214", + "gapId": "operator:nla.transition_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01214-operator-nla.transition_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01214.py -- tests/files/web/generated/M16-GAP-01214-operator-nla.transition_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01214", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01214", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01215", + "gapId": "operator:nla.tweakmode_enter", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01215-operator-nla.tweakmode_enter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01215.py -- tests/files/web/generated/M16-GAP-01215-operator-nla.tweakmode_enter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01215", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01215", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01216", + "gapId": "operator:nla.tweakmode_exit", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01216-operator-nla.tweakmode_exit.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01216.py -- tests/files/web/generated/M16-GAP-01216-operator-nla.tweakmode_exit.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01216", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01216", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01217", + "gapId": "operator:nla.view_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01217-operator-nla.view_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01217.py -- tests/files/web/generated/M16-GAP-01217-operator-nla.view_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01217", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01217", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01218", + "gapId": "operator:nla.view_frame", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01218-operator-nla.view_frame.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01218.py -- tests/files/web/generated/M16-GAP-01218-operator-nla.view_frame.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01218", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01218", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01219", + "gapId": "operator:nla.view_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01219-operator-nla.view_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01219.py -- tests/files/web/generated/M16-GAP-01219-operator-nla.view_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01219", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01219", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01220", + "gapId": "operator:node.activate_viewer", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01220-operator-node.activate_viewer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01220.py -- tests/files/web/generated/M16-GAP-01220-operator-node.activate_viewer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01220", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01220", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01221", + "gapId": "operator:node.add_closure_zone", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01221-operator-node.add_closure_zone.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01221.py -- tests/files/web/generated/M16-GAP-01221-operator-node.add_closure_zone.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01221", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01221", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01222", + "gapId": "operator:node.add_collection", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01222-operator-node.add_collection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01222.py -- tests/files/web/generated/M16-GAP-01222-operator-node.add_collection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01222", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01222", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01223", + "gapId": "operator:node.add_color", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01223-operator-node.add_color.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01223.py -- tests/files/web/generated/M16-GAP-01223-operator-node.add_color.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01223", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01223", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01224", + "gapId": "operator:node.add_empty_group", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01224-operator-node.add_empty_group.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01224.py -- tests/files/web/generated/M16-GAP-01224-operator-node.add_empty_group.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01224", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01224", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01225", + "gapId": "operator:node.add_foreach_geometry_element_zone", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01225-operator-node.add_foreach_geometry_element_zone.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01225.py -- tests/files/web/generated/M16-GAP-01225-operator-node.add_foreach_geometry_element_zone.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01225", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01225", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01226", + "gapId": "operator:node.add_group", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01226-operator-node.add_group.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01226.py -- tests/files/web/generated/M16-GAP-01226-operator-node.add_group.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01226", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01226", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01227", + "gapId": "operator:node.add_group_asset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01227-operator-node.add_group_asset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01227.py -- tests/files/web/generated/M16-GAP-01227-operator-node.add_group_asset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01227", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01227", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01228", + "gapId": "operator:node.add_group_input_node", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01228-operator-node.add_group_input_node.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01228.py -- tests/files/web/generated/M16-GAP-01228-operator-node.add_group_input_node.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01228", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01228", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01229", + "gapId": "operator:node.add_image", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01229-operator-node.add_image.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01229.py -- tests/files/web/generated/M16-GAP-01229-operator-node.add_image.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01229", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01229", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01230", + "gapId": "operator:node.add_import_node", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01230-operator-node.add_import_node.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01230.py -- tests/files/web/generated/M16-GAP-01230-operator-node.add_import_node.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01230", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01230", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01231", + "gapId": "operator:node.add_mask", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01231-operator-node.add_mask.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01231.py -- tests/files/web/generated/M16-GAP-01231-operator-node.add_mask.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01231", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01231", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01232", + "gapId": "operator:node.add_material", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01232-operator-node.add_material.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01232.py -- tests/files/web/generated/M16-GAP-01232-operator-node.add_material.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01232", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01232", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01233", + "gapId": "operator:node.add_node", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01233-operator-node.add_node.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01233.py -- tests/files/web/generated/M16-GAP-01233-operator-node.add_node.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01233", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01233", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01234", + "gapId": "operator:node.add_object", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01234-operator-node.add_object.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01234.py -- tests/files/web/generated/M16-GAP-01234-operator-node.add_object.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01234", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01234", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01235", + "gapId": "operator:node.add_repeat_zone", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01235-operator-node.add_repeat_zone.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01235.py -- tests/files/web/generated/M16-GAP-01235-operator-node.add_repeat_zone.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01235", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01235", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01236", + "gapId": "operator:node.add_reroute", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01236-operator-node.add_reroute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01236.py -- tests/files/web/generated/M16-GAP-01236-operator-node.add_reroute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01236", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01236", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01237", + "gapId": "operator:node.add_simulation_zone", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01237-operator-node.add_simulation_zone.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01237.py -- tests/files/web/generated/M16-GAP-01237-operator-node.add_simulation_zone.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01237", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01237", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01238", + "gapId": "operator:node.add_typed_bundle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01238-operator-node.add_typed_bundle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01238.py -- tests/files/web/generated/M16-GAP-01238-operator-node.add_typed_bundle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01238", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01238", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01239", + "gapId": "operator:node.add_zone", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01239-operator-node.add_zone.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01239.py -- tests/files/web/generated/M16-GAP-01239-operator-node.add_zone.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01239", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01239", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01240", + "gapId": "operator:node.attach", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01240-operator-node.attach.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01240.py -- tests/files/web/generated/M16-GAP-01240-operator-node.attach.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01240", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01240", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01241", + "gapId": "operator:node.backimage_fit", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01241-operator-node.backimage_fit.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01241.py -- tests/files/web/generated/M16-GAP-01241-operator-node.backimage_fit.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01241", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01241", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01242", + "gapId": "operator:node.backimage_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01242-operator-node.backimage_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01242.py -- tests/files/web/generated/M16-GAP-01242-operator-node.backimage_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01242", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01242", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01243", + "gapId": "operator:node.backimage_sample", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01243-operator-node.backimage_sample.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01243.py -- tests/files/web/generated/M16-GAP-01243-operator-node.backimage_sample.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01243", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01243", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01244", + "gapId": "operator:node.backimage_zoom", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01244-operator-node.backimage_zoom.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01244.py -- tests/files/web/generated/M16-GAP-01244-operator-node.backimage_zoom.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01244", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01244", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01245", + "gapId": "operator:node.bake_node_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01245-operator-node.bake_node_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01245.py -- tests/files/web/generated/M16-GAP-01245-operator-node.bake_node_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01245", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01245", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01246", + "gapId": "operator:node.bake_node_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01246-operator-node.bake_node_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01246.py -- tests/files/web/generated/M16-GAP-01246-operator-node.bake_node_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01246", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01246", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01247", + "gapId": "operator:node.bake_node_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01247-operator-node.bake_node_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01247.py -- tests/files/web/generated/M16-GAP-01247-operator-node.bake_node_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01247", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01247", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01248", + "gapId": "operator:node.capture_attribute_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01248-operator-node.capture_attribute_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01248.py -- tests/files/web/generated/M16-GAP-01248-operator-node.capture_attribute_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01248", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01248", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01249", + "gapId": "operator:node.capture_attribute_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01249-operator-node.capture_attribute_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01249.py -- tests/files/web/generated/M16-GAP-01249-operator-node.capture_attribute_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01249", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01249", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01250", + "gapId": "operator:node.capture_attribute_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01250-operator-node.capture_attribute_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01250.py -- tests/files/web/generated/M16-GAP-01250-operator-node.capture_attribute_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01250", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01250", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01251", + "gapId": "operator:node.clear_viewer_border", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01251-operator-node.clear_viewer_border.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01251.py -- tests/files/web/generated/M16-GAP-01251-operator-node.clear_viewer_border.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01251", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01251", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01252", + "gapId": "operator:node.clipboard_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01252-operator-node.clipboard_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01252.py -- tests/files/web/generated/M16-GAP-01252-operator-node.clipboard_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01252", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01252", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01253", + "gapId": "operator:node.clipboard_paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01253-operator-node.clipboard_paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01253.py -- tests/files/web/generated/M16-GAP-01253-operator-node.clipboard_paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01253", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01253", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01254", + "gapId": "operator:node.closure_input_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01254-operator-node.closure_input_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01254.py -- tests/files/web/generated/M16-GAP-01254-operator-node.closure_input_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01254", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01254", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01255", + "gapId": "operator:node.closure_input_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01255-operator-node.closure_input_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01255.py -- tests/files/web/generated/M16-GAP-01255-operator-node.closure_input_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01255", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01255", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01256", + "gapId": "operator:node.closure_input_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01256-operator-node.closure_input_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01256.py -- tests/files/web/generated/M16-GAP-01256-operator-node.closure_input_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01256", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01256", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01257", + "gapId": "operator:node.closure_output_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01257-operator-node.closure_output_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01257.py -- tests/files/web/generated/M16-GAP-01257-operator-node.closure_output_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01257", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01257", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01258", + "gapId": "operator:node.closure_output_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01258-operator-node.closure_output_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01258.py -- tests/files/web/generated/M16-GAP-01258-operator-node.closure_output_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01258", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01258", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01259", + "gapId": "operator:node.closure_output_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01259-operator-node.closure_output_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01259.py -- tests/files/web/generated/M16-GAP-01259-operator-node.closure_output_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01259", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01259", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01260", + "gapId": "operator:node.closure_to_list_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01260-operator-node.closure_to_list_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01260.py -- tests/files/web/generated/M16-GAP-01260-operator-node.closure_to_list_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01260", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01260", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01261", + "gapId": "operator:node.closure_to_list_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01261-operator-node.closure_to_list_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01261.py -- tests/files/web/generated/M16-GAP-01261-operator-node.closure_to_list_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01261", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01261", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01262", + "gapId": "operator:node.closure_to_list_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01262-operator-node.closure_to_list_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01262.py -- tests/files/web/generated/M16-GAP-01262-operator-node.closure_to_list_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01262", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01262", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01263", + "gapId": "operator:node.collapse_hide_unused_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01263-operator-node.collapse_hide_unused_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01263.py -- tests/files/web/generated/M16-GAP-01263-operator-node.collapse_hide_unused_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01263", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01263", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01264", + "gapId": "operator:node.combine_bundle_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01264-operator-node.combine_bundle_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01264.py -- tests/files/web/generated/M16-GAP-01264-operator-node.combine_bundle_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01264", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01264", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01265", + "gapId": "operator:node.combine_bundle_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01265-operator-node.combine_bundle_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01265.py -- tests/files/web/generated/M16-GAP-01265-operator-node.combine_bundle_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01265", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01265", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01266", + "gapId": "operator:node.combine_bundle_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01266-operator-node.combine_bundle_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01266.py -- tests/files/web/generated/M16-GAP-01266-operator-node.combine_bundle_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01266", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01266", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01267", + "gapId": "operator:node.connect_to_output", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01267-operator-node.connect_to_output.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01267.py -- tests/files/web/generated/M16-GAP-01267-operator-node.connect_to_output.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01267", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01267", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01268", + "gapId": "operator:node.cryptomatte_layer_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01268-operator-node.cryptomatte_layer_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01268.py -- tests/files/web/generated/M16-GAP-01268-operator-node.cryptomatte_layer_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01268", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01268", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01269", + "gapId": "operator:node.cryptomatte_layer_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01269-operator-node.cryptomatte_layer_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01269.py -- tests/files/web/generated/M16-GAP-01269-operator-node.cryptomatte_layer_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01269", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01269", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01270", + "gapId": "operator:node.deactivate_viewer", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01270-operator-node.deactivate_viewer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01270.py -- tests/files/web/generated/M16-GAP-01270-operator-node.deactivate_viewer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01270", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01270", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01271", + "gapId": "operator:node.default_group_width_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01271-operator-node.default_group_width_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01271.py -- tests/files/web/generated/M16-GAP-01271-operator-node.default_group_width_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01271", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01271", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01272", + "gapId": "operator:node.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01272-operator-node.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01272.py -- tests/files/web/generated/M16-GAP-01272-operator-node.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01272", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01272", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01273", + "gapId": "operator:node.delete_copy_reconnect", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01273-operator-node.delete_copy_reconnect.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01273.py -- tests/files/web/generated/M16-GAP-01273-operator-node.delete_copy_reconnect.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01273", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01273", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01274", + "gapId": "operator:node.delete_reconnect", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01274-operator-node.delete_reconnect.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01274.py -- tests/files/web/generated/M16-GAP-01274-operator-node.delete_reconnect.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01274", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01274", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01275", + "gapId": "operator:node.detach", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01275-operator-node.detach.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01275.py -- tests/files/web/generated/M16-GAP-01275-operator-node.detach.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01275", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01275", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01276", + "gapId": "operator:node.detach_translate_attach", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01276-operator-node.detach_translate_attach.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01276.py -- tests/files/web/generated/M16-GAP-01276-operator-node.detach_translate_attach.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01276", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01276", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01277", + "gapId": "operator:node.duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01277-operator-node.duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01277.py -- tests/files/web/generated/M16-GAP-01277-operator-node.duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01277", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01277", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01278", + "gapId": "operator:node.duplicate_compositing_modifier_node_group", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01278-operator-node.duplicate_compositing_modifier_node_group.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01278.py -- tests/files/web/generated/M16-GAP-01278-operator-node.duplicate_compositing_modifier_node_group.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01278", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01278", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01279", + "gapId": "operator:node.duplicate_compositing_node_group", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01279-operator-node.duplicate_compositing_node_group.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01279.py -- tests/files/web/generated/M16-GAP-01279-operator-node.duplicate_compositing_node_group.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01279", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01279", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01280", + "gapId": "operator:node.duplicate_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01280-operator-node.duplicate_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01280.py -- tests/files/web/generated/M16-GAP-01280-operator-node.duplicate_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01280", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01280", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01281", + "gapId": "operator:node.duplicate_move_keep_inputs", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01281-operator-node.duplicate_move_keep_inputs.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01281.py -- tests/files/web/generated/M16-GAP-01281-operator-node.duplicate_move_keep_inputs.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01281", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01281", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01282", + "gapId": "operator:node.duplicate_move_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01282-operator-node.duplicate_move_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01282.py -- tests/files/web/generated/M16-GAP-01282-operator-node.duplicate_move_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01282", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01282", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01283", + "gapId": "operator:node.enum_definition_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01283-operator-node.enum_definition_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01283.py -- tests/files/web/generated/M16-GAP-01283-operator-node.enum_definition_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01283", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01283", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01284", + "gapId": "operator:node.enum_definition_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01284-operator-node.enum_definition_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01284.py -- tests/files/web/generated/M16-GAP-01284-operator-node.enum_definition_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01284", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01284", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01285", + "gapId": "operator:node.enum_definition_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01285-operator-node.enum_definition_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01285.py -- tests/files/web/generated/M16-GAP-01285-operator-node.enum_definition_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01285", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01285", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01286", + "gapId": "operator:node.evaluate_closure_input_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01286-operator-node.evaluate_closure_input_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01286.py -- tests/files/web/generated/M16-GAP-01286-operator-node.evaluate_closure_input_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01286", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01286", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01287", + "gapId": "operator:node.evaluate_closure_input_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01287-operator-node.evaluate_closure_input_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01287.py -- tests/files/web/generated/M16-GAP-01287-operator-node.evaluate_closure_input_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01287", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01287", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01288", + "gapId": "operator:node.evaluate_closure_input_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01288-operator-node.evaluate_closure_input_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01288.py -- tests/files/web/generated/M16-GAP-01288-operator-node.evaluate_closure_input_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01288", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01288", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01289", + "gapId": "operator:node.evaluate_closure_output_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01289-operator-node.evaluate_closure_output_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01289.py -- tests/files/web/generated/M16-GAP-01289-operator-node.evaluate_closure_output_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01289", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01289", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01290", + "gapId": "operator:node.evaluate_closure_output_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01290-operator-node.evaluate_closure_output_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01290.py -- tests/files/web/generated/M16-GAP-01290-operator-node.evaluate_closure_output_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01290", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01290", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01291", + "gapId": "operator:node.evaluate_closure_output_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01291-operator-node.evaluate_closure_output_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01291.py -- tests/files/web/generated/M16-GAP-01291-operator-node.evaluate_closure_output_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01291", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01291", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01292", + "gapId": "operator:node.field_to_grid_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01292-operator-node.field_to_grid_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01292.py -- tests/files/web/generated/M16-GAP-01292-operator-node.field_to_grid_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01292", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01292", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01293", + "gapId": "operator:node.field_to_grid_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01293-operator-node.field_to_grid_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01293.py -- tests/files/web/generated/M16-GAP-01293-operator-node.field_to_grid_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01293", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01293", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01294", + "gapId": "operator:node.field_to_grid_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01294-operator-node.field_to_grid_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01294.py -- tests/files/web/generated/M16-GAP-01294-operator-node.field_to_grid_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01294", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01294", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01295", + "gapId": "operator:node.field_to_list_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01295-operator-node.field_to_list_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01295.py -- tests/files/web/generated/M16-GAP-01295-operator-node.field_to_list_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01295", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01295", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01296", + "gapId": "operator:node.field_to_list_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01296-operator-node.field_to_list_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01296.py -- tests/files/web/generated/M16-GAP-01296-operator-node.field_to_list_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01296", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01296", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01297", + "gapId": "operator:node.field_to_list_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01297-operator-node.field_to_list_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01297.py -- tests/files/web/generated/M16-GAP-01297-operator-node.field_to_list_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01297", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01297", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01298", + "gapId": "operator:node.file_output_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01298-operator-node.file_output_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01298.py -- tests/files/web/generated/M16-GAP-01298-operator-node.file_output_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01298", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01298", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01299", + "gapId": "operator:node.file_output_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01299-operator-node.file_output_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01299.py -- tests/files/web/generated/M16-GAP-01299-operator-node.file_output_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01299", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01299", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01300", + "gapId": "operator:node.file_output_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01300-operator-node.file_output_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01300.py -- tests/files/web/generated/M16-GAP-01300-operator-node.file_output_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01300", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01300", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01301", + "gapId": "operator:node.find_node", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01301-operator-node.find_node.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01301.py -- tests/files/web/generated/M16-GAP-01301-operator-node.find_node.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01301", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01301", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01302", + "gapId": "operator:node.foreach_geometry_element_zone_generation_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01302-operator-node.foreach_geometry_element_zone_generation_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01302.py -- tests/files/web/generated/M16-GAP-01302-operator-node.foreach_geometry_element_zone_generation_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01302", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01302", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01303", + "gapId": "operator:node.foreach_geometry_element_zone_generation_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01303-operator-node.foreach_geometry_element_zone_generation_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01303.py -- tests/files/web/generated/M16-GAP-01303-operator-node.foreach_geometry_element_zone_generation_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01303", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01303", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01304", + "gapId": "operator:node.foreach_geometry_element_zone_generation_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01304-operator-node.foreach_geometry_element_zone_generation_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01304.py -- tests/files/web/generated/M16-GAP-01304-operator-node.foreach_geometry_element_zone_generation_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01304", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01304", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01305", + "gapId": "operator:node.foreach_geometry_element_zone_input_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01305-operator-node.foreach_geometry_element_zone_input_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01305.py -- tests/files/web/generated/M16-GAP-01305-operator-node.foreach_geometry_element_zone_input_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01305", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01305", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01306", + "gapId": "operator:node.foreach_geometry_element_zone_input_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01306-operator-node.foreach_geometry_element_zone_input_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01306.py -- tests/files/web/generated/M16-GAP-01306-operator-node.foreach_geometry_element_zone_input_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01306", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01306", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01307", + "gapId": "operator:node.foreach_geometry_element_zone_input_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01307-operator-node.foreach_geometry_element_zone_input_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01307.py -- tests/files/web/generated/M16-GAP-01307-operator-node.foreach_geometry_element_zone_input_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01307", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01307", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01308", + "gapId": "operator:node.foreach_geometry_element_zone_main_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01308-operator-node.foreach_geometry_element_zone_main_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01308.py -- tests/files/web/generated/M16-GAP-01308-operator-node.foreach_geometry_element_zone_main_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01308", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01308", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01309", + "gapId": "operator:node.foreach_geometry_element_zone_main_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01309-operator-node.foreach_geometry_element_zone_main_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01309.py -- tests/files/web/generated/M16-GAP-01309-operator-node.foreach_geometry_element_zone_main_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01309", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01309", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01310", + "gapId": "operator:node.foreach_geometry_element_zone_main_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01310-operator-node.foreach_geometry_element_zone_main_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01310.py -- tests/files/web/generated/M16-GAP-01310-operator-node.foreach_geometry_element_zone_main_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01310", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01310", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01311", + "gapId": "operator:node.format_string_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01311-operator-node.format_string_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01311.py -- tests/files/web/generated/M16-GAP-01311-operator-node.format_string_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01311", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01311", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01312", + "gapId": "operator:node.format_string_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01312-operator-node.format_string_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01312.py -- tests/files/web/generated/M16-GAP-01312-operator-node.format_string_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01312", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01312", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01313", + "gapId": "operator:node.format_string_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01313-operator-node.format_string_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01313.py -- tests/files/web/generated/M16-GAP-01313-operator-node.format_string_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01313", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01313", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01314", + "gapId": "operator:node.geometry_nodes_viewer_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01314-operator-node.geometry_nodes_viewer_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01314.py -- tests/files/web/generated/M16-GAP-01314-operator-node.geometry_nodes_viewer_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01314", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01314", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01315", + "gapId": "operator:node.geometry_nodes_viewer_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01315-operator-node.geometry_nodes_viewer_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01315.py -- tests/files/web/generated/M16-GAP-01315-operator-node.geometry_nodes_viewer_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01315", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01315", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01316", + "gapId": "operator:node.geometry_nodes_viewer_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01316-operator-node.geometry_nodes_viewer_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01316.py -- tests/files/web/generated/M16-GAP-01316-operator-node.geometry_nodes_viewer_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01316", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01316", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01317", + "gapId": "operator:node.gltf_settings_node_operator", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01317-operator-node.gltf_settings_node_operator.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01317.py -- tests/files/web/generated/M16-GAP-01317-operator-node.gltf_settings_node_operator.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01317", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01317", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01318", + "gapId": "operator:node.group_edit", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01318-operator-node.group_edit.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01318.py -- tests/files/web/generated/M16-GAP-01318-operator-node.group_edit.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01318", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01318", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01319", + "gapId": "operator:node.group_enter_exit", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01319-operator-node.group_enter_exit.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01319.py -- tests/files/web/generated/M16-GAP-01319-operator-node.group_enter_exit.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01319", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01319", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01320", + "gapId": "operator:node.group_insert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01320-operator-node.group_insert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01320.py -- tests/files/web/generated/M16-GAP-01320-operator-node.group_insert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01320", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01320", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01321", + "gapId": "operator:node.group_make", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01321-operator-node.group_make.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01321.py -- tests/files/web/generated/M16-GAP-01321-operator-node.group_make.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01321", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01321", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01322", + "gapId": "operator:node.group_separate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01322-operator-node.group_separate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01322.py -- tests/files/web/generated/M16-GAP-01322-operator-node.group_separate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01322", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01322", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01323", + "gapId": "operator:node.group_ungroup", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01323-operator-node.group_ungroup.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01323.py -- tests/files/web/generated/M16-GAP-01323-operator-node.group_ungroup.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01323", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01323", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01324", + "gapId": "operator:node.hide_socket_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01324-operator-node.hide_socket_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01324.py -- tests/files/web/generated/M16-GAP-01324-operator-node.hide_socket_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01324", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01324", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01325", + "gapId": "operator:node.hide_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01325-operator-node.hide_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01325.py -- tests/files/web/generated/M16-GAP-01325-operator-node.hide_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01325", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01325", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01326", + "gapId": "operator:node.index_switch_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01326-operator-node.index_switch_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01326.py -- tests/files/web/generated/M16-GAP-01326-operator-node.index_switch_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01326", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01326", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01327", + "gapId": "operator:node.index_switch_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01327-operator-node.index_switch_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01327.py -- tests/files/web/generated/M16-GAP-01327-operator-node.index_switch_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01327", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01327", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01328", + "gapId": "operator:node.index_switch_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01328-operator-node.index_switch_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01328.py -- tests/files/web/generated/M16-GAP-01328-operator-node.index_switch_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01328", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01328", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01329", + "gapId": "operator:node.insert_offset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01329-operator-node.insert_offset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01329.py -- tests/files/web/generated/M16-GAP-01329-operator-node.insert_offset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01329", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01329", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01330", + "gapId": "operator:node.interface_item_duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01330-operator-node.interface_item_duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01330.py -- tests/files/web/generated/M16-GAP-01330-operator-node.interface_item_duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01330", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01330", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01331", + "gapId": "operator:node.interface_item_make_panel_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01331-operator-node.interface_item_make_panel_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01331.py -- tests/files/web/generated/M16-GAP-01331-operator-node.interface_item_make_panel_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01331", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01331", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01332", + "gapId": "operator:node.interface_item_new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01332-operator-node.interface_item_new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01332.py -- tests/files/web/generated/M16-GAP-01332-operator-node.interface_item_new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01332", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01332", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01333", + "gapId": "operator:node.interface_item_new_panel_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01333-operator-node.interface_item_new_panel_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01333.py -- tests/files/web/generated/M16-GAP-01333-operator-node.interface_item_new_panel_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01333", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01333", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01334", + "gapId": "operator:node.interface_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01334-operator-node.interface_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01334.py -- tests/files/web/generated/M16-GAP-01334-operator-node.interface_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01334", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01334", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01335", + "gapId": "operator:node.interface_item_unlink_panel_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01335-operator-node.interface_item_unlink_panel_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01335.py -- tests/files/web/generated/M16-GAP-01335-operator-node.interface_item_unlink_panel_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01335", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01335", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01336", + "gapId": "operator:node.join", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01336-operator-node.join.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01336.py -- tests/files/web/generated/M16-GAP-01336-operator-node.join.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01336", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01336", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01337", + "gapId": "operator:node.join_named", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01337-operator-node.join_named.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01337.py -- tests/files/web/generated/M16-GAP-01337-operator-node.join_named.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01337", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01337", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01338", + "gapId": "operator:node.join_nodes", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01338-operator-node.join_nodes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01338.py -- tests/files/web/generated/M16-GAP-01338-operator-node.join_nodes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01338", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01338", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01339", + "gapId": "operator:node.link", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01339-operator-node.link.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01339.py -- tests/files/web/generated/M16-GAP-01339-operator-node.link.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01339", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01339", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01340", + "gapId": "operator:node.link_drag_operation_test", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01340-operator-node.link_drag_operation_test.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01340.py -- tests/files/web/generated/M16-GAP-01340-operator-node.link_drag_operation_test.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01340", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01340", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01341", + "gapId": "operator:node.link_make", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01341-operator-node.link_make.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01341.py -- tests/files/web/generated/M16-GAP-01341-operator-node.link_make.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01341", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01341", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01342", + "gapId": "operator:node.link_viewer", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01342-operator-node.link_viewer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01342.py -- tests/files/web/generated/M16-GAP-01342-operator-node.link_viewer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01342", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01342", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01343", + "gapId": "operator:node.links_cut", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01343-operator-node.links_cut.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01343.py -- tests/files/web/generated/M16-GAP-01343-operator-node.links_cut.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01343", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01343", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01344", + "gapId": "operator:node.links_detach", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01344-operator-node.links_detach.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01344.py -- tests/files/web/generated/M16-GAP-01344-operator-node.links_detach.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01344", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01344", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01345", + "gapId": "operator:node.links_mute", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01345-operator-node.links_mute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01345.py -- tests/files/web/generated/M16-GAP-01345-operator-node.links_mute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01345", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01345", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01346", + "gapId": "operator:node.move_detach_links", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01346-operator-node.move_detach_links.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01346.py -- tests/files/web/generated/M16-GAP-01346-operator-node.move_detach_links.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01346", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01346", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01347", + "gapId": "operator:node.move_detach_links_release", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01347-operator-node.move_detach_links_release.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01347.py -- tests/files/web/generated/M16-GAP-01347-operator-node.move_detach_links_release.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01347", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01347", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01348", + "gapId": "operator:node.mute_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01348-operator-node.mute_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01348.py -- tests/files/web/generated/M16-GAP-01348-operator-node.mute_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01348", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01348", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01349", + "gapId": "operator:node.new_compositing_node_group", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01349-operator-node.new_compositing_node_group.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01349.py -- tests/files/web/generated/M16-GAP-01349-operator-node.new_compositing_node_group.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01349", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01349", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01350", + "gapId": "operator:node.new_compositor_sequencer_node_group", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01350-operator-node.new_compositor_sequencer_node_group.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01350.py -- tests/files/web/generated/M16-GAP-01350-operator-node.new_compositor_sequencer_node_group.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01350", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01350", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01351", + "gapId": "operator:node.new_geometry_node_group_assign", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01351-operator-node.new_geometry_node_group_assign.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01351.py -- tests/files/web/generated/M16-GAP-01351-operator-node.new_geometry_node_group_assign.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01351", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01351", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01352", + "gapId": "operator:node.new_geometry_node_group_tool", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01352-operator-node.new_geometry_node_group_tool.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01352.py -- tests/files/web/generated/M16-GAP-01352-operator-node.new_geometry_node_group_tool.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01352", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01352", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01353", + "gapId": "operator:node.new_geometry_nodes_modifier", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01353-operator-node.new_geometry_nodes_modifier.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01353.py -- tests/files/web/generated/M16-GAP-01353-operator-node.new_geometry_nodes_modifier.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01353", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01353", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01354", + "gapId": "operator:node.new_node_tree", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01354-operator-node.new_node_tree.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01354.py -- tests/files/web/generated/M16-GAP-01354-operator-node.new_node_tree.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01354", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01354", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01355", + "gapId": "operator:node.node_color_preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01355-operator-node.node_color_preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01355.py -- tests/files/web/generated/M16-GAP-01355-operator-node.node_color_preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01355", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01355", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01356", + "gapId": "operator:node.node_copy_color", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01356-operator-node.node_copy_color.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01356.py -- tests/files/web/generated/M16-GAP-01356-operator-node.node_copy_color.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01356", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01356", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01357", + "gapId": "operator:node.options_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01357-operator-node.options_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01357.py -- tests/files/web/generated/M16-GAP-01357-operator-node.options_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01357", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01357", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01358", + "gapId": "operator:node.parent_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01358-operator-node.parent_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01358.py -- tests/files/web/generated/M16-GAP-01358-operator-node.parent_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01358", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01358", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01359", + "gapId": "operator:node.preview_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01359-operator-node.preview_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01359.py -- tests/files/web/generated/M16-GAP-01359-operator-node.preview_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01359", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01359", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01360", + "gapId": "operator:node.read_viewlayers", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01360-operator-node.read_viewlayers.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01360.py -- tests/files/web/generated/M16-GAP-01360-operator-node.read_viewlayers.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01360", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01360", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01361", + "gapId": "operator:node.render_changed", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01361-operator-node.render_changed.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01361.py -- tests/files/web/generated/M16-GAP-01361-operator-node.render_changed.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01361", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01361", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01362", + "gapId": "operator:node.repeat_zone_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01362-operator-node.repeat_zone_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01362.py -- tests/files/web/generated/M16-GAP-01362-operator-node.repeat_zone_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01362", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01362", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01363", + "gapId": "operator:node.repeat_zone_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01363-operator-node.repeat_zone_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01363.py -- tests/files/web/generated/M16-GAP-01363-operator-node.repeat_zone_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01363", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01363", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01364", + "gapId": "operator:node.repeat_zone_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01364-operator-node.repeat_zone_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01364.py -- tests/files/web/generated/M16-GAP-01364-operator-node.repeat_zone_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01364", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01364", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01365", + "gapId": "operator:node.resize", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01365-operator-node.resize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01365.py -- tests/files/web/generated/M16-GAP-01365-operator-node.resize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01365", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01365", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01366", + "gapId": "operator:node.sample_attribute_items_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01366-operator-node.sample_attribute_items_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01366.py -- tests/files/web/generated/M16-GAP-01366-operator-node.sample_attribute_items_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01366", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01366", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01367", + "gapId": "operator:node.sample_attribute_items_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01367-operator-node.sample_attribute_items_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01367.py -- tests/files/web/generated/M16-GAP-01367-operator-node.sample_attribute_items_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01367", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01367", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01368", + "gapId": "operator:node.sample_attribute_items_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01368-operator-node.sample_attribute_items_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01368.py -- tests/files/web/generated/M16-GAP-01368-operator-node.sample_attribute_items_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01368", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01368", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01369", + "gapId": "operator:node.select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01369-operator-node.select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01369.py -- tests/files/web/generated/M16-GAP-01369-operator-node.select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01369", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01369", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01370", + "gapId": "operator:node.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01370-operator-node.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01370.py -- tests/files/web/generated/M16-GAP-01370-operator-node.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01370", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01370", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01371", + "gapId": "operator:node.select_box", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01371-operator-node.select_box.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01371.py -- tests/files/web/generated/M16-GAP-01371-operator-node.select_box.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01371", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01371", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01372", + "gapId": "operator:node.select_circle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01372-operator-node.select_circle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01372.py -- tests/files/web/generated/M16-GAP-01372-operator-node.select_circle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01372", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01372", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01373", + "gapId": "operator:node.select_grouped", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01373-operator-node.select_grouped.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01373.py -- tests/files/web/generated/M16-GAP-01373-operator-node.select_grouped.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01373", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01373", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01374", + "gapId": "operator:node.select_lasso", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01374-operator-node.select_lasso.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01374.py -- tests/files/web/generated/M16-GAP-01374-operator-node.select_lasso.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01374", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01374", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01375", + "gapId": "operator:node.select_link_viewer", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01375-operator-node.select_link_viewer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01375.py -- tests/files/web/generated/M16-GAP-01375-operator-node.select_link_viewer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01375", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01375", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01376", + "gapId": "operator:node.select_linked_from", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01376-operator-node.select_linked_from.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01376.py -- tests/files/web/generated/M16-GAP-01376-operator-node.select_linked_from.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01376", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01376", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01377", + "gapId": "operator:node.select_linked_to", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01377-operator-node.select_linked_to.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01377.py -- tests/files/web/generated/M16-GAP-01377-operator-node.select_linked_to.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01377", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01377", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01378", + "gapId": "operator:node.select_same_type_step", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01378-operator-node.select_same_type_step.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01378.py -- tests/files/web/generated/M16-GAP-01378-operator-node.select_same_type_step.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01378", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01378", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01379", + "gapId": "operator:node.separate_bundle_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01379-operator-node.separate_bundle_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01379.py -- tests/files/web/generated/M16-GAP-01379-operator-node.separate_bundle_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01379", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01379", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01380", + "gapId": "operator:node.separate_bundle_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01380-operator-node.separate_bundle_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01380.py -- tests/files/web/generated/M16-GAP-01380-operator-node.separate_bundle_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01380", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01380", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01381", + "gapId": "operator:node.separate_bundle_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01381-operator-node.separate_bundle_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01381.py -- tests/files/web/generated/M16-GAP-01381-operator-node.separate_bundle_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01381", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01381", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01382", + "gapId": "operator:node.shader_script_update", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01382-operator-node.shader_script_update.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01382.py -- tests/files/web/generated/M16-GAP-01382-operator-node.shader_script_update.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01382", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01382", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01383", + "gapId": "operator:node.simulation_zone_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01383-operator-node.simulation_zone_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01383.py -- tests/files/web/generated/M16-GAP-01383-operator-node.simulation_zone_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01383", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01383", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01384", + "gapId": "operator:node.simulation_zone_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01384-operator-node.simulation_zone_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01384.py -- tests/files/web/generated/M16-GAP-01384-operator-node.simulation_zone_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01384", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01384", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01385", + "gapId": "operator:node.simulation_zone_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01385-operator-node.simulation_zone_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01385.py -- tests/files/web/generated/M16-GAP-01385-operator-node.simulation_zone_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01385", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01385", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01386", + "gapId": "operator:node.sockets_sync", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01386-operator-node.sockets_sync.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01386.py -- tests/files/web/generated/M16-GAP-01386-operator-node.sockets_sync.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01386", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01386", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01387", + "gapId": "operator:node.swap_empty_group", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01387-operator-node.swap_empty_group.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01387.py -- tests/files/web/generated/M16-GAP-01387-operator-node.swap_empty_group.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01387", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01387", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01388", + "gapId": "operator:node.swap_group_asset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01388-operator-node.swap_group_asset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01388.py -- tests/files/web/generated/M16-GAP-01388-operator-node.swap_group_asset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01388", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01388", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01389", + "gapId": "operator:node.swap_node", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01389-operator-node.swap_node.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01389.py -- tests/files/web/generated/M16-GAP-01389-operator-node.swap_node.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01389", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01389", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01390", + "gapId": "operator:node.swap_typed_bundle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01390-operator-node.swap_typed_bundle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01390.py -- tests/files/web/generated/M16-GAP-01390-operator-node.swap_typed_bundle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01390", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01390", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01391", + "gapId": "operator:node.swap_zone", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01391-operator-node.swap_zone.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01391.py -- tests/files/web/generated/M16-GAP-01391-operator-node.swap_zone.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01391", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01391", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01392", + "gapId": "operator:node.test_inlining_shader_nodes", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01392-operator-node.test_inlining_shader_nodes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01392.py -- tests/files/web/generated/M16-GAP-01392-operator-node.test_inlining_shader_nodes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01392", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01392", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01393", + "gapId": "operator:node.toggle_viewer", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01393-operator-node.toggle_viewer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01393.py -- tests/files/web/generated/M16-GAP-01393-operator-node.toggle_viewer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01393", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01393", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01394", + "gapId": "operator:node.translate_attach", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01394-operator-node.translate_attach.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01394.py -- tests/files/web/generated/M16-GAP-01394-operator-node.translate_attach.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01394", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01394", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01395", + "gapId": "operator:node.translate_attach_remove_on_cancel", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01395-operator-node.translate_attach_remove_on_cancel.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01395.py -- tests/files/web/generated/M16-GAP-01395-operator-node.translate_attach_remove_on_cancel.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01395", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01395", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01396", + "gapId": "operator:node.tree_path_parent", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01396-operator-node.tree_path_parent.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01396.py -- tests/files/web/generated/M16-GAP-01396-operator-node.tree_path_parent.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01396", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01396", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01397", + "gapId": "operator:node.view_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01397-operator-node.view_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01397.py -- tests/files/web/generated/M16-GAP-01397-operator-node.view_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01397", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01397", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01398", + "gapId": "operator:node.view_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01398-operator-node.view_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01398.py -- tests/files/web/generated/M16-GAP-01398-operator-node.view_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01398", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01398", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01399", + "gapId": "operator:node.viewer_border", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01399-operator-node.viewer_border.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01399.py -- tests/files/web/generated/M16-GAP-01399-operator-node.viewer_border.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01399", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01399", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01400", + "gapId": "operator:node.viewer_shortcut_get", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01400-operator-node.viewer_shortcut_get.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01400.py -- tests/files/web/generated/M16-GAP-01400-operator-node.viewer_shortcut_get.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01400", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01400", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01401", + "gapId": "operator:node.viewer_shortcut_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01401-operator-node.viewer_shortcut_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01401.py -- tests/files/web/generated/M16-GAP-01401-operator-node.viewer_shortcut_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01401", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01401", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01402", + "gapId": "operator:object.add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01402-operator-object.add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01402.py -- tests/files/web/generated/M16-GAP-01402-operator-object.add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01402", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01402", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01403", + "gapId": "operator:object.add_modifier_menu", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01403-operator-object.add_modifier_menu.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01403.py -- tests/files/web/generated/M16-GAP-01403-operator-object.add_modifier_menu.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01403", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01403", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01404", + "gapId": "operator:object.add_named", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01404-operator-object.add_named.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01404.py -- tests/files/web/generated/M16-GAP-01404-operator-object.add_named.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01404", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01404", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01405", + "gapId": "operator:object.align", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01405-operator-object.align.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01405.py -- tests/files/web/generated/M16-GAP-01405-operator-object.align.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01405", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01405", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01406", + "gapId": "operator:object.anim_transforms_to_deltas", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01406-operator-object.anim_transforms_to_deltas.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01406.py -- tests/files/web/generated/M16-GAP-01406-operator-object.anim_transforms_to_deltas.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01406", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01406", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01407", + "gapId": "operator:object.armature_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01407-operator-object.armature_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01407.py -- tests/files/web/generated/M16-GAP-01407-operator-object.armature_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01407", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01407", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01408", + "gapId": "operator:object.assign_property_defaults", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01408-operator-object.assign_property_defaults.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01408.py -- tests/files/web/generated/M16-GAP-01408-operator-object.assign_property_defaults.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01408", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01408", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01409", + "gapId": "operator:object.bake", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01409-operator-object.bake.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01409.py -- tests/files/web/generated/M16-GAP-01409-operator-object.bake.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01409", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01409", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01410", + "gapId": "operator:object.bake_image", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01410-operator-object.bake_image.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01410.py -- tests/files/web/generated/M16-GAP-01410-operator-object.bake_image.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01410", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01410", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01411", + "gapId": "operator:object.camera_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01411-operator-object.camera_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01411.py -- tests/files/web/generated/M16-GAP-01411-operator-object.camera_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01411", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01411", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01412", + "gapId": "operator:object.camera_custom_update", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01412-operator-object.camera_custom_update.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01412.py -- tests/files/web/generated/M16-GAP-01412-operator-object.camera_custom_update.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01412", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01412", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01413", + "gapId": "operator:object.clear_override_library", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01413-operator-object.clear_override_library.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01413.py -- tests/files/web/generated/M16-GAP-01413-operator-object.clear_override_library.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01413", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01413", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01414", + "gapId": "operator:object.collection_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01414-operator-object.collection_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01414.py -- tests/files/web/generated/M16-GAP-01414-operator-object.collection_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01414", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01414", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01415", + "gapId": "operator:object.collection_external_asset_drop", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01415-operator-object.collection_external_asset_drop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01415.py -- tests/files/web/generated/M16-GAP-01415-operator-object.collection_external_asset_drop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01415", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01415", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01416", + "gapId": "operator:object.collection_instance_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01416-operator-object.collection_instance_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01416.py -- tests/files/web/generated/M16-GAP-01416-operator-object.collection_instance_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01416", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01416", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01417", + "gapId": "operator:object.collection_link", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01417-operator-object.collection_link.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01417.py -- tests/files/web/generated/M16-GAP-01417-operator-object.collection_link.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01417", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01417", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01418", + "gapId": "operator:object.collection_objects_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01418-operator-object.collection_objects_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01418.py -- tests/files/web/generated/M16-GAP-01418-operator-object.collection_objects_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01418", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01418", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01419", + "gapId": "operator:object.collection_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01419-operator-object.collection_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01419.py -- tests/files/web/generated/M16-GAP-01419-operator-object.collection_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01419", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01419", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01420", + "gapId": "operator:object.collection_unlink", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01420-operator-object.collection_unlink.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01420.py -- tests/files/web/generated/M16-GAP-01420-operator-object.collection_unlink.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01420", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01420", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01421", + "gapId": "operator:object.constraint_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01421-operator-object.constraint_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01421.py -- tests/files/web/generated/M16-GAP-01421-operator-object.constraint_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01421", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01421", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01422", + "gapId": "operator:object.constraint_add_with_targets", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01422-operator-object.constraint_add_with_targets.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01422.py -- tests/files/web/generated/M16-GAP-01422-operator-object.constraint_add_with_targets.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01422", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01422", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01423", + "gapId": "operator:object.constraints_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01423-operator-object.constraints_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01423.py -- tests/files/web/generated/M16-GAP-01423-operator-object.constraints_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01423", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01423", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01424", + "gapId": "operator:object.constraints_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01424-operator-object.constraints_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01424.py -- tests/files/web/generated/M16-GAP-01424-operator-object.constraints_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01424", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01424", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01425", + "gapId": "operator:object.convert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01425-operator-object.convert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01425.py -- tests/files/web/generated/M16-GAP-01425-operator-object.convert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01425", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01425", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01426", + "gapId": "operator:object.copy_global_transform", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01426-operator-object.copy_global_transform.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01426.py -- tests/files/web/generated/M16-GAP-01426-operator-object.copy_global_transform.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01426", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01426", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01427", + "gapId": "operator:object.copy_relative_transform", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01427-operator-object.copy_relative_transform.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01427.py -- tests/files/web/generated/M16-GAP-01427-operator-object.copy_relative_transform.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01427", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01427", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01428", + "gapId": "operator:object.correctivesmooth_bind", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01428-operator-object.correctivesmooth_bind.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01428.py -- tests/files/web/generated/M16-GAP-01428-operator-object.correctivesmooth_bind.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01428", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01428", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01429", + "gapId": "operator:object.curves_empty_hair_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01429-operator-object.curves_empty_hair_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01429.py -- tests/files/web/generated/M16-GAP-01429-operator-object.curves_empty_hair_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01429", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01429", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01430", + "gapId": "operator:object.curves_random_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01430-operator-object.curves_random_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01430.py -- tests/files/web/generated/M16-GAP-01430-operator-object.curves_random_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01430", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01430", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01431", + "gapId": "operator:object.data_instance_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01431-operator-object.data_instance_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01431.py -- tests/files/web/generated/M16-GAP-01431-operator-object.data_instance_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01431", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01431", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01432", + "gapId": "operator:object.data_transfer", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01432-operator-object.data_transfer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01432.py -- tests/files/web/generated/M16-GAP-01432-operator-object.data_transfer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01432", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01432", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01433", + "gapId": "operator:object.datalayout_transfer", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01433-operator-object.datalayout_transfer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01433.py -- tests/files/web/generated/M16-GAP-01433-operator-object.datalayout_transfer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01433", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01433", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01434", + "gapId": "operator:object.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01434-operator-object.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01434.py -- tests/files/web/generated/M16-GAP-01434-operator-object.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01434", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01434", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01435", + "gapId": "operator:object.delete_fix_to_camera_keys", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01435-operator-object.delete_fix_to_camera_keys.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01435.py -- tests/files/web/generated/M16-GAP-01435-operator-object.delete_fix_to_camera_keys.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01435", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01435", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01436", + "gapId": "operator:object.drop_geometry_nodes", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01436-operator-object.drop_geometry_nodes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01436.py -- tests/files/web/generated/M16-GAP-01436-operator-object.drop_geometry_nodes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01436", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01436", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01437", + "gapId": "operator:object.drop_named_material", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01437-operator-object.drop_named_material.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01437.py -- tests/files/web/generated/M16-GAP-01437-operator-object.drop_named_material.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01437", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01437", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01438", + "gapId": "operator:object.duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01438-operator-object.duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01438.py -- tests/files/web/generated/M16-GAP-01438-operator-object.duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01438", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01438", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01439", + "gapId": "operator:object.duplicate_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01439-operator-object.duplicate_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01439.py -- tests/files/web/generated/M16-GAP-01439-operator-object.duplicate_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01439", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01439", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01440", + "gapId": "operator:object.duplicate_move_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01440-operator-object.duplicate_move_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01440.py -- tests/files/web/generated/M16-GAP-01440-operator-object.duplicate_move_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01440", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01440", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01441", + "gapId": "operator:object.duplicates_make_real", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01441-operator-object.duplicates_make_real.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01441.py -- tests/files/web/generated/M16-GAP-01441-operator-object.duplicates_make_real.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01441", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01441", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01442", + "gapId": "operator:object.editmode_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01442-operator-object.editmode_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01442.py -- tests/files/web/generated/M16-GAP-01442-operator-object.editmode_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01442", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01442", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01443", + "gapId": "operator:object.effector_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01443-operator-object.effector_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01443.py -- tests/files/web/generated/M16-GAP-01443-operator-object.effector_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01443", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01443", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01444", + "gapId": "operator:object.empty_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01444-operator-object.empty_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01444.py -- tests/files/web/generated/M16-GAP-01444-operator-object.empty_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01444", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01444", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01445", + "gapId": "operator:object.empty_image_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01445-operator-object.empty_image_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01445.py -- tests/files/web/generated/M16-GAP-01445-operator-object.empty_image_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01445", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01445", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01446", + "gapId": "operator:object.explode_refresh", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01446-operator-object.explode_refresh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01446.py -- tests/files/web/generated/M16-GAP-01446-operator-object.explode_refresh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01446", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01446", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01447", + "gapId": "operator:object.fix_to_camera", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01447-operator-object.fix_to_camera.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01447.py -- tests/files/web/generated/M16-GAP-01447-operator-object.fix_to_camera.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01447", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01447", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01448", + "gapId": "operator:object.forcefield_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01448-operator-object.forcefield_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01448.py -- tests/files/web/generated/M16-GAP-01448-operator-object.forcefield_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01448", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01448", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01449", + "gapId": "operator:object.geometry_node_bake_delete_single", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01449-operator-object.geometry_node_bake_delete_single.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01449.py -- tests/files/web/generated/M16-GAP-01449-operator-object.geometry_node_bake_delete_single.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01449", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01449", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01450", + "gapId": "operator:object.geometry_node_bake_pack_single", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01450-operator-object.geometry_node_bake_pack_single.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01450.py -- tests/files/web/generated/M16-GAP-01450-operator-object.geometry_node_bake_pack_single.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01450", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01450", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01451", + "gapId": "operator:object.geometry_node_bake_single", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01451-operator-object.geometry_node_bake_single.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01451.py -- tests/files/web/generated/M16-GAP-01451-operator-object.geometry_node_bake_single.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01451", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01451", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01452", + "gapId": "operator:object.geometry_node_bake_unpack_single", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01452-operator-object.geometry_node_bake_unpack_single.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01452.py -- tests/files/web/generated/M16-GAP-01452-operator-object.geometry_node_bake_unpack_single.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01452", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01452", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01453", + "gapId": "operator:object.geometry_node_tree_copy_assign", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01453-operator-object.geometry_node_tree_copy_assign.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01453.py -- tests/files/web/generated/M16-GAP-01453-operator-object.geometry_node_tree_copy_assign.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01453", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01453", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01454", + "gapId": "operator:object.geometry_nodes_input_attribute_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01454-operator-object.geometry_nodes_input_attribute_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01454.py -- tests/files/web/generated/M16-GAP-01454-operator-object.geometry_nodes_input_attribute_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01454", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01454", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01455", + "gapId": "operator:object.geometry_nodes_move_to_nodes", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01455-operator-object.geometry_nodes_move_to_nodes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01455.py -- tests/files/web/generated/M16-GAP-01455-operator-object.geometry_nodes_move_to_nodes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01455", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01455", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01456", + "gapId": "operator:object.grease_pencil_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01456-operator-object.grease_pencil_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01456.py -- tests/files/web/generated/M16-GAP-01456-operator-object.grease_pencil_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01456", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01456", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01457", + "gapId": "operator:object.grease_pencil_dash_modifier_segment_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01457-operator-object.grease_pencil_dash_modifier_segment_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01457.py -- tests/files/web/generated/M16-GAP-01457-operator-object.grease_pencil_dash_modifier_segment_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01457", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01457", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01458", + "gapId": "operator:object.grease_pencil_dash_modifier_segment_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01458-operator-object.grease_pencil_dash_modifier_segment_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01458.py -- tests/files/web/generated/M16-GAP-01458-operator-object.grease_pencil_dash_modifier_segment_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01458", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01458", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01459", + "gapId": "operator:object.grease_pencil_dash_modifier_segment_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01459-operator-object.grease_pencil_dash_modifier_segment_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01459.py -- tests/files/web/generated/M16-GAP-01459-operator-object.grease_pencil_dash_modifier_segment_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01459", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01459", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01460", + "gapId": "operator:object.grease_pencil_time_modifier_segment_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01460-operator-object.grease_pencil_time_modifier_segment_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01460.py -- tests/files/web/generated/M16-GAP-01460-operator-object.grease_pencil_time_modifier_segment_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01460", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01460", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01461", + "gapId": "operator:object.grease_pencil_time_modifier_segment_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01461-operator-object.grease_pencil_time_modifier_segment_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01461.py -- tests/files/web/generated/M16-GAP-01461-operator-object.grease_pencil_time_modifier_segment_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01461", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01461", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01462", + "gapId": "operator:object.grease_pencil_time_modifier_segment_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01462-operator-object.grease_pencil_time_modifier_segment_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01462.py -- tests/files/web/generated/M16-GAP-01462-operator-object.grease_pencil_time_modifier_segment_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01462", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01462", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01463", + "gapId": "operator:object.hide_collection", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01463-operator-object.hide_collection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01463.py -- tests/files/web/generated/M16-GAP-01463-operator-object.hide_collection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01463", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01463", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01464", + "gapId": "operator:object.hide_render_clear_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01464-operator-object.hide_render_clear_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01464.py -- tests/files/web/generated/M16-GAP-01464-operator-object.hide_render_clear_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01464", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01464", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01465", + "gapId": "operator:object.hide_view_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01465-operator-object.hide_view_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01465.py -- tests/files/web/generated/M16-GAP-01465-operator-object.hide_view_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01465", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01465", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01466", + "gapId": "operator:object.hide_view_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01466-operator-object.hide_view_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01466.py -- tests/files/web/generated/M16-GAP-01466-operator-object.hide_view_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01466", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01466", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01467", + "gapId": "operator:object.hook_add_newob", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01467-operator-object.hook_add_newob.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01467.py -- tests/files/web/generated/M16-GAP-01467-operator-object.hook_add_newob.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01467", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01467", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01468", + "gapId": "operator:object.hook_add_selob", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01468-operator-object.hook_add_selob.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01468.py -- tests/files/web/generated/M16-GAP-01468-operator-object.hook_add_selob.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01468", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01468", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01469", + "gapId": "operator:object.hook_assign", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01469-operator-object.hook_assign.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01469.py -- tests/files/web/generated/M16-GAP-01469-operator-object.hook_assign.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01469", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01469", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01470", + "gapId": "operator:object.hook_recenter", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01470-operator-object.hook_recenter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01470.py -- tests/files/web/generated/M16-GAP-01470-operator-object.hook_recenter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01470", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01470", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01471", + "gapId": "operator:object.hook_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01471-operator-object.hook_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01471.py -- tests/files/web/generated/M16-GAP-01471-operator-object.hook_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01471", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01471", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01472", + "gapId": "operator:object.hook_reset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01472-operator-object.hook_reset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01472.py -- tests/files/web/generated/M16-GAP-01472-operator-object.hook_reset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01472", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01472", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01473", + "gapId": "operator:object.hook_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01473-operator-object.hook_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01473.py -- tests/files/web/generated/M16-GAP-01473-operator-object.hook_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01473", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01473", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01474", + "gapId": "operator:object.instance_offset_from_cursor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01474-operator-object.instance_offset_from_cursor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01474.py -- tests/files/web/generated/M16-GAP-01474-operator-object.instance_offset_from_cursor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01474", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01474", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01475", + "gapId": "operator:object.instance_offset_from_object", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01475-operator-object.instance_offset_from_object.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01475.py -- tests/files/web/generated/M16-GAP-01475-operator-object.instance_offset_from_object.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01475", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01475", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01476", + "gapId": "operator:object.instance_offset_to_cursor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01476-operator-object.instance_offset_to_cursor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01476.py -- tests/files/web/generated/M16-GAP-01476-operator-object.instance_offset_to_cursor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01476", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01476", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01477", + "gapId": "operator:object.isolate_type_render", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01477-operator-object.isolate_type_render.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01477.py -- tests/files/web/generated/M16-GAP-01477-operator-object.isolate_type_render.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01477", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01477", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01478", + "gapId": "operator:object.join", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01478-operator-object.join.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01478.py -- tests/files/web/generated/M16-GAP-01478-operator-object.join.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01478", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01478", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01479", + "gapId": "operator:object.join_shapes", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01479-operator-object.join_shapes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01479.py -- tests/files/web/generated/M16-GAP-01479-operator-object.join_shapes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01479", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01479", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01480", + "gapId": "operator:object.join_uvs", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01480-operator-object.join_uvs.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01480.py -- tests/files/web/generated/M16-GAP-01480-operator-object.join_uvs.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01480", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01480", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01481", + "gapId": "operator:object.laplaciandeform_bind", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01481-operator-object.laplaciandeform_bind.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01481.py -- tests/files/web/generated/M16-GAP-01481-operator-object.laplaciandeform_bind.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01481", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01481", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01482", + "gapId": "operator:object.lattice_add_to_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01482-operator-object.lattice_add_to_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01482.py -- tests/files/web/generated/M16-GAP-01482-operator-object.lattice_add_to_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01482", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01482", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01483", + "gapId": "operator:object.light_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01483-operator-object.light_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01483.py -- tests/files/web/generated/M16-GAP-01483-operator-object.light_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01483", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01483", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01484", + "gapId": "operator:object.light_linking_blocker_collection_new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01484-operator-object.light_linking_blocker_collection_new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01484.py -- tests/files/web/generated/M16-GAP-01484-operator-object.light_linking_blocker_collection_new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01484", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01484", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01485", + "gapId": "operator:object.light_linking_blockers_link", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01485-operator-object.light_linking_blockers_link.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01485.py -- tests/files/web/generated/M16-GAP-01485-operator-object.light_linking_blockers_link.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01485", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01485", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01486", + "gapId": "operator:object.light_linking_blockers_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01486-operator-object.light_linking_blockers_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01486.py -- tests/files/web/generated/M16-GAP-01486-operator-object.light_linking_blockers_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01486", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01486", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01487", + "gapId": "operator:object.light_linking_receiver_collection_new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01487-operator-object.light_linking_receiver_collection_new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01487.py -- tests/files/web/generated/M16-GAP-01487-operator-object.light_linking_receiver_collection_new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01487", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01487", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01488", + "gapId": "operator:object.light_linking_receivers_link", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01488-operator-object.light_linking_receivers_link.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01488.py -- tests/files/web/generated/M16-GAP-01488-operator-object.light_linking_receivers_link.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01488", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01488", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01489", + "gapId": "operator:object.light_linking_receivers_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01489-operator-object.light_linking_receivers_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01489.py -- tests/files/web/generated/M16-GAP-01489-operator-object.light_linking_receivers_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01489", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01489", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01490", + "gapId": "operator:object.light_linking_unlink_from_collection", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01490-operator-object.light_linking_unlink_from_collection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01490.py -- tests/files/web/generated/M16-GAP-01490-operator-object.light_linking_unlink_from_collection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01490", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01490", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01491", + "gapId": "operator:object.lightprobe_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01491-operator-object.lightprobe_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01491.py -- tests/files/web/generated/M16-GAP-01491-operator-object.lightprobe_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01491", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01491", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01492", + "gapId": "operator:object.lightprobe_cache_bake", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01492-operator-object.lightprobe_cache_bake.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01492.py -- tests/files/web/generated/M16-GAP-01492-operator-object.lightprobe_cache_bake.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01492", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01492", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01493", + "gapId": "operator:object.lightprobe_cache_free", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01493-operator-object.lightprobe_cache_free.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01493.py -- tests/files/web/generated/M16-GAP-01493-operator-object.lightprobe_cache_free.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01493", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01493", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01494", + "gapId": "operator:object.lineart_bake_strokes", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01494-operator-object.lineart_bake_strokes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01494.py -- tests/files/web/generated/M16-GAP-01494-operator-object.lineart_bake_strokes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01494", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01494", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01495", + "gapId": "operator:object.lineart_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01495-operator-object.lineart_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01495.py -- tests/files/web/generated/M16-GAP-01495-operator-object.lineart_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01495", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01495", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01496", + "gapId": "operator:object.link_to_collection", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01496-operator-object.link_to_collection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01496.py -- tests/files/web/generated/M16-GAP-01496-operator-object.link_to_collection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01496", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01496", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01497", + "gapId": "operator:object.location_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01497-operator-object.location_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01497.py -- tests/files/web/generated/M16-GAP-01497-operator-object.location_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01497", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01497", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01498", + "gapId": "operator:object.make_dupli_face", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01498-operator-object.make_dupli_face.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01498.py -- tests/files/web/generated/M16-GAP-01498-operator-object.make_dupli_face.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01498", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01498", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01499", + "gapId": "operator:object.make_links_data", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01499-operator-object.make_links_data.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01499.py -- tests/files/web/generated/M16-GAP-01499-operator-object.make_links_data.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01499", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01499", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01500", + "gapId": "operator:object.make_links_scene", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01500-operator-object.make_links_scene.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01500.py -- tests/files/web/generated/M16-GAP-01500-operator-object.make_links_scene.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01500", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01500", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01501", + "gapId": "operator:object.make_local", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01501-operator-object.make_local.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01501.py -- tests/files/web/generated/M16-GAP-01501-operator-object.make_local.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01501", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01501", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01502", + "gapId": "operator:object.make_override_library", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01502-operator-object.make_override_library.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01502.py -- tests/files/web/generated/M16-GAP-01502-operator-object.make_override_library.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01502", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01502", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01503", + "gapId": "operator:object.make_single_user", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01503-operator-object.make_single_user.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01503.py -- tests/files/web/generated/M16-GAP-01503-operator-object.make_single_user.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01503", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01503", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01504", + "gapId": "operator:object.material_slot_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01504-operator-object.material_slot_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01504.py -- tests/files/web/generated/M16-GAP-01504-operator-object.material_slot_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01504", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01504", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01505", + "gapId": "operator:object.material_slot_assign", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01505-operator-object.material_slot_assign.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01505.py -- tests/files/web/generated/M16-GAP-01505-operator-object.material_slot_assign.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01505", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01505", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01506", + "gapId": "operator:object.material_slot_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01506-operator-object.material_slot_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01506.py -- tests/files/web/generated/M16-GAP-01506-operator-object.material_slot_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01506", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01506", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01507", + "gapId": "operator:object.material_slot_deselect", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01507-operator-object.material_slot_deselect.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01507.py -- tests/files/web/generated/M16-GAP-01507-operator-object.material_slot_deselect.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01507", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01507", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01508", + "gapId": "operator:object.material_slot_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01508-operator-object.material_slot_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01508.py -- tests/files/web/generated/M16-GAP-01508-operator-object.material_slot_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01508", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01508", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01509", + "gapId": "operator:object.material_slot_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01509-operator-object.material_slot_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01509.py -- tests/files/web/generated/M16-GAP-01509-operator-object.material_slot_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01509", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01509", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01510", + "gapId": "operator:object.material_slot_remove_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01510-operator-object.material_slot_remove_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01510.py -- tests/files/web/generated/M16-GAP-01510-operator-object.material_slot_remove_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01510", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01510", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01511", + "gapId": "operator:object.material_slot_remove_unused", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01511-operator-object.material_slot_remove_unused.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01511.py -- tests/files/web/generated/M16-GAP-01511-operator-object.material_slot_remove_unused.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01511", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01511", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01512", + "gapId": "operator:object.material_slot_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01512-operator-object.material_slot_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01512.py -- tests/files/web/generated/M16-GAP-01512-operator-object.material_slot_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01512", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01512", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01513", + "gapId": "operator:object.meshdeform_bind", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01513-operator-object.meshdeform_bind.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01513.py -- tests/files/web/generated/M16-GAP-01513-operator-object.meshdeform_bind.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01513", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01513", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01514", + "gapId": "operator:object.metaball_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01514-operator-object.metaball_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01514.py -- tests/files/web/generated/M16-GAP-01514-operator-object.metaball_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01514", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01514", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01515", + "gapId": "operator:object.mode_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01515-operator-object.mode_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01515.py -- tests/files/web/generated/M16-GAP-01515-operator-object.mode_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01515", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01515", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01516", + "gapId": "operator:object.mode_set_with_submode", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01516-operator-object.mode_set_with_submode.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01516.py -- tests/files/web/generated/M16-GAP-01516-operator-object.mode_set_with_submode.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01516", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01516", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01517", + "gapId": "operator:object.modifier_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01517-operator-object.modifier_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01517.py -- tests/files/web/generated/M16-GAP-01517-operator-object.modifier_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01517", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01517", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01518", + "gapId": "operator:object.modifier_add_node_group", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01518-operator-object.modifier_add_node_group.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01518.py -- tests/files/web/generated/M16-GAP-01518-operator-object.modifier_add_node_group.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01518", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01518", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01519", + "gapId": "operator:object.modifier_apply", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01519-operator-object.modifier_apply.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01519.py -- tests/files/web/generated/M16-GAP-01519-operator-object.modifier_apply.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01519", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01519", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01520", + "gapId": "operator:object.modifier_apply_as_shapekey", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01520-operator-object.modifier_apply_as_shapekey.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01520.py -- tests/files/web/generated/M16-GAP-01520-operator-object.modifier_apply_as_shapekey.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01520", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01520", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01521", + "gapId": "operator:object.modifier_convert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01521-operator-object.modifier_convert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01521.py -- tests/files/web/generated/M16-GAP-01521-operator-object.modifier_convert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01521", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01521", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01522", + "gapId": "operator:object.modifier_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01522-operator-object.modifier_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01522.py -- tests/files/web/generated/M16-GAP-01522-operator-object.modifier_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01522", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01522", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01523", + "gapId": "operator:object.modifier_copy_to_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01523-operator-object.modifier_copy_to_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01523.py -- tests/files/web/generated/M16-GAP-01523-operator-object.modifier_copy_to_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01523", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01523", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01524", + "gapId": "operator:object.modifier_move_down", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01524-operator-object.modifier_move_down.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01524.py -- tests/files/web/generated/M16-GAP-01524-operator-object.modifier_move_down.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01524", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01524", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01525", + "gapId": "operator:object.modifier_move_to_index", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01525-operator-object.modifier_move_to_index.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01525.py -- tests/files/web/generated/M16-GAP-01525-operator-object.modifier_move_to_index.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01525", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01525", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01526", + "gapId": "operator:object.modifier_move_up", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01526-operator-object.modifier_move_up.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01526.py -- tests/files/web/generated/M16-GAP-01526-operator-object.modifier_move_up.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01526", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01526", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01527", + "gapId": "operator:object.modifier_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01527-operator-object.modifier_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01527.py -- tests/files/web/generated/M16-GAP-01527-operator-object.modifier_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01527", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01527", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01528", + "gapId": "operator:object.modifier_set_active", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01528-operator-object.modifier_set_active.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01528.py -- tests/files/web/generated/M16-GAP-01528-operator-object.modifier_set_active.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01528", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01528", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01529", + "gapId": "operator:object.modifiers_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01529-operator-object.modifiers_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01529.py -- tests/files/web/generated/M16-GAP-01529-operator-object.modifiers_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01529", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01529", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01530", + "gapId": "operator:object.modifiers_copy_to_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01530-operator-object.modifiers_copy_to_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01530.py -- tests/files/web/generated/M16-GAP-01530-operator-object.modifiers_copy_to_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01530", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01530", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01531", + "gapId": "operator:object.move_to_collection", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01531-operator-object.move_to_collection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01531.py -- tests/files/web/generated/M16-GAP-01531-operator-object.move_to_collection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01531", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01531", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01532", + "gapId": "operator:object.multires_base_apply", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01532-operator-object.multires_base_apply.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01532.py -- tests/files/web/generated/M16-GAP-01532-operator-object.multires_base_apply.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01532", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01532", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01533", + "gapId": "operator:object.multires_external_pack", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01533-operator-object.multires_external_pack.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01533.py -- tests/files/web/generated/M16-GAP-01533-operator-object.multires_external_pack.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01533", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01533", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01534", + "gapId": "operator:object.multires_external_save", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01534-operator-object.multires_external_save.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01534.py -- tests/files/web/generated/M16-GAP-01534-operator-object.multires_external_save.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01534", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01534", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01535", + "gapId": "operator:object.multires_higher_levels_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01535-operator-object.multires_higher_levels_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01535.py -- tests/files/web/generated/M16-GAP-01535-operator-object.multires_higher_levels_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01535", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01535", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01536", + "gapId": "operator:object.multires_rebuild_subdiv", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01536-operator-object.multires_rebuild_subdiv.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01536.py -- tests/files/web/generated/M16-GAP-01536-operator-object.multires_rebuild_subdiv.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01536", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01536", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01537", + "gapId": "operator:object.multires_reshape", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01537-operator-object.multires_reshape.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01537.py -- tests/files/web/generated/M16-GAP-01537-operator-object.multires_reshape.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01537", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01537", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01538", + "gapId": "operator:object.multires_subdivide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01538-operator-object.multires_subdivide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01538.py -- tests/files/web/generated/M16-GAP-01538-operator-object.multires_subdivide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01538", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01538", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01539", + "gapId": "operator:object.multires_unsubdivide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01539-operator-object.multires_unsubdivide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01539.py -- tests/files/web/generated/M16-GAP-01539-operator-object.multires_unsubdivide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01539", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01539", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01540", + "gapId": "operator:object.ocean_bake", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01540-operator-object.ocean_bake.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01540.py -- tests/files/web/generated/M16-GAP-01540-operator-object.ocean_bake.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01540", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01540", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01541", + "gapId": "operator:object.origin_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01541-operator-object.origin_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01541.py -- tests/files/web/generated/M16-GAP-01541-operator-object.origin_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01541", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01541", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01542", + "gapId": "operator:object.origin_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01542-operator-object.origin_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01542.py -- tests/files/web/generated/M16-GAP-01542-operator-object.origin_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01542", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01542", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01543", + "gapId": "operator:object.parent_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01543-operator-object.parent_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01543.py -- tests/files/web/generated/M16-GAP-01543-operator-object.parent_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01543", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01543", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01544", + "gapId": "operator:object.parent_inverse_apply", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01544-operator-object.parent_inverse_apply.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01544.py -- tests/files/web/generated/M16-GAP-01544-operator-object.parent_inverse_apply.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01544", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01544", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01545", + "gapId": "operator:object.parent_no_inverse_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01545-operator-object.parent_no_inverse_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01545.py -- tests/files/web/generated/M16-GAP-01545-operator-object.parent_no_inverse_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01545", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01545", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01546", + "gapId": "operator:object.parent_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01546-operator-object.parent_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01546.py -- tests/files/web/generated/M16-GAP-01546-operator-object.parent_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01546", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01546", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01547", + "gapId": "operator:object.particle_system_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01547-operator-object.particle_system_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01547.py -- tests/files/web/generated/M16-GAP-01547-operator-object.particle_system_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01547", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01547", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01548", + "gapId": "operator:object.particle_system_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01548-operator-object.particle_system_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01548.py -- tests/files/web/generated/M16-GAP-01548-operator-object.particle_system_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01548", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01548", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01549", + "gapId": "operator:object.paste_transform", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01549-operator-object.paste_transform.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01549.py -- tests/files/web/generated/M16-GAP-01549-operator-object.paste_transform.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01549", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01549", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01550", + "gapId": "operator:object.paths_calculate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01550-operator-object.paths_calculate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01550.py -- tests/files/web/generated/M16-GAP-01550-operator-object.paths_calculate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01550", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01550", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01551", + "gapId": "operator:object.paths_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01551-operator-object.paths_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01551.py -- tests/files/web/generated/M16-GAP-01551-operator-object.paths_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01551", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01551", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01552", + "gapId": "operator:object.paths_update", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01552-operator-object.paths_update.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01552.py -- tests/files/web/generated/M16-GAP-01552-operator-object.paths_update.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01552", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01552", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01553", + "gapId": "operator:object.paths_update_visible", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01553-operator-object.paths_update_visible.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01553.py -- tests/files/web/generated/M16-GAP-01553-operator-object.paths_update_visible.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01553", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01553", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01554", + "gapId": "operator:object.pointcloud_random_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01554-operator-object.pointcloud_random_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01554.py -- tests/files/web/generated/M16-GAP-01554-operator-object.pointcloud_random_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01554", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01554", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01555", + "gapId": "operator:object.posemode_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01555-operator-object.posemode_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01555.py -- tests/files/web/generated/M16-GAP-01555-operator-object.posemode_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01555", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01555", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01556", + "gapId": "operator:object.quadriflow_remesh", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01556-operator-object.quadriflow_remesh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01556.py -- tests/files/web/generated/M16-GAP-01556-operator-object.quadriflow_remesh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01556", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01556", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01557", + "gapId": "operator:object.quick_explode", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01557-operator-object.quick_explode.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01557.py -- tests/files/web/generated/M16-GAP-01557-operator-object.quick_explode.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01557", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01557", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01558", + "gapId": "operator:object.quick_fur", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01558-operator-object.quick_fur.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01558.py -- tests/files/web/generated/M16-GAP-01558-operator-object.quick_fur.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01558", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01558", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01559", + "gapId": "operator:object.quick_liquid", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01559-operator-object.quick_liquid.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01559.py -- tests/files/web/generated/M16-GAP-01559-operator-object.quick_liquid.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01559", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01559", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01560", + "gapId": "operator:object.quick_smoke", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01560-operator-object.quick_smoke.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01560.py -- tests/files/web/generated/M16-GAP-01560-operator-object.quick_smoke.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01560", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01560", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01561", + "gapId": "operator:object.randomize_transform", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01561-operator-object.randomize_transform.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01561.py -- tests/files/web/generated/M16-GAP-01561-operator-object.randomize_transform.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01561", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01561", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01562", + "gapId": "operator:object.reset_override_library", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01562-operator-object.reset_override_library.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01562.py -- tests/files/web/generated/M16-GAP-01562-operator-object.reset_override_library.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01562", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01562", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01563", + "gapId": "operator:object.rotation_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01563-operator-object.rotation_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01563.py -- tests/files/web/generated/M16-GAP-01563-operator-object.rotation_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01563", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01563", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01564", + "gapId": "operator:object.scale_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01564-operator-object.scale_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01564.py -- tests/files/web/generated/M16-GAP-01564-operator-object.scale_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01564", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01564", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01565", + "gapId": "operator:object.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01565-operator-object.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01565.py -- tests/files/web/generated/M16-GAP-01565-operator-object.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01565", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01565", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01566", + "gapId": "operator:object.select_by_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01566-operator-object.select_by_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01566.py -- tests/files/web/generated/M16-GAP-01566-operator-object.select_by_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01566", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01566", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01567", + "gapId": "operator:object.select_camera", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01567-operator-object.select_camera.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01567.py -- tests/files/web/generated/M16-GAP-01567-operator-object.select_camera.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01567", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01567", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01568", + "gapId": "operator:object.select_grouped", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01568-operator-object.select_grouped.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01568.py -- tests/files/web/generated/M16-GAP-01568-operator-object.select_grouped.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01568", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01568", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01569", + "gapId": "operator:object.select_hierarchy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01569-operator-object.select_hierarchy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01569.py -- tests/files/web/generated/M16-GAP-01569-operator-object.select_hierarchy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01569", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01569", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01570", + "gapId": "operator:object.select_less", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01570-operator-object.select_less.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01570.py -- tests/files/web/generated/M16-GAP-01570-operator-object.select_less.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01570", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01570", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01571", + "gapId": "operator:object.select_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01571-operator-object.select_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01571.py -- tests/files/web/generated/M16-GAP-01571-operator-object.select_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01571", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01571", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01572", + "gapId": "operator:object.select_mirror", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01572-operator-object.select_mirror.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01572.py -- tests/files/web/generated/M16-GAP-01572-operator-object.select_mirror.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01572", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01572", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01573", + "gapId": "operator:object.select_more", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01573-operator-object.select_more.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01573.py -- tests/files/web/generated/M16-GAP-01573-operator-object.select_more.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01573", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01573", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01574", + "gapId": "operator:object.select_pattern", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01574-operator-object.select_pattern.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01574.py -- tests/files/web/generated/M16-GAP-01574-operator-object.select_pattern.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01574", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01574", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01575", + "gapId": "operator:object.select_random", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01575-operator-object.select_random.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01575.py -- tests/files/web/generated/M16-GAP-01575-operator-object.select_random.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01575", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01575", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01576", + "gapId": "operator:object.select_same_collection", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01576-operator-object.select_same_collection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01576.py -- tests/files/web/generated/M16-GAP-01576-operator-object.select_same_collection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01576", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01576", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01577", + "gapId": "operator:object.shade_auto_smooth", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01577-operator-object.shade_auto_smooth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01577.py -- tests/files/web/generated/M16-GAP-01577-operator-object.shade_auto_smooth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01577", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01577", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01578", + "gapId": "operator:object.shade_flat", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01578-operator-object.shade_flat.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01578.py -- tests/files/web/generated/M16-GAP-01578-operator-object.shade_flat.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01578", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01578", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01579", + "gapId": "operator:object.shade_smooth", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01579-operator-object.shade_smooth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01579.py -- tests/files/web/generated/M16-GAP-01579-operator-object.shade_smooth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01579", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01579", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01580", + "gapId": "operator:object.shade_smooth_by_angle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01580-operator-object.shade_smooth_by_angle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01580.py -- tests/files/web/generated/M16-GAP-01580-operator-object.shade_smooth_by_angle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01580", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01580", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01581", + "gapId": "operator:object.shaderfx_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01581-operator-object.shaderfx_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01581.py -- tests/files/web/generated/M16-GAP-01581-operator-object.shaderfx_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01581", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01581", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01582", + "gapId": "operator:object.shaderfx_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01582-operator-object.shaderfx_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01582.py -- tests/files/web/generated/M16-GAP-01582-operator-object.shaderfx_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01582", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01582", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01583", + "gapId": "operator:object.shaderfx_move_down", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01583-operator-object.shaderfx_move_down.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01583.py -- tests/files/web/generated/M16-GAP-01583-operator-object.shaderfx_move_down.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01583", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01583", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01584", + "gapId": "operator:object.shaderfx_move_to_index", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01584-operator-object.shaderfx_move_to_index.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01584.py -- tests/files/web/generated/M16-GAP-01584-operator-object.shaderfx_move_to_index.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01584", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01584", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01585", + "gapId": "operator:object.shaderfx_move_up", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01585-operator-object.shaderfx_move_up.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01585.py -- tests/files/web/generated/M16-GAP-01585-operator-object.shaderfx_move_up.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01585", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01585", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01586", + "gapId": "operator:object.shaderfx_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01586-operator-object.shaderfx_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01586.py -- tests/files/web/generated/M16-GAP-01586-operator-object.shaderfx_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01586", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01586", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01587", + "gapId": "operator:object.shape_key_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01587-operator-object.shape_key_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01587.py -- tests/files/web/generated/M16-GAP-01587-operator-object.shape_key_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01587", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01587", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01588", + "gapId": "operator:object.shape_key_apply_to_basis", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01588-operator-object.shape_key_apply_to_basis.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01588.py -- tests/files/web/generated/M16-GAP-01588-operator-object.shape_key_apply_to_basis.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01588", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01588", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01589", + "gapId": "operator:object.shape_key_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01589-operator-object.shape_key_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01589.py -- tests/files/web/generated/M16-GAP-01589-operator-object.shape_key_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01589", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01589", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01590", + "gapId": "operator:object.shape_key_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01590-operator-object.shape_key_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01590.py -- tests/files/web/generated/M16-GAP-01590-operator-object.shape_key_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01590", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01590", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01591", + "gapId": "operator:object.shape_key_lock", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01591-operator-object.shape_key_lock.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01591.py -- tests/files/web/generated/M16-GAP-01591-operator-object.shape_key_lock.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01591", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01591", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01592", + "gapId": "operator:object.shape_key_make_basis", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01592-operator-object.shape_key_make_basis.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01592.py -- tests/files/web/generated/M16-GAP-01592-operator-object.shape_key_make_basis.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01592", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01592", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01593", + "gapId": "operator:object.shape_key_mirror", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01593-operator-object.shape_key_mirror.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01593.py -- tests/files/web/generated/M16-GAP-01593-operator-object.shape_key_mirror.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01593", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01593", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01594", + "gapId": "operator:object.shape_key_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01594-operator-object.shape_key_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01594.py -- tests/files/web/generated/M16-GAP-01594-operator-object.shape_key_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01594", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01594", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01595", + "gapId": "operator:object.shape_key_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01595-operator-object.shape_key_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01595.py -- tests/files/web/generated/M16-GAP-01595-operator-object.shape_key_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01595", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01595", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01596", + "gapId": "operator:object.shape_key_retime", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01596-operator-object.shape_key_retime.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01596.py -- tests/files/web/generated/M16-GAP-01596-operator-object.shape_key_retime.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01596", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01596", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01597", + "gapId": "operator:object.shape_key_transfer", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01597-operator-object.shape_key_transfer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01597.py -- tests/files/web/generated/M16-GAP-01597-operator-object.shape_key_transfer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01597", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01597", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01598", + "gapId": "operator:object.simulation_nodes_cache_bake", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01598-operator-object.simulation_nodes_cache_bake.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01598.py -- tests/files/web/generated/M16-GAP-01598-operator-object.simulation_nodes_cache_bake.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01598", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01598", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01599", + "gapId": "operator:object.simulation_nodes_cache_calculate_to_frame", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01599-operator-object.simulation_nodes_cache_calculate_to_frame.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01599.py -- tests/files/web/generated/M16-GAP-01599-operator-object.simulation_nodes_cache_calculate_to_frame.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01599", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01599", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01600", + "gapId": "operator:object.simulation_nodes_cache_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01600-operator-object.simulation_nodes_cache_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01600.py -- tests/files/web/generated/M16-GAP-01600-operator-object.simulation_nodes_cache_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01600", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01600", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01601", + "gapId": "operator:object.skin_armature_create", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01601-operator-object.skin_armature_create.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01601.py -- tests/files/web/generated/M16-GAP-01601-operator-object.skin_armature_create.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01601", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01601", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01602", + "gapId": "operator:object.skin_loose_mark_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01602-operator-object.skin_loose_mark_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01602.py -- tests/files/web/generated/M16-GAP-01602-operator-object.skin_loose_mark_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01602", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01602", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01603", + "gapId": "operator:object.skin_radii_equalize", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01603-operator-object.skin_radii_equalize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01603.py -- tests/files/web/generated/M16-GAP-01603-operator-object.skin_radii_equalize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01603", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01603", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01604", + "gapId": "operator:object.skin_root_mark", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01604-operator-object.skin_root_mark.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01604.py -- tests/files/web/generated/M16-GAP-01604-operator-object.skin_root_mark.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01604", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01604", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01605", + "gapId": "operator:object.speaker_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01605-operator-object.speaker_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01605.py -- tests/files/web/generated/M16-GAP-01605-operator-object.speaker_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01605", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01605", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01606", + "gapId": "operator:object.subdivision_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01606-operator-object.subdivision_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01606.py -- tests/files/web/generated/M16-GAP-01606-operator-object.subdivision_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01606", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01606", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01607", + "gapId": "operator:object.surfacedeform_bind", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01607-operator-object.surfacedeform_bind.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01607.py -- tests/files/web/generated/M16-GAP-01607-operator-object.surfacedeform_bind.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01607", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01607", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01608", + "gapId": "operator:object.text_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01608-operator-object.text_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01608.py -- tests/files/web/generated/M16-GAP-01608-operator-object.text_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01608", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01608", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01609", + "gapId": "operator:object.track_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01609-operator-object.track_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01609.py -- tests/files/web/generated/M16-GAP-01609-operator-object.track_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01609", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01609", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01610", + "gapId": "operator:object.track_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01610-operator-object.track_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01610.py -- tests/files/web/generated/M16-GAP-01610-operator-object.track_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01610", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01610", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01611", + "gapId": "operator:object.transfer_mode", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01611-operator-object.transfer_mode.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01611.py -- tests/files/web/generated/M16-GAP-01611-operator-object.transfer_mode.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01611", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01611", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01612", + "gapId": "operator:object.transform_apply", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01612-operator-object.transform_apply.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01612.py -- tests/files/web/generated/M16-GAP-01612-operator-object.transform_apply.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01612", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01612", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01613", + "gapId": "operator:object.transform_axis_target", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01613-operator-object.transform_axis_target.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01613.py -- tests/files/web/generated/M16-GAP-01613-operator-object.transform_axis_target.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01613", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01613", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01614", + "gapId": "operator:object.transform_to_mouse", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01614-operator-object.transform_to_mouse.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01614.py -- tests/files/web/generated/M16-GAP-01614-operator-object.transform_to_mouse.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01614", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01614", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01615", + "gapId": "operator:object.transforms_to_deltas", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01615-operator-object.transforms_to_deltas.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01615.py -- tests/files/web/generated/M16-GAP-01615-operator-object.transforms_to_deltas.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01615", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01615", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01616", + "gapId": "operator:object.unlink_data", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01616-operator-object.unlink_data.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01616.py -- tests/files/web/generated/M16-GAP-01616-operator-object.unlink_data.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01616", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01616", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01617", + "gapId": "operator:object.update_shapes", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01617-operator-object.update_shapes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01617.py -- tests/files/web/generated/M16-GAP-01617-operator-object.update_shapes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01617", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01617", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01618", + "gapId": "operator:object.vertex_group_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01618-operator-object.vertex_group_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01618.py -- tests/files/web/generated/M16-GAP-01618-operator-object.vertex_group_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01618", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01618", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01619", + "gapId": "operator:object.vertex_group_assign", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01619-operator-object.vertex_group_assign.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01619.py -- tests/files/web/generated/M16-GAP-01619-operator-object.vertex_group_assign.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01619", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01619", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01620", + "gapId": "operator:object.vertex_group_assign_new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01620-operator-object.vertex_group_assign_new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01620.py -- tests/files/web/generated/M16-GAP-01620-operator-object.vertex_group_assign_new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01620", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01620", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01621", + "gapId": "operator:object.vertex_group_clean", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01621-operator-object.vertex_group_clean.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01621.py -- tests/files/web/generated/M16-GAP-01621-operator-object.vertex_group_clean.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01621", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01621", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01622", + "gapId": "operator:object.vertex_group_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01622-operator-object.vertex_group_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01622.py -- tests/files/web/generated/M16-GAP-01622-operator-object.vertex_group_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01622", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01622", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01623", + "gapId": "operator:object.vertex_group_copy_to_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01623-operator-object.vertex_group_copy_to_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01623.py -- tests/files/web/generated/M16-GAP-01623-operator-object.vertex_group_copy_to_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01623", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01623", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01624", + "gapId": "operator:object.vertex_group_deselect", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01624-operator-object.vertex_group_deselect.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01624.py -- tests/files/web/generated/M16-GAP-01624-operator-object.vertex_group_deselect.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01624", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01624", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01625", + "gapId": "operator:object.vertex_group_invert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01625-operator-object.vertex_group_invert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01625.py -- tests/files/web/generated/M16-GAP-01625-operator-object.vertex_group_invert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01625", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01625", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01626", + "gapId": "operator:object.vertex_group_levels", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01626-operator-object.vertex_group_levels.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01626.py -- tests/files/web/generated/M16-GAP-01626-operator-object.vertex_group_levels.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01626", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01626", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01627", + "gapId": "operator:object.vertex_group_limit_total", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01627-operator-object.vertex_group_limit_total.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01627.py -- tests/files/web/generated/M16-GAP-01627-operator-object.vertex_group_limit_total.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01627", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01627", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01628", + "gapId": "operator:object.vertex_group_lock", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01628-operator-object.vertex_group_lock.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01628.py -- tests/files/web/generated/M16-GAP-01628-operator-object.vertex_group_lock.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01628", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01628", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01629", + "gapId": "operator:object.vertex_group_mirror", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01629-operator-object.vertex_group_mirror.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01629.py -- tests/files/web/generated/M16-GAP-01629-operator-object.vertex_group_mirror.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01629", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01629", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01630", + "gapId": "operator:object.vertex_group_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01630-operator-object.vertex_group_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01630.py -- tests/files/web/generated/M16-GAP-01630-operator-object.vertex_group_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01630", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01630", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01631", + "gapId": "operator:object.vertex_group_normalize", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01631-operator-object.vertex_group_normalize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01631.py -- tests/files/web/generated/M16-GAP-01631-operator-object.vertex_group_normalize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01631", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01631", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01632", + "gapId": "operator:object.vertex_group_normalize_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01632-operator-object.vertex_group_normalize_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01632.py -- tests/files/web/generated/M16-GAP-01632-operator-object.vertex_group_normalize_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01632", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01632", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01633", + "gapId": "operator:object.vertex_group_quantize", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01633-operator-object.vertex_group_quantize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01633.py -- tests/files/web/generated/M16-GAP-01633-operator-object.vertex_group_quantize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01633", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01633", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01634", + "gapId": "operator:object.vertex_group_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01634-operator-object.vertex_group_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01634.py -- tests/files/web/generated/M16-GAP-01634-operator-object.vertex_group_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01634", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01634", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01635", + "gapId": "operator:object.vertex_group_remove_from", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01635-operator-object.vertex_group_remove_from.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01635.py -- tests/files/web/generated/M16-GAP-01635-operator-object.vertex_group_remove_from.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01635", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01635", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01636", + "gapId": "operator:object.vertex_group_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01636-operator-object.vertex_group_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01636.py -- tests/files/web/generated/M16-GAP-01636-operator-object.vertex_group_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01636", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01636", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01637", + "gapId": "operator:object.vertex_group_set_active", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01637-operator-object.vertex_group_set_active.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01637.py -- tests/files/web/generated/M16-GAP-01637-operator-object.vertex_group_set_active.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01637", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01637", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01638", + "gapId": "operator:object.vertex_group_smooth", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01638-operator-object.vertex_group_smooth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01638.py -- tests/files/web/generated/M16-GAP-01638-operator-object.vertex_group_smooth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01638", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01638", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01639", + "gapId": "operator:object.vertex_group_sort", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01639-operator-object.vertex_group_sort.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01639.py -- tests/files/web/generated/M16-GAP-01639-operator-object.vertex_group_sort.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01639", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01639", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01640", + "gapId": "operator:object.vertex_parent_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01640-operator-object.vertex_parent_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01640.py -- tests/files/web/generated/M16-GAP-01640-operator-object.vertex_parent_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01640", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01640", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01641", + "gapId": "operator:object.vertex_weight_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01641-operator-object.vertex_weight_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01641.py -- tests/files/web/generated/M16-GAP-01641-operator-object.vertex_weight_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01641", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01641", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01642", + "gapId": "operator:object.vertex_weight_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01642-operator-object.vertex_weight_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01642.py -- tests/files/web/generated/M16-GAP-01642-operator-object.vertex_weight_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01642", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01642", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01643", + "gapId": "operator:object.vertex_weight_normalize_active_vertex", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01643-operator-object.vertex_weight_normalize_active_vertex.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01643.py -- tests/files/web/generated/M16-GAP-01643-operator-object.vertex_weight_normalize_active_vertex.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01643", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01643", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01644", + "gapId": "operator:object.vertex_weight_paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01644-operator-object.vertex_weight_paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01644.py -- tests/files/web/generated/M16-GAP-01644-operator-object.vertex_weight_paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01644", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01644", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01645", + "gapId": "operator:object.vertex_weight_set_active", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01645-operator-object.vertex_weight_set_active.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01645.py -- tests/files/web/generated/M16-GAP-01645-operator-object.vertex_weight_set_active.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01645", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01645", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01646", + "gapId": "operator:object.visual_geometry_to_objects", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01646-operator-object.visual_geometry_to_objects.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01646.py -- tests/files/web/generated/M16-GAP-01646-operator-object.visual_geometry_to_objects.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01646", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01646", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01647", + "gapId": "operator:object.visual_transform_apply", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01647-operator-object.visual_transform_apply.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01647.py -- tests/files/web/generated/M16-GAP-01647-operator-object.visual_transform_apply.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01647", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01647", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01648", + "gapId": "operator:object.volume_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01648-operator-object.volume_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01648.py -- tests/files/web/generated/M16-GAP-01648-operator-object.volume_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01648", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01648", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01649", + "gapId": "operator:object.volume_import", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01649-operator-object.volume_import.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01649.py -- tests/files/web/generated/M16-GAP-01649-operator-object.volume_import.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01649", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01649", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01650", + "gapId": "operator:object.voxel_remesh", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01650-operator-object.voxel_remesh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01650.py -- tests/files/web/generated/M16-GAP-01650-operator-object.voxel_remesh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01650", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01650", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01651", + "gapId": "operator:object.voxel_size_edit", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01651-operator-object.voxel_size_edit.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01651.py -- tests/files/web/generated/M16-GAP-01651-operator-object.voxel_size_edit.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01651", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01651", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01652", + "gapId": "operator:outliner.action_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01652-operator-outliner.action_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01652.py -- tests/files/web/generated/M16-GAP-01652-operator-outliner.action_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01652", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01652", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01653", + "gapId": "operator:outliner.animdata_operation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01653-operator-outliner.animdata_operation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01653.py -- tests/files/web/generated/M16-GAP-01653-operator-outliner.animdata_operation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01653", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01653", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01654", + "gapId": "operator:outliner.clear_filter", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01654-operator-outliner.clear_filter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01654.py -- tests/files/web/generated/M16-GAP-01654-operator-outliner.clear_filter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01654", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01654", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01655", + "gapId": "operator:outliner.collection_color_tag_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01655-operator-outliner.collection_color_tag_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01655.py -- tests/files/web/generated/M16-GAP-01655-operator-outliner.collection_color_tag_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01655", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01655", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01656", + "gapId": "operator:outliner.collection_disable", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01656-operator-outliner.collection_disable.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01656.py -- tests/files/web/generated/M16-GAP-01656-operator-outliner.collection_disable.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01656", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01656", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01657", + "gapId": "operator:outliner.collection_disable_render", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01657-operator-outliner.collection_disable_render.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01657.py -- tests/files/web/generated/M16-GAP-01657-operator-outliner.collection_disable_render.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01657", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01657", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01658", + "gapId": "operator:outliner.collection_drop", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01658-operator-outliner.collection_drop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01658.py -- tests/files/web/generated/M16-GAP-01658-operator-outliner.collection_drop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01658", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01658", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01659", + "gapId": "operator:outliner.collection_duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01659-operator-outliner.collection_duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01659.py -- tests/files/web/generated/M16-GAP-01659-operator-outliner.collection_duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01659", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01659", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01660", + "gapId": "operator:outliner.collection_duplicate_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01660-operator-outliner.collection_duplicate_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01660.py -- tests/files/web/generated/M16-GAP-01660-operator-outliner.collection_duplicate_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01660", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01660", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01661", + "gapId": "operator:outliner.collection_enable", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01661-operator-outliner.collection_enable.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01661.py -- tests/files/web/generated/M16-GAP-01661-operator-outliner.collection_enable.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01661", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01661", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01662", + "gapId": "operator:outliner.collection_enable_render", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01662-operator-outliner.collection_enable_render.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01662.py -- tests/files/web/generated/M16-GAP-01662-operator-outliner.collection_enable_render.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01662", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01662", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01663", + "gapId": "operator:outliner.collection_exclude_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01663-operator-outliner.collection_exclude_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01663.py -- tests/files/web/generated/M16-GAP-01663-operator-outliner.collection_exclude_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01663", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01663", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01664", + "gapId": "operator:outliner.collection_exclude_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01664-operator-outliner.collection_exclude_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01664.py -- tests/files/web/generated/M16-GAP-01664-operator-outliner.collection_exclude_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01664", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01664", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01665", + "gapId": "operator:outliner.collection_hide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01665-operator-outliner.collection_hide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01665.py -- tests/files/web/generated/M16-GAP-01665-operator-outliner.collection_hide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01665", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01665", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01666", + "gapId": "operator:outliner.collection_hide_inside", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01666-operator-outliner.collection_hide_inside.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01666.py -- tests/files/web/generated/M16-GAP-01666-operator-outliner.collection_hide_inside.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01666", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01666", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01667", + "gapId": "operator:outliner.collection_hierarchy_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01667-operator-outliner.collection_hierarchy_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01667.py -- tests/files/web/generated/M16-GAP-01667-operator-outliner.collection_hierarchy_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01667", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01667", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01668", + "gapId": "operator:outliner.collection_holdout_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01668-operator-outliner.collection_holdout_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01668.py -- tests/files/web/generated/M16-GAP-01668-operator-outliner.collection_holdout_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01668", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01668", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01669", + "gapId": "operator:outliner.collection_holdout_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01669-operator-outliner.collection_holdout_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01669.py -- tests/files/web/generated/M16-GAP-01669-operator-outliner.collection_holdout_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01669", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01669", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01670", + "gapId": "operator:outliner.collection_indirect_only_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01670-operator-outliner.collection_indirect_only_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01670.py -- tests/files/web/generated/M16-GAP-01670-operator-outliner.collection_indirect_only_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01670", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01670", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01671", + "gapId": "operator:outliner.collection_indirect_only_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01671-operator-outliner.collection_indirect_only_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01671.py -- tests/files/web/generated/M16-GAP-01671-operator-outliner.collection_indirect_only_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01671", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01671", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01672", + "gapId": "operator:outliner.collection_instance", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01672-operator-outliner.collection_instance.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01672.py -- tests/files/web/generated/M16-GAP-01672-operator-outliner.collection_instance.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01672", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01672", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01673", + "gapId": "operator:outliner.collection_isolate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01673-operator-outliner.collection_isolate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01673.py -- tests/files/web/generated/M16-GAP-01673-operator-outliner.collection_isolate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01673", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01673", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01674", + "gapId": "operator:outliner.collection_link", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01674-operator-outliner.collection_link.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01674.py -- tests/files/web/generated/M16-GAP-01674-operator-outliner.collection_link.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01674", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01674", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01675", + "gapId": "operator:outliner.collection_new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01675-operator-outliner.collection_new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01675.py -- tests/files/web/generated/M16-GAP-01675-operator-outliner.collection_new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01675", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01675", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01676", + "gapId": "operator:outliner.collection_objects_deselect", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01676-operator-outliner.collection_objects_deselect.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01676.py -- tests/files/web/generated/M16-GAP-01676-operator-outliner.collection_objects_deselect.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01676", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01676", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01677", + "gapId": "operator:outliner.collection_objects_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01677-operator-outliner.collection_objects_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01677.py -- tests/files/web/generated/M16-GAP-01677-operator-outliner.collection_objects_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01677", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01677", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01678", + "gapId": "operator:outliner.collection_show", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01678-operator-outliner.collection_show.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01678.py -- tests/files/web/generated/M16-GAP-01678-operator-outliner.collection_show.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01678", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01678", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01679", + "gapId": "operator:outliner.collection_show_inside", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01679-operator-outliner.collection_show_inside.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01679.py -- tests/files/web/generated/M16-GAP-01679-operator-outliner.collection_show_inside.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01679", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01679", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01680", + "gapId": "operator:outliner.constraint_operation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01680-operator-outliner.constraint_operation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01680.py -- tests/files/web/generated/M16-GAP-01680-operator-outliner.constraint_operation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01680", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01680", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01681", + "gapId": "operator:outliner.data_operation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01681-operator-outliner.data_operation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01681.py -- tests/files/web/generated/M16-GAP-01681-operator-outliner.data_operation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01681", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01681", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01682", + "gapId": "operator:outliner.datastack_drop", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01682-operator-outliner.datastack_drop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01682.py -- tests/files/web/generated/M16-GAP-01682-operator-outliner.datastack_drop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01682", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01682", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01683", + "gapId": "operator:outliner.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01683-operator-outliner.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01683.py -- tests/files/web/generated/M16-GAP-01683-operator-outliner.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01683", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01683", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01684", + "gapId": "operator:outliner.drivers_add_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01684-operator-outliner.drivers_add_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01684.py -- tests/files/web/generated/M16-GAP-01684-operator-outliner.drivers_add_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01684", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01684", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01685", + "gapId": "operator:outliner.drivers_delete_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01685-operator-outliner.drivers_delete_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01685.py -- tests/files/web/generated/M16-GAP-01685-operator-outliner.drivers_delete_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01685", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01685", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01686", + "gapId": "operator:outliner.expanded_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01686-operator-outliner.expanded_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01686.py -- tests/files/web/generated/M16-GAP-01686-operator-outliner.expanded_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01686", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01686", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01687", + "gapId": "operator:outliner.hide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01687-operator-outliner.hide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01687.py -- tests/files/web/generated/M16-GAP-01687-operator-outliner.hide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01687", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01687", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01688", + "gapId": "operator:outliner.highlight_update", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01688-operator-outliner.highlight_update.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01688.py -- tests/files/web/generated/M16-GAP-01688-operator-outliner.highlight_update.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01688", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01688", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01689", + "gapId": "operator:outliner.id_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01689-operator-outliner.id_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01689.py -- tests/files/web/generated/M16-GAP-01689-operator-outliner.id_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01689", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01689", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01690", + "gapId": "operator:outliner.id_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01690-operator-outliner.id_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01690.py -- tests/files/web/generated/M16-GAP-01690-operator-outliner.id_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01690", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01690", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01691", + "gapId": "operator:outliner.id_linked_relocate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01691-operator-outliner.id_linked_relocate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01691.py -- tests/files/web/generated/M16-GAP-01691-operator-outliner.id_linked_relocate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01691", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01691", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01692", + "gapId": "operator:outliner.id_operation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01692-operator-outliner.id_operation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01692.py -- tests/files/web/generated/M16-GAP-01692-operator-outliner.id_operation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01692", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01692", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01693", + "gapId": "operator:outliner.id_paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01693-operator-outliner.id_paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01693.py -- tests/files/web/generated/M16-GAP-01693-operator-outliner.id_paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01693", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01693", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01694", + "gapId": "operator:outliner.id_remap", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01694-operator-outliner.id_remap.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01694.py -- tests/files/web/generated/M16-GAP-01694-operator-outliner.id_remap.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01694", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01694", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01695", + "gapId": "operator:outliner.item_activate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01695-operator-outliner.item_activate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01695.py -- tests/files/web/generated/M16-GAP-01695-operator-outliner.item_activate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01695", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01695", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01696", + "gapId": "operator:outliner.item_drag_drop", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01696-operator-outliner.item_drag_drop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01696.py -- tests/files/web/generated/M16-GAP-01696-operator-outliner.item_drag_drop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01696", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01696", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01697", + "gapId": "operator:outliner.item_openclose", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01697-operator-outliner.item_openclose.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01697.py -- tests/files/web/generated/M16-GAP-01697-operator-outliner.item_openclose.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01697", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01697", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01698", + "gapId": "operator:outliner.item_rename", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01698-operator-outliner.item_rename.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01698.py -- tests/files/web/generated/M16-GAP-01698-operator-outliner.item_rename.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01698", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01698", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01699", + "gapId": "operator:outliner.keyingset_add_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01699-operator-outliner.keyingset_add_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01699.py -- tests/files/web/generated/M16-GAP-01699-operator-outliner.keyingset_add_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01699", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01699", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01700", + "gapId": "operator:outliner.keyingset_remove_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01700-operator-outliner.keyingset_remove_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01700.py -- tests/files/web/generated/M16-GAP-01700-operator-outliner.keyingset_remove_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01700", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01700", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01701", + "gapId": "operator:outliner.lib_operation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01701-operator-outliner.lib_operation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01701.py -- tests/files/web/generated/M16-GAP-01701-operator-outliner.lib_operation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01701", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01701", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01702", + "gapId": "operator:outliner.lib_relocate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01702-operator-outliner.lib_relocate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01702.py -- tests/files/web/generated/M16-GAP-01702-operator-outliner.lib_relocate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01702", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01702", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01703", + "gapId": "operator:outliner.liboverride_operation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01703-operator-outliner.liboverride_operation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01703.py -- tests/files/web/generated/M16-GAP-01703-operator-outliner.liboverride_operation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01703", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01703", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01704", + "gapId": "operator:outliner.liboverride_property_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01704-operator-outliner.liboverride_property_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01704.py -- tests/files/web/generated/M16-GAP-01704-operator-outliner.liboverride_property_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01704", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01704", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01705", + "gapId": "operator:outliner.liboverride_troubleshoot_operation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01705-operator-outliner.liboverride_troubleshoot_operation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01705.py -- tests/files/web/generated/M16-GAP-01705-operator-outliner.liboverride_troubleshoot_operation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01705", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01705", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01706", + "gapId": "operator:outliner.material_drop", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01706-operator-outliner.material_drop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01706.py -- tests/files/web/generated/M16-GAP-01706-operator-outliner.material_drop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01706", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01706", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01707", + "gapId": "operator:outliner.modifier_operation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01707-operator-outliner.modifier_operation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01707.py -- tests/files/web/generated/M16-GAP-01707-operator-outliner.modifier_operation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01707", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01707", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01708", + "gapId": "operator:outliner.object_operation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01708-operator-outliner.object_operation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01708.py -- tests/files/web/generated/M16-GAP-01708-operator-outliner.object_operation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01708", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01708", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01709", + "gapId": "operator:outliner.operation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01709-operator-outliner.operation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01709.py -- tests/files/web/generated/M16-GAP-01709-operator-outliner.operation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01709", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01709", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01710", + "gapId": "operator:outliner.orphans_manage", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01710-operator-outliner.orphans_manage.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01710.py -- tests/files/web/generated/M16-GAP-01710-operator-outliner.orphans_manage.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01710", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01710", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01711", + "gapId": "operator:outliner.orphans_purge", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01711-operator-outliner.orphans_purge.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01711.py -- tests/files/web/generated/M16-GAP-01711-operator-outliner.orphans_purge.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01711", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01711", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01712", + "gapId": "operator:outliner.parent_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01712-operator-outliner.parent_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01712.py -- tests/files/web/generated/M16-GAP-01712-operator-outliner.parent_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01712", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01712", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01713", + "gapId": "operator:outliner.parent_drop", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01713-operator-outliner.parent_drop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01713.py -- tests/files/web/generated/M16-GAP-01713-operator-outliner.parent_drop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01713", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01713", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01714", + "gapId": "operator:outliner.scene_drop", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01714-operator-outliner.scene_drop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01714.py -- tests/files/web/generated/M16-GAP-01714-operator-outliner.scene_drop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01714", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01714", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01715", + "gapId": "operator:outliner.scene_operation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01715-operator-outliner.scene_operation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01715.py -- tests/files/web/generated/M16-GAP-01715-operator-outliner.scene_operation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01715", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01715", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01716", + "gapId": "operator:outliner.scroll_page", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01716-operator-outliner.scroll_page.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01716.py -- tests/files/web/generated/M16-GAP-01716-operator-outliner.scroll_page.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01716", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01716", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01717", + "gapId": "operator:outliner.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01717-operator-outliner.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01717.py -- tests/files/web/generated/M16-GAP-01717-operator-outliner.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01717", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01717", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01718", + "gapId": "operator:outliner.select_box", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01718-operator-outliner.select_box.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01718.py -- tests/files/web/generated/M16-GAP-01718-operator-outliner.select_box.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01718", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01718", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01719", + "gapId": "operator:outliner.select_walk", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01719-operator-outliner.select_walk.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01719.py -- tests/files/web/generated/M16-GAP-01719-operator-outliner.select_walk.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01719", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01719", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01720", + "gapId": "operator:outliner.show_active", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01720-operator-outliner.show_active.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01720.py -- tests/files/web/generated/M16-GAP-01720-operator-outliner.show_active.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01720", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01720", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01721", + "gapId": "operator:outliner.show_hierarchy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01721-operator-outliner.show_hierarchy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01721.py -- tests/files/web/generated/M16-GAP-01721-operator-outliner.show_hierarchy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01721", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01721", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01722", + "gapId": "operator:outliner.show_one_level", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01722-operator-outliner.show_one_level.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01722.py -- tests/files/web/generated/M16-GAP-01722-operator-outliner.show_one_level.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01722", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01722", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01723", + "gapId": "operator:outliner.start_filter", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01723-operator-outliner.start_filter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01723.py -- tests/files/web/generated/M16-GAP-01723-operator-outliner.start_filter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01723", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01723", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01724", + "gapId": "operator:outliner.unhide_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01724-operator-outliner.unhide_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01724.py -- tests/files/web/generated/M16-GAP-01724-operator-outliner.unhide_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01724", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01724", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01725", + "gapId": "operator:paint.add_simple_uvs", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01725-operator-paint.add_simple_uvs.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01725.py -- tests/files/web/generated/M16-GAP-01725-operator-paint.add_simple_uvs.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01725", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01725", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01726", + "gapId": "operator:paint.add_texture_paint_slot", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01726-operator-paint.add_texture_paint_slot.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01726.py -- tests/files/web/generated/M16-GAP-01726-operator-paint.add_texture_paint_slot.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01726", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01726", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01727", + "gapId": "operator:paint.brush_colors_flip", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01727-operator-paint.brush_colors_flip.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01727.py -- tests/files/web/generated/M16-GAP-01727-operator-paint.brush_colors_flip.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01727", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01727", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01728", + "gapId": "operator:paint.face_select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01728-operator-paint.face_select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01728.py -- tests/files/web/generated/M16-GAP-01728-operator-paint.face_select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01728", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01728", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01729", + "gapId": "operator:paint.face_select_hide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01729-operator-paint.face_select_hide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01729.py -- tests/files/web/generated/M16-GAP-01729-operator-paint.face_select_hide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01729", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01729", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01730", + "gapId": "operator:paint.face_select_less", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01730-operator-paint.face_select_less.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01730.py -- tests/files/web/generated/M16-GAP-01730-operator-paint.face_select_less.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01730", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01730", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01731", + "gapId": "operator:paint.face_select_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01731-operator-paint.face_select_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01731.py -- tests/files/web/generated/M16-GAP-01731-operator-paint.face_select_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01731", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01731", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01732", + "gapId": "operator:paint.face_select_linked_pick", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01732-operator-paint.face_select_linked_pick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01732.py -- tests/files/web/generated/M16-GAP-01732-operator-paint.face_select_linked_pick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01732", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01732", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01733", + "gapId": "operator:paint.face_select_loop", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01733-operator-paint.face_select_loop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01733.py -- tests/files/web/generated/M16-GAP-01733-operator-paint.face_select_loop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01733", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01733", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01734", + "gapId": "operator:paint.face_select_more", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01734-operator-paint.face_select_more.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01734.py -- tests/files/web/generated/M16-GAP-01734-operator-paint.face_select_more.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01734", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01734", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01735", + "gapId": "operator:paint.face_vert_reveal", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01735-operator-paint.face_vert_reveal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01735.py -- tests/files/web/generated/M16-GAP-01735-operator-paint.face_vert_reveal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01735", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01735", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01736", + "gapId": "operator:paint.grab_clone", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01736-operator-paint.grab_clone.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01736.py -- tests/files/web/generated/M16-GAP-01736-operator-paint.grab_clone.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01736", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01736", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01737", + "gapId": "operator:paint.hide_show", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01737-operator-paint.hide_show.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01737.py -- tests/files/web/generated/M16-GAP-01737-operator-paint.hide_show.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01737", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01737", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01738", + "gapId": "operator:paint.hide_show_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01738-operator-paint.hide_show_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01738.py -- tests/files/web/generated/M16-GAP-01738-operator-paint.hide_show_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01738", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01738", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01739", + "gapId": "operator:paint.hide_show_lasso_gesture", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01739-operator-paint.hide_show_lasso_gesture.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01739.py -- tests/files/web/generated/M16-GAP-01739-operator-paint.hide_show_lasso_gesture.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01739", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01739", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01740", + "gapId": "operator:paint.hide_show_line_gesture", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01740-operator-paint.hide_show_line_gesture.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01740.py -- tests/files/web/generated/M16-GAP-01740-operator-paint.hide_show_line_gesture.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01740", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01740", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01741", + "gapId": "operator:paint.hide_show_masked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01741-operator-paint.hide_show_masked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01741.py -- tests/files/web/generated/M16-GAP-01741-operator-paint.hide_show_masked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01741", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01741", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01742", + "gapId": "operator:paint.hide_show_polyline_gesture", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01742-operator-paint.hide_show_polyline_gesture.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01742.py -- tests/files/web/generated/M16-GAP-01742-operator-paint.hide_show_polyline_gesture.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01742", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01742", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01743", + "gapId": "operator:paint.image_from_view", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01743-operator-paint.image_from_view.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01743.py -- tests/files/web/generated/M16-GAP-01743-operator-paint.image_from_view.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01743", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01743", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01744", + "gapId": "operator:paint.image_paint", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01744-operator-paint.image_paint.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01744.py -- tests/files/web/generated/M16-GAP-01744-operator-paint.image_paint.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01744", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01744", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01745", + "gapId": "operator:paint.mask_box_gesture", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01745-operator-paint.mask_box_gesture.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01745.py -- tests/files/web/generated/M16-GAP-01745-operator-paint.mask_box_gesture.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01745", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01745", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01746", + "gapId": "operator:paint.mask_flood_fill", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01746-operator-paint.mask_flood_fill.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01746.py -- tests/files/web/generated/M16-GAP-01746-operator-paint.mask_flood_fill.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01746", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01746", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01747", + "gapId": "operator:paint.mask_lasso_gesture", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01747-operator-paint.mask_lasso_gesture.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01747.py -- tests/files/web/generated/M16-GAP-01747-operator-paint.mask_lasso_gesture.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01747", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01747", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01748", + "gapId": "operator:paint.mask_line_gesture", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01748-operator-paint.mask_line_gesture.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01748.py -- tests/files/web/generated/M16-GAP-01748-operator-paint.mask_line_gesture.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01748", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01748", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01749", + "gapId": "operator:paint.mask_polyline_gesture", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01749-operator-paint.mask_polyline_gesture.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01749.py -- tests/files/web/generated/M16-GAP-01749-operator-paint.mask_polyline_gesture.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01749", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01749", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01750", + "gapId": "operator:paint.project_image", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01750-operator-paint.project_image.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01750.py -- tests/files/web/generated/M16-GAP-01750-operator-paint.project_image.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01750", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01750", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01751", + "gapId": "operator:paint.sample_color", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01751-operator-paint.sample_color.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01751.py -- tests/files/web/generated/M16-GAP-01751-operator-paint.sample_color.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01751", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01751", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01752", + "gapId": "operator:paint.texture_paint_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01752-operator-paint.texture_paint_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01752.py -- tests/files/web/generated/M16-GAP-01752-operator-paint.texture_paint_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01752", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01752", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01753", + "gapId": "operator:paint.vert_select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01753-operator-paint.vert_select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01753.py -- tests/files/web/generated/M16-GAP-01753-operator-paint.vert_select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01753", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01753", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01754", + "gapId": "operator:paint.vert_select_hide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01754-operator-paint.vert_select_hide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01754.py -- tests/files/web/generated/M16-GAP-01754-operator-paint.vert_select_hide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01754", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01754", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01755", + "gapId": "operator:paint.vert_select_less", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01755-operator-paint.vert_select_less.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01755.py -- tests/files/web/generated/M16-GAP-01755-operator-paint.vert_select_less.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01755", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01755", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01756", + "gapId": "operator:paint.vert_select_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01756-operator-paint.vert_select_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01756.py -- tests/files/web/generated/M16-GAP-01756-operator-paint.vert_select_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01756", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01756", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01757", + "gapId": "operator:paint.vert_select_linked_pick", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01757-operator-paint.vert_select_linked_pick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01757.py -- tests/files/web/generated/M16-GAP-01757-operator-paint.vert_select_linked_pick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01757", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01757", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01758", + "gapId": "operator:paint.vert_select_loop", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01758-operator-paint.vert_select_loop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01758.py -- tests/files/web/generated/M16-GAP-01758-operator-paint.vert_select_loop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01758", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01758", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01759", + "gapId": "operator:paint.vert_select_more", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01759-operator-paint.vert_select_more.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01759.py -- tests/files/web/generated/M16-GAP-01759-operator-paint.vert_select_more.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01759", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01759", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01760", + "gapId": "operator:paint.vert_select_ungrouped", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01760-operator-paint.vert_select_ungrouped.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01760.py -- tests/files/web/generated/M16-GAP-01760-operator-paint.vert_select_ungrouped.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01760", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01760", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01761", + "gapId": "operator:paint.vertex_color_brightness_contrast", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01761-operator-paint.vertex_color_brightness_contrast.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01761.py -- tests/files/web/generated/M16-GAP-01761-operator-paint.vertex_color_brightness_contrast.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01761", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01761", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01762", + "gapId": "operator:paint.vertex_color_dirt", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01762-operator-paint.vertex_color_dirt.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01762.py -- tests/files/web/generated/M16-GAP-01762-operator-paint.vertex_color_dirt.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01762", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01762", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01763", + "gapId": "operator:paint.vertex_color_from_weight", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01763-operator-paint.vertex_color_from_weight.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01763.py -- tests/files/web/generated/M16-GAP-01763-operator-paint.vertex_color_from_weight.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01763", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01763", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01764", + "gapId": "operator:paint.vertex_color_hsv", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01764-operator-paint.vertex_color_hsv.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01764.py -- tests/files/web/generated/M16-GAP-01764-operator-paint.vertex_color_hsv.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01764", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01764", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01765", + "gapId": "operator:paint.vertex_color_invert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01765-operator-paint.vertex_color_invert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01765.py -- tests/files/web/generated/M16-GAP-01765-operator-paint.vertex_color_invert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01765", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01765", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01766", + "gapId": "operator:paint.vertex_color_levels", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01766-operator-paint.vertex_color_levels.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01766.py -- tests/files/web/generated/M16-GAP-01766-operator-paint.vertex_color_levels.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01766", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01766", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01767", + "gapId": "operator:paint.vertex_color_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01767-operator-paint.vertex_color_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01767.py -- tests/files/web/generated/M16-GAP-01767-operator-paint.vertex_color_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01767", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01767", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01768", + "gapId": "operator:paint.vertex_color_smooth", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01768-operator-paint.vertex_color_smooth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01768.py -- tests/files/web/generated/M16-GAP-01768-operator-paint.vertex_color_smooth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01768", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01768", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01769", + "gapId": "operator:paint.vertex_paint", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01769-operator-paint.vertex_paint.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01769.py -- tests/files/web/generated/M16-GAP-01769-operator-paint.vertex_paint.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01769", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01769", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01770", + "gapId": "operator:paint.vertex_paint_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01770-operator-paint.vertex_paint_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01770.py -- tests/files/web/generated/M16-GAP-01770-operator-paint.vertex_paint_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01770", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01770", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01771", + "gapId": "operator:paint.visibility_filter", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01771-operator-paint.visibility_filter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01771.py -- tests/files/web/generated/M16-GAP-01771-operator-paint.visibility_filter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01771", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01771", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01772", + "gapId": "operator:paint.visibility_invert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01772-operator-paint.visibility_invert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01772.py -- tests/files/web/generated/M16-GAP-01772-operator-paint.visibility_invert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01772", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01772", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01773", + "gapId": "operator:paint.weight_from_bones", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01773-operator-paint.weight_from_bones.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01773.py -- tests/files/web/generated/M16-GAP-01773-operator-paint.weight_from_bones.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01773", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01773", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01774", + "gapId": "operator:paint.weight_gradient", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01774-operator-paint.weight_gradient.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01774.py -- tests/files/web/generated/M16-GAP-01774-operator-paint.weight_gradient.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01774", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01774", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01775", + "gapId": "operator:paint.weight_paint", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01775-operator-paint.weight_paint.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01775.py -- tests/files/web/generated/M16-GAP-01775-operator-paint.weight_paint.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01775", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01775", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01776", + "gapId": "operator:paint.weight_paint_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01776-operator-paint.weight_paint_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01776.py -- tests/files/web/generated/M16-GAP-01776-operator-paint.weight_paint_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01776", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01776", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01777", + "gapId": "operator:paint.weight_sample", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01777-operator-paint.weight_sample.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01777.py -- tests/files/web/generated/M16-GAP-01777-operator-paint.weight_sample.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01777", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01777", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01778", + "gapId": "operator:paint.weight_sample_group", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01778-operator-paint.weight_sample_group.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01778.py -- tests/files/web/generated/M16-GAP-01778-operator-paint.weight_sample_group.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01778", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01778", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01779", + "gapId": "operator:paint.weight_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01779-operator-paint.weight_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01779.py -- tests/files/web/generated/M16-GAP-01779-operator-paint.weight_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01779", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01779", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01780", + "gapId": "operator:paintcurve.add_point", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01780-operator-paintcurve.add_point.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01780.py -- tests/files/web/generated/M16-GAP-01780-operator-paintcurve.add_point.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01780", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01780", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01781", + "gapId": "operator:paintcurve.add_point_slide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01781-operator-paintcurve.add_point_slide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01781.py -- tests/files/web/generated/M16-GAP-01781-operator-paintcurve.add_point_slide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01781", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01781", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01782", + "gapId": "operator:paintcurve.cursor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01782-operator-paintcurve.cursor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01782.py -- tests/files/web/generated/M16-GAP-01782-operator-paintcurve.cursor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01782", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01782", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01783", + "gapId": "operator:paintcurve.delete_point", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01783-operator-paintcurve.delete_point.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01783.py -- tests/files/web/generated/M16-GAP-01783-operator-paintcurve.delete_point.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01783", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01783", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01784", + "gapId": "operator:paintcurve.draw", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01784-operator-paintcurve.draw.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01784.py -- tests/files/web/generated/M16-GAP-01784-operator-paintcurve.draw.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01784", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01784", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01785", + "gapId": "operator:paintcurve.new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01785-operator-paintcurve.new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01785.py -- tests/files/web/generated/M16-GAP-01785-operator-paintcurve.new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01785", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01785", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01786", + "gapId": "operator:paintcurve.select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01786-operator-paintcurve.select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01786.py -- tests/files/web/generated/M16-GAP-01786-operator-paintcurve.select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01786", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01786", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01787", + "gapId": "operator:paintcurve.slide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01787-operator-paintcurve.slide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01787.py -- tests/files/web/generated/M16-GAP-01787-operator-paintcurve.slide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01787", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01787", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01788", + "gapId": "operator:palette.color_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01788-operator-palette.color_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01788.py -- tests/files/web/generated/M16-GAP-01788-operator-palette.color_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01788", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01788", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01789", + "gapId": "operator:palette.color_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01789-operator-palette.color_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01789.py -- tests/files/web/generated/M16-GAP-01789-operator-palette.color_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01789", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01789", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01790", + "gapId": "operator:palette.color_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01790-operator-palette.color_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01790.py -- tests/files/web/generated/M16-GAP-01790-operator-palette.color_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01790", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01790", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01791", + "gapId": "operator:palette.extract_from_image", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01791-operator-palette.extract_from_image.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01791.py -- tests/files/web/generated/M16-GAP-01791-operator-palette.extract_from_image.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01791", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01791", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01792", + "gapId": "operator:palette.join", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01792-operator-palette.join.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01792.py -- tests/files/web/generated/M16-GAP-01792-operator-palette.join.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01792", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01792", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01793", + "gapId": "operator:palette.new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01793-operator-palette.new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01793.py -- tests/files/web/generated/M16-GAP-01793-operator-palette.new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01793", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01793", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01794", + "gapId": "operator:palette.sort", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01794-operator-palette.sort.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01794.py -- tests/files/web/generated/M16-GAP-01794-operator-palette.sort.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01794", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01794", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01795", + "gapId": "operator:particle.brush_edit", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01795-operator-particle.brush_edit.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01795.py -- tests/files/web/generated/M16-GAP-01795-operator-particle.brush_edit.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01795", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01795", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01796", + "gapId": "operator:particle.connect_hair", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01796-operator-particle.connect_hair.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01796.py -- tests/files/web/generated/M16-GAP-01796-operator-particle.connect_hair.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01796", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01796", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01797", + "gapId": "operator:particle.copy_particle_systems", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01797-operator-particle.copy_particle_systems.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01797.py -- tests/files/web/generated/M16-GAP-01797-operator-particle.copy_particle_systems.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01797", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01797", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01798", + "gapId": "operator:particle.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01798-operator-particle.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01798.py -- tests/files/web/generated/M16-GAP-01798-operator-particle.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01798", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01798", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01799", + "gapId": "operator:particle.disconnect_hair", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01799-operator-particle.disconnect_hair.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01799.py -- tests/files/web/generated/M16-GAP-01799-operator-particle.disconnect_hair.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01799", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01799", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01800", + "gapId": "operator:particle.duplicate_particle_system", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01800-operator-particle.duplicate_particle_system.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01800.py -- tests/files/web/generated/M16-GAP-01800-operator-particle.duplicate_particle_system.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01800", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01800", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01801", + "gapId": "operator:particle.dupliob_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01801-operator-particle.dupliob_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01801.py -- tests/files/web/generated/M16-GAP-01801-operator-particle.dupliob_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01801", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01801", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01802", + "gapId": "operator:particle.dupliob_move_down", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01802-operator-particle.dupliob_move_down.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01802.py -- tests/files/web/generated/M16-GAP-01802-operator-particle.dupliob_move_down.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01802", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01802", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01803", + "gapId": "operator:particle.dupliob_move_up", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01803-operator-particle.dupliob_move_up.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01803.py -- tests/files/web/generated/M16-GAP-01803-operator-particle.dupliob_move_up.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01803", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01803", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01804", + "gapId": "operator:particle.dupliob_refresh", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01804-operator-particle.dupliob_refresh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01804.py -- tests/files/web/generated/M16-GAP-01804-operator-particle.dupliob_refresh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01804", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01804", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01805", + "gapId": "operator:particle.dupliob_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01805-operator-particle.dupliob_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01805.py -- tests/files/web/generated/M16-GAP-01805-operator-particle.dupliob_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01805", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01805", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01806", + "gapId": "operator:particle.edited_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01806-operator-particle.edited_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01806.py -- tests/files/web/generated/M16-GAP-01806-operator-particle.edited_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01806", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01806", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01807", + "gapId": "operator:particle.hair_dynamics_preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01807-operator-particle.hair_dynamics_preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01807.py -- tests/files/web/generated/M16-GAP-01807-operator-particle.hair_dynamics_preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01807", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01807", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01808", + "gapId": "operator:particle.hide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01808-operator-particle.hide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01808.py -- tests/files/web/generated/M16-GAP-01808-operator-particle.hide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01808", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01808", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01809", + "gapId": "operator:particle.mirror", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01809-operator-particle.mirror.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01809.py -- tests/files/web/generated/M16-GAP-01809-operator-particle.mirror.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01809", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01809", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01810", + "gapId": "operator:particle.new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01810-operator-particle.new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01810.py -- tests/files/web/generated/M16-GAP-01810-operator-particle.new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01810", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01810", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01811", + "gapId": "operator:particle.new_target", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01811-operator-particle.new_target.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01811.py -- tests/files/web/generated/M16-GAP-01811-operator-particle.new_target.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01811", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01811", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01812", + "gapId": "operator:particle.particle_edit_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01812-operator-particle.particle_edit_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01812.py -- tests/files/web/generated/M16-GAP-01812-operator-particle.particle_edit_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01812", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01812", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01813", + "gapId": "operator:particle.particle_system_remove_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01813-operator-particle.particle_system_remove_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01813.py -- tests/files/web/generated/M16-GAP-01813-operator-particle.particle_system_remove_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01813", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01813", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01814", + "gapId": "operator:particle.rekey", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01814-operator-particle.rekey.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01814.py -- tests/files/web/generated/M16-GAP-01814-operator-particle.rekey.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01814", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01814", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01815", + "gapId": "operator:particle.remove_doubles", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01815-operator-particle.remove_doubles.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01815.py -- tests/files/web/generated/M16-GAP-01815-operator-particle.remove_doubles.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01815", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01815", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01816", + "gapId": "operator:particle.reveal", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01816-operator-particle.reveal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01816.py -- tests/files/web/generated/M16-GAP-01816-operator-particle.reveal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01816", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01816", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01817", + "gapId": "operator:particle.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01817-operator-particle.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01817.py -- tests/files/web/generated/M16-GAP-01817-operator-particle.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01817", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01817", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01818", + "gapId": "operator:particle.select_less", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01818-operator-particle.select_less.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01818.py -- tests/files/web/generated/M16-GAP-01818-operator-particle.select_less.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01818", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01818", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01819", + "gapId": "operator:particle.select_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01819-operator-particle.select_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01819.py -- tests/files/web/generated/M16-GAP-01819-operator-particle.select_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01819", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01819", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01820", + "gapId": "operator:particle.select_linked_pick", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01820-operator-particle.select_linked_pick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01820.py -- tests/files/web/generated/M16-GAP-01820-operator-particle.select_linked_pick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01820", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01820", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01821", + "gapId": "operator:particle.select_more", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01821-operator-particle.select_more.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01821.py -- tests/files/web/generated/M16-GAP-01821-operator-particle.select_more.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01821", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01821", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01822", + "gapId": "operator:particle.select_random", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01822-operator-particle.select_random.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01822.py -- tests/files/web/generated/M16-GAP-01822-operator-particle.select_random.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01822", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01822", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01823", + "gapId": "operator:particle.select_roots", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01823-operator-particle.select_roots.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01823.py -- tests/files/web/generated/M16-GAP-01823-operator-particle.select_roots.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01823", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01823", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01824", + "gapId": "operator:particle.select_tips", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01824-operator-particle.select_tips.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01824.py -- tests/files/web/generated/M16-GAP-01824-operator-particle.select_tips.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01824", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01824", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01825", + "gapId": "operator:particle.shape_cut", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01825-operator-particle.shape_cut.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01825.py -- tests/files/web/generated/M16-GAP-01825-operator-particle.shape_cut.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01825", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01825", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01826", + "gapId": "operator:particle.subdivide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01826-operator-particle.subdivide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01826.py -- tests/files/web/generated/M16-GAP-01826-operator-particle.subdivide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01826", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01826", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01827", + "gapId": "operator:particle.target_move_down", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01827-operator-particle.target_move_down.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01827.py -- tests/files/web/generated/M16-GAP-01827-operator-particle.target_move_down.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01827", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01827", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01828", + "gapId": "operator:particle.target_move_up", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01828-operator-particle.target_move_up.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01828.py -- tests/files/web/generated/M16-GAP-01828-operator-particle.target_move_up.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01828", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01828", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01829", + "gapId": "operator:particle.target_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01829-operator-particle.target_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01829.py -- tests/files/web/generated/M16-GAP-01829-operator-particle.target_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01829", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01829", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01830", + "gapId": "operator:particle.unify_length", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01830-operator-particle.unify_length.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01830.py -- tests/files/web/generated/M16-GAP-01830-operator-particle.unify_length.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01830", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01830", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01831", + "gapId": "operator:particle.weight_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01831-operator-particle.weight_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01831.py -- tests/files/web/generated/M16-GAP-01831-operator-particle.weight_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01831", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01831", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01832", + "gapId": "operator:pointcloud.attribute_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01832-operator-pointcloud.attribute_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01832.py -- tests/files/web/generated/M16-GAP-01832-operator-pointcloud.attribute_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01832", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01832", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01833", + "gapId": "operator:pointcloud.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01833-operator-pointcloud.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01833.py -- tests/files/web/generated/M16-GAP-01833-operator-pointcloud.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01833", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01833", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01834", + "gapId": "operator:pointcloud.duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01834-operator-pointcloud.duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01834.py -- tests/files/web/generated/M16-GAP-01834-operator-pointcloud.duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01834", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01834", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01835", + "gapId": "operator:pointcloud.duplicate_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01835-operator-pointcloud.duplicate_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01835.py -- tests/files/web/generated/M16-GAP-01835-operator-pointcloud.duplicate_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01835", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01835", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01836", + "gapId": "operator:pointcloud.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01836-operator-pointcloud.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01836.py -- tests/files/web/generated/M16-GAP-01836-operator-pointcloud.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01836", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01836", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01837", + "gapId": "operator:pointcloud.select_random", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01837-operator-pointcloud.select_random.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01837.py -- tests/files/web/generated/M16-GAP-01837-operator-pointcloud.select_random.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01837", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01837", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01838", + "gapId": "operator:pointcloud.separate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01838-operator-pointcloud.separate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01838.py -- tests/files/web/generated/M16-GAP-01838-operator-pointcloud.separate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01838", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01838", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01839", + "gapId": "operator:pose.armature_apply", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01839-operator-pose.armature_apply.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01839.py -- tests/files/web/generated/M16-GAP-01839-operator-pose.armature_apply.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01839", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01839", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01840", + "gapId": "operator:pose.autoside_names", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01840-operator-pose.autoside_names.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01840.py -- tests/files/web/generated/M16-GAP-01840-operator-pose.autoside_names.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01840", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01840", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01841", + "gapId": "operator:pose.blend_to_neighbor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01841-operator-pose.blend_to_neighbor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01841.py -- tests/files/web/generated/M16-GAP-01841-operator-pose.blend_to_neighbor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01841", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01841", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01842", + "gapId": "operator:pose.blend_with_rest", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01842-operator-pose.blend_with_rest.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01842.py -- tests/files/web/generated/M16-GAP-01842-operator-pose.blend_with_rest.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01842", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01842", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01843", + "gapId": "operator:pose.breakdown", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01843-operator-pose.breakdown.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01843.py -- tests/files/web/generated/M16-GAP-01843-operator-pose.breakdown.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01843", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01843", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01844", + "gapId": "operator:pose.constraint_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01844-operator-pose.constraint_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01844.py -- tests/files/web/generated/M16-GAP-01844-operator-pose.constraint_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01844", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01844", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01845", + "gapId": "operator:pose.constraint_add_with_targets", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01845-operator-pose.constraint_add_with_targets.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01845.py -- tests/files/web/generated/M16-GAP-01845-operator-pose.constraint_add_with_targets.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01845", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01845", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01846", + "gapId": "operator:pose.constraints_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01846-operator-pose.constraints_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01846.py -- tests/files/web/generated/M16-GAP-01846-operator-pose.constraints_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01846", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01846", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01847", + "gapId": "operator:pose.constraints_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01847-operator-pose.constraints_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01847.py -- tests/files/web/generated/M16-GAP-01847-operator-pose.constraints_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01847", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01847", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01848", + "gapId": "operator:pose.copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01848-operator-pose.copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01848.py -- tests/files/web/generated/M16-GAP-01848-operator-pose.copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01848", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01848", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01849", + "gapId": "operator:pose.flip_names", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01849-operator-pose.flip_names.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01849.py -- tests/files/web/generated/M16-GAP-01849-operator-pose.flip_names.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01849", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01849", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01850", + "gapId": "operator:pose.hide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01850-operator-pose.hide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01850.py -- tests/files/web/generated/M16-GAP-01850-operator-pose.hide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01850", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01850", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01851", + "gapId": "operator:pose.ik_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01851-operator-pose.ik_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01851.py -- tests/files/web/generated/M16-GAP-01851-operator-pose.ik_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01851", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01851", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01852", + "gapId": "operator:pose.ik_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01852-operator-pose.ik_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01852.py -- tests/files/web/generated/M16-GAP-01852-operator-pose.ik_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01852", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01852", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01853", + "gapId": "operator:pose.loc_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01853-operator-pose.loc_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01853.py -- tests/files/web/generated/M16-GAP-01853-operator-pose.loc_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01853", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01853", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01854", + "gapId": "operator:pose.paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01854-operator-pose.paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01854.py -- tests/files/web/generated/M16-GAP-01854-operator-pose.paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01854", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01854", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01855", + "gapId": "operator:pose.paths_calculate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01855-operator-pose.paths_calculate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01855.py -- tests/files/web/generated/M16-GAP-01855-operator-pose.paths_calculate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01855", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01855", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01856", + "gapId": "operator:pose.paths_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01856-operator-pose.paths_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01856.py -- tests/files/web/generated/M16-GAP-01856-operator-pose.paths_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01856", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01856", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01857", + "gapId": "operator:pose.paths_range_update", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01857-operator-pose.paths_range_update.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01857.py -- tests/files/web/generated/M16-GAP-01857-operator-pose.paths_range_update.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01857", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01857", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01858", + "gapId": "operator:pose.paths_update", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01858-operator-pose.paths_update.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01858.py -- tests/files/web/generated/M16-GAP-01858-operator-pose.paths_update.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01858", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01858", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01859", + "gapId": "operator:pose.propagate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01859-operator-pose.propagate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01859.py -- tests/files/web/generated/M16-GAP-01859-operator-pose.propagate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01859", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01859", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01860", + "gapId": "operator:pose.push", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01860-operator-pose.push.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01860.py -- tests/files/web/generated/M16-GAP-01860-operator-pose.push.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01860", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01860", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01861", + "gapId": "operator:pose.quaternions_flip", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01861-operator-pose.quaternions_flip.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01861.py -- tests/files/web/generated/M16-GAP-01861-operator-pose.quaternions_flip.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01861", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01861", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01862", + "gapId": "operator:pose.relax", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01862-operator-pose.relax.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01862.py -- tests/files/web/generated/M16-GAP-01862-operator-pose.relax.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01862", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01862", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01863", + "gapId": "operator:pose.reveal", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01863-operator-pose.reveal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01863.py -- tests/files/web/generated/M16-GAP-01863-operator-pose.reveal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01863", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01863", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01864", + "gapId": "operator:pose.rot_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01864-operator-pose.rot_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01864.py -- tests/files/web/generated/M16-GAP-01864-operator-pose.rot_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01864", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01864", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01865", + "gapId": "operator:pose.rotation_mode_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01865-operator-pose.rotation_mode_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01865.py -- tests/files/web/generated/M16-GAP-01865-operator-pose.rotation_mode_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01865", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01865", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01866", + "gapId": "operator:pose.scale_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01866-operator-pose.scale_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01866.py -- tests/files/web/generated/M16-GAP-01866-operator-pose.scale_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01866", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01866", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01867", + "gapId": "operator:pose.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01867-operator-pose.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01867.py -- tests/files/web/generated/M16-GAP-01867-operator-pose.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01867", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01867", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01868", + "gapId": "operator:pose.select_constraint_target", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01868-operator-pose.select_constraint_target.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01868.py -- tests/files/web/generated/M16-GAP-01868-operator-pose.select_constraint_target.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01868", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01868", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01869", + "gapId": "operator:pose.select_grouped", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01869-operator-pose.select_grouped.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01869.py -- tests/files/web/generated/M16-GAP-01869-operator-pose.select_grouped.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01869", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01869", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01870", + "gapId": "operator:pose.select_hierarchy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01870-operator-pose.select_hierarchy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01870.py -- tests/files/web/generated/M16-GAP-01870-operator-pose.select_hierarchy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01870", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01870", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01871", + "gapId": "operator:pose.select_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01871-operator-pose.select_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01871.py -- tests/files/web/generated/M16-GAP-01871-operator-pose.select_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01871", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01871", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01872", + "gapId": "operator:pose.select_linked_pick", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01872-operator-pose.select_linked_pick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01872.py -- tests/files/web/generated/M16-GAP-01872-operator-pose.select_linked_pick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01872", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01872", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01873", + "gapId": "operator:pose.select_mirror", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01873-operator-pose.select_mirror.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01873.py -- tests/files/web/generated/M16-GAP-01873-operator-pose.select_mirror.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01873", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01873", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01874", + "gapId": "operator:pose.select_parent", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01874-operator-pose.select_parent.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01874.py -- tests/files/web/generated/M16-GAP-01874-operator-pose.select_parent.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01874", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01874", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01875", + "gapId": "operator:pose.selection_set_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01875-operator-pose.selection_set_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01875.py -- tests/files/web/generated/M16-GAP-01875-operator-pose.selection_set_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01875", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01875", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01876", + "gapId": "operator:pose.selection_set_add_and_assign", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01876-operator-pose.selection_set_add_and_assign.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01876.py -- tests/files/web/generated/M16-GAP-01876-operator-pose.selection_set_add_and_assign.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01876", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01876", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01877", + "gapId": "operator:pose.selection_set_assign", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01877-operator-pose.selection_set_assign.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01877.py -- tests/files/web/generated/M16-GAP-01877-operator-pose.selection_set_assign.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01877", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01877", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01878", + "gapId": "operator:pose.selection_set_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01878-operator-pose.selection_set_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01878.py -- tests/files/web/generated/M16-GAP-01878-operator-pose.selection_set_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01878", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01878", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01879", + "gapId": "operator:pose.selection_set_delete_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01879-operator-pose.selection_set_delete_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01879.py -- tests/files/web/generated/M16-GAP-01879-operator-pose.selection_set_delete_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01879", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01879", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01880", + "gapId": "operator:pose.selection_set_deselect", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01880-operator-pose.selection_set_deselect.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01880.py -- tests/files/web/generated/M16-GAP-01880-operator-pose.selection_set_deselect.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01880", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01880", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01881", + "gapId": "operator:pose.selection_set_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01881-operator-pose.selection_set_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01881.py -- tests/files/web/generated/M16-GAP-01881-operator-pose.selection_set_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01881", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01881", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01882", + "gapId": "operator:pose.selection_set_paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01882-operator-pose.selection_set_paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01882.py -- tests/files/web/generated/M16-GAP-01882-operator-pose.selection_set_paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01882", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01882", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01883", + "gapId": "operator:pose.selection_set_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01883-operator-pose.selection_set_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01883.py -- tests/files/web/generated/M16-GAP-01883-operator-pose.selection_set_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01883", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01883", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01884", + "gapId": "operator:pose.selection_set_remove_bones", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01884-operator-pose.selection_set_remove_bones.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01884.py -- tests/files/web/generated/M16-GAP-01884-operator-pose.selection_set_remove_bones.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01884", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01884", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01885", + "gapId": "operator:pose.selection_set_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01885-operator-pose.selection_set_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01885.py -- tests/files/web/generated/M16-GAP-01885-operator-pose.selection_set_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01885", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01885", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01886", + "gapId": "operator:pose.selection_set_unassign", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01886-operator-pose.selection_set_unassign.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01886.py -- tests/files/web/generated/M16-GAP-01886-operator-pose.selection_set_unassign.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01886", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01886", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01887", + "gapId": "operator:pose.transforms_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01887-operator-pose.transforms_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01887.py -- tests/files/web/generated/M16-GAP-01887-operator-pose.transforms_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01887", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01887", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01888", + "gapId": "operator:pose.user_transforms_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01888-operator-pose.user_transforms_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01888.py -- tests/files/web/generated/M16-GAP-01888-operator-pose.user_transforms_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01888", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01888", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01889", + "gapId": "operator:pose.visual_transform_apply", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01889-operator-pose.visual_transform_apply.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01889.py -- tests/files/web/generated/M16-GAP-01889-operator-pose.visual_transform_apply.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01889", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01889", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01890", + "gapId": "operator:poselib.apply_pose_asset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01890-operator-poselib.apply_pose_asset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01890.py -- tests/files/web/generated/M16-GAP-01890-operator-poselib.apply_pose_asset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01890", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01890", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01891", + "gapId": "operator:poselib.asset_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01891-operator-poselib.asset_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01891.py -- tests/files/web/generated/M16-GAP-01891-operator-poselib.asset_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01891", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01891", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01892", + "gapId": "operator:poselib.asset_modify", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01892-operator-poselib.asset_modify.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01892.py -- tests/files/web/generated/M16-GAP-01892-operator-poselib.asset_modify.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01892", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01892", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01893", + "gapId": "operator:poselib.blend_pose_asset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01893-operator-poselib.blend_pose_asset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01893.py -- tests/files/web/generated/M16-GAP-01893-operator-poselib.blend_pose_asset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01893", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01893", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01894", + "gapId": "operator:poselib.copy_as_asset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01894-operator-poselib.copy_as_asset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01894.py -- tests/files/web/generated/M16-GAP-01894-operator-poselib.copy_as_asset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01894", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01894", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01895", + "gapId": "operator:poselib.create_pose_asset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01895-operator-poselib.create_pose_asset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01895.py -- tests/files/web/generated/M16-GAP-01895-operator-poselib.create_pose_asset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01895", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01895", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01896", + "gapId": "operator:poselib.paste_asset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01896-operator-poselib.paste_asset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01896.py -- tests/files/web/generated/M16-GAP-01896-operator-poselib.paste_asset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01896", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01896", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01897", + "gapId": "operator:poselib.pose_asset_select_bones", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01897-operator-poselib.pose_asset_select_bones.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01897.py -- tests/files/web/generated/M16-GAP-01897-operator-poselib.pose_asset_select_bones.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01897", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01897", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01898", + "gapId": "operator:poselib.restore_previous_action", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01898-operator-poselib.restore_previous_action.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01898.py -- tests/files/web/generated/M16-GAP-01898-operator-poselib.restore_previous_action.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01898", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01898", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01899", + "gapId": "operator:preferences.addon_disable", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01899-operator-preferences.addon_disable.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01899.py -- tests/files/web/generated/M16-GAP-01899-operator-preferences.addon_disable.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01899", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01899", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01900", + "gapId": "operator:preferences.addon_enable", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01900-operator-preferences.addon_enable.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01900.py -- tests/files/web/generated/M16-GAP-01900-operator-preferences.addon_enable.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01900", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01900", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01901", + "gapId": "operator:preferences.addon_expand", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01901-operator-preferences.addon_expand.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01901.py -- tests/files/web/generated/M16-GAP-01901-operator-preferences.addon_expand.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01901", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01901", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01902", + "gapId": "operator:preferences.addon_install", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01902-operator-preferences.addon_install.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01902.py -- tests/files/web/generated/M16-GAP-01902-operator-preferences.addon_install.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01902", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01902", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01903", + "gapId": "operator:preferences.addon_refresh", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01903-operator-preferences.addon_refresh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01903.py -- tests/files/web/generated/M16-GAP-01903-operator-preferences.addon_refresh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01903", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01903", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01904", + "gapId": "operator:preferences.addon_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01904-operator-preferences.addon_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01904.py -- tests/files/web/generated/M16-GAP-01904-operator-preferences.addon_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01904", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01904", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01905", + "gapId": "operator:preferences.addon_show", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01905-operator-preferences.addon_show.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01905.py -- tests/files/web/generated/M16-GAP-01905-operator-preferences.addon_show.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01905", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01905", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01906", + "gapId": "operator:preferences.app_template_install", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01906-operator-preferences.app_template_install.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01906.py -- tests/files/web/generated/M16-GAP-01906-operator-preferences.app_template_install.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01906", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01906", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01907", + "gapId": "operator:preferences.asset_library_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01907-operator-preferences.asset_library_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01907.py -- tests/files/web/generated/M16-GAP-01907-operator-preferences.asset_library_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01907", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01907", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01908", + "gapId": "operator:preferences.asset_library_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01908-operator-preferences.asset_library_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01908.py -- tests/files/web/generated/M16-GAP-01908-operator-preferences.asset_library_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01908", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01908", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01909", + "gapId": "operator:preferences.associate_blend", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01909-operator-preferences.associate_blend.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01909.py -- tests/files/web/generated/M16-GAP-01909-operator-preferences.associate_blend.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01909", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01909", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01910", + "gapId": "operator:preferences.autoexec_path_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01910-operator-preferences.autoexec_path_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01910.py -- tests/files/web/generated/M16-GAP-01910-operator-preferences.autoexec_path_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01910", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01910", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01911", + "gapId": "operator:preferences.autoexec_path_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01911-operator-preferences.autoexec_path_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01911.py -- tests/files/web/generated/M16-GAP-01911-operator-preferences.autoexec_path_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01911", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01911", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01912", + "gapId": "operator:preferences.clear_filter", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01912-operator-preferences.clear_filter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01912.py -- tests/files/web/generated/M16-GAP-01912-operator-preferences.clear_filter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01912", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01912", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01913", + "gapId": "operator:preferences.copy_prev", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01913-operator-preferences.copy_prev.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01913.py -- tests/files/web/generated/M16-GAP-01913-operator-preferences.copy_prev.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01913", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01913", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01914", + "gapId": "operator:preferences.extension_repo_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01914-operator-preferences.extension_repo_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01914.py -- tests/files/web/generated/M16-GAP-01914-operator-preferences.extension_repo_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01914", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01914", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01915", + "gapId": "operator:preferences.extension_repo_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01915-operator-preferences.extension_repo_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01915.py -- tests/files/web/generated/M16-GAP-01915-operator-preferences.extension_repo_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01915", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01915", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01916", + "gapId": "operator:preferences.extension_url_drop", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01916-operator-preferences.extension_url_drop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01916.py -- tests/files/web/generated/M16-GAP-01916-operator-preferences.extension_url_drop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01916", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01916", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01917", + "gapId": "operator:preferences.keyconfig_activate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01917-operator-preferences.keyconfig_activate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01917.py -- tests/files/web/generated/M16-GAP-01917-operator-preferences.keyconfig_activate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01917", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01917", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01918", + "gapId": "operator:preferences.keyconfig_export", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01918-operator-preferences.keyconfig_export.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01918.py -- tests/files/web/generated/M16-GAP-01918-operator-preferences.keyconfig_export.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01918", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01918", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01919", + "gapId": "operator:preferences.keyconfig_import", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01919-operator-preferences.keyconfig_import.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01919.py -- tests/files/web/generated/M16-GAP-01919-operator-preferences.keyconfig_import.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01919", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01919", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01920", + "gapId": "operator:preferences.keyconfig_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01920-operator-preferences.keyconfig_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01920.py -- tests/files/web/generated/M16-GAP-01920-operator-preferences.keyconfig_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01920", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01920", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01921", + "gapId": "operator:preferences.keyconfig_test", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01921-operator-preferences.keyconfig_test.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01921.py -- tests/files/web/generated/M16-GAP-01921-operator-preferences.keyconfig_test.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01921", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01921", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01922", + "gapId": "operator:preferences.keyitem_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01922-operator-preferences.keyitem_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01922.py -- tests/files/web/generated/M16-GAP-01922-operator-preferences.keyitem_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01922", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01922", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01923", + "gapId": "operator:preferences.keyitem_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01923-operator-preferences.keyitem_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01923.py -- tests/files/web/generated/M16-GAP-01923-operator-preferences.keyitem_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01923", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01923", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01924", + "gapId": "operator:preferences.keyitem_restore", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01924-operator-preferences.keyitem_restore.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01924.py -- tests/files/web/generated/M16-GAP-01924-operator-preferences.keyitem_restore.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01924", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01924", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01925", + "gapId": "operator:preferences.keymap_restore", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01925-operator-preferences.keymap_restore.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01925.py -- tests/files/web/generated/M16-GAP-01925-operator-preferences.keymap_restore.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01925", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01925", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01926", + "gapId": "operator:preferences.reset_default_theme", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01926-operator-preferences.reset_default_theme.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01926.py -- tests/files/web/generated/M16-GAP-01926-operator-preferences.reset_default_theme.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01926", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01926", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01927", + "gapId": "operator:preferences.script_directory_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01927-operator-preferences.script_directory_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01927.py -- tests/files/web/generated/M16-GAP-01927-operator-preferences.script_directory_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01927", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01927", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01928", + "gapId": "operator:preferences.script_directory_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01928-operator-preferences.script_directory_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01928.py -- tests/files/web/generated/M16-GAP-01928-operator-preferences.script_directory_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01928", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01928", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01929", + "gapId": "operator:preferences.start_filter", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01929-operator-preferences.start_filter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01929.py -- tests/files/web/generated/M16-GAP-01929-operator-preferences.start_filter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01929", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01929", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01930", + "gapId": "operator:preferences.studiolight_copy_settings", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01930-operator-preferences.studiolight_copy_settings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01930.py -- tests/files/web/generated/M16-GAP-01930-operator-preferences.studiolight_copy_settings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01930", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01930", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01931", + "gapId": "operator:preferences.studiolight_install", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01931-operator-preferences.studiolight_install.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01931.py -- tests/files/web/generated/M16-GAP-01931-operator-preferences.studiolight_install.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01931", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01931", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01932", + "gapId": "operator:preferences.studiolight_new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01932-operator-preferences.studiolight_new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01932.py -- tests/files/web/generated/M16-GAP-01932-operator-preferences.studiolight_new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01932", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01932", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01933", + "gapId": "operator:preferences.studiolight_uninstall", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01933-operator-preferences.studiolight_uninstall.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01933.py -- tests/files/web/generated/M16-GAP-01933-operator-preferences.studiolight_uninstall.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01933", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01933", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01934", + "gapId": "operator:preferences.theme_install", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01934-operator-preferences.theme_install.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01934.py -- tests/files/web/generated/M16-GAP-01934-operator-preferences.theme_install.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01934", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01934", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01935", + "gapId": "operator:preferences.unassociate_blend", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01935-operator-preferences.unassociate_blend.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01935.py -- tests/files/web/generated/M16-GAP-01935-operator-preferences.unassociate_blend.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01935", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01935", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01936", + "gapId": "operator:ptcache.add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01936-operator-ptcache.add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01936.py -- tests/files/web/generated/M16-GAP-01936-operator-ptcache.add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01936", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01936", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01937", + "gapId": "operator:ptcache.bake", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01937-operator-ptcache.bake.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01937.py -- tests/files/web/generated/M16-GAP-01937-operator-ptcache.bake.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01937", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01937", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01938", + "gapId": "operator:ptcache.bake_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01938-operator-ptcache.bake_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01938.py -- tests/files/web/generated/M16-GAP-01938-operator-ptcache.bake_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01938", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01938", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01939", + "gapId": "operator:ptcache.bake_from_cache", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01939-operator-ptcache.bake_from_cache.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01939.py -- tests/files/web/generated/M16-GAP-01939-operator-ptcache.bake_from_cache.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01939", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01939", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01940", + "gapId": "operator:ptcache.free_bake", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01940-operator-ptcache.free_bake.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01940.py -- tests/files/web/generated/M16-GAP-01940-operator-ptcache.free_bake.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01940", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01940", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01941", + "gapId": "operator:ptcache.free_bake_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01941-operator-ptcache.free_bake_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01941.py -- tests/files/web/generated/M16-GAP-01941-operator-ptcache.free_bake_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01941", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01941", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01942", + "gapId": "operator:ptcache.remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01942-operator-ptcache.remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01942.py -- tests/files/web/generated/M16-GAP-01942-operator-ptcache.remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01942", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01942", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01943", + "gapId": "operator:render.clear_texture_cache", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01943-operator-render.clear_texture_cache.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01943.py -- tests/files/web/generated/M16-GAP-01943-operator-render.clear_texture_cache.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01943", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01943", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01944", + "gapId": "operator:render.color_management_white_balance_preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01944-operator-render.color_management_white_balance_preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01944.py -- tests/files/web/generated/M16-GAP-01944-operator-render.color_management_white_balance_preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01944", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01944", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01945", + "gapId": "operator:render.cycles_integrator_preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01945-operator-render.cycles_integrator_preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01945.py -- tests/files/web/generated/M16-GAP-01945-operator-render.cycles_integrator_preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01945", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01945", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01946", + "gapId": "operator:render.cycles_performance_preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01946-operator-render.cycles_performance_preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01946.py -- tests/files/web/generated/M16-GAP-01946-operator-render.cycles_performance_preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01946", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01946", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01947", + "gapId": "operator:render.cycles_sampling_preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01947-operator-render.cycles_sampling_preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01947.py -- tests/files/web/generated/M16-GAP-01947-operator-render.cycles_sampling_preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01947", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01947", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01948", + "gapId": "operator:render.cycles_viewport_sampling_preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01948-operator-render.cycles_viewport_sampling_preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01948.py -- tests/files/web/generated/M16-GAP-01948-operator-render.cycles_viewport_sampling_preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01948", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01948", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01949", + "gapId": "operator:render.eevee_raytracing_preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01949-operator-render.eevee_raytracing_preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01949.py -- tests/files/web/generated/M16-GAP-01949-operator-render.eevee_raytracing_preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01949", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01949", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01950", + "gapId": "operator:render.generate_texture_cache", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01950-operator-render.generate_texture_cache.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01950.py -- tests/files/web/generated/M16-GAP-01950-operator-render.generate_texture_cache.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01950", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01950", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01951", + "gapId": "operator:render.opengl", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01951-operator-render.opengl.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01951.py -- tests/files/web/generated/M16-GAP-01951-operator-render.opengl.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01951", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01951", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01952", + "gapId": "operator:render.play_rendered_anim", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01952-operator-render.play_rendered_anim.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01952.py -- tests/files/web/generated/M16-GAP-01952-operator-render.play_rendered_anim.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01952", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01952", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01953", + "gapId": "operator:render.preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01953-operator-render.preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01953.py -- tests/files/web/generated/M16-GAP-01953-operator-render.preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01953", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01953", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01954", + "gapId": "operator:render.render", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01954-operator-render.render.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01954.py -- tests/files/web/generated/M16-GAP-01954-operator-render.render.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01954", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01954", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01955", + "gapId": "operator:render.shutter_curve_preset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01955-operator-render.shutter_curve_preset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01955.py -- tests/files/web/generated/M16-GAP-01955-operator-render.shutter_curve_preset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01955", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01955", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01956", + "gapId": "operator:render.swap_dimensions", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01956-operator-render.swap_dimensions.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01956.py -- tests/files/web/generated/M16-GAP-01956-operator-render.swap_dimensions.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01956", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01956", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01957", + "gapId": "operator:render.view_cancel", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01957-operator-render.view_cancel.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01957.py -- tests/files/web/generated/M16-GAP-01957-operator-render.view_cancel.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01957", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01957", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01958", + "gapId": "operator:render.view_show", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01958-operator-render.view_show.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01958.py -- tests/files/web/generated/M16-GAP-01958-operator-render.view_show.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01958", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01958", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01959", + "gapId": "operator:rigidbody.bake_to_keyframes", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01959-operator-rigidbody.bake_to_keyframes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01959.py -- tests/files/web/generated/M16-GAP-01959-operator-rigidbody.bake_to_keyframes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01959", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01959", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01960", + "gapId": "operator:rigidbody.connect", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01960-operator-rigidbody.connect.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01960.py -- tests/files/web/generated/M16-GAP-01960-operator-rigidbody.connect.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01960", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01960", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01961", + "gapId": "operator:rigidbody.constraint_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01961-operator-rigidbody.constraint_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01961.py -- tests/files/web/generated/M16-GAP-01961-operator-rigidbody.constraint_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01961", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01961", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01962", + "gapId": "operator:rigidbody.constraint_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01962-operator-rigidbody.constraint_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01962.py -- tests/files/web/generated/M16-GAP-01962-operator-rigidbody.constraint_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01962", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01962", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01963", + "gapId": "operator:rigidbody.mass_calculate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01963-operator-rigidbody.mass_calculate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01963.py -- tests/files/web/generated/M16-GAP-01963-operator-rigidbody.mass_calculate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01963", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01963", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01964", + "gapId": "operator:rigidbody.object_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01964-operator-rigidbody.object_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01964.py -- tests/files/web/generated/M16-GAP-01964-operator-rigidbody.object_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01964", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01964", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01965", + "gapId": "operator:rigidbody.object_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01965-operator-rigidbody.object_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01965.py -- tests/files/web/generated/M16-GAP-01965-operator-rigidbody.object_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01965", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01965", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01966", + "gapId": "operator:rigidbody.object_settings_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01966-operator-rigidbody.object_settings_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01966.py -- tests/files/web/generated/M16-GAP-01966-operator-rigidbody.object_settings_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01966", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01966", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01967", + "gapId": "operator:rigidbody.objects_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01967-operator-rigidbody.objects_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01967.py -- tests/files/web/generated/M16-GAP-01967-operator-rigidbody.objects_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01967", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01967", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01968", + "gapId": "operator:rigidbody.objects_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01968-operator-rigidbody.objects_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01968.py -- tests/files/web/generated/M16-GAP-01968-operator-rigidbody.objects_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01968", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01968", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01969", + "gapId": "operator:rigidbody.shape_change", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01969-operator-rigidbody.shape_change.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01969.py -- tests/files/web/generated/M16-GAP-01969-operator-rigidbody.shape_change.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01969", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01969", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01970", + "gapId": "operator:rigidbody.world_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01970-operator-rigidbody.world_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01970.py -- tests/files/web/generated/M16-GAP-01970-operator-rigidbody.world_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01970", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01970", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01971", + "gapId": "operator:rigidbody.world_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01971-operator-rigidbody.world_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01971.py -- tests/files/web/generated/M16-GAP-01971-operator-rigidbody.world_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01971", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01971", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01972", + "gapId": "operator:scene.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01972-operator-scene.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01972.py -- tests/files/web/generated/M16-GAP-01972-operator-scene.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01972", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01972", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01973", + "gapId": "operator:scene.drop_scene_asset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01973-operator-scene.drop_scene_asset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01973.py -- tests/files/web/generated/M16-GAP-01973-operator-scene.drop_scene_asset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01973", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01973", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01974", + "gapId": "operator:scene.freestyle_add_edge_marks_to_keying_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01974-operator-scene.freestyle_add_edge_marks_to_keying_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01974.py -- tests/files/web/generated/M16-GAP-01974-operator-scene.freestyle_add_edge_marks_to_keying_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01974", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01974", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01975", + "gapId": "operator:scene.freestyle_add_face_marks_to_keying_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01975-operator-scene.freestyle_add_face_marks_to_keying_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01975.py -- tests/files/web/generated/M16-GAP-01975-operator-scene.freestyle_add_face_marks_to_keying_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01975", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01975", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01976", + "gapId": "operator:scene.freestyle_alpha_modifier_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01976-operator-scene.freestyle_alpha_modifier_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01976.py -- tests/files/web/generated/M16-GAP-01976-operator-scene.freestyle_alpha_modifier_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01976", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01976", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01977", + "gapId": "operator:scene.freestyle_color_modifier_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01977-operator-scene.freestyle_color_modifier_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01977.py -- tests/files/web/generated/M16-GAP-01977-operator-scene.freestyle_color_modifier_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01977", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01977", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01978", + "gapId": "operator:scene.freestyle_fill_range_by_selection", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01978-operator-scene.freestyle_fill_range_by_selection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01978.py -- tests/files/web/generated/M16-GAP-01978-operator-scene.freestyle_fill_range_by_selection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01978", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01978", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01979", + "gapId": "operator:scene.freestyle_geometry_modifier_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01979-operator-scene.freestyle_geometry_modifier_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01979.py -- tests/files/web/generated/M16-GAP-01979-operator-scene.freestyle_geometry_modifier_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01979", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01979", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01980", + "gapId": "operator:scene.freestyle_lineset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01980-operator-scene.freestyle_lineset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01980.py -- tests/files/web/generated/M16-GAP-01980-operator-scene.freestyle_lineset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01980", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01980", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01981", + "gapId": "operator:scene.freestyle_lineset_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01981-operator-scene.freestyle_lineset_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01981.py -- tests/files/web/generated/M16-GAP-01981-operator-scene.freestyle_lineset_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01981", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01981", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01982", + "gapId": "operator:scene.freestyle_lineset_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01982-operator-scene.freestyle_lineset_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01982.py -- tests/files/web/generated/M16-GAP-01982-operator-scene.freestyle_lineset_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01982", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01982", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01983", + "gapId": "operator:scene.freestyle_lineset_paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01983-operator-scene.freestyle_lineset_paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01983.py -- tests/files/web/generated/M16-GAP-01983-operator-scene.freestyle_lineset_paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01983", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01983", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01984", + "gapId": "operator:scene.freestyle_lineset_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01984-operator-scene.freestyle_lineset_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01984.py -- tests/files/web/generated/M16-GAP-01984-operator-scene.freestyle_lineset_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01984", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01984", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01985", + "gapId": "operator:scene.freestyle_linestyle_new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01985-operator-scene.freestyle_linestyle_new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01985.py -- tests/files/web/generated/M16-GAP-01985-operator-scene.freestyle_linestyle_new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01985", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01985", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01986", + "gapId": "operator:scene.freestyle_modifier_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01986-operator-scene.freestyle_modifier_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01986.py -- tests/files/web/generated/M16-GAP-01986-operator-scene.freestyle_modifier_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01986", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01986", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01987", + "gapId": "operator:scene.freestyle_modifier_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01987-operator-scene.freestyle_modifier_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01987.py -- tests/files/web/generated/M16-GAP-01987-operator-scene.freestyle_modifier_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01987", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01987", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01988", + "gapId": "operator:scene.freestyle_modifier_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01988-operator-scene.freestyle_modifier_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01988.py -- tests/files/web/generated/M16-GAP-01988-operator-scene.freestyle_modifier_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01988", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01988", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01989", + "gapId": "operator:scene.freestyle_module_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01989-operator-scene.freestyle_module_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01989.py -- tests/files/web/generated/M16-GAP-01989-operator-scene.freestyle_module_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01989", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01989", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01990", + "gapId": "operator:scene.freestyle_module_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01990-operator-scene.freestyle_module_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01990.py -- tests/files/web/generated/M16-GAP-01990-operator-scene.freestyle_module_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01990", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01990", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01991", + "gapId": "operator:scene.freestyle_module_open", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01991-operator-scene.freestyle_module_open.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01991.py -- tests/files/web/generated/M16-GAP-01991-operator-scene.freestyle_module_open.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01991", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01991", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01992", + "gapId": "operator:scene.freestyle_module_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01992-operator-scene.freestyle_module_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01992.py -- tests/files/web/generated/M16-GAP-01992-operator-scene.freestyle_module_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01992", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01992", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01993", + "gapId": "operator:scene.freestyle_stroke_material_create", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01993-operator-scene.freestyle_stroke_material_create.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01993.py -- tests/files/web/generated/M16-GAP-01993-operator-scene.freestyle_stroke_material_create.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01993", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01993", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01994", + "gapId": "operator:scene.freestyle_thickness_modifier_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01994-operator-scene.freestyle_thickness_modifier_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01994.py -- tests/files/web/generated/M16-GAP-01994-operator-scene.freestyle_thickness_modifier_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01994", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01994", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01995", + "gapId": "operator:scene.gltf2_action_filter_refresh", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01995-operator-scene.gltf2_action_filter_refresh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01995.py -- tests/files/web/generated/M16-GAP-01995-operator-scene.gltf2_action_filter_refresh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01995", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01995", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01996", + "gapId": "operator:scene.gpencil_brush_preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01996-operator-scene.gpencil_brush_preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01996.py -- tests/files/web/generated/M16-GAP-01996-operator-scene.gpencil_brush_preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01996", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01996", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01997", + "gapId": "operator:scene.gpencil_material_preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01997-operator-scene.gpencil_material_preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01997.py -- tests/files/web/generated/M16-GAP-01997-operator-scene.gpencil_material_preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01997", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01997", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01998", + "gapId": "operator:scene.new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01998-operator-scene.new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01998.py -- tests/files/web/generated/M16-GAP-01998-operator-scene.new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01998", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01998", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01999", + "gapId": "operator:scene.new_sequencer", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01999-operator-scene.new_sequencer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01999.py -- tests/files/web/generated/M16-GAP-01999-operator-scene.new_sequencer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01999", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01999", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02000", + "gapId": "operator:scene.new_sequencer_scene", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02000-operator-scene.new_sequencer_scene.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02000.py -- tests/files/web/generated/M16-GAP-02000-operator-scene.new_sequencer_scene.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02000", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02000", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02001", + "gapId": "operator:scene.render_view_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02001-operator-scene.render_view_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02001.py -- tests/files/web/generated/M16-GAP-02001-operator-scene.render_view_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02001", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02001", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02002", + "gapId": "operator:scene.render_view_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02002-operator-scene.render_view_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02002.py -- tests/files/web/generated/M16-GAP-02002-operator-scene.render_view_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02002", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02002", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02003", + "gapId": "operator:scene.view_layer_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02003-operator-scene.view_layer_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02003.py -- tests/files/web/generated/M16-GAP-02003-operator-scene.view_layer_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02003", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02003", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02004", + "gapId": "operator:scene.view_layer_add_aov", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02004-operator-scene.view_layer_add_aov.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02004.py -- tests/files/web/generated/M16-GAP-02004-operator-scene.view_layer_add_aov.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02004", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02004", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02005", + "gapId": "operator:scene.view_layer_add_lightgroup", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02005-operator-scene.view_layer_add_lightgroup.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02005.py -- tests/files/web/generated/M16-GAP-02005-operator-scene.view_layer_add_lightgroup.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02005", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02005", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02006", + "gapId": "operator:scene.view_layer_add_used_lightgroups", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02006-operator-scene.view_layer_add_used_lightgroups.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02006.py -- tests/files/web/generated/M16-GAP-02006-operator-scene.view_layer_add_used_lightgroups.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02006", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02006", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02007", + "gapId": "operator:scene.view_layer_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02007-operator-scene.view_layer_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02007.py -- tests/files/web/generated/M16-GAP-02007-operator-scene.view_layer_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02007", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02007", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02008", + "gapId": "operator:scene.view_layer_remove_aov", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02008-operator-scene.view_layer_remove_aov.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02008.py -- tests/files/web/generated/M16-GAP-02008-operator-scene.view_layer_remove_aov.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02008", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02008", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02009", + "gapId": "operator:scene.view_layer_remove_lightgroup", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02009-operator-scene.view_layer_remove_lightgroup.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02009.py -- tests/files/web/generated/M16-GAP-02009-operator-scene.view_layer_remove_lightgroup.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02009", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02009", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02010", + "gapId": "operator:scene.view_layer_remove_unused_lightgroups", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02010-operator-scene.view_layer_remove_unused_lightgroups.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02010.py -- tests/files/web/generated/M16-GAP-02010-operator-scene.view_layer_remove_unused_lightgroups.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02010", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02010", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02011", + "gapId": "operator:screen.actionzone", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02011-operator-screen.actionzone.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02011.py -- tests/files/web/generated/M16-GAP-02011-operator-screen.actionzone.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02011", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02011", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02012", + "gapId": "operator:screen.animation_cancel", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02012-operator-screen.animation_cancel.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02012.py -- tests/files/web/generated/M16-GAP-02012-operator-screen.animation_cancel.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02012", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02012", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02013", + "gapId": "operator:screen.animation_pause", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02013-operator-screen.animation_pause.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02013.py -- tests/files/web/generated/M16-GAP-02013-operator-screen.animation_pause.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02013", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02013", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02014", + "gapId": "operator:screen.animation_play", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02014-operator-screen.animation_play.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02014.py -- tests/files/web/generated/M16-GAP-02014-operator-screen.animation_play.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02014", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02014", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02015", + "gapId": "operator:screen.animation_step", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02015-operator-screen.animation_step.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02015.py -- tests/files/web/generated/M16-GAP-02015-operator-screen.animation_step.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02015", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02015", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02016", + "gapId": "operator:screen.area_close", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02016-operator-screen.area_close.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02016.py -- tests/files/web/generated/M16-GAP-02016-operator-screen.area_close.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02016", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02016", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02017", + "gapId": "operator:screen.area_dupli", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02017-operator-screen.area_dupli.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02017.py -- tests/files/web/generated/M16-GAP-02017-operator-screen.area_dupli.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02017", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02017", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02018", + "gapId": "operator:screen.area_join", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02018-operator-screen.area_join.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02018.py -- tests/files/web/generated/M16-GAP-02018-operator-screen.area_join.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02018", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02018", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02019", + "gapId": "operator:screen.area_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02019-operator-screen.area_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02019.py -- tests/files/web/generated/M16-GAP-02019-operator-screen.area_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02019", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02019", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02020", + "gapId": "operator:screen.area_options", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02020-operator-screen.area_options.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02020.py -- tests/files/web/generated/M16-GAP-02020-operator-screen.area_options.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02020", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02020", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02021", + "gapId": "operator:screen.area_split", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02021-operator-screen.area_split.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02021.py -- tests/files/web/generated/M16-GAP-02021-operator-screen.area_split.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02021", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02021", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02022", + "gapId": "operator:screen.area_swap", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02022-operator-screen.area_swap.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02022.py -- tests/files/web/generated/M16-GAP-02022-operator-screen.area_swap.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02022", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02022", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02023", + "gapId": "operator:screen.back_to_previous", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02023-operator-screen.back_to_previous.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02023.py -- tests/files/web/generated/M16-GAP-02023-operator-screen.back_to_previous.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02023", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02023", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02024", + "gapId": "operator:screen.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02024-operator-screen.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02024.py -- tests/files/web/generated/M16-GAP-02024-operator-screen.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02024", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02024", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02025", + "gapId": "operator:screen.drivers_editor_show", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02025-operator-screen.drivers_editor_show.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02025.py -- tests/files/web/generated/M16-GAP-02025-operator-screen.drivers_editor_show.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02025", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02025", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02026", + "gapId": "operator:screen.edge_merge", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02026-operator-screen.edge_merge.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02026.py -- tests/files/web/generated/M16-GAP-02026-operator-screen.edge_merge.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02026", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02026", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02027", + "gapId": "operator:screen.frame_jump", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02027-operator-screen.frame_jump.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02027.py -- tests/files/web/generated/M16-GAP-02027-operator-screen.frame_jump.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02027", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02027", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02028", + "gapId": "operator:screen.frame_offset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02028-operator-screen.frame_offset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02028.py -- tests/files/web/generated/M16-GAP-02028-operator-screen.frame_offset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02028", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02028", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02029", + "gapId": "operator:screen.header_toggle_menus", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02029-operator-screen.header_toggle_menus.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02029.py -- tests/files/web/generated/M16-GAP-02029-operator-screen.header_toggle_menus.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02029", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02029", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02030", + "gapId": "operator:screen.info_log_show", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02030-operator-screen.info_log_show.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02030.py -- tests/files/web/generated/M16-GAP-02030-operator-screen.info_log_show.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02030", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02030", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02031", + "gapId": "operator:screen.keyframe_jump", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02031-operator-screen.keyframe_jump.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02031.py -- tests/files/web/generated/M16-GAP-02031-operator-screen.keyframe_jump.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02031", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02031", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02032", + "gapId": "operator:screen.marker_jump", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02032-operator-screen.marker_jump.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02032.py -- tests/files/web/generated/M16-GAP-02032-operator-screen.marker_jump.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02032", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02032", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02033", + "gapId": "operator:screen.new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02033-operator-screen.new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02033.py -- tests/files/web/generated/M16-GAP-02033-operator-screen.new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02033", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02033", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02034", + "gapId": "operator:screen.quadview_size", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02034-operator-screen.quadview_size.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02034.py -- tests/files/web/generated/M16-GAP-02034-operator-screen.quadview_size.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02034", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02034", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02035", + "gapId": "operator:screen.redo_last", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02035-operator-screen.redo_last.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02035.py -- tests/files/web/generated/M16-GAP-02035-operator-screen.redo_last.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02035", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02035", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02036", + "gapId": "operator:screen.region_blend", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02036-operator-screen.region_blend.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02036.py -- tests/files/web/generated/M16-GAP-02036-operator-screen.region_blend.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02036", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02036", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02037", + "gapId": "operator:screen.region_context_menu", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02037-operator-screen.region_context_menu.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02037.py -- tests/files/web/generated/M16-GAP-02037-operator-screen.region_context_menu.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02037", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02037", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02038", + "gapId": "operator:screen.region_flip", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02038-operator-screen.region_flip.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02038.py -- tests/files/web/generated/M16-GAP-02038-operator-screen.region_flip.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02038", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02038", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02039", + "gapId": "operator:screen.region_quadview", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02039-operator-screen.region_quadview.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02039.py -- tests/files/web/generated/M16-GAP-02039-operator-screen.region_quadview.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02039", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02039", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02040", + "gapId": "operator:screen.region_scale", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02040-operator-screen.region_scale.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02040.py -- tests/files/web/generated/M16-GAP-02040-operator-screen.region_scale.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02040", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02040", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02041", + "gapId": "operator:screen.region_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02041-operator-screen.region_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02041.py -- tests/files/web/generated/M16-GAP-02041-operator-screen.region_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02041", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02041", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02042", + "gapId": "operator:screen.repeat_history", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02042-operator-screen.repeat_history.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02042.py -- tests/files/web/generated/M16-GAP-02042-operator-screen.repeat_history.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02042", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02042", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02043", + "gapId": "operator:screen.repeat_last", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02043-operator-screen.repeat_last.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02043.py -- tests/files/web/generated/M16-GAP-02043-operator-screen.repeat_last.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02043", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02043", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02044", + "gapId": "operator:screen.screen_full_area", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02044-operator-screen.screen_full_area.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02044.py -- tests/files/web/generated/M16-GAP-02044-operator-screen.screen_full_area.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02044", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02044", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02045", + "gapId": "operator:screen.screen_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02045-operator-screen.screen_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02045.py -- tests/files/web/generated/M16-GAP-02045-operator-screen.screen_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02045", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02045", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02046", + "gapId": "operator:screen.screenshot", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02046-operator-screen.screenshot.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02046.py -- tests/files/web/generated/M16-GAP-02046-operator-screen.screenshot.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02046", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02046", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02047", + "gapId": "operator:screen.screenshot_area", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02047-operator-screen.screenshot_area.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02047.py -- tests/files/web/generated/M16-GAP-02047-operator-screen.screenshot_area.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02047", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02047", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02048", + "gapId": "operator:screen.space_context_cycle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02048-operator-screen.space_context_cycle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02048.py -- tests/files/web/generated/M16-GAP-02048-operator-screen.space_context_cycle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02048", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02048", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02049", + "gapId": "operator:screen.space_type_set_or_cycle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02049-operator-screen.space_type_set_or_cycle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02049.py -- tests/files/web/generated/M16-GAP-02049-operator-screen.space_type_set_or_cycle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02049", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02049", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02050", + "gapId": "operator:screen.spacedata_cleanup", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02050-operator-screen.spacedata_cleanup.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02050.py -- tests/files/web/generated/M16-GAP-02050-operator-screen.spacedata_cleanup.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02050", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02050", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02051", + "gapId": "operator:screen.time_jump", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02051-operator-screen.time_jump.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02051.py -- tests/files/web/generated/M16-GAP-02051-operator-screen.time_jump.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02051", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02051", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02052", + "gapId": "operator:screen.userpref_show", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02052-operator-screen.userpref_show.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02052.py -- tests/files/web/generated/M16-GAP-02052-operator-screen.userpref_show.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02052", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02052", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02053", + "gapId": "operator:screen.workspace_cycle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02053-operator-screen.workspace_cycle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02053.py -- tests/files/web/generated/M16-GAP-02053-operator-screen.workspace_cycle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02053", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02053", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02054", + "gapId": "operator:script.execute_preset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02054-operator-script.execute_preset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02054.py -- tests/files/web/generated/M16-GAP-02054-operator-script.execute_preset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02054", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02054", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02055", + "gapId": "operator:script.python_file_run", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02055-operator-script.python_file_run.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02055.py -- tests/files/web/generated/M16-GAP-02055-operator-script.python_file_run.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02055", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02055", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02056", + "gapId": "operator:script.reload", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02056-operator-script.reload.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02056.py -- tests/files/web/generated/M16-GAP-02056-operator-script.reload.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02056", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02056", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02057", + "gapId": "operator:sculpt.brush_stroke", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02057-operator-sculpt.brush_stroke.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02057.py -- tests/files/web/generated/M16-GAP-02057-operator-sculpt.brush_stroke.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02057", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02057", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02058", + "gapId": "operator:sculpt.cloth_filter", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02058-operator-sculpt.cloth_filter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02058.py -- tests/files/web/generated/M16-GAP-02058-operator-sculpt.cloth_filter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02058", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02058", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02059", + "gapId": "operator:sculpt.color_filter", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02059-operator-sculpt.color_filter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02059.py -- tests/files/web/generated/M16-GAP-02059-operator-sculpt.color_filter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02059", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02059", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02060", + "gapId": "operator:sculpt.detail_flood_fill", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02060-operator-sculpt.detail_flood_fill.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02060.py -- tests/files/web/generated/M16-GAP-02060-operator-sculpt.detail_flood_fill.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02060", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02060", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02061", + "gapId": "operator:sculpt.dynamic_topology_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02061-operator-sculpt.dynamic_topology_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02061.py -- tests/files/web/generated/M16-GAP-02061-operator-sculpt.dynamic_topology_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02061", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02061", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02062", + "gapId": "operator:sculpt.dyntopo_detail_size_edit", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02062-operator-sculpt.dyntopo_detail_size_edit.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02062.py -- tests/files/web/generated/M16-GAP-02062-operator-sculpt.dyntopo_detail_size_edit.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02062", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02062", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02063", + "gapId": "operator:sculpt.expand", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02063-operator-sculpt.expand.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02063.py -- tests/files/web/generated/M16-GAP-02063-operator-sculpt.expand.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02063", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02063", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02064", + "gapId": "operator:sculpt.face_set_box_gesture", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02064-operator-sculpt.face_set_box_gesture.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02064.py -- tests/files/web/generated/M16-GAP-02064-operator-sculpt.face_set_box_gesture.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02064", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02064", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02065", + "gapId": "operator:sculpt.face_set_change_visibility", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02065-operator-sculpt.face_set_change_visibility.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02065.py -- tests/files/web/generated/M16-GAP-02065-operator-sculpt.face_set_change_visibility.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02065", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02065", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02066", + "gapId": "operator:sculpt.face_set_edit", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02066-operator-sculpt.face_set_edit.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02066.py -- tests/files/web/generated/M16-GAP-02066-operator-sculpt.face_set_edit.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02066", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02066", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02067", + "gapId": "operator:sculpt.face_set_extract", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02067-operator-sculpt.face_set_extract.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02067.py -- tests/files/web/generated/M16-GAP-02067-operator-sculpt.face_set_extract.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02067", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02067", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02068", + "gapId": "operator:sculpt.face_set_lasso_gesture", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02068-operator-sculpt.face_set_lasso_gesture.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02068.py -- tests/files/web/generated/M16-GAP-02068-operator-sculpt.face_set_lasso_gesture.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02068", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02068", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02069", + "gapId": "operator:sculpt.face_set_line_gesture", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02069-operator-sculpt.face_set_line_gesture.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02069.py -- tests/files/web/generated/M16-GAP-02069-operator-sculpt.face_set_line_gesture.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02069", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02069", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02070", + "gapId": "operator:sculpt.face_set_polyline_gesture", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02070-operator-sculpt.face_set_polyline_gesture.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02070.py -- tests/files/web/generated/M16-GAP-02070-operator-sculpt.face_set_polyline_gesture.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02070", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02070", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02071", + "gapId": "operator:sculpt.face_sets_create", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02071-operator-sculpt.face_sets_create.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02071.py -- tests/files/web/generated/M16-GAP-02071-operator-sculpt.face_sets_create.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02071", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02071", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02072", + "gapId": "operator:sculpt.face_sets_init", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02072-operator-sculpt.face_sets_init.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02072.py -- tests/files/web/generated/M16-GAP-02072-operator-sculpt.face_sets_init.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02072", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02072", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02073", + "gapId": "operator:sculpt.face_sets_randomize_colors", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02073-operator-sculpt.face_sets_randomize_colors.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02073.py -- tests/files/web/generated/M16-GAP-02073-operator-sculpt.face_sets_randomize_colors.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02073", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02073", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02074", + "gapId": "operator:sculpt.mask_by_color", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02074-operator-sculpt.mask_by_color.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02074.py -- tests/files/web/generated/M16-GAP-02074-operator-sculpt.mask_by_color.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02074", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02074", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02075", + "gapId": "operator:sculpt.mask_filter", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02075-operator-sculpt.mask_filter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02075.py -- tests/files/web/generated/M16-GAP-02075-operator-sculpt.mask_filter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02075", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02075", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02076", + "gapId": "operator:sculpt.mask_from_boundary", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02076-operator-sculpt.mask_from_boundary.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02076.py -- tests/files/web/generated/M16-GAP-02076-operator-sculpt.mask_from_boundary.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02076", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02076", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02077", + "gapId": "operator:sculpt.mask_from_cavity", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02077-operator-sculpt.mask_from_cavity.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02077.py -- tests/files/web/generated/M16-GAP-02077-operator-sculpt.mask_from_cavity.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02077", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02077", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02078", + "gapId": "operator:sculpt.mask_init", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02078-operator-sculpt.mask_init.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02078.py -- tests/files/web/generated/M16-GAP-02078-operator-sculpt.mask_init.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02078", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02078", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02079", + "gapId": "operator:sculpt.mesh_filter", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02079-operator-sculpt.mesh_filter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02079.py -- tests/files/web/generated/M16-GAP-02079-operator-sculpt.mesh_filter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02079", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02079", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02080", + "gapId": "operator:sculpt.optimize", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02080-operator-sculpt.optimize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02080.py -- tests/files/web/generated/M16-GAP-02080-operator-sculpt.optimize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02080", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02080", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02081", + "gapId": "operator:sculpt.paint_mask_extract", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02081-operator-sculpt.paint_mask_extract.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02081.py -- tests/files/web/generated/M16-GAP-02081-operator-sculpt.paint_mask_extract.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02081", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02081", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02082", + "gapId": "operator:sculpt.paint_mask_slice", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02082-operator-sculpt.paint_mask_slice.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02082.py -- tests/files/web/generated/M16-GAP-02082-operator-sculpt.paint_mask_slice.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02082", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02082", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02083", + "gapId": "operator:sculpt.project_line_gesture", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02083-operator-sculpt.project_line_gesture.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02083.py -- tests/files/web/generated/M16-GAP-02083-operator-sculpt.project_line_gesture.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02083", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02083", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02084", + "gapId": "operator:sculpt.sample_detail_size", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02084-operator-sculpt.sample_detail_size.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02084.py -- tests/files/web/generated/M16-GAP-02084-operator-sculpt.sample_detail_size.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02084", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02084", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02085", + "gapId": "operator:sculpt.sculptmode_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02085-operator-sculpt.sculptmode_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02085.py -- tests/files/web/generated/M16-GAP-02085-operator-sculpt.sculptmode_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02085", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02085", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02086", + "gapId": "operator:sculpt.set_persistent_base", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02086-operator-sculpt.set_persistent_base.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02086.py -- tests/files/web/generated/M16-GAP-02086-operator-sculpt.set_persistent_base.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02086", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02086", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02087", + "gapId": "operator:sculpt.set_pivot_position", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02087-operator-sculpt.set_pivot_position.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02087.py -- tests/files/web/generated/M16-GAP-02087-operator-sculpt.set_pivot_position.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02087", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02087", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02088", + "gapId": "operator:sculpt.symmetrize", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02088-operator-sculpt.symmetrize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02088.py -- tests/files/web/generated/M16-GAP-02088-operator-sculpt.symmetrize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02088", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02088", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02089", + "gapId": "operator:sculpt.trim_box_gesture", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02089-operator-sculpt.trim_box_gesture.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02089.py -- tests/files/web/generated/M16-GAP-02089-operator-sculpt.trim_box_gesture.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02089", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02089", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02090", + "gapId": "operator:sculpt.trim_lasso_gesture", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02090-operator-sculpt.trim_lasso_gesture.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02090.py -- tests/files/web/generated/M16-GAP-02090-operator-sculpt.trim_lasso_gesture.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02090", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02090", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02091", + "gapId": "operator:sculpt.trim_line_gesture", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02091-operator-sculpt.trim_line_gesture.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02091.py -- tests/files/web/generated/M16-GAP-02091-operator-sculpt.trim_line_gesture.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02091", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02091", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02092", + "gapId": "operator:sculpt.trim_polyline_gesture", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02092-operator-sculpt.trim_polyline_gesture.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02092.py -- tests/files/web/generated/M16-GAP-02092-operator-sculpt.trim_polyline_gesture.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02092", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02092", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02093", + "gapId": "operator:sculpt.uv_sculpt_grab", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02093-operator-sculpt.uv_sculpt_grab.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02093.py -- tests/files/web/generated/M16-GAP-02093-operator-sculpt.uv_sculpt_grab.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02093", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02093", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02094", + "gapId": "operator:sculpt.uv_sculpt_pinch", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02094-operator-sculpt.uv_sculpt_pinch.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02094.py -- tests/files/web/generated/M16-GAP-02094-operator-sculpt.uv_sculpt_pinch.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02094", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02094", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02095", + "gapId": "operator:sculpt.uv_sculpt_relax", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02095-operator-sculpt.uv_sculpt_relax.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02095.py -- tests/files/web/generated/M16-GAP-02095-operator-sculpt.uv_sculpt_relax.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02095", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02095", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02096", + "gapId": "operator:sculpt_curves.brush_stroke", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02096-operator-sculpt_curves.brush_stroke.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02096.py -- tests/files/web/generated/M16-GAP-02096-operator-sculpt_curves.brush_stroke.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02096", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02096", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02097", + "gapId": "operator:sculpt_curves.min_distance_edit", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02097-operator-sculpt_curves.min_distance_edit.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02097.py -- tests/files/web/generated/M16-GAP-02097-operator-sculpt_curves.min_distance_edit.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02097", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02097", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02098", + "gapId": "operator:sculpt_curves.select_grow", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02098-operator-sculpt_curves.select_grow.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02098.py -- tests/files/web/generated/M16-GAP-02098-operator-sculpt_curves.select_grow.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02098", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02098", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02099", + "gapId": "operator:sculpt_curves.select_random", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02099-operator-sculpt_curves.select_random.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02099.py -- tests/files/web/generated/M16-GAP-02099-operator-sculpt_curves.select_random.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02099", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02099", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02100", + "gapId": "operator:sequencer.add_scene_strip_from_scene_asset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02100-operator-sequencer.add_scene_strip_from_scene_asset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02100.py -- tests/files/web/generated/M16-GAP-02100-operator-sequencer.add_scene_strip_from_scene_asset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02100", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02100", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02101", + "gapId": "operator:sequencer.box_blade", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02101-operator-sequencer.box_blade.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02101.py -- tests/files/web/generated/M16-GAP-02101-operator-sequencer.box_blade.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02101", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02101", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02102", + "gapId": "operator:sequencer.change_effect_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02102-operator-sequencer.change_effect_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02102.py -- tests/files/web/generated/M16-GAP-02102-operator-sequencer.change_effect_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02102", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02102", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02103", + "gapId": "operator:sequencer.change_path", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02103-operator-sequencer.change_path.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02103.py -- tests/files/web/generated/M16-GAP-02103-operator-sequencer.change_path.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02103", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02103", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02104", + "gapId": "operator:sequencer.change_scene", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02104-operator-sequencer.change_scene.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02104.py -- tests/files/web/generated/M16-GAP-02104-operator-sequencer.change_scene.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02104", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02104", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02105", + "gapId": "operator:sequencer.connect", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02105-operator-sequencer.connect.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02105.py -- tests/files/web/generated/M16-GAP-02105-operator-sequencer.connect.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02105", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02105", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02106", + "gapId": "operator:sequencer.copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02106-operator-sequencer.copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02106.py -- tests/files/web/generated/M16-GAP-02106-operator-sequencer.copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02106", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02106", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02107", + "gapId": "operator:sequencer.crossfade_sounds", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02107-operator-sequencer.crossfade_sounds.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02107.py -- tests/files/web/generated/M16-GAP-02107-operator-sequencer.crossfade_sounds.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02107", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02107", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02108", + "gapId": "operator:sequencer.cursor_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02108-operator-sequencer.cursor_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02108.py -- tests/files/web/generated/M16-GAP-02108-operator-sequencer.cursor_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02108", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02108", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02109", + "gapId": "operator:sequencer.deinterlace_selected_movies", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02109-operator-sequencer.deinterlace_selected_movies.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02109.py -- tests/files/web/generated/M16-GAP-02109-operator-sequencer.deinterlace_selected_movies.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02109", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02109", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02110", + "gapId": "operator:sequencer.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02110-operator-sequencer.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02110.py -- tests/files/web/generated/M16-GAP-02110-operator-sequencer.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02110", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02110", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02111", + "gapId": "operator:sequencer.disconnect", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02111-operator-sequencer.disconnect.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02111.py -- tests/files/web/generated/M16-GAP-02111-operator-sequencer.disconnect.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02111", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02111", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02112", + "gapId": "operator:sequencer.duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02112-operator-sequencer.duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02112.py -- tests/files/web/generated/M16-GAP-02112-operator-sequencer.duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02112", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02112", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02113", + "gapId": "operator:sequencer.duplicate_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02113-operator-sequencer.duplicate_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02113.py -- tests/files/web/generated/M16-GAP-02113-operator-sequencer.duplicate_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02113", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02113", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02114", + "gapId": "operator:sequencer.duplicate_move_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02114-operator-sequencer.duplicate_move_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02114.py -- tests/files/web/generated/M16-GAP-02114-operator-sequencer.duplicate_move_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02114", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02114", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02115", + "gapId": "operator:sequencer.effect_strip_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02115-operator-sequencer.effect_strip_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02115.py -- tests/files/web/generated/M16-GAP-02115-operator-sequencer.effect_strip_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02115", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02115", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02116", + "gapId": "operator:sequencer.enable_proxies", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02116-operator-sequencer.enable_proxies.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02116.py -- tests/files/web/generated/M16-GAP-02116-operator-sequencer.enable_proxies.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02116", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02116", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02117", + "gapId": "operator:sequencer.export_subtitles", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02117-operator-sequencer.export_subtitles.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02117.py -- tests/files/web/generated/M16-GAP-02117-operator-sequencer.export_subtitles.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02117", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02117", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02118", + "gapId": "operator:sequencer.fades_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02118-operator-sequencer.fades_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02118.py -- tests/files/web/generated/M16-GAP-02118-operator-sequencer.fades_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02118", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02118", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02119", + "gapId": "operator:sequencer.fades_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02119-operator-sequencer.fades_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02119.py -- tests/files/web/generated/M16-GAP-02119-operator-sequencer.fades_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02119", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02119", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02120", + "gapId": "operator:sequencer.gap_insert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02120-operator-sequencer.gap_insert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02120.py -- tests/files/web/generated/M16-GAP-02120-operator-sequencer.gap_insert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02120", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02120", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02121", + "gapId": "operator:sequencer.gap_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02121-operator-sequencer.gap_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02121.py -- tests/files/web/generated/M16-GAP-02121-operator-sequencer.gap_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02121", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02121", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02122", + "gapId": "operator:sequencer.image_strip_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02122-operator-sequencer.image_strip_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02122.py -- tests/files/web/generated/M16-GAP-02122-operator-sequencer.image_strip_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02122", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02122", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02123", + "gapId": "operator:sequencer.images_separate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02123-operator-sequencer.images_separate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02123.py -- tests/files/web/generated/M16-GAP-02123-operator-sequencer.images_separate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02123", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02123", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02124", + "gapId": "operator:sequencer.lock", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02124-operator-sequencer.lock.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02124.py -- tests/files/web/generated/M16-GAP-02124-operator-sequencer.lock.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02124", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02124", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02125", + "gapId": "operator:sequencer.mask_strip_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02125-operator-sequencer.mask_strip_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02125.py -- tests/files/web/generated/M16-GAP-02125-operator-sequencer.mask_strip_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02125", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02125", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02126", + "gapId": "operator:sequencer.meta_make", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02126-operator-sequencer.meta_make.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02126.py -- tests/files/web/generated/M16-GAP-02126-operator-sequencer.meta_make.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02126", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02126", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02127", + "gapId": "operator:sequencer.meta_separate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02127-operator-sequencer.meta_separate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02127.py -- tests/files/web/generated/M16-GAP-02127-operator-sequencer.meta_separate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02127", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02127", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02128", + "gapId": "operator:sequencer.meta_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02128-operator-sequencer.meta_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02128.py -- tests/files/web/generated/M16-GAP-02128-operator-sequencer.meta_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02128", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02128", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02129", + "gapId": "operator:sequencer.movie_strip_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02129-operator-sequencer.movie_strip_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02129.py -- tests/files/web/generated/M16-GAP-02129-operator-sequencer.movie_strip_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02129", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02129", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02130", + "gapId": "operator:sequencer.movieclip_strip_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02130-operator-sequencer.movieclip_strip_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02130.py -- tests/files/web/generated/M16-GAP-02130-operator-sequencer.movieclip_strip_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02130", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02130", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02131", + "gapId": "operator:sequencer.mute", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02131-operator-sequencer.mute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02131.py -- tests/files/web/generated/M16-GAP-02131-operator-sequencer.mute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02131", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02131", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02132", + "gapId": "operator:sequencer.offset_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02132-operator-sequencer.offset_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02132.py -- tests/files/web/generated/M16-GAP-02132-operator-sequencer.offset_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02132", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02132", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02133", + "gapId": "operator:sequencer.paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02133-operator-sequencer.paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02133.py -- tests/files/web/generated/M16-GAP-02133-operator-sequencer.paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02133", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02133", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02134", + "gapId": "operator:sequencer.preview_duplicate_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02134-operator-sequencer.preview_duplicate_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02134.py -- tests/files/web/generated/M16-GAP-02134-operator-sequencer.preview_duplicate_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02134", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02134", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02135", + "gapId": "operator:sequencer.preview_duplicate_move_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02135-operator-sequencer.preview_duplicate_move_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02135.py -- tests/files/web/generated/M16-GAP-02135-operator-sequencer.preview_duplicate_move_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02135", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02135", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02136", + "gapId": "operator:sequencer.reassign_inputs", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02136-operator-sequencer.reassign_inputs.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02136.py -- tests/files/web/generated/M16-GAP-02136-operator-sequencer.reassign_inputs.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02136", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02136", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02137", + "gapId": "operator:sequencer.rebuild_proxy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02137-operator-sequencer.rebuild_proxy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02137.py -- tests/files/web/generated/M16-GAP-02137-operator-sequencer.rebuild_proxy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02137", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02137", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02138", + "gapId": "operator:sequencer.refresh_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02138-operator-sequencer.refresh_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02138.py -- tests/files/web/generated/M16-GAP-02138-operator-sequencer.refresh_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02138", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02138", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02139", + "gapId": "operator:sequencer.reload", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02139-operator-sequencer.reload.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02139.py -- tests/files/web/generated/M16-GAP-02139-operator-sequencer.reload.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02139", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02139", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02140", + "gapId": "operator:sequencer.rename_channel", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02140-operator-sequencer.rename_channel.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02140.py -- tests/files/web/generated/M16-GAP-02140-operator-sequencer.rename_channel.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02140", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02140", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02141", + "gapId": "operator:sequencer.rendersize", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02141-operator-sequencer.rendersize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02141.py -- tests/files/web/generated/M16-GAP-02141-operator-sequencer.rendersize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02141", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02141", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02142", + "gapId": "operator:sequencer.retiming_add_freeze_frame_slide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02142-operator-sequencer.retiming_add_freeze_frame_slide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02142.py -- tests/files/web/generated/M16-GAP-02142-operator-sequencer.retiming_add_freeze_frame_slide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02142", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02142", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02143", + "gapId": "operator:sequencer.retiming_add_transition_slide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02143-operator-sequencer.retiming_add_transition_slide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02143.py -- tests/files/web/generated/M16-GAP-02143-operator-sequencer.retiming_add_transition_slide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02143", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02143", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02144", + "gapId": "operator:sequencer.retiming_freeze_frame_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02144-operator-sequencer.retiming_freeze_frame_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02144.py -- tests/files/web/generated/M16-GAP-02144-operator-sequencer.retiming_freeze_frame_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02144", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02144", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02145", + "gapId": "operator:sequencer.retiming_key_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02145-operator-sequencer.retiming_key_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02145.py -- tests/files/web/generated/M16-GAP-02145-operator-sequencer.retiming_key_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02145", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02145", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02146", + "gapId": "operator:sequencer.retiming_key_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02146-operator-sequencer.retiming_key_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02146.py -- tests/files/web/generated/M16-GAP-02146-operator-sequencer.retiming_key_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02146", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02146", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02147", + "gapId": "operator:sequencer.retiming_reset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02147-operator-sequencer.retiming_reset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02147.py -- tests/files/web/generated/M16-GAP-02147-operator-sequencer.retiming_reset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02147", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02147", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02148", + "gapId": "operator:sequencer.retiming_segment_speed_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02148-operator-sequencer.retiming_segment_speed_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02148.py -- tests/files/web/generated/M16-GAP-02148-operator-sequencer.retiming_segment_speed_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02148", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02148", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02149", + "gapId": "operator:sequencer.retiming_show", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02149-operator-sequencer.retiming_show.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02149.py -- tests/files/web/generated/M16-GAP-02149-operator-sequencer.retiming_show.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02149", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02149", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02150", + "gapId": "operator:sequencer.retiming_transition_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02150-operator-sequencer.retiming_transition_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02150.py -- tests/files/web/generated/M16-GAP-02150-operator-sequencer.retiming_transition_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02150", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02150", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02151", + "gapId": "operator:sequencer.sample", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02151-operator-sequencer.sample.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02151.py -- tests/files/web/generated/M16-GAP-02151-operator-sequencer.sample.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02151", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02151", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02152", + "gapId": "operator:sequencer.scene_frame_range_update", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02152-operator-sequencer.scene_frame_range_update.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02152.py -- tests/files/web/generated/M16-GAP-02152-operator-sequencer.scene_frame_range_update.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02152", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02152", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02153", + "gapId": "operator:sequencer.scene_strip_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02153-operator-sequencer.scene_strip_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02153.py -- tests/files/web/generated/M16-GAP-02153-operator-sequencer.scene_strip_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02153", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02153", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02154", + "gapId": "operator:sequencer.scene_strip_add_new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02154-operator-sequencer.scene_strip_add_new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02154.py -- tests/files/web/generated/M16-GAP-02154-operator-sequencer.scene_strip_add_new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02154", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02154", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02155", + "gapId": "operator:sequencer.select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02155-operator-sequencer.select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02155.py -- tests/files/web/generated/M16-GAP-02155-operator-sequencer.select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02155", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02155", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02156", + "gapId": "operator:sequencer.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02156-operator-sequencer.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02156.py -- tests/files/web/generated/M16-GAP-02156-operator-sequencer.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02156", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02156", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02157", + "gapId": "operator:sequencer.select_box", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02157-operator-sequencer.select_box.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02157.py -- tests/files/web/generated/M16-GAP-02157-operator-sequencer.select_box.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02157", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02157", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02158", + "gapId": "operator:sequencer.select_circle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02158-operator-sequencer.select_circle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02158.py -- tests/files/web/generated/M16-GAP-02158-operator-sequencer.select_circle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02158", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02158", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02159", + "gapId": "operator:sequencer.select_grouped", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02159-operator-sequencer.select_grouped.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02159.py -- tests/files/web/generated/M16-GAP-02159-operator-sequencer.select_grouped.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02159", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02159", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02160", + "gapId": "operator:sequencer.select_handle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02160-operator-sequencer.select_handle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02160.py -- tests/files/web/generated/M16-GAP-02160-operator-sequencer.select_handle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02160", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02160", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02161", + "gapId": "operator:sequencer.select_handles", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02161-operator-sequencer.select_handles.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02161.py -- tests/files/web/generated/M16-GAP-02161-operator-sequencer.select_handles.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02161", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02161", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02162", + "gapId": "operator:sequencer.select_lasso", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02162-operator-sequencer.select_lasso.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02162.py -- tests/files/web/generated/M16-GAP-02162-operator-sequencer.select_lasso.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02162", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02162", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02163", + "gapId": "operator:sequencer.select_less", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02163-operator-sequencer.select_less.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02163.py -- tests/files/web/generated/M16-GAP-02163-operator-sequencer.select_less.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02163", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02163", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02164", + "gapId": "operator:sequencer.select_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02164-operator-sequencer.select_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02164.py -- tests/files/web/generated/M16-GAP-02164-operator-sequencer.select_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02164", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02164", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02165", + "gapId": "operator:sequencer.select_linked_pick", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02165-operator-sequencer.select_linked_pick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02165.py -- tests/files/web/generated/M16-GAP-02165-operator-sequencer.select_linked_pick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02165", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02165", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02166", + "gapId": "operator:sequencer.select_more", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02166-operator-sequencer.select_more.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02166.py -- tests/files/web/generated/M16-GAP-02166-operator-sequencer.select_more.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02166", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02166", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02167", + "gapId": "operator:sequencer.select_side", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02167-operator-sequencer.select_side.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02167.py -- tests/files/web/generated/M16-GAP-02167-operator-sequencer.select_side.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02167", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02167", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02168", + "gapId": "operator:sequencer.select_side_of_frame", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02168-operator-sequencer.select_side_of_frame.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02168.py -- tests/files/web/generated/M16-GAP-02168-operator-sequencer.select_side_of_frame.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02168", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02168", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02169", + "gapId": "operator:sequencer.set_range_to_strips", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02169-operator-sequencer.set_range_to_strips.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02169.py -- tests/files/web/generated/M16-GAP-02169-operator-sequencer.set_range_to_strips.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02169", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02169", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02170", + "gapId": "operator:sequencer.slip", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02170-operator-sequencer.slip.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02170.py -- tests/files/web/generated/M16-GAP-02170-operator-sequencer.slip.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02170", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02170", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02171", + "gapId": "operator:sequencer.snap", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02171-operator-sequencer.snap.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02171.py -- tests/files/web/generated/M16-GAP-02171-operator-sequencer.snap.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02171", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02171", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02172", + "gapId": "operator:sequencer.sound_strip_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02172-operator-sequencer.sound_strip_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02172.py -- tests/files/web/generated/M16-GAP-02172-operator-sequencer.sound_strip_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02172", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02172", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02173", + "gapId": "operator:sequencer.split", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02173-operator-sequencer.split.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02173.py -- tests/files/web/generated/M16-GAP-02173-operator-sequencer.split.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02173", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02173", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02174", + "gapId": "operator:sequencer.split_multicam", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02174-operator-sequencer.split_multicam.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02174.py -- tests/files/web/generated/M16-GAP-02174-operator-sequencer.split_multicam.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02174", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02174", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02175", + "gapId": "operator:sequencer.strip_color_tag_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02175-operator-sequencer.strip_color_tag_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02175.py -- tests/files/web/generated/M16-GAP-02175-operator-sequencer.strip_color_tag_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02175", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02175", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02176", + "gapId": "operator:sequencer.strip_jump", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02176-operator-sequencer.strip_jump.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02176.py -- tests/files/web/generated/M16-GAP-02176-operator-sequencer.strip_jump.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02176", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02176", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02177", + "gapId": "operator:sequencer.strip_modifier_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02177-operator-sequencer.strip_modifier_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02177.py -- tests/files/web/generated/M16-GAP-02177-operator-sequencer.strip_modifier_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02177", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02177", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02178", + "gapId": "operator:sequencer.strip_modifier_add_node_group", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02178-operator-sequencer.strip_modifier_add_node_group.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02178.py -- tests/files/web/generated/M16-GAP-02178-operator-sequencer.strip_modifier_add_node_group.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02178", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02178", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02179", + "gapId": "operator:sequencer.strip_modifier_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02179-operator-sequencer.strip_modifier_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02179.py -- tests/files/web/generated/M16-GAP-02179-operator-sequencer.strip_modifier_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02179", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02179", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02180", + "gapId": "operator:sequencer.strip_modifier_duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02180-operator-sequencer.strip_modifier_duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02180.py -- tests/files/web/generated/M16-GAP-02180-operator-sequencer.strip_modifier_duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02180", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02180", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02181", + "gapId": "operator:sequencer.strip_modifier_equalizer_redefine", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02181-operator-sequencer.strip_modifier_equalizer_redefine.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02181.py -- tests/files/web/generated/M16-GAP-02181-operator-sequencer.strip_modifier_equalizer_redefine.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02181", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02181", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02182", + "gapId": "operator:sequencer.strip_modifier_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02182-operator-sequencer.strip_modifier_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02182.py -- tests/files/web/generated/M16-GAP-02182-operator-sequencer.strip_modifier_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02182", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02182", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02183", + "gapId": "operator:sequencer.strip_modifier_move_to_index", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02183-operator-sequencer.strip_modifier_move_to_index.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02183.py -- tests/files/web/generated/M16-GAP-02183-operator-sequencer.strip_modifier_move_to_index.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02183", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02183", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02184", + "gapId": "operator:sequencer.strip_modifier_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02184-operator-sequencer.strip_modifier_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02184.py -- tests/files/web/generated/M16-GAP-02184-operator-sequencer.strip_modifier_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02184", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02184", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02185", + "gapId": "operator:sequencer.strip_modifier_set_active", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02185-operator-sequencer.strip_modifier_set_active.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02185.py -- tests/files/web/generated/M16-GAP-02185-operator-sequencer.strip_modifier_set_active.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02185", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02185", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02186", + "gapId": "operator:sequencer.strip_transform_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02186-operator-sequencer.strip_transform_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02186.py -- tests/files/web/generated/M16-GAP-02186-operator-sequencer.strip_transform_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02186", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02186", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02187", + "gapId": "operator:sequencer.strip_transform_fit", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02187-operator-sequencer.strip_transform_fit.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02187.py -- tests/files/web/generated/M16-GAP-02187-operator-sequencer.strip_transform_fit.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02187", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02187", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02188", + "gapId": "operator:sequencer.swap", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02188-operator-sequencer.swap.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02188.py -- tests/files/web/generated/M16-GAP-02188-operator-sequencer.swap.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02188", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02188", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02189", + "gapId": "operator:sequencer.swap_data", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02189-operator-sequencer.swap_data.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02189.py -- tests/files/web/generated/M16-GAP-02189-operator-sequencer.swap_data.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02189", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02189", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02190", + "gapId": "operator:sequencer.swap_inputs", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02190-operator-sequencer.swap_inputs.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02190.py -- tests/files/web/generated/M16-GAP-02190-operator-sequencer.swap_inputs.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02190", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02190", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02191", + "gapId": "operator:sequencer.text_cursor_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02191-operator-sequencer.text_cursor_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02191.py -- tests/files/web/generated/M16-GAP-02191-operator-sequencer.text_cursor_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02191", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02191", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02192", + "gapId": "operator:sequencer.text_cursor_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02192-operator-sequencer.text_cursor_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02192.py -- tests/files/web/generated/M16-GAP-02192-operator-sequencer.text_cursor_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02192", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02192", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02193", + "gapId": "operator:sequencer.text_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02193-operator-sequencer.text_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02193.py -- tests/files/web/generated/M16-GAP-02193-operator-sequencer.text_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02193", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02193", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02194", + "gapId": "operator:sequencer.text_deselect_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02194-operator-sequencer.text_deselect_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02194.py -- tests/files/web/generated/M16-GAP-02194-operator-sequencer.text_deselect_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02194", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02194", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02195", + "gapId": "operator:sequencer.text_edit_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02195-operator-sequencer.text_edit_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02195.py -- tests/files/web/generated/M16-GAP-02195-operator-sequencer.text_edit_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02195", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02195", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02196", + "gapId": "operator:sequencer.text_edit_cut", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02196-operator-sequencer.text_edit_cut.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02196.py -- tests/files/web/generated/M16-GAP-02196-operator-sequencer.text_edit_cut.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02196", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02196", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02197", + "gapId": "operator:sequencer.text_edit_mode_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02197-operator-sequencer.text_edit_mode_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02197.py -- tests/files/web/generated/M16-GAP-02197-operator-sequencer.text_edit_mode_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02197", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02197", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02198", + "gapId": "operator:sequencer.text_edit_paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02198-operator-sequencer.text_edit_paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02198.py -- tests/files/web/generated/M16-GAP-02198-operator-sequencer.text_edit_paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02198", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02198", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02199", + "gapId": "operator:sequencer.text_insert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02199-operator-sequencer.text_insert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02199.py -- tests/files/web/generated/M16-GAP-02199-operator-sequencer.text_insert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02199", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02199", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02200", + "gapId": "operator:sequencer.text_line_break", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02200-operator-sequencer.text_line_break.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02200.py -- tests/files/web/generated/M16-GAP-02200-operator-sequencer.text_line_break.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02200", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02200", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02201", + "gapId": "operator:sequencer.text_select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02201-operator-sequencer.text_select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02201.py -- tests/files/web/generated/M16-GAP-02201-operator-sequencer.text_select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02201", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02201", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02202", + "gapId": "operator:sequencer.text_strip_style_preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02202-operator-sequencer.text_strip_style_preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02202.py -- tests/files/web/generated/M16-GAP-02202-operator-sequencer.text_strip_style_preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02202", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02202", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02203", + "gapId": "operator:sequencer.unlock", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02203-operator-sequencer.unlock.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02203.py -- tests/files/web/generated/M16-GAP-02203-operator-sequencer.unlock.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02203", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02203", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02204", + "gapId": "operator:sequencer.unmute", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02204-operator-sequencer.unmute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02204.py -- tests/files/web/generated/M16-GAP-02204-operator-sequencer.unmute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02204", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02204", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02205", + "gapId": "operator:sequencer.view_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02205-operator-sequencer.view_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02205.py -- tests/files/web/generated/M16-GAP-02205-operator-sequencer.view_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02205", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02205", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02206", + "gapId": "operator:sequencer.view_all_preview", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02206-operator-sequencer.view_all_preview.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02206.py -- tests/files/web/generated/M16-GAP-02206-operator-sequencer.view_all_preview.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02206", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02206", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02207", + "gapId": "operator:sequencer.view_frame", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02207-operator-sequencer.view_frame.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02207.py -- tests/files/web/generated/M16-GAP-02207-operator-sequencer.view_frame.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02207", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02207", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02208", + "gapId": "operator:sequencer.view_ghost_border", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02208-operator-sequencer.view_ghost_border.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02208.py -- tests/files/web/generated/M16-GAP-02208-operator-sequencer.view_ghost_border.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02208", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02208", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02209", + "gapId": "operator:sequencer.view_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02209-operator-sequencer.view_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02209.py -- tests/files/web/generated/M16-GAP-02209-operator-sequencer.view_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02209", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02209", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02210", + "gapId": "operator:sequencer.view_zoom_ratio", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02210-operator-sequencer.view_zoom_ratio.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02210.py -- tests/files/web/generated/M16-GAP-02210-operator-sequencer.view_zoom_ratio.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02210", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02210", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02211", + "gapId": "operator:sound.bake_animation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02211-operator-sound.bake_animation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02211.py -- tests/files/web/generated/M16-GAP-02211-operator-sound.bake_animation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02211", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02211", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02212", + "gapId": "operator:sound.mixdown", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02212-operator-sound.mixdown.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02212.py -- tests/files/web/generated/M16-GAP-02212-operator-sound.mixdown.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02212", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02212", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02213", + "gapId": "operator:sound.open", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02213-operator-sound.open.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02213.py -- tests/files/web/generated/M16-GAP-02213-operator-sound.open.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02213", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02213", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02214", + "gapId": "operator:sound.open_mono", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02214-operator-sound.open_mono.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02214.py -- tests/files/web/generated/M16-GAP-02214-operator-sound.open_mono.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02214", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02214", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02215", + "gapId": "operator:sound.pack", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02215-operator-sound.pack.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02215.py -- tests/files/web/generated/M16-GAP-02215-operator-sound.pack.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02215", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02215", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02216", + "gapId": "operator:sound.unpack", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02216-operator-sound.unpack.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02216.py -- tests/files/web/generated/M16-GAP-02216-operator-sound.unpack.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02216", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02216", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02217", + "gapId": "operator:sound.update_animation_flags", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02217-operator-sound.update_animation_flags.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02217.py -- tests/files/web/generated/M16-GAP-02217-operator-sound.update_animation_flags.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02217", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02217", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02218", + "gapId": "operator:spreadsheet.add_row_filter_rule", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02218-operator-spreadsheet.add_row_filter_rule.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02218.py -- tests/files/web/generated/M16-GAP-02218-operator-spreadsheet.add_row_filter_rule.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02218", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02218", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02219", + "gapId": "operator:spreadsheet.change_spreadsheet_data_source", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02219-operator-spreadsheet.change_spreadsheet_data_source.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02219.py -- tests/files/web/generated/M16-GAP-02219-operator-spreadsheet.change_spreadsheet_data_source.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02219", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02219", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02220", + "gapId": "operator:spreadsheet.fit_column", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02220-operator-spreadsheet.fit_column.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02220.py -- tests/files/web/generated/M16-GAP-02220-operator-spreadsheet.fit_column.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02220", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02220", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02221", + "gapId": "operator:spreadsheet.remove_row_filter_rule", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02221-operator-spreadsheet.remove_row_filter_rule.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02221.py -- tests/files/web/generated/M16-GAP-02221-operator-spreadsheet.remove_row_filter_rule.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02221", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02221", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02222", + "gapId": "operator:spreadsheet.reorder_columns", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02222-operator-spreadsheet.reorder_columns.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02222.py -- tests/files/web/generated/M16-GAP-02222-operator-spreadsheet.reorder_columns.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02222", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02222", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02223", + "gapId": "operator:spreadsheet.resize_column", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02223-operator-spreadsheet.resize_column.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02223.py -- tests/files/web/generated/M16-GAP-02223-operator-spreadsheet.resize_column.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02223", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02223", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02224", + "gapId": "operator:spreadsheet.toggle_pin", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02224-operator-spreadsheet.toggle_pin.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02224.py -- tests/files/web/generated/M16-GAP-02224-operator-spreadsheet.toggle_pin.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02224", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02224", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02225", + "gapId": "operator:surface.primitive_nurbs_surface_circle_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02225-operator-surface.primitive_nurbs_surface_circle_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02225.py -- tests/files/web/generated/M16-GAP-02225-operator-surface.primitive_nurbs_surface_circle_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02225", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02225", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02226", + "gapId": "operator:surface.primitive_nurbs_surface_curve_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02226-operator-surface.primitive_nurbs_surface_curve_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02226.py -- tests/files/web/generated/M16-GAP-02226-operator-surface.primitive_nurbs_surface_curve_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02226", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02226", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02227", + "gapId": "operator:surface.primitive_nurbs_surface_cylinder_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02227-operator-surface.primitive_nurbs_surface_cylinder_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02227.py -- tests/files/web/generated/M16-GAP-02227-operator-surface.primitive_nurbs_surface_cylinder_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02227", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02227", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02228", + "gapId": "operator:surface.primitive_nurbs_surface_sphere_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02228-operator-surface.primitive_nurbs_surface_sphere_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02228.py -- tests/files/web/generated/M16-GAP-02228-operator-surface.primitive_nurbs_surface_sphere_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02228", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02228", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02229", + "gapId": "operator:surface.primitive_nurbs_surface_surface_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02229-operator-surface.primitive_nurbs_surface_surface_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02229.py -- tests/files/web/generated/M16-GAP-02229-operator-surface.primitive_nurbs_surface_surface_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02229", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02229", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02230", + "gapId": "operator:surface.primitive_nurbs_surface_torus_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02230-operator-surface.primitive_nurbs_surface_torus_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02230.py -- tests/files/web/generated/M16-GAP-02230-operator-surface.primitive_nurbs_surface_torus_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02230", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02230", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02231", + "gapId": "operator:text.autocomplete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02231-operator-text.autocomplete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02231.py -- tests/files/web/generated/M16-GAP-02231-operator-text.autocomplete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02231", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02231", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02232", + "gapId": "operator:text.comment_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02232-operator-text.comment_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02232.py -- tests/files/web/generated/M16-GAP-02232-operator-text.comment_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02232", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02232", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02233", + "gapId": "operator:text.convert_whitespace", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02233-operator-text.convert_whitespace.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02233.py -- tests/files/web/generated/M16-GAP-02233-operator-text.convert_whitespace.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02233", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02233", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02234", + "gapId": "operator:text.copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02234-operator-text.copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02234.py -- tests/files/web/generated/M16-GAP-02234-operator-text.copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02234", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02234", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02235", + "gapId": "operator:text.cursor_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02235-operator-text.cursor_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02235.py -- tests/files/web/generated/M16-GAP-02235-operator-text.cursor_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02235", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02235", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02236", + "gapId": "operator:text.cut", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02236-operator-text.cut.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02236.py -- tests/files/web/generated/M16-GAP-02236-operator-text.cut.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02236", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02236", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02237", + "gapId": "operator:text.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02237-operator-text.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02237.py -- tests/files/web/generated/M16-GAP-02237-operator-text.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02237", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02237", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02238", + "gapId": "operator:text.duplicate_line", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02238-operator-text.duplicate_line.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02238.py -- tests/files/web/generated/M16-GAP-02238-operator-text.duplicate_line.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02238", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02238", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02239", + "gapId": "operator:text.find", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02239-operator-text.find.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02239.py -- tests/files/web/generated/M16-GAP-02239-operator-text.find.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02239", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02239", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02240", + "gapId": "operator:text.find_set_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02240-operator-text.find_set_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02240.py -- tests/files/web/generated/M16-GAP-02240-operator-text.find_set_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02240", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02240", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02241", + "gapId": "operator:text.indent", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02241-operator-text.indent.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02241.py -- tests/files/web/generated/M16-GAP-02241-operator-text.indent.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02241", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02241", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02242", + "gapId": "operator:text.indent_or_autocomplete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02242-operator-text.indent_or_autocomplete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02242.py -- tests/files/web/generated/M16-GAP-02242-operator-text.indent_or_autocomplete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02242", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02242", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02243", + "gapId": "operator:text.insert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02243-operator-text.insert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02243.py -- tests/files/web/generated/M16-GAP-02243-operator-text.insert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02243", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02243", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02244", + "gapId": "operator:text.jump", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02244-operator-text.jump.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02244.py -- tests/files/web/generated/M16-GAP-02244-operator-text.jump.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02244", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02244", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02245", + "gapId": "operator:text.jump_to_file_at_point", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02245-operator-text.jump_to_file_at_point.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02245.py -- tests/files/web/generated/M16-GAP-02245-operator-text.jump_to_file_at_point.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02245", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02245", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02246", + "gapId": "operator:text.line_break", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02246-operator-text.line_break.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02246.py -- tests/files/web/generated/M16-GAP-02246-operator-text.line_break.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02246", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02246", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02247", + "gapId": "operator:text.line_number", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02247-operator-text.line_number.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02247.py -- tests/files/web/generated/M16-GAP-02247-operator-text.line_number.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02247", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02247", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02248", + "gapId": "operator:text.make_internal", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02248-operator-text.make_internal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02248.py -- tests/files/web/generated/M16-GAP-02248-operator-text.make_internal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02248", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02248", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02249", + "gapId": "operator:text.move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02249-operator-text.move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02249.py -- tests/files/web/generated/M16-GAP-02249-operator-text.move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02249", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02249", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02250", + "gapId": "operator:text.move_lines", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02250-operator-text.move_lines.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02250.py -- tests/files/web/generated/M16-GAP-02250-operator-text.move_lines.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02250", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02250", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02251", + "gapId": "operator:text.move_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02251-operator-text.move_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02251.py -- tests/files/web/generated/M16-GAP-02251-operator-text.move_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02251", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02251", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02252", + "gapId": "operator:text.new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02252-operator-text.new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02252.py -- tests/files/web/generated/M16-GAP-02252-operator-text.new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02252", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02252", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02253", + "gapId": "operator:text.open", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02253-operator-text.open.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02253.py -- tests/files/web/generated/M16-GAP-02253-operator-text.open.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02253", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02253", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02254", + "gapId": "operator:text.overwrite_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02254-operator-text.overwrite_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02254.py -- tests/files/web/generated/M16-GAP-02254-operator-text.overwrite_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02254", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02254", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02255", + "gapId": "operator:text.paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02255-operator-text.paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02255.py -- tests/files/web/generated/M16-GAP-02255-operator-text.paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02255", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02255", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02256", + "gapId": "operator:text.reload", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02256-operator-text.reload.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02256.py -- tests/files/web/generated/M16-GAP-02256-operator-text.reload.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02256", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02256", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02257", + "gapId": "operator:text.replace", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02257-operator-text.replace.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02257.py -- tests/files/web/generated/M16-GAP-02257-operator-text.replace.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02257", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02257", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02258", + "gapId": "operator:text.replace_set_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02258-operator-text.replace_set_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02258.py -- tests/files/web/generated/M16-GAP-02258-operator-text.replace_set_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02258", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02258", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02259", + "gapId": "operator:text.resolve_conflict", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02259-operator-text.resolve_conflict.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02259.py -- tests/files/web/generated/M16-GAP-02259-operator-text.resolve_conflict.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02259", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02259", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02260", + "gapId": "operator:text.run_script", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02260-operator-text.run_script.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02260.py -- tests/files/web/generated/M16-GAP-02260-operator-text.run_script.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02260", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02260", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02261", + "gapId": "operator:text.save", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02261-operator-text.save.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02261.py -- tests/files/web/generated/M16-GAP-02261-operator-text.save.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02261", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02261", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02262", + "gapId": "operator:text.save_as", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02262-operator-text.save_as.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02262.py -- tests/files/web/generated/M16-GAP-02262-operator-text.save_as.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02262", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02262", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02263", + "gapId": "operator:text.scroll", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02263-operator-text.scroll.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02263.py -- tests/files/web/generated/M16-GAP-02263-operator-text.scroll.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02263", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02263", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02264", + "gapId": "operator:text.scroll_bar", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02264-operator-text.scroll_bar.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02264.py -- tests/files/web/generated/M16-GAP-02264-operator-text.scroll_bar.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02264", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02264", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02265", + "gapId": "operator:text.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02265-operator-text.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02265.py -- tests/files/web/generated/M16-GAP-02265-operator-text.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02265", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02265", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02266", + "gapId": "operator:text.select_line", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02266-operator-text.select_line.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02266.py -- tests/files/web/generated/M16-GAP-02266-operator-text.select_line.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02266", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02266", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02267", + "gapId": "operator:text.select_word", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02267-operator-text.select_word.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02267.py -- tests/files/web/generated/M16-GAP-02267-operator-text.select_word.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02267", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02267", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02268", + "gapId": "operator:text.selection_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02268-operator-text.selection_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02268.py -- tests/files/web/generated/M16-GAP-02268-operator-text.selection_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02268", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02268", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02269", + "gapId": "operator:text.start_find", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02269-operator-text.start_find.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02269.py -- tests/files/web/generated/M16-GAP-02269-operator-text.start_find.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02269", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02269", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02270", + "gapId": "operator:text.to_3d_object", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02270-operator-text.to_3d_object.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02270.py -- tests/files/web/generated/M16-GAP-02270-operator-text.to_3d_object.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02270", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02270", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02271", + "gapId": "operator:text.unindent", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02271-operator-text.unindent.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02271.py -- tests/files/web/generated/M16-GAP-02271-operator-text.unindent.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02271", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02271", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02272", + "gapId": "operator:text.unlink", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02272-operator-text.unlink.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02272.py -- tests/files/web/generated/M16-GAP-02272-operator-text.unlink.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02272", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02272", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02273", + "gapId": "operator:text.update_shader", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02273-operator-text.update_shader.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02273.py -- tests/files/web/generated/M16-GAP-02273-operator-text.update_shader.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02273", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02273", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02274", + "gapId": "operator:text_editor.preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02274-operator-text_editor.preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02274.py -- tests/files/web/generated/M16-GAP-02274-operator-text_editor.preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02274", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02274", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02275", + "gapId": "operator:texture.new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02275-operator-texture.new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02275.py -- tests/files/web/generated/M16-GAP-02275-operator-texture.new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02275", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02275", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02276", + "gapId": "operator:texture.slot_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02276-operator-texture.slot_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02276.py -- tests/files/web/generated/M16-GAP-02276-operator-texture.slot_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02276", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02276", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02277", + "gapId": "operator:texture.slot_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02277-operator-texture.slot_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02277.py -- tests/files/web/generated/M16-GAP-02277-operator-texture.slot_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02277", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02277", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02278", + "gapId": "operator:texture.slot_paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02278-operator-texture.slot_paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02278.py -- tests/files/web/generated/M16-GAP-02278-operator-texture.slot_paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02278", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02278", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02279", + "gapId": "operator:transform.bbone_resize", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02279-operator-transform.bbone_resize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02279.py -- tests/files/web/generated/M16-GAP-02279-operator-transform.bbone_resize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02279", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02279", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02280", + "gapId": "operator:transform.bend", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02280-operator-transform.bend.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02280.py -- tests/files/web/generated/M16-GAP-02280-operator-transform.bend.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02280", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02280", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02281", + "gapId": "operator:transform.create_orientation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02281-operator-transform.create_orientation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02281.py -- tests/files/web/generated/M16-GAP-02281-operator-transform.create_orientation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02281", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02281", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02282", + "gapId": "operator:transform.delete_orientation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02282-operator-transform.delete_orientation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02282.py -- tests/files/web/generated/M16-GAP-02282-operator-transform.delete_orientation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02282", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02282", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02283", + "gapId": "operator:transform.edge_bevelweight", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02283-operator-transform.edge_bevelweight.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02283.py -- tests/files/web/generated/M16-GAP-02283-operator-transform.edge_bevelweight.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02283", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02283", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02284", + "gapId": "operator:transform.edge_crease", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02284-operator-transform.edge_crease.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02284.py -- tests/files/web/generated/M16-GAP-02284-operator-transform.edge_crease.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02284", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02284", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02285", + "gapId": "operator:transform.edge_slide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02285-operator-transform.edge_slide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02285.py -- tests/files/web/generated/M16-GAP-02285-operator-transform.edge_slide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02285", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02285", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02286", + "gapId": "operator:transform.from_gizmo", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02286-operator-transform.from_gizmo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02286.py -- tests/files/web/generated/M16-GAP-02286-operator-transform.from_gizmo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02286", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02286", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02287", + "gapId": "operator:transform.mirror", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02287-operator-transform.mirror.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02287.py -- tests/files/web/generated/M16-GAP-02287-operator-transform.mirror.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02287", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02287", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02288", + "gapId": "operator:transform.push_pull", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02288-operator-transform.push_pull.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02288.py -- tests/files/web/generated/M16-GAP-02288-operator-transform.push_pull.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02288", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02288", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02289", + "gapId": "operator:transform.resize", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02289-operator-transform.resize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02289.py -- tests/files/web/generated/M16-GAP-02289-operator-transform.resize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02289", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02289", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02290", + "gapId": "operator:transform.rotate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02290-operator-transform.rotate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02290.py -- tests/files/web/generated/M16-GAP-02290-operator-transform.rotate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02290", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02290", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02291", + "gapId": "operator:transform.rotate_normal", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02291-operator-transform.rotate_normal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02291.py -- tests/files/web/generated/M16-GAP-02291-operator-transform.rotate_normal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02291", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02291", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02292", + "gapId": "operator:transform.select_orientation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02292-operator-transform.select_orientation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02292.py -- tests/files/web/generated/M16-GAP-02292-operator-transform.select_orientation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02292", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02292", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02293", + "gapId": "operator:transform.seq_slide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02293-operator-transform.seq_slide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02293.py -- tests/files/web/generated/M16-GAP-02293-operator-transform.seq_slide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02293", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02293", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02294", + "gapId": "operator:transform.shear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02294-operator-transform.shear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02294.py -- tests/files/web/generated/M16-GAP-02294-operator-transform.shear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02294", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02294", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02295", + "gapId": "operator:transform.shrink_fatten", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02295-operator-transform.shrink_fatten.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02295.py -- tests/files/web/generated/M16-GAP-02295-operator-transform.shrink_fatten.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02295", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02295", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02296", + "gapId": "operator:transform.skin_resize", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02296-operator-transform.skin_resize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02296.py -- tests/files/web/generated/M16-GAP-02296-operator-transform.skin_resize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02296", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02296", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02297", + "gapId": "operator:transform.tilt", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02297-operator-transform.tilt.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02297.py -- tests/files/web/generated/M16-GAP-02297-operator-transform.tilt.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02297", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02297", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02298", + "gapId": "operator:transform.tosphere", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02298-operator-transform.tosphere.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02298.py -- tests/files/web/generated/M16-GAP-02298-operator-transform.tosphere.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02298", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02298", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02299", + "gapId": "operator:transform.trackball", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02299-operator-transform.trackball.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02299.py -- tests/files/web/generated/M16-GAP-02299-operator-transform.trackball.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02299", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02299", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02300", + "gapId": "operator:transform.transform", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02300-operator-transform.transform.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02300.py -- tests/files/web/generated/M16-GAP-02300-operator-transform.transform.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02300", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02300", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02301", + "gapId": "operator:transform.translate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02301-operator-transform.translate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02301.py -- tests/files/web/generated/M16-GAP-02301-operator-transform.translate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02301", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02301", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02302", + "gapId": "operator:transform.vert_crease", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02302-operator-transform.vert_crease.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02302.py -- tests/files/web/generated/M16-GAP-02302-operator-transform.vert_crease.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02302", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02302", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02303", + "gapId": "operator:transform.vert_slide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02303-operator-transform.vert_slide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02303.py -- tests/files/web/generated/M16-GAP-02303-operator-transform.vert_slide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02303", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02303", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02304", + "gapId": "operator:transform.vertex_random", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02304-operator-transform.vertex_random.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02304.py -- tests/files/web/generated/M16-GAP-02304-operator-transform.vertex_random.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02304", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02304", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02305", + "gapId": "operator:transform.vertex_warp", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02305-operator-transform.vertex_warp.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02305.py -- tests/files/web/generated/M16-GAP-02305-operator-transform.vertex_warp.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02305", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02305", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02306", + "gapId": "operator:ui.assign_default_button", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02306-operator-ui.assign_default_button.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02306.py -- tests/files/web/generated/M16-GAP-02306-operator-ui.assign_default_button.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02306", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02306", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02307", + "gapId": "operator:ui.button_execute", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02307-operator-ui.button_execute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02307.py -- tests/files/web/generated/M16-GAP-02307-operator-ui.button_execute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02307", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02307", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02308", + "gapId": "operator:ui.button_string_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02308-operator-ui.button_string_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02308.py -- tests/files/web/generated/M16-GAP-02308-operator-ui.button_string_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02308", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02308", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02309", + "gapId": "operator:ui.copy_as_driver_button", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02309-operator-ui.copy_as_driver_button.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02309.py -- tests/files/web/generated/M16-GAP-02309-operator-ui.copy_as_driver_button.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02309", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02309", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02310", + "gapId": "operator:ui.copy_data_path_button", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02310-operator-ui.copy_data_path_button.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02310.py -- tests/files/web/generated/M16-GAP-02310-operator-ui.copy_data_path_button.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02310", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02310", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02311", + "gapId": "operator:ui.copy_driver_to_selected_button", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02311-operator-ui.copy_driver_to_selected_button.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02311.py -- tests/files/web/generated/M16-GAP-02311-operator-ui.copy_driver_to_selected_button.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02311", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02311", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02312", + "gapId": "operator:ui.copy_python_command_button", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02312-operator-ui.copy_python_command_button.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02312.py -- tests/files/web/generated/M16-GAP-02312-operator-ui.copy_python_command_button.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02312", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02312", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02313", + "gapId": "operator:ui.copy_to_selected_button", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02313-operator-ui.copy_to_selected_button.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02313.py -- tests/files/web/generated/M16-GAP-02313-operator-ui.copy_to_selected_button.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02313", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02313", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02314", + "gapId": "operator:ui.drop_color", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02314-operator-ui.drop_color.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02314.py -- tests/files/web/generated/M16-GAP-02314-operator-ui.drop_color.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02314", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02314", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02315", + "gapId": "operator:ui.drop_material", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02315-operator-ui.drop_material.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02315.py -- tests/files/web/generated/M16-GAP-02315-operator-ui.drop_material.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02315", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02315", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02316", + "gapId": "operator:ui.drop_name", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02316-operator-ui.drop_name.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02316.py -- tests/files/web/generated/M16-GAP-02316-operator-ui.drop_name.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02316", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02316", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02317", + "gapId": "operator:ui.editsource", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02317-operator-ui.editsource.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02317.py -- tests/files/web/generated/M16-GAP-02317-operator-ui.editsource.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02317", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02317", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02318", + "gapId": "operator:ui.eyedropper_bone", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02318-operator-ui.eyedropper_bone.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02318.py -- tests/files/web/generated/M16-GAP-02318-operator-ui.eyedropper_bone.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02318", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02318", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02319", + "gapId": "operator:ui.eyedropper_color", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02319-operator-ui.eyedropper_color.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02319.py -- tests/files/web/generated/M16-GAP-02319-operator-ui.eyedropper_color.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02319", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02319", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02320", + "gapId": "operator:ui.eyedropper_colorramp", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02320-operator-ui.eyedropper_colorramp.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02320.py -- tests/files/web/generated/M16-GAP-02320-operator-ui.eyedropper_colorramp.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02320", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02320", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02321", + "gapId": "operator:ui.eyedropper_colorramp_point", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02321-operator-ui.eyedropper_colorramp_point.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02321.py -- tests/files/web/generated/M16-GAP-02321-operator-ui.eyedropper_colorramp_point.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02321", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02321", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02322", + "gapId": "operator:ui.eyedropper_depth", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02322-operator-ui.eyedropper_depth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02322.py -- tests/files/web/generated/M16-GAP-02322-operator-ui.eyedropper_depth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02322", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02322", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02323", + "gapId": "operator:ui.eyedropper_driver", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02323-operator-ui.eyedropper_driver.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02323.py -- tests/files/web/generated/M16-GAP-02323-operator-ui.eyedropper_driver.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02323", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02323", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02324", + "gapId": "operator:ui.eyedropper_grease_pencil_color", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02324-operator-ui.eyedropper_grease_pencil_color.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02324.py -- tests/files/web/generated/M16-GAP-02324-operator-ui.eyedropper_grease_pencil_color.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02324", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02324", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02325", + "gapId": "operator:ui.eyedropper_id", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02325-operator-ui.eyedropper_id.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02325.py -- tests/files/web/generated/M16-GAP-02325-operator-ui.eyedropper_id.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02325", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02325", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02326", + "gapId": "operator:ui.jump_to_target_button", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02326-operator-ui.jump_to_target_button.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02326.py -- tests/files/web/generated/M16-GAP-02326-operator-ui.jump_to_target_button.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02326", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02326", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02327", + "gapId": "operator:ui.list_start_filter", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02327-operator-ui.list_start_filter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02327.py -- tests/files/web/generated/M16-GAP-02327-operator-ui.list_start_filter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02327", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02327", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02328", + "gapId": "operator:ui.override_add_button", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02328-operator-ui.override_add_button.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02328.py -- tests/files/web/generated/M16-GAP-02328-operator-ui.override_add_button.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02328", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02328", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02329", + "gapId": "operator:ui.override_idtemplate_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02329-operator-ui.override_idtemplate_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02329.py -- tests/files/web/generated/M16-GAP-02329-operator-ui.override_idtemplate_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02329", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02329", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02330", + "gapId": "operator:ui.override_idtemplate_make", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02330-operator-ui.override_idtemplate_make.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02330.py -- tests/files/web/generated/M16-GAP-02330-operator-ui.override_idtemplate_make.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02330", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02330", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02331", + "gapId": "operator:ui.override_idtemplate_reset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02331-operator-ui.override_idtemplate_reset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02331.py -- tests/files/web/generated/M16-GAP-02331-operator-ui.override_idtemplate_reset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02331", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02331", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02332", + "gapId": "operator:ui.override_remove_button", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02332-operator-ui.override_remove_button.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02332.py -- tests/files/web/generated/M16-GAP-02332-operator-ui.override_remove_button.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02332", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02332", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02333", + "gapId": "operator:ui.reloadtranslation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02333-operator-ui.reloadtranslation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02333.py -- tests/files/web/generated/M16-GAP-02333-operator-ui.reloadtranslation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02333", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02333", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02334", + "gapId": "operator:ui.reset_default_button", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02334-operator-ui.reset_default_button.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02334.py -- tests/files/web/generated/M16-GAP-02334-operator-ui.reset_default_button.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02334", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02334", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02335", + "gapId": "operator:ui.unset_property_button", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02335-operator-ui.unset_property_button.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02335.py -- tests/files/web/generated/M16-GAP-02335-operator-ui.unset_property_button.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02335", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02335", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02336", + "gapId": "operator:ui.view_drop", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02336-operator-ui.view_drop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02336.py -- tests/files/web/generated/M16-GAP-02336-operator-ui.view_drop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02336", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02336", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02337", + "gapId": "operator:ui.view_item_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02337-operator-ui.view_item_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02337.py -- tests/files/web/generated/M16-GAP-02337-operator-ui.view_item_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02337", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02337", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02338", + "gapId": "operator:ui.view_item_focus", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02338-operator-ui.view_item_focus.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02338.py -- tests/files/web/generated/M16-GAP-02338-operator-ui.view_item_focus.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02338", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02338", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02339", + "gapId": "operator:ui.view_item_navigate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02339-operator-ui.view_item_navigate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02339.py -- tests/files/web/generated/M16-GAP-02339-operator-ui.view_item_navigate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02339", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02339", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02340", + "gapId": "operator:ui.view_item_rename", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02340-operator-ui.view_item_rename.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02340.py -- tests/files/web/generated/M16-GAP-02340-operator-ui.view_item_rename.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02340", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02340", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02341", + "gapId": "operator:ui.view_item_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02341-operator-ui.view_item_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02341.py -- tests/files/web/generated/M16-GAP-02341-operator-ui.view_item_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02341", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02341", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02342", + "gapId": "operator:ui.view_scroll", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02342-operator-ui.view_scroll.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02342.py -- tests/files/web/generated/M16-GAP-02342-operator-ui.view_scroll.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02342", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02342", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02343", + "gapId": "operator:ui.view_start_filter", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02343-operator-ui.view_start_filter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02343.py -- tests/files/web/generated/M16-GAP-02343-operator-ui.view_start_filter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02343", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02343", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02344", + "gapId": "operator:uilist.entry_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02344-operator-uilist.entry_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02344.py -- tests/files/web/generated/M16-GAP-02344-operator-uilist.entry_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02344", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02344", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02345", + "gapId": "operator:uilist.entry_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02345-operator-uilist.entry_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02345.py -- tests/files/web/generated/M16-GAP-02345-operator-uilist.entry_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02345", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02345", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02346", + "gapId": "operator:uilist.entry_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02346-operator-uilist.entry_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02346.py -- tests/files/web/generated/M16-GAP-02346-operator-uilist.entry_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02346", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02346", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02347", + "gapId": "operator:uv.align", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02347-operator-uv.align.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02347.py -- tests/files/web/generated/M16-GAP-02347-operator-uv.align.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02347", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02347", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02348", + "gapId": "operator:uv.align_rotation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02348-operator-uv.align_rotation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02348.py -- tests/files/web/generated/M16-GAP-02348-operator-uv.align_rotation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02348", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02348", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02349", + "gapId": "operator:uv.arrange_islands", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02349-operator-uv.arrange_islands.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02349.py -- tests/files/web/generated/M16-GAP-02349-operator-uv.arrange_islands.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02349", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02349", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02350", + "gapId": "operator:uv.average_islands_scale", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02350-operator-uv.average_islands_scale.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02350.py -- tests/files/web/generated/M16-GAP-02350-operator-uv.average_islands_scale.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02350", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02350", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02351", + "gapId": "operator:uv.copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02351-operator-uv.copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02351.py -- tests/files/web/generated/M16-GAP-02351-operator-uv.copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02351", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02351", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02352", + "gapId": "operator:uv.copy_mirrored_faces", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02352-operator-uv.copy_mirrored_faces.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02352.py -- tests/files/web/generated/M16-GAP-02352-operator-uv.copy_mirrored_faces.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02352", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02352", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02353", + "gapId": "operator:uv.cube_project", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02353-operator-uv.cube_project.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02353.py -- tests/files/web/generated/M16-GAP-02353-operator-uv.cube_project.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02353", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02353", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02354", + "gapId": "operator:uv.cursor_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02354-operator-uv.cursor_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02354.py -- tests/files/web/generated/M16-GAP-02354-operator-uv.cursor_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02354", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02354", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02355", + "gapId": "operator:uv.custom_region_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02355-operator-uv.custom_region_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02355.py -- tests/files/web/generated/M16-GAP-02355-operator-uv.custom_region_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02355", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02355", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02356", + "gapId": "operator:uv.cylinder_project", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02356-operator-uv.cylinder_project.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02356.py -- tests/files/web/generated/M16-GAP-02356-operator-uv.cylinder_project.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02356", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02356", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02357", + "gapId": "operator:uv.export_layout", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02357-operator-uv.export_layout.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02357.py -- tests/files/web/generated/M16-GAP-02357-operator-uv.export_layout.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02357", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02357", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02358", + "gapId": "operator:uv.follow_active_quads", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02358-operator-uv.follow_active_quads.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02358.py -- tests/files/web/generated/M16-GAP-02358-operator-uv.follow_active_quads.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02358", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02358", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02359", + "gapId": "operator:uv.hide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02359-operator-uv.hide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02359.py -- tests/files/web/generated/M16-GAP-02359-operator-uv.hide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02359", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02359", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02360", + "gapId": "operator:uv.lightmap_pack", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02360-operator-uv.lightmap_pack.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02360.py -- tests/files/web/generated/M16-GAP-02360-operator-uv.lightmap_pack.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02360", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02360", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02361", + "gapId": "operator:uv.mark_seam", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02361-operator-uv.mark_seam.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02361.py -- tests/files/web/generated/M16-GAP-02361-operator-uv.mark_seam.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02361", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02361", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02362", + "gapId": "operator:uv.minimize_stretch", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02362-operator-uv.minimize_stretch.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02362.py -- tests/files/web/generated/M16-GAP-02362-operator-uv.minimize_stretch.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02362", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02362", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02363", + "gapId": "operator:uv.move_on_axis", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02363-operator-uv.move_on_axis.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02363.py -- tests/files/web/generated/M16-GAP-02363-operator-uv.move_on_axis.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02363", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02363", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02364", + "gapId": "operator:uv.pack_islands", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02364-operator-uv.pack_islands.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02364.py -- tests/files/web/generated/M16-GAP-02364-operator-uv.pack_islands.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02364", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02364", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02365", + "gapId": "operator:uv.paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02365-operator-uv.paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02365.py -- tests/files/web/generated/M16-GAP-02365-operator-uv.paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02365", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02365", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02366", + "gapId": "operator:uv.pin", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02366-operator-uv.pin.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02366.py -- tests/files/web/generated/M16-GAP-02366-operator-uv.pin.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02366", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02366", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02367", + "gapId": "operator:uv.project_from_view", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02367-operator-uv.project_from_view.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02367.py -- tests/files/web/generated/M16-GAP-02367-operator-uv.project_from_view.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02367", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02367", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02368", + "gapId": "operator:uv.randomize_uv_transform", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02368-operator-uv.randomize_uv_transform.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02368.py -- tests/files/web/generated/M16-GAP-02368-operator-uv.randomize_uv_transform.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02368", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02368", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02369", + "gapId": "operator:uv.remove_doubles", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02369-operator-uv.remove_doubles.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02369.py -- tests/files/web/generated/M16-GAP-02369-operator-uv.remove_doubles.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02369", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02369", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02370", + "gapId": "operator:uv.reset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02370-operator-uv.reset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02370.py -- tests/files/web/generated/M16-GAP-02370-operator-uv.reset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02370", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02370", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02371", + "gapId": "operator:uv.reveal", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02371-operator-uv.reveal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02371.py -- tests/files/web/generated/M16-GAP-02371-operator-uv.reveal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02371", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02371", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02372", + "gapId": "operator:uv.rip", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02372-operator-uv.rip.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02372.py -- tests/files/web/generated/M16-GAP-02372-operator-uv.rip.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02372", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02372", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02373", + "gapId": "operator:uv.rip_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02373-operator-uv.rip_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02373.py -- tests/files/web/generated/M16-GAP-02373-operator-uv.rip_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02373", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02373", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02374", + "gapId": "operator:uv.seams_from_islands", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02374-operator-uv.seams_from_islands.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02374.py -- tests/files/web/generated/M16-GAP-02374-operator-uv.seams_from_islands.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02374", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02374", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02375", + "gapId": "operator:uv.select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02375-operator-uv.select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02375.py -- tests/files/web/generated/M16-GAP-02375-operator-uv.select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02375", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02375", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02376", + "gapId": "operator:uv.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02376-operator-uv.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02376.py -- tests/files/web/generated/M16-GAP-02376-operator-uv.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02376", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02376", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02377", + "gapId": "operator:uv.select_box", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02377-operator-uv.select_box.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02377.py -- tests/files/web/generated/M16-GAP-02377-operator-uv.select_box.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02377", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02377", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02378", + "gapId": "operator:uv.select_by_winding", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02378-operator-uv.select_by_winding.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02378.py -- tests/files/web/generated/M16-GAP-02378-operator-uv.select_by_winding.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02378", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02378", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02379", + "gapId": "operator:uv.select_circle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02379-operator-uv.select_circle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02379.py -- tests/files/web/generated/M16-GAP-02379-operator-uv.select_circle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02379", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02379", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02380", + "gapId": "operator:uv.select_edge_ring", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02380-operator-uv.select_edge_ring.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02380.py -- tests/files/web/generated/M16-GAP-02380-operator-uv.select_edge_ring.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02380", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02380", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02381", + "gapId": "operator:uv.select_lasso", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02381-operator-uv.select_lasso.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02381.py -- tests/files/web/generated/M16-GAP-02381-operator-uv.select_lasso.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02381", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02381", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02382", + "gapId": "operator:uv.select_less", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02382-operator-uv.select_less.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02382.py -- tests/files/web/generated/M16-GAP-02382-operator-uv.select_less.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02382", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02382", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02383", + "gapId": "operator:uv.select_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02383-operator-uv.select_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02383.py -- tests/files/web/generated/M16-GAP-02383-operator-uv.select_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02383", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02383", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02384", + "gapId": "operator:uv.select_linked_pick", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02384-operator-uv.select_linked_pick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02384.py -- tests/files/web/generated/M16-GAP-02384-operator-uv.select_linked_pick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02384", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02384", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02385", + "gapId": "operator:uv.select_loop", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02385-operator-uv.select_loop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02385.py -- tests/files/web/generated/M16-GAP-02385-operator-uv.select_loop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02385", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02385", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02386", + "gapId": "operator:uv.select_mode", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02386-operator-uv.select_mode.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02386.py -- tests/files/web/generated/M16-GAP-02386-operator-uv.select_mode.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02386", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02386", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02387", + "gapId": "operator:uv.select_more", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02387-operator-uv.select_more.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02387.py -- tests/files/web/generated/M16-GAP-02387-operator-uv.select_more.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02387", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02387", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02388", + "gapId": "operator:uv.select_overlap", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02388-operator-uv.select_overlap.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02388.py -- tests/files/web/generated/M16-GAP-02388-operator-uv.select_overlap.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02388", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02388", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02389", + "gapId": "operator:uv.select_pinned", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02389-operator-uv.select_pinned.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02389.py -- tests/files/web/generated/M16-GAP-02389-operator-uv.select_pinned.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02389", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02389", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02390", + "gapId": "operator:uv.select_similar", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02390-operator-uv.select_similar.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02390.py -- tests/files/web/generated/M16-GAP-02390-operator-uv.select_similar.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02390", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02390", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02391", + "gapId": "operator:uv.select_split", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02391-operator-uv.select_split.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02391.py -- tests/files/web/generated/M16-GAP-02391-operator-uv.select_split.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02391", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02391", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02392", + "gapId": "operator:uv.select_tile", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02392-operator-uv.select_tile.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02392.py -- tests/files/web/generated/M16-GAP-02392-operator-uv.select_tile.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02392", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02392", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02393", + "gapId": "operator:uv.shortest_path_pick", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02393-operator-uv.shortest_path_pick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02393.py -- tests/files/web/generated/M16-GAP-02393-operator-uv.shortest_path_pick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02393", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02393", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02394", + "gapId": "operator:uv.shortest_path_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02394-operator-uv.shortest_path_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02394.py -- tests/files/web/generated/M16-GAP-02394-operator-uv.shortest_path_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02394", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02394", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02395", + "gapId": "operator:uv.smart_project", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02395-operator-uv.smart_project.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02395.py -- tests/files/web/generated/M16-GAP-02395-operator-uv.smart_project.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02395", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02395", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02396", + "gapId": "operator:uv.snap_cursor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02396-operator-uv.snap_cursor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02396.py -- tests/files/web/generated/M16-GAP-02396-operator-uv.snap_cursor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02396", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02396", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02397", + "gapId": "operator:uv.snap_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02397-operator-uv.snap_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02397.py -- tests/files/web/generated/M16-GAP-02397-operator-uv.snap_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02397", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02397", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02398", + "gapId": "operator:uv.sphere_project", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02398-operator-uv.sphere_project.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02398.py -- tests/files/web/generated/M16-GAP-02398-operator-uv.sphere_project.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02398", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02398", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02399", + "gapId": "operator:uv.stitch", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02399-operator-uv.stitch.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02399.py -- tests/files/web/generated/M16-GAP-02399-operator-uv.stitch.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02399", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02399", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02400", + "gapId": "operator:uv.unwrap", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02400-operator-uv.unwrap.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02400.py -- tests/files/web/generated/M16-GAP-02400-operator-uv.unwrap.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02400", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02400", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02401", + "gapId": "operator:uv.weld", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02401-operator-uv.weld.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02401.py -- tests/files/web/generated/M16-GAP-02401-operator-uv.weld.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02401", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02401", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02402", + "gapId": "operator:view2d.edge_pan", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02402-operator-view2d.edge_pan.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02402.py -- tests/files/web/generated/M16-GAP-02402-operator-view2d.edge_pan.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02402", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02402", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02403", + "gapId": "operator:view2d.ndof", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02403-operator-view2d.ndof.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02403.py -- tests/files/web/generated/M16-GAP-02403-operator-view2d.ndof.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02403", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02403", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02404", + "gapId": "operator:view2d.pan", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02404-operator-view2d.pan.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02404.py -- tests/files/web/generated/M16-GAP-02404-operator-view2d.pan.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02404", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02404", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02405", + "gapId": "operator:view2d.reset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02405-operator-view2d.reset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02405.py -- tests/files/web/generated/M16-GAP-02405-operator-view2d.reset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02405", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02405", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02406", + "gapId": "operator:view2d.scroll_down", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02406-operator-view2d.scroll_down.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02406.py -- tests/files/web/generated/M16-GAP-02406-operator-view2d.scroll_down.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02406", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02406", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02407", + "gapId": "operator:view2d.scroll_left", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02407-operator-view2d.scroll_left.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02407.py -- tests/files/web/generated/M16-GAP-02407-operator-view2d.scroll_left.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02407", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02407", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02408", + "gapId": "operator:view2d.scroll_right", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02408-operator-view2d.scroll_right.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02408.py -- tests/files/web/generated/M16-GAP-02408-operator-view2d.scroll_right.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02408", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02408", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02409", + "gapId": "operator:view2d.scroll_up", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02409-operator-view2d.scroll_up.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02409.py -- tests/files/web/generated/M16-GAP-02409-operator-view2d.scroll_up.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02409", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02409", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02410", + "gapId": "operator:view2d.scroller_activate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02410-operator-view2d.scroller_activate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02410.py -- tests/files/web/generated/M16-GAP-02410-operator-view2d.scroller_activate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02410", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02410", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02411", + "gapId": "operator:view2d.smoothview", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02411-operator-view2d.smoothview.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02411.py -- tests/files/web/generated/M16-GAP-02411-operator-view2d.smoothview.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02411", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02411", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02412", + "gapId": "operator:view2d.zoom", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02412-operator-view2d.zoom.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02412.py -- tests/files/web/generated/M16-GAP-02412-operator-view2d.zoom.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02412", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02412", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02413", + "gapId": "operator:view2d.zoom_border", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02413-operator-view2d.zoom_border.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02413.py -- tests/files/web/generated/M16-GAP-02413-operator-view2d.zoom_border.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02413", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02413", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02414", + "gapId": "operator:view2d.zoom_in", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02414-operator-view2d.zoom_in.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02414.py -- tests/files/web/generated/M16-GAP-02414-operator-view2d.zoom_in.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02414", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02414", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02415", + "gapId": "operator:view2d.zoom_out", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02415-operator-view2d.zoom_out.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02415.py -- tests/files/web/generated/M16-GAP-02415-operator-view2d.zoom_out.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02415", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02415", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02416", + "gapId": "operator:view3d.bone_select_menu", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02416-operator-view3d.bone_select_menu.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02416.py -- tests/files/web/generated/M16-GAP-02416-operator-view3d.bone_select_menu.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02416", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02416", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02417", + "gapId": "operator:view3d.camera_background_image_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02417-operator-view3d.camera_background_image_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02417.py -- tests/files/web/generated/M16-GAP-02417-operator-view3d.camera_background_image_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02417", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02417", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02418", + "gapId": "operator:view3d.camera_background_image_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02418-operator-view3d.camera_background_image_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02418.py -- tests/files/web/generated/M16-GAP-02418-operator-view3d.camera_background_image_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02418", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02418", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02419", + "gapId": "operator:view3d.camera_to_view", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02419-operator-view3d.camera_to_view.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02419.py -- tests/files/web/generated/M16-GAP-02419-operator-view3d.camera_to_view.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02419", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02419", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02420", + "gapId": "operator:view3d.camera_to_view_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02420-operator-view3d.camera_to_view_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02420.py -- tests/files/web/generated/M16-GAP-02420-operator-view3d.camera_to_view_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02420", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02420", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02421", + "gapId": "operator:view3d.clear_render_border", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02421-operator-view3d.clear_render_border.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02421.py -- tests/files/web/generated/M16-GAP-02421-operator-view3d.clear_render_border.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02421", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02421", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02422", + "gapId": "operator:view3d.clip_border", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02422-operator-view3d.clip_border.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02422.py -- tests/files/web/generated/M16-GAP-02422-operator-view3d.clip_border.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02422", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02422", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02423", + "gapId": "operator:view3d.copybuffer", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02423-operator-view3d.copybuffer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02423.py -- tests/files/web/generated/M16-GAP-02423-operator-view3d.copybuffer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02423", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02423", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02424", + "gapId": "operator:view3d.cursor3d", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02424-operator-view3d.cursor3d.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02424.py -- tests/files/web/generated/M16-GAP-02424-operator-view3d.cursor3d.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02424", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02424", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02425", + "gapId": "operator:view3d.dolly", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02425-operator-view3d.dolly.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02425.py -- tests/files/web/generated/M16-GAP-02425-operator-view3d.dolly.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02425", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02425", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02426", + "gapId": "operator:view3d.drop_world", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02426-operator-view3d.drop_world.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02426.py -- tests/files/web/generated/M16-GAP-02426-operator-view3d.drop_world.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02426", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02426", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02427", + "gapId": "operator:view3d.edit_mesh_extrude_individual_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02427-operator-view3d.edit_mesh_extrude_individual_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02427.py -- tests/files/web/generated/M16-GAP-02427-operator-view3d.edit_mesh_extrude_individual_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02427", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02427", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02428", + "gapId": "operator:view3d.edit_mesh_extrude_manifold_normal", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02428-operator-view3d.edit_mesh_extrude_manifold_normal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02428.py -- tests/files/web/generated/M16-GAP-02428-operator-view3d.edit_mesh_extrude_manifold_normal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02428", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02428", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02429", + "gapId": "operator:view3d.edit_mesh_extrude_move_normal", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02429-operator-view3d.edit_mesh_extrude_move_normal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02429.py -- tests/files/web/generated/M16-GAP-02429-operator-view3d.edit_mesh_extrude_move_normal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02429", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02429", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02430", + "gapId": "operator:view3d.edit_mesh_extrude_move_shrink_fatten", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02430-operator-view3d.edit_mesh_extrude_move_shrink_fatten.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02430.py -- tests/files/web/generated/M16-GAP-02430-operator-view3d.edit_mesh_extrude_move_shrink_fatten.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02430", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02430", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02431", + "gapId": "operator:view3d.fly", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02431-operator-view3d.fly.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02431.py -- tests/files/web/generated/M16-GAP-02431-operator-view3d.fly.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02431", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02431", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02432", + "gapId": "operator:view3d.interactive_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02432-operator-view3d.interactive_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02432.py -- tests/files/web/generated/M16-GAP-02432-operator-view3d.interactive_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02432", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02432", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02433", + "gapId": "operator:view3d.localview", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02433-operator-view3d.localview.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02433.py -- tests/files/web/generated/M16-GAP-02433-operator-view3d.localview.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02433", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02433", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02434", + "gapId": "operator:view3d.localview_remove_from", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02434-operator-view3d.localview_remove_from.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02434.py -- tests/files/web/generated/M16-GAP-02434-operator-view3d.localview_remove_from.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02434", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02434", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02435", + "gapId": "operator:view3d.move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02435-operator-view3d.move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02435.py -- tests/files/web/generated/M16-GAP-02435-operator-view3d.move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02435", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02435", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02436", + "gapId": "operator:view3d.navigate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02436-operator-view3d.navigate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02436.py -- tests/files/web/generated/M16-GAP-02436-operator-view3d.navigate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02436", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02436", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02437", + "gapId": "operator:view3d.ndof_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02437-operator-view3d.ndof_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02437.py -- tests/files/web/generated/M16-GAP-02437-operator-view3d.ndof_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02437", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02437", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02438", + "gapId": "operator:view3d.ndof_orbit", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02438-operator-view3d.ndof_orbit.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02438.py -- tests/files/web/generated/M16-GAP-02438-operator-view3d.ndof_orbit.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02438", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02438", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02439", + "gapId": "operator:view3d.ndof_orbit_zoom", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02439-operator-view3d.ndof_orbit_zoom.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02439.py -- tests/files/web/generated/M16-GAP-02439-operator-view3d.ndof_orbit_zoom.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02439", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02439", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02440", + "gapId": "operator:view3d.ndof_pan", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02440-operator-view3d.ndof_pan.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02440.py -- tests/files/web/generated/M16-GAP-02440-operator-view3d.ndof_pan.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02440", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02440", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02441", + "gapId": "operator:view3d.object_as_camera", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02441-operator-view3d.object_as_camera.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02441.py -- tests/files/web/generated/M16-GAP-02441-operator-view3d.object_as_camera.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02441", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02441", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02442", + "gapId": "operator:view3d.object_mode_pie_or_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02442-operator-view3d.object_mode_pie_or_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02442.py -- tests/files/web/generated/M16-GAP-02442-operator-view3d.object_mode_pie_or_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02442", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02442", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02443", + "gapId": "operator:view3d.pastebuffer", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02443-operator-view3d.pastebuffer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02443.py -- tests/files/web/generated/M16-GAP-02443-operator-view3d.pastebuffer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02443", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02443", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02444", + "gapId": "operator:view3d.render_border", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02444-operator-view3d.render_border.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02444.py -- tests/files/web/generated/M16-GAP-02444-operator-view3d.render_border.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02444", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02444", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02445", + "gapId": "operator:view3d.rotate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02445-operator-view3d.rotate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02445.py -- tests/files/web/generated/M16-GAP-02445-operator-view3d.rotate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02445", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02445", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02446", + "gapId": "operator:view3d.ruler_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02446-operator-view3d.ruler_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02446.py -- tests/files/web/generated/M16-GAP-02446-operator-view3d.ruler_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02446", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02446", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02447", + "gapId": "operator:view3d.ruler_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02447-operator-view3d.ruler_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02447.py -- tests/files/web/generated/M16-GAP-02447-operator-view3d.ruler_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02447", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02447", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02448", + "gapId": "operator:view3d.select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02448-operator-view3d.select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02448.py -- tests/files/web/generated/M16-GAP-02448-operator-view3d.select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02448", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02448", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02449", + "gapId": "operator:view3d.select_box", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02449-operator-view3d.select_box.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02449.py -- tests/files/web/generated/M16-GAP-02449-operator-view3d.select_box.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02449", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02449", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02450", + "gapId": "operator:view3d.select_circle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02450-operator-view3d.select_circle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02450.py -- tests/files/web/generated/M16-GAP-02450-operator-view3d.select_circle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02450", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02450", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02451", + "gapId": "operator:view3d.select_lasso", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02451-operator-view3d.select_lasso.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02451.py -- tests/files/web/generated/M16-GAP-02451-operator-view3d.select_lasso.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02451", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02451", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02452", + "gapId": "operator:view3d.select_menu", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02452-operator-view3d.select_menu.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02452.py -- tests/files/web/generated/M16-GAP-02452-operator-view3d.select_menu.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02452", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02452", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02453", + "gapId": "operator:view3d.smoothview", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02453-operator-view3d.smoothview.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02453.py -- tests/files/web/generated/M16-GAP-02453-operator-view3d.smoothview.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02453", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02453", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02454", + "gapId": "operator:view3d.snap_cursor_to_active", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02454-operator-view3d.snap_cursor_to_active.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02454.py -- tests/files/web/generated/M16-GAP-02454-operator-view3d.snap_cursor_to_active.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02454", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02454", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02455", + "gapId": "operator:view3d.snap_cursor_to_center", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02455-operator-view3d.snap_cursor_to_center.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02455.py -- tests/files/web/generated/M16-GAP-02455-operator-view3d.snap_cursor_to_center.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02455", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02455", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02456", + "gapId": "operator:view3d.snap_cursor_to_grid", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02456-operator-view3d.snap_cursor_to_grid.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02456.py -- tests/files/web/generated/M16-GAP-02456-operator-view3d.snap_cursor_to_grid.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02456", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02456", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02457", + "gapId": "operator:view3d.snap_cursor_to_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02457-operator-view3d.snap_cursor_to_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02457.py -- tests/files/web/generated/M16-GAP-02457-operator-view3d.snap_cursor_to_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02457", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02457", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02458", + "gapId": "operator:view3d.snap_selected_to_active", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02458-operator-view3d.snap_selected_to_active.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02458.py -- tests/files/web/generated/M16-GAP-02458-operator-view3d.snap_selected_to_active.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02458", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02458", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02459", + "gapId": "operator:view3d.snap_selected_to_cursor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02459-operator-view3d.snap_selected_to_cursor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02459.py -- tests/files/web/generated/M16-GAP-02459-operator-view3d.snap_selected_to_cursor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02459", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02459", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02460", + "gapId": "operator:view3d.snap_selected_to_grid", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02460-operator-view3d.snap_selected_to_grid.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02460.py -- tests/files/web/generated/M16-GAP-02460-operator-view3d.snap_selected_to_grid.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02460", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02460", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02461", + "gapId": "operator:view3d.toggle_matcap_flip", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02461-operator-view3d.toggle_matcap_flip.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02461.py -- tests/files/web/generated/M16-GAP-02461-operator-view3d.toggle_matcap_flip.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02461", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02461", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02462", + "gapId": "operator:view3d.toggle_shading", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02462-operator-view3d.toggle_shading.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02462.py -- tests/files/web/generated/M16-GAP-02462-operator-view3d.toggle_shading.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02462", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02462", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02463", + "gapId": "operator:view3d.toggle_xray", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02463-operator-view3d.toggle_xray.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02463.py -- tests/files/web/generated/M16-GAP-02463-operator-view3d.toggle_xray.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02463", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02463", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02464", + "gapId": "operator:view3d.transform_gizmo_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02464-operator-view3d.transform_gizmo_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02464.py -- tests/files/web/generated/M16-GAP-02464-operator-view3d.transform_gizmo_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02464", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02464", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02465", + "gapId": "operator:view3d.view_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02465-operator-view3d.view_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02465.py -- tests/files/web/generated/M16-GAP-02465-operator-view3d.view_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02465", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02465", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02466", + "gapId": "operator:view3d.view_axis", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02466-operator-view3d.view_axis.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02466.py -- tests/files/web/generated/M16-GAP-02466-operator-view3d.view_axis.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02466", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02466", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02467", + "gapId": "operator:view3d.view_camera", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02467-operator-view3d.view_camera.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02467.py -- tests/files/web/generated/M16-GAP-02467-operator-view3d.view_camera.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02467", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02467", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02468", + "gapId": "operator:view3d.view_center_camera", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02468-operator-view3d.view_center_camera.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02468.py -- tests/files/web/generated/M16-GAP-02468-operator-view3d.view_center_camera.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02468", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02468", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02469", + "gapId": "operator:view3d.view_center_cursor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02469-operator-view3d.view_center_cursor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02469.py -- tests/files/web/generated/M16-GAP-02469-operator-view3d.view_center_cursor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02469", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02469", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02470", + "gapId": "operator:view3d.view_center_lock", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02470-operator-view3d.view_center_lock.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02470.py -- tests/files/web/generated/M16-GAP-02470-operator-view3d.view_center_lock.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02470", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02470", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02471", + "gapId": "operator:view3d.view_center_pick", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02471-operator-view3d.view_center_pick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02471.py -- tests/files/web/generated/M16-GAP-02471-operator-view3d.view_center_pick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02471", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02471", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02472", + "gapId": "operator:view3d.view_lock_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02472-operator-view3d.view_lock_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02472.py -- tests/files/web/generated/M16-GAP-02472-operator-view3d.view_lock_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02472", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02472", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02473", + "gapId": "operator:view3d.view_lock_to_active", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02473-operator-view3d.view_lock_to_active.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02473.py -- tests/files/web/generated/M16-GAP-02473-operator-view3d.view_lock_to_active.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02473", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02473", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02474", + "gapId": "operator:view3d.view_orbit", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02474-operator-view3d.view_orbit.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02474.py -- tests/files/web/generated/M16-GAP-02474-operator-view3d.view_orbit.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02474", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02474", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02475", + "gapId": "operator:view3d.view_pan", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02475-operator-view3d.view_pan.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02475.py -- tests/files/web/generated/M16-GAP-02475-operator-view3d.view_pan.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02475", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02475", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02476", + "gapId": "operator:view3d.view_persportho", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02476-operator-view3d.view_persportho.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02476.py -- tests/files/web/generated/M16-GAP-02476-operator-view3d.view_persportho.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02476", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02476", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02477", + "gapId": "operator:view3d.view_roll", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02477-operator-view3d.view_roll.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02477.py -- tests/files/web/generated/M16-GAP-02477-operator-view3d.view_roll.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02477", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02477", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02478", + "gapId": "operator:view3d.view_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02478-operator-view3d.view_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02478.py -- tests/files/web/generated/M16-GAP-02478-operator-view3d.view_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02478", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02478", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02479", + "gapId": "operator:view3d.walk", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02479-operator-view3d.walk.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02479.py -- tests/files/web/generated/M16-GAP-02479-operator-view3d.walk.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02479", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02479", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02480", + "gapId": "operator:view3d.zoom", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02480-operator-view3d.zoom.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02480.py -- tests/files/web/generated/M16-GAP-02480-operator-view3d.zoom.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02480", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02480", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02481", + "gapId": "operator:view3d.zoom_border", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02481-operator-view3d.zoom_border.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02481.py -- tests/files/web/generated/M16-GAP-02481-operator-view3d.zoom_border.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02481", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02481", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02482", + "gapId": "operator:view3d.zoom_camera_1_to_1", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02482-operator-view3d.zoom_camera_1_to_1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02482.py -- tests/files/web/generated/M16-GAP-02482-operator-view3d.zoom_camera_1_to_1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02482", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02482", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02483", + "gapId": "operator:wm.append", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02483-operator-wm.append.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02483.py -- tests/files/web/generated/M16-GAP-02483-operator-wm.append.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02483", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02483", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02484", + "gapId": "operator:wm.batch_rename", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02484-operator-wm.batch_rename.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02484.py -- tests/files/web/generated/M16-GAP-02484-operator-wm.batch_rename.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02484", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02484", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02485", + "gapId": "operator:wm.blend_strings_utf8_validate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02485-operator-wm.blend_strings_utf8_validate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02485.py -- tests/files/web/generated/M16-GAP-02485-operator-wm.blend_strings_utf8_validate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02485", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02485", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02486", + "gapId": "operator:wm.call_asset_shelf_popover", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02486-operator-wm.call_asset_shelf_popover.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02486.py -- tests/files/web/generated/M16-GAP-02486-operator-wm.call_asset_shelf_popover.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02486", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02486", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02487", + "gapId": "operator:wm.call_menu", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02487-operator-wm.call_menu.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02487.py -- tests/files/web/generated/M16-GAP-02487-operator-wm.call_menu.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02487", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02487", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02488", + "gapId": "operator:wm.call_menu_pie", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02488-operator-wm.call_menu_pie.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02488.py -- tests/files/web/generated/M16-GAP-02488-operator-wm.call_menu_pie.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02488", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02488", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02489", + "gapId": "operator:wm.call_panel", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02489-operator-wm.call_panel.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02489.py -- tests/files/web/generated/M16-GAP-02489-operator-wm.call_panel.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02489", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02489", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02490", + "gapId": "operator:wm.clear_recent_files", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02490-operator-wm.clear_recent_files.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02490.py -- tests/files/web/generated/M16-GAP-02490-operator-wm.clear_recent_files.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02490", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02490", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02491", + "gapId": "operator:wm.collection_export_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02491-operator-wm.collection_export_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02491.py -- tests/files/web/generated/M16-GAP-02491-operator-wm.collection_export_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02491", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02491", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02492", + "gapId": "operator:wm.context_collection_boolean_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02492-operator-wm.context_collection_boolean_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02492.py -- tests/files/web/generated/M16-GAP-02492-operator-wm.context_collection_boolean_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02492", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02492", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02493", + "gapId": "operator:wm.context_cycle_array", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02493-operator-wm.context_cycle_array.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02493.py -- tests/files/web/generated/M16-GAP-02493-operator-wm.context_cycle_array.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02493", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02493", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02494", + "gapId": "operator:wm.context_cycle_enum", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02494-operator-wm.context_cycle_enum.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02494.py -- tests/files/web/generated/M16-GAP-02494-operator-wm.context_cycle_enum.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02494", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02494", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02495", + "gapId": "operator:wm.context_cycle_int", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02495-operator-wm.context_cycle_int.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02495.py -- tests/files/web/generated/M16-GAP-02495-operator-wm.context_cycle_int.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02495", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02495", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02496", + "gapId": "operator:wm.context_menu_enum", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02496-operator-wm.context_menu_enum.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02496.py -- tests/files/web/generated/M16-GAP-02496-operator-wm.context_menu_enum.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02496", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02496", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02497", + "gapId": "operator:wm.context_modal_mouse", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02497-operator-wm.context_modal_mouse.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02497.py -- tests/files/web/generated/M16-GAP-02497-operator-wm.context_modal_mouse.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02497", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02497", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02498", + "gapId": "operator:wm.context_pie_enum", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02498-operator-wm.context_pie_enum.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02498.py -- tests/files/web/generated/M16-GAP-02498-operator-wm.context_pie_enum.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02498", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02498", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02499", + "gapId": "operator:wm.context_scale_float", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02499-operator-wm.context_scale_float.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02499.py -- tests/files/web/generated/M16-GAP-02499-operator-wm.context_scale_float.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02499", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02499", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02500", + "gapId": "operator:wm.context_scale_int", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02500-operator-wm.context_scale_int.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02500.py -- tests/files/web/generated/M16-GAP-02500-operator-wm.context_scale_int.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02500", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02500", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02501", + "gapId": "operator:wm.context_set_boolean", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02501-operator-wm.context_set_boolean.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02501.py -- tests/files/web/generated/M16-GAP-02501-operator-wm.context_set_boolean.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02501", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02501", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02502", + "gapId": "operator:wm.context_set_enum", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02502-operator-wm.context_set_enum.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02502.py -- tests/files/web/generated/M16-GAP-02502-operator-wm.context_set_enum.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02502", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02502", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02503", + "gapId": "operator:wm.context_set_float", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02503-operator-wm.context_set_float.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02503.py -- tests/files/web/generated/M16-GAP-02503-operator-wm.context_set_float.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02503", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02503", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02504", + "gapId": "operator:wm.context_set_id", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02504-operator-wm.context_set_id.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02504.py -- tests/files/web/generated/M16-GAP-02504-operator-wm.context_set_id.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02504", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02504", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02505", + "gapId": "operator:wm.context_set_int", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02505-operator-wm.context_set_int.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02505.py -- tests/files/web/generated/M16-GAP-02505-operator-wm.context_set_int.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02505", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02505", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02506", + "gapId": "operator:wm.context_set_string", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02506-operator-wm.context_set_string.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02506.py -- tests/files/web/generated/M16-GAP-02506-operator-wm.context_set_string.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02506", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02506", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02507", + "gapId": "operator:wm.context_set_value", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02507-operator-wm.context_set_value.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02507.py -- tests/files/web/generated/M16-GAP-02507-operator-wm.context_set_value.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02507", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02507", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02508", + "gapId": "operator:wm.context_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02508-operator-wm.context_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02508.py -- tests/files/web/generated/M16-GAP-02508-operator-wm.context_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02508", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02508", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02509", + "gapId": "operator:wm.context_toggle_enum", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02509-operator-wm.context_toggle_enum.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02509.py -- tests/files/web/generated/M16-GAP-02509-operator-wm.context_toggle_enum.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02509", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02509", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02510", + "gapId": "operator:wm.debug_menu", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02510-operator-wm.debug_menu.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02510.py -- tests/files/web/generated/M16-GAP-02510-operator-wm.debug_menu.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02510", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02510", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02511", + "gapId": "operator:wm.doc_view", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02511-operator-wm.doc_view.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02511.py -- tests/files/web/generated/M16-GAP-02511-operator-wm.doc_view.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02511", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02511", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02512", + "gapId": "operator:wm.doc_view_manual", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02512-operator-wm.doc_view_manual.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02512.py -- tests/files/web/generated/M16-GAP-02512-operator-wm.doc_view_manual.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02512", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02512", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02513", + "gapId": "operator:wm.doc_view_manual_ui_context", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02513-operator-wm.doc_view_manual_ui_context.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02513.py -- tests/files/web/generated/M16-GAP-02513-operator-wm.doc_view_manual_ui_context.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02513", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02513", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02514", + "gapId": "operator:wm.drop_blend_file", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02514-operator-wm.drop_blend_file.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02514.py -- tests/files/web/generated/M16-GAP-02514-operator-wm.drop_blend_file.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02514", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02514", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02515", + "gapId": "operator:wm.drop_import_file", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02515-operator-wm.drop_import_file.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02515.py -- tests/files/web/generated/M16-GAP-02515-operator-wm.drop_import_file.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02515", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02515", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02516", + "gapId": "operator:wm.fbx_import", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02516-operator-wm.fbx_import.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02516.py -- tests/files/web/generated/M16-GAP-02516-operator-wm.fbx_import.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02516", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02516", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02517", + "gapId": "operator:wm.grease_pencil_export_svg", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02517-operator-wm.grease_pencil_export_svg.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02517.py -- tests/files/web/generated/M16-GAP-02517-operator-wm.grease_pencil_export_svg.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02517", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02517", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02518", + "gapId": "operator:wm.grease_pencil_import_svg", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02518-operator-wm.grease_pencil_import_svg.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02518.py -- tests/files/web/generated/M16-GAP-02518-operator-wm.grease_pencil_import_svg.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02518", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02518", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02519", + "gapId": "operator:wm.id_linked_relocate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02519-operator-wm.id_linked_relocate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02519.py -- tests/files/web/generated/M16-GAP-02519-operator-wm.id_linked_relocate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02519", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02519", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02520", + "gapId": "operator:wm.interface_theme_preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02520-operator-wm.interface_theme_preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02520.py -- tests/files/web/generated/M16-GAP-02520-operator-wm.interface_theme_preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02520", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02520", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02521", + "gapId": "operator:wm.interface_theme_preset_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02521-operator-wm.interface_theme_preset_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02521.py -- tests/files/web/generated/M16-GAP-02521-operator-wm.interface_theme_preset_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02521", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02521", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02522", + "gapId": "operator:wm.interface_theme_preset_save", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02522-operator-wm.interface_theme_preset_save.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02522.py -- tests/files/web/generated/M16-GAP-02522-operator-wm.interface_theme_preset_save.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02522", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02522", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02523", + "gapId": "operator:wm.keyconfig_preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02523-operator-wm.keyconfig_preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02523.py -- tests/files/web/generated/M16-GAP-02523-operator-wm.keyconfig_preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02523", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02523", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02524", + "gapId": "operator:wm.keyconfig_preset_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02524-operator-wm.keyconfig_preset_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02524.py -- tests/files/web/generated/M16-GAP-02524-operator-wm.keyconfig_preset_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02524", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02524", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02525", + "gapId": "operator:wm.lib_reload", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02525-operator-wm.lib_reload.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02525.py -- tests/files/web/generated/M16-GAP-02525-operator-wm.lib_reload.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02525", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02525", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02526", + "gapId": "operator:wm.lib_relocate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02526-operator-wm.lib_relocate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02526.py -- tests/files/web/generated/M16-GAP-02526-operator-wm.lib_relocate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02526", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02526", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02527", + "gapId": "operator:wm.link", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02527-operator-wm.link.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02527.py -- tests/files/web/generated/M16-GAP-02527-operator-wm.link.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02527", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02527", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02528", + "gapId": "operator:wm.memory_statistics", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02528-operator-wm.memory_statistics.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02528.py -- tests/files/web/generated/M16-GAP-02528-operator-wm.memory_statistics.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02528", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02528", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02529", + "gapId": "operator:wm.obj_export", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02529-operator-wm.obj_export.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02529.py -- tests/files/web/generated/M16-GAP-02529-operator-wm.obj_export.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02529", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02529", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02530", + "gapId": "operator:wm.obj_import", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02530-operator-wm.obj_import.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02530.py -- tests/files/web/generated/M16-GAP-02530-operator-wm.obj_import.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02530", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02530", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02531", + "gapId": "operator:wm.open_mainfile", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02531-operator-wm.open_mainfile.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02531.py -- tests/files/web/generated/M16-GAP-02531-operator-wm.open_mainfile.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02531", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02531", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02532", + "gapId": "operator:wm.operator_cheat_sheet", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02532-operator-wm.operator_cheat_sheet.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02532.py -- tests/files/web/generated/M16-GAP-02532-operator-wm.operator_cheat_sheet.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02532", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02532", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02533", + "gapId": "operator:wm.operator_defaults", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02533-operator-wm.operator_defaults.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02533.py -- tests/files/web/generated/M16-GAP-02533-operator-wm.operator_defaults.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02533", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02533", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02534", + "gapId": "operator:wm.operator_pie_enum", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02534-operator-wm.operator_pie_enum.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02534.py -- tests/files/web/generated/M16-GAP-02534-operator-wm.operator_pie_enum.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02534", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02534", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02535", + "gapId": "operator:wm.operator_preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02535-operator-wm.operator_preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02535.py -- tests/files/web/generated/M16-GAP-02535-operator-wm.operator_preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02535", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02535", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02536", + "gapId": "operator:wm.operator_presets_cleanup", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02536-operator-wm.operator_presets_cleanup.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02536.py -- tests/files/web/generated/M16-GAP-02536-operator-wm.operator_presets_cleanup.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02536", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02536", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02537", + "gapId": "operator:wm.owner_disable", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02537-operator-wm.owner_disable.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02537.py -- tests/files/web/generated/M16-GAP-02537-operator-wm.owner_disable.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02537", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02537", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02538", + "gapId": "operator:wm.owner_enable", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02538-operator-wm.owner_enable.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02538.py -- tests/files/web/generated/M16-GAP-02538-operator-wm.owner_enable.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02538", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02538", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02539", + "gapId": "operator:wm.path_open", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02539-operator-wm.path_open.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02539.py -- tests/files/web/generated/M16-GAP-02539-operator-wm.path_open.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02539", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02539", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02540", + "gapId": "operator:wm.ply_export", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02540-operator-wm.ply_export.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02540.py -- tests/files/web/generated/M16-GAP-02540-operator-wm.ply_export.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02540", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02540", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02541", + "gapId": "operator:wm.ply_import", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02541-operator-wm.ply_import.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02541.py -- tests/files/web/generated/M16-GAP-02541-operator-wm.ply_import.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02541", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02541", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02542", + "gapId": "operator:wm.previews_batch_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02542-operator-wm.previews_batch_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02542.py -- tests/files/web/generated/M16-GAP-02542-operator-wm.previews_batch_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02542", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02542", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02543", + "gapId": "operator:wm.previews_batch_generate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02543-operator-wm.previews_batch_generate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02543.py -- tests/files/web/generated/M16-GAP-02543-operator-wm.previews_batch_generate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02543", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02543", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02544", + "gapId": "operator:wm.previews_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02544-operator-wm.previews_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02544.py -- tests/files/web/generated/M16-GAP-02544-operator-wm.previews_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02544", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02544", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02545", + "gapId": "operator:wm.previews_ensure", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02545-operator-wm.previews_ensure.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02545.py -- tests/files/web/generated/M16-GAP-02545-operator-wm.previews_ensure.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02545", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02545", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02546", + "gapId": "operator:wm.properties_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02546-operator-wm.properties_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02546.py -- tests/files/web/generated/M16-GAP-02546-operator-wm.properties_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02546", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02546", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02547", + "gapId": "operator:wm.properties_context_change", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02547-operator-wm.properties_context_change.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02547.py -- tests/files/web/generated/M16-GAP-02547-operator-wm.properties_context_change.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02547", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02547", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02548", + "gapId": "operator:wm.properties_edit", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02548-operator-wm.properties_edit.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02548.py -- tests/files/web/generated/M16-GAP-02548-operator-wm.properties_edit.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02548", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02548", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02549", + "gapId": "operator:wm.properties_edit_value", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02549-operator-wm.properties_edit_value.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02549.py -- tests/files/web/generated/M16-GAP-02549-operator-wm.properties_edit_value.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02549", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02549", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02550", + "gapId": "operator:wm.properties_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02550-operator-wm.properties_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02550.py -- tests/files/web/generated/M16-GAP-02550-operator-wm.properties_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02550", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02550", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02551", + "gapId": "operator:wm.quit_blender", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02551-operator-wm.quit_blender.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02551.py -- tests/files/web/generated/M16-GAP-02551-operator-wm.quit_blender.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02551", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02551", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02552", + "gapId": "operator:wm.radial_control", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02552-operator-wm.radial_control.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02552.py -- tests/files/web/generated/M16-GAP-02552-operator-wm.radial_control.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02552", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02552", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02553", + "gapId": "operator:wm.read_factory_settings", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02553-operator-wm.read_factory_settings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02553.py -- tests/files/web/generated/M16-GAP-02553-operator-wm.read_factory_settings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02553", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02553", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02554", + "gapId": "operator:wm.read_factory_userpref", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02554-operator-wm.read_factory_userpref.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02554.py -- tests/files/web/generated/M16-GAP-02554-operator-wm.read_factory_userpref.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02554", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02554", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02555", + "gapId": "operator:wm.read_history", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02555-operator-wm.read_history.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02555.py -- tests/files/web/generated/M16-GAP-02555-operator-wm.read_history.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02555", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02555", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02556", + "gapId": "operator:wm.read_homefile", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02556-operator-wm.read_homefile.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02556.py -- tests/files/web/generated/M16-GAP-02556-operator-wm.read_homefile.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02556", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02556", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02557", + "gapId": "operator:wm.read_userpref", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02557-operator-wm.read_userpref.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02557.py -- tests/files/web/generated/M16-GAP-02557-operator-wm.read_userpref.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02557", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02557", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02558", + "gapId": "operator:wm.recover_auto_save", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02558-operator-wm.recover_auto_save.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02558.py -- tests/files/web/generated/M16-GAP-02558-operator-wm.recover_auto_save.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02558", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02558", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02559", + "gapId": "operator:wm.recover_last_session", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02559-operator-wm.recover_last_session.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02559.py -- tests/files/web/generated/M16-GAP-02559-operator-wm.recover_last_session.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02559", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02559", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02560", + "gapId": "operator:wm.redraw_timer", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02560-operator-wm.redraw_timer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02560.py -- tests/files/web/generated/M16-GAP-02560-operator-wm.redraw_timer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02560", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02560", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02561", + "gapId": "operator:wm.revert_mainfile", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02561-operator-wm.revert_mainfile.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02561.py -- tests/files/web/generated/M16-GAP-02561-operator-wm.revert_mainfile.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02561", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02561", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02562", + "gapId": "operator:wm.save_as_mainfile", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02562-operator-wm.save_as_mainfile.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02562.py -- tests/files/web/generated/M16-GAP-02562-operator-wm.save_as_mainfile.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02562", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02562", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02563", + "gapId": "operator:wm.save_auto_save", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02563-operator-wm.save_auto_save.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02563.py -- tests/files/web/generated/M16-GAP-02563-operator-wm.save_auto_save.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02563", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02563", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02564", + "gapId": "operator:wm.save_homefile", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02564-operator-wm.save_homefile.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02564.py -- tests/files/web/generated/M16-GAP-02564-operator-wm.save_homefile.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02564", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02564", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02565", + "gapId": "operator:wm.save_mainfile", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02565-operator-wm.save_mainfile.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02565.py -- tests/files/web/generated/M16-GAP-02565-operator-wm.save_mainfile.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02565", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02565", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02566", + "gapId": "operator:wm.save_userpref", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02566-operator-wm.save_userpref.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02566.py -- tests/files/web/generated/M16-GAP-02566-operator-wm.save_userpref.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02566", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02566", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02567", + "gapId": "operator:wm.search_menu", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02567-operator-wm.search_menu.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02567.py -- tests/files/web/generated/M16-GAP-02567-operator-wm.search_menu.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02567", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02567", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02568", + "gapId": "operator:wm.search_operator", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02568-operator-wm.search_operator.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02568.py -- tests/files/web/generated/M16-GAP-02568-operator-wm.search_operator.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02568", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02568", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02569", + "gapId": "operator:wm.search_single_menu", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02569-operator-wm.search_single_menu.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02569.py -- tests/files/web/generated/M16-GAP-02569-operator-wm.search_single_menu.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02569", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02569", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02570", + "gapId": "operator:wm.set_stereo_3d", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02570-operator-wm.set_stereo_3d.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02570.py -- tests/files/web/generated/M16-GAP-02570-operator-wm.set_stereo_3d.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02570", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02570", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02571", + "gapId": "operator:wm.set_working_color_space", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02571-operator-wm.set_working_color_space.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02571.py -- tests/files/web/generated/M16-GAP-02571-operator-wm.set_working_color_space.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02571", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02571", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02572", + "gapId": "operator:wm.splash", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02572-operator-wm.splash.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02572.py -- tests/files/web/generated/M16-GAP-02572-operator-wm.splash.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02572", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02572", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02573", + "gapId": "operator:wm.splash_about", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02573-operator-wm.splash_about.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02573.py -- tests/files/web/generated/M16-GAP-02573-operator-wm.splash_about.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02573", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02573", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02574", + "gapId": "operator:wm.stl_export", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02574-operator-wm.stl_export.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02574.py -- tests/files/web/generated/M16-GAP-02574-operator-wm.stl_export.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02574", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02574", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02575", + "gapId": "operator:wm.stl_import", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02575-operator-wm.stl_import.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02575.py -- tests/files/web/generated/M16-GAP-02575-operator-wm.stl_import.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02575", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02575", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02576", + "gapId": "operator:wm.sysinfo", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02576-operator-wm.sysinfo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02576.py -- tests/files/web/generated/M16-GAP-02576-operator-wm.sysinfo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02576", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02576", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02577", + "gapId": "operator:wm.tool_set_by_brush_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02577-operator-wm.tool_set_by_brush_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02577.py -- tests/files/web/generated/M16-GAP-02577-operator-wm.tool_set_by_brush_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02577", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02577", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02578", + "gapId": "operator:wm.tool_set_by_id", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02578-operator-wm.tool_set_by_id.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02578.py -- tests/files/web/generated/M16-GAP-02578-operator-wm.tool_set_by_id.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02578", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02578", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02579", + "gapId": "operator:wm.tool_set_by_index", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02579-operator-wm.tool_set_by_index.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02579.py -- tests/files/web/generated/M16-GAP-02579-operator-wm.tool_set_by_index.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02579", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02579", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02580", + "gapId": "operator:wm.toolbar", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02580-operator-wm.toolbar.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02580.py -- tests/files/web/generated/M16-GAP-02580-operator-wm.toolbar.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02580", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02580", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02581", + "gapId": "operator:wm.toolbar_fallback_pie", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02581-operator-wm.toolbar_fallback_pie.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02581.py -- tests/files/web/generated/M16-GAP-02581-operator-wm.toolbar_fallback_pie.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02581", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02581", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02582", + "gapId": "operator:wm.toolbar_prompt", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02582-operator-wm.toolbar_prompt.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02582.py -- tests/files/web/generated/M16-GAP-02582-operator-wm.toolbar_prompt.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02582", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02582", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02583", + "gapId": "operator:wm.url_open", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02583-operator-wm.url_open.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02583.py -- tests/files/web/generated/M16-GAP-02583-operator-wm.url_open.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02583", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02583", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02584", + "gapId": "operator:wm.url_open_preset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02584-operator-wm.url_open_preset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02584.py -- tests/files/web/generated/M16-GAP-02584-operator-wm.url_open_preset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02584", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02584", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02585", + "gapId": "operator:wm.window_close", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02585-operator-wm.window_close.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02585.py -- tests/files/web/generated/M16-GAP-02585-operator-wm.window_close.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02585", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02585", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02586", + "gapId": "operator:wm.window_fullscreen_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02586-operator-wm.window_fullscreen_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02586.py -- tests/files/web/generated/M16-GAP-02586-operator-wm.window_fullscreen_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02586", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02586", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02587", + "gapId": "operator:wm.window_new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02587-operator-wm.window_new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02587.py -- tests/files/web/generated/M16-GAP-02587-operator-wm.window_new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02587", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02587", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02588", + "gapId": "operator:wm.window_new_main", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02588-operator-wm.window_new_main.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02588.py -- tests/files/web/generated/M16-GAP-02588-operator-wm.window_new_main.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02588", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02588", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02589", + "gapId": "operator:workspace.add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02589-operator-workspace.add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02589.py -- tests/files/web/generated/M16-GAP-02589-operator-workspace.add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02589", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02589", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02590", + "gapId": "operator:workspace.append_activate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02590-operator-workspace.append_activate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02590.py -- tests/files/web/generated/M16-GAP-02590-operator-workspace.append_activate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02590", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02590", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02591", + "gapId": "operator:workspace.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02591-operator-workspace.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02591.py -- tests/files/web/generated/M16-GAP-02591-operator-workspace.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02591", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02591", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02592", + "gapId": "operator:workspace.delete_all_others", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02592-operator-workspace.delete_all_others.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02592.py -- tests/files/web/generated/M16-GAP-02592-operator-workspace.delete_all_others.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02592", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02592", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02593", + "gapId": "operator:workspace.duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02593-operator-workspace.duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02593.py -- tests/files/web/generated/M16-GAP-02593-operator-workspace.duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02593", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02593", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02594", + "gapId": "operator:workspace.reorder_to_back", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02594-operator-workspace.reorder_to_back.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02594.py -- tests/files/web/generated/M16-GAP-02594-operator-workspace.reorder_to_back.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02594", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02594", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02595", + "gapId": "operator:workspace.reorder_to_front", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02595-operator-workspace.reorder_to_front.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02595.py -- tests/files/web/generated/M16-GAP-02595-operator-workspace.reorder_to_front.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02595", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02595", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02596", + "gapId": "operator:workspace.scene_pin_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02596-operator-workspace.scene_pin_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02596.py -- tests/files/web/generated/M16-GAP-02596-operator-workspace.scene_pin_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02596", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02596", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02597", + "gapId": "operator:world.convert_volume_to_mesh", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02597-operator-world.convert_volume_to_mesh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02597.py -- tests/files/web/generated/M16-GAP-02597-operator-world.convert_volume_to_mesh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02597", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02597", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02598", + "gapId": "operator:world.new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02598-operator-world.new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02598.py -- tests/files/web/generated/M16-GAP-02598-operator-world.new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02598", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02598", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02599", + "gapId": "rna:Main:BlendData", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02599-rna-Main-BlendData.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02599.py -- tests/files/web/generated/M16-GAP-02599-rna-Main-BlendData.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02599", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02599", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02600", + "gapId": "rna:Main:BlendDataActions", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02600-rna-Main-BlendDataActions.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02600.py -- tests/files/web/generated/M16-GAP-02600-rna-Main-BlendDataActions.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02600", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02600", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02601", + "gapId": "rna:Main:BlendDataAnnotations", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02601-rna-Main-BlendDataAnnotations.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02601.py -- tests/files/web/generated/M16-GAP-02601-rna-Main-BlendDataAnnotations.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02601", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02601", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02602", + "gapId": "rna:Main:BlendDataArmatures", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02602-rna-Main-BlendDataArmatures.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02602.py -- tests/files/web/generated/M16-GAP-02602-rna-Main-BlendDataArmatures.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02602", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02602", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02603", + "gapId": "rna:Main:BlendDataBrushes", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02603-rna-Main-BlendDataBrushes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02603.py -- tests/files/web/generated/M16-GAP-02603-rna-Main-BlendDataBrushes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02603", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02603", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02604", + "gapId": "rna:Main:BlendDataCacheFiles", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02604-rna-Main-BlendDataCacheFiles.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02604.py -- tests/files/web/generated/M16-GAP-02604-rna-Main-BlendDataCacheFiles.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02604", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02604", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02605", + "gapId": "rna:Main:BlendDataCameras", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02605-rna-Main-BlendDataCameras.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02605.py -- tests/files/web/generated/M16-GAP-02605-rna-Main-BlendDataCameras.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02605", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02605", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02606", + "gapId": "rna:Main:BlendDataCollections", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02606-rna-Main-BlendDataCollections.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02606.py -- tests/files/web/generated/M16-GAP-02606-rna-Main-BlendDataCollections.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02606", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02606", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02607", + "gapId": "rna:Main:BlendDataCurves", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02607-rna-Main-BlendDataCurves.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02607.py -- tests/files/web/generated/M16-GAP-02607-rna-Main-BlendDataCurves.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02607", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02607", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02608", + "gapId": "rna:Main:BlendDataFonts", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02608-rna-Main-BlendDataFonts.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02608.py -- tests/files/web/generated/M16-GAP-02608-rna-Main-BlendDataFonts.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02608", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02608", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02609", + "gapId": "rna:Main:BlendDataGreasePencilsV3", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02609-rna-Main-BlendDataGreasePencilsV3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02609.py -- tests/files/web/generated/M16-GAP-02609-rna-Main-BlendDataGreasePencilsV3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02609", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02609", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02610", + "gapId": "rna:Main:BlendDataHairCurves", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02610-rna-Main-BlendDataHairCurves.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02610.py -- tests/files/web/generated/M16-GAP-02610-rna-Main-BlendDataHairCurves.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02610", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02610", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02611", + "gapId": "rna:Main:BlendDataImages", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02611-rna-Main-BlendDataImages.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02611.py -- tests/files/web/generated/M16-GAP-02611-rna-Main-BlendDataImages.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02611", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02611", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02612", + "gapId": "rna:Main:BlendDataLattices", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02612-rna-Main-BlendDataLattices.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02612.py -- tests/files/web/generated/M16-GAP-02612-rna-Main-BlendDataLattices.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02612", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02612", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02613", + "gapId": "rna:Main:BlendDataLibraries", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02613-rna-Main-BlendDataLibraries.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02613.py -- tests/files/web/generated/M16-GAP-02613-rna-Main-BlendDataLibraries.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02613", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02613", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02614", + "gapId": "rna:Main:BlendDataLights", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02614-rna-Main-BlendDataLights.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02614.py -- tests/files/web/generated/M16-GAP-02614-rna-Main-BlendDataLights.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02614", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02614", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02615", + "gapId": "rna:Main:BlendDataLineStyles", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02615-rna-Main-BlendDataLineStyles.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02615.py -- tests/files/web/generated/M16-GAP-02615-rna-Main-BlendDataLineStyles.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02615", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02615", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02616", + "gapId": "rna:Main:BlendDataMasks", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02616-rna-Main-BlendDataMasks.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02616.py -- tests/files/web/generated/M16-GAP-02616-rna-Main-BlendDataMasks.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02616", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02616", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02617", + "gapId": "rna:Main:BlendDataMaterials", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02617-rna-Main-BlendDataMaterials.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02617.py -- tests/files/web/generated/M16-GAP-02617-rna-Main-BlendDataMaterials.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02617", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02617", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02618", + "gapId": "rna:Main:BlendDataMeshes", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02618-rna-Main-BlendDataMeshes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02618.py -- tests/files/web/generated/M16-GAP-02618-rna-Main-BlendDataMeshes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02618", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02618", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02619", + "gapId": "rna:Main:BlendDataMetaBalls", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02619-rna-Main-BlendDataMetaBalls.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02619.py -- tests/files/web/generated/M16-GAP-02619-rna-Main-BlendDataMetaBalls.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02619", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02619", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02620", + "gapId": "rna:Main:BlendDataMovieClips", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02620-rna-Main-BlendDataMovieClips.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02620.py -- tests/files/web/generated/M16-GAP-02620-rna-Main-BlendDataMovieClips.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02620", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02620", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02621", + "gapId": "rna:Main:BlendDataNodeTrees", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02621-rna-Main-BlendDataNodeTrees.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02621.py -- tests/files/web/generated/M16-GAP-02621-rna-Main-BlendDataNodeTrees.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02621", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02621", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02622", + "gapId": "rna:Main:BlendDataObjects", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02622-rna-Main-BlendDataObjects.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02622.py -- tests/files/web/generated/M16-GAP-02622-rna-Main-BlendDataObjects.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02622", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02622", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02623", + "gapId": "rna:Main:BlendDataPaintCurves", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02623-rna-Main-BlendDataPaintCurves.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02623.py -- tests/files/web/generated/M16-GAP-02623-rna-Main-BlendDataPaintCurves.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02623", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02623", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02624", + "gapId": "rna:Main:BlendDataPalettes", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02624-rna-Main-BlendDataPalettes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02624.py -- tests/files/web/generated/M16-GAP-02624-rna-Main-BlendDataPalettes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02624", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02624", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02625", + "gapId": "rna:Main:BlendDataParticles", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02625-rna-Main-BlendDataParticles.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02625.py -- tests/files/web/generated/M16-GAP-02625-rna-Main-BlendDataParticles.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02625", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02625", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02626", + "gapId": "rna:Main:BlendDataPointClouds", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02626-rna-Main-BlendDataPointClouds.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02626.py -- tests/files/web/generated/M16-GAP-02626-rna-Main-BlendDataPointClouds.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02626", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02626", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02627", + "gapId": "rna:Main:BlendDataProbes", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02627-rna-Main-BlendDataProbes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02627.py -- tests/files/web/generated/M16-GAP-02627-rna-Main-BlendDataProbes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02627", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02627", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02628", + "gapId": "rna:Main:BlendDataScenes", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02628-rna-Main-BlendDataScenes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02628.py -- tests/files/web/generated/M16-GAP-02628-rna-Main-BlendDataScenes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02628", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02628", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02629", + "gapId": "rna:Main:BlendDataScreens", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02629-rna-Main-BlendDataScreens.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02629.py -- tests/files/web/generated/M16-GAP-02629-rna-Main-BlendDataScreens.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02629", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02629", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02630", + "gapId": "rna:Main:BlendDataSounds", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02630-rna-Main-BlendDataSounds.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02630.py -- tests/files/web/generated/M16-GAP-02630-rna-Main-BlendDataSounds.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02630", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02630", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02631", + "gapId": "rna:Main:BlendDataSpeakers", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02631-rna-Main-BlendDataSpeakers.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02631.py -- tests/files/web/generated/M16-GAP-02631-rna-Main-BlendDataSpeakers.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02631", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02631", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02632", + "gapId": "rna:Main:BlendDataTexts", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02632-rna-Main-BlendDataTexts.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02632.py -- tests/files/web/generated/M16-GAP-02632-rna-Main-BlendDataTexts.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02632", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02632", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02633", + "gapId": "rna:Main:BlendDataTextures", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02633-rna-Main-BlendDataTextures.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02633.py -- tests/files/web/generated/M16-GAP-02633-rna-Main-BlendDataTextures.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02633", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02633", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02634", + "gapId": "rna:Main:BlendDataVolumes", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02634-rna-Main-BlendDataVolumes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02634.py -- tests/files/web/generated/M16-GAP-02634-rna-Main-BlendDataVolumes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02634", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02634", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02635", + "gapId": "rna:Main:BlendDataWindowManagers", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02635-rna-Main-BlendDataWindowManagers.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02635.py -- tests/files/web/generated/M16-GAP-02635-rna-Main-BlendDataWindowManagers.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02635", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02635", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02636", + "gapId": "rna:Main:BlendDataWorkSpaces", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02636-rna-Main-BlendDataWorkSpaces.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02636.py -- tests/files/web/generated/M16-GAP-02636-rna-Main-BlendDataWorkSpaces.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02636", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02636", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02637", + "gapId": "rna:Main:BlendDataWorlds", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02637-rna-Main-BlendDataWorlds.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02637.py -- tests/files/web/generated/M16-GAP-02637-rna-Main-BlendDataWorlds.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02637", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02637", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02638", + "gapId": "rna:Mesh:Attribute", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02638-rna-Mesh-Attribute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02638.py -- tests/files/web/generated/M16-GAP-02638-rna-Mesh-Attribute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02638", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02638", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02639", + "gapId": "rna:Mesh:AttributeGroupMesh", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02639-rna-Mesh-AttributeGroupMesh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02639.py -- tests/files/web/generated/M16-GAP-02639-rna-Mesh-AttributeGroupMesh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02639", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02639", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02640", + "gapId": "rna:Mesh:BoolAttribute", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02640-rna-Mesh-BoolAttribute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02640.py -- tests/files/web/generated/M16-GAP-02640-rna-Mesh-BoolAttribute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02640", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02640", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02641", + "gapId": "rna:Mesh:ByteColorAttribute", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02641-rna-Mesh-ByteColorAttribute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02641.py -- tests/files/web/generated/M16-GAP-02641-rna-Mesh-ByteColorAttribute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02641", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02641", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02642", + "gapId": "rna:Mesh:FloatAttribute", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02642-rna-Mesh-FloatAttribute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02642.py -- tests/files/web/generated/M16-GAP-02642-rna-Mesh-FloatAttribute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02642", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02642", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02643", + "gapId": "rna:Mesh:IntAttribute", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02643-rna-Mesh-IntAttribute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02643.py -- tests/files/web/generated/M16-GAP-02643-rna-Mesh-IntAttribute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02643", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02643", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02644", + "gapId": "rna:Mesh:Mesh", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02644-rna-Mesh-Mesh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02644.py -- tests/files/web/generated/M16-GAP-02644-rna-Mesh-Mesh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02644", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02644", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02645", + "gapId": "rna:Mesh:MeshAutomaskingSettings", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02645-rna-Mesh-MeshAutomaskingSettings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02645.py -- tests/files/web/generated/M16-GAP-02645-rna-Mesh-MeshAutomaskingSettings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02645", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02645", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02646", + "gapId": "rna:Mesh:MeshCacheModifier", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02646-rna-Mesh-MeshCacheModifier.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02646.py -- tests/files/web/generated/M16-GAP-02646-rna-Mesh-MeshCacheModifier.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02646", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02646", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02647", + "gapId": "rna:Mesh:MeshDeformModifier", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02647-rna-Mesh-MeshDeformModifier.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02647.py -- tests/files/web/generated/M16-GAP-02647-rna-Mesh-MeshDeformModifier.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02647", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02647", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02648", + "gapId": "rna:Mesh:MeshEdge", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02648-rna-Mesh-MeshEdge.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02648.py -- tests/files/web/generated/M16-GAP-02648-rna-Mesh-MeshEdge.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02648", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02648", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02649", + "gapId": "rna:Mesh:MeshEdges", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02649-rna-Mesh-MeshEdges.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02649.py -- tests/files/web/generated/M16-GAP-02649-rna-Mesh-MeshEdges.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02649", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02649", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02650", + "gapId": "rna:Mesh:MeshLoop", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02650-rna-Mesh-MeshLoop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02650.py -- tests/files/web/generated/M16-GAP-02650-rna-Mesh-MeshLoop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02650", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02650", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02651", + "gapId": "rna:Mesh:MeshLoopColor", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02651-rna-Mesh-MeshLoopColor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02651.py -- tests/files/web/generated/M16-GAP-02651-rna-Mesh-MeshLoopColor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02651", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02651", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02652", + "gapId": "rna:Mesh:MeshLoopColorLayer", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02652-rna-Mesh-MeshLoopColorLayer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02652.py -- tests/files/web/generated/M16-GAP-02652-rna-Mesh-MeshLoopColorLayer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02652", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02652", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02653", + "gapId": "rna:Mesh:MeshLoopTriangle", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02653-rna-Mesh-MeshLoopTriangle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02653.py -- tests/files/web/generated/M16-GAP-02653-rna-Mesh-MeshLoopTriangle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02653", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02653", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02654", + "gapId": "rna:Mesh:MeshLoopTriangles", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02654-rna-Mesh-MeshLoopTriangles.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02654.py -- tests/files/web/generated/M16-GAP-02654-rna-Mesh-MeshLoopTriangles.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02654", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02654", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02655", + "gapId": "rna:Mesh:MeshLoops", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02655-rna-Mesh-MeshLoops.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02655.py -- tests/files/web/generated/M16-GAP-02655-rna-Mesh-MeshLoops.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02655", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02655", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02656", + "gapId": "rna:Mesh:MeshNormalValue", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02656-rna-Mesh-MeshNormalValue.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02656.py -- tests/files/web/generated/M16-GAP-02656-rna-Mesh-MeshNormalValue.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02656", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02656", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02657", + "gapId": "rna:Mesh:MeshPolygon", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02657-rna-Mesh-MeshPolygon.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02657.py -- tests/files/web/generated/M16-GAP-02657-rna-Mesh-MeshPolygon.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02657", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02657", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02658", + "gapId": "rna:Mesh:MeshPolygons", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02658-rna-Mesh-MeshPolygons.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02658.py -- tests/files/web/generated/M16-GAP-02658-rna-Mesh-MeshPolygons.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02658", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02658", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02659", + "gapId": "rna:Mesh:MeshSequenceCacheModifier", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02659-rna-Mesh-MeshSequenceCacheModifier.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02659.py -- tests/files/web/generated/M16-GAP-02659-rna-Mesh-MeshSequenceCacheModifier.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02659", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02659", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02660", + "gapId": "rna:Mesh:MeshSkinVertex", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02660-rna-Mesh-MeshSkinVertex.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02660.py -- tests/files/web/generated/M16-GAP-02660-rna-Mesh-MeshSkinVertex.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02660", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02660", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02661", + "gapId": "rna:Mesh:MeshSkinVertexLayer", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02661-rna-Mesh-MeshSkinVertexLayer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02661.py -- tests/files/web/generated/M16-GAP-02661-rna-Mesh-MeshSkinVertexLayer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02661", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02661", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02662", + "gapId": "rna:Mesh:MeshStatVis", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02662-rna-Mesh-MeshStatVis.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02662.py -- tests/files/web/generated/M16-GAP-02662-rna-Mesh-MeshStatVis.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02662", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02662", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02663", + "gapId": "rna:Mesh:MeshToVolumeModifier", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02663-rna-Mesh-MeshToVolumeModifier.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02663.py -- tests/files/web/generated/M16-GAP-02663-rna-Mesh-MeshToVolumeModifier.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02663", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02663", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02664", + "gapId": "rna:Mesh:MeshUVLoop", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02664-rna-Mesh-MeshUVLoop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02664.py -- tests/files/web/generated/M16-GAP-02664-rna-Mesh-MeshUVLoop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02664", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02664", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02665", + "gapId": "rna:Mesh:MeshUVLoopLayer", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02665-rna-Mesh-MeshUVLoopLayer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02665.py -- tests/files/web/generated/M16-GAP-02665-rna-Mesh-MeshUVLoopLayer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02665", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02665", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02666", + "gapId": "rna:Mesh:MeshVertex", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02666-rna-Mesh-MeshVertex.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02666.py -- tests/files/web/generated/M16-GAP-02666-rna-Mesh-MeshVertex.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02666", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02666", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02667", + "gapId": "rna:Mesh:MeshVertices", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02667-rna-Mesh-MeshVertices.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02667.py -- tests/files/web/generated/M16-GAP-02667-rna-Mesh-MeshVertices.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02667", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02667", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00001", + "gapId": "constraint:ACTION", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00001-constraint-ACTION.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00001.py -- tests/files/web/generated/M17-GAP-00001-constraint-ACTION.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00001", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00001", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00002", + "gapId": "constraint:ARMATURE", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00002-constraint-ARMATURE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00002.py -- tests/files/web/generated/M17-GAP-00002-constraint-ARMATURE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00002", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00002", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00003", + "gapId": "constraint:CAMERA_SOLVER", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00003-constraint-CAMERA_SOLVER.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00003.py -- tests/files/web/generated/M17-GAP-00003-constraint-CAMERA_SOLVER.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00003", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00003", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00004", + "gapId": "constraint:CHILD_OF", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00004-constraint-CHILD_OF.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00004.py -- tests/files/web/generated/M17-GAP-00004-constraint-CHILD_OF.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00004", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00004", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00005", + "gapId": "constraint:CLAMP_TO", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00005-constraint-CLAMP_TO.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00005.py -- tests/files/web/generated/M17-GAP-00005-constraint-CLAMP_TO.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00005", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00005", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00006", + "gapId": "constraint:COPY_LOCATION", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00006-constraint-COPY_LOCATION.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00006.py -- tests/files/web/generated/M17-GAP-00006-constraint-COPY_LOCATION.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00006", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00006", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00007", + "gapId": "constraint:COPY_ROTATION", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00007-constraint-COPY_ROTATION.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00007.py -- tests/files/web/generated/M17-GAP-00007-constraint-COPY_ROTATION.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00007", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00007", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00008", + "gapId": "constraint:COPY_SCALE", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00008-constraint-COPY_SCALE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00008.py -- tests/files/web/generated/M17-GAP-00008-constraint-COPY_SCALE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00008", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00008", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00009", + "gapId": "constraint:COPY_TRANSFORMS", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00009-constraint-COPY_TRANSFORMS.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00009.py -- tests/files/web/generated/M17-GAP-00009-constraint-COPY_TRANSFORMS.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00009", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00009", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00010", + "gapId": "constraint:DAMPED_TRACK", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00010-constraint-DAMPED_TRACK.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00010.py -- tests/files/web/generated/M17-GAP-00010-constraint-DAMPED_TRACK.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00010", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00010", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00011", + "gapId": "constraint:FLOOR", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00011-constraint-FLOOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00011.py -- tests/files/web/generated/M17-GAP-00011-constraint-FLOOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00011", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00011", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00012", + "gapId": "constraint:FOLLOW_PATH", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00012-constraint-FOLLOW_PATH.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00012.py -- tests/files/web/generated/M17-GAP-00012-constraint-FOLLOW_PATH.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00012", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00012", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00013", + "gapId": "constraint:FOLLOW_TRACK", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00013-constraint-FOLLOW_TRACK.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00013.py -- tests/files/web/generated/M17-GAP-00013-constraint-FOLLOW_TRACK.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00013", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00013", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00014", + "gapId": "constraint:GEOMETRY_ATTRIBUTE", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00014-constraint-GEOMETRY_ATTRIBUTE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00014.py -- tests/files/web/generated/M17-GAP-00014-constraint-GEOMETRY_ATTRIBUTE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00014", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00014", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00015", + "gapId": "constraint:IK", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00015-constraint-IK.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00015.py -- tests/files/web/generated/M17-GAP-00015-constraint-IK.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00015", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00015", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00016", + "gapId": "constraint:LIMIT_DISTANCE", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00016-constraint-LIMIT_DISTANCE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00016.py -- tests/files/web/generated/M17-GAP-00016-constraint-LIMIT_DISTANCE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00016", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00016", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00017", + "gapId": "constraint:LIMIT_LOCATION", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00017-constraint-LIMIT_LOCATION.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00017.py -- tests/files/web/generated/M17-GAP-00017-constraint-LIMIT_LOCATION.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00017", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00017", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00018", + "gapId": "constraint:LIMIT_ROTATION", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00018-constraint-LIMIT_ROTATION.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00018.py -- tests/files/web/generated/M17-GAP-00018-constraint-LIMIT_ROTATION.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00018", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00018", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00019", + "gapId": "constraint:LIMIT_SCALE", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00019-constraint-LIMIT_SCALE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00019.py -- tests/files/web/generated/M17-GAP-00019-constraint-LIMIT_SCALE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00019", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00019", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00020", + "gapId": "constraint:LOCKED_TRACK", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00020-constraint-LOCKED_TRACK.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00020.py -- tests/files/web/generated/M17-GAP-00020-constraint-LOCKED_TRACK.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00020", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00020", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00021", + "gapId": "constraint:MAINTAIN_VOLUME", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00021-constraint-MAINTAIN_VOLUME.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00021.py -- tests/files/web/generated/M17-GAP-00021-constraint-MAINTAIN_VOLUME.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00021", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00021", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00022", + "gapId": "constraint:OBJECT_SOLVER", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00022-constraint-OBJECT_SOLVER.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00022.py -- tests/files/web/generated/M17-GAP-00022-constraint-OBJECT_SOLVER.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00022", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00022", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00023", + "gapId": "constraint:PIVOT", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00023-constraint-PIVOT.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00023.py -- tests/files/web/generated/M17-GAP-00023-constraint-PIVOT.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00023", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00023", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00024", + "gapId": "constraint:SHRINKWRAP", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00024-constraint-SHRINKWRAP.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00024.py -- tests/files/web/generated/M17-GAP-00024-constraint-SHRINKWRAP.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00024", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00024", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00025", + "gapId": "constraint:SPLINE_IK", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00025-constraint-SPLINE_IK.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00025.py -- tests/files/web/generated/M17-GAP-00025-constraint-SPLINE_IK.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00025", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00025", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00026", + "gapId": "constraint:STRETCH_TO", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00026-constraint-STRETCH_TO.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00026.py -- tests/files/web/generated/M17-GAP-00026-constraint-STRETCH_TO.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00026", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00026", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00027", + "gapId": "constraint:TRACK_TO", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00027-constraint-TRACK_TO.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00027.py -- tests/files/web/generated/M17-GAP-00027-constraint-TRACK_TO.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00027", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00027", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00028", + "gapId": "constraint:TRANSFORM", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00028-constraint-TRANSFORM.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00028.py -- tests/files/web/generated/M17-GAP-00028-constraint-TRANSFORM.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00028", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00028", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00029", + "gapId": "constraint:TRANSFORM_CACHE", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00029-constraint-TRANSFORM_CACHE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00029.py -- tests/files/web/generated/M17-GAP-00029-constraint-TRANSFORM_CACHE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00029", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00029", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00001", + "gapId": "node:Compositor:CompositorNodeAlphaOver", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00001-node-Compositor-CompositorNodeAlphaOver.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00001.py -- tests/files/web/generated/M18-GAP-00001-node-Compositor-CompositorNodeAlphaOver.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00001", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00001", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00002", + "gapId": "node:Compositor:CompositorNodeAntiAliasing", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00002-node-Compositor-CompositorNodeAntiAliasing.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00002.py -- tests/files/web/generated/M18-GAP-00002-node-Compositor-CompositorNodeAntiAliasing.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00002", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00002", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00003", + "gapId": "node:Compositor:CompositorNodeBilateralblur", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00003-node-Compositor-CompositorNodeBilateralblur.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00003.py -- tests/files/web/generated/M18-GAP-00003-node-Compositor-CompositorNodeBilateralblur.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00003", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00003", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00004", + "gapId": "node:Compositor:CompositorNodeBlankImage", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00004-node-Compositor-CompositorNodeBlankImage.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00004.py -- tests/files/web/generated/M18-GAP-00004-node-Compositor-CompositorNodeBlankImage.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00004", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00004", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00005", + "gapId": "node:Compositor:CompositorNodeBlur", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00005-node-Compositor-CompositorNodeBlur.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00005.py -- tests/files/web/generated/M18-GAP-00005-node-Compositor-CompositorNodeBlur.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00005", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00005", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00006", + "gapId": "node:Compositor:CompositorNodeBokehBlur", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00006-node-Compositor-CompositorNodeBokehBlur.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00006.py -- tests/files/web/generated/M18-GAP-00006-node-Compositor-CompositorNodeBokehBlur.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00006", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00006", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00007", + "gapId": "node:Compositor:CompositorNodeBokehImage", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00007-node-Compositor-CompositorNodeBokehImage.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00007.py -- tests/files/web/generated/M18-GAP-00007-node-Compositor-CompositorNodeBokehImage.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00007", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00007", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00008", + "gapId": "node:Compositor:CompositorNodeBoxMask", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00008-node-Compositor-CompositorNodeBoxMask.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00008.py -- tests/files/web/generated/M18-GAP-00008-node-Compositor-CompositorNodeBoxMask.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00008", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00008", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00009", + "gapId": "node:Compositor:CompositorNodeBrightContrast", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00009-node-Compositor-CompositorNodeBrightContrast.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00009.py -- tests/files/web/generated/M18-GAP-00009-node-Compositor-CompositorNodeBrightContrast.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00009", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00009", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00010", + "gapId": "node:Compositor:CompositorNodeChannelMatte", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00010-node-Compositor-CompositorNodeChannelMatte.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00010.py -- tests/files/web/generated/M18-GAP-00010-node-Compositor-CompositorNodeChannelMatte.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00010", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00010", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00011", + "gapId": "node:Compositor:CompositorNodeChromaMatte", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00011-node-Compositor-CompositorNodeChromaMatte.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00011.py -- tests/files/web/generated/M18-GAP-00011-node-Compositor-CompositorNodeChromaMatte.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00011", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00011", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00012", + "gapId": "node:Compositor:CompositorNodeColorBalance", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00012-node-Compositor-CompositorNodeColorBalance.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00012.py -- tests/files/web/generated/M18-GAP-00012-node-Compositor-CompositorNodeColorBalance.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00012", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00012", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00013", + "gapId": "node:Compositor:CompositorNodeColorCorrection", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00013-node-Compositor-CompositorNodeColorCorrection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00013.py -- tests/files/web/generated/M18-GAP-00013-node-Compositor-CompositorNodeColorCorrection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00013", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00013", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00014", + "gapId": "node:Compositor:CompositorNodeColorMatte", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00014-node-Compositor-CompositorNodeColorMatte.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00014.py -- tests/files/web/generated/M18-GAP-00014-node-Compositor-CompositorNodeColorMatte.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00014", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00014", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00015", + "gapId": "node:Compositor:CompositorNodeColorSpill", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00015-node-Compositor-CompositorNodeColorSpill.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00015.py -- tests/files/web/generated/M18-GAP-00015-node-Compositor-CompositorNodeColorSpill.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00015", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00015", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00016", + "gapId": "node:Compositor:CompositorNodeCombineColor", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00016-node-Compositor-CompositorNodeCombineColor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00016.py -- tests/files/web/generated/M18-GAP-00016-node-Compositor-CompositorNodeCombineColor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00016", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00016", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00017", + "gapId": "node:Compositor:CompositorNodeConvertColorSpace", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00017-node-Compositor-CompositorNodeConvertColorSpace.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00017.py -- tests/files/web/generated/M18-GAP-00017-node-Compositor-CompositorNodeConvertColorSpace.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00017", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00017", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00018", + "gapId": "node:Compositor:CompositorNodeConvertToDisplay", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00018-node-Compositor-CompositorNodeConvertToDisplay.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00018.py -- tests/files/web/generated/M18-GAP-00018-node-Compositor-CompositorNodeConvertToDisplay.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00018", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00018", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00019", + "gapId": "node:Compositor:CompositorNodeConvolve", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00019-node-Compositor-CompositorNodeConvolve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00019.py -- tests/files/web/generated/M18-GAP-00019-node-Compositor-CompositorNodeConvolve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00019", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00019", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00020", + "gapId": "node:Compositor:CompositorNodeCornerPin", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00020-node-Compositor-CompositorNodeCornerPin.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00020.py -- tests/files/web/generated/M18-GAP-00020-node-Compositor-CompositorNodeCornerPin.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00020", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00020", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00021", + "gapId": "node:Compositor:CompositorNodeCrop", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00021-node-Compositor-CompositorNodeCrop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00021.py -- tests/files/web/generated/M18-GAP-00021-node-Compositor-CompositorNodeCrop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00021", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00021", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00022", + "gapId": "node:Compositor:CompositorNodeCryptomatte", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00022-node-Compositor-CompositorNodeCryptomatte.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00022.py -- tests/files/web/generated/M18-GAP-00022-node-Compositor-CompositorNodeCryptomatte.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00022", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00022", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00023", + "gapId": "node:Compositor:CompositorNodeCryptomatteV2", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00023-node-Compositor-CompositorNodeCryptomatteV2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00023.py -- tests/files/web/generated/M18-GAP-00023-node-Compositor-CompositorNodeCryptomatteV2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00023", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00023", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00024", + "gapId": "node:Compositor:CompositorNodeCurveRGB", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00024-node-Compositor-CompositorNodeCurveRGB.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00024.py -- tests/files/web/generated/M18-GAP-00024-node-Compositor-CompositorNodeCurveRGB.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00024", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00024", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00025", + "gapId": "node:Compositor:CompositorNodeDBlur", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00025-node-Compositor-CompositorNodeDBlur.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00025.py -- tests/files/web/generated/M18-GAP-00025-node-Compositor-CompositorNodeDBlur.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00025", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00025", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00026", + "gapId": "node:Compositor:CompositorNodeDefocus", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00026-node-Compositor-CompositorNodeDefocus.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00026.py -- tests/files/web/generated/M18-GAP-00026-node-Compositor-CompositorNodeDefocus.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00026", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00026", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00027", + "gapId": "node:Compositor:CompositorNodeDenoise", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00027-node-Compositor-CompositorNodeDenoise.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00027.py -- tests/files/web/generated/M18-GAP-00027-node-Compositor-CompositorNodeDenoise.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00027", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00027", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00028", + "gapId": "node:Compositor:CompositorNodeDespeckle", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00028-node-Compositor-CompositorNodeDespeckle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00028.py -- tests/files/web/generated/M18-GAP-00028-node-Compositor-CompositorNodeDespeckle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00028", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00028", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00029", + "gapId": "node:Compositor:CompositorNodeDiffMatte", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00029-node-Compositor-CompositorNodeDiffMatte.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00029.py -- tests/files/web/generated/M18-GAP-00029-node-Compositor-CompositorNodeDiffMatte.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00029", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00029", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00030", + "gapId": "node:Compositor:CompositorNodeDilateErode", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00030-node-Compositor-CompositorNodeDilateErode.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00030.py -- tests/files/web/generated/M18-GAP-00030-node-Compositor-CompositorNodeDilateErode.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00030", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00030", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00031", + "gapId": "node:Compositor:CompositorNodeDisplace", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00031-node-Compositor-CompositorNodeDisplace.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00031.py -- tests/files/web/generated/M18-GAP-00031-node-Compositor-CompositorNodeDisplace.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00031", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00031", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00032", + "gapId": "node:Compositor:CompositorNodeDistanceMatte", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00032-node-Compositor-CompositorNodeDistanceMatte.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00032.py -- tests/files/web/generated/M18-GAP-00032-node-Compositor-CompositorNodeDistanceMatte.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00032", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00032", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00033", + "gapId": "node:Compositor:CompositorNodeDoubleEdgeMask", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00033-node-Compositor-CompositorNodeDoubleEdgeMask.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00033.py -- tests/files/web/generated/M18-GAP-00033-node-Compositor-CompositorNodeDoubleEdgeMask.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00033", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00033", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00034", + "gapId": "node:Compositor:CompositorNodeEllipseMask", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00034-node-Compositor-CompositorNodeEllipseMask.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00034.py -- tests/files/web/generated/M18-GAP-00034-node-Compositor-CompositorNodeEllipseMask.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00034", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00034", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00035", + "gapId": "node:Compositor:CompositorNodeExposure", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00035-node-Compositor-CompositorNodeExposure.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00035.py -- tests/files/web/generated/M18-GAP-00035-node-Compositor-CompositorNodeExposure.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00035", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00035", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00036", + "gapId": "node:Compositor:CompositorNodeFilter", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00036-node-Compositor-CompositorNodeFilter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00036.py -- tests/files/web/generated/M18-GAP-00036-node-Compositor-CompositorNodeFilter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00036", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00036", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00037", + "gapId": "node:Compositor:CompositorNodeFlip", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00037-node-Compositor-CompositorNodeFlip.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00037.py -- tests/files/web/generated/M18-GAP-00037-node-Compositor-CompositorNodeFlip.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00037", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00037", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00038", + "gapId": "node:Compositor:CompositorNodeGlare", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00038-node-Compositor-CompositorNodeGlare.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00038.py -- tests/files/web/generated/M18-GAP-00038-node-Compositor-CompositorNodeGlare.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00038", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00038", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00039", + "gapId": "node:Compositor:CompositorNodeGroup", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00039-node-Compositor-CompositorNodeGroup.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00039.py -- tests/files/web/generated/M18-GAP-00039-node-Compositor-CompositorNodeGroup.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00039", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00039", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00040", + "gapId": "node:Compositor:CompositorNodeHueCorrect", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00040-node-Compositor-CompositorNodeHueCorrect.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00040.py -- tests/files/web/generated/M18-GAP-00040-node-Compositor-CompositorNodeHueCorrect.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00040", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00040", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00041", + "gapId": "node:Compositor:CompositorNodeHueSat", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00041-node-Compositor-CompositorNodeHueSat.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00041.py -- tests/files/web/generated/M18-GAP-00041-node-Compositor-CompositorNodeHueSat.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00041", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00041", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00042", + "gapId": "node:Compositor:CompositorNodeIDMask", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00042-node-Compositor-CompositorNodeIDMask.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00042.py -- tests/files/web/generated/M18-GAP-00042-node-Compositor-CompositorNodeIDMask.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00042", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00042", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00043", + "gapId": "node:Compositor:CompositorNodeImage", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00043-node-Compositor-CompositorNodeImage.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00043.py -- tests/files/web/generated/M18-GAP-00043-node-Compositor-CompositorNodeImage.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00043", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00043", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00044", + "gapId": "node:Compositor:CompositorNodeImageCoordinates", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00044-node-Compositor-CompositorNodeImageCoordinates.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00044.py -- tests/files/web/generated/M18-GAP-00044-node-Compositor-CompositorNodeImageCoordinates.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00044", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00044", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00045", + "gapId": "node:Compositor:CompositorNodeImageInfo", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00045-node-Compositor-CompositorNodeImageInfo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00045.py -- tests/files/web/generated/M18-GAP-00045-node-Compositor-CompositorNodeImageInfo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00045", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00045", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00046", + "gapId": "node:Compositor:CompositorNodeInpaint", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00046-node-Compositor-CompositorNodeInpaint.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00046.py -- tests/files/web/generated/M18-GAP-00046-node-Compositor-CompositorNodeInpaint.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00046", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00046", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00047", + "gapId": "node:Compositor:CompositorNodeInvert", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00047-node-Compositor-CompositorNodeInvert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00047.py -- tests/files/web/generated/M18-GAP-00047-node-Compositor-CompositorNodeInvert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00047", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00047", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00048", + "gapId": "node:Compositor:CompositorNodeKeying", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00048-node-Compositor-CompositorNodeKeying.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00048.py -- tests/files/web/generated/M18-GAP-00048-node-Compositor-CompositorNodeKeying.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00048", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00048", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00049", + "gapId": "node:Compositor:CompositorNodeKeyingScreen", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00049-node-Compositor-CompositorNodeKeyingScreen.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00049.py -- tests/files/web/generated/M18-GAP-00049-node-Compositor-CompositorNodeKeyingScreen.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00049", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00049", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00050", + "gapId": "node:Compositor:CompositorNodeKuwahara", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00050-node-Compositor-CompositorNodeKuwahara.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00050.py -- tests/files/web/generated/M18-GAP-00050-node-Compositor-CompositorNodeKuwahara.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00050", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00050", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00051", + "gapId": "node:Compositor:CompositorNodeLensdist", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00051-node-Compositor-CompositorNodeLensdist.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00051.py -- tests/files/web/generated/M18-GAP-00051-node-Compositor-CompositorNodeLensdist.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00051", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00051", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00052", + "gapId": "node:Compositor:CompositorNodeLevels", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00052-node-Compositor-CompositorNodeLevels.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00052.py -- tests/files/web/generated/M18-GAP-00052-node-Compositor-CompositorNodeLevels.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00052", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00052", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00053", + "gapId": "node:Compositor:CompositorNodeLumaMatte", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00053-node-Compositor-CompositorNodeLumaMatte.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00053.py -- tests/files/web/generated/M18-GAP-00053-node-Compositor-CompositorNodeLumaMatte.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00053", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00053", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00054", + "gapId": "node:Compositor:CompositorNodeMapUV", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00054-node-Compositor-CompositorNodeMapUV.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00054.py -- tests/files/web/generated/M18-GAP-00054-node-Compositor-CompositorNodeMapUV.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00054", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00054", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00055", + "gapId": "node:Compositor:CompositorNodeMask", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00055-node-Compositor-CompositorNodeMask.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00055.py -- tests/files/web/generated/M18-GAP-00055-node-Compositor-CompositorNodeMask.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00055", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00055", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00056", + "gapId": "node:Compositor:CompositorNodeMaskToSDF", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00056-node-Compositor-CompositorNodeMaskToSDF.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00056.py -- tests/files/web/generated/M18-GAP-00056-node-Compositor-CompositorNodeMaskToSDF.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00056", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00056", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00057", + "gapId": "node:Compositor:CompositorNodeMovieClip", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00057-node-Compositor-CompositorNodeMovieClip.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00057.py -- tests/files/web/generated/M18-GAP-00057-node-Compositor-CompositorNodeMovieClip.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00057", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00057", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00058", + "gapId": "node:Compositor:CompositorNodeMovieDistortion", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00058-node-Compositor-CompositorNodeMovieDistortion.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00058.py -- tests/files/web/generated/M18-GAP-00058-node-Compositor-CompositorNodeMovieDistortion.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00058", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00058", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00059", + "gapId": "node:Compositor:CompositorNodeNormal", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00059-node-Compositor-CompositorNodeNormal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00059.py -- tests/files/web/generated/M18-GAP-00059-node-Compositor-CompositorNodeNormal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00059", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00059", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00060", + "gapId": "node:Compositor:CompositorNodeNormalize", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00060-node-Compositor-CompositorNodeNormalize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00060.py -- tests/files/web/generated/M18-GAP-00060-node-Compositor-CompositorNodeNormalize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00060", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00060", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00061", + "gapId": "node:Compositor:CompositorNodeOutputFile", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00061-node-Compositor-CompositorNodeOutputFile.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00061.py -- tests/files/web/generated/M18-GAP-00061-node-Compositor-CompositorNodeOutputFile.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00061", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00061", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00062", + "gapId": "node:Compositor:CompositorNodePixelate", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00062-node-Compositor-CompositorNodePixelate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00062.py -- tests/files/web/generated/M18-GAP-00062-node-Compositor-CompositorNodePixelate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00062", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00062", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00063", + "gapId": "node:Compositor:CompositorNodePlaneTrackDeform", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00063-node-Compositor-CompositorNodePlaneTrackDeform.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00063.py -- tests/files/web/generated/M18-GAP-00063-node-Compositor-CompositorNodePlaneTrackDeform.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00063", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00063", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00064", + "gapId": "node:Compositor:CompositorNodePosterize", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00064-node-Compositor-CompositorNodePosterize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00064.py -- tests/files/web/generated/M18-GAP-00064-node-Compositor-CompositorNodePosterize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00064", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00064", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00065", + "gapId": "node:Compositor:CompositorNodePremulKey", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00065-node-Compositor-CompositorNodePremulKey.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00065.py -- tests/files/web/generated/M18-GAP-00065-node-Compositor-CompositorNodePremulKey.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00065", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00065", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00066", + "gapId": "node:Compositor:CompositorNodeRGB", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00066-node-Compositor-CompositorNodeRGB.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00066.py -- tests/files/web/generated/M18-GAP-00066-node-Compositor-CompositorNodeRGB.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00066", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00066", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00067", + "gapId": "node:Compositor:CompositorNodeRGBToBW", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00067-node-Compositor-CompositorNodeRGBToBW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00067.py -- tests/files/web/generated/M18-GAP-00067-node-Compositor-CompositorNodeRGBToBW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00067", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00067", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00068", + "gapId": "node:Compositor:CompositorNodeRLayers", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00068-node-Compositor-CompositorNodeRLayers.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00068.py -- tests/files/web/generated/M18-GAP-00068-node-Compositor-CompositorNodeRLayers.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00068", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00068", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00069", + "gapId": "node:Compositor:CompositorNodeRelativeToPixel", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00069-node-Compositor-CompositorNodeRelativeToPixel.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00069.py -- tests/files/web/generated/M18-GAP-00069-node-Compositor-CompositorNodeRelativeToPixel.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00069", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00069", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00070", + "gapId": "node:Compositor:CompositorNodeRotate", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00070-node-Compositor-CompositorNodeRotate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00070.py -- tests/files/web/generated/M18-GAP-00070-node-Compositor-CompositorNodeRotate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00070", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00070", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00071", + "gapId": "node:Compositor:CompositorNodeScale", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00071-node-Compositor-CompositorNodeScale.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00071.py -- tests/files/web/generated/M18-GAP-00071-node-Compositor-CompositorNodeScale.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00071", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00071", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00072", + "gapId": "node:Compositor:CompositorNodeSceneTime", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00072-node-Compositor-CompositorNodeSceneTime.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00072.py -- tests/files/web/generated/M18-GAP-00072-node-Compositor-CompositorNodeSceneTime.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00072", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00072", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00073", + "gapId": "node:Compositor:CompositorNodeSeparateColor", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00073-node-Compositor-CompositorNodeSeparateColor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00073.py -- tests/files/web/generated/M18-GAP-00073-node-Compositor-CompositorNodeSeparateColor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00073", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00073", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00074", + "gapId": "node:Compositor:CompositorNodeSequencerStripInfo", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00074-node-Compositor-CompositorNodeSequencerStripInfo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00074.py -- tests/files/web/generated/M18-GAP-00074-node-Compositor-CompositorNodeSequencerStripInfo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00074", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00074", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00075", + "gapId": "node:Compositor:CompositorNodeSetAlpha", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00075-node-Compositor-CompositorNodeSetAlpha.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00075.py -- tests/files/web/generated/M18-GAP-00075-node-Compositor-CompositorNodeSetAlpha.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00075", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00075", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00076", + "gapId": "node:Compositor:CompositorNodeSplit", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00076-node-Compositor-CompositorNodeSplit.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00076.py -- tests/files/web/generated/M18-GAP-00076-node-Compositor-CompositorNodeSplit.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00076", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00076", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00077", + "gapId": "node:Compositor:CompositorNodeStabilize", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00077-node-Compositor-CompositorNodeStabilize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00077.py -- tests/files/web/generated/M18-GAP-00077-node-Compositor-CompositorNodeStabilize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00077", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00077", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00078", + "gapId": "node:Compositor:CompositorNodeStringToImage", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00078-node-Compositor-CompositorNodeStringToImage.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00078.py -- tests/files/web/generated/M18-GAP-00078-node-Compositor-CompositorNodeStringToImage.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00078", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00078", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00079", + "gapId": "node:Compositor:CompositorNodeSwitch", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00079-node-Compositor-CompositorNodeSwitch.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00079.py -- tests/files/web/generated/M18-GAP-00079-node-Compositor-CompositorNodeSwitch.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00079", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00079", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00080", + "gapId": "node:Compositor:CompositorNodeSwitchView", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00080-node-Compositor-CompositorNodeSwitchView.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00080.py -- tests/files/web/generated/M18-GAP-00080-node-Compositor-CompositorNodeSwitchView.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00080", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00080", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00081", + "gapId": "node:Compositor:CompositorNodeTime", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00081-node-Compositor-CompositorNodeTime.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00081.py -- tests/files/web/generated/M18-GAP-00081-node-Compositor-CompositorNodeTime.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00081", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00081", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00082", + "gapId": "node:Compositor:CompositorNodeTonemap", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00082-node-Compositor-CompositorNodeTonemap.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00082.py -- tests/files/web/generated/M18-GAP-00082-node-Compositor-CompositorNodeTonemap.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00082", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00082", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00083", + "gapId": "node:Compositor:CompositorNodeTrackPos", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00083-node-Compositor-CompositorNodeTrackPos.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00083.py -- tests/files/web/generated/M18-GAP-00083-node-Compositor-CompositorNodeTrackPos.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00083", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00083", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00084", + "gapId": "node:Compositor:CompositorNodeTransform", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00084-node-Compositor-CompositorNodeTransform.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00084.py -- tests/files/web/generated/M18-GAP-00084-node-Compositor-CompositorNodeTransform.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00084", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00084", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00085", + "gapId": "node:Compositor:CompositorNodeTranslate", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00085-node-Compositor-CompositorNodeTranslate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00085.py -- tests/files/web/generated/M18-GAP-00085-node-Compositor-CompositorNodeTranslate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00085", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00085", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00086", + "gapId": "node:Compositor:CompositorNodeVecBlur", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00086-node-Compositor-CompositorNodeVecBlur.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00086.py -- tests/files/web/generated/M18-GAP-00086-node-Compositor-CompositorNodeVecBlur.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00086", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00086", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00087", + "gapId": "node:Compositor:CompositorNodeViewer", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00087-node-Compositor-CompositorNodeViewer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00087.py -- tests/files/web/generated/M18-GAP-00087-node-Compositor-CompositorNodeViewer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00087", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00087", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00088", + "gapId": "node:Compositor:CompositorNodeZcombine", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00088-node-Compositor-CompositorNodeZcombine.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00088.py -- tests/files/web/generated/M18-GAP-00088-node-Compositor-CompositorNodeZcombine.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00088", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00088", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00089", + "gapId": "node:Geometry:GeometryNodeAccumulateField", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00089-node-Geometry-GeometryNodeAccumulateField.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00089.py -- tests/files/web/generated/M18-GAP-00089-node-Geometry-GeometryNodeAccumulateField.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00089", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00089", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00090", + "gapId": "node:Geometry:GeometryNodeAttributeDomainSize", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00090-node-Geometry-GeometryNodeAttributeDomainSize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00090.py -- tests/files/web/generated/M18-GAP-00090-node-Geometry-GeometryNodeAttributeDomainSize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00090", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00090", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00091", + "gapId": "node:Geometry:GeometryNodeAttributeStatistic", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00091-node-Geometry-GeometryNodeAttributeStatistic.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00091.py -- tests/files/web/generated/M18-GAP-00091-node-Geometry-GeometryNodeAttributeStatistic.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00091", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00091", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00092", + "gapId": "node:Geometry:GeometryNodeBake", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00092-node-Geometry-GeometryNodeBake.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00092.py -- tests/files/web/generated/M18-GAP-00092-node-Geometry-GeometryNodeBake.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00092", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00092", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00093", + "gapId": "node:Geometry:GeometryNodeBlurAttribute", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00093-node-Geometry-GeometryNodeBlurAttribute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00093.py -- tests/files/web/generated/M18-GAP-00093-node-Geometry-GeometryNodeBlurAttribute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00093", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00093", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00094", + "gapId": "node:Geometry:GeometryNodeBoneInfo", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00094-node-Geometry-GeometryNodeBoneInfo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00094.py -- tests/files/web/generated/M18-GAP-00094-node-Geometry-GeometryNodeBoneInfo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00094", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00094", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00095", + "gapId": "node:Geometry:GeometryNodeBoundBox", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00095-node-Geometry-GeometryNodeBoundBox.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00095.py -- tests/files/web/generated/M18-GAP-00095-node-Geometry-GeometryNodeBoundBox.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00095", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00095", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00096", + "gapId": "node:Geometry:GeometryNodeCameraInfo", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00096-node-Geometry-GeometryNodeCameraInfo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00096.py -- tests/files/web/generated/M18-GAP-00096-node-Geometry-GeometryNodeCameraInfo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00096", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00096", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00097", + "gapId": "node:Geometry:GeometryNodeCaptureAttribute", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00097-node-Geometry-GeometryNodeCaptureAttribute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00097.py -- tests/files/web/generated/M18-GAP-00097-node-Geometry-GeometryNodeCaptureAttribute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00097", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00097", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00098", + "gapId": "node:Geometry:GeometryNodeClosureToList", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00098-node-Geometry-GeometryNodeClosureToList.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00098.py -- tests/files/web/generated/M18-GAP-00098-node-Geometry-GeometryNodeClosureToList.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00098", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00098", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00099", + "gapId": "node:Geometry:GeometryNodeClusterByConnected", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00099-node-Geometry-GeometryNodeClusterByConnected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00099.py -- tests/files/web/generated/M18-GAP-00099-node-Geometry-GeometryNodeClusterByConnected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00099", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00099", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00100", + "gapId": "node:Geometry:GeometryNodeClusterByDistance", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00100-node-Geometry-GeometryNodeClusterByDistance.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00100.py -- tests/files/web/generated/M18-GAP-00100-node-Geometry-GeometryNodeClusterByDistance.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00100", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00100", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00101", + "gapId": "node:Geometry:GeometryNodeCollectionChildren", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00101-node-Geometry-GeometryNodeCollectionChildren.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00101.py -- tests/files/web/generated/M18-GAP-00101-node-Geometry-GeometryNodeCollectionChildren.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00101", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00101", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00102", + "gapId": "node:Geometry:GeometryNodeCollectionInfo", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00102-node-Geometry-GeometryNodeCollectionInfo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00102.py -- tests/files/web/generated/M18-GAP-00102-node-Geometry-GeometryNodeCollectionInfo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00102", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00102", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00103", + "gapId": "node:Geometry:GeometryNodeConvexHull", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00103-node-Geometry-GeometryNodeConvexHull.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00103.py -- tests/files/web/generated/M18-GAP-00103-node-Geometry-GeometryNodeConvexHull.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00103", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00103", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00104", + "gapId": "node:Geometry:GeometryNodeCornersOfEdge", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00104-node-Geometry-GeometryNodeCornersOfEdge.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00104.py -- tests/files/web/generated/M18-GAP-00104-node-Geometry-GeometryNodeCornersOfEdge.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00104", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00104", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00105", + "gapId": "node:Geometry:GeometryNodeCornersOfFace", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00105-node-Geometry-GeometryNodeCornersOfFace.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00105.py -- tests/files/web/generated/M18-GAP-00105-node-Geometry-GeometryNodeCornersOfFace.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00105", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00105", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00106", + "gapId": "node:Geometry:GeometryNodeCornersOfVertex", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00106-node-Geometry-GeometryNodeCornersOfVertex.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00106.py -- tests/files/web/generated/M18-GAP-00106-node-Geometry-GeometryNodeCornersOfVertex.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00106", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00106", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00107", + "gapId": "node:Geometry:GeometryNodeCubeGridTopology", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00107-node-Geometry-GeometryNodeCubeGridTopology.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00107.py -- tests/files/web/generated/M18-GAP-00107-node-Geometry-GeometryNodeCubeGridTopology.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00107", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00107", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00108", + "gapId": "node:Geometry:GeometryNodeCurveArc", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00108-node-Geometry-GeometryNodeCurveArc.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00108.py -- tests/files/web/generated/M18-GAP-00108-node-Geometry-GeometryNodeCurveArc.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00108", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00108", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00109", + "gapId": "node:Geometry:GeometryNodeCurveEndpointSelection", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00109-node-Geometry-GeometryNodeCurveEndpointSelection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00109.py -- tests/files/web/generated/M18-GAP-00109-node-Geometry-GeometryNodeCurveEndpointSelection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00109", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00109", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00110", + "gapId": "node:Geometry:GeometryNodeCurveHandleTypeSelection", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00110-node-Geometry-GeometryNodeCurveHandleTypeSelection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00110.py -- tests/files/web/generated/M18-GAP-00110-node-Geometry-GeometryNodeCurveHandleTypeSelection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00110", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00110", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00111", + "gapId": "node:Geometry:GeometryNodeCurveLength", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00111-node-Geometry-GeometryNodeCurveLength.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00111.py -- tests/files/web/generated/M18-GAP-00111-node-Geometry-GeometryNodeCurveLength.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00111", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00111", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00112", + "gapId": "node:Geometry:GeometryNodeCurveOfPoint", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00112-node-Geometry-GeometryNodeCurveOfPoint.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00112.py -- tests/files/web/generated/M18-GAP-00112-node-Geometry-GeometryNodeCurveOfPoint.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00112", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00112", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00113", + "gapId": "node:Geometry:GeometryNodeCurvePrimitiveBezierSegment", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00113-node-Geometry-GeometryNodeCurvePrimitiveBezierSegment.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00113.py -- tests/files/web/generated/M18-GAP-00113-node-Geometry-GeometryNodeCurvePrimitiveBezierSegment.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00113", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00113", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00114", + "gapId": "node:Geometry:GeometryNodeCurvePrimitiveCircle", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00114-node-Geometry-GeometryNodeCurvePrimitiveCircle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00114.py -- tests/files/web/generated/M18-GAP-00114-node-Geometry-GeometryNodeCurvePrimitiveCircle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00114", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00114", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00115", + "gapId": "node:Geometry:GeometryNodeCurvePrimitiveLine", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00115-node-Geometry-GeometryNodeCurvePrimitiveLine.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00115.py -- tests/files/web/generated/M18-GAP-00115-node-Geometry-GeometryNodeCurvePrimitiveLine.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00115", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00115", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00116", + "gapId": "node:Geometry:GeometryNodeCurvePrimitiveQuadrilateral", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00116-node-Geometry-GeometryNodeCurvePrimitiveQuadrilateral.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00116.py -- tests/files/web/generated/M18-GAP-00116-node-Geometry-GeometryNodeCurvePrimitiveQuadrilateral.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00116", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00116", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00117", + "gapId": "node:Geometry:GeometryNodeCurveQuadraticBezier", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00117-node-Geometry-GeometryNodeCurveQuadraticBezier.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00117.py -- tests/files/web/generated/M18-GAP-00117-node-Geometry-GeometryNodeCurveQuadraticBezier.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00117", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00117", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00118", + "gapId": "node:Geometry:GeometryNodeCurveSetHandles", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00118-node-Geometry-GeometryNodeCurveSetHandles.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00118.py -- tests/files/web/generated/M18-GAP-00118-node-Geometry-GeometryNodeCurveSetHandles.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00118", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00118", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00119", + "gapId": "node:Geometry:GeometryNodeCurveSpiral", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00119-node-Geometry-GeometryNodeCurveSpiral.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00119.py -- tests/files/web/generated/M18-GAP-00119-node-Geometry-GeometryNodeCurveSpiral.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00119", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00119", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00120", + "gapId": "node:Geometry:GeometryNodeCurveSplineType", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00120-node-Geometry-GeometryNodeCurveSplineType.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00120.py -- tests/files/web/generated/M18-GAP-00120-node-Geometry-GeometryNodeCurveSplineType.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00120", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00120", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00121", + "gapId": "node:Geometry:GeometryNodeCurveStar", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00121-node-Geometry-GeometryNodeCurveStar.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00121.py -- tests/files/web/generated/M18-GAP-00121-node-Geometry-GeometryNodeCurveStar.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00121", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00121", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00122", + "gapId": "node:Geometry:GeometryNodeCurveToMesh", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00122-node-Geometry-GeometryNodeCurveToMesh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00122.py -- tests/files/web/generated/M18-GAP-00122-node-Geometry-GeometryNodeCurveToMesh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00122", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00122", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00123", + "gapId": "node:Geometry:GeometryNodeCurveToPoints", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00123-node-Geometry-GeometryNodeCurveToPoints.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00123.py -- tests/files/web/generated/M18-GAP-00123-node-Geometry-GeometryNodeCurveToPoints.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00123", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00123", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00124", + "gapId": "node:Geometry:GeometryNodeCurvesToGreasePencil", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00124-node-Geometry-GeometryNodeCurvesToGreasePencil.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00124.py -- tests/files/web/generated/M18-GAP-00124-node-Geometry-GeometryNodeCurvesToGreasePencil.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00124", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00124", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00125", + "gapId": "node:Geometry:GeometryNodeDeformCurvesOnSurface", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00125-node-Geometry-GeometryNodeDeformCurvesOnSurface.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00125.py -- tests/files/web/generated/M18-GAP-00125-node-Geometry-GeometryNodeDeformCurvesOnSurface.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00125", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00125", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00126", + "gapId": "node:Geometry:GeometryNodeDeleteGeometry", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00126-node-Geometry-GeometryNodeDeleteGeometry.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00126.py -- tests/files/web/generated/M18-GAP-00126-node-Geometry-GeometryNodeDeleteGeometry.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00126", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00126", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00127", + "gapId": "node:Geometry:GeometryNodeDistributePointsInGrid", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00127-node-Geometry-GeometryNodeDistributePointsInGrid.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00127.py -- tests/files/web/generated/M18-GAP-00127-node-Geometry-GeometryNodeDistributePointsInGrid.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00127", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00127", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00128", + "gapId": "node:Geometry:GeometryNodeDistributePointsInVolume", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00128-node-Geometry-GeometryNodeDistributePointsInVolume.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00128.py -- tests/files/web/generated/M18-GAP-00128-node-Geometry-GeometryNodeDistributePointsInVolume.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00128", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00128", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00129", + "gapId": "node:Geometry:GeometryNodeDistributePointsOnFaces", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00129-node-Geometry-GeometryNodeDistributePointsOnFaces.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00129.py -- tests/files/web/generated/M18-GAP-00129-node-Geometry-GeometryNodeDistributePointsOnFaces.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00129", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00129", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00130", + "gapId": "node:Geometry:GeometryNodeDualMesh", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00130-node-Geometry-GeometryNodeDualMesh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00130.py -- tests/files/web/generated/M18-GAP-00130-node-Geometry-GeometryNodeDualMesh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00130", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00130", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00131", + "gapId": "node:Geometry:GeometryNodeDuplicateElements", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00131-node-Geometry-GeometryNodeDuplicateElements.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00131.py -- tests/files/web/generated/M18-GAP-00131-node-Geometry-GeometryNodeDuplicateElements.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00131", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00131", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00132", + "gapId": "node:Geometry:GeometryNodeEdgePathsToCurves", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00132-node-Geometry-GeometryNodeEdgePathsToCurves.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00132.py -- tests/files/web/generated/M18-GAP-00132-node-Geometry-GeometryNodeEdgePathsToCurves.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00132", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00132", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00133", + "gapId": "node:Geometry:GeometryNodeEdgePathsToSelection", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00133-node-Geometry-GeometryNodeEdgePathsToSelection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00133.py -- tests/files/web/generated/M18-GAP-00133-node-Geometry-GeometryNodeEdgePathsToSelection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00133", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00133", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00134", + "gapId": "node:Geometry:GeometryNodeEdgesOfCorner", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00134-node-Geometry-GeometryNodeEdgesOfCorner.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00134.py -- tests/files/web/generated/M18-GAP-00134-node-Geometry-GeometryNodeEdgesOfCorner.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00134", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00134", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00135", + "gapId": "node:Geometry:GeometryNodeEdgesOfVertex", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00135-node-Geometry-GeometryNodeEdgesOfVertex.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00135.py -- tests/files/web/generated/M18-GAP-00135-node-Geometry-GeometryNodeEdgesOfVertex.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00135", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00135", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00136", + "gapId": "node:Geometry:GeometryNodeEdgesToFaceGroups", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00136-node-Geometry-GeometryNodeEdgesToFaceGroups.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00136.py -- tests/files/web/generated/M18-GAP-00136-node-Geometry-GeometryNodeEdgesToFaceGroups.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00136", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00136", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00137", + "gapId": "node:Geometry:GeometryNodeExtrudeMesh", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00137-node-Geometry-GeometryNodeExtrudeMesh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00137.py -- tests/files/web/generated/M18-GAP-00137-node-Geometry-GeometryNodeExtrudeMesh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00137", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00137", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00138", + "gapId": "node:Geometry:GeometryNodeFaceOfCorner", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00138-node-Geometry-GeometryNodeFaceOfCorner.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00138.py -- tests/files/web/generated/M18-GAP-00138-node-Geometry-GeometryNodeFaceOfCorner.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00138", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00138", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00139", + "gapId": "node:Geometry:GeometryNodeFieldAtIndex", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00139-node-Geometry-GeometryNodeFieldAtIndex.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00139.py -- tests/files/web/generated/M18-GAP-00139-node-Geometry-GeometryNodeFieldAtIndex.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00139", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00139", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00140", + "gapId": "node:Geometry:GeometryNodeFieldAverage", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00140-node-Geometry-GeometryNodeFieldAverage.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00140.py -- tests/files/web/generated/M18-GAP-00140-node-Geometry-GeometryNodeFieldAverage.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00140", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00140", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00141", + "gapId": "node:Geometry:GeometryNodeFieldMinAndMax", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00141-node-Geometry-GeometryNodeFieldMinAndMax.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00141.py -- tests/files/web/generated/M18-GAP-00141-node-Geometry-GeometryNodeFieldMinAndMax.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00141", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00141", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00142", + "gapId": "node:Geometry:GeometryNodeFieldOnDomain", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00142-node-Geometry-GeometryNodeFieldOnDomain.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00142.py -- tests/files/web/generated/M18-GAP-00142-node-Geometry-GeometryNodeFieldOnDomain.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00142", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00142", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00143", + "gapId": "node:Geometry:GeometryNodeFieldToGrid", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00143-node-Geometry-GeometryNodeFieldToGrid.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00143.py -- tests/files/web/generated/M18-GAP-00143-node-Geometry-GeometryNodeFieldToGrid.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00143", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00143", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00144", + "gapId": "node:Geometry:GeometryNodeFieldToList", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00144-node-Geometry-GeometryNodeFieldToList.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00144.py -- tests/files/web/generated/M18-GAP-00144-node-Geometry-GeometryNodeFieldToList.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00144", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00144", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00145", + "gapId": "node:Geometry:GeometryNodeFieldVariance", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00145-node-Geometry-GeometryNodeFieldVariance.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00145.py -- tests/files/web/generated/M18-GAP-00145-node-Geometry-GeometryNodeFieldVariance.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00145", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00145", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00146", + "gapId": "node:Geometry:GeometryNodeFillCurve", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00146-node-Geometry-GeometryNodeFillCurve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00146.py -- tests/files/web/generated/M18-GAP-00146-node-Geometry-GeometryNodeFillCurve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00146", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00146", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00147", + "gapId": "node:Geometry:GeometryNodeFilletCurve", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00147-node-Geometry-GeometryNodeFilletCurve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00147.py -- tests/files/web/generated/M18-GAP-00147-node-Geometry-GeometryNodeFilletCurve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00147", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00147", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00148", + "gapId": "node:Geometry:GeometryNodeFilterList", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00148-node-Geometry-GeometryNodeFilterList.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00148.py -- tests/files/web/generated/M18-GAP-00148-node-Geometry-GeometryNodeFilterList.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00148", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00148", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00149", + "gapId": "node:Geometry:GeometryNodeFlipFaces", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00149-node-Geometry-GeometryNodeFlipFaces.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00149.py -- tests/files/web/generated/M18-GAP-00149-node-Geometry-GeometryNodeFlipFaces.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00149", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00149", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00150", + "gapId": "node:Geometry:GeometryNodeForeachGeometryElementInput", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00150-node-Geometry-GeometryNodeForeachGeometryElementInput.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00150.py -- tests/files/web/generated/M18-GAP-00150-node-Geometry-GeometryNodeForeachGeometryElementInput.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00150", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00150", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00151", + "gapId": "node:Geometry:GeometryNodeForeachGeometryElementOutput", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00151-node-Geometry-GeometryNodeForeachGeometryElementOutput.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00151.py -- tests/files/web/generated/M18-GAP-00151-node-Geometry-GeometryNodeForeachGeometryElementOutput.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00151", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00151", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00152", + "gapId": "node:Geometry:GeometryNodeGeometryToInstance", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00152-node-Geometry-GeometryNodeGeometryToInstance.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00152.py -- tests/files/web/generated/M18-GAP-00152-node-Geometry-GeometryNodeGeometryToInstance.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00152", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00152", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00153", + "gapId": "node:Geometry:GeometryNodeGetAttributeNames", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00153-node-Geometry-GeometryNodeGetAttributeNames.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00153.py -- tests/files/web/generated/M18-GAP-00153-node-Geometry-GeometryNodeGetAttributeNames.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00153", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00153", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00154", + "gapId": "node:Geometry:GeometryNodeGetGeometryBundle", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00154-node-Geometry-GeometryNodeGetGeometryBundle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00154.py -- tests/files/web/generated/M18-GAP-00154-node-Geometry-GeometryNodeGetGeometryBundle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00154", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00154", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00155", + "gapId": "node:Geometry:GeometryNodeGetGeometryComponent", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00155-node-Geometry-GeometryNodeGetGeometryComponent.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00155.py -- tests/files/web/generated/M18-GAP-00155-node-Geometry-GeometryNodeGetGeometryComponent.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00155", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00155", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00156", + "gapId": "node:Geometry:GeometryNodeGetNamedGrid", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00156-node-Geometry-GeometryNodeGetNamedGrid.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00156.py -- tests/files/web/generated/M18-GAP-00156-node-Geometry-GeometryNodeGetNamedGrid.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00156", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00156", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00157", + "gapId": "node:Geometry:GeometryNodeGizmoDial", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00157-node-Geometry-GeometryNodeGizmoDial.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00157.py -- tests/files/web/generated/M18-GAP-00157-node-Geometry-GeometryNodeGizmoDial.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00157", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00157", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00158", + "gapId": "node:Geometry:GeometryNodeGizmoLinear", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00158-node-Geometry-GeometryNodeGizmoLinear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00158.py -- tests/files/web/generated/M18-GAP-00158-node-Geometry-GeometryNodeGizmoLinear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00158", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00158", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00159", + "gapId": "node:Geometry:GeometryNodeGizmoTransform", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00159-node-Geometry-GeometryNodeGizmoTransform.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00159.py -- tests/files/web/generated/M18-GAP-00159-node-Geometry-GeometryNodeGizmoTransform.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00159", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00159", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00160", + "gapId": "node:Geometry:GeometryNodeGreasePencilToCurves", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00160-node-Geometry-GeometryNodeGreasePencilToCurves.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00160.py -- tests/files/web/generated/M18-GAP-00160-node-Geometry-GeometryNodeGreasePencilToCurves.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00160", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00160", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00161", + "gapId": "node:Geometry:GeometryNodeGridAdvect", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00161-node-Geometry-GeometryNodeGridAdvect.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00161.py -- tests/files/web/generated/M18-GAP-00161-node-Geometry-GeometryNodeGridAdvect.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00161", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00161", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00162", + "gapId": "node:Geometry:GeometryNodeGridClip", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00162-node-Geometry-GeometryNodeGridClip.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00162.py -- tests/files/web/generated/M18-GAP-00162-node-Geometry-GeometryNodeGridClip.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00162", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00162", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00163", + "gapId": "node:Geometry:GeometryNodeGridCurl", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00163-node-Geometry-GeometryNodeGridCurl.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00163.py -- tests/files/web/generated/M18-GAP-00163-node-Geometry-GeometryNodeGridCurl.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00163", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00163", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00164", + "gapId": "node:Geometry:GeometryNodeGridDilateAndErode", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00164-node-Geometry-GeometryNodeGridDilateAndErode.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00164.py -- tests/files/web/generated/M18-GAP-00164-node-Geometry-GeometryNodeGridDilateAndErode.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00164", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00164", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00165", + "gapId": "node:Geometry:GeometryNodeGridDivergence", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00165-node-Geometry-GeometryNodeGridDivergence.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00165.py -- tests/files/web/generated/M18-GAP-00165-node-Geometry-GeometryNodeGridDivergence.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00165", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00165", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00166", + "gapId": "node:Geometry:GeometryNodeGridGradient", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00166-node-Geometry-GeometryNodeGridGradient.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00166.py -- tests/files/web/generated/M18-GAP-00166-node-Geometry-GeometryNodeGridGradient.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00166", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00166", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00167", + "gapId": "node:Geometry:GeometryNodeGridInfo", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00167-node-Geometry-GeometryNodeGridInfo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00167.py -- tests/files/web/generated/M18-GAP-00167-node-Geometry-GeometryNodeGridInfo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00167", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00167", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00168", + "gapId": "node:Geometry:GeometryNodeGridLaplacian", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00168-node-Geometry-GeometryNodeGridLaplacian.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00168.py -- tests/files/web/generated/M18-GAP-00168-node-Geometry-GeometryNodeGridLaplacian.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00168", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00168", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00169", + "gapId": "node:Geometry:GeometryNodeGridMean", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00169-node-Geometry-GeometryNodeGridMean.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00169.py -- tests/files/web/generated/M18-GAP-00169-node-Geometry-GeometryNodeGridMean.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00169", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00169", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00170", + "gapId": "node:Geometry:GeometryNodeGridMedian", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00170-node-Geometry-GeometryNodeGridMedian.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00170.py -- tests/files/web/generated/M18-GAP-00170-node-Geometry-GeometryNodeGridMedian.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00170", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00170", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00171", + "gapId": "node:Geometry:GeometryNodeGridPrune", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00171-node-Geometry-GeometryNodeGridPrune.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00171.py -- tests/files/web/generated/M18-GAP-00171-node-Geometry-GeometryNodeGridPrune.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00171", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00171", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00172", + "gapId": "node:Geometry:GeometryNodeGridToMesh", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00172-node-Geometry-GeometryNodeGridToMesh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00172.py -- tests/files/web/generated/M18-GAP-00172-node-Geometry-GeometryNodeGridToMesh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00172", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00172", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00173", + "gapId": "node:Geometry:GeometryNodeGridToPoints", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00173-node-Geometry-GeometryNodeGridToPoints.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00173.py -- tests/files/web/generated/M18-GAP-00173-node-Geometry-GeometryNodeGridToPoints.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00173", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00173", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00174", + "gapId": "node:Geometry:GeometryNodeGridVoxelize", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00174-node-Geometry-GeometryNodeGridVoxelize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00174.py -- tests/files/web/generated/M18-GAP-00174-node-Geometry-GeometryNodeGridVoxelize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00174", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00174", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00175", + "gapId": "node:Geometry:GeometryNodeGroup", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00175-node-Geometry-GeometryNodeGroup.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00175.py -- tests/files/web/generated/M18-GAP-00175-node-Geometry-GeometryNodeGroup.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00175", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00175", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00176", + "gapId": "node:Geometry:GeometryNodeImageInfo", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00176-node-Geometry-GeometryNodeImageInfo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00176.py -- tests/files/web/generated/M18-GAP-00176-node-Geometry-GeometryNodeImageInfo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00176", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00176", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00177", + "gapId": "node:Geometry:GeometryNodeImageTexture", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00177-node-Geometry-GeometryNodeImageTexture.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00177.py -- tests/files/web/generated/M18-GAP-00177-node-Geometry-GeometryNodeImageTexture.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00177", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00177", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00178", + "gapId": "node:Geometry:GeometryNodeImportCSV", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00178-node-Geometry-GeometryNodeImportCSV.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00178.py -- tests/files/web/generated/M18-GAP-00178-node-Geometry-GeometryNodeImportCSV.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00178", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00178", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00179", + "gapId": "node:Geometry:GeometryNodeImportOBJ", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00179-node-Geometry-GeometryNodeImportOBJ.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00179.py -- tests/files/web/generated/M18-GAP-00179-node-Geometry-GeometryNodeImportOBJ.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00179", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00179", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00180", + "gapId": "node:Geometry:GeometryNodeImportPLY", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00180-node-Geometry-GeometryNodeImportPLY.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00180.py -- tests/files/web/generated/M18-GAP-00180-node-Geometry-GeometryNodeImportPLY.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00180", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00180", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00181", + "gapId": "node:Geometry:GeometryNodeImportSTL", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00181-node-Geometry-GeometryNodeImportSTL.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00181.py -- tests/files/web/generated/M18-GAP-00181-node-Geometry-GeometryNodeImportSTL.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00181", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00181", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00182", + "gapId": "node:Geometry:GeometryNodeImportText", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00182-node-Geometry-GeometryNodeImportText.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00182.py -- tests/files/web/generated/M18-GAP-00182-node-Geometry-GeometryNodeImportText.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00182", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00182", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00183", + "gapId": "node:Geometry:GeometryNodeImportVDB", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00183-node-Geometry-GeometryNodeImportVDB.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00183.py -- tests/files/web/generated/M18-GAP-00183-node-Geometry-GeometryNodeImportVDB.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00183", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00183", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00184", + "gapId": "node:Geometry:GeometryNodeIndexOfNearest", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00184-node-Geometry-GeometryNodeIndexOfNearest.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00184.py -- tests/files/web/generated/M18-GAP-00184-node-Geometry-GeometryNodeIndexOfNearest.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00184", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00184", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00185", + "gapId": "node:Geometry:GeometryNodeIndexSwitch", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00185-node-Geometry-GeometryNodeIndexSwitch.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00185.py -- tests/files/web/generated/M18-GAP-00185-node-Geometry-GeometryNodeIndexSwitch.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00185", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00185", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00186", + "gapId": "node:Geometry:GeometryNodeInputActiveCamera", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00186-node-Geometry-GeometryNodeInputActiveCamera.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00186.py -- tests/files/web/generated/M18-GAP-00186-node-Geometry-GeometryNodeInputActiveCamera.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00186", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00186", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00187", + "gapId": "node:Geometry:GeometryNodeInputCollection", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00187-node-Geometry-GeometryNodeInputCollection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00187.py -- tests/files/web/generated/M18-GAP-00187-node-Geometry-GeometryNodeInputCollection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00187", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00187", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00188", + "gapId": "node:Geometry:GeometryNodeInputCurveHandlePositions", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00188-node-Geometry-GeometryNodeInputCurveHandlePositions.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00188.py -- tests/files/web/generated/M18-GAP-00188-node-Geometry-GeometryNodeInputCurveHandlePositions.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00188", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00188", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00189", + "gapId": "node:Geometry:GeometryNodeInputCurveTilt", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00189-node-Geometry-GeometryNodeInputCurveTilt.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00189.py -- tests/files/web/generated/M18-GAP-00189-node-Geometry-GeometryNodeInputCurveTilt.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00189", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00189", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00190", + "gapId": "node:Geometry:GeometryNodeInputEdgeSmooth", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00190-node-Geometry-GeometryNodeInputEdgeSmooth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00190.py -- tests/files/web/generated/M18-GAP-00190-node-Geometry-GeometryNodeInputEdgeSmooth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00190", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00190", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00191", + "gapId": "node:Geometry:GeometryNodeInputFont", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00191-node-Geometry-GeometryNodeInputFont.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00191.py -- tests/files/web/generated/M18-GAP-00191-node-Geometry-GeometryNodeInputFont.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00191", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00191", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00192", + "gapId": "node:Geometry:GeometryNodeInputID", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00192-node-Geometry-GeometryNodeInputID.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00192.py -- tests/files/web/generated/M18-GAP-00192-node-Geometry-GeometryNodeInputID.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00192", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00192", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00193", + "gapId": "node:Geometry:GeometryNodeInputImage", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00193-node-Geometry-GeometryNodeInputImage.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00193.py -- tests/files/web/generated/M18-GAP-00193-node-Geometry-GeometryNodeInputImage.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00193", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00193", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00194", + "gapId": "node:Geometry:GeometryNodeInputIndex", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00194-node-Geometry-GeometryNodeInputIndex.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00194.py -- tests/files/web/generated/M18-GAP-00194-node-Geometry-GeometryNodeInputIndex.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00194", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00194", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00195", + "gapId": "node:Geometry:GeometryNodeInputInstanceBounds", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00195-node-Geometry-GeometryNodeInputInstanceBounds.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00195.py -- tests/files/web/generated/M18-GAP-00195-node-Geometry-GeometryNodeInputInstanceBounds.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00195", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00195", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00196", + "gapId": "node:Geometry:GeometryNodeInputInstanceReference", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00196-node-Geometry-GeometryNodeInputInstanceReference.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00196.py -- tests/files/web/generated/M18-GAP-00196-node-Geometry-GeometryNodeInputInstanceReference.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00196", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00196", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00197", + "gapId": "node:Geometry:GeometryNodeInputInstanceRotation", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00197-node-Geometry-GeometryNodeInputInstanceRotation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00197.py -- tests/files/web/generated/M18-GAP-00197-node-Geometry-GeometryNodeInputInstanceRotation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00197", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00197", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00198", + "gapId": "node:Geometry:GeometryNodeInputInstanceScale", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00198-node-Geometry-GeometryNodeInputInstanceScale.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00198.py -- tests/files/web/generated/M18-GAP-00198-node-Geometry-GeometryNodeInputInstanceScale.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00198", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00198", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00199", + "gapId": "node:Geometry:GeometryNodeInputMaterial", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00199-node-Geometry-GeometryNodeInputMaterial.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00199.py -- tests/files/web/generated/M18-GAP-00199-node-Geometry-GeometryNodeInputMaterial.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00199", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00199", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00200", + "gapId": "node:Geometry:GeometryNodeInputMaterialIndex", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00200-node-Geometry-GeometryNodeInputMaterialIndex.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00200.py -- tests/files/web/generated/M18-GAP-00200-node-Geometry-GeometryNodeInputMaterialIndex.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00200", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00200", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00201", + "gapId": "node:Geometry:GeometryNodeInputMeshEdgeAngle", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00201-node-Geometry-GeometryNodeInputMeshEdgeAngle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00201.py -- tests/files/web/generated/M18-GAP-00201-node-Geometry-GeometryNodeInputMeshEdgeAngle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00201", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00201", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00202", + "gapId": "node:Geometry:GeometryNodeInputMeshEdgeNeighbors", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00202-node-Geometry-GeometryNodeInputMeshEdgeNeighbors.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00202.py -- tests/files/web/generated/M18-GAP-00202-node-Geometry-GeometryNodeInputMeshEdgeNeighbors.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00202", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00202", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00203", + "gapId": "node:Geometry:GeometryNodeInputMeshEdgeVertices", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00203-node-Geometry-GeometryNodeInputMeshEdgeVertices.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00203.py -- tests/files/web/generated/M18-GAP-00203-node-Geometry-GeometryNodeInputMeshEdgeVertices.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00203", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00203", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00204", + "gapId": "node:Geometry:GeometryNodeInputMeshFaceArea", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00204-node-Geometry-GeometryNodeInputMeshFaceArea.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00204.py -- tests/files/web/generated/M18-GAP-00204-node-Geometry-GeometryNodeInputMeshFaceArea.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00204", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00204", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00205", + "gapId": "node:Geometry:GeometryNodeInputMeshFaceIsPlanar", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00205-node-Geometry-GeometryNodeInputMeshFaceIsPlanar.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00205.py -- tests/files/web/generated/M18-GAP-00205-node-Geometry-GeometryNodeInputMeshFaceIsPlanar.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00205", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00205", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00206", + "gapId": "node:Geometry:GeometryNodeInputMeshFaceNeighbors", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00206-node-Geometry-GeometryNodeInputMeshFaceNeighbors.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00206.py -- tests/files/web/generated/M18-GAP-00206-node-Geometry-GeometryNodeInputMeshFaceNeighbors.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00206", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00206", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00207", + "gapId": "node:Geometry:GeometryNodeInputMeshIsland", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00207-node-Geometry-GeometryNodeInputMeshIsland.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00207.py -- tests/files/web/generated/M18-GAP-00207-node-Geometry-GeometryNodeInputMeshIsland.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00207", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00207", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00208", + "gapId": "node:Geometry:GeometryNodeInputMeshVertexNeighbors", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00208-node-Geometry-GeometryNodeInputMeshVertexNeighbors.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00208.py -- tests/files/web/generated/M18-GAP-00208-node-Geometry-GeometryNodeInputMeshVertexNeighbors.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00208", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00208", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00209", + "gapId": "node:Geometry:GeometryNodeInputNamedAttribute", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00209-node-Geometry-GeometryNodeInputNamedAttribute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00209.py -- tests/files/web/generated/M18-GAP-00209-node-Geometry-GeometryNodeInputNamedAttribute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00209", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00209", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00210", + "gapId": "node:Geometry:GeometryNodeInputNamedLayerSelection", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00210-node-Geometry-GeometryNodeInputNamedLayerSelection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00210.py -- tests/files/web/generated/M18-GAP-00210-node-Geometry-GeometryNodeInputNamedLayerSelection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00210", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00210", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00211", + "gapId": "node:Geometry:GeometryNodeInputNormal", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00211-node-Geometry-GeometryNodeInputNormal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00211.py -- tests/files/web/generated/M18-GAP-00211-node-Geometry-GeometryNodeInputNormal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00211", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00211", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00212", + "gapId": "node:Geometry:GeometryNodeInputObject", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00212-node-Geometry-GeometryNodeInputObject.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00212.py -- tests/files/web/generated/M18-GAP-00212-node-Geometry-GeometryNodeInputObject.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00212", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00212", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00213", + "gapId": "node:Geometry:GeometryNodeInputPosition", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00213-node-Geometry-GeometryNodeInputPosition.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00213.py -- tests/files/web/generated/M18-GAP-00213-node-Geometry-GeometryNodeInputPosition.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00213", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00213", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00214", + "gapId": "node:Geometry:GeometryNodeInputRadius", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00214-node-Geometry-GeometryNodeInputRadius.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00214.py -- tests/files/web/generated/M18-GAP-00214-node-Geometry-GeometryNodeInputRadius.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00214", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00214", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00215", + "gapId": "node:Geometry:GeometryNodeInputSceneTime", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00215-node-Geometry-GeometryNodeInputSceneTime.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00215.py -- tests/files/web/generated/M18-GAP-00215-node-Geometry-GeometryNodeInputSceneTime.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00215", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00215", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00216", + "gapId": "node:Geometry:GeometryNodeInputShadeSmooth", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00216-node-Geometry-GeometryNodeInputShadeSmooth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00216.py -- tests/files/web/generated/M18-GAP-00216-node-Geometry-GeometryNodeInputShadeSmooth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00216", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00216", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00217", + "gapId": "node:Geometry:GeometryNodeInputShortestEdgePaths", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00217-node-Geometry-GeometryNodeInputShortestEdgePaths.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00217.py -- tests/files/web/generated/M18-GAP-00217-node-Geometry-GeometryNodeInputShortestEdgePaths.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00217", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00217", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00218", + "gapId": "node:Geometry:GeometryNodeInputSplineCyclic", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00218-node-Geometry-GeometryNodeInputSplineCyclic.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00218.py -- tests/files/web/generated/M18-GAP-00218-node-Geometry-GeometryNodeInputSplineCyclic.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00218", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00218", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00219", + "gapId": "node:Geometry:GeometryNodeInputSplineResolution", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00219-node-Geometry-GeometryNodeInputSplineResolution.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00219.py -- tests/files/web/generated/M18-GAP-00219-node-Geometry-GeometryNodeInputSplineResolution.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00219", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00219", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00220", + "gapId": "node:Geometry:GeometryNodeInputTangent", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00220-node-Geometry-GeometryNodeInputTangent.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00220.py -- tests/files/web/generated/M18-GAP-00220-node-Geometry-GeometryNodeInputTangent.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00220", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00220", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00221", + "gapId": "node:Geometry:GeometryNodeInputVoxelIndex", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00221-node-Geometry-GeometryNodeInputVoxelIndex.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00221.py -- tests/files/web/generated/M18-GAP-00221-node-Geometry-GeometryNodeInputVoxelIndex.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00221", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00221", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00222", + "gapId": "node:Geometry:GeometryNodeInstanceOnPoints", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00222-node-Geometry-GeometryNodeInstanceOnPoints.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00222.py -- tests/files/web/generated/M18-GAP-00222-node-Geometry-GeometryNodeInstanceOnPoints.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00222", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00222", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00223", + "gapId": "node:Geometry:GeometryNodeInstanceTransform", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00223-node-Geometry-GeometryNodeInstanceTransform.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00223.py -- tests/files/web/generated/M18-GAP-00223-node-Geometry-GeometryNodeInstanceTransform.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00223", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00223", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00224", + "gapId": "node:Geometry:GeometryNodeInstancesToPoints", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00224-node-Geometry-GeometryNodeInstancesToPoints.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00224.py -- tests/files/web/generated/M18-GAP-00224-node-Geometry-GeometryNodeInstancesToPoints.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00224", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00224", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00225", + "gapId": "node:Geometry:GeometryNodeInterpolateCurves", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00225-node-Geometry-GeometryNodeInterpolateCurves.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00225.py -- tests/files/web/generated/M18-GAP-00225-node-Geometry-GeometryNodeInterpolateCurves.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00225", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00225", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00226", + "gapId": "node:Geometry:GeometryNodeIsViewport", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00226-node-Geometry-GeometryNodeIsViewport.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00226.py -- tests/files/web/generated/M18-GAP-00226-node-Geometry-GeometryNodeIsViewport.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00226", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00226", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00227", + "gapId": "node:Geometry:GeometryNodeJoinGeometry", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00227-node-Geometry-GeometryNodeJoinGeometry.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00227.py -- tests/files/web/generated/M18-GAP-00227-node-Geometry-GeometryNodeJoinGeometry.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00227", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00227", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00228", + "gapId": "node:Geometry:GeometryNodeListGetItem", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00228-node-Geometry-GeometryNodeListGetItem.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00228.py -- tests/files/web/generated/M18-GAP-00228-node-Geometry-GeometryNodeListGetItem.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00228", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00228", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00229", + "gapId": "node:Geometry:GeometryNodeListLength", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00229-node-Geometry-GeometryNodeListLength.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00229.py -- tests/files/web/generated/M18-GAP-00229-node-Geometry-GeometryNodeListLength.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00229", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00229", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00230", + "gapId": "node:Geometry:GeometryNodeMaterialSelection", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00230-node-Geometry-GeometryNodeMaterialSelection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00230.py -- tests/files/web/generated/M18-GAP-00230-node-Geometry-GeometryNodeMaterialSelection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00230", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00230", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00231", + "gapId": "node:Geometry:GeometryNodeMenuSwitch", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00231-node-Geometry-GeometryNodeMenuSwitch.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00231.py -- tests/files/web/generated/M18-GAP-00231-node-Geometry-GeometryNodeMenuSwitch.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00231", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00231", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00232", + "gapId": "node:Geometry:GeometryNodeMergeByDistance", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00232-node-Geometry-GeometryNodeMergeByDistance.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00232.py -- tests/files/web/generated/M18-GAP-00232-node-Geometry-GeometryNodeMergeByDistance.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00232", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00232", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00233", + "gapId": "node:Geometry:GeometryNodeMergeLayers", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00233-node-Geometry-GeometryNodeMergeLayers.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00233.py -- tests/files/web/generated/M18-GAP-00233-node-Geometry-GeometryNodeMergeLayers.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00233", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00233", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00234", + "gapId": "node:Geometry:GeometryNodeMergePoints", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00234-node-Geometry-GeometryNodeMergePoints.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00234.py -- tests/files/web/generated/M18-GAP-00234-node-Geometry-GeometryNodeMergePoints.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00234", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00234", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00235", + "gapId": "node:Geometry:GeometryNodeMeshBevel", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00235-node-Geometry-GeometryNodeMeshBevel.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00235.py -- tests/files/web/generated/M18-GAP-00235-node-Geometry-GeometryNodeMeshBevel.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00235", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00235", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00236", + "gapId": "node:Geometry:GeometryNodeMeshBoolean", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00236-node-Geometry-GeometryNodeMeshBoolean.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00236.py -- tests/files/web/generated/M18-GAP-00236-node-Geometry-GeometryNodeMeshBoolean.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00236", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00236", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00237", + "gapId": "node:Geometry:GeometryNodeMeshCircle", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00237-node-Geometry-GeometryNodeMeshCircle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00237.py -- tests/files/web/generated/M18-GAP-00237-node-Geometry-GeometryNodeMeshCircle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00237", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00237", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00238", + "gapId": "node:Geometry:GeometryNodeMeshCone", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00238-node-Geometry-GeometryNodeMeshCone.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00238.py -- tests/files/web/generated/M18-GAP-00238-node-Geometry-GeometryNodeMeshCone.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00238", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00238", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00239", + "gapId": "node:Geometry:GeometryNodeMeshCube", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00239-node-Geometry-GeometryNodeMeshCube.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00239.py -- tests/files/web/generated/M18-GAP-00239-node-Geometry-GeometryNodeMeshCube.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00239", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00239", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00240", + "gapId": "node:Geometry:GeometryNodeMeshCylinder", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00240-node-Geometry-GeometryNodeMeshCylinder.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00240.py -- tests/files/web/generated/M18-GAP-00240-node-Geometry-GeometryNodeMeshCylinder.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00240", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00240", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00241", + "gapId": "node:Geometry:GeometryNodeMeshFaceSetBoundaries", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00241-node-Geometry-GeometryNodeMeshFaceSetBoundaries.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00241.py -- tests/files/web/generated/M18-GAP-00241-node-Geometry-GeometryNodeMeshFaceSetBoundaries.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00241", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00241", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00242", + "gapId": "node:Geometry:GeometryNodeMeshGrid", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00242-node-Geometry-GeometryNodeMeshGrid.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00242.py -- tests/files/web/generated/M18-GAP-00242-node-Geometry-GeometryNodeMeshGrid.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00242", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00242", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00243", + "gapId": "node:Geometry:GeometryNodeMeshIcoSphere", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00243-node-Geometry-GeometryNodeMeshIcoSphere.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00243.py -- tests/files/web/generated/M18-GAP-00243-node-Geometry-GeometryNodeMeshIcoSphere.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00243", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00243", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00244", + "gapId": "node:Geometry:GeometryNodeMeshLine", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00244-node-Geometry-GeometryNodeMeshLine.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00244.py -- tests/files/web/generated/M18-GAP-00244-node-Geometry-GeometryNodeMeshLine.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00244", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00244", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00245", + "gapId": "node:Geometry:GeometryNodeMeshToCurve", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00245-node-Geometry-GeometryNodeMeshToCurve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00245.py -- tests/files/web/generated/M18-GAP-00245-node-Geometry-GeometryNodeMeshToCurve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00245", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00245", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00246", + "gapId": "node:Geometry:GeometryNodeMeshToDensityGrid", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00246-node-Geometry-GeometryNodeMeshToDensityGrid.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00246.py -- tests/files/web/generated/M18-GAP-00246-node-Geometry-GeometryNodeMeshToDensityGrid.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00246", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00246", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00247", + "gapId": "node:Geometry:GeometryNodeMeshToPoints", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00247-node-Geometry-GeometryNodeMeshToPoints.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00247.py -- tests/files/web/generated/M18-GAP-00247-node-Geometry-GeometryNodeMeshToPoints.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00247", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00247", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00248", + "gapId": "node:Geometry:GeometryNodeMeshToSDFGrid", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00248-node-Geometry-GeometryNodeMeshToSDFGrid.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00248.py -- tests/files/web/generated/M18-GAP-00248-node-Geometry-GeometryNodeMeshToSDFGrid.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00248", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00248", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00249", + "gapId": "node:Geometry:GeometryNodeMeshToVolume", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00249-node-Geometry-GeometryNodeMeshToVolume.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00249.py -- tests/files/web/generated/M18-GAP-00249-node-Geometry-GeometryNodeMeshToVolume.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00249", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00249", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00250", + "gapId": "node:Geometry:GeometryNodeMeshUVSphere", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00250-node-Geometry-GeometryNodeMeshUVSphere.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00250.py -- tests/files/web/generated/M18-GAP-00250-node-Geometry-GeometryNodeMeshUVSphere.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00250", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00250", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00251", + "gapId": "node:Geometry:GeometryNodeObjectInfo", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00251-node-Geometry-GeometryNodeObjectInfo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00251.py -- tests/files/web/generated/M18-GAP-00251-node-Geometry-GeometryNodeObjectInfo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00251", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00251", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00252", + "gapId": "node:Geometry:GeometryNodeOffsetCornerInFace", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00252-node-Geometry-GeometryNodeOffsetCornerInFace.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00252.py -- tests/files/web/generated/M18-GAP-00252-node-Geometry-GeometryNodeOffsetCornerInFace.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00252", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00252", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00253", + "gapId": "node:Geometry:GeometryNodeOffsetPointInCurve", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00253-node-Geometry-GeometryNodeOffsetPointInCurve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00253.py -- tests/files/web/generated/M18-GAP-00253-node-Geometry-GeometryNodeOffsetPointInCurve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00253", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00253", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00254", + "gapId": "node:Geometry:GeometryNodePoints", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00254-node-Geometry-GeometryNodePoints.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00254.py -- tests/files/web/generated/M18-GAP-00254-node-Geometry-GeometryNodePoints.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00254", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00254", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00255", + "gapId": "node:Geometry:GeometryNodePointsOfCurve", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00255-node-Geometry-GeometryNodePointsOfCurve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00255.py -- tests/files/web/generated/M18-GAP-00255-node-Geometry-GeometryNodePointsOfCurve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00255", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00255", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00256", + "gapId": "node:Geometry:GeometryNodePointsToCurves", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00256-node-Geometry-GeometryNodePointsToCurves.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00256.py -- tests/files/web/generated/M18-GAP-00256-node-Geometry-GeometryNodePointsToCurves.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00256", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00256", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00257", + "gapId": "node:Geometry:GeometryNodePointsToSDFGrid", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00257-node-Geometry-GeometryNodePointsToSDFGrid.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00257.py -- tests/files/web/generated/M18-GAP-00257-node-Geometry-GeometryNodePointsToSDFGrid.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00257", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00257", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00258", + "gapId": "node:Geometry:GeometryNodePointsToVertices", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00258-node-Geometry-GeometryNodePointsToVertices.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00258.py -- tests/files/web/generated/M18-GAP-00258-node-Geometry-GeometryNodePointsToVertices.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00258", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00258", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00259", + "gapId": "node:Geometry:GeometryNodePointsToVolume", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00259-node-Geometry-GeometryNodePointsToVolume.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00259.py -- tests/files/web/generated/M18-GAP-00259-node-Geometry-GeometryNodePointsToVolume.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00259", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00259", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00260", + "gapId": "node:Geometry:GeometryNodeProximity", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00260-node-Geometry-GeometryNodeProximity.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00260.py -- tests/files/web/generated/M18-GAP-00260-node-Geometry-GeometryNodeProximity.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00260", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00260", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00261", + "gapId": "node:Geometry:GeometryNodeRaycast", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00261-node-Geometry-GeometryNodeRaycast.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00261.py -- tests/files/web/generated/M18-GAP-00261-node-Geometry-GeometryNodeRaycast.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00261", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00261", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00262", + "gapId": "node:Geometry:GeometryNodeRealizeInstances", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00262-node-Geometry-GeometryNodeRealizeInstances.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00262.py -- tests/files/web/generated/M18-GAP-00262-node-Geometry-GeometryNodeRealizeInstances.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00262", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00262", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00263", + "gapId": "node:Geometry:GeometryNodeRemoveAttribute", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00263-node-Geometry-GeometryNodeRemoveAttribute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00263.py -- tests/files/web/generated/M18-GAP-00263-node-Geometry-GeometryNodeRemoveAttribute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00263", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00263", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00264", + "gapId": "node:Geometry:GeometryNodeRenameAttribute", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00264-node-Geometry-GeometryNodeRenameAttribute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00264.py -- tests/files/web/generated/M18-GAP-00264-node-Geometry-GeometryNodeRenameAttribute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00264", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00264", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00265", + "gapId": "node:Geometry:GeometryNodeRepeatInput", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00265-node-Geometry-GeometryNodeRepeatInput.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00265.py -- tests/files/web/generated/M18-GAP-00265-node-Geometry-GeometryNodeRepeatInput.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00265", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00265", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00266", + "gapId": "node:Geometry:GeometryNodeRepeatOutput", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00266-node-Geometry-GeometryNodeRepeatOutput.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00266.py -- tests/files/web/generated/M18-GAP-00266-node-Geometry-GeometryNodeRepeatOutput.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00266", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00266", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00267", + "gapId": "node:Geometry:GeometryNodeReplaceMaterial", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00267-node-Geometry-GeometryNodeReplaceMaterial.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00267.py -- tests/files/web/generated/M18-GAP-00267-node-Geometry-GeometryNodeReplaceMaterial.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00267", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00267", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00268", + "gapId": "node:Geometry:GeometryNodeResampleCurve", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00268-node-Geometry-GeometryNodeResampleCurve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00268.py -- tests/files/web/generated/M18-GAP-00268-node-Geometry-GeometryNodeResampleCurve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00268", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00268", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00269", + "gapId": "node:Geometry:GeometryNodeReverseCurve", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00269-node-Geometry-GeometryNodeReverseCurve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00269.py -- tests/files/web/generated/M18-GAP-00269-node-Geometry-GeometryNodeReverseCurve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00269", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00269", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00270", + "gapId": "node:Geometry:GeometryNodeRotateInstances", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00270-node-Geometry-GeometryNodeRotateInstances.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00270.py -- tests/files/web/generated/M18-GAP-00270-node-Geometry-GeometryNodeRotateInstances.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00270", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00270", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00271", + "gapId": "node:Geometry:GeometryNodeSDFGridBoolean", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00271-node-Geometry-GeometryNodeSDFGridBoolean.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00271.py -- tests/files/web/generated/M18-GAP-00271-node-Geometry-GeometryNodeSDFGridBoolean.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00271", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00271", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00272", + "gapId": "node:Geometry:GeometryNodeSDFGridFillet", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00272-node-Geometry-GeometryNodeSDFGridFillet.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00272.py -- tests/files/web/generated/M18-GAP-00272-node-Geometry-GeometryNodeSDFGridFillet.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00272", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00272", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00273", + "gapId": "node:Geometry:GeometryNodeSDFGridLaplacian", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00273-node-Geometry-GeometryNodeSDFGridLaplacian.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00273.py -- tests/files/web/generated/M18-GAP-00273-node-Geometry-GeometryNodeSDFGridLaplacian.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00273", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00273", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00274", + "gapId": "node:Geometry:GeometryNodeSDFGridMean", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00274-node-Geometry-GeometryNodeSDFGridMean.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00274.py -- tests/files/web/generated/M18-GAP-00274-node-Geometry-GeometryNodeSDFGridMean.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00274", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00274", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00275", + "gapId": "node:Geometry:GeometryNodeSDFGridMeanCurvature", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00275-node-Geometry-GeometryNodeSDFGridMeanCurvature.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00275.py -- tests/files/web/generated/M18-GAP-00275-node-Geometry-GeometryNodeSDFGridMeanCurvature.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00275", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00275", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00276", + "gapId": "node:Geometry:GeometryNodeSDFGridMedian", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00276-node-Geometry-GeometryNodeSDFGridMedian.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00276.py -- tests/files/web/generated/M18-GAP-00276-node-Geometry-GeometryNodeSDFGridMedian.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00276", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00276", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00277", + "gapId": "node:Geometry:GeometryNodeSDFGridOffset", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00277-node-Geometry-GeometryNodeSDFGridOffset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00277.py -- tests/files/web/generated/M18-GAP-00277-node-Geometry-GeometryNodeSDFGridOffset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00277", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00277", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00278", + "gapId": "node:Geometry:GeometryNodeSampleCurve", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00278-node-Geometry-GeometryNodeSampleCurve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00278.py -- tests/files/web/generated/M18-GAP-00278-node-Geometry-GeometryNodeSampleCurve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00278", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00278", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00279", + "gapId": "node:Geometry:GeometryNodeSampleGrid", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00279-node-Geometry-GeometryNodeSampleGrid.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00279.py -- tests/files/web/generated/M18-GAP-00279-node-Geometry-GeometryNodeSampleGrid.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00279", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00279", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00280", + "gapId": "node:Geometry:GeometryNodeSampleGridIndex", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00280-node-Geometry-GeometryNodeSampleGridIndex.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00280.py -- tests/files/web/generated/M18-GAP-00280-node-Geometry-GeometryNodeSampleGridIndex.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00280", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00280", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00281", + "gapId": "node:Geometry:GeometryNodeSampleIndex", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00281-node-Geometry-GeometryNodeSampleIndex.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00281.py -- tests/files/web/generated/M18-GAP-00281-node-Geometry-GeometryNodeSampleIndex.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00281", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00281", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00282", + "gapId": "node:Geometry:GeometryNodeSampleNearest", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00282-node-Geometry-GeometryNodeSampleNearest.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00282.py -- tests/files/web/generated/M18-GAP-00282-node-Geometry-GeometryNodeSampleNearest.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00282", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00282", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00283", + "gapId": "node:Geometry:GeometryNodeSampleNearestSurface", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00283-node-Geometry-GeometryNodeSampleNearestSurface.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00283.py -- tests/files/web/generated/M18-GAP-00283-node-Geometry-GeometryNodeSampleNearestSurface.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00283", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00283", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00284", + "gapId": "node:Geometry:GeometryNodeSampleSoundFrequencies", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00284-node-Geometry-GeometryNodeSampleSoundFrequencies.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00284.py -- tests/files/web/generated/M18-GAP-00284-node-Geometry-GeometryNodeSampleSoundFrequencies.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00284", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00284", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00285", + "gapId": "node:Geometry:GeometryNodeSampleUVSurface", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00285-node-Geometry-GeometryNodeSampleUVSurface.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00285.py -- tests/files/web/generated/M18-GAP-00285-node-Geometry-GeometryNodeSampleUVSurface.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00285", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00285", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00286", + "gapId": "node:Geometry:GeometryNodeScaleElements", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00286-node-Geometry-GeometryNodeScaleElements.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00286.py -- tests/files/web/generated/M18-GAP-00286-node-Geometry-GeometryNodeScaleElements.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00286", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00286", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00287", + "gapId": "node:Geometry:GeometryNodeScaleInstances", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00287-node-Geometry-GeometryNodeScaleInstances.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00287.py -- tests/files/web/generated/M18-GAP-00287-node-Geometry-GeometryNodeScaleInstances.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00287", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00287", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00288", + "gapId": "node:Geometry:GeometryNodeSelfObject", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00288-node-Geometry-GeometryNodeSelfObject.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00288.py -- tests/files/web/generated/M18-GAP-00288-node-Geometry-GeometryNodeSelfObject.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00288", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00288", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00289", + "gapId": "node:Geometry:GeometryNodeSeparateComponents", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00289-node-Geometry-GeometryNodeSeparateComponents.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00289.py -- tests/files/web/generated/M18-GAP-00289-node-Geometry-GeometryNodeSeparateComponents.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00289", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00289", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00290", + "gapId": "node:Geometry:GeometryNodeSeparateGeometry", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00290-node-Geometry-GeometryNodeSeparateGeometry.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00290.py -- tests/files/web/generated/M18-GAP-00290-node-Geometry-GeometryNodeSeparateGeometry.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00290", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00290", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00291", + "gapId": "node:Geometry:GeometryNodeSetCurveHandlePositions", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00291-node-Geometry-GeometryNodeSetCurveHandlePositions.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00291.py -- tests/files/web/generated/M18-GAP-00291-node-Geometry-GeometryNodeSetCurveHandlePositions.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00291", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00291", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00292", + "gapId": "node:Geometry:GeometryNodeSetCurveNormal", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00292-node-Geometry-GeometryNodeSetCurveNormal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00292.py -- tests/files/web/generated/M18-GAP-00292-node-Geometry-GeometryNodeSetCurveNormal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00292", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00292", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00293", + "gapId": "node:Geometry:GeometryNodeSetCurveRadius", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00293-node-Geometry-GeometryNodeSetCurveRadius.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00293.py -- tests/files/web/generated/M18-GAP-00293-node-Geometry-GeometryNodeSetCurveRadius.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00293", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00293", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00294", + "gapId": "node:Geometry:GeometryNodeSetCurveTilt", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00294-node-Geometry-GeometryNodeSetCurveTilt.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00294.py -- tests/files/web/generated/M18-GAP-00294-node-Geometry-GeometryNodeSetCurveTilt.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00294", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00294", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00295", + "gapId": "node:Geometry:GeometryNodeSetGeometryBundle", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00295-node-Geometry-GeometryNodeSetGeometryBundle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00295.py -- tests/files/web/generated/M18-GAP-00295-node-Geometry-GeometryNodeSetGeometryBundle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00295", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00295", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00296", + "gapId": "node:Geometry:GeometryNodeSetGeometryName", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00296-node-Geometry-GeometryNodeSetGeometryName.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00296.py -- tests/files/web/generated/M18-GAP-00296-node-Geometry-GeometryNodeSetGeometryName.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00296", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00296", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00297", + "gapId": "node:Geometry:GeometryNodeSetGreasePencilColor", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00297-node-Geometry-GeometryNodeSetGreasePencilColor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00297.py -- tests/files/web/generated/M18-GAP-00297-node-Geometry-GeometryNodeSetGreasePencilColor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00297", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00297", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00298", + "gapId": "node:Geometry:GeometryNodeSetGreasePencilDepth", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00298-node-Geometry-GeometryNodeSetGreasePencilDepth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00298.py -- tests/files/web/generated/M18-GAP-00298-node-Geometry-GeometryNodeSetGreasePencilDepth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00298", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00298", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00299", + "gapId": "node:Geometry:GeometryNodeSetGreasePencilSoftness", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00299-node-Geometry-GeometryNodeSetGreasePencilSoftness.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00299.py -- tests/files/web/generated/M18-GAP-00299-node-Geometry-GeometryNodeSetGreasePencilSoftness.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00299", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00299", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00300", + "gapId": "node:Geometry:GeometryNodeSetGridBackground", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00300-node-Geometry-GeometryNodeSetGridBackground.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00300.py -- tests/files/web/generated/M18-GAP-00300-node-Geometry-GeometryNodeSetGridBackground.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00300", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00300", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00301", + "gapId": "node:Geometry:GeometryNodeSetGridTransform", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00301-node-Geometry-GeometryNodeSetGridTransform.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00301.py -- tests/files/web/generated/M18-GAP-00301-node-Geometry-GeometryNodeSetGridTransform.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00301", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00301", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00302", + "gapId": "node:Geometry:GeometryNodeSetID", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00302-node-Geometry-GeometryNodeSetID.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00302.py -- tests/files/web/generated/M18-GAP-00302-node-Geometry-GeometryNodeSetID.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00302", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00302", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00303", + "gapId": "node:Geometry:GeometryNodeSetInstanceTransform", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00303-node-Geometry-GeometryNodeSetInstanceTransform.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00303.py -- tests/files/web/generated/M18-GAP-00303-node-Geometry-GeometryNodeSetInstanceTransform.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00303", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00303", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00304", + "gapId": "node:Geometry:GeometryNodeSetMaterial", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00304-node-Geometry-GeometryNodeSetMaterial.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00304.py -- tests/files/web/generated/M18-GAP-00304-node-Geometry-GeometryNodeSetMaterial.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00304", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00304", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00305", + "gapId": "node:Geometry:GeometryNodeSetMaterialIndex", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00305-node-Geometry-GeometryNodeSetMaterialIndex.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00305.py -- tests/files/web/generated/M18-GAP-00305-node-Geometry-GeometryNodeSetMaterialIndex.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00305", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00305", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00306", + "gapId": "node:Geometry:GeometryNodeSetMeshNormal", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00306-node-Geometry-GeometryNodeSetMeshNormal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00306.py -- tests/files/web/generated/M18-GAP-00306-node-Geometry-GeometryNodeSetMeshNormal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00306", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00306", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00307", + "gapId": "node:Geometry:GeometryNodeSetNURBSOrder", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00307-node-Geometry-GeometryNodeSetNURBSOrder.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00307.py -- tests/files/web/generated/M18-GAP-00307-node-Geometry-GeometryNodeSetNURBSOrder.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00307", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00307", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00308", + "gapId": "node:Geometry:GeometryNodeSetNURBSWeight", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00308-node-Geometry-GeometryNodeSetNURBSWeight.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00308.py -- tests/files/web/generated/M18-GAP-00308-node-Geometry-GeometryNodeSetNURBSWeight.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00308", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00308", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00309", + "gapId": "node:Geometry:GeometryNodeSetPointRadius", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00309-node-Geometry-GeometryNodeSetPointRadius.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00309.py -- tests/files/web/generated/M18-GAP-00309-node-Geometry-GeometryNodeSetPointRadius.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00309", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00309", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00310", + "gapId": "node:Geometry:GeometryNodeSetPosition", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00310-node-Geometry-GeometryNodeSetPosition.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00310.py -- tests/files/web/generated/M18-GAP-00310-node-Geometry-GeometryNodeSetPosition.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00310", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00310", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00311", + "gapId": "node:Geometry:GeometryNodeSetShadeSmooth", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00311-node-Geometry-GeometryNodeSetShadeSmooth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00311.py -- tests/files/web/generated/M18-GAP-00311-node-Geometry-GeometryNodeSetShadeSmooth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00311", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00311", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00312", + "gapId": "node:Geometry:GeometryNodeSetSplineCyclic", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00312-node-Geometry-GeometryNodeSetSplineCyclic.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00312.py -- tests/files/web/generated/M18-GAP-00312-node-Geometry-GeometryNodeSetSplineCyclic.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00312", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00312", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00313", + "gapId": "node:Geometry:GeometryNodeSetSplineResolution", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00313-node-Geometry-GeometryNodeSetSplineResolution.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00313.py -- tests/files/web/generated/M18-GAP-00313-node-Geometry-GeometryNodeSetSplineResolution.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00313", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00313", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00314", + "gapId": "node:Geometry:GeometryNodeSimulationInput", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00314-node-Geometry-GeometryNodeSimulationInput.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00314.py -- tests/files/web/generated/M18-GAP-00314-node-Geometry-GeometryNodeSimulationInput.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00314", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00314", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00315", + "gapId": "node:Geometry:GeometryNodeSimulationOutput", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00315-node-Geometry-GeometryNodeSimulationOutput.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00315.py -- tests/files/web/generated/M18-GAP-00315-node-Geometry-GeometryNodeSimulationOutput.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00315", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00315", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00316", + "gapId": "node:Geometry:GeometryNodeSortElements", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00316-node-Geometry-GeometryNodeSortElements.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00316.py -- tests/files/web/generated/M18-GAP-00316-node-Geometry-GeometryNodeSortElements.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00316", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00316", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00317", + "gapId": "node:Geometry:GeometryNodeSortList", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00317-node-Geometry-GeometryNodeSortList.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00317.py -- tests/files/web/generated/M18-GAP-00317-node-Geometry-GeometryNodeSortList.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00317", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00317", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00318", + "gapId": "node:Geometry:GeometryNodeSplineLength", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00318-node-Geometry-GeometryNodeSplineLength.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00318.py -- tests/files/web/generated/M18-GAP-00318-node-Geometry-GeometryNodeSplineLength.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00318", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00318", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00319", + "gapId": "node:Geometry:GeometryNodeSplineParameter", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00319-node-Geometry-GeometryNodeSplineParameter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00319.py -- tests/files/web/generated/M18-GAP-00319-node-Geometry-GeometryNodeSplineParameter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00319", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00319", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00320", + "gapId": "node:Geometry:GeometryNodeSplitEdges", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00320-node-Geometry-GeometryNodeSplitEdges.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00320.py -- tests/files/web/generated/M18-GAP-00320-node-Geometry-GeometryNodeSplitEdges.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00320", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00320", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00321", + "gapId": "node:Geometry:GeometryNodeSplitToInstances", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00321-node-Geometry-GeometryNodeSplitToInstances.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00321.py -- tests/files/web/generated/M18-GAP-00321-node-Geometry-GeometryNodeSplitToInstances.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00321", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00321", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00322", + "gapId": "node:Geometry:GeometryNodeStoreNamedAttribute", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00322-node-Geometry-GeometryNodeStoreNamedAttribute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00322.py -- tests/files/web/generated/M18-GAP-00322-node-Geometry-GeometryNodeStoreNamedAttribute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00322", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00322", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00323", + "gapId": "node:Geometry:GeometryNodeStoreNamedGrid", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00323-node-Geometry-GeometryNodeStoreNamedGrid.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00323.py -- tests/files/web/generated/M18-GAP-00323-node-Geometry-GeometryNodeStoreNamedGrid.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00323", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00323", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00324", + "gapId": "node:Geometry:GeometryNodeStringJoin", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00324-node-Geometry-GeometryNodeStringJoin.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00324.py -- tests/files/web/generated/M18-GAP-00324-node-Geometry-GeometryNodeStringJoin.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00324", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00324", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00325", + "gapId": "node:Geometry:GeometryNodeStringToCurves", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00325-node-Geometry-GeometryNodeStringToCurves.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00325.py -- tests/files/web/generated/M18-GAP-00325-node-Geometry-GeometryNodeStringToCurves.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00325", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00325", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00326", + "gapId": "node:Geometry:GeometryNodeSubdivideCurve", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00326-node-Geometry-GeometryNodeSubdivideCurve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00326.py -- tests/files/web/generated/M18-GAP-00326-node-Geometry-GeometryNodeSubdivideCurve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00326", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00326", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00327", + "gapId": "node:Geometry:GeometryNodeSubdivideMesh", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00327-node-Geometry-GeometryNodeSubdivideMesh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00327.py -- tests/files/web/generated/M18-GAP-00327-node-Geometry-GeometryNodeSubdivideMesh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00327", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00327", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00328", + "gapId": "node:Geometry:GeometryNodeSubdivisionSurface", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00328-node-Geometry-GeometryNodeSubdivisionSurface.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00328.py -- tests/files/web/generated/M18-GAP-00328-node-Geometry-GeometryNodeSubdivisionSurface.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00328", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00328", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00329", + "gapId": "node:Geometry:GeometryNodeSwitch", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00329-node-Geometry-GeometryNodeSwitch.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00329.py -- tests/files/web/generated/M18-GAP-00329-node-Geometry-GeometryNodeSwitch.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00329", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00329", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00330", + "gapId": "node:Geometry:GeometryNodeTagFilter", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00330-node-Geometry-GeometryNodeTagFilter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00330.py -- tests/files/web/generated/M18-GAP-00330-node-Geometry-GeometryNodeTagFilter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00330", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00330", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00331", + "gapId": "node:Geometry:GeometryNodeTool3DCursor", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00331-node-Geometry-GeometryNodeTool3DCursor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00331.py -- tests/files/web/generated/M18-GAP-00331-node-Geometry-GeometryNodeTool3DCursor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00331", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00331", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00332", + "gapId": "node:Geometry:GeometryNodeToolActiveElement", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00332-node-Geometry-GeometryNodeToolActiveElement.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00332.py -- tests/files/web/generated/M18-GAP-00332-node-Geometry-GeometryNodeToolActiveElement.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00332", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00332", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00333", + "gapId": "node:Geometry:GeometryNodeToolFaceSet", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00333-node-Geometry-GeometryNodeToolFaceSet.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00333.py -- tests/files/web/generated/M18-GAP-00333-node-Geometry-GeometryNodeToolFaceSet.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00333", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00333", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00334", + "gapId": "node:Geometry:GeometryNodeToolMousePosition", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00334-node-Geometry-GeometryNodeToolMousePosition.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00334.py -- tests/files/web/generated/M18-GAP-00334-node-Geometry-GeometryNodeToolMousePosition.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00334", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00334", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00335", + "gapId": "node:Geometry:GeometryNodeToolSelection", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00335-node-Geometry-GeometryNodeToolSelection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00335.py -- tests/files/web/generated/M18-GAP-00335-node-Geometry-GeometryNodeToolSelection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00335", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00335", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00336", + "gapId": "node:Geometry:GeometryNodeToolSetFaceSet", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00336-node-Geometry-GeometryNodeToolSetFaceSet.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00336.py -- tests/files/web/generated/M18-GAP-00336-node-Geometry-GeometryNodeToolSetFaceSet.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00336", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00336", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00337", + "gapId": "node:Geometry:GeometryNodeToolSetSelection", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00337-node-Geometry-GeometryNodeToolSetSelection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00337.py -- tests/files/web/generated/M18-GAP-00337-node-Geometry-GeometryNodeToolSetSelection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00337", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00337", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00338", + "gapId": "node:Geometry:GeometryNodeTransferAttributes", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00338-node-Geometry-GeometryNodeTransferAttributes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00338.py -- tests/files/web/generated/M18-GAP-00338-node-Geometry-GeometryNodeTransferAttributes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00338", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00338", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00339", + "gapId": "node:Geometry:GeometryNodeTransform", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00339-node-Geometry-GeometryNodeTransform.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00339.py -- tests/files/web/generated/M18-GAP-00339-node-Geometry-GeometryNodeTransform.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00339", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00339", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00340", + "gapId": "node:Geometry:GeometryNodeTranslateInstances", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00340-node-Geometry-GeometryNodeTranslateInstances.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00340.py -- tests/files/web/generated/M18-GAP-00340-node-Geometry-GeometryNodeTranslateInstances.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00340", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00340", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00341", + "gapId": "node:Geometry:GeometryNodeTriangulate", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00341-node-Geometry-GeometryNodeTriangulate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00341.py -- tests/files/web/generated/M18-GAP-00341-node-Geometry-GeometryNodeTriangulate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00341", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00341", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00342", + "gapId": "node:Geometry:GeometryNodeTrimCurve", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00342-node-Geometry-GeometryNodeTrimCurve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00342.py -- tests/files/web/generated/M18-GAP-00342-node-Geometry-GeometryNodeTrimCurve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00342", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00342", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00343", + "gapId": "node:Geometry:GeometryNodeUVPackIslands", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00343-node-Geometry-GeometryNodeUVPackIslands.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00343.py -- tests/files/web/generated/M18-GAP-00343-node-Geometry-GeometryNodeUVPackIslands.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00343", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00343", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00344", + "gapId": "node:Geometry:GeometryNodeUVTangent", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00344-node-Geometry-GeometryNodeUVTangent.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00344.py -- tests/files/web/generated/M18-GAP-00344-node-Geometry-GeometryNodeUVTangent.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00344", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00344", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00345", + "gapId": "node:Geometry:GeometryNodeUVUnwrap", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00345-node-Geometry-GeometryNodeUVUnwrap.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00345.py -- tests/files/web/generated/M18-GAP-00345-node-Geometry-GeometryNodeUVUnwrap.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00345", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00345", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00346", + "gapId": "node:Geometry:GeometryNodeVertexOfCorner", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00346-node-Geometry-GeometryNodeVertexOfCorner.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00346.py -- tests/files/web/generated/M18-GAP-00346-node-Geometry-GeometryNodeVertexOfCorner.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00346", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00346", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00347", + "gapId": "node:Geometry:GeometryNodeViewer", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00347-node-Geometry-GeometryNodeViewer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00347.py -- tests/files/web/generated/M18-GAP-00347-node-Geometry-GeometryNodeViewer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00347", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00347", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00348", + "gapId": "node:Geometry:GeometryNodeViewportTransform", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00348-node-Geometry-GeometryNodeViewportTransform.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00348.py -- tests/files/web/generated/M18-GAP-00348-node-Geometry-GeometryNodeViewportTransform.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00348", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00348", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00349", + "gapId": "node:Geometry:GeometryNodeVolumeCube", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00349-node-Geometry-GeometryNodeVolumeCube.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00349.py -- tests/files/web/generated/M18-GAP-00349-node-Geometry-GeometryNodeVolumeCube.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00349", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00349", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00350", + "gapId": "node:Geometry:GeometryNodeVolumeToMesh", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00350-node-Geometry-GeometryNodeVolumeToMesh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00350.py -- tests/files/web/generated/M18-GAP-00350-node-Geometry-GeometryNodeVolumeToMesh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00350", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00350", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00351", + "gapId": "node:Geometry:GeometryNodeWarning", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00351-node-Geometry-GeometryNodeWarning.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00351.py -- tests/files/web/generated/M18-GAP-00351-node-Geometry-GeometryNodeWarning.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00351", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00351", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00352", + "gapId": "node:Geometry:GeometryNodeXPBDSolver", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00352-node-Geometry-GeometryNodeXPBDSolver.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00352.py -- tests/files/web/generated/M18-GAP-00352-node-Geometry-GeometryNodeXPBDSolver.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00352", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00352", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00353", + "gapId": "node:Shader:ShaderNodeAddShader", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00353-node-Shader-ShaderNodeAddShader.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00353.py -- tests/files/web/generated/M18-GAP-00353-node-Shader-ShaderNodeAddShader.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00353", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00353", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00354", + "gapId": "node:Shader:ShaderNodeAmbientOcclusion", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00354-node-Shader-ShaderNodeAmbientOcclusion.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00354.py -- tests/files/web/generated/M18-GAP-00354-node-Shader-ShaderNodeAmbientOcclusion.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00354", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00354", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00355", + "gapId": "node:Shader:ShaderNodeAttribute", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00355-node-Shader-ShaderNodeAttribute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00355.py -- tests/files/web/generated/M18-GAP-00355-node-Shader-ShaderNodeAttribute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00355", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00355", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00356", + "gapId": "node:Shader:ShaderNodeBackground", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00356-node-Shader-ShaderNodeBackground.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00356.py -- tests/files/web/generated/M18-GAP-00356-node-Shader-ShaderNodeBackground.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00356", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00356", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00357", + "gapId": "node:Shader:ShaderNodeBevel", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00357-node-Shader-ShaderNodeBevel.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00357.py -- tests/files/web/generated/M18-GAP-00357-node-Shader-ShaderNodeBevel.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00357", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00357", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00358", + "gapId": "node:Shader:ShaderNodeBlackbody", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00358-node-Shader-ShaderNodeBlackbody.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00358.py -- tests/files/web/generated/M18-GAP-00358-node-Shader-ShaderNodeBlackbody.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00358", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00358", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00359", + "gapId": "node:Shader:ShaderNodeBrightContrast", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00359-node-Shader-ShaderNodeBrightContrast.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00359.py -- tests/files/web/generated/M18-GAP-00359-node-Shader-ShaderNodeBrightContrast.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00359", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00359", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00360", + "gapId": "node:Shader:ShaderNodeBsdfAnisotropic", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00360-node-Shader-ShaderNodeBsdfAnisotropic.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00360.py -- tests/files/web/generated/M18-GAP-00360-node-Shader-ShaderNodeBsdfAnisotropic.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00360", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00360", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00361", + "gapId": "node:Shader:ShaderNodeBsdfDiffuse", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00361-node-Shader-ShaderNodeBsdfDiffuse.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00361.py -- tests/files/web/generated/M18-GAP-00361-node-Shader-ShaderNodeBsdfDiffuse.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00361", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00361", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00362", + "gapId": "node:Shader:ShaderNodeBsdfGlass", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00362-node-Shader-ShaderNodeBsdfGlass.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00362.py -- tests/files/web/generated/M18-GAP-00362-node-Shader-ShaderNodeBsdfGlass.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00362", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00362", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00363", + "gapId": "node:Shader:ShaderNodeBsdfHair", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00363-node-Shader-ShaderNodeBsdfHair.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00363.py -- tests/files/web/generated/M18-GAP-00363-node-Shader-ShaderNodeBsdfHair.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00363", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00363", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00364", + "gapId": "node:Shader:ShaderNodeBsdfHairPrincipled", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00364-node-Shader-ShaderNodeBsdfHairPrincipled.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00364.py -- tests/files/web/generated/M18-GAP-00364-node-Shader-ShaderNodeBsdfHairPrincipled.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00364", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00364", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00365", + "gapId": "node:Shader:ShaderNodeBsdfMetallic", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00365-node-Shader-ShaderNodeBsdfMetallic.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00365.py -- tests/files/web/generated/M18-GAP-00365-node-Shader-ShaderNodeBsdfMetallic.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00365", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00365", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00366", + "gapId": "node:Shader:ShaderNodeBsdfPrincipled", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00366-node-Shader-ShaderNodeBsdfPrincipled.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00366.py -- tests/files/web/generated/M18-GAP-00366-node-Shader-ShaderNodeBsdfPrincipled.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00366", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00366", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00367", + "gapId": "node:Shader:ShaderNodeBsdfRayPortal", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00367-node-Shader-ShaderNodeBsdfRayPortal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00367.py -- tests/files/web/generated/M18-GAP-00367-node-Shader-ShaderNodeBsdfRayPortal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00367", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00367", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00368", + "gapId": "node:Shader:ShaderNodeBsdfRefraction", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00368-node-Shader-ShaderNodeBsdfRefraction.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00368.py -- tests/files/web/generated/M18-GAP-00368-node-Shader-ShaderNodeBsdfRefraction.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00368", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00368", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00369", + "gapId": "node:Shader:ShaderNodeBsdfSheen", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00369-node-Shader-ShaderNodeBsdfSheen.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00369.py -- tests/files/web/generated/M18-GAP-00369-node-Shader-ShaderNodeBsdfSheen.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00369", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00369", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00370", + "gapId": "node:Shader:ShaderNodeBsdfToon", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00370-node-Shader-ShaderNodeBsdfToon.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00370.py -- tests/files/web/generated/M18-GAP-00370-node-Shader-ShaderNodeBsdfToon.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00370", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00370", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00371", + "gapId": "node:Shader:ShaderNodeBsdfTranslucent", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00371-node-Shader-ShaderNodeBsdfTranslucent.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00371.py -- tests/files/web/generated/M18-GAP-00371-node-Shader-ShaderNodeBsdfTranslucent.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00371", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00371", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00372", + "gapId": "node:Shader:ShaderNodeBsdfTransparent", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00372-node-Shader-ShaderNodeBsdfTransparent.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00372.py -- tests/files/web/generated/M18-GAP-00372-node-Shader-ShaderNodeBsdfTransparent.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00372", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00372", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00373", + "gapId": "node:Shader:ShaderNodeBump", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00373-node-Shader-ShaderNodeBump.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00373.py -- tests/files/web/generated/M18-GAP-00373-node-Shader-ShaderNodeBump.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00373", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00373", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00374", + "gapId": "node:Shader:ShaderNodeCameraData", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00374-node-Shader-ShaderNodeCameraData.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00374.py -- tests/files/web/generated/M18-GAP-00374-node-Shader-ShaderNodeCameraData.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00374", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00374", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00375", + "gapId": "node:Shader:ShaderNodeClamp", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00375-node-Shader-ShaderNodeClamp.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00375.py -- tests/files/web/generated/M18-GAP-00375-node-Shader-ShaderNodeClamp.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00375", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00375", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00376", + "gapId": "node:Shader:ShaderNodeCombineColor", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00376-node-Shader-ShaderNodeCombineColor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00376.py -- tests/files/web/generated/M18-GAP-00376-node-Shader-ShaderNodeCombineColor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00376", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00376", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00377", + "gapId": "node:Shader:ShaderNodeCombineXYZ", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00377-node-Shader-ShaderNodeCombineXYZ.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00377.py -- tests/files/web/generated/M18-GAP-00377-node-Shader-ShaderNodeCombineXYZ.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00377", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00377", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00378", + "gapId": "node:Shader:ShaderNodeDisplacement", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00378-node-Shader-ShaderNodeDisplacement.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00378.py -- tests/files/web/generated/M18-GAP-00378-node-Shader-ShaderNodeDisplacement.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00378", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00378", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00379", + "gapId": "node:Shader:ShaderNodeEeveeSpecular", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00379-node-Shader-ShaderNodeEeveeSpecular.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00379.py -- tests/files/web/generated/M18-GAP-00379-node-Shader-ShaderNodeEeveeSpecular.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00379", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00379", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00380", + "gapId": "node:Shader:ShaderNodeEmission", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00380-node-Shader-ShaderNodeEmission.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00380.py -- tests/files/web/generated/M18-GAP-00380-node-Shader-ShaderNodeEmission.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00380", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00380", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00381", + "gapId": "node:Shader:ShaderNodeFloatCurve", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00381-node-Shader-ShaderNodeFloatCurve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00381.py -- tests/files/web/generated/M18-GAP-00381-node-Shader-ShaderNodeFloatCurve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00381", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00381", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00382", + "gapId": "node:Shader:ShaderNodeFresnel", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00382-node-Shader-ShaderNodeFresnel.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00382.py -- tests/files/web/generated/M18-GAP-00382-node-Shader-ShaderNodeFresnel.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00382", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00382", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00383", + "gapId": "node:Shader:ShaderNodeGamma", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00383-node-Shader-ShaderNodeGamma.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00383.py -- tests/files/web/generated/M18-GAP-00383-node-Shader-ShaderNodeGamma.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00383", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00383", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00384", + "gapId": "node:Shader:ShaderNodeGroup", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00384-node-Shader-ShaderNodeGroup.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00384.py -- tests/files/web/generated/M18-GAP-00384-node-Shader-ShaderNodeGroup.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00384", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00384", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00385", + "gapId": "node:Shader:ShaderNodeHairInfo", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00385-node-Shader-ShaderNodeHairInfo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00385.py -- tests/files/web/generated/M18-GAP-00385-node-Shader-ShaderNodeHairInfo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00385", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00385", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00386", + "gapId": "node:Shader:ShaderNodeHoldout", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00386-node-Shader-ShaderNodeHoldout.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00386.py -- tests/files/web/generated/M18-GAP-00386-node-Shader-ShaderNodeHoldout.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00386", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00386", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00387", + "gapId": "node:Shader:ShaderNodeHueSaturation", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00387-node-Shader-ShaderNodeHueSaturation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00387.py -- tests/files/web/generated/M18-GAP-00387-node-Shader-ShaderNodeHueSaturation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00387", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00387", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00388", + "gapId": "node:Shader:ShaderNodeInvert", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00388-node-Shader-ShaderNodeInvert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00388.py -- tests/files/web/generated/M18-GAP-00388-node-Shader-ShaderNodeInvert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00388", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00388", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00389", + "gapId": "node:Shader:ShaderNodeLayerWeight", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00389-node-Shader-ShaderNodeLayerWeight.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00389.py -- tests/files/web/generated/M18-GAP-00389-node-Shader-ShaderNodeLayerWeight.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00389", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00389", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00390", + "gapId": "node:Shader:ShaderNodeLightFalloff", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00390-node-Shader-ShaderNodeLightFalloff.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00390.py -- tests/files/web/generated/M18-GAP-00390-node-Shader-ShaderNodeLightFalloff.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00390", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00390", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00391", + "gapId": "node:Shader:ShaderNodeLightPath", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00391-node-Shader-ShaderNodeLightPath.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00391.py -- tests/files/web/generated/M18-GAP-00391-node-Shader-ShaderNodeLightPath.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00391", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00391", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00392", + "gapId": "node:Shader:ShaderNodeMapRange", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00392-node-Shader-ShaderNodeMapRange.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00392.py -- tests/files/web/generated/M18-GAP-00392-node-Shader-ShaderNodeMapRange.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00392", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00392", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00393", + "gapId": "node:Shader:ShaderNodeMapping", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00393-node-Shader-ShaderNodeMapping.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00393.py -- tests/files/web/generated/M18-GAP-00393-node-Shader-ShaderNodeMapping.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00393", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00393", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00394", + "gapId": "node:Shader:ShaderNodeMath", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00394-node-Shader-ShaderNodeMath.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00394.py -- tests/files/web/generated/M18-GAP-00394-node-Shader-ShaderNodeMath.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00394", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00394", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00395", + "gapId": "node:Shader:ShaderNodeMix", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00395-node-Shader-ShaderNodeMix.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00395.py -- tests/files/web/generated/M18-GAP-00395-node-Shader-ShaderNodeMix.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00395", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00395", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00396", + "gapId": "node:Shader:ShaderNodeMixRGB", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00396-node-Shader-ShaderNodeMixRGB.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00396.py -- tests/files/web/generated/M18-GAP-00396-node-Shader-ShaderNodeMixRGB.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00396", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00396", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00397", + "gapId": "node:Shader:ShaderNodeMixShader", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00397-node-Shader-ShaderNodeMixShader.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00397.py -- tests/files/web/generated/M18-GAP-00397-node-Shader-ShaderNodeMixShader.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00397", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00397", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00398", + "gapId": "node:Shader:ShaderNodeNewGeometry", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00398-node-Shader-ShaderNodeNewGeometry.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00398.py -- tests/files/web/generated/M18-GAP-00398-node-Shader-ShaderNodeNewGeometry.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00398", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00398", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00399", + "gapId": "node:Shader:ShaderNodeNormal", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00399-node-Shader-ShaderNodeNormal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00399.py -- tests/files/web/generated/M18-GAP-00399-node-Shader-ShaderNodeNormal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00399", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00399", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00400", + "gapId": "node:Shader:ShaderNodeNormalMap", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00400-node-Shader-ShaderNodeNormalMap.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00400.py -- tests/files/web/generated/M18-GAP-00400-node-Shader-ShaderNodeNormalMap.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00400", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00400", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00401", + "gapId": "node:Shader:ShaderNodeObjectInfo", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00401-node-Shader-ShaderNodeObjectInfo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00401.py -- tests/files/web/generated/M18-GAP-00401-node-Shader-ShaderNodeObjectInfo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00401", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00401", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00402", + "gapId": "node:Shader:ShaderNodeOutputAOV", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00402-node-Shader-ShaderNodeOutputAOV.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00402.py -- tests/files/web/generated/M18-GAP-00402-node-Shader-ShaderNodeOutputAOV.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00402", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00402", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00403", + "gapId": "node:Shader:ShaderNodeOutputLight", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00403-node-Shader-ShaderNodeOutputLight.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00403.py -- tests/files/web/generated/M18-GAP-00403-node-Shader-ShaderNodeOutputLight.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00403", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00403", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00404", + "gapId": "node:Shader:ShaderNodeOutputLineStyle", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00404-node-Shader-ShaderNodeOutputLineStyle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00404.py -- tests/files/web/generated/M18-GAP-00404-node-Shader-ShaderNodeOutputLineStyle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00404", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00404", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00405", + "gapId": "node:Shader:ShaderNodeOutputMaterial", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00405-node-Shader-ShaderNodeOutputMaterial.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00405.py -- tests/files/web/generated/M18-GAP-00405-node-Shader-ShaderNodeOutputMaterial.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00405", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00405", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00406", + "gapId": "node:Shader:ShaderNodeOutputWorld", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00406-node-Shader-ShaderNodeOutputWorld.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00406.py -- tests/files/web/generated/M18-GAP-00406-node-Shader-ShaderNodeOutputWorld.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00406", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00406", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00407", + "gapId": "node:Shader:ShaderNodeParticleInfo", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00407-node-Shader-ShaderNodeParticleInfo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00407.py -- tests/files/web/generated/M18-GAP-00407-node-Shader-ShaderNodeParticleInfo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00407", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00407", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00408", + "gapId": "node:Shader:ShaderNodePointInfo", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00408-node-Shader-ShaderNodePointInfo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00408.py -- tests/files/web/generated/M18-GAP-00408-node-Shader-ShaderNodePointInfo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00408", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00408", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00409", + "gapId": "node:Shader:ShaderNodeRGB", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00409-node-Shader-ShaderNodeRGB.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00409.py -- tests/files/web/generated/M18-GAP-00409-node-Shader-ShaderNodeRGB.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00409", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00409", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00410", + "gapId": "node:Shader:ShaderNodeRGBCurve", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00410-node-Shader-ShaderNodeRGBCurve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00410.py -- tests/files/web/generated/M18-GAP-00410-node-Shader-ShaderNodeRGBCurve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00410", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00410", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00411", + "gapId": "node:Shader:ShaderNodeRGBToBW", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00411-node-Shader-ShaderNodeRGBToBW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00411.py -- tests/files/web/generated/M18-GAP-00411-node-Shader-ShaderNodeRGBToBW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00411", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00411", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00412", + "gapId": "node:Shader:ShaderNodeRadialTiling", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00412-node-Shader-ShaderNodeRadialTiling.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00412.py -- tests/files/web/generated/M18-GAP-00412-node-Shader-ShaderNodeRadialTiling.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00412", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00412", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00413", + "gapId": "node:Shader:ShaderNodeRaycast", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00413-node-Shader-ShaderNodeRaycast.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00413.py -- tests/files/web/generated/M18-GAP-00413-node-Shader-ShaderNodeRaycast.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00413", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00413", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00414", + "gapId": "node:Shader:ShaderNodeScript", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00414-node-Shader-ShaderNodeScript.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00414.py -- tests/files/web/generated/M18-GAP-00414-node-Shader-ShaderNodeScript.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00414", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00414", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00415", + "gapId": "node:Shader:ShaderNodeSeparateColor", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00415-node-Shader-ShaderNodeSeparateColor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00415.py -- tests/files/web/generated/M18-GAP-00415-node-Shader-ShaderNodeSeparateColor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00415", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00415", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00416", + "gapId": "node:Shader:ShaderNodeSeparateXYZ", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00416-node-Shader-ShaderNodeSeparateXYZ.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00416.py -- tests/files/web/generated/M18-GAP-00416-node-Shader-ShaderNodeSeparateXYZ.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00416", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00416", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00417", + "gapId": "node:Shader:ShaderNodeShaderToRGB", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00417-node-Shader-ShaderNodeShaderToRGB.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00417.py -- tests/files/web/generated/M18-GAP-00417-node-Shader-ShaderNodeShaderToRGB.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00417", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00417", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00418", + "gapId": "node:Shader:ShaderNodeSqueeze", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00418-node-Shader-ShaderNodeSqueeze.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00418.py -- tests/files/web/generated/M18-GAP-00418-node-Shader-ShaderNodeSqueeze.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00418", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00418", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00419", + "gapId": "node:Shader:ShaderNodeSubsurfaceScattering", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00419-node-Shader-ShaderNodeSubsurfaceScattering.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00419.py -- tests/files/web/generated/M18-GAP-00419-node-Shader-ShaderNodeSubsurfaceScattering.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00419", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00419", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00420", + "gapId": "node:Shader:ShaderNodeTangent", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00420-node-Shader-ShaderNodeTangent.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00420.py -- tests/files/web/generated/M18-GAP-00420-node-Shader-ShaderNodeTangent.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00420", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00420", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00421", + "gapId": "node:Shader:ShaderNodeTexBrick", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00421-node-Shader-ShaderNodeTexBrick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00421.py -- tests/files/web/generated/M18-GAP-00421-node-Shader-ShaderNodeTexBrick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00421", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00421", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00422", + "gapId": "node:Shader:ShaderNodeTexChecker", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00422-node-Shader-ShaderNodeTexChecker.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00422.py -- tests/files/web/generated/M18-GAP-00422-node-Shader-ShaderNodeTexChecker.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00422", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00422", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00423", + "gapId": "node:Shader:ShaderNodeTexCoord", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00423-node-Shader-ShaderNodeTexCoord.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00423.py -- tests/files/web/generated/M18-GAP-00423-node-Shader-ShaderNodeTexCoord.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00423", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00423", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00424", + "gapId": "node:Shader:ShaderNodeTexEnvironment", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00424-node-Shader-ShaderNodeTexEnvironment.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00424.py -- tests/files/web/generated/M18-GAP-00424-node-Shader-ShaderNodeTexEnvironment.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00424", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00424", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00425", + "gapId": "node:Shader:ShaderNodeTexGabor", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00425-node-Shader-ShaderNodeTexGabor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00425.py -- tests/files/web/generated/M18-GAP-00425-node-Shader-ShaderNodeTexGabor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00425", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00425", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00426", + "gapId": "node:Shader:ShaderNodeTexGradient", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00426-node-Shader-ShaderNodeTexGradient.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00426.py -- tests/files/web/generated/M18-GAP-00426-node-Shader-ShaderNodeTexGradient.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00426", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00426", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00427", + "gapId": "node:Shader:ShaderNodeTexIES", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00427-node-Shader-ShaderNodeTexIES.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00427.py -- tests/files/web/generated/M18-GAP-00427-node-Shader-ShaderNodeTexIES.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00427", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00427", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00428", + "gapId": "node:Shader:ShaderNodeTexImage", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00428-node-Shader-ShaderNodeTexImage.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00428.py -- tests/files/web/generated/M18-GAP-00428-node-Shader-ShaderNodeTexImage.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00428", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00428", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00429", + "gapId": "node:Shader:ShaderNodeTexMagic", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00429-node-Shader-ShaderNodeTexMagic.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00429.py -- tests/files/web/generated/M18-GAP-00429-node-Shader-ShaderNodeTexMagic.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00429", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00429", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00430", + "gapId": "node:Shader:ShaderNodeTexNoise", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00430-node-Shader-ShaderNodeTexNoise.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00430.py -- tests/files/web/generated/M18-GAP-00430-node-Shader-ShaderNodeTexNoise.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00430", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00430", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00431", + "gapId": "node:Shader:ShaderNodeTexSky", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00431-node-Shader-ShaderNodeTexSky.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00431.py -- tests/files/web/generated/M18-GAP-00431-node-Shader-ShaderNodeTexSky.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00431", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00431", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00432", + "gapId": "node:Shader:ShaderNodeTexVoronoi", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00432-node-Shader-ShaderNodeTexVoronoi.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00432.py -- tests/files/web/generated/M18-GAP-00432-node-Shader-ShaderNodeTexVoronoi.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00432", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00432", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00433", + "gapId": "node:Shader:ShaderNodeTexWave", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00433-node-Shader-ShaderNodeTexWave.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00433.py -- tests/files/web/generated/M18-GAP-00433-node-Shader-ShaderNodeTexWave.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00433", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00433", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00434", + "gapId": "node:Shader:ShaderNodeTexWhiteNoise", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00434-node-Shader-ShaderNodeTexWhiteNoise.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00434.py -- tests/files/web/generated/M18-GAP-00434-node-Shader-ShaderNodeTexWhiteNoise.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00434", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00434", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00435", + "gapId": "node:Shader:ShaderNodeUVAlongStroke", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00435-node-Shader-ShaderNodeUVAlongStroke.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00435.py -- tests/files/web/generated/M18-GAP-00435-node-Shader-ShaderNodeUVAlongStroke.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00435", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00435", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00436", + "gapId": "node:Shader:ShaderNodeUVMap", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00436-node-Shader-ShaderNodeUVMap.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00436.py -- tests/files/web/generated/M18-GAP-00436-node-Shader-ShaderNodeUVMap.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00436", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00436", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00437", + "gapId": "node:Shader:ShaderNodeValToRGB", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00437-node-Shader-ShaderNodeValToRGB.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00437.py -- tests/files/web/generated/M18-GAP-00437-node-Shader-ShaderNodeValToRGB.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00437", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00437", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00438", + "gapId": "node:Shader:ShaderNodeValue", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00438-node-Shader-ShaderNodeValue.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00438.py -- tests/files/web/generated/M18-GAP-00438-node-Shader-ShaderNodeValue.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00438", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00438", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00439", + "gapId": "node:Shader:ShaderNodeVectorCurve", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00439-node-Shader-ShaderNodeVectorCurve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00439.py -- tests/files/web/generated/M18-GAP-00439-node-Shader-ShaderNodeVectorCurve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00439", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00439", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00440", + "gapId": "node:Shader:ShaderNodeVectorDisplacement", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00440-node-Shader-ShaderNodeVectorDisplacement.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00440.py -- tests/files/web/generated/M18-GAP-00440-node-Shader-ShaderNodeVectorDisplacement.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00440", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00440", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00441", + "gapId": "node:Shader:ShaderNodeVectorMath", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00441-node-Shader-ShaderNodeVectorMath.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00441.py -- tests/files/web/generated/M18-GAP-00441-node-Shader-ShaderNodeVectorMath.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00441", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00441", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00442", + "gapId": "node:Shader:ShaderNodeVectorRotate", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00442-node-Shader-ShaderNodeVectorRotate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00442.py -- tests/files/web/generated/M18-GAP-00442-node-Shader-ShaderNodeVectorRotate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00442", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00442", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00443", + "gapId": "node:Shader:ShaderNodeVectorTransform", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00443-node-Shader-ShaderNodeVectorTransform.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00443.py -- tests/files/web/generated/M18-GAP-00443-node-Shader-ShaderNodeVectorTransform.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00443", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00443", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00444", + "gapId": "node:Shader:ShaderNodeVertexColor", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00444-node-Shader-ShaderNodeVertexColor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00444.py -- tests/files/web/generated/M18-GAP-00444-node-Shader-ShaderNodeVertexColor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00444", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00444", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00445", + "gapId": "node:Shader:ShaderNodeVolumeAbsorption", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00445-node-Shader-ShaderNodeVolumeAbsorption.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00445.py -- tests/files/web/generated/M18-GAP-00445-node-Shader-ShaderNodeVolumeAbsorption.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00445", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00445", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00446", + "gapId": "node:Shader:ShaderNodeVolumeCoefficients", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00446-node-Shader-ShaderNodeVolumeCoefficients.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00446.py -- tests/files/web/generated/M18-GAP-00446-node-Shader-ShaderNodeVolumeCoefficients.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00446", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00446", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00447", + "gapId": "node:Shader:ShaderNodeVolumeInfo", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00447-node-Shader-ShaderNodeVolumeInfo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00447.py -- tests/files/web/generated/M18-GAP-00447-node-Shader-ShaderNodeVolumeInfo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00447", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00447", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00448", + "gapId": "node:Shader:ShaderNodeVolumePrincipled", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00448-node-Shader-ShaderNodeVolumePrincipled.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00448.py -- tests/files/web/generated/M18-GAP-00448-node-Shader-ShaderNodeVolumePrincipled.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00448", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00448", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00449", + "gapId": "node:Shader:ShaderNodeVolumeScatter", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00449-node-Shader-ShaderNodeVolumeScatter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00449.py -- tests/files/web/generated/M18-GAP-00449-node-Shader-ShaderNodeVolumeScatter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00449", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00449", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00450", + "gapId": "node:Shader:ShaderNodeWavelength", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00450-node-Shader-ShaderNodeWavelength.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00450.py -- tests/files/web/generated/M18-GAP-00450-node-Shader-ShaderNodeWavelength.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00450", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00450", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00451", + "gapId": "node:Shader:ShaderNodeWireframe", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00451-node-Shader-ShaderNodeWireframe.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00451.py -- tests/files/web/generated/M18-GAP-00451-node-Shader-ShaderNodeWireframe.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00451", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00451", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00001", + "gapId": "rna:Core:Action", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00001-rna-Core-Action.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00001.py -- tests/files/web/generated/M19-GAP-00001-rna-Core-Action.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00001", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00001", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00002", + "gapId": "rna:Core:Armature", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00002-rna-Core-Armature.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00002.py -- tests/files/web/generated/M19-GAP-00002-rna-Core-Armature.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00002", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00002", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00003", + "gapId": "rna:Core:Brush", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00003-rna-Core-Brush.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00003.py -- tests/files/web/generated/M19-GAP-00003-rna-Core-Brush.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00003", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00003", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00004", + "gapId": "rna:Core:Curve", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00004-rna-Core-Curve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00004.py -- tests/files/web/generated/M19-GAP-00004-rna-Core-Curve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00004", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00004", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00005", + "gapId": "rna:Core:Curves", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00005-rna-Core-Curves.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00005.py -- tests/files/web/generated/M19-GAP-00005-rna-Core-Curves.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00005", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00005", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00006", + "gapId": "rna:Core:GreasePencil", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00006-rna-Core-GreasePencil.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00006.py -- tests/files/web/generated/M19-GAP-00006-rna-Core-GreasePencil.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00006", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00006", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00007", + "gapId": "rna:Core:ID", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00007-rna-Core-ID.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00007.py -- tests/files/web/generated/M19-GAP-00007-rna-Core-ID.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00007", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00007", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00008", + "gapId": "rna:Core:Image", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00008-rna-Core-Image.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00008.py -- tests/files/web/generated/M19-GAP-00008-rna-Core-Image.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00008", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00008", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00009", + "gapId": "rna:Core:Key", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00009-rna-Core-Key.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00009.py -- tests/files/web/generated/M19-GAP-00009-rna-Core-Key.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00009", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00009", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00010", + "gapId": "rna:Core:Lattice", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00010-rna-Core-Lattice.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00010.py -- tests/files/web/generated/M19-GAP-00010-rna-Core-Lattice.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00010", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00010", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00011", + "gapId": "rna:Core:Mask", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00011-rna-Core-Mask.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00011.py -- tests/files/web/generated/M19-GAP-00011-rna-Core-Mask.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00011", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00011", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00012", + "gapId": "rna:Core:MetaBall", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00012-rna-Core-MetaBall.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00012.py -- tests/files/web/generated/M19-GAP-00012-rna-Core-MetaBall.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00012", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00012", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00013", + "gapId": "rna:Core:MovieClip", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00013-rna-Core-MovieClip.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00013.py -- tests/files/web/generated/M19-GAP-00013-rna-Core-MovieClip.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00013", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00013", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00014", + "gapId": "rna:Core:Palette", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00014-rna-Core-Palette.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00014.py -- tests/files/web/generated/M19-GAP-00014-rna-Core-Palette.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00014", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00014", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00015", + "gapId": "rna:Core:ParticleSettings", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00015-rna-Core-ParticleSettings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00015.py -- tests/files/web/generated/M19-GAP-00015-rna-Core-ParticleSettings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00015", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00015", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00016", + "gapId": "rna:Core:PointCloud", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00016-rna-Core-PointCloud.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00016.py -- tests/files/web/generated/M19-GAP-00016-rna-Core-PointCloud.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00016", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00016", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00017", + "gapId": "rna:Core:Sound", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00017-rna-Core-Sound.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00017.py -- tests/files/web/generated/M19-GAP-00017-rna-Core-Sound.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00017", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00017", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00018", + "gapId": "rna:Core:Speaker", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00018-rna-Core-Speaker.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00018.py -- tests/files/web/generated/M19-GAP-00018-rna-Core-Speaker.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00018", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00018", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00019", + "gapId": "rna:Core:Text", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00019-rna-Core-Text.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00019.py -- tests/files/web/generated/M19-GAP-00019-rna-Core-Text.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00019", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00019", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00020", + "gapId": "rna:Core:Volume", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00020-rna-Core-Volume.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00020.py -- tests/files/web/generated/M19-GAP-00020-rna-Core-Volume.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00020", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00020", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00001", + "gapId": "physics:BakeSettings", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00001-physics-BakeSettings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00001.py -- tests/files/web/generated/M20-GAP-00001-physics-BakeSettings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00001", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00001", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00002", + "gapId": "physics:BlendDataParticles", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00002-physics-BlendDataParticles.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00002.py -- tests/files/web/generated/M20-GAP-00002-physics-BlendDataParticles.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00002", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00002", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00003", + "gapId": "physics:BoidRule", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00003-physics-BoidRule.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00003.py -- tests/files/web/generated/M20-GAP-00003-physics-BoidRule.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00003", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00003", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00004", + "gapId": "physics:BoidRuleAverageSpeed", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00004-physics-BoidRuleAverageSpeed.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00004.py -- tests/files/web/generated/M20-GAP-00004-physics-BoidRuleAverageSpeed.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00004", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00004", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00005", + "gapId": "physics:BoidRuleAvoid", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00005-physics-BoidRuleAvoid.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00005.py -- tests/files/web/generated/M20-GAP-00005-physics-BoidRuleAvoid.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00005", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00005", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00006", + "gapId": "physics:BoidRuleAvoidCollision", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00006-physics-BoidRuleAvoidCollision.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00006.py -- tests/files/web/generated/M20-GAP-00006-physics-BoidRuleAvoidCollision.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00006", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00006", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00007", + "gapId": "physics:BoidRuleFight", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00007-physics-BoidRuleFight.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00007.py -- tests/files/web/generated/M20-GAP-00007-physics-BoidRuleFight.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00007", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00007", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00008", + "gapId": "physics:BoidRuleFollowLeader", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00008-physics-BoidRuleFollowLeader.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00008.py -- tests/files/web/generated/M20-GAP-00008-physics-BoidRuleFollowLeader.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00008", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00008", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00009", + "gapId": "physics:BoidRuleGoal", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00009-physics-BoidRuleGoal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00009.py -- tests/files/web/generated/M20-GAP-00009-physics-BoidRuleGoal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00009", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00009", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00010", + "gapId": "physics:BoidSettings", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00010-physics-BoidSettings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00010.py -- tests/files/web/generated/M20-GAP-00010-physics-BoidSettings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00010", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00010", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00011", + "gapId": "physics:BoidState", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00011-physics-BoidState.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00011.py -- tests/files/web/generated/M20-GAP-00011-physics-BoidState.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00011", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00011", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00012", + "gapId": "physics:ChildParticle", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00012-physics-ChildParticle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00012.py -- tests/files/web/generated/M20-GAP-00012-physics-ChildParticle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00012", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00012", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00013", + "gapId": "physics:ClothCollisionSettings", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00013-physics-ClothCollisionSettings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00013.py -- tests/files/web/generated/M20-GAP-00013-physics-ClothCollisionSettings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00013", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00013", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00014", + "gapId": "physics:ClothModifier", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00014-physics-ClothModifier.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00014.py -- tests/files/web/generated/M20-GAP-00014-physics-ClothModifier.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00014", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00014", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00015", + "gapId": "physics:ClothSettings", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00015-physics-ClothSettings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00015.py -- tests/files/web/generated/M20-GAP-00015-physics-ClothSettings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00015", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00015", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00016", + "gapId": "physics:ClothSolverResult", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00016-physics-ClothSolverResult.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00016.py -- tests/files/web/generated/M20-GAP-00016-physics-ClothSolverResult.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00016", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00016", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00017", + "gapId": "physics:CollisionModifier", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00017-physics-CollisionModifier.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00017.py -- tests/files/web/generated/M20-GAP-00017-physics-CollisionModifier.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00017", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00017", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00018", + "gapId": "physics:CollisionSettings", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00018-physics-CollisionSettings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00018.py -- tests/files/web/generated/M20-GAP-00018-physics-CollisionSettings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00018", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00018", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00019", + "gapId": "physics:DynamicPaintBrushSettings", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00019-physics-DynamicPaintBrushSettings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00019.py -- tests/files/web/generated/M20-GAP-00019-physics-DynamicPaintBrushSettings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00019", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00019", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00020", + "gapId": "physics:DynamicPaintCanvasSettings", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00020-physics-DynamicPaintCanvasSettings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00020.py -- tests/files/web/generated/M20-GAP-00020-physics-DynamicPaintCanvasSettings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00020", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00020", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00021", + "gapId": "physics:DynamicPaintModifier", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00021-physics-DynamicPaintModifier.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00021.py -- tests/files/web/generated/M20-GAP-00021-physics-DynamicPaintModifier.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00021", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00021", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00022", + "gapId": "physics:DynamicPaintSurface", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00022-physics-DynamicPaintSurface.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00022.py -- tests/files/web/generated/M20-GAP-00022-physics-DynamicPaintSurface.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00022", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00022", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00023", + "gapId": "physics:DynamicPaintSurfaces", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00023-physics-DynamicPaintSurfaces.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00023.py -- tests/files/web/generated/M20-GAP-00023-physics-DynamicPaintSurfaces.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00023", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00023", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00024", + "gapId": "physics:EffectorWeights", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00024-physics-EffectorWeights.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00024.py -- tests/files/web/generated/M20-GAP-00024-physics-EffectorWeights.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00024", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00024", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00025", + "gapId": "physics:FieldSettings", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00025-physics-FieldSettings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00025.py -- tests/files/web/generated/M20-GAP-00025-physics-FieldSettings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00025", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00025", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00026", + "gapId": "physics:FluidDomainSettings", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00026-physics-FluidDomainSettings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00026.py -- tests/files/web/generated/M20-GAP-00026-physics-FluidDomainSettings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00026", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00026", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00027", + "gapId": "physics:FluidEffectorSettings", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00027-physics-FluidEffectorSettings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00027.py -- tests/files/web/generated/M20-GAP-00027-physics-FluidEffectorSettings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00027", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00027", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00028", + "gapId": "physics:FluidFlowSettings", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00028-physics-FluidFlowSettings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00028.py -- tests/files/web/generated/M20-GAP-00028-physics-FluidFlowSettings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00028", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00028", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00029", + "gapId": "physics:FluidModifier", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00029-physics-FluidModifier.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00029.py -- tests/files/web/generated/M20-GAP-00029-physics-FluidModifier.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00029", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00029", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00030", + "gapId": "physics:GeometryNodeAccumulateField", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00030-physics-GeometryNodeAccumulateField.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00030.py -- tests/files/web/generated/M20-GAP-00030-physics-GeometryNodeAccumulateField.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00030", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00030", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00031", + "gapId": "physics:GeometryNodeFieldAtIndex", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00031-physics-GeometryNodeFieldAtIndex.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00031.py -- tests/files/web/generated/M20-GAP-00031-physics-GeometryNodeFieldAtIndex.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00031", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00031", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00032", + "gapId": "physics:GeometryNodeFieldAverage", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00032-physics-GeometryNodeFieldAverage.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00032.py -- tests/files/web/generated/M20-GAP-00032-physics-GeometryNodeFieldAverage.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00032", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00032", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00033", + "gapId": "physics:GeometryNodeFieldMinAndMax", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00033-physics-GeometryNodeFieldMinAndMax.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00033.py -- tests/files/web/generated/M20-GAP-00033-physics-GeometryNodeFieldMinAndMax.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00033", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00033", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00034", + "gapId": "physics:GeometryNodeFieldOnDomain", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00034-physics-GeometryNodeFieldOnDomain.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00034.py -- tests/files/web/generated/M20-GAP-00034-physics-GeometryNodeFieldOnDomain.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00034", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00034", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00035", + "gapId": "physics:GeometryNodeFieldToGrid", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00035-physics-GeometryNodeFieldToGrid.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00035.py -- tests/files/web/generated/M20-GAP-00035-physics-GeometryNodeFieldToGrid.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00035", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00035", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00036", + "gapId": "physics:GeometryNodeFieldToGridItem", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00036-physics-GeometryNodeFieldToGridItem.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00036.py -- tests/files/web/generated/M20-GAP-00036-physics-GeometryNodeFieldToGridItem.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00036", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00036", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00037", + "gapId": "physics:GeometryNodeFieldToGridItems", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00037-physics-GeometryNodeFieldToGridItems.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00037.py -- tests/files/web/generated/M20-GAP-00037-physics-GeometryNodeFieldToGridItems.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00037", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00037", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00038", + "gapId": "physics:GeometryNodeFieldToList", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00038-physics-GeometryNodeFieldToList.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00038.py -- tests/files/web/generated/M20-GAP-00038-physics-GeometryNodeFieldToList.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00038", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00038", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00039", + "gapId": "physics:GeometryNodeFieldToListItem", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00039-physics-GeometryNodeFieldToListItem.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00039.py -- tests/files/web/generated/M20-GAP-00039-physics-GeometryNodeFieldToListItem.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00039", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00039", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00040", + "gapId": "physics:GeometryNodeFieldToListItems", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00040-physics-GeometryNodeFieldToListItems.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00040.py -- tests/files/web/generated/M20-GAP-00040-physics-GeometryNodeFieldToListItems.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00040", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00040", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00041", + "gapId": "physics:GeometryNodeFieldVariance", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00041-physics-GeometryNodeFieldVariance.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00041.py -- tests/files/web/generated/M20-GAP-00041-physics-GeometryNodeFieldVariance.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00041", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00041", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00042", + "gapId": "physics:Particle", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00042-physics-Particle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00042.py -- tests/files/web/generated/M20-GAP-00042-physics-Particle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00042", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00042", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00043", + "gapId": "physics:ParticleBrush", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00043-physics-ParticleBrush.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00043.py -- tests/files/web/generated/M20-GAP-00043-physics-ParticleBrush.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00043", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00043", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00044", + "gapId": "physics:ParticleDupliWeight", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00044-physics-ParticleDupliWeight.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00044.py -- tests/files/web/generated/M20-GAP-00044-physics-ParticleDupliWeight.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00044", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00044", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00045", + "gapId": "physics:ParticleEdit", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00045-physics-ParticleEdit.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00045.py -- tests/files/web/generated/M20-GAP-00045-physics-ParticleEdit.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00045", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00045", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00046", + "gapId": "physics:ParticleHairKey", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00046-physics-ParticleHairKey.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00046.py -- tests/files/web/generated/M20-GAP-00046-physics-ParticleHairKey.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00046", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00046", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00047", + "gapId": "physics:ParticleInstanceModifier", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00047-physics-ParticleInstanceModifier.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00047.py -- tests/files/web/generated/M20-GAP-00047-physics-ParticleInstanceModifier.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00047", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00047", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00048", + "gapId": "physics:ParticleKey", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00048-physics-ParticleKey.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00048.py -- tests/files/web/generated/M20-GAP-00048-physics-ParticleKey.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00048", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00048", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00049", + "gapId": "physics:ParticleSettings", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00049-physics-ParticleSettings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00049.py -- tests/files/web/generated/M20-GAP-00049-physics-ParticleSettings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00049", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00049", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00050", + "gapId": "physics:ParticleSettingsTextureSlot", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00050-physics-ParticleSettingsTextureSlot.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00050.py -- tests/files/web/generated/M20-GAP-00050-physics-ParticleSettingsTextureSlot.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00050", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00050", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00051", + "gapId": "physics:ParticleSettingsTextureSlots", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00051-physics-ParticleSettingsTextureSlots.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00051.py -- tests/files/web/generated/M20-GAP-00051-physics-ParticleSettingsTextureSlots.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00051", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00051", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00052", + "gapId": "physics:ParticleSystem", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00052-physics-ParticleSystem.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00052.py -- tests/files/web/generated/M20-GAP-00052-physics-ParticleSystem.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00052", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00052", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00053", + "gapId": "physics:ParticleSystemModifier", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00053-physics-ParticleSystemModifier.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00053.py -- tests/files/web/generated/M20-GAP-00053-physics-ParticleSystemModifier.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00053", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00053", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00054", + "gapId": "physics:ParticleSystems", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00054-physics-ParticleSystems.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00054.py -- tests/files/web/generated/M20-GAP-00054-physics-ParticleSystems.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00054", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00054", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00055", + "gapId": "physics:ParticleTarget", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00055-physics-ParticleTarget.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00055.py -- tests/files/web/generated/M20-GAP-00055-physics-ParticleTarget.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00055", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00055", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00056", + "gapId": "physics:PointCache", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00056-physics-PointCache.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00056.py -- tests/files/web/generated/M20-GAP-00056-physics-PointCache.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00056", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00056", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00057", + "gapId": "physics:PointCacheItem", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00057-physics-PointCacheItem.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00057.py -- tests/files/web/generated/M20-GAP-00057-physics-PointCacheItem.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00057", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00057", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00058", + "gapId": "physics:PointCaches", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00058-physics-PointCaches.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00058.py -- tests/files/web/generated/M20-GAP-00058-physics-PointCaches.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00058", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00058", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00059", + "gapId": "physics:RigidBodyConstraint", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00059-physics-RigidBodyConstraint.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00059.py -- tests/files/web/generated/M20-GAP-00059-physics-RigidBodyConstraint.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00059", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00059", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00060", + "gapId": "physics:RigidBodyObject", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00060-physics-RigidBodyObject.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00060.py -- tests/files/web/generated/M20-GAP-00060-physics-RigidBodyObject.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00060", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00060", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00061", + "gapId": "physics:RigidBodyWorld", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00061-physics-RigidBodyWorld.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00061.py -- tests/files/web/generated/M20-GAP-00061-physics-RigidBodyWorld.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00061", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00061", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00062", + "gapId": "physics:SPHFluidSettings", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00062-physics-SPHFluidSettings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00062.py -- tests/files/web/generated/M20-GAP-00062-physics-SPHFluidSettings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00062", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00062", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00063", + "gapId": "physics:ShaderNodeParticleInfo", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00063-physics-ShaderNodeParticleInfo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00063.py -- tests/files/web/generated/M20-GAP-00063-physics-ShaderNodeParticleInfo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00063", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00063", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00064", + "gapId": "physics:SoftBodyModifier", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00064-physics-SoftBodyModifier.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00064.py -- tests/files/web/generated/M20-GAP-00064-physics-SoftBodyModifier.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00064", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00064", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00065", + "gapId": "physics:SoftBodySettings", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00065-physics-SoftBodySettings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00065.py -- tests/files/web/generated/M20-GAP-00065-physics-SoftBodySettings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00065", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00065", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00066", + "gapId": "strip:ADD", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00066-strip-ADD.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00066.py -- tests/files/web/generated/M20-GAP-00066-strip-ADD.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00066", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00066", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00067", + "gapId": "strip:ADJUSTMENT", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00067-strip-ADJUSTMENT.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00067.py -- tests/files/web/generated/M20-GAP-00067-strip-ADJUSTMENT.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00067", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00067", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00068", + "gapId": "strip:ALPHA_OVER", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00068-strip-ALPHA_OVER.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00068.py -- tests/files/web/generated/M20-GAP-00068-strip-ALPHA_OVER.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00068", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00068", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00069", + "gapId": "strip:ALPHA_UNDER", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00069-strip-ALPHA_UNDER.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00069.py -- tests/files/web/generated/M20-GAP-00069-strip-ALPHA_UNDER.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00069", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00069", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00070", + "gapId": "strip:COLOR", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00070-strip-COLOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00070.py -- tests/files/web/generated/M20-GAP-00070-strip-COLOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00070", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00070", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00071", + "gapId": "strip:COLORMIX", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00071-strip-COLORMIX.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00071.py -- tests/files/web/generated/M20-GAP-00071-strip-COLORMIX.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00071", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00071", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00072", + "gapId": "strip:COMPOSITOR", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00072-strip-COMPOSITOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00072.py -- tests/files/web/generated/M20-GAP-00072-strip-COMPOSITOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00072", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00072", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00073", + "gapId": "strip:CROSS", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00073-strip-CROSS.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00073.py -- tests/files/web/generated/M20-GAP-00073-strip-CROSS.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00073", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00073", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00074", + "gapId": "strip:GAMMA_CROSS", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00074-strip-GAMMA_CROSS.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00074.py -- tests/files/web/generated/M20-GAP-00074-strip-GAMMA_CROSS.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00074", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00074", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00075", + "gapId": "strip:GAUSSIAN_BLUR", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00075-strip-GAUSSIAN_BLUR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00075.py -- tests/files/web/generated/M20-GAP-00075-strip-GAUSSIAN_BLUR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00075", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00075", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00076", + "gapId": "strip:GLOW", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00076-strip-GLOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00076.py -- tests/files/web/generated/M20-GAP-00076-strip-GLOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00076", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00076", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00077", + "gapId": "strip:IMAGE", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00077-strip-IMAGE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00077.py -- tests/files/web/generated/M20-GAP-00077-strip-IMAGE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00077", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00077", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00078", + "gapId": "strip:MASK", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00078-strip-MASK.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00078.py -- tests/files/web/generated/M20-GAP-00078-strip-MASK.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00078", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00078", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00079", + "gapId": "strip:META", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00079-strip-META.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00079.py -- tests/files/web/generated/M20-GAP-00079-strip-META.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00079", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00079", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00080", + "gapId": "strip:MOVIE", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00080-strip-MOVIE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00080.py -- tests/files/web/generated/M20-GAP-00080-strip-MOVIE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00080", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00080", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00081", + "gapId": "strip:MOVIECLIP", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00081-strip-MOVIECLIP.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00081.py -- tests/files/web/generated/M20-GAP-00081-strip-MOVIECLIP.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00081", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00081", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00082", + "gapId": "strip:MULTICAM", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00082-strip-MULTICAM.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00082.py -- tests/files/web/generated/M20-GAP-00082-strip-MULTICAM.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00082", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00082", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00083", + "gapId": "strip:MULTIPLY", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00083-strip-MULTIPLY.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00083.py -- tests/files/web/generated/M20-GAP-00083-strip-MULTIPLY.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00083", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00083", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00084", + "gapId": "strip:SCENE", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00084-strip-SCENE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00084.py -- tests/files/web/generated/M20-GAP-00084-strip-SCENE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00084", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00084", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00085", + "gapId": "strip:SOUND", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00085-strip-SOUND.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00085.py -- tests/files/web/generated/M20-GAP-00085-strip-SOUND.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00085", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00085", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00086", + "gapId": "strip:SPEED", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00086-strip-SPEED.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00086.py -- tests/files/web/generated/M20-GAP-00086-strip-SPEED.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00086", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00086", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00087", + "gapId": "strip:SUBTRACT", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00087-strip-SUBTRACT.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00087.py -- tests/files/web/generated/M20-GAP-00087-strip-SUBTRACT.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00087", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00087", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00088", + "gapId": "strip:TEXT", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00088-strip-TEXT.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00088.py -- tests/files/web/generated/M20-GAP-00088-strip-TEXT.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00088", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00088", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00089", + "gapId": "strip:WIPE", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00089-strip-WIPE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00089.py -- tests/files/web/generated/M20-GAP-00089-strip-WIPE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00089", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00089", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00001", + "gapId": "area:CLIP_EDITOR", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00001-area-CLIP_EDITOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00001.py -- tests/files/web/generated/M21-GAP-00001-area-CLIP_EDITOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00001", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00001", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00002", + "gapId": "area:CONSOLE", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00002-area-CONSOLE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00002.py -- tests/files/web/generated/M21-GAP-00002-area-CONSOLE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00002", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00002", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00003", + "gapId": "area:DOPESHEET_EDITOR", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00003-area-DOPESHEET_EDITOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00003.py -- tests/files/web/generated/M21-GAP-00003-area-DOPESHEET_EDITOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00003", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00003", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00004", + "gapId": "area:EMPTY", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00004-area-EMPTY.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00004.py -- tests/files/web/generated/M21-GAP-00004-area-EMPTY.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00004", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00004", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00005", + "gapId": "area:FILE_BROWSER", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00005-area-FILE_BROWSER.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00005.py -- tests/files/web/generated/M21-GAP-00005-area-FILE_BROWSER.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00005", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00005", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00006", + "gapId": "area:GRAPH_EDITOR", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00006-area-GRAPH_EDITOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00006.py -- tests/files/web/generated/M21-GAP-00006-area-GRAPH_EDITOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00006", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00006", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00007", + "gapId": "area:IMAGE_EDITOR", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00007-area-IMAGE_EDITOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00007.py -- tests/files/web/generated/M21-GAP-00007-area-IMAGE_EDITOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00007", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00007", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00008", + "gapId": "area:INFO", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00008-area-INFO.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00008.py -- tests/files/web/generated/M21-GAP-00008-area-INFO.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00008", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00008", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00009", + "gapId": "area:NLA_EDITOR", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00009-area-NLA_EDITOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00009.py -- tests/files/web/generated/M21-GAP-00009-area-NLA_EDITOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00009", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00009", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00010", + "gapId": "area:NODE_EDITOR", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00010-area-NODE_EDITOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00010.py -- tests/files/web/generated/M21-GAP-00010-area-NODE_EDITOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00010", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00010", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00011", + "gapId": "area:OUTLINER", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00011-area-OUTLINER.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00011.py -- tests/files/web/generated/M21-GAP-00011-area-OUTLINER.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00011", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00011", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00012", + "gapId": "area:PREFERENCES", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00012-area-PREFERENCES.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00012.py -- tests/files/web/generated/M21-GAP-00012-area-PREFERENCES.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00012", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00012", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00013", + "gapId": "area:PROPERTIES", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00013-area-PROPERTIES.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00013.py -- tests/files/web/generated/M21-GAP-00013-area-PROPERTIES.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00013", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00013", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00014", + "gapId": "area:SEQUENCE_EDITOR", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00014-area-SEQUENCE_EDITOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00014.py -- tests/files/web/generated/M21-GAP-00014-area-SEQUENCE_EDITOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00014", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00014", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00015", + "gapId": "area:SPREADSHEET", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00015-area-SPREADSHEET.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00015.py -- tests/files/web/generated/M21-GAP-00015-area-SPREADSHEET.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00015", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00015", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00016", + "gapId": "area:STATUSBAR", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00016-area-STATUSBAR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00016.py -- tests/files/web/generated/M21-GAP-00016-area-STATUSBAR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00016", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00016", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00017", + "gapId": "area:TEXT_EDITOR", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00017-area-TEXT_EDITOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00017.py -- tests/files/web/generated/M21-GAP-00017-area-TEXT_EDITOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00017", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00017", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00018", + "gapId": "area:TOPBAR", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00018-area-TOPBAR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00018.py -- tests/files/web/generated/M21-GAP-00018-area-TOPBAR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00018", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00018", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00019", + "gapId": "area:VIEW_3D", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00019-area-VIEW_3D.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00019.py -- tests/files/web/generated/M21-GAP-00019-area-VIEW_3D.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00019", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00019", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00020", + "gapId": "io:anim.keying_set_export", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00020-io-anim.keying_set_export.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00020.py -- tests/files/web/generated/M21-GAP-00020-io-anim.keying_set_export.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00020", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00020", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00021", + "gapId": "io:collection.export_all", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00021-io-collection.export_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00021.py -- tests/files/web/generated/M21-GAP-00021-io-collection.export_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00021", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00021", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00022", + "gapId": "io:collection.exporter_add", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00022-io-collection.exporter_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00022.py -- tests/files/web/generated/M21-GAP-00022-io-collection.exporter_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00022", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00022", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00023", + "gapId": "io:collection.exporter_export", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00023-io-collection.exporter_export.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00023.py -- tests/files/web/generated/M21-GAP-00023-io-collection.exporter_export.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00023", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00023", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00024", + "gapId": "io:collection.exporter_move", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00024-io-collection.exporter_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00024.py -- tests/files/web/generated/M21-GAP-00024-io-collection.exporter_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00024", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00024", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00025", + "gapId": "io:collection.exporter_remove", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00025-io-collection.exporter_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00025.py -- tests/files/web/generated/M21-GAP-00025-io-collection.exporter_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00025", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00025", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00026", + "gapId": "io:collection.importer_add", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00026-io-collection.importer_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00026.py -- tests/files/web/generated/M21-GAP-00026-io-collection.importer_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00026", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00026", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00027", + "gapId": "io:collection.importer_remove", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00027-io-collection.importer_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00027.py -- tests/files/web/generated/M21-GAP-00027-io-collection.importer_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00027", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00027", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00028", + "gapId": "io:export_anim.bvh", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00028-io-export_anim.bvh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00028.py -- tests/files/web/generated/M21-GAP-00028-io-export_anim.bvh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00028", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00028", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00029", + "gapId": "io:export_scene.fbx", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00029-io-export_scene.fbx.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00029.py -- tests/files/web/generated/M21-GAP-00029-io-export_scene.fbx.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00029", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00029", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00030", + "gapId": "io:export_scene.gltf", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00030-io-export_scene.gltf.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00030.py -- tests/files/web/generated/M21-GAP-00030-io-export_scene.gltf.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00030", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00030", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00031", + "gapId": "io:image.import_as_mesh_planes", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00031-io-image.import_as_mesh_planes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00031.py -- tests/files/web/generated/M21-GAP-00031-io-image.import_as_mesh_planes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00031", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00031", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00032", + "gapId": "io:import_anim.bvh", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00032-io-import_anim.bvh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00032.py -- tests/files/web/generated/M21-GAP-00032-io-import_anim.bvh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00032", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00032", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00033", + "gapId": "io:import_curve.svg", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00033-io-import_curve.svg.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00033.py -- tests/files/web/generated/M21-GAP-00033-io-import_curve.svg.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00033", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00033", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00034", + "gapId": "io:import_scene.fbx", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00034-io-import_scene.fbx.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00034.py -- tests/files/web/generated/M21-GAP-00034-io-import_scene.fbx.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00034", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00034", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00035", + "gapId": "io:import_scene.gltf", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00035-io-import_scene.gltf.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00035.py -- tests/files/web/generated/M21-GAP-00035-io-import_scene.gltf.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00035", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00035", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00036", + "gapId": "io:node.add_import_node", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00036-io-node.add_import_node.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00036.py -- tests/files/web/generated/M21-GAP-00036-io-node.add_import_node.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00036", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00036", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00037", + "gapId": "io:object.volume_import", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00037-io-object.volume_import.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00037.py -- tests/files/web/generated/M21-GAP-00037-io-object.volume_import.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00037", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00037", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00038", + "gapId": "io:preferences.keyconfig_export", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00038-io-preferences.keyconfig_export.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00038.py -- tests/files/web/generated/M21-GAP-00038-io-preferences.keyconfig_export.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00038", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00038", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00039", + "gapId": "io:preferences.keyconfig_import", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00039-io-preferences.keyconfig_import.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00039.py -- tests/files/web/generated/M21-GAP-00039-io-preferences.keyconfig_import.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00039", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00039", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00040", + "gapId": "io:sequencer.export_subtitles", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00040-io-sequencer.export_subtitles.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00040.py -- tests/files/web/generated/M21-GAP-00040-io-sequencer.export_subtitles.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00040", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00040", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00041", + "gapId": "io:uv.export_layout", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00041-io-uv.export_layout.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00041.py -- tests/files/web/generated/M21-GAP-00041-io-uv.export_layout.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00041", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00041", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00042", + "gapId": "io:wm.collection_export_all", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00042-io-wm.collection_export_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00042.py -- tests/files/web/generated/M21-GAP-00042-io-wm.collection_export_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00042", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00042", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00043", + "gapId": "io:wm.drop_import_file", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00043-io-wm.drop_import_file.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00043.py -- tests/files/web/generated/M21-GAP-00043-io-wm.drop_import_file.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00043", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00043", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00044", + "gapId": "io:wm.fbx_import", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00044-io-wm.fbx_import.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00044.py -- tests/files/web/generated/M21-GAP-00044-io-wm.fbx_import.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00044", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00044", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00045", + "gapId": "io:wm.grease_pencil_export_svg", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00045-io-wm.grease_pencil_export_svg.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00045.py -- tests/files/web/generated/M21-GAP-00045-io-wm.grease_pencil_export_svg.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00045", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00045", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00046", + "gapId": "io:wm.grease_pencil_import_svg", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00046-io-wm.grease_pencil_import_svg.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00046.py -- tests/files/web/generated/M21-GAP-00046-io-wm.grease_pencil_import_svg.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00046", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00046", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00047", + "gapId": "io:wm.obj_export", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00047-io-wm.obj_export.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00047.py -- tests/files/web/generated/M21-GAP-00047-io-wm.obj_export.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00047", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00047", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00048", + "gapId": "io:wm.obj_import", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00048-io-wm.obj_import.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00048.py -- tests/files/web/generated/M21-GAP-00048-io-wm.obj_import.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00048", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00048", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00049", + "gapId": "io:wm.ply_export", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00049-io-wm.ply_export.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00049.py -- tests/files/web/generated/M21-GAP-00049-io-wm.ply_export.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00049", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00049", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00050", + "gapId": "io:wm.ply_import", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00050-io-wm.ply_import.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00050.py -- tests/files/web/generated/M21-GAP-00050-io-wm.ply_import.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00050", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00050", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00051", + "gapId": "io:wm.stl_export", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00051-io-wm.stl_export.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00051.py -- tests/files/web/generated/M21-GAP-00051-io-wm.stl_export.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00051", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00051", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00052", + "gapId": "io:wm.stl_import", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00052-io-wm.stl_import.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00052.py -- tests/files/web/generated/M21-GAP-00052-io-wm.stl_import.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00052", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00052", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00053", + "gapId": "keymap-item:3D View Generic:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00053-keymap-item-3D-View-Generic-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00053.py -- tests/files/web/generated/M21-GAP-00053-keymap-item-3D-View-Generic-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00053", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00053", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00054", + "gapId": "keymap-item:3D View Generic:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00054-keymap-item-3D-View-Generic-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00054.py -- tests/files/web/generated/M21-GAP-00054-keymap-item-3D-View-Generic-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00054", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00054", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00055", + "gapId": "keymap-item:3D View Tool: Bend:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00055-keymap-item-3D-View-Tool-Bend-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00055.py -- tests/files/web/generated/M21-GAP-00055-keymap-item-3D-View-Tool-Bend-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00055", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00055", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00056", + "gapId": "keymap-item:3D View Tool: Breakdowner:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00056-keymap-item-3D-View-Tool-Breakdowner-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00056.py -- tests/files/web/generated/M21-GAP-00056-keymap-item-3D-View-Tool-Breakdowner-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00056", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00056", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00057", + "gapId": "keymap-item:3D View Tool: Cursor:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00057-keymap-item-3D-View-Tool-Cursor-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00057.py -- tests/files/web/generated/M21-GAP-00057-keymap-item-3D-View-Tool-Cursor-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00057", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00057", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00058", + "gapId": "keymap-item:3D View Tool: Cursor:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00058-keymap-item-3D-View-Tool-Cursor-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00058.py -- tests/files/web/generated/M21-GAP-00058-keymap-item-3D-View-Tool-Cursor-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00058", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00058", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00059", + "gapId": "keymap-item:3D View Tool: Edit Armature, B-Bone Size:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00059-keymap-item-3D-View-Tool-Edit-Armature-B-Bone-Size-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00059.py -- tests/files/web/generated/M21-GAP-00059-keymap-item-3D-View-Tool-Edit-Armature-B-Bone-Size-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00059", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00059", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00060", + "gapId": "keymap-item:3D View Tool: Edit Armature, Bone Envelope:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00060-keymap-item-3D-View-Tool-Edit-Armature-Bone-Envelope-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00060.py -- tests/files/web/generated/M21-GAP-00060-keymap-item-3D-View-Tool-Edit-Armature-Bone-Envelope-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00060", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00060", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00061", + "gapId": "keymap-item:3D View Tool: Edit Armature, Extrude to Cursor:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00061-keymap-item-3D-View-Tool-Edit-Armature-Extrude-to-Cursor-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00061.py -- tests/files/web/generated/M21-GAP-00061-keymap-item-3D-View-Tool-Edit-Armature-Extrude-to-Cursor-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00061", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00061", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00062", + "gapId": "keymap-item:3D View Tool: Edit Armature, Extrude:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00062-keymap-item-3D-View-Tool-Edit-Armature-Extrude-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00062.py -- tests/files/web/generated/M21-GAP-00062-keymap-item-3D-View-Tool-Edit-Armature-Extrude-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00062", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00062", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00063", + "gapId": "keymap-item:3D View Tool: Edit Armature, Roll:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00063-keymap-item-3D-View-Tool-Edit-Armature-Roll-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00063.py -- tests/files/web/generated/M21-GAP-00063-keymap-item-3D-View-Tool-Edit-Armature-Roll-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00063", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00063", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00064", + "gapId": "keymap-item:3D View Tool: Edit Curve, Curve Pen:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00064-keymap-item-3D-View-Tool-Edit-Curve-Curve-Pen-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00064.py -- tests/files/web/generated/M21-GAP-00064-keymap-item-3D-View-Tool-Edit-Curve-Curve-Pen-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00064", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00064", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00065", + "gapId": "keymap-item:3D View Tool: Edit Curve, Curve Pen:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00065-keymap-item-3D-View-Tool-Edit-Curve-Curve-Pen-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00065.py -- tests/files/web/generated/M21-GAP-00065-keymap-item-3D-View-Tool-Edit-Curve-Curve-Pen-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00065", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00065", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00066", + "gapId": "keymap-item:3D View Tool: Edit Curve, Curve Pen:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00066-keymap-item-3D-View-Tool-Edit-Curve-Curve-Pen-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00066.py -- tests/files/web/generated/M21-GAP-00066-keymap-item-3D-View-Tool-Edit-Curve-Curve-Pen-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00066", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00066", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00067", + "gapId": "keymap-item:3D View Tool: Edit Curve, Draw:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00067-keymap-item-3D-View-Tool-Edit-Curve-Draw-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00067.py -- tests/files/web/generated/M21-GAP-00067-keymap-item-3D-View-Tool-Edit-Curve-Draw-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00067", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00067", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00068", + "gapId": "keymap-item:3D View Tool: Edit Curve, Extrude to Cursor:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00068-keymap-item-3D-View-Tool-Edit-Curve-Extrude-to-Cursor-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00068.py -- tests/files/web/generated/M21-GAP-00068-keymap-item-3D-View-Tool-Edit-Curve-Extrude-to-Cursor-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00068", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00068", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00069", + "gapId": "keymap-item:3D View Tool: Edit Curve, Extrude:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00069-keymap-item-3D-View-Tool-Edit-Curve-Extrude-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00069.py -- tests/files/web/generated/M21-GAP-00069-keymap-item-3D-View-Tool-Edit-Curve-Extrude-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00069", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00069", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00070", + "gapId": "keymap-item:3D View Tool: Edit Curve, Radius:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00070-keymap-item-3D-View-Tool-Edit-Curve-Radius-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00070.py -- tests/files/web/generated/M21-GAP-00070-keymap-item-3D-View-Tool-Edit-Curve-Radius-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00070", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00070", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00071", + "gapId": "keymap-item:3D View Tool: Edit Curve, Randomize:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00071-keymap-item-3D-View-Tool-Edit-Curve-Randomize-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00071.py -- tests/files/web/generated/M21-GAP-00071-keymap-item-3D-View-Tool-Edit-Curve-Randomize-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00071", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00071", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00072", + "gapId": "keymap-item:3D View Tool: Edit Curve, Tilt:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00072-keymap-item-3D-View-Tool-Edit-Curve-Tilt-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00072.py -- tests/files/web/generated/M21-GAP-00072-keymap-item-3D-View-Tool-Edit-Curve-Tilt-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00072", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00072", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00073", + "gapId": "keymap-item:3D View Tool: Edit Curves, Draw:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00073-keymap-item-3D-View-Tool-Edit-Curves-Draw-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00073.py -- tests/files/web/generated/M21-GAP-00073-keymap-item-3D-View-Tool-Edit-Curves-Draw-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00073", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00073", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00074", + "gapId": "keymap-item:3D View Tool: Edit Curves, Pen:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00074-keymap-item-3D-View-Tool-Edit-Curves-Pen-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00074.py -- tests/files/web/generated/M21-GAP-00074-keymap-item-3D-View-Tool-Edit-Curves-Pen-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00074", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00074", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00075", + "gapId": "keymap-item:3D View Tool: Edit Curves, Pen:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00075-keymap-item-3D-View-Tool-Edit-Curves-Pen-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00075.py -- tests/files/web/generated/M21-GAP-00075-keymap-item-3D-View-Tool-Edit-Curves-Pen-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00075", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00075", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00076", + "gapId": "keymap-item:3D View Tool: Edit Curves, Pen:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00076-keymap-item-3D-View-Tool-Edit-Curves-Pen-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00076.py -- tests/files/web/generated/M21-GAP-00076-keymap-item-3D-View-Tool-Edit-Curves-Pen-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00076", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00076", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00077", + "gapId": "keymap-item:3D View Tool: Edit Curves, Pen:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00077-keymap-item-3D-View-Tool-Edit-Curves-Pen-VIEW_3D-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00077.py -- tests/files/web/generated/M21-GAP-00077-keymap-item-3D-View-Tool-Edit-Curves-Pen-VIEW_3D-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00077", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00077", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00078", + "gapId": "keymap-item:3D View Tool: Edit Grease Pencil, Gradient:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00078-keymap-item-3D-View-Tool-Edit-Grease-Pencil-Gradient-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00078.py -- tests/files/web/generated/M21-GAP-00078-keymap-item-3D-View-Tool-Edit-Grease-Pencil-Gradient-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00078", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00078", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00079", + "gapId": "keymap-item:3D View Tool: Edit Grease Pencil, Interpolate:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00079-keymap-item-3D-View-Tool-Edit-Grease-Pencil-Interpolate-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00079.py -- tests/files/web/generated/M21-GAP-00079-keymap-item-3D-View-Tool-Edit-Grease-Pencil-Interpolate-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00079", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00079", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00080", + "gapId": "keymap-item:3D View Tool: Edit Grease Pencil, Pen:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00080-keymap-item-3D-View-Tool-Edit-Grease-Pencil-Pen-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00080.py -- tests/files/web/generated/M21-GAP-00080-keymap-item-3D-View-Tool-Edit-Grease-Pencil-Pen-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00080", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00080", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00081", + "gapId": "keymap-item:3D View Tool: Edit Grease Pencil, Pen:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00081-keymap-item-3D-View-Tool-Edit-Grease-Pencil-Pen-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00081.py -- tests/files/web/generated/M21-GAP-00081-keymap-item-3D-View-Tool-Edit-Grease-Pencil-Pen-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00081", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00081", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00082", + "gapId": "keymap-item:3D View Tool: Edit Grease Pencil, Pen:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00082-keymap-item-3D-View-Tool-Edit-Grease-Pencil-Pen-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00082.py -- tests/files/web/generated/M21-GAP-00082-keymap-item-3D-View-Tool-Edit-Grease-Pencil-Pen-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00082", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00082", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00083", + "gapId": "keymap-item:3D View Tool: Edit Grease Pencil, Pen:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00083-keymap-item-3D-View-Tool-Edit-Grease-Pencil-Pen-VIEW_3D-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00083.py -- tests/files/web/generated/M21-GAP-00083-keymap-item-3D-View-Tool-Edit-Grease-Pencil-Pen-VIEW_3D-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00083", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00083", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00084", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Bevel:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00084-keymap-item-3D-View-Tool-Edit-Mesh-Bevel-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00084.py -- tests/files/web/generated/M21-GAP-00084-keymap-item-3D-View-Tool-Edit-Mesh-Bevel-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00084", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00084", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00085", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Bisect:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00085-keymap-item-3D-View-Tool-Edit-Mesh-Bisect-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00085.py -- tests/files/web/generated/M21-GAP-00085-keymap-item-3D-View-Tool-Edit-Mesh-Bisect-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00085", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00085", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00086", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Edge Slide:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00086-keymap-item-3D-View-Tool-Edit-Mesh-Edge-Slide-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00086.py -- tests/files/web/generated/M21-GAP-00086-keymap-item-3D-View-Tool-Edit-Mesh-Edge-Slide-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00086", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00086", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00087", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Extrude Along Normals:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00087-keymap-item-3D-View-Tool-Edit-Mesh-Extrude-Along-Normals-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00087.py -- tests/files/web/generated/M21-GAP-00087-keymap-item-3D-View-Tool-Edit-Mesh-Extrude-Along-Normals-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00087", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00087", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00088", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Extrude Individual:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00088-keymap-item-3D-View-Tool-Edit-Mesh-Extrude-Individual-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00088.py -- tests/files/web/generated/M21-GAP-00088-keymap-item-3D-View-Tool-Edit-Mesh-Extrude-Individual-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00088", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00088", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00089", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Extrude Manifold:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00089-keymap-item-3D-View-Tool-Edit-Mesh-Extrude-Manifold-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00089.py -- tests/files/web/generated/M21-GAP-00089-keymap-item-3D-View-Tool-Edit-Mesh-Extrude-Manifold-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00089", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00089", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00090", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Extrude Region:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00090-keymap-item-3D-View-Tool-Edit-Mesh-Extrude-Region-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00090.py -- tests/files/web/generated/M21-GAP-00090-keymap-item-3D-View-Tool-Edit-Mesh-Extrude-Region-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00090", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00090", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00091", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Extrude to Cursor:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00091-keymap-item-3D-View-Tool-Edit-Mesh-Extrude-to-Cursor-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00091.py -- tests/files/web/generated/M21-GAP-00091-keymap-item-3D-View-Tool-Edit-Mesh-Extrude-to-Cursor-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00091", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00091", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00092", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Inset Faces:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00092-keymap-item-3D-View-Tool-Edit-Mesh-Inset-Faces-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00092.py -- tests/files/web/generated/M21-GAP-00092-keymap-item-3D-View-Tool-Edit-Mesh-Inset-Faces-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00092", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00092", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00093", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Knife:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00093-keymap-item-3D-View-Tool-Edit-Mesh-Knife-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00093.py -- tests/files/web/generated/M21-GAP-00093-keymap-item-3D-View-Tool-Edit-Mesh-Knife-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00093", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00093", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00094", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Loop Cut:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00094-keymap-item-3D-View-Tool-Edit-Mesh-Loop-Cut-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00094.py -- tests/files/web/generated/M21-GAP-00094-keymap-item-3D-View-Tool-Edit-Mesh-Loop-Cut-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00094", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00094", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00095", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Offset Edge Loop Cut:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00095-keymap-item-3D-View-Tool-Edit-Mesh-Offset-Edge-Loop-Cut-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00095.py -- tests/files/web/generated/M21-GAP-00095-keymap-item-3D-View-Tool-Edit-Mesh-Offset-Edge-Loop-Cut-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00095", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00095", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00096", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Poly Build:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00096-keymap-item-3D-View-Tool-Edit-Mesh-Poly-Build-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00096.py -- tests/files/web/generated/M21-GAP-00096-keymap-item-3D-View-Tool-Edit-Mesh-Poly-Build-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00096", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00096", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00097", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Poly Build:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00097-keymap-item-3D-View-Tool-Edit-Mesh-Poly-Build-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00097.py -- tests/files/web/generated/M21-GAP-00097-keymap-item-3D-View-Tool-Edit-Mesh-Poly-Build-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00097", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00097", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00098", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Poly Build:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00098-keymap-item-3D-View-Tool-Edit-Mesh-Poly-Build-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00098.py -- tests/files/web/generated/M21-GAP-00098-keymap-item-3D-View-Tool-Edit-Mesh-Poly-Build-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00098", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00098", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00099", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Push/Pull:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00099-keymap-item-3D-View-Tool-Edit-Mesh-Push-Pull-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00099.py -- tests/files/web/generated/M21-GAP-00099-keymap-item-3D-View-Tool-Edit-Mesh-Push-Pull-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00099", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00099", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00100", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Randomize:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00100-keymap-item-3D-View-Tool-Edit-Mesh-Randomize-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00100.py -- tests/files/web/generated/M21-GAP-00100-keymap-item-3D-View-Tool-Edit-Mesh-Randomize-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00100", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00100", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00101", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Rip Edge:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00101-keymap-item-3D-View-Tool-Edit-Mesh-Rip-Edge-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00101.py -- tests/files/web/generated/M21-GAP-00101-keymap-item-3D-View-Tool-Edit-Mesh-Rip-Edge-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00101", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00101", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00102", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Rip Region:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00102-keymap-item-3D-View-Tool-Edit-Mesh-Rip-Region-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00102.py -- tests/files/web/generated/M21-GAP-00102-keymap-item-3D-View-Tool-Edit-Mesh-Rip-Region-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00102", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00102", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00103", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Shrink/Fatten:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00103-keymap-item-3D-View-Tool-Edit-Mesh-Shrink-Fatten-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00103.py -- tests/files/web/generated/M21-GAP-00103-keymap-item-3D-View-Tool-Edit-Mesh-Shrink-Fatten-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00103", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00103", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00104", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Smooth:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00104-keymap-item-3D-View-Tool-Edit-Mesh-Smooth-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00104.py -- tests/files/web/generated/M21-GAP-00104-keymap-item-3D-View-Tool-Edit-Mesh-Smooth-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00104", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00104", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00105", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Spin Duplicates:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00105-keymap-item-3D-View-Tool-Edit-Mesh-Spin-Duplicates-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00105.py -- tests/files/web/generated/M21-GAP-00105-keymap-item-3D-View-Tool-Edit-Mesh-Spin-Duplicates-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00105", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00105", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00106", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Spin:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00106-keymap-item-3D-View-Tool-Edit-Mesh-Spin-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00106.py -- tests/files/web/generated/M21-GAP-00106-keymap-item-3D-View-Tool-Edit-Mesh-Spin-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00106", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00106", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00107", + "gapId": "keymap-item:3D View Tool: Edit Mesh, To Sphere:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00107-keymap-item-3D-View-Tool-Edit-Mesh-To-Sphere-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00107.py -- tests/files/web/generated/M21-GAP-00107-keymap-item-3D-View-Tool-Edit-Mesh-To-Sphere-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00107", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00107", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00108", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Vertex Slide:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00108-keymap-item-3D-View-Tool-Edit-Mesh-Vertex-Slide-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00108.py -- tests/files/web/generated/M21-GAP-00108-keymap-item-3D-View-Tool-Edit-Mesh-Vertex-Slide-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00108", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00108", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00109", + "gapId": "keymap-item:3D View Tool: Edit Text, Select Text:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00109-keymap-item-3D-View-Tool-Edit-Text-Select-Text-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00109.py -- tests/files/web/generated/M21-GAP-00109-keymap-item-3D-View-Tool-Edit-Text-Select-Text-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00109", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00109", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00110", + "gapId": "keymap-item:3D View Tool: Edit Text, Select Text:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00110-keymap-item-3D-View-Tool-Edit-Text-Select-Text-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00110.py -- tests/files/web/generated/M21-GAP-00110-keymap-item-3D-View-Tool-Edit-Text-Select-Text-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00110", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00110", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00111", + "gapId": "keymap-item:3D View Tool: Measure:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00111-keymap-item-3D-View-Tool-Measure-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00111.py -- tests/files/web/generated/M21-GAP-00111-keymap-item-3D-View-Tool-Measure-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00111", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00111", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00112", + "gapId": "keymap-item:3D View Tool: Measure:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00112-keymap-item-3D-View-Tool-Measure-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00112.py -- tests/files/web/generated/M21-GAP-00112-keymap-item-3D-View-Tool-Measure-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00112", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00112", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00113", + "gapId": "keymap-item:3D View Tool: Measure:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00113-keymap-item-3D-View-Tool-Measure-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00113.py -- tests/files/web/generated/M21-GAP-00113-keymap-item-3D-View-Tool-Measure-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00113", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00113", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00114", + "gapId": "keymap-item:3D View Tool: Move:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00114-keymap-item-3D-View-Tool-Move-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00114.py -- tests/files/web/generated/M21-GAP-00114-keymap-item-3D-View-Tool-Move-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00114", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00114", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00115", + "gapId": "keymap-item:3D View Tool: Object, Add Primitive:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00115-keymap-item-3D-View-Tool-Object-Add-Primitive-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00115.py -- tests/files/web/generated/M21-GAP-00115-keymap-item-3D-View-Tool-Object-Add-Primitive-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00115", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00115", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00116", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Arc:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00116-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Arc-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00116.py -- tests/files/web/generated/M21-GAP-00116-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Arc-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00116", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00116", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00117", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Arc:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00117-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Arc-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00117.py -- tests/files/web/generated/M21-GAP-00117-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Arc-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00117", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00117", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00118", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Arc:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00118-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Arc-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00118.py -- tests/files/web/generated/M21-GAP-00118-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Arc-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00118", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00118", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00119", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Box:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00119-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Box-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00119.py -- tests/files/web/generated/M21-GAP-00119-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Box-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00119", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00119", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00120", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Box:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00120-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Box-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00120.py -- tests/files/web/generated/M21-GAP-00120-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Box-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00120", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00120", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00121", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Box:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00121-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Box-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00121.py -- tests/files/web/generated/M21-GAP-00121-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Box-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00121", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00121", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00122", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Circle:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00122-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Circle-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00122.py -- tests/files/web/generated/M21-GAP-00122-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Circle-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00122", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00122", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00123", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Circle:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00123-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Circle-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00123.py -- tests/files/web/generated/M21-GAP-00123-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Circle-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00123", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00123", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00124", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Circle:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00124-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Circle-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00124.py -- tests/files/web/generated/M21-GAP-00124-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Circle-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00124", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00124", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00125", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Curve:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00125-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Curve-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00125.py -- tests/files/web/generated/M21-GAP-00125-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Curve-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00125", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00125", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00126", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Eyedropper:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00126-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Eyedropper-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00126.py -- tests/files/web/generated/M21-GAP-00126-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Eyedropper-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00126", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00126", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00127", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Eyedropper:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00127-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Eyedropper-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00127.py -- tests/files/web/generated/M21-GAP-00127-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Eyedropper-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00127", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00127", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00128", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Eyedropper:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00128-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Eyedropper-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00128.py -- tests/files/web/generated/M21-GAP-00128-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Eyedropper-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00128", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00128", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00129", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Eyedropper:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00129-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Eyedropper-VIEW_3D-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00129.py -- tests/files/web/generated/M21-GAP-00129-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Eyedropper-VIEW_3D-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00129", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00129", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00130", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Interpolate:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00130-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Interpolate-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00130.py -- tests/files/web/generated/M21-GAP-00130-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Interpolate-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00130", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00130", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00131", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Line:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00131-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Line-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00131.py -- tests/files/web/generated/M21-GAP-00131-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Line-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00131", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00131", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00132", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Line:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00132-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Line-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00132.py -- tests/files/web/generated/M21-GAP-00132-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Line-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00132", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00132", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00133", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Line:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00133-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Line-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00133.py -- tests/files/web/generated/M21-GAP-00133-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Line-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00133", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00133", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00134", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Polyline:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00134-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Polyline-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00134.py -- tests/files/web/generated/M21-GAP-00134-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Polyline-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00134", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00134", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00135", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Polyline:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00135-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Polyline-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00135.py -- tests/files/web/generated/M21-GAP-00135-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Polyline-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00135", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00135", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00136", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Trim:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00136-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Trim-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00136.py -- tests/files/web/generated/M21-GAP-00136-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Trim-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00136", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00136", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00137", + "gapId": "keymap-item:3D View Tool: Paint Weight, Gradient:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00137-keymap-item-3D-View-Tool-Paint-Weight-Gradient-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00137.py -- tests/files/web/generated/M21-GAP-00137-keymap-item-3D-View-Tool-Paint-Weight-Gradient-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00137", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00137", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00138", + "gapId": "keymap-item:3D View Tool: Paint Weight, Sample Vertex Group:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00138-keymap-item-3D-View-Tool-Paint-Weight-Sample-Vertex-Group-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00138.py -- tests/files/web/generated/M21-GAP-00138-keymap-item-3D-View-Tool-Paint-Weight-Sample-Vertex-Group-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00138", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00138", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00139", + "gapId": "keymap-item:3D View Tool: Paint Weight, Sample Weight:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00139-keymap-item-3D-View-Tool-Paint-Weight-Sample-Weight-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00139.py -- tests/files/web/generated/M21-GAP-00139-keymap-item-3D-View-Tool-Paint-Weight-Sample-Weight-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00139", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00139", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00140", + "gapId": "keymap-item:3D View Tool: Paint Weight, Sample Weight:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00140-keymap-item-3D-View-Tool-Paint-Weight-Sample-Weight-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00140.py -- tests/files/web/generated/M21-GAP-00140-keymap-item-3D-View-Tool-Paint-Weight-Sample-Weight-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00140", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00140", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00141", + "gapId": "keymap-item:3D View Tool: Push:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00141-keymap-item-3D-View-Tool-Push-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00141.py -- tests/files/web/generated/M21-GAP-00141-keymap-item-3D-View-Tool-Push-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00141", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00141", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00142", + "gapId": "keymap-item:3D View Tool: Relax:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00142-keymap-item-3D-View-Tool-Relax-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00142.py -- tests/files/web/generated/M21-GAP-00142-keymap-item-3D-View-Tool-Relax-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00142", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00142", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00143", + "gapId": "keymap-item:3D View Tool: Rotate:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00143-keymap-item-3D-View-Tool-Rotate-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00143.py -- tests/files/web/generated/M21-GAP-00143-keymap-item-3D-View-Tool-Rotate-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00143", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00143", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00144", + "gapId": "keymap-item:3D View Tool: Scale:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00144-keymap-item-3D-View-Tool-Scale-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00144.py -- tests/files/web/generated/M21-GAP-00144-keymap-item-3D-View-Tool-Scale-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00144", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00144", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00145", + "gapId": "keymap-item:3D View Tool: Sculpt, Box Face Set:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00145-keymap-item-3D-View-Tool-Sculpt-Box-Face-Set-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00145.py -- tests/files/web/generated/M21-GAP-00145-keymap-item-3D-View-Tool-Sculpt-Box-Face-Set-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00145", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00145", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00146", + "gapId": "keymap-item:3D View Tool: Sculpt, Box Hide:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00146-keymap-item-3D-View-Tool-Sculpt-Box-Hide-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00146.py -- tests/files/web/generated/M21-GAP-00146-keymap-item-3D-View-Tool-Sculpt-Box-Hide-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00146", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00146", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00147", + "gapId": "keymap-item:3D View Tool: Sculpt, Box Hide:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00147-keymap-item-3D-View-Tool-Sculpt-Box-Hide-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00147.py -- tests/files/web/generated/M21-GAP-00147-keymap-item-3D-View-Tool-Sculpt-Box-Hide-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00147", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00147", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00148", + "gapId": "keymap-item:3D View Tool: Sculpt, Box Hide:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00148-keymap-item-3D-View-Tool-Sculpt-Box-Hide-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00148.py -- tests/files/web/generated/M21-GAP-00148-keymap-item-3D-View-Tool-Sculpt-Box-Hide-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00148", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00148", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00149", + "gapId": "keymap-item:3D View Tool: Sculpt, Box Mask:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00149-keymap-item-3D-View-Tool-Sculpt-Box-Mask-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00149.py -- tests/files/web/generated/M21-GAP-00149-keymap-item-3D-View-Tool-Sculpt-Box-Mask-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00149", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00149", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00150", + "gapId": "keymap-item:3D View Tool: Sculpt, Box Mask:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00150-keymap-item-3D-View-Tool-Sculpt-Box-Mask-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00150.py -- tests/files/web/generated/M21-GAP-00150-keymap-item-3D-View-Tool-Sculpt-Box-Mask-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00150", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00150", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00151", + "gapId": "keymap-item:3D View Tool: Sculpt, Box Trim:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00151-keymap-item-3D-View-Tool-Sculpt-Box-Trim-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00151.py -- tests/files/web/generated/M21-GAP-00151-keymap-item-3D-View-Tool-Sculpt-Box-Trim-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00151", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00151", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00152", + "gapId": "keymap-item:3D View Tool: Sculpt, Cloth Filter:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00152-keymap-item-3D-View-Tool-Sculpt-Cloth-Filter-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00152.py -- tests/files/web/generated/M21-GAP-00152-keymap-item-3D-View-Tool-Sculpt-Cloth-Filter-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00152", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00152", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00153", + "gapId": "keymap-item:3D View Tool: Sculpt, Color Filter:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00153-keymap-item-3D-View-Tool-Sculpt-Color-Filter-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00153.py -- tests/files/web/generated/M21-GAP-00153-keymap-item-3D-View-Tool-Sculpt-Color-Filter-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00153", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00153", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00154", + "gapId": "keymap-item:3D View Tool: Sculpt, Color Filter:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00154-keymap-item-3D-View-Tool-Sculpt-Color-Filter-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00154.py -- tests/files/web/generated/M21-GAP-00154-keymap-item-3D-View-Tool-Sculpt-Color-Filter-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00154", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00154", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00155", + "gapId": "keymap-item:3D View Tool: Sculpt, Face Set Edit:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00155-keymap-item-3D-View-Tool-Sculpt-Face-Set-Edit-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00155.py -- tests/files/web/generated/M21-GAP-00155-keymap-item-3D-View-Tool-Sculpt-Face-Set-Edit-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00155", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00155", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00156", + "gapId": "keymap-item:3D View Tool: Sculpt, Lasso Face Set:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00156-keymap-item-3D-View-Tool-Sculpt-Lasso-Face-Set-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00156.py -- tests/files/web/generated/M21-GAP-00156-keymap-item-3D-View-Tool-Sculpt-Lasso-Face-Set-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00156", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00156", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00157", + "gapId": "keymap-item:3D View Tool: Sculpt, Lasso Hide:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00157-keymap-item-3D-View-Tool-Sculpt-Lasso-Hide-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00157.py -- tests/files/web/generated/M21-GAP-00157-keymap-item-3D-View-Tool-Sculpt-Lasso-Hide-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00157", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00157", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00158", + "gapId": "keymap-item:3D View Tool: Sculpt, Lasso Hide:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00158-keymap-item-3D-View-Tool-Sculpt-Lasso-Hide-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00158.py -- tests/files/web/generated/M21-GAP-00158-keymap-item-3D-View-Tool-Sculpt-Lasso-Hide-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00158", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00158", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00159", + "gapId": "keymap-item:3D View Tool: Sculpt, Lasso Hide:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00159-keymap-item-3D-View-Tool-Sculpt-Lasso-Hide-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00159.py -- tests/files/web/generated/M21-GAP-00159-keymap-item-3D-View-Tool-Sculpt-Lasso-Hide-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00159", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00159", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00160", + "gapId": "keymap-item:3D View Tool: Sculpt, Lasso Mask:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00160-keymap-item-3D-View-Tool-Sculpt-Lasso-Mask-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00160.py -- tests/files/web/generated/M21-GAP-00160-keymap-item-3D-View-Tool-Sculpt-Lasso-Mask-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00160", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00160", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00161", + "gapId": "keymap-item:3D View Tool: Sculpt, Lasso Mask:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00161-keymap-item-3D-View-Tool-Sculpt-Lasso-Mask-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00161.py -- tests/files/web/generated/M21-GAP-00161-keymap-item-3D-View-Tool-Sculpt-Lasso-Mask-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00161", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00161", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00162", + "gapId": "keymap-item:3D View Tool: Sculpt, Lasso Trim:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00162-keymap-item-3D-View-Tool-Sculpt-Lasso-Trim-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00162.py -- tests/files/web/generated/M21-GAP-00162-keymap-item-3D-View-Tool-Sculpt-Lasso-Trim-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00162", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00162", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00163", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Face Set:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00163-keymap-item-3D-View-Tool-Sculpt-Line-Face-Set-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00163.py -- tests/files/web/generated/M21-GAP-00163-keymap-item-3D-View-Tool-Sculpt-Line-Face-Set-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00163", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00163", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00164", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Hide:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00164-keymap-item-3D-View-Tool-Sculpt-Line-Hide-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00164.py -- tests/files/web/generated/M21-GAP-00164-keymap-item-3D-View-Tool-Sculpt-Line-Hide-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00164", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00164", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00165", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Hide:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00165-keymap-item-3D-View-Tool-Sculpt-Line-Hide-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00165.py -- tests/files/web/generated/M21-GAP-00165-keymap-item-3D-View-Tool-Sculpt-Line-Hide-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00165", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00165", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00166", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Hide:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00166-keymap-item-3D-View-Tool-Sculpt-Line-Hide-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00166.py -- tests/files/web/generated/M21-GAP-00166-keymap-item-3D-View-Tool-Sculpt-Line-Hide-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00166", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00166", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00167", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Mask:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00167-keymap-item-3D-View-Tool-Sculpt-Line-Mask-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00167.py -- tests/files/web/generated/M21-GAP-00167-keymap-item-3D-View-Tool-Sculpt-Line-Mask-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00167", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00167", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00168", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Mask:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00168-keymap-item-3D-View-Tool-Sculpt-Line-Mask-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00168.py -- tests/files/web/generated/M21-GAP-00168-keymap-item-3D-View-Tool-Sculpt-Line-Mask-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00168", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00168", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00169", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Project:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00169-keymap-item-3D-View-Tool-Sculpt-Line-Project-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00169.py -- tests/files/web/generated/M21-GAP-00169-keymap-item-3D-View-Tool-Sculpt-Line-Project-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00169", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00169", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00170", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Trim:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00170-keymap-item-3D-View-Tool-Sculpt-Line-Trim-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00170.py -- tests/files/web/generated/M21-GAP-00170-keymap-item-3D-View-Tool-Sculpt-Line-Trim-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00170", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00170", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00171", + "gapId": "keymap-item:3D View Tool: Sculpt, Mask by Color:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00171-keymap-item-3D-View-Tool-Sculpt-Mask-by-Color-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00171.py -- tests/files/web/generated/M21-GAP-00171-keymap-item-3D-View-Tool-Sculpt-Mask-by-Color-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00171", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00171", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00172", + "gapId": "keymap-item:3D View Tool: Sculpt, Mesh Filter:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00172-keymap-item-3D-View-Tool-Sculpt-Mesh-Filter-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00172.py -- tests/files/web/generated/M21-GAP-00172-keymap-item-3D-View-Tool-Sculpt-Mesh-Filter-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00172", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00172", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00173", + "gapId": "keymap-item:3D View Tool: Sculpt, Polyline Face Set:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00173-keymap-item-3D-View-Tool-Sculpt-Polyline-Face-Set-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00173.py -- tests/files/web/generated/M21-GAP-00173-keymap-item-3D-View-Tool-Sculpt-Polyline-Face-Set-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00173", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00173", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00174", + "gapId": "keymap-item:3D View Tool: Sculpt, Polyline Hide:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00174-keymap-item-3D-View-Tool-Sculpt-Polyline-Hide-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00174.py -- tests/files/web/generated/M21-GAP-00174-keymap-item-3D-View-Tool-Sculpt-Polyline-Hide-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00174", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00174", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00175", + "gapId": "keymap-item:3D View Tool: Sculpt, Polyline Hide:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00175-keymap-item-3D-View-Tool-Sculpt-Polyline-Hide-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00175.py -- tests/files/web/generated/M21-GAP-00175-keymap-item-3D-View-Tool-Sculpt-Polyline-Hide-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00175", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00175", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00176", + "gapId": "keymap-item:3D View Tool: Sculpt, Polyline Mask:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00176-keymap-item-3D-View-Tool-Sculpt-Polyline-Mask-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00176.py -- tests/files/web/generated/M21-GAP-00176-keymap-item-3D-View-Tool-Sculpt-Polyline-Mask-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00176", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00176", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00177", + "gapId": "keymap-item:3D View Tool: Sculpt, Polyline Mask:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00177-keymap-item-3D-View-Tool-Sculpt-Polyline-Mask-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00177.py -- tests/files/web/generated/M21-GAP-00177-keymap-item-3D-View-Tool-Sculpt-Polyline-Mask-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00177", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00177", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00178", + "gapId": "keymap-item:3D View Tool: Sculpt, Polyline Trim:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00178-keymap-item-3D-View-Tool-Sculpt-Polyline-Trim-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00178.py -- tests/files/web/generated/M21-GAP-00178-keymap-item-3D-View-Tool-Sculpt-Polyline-Trim-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00178", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00178", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00179", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00179-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00179.py -- tests/files/web/generated/M21-GAP-00179-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00179", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00179", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00180", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00180-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00180.py -- tests/files/web/generated/M21-GAP-00180-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00180", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00180", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00181", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00181-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00181.py -- tests/files/web/generated/M21-GAP-00181-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00181", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00181", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00182", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00182-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00182.py -- tests/files/web/generated/M21-GAP-00182-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00182", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00182", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00183", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00183-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00183.py -- tests/files/web/generated/M21-GAP-00183-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00183", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00183", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00184", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00184-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00184.py -- tests/files/web/generated/M21-GAP-00184-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00184", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00184", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00185", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00185-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00185.py -- tests/files/web/generated/M21-GAP-00185-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00185", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00185", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00186", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00186-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00186.py -- tests/files/web/generated/M21-GAP-00186-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00186", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00186", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00187", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00187-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00187.py -- tests/files/web/generated/M21-GAP-00187-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00187", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00187", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00188", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00188-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00188.py -- tests/files/web/generated/M21-GAP-00188-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00188", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00188", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00189", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00189-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00189.py -- tests/files/web/generated/M21-GAP-00189-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00189", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00189", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00190", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00190-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00190.py -- tests/files/web/generated/M21-GAP-00190-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00190", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00190", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00191", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00191-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00191.py -- tests/files/web/generated/M21-GAP-00191-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00191", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00191", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00192", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00192-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00192.py -- tests/files/web/generated/M21-GAP-00192-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00192", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00192", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00193", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00193-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00193.py -- tests/files/web/generated/M21-GAP-00193-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00193", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00193", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00194", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00194-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00194.py -- tests/files/web/generated/M21-GAP-00194-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00194", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00194", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00195", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00195-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00195.py -- tests/files/web/generated/M21-GAP-00195-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00195", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00195", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00196", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00196-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00196.py -- tests/files/web/generated/M21-GAP-00196-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00196", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00196", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00197", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00197-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00197.py -- tests/files/web/generated/M21-GAP-00197-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00197", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00197", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00198", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00198-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00198.py -- tests/files/web/generated/M21-GAP-00198-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00198", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00198", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00199", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00199-keymap-item-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00199.py -- tests/files/web/generated/M21-GAP-00199-keymap-item-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00199", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00199", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00200", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00200-keymap-item-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00200.py -- tests/files/web/generated/M21-GAP-00200-keymap-item-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00200", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00200", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00201", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00201-keymap-item-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00201.py -- tests/files/web/generated/M21-GAP-00201-keymap-item-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00201", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00201", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00202", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00202-keymap-item-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00202.py -- tests/files/web/generated/M21-GAP-00202-keymap-item-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00202", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00202", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00203", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00203-keymap-item-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00203.py -- tests/files/web/generated/M21-GAP-00203-keymap-item-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00203", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00203", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00204", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00204-keymap-item-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00204.py -- tests/files/web/generated/M21-GAP-00204-keymap-item-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00204", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00204", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00205", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00205-keymap-item-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00205.py -- tests/files/web/generated/M21-GAP-00205-keymap-item-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00205", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00205", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00206", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00206-keymap-item-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00206.py -- tests/files/web/generated/M21-GAP-00206-keymap-item-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00206", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00206", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00207", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00207-keymap-item-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00207.py -- tests/files/web/generated/M21-GAP-00207-keymap-item-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00207", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00207", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00208", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00208-keymap-item-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00208.py -- tests/files/web/generated/M21-GAP-00208-keymap-item-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00208", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00208", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00209", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00209-keymap-item-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00209.py -- tests/files/web/generated/M21-GAP-00209-keymap-item-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00209", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00209", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00210", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00210-keymap-item-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00210.py -- tests/files/web/generated/M21-GAP-00210-keymap-item-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00210", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00210", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00211", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00211-keymap-item-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00211.py -- tests/files/web/generated/M21-GAP-00211-keymap-item-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00211", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00211", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00212", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00212-keymap-item-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00212.py -- tests/files/web/generated/M21-GAP-00212-keymap-item-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00212", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00212", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00213", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00213-keymap-item-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00213.py -- tests/files/web/generated/M21-GAP-00213-keymap-item-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00213", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00213", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00214", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00214-keymap-item-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00214.py -- tests/files/web/generated/M21-GAP-00214-keymap-item-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00214", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00214", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00215", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00215-keymap-item-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00215.py -- tests/files/web/generated/M21-GAP-00215-keymap-item-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00215", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00215", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00216", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00216-keymap-item-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00216.py -- tests/files/web/generated/M21-GAP-00216-keymap-item-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00216", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00216", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00217", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00217-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00217.py -- tests/files/web/generated/M21-GAP-00217-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00217", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00217", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00218", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00218-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00218.py -- tests/files/web/generated/M21-GAP-00218-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00218", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00218", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00219", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00219-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00219.py -- tests/files/web/generated/M21-GAP-00219-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00219", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00219", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00220", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00220-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00220.py -- tests/files/web/generated/M21-GAP-00220-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00220", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00220", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00221", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00221-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00221.py -- tests/files/web/generated/M21-GAP-00221-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00221", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00221", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00222", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00222-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00222.py -- tests/files/web/generated/M21-GAP-00222-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00222", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00222", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00223", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00223-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00223.py -- tests/files/web/generated/M21-GAP-00223-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00223", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00223", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00224", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00224-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00224.py -- tests/files/web/generated/M21-GAP-00224-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00224", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00224", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00225", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00225-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00225.py -- tests/files/web/generated/M21-GAP-00225-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00225", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00225", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00226", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00226-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00226.py -- tests/files/web/generated/M21-GAP-00226-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00226", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00226", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00227", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00227-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00227.py -- tests/files/web/generated/M21-GAP-00227-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00227", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00227", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00228", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00228-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00228.py -- tests/files/web/generated/M21-GAP-00228-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00228", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00228", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00229", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00229-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00229.py -- tests/files/web/generated/M21-GAP-00229-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00229", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00229", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00230", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00230-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00230.py -- tests/files/web/generated/M21-GAP-00230-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00230", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00230", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00231", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00231-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00231.py -- tests/files/web/generated/M21-GAP-00231-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00231", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00231", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00232", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00232-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00232.py -- tests/files/web/generated/M21-GAP-00232-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00232", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00232", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00233", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00233-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00233.py -- tests/files/web/generated/M21-GAP-00233-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00233", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00233", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00234", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00234-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00234.py -- tests/files/web/generated/M21-GAP-00234-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00234", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00234", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00235", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00235-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00235.py -- tests/files/web/generated/M21-GAP-00235-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00235", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00235", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00236", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00236-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00236.py -- tests/files/web/generated/M21-GAP-00236-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00236", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00236", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00237", + "gapId": "keymap-item:3D View Tool: Shear:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00237-keymap-item-3D-View-Tool-Shear-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00237.py -- tests/files/web/generated/M21-GAP-00237-keymap-item-3D-View-Tool-Shear-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00237", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00237", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00238", + "gapId": "keymap-item:3D View Tool: Shear:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00238-keymap-item-3D-View-Tool-Shear-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00238.py -- tests/files/web/generated/M21-GAP-00238-keymap-item-3D-View-Tool-Shear-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00238", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00238", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00239", + "gapId": "keymap-item:3D View Tool: Shear:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00239-keymap-item-3D-View-Tool-Shear-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00239.py -- tests/files/web/generated/M21-GAP-00239-keymap-item-3D-View-Tool-Shear-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00239", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00239", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00240", + "gapId": "keymap-item:3D View Tool: Transform:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00240-keymap-item-3D-View-Tool-Transform-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00240.py -- tests/files/web/generated/M21-GAP-00240-keymap-item-3D-View-Tool-Transform-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00240", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00240", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00241", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00241-keymap-item-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00241.py -- tests/files/web/generated/M21-GAP-00241-keymap-item-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00241", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00241", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00242", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00242-keymap-item-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00242.py -- tests/files/web/generated/M21-GAP-00242-keymap-item-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00242", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00242", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00243", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00243-keymap-item-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00243.py -- tests/files/web/generated/M21-GAP-00243-keymap-item-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00243", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00243", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00244", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00244-keymap-item-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00244.py -- tests/files/web/generated/M21-GAP-00244-keymap-item-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00244", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00244", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00245", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00245-keymap-item-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00245.py -- tests/files/web/generated/M21-GAP-00245-keymap-item-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00245", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00245", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00246", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00246-keymap-item-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00246.py -- tests/files/web/generated/M21-GAP-00246-keymap-item-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00246", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00246", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00247", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00247-keymap-item-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00247.py -- tests/files/web/generated/M21-GAP-00247-keymap-item-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00247", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00247", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00248", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00248-keymap-item-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00248.py -- tests/files/web/generated/M21-GAP-00248-keymap-item-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00248", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00248", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00249", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00249-keymap-item-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00249.py -- tests/files/web/generated/M21-GAP-00249-keymap-item-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00249", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00249", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00250", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00250-keymap-item-3D-View-Tool-Tweak-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00250.py -- tests/files/web/generated/M21-GAP-00250-keymap-item-3D-View-Tool-Tweak-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00250", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00250", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00251", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00251-keymap-item-3D-View-Tool-Tweak-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00251.py -- tests/files/web/generated/M21-GAP-00251-keymap-item-3D-View-Tool-Tweak-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00251", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00251", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00252", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00252-keymap-item-3D-View-Tool-Tweak-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00252.py -- tests/files/web/generated/M21-GAP-00252-keymap-item-3D-View-Tool-Tweak-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00252", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00252", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00253", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00253-keymap-item-3D-View-Tool-Tweak-VIEW_3D-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00253.py -- tests/files/web/generated/M21-GAP-00253-keymap-item-3D-View-Tool-Tweak-VIEW_3D-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00253", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00253", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00254", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00254-keymap-item-3D-View-Tool-Tweak-VIEW_3D-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00254.py -- tests/files/web/generated/M21-GAP-00254-keymap-item-3D-View-Tool-Tweak-VIEW_3D-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00254", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00254", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00255", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00255-keymap-item-3D-View-Tool-Tweak-VIEW_3D-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00255.py -- tests/files/web/generated/M21-GAP-00255-keymap-item-3D-View-Tool-Tweak-VIEW_3D-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00255", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00255", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00256", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00256-keymap-item-3D-View-Tool-Tweak-VIEW_3D-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00256.py -- tests/files/web/generated/M21-GAP-00256-keymap-item-3D-View-Tool-Tweak-VIEW_3D-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00256", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00256", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00257", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00257-keymap-item-3D-View-Tool-Tweak-VIEW_3D-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00257.py -- tests/files/web/generated/M21-GAP-00257-keymap-item-3D-View-Tool-Tweak-VIEW_3D-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00257", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00257", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00258", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00258-keymap-item-3D-View-Tool-Tweak-VIEW_3D-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00258.py -- tests/files/web/generated/M21-GAP-00258-keymap-item-3D-View-Tool-Tweak-VIEW_3D-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00258", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00258", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00259", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00259-keymap-item-3D-View-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00259.py -- tests/files/web/generated/M21-GAP-00259-keymap-item-3D-View-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00259", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00259", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00260", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00260-keymap-item-3D-View-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00260.py -- tests/files/web/generated/M21-GAP-00260-keymap-item-3D-View-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00260", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00260", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00261", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00261-keymap-item-3D-View-VIEW_3D-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00261.py -- tests/files/web/generated/M21-GAP-00261-keymap-item-3D-View-VIEW_3D-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00261", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00261", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00262", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:100", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00262-keymap-item-3D-View-VIEW_3D-WINDOW-100.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00262.py -- tests/files/web/generated/M21-GAP-00262-keymap-item-3D-View-VIEW_3D-WINDOW-100.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00262", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00262", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00263", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:101", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00263-keymap-item-3D-View-VIEW_3D-WINDOW-101.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00263.py -- tests/files/web/generated/M21-GAP-00263-keymap-item-3D-View-VIEW_3D-WINDOW-101.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00263", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00263", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00264", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:102", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00264-keymap-item-3D-View-VIEW_3D-WINDOW-102.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00264.py -- tests/files/web/generated/M21-GAP-00264-keymap-item-3D-View-VIEW_3D-WINDOW-102.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00264", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00264", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00265", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:103", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00265-keymap-item-3D-View-VIEW_3D-WINDOW-103.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00265.py -- tests/files/web/generated/M21-GAP-00265-keymap-item-3D-View-VIEW_3D-WINDOW-103.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00265", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00265", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00266", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:104", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00266-keymap-item-3D-View-VIEW_3D-WINDOW-104.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00266.py -- tests/files/web/generated/M21-GAP-00266-keymap-item-3D-View-VIEW_3D-WINDOW-104.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00266", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00266", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00267", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:105", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00267-keymap-item-3D-View-VIEW_3D-WINDOW-105.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00267.py -- tests/files/web/generated/M21-GAP-00267-keymap-item-3D-View-VIEW_3D-WINDOW-105.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00267", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00267", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00268", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:106", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00268-keymap-item-3D-View-VIEW_3D-WINDOW-106.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00268.py -- tests/files/web/generated/M21-GAP-00268-keymap-item-3D-View-VIEW_3D-WINDOW-106.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00268", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00268", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00269", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:107", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00269-keymap-item-3D-View-VIEW_3D-WINDOW-107.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00269.py -- tests/files/web/generated/M21-GAP-00269-keymap-item-3D-View-VIEW_3D-WINDOW-107.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00269", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00269", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00270", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:108", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00270-keymap-item-3D-View-VIEW_3D-WINDOW-108.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00270.py -- tests/files/web/generated/M21-GAP-00270-keymap-item-3D-View-VIEW_3D-WINDOW-108.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00270", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00270", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00271", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:109", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00271-keymap-item-3D-View-VIEW_3D-WINDOW-109.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00271.py -- tests/files/web/generated/M21-GAP-00271-keymap-item-3D-View-VIEW_3D-WINDOW-109.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00271", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00271", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00272", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00272-keymap-item-3D-View-VIEW_3D-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00272.py -- tests/files/web/generated/M21-GAP-00272-keymap-item-3D-View-VIEW_3D-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00272", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00272", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00273", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:110", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00273-keymap-item-3D-View-VIEW_3D-WINDOW-110.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00273.py -- tests/files/web/generated/M21-GAP-00273-keymap-item-3D-View-VIEW_3D-WINDOW-110.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00273", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00273", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00274", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:111", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00274-keymap-item-3D-View-VIEW_3D-WINDOW-111.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00274.py -- tests/files/web/generated/M21-GAP-00274-keymap-item-3D-View-VIEW_3D-WINDOW-111.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00274", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00274", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00275", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:112", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00275-keymap-item-3D-View-VIEW_3D-WINDOW-112.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00275.py -- tests/files/web/generated/M21-GAP-00275-keymap-item-3D-View-VIEW_3D-WINDOW-112.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00275", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00275", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00276", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:113", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00276-keymap-item-3D-View-VIEW_3D-WINDOW-113.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00276.py -- tests/files/web/generated/M21-GAP-00276-keymap-item-3D-View-VIEW_3D-WINDOW-113.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00276", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00276", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00277", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:114", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00277-keymap-item-3D-View-VIEW_3D-WINDOW-114.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00277.py -- tests/files/web/generated/M21-GAP-00277-keymap-item-3D-View-VIEW_3D-WINDOW-114.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00277", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00277", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00278", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:115", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00278-keymap-item-3D-View-VIEW_3D-WINDOW-115.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00278.py -- tests/files/web/generated/M21-GAP-00278-keymap-item-3D-View-VIEW_3D-WINDOW-115.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00278", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00278", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00279", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00279-keymap-item-3D-View-VIEW_3D-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00279.py -- tests/files/web/generated/M21-GAP-00279-keymap-item-3D-View-VIEW_3D-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00279", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00279", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00280", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00280-keymap-item-3D-View-VIEW_3D-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00280.py -- tests/files/web/generated/M21-GAP-00280-keymap-item-3D-View-VIEW_3D-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00280", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00280", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00281", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00281-keymap-item-3D-View-VIEW_3D-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00281.py -- tests/files/web/generated/M21-GAP-00281-keymap-item-3D-View-VIEW_3D-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00281", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00281", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00282", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00282-keymap-item-3D-View-VIEW_3D-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00282.py -- tests/files/web/generated/M21-GAP-00282-keymap-item-3D-View-VIEW_3D-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00282", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00282", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00283", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00283-keymap-item-3D-View-VIEW_3D-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00283.py -- tests/files/web/generated/M21-GAP-00283-keymap-item-3D-View-VIEW_3D-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00283", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00283", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00284", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00284-keymap-item-3D-View-VIEW_3D-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00284.py -- tests/files/web/generated/M21-GAP-00284-keymap-item-3D-View-VIEW_3D-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00284", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00284", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00285", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00285-keymap-item-3D-View-VIEW_3D-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00285.py -- tests/files/web/generated/M21-GAP-00285-keymap-item-3D-View-VIEW_3D-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00285", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00285", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00286", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00286-keymap-item-3D-View-VIEW_3D-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00286.py -- tests/files/web/generated/M21-GAP-00286-keymap-item-3D-View-VIEW_3D-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00286", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00286", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00287", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00287-keymap-item-3D-View-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00287.py -- tests/files/web/generated/M21-GAP-00287-keymap-item-3D-View-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00287", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00287", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00288", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00288-keymap-item-3D-View-VIEW_3D-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00288.py -- tests/files/web/generated/M21-GAP-00288-keymap-item-3D-View-VIEW_3D-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00288", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00288", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00289", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00289-keymap-item-3D-View-VIEW_3D-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00289.py -- tests/files/web/generated/M21-GAP-00289-keymap-item-3D-View-VIEW_3D-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00289", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00289", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00290", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00290-keymap-item-3D-View-VIEW_3D-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00290.py -- tests/files/web/generated/M21-GAP-00290-keymap-item-3D-View-VIEW_3D-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00290", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00290", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00291", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00291-keymap-item-3D-View-VIEW_3D-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00291.py -- tests/files/web/generated/M21-GAP-00291-keymap-item-3D-View-VIEW_3D-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00291", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00291", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00292", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00292-keymap-item-3D-View-VIEW_3D-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00292.py -- tests/files/web/generated/M21-GAP-00292-keymap-item-3D-View-VIEW_3D-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00292", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00292", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00293", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00293-keymap-item-3D-View-VIEW_3D-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00293.py -- tests/files/web/generated/M21-GAP-00293-keymap-item-3D-View-VIEW_3D-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00293", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00293", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00294", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00294-keymap-item-3D-View-VIEW_3D-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00294.py -- tests/files/web/generated/M21-GAP-00294-keymap-item-3D-View-VIEW_3D-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00294", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00294", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00295", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00295-keymap-item-3D-View-VIEW_3D-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00295.py -- tests/files/web/generated/M21-GAP-00295-keymap-item-3D-View-VIEW_3D-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00295", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00295", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00296", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00296-keymap-item-3D-View-VIEW_3D-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00296.py -- tests/files/web/generated/M21-GAP-00296-keymap-item-3D-View-VIEW_3D-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00296", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00296", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00297", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00297-keymap-item-3D-View-VIEW_3D-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00297.py -- tests/files/web/generated/M21-GAP-00297-keymap-item-3D-View-VIEW_3D-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00297", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00297", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00298", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00298-keymap-item-3D-View-VIEW_3D-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00298.py -- tests/files/web/generated/M21-GAP-00298-keymap-item-3D-View-VIEW_3D-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00298", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00298", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00299", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00299-keymap-item-3D-View-VIEW_3D-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00299.py -- tests/files/web/generated/M21-GAP-00299-keymap-item-3D-View-VIEW_3D-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00299", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00299", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00300", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00300-keymap-item-3D-View-VIEW_3D-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00300.py -- tests/files/web/generated/M21-GAP-00300-keymap-item-3D-View-VIEW_3D-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00300", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00300", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00301", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00301-keymap-item-3D-View-VIEW_3D-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00301.py -- tests/files/web/generated/M21-GAP-00301-keymap-item-3D-View-VIEW_3D-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00301", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00301", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00302", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00302-keymap-item-3D-View-VIEW_3D-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00302.py -- tests/files/web/generated/M21-GAP-00302-keymap-item-3D-View-VIEW_3D-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00302", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00302", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00303", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00303-keymap-item-3D-View-VIEW_3D-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00303.py -- tests/files/web/generated/M21-GAP-00303-keymap-item-3D-View-VIEW_3D-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00303", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00303", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00304", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00304-keymap-item-3D-View-VIEW_3D-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00304.py -- tests/files/web/generated/M21-GAP-00304-keymap-item-3D-View-VIEW_3D-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00304", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00304", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00305", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00305-keymap-item-3D-View-VIEW_3D-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00305.py -- tests/files/web/generated/M21-GAP-00305-keymap-item-3D-View-VIEW_3D-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00305", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00305", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00306", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00306-keymap-item-3D-View-VIEW_3D-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00306.py -- tests/files/web/generated/M21-GAP-00306-keymap-item-3D-View-VIEW_3D-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00306", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00306", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00307", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00307-keymap-item-3D-View-VIEW_3D-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00307.py -- tests/files/web/generated/M21-GAP-00307-keymap-item-3D-View-VIEW_3D-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00307", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00307", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00308", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00308-keymap-item-3D-View-VIEW_3D-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00308.py -- tests/files/web/generated/M21-GAP-00308-keymap-item-3D-View-VIEW_3D-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00308", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00308", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00309", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00309-keymap-item-3D-View-VIEW_3D-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00309.py -- tests/files/web/generated/M21-GAP-00309-keymap-item-3D-View-VIEW_3D-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00309", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00309", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00310", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00310-keymap-item-3D-View-VIEW_3D-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00310.py -- tests/files/web/generated/M21-GAP-00310-keymap-item-3D-View-VIEW_3D-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00310", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00310", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00311", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00311-keymap-item-3D-View-VIEW_3D-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00311.py -- tests/files/web/generated/M21-GAP-00311-keymap-item-3D-View-VIEW_3D-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00311", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00311", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00312", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00312-keymap-item-3D-View-VIEW_3D-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00312.py -- tests/files/web/generated/M21-GAP-00312-keymap-item-3D-View-VIEW_3D-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00312", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00312", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00313", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00313-keymap-item-3D-View-VIEW_3D-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00313.py -- tests/files/web/generated/M21-GAP-00313-keymap-item-3D-View-VIEW_3D-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00313", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00313", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00314", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00314-keymap-item-3D-View-VIEW_3D-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00314.py -- tests/files/web/generated/M21-GAP-00314-keymap-item-3D-View-VIEW_3D-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00314", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00314", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00315", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00315-keymap-item-3D-View-VIEW_3D-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00315.py -- tests/files/web/generated/M21-GAP-00315-keymap-item-3D-View-VIEW_3D-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00315", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00315", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00316", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00316-keymap-item-3D-View-VIEW_3D-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00316.py -- tests/files/web/generated/M21-GAP-00316-keymap-item-3D-View-VIEW_3D-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00316", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00316", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00317", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00317-keymap-item-3D-View-VIEW_3D-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00317.py -- tests/files/web/generated/M21-GAP-00317-keymap-item-3D-View-VIEW_3D-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00317", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00317", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00318", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00318-keymap-item-3D-View-VIEW_3D-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00318.py -- tests/files/web/generated/M21-GAP-00318-keymap-item-3D-View-VIEW_3D-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00318", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00318", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00319", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00319-keymap-item-3D-View-VIEW_3D-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00319.py -- tests/files/web/generated/M21-GAP-00319-keymap-item-3D-View-VIEW_3D-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00319", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00319", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00320", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00320-keymap-item-3D-View-VIEW_3D-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00320.py -- tests/files/web/generated/M21-GAP-00320-keymap-item-3D-View-VIEW_3D-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00320", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00320", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00321", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:50", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00321-keymap-item-3D-View-VIEW_3D-WINDOW-50.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00321.py -- tests/files/web/generated/M21-GAP-00321-keymap-item-3D-View-VIEW_3D-WINDOW-50.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00321", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00321", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00322", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:51", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00322-keymap-item-3D-View-VIEW_3D-WINDOW-51.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00322.py -- tests/files/web/generated/M21-GAP-00322-keymap-item-3D-View-VIEW_3D-WINDOW-51.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00322", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00322", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00323", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:52", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00323-keymap-item-3D-View-VIEW_3D-WINDOW-52.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00323.py -- tests/files/web/generated/M21-GAP-00323-keymap-item-3D-View-VIEW_3D-WINDOW-52.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00323", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00323", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00324", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:53", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00324-keymap-item-3D-View-VIEW_3D-WINDOW-53.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00324.py -- tests/files/web/generated/M21-GAP-00324-keymap-item-3D-View-VIEW_3D-WINDOW-53.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00324", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00324", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00325", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:54", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00325-keymap-item-3D-View-VIEW_3D-WINDOW-54.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00325.py -- tests/files/web/generated/M21-GAP-00325-keymap-item-3D-View-VIEW_3D-WINDOW-54.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00325", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00325", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00326", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:55", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00326-keymap-item-3D-View-VIEW_3D-WINDOW-55.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00326.py -- tests/files/web/generated/M21-GAP-00326-keymap-item-3D-View-VIEW_3D-WINDOW-55.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00326", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00326", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00327", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:56", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00327-keymap-item-3D-View-VIEW_3D-WINDOW-56.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00327.py -- tests/files/web/generated/M21-GAP-00327-keymap-item-3D-View-VIEW_3D-WINDOW-56.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00327", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00327", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00328", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:57", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00328-keymap-item-3D-View-VIEW_3D-WINDOW-57.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00328.py -- tests/files/web/generated/M21-GAP-00328-keymap-item-3D-View-VIEW_3D-WINDOW-57.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00328", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00328", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00329", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:58", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00329-keymap-item-3D-View-VIEW_3D-WINDOW-58.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00329.py -- tests/files/web/generated/M21-GAP-00329-keymap-item-3D-View-VIEW_3D-WINDOW-58.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00329", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00329", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00330", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:59", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00330-keymap-item-3D-View-VIEW_3D-WINDOW-59.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00330.py -- tests/files/web/generated/M21-GAP-00330-keymap-item-3D-View-VIEW_3D-WINDOW-59.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00330", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00330", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00331", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00331-keymap-item-3D-View-VIEW_3D-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00331.py -- tests/files/web/generated/M21-GAP-00331-keymap-item-3D-View-VIEW_3D-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00331", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00331", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00332", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:60", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00332-keymap-item-3D-View-VIEW_3D-WINDOW-60.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00332.py -- tests/files/web/generated/M21-GAP-00332-keymap-item-3D-View-VIEW_3D-WINDOW-60.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00332", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00332", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00333", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:61", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00333-keymap-item-3D-View-VIEW_3D-WINDOW-61.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00333.py -- tests/files/web/generated/M21-GAP-00333-keymap-item-3D-View-VIEW_3D-WINDOW-61.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00333", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00333", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00334", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:62", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00334-keymap-item-3D-View-VIEW_3D-WINDOW-62.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00334.py -- tests/files/web/generated/M21-GAP-00334-keymap-item-3D-View-VIEW_3D-WINDOW-62.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00334", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00334", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00335", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:63", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00335-keymap-item-3D-View-VIEW_3D-WINDOW-63.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00335.py -- tests/files/web/generated/M21-GAP-00335-keymap-item-3D-View-VIEW_3D-WINDOW-63.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00335", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00335", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00336", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:64", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00336-keymap-item-3D-View-VIEW_3D-WINDOW-64.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00336.py -- tests/files/web/generated/M21-GAP-00336-keymap-item-3D-View-VIEW_3D-WINDOW-64.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00336", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00336", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00337", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:65", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00337-keymap-item-3D-View-VIEW_3D-WINDOW-65.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00337.py -- tests/files/web/generated/M21-GAP-00337-keymap-item-3D-View-VIEW_3D-WINDOW-65.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00337", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00337", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00338", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:66", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00338-keymap-item-3D-View-VIEW_3D-WINDOW-66.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00338.py -- tests/files/web/generated/M21-GAP-00338-keymap-item-3D-View-VIEW_3D-WINDOW-66.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00338", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00338", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00339", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:67", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00339-keymap-item-3D-View-VIEW_3D-WINDOW-67.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00339.py -- tests/files/web/generated/M21-GAP-00339-keymap-item-3D-View-VIEW_3D-WINDOW-67.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00339", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00339", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00340", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:68", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00340-keymap-item-3D-View-VIEW_3D-WINDOW-68.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00340.py -- tests/files/web/generated/M21-GAP-00340-keymap-item-3D-View-VIEW_3D-WINDOW-68.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00340", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00340", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00341", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:69", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00341-keymap-item-3D-View-VIEW_3D-WINDOW-69.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00341.py -- tests/files/web/generated/M21-GAP-00341-keymap-item-3D-View-VIEW_3D-WINDOW-69.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00341", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00341", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00342", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00342-keymap-item-3D-View-VIEW_3D-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00342.py -- tests/files/web/generated/M21-GAP-00342-keymap-item-3D-View-VIEW_3D-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00342", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00342", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00343", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:70", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00343-keymap-item-3D-View-VIEW_3D-WINDOW-70.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00343.py -- tests/files/web/generated/M21-GAP-00343-keymap-item-3D-View-VIEW_3D-WINDOW-70.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00343", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00343", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00344", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:71", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00344-keymap-item-3D-View-VIEW_3D-WINDOW-71.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00344.py -- tests/files/web/generated/M21-GAP-00344-keymap-item-3D-View-VIEW_3D-WINDOW-71.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00344", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00344", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00345", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:72", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00345-keymap-item-3D-View-VIEW_3D-WINDOW-72.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00345.py -- tests/files/web/generated/M21-GAP-00345-keymap-item-3D-View-VIEW_3D-WINDOW-72.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00345", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00345", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00346", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:73", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00346-keymap-item-3D-View-VIEW_3D-WINDOW-73.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00346.py -- tests/files/web/generated/M21-GAP-00346-keymap-item-3D-View-VIEW_3D-WINDOW-73.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00346", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00346", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00347", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:74", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00347-keymap-item-3D-View-VIEW_3D-WINDOW-74.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00347.py -- tests/files/web/generated/M21-GAP-00347-keymap-item-3D-View-VIEW_3D-WINDOW-74.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00347", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00347", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00348", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:75", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00348-keymap-item-3D-View-VIEW_3D-WINDOW-75.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00348.py -- tests/files/web/generated/M21-GAP-00348-keymap-item-3D-View-VIEW_3D-WINDOW-75.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00348", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00348", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00349", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:76", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00349-keymap-item-3D-View-VIEW_3D-WINDOW-76.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00349.py -- tests/files/web/generated/M21-GAP-00349-keymap-item-3D-View-VIEW_3D-WINDOW-76.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00349", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00349", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00350", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:77", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00350-keymap-item-3D-View-VIEW_3D-WINDOW-77.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00350.py -- tests/files/web/generated/M21-GAP-00350-keymap-item-3D-View-VIEW_3D-WINDOW-77.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00350", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00350", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00351", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:78", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00351-keymap-item-3D-View-VIEW_3D-WINDOW-78.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00351.py -- tests/files/web/generated/M21-GAP-00351-keymap-item-3D-View-VIEW_3D-WINDOW-78.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00351", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00351", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00352", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:79", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00352-keymap-item-3D-View-VIEW_3D-WINDOW-79.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00352.py -- tests/files/web/generated/M21-GAP-00352-keymap-item-3D-View-VIEW_3D-WINDOW-79.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00352", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00352", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00353", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00353-keymap-item-3D-View-VIEW_3D-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00353.py -- tests/files/web/generated/M21-GAP-00353-keymap-item-3D-View-VIEW_3D-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00353", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00353", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00354", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:80", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00354-keymap-item-3D-View-VIEW_3D-WINDOW-80.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00354.py -- tests/files/web/generated/M21-GAP-00354-keymap-item-3D-View-VIEW_3D-WINDOW-80.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00354", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00354", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00355", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:81", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00355-keymap-item-3D-View-VIEW_3D-WINDOW-81.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00355.py -- tests/files/web/generated/M21-GAP-00355-keymap-item-3D-View-VIEW_3D-WINDOW-81.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00355", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00355", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00356", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:82", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00356-keymap-item-3D-View-VIEW_3D-WINDOW-82.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00356.py -- tests/files/web/generated/M21-GAP-00356-keymap-item-3D-View-VIEW_3D-WINDOW-82.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00356", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00356", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00357", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:83", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00357-keymap-item-3D-View-VIEW_3D-WINDOW-83.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00357.py -- tests/files/web/generated/M21-GAP-00357-keymap-item-3D-View-VIEW_3D-WINDOW-83.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00357", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00357", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00358", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:84", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00358-keymap-item-3D-View-VIEW_3D-WINDOW-84.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00358.py -- tests/files/web/generated/M21-GAP-00358-keymap-item-3D-View-VIEW_3D-WINDOW-84.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00358", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00358", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00359", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:85", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00359-keymap-item-3D-View-VIEW_3D-WINDOW-85.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00359.py -- tests/files/web/generated/M21-GAP-00359-keymap-item-3D-View-VIEW_3D-WINDOW-85.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00359", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00359", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00360", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:86", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00360-keymap-item-3D-View-VIEW_3D-WINDOW-86.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00360.py -- tests/files/web/generated/M21-GAP-00360-keymap-item-3D-View-VIEW_3D-WINDOW-86.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00360", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00360", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00361", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:87", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00361-keymap-item-3D-View-VIEW_3D-WINDOW-87.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00361.py -- tests/files/web/generated/M21-GAP-00361-keymap-item-3D-View-VIEW_3D-WINDOW-87.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00361", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00361", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00362", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:88", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00362-keymap-item-3D-View-VIEW_3D-WINDOW-88.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00362.py -- tests/files/web/generated/M21-GAP-00362-keymap-item-3D-View-VIEW_3D-WINDOW-88.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00362", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00362", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00363", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:89", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00363-keymap-item-3D-View-VIEW_3D-WINDOW-89.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00363.py -- tests/files/web/generated/M21-GAP-00363-keymap-item-3D-View-VIEW_3D-WINDOW-89.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00363", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00363", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00364", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00364-keymap-item-3D-View-VIEW_3D-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00364.py -- tests/files/web/generated/M21-GAP-00364-keymap-item-3D-View-VIEW_3D-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00364", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00364", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00365", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:90", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00365-keymap-item-3D-View-VIEW_3D-WINDOW-90.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00365.py -- tests/files/web/generated/M21-GAP-00365-keymap-item-3D-View-VIEW_3D-WINDOW-90.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00365", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00365", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00366", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:91", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00366-keymap-item-3D-View-VIEW_3D-WINDOW-91.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00366.py -- tests/files/web/generated/M21-GAP-00366-keymap-item-3D-View-VIEW_3D-WINDOW-91.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00366", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00366", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00367", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:92", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00367-keymap-item-3D-View-VIEW_3D-WINDOW-92.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00367.py -- tests/files/web/generated/M21-GAP-00367-keymap-item-3D-View-VIEW_3D-WINDOW-92.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00367", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00367", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00368", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:93", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00368-keymap-item-3D-View-VIEW_3D-WINDOW-93.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00368.py -- tests/files/web/generated/M21-GAP-00368-keymap-item-3D-View-VIEW_3D-WINDOW-93.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00368", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00368", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00369", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:94", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00369-keymap-item-3D-View-VIEW_3D-WINDOW-94.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00369.py -- tests/files/web/generated/M21-GAP-00369-keymap-item-3D-View-VIEW_3D-WINDOW-94.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00369", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00369", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00370", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:95", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00370-keymap-item-3D-View-VIEW_3D-WINDOW-95.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00370.py -- tests/files/web/generated/M21-GAP-00370-keymap-item-3D-View-VIEW_3D-WINDOW-95.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00370", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00370", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00371", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:96", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00371-keymap-item-3D-View-VIEW_3D-WINDOW-96.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00371.py -- tests/files/web/generated/M21-GAP-00371-keymap-item-3D-View-VIEW_3D-WINDOW-96.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00371", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00371", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00372", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:97", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00372-keymap-item-3D-View-VIEW_3D-WINDOW-97.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00372.py -- tests/files/web/generated/M21-GAP-00372-keymap-item-3D-View-VIEW_3D-WINDOW-97.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00372", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00372", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00373", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:98", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00373-keymap-item-3D-View-VIEW_3D-WINDOW-98.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00373.py -- tests/files/web/generated/M21-GAP-00373-keymap-item-3D-View-VIEW_3D-WINDOW-98.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00373", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00373", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00374", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:99", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00374-keymap-item-3D-View-VIEW_3D-WINDOW-99.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00374.py -- tests/files/web/generated/M21-GAP-00374-keymap-item-3D-View-VIEW_3D-WINDOW-99.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00374", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00374", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00375", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00375-keymap-item-Animation-Channels-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00375.py -- tests/files/web/generated/M21-GAP-00375-keymap-item-Animation-Channels-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00375", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00375", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00376", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00376-keymap-item-Animation-Channels-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00376.py -- tests/files/web/generated/M21-GAP-00376-keymap-item-Animation-Channels-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00376", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00376", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00377", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00377-keymap-item-Animation-Channels-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00377.py -- tests/files/web/generated/M21-GAP-00377-keymap-item-Animation-Channels-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00377", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00377", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00378", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00378-keymap-item-Animation-Channels-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00378.py -- tests/files/web/generated/M21-GAP-00378-keymap-item-Animation-Channels-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00378", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00378", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00379", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00379-keymap-item-Animation-Channels-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00379.py -- tests/files/web/generated/M21-GAP-00379-keymap-item-Animation-Channels-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00379", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00379", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00380", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00380-keymap-item-Animation-Channels-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00380.py -- tests/files/web/generated/M21-GAP-00380-keymap-item-Animation-Channels-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00380", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00380", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00381", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00381-keymap-item-Animation-Channels-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00381.py -- tests/files/web/generated/M21-GAP-00381-keymap-item-Animation-Channels-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00381", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00381", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00382", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00382-keymap-item-Animation-Channels-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00382.py -- tests/files/web/generated/M21-GAP-00382-keymap-item-Animation-Channels-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00382", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00382", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00383", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00383-keymap-item-Animation-Channels-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00383.py -- tests/files/web/generated/M21-GAP-00383-keymap-item-Animation-Channels-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00383", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00383", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00384", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00384-keymap-item-Animation-Channels-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00384.py -- tests/files/web/generated/M21-GAP-00384-keymap-item-Animation-Channels-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00384", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00384", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00385", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00385-keymap-item-Animation-Channels-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00385.py -- tests/files/web/generated/M21-GAP-00385-keymap-item-Animation-Channels-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00385", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00385", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00386", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00386-keymap-item-Animation-Channels-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00386.py -- tests/files/web/generated/M21-GAP-00386-keymap-item-Animation-Channels-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00386", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00386", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00387", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00387-keymap-item-Animation-Channels-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00387.py -- tests/files/web/generated/M21-GAP-00387-keymap-item-Animation-Channels-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00387", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00387", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00388", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00388-keymap-item-Animation-Channels-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00388.py -- tests/files/web/generated/M21-GAP-00388-keymap-item-Animation-Channels-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00388", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00388", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00389", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00389-keymap-item-Animation-Channels-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00389.py -- tests/files/web/generated/M21-GAP-00389-keymap-item-Animation-Channels-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00389", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00389", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00390", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00390-keymap-item-Animation-Channels-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00390.py -- tests/files/web/generated/M21-GAP-00390-keymap-item-Animation-Channels-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00390", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00390", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00391", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00391-keymap-item-Animation-Channels-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00391.py -- tests/files/web/generated/M21-GAP-00391-keymap-item-Animation-Channels-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00391", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00391", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00392", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00392-keymap-item-Animation-Channels-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00392.py -- tests/files/web/generated/M21-GAP-00392-keymap-item-Animation-Channels-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00392", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00392", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00393", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00393-keymap-item-Animation-Channels-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00393.py -- tests/files/web/generated/M21-GAP-00393-keymap-item-Animation-Channels-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00393", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00393", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00394", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00394-keymap-item-Animation-Channels-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00394.py -- tests/files/web/generated/M21-GAP-00394-keymap-item-Animation-Channels-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00394", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00394", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00395", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00395-keymap-item-Animation-Channels-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00395.py -- tests/files/web/generated/M21-GAP-00395-keymap-item-Animation-Channels-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00395", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00395", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00396", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00396-keymap-item-Animation-Channels-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00396.py -- tests/files/web/generated/M21-GAP-00396-keymap-item-Animation-Channels-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00396", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00396", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00397", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00397-keymap-item-Animation-Channels-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00397.py -- tests/files/web/generated/M21-GAP-00397-keymap-item-Animation-Channels-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00397", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00397", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00398", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00398-keymap-item-Animation-Channels-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00398.py -- tests/files/web/generated/M21-GAP-00398-keymap-item-Animation-Channels-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00398", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00398", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00399", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00399-keymap-item-Animation-Channels-EMPTY-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00399.py -- tests/files/web/generated/M21-GAP-00399-keymap-item-Animation-Channels-EMPTY-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00399", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00399", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00400", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00400-keymap-item-Animation-Channels-EMPTY-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00400.py -- tests/files/web/generated/M21-GAP-00400-keymap-item-Animation-Channels-EMPTY-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00400", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00400", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00401", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00401-keymap-item-Animation-Channels-EMPTY-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00401.py -- tests/files/web/generated/M21-GAP-00401-keymap-item-Animation-Channels-EMPTY-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00401", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00401", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00402", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00402-keymap-item-Animation-Channels-EMPTY-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00402.py -- tests/files/web/generated/M21-GAP-00402-keymap-item-Animation-Channels-EMPTY-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00402", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00402", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00403", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00403-keymap-item-Animation-Channels-EMPTY-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00403.py -- tests/files/web/generated/M21-GAP-00403-keymap-item-Animation-Channels-EMPTY-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00403", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00403", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00404", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00404-keymap-item-Animation-Channels-EMPTY-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00404.py -- tests/files/web/generated/M21-GAP-00404-keymap-item-Animation-Channels-EMPTY-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00404", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00404", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00405", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00405-keymap-item-Animation-Channels-EMPTY-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00405.py -- tests/files/web/generated/M21-GAP-00405-keymap-item-Animation-Channels-EMPTY-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00405", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00405", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00406", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00406-keymap-item-Animation-Channels-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00406.py -- tests/files/web/generated/M21-GAP-00406-keymap-item-Animation-Channels-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00406", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00406", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00407", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00407-keymap-item-Animation-Channels-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00407.py -- tests/files/web/generated/M21-GAP-00407-keymap-item-Animation-Channels-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00407", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00407", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00408", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00408-keymap-item-Animation-Channels-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00408.py -- tests/files/web/generated/M21-GAP-00408-keymap-item-Animation-Channels-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00408", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00408", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00409", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00409-keymap-item-Animation-Channels-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00409.py -- tests/files/web/generated/M21-GAP-00409-keymap-item-Animation-Channels-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00409", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00409", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00410", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00410-keymap-item-Animation-Channels-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00410.py -- tests/files/web/generated/M21-GAP-00410-keymap-item-Animation-Channels-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00410", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00410", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00411", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00411-keymap-item-Animation-Channels-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00411.py -- tests/files/web/generated/M21-GAP-00411-keymap-item-Animation-Channels-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00411", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00411", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00412", + "gapId": "keymap-item:Animation:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00412-keymap-item-Animation-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00412.py -- tests/files/web/generated/M21-GAP-00412-keymap-item-Animation-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00412", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00412", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00413", + "gapId": "keymap-item:Animation:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00413-keymap-item-Animation-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00413.py -- tests/files/web/generated/M21-GAP-00413-keymap-item-Animation-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00413", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00413", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00414", + "gapId": "keymap-item:Animation:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00414-keymap-item-Animation-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00414.py -- tests/files/web/generated/M21-GAP-00414-keymap-item-Animation-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00414", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00414", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00415", + "gapId": "keymap-item:Animation:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00415-keymap-item-Animation-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00415.py -- tests/files/web/generated/M21-GAP-00415-keymap-item-Animation-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00415", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00415", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00416", + "gapId": "keymap-item:Animation:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00416-keymap-item-Animation-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00416.py -- tests/files/web/generated/M21-GAP-00416-keymap-item-Animation-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00416", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00416", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00417", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00417-keymap-item-Armature-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00417.py -- tests/files/web/generated/M21-GAP-00417-keymap-item-Armature-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00417", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00417", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00418", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00418-keymap-item-Armature-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00418.py -- tests/files/web/generated/M21-GAP-00418-keymap-item-Armature-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00418", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00418", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00419", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00419-keymap-item-Armature-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00419.py -- tests/files/web/generated/M21-GAP-00419-keymap-item-Armature-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00419", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00419", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00420", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00420-keymap-item-Armature-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00420.py -- tests/files/web/generated/M21-GAP-00420-keymap-item-Armature-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00420", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00420", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00421", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00421-keymap-item-Armature-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00421.py -- tests/files/web/generated/M21-GAP-00421-keymap-item-Armature-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00421", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00421", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00422", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00422-keymap-item-Armature-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00422.py -- tests/files/web/generated/M21-GAP-00422-keymap-item-Armature-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00422", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00422", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00423", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00423-keymap-item-Armature-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00423.py -- tests/files/web/generated/M21-GAP-00423-keymap-item-Armature-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00423", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00423", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00424", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00424-keymap-item-Armature-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00424.py -- tests/files/web/generated/M21-GAP-00424-keymap-item-Armature-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00424", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00424", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00425", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00425-keymap-item-Armature-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00425.py -- tests/files/web/generated/M21-GAP-00425-keymap-item-Armature-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00425", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00425", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00426", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00426-keymap-item-Armature-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00426.py -- tests/files/web/generated/M21-GAP-00426-keymap-item-Armature-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00426", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00426", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00427", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00427-keymap-item-Armature-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00427.py -- tests/files/web/generated/M21-GAP-00427-keymap-item-Armature-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00427", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00427", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00428", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00428-keymap-item-Armature-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00428.py -- tests/files/web/generated/M21-GAP-00428-keymap-item-Armature-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00428", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00428", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00429", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00429-keymap-item-Armature-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00429.py -- tests/files/web/generated/M21-GAP-00429-keymap-item-Armature-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00429", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00429", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00430", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00430-keymap-item-Armature-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00430.py -- tests/files/web/generated/M21-GAP-00430-keymap-item-Armature-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00430", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00430", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00431", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00431-keymap-item-Armature-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00431.py -- tests/files/web/generated/M21-GAP-00431-keymap-item-Armature-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00431", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00431", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00432", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00432-keymap-item-Armature-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00432.py -- tests/files/web/generated/M21-GAP-00432-keymap-item-Armature-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00432", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00432", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00433", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00433-keymap-item-Armature-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00433.py -- tests/files/web/generated/M21-GAP-00433-keymap-item-Armature-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00433", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00433", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00434", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00434-keymap-item-Armature-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00434.py -- tests/files/web/generated/M21-GAP-00434-keymap-item-Armature-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00434", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00434", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00435", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00435-keymap-item-Armature-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00435.py -- tests/files/web/generated/M21-GAP-00435-keymap-item-Armature-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00435", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00435", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00436", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00436-keymap-item-Armature-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00436.py -- tests/files/web/generated/M21-GAP-00436-keymap-item-Armature-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00436", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00436", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00437", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00437-keymap-item-Armature-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00437.py -- tests/files/web/generated/M21-GAP-00437-keymap-item-Armature-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00437", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00437", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00438", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00438-keymap-item-Armature-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00438.py -- tests/files/web/generated/M21-GAP-00438-keymap-item-Armature-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00438", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00438", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00439", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00439-keymap-item-Armature-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00439.py -- tests/files/web/generated/M21-GAP-00439-keymap-item-Armature-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00439", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00439", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00440", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00440-keymap-item-Armature-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00440.py -- tests/files/web/generated/M21-GAP-00440-keymap-item-Armature-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00440", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00440", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00441", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00441-keymap-item-Armature-EMPTY-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00441.py -- tests/files/web/generated/M21-GAP-00441-keymap-item-Armature-EMPTY-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00441", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00441", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00442", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00442-keymap-item-Armature-EMPTY-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00442.py -- tests/files/web/generated/M21-GAP-00442-keymap-item-Armature-EMPTY-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00442", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00442", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00443", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00443-keymap-item-Armature-EMPTY-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00443.py -- tests/files/web/generated/M21-GAP-00443-keymap-item-Armature-EMPTY-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00443", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00443", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00444", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00444-keymap-item-Armature-EMPTY-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00444.py -- tests/files/web/generated/M21-GAP-00444-keymap-item-Armature-EMPTY-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00444", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00444", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00445", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00445-keymap-item-Armature-EMPTY-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00445.py -- tests/files/web/generated/M21-GAP-00445-keymap-item-Armature-EMPTY-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00445", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00445", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00446", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00446-keymap-item-Armature-EMPTY-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00446.py -- tests/files/web/generated/M21-GAP-00446-keymap-item-Armature-EMPTY-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00446", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00446", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00447", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00447-keymap-item-Armature-EMPTY-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00447.py -- tests/files/web/generated/M21-GAP-00447-keymap-item-Armature-EMPTY-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00447", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00447", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00448", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00448-keymap-item-Armature-EMPTY-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00448.py -- tests/files/web/generated/M21-GAP-00448-keymap-item-Armature-EMPTY-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00448", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00448", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00449", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00449-keymap-item-Armature-EMPTY-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00449.py -- tests/files/web/generated/M21-GAP-00449-keymap-item-Armature-EMPTY-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00449", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00449", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00450", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00450-keymap-item-Armature-EMPTY-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00450.py -- tests/files/web/generated/M21-GAP-00450-keymap-item-Armature-EMPTY-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00450", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00450", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00451", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00451-keymap-item-Armature-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00451.py -- tests/files/web/generated/M21-GAP-00451-keymap-item-Armature-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00451", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00451", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00452", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00452-keymap-item-Armature-EMPTY-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00452.py -- tests/files/web/generated/M21-GAP-00452-keymap-item-Armature-EMPTY-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00452", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00452", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00453", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00453-keymap-item-Armature-EMPTY-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00453.py -- tests/files/web/generated/M21-GAP-00453-keymap-item-Armature-EMPTY-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00453", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00453", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00454", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00454-keymap-item-Armature-EMPTY-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00454.py -- tests/files/web/generated/M21-GAP-00454-keymap-item-Armature-EMPTY-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00454", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00454", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00455", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00455-keymap-item-Armature-EMPTY-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00455.py -- tests/files/web/generated/M21-GAP-00455-keymap-item-Armature-EMPTY-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00455", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00455", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00456", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00456-keymap-item-Armature-EMPTY-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00456.py -- tests/files/web/generated/M21-GAP-00456-keymap-item-Armature-EMPTY-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00456", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00456", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00457", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00457-keymap-item-Armature-EMPTY-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00457.py -- tests/files/web/generated/M21-GAP-00457-keymap-item-Armature-EMPTY-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00457", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00457", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00458", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00458-keymap-item-Armature-EMPTY-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00458.py -- tests/files/web/generated/M21-GAP-00458-keymap-item-Armature-EMPTY-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00458", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00458", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00459", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00459-keymap-item-Armature-EMPTY-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00459.py -- tests/files/web/generated/M21-GAP-00459-keymap-item-Armature-EMPTY-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00459", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00459", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00460", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00460-keymap-item-Armature-EMPTY-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00460.py -- tests/files/web/generated/M21-GAP-00460-keymap-item-Armature-EMPTY-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00460", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00460", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00461", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00461-keymap-item-Armature-EMPTY-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00461.py -- tests/files/web/generated/M21-GAP-00461-keymap-item-Armature-EMPTY-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00461", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00461", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00462", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00462-keymap-item-Armature-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00462.py -- tests/files/web/generated/M21-GAP-00462-keymap-item-Armature-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00462", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00462", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00463", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00463-keymap-item-Armature-EMPTY-WINDOW-50.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00463.py -- tests/files/web/generated/M21-GAP-00463-keymap-item-Armature-EMPTY-WINDOW-50.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00463", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00463", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00464", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00464-keymap-item-Armature-EMPTY-WINDOW-51.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00464.py -- tests/files/web/generated/M21-GAP-00464-keymap-item-Armature-EMPTY-WINDOW-51.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00464", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00464", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00465", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00465-keymap-item-Armature-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00465.py -- tests/files/web/generated/M21-GAP-00465-keymap-item-Armature-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00465", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00465", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00466", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00466-keymap-item-Armature-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00466.py -- tests/files/web/generated/M21-GAP-00466-keymap-item-Armature-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00466", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00466", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00467", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00467-keymap-item-Armature-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00467.py -- tests/files/web/generated/M21-GAP-00467-keymap-item-Armature-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00467", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00467", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00468", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00468-keymap-item-Armature-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00468.py -- tests/files/web/generated/M21-GAP-00468-keymap-item-Armature-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00468", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00468", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00469", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00469-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00469.py -- tests/files/web/generated/M21-GAP-00469-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00469", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00469", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00470", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00470-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00470.py -- tests/files/web/generated/M21-GAP-00470-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00470", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00470", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00471", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00471-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00471.py -- tests/files/web/generated/M21-GAP-00471-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00471", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00471", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00472", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00472-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00472.py -- tests/files/web/generated/M21-GAP-00472-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00472", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00472", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00473", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00473-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00473.py -- tests/files/web/generated/M21-GAP-00473-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00473", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00473", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00474", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00474-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00474.py -- tests/files/web/generated/M21-GAP-00474-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00474", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00474", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00475", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00475-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00475.py -- tests/files/web/generated/M21-GAP-00475-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00475", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00475", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00476", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00476-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00476.py -- tests/files/web/generated/M21-GAP-00476-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00476", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00476", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00477", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00477-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00477.py -- tests/files/web/generated/M21-GAP-00477-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00477", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00477", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00478", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00478-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00478.py -- tests/files/web/generated/M21-GAP-00478-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00478", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00478", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00479", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00479-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00479.py -- tests/files/web/generated/M21-GAP-00479-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00479", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00479", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00480", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00480-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00480.py -- tests/files/web/generated/M21-GAP-00480-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00480", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00480", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00481", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00481-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00481.py -- tests/files/web/generated/M21-GAP-00481-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00481", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00481", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00482", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00482-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00482.py -- tests/files/web/generated/M21-GAP-00482-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00482", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00482", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00483", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00483-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00483.py -- tests/files/web/generated/M21-GAP-00483-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00483", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00483", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00484", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00484-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00484.py -- tests/files/web/generated/M21-GAP-00484-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00484", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00484", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00485", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00485-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00485.py -- tests/files/web/generated/M21-GAP-00485-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00485", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00485", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00486", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00486-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00486.py -- tests/files/web/generated/M21-GAP-00486-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00486", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00486", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00487", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00487-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00487.py -- tests/files/web/generated/M21-GAP-00487-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00487", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00487", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00488", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00488-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00488.py -- tests/files/web/generated/M21-GAP-00488-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00488", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00488", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00489", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00489-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00489.py -- tests/files/web/generated/M21-GAP-00489-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00489", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00489", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00490", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00490-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00490.py -- tests/files/web/generated/M21-GAP-00490-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00490", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00490", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00491", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00491-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00491.py -- tests/files/web/generated/M21-GAP-00491-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00491", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00491", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00492", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00492-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00492.py -- tests/files/web/generated/M21-GAP-00492-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00492", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00492", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00493", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00493-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00493.py -- tests/files/web/generated/M21-GAP-00493-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00493", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00493", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00494", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00494-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00494.py -- tests/files/web/generated/M21-GAP-00494-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00494", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00494", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00495", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00495-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00495.py -- tests/files/web/generated/M21-GAP-00495-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00495", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00495", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00496", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00496-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00496.py -- tests/files/web/generated/M21-GAP-00496-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00496", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00496", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00497", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00497-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00497.py -- tests/files/web/generated/M21-GAP-00497-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00497", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00497", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00498", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00498-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00498.py -- tests/files/web/generated/M21-GAP-00498-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00498", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00498", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00499", + "gapId": "keymap-item:Clip Dopesheet Editor:CLIP_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00499-keymap-item-Clip-Dopesheet-Editor-CLIP_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00499.py -- tests/files/web/generated/M21-GAP-00499-keymap-item-Clip-Dopesheet-Editor-CLIP_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00499", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00499", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00500", + "gapId": "keymap-item:Clip Dopesheet Editor:CLIP_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00500-keymap-item-Clip-Dopesheet-Editor-CLIP_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00500.py -- tests/files/web/generated/M21-GAP-00500-keymap-item-Clip-Dopesheet-Editor-CLIP_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00500", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00500", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00501", + "gapId": "keymap-item:Clip Dopesheet Editor:CLIP_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00501-keymap-item-Clip-Dopesheet-Editor-CLIP_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00501.py -- tests/files/web/generated/M21-GAP-00501-keymap-item-Clip-Dopesheet-Editor-CLIP_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00501", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00501", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00502", + "gapId": "keymap-item:Clip Dopesheet Editor:CLIP_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00502-keymap-item-Clip-Dopesheet-Editor-CLIP_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00502.py -- tests/files/web/generated/M21-GAP-00502-keymap-item-Clip-Dopesheet-Editor-CLIP_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00502", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00502", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00503", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00503-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00503.py -- tests/files/web/generated/M21-GAP-00503-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00503", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00503", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00504", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00504-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00504.py -- tests/files/web/generated/M21-GAP-00504-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00504", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00504", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00505", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00505-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00505.py -- tests/files/web/generated/M21-GAP-00505-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00505", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00505", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00506", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00506-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00506.py -- tests/files/web/generated/M21-GAP-00506-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00506", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00506", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00507", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00507-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00507.py -- tests/files/web/generated/M21-GAP-00507-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00507", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00507", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00508", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00508-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00508.py -- tests/files/web/generated/M21-GAP-00508-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00508", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00508", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00509", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00509-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00509.py -- tests/files/web/generated/M21-GAP-00509-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00509", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00509", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00510", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00510-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00510.py -- tests/files/web/generated/M21-GAP-00510-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00510", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00510", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00511", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00511-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00511.py -- tests/files/web/generated/M21-GAP-00511-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00511", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00511", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00512", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00512-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00512.py -- tests/files/web/generated/M21-GAP-00512-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00512", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00512", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00513", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00513-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00513.py -- tests/files/web/generated/M21-GAP-00513-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00513", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00513", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00514", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00514-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00514.py -- tests/files/web/generated/M21-GAP-00514-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00514", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00514", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00515", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00515-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00515.py -- tests/files/web/generated/M21-GAP-00515-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00515", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00515", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00516", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00516-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00516.py -- tests/files/web/generated/M21-GAP-00516-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00516", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00516", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00517", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00517-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00517.py -- tests/files/web/generated/M21-GAP-00517-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00517", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00517", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00518", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00518-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00518.py -- tests/files/web/generated/M21-GAP-00518-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00518", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00518", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00519", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00519-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00519.py -- tests/files/web/generated/M21-GAP-00519-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00519", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00519", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00520", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00520-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00520.py -- tests/files/web/generated/M21-GAP-00520-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00520", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00520", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00521", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00521-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00521.py -- tests/files/web/generated/M21-GAP-00521-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00521", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00521", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00522", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00522-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00522.py -- tests/files/web/generated/M21-GAP-00522-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00522", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00522", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00523", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00523-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00523.py -- tests/files/web/generated/M21-GAP-00523-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00523", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00523", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00524", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00524-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00524.py -- tests/files/web/generated/M21-GAP-00524-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00524", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00524", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00525", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00525-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00525.py -- tests/files/web/generated/M21-GAP-00525-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00525", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00525", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00526", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00526-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00526.py -- tests/files/web/generated/M21-GAP-00526-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00526", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00526", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00527", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00527-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00527.py -- tests/files/web/generated/M21-GAP-00527-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00527", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00527", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00528", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00528-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00528.py -- tests/files/web/generated/M21-GAP-00528-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00528", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00528", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00529", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00529-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00529.py -- tests/files/web/generated/M21-GAP-00529-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00529", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00529", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00530", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00530-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00530.py -- tests/files/web/generated/M21-GAP-00530-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00530", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00530", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00531", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00531-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00531.py -- tests/files/web/generated/M21-GAP-00531-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00531", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00531", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00532", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00532-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00532.py -- tests/files/web/generated/M21-GAP-00532-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00532", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00532", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00533", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00533-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00533.py -- tests/files/web/generated/M21-GAP-00533-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00533", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00533", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00534", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00534-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00534.py -- tests/files/web/generated/M21-GAP-00534-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00534", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00534", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00535", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00535-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00535.py -- tests/files/web/generated/M21-GAP-00535-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00535", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00535", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00536", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00536-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00536.py -- tests/files/web/generated/M21-GAP-00536-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00536", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00536", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00537", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00537-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00537.py -- tests/files/web/generated/M21-GAP-00537-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00537", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00537", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00538", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00538-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00538.py -- tests/files/web/generated/M21-GAP-00538-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00538", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00538", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00539", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00539-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00539.py -- tests/files/web/generated/M21-GAP-00539-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00539", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00539", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00540", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00540-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00540.py -- tests/files/web/generated/M21-GAP-00540-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00540", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00540", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00541", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00541-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00541.py -- tests/files/web/generated/M21-GAP-00541-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00541", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00541", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00542", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00542-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00542.py -- tests/files/web/generated/M21-GAP-00542-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00542", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00542", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00543", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00543-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00543.py -- tests/files/web/generated/M21-GAP-00543-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00543", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00543", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00544", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00544-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00544.py -- tests/files/web/generated/M21-GAP-00544-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00544", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00544", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00545", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00545-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00545.py -- tests/files/web/generated/M21-GAP-00545-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00545", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00545", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00546", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00546-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00546.py -- tests/files/web/generated/M21-GAP-00546-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00546", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00546", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00547", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00547-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00547.py -- tests/files/web/generated/M21-GAP-00547-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00547", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00547", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00548", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00548-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00548.py -- tests/files/web/generated/M21-GAP-00548-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00548", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00548", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00549", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00549-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-50.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00549.py -- tests/files/web/generated/M21-GAP-00549-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-50.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00549", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00549", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00550", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:51", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00550-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-51.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00550.py -- tests/files/web/generated/M21-GAP-00550-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-51.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00550", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00550", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00551", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:52", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00551-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-52.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00551.py -- tests/files/web/generated/M21-GAP-00551-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-52.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00551", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00551", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00552", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:53", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00552-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-53.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00552.py -- tests/files/web/generated/M21-GAP-00552-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-53.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00552", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00552", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00553", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:54", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00553-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-54.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00553.py -- tests/files/web/generated/M21-GAP-00553-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-54.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00553", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00553", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00554", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:55", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00554-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-55.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00554.py -- tests/files/web/generated/M21-GAP-00554-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-55.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00554", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00554", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00555", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:56", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00555-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-56.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00555.py -- tests/files/web/generated/M21-GAP-00555-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-56.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00555", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00555", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00556", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:57", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00556-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-57.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00556.py -- tests/files/web/generated/M21-GAP-00556-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-57.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00556", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00556", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00557", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:58", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00557-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-58.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00557.py -- tests/files/web/generated/M21-GAP-00557-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-58.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00557", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00557", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00558", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:59", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00558-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-59.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00558.py -- tests/files/web/generated/M21-GAP-00558-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-59.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00558", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00558", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00559", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00559-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00559.py -- tests/files/web/generated/M21-GAP-00559-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00559", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00559", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00560", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:60", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00560-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-60.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00560.py -- tests/files/web/generated/M21-GAP-00560-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-60.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00560", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00560", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00561", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:61", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00561-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-61.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00561.py -- tests/files/web/generated/M21-GAP-00561-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-61.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00561", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00561", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00562", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:62", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00562-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-62.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00562.py -- tests/files/web/generated/M21-GAP-00562-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-62.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00562", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00562", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00563", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:63", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00563-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-63.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00563.py -- tests/files/web/generated/M21-GAP-00563-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-63.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00563", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00563", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00564", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:64", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00564-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-64.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00564.py -- tests/files/web/generated/M21-GAP-00564-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-64.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00564", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00564", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00565", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:65", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00565-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-65.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00565.py -- tests/files/web/generated/M21-GAP-00565-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-65.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00565", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00565", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00566", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:66", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00566-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-66.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00566.py -- tests/files/web/generated/M21-GAP-00566-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-66.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00566", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00566", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00567", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:67", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00567-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-67.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00567.py -- tests/files/web/generated/M21-GAP-00567-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-67.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00567", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00567", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00568", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:68", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00568-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-68.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00568.py -- tests/files/web/generated/M21-GAP-00568-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-68.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00568", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00568", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00569", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:69", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00569-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-69.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00569.py -- tests/files/web/generated/M21-GAP-00569-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-69.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00569", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00569", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00570", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00570-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00570.py -- tests/files/web/generated/M21-GAP-00570-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00570", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00570", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00571", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:70", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00571-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-70.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00571.py -- tests/files/web/generated/M21-GAP-00571-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-70.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00571", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00571", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00572", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:71", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00572-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-71.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00572.py -- tests/files/web/generated/M21-GAP-00572-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-71.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00572", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00572", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00573", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:72", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00573-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-72.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00573.py -- tests/files/web/generated/M21-GAP-00573-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-72.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00573", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00573", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00574", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:73", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00574-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-73.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00574.py -- tests/files/web/generated/M21-GAP-00574-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-73.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00574", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00574", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00575", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:74", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00575-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-74.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00575.py -- tests/files/web/generated/M21-GAP-00575-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-74.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00575", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00575", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00576", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:75", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00576-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-75.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00576.py -- tests/files/web/generated/M21-GAP-00576-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-75.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00576", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00576", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00577", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00577-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00577.py -- tests/files/web/generated/M21-GAP-00577-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00577", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00577", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00578", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00578-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00578.py -- tests/files/web/generated/M21-GAP-00578-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00578", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00578", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00579", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00579-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00579.py -- tests/files/web/generated/M21-GAP-00579-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00579", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00579", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00580", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00580-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00580.py -- tests/files/web/generated/M21-GAP-00580-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00580", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00580", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00581", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00581-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00581.py -- tests/files/web/generated/M21-GAP-00581-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00581", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00581", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00582", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00582-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00582.py -- tests/files/web/generated/M21-GAP-00582-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00582", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00582", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00583", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00583-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00583.py -- tests/files/web/generated/M21-GAP-00583-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00583", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00583", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00584", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00584-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00584.py -- tests/files/web/generated/M21-GAP-00584-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00584", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00584", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00585", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00585-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00585.py -- tests/files/web/generated/M21-GAP-00585-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00585", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00585", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00586", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00586-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00586.py -- tests/files/web/generated/M21-GAP-00586-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00586", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00586", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00587", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00587-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00587.py -- tests/files/web/generated/M21-GAP-00587-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00587", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00587", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00588", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00588-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00588.py -- tests/files/web/generated/M21-GAP-00588-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00588", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00588", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00589", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00589-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00589.py -- tests/files/web/generated/M21-GAP-00589-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00589", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00589", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00590", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00590-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00590.py -- tests/files/web/generated/M21-GAP-00590-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00590", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00590", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00591", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00591-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00591.py -- tests/files/web/generated/M21-GAP-00591-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00591", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00591", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00592", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00592-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00592.py -- tests/files/web/generated/M21-GAP-00592-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00592", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00592", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00593", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00593-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00593.py -- tests/files/web/generated/M21-GAP-00593-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00593", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00593", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00594", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00594-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00594.py -- tests/files/web/generated/M21-GAP-00594-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00594", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00594", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00595", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00595-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00595.py -- tests/files/web/generated/M21-GAP-00595-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00595", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00595", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00596", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00596-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00596.py -- tests/files/web/generated/M21-GAP-00596-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00596", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00596", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00597", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00597-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00597.py -- tests/files/web/generated/M21-GAP-00597-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00597", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00597", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00598", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00598-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00598.py -- tests/files/web/generated/M21-GAP-00598-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00598", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00598", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00599", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00599-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00599.py -- tests/files/web/generated/M21-GAP-00599-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00599", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00599", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00600", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00600-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00600.py -- tests/files/web/generated/M21-GAP-00600-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00600", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00600", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00601", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00601-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00601.py -- tests/files/web/generated/M21-GAP-00601-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00601", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00601", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00602", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00602-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00602.py -- tests/files/web/generated/M21-GAP-00602-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00602", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00602", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00603", + "gapId": "keymap-item:Clip Time Scrub:CLIP_EDITOR:PREVIEW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00603-keymap-item-Clip-Time-Scrub-CLIP_EDITOR-PREVIEW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00603.py -- tests/files/web/generated/M21-GAP-00603-keymap-item-Clip-Time-Scrub-CLIP_EDITOR-PREVIEW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00603", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00603", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00604", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00604-keymap-item-Clip-CLIP_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00604.py -- tests/files/web/generated/M21-GAP-00604-keymap-item-Clip-CLIP_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00604", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00604", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00605", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00605-keymap-item-Clip-CLIP_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00605.py -- tests/files/web/generated/M21-GAP-00605-keymap-item-Clip-CLIP_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00605", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00605", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00606", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00606-keymap-item-Clip-CLIP_EDITOR-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00606.py -- tests/files/web/generated/M21-GAP-00606-keymap-item-Clip-CLIP_EDITOR-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00606", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00606", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00607", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00607-keymap-item-Clip-CLIP_EDITOR-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00607.py -- tests/files/web/generated/M21-GAP-00607-keymap-item-Clip-CLIP_EDITOR-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00607", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00607", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00608", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00608-keymap-item-Clip-CLIP_EDITOR-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00608.py -- tests/files/web/generated/M21-GAP-00608-keymap-item-Clip-CLIP_EDITOR-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00608", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00608", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00609", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00609-keymap-item-Clip-CLIP_EDITOR-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00609.py -- tests/files/web/generated/M21-GAP-00609-keymap-item-Clip-CLIP_EDITOR-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00609", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00609", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00610", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00610-keymap-item-Clip-CLIP_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00610.py -- tests/files/web/generated/M21-GAP-00610-keymap-item-Clip-CLIP_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00610", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00610", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00611", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00611-keymap-item-Clip-CLIP_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00611.py -- tests/files/web/generated/M21-GAP-00611-keymap-item-Clip-CLIP_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00611", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00611", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00612", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00612-keymap-item-Clip-CLIP_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00612.py -- tests/files/web/generated/M21-GAP-00612-keymap-item-Clip-CLIP_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00612", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00612", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00613", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00613-keymap-item-Clip-CLIP_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00613.py -- tests/files/web/generated/M21-GAP-00613-keymap-item-Clip-CLIP_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00613", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00613", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00614", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00614-keymap-item-Clip-CLIP_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00614.py -- tests/files/web/generated/M21-GAP-00614-keymap-item-Clip-CLIP_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00614", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00614", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00615", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00615-keymap-item-Clip-CLIP_EDITOR-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00615.py -- tests/files/web/generated/M21-GAP-00615-keymap-item-Clip-CLIP_EDITOR-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00615", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00615", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00616", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00616-keymap-item-Clip-CLIP_EDITOR-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00616.py -- tests/files/web/generated/M21-GAP-00616-keymap-item-Clip-CLIP_EDITOR-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00616", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00616", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00617", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00617-keymap-item-Clip-CLIP_EDITOR-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00617.py -- tests/files/web/generated/M21-GAP-00617-keymap-item-Clip-CLIP_EDITOR-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00617", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00617", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00618", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00618-keymap-item-Console-CONSOLE-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00618.py -- tests/files/web/generated/M21-GAP-00618-keymap-item-Console-CONSOLE-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00618", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00618", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00619", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00619-keymap-item-Console-CONSOLE-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00619.py -- tests/files/web/generated/M21-GAP-00619-keymap-item-Console-CONSOLE-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00619", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00619", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00620", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00620-keymap-item-Console-CONSOLE-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00620.py -- tests/files/web/generated/M21-GAP-00620-keymap-item-Console-CONSOLE-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00620", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00620", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00621", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00621-keymap-item-Console-CONSOLE-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00621.py -- tests/files/web/generated/M21-GAP-00621-keymap-item-Console-CONSOLE-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00621", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00621", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00622", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00622-keymap-item-Console-CONSOLE-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00622.py -- tests/files/web/generated/M21-GAP-00622-keymap-item-Console-CONSOLE-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00622", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00622", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00623", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00623-keymap-item-Console-CONSOLE-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00623.py -- tests/files/web/generated/M21-GAP-00623-keymap-item-Console-CONSOLE-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00623", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00623", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00624", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00624-keymap-item-Console-CONSOLE-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00624.py -- tests/files/web/generated/M21-GAP-00624-keymap-item-Console-CONSOLE-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00624", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00624", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00625", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00625-keymap-item-Console-CONSOLE-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00625.py -- tests/files/web/generated/M21-GAP-00625-keymap-item-Console-CONSOLE-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00625", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00625", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00626", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00626-keymap-item-Console-CONSOLE-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00626.py -- tests/files/web/generated/M21-GAP-00626-keymap-item-Console-CONSOLE-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00626", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00626", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00627", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00627-keymap-item-Console-CONSOLE-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00627.py -- tests/files/web/generated/M21-GAP-00627-keymap-item-Console-CONSOLE-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00627", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00627", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00628", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00628-keymap-item-Console-CONSOLE-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00628.py -- tests/files/web/generated/M21-GAP-00628-keymap-item-Console-CONSOLE-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00628", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00628", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00629", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00629-keymap-item-Console-CONSOLE-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00629.py -- tests/files/web/generated/M21-GAP-00629-keymap-item-Console-CONSOLE-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00629", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00629", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00630", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00630-keymap-item-Console-CONSOLE-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00630.py -- tests/files/web/generated/M21-GAP-00630-keymap-item-Console-CONSOLE-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00630", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00630", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00631", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00631-keymap-item-Console-CONSOLE-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00631.py -- tests/files/web/generated/M21-GAP-00631-keymap-item-Console-CONSOLE-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00631", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00631", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00632", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00632-keymap-item-Console-CONSOLE-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00632.py -- tests/files/web/generated/M21-GAP-00632-keymap-item-Console-CONSOLE-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00632", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00632", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00633", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00633-keymap-item-Console-CONSOLE-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00633.py -- tests/files/web/generated/M21-GAP-00633-keymap-item-Console-CONSOLE-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00633", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00633", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00634", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00634-keymap-item-Console-CONSOLE-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00634.py -- tests/files/web/generated/M21-GAP-00634-keymap-item-Console-CONSOLE-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00634", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00634", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00635", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00635-keymap-item-Console-CONSOLE-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00635.py -- tests/files/web/generated/M21-GAP-00635-keymap-item-Console-CONSOLE-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00635", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00635", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00636", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00636-keymap-item-Console-CONSOLE-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00636.py -- tests/files/web/generated/M21-GAP-00636-keymap-item-Console-CONSOLE-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00636", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00636", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00637", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00637-keymap-item-Console-CONSOLE-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00637.py -- tests/files/web/generated/M21-GAP-00637-keymap-item-Console-CONSOLE-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00637", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00637", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00638", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00638-keymap-item-Console-CONSOLE-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00638.py -- tests/files/web/generated/M21-GAP-00638-keymap-item-Console-CONSOLE-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00638", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00638", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00639", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00639-keymap-item-Console-CONSOLE-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00639.py -- tests/files/web/generated/M21-GAP-00639-keymap-item-Console-CONSOLE-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00639", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00639", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00640", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00640-keymap-item-Console-CONSOLE-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00640.py -- tests/files/web/generated/M21-GAP-00640-keymap-item-Console-CONSOLE-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00640", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00640", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00641", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00641-keymap-item-Console-CONSOLE-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00641.py -- tests/files/web/generated/M21-GAP-00641-keymap-item-Console-CONSOLE-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00641", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00641", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00642", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00642-keymap-item-Console-CONSOLE-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00642.py -- tests/files/web/generated/M21-GAP-00642-keymap-item-Console-CONSOLE-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00642", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00642", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00643", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00643-keymap-item-Console-CONSOLE-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00643.py -- tests/files/web/generated/M21-GAP-00643-keymap-item-Console-CONSOLE-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00643", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00643", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00644", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00644-keymap-item-Console-CONSOLE-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00644.py -- tests/files/web/generated/M21-GAP-00644-keymap-item-Console-CONSOLE-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00644", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00644", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00645", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00645-keymap-item-Console-CONSOLE-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00645.py -- tests/files/web/generated/M21-GAP-00645-keymap-item-Console-CONSOLE-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00645", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00645", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00646", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00646-keymap-item-Console-CONSOLE-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00646.py -- tests/files/web/generated/M21-GAP-00646-keymap-item-Console-CONSOLE-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00646", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00646", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00647", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00647-keymap-item-Console-CONSOLE-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00647.py -- tests/files/web/generated/M21-GAP-00647-keymap-item-Console-CONSOLE-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00647", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00647", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00648", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00648-keymap-item-Console-CONSOLE-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00648.py -- tests/files/web/generated/M21-GAP-00648-keymap-item-Console-CONSOLE-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00648", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00648", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00649", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00649-keymap-item-Console-CONSOLE-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00649.py -- tests/files/web/generated/M21-GAP-00649-keymap-item-Console-CONSOLE-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00649", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00649", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00650", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00650-keymap-item-Console-CONSOLE-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00650.py -- tests/files/web/generated/M21-GAP-00650-keymap-item-Console-CONSOLE-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00650", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00650", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00651", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00651-keymap-item-Console-CONSOLE-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00651.py -- tests/files/web/generated/M21-GAP-00651-keymap-item-Console-CONSOLE-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00651", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00651", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00652", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00652-keymap-item-Console-CONSOLE-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00652.py -- tests/files/web/generated/M21-GAP-00652-keymap-item-Console-CONSOLE-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00652", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00652", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00653", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00653-keymap-item-Console-CONSOLE-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00653.py -- tests/files/web/generated/M21-GAP-00653-keymap-item-Console-CONSOLE-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00653", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00653", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00654", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00654-keymap-item-Console-CONSOLE-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00654.py -- tests/files/web/generated/M21-GAP-00654-keymap-item-Console-CONSOLE-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00654", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00654", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00655", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00655-keymap-item-Console-CONSOLE-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00655.py -- tests/files/web/generated/M21-GAP-00655-keymap-item-Console-CONSOLE-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00655", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00655", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00656", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00656-keymap-item-Console-CONSOLE-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00656.py -- tests/files/web/generated/M21-GAP-00656-keymap-item-Console-CONSOLE-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00656", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00656", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00657", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00657-keymap-item-Console-CONSOLE-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00657.py -- tests/files/web/generated/M21-GAP-00657-keymap-item-Console-CONSOLE-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00657", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00657", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00658", + "gapId": "keymap-item:Curve Pen Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00658-keymap-item-Curve-Pen-Modal-Map-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00658.py -- tests/files/web/generated/M21-GAP-00658-keymap-item-Curve-Pen-Modal-Map-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00658", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00658", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00659", + "gapId": "keymap-item:Curve Pen Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00659-keymap-item-Curve-Pen-Modal-Map-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00659.py -- tests/files/web/generated/M21-GAP-00659-keymap-item-Curve-Pen-Modal-Map-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00659", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00659", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00660", + "gapId": "keymap-item:Curve Pen Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00660-keymap-item-Curve-Pen-Modal-Map-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00660.py -- tests/files/web/generated/M21-GAP-00660-keymap-item-Curve-Pen-Modal-Map-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00660", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00660", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00661", + "gapId": "keymap-item:Curve Pen Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00661-keymap-item-Curve-Pen-Modal-Map-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00661.py -- tests/files/web/generated/M21-GAP-00661-keymap-item-Curve-Pen-Modal-Map-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00661", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00661", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00662", + "gapId": "keymap-item:Curve Pen Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00662-keymap-item-Curve-Pen-Modal-Map-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00662.py -- tests/files/web/generated/M21-GAP-00662-keymap-item-Curve-Pen-Modal-Map-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00662", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00662", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00663", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00663-keymap-item-Curve-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00663.py -- tests/files/web/generated/M21-GAP-00663-keymap-item-Curve-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00663", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00663", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00664", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00664-keymap-item-Curve-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00664.py -- tests/files/web/generated/M21-GAP-00664-keymap-item-Curve-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00664", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00664", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00665", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00665-keymap-item-Curve-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00665.py -- tests/files/web/generated/M21-GAP-00665-keymap-item-Curve-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00665", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00665", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00666", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00666-keymap-item-Curve-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00666.py -- tests/files/web/generated/M21-GAP-00666-keymap-item-Curve-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00666", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00666", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00667", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00667-keymap-item-Curve-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00667.py -- tests/files/web/generated/M21-GAP-00667-keymap-item-Curve-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00667", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00667", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00668", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00668-keymap-item-Curve-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00668.py -- tests/files/web/generated/M21-GAP-00668-keymap-item-Curve-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00668", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00668", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00669", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00669-keymap-item-Curve-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00669.py -- tests/files/web/generated/M21-GAP-00669-keymap-item-Curve-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00669", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00669", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00670", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00670-keymap-item-Curve-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00670.py -- tests/files/web/generated/M21-GAP-00670-keymap-item-Curve-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00670", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00670", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00671", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00671-keymap-item-Curve-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00671.py -- tests/files/web/generated/M21-GAP-00671-keymap-item-Curve-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00671", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00671", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00672", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00672-keymap-item-Curve-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00672.py -- tests/files/web/generated/M21-GAP-00672-keymap-item-Curve-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00672", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00672", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00673", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00673-keymap-item-Curve-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00673.py -- tests/files/web/generated/M21-GAP-00673-keymap-item-Curve-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00673", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00673", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00674", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00674-keymap-item-Curve-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00674.py -- tests/files/web/generated/M21-GAP-00674-keymap-item-Curve-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00674", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00674", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00675", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00675-keymap-item-Curve-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00675.py -- tests/files/web/generated/M21-GAP-00675-keymap-item-Curve-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00675", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00675", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00676", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00676-keymap-item-Curve-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00676.py -- tests/files/web/generated/M21-GAP-00676-keymap-item-Curve-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00676", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00676", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00677", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00677-keymap-item-Curve-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00677.py -- tests/files/web/generated/M21-GAP-00677-keymap-item-Curve-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00677", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00677", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00678", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00678-keymap-item-Curve-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00678.py -- tests/files/web/generated/M21-GAP-00678-keymap-item-Curve-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00678", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00678", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00679", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00679-keymap-item-Curve-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00679.py -- tests/files/web/generated/M21-GAP-00679-keymap-item-Curve-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00679", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00679", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00680", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00680-keymap-item-Curve-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00680.py -- tests/files/web/generated/M21-GAP-00680-keymap-item-Curve-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00680", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00680", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00681", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00681-keymap-item-Curve-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00681.py -- tests/files/web/generated/M21-GAP-00681-keymap-item-Curve-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00681", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00681", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00682", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00682-keymap-item-Curve-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00682.py -- tests/files/web/generated/M21-GAP-00682-keymap-item-Curve-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00682", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00682", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00683", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00683-keymap-item-Curve-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00683.py -- tests/files/web/generated/M21-GAP-00683-keymap-item-Curve-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00683", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00683", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00684", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00684-keymap-item-Curve-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00684.py -- tests/files/web/generated/M21-GAP-00684-keymap-item-Curve-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00684", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00684", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00685", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00685-keymap-item-Curve-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00685.py -- tests/files/web/generated/M21-GAP-00685-keymap-item-Curve-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00685", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00685", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00686", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00686-keymap-item-Curve-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00686.py -- tests/files/web/generated/M21-GAP-00686-keymap-item-Curve-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00686", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00686", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00687", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00687-keymap-item-Curve-EMPTY-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00687.py -- tests/files/web/generated/M21-GAP-00687-keymap-item-Curve-EMPTY-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00687", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00687", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00688", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00688-keymap-item-Curve-EMPTY-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00688.py -- tests/files/web/generated/M21-GAP-00688-keymap-item-Curve-EMPTY-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00688", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00688", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00689", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00689-keymap-item-Curve-EMPTY-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00689.py -- tests/files/web/generated/M21-GAP-00689-keymap-item-Curve-EMPTY-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00689", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00689", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00690", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00690-keymap-item-Curve-EMPTY-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00690.py -- tests/files/web/generated/M21-GAP-00690-keymap-item-Curve-EMPTY-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00690", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00690", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00691", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00691-keymap-item-Curve-EMPTY-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00691.py -- tests/files/web/generated/M21-GAP-00691-keymap-item-Curve-EMPTY-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00691", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00691", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00692", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00692-keymap-item-Curve-EMPTY-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00692.py -- tests/files/web/generated/M21-GAP-00692-keymap-item-Curve-EMPTY-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00692", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00692", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00693", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00693-keymap-item-Curve-EMPTY-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00693.py -- tests/files/web/generated/M21-GAP-00693-keymap-item-Curve-EMPTY-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00693", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00693", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00694", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00694-keymap-item-Curve-EMPTY-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00694.py -- tests/files/web/generated/M21-GAP-00694-keymap-item-Curve-EMPTY-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00694", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00694", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00695", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00695-keymap-item-Curve-EMPTY-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00695.py -- tests/files/web/generated/M21-GAP-00695-keymap-item-Curve-EMPTY-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00695", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00695", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00696", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00696-keymap-item-Curve-EMPTY-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00696.py -- tests/files/web/generated/M21-GAP-00696-keymap-item-Curve-EMPTY-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00696", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00696", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00697", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00697-keymap-item-Curve-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00697.py -- tests/files/web/generated/M21-GAP-00697-keymap-item-Curve-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00697", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00697", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00698", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00698-keymap-item-Curve-EMPTY-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00698.py -- tests/files/web/generated/M21-GAP-00698-keymap-item-Curve-EMPTY-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00698", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00698", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00699", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00699-keymap-item-Curve-EMPTY-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00699.py -- tests/files/web/generated/M21-GAP-00699-keymap-item-Curve-EMPTY-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00699", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00699", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00700", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00700-keymap-item-Curve-EMPTY-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00700.py -- tests/files/web/generated/M21-GAP-00700-keymap-item-Curve-EMPTY-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00700", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00700", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00701", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00701-keymap-item-Curve-EMPTY-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00701.py -- tests/files/web/generated/M21-GAP-00701-keymap-item-Curve-EMPTY-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00701", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00701", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00702", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00702-keymap-item-Curve-EMPTY-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00702.py -- tests/files/web/generated/M21-GAP-00702-keymap-item-Curve-EMPTY-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00702", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00702", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00703", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00703-keymap-item-Curve-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00703.py -- tests/files/web/generated/M21-GAP-00703-keymap-item-Curve-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00703", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00703", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00704", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00704-keymap-item-Curve-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00704.py -- tests/files/web/generated/M21-GAP-00704-keymap-item-Curve-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00704", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00704", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00705", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00705-keymap-item-Curve-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00705.py -- tests/files/web/generated/M21-GAP-00705-keymap-item-Curve-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00705", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00705", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00706", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00706-keymap-item-Curve-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00706.py -- tests/files/web/generated/M21-GAP-00706-keymap-item-Curve-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00706", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00706", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00707", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00707-keymap-item-Curve-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00707.py -- tests/files/web/generated/M21-GAP-00707-keymap-item-Curve-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00707", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00707", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00708", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00708-keymap-item-Curves-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00708.py -- tests/files/web/generated/M21-GAP-00708-keymap-item-Curves-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00708", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00708", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00709", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00709-keymap-item-Curves-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00709.py -- tests/files/web/generated/M21-GAP-00709-keymap-item-Curves-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00709", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00709", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00710", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00710-keymap-item-Curves-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00710.py -- tests/files/web/generated/M21-GAP-00710-keymap-item-Curves-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00710", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00710", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00711", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00711-keymap-item-Curves-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00711.py -- tests/files/web/generated/M21-GAP-00711-keymap-item-Curves-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00711", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00711", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00712", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00712-keymap-item-Curves-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00712.py -- tests/files/web/generated/M21-GAP-00712-keymap-item-Curves-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00712", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00712", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00713", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00713-keymap-item-Curves-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00713.py -- tests/files/web/generated/M21-GAP-00713-keymap-item-Curves-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00713", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00713", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00714", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00714-keymap-item-Curves-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00714.py -- tests/files/web/generated/M21-GAP-00714-keymap-item-Curves-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00714", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00714", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00715", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00715-keymap-item-Curves-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00715.py -- tests/files/web/generated/M21-GAP-00715-keymap-item-Curves-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00715", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00715", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00716", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00716-keymap-item-Curves-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00716.py -- tests/files/web/generated/M21-GAP-00716-keymap-item-Curves-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00716", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00716", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00717", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00717-keymap-item-Curves-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00717.py -- tests/files/web/generated/M21-GAP-00717-keymap-item-Curves-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00717", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00717", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00718", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00718-keymap-item-Curves-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00718.py -- tests/files/web/generated/M21-GAP-00718-keymap-item-Curves-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00718", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00718", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00719", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00719-keymap-item-Curves-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00719.py -- tests/files/web/generated/M21-GAP-00719-keymap-item-Curves-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00719", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00719", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00720", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00720-keymap-item-Curves-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00720.py -- tests/files/web/generated/M21-GAP-00720-keymap-item-Curves-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00720", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00720", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00721", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00721-keymap-item-Curves-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00721.py -- tests/files/web/generated/M21-GAP-00721-keymap-item-Curves-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00721", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00721", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00722", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00722-keymap-item-Curves-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00722.py -- tests/files/web/generated/M21-GAP-00722-keymap-item-Curves-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00722", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00722", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00723", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00723-keymap-item-Curves-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00723.py -- tests/files/web/generated/M21-GAP-00723-keymap-item-Curves-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00723", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00723", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00724", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00724-keymap-item-Curves-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00724.py -- tests/files/web/generated/M21-GAP-00724-keymap-item-Curves-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00724", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00724", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00725", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00725-keymap-item-Curves-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00725.py -- tests/files/web/generated/M21-GAP-00725-keymap-item-Curves-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00725", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00725", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00726", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00726-keymap-item-Curves-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00726.py -- tests/files/web/generated/M21-GAP-00726-keymap-item-Curves-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00726", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00726", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00727", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00727-keymap-item-Curves-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00727.py -- tests/files/web/generated/M21-GAP-00727-keymap-item-Curves-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00727", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00727", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00728", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00728-keymap-item-Curves-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00728.py -- tests/files/web/generated/M21-GAP-00728-keymap-item-Curves-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00728", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00728", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00729", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00729-keymap-item-Curves-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00729.py -- tests/files/web/generated/M21-GAP-00729-keymap-item-Curves-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00729", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00729", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00730", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00730-keymap-item-Curves-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00730.py -- tests/files/web/generated/M21-GAP-00730-keymap-item-Curves-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00730", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00730", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00731", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00731-keymap-item-Curves-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00731.py -- tests/files/web/generated/M21-GAP-00731-keymap-item-Curves-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00731", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00731", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00732", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00732-keymap-item-Curves-EMPTY-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00732.py -- tests/files/web/generated/M21-GAP-00732-keymap-item-Curves-EMPTY-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00732", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00732", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00733", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00733-keymap-item-Curves-EMPTY-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00733.py -- tests/files/web/generated/M21-GAP-00733-keymap-item-Curves-EMPTY-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00733", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00733", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00734", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00734-keymap-item-Curves-EMPTY-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00734.py -- tests/files/web/generated/M21-GAP-00734-keymap-item-Curves-EMPTY-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00734", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00734", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00735", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00735-keymap-item-Curves-EMPTY-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00735.py -- tests/files/web/generated/M21-GAP-00735-keymap-item-Curves-EMPTY-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00735", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00735", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00736", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00736-keymap-item-Curves-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00736.py -- tests/files/web/generated/M21-GAP-00736-keymap-item-Curves-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00736", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00736", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00737", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00737-keymap-item-Curves-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00737.py -- tests/files/web/generated/M21-GAP-00737-keymap-item-Curves-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00737", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00737", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00738", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00738-keymap-item-Curves-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00738.py -- tests/files/web/generated/M21-GAP-00738-keymap-item-Curves-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00738", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00738", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00739", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00739-keymap-item-Curves-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00739.py -- tests/files/web/generated/M21-GAP-00739-keymap-item-Curves-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00739", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00739", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00740", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00740-keymap-item-Curves-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00740.py -- tests/files/web/generated/M21-GAP-00740-keymap-item-Curves-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00740", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00740", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00741", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00741-keymap-item-Curves-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00741.py -- tests/files/web/generated/M21-GAP-00741-keymap-item-Curves-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00741", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00741", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00742", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00742-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00742.py -- tests/files/web/generated/M21-GAP-00742-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00742", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00742", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00743", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00743-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00743.py -- tests/files/web/generated/M21-GAP-00743-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00743", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00743", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00744", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00744-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00744.py -- tests/files/web/generated/M21-GAP-00744-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00744", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00744", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00745", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00745-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00745.py -- tests/files/web/generated/M21-GAP-00745-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00745", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00745", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00746", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00746-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00746.py -- tests/files/web/generated/M21-GAP-00746-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00746", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00746", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00747", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00747-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00747.py -- tests/files/web/generated/M21-GAP-00747-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00747", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00747", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00748", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00748-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00748.py -- tests/files/web/generated/M21-GAP-00748-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00748", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00748", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00749", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00749-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00749.py -- tests/files/web/generated/M21-GAP-00749-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00749", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00749", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00750", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00750-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00750.py -- tests/files/web/generated/M21-GAP-00750-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00750", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00750", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00751", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00751-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00751.py -- tests/files/web/generated/M21-GAP-00751-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00751", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00751", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00752", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00752-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00752.py -- tests/files/web/generated/M21-GAP-00752-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00752", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00752", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00753", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00753-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00753.py -- tests/files/web/generated/M21-GAP-00753-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00753", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00753", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00754", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00754-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00754.py -- tests/files/web/generated/M21-GAP-00754-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00754", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00754", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00755", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00755-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00755.py -- tests/files/web/generated/M21-GAP-00755-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00755", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00755", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00756", + "gapId": "keymap-item:Dopesheet Generic:DOPESHEET_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00756-keymap-item-Dopesheet-Generic-DOPESHEET_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00756.py -- tests/files/web/generated/M21-GAP-00756-keymap-item-Dopesheet-Generic-DOPESHEET_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00756", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00756", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00757", + "gapId": "keymap-item:Dopesheet Generic:DOPESHEET_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00757-keymap-item-Dopesheet-Generic-DOPESHEET_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00757.py -- tests/files/web/generated/M21-GAP-00757-keymap-item-Dopesheet-Generic-DOPESHEET_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00757", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00757", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00758", + "gapId": "keymap-item:Dopesheet Generic:DOPESHEET_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00758-keymap-item-Dopesheet-Generic-DOPESHEET_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00758.py -- tests/files/web/generated/M21-GAP-00758-keymap-item-Dopesheet-Generic-DOPESHEET_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00758", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00758", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00759", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00759-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00759.py -- tests/files/web/generated/M21-GAP-00759-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00759", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00759", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00760", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00760-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00760.py -- tests/files/web/generated/M21-GAP-00760-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00760", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00760", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00761", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00761-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00761.py -- tests/files/web/generated/M21-GAP-00761-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00761", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00761", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00762", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00762-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00762.py -- tests/files/web/generated/M21-GAP-00762-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00762", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00762", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00763", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00763-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00763.py -- tests/files/web/generated/M21-GAP-00763-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00763", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00763", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00764", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00764-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00764.py -- tests/files/web/generated/M21-GAP-00764-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00764", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00764", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00765", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00765-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00765.py -- tests/files/web/generated/M21-GAP-00765-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00765", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00765", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00766", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00766-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00766.py -- tests/files/web/generated/M21-GAP-00766-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00766", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00766", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00767", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00767-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00767.py -- tests/files/web/generated/M21-GAP-00767-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00767", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00767", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00768", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00768-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00768.py -- tests/files/web/generated/M21-GAP-00768-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00768", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00768", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00769", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00769-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00769.py -- tests/files/web/generated/M21-GAP-00769-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00769", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00769", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00770", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00770-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00770.py -- tests/files/web/generated/M21-GAP-00770-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00770", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00770", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00771", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00771-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00771.py -- tests/files/web/generated/M21-GAP-00771-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00771", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00771", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00772", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00772-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00772.py -- tests/files/web/generated/M21-GAP-00772-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00772", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00772", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00773", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00773-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00773.py -- tests/files/web/generated/M21-GAP-00773-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00773", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00773", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00774", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00774-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00774.py -- tests/files/web/generated/M21-GAP-00774-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00774", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00774", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00775", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00775-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00775.py -- tests/files/web/generated/M21-GAP-00775-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00775", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00775", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00776", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00776-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00776.py -- tests/files/web/generated/M21-GAP-00776-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00776", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00776", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00777", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00777-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00777.py -- tests/files/web/generated/M21-GAP-00777-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00777", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00777", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00778", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00778-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00778.py -- tests/files/web/generated/M21-GAP-00778-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00778", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00778", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00779", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00779-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00779.py -- tests/files/web/generated/M21-GAP-00779-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00779", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00779", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00780", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00780-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00780.py -- tests/files/web/generated/M21-GAP-00780-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00780", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00780", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00781", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00781-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00781.py -- tests/files/web/generated/M21-GAP-00781-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00781", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00781", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00782", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00782-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00782.py -- tests/files/web/generated/M21-GAP-00782-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00782", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00782", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00783", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00783-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00783.py -- tests/files/web/generated/M21-GAP-00783-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00783", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00783", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00784", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00784-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00784.py -- tests/files/web/generated/M21-GAP-00784-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00784", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00784", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00785", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00785-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00785.py -- tests/files/web/generated/M21-GAP-00785-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00785", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00785", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00786", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00786-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00786.py -- tests/files/web/generated/M21-GAP-00786-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00786", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00786", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00787", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00787-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00787.py -- tests/files/web/generated/M21-GAP-00787-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00787", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00787", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00788", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00788-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00788.py -- tests/files/web/generated/M21-GAP-00788-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00788", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00788", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00789", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00789-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00789.py -- tests/files/web/generated/M21-GAP-00789-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00789", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00789", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00790", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00790-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00790.py -- tests/files/web/generated/M21-GAP-00790-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00790", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00790", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00791", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00791-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00791.py -- tests/files/web/generated/M21-GAP-00791-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00791", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00791", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00792", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00792-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00792.py -- tests/files/web/generated/M21-GAP-00792-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00792", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00792", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00793", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00793-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00793.py -- tests/files/web/generated/M21-GAP-00793-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00793", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00793", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00794", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00794-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00794.py -- tests/files/web/generated/M21-GAP-00794-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00794", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00794", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00795", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00795-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00795.py -- tests/files/web/generated/M21-GAP-00795-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00795", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00795", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00796", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00796-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00796.py -- tests/files/web/generated/M21-GAP-00796-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00796", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00796", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00797", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00797-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00797.py -- tests/files/web/generated/M21-GAP-00797-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00797", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00797", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00798", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00798-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00798.py -- tests/files/web/generated/M21-GAP-00798-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00798", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00798", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00799", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00799-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00799.py -- tests/files/web/generated/M21-GAP-00799-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00799", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00799", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00800", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00800-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00800.py -- tests/files/web/generated/M21-GAP-00800-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00800", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00800", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00801", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00801-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00801.py -- tests/files/web/generated/M21-GAP-00801-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00801", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00801", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00802", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00802-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00802.py -- tests/files/web/generated/M21-GAP-00802-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00802", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00802", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00803", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00803-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00803.py -- tests/files/web/generated/M21-GAP-00803-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00803", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00803", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00804", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00804-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00804.py -- tests/files/web/generated/M21-GAP-00804-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00804", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00804", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00805", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00805-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-50.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00805.py -- tests/files/web/generated/M21-GAP-00805-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-50.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00805", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00805", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00806", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:51", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00806-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-51.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00806.py -- tests/files/web/generated/M21-GAP-00806-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-51.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00806", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00806", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00807", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:52", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00807-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-52.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00807.py -- tests/files/web/generated/M21-GAP-00807-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-52.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00807", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00807", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00808", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:53", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00808-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-53.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00808.py -- tests/files/web/generated/M21-GAP-00808-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-53.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00808", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00808", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00809", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:54", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00809-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-54.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00809.py -- tests/files/web/generated/M21-GAP-00809-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-54.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00809", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00809", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00810", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:55", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00810-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-55.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00810.py -- tests/files/web/generated/M21-GAP-00810-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-55.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00810", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00810", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00811", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:56", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00811-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-56.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00811.py -- tests/files/web/generated/M21-GAP-00811-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-56.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00811", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00811", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00812", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:57", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00812-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-57.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00812.py -- tests/files/web/generated/M21-GAP-00812-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-57.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00812", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00812", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00813", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:58", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00813-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-58.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00813.py -- tests/files/web/generated/M21-GAP-00813-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-58.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00813", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00813", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00814", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:59", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00814-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-59.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00814.py -- tests/files/web/generated/M21-GAP-00814-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-59.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00814", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00814", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00815", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00815-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00815.py -- tests/files/web/generated/M21-GAP-00815-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00815", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00815", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00816", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:60", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00816-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-60.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00816.py -- tests/files/web/generated/M21-GAP-00816-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-60.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00816", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00816", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00817", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:61", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00817-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-61.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00817.py -- tests/files/web/generated/M21-GAP-00817-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-61.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00817", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00817", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00818", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:62", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00818-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-62.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00818.py -- tests/files/web/generated/M21-GAP-00818-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-62.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00818", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00818", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00819", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:63", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00819-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-63.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00819.py -- tests/files/web/generated/M21-GAP-00819-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-63.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00819", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00819", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00820", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:64", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00820-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-64.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00820.py -- tests/files/web/generated/M21-GAP-00820-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-64.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00820", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00820", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00821", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:65", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00821-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-65.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00821.py -- tests/files/web/generated/M21-GAP-00821-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-65.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00821", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00821", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00822", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:66", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00822-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-66.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00822.py -- tests/files/web/generated/M21-GAP-00822-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-66.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00822", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00822", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00823", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:67", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00823-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-67.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00823.py -- tests/files/web/generated/M21-GAP-00823-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-67.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00823", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00823", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00824", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00824-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00824.py -- tests/files/web/generated/M21-GAP-00824-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00824", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00824", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00825", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00825-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00825.py -- tests/files/web/generated/M21-GAP-00825-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00825", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00825", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00826", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00826-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00826.py -- tests/files/web/generated/M21-GAP-00826-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00826", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00826", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00827", + "gapId": "keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00827-keymap-item-Eyedropper-ColorRamp-PointSampling-Map-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00827.py -- tests/files/web/generated/M21-GAP-00827-keymap-item-Eyedropper-ColorRamp-PointSampling-Map-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00827", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00827", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00828", + "gapId": "keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00828-keymap-item-Eyedropper-ColorRamp-PointSampling-Map-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00828.py -- tests/files/web/generated/M21-GAP-00828-keymap-item-Eyedropper-ColorRamp-PointSampling-Map-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00828", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00828", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00829", + "gapId": "keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00829-keymap-item-Eyedropper-ColorRamp-PointSampling-Map-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00829.py -- tests/files/web/generated/M21-GAP-00829-keymap-item-Eyedropper-ColorRamp-PointSampling-Map-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00829", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00829", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00830", + "gapId": "keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00830-keymap-item-Eyedropper-ColorRamp-PointSampling-Map-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00830.py -- tests/files/web/generated/M21-GAP-00830-keymap-item-Eyedropper-ColorRamp-PointSampling-Map-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00830", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00830", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00831", + "gapId": "keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00831-keymap-item-Eyedropper-ColorRamp-PointSampling-Map-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00831.py -- tests/files/web/generated/M21-GAP-00831-keymap-item-Eyedropper-ColorRamp-PointSampling-Map-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00831", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00831", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00832", + "gapId": "keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00832-keymap-item-Eyedropper-ColorRamp-PointSampling-Map-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00832.py -- tests/files/web/generated/M21-GAP-00832-keymap-item-Eyedropper-ColorRamp-PointSampling-Map-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00832", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00832", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00833", + "gapId": "keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00833-keymap-item-Eyedropper-ColorRamp-PointSampling-Map-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00833.py -- tests/files/web/generated/M21-GAP-00833-keymap-item-Eyedropper-ColorRamp-PointSampling-Map-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00833", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00833", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00834", + "gapId": "keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00834-keymap-item-Eyedropper-Modal-Map-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00834.py -- tests/files/web/generated/M21-GAP-00834-keymap-item-Eyedropper-Modal-Map-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00834", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00834", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00835", + "gapId": "keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00835-keymap-item-Eyedropper-Modal-Map-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00835.py -- tests/files/web/generated/M21-GAP-00835-keymap-item-Eyedropper-Modal-Map-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00835", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00835", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00836", + "gapId": "keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00836-keymap-item-Eyedropper-Modal-Map-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00836.py -- tests/files/web/generated/M21-GAP-00836-keymap-item-Eyedropper-Modal-Map-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00836", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00836", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00837", + "gapId": "keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00837-keymap-item-Eyedropper-Modal-Map-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00837.py -- tests/files/web/generated/M21-GAP-00837-keymap-item-Eyedropper-Modal-Map-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00837", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00837", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00838", + "gapId": "keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00838-keymap-item-Eyedropper-Modal-Map-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00838.py -- tests/files/web/generated/M21-GAP-00838-keymap-item-Eyedropper-Modal-Map-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00838", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00838", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00839", + "gapId": "keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00839-keymap-item-Eyedropper-Modal-Map-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00839.py -- tests/files/web/generated/M21-GAP-00839-keymap-item-Eyedropper-Modal-Map-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00839", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00839", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00840", + "gapId": "keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00840-keymap-item-Eyedropper-Modal-Map-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00840.py -- tests/files/web/generated/M21-GAP-00840-keymap-item-Eyedropper-Modal-Map-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00840", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00840", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00841", + "gapId": "keymap-item:File Browser Buttons:FILE_BROWSER:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00841-keymap-item-File-Browser-Buttons-FILE_BROWSER-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00841.py -- tests/files/web/generated/M21-GAP-00841-keymap-item-File-Browser-Buttons-FILE_BROWSER-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00841", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00841", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00842", + "gapId": "keymap-item:File Browser Buttons:FILE_BROWSER:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00842-keymap-item-File-Browser-Buttons-FILE_BROWSER-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00842.py -- tests/files/web/generated/M21-GAP-00842-keymap-item-File-Browser-Buttons-FILE_BROWSER-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00842", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00842", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00843", + "gapId": "keymap-item:File Browser Buttons:FILE_BROWSER:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00843-keymap-item-File-Browser-Buttons-FILE_BROWSER-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00843.py -- tests/files/web/generated/M21-GAP-00843-keymap-item-File-Browser-Buttons-FILE_BROWSER-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00843", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00843", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00844", + "gapId": "keymap-item:File Browser Buttons:FILE_BROWSER:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00844-keymap-item-File-Browser-Buttons-FILE_BROWSER-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00844.py -- tests/files/web/generated/M21-GAP-00844-keymap-item-File-Browser-Buttons-FILE_BROWSER-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00844", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00844", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00845", + "gapId": "keymap-item:File Browser Buttons:FILE_BROWSER:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00845-keymap-item-File-Browser-Buttons-FILE_BROWSER-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00845.py -- tests/files/web/generated/M21-GAP-00845-keymap-item-File-Browser-Buttons-FILE_BROWSER-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00845", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00845", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00846", + "gapId": "keymap-item:File Browser Buttons:FILE_BROWSER:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00846-keymap-item-File-Browser-Buttons-FILE_BROWSER-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00846.py -- tests/files/web/generated/M21-GAP-00846-keymap-item-File-Browser-Buttons-FILE_BROWSER-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00846", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00846", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00847", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00847-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00847.py -- tests/files/web/generated/M21-GAP-00847-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00847", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00847", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00848", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00848-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00848.py -- tests/files/web/generated/M21-GAP-00848-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00848", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00848", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00849", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00849-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00849.py -- tests/files/web/generated/M21-GAP-00849-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00849", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00849", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00850", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00850-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00850.py -- tests/files/web/generated/M21-GAP-00850-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00850", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00850", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00851", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00851-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00851.py -- tests/files/web/generated/M21-GAP-00851-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00851", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00851", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00852", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00852-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00852.py -- tests/files/web/generated/M21-GAP-00852-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00852", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00852", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00853", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00853-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00853.py -- tests/files/web/generated/M21-GAP-00853-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00853", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00853", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00854", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00854-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00854.py -- tests/files/web/generated/M21-GAP-00854-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00854", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00854", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00855", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00855-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00855.py -- tests/files/web/generated/M21-GAP-00855-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00855", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00855", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00856", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00856-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00856.py -- tests/files/web/generated/M21-GAP-00856-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00856", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00856", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00857", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00857-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00857.py -- tests/files/web/generated/M21-GAP-00857-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00857", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00857", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00858", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00858-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00858.py -- tests/files/web/generated/M21-GAP-00858-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00858", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00858", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00859", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00859-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00859.py -- tests/files/web/generated/M21-GAP-00859-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00859", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00859", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00860", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00860-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00860.py -- tests/files/web/generated/M21-GAP-00860-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00860", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00860", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00861", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00861-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00861.py -- tests/files/web/generated/M21-GAP-00861-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00861", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00861", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00862", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00862-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00862.py -- tests/files/web/generated/M21-GAP-00862-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00862", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00862", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00863", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00863-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00863.py -- tests/files/web/generated/M21-GAP-00863-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00863", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00863", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00864", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00864-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00864.py -- tests/files/web/generated/M21-GAP-00864-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00864", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00864", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00865", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00865-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00865.py -- tests/files/web/generated/M21-GAP-00865-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00865", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00865", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00866", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00866-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00866.py -- tests/files/web/generated/M21-GAP-00866-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00866", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00866", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00867", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00867-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00867.py -- tests/files/web/generated/M21-GAP-00867-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00867", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00867", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00868", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00868-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00868.py -- tests/files/web/generated/M21-GAP-00868-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00868", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00868", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00869", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00869-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00869.py -- tests/files/web/generated/M21-GAP-00869-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00869", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00869", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00870", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00870-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00870.py -- tests/files/web/generated/M21-GAP-00870-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00870", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00870", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00871", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00871-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00871.py -- tests/files/web/generated/M21-GAP-00871-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00871", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00871", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00872", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00872-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00872.py -- tests/files/web/generated/M21-GAP-00872-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00872", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00872", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00873", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00873-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00873.py -- tests/files/web/generated/M21-GAP-00873-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00873", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00873", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00874", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00874-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00874.py -- tests/files/web/generated/M21-GAP-00874-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00874", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00874", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00875", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00875-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00875.py -- tests/files/web/generated/M21-GAP-00875-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00875", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00875", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00876", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00876-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00876.py -- tests/files/web/generated/M21-GAP-00876-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00876", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00876", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00877", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00877-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00877.py -- tests/files/web/generated/M21-GAP-00877-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00877", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00877", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00878", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00878-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00878.py -- tests/files/web/generated/M21-GAP-00878-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00878", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00878", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00879", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00879-keymap-item-File-Browser-FILE_BROWSER-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00879.py -- tests/files/web/generated/M21-GAP-00879-keymap-item-File-Browser-FILE_BROWSER-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00879", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00879", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00880", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00880-keymap-item-File-Browser-FILE_BROWSER-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00880.py -- tests/files/web/generated/M21-GAP-00880-keymap-item-File-Browser-FILE_BROWSER-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00880", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00880", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00881", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00881-keymap-item-File-Browser-FILE_BROWSER-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00881.py -- tests/files/web/generated/M21-GAP-00881-keymap-item-File-Browser-FILE_BROWSER-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00881", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00881", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00882", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00882-keymap-item-File-Browser-FILE_BROWSER-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00882.py -- tests/files/web/generated/M21-GAP-00882-keymap-item-File-Browser-FILE_BROWSER-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00882", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00882", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00883", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00883-keymap-item-File-Browser-FILE_BROWSER-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00883.py -- tests/files/web/generated/M21-GAP-00883-keymap-item-File-Browser-FILE_BROWSER-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00883", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00883", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00884", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00884-keymap-item-File-Browser-FILE_BROWSER-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00884.py -- tests/files/web/generated/M21-GAP-00884-keymap-item-File-Browser-FILE_BROWSER-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00884", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00884", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00885", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00885-keymap-item-File-Browser-FILE_BROWSER-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00885.py -- tests/files/web/generated/M21-GAP-00885-keymap-item-File-Browser-FILE_BROWSER-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00885", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00885", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00886", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00886-keymap-item-File-Browser-FILE_BROWSER-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00886.py -- tests/files/web/generated/M21-GAP-00886-keymap-item-File-Browser-FILE_BROWSER-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00886", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00886", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00887", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00887-keymap-item-File-Browser-FILE_BROWSER-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00887.py -- tests/files/web/generated/M21-GAP-00887-keymap-item-File-Browser-FILE_BROWSER-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00887", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00887", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00888", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00888-keymap-item-File-Browser-FILE_BROWSER-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00888.py -- tests/files/web/generated/M21-GAP-00888-keymap-item-File-Browser-FILE_BROWSER-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00888", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00888", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00889", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00889-keymap-item-File-Browser-FILE_BROWSER-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00889.py -- tests/files/web/generated/M21-GAP-00889-keymap-item-File-Browser-FILE_BROWSER-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00889", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00889", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00890", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00890-keymap-item-File-Browser-FILE_BROWSER-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00890.py -- tests/files/web/generated/M21-GAP-00890-keymap-item-File-Browser-FILE_BROWSER-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00890", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00890", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00891", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00891-keymap-item-File-Browser-FILE_BROWSER-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00891.py -- tests/files/web/generated/M21-GAP-00891-keymap-item-File-Browser-FILE_BROWSER-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00891", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00891", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00892", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00892-keymap-item-File-Browser-FILE_BROWSER-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00892.py -- tests/files/web/generated/M21-GAP-00892-keymap-item-File-Browser-FILE_BROWSER-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00892", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00892", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00893", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00893-keymap-item-File-Browser-FILE_BROWSER-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00893.py -- tests/files/web/generated/M21-GAP-00893-keymap-item-File-Browser-FILE_BROWSER-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00893", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00893", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00894", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00894-keymap-item-File-Browser-FILE_BROWSER-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00894.py -- tests/files/web/generated/M21-GAP-00894-keymap-item-File-Browser-FILE_BROWSER-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00894", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00894", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00895", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00895-keymap-item-File-Browser-FILE_BROWSER-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00895.py -- tests/files/web/generated/M21-GAP-00895-keymap-item-File-Browser-FILE_BROWSER-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00895", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00895", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00896", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00896-keymap-item-File-Browser-FILE_BROWSER-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00896.py -- tests/files/web/generated/M21-GAP-00896-keymap-item-File-Browser-FILE_BROWSER-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00896", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00896", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00897", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00897-keymap-item-File-Browser-FILE_BROWSER-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00897.py -- tests/files/web/generated/M21-GAP-00897-keymap-item-File-Browser-FILE_BROWSER-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00897", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00897", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00898", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00898-keymap-item-File-Browser-FILE_BROWSER-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00898.py -- tests/files/web/generated/M21-GAP-00898-keymap-item-File-Browser-FILE_BROWSER-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00898", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00898", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00899", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00899-keymap-item-File-Browser-FILE_BROWSER-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00899.py -- tests/files/web/generated/M21-GAP-00899-keymap-item-File-Browser-FILE_BROWSER-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00899", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00899", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00900", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00900-keymap-item-File-Browser-FILE_BROWSER-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00900.py -- tests/files/web/generated/M21-GAP-00900-keymap-item-File-Browser-FILE_BROWSER-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00900", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00900", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00901", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00901-keymap-item-File-Browser-FILE_BROWSER-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00901.py -- tests/files/web/generated/M21-GAP-00901-keymap-item-File-Browser-FILE_BROWSER-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00901", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00901", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00902", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00902-keymap-item-File-Browser-FILE_BROWSER-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00902.py -- tests/files/web/generated/M21-GAP-00902-keymap-item-File-Browser-FILE_BROWSER-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00902", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00902", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00903", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00903-keymap-item-File-Browser-FILE_BROWSER-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00903.py -- tests/files/web/generated/M21-GAP-00903-keymap-item-File-Browser-FILE_BROWSER-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00903", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00903", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00904", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00904-keymap-item-File-Browser-FILE_BROWSER-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00904.py -- tests/files/web/generated/M21-GAP-00904-keymap-item-File-Browser-FILE_BROWSER-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00904", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00904", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00905", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00905-keymap-item-File-Browser-FILE_BROWSER-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00905.py -- tests/files/web/generated/M21-GAP-00905-keymap-item-File-Browser-FILE_BROWSER-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00905", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00905", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00906", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00906-keymap-item-File-Browser-FILE_BROWSER-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00906.py -- tests/files/web/generated/M21-GAP-00906-keymap-item-File-Browser-FILE_BROWSER-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00906", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00906", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00907", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00907-keymap-item-File-Browser-FILE_BROWSER-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00907.py -- tests/files/web/generated/M21-GAP-00907-keymap-item-File-Browser-FILE_BROWSER-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00907", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00907", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00908", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00908-keymap-item-File-Browser-FILE_BROWSER-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00908.py -- tests/files/web/generated/M21-GAP-00908-keymap-item-File-Browser-FILE_BROWSER-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00908", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00908", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00909", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00909-keymap-item-File-Browser-FILE_BROWSER-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00909.py -- tests/files/web/generated/M21-GAP-00909-keymap-item-File-Browser-FILE_BROWSER-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00909", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00909", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00910", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00910-keymap-item-File-Browser-FILE_BROWSER-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00910.py -- tests/files/web/generated/M21-GAP-00910-keymap-item-File-Browser-FILE_BROWSER-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00910", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00910", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00911", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00911-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00911.py -- tests/files/web/generated/M21-GAP-00911-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00911", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00911", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00912", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00912-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00912.py -- tests/files/web/generated/M21-GAP-00912-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00912", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00912", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00913", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00913-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00913.py -- tests/files/web/generated/M21-GAP-00913-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00913", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00913", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00914", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00914-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00914.py -- tests/files/web/generated/M21-GAP-00914-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00914", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00914", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00915", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00915-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00915.py -- tests/files/web/generated/M21-GAP-00915-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00915", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00915", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00916", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00916-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00916.py -- tests/files/web/generated/M21-GAP-00916-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00916", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00916", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00917", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00917-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00917.py -- tests/files/web/generated/M21-GAP-00917-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00917", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00917", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00918", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00918-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00918.py -- tests/files/web/generated/M21-GAP-00918-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00918", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00918", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00919", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00919-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00919.py -- tests/files/web/generated/M21-GAP-00919-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00919", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00919", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00920", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00920-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00920.py -- tests/files/web/generated/M21-GAP-00920-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00920", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00920", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00921", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00921-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00921.py -- tests/files/web/generated/M21-GAP-00921-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00921", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00921", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00922", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00922-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00922.py -- tests/files/web/generated/M21-GAP-00922-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00922", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00922", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00923", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00923-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00923.py -- tests/files/web/generated/M21-GAP-00923-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00923", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00923", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00924", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00924-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00924.py -- tests/files/web/generated/M21-GAP-00924-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00924", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00924", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00925", + "gapId": "keymap-item:Font:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00925-keymap-item-Font-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00925.py -- tests/files/web/generated/M21-GAP-00925-keymap-item-Font-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00925", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00925", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00926", + "gapId": "keymap-item:Font:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00926-keymap-item-Font-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00926.py -- tests/files/web/generated/M21-GAP-00926-keymap-item-Font-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00926", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00926", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00927", + "gapId": "keymap-item:Font:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00927-keymap-item-Font-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00927.py -- tests/files/web/generated/M21-GAP-00927-keymap-item-Font-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00927", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00927", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00928", + "gapId": "keymap-item:Font:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00928-keymap-item-Font-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00928.py -- tests/files/web/generated/M21-GAP-00928-keymap-item-Font-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00928", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00928", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00929", + "gapId": "keymap-item:Font:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00929-keymap-item-Font-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00929.py -- tests/files/web/generated/M21-GAP-00929-keymap-item-Font-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00929", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00929", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00930", + "gapId": "keymap-item:Font:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00930-keymap-item-Font-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00930.py -- tests/files/web/generated/M21-GAP-00930-keymap-item-Font-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00930", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00930", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00931", + "gapId": "keymap-item:Font:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00931-keymap-item-Font-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00931.py -- tests/files/web/generated/M21-GAP-00931-keymap-item-Font-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00931", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00931", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00932", + "gapId": "keymap-item:Font:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00932-keymap-item-Font-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00932.py -- tests/files/web/generated/M21-GAP-00932-keymap-item-Font-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00932", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00932", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00933", + "gapId": "keymap-item:Font:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00933-keymap-item-Font-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00933.py -- tests/files/web/generated/M21-GAP-00933-keymap-item-Font-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00933", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00933", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00934", + "gapId": "keymap-item:Font:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00934-keymap-item-Font-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00934.py -- tests/files/web/generated/M21-GAP-00934-keymap-item-Font-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00934", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00934", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00935", + "gapId": "keymap-item:Font:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00935-keymap-item-Font-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00935.py -- tests/files/web/generated/M21-GAP-00935-keymap-item-Font-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00935", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00935", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00936", + "gapId": "keymap-item:Font:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00936-keymap-item-Font-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00936.py -- tests/files/web/generated/M21-GAP-00936-keymap-item-Font-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00936", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00936", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00937", + "gapId": "keymap-item:Font:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00937-keymap-item-Font-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00937.py -- tests/files/web/generated/M21-GAP-00937-keymap-item-Font-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00937", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00937", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00938", + "gapId": "keymap-item:Font:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00938-keymap-item-Font-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00938.py -- tests/files/web/generated/M21-GAP-00938-keymap-item-Font-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00938", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00938", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00939", + "gapId": "keymap-item:Font:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00939-keymap-item-Font-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00939.py -- tests/files/web/generated/M21-GAP-00939-keymap-item-Font-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00939", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00939", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00940", + "gapId": "keymap-item:Font:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00940-keymap-item-Font-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00940.py -- tests/files/web/generated/M21-GAP-00940-keymap-item-Font-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00940", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00940", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00941", + "gapId": "keymap-item:Font:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00941-keymap-item-Font-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00941.py -- tests/files/web/generated/M21-GAP-00941-keymap-item-Font-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00941", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00941", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00942", + "gapId": "keymap-item:Font:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00942-keymap-item-Font-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00942.py -- tests/files/web/generated/M21-GAP-00942-keymap-item-Font-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00942", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00942", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00943", + "gapId": "keymap-item:Font:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00943-keymap-item-Font-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00943.py -- tests/files/web/generated/M21-GAP-00943-keymap-item-Font-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00943", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00943", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00944", + "gapId": "keymap-item:Font:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00944-keymap-item-Font-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00944.py -- tests/files/web/generated/M21-GAP-00944-keymap-item-Font-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00944", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00944", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00945", + "gapId": "keymap-item:Font:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00945-keymap-item-Font-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00945.py -- tests/files/web/generated/M21-GAP-00945-keymap-item-Font-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00945", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00945", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00946", + "gapId": "keymap-item:Font:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00946-keymap-item-Font-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00946.py -- tests/files/web/generated/M21-GAP-00946-keymap-item-Font-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00946", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00946", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00947", + "gapId": "keymap-item:Font:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00947-keymap-item-Font-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00947.py -- tests/files/web/generated/M21-GAP-00947-keymap-item-Font-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00947", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00947", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00948", + "gapId": "keymap-item:Font:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00948-keymap-item-Font-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00948.py -- tests/files/web/generated/M21-GAP-00948-keymap-item-Font-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00948", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00948", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00949", + "gapId": "keymap-item:Font:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00949-keymap-item-Font-EMPTY-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00949.py -- tests/files/web/generated/M21-GAP-00949-keymap-item-Font-EMPTY-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00949", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00949", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00950", + "gapId": "keymap-item:Font:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00950-keymap-item-Font-EMPTY-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00950.py -- tests/files/web/generated/M21-GAP-00950-keymap-item-Font-EMPTY-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00950", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00950", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00951", + "gapId": "keymap-item:Font:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00951-keymap-item-Font-EMPTY-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00951.py -- tests/files/web/generated/M21-GAP-00951-keymap-item-Font-EMPTY-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00951", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00951", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00952", + "gapId": "keymap-item:Font:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00952-keymap-item-Font-EMPTY-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00952.py -- tests/files/web/generated/M21-GAP-00952-keymap-item-Font-EMPTY-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00952", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00952", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00953", + "gapId": "keymap-item:Font:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00953-keymap-item-Font-EMPTY-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00953.py -- tests/files/web/generated/M21-GAP-00953-keymap-item-Font-EMPTY-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00953", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00953", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00954", + "gapId": "keymap-item:Font:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00954-keymap-item-Font-EMPTY-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00954.py -- tests/files/web/generated/M21-GAP-00954-keymap-item-Font-EMPTY-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00954", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00954", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00955", + "gapId": "keymap-item:Font:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00955-keymap-item-Font-EMPTY-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00955.py -- tests/files/web/generated/M21-GAP-00955-keymap-item-Font-EMPTY-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00955", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00955", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00956", + "gapId": "keymap-item:Font:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00956-keymap-item-Font-EMPTY-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00956.py -- tests/files/web/generated/M21-GAP-00956-keymap-item-Font-EMPTY-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00956", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00956", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00957", + "gapId": "keymap-item:Font:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00957-keymap-item-Font-EMPTY-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00957.py -- tests/files/web/generated/M21-GAP-00957-keymap-item-Font-EMPTY-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00957", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00957", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00958", + "gapId": "keymap-item:Font:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00958-keymap-item-Font-EMPTY-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00958.py -- tests/files/web/generated/M21-GAP-00958-keymap-item-Font-EMPTY-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00958", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00958", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00959", + "gapId": "keymap-item:Font:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00959-keymap-item-Font-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00959.py -- tests/files/web/generated/M21-GAP-00959-keymap-item-Font-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00959", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00959", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00960", + "gapId": "keymap-item:Font:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00960-keymap-item-Font-EMPTY-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00960.py -- tests/files/web/generated/M21-GAP-00960-keymap-item-Font-EMPTY-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00960", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00960", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00961", + "gapId": "keymap-item:Font:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00961-keymap-item-Font-EMPTY-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00961.py -- tests/files/web/generated/M21-GAP-00961-keymap-item-Font-EMPTY-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00961", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00961", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00962", + "gapId": "keymap-item:Font:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00962-keymap-item-Font-EMPTY-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00962.py -- tests/files/web/generated/M21-GAP-00962-keymap-item-Font-EMPTY-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00962", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00962", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00963", + "gapId": "keymap-item:Font:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00963-keymap-item-Font-EMPTY-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00963.py -- tests/files/web/generated/M21-GAP-00963-keymap-item-Font-EMPTY-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00963", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00963", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00964", + "gapId": "keymap-item:Font:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00964-keymap-item-Font-EMPTY-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00964.py -- tests/files/web/generated/M21-GAP-00964-keymap-item-Font-EMPTY-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00964", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00964", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00965", + "gapId": "keymap-item:Font:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00965-keymap-item-Font-EMPTY-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00965.py -- tests/files/web/generated/M21-GAP-00965-keymap-item-Font-EMPTY-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00965", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00965", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00966", + "gapId": "keymap-item:Font:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00966-keymap-item-Font-EMPTY-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00966.py -- tests/files/web/generated/M21-GAP-00966-keymap-item-Font-EMPTY-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00966", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00966", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00967", + "gapId": "keymap-item:Font:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00967-keymap-item-Font-EMPTY-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00967.py -- tests/files/web/generated/M21-GAP-00967-keymap-item-Font-EMPTY-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00967", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00967", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00968", + "gapId": "keymap-item:Font:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00968-keymap-item-Font-EMPTY-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00968.py -- tests/files/web/generated/M21-GAP-00968-keymap-item-Font-EMPTY-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00968", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00968", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00969", + "gapId": "keymap-item:Font:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00969-keymap-item-Font-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00969.py -- tests/files/web/generated/M21-GAP-00969-keymap-item-Font-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00969", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00969", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00970", + "gapId": "keymap-item:Font:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00970-keymap-item-Font-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00970.py -- tests/files/web/generated/M21-GAP-00970-keymap-item-Font-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00970", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00970", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00971", + "gapId": "keymap-item:Font:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00971-keymap-item-Font-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00971.py -- tests/files/web/generated/M21-GAP-00971-keymap-item-Font-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00971", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00971", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00972", + "gapId": "keymap-item:Font:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00972-keymap-item-Font-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00972.py -- tests/files/web/generated/M21-GAP-00972-keymap-item-Font-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00972", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00972", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00973", + "gapId": "keymap-item:Font:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00973-keymap-item-Font-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00973.py -- tests/files/web/generated/M21-GAP-00973-keymap-item-Font-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00973", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00973", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00974", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00974-keymap-item-Frames-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00974.py -- tests/files/web/generated/M21-GAP-00974-keymap-item-Frames-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00974", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00974", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00975", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00975-keymap-item-Frames-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00975.py -- tests/files/web/generated/M21-GAP-00975-keymap-item-Frames-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00975", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00975", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00976", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00976-keymap-item-Frames-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00976.py -- tests/files/web/generated/M21-GAP-00976-keymap-item-Frames-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00976", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00976", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00977", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00977-keymap-item-Frames-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00977.py -- tests/files/web/generated/M21-GAP-00977-keymap-item-Frames-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00977", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00977", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00978", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00978-keymap-item-Frames-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00978.py -- tests/files/web/generated/M21-GAP-00978-keymap-item-Frames-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00978", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00978", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00979", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00979-keymap-item-Frames-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00979.py -- tests/files/web/generated/M21-GAP-00979-keymap-item-Frames-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00979", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00979", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00980", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00980-keymap-item-Frames-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00980.py -- tests/files/web/generated/M21-GAP-00980-keymap-item-Frames-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00980", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00980", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00981", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00981-keymap-item-Frames-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00981.py -- tests/files/web/generated/M21-GAP-00981-keymap-item-Frames-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00981", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00981", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00982", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00982-keymap-item-Frames-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00982.py -- tests/files/web/generated/M21-GAP-00982-keymap-item-Frames-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00982", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00982", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00983", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00983-keymap-item-Frames-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00983.py -- tests/files/web/generated/M21-GAP-00983-keymap-item-Frames-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00983", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00983", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00984", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00984-keymap-item-Frames-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00984.py -- tests/files/web/generated/M21-GAP-00984-keymap-item-Frames-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00984", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00984", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00985", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00985-keymap-item-Frames-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00985.py -- tests/files/web/generated/M21-GAP-00985-keymap-item-Frames-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00985", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00985", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00986", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00986-keymap-item-Frames-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00986.py -- tests/files/web/generated/M21-GAP-00986-keymap-item-Frames-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00986", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00986", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00987", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00987-keymap-item-Frames-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00987.py -- tests/files/web/generated/M21-GAP-00987-keymap-item-Frames-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00987", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00987", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00988", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00988-keymap-item-Frames-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00988.py -- tests/files/web/generated/M21-GAP-00988-keymap-item-Frames-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00988", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00988", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00989", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00989-keymap-item-Frames-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00989.py -- tests/files/web/generated/M21-GAP-00989-keymap-item-Frames-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00989", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00989", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00990", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00990-keymap-item-Frames-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00990.py -- tests/files/web/generated/M21-GAP-00990-keymap-item-Frames-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00990", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00990", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00991", + "gapId": "keymap-item:Generic Gizmo Click Drag:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00991-keymap-item-Generic-Gizmo-Click-Drag-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00991.py -- tests/files/web/generated/M21-GAP-00991-keymap-item-Generic-Gizmo-Click-Drag-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00991", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00991", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00992", + "gapId": "keymap-item:Generic Gizmo Click Drag:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00992-keymap-item-Generic-Gizmo-Click-Drag-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00992.py -- tests/files/web/generated/M21-GAP-00992-keymap-item-Generic-Gizmo-Click-Drag-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00992", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00992", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00993", + "gapId": "keymap-item:Generic Gizmo Drag:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00993-keymap-item-Generic-Gizmo-Drag-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00993.py -- tests/files/web/generated/M21-GAP-00993-keymap-item-Generic-Gizmo-Drag-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00993", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00993", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00994", + "gapId": "keymap-item:Generic Gizmo Maybe Drag:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00994-keymap-item-Generic-Gizmo-Maybe-Drag-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00994.py -- tests/files/web/generated/M21-GAP-00994-keymap-item-Generic-Gizmo-Maybe-Drag-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00994", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00994", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00995", + "gapId": "keymap-item:Generic Gizmo Select:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00995-keymap-item-Generic-Gizmo-Select-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00995.py -- tests/files/web/generated/M21-GAP-00995-keymap-item-Generic-Gizmo-Select-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00995", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00995", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00996", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00996-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00996.py -- tests/files/web/generated/M21-GAP-00996-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00996", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00996", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00997", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00997-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00997.py -- tests/files/web/generated/M21-GAP-00997-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00997", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00997", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00998", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00998-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00998.py -- tests/files/web/generated/M21-GAP-00998-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00998", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00998", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00999", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00999-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00999.py -- tests/files/web/generated/M21-GAP-00999-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00999", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00999", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01000", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01000-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01000.py -- tests/files/web/generated/M21-GAP-01000-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01000", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01000", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01001", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01001-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01001.py -- tests/files/web/generated/M21-GAP-01001-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01001", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01001", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01002", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01002-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01002.py -- tests/files/web/generated/M21-GAP-01002-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01002", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01002", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01003", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01003-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01003.py -- tests/files/web/generated/M21-GAP-01003-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01003", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01003", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01004", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01004-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01004.py -- tests/files/web/generated/M21-GAP-01004-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01004", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01004", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01005", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01005-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01005.py -- tests/files/web/generated/M21-GAP-01005-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01005", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01005", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01006", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01006-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01006.py -- tests/files/web/generated/M21-GAP-01006-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01006", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01006", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01007", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01007-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01007.py -- tests/files/web/generated/M21-GAP-01007-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01007", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01007", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01008", + "gapId": "keymap-item:Generic Gizmo:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01008-keymap-item-Generic-Gizmo-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01008.py -- tests/files/web/generated/M21-GAP-01008-keymap-item-Generic-Gizmo-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01008", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01008", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01009", + "gapId": "keymap-item:Generic Tool: Annotate Eraser:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01009-keymap-item-Generic-Tool-Annotate-Eraser-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01009.py -- tests/files/web/generated/M21-GAP-01009-keymap-item-Generic-Tool-Annotate-Eraser-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01009", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01009", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01010", + "gapId": "keymap-item:Generic Tool: Annotate Eraser:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01010-keymap-item-Generic-Tool-Annotate-Eraser-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01010.py -- tests/files/web/generated/M21-GAP-01010-keymap-item-Generic-Tool-Annotate-Eraser-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01010", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01010", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01011", + "gapId": "keymap-item:Generic Tool: Annotate Line:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01011-keymap-item-Generic-Tool-Annotate-Line-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01011.py -- tests/files/web/generated/M21-GAP-01011-keymap-item-Generic-Tool-Annotate-Line-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01011", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01011", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01012", + "gapId": "keymap-item:Generic Tool: Annotate Line:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01012-keymap-item-Generic-Tool-Annotate-Line-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01012.py -- tests/files/web/generated/M21-GAP-01012-keymap-item-Generic-Tool-Annotate-Line-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01012", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01012", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01013", + "gapId": "keymap-item:Generic Tool: Annotate Polygon:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01013-keymap-item-Generic-Tool-Annotate-Polygon-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01013.py -- tests/files/web/generated/M21-GAP-01013-keymap-item-Generic-Tool-Annotate-Polygon-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01013", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01013", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01014", + "gapId": "keymap-item:Generic Tool: Annotate Polygon:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01014-keymap-item-Generic-Tool-Annotate-Polygon-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01014.py -- tests/files/web/generated/M21-GAP-01014-keymap-item-Generic-Tool-Annotate-Polygon-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01014", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01014", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01015", + "gapId": "keymap-item:Generic Tool: Annotate:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01015-keymap-item-Generic-Tool-Annotate-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01015.py -- tests/files/web/generated/M21-GAP-01015-keymap-item-Generic-Tool-Annotate-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01015", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01015", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01016", + "gapId": "keymap-item:Generic Tool: Annotate:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01016-keymap-item-Generic-Tool-Annotate-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01016.py -- tests/files/web/generated/M21-GAP-01016-keymap-item-Generic-Tool-Annotate-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01016", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01016", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01017", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01017-keymap-item-Gesture-Box-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01017.py -- tests/files/web/generated/M21-GAP-01017-keymap-item-Gesture-Box-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01017", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01017", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01018", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01018-keymap-item-Gesture-Box-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01018.py -- tests/files/web/generated/M21-GAP-01018-keymap-item-Gesture-Box-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01018", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01018", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01019", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01019-keymap-item-Gesture-Box-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01019.py -- tests/files/web/generated/M21-GAP-01019-keymap-item-Gesture-Box-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01019", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01019", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01020", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01020-keymap-item-Gesture-Box-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01020.py -- tests/files/web/generated/M21-GAP-01020-keymap-item-Gesture-Box-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01020", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01020", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01021", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01021-keymap-item-Gesture-Box-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01021.py -- tests/files/web/generated/M21-GAP-01021-keymap-item-Gesture-Box-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01021", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01021", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01022", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01022-keymap-item-Gesture-Box-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01022.py -- tests/files/web/generated/M21-GAP-01022-keymap-item-Gesture-Box-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01022", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01022", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01023", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01023-keymap-item-Gesture-Box-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01023.py -- tests/files/web/generated/M21-GAP-01023-keymap-item-Gesture-Box-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01023", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01023", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01024", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01024-keymap-item-Gesture-Box-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01024.py -- tests/files/web/generated/M21-GAP-01024-keymap-item-Gesture-Box-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01024", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01024", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01025", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01025-keymap-item-Gesture-Box-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01025.py -- tests/files/web/generated/M21-GAP-01025-keymap-item-Gesture-Box-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01025", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01025", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01026", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01026-keymap-item-Gesture-Box-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01026.py -- tests/files/web/generated/M21-GAP-01026-keymap-item-Gesture-Box-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01026", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01026", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01027", + "gapId": "keymap-item:Gesture Lasso:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01027-keymap-item-Gesture-Lasso-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01027.py -- tests/files/web/generated/M21-GAP-01027-keymap-item-Gesture-Lasso-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01027", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01027", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01028", + "gapId": "keymap-item:Gesture Polyline:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01028-keymap-item-Gesture-Polyline-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01028.py -- tests/files/web/generated/M21-GAP-01028-keymap-item-Gesture-Polyline-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01028", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01028", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01029", + "gapId": "keymap-item:Gesture Polyline:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01029-keymap-item-Gesture-Polyline-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01029.py -- tests/files/web/generated/M21-GAP-01029-keymap-item-Gesture-Polyline-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01029", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01029", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01030", + "gapId": "keymap-item:Gesture Polyline:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01030-keymap-item-Gesture-Polyline-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01030.py -- tests/files/web/generated/M21-GAP-01030-keymap-item-Gesture-Polyline-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01030", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01030", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01031", + "gapId": "keymap-item:Gesture Polyline:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01031-keymap-item-Gesture-Polyline-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01031.py -- tests/files/web/generated/M21-GAP-01031-keymap-item-Gesture-Polyline-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01031", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01031", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01032", + "gapId": "keymap-item:Gesture Polyline:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01032-keymap-item-Gesture-Polyline-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01032.py -- tests/files/web/generated/M21-GAP-01032-keymap-item-Gesture-Polyline-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01032", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01032", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01033", + "gapId": "keymap-item:Gesture Polyline:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01033-keymap-item-Gesture-Polyline-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01033.py -- tests/files/web/generated/M21-GAP-01033-keymap-item-Gesture-Polyline-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01033", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01033", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01034", + "gapId": "keymap-item:Gesture Straight Line:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01034-keymap-item-Gesture-Straight-Line-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01034.py -- tests/files/web/generated/M21-GAP-01034-keymap-item-Gesture-Straight-Line-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01034", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01034", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01035", + "gapId": "keymap-item:Gesture Straight Line:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01035-keymap-item-Gesture-Straight-Line-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01035.py -- tests/files/web/generated/M21-GAP-01035-keymap-item-Gesture-Straight-Line-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01035", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01035", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01036", + "gapId": "keymap-item:Gesture Straight Line:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01036-keymap-item-Gesture-Straight-Line-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01036.py -- tests/files/web/generated/M21-GAP-01036-keymap-item-Gesture-Straight-Line-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01036", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01036", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01037", + "gapId": "keymap-item:Gesture Straight Line:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01037-keymap-item-Gesture-Straight-Line-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01037.py -- tests/files/web/generated/M21-GAP-01037-keymap-item-Gesture-Straight-Line-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01037", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01037", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01038", + "gapId": "keymap-item:Gesture Straight Line:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01038-keymap-item-Gesture-Straight-Line-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01038.py -- tests/files/web/generated/M21-GAP-01038-keymap-item-Gesture-Straight-Line-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01038", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01038", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01039", + "gapId": "keymap-item:Gesture Straight Line:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01039-keymap-item-Gesture-Straight-Line-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01039.py -- tests/files/web/generated/M21-GAP-01039-keymap-item-Gesture-Straight-Line-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01039", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01039", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01040", + "gapId": "keymap-item:Gesture Straight Line:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01040-keymap-item-Gesture-Straight-Line-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01040.py -- tests/files/web/generated/M21-GAP-01040-keymap-item-Gesture-Straight-Line-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01040", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01040", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01041", + "gapId": "keymap-item:Gesture Zoom Border:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01041-keymap-item-Gesture-Zoom-Border-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01041.py -- tests/files/web/generated/M21-GAP-01041-keymap-item-Gesture-Zoom-Border-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01041", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01041", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01042", + "gapId": "keymap-item:Gesture Zoom Border:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01042-keymap-item-Gesture-Zoom-Border-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01042.py -- tests/files/web/generated/M21-GAP-01042-keymap-item-Gesture-Zoom-Border-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01042", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01042", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01043", + "gapId": "keymap-item:Gesture Zoom Border:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01043-keymap-item-Gesture-Zoom-Border-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01043.py -- tests/files/web/generated/M21-GAP-01043-keymap-item-Gesture-Zoom-Border-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01043", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01043", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01044", + "gapId": "keymap-item:Gesture Zoom Border:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01044-keymap-item-Gesture-Zoom-Border-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01044.py -- tests/files/web/generated/M21-GAP-01044-keymap-item-Gesture-Zoom-Border-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01044", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01044", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01045", + "gapId": "keymap-item:Gesture Zoom Border:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01045-keymap-item-Gesture-Zoom-Border-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01045.py -- tests/files/web/generated/M21-GAP-01045-keymap-item-Gesture-Zoom-Border-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01045", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01045", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01046", + "gapId": "keymap-item:Gesture Zoom Border:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01046-keymap-item-Gesture-Zoom-Border-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01046.py -- tests/files/web/generated/M21-GAP-01046-keymap-item-Gesture-Zoom-Border-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01046", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01046", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01047", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01047-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01047.py -- tests/files/web/generated/M21-GAP-01047-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01047", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01047", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01048", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01048-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01048.py -- tests/files/web/generated/M21-GAP-01048-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01048", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01048", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01049", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01049-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01049.py -- tests/files/web/generated/M21-GAP-01049-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01049", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01049", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01050", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01050-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01050.py -- tests/files/web/generated/M21-GAP-01050-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01050", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01050", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01051", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01051-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01051.py -- tests/files/web/generated/M21-GAP-01051-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01051", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01051", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01052", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01052-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01052.py -- tests/files/web/generated/M21-GAP-01052-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01052", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01052", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01053", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01053-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01053.py -- tests/files/web/generated/M21-GAP-01053-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01053", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01053", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01054", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01054-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01054.py -- tests/files/web/generated/M21-GAP-01054-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01054", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01054", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01055", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01055-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01055.py -- tests/files/web/generated/M21-GAP-01055-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01055", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01055", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01056", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01056-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01056.py -- tests/files/web/generated/M21-GAP-01056-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01056", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01056", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01057", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01057-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01057.py -- tests/files/web/generated/M21-GAP-01057-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01057", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01057", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01058", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01058-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01058.py -- tests/files/web/generated/M21-GAP-01058-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01058", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01058", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01059", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01059-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01059.py -- tests/files/web/generated/M21-GAP-01059-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01059", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01059", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01060", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01060-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01060.py -- tests/files/web/generated/M21-GAP-01060-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01060", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01060", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01061", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01061-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01061.py -- tests/files/web/generated/M21-GAP-01061-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01061", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01061", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01062", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01062-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01062.py -- tests/files/web/generated/M21-GAP-01062-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01062", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01062", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01063", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01063-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01063.py -- tests/files/web/generated/M21-GAP-01063-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01063", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01063", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01064", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01064-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01064.py -- tests/files/web/generated/M21-GAP-01064-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01064", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01064", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01065", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01065-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01065.py -- tests/files/web/generated/M21-GAP-01065-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01065", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01065", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01066", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01066-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01066.py -- tests/files/web/generated/M21-GAP-01066-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01066", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01066", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01067", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01067-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01067.py -- tests/files/web/generated/M21-GAP-01067-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01067", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01067", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01068", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01068-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01068.py -- tests/files/web/generated/M21-GAP-01068-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01068", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01068", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01069", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01069-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01069.py -- tests/files/web/generated/M21-GAP-01069-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01069", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01069", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01070", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01070-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01070.py -- tests/files/web/generated/M21-GAP-01070-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01070", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01070", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01071", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01071-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01071.py -- tests/files/web/generated/M21-GAP-01071-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01071", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01071", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01072", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01072-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01072.py -- tests/files/web/generated/M21-GAP-01072-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01072", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01072", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01073", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01073-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01073.py -- tests/files/web/generated/M21-GAP-01073-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01073", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01073", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01074", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01074-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01074.py -- tests/files/web/generated/M21-GAP-01074-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01074", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01074", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01075", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01075-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01075.py -- tests/files/web/generated/M21-GAP-01075-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01075", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01075", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01076", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01076-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01076.py -- tests/files/web/generated/M21-GAP-01076-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01076", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01076", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01077", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01077-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01077.py -- tests/files/web/generated/M21-GAP-01077-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01077", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01077", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01078", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01078-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01078.py -- tests/files/web/generated/M21-GAP-01078-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01078", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01078", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01079", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01079-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01079.py -- tests/files/web/generated/M21-GAP-01079-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01079", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01079", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01080", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01080-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01080.py -- tests/files/web/generated/M21-GAP-01080-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01080", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01080", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01081", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01081-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01081.py -- tests/files/web/generated/M21-GAP-01081-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01081", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01081", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01082", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01082-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01082.py -- tests/files/web/generated/M21-GAP-01082-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01082", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01082", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01083", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01083-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01083.py -- tests/files/web/generated/M21-GAP-01083-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01083", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01083", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01084", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01084-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01084.py -- tests/files/web/generated/M21-GAP-01084-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01084", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01084", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01085", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01085-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01085.py -- tests/files/web/generated/M21-GAP-01085-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01085", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01085", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01086", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01086-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01086.py -- tests/files/web/generated/M21-GAP-01086-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01086", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01086", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01087", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01087-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01087.py -- tests/files/web/generated/M21-GAP-01087-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01087", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01087", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01088", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01088-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01088.py -- tests/files/web/generated/M21-GAP-01088-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01088", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01088", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01089", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01089-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01089.py -- tests/files/web/generated/M21-GAP-01089-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01089", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01089", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01090", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01090-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01090.py -- tests/files/web/generated/M21-GAP-01090-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01090", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01090", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01091", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01091-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01091.py -- tests/files/web/generated/M21-GAP-01091-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01091", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01091", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01092", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01092-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01092.py -- tests/files/web/generated/M21-GAP-01092-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01092", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01092", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01093", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01093-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01093.py -- tests/files/web/generated/M21-GAP-01093-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01093", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01093", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01094", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01094-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01094.py -- tests/files/web/generated/M21-GAP-01094-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01094", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01094", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01095", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01095-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01095.py -- tests/files/web/generated/M21-GAP-01095-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01095", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01095", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01096", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01096-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01096.py -- tests/files/web/generated/M21-GAP-01096-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01096", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01096", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01097", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01097-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01097.py -- tests/files/web/generated/M21-GAP-01097-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01097", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01097", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01098", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01098-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01098.py -- tests/files/web/generated/M21-GAP-01098-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01098", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01098", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01099", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01099-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01099.py -- tests/files/web/generated/M21-GAP-01099-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01099", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01099", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01100", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01100-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01100.py -- tests/files/web/generated/M21-GAP-01100-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01100", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01100", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01101", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01101-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01101.py -- tests/files/web/generated/M21-GAP-01101-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01101", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01101", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01102", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01102-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01102.py -- tests/files/web/generated/M21-GAP-01102-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01102", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01102", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01103", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01103-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-50.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01103.py -- tests/files/web/generated/M21-GAP-01103-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-50.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01103", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01103", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01104", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:51", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01104-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-51.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01104.py -- tests/files/web/generated/M21-GAP-01104-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-51.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01104", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01104", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01105", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:52", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01105-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-52.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01105.py -- tests/files/web/generated/M21-GAP-01105-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-52.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01105", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01105", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01106", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:53", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01106-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-53.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01106.py -- tests/files/web/generated/M21-GAP-01106-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-53.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01106", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01106", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01107", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:54", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01107-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-54.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01107.py -- tests/files/web/generated/M21-GAP-01107-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-54.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01107", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01107", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01108", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:55", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01108-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-55.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01108.py -- tests/files/web/generated/M21-GAP-01108-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-55.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01108", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01108", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01109", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:56", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01109-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-56.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01109.py -- tests/files/web/generated/M21-GAP-01109-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-56.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01109", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01109", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01110", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:57", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01110-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-57.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01110.py -- tests/files/web/generated/M21-GAP-01110-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-57.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01110", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01110", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01111", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:58", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01111-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-58.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01111.py -- tests/files/web/generated/M21-GAP-01111-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-58.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01111", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01111", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01112", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:59", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01112-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-59.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01112.py -- tests/files/web/generated/M21-GAP-01112-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-59.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01112", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01112", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01113", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01113-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01113.py -- tests/files/web/generated/M21-GAP-01113-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01113", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01113", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01114", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:60", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01114-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-60.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01114.py -- tests/files/web/generated/M21-GAP-01114-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-60.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01114", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01114", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01115", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:61", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01115-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-61.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01115.py -- tests/files/web/generated/M21-GAP-01115-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-61.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01115", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01115", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01116", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:62", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01116-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-62.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01116.py -- tests/files/web/generated/M21-GAP-01116-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-62.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01116", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01116", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01117", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:63", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01117-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-63.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01117.py -- tests/files/web/generated/M21-GAP-01117-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-63.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01117", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01117", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01118", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:64", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01118-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-64.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01118.py -- tests/files/web/generated/M21-GAP-01118-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-64.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01118", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01118", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01119", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:65", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01119-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-65.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01119.py -- tests/files/web/generated/M21-GAP-01119-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-65.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01119", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01119", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01120", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:66", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01120-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-66.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01120.py -- tests/files/web/generated/M21-GAP-01120-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-66.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01120", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01120", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01121", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:67", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01121-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-67.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01121.py -- tests/files/web/generated/M21-GAP-01121-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-67.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01121", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01121", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01122", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:68", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01122-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-68.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01122.py -- tests/files/web/generated/M21-GAP-01122-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-68.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01122", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01122", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01123", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:69", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01123-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-69.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01123.py -- tests/files/web/generated/M21-GAP-01123-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-69.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01123", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01123", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01124", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01124-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01124.py -- tests/files/web/generated/M21-GAP-01124-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01124", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01124", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01125", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:70", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01125-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-70.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01125.py -- tests/files/web/generated/M21-GAP-01125-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-70.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01125", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01125", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01126", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01126-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01126.py -- tests/files/web/generated/M21-GAP-01126-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01126", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01126", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01127", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01127-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01127.py -- tests/files/web/generated/M21-GAP-01127-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01127", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01127", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01128", + "gapId": "keymap-item:Grease Pencil Brush Stroke:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01128-keymap-item-Grease-Pencil-Brush-Stroke-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01128.py -- tests/files/web/generated/M21-GAP-01128-keymap-item-Grease-Pencil-Brush-Stroke-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01128", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01128", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01129", + "gapId": "keymap-item:Grease Pencil Brush Stroke:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01129-keymap-item-Grease-Pencil-Brush-Stroke-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01129.py -- tests/files/web/generated/M21-GAP-01129-keymap-item-Grease-Pencil-Brush-Stroke-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01129", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01129", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01130", + "gapId": "keymap-item:Grease Pencil Brush Stroke:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01130-keymap-item-Grease-Pencil-Brush-Stroke-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01130.py -- tests/files/web/generated/M21-GAP-01130-keymap-item-Grease-Pencil-Brush-Stroke-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01130", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01130", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01131", + "gapId": "keymap-item:Grease Pencil Brush Stroke:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01131-keymap-item-Grease-Pencil-Brush-Stroke-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01131.py -- tests/files/web/generated/M21-GAP-01131-keymap-item-Grease-Pencil-Brush-Stroke-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01131", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01131", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01132", + "gapId": "keymap-item:Grease Pencil Brush Stroke:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01132-keymap-item-Grease-Pencil-Brush-Stroke-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01132.py -- tests/files/web/generated/M21-GAP-01132-keymap-item-Grease-Pencil-Brush-Stroke-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01132", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01132", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01133", + "gapId": "keymap-item:Grease Pencil Brush Stroke:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01133-keymap-item-Grease-Pencil-Brush-Stroke-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01133.py -- tests/files/web/generated/M21-GAP-01133-keymap-item-Grease-Pencil-Brush-Stroke-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01133", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01133", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01134", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01134-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01134.py -- tests/files/web/generated/M21-GAP-01134-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01134", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01134", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01135", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01135-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01135.py -- tests/files/web/generated/M21-GAP-01135-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01135", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01135", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01136", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01136-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01136.py -- tests/files/web/generated/M21-GAP-01136-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01136", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01136", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01137", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01137-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01137.py -- tests/files/web/generated/M21-GAP-01137-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01137", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01137", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01138", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01138-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01138.py -- tests/files/web/generated/M21-GAP-01138-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01138", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01138", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01139", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01139-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01139.py -- tests/files/web/generated/M21-GAP-01139-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01139", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01139", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01140", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01140-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01140.py -- tests/files/web/generated/M21-GAP-01140-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01140", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01140", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01141", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01141-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01141.py -- tests/files/web/generated/M21-GAP-01141-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01141", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01141", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01142", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01142-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01142.py -- tests/files/web/generated/M21-GAP-01142-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01142", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01142", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01143", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01143-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01143.py -- tests/files/web/generated/M21-GAP-01143-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01143", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01143", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01144", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01144-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01144.py -- tests/files/web/generated/M21-GAP-01144-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01144", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01144", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01145", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01145-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01145.py -- tests/files/web/generated/M21-GAP-01145-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01145", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01145", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01146", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01146-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01146.py -- tests/files/web/generated/M21-GAP-01146-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01146", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01146", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01147", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01147-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01147.py -- tests/files/web/generated/M21-GAP-01147-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01147", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01147", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01148", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01148-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01148.py -- tests/files/web/generated/M21-GAP-01148-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01148", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01148", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01149", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01149-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01149.py -- tests/files/web/generated/M21-GAP-01149-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01149", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01149", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01150", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01150-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01150.py -- tests/files/web/generated/M21-GAP-01150-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01150", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01150", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01151", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01151-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01151.py -- tests/files/web/generated/M21-GAP-01151-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01151", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01151", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01152", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01152-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01152.py -- tests/files/web/generated/M21-GAP-01152-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01152", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01152", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01153", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01153-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01153.py -- tests/files/web/generated/M21-GAP-01153-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01153", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01153", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01154", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01154-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01154.py -- tests/files/web/generated/M21-GAP-01154-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01154", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01154", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01155", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01155-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01155.py -- tests/files/web/generated/M21-GAP-01155-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01155", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01155", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01156", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01156-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01156.py -- tests/files/web/generated/M21-GAP-01156-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01156", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01156", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01157", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01157-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01157.py -- tests/files/web/generated/M21-GAP-01157-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01157", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01157", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01158", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01158-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01158.py -- tests/files/web/generated/M21-GAP-01158-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01158", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01158", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01159", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01159-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01159.py -- tests/files/web/generated/M21-GAP-01159-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01159", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01159", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01160", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01160-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01160.py -- tests/files/web/generated/M21-GAP-01160-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01160", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01160", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01161", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01161-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01161.py -- tests/files/web/generated/M21-GAP-01161-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01161", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01161", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01162", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01162-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01162.py -- tests/files/web/generated/M21-GAP-01162-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01162", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01162", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01163", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01163-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01163.py -- tests/files/web/generated/M21-GAP-01163-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01163", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01163", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01164", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01164-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01164.py -- tests/files/web/generated/M21-GAP-01164-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01164", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01164", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01165", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01165-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01165.py -- tests/files/web/generated/M21-GAP-01165-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01165", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01165", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01166", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01166-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01166.py -- tests/files/web/generated/M21-GAP-01166-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01166", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01166", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01167", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01167-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01167.py -- tests/files/web/generated/M21-GAP-01167-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01167", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01167", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01168", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01168-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01168.py -- tests/files/web/generated/M21-GAP-01168-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01168", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01168", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01169", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01169-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01169.py -- tests/files/web/generated/M21-GAP-01169-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01169", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01169", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01170", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01170-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01170.py -- tests/files/web/generated/M21-GAP-01170-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01170", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01170", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01171", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01171-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01171.py -- tests/files/web/generated/M21-GAP-01171-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01171", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01171", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01172", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01172-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01172.py -- tests/files/web/generated/M21-GAP-01172-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01172", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01172", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01173", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01173-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01173.py -- tests/files/web/generated/M21-GAP-01173-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01173", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01173", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01174", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01174-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01174.py -- tests/files/web/generated/M21-GAP-01174-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01174", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01174", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01175", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01175-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01175.py -- tests/files/web/generated/M21-GAP-01175-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01175", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01175", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01176", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01176-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01176.py -- tests/files/web/generated/M21-GAP-01176-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01176", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01176", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01177", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01177-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01177.py -- tests/files/web/generated/M21-GAP-01177-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01177", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01177", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01178", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01178-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01178.py -- tests/files/web/generated/M21-GAP-01178-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01178", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01178", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01179", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01179-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01179.py -- tests/files/web/generated/M21-GAP-01179-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01179", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01179", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01180", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01180-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01180.py -- tests/files/web/generated/M21-GAP-01180-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01180", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01180", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01181", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01181-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01181.py -- tests/files/web/generated/M21-GAP-01181-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01181", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01181", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01182", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01182-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01182.py -- tests/files/web/generated/M21-GAP-01182-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01182", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01182", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01183", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01183-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01183.py -- tests/files/web/generated/M21-GAP-01183-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01183", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01183", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01184", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01184-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01184.py -- tests/files/web/generated/M21-GAP-01184-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01184", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01184", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01185", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01185-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01185.py -- tests/files/web/generated/M21-GAP-01185-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01185", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01185", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01186", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01186-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01186.py -- tests/files/web/generated/M21-GAP-01186-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01186", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01186", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01187", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01187-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01187.py -- tests/files/web/generated/M21-GAP-01187-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01187", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01187", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01188", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01188-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01188.py -- tests/files/web/generated/M21-GAP-01188-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01188", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01188", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01189", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01189-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01189.py -- tests/files/web/generated/M21-GAP-01189-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01189", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01189", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01190", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01190-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01190.py -- tests/files/web/generated/M21-GAP-01190-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01190", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01190", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01191", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01191-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01191.py -- tests/files/web/generated/M21-GAP-01191-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01191", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01191", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01192", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01192-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01192.py -- tests/files/web/generated/M21-GAP-01192-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01192", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01192", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01193", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01193-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01193.py -- tests/files/web/generated/M21-GAP-01193-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01193", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01193", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01194", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01194-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01194.py -- tests/files/web/generated/M21-GAP-01194-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01194", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01194", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01195", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01195-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01195.py -- tests/files/web/generated/M21-GAP-01195-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01195", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01195", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01196", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01196-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01196.py -- tests/files/web/generated/M21-GAP-01196-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01196", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01196", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01197", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01197-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01197.py -- tests/files/web/generated/M21-GAP-01197-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01197", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01197", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01198", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01198-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01198.py -- tests/files/web/generated/M21-GAP-01198-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01198", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01198", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01199", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01199-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01199.py -- tests/files/web/generated/M21-GAP-01199-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01199", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01199", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01200", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01200-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01200.py -- tests/files/web/generated/M21-GAP-01200-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01200", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01200", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01201", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01201-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01201.py -- tests/files/web/generated/M21-GAP-01201-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01201", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01201", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01202", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01202-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-50.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01202.py -- tests/files/web/generated/M21-GAP-01202-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-50.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01202", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01202", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01203", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01203-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-51.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01203.py -- tests/files/web/generated/M21-GAP-01203-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-51.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01203", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01203", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01204", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:52", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01204-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-52.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01204.py -- tests/files/web/generated/M21-GAP-01204-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-52.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01204", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01204", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01205", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:53", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01205-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-53.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01205.py -- tests/files/web/generated/M21-GAP-01205-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-53.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01205", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01205", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01206", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:54", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01206-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-54.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01206.py -- tests/files/web/generated/M21-GAP-01206-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-54.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01206", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01206", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01207", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:55", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01207-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-55.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01207.py -- tests/files/web/generated/M21-GAP-01207-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-55.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01207", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01207", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01208", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:56", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01208-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-56.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01208.py -- tests/files/web/generated/M21-GAP-01208-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-56.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01208", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01208", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01209", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01209-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01209.py -- tests/files/web/generated/M21-GAP-01209-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01209", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01209", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01210", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01210-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01210.py -- tests/files/web/generated/M21-GAP-01210-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01210", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01210", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01211", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01211-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01211.py -- tests/files/web/generated/M21-GAP-01211-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01211", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01211", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01212", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01212-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01212.py -- tests/files/web/generated/M21-GAP-01212-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01212", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01212", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01213", + "gapId": "keymap-item:Grease Pencil Fill Tool:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01213-keymap-item-Grease-Pencil-Fill-Tool-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01213.py -- tests/files/web/generated/M21-GAP-01213-keymap-item-Grease-Pencil-Fill-Tool-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01213", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01213", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01214", + "gapId": "keymap-item:Grease Pencil Fill Tool:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01214-keymap-item-Grease-Pencil-Fill-Tool-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01214.py -- tests/files/web/generated/M21-GAP-01214-keymap-item-Grease-Pencil-Fill-Tool-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01214", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01214", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01215", + "gapId": "keymap-item:Grease Pencil Fill Tool:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01215-keymap-item-Grease-Pencil-Fill-Tool-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01215.py -- tests/files/web/generated/M21-GAP-01215-keymap-item-Grease-Pencil-Fill-Tool-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01215", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01215", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01216", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01216-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01216.py -- tests/files/web/generated/M21-GAP-01216-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01216", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01216", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01217", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01217-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01217.py -- tests/files/web/generated/M21-GAP-01217-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01217", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01217", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01218", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01218-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01218.py -- tests/files/web/generated/M21-GAP-01218-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01218", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01218", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01219", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01219-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01219.py -- tests/files/web/generated/M21-GAP-01219-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01219", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01219", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01220", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01220-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01220.py -- tests/files/web/generated/M21-GAP-01220-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01220", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01220", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01221", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01221-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01221.py -- tests/files/web/generated/M21-GAP-01221-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01221", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01221", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01222", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01222-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01222.py -- tests/files/web/generated/M21-GAP-01222-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01222", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01222", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01223", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01223-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01223.py -- tests/files/web/generated/M21-GAP-01223-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01223", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01223", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01224", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01224-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01224.py -- tests/files/web/generated/M21-GAP-01224-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01224", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01224", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01225", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01225-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01225.py -- tests/files/web/generated/M21-GAP-01225-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01225", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01225", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01226", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01226-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01226.py -- tests/files/web/generated/M21-GAP-01226-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01226", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01226", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01227", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01227-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01227.py -- tests/files/web/generated/M21-GAP-01227-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01227", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01227", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01228", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01228-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01228.py -- tests/files/web/generated/M21-GAP-01228-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01228", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01228", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01229", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01229-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01229.py -- tests/files/web/generated/M21-GAP-01229-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01229", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01229", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01230", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01230-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01230.py -- tests/files/web/generated/M21-GAP-01230-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01230", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01230", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01231", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01231-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01231.py -- tests/files/web/generated/M21-GAP-01231-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01231", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01231", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01232", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01232-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01232.py -- tests/files/web/generated/M21-GAP-01232-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01232", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01232", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01233", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01233-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01233.py -- tests/files/web/generated/M21-GAP-01233-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01233", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01233", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01234", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01234-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01234.py -- tests/files/web/generated/M21-GAP-01234-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01234", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01234", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01235", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01235-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01235.py -- tests/files/web/generated/M21-GAP-01235-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01235", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01235", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01236", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01236-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01236.py -- tests/files/web/generated/M21-GAP-01236-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01236", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01236", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01237", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01237-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01237.py -- tests/files/web/generated/M21-GAP-01237-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01237", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01237", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01238", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01238-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01238.py -- tests/files/web/generated/M21-GAP-01238-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01238", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01238", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01239", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01239-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01239.py -- tests/files/web/generated/M21-GAP-01239-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01239", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01239", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01240", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01240-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01240.py -- tests/files/web/generated/M21-GAP-01240-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01240", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01240", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01241", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01241-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01241.py -- tests/files/web/generated/M21-GAP-01241-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01241", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01241", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01242", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01242-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01242.py -- tests/files/web/generated/M21-GAP-01242-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01242", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01242", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01243", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01243-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01243.py -- tests/files/web/generated/M21-GAP-01243-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01243", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01243", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01244", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01244-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01244.py -- tests/files/web/generated/M21-GAP-01244-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01244", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01244", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01245", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01245-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01245.py -- tests/files/web/generated/M21-GAP-01245-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01245", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01245", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01246", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01246-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01246.py -- tests/files/web/generated/M21-GAP-01246-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01246", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01246", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01247", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01247-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01247.py -- tests/files/web/generated/M21-GAP-01247-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01247", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01247", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01248", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01248-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01248.py -- tests/files/web/generated/M21-GAP-01248-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01248", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01248", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01249", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01249-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01249.py -- tests/files/web/generated/M21-GAP-01249-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01249", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01249", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01250", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01250-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01250.py -- tests/files/web/generated/M21-GAP-01250-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01250", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01250", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01251", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01251-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01251.py -- tests/files/web/generated/M21-GAP-01251-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01251", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01251", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01252", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01252-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01252.py -- tests/files/web/generated/M21-GAP-01252-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01252", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01252", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01253", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01253-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01253.py -- tests/files/web/generated/M21-GAP-01253-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01253", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01253", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01254", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01254-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01254.py -- tests/files/web/generated/M21-GAP-01254-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01254", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01254", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01255", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01255-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01255.py -- tests/files/web/generated/M21-GAP-01255-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01255", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01255", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01256", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01256-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01256.py -- tests/files/web/generated/M21-GAP-01256-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01256", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01256", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01257", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01257-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01257.py -- tests/files/web/generated/M21-GAP-01257-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01257", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01257", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01258", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01258-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01258.py -- tests/files/web/generated/M21-GAP-01258-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01258", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01258", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01259", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01259-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01259.py -- tests/files/web/generated/M21-GAP-01259-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01259", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01259", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01260", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01260-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01260.py -- tests/files/web/generated/M21-GAP-01260-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01260", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01260", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01261", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01261-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01261.py -- tests/files/web/generated/M21-GAP-01261-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01261", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01261", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01262", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01262-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01262.py -- tests/files/web/generated/M21-GAP-01262-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01262", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01262", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01263", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01263-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01263.py -- tests/files/web/generated/M21-GAP-01263-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01263", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01263", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01264", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01264-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01264.py -- tests/files/web/generated/M21-GAP-01264-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01264", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01264", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01265", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01265-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01265.py -- tests/files/web/generated/M21-GAP-01265-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01265", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01265", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01266", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01266-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01266.py -- tests/files/web/generated/M21-GAP-01266-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01266", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01266", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01267", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01267-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01267.py -- tests/files/web/generated/M21-GAP-01267-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01267", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01267", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01268", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01268-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01268.py -- tests/files/web/generated/M21-GAP-01268-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01268", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01268", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01269", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01269-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01269.py -- tests/files/web/generated/M21-GAP-01269-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01269", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01269", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01270", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01270-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01270.py -- tests/files/web/generated/M21-GAP-01270-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01270", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01270", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01271", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01271-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01271.py -- tests/files/web/generated/M21-GAP-01271-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01271", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01271", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01272", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01272-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01272.py -- tests/files/web/generated/M21-GAP-01272-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01272", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01272", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01273", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01273-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01273.py -- tests/files/web/generated/M21-GAP-01273-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01273", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01273", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01274", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01274-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01274.py -- tests/files/web/generated/M21-GAP-01274-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01274", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01274", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01275", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01275-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01275.py -- tests/files/web/generated/M21-GAP-01275-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01275", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01275", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01276", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01276-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01276.py -- tests/files/web/generated/M21-GAP-01276-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01276", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01276", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01277", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01277-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01277.py -- tests/files/web/generated/M21-GAP-01277-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01277", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01277", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01278", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01278-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01278.py -- tests/files/web/generated/M21-GAP-01278-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01278", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01278", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01279", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01279-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01279.py -- tests/files/web/generated/M21-GAP-01279-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01279", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01279", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01280", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01280-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01280.py -- tests/files/web/generated/M21-GAP-01280-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01280", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01280", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01281", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01281-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01281.py -- tests/files/web/generated/M21-GAP-01281-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01281", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01281", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01282", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01282-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01282.py -- tests/files/web/generated/M21-GAP-01282-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01282", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01282", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01283", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01283-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01283.py -- tests/files/web/generated/M21-GAP-01283-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01283", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01283", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01284", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01284-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01284.py -- tests/files/web/generated/M21-GAP-01284-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01284", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01284", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01285", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01285-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01285.py -- tests/files/web/generated/M21-GAP-01285-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01285", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01285", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01286", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01286-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01286.py -- tests/files/web/generated/M21-GAP-01286-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01286", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01286", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01287", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01287-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01287.py -- tests/files/web/generated/M21-GAP-01287-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01287", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01287", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01288", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01288-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01288.py -- tests/files/web/generated/M21-GAP-01288-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01288", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01288", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01289", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01289-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01289.py -- tests/files/web/generated/M21-GAP-01289-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01289", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01289", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01290", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01290-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01290.py -- tests/files/web/generated/M21-GAP-01290-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01290", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01290", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01291", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01291-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01291.py -- tests/files/web/generated/M21-GAP-01291-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01291", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01291", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01292", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01292-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01292.py -- tests/files/web/generated/M21-GAP-01292-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01292", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01292", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01293", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01293-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01293.py -- tests/files/web/generated/M21-GAP-01293-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01293", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01293", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01294", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01294-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01294.py -- tests/files/web/generated/M21-GAP-01294-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01294", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01294", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01295", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01295-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01295.py -- tests/files/web/generated/M21-GAP-01295-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01295", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01295", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01296", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01296-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01296.py -- tests/files/web/generated/M21-GAP-01296-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01296", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01296", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01297", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01297-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01297.py -- tests/files/web/generated/M21-GAP-01297-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01297", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01297", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01298", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01298-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01298.py -- tests/files/web/generated/M21-GAP-01298-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01298", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01298", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01299", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01299-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01299.py -- tests/files/web/generated/M21-GAP-01299-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01299", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01299", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01300", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01300-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01300.py -- tests/files/web/generated/M21-GAP-01300-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01300", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01300", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01301", + "gapId": "keymap-item:Grease Pencil:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01301-keymap-item-Grease-Pencil-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01301.py -- tests/files/web/generated/M21-GAP-01301-keymap-item-Grease-Pencil-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01301", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01301", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01302", + "gapId": "keymap-item:Grease Pencil:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01302-keymap-item-Grease-Pencil-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01302.py -- tests/files/web/generated/M21-GAP-01302-keymap-item-Grease-Pencil-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01302", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01302", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01303", + "gapId": "keymap-item:Grease Pencil:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01303-keymap-item-Grease-Pencil-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01303.py -- tests/files/web/generated/M21-GAP-01303-keymap-item-Grease-Pencil-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01303", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01303", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01304", + "gapId": "keymap-item:Grease Pencil:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01304-keymap-item-Grease-Pencil-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01304.py -- tests/files/web/generated/M21-GAP-01304-keymap-item-Grease-Pencil-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01304", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01304", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01305", + "gapId": "keymap-item:Grease Pencil:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01305-keymap-item-Grease-Pencil-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01305.py -- tests/files/web/generated/M21-GAP-01305-keymap-item-Grease-Pencil-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01305", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01305", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01306", + "gapId": "keymap-item:Image Editor Tool: Mask, Box:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01306-keymap-item-Image-Editor-Tool-Mask-Box-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01306.py -- tests/files/web/generated/M21-GAP-01306-keymap-item-Image-Editor-Tool-Mask-Box-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01306", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01306", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01307", + "gapId": "keymap-item:Image Editor Tool: Mask, Circle:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01307-keymap-item-Image-Editor-Tool-Mask-Circle-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01307.py -- tests/files/web/generated/M21-GAP-01307-keymap-item-Image-Editor-Tool-Mask-Circle-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01307", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01307", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01308", + "gapId": "keymap-item:Image Editor Tool: Mask, Cursor:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01308-keymap-item-Image-Editor-Tool-Mask-Cursor-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01308.py -- tests/files/web/generated/M21-GAP-01308-keymap-item-Image-Editor-Tool-Mask-Cursor-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01308", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01308", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01309", + "gapId": "keymap-item:Image Editor Tool: Mask, Cursor:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01309-keymap-item-Image-Editor-Tool-Mask-Cursor-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01309.py -- tests/files/web/generated/M21-GAP-01309-keymap-item-Image-Editor-Tool-Mask-Cursor-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01309", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01309", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01310", + "gapId": "keymap-item:Image Editor Tool: Mask, Move:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01310-keymap-item-Image-Editor-Tool-Mask-Move-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01310.py -- tests/files/web/generated/M21-GAP-01310-keymap-item-Image-Editor-Tool-Mask-Move-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01310", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01310", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01311", + "gapId": "keymap-item:Image Editor Tool: Mask, Rotate:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01311-keymap-item-Image-Editor-Tool-Mask-Rotate-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01311.py -- tests/files/web/generated/M21-GAP-01311-keymap-item-Image-Editor-Tool-Mask-Rotate-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01311", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01311", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01312", + "gapId": "keymap-item:Image Editor Tool: Mask, Scale:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01312-keymap-item-Image-Editor-Tool-Mask-Scale-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01312.py -- tests/files/web/generated/M21-GAP-01312-keymap-item-Image-Editor-Tool-Mask-Scale-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01312", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01312", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01313", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Box (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01313-keymap-item-Image-Editor-Tool-Mask-Select-Box-fallback-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01313.py -- tests/files/web/generated/M21-GAP-01313-keymap-item-Image-Editor-Tool-Mask-Select-Box-fallback-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01313", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01313", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01314", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Box (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01314-keymap-item-Image-Editor-Tool-Mask-Select-Box-fallback-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01314.py -- tests/files/web/generated/M21-GAP-01314-keymap-item-Image-Editor-Tool-Mask-Select-Box-fallback-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01314", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01314", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01315", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Box (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01315-keymap-item-Image-Editor-Tool-Mask-Select-Box-fallback-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01315.py -- tests/files/web/generated/M21-GAP-01315-keymap-item-Image-Editor-Tool-Mask-Select-Box-fallback-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01315", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01315", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01316", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Box:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01316-keymap-item-Image-Editor-Tool-Mask-Select-Box-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01316.py -- tests/files/web/generated/M21-GAP-01316-keymap-item-Image-Editor-Tool-Mask-Select-Box-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01316", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01316", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01317", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Box:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01317-keymap-item-Image-Editor-Tool-Mask-Select-Box-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01317.py -- tests/files/web/generated/M21-GAP-01317-keymap-item-Image-Editor-Tool-Mask-Select-Box-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01317", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01317", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01318", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Box:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01318-keymap-item-Image-Editor-Tool-Mask-Select-Box-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01318.py -- tests/files/web/generated/M21-GAP-01318-keymap-item-Image-Editor-Tool-Mask-Select-Box-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01318", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01318", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01319", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Circle (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01319-keymap-item-Image-Editor-Tool-Mask-Select-Circle-fallback-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01319.py -- tests/files/web/generated/M21-GAP-01319-keymap-item-Image-Editor-Tool-Mask-Select-Circle-fallback-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01319", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01319", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01320", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Circle (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01320-keymap-item-Image-Editor-Tool-Mask-Select-Circle-fallback-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01320.py -- tests/files/web/generated/M21-GAP-01320-keymap-item-Image-Editor-Tool-Mask-Select-Circle-fallback-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01320", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01320", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01321", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Circle (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01321-keymap-item-Image-Editor-Tool-Mask-Select-Circle-fallback-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01321.py -- tests/files/web/generated/M21-GAP-01321-keymap-item-Image-Editor-Tool-Mask-Select-Circle-fallback-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01321", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01321", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01322", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Circle:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01322-keymap-item-Image-Editor-Tool-Mask-Select-Circle-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01322.py -- tests/files/web/generated/M21-GAP-01322-keymap-item-Image-Editor-Tool-Mask-Select-Circle-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01322", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01322", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01323", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Circle:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01323-keymap-item-Image-Editor-Tool-Mask-Select-Circle-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01323.py -- tests/files/web/generated/M21-GAP-01323-keymap-item-Image-Editor-Tool-Mask-Select-Circle-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01323", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01323", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01324", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Circle:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01324-keymap-item-Image-Editor-Tool-Mask-Select-Circle-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01324.py -- tests/files/web/generated/M21-GAP-01324-keymap-item-Image-Editor-Tool-Mask-Select-Circle-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01324", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01324", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01325", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Lasso (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01325-keymap-item-Image-Editor-Tool-Mask-Select-Lasso-fallback-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01325.py -- tests/files/web/generated/M21-GAP-01325-keymap-item-Image-Editor-Tool-Mask-Select-Lasso-fallback-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01325", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01325", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01326", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Lasso (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01326-keymap-item-Image-Editor-Tool-Mask-Select-Lasso-fallback-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01326.py -- tests/files/web/generated/M21-GAP-01326-keymap-item-Image-Editor-Tool-Mask-Select-Lasso-fallback-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01326", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01326", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01327", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Lasso (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01327-keymap-item-Image-Editor-Tool-Mask-Select-Lasso-fallback-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01327.py -- tests/files/web/generated/M21-GAP-01327-keymap-item-Image-Editor-Tool-Mask-Select-Lasso-fallback-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01327", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01327", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01328", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Lasso:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01328-keymap-item-Image-Editor-Tool-Mask-Select-Lasso-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01328.py -- tests/files/web/generated/M21-GAP-01328-keymap-item-Image-Editor-Tool-Mask-Select-Lasso-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01328", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01328", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01329", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Lasso:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01329-keymap-item-Image-Editor-Tool-Mask-Select-Lasso-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01329.py -- tests/files/web/generated/M21-GAP-01329-keymap-item-Image-Editor-Tool-Mask-Select-Lasso-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01329", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01329", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01330", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Lasso:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01330-keymap-item-Image-Editor-Tool-Mask-Select-Lasso-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01330.py -- tests/files/web/generated/M21-GAP-01330-keymap-item-Image-Editor-Tool-Mask-Select-Lasso-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01330", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01330", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01331", + "gapId": "keymap-item:Image Editor Tool: Mask, Transform:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01331-keymap-item-Image-Editor-Tool-Mask-Transform-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01331.py -- tests/files/web/generated/M21-GAP-01331-keymap-item-Image-Editor-Tool-Mask-Transform-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01331", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01331", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01332", + "gapId": "keymap-item:Image Editor Tool: Mask, Tweak (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01332-keymap-item-Image-Editor-Tool-Mask-Tweak-fallback-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01332.py -- tests/files/web/generated/M21-GAP-01332-keymap-item-Image-Editor-Tool-Mask-Tweak-fallback-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01332", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01332", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01333", + "gapId": "keymap-item:Image Editor Tool: Mask, Tweak (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01333-keymap-item-Image-Editor-Tool-Mask-Tweak-fallback-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01333.py -- tests/files/web/generated/M21-GAP-01333-keymap-item-Image-Editor-Tool-Mask-Tweak-fallback-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01333", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01333", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01334", + "gapId": "keymap-item:Image Editor Tool: Mask, Tweak (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01334-keymap-item-Image-Editor-Tool-Mask-Tweak-fallback-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01334.py -- tests/files/web/generated/M21-GAP-01334-keymap-item-Image-Editor-Tool-Mask-Tweak-fallback-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01334", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01334", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01335", + "gapId": "keymap-item:Image Editor Tool: Mask, Tweak:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01335-keymap-item-Image-Editor-Tool-Mask-Tweak-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01335.py -- tests/files/web/generated/M21-GAP-01335-keymap-item-Image-Editor-Tool-Mask-Tweak-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01335", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01335", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01336", + "gapId": "keymap-item:Image Editor Tool: Mask, Tweak:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01336-keymap-item-Image-Editor-Tool-Mask-Tweak-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01336.py -- tests/files/web/generated/M21-GAP-01336-keymap-item-Image-Editor-Tool-Mask-Tweak-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01336", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01336", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01337", + "gapId": "keymap-item:Image Editor Tool: Mask, Tweak:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01337-keymap-item-Image-Editor-Tool-Mask-Tweak-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01337.py -- tests/files/web/generated/M21-GAP-01337-keymap-item-Image-Editor-Tool-Mask-Tweak-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01337", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01337", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01338", + "gapId": "keymap-item:Image Editor Tool: Sample:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01338-keymap-item-Image-Editor-Tool-Sample-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01338.py -- tests/files/web/generated/M21-GAP-01338-keymap-item-Image-Editor-Tool-Sample-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01338", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01338", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01339", + "gapId": "keymap-item:Image Editor Tool: Uv, Cursor:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01339-keymap-item-Image-Editor-Tool-Uv-Cursor-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01339.py -- tests/files/web/generated/M21-GAP-01339-keymap-item-Image-Editor-Tool-Uv-Cursor-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01339", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01339", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01340", + "gapId": "keymap-item:Image Editor Tool: Uv, Cursor:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01340-keymap-item-Image-Editor-Tool-Uv-Cursor-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01340.py -- tests/files/web/generated/M21-GAP-01340-keymap-item-Image-Editor-Tool-Uv-Cursor-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01340", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01340", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01341", + "gapId": "keymap-item:Image Editor Tool: Uv, Grab:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01341-keymap-item-Image-Editor-Tool-Uv-Grab-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01341.py -- tests/files/web/generated/M21-GAP-01341-keymap-item-Image-Editor-Tool-Uv-Grab-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01341", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01341", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01342", + "gapId": "keymap-item:Image Editor Tool: Uv, Grab:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01342-keymap-item-Image-Editor-Tool-Uv-Grab-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01342.py -- tests/files/web/generated/M21-GAP-01342-keymap-item-Image-Editor-Tool-Uv-Grab-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01342", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01342", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01343", + "gapId": "keymap-item:Image Editor Tool: Uv, Grab:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01343-keymap-item-Image-Editor-Tool-Uv-Grab-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01343.py -- tests/files/web/generated/M21-GAP-01343-keymap-item-Image-Editor-Tool-Uv-Grab-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01343", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01343", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01344", + "gapId": "keymap-item:Image Editor Tool: Uv, Grab:IMAGE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01344-keymap-item-Image-Editor-Tool-Uv-Grab-IMAGE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01344.py -- tests/files/web/generated/M21-GAP-01344-keymap-item-Image-Editor-Tool-Uv-Grab-IMAGE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01344", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01344", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01345", + "gapId": "keymap-item:Image Editor Tool: Uv, Grab:IMAGE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01345-keymap-item-Image-Editor-Tool-Uv-Grab-IMAGE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01345.py -- tests/files/web/generated/M21-GAP-01345-keymap-item-Image-Editor-Tool-Uv-Grab-IMAGE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01345", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01345", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01346", + "gapId": "keymap-item:Image Editor Tool: Uv, Move:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01346-keymap-item-Image-Editor-Tool-Uv-Move-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01346.py -- tests/files/web/generated/M21-GAP-01346-keymap-item-Image-Editor-Tool-Uv-Move-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01346", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01346", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01347", + "gapId": "keymap-item:Image Editor Tool: Uv, Pinch:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01347-keymap-item-Image-Editor-Tool-Uv-Pinch-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01347.py -- tests/files/web/generated/M21-GAP-01347-keymap-item-Image-Editor-Tool-Uv-Pinch-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01347", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01347", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01348", + "gapId": "keymap-item:Image Editor Tool: Uv, Pinch:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01348-keymap-item-Image-Editor-Tool-Uv-Pinch-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01348.py -- tests/files/web/generated/M21-GAP-01348-keymap-item-Image-Editor-Tool-Uv-Pinch-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01348", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01348", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01349", + "gapId": "keymap-item:Image Editor Tool: Uv, Pinch:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01349-keymap-item-Image-Editor-Tool-Uv-Pinch-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01349.py -- tests/files/web/generated/M21-GAP-01349-keymap-item-Image-Editor-Tool-Uv-Pinch-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01349", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01349", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01350", + "gapId": "keymap-item:Image Editor Tool: Uv, Pinch:IMAGE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01350-keymap-item-Image-Editor-Tool-Uv-Pinch-IMAGE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01350.py -- tests/files/web/generated/M21-GAP-01350-keymap-item-Image-Editor-Tool-Uv-Pinch-IMAGE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01350", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01350", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01351", + "gapId": "keymap-item:Image Editor Tool: Uv, Pinch:IMAGE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01351-keymap-item-Image-Editor-Tool-Uv-Pinch-IMAGE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01351.py -- tests/files/web/generated/M21-GAP-01351-keymap-item-Image-Editor-Tool-Uv-Pinch-IMAGE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01351", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01351", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01352", + "gapId": "keymap-item:Image Editor Tool: Uv, Relax:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01352-keymap-item-Image-Editor-Tool-Uv-Relax-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01352.py -- tests/files/web/generated/M21-GAP-01352-keymap-item-Image-Editor-Tool-Uv-Relax-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01352", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01352", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01353", + "gapId": "keymap-item:Image Editor Tool: Uv, Relax:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01353-keymap-item-Image-Editor-Tool-Uv-Relax-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01353.py -- tests/files/web/generated/M21-GAP-01353-keymap-item-Image-Editor-Tool-Uv-Relax-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01353", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01353", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01354", + "gapId": "keymap-item:Image Editor Tool: Uv, Relax:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01354-keymap-item-Image-Editor-Tool-Uv-Relax-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01354.py -- tests/files/web/generated/M21-GAP-01354-keymap-item-Image-Editor-Tool-Uv-Relax-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01354", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01354", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01355", + "gapId": "keymap-item:Image Editor Tool: Uv, Relax:IMAGE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01355-keymap-item-Image-Editor-Tool-Uv-Relax-IMAGE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01355.py -- tests/files/web/generated/M21-GAP-01355-keymap-item-Image-Editor-Tool-Uv-Relax-IMAGE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01355", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01355", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01356", + "gapId": "keymap-item:Image Editor Tool: Uv, Relax:IMAGE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01356-keymap-item-Image-Editor-Tool-Uv-Relax-IMAGE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01356.py -- tests/files/web/generated/M21-GAP-01356-keymap-item-Image-Editor-Tool-Uv-Relax-IMAGE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01356", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01356", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01357", + "gapId": "keymap-item:Image Editor Tool: Uv, Rip Region:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01357-keymap-item-Image-Editor-Tool-Uv-Rip-Region-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01357.py -- tests/files/web/generated/M21-GAP-01357-keymap-item-Image-Editor-Tool-Uv-Rip-Region-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01357", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01357", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01358", + "gapId": "keymap-item:Image Editor Tool: Uv, Rotate:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01358-keymap-item-Image-Editor-Tool-Uv-Rotate-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01358.py -- tests/files/web/generated/M21-GAP-01358-keymap-item-Image-Editor-Tool-Uv-Rotate-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01358", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01358", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01359", + "gapId": "keymap-item:Image Editor Tool: Uv, Scale:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01359-keymap-item-Image-Editor-Tool-Uv-Scale-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01359.py -- tests/files/web/generated/M21-GAP-01359-keymap-item-Image-Editor-Tool-Uv-Scale-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01359", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01359", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01360", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Box (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01360-keymap-item-Image-Editor-Tool-Uv-Select-Box-fallback-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01360.py -- tests/files/web/generated/M21-GAP-01360-keymap-item-Image-Editor-Tool-Uv-Select-Box-fallback-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01360", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01360", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01361", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Box (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01361-keymap-item-Image-Editor-Tool-Uv-Select-Box-fallback-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01361.py -- tests/files/web/generated/M21-GAP-01361-keymap-item-Image-Editor-Tool-Uv-Select-Box-fallback-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01361", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01361", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01362", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Box (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01362-keymap-item-Image-Editor-Tool-Uv-Select-Box-fallback-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01362.py -- tests/files/web/generated/M21-GAP-01362-keymap-item-Image-Editor-Tool-Uv-Select-Box-fallback-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01362", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01362", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01363", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Box:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01363-keymap-item-Image-Editor-Tool-Uv-Select-Box-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01363.py -- tests/files/web/generated/M21-GAP-01363-keymap-item-Image-Editor-Tool-Uv-Select-Box-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01363", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01363", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01364", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Box:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01364-keymap-item-Image-Editor-Tool-Uv-Select-Box-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01364.py -- tests/files/web/generated/M21-GAP-01364-keymap-item-Image-Editor-Tool-Uv-Select-Box-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01364", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01364", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01365", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Box:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01365-keymap-item-Image-Editor-Tool-Uv-Select-Box-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01365.py -- tests/files/web/generated/M21-GAP-01365-keymap-item-Image-Editor-Tool-Uv-Select-Box-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01365", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01365", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01366", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Circle (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01366-keymap-item-Image-Editor-Tool-Uv-Select-Circle-fallback-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01366.py -- tests/files/web/generated/M21-GAP-01366-keymap-item-Image-Editor-Tool-Uv-Select-Circle-fallback-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01366", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01366", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01367", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Circle (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01367-keymap-item-Image-Editor-Tool-Uv-Select-Circle-fallback-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01367.py -- tests/files/web/generated/M21-GAP-01367-keymap-item-Image-Editor-Tool-Uv-Select-Circle-fallback-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01367", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01367", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01368", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Circle (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01368-keymap-item-Image-Editor-Tool-Uv-Select-Circle-fallback-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01368.py -- tests/files/web/generated/M21-GAP-01368-keymap-item-Image-Editor-Tool-Uv-Select-Circle-fallback-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01368", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01368", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01369", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Circle:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01369-keymap-item-Image-Editor-Tool-Uv-Select-Circle-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01369.py -- tests/files/web/generated/M21-GAP-01369-keymap-item-Image-Editor-Tool-Uv-Select-Circle-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01369", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01369", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01370", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Circle:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01370-keymap-item-Image-Editor-Tool-Uv-Select-Circle-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01370.py -- tests/files/web/generated/M21-GAP-01370-keymap-item-Image-Editor-Tool-Uv-Select-Circle-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01370", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01370", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01371", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Circle:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01371-keymap-item-Image-Editor-Tool-Uv-Select-Circle-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01371.py -- tests/files/web/generated/M21-GAP-01371-keymap-item-Image-Editor-Tool-Uv-Select-Circle-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01371", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01371", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01372", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Lasso (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01372-keymap-item-Image-Editor-Tool-Uv-Select-Lasso-fallback-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01372.py -- tests/files/web/generated/M21-GAP-01372-keymap-item-Image-Editor-Tool-Uv-Select-Lasso-fallback-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01372", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01372", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01373", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Lasso (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01373-keymap-item-Image-Editor-Tool-Uv-Select-Lasso-fallback-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01373.py -- tests/files/web/generated/M21-GAP-01373-keymap-item-Image-Editor-Tool-Uv-Select-Lasso-fallback-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01373", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01373", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01374", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Lasso (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01374-keymap-item-Image-Editor-Tool-Uv-Select-Lasso-fallback-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01374.py -- tests/files/web/generated/M21-GAP-01374-keymap-item-Image-Editor-Tool-Uv-Select-Lasso-fallback-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01374", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01374", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01375", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Lasso:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01375-keymap-item-Image-Editor-Tool-Uv-Select-Lasso-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01375.py -- tests/files/web/generated/M21-GAP-01375-keymap-item-Image-Editor-Tool-Uv-Select-Lasso-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01375", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01375", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01376", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Lasso:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01376-keymap-item-Image-Editor-Tool-Uv-Select-Lasso-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01376.py -- tests/files/web/generated/M21-GAP-01376-keymap-item-Image-Editor-Tool-Uv-Select-Lasso-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01376", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01376", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01377", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Lasso:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01377-keymap-item-Image-Editor-Tool-Uv-Select-Lasso-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01377.py -- tests/files/web/generated/M21-GAP-01377-keymap-item-Image-Editor-Tool-Uv-Select-Lasso-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01377", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01377", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01378", + "gapId": "keymap-item:Image Editor Tool: Uv, Tweak (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01378-keymap-item-Image-Editor-Tool-Uv-Tweak-fallback-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01378.py -- tests/files/web/generated/M21-GAP-01378-keymap-item-Image-Editor-Tool-Uv-Tweak-fallback-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01378", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01378", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01379", + "gapId": "keymap-item:Image Editor Tool: Uv, Tweak (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01379-keymap-item-Image-Editor-Tool-Uv-Tweak-fallback-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01379.py -- tests/files/web/generated/M21-GAP-01379-keymap-item-Image-Editor-Tool-Uv-Tweak-fallback-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01379", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01379", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01380", + "gapId": "keymap-item:Image Editor Tool: Uv, Tweak (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01380-keymap-item-Image-Editor-Tool-Uv-Tweak-fallback-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01380.py -- tests/files/web/generated/M21-GAP-01380-keymap-item-Image-Editor-Tool-Uv-Tweak-fallback-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01380", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01380", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01381", + "gapId": "keymap-item:Image Editor Tool: Uv, Tweak:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01381-keymap-item-Image-Editor-Tool-Uv-Tweak-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01381.py -- tests/files/web/generated/M21-GAP-01381-keymap-item-Image-Editor-Tool-Uv-Tweak-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01381", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01381", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01382", + "gapId": "keymap-item:Image Editor Tool: Uv, Tweak:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01382-keymap-item-Image-Editor-Tool-Uv-Tweak-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01382.py -- tests/files/web/generated/M21-GAP-01382-keymap-item-Image-Editor-Tool-Uv-Tweak-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01382", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01382", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01383", + "gapId": "keymap-item:Image Editor Tool: Uv, Tweak:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01383-keymap-item-Image-Editor-Tool-Uv-Tweak-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01383.py -- tests/files/web/generated/M21-GAP-01383-keymap-item-Image-Editor-Tool-Uv-Tweak-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01383", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01383", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01384", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01384-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01384.py -- tests/files/web/generated/M21-GAP-01384-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01384", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01384", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01385", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01385-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01385.py -- tests/files/web/generated/M21-GAP-01385-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01385", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01385", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01386", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01386-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01386.py -- tests/files/web/generated/M21-GAP-01386-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01386", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01386", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01387", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01387-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01387.py -- tests/files/web/generated/M21-GAP-01387-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01387", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01387", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01388", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01388-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01388.py -- tests/files/web/generated/M21-GAP-01388-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01388", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01388", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01389", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01389-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01389.py -- tests/files/web/generated/M21-GAP-01389-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01389", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01389", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01390", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01390-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01390.py -- tests/files/web/generated/M21-GAP-01390-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01390", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01390", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01391", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01391-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01391.py -- tests/files/web/generated/M21-GAP-01391-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01391", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01391", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01392", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01392-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01392.py -- tests/files/web/generated/M21-GAP-01392-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01392", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01392", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01393", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01393-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01393.py -- tests/files/web/generated/M21-GAP-01393-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01393", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01393", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01394", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01394-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01394.py -- tests/files/web/generated/M21-GAP-01394-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01394", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01394", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01395", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01395-keymap-item-Image-Paint-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01395.py -- tests/files/web/generated/M21-GAP-01395-keymap-item-Image-Paint-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01395", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01395", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01396", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01396-keymap-item-Image-Paint-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01396.py -- tests/files/web/generated/M21-GAP-01396-keymap-item-Image-Paint-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01396", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01396", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01397", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01397-keymap-item-Image-Paint-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01397.py -- tests/files/web/generated/M21-GAP-01397-keymap-item-Image-Paint-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01397", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01397", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01398", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01398-keymap-item-Image-Paint-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01398.py -- tests/files/web/generated/M21-GAP-01398-keymap-item-Image-Paint-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01398", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01398", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01399", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01399-keymap-item-Image-Paint-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01399.py -- tests/files/web/generated/M21-GAP-01399-keymap-item-Image-Paint-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01399", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01399", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01400", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01400-keymap-item-Image-Paint-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01400.py -- tests/files/web/generated/M21-GAP-01400-keymap-item-Image-Paint-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01400", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01400", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01401", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01401-keymap-item-Image-Paint-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01401.py -- tests/files/web/generated/M21-GAP-01401-keymap-item-Image-Paint-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01401", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01401", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01402", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01402-keymap-item-Image-Paint-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01402.py -- tests/files/web/generated/M21-GAP-01402-keymap-item-Image-Paint-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01402", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01402", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01403", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01403-keymap-item-Image-Paint-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01403.py -- tests/files/web/generated/M21-GAP-01403-keymap-item-Image-Paint-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01403", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01403", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01404", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01404-keymap-item-Image-Paint-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01404.py -- tests/files/web/generated/M21-GAP-01404-keymap-item-Image-Paint-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01404", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01404", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01405", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01405-keymap-item-Image-Paint-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01405.py -- tests/files/web/generated/M21-GAP-01405-keymap-item-Image-Paint-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01405", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01405", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01406", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01406-keymap-item-Image-Paint-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01406.py -- tests/files/web/generated/M21-GAP-01406-keymap-item-Image-Paint-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01406", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01406", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01407", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01407-keymap-item-Image-Paint-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01407.py -- tests/files/web/generated/M21-GAP-01407-keymap-item-Image-Paint-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01407", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01407", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01408", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01408-keymap-item-Image-Paint-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01408.py -- tests/files/web/generated/M21-GAP-01408-keymap-item-Image-Paint-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01408", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01408", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01409", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01409-keymap-item-Image-Paint-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01409.py -- tests/files/web/generated/M21-GAP-01409-keymap-item-Image-Paint-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01409", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01409", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01410", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01410-keymap-item-Image-Paint-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01410.py -- tests/files/web/generated/M21-GAP-01410-keymap-item-Image-Paint-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01410", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01410", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01411", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01411-keymap-item-Image-Paint-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01411.py -- tests/files/web/generated/M21-GAP-01411-keymap-item-Image-Paint-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01411", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01411", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01412", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01412-keymap-item-Image-Paint-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01412.py -- tests/files/web/generated/M21-GAP-01412-keymap-item-Image-Paint-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01412", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01412", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01413", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01413-keymap-item-Image-Paint-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01413.py -- tests/files/web/generated/M21-GAP-01413-keymap-item-Image-Paint-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01413", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01413", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01414", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01414-keymap-item-Image-Paint-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01414.py -- tests/files/web/generated/M21-GAP-01414-keymap-item-Image-Paint-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01414", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01414", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01415", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01415-keymap-item-Image-Paint-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01415.py -- tests/files/web/generated/M21-GAP-01415-keymap-item-Image-Paint-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01415", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01415", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01416", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01416-keymap-item-Image-Paint-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01416.py -- tests/files/web/generated/M21-GAP-01416-keymap-item-Image-Paint-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01416", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01416", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01417", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01417-keymap-item-Image-Paint-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01417.py -- tests/files/web/generated/M21-GAP-01417-keymap-item-Image-Paint-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01417", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01417", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01418", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01418-keymap-item-Image-Paint-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01418.py -- tests/files/web/generated/M21-GAP-01418-keymap-item-Image-Paint-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01418", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01418", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01419", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01419-keymap-item-Image-Paint-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01419.py -- tests/files/web/generated/M21-GAP-01419-keymap-item-Image-Paint-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01419", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01419", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01420", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01420-keymap-item-Image-Paint-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01420.py -- tests/files/web/generated/M21-GAP-01420-keymap-item-Image-Paint-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01420", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01420", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01421", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01421-keymap-item-Image-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01421.py -- tests/files/web/generated/M21-GAP-01421-keymap-item-Image-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01421", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01421", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01422", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01422-keymap-item-Image-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01422.py -- tests/files/web/generated/M21-GAP-01422-keymap-item-Image-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01422", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01422", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01423", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01423-keymap-item-Image-IMAGE_EDITOR-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01423.py -- tests/files/web/generated/M21-GAP-01423-keymap-item-Image-IMAGE_EDITOR-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01423", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01423", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01424", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01424-keymap-item-Image-IMAGE_EDITOR-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01424.py -- tests/files/web/generated/M21-GAP-01424-keymap-item-Image-IMAGE_EDITOR-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01424", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01424", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01425", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01425-keymap-item-Image-IMAGE_EDITOR-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01425.py -- tests/files/web/generated/M21-GAP-01425-keymap-item-Image-IMAGE_EDITOR-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01425", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01425", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01426", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01426-keymap-item-Image-IMAGE_EDITOR-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01426.py -- tests/files/web/generated/M21-GAP-01426-keymap-item-Image-IMAGE_EDITOR-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01426", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01426", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01427", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01427-keymap-item-Image-IMAGE_EDITOR-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01427.py -- tests/files/web/generated/M21-GAP-01427-keymap-item-Image-IMAGE_EDITOR-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01427", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01427", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01428", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01428-keymap-item-Image-IMAGE_EDITOR-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01428.py -- tests/files/web/generated/M21-GAP-01428-keymap-item-Image-IMAGE_EDITOR-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01428", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01428", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01429", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01429-keymap-item-Image-IMAGE_EDITOR-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01429.py -- tests/files/web/generated/M21-GAP-01429-keymap-item-Image-IMAGE_EDITOR-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01429", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01429", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01430", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01430-keymap-item-Image-IMAGE_EDITOR-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01430.py -- tests/files/web/generated/M21-GAP-01430-keymap-item-Image-IMAGE_EDITOR-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01430", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01430", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01431", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01431-keymap-item-Image-IMAGE_EDITOR-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01431.py -- tests/files/web/generated/M21-GAP-01431-keymap-item-Image-IMAGE_EDITOR-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01431", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01431", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01432", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01432-keymap-item-Image-IMAGE_EDITOR-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01432.py -- tests/files/web/generated/M21-GAP-01432-keymap-item-Image-IMAGE_EDITOR-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01432", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01432", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01433", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01433-keymap-item-Image-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01433.py -- tests/files/web/generated/M21-GAP-01433-keymap-item-Image-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01433", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01433", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01434", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01434-keymap-item-Image-IMAGE_EDITOR-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01434.py -- tests/files/web/generated/M21-GAP-01434-keymap-item-Image-IMAGE_EDITOR-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01434", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01434", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01435", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01435-keymap-item-Image-IMAGE_EDITOR-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01435.py -- tests/files/web/generated/M21-GAP-01435-keymap-item-Image-IMAGE_EDITOR-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01435", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01435", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01436", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01436-keymap-item-Image-IMAGE_EDITOR-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01436.py -- tests/files/web/generated/M21-GAP-01436-keymap-item-Image-IMAGE_EDITOR-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01436", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01436", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01437", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01437-keymap-item-Image-IMAGE_EDITOR-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01437.py -- tests/files/web/generated/M21-GAP-01437-keymap-item-Image-IMAGE_EDITOR-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01437", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01437", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01438", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01438-keymap-item-Image-IMAGE_EDITOR-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01438.py -- tests/files/web/generated/M21-GAP-01438-keymap-item-Image-IMAGE_EDITOR-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01438", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01438", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01439", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01439-keymap-item-Image-IMAGE_EDITOR-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01439.py -- tests/files/web/generated/M21-GAP-01439-keymap-item-Image-IMAGE_EDITOR-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01439", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01439", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01440", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01440-keymap-item-Image-IMAGE_EDITOR-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01440.py -- tests/files/web/generated/M21-GAP-01440-keymap-item-Image-IMAGE_EDITOR-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01440", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01440", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01441", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01441-keymap-item-Image-IMAGE_EDITOR-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01441.py -- tests/files/web/generated/M21-GAP-01441-keymap-item-Image-IMAGE_EDITOR-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01441", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01441", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01442", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01442-keymap-item-Image-IMAGE_EDITOR-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01442.py -- tests/files/web/generated/M21-GAP-01442-keymap-item-Image-IMAGE_EDITOR-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01442", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01442", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01443", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01443-keymap-item-Image-IMAGE_EDITOR-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01443.py -- tests/files/web/generated/M21-GAP-01443-keymap-item-Image-IMAGE_EDITOR-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01443", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01443", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01444", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01444-keymap-item-Image-IMAGE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01444.py -- tests/files/web/generated/M21-GAP-01444-keymap-item-Image-IMAGE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01444", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01444", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01445", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01445-keymap-item-Image-IMAGE_EDITOR-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01445.py -- tests/files/web/generated/M21-GAP-01445-keymap-item-Image-IMAGE_EDITOR-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01445", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01445", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01446", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01446-keymap-item-Image-IMAGE_EDITOR-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01446.py -- tests/files/web/generated/M21-GAP-01446-keymap-item-Image-IMAGE_EDITOR-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01446", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01446", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01447", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01447-keymap-item-Image-IMAGE_EDITOR-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01447.py -- tests/files/web/generated/M21-GAP-01447-keymap-item-Image-IMAGE_EDITOR-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01447", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01447", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01448", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01448-keymap-item-Image-IMAGE_EDITOR-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01448.py -- tests/files/web/generated/M21-GAP-01448-keymap-item-Image-IMAGE_EDITOR-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01448", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01448", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01449", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01449-keymap-item-Image-IMAGE_EDITOR-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01449.py -- tests/files/web/generated/M21-GAP-01449-keymap-item-Image-IMAGE_EDITOR-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01449", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01449", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01450", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01450-keymap-item-Image-IMAGE_EDITOR-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01450.py -- tests/files/web/generated/M21-GAP-01450-keymap-item-Image-IMAGE_EDITOR-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01450", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01450", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01451", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01451-keymap-item-Image-IMAGE_EDITOR-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01451.py -- tests/files/web/generated/M21-GAP-01451-keymap-item-Image-IMAGE_EDITOR-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01451", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01451", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01452", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01452-keymap-item-Image-IMAGE_EDITOR-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01452.py -- tests/files/web/generated/M21-GAP-01452-keymap-item-Image-IMAGE_EDITOR-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01452", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01452", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01453", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01453-keymap-item-Image-IMAGE_EDITOR-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01453.py -- tests/files/web/generated/M21-GAP-01453-keymap-item-Image-IMAGE_EDITOR-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01453", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01453", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01454", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01454-keymap-item-Image-IMAGE_EDITOR-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01454.py -- tests/files/web/generated/M21-GAP-01454-keymap-item-Image-IMAGE_EDITOR-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01454", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01454", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01455", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01455-keymap-item-Image-IMAGE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01455.py -- tests/files/web/generated/M21-GAP-01455-keymap-item-Image-IMAGE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01455", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01455", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01456", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01456-keymap-item-Image-IMAGE_EDITOR-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01456.py -- tests/files/web/generated/M21-GAP-01456-keymap-item-Image-IMAGE_EDITOR-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01456", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01456", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01457", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01457-keymap-item-Image-IMAGE_EDITOR-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01457.py -- tests/files/web/generated/M21-GAP-01457-keymap-item-Image-IMAGE_EDITOR-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01457", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01457", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01458", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01458-keymap-item-Image-IMAGE_EDITOR-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01458.py -- tests/files/web/generated/M21-GAP-01458-keymap-item-Image-IMAGE_EDITOR-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01458", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01458", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01459", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01459-keymap-item-Image-IMAGE_EDITOR-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01459.py -- tests/files/web/generated/M21-GAP-01459-keymap-item-Image-IMAGE_EDITOR-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01459", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01459", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01460", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01460-keymap-item-Image-IMAGE_EDITOR-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01460.py -- tests/files/web/generated/M21-GAP-01460-keymap-item-Image-IMAGE_EDITOR-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01460", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01460", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01461", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01461-keymap-item-Image-IMAGE_EDITOR-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01461.py -- tests/files/web/generated/M21-GAP-01461-keymap-item-Image-IMAGE_EDITOR-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01461", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01461", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01462", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01462-keymap-item-Image-IMAGE_EDITOR-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01462.py -- tests/files/web/generated/M21-GAP-01462-keymap-item-Image-IMAGE_EDITOR-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01462", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01462", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01463", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01463-keymap-item-Image-IMAGE_EDITOR-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01463.py -- tests/files/web/generated/M21-GAP-01463-keymap-item-Image-IMAGE_EDITOR-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01463", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01463", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01464", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01464-keymap-item-Image-IMAGE_EDITOR-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01464.py -- tests/files/web/generated/M21-GAP-01464-keymap-item-Image-IMAGE_EDITOR-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01464", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01464", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01465", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01465-keymap-item-Image-IMAGE_EDITOR-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01465.py -- tests/files/web/generated/M21-GAP-01465-keymap-item-Image-IMAGE_EDITOR-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01465", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01465", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01466", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01466-keymap-item-Image-IMAGE_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01466.py -- tests/files/web/generated/M21-GAP-01466-keymap-item-Image-IMAGE_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01466", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01466", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01467", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01467-keymap-item-Image-IMAGE_EDITOR-WINDOW-50.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01467.py -- tests/files/web/generated/M21-GAP-01467-keymap-item-Image-IMAGE_EDITOR-WINDOW-50.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01467", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01467", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01468", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01468-keymap-item-Image-IMAGE_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01468.py -- tests/files/web/generated/M21-GAP-01468-keymap-item-Image-IMAGE_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01468", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01468", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01469", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01469-keymap-item-Image-IMAGE_EDITOR-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01469.py -- tests/files/web/generated/M21-GAP-01469-keymap-item-Image-IMAGE_EDITOR-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01469", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01469", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01470", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01470-keymap-item-Image-IMAGE_EDITOR-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01470.py -- tests/files/web/generated/M21-GAP-01470-keymap-item-Image-IMAGE_EDITOR-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01470", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01470", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01471", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01471-keymap-item-Image-IMAGE_EDITOR-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01471.py -- tests/files/web/generated/M21-GAP-01471-keymap-item-Image-IMAGE_EDITOR-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01471", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01471", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01472", + "gapId": "keymap-item:Info:INFO:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01472-keymap-item-Info-INFO-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01472.py -- tests/files/web/generated/M21-GAP-01472-keymap-item-Info-INFO-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01472", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01472", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01473", + "gapId": "keymap-item:Info:INFO:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01473-keymap-item-Info-INFO-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01473.py -- tests/files/web/generated/M21-GAP-01473-keymap-item-Info-INFO-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01473", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01473", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01474", + "gapId": "keymap-item:Info:INFO:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01474-keymap-item-Info-INFO-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01474.py -- tests/files/web/generated/M21-GAP-01474-keymap-item-Info-INFO-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01474", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01474", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01475", + "gapId": "keymap-item:Info:INFO:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01475-keymap-item-Info-INFO-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01475.py -- tests/files/web/generated/M21-GAP-01475-keymap-item-Info-INFO-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01475", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01475", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01476", + "gapId": "keymap-item:Info:INFO:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01476-keymap-item-Info-INFO-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01476.py -- tests/files/web/generated/M21-GAP-01476-keymap-item-Info-INFO-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01476", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01476", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01477", + "gapId": "keymap-item:Info:INFO:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01477-keymap-item-Info-INFO-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01477.py -- tests/files/web/generated/M21-GAP-01477-keymap-item-Info-INFO-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01477", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01477", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01478", + "gapId": "keymap-item:Info:INFO:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01478-keymap-item-Info-INFO-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01478.py -- tests/files/web/generated/M21-GAP-01478-keymap-item-Info-INFO-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01478", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01478", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01479", + "gapId": "keymap-item:Info:INFO:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01479-keymap-item-Info-INFO-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01479.py -- tests/files/web/generated/M21-GAP-01479-keymap-item-Info-INFO-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01479", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01479", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01480", + "gapId": "keymap-item:Info:INFO:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01480-keymap-item-Info-INFO-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01480.py -- tests/files/web/generated/M21-GAP-01480-keymap-item-Info-INFO-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01480", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01480", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01481", + "gapId": "keymap-item:Info:INFO:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01481-keymap-item-Info-INFO-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01481.py -- tests/files/web/generated/M21-GAP-01481-keymap-item-Info-INFO-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01481", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01481", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01482", + "gapId": "keymap-item:Info:INFO:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01482-keymap-item-Info-INFO-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01482.py -- tests/files/web/generated/M21-GAP-01482-keymap-item-Info-INFO-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01482", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01482", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01483", + "gapId": "keymap-item:Info:INFO:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01483-keymap-item-Info-INFO-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01483.py -- tests/files/web/generated/M21-GAP-01483-keymap-item-Info-INFO-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01483", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01483", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01484", + "gapId": "keymap-item:Info:INFO:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01484-keymap-item-Info-INFO-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01484.py -- tests/files/web/generated/M21-GAP-01484-keymap-item-Info-INFO-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01484", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01484", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01485", + "gapId": "keymap-item:Info:INFO:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01485-keymap-item-Info-INFO-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01485.py -- tests/files/web/generated/M21-GAP-01485-keymap-item-Info-INFO-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01485", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01485", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01486", + "gapId": "keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01486-keymap-item-Interpolate-Tool-Modal-Map-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01486.py -- tests/files/web/generated/M21-GAP-01486-keymap-item-Interpolate-Tool-Modal-Map-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01486", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01486", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01487", + "gapId": "keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01487-keymap-item-Interpolate-Tool-Modal-Map-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01487.py -- tests/files/web/generated/M21-GAP-01487-keymap-item-Interpolate-Tool-Modal-Map-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01487", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01487", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01488", + "gapId": "keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01488-keymap-item-Interpolate-Tool-Modal-Map-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01488.py -- tests/files/web/generated/M21-GAP-01488-keymap-item-Interpolate-Tool-Modal-Map-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01488", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01488", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01489", + "gapId": "keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01489-keymap-item-Interpolate-Tool-Modal-Map-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01489.py -- tests/files/web/generated/M21-GAP-01489-keymap-item-Interpolate-Tool-Modal-Map-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01489", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01489", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01490", + "gapId": "keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01490-keymap-item-Interpolate-Tool-Modal-Map-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01490.py -- tests/files/web/generated/M21-GAP-01490-keymap-item-Interpolate-Tool-Modal-Map-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01490", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01490", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01491", + "gapId": "keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01491-keymap-item-Interpolate-Tool-Modal-Map-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01491.py -- tests/files/web/generated/M21-GAP-01491-keymap-item-Interpolate-Tool-Modal-Map-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01491", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01491", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01492", + "gapId": "keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01492-keymap-item-Interpolate-Tool-Modal-Map-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01492.py -- tests/files/web/generated/M21-GAP-01492-keymap-item-Interpolate-Tool-Modal-Map-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01492", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01492", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01493", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01493-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01493.py -- tests/files/web/generated/M21-GAP-01493-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01493", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01493", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01494", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01494-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01494.py -- tests/files/web/generated/M21-GAP-01494-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01494", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01494", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01495", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01495-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01495.py -- tests/files/web/generated/M21-GAP-01495-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01495", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01495", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01496", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01496-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01496.py -- tests/files/web/generated/M21-GAP-01496-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01496", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01496", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01497", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01497-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01497.py -- tests/files/web/generated/M21-GAP-01497-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01497", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01497", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01498", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01498-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01498.py -- tests/files/web/generated/M21-GAP-01498-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01498", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01498", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01499", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01499-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01499.py -- tests/files/web/generated/M21-GAP-01499-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01499", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01499", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01500", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01500-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01500.py -- tests/files/web/generated/M21-GAP-01500-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01500", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01500", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01501", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01501-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01501.py -- tests/files/web/generated/M21-GAP-01501-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01501", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01501", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01502", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01502-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01502.py -- tests/files/web/generated/M21-GAP-01502-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01502", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01502", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01503", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01503-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01503.py -- tests/files/web/generated/M21-GAP-01503-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01503", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01503", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01504", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01504-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01504.py -- tests/files/web/generated/M21-GAP-01504-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01504", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01504", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01505", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01505-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01505.py -- tests/files/web/generated/M21-GAP-01505-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01505", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01505", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01506", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01506-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01506.py -- tests/files/web/generated/M21-GAP-01506-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01506", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01506", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01507", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01507-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01507.py -- tests/files/web/generated/M21-GAP-01507-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01507", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01507", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01508", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01508-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01508.py -- tests/files/web/generated/M21-GAP-01508-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01508", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01508", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01509", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01509-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01509.py -- tests/files/web/generated/M21-GAP-01509-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01509", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01509", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01510", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01510-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01510.py -- tests/files/web/generated/M21-GAP-01510-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01510", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01510", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01511", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01511-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01511.py -- tests/files/web/generated/M21-GAP-01511-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01511", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01511", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01512", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01512-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01512.py -- tests/files/web/generated/M21-GAP-01512-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01512", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01512", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01513", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01513-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01513.py -- tests/files/web/generated/M21-GAP-01513-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01513", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01513", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01514", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01514-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01514.py -- tests/files/web/generated/M21-GAP-01514-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01514", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01514", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01515", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01515-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01515.py -- tests/files/web/generated/M21-GAP-01515-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01515", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01515", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01516", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01516-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01516.py -- tests/files/web/generated/M21-GAP-01516-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01516", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01516", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01517", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01517-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01517.py -- tests/files/web/generated/M21-GAP-01517-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01517", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01517", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01518", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01518-keymap-item-Lattice-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01518.py -- tests/files/web/generated/M21-GAP-01518-keymap-item-Lattice-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01518", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01518", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01519", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01519-keymap-item-Lattice-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01519.py -- tests/files/web/generated/M21-GAP-01519-keymap-item-Lattice-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01519", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01519", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01520", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01520-keymap-item-Lattice-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01520.py -- tests/files/web/generated/M21-GAP-01520-keymap-item-Lattice-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01520", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01520", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01521", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01521-keymap-item-Lattice-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01521.py -- tests/files/web/generated/M21-GAP-01521-keymap-item-Lattice-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01521", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01521", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01522", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01522-keymap-item-Lattice-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01522.py -- tests/files/web/generated/M21-GAP-01522-keymap-item-Lattice-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01522", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01522", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01523", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01523-keymap-item-Lattice-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01523.py -- tests/files/web/generated/M21-GAP-01523-keymap-item-Lattice-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01523", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01523", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01524", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01524-keymap-item-Lattice-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01524.py -- tests/files/web/generated/M21-GAP-01524-keymap-item-Lattice-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01524", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01524", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01525", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01525-keymap-item-Lattice-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01525.py -- tests/files/web/generated/M21-GAP-01525-keymap-item-Lattice-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01525", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01525", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01526", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01526-keymap-item-Lattice-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01526.py -- tests/files/web/generated/M21-GAP-01526-keymap-item-Lattice-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01526", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01526", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01527", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01527-keymap-item-Lattice-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01527.py -- tests/files/web/generated/M21-GAP-01527-keymap-item-Lattice-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01527", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01527", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01528", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01528-keymap-item-Lattice-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01528.py -- tests/files/web/generated/M21-GAP-01528-keymap-item-Lattice-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01528", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01528", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01529", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01529-keymap-item-Lattice-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01529.py -- tests/files/web/generated/M21-GAP-01529-keymap-item-Lattice-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01529", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01529", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01530", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01530-keymap-item-Lattice-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01530.py -- tests/files/web/generated/M21-GAP-01530-keymap-item-Lattice-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01530", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01530", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01531", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01531-keymap-item-Lattice-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01531.py -- tests/files/web/generated/M21-GAP-01531-keymap-item-Lattice-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01531", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01531", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01532", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01532-keymap-item-Lattice-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01532.py -- tests/files/web/generated/M21-GAP-01532-keymap-item-Lattice-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01532", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01532", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01533", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01533-keymap-item-Lattice-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01533.py -- tests/files/web/generated/M21-GAP-01533-keymap-item-Lattice-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01533", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01533", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01534", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01534-keymap-item-Lattice-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01534.py -- tests/files/web/generated/M21-GAP-01534-keymap-item-Lattice-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01534", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01534", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01535", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01535-keymap-item-Lattice-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01535.py -- tests/files/web/generated/M21-GAP-01535-keymap-item-Lattice-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01535", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01535", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01536", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01536-keymap-item-Lattice-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01536.py -- tests/files/web/generated/M21-GAP-01536-keymap-item-Lattice-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01536", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01536", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01537", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01537-keymap-item-Lattice-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01537.py -- tests/files/web/generated/M21-GAP-01537-keymap-item-Lattice-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01537", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01537", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01538", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01538-keymap-item-Lattice-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01538.py -- tests/files/web/generated/M21-GAP-01538-keymap-item-Lattice-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01538", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01538", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01539", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01539-keymap-item-Markers-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01539.py -- tests/files/web/generated/M21-GAP-01539-keymap-item-Markers-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01539", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01539", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01540", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01540-keymap-item-Markers-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01540.py -- tests/files/web/generated/M21-GAP-01540-keymap-item-Markers-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01540", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01540", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01541", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01541-keymap-item-Markers-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01541.py -- tests/files/web/generated/M21-GAP-01541-keymap-item-Markers-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01541", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01541", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01542", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01542-keymap-item-Markers-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01542.py -- tests/files/web/generated/M21-GAP-01542-keymap-item-Markers-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01542", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01542", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01543", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01543-keymap-item-Markers-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01543.py -- tests/files/web/generated/M21-GAP-01543-keymap-item-Markers-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01543", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01543", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01544", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01544-keymap-item-Markers-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01544.py -- tests/files/web/generated/M21-GAP-01544-keymap-item-Markers-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01544", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01544", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01545", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01545-keymap-item-Markers-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01545.py -- tests/files/web/generated/M21-GAP-01545-keymap-item-Markers-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01545", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01545", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01546", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01546-keymap-item-Markers-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01546.py -- tests/files/web/generated/M21-GAP-01546-keymap-item-Markers-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01546", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01546", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01547", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01547-keymap-item-Markers-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01547.py -- tests/files/web/generated/M21-GAP-01547-keymap-item-Markers-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01547", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01547", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01548", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01548-keymap-item-Markers-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01548.py -- tests/files/web/generated/M21-GAP-01548-keymap-item-Markers-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01548", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01548", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01549", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01549-keymap-item-Markers-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01549.py -- tests/files/web/generated/M21-GAP-01549-keymap-item-Markers-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01549", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01549", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01550", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01550-keymap-item-Markers-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01550.py -- tests/files/web/generated/M21-GAP-01550-keymap-item-Markers-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01550", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01550", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01551", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01551-keymap-item-Markers-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01551.py -- tests/files/web/generated/M21-GAP-01551-keymap-item-Markers-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01551", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01551", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01552", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01552-keymap-item-Markers-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01552.py -- tests/files/web/generated/M21-GAP-01552-keymap-item-Markers-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01552", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01552", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01553", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01553-keymap-item-Markers-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01553.py -- tests/files/web/generated/M21-GAP-01553-keymap-item-Markers-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01553", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01553", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01554", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01554-keymap-item-Markers-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01554.py -- tests/files/web/generated/M21-GAP-01554-keymap-item-Markers-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01554", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01554", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01555", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01555-keymap-item-Markers-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01555.py -- tests/files/web/generated/M21-GAP-01555-keymap-item-Markers-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01555", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01555", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01556", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01556-keymap-item-Markers-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01556.py -- tests/files/web/generated/M21-GAP-01556-keymap-item-Markers-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01556", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01556", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01557", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01557-keymap-item-Markers-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01557.py -- tests/files/web/generated/M21-GAP-01557-keymap-item-Markers-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01557", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01557", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01558", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01558-keymap-item-Markers-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01558.py -- tests/files/web/generated/M21-GAP-01558-keymap-item-Markers-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01558", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01558", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01559", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01559-keymap-item-Markers-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01559.py -- tests/files/web/generated/M21-GAP-01559-keymap-item-Markers-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01559", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01559", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01560", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01560-keymap-item-Markers-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01560.py -- tests/files/web/generated/M21-GAP-01560-keymap-item-Markers-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01560", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01560", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01561", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01561-keymap-item-Markers-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01561.py -- tests/files/web/generated/M21-GAP-01561-keymap-item-Markers-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01561", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01561", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01562", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01562-keymap-item-Markers-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01562.py -- tests/files/web/generated/M21-GAP-01562-keymap-item-Markers-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01562", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01562", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01563", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01563-keymap-item-Markers-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01563.py -- tests/files/web/generated/M21-GAP-01563-keymap-item-Markers-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01563", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01563", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01564", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01564-keymap-item-Mask-Editing-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01564.py -- tests/files/web/generated/M21-GAP-01564-keymap-item-Mask-Editing-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01564", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01564", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01565", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01565-keymap-item-Mask-Editing-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01565.py -- tests/files/web/generated/M21-GAP-01565-keymap-item-Mask-Editing-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01565", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01565", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01566", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01566-keymap-item-Mask-Editing-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01566.py -- tests/files/web/generated/M21-GAP-01566-keymap-item-Mask-Editing-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01566", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01566", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01567", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01567-keymap-item-Mask-Editing-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01567.py -- tests/files/web/generated/M21-GAP-01567-keymap-item-Mask-Editing-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01567", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01567", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01568", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01568-keymap-item-Mask-Editing-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01568.py -- tests/files/web/generated/M21-GAP-01568-keymap-item-Mask-Editing-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01568", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01568", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01569", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01569-keymap-item-Mask-Editing-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01569.py -- tests/files/web/generated/M21-GAP-01569-keymap-item-Mask-Editing-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01569", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01569", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01570", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01570-keymap-item-Mask-Editing-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01570.py -- tests/files/web/generated/M21-GAP-01570-keymap-item-Mask-Editing-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01570", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01570", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01571", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01571-keymap-item-Mask-Editing-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01571.py -- tests/files/web/generated/M21-GAP-01571-keymap-item-Mask-Editing-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01571", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01571", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01572", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01572-keymap-item-Mask-Editing-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01572.py -- tests/files/web/generated/M21-GAP-01572-keymap-item-Mask-Editing-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01572", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01572", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01573", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01573-keymap-item-Mask-Editing-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01573.py -- tests/files/web/generated/M21-GAP-01573-keymap-item-Mask-Editing-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01573", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01573", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01574", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01574-keymap-item-Mask-Editing-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01574.py -- tests/files/web/generated/M21-GAP-01574-keymap-item-Mask-Editing-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01574", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01574", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01575", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01575-keymap-item-Mask-Editing-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01575.py -- tests/files/web/generated/M21-GAP-01575-keymap-item-Mask-Editing-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01575", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01575", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01576", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01576-keymap-item-Mask-Editing-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01576.py -- tests/files/web/generated/M21-GAP-01576-keymap-item-Mask-Editing-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01576", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01576", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01577", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01577-keymap-item-Mask-Editing-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01577.py -- tests/files/web/generated/M21-GAP-01577-keymap-item-Mask-Editing-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01577", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01577", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01578", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01578-keymap-item-Mask-Editing-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01578.py -- tests/files/web/generated/M21-GAP-01578-keymap-item-Mask-Editing-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01578", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01578", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01579", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01579-keymap-item-Mask-Editing-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01579.py -- tests/files/web/generated/M21-GAP-01579-keymap-item-Mask-Editing-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01579", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01579", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01580", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01580-keymap-item-Mask-Editing-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01580.py -- tests/files/web/generated/M21-GAP-01580-keymap-item-Mask-Editing-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01580", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01580", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01581", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01581-keymap-item-Mask-Editing-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01581.py -- tests/files/web/generated/M21-GAP-01581-keymap-item-Mask-Editing-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01581", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01581", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01582", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01582-keymap-item-Mask-Editing-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01582.py -- tests/files/web/generated/M21-GAP-01582-keymap-item-Mask-Editing-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01582", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01582", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01583", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01583-keymap-item-Mask-Editing-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01583.py -- tests/files/web/generated/M21-GAP-01583-keymap-item-Mask-Editing-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01583", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01583", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01584", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01584-keymap-item-Mask-Editing-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01584.py -- tests/files/web/generated/M21-GAP-01584-keymap-item-Mask-Editing-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01584", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01584", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01585", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01585-keymap-item-Mask-Editing-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01585.py -- tests/files/web/generated/M21-GAP-01585-keymap-item-Mask-Editing-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01585", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01585", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01586", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01586-keymap-item-Mask-Editing-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01586.py -- tests/files/web/generated/M21-GAP-01586-keymap-item-Mask-Editing-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01586", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01586", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01587", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01587-keymap-item-Mask-Editing-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01587.py -- tests/files/web/generated/M21-GAP-01587-keymap-item-Mask-Editing-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01587", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01587", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01588", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01588-keymap-item-Mask-Editing-EMPTY-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01588.py -- tests/files/web/generated/M21-GAP-01588-keymap-item-Mask-Editing-EMPTY-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01588", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01588", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01589", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01589-keymap-item-Mask-Editing-EMPTY-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01589.py -- tests/files/web/generated/M21-GAP-01589-keymap-item-Mask-Editing-EMPTY-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01589", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01589", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01590", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01590-keymap-item-Mask-Editing-EMPTY-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01590.py -- tests/files/web/generated/M21-GAP-01590-keymap-item-Mask-Editing-EMPTY-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01590", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01590", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01591", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01591-keymap-item-Mask-Editing-EMPTY-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01591.py -- tests/files/web/generated/M21-GAP-01591-keymap-item-Mask-Editing-EMPTY-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01591", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01591", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01592", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01592-keymap-item-Mask-Editing-EMPTY-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01592.py -- tests/files/web/generated/M21-GAP-01592-keymap-item-Mask-Editing-EMPTY-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01592", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01592", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01593", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01593-keymap-item-Mask-Editing-EMPTY-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01593.py -- tests/files/web/generated/M21-GAP-01593-keymap-item-Mask-Editing-EMPTY-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01593", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01593", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01594", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01594-keymap-item-Mask-Editing-EMPTY-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01594.py -- tests/files/web/generated/M21-GAP-01594-keymap-item-Mask-Editing-EMPTY-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01594", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01594", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01595", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01595-keymap-item-Mask-Editing-EMPTY-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01595.py -- tests/files/web/generated/M21-GAP-01595-keymap-item-Mask-Editing-EMPTY-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01595", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01595", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01596", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01596-keymap-item-Mask-Editing-EMPTY-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01596.py -- tests/files/web/generated/M21-GAP-01596-keymap-item-Mask-Editing-EMPTY-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01596", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01596", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01597", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01597-keymap-item-Mask-Editing-EMPTY-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01597.py -- tests/files/web/generated/M21-GAP-01597-keymap-item-Mask-Editing-EMPTY-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01597", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01597", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01598", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01598-keymap-item-Mask-Editing-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01598.py -- tests/files/web/generated/M21-GAP-01598-keymap-item-Mask-Editing-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01598", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01598", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01599", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01599-keymap-item-Mask-Editing-EMPTY-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01599.py -- tests/files/web/generated/M21-GAP-01599-keymap-item-Mask-Editing-EMPTY-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01599", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01599", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01600", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01600-keymap-item-Mask-Editing-EMPTY-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01600.py -- tests/files/web/generated/M21-GAP-01600-keymap-item-Mask-Editing-EMPTY-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01600", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01600", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01601", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01601-keymap-item-Mask-Editing-EMPTY-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01601.py -- tests/files/web/generated/M21-GAP-01601-keymap-item-Mask-Editing-EMPTY-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01601", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01601", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01602", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01602-keymap-item-Mask-Editing-EMPTY-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01602.py -- tests/files/web/generated/M21-GAP-01602-keymap-item-Mask-Editing-EMPTY-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01602", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01602", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01603", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01603-keymap-item-Mask-Editing-EMPTY-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01603.py -- tests/files/web/generated/M21-GAP-01603-keymap-item-Mask-Editing-EMPTY-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01603", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01603", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01604", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01604-keymap-item-Mask-Editing-EMPTY-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01604.py -- tests/files/web/generated/M21-GAP-01604-keymap-item-Mask-Editing-EMPTY-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01604", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01604", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01605", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01605-keymap-item-Mask-Editing-EMPTY-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01605.py -- tests/files/web/generated/M21-GAP-01605-keymap-item-Mask-Editing-EMPTY-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01605", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01605", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01606", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01606-keymap-item-Mask-Editing-EMPTY-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01606.py -- tests/files/web/generated/M21-GAP-01606-keymap-item-Mask-Editing-EMPTY-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01606", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01606", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01607", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01607-keymap-item-Mask-Editing-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01607.py -- tests/files/web/generated/M21-GAP-01607-keymap-item-Mask-Editing-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01607", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01607", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01608", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01608-keymap-item-Mask-Editing-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01608.py -- tests/files/web/generated/M21-GAP-01608-keymap-item-Mask-Editing-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01608", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01608", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01609", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01609-keymap-item-Mask-Editing-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01609.py -- tests/files/web/generated/M21-GAP-01609-keymap-item-Mask-Editing-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01609", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01609", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01610", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01610-keymap-item-Mask-Editing-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01610.py -- tests/files/web/generated/M21-GAP-01610-keymap-item-Mask-Editing-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01610", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01610", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01611", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01611-keymap-item-Mask-Editing-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01611.py -- tests/files/web/generated/M21-GAP-01611-keymap-item-Mask-Editing-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01611", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01611", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01612", + "gapId": "keymap-item:Mesh Filter Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01612-keymap-item-Mesh-Filter-Modal-Map-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01612.py -- tests/files/web/generated/M21-GAP-01612-keymap-item-Mesh-Filter-Modal-Map-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01612", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01612", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01613", + "gapId": "keymap-item:Mesh Filter Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01613-keymap-item-Mesh-Filter-Modal-Map-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01613.py -- tests/files/web/generated/M21-GAP-01613-keymap-item-Mesh-Filter-Modal-Map-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01613", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01613", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01614", + "gapId": "keymap-item:Mesh Filter Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01614-keymap-item-Mesh-Filter-Modal-Map-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01614.py -- tests/files/web/generated/M21-GAP-01614-keymap-item-Mesh-Filter-Modal-Map-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01614", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01614", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01615", + "gapId": "keymap-item:Mesh Filter Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01615-keymap-item-Mesh-Filter-Modal-Map-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01615.py -- tests/files/web/generated/M21-GAP-01615-keymap-item-Mesh-Filter-Modal-Map-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01615", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01615", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01616", + "gapId": "keymap-item:Mesh Filter Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01616-keymap-item-Mesh-Filter-Modal-Map-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01616.py -- tests/files/web/generated/M21-GAP-01616-keymap-item-Mesh-Filter-Modal-Map-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01616", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01616", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01617", + "gapId": "keymap-item:Mesh Filter Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01617-keymap-item-Mesh-Filter-Modal-Map-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01617.py -- tests/files/web/generated/M21-GAP-01617-keymap-item-Mesh-Filter-Modal-Map-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01617", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01617", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01618", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01618-keymap-item-Mesh-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01618.py -- tests/files/web/generated/M21-GAP-01618-keymap-item-Mesh-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01618", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01618", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01619", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01619-keymap-item-Mesh-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01619.py -- tests/files/web/generated/M21-GAP-01619-keymap-item-Mesh-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01619", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01619", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01620", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01620-keymap-item-Mesh-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01620.py -- tests/files/web/generated/M21-GAP-01620-keymap-item-Mesh-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01620", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01620", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01621", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01621-keymap-item-Mesh-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01621.py -- tests/files/web/generated/M21-GAP-01621-keymap-item-Mesh-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01621", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01621", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01622", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01622-keymap-item-Mesh-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01622.py -- tests/files/web/generated/M21-GAP-01622-keymap-item-Mesh-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01622", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01622", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01623", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01623-keymap-item-Mesh-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01623.py -- tests/files/web/generated/M21-GAP-01623-keymap-item-Mesh-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01623", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01623", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01624", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01624-keymap-item-Mesh-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01624.py -- tests/files/web/generated/M21-GAP-01624-keymap-item-Mesh-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01624", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01624", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01625", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01625-keymap-item-Mesh-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01625.py -- tests/files/web/generated/M21-GAP-01625-keymap-item-Mesh-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01625", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01625", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01626", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01626-keymap-item-Mesh-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01626.py -- tests/files/web/generated/M21-GAP-01626-keymap-item-Mesh-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01626", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01626", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01627", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01627-keymap-item-Mesh-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01627.py -- tests/files/web/generated/M21-GAP-01627-keymap-item-Mesh-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01627", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01627", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01628", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01628-keymap-item-Mesh-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01628.py -- tests/files/web/generated/M21-GAP-01628-keymap-item-Mesh-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01628", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01628", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01629", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01629-keymap-item-Mesh-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01629.py -- tests/files/web/generated/M21-GAP-01629-keymap-item-Mesh-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01629", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01629", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01630", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01630-keymap-item-Mesh-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01630.py -- tests/files/web/generated/M21-GAP-01630-keymap-item-Mesh-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01630", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01630", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01631", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01631-keymap-item-Mesh-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01631.py -- tests/files/web/generated/M21-GAP-01631-keymap-item-Mesh-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01631", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01631", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01632", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01632-keymap-item-Mesh-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01632.py -- tests/files/web/generated/M21-GAP-01632-keymap-item-Mesh-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01632", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01632", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01633", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01633-keymap-item-Mesh-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01633.py -- tests/files/web/generated/M21-GAP-01633-keymap-item-Mesh-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01633", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01633", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01634", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01634-keymap-item-Mesh-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01634.py -- tests/files/web/generated/M21-GAP-01634-keymap-item-Mesh-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01634", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01634", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01635", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01635-keymap-item-Mesh-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01635.py -- tests/files/web/generated/M21-GAP-01635-keymap-item-Mesh-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01635", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01635", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01636", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01636-keymap-item-Mesh-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01636.py -- tests/files/web/generated/M21-GAP-01636-keymap-item-Mesh-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01636", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01636", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01637", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01637-keymap-item-Mesh-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01637.py -- tests/files/web/generated/M21-GAP-01637-keymap-item-Mesh-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01637", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01637", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01638", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01638-keymap-item-Mesh-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01638.py -- tests/files/web/generated/M21-GAP-01638-keymap-item-Mesh-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01638", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01638", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01639", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01639-keymap-item-Mesh-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01639.py -- tests/files/web/generated/M21-GAP-01639-keymap-item-Mesh-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01639", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01639", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01640", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01640-keymap-item-Mesh-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01640.py -- tests/files/web/generated/M21-GAP-01640-keymap-item-Mesh-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01640", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01640", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01641", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01641-keymap-item-Mesh-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01641.py -- tests/files/web/generated/M21-GAP-01641-keymap-item-Mesh-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01641", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01641", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01642", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01642-keymap-item-Mesh-EMPTY-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01642.py -- tests/files/web/generated/M21-GAP-01642-keymap-item-Mesh-EMPTY-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01642", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01642", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01643", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01643-keymap-item-Mesh-EMPTY-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01643.py -- tests/files/web/generated/M21-GAP-01643-keymap-item-Mesh-EMPTY-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01643", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01643", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01644", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01644-keymap-item-Mesh-EMPTY-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01644.py -- tests/files/web/generated/M21-GAP-01644-keymap-item-Mesh-EMPTY-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01644", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01644", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01645", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01645-keymap-item-Mesh-EMPTY-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01645.py -- tests/files/web/generated/M21-GAP-01645-keymap-item-Mesh-EMPTY-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01645", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01645", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01646", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01646-keymap-item-Mesh-EMPTY-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01646.py -- tests/files/web/generated/M21-GAP-01646-keymap-item-Mesh-EMPTY-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01646", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01646", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01647", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01647-keymap-item-Mesh-EMPTY-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01647.py -- tests/files/web/generated/M21-GAP-01647-keymap-item-Mesh-EMPTY-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01647", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01647", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01648", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01648-keymap-item-Mesh-EMPTY-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01648.py -- tests/files/web/generated/M21-GAP-01648-keymap-item-Mesh-EMPTY-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01648", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01648", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01649", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01649-keymap-item-Mesh-EMPTY-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01649.py -- tests/files/web/generated/M21-GAP-01649-keymap-item-Mesh-EMPTY-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01649", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01649", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01650", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01650-keymap-item-Mesh-EMPTY-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01650.py -- tests/files/web/generated/M21-GAP-01650-keymap-item-Mesh-EMPTY-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01650", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01650", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01651", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01651-keymap-item-Mesh-EMPTY-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01651.py -- tests/files/web/generated/M21-GAP-01651-keymap-item-Mesh-EMPTY-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01651", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01651", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01652", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01652-keymap-item-Mesh-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01652.py -- tests/files/web/generated/M21-GAP-01652-keymap-item-Mesh-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01652", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01652", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01653", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01653-keymap-item-Mesh-EMPTY-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01653.py -- tests/files/web/generated/M21-GAP-01653-keymap-item-Mesh-EMPTY-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01653", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01653", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01654", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01654-keymap-item-Mesh-EMPTY-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01654.py -- tests/files/web/generated/M21-GAP-01654-keymap-item-Mesh-EMPTY-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01654", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01654", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01655", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01655-keymap-item-Mesh-EMPTY-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01655.py -- tests/files/web/generated/M21-GAP-01655-keymap-item-Mesh-EMPTY-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01655", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01655", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01656", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01656-keymap-item-Mesh-EMPTY-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01656.py -- tests/files/web/generated/M21-GAP-01656-keymap-item-Mesh-EMPTY-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01656", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01656", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01657", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01657-keymap-item-Mesh-EMPTY-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01657.py -- tests/files/web/generated/M21-GAP-01657-keymap-item-Mesh-EMPTY-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01657", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01657", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01658", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01658-keymap-item-Mesh-EMPTY-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01658.py -- tests/files/web/generated/M21-GAP-01658-keymap-item-Mesh-EMPTY-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01658", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01658", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01659", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01659-keymap-item-Mesh-EMPTY-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01659.py -- tests/files/web/generated/M21-GAP-01659-keymap-item-Mesh-EMPTY-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01659", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01659", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01660", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01660-keymap-item-Mesh-EMPTY-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01660.py -- tests/files/web/generated/M21-GAP-01660-keymap-item-Mesh-EMPTY-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01660", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01660", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01661", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01661-keymap-item-Mesh-EMPTY-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01661.py -- tests/files/web/generated/M21-GAP-01661-keymap-item-Mesh-EMPTY-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01661", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01661", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01662", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01662-keymap-item-Mesh-EMPTY-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01662.py -- tests/files/web/generated/M21-GAP-01662-keymap-item-Mesh-EMPTY-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01662", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01662", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01663", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01663-keymap-item-Mesh-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01663.py -- tests/files/web/generated/M21-GAP-01663-keymap-item-Mesh-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01663", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01663", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01664", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01664-keymap-item-Mesh-EMPTY-WINDOW-50.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01664.py -- tests/files/web/generated/M21-GAP-01664-keymap-item-Mesh-EMPTY-WINDOW-50.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01664", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01664", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01665", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01665-keymap-item-Mesh-EMPTY-WINDOW-51.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01665.py -- tests/files/web/generated/M21-GAP-01665-keymap-item-Mesh-EMPTY-WINDOW-51.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01665", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01665", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01666", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:52", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01666-keymap-item-Mesh-EMPTY-WINDOW-52.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01666.py -- tests/files/web/generated/M21-GAP-01666-keymap-item-Mesh-EMPTY-WINDOW-52.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01666", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01666", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01667", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:53", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01667-keymap-item-Mesh-EMPTY-WINDOW-53.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01667.py -- tests/files/web/generated/M21-GAP-01667-keymap-item-Mesh-EMPTY-WINDOW-53.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01667", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01667", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01668", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:54", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01668-keymap-item-Mesh-EMPTY-WINDOW-54.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01668.py -- tests/files/web/generated/M21-GAP-01668-keymap-item-Mesh-EMPTY-WINDOW-54.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01668", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01668", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01669", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:55", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01669-keymap-item-Mesh-EMPTY-WINDOW-55.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01669.py -- tests/files/web/generated/M21-GAP-01669-keymap-item-Mesh-EMPTY-WINDOW-55.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01669", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01669", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01670", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:56", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01670-keymap-item-Mesh-EMPTY-WINDOW-56.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01670.py -- tests/files/web/generated/M21-GAP-01670-keymap-item-Mesh-EMPTY-WINDOW-56.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01670", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01670", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01671", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:57", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01671-keymap-item-Mesh-EMPTY-WINDOW-57.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01671.py -- tests/files/web/generated/M21-GAP-01671-keymap-item-Mesh-EMPTY-WINDOW-57.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01671", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01671", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01672", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:58", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01672-keymap-item-Mesh-EMPTY-WINDOW-58.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01672.py -- tests/files/web/generated/M21-GAP-01672-keymap-item-Mesh-EMPTY-WINDOW-58.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01672", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01672", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01673", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:59", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01673-keymap-item-Mesh-EMPTY-WINDOW-59.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01673.py -- tests/files/web/generated/M21-GAP-01673-keymap-item-Mesh-EMPTY-WINDOW-59.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01673", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01673", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01674", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01674-keymap-item-Mesh-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01674.py -- tests/files/web/generated/M21-GAP-01674-keymap-item-Mesh-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01674", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01674", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01675", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:60", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01675-keymap-item-Mesh-EMPTY-WINDOW-60.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01675.py -- tests/files/web/generated/M21-GAP-01675-keymap-item-Mesh-EMPTY-WINDOW-60.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01675", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01675", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01676", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:61", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01676-keymap-item-Mesh-EMPTY-WINDOW-61.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01676.py -- tests/files/web/generated/M21-GAP-01676-keymap-item-Mesh-EMPTY-WINDOW-61.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01676", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01676", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01677", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:62", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01677-keymap-item-Mesh-EMPTY-WINDOW-62.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01677.py -- tests/files/web/generated/M21-GAP-01677-keymap-item-Mesh-EMPTY-WINDOW-62.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01677", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01677", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01678", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:63", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01678-keymap-item-Mesh-EMPTY-WINDOW-63.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01678.py -- tests/files/web/generated/M21-GAP-01678-keymap-item-Mesh-EMPTY-WINDOW-63.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01678", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01678", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01679", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:64", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01679-keymap-item-Mesh-EMPTY-WINDOW-64.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01679.py -- tests/files/web/generated/M21-GAP-01679-keymap-item-Mesh-EMPTY-WINDOW-64.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01679", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01679", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01680", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:65", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01680-keymap-item-Mesh-EMPTY-WINDOW-65.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01680.py -- tests/files/web/generated/M21-GAP-01680-keymap-item-Mesh-EMPTY-WINDOW-65.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01680", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01680", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01681", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:66", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01681-keymap-item-Mesh-EMPTY-WINDOW-66.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01681.py -- tests/files/web/generated/M21-GAP-01681-keymap-item-Mesh-EMPTY-WINDOW-66.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01681", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01681", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01682", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:67", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01682-keymap-item-Mesh-EMPTY-WINDOW-67.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01682.py -- tests/files/web/generated/M21-GAP-01682-keymap-item-Mesh-EMPTY-WINDOW-67.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01682", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01682", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01683", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:68", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01683-keymap-item-Mesh-EMPTY-WINDOW-68.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01683.py -- tests/files/web/generated/M21-GAP-01683-keymap-item-Mesh-EMPTY-WINDOW-68.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01683", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01683", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01684", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:69", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01684-keymap-item-Mesh-EMPTY-WINDOW-69.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01684.py -- tests/files/web/generated/M21-GAP-01684-keymap-item-Mesh-EMPTY-WINDOW-69.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01684", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01684", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01685", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01685-keymap-item-Mesh-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01685.py -- tests/files/web/generated/M21-GAP-01685-keymap-item-Mesh-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01685", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01685", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01686", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:70", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01686-keymap-item-Mesh-EMPTY-WINDOW-70.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01686.py -- tests/files/web/generated/M21-GAP-01686-keymap-item-Mesh-EMPTY-WINDOW-70.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01686", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01686", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01687", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:71", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01687-keymap-item-Mesh-EMPTY-WINDOW-71.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01687.py -- tests/files/web/generated/M21-GAP-01687-keymap-item-Mesh-EMPTY-WINDOW-71.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01687", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01687", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01688", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:72", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01688-keymap-item-Mesh-EMPTY-WINDOW-72.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01688.py -- tests/files/web/generated/M21-GAP-01688-keymap-item-Mesh-EMPTY-WINDOW-72.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01688", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01688", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01689", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:73", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01689-keymap-item-Mesh-EMPTY-WINDOW-73.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01689.py -- tests/files/web/generated/M21-GAP-01689-keymap-item-Mesh-EMPTY-WINDOW-73.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01689", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01689", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01690", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:74", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01690-keymap-item-Mesh-EMPTY-WINDOW-74.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01690.py -- tests/files/web/generated/M21-GAP-01690-keymap-item-Mesh-EMPTY-WINDOW-74.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01690", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01690", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01691", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:75", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01691-keymap-item-Mesh-EMPTY-WINDOW-75.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01691.py -- tests/files/web/generated/M21-GAP-01691-keymap-item-Mesh-EMPTY-WINDOW-75.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01691", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01691", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01692", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:76", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01692-keymap-item-Mesh-EMPTY-WINDOW-76.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01692.py -- tests/files/web/generated/M21-GAP-01692-keymap-item-Mesh-EMPTY-WINDOW-76.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01692", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01692", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01693", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:77", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01693-keymap-item-Mesh-EMPTY-WINDOW-77.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01693.py -- tests/files/web/generated/M21-GAP-01693-keymap-item-Mesh-EMPTY-WINDOW-77.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01693", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01693", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01694", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:78", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01694-keymap-item-Mesh-EMPTY-WINDOW-78.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01694.py -- tests/files/web/generated/M21-GAP-01694-keymap-item-Mesh-EMPTY-WINDOW-78.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01694", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01694", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01695", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:79", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01695-keymap-item-Mesh-EMPTY-WINDOW-79.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01695.py -- tests/files/web/generated/M21-GAP-01695-keymap-item-Mesh-EMPTY-WINDOW-79.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01695", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01695", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01696", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01696-keymap-item-Mesh-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01696.py -- tests/files/web/generated/M21-GAP-01696-keymap-item-Mesh-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01696", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01696", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01697", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:80", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01697-keymap-item-Mesh-EMPTY-WINDOW-80.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01697.py -- tests/files/web/generated/M21-GAP-01697-keymap-item-Mesh-EMPTY-WINDOW-80.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01697", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01697", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01698", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:81", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01698-keymap-item-Mesh-EMPTY-WINDOW-81.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01698.py -- tests/files/web/generated/M21-GAP-01698-keymap-item-Mesh-EMPTY-WINDOW-81.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01698", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01698", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01699", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:82", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01699-keymap-item-Mesh-EMPTY-WINDOW-82.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01699.py -- tests/files/web/generated/M21-GAP-01699-keymap-item-Mesh-EMPTY-WINDOW-82.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01699", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01699", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01700", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:83", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01700-keymap-item-Mesh-EMPTY-WINDOW-83.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01700.py -- tests/files/web/generated/M21-GAP-01700-keymap-item-Mesh-EMPTY-WINDOW-83.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01700", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01700", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01701", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:84", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01701-keymap-item-Mesh-EMPTY-WINDOW-84.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01701.py -- tests/files/web/generated/M21-GAP-01701-keymap-item-Mesh-EMPTY-WINDOW-84.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01701", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01701", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01702", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:85", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01702-keymap-item-Mesh-EMPTY-WINDOW-85.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01702.py -- tests/files/web/generated/M21-GAP-01702-keymap-item-Mesh-EMPTY-WINDOW-85.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01702", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01702", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01703", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:86", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01703-keymap-item-Mesh-EMPTY-WINDOW-86.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01703.py -- tests/files/web/generated/M21-GAP-01703-keymap-item-Mesh-EMPTY-WINDOW-86.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01703", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01703", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01704", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:87", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01704-keymap-item-Mesh-EMPTY-WINDOW-87.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01704.py -- tests/files/web/generated/M21-GAP-01704-keymap-item-Mesh-EMPTY-WINDOW-87.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01704", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01704", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01705", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:88", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01705-keymap-item-Mesh-EMPTY-WINDOW-88.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01705.py -- tests/files/web/generated/M21-GAP-01705-keymap-item-Mesh-EMPTY-WINDOW-88.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01705", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01705", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01706", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:89", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01706-keymap-item-Mesh-EMPTY-WINDOW-89.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01706.py -- tests/files/web/generated/M21-GAP-01706-keymap-item-Mesh-EMPTY-WINDOW-89.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01706", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01706", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01707", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01707-keymap-item-Mesh-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01707.py -- tests/files/web/generated/M21-GAP-01707-keymap-item-Mesh-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01707", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01707", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01708", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:90", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01708-keymap-item-Mesh-EMPTY-WINDOW-90.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01708.py -- tests/files/web/generated/M21-GAP-01708-keymap-item-Mesh-EMPTY-WINDOW-90.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01708", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01708", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01709", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:91", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01709-keymap-item-Mesh-EMPTY-WINDOW-91.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01709.py -- tests/files/web/generated/M21-GAP-01709-keymap-item-Mesh-EMPTY-WINDOW-91.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01709", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01709", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01710", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:92", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01710-keymap-item-Mesh-EMPTY-WINDOW-92.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01710.py -- tests/files/web/generated/M21-GAP-01710-keymap-item-Mesh-EMPTY-WINDOW-92.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01710", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01710", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01711", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01711-keymap-item-Metaball-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01711.py -- tests/files/web/generated/M21-GAP-01711-keymap-item-Metaball-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01711", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01711", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01712", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01712-keymap-item-Metaball-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01712.py -- tests/files/web/generated/M21-GAP-01712-keymap-item-Metaball-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01712", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01712", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01713", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01713-keymap-item-Metaball-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01713.py -- tests/files/web/generated/M21-GAP-01713-keymap-item-Metaball-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01713", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01713", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01714", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01714-keymap-item-Metaball-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01714.py -- tests/files/web/generated/M21-GAP-01714-keymap-item-Metaball-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01714", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01714", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01715", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01715-keymap-item-Metaball-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01715.py -- tests/files/web/generated/M21-GAP-01715-keymap-item-Metaball-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01715", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01715", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01716", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01716-keymap-item-Metaball-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01716.py -- tests/files/web/generated/M21-GAP-01716-keymap-item-Metaball-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01716", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01716", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01717", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01717-keymap-item-Metaball-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01717.py -- tests/files/web/generated/M21-GAP-01717-keymap-item-Metaball-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01717", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01717", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01718", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01718-keymap-item-Metaball-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01718.py -- tests/files/web/generated/M21-GAP-01718-keymap-item-Metaball-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01718", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01718", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01719", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01719-keymap-item-Metaball-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01719.py -- tests/files/web/generated/M21-GAP-01719-keymap-item-Metaball-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01719", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01719", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01720", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01720-keymap-item-Metaball-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01720.py -- tests/files/web/generated/M21-GAP-01720-keymap-item-Metaball-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01720", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01720", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01721", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01721-keymap-item-Metaball-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01721.py -- tests/files/web/generated/M21-GAP-01721-keymap-item-Metaball-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01721", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01721", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01722", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01722-keymap-item-Metaball-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01722.py -- tests/files/web/generated/M21-GAP-01722-keymap-item-Metaball-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01722", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01722", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01723", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01723-keymap-item-Metaball-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01723.py -- tests/files/web/generated/M21-GAP-01723-keymap-item-Metaball-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01723", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01723", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01724", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01724-keymap-item-Metaball-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01724.py -- tests/files/web/generated/M21-GAP-01724-keymap-item-Metaball-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01724", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01724", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01725", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01725-keymap-item-Metaball-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01725.py -- tests/files/web/generated/M21-GAP-01725-keymap-item-Metaball-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01725", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01725", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01726", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01726-keymap-item-Metaball-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01726.py -- tests/files/web/generated/M21-GAP-01726-keymap-item-Metaball-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01726", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01726", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01727", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01727-keymap-item-Metaball-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01727.py -- tests/files/web/generated/M21-GAP-01727-keymap-item-Metaball-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01727", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01727", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01728", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01728-keymap-item-Metaball-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01728.py -- tests/files/web/generated/M21-GAP-01728-keymap-item-Metaball-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01728", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01728", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01729", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01729-keymap-item-Metaball-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01729.py -- tests/files/web/generated/M21-GAP-01729-keymap-item-Metaball-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01729", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01729", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01730", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01730-keymap-item-Metaball-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01730.py -- tests/files/web/generated/M21-GAP-01730-keymap-item-Metaball-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01730", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01730", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01731", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01731-keymap-item-Metaball-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01731.py -- tests/files/web/generated/M21-GAP-01731-keymap-item-Metaball-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01731", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01731", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01732", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01732-keymap-item-Metaball-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01732.py -- tests/files/web/generated/M21-GAP-01732-keymap-item-Metaball-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01732", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01732", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01733", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01733-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01733.py -- tests/files/web/generated/M21-GAP-01733-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01733", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01733", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01734", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01734-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01734.py -- tests/files/web/generated/M21-GAP-01734-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01734", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01734", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01735", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01735-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01735.py -- tests/files/web/generated/M21-GAP-01735-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01735", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01735", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01736", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01736-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01736.py -- tests/files/web/generated/M21-GAP-01736-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01736", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01736", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01737", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01737-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01737.py -- tests/files/web/generated/M21-GAP-01737-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01737", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01737", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01738", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01738-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01738.py -- tests/files/web/generated/M21-GAP-01738-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01738", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01738", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01739", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01739-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01739.py -- tests/files/web/generated/M21-GAP-01739-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01739", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01739", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01740", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01740-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01740.py -- tests/files/web/generated/M21-GAP-01740-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01740", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01740", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01741", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01741-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01741.py -- tests/files/web/generated/M21-GAP-01741-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01741", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01741", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01742", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01742-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01742.py -- tests/files/web/generated/M21-GAP-01742-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01742", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01742", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01743", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01743-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01743.py -- tests/files/web/generated/M21-GAP-01743-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01743", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01743", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01744", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01744-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01744.py -- tests/files/web/generated/M21-GAP-01744-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01744", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01744", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01745", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01745-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01745.py -- tests/files/web/generated/M21-GAP-01745-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01745", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01745", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01746", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01746-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01746.py -- tests/files/web/generated/M21-GAP-01746-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01746", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01746", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01747", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01747-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01747.py -- tests/files/web/generated/M21-GAP-01747-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01747", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01747", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01748", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01748-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01748.py -- tests/files/web/generated/M21-GAP-01748-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01748", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01748", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01749", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01749-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01749.py -- tests/files/web/generated/M21-GAP-01749-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01749", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01749", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01750", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01750-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01750.py -- tests/files/web/generated/M21-GAP-01750-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01750", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01750", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01751", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01751-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01751.py -- tests/files/web/generated/M21-GAP-01751-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01751", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01751", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01752", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01752-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01752.py -- tests/files/web/generated/M21-GAP-01752-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01752", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01752", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01753", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01753-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01753.py -- tests/files/web/generated/M21-GAP-01753-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01753", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01753", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01754", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01754-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01754.py -- tests/files/web/generated/M21-GAP-01754-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01754", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01754", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01755", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01755-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01755.py -- tests/files/web/generated/M21-GAP-01755-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01755", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01755", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01756", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01756-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01756.py -- tests/files/web/generated/M21-GAP-01756-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01756", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01756", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01757", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01757-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01757.py -- tests/files/web/generated/M21-GAP-01757-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01757", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01757", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01758", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01758-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01758.py -- tests/files/web/generated/M21-GAP-01758-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01758", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01758", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01759", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01759-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01759.py -- tests/files/web/generated/M21-GAP-01759-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01759", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01759", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01760", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01760-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01760.py -- tests/files/web/generated/M21-GAP-01760-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01760", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01760", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01761", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01761-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01761.py -- tests/files/web/generated/M21-GAP-01761-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01761", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01761", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01762", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01762-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01762.py -- tests/files/web/generated/M21-GAP-01762-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01762", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01762", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01763", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01763-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01763.py -- tests/files/web/generated/M21-GAP-01763-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01763", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01763", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01764", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01764-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01764.py -- tests/files/web/generated/M21-GAP-01764-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01764", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01764", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01765", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01765-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01765.py -- tests/files/web/generated/M21-GAP-01765-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01765", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01765", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01766", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01766-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01766.py -- tests/files/web/generated/M21-GAP-01766-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01766", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01766", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01767", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01767-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01767.py -- tests/files/web/generated/M21-GAP-01767-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01767", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01767", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01768", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01768-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01768.py -- tests/files/web/generated/M21-GAP-01768-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01768", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01768", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01769", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01769-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01769.py -- tests/files/web/generated/M21-GAP-01769-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01769", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01769", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01770", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01770-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01770.py -- tests/files/web/generated/M21-GAP-01770-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01770", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01770", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01771", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01771-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01771.py -- tests/files/web/generated/M21-GAP-01771-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01771", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01771", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01772", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01772-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01772.py -- tests/files/web/generated/M21-GAP-01772-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01772", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01772", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01773", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01773-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01773.py -- tests/files/web/generated/M21-GAP-01773-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01773", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01773", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01774", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01774-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01774.py -- tests/files/web/generated/M21-GAP-01774-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01774", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01774", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01775", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01775-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01775.py -- tests/files/web/generated/M21-GAP-01775-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01775", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01775", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01776", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01776-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01776.py -- tests/files/web/generated/M21-GAP-01776-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01776", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01776", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01777", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01777-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01777.py -- tests/files/web/generated/M21-GAP-01777-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01777", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01777", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01778", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01778-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01778.py -- tests/files/web/generated/M21-GAP-01778-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01778", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01778", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01779", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01779-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01779.py -- tests/files/web/generated/M21-GAP-01779-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01779", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01779", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01780", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01780-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01780.py -- tests/files/web/generated/M21-GAP-01780-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01780", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01780", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01781", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01781-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01781.py -- tests/files/web/generated/M21-GAP-01781-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01781", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01781", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01782", + "gapId": "keymap-item:NLA Generic:NLA_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01782-keymap-item-NLA-Generic-NLA_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01782.py -- tests/files/web/generated/M21-GAP-01782-keymap-item-NLA-Generic-NLA_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01782", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01782", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01783", + "gapId": "keymap-item:NLA Generic:NLA_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01783-keymap-item-NLA-Generic-NLA_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01783.py -- tests/files/web/generated/M21-GAP-01783-keymap-item-NLA-Generic-NLA_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01783", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01783", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01784", + "gapId": "keymap-item:NLA Generic:NLA_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01784-keymap-item-NLA-Generic-NLA_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01784.py -- tests/files/web/generated/M21-GAP-01784-keymap-item-NLA-Generic-NLA_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01784", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01784", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01785", + "gapId": "keymap-item:NLA Generic:NLA_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01785-keymap-item-NLA-Generic-NLA_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01785.py -- tests/files/web/generated/M21-GAP-01785-keymap-item-NLA-Generic-NLA_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01785", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01785", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01786", + "gapId": "keymap-item:NLA Generic:NLA_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01786-keymap-item-NLA-Generic-NLA_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01786.py -- tests/files/web/generated/M21-GAP-01786-keymap-item-NLA-Generic-NLA_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01786", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01786", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01787", + "gapId": "keymap-item:NLA Generic:NLA_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01787-keymap-item-NLA-Generic-NLA_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01787.py -- tests/files/web/generated/M21-GAP-01787-keymap-item-NLA-Generic-NLA_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01787", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01787", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01788", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01788-keymap-item-NLA-Tracks-NLA_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01788.py -- tests/files/web/generated/M21-GAP-01788-keymap-item-NLA-Tracks-NLA_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01788", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01788", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01789", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01789-keymap-item-NLA-Tracks-NLA_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01789.py -- tests/files/web/generated/M21-GAP-01789-keymap-item-NLA-Tracks-NLA_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01789", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01789", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01790", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01790-keymap-item-NLA-Tracks-NLA_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01790.py -- tests/files/web/generated/M21-GAP-01790-keymap-item-NLA-Tracks-NLA_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01790", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01790", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01791", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01791-keymap-item-NLA-Tracks-NLA_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01791.py -- tests/files/web/generated/M21-GAP-01791-keymap-item-NLA-Tracks-NLA_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01791", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01791", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01792", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01792-keymap-item-NLA-Tracks-NLA_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01792.py -- tests/files/web/generated/M21-GAP-01792-keymap-item-NLA-Tracks-NLA_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01792", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01792", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01793", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01793-keymap-item-NLA-Tracks-NLA_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01793.py -- tests/files/web/generated/M21-GAP-01793-keymap-item-NLA-Tracks-NLA_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01793", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01793", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01794", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01794-keymap-item-NLA-Tracks-NLA_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01794.py -- tests/files/web/generated/M21-GAP-01794-keymap-item-NLA-Tracks-NLA_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01794", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01794", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01795", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01795-keymap-item-NLA-Tracks-NLA_EDITOR-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01795.py -- tests/files/web/generated/M21-GAP-01795-keymap-item-NLA-Tracks-NLA_EDITOR-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01795", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01795", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01796", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01796-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01796.py -- tests/files/web/generated/M21-GAP-01796-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01796", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01796", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01797", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01797-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01797.py -- tests/files/web/generated/M21-GAP-01797-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01797", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01797", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01798", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01798-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01798.py -- tests/files/web/generated/M21-GAP-01798-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01798", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01798", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01799", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:100", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01799-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-100.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01799.py -- tests/files/web/generated/M21-GAP-01799-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-100.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01799", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01799", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01800", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:101", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01800-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-101.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01800.py -- tests/files/web/generated/M21-GAP-01800-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-101.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01800", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01800", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01801", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:102", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01801-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-102.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01801.py -- tests/files/web/generated/M21-GAP-01801-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-102.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01801", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01801", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01802", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:103", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01802-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-103.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01802.py -- tests/files/web/generated/M21-GAP-01802-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-103.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01802", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01802", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01803", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01803-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01803.py -- tests/files/web/generated/M21-GAP-01803-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01803", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01803", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01804", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01804-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01804.py -- tests/files/web/generated/M21-GAP-01804-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01804", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01804", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01805", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01805-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01805.py -- tests/files/web/generated/M21-GAP-01805-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01805", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01805", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01806", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01806-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01806.py -- tests/files/web/generated/M21-GAP-01806-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01806", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01806", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01807", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01807-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01807.py -- tests/files/web/generated/M21-GAP-01807-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01807", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01807", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01808", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01808-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01808.py -- tests/files/web/generated/M21-GAP-01808-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01808", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01808", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01809", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01809-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01809.py -- tests/files/web/generated/M21-GAP-01809-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01809", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01809", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01810", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01810-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01810.py -- tests/files/web/generated/M21-GAP-01810-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01810", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01810", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01811", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01811-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01811.py -- tests/files/web/generated/M21-GAP-01811-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01811", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01811", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01812", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01812-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01812.py -- tests/files/web/generated/M21-GAP-01812-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01812", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01812", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01813", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01813-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01813.py -- tests/files/web/generated/M21-GAP-01813-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01813", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01813", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01814", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01814-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01814.py -- tests/files/web/generated/M21-GAP-01814-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01814", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01814", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01815", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01815-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01815.py -- tests/files/web/generated/M21-GAP-01815-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01815", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01815", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01816", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01816-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01816.py -- tests/files/web/generated/M21-GAP-01816-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01816", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01816", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01817", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01817-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01817.py -- tests/files/web/generated/M21-GAP-01817-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01817", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01817", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01818", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01818-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01818.py -- tests/files/web/generated/M21-GAP-01818-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01818", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01818", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01819", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01819-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01819.py -- tests/files/web/generated/M21-GAP-01819-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01819", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01819", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01820", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01820-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01820.py -- tests/files/web/generated/M21-GAP-01820-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01820", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01820", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01821", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01821-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01821.py -- tests/files/web/generated/M21-GAP-01821-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01821", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01821", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01822", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01822-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01822.py -- tests/files/web/generated/M21-GAP-01822-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01822", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01822", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01823", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01823-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01823.py -- tests/files/web/generated/M21-GAP-01823-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01823", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01823", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01824", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01824-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01824.py -- tests/files/web/generated/M21-GAP-01824-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01824", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01824", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01825", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01825-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01825.py -- tests/files/web/generated/M21-GAP-01825-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01825", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01825", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01826", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01826-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01826.py -- tests/files/web/generated/M21-GAP-01826-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01826", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01826", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01827", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01827-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01827.py -- tests/files/web/generated/M21-GAP-01827-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01827", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01827", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01828", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01828-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01828.py -- tests/files/web/generated/M21-GAP-01828-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01828", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01828", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01829", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01829-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01829.py -- tests/files/web/generated/M21-GAP-01829-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01829", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01829", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01830", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01830-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01830.py -- tests/files/web/generated/M21-GAP-01830-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01830", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01830", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01831", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01831-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01831.py -- tests/files/web/generated/M21-GAP-01831-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01831", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01831", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01832", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01832-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01832.py -- tests/files/web/generated/M21-GAP-01832-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01832", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01832", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01833", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01833-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01833.py -- tests/files/web/generated/M21-GAP-01833-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01833", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01833", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01834", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01834-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01834.py -- tests/files/web/generated/M21-GAP-01834-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01834", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01834", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01835", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01835-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01835.py -- tests/files/web/generated/M21-GAP-01835-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01835", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01835", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01836", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01836-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01836.py -- tests/files/web/generated/M21-GAP-01836-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01836", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01836", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01837", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01837-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01837.py -- tests/files/web/generated/M21-GAP-01837-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01837", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01837", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01838", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01838-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01838.py -- tests/files/web/generated/M21-GAP-01838-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01838", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01838", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01839", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01839-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01839.py -- tests/files/web/generated/M21-GAP-01839-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01839", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01839", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01840", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01840-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01840.py -- tests/files/web/generated/M21-GAP-01840-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01840", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01840", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01841", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01841-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01841.py -- tests/files/web/generated/M21-GAP-01841-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01841", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01841", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01842", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01842-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01842.py -- tests/files/web/generated/M21-GAP-01842-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01842", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01842", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01843", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01843-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01843.py -- tests/files/web/generated/M21-GAP-01843-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01843", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01843", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01844", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01844-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01844.py -- tests/files/web/generated/M21-GAP-01844-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01844", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01844", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01845", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01845-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01845.py -- tests/files/web/generated/M21-GAP-01845-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01845", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01845", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01846", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01846-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-50.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01846.py -- tests/files/web/generated/M21-GAP-01846-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-50.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01846", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01846", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01847", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:51", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01847-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-51.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01847.py -- tests/files/web/generated/M21-GAP-01847-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-51.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01847", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01847", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01848", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:52", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01848-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-52.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01848.py -- tests/files/web/generated/M21-GAP-01848-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-52.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01848", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01848", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01849", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:53", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01849-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-53.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01849.py -- tests/files/web/generated/M21-GAP-01849-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-53.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01849", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01849", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01850", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:54", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01850-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-54.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01850.py -- tests/files/web/generated/M21-GAP-01850-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-54.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01850", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01850", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01851", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:55", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01851-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-55.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01851.py -- tests/files/web/generated/M21-GAP-01851-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-55.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01851", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01851", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01852", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:56", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01852-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-56.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01852.py -- tests/files/web/generated/M21-GAP-01852-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-56.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01852", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01852", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01853", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:57", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01853-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-57.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01853.py -- tests/files/web/generated/M21-GAP-01853-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-57.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01853", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01853", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01854", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:58", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01854-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-58.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01854.py -- tests/files/web/generated/M21-GAP-01854-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-58.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01854", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01854", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01855", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:59", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01855-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-59.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01855.py -- tests/files/web/generated/M21-GAP-01855-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-59.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01855", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01855", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01856", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01856-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01856.py -- tests/files/web/generated/M21-GAP-01856-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01856", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01856", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01857", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:60", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01857-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-60.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01857.py -- tests/files/web/generated/M21-GAP-01857-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-60.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01857", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01857", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01858", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:61", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01858-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-61.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01858.py -- tests/files/web/generated/M21-GAP-01858-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-61.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01858", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01858", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01859", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:62", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01859-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-62.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01859.py -- tests/files/web/generated/M21-GAP-01859-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-62.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01859", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01859", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01860", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:63", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01860-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-63.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01860.py -- tests/files/web/generated/M21-GAP-01860-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-63.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01860", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01860", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01861", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:64", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01861-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-64.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01861.py -- tests/files/web/generated/M21-GAP-01861-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-64.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01861", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01861", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01862", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:65", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01862-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-65.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01862.py -- tests/files/web/generated/M21-GAP-01862-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-65.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01862", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01862", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01863", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:66", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01863-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-66.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01863.py -- tests/files/web/generated/M21-GAP-01863-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-66.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01863", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01863", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01864", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:67", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01864-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-67.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01864.py -- tests/files/web/generated/M21-GAP-01864-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-67.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01864", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01864", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01865", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:68", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01865-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-68.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01865.py -- tests/files/web/generated/M21-GAP-01865-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-68.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01865", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01865", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01866", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:69", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01866-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-69.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01866.py -- tests/files/web/generated/M21-GAP-01866-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-69.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01866", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01866", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01867", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01867-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01867.py -- tests/files/web/generated/M21-GAP-01867-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01867", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01867", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01868", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:70", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01868-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-70.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01868.py -- tests/files/web/generated/M21-GAP-01868-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-70.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01868", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01868", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01869", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:71", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01869-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-71.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01869.py -- tests/files/web/generated/M21-GAP-01869-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-71.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01869", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01869", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01870", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:72", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01870-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-72.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01870.py -- tests/files/web/generated/M21-GAP-01870-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-72.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01870", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01870", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01871", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:73", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01871-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-73.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01871.py -- tests/files/web/generated/M21-GAP-01871-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-73.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01871", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01871", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01872", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:74", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01872-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-74.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01872.py -- tests/files/web/generated/M21-GAP-01872-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-74.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01872", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01872", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01873", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:75", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01873-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-75.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01873.py -- tests/files/web/generated/M21-GAP-01873-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-75.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01873", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01873", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01874", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:76", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01874-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-76.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01874.py -- tests/files/web/generated/M21-GAP-01874-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-76.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01874", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01874", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01875", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:77", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01875-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-77.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01875.py -- tests/files/web/generated/M21-GAP-01875-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-77.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01875", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01875", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01876", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:78", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01876-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-78.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01876.py -- tests/files/web/generated/M21-GAP-01876-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-78.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01876", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01876", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01877", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:79", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01877-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-79.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01877.py -- tests/files/web/generated/M21-GAP-01877-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-79.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01877", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01877", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01878", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01878-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01878.py -- tests/files/web/generated/M21-GAP-01878-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01878", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01878", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01879", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:80", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01879-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-80.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01879.py -- tests/files/web/generated/M21-GAP-01879-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-80.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01879", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01879", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01880", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:81", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01880-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-81.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01880.py -- tests/files/web/generated/M21-GAP-01880-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-81.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01880", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01880", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01881", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:82", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01881-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-82.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01881.py -- tests/files/web/generated/M21-GAP-01881-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-82.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01881", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01881", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01882", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:83", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01882-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-83.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01882.py -- tests/files/web/generated/M21-GAP-01882-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-83.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01882", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01882", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01883", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:84", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01883-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-84.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01883.py -- tests/files/web/generated/M21-GAP-01883-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-84.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01883", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01883", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01884", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:85", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01884-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-85.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01884.py -- tests/files/web/generated/M21-GAP-01884-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-85.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01884", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01884", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01885", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:86", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01885-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-86.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01885.py -- tests/files/web/generated/M21-GAP-01885-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-86.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01885", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01885", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01886", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:87", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01886-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-87.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01886.py -- tests/files/web/generated/M21-GAP-01886-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-87.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01886", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01886", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01887", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:88", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01887-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-88.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01887.py -- tests/files/web/generated/M21-GAP-01887-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-88.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01887", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01887", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01888", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:89", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01888-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-89.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01888.py -- tests/files/web/generated/M21-GAP-01888-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-89.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01888", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01888", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01889", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01889-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01889.py -- tests/files/web/generated/M21-GAP-01889-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01889", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01889", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01890", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:90", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01890-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-90.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01890.py -- tests/files/web/generated/M21-GAP-01890-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-90.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01890", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01890", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01891", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:91", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01891-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-91.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01891.py -- tests/files/web/generated/M21-GAP-01891-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-91.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01891", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01891", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01892", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:92", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01892-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-92.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01892.py -- tests/files/web/generated/M21-GAP-01892-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-92.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01892", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01892", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01893", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:93", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01893-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-93.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01893.py -- tests/files/web/generated/M21-GAP-01893-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-93.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01893", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01893", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01894", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:94", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01894-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-94.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01894.py -- tests/files/web/generated/M21-GAP-01894-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-94.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01894", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01894", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01895", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:95", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01895-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-95.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01895.py -- tests/files/web/generated/M21-GAP-01895-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-95.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01895", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01895", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01896", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:96", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01896-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-96.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01896.py -- tests/files/web/generated/M21-GAP-01896-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-96.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01896", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01896", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01897", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:97", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01897-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-97.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01897.py -- tests/files/web/generated/M21-GAP-01897-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-97.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01897", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01897", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01898", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:98", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01898-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-98.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01898.py -- tests/files/web/generated/M21-GAP-01898-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-98.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01898", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01898", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01899", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:99", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01899-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-99.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01899.py -- tests/files/web/generated/M21-GAP-01899-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-99.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01899", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01899", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01900", + "gapId": "keymap-item:Node Generic:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01900-keymap-item-Node-Generic-NODE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01900.py -- tests/files/web/generated/M21-GAP-01900-keymap-item-Node-Generic-NODE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01900", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01900", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01901", + "gapId": "keymap-item:Node Generic:NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01901-keymap-item-Node-Generic-NODE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01901.py -- tests/files/web/generated/M21-GAP-01901-keymap-item-Node-Generic-NODE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01901", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01901", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01902", + "gapId": "keymap-item:Node Link Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01902-keymap-item-Node-Link-Modal-Map-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01902.py -- tests/files/web/generated/M21-GAP-01902-keymap-item-Node-Link-Modal-Map-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01902", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01902", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01903", + "gapId": "keymap-item:Node Link Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01903-keymap-item-Node-Link-Modal-Map-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01903.py -- tests/files/web/generated/M21-GAP-01903-keymap-item-Node-Link-Modal-Map-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01903", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01903", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01904", + "gapId": "keymap-item:Node Link Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01904-keymap-item-Node-Link-Modal-Map-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01904.py -- tests/files/web/generated/M21-GAP-01904-keymap-item-Node-Link-Modal-Map-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01904", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01904", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01905", + "gapId": "keymap-item:Node Link Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01905-keymap-item-Node-Link-Modal-Map-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01905.py -- tests/files/web/generated/M21-GAP-01905-keymap-item-Node-Link-Modal-Map-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01905", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01905", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01906", + "gapId": "keymap-item:Node Link Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01906-keymap-item-Node-Link-Modal-Map-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01906.py -- tests/files/web/generated/M21-GAP-01906-keymap-item-Node-Link-Modal-Map-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01906", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01906", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01907", + "gapId": "keymap-item:Node Link Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01907-keymap-item-Node-Link-Modal-Map-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01907.py -- tests/files/web/generated/M21-GAP-01907-keymap-item-Node-Link-Modal-Map-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01907", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01907", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01908", + "gapId": "keymap-item:Node Resize Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01908-keymap-item-Node-Resize-Modal-Map-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01908.py -- tests/files/web/generated/M21-GAP-01908-keymap-item-Node-Resize-Modal-Map-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01908", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01908", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01909", + "gapId": "keymap-item:Node Resize Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01909-keymap-item-Node-Resize-Modal-Map-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01909.py -- tests/files/web/generated/M21-GAP-01909-keymap-item-Node-Resize-Modal-Map-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01909", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01909", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01910", + "gapId": "keymap-item:Node Resize Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01910-keymap-item-Node-Resize-Modal-Map-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01910.py -- tests/files/web/generated/M21-GAP-01910-keymap-item-Node-Resize-Modal-Map-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01910", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01910", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01911", + "gapId": "keymap-item:Node Resize Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01911-keymap-item-Node-Resize-Modal-Map-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01911.py -- tests/files/web/generated/M21-GAP-01911-keymap-item-Node-Resize-Modal-Map-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01911", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01911", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01912", + "gapId": "keymap-item:Node Resize Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01912-keymap-item-Node-Resize-Modal-Map-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01912.py -- tests/files/web/generated/M21-GAP-01912-keymap-item-Node-Resize-Modal-Map-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01912", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01912", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01913", + "gapId": "keymap-item:Node Resize Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01913-keymap-item-Node-Resize-Modal-Map-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01913.py -- tests/files/web/generated/M21-GAP-01913-keymap-item-Node-Resize-Modal-Map-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01913", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01913", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01914", + "gapId": "keymap-item:Node Resize Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01914-keymap-item-Node-Resize-Modal-Map-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01914.py -- tests/files/web/generated/M21-GAP-01914-keymap-item-Node-Resize-Modal-Map-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01914", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01914", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01915", + "gapId": "keymap-item:Node Tool: Add Reroute:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01915-keymap-item-Node-Tool-Add-Reroute-NODE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01915.py -- tests/files/web/generated/M21-GAP-01915-keymap-item-Node-Tool-Add-Reroute-NODE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01915", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01915", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01916", + "gapId": "keymap-item:Node Tool: Links Cut:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01916-keymap-item-Node-Tool-Links-Cut-NODE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01916.py -- tests/files/web/generated/M21-GAP-01916-keymap-item-Node-Tool-Links-Cut-NODE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01916", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01916", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01917", + "gapId": "keymap-item:Node Tool: Mute Links:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01917-keymap-item-Node-Tool-Mute-Links-NODE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01917.py -- tests/files/web/generated/M21-GAP-01917-keymap-item-Node-Tool-Mute-Links-NODE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01917", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01917", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01918", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01918-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01918.py -- tests/files/web/generated/M21-GAP-01918-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01918", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01918", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01919", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01919-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01919.py -- tests/files/web/generated/M21-GAP-01919-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01919", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01919", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01920", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01920-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01920.py -- tests/files/web/generated/M21-GAP-01920-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01920", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01920", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01921", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01921-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01921.py -- tests/files/web/generated/M21-GAP-01921-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01921", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01921", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01922", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01922-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01922.py -- tests/files/web/generated/M21-GAP-01922-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01922", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01922", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01923", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01923-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01923.py -- tests/files/web/generated/M21-GAP-01923-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01923", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01923", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01924", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01924-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01924.py -- tests/files/web/generated/M21-GAP-01924-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01924", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01924", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01925", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01925-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01925.py -- tests/files/web/generated/M21-GAP-01925-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01925", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01925", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01926", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01926-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01926.py -- tests/files/web/generated/M21-GAP-01926-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01926", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01926", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01927", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01927-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01927.py -- tests/files/web/generated/M21-GAP-01927-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01927", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01927", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01928", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01928-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01928.py -- tests/files/web/generated/M21-GAP-01928-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01928", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01928", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01929", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01929-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01929.py -- tests/files/web/generated/M21-GAP-01929-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01929", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01929", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01930", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01930-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01930.py -- tests/files/web/generated/M21-GAP-01930-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01930", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01930", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01931", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01931-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01931.py -- tests/files/web/generated/M21-GAP-01931-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01931", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01931", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01932", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01932-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01932.py -- tests/files/web/generated/M21-GAP-01932-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01932", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01932", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01933", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01933-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01933.py -- tests/files/web/generated/M21-GAP-01933-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01933", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01933", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01934", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01934-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01934.py -- tests/files/web/generated/M21-GAP-01934-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01934", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01934", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01935", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01935-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01935.py -- tests/files/web/generated/M21-GAP-01935-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01935", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01935", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01936", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01936-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01936.py -- tests/files/web/generated/M21-GAP-01936-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01936", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01936", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01937", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01937-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01937.py -- tests/files/web/generated/M21-GAP-01937-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01937", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01937", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01938", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01938-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01938.py -- tests/files/web/generated/M21-GAP-01938-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01938", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01938", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01939", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01939-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01939.py -- tests/files/web/generated/M21-GAP-01939-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01939", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01939", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01940", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01940-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01940.py -- tests/files/web/generated/M21-GAP-01940-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01940", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01940", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01941", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01941-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01941.py -- tests/files/web/generated/M21-GAP-01941-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01941", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01941", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01942", + "gapId": "keymap-item:Node Tool: Select Circle (fallback):NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01942-keymap-item-Node-Tool-Select-Circle-fallback-NODE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01942.py -- tests/files/web/generated/M21-GAP-01942-keymap-item-Node-Tool-Select-Circle-fallback-NODE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01942", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01942", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01943", + "gapId": "keymap-item:Node Tool: Select Circle (fallback):NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01943-keymap-item-Node-Tool-Select-Circle-fallback-NODE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01943.py -- tests/files/web/generated/M21-GAP-01943-keymap-item-Node-Tool-Select-Circle-fallback-NODE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01943", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01943", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01944", + "gapId": "keymap-item:Node Tool: Select Circle (fallback):NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01944-keymap-item-Node-Tool-Select-Circle-fallback-NODE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01944.py -- tests/files/web/generated/M21-GAP-01944-keymap-item-Node-Tool-Select-Circle-fallback-NODE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01944", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01944", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01945", + "gapId": "keymap-item:Node Tool: Select Circle:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01945-keymap-item-Node-Tool-Select-Circle-NODE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01945.py -- tests/files/web/generated/M21-GAP-01945-keymap-item-Node-Tool-Select-Circle-NODE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01945", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01945", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01946", + "gapId": "keymap-item:Node Tool: Select Circle:NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01946-keymap-item-Node-Tool-Select-Circle-NODE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01946.py -- tests/files/web/generated/M21-GAP-01946-keymap-item-Node-Tool-Select-Circle-NODE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01946", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01946", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01947", + "gapId": "keymap-item:Node Tool: Select Circle:NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01947-keymap-item-Node-Tool-Select-Circle-NODE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01947.py -- tests/files/web/generated/M21-GAP-01947-keymap-item-Node-Tool-Select-Circle-NODE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01947", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01947", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01948", + "gapId": "keymap-item:Node Tool: Select Lasso (fallback):NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01948-keymap-item-Node-Tool-Select-Lasso-fallback-NODE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01948.py -- tests/files/web/generated/M21-GAP-01948-keymap-item-Node-Tool-Select-Lasso-fallback-NODE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01948", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01948", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01949", + "gapId": "keymap-item:Node Tool: Select Lasso (fallback):NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01949-keymap-item-Node-Tool-Select-Lasso-fallback-NODE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01949.py -- tests/files/web/generated/M21-GAP-01949-keymap-item-Node-Tool-Select-Lasso-fallback-NODE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01949", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01949", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01950", + "gapId": "keymap-item:Node Tool: Select Lasso (fallback):NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01950-keymap-item-Node-Tool-Select-Lasso-fallback-NODE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01950.py -- tests/files/web/generated/M21-GAP-01950-keymap-item-Node-Tool-Select-Lasso-fallback-NODE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01950", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01950", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01951", + "gapId": "keymap-item:Node Tool: Select Lasso:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01951-keymap-item-Node-Tool-Select-Lasso-NODE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01951.py -- tests/files/web/generated/M21-GAP-01951-keymap-item-Node-Tool-Select-Lasso-NODE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01951", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01951", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01952", + "gapId": "keymap-item:Node Tool: Select Lasso:NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01952-keymap-item-Node-Tool-Select-Lasso-NODE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01952.py -- tests/files/web/generated/M21-GAP-01952-keymap-item-Node-Tool-Select-Lasso-NODE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01952", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01952", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01953", + "gapId": "keymap-item:Node Tool: Select Lasso:NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01953-keymap-item-Node-Tool-Select-Lasso-NODE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01953.py -- tests/files/web/generated/M21-GAP-01953-keymap-item-Node-Tool-Select-Lasso-NODE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01953", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01953", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01954", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01954-keymap-item-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01954.py -- tests/files/web/generated/M21-GAP-01954-keymap-item-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01954", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01954", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01955", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01955-keymap-item-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01955.py -- tests/files/web/generated/M21-GAP-01955-keymap-item-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01955", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01955", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01956", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01956-keymap-item-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01956.py -- tests/files/web/generated/M21-GAP-01956-keymap-item-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01956", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01956", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01957", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01957-keymap-item-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01957.py -- tests/files/web/generated/M21-GAP-01957-keymap-item-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01957", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01957", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01958", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01958-keymap-item-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01958.py -- tests/files/web/generated/M21-GAP-01958-keymap-item-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01958", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01958", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01959", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01959-keymap-item-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01959.py -- tests/files/web/generated/M21-GAP-01959-keymap-item-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01959", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01959", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01960", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01960-keymap-item-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01960.py -- tests/files/web/generated/M21-GAP-01960-keymap-item-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01960", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01960", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01961", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01961-keymap-item-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01961.py -- tests/files/web/generated/M21-GAP-01961-keymap-item-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01961", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01961", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01962", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01962-keymap-item-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01962.py -- tests/files/web/generated/M21-GAP-01962-keymap-item-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01962", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01962", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01963", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01963-keymap-item-Node-Tool-Tweak-NODE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01963.py -- tests/files/web/generated/M21-GAP-01963-keymap-item-Node-Tool-Tweak-NODE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01963", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01963", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01964", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01964-keymap-item-Node-Tool-Tweak-NODE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01964.py -- tests/files/web/generated/M21-GAP-01964-keymap-item-Node-Tool-Tweak-NODE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01964", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01964", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01965", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01965-keymap-item-Node-Tool-Tweak-NODE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01965.py -- tests/files/web/generated/M21-GAP-01965-keymap-item-Node-Tool-Tweak-NODE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01965", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01965", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01966", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01966-keymap-item-Node-Tool-Tweak-NODE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01966.py -- tests/files/web/generated/M21-GAP-01966-keymap-item-Node-Tool-Tweak-NODE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01966", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01966", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01967", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01967-keymap-item-Node-Tool-Tweak-NODE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01967.py -- tests/files/web/generated/M21-GAP-01967-keymap-item-Node-Tool-Tweak-NODE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01967", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01967", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01968", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01968-keymap-item-Node-Tool-Tweak-NODE_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01968.py -- tests/files/web/generated/M21-GAP-01968-keymap-item-Node-Tool-Tweak-NODE_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01968", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01968", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01969", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01969-keymap-item-Node-Tool-Tweak-NODE_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01969.py -- tests/files/web/generated/M21-GAP-01969-keymap-item-Node-Tool-Tweak-NODE_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01969", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01969", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01970", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01970-keymap-item-Node-Tool-Tweak-NODE_EDITOR-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01970.py -- tests/files/web/generated/M21-GAP-01970-keymap-item-Node-Tool-Tweak-NODE_EDITOR-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01970", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01970", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01971", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01971-keymap-item-Node-Tool-Tweak-NODE_EDITOR-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01971.py -- tests/files/web/generated/M21-GAP-01971-keymap-item-Node-Tool-Tweak-NODE_EDITOR-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01971", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01971", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01972", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01972-keymap-item-Object-Mode-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01972.py -- tests/files/web/generated/M21-GAP-01972-keymap-item-Object-Mode-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01972", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01972", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01973", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01973-keymap-item-Object-Mode-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01973.py -- tests/files/web/generated/M21-GAP-01973-keymap-item-Object-Mode-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01973", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01973", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01974", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01974-keymap-item-Object-Mode-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01974.py -- tests/files/web/generated/M21-GAP-01974-keymap-item-Object-Mode-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01974", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01974", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01975", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01975-keymap-item-Object-Mode-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01975.py -- tests/files/web/generated/M21-GAP-01975-keymap-item-Object-Mode-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01975", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01975", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01976", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01976-keymap-item-Object-Mode-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01976.py -- tests/files/web/generated/M21-GAP-01976-keymap-item-Object-Mode-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01976", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01976", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01977", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01977-keymap-item-Object-Mode-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01977.py -- tests/files/web/generated/M21-GAP-01977-keymap-item-Object-Mode-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01977", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01977", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01978", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01978-keymap-item-Object-Mode-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01978.py -- tests/files/web/generated/M21-GAP-01978-keymap-item-Object-Mode-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01978", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01978", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01979", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01979-keymap-item-Object-Mode-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01979.py -- tests/files/web/generated/M21-GAP-01979-keymap-item-Object-Mode-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01979", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01979", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01980", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01980-keymap-item-Object-Mode-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01980.py -- tests/files/web/generated/M21-GAP-01980-keymap-item-Object-Mode-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01980", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01980", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01981", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01981-keymap-item-Object-Mode-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01981.py -- tests/files/web/generated/M21-GAP-01981-keymap-item-Object-Mode-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01981", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01981", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01982", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01982-keymap-item-Object-Mode-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01982.py -- tests/files/web/generated/M21-GAP-01982-keymap-item-Object-Mode-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01982", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01982", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01983", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01983-keymap-item-Object-Mode-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01983.py -- tests/files/web/generated/M21-GAP-01983-keymap-item-Object-Mode-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01983", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01983", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01984", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01984-keymap-item-Object-Mode-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01984.py -- tests/files/web/generated/M21-GAP-01984-keymap-item-Object-Mode-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01984", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01984", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01985", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01985-keymap-item-Object-Mode-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01985.py -- tests/files/web/generated/M21-GAP-01985-keymap-item-Object-Mode-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01985", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01985", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01986", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01986-keymap-item-Object-Mode-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01986.py -- tests/files/web/generated/M21-GAP-01986-keymap-item-Object-Mode-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01986", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01986", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01987", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01987-keymap-item-Object-Mode-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01987.py -- tests/files/web/generated/M21-GAP-01987-keymap-item-Object-Mode-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01987", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01987", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01988", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01988-keymap-item-Object-Mode-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01988.py -- tests/files/web/generated/M21-GAP-01988-keymap-item-Object-Mode-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01988", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01988", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01989", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01989-keymap-item-Object-Mode-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01989.py -- tests/files/web/generated/M21-GAP-01989-keymap-item-Object-Mode-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01989", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01989", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01990", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01990-keymap-item-Object-Mode-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01990.py -- tests/files/web/generated/M21-GAP-01990-keymap-item-Object-Mode-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01990", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01990", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01991", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01991-keymap-item-Object-Mode-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01991.py -- tests/files/web/generated/M21-GAP-01991-keymap-item-Object-Mode-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01991", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01991", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01992", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01992-keymap-item-Object-Mode-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01992.py -- tests/files/web/generated/M21-GAP-01992-keymap-item-Object-Mode-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01992", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01992", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01993", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01993-keymap-item-Object-Mode-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01993.py -- tests/files/web/generated/M21-GAP-01993-keymap-item-Object-Mode-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01993", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01993", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01994", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01994-keymap-item-Object-Mode-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01994.py -- tests/files/web/generated/M21-GAP-01994-keymap-item-Object-Mode-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01994", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01994", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01995", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01995-keymap-item-Object-Mode-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01995.py -- tests/files/web/generated/M21-GAP-01995-keymap-item-Object-Mode-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01995", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01995", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01996", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01996-keymap-item-Object-Mode-EMPTY-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01996.py -- tests/files/web/generated/M21-GAP-01996-keymap-item-Object-Mode-EMPTY-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01996", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01996", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01997", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01997-keymap-item-Object-Mode-EMPTY-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01997.py -- tests/files/web/generated/M21-GAP-01997-keymap-item-Object-Mode-EMPTY-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01997", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01997", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01998", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01998-keymap-item-Object-Mode-EMPTY-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01998.py -- tests/files/web/generated/M21-GAP-01998-keymap-item-Object-Mode-EMPTY-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01998", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01998", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01999", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01999-keymap-item-Object-Mode-EMPTY-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01999.py -- tests/files/web/generated/M21-GAP-01999-keymap-item-Object-Mode-EMPTY-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01999", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01999", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02000", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02000-keymap-item-Object-Mode-EMPTY-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02000.py -- tests/files/web/generated/M21-GAP-02000-keymap-item-Object-Mode-EMPTY-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02000", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02000", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02001", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02001-keymap-item-Object-Mode-EMPTY-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02001.py -- tests/files/web/generated/M21-GAP-02001-keymap-item-Object-Mode-EMPTY-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02001", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02001", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02002", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02002-keymap-item-Object-Mode-EMPTY-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02002.py -- tests/files/web/generated/M21-GAP-02002-keymap-item-Object-Mode-EMPTY-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02002", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02002", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02003", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02003-keymap-item-Object-Mode-EMPTY-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02003.py -- tests/files/web/generated/M21-GAP-02003-keymap-item-Object-Mode-EMPTY-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02003", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02003", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02004", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02004-keymap-item-Object-Mode-EMPTY-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02004.py -- tests/files/web/generated/M21-GAP-02004-keymap-item-Object-Mode-EMPTY-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02004", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02004", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02005", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02005-keymap-item-Object-Mode-EMPTY-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02005.py -- tests/files/web/generated/M21-GAP-02005-keymap-item-Object-Mode-EMPTY-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02005", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02005", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02006", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02006-keymap-item-Object-Mode-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02006.py -- tests/files/web/generated/M21-GAP-02006-keymap-item-Object-Mode-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02006", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02006", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02007", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02007-keymap-item-Object-Mode-EMPTY-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02007.py -- tests/files/web/generated/M21-GAP-02007-keymap-item-Object-Mode-EMPTY-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02007", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02007", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02008", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02008-keymap-item-Object-Mode-EMPTY-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02008.py -- tests/files/web/generated/M21-GAP-02008-keymap-item-Object-Mode-EMPTY-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02008", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02008", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02009", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02009-keymap-item-Object-Mode-EMPTY-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02009.py -- tests/files/web/generated/M21-GAP-02009-keymap-item-Object-Mode-EMPTY-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02009", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02009", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02010", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02010-keymap-item-Object-Mode-EMPTY-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02010.py -- tests/files/web/generated/M21-GAP-02010-keymap-item-Object-Mode-EMPTY-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02010", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02010", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02011", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02011-keymap-item-Object-Mode-EMPTY-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02011.py -- tests/files/web/generated/M21-GAP-02011-keymap-item-Object-Mode-EMPTY-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02011", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02011", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02012", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02012-keymap-item-Object-Mode-EMPTY-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02012.py -- tests/files/web/generated/M21-GAP-02012-keymap-item-Object-Mode-EMPTY-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02012", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02012", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02013", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02013-keymap-item-Object-Mode-EMPTY-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02013.py -- tests/files/web/generated/M21-GAP-02013-keymap-item-Object-Mode-EMPTY-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02013", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02013", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02014", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02014-keymap-item-Object-Mode-EMPTY-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02014.py -- tests/files/web/generated/M21-GAP-02014-keymap-item-Object-Mode-EMPTY-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02014", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02014", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02015", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02015-keymap-item-Object-Mode-EMPTY-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02015.py -- tests/files/web/generated/M21-GAP-02015-keymap-item-Object-Mode-EMPTY-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02015", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02015", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02016", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02016-keymap-item-Object-Mode-EMPTY-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02016.py -- tests/files/web/generated/M21-GAP-02016-keymap-item-Object-Mode-EMPTY-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02016", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02016", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02017", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02017-keymap-item-Object-Mode-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02017.py -- tests/files/web/generated/M21-GAP-02017-keymap-item-Object-Mode-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02017", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02017", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02018", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02018-keymap-item-Object-Mode-EMPTY-WINDOW-50.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02018.py -- tests/files/web/generated/M21-GAP-02018-keymap-item-Object-Mode-EMPTY-WINDOW-50.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02018", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02018", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02019", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02019-keymap-item-Object-Mode-EMPTY-WINDOW-51.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02019.py -- tests/files/web/generated/M21-GAP-02019-keymap-item-Object-Mode-EMPTY-WINDOW-51.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02019", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02019", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02020", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:52", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02020-keymap-item-Object-Mode-EMPTY-WINDOW-52.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02020.py -- tests/files/web/generated/M21-GAP-02020-keymap-item-Object-Mode-EMPTY-WINDOW-52.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02020", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02020", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02021", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:53", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02021-keymap-item-Object-Mode-EMPTY-WINDOW-53.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02021.py -- tests/files/web/generated/M21-GAP-02021-keymap-item-Object-Mode-EMPTY-WINDOW-53.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02021", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02021", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02022", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:54", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02022-keymap-item-Object-Mode-EMPTY-WINDOW-54.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02022.py -- tests/files/web/generated/M21-GAP-02022-keymap-item-Object-Mode-EMPTY-WINDOW-54.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02022", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02022", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02023", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:55", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02023-keymap-item-Object-Mode-EMPTY-WINDOW-55.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02023.py -- tests/files/web/generated/M21-GAP-02023-keymap-item-Object-Mode-EMPTY-WINDOW-55.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02023", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02023", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02024", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:56", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02024-keymap-item-Object-Mode-EMPTY-WINDOW-56.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02024.py -- tests/files/web/generated/M21-GAP-02024-keymap-item-Object-Mode-EMPTY-WINDOW-56.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02024", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02024", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02025", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:57", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02025-keymap-item-Object-Mode-EMPTY-WINDOW-57.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02025.py -- tests/files/web/generated/M21-GAP-02025-keymap-item-Object-Mode-EMPTY-WINDOW-57.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02025", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02025", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02026", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:58", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02026-keymap-item-Object-Mode-EMPTY-WINDOW-58.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02026.py -- tests/files/web/generated/M21-GAP-02026-keymap-item-Object-Mode-EMPTY-WINDOW-58.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02026", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02026", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02027", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02027-keymap-item-Object-Mode-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02027.py -- tests/files/web/generated/M21-GAP-02027-keymap-item-Object-Mode-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02027", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02027", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02028", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02028-keymap-item-Object-Mode-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02028.py -- tests/files/web/generated/M21-GAP-02028-keymap-item-Object-Mode-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02028", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02028", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02029", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02029-keymap-item-Object-Mode-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02029.py -- tests/files/web/generated/M21-GAP-02029-keymap-item-Object-Mode-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02029", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02029", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02030", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02030-keymap-item-Object-Mode-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02030.py -- tests/files/web/generated/M21-GAP-02030-keymap-item-Object-Mode-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02030", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02030", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02031", + "gapId": "keymap-item:Object Non-modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02031-keymap-item-Object-Non-modal-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02031.py -- tests/files/web/generated/M21-GAP-02031-keymap-item-Object-Non-modal-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02031", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02031", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02032", + "gapId": "keymap-item:Object Non-modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02032-keymap-item-Object-Non-modal-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02032.py -- tests/files/web/generated/M21-GAP-02032-keymap-item-Object-Non-modal-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02032", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02032", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02033", + "gapId": "keymap-item:Object Non-modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02033-keymap-item-Object-Non-modal-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02033.py -- tests/files/web/generated/M21-GAP-02033-keymap-item-Object-Non-modal-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02033", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02033", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02034", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02034-keymap-item-Outliner-OUTLINER-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02034.py -- tests/files/web/generated/M21-GAP-02034-keymap-item-Outliner-OUTLINER-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02034", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02034", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02035", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02035-keymap-item-Outliner-OUTLINER-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02035.py -- tests/files/web/generated/M21-GAP-02035-keymap-item-Outliner-OUTLINER-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02035", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02035", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02036", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02036-keymap-item-Outliner-OUTLINER-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02036.py -- tests/files/web/generated/M21-GAP-02036-keymap-item-Outliner-OUTLINER-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02036", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02036", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02037", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:100", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02037-keymap-item-Outliner-OUTLINER-WINDOW-100.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02037.py -- tests/files/web/generated/M21-GAP-02037-keymap-item-Outliner-OUTLINER-WINDOW-100.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02037", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02037", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02038", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:101", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02038-keymap-item-Outliner-OUTLINER-WINDOW-101.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02038.py -- tests/files/web/generated/M21-GAP-02038-keymap-item-Outliner-OUTLINER-WINDOW-101.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02038", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02038", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02039", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:102", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02039-keymap-item-Outliner-OUTLINER-WINDOW-102.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02039.py -- tests/files/web/generated/M21-GAP-02039-keymap-item-Outliner-OUTLINER-WINDOW-102.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02039", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02039", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02040", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02040-keymap-item-Outliner-OUTLINER-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02040.py -- tests/files/web/generated/M21-GAP-02040-keymap-item-Outliner-OUTLINER-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02040", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02040", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02041", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02041-keymap-item-Outliner-OUTLINER-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02041.py -- tests/files/web/generated/M21-GAP-02041-keymap-item-Outliner-OUTLINER-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02041", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02041", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02042", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02042-keymap-item-Outliner-OUTLINER-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02042.py -- tests/files/web/generated/M21-GAP-02042-keymap-item-Outliner-OUTLINER-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02042", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02042", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02043", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02043-keymap-item-Outliner-OUTLINER-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02043.py -- tests/files/web/generated/M21-GAP-02043-keymap-item-Outliner-OUTLINER-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02043", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02043", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02044", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02044-keymap-item-Outliner-OUTLINER-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02044.py -- tests/files/web/generated/M21-GAP-02044-keymap-item-Outliner-OUTLINER-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02044", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02044", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02045", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02045-keymap-item-Outliner-OUTLINER-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02045.py -- tests/files/web/generated/M21-GAP-02045-keymap-item-Outliner-OUTLINER-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02045", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02045", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02046", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02046-keymap-item-Outliner-OUTLINER-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02046.py -- tests/files/web/generated/M21-GAP-02046-keymap-item-Outliner-OUTLINER-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02046", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02046", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02047", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02047-keymap-item-Outliner-OUTLINER-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02047.py -- tests/files/web/generated/M21-GAP-02047-keymap-item-Outliner-OUTLINER-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02047", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02047", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02048", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02048-keymap-item-Outliner-OUTLINER-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02048.py -- tests/files/web/generated/M21-GAP-02048-keymap-item-Outliner-OUTLINER-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02048", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02048", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02049", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02049-keymap-item-Outliner-OUTLINER-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02049.py -- tests/files/web/generated/M21-GAP-02049-keymap-item-Outliner-OUTLINER-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02049", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02049", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02050", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02050-keymap-item-Outliner-OUTLINER-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02050.py -- tests/files/web/generated/M21-GAP-02050-keymap-item-Outliner-OUTLINER-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02050", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02050", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02051", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02051-keymap-item-Outliner-OUTLINER-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02051.py -- tests/files/web/generated/M21-GAP-02051-keymap-item-Outliner-OUTLINER-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02051", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02051", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02052", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02052-keymap-item-Outliner-OUTLINER-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02052.py -- tests/files/web/generated/M21-GAP-02052-keymap-item-Outliner-OUTLINER-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02052", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02052", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02053", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02053-keymap-item-Outliner-OUTLINER-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02053.py -- tests/files/web/generated/M21-GAP-02053-keymap-item-Outliner-OUTLINER-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02053", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02053", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02054", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02054-keymap-item-Outliner-OUTLINER-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02054.py -- tests/files/web/generated/M21-GAP-02054-keymap-item-Outliner-OUTLINER-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02054", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02054", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02055", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02055-keymap-item-Outliner-OUTLINER-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02055.py -- tests/files/web/generated/M21-GAP-02055-keymap-item-Outliner-OUTLINER-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02055", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02055", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02056", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02056-keymap-item-Outliner-OUTLINER-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02056.py -- tests/files/web/generated/M21-GAP-02056-keymap-item-Outliner-OUTLINER-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02056", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02056", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02057", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02057-keymap-item-Outliner-OUTLINER-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02057.py -- tests/files/web/generated/M21-GAP-02057-keymap-item-Outliner-OUTLINER-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02057", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02057", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02058", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02058-keymap-item-Outliner-OUTLINER-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02058.py -- tests/files/web/generated/M21-GAP-02058-keymap-item-Outliner-OUTLINER-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02058", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02058", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02059", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02059-keymap-item-Outliner-OUTLINER-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02059.py -- tests/files/web/generated/M21-GAP-02059-keymap-item-Outliner-OUTLINER-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02059", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02059", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02060", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02060-keymap-item-Outliner-OUTLINER-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02060.py -- tests/files/web/generated/M21-GAP-02060-keymap-item-Outliner-OUTLINER-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02060", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02060", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02061", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02061-keymap-item-Outliner-OUTLINER-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02061.py -- tests/files/web/generated/M21-GAP-02061-keymap-item-Outliner-OUTLINER-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02061", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02061", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02062", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02062-keymap-item-Outliner-OUTLINER-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02062.py -- tests/files/web/generated/M21-GAP-02062-keymap-item-Outliner-OUTLINER-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02062", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02062", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02063", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02063-keymap-item-Outliner-OUTLINER-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02063.py -- tests/files/web/generated/M21-GAP-02063-keymap-item-Outliner-OUTLINER-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02063", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02063", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02064", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02064-keymap-item-Outliner-OUTLINER-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02064.py -- tests/files/web/generated/M21-GAP-02064-keymap-item-Outliner-OUTLINER-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02064", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02064", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02065", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02065-keymap-item-Outliner-OUTLINER-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02065.py -- tests/files/web/generated/M21-GAP-02065-keymap-item-Outliner-OUTLINER-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02065", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02065", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02066", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02066-keymap-item-Outliner-OUTLINER-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02066.py -- tests/files/web/generated/M21-GAP-02066-keymap-item-Outliner-OUTLINER-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02066", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02066", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02067", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02067-keymap-item-Outliner-OUTLINER-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02067.py -- tests/files/web/generated/M21-GAP-02067-keymap-item-Outliner-OUTLINER-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02067", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02067", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02068", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02068-keymap-item-Outliner-OUTLINER-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02068.py -- tests/files/web/generated/M21-GAP-02068-keymap-item-Outliner-OUTLINER-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02068", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02068", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02069", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02069-keymap-item-Outliner-OUTLINER-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02069.py -- tests/files/web/generated/M21-GAP-02069-keymap-item-Outliner-OUTLINER-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02069", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02069", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02070", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02070-keymap-item-Outliner-OUTLINER-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02070.py -- tests/files/web/generated/M21-GAP-02070-keymap-item-Outliner-OUTLINER-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02070", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02070", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02071", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02071-keymap-item-Outliner-OUTLINER-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02071.py -- tests/files/web/generated/M21-GAP-02071-keymap-item-Outliner-OUTLINER-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02071", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02071", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02072", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02072-keymap-item-Outliner-OUTLINER-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02072.py -- tests/files/web/generated/M21-GAP-02072-keymap-item-Outliner-OUTLINER-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02072", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02072", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02073", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02073-keymap-item-Outliner-OUTLINER-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02073.py -- tests/files/web/generated/M21-GAP-02073-keymap-item-Outliner-OUTLINER-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02073", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02073", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02074", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02074-keymap-item-Outliner-OUTLINER-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02074.py -- tests/files/web/generated/M21-GAP-02074-keymap-item-Outliner-OUTLINER-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02074", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02074", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02075", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02075-keymap-item-Outliner-OUTLINER-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02075.py -- tests/files/web/generated/M21-GAP-02075-keymap-item-Outliner-OUTLINER-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02075", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02075", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02076", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02076-keymap-item-Outliner-OUTLINER-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02076.py -- tests/files/web/generated/M21-GAP-02076-keymap-item-Outliner-OUTLINER-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02076", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02076", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02077", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02077-keymap-item-Outliner-OUTLINER-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02077.py -- tests/files/web/generated/M21-GAP-02077-keymap-item-Outliner-OUTLINER-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02077", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02077", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02078", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02078-keymap-item-Outliner-OUTLINER-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02078.py -- tests/files/web/generated/M21-GAP-02078-keymap-item-Outliner-OUTLINER-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02078", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02078", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02079", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02079-keymap-item-Outliner-OUTLINER-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02079.py -- tests/files/web/generated/M21-GAP-02079-keymap-item-Outliner-OUTLINER-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02079", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02079", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02080", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02080-keymap-item-Outliner-OUTLINER-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02080.py -- tests/files/web/generated/M21-GAP-02080-keymap-item-Outliner-OUTLINER-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02080", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02080", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02081", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02081-keymap-item-Outliner-OUTLINER-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02081.py -- tests/files/web/generated/M21-GAP-02081-keymap-item-Outliner-OUTLINER-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02081", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02081", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02082", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02082-keymap-item-Outliner-OUTLINER-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02082.py -- tests/files/web/generated/M21-GAP-02082-keymap-item-Outliner-OUTLINER-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02082", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02082", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02083", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:50", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02083-keymap-item-Outliner-OUTLINER-WINDOW-50.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02083.py -- tests/files/web/generated/M21-GAP-02083-keymap-item-Outliner-OUTLINER-WINDOW-50.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02083", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02083", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02084", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:51", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02084-keymap-item-Outliner-OUTLINER-WINDOW-51.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02084.py -- tests/files/web/generated/M21-GAP-02084-keymap-item-Outliner-OUTLINER-WINDOW-51.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02084", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02084", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02085", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:52", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02085-keymap-item-Outliner-OUTLINER-WINDOW-52.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02085.py -- tests/files/web/generated/M21-GAP-02085-keymap-item-Outliner-OUTLINER-WINDOW-52.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02085", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02085", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02086", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:53", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02086-keymap-item-Outliner-OUTLINER-WINDOW-53.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02086.py -- tests/files/web/generated/M21-GAP-02086-keymap-item-Outliner-OUTLINER-WINDOW-53.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02086", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02086", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02087", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:54", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02087-keymap-item-Outliner-OUTLINER-WINDOW-54.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02087.py -- tests/files/web/generated/M21-GAP-02087-keymap-item-Outliner-OUTLINER-WINDOW-54.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02087", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02087", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02088", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:55", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02088-keymap-item-Outliner-OUTLINER-WINDOW-55.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02088.py -- tests/files/web/generated/M21-GAP-02088-keymap-item-Outliner-OUTLINER-WINDOW-55.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02088", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02088", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02089", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:56", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02089-keymap-item-Outliner-OUTLINER-WINDOW-56.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02089.py -- tests/files/web/generated/M21-GAP-02089-keymap-item-Outliner-OUTLINER-WINDOW-56.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02089", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02089", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02090", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:57", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02090-keymap-item-Outliner-OUTLINER-WINDOW-57.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02090.py -- tests/files/web/generated/M21-GAP-02090-keymap-item-Outliner-OUTLINER-WINDOW-57.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02090", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02090", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02091", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:58", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02091-keymap-item-Outliner-OUTLINER-WINDOW-58.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02091.py -- tests/files/web/generated/M21-GAP-02091-keymap-item-Outliner-OUTLINER-WINDOW-58.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02091", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02091", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02092", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:59", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02092-keymap-item-Outliner-OUTLINER-WINDOW-59.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02092.py -- tests/files/web/generated/M21-GAP-02092-keymap-item-Outliner-OUTLINER-WINDOW-59.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02092", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02092", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02093", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02093-keymap-item-Outliner-OUTLINER-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02093.py -- tests/files/web/generated/M21-GAP-02093-keymap-item-Outliner-OUTLINER-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02093", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02093", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02094", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:60", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02094-keymap-item-Outliner-OUTLINER-WINDOW-60.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02094.py -- tests/files/web/generated/M21-GAP-02094-keymap-item-Outliner-OUTLINER-WINDOW-60.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02094", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02094", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02095", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:61", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02095-keymap-item-Outliner-OUTLINER-WINDOW-61.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02095.py -- tests/files/web/generated/M21-GAP-02095-keymap-item-Outliner-OUTLINER-WINDOW-61.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02095", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02095", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02096", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:62", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02096-keymap-item-Outliner-OUTLINER-WINDOW-62.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02096.py -- tests/files/web/generated/M21-GAP-02096-keymap-item-Outliner-OUTLINER-WINDOW-62.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02096", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02096", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02097", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:63", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02097-keymap-item-Outliner-OUTLINER-WINDOW-63.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02097.py -- tests/files/web/generated/M21-GAP-02097-keymap-item-Outliner-OUTLINER-WINDOW-63.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02097", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02097", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02098", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:64", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02098-keymap-item-Outliner-OUTLINER-WINDOW-64.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02098.py -- tests/files/web/generated/M21-GAP-02098-keymap-item-Outliner-OUTLINER-WINDOW-64.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02098", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02098", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02099", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:65", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02099-keymap-item-Outliner-OUTLINER-WINDOW-65.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02099.py -- tests/files/web/generated/M21-GAP-02099-keymap-item-Outliner-OUTLINER-WINDOW-65.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02099", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02099", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02100", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:66", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02100-keymap-item-Outliner-OUTLINER-WINDOW-66.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02100.py -- tests/files/web/generated/M21-GAP-02100-keymap-item-Outliner-OUTLINER-WINDOW-66.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02100", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02100", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02101", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:67", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02101-keymap-item-Outliner-OUTLINER-WINDOW-67.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02101.py -- tests/files/web/generated/M21-GAP-02101-keymap-item-Outliner-OUTLINER-WINDOW-67.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02101", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02101", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02102", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:68", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02102-keymap-item-Outliner-OUTLINER-WINDOW-68.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02102.py -- tests/files/web/generated/M21-GAP-02102-keymap-item-Outliner-OUTLINER-WINDOW-68.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02102", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02102", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02103", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:69", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02103-keymap-item-Outliner-OUTLINER-WINDOW-69.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02103.py -- tests/files/web/generated/M21-GAP-02103-keymap-item-Outliner-OUTLINER-WINDOW-69.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02103", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02103", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02104", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02104-keymap-item-Outliner-OUTLINER-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02104.py -- tests/files/web/generated/M21-GAP-02104-keymap-item-Outliner-OUTLINER-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02104", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02104", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02105", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:70", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02105-keymap-item-Outliner-OUTLINER-WINDOW-70.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02105.py -- tests/files/web/generated/M21-GAP-02105-keymap-item-Outliner-OUTLINER-WINDOW-70.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02105", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02105", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02106", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:71", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02106-keymap-item-Outliner-OUTLINER-WINDOW-71.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02106.py -- tests/files/web/generated/M21-GAP-02106-keymap-item-Outliner-OUTLINER-WINDOW-71.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02106", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02106", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02107", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:72", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02107-keymap-item-Outliner-OUTLINER-WINDOW-72.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02107.py -- tests/files/web/generated/M21-GAP-02107-keymap-item-Outliner-OUTLINER-WINDOW-72.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02107", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02107", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02108", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:73", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02108-keymap-item-Outliner-OUTLINER-WINDOW-73.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02108.py -- tests/files/web/generated/M21-GAP-02108-keymap-item-Outliner-OUTLINER-WINDOW-73.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02108", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02108", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02109", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:74", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02109-keymap-item-Outliner-OUTLINER-WINDOW-74.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02109.py -- tests/files/web/generated/M21-GAP-02109-keymap-item-Outliner-OUTLINER-WINDOW-74.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02109", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02109", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02110", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:75", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02110-keymap-item-Outliner-OUTLINER-WINDOW-75.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02110.py -- tests/files/web/generated/M21-GAP-02110-keymap-item-Outliner-OUTLINER-WINDOW-75.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02110", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02110", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02111", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:76", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02111-keymap-item-Outliner-OUTLINER-WINDOW-76.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02111.py -- tests/files/web/generated/M21-GAP-02111-keymap-item-Outliner-OUTLINER-WINDOW-76.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02111", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02111", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02112", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:77", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02112-keymap-item-Outliner-OUTLINER-WINDOW-77.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02112.py -- tests/files/web/generated/M21-GAP-02112-keymap-item-Outliner-OUTLINER-WINDOW-77.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02112", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02112", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02113", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:78", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02113-keymap-item-Outliner-OUTLINER-WINDOW-78.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02113.py -- tests/files/web/generated/M21-GAP-02113-keymap-item-Outliner-OUTLINER-WINDOW-78.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02113", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02113", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02114", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:79", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02114-keymap-item-Outliner-OUTLINER-WINDOW-79.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02114.py -- tests/files/web/generated/M21-GAP-02114-keymap-item-Outliner-OUTLINER-WINDOW-79.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02114", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02114", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02115", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02115-keymap-item-Outliner-OUTLINER-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02115.py -- tests/files/web/generated/M21-GAP-02115-keymap-item-Outliner-OUTLINER-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02115", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02115", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02116", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:80", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02116-keymap-item-Outliner-OUTLINER-WINDOW-80.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02116.py -- tests/files/web/generated/M21-GAP-02116-keymap-item-Outliner-OUTLINER-WINDOW-80.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02116", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02116", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02117", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:81", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02117-keymap-item-Outliner-OUTLINER-WINDOW-81.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02117.py -- tests/files/web/generated/M21-GAP-02117-keymap-item-Outliner-OUTLINER-WINDOW-81.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02117", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02117", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02118", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:82", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02118-keymap-item-Outliner-OUTLINER-WINDOW-82.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02118.py -- tests/files/web/generated/M21-GAP-02118-keymap-item-Outliner-OUTLINER-WINDOW-82.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02118", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02118", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02119", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:83", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02119-keymap-item-Outliner-OUTLINER-WINDOW-83.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02119.py -- tests/files/web/generated/M21-GAP-02119-keymap-item-Outliner-OUTLINER-WINDOW-83.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02119", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02119", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02120", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:84", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02120-keymap-item-Outliner-OUTLINER-WINDOW-84.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02120.py -- tests/files/web/generated/M21-GAP-02120-keymap-item-Outliner-OUTLINER-WINDOW-84.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02120", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02120", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02121", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:85", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02121-keymap-item-Outliner-OUTLINER-WINDOW-85.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02121.py -- tests/files/web/generated/M21-GAP-02121-keymap-item-Outliner-OUTLINER-WINDOW-85.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02121", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02121", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02122", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:86", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02122-keymap-item-Outliner-OUTLINER-WINDOW-86.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02122.py -- tests/files/web/generated/M21-GAP-02122-keymap-item-Outliner-OUTLINER-WINDOW-86.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02122", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02122", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02123", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:87", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02123-keymap-item-Outliner-OUTLINER-WINDOW-87.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02123.py -- tests/files/web/generated/M21-GAP-02123-keymap-item-Outliner-OUTLINER-WINDOW-87.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02123", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02123", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02124", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:88", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02124-keymap-item-Outliner-OUTLINER-WINDOW-88.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02124.py -- tests/files/web/generated/M21-GAP-02124-keymap-item-Outliner-OUTLINER-WINDOW-88.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02124", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02124", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02125", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:89", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02125-keymap-item-Outliner-OUTLINER-WINDOW-89.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02125.py -- tests/files/web/generated/M21-GAP-02125-keymap-item-Outliner-OUTLINER-WINDOW-89.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02125", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02125", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02126", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02126-keymap-item-Outliner-OUTLINER-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02126.py -- tests/files/web/generated/M21-GAP-02126-keymap-item-Outliner-OUTLINER-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02126", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02126", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02127", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:90", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02127-keymap-item-Outliner-OUTLINER-WINDOW-90.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02127.py -- tests/files/web/generated/M21-GAP-02127-keymap-item-Outliner-OUTLINER-WINDOW-90.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02127", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02127", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02128", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:91", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02128-keymap-item-Outliner-OUTLINER-WINDOW-91.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02128.py -- tests/files/web/generated/M21-GAP-02128-keymap-item-Outliner-OUTLINER-WINDOW-91.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02128", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02128", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02129", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:92", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02129-keymap-item-Outliner-OUTLINER-WINDOW-92.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02129.py -- tests/files/web/generated/M21-GAP-02129-keymap-item-Outliner-OUTLINER-WINDOW-92.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02129", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02129", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02130", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:93", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02130-keymap-item-Outliner-OUTLINER-WINDOW-93.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02130.py -- tests/files/web/generated/M21-GAP-02130-keymap-item-Outliner-OUTLINER-WINDOW-93.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02130", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02130", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02131", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:94", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02131-keymap-item-Outliner-OUTLINER-WINDOW-94.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02131.py -- tests/files/web/generated/M21-GAP-02131-keymap-item-Outliner-OUTLINER-WINDOW-94.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02131", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02131", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02132", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:95", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02132-keymap-item-Outliner-OUTLINER-WINDOW-95.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02132.py -- tests/files/web/generated/M21-GAP-02132-keymap-item-Outliner-OUTLINER-WINDOW-95.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02132", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02132", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02133", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:96", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02133-keymap-item-Outliner-OUTLINER-WINDOW-96.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02133.py -- tests/files/web/generated/M21-GAP-02133-keymap-item-Outliner-OUTLINER-WINDOW-96.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02133", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02133", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02134", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:97", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02134-keymap-item-Outliner-OUTLINER-WINDOW-97.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02134.py -- tests/files/web/generated/M21-GAP-02134-keymap-item-Outliner-OUTLINER-WINDOW-97.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02134", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02134", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02135", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:98", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02135-keymap-item-Outliner-OUTLINER-WINDOW-98.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02135.py -- tests/files/web/generated/M21-GAP-02135-keymap-item-Outliner-OUTLINER-WINDOW-98.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02135", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02135", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02136", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:99", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02136-keymap-item-Outliner-OUTLINER-WINDOW-99.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02136.py -- tests/files/web/generated/M21-GAP-02136-keymap-item-Outliner-OUTLINER-WINDOW-99.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02136", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02136", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02137", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02137-keymap-item-Paint-Curve-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02137.py -- tests/files/web/generated/M21-GAP-02137-keymap-item-Paint-Curve-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02137", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02137", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02138", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02138-keymap-item-Paint-Curve-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02138.py -- tests/files/web/generated/M21-GAP-02138-keymap-item-Paint-Curve-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02138", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02138", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02139", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02139-keymap-item-Paint-Curve-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02139.py -- tests/files/web/generated/M21-GAP-02139-keymap-item-Paint-Curve-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02139", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02139", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02140", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02140-keymap-item-Paint-Curve-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02140.py -- tests/files/web/generated/M21-GAP-02140-keymap-item-Paint-Curve-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02140", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02140", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02141", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02141-keymap-item-Paint-Curve-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02141.py -- tests/files/web/generated/M21-GAP-02141-keymap-item-Paint-Curve-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02141", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02141", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02142", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02142-keymap-item-Paint-Curve-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02142.py -- tests/files/web/generated/M21-GAP-02142-keymap-item-Paint-Curve-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02142", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02142", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02143", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02143-keymap-item-Paint-Curve-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02143.py -- tests/files/web/generated/M21-GAP-02143-keymap-item-Paint-Curve-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02143", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02143", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02144", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02144-keymap-item-Paint-Curve-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02144.py -- tests/files/web/generated/M21-GAP-02144-keymap-item-Paint-Curve-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02144", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02144", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02145", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02145-keymap-item-Paint-Curve-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02145.py -- tests/files/web/generated/M21-GAP-02145-keymap-item-Paint-Curve-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02145", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02145", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02146", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02146-keymap-item-Paint-Curve-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02146.py -- tests/files/web/generated/M21-GAP-02146-keymap-item-Paint-Curve-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02146", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02146", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02147", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02147-keymap-item-Paint-Curve-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02147.py -- tests/files/web/generated/M21-GAP-02147-keymap-item-Paint-Curve-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02147", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02147", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02148", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02148-keymap-item-Paint-Curve-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02148.py -- tests/files/web/generated/M21-GAP-02148-keymap-item-Paint-Curve-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02148", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02148", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02149", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02149-keymap-item-Paint-Curve-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02149.py -- tests/files/web/generated/M21-GAP-02149-keymap-item-Paint-Curve-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02149", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02149", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02150", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02150-keymap-item-Paint-Curve-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02150.py -- tests/files/web/generated/M21-GAP-02150-keymap-item-Paint-Curve-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02150", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02150", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02151", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02151-keymap-item-Paint-Curve-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02151.py -- tests/files/web/generated/M21-GAP-02151-keymap-item-Paint-Curve-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02151", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02151", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02152", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02152-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02152.py -- tests/files/web/generated/M21-GAP-02152-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02152", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02152", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02153", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02153-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02153.py -- tests/files/web/generated/M21-GAP-02153-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02153", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02153", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02154", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02154-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02154.py -- tests/files/web/generated/M21-GAP-02154-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02154", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02154", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02155", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02155-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02155.py -- tests/files/web/generated/M21-GAP-02155-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02155", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02155", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02156", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02156-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02156.py -- tests/files/web/generated/M21-GAP-02156-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02156", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02156", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02157", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02157-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02157.py -- tests/files/web/generated/M21-GAP-02157-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02157", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02157", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02158", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02158-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02158.py -- tests/files/web/generated/M21-GAP-02158-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02158", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02158", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02159", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02159-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02159.py -- tests/files/web/generated/M21-GAP-02159-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02159", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02159", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02160", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02160-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02160.py -- tests/files/web/generated/M21-GAP-02160-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02160", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02160", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02161", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02161-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02161.py -- tests/files/web/generated/M21-GAP-02161-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02161", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02161", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02162", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02162-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02162.py -- tests/files/web/generated/M21-GAP-02162-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02162", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02162", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02163", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02163-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02163.py -- tests/files/web/generated/M21-GAP-02163-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02163", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02163", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02164", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02164-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02164.py -- tests/files/web/generated/M21-GAP-02164-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02164", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02164", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02165", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02165-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02165.py -- tests/files/web/generated/M21-GAP-02165-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02165", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02165", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02166", + "gapId": "keymap-item:Paint Stroke Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02166-keymap-item-Paint-Stroke-Modal-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02166.py -- tests/files/web/generated/M21-GAP-02166-keymap-item-Paint-Stroke-Modal-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02166", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02166", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02167", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02167-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02167.py -- tests/files/web/generated/M21-GAP-02167-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02167", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02167", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02168", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02168-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02168.py -- tests/files/web/generated/M21-GAP-02168-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02168", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02168", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02169", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02169-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02169.py -- tests/files/web/generated/M21-GAP-02169-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02169", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02169", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02170", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02170-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02170.py -- tests/files/web/generated/M21-GAP-02170-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02170", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02170", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02171", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02171-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02171.py -- tests/files/web/generated/M21-GAP-02171-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02171", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02171", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02172", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02172-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02172.py -- tests/files/web/generated/M21-GAP-02172-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02172", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02172", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02173", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02173-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02173.py -- tests/files/web/generated/M21-GAP-02173-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02173", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02173", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02174", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02174-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02174.py -- tests/files/web/generated/M21-GAP-02174-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02174", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02174", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02175", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02175-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02175.py -- tests/files/web/generated/M21-GAP-02175-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02175", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02175", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02176", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02176-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02176.py -- tests/files/web/generated/M21-GAP-02176-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02176", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02176", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02177", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02177-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02177.py -- tests/files/web/generated/M21-GAP-02177-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02177", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02177", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02178", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02178-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02178.py -- tests/files/web/generated/M21-GAP-02178-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02178", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02178", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02179", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02179-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02179.py -- tests/files/web/generated/M21-GAP-02179-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02179", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02179", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02180", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02180-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02180.py -- tests/files/web/generated/M21-GAP-02180-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02180", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02180", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02181", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02181-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02181.py -- tests/files/web/generated/M21-GAP-02181-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02181", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02181", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02182", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02182-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02182.py -- tests/files/web/generated/M21-GAP-02182-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02182", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02182", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02183", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02183-keymap-item-Particle-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02183.py -- tests/files/web/generated/M21-GAP-02183-keymap-item-Particle-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02183", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02183", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02184", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02184-keymap-item-Particle-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02184.py -- tests/files/web/generated/M21-GAP-02184-keymap-item-Particle-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02184", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02184", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02185", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02185-keymap-item-Particle-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02185.py -- tests/files/web/generated/M21-GAP-02185-keymap-item-Particle-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02185", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02185", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02186", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02186-keymap-item-Particle-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02186.py -- tests/files/web/generated/M21-GAP-02186-keymap-item-Particle-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02186", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02186", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02187", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02187-keymap-item-Particle-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02187.py -- tests/files/web/generated/M21-GAP-02187-keymap-item-Particle-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02187", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02187", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02188", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02188-keymap-item-Particle-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02188.py -- tests/files/web/generated/M21-GAP-02188-keymap-item-Particle-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02188", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02188", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02189", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02189-keymap-item-Particle-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02189.py -- tests/files/web/generated/M21-GAP-02189-keymap-item-Particle-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02189", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02189", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02190", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02190-keymap-item-Particle-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02190.py -- tests/files/web/generated/M21-GAP-02190-keymap-item-Particle-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02190", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02190", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02191", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02191-keymap-item-Particle-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02191.py -- tests/files/web/generated/M21-GAP-02191-keymap-item-Particle-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02191", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02191", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02192", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02192-keymap-item-Particle-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02192.py -- tests/files/web/generated/M21-GAP-02192-keymap-item-Particle-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02192", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02192", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02193", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02193-keymap-item-Particle-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02193.py -- tests/files/web/generated/M21-GAP-02193-keymap-item-Particle-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02193", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02193", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02194", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02194-keymap-item-Particle-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02194.py -- tests/files/web/generated/M21-GAP-02194-keymap-item-Particle-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02194", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02194", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02195", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02195-keymap-item-Particle-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02195.py -- tests/files/web/generated/M21-GAP-02195-keymap-item-Particle-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02195", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02195", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02196", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02196-keymap-item-Particle-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02196.py -- tests/files/web/generated/M21-GAP-02196-keymap-item-Particle-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02196", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02196", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02197", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02197-keymap-item-Particle-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02197.py -- tests/files/web/generated/M21-GAP-02197-keymap-item-Particle-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02197", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02197", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02198", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02198-keymap-item-Particle-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02198.py -- tests/files/web/generated/M21-GAP-02198-keymap-item-Particle-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02198", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02198", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02199", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02199-keymap-item-Particle-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02199.py -- tests/files/web/generated/M21-GAP-02199-keymap-item-Particle-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02199", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02199", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02200", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02200-keymap-item-Particle-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02200.py -- tests/files/web/generated/M21-GAP-02200-keymap-item-Particle-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02200", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02200", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02201", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02201-keymap-item-Particle-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02201.py -- tests/files/web/generated/M21-GAP-02201-keymap-item-Particle-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02201", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02201", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02202", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02202-keymap-item-Particle-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02202.py -- tests/files/web/generated/M21-GAP-02202-keymap-item-Particle-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02202", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02202", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02203", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02203-keymap-item-Particle-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02203.py -- tests/files/web/generated/M21-GAP-02203-keymap-item-Particle-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02203", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02203", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02204", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02204-keymap-item-Particle-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02204.py -- tests/files/web/generated/M21-GAP-02204-keymap-item-Particle-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02204", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02204", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02205", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02205-keymap-item-Particle-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02205.py -- tests/files/web/generated/M21-GAP-02205-keymap-item-Particle-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02205", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02205", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02206", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02206-keymap-item-Particle-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02206.py -- tests/files/web/generated/M21-GAP-02206-keymap-item-Particle-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02206", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02206", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02207", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02207-keymap-item-Particle-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02207.py -- tests/files/web/generated/M21-GAP-02207-keymap-item-Particle-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02207", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02207", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02208", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02208-keymap-item-Particle-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02208.py -- tests/files/web/generated/M21-GAP-02208-keymap-item-Particle-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02208", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02208", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02209", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02209-keymap-item-Particle-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02209.py -- tests/files/web/generated/M21-GAP-02209-keymap-item-Particle-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02209", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02209", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02210", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02210-keymap-item-Particle-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02210.py -- tests/files/web/generated/M21-GAP-02210-keymap-item-Particle-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02210", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02210", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02211", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02211-keymap-item-Particle-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02211.py -- tests/files/web/generated/M21-GAP-02211-keymap-item-Particle-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02211", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02211", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02212", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02212-keymap-item-Particle-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02212.py -- tests/files/web/generated/M21-GAP-02212-keymap-item-Particle-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02212", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02212", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02213", + "gapId": "keymap-item:Pen Tool Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02213-keymap-item-Pen-Tool-Modal-Map-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02213.py -- tests/files/web/generated/M21-GAP-02213-keymap-item-Pen-Tool-Modal-Map-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02213", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02213", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02214", + "gapId": "keymap-item:Pen Tool Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02214-keymap-item-Pen-Tool-Modal-Map-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02214.py -- tests/files/web/generated/M21-GAP-02214-keymap-item-Pen-Tool-Modal-Map-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02214", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02214", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02215", + "gapId": "keymap-item:Pen Tool Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02215-keymap-item-Pen-Tool-Modal-Map-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02215.py -- tests/files/web/generated/M21-GAP-02215-keymap-item-Pen-Tool-Modal-Map-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02215", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02215", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02216", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02216-keymap-item-Point-Cloud-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02216.py -- tests/files/web/generated/M21-GAP-02216-keymap-item-Point-Cloud-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02216", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02216", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02217", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02217-keymap-item-Point-Cloud-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02217.py -- tests/files/web/generated/M21-GAP-02217-keymap-item-Point-Cloud-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02217", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02217", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02218", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02218-keymap-item-Point-Cloud-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02218.py -- tests/files/web/generated/M21-GAP-02218-keymap-item-Point-Cloud-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02218", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02218", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02219", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02219-keymap-item-Point-Cloud-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02219.py -- tests/files/web/generated/M21-GAP-02219-keymap-item-Point-Cloud-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02219", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02219", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02220", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02220-keymap-item-Point-Cloud-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02220.py -- tests/files/web/generated/M21-GAP-02220-keymap-item-Point-Cloud-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02220", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02220", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02221", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02221-keymap-item-Point-Cloud-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02221.py -- tests/files/web/generated/M21-GAP-02221-keymap-item-Point-Cloud-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02221", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02221", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02222", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02222-keymap-item-Point-Cloud-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02222.py -- tests/files/web/generated/M21-GAP-02222-keymap-item-Point-Cloud-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02222", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02222", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02223", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02223-keymap-item-Point-Cloud-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02223.py -- tests/files/web/generated/M21-GAP-02223-keymap-item-Point-Cloud-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02223", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02223", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02224", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02224-keymap-item-Point-Cloud-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02224.py -- tests/files/web/generated/M21-GAP-02224-keymap-item-Point-Cloud-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02224", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02224", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02225", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02225-keymap-item-Point-Cloud-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02225.py -- tests/files/web/generated/M21-GAP-02225-keymap-item-Point-Cloud-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02225", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02225", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02226", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02226-keymap-item-Point-Cloud-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02226.py -- tests/files/web/generated/M21-GAP-02226-keymap-item-Point-Cloud-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02226", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02226", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02227", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02227-keymap-item-Point-Cloud-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02227.py -- tests/files/web/generated/M21-GAP-02227-keymap-item-Point-Cloud-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02227", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02227", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02228", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02228-keymap-item-Point-Cloud-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02228.py -- tests/files/web/generated/M21-GAP-02228-keymap-item-Point-Cloud-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02228", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02228", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02229", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02229-keymap-item-Point-Cloud-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02229.py -- tests/files/web/generated/M21-GAP-02229-keymap-item-Point-Cloud-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02229", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02229", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02230", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02230-keymap-item-Point-Cloud-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02230.py -- tests/files/web/generated/M21-GAP-02230-keymap-item-Point-Cloud-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02230", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02230", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02231", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02231-keymap-item-Point-Cloud-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02231.py -- tests/files/web/generated/M21-GAP-02231-keymap-item-Point-Cloud-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02231", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02231", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02232", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02232-keymap-item-Point-Cloud-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02232.py -- tests/files/web/generated/M21-GAP-02232-keymap-item-Point-Cloud-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02232", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02232", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02233", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02233-keymap-item-Point-Cloud-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02233.py -- tests/files/web/generated/M21-GAP-02233-keymap-item-Point-Cloud-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02233", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02233", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02234", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02234-keymap-item-Pose-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02234.py -- tests/files/web/generated/M21-GAP-02234-keymap-item-Pose-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02234", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02234", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02235", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02235-keymap-item-Pose-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02235.py -- tests/files/web/generated/M21-GAP-02235-keymap-item-Pose-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02235", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02235", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02236", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02236-keymap-item-Pose-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02236.py -- tests/files/web/generated/M21-GAP-02236-keymap-item-Pose-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02236", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02236", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02237", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02237-keymap-item-Pose-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02237.py -- tests/files/web/generated/M21-GAP-02237-keymap-item-Pose-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02237", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02237", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02238", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02238-keymap-item-Pose-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02238.py -- tests/files/web/generated/M21-GAP-02238-keymap-item-Pose-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02238", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02238", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02239", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02239-keymap-item-Pose-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02239.py -- tests/files/web/generated/M21-GAP-02239-keymap-item-Pose-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02239", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02239", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02240", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02240-keymap-item-Pose-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02240.py -- tests/files/web/generated/M21-GAP-02240-keymap-item-Pose-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02240", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02240", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02241", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02241-keymap-item-Pose-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02241.py -- tests/files/web/generated/M21-GAP-02241-keymap-item-Pose-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02241", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02241", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02242", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02242-keymap-item-Pose-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02242.py -- tests/files/web/generated/M21-GAP-02242-keymap-item-Pose-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02242", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02242", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02243", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02243-keymap-item-Pose-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02243.py -- tests/files/web/generated/M21-GAP-02243-keymap-item-Pose-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02243", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02243", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02244", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02244-keymap-item-Pose-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02244.py -- tests/files/web/generated/M21-GAP-02244-keymap-item-Pose-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02244", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02244", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02245", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02245-keymap-item-Pose-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02245.py -- tests/files/web/generated/M21-GAP-02245-keymap-item-Pose-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02245", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02245", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02246", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02246-keymap-item-Pose-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02246.py -- tests/files/web/generated/M21-GAP-02246-keymap-item-Pose-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02246", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02246", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02247", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02247-keymap-item-Pose-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02247.py -- tests/files/web/generated/M21-GAP-02247-keymap-item-Pose-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02247", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02247", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02248", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02248-keymap-item-Pose-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02248.py -- tests/files/web/generated/M21-GAP-02248-keymap-item-Pose-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02248", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02248", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02249", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02249-keymap-item-Pose-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02249.py -- tests/files/web/generated/M21-GAP-02249-keymap-item-Pose-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02249", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02249", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02250", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02250-keymap-item-Pose-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02250.py -- tests/files/web/generated/M21-GAP-02250-keymap-item-Pose-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02250", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02250", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02251", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02251-keymap-item-Pose-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02251.py -- tests/files/web/generated/M21-GAP-02251-keymap-item-Pose-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02251", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02251", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02252", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02252-keymap-item-Pose-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02252.py -- tests/files/web/generated/M21-GAP-02252-keymap-item-Pose-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02252", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02252", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02253", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02253-keymap-item-Pose-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02253.py -- tests/files/web/generated/M21-GAP-02253-keymap-item-Pose-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02253", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02253", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02254", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02254-keymap-item-Pose-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02254.py -- tests/files/web/generated/M21-GAP-02254-keymap-item-Pose-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02254", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02254", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02255", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02255-keymap-item-Pose-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02255.py -- tests/files/web/generated/M21-GAP-02255-keymap-item-Pose-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02255", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02255", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02256", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02256-keymap-item-Pose-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02256.py -- tests/files/web/generated/M21-GAP-02256-keymap-item-Pose-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02256", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02256", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02257", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02257-keymap-item-Pose-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02257.py -- tests/files/web/generated/M21-GAP-02257-keymap-item-Pose-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02257", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02257", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02258", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02258-keymap-item-Pose-EMPTY-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02258.py -- tests/files/web/generated/M21-GAP-02258-keymap-item-Pose-EMPTY-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02258", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02258", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02259", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02259-keymap-item-Pose-EMPTY-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02259.py -- tests/files/web/generated/M21-GAP-02259-keymap-item-Pose-EMPTY-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02259", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02259", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02260", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02260-keymap-item-Pose-EMPTY-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02260.py -- tests/files/web/generated/M21-GAP-02260-keymap-item-Pose-EMPTY-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02260", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02260", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02261", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02261-keymap-item-Pose-EMPTY-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02261.py -- tests/files/web/generated/M21-GAP-02261-keymap-item-Pose-EMPTY-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02261", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02261", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02262", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02262-keymap-item-Pose-EMPTY-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02262.py -- tests/files/web/generated/M21-GAP-02262-keymap-item-Pose-EMPTY-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02262", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02262", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02263", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02263-keymap-item-Pose-EMPTY-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02263.py -- tests/files/web/generated/M21-GAP-02263-keymap-item-Pose-EMPTY-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02263", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02263", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02264", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02264-keymap-item-Pose-EMPTY-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02264.py -- tests/files/web/generated/M21-GAP-02264-keymap-item-Pose-EMPTY-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02264", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02264", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02265", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02265-keymap-item-Pose-EMPTY-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02265.py -- tests/files/web/generated/M21-GAP-02265-keymap-item-Pose-EMPTY-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02265", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02265", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02266", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02266-keymap-item-Pose-EMPTY-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02266.py -- tests/files/web/generated/M21-GAP-02266-keymap-item-Pose-EMPTY-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02266", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02266", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02267", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02267-keymap-item-Pose-EMPTY-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02267.py -- tests/files/web/generated/M21-GAP-02267-keymap-item-Pose-EMPTY-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02267", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02267", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02268", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02268-keymap-item-Pose-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02268.py -- tests/files/web/generated/M21-GAP-02268-keymap-item-Pose-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02268", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02268", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02269", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02269-keymap-item-Pose-EMPTY-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02269.py -- tests/files/web/generated/M21-GAP-02269-keymap-item-Pose-EMPTY-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02269", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02269", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02270", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02270-keymap-item-Pose-EMPTY-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02270.py -- tests/files/web/generated/M21-GAP-02270-keymap-item-Pose-EMPTY-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02270", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02270", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02271", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02271-keymap-item-Pose-EMPTY-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02271.py -- tests/files/web/generated/M21-GAP-02271-keymap-item-Pose-EMPTY-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02271", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02271", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02272", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02272-keymap-item-Pose-EMPTY-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02272.py -- tests/files/web/generated/M21-GAP-02272-keymap-item-Pose-EMPTY-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02272", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02272", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02273", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02273-keymap-item-Pose-EMPTY-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02273.py -- tests/files/web/generated/M21-GAP-02273-keymap-item-Pose-EMPTY-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02273", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02273", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02274", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02274-keymap-item-Pose-EMPTY-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02274.py -- tests/files/web/generated/M21-GAP-02274-keymap-item-Pose-EMPTY-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02274", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02274", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02275", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02275-keymap-item-Pose-EMPTY-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02275.py -- tests/files/web/generated/M21-GAP-02275-keymap-item-Pose-EMPTY-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02275", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02275", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02276", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02276-keymap-item-Pose-EMPTY-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02276.py -- tests/files/web/generated/M21-GAP-02276-keymap-item-Pose-EMPTY-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02276", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02276", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02277", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02277-keymap-item-Pose-EMPTY-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02277.py -- tests/files/web/generated/M21-GAP-02277-keymap-item-Pose-EMPTY-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02277", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02277", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02278", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02278-keymap-item-Pose-EMPTY-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02278.py -- tests/files/web/generated/M21-GAP-02278-keymap-item-Pose-EMPTY-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02278", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02278", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02279", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02279-keymap-item-Pose-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02279.py -- tests/files/web/generated/M21-GAP-02279-keymap-item-Pose-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02279", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02279", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02280", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02280-keymap-item-Pose-EMPTY-WINDOW-50.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02280.py -- tests/files/web/generated/M21-GAP-02280-keymap-item-Pose-EMPTY-WINDOW-50.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02280", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02280", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02281", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02281-keymap-item-Pose-EMPTY-WINDOW-51.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02281.py -- tests/files/web/generated/M21-GAP-02281-keymap-item-Pose-EMPTY-WINDOW-51.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02281", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02281", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02282", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:52", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02282-keymap-item-Pose-EMPTY-WINDOW-52.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02282.py -- tests/files/web/generated/M21-GAP-02282-keymap-item-Pose-EMPTY-WINDOW-52.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02282", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02282", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02283", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02283-keymap-item-Pose-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02283.py -- tests/files/web/generated/M21-GAP-02283-keymap-item-Pose-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02283", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02283", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02284", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02284-keymap-item-Pose-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02284.py -- tests/files/web/generated/M21-GAP-02284-keymap-item-Pose-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02284", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02284", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02285", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02285-keymap-item-Pose-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02285.py -- tests/files/web/generated/M21-GAP-02285-keymap-item-Pose-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02285", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02285", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02286", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02286-keymap-item-Pose-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02286.py -- tests/files/web/generated/M21-GAP-02286-keymap-item-Pose-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02286", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02286", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02287", + "gapId": "keymap-item:Preferences:PREFERENCES:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02287-keymap-item-Preferences-PREFERENCES-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02287.py -- tests/files/web/generated/M21-GAP-02287-keymap-item-Preferences-PREFERENCES-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02287", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02287", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02288", + "gapId": "keymap-item:Preferences:PREFERENCES:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02288-keymap-item-Preferences-PREFERENCES-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02288.py -- tests/files/web/generated/M21-GAP-02288-keymap-item-Preferences-PREFERENCES-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02288", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02288", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02289", + "gapId": "keymap-item:Preferences_nav:PREFERENCES:UI:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02289-keymap-item-Preferences_nav-PREFERENCES-UI-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02289.py -- tests/files/web/generated/M21-GAP-02289-keymap-item-Preferences_nav-PREFERENCES-UI-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02289", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02289", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02290", + "gapId": "keymap-item:Preferences_nav:PREFERENCES:UI:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02290-keymap-item-Preferences_nav-PREFERENCES-UI-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02290.py -- tests/files/web/generated/M21-GAP-02290-keymap-item-Preferences_nav-PREFERENCES-UI-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02290", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02290", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02291", + "gapId": "keymap-item:Preview Tool: Cursor:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02291-keymap-item-Preview-Tool-Cursor-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02291.py -- tests/files/web/generated/M21-GAP-02291-keymap-item-Preview-Tool-Cursor-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02291", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02291", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02292", + "gapId": "keymap-item:Preview Tool: Cursor:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02292-keymap-item-Preview-Tool-Cursor-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02292.py -- tests/files/web/generated/M21-GAP-02292-keymap-item-Preview-Tool-Cursor-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02292", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02292", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02293", + "gapId": "keymap-item:Preview Tool: Move:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02293-keymap-item-Preview-Tool-Move-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02293.py -- tests/files/web/generated/M21-GAP-02293-keymap-item-Preview-Tool-Move-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02293", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02293", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02294", + "gapId": "keymap-item:Preview Tool: Rotate:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02294-keymap-item-Preview-Tool-Rotate-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02294.py -- tests/files/web/generated/M21-GAP-02294-keymap-item-Preview-Tool-Rotate-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02294", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02294", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02295", + "gapId": "keymap-item:Preview Tool: Sample:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02295-keymap-item-Preview-Tool-Sample-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02295.py -- tests/files/web/generated/M21-GAP-02295-keymap-item-Preview-Tool-Sample-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02295", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02295", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02296", + "gapId": "keymap-item:Preview Tool: Scale:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02296-keymap-item-Preview-Tool-Scale-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02296.py -- tests/files/web/generated/M21-GAP-02296-keymap-item-Preview-Tool-Scale-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02296", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02296", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02297", + "gapId": "keymap-item:Preview Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02297-keymap-item-Preview-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02297.py -- tests/files/web/generated/M21-GAP-02297-keymap-item-Preview-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02297", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02297", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02298", + "gapId": "keymap-item:Preview Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02298-keymap-item-Preview-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02298.py -- tests/files/web/generated/M21-GAP-02298-keymap-item-Preview-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02298", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02298", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02299", + "gapId": "keymap-item:Preview Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02299-keymap-item-Preview-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02299.py -- tests/files/web/generated/M21-GAP-02299-keymap-item-Preview-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02299", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02299", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02300", + "gapId": "keymap-item:Preview Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02300-keymap-item-Preview-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02300.py -- tests/files/web/generated/M21-GAP-02300-keymap-item-Preview-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02300", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02300", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02301", + "gapId": "keymap-item:Preview Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02301-keymap-item-Preview-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02301.py -- tests/files/web/generated/M21-GAP-02301-keymap-item-Preview-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02301", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02301", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02302", + "gapId": "keymap-item:Preview Tool: Select Box:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02302-keymap-item-Preview-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02302.py -- tests/files/web/generated/M21-GAP-02302-keymap-item-Preview-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02302", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02302", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02303", + "gapId": "keymap-item:Preview Tool: Select Box:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02303-keymap-item-Preview-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02303.py -- tests/files/web/generated/M21-GAP-02303-keymap-item-Preview-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02303", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02303", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02304", + "gapId": "keymap-item:Preview Tool: Select Box:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02304-keymap-item-Preview-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02304.py -- tests/files/web/generated/M21-GAP-02304-keymap-item-Preview-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02304", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02304", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02305", + "gapId": "keymap-item:Preview Tool: Select Box:SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02305-keymap-item-Preview-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02305.py -- tests/files/web/generated/M21-GAP-02305-keymap-item-Preview-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02305", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02305", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02306", + "gapId": "keymap-item:Preview Tool: Select Box:SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02306-keymap-item-Preview-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02306.py -- tests/files/web/generated/M21-GAP-02306-keymap-item-Preview-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02306", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02306", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02307", + "gapId": "keymap-item:Preview Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02307-keymap-item-Preview-Tool-Select-Circle-fallback-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02307.py -- tests/files/web/generated/M21-GAP-02307-keymap-item-Preview-Tool-Select-Circle-fallback-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02307", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02307", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02308", + "gapId": "keymap-item:Preview Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02308-keymap-item-Preview-Tool-Select-Circle-fallback-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02308.py -- tests/files/web/generated/M21-GAP-02308-keymap-item-Preview-Tool-Select-Circle-fallback-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02308", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02308", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02309", + "gapId": "keymap-item:Preview Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02309-keymap-item-Preview-Tool-Select-Circle-fallback-SEQUENCE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02309.py -- tests/files/web/generated/M21-GAP-02309-keymap-item-Preview-Tool-Select-Circle-fallback-SEQUENCE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02309", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02309", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02310", + "gapId": "keymap-item:Preview Tool: Select Circle:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02310-keymap-item-Preview-Tool-Select-Circle-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02310.py -- tests/files/web/generated/M21-GAP-02310-keymap-item-Preview-Tool-Select-Circle-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02310", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02310", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02311", + "gapId": "keymap-item:Preview Tool: Select Circle:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02311-keymap-item-Preview-Tool-Select-Circle-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02311.py -- tests/files/web/generated/M21-GAP-02311-keymap-item-Preview-Tool-Select-Circle-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02311", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02311", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02312", + "gapId": "keymap-item:Preview Tool: Select Circle:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02312-keymap-item-Preview-Tool-Select-Circle-SEQUENCE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02312.py -- tests/files/web/generated/M21-GAP-02312-keymap-item-Preview-Tool-Select-Circle-SEQUENCE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02312", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02312", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02313", + "gapId": "keymap-item:Preview Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02313-keymap-item-Preview-Tool-Select-Lasso-fallback-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02313.py -- tests/files/web/generated/M21-GAP-02313-keymap-item-Preview-Tool-Select-Lasso-fallback-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02313", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02313", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02314", + "gapId": "keymap-item:Preview Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02314-keymap-item-Preview-Tool-Select-Lasso-fallback-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02314.py -- tests/files/web/generated/M21-GAP-02314-keymap-item-Preview-Tool-Select-Lasso-fallback-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02314", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02314", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02315", + "gapId": "keymap-item:Preview Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02315-keymap-item-Preview-Tool-Select-Lasso-fallback-SEQUENCE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02315.py -- tests/files/web/generated/M21-GAP-02315-keymap-item-Preview-Tool-Select-Lasso-fallback-SEQUENCE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02315", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02315", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02316", + "gapId": "keymap-item:Preview Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02316-keymap-item-Preview-Tool-Select-Lasso-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02316.py -- tests/files/web/generated/M21-GAP-02316-keymap-item-Preview-Tool-Select-Lasso-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02316", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02316", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02317", + "gapId": "keymap-item:Preview Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02317-keymap-item-Preview-Tool-Select-Lasso-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02317.py -- tests/files/web/generated/M21-GAP-02317-keymap-item-Preview-Tool-Select-Lasso-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02317", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02317", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02318", + "gapId": "keymap-item:Preview Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02318-keymap-item-Preview-Tool-Select-Lasso-SEQUENCE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02318.py -- tests/files/web/generated/M21-GAP-02318-keymap-item-Preview-Tool-Select-Lasso-SEQUENCE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02318", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02318", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02319", + "gapId": "keymap-item:Preview Tool: Tweak (fallback):SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02319-keymap-item-Preview-Tool-Tweak-fallback-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02319.py -- tests/files/web/generated/M21-GAP-02319-keymap-item-Preview-Tool-Tweak-fallback-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02319", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02319", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02320", + "gapId": "keymap-item:Preview Tool: Tweak (fallback):SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02320-keymap-item-Preview-Tool-Tweak-fallback-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02320.py -- tests/files/web/generated/M21-GAP-02320-keymap-item-Preview-Tool-Tweak-fallback-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02320", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02320", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02321", + "gapId": "keymap-item:Preview Tool: Tweak (fallback):SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02321-keymap-item-Preview-Tool-Tweak-fallback-SEQUENCE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02321.py -- tests/files/web/generated/M21-GAP-02321-keymap-item-Preview-Tool-Tweak-fallback-SEQUENCE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02321", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02321", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02322", + "gapId": "keymap-item:Preview Tool: Tweak (fallback):SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02322-keymap-item-Preview-Tool-Tweak-fallback-SEQUENCE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02322.py -- tests/files/web/generated/M21-GAP-02322-keymap-item-Preview-Tool-Tweak-fallback-SEQUENCE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02322", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02322", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02323", + "gapId": "keymap-item:Preview Tool: Tweak (fallback):SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02323-keymap-item-Preview-Tool-Tweak-fallback-SEQUENCE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02323.py -- tests/files/web/generated/M21-GAP-02323-keymap-item-Preview-Tool-Tweak-fallback-SEQUENCE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02323", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02323", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02324", + "gapId": "keymap-item:Preview Tool: Tweak:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02324-keymap-item-Preview-Tool-Tweak-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02324.py -- tests/files/web/generated/M21-GAP-02324-keymap-item-Preview-Tool-Tweak-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02324", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02324", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02325", + "gapId": "keymap-item:Preview Tool: Tweak:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02325-keymap-item-Preview-Tool-Tweak-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02325.py -- tests/files/web/generated/M21-GAP-02325-keymap-item-Preview-Tool-Tweak-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02325", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02325", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02326", + "gapId": "keymap-item:Preview Tool: Tweak:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02326-keymap-item-Preview-Tool-Tweak-SEQUENCE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02326.py -- tests/files/web/generated/M21-GAP-02326-keymap-item-Preview-Tool-Tweak-SEQUENCE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02326", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02326", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02327", + "gapId": "keymap-item:Preview Tool: Tweak:SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02327-keymap-item-Preview-Tool-Tweak-SEQUENCE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02327.py -- tests/files/web/generated/M21-GAP-02327-keymap-item-Preview-Tool-Tweak-SEQUENCE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02327", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02327", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02328", + "gapId": "keymap-item:Preview Tool: Tweak:SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02328-keymap-item-Preview-Tool-Tweak-SEQUENCE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02328.py -- tests/files/web/generated/M21-GAP-02328-keymap-item-Preview-Tool-Tweak-SEQUENCE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02328", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02328", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02329", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02329-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02329.py -- tests/files/web/generated/M21-GAP-02329-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02329", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02329", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02330", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02330-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02330.py -- tests/files/web/generated/M21-GAP-02330-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02330", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02330", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02331", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02331-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02331.py -- tests/files/web/generated/M21-GAP-02331-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02331", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02331", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02332", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02332-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02332.py -- tests/files/web/generated/M21-GAP-02332-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02332", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02332", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02333", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02333-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02333.py -- tests/files/web/generated/M21-GAP-02333-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02333", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02333", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02334", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02334-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02334.py -- tests/files/web/generated/M21-GAP-02334-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02334", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02334", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02335", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02335-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02335.py -- tests/files/web/generated/M21-GAP-02335-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02335", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02335", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02336", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02336-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02336.py -- tests/files/web/generated/M21-GAP-02336-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02336", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02336", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02337", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02337-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02337.py -- tests/files/web/generated/M21-GAP-02337-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02337", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02337", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02338", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02338-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02338.py -- tests/files/web/generated/M21-GAP-02338-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02338", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02338", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02339", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02339-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02339.py -- tests/files/web/generated/M21-GAP-02339-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02339", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02339", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02340", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02340-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02340.py -- tests/files/web/generated/M21-GAP-02340-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02340", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02340", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02341", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02341-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02341.py -- tests/files/web/generated/M21-GAP-02341-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02341", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02341", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02342", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02342-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02342.py -- tests/files/web/generated/M21-GAP-02342-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02342", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02342", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02343", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02343-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02343.py -- tests/files/web/generated/M21-GAP-02343-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02343", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02343", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02344", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02344-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02344.py -- tests/files/web/generated/M21-GAP-02344-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02344", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02344", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02345", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02345-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02345.py -- tests/files/web/generated/M21-GAP-02345-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02345", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02345", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02346", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02346-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02346.py -- tests/files/web/generated/M21-GAP-02346-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02346", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02346", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02347", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02347-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02347.py -- tests/files/web/generated/M21-GAP-02347-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02347", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02347", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02348", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02348-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02348.py -- tests/files/web/generated/M21-GAP-02348-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02348", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02348", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02349", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02349-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02349.py -- tests/files/web/generated/M21-GAP-02349-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02349", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02349", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02350", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02350-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02350.py -- tests/files/web/generated/M21-GAP-02350-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02350", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02350", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02351", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02351-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02351.py -- tests/files/web/generated/M21-GAP-02351-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02351", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02351", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02352", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02352-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02352.py -- tests/files/web/generated/M21-GAP-02352-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02352", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02352", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02353", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02353-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02353.py -- tests/files/web/generated/M21-GAP-02353-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02353", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02353", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02354", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02354-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02354.py -- tests/files/web/generated/M21-GAP-02354-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02354", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02354", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02355", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02355-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02355.py -- tests/files/web/generated/M21-GAP-02355-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02355", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02355", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02356", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02356-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02356.py -- tests/files/web/generated/M21-GAP-02356-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02356", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02356", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02357", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02357-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02357.py -- tests/files/web/generated/M21-GAP-02357-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02357", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02357", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02358", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02358-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02358.py -- tests/files/web/generated/M21-GAP-02358-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02358", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02358", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02359", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02359-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02359.py -- tests/files/web/generated/M21-GAP-02359-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02359", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02359", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02360", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02360-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02360.py -- tests/files/web/generated/M21-GAP-02360-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02360", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02360", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02361", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02361-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02361.py -- tests/files/web/generated/M21-GAP-02361-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02361", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02361", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02362", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02362-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02362.py -- tests/files/web/generated/M21-GAP-02362-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02362", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02362", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02363", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02363-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02363.py -- tests/files/web/generated/M21-GAP-02363-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02363", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02363", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02364", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02364-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02364.py -- tests/files/web/generated/M21-GAP-02364-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02364", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02364", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02365", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02365-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02365.py -- tests/files/web/generated/M21-GAP-02365-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02365", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02365", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02366", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02366-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02366.py -- tests/files/web/generated/M21-GAP-02366-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02366", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02366", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02367", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02367-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02367.py -- tests/files/web/generated/M21-GAP-02367-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02367", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02367", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02368", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02368-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02368.py -- tests/files/web/generated/M21-GAP-02368-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02368", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02368", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02369", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02369-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02369.py -- tests/files/web/generated/M21-GAP-02369-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02369", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02369", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02370", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02370-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02370.py -- tests/files/web/generated/M21-GAP-02370-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02370", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02370", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02371", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02371-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02371.py -- tests/files/web/generated/M21-GAP-02371-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02371", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02371", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02372", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02372-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02372.py -- tests/files/web/generated/M21-GAP-02372-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02372", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02372", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02373", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02373-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02373.py -- tests/files/web/generated/M21-GAP-02373-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02373", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02373", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02374", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02374-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02374.py -- tests/files/web/generated/M21-GAP-02374-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02374", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02374", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02375", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02375-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-50.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02375.py -- tests/files/web/generated/M21-GAP-02375-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-50.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02375", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02375", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02376", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:51", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02376-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-51.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02376.py -- tests/files/web/generated/M21-GAP-02376-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-51.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02376", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02376", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02377", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:52", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02377-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-52.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02377.py -- tests/files/web/generated/M21-GAP-02377-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-52.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02377", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02377", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02378", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:53", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02378-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-53.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02378.py -- tests/files/web/generated/M21-GAP-02378-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-53.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02378", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02378", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02379", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:54", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02379-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-54.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02379.py -- tests/files/web/generated/M21-GAP-02379-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-54.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02379", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02379", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02380", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:55", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02380-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-55.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02380.py -- tests/files/web/generated/M21-GAP-02380-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-55.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02380", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02380", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02381", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:56", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02381-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-56.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02381.py -- tests/files/web/generated/M21-GAP-02381-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-56.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02381", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02381", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02382", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:57", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02382-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-57.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02382.py -- tests/files/web/generated/M21-GAP-02382-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-57.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02382", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02382", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02383", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:58", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02383-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-58.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02383.py -- tests/files/web/generated/M21-GAP-02383-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-58.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02383", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02383", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02384", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:59", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02384-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-59.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02384.py -- tests/files/web/generated/M21-GAP-02384-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-59.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02384", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02384", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02385", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02385-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02385.py -- tests/files/web/generated/M21-GAP-02385-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02385", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02385", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02386", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:60", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02386-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-60.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02386.py -- tests/files/web/generated/M21-GAP-02386-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-60.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02386", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02386", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02387", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:61", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02387-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-61.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02387.py -- tests/files/web/generated/M21-GAP-02387-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-61.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02387", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02387", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02388", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:62", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02388-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-62.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02388.py -- tests/files/web/generated/M21-GAP-02388-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-62.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02388", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02388", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02389", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:63", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02389-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-63.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02389.py -- tests/files/web/generated/M21-GAP-02389-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-63.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02389", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02389", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02390", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:64", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02390-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-64.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02390.py -- tests/files/web/generated/M21-GAP-02390-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-64.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02390", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02390", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02391", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:65", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02391-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-65.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02391.py -- tests/files/web/generated/M21-GAP-02391-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-65.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02391", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02391", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02392", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:66", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02392-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-66.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02392.py -- tests/files/web/generated/M21-GAP-02392-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-66.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02392", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02392", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02393", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:67", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02393-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-67.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02393.py -- tests/files/web/generated/M21-GAP-02393-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-67.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02393", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02393", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02394", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:68", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02394-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-68.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02394.py -- tests/files/web/generated/M21-GAP-02394-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-68.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02394", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02394", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02395", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:69", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02395-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-69.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02395.py -- tests/files/web/generated/M21-GAP-02395-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-69.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02395", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02395", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02396", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02396-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02396.py -- tests/files/web/generated/M21-GAP-02396-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02396", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02396", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02397", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:70", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02397-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-70.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02397.py -- tests/files/web/generated/M21-GAP-02397-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-70.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02397", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02397", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02398", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:71", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02398-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-71.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02398.py -- tests/files/web/generated/M21-GAP-02398-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-71.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02398", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02398", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02399", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:72", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02399-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-72.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02399.py -- tests/files/web/generated/M21-GAP-02399-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-72.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02399", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02399", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02400", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:73", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02400-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-73.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02400.py -- tests/files/web/generated/M21-GAP-02400-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-73.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02400", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02400", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02401", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:74", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02401-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-74.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02401.py -- tests/files/web/generated/M21-GAP-02401-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-74.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02401", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02401", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02402", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:75", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02402-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-75.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02402.py -- tests/files/web/generated/M21-GAP-02402-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-75.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02402", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02402", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02403", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:76", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02403-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-76.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02403.py -- tests/files/web/generated/M21-GAP-02403-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-76.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02403", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02403", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02404", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:77", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02404-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-77.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02404.py -- tests/files/web/generated/M21-GAP-02404-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-77.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02404", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02404", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02405", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:78", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02405-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-78.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02405.py -- tests/files/web/generated/M21-GAP-02405-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-78.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02405", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02405", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02406", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:79", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02406-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-79.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02406.py -- tests/files/web/generated/M21-GAP-02406-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-79.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02406", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02406", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02407", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02407-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02407.py -- tests/files/web/generated/M21-GAP-02407-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02407", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02407", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02408", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:80", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02408-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-80.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02408.py -- tests/files/web/generated/M21-GAP-02408-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-80.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02408", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02408", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02409", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:81", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02409-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-81.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02409.py -- tests/files/web/generated/M21-GAP-02409-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-81.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02409", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02409", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02410", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:82", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02410-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-82.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02410.py -- tests/files/web/generated/M21-GAP-02410-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-82.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02410", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02410", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02411", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:83", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02411-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-83.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02411.py -- tests/files/web/generated/M21-GAP-02411-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-83.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02411", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02411", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02412", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:84", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02412-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-84.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02412.py -- tests/files/web/generated/M21-GAP-02412-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-84.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02412", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02412", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02413", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:85", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02413-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-85.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02413.py -- tests/files/web/generated/M21-GAP-02413-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-85.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02413", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02413", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02414", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:86", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02414-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-86.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02414.py -- tests/files/web/generated/M21-GAP-02414-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-86.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02414", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02414", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02415", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:87", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02415-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-87.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02415.py -- tests/files/web/generated/M21-GAP-02415-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-87.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02415", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02415", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02416", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02416-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02416.py -- tests/files/web/generated/M21-GAP-02416-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02416", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02416", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02417", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02417-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02417.py -- tests/files/web/generated/M21-GAP-02417-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02417", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02417", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02418", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02418-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02418.py -- tests/files/web/generated/M21-GAP-02418-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02418", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02418", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02419", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02419-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02419.py -- tests/files/web/generated/M21-GAP-02419-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02419", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02419", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02420", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02420-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02420.py -- tests/files/web/generated/M21-GAP-02420-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02420", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02420", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02421", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02421-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02421.py -- tests/files/web/generated/M21-GAP-02421-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02421", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02421", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02422", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02422-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02422.py -- tests/files/web/generated/M21-GAP-02422-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02422", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02422", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02423", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02423-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02423.py -- tests/files/web/generated/M21-GAP-02423-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02423", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02423", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02424", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02424-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02424.py -- tests/files/web/generated/M21-GAP-02424-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02424", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02424", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02425", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02425-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02425.py -- tests/files/web/generated/M21-GAP-02425-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02425", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02425", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02426", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02426-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02426.py -- tests/files/web/generated/M21-GAP-02426-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02426", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02426", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02427", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02427-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02427.py -- tests/files/web/generated/M21-GAP-02427-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02427", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02427", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02428", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02428-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02428.py -- tests/files/web/generated/M21-GAP-02428-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02428", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02428", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02429", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02429-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02429.py -- tests/files/web/generated/M21-GAP-02429-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02429", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02429", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02430", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02430-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02430.py -- tests/files/web/generated/M21-GAP-02430-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02430", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02430", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02431", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02431-keymap-item-Property-Editor-PROPERTIES-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02431.py -- tests/files/web/generated/M21-GAP-02431-keymap-item-Property-Editor-PROPERTIES-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02431", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02431", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02432", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02432-keymap-item-Property-Editor-PROPERTIES-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02432.py -- tests/files/web/generated/M21-GAP-02432-keymap-item-Property-Editor-PROPERTIES-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02432", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02432", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02433", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02433-keymap-item-Property-Editor-PROPERTIES-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02433.py -- tests/files/web/generated/M21-GAP-02433-keymap-item-Property-Editor-PROPERTIES-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02433", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02433", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02434", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02434-keymap-item-Property-Editor-PROPERTIES-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02434.py -- tests/files/web/generated/M21-GAP-02434-keymap-item-Property-Editor-PROPERTIES-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02434", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02434", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02435", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02435-keymap-item-Property-Editor-PROPERTIES-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02435.py -- tests/files/web/generated/M21-GAP-02435-keymap-item-Property-Editor-PROPERTIES-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02435", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02435", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02436", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02436-keymap-item-Property-Editor-PROPERTIES-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02436.py -- tests/files/web/generated/M21-GAP-02436-keymap-item-Property-Editor-PROPERTIES-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02436", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02436", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02437", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02437-keymap-item-Property-Editor-PROPERTIES-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02437.py -- tests/files/web/generated/M21-GAP-02437-keymap-item-Property-Editor-PROPERTIES-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02437", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02437", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02438", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02438-keymap-item-Property-Editor-PROPERTIES-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02438.py -- tests/files/web/generated/M21-GAP-02438-keymap-item-Property-Editor-PROPERTIES-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02438", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02438", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02439", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02439-keymap-item-Property-Editor-PROPERTIES-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02439.py -- tests/files/web/generated/M21-GAP-02439-keymap-item-Property-Editor-PROPERTIES-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02439", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02439", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02440", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02440-keymap-item-Property-Editor-PROPERTIES-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02440.py -- tests/files/web/generated/M21-GAP-02440-keymap-item-Property-Editor-PROPERTIES-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02440", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02440", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02441", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02441-keymap-item-Property-Editor-PROPERTIES-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02441.py -- tests/files/web/generated/M21-GAP-02441-keymap-item-Property-Editor-PROPERTIES-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02441", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02441", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02442", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02442-keymap-item-Property-Editor-PROPERTIES-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02442.py -- tests/files/web/generated/M21-GAP-02442-keymap-item-Property-Editor-PROPERTIES-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02442", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02442", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02443", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02443-keymap-item-Property-Editor-PROPERTIES-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02443.py -- tests/files/web/generated/M21-GAP-02443-keymap-item-Property-Editor-PROPERTIES-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02443", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02443", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02444", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02444-keymap-item-Property-Editor-PROPERTIES-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02444.py -- tests/files/web/generated/M21-GAP-02444-keymap-item-Property-Editor-PROPERTIES-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02444", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02444", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02445", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02445-keymap-item-Property-Editor-PROPERTIES-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02445.py -- tests/files/web/generated/M21-GAP-02445-keymap-item-Property-Editor-PROPERTIES-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02445", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02445", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02446", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02446-keymap-item-Property-Editor-PROPERTIES-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02446.py -- tests/files/web/generated/M21-GAP-02446-keymap-item-Property-Editor-PROPERTIES-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02446", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02446", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02447", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02447-keymap-item-Property-Editor-PROPERTIES-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02447.py -- tests/files/web/generated/M21-GAP-02447-keymap-item-Property-Editor-PROPERTIES-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02447", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02447", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02448", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02448-keymap-item-Property-Editor-PROPERTIES-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02448.py -- tests/files/web/generated/M21-GAP-02448-keymap-item-Property-Editor-PROPERTIES-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02448", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02448", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02449", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02449-keymap-item-Property-Editor-PROPERTIES-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02449.py -- tests/files/web/generated/M21-GAP-02449-keymap-item-Property-Editor-PROPERTIES-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02449", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02449", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02450", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02450-keymap-item-Property-Editor-PROPERTIES-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02450.py -- tests/files/web/generated/M21-GAP-02450-keymap-item-Property-Editor-PROPERTIES-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02450", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02450", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02451", + "gapId": "keymap-item:Region Context Menu:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02451-keymap-item-Region-Context-Menu-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02451.py -- tests/files/web/generated/M21-GAP-02451-keymap-item-Region-Context-Menu-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02451", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02451", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02452", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02452-keymap-item-Screen-Editing-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02452.py -- tests/files/web/generated/M21-GAP-02452-keymap-item-Screen-Editing-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02452", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02452", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02453", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02453-keymap-item-Screen-Editing-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02453.py -- tests/files/web/generated/M21-GAP-02453-keymap-item-Screen-Editing-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02453", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02453", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02454", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02454-keymap-item-Screen-Editing-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02454.py -- tests/files/web/generated/M21-GAP-02454-keymap-item-Screen-Editing-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02454", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02454", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02455", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02455-keymap-item-Screen-Editing-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02455.py -- tests/files/web/generated/M21-GAP-02455-keymap-item-Screen-Editing-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02455", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02455", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02456", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02456-keymap-item-Screen-Editing-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02456.py -- tests/files/web/generated/M21-GAP-02456-keymap-item-Screen-Editing-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02456", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02456", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02457", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02457-keymap-item-Screen-Editing-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02457.py -- tests/files/web/generated/M21-GAP-02457-keymap-item-Screen-Editing-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02457", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02457", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02458", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02458-keymap-item-Screen-Editing-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02458.py -- tests/files/web/generated/M21-GAP-02458-keymap-item-Screen-Editing-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02458", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02458", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02459", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02459-keymap-item-Screen-Editing-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02459.py -- tests/files/web/generated/M21-GAP-02459-keymap-item-Screen-Editing-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02459", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02459", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02460", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02460-keymap-item-Screen-Editing-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02460.py -- tests/files/web/generated/M21-GAP-02460-keymap-item-Screen-Editing-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02460", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02460", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02461", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02461-keymap-item-Screen-Editing-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02461.py -- tests/files/web/generated/M21-GAP-02461-keymap-item-Screen-Editing-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02461", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02461", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02462", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02462-keymap-item-Screen-Editing-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02462.py -- tests/files/web/generated/M21-GAP-02462-keymap-item-Screen-Editing-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02462", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02462", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02463", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02463-keymap-item-Screen-Editing-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02463.py -- tests/files/web/generated/M21-GAP-02463-keymap-item-Screen-Editing-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02463", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02463", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02464", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02464-keymap-item-Screen-Editing-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02464.py -- tests/files/web/generated/M21-GAP-02464-keymap-item-Screen-Editing-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02464", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02464", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02465", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02465-keymap-item-Screen-Editing-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02465.py -- tests/files/web/generated/M21-GAP-02465-keymap-item-Screen-Editing-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02465", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02465", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02466", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02466-keymap-item-Screen-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02466.py -- tests/files/web/generated/M21-GAP-02466-keymap-item-Screen-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02466", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02466", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02467", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02467-keymap-item-Screen-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02467.py -- tests/files/web/generated/M21-GAP-02467-keymap-item-Screen-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02467", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02467", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02468", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02468-keymap-item-Screen-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02468.py -- tests/files/web/generated/M21-GAP-02468-keymap-item-Screen-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02468", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02468", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02469", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02469-keymap-item-Screen-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02469.py -- tests/files/web/generated/M21-GAP-02469-keymap-item-Screen-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02469", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02469", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02470", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02470-keymap-item-Screen-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02470.py -- tests/files/web/generated/M21-GAP-02470-keymap-item-Screen-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02470", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02470", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02471", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02471-keymap-item-Screen-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02471.py -- tests/files/web/generated/M21-GAP-02471-keymap-item-Screen-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02471", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02471", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02472", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02472-keymap-item-Screen-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02472.py -- tests/files/web/generated/M21-GAP-02472-keymap-item-Screen-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02472", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02472", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02473", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02473-keymap-item-Screen-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02473.py -- tests/files/web/generated/M21-GAP-02473-keymap-item-Screen-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02473", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02473", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02474", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02474-keymap-item-Screen-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02474.py -- tests/files/web/generated/M21-GAP-02474-keymap-item-Screen-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02474", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02474", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02475", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02475-keymap-item-Screen-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02475.py -- tests/files/web/generated/M21-GAP-02475-keymap-item-Screen-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02475", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02475", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02476", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02476-keymap-item-Screen-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02476.py -- tests/files/web/generated/M21-GAP-02476-keymap-item-Screen-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02476", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02476", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02477", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02477-keymap-item-Screen-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02477.py -- tests/files/web/generated/M21-GAP-02477-keymap-item-Screen-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02477", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02477", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02478", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02478-keymap-item-Screen-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02478.py -- tests/files/web/generated/M21-GAP-02478-keymap-item-Screen-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02478", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02478", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02479", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02479-keymap-item-Screen-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02479.py -- tests/files/web/generated/M21-GAP-02479-keymap-item-Screen-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02479", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02479", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02480", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02480-keymap-item-Screen-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02480.py -- tests/files/web/generated/M21-GAP-02480-keymap-item-Screen-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02480", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02480", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02481", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02481-keymap-item-Screen-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02481.py -- tests/files/web/generated/M21-GAP-02481-keymap-item-Screen-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02481", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02481", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02482", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02482-keymap-item-Screen-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02482.py -- tests/files/web/generated/M21-GAP-02482-keymap-item-Screen-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02482", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02482", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02483", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02483-keymap-item-Screen-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02483.py -- tests/files/web/generated/M21-GAP-02483-keymap-item-Screen-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02483", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02483", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02484", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02484-keymap-item-Screen-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02484.py -- tests/files/web/generated/M21-GAP-02484-keymap-item-Screen-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02484", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02484", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02485", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02485-keymap-item-Screen-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02485.py -- tests/files/web/generated/M21-GAP-02485-keymap-item-Screen-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02485", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02485", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02486", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02486-keymap-item-Screen-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02486.py -- tests/files/web/generated/M21-GAP-02486-keymap-item-Screen-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02486", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02486", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02487", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02487-keymap-item-Screen-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02487.py -- tests/files/web/generated/M21-GAP-02487-keymap-item-Screen-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02487", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02487", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02488", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02488-keymap-item-Screen-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02488.py -- tests/files/web/generated/M21-GAP-02488-keymap-item-Screen-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02488", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02488", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02489", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02489-keymap-item-Screen-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02489.py -- tests/files/web/generated/M21-GAP-02489-keymap-item-Screen-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02489", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02489", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02490", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02490-keymap-item-Screen-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02490.py -- tests/files/web/generated/M21-GAP-02490-keymap-item-Screen-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02490", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02490", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02491", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02491-keymap-item-Screen-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02491.py -- tests/files/web/generated/M21-GAP-02491-keymap-item-Screen-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02491", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02491", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02492", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02492-keymap-item-Sculpt-Curves-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02492.py -- tests/files/web/generated/M21-GAP-02492-keymap-item-Sculpt-Curves-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02492", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02492", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02493", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02493-keymap-item-Sculpt-Curves-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02493.py -- tests/files/web/generated/M21-GAP-02493-keymap-item-Sculpt-Curves-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02493", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02493", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02494", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02494-keymap-item-Sculpt-Curves-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02494.py -- tests/files/web/generated/M21-GAP-02494-keymap-item-Sculpt-Curves-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02494", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02494", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02495", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02495-keymap-item-Sculpt-Curves-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02495.py -- tests/files/web/generated/M21-GAP-02495-keymap-item-Sculpt-Curves-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02495", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02495", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02496", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02496-keymap-item-Sculpt-Curves-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02496.py -- tests/files/web/generated/M21-GAP-02496-keymap-item-Sculpt-Curves-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02496", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02496", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02497", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02497-keymap-item-Sculpt-Curves-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02497.py -- tests/files/web/generated/M21-GAP-02497-keymap-item-Sculpt-Curves-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02497", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02497", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02498", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02498-keymap-item-Sculpt-Curves-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02498.py -- tests/files/web/generated/M21-GAP-02498-keymap-item-Sculpt-Curves-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02498", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02498", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02499", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02499-keymap-item-Sculpt-Curves-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02499.py -- tests/files/web/generated/M21-GAP-02499-keymap-item-Sculpt-Curves-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02499", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02499", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02500", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02500-keymap-item-Sculpt-Curves-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02500.py -- tests/files/web/generated/M21-GAP-02500-keymap-item-Sculpt-Curves-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02500", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02500", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02501", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02501-keymap-item-Sculpt-Curves-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02501.py -- tests/files/web/generated/M21-GAP-02501-keymap-item-Sculpt-Curves-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02501", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02501", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02502", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02502-keymap-item-Sculpt-Curves-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02502.py -- tests/files/web/generated/M21-GAP-02502-keymap-item-Sculpt-Curves-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02502", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02502", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02503", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02503-keymap-item-Sculpt-Curves-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02503.py -- tests/files/web/generated/M21-GAP-02503-keymap-item-Sculpt-Curves-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02503", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02503", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02504", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02504-keymap-item-Sculpt-Curves-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02504.py -- tests/files/web/generated/M21-GAP-02504-keymap-item-Sculpt-Curves-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02504", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02504", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02505", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02505-keymap-item-Sculpt-Curves-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02505.py -- tests/files/web/generated/M21-GAP-02505-keymap-item-Sculpt-Curves-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02505", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02505", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02506", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02506-keymap-item-Sculpt-Curves-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02506.py -- tests/files/web/generated/M21-GAP-02506-keymap-item-Sculpt-Curves-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02506", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02506", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02507", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02507-keymap-item-Sculpt-Curves-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02507.py -- tests/files/web/generated/M21-GAP-02507-keymap-item-Sculpt-Curves-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02507", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02507", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02508", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02508-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02508.py -- tests/files/web/generated/M21-GAP-02508-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02508", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02508", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02509", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02509-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02509.py -- tests/files/web/generated/M21-GAP-02509-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02509", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02509", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02510", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02510-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02510.py -- tests/files/web/generated/M21-GAP-02510-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02510", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02510", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02511", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02511-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02511.py -- tests/files/web/generated/M21-GAP-02511-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02511", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02511", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02512", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02512-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02512.py -- tests/files/web/generated/M21-GAP-02512-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02512", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02512", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02513", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02513-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02513.py -- tests/files/web/generated/M21-GAP-02513-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02513", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02513", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02514", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02514-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02514.py -- tests/files/web/generated/M21-GAP-02514-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02514", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02514", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02515", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02515-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02515.py -- tests/files/web/generated/M21-GAP-02515-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02515", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02515", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02516", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02516-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02516.py -- tests/files/web/generated/M21-GAP-02516-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02516", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02516", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02517", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02517-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02517.py -- tests/files/web/generated/M21-GAP-02517-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02517", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02517", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02518", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02518-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02518.py -- tests/files/web/generated/M21-GAP-02518-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02518", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02518", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02519", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02519-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02519.py -- tests/files/web/generated/M21-GAP-02519-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02519", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02519", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02520", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02520-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02520.py -- tests/files/web/generated/M21-GAP-02520-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02520", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02520", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02521", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02521-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02521.py -- tests/files/web/generated/M21-GAP-02521-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02521", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02521", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02522", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02522-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02522.py -- tests/files/web/generated/M21-GAP-02522-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02522", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02522", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02523", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02523-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02523.py -- tests/files/web/generated/M21-GAP-02523-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02523", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02523", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02524", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02524-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02524.py -- tests/files/web/generated/M21-GAP-02524-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02524", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02524", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02525", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02525-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02525.py -- tests/files/web/generated/M21-GAP-02525-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02525", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02525", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02526", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02526-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02526.py -- tests/files/web/generated/M21-GAP-02526-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02526", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02526", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02527", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02527-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02527.py -- tests/files/web/generated/M21-GAP-02527-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02527", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02527", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02528", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02528-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02528.py -- tests/files/web/generated/M21-GAP-02528-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02528", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02528", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02529", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02529-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02529.py -- tests/files/web/generated/M21-GAP-02529-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02529", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02529", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02530", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02530-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02530.py -- tests/files/web/generated/M21-GAP-02530-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02530", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02530", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02531", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02531-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02531.py -- tests/files/web/generated/M21-GAP-02531-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02531", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02531", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02532", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02532-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02532.py -- tests/files/web/generated/M21-GAP-02532-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02532", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02532", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02533", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02533-keymap-item-Sculpt-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02533.py -- tests/files/web/generated/M21-GAP-02533-keymap-item-Sculpt-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02533", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02533", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02534", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02534-keymap-item-Sculpt-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02534.py -- tests/files/web/generated/M21-GAP-02534-keymap-item-Sculpt-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02534", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02534", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02535", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02535-keymap-item-Sculpt-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02535.py -- tests/files/web/generated/M21-GAP-02535-keymap-item-Sculpt-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02535", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02535", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02536", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02536-keymap-item-Sculpt-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02536.py -- tests/files/web/generated/M21-GAP-02536-keymap-item-Sculpt-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02536", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02536", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02537", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02537-keymap-item-Sculpt-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02537.py -- tests/files/web/generated/M21-GAP-02537-keymap-item-Sculpt-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02537", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02537", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02538", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02538-keymap-item-Sculpt-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02538.py -- tests/files/web/generated/M21-GAP-02538-keymap-item-Sculpt-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02538", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02538", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02539", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02539-keymap-item-Sculpt-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02539.py -- tests/files/web/generated/M21-GAP-02539-keymap-item-Sculpt-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02539", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02539", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02540", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02540-keymap-item-Sculpt-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02540.py -- tests/files/web/generated/M21-GAP-02540-keymap-item-Sculpt-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02540", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02540", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02541", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02541-keymap-item-Sculpt-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02541.py -- tests/files/web/generated/M21-GAP-02541-keymap-item-Sculpt-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02541", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02541", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02542", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02542-keymap-item-Sculpt-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02542.py -- tests/files/web/generated/M21-GAP-02542-keymap-item-Sculpt-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02542", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02542", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02543", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02543-keymap-item-Sculpt-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02543.py -- tests/files/web/generated/M21-GAP-02543-keymap-item-Sculpt-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02543", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02543", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02544", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02544-keymap-item-Sculpt-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02544.py -- tests/files/web/generated/M21-GAP-02544-keymap-item-Sculpt-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02544", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02544", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02545", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02545-keymap-item-Sculpt-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02545.py -- tests/files/web/generated/M21-GAP-02545-keymap-item-Sculpt-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02545", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02545", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02546", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02546-keymap-item-Sculpt-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02546.py -- tests/files/web/generated/M21-GAP-02546-keymap-item-Sculpt-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02546", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02546", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02547", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02547-keymap-item-Sculpt-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02547.py -- tests/files/web/generated/M21-GAP-02547-keymap-item-Sculpt-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02547", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02547", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02548", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02548-keymap-item-Sculpt-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02548.py -- tests/files/web/generated/M21-GAP-02548-keymap-item-Sculpt-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02548", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02548", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02549", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02549-keymap-item-Sculpt-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02549.py -- tests/files/web/generated/M21-GAP-02549-keymap-item-Sculpt-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02549", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02549", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02550", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02550-keymap-item-Sculpt-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02550.py -- tests/files/web/generated/M21-GAP-02550-keymap-item-Sculpt-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02550", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02550", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02551", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02551-keymap-item-Sculpt-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02551.py -- tests/files/web/generated/M21-GAP-02551-keymap-item-Sculpt-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02551", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02551", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02552", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02552-keymap-item-Sculpt-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02552.py -- tests/files/web/generated/M21-GAP-02552-keymap-item-Sculpt-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02552", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02552", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02553", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02553-keymap-item-Sculpt-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02553.py -- tests/files/web/generated/M21-GAP-02553-keymap-item-Sculpt-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02553", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02553", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02554", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02554-keymap-item-Sculpt-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02554.py -- tests/files/web/generated/M21-GAP-02554-keymap-item-Sculpt-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02554", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02554", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02555", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02555-keymap-item-Sculpt-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02555.py -- tests/files/web/generated/M21-GAP-02555-keymap-item-Sculpt-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02555", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02555", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02556", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02556-keymap-item-Sculpt-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02556.py -- tests/files/web/generated/M21-GAP-02556-keymap-item-Sculpt-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02556", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02556", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02557", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02557-keymap-item-Sculpt-EMPTY-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02557.py -- tests/files/web/generated/M21-GAP-02557-keymap-item-Sculpt-EMPTY-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02557", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02557", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02558", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02558-keymap-item-Sculpt-EMPTY-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02558.py -- tests/files/web/generated/M21-GAP-02558-keymap-item-Sculpt-EMPTY-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02558", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02558", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02559", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02559-keymap-item-Sculpt-EMPTY-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02559.py -- tests/files/web/generated/M21-GAP-02559-keymap-item-Sculpt-EMPTY-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02559", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02559", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02560", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02560-keymap-item-Sculpt-EMPTY-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02560.py -- tests/files/web/generated/M21-GAP-02560-keymap-item-Sculpt-EMPTY-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02560", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02560", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02561", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02561-keymap-item-Sculpt-EMPTY-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02561.py -- tests/files/web/generated/M21-GAP-02561-keymap-item-Sculpt-EMPTY-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02561", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02561", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02562", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02562-keymap-item-Sculpt-EMPTY-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02562.py -- tests/files/web/generated/M21-GAP-02562-keymap-item-Sculpt-EMPTY-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02562", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02562", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02563", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02563-keymap-item-Sculpt-EMPTY-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02563.py -- tests/files/web/generated/M21-GAP-02563-keymap-item-Sculpt-EMPTY-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02563", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02563", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02564", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02564-keymap-item-Sculpt-EMPTY-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02564.py -- tests/files/web/generated/M21-GAP-02564-keymap-item-Sculpt-EMPTY-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02564", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02564", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02565", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02565-keymap-item-Sculpt-EMPTY-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02565.py -- tests/files/web/generated/M21-GAP-02565-keymap-item-Sculpt-EMPTY-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02565", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02565", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02566", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02566-keymap-item-Sculpt-EMPTY-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02566.py -- tests/files/web/generated/M21-GAP-02566-keymap-item-Sculpt-EMPTY-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02566", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02566", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02567", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02567-keymap-item-Sculpt-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02567.py -- tests/files/web/generated/M21-GAP-02567-keymap-item-Sculpt-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02567", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02567", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02568", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02568-keymap-item-Sculpt-EMPTY-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02568.py -- tests/files/web/generated/M21-GAP-02568-keymap-item-Sculpt-EMPTY-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02568", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02568", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02569", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02569-keymap-item-Sculpt-EMPTY-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02569.py -- tests/files/web/generated/M21-GAP-02569-keymap-item-Sculpt-EMPTY-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02569", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02569", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02570", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02570-keymap-item-Sculpt-EMPTY-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02570.py -- tests/files/web/generated/M21-GAP-02570-keymap-item-Sculpt-EMPTY-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02570", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02570", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02571", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02571-keymap-item-Sculpt-EMPTY-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02571.py -- tests/files/web/generated/M21-GAP-02571-keymap-item-Sculpt-EMPTY-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02571", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02571", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02572", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02572-keymap-item-Sculpt-EMPTY-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02572.py -- tests/files/web/generated/M21-GAP-02572-keymap-item-Sculpt-EMPTY-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02572", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02572", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02573", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02573-keymap-item-Sculpt-EMPTY-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02573.py -- tests/files/web/generated/M21-GAP-02573-keymap-item-Sculpt-EMPTY-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02573", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02573", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02574", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02574-keymap-item-Sculpt-EMPTY-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02574.py -- tests/files/web/generated/M21-GAP-02574-keymap-item-Sculpt-EMPTY-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02574", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02574", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02575", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02575-keymap-item-Sculpt-EMPTY-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02575.py -- tests/files/web/generated/M21-GAP-02575-keymap-item-Sculpt-EMPTY-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02575", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02575", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02576", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02576-keymap-item-Sculpt-EMPTY-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02576.py -- tests/files/web/generated/M21-GAP-02576-keymap-item-Sculpt-EMPTY-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02576", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02576", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02577", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02577-keymap-item-Sculpt-EMPTY-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02577.py -- tests/files/web/generated/M21-GAP-02577-keymap-item-Sculpt-EMPTY-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02577", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02577", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02578", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02578-keymap-item-Sculpt-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02578.py -- tests/files/web/generated/M21-GAP-02578-keymap-item-Sculpt-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02578", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02578", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02579", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02579-keymap-item-Sculpt-EMPTY-WINDOW-50.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02579.py -- tests/files/web/generated/M21-GAP-02579-keymap-item-Sculpt-EMPTY-WINDOW-50.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02579", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02579", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02580", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02580-keymap-item-Sculpt-EMPTY-WINDOW-51.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02580.py -- tests/files/web/generated/M21-GAP-02580-keymap-item-Sculpt-EMPTY-WINDOW-51.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02580", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02580", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02581", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:52", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02581-keymap-item-Sculpt-EMPTY-WINDOW-52.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02581.py -- tests/files/web/generated/M21-GAP-02581-keymap-item-Sculpt-EMPTY-WINDOW-52.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02581", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02581", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02582", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:53", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02582-keymap-item-Sculpt-EMPTY-WINDOW-53.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02582.py -- tests/files/web/generated/M21-GAP-02582-keymap-item-Sculpt-EMPTY-WINDOW-53.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02582", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02582", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02583", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:54", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02583-keymap-item-Sculpt-EMPTY-WINDOW-54.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02583.py -- tests/files/web/generated/M21-GAP-02583-keymap-item-Sculpt-EMPTY-WINDOW-54.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02583", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02583", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02584", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:55", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02584-keymap-item-Sculpt-EMPTY-WINDOW-55.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02584.py -- tests/files/web/generated/M21-GAP-02584-keymap-item-Sculpt-EMPTY-WINDOW-55.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02584", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02584", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02585", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:56", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02585-keymap-item-Sculpt-EMPTY-WINDOW-56.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02585.py -- tests/files/web/generated/M21-GAP-02585-keymap-item-Sculpt-EMPTY-WINDOW-56.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02585", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02585", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02586", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:57", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02586-keymap-item-Sculpt-EMPTY-WINDOW-57.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02586.py -- tests/files/web/generated/M21-GAP-02586-keymap-item-Sculpt-EMPTY-WINDOW-57.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02586", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02586", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02587", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:58", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02587-keymap-item-Sculpt-EMPTY-WINDOW-58.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02587.py -- tests/files/web/generated/M21-GAP-02587-keymap-item-Sculpt-EMPTY-WINDOW-58.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02587", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02587", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02588", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:59", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02588-keymap-item-Sculpt-EMPTY-WINDOW-59.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02588.py -- tests/files/web/generated/M21-GAP-02588-keymap-item-Sculpt-EMPTY-WINDOW-59.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02588", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02588", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02589", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02589-keymap-item-Sculpt-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02589.py -- tests/files/web/generated/M21-GAP-02589-keymap-item-Sculpt-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02589", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02589", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02590", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:60", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02590-keymap-item-Sculpt-EMPTY-WINDOW-60.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02590.py -- tests/files/web/generated/M21-GAP-02590-keymap-item-Sculpt-EMPTY-WINDOW-60.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02590", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02590", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02591", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:61", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02591-keymap-item-Sculpt-EMPTY-WINDOW-61.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02591.py -- tests/files/web/generated/M21-GAP-02591-keymap-item-Sculpt-EMPTY-WINDOW-61.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02591", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02591", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02592", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:62", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02592-keymap-item-Sculpt-EMPTY-WINDOW-62.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02592.py -- tests/files/web/generated/M21-GAP-02592-keymap-item-Sculpt-EMPTY-WINDOW-62.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02592", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02592", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02593", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:63", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02593-keymap-item-Sculpt-EMPTY-WINDOW-63.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02593.py -- tests/files/web/generated/M21-GAP-02593-keymap-item-Sculpt-EMPTY-WINDOW-63.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02593", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02593", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02594", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:64", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02594-keymap-item-Sculpt-EMPTY-WINDOW-64.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02594.py -- tests/files/web/generated/M21-GAP-02594-keymap-item-Sculpt-EMPTY-WINDOW-64.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02594", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02594", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02595", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:65", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02595-keymap-item-Sculpt-EMPTY-WINDOW-65.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02595.py -- tests/files/web/generated/M21-GAP-02595-keymap-item-Sculpt-EMPTY-WINDOW-65.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02595", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02595", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02596", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:66", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02596-keymap-item-Sculpt-EMPTY-WINDOW-66.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02596.py -- tests/files/web/generated/M21-GAP-02596-keymap-item-Sculpt-EMPTY-WINDOW-66.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02596", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02596", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02597", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02597-keymap-item-Sculpt-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02597.py -- tests/files/web/generated/M21-GAP-02597-keymap-item-Sculpt-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02597", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02597", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02598", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02598-keymap-item-Sculpt-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02598.py -- tests/files/web/generated/M21-GAP-02598-keymap-item-Sculpt-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02598", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02598", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02599", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02599-keymap-item-Sculpt-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02599.py -- tests/files/web/generated/M21-GAP-02599-keymap-item-Sculpt-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02599", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02599", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02600", + "gapId": "keymap-item:Sequencer Channels:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02600-keymap-item-Sequencer-Channels-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02600.py -- tests/files/web/generated/M21-GAP-02600-keymap-item-Sequencer-Channels-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02600", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02600", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02601", + "gapId": "keymap-item:Sequencer Channels:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02601-keymap-item-Sequencer-Channels-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02601.py -- tests/files/web/generated/M21-GAP-02601-keymap-item-Sequencer-Channels-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02601", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02601", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02602", + "gapId": "keymap-item:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02602-keymap-item-Sequencer-Tool-Blade-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02602.py -- tests/files/web/generated/M21-GAP-02602-keymap-item-Sequencer-Tool-Blade-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02602", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02602", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02603", + "gapId": "keymap-item:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02603-keymap-item-Sequencer-Tool-Blade-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02603.py -- tests/files/web/generated/M21-GAP-02603-keymap-item-Sequencer-Tool-Blade-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02603", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02603", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02604", + "gapId": "keymap-item:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02604-keymap-item-Sequencer-Tool-Blade-SEQUENCE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02604.py -- tests/files/web/generated/M21-GAP-02604-keymap-item-Sequencer-Tool-Blade-SEQUENCE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02604", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02604", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02605", + "gapId": "keymap-item:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02605-keymap-item-Sequencer-Tool-Blade-SEQUENCE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02605.py -- tests/files/web/generated/M21-GAP-02605-keymap-item-Sequencer-Tool-Blade-SEQUENCE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02605", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02605", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02606", + "gapId": "keymap-item:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02606-keymap-item-Sequencer-Tool-Blade-SEQUENCE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02606.py -- tests/files/web/generated/M21-GAP-02606-keymap-item-Sequencer-Tool-Blade-SEQUENCE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02606", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02606", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02607", + "gapId": "keymap-item:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02607-keymap-item-Sequencer-Tool-Blade-SEQUENCE_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02607.py -- tests/files/web/generated/M21-GAP-02607-keymap-item-Sequencer-Tool-Blade-SEQUENCE_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02607", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02607", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02608", + "gapId": "keymap-item:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02608-keymap-item-Sequencer-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02608.py -- tests/files/web/generated/M21-GAP-02608-keymap-item-Sequencer-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02608", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02608", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02609", + "gapId": "keymap-item:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02609-keymap-item-Sequencer-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02609.py -- tests/files/web/generated/M21-GAP-02609-keymap-item-Sequencer-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02609", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02609", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02610", + "gapId": "keymap-item:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02610-keymap-item-Sequencer-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02610.py -- tests/files/web/generated/M21-GAP-02610-keymap-item-Sequencer-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02610", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02610", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02611", + "gapId": "keymap-item:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02611-keymap-item-Sequencer-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02611.py -- tests/files/web/generated/M21-GAP-02611-keymap-item-Sequencer-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02611", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02611", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02612", + "gapId": "keymap-item:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02612-keymap-item-Sequencer-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02612.py -- tests/files/web/generated/M21-GAP-02612-keymap-item-Sequencer-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02612", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02612", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02613", + "gapId": "keymap-item:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02613-keymap-item-Sequencer-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02613.py -- tests/files/web/generated/M21-GAP-02613-keymap-item-Sequencer-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02613", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02613", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02614", + "gapId": "keymap-item:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02614-keymap-item-Sequencer-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02614.py -- tests/files/web/generated/M21-GAP-02614-keymap-item-Sequencer-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02614", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02614", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02615", + "gapId": "keymap-item:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02615-keymap-item-Sequencer-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02615.py -- tests/files/web/generated/M21-GAP-02615-keymap-item-Sequencer-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02615", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02615", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02616", + "gapId": "keymap-item:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02616-keymap-item-Sequencer-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02616.py -- tests/files/web/generated/M21-GAP-02616-keymap-item-Sequencer-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02616", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02616", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02617", + "gapId": "keymap-item:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02617-keymap-item-Sequencer-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02617.py -- tests/files/web/generated/M21-GAP-02617-keymap-item-Sequencer-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02617", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02617", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02618", + "gapId": "keymap-item:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02618-keymap-item-Sequencer-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02618.py -- tests/files/web/generated/M21-GAP-02618-keymap-item-Sequencer-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02618", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02618", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02619", + "gapId": "keymap-item:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02619-keymap-item-Sequencer-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02619.py -- tests/files/web/generated/M21-GAP-02619-keymap-item-Sequencer-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02619", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02619", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02620", + "gapId": "keymap-item:Sequencer Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02620-keymap-item-Sequencer-Tool-Select-Circle-fallback-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02620.py -- tests/files/web/generated/M21-GAP-02620-keymap-item-Sequencer-Tool-Select-Circle-fallback-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02620", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02620", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02621", + "gapId": "keymap-item:Sequencer Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02621-keymap-item-Sequencer-Tool-Select-Circle-fallback-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02621.py -- tests/files/web/generated/M21-GAP-02621-keymap-item-Sequencer-Tool-Select-Circle-fallback-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02621", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02621", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02622", + "gapId": "keymap-item:Sequencer Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02622-keymap-item-Sequencer-Tool-Select-Circle-fallback-SEQUENCE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02622.py -- tests/files/web/generated/M21-GAP-02622-keymap-item-Sequencer-Tool-Select-Circle-fallback-SEQUENCE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02622", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02622", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02623", + "gapId": "keymap-item:Sequencer Tool: Select Circle:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02623-keymap-item-Sequencer-Tool-Select-Circle-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02623.py -- tests/files/web/generated/M21-GAP-02623-keymap-item-Sequencer-Tool-Select-Circle-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02623", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02623", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02624", + "gapId": "keymap-item:Sequencer Tool: Select Circle:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02624-keymap-item-Sequencer-Tool-Select-Circle-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02624.py -- tests/files/web/generated/M21-GAP-02624-keymap-item-Sequencer-Tool-Select-Circle-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02624", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02624", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02625", + "gapId": "keymap-item:Sequencer Tool: Select Circle:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02625-keymap-item-Sequencer-Tool-Select-Circle-SEQUENCE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02625.py -- tests/files/web/generated/M21-GAP-02625-keymap-item-Sequencer-Tool-Select-Circle-SEQUENCE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02625", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02625", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02626", + "gapId": "keymap-item:Sequencer Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02626-keymap-item-Sequencer-Tool-Select-Lasso-fallback-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02626.py -- tests/files/web/generated/M21-GAP-02626-keymap-item-Sequencer-Tool-Select-Lasso-fallback-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02626", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02626", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02627", + "gapId": "keymap-item:Sequencer Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02627-keymap-item-Sequencer-Tool-Select-Lasso-fallback-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02627.py -- tests/files/web/generated/M21-GAP-02627-keymap-item-Sequencer-Tool-Select-Lasso-fallback-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02627", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02627", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02628", + "gapId": "keymap-item:Sequencer Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02628-keymap-item-Sequencer-Tool-Select-Lasso-fallback-SEQUENCE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02628.py -- tests/files/web/generated/M21-GAP-02628-keymap-item-Sequencer-Tool-Select-Lasso-fallback-SEQUENCE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02628", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02628", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02629", + "gapId": "keymap-item:Sequencer Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02629-keymap-item-Sequencer-Tool-Select-Lasso-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02629.py -- tests/files/web/generated/M21-GAP-02629-keymap-item-Sequencer-Tool-Select-Lasso-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02629", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02629", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02630", + "gapId": "keymap-item:Sequencer Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02630-keymap-item-Sequencer-Tool-Select-Lasso-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02630.py -- tests/files/web/generated/M21-GAP-02630-keymap-item-Sequencer-Tool-Select-Lasso-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02630", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02630", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02631", + "gapId": "keymap-item:Sequencer Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02631-keymap-item-Sequencer-Tool-Select-Lasso-SEQUENCE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02631.py -- tests/files/web/generated/M21-GAP-02631-keymap-item-Sequencer-Tool-Select-Lasso-SEQUENCE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02631", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02631", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02632", + "gapId": "keymap-item:Sequencer Tool: Slip:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02632-keymap-item-Sequencer-Tool-Slip-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02632.py -- tests/files/web/generated/M21-GAP-02632-keymap-item-Sequencer-Tool-Slip-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02632", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02632", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02633", + "gapId": "keymap-item:Sequencer Tool: Slip:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02633-keymap-item-Sequencer-Tool-Slip-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02633.py -- tests/files/web/generated/M21-GAP-02633-keymap-item-Sequencer-Tool-Slip-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02633", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02633", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02634", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02634-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02634.py -- tests/files/web/generated/M21-GAP-02634-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02634", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02634", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02635", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02635-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02635.py -- tests/files/web/generated/M21-GAP-02635-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02635", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02635", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02636", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02636-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02636.py -- tests/files/web/generated/M21-GAP-02636-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02636", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02636", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02637", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02637-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02637.py -- tests/files/web/generated/M21-GAP-02637-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02637", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02637", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02638", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02638-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02638.py -- tests/files/web/generated/M21-GAP-02638-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02638", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02638", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02639", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02639-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02639.py -- tests/files/web/generated/M21-GAP-02639-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02639", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02639", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02640", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02640-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02640.py -- tests/files/web/generated/M21-GAP-02640-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02640", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02640", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02641", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02641-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02641.py -- tests/files/web/generated/M21-GAP-02641-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02641", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02641", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02642", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02642-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02642.py -- tests/files/web/generated/M21-GAP-02642-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02642", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02642", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02643", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02643-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02643.py -- tests/files/web/generated/M21-GAP-02643-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02643", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02643", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02644", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02644-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02644.py -- tests/files/web/generated/M21-GAP-02644-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02644", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02644", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02645", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02645-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02645.py -- tests/files/web/generated/M21-GAP-02645-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02645", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02645", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02646", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02646-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02646.py -- tests/files/web/generated/M21-GAP-02646-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02646", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02646", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02647", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02647-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02647.py -- tests/files/web/generated/M21-GAP-02647-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02647", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02647", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02648", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02648-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02648.py -- tests/files/web/generated/M21-GAP-02648-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02648", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02648", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02649", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02649-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02649.py -- tests/files/web/generated/M21-GAP-02649-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02649", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02649", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02650", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02650-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02650.py -- tests/files/web/generated/M21-GAP-02650-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02650", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02650", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02651", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02651-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02651.py -- tests/files/web/generated/M21-GAP-02651-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02651", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02651", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02652", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02652-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02652.py -- tests/files/web/generated/M21-GAP-02652-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02652", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02652", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02653", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02653-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02653.py -- tests/files/web/generated/M21-GAP-02653-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02653", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02653", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02654", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02654-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02654.py -- tests/files/web/generated/M21-GAP-02654-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02654", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02654", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02655", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02655-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02655.py -- tests/files/web/generated/M21-GAP-02655-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02655", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02655", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02656", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02656-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02656.py -- tests/files/web/generated/M21-GAP-02656-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02656", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02656", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02657", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02657-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02657.py -- tests/files/web/generated/M21-GAP-02657-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02657", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02657", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02658", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02658-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02658.py -- tests/files/web/generated/M21-GAP-02658-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02658", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02658", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02659", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02659-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02659.py -- tests/files/web/generated/M21-GAP-02659-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02659", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02659", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02660", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02660-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02660.py -- tests/files/web/generated/M21-GAP-02660-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02660", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02660", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02661", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02661-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02661.py -- tests/files/web/generated/M21-GAP-02661-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02661", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02661", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02662", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02662-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02662.py -- tests/files/web/generated/M21-GAP-02662-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02662", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02662", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02663", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02663-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02663.py -- tests/files/web/generated/M21-GAP-02663-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02663", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02663", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02664", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02664-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02664.py -- tests/files/web/generated/M21-GAP-02664-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02664", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02664", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02665", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02665-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02665.py -- tests/files/web/generated/M21-GAP-02665-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02665", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02665", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02666", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02666-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02666.py -- tests/files/web/generated/M21-GAP-02666-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02666", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02666", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02667", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02667-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02667.py -- tests/files/web/generated/M21-GAP-02667-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02667", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02667", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02668", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02668-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02668.py -- tests/files/web/generated/M21-GAP-02668-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02668", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02668", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02669", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02669-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02669.py -- tests/files/web/generated/M21-GAP-02669-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02669", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02669", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02670", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02670-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02670.py -- tests/files/web/generated/M21-GAP-02670-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02670", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02670", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02671", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02671-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02671.py -- tests/files/web/generated/M21-GAP-02671-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02671", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02671", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02672", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02672-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02672.py -- tests/files/web/generated/M21-GAP-02672-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02672", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02672", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02673", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02673-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02673.py -- tests/files/web/generated/M21-GAP-02673-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02673", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02673", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02674", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02674-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02674.py -- tests/files/web/generated/M21-GAP-02674-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02674", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02674", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02675", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02675-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02675.py -- tests/files/web/generated/M21-GAP-02675-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02675", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02675", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02676", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02676-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02676.py -- tests/files/web/generated/M21-GAP-02676-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02676", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02676", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02677", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02677-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02677.py -- tests/files/web/generated/M21-GAP-02677-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02677", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02677", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02678", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02678-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02678.py -- tests/files/web/generated/M21-GAP-02678-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02678", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02678", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02679", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02679-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02679.py -- tests/files/web/generated/M21-GAP-02679-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02679", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02679", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02680", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02680-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-50.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02680.py -- tests/files/web/generated/M21-GAP-02680-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-50.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02680", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02680", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02681", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:51", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02681-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-51.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02681.py -- tests/files/web/generated/M21-GAP-02681-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-51.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02681", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02681", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02682", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:52", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02682-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-52.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02682.py -- tests/files/web/generated/M21-GAP-02682-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-52.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02682", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02682", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02683", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:53", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02683-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-53.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02683.py -- tests/files/web/generated/M21-GAP-02683-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-53.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02683", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02683", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02684", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:54", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02684-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-54.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02684.py -- tests/files/web/generated/M21-GAP-02684-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-54.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02684", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02684", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02685", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:55", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02685-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-55.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02685.py -- tests/files/web/generated/M21-GAP-02685-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-55.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02685", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02685", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02686", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:56", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02686-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-56.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02686.py -- tests/files/web/generated/M21-GAP-02686-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-56.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02686", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02686", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02687", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:57", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02687-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-57.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02687.py -- tests/files/web/generated/M21-GAP-02687-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-57.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02687", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02687", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02688", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:58", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02688-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-58.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02688.py -- tests/files/web/generated/M21-GAP-02688-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-58.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02688", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02688", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02689", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:59", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02689-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-59.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02689.py -- tests/files/web/generated/M21-GAP-02689-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-59.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02689", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02689", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02690", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02690-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02690.py -- tests/files/web/generated/M21-GAP-02690-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02690", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02690", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02691", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:60", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02691-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-60.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02691.py -- tests/files/web/generated/M21-GAP-02691-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-60.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02691", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02691", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02692", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:61", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02692-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-61.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02692.py -- tests/files/web/generated/M21-GAP-02692-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-61.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02692", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02692", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02693", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:62", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02693-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-62.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02693.py -- tests/files/web/generated/M21-GAP-02693-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-62.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02693", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02693", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02694", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:63", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02694-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-63.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02694.py -- tests/files/web/generated/M21-GAP-02694-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-63.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02694", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02694", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02695", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:64", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02695-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-64.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02695.py -- tests/files/web/generated/M21-GAP-02695-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-64.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02695", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02695", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02696", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:65", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02696-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-65.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02696.py -- tests/files/web/generated/M21-GAP-02696-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-65.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02696", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02696", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02697", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:66", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02697-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-66.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02697.py -- tests/files/web/generated/M21-GAP-02697-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-66.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02697", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02697", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02698", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:67", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02698-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-67.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02698.py -- tests/files/web/generated/M21-GAP-02698-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-67.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02698", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02698", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02699", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:68", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02699-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-68.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02699.py -- tests/files/web/generated/M21-GAP-02699-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-68.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02699", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02699", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02700", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:69", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02700-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-69.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02700.py -- tests/files/web/generated/M21-GAP-02700-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-69.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02700", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02700", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02701", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02701-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02701.py -- tests/files/web/generated/M21-GAP-02701-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02701", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02701", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02702", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:70", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02702-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-70.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02702.py -- tests/files/web/generated/M21-GAP-02702-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-70.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02702", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02702", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02703", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:71", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02703-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-71.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02703.py -- tests/files/web/generated/M21-GAP-02703-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-71.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02703", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02703", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02704", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:72", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02704-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-72.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02704.py -- tests/files/web/generated/M21-GAP-02704-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-72.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02704", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02704", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02705", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:73", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02705-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-73.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02705.py -- tests/files/web/generated/M21-GAP-02705-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-73.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02705", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02705", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02706", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:74", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02706-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-74.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02706.py -- tests/files/web/generated/M21-GAP-02706-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-74.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02706", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02706", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02707", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:75", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02707-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-75.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02707.py -- tests/files/web/generated/M21-GAP-02707-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-75.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02707", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02707", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02708", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:76", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02708-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-76.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02708.py -- tests/files/web/generated/M21-GAP-02708-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-76.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02708", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02708", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02709", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:77", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02709-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-77.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02709.py -- tests/files/web/generated/M21-GAP-02709-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-77.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02709", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02709", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02710", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:78", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02710-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-78.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02710.py -- tests/files/web/generated/M21-GAP-02710-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-78.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02710", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02710", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02711", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:79", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02711-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-79.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02711.py -- tests/files/web/generated/M21-GAP-02711-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-79.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02711", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02711", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02712", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02712-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02712.py -- tests/files/web/generated/M21-GAP-02712-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02712", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02712", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02713", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:80", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02713-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-80.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02713.py -- tests/files/web/generated/M21-GAP-02713-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-80.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02713", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02713", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02714", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:81", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02714-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-81.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02714.py -- tests/files/web/generated/M21-GAP-02714-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-81.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02714", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02714", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02715", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:82", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02715-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-82.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02715.py -- tests/files/web/generated/M21-GAP-02715-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-82.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02715", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02715", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02716", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:83", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02716-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-83.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02716.py -- tests/files/web/generated/M21-GAP-02716-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-83.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02716", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02716", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02717", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:84", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02717-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-84.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02717.py -- tests/files/web/generated/M21-GAP-02717-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-84.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02717", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02717", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02718", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:85", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02718-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-85.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02718.py -- tests/files/web/generated/M21-GAP-02718-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-85.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02718", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02718", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02719", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:86", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02719-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-86.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02719.py -- tests/files/web/generated/M21-GAP-02719-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-86.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02719", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02719", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02720", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:87", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02720-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-87.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02720.py -- tests/files/web/generated/M21-GAP-02720-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-87.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02720", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02720", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02721", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:88", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02721-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-88.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02721.py -- tests/files/web/generated/M21-GAP-02721-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-88.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02721", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02721", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02722", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:89", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02722-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-89.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02722.py -- tests/files/web/generated/M21-GAP-02722-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-89.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02722", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02722", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02723", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02723-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02723.py -- tests/files/web/generated/M21-GAP-02723-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02723", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02723", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02724", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:90", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02724-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-90.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02724.py -- tests/files/web/generated/M21-GAP-02724-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-90.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02724", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02724", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02725", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:91", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02725-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-91.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02725.py -- tests/files/web/generated/M21-GAP-02725-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-91.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02725", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02725", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02726", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:92", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02726-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-92.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02726.py -- tests/files/web/generated/M21-GAP-02726-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-92.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02726", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02726", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02727", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:93", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02727-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-93.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02727.py -- tests/files/web/generated/M21-GAP-02727-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-93.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02727", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02727", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02728", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:94", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02728-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-94.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02728.py -- tests/files/web/generated/M21-GAP-02728-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-94.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02728", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02728", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02729", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02729-keymap-item-Slip-Modal-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02729.py -- tests/files/web/generated/M21-GAP-02729-keymap-item-Slip-Modal-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02729", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02729", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02730", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02730-keymap-item-Slip-Modal-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02730.py -- tests/files/web/generated/M21-GAP-02730-keymap-item-Slip-Modal-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02730", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02730", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02731", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02731-keymap-item-Slip-Modal-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02731.py -- tests/files/web/generated/M21-GAP-02731-keymap-item-Slip-Modal-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02731", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02731", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02732", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02732-keymap-item-Slip-Modal-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02732.py -- tests/files/web/generated/M21-GAP-02732-keymap-item-Slip-Modal-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02732", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02732", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02733", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02733-keymap-item-Slip-Modal-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02733.py -- tests/files/web/generated/M21-GAP-02733-keymap-item-Slip-Modal-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02733", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02733", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02734", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02734-keymap-item-Slip-Modal-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02734.py -- tests/files/web/generated/M21-GAP-02734-keymap-item-Slip-Modal-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02734", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02734", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02735", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02735-keymap-item-Slip-Modal-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02735.py -- tests/files/web/generated/M21-GAP-02735-keymap-item-Slip-Modal-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02735", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02735", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02736", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02736-keymap-item-Slip-Modal-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02736.py -- tests/files/web/generated/M21-GAP-02736-keymap-item-Slip-Modal-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02736", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02736", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02737", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02737-keymap-item-Slip-Modal-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02737.py -- tests/files/web/generated/M21-GAP-02737-keymap-item-Slip-Modal-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02737", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02737", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02738", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02738-keymap-item-Slip-Modal-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02738.py -- tests/files/web/generated/M21-GAP-02738-keymap-item-Slip-Modal-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02738", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02738", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02739", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02739-keymap-item-Slip-Modal-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02739.py -- tests/files/web/generated/M21-GAP-02739-keymap-item-Slip-Modal-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02739", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02739", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02740", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02740-keymap-item-Slip-Modal-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02740.py -- tests/files/web/generated/M21-GAP-02740-keymap-item-Slip-Modal-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02740", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02740", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02741", + "gapId": "keymap-item:Spreadsheet Generic:SPREADSHEET:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02741-keymap-item-Spreadsheet-Generic-SPREADSHEET-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02741.py -- tests/files/web/generated/M21-GAP-02741-keymap-item-Spreadsheet-Generic-SPREADSHEET-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02741", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02741", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02742", + "gapId": "keymap-item:Spreadsheet Generic:SPREADSHEET:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02742-keymap-item-Spreadsheet-Generic-SPREADSHEET-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02742.py -- tests/files/web/generated/M21-GAP-02742-keymap-item-Spreadsheet-Generic-SPREADSHEET-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02742", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02742", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02743", + "gapId": "keymap-item:Spreadsheet Generic:SPREADSHEET:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02743-keymap-item-Spreadsheet-Generic-SPREADSHEET-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02743.py -- tests/files/web/generated/M21-GAP-02743-keymap-item-Spreadsheet-Generic-SPREADSHEET-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02743", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02743", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02744", + "gapId": "keymap-item:Spreadsheet Generic:SPREADSHEET:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02744-keymap-item-Spreadsheet-Generic-SPREADSHEET-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02744.py -- tests/files/web/generated/M21-GAP-02744-keymap-item-Spreadsheet-Generic-SPREADSHEET-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02744", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02744", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02745", + "gapId": "keymap-item:Spreadsheet Generic:SPREADSHEET:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02745-keymap-item-Spreadsheet-Generic-SPREADSHEET-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02745.py -- tests/files/web/generated/M21-GAP-02745-keymap-item-Spreadsheet-Generic-SPREADSHEET-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02745", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02745", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02746", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02746-keymap-item-Standard-Modal-Map-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02746.py -- tests/files/web/generated/M21-GAP-02746-keymap-item-Standard-Modal-Map-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02746", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02746", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02747", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02747-keymap-item-Standard-Modal-Map-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02747.py -- tests/files/web/generated/M21-GAP-02747-keymap-item-Standard-Modal-Map-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02747", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02747", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02748", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02748-keymap-item-Standard-Modal-Map-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02748.py -- tests/files/web/generated/M21-GAP-02748-keymap-item-Standard-Modal-Map-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02748", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02748", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02749", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02749-keymap-item-Standard-Modal-Map-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02749.py -- tests/files/web/generated/M21-GAP-02749-keymap-item-Standard-Modal-Map-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02749", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02749", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02750", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02750-keymap-item-Standard-Modal-Map-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02750.py -- tests/files/web/generated/M21-GAP-02750-keymap-item-Standard-Modal-Map-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02750", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02750", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02751", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02751-keymap-item-Standard-Modal-Map-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02751.py -- tests/files/web/generated/M21-GAP-02751-keymap-item-Standard-Modal-Map-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02751", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02751", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02752", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02752-keymap-item-Standard-Modal-Map-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02752.py -- tests/files/web/generated/M21-GAP-02752-keymap-item-Standard-Modal-Map-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02752", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02752", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02753", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02753-keymap-item-Standard-Modal-Map-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02753.py -- tests/files/web/generated/M21-GAP-02753-keymap-item-Standard-Modal-Map-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02753", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02753", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02754", + "gapId": "keymap-item:Text Generic:TEXT_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02754-keymap-item-Text-Generic-TEXT_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02754.py -- tests/files/web/generated/M21-GAP-02754-keymap-item-Text-Generic-TEXT_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02754", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02754", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02755", + "gapId": "keymap-item:Text Generic:TEXT_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02755-keymap-item-Text-Generic-TEXT_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02755.py -- tests/files/web/generated/M21-GAP-02755-keymap-item-Text-Generic-TEXT_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02755", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02755", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02756", + "gapId": "keymap-item:Text Generic:TEXT_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02756-keymap-item-Text-Generic-TEXT_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02756.py -- tests/files/web/generated/M21-GAP-02756-keymap-item-Text-Generic-TEXT_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02756", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02756", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02757", + "gapId": "keymap-item:Text Generic:TEXT_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02757-keymap-item-Text-Generic-TEXT_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02757.py -- tests/files/web/generated/M21-GAP-02757-keymap-item-Text-Generic-TEXT_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02757", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02757", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02758", + "gapId": "keymap-item:Text Generic:TEXT_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02758-keymap-item-Text-Generic-TEXT_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02758.py -- tests/files/web/generated/M21-GAP-02758-keymap-item-Text-Generic-TEXT_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02758", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02758", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02759", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02759-keymap-item-Text-TEXT_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02759.py -- tests/files/web/generated/M21-GAP-02759-keymap-item-Text-TEXT_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02759", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02759", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02760", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02760-keymap-item-Text-TEXT_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02760.py -- tests/files/web/generated/M21-GAP-02760-keymap-item-Text-TEXT_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02760", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02760", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02761", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02761-keymap-item-Text-TEXT_EDITOR-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02761.py -- tests/files/web/generated/M21-GAP-02761-keymap-item-Text-TEXT_EDITOR-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02761", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02761", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02762", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02762-keymap-item-Text-TEXT_EDITOR-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02762.py -- tests/files/web/generated/M21-GAP-02762-keymap-item-Text-TEXT_EDITOR-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02762", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02762", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02763", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02763-keymap-item-Text-TEXT_EDITOR-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02763.py -- tests/files/web/generated/M21-GAP-02763-keymap-item-Text-TEXT_EDITOR-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02763", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02763", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02764", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02764-keymap-item-Text-TEXT_EDITOR-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02764.py -- tests/files/web/generated/M21-GAP-02764-keymap-item-Text-TEXT_EDITOR-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02764", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02764", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02765", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02765-keymap-item-Text-TEXT_EDITOR-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02765.py -- tests/files/web/generated/M21-GAP-02765-keymap-item-Text-TEXT_EDITOR-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02765", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02765", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02766", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02766-keymap-item-Text-TEXT_EDITOR-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02766.py -- tests/files/web/generated/M21-GAP-02766-keymap-item-Text-TEXT_EDITOR-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02766", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02766", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02767", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02767-keymap-item-Text-TEXT_EDITOR-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02767.py -- tests/files/web/generated/M21-GAP-02767-keymap-item-Text-TEXT_EDITOR-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02767", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02767", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02768", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02768-keymap-item-Text-TEXT_EDITOR-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02768.py -- tests/files/web/generated/M21-GAP-02768-keymap-item-Text-TEXT_EDITOR-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02768", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02768", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02769", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02769-keymap-item-Text-TEXT_EDITOR-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02769.py -- tests/files/web/generated/M21-GAP-02769-keymap-item-Text-TEXT_EDITOR-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02769", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02769", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02770", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02770-keymap-item-Text-TEXT_EDITOR-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02770.py -- tests/files/web/generated/M21-GAP-02770-keymap-item-Text-TEXT_EDITOR-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02770", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02770", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02771", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02771-keymap-item-Text-TEXT_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02771.py -- tests/files/web/generated/M21-GAP-02771-keymap-item-Text-TEXT_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02771", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02771", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02772", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02772-keymap-item-Text-TEXT_EDITOR-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02772.py -- tests/files/web/generated/M21-GAP-02772-keymap-item-Text-TEXT_EDITOR-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02772", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02772", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02773", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02773-keymap-item-Text-TEXT_EDITOR-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02773.py -- tests/files/web/generated/M21-GAP-02773-keymap-item-Text-TEXT_EDITOR-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02773", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02773", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02774", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02774-keymap-item-Text-TEXT_EDITOR-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02774.py -- tests/files/web/generated/M21-GAP-02774-keymap-item-Text-TEXT_EDITOR-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02774", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02774", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02775", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02775-keymap-item-Text-TEXT_EDITOR-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02775.py -- tests/files/web/generated/M21-GAP-02775-keymap-item-Text-TEXT_EDITOR-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02775", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02775", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02776", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02776-keymap-item-Text-TEXT_EDITOR-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02776.py -- tests/files/web/generated/M21-GAP-02776-keymap-item-Text-TEXT_EDITOR-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02776", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02776", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02777", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02777-keymap-item-Text-TEXT_EDITOR-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02777.py -- tests/files/web/generated/M21-GAP-02777-keymap-item-Text-TEXT_EDITOR-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02777", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02777", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02778", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02778-keymap-item-Text-TEXT_EDITOR-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02778.py -- tests/files/web/generated/M21-GAP-02778-keymap-item-Text-TEXT_EDITOR-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02778", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02778", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02779", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02779-keymap-item-Text-TEXT_EDITOR-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02779.py -- tests/files/web/generated/M21-GAP-02779-keymap-item-Text-TEXT_EDITOR-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02779", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02779", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02780", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02780-keymap-item-Text-TEXT_EDITOR-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02780.py -- tests/files/web/generated/M21-GAP-02780-keymap-item-Text-TEXT_EDITOR-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02780", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02780", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02781", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02781-keymap-item-Text-TEXT_EDITOR-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02781.py -- tests/files/web/generated/M21-GAP-02781-keymap-item-Text-TEXT_EDITOR-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02781", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02781", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02782", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02782-keymap-item-Text-TEXT_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02782.py -- tests/files/web/generated/M21-GAP-02782-keymap-item-Text-TEXT_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02782", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02782", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02783", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02783-keymap-item-Text-TEXT_EDITOR-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02783.py -- tests/files/web/generated/M21-GAP-02783-keymap-item-Text-TEXT_EDITOR-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02783", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02783", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02784", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02784-keymap-item-Text-TEXT_EDITOR-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02784.py -- tests/files/web/generated/M21-GAP-02784-keymap-item-Text-TEXT_EDITOR-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02784", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02784", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02785", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02785-keymap-item-Text-TEXT_EDITOR-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02785.py -- tests/files/web/generated/M21-GAP-02785-keymap-item-Text-TEXT_EDITOR-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02785", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02785", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02786", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02786-keymap-item-Text-TEXT_EDITOR-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02786.py -- tests/files/web/generated/M21-GAP-02786-keymap-item-Text-TEXT_EDITOR-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02786", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02786", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02787", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02787-keymap-item-Text-TEXT_EDITOR-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02787.py -- tests/files/web/generated/M21-GAP-02787-keymap-item-Text-TEXT_EDITOR-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02787", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02787", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02788", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02788-keymap-item-Text-TEXT_EDITOR-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02788.py -- tests/files/web/generated/M21-GAP-02788-keymap-item-Text-TEXT_EDITOR-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02788", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02788", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02789", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02789-keymap-item-Text-TEXT_EDITOR-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02789.py -- tests/files/web/generated/M21-GAP-02789-keymap-item-Text-TEXT_EDITOR-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02789", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02789", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02790", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02790-keymap-item-Text-TEXT_EDITOR-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02790.py -- tests/files/web/generated/M21-GAP-02790-keymap-item-Text-TEXT_EDITOR-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02790", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02790", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02791", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02791-keymap-item-Text-TEXT_EDITOR-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02791.py -- tests/files/web/generated/M21-GAP-02791-keymap-item-Text-TEXT_EDITOR-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02791", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02791", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02792", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02792-keymap-item-Text-TEXT_EDITOR-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02792.py -- tests/files/web/generated/M21-GAP-02792-keymap-item-Text-TEXT_EDITOR-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02792", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02792", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02793", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02793-keymap-item-Text-TEXT_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02793.py -- tests/files/web/generated/M21-GAP-02793-keymap-item-Text-TEXT_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02793", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02793", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02794", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02794-keymap-item-Text-TEXT_EDITOR-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02794.py -- tests/files/web/generated/M21-GAP-02794-keymap-item-Text-TEXT_EDITOR-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02794", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02794", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02795", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02795-keymap-item-Text-TEXT_EDITOR-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02795.py -- tests/files/web/generated/M21-GAP-02795-keymap-item-Text-TEXT_EDITOR-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02795", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02795", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02796", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02796-keymap-item-Text-TEXT_EDITOR-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02796.py -- tests/files/web/generated/M21-GAP-02796-keymap-item-Text-TEXT_EDITOR-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02796", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02796", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02797", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02797-keymap-item-Text-TEXT_EDITOR-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02797.py -- tests/files/web/generated/M21-GAP-02797-keymap-item-Text-TEXT_EDITOR-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02797", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02797", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02798", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02798-keymap-item-Text-TEXT_EDITOR-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02798.py -- tests/files/web/generated/M21-GAP-02798-keymap-item-Text-TEXT_EDITOR-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02798", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02798", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02799", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02799-keymap-item-Text-TEXT_EDITOR-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02799.py -- tests/files/web/generated/M21-GAP-02799-keymap-item-Text-TEXT_EDITOR-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02799", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02799", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02800", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02800-keymap-item-Text-TEXT_EDITOR-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02800.py -- tests/files/web/generated/M21-GAP-02800-keymap-item-Text-TEXT_EDITOR-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02800", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02800", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02801", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02801-keymap-item-Text-TEXT_EDITOR-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02801.py -- tests/files/web/generated/M21-GAP-02801-keymap-item-Text-TEXT_EDITOR-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02801", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02801", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02802", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02802-keymap-item-Text-TEXT_EDITOR-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02802.py -- tests/files/web/generated/M21-GAP-02802-keymap-item-Text-TEXT_EDITOR-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02802", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02802", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02803", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02803-keymap-item-Text-TEXT_EDITOR-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02803.py -- tests/files/web/generated/M21-GAP-02803-keymap-item-Text-TEXT_EDITOR-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02803", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02803", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02804", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02804-keymap-item-Text-TEXT_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02804.py -- tests/files/web/generated/M21-GAP-02804-keymap-item-Text-TEXT_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02804", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02804", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02805", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02805-keymap-item-Text-TEXT_EDITOR-WINDOW-50.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02805.py -- tests/files/web/generated/M21-GAP-02805-keymap-item-Text-TEXT_EDITOR-WINDOW-50.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02805", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02805", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02806", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:51", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02806-keymap-item-Text-TEXT_EDITOR-WINDOW-51.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02806.py -- tests/files/web/generated/M21-GAP-02806-keymap-item-Text-TEXT_EDITOR-WINDOW-51.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02806", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02806", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02807", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:52", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02807-keymap-item-Text-TEXT_EDITOR-WINDOW-52.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02807.py -- tests/files/web/generated/M21-GAP-02807-keymap-item-Text-TEXT_EDITOR-WINDOW-52.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02807", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02807", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02808", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:53", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02808-keymap-item-Text-TEXT_EDITOR-WINDOW-53.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02808.py -- tests/files/web/generated/M21-GAP-02808-keymap-item-Text-TEXT_EDITOR-WINDOW-53.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02808", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02808", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02809", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:54", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02809-keymap-item-Text-TEXT_EDITOR-WINDOW-54.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02809.py -- tests/files/web/generated/M21-GAP-02809-keymap-item-Text-TEXT_EDITOR-WINDOW-54.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02809", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02809", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02810", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:55", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02810-keymap-item-Text-TEXT_EDITOR-WINDOW-55.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02810.py -- tests/files/web/generated/M21-GAP-02810-keymap-item-Text-TEXT_EDITOR-WINDOW-55.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02810", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02810", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02811", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:56", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02811-keymap-item-Text-TEXT_EDITOR-WINDOW-56.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02811.py -- tests/files/web/generated/M21-GAP-02811-keymap-item-Text-TEXT_EDITOR-WINDOW-56.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02811", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02811", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02812", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:57", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02812-keymap-item-Text-TEXT_EDITOR-WINDOW-57.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02812.py -- tests/files/web/generated/M21-GAP-02812-keymap-item-Text-TEXT_EDITOR-WINDOW-57.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02812", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02812", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02813", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:58", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02813-keymap-item-Text-TEXT_EDITOR-WINDOW-58.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02813.py -- tests/files/web/generated/M21-GAP-02813-keymap-item-Text-TEXT_EDITOR-WINDOW-58.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02813", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02813", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02814", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:59", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02814-keymap-item-Text-TEXT_EDITOR-WINDOW-59.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02814.py -- tests/files/web/generated/M21-GAP-02814-keymap-item-Text-TEXT_EDITOR-WINDOW-59.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02814", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02814", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02815", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02815-keymap-item-Text-TEXT_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02815.py -- tests/files/web/generated/M21-GAP-02815-keymap-item-Text-TEXT_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02815", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02815", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02816", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:60", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02816-keymap-item-Text-TEXT_EDITOR-WINDOW-60.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02816.py -- tests/files/web/generated/M21-GAP-02816-keymap-item-Text-TEXT_EDITOR-WINDOW-60.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02816", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02816", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02817", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:61", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02817-keymap-item-Text-TEXT_EDITOR-WINDOW-61.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02817.py -- tests/files/web/generated/M21-GAP-02817-keymap-item-Text-TEXT_EDITOR-WINDOW-61.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02817", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02817", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02818", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:62", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02818-keymap-item-Text-TEXT_EDITOR-WINDOW-62.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02818.py -- tests/files/web/generated/M21-GAP-02818-keymap-item-Text-TEXT_EDITOR-WINDOW-62.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02818", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02818", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02819", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:63", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02819-keymap-item-Text-TEXT_EDITOR-WINDOW-63.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02819.py -- tests/files/web/generated/M21-GAP-02819-keymap-item-Text-TEXT_EDITOR-WINDOW-63.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02819", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02819", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02820", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:64", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02820-keymap-item-Text-TEXT_EDITOR-WINDOW-64.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02820.py -- tests/files/web/generated/M21-GAP-02820-keymap-item-Text-TEXT_EDITOR-WINDOW-64.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02820", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02820", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02821", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:65", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02821-keymap-item-Text-TEXT_EDITOR-WINDOW-65.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02821.py -- tests/files/web/generated/M21-GAP-02821-keymap-item-Text-TEXT_EDITOR-WINDOW-65.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02821", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02821", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02822", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:66", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02822-keymap-item-Text-TEXT_EDITOR-WINDOW-66.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02822.py -- tests/files/web/generated/M21-GAP-02822-keymap-item-Text-TEXT_EDITOR-WINDOW-66.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02822", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02822", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02823", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:67", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02823-keymap-item-Text-TEXT_EDITOR-WINDOW-67.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02823.py -- tests/files/web/generated/M21-GAP-02823-keymap-item-Text-TEXT_EDITOR-WINDOW-67.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02823", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02823", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02824", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:68", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02824-keymap-item-Text-TEXT_EDITOR-WINDOW-68.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02824.py -- tests/files/web/generated/M21-GAP-02824-keymap-item-Text-TEXT_EDITOR-WINDOW-68.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02824", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02824", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02825", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:69", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02825-keymap-item-Text-TEXT_EDITOR-WINDOW-69.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02825.py -- tests/files/web/generated/M21-GAP-02825-keymap-item-Text-TEXT_EDITOR-WINDOW-69.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02825", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02825", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02826", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02826-keymap-item-Text-TEXT_EDITOR-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02826.py -- tests/files/web/generated/M21-GAP-02826-keymap-item-Text-TEXT_EDITOR-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02826", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02826", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02827", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:70", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02827-keymap-item-Text-TEXT_EDITOR-WINDOW-70.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02827.py -- tests/files/web/generated/M21-GAP-02827-keymap-item-Text-TEXT_EDITOR-WINDOW-70.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02827", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02827", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02828", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02828-keymap-item-Text-TEXT_EDITOR-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02828.py -- tests/files/web/generated/M21-GAP-02828-keymap-item-Text-TEXT_EDITOR-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02828", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02828", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02829", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02829-keymap-item-Text-TEXT_EDITOR-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02829.py -- tests/files/web/generated/M21-GAP-02829-keymap-item-Text-TEXT_EDITOR-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02829", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02829", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02830", + "gapId": "keymap-item:Time Scrub:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02830-keymap-item-Time-Scrub-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02830.py -- tests/files/web/generated/M21-GAP-02830-keymap-item-Time-Scrub-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02830", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02830", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02831", + "gapId": "keymap-item:Toolbar Popup:EMPTY:TEMPORARY:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02831-keymap-item-Toolbar-Popup-EMPTY-TEMPORARY-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02831.py -- tests/files/web/generated/M21-GAP-02831-keymap-item-Toolbar-Popup-EMPTY-TEMPORARY-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02831", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02831", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02832", + "gapId": "keymap-item:Toolbar Popup:EMPTY:TEMPORARY:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02832-keymap-item-Toolbar-Popup-EMPTY-TEMPORARY-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02832.py -- tests/files/web/generated/M21-GAP-02832-keymap-item-Toolbar-Popup-EMPTY-TEMPORARY-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02832", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02832", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02833", + "gapId": "keymap-item:Toolbar Popup:EMPTY:TEMPORARY:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02833-keymap-item-Toolbar-Popup-EMPTY-TEMPORARY-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02833.py -- tests/files/web/generated/M21-GAP-02833-keymap-item-Toolbar-Popup-EMPTY-TEMPORARY-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02833", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02833", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02834", + "gapId": "keymap-item:Toolbar Popup:EMPTY:TEMPORARY:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02834-keymap-item-Toolbar-Popup-EMPTY-TEMPORARY-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02834.py -- tests/files/web/generated/M21-GAP-02834-keymap-item-Toolbar-Popup-EMPTY-TEMPORARY-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02834", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02834", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02835", + "gapId": "keymap-item:Toolbar Popup:EMPTY:TEMPORARY:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02835-keymap-item-Toolbar-Popup-EMPTY-TEMPORARY-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02835.py -- tests/files/web/generated/M21-GAP-02835-keymap-item-Toolbar-Popup-EMPTY-TEMPORARY-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02835", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02835", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02836", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02836-keymap-item-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02836.py -- tests/files/web/generated/M21-GAP-02836-keymap-item-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02836", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02836", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02837", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02837-keymap-item-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02837.py -- tests/files/web/generated/M21-GAP-02837-keymap-item-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02837", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02837", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02838", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02838-keymap-item-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02838.py -- tests/files/web/generated/M21-GAP-02838-keymap-item-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02838", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02838", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02839", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02839-keymap-item-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02839.py -- tests/files/web/generated/M21-GAP-02839-keymap-item-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02839", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02839", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02840", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02840-keymap-item-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02840.py -- tests/files/web/generated/M21-GAP-02840-keymap-item-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02840", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02840", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02841", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02841-keymap-item-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02841.py -- tests/files/web/generated/M21-GAP-02841-keymap-item-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02841", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02841", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02842", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02842-keymap-item-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02842.py -- tests/files/web/generated/M21-GAP-02842-keymap-item-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02842", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02842", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02843", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02843-keymap-item-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02843.py -- tests/files/web/generated/M21-GAP-02843-keymap-item-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02843", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02843", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02844", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02844-keymap-item-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02844.py -- tests/files/web/generated/M21-GAP-02844-keymap-item-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02844", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02844", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02845", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02845-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02845.py -- tests/files/web/generated/M21-GAP-02845-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02845", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02845", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02846", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02846-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02846.py -- tests/files/web/generated/M21-GAP-02846-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02846", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02846", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02847", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02847-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02847.py -- tests/files/web/generated/M21-GAP-02847-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02847", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02847", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02848", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02848-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02848.py -- tests/files/web/generated/M21-GAP-02848-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02848", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02848", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02849", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02849-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02849.py -- tests/files/web/generated/M21-GAP-02849-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02849", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02849", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02850", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02850-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02850.py -- tests/files/web/generated/M21-GAP-02850-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02850", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02850", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02851", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02851-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02851.py -- tests/files/web/generated/M21-GAP-02851-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02851", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02851", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02852", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02852-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02852.py -- tests/files/web/generated/M21-GAP-02852-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02852", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02852", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02853", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02853-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02853.py -- tests/files/web/generated/M21-GAP-02853-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02853", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02853", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02854", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02854-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02854.py -- tests/files/web/generated/M21-GAP-02854-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02854", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02854", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02855", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02855-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02855.py -- tests/files/web/generated/M21-GAP-02855-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02855", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02855", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02856", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02856-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02856.py -- tests/files/web/generated/M21-GAP-02856-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02856", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02856", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02857", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02857-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02857.py -- tests/files/web/generated/M21-GAP-02857-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02857", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02857", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02858", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02858-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02858.py -- tests/files/web/generated/M21-GAP-02858-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02858", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02858", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02859", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02859-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02859.py -- tests/files/web/generated/M21-GAP-02859-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02859", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02859", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02860", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02860-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02860.py -- tests/files/web/generated/M21-GAP-02860-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02860", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02860", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02861", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02861-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02861.py -- tests/files/web/generated/M21-GAP-02861-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02861", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02861", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02862", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02862-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02862.py -- tests/files/web/generated/M21-GAP-02862-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02862", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02862", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02863", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02863-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02863.py -- tests/files/web/generated/M21-GAP-02863-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02863", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02863", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02864", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02864-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02864.py -- tests/files/web/generated/M21-GAP-02864-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02864", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02864", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02865", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02865-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02865.py -- tests/files/web/generated/M21-GAP-02865-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02865", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02865", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02866", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02866-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02866.py -- tests/files/web/generated/M21-GAP-02866-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02866", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02866", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02867", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02867-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02867.py -- tests/files/web/generated/M21-GAP-02867-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02867", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02867", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02868", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02868-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02868.py -- tests/files/web/generated/M21-GAP-02868-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02868", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02868", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02869", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02869-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02869.py -- tests/files/web/generated/M21-GAP-02869-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02869", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02869", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02870", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02870-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02870.py -- tests/files/web/generated/M21-GAP-02870-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02870", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02870", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02871", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02871-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02871.py -- tests/files/web/generated/M21-GAP-02871-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02871", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02871", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02872", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02872-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02872.py -- tests/files/web/generated/M21-GAP-02872-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02872", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02872", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02873", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02873-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02873.py -- tests/files/web/generated/M21-GAP-02873-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02873", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02873", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02874", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02874-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02874.py -- tests/files/web/generated/M21-GAP-02874-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02874", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02874", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02875", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02875-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02875.py -- tests/files/web/generated/M21-GAP-02875-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02875", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02875", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02876", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02876-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02876.py -- tests/files/web/generated/M21-GAP-02876-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02876", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02876", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02877", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02877-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02877.py -- tests/files/web/generated/M21-GAP-02877-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02877", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02877", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02878", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02878-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02878.py -- tests/files/web/generated/M21-GAP-02878-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02878", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02878", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02879", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02879-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02879.py -- tests/files/web/generated/M21-GAP-02879-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02879", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02879", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02880", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02880-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02880.py -- tests/files/web/generated/M21-GAP-02880-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02880", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02880", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02881", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02881-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02881.py -- tests/files/web/generated/M21-GAP-02881-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02881", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02881", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02882", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02882-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02882.py -- tests/files/web/generated/M21-GAP-02882-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02882", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02882", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02883", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02883-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02883.py -- tests/files/web/generated/M21-GAP-02883-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02883", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02883", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02884", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02884-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02884.py -- tests/files/web/generated/M21-GAP-02884-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02884", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02884", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02885", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02885-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02885.py -- tests/files/web/generated/M21-GAP-02885-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02885", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02885", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02886", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02886-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02886.py -- tests/files/web/generated/M21-GAP-02886-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02886", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02886", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02887", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02887-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02887.py -- tests/files/web/generated/M21-GAP-02887-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02887", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02887", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02888", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02888-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02888.py -- tests/files/web/generated/M21-GAP-02888-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02888", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02888", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02889", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02889-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02889.py -- tests/files/web/generated/M21-GAP-02889-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02889", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02889", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02890", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02890-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02890.py -- tests/files/web/generated/M21-GAP-02890-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02890", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02890", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02891", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02891-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-50.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02891.py -- tests/files/web/generated/M21-GAP-02891-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-50.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02891", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02891", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02892", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02892-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-51.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02892.py -- tests/files/web/generated/M21-GAP-02892-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-51.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02892", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02892", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02893", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:52", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02893-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-52.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02893.py -- tests/files/web/generated/M21-GAP-02893-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-52.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02893", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02893", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02894", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:53", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02894-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-53.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02894.py -- tests/files/web/generated/M21-GAP-02894-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-53.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02894", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02894", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02895", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:54", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02895-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-54.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02895.py -- tests/files/web/generated/M21-GAP-02895-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-54.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02895", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02895", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02896", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:55", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02896-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-55.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02896.py -- tests/files/web/generated/M21-GAP-02896-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-55.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02896", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02896", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02897", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02897-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02897.py -- tests/files/web/generated/M21-GAP-02897-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02897", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02897", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02898", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02898-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02898.py -- tests/files/web/generated/M21-GAP-02898-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02898", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02898", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02899", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02899-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02899.py -- tests/files/web/generated/M21-GAP-02899-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02899", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02899", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02900", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02900-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02900.py -- tests/files/web/generated/M21-GAP-02900-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02900", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02900", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02901", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02901-keymap-item-UV-Editor-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02901.py -- tests/files/web/generated/M21-GAP-02901-keymap-item-UV-Editor-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02901", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02901", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02902", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02902-keymap-item-UV-Editor-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02902.py -- tests/files/web/generated/M21-GAP-02902-keymap-item-UV-Editor-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02902", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02902", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02903", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02903-keymap-item-UV-Editor-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02903.py -- tests/files/web/generated/M21-GAP-02903-keymap-item-UV-Editor-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02903", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02903", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02904", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02904-keymap-item-UV-Editor-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02904.py -- tests/files/web/generated/M21-GAP-02904-keymap-item-UV-Editor-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02904", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02904", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02905", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02905-keymap-item-UV-Editor-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02905.py -- tests/files/web/generated/M21-GAP-02905-keymap-item-UV-Editor-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02905", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02905", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02906", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02906-keymap-item-UV-Editor-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02906.py -- tests/files/web/generated/M21-GAP-02906-keymap-item-UV-Editor-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02906", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02906", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02907", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02907-keymap-item-UV-Editor-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02907.py -- tests/files/web/generated/M21-GAP-02907-keymap-item-UV-Editor-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02907", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02907", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02908", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02908-keymap-item-UV-Editor-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02908.py -- tests/files/web/generated/M21-GAP-02908-keymap-item-UV-Editor-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02908", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02908", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02909", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02909-keymap-item-UV-Editor-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02909.py -- tests/files/web/generated/M21-GAP-02909-keymap-item-UV-Editor-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02909", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02909", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02910", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02910-keymap-item-UV-Editor-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02910.py -- tests/files/web/generated/M21-GAP-02910-keymap-item-UV-Editor-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02910", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02910", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02911", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02911-keymap-item-UV-Editor-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02911.py -- tests/files/web/generated/M21-GAP-02911-keymap-item-UV-Editor-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02911", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02911", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02912", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02912-keymap-item-UV-Editor-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02912.py -- tests/files/web/generated/M21-GAP-02912-keymap-item-UV-Editor-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02912", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02912", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02913", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02913-keymap-item-UV-Editor-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02913.py -- tests/files/web/generated/M21-GAP-02913-keymap-item-UV-Editor-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02913", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02913", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02914", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02914-keymap-item-UV-Editor-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02914.py -- tests/files/web/generated/M21-GAP-02914-keymap-item-UV-Editor-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02914", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02914", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02915", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02915-keymap-item-UV-Editor-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02915.py -- tests/files/web/generated/M21-GAP-02915-keymap-item-UV-Editor-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02915", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02915", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02916", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02916-keymap-item-UV-Editor-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02916.py -- tests/files/web/generated/M21-GAP-02916-keymap-item-UV-Editor-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02916", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02916", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02917", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02917-keymap-item-UV-Editor-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02917.py -- tests/files/web/generated/M21-GAP-02917-keymap-item-UV-Editor-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02917", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02917", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02918", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02918-keymap-item-UV-Editor-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02918.py -- tests/files/web/generated/M21-GAP-02918-keymap-item-UV-Editor-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02918", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02918", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02919", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02919-keymap-item-UV-Editor-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02919.py -- tests/files/web/generated/M21-GAP-02919-keymap-item-UV-Editor-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02919", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02919", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02920", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02920-keymap-item-UV-Editor-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02920.py -- tests/files/web/generated/M21-GAP-02920-keymap-item-UV-Editor-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02920", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02920", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02921", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02921-keymap-item-UV-Editor-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02921.py -- tests/files/web/generated/M21-GAP-02921-keymap-item-UV-Editor-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02921", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02921", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02922", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02922-keymap-item-UV-Editor-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02922.py -- tests/files/web/generated/M21-GAP-02922-keymap-item-UV-Editor-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02922", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02922", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02923", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02923-keymap-item-UV-Editor-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02923.py -- tests/files/web/generated/M21-GAP-02923-keymap-item-UV-Editor-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02923", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02923", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02924", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02924-keymap-item-UV-Editor-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02924.py -- tests/files/web/generated/M21-GAP-02924-keymap-item-UV-Editor-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02924", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02924", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02925", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02925-keymap-item-UV-Editor-EMPTY-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02925.py -- tests/files/web/generated/M21-GAP-02925-keymap-item-UV-Editor-EMPTY-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02925", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02925", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02926", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02926-keymap-item-UV-Editor-EMPTY-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02926.py -- tests/files/web/generated/M21-GAP-02926-keymap-item-UV-Editor-EMPTY-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02926", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02926", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02927", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02927-keymap-item-UV-Editor-EMPTY-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02927.py -- tests/files/web/generated/M21-GAP-02927-keymap-item-UV-Editor-EMPTY-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02927", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02927", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02928", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02928-keymap-item-UV-Editor-EMPTY-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02928.py -- tests/files/web/generated/M21-GAP-02928-keymap-item-UV-Editor-EMPTY-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02928", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02928", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02929", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02929-keymap-item-UV-Editor-EMPTY-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02929.py -- tests/files/web/generated/M21-GAP-02929-keymap-item-UV-Editor-EMPTY-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02929", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02929", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02930", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02930-keymap-item-UV-Editor-EMPTY-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02930.py -- tests/files/web/generated/M21-GAP-02930-keymap-item-UV-Editor-EMPTY-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02930", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02930", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02931", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02931-keymap-item-UV-Editor-EMPTY-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02931.py -- tests/files/web/generated/M21-GAP-02931-keymap-item-UV-Editor-EMPTY-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02931", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02931", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02932", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02932-keymap-item-UV-Editor-EMPTY-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02932.py -- tests/files/web/generated/M21-GAP-02932-keymap-item-UV-Editor-EMPTY-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02932", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02932", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02933", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02933-keymap-item-UV-Editor-EMPTY-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02933.py -- tests/files/web/generated/M21-GAP-02933-keymap-item-UV-Editor-EMPTY-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02933", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02933", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02934", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02934-keymap-item-UV-Editor-EMPTY-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02934.py -- tests/files/web/generated/M21-GAP-02934-keymap-item-UV-Editor-EMPTY-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02934", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02934", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02935", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02935-keymap-item-UV-Editor-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02935.py -- tests/files/web/generated/M21-GAP-02935-keymap-item-UV-Editor-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02935", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02935", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02936", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02936-keymap-item-UV-Editor-EMPTY-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02936.py -- tests/files/web/generated/M21-GAP-02936-keymap-item-UV-Editor-EMPTY-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02936", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02936", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02937", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02937-keymap-item-UV-Editor-EMPTY-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02937.py -- tests/files/web/generated/M21-GAP-02937-keymap-item-UV-Editor-EMPTY-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02937", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02937", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02938", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02938-keymap-item-UV-Editor-EMPTY-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02938.py -- tests/files/web/generated/M21-GAP-02938-keymap-item-UV-Editor-EMPTY-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02938", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02938", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02939", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02939-keymap-item-UV-Editor-EMPTY-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02939.py -- tests/files/web/generated/M21-GAP-02939-keymap-item-UV-Editor-EMPTY-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02939", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02939", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02940", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02940-keymap-item-UV-Editor-EMPTY-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02940.py -- tests/files/web/generated/M21-GAP-02940-keymap-item-UV-Editor-EMPTY-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02940", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02940", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02941", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02941-keymap-item-UV-Editor-EMPTY-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02941.py -- tests/files/web/generated/M21-GAP-02941-keymap-item-UV-Editor-EMPTY-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02941", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02941", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02942", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02942-keymap-item-UV-Editor-EMPTY-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02942.py -- tests/files/web/generated/M21-GAP-02942-keymap-item-UV-Editor-EMPTY-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02942", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02942", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02943", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02943-keymap-item-UV-Editor-EMPTY-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02943.py -- tests/files/web/generated/M21-GAP-02943-keymap-item-UV-Editor-EMPTY-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02943", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02943", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02944", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02944-keymap-item-UV-Editor-EMPTY-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02944.py -- tests/files/web/generated/M21-GAP-02944-keymap-item-UV-Editor-EMPTY-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02944", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02944", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02945", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02945-keymap-item-UV-Editor-EMPTY-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02945.py -- tests/files/web/generated/M21-GAP-02945-keymap-item-UV-Editor-EMPTY-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02945", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02945", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02946", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02946-keymap-item-UV-Editor-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02946.py -- tests/files/web/generated/M21-GAP-02946-keymap-item-UV-Editor-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02946", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02946", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02947", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02947-keymap-item-UV-Editor-EMPTY-WINDOW-50.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02947.py -- tests/files/web/generated/M21-GAP-02947-keymap-item-UV-Editor-EMPTY-WINDOW-50.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02947", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02947", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02948", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02948-keymap-item-UV-Editor-EMPTY-WINDOW-51.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02948.py -- tests/files/web/generated/M21-GAP-02948-keymap-item-UV-Editor-EMPTY-WINDOW-51.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02948", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02948", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02949", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:52", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02949-keymap-item-UV-Editor-EMPTY-WINDOW-52.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02949.py -- tests/files/web/generated/M21-GAP-02949-keymap-item-UV-Editor-EMPTY-WINDOW-52.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02949", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02949", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02950", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:53", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02950-keymap-item-UV-Editor-EMPTY-WINDOW-53.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02950.py -- tests/files/web/generated/M21-GAP-02950-keymap-item-UV-Editor-EMPTY-WINDOW-53.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02950", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02950", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02951", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:54", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02951-keymap-item-UV-Editor-EMPTY-WINDOW-54.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02951.py -- tests/files/web/generated/M21-GAP-02951-keymap-item-UV-Editor-EMPTY-WINDOW-54.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02951", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02951", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02952", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:55", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02952-keymap-item-UV-Editor-EMPTY-WINDOW-55.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02952.py -- tests/files/web/generated/M21-GAP-02952-keymap-item-UV-Editor-EMPTY-WINDOW-55.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02952", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02952", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02953", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:56", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02953-keymap-item-UV-Editor-EMPTY-WINDOW-56.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02953.py -- tests/files/web/generated/M21-GAP-02953-keymap-item-UV-Editor-EMPTY-WINDOW-56.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02953", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02953", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02954", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:57", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02954-keymap-item-UV-Editor-EMPTY-WINDOW-57.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02954.py -- tests/files/web/generated/M21-GAP-02954-keymap-item-UV-Editor-EMPTY-WINDOW-57.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02954", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02954", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02955", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:58", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02955-keymap-item-UV-Editor-EMPTY-WINDOW-58.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02955.py -- tests/files/web/generated/M21-GAP-02955-keymap-item-UV-Editor-EMPTY-WINDOW-58.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02955", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02955", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02956", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:59", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02956-keymap-item-UV-Editor-EMPTY-WINDOW-59.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02956.py -- tests/files/web/generated/M21-GAP-02956-keymap-item-UV-Editor-EMPTY-WINDOW-59.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02956", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02956", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02957", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02957-keymap-item-UV-Editor-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02957.py -- tests/files/web/generated/M21-GAP-02957-keymap-item-UV-Editor-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02957", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02957", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02958", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:60", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02958-keymap-item-UV-Editor-EMPTY-WINDOW-60.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02958.py -- tests/files/web/generated/M21-GAP-02958-keymap-item-UV-Editor-EMPTY-WINDOW-60.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02958", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02958", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02959", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:61", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02959-keymap-item-UV-Editor-EMPTY-WINDOW-61.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02959.py -- tests/files/web/generated/M21-GAP-02959-keymap-item-UV-Editor-EMPTY-WINDOW-61.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02959", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02959", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02960", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:62", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02960-keymap-item-UV-Editor-EMPTY-WINDOW-62.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02960.py -- tests/files/web/generated/M21-GAP-02960-keymap-item-UV-Editor-EMPTY-WINDOW-62.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02960", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02960", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02961", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:63", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02961-keymap-item-UV-Editor-EMPTY-WINDOW-63.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02961.py -- tests/files/web/generated/M21-GAP-02961-keymap-item-UV-Editor-EMPTY-WINDOW-63.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02961", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02961", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02962", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:64", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02962-keymap-item-UV-Editor-EMPTY-WINDOW-64.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02962.py -- tests/files/web/generated/M21-GAP-02962-keymap-item-UV-Editor-EMPTY-WINDOW-64.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02962", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02962", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02963", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:65", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02963-keymap-item-UV-Editor-EMPTY-WINDOW-65.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02963.py -- tests/files/web/generated/M21-GAP-02963-keymap-item-UV-Editor-EMPTY-WINDOW-65.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02963", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02963", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02964", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:66", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02964-keymap-item-UV-Editor-EMPTY-WINDOW-66.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02964.py -- tests/files/web/generated/M21-GAP-02964-keymap-item-UV-Editor-EMPTY-WINDOW-66.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02964", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02964", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02965", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:67", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02965-keymap-item-UV-Editor-EMPTY-WINDOW-67.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02965.py -- tests/files/web/generated/M21-GAP-02965-keymap-item-UV-Editor-EMPTY-WINDOW-67.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02965", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02965", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02966", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:68", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02966-keymap-item-UV-Editor-EMPTY-WINDOW-68.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02966.py -- tests/files/web/generated/M21-GAP-02966-keymap-item-UV-Editor-EMPTY-WINDOW-68.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02966", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02966", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02967", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:69", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02967-keymap-item-UV-Editor-EMPTY-WINDOW-69.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02967.py -- tests/files/web/generated/M21-GAP-02967-keymap-item-UV-Editor-EMPTY-WINDOW-69.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02967", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02967", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02968", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02968-keymap-item-UV-Editor-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02968.py -- tests/files/web/generated/M21-GAP-02968-keymap-item-UV-Editor-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02968", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02968", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02969", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:70", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02969-keymap-item-UV-Editor-EMPTY-WINDOW-70.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02969.py -- tests/files/web/generated/M21-GAP-02969-keymap-item-UV-Editor-EMPTY-WINDOW-70.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02969", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02969", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02970", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:71", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02970-keymap-item-UV-Editor-EMPTY-WINDOW-71.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02970.py -- tests/files/web/generated/M21-GAP-02970-keymap-item-UV-Editor-EMPTY-WINDOW-71.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02970", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02970", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02971", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:72", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02971-keymap-item-UV-Editor-EMPTY-WINDOW-72.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02971.py -- tests/files/web/generated/M21-GAP-02971-keymap-item-UV-Editor-EMPTY-WINDOW-72.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02971", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02971", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02972", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:73", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02972-keymap-item-UV-Editor-EMPTY-WINDOW-73.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02972.py -- tests/files/web/generated/M21-GAP-02972-keymap-item-UV-Editor-EMPTY-WINDOW-73.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02972", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02972", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02973", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:74", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02973-keymap-item-UV-Editor-EMPTY-WINDOW-74.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02973.py -- tests/files/web/generated/M21-GAP-02973-keymap-item-UV-Editor-EMPTY-WINDOW-74.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02973", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02973", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02974", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:75", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02974-keymap-item-UV-Editor-EMPTY-WINDOW-75.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02974.py -- tests/files/web/generated/M21-GAP-02974-keymap-item-UV-Editor-EMPTY-WINDOW-75.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02974", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02974", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02975", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:76", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02975-keymap-item-UV-Editor-EMPTY-WINDOW-76.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02975.py -- tests/files/web/generated/M21-GAP-02975-keymap-item-UV-Editor-EMPTY-WINDOW-76.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02975", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02975", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02976", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:77", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02976-keymap-item-UV-Editor-EMPTY-WINDOW-77.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02976.py -- tests/files/web/generated/M21-GAP-02976-keymap-item-UV-Editor-EMPTY-WINDOW-77.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02976", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02976", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02977", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:78", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02977-keymap-item-UV-Editor-EMPTY-WINDOW-78.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02977.py -- tests/files/web/generated/M21-GAP-02977-keymap-item-UV-Editor-EMPTY-WINDOW-78.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02977", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02977", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02978", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:79", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02978-keymap-item-UV-Editor-EMPTY-WINDOW-79.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02978.py -- tests/files/web/generated/M21-GAP-02978-keymap-item-UV-Editor-EMPTY-WINDOW-79.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02978", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02978", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02979", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02979-keymap-item-UV-Editor-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02979.py -- tests/files/web/generated/M21-GAP-02979-keymap-item-UV-Editor-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02979", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02979", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02980", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:80", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02980-keymap-item-UV-Editor-EMPTY-WINDOW-80.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02980.py -- tests/files/web/generated/M21-GAP-02980-keymap-item-UV-Editor-EMPTY-WINDOW-80.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02980", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02980", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02981", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:81", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02981-keymap-item-UV-Editor-EMPTY-WINDOW-81.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02981.py -- tests/files/web/generated/M21-GAP-02981-keymap-item-UV-Editor-EMPTY-WINDOW-81.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02981", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02981", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02982", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:82", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02982-keymap-item-UV-Editor-EMPTY-WINDOW-82.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02982.py -- tests/files/web/generated/M21-GAP-02982-keymap-item-UV-Editor-EMPTY-WINDOW-82.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02982", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02982", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02983", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:83", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02983-keymap-item-UV-Editor-EMPTY-WINDOW-83.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02983.py -- tests/files/web/generated/M21-GAP-02983-keymap-item-UV-Editor-EMPTY-WINDOW-83.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02983", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02983", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02984", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:84", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02984-keymap-item-UV-Editor-EMPTY-WINDOW-84.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02984.py -- tests/files/web/generated/M21-GAP-02984-keymap-item-UV-Editor-EMPTY-WINDOW-84.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02984", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02984", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02985", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:85", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02985-keymap-item-UV-Editor-EMPTY-WINDOW-85.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02985.py -- tests/files/web/generated/M21-GAP-02985-keymap-item-UV-Editor-EMPTY-WINDOW-85.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02985", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02985", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02986", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:86", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02986-keymap-item-UV-Editor-EMPTY-WINDOW-86.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02986.py -- tests/files/web/generated/M21-GAP-02986-keymap-item-UV-Editor-EMPTY-WINDOW-86.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02986", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02986", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02987", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:87", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02987-keymap-item-UV-Editor-EMPTY-WINDOW-87.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02987.py -- tests/files/web/generated/M21-GAP-02987-keymap-item-UV-Editor-EMPTY-WINDOW-87.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02987", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02987", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02988", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02988-keymap-item-UV-Editor-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02988.py -- tests/files/web/generated/M21-GAP-02988-keymap-item-UV-Editor-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02988", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02988", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02989", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02989-keymap-item-User-Interface-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02989.py -- tests/files/web/generated/M21-GAP-02989-keymap-item-User-Interface-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02989", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02989", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02990", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02990-keymap-item-User-Interface-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02990.py -- tests/files/web/generated/M21-GAP-02990-keymap-item-User-Interface-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02990", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02990", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02991", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02991-keymap-item-User-Interface-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02991.py -- tests/files/web/generated/M21-GAP-02991-keymap-item-User-Interface-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02991", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02991", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02992", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02992-keymap-item-User-Interface-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02992.py -- tests/files/web/generated/M21-GAP-02992-keymap-item-User-Interface-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02992", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02992", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02993", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02993-keymap-item-User-Interface-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02993.py -- tests/files/web/generated/M21-GAP-02993-keymap-item-User-Interface-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02993", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02993", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02994", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02994-keymap-item-User-Interface-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02994.py -- tests/files/web/generated/M21-GAP-02994-keymap-item-User-Interface-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02994", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02994", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02995", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02995-keymap-item-User-Interface-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02995.py -- tests/files/web/generated/M21-GAP-02995-keymap-item-User-Interface-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02995", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02995", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02996", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02996-keymap-item-User-Interface-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02996.py -- tests/files/web/generated/M21-GAP-02996-keymap-item-User-Interface-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02996", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02996", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02997", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02997-keymap-item-User-Interface-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02997.py -- tests/files/web/generated/M21-GAP-02997-keymap-item-User-Interface-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02997", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02997", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02998", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02998-keymap-item-User-Interface-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02998.py -- tests/files/web/generated/M21-GAP-02998-keymap-item-User-Interface-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02998", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02998", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02999", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02999-keymap-item-User-Interface-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02999.py -- tests/files/web/generated/M21-GAP-02999-keymap-item-User-Interface-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02999", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02999", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03000", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03000-keymap-item-User-Interface-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03000.py -- tests/files/web/generated/M21-GAP-03000-keymap-item-User-Interface-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03000", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03000", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03001", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03001-keymap-item-User-Interface-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03001.py -- tests/files/web/generated/M21-GAP-03001-keymap-item-User-Interface-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03001", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03001", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03002", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03002-keymap-item-User-Interface-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03002.py -- tests/files/web/generated/M21-GAP-03002-keymap-item-User-Interface-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03002", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03002", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03003", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03003-keymap-item-User-Interface-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03003.py -- tests/files/web/generated/M21-GAP-03003-keymap-item-User-Interface-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03003", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03003", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03004", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03004-keymap-item-User-Interface-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03004.py -- tests/files/web/generated/M21-GAP-03004-keymap-item-User-Interface-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03004", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03004", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03005", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03005-keymap-item-User-Interface-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03005.py -- tests/files/web/generated/M21-GAP-03005-keymap-item-User-Interface-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03005", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03005", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03006", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03006-keymap-item-User-Interface-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03006.py -- tests/files/web/generated/M21-GAP-03006-keymap-item-User-Interface-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03006", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03006", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03007", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03007-keymap-item-User-Interface-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03007.py -- tests/files/web/generated/M21-GAP-03007-keymap-item-User-Interface-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03007", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03007", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03008", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03008-keymap-item-User-Interface-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03008.py -- tests/files/web/generated/M21-GAP-03008-keymap-item-User-Interface-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03008", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03008", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03009", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03009-keymap-item-User-Interface-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03009.py -- tests/files/web/generated/M21-GAP-03009-keymap-item-User-Interface-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03009", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03009", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03010", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03010-keymap-item-User-Interface-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03010.py -- tests/files/web/generated/M21-GAP-03010-keymap-item-User-Interface-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03010", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03010", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03011", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03011-keymap-item-User-Interface-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03011.py -- tests/files/web/generated/M21-GAP-03011-keymap-item-User-Interface-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03011", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03011", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03012", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03012-keymap-item-User-Interface-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03012.py -- tests/files/web/generated/M21-GAP-03012-keymap-item-User-Interface-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03012", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03012", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03013", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03013-keymap-item-User-Interface-EMPTY-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03013.py -- tests/files/web/generated/M21-GAP-03013-keymap-item-User-Interface-EMPTY-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03013", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03013", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03014", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03014-keymap-item-User-Interface-EMPTY-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03014.py -- tests/files/web/generated/M21-GAP-03014-keymap-item-User-Interface-EMPTY-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03014", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03014", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03015", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03015-keymap-item-User-Interface-EMPTY-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03015.py -- tests/files/web/generated/M21-GAP-03015-keymap-item-User-Interface-EMPTY-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03015", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03015", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03016", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03016-keymap-item-User-Interface-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03016.py -- tests/files/web/generated/M21-GAP-03016-keymap-item-User-Interface-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03016", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03016", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03017", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03017-keymap-item-User-Interface-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03017.py -- tests/files/web/generated/M21-GAP-03017-keymap-item-User-Interface-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03017", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03017", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03018", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03018-keymap-item-User-Interface-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03018.py -- tests/files/web/generated/M21-GAP-03018-keymap-item-User-Interface-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03018", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03018", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03019", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03019-keymap-item-User-Interface-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03019.py -- tests/files/web/generated/M21-GAP-03019-keymap-item-User-Interface-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03019", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03019", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03020", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03020-keymap-item-User-Interface-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03020.py -- tests/files/web/generated/M21-GAP-03020-keymap-item-User-Interface-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03020", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03020", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03021", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03021-keymap-item-User-Interface-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03021.py -- tests/files/web/generated/M21-GAP-03021-keymap-item-User-Interface-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03021", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03021", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03022", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03022-keymap-item-Vertex-Paint-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03022.py -- tests/files/web/generated/M21-GAP-03022-keymap-item-Vertex-Paint-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03022", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03022", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03023", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03023-keymap-item-Vertex-Paint-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03023.py -- tests/files/web/generated/M21-GAP-03023-keymap-item-Vertex-Paint-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03023", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03023", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03024", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03024-keymap-item-Vertex-Paint-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03024.py -- tests/files/web/generated/M21-GAP-03024-keymap-item-Vertex-Paint-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03024", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03024", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03025", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03025-keymap-item-Vertex-Paint-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03025.py -- tests/files/web/generated/M21-GAP-03025-keymap-item-Vertex-Paint-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03025", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03025", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03026", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03026-keymap-item-Vertex-Paint-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03026.py -- tests/files/web/generated/M21-GAP-03026-keymap-item-Vertex-Paint-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03026", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03026", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03027", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03027-keymap-item-Vertex-Paint-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03027.py -- tests/files/web/generated/M21-GAP-03027-keymap-item-Vertex-Paint-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03027", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03027", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03028", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03028-keymap-item-Vertex-Paint-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03028.py -- tests/files/web/generated/M21-GAP-03028-keymap-item-Vertex-Paint-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03028", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03028", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03029", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03029-keymap-item-Vertex-Paint-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03029.py -- tests/files/web/generated/M21-GAP-03029-keymap-item-Vertex-Paint-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03029", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03029", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03030", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03030-keymap-item-Vertex-Paint-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03030.py -- tests/files/web/generated/M21-GAP-03030-keymap-item-Vertex-Paint-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03030", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03030", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03031", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03031-keymap-item-Vertex-Paint-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03031.py -- tests/files/web/generated/M21-GAP-03031-keymap-item-Vertex-Paint-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03031", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03031", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03032", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03032-keymap-item-Vertex-Paint-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03032.py -- tests/files/web/generated/M21-GAP-03032-keymap-item-Vertex-Paint-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03032", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03032", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03033", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03033-keymap-item-Vertex-Paint-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03033.py -- tests/files/web/generated/M21-GAP-03033-keymap-item-Vertex-Paint-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03033", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03033", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03034", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03034-keymap-item-Vertex-Paint-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03034.py -- tests/files/web/generated/M21-GAP-03034-keymap-item-Vertex-Paint-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03034", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03034", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03035", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03035-keymap-item-Vertex-Paint-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03035.py -- tests/files/web/generated/M21-GAP-03035-keymap-item-Vertex-Paint-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03035", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03035", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03036", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03036-keymap-item-Vertex-Paint-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03036.py -- tests/files/web/generated/M21-GAP-03036-keymap-item-Vertex-Paint-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03036", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03036", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03037", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03037-keymap-item-Vertex-Paint-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03037.py -- tests/files/web/generated/M21-GAP-03037-keymap-item-Vertex-Paint-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03037", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03037", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03038", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03038-keymap-item-Vertex-Paint-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03038.py -- tests/files/web/generated/M21-GAP-03038-keymap-item-Vertex-Paint-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03038", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03038", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03039", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03039-keymap-item-Vertex-Paint-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03039.py -- tests/files/web/generated/M21-GAP-03039-keymap-item-Vertex-Paint-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03039", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03039", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03040", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03040-keymap-item-Vertex-Paint-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03040.py -- tests/files/web/generated/M21-GAP-03040-keymap-item-Vertex-Paint-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03040", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03040", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03041", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03041-keymap-item-Vertex-Paint-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03041.py -- tests/files/web/generated/M21-GAP-03041-keymap-item-Vertex-Paint-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03041", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03041", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03042", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03042-keymap-item-Vertex-Paint-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03042.py -- tests/files/web/generated/M21-GAP-03042-keymap-item-Vertex-Paint-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03042", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03042", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03043", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03043-keymap-item-Vertex-Paint-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03043.py -- tests/files/web/generated/M21-GAP-03043-keymap-item-Vertex-Paint-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03043", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03043", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03044", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03044-keymap-item-Vertex-Paint-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03044.py -- tests/files/web/generated/M21-GAP-03044-keymap-item-Vertex-Paint-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03044", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03044", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03045", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03045-keymap-item-Vertex-Paint-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03045.py -- tests/files/web/generated/M21-GAP-03045-keymap-item-Vertex-Paint-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03045", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03045", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03046", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03046-keymap-item-Vertex-Paint-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03046.py -- tests/files/web/generated/M21-GAP-03046-keymap-item-Vertex-Paint-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03046", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03046", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03047", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03047-keymap-item-Vertex-Paint-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03047.py -- tests/files/web/generated/M21-GAP-03047-keymap-item-Vertex-Paint-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03047", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03047", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03048", + "gapId": "keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03048-keymap-item-Video-Sequence-Editor-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03048.py -- tests/files/web/generated/M21-GAP-03048-keymap-item-Video-Sequence-Editor-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03048", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03048", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03049", + "gapId": "keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03049-keymap-item-Video-Sequence-Editor-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03049.py -- tests/files/web/generated/M21-GAP-03049-keymap-item-Video-Sequence-Editor-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03049", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03049", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03050", + "gapId": "keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03050-keymap-item-Video-Sequence-Editor-SEQUENCE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03050.py -- tests/files/web/generated/M21-GAP-03050-keymap-item-Video-Sequence-Editor-SEQUENCE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03050", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03050", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03051", + "gapId": "keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03051-keymap-item-Video-Sequence-Editor-SEQUENCE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03051.py -- tests/files/web/generated/M21-GAP-03051-keymap-item-Video-Sequence-Editor-SEQUENCE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03051", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03051", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03052", + "gapId": "keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03052-keymap-item-Video-Sequence-Editor-SEQUENCE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03052.py -- tests/files/web/generated/M21-GAP-03052-keymap-item-Video-Sequence-Editor-SEQUENCE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03052", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03052", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03053", + "gapId": "keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03053-keymap-item-Video-Sequence-Editor-SEQUENCE_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03053.py -- tests/files/web/generated/M21-GAP-03053-keymap-item-Video-Sequence-Editor-SEQUENCE_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03053", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03053", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03054", + "gapId": "keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03054-keymap-item-Video-Sequence-Editor-SEQUENCE_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03054.py -- tests/files/web/generated/M21-GAP-03054-keymap-item-Video-Sequence-Editor-SEQUENCE_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03054", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03054", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03055", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03055-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03055.py -- tests/files/web/generated/M21-GAP-03055-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03055", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03055", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03056", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03056-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03056.py -- tests/files/web/generated/M21-GAP-03056-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03056", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03056", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03057", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03057-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03057.py -- tests/files/web/generated/M21-GAP-03057-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03057", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03057", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03058", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03058-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03058.py -- tests/files/web/generated/M21-GAP-03058-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03058", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03058", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03059", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03059-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03059.py -- tests/files/web/generated/M21-GAP-03059-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03059", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03059", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03060", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03060-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03060.py -- tests/files/web/generated/M21-GAP-03060-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03060", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03060", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03061", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03061-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03061.py -- tests/files/web/generated/M21-GAP-03061-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03061", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03061", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03062", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03062-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03062.py -- tests/files/web/generated/M21-GAP-03062-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03062", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03062", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03063", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03063-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03063.py -- tests/files/web/generated/M21-GAP-03063-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03063", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03063", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03064", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03064-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03064.py -- tests/files/web/generated/M21-GAP-03064-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03064", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03064", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03065", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03065-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03065.py -- tests/files/web/generated/M21-GAP-03065-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03065", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03065", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03066", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03066-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03066.py -- tests/files/web/generated/M21-GAP-03066-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03066", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03066", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03067", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03067-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03067.py -- tests/files/web/generated/M21-GAP-03067-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03067", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03067", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03068", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03068-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03068.py -- tests/files/web/generated/M21-GAP-03068-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03068", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03068", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03069", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03069-keymap-item-View2D-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03069.py -- tests/files/web/generated/M21-GAP-03069-keymap-item-View2D-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03069", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03069", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03070", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03070-keymap-item-View2D-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03070.py -- tests/files/web/generated/M21-GAP-03070-keymap-item-View2D-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03070", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03070", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03071", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03071-keymap-item-View2D-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03071.py -- tests/files/web/generated/M21-GAP-03071-keymap-item-View2D-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03071", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03071", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03072", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03072-keymap-item-View2D-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03072.py -- tests/files/web/generated/M21-GAP-03072-keymap-item-View2D-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03072", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03072", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03073", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03073-keymap-item-View2D-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03073.py -- tests/files/web/generated/M21-GAP-03073-keymap-item-View2D-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03073", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03073", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03074", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03074-keymap-item-View2D-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03074.py -- tests/files/web/generated/M21-GAP-03074-keymap-item-View2D-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03074", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03074", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03075", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03075-keymap-item-View2D-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03075.py -- tests/files/web/generated/M21-GAP-03075-keymap-item-View2D-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03075", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03075", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03076", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03076-keymap-item-View2D-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03076.py -- tests/files/web/generated/M21-GAP-03076-keymap-item-View2D-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03076", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03076", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03077", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03077-keymap-item-View2D-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03077.py -- tests/files/web/generated/M21-GAP-03077-keymap-item-View2D-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03077", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03077", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03078", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03078-keymap-item-View2D-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03078.py -- tests/files/web/generated/M21-GAP-03078-keymap-item-View2D-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03078", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03078", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03079", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03079-keymap-item-View2D-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03079.py -- tests/files/web/generated/M21-GAP-03079-keymap-item-View2D-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03079", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03079", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03080", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03080-keymap-item-View2D-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03080.py -- tests/files/web/generated/M21-GAP-03080-keymap-item-View2D-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03080", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03080", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03081", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03081-keymap-item-View2D-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03081.py -- tests/files/web/generated/M21-GAP-03081-keymap-item-View2D-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03081", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03081", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03082", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03082-keymap-item-View2D-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03082.py -- tests/files/web/generated/M21-GAP-03082-keymap-item-View2D-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03082", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03082", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03083", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03083-keymap-item-View2D-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03083.py -- tests/files/web/generated/M21-GAP-03083-keymap-item-View2D-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03083", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03083", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03084", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03084-keymap-item-View2D-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03084.py -- tests/files/web/generated/M21-GAP-03084-keymap-item-View2D-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03084", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03084", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03085", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03085-keymap-item-View2D-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03085.py -- tests/files/web/generated/M21-GAP-03085-keymap-item-View2D-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03085", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03085", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03086", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03086-keymap-item-View2D-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03086.py -- tests/files/web/generated/M21-GAP-03086-keymap-item-View2D-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03086", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03086", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03087", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03087-keymap-item-View2D-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03087.py -- tests/files/web/generated/M21-GAP-03087-keymap-item-View2D-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03087", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03087", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03088", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03088-keymap-item-View2D-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03088.py -- tests/files/web/generated/M21-GAP-03088-keymap-item-View2D-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03088", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03088", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03089", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03089-keymap-item-View2D-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03089.py -- tests/files/web/generated/M21-GAP-03089-keymap-item-View2D-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03089", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03089", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03090", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03090-keymap-item-View2D-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03090.py -- tests/files/web/generated/M21-GAP-03090-keymap-item-View2D-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03090", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03090", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03091", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03091-keymap-item-View2D-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03091.py -- tests/files/web/generated/M21-GAP-03091-keymap-item-View2D-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03091", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03091", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03092", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03092-keymap-item-View2D-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03092.py -- tests/files/web/generated/M21-GAP-03092-keymap-item-View2D-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03092", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03092", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03093", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03093-keymap-item-View2D-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03093.py -- tests/files/web/generated/M21-GAP-03093-keymap-item-View2D-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03093", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03093", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03094", + "gapId": "keymap-item:View3D Dolly Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03094-keymap-item-View3D-Dolly-Modal-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03094.py -- tests/files/web/generated/M21-GAP-03094-keymap-item-View3D-Dolly-Modal-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03094", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03094", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03095", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03095-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03095.py -- tests/files/web/generated/M21-GAP-03095-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03095", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03095", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03096", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03096-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03096.py -- tests/files/web/generated/M21-GAP-03096-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03096", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03096", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03097", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03097-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03097.py -- tests/files/web/generated/M21-GAP-03097-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03097", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03097", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03098", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03098-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03098.py -- tests/files/web/generated/M21-GAP-03098-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03098", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03098", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03099", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03099-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03099.py -- tests/files/web/generated/M21-GAP-03099-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03099", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03099", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03100", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03100-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03100.py -- tests/files/web/generated/M21-GAP-03100-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03100", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03100", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03101", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03101-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03101.py -- tests/files/web/generated/M21-GAP-03101-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03101", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03101", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03102", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03102-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03102.py -- tests/files/web/generated/M21-GAP-03102-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03102", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03102", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03103", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03103-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03103.py -- tests/files/web/generated/M21-GAP-03103-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03103", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03103", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03104", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03104-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03104.py -- tests/files/web/generated/M21-GAP-03104-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03104", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03104", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03105", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03105-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03105.py -- tests/files/web/generated/M21-GAP-03105-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03105", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03105", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03106", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03106-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03106.py -- tests/files/web/generated/M21-GAP-03106-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03106", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03106", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03107", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03107-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03107.py -- tests/files/web/generated/M21-GAP-03107-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03107", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03107", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03108", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03108-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03108.py -- tests/files/web/generated/M21-GAP-03108-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03108", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03108", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03109", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03109-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03109.py -- tests/files/web/generated/M21-GAP-03109-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03109", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03109", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03110", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03110-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03110.py -- tests/files/web/generated/M21-GAP-03110-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03110", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03110", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03111", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03111-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03111.py -- tests/files/web/generated/M21-GAP-03111-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03111", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03111", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03112", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03112-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03112.py -- tests/files/web/generated/M21-GAP-03112-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03112", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03112", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03113", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03113-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03113.py -- tests/files/web/generated/M21-GAP-03113-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03113", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03113", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03114", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03114-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03114.py -- tests/files/web/generated/M21-GAP-03114-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03114", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03114", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03115", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03115-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03115.py -- tests/files/web/generated/M21-GAP-03115-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03115", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03115", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03116", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03116-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03116.py -- tests/files/web/generated/M21-GAP-03116-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03116", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03116", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03117", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03117-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03117.py -- tests/files/web/generated/M21-GAP-03117-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03117", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03117", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03118", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03118-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03118.py -- tests/files/web/generated/M21-GAP-03118-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03118", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03118", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03119", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03119-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03119.py -- tests/files/web/generated/M21-GAP-03119-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03119", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03119", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03120", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03120-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03120.py -- tests/files/web/generated/M21-GAP-03120-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03120", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03120", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03121", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03121-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03121.py -- tests/files/web/generated/M21-GAP-03121-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03121", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03121", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03122", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03122-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03122.py -- tests/files/web/generated/M21-GAP-03122-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03122", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03122", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03123", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03123-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03123.py -- tests/files/web/generated/M21-GAP-03123-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03123", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03123", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03124", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03124-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03124.py -- tests/files/web/generated/M21-GAP-03124-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03124", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03124", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03125", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03125-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03125.py -- tests/files/web/generated/M21-GAP-03125-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03125", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03125", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03126", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03126-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03126.py -- tests/files/web/generated/M21-GAP-03126-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03126", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03126", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03127", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03127-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03127.py -- tests/files/web/generated/M21-GAP-03127-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03127", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03127", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03128", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03128-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03128.py -- tests/files/web/generated/M21-GAP-03128-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03128", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03128", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03129", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03129-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03129.py -- tests/files/web/generated/M21-GAP-03129-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03129", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03129", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03130", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03130-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03130.py -- tests/files/web/generated/M21-GAP-03130-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03130", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03130", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03131", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03131-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03131.py -- tests/files/web/generated/M21-GAP-03131-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03131", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03131", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03132", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03132-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03132.py -- tests/files/web/generated/M21-GAP-03132-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03132", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03132", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03133", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03133-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03133.py -- tests/files/web/generated/M21-GAP-03133-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03133", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03133", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03134", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03134-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03134.py -- tests/files/web/generated/M21-GAP-03134-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03134", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03134", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03135", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03135-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03135.py -- tests/files/web/generated/M21-GAP-03135-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03135", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03135", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03136", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03136-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03136.py -- tests/files/web/generated/M21-GAP-03136-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03136", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03136", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03137", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03137-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03137.py -- tests/files/web/generated/M21-GAP-03137-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03137", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03137", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03138", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03138-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03138.py -- tests/files/web/generated/M21-GAP-03138-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03138", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03138", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03139", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03139-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03139.py -- tests/files/web/generated/M21-GAP-03139-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03139", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03139", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03140", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03140-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03140.py -- tests/files/web/generated/M21-GAP-03140-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03140", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03140", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03141", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03141-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03141.py -- tests/files/web/generated/M21-GAP-03141-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03141", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03141", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03142", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03142-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03142.py -- tests/files/web/generated/M21-GAP-03142-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03142", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03142", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03143", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03143-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03143.py -- tests/files/web/generated/M21-GAP-03143-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03143", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03143", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03144", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03144-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03144.py -- tests/files/web/generated/M21-GAP-03144-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03144", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03144", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03145", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03145-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03145.py -- tests/files/web/generated/M21-GAP-03145-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03145", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03145", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03146", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03146-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03146.py -- tests/files/web/generated/M21-GAP-03146-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03146", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03146", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03147", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03147-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03147.py -- tests/files/web/generated/M21-GAP-03147-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03147", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03147", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03148", + "gapId": "keymap-item:View3D Move Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03148-keymap-item-View3D-Move-Modal-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03148.py -- tests/files/web/generated/M21-GAP-03148-keymap-item-View3D-Move-Modal-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03148", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03148", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03149", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03149-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03149.py -- tests/files/web/generated/M21-GAP-03149-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03149", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03149", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03150", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03150-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03150.py -- tests/files/web/generated/M21-GAP-03150-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03150", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03150", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03151", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03151-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03151.py -- tests/files/web/generated/M21-GAP-03151-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03151", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03151", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03152", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03152-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03152.py -- tests/files/web/generated/M21-GAP-03152-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03152", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03152", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03153", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03153-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03153.py -- tests/files/web/generated/M21-GAP-03153-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03153", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03153", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03154", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03154-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03154.py -- tests/files/web/generated/M21-GAP-03154-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03154", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03154", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03155", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03155-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03155.py -- tests/files/web/generated/M21-GAP-03155-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03155", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03155", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03156", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03156-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03156.py -- tests/files/web/generated/M21-GAP-03156-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03156", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03156", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03157", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03157-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03157.py -- tests/files/web/generated/M21-GAP-03157-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03157", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03157", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03158", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03158-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03158.py -- tests/files/web/generated/M21-GAP-03158-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03158", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03158", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03159", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03159-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03159.py -- tests/files/web/generated/M21-GAP-03159-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03159", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03159", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03160", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03160-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03160.py -- tests/files/web/generated/M21-GAP-03160-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03160", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03160", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03161", + "gapId": "keymap-item:View3D Rotate Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03161-keymap-item-View3D-Rotate-Modal-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03161.py -- tests/files/web/generated/M21-GAP-03161-keymap-item-View3D-Rotate-Modal-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03161", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03161", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03162", + "gapId": "keymap-item:View3D Rotate Modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03162-keymap-item-View3D-Rotate-Modal-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03162.py -- tests/files/web/generated/M21-GAP-03162-keymap-item-View3D-Rotate-Modal-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03162", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03162", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03163", + "gapId": "keymap-item:View3D Rotate Modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03163-keymap-item-View3D-Rotate-Modal-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03163.py -- tests/files/web/generated/M21-GAP-03163-keymap-item-View3D-Rotate-Modal-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03163", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03163", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03164", + "gapId": "keymap-item:View3D Rotate Modal:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03164-keymap-item-View3D-Rotate-Modal-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03164.py -- tests/files/web/generated/M21-GAP-03164-keymap-item-View3D-Rotate-Modal-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03164", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03164", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03165", + "gapId": "keymap-item:View3D Rotate Modal:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03165-keymap-item-View3D-Rotate-Modal-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03165.py -- tests/files/web/generated/M21-GAP-03165-keymap-item-View3D-Rotate-Modal-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03165", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03165", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03166", + "gapId": "keymap-item:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03166-keymap-item-View3D-VR-Location-Scouting-Capture-Review-Modal-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03166.py -- tests/files/web/generated/M21-GAP-03166-keymap-item-View3D-VR-Location-Scouting-Capture-Review-Modal-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03166", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03166", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03167", + "gapId": "keymap-item:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03167-keymap-item-View3D-VR-Location-Scouting-Capture-Review-Modal-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03167.py -- tests/files/web/generated/M21-GAP-03167-keymap-item-View3D-VR-Location-Scouting-Capture-Review-Modal-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03167", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03167", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03168", + "gapId": "keymap-item:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03168-keymap-item-View3D-VR-Location-Scouting-Capture-Review-Modal-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03168.py -- tests/files/web/generated/M21-GAP-03168-keymap-item-View3D-VR-Location-Scouting-Capture-Review-Modal-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03168", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03168", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03169", + "gapId": "keymap-item:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03169-keymap-item-View3D-VR-Location-Scouting-Capture-Review-Modal-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03169.py -- tests/files/web/generated/M21-GAP-03169-keymap-item-View3D-VR-Location-Scouting-Capture-Review-Modal-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03169", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03169", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03170", + "gapId": "keymap-item:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03170-keymap-item-View3D-VR-Location-Scouting-Capture-Review-Modal-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03170.py -- tests/files/web/generated/M21-GAP-03170-keymap-item-View3D-VR-Location-Scouting-Capture-Review-Modal-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03170", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03170", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03171", + "gapId": "keymap-item:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03171-keymap-item-View3D-VR-Location-Scouting-Capture-Review-Modal-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03171.py -- tests/files/web/generated/M21-GAP-03171-keymap-item-View3D-VR-Location-Scouting-Capture-Review-Modal-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03171", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03171", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03172", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03172-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03172.py -- tests/files/web/generated/M21-GAP-03172-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03172", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03172", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03173", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03173-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03173.py -- tests/files/web/generated/M21-GAP-03173-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03173", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03173", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03174", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03174-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03174.py -- tests/files/web/generated/M21-GAP-03174-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03174", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03174", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03175", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03175-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03175.py -- tests/files/web/generated/M21-GAP-03175-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03175", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03175", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03176", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03176-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03176.py -- tests/files/web/generated/M21-GAP-03176-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03176", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03176", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03177", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03177-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03177.py -- tests/files/web/generated/M21-GAP-03177-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03177", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03177", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03178", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03178-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03178.py -- tests/files/web/generated/M21-GAP-03178-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03178", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03178", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03179", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03179-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03179.py -- tests/files/web/generated/M21-GAP-03179-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03179", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03179", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03180", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03180-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03180.py -- tests/files/web/generated/M21-GAP-03180-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03180", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03180", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03181", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03181-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03181.py -- tests/files/web/generated/M21-GAP-03181-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03181", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03181", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03182", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03182-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03182.py -- tests/files/web/generated/M21-GAP-03182-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03182", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03182", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03183", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03183-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03183.py -- tests/files/web/generated/M21-GAP-03183-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03183", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03183", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03184", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03184-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03184.py -- tests/files/web/generated/M21-GAP-03184-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03184", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03184", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03185", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03185-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03185.py -- tests/files/web/generated/M21-GAP-03185-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03185", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03185", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03186", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03186-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03186.py -- tests/files/web/generated/M21-GAP-03186-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03186", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03186", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03187", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03187-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03187.py -- tests/files/web/generated/M21-GAP-03187-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03187", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03187", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03188", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03188-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03188.py -- tests/files/web/generated/M21-GAP-03188-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03188", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03188", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03189", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03189-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03189.py -- tests/files/web/generated/M21-GAP-03189-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03189", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03189", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03190", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03190-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03190.py -- tests/files/web/generated/M21-GAP-03190-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03190", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03190", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03191", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03191-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03191.py -- tests/files/web/generated/M21-GAP-03191-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03191", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03191", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03192", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03192-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03192.py -- tests/files/web/generated/M21-GAP-03192-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03192", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03192", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03193", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03193-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03193.py -- tests/files/web/generated/M21-GAP-03193-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03193", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03193", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03194", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03194-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03194.py -- tests/files/web/generated/M21-GAP-03194-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03194", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03194", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03195", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03195-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03195.py -- tests/files/web/generated/M21-GAP-03195-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03195", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03195", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03196", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03196-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03196.py -- tests/files/web/generated/M21-GAP-03196-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03196", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03196", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03197", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03197-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03197.py -- tests/files/web/generated/M21-GAP-03197-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03197", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03197", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03198", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03198-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03198.py -- tests/files/web/generated/M21-GAP-03198-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03198", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03198", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03199", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03199-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03199.py -- tests/files/web/generated/M21-GAP-03199-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03199", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03199", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03200", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03200-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03200.py -- tests/files/web/generated/M21-GAP-03200-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03200", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03200", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03201", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03201-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03201.py -- tests/files/web/generated/M21-GAP-03201-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03201", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03201", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03202", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03202-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03202.py -- tests/files/web/generated/M21-GAP-03202-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03202", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03202", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03203", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03203-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03203.py -- tests/files/web/generated/M21-GAP-03203-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03203", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03203", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03204", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03204-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03204.py -- tests/files/web/generated/M21-GAP-03204-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03204", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03204", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03205", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03205-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03205.py -- tests/files/web/generated/M21-GAP-03205-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03205", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03205", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03206", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03206-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03206.py -- tests/files/web/generated/M21-GAP-03206-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03206", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03206", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03207", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03207-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03207.py -- tests/files/web/generated/M21-GAP-03207-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03207", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03207", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03208", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03208-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03208.py -- tests/files/web/generated/M21-GAP-03208-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03208", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03208", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03209", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03209-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03209.py -- tests/files/web/generated/M21-GAP-03209-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03209", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03209", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03210", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03210-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03210.py -- tests/files/web/generated/M21-GAP-03210-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03210", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03210", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03211", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03211-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03211.py -- tests/files/web/generated/M21-GAP-03211-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03211", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03211", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03212", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03212-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03212.py -- tests/files/web/generated/M21-GAP-03212-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03212", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03212", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03213", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03213-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03213.py -- tests/files/web/generated/M21-GAP-03213-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03213", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03213", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03214", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03214-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03214.py -- tests/files/web/generated/M21-GAP-03214-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03214", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03214", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03215", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03215-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03215.py -- tests/files/web/generated/M21-GAP-03215-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03215", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03215", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03216", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03216-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03216.py -- tests/files/web/generated/M21-GAP-03216-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03216", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03216", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03217", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03217-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03217.py -- tests/files/web/generated/M21-GAP-03217-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03217", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03217", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03218", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03218-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03218.py -- tests/files/web/generated/M21-GAP-03218-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03218", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03218", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03219", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03219-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03219.py -- tests/files/web/generated/M21-GAP-03219-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03219", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03219", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03220", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03220-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03220.py -- tests/files/web/generated/M21-GAP-03220-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03220", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03220", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03221", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03221-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03221.py -- tests/files/web/generated/M21-GAP-03221-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03221", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03221", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03222", + "gapId": "keymap-item:View3D Zoom Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03222-keymap-item-View3D-Zoom-Modal-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03222.py -- tests/files/web/generated/M21-GAP-03222-keymap-item-View3D-Zoom-Modal-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03222", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03222", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03223", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03223-keymap-item-Weight-Paint-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03223.py -- tests/files/web/generated/M21-GAP-03223-keymap-item-Weight-Paint-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03223", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03223", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03224", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03224-keymap-item-Weight-Paint-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03224.py -- tests/files/web/generated/M21-GAP-03224-keymap-item-Weight-Paint-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03224", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03224", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03225", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03225-keymap-item-Weight-Paint-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03225.py -- tests/files/web/generated/M21-GAP-03225-keymap-item-Weight-Paint-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03225", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03225", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03226", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03226-keymap-item-Weight-Paint-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03226.py -- tests/files/web/generated/M21-GAP-03226-keymap-item-Weight-Paint-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03226", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03226", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03227", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03227-keymap-item-Weight-Paint-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03227.py -- tests/files/web/generated/M21-GAP-03227-keymap-item-Weight-Paint-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03227", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03227", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03228", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03228-keymap-item-Weight-Paint-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03228.py -- tests/files/web/generated/M21-GAP-03228-keymap-item-Weight-Paint-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03228", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03228", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03229", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03229-keymap-item-Weight-Paint-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03229.py -- tests/files/web/generated/M21-GAP-03229-keymap-item-Weight-Paint-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03229", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03229", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03230", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03230-keymap-item-Weight-Paint-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03230.py -- tests/files/web/generated/M21-GAP-03230-keymap-item-Weight-Paint-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03230", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03230", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03231", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03231-keymap-item-Weight-Paint-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03231.py -- tests/files/web/generated/M21-GAP-03231-keymap-item-Weight-Paint-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03231", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03231", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03232", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03232-keymap-item-Weight-Paint-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03232.py -- tests/files/web/generated/M21-GAP-03232-keymap-item-Weight-Paint-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03232", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03232", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03233", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03233-keymap-item-Weight-Paint-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03233.py -- tests/files/web/generated/M21-GAP-03233-keymap-item-Weight-Paint-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03233", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03233", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03234", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03234-keymap-item-Weight-Paint-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03234.py -- tests/files/web/generated/M21-GAP-03234-keymap-item-Weight-Paint-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03234", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03234", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03235", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03235-keymap-item-Weight-Paint-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03235.py -- tests/files/web/generated/M21-GAP-03235-keymap-item-Weight-Paint-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03235", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03235", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03236", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03236-keymap-item-Weight-Paint-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03236.py -- tests/files/web/generated/M21-GAP-03236-keymap-item-Weight-Paint-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03236", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03236", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03237", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03237-keymap-item-Weight-Paint-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03237.py -- tests/files/web/generated/M21-GAP-03237-keymap-item-Weight-Paint-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03237", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03237", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03238", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03238-keymap-item-Weight-Paint-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03238.py -- tests/files/web/generated/M21-GAP-03238-keymap-item-Weight-Paint-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03238", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03238", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03239", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03239-keymap-item-Weight-Paint-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03239.py -- tests/files/web/generated/M21-GAP-03239-keymap-item-Weight-Paint-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03239", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03239", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03240", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03240-keymap-item-Weight-Paint-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03240.py -- tests/files/web/generated/M21-GAP-03240-keymap-item-Weight-Paint-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03240", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03240", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03241", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03241-keymap-item-Weight-Paint-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03241.py -- tests/files/web/generated/M21-GAP-03241-keymap-item-Weight-Paint-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03241", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03241", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03242", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03242-keymap-item-Weight-Paint-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03242.py -- tests/files/web/generated/M21-GAP-03242-keymap-item-Weight-Paint-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03242", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03242", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03243", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03243-keymap-item-Weight-Paint-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03243.py -- tests/files/web/generated/M21-GAP-03243-keymap-item-Weight-Paint-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03243", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03243", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03244", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03244-keymap-item-Weight-Paint-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03244.py -- tests/files/web/generated/M21-GAP-03244-keymap-item-Weight-Paint-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03244", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03244", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03245", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03245-keymap-item-Weight-Paint-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03245.py -- tests/files/web/generated/M21-GAP-03245-keymap-item-Weight-Paint-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03245", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03245", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03246", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03246-keymap-item-Weight-Paint-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03246.py -- tests/files/web/generated/M21-GAP-03246-keymap-item-Weight-Paint-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03246", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03246", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03247", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03247-keymap-item-Weight-Paint-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03247.py -- tests/files/web/generated/M21-GAP-03247-keymap-item-Weight-Paint-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03247", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03247", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03248", + "gapId": "keymap-item:Window:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03248-keymap-item-Window-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03248.py -- tests/files/web/generated/M21-GAP-03248-keymap-item-Window-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03248", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03248", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03249", + "gapId": "keymap-item:Window:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03249-keymap-item-Window-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03249.py -- tests/files/web/generated/M21-GAP-03249-keymap-item-Window-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03249", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03249", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03250", + "gapId": "keymap-item:Window:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03250-keymap-item-Window-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03250.py -- tests/files/web/generated/M21-GAP-03250-keymap-item-Window-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03250", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03250", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03251", + "gapId": "keymap-item:Window:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03251-keymap-item-Window-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03251.py -- tests/files/web/generated/M21-GAP-03251-keymap-item-Window-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03251", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03251", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03252", + "gapId": "keymap-item:Window:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03252-keymap-item-Window-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03252.py -- tests/files/web/generated/M21-GAP-03252-keymap-item-Window-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03252", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03252", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03253", + "gapId": "keymap-item:Window:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03253-keymap-item-Window-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03253.py -- tests/files/web/generated/M21-GAP-03253-keymap-item-Window-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03253", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03253", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03254", + "gapId": "keymap-item:Window:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03254-keymap-item-Window-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03254.py -- tests/files/web/generated/M21-GAP-03254-keymap-item-Window-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03254", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03254", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03255", + "gapId": "keymap-item:Window:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03255-keymap-item-Window-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03255.py -- tests/files/web/generated/M21-GAP-03255-keymap-item-Window-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03255", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03255", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03256", + "gapId": "keymap-item:Window:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03256-keymap-item-Window-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03256.py -- tests/files/web/generated/M21-GAP-03256-keymap-item-Window-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03256", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03256", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03257", + "gapId": "keymap-item:Window:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03257-keymap-item-Window-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03257.py -- tests/files/web/generated/M21-GAP-03257-keymap-item-Window-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03257", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03257", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03258", + "gapId": "keymap-item:Window:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03258-keymap-item-Window-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03258.py -- tests/files/web/generated/M21-GAP-03258-keymap-item-Window-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03258", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03258", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03259", + "gapId": "keymap-item:Window:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03259-keymap-item-Window-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03259.py -- tests/files/web/generated/M21-GAP-03259-keymap-item-Window-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03259", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03259", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03260", + "gapId": "keymap-item:Window:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03260-keymap-item-Window-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03260.py -- tests/files/web/generated/M21-GAP-03260-keymap-item-Window-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03260", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03260", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03261", + "gapId": "keymap-item:Window:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03261-keymap-item-Window-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03261.py -- tests/files/web/generated/M21-GAP-03261-keymap-item-Window-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03261", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03261", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03262", + "gapId": "keymap-item:Window:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03262-keymap-item-Window-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03262.py -- tests/files/web/generated/M21-GAP-03262-keymap-item-Window-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03262", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03262", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03263", + "gapId": "keymap-item:Window:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03263-keymap-item-Window-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03263.py -- tests/files/web/generated/M21-GAP-03263-keymap-item-Window-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03263", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03263", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03264", + "gapId": "keymap-item:Window:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03264-keymap-item-Window-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03264.py -- tests/files/web/generated/M21-GAP-03264-keymap-item-Window-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03264", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03264", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03265", + "gapId": "keymap-item:Window:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03265-keymap-item-Window-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03265.py -- tests/files/web/generated/M21-GAP-03265-keymap-item-Window-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03265", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03265", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03266", + "gapId": "keymap-item:Window:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03266-keymap-item-Window-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03266.py -- tests/files/web/generated/M21-GAP-03266-keymap-item-Window-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03266", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03266", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03267", + "gapId": "keymap-item:Window:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03267-keymap-item-Window-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03267.py -- tests/files/web/generated/M21-GAP-03267-keymap-item-Window-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03267", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03267", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03268", + "gapId": "keymap-item:Window:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03268-keymap-item-Window-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03268.py -- tests/files/web/generated/M21-GAP-03268-keymap-item-Window-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03268", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03268", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03269", + "gapId": "keymap-item:Window:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03269-keymap-item-Window-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03269.py -- tests/files/web/generated/M21-GAP-03269-keymap-item-Window-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03269", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03269", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03270", + "gapId": "keymap-item:Window:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03270-keymap-item-Window-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03270.py -- tests/files/web/generated/M21-GAP-03270-keymap-item-Window-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03270", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03270", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03271", + "gapId": "keymap-item:Window:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03271-keymap-item-Window-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03271.py -- tests/files/web/generated/M21-GAP-03271-keymap-item-Window-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03271", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03271", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03272", + "gapId": "keymap-item:Window:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03272-keymap-item-Window-EMPTY-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03272.py -- tests/files/web/generated/M21-GAP-03272-keymap-item-Window-EMPTY-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03272", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03272", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03273", + "gapId": "keymap-item:Window:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03273-keymap-item-Window-EMPTY-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03273.py -- tests/files/web/generated/M21-GAP-03273-keymap-item-Window-EMPTY-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03273", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03273", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03274", + "gapId": "keymap-item:Window:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03274-keymap-item-Window-EMPTY-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03274.py -- tests/files/web/generated/M21-GAP-03274-keymap-item-Window-EMPTY-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03274", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03274", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03275", + "gapId": "keymap-item:Window:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03275-keymap-item-Window-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03275.py -- tests/files/web/generated/M21-GAP-03275-keymap-item-Window-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03275", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03275", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03276", + "gapId": "keymap-item:Window:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03276-keymap-item-Window-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03276.py -- tests/files/web/generated/M21-GAP-03276-keymap-item-Window-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03276", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03276", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03277", + "gapId": "keymap-item:Window:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03277-keymap-item-Window-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03277.py -- tests/files/web/generated/M21-GAP-03277-keymap-item-Window-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03277", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03277", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03278", + "gapId": "keymap-item:Window:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03278-keymap-item-Window-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03278.py -- tests/files/web/generated/M21-GAP-03278-keymap-item-Window-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03278", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03278", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03279", + "gapId": "keymap-item:Window:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03279-keymap-item-Window-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03279.py -- tests/files/web/generated/M21-GAP-03279-keymap-item-Window-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03279", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03279", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03280", + "gapId": "keymap-item:Window:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03280-keymap-item-Window-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03280.py -- tests/files/web/generated/M21-GAP-03280-keymap-item-Window-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03280", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03280", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03281", + "gapId": "keymap:3D View Generic:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03281-keymap-3D-View-Generic-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03281.py -- tests/files/web/generated/M21-GAP-03281-keymap-3D-View-Generic-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03281", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03281", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03282", + "gapId": "keymap:3D View Tool: Bend:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03282-keymap-3D-View-Tool-Bend-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03282.py -- tests/files/web/generated/M21-GAP-03282-keymap-3D-View-Tool-Bend-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03282", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03282", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03283", + "gapId": "keymap:3D View Tool: Breakdowner:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03283-keymap-3D-View-Tool-Breakdowner-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03283.py -- tests/files/web/generated/M21-GAP-03283-keymap-3D-View-Tool-Breakdowner-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03283", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03283", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03284", + "gapId": "keymap:3D View Tool: Cursor:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03284-keymap-3D-View-Tool-Cursor-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03284.py -- tests/files/web/generated/M21-GAP-03284-keymap-3D-View-Tool-Cursor-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03284", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03284", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03285", + "gapId": "keymap:3D View Tool: Edit Armature, B-Bone Size:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03285-keymap-3D-View-Tool-Edit-Armature-B-Bone-Size-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03285.py -- tests/files/web/generated/M21-GAP-03285-keymap-3D-View-Tool-Edit-Armature-B-Bone-Size-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03285", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03285", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03286", + "gapId": "keymap:3D View Tool: Edit Armature, Bone Envelope:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03286-keymap-3D-View-Tool-Edit-Armature-Bone-Envelope-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03286.py -- tests/files/web/generated/M21-GAP-03286-keymap-3D-View-Tool-Edit-Armature-Bone-Envelope-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03286", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03286", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03287", + "gapId": "keymap:3D View Tool: Edit Armature, Extrude to Cursor:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03287-keymap-3D-View-Tool-Edit-Armature-Extrude-to-Cursor-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03287.py -- tests/files/web/generated/M21-GAP-03287-keymap-3D-View-Tool-Edit-Armature-Extrude-to-Cursor-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03287", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03287", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03288", + "gapId": "keymap:3D View Tool: Edit Armature, Extrude:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03288-keymap-3D-View-Tool-Edit-Armature-Extrude-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03288.py -- tests/files/web/generated/M21-GAP-03288-keymap-3D-View-Tool-Edit-Armature-Extrude-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03288", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03288", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03289", + "gapId": "keymap:3D View Tool: Edit Armature, Roll:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03289-keymap-3D-View-Tool-Edit-Armature-Roll-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03289.py -- tests/files/web/generated/M21-GAP-03289-keymap-3D-View-Tool-Edit-Armature-Roll-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03289", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03289", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03290", + "gapId": "keymap:3D View Tool: Edit Curve, Curve Pen:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03290-keymap-3D-View-Tool-Edit-Curve-Curve-Pen-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03290.py -- tests/files/web/generated/M21-GAP-03290-keymap-3D-View-Tool-Edit-Curve-Curve-Pen-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03290", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03290", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03291", + "gapId": "keymap:3D View Tool: Edit Curve, Draw:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03291-keymap-3D-View-Tool-Edit-Curve-Draw-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03291.py -- tests/files/web/generated/M21-GAP-03291-keymap-3D-View-Tool-Edit-Curve-Draw-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03291", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03291", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03292", + "gapId": "keymap:3D View Tool: Edit Curve, Extrude to Cursor:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03292-keymap-3D-View-Tool-Edit-Curve-Extrude-to-Cursor-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03292.py -- tests/files/web/generated/M21-GAP-03292-keymap-3D-View-Tool-Edit-Curve-Extrude-to-Cursor-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03292", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03292", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03293", + "gapId": "keymap:3D View Tool: Edit Curve, Extrude:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03293-keymap-3D-View-Tool-Edit-Curve-Extrude-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03293.py -- tests/files/web/generated/M21-GAP-03293-keymap-3D-View-Tool-Edit-Curve-Extrude-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03293", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03293", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03294", + "gapId": "keymap:3D View Tool: Edit Curve, Radius:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03294-keymap-3D-View-Tool-Edit-Curve-Radius-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03294.py -- tests/files/web/generated/M21-GAP-03294-keymap-3D-View-Tool-Edit-Curve-Radius-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03294", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03294", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03295", + "gapId": "keymap:3D View Tool: Edit Curve, Randomize:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03295-keymap-3D-View-Tool-Edit-Curve-Randomize-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03295.py -- tests/files/web/generated/M21-GAP-03295-keymap-3D-View-Tool-Edit-Curve-Randomize-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03295", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03295", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03296", + "gapId": "keymap:3D View Tool: Edit Curve, Tilt:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03296-keymap-3D-View-Tool-Edit-Curve-Tilt-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03296.py -- tests/files/web/generated/M21-GAP-03296-keymap-3D-View-Tool-Edit-Curve-Tilt-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03296", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03296", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03297", + "gapId": "keymap:3D View Tool: Edit Curves, Draw:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03297-keymap-3D-View-Tool-Edit-Curves-Draw-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03297.py -- tests/files/web/generated/M21-GAP-03297-keymap-3D-View-Tool-Edit-Curves-Draw-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03297", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03297", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03298", + "gapId": "keymap:3D View Tool: Edit Curves, Pen:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03298-keymap-3D-View-Tool-Edit-Curves-Pen-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03298.py -- tests/files/web/generated/M21-GAP-03298-keymap-3D-View-Tool-Edit-Curves-Pen-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03298", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03298", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03299", + "gapId": "keymap:3D View Tool: Edit Grease Pencil, Gradient:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03299-keymap-3D-View-Tool-Edit-Grease-Pencil-Gradient-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03299.py -- tests/files/web/generated/M21-GAP-03299-keymap-3D-View-Tool-Edit-Grease-Pencil-Gradient-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03299", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03299", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03300", + "gapId": "keymap:3D View Tool: Edit Grease Pencil, Interpolate:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03300-keymap-3D-View-Tool-Edit-Grease-Pencil-Interpolate-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03300.py -- tests/files/web/generated/M21-GAP-03300-keymap-3D-View-Tool-Edit-Grease-Pencil-Interpolate-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03300", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03300", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03301", + "gapId": "keymap:3D View Tool: Edit Grease Pencil, Pen:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03301-keymap-3D-View-Tool-Edit-Grease-Pencil-Pen-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03301.py -- tests/files/web/generated/M21-GAP-03301-keymap-3D-View-Tool-Edit-Grease-Pencil-Pen-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03301", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03301", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03302", + "gapId": "keymap:3D View Tool: Edit Mesh, Bevel:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03302-keymap-3D-View-Tool-Edit-Mesh-Bevel-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03302.py -- tests/files/web/generated/M21-GAP-03302-keymap-3D-View-Tool-Edit-Mesh-Bevel-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03302", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03302", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03303", + "gapId": "keymap:3D View Tool: Edit Mesh, Bisect:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03303-keymap-3D-View-Tool-Edit-Mesh-Bisect-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03303.py -- tests/files/web/generated/M21-GAP-03303-keymap-3D-View-Tool-Edit-Mesh-Bisect-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03303", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03303", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03304", + "gapId": "keymap:3D View Tool: Edit Mesh, Edge Slide:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03304-keymap-3D-View-Tool-Edit-Mesh-Edge-Slide-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03304.py -- tests/files/web/generated/M21-GAP-03304-keymap-3D-View-Tool-Edit-Mesh-Edge-Slide-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03304", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03304", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03305", + "gapId": "keymap:3D View Tool: Edit Mesh, Extrude Along Normals:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03305-keymap-3D-View-Tool-Edit-Mesh-Extrude-Along-Normals-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03305.py -- tests/files/web/generated/M21-GAP-03305-keymap-3D-View-Tool-Edit-Mesh-Extrude-Along-Normals-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03305", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03305", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03306", + "gapId": "keymap:3D View Tool: Edit Mesh, Extrude Individual:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03306-keymap-3D-View-Tool-Edit-Mesh-Extrude-Individual-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03306.py -- tests/files/web/generated/M21-GAP-03306-keymap-3D-View-Tool-Edit-Mesh-Extrude-Individual-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03306", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03306", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03307", + "gapId": "keymap:3D View Tool: Edit Mesh, Extrude Manifold:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03307-keymap-3D-View-Tool-Edit-Mesh-Extrude-Manifold-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03307.py -- tests/files/web/generated/M21-GAP-03307-keymap-3D-View-Tool-Edit-Mesh-Extrude-Manifold-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03307", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03307", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03308", + "gapId": "keymap:3D View Tool: Edit Mesh, Extrude Region:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03308-keymap-3D-View-Tool-Edit-Mesh-Extrude-Region-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03308.py -- tests/files/web/generated/M21-GAP-03308-keymap-3D-View-Tool-Edit-Mesh-Extrude-Region-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03308", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03308", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03309", + "gapId": "keymap:3D View Tool: Edit Mesh, Extrude to Cursor:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03309-keymap-3D-View-Tool-Edit-Mesh-Extrude-to-Cursor-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03309.py -- tests/files/web/generated/M21-GAP-03309-keymap-3D-View-Tool-Edit-Mesh-Extrude-to-Cursor-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03309", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03309", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03310", + "gapId": "keymap:3D View Tool: Edit Mesh, Inset Faces:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03310-keymap-3D-View-Tool-Edit-Mesh-Inset-Faces-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03310.py -- tests/files/web/generated/M21-GAP-03310-keymap-3D-View-Tool-Edit-Mesh-Inset-Faces-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03310", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03310", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03311", + "gapId": "keymap:3D View Tool: Edit Mesh, Knife:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03311-keymap-3D-View-Tool-Edit-Mesh-Knife-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03311.py -- tests/files/web/generated/M21-GAP-03311-keymap-3D-View-Tool-Edit-Mesh-Knife-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03311", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03311", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03312", + "gapId": "keymap:3D View Tool: Edit Mesh, Loop Cut:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03312-keymap-3D-View-Tool-Edit-Mesh-Loop-Cut-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03312.py -- tests/files/web/generated/M21-GAP-03312-keymap-3D-View-Tool-Edit-Mesh-Loop-Cut-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03312", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03312", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03313", + "gapId": "keymap:3D View Tool: Edit Mesh, Offset Edge Loop Cut:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03313-keymap-3D-View-Tool-Edit-Mesh-Offset-Edge-Loop-Cut-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03313.py -- tests/files/web/generated/M21-GAP-03313-keymap-3D-View-Tool-Edit-Mesh-Offset-Edge-Loop-Cut-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03313", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03313", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03314", + "gapId": "keymap:3D View Tool: Edit Mesh, Poly Build:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03314-keymap-3D-View-Tool-Edit-Mesh-Poly-Build-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03314.py -- tests/files/web/generated/M21-GAP-03314-keymap-3D-View-Tool-Edit-Mesh-Poly-Build-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03314", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03314", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03315", + "gapId": "keymap:3D View Tool: Edit Mesh, Push/Pull:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03315-keymap-3D-View-Tool-Edit-Mesh-Push-Pull-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03315.py -- tests/files/web/generated/M21-GAP-03315-keymap-3D-View-Tool-Edit-Mesh-Push-Pull-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03315", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03315", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03316", + "gapId": "keymap:3D View Tool: Edit Mesh, Randomize:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03316-keymap-3D-View-Tool-Edit-Mesh-Randomize-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03316.py -- tests/files/web/generated/M21-GAP-03316-keymap-3D-View-Tool-Edit-Mesh-Randomize-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03316", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03316", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03317", + "gapId": "keymap:3D View Tool: Edit Mesh, Rip Edge:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03317-keymap-3D-View-Tool-Edit-Mesh-Rip-Edge-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03317.py -- tests/files/web/generated/M21-GAP-03317-keymap-3D-View-Tool-Edit-Mesh-Rip-Edge-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03317", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03317", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03318", + "gapId": "keymap:3D View Tool: Edit Mesh, Rip Region:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03318-keymap-3D-View-Tool-Edit-Mesh-Rip-Region-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03318.py -- tests/files/web/generated/M21-GAP-03318-keymap-3D-View-Tool-Edit-Mesh-Rip-Region-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03318", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03318", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03319", + "gapId": "keymap:3D View Tool: Edit Mesh, Shrink/Fatten:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03319-keymap-3D-View-Tool-Edit-Mesh-Shrink-Fatten-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03319.py -- tests/files/web/generated/M21-GAP-03319-keymap-3D-View-Tool-Edit-Mesh-Shrink-Fatten-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03319", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03319", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03320", + "gapId": "keymap:3D View Tool: Edit Mesh, Smooth:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03320-keymap-3D-View-Tool-Edit-Mesh-Smooth-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03320.py -- tests/files/web/generated/M21-GAP-03320-keymap-3D-View-Tool-Edit-Mesh-Smooth-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03320", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03320", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03321", + "gapId": "keymap:3D View Tool: Edit Mesh, Spin Duplicates:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03321-keymap-3D-View-Tool-Edit-Mesh-Spin-Duplicates-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03321.py -- tests/files/web/generated/M21-GAP-03321-keymap-3D-View-Tool-Edit-Mesh-Spin-Duplicates-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03321", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03321", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03322", + "gapId": "keymap:3D View Tool: Edit Mesh, Spin:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03322-keymap-3D-View-Tool-Edit-Mesh-Spin-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03322.py -- tests/files/web/generated/M21-GAP-03322-keymap-3D-View-Tool-Edit-Mesh-Spin-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03322", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03322", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03323", + "gapId": "keymap:3D View Tool: Edit Mesh, To Sphere:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03323-keymap-3D-View-Tool-Edit-Mesh-To-Sphere-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03323.py -- tests/files/web/generated/M21-GAP-03323-keymap-3D-View-Tool-Edit-Mesh-To-Sphere-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03323", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03323", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03324", + "gapId": "keymap:3D View Tool: Edit Mesh, Vertex Slide:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03324-keymap-3D-View-Tool-Edit-Mesh-Vertex-Slide-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03324.py -- tests/files/web/generated/M21-GAP-03324-keymap-3D-View-Tool-Edit-Mesh-Vertex-Slide-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03324", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03324", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03325", + "gapId": "keymap:3D View Tool: Edit Text, Select Text:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03325-keymap-3D-View-Tool-Edit-Text-Select-Text-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03325.py -- tests/files/web/generated/M21-GAP-03325-keymap-3D-View-Tool-Edit-Text-Select-Text-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03325", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03325", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03326", + "gapId": "keymap:3D View Tool: Measure:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03326-keymap-3D-View-Tool-Measure-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03326.py -- tests/files/web/generated/M21-GAP-03326-keymap-3D-View-Tool-Measure-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03326", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03326", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03327", + "gapId": "keymap:3D View Tool: Move:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03327-keymap-3D-View-Tool-Move-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03327.py -- tests/files/web/generated/M21-GAP-03327-keymap-3D-View-Tool-Move-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03327", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03327", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03328", + "gapId": "keymap:3D View Tool: Object, Add Primitive:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03328-keymap-3D-View-Tool-Object-Add-Primitive-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03328.py -- tests/files/web/generated/M21-GAP-03328-keymap-3D-View-Tool-Object-Add-Primitive-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03328", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03328", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03329", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Arc:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03329-keymap-3D-View-Tool-Paint-Grease-Pencil-Arc-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03329.py -- tests/files/web/generated/M21-GAP-03329-keymap-3D-View-Tool-Paint-Grease-Pencil-Arc-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03329", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03329", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03330", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Box:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03330-keymap-3D-View-Tool-Paint-Grease-Pencil-Box-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03330.py -- tests/files/web/generated/M21-GAP-03330-keymap-3D-View-Tool-Paint-Grease-Pencil-Box-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03330", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03330", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03331", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Circle:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03331-keymap-3D-View-Tool-Paint-Grease-Pencil-Circle-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03331.py -- tests/files/web/generated/M21-GAP-03331-keymap-3D-View-Tool-Paint-Grease-Pencil-Circle-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03331", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03331", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03332", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Curve:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03332-keymap-3D-View-Tool-Paint-Grease-Pencil-Curve-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03332.py -- tests/files/web/generated/M21-GAP-03332-keymap-3D-View-Tool-Paint-Grease-Pencil-Curve-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03332", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03332", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03333", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Eyedropper:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03333-keymap-3D-View-Tool-Paint-Grease-Pencil-Eyedropper-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03333.py -- tests/files/web/generated/M21-GAP-03333-keymap-3D-View-Tool-Paint-Grease-Pencil-Eyedropper-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03333", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03333", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03334", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Interpolate:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03334-keymap-3D-View-Tool-Paint-Grease-Pencil-Interpolate-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03334.py -- tests/files/web/generated/M21-GAP-03334-keymap-3D-View-Tool-Paint-Grease-Pencil-Interpolate-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03334", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03334", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03335", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Line:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03335-keymap-3D-View-Tool-Paint-Grease-Pencil-Line-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03335.py -- tests/files/web/generated/M21-GAP-03335-keymap-3D-View-Tool-Paint-Grease-Pencil-Line-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03335", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03335", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03336", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Polyline:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03336-keymap-3D-View-Tool-Paint-Grease-Pencil-Polyline-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03336.py -- tests/files/web/generated/M21-GAP-03336-keymap-3D-View-Tool-Paint-Grease-Pencil-Polyline-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03336", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03336", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03337", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Trim:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03337-keymap-3D-View-Tool-Paint-Grease-Pencil-Trim-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03337.py -- tests/files/web/generated/M21-GAP-03337-keymap-3D-View-Tool-Paint-Grease-Pencil-Trim-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03337", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03337", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03338", + "gapId": "keymap:3D View Tool: Paint Weight, Gradient:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03338-keymap-3D-View-Tool-Paint-Weight-Gradient-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03338.py -- tests/files/web/generated/M21-GAP-03338-keymap-3D-View-Tool-Paint-Weight-Gradient-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03338", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03338", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03339", + "gapId": "keymap:3D View Tool: Paint Weight, Sample Vertex Group:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03339-keymap-3D-View-Tool-Paint-Weight-Sample-Vertex-Group-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03339.py -- tests/files/web/generated/M21-GAP-03339-keymap-3D-View-Tool-Paint-Weight-Sample-Vertex-Group-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03339", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03339", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03340", + "gapId": "keymap:3D View Tool: Paint Weight, Sample Weight:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03340-keymap-3D-View-Tool-Paint-Weight-Sample-Weight-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03340.py -- tests/files/web/generated/M21-GAP-03340-keymap-3D-View-Tool-Paint-Weight-Sample-Weight-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03340", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03340", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03341", + "gapId": "keymap:3D View Tool: Push:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03341-keymap-3D-View-Tool-Push-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03341.py -- tests/files/web/generated/M21-GAP-03341-keymap-3D-View-Tool-Push-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03341", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03341", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03342", + "gapId": "keymap:3D View Tool: Relax:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03342-keymap-3D-View-Tool-Relax-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03342.py -- tests/files/web/generated/M21-GAP-03342-keymap-3D-View-Tool-Relax-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03342", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03342", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03343", + "gapId": "keymap:3D View Tool: Rotate:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03343-keymap-3D-View-Tool-Rotate-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03343.py -- tests/files/web/generated/M21-GAP-03343-keymap-3D-View-Tool-Rotate-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03343", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03343", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03344", + "gapId": "keymap:3D View Tool: Scale:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03344-keymap-3D-View-Tool-Scale-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03344.py -- tests/files/web/generated/M21-GAP-03344-keymap-3D-View-Tool-Scale-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03344", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03344", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03345", + "gapId": "keymap:3D View Tool: Sculpt, Box Face Set:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03345-keymap-3D-View-Tool-Sculpt-Box-Face-Set-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03345.py -- tests/files/web/generated/M21-GAP-03345-keymap-3D-View-Tool-Sculpt-Box-Face-Set-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03345", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03345", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03346", + "gapId": "keymap:3D View Tool: Sculpt, Box Hide:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03346-keymap-3D-View-Tool-Sculpt-Box-Hide-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03346.py -- tests/files/web/generated/M21-GAP-03346-keymap-3D-View-Tool-Sculpt-Box-Hide-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03346", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03346", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03347", + "gapId": "keymap:3D View Tool: Sculpt, Box Mask:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03347-keymap-3D-View-Tool-Sculpt-Box-Mask-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03347.py -- tests/files/web/generated/M21-GAP-03347-keymap-3D-View-Tool-Sculpt-Box-Mask-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03347", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03347", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03348", + "gapId": "keymap:3D View Tool: Sculpt, Box Trim:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03348-keymap-3D-View-Tool-Sculpt-Box-Trim-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03348.py -- tests/files/web/generated/M21-GAP-03348-keymap-3D-View-Tool-Sculpt-Box-Trim-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03348", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03348", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03349", + "gapId": "keymap:3D View Tool: Sculpt, Cloth Filter:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03349-keymap-3D-View-Tool-Sculpt-Cloth-Filter-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03349.py -- tests/files/web/generated/M21-GAP-03349-keymap-3D-View-Tool-Sculpt-Cloth-Filter-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03349", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03349", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03350", + "gapId": "keymap:3D View Tool: Sculpt, Color Filter:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03350-keymap-3D-View-Tool-Sculpt-Color-Filter-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03350.py -- tests/files/web/generated/M21-GAP-03350-keymap-3D-View-Tool-Sculpt-Color-Filter-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03350", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03350", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03351", + "gapId": "keymap:3D View Tool: Sculpt, Face Set Edit:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03351-keymap-3D-View-Tool-Sculpt-Face-Set-Edit-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03351.py -- tests/files/web/generated/M21-GAP-03351-keymap-3D-View-Tool-Sculpt-Face-Set-Edit-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03351", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03351", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03352", + "gapId": "keymap:3D View Tool: Sculpt, Lasso Face Set:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03352-keymap-3D-View-Tool-Sculpt-Lasso-Face-Set-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03352.py -- tests/files/web/generated/M21-GAP-03352-keymap-3D-View-Tool-Sculpt-Lasso-Face-Set-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03352", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03352", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03353", + "gapId": "keymap:3D View Tool: Sculpt, Lasso Hide:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03353-keymap-3D-View-Tool-Sculpt-Lasso-Hide-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03353.py -- tests/files/web/generated/M21-GAP-03353-keymap-3D-View-Tool-Sculpt-Lasso-Hide-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03353", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03353", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03354", + "gapId": "keymap:3D View Tool: Sculpt, Lasso Mask:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03354-keymap-3D-View-Tool-Sculpt-Lasso-Mask-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03354.py -- tests/files/web/generated/M21-GAP-03354-keymap-3D-View-Tool-Sculpt-Lasso-Mask-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03354", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03354", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03355", + "gapId": "keymap:3D View Tool: Sculpt, Lasso Trim:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03355-keymap-3D-View-Tool-Sculpt-Lasso-Trim-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03355.py -- tests/files/web/generated/M21-GAP-03355-keymap-3D-View-Tool-Sculpt-Lasso-Trim-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03355", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03355", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03356", + "gapId": "keymap:3D View Tool: Sculpt, Line Face Set:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03356-keymap-3D-View-Tool-Sculpt-Line-Face-Set-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03356.py -- tests/files/web/generated/M21-GAP-03356-keymap-3D-View-Tool-Sculpt-Line-Face-Set-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03356", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03356", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03357", + "gapId": "keymap:3D View Tool: Sculpt, Line Hide:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03357-keymap-3D-View-Tool-Sculpt-Line-Hide-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03357.py -- tests/files/web/generated/M21-GAP-03357-keymap-3D-View-Tool-Sculpt-Line-Hide-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03357", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03357", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03358", + "gapId": "keymap:3D View Tool: Sculpt, Line Mask:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03358-keymap-3D-View-Tool-Sculpt-Line-Mask-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03358.py -- tests/files/web/generated/M21-GAP-03358-keymap-3D-View-Tool-Sculpt-Line-Mask-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03358", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03358", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03359", + "gapId": "keymap:3D View Tool: Sculpt, Line Project:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03359-keymap-3D-View-Tool-Sculpt-Line-Project-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03359.py -- tests/files/web/generated/M21-GAP-03359-keymap-3D-View-Tool-Sculpt-Line-Project-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03359", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03359", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03360", + "gapId": "keymap:3D View Tool: Sculpt, Line Trim:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03360-keymap-3D-View-Tool-Sculpt-Line-Trim-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03360.py -- tests/files/web/generated/M21-GAP-03360-keymap-3D-View-Tool-Sculpt-Line-Trim-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03360", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03360", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03361", + "gapId": "keymap:3D View Tool: Sculpt, Mask by Color:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03361-keymap-3D-View-Tool-Sculpt-Mask-by-Color-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03361.py -- tests/files/web/generated/M21-GAP-03361-keymap-3D-View-Tool-Sculpt-Mask-by-Color-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03361", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03361", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03362", + "gapId": "keymap:3D View Tool: Sculpt, Mesh Filter:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03362-keymap-3D-View-Tool-Sculpt-Mesh-Filter-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03362.py -- tests/files/web/generated/M21-GAP-03362-keymap-3D-View-Tool-Sculpt-Mesh-Filter-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03362", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03362", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03363", + "gapId": "keymap:3D View Tool: Sculpt, Polyline Face Set:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03363-keymap-3D-View-Tool-Sculpt-Polyline-Face-Set-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03363.py -- tests/files/web/generated/M21-GAP-03363-keymap-3D-View-Tool-Sculpt-Polyline-Face-Set-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03363", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03363", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03364", + "gapId": "keymap:3D View Tool: Sculpt, Polyline Hide:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03364-keymap-3D-View-Tool-Sculpt-Polyline-Hide-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03364.py -- tests/files/web/generated/M21-GAP-03364-keymap-3D-View-Tool-Sculpt-Polyline-Hide-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03364", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03364", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03365", + "gapId": "keymap:3D View Tool: Sculpt, Polyline Mask:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03365-keymap-3D-View-Tool-Sculpt-Polyline-Mask-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03365.py -- tests/files/web/generated/M21-GAP-03365-keymap-3D-View-Tool-Sculpt-Polyline-Mask-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03365", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03365", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03366", + "gapId": "keymap:3D View Tool: Sculpt, Polyline Trim:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03366-keymap-3D-View-Tool-Sculpt-Polyline-Trim-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03366.py -- tests/files/web/generated/M21-GAP-03366-keymap-3D-View-Tool-Sculpt-Polyline-Trim-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03366", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03366", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03367", + "gapId": "keymap:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03367-keymap-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03367.py -- tests/files/web/generated/M21-GAP-03367-keymap-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03367", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03367", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03368", + "gapId": "keymap:3D View Tool: Select Box:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03368-keymap-3D-View-Tool-Select-Box-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03368.py -- tests/files/web/generated/M21-GAP-03368-keymap-3D-View-Tool-Select-Box-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03368", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03368", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03369", + "gapId": "keymap:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03369-keymap-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03369.py -- tests/files/web/generated/M21-GAP-03369-keymap-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03369", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03369", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03370", + "gapId": "keymap:3D View Tool: Select Circle:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03370-keymap-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03370.py -- tests/files/web/generated/M21-GAP-03370-keymap-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03370", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03370", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03371", + "gapId": "keymap:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03371-keymap-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03371.py -- tests/files/web/generated/M21-GAP-03371-keymap-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03371", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03371", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03372", + "gapId": "keymap:3D View Tool: Select Lasso:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03372-keymap-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03372.py -- tests/files/web/generated/M21-GAP-03372-keymap-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03372", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03372", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03373", + "gapId": "keymap:3D View Tool: Shear:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03373-keymap-3D-View-Tool-Shear-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03373.py -- tests/files/web/generated/M21-GAP-03373-keymap-3D-View-Tool-Shear-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03373", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03373", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03374", + "gapId": "keymap:3D View Tool: Transform:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03374-keymap-3D-View-Tool-Transform-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03374.py -- tests/files/web/generated/M21-GAP-03374-keymap-3D-View-Tool-Transform-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03374", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03374", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03375", + "gapId": "keymap:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03375-keymap-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03375.py -- tests/files/web/generated/M21-GAP-03375-keymap-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03375", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03375", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03376", + "gapId": "keymap:3D View Tool: Tweak:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03376-keymap-3D-View-Tool-Tweak-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03376.py -- tests/files/web/generated/M21-GAP-03376-keymap-3D-View-Tool-Tweak-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03376", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03376", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03377", + "gapId": "keymap:3D View:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03377-keymap-3D-View-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03377.py -- tests/files/web/generated/M21-GAP-03377-keymap-3D-View-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03377", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03377", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03378", + "gapId": "keymap:Animation Channels:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03378-keymap-Animation-Channels-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03378.py -- tests/files/web/generated/M21-GAP-03378-keymap-Animation-Channels-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03378", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03378", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03379", + "gapId": "keymap:Animation:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03379-keymap-Animation-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03379.py -- tests/files/web/generated/M21-GAP-03379-keymap-Animation-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03379", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03379", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03380", + "gapId": "keymap:Armature:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03380-keymap-Armature-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03380.py -- tests/files/web/generated/M21-GAP-03380-keymap-Armature-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03380", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03380", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03381", + "gapId": "keymap:Bevel Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03381-keymap-Bevel-Modal-Map-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03381.py -- tests/files/web/generated/M21-GAP-03381-keymap-Bevel-Modal-Map-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03381", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03381", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03382", + "gapId": "keymap:Clip Dopesheet Editor:CLIP_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03382-keymap-Clip-Dopesheet-Editor-CLIP_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03382.py -- tests/files/web/generated/M21-GAP-03382-keymap-Clip-Dopesheet-Editor-CLIP_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03382", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03382", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03383", + "gapId": "keymap:Clip Editor:CLIP_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03383-keymap-Clip-Editor-CLIP_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03383.py -- tests/files/web/generated/M21-GAP-03383-keymap-Clip-Editor-CLIP_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03383", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03383", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03384", + "gapId": "keymap:Clip Graph Editor:CLIP_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03384-keymap-Clip-Graph-Editor-CLIP_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03384.py -- tests/files/web/generated/M21-GAP-03384-keymap-Clip-Graph-Editor-CLIP_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03384", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03384", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03385", + "gapId": "keymap:Clip Time Scrub:CLIP_EDITOR:PREVIEW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03385-keymap-Clip-Time-Scrub-CLIP_EDITOR-PREVIEW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03385.py -- tests/files/web/generated/M21-GAP-03385-keymap-Clip-Time-Scrub-CLIP_EDITOR-PREVIEW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03385", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03385", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03386", + "gapId": "keymap:Clip:CLIP_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03386-keymap-Clip-CLIP_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03386.py -- tests/files/web/generated/M21-GAP-03386-keymap-Clip-CLIP_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03386", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03386", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03387", + "gapId": "keymap:Console:CONSOLE:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03387-keymap-Console-CONSOLE-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03387.py -- tests/files/web/generated/M21-GAP-03387-keymap-Console-CONSOLE-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03387", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03387", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03388", + "gapId": "keymap:Curve Pen Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03388-keymap-Curve-Pen-Modal-Map-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03388.py -- tests/files/web/generated/M21-GAP-03388-keymap-Curve-Pen-Modal-Map-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03388", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03388", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03389", + "gapId": "keymap:Curve:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03389-keymap-Curve-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03389.py -- tests/files/web/generated/M21-GAP-03389-keymap-Curve-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03389", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03389", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03390", + "gapId": "keymap:Curves:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03390-keymap-Curves-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03390.py -- tests/files/web/generated/M21-GAP-03390-keymap-Curves-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03390", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03390", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03391", + "gapId": "keymap:Custom Normals Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03391-keymap-Custom-Normals-Modal-Map-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03391.py -- tests/files/web/generated/M21-GAP-03391-keymap-Custom-Normals-Modal-Map-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03391", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03391", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03392", + "gapId": "keymap:Dopesheet Generic:DOPESHEET_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03392-keymap-Dopesheet-Generic-DOPESHEET_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03392.py -- tests/files/web/generated/M21-GAP-03392-keymap-Dopesheet-Generic-DOPESHEET_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03392", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03392", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03393", + "gapId": "keymap:Dopesheet:DOPESHEET_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03393-keymap-Dopesheet-DOPESHEET_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03393.py -- tests/files/web/generated/M21-GAP-03393-keymap-Dopesheet-DOPESHEET_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03393", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03393", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03394", + "gapId": "keymap:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03394-keymap-Eyedropper-ColorRamp-PointSampling-Map-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03394.py -- tests/files/web/generated/M21-GAP-03394-keymap-Eyedropper-ColorRamp-PointSampling-Map-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03394", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03394", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03395", + "gapId": "keymap:Eyedropper Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03395-keymap-Eyedropper-Modal-Map-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03395.py -- tests/files/web/generated/M21-GAP-03395-keymap-Eyedropper-Modal-Map-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03395", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03395", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03396", + "gapId": "keymap:File Browser Buttons:FILE_BROWSER:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03396-keymap-File-Browser-Buttons-FILE_BROWSER-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03396.py -- tests/files/web/generated/M21-GAP-03396-keymap-File-Browser-Buttons-FILE_BROWSER-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03396", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03396", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03397", + "gapId": "keymap:File Browser Main:FILE_BROWSER:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03397-keymap-File-Browser-Main-FILE_BROWSER-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03397.py -- tests/files/web/generated/M21-GAP-03397-keymap-File-Browser-Main-FILE_BROWSER-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03397", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03397", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03398", + "gapId": "keymap:File Browser:FILE_BROWSER:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03398-keymap-File-Browser-FILE_BROWSER-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03398.py -- tests/files/web/generated/M21-GAP-03398-keymap-File-Browser-FILE_BROWSER-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03398", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03398", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03399", + "gapId": "keymap:Fill Tool Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03399-keymap-Fill-Tool-Modal-Map-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03399.py -- tests/files/web/generated/M21-GAP-03399-keymap-Fill-Tool-Modal-Map-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03399", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03399", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03400", + "gapId": "keymap:Font:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03400-keymap-Font-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03400.py -- tests/files/web/generated/M21-GAP-03400-keymap-Font-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03400", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03400", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03401", + "gapId": "keymap:Frames:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03401-keymap-Frames-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03401.py -- tests/files/web/generated/M21-GAP-03401-keymap-Frames-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03401", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03401", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03402", + "gapId": "keymap:Generic Gizmo Click Drag:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03402-keymap-Generic-Gizmo-Click-Drag-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03402.py -- tests/files/web/generated/M21-GAP-03402-keymap-Generic-Gizmo-Click-Drag-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03402", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03402", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03403", + "gapId": "keymap:Generic Gizmo Drag:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03403-keymap-Generic-Gizmo-Drag-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03403.py -- tests/files/web/generated/M21-GAP-03403-keymap-Generic-Gizmo-Drag-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03403", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03403", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03404", + "gapId": "keymap:Generic Gizmo Maybe Drag:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03404-keymap-Generic-Gizmo-Maybe-Drag-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03404.py -- tests/files/web/generated/M21-GAP-03404-keymap-Generic-Gizmo-Maybe-Drag-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03404", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03404", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03405", + "gapId": "keymap:Generic Gizmo Select:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03405-keymap-Generic-Gizmo-Select-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03405.py -- tests/files/web/generated/M21-GAP-03405-keymap-Generic-Gizmo-Select-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03405", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03405", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03406", + "gapId": "keymap:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03406-keymap-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03406.py -- tests/files/web/generated/M21-GAP-03406-keymap-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03406", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03406", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03407", + "gapId": "keymap:Generic Gizmo:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03407-keymap-Generic-Gizmo-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03407.py -- tests/files/web/generated/M21-GAP-03407-keymap-Generic-Gizmo-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03407", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03407", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03408", + "gapId": "keymap:Generic Tool: Annotate Eraser:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03408-keymap-Generic-Tool-Annotate-Eraser-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03408.py -- tests/files/web/generated/M21-GAP-03408-keymap-Generic-Tool-Annotate-Eraser-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03408", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03408", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03409", + "gapId": "keymap:Generic Tool: Annotate Line:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03409-keymap-Generic-Tool-Annotate-Line-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03409.py -- tests/files/web/generated/M21-GAP-03409-keymap-Generic-Tool-Annotate-Line-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03409", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03409", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03410", + "gapId": "keymap:Generic Tool: Annotate Polygon:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03410-keymap-Generic-Tool-Annotate-Polygon-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03410.py -- tests/files/web/generated/M21-GAP-03410-keymap-Generic-Tool-Annotate-Polygon-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03410", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03410", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03411", + "gapId": "keymap:Generic Tool: Annotate:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03411-keymap-Generic-Tool-Annotate-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03411.py -- tests/files/web/generated/M21-GAP-03411-keymap-Generic-Tool-Annotate-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03411", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03411", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03412", + "gapId": "keymap:Gesture Box:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03412-keymap-Gesture-Box-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03412.py -- tests/files/web/generated/M21-GAP-03412-keymap-Gesture-Box-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03412", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03412", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03413", + "gapId": "keymap:Gesture Lasso:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03413-keymap-Gesture-Lasso-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03413.py -- tests/files/web/generated/M21-GAP-03413-keymap-Gesture-Lasso-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03413", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03413", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03414", + "gapId": "keymap:Gesture Polyline:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03414-keymap-Gesture-Polyline-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03414.py -- tests/files/web/generated/M21-GAP-03414-keymap-Gesture-Polyline-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03414", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03414", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03415", + "gapId": "keymap:Gesture Straight Line:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03415-keymap-Gesture-Straight-Line-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03415.py -- tests/files/web/generated/M21-GAP-03415-keymap-Gesture-Straight-Line-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03415", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03415", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03416", + "gapId": "keymap:Gesture Zoom Border:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03416-keymap-Gesture-Zoom-Border-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03416.py -- tests/files/web/generated/M21-GAP-03416-keymap-Gesture-Zoom-Border-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03416", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03416", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03417", + "gapId": "keymap:Graph Editor Generic:GRAPH_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03417-keymap-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03417.py -- tests/files/web/generated/M21-GAP-03417-keymap-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03417", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03417", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03418", + "gapId": "keymap:Graph Editor:GRAPH_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03418-keymap-Graph-Editor-GRAPH_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03418.py -- tests/files/web/generated/M21-GAP-03418-keymap-Graph-Editor-GRAPH_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03418", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03418", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03419", + "gapId": "keymap:Grease Pencil Brush Stroke:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03419-keymap-Grease-Pencil-Brush-Stroke-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03419.py -- tests/files/web/generated/M21-GAP-03419-keymap-Grease-Pencil-Brush-Stroke-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03419", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03419", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03420", + "gapId": "keymap:Grease Pencil Draw Mode:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03420-keymap-Grease-Pencil-Draw-Mode-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03420.py -- tests/files/web/generated/M21-GAP-03420-keymap-Grease-Pencil-Draw-Mode-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03420", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03420", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03421", + "gapId": "keymap:Grease Pencil Edit Mode:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03421-keymap-Grease-Pencil-Edit-Mode-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03421.py -- tests/files/web/generated/M21-GAP-03421-keymap-Grease-Pencil-Edit-Mode-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03421", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03421", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03422", + "gapId": "keymap:Grease Pencil Fill Tool:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03422-keymap-Grease-Pencil-Fill-Tool-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03422.py -- tests/files/web/generated/M21-GAP-03422-keymap-Grease-Pencil-Fill-Tool-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03422", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03422", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03423", + "gapId": "keymap:Grease Pencil Sculpt Mode:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03423-keymap-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03423.py -- tests/files/web/generated/M21-GAP-03423-keymap-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03423", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03423", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03424", + "gapId": "keymap:Grease Pencil Selection:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03424-keymap-Grease-Pencil-Selection-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03424.py -- tests/files/web/generated/M21-GAP-03424-keymap-Grease-Pencil-Selection-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03424", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03424", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03425", + "gapId": "keymap:Grease Pencil Vertex Paint:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03425-keymap-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03425.py -- tests/files/web/generated/M21-GAP-03425-keymap-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03425", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03425", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03426", + "gapId": "keymap:Grease Pencil Weight Paint:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03426-keymap-Grease-Pencil-Weight-Paint-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03426.py -- tests/files/web/generated/M21-GAP-03426-keymap-Grease-Pencil-Weight-Paint-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03426", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03426", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03427", + "gapId": "keymap:Grease Pencil:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03427-keymap-Grease-Pencil-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03427.py -- tests/files/web/generated/M21-GAP-03427-keymap-Grease-Pencil-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03427", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03427", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03428", + "gapId": "keymap:Image Editor Tool: Mask, Box:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03428-keymap-Image-Editor-Tool-Mask-Box-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03428.py -- tests/files/web/generated/M21-GAP-03428-keymap-Image-Editor-Tool-Mask-Box-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03428", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03428", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03429", + "gapId": "keymap:Image Editor Tool: Mask, Circle:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03429-keymap-Image-Editor-Tool-Mask-Circle-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03429.py -- tests/files/web/generated/M21-GAP-03429-keymap-Image-Editor-Tool-Mask-Circle-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03429", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03429", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03430", + "gapId": "keymap:Image Editor Tool: Mask, Cursor:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03430-keymap-Image-Editor-Tool-Mask-Cursor-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03430.py -- tests/files/web/generated/M21-GAP-03430-keymap-Image-Editor-Tool-Mask-Cursor-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03430", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03430", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03431", + "gapId": "keymap:Image Editor Tool: Mask, Move:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03431-keymap-Image-Editor-Tool-Mask-Move-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03431.py -- tests/files/web/generated/M21-GAP-03431-keymap-Image-Editor-Tool-Mask-Move-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03431", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03431", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03432", + "gapId": "keymap:Image Editor Tool: Mask, Rotate:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03432-keymap-Image-Editor-Tool-Mask-Rotate-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03432.py -- tests/files/web/generated/M21-GAP-03432-keymap-Image-Editor-Tool-Mask-Rotate-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03432", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03432", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03433", + "gapId": "keymap:Image Editor Tool: Mask, Scale:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03433-keymap-Image-Editor-Tool-Mask-Scale-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03433.py -- tests/files/web/generated/M21-GAP-03433-keymap-Image-Editor-Tool-Mask-Scale-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03433", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03433", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03434", + "gapId": "keymap:Image Editor Tool: Mask, Select Box (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03434-keymap-Image-Editor-Tool-Mask-Select-Box-fallback-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03434.py -- tests/files/web/generated/M21-GAP-03434-keymap-Image-Editor-Tool-Mask-Select-Box-fallback-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03434", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03434", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03435", + "gapId": "keymap:Image Editor Tool: Mask, Select Box:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03435-keymap-Image-Editor-Tool-Mask-Select-Box-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03435.py -- tests/files/web/generated/M21-GAP-03435-keymap-Image-Editor-Tool-Mask-Select-Box-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03435", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03435", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03436", + "gapId": "keymap:Image Editor Tool: Mask, Select Circle (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03436-keymap-Image-Editor-Tool-Mask-Select-Circle-fallback-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03436.py -- tests/files/web/generated/M21-GAP-03436-keymap-Image-Editor-Tool-Mask-Select-Circle-fallback-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03436", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03436", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03437", + "gapId": "keymap:Image Editor Tool: Mask, Select Circle:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03437-keymap-Image-Editor-Tool-Mask-Select-Circle-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03437.py -- tests/files/web/generated/M21-GAP-03437-keymap-Image-Editor-Tool-Mask-Select-Circle-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03437", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03437", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03438", + "gapId": "keymap:Image Editor Tool: Mask, Select Lasso (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03438-keymap-Image-Editor-Tool-Mask-Select-Lasso-fallback-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03438.py -- tests/files/web/generated/M21-GAP-03438-keymap-Image-Editor-Tool-Mask-Select-Lasso-fallback-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03438", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03438", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03439", + "gapId": "keymap:Image Editor Tool: Mask, Select Lasso:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03439-keymap-Image-Editor-Tool-Mask-Select-Lasso-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03439.py -- tests/files/web/generated/M21-GAP-03439-keymap-Image-Editor-Tool-Mask-Select-Lasso-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03439", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03439", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03440", + "gapId": "keymap:Image Editor Tool: Mask, Transform:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03440-keymap-Image-Editor-Tool-Mask-Transform-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03440.py -- tests/files/web/generated/M21-GAP-03440-keymap-Image-Editor-Tool-Mask-Transform-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03440", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03440", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03441", + "gapId": "keymap:Image Editor Tool: Mask, Tweak (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03441-keymap-Image-Editor-Tool-Mask-Tweak-fallback-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03441.py -- tests/files/web/generated/M21-GAP-03441-keymap-Image-Editor-Tool-Mask-Tweak-fallback-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03441", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03441", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03442", + "gapId": "keymap:Image Editor Tool: Mask, Tweak:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03442-keymap-Image-Editor-Tool-Mask-Tweak-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03442.py -- tests/files/web/generated/M21-GAP-03442-keymap-Image-Editor-Tool-Mask-Tweak-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03442", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03442", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03443", + "gapId": "keymap:Image Editor Tool: Sample:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03443-keymap-Image-Editor-Tool-Sample-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03443.py -- tests/files/web/generated/M21-GAP-03443-keymap-Image-Editor-Tool-Sample-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03443", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03443", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03444", + "gapId": "keymap:Image Editor Tool: Uv, Cursor:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03444-keymap-Image-Editor-Tool-Uv-Cursor-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03444.py -- tests/files/web/generated/M21-GAP-03444-keymap-Image-Editor-Tool-Uv-Cursor-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03444", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03444", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03445", + "gapId": "keymap:Image Editor Tool: Uv, Grab:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03445-keymap-Image-Editor-Tool-Uv-Grab-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03445.py -- tests/files/web/generated/M21-GAP-03445-keymap-Image-Editor-Tool-Uv-Grab-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03445", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03445", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03446", + "gapId": "keymap:Image Editor Tool: Uv, Move:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03446-keymap-Image-Editor-Tool-Uv-Move-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03446.py -- tests/files/web/generated/M21-GAP-03446-keymap-Image-Editor-Tool-Uv-Move-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03446", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03446", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03447", + "gapId": "keymap:Image Editor Tool: Uv, Pinch:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03447-keymap-Image-Editor-Tool-Uv-Pinch-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03447.py -- tests/files/web/generated/M21-GAP-03447-keymap-Image-Editor-Tool-Uv-Pinch-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03447", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03447", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03448", + "gapId": "keymap:Image Editor Tool: Uv, Relax:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03448-keymap-Image-Editor-Tool-Uv-Relax-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03448.py -- tests/files/web/generated/M21-GAP-03448-keymap-Image-Editor-Tool-Uv-Relax-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03448", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03448", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03449", + "gapId": "keymap:Image Editor Tool: Uv, Rip Region:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03449-keymap-Image-Editor-Tool-Uv-Rip-Region-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03449.py -- tests/files/web/generated/M21-GAP-03449-keymap-Image-Editor-Tool-Uv-Rip-Region-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03449", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03449", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03450", + "gapId": "keymap:Image Editor Tool: Uv, Rotate:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03450-keymap-Image-Editor-Tool-Uv-Rotate-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03450.py -- tests/files/web/generated/M21-GAP-03450-keymap-Image-Editor-Tool-Uv-Rotate-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03450", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03450", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03451", + "gapId": "keymap:Image Editor Tool: Uv, Scale:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03451-keymap-Image-Editor-Tool-Uv-Scale-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03451.py -- tests/files/web/generated/M21-GAP-03451-keymap-Image-Editor-Tool-Uv-Scale-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03451", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03451", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03452", + "gapId": "keymap:Image Editor Tool: Uv, Select Box (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03452-keymap-Image-Editor-Tool-Uv-Select-Box-fallback-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03452.py -- tests/files/web/generated/M21-GAP-03452-keymap-Image-Editor-Tool-Uv-Select-Box-fallback-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03452", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03452", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03453", + "gapId": "keymap:Image Editor Tool: Uv, Select Box:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03453-keymap-Image-Editor-Tool-Uv-Select-Box-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03453.py -- tests/files/web/generated/M21-GAP-03453-keymap-Image-Editor-Tool-Uv-Select-Box-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03453", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03453", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03454", + "gapId": "keymap:Image Editor Tool: Uv, Select Circle (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03454-keymap-Image-Editor-Tool-Uv-Select-Circle-fallback-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03454.py -- tests/files/web/generated/M21-GAP-03454-keymap-Image-Editor-Tool-Uv-Select-Circle-fallback-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03454", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03454", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03455", + "gapId": "keymap:Image Editor Tool: Uv, Select Circle:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03455-keymap-Image-Editor-Tool-Uv-Select-Circle-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03455.py -- tests/files/web/generated/M21-GAP-03455-keymap-Image-Editor-Tool-Uv-Select-Circle-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03455", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03455", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03456", + "gapId": "keymap:Image Editor Tool: Uv, Select Lasso (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03456-keymap-Image-Editor-Tool-Uv-Select-Lasso-fallback-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03456.py -- tests/files/web/generated/M21-GAP-03456-keymap-Image-Editor-Tool-Uv-Select-Lasso-fallback-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03456", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03456", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03457", + "gapId": "keymap:Image Editor Tool: Uv, Select Lasso:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03457-keymap-Image-Editor-Tool-Uv-Select-Lasso-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03457.py -- tests/files/web/generated/M21-GAP-03457-keymap-Image-Editor-Tool-Uv-Select-Lasso-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03457", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03457", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03458", + "gapId": "keymap:Image Editor Tool: Uv, Tweak (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03458-keymap-Image-Editor-Tool-Uv-Tweak-fallback-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03458.py -- tests/files/web/generated/M21-GAP-03458-keymap-Image-Editor-Tool-Uv-Tweak-fallback-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03458", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03458", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03459", + "gapId": "keymap:Image Editor Tool: Uv, Tweak:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03459-keymap-Image-Editor-Tool-Uv-Tweak-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03459.py -- tests/files/web/generated/M21-GAP-03459-keymap-Image-Editor-Tool-Uv-Tweak-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03459", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03459", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03460", + "gapId": "keymap:Image Generic:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03460-keymap-Image-Generic-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03460.py -- tests/files/web/generated/M21-GAP-03460-keymap-Image-Generic-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03460", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03460", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03461", + "gapId": "keymap:Image Paint:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03461-keymap-Image-Paint-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03461.py -- tests/files/web/generated/M21-GAP-03461-keymap-Image-Paint-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03461", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03461", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03462", + "gapId": "keymap:Image:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03462-keymap-Image-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03462.py -- tests/files/web/generated/M21-GAP-03462-keymap-Image-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03462", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03462", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03463", + "gapId": "keymap:Info:INFO:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03463-keymap-Info-INFO-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03463.py -- tests/files/web/generated/M21-GAP-03463-keymap-Info-INFO-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03463", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03463", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03464", + "gapId": "keymap:Interpolate Tool Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03464-keymap-Interpolate-Tool-Modal-Map-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03464.py -- tests/files/web/generated/M21-GAP-03464-keymap-Interpolate-Tool-Modal-Map-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03464", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03464", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03465", + "gapId": "keymap:Knife Tool Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03465-keymap-Knife-Tool-Modal-Map-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03465.py -- tests/files/web/generated/M21-GAP-03465-keymap-Knife-Tool-Modal-Map-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03465", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03465", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03466", + "gapId": "keymap:Lattice:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03466-keymap-Lattice-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03466.py -- tests/files/web/generated/M21-GAP-03466-keymap-Lattice-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03466", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03466", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03467", + "gapId": "keymap:Markers:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03467-keymap-Markers-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03467.py -- tests/files/web/generated/M21-GAP-03467-keymap-Markers-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03467", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03467", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03468", + "gapId": "keymap:Mask Editing:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03468-keymap-Mask-Editing-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03468.py -- tests/files/web/generated/M21-GAP-03468-keymap-Mask-Editing-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03468", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03468", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03469", + "gapId": "keymap:Mesh Filter Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03469-keymap-Mesh-Filter-Modal-Map-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03469.py -- tests/files/web/generated/M21-GAP-03469-keymap-Mesh-Filter-Modal-Map-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03469", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03469", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03470", + "gapId": "keymap:Mesh:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03470-keymap-Mesh-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03470.py -- tests/files/web/generated/M21-GAP-03470-keymap-Mesh-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03470", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03470", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03471", + "gapId": "keymap:Metaball:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03471-keymap-Metaball-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03471.py -- tests/files/web/generated/M21-GAP-03471-keymap-Metaball-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03471", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03471", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03472", + "gapId": "keymap:NLA Editor:NLA_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03472-keymap-NLA-Editor-NLA_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03472.py -- tests/files/web/generated/M21-GAP-03472-keymap-NLA-Editor-NLA_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03472", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03472", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03473", + "gapId": "keymap:NLA Generic:NLA_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03473-keymap-NLA-Generic-NLA_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03473.py -- tests/files/web/generated/M21-GAP-03473-keymap-NLA-Generic-NLA_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03473", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03473", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03474", + "gapId": "keymap:NLA Tracks:NLA_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03474-keymap-NLA-Tracks-NLA_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03474.py -- tests/files/web/generated/M21-GAP-03474-keymap-NLA-Tracks-NLA_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03474", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03474", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03475", + "gapId": "keymap:Node Editor:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03475-keymap-Node-Editor-NODE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03475.py -- tests/files/web/generated/M21-GAP-03475-keymap-Node-Editor-NODE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03475", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03475", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03476", + "gapId": "keymap:Node Generic:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03476-keymap-Node-Generic-NODE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03476.py -- tests/files/web/generated/M21-GAP-03476-keymap-Node-Generic-NODE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03476", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03476", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03477", + "gapId": "keymap:Node Link Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03477-keymap-Node-Link-Modal-Map-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03477.py -- tests/files/web/generated/M21-GAP-03477-keymap-Node-Link-Modal-Map-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03477", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03477", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03478", + "gapId": "keymap:Node Resize Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03478-keymap-Node-Resize-Modal-Map-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03478.py -- tests/files/web/generated/M21-GAP-03478-keymap-Node-Resize-Modal-Map-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03478", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03478", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03479", + "gapId": "keymap:Node Tool: Add Reroute:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03479-keymap-Node-Tool-Add-Reroute-NODE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03479.py -- tests/files/web/generated/M21-GAP-03479-keymap-Node-Tool-Add-Reroute-NODE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03479", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03479", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03480", + "gapId": "keymap:Node Tool: Links Cut:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03480-keymap-Node-Tool-Links-Cut-NODE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03480.py -- tests/files/web/generated/M21-GAP-03480-keymap-Node-Tool-Links-Cut-NODE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03480", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03480", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03481", + "gapId": "keymap:Node Tool: Mute Links:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03481-keymap-Node-Tool-Mute-Links-NODE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03481.py -- tests/files/web/generated/M21-GAP-03481-keymap-Node-Tool-Mute-Links-NODE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03481", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03481", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03482", + "gapId": "keymap:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03482-keymap-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03482.py -- tests/files/web/generated/M21-GAP-03482-keymap-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03482", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03482", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03483", + "gapId": "keymap:Node Tool: Select Box:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03483-keymap-Node-Tool-Select-Box-NODE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03483.py -- tests/files/web/generated/M21-GAP-03483-keymap-Node-Tool-Select-Box-NODE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03483", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03483", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03484", + "gapId": "keymap:Node Tool: Select Circle (fallback):NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03484-keymap-Node-Tool-Select-Circle-fallback-NODE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03484.py -- tests/files/web/generated/M21-GAP-03484-keymap-Node-Tool-Select-Circle-fallback-NODE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03484", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03484", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03485", + "gapId": "keymap:Node Tool: Select Circle:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03485-keymap-Node-Tool-Select-Circle-NODE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03485.py -- tests/files/web/generated/M21-GAP-03485-keymap-Node-Tool-Select-Circle-NODE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03485", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03485", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03486", + "gapId": "keymap:Node Tool: Select Lasso (fallback):NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03486-keymap-Node-Tool-Select-Lasso-fallback-NODE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03486.py -- tests/files/web/generated/M21-GAP-03486-keymap-Node-Tool-Select-Lasso-fallback-NODE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03486", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03486", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03487", + "gapId": "keymap:Node Tool: Select Lasso:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03487-keymap-Node-Tool-Select-Lasso-NODE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03487.py -- tests/files/web/generated/M21-GAP-03487-keymap-Node-Tool-Select-Lasso-NODE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03487", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03487", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03488", + "gapId": "keymap:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03488-keymap-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03488.py -- tests/files/web/generated/M21-GAP-03488-keymap-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03488", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03488", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03489", + "gapId": "keymap:Node Tool: Tweak:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03489-keymap-Node-Tool-Tweak-NODE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03489.py -- tests/files/web/generated/M21-GAP-03489-keymap-Node-Tool-Tweak-NODE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03489", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03489", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03490", + "gapId": "keymap:Object Mode:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03490-keymap-Object-Mode-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03490.py -- tests/files/web/generated/M21-GAP-03490-keymap-Object-Mode-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03490", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03490", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03491", + "gapId": "keymap:Object Non-modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03491-keymap-Object-Non-modal-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03491.py -- tests/files/web/generated/M21-GAP-03491-keymap-Object-Non-modal-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03491", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03491", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03492", + "gapId": "keymap:Outliner:OUTLINER:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03492-keymap-Outliner-OUTLINER-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03492.py -- tests/files/web/generated/M21-GAP-03492-keymap-Outliner-OUTLINER-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03492", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03492", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03493", + "gapId": "keymap:Paint Curve:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03493-keymap-Paint-Curve-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03493.py -- tests/files/web/generated/M21-GAP-03493-keymap-Paint-Curve-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03493", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03493", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03494", + "gapId": "keymap:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03494-keymap-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03494.py -- tests/files/web/generated/M21-GAP-03494-keymap-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03494", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03494", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03495", + "gapId": "keymap:Paint Stroke Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03495-keymap-Paint-Stroke-Modal-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03495.py -- tests/files/web/generated/M21-GAP-03495-keymap-Paint-Stroke-Modal-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03495", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03495", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03496", + "gapId": "keymap:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03496-keymap-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03496.py -- tests/files/web/generated/M21-GAP-03496-keymap-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03496", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03496", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03497", + "gapId": "keymap:Particle:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03497-keymap-Particle-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03497.py -- tests/files/web/generated/M21-GAP-03497-keymap-Particle-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03497", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03497", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03498", + "gapId": "keymap:Pen Tool Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03498-keymap-Pen-Tool-Modal-Map-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03498.py -- tests/files/web/generated/M21-GAP-03498-keymap-Pen-Tool-Modal-Map-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03498", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03498", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03499", + "gapId": "keymap:Point Cloud:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03499-keymap-Point-Cloud-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03499.py -- tests/files/web/generated/M21-GAP-03499-keymap-Point-Cloud-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03499", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03499", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03500", + "gapId": "keymap:Pose:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03500-keymap-Pose-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03500.py -- tests/files/web/generated/M21-GAP-03500-keymap-Pose-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03500", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03500", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03501", + "gapId": "keymap:Preferences:PREFERENCES:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03501-keymap-Preferences-PREFERENCES-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03501.py -- tests/files/web/generated/M21-GAP-03501-keymap-Preferences-PREFERENCES-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03501", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03501", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03502", + "gapId": "keymap:Preferences_nav:PREFERENCES:UI", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03502-keymap-Preferences_nav-PREFERENCES-UI.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03502.py -- tests/files/web/generated/M21-GAP-03502-keymap-Preferences_nav-PREFERENCES-UI.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03502", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03502", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03503", + "gapId": "keymap:Preview Tool: Cursor:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03503-keymap-Preview-Tool-Cursor-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03503.py -- tests/files/web/generated/M21-GAP-03503-keymap-Preview-Tool-Cursor-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03503", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03503", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03504", + "gapId": "keymap:Preview Tool: Move:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03504-keymap-Preview-Tool-Move-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03504.py -- tests/files/web/generated/M21-GAP-03504-keymap-Preview-Tool-Move-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03504", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03504", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03505", + "gapId": "keymap:Preview Tool: Rotate:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03505-keymap-Preview-Tool-Rotate-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03505.py -- tests/files/web/generated/M21-GAP-03505-keymap-Preview-Tool-Rotate-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03505", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03505", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03506", + "gapId": "keymap:Preview Tool: Sample:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03506-keymap-Preview-Tool-Sample-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03506.py -- tests/files/web/generated/M21-GAP-03506-keymap-Preview-Tool-Sample-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03506", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03506", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03507", + "gapId": "keymap:Preview Tool: Scale:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03507-keymap-Preview-Tool-Scale-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03507.py -- tests/files/web/generated/M21-GAP-03507-keymap-Preview-Tool-Scale-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03507", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03507", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03508", + "gapId": "keymap:Preview Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03508-keymap-Preview-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03508.py -- tests/files/web/generated/M21-GAP-03508-keymap-Preview-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03508", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03508", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03509", + "gapId": "keymap:Preview Tool: Select Box:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03509-keymap-Preview-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03509.py -- tests/files/web/generated/M21-GAP-03509-keymap-Preview-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03509", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03509", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03510", + "gapId": "keymap:Preview Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03510-keymap-Preview-Tool-Select-Circle-fallback-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03510.py -- tests/files/web/generated/M21-GAP-03510-keymap-Preview-Tool-Select-Circle-fallback-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03510", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03510", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03511", + "gapId": "keymap:Preview Tool: Select Circle:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03511-keymap-Preview-Tool-Select-Circle-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03511.py -- tests/files/web/generated/M21-GAP-03511-keymap-Preview-Tool-Select-Circle-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03511", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03511", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03512", + "gapId": "keymap:Preview Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03512-keymap-Preview-Tool-Select-Lasso-fallback-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03512.py -- tests/files/web/generated/M21-GAP-03512-keymap-Preview-Tool-Select-Lasso-fallback-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03512", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03512", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03513", + "gapId": "keymap:Preview Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03513-keymap-Preview-Tool-Select-Lasso-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03513.py -- tests/files/web/generated/M21-GAP-03513-keymap-Preview-Tool-Select-Lasso-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03513", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03513", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03514", + "gapId": "keymap:Preview Tool: Tweak (fallback):SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03514-keymap-Preview-Tool-Tweak-fallback-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03514.py -- tests/files/web/generated/M21-GAP-03514-keymap-Preview-Tool-Tweak-fallback-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03514", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03514", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03515", + "gapId": "keymap:Preview Tool: Tweak:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03515-keymap-Preview-Tool-Tweak-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03515.py -- tests/files/web/generated/M21-GAP-03515-keymap-Preview-Tool-Tweak-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03515", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03515", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03516", + "gapId": "keymap:Preview:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03516-keymap-Preview-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03516.py -- tests/files/web/generated/M21-GAP-03516-keymap-Preview-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03516", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03516", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03517", + "gapId": "keymap:Primitive Tool Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03517-keymap-Primitive-Tool-Modal-Map-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03517.py -- tests/files/web/generated/M21-GAP-03517-keymap-Primitive-Tool-Modal-Map-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03517", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03517", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03518", + "gapId": "keymap:Property Editor:PROPERTIES:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03518-keymap-Property-Editor-PROPERTIES-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03518.py -- tests/files/web/generated/M21-GAP-03518-keymap-Property-Editor-PROPERTIES-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03518", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03518", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03519", + "gapId": "keymap:Region Context Menu:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03519-keymap-Region-Context-Menu-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03519.py -- tests/files/web/generated/M21-GAP-03519-keymap-Region-Context-Menu-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03519", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03519", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03520", + "gapId": "keymap:Screen Editing:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03520-keymap-Screen-Editing-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03520.py -- tests/files/web/generated/M21-GAP-03520-keymap-Screen-Editing-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03520", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03520", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03521", + "gapId": "keymap:Screen:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03521-keymap-Screen-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03521.py -- tests/files/web/generated/M21-GAP-03521-keymap-Screen-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03521", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03521", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03522", + "gapId": "keymap:Sculpt Curves:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03522-keymap-Sculpt-Curves-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03522.py -- tests/files/web/generated/M21-GAP-03522-keymap-Sculpt-Curves-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03522", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03522", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03523", + "gapId": "keymap:Sculpt Expand Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03523-keymap-Sculpt-Expand-Modal-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03523.py -- tests/files/web/generated/M21-GAP-03523-keymap-Sculpt-Expand-Modal-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03523", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03523", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03524", + "gapId": "keymap:Sculpt:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03524-keymap-Sculpt-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03524.py -- tests/files/web/generated/M21-GAP-03524-keymap-Sculpt-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03524", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03524", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03525", + "gapId": "keymap:Sequencer Channels:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03525-keymap-Sequencer-Channels-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03525.py -- tests/files/web/generated/M21-GAP-03525-keymap-Sequencer-Channels-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03525", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03525", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03526", + "gapId": "keymap:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03526-keymap-Sequencer-Tool-Blade-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03526.py -- tests/files/web/generated/M21-GAP-03526-keymap-Sequencer-Tool-Blade-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03526", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03526", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03527", + "gapId": "keymap:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03527-keymap-Sequencer-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03527.py -- tests/files/web/generated/M21-GAP-03527-keymap-Sequencer-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03527", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03527", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03528", + "gapId": "keymap:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03528-keymap-Sequencer-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03528.py -- tests/files/web/generated/M21-GAP-03528-keymap-Sequencer-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03528", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03528", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03529", + "gapId": "keymap:Sequencer Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03529-keymap-Sequencer-Tool-Select-Circle-fallback-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03529.py -- tests/files/web/generated/M21-GAP-03529-keymap-Sequencer-Tool-Select-Circle-fallback-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03529", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03529", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03530", + "gapId": "keymap:Sequencer Tool: Select Circle:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03530-keymap-Sequencer-Tool-Select-Circle-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03530.py -- tests/files/web/generated/M21-GAP-03530-keymap-Sequencer-Tool-Select-Circle-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03530", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03530", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03531", + "gapId": "keymap:Sequencer Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03531-keymap-Sequencer-Tool-Select-Lasso-fallback-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03531.py -- tests/files/web/generated/M21-GAP-03531-keymap-Sequencer-Tool-Select-Lasso-fallback-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03531", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03531", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03532", + "gapId": "keymap:Sequencer Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03532-keymap-Sequencer-Tool-Select-Lasso-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03532.py -- tests/files/web/generated/M21-GAP-03532-keymap-Sequencer-Tool-Select-Lasso-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03532", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03532", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03533", + "gapId": "keymap:Sequencer Tool: Slip:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03533-keymap-Sequencer-Tool-Slip-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03533.py -- tests/files/web/generated/M21-GAP-03533-keymap-Sequencer-Tool-Slip-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03533", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03533", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03534", + "gapId": "keymap:Sequencer:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03534-keymap-Sequencer-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03534.py -- tests/files/web/generated/M21-GAP-03534-keymap-Sequencer-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03534", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03534", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03535", + "gapId": "keymap:Slip Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03535-keymap-Slip-Modal-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03535.py -- tests/files/web/generated/M21-GAP-03535-keymap-Slip-Modal-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03535", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03535", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03536", + "gapId": "keymap:Spreadsheet Generic:SPREADSHEET:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03536-keymap-Spreadsheet-Generic-SPREADSHEET-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03536.py -- tests/files/web/generated/M21-GAP-03536-keymap-Spreadsheet-Generic-SPREADSHEET-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03536", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03536", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03537", + "gapId": "keymap:Standard Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03537-keymap-Standard-Modal-Map-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03537.py -- tests/files/web/generated/M21-GAP-03537-keymap-Standard-Modal-Map-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03537", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03537", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03538", + "gapId": "keymap:Text Generic:TEXT_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03538-keymap-Text-Generic-TEXT_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03538.py -- tests/files/web/generated/M21-GAP-03538-keymap-Text-Generic-TEXT_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03538", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03538", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03539", + "gapId": "keymap:Text:TEXT_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03539-keymap-Text-TEXT_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03539.py -- tests/files/web/generated/M21-GAP-03539-keymap-Text-TEXT_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03539", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03539", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03540", + "gapId": "keymap:Time Scrub:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03540-keymap-Time-Scrub-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03540.py -- tests/files/web/generated/M21-GAP-03540-keymap-Time-Scrub-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03540", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03540", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03541", + "gapId": "keymap:Toolbar Popup:EMPTY:TEMPORARY", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03541-keymap-Toolbar-Popup-EMPTY-TEMPORARY.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03541.py -- tests/files/web/generated/M21-GAP-03541-keymap-Toolbar-Popup-EMPTY-TEMPORARY.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03541", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03541", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03542", + "gapId": "keymap:Transform Axis Target Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03542-keymap-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03542.py -- tests/files/web/generated/M21-GAP-03542-keymap-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03542", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03542", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03543", + "gapId": "keymap:Transform Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03543-keymap-Transform-Modal-Map-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03543.py -- tests/files/web/generated/M21-GAP-03543-keymap-Transform-Modal-Map-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03543", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03543", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03544", + "gapId": "keymap:UV Editor:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03544-keymap-UV-Editor-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03544.py -- tests/files/web/generated/M21-GAP-03544-keymap-UV-Editor-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03544", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03544", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03545", + "gapId": "keymap:User Interface:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03545-keymap-User-Interface-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03545.py -- tests/files/web/generated/M21-GAP-03545-keymap-User-Interface-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03545", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03545", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03546", + "gapId": "keymap:Vertex Paint:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03546-keymap-Vertex-Paint-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03546.py -- tests/files/web/generated/M21-GAP-03546-keymap-Vertex-Paint-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03546", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03546", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03547", + "gapId": "keymap:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03547-keymap-Video-Sequence-Editor-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03547.py -- tests/files/web/generated/M21-GAP-03547-keymap-Video-Sequence-Editor-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03547", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03547", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03548", + "gapId": "keymap:View2D Buttons List:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03548-keymap-View2D-Buttons-List-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03548.py -- tests/files/web/generated/M21-GAP-03548-keymap-View2D-Buttons-List-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03548", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03548", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03549", + "gapId": "keymap:View2D:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03549-keymap-View2D-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03549.py -- tests/files/web/generated/M21-GAP-03549-keymap-View2D-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03549", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03549", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03550", + "gapId": "keymap:View3D Dolly Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03550-keymap-View3D-Dolly-Modal-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03550.py -- tests/files/web/generated/M21-GAP-03550-keymap-View3D-Dolly-Modal-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03550", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03550", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03551", + "gapId": "keymap:View3D Fly Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03551-keymap-View3D-Fly-Modal-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03551.py -- tests/files/web/generated/M21-GAP-03551-keymap-View3D-Fly-Modal-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03551", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03551", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03552", + "gapId": "keymap:View3D Gesture Circle:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03552-keymap-View3D-Gesture-Circle-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03552.py -- tests/files/web/generated/M21-GAP-03552-keymap-View3D-Gesture-Circle-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03552", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03552", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03553", + "gapId": "keymap:View3D Move Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03553-keymap-View3D-Move-Modal-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03553.py -- tests/files/web/generated/M21-GAP-03553-keymap-View3D-Move-Modal-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03553", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03553", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03554", + "gapId": "keymap:View3D Placement Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03554-keymap-View3D-Placement-Modal-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03554.py -- tests/files/web/generated/M21-GAP-03554-keymap-View3D-Placement-Modal-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03554", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03554", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03555", + "gapId": "keymap:View3D Rotate Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03555-keymap-View3D-Rotate-Modal-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03555.py -- tests/files/web/generated/M21-GAP-03555-keymap-View3D-Rotate-Modal-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03555", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03555", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03556", + "gapId": "keymap:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03556-keymap-View3D-VR-Location-Scouting-Capture-Review-Modal-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03556.py -- tests/files/web/generated/M21-GAP-03556-keymap-View3D-VR-Location-Scouting-Capture-Review-Modal-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03556", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03556", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03557", + "gapId": "keymap:View3D Walk Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03557-keymap-View3D-Walk-Modal-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03557.py -- tests/files/web/generated/M21-GAP-03557-keymap-View3D-Walk-Modal-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03557", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03557", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03558", + "gapId": "keymap:View3D Zoom Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03558-keymap-View3D-Zoom-Modal-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03558.py -- tests/files/web/generated/M21-GAP-03558-keymap-View3D-Zoom-Modal-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03558", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03558", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03559", + "gapId": "keymap:Weight Paint:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03559-keymap-Weight-Paint-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03559.py -- tests/files/web/generated/M21-GAP-03559-keymap-Weight-Paint-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03559", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03559", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03560", + "gapId": "keymap:Window:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03560-keymap-Window-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03560.py -- tests/files/web/generated/M21-GAP-03560-keymap-Window-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03560", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03560", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03561", + "gapId": "region:ASSET_SHELF", + "ownerFamily": "REGION", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03561-region-ASSET_SHELF.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03561.py -- tests/files/web/generated/M21-GAP-03561-region-ASSET_SHELF.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03561", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03561", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03562", + "gapId": "region:ASSET_SHELF_HEADER", + "ownerFamily": "REGION", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03562-region-ASSET_SHELF_HEADER.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03562.py -- tests/files/web/generated/M21-GAP-03562-region-ASSET_SHELF_HEADER.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03562", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03562", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03563", + "gapId": "region:CHANNELS", + "ownerFamily": "REGION", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03563-region-CHANNELS.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03563.py -- tests/files/web/generated/M21-GAP-03563-region-CHANNELS.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03563", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03563", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03564", + "gapId": "region:EXECUTE", + "ownerFamily": "REGION", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03564-region-EXECUTE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03564.py -- tests/files/web/generated/M21-GAP-03564-region-EXECUTE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03564", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03564", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03565", + "gapId": "region:FOOTER", + "ownerFamily": "REGION", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03565-region-FOOTER.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03565.py -- tests/files/web/generated/M21-GAP-03565-region-FOOTER.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03565", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03565", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03566", + "gapId": "region:HEADER", + "ownerFamily": "REGION", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03566-region-HEADER.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03566.py -- tests/files/web/generated/M21-GAP-03566-region-HEADER.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03566", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03566", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03567", + "gapId": "region:HUD", + "ownerFamily": "REGION", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03567-region-HUD.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03567.py -- tests/files/web/generated/M21-GAP-03567-region-HUD.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03567", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03567", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03568", + "gapId": "region:NAVIGATION_BAR", + "ownerFamily": "REGION", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03568-region-NAVIGATION_BAR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03568.py -- tests/files/web/generated/M21-GAP-03568-region-NAVIGATION_BAR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03568", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03568", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03569", + "gapId": "region:PREVIEW", + "ownerFamily": "REGION", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03569-region-PREVIEW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03569.py -- tests/files/web/generated/M21-GAP-03569-region-PREVIEW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03569", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03569", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03570", + "gapId": "region:SCRUBBING", + "ownerFamily": "REGION", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03570-region-SCRUBBING.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03570.py -- tests/files/web/generated/M21-GAP-03570-region-SCRUBBING.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03570", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03570", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03571", + "gapId": "region:TEMPORARY", + "ownerFamily": "REGION", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03571-region-TEMPORARY.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03571.py -- tests/files/web/generated/M21-GAP-03571-region-TEMPORARY.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03571", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03571", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03572", + "gapId": "region:TOOLS", + "ownerFamily": "REGION", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03572-region-TOOLS.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03572.py -- tests/files/web/generated/M21-GAP-03572-region-TOOLS.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03572", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03572", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03573", + "gapId": "region:TOOL_HEADER", + "ownerFamily": "REGION", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03573-region-TOOL_HEADER.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03573.py -- tests/files/web/generated/M21-GAP-03573-region-TOOL_HEADER.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03573", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03573", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03574", + "gapId": "region:TOOL_PROPS", + "ownerFamily": "REGION", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03574-region-TOOL_PROPS.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03574.py -- tests/files/web/generated/M21-GAP-03574-region-TOOL_PROPS.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03574", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03574", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03575", + "gapId": "region:UI", + "ownerFamily": "REGION", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03575-region-UI.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03575.py -- tests/files/web/generated/M21-GAP-03575-region-UI.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03575", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03575", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03576", + "gapId": "region:WINDOW", + "ownerFamily": "REGION", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03576-region-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03576.py -- tests/files/web/generated/M21-GAP-03576-region-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03576", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03576", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03577", + "gapId": "region:XR", + "ownerFamily": "REGION", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03577-region-XR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03577.py -- tests/files/web/generated/M21-GAP-03577-region-XR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03577", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03577", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03578", + "gapId": "space-class:SpaceClipEditor", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03578-space-class-SpaceClipEditor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03578.py -- tests/files/web/generated/M21-GAP-03578-space-class-SpaceClipEditor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03578", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03578", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03579", + "gapId": "space-class:SpaceConsole", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03579-space-class-SpaceConsole.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03579.py -- tests/files/web/generated/M21-GAP-03579-space-class-SpaceConsole.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03579", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03579", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03580", + "gapId": "space-class:SpaceDopeSheetEditor", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03580-space-class-SpaceDopeSheetEditor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03580.py -- tests/files/web/generated/M21-GAP-03580-space-class-SpaceDopeSheetEditor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03580", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03580", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03581", + "gapId": "space-class:SpaceFileBrowser", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03581-space-class-SpaceFileBrowser.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03581.py -- tests/files/web/generated/M21-GAP-03581-space-class-SpaceFileBrowser.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03581", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03581", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03582", + "gapId": "space-class:SpaceGraphEditor", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03582-space-class-SpaceGraphEditor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03582.py -- tests/files/web/generated/M21-GAP-03582-space-class-SpaceGraphEditor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03582", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03582", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03583", + "gapId": "space-class:SpaceImageEditor", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03583-space-class-SpaceImageEditor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03583.py -- tests/files/web/generated/M21-GAP-03583-space-class-SpaceImageEditor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03583", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03583", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03584", + "gapId": "space-class:SpaceInfo", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03584-space-class-SpaceInfo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03584.py -- tests/files/web/generated/M21-GAP-03584-space-class-SpaceInfo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03584", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03584", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03585", + "gapId": "space-class:SpaceNLA", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03585-space-class-SpaceNLA.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03585.py -- tests/files/web/generated/M21-GAP-03585-space-class-SpaceNLA.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03585", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03585", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03586", + "gapId": "space-class:SpaceNodeEditor", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03586-space-class-SpaceNodeEditor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03586.py -- tests/files/web/generated/M21-GAP-03586-space-class-SpaceNodeEditor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03586", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03586", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03587", + "gapId": "space-class:SpaceOutliner", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03587-space-class-SpaceOutliner.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03587.py -- tests/files/web/generated/M21-GAP-03587-space-class-SpaceOutliner.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03587", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03587", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03588", + "gapId": "space-class:SpacePreferences", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03588-space-class-SpacePreferences.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03588.py -- tests/files/web/generated/M21-GAP-03588-space-class-SpacePreferences.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03588", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03588", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03589", + "gapId": "space-class:SpaceProperties", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03589-space-class-SpaceProperties.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03589.py -- tests/files/web/generated/M21-GAP-03589-space-class-SpaceProperties.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03589", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03589", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03590", + "gapId": "space-class:SpaceSequenceEditor", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03590-space-class-SpaceSequenceEditor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03590.py -- tests/files/web/generated/M21-GAP-03590-space-class-SpaceSequenceEditor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03590", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03590", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03591", + "gapId": "space-class:SpaceSpreadsheet", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03591-space-class-SpaceSpreadsheet.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03591.py -- tests/files/web/generated/M21-GAP-03591-space-class-SpaceSpreadsheet.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03591", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03591", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03592", + "gapId": "space-class:SpaceTextEditor", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03592-space-class-SpaceTextEditor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03592.py -- tests/files/web/generated/M21-GAP-03592-space-class-SpaceTextEditor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03592", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03592", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03593", + "gapId": "space-class:SpaceView3D", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03593-space-class-SpaceView3D.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03593.py -- tests/files/web/generated/M21-GAP-03593-space-class-SpaceView3D.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03593", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03593", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03594", + "gapId": "space:CLIP_EDITOR", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03594-space-CLIP_EDITOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03594.py -- tests/files/web/generated/M21-GAP-03594-space-CLIP_EDITOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03594", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03594", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03595", + "gapId": "space:CONSOLE", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03595-space-CONSOLE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03595.py -- tests/files/web/generated/M21-GAP-03595-space-CONSOLE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03595", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03595", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03596", + "gapId": "space:DOPESHEET_EDITOR", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03596-space-DOPESHEET_EDITOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03596.py -- tests/files/web/generated/M21-GAP-03596-space-DOPESHEET_EDITOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03596", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03596", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03597", + "gapId": "space:EMPTY", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03597-space-EMPTY.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03597.py -- tests/files/web/generated/M21-GAP-03597-space-EMPTY.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03597", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03597", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03598", + "gapId": "space:FILE_BROWSER", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03598-space-FILE_BROWSER.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03598.py -- tests/files/web/generated/M21-GAP-03598-space-FILE_BROWSER.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03598", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03598", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03599", + "gapId": "space:GRAPH_EDITOR", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03599-space-GRAPH_EDITOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03599.py -- tests/files/web/generated/M21-GAP-03599-space-GRAPH_EDITOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03599", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03599", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03600", + "gapId": "space:IMAGE_EDITOR", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03600-space-IMAGE_EDITOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03600.py -- tests/files/web/generated/M21-GAP-03600-space-IMAGE_EDITOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03600", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03600", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03601", + "gapId": "space:INFO", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03601-space-INFO.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03601.py -- tests/files/web/generated/M21-GAP-03601-space-INFO.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03601", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03601", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03602", + "gapId": "space:NLA_EDITOR", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03602-space-NLA_EDITOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03602.py -- tests/files/web/generated/M21-GAP-03602-space-NLA_EDITOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03602", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03602", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03603", + "gapId": "space:NODE_EDITOR", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03603-space-NODE_EDITOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03603.py -- tests/files/web/generated/M21-GAP-03603-space-NODE_EDITOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03603", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03603", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03604", + "gapId": "space:OUTLINER", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03604-space-OUTLINER.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03604.py -- tests/files/web/generated/M21-GAP-03604-space-OUTLINER.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03604", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03604", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03605", + "gapId": "space:PREFERENCES", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03605-space-PREFERENCES.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03605.py -- tests/files/web/generated/M21-GAP-03605-space-PREFERENCES.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03605", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03605", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03606", + "gapId": "space:PROPERTIES", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03606-space-PROPERTIES.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03606.py -- tests/files/web/generated/M21-GAP-03606-space-PROPERTIES.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03606", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03606", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03607", + "gapId": "space:SEQUENCE_EDITOR", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03607-space-SEQUENCE_EDITOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03607.py -- tests/files/web/generated/M21-GAP-03607-space-SEQUENCE_EDITOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03607", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03607", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03608", + "gapId": "space:SPREADSHEET", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03608-space-SPREADSHEET.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03608.py -- tests/files/web/generated/M21-GAP-03608-space-SPREADSHEET.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03608", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03608", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03609", + "gapId": "space:STATUSBAR", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03609-space-STATUSBAR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03609.py -- tests/files/web/generated/M21-GAP-03609-space-STATUSBAR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03609", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03609", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03610", + "gapId": "space:TEXT_EDITOR", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03610-space-TEXT_EDITOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03610.py -- tests/files/web/generated/M21-GAP-03610-space-TEXT_EDITOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03610", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03610", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03611", + "gapId": "space:TOPBAR", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03611-space-TOPBAR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03611.py -- tests/files/web/generated/M21-GAP-03611-space-TOPBAR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03611", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03611", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03612", + "gapId": "space:VIEW_3D", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03612-space-VIEW_3D.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03612.py -- tests/files/web/generated/M21-GAP-03612-space-VIEW_3D.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03612", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03612", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03613", + "gapId": "workspace:EDIT", + "ownerFamily": "WORKSPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03613-workspace-EDIT.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03613.py -- tests/files/web/generated/M21-GAP-03613-workspace-EDIT.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03613", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03613", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03614", + "gapId": "workspace:EDIT_GPENCIL", + "ownerFamily": "WORKSPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03614-workspace-EDIT_GPENCIL.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03614.py -- tests/files/web/generated/M21-GAP-03614-workspace-EDIT_GPENCIL.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03614", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03614", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03615", + "gapId": "workspace:OBJECT", + "ownerFamily": "WORKSPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03615-workspace-OBJECT.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03615.py -- tests/files/web/generated/M21-GAP-03615-workspace-OBJECT.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03615", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03615", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03616", + "gapId": "workspace:PAINT_GREASE_PENCIL", + "ownerFamily": "WORKSPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03616-workspace-PAINT_GREASE_PENCIL.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03616.py -- tests/files/web/generated/M21-GAP-03616-workspace-PAINT_GREASE_PENCIL.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03616", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03616", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03617", + "gapId": "workspace:PARTICLE_EDIT", + "ownerFamily": "WORKSPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03617-workspace-PARTICLE_EDIT.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03617.py -- tests/files/web/generated/M21-GAP-03617-workspace-PARTICLE_EDIT.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03617", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03617", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03618", + "gapId": "workspace:POSE", + "ownerFamily": "WORKSPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03618-workspace-POSE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03618.py -- tests/files/web/generated/M21-GAP-03618-workspace-POSE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03618", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03618", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03619", + "gapId": "workspace:SCULPT", + "ownerFamily": "WORKSPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03619-workspace-SCULPT.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03619.py -- tests/files/web/generated/M21-GAP-03619-workspace-SCULPT.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03619", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03619", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03620", + "gapId": "workspace:SCULPT_GREASE_PENCIL", + "ownerFamily": "WORKSPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03620-workspace-SCULPT_GREASE_PENCIL.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03620.py -- tests/files/web/generated/M21-GAP-03620-workspace-SCULPT_GREASE_PENCIL.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03620", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03620", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03621", + "gapId": "workspace:TEXTURE_PAINT", + "ownerFamily": "WORKSPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03621-workspace-TEXTURE_PAINT.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03621.py -- tests/files/web/generated/M21-GAP-03621-workspace-TEXTURE_PAINT.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03621", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03621", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03622", + "gapId": "workspace:VERTEX_GREASE_PENCIL", + "ownerFamily": "WORKSPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03622-workspace-VERTEX_GREASE_PENCIL.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03622.py -- tests/files/web/generated/M21-GAP-03622-workspace-VERTEX_GREASE_PENCIL.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03622", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03622", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03623", + "gapId": "workspace:VERTEX_PAINT", + "ownerFamily": "WORKSPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03623-workspace-VERTEX_PAINT.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03623.py -- tests/files/web/generated/M21-GAP-03623-workspace-VERTEX_PAINT.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03623", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03623", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03624", + "gapId": "workspace:WEIGHT_GREASE_PENCIL", + "ownerFamily": "WORKSPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03624-workspace-WEIGHT_GREASE_PENCIL.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03624.py -- tests/files/web/generated/M21-GAP-03624-workspace-WEIGHT_GREASE_PENCIL.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03624", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03624", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03625", + "gapId": "workspace:WEIGHT_PAINT", + "ownerFamily": "WORKSPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03625-workspace-WEIGHT_PAINT.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03625.py -- tests/files/web/generated/M21-GAP-03625-workspace-WEIGHT_PAINT.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03625", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03625", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00001", + "gapId": "rna:Depsgraph:Depsgraph", + "ownerFamily": "Depsgraph", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00001-rna-Depsgraph-Depsgraph.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00001.py -- tests/files/web/generated/M22-GAP-00001-rna-Depsgraph-Depsgraph.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00001", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00001", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00002", + "gapId": "rna:Depsgraph:DepsgraphObjectInstance", + "ownerFamily": "Depsgraph", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00002-rna-Depsgraph-DepsgraphObjectInstance.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00002.py -- tests/files/web/generated/M22-GAP-00002-rna-Depsgraph-DepsgraphObjectInstance.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00002", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00002", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00003", + "gapId": "rna:Depsgraph:DepsgraphUpdate", + "ownerFamily": "Depsgraph", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00003-rna-Depsgraph-DepsgraphUpdate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00003.py -- tests/files/web/generated/M22-GAP-00003-rna-Depsgraph-DepsgraphUpdate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00003", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00003", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00004", + "gapId": "rna:Scene:Camera", + "ownerFamily": "Scene", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00004-rna-Scene-Camera.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00004.py -- tests/files/web/generated/M22-GAP-00004-rna-Scene-Camera.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00004", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00004", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00005", + "gapId": "rna:Scene:Collection", + "ownerFamily": "Scene", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00005-rna-Scene-Collection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00005.py -- tests/files/web/generated/M22-GAP-00005-rna-Scene-Collection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00005", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00005", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00006", + "gapId": "rna:Scene:Constraint", + "ownerFamily": "Scene", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00006-rna-Scene-Constraint.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00006.py -- tests/files/web/generated/M22-GAP-00006-rna-Scene-Constraint.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00006", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00006", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00007", + "gapId": "rna:Scene:LayerCollection", + "ownerFamily": "Scene", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00007-rna-Scene-LayerCollection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00007.py -- tests/files/web/generated/M22-GAP-00007-rna-Scene-LayerCollection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00007", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00007", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00008", + "gapId": "rna:Scene:Light", + "ownerFamily": "Scene", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00008-rna-Scene-Light.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00008.py -- tests/files/web/generated/M22-GAP-00008-rna-Scene-Light.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00008", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00008", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00009", + "gapId": "rna:Scene:Material", + "ownerFamily": "Scene", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00009-rna-Scene-Material.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00009.py -- tests/files/web/generated/M22-GAP-00009-rna-Scene-Material.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00009", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00009", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00010", + "gapId": "rna:Scene:Modifier", + "ownerFamily": "Scene", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00010-rna-Scene-Modifier.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00010.py -- tests/files/web/generated/M22-GAP-00010-rna-Scene-Modifier.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00010", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00010", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00011", + "gapId": "rna:Scene:NodeTree", + "ownerFamily": "Scene", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00011-rna-Scene-NodeTree.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00011.py -- tests/files/web/generated/M22-GAP-00011-rna-Scene-NodeTree.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00011", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00011", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00012", + "gapId": "rna:Scene:Object", + "ownerFamily": "Scene", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00012-rna-Scene-Object.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00012.py -- tests/files/web/generated/M22-GAP-00012-rna-Scene-Object.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00012", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00012", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00013", + "gapId": "rna:Scene:RenderSettings", + "ownerFamily": "Scene", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00013-rna-Scene-RenderSettings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00013.py -- tests/files/web/generated/M22-GAP-00013-rna-Scene-RenderSettings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00013", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00013", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00014", + "gapId": "rna:Scene:Scene", + "ownerFamily": "Scene", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00014-rna-Scene-Scene.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00014.py -- tests/files/web/generated/M22-GAP-00014-rna-Scene-Scene.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00014", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00014", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00015", + "gapId": "rna:Scene:Screen", + "ownerFamily": "Scene", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00015-rna-Scene-Screen.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00015.py -- tests/files/web/generated/M22-GAP-00015-rna-Scene-Screen.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00015", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00015", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00016", + "gapId": "rna:Scene:ViewLayer", + "ownerFamily": "Scene", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00016-rna-Scene-ViewLayer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00016.py -- tests/files/web/generated/M22-GAP-00016-rna-Scene-ViewLayer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00016", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00016", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00017", + "gapId": "rna:Scene:Window", + "ownerFamily": "Scene", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00017-rna-Scene-Window.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00017.py -- tests/files/web/generated/M22-GAP-00017-rna-Scene-Window.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00017", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00017", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00018", + "gapId": "rna:Scene:WindowManager", + "ownerFamily": "Scene", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00018-rna-Scene-WindowManager.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00018.py -- tests/files/web/generated/M22-GAP-00018-rna-Scene-WindowManager.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00018", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00018", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00019", + "gapId": "rna:Scene:World", + "ownerFamily": "Scene", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00019-rna-Scene-World.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00019.py -- tests/files/web/generated/M22-GAP-00019-rna-Scene-World.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00019", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00019", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + } + ], + "firstTask": "M16-GAP-00274", + "closureGate": "M15-03E", + "nextTask": "M15-03B" +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00001/task-context.json b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00001/task-context.json new file mode 100644 index 00000000..bcc06350 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00001/task-context.json @@ -0,0 +1,105 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00001", + "parentTask": "M15-03E", + "status": "in_progress", + "goal": "完成 datablock:Action 的最小可观察切片", + "scope": { + "gap": "datablock:Action", + "ownerFamily": "RNA_DATABLOCK", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00001.py -- tests/files/web/generated/M16-GAP-00001-datablock-Action.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00001", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00001" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 0, + "contextRemainingTokens": 0 + }, + "source": { + "bytes": 4380, + "tokens": 0 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00001-datablock-Action.blend", + "bytes": null, + "reason": "EVIDENCE_BYTE_BUDGET" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00002", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00001.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M15-03E/manifest.json", + "parentStatus": "docs/status/M15-03E.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00001.md", + "tests/golden/M15-03E/manifest.json", + "docs/status/M15-03E.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [], + "forbiddenByDefault": [] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M15-03E", + "parentTask": "M15-03D", + "status": "BLOCKED", + "nextTask": "M16-GAP-00001", + "artifactCount": 5 + }, + "statusSummary": [ + "# M15-03E Status", + "status: blocked", + "task: owner family zero-gap closure gate", + "updated: 2026-08-19 America/New_York", + "The fail-closed closure gate reports `BLOCKED`: 20 owner families still have 6,890 remaining tasks.", + "It preserves the single active pointer `M16-GAP-00011` and does not infer completion from release or", + "inventory evidence. `npm --prefix web run test:blender-zero-gap-gate` passed the blocked-state contract.", + "Report SHA-256: `381ea77d9b884b1bdab58bb60df001a26287db80dd9380edb6ae4d64a0a3d969`." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 8192, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 19, + "taskTokens": 210 + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00002/task-context.json b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00002/task-context.json new file mode 100644 index 00000000..66ffb744 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00002/task-context.json @@ -0,0 +1,115 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00002", + "parentTask": "M16-GAP-00001", + "status": "in_progress", + "goal": "Armature data-block LOCAL_EXACT slice", + "scope": { + "gap": "datablock:Armature", + "ownerFamily": "RNA_DATABLOCK", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00002.py -- tests/files/web/generated/M16-GAP-00002-datablock-Armature.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00002", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00002" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 4235, + "contextRemainingTokens": 1057 + }, + "source": { + "bytes": 5669, + "tokens": 1419 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00002-datablock-Armature.blend", + "bytes": 87320, + "reason": "EVIDENCE_BYTE_BUDGET" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00003", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00002.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00001/manifest.json", + "parentStatus": "docs/status/M16-GAP-00001.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00002.md", + "tests/golden/M16-GAP-00001/manifest.json", + "docs/status/M16-GAP-00001.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00001", + "parentTask": "M15-03E", + "status": "done", + "nextTask": "M16-GAP-00002", + "artifactCount": 8 + }, + "statusSummary": [ + "# M16-GAP-00001 Status", + "status: done", + "task: Action data-block LOCAL_EXACT slice", + "updated: 2026-08-19 America/New_York", + "enablingTask: true", + "parityStateChange: true", + "The generated Action fixture was read by Blender 5.2 desktop and the full-Main WASM. Both observed", + "`action:AnimatedObjectAction:object:AnimatedObject` with three location channels and two keyframes per" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 892, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 19, + "taskTokens": 223 + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00003/task-context.json b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00003/task-context.json new file mode 100644 index 00000000..71af71c4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00003/task-context.json @@ -0,0 +1,120 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00003", + "parentTask": "M16-GAP-00002", + "status": "in_progress", + "goal": "Brush data-block LOCAL_EXACT slice", + "scope": { + "gap": "datablock:Brush", + "ownerFamily": "RNA_DATABLOCK", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00003.py -- tests/files/web/generated/M16-GAP-00003-datablock-Brush.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00003", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00003" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 4661, + "contextRemainingTokens": 1164 + }, + "source": { + "bytes": 5243, + "tokens": 1312 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00003-datablock-Brush.blend", + "bytes": 86159, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 824532, + "reason": "EVIDENCE_BYTE_BUDGET" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00004", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00003.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00002/manifest.json", + "parentStatus": "docs/status/M16-GAP-00002.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00003.md", + "tests/golden/M16-GAP-00002/manifest.json", + "docs/status/M16-GAP-00002.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00002", + "parentTask": "M16-GAP-00001", + "status": "done", + "nextTask": "M16-GAP-00003", + "artifactCount": 8 + }, + "statusSummary": [ + "# M16-GAP-00002 Status", + "status: done", + "task: Armature data-block LOCAL_EXACT slice", + "updated: 2026-08-19 America/New_York", + "enablingTask: true", + "parityStateChange: true", + "The generated Armature fixture was read by Blender 5.2 desktop and full-Main WASM. Both observed", + "`armature:RiggedArmature` with Root and Tip bones, Tip parented to Root, and mesh skin-weight linkage." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 448, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 12, + "taskTokens": 112 + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00004/task-context.json b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00004/task-context.json new file mode 100644 index 00000000..2850e3fd --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00004/task-context.json @@ -0,0 +1,120 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00004", + "parentTask": "M16-GAP-00003", + "status": "in_progress", + "goal": "Camera data-block LOCAL_EXACT slice", + "scope": { + "gap": "datablock:Camera", + "ownerFamily": "RNA_DATABLOCK", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00004.py -- tests/files/web/generated/M16-GAP-00004-datablock-Camera.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00004", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00004" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 3994, + "contextRemainingTokens": 997 + }, + "source": { + "bytes": 5910, + "tokens": 1479 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00004-datablock-Camera.blend", + "bytes": 86379, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 824532, + "reason": "EVIDENCE_BYTE_BUDGET" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00005", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00004.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00003/manifest.json", + "parentStatus": "docs/status/M16-GAP-00003.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00004.md", + "tests/golden/M16-GAP-00003/manifest.json", + "docs/status/M16-GAP-00003.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00003", + "parentTask": "M16-GAP-00002", + "status": "done", + "nextTask": "M16-GAP-00004", + "artifactCount": 12 + }, + "statusSummary": [ + "# M16-GAP-00003 Status", + "status: done", + "task: Brush data-block LOCAL_EXACT slice", + "updated: 2026-08-19 America/New_York", + "enablingTask: true", + "parityStateChange: true", + "Added bounded `BrushIR` fields to the native Main reader and optional SceneIR parser field. A real", + "Blender 5.2 Brush fixture reports `WebGapBrush` size 42, alpha 0.65, hardness 0.8, spacing 17 and" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 450, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 12, + "taskTokens": 113 + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00005/task-context.json b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00005/task-context.json new file mode 100644 index 00000000..807e9556 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00005/task-context.json @@ -0,0 +1,119 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00005", + "parentTask": "M16-GAP-00004", + "status": "in_progress", + "goal": "Collection data-block LOCAL_EXACT slice", + "scope": { + "gap": "datablock:Collection", + "ownerFamily": "RNA_DATABLOCK", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00005.py -- tests/files/web/generated/M16-GAP-00005-datablock-Collection.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00005", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00005" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 4893, + "contextRemainingTokens": 1222 + }, + "source": { + "bytes": 5011, + "tokens": 1254 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00005-datablock-Collection.blend", + "bytes": 86454, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 824532, + "reason": "EVIDENCE_BYTE_BUDGET" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00006", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00005.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00004/manifest.json", + "parentStatus": "docs/status/M16-GAP-00004.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00005.md", + "tests/golden/M16-GAP-00004/manifest.json", + "docs/status/M16-GAP-00004.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00004", + "parentTask": "M16-GAP-00003", + "status": "done", + "nextTask": "M16-GAP-00005", + "artifactCount": 9 + }, + "statusSummary": [ + "# M16-GAP-00004 Status", + "status: done", + "task: Camera data-block LOCAL_EXACT slice", + "updated: 2026-08-19 America/New_York", + "Blender desktop and full-Main WASM read the same `camera:WebGapCamera` fixture with perspective", + "projection, 52 mm lens, 0.1 near plane and 2500 far plane. Save/reopen was exact on both paths.", + "Next task: `M16-GAP-00005` (Collection data-block)." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 308, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 10, + "taskTokens": 77 + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00006/task-context.json b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00006/task-context.json new file mode 100644 index 00000000..37519d2b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00006/task-context.json @@ -0,0 +1,118 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00006", + "parentTask": "M16-GAP-00005", + "status": "in_progress", + "goal": "Curve data-block LOCAL_EXACT slice", + "scope": { + "gap": "datablock:Curve", + "ownerFamily": "RNA_DATABLOCK", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00006.py -- tests/files/web/generated/M16-GAP-00006-datablock-Curve.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00006", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00006" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 5018, + "contextRemainingTokens": 1253 + }, + "source": { + "bytes": 4886, + "tokens": 1223 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00006-datablock-Curve.blend", + "bytes": 86153, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 824532, + "reason": "EVIDENCE_BYTE_BUDGET" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00007", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00006.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00005/manifest.json", + "parentStatus": "docs/status/M16-GAP-00005.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00006.md", + "tests/golden/M16-GAP-00005/manifest.json", + "docs/status/M16-GAP-00005.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00005", + "parentTask": "M16-GAP-00004", + "status": "done", + "nextTask": "M16-GAP-00006", + "artifactCount": 8 + }, + "statusSummary": [ + "# M16-GAP-00005 Status", + "status: done", + "task: Collection data-block LOCAL_EXACT slice", + "updated: 2026-08-19 America/New_York", + "Desktop and WASM read nested `WebGapCollection` -> `WebGapChild` hierarchy with the collection object", + "link intact. Save/reopen matched exactly. Next task: `M16-GAP-00006` (Curve data-block)." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 373, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 11, + "taskTokens": 94 + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00007/task-context.json b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00007/task-context.json new file mode 100644 index 00000000..33bcb009 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00007/task-context.json @@ -0,0 +1,119 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00007", + "parentTask": "M16-GAP-00006", + "status": "in_progress", + "goal": "Curves data-block LOCAL_EXACT slice", + "scope": { + "gap": "datablock:Curves", + "ownerFamily": "RNA_DATABLOCK", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00007.py -- tests/files/web/generated/M16-GAP-00007-datablock-Curves.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00007", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00007" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 4840, + "contextRemainingTokens": 1209 + }, + "source": { + "bytes": 5064, + "tokens": 1267 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00007-datablock-Curves.blend", + "bytes": 86489, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 824532, + "reason": "EVIDENCE_BYTE_BUDGET" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00008", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00007.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00006/manifest.json", + "parentStatus": "docs/status/M16-GAP-00006.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00007.md", + "tests/golden/M16-GAP-00006/manifest.json", + "docs/status/M16-GAP-00006.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00006", + "parentTask": "M16-GAP-00005", + "status": "done", + "nextTask": "M16-GAP-00007", + "artifactCount": 9 + }, + "statusSummary": [ + "# M16-GAP-00006 Status", + "status: done", + "task: Curve data-block LOCAL_EXACT slice", + "updated: 2026-08-19 America/New_York", + "Desktop and full-Main WASM read the same Bezier Curve fixture: one spline, three points, available", + "geometry and exact spline offsets. Save/reopen matched the complete non-mesh data record.", + "Next task: `M16-GAP-00007` (Curves data-block)." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 375, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 11, + "taskTokens": 94 + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00008/task-context.json b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00008/task-context.json new file mode 100644 index 00000000..c7b3563b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00008/task-context.json @@ -0,0 +1,119 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00008", + "parentTask": "M16-GAP-00007", + "status": "in_progress", + "goal": "FreestyleLineStyle data-block LOCAL_EXACT slice", + "scope": { + "gap": "datablock:FreestyleLineStyle", + "ownerFamily": "RNA_DATABLOCK", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00008.py -- tests/files/web/generated/M16-GAP-00008-datablock-FreestyleLineStyle.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00008", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00008" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 4883, + "contextRemainingTokens": 1219 + }, + "source": { + "bytes": 5021, + "tokens": 1257 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00008-datablock-FreestyleLineStyle.blend", + "bytes": 85885, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 824532, + "reason": "EVIDENCE_BYTE_BUDGET" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00009", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00008.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00007/manifest.json", + "parentStatus": "docs/status/M16-GAP-00007.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00008.md", + "tests/golden/M16-GAP-00007/manifest.json", + "docs/status/M16-GAP-00007.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00007", + "parentTask": "M16-GAP-00006", + "status": "done", + "nextTask": "M16-GAP-00008", + "artifactCount": 9 + }, + "statusSummary": [ + "# M16-GAP-00007 Status", + "status: done", + "task: Curves data-block LOCAL_EXACT slice", + "updated: 2026-08-19 America/New_York", + "Desktop and full-Main WASM read the converted Curves data-block with available geometry, four points", + "and at least one spline. Save/reopen matched the complete nonMeshData record.", + "Next task: `M16-GAP-00008` (FreestyleLineStyle data-block)." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 323, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 10, + "taskTokens": 81 + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00009/task-context.json b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00009/task-context.json new file mode 100644 index 00000000..066b3fdb --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00009/task-context.json @@ -0,0 +1,120 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00009", + "parentTask": "M16-GAP-00008", + "status": "in_progress", + "goal": "GreasePencil data-block LOCAL_EXACT slice", + "scope": { + "gap": "datablock:GreasePencil", + "ownerFamily": "RNA_DATABLOCK", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00009.py -- tests/files/web/generated/M16-GAP-00009-datablock-GreasePencil.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00009", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00009" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 4402, + "contextRemainingTokens": 1099 + }, + "source": { + "bytes": 5502, + "tokens": 1377 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00009-datablock-GreasePencil.blend", + "bytes": 87788, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 824532, + "reason": "EVIDENCE_BYTE_BUDGET" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00010", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00009.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00008/manifest.json", + "parentStatus": "docs/status/M16-GAP-00008.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00009.md", + "tests/golden/M16-GAP-00008/manifest.json", + "docs/status/M16-GAP-00008.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00008", + "parentTask": "M16-GAP-00007", + "status": "done", + "nextTask": "M16-GAP-00009", + "artifactCount": 11 + }, + "statusSummary": [ + "# M16-GAP-00008 Status", + "status: done", + "task: FreestyleLineStyle data-block LOCAL_EXACT slice", + "updated: 2026-08-19 America/New_York", + "Added bounded optional `lineStyles` SceneIR data with name, color, alpha, thickness, chaining/caps,", + "dashed state and modifier counts. Desktop and full-Main WASM matched the real style fixture and save/", + "reopen was exact. This does not claim Freestyle stroke rendering parity.", + "Next task: `M16-GAP-00009` (GreasePencil data-block)." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 327, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 10, + "taskTokens": 82 + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00010/task-context.json b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00010/task-context.json new file mode 100644 index 00000000..ca2b63c6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00010/task-context.json @@ -0,0 +1,137 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00010", + "parentTask": "M16-GAP-00009", + "status": "done", + "goal": "让同一个 Lattice fixture 在 Blender desktop 和 WASM/Main 中得到一致的点阵/形变数据,并在 save/reopen 后保持一致。", + "scope": { + "gap": "datablock:Lattice", + "ownerFamily": "RNA_DATABLOCK", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00010.py -- tests/files/web/generated/M16-GAP-00010-datablock-Lattice.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00010", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00010" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00010.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 3192, + "contextRemainingTokens": 797 + }, + "source": { + "bytes": 6712, + "tokens": 1679 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00010.py", + "bytes": 1286, + "tokens": 322 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00010-datablock-Lattice.blend", + "bytes": 86081, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/", + "bytes": 131451, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "web/app/src/vendor/blender/", + "bytes": 134728, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 824532, + "reason": "EVIDENCE_BYTE_BUDGET" + } + ], + "totals": { + "files": 1, + "bytes": 1286, + "tokens": 322 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00011", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00010.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00009/manifest.json", + "parentStatus": "docs/status/M16-GAP-00009.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00010.md", + "tests/golden/M16-GAP-00009/manifest.json", + "docs/status/M16-GAP-00009.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00009", + "parentTask": "M16-GAP-00008", + "status": "done", + "nextTask": "M16-GAP-00010", + "artifactCount": 7 + }, + "statusSummary": [ + "# M16-GAP-00009 Status", + "status: done", + "task: GreasePencil data-block LOCAL_EXACT slice", + "updated: 2026-08-19 America/New_York", + "Reused the existing real Grease Pencil Main fixture. Blender desktop and full-Main WASM both observed", + "GreasePencilData layers/frames, and save/reopen matched exactly.", + "Next task: `M16-GAP-00010` (Lattice data-block)." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 2331, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 51, + "taskTokens": 583 + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00070/task-context.json b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00070/task-context.json new file mode 100644 index 00000000..f74d39fe --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00070/task-context.json @@ -0,0 +1,148 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00070", + "parentTask": "M16-GAP-00069", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable modifier:GREASE_PENCIL_VERTEX_WEIGHT_ANGLE data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "modifier:GREASE_PENCIL_VERTEX_WEIGHT_ANGLE", + "ownerFamily": "MODIFIER", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00070.py -- tests/files/web/generated/M16-GAP-00070-modifier-GREASE_PENCIL_VERTEX_WEIGHT_ANGLE.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00070", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00070" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00070.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2837, + "contextRemainingTokens": 708 + }, + "source": { + "bytes": 7067, + "tokens": 1768 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00070.py", + "bytes": 535, + "tokens": 134 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00070-modifier-GREASE_PENCIL_VERTEX_WEIGHT_ANGLE.blend", + "bytes": 87791, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 824532, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00070/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00070.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00070/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 535, + "tokens": 134 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00071", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00070.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00069/manifest.json", + "parentStatus": "docs/status/M16-GAP-00069.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00070.md", + "tests/golden/M16-GAP-00069/manifest.json", + "docs/status/M16-GAP-00069.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00069", + "parentTask": "M16-GAP-00068", + "status": "done", + "nextTask": "M16-GAP-00070", + "artifactCount": 11 + }, + "statusSummary": [ + "# M16-GAP-00069 Status", + "status: done", + "task: GREASE_PENCIL_TINT modifier LOCAL_EXACT slice", + "updated: 2026-08-20 America/New_York", + "scope: Grease Pencil TINT modifier stack exposure for `object:GreasePencilObject`.", + "evidence:", + "- Desktop fixture exposes `Gp Tint`; save/reopen is exact.", + "- WASM/Main exposes `GREASE_PENCIL_TINT` on the object scene node; save/reopen is exact." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1854, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 464 + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00072/task-context.json b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00072/task-context.json new file mode 100644 index 00000000..d1d533ce --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00072/task-context.json @@ -0,0 +1,148 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00072", + "parentTask": "M16-GAP-00071", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable modifier:HOOK data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "modifier:HOOK", + "ownerFamily": "MODIFIER", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00072.py -- tests/files/web/generated/M16-GAP-00072-modifier-HOOK.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00072", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00072" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00072.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2817, + "contextRemainingTokens": 702 + }, + "source": { + "bytes": 7087, + "tokens": 1774 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00072.py", + "bytes": 411, + "tokens": 103 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00072-modifier-HOOK.blend", + "bytes": 86521, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 824532, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00072/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00072.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00072/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 411, + "tokens": 103 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00073", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00072.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00071/manifest.json", + "parentStatus": "docs/status/M16-GAP-00071.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00072.md", + "tests/golden/M16-GAP-00071/manifest.json", + "docs/status/M16-GAP-00071.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00071", + "parentTask": "M16-GAP-00070", + "status": "done", + "nextTask": "M16-GAP-00072", + "artifactCount": 11 + }, + "statusSummary": [ + "# M16-GAP-00071 Status", + "status: done", + "task: GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY modifier LOCAL_EXACT slice", + "updated: 2026-08-20 America/New_York", + "scope: Grease Pencil VERTEX_WEIGHT_PROXIMITY modifier stack exposure for `object:GreasePencilObject`.", + "evidence:", + "- Desktop fixture exposes `Gp Vertex Weight Proximity`; save/reopen is exact.", + "- WASM/Main exposes `GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY` with type code 76 on the object scene node." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1709, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 428 + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00073/task-context.json b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00073/task-context.json new file mode 100644 index 00000000..8d0df872 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00073/task-context.json @@ -0,0 +1,148 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00073", + "parentTask": "M16-GAP-00072", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable modifier:LAPLACIANDEFORM data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "modifier:LAPLACIANDEFORM", + "ownerFamily": "MODIFIER", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00073.py -- tests/files/web/generated/M16-GAP-00073-modifier-LAPLACIANDEFORM.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00073", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00073" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00073.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2997, + "contextRemainingTokens": 748 + }, + "source": { + "bytes": 6907, + "tokens": 1728 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00073.py", + "bytes": 433, + "tokens": 109 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00073-modifier-LAPLACIANDEFORM.blend", + "bytes": 86523, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 824532, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00073/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00073.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00073/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 433, + "tokens": 109 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00074", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00073.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00072/manifest.json", + "parentStatus": "docs/status/M16-GAP-00072.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00073.md", + "tests/golden/M16-GAP-00072/manifest.json", + "docs/status/M16-GAP-00072.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00072", + "parentTask": "M16-GAP-00071", + "status": "done", + "nextTask": "M16-GAP-00073", + "artifactCount": 11 + }, + "statusSummary": [ + "# M16-GAP-00072 Status", + "status: done", + "task: HOOK modifier LOCAL_EXACT slice", + "updated: 2026-08-20 America/New_York", + "scope: Mesh HOOK modifier stack exposure for `object:WebGapHookObject`.", + "evidence:", + "- Desktop fixture exposes `WebGapHook`; save/reopen is exact.", + "- WASM/Main exposes HOOK type code 9 with metadata parameters on the mesh scene node." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1764, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 441 + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00074/task-context.json b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00074/task-context.json new file mode 100644 index 00000000..a43d204e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00074/task-context.json @@ -0,0 +1,148 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00074", + "parentTask": "M16-GAP-00073", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable modifier:LAPLACIANSMOOTH data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "modifier:LAPLACIANSMOOTH", + "ownerFamily": "MODIFIER", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00074.py -- tests/files/web/generated/M16-GAP-00074-modifier-LAPLACIANSMOOTH.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00074", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00074" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00074.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2942, + "contextRemainingTokens": 734 + }, + "source": { + "bytes": 6962, + "tokens": 1742 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00074.py", + "bytes": 433, + "tokens": 109 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00074-modifier-LAPLACIANSMOOTH.blend", + "bytes": 86545, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 824532, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00074/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00074.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00074/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 433, + "tokens": 109 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00075", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00074.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00073/manifest.json", + "parentStatus": "docs/status/M16-GAP-00073.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00074.md", + "tests/golden/M16-GAP-00073/manifest.json", + "docs/status/M16-GAP-00073.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00073", + "parentTask": "M16-GAP-00072", + "status": "done", + "nextTask": "M16-GAP-00074", + "artifactCount": 11 + }, + "statusSummary": [ + "# M16-GAP-00073 Status", + "status: done", + "task: LAPLACIANDEFORM modifier LOCAL_EXACT slice", + "updated: 2026-08-20 America/New_York", + "scope: Mesh LAPLACIANDEFORM modifier stack exposure for `object:WebGapLaplacianDeformObject`.", + "evidence:", + "- Desktop fixture exposes `WebGapLaplacianDeform`; save/reopen is exact.", + "- Corrected the reader type name to Blender RNA `LAPLACIANDEFORM` and rebuilt WASM." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1764, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 441 + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00075/task-context.json b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00075/task-context.json new file mode 100644 index 00000000..0fedd809 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00075/task-context.json @@ -0,0 +1,148 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00075", + "parentTask": "M16-GAP-00074", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable modifier:LATTICE data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "modifier:LATTICE", + "ownerFamily": "MODIFIER", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00075.py -- tests/files/web/generated/M16-GAP-00075-modifier-LATTICE.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00075", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00075" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00075.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2984, + "contextRemainingTokens": 745 + }, + "source": { + "bytes": 6920, + "tokens": 1731 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00075.py", + "bytes": 425, + "tokens": 107 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00075-modifier-LATTICE.blend", + "bytes": 86504, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 824532, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00075/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00075.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00075/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 425, + "tokens": 107 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00076", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00075.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00074/manifest.json", + "parentStatus": "docs/status/M16-GAP-00074.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00075.md", + "tests/golden/M16-GAP-00074/manifest.json", + "docs/status/M16-GAP-00074.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00074", + "parentTask": "M16-GAP-00073", + "status": "done", + "nextTask": "M16-GAP-00075", + "artifactCount": 11 + }, + "statusSummary": [ + "# M16-GAP-00074 Status", + "status: done", + "task: LAPLACIANSMOOTH modifier LOCAL_EXACT slice", + "updated: 2026-08-20 America/New_York", + "scope: Mesh LAPLACIANSMOOTH modifier stack exposure for `object:WebGapLaplacianSmoothObject`.", + "evidence:", + "- Desktop fixture exposes `WebGapLaplacianSmooth`; save/reopen is exact.", + "- Corrected the reader type name to Blender RNA `LAPLACIANSMOOTH` and rebuilt WASM." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1724, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 431 + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00099/task-context.json b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00099/task-context.json new file mode 100644 index 00000000..cb31b30f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00099/task-context.json @@ -0,0 +1,148 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00099", + "parentTask": "M16-GAP-00098", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable modifier:SURFACE_DEFORM data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "modifier:SURFACE_DEFORM", + "ownerFamily": "MODIFIER", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00099.py -- tests/files/web/generated/M16-GAP-00099-modifier-SURFACE_DEFORM.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00099", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00099" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00099.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2233, + "contextRemainingTokens": 557 + }, + "source": { + "bytes": 7671, + "tokens": 1919 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00099.py", + "bytes": 1002, + "tokens": 251 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00099-modifier-SURFACE_DEFORM.blend", + "bytes": 86421, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 824532, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00099/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00099.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00099/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1002, + "tokens": 251 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00100", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00099.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00098/manifest.json", + "parentStatus": "docs/status/M16-GAP-00098.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00099.md", + "tests/golden/M16-GAP-00098/manifest.json", + "docs/status/M16-GAP-00098.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00098", + "parentTask": "M16-GAP-00097", + "status": "done", + "nextTask": "M16-GAP-00099", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00098 Status", + "status: done", + "task: SURFACE modifier LOCAL_EXACT slice", + "updated: 2026-08-20 America/New_York", + "scope: Mesh SURFACE modifier stack exposure for `mesh:WebGapSurfaceMesh`.", + "evidence:", + "- Desktop fixture exposes `WebGapSurface` as SURFACE type code 30; save/reopen is exact.", + "- WASM/Main exposes the same SURFACE stack entry with matching generic visibility flags; save/reopen is exact." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1759, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 440 + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00100/task-context.json b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00100/task-context.json new file mode 100644 index 00000000..c7030e51 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00100/task-context.json @@ -0,0 +1,148 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00100", + "parentTask": "M16-GAP-00099", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable modifier:TRIANGULATE data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "modifier:TRIANGULATE", + "ownerFamily": "MODIFIER", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00100.py -- tests/files/web/generated/M16-GAP-00100-modifier-TRIANGULATE.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00100", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00100" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00100.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2172, + "contextRemainingTokens": 542 + }, + "source": { + "bytes": 7732, + "tokens": 1934 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00100.py", + "bytes": 1062, + "tokens": 266 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00100-modifier-TRIANGULATE.blend", + "bytes": 86387, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 824532, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00100/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00100.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00100/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1062, + "tokens": 266 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00101", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00100.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00099/manifest.json", + "parentStatus": "docs/status/M16-GAP-00099.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00100.md", + "tests/golden/M16-GAP-00099/manifest.json", + "docs/status/M16-GAP-00099.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00099", + "parentTask": "M16-GAP-00098", + "status": "done", + "nextTask": "M16-GAP-00100", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00099 Status", + "status: done", + "task: SURFACE_DEFORM modifier LOCAL_EXACT slice", + "updated: 2026-08-20 America/New_York", + "scope: Mesh SURFACE_DEFORM modifier stack exposure for `mesh:WebGapSurfaceDeformMesh`.", + "evidence:", + "- Desktop fixture exposes `WebGapSurfaceDeform` as SURFACE_DEFORM type code 52; save/reopen is exact.", + "- WASM/Main exposes the same SURFACE_DEFORM stack entry with matching generic visibility flags; save/reopen is exact." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1744, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 436 + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00101/task-context.json b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00101/task-context.json new file mode 100644 index 00000000..f11fddfd --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00101/task-context.json @@ -0,0 +1,148 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00101", + "parentTask": "M16-GAP-00100", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable modifier:UV_PROJECT data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "modifier:UV_PROJECT", + "ownerFamily": "MODIFIER", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00101.py -- tests/files/web/generated/M16-GAP-00101-modifier-UV_PROJECT.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00101", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00101" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00101.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2176, + "contextRemainingTokens": 543 + }, + "source": { + "bytes": 7728, + "tokens": 1933 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00101.py", + "bytes": 986, + "tokens": 247 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00101-modifier-UV_PROJECT.blend", + "bytes": 86395, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 824532, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00101/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00101.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00101/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 986, + "tokens": 247 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00102", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00101.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00100/manifest.json", + "parentStatus": "docs/status/M16-GAP-00100.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00101.md", + "tests/golden/M16-GAP-00100/manifest.json", + "docs/status/M16-GAP-00100.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00100", + "parentTask": "M16-GAP-00099", + "status": "done", + "nextTask": "M16-GAP-00101", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00100 Status", + "status: done", + "task: TRIANGULATE modifier LOCAL_EXACT slice", + "updated: 2026-08-20 America/New_York", + "scope: Mesh TRIANGULATE modifier stack exposure for `mesh:WebGapTriangulateMesh`.", + "evidence:", + "- Desktop fixture exposes `WebGapTriangulate` as TRIANGULATE type code 44 with FIXED quad and CLIP ngon methods; save/reopen is exact.", + "- WASM/Main exposes the same TRIANGULATE stack entry and matching triangulation methods; save/reopen is exact." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1739, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 435 + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00102/task-context.json b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00102/task-context.json new file mode 100644 index 00000000..54a078fa --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00102/task-context.json @@ -0,0 +1,148 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00102", + "parentTask": "M16-GAP-00101", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable modifier:UV_WARP data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "modifier:UV_WARP", + "ownerFamily": "MODIFIER", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00102.py -- tests/files/web/generated/M16-GAP-00102-modifier-UV_WARP.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00102", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00102" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00102.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2246, + "contextRemainingTokens": 561 + }, + "source": { + "bytes": 7658, + "tokens": 1915 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00102.py", + "bytes": 974, + "tokens": 244 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00102-modifier-UV_WARP.blend", + "bytes": 86398, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 824532, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00102/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00102.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00102/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 974, + "tokens": 244 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00103", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00102.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00101/manifest.json", + "parentStatus": "docs/status/M16-GAP-00101.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00102.md", + "tests/golden/M16-GAP-00101/manifest.json", + "docs/status/M16-GAP-00101.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00101", + "parentTask": "M16-GAP-00100", + "status": "done", + "nextTask": "M16-GAP-00102", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00101 Status", + "status: done", + "task: UV_PROJECT modifier LOCAL_EXACT slice", + "updated: 2026-08-20 America/New_York", + "scope: Mesh UV_PROJECT modifier stack exposure for `mesh:WebGapUvProjectMesh`.", + "evidence:", + "- Desktop fixture exposes `WebGapUvProject` as UV_PROJECT type code 15; save/reopen is exact.", + "- WASM/Main exposes the same UV_PROJECT stack entry with matching generic visibility flags; save/reopen is exact." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1724, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 431 + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00103/task-context.json b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00103/task-context.json new file mode 100644 index 00000000..9b4bf038 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00103/task-context.json @@ -0,0 +1,148 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00103", + "parentTask": "M16-GAP-00102", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable modifier:VERTEX_WEIGHT_EDIT data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "modifier:VERTEX_WEIGHT_EDIT", + "ownerFamily": "MODIFIER", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00103.py -- tests/files/web/generated/M16-GAP-00103-modifier-VERTEX_WEIGHT_EDIT.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00103", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00103" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00103.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2227, + "contextRemainingTokens": 556 + }, + "source": { + "bytes": 7677, + "tokens": 1920 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00103.py", + "bytes": 1015, + "tokens": 254 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00103-modifier-VERTEX_WEIGHT_EDIT.blend", + "bytes": 86454, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 824532, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00103/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00103.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00103/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1015, + "tokens": 254 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00104", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00103.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00102/manifest.json", + "parentStatus": "docs/status/M16-GAP-00102.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00103.md", + "tests/golden/M16-GAP-00102/manifest.json", + "docs/status/M16-GAP-00102.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00102", + "parentTask": "M16-GAP-00101", + "status": "done", + "nextTask": "M16-GAP-00103", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00102 Status", + "status: done", + "task: UV_WARP modifier LOCAL_EXACT slice", + "updated: 2026-08-20 America/New_York", + "scope: Mesh UV_WARP modifier stack exposure for `mesh:WebGapUvWarpMesh`.", + "evidence:", + "- Desktop fixture exposes `WebGapUvWarp` as UV_WARP type code 47; save/reopen is exact.", + "- WASM/Main exposes the same UV_WARP stack entry with matching generic visibility flags; save/reopen is exact." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1779, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 445 + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00104/task-context.json b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00104/task-context.json new file mode 100644 index 00000000..0760067d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00104/task-context.json @@ -0,0 +1,148 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00104", + "parentTask": "M16-GAP-00103", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable modifier:VERTEX_WEIGHT_MIX data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "modifier:VERTEX_WEIGHT_MIX", + "ownerFamily": "MODIFIER", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00104.py -- tests/files/web/generated/M16-GAP-00104-modifier-VERTEX_WEIGHT_MIX.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00104", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00104" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00104.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2045, + "contextRemainingTokens": 510 + }, + "source": { + "bytes": 7859, + "tokens": 1966 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00104.py", + "bytes": 1011, + "tokens": 253 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00104-modifier-VERTEX_WEIGHT_MIX.blend", + "bytes": 86411, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 824532, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00104/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00104.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00104/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1011, + "tokens": 253 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00105", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00104.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00103/manifest.json", + "parentStatus": "docs/status/M16-GAP-00103.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00104.md", + "tests/golden/M16-GAP-00103/manifest.json", + "docs/status/M16-GAP-00103.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00103", + "parentTask": "M16-GAP-00102", + "status": "done", + "nextTask": "M16-GAP-00104", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00103 Status", + "status: done", + "task: VERTEX_WEIGHT_EDIT modifier LOCAL_EXACT slice", + "updated: 2026-08-20 America/New_York", + "scope: Mesh VERTEX_WEIGHT_EDIT modifier stack exposure for `mesh:WebGapVertexWeightEditMesh`.", + "evidence:", + "- Desktop fixture exposes `WebGapVertexWeightEdit` as VERTEX_WEIGHT_EDIT type code 36; save/reopen is exact.", + "- Reader name table now uses Blender's canonical VERTEX_WEIGHT_EDIT name for type code 36; rebuilt WASM/Main exposes the same stack entry with matching generic flags." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1774, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 444 + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00105/task-context.json b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00105/task-context.json new file mode 100644 index 00000000..17c2e203 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00105/task-context.json @@ -0,0 +1,148 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00105", + "parentTask": "M16-GAP-00104", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable modifier:VERTEX_WEIGHT_PROXIMITY data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "modifier:VERTEX_WEIGHT_PROXIMITY", + "ownerFamily": "MODIFIER", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00105.py -- tests/files/web/generated/M16-GAP-00105-modifier-VERTEX_WEIGHT_PROXIMITY.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00105", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00105" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00105.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2088, + "contextRemainingTokens": 521 + }, + "source": { + "bytes": 7816, + "tokens": 1955 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00105.py", + "bytes": 1035, + "tokens": 259 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00105-modifier-VERTEX_WEIGHT_PROXIMITY.blend", + "bytes": 86460, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 824532, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00105/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00105.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00105/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1035, + "tokens": 259 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00106", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00105.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00104/manifest.json", + "parentStatus": "docs/status/M16-GAP-00104.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00105.md", + "tests/golden/M16-GAP-00104/manifest.json", + "docs/status/M16-GAP-00104.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00104", + "parentTask": "M16-GAP-00103", + "status": "done", + "nextTask": "M16-GAP-00105", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00104 Status", + "status: done", + "task: VERTEX_WEIGHT_MIX modifier LOCAL_EXACT slice", + "updated: 2026-08-20 America/New_York", + "scope: Mesh VERTEX_WEIGHT_MIX modifier stack exposure for `mesh:WebGapVertexWeightMixMesh`.", + "evidence:", + "- Desktop fixture exposes `WebGapVertexWeightMix` as VERTEX_WEIGHT_MIX type code 37; save/reopen is exact.", + "- WASM/Main exposes the same VERTEX_WEIGHT_MIX stack entry with matching generic visibility flags; save/reopen is exact." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1804, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 451 + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00106/task-context.json b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00106/task-context.json new file mode 100644 index 00000000..2d35d245 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00106/task-context.json @@ -0,0 +1,148 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00106", + "parentTask": "M16-GAP-00105", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable modifier:VOLUME_DISPLACE data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "modifier:VOLUME_DISPLACE", + "ownerFamily": "MODIFIER", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00106.py -- tests/files/web/generated/M16-GAP-00106-modifier-VOLUME_DISPLACE.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00106", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00106" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00106.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2065, + "contextRemainingTokens": 515 + }, + "source": { + "bytes": 7839, + "tokens": 1961 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00106.py", + "bytes": 918, + "tokens": 230 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00106-modifier-VOLUME_DISPLACE.blend", + "bytes": 86077, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 824532, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00106/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00106.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00106/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 918, + "tokens": 230 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00107", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00106.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00105/manifest.json", + "parentStatus": "docs/status/M16-GAP-00105.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00106.md", + "tests/golden/M16-GAP-00105/manifest.json", + "docs/status/M16-GAP-00105.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00105", + "parentTask": "M16-GAP-00104", + "status": "done", + "nextTask": "M16-GAP-00106", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00105 Status", + "status: done", + "task: VERTEX_WEIGHT_PROXIMITY modifier LOCAL_EXACT slice", + "updated: 2026-08-20 America/New_York", + "scope: Mesh VERTEX_WEIGHT_PROXIMITY modifier stack exposure for `mesh:WebGapVertexWeightProximityMesh`.", + "evidence:", + "- Desktop fixture exposes `WebGapVertexWeightProximity` as VERTEX_WEIGHT_PROXIMITY type code 38; save/reopen is exact.", + "- WASM/Main exposes the same VERTEX_WEIGHT_PROXIMITY stack entry with matching generic visibility flags; save/reopen is exact." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1764, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 441 + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00107/task-context.json b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00107/task-context.json new file mode 100644 index 00000000..42024a8b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-context/M16-GAP-00107/task-context.json @@ -0,0 +1,148 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00107", + "parentTask": "M16-GAP-00106", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable modifier:VOLUME_TO_MESH data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "modifier:VOLUME_TO_MESH", + "ownerFamily": "MODIFIER", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00107.py -- tests/files/web/generated/M16-GAP-00107-modifier-VOLUME_TO_MESH.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00107", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00107" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00107.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2120, + "contextRemainingTokens": 529 + }, + "source": { + "bytes": 7784, + "tokens": 1947 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00107.py", + "bytes": 999, + "tokens": 250 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00107-modifier-VOLUME_TO_MESH.blend", + "bytes": 86415, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 824532, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00107/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00107.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00107/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 999, + "tokens": 250 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00108", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00107.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00106/manifest.json", + "parentStatus": "docs/status/M16-GAP-00106.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00107.md", + "tests/golden/M16-GAP-00106/manifest.json", + "docs/status/M16-GAP-00106.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00106", + "parentTask": "M16-GAP-00105", + "status": "done", + "nextTask": "M16-GAP-00107", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00106 Status", + "status: done", + "task: VOLUME_DISPLACE modifier LOCAL_EXACT slice", + "updated: 2026-08-20 America/New_York", + "scope: Volume-object VOLUME_DISPLACE modifier stack exposure for `object:WebGapVolumeDisplaceObject`.", + "evidence:", + "- Desktop fixture exposes `WebGapVolumeDisplace` as VOLUME_DISPLACE type code 59 on a Volume object; save/reopen is exact.", + "- WASM/Main exposes the same VOLUME_DISPLACE stack entry with matching generic visibility flags; save/reopen is exact." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1759, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 440 + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M15-03E/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M15-03E/manifest.json new file mode 100644 index 00000000..176e33f7 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M15-03E/manifest.json @@ -0,0 +1,42 @@ +{ + "schemaVersion": 1, + "task": "M15-03E", + "parentTask": "M15-03D", + "status": "BLOCKED", + "enablingTask": false, + "parityStateChange": false, + "operation": "BLENDER_ZERO_GAP_GATE", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M15-03D/manifest.json", + "sha256": "2838a248140ebc944ee85190de5b2ae73bdc28e8d0be5972fb04e5cf2bf345c3" + }, + "checker": { + "path": "tools/web/check-blender-zero-gap-gate.mjs", + "sha256": "169c37861ee4422fd2eacf4886a99e71d5ed4e5220132866dccaf961b4a6ac2b" + }, + "plan": { + "path": "tests/golden/M15-03A/next-task-plan.json", + "sha256": "a5c46410b419ede40a5adb6a84029e7f303e28e823f33d9d63d5e1815c1b0032" + }, + "report": { + "path": "tests/golden/M15-03E/zero-gap-gate-report.json", + "sha256": "41a5611e2719ed377db55bdfe6623c2a73dc91560e0f38266164d10645b57a69" + }, + "package": { + "path": "web/package.json", + "sha256": "540fcf5a711fe65654f5f9dcfccf4dfb4549dcdbef498a4eb37946cc24a76912" + } + }, + "nextTask": "M16-GAP-00001", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "parentPointerRepair": { + "task": "M16-GAP-00001", + "parentTask": "M15-03E", + "originalNextTask": "M16-GAP-00018", + "resignedNextTask": "M16-GAP-00001" + } + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00001/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00001/manifest.json new file mode 100644 index 00000000..5f0d01fc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00001/manifest.json @@ -0,0 +1,71 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00001", + "parentTask": "M15-03E", + "enablingTask": true, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M15-03E/manifest.json", + "sha256": "8c81caa2e601aba51381d72c5a5f35e0dd5561458946c1c4795e9e055eec3474" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00001-datablock-Action.blend", + "sha256": "cb921e862eff1dcf68f22d77ef8558679207203ace0b80239a5bc5874ec2a551" + }, + "desktopChecker": { + "path": "tools/web/check-action-desktop.py", + "sha256": "7c32d786a8daedcf5e995d0ff29b6034e7c4f4c25c309ccd0542adecc19319f2" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00001/action-desktop-report.json", + "sha256": "f6bea0003a9e8eb25048797156bc0ab59b6a63d76ce4156283b6d9761dbfb0ee" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00001/action-local-exact-report.json", + "sha256": "eb7a604af8b071c3186a39a30f3a9974a6fed03008751da5319d54d170b841d6" + }, + "plan": { + "path": "tests/golden/M15-03A/next-task-plan.json", + "sha256": "2235d0d250d28e63ab1c9b0e956292560785cf340c612312b316be0ceb2463a9" + }, + "package": { + "path": "web/package.json", + "sha256": "9c553a1e0614bcd190149a409759c8fe5d83a0bd00fe49b4bce049ffa01e0f0a" + } + }, + "nextTask": "M16-GAP-00002", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tests/golden/M15-03E/manifest.json", + "originalSha256": "9e50746ba11f29a3a26c1eb04c25e7153f2edebbf32e092c5bdc89516f274f64", + "resignedSha256": "8c81caa2e601aba51381d72c5a5f35e0dd5561458946c1c4795e9e055eec3474" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "a987e77c1e35f70d820fe12430d74d90e72bfb594b65dbbf39f005748c6683f8", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "tests/golden/M15-03A/next-task-plan.json", + "originalSha256": "732d34b5a696077ae6f7f11df768e1e1671379e2face64496f46fcbf352878ed", + "resignedSha256": "2235d0d250d28e63ab1c9b0e956292560785cf340c612312b316be0ceb2463a9" + }, + { + "path": "web/package.json", + "originalSha256": "159af906f4e468e3f18cfcd2f599a7e22c9c180cdc8032ba4eac5eaf5ad8cc0e", + "resignedSha256": "9c553a1e0614bcd190149a409759c8fe5d83a0bd00fe49b4bce049ffa01e0f0a" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00002/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00002/manifest.json new file mode 100644 index 00000000..88421195 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00002/manifest.json @@ -0,0 +1,66 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00002", + "parentTask": "M16-GAP-00001", + "enablingTask": true, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00001/manifest.json", + "sha256": "ef0a497b61ee95fae55be76ab9dbbc047aeb7619bb161c0711319f4288f5d170" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00002-datablock-Armature.blend", + "sha256": "b7d1c05b70e97be9a70890d45fea60b143073462d2a4f62eb3cc607bd2d665ca" + }, + "desktopChecker": { + "path": "tools/web/check-armature-desktop.py", + "sha256": "5a03e4c6d195219b6fe567973565b0d29f8957716d03c419b04d2003ed67429e" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00002/armature-desktop-report.json", + "sha256": "970538d481dd9b2169c5e39e6901e6eeff0d9b2d26b42491837321841bcb4a5e" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00002/armature-local-exact-report.json", + "sha256": "eeb775648b186a9728851b8cffa0fa9c41701de4a8142e73f6ad98ef050dc877" + }, + "plan": { + "path": "tests/golden/M15-03A/next-task-plan.json", + "sha256": "2235d0d250d28e63ab1c9b0e956292560785cf340c612312b316be0ceb2463a9" + }, + "package": { + "path": "web/package.json", + "sha256": "9c553a1e0614bcd190149a409759c8fe5d83a0bd00fe49b4bce049ffa01e0f0a" + } + }, + "nextTask": "M16-GAP-00003", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "a987e77c1e35f70d820fe12430d74d90e72bfb594b65dbbf39f005748c6683f8", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "tests/golden/M15-03A/next-task-plan.json", + "originalSha256": "732d34b5a696077ae6f7f11df768e1e1671379e2face64496f46fcbf352878ed", + "resignedSha256": "2235d0d250d28e63ab1c9b0e956292560785cf340c612312b316be0ceb2463a9" + }, + { + "path": "web/package.json", + "originalSha256": "159af906f4e468e3f18cfcd2f599a7e22c9c180cdc8032ba4eac5eaf5ad8cc0e", + "resignedSha256": "9c553a1e0614bcd190149a409759c8fe5d83a0bd00fe49b4bce049ffa01e0f0a" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00003/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00003/manifest.json new file mode 100644 index 00000000..795ed015 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00003/manifest.json @@ -0,0 +1,97 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00003", + "parentTask": "M16-GAP-00002", + "enablingTask": true, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "BRUSH_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00002/manifest.json", + "sha256": "b8705243e00f62deb82644976838e197d84e72edb8113439efacfd95d4da4188" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00003-datablock-Brush.blend", + "sha256": "f1f6922c4c9c31542a9cefad6932d616ef5dcde0067c0a9668f67902023f4f80" + }, + "fixtureGenerator": { + "path": "tools/web/generate-brush-fixture.py", + "sha256": "c4fd4a6c28c595b742b1ef083285ac87f9af56b65d75ba03750925079a0aa637" + }, + "desktopChecker": { + "path": "tools/web/check-brush-desktop.py", + "sha256": "515b1eab3b6e2dc0a4e9a65d20764816916228f41082739c98efd6cc882926bf" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00003/brush-desktop-report.json", + "sha256": "ca992c23e2c302ef0b85b91305eabdbf71da6b5bc60c49b71710d145d0787e09" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00003/brush-local-exact-report.json", + "sha256": "e48dcad3974b94404d5d9f0c7222b6c45ea5f3b7a467ea2b88691a6ff50e22a6" + }, + "nativeReader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "plan": { + "path": "tests/golden/M15-03A/next-task-plan.json", + "sha256": "2235d0d250d28e63ab1c9b0e956292560785cf340c612312b316be0ceb2463a9" + }, + "package": { + "path": "web/package.json", + "sha256": "9c553a1e0614bcd190149a409759c8fe5d83a0bd00fe49b4bce049ffa01e0f0a" + } + }, + "nextTask": "M16-GAP-00004", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "a987e77c1e35f70d820fe12430d74d90e72bfb594b65dbbf39f005748c6683f8", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "9c2d9536cba500763ffc425d7f09132dfdb2d9c3c8e5e9dfd7246ee972cca3f9", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "8ba177250f629d6c2f83f78c376101e536e01388cda7b1672ceec9a15034b3b9", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "6667cefcccdba3379ad2fd25a50339a2ad94d498d6c9360f1fc2fbd8319597c4", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "tests/golden/M15-03A/next-task-plan.json", + "originalSha256": "732d34b5a696077ae6f7f11df768e1e1671379e2face64496f46fcbf352878ed", + "resignedSha256": "2235d0d250d28e63ab1c9b0e956292560785cf340c612312b316be0ceb2463a9" + }, + { + "path": "web/package.json", + "originalSha256": "159af906f4e468e3f18cfcd2f599a7e22c9c180cdc8032ba4eac5eaf5ad8cc0e", + "resignedSha256": "9c553a1e0614bcd190149a409759c8fe5d83a0bd00fe49b4bce049ffa01e0f0a" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00004/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00004/manifest.json new file mode 100644 index 00000000..992f88d6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00004/manifest.json @@ -0,0 +1,70 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00004", + "parentTask": "M16-GAP-00003", + "enablingTask": true, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "CAMERA_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00003/manifest.json", + "sha256": "789282e4c913c77d8805490a132b26026f8d4a650539c1378f2dba546d4fcba1" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00004-datablock-Camera.blend", + "sha256": "c637587ce3011cbe9b038ab87803a9a2f945d4512b55d616a5dda268628988a0" + }, + "fixtureGenerator": { + "path": "tools/web/generate-camera-fixture.py", + "sha256": "23c1bf411ed483f4bf111fb52f63e9ec77610f30819c68ac248075a851a59c97" + }, + "desktopChecker": { + "path": "tools/web/check-camera-desktop.py", + "sha256": "27831385e1ed7e464c6b627bcbcb81af01ad2afa7ec66f28d2256641005802b4" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00004/camera-desktop-report.json", + "sha256": "b11254b3e0cdeb5e5c39e350ea1d349f5e2991f8c62a5ad28f744c391beab3b5" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00004/camera-local-exact-report.json", + "sha256": "a2b2c321efbcf2ed765f2e8b1019fef7e2cd34af872f78474d18594c6cee5d1c" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "plan": { + "path": "tests/golden/M15-03A/next-task-plan.json", + "sha256": "2235d0d250d28e63ab1c9b0e956292560785cf340c612312b316be0ceb2463a9" + } + }, + "nextTask": "M16-GAP-00005", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "a987e77c1e35f70d820fe12430d74d90e72bfb594b65dbbf39f005748c6683f8", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "6667cefcccdba3379ad2fd25a50339a2ad94d498d6c9360f1fc2fbd8319597c4", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "tests/golden/M15-03A/next-task-plan.json", + "originalSha256": "732d34b5a696077ae6f7f11df768e1e1671379e2face64496f46fcbf352878ed", + "resignedSha256": "2235d0d250d28e63ab1c9b0e956292560785cf340c612312b316be0ceb2463a9" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00005/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00005/manifest.json new file mode 100644 index 00000000..05833141 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00005/manifest.json @@ -0,0 +1,61 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00005", + "parentTask": "M16-GAP-00004", + "enablingTask": true, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "COLLECTION_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00004/manifest.json", + "sha256": "905c8f507a7c2e3c43a6d3c99a873124e1dc0aa1647e09a0b66f7e6a77462add" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00005-datablock-Collection.blend", + "sha256": "c33d2b1b85b0272aa3bf06a012000db5f383a9a73b79bd4b90042110b70a912b" + }, + "fixtureGenerator": { + "path": "tools/web/generate-collection-fixture.py", + "sha256": "3f2a02903a1c1d74a3ba707342b6617b39a3857ccf58e30162ab993c7e112544" + }, + "desktopChecker": { + "path": "tools/web/check-collection-desktop.py", + "sha256": "fca7970f55b654527226b1b39a88934db35da787772c69ba65075f11e2664f26" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00005/collection-desktop-report.json", + "sha256": "6e6bcf8e5575d46c324d51409d19be6f89e5397b1f094f528b164ea72c607887" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00005/collection-local-exact-report.json", + "sha256": "2db40433007886b24f5ceb18dccf7470e0c393163838a11f2feb48bab516d740" + }, + "plan": { + "path": "tests/golden/M15-03A/next-task-plan.json", + "sha256": "2235d0d250d28e63ab1c9b0e956292560785cf340c612312b316be0ceb2463a9" + } + }, + "nextTask": "M16-GAP-00006", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "a987e77c1e35f70d820fe12430d74d90e72bfb594b65dbbf39f005748c6683f8", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "tests/golden/M15-03A/next-task-plan.json", + "originalSha256": "732d34b5a696077ae6f7f11df768e1e1671379e2face64496f46fcbf352878ed", + "resignedSha256": "2235d0d250d28e63ab1c9b0e956292560785cf340c612312b316be0ceb2463a9" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00006/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00006/manifest.json new file mode 100644 index 00000000..c20dea5b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00006/manifest.json @@ -0,0 +1,70 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00006", + "parentTask": "M16-GAP-00005", + "enablingTask": true, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "CURVE_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00005/manifest.json", + "sha256": "581d3757a300c6dea5f8a989932f2787915c30ef84de8494a20fd65d2058551a" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00006-datablock-Curve.blend", + "sha256": "49af45a70c7e050277a9b4b643c41aa9f29978b1df5214b5e48dc629b0027a21" + }, + "fixtureGenerator": { + "path": "tools/web/generate-curve-fixture.py", + "sha256": "bb93a2ca07e8e8ae81341c46edc7cbceb72ada2023b8fe956ee3b6ad03c7ae11" + }, + "desktopChecker": { + "path": "tools/web/check-curve-desktop.py", + "sha256": "e66ba2ae04f6de97e9643e581fa4426650ce4ddcfea0ffc8b3bf9fb14fdd26ee" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00006/curve-desktop-report.json", + "sha256": "85e8eee37daea993653bfa1785f5df19f953c2d013543e8a27743ed74d49d4ff" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00006/curve-local-exact-report.json", + "sha256": "048c9fb9116ab2a1b4460c74696340a263cd342ba4886ce56f8b03bef8743e58" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "plan": { + "path": "tests/golden/M15-03A/next-task-plan.json", + "sha256": "2235d0d250d28e63ab1c9b0e956292560785cf340c612312b316be0ceb2463a9" + } + }, + "nextTask": "M16-GAP-00007", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "a987e77c1e35f70d820fe12430d74d90e72bfb594b65dbbf39f005748c6683f8", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "6667cefcccdba3379ad2fd25a50339a2ad94d498d6c9360f1fc2fbd8319597c4", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "tests/golden/M15-03A/next-task-plan.json", + "originalSha256": "732d34b5a696077ae6f7f11df768e1e1671379e2face64496f46fcbf352878ed", + "resignedSha256": "2235d0d250d28e63ab1c9b0e956292560785cf340c612312b316be0ceb2463a9" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00007/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00007/manifest.json new file mode 100644 index 00000000..6ce951f4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00007/manifest.json @@ -0,0 +1,70 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00007", + "parentTask": "M16-GAP-00006", + "enablingTask": true, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "CURVES_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00006/manifest.json", + "sha256": "d17d368089b84c23ce4cc4016f61cc3bf0ea86ade968045a7a8dc6a3063394f0" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00007-datablock-Curves.blend", + "sha256": "d6489313473ced7f55cc1d43f3fa73181672c0a5db4b6854002f18354ca1d9a6" + }, + "fixtureGenerator": { + "path": "tools/web/generate-curves-fixture.py", + "sha256": "792ec1d58d495cd9d425215aa631dd5e1d66f7bd5cf75e783b961760667faacc" + }, + "desktopChecker": { + "path": "tools/web/check-curves-desktop.py", + "sha256": "3a8372a8ba072df2f5a3a1b3cccef44d219dde2193b551110017436cbd38e85c" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00007/curves-desktop-report.json", + "sha256": "db15e64bfe202720b463ab742cbed2e6ec80b872456b825078afbba7a2540531" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00007/curves-local-exact-report.json", + "sha256": "bf093708e23b8318e1f50b925b5c033d66aa8c1f97303174ad2489a82191705f" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "plan": { + "path": "tests/golden/M15-03A/next-task-plan.json", + "sha256": "2235d0d250d28e63ab1c9b0e956292560785cf340c612312b316be0ceb2463a9" + } + }, + "nextTask": "M16-GAP-00008", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "a987e77c1e35f70d820fe12430d74d90e72bfb594b65dbbf39f005748c6683f8", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "6667cefcccdba3379ad2fd25a50339a2ad94d498d6c9360f1fc2fbd8319597c4", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "tests/golden/M15-03A/next-task-plan.json", + "originalSha256": "732d34b5a696077ae6f7f11df768e1e1671379e2face64496f46fcbf352878ed", + "resignedSha256": "2235d0d250d28e63ab1c9b0e956292560785cf340c612312b316be0ceb2463a9" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00008/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00008/manifest.json new file mode 100644 index 00000000..15a4fcce --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00008/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00008", + "parentTask": "M16-GAP-00007", + "enablingTask": true, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "FREESTYLE_LINE_STYLE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00007/manifest.json", + "sha256": "0c115415e196995788045b412c37da40af5cac0f2200efc124515d730b63af14" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00008-datablock-FreestyleLineStyle.blend", + "sha256": "94de965ad54018f7072f2b4f4b752dc6f28f6608836040dc353d18d19fe31fd9" + }, + "fixtureGenerator": { + "path": "tools/web/generate-freestyle-fixture.py", + "sha256": "e73088d9097c6ee94baaa07d3e8e279a55a0a34ccec2618e629699f840fd1ed1" + }, + "desktopChecker": { + "path": "tools/web/check-freestyle-desktop.py", + "sha256": "7621b52c88adbae0bb611b2fd6ea2ccf1a0666341c36d4d03eda8f4c565efdc8" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00008/freestyle-desktop-report.json", + "sha256": "2c42936cd8e4046b752f7e86949927769d1cb8f2086a2c9ba27eebf61a6f4a89" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00008/freestyle-local-exact-report.json", + "sha256": "ab75a7fdfa71a4abd4a5e97f7e726440bde7891163c0b256be0815e1cc51a99a" + }, + "nativeReader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "plan": { + "path": "tests/golden/M15-03A/next-task-plan.json", + "sha256": "2235d0d250d28e63ab1c9b0e956292560785cf340c612312b316be0ceb2463a9" + } + }, + "nextTask": "M16-GAP-00009", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "a987e77c1e35f70d820fe12430d74d90e72bfb594b65dbbf39f005748c6683f8", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "9c2d9536cba500763ffc425d7f09132dfdb2d9c3c8e5e9dfd7246ee972cca3f9", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "8ba177250f629d6c2f83f78c376101e536e01388cda7b1672ceec9a15034b3b9", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "6667cefcccdba3379ad2fd25a50339a2ad94d498d6c9360f1fc2fbd8319597c4", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "tests/golden/M15-03A/next-task-plan.json", + "originalSha256": "732d34b5a696077ae6f7f11df768e1e1671379e2face64496f46fcbf352878ed", + "resignedSha256": "2235d0d250d28e63ab1c9b0e956292560785cf340c612312b316be0ceb2463a9" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00009/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00009/manifest.json new file mode 100644 index 00000000..2058a90e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00009/manifest.json @@ -0,0 +1,57 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00009", + "parentTask": "M16-GAP-00008", + "enablingTask": true, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00008/manifest.json", + "sha256": "3b4c0eb24867cef0054cffb31d1e3320379dbf70e13e8920eaa08da6ace06c89" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00009-datablock-GreasePencil.blend", + "sha256": "3a8525077807f9178dac3a5ba84b524e5f8e80874b15c54e2a6658ecb80315a3" + }, + "desktopChecker": { + "path": "tools/web/check-grease-pencil-desktop.py", + "sha256": "4d99d5e81fcdc8289e462279f2da278e2aea573f4d947fa5e71e959b506d1ee1" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00009/grease-pencil-desktop-report.json", + "sha256": "6a1145d7447a08f51d751dca797e67f2be7eb12cba052a726c4c2f8ee28b585e" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00009/grease-pencil-local-exact-report.json", + "sha256": "94aaf84cc072ef13998517d610740d81d94c14593ba776ea7f4b88c673a0a71f" + }, + "plan": { + "path": "tests/golden/M15-03A/next-task-plan.json", + "sha256": "2235d0d250d28e63ab1c9b0e956292560785cf340c612312b316be0ceb2463a9" + } + }, + "nextTask": "M16-GAP-00010", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "a987e77c1e35f70d820fe12430d74d90e72bfb594b65dbbf39f005748c6683f8", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "tests/golden/M15-03A/next-task-plan.json", + "originalSha256": "732d34b5a696077ae6f7f11df768e1e1671379e2face64496f46fcbf352878ed", + "resignedSha256": "2235d0d250d28e63ab1c9b0e956292560785cf340c612312b316be0ceb2463a9" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00010/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00010/manifest.json new file mode 100644 index 00000000..e4f7e2bf --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00010/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00010", + "parentTask": "M16-GAP-00009", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "LATTICE_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00009/manifest.json", + "sha256": "c242975eccdcb4c516dfae17763f9a15b9db29b856bd9f845e9eceb429e8ce69" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00010-datablock-Lattice.blend", + "sha256": "ec40e2661e20c8f7e3b18d9b42f9e585175be8c2f210a1c8c190e76a6e9fbc63" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00010.py", + "sha256": "35303113c57f1cc6c6b7bd1afc269be0c824b71f0c7bfbb0fd33f35fea40a8c2" + }, + "desktopChecker": { + "path": "tools/web/check-lattice-desktop.py", + "sha256": "56f48405407b4baba4ee9a13038fddc951c6fe607a3d64d6894a00e61d30be9b" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00010/lattice-desktop-report.json", + "sha256": "bb8effdcf18a89794914d88311a598b3285e64f18c402c9cff477ae5700ba089" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00010/lattice-local-exact-report.json", + "sha256": "489c9d25a6e4164860f5528944eca0e173f8a7e4130e89404b6fa09da9b469a0" + } + }, + "nextTask": "M16-GAP-00011", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "8d93d0d65a0c3e0268dfb1ce9cdd27bdf7aab33f2234d6433b6749aa81403ad3", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "3c2c69a66d60692049956530c2570db377e5d10838d0048aa4e0f3fb210f9c62", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "7d96e706de6b42f4372d937708600be150190ae593e214066a06d030bcac8b73", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "4a33528e8bd4d50956e741cba93ab0215350943c59f56b7c82e18df19f4ee450", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00011/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00011/manifest.json new file mode 100644 index 00000000..922c2631 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00011/manifest.json @@ -0,0 +1,92 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00011", + "parentTask": "M16-GAP-00010", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "LIBRARY_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00010/manifest.json", + "sha256": "cb3be7f0917ca95d831ffabaa11470eb528ce3fe5eda1ba1e3f7925ea2288737" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00011-datablock-Library.blend", + "sha256": "d6b00d6cdc0c1c73158ba91433d8344f4b6b0a2f1d5c81e57cc4e0b42d23c34a" + }, + "librarySource": { + "path": "tests/files/web/generated/WebGapLibrary.blend", + "sha256": "1fe24e423713bc18dc936e723e97f7c306db4aa62cc24736055eb2d341375088" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00011.py", + "sha256": "f33b9d5482193439fedd34f138b192d2e086db01205560276fa43bfd08ed430a" + }, + "desktopChecker": { + "path": "tools/web/check-library-desktop.py", + "sha256": "34eda5a724ca7eab9fcb2e4f39cec46125e363f548fc77beb3f09133151fdeb4" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00011/library-desktop-report.json", + "sha256": "0bc9032490f2450e99d30fd67fe95b164f8d359ca042d0e0b772ee1a28e39dbd" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00011/library-local-exact-report.json", + "sha256": "82c3a7ebb204da9dd8f817f0378374be062993892a4405d01f81c960677f45bf" + } + }, + "nextTask": "M16-GAP-00012", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "0e13f61a7f34ddc10388f8e6ee5215fe941714e2bbf759a795efbcdd0fbc3aa0", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "3c2c69a66d60692049956530c2570db377e5d10838d0048aa4e0f3fb210f9c62", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "7d96e706de6b42f4372d937708600be150190ae593e214066a06d030bcac8b73", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "4a33528e8bd4d50956e741cba93ab0215350943c59f56b7c82e18df19f4ee450", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00012/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00012/manifest.json new file mode 100644 index 00000000..0dc2d2b6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00012/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00012", + "parentTask": "M16-GAP-00011", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "LIGHT_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00011/manifest.json", + "sha256": "a29ac9278d37d187f5e421f365a71fb3d18a8aeb74cfe4ae733f8510a43446de" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00012-datablock-Light.blend", + "sha256": "b92565305572d48cc2311b749d50024f1df68c4084ae8bc52ce2ba2c3832a3fa" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00012.py", + "sha256": "9b261d7d516e0514e6e96a876661d0ab8eb83b844e92cd72dc4ffda460da0b2b" + }, + "desktopChecker": { + "path": "tools/web/check-light-desktop.py", + "sha256": "90025507cc88c1c2be028e52a0b6e0b80561915bf109f38c64b95191c716505c" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00012/light-desktop-report.json", + "sha256": "92bd381ec7b8242de6379d9e266ebbb63bd34c2d28e852d2ac7610eb7e67b8d3" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00012/light-local-exact-report.json", + "sha256": "103958f99cc13fccef7acb4128f3707e48580c8ad86813821a2ce40986c5a964" + } + }, + "nextTask": "M16-GAP-00013", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "cf0cc4ebefcd319d6351d70864efd20c66e415dd0adb1637224e1390d1d38e70", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "3c2c69a66d60692049956530c2570db377e5d10838d0048aa4e0f3fb210f9c62", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "7d96e706de6b42f4372d937708600be150190ae593e214066a06d030bcac8b73", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "4a33528e8bd4d50956e741cba93ab0215350943c59f56b7c82e18df19f4ee450", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00013/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00013/manifest.json new file mode 100644 index 00000000..ffaa51f0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00013/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00013", + "parentTask": "M16-GAP-00012", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "MATERIAL_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00012/manifest.json", + "sha256": "c71a0d9e23d13bf51a190c99f16e4e7e98da1f12cba50f2404bef8fcb6e94d4c" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00013-datablock-Material.blend", + "sha256": "e17880024b28e0fbc8fac5b815a2c673fe11d5000cb1d23a794cdc3d83658d76" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00013.py", + "sha256": "bb04dd1da461e061c27be9d4e160b2787026855198661e72ff4fee802b72c817" + }, + "desktopChecker": { + "path": "tools/web/check-material-desktop.py", + "sha256": "42a870bb79eceb8e1789686db689842dfe390d58db2744fded8dd571fe9cd8f5" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00013/material-desktop-report.json", + "sha256": "7adfdd70f9b116268301e0bb6cf7e0b88cf8eb2ab20d25c944586df3a9cc000c" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00013/material-local-exact-report.json", + "sha256": "229f3fc85518da4539e311e6ca70fd6b156cdcc9ae4c4b901e0de5c895b3d333" + } + }, + "nextTask": "M16-GAP-00014", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "e0e510273337e56435cf44adef246ff5bf12d6857691376ac2aacf6a4fc79ed8", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "3c2c69a66d60692049956530c2570db377e5d10838d0048aa4e0f3fb210f9c62", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "7d96e706de6b42f4372d937708600be150190ae593e214066a06d030bcac8b73", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "4a33528e8bd4d50956e741cba93ab0215350943c59f56b7c82e18df19f4ee450", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00014/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00014/manifest.json new file mode 100644 index 00000000..c960cca0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00014/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00014", + "parentTask": "M16-GAP-00013", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "MESH_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00013/manifest.json", + "sha256": "47663ad9012f36f2947f3ac8dc0d628f8f5bc338809686692e92dd59ca46c591" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00014-datablock-Mesh.blend", + "sha256": "1676a26f95de4eb90e55ea169a497c382ca68f195c6b883de49b6a3223d84bb5" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00014.py", + "sha256": "c1333fbd1f86bac31f1db1f09056d2152f3b537fe59353f3d6f50767e8d724db" + }, + "desktopChecker": { + "path": "tools/web/check-mesh-desktop.py", + "sha256": "8fe5859138f84079ddb43030fc8d22b596044b08d4f863da5dd25acaeedafdd5" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00014/mesh-desktop-report.json", + "sha256": "e26f0333707fa915b7261f305af413340f9edb26d050a82fb3c6afac12ee2169" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00014/mesh-local-exact-report.json", + "sha256": "36066f715b9993f0e789e12a0d29f9c0c9e79e0b5ff5914268e839fa648cb28a" + } + }, + "nextTask": "M16-GAP-00015", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "82796fdee398c4d97d1506610b8d4b838eeb0ea6b33218ed8c749cf06d747289", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "3c2c69a66d60692049956530c2570db377e5d10838d0048aa4e0f3fb210f9c62", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "7d96e706de6b42f4372d937708600be150190ae593e214066a06d030bcac8b73", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "4a33528e8bd4d50956e741cba93ab0215350943c59f56b7c82e18df19f4ee450", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00015/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00015/manifest.json new file mode 100644 index 00000000..b462f495 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00015/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00015", + "parentTask": "M16-GAP-00014", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "METABALL_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00014/manifest.json", + "sha256": "97e0da40860f7095157068fd4545d7cd9c25ba94a68d56ab87e32b6fd032b655" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00015-datablock-MetaBall.blend", + "sha256": "b4901e5c71f10b79a2061bf7599b43ff1b20b7df59f227aa78c1e66a38080b4f" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00015.py", + "sha256": "db1da7ca090d37b6590eab38f49cbcac9972e7ade1966d78f316048c6b0acf54" + }, + "desktopChecker": { + "path": "tools/web/check-metaball-desktop.py", + "sha256": "77a03db581b17eda4219b42ffbf18e5d1809dfb3bf45f3ac0c0051f27934dc0c" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00015/metaball-desktop-report.json", + "sha256": "5b2b7d79397675792bf54b568646a1714f75fab355049e7227f634403345c74c" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00015/metaball-local-exact-report.json", + "sha256": "7253a7de7d2aad035ef38cceee33c0bd04ca743f181f28ac740e09799684a636" + } + }, + "nextTask": "M16-GAP-00016", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "ead5bd538ba919fa51ec303d1d1af5ae0f648b1453c02d20383824dcfd9da12f", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "3c2c69a66d60692049956530c2570db377e5d10838d0048aa4e0f3fb210f9c62", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "7d96e706de6b42f4372d937708600be150190ae593e214066a06d030bcac8b73", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "4a33528e8bd4d50956e741cba93ab0215350943c59f56b7c82e18df19f4ee450", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00016/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00016/manifest.json new file mode 100644 index 00000000..e7a9a020 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00016/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00016", + "parentTask": "M16-GAP-00015", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "NODETREE_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00015/manifest.json", + "sha256": "641d43e8184dd710fb5dc5a7278e943c3f8bc70287abda6f5cb5afc5a56bbb7c" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00016-datablock-NodeTree.blend", + "sha256": "7075a345a9991d456fc2c6cc68b3a836fc837dbfd99328173f0018b59e0e483c" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00016.py", + "sha256": "12033eb9f1ef9f09fe86135259382e7cc938928c23a89b637d39e8e36c51982e" + }, + "desktopChecker": { + "path": "tools/web/check-nodetree-desktop.py", + "sha256": "e0fa9c2dbe5f9877c00c33d83e5aa2407606a003163be086a082e631da3cd9a5" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00016/nodetree-desktop-report.json", + "sha256": "b1a6608a41fdbbaeb670dfc0222fbef3b6b73e3728add751564194dda1eb2924" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00016/nodetree-local-exact-report.json", + "sha256": "8df89df7ef013b8eed71c19e748eff6b7288772a10f139306a87cb2431eb26b3" + } + }, + "nextTask": "M16-GAP-00017", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "942362700a8e76db689a57004024b1042ac2b796a225f0b31a25b93dc78e490d", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "3c2c69a66d60692049956530c2570db377e5d10838d0048aa4e0f3fb210f9c62", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "7d96e706de6b42f4372d937708600be150190ae593e214066a06d030bcac8b73", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "4a33528e8bd4d50956e741cba93ab0215350943c59f56b7c82e18df19f4ee450", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00017/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00017/manifest.json new file mode 100644 index 00000000..c89584db --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00017/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00017", + "parentTask": "M16-GAP-00016", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "OBJECT_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00016/manifest.json", + "sha256": "8d66f1e936cb08b6991465c795c12e7fa65ac0b9ae166eceec5aada32162fb10" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00017-datablock-Object.blend", + "sha256": "527eefc6ea01671a21634a3191790a8228038dd72a0744b6f00969be048e36ef" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00017.py", + "sha256": "64bb9f488573946dcf7d2358bd5d5f540055bb2813942e98ed154da179cb201b" + }, + "desktopChecker": { + "path": "tools/web/check-object-desktop.py", + "sha256": "3cb263b0bd2606cdce38bd433f90d50e738e93bf482c9fd16217306efb1521c0" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00017/object-desktop-report.json", + "sha256": "6c9b16af1d114b00df2711b095778eef239c27b55588063d68872434f08631fd" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00017/object-local-exact-report.json", + "sha256": "38fbe19a794e05d1a05c0df5de7fca919c229c179ac59c452df08cc0c827ca91" + } + }, + "nextTask": "M16-GAP-00018", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "b4a5475d503e53f1405a5c3339d231947151b85f3b98e1072f811422d5385f99", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "3c2c69a66d60692049956530c2570db377e5d10838d0048aa4e0f3fb210f9c62", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "7d96e706de6b42f4372d937708600be150190ae593e214066a06d030bcac8b73", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "4a33528e8bd4d50956e741cba93ab0215350943c59f56b7c82e18df19f4ee450", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00018/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00018/manifest.json new file mode 100644 index 00000000..8a236521 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00018/manifest.json @@ -0,0 +1,97 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00018", + "parentTask": "M16-GAP-00017", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "PARTICLE_SETTINGS_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00017/manifest.json", + "sha256": "f6e791e0e3df1e13ed6e85fa007c2d88b3aea9bd56e85d345a80e2cc6a5e01d3" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00018-datablock-ParticleSettings.blend", + "sha256": "1a51117f3225e6fb1aa98fd135fc39bbfb9444f741f89956c52bc3e0252fc6c0" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00018.py", + "sha256": "c2b7b9c33e92952e9f10ca08b854b4bc0603350aa66f0277d08af4513d18d45e" + }, + "desktopChecker": { + "path": "tools/web/check-particle-settings-desktop.py", + "sha256": "d49ba0b987adf412c1692819b041a35905330f2fa633464c9425932450419afa" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "api": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "sha256": "1944fbb1153eca61e4f6c8589f16fced60bfac7f4e96da1355428b263651e2ae" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00018/particle-settings-desktop-report.json", + "sha256": "5d1c855ee65c7dc8f715341ed0a2b1269aa1a2f6e3ecde5ca590f393af3042eb" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00018/particle-settings-local-exact-report.json", + "sha256": "fb3eb8a193cbbf8ee8b98457042d560977e309ba1496903abf638e93c7641b6f" + } + }, + "nextTask": "M16-GAP-00019", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "70356fe4075db1614907a4da3bfb9fb659b17a76d34f48f4811a1ca0f32d9fad", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "bc8083ba6ebc4374ad10be004d2ca0a18919f47368c3171485f3bc7b75934e38", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "originalSha256": "7d84b022e0ae7fb76989054c55daee0491045dfbd153d7fae49109370a8cdf6f", + "resignedSha256": "1944fbb1153eca61e4f6c8589f16fced60bfac7f4e96da1355428b263651e2ae" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "330b1219735fe881dc5bf96ce34c1ce8fc6df2e16c5672c67345deffb015563f", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "11fd301ef1823d37aaedad00bd9946e13876c517660852bd20f574d12e815d97", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00019/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00019/manifest.json new file mode 100644 index 00000000..c85160a7 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00019/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00019", + "parentTask": "M16-GAP-00018", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "POINT_CLOUD_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00018/manifest.json", + "sha256": "4713266b567a14e1b9a7c2cffeb7806e054742b83684e82bfa592a0b900c5533" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00019-datablock-PointCloud.blend", + "sha256": "57ef80323ae70ce21842c00b3777e8ef484b7e332a6645c165fd5f029a522089" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00019.py", + "sha256": "36ead922241d5372ba4ae5c4656d449faeb62bb8958b4e96231c09b6b316fa13" + }, + "desktopChecker": { + "path": "tools/web/check-pointcloud-desktop.py", + "sha256": "7223e0684f4bb8559228ffdd118b69dfd31c42959643ed17b885f13bb57eb400" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00019/pointcloud-desktop-report.json", + "sha256": "c3c874f8f5e95c97f2862d6b2c4711ac78a90f3a5de289bfdb9a5ae0459dc1d7" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00019/pointcloud-local-exact-report.json", + "sha256": "e304b3dd36b08a43307f1dc2a70a14cb6b29214d324b18faf8d8225f7342b23d" + } + }, + "nextTask": "M16-GAP-00020", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "a1295ac16691ba55c7ca803030ac304ba0cbca7876695b0bf30658b29547c509", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "bc8083ba6ebc4374ad10be004d2ca0a18919f47368c3171485f3bc7b75934e38", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "330b1219735fe881dc5bf96ce34c1ce8fc6df2e16c5672c67345deffb015563f", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "11fd301ef1823d37aaedad00bd9946e13876c517660852bd20f574d12e815d97", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00020/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00020/manifest.json new file mode 100644 index 00000000..81173a18 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00020/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00020", + "parentTask": "M16-GAP-00019", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "SCENE_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00019/manifest.json", + "sha256": "cbd811536b02f195f1370a85fd2c13788effe1fb11375776c118390a761c9f28" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00020-datablock-Scene.blend", + "sha256": "c12826c7a71f092ee8dc3c32495be295dae95f1f96e6b8310476893c7c76a81b" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00020.py", + "sha256": "51890c98ae84cd4751896e0e84b9b63d5caa3fa58d47bba6f4074489b88dc24e" + }, + "desktopChecker": { + "path": "tools/web/check-scene-desktop.py", + "sha256": "ada4022a310510ffe37ccd7ef31a6bab8b37dfbd7a0b914f40fe379ba13db083" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00020/scene-desktop-report.json", + "sha256": "fc9fdf2a37f36327e7456d3c17dcfd240b67ce27d9d2f0861fde5db237b2675d" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00020/scene-local-exact-report.json", + "sha256": "d964c61c0717865a42574c28d5e4fffdcb45c3c962e9bce4608c5f9438828504" + } + }, + "nextTask": "M16-GAP-00021", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "092661081aefd4bd63ecb510bfe3cd4c34f3701e55ca2979e593f42c973a7b2a", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "bc8083ba6ebc4374ad10be004d2ca0a18919f47368c3171485f3bc7b75934e38", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "330b1219735fe881dc5bf96ce34c1ce8fc6df2e16c5672c67345deffb015563f", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "11fd301ef1823d37aaedad00bd9946e13876c517660852bd20f574d12e815d97", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00021/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00021/manifest.json new file mode 100644 index 00000000..72eed33b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00021/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00021", + "parentTask": "M16-GAP-00020", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "SCREEN_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00020/manifest.json", + "sha256": "4cd3a4de64fbb95386f17e096a50622c3f56380635881e2539c10d65db820b1f" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00021-datablock-Screen.blend", + "sha256": "0975c534e78b6a05c7c10adc7313cb611a3350cc3c7f6e9bfd4013c334b9f376" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00021.py", + "sha256": "f6a97289626552e3e319fe72f3932beb610289c7da8710c0d4219312b0566c1e" + }, + "desktopChecker": { + "path": "tools/web/check-screen-desktop.py", + "sha256": "16ba526404558472d2dacc48e6f51440031556483dfeab9b52a43f69a3d5644e" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00021/screen-desktop-report.json", + "sha256": "41a5d58883238d89e4e6ed3805b452bc165632b63e0065109529de3c0e230ecd" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00021/screen-local-exact-report.json", + "sha256": "792206b5b046411d921b3b916d2b76222aab39050df8028a64c39437e285023c" + } + }, + "nextTask": "M16-GAP-00022", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "dbd2d79fd5dba004e91c79eafec46a1e520804ea447aa1b594256cee801cd88a", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "bc8083ba6ebc4374ad10be004d2ca0a18919f47368c3171485f3bc7b75934e38", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "330b1219735fe881dc5bf96ce34c1ce8fc6df2e16c5672c67345deffb015563f", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "11fd301ef1823d37aaedad00bd9946e13876c517660852bd20f574d12e815d97", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00022/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00022/manifest.json new file mode 100644 index 00000000..d08baa42 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00022/manifest.json @@ -0,0 +1,97 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00022", + "parentTask": "M16-GAP-00021", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "SOUND_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00021/manifest.json", + "sha256": "e56411fd47be3a03814560e9b8e1d6ece0e5e5a50cbdb44256e20e0976daea54" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00022-datablock-Sound.blend", + "sha256": "42785a635a7ac560a01e00135555c31e20a60c454ffb62a466da25ddbe3b5c39" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00022.py", + "sha256": "10ef16727dfee1c69ea7e6b48f151016cc02a18a6586c478c286be2ed0c7a3ea" + }, + "desktopChecker": { + "path": "tools/web/check-sound-desktop.py", + "sha256": "aeeebdac9d14740843cc703150143087b7985138372ac1278fd3894e850c1ab7" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00022/sound-desktop-report.json", + "sha256": "cb23ace7920d6762f931296701a596f3453ccfa7e966447d0efa198b92d65a69" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00022/sound-local-exact-report.json", + "sha256": "741b67484c81c156c51b5b88e52f32d5e0114292dcbe689c641d2670cd4e82bd" + } + }, + "nextTask": "M16-GAP-00023", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "a9fc6a8b9fbe567a20b68b794f57eca1a383e6637146e5513d7f79a8f7b", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "4651844c5e9c4e00ee1186f102a78d86d184df8980409d73825ee2449e25eb77", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "841b33000ca9b1bca24a029a1a5d82afc653189f8209865a66bdfa58716833a7", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "1e01c786313bd4b20748a2eb474c350c9b9ab1a0a216f2c6362405a9fc20a5da", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "1e01c786313bd4b20748a2eb474c350c9b9ab1a0a216f2c6362405a9fc20a5da", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00023/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00023/manifest.json new file mode 100644 index 00000000..be3f68cd --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00023/manifest.json @@ -0,0 +1,97 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00023", + "parentTask": "M16-GAP-00022", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "SPEAKER_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00022/manifest.json", + "sha256": "fac4a48e35b052acec9e50a5b26c801e532a1faa80185eda477dfa8a05f8dec3" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00023-datablock-Speaker.blend", + "sha256": "6e422e16f6e020af7ab0a6f3fad3c721b42c924c8a0392bc98546c3f39ee9d23" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00023.py", + "sha256": "7bb8465ba094c9f7edbfbb66fd9f6d8b0a2e2b955d5fb990313daea09adbd22c" + }, + "desktopChecker": { + "path": "tools/web/check-speaker-desktop.py", + "sha256": "4f2b6e3359aeba90754ade475f1683acccc8d2f44a75552c3b04f79a0ddf13d5" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00023/speaker-desktop-report.json", + "sha256": "8ee6e52568f2c37098a8f64983f90243b2df69df1c16a0c4eaae855a7e9fad9d" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00023/speaker-local-exact-report.json", + "sha256": "7d48447d03e39e5e29f41bf18a95040c5436ed73229cee1bdc32e09f7aae594d" + } + }, + "nextTask": "M16-GAP-00024", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "8db1897b073b8a995e70747daabd11e52c4e235a7f45d4fb3b6f93df642b8bd1", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "dda3f81b178856faf5d05a3e84d4820928e35bda66a47cdf52a55b443f50f015", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "abbc02872f89bfd2e488c3b4c4e01c69a1e366bdfa3871e8564f1599b05d784e", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "76264df82ce5f21d6b3af2514bda865f902f8485be37cffa74145f2af387e5fd", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "76264df82ce5f21d6b3af2514bda865f902f8485be37cffa74145f2af387e5fd", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00024/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00024/manifest.json new file mode 100644 index 00000000..8ef25487 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00024/manifest.json @@ -0,0 +1,97 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00024", + "parentTask": "M16-GAP-00023", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "TEXT_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00023/manifest.json", + "sha256": "f845a8578a2ce9f106f0ca8ea02ef6ccddca87086e779eb7ddcf9fef5b8934f2" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00024-datablock-Text.blend", + "sha256": "7999f758dfbf7b5984f16464d1e5346d806c54c83ca68a583df54942c5e3b7d3" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00024.py", + "sha256": "85a16b7ebb4b00dffdc9277d11780b744267e0c789e75844b2749517c23e8ebd" + }, + "desktopChecker": { + "path": "tools/web/check-text-desktop.py", + "sha256": "9ff73dbca7389f05aaf4834c4fb5a734a5c2cb2ef5e1a65962edbc0662ce0557" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00024/text-desktop-report.json", + "sha256": "50006b807fc8f41603e939f9f2748c4d5cacfcaa19a1c60a7270e9f9962b621c" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00024/text-local-exact-report.json", + "sha256": "73c22077cbbe47e1effd7c24d310e43010fbd48925587cb00efe507838b4f1eb" + } + }, + "nextTask": "M16-GAP-00025", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "1c655b9500d50d1c08bf3beb77bea93165c194dcca3bca2ed3fad9e503db18b6", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "c1dc68608100b359d9b6451cc02820849bd516b553bc91bd80e7cf50a8218ea9", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "ebf7c55085be0ae10f1c97efc4e0a4d487f79ced689810138ee80401995000e3", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3a757942bf7514850b1d6f6e1abc008aeea99640785fe60951ae18d3b3dcb301", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3a757942bf7514850b1d6f6e1abc008aeea99640785fe60951ae18d3b3dcb301", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00025/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00025/manifest.json new file mode 100644 index 00000000..5b5e5293 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00025/manifest.json @@ -0,0 +1,97 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00025", + "parentTask": "M16-GAP-00024", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "TEXTURE_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00024/manifest.json", + "sha256": "681be76208e29366e616a4d8fa51f15e05ec27d2e60b46b140053646468f759d" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00025-datablock-Texture.blend", + "sha256": "482857e3b3868f7d4dc87d9b53c5552d10d608ed26a301cc5a6a080b275651c2" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00025.py", + "sha256": "849dddfddf9841b866cf2531af3f74b3fc42b5b6303eaa5f2273cba2a0b1cee0" + }, + "desktopChecker": { + "path": "tools/web/check-texture-desktop.py", + "sha256": "a91f9f69d389df79d7292e75ad64bd7a65a19bab063bac2ba311342b7d4fbb03" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00025/texture-desktop-report.json", + "sha256": "ead3d25554f69580a272c3a4c45139632592ba2ca83370c79174683b2c7a982a" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00025/texture-local-exact-report.json", + "sha256": "4e503817eb7053370b627cc9a2edb03fc2ac8b8919534a90064133eaf9e0f4e7" + } + }, + "nextTask": "M16-GAP-00026", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "aaa9ead20a4b7f8d50acf93af7f4ea3a791de8996f75d7f6321278959d3689fe", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "2a15121e4fa1cb8f04c0112458d5ef0fa92ed92d1efc49e1b938d2c00cfe58da", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "1dae06614aea42c97949b7f13f0d38663e8fce1eb18d475bf1479e326064b16f", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "43d84158eaeec907c5f04018ceb4e3a6948860243a619f0d035be3c5c6a63a5a", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "43d84158eaeec907c5f04018ceb4e3a6948860243a619f0d035be3c5c6a63a5a", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00026/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00026/manifest.json new file mode 100644 index 00000000..cc6df27e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00026/manifest.json @@ -0,0 +1,97 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00026", + "parentTask": "M16-GAP-00025", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "VOLUME_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00025/manifest.json", + "sha256": "acc4b2d2d617b49bd274ae18e07475885eaa566269fe038c7df173a6a58f4964" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00026-datablock-Volume.blend", + "sha256": "725ee2ac502aec3ffe6fc91bcaaf9ce1c8225dc71b3162b10db8d598bed0b8d0" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00026.py", + "sha256": "e8cf1a2397e5a03f6cd246add30287ead990b9bfb932e34bfbbb4e95d7a98036" + }, + "desktopChecker": { + "path": "tools/web/check-volume-desktop.py", + "sha256": "fd5b2110877e9372056292b543d23f1912ffcad32ea5d882054110202c6e3b16" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00026/volume-desktop-report.json", + "sha256": "60c12879158b8a8e548a135778f90618cec8d42b39a95e460398fe6cfe563c86" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00026/volume-local-exact-report.json", + "sha256": "649e2bace33f8d9708b3ce0b4979e0cd6e9a0b78b8f4ee2b75776a94e68362be" + } + }, + "nextTask": "M16-GAP-00027", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "025f75b03eb228956f35084c5413f8fac96ed1837ac4938a734e7db0c0c0fb67", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "2a15121e4fa1cb8f04c0112458d5ef0fa92ed92d1efc49e1b938d2c00cfe58da", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "1dae06614aea42c97949b7f13f0d38663e8fce1eb18d475bf1479e326064b16f", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "43d84158eaeec907c5f04018ceb4e3a6948860243a619f0d035be3c5c6a63a5a", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "43d84158eaeec907c5f04018ceb4e3a6948860243a619f0d035be3c5c6a63a5a", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00027/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00027/manifest.json new file mode 100644 index 00000000..73559953 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00027/manifest.json @@ -0,0 +1,97 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00027", + "parentTask": "M16-GAP-00026", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "WINDOW_MANAGER_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00026/manifest.json", + "sha256": "08f5fe0a60d924bbd0f3cb85d95678d05a62d16940703cb989cf9201e73cbf73" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00027-datablock-WindowManager.blend", + "sha256": "88052ddeb5b8e35ce537910d9ce3b005b92c58b001f9b74a369a3c854ccebb23" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00027.py", + "sha256": "f93ea3ef289853f45ad9e1553007e47e89376d15ac2dd2e623ed2c3b783cd036" + }, + "desktopChecker": { + "path": "tools/web/check-window-manager-desktop.py", + "sha256": "29ac8b293e20b71a917fa834809cd15d881362cec0749a6ea1f7241b7409c6f1" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00027/window-manager-desktop-report.json", + "sha256": "2b50759c964b06b38410f44c11679616a8f172d5bc05bd2e5b54a416ec781c15" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00027/window-manager-local-exact-report.json", + "sha256": "9e92475873db0072f32d708e6f1468387637fac39008c4928060c39a719a5dc0" + } + }, + "nextTask": "M16-GAP-00028", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "aa84d8b44354d9c594d9b67a67f0b72a8f1789c9ac87af57bfde917d721fb09b", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "f7cacc6e4ca79c761f74dc44baeb95c704af74b6b575116c3667c6e513626cb7", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "50e407db59ec8dc6f73084c3d2db51e2e32bcaa8134f57dea7d130a3683ce06d", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3792889825b9488e3644baf3e4d03b4297683bc628c2c66f1823e541f4b4ca6c", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3792889825b9488e3644baf3e4d03b4297683bc628c2c66f1823e541f4b4ca6c", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00028/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00028/manifest.json new file mode 100644 index 00000000..f1d71c76 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00028/manifest.json @@ -0,0 +1,97 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00028", + "parentTask": "M16-GAP-00027", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "WORKSPACE_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00027/manifest.json", + "sha256": "1feb7365ae2590ada5408d47075d8151e9c023918b4822668619b4ba7c07f8e3" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00028-datablock-WorkSpace.blend", + "sha256": "fbb4fc85b46a30dd8913e5d2d75b73688cef1a3f64861337c7fbd94a687c87df" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00028.py", + "sha256": "6d1a74f7340820917461720442888c5a705ac8140d6ad0d4809aace082c27469" + }, + "desktopChecker": { + "path": "tools/web/check-workspace-desktop.py", + "sha256": "5e01f8a7802eface955fcb0396c99a3f0c2570751bb672cd2b3401389e80cf08" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00028/workspace-desktop-report.json", + "sha256": "4ab3274ecfcd512964db37e661f8b5e8c53077687094115c11dab4fbe39a12b9" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00028/workspace-local-exact-report.json", + "sha256": "3b12cbb0533284f29ad1d0f4659ecd1ce128ae5b24545610819f994252b79e6d" + } + }, + "nextTask": "M16-GAP-00029", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "9beda9925a369ce09e2aa0f6955be2b3df158fab70a8e62343fae230a1357198", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "1f962be51a8201d1d0a119761a51de7864fbda4e553a13dcf7b14f19fbec79db", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "bf5361e4b5e3e2105b59494c548617b463063e64a340398494cde77632b9424c", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "bf5361e4b5e3e2105b59494c548617b463063e64a340398494cde77632b9424c", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00029/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00029/manifest.json new file mode 100644 index 00000000..72b5009b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00029/manifest.json @@ -0,0 +1,97 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00029", + "parentTask": "M16-GAP-00028", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "WORLD_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00028/manifest.json", + "sha256": "90c983a8c7602649ca536ade7131d5b0d726ef6834de2e1665c7e4656156c638" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00029-datablock-World.blend", + "sha256": "33501247b59cec137aa857b0bd4ea59526f30bb3632de9996e6026d4bd3f0401" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00029.py", + "sha256": "b57d5f058a3f3862d6c4a8e4383ebd8c544ec2118338298eb5756fadc8aa306f" + }, + "desktopChecker": { + "path": "tools/web/check-world-desktop.py", + "sha256": "fb4d115af8370f0d48a94ecc6d609eac5c0ca826a0f6d5bef90304b8c593d34b" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00029/world-desktop-report.json", + "sha256": "2818f250b67524e0517ad117619a00fbcb09f51141c4f228e3c0095f0ee4afad" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00029/world-local-exact-report.json", + "sha256": "22eacfe0c2fa9cdce05b0965fac8f8f59bbd17726a89606678a8d3ed804dbf4d" + } + }, + "nextTask": "M16-GAP-00030", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "df6865db07b9b9456bfed583277aa0cdbec5ed39f298d87251fe8bcdecdcf909", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "1f962be51a8201d1d0a119761a51de7864fbda4e553a13dcf7b14f19fbec79db", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "bf5361e4b5e3e2105b59494c548617b463063e64a340398494cde77632b9424c", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "bf5361e4b5e3e2105b59494c548617b463063e64a340398494cde77632b9424c", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00030/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00030/manifest.json new file mode 100644 index 00000000..3febb292 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00030/manifest.json @@ -0,0 +1,97 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00030", + "parentTask": "M16-GAP-00029", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00029/manifest.json", + "sha256": "2475bd5cd1dad8bc459f3a2508b8006af77b18464be35f42ef140e7af6796d5a" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00030-modifier-ARMATURE.blend", + "sha256": "4725dda93e7bece9fb121a5cf91856c43ac043a598c038b297eef8aad95d2552" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00030.py", + "sha256": "f3fb565611e07d2eb5a30f6557a3848d5f1d6e5231dcc9d4da80ec4973158f24" + }, + "desktopChecker": { + "path": "tools/web/check-armature-modifier-desktop.py", + "sha256": "3cb59a6bd15b97a5fb33fc5643bd58fe3155264a2598e1cdae17aa72626e146f" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00030/armature-modifier-desktop-report.json", + "sha256": "32ca0be514d0f5b02150c23a42e99784903da9c211aebb7f2736229daa069220" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00030/armature-modifier-local-exact-report.json", + "sha256": "fad61c1ebb8396b4af4143e7079a7fc1db4bf3f7ff945ce4717650c5493510a5" + } + }, + "nextTask": "M16-GAP-00031", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "4dd273697a66ec6262558bff8948e7c5042d11869b2b6687490f3b04ae703542", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "1f962be51a8201d1d0a119761a51de7864fbda4e553a13dcf7b14f19fbec79db", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "bf5361e4b5e3e2105b59494c548617b463063e64a340398494cde77632b9424c", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "bf5361e4b5e3e2105b59494c548617b463063e64a340398494cde77632b9424c", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00031/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00031/manifest.json new file mode 100644 index 00000000..88f3679e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00031/manifest.json @@ -0,0 +1,97 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00031", + "parentTask": "M16-GAP-00030", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARRAY_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00030/manifest.json", + "sha256": "65f93b217bc35c886da135c52079ed52df24d9834b67551a1fb6c302da313014" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00031-modifier-ARRAY.blend", + "sha256": "ff8619e63a5611dbc78599f849d27f0e4e2dc3c1c5849e9db86349e00106c23b" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00031.py", + "sha256": "28504da60ebf881eda9ed407884b403029bb8ced6131c425b64f512c82b2d292" + }, + "desktopChecker": { + "path": "tools/web/check-array-modifier-desktop.py", + "sha256": "82d5e59a60324101b1c97a277ab07afa2e1c52c55d1914fee27076d1c1619489" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00031/array-modifier-desktop-report.json", + "sha256": "739ae5333a5046cd4b0c60333eec89bf4f0bb9508d95022238a173f4a698833f" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00031/array-modifier-local-exact-report.json", + "sha256": "df9326e8ddbb5ace859ade67dff067229c55f19536c568ee6e102d981971c17a" + } + }, + "nextTask": "M16-GAP-00032", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "f6dd8efad7849574ae479a707792e2b3f837b8c22e434afa44b5fe60a85673ec", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "1f962be51a8201d1d0a119761a51de7864fbda4e553a13dcf7b14f19fbec79db", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "bf5361e4b5e3e2105b59494c548617b463063e64a340398494cde77632b9424c", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "bf5361e4b5e3e2105b59494c548617b463063e64a340398494cde77632b9424c", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00032/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00032/manifest.json new file mode 100644 index 00000000..5b515e14 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00032/manifest.json @@ -0,0 +1,97 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00032", + "parentTask": "M16-GAP-00031", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "BEVEL_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00031/manifest.json", + "sha256": "b2b60b46152a9fcb177ec04166fd096d6e595ba66fc8591959bca91df0729bad" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00032-modifier-BEVEL.blend", + "sha256": "3a27883c1faf12a8a0281b7c0e9747915784138efb24c0f1680b525cd50b84c7" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00032.py", + "sha256": "1af887a0beed22a1eaf199723535e2d1952c7458ea60bf22485c5b433dc17d2d" + }, + "desktopChecker": { + "path": "tools/web/check-bevel-modifier-desktop.py", + "sha256": "abf8dd2a65c48883c8e8ad7c022d06629206f2e55a63184a8e26abc44e678279" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00032/bevel-modifier-desktop-report.json", + "sha256": "a6e1e88a9e418bb18b2a323285c0d05a07e6c038bf2cf4f7e04bfa188900daf3" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00032/bevel-modifier-local-exact-report.json", + "sha256": "318d68f88e3838fc3920d33a8d1b2995411de39c9c2f39d97e1f2c3b4e7a7c1e" + } + }, + "nextTask": "M16-GAP-00033", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "caac80c57f7e403581a63224419c95625f61ca2ea58984a691396b1b101c306a", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "1f962be51a8201d1d0a119761a51de7864fbda4e553a13dcf7b14f19fbec79db", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "bf5361e4b5e3e2105b59494c548617b463063e64a340398494cde77632b9424c", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "bf5361e4b5e3e2105b59494c548617b463063e64a340398494cde77632b9424c", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00033/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00033/manifest.json new file mode 100644 index 00000000..22e78136 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00033/manifest.json @@ -0,0 +1,97 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00033", + "parentTask": "M16-GAP-00032", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "BOOLEAN_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00032/manifest.json", + "sha256": "6009f0bdb35b49e2cc387cfa6661bde7f155f81c07476ef7d4700e056279f64b" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00033-modifier-BOOLEAN.blend", + "sha256": "ea909948fb2b92f288684886a3d488f74a707108dc94778e9a78a6cb082cbe38" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00033.py", + "sha256": "4eeb3bae0015883cd91ebebed89b78ebd5c7732d3be16ac88561eca87eb5d053" + }, + "desktopChecker": { + "path": "tools/web/check-boolean-modifier-desktop.py", + "sha256": "b84d0c7d6cc1554d59de2a11ce4140d504816fe140e74faf892a5495e8c3905f" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00033/boolean-modifier-desktop-report.json", + "sha256": "2f0c9dfb183f39a65ef018d1618ef6f12fe05ada0a6c7ff40011491686ea00c7" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00033/boolean-modifier-local-exact-report.json", + "sha256": "aa33f396b5910e3829c1965e62c80bd1267ac764a58862b72be555ebd5bd1b0d" + } + }, + "nextTask": "M16-GAP-00034", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "e0d2371544ac6ed297bc3f13830758c11bfc744cd2697d9ba47c75048d7e7298", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "1f962be51a8201d1d0a119761a51de7864fbda4e553a13dcf7b14f19fbec79db", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "bf5361e4b5e3e2105b59494c548617b463063e64a340398494cde77632b9424c", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "bf5361e4b5e3e2105b59494c548617b463063e64a340398494cde77632b9424c", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00034/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00034/manifest.json new file mode 100644 index 00000000..2288d8cb --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00034/manifest.json @@ -0,0 +1,97 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00034", + "parentTask": "M16-GAP-00033", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "BUILD_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00033/manifest.json", + "sha256": "5343b375977ea4e9dcfffa023bbcb6313a2a3d2e23b76b35e5b138f60d7f5a29" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00034-modifier-BUILD.blend", + "sha256": "46b05aed641ab8cd6cc280587cf9672223190c2b730af8d8c21f1cf98cb68901" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00034.py", + "sha256": "4523e086c326df712e621a9fdbc54bd29af0d94d241a09c437a247f824bbd8db" + }, + "desktopChecker": { + "path": "tools/web/check-build-modifier-desktop.py", + "sha256": "18bbc10043f8a8820370fb4ea6c5a411398e4622c7956fea20add56f1f8d1087" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00034/build-modifier-desktop-report.json", + "sha256": "b05d06b2408cfa2b0509489434d80489e11d967748f48639d1d50febbcd64974" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00034/build-modifier-local-exact-report.json", + "sha256": "6e5e3f89148decd1996802bddf903ee704700308be90e1af9c3c66e7e58796fa" + } + }, + "nextTask": "M16-GAP-00035", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "ff620b70f28a4e3c67a2c217929732bbcf43e86a476cccb3ece21c47356adf48", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "1d11bd9ceab05a8937d50b25601829f53c7d827ed7f38577ab1624c118d486e6", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00035/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00035/manifest.json new file mode 100644 index 00000000..c36d836d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00035/manifest.json @@ -0,0 +1,97 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00035", + "parentTask": "M16-GAP-00034", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "CAST_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00034/manifest.json", + "sha256": "137c50a05af32efdab54974f9f63d980394fff204f1ec39b2f522324f906ace6" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00035-modifier-CAST.blend", + "sha256": "7dfe1faa6b605f6bd394f07c4da96a3e70401eeedd00714b3dbf533d0100ed4e" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00035.py", + "sha256": "24e6f54012d0454bfd6dc99a0fa6fe9fbfd3482781534479cdc1afb461305324" + }, + "desktopChecker": { + "path": "tools/web/check-cast-modifier-desktop.py", + "sha256": "c8a28c4f06077a9649b150cde2537055f64c0b27163b820148ba81e36b49c251" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00035/cast-modifier-desktop-report.json", + "sha256": "46d920371f2b315034286e20db585b5830edde5c12f97470db05141acdfa3975" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00035/cast-modifier-local-exact-report.json", + "sha256": "56d0c12614b99a60617ca6b3aaa8308c103b0d926c67ffa6d374713f1939923c" + } + }, + "nextTask": "M16-GAP-00036", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "6bef66d353d44bbca3317bcac48e9b00d22815d97945216fb201fbf555b88131", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "1d11bd9ceab05a8937d50b25601829f53c7d827ed7f38577ab1624c118d486e6", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00036/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00036/manifest.json new file mode 100644 index 00000000..e8f47a73 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00036/manifest.json @@ -0,0 +1,97 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00036", + "parentTask": "M16-GAP-00035", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "CLOTH_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00035/manifest.json", + "sha256": "ed79f18df0fdd6e0ee1960df56f70801bc81a604659d4f1349c3f68705912d6d" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00036-modifier-CLOTH.blend", + "sha256": "c2da02610f891f4de38f3b8d55929a599c84528d3c67317a8e698854367d2d74" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00036.py", + "sha256": "219d0f2ecc7b67050865a46163e64cf7b28de75ce5c8cc52cdcf3a32817bd093" + }, + "desktopChecker": { + "path": "tools/web/check-cloth-modifier-desktop.py", + "sha256": "308e449c9d896a870f33c8eb15fb6604a4fe7a22f646d754d356d5bc55fd94dc" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00036/cloth-modifier-desktop-report.json", + "sha256": "bcfa83207cc5d5d6d971c41d8bb649d272c7e8f03e7499dc0efa4f3bbcb4d1ef" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00036/cloth-modifier-local-exact-report.json", + "sha256": "37344e3d5c930fb6815016b03432a6f86a2e763a89546e2e435e0f957f99270a" + } + }, + "nextTask": "M16-GAP-00037", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "6e6a8eff5d7d90d043e530802c76ae5607210de95ff603e95cf3e48f018f830e", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "1d11bd9ceab05a8937d50b25601829f53c7d827ed7f38577ab1624c118d486e6", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00037/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00037/manifest.json new file mode 100644 index 00000000..b4154c75 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00037/manifest.json @@ -0,0 +1,97 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00037", + "parentTask": "M16-GAP-00036", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "COLLISION_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00036/manifest.json", + "sha256": "8b451d833ea14dbac429a03f4c552ca82c16c3baba378d988d30d12f3e951a86" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00037-modifier-COLLISION.blend", + "sha256": "20cd128c83e9729377864f496c85393a2090c72a22f7d1c0b15f834293100764" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00037.py", + "sha256": "b96eb3c62c590e55be3e442757a40c30b3b9c1deb8abc67d71f61b00b9c61fc1" + }, + "desktopChecker": { + "path": "tools/web/check-collision-modifier-desktop.py", + "sha256": "21d816a1c929b96c873d15a719ee79187ba7201d79740a2ba9ccf81e4e566a32" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00037/collision-modifier-desktop-report.json", + "sha256": "be458864a8ce628d18002e69cbba9d524377fadff0bb7a3c3a6ed07a6fcb6bc0" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00037/collision-modifier-local-exact-report.json", + "sha256": "3352147756f312df1ffb4b9c889347e74403147cafb770128c6fbd61810acc8a" + } + }, + "nextTask": "M16-GAP-00038", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "ca0e546f0c8f7a7a0d209d7a4e97de38d78fc7dccfdf50d35dd772123533bad4", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "1d11bd9ceab05a8937d50b25601829f53c7d827ed7f38577ab1624c118d486e6", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00038/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00038/manifest.json new file mode 100644 index 00000000..09688c23 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00038/manifest.json @@ -0,0 +1,106 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00038", + "parentTask": "M16-GAP-00037", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "CORRECTIVE_SMOOTH_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00037/manifest.json", + "sha256": "a4506659340af52a0ede5af619362e5a3c07463a2718cb7cdc64f97647145d71" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00038-modifier-CORRECTIVE_SMOOTH.blend", + "sha256": "059890c5b228851c6e32643e71a142523cb1c0f02726a72902a6b88e24e71fbf" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00038.py", + "sha256": "e0726e2db3c360e0397d6aa1d480a63e5f4800c381c9d4e1cde33e36ebc0a5dc" + }, + "fixtureHelper": { + "path": "tools/web/generated/modifier_gap_fixture.py", + "sha256": "85d5bc91e433a402099aeefccb5bed1a3711c88ea3484ac6083ce45a6c4517aa" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00038/corrective-smooth-modifier-desktop-report.json", + "sha256": "81b0dac10d007f32a7ccd1939fb82494ad230cfd09a5d5e3d9051716631a6012" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00038/corrective-smooth-modifier-local-exact-report.json", + "sha256": "e0f51299b53f2694cc0421d249acc633d6d3db07d2302d1358927aab15981d0b" + } + }, + "nextTask": "M16-GAP-00039", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "d548079159b6680090c29cd344d846aef39fea32bca09cc698531b0de0a2bb68", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "2ecbf4c74f335a96772479742407d51926fc476416e7d3cff9aace9ae74ceb91", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "1d11bd9ceab05a8937d50b25601829f53c7d827ed7f38577ab1624c118d486e6", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00039/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00039/manifest.json new file mode 100644 index 00000000..61015fab --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00039/manifest.json @@ -0,0 +1,106 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00039", + "parentTask": "M16-GAP-00038", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "CURVE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00038/manifest.json", + "sha256": "047c4cd2a500a80e4be02ad2f55d796b03609f9327090e4369225f6aba4fbf6e" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00039-modifier-CURVE.blend", + "sha256": "b68aa51151cf19b1795701967eb1fa514387c04b967c646547ed33a727a8a58a" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00039.py", + "sha256": "3709078f49c92c34424c6e47d7f8870ba81c0bc2765bb5522199adfd4231e8e5" + }, + "fixtureHelper": { + "path": "tools/web/generated/modifier_gap_fixture.py", + "sha256": "85d5bc91e433a402099aeefccb5bed1a3711c88ea3484ac6083ce45a6c4517aa" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00039/curve-modifier-desktop-report.json", + "sha256": "7758f93e53d1b01a80e7cc2d4ce4948cadfb6882a2eec0d34e7e9fbdc7ac69bf" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00039/curve-modifier-local-exact-report.json", + "sha256": "7b3cf6ec8eec1a1b0c8d630578bfa09b29d8e8597ed860aa98737e7c7798cf91" + } + }, + "nextTask": "M16-GAP-00040", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "d548079159b6680090c29cd344d846aef39fea32bca09cc698531b0de0a2bb68", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "ed94ef09c48453aecea597074d9e28e48abb5c99f6967d26f5c70f1e462b9d9e", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "1d11bd9ceab05a8937d50b25601829f53c7d827ed7f38577ab1624c118d486e6", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00040/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00040/manifest.json new file mode 100644 index 00000000..f1cf8063 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00040/manifest.json @@ -0,0 +1,106 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00040", + "parentTask": "M16-GAP-00039", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "DATA_TRANSFER_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00039/manifest.json", + "sha256": "4f85c33a57e35c628ce8bf041bdf30df37e298de9cc961c93c969e8bfbb0e276" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00040-modifier-DATA_TRANSFER.blend", + "sha256": "5cbcab6db651f6b44387e6688cf02a8813aeeccb07e6fdc5fbb6e4ac34da050b" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00040.py", + "sha256": "62aec1123186b57c5e1ffa58eea9833ea5d996a7509d49473331ac5f1843be44" + }, + "fixtureHelper": { + "path": "tools/web/generated/modifier_gap_fixture.py", + "sha256": "85d5bc91e433a402099aeefccb5bed1a3711c88ea3484ac6083ce45a6c4517aa" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00040/data-transfer-modifier-desktop-report.json", + "sha256": "3b75a6318947c1c18b04af6a05bc275aac4f6fde4352cc249c431c64fde7174d" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00040/data-transfer-modifier-local-exact-report.json", + "sha256": "45c8b9c2b0a07902e7680fc44b648cd0fc349e4a248c52824c3ed70debb0c9a1" + } + }, + "nextTask": "M16-GAP-00041", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "d548079159b6680090c29cd344d846aef39fea32bca09cc698531b0de0a2bb68", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "6fd4494c21de3c807d31e244de8361156f5bd0a69b10529e3c80accc6a8743bd", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "1d11bd9ceab05a8937d50b25601829f53c7d827ed7f38577ab1624c118d486e6", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00041/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00041/manifest.json new file mode 100644 index 00000000..c558b314 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00041/manifest.json @@ -0,0 +1,106 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00041", + "parentTask": "M16-GAP-00040", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "DECIMATE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00040/manifest.json", + "sha256": "115064d3b16a2b8b36e19a8d92b4c3a4dd761c76ec57d67a803a66b02b2b03d8" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00041-modifier-DECIMATE.blend", + "sha256": "24161163630d29eedb3dd194070dff9b5a4f762f8a0ce4889b9e6a5310e54153" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00041.py", + "sha256": "241568c40f9308d09a1d33d87b47bb2549204f28820901133b778b640f086ec2" + }, + "fixtureHelper": { + "path": "tools/web/generated/modifier_gap_fixture.py", + "sha256": "85d5bc91e433a402099aeefccb5bed1a3711c88ea3484ac6083ce45a6c4517aa" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00041/decimate-modifier-desktop-report.json", + "sha256": "a056e81f2d0dceca465b185060d9874f4e0a10099b0820a42e50de3c20f56433" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00041/decimate-modifier-local-exact-report.json", + "sha256": "ac3efd1614cd440aff79d370f61a8243a69feac82d9aa4afb2c2d2ac2196d811" + } + }, + "nextTask": "M16-GAP-00042", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "95ba2c90e7126cc762703f12522362407027af84194b3c8ebd32caf1301b14b7", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "65c14296176456e1b8452569ad2cd5e0877587d6b0879e70cd9ed7188ad4fc02", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "1d11bd9ceab05a8937d50b25601829f53c7d827ed7f38577ab1624c118d486e6", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00042/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00042/manifest.json new file mode 100644 index 00000000..a662d893 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00042/manifest.json @@ -0,0 +1,106 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00042", + "parentTask": "M16-GAP-00041", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "DISPLACE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00041/manifest.json", + "sha256": "02591ee5f0094ba2c027fa4349effa0e1d731305467d005e474c14b2292b5b8a" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00042-modifier-DISPLACE.blend", + "sha256": "d6314c42a4bccfe4ff125bf19570bd8b52eb196f3cd3dfc82fcad21a5390ba76" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00042.py", + "sha256": "b9ed8fdb43f5b4b7b1830881db7c770432f0023627429ffe51989e16b2f09746" + }, + "fixtureHelper": { + "path": "tools/web/generated/modifier_gap_fixture.py", + "sha256": "85d5bc91e433a402099aeefccb5bed1a3711c88ea3484ac6083ce45a6c4517aa" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00042/displace-modifier-desktop-report.json", + "sha256": "8b5e69f2643e33607c36c6e786477d13c962eb041f64044be4b5d1277b2ad4a3" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00042/displace-modifier-local-exact-report.json", + "sha256": "f29ae1fd8d9dd004194347d9ab9d138d9c10db71ffae8baba554748de835fe09" + } + }, + "nextTask": "M16-GAP-00043", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "daf88b0692e1decb4799d8b93f96ec91a6e3f4abc30e56b6b0a414173b60d712", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "5f00762a7267b62865071874213492a0fd11fb15c2e0e90b14890bbadf254a00", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "1d11bd9ceab05a8937d50b25601829f53c7d827ed7f38577ab1624c118d486e6", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00043/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00043/manifest.json new file mode 100644 index 00000000..620df5b5 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00043/manifest.json @@ -0,0 +1,106 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00043", + "parentTask": "M16-GAP-00042", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "DYNAMIC_PAINT_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00042/manifest.json", + "sha256": "2420cf04248b07c100bd5421cdd127f4efd86eae3dccf41b12620f056d7423b6" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00043-modifier-DYNAMIC_PAINT.blend", + "sha256": "f715974fc528ade28e3658a9468a36ba2ac8605f009c284ada97de3dec5091f1" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00043.py", + "sha256": "1fb842dde99a67cda98ec4a6feb139216ad277388b490ff65699e9f742ae095a" + }, + "fixtureHelper": { + "path": "tools/web/generated/modifier_gap_fixture.py", + "sha256": "85d5bc91e433a402099aeefccb5bed1a3711c88ea3484ac6083ce45a6c4517aa" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00043/dynamic-paint-modifier-desktop-report.json", + "sha256": "d15d596c1c2fbf176c59b7fb933f6a2ceeb09ff578ba2cf894c12deec480471b" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00043/dynamic-paint-modifier-local-exact-report.json", + "sha256": "e04b9f0427010f85ffd5119eeb2d926ad0fa5d7099c67807ba46b6e66db5b0f3" + } + }, + "nextTask": "M16-GAP-00044", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "daf88b0692e1decb4799d8b93f96ec91a6e3f4abc30e56b6b0a414173b60d712", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "b87a00aae0be7c60980a80b2273cb2a2a93bc684b2666217ab7e3dee0cef2af3", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "1d11bd9ceab05a8937d50b25601829f53c7d827ed7f38577ab1624c118d486e6", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00044/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00044/manifest.json new file mode 100644 index 00000000..9b8531ed --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00044/manifest.json @@ -0,0 +1,106 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00044", + "parentTask": "M16-GAP-00043", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "EDGE_SPLIT_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00043/manifest.json", + "sha256": "5ad7947dc7e6fd971965a5fa6945875ee2d61325e81b9e600542a3048b3f61a9" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00044-modifier-EDGE_SPLIT.blend", + "sha256": "825b593e3792dbb69379ae5d83713226fe8818317c1b68285a19e9070bd76bae" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00044.py", + "sha256": "835413a7f88c4f2eb6b508d1913f1eb20489b8b5b1b1c35bceb2d094ee4f7292" + }, + "fixtureHelper": { + "path": "tools/web/generated/modifier_gap_fixture.py", + "sha256": "85d5bc91e433a402099aeefccb5bed1a3711c88ea3484ac6083ce45a6c4517aa" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00044/edge-split-modifier-desktop-report.json", + "sha256": "4f741f923ed60af4142691643fb70cd650b3e7c12507002595d8f52d78a41a61" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00044/edge-split-modifier-local-exact-report.json", + "sha256": "114e41e7c6f3238d4888b61f2d9fd59b37d4a9a4f2f7485fd1a9b9a48c8ba9ac" + } + }, + "nextTask": "M16-GAP-00045", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "0a7b1676dd3b1b3d944c971acd4518cc2a7f83004fb231560a1a622ef2d23043", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "567ff6cd2cc5508903e94b7979f831b2098276349138d804d4bd5b82e8d3a2a5", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "1d11bd9ceab05a8937d50b25601829f53c7d827ed7f38577ab1624c118d486e6", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00045/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00045/manifest.json new file mode 100644 index 00000000..64ab5a78 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00045/manifest.json @@ -0,0 +1,106 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00045", + "parentTask": "M16-GAP-00044", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "EXPLODE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00044/manifest.json", + "sha256": "ff007eb22d3a362fc0284cd60b90e2bec3257822d04bdc3eb46fca872d8a1ea5" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00045-modifier-EXPLODE.blend", + "sha256": "f05a2ee7c15544e1b39de2a35fd6eee19a31deb821ca56fc642418c939e28b12" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00045.py", + "sha256": "ac5a0a3c7a0a842a12499f06336700e0b17923619f27ce3872f6f05f299508ad" + }, + "fixtureHelper": { + "path": "tools/web/generated/modifier_gap_fixture.py", + "sha256": "85d5bc91e433a402099aeefccb5bed1a3711c88ea3484ac6083ce45a6c4517aa" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00045/explode-modifier-desktop-report.json", + "sha256": "6f2da8d3cc19177ceedef1e31d2ddd2bb73e061a40164393fb717050b442b43c" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00045/explode-modifier-local-exact-report.json", + "sha256": "fdd2bfc6407872afbb3f1393b79c1d551f030f485ce4169863b07742c994122f" + } + }, + "nextTask": "M16-GAP-00046", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "0a7b1676dd3b1b3d944c971acd4518cc2a7f83004fb231560a1a622ef2d23043", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "f3eb255f54ff6bf5298022daea73e554722d3b7d47515abc1e29604bf96530c3", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "1d11bd9ceab05a8937d50b25601829f53c7d827ed7f38577ab1624c118d486e6", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00046/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00046/manifest.json new file mode 100644 index 00000000..2de539a0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00046/manifest.json @@ -0,0 +1,106 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00046", + "parentTask": "M16-GAP-00045", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "FLUID_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00045/manifest.json", + "sha256": "a6a63c7ede70a0716a49bd5ef0bf4ee23e11586c953f8b7e6a06530a73618177" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00046-modifier-FLUID.blend", + "sha256": "e5061df121df88e723c87360ab0ccef630ada11c31183f11d6ee17114ad70690" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00046.py", + "sha256": "16cc612933b0c0137b4b986d4807ce12f838bae52457e941fd53f79c48677cab" + }, + "fixtureHelper": { + "path": "tools/web/generated/modifier_gap_fixture.py", + "sha256": "85d5bc91e433a402099aeefccb5bed1a3711c88ea3484ac6083ce45a6c4517aa" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00046/fluid-modifier-desktop-report.json", + "sha256": "5e2140d9a0e8089c6fe1f31f34bfe7fa8473f642556051598436cb78636d451b" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00046/fluid-modifier-local-exact-report.json", + "sha256": "3e0adc749a8f15c52231fdd37afd01246b21d0c5630be569a0756b4f7d05194c" + } + }, + "nextTask": "M16-GAP-00047", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "0a7b1676dd3b1b3d944c971acd4518cc2a7f83004fb231560a1a622ef2d23043", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "4f4a40b65293d712b9cafc675d579121b14659072d7c7cdf44ea5da6b0b4c6ce", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "1d11bd9ceab05a8937d50b25601829f53c7d827ed7f38577ab1624c118d486e6", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00047/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00047/manifest.json new file mode 100644 index 00000000..7af7e335 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00047/manifest.json @@ -0,0 +1,102 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00047", + "parentTask": "M16-GAP-00046", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_ARMATURE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00046/manifest.json", + "sha256": "4430ac4a19fcfea771b6a688ac0b59e5ed6f477ad086effa9df8ec66189ff059" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00047-modifier-GREASE_PENCIL_ARMATURE.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00047.py", + "sha256": "d107f117b147b955027c694f6a82147e64a931dbb57e8ce0425ade9cbc9a1d99" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00047/grease-pencil-armature-modifier-desktop-report.json", + "sha256": "aaa319ab7fc68ba6763c29b97659cb3a4f71425df5edd93dbd9aa5b998e96c1a" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00047/grease-pencil-armature-modifier-local-exact-report.json", + "sha256": "0e343bf170e7cb7c0b61a20308a7034f3ced1572580c4f94074e162e14bfcf43" + } + }, + "nextTask": "M16-GAP-00048", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "28ae36eb491838ca2657682ba8681d8635e3f8d953195e3be8e528d4c9e394c3", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00048/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00048/manifest.json new file mode 100644 index 00000000..ddfbf010 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00048/manifest.json @@ -0,0 +1,102 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00048", + "parentTask": "M16-GAP-00047", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_ARRAY_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00047/manifest.json", + "sha256": "fe5ac01d72c9ab1f18f485a02748e4a4a53d409f2c65b0f9507b0fba2b16201a" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00048-modifier-GREASE_PENCIL_ARRAY.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00048.py", + "sha256": "46d0a48bac2f893ce03ffb055881159a3f55327e8314ef24f2530a6212ddf868" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00048/grease-pencil-array-modifier-desktop-report.json", + "sha256": "caf437b45e130c12406ce3ee8d699d7266673f8e595d63d017f5482c474f29f3" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00048/grease-pencil-array-modifier-local-exact-report.json", + "sha256": "e583037d0c80eb40b6e511cb2b11feae3c9f5f0e1c0374727f5af6c8c1b0c6b5" + } + }, + "nextTask": "M16-GAP-00049", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "4e902d7936cf3cd3be92c37fa15ec7a7f1ce9fc3bddce82dab814c1627e32b53", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00049/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00049/manifest.json new file mode 100644 index 00000000..4cbee63e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00049/manifest.json @@ -0,0 +1,102 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00049", + "parentTask": "M16-GAP-00048", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_BUILD_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00048/manifest.json", + "sha256": "e7267000f7ec4c472025b0f876b2c91f30d2b25716a59c91339c944e2e1459f3" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00049-modifier-GREASE_PENCIL_BUILD.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00049.py", + "sha256": "1d351d2f7f82f92d41ce1e1837b7bbaff41ec7046d51d118cb9a744b2f130347" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00049/grease-pencil-build-modifier-desktop-report.json", + "sha256": "e9d70bb6ba43a387d29683473bfc8286ab9818f771e796194a0344ed31bd00cb" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00049/grease-pencil-build-modifier-local-exact-report.json", + "sha256": "b1df18f0aafe0a47ef55b7fd64ac5935020a99e45e58708cd7958d919d8fa558" + } + }, + "nextTask": "M16-GAP-00050", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "e6d7e8019a67bf357c63fbbc9d51e4ed6d4d7fd303b2ad259eec30b2b37a5644", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00050/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00050/manifest.json new file mode 100644 index 00000000..f9875083 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00050/manifest.json @@ -0,0 +1,102 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00050", + "parentTask": "M16-GAP-00049", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_COLOR_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00049/manifest.json", + "sha256": "40a1973a8c461d876e93115c4ccc0e7c6f3cd19ba495947d6c30b50b03aef49c" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00050-modifier-GREASE_PENCIL_COLOR.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00050.py", + "sha256": "3940edc4cca7b1d5cf9a335b8190be744cbbd6e6201614372dbf39163ff9efa1" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00050/grease-pencil-color-modifier-desktop-report.json", + "sha256": "79e44b5d0443f81d2ba334902990f73c20601b4c15e890aff1b73fae4879f771" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00050/grease-pencil-color-modifier-local-exact-report.json", + "sha256": "73126cf9fc415f9eccf9538d1d23055857fa9c772e1b15721470e1653bc2ce73" + } + }, + "nextTask": "M16-GAP-00051", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "9d7f692b1907b7e54d307bd0325a7cedefb75d10b5e9a8a356bda032084b1d5c", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00051/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00051/manifest.json new file mode 100644 index 00000000..2b2eaa43 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00051/manifest.json @@ -0,0 +1,102 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00051", + "parentTask": "M16-GAP-00050", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_DASH_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00050/manifest.json", + "sha256": "9b399fb391588b8bedba10997876cb4b3104ecdfe6481a022dd2f106f4920dbb" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00051-modifier-GREASE_PENCIL_DASH.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00051.py", + "sha256": "c6f60bcce29d2015308c78d764b57579616d644d84dc27bb98a118b162348808" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00051/grease-pencil-dash-modifier-desktop-report.json", + "sha256": "0c87ebea369c798bbb2f0f70f698066e482ce372eda0042008f9993cfe116bf6" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00051/grease-pencil-dash-modifier-local-exact-report.json", + "sha256": "6da74df88b5ed5b1cb7cb64420020924143e30cad7c8f1efc11e62fd39b33dbb" + } + }, + "nextTask": "M16-GAP-00052", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "91f5008bc93838eb4ceda37fd6878598f34816dc7f27600f4a243b00bf295b6c", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00052/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00052/manifest.json new file mode 100644 index 00000000..2e238c7f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00052/manifest.json @@ -0,0 +1,102 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00052", + "parentTask": "M16-GAP-00051", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_ENVELOPE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00051/manifest.json", + "sha256": "fc6d07507873239429bbf53f389bd769f94fade2f2086ca446bf3180f96fff2b" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00052-modifier-GREASE_PENCIL_ENVELOPE.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00052.py", + "sha256": "53a12d6ac62873a4cc6d384c811030e43f57b08485a8c50c70d638a7433ec333" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00052/grease-pencil-envelope-modifier-desktop-report.json", + "sha256": "4ce0e867ab2f8346e6121060c3f18c9a1f48e97c67dd5b9362c2eaca6e7e5f78" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00052/grease-pencil-envelope-modifier-local-exact-report.json", + "sha256": "af02545ba19b116b4ce39b87aaab3f8e3e33504164694c04b1ec6da7f159ee59" + } + }, + "nextTask": "M16-GAP-00053", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "aacf540ef155aca212cb3361e748f043a40e2a965245e373fd6bf17ad3d50442", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00053/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00053/manifest.json new file mode 100644 index 00000000..d80d7d69 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00053/manifest.json @@ -0,0 +1,102 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00053", + "parentTask": "M16-GAP-00052", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_HOOK_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00052/manifest.json", + "sha256": "764d3f131fc5f51ba15aa3964b73560972934f2f6b025db8288a5c165dd40af8" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00053-modifier-GREASE_PENCIL_HOOK.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00053.py", + "sha256": "2f3523d2f8378fbdef7083d93ac666059a3649c29fdd8c4bf5e44fdbb8e596fa" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00053/grease-pencil-hook-modifier-desktop-report.json", + "sha256": "67b0ddf84c0d9690832b8aeae76b503572bf9ac725123254a95a351e55075c54" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00053/grease-pencil-hook-modifier-local-exact-report.json", + "sha256": "eb44b966e835d186f5f05420377a00895764cee2b5cb379f3704f89aed334d16" + } + }, + "nextTask": "M16-GAP-00054", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00054/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00054/manifest.json new file mode 100644 index 00000000..c82c5c29 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00054/manifest.json @@ -0,0 +1,102 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00054", + "parentTask": "M16-GAP-00053", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_LATTICE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00053/manifest.json", + "sha256": "e3d1c6c132f6da332f4d1424bc7608e1bf25b2a48500b112fc34f5954c13220d" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00054-modifier-GREASE_PENCIL_LATTICE.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00054.py", + "sha256": "e033647018764ecb7015f9d7c1e6201306ca36ecf3df29a8a12ecadfa19238bb" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00054/grease-pencil-lattice-modifier-desktop-report.json", + "sha256": "565931e3614f74c666c375ae3d879ca85b4274d1bc980cd5480c877593d23a63" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00054/grease-pencil-lattice-modifier-local-exact-report.json", + "sha256": "4d0bda74ab6c6667530fa5f64fff6944c316449b3c9f1c25d6c623d7523a5ed1" + } + }, + "nextTask": "M16-GAP-00055", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00055/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00055/manifest.json new file mode 100644 index 00000000..c65109c7 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00055/manifest.json @@ -0,0 +1,102 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00055", + "parentTask": "M16-GAP-00054", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_LENGTH_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00054/manifest.json", + "sha256": "9cd85f6373d0658757c92fb0a084a1f468777865e64cfc5cd23f7fa091f6e25c" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00055-modifier-GREASE_PENCIL_LENGTH.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00055.py", + "sha256": "6cd72429c65a9e5e36e099f0c35f523e51ed26d4c796be7b3e4397c3bb71509c" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00055/grease-pencil-length-modifier-desktop-report.json", + "sha256": "367ea4ff3cef4d5ec0e07b3f69f2f5a15d2604753b8efe9083775e97854af2b6" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00055/grease-pencil-length-modifier-local-exact-report.json", + "sha256": "5715882f691e9022fc3049f1937b90e39d9e7702583f9a946b7aabf22e2093d5" + } + }, + "nextTask": "M16-GAP-00056", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00056/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00056/manifest.json new file mode 100644 index 00000000..8a079cfb --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00056/manifest.json @@ -0,0 +1,102 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00056", + "parentTask": "M16-GAP-00055", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_MIRROR_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00055/manifest.json", + "sha256": "8c1e8755714dc91d1e02b0966d5d86fd26ffc49aa9c81d63384e0734117e1a31" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00056-modifier-GREASE_PENCIL_MIRROR.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00056.py", + "sha256": "b604fc0351b563558a59be40fbfbdd83481ec3c0eeda6ec020fc5e21bc527de3" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00056/grease-pencil-mirror-modifier-desktop-report.json", + "sha256": "60122c5212975d2a0de279415ea35699fa10c7c3b350ef991a2ef04c096c4e3c" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00056/grease-pencil-mirror-modifier-local-exact-report.json", + "sha256": "ac905bdcf602af4f8d63e62ea78f251d737052c00aa4454807aeaa648344ea89" + } + }, + "nextTask": "M16-GAP-00057", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00057/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00057/manifest.json new file mode 100644 index 00000000..395d598e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00057/manifest.json @@ -0,0 +1,102 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00057", + "parentTask": "M16-GAP-00056", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_MULTIPLY_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00056/manifest.json", + "sha256": "66d9711eaa81ebb3a192ff89004047b67f2784f6b4eb752c3f5bf669f4700ac2" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00057-modifier-GREASE_PENCIL_MULTIPLY.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00057.py", + "sha256": "b2fed8f2d445c0eb10ed833385cc6e6e91394a97e367c6c76a3dbc4b61f5abb7" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00057/grease-pencil-multiply-modifier-desktop-report.json", + "sha256": "c891fa44f7623a0eb1dd8c848cace0f8289c0c181a03a400fce36aa1a020069c" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00057/grease-pencil-multiply-modifier-local-exact-report.json", + "sha256": "5e9c1ab5db3f884cb1f78ce212e2714ea8500ddcc6691774092a745a71013e10" + } + }, + "nextTask": "M16-GAP-00058", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00058/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00058/manifest.json new file mode 100644 index 00000000..c2632fc7 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00058/manifest.json @@ -0,0 +1,102 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00058", + "parentTask": "M16-GAP-00057", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_NOISE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00057/manifest.json", + "sha256": "171834827986190445d87d9eb35edb44d48400f941e2999765c4660ae6e1875a" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00058-modifier-GREASE_PENCIL_NOISE.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00058.py", + "sha256": "01dd91ba30acebe5749feef841e8ca9f096ac35a9fb6b454ae30ed94941ddd21" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00058/grease-pencil-noise-modifier-desktop-report.json", + "sha256": "04c853b535d820f10859c47d51901fbbf51c4a5cb7f7387cbf59bbebfc108a2c" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00058/grease-pencil-noise-modifier-local-exact-report.json", + "sha256": "ce892ec22b69bd93060fcd8d29d91a97c68f75361bf9b782d73e502ecb7a6f47" + } + }, + "nextTask": "M16-GAP-00059", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00059/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00059/manifest.json new file mode 100644 index 00000000..f6faed17 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00059/manifest.json @@ -0,0 +1,93 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00059", + "parentTask": "M16-GAP-00058", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_OFFSET_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00058/manifest.json", + "sha256": "73e0c79e68244d4d100e32bbd915f51106cec5441439960983ac1bc218e74abe" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00059-modifier-GREASE_PENCIL_OFFSET.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00059.py", + "sha256": "1077df2f66d6a954a239cbdb6d55f5b05ef382b7224c9bbd886695d47dbf3b15" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00059/grease-pencil-offset-modifier-desktop-report.json", + "sha256": "4119db33aad242414ed52d9e6614bdede6e0b4a551604a6886e01dc5bf90ea4e" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00059/grease-pencil-offset-modifier-local-exact-report.json", + "sha256": "e9ef09a250821a1dd7f10c574f1911f534baf65515e879f9ac423fb4877c7b5b" + } + }, + "nextTask": "M16-GAP-00060", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00060/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00060/manifest.json new file mode 100644 index 00000000..30a64987 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00060/manifest.json @@ -0,0 +1,93 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00060", + "parentTask": "M16-GAP-00059", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_OPACITY_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00059/manifest.json", + "sha256": "884c6a8e1f40870d6628cc0c33884e1c83d0d605bea1d0fd505b6710dcd2fd4b" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00060-modifier-GREASE_PENCIL_OPACITY.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00060.py", + "sha256": "4bc32e262c02b41bbc4bccf0ae76e280a3b97cc5cb28495361f7e044868f9b51" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00060/grease-pencil-opacity-modifier-desktop-report.json", + "sha256": "678e7c0028c38f2a84cee2377ecfd7de1d1303561e75fcf8f380359338f6b4b8" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00060/grease-pencil-opacity-modifier-local-exact-report.json", + "sha256": "b62b13a20f921815f9fc4b32b406598a1a08d701cee27e07ee3a0009dda2a2f5" + } + }, + "nextTask": "M16-GAP-00061", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00061/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00061/manifest.json new file mode 100644 index 00000000..81809dc6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00061/manifest.json @@ -0,0 +1,93 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00061", + "parentTask": "M16-GAP-00060", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_OUTLINE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00060/manifest.json", + "sha256": "e3715c32ca4bae6376396b321826841ad38751301a184154db024233c4f31069" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00061-modifier-GREASE_PENCIL_OUTLINE.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00061.py", + "sha256": "d99b89a5f9daaa8a454abd747b4903f0391ad21af6b315a46cd92bbcaf08ac7d" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00061/grease-pencil-outline-modifier-desktop-report.json", + "sha256": "2a6994ca45c8262a592cedb8deb8f026d366ee2df3bfe6ea0d375e8e214ba6c0" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00061/grease-pencil-outline-modifier-local-exact-report.json", + "sha256": "f490b2dc9b173a3172529ab529889a3292fe39f0cbd3951baaee8566464a0c43" + } + }, + "nextTask": "M16-GAP-00062", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00062/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00062/manifest.json new file mode 100644 index 00000000..7616e7c1 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00062/manifest.json @@ -0,0 +1,93 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00062", + "parentTask": "M16-GAP-00061", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_SHRINKWRAP_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00061/manifest.json", + "sha256": "31883513aefa13e1668b0bde65b55f87c009d36e0bce841d3460e2dc3f3e5381" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00062-modifier-GREASE_PENCIL_SHRINKWRAP.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00062.py", + "sha256": "b3e97d53919cb031f359cc15429f5801ac59614ba8f6993183f9db8deb280e3f" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00062/grease-pencil-shrinkwrap-modifier-desktop-report.json", + "sha256": "6631f00a27489de3b3d5cd2288f1a1b395b3a7295f9fc4b72c2091d5ce333a45" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00062/grease-pencil-shrinkwrap-modifier-local-exact-report.json", + "sha256": "a00004d09bc0170a0f3148197dd3dd24fb39fac60c723214cce73e527c998e8c" + } + }, + "nextTask": "M16-GAP-00063", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00063/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00063/manifest.json new file mode 100644 index 00000000..04422c82 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00063/manifest.json @@ -0,0 +1,93 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00063", + "parentTask": "M16-GAP-00062", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_SIMPLIFY_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00062/manifest.json", + "sha256": "943ee13f577cfa193e24e3d1a6cb698575fcbb7a72f52ddf9e122738c83e344a" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00063-modifier-GREASE_PENCIL_SIMPLIFY.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00063.py", + "sha256": "a7b77f92944e9d61c4f52f478ee004f4caef642a810f1ed18d51318be04b0ff4" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00063/grease-pencil-simplify-modifier-desktop-report.json", + "sha256": "14de85a86a150ace281a6b632a5cdf3076104c623b3d313201a2efeb5bac6695" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00063/grease-pencil-simplify-modifier-local-exact-report.json", + "sha256": "6214778590468549ab03aa4bb67dcad6ae2f22d151dc6012c9e293e01ffa9dbe" + } + }, + "nextTask": "M16-GAP-00064", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00064/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00064/manifest.json new file mode 100644 index 00000000..beb3a564 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00064/manifest.json @@ -0,0 +1,93 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00064", + "parentTask": "M16-GAP-00063", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_SMOOTH_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00063/manifest.json", + "sha256": "004f0845b881563ebcc3bd208a081ae1626f88406fc912bcd031e5c611879ee2" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00064-modifier-GREASE_PENCIL_SMOOTH.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00064.py", + "sha256": "1df74ba06ff31269cf1f98214aa6c0ca6aa0cc600e459315f92196f8aeb3dd4f" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00064/grease-pencil-smooth-modifier-desktop-report.json", + "sha256": "b58983c079c8271ab9d5230e478d36e16d49102826178e90566cd0a8913dd325" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00064/grease-pencil-smooth-modifier-local-exact-report.json", + "sha256": "da42e7440e07f1033f98fbd26274654b4f516821fa0e4c08db68df9468598564" + } + }, + "nextTask": "M16-GAP-00065", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00065/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00065/manifest.json new file mode 100644 index 00000000..0b96f2b0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00065/manifest.json @@ -0,0 +1,93 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00065", + "parentTask": "M16-GAP-00064", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_SUBDIV_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00064/manifest.json", + "sha256": "2e2a5fd2275e753249ec35a596c5b632b09e7fb61ba5a96566a988e8d917579d" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00065-modifier-GREASE_PENCIL_SUBDIV.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00065.py", + "sha256": "977935d2e28afb3d9322e77d64440f5b69fdbf714ff6d8350a06acc1ea9cbce9" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00065/grease-pencil-subdiv-modifier-desktop-report.json", + "sha256": "e4e86404702f4b46f207c66070adcc0a52e580aff6106f5404c97ab16351a2d2" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00065/grease-pencil-subdiv-modifier-local-exact-report.json", + "sha256": "3e09deb0756dd36c85e53e6011f3ca011c9ad4a237b577d529238675a9dd7213" + } + }, + "nextTask": "M16-GAP-00066", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00066/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00066/manifest.json new file mode 100644 index 00000000..1340d454 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00066/manifest.json @@ -0,0 +1,93 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00066", + "parentTask": "M16-GAP-00065", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_TEXTURE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00065/manifest.json", + "sha256": "7a9dc7efde0ee86ae0b6b40270b8af8760891b867ed0fb2a77d0afe76596e605" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00066-modifier-GREASE_PENCIL_TEXTURE.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00066.py", + "sha256": "e51850c49d2fc333b943f421c92fe6bdbfcf79d23ccab95ee87f783bfa57f8f1" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00066/grease-pencil-texture-modifier-desktop-report.json", + "sha256": "d3900098ba128c202ff28323c6e2945d78dd3c35512bbc2c5d611493b8b1e42d" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00066/grease-pencil-texture-modifier-local-exact-report.json", + "sha256": "b9831dad063cdfaa81aeb8894776b914652c6542d2e0a244cef321547e183068" + } + }, + "nextTask": "M16-GAP-00067", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00067/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00067/manifest.json new file mode 100644 index 00000000..c7516268 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00067/manifest.json @@ -0,0 +1,93 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00067", + "parentTask": "M16-GAP-00066", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_THICKNESS_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00066/manifest.json", + "sha256": "3dfb0fc8a218a3209fee25799df265761e06ce2a8ca161fd07c015f33ae3e144" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00067-modifier-GREASE_PENCIL_THICKNESS.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00067.py", + "sha256": "89a64c14a4b1007dc3011bde0b5cb27c4bf77bbffd7ae3e89c5f6aac30f40cb9" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00067/grease-pencil-thickness-modifier-desktop-report.json", + "sha256": "664ec1a6c595fcb5fac0888ae866f70a48ef5d057035c5c614ed0d97a9d08108" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00067/grease-pencil-thickness-modifier-local-exact-report.json", + "sha256": "6e1eee5cf87df42fc94c144f5171f9653df4196372eccd001cef6907ef518e94" + } + }, + "nextTask": "M16-GAP-00068", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00068/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00068/manifest.json new file mode 100644 index 00000000..1710eac5 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00068/manifest.json @@ -0,0 +1,93 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00068", + "parentTask": "M16-GAP-00067", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_TIME_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00067/manifest.json", + "sha256": "d79f6b8985fd81ae5254adee038d79505726142298a2d0d39155d7bb6609e80b" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00068-modifier-GREASE_PENCIL_TIME.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00068.py", + "sha256": "cd982ce4a34537a22a20a4b8efcf676624ce2d7a7dfbd8896ed2c37494889282" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00068/grease-pencil-time-modifier-desktop-report.json", + "sha256": "761dd7ad0a350e9f3c175575cdb4d71f5bd0a56e1872626148d73c9a7229468f" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00068/grease-pencil-time-modifier-local-exact-report.json", + "sha256": "5cc9edb3f0fd508b25730b4d32deaa9a804381d7fbd8b4007af5e7782d27c590" + } + }, + "nextTask": "M16-GAP-00069", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00069/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00069/manifest.json new file mode 100644 index 00000000..76ccf61a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00069/manifest.json @@ -0,0 +1,93 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00069", + "parentTask": "M16-GAP-00068", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_TINT_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00068/manifest.json", + "sha256": "5d89b01c5ba47171c0878156521964c0dc77f7d4dad58fe9810456b116486c9e" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00069-modifier-GREASE_PENCIL_TINT.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00069.py", + "sha256": "6ebf4e9475f40e8ef0da9c0fe99beb221f965efaad0953cd507c3d24be2d951f" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00069/grease-pencil-tint-modifier-desktop-report.json", + "sha256": "e66d9b22a901a41e9c7b0d460f970722192550f75a4f3f54612b97fcf9ed9238" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00069/grease-pencil-tint-modifier-local-exact-report.json", + "sha256": "44d113b3d6c291a18401d6dadbf915dfb907413c8ed96e092011484879f5e050" + } + }, + "nextTask": "M16-GAP-00070", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00070/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00070/manifest.json new file mode 100644 index 00000000..0e8d0513 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00070/manifest.json @@ -0,0 +1,93 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00070", + "parentTask": "M16-GAP-00069", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_VERTEX_WEIGHT_ANGLE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00069/manifest.json", + "sha256": "5fae5d038ddc45dcd45a7a34d4194d8dd0d3e037cac84a6803ae28a49034ad02" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00070-modifier-GREASE_PENCIL_VERTEX_WEIGHT_ANGLE.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00070.py", + "sha256": "777e53fca82084ced7003328672cda678c8480db9c56c07517a19609ae353ecf" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00070/grease-pencil-vertex-weight-angle-modifier-desktop-report.json", + "sha256": "0c3fdcbf998064e77023d66239a6f0e9763cba14aced60d6d71bfd8968844e66" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00070/grease-pencil-vertex-weight-angle-modifier-local-exact-report.json", + "sha256": "79d31b01cb87a8a380d4e84ea69e9b3f19b5109029ad4c1193d15ab6058b8d01" + } + }, + "nextTask": "M16-GAP-00071", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "58cdbe34c1b5c3bd8b0f8ef5144ae8f1b6af8ff51a336862a9001bff79cec82b", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "90fa485cd6cc28d08e8f7ac8433f2e1ee1a88503ed6358d25ffea6f6ad18e5fb", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "90fa485cd6cc28d08e8f7ac8433f2e1ee1a88503ed6358d25ffea6f6ad18e5fb", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00071/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00071/manifest.json new file mode 100644 index 00000000..7a2ef1a6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00071/manifest.json @@ -0,0 +1,98 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00071", + "parentTask": "M16-GAP-00070", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00070/manifest.json", + "sha256": "07f517fc4468f0ff7e784b553608a175170ea59e6bed1c749985f99a793d71cc" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00071-modifier-GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00071.py", + "sha256": "d811aa0a430d7fb4db838627e8e71fa1ec812ec932d894512acf24a2d98ac6dd" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00071/grease-pencil-vertex-weight-proximity-modifier-desktop-report.json", + "sha256": "bfb4354d4b25894879f6cd15f1f9758eeebc88aef6c45237ffebd16bb670ffdd" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00071/grease-pencil-vertex-weight-proximity-modifier-local-exact-report.json", + "sha256": "08a439a692bc167a2dff093527586132b3e1baca4a8d7be4dfd47cfe18a04bd9" + } + }, + "nextTask": "M16-GAP-00072", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tests/golden/M16-GAP-00070/manifest.json", + "originalSha256": "5fae5d038ddc45dcd45a7a34d4194d8dd0d3e037cac84a6803ae28a49034ad02", + "resignedSha256": "07f517fc4468f0ff7e784b553608a175170ea59e6bed1c749985f99a793d71cc" + }, + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "58cdbe34c1b5c3bd8b0f8ef5144ae8f1b6af8ff51a336862a9001bff79cec82b", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "90fa485cd6cc28d08e8f7ac8433f2e1ee1a88503ed6358d25ffea6f6ad18e5fb", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "90fa485cd6cc28d08e8f7ac8433f2e1ee1a88503ed6358d25ffea6f6ad18e5fb", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00072/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00072/manifest.json new file mode 100644 index 00000000..3d283d8f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00072/manifest.json @@ -0,0 +1,93 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00072", + "parentTask": "M16-GAP-00071", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "HOOK_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00071/manifest.json", + "sha256": "4415489e0e4d4ca2e5a81de4e74a9c17dcad65f94b30a95557c168ec1b0af9f7" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00072-modifier-HOOK.blend", + "sha256": "9fee2803c1400f07d4a58fb05a708b8e5bdf878820d636c57cecbb6deda9adec" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00072.py", + "sha256": "239d1ec0c9cb68b93e48becd7451a80fcbead84430cb3de2fb7545a9da658bcf" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00072/hook-modifier-desktop-report.json", + "sha256": "819375aad6fbf6814a1fe85802472d12df216a205067f5ee0e132a8d383f247d" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00072/hook-modifier-local-exact-report.json", + "sha256": "929d2a3e679e4972149ffac8ff1a7d692452cb9b1029418eea86434aa8d4c6d1" + } + }, + "nextTask": "M16-GAP-00073", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "a97a8b1b243dcf8ec6506280cc0c6e33a4c89f28b40f6b44b99a470fdf705224", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "58cdbe34c1b5c3bd8b0f8ef5144ae8f1b6af8ff51a336862a9001bff79cec82b", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "90fa485cd6cc28d08e8f7ac8433f2e1ee1a88503ed6358d25ffea6f6ad18e5fb", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "90fa485cd6cc28d08e8f7ac8433f2e1ee1a88503ed6358d25ffea6f6ad18e5fb", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00073/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00073/manifest.json new file mode 100644 index 00000000..58a8f273 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00073/manifest.json @@ -0,0 +1,93 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00073", + "parentTask": "M16-GAP-00072", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "LAPLACIANDEFORM_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00072/manifest.json", + "sha256": "574f682ccb0d9a56a04955b3cb493a368bf83eafdd85d9ecd4163f7c68bfbf7f" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00073-modifier-LAPLACIANDEFORM.blend", + "sha256": "d4a01fc520b4641442f56506a5a320d4c4efee57fcec779021cc10d17d62e1e0" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00073.py", + "sha256": "ce9be025d573d87c48bd4975f4cee1c343749156d163abe51a04a05e9d951ad5" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00073/laplaciandeform-modifier-desktop-report.json", + "sha256": "20b1fa4731e697c539cbeda56daf567a39ea0e4157519480400d3aa0116b5d9c" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00073/laplaciandeform-modifier-local-exact-report.json", + "sha256": "4661ab5868a5664206f47bebbc93f6f0cc4dcaab362f45d59540c8900a3c4ca2" + } + }, + "nextTask": "M16-GAP-00074", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "1ee93d0a8b8fdedcbf2dff3f0977e58c6df3b51ca7e99bd90a13dcdedcc5544f", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "18a9bc7da9fc34af34047add1ea16edf5151639cec30e0de053787e82926650d", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "044fb847f05663f644e3429f9c5d0ff0555f9e8899c3e2d19c925c4fa7546bed", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "044fb847f05663f644e3429f9c5d0ff0555f9e8899c3e2d19c925c4fa7546bed", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00074/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00074/manifest.json new file mode 100644 index 00000000..2f8c1e46 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00074/manifest.json @@ -0,0 +1,93 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00074", + "parentTask": "M16-GAP-00073", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "LAPLACIANSMOOTH_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00073/manifest.json", + "sha256": "898c103c060209a2faaef4d07123b1dc9d654ed7bfba98c43a5b97c3b6571292" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00074-modifier-LAPLACIANSMOOTH.blend", + "sha256": "0f1ff155e600a04f0a717584716ae1ca5811ed9642354494a26c2a8d90590b99" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00074.py", + "sha256": "c4d29eb33cf3abbca68333cf064e634a6202889170f20eb0d47868cacbd47cc7" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00074/laplaciansmooth-modifier-desktop-report.json", + "sha256": "9aa6928bb41744895ec5d471a3c290d5880d75357f556c310f692dfbf0c587a6" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00074/laplaciansmooth-modifier-local-exact-report.json", + "sha256": "0ae4447208034f80469647e51469225032cb0e8f40b6e887d2aa66888d8b9d65" + } + }, + "nextTask": "M16-GAP-00075", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "bf521a6f9e64c1f50e7238179b9ed8d94e955a21131a8566f75a0e3c81fd9789", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "db4807b05b0c71658115e321712b9b46cbd3bf814c96a56d3c0766f97fe98f7e", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "a1c778de8f065de2a54ee300deeff142f4a60629d57b61cbe8d46c8cc8a1fe2c", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "a1c778de8f065de2a54ee300deeff142f4a60629d57b61cbe8d46c8cc8a1fe2c", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00075/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00075/manifest.json new file mode 100644 index 00000000..e0a3b35e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00075/manifest.json @@ -0,0 +1,93 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00075", + "parentTask": "M16-GAP-00074", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "LATTICE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00074/manifest.json", + "sha256": "93125c3550c043e2c07c50d99c9b683214d851000cc7e7030b0cc118a4031622" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00075-modifier-LATTICE.blend", + "sha256": "907149629b82fb0289da70535b29cea8bae0b24d745b92c0d4116a3a24b95494" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00075.py", + "sha256": "d5d161608d986e04d66afb8871ef34eae2c27bbf8fe654b2982c6a10553150eb" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00075/lattice-modifier-desktop-report.json", + "sha256": "c06a312fdf79abca4eb6560e271e62adfdc79e4b8fd61db57cf53c148195cd6a" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00075/lattice-modifier-local-exact-report.json", + "sha256": "62bf9e34273df25cddda1f64b614626cac4163e861c253cb44b39624390266f5" + } + }, + "nextTask": "M16-GAP-00076", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "1f97a64d7798ddd4f06af5953d79f882ae5fc2e29eedbe5746297c3df9d189e7", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "db4807b05b0c71658115e321712b9b46cbd3bf814c96a56d3c0766f97fe98f7e", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "a1c778de8f065de2a54ee300deeff142f4a60629d57b61cbe8d46c8cc8a1fe2c", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "a1c778de8f065de2a54ee300deeff142f4a60629d57b61cbe8d46c8cc8a1fe2c", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00076/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00076/manifest.json new file mode 100644 index 00000000..3cea980c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00076/manifest.json @@ -0,0 +1,93 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00076", + "parentTask": "M16-GAP-00075", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "LINEART_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00075/manifest.json", + "sha256": "9d518397037f8776147f7d261003a191274ee82f9c20b3de036e6b1f7d33fe20" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00076-modifier-LINEART.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00076.py", + "sha256": "45797f19ee517501033c3c95e79f13f4fc7f8699c17ecacc54367b3932ffa63d" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00076/lineart-modifier-desktop-report.json", + "sha256": "dfc59d7f349a96352e9b7147cf2745754664513b17f8541828552cd04d6e2434" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00076/lineart-modifier-local-exact-report.json", + "sha256": "b97956de8af04e761d23e69c7c40f31ddfafe0fa54e600123154c77a74ee41f1" + } + }, + "nextTask": "M16-GAP-00077", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "4c7a6ade30979ed209df8114e03c8194e74a734c3d99130f8be3e838bb3d6c7a", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "dbab2a2dab2485d870fe827fed017c6d43659a3adc266ac94c2e4a663ef128a6", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00077/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00077/manifest.json new file mode 100644 index 00000000..57726b22 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00077/manifest.json @@ -0,0 +1,93 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00077", + "parentTask": "M16-GAP-00076", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "MASK_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00076/manifest.json", + "sha256": "cbf9772af4492d6c4f9abf43a14a8c0137ab08e20a6a308c0d863291524f8596" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00077-modifier-MASK.blend", + "sha256": "62d3740eb3c43d79fa8018e992d0f21dc1b0efac5f8e41965a9564e0c765deee" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00077.py", + "sha256": "b3b946e1348773aafd1df5c9aa192e566e79adaf06112e23e2d7a00c6c6fde01" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00077/mask-modifier-desktop-report.json", + "sha256": "b727c810beee272ab8f70754d50aed53404ec5a5d9147f912d6f880d1554576f" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00077/mask-modifier-local-exact-report.json", + "sha256": "ef4b6d8b4c1fb2d336fafebe4f232478704d442d8b166305d8c0dbed0523bed6" + } + }, + "nextTask": "M16-GAP-00078", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "a297d2148320fd5a12441b951b56c11b20d8c518e993095828681c0bc65b9988", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "dbab2a2dab2485d870fe827fed017c6d43659a3adc266ac94c2e4a663ef128a6", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00078/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00078/manifest.json new file mode 100644 index 00000000..51dde464 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00078/manifest.json @@ -0,0 +1,93 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00078", + "parentTask": "M16-GAP-00077", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "MESH_CACHE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00077/manifest.json", + "sha256": "260a2e5906d78901cba540fab58252eba893f29f0e27b9a214e720ed20c6ed52" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00078-modifier-MESH_CACHE.blend", + "sha256": "7c381314e4b8c95aa2b01acbd2f8ec0664bb27264dd6c6dd6456602adc42f6e8" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00078.py", + "sha256": "614c0b5bc0bfe91fe29a956067e1cef0ffc1b6a072e4178682323143a86861e1" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00078/mesh-cache-modifier-desktop-report.json", + "sha256": "4f78ab7adae556fb49dfde5b4c4e95f9bb0c2777c8425bc48d410955d9686d46" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00078/mesh-cache-modifier-local-exact-report.json", + "sha256": "6d6baa891a387fe56c4ee27c3bc5bde6ecb28f6a6e71f49c1560fe04b26d24df" + } + }, + "nextTask": "M16-GAP-00079", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "688b120a7679f0bdd8661c0da114b68d94588de1d1598f75932ced1cb43a8a98", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "dbab2a2dab2485d870fe827fed017c6d43659a3adc266ac94c2e4a663ef128a6", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00079/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00079/manifest.json new file mode 100644 index 00000000..c1e07fc2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00079/manifest.json @@ -0,0 +1,93 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00079", + "parentTask": "M16-GAP-00078", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "MESH_DEFORM_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00078/manifest.json", + "sha256": "a2da8c09eda6ee4420430f5c0bebb9c6c003de59d592e5a2978e029d6451dea5" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00079-modifier-MESH_DEFORM.blend", + "sha256": "91d67a1b79c80b452e0637bc515030c8d8a2bb23d88399029ca57160f7facf20" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00079.py", + "sha256": "06ae4b6e3e7f9fa3a2a999bdd916ff3f8b482bb44e2971d4775e5fc3a1fd41eb" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00079/mesh-deform-modifier-desktop-report.json", + "sha256": "8f7ae61828ea8395a3dd1a5f01ccef9e634b03cf831b2d80f891c2db434190af" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00079/mesh-deform-modifier-local-exact-report.json", + "sha256": "6a2be2737f7510539d27d0504b47012dc801b5a3b428f1ab6f2264f4df2ded87" + } + }, + "nextTask": "M16-GAP-00080", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "a5fed29c014a8f471d49cd7350850d3cbafa7d36422dc009a88a4995f177f994", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "dbab2a2dab2485d870fe827fed017c6d43659a3adc266ac94c2e4a663ef128a6", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00080/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00080/manifest.json new file mode 100644 index 00000000..e306515b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00080/manifest.json @@ -0,0 +1,93 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00080", + "parentTask": "M16-GAP-00079", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "MESH_SEQUENCE_CACHE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00079/manifest.json", + "sha256": "25145a8a88ddeb465b4e90f6e1ffc194491dfd1e491d443fec3f6338896199b7" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00080-modifier-MESH_SEQUENCE_CACHE.blend", + "sha256": "817ed4b1a395d83b8166c84206f6dd7fef22a7c1dd8b62f85414125f4a5a927b" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00080.py", + "sha256": "394a6517eeeb12cc033b7ae43d4cebd8d99a2c31077486909ca65613da51f0ec" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00080/mesh-sequence-cache-modifier-desktop-report.json", + "sha256": "0dfdf7f2e779c96397d0686f0d8ef9ba21e017c80a47da1b04639721942f3b2a" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00080/mesh-sequence-cache-modifier-local-exact-report.json", + "sha256": "086758c58ae3b0b7124fd35b802d8ec3ad3254ff8e71f668ff976e05725a3a31" + } + }, + "nextTask": "M16-GAP-00081", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "b44d38ff7b8aaa22169a317987f3bdce969eb16fb7d2419ddac600ce735369b1", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "dbab2a2dab2485d870fe827fed017c6d43659a3adc266ac94c2e4a663ef128a6", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00081/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00081/manifest.json new file mode 100644 index 00000000..f8f365de --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00081/manifest.json @@ -0,0 +1,93 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00081", + "parentTask": "M16-GAP-00080", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "MESH_TO_VOLUME_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00080/manifest.json", + "sha256": "b8f2e61553de96ae88741ad60e94995faff014cfca357d379393365c1819a100" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00081-modifier-MESH_TO_VOLUME.blend", + "sha256": "52ab00ddd22c609f59f06c3747700b17f5b970ee4980dd287076446d289439db" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00081.py", + "sha256": "a6d2734582c3e8f746267b682bddd0356a231609162f40cebb79484e47e4ef42" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00081/mesh-to-volume-modifier-desktop-report.json", + "sha256": "0a485f27d6f6246d74e3737b8b945715fca96f343a675257dab9abb70319bb1d" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00081/mesh-to-volume-modifier-local-exact-report.json", + "sha256": "af033e5bd3d0491f464db098661621f0ac32afdcbed61a76614f4f06125559aa" + } + }, + "nextTask": "M16-GAP-00082", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "e6a10f733a2de8133cbb0aed28862fad694cb680f0972d58031fa7c1081a526e", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "dbab2a2dab2485d870fe827fed017c6d43659a3adc266ac94c2e4a663ef128a6", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00082/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00082/manifest.json new file mode 100644 index 00000000..19d79acd --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00082/manifest.json @@ -0,0 +1,93 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00082", + "parentTask": "M16-GAP-00081", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "MIRROR_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00081/manifest.json", + "sha256": "7c490963a0da309cdd3efdaf7897078c6f34afc9e4564e90a6c1cdc1d968d29f" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00082-modifier-MIRROR.blend", + "sha256": "0ef4742c3f30a3bbb59cd1924e99d22f57454c77e625c9ccb4ecd802559d8842" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00082.py", + "sha256": "32c0bcc7edcf14fbbd9e12465ce61cb7e0d15c7754062096329ebd6d6cd9ee46" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00082/mirror-modifier-desktop-report.json", + "sha256": "cc149f9c8f6f3b59ebf0b07f891d8b023d889cf2f281a7f1fce9f0f62b72e2ee" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00082/mirror-modifier-local-exact-report.json", + "sha256": "a0d7259bba97e30b97d57b776e3b067cd4bbd7ed734fcd8867c24efa4b5c469d" + } + }, + "nextTask": "M16-GAP-00083", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "8c85a8294cb915c18c87102e52789cfc877b323b106ac273fa1e34d03ba58ef8", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "dbab2a2dab2485d870fe827fed017c6d43659a3adc266ac94c2e4a663ef128a6", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00083/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00083/manifest.json new file mode 100644 index 00000000..1765d385 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00083/manifest.json @@ -0,0 +1,93 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00083", + "parentTask": "M16-GAP-00082", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "MULTIRES_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00082/manifest.json", + "sha256": "bc9ff66b3d9c9e4615e36de8c374862dc36fc771b7ba9695b97df64cb1ba52c5" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00083-modifier-MULTIRES.blend", + "sha256": "6cad4d91397b06ba4779ad5336056e7551774c4f96261f2e8d3dd729c81b7b52" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00083.py", + "sha256": "43920644f5f247ca216205f3bbf3aa39568dc1a29b205bf5852a0fe6e803acab" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00083/multires-modifier-desktop-report.json", + "sha256": "ad00dd2b8cadad79107f8433f06324f05ff5cb9672ca31bbab358813a48d3eaf" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00083/multires-modifier-local-exact-report.json", + "sha256": "d6ec0b7cf1eba19e79174c8d137ec1dd92eca40b7438f1739ce74df18bf712bb" + } + }, + "nextTask": "M16-GAP-00084", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "290a1795cbf5b6e4f62070b19e7ffe76e431fcc270efa5f724d096133bc06ce2", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "dbab2a2dab2485d870fe827fed017c6d43659a3adc266ac94c2e4a663ef128a6", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00084/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00084/manifest.json new file mode 100644 index 00000000..a056156d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00084/manifest.json @@ -0,0 +1,93 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00084", + "parentTask": "M16-GAP-00083", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "NODES_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00083/manifest.json", + "sha256": "0b15ecd4d714c03caa302b6867727f07e7d9e18a0e6322faa778ed02e61a4525" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00084-modifier-NODES.blend", + "sha256": "b8e7982ab3969a297ff8337fcdf966004e845189a2dfe5480ea60aecca3493b7" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00084.py", + "sha256": "0b5d9510f41f00719d7ddd95d23fb5ee75a561bac8cdb65a1a66950c24366698" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00084/nodes-modifier-desktop-report.json", + "sha256": "d5de72e4e7fd671474d0a385818337063952eecb3e765a694ddda811a420c9fc" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00084/nodes-modifier-local-exact-report.json", + "sha256": "987e987122bb5eac6f0208b0d453b59aa0b1e46888c17c68db1501fd04ed2432" + } + }, + "nextTask": "M16-GAP-00085", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "02de00f674caf609518157c8c33fa746fb3db5cea97cf7417a5b5c30a981edc7", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "dbab2a2dab2485d870fe827fed017c6d43659a3adc266ac94c2e4a663ef128a6", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00085/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00085/manifest.json new file mode 100644 index 00000000..b0faca45 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00085/manifest.json @@ -0,0 +1,93 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00085", + "parentTask": "M16-GAP-00084", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "NORMAL_EDIT_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00084/manifest.json", + "sha256": "6b45c2288c85824a9d3492f3dd5cdfba56df7f7a45d8e88bf410361876fd638b" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00085-modifier-NORMAL_EDIT.blend", + "sha256": "e0d6b77f0bc97f682534efce4c0901a056bf5d9a104525e634c53284ddd858aa" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00085.py", + "sha256": "6a88aac132385510134ec5df930649ec34398d57ef67a5176aec9fcf4ba2db3b" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00085/normal-edit-modifier-desktop-report.json", + "sha256": "cc4dfff0ac64efdd2e93eaee11fcfd7f9e2fe55fd4e21ea1e5f1a72dd14855cf" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00085/normal-edit-modifier-local-exact-report.json", + "sha256": "bbe513c4076d32a374083c0ae4ad6069e97f411a25bccb968e2f06c0b361da88" + } + }, + "nextTask": "M16-GAP-00086", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "27868f23588271c779d753f63b99f11878d7e3b36c9fdd71750e5249daac4bb5", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "dbab2a2dab2485d870fe827fed017c6d43659a3adc266ac94c2e4a663ef128a6", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00086/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00086/manifest.json new file mode 100644 index 00000000..793ab0c9 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00086/manifest.json @@ -0,0 +1,93 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00086", + "parentTask": "M16-GAP-00085", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "OCEAN_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00085/manifest.json", + "sha256": "4c1933a0d6f5e2828eda287e0e05422f30336a17217529b7e18d9fd8cd333380" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00086-modifier-OCEAN.blend", + "sha256": "1b6a43508676777d94770f3fbbee33161a578ed93ad7054bed48ff91a96ecae1" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00086.py", + "sha256": "808f73b3c5cd06d60f96d9040189c4a2da64487326d9c8c9dc385f7715d8c4c7" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00086/ocean-modifier-desktop-report.json", + "sha256": "d2217b8def179e48ea11a5bfcd9376765d2fca8ce22d1673b3d46d284f21af3f" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00086/ocean-modifier-local-exact-report.json", + "sha256": "33a86a21a856190f97c618df2aa307ad102e11da5260ce45f48aec961bf1acdd" + } + }, + "nextTask": "M16-GAP-00087", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "6ef5409f3a1e3713f50ac67e616d5c75c2258e0dc13cc5fd814cd68f7198d3dd", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "dbab2a2dab2485d870fe827fed017c6d43659a3adc266ac94c2e4a663ef128a6", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00087/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00087/manifest.json new file mode 100644 index 00000000..7bf87f17 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00087/manifest.json @@ -0,0 +1,93 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00087", + "parentTask": "M16-GAP-00086", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "PARTICLE_INSTANCE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00086/manifest.json", + "sha256": "5c40b1c44f08c2d2729a99a8777bbd7f0185774aae540cc2ca713a68d04164de" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00087-modifier-PARTICLE_INSTANCE.blend", + "sha256": "d4f4667cac6061406c5a7bf8231fdaf9e6ee589ee57d168b21fa9347f90395da" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00087.py", + "sha256": "d9ee675f1c26cbed6e95daaac356c5eaec6c76f065d874cecd6710dec46e6261" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00087/particle-instance-modifier-desktop-report.json", + "sha256": "a680090b9010d79608825fa02593b6a27506e233bf331b043085a41bf3d912a8" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00087/particle-instance-modifier-local-exact-report.json", + "sha256": "b68f61eb0596709da28a4ca0e4f19e3bc6f213191ff64c40c04d2be9ed5dbde7" + } + }, + "nextTask": "M16-GAP-00088", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "c82fd4483f92fdac19824f68df12f8eb7013933f568a9516eac3f2ae9a69bee1", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "dbab2a2dab2485d870fe827fed017c6d43659a3adc266ac94c2e4a663ef128a6", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00088/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00088/manifest.json new file mode 100644 index 00000000..0834a017 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00088/manifest.json @@ -0,0 +1,109 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00088", + "parentTask": "M16-GAP-00087", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "PARTICLE_SYSTEM_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00087/manifest.json", + "sha256": "a4f27a71fefea748d08bca8e6ef5741e094604aec8c00a505a63dcc491306050" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00088-modifier-PARTICLE_SYSTEM.blend", + "sha256": "b0e15d7d4821cd9b60e977686142f7bf26c197c6f76c31c59d5dbe06fa5316bf" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00088.py", + "sha256": "1aa118a77f3639ec6761c0083876c4fcb70b504734ffb1f1a6366e670ecd3255" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "modifierCmake": { + "path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", + "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127" + }, + "particleModifier": { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f" + }, + "particleCore": { + "path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", + "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c" + }, + "physicsReader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00088/particle-system-modifier-desktop-report.json", + "sha256": "a53c039a969a1a9affe57d435c281707882fcdb2f4772473801fed6c8ee45914" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00088/particle-system-modifier-local-exact-report.json", + "sha256": "905fae2ec36e1447a28d314cfc6ddce00dd71ddf090be505b16b76860f5e3643" + } + }, + "nextTask": "M16-GAP-00089", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "c8bec6dccee843edc1a70672dd25a4cef83aceb2ae950ea37e37c907d90735b2", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "dbab2a2dab2485d870fe827fed017c6d43659a3adc266ac94c2e4a663ef128a6", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "52c0d2d4c2b652d63a205f07c1547f037ba0479b1107bc3726f48727b312d8d0", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "52c0d2d4c2b652d63a205f07c1547f037ba0479b1107bc3726f48727b312d8d0", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00089/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00089/manifest.json new file mode 100644 index 00000000..02da9c5f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00089/manifest.json @@ -0,0 +1,109 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00089", + "parentTask": "M16-GAP-00088", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "REMESH_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00088/manifest.json", + "sha256": "6fc982fa3d2de26546a5825e90f5b0ff3c5f9243e92acaf49636598b7d5971f1" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00089-modifier-REMESH.blend", + "sha256": "6cf821a751ef19f4719d29a7c73c3d5acefcb381c5d8afb61673ca4ec068a70e" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00089.py", + "sha256": "bf07af3faa32ab5533ad352b46c4cfdcca45f2f8d22e9e2b894aa7566f1ee250" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "modifierCmake": { + "path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", + "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127" + }, + "particleModifier": { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f" + }, + "particleCore": { + "path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", + "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c" + }, + "physicsReader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00089/remesh-modifier-desktop-report.json", + "sha256": "ac36dcb7a2c59b6f8df45b67b00f45966c38de93dbfa8d016aeef77a8a92b665" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00089/remesh-modifier-local-exact-report.json", + "sha256": "0cc329e5779c02b15cdffc48030451134017870505149a10b9c5e23876d83ba6" + } + }, + "nextTask": "M16-GAP-00090", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "def5270dbba1cf0e4517421e799511c3effd0590b5c26a15fb7dddd52a02df24", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "dbab2a2dab2485d870fe827fed017c6d43659a3adc266ac94c2e4a663ef128a6", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "52c0d2d4c2b652d63a205f07c1547f037ba0479b1107bc3726f48727b312d8d0", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "52c0d2d4c2b652d63a205f07c1547f037ba0479b1107bc3726f48727b312d8d0", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00090/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00090/manifest.json new file mode 100644 index 00000000..d1fd9f85 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00090/manifest.json @@ -0,0 +1,109 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00090", + "parentTask": "M16-GAP-00089", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "SCREW_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00089/manifest.json", + "sha256": "ae9b642d9e35b4a5b14cec69a949fe4aaf7dbe3216fa03c08406a75847d0629c" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00090-modifier-SCREW.blend", + "sha256": "3cfe313b349aff539f46496c520b04696842252655f8d15230c9a7b24b857d2c" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00090.py", + "sha256": "8a3687c6baed4826d7acb1e07c01ad7fc706b7279076eb32267f290c1c1538dd" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "modifierCmake": { + "path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", + "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127" + }, + "particleModifier": { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f" + }, + "particleCore": { + "path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", + "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c" + }, + "physicsReader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00090/screw-modifier-desktop-report.json", + "sha256": "af225b5b2f660ae70fe0315527b79d5e74db996db3722222bed98194023de28e" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00090/screw-modifier-local-exact-report.json", + "sha256": "3998657085e2d1f963540cd97afd7980cdcd50ec96897ab22d612183a0e5e531" + } + }, + "nextTask": "M16-GAP-00091", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "03457cd58754627999a81957a3f912510f45b0c28131fbf1fcbdab656dd3c2a6", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "dbab2a2dab2485d870fe827fed017c6d43659a3adc266ac94c2e4a663ef128a6", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "52c0d2d4c2b652d63a205f07c1547f037ba0479b1107bc3726f48727b312d8d0", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "52c0d2d4c2b652d63a205f07c1547f037ba0479b1107bc3726f48727b312d8d0", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00091/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00091/manifest.json new file mode 100644 index 00000000..dbf08c17 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00091/manifest.json @@ -0,0 +1,109 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00091", + "parentTask": "M16-GAP-00090", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "SHRINKWRAP_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00090/manifest.json", + "sha256": "072103cdb6d1884c18d422358b33f03ca1ebb0bbf7291d7958f25c3e8cb4bf75" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00091-modifier-SHRINKWRAP.blend", + "sha256": "05047e750c6b03b39ac18a3090e450960092ed0ab03a61b649ca11c0a0b5aa85" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00091.py", + "sha256": "9c31a3c7fb798db179e37d43d89b633141e9b8b18dbfd34a7eb1502c5ef805df" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "modifierCmake": { + "path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", + "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127" + }, + "particleModifier": { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f" + }, + "particleCore": { + "path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", + "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c" + }, + "physicsReader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00091/shrinkwrap-modifier-desktop-report.json", + "sha256": "4bc01b8e0d79256b2e5fa9e149bc53667790eab383beda260fdff77d6f4f0c6e" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00091/shrinkwrap-modifier-local-exact-report.json", + "sha256": "db44cad8b1b6173303ca5f63c442eb82805324e08c6786323f6803803d52d391" + } + }, + "nextTask": "M16-GAP-00092", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "da1cd2a6047296754a776b8b3190104b8bbcb3fbe04f27d2ba2018c39b7797ac", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "dbab2a2dab2485d870fe827fed017c6d43659a3adc266ac94c2e4a663ef128a6", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "52c0d2d4c2b652d63a205f07c1547f037ba0479b1107bc3726f48727b312d8d0", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "52c0d2d4c2b652d63a205f07c1547f037ba0479b1107bc3726f48727b312d8d0", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00092/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00092/manifest.json new file mode 100644 index 00000000..b4e87f4c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00092/manifest.json @@ -0,0 +1,109 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00092", + "parentTask": "M16-GAP-00091", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "SIMPLE_DEFORM_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00091/manifest.json", + "sha256": "823439143108c583ca5bb20aa86dc628a1d9227d7beeef98c601f2d5b27f3aa3" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00092-modifier-SIMPLE_DEFORM.blend", + "sha256": "3be9ab1afb8c518382aa329797e0a4b7369ab7f01cab6fec1481fcda187062af" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00092.py", + "sha256": "93acc4af7e20ddf63e1bc6ffb4e200b06af28a4ab943311b2170a8c01c248c06" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "modifierCmake": { + "path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", + "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127" + }, + "particleModifier": { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f" + }, + "particleCore": { + "path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", + "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c" + }, + "physicsReader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00092/simple-deform-modifier-desktop-report.json", + "sha256": "532ad0f944d179ec640fdf706b9e4e78eaaa3635410b404f7a146b68a400768c" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00092/simple-deform-modifier-local-exact-report.json", + "sha256": "24eacc0f43139fbd4fe232e9418d7c81a8eee8bc9b10b15bc2818e1df0794aff" + } + }, + "nextTask": "M16-GAP-00093", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "47920569bd1074e698f21a433c75e9b7ce0724689c5d278c7abfa4123fe9f8d5", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "dbab2a2dab2485d870fe827fed017c6d43659a3adc266ac94c2e4a663ef128a6", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "52c0d2d4c2b652d63a205f07c1547f037ba0479b1107bc3726f48727b312d8d0", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "52c0d2d4c2b652d63a205f07c1547f037ba0479b1107bc3726f48727b312d8d0", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00093/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00093/manifest.json new file mode 100644 index 00000000..28f5e449 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00093/manifest.json @@ -0,0 +1,109 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00093", + "parentTask": "M16-GAP-00092", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "SKIN_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00092/manifest.json", + "sha256": "87f0158baee779ddf751287c0bee3f0b0fa0196cb5869817d959fd654d9d5e01" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00093-modifier-SKIN.blend", + "sha256": "e24d021bdb48b6a17945b1b6c6a1933ab3a9fabd321775f5bf0313bc6e7797f3" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00093.py", + "sha256": "3fad88717f143ab554d3926f86d218ed47ee4a682db379d337f897c41df2088f" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "modifierCmake": { + "path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", + "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127" + }, + "particleModifier": { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f" + }, + "particleCore": { + "path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", + "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c" + }, + "physicsReader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00093/skin-modifier-desktop-report.json", + "sha256": "cf30f79bb5f5e90749068d678a6746808c87175aa9ad51117f69b6b90aad7884" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00093/skin-modifier-local-exact-report.json", + "sha256": "e2df081504aab183867915c78f4829d90e51fb610586a1722752cceaee0da674" + } + }, + "nextTask": "M16-GAP-00094", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "d04dce1957e93b81ed405ea18f13e350332c9bb1fc396472b1ff3b2e4f26ce01", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "cb66079d9984dde7463ac947e3e06634e6c4a07145e24f55cd722d3bc37bf568", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "f28bdedc2131870760f74fc880f93744a76a74841d5fe11c5d1675aeb5edbd89", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "f28bdedc2131870760f74fc880f93744a76a74841d5fe11c5d1675aeb5edbd89", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00094/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00094/manifest.json new file mode 100644 index 00000000..1ce34a4c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00094/manifest.json @@ -0,0 +1,109 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00094", + "parentTask": "M16-GAP-00093", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "SMOOTH_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00093/manifest.json", + "sha256": "80353dc192b8e9e21624ab1acb0102648d6e743c36bfac2af5ddb92707f414b5" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00094-modifier-SMOOTH.blend", + "sha256": "2e416d62faeeb22313d56ba073cb184618f80b751cf31f100ce8e0c78565de02" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00094.py", + "sha256": "3e10f94a84a52c1b6114d1d6fcf764481b8bf79dfc8cb533389c016c34c36938" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "modifierCmake": { + "path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", + "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127" + }, + "particleModifier": { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f" + }, + "particleCore": { + "path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", + "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c" + }, + "physicsReader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00094/smooth-modifier-desktop-report.json", + "sha256": "762f02f1f460bd1deb71a7441ff85b969ff8ef916b32d95e46fe243ce110d1cb" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00094/smooth-modifier-local-exact-report.json", + "sha256": "0373da7c5ce2b369840c080bfe5dd341596208098fc2f3c3ae864031d965bc6c" + } + }, + "nextTask": "M16-GAP-00095", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "229b09fbdcc541d0c2a2367d420c3f0d5c623621ed10143896a374f1ce072687", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "12dfca701287049fd4adc05b6e2ac475775c1c52a9527b93158f0d2a9581e99c", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "01cc2be8069f18ed1cde6ed28efa840e3b79efdf4f295a37dcab10b35ca58506", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "ffd2a606a83140661e14b0d916f5775c8eb60197f6cdccd96a64fadaacb160f4", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "ffd2a606a83140661e14b0d916f5775c8eb60197f6cdccd96a64fadaacb160f4", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00095/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00095/manifest.json new file mode 100644 index 00000000..3e0b4f76 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00095/manifest.json @@ -0,0 +1,109 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00095", + "parentTask": "M16-GAP-00094", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "SOFT_BODY_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00094/manifest.json", + "sha256": "50a37762ad06ba05266dacc84dd0370e718b2fd98ae235d1bf9a975530cee31a" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00095-modifier-SOFT_BODY.blend", + "sha256": "2bfd58334380f70c1309ebfd00c092c531bb7b3921620e799c57752c7ee5596f" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00095.py", + "sha256": "a82183922f2228f641d8bd59689e807e8caa495886a581e58e86f9c307b0f45b" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "modifierCmake": { + "path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", + "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127" + }, + "particleModifier": { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f" + }, + "particleCore": { + "path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", + "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c" + }, + "physicsReader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00095/soft-body-modifier-desktop-report.json", + "sha256": "5228fc63f22473e4e1ef9d82e9018c4739c6b63469da4b693240ac307336bba7" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00095/soft-body-modifier-local-exact-report.json", + "sha256": "e0767cb702d9c0612c8e8bc140dd2e00f5af6f782c3f63c5ae15407a6c5fcaa9" + } + }, + "nextTask": "M16-GAP-00096", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "229b09fbdcc541d0c2a2367d420c3f0d5c623621ed10143896a374f1ce072687", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "7442a43ad4a4a85cdd781b64a5b0752bd7db9c48855d4f257228200647070da7", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "4ae389f76bfcc71b1bc731b5bd00a06154570f6e2cdcbec398521614001a7776", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "178e48cdb044d86ffcdeaec0c0d59578d99ce77c35c6bc09acc47e366fd1a951", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "178e48cdb044d86ffcdeaec0c0d59578d99ce77c35c6bc09acc47e366fd1a951", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00096/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00096/manifest.json new file mode 100644 index 00000000..dd739e35 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00096/manifest.json @@ -0,0 +1,109 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00096", + "parentTask": "M16-GAP-00095", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "SOLIDIFY_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00095/manifest.json", + "sha256": "9fa2c3ed7fbee3b52c0cb2f629f7886e492cfec2a2a4d11b93f33a0a16d7a92e" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00096-modifier-SOLIDIFY.blend", + "sha256": "0b319df9e6c4f677728af992114196e4fa29f80effabc01b3dbfd639bc2b66d5" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00096.py", + "sha256": "8ffa8697f2d4490f9ca2f04d4eaa3866be4bdecbe17e9d5db11c13882034c009" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "modifierCmake": { + "path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", + "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127" + }, + "particleModifier": { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f" + }, + "particleCore": { + "path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", + "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c" + }, + "physicsReader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00096/solidify-modifier-desktop-report.json", + "sha256": "914187f8ec57e442d85fae5710aa98bd058e91930bdacd7928694281bad54df3" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00096/solidify-modifier-local-exact-report.json", + "sha256": "b6437999773cc18296a54e041c8df8b33d595f9ebe67c826a47f62308d307232" + } + }, + "nextTask": "M16-GAP-00097", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "06907bb045cb0c14b518b620facded50ae5cd52f23e2281de04017ff1b11bb71", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "d613cf0915abdf2cdc1f2a534e1e0a478c38cb5ca2d89c2e3ad708e957e0849a", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "11c598f89b531f2e9d6e2169ab6eed07b7cbea86c8b8d58ef4c6ff045c6414bf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "1a991f13fc2f2e4a7b00366c52e6285198c24e72c110bb5f1f6d005e56089104", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "1a991f13fc2f2e4a7b00366c52e6285198c24e72c110bb5f1f6d005e56089104", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00097/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00097/manifest.json new file mode 100644 index 00000000..87d7ac23 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00097/manifest.json @@ -0,0 +1,109 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00097", + "parentTask": "M16-GAP-00096", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "SUBSURF_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00096/manifest.json", + "sha256": "f539f112a4c5aaa4565554d8a3d5947c9c77a8d8df8ef8f39adbc1b1146a2b8b" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00097-modifier-SUBSURF.blend", + "sha256": "f0c3e9801b4138c3701599e24242374dbb6217f223e2decc7c04d5558094108a" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00097.py", + "sha256": "cd26d7bd580a78e40a78f7bd47526dbd3430d75b9c1f9c63849668b613277960" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "modifierCmake": { + "path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", + "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127" + }, + "particleModifier": { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f" + }, + "particleCore": { + "path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", + "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c" + }, + "physicsReader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00097/subsurf-modifier-desktop-report.json", + "sha256": "e1ce95f66a26b4e687bd32fc6f975044033d921703954e0e26674dfbce556bea" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00097/subsurf-modifier-local-exact-report.json", + "sha256": "c146dabc29a94e25df4f09e6de727a3377f48ea706dbe74f51b903efbc5a293d" + } + }, + "nextTask": "M16-GAP-00098", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "65d211c3a1ea33eca121771f33870466d53ef6248743eff96bd5e789b9f049be", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "abb6f9d3de215df6abff830a83b3e964bccc0c42b29ab2b16af599508c156f83", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "11c598f89b531f2e9d6e2169ab6eed07b7cbea86c8b8d58ef4c6ff045c6414bf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "1a991f13fc2f2e4a7b00366c52e6285198c24e72c110bb5f1f6d005e56089104", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "1a991f13fc2f2e4a7b00366c52e6285198c24e72c110bb5f1f6d005e56089104", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00098/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00098/manifest.json new file mode 100644 index 00000000..4b9d659f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00098/manifest.json @@ -0,0 +1,109 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00098", + "parentTask": "M16-GAP-00097", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "SURFACE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00097/manifest.json", + "sha256": "df24b8387d70f8c6ca35306fb7994b056801c0f700769584d718bf30a885adee" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00098-modifier-SURFACE.blend", + "sha256": "41aa335359773ce72a3f372784d1fbf74a1ec65c077652f0cb98d34793edc937" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00098.py", + "sha256": "988ad257572050d657a7c82ece4f639246a93e700ee3cb216469fb73bbb948e9" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "modifierCmake": { + "path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", + "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127" + }, + "particleModifier": { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f" + }, + "particleCore": { + "path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", + "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c" + }, + "physicsReader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00098/surface-modifier-desktop-report.json", + "sha256": "75a588cd606fe0395c7f6541eed4ca26daa0109d7f6fa62cffe87e41149d0a95" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00098/surface-modifier-local-exact-report.json", + "sha256": "7b004c755290ebe920a9296a7768ff3231eaec66e1836536d98dffa4d6c6dbab" + } + }, + "nextTask": "M16-GAP-00099", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "65d211c3a1ea33eca121771f33870466d53ef6248743eff96bd5e789b9f049be", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "dc23d8d7837fd9d43896804c076221cf584bf044d2e897bb2dad2320a662959a", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "11c598f89b531f2e9d6e2169ab6eed07b7cbea86c8b8d58ef4c6ff045c6414bf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "1a991f13fc2f2e4a7b00366c52e6285198c24e72c110bb5f1f6d005e56089104", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "1a991f13fc2f2e4a7b00366c52e6285198c24e72c110bb5f1f6d005e56089104", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00099/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00099/manifest.json new file mode 100644 index 00000000..0cb3153f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00099/manifest.json @@ -0,0 +1,109 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00099", + "parentTask": "M16-GAP-00098", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "SURFACE_DEFORM_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00098/manifest.json", + "sha256": "c447e41b823dd1c7bd59619771424eb733bd257a58029de4b794edb5b544f7e2" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00099-modifier-SURFACE_DEFORM.blend", + "sha256": "cb459101d9ecdd4e5761a3e216dcf3eda99a09eaad5642573ef0ba0b4c063072" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00099.py", + "sha256": "bafaa8cf007d02851acca674b3894d758a8dc3874ca87c184d705a07fdfc724d" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "modifierCmake": { + "path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", + "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127" + }, + "particleModifier": { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f" + }, + "particleCore": { + "path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", + "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c" + }, + "physicsReader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00099/surface-deform-modifier-desktop-report.json", + "sha256": "bfd91c545efcf0688bfa9cee24e65de82224eecf715a1ab4385061a7d7df4db1" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00099/surface-deform-modifier-local-exact-report.json", + "sha256": "7d5f760727e03951c3f5b2c3e885b33ce92af7293ca101732fa490136dc25ed5" + } + }, + "nextTask": "M16-GAP-00100", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "65d211c3a1ea33eca121771f33870466d53ef6248743eff96bd5e789b9f049be", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "998a0950251d1c0069cf709b1b301268ca9df7705d1b31f97b522f38d83f40a5", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "11c598f89b531f2e9d6e2169ab6eed07b7cbea86c8b8d58ef4c6ff045c6414bf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "1a991f13fc2f2e4a7b00366c52e6285198c24e72c110bb5f1f6d005e56089104", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "1a991f13fc2f2e4a7b00366c52e6285198c24e72c110bb5f1f6d005e56089104", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00100/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00100/manifest.json new file mode 100644 index 00000000..a2753d40 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00100/manifest.json @@ -0,0 +1,109 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00100", + "parentTask": "M16-GAP-00099", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "TRIANGULATE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00099/manifest.json", + "sha256": "08e66a8c4bede64bcfc0e6625843f70f4e51b03be655b0078110e086ce599a7b" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00100-modifier-TRIANGULATE.blend", + "sha256": "4475c06ab20bc9f9f771556173e7d5782049548dfcb845e7febba79c27f5ffcf" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00100.py", + "sha256": "38d58e97c7b10b34abb70090deea9127a9bfda58bf446a8fa6fa7b8835482e82" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "modifierCmake": { + "path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", + "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127" + }, + "particleModifier": { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f" + }, + "particleCore": { + "path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", + "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c" + }, + "physicsReader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00100/triangulate-modifier-desktop-report.json", + "sha256": "8e1472c739110448d2c1987c32403714b9465606c0e8b3a8e3ae4867743ba377" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00100/triangulate-modifier-local-exact-report.json", + "sha256": "d715e77c6e2ef82c9611a68a3808057d08feb3de715ab1a3f07c6e1b67b6b69d" + } + }, + "nextTask": "M16-GAP-00101", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "140a3a86220c2af01d5daad10dd482316b208a6a2aa0af762dd39b65c6cda9d8", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "fff50cc76b793191b61746290d28c6ea1d429f700d094aa444d8f2f91db26462", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "11c598f89b531f2e9d6e2169ab6eed07b7cbea86c8b8d58ef4c6ff045c6414bf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "1a991f13fc2f2e4a7b00366c52e6285198c24e72c110bb5f1f6d005e56089104", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "1a991f13fc2f2e4a7b00366c52e6285198c24e72c110bb5f1f6d005e56089104", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00101/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00101/manifest.json new file mode 100644 index 00000000..6f92063f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00101/manifest.json @@ -0,0 +1,109 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00101", + "parentTask": "M16-GAP-00100", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "UV_PROJECT_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00100/manifest.json", + "sha256": "2acecca22e6e3cbcaf6fad687cff49558182f1b16a9052d303162e863c2fb17e" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00101-modifier-UV_PROJECT.blend", + "sha256": "e5cf137ee1feddf7b03f287b04299a7a78177b58e63545ccca15c78f202ce2a4" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00101.py", + "sha256": "d86878aacd79189a5c1fce75f94eab1f7c04039562acefa101152cc097334765" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "modifierCmake": { + "path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", + "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127" + }, + "particleModifier": { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f" + }, + "particleCore": { + "path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", + "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c" + }, + "physicsReader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00101/uv-project-modifier-desktop-report.json", + "sha256": "18364763d8956b1426ae0ce7809491562d66833cbf77b7e00b141c002c54d8ed" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00101/uv-project-modifier-local-exact-report.json", + "sha256": "b0605455ac7287165072c928a06d556af759f9f7bd1ba1fac32cccb0ca0e0556" + } + }, + "nextTask": "M16-GAP-00102", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "140a3a86220c2af01d5daad10dd482316b208a6a2aa0af762dd39b65c6cda9d8", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "c9d184a6f0d5ea3aea493cab8fa3e82fd99cc77fc797ef39f4da995df3f225ff", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "11c598f89b531f2e9d6e2169ab6eed07b7cbea86c8b8d58ef4c6ff045c6414bf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "1a991f13fc2f2e4a7b00366c52e6285198c24e72c110bb5f1f6d005e56089104", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "1a991f13fc2f2e4a7b00366c52e6285198c24e72c110bb5f1f6d005e56089104", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00102/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00102/manifest.json new file mode 100644 index 00000000..19d8e65f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00102/manifest.json @@ -0,0 +1,109 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00102", + "parentTask": "M16-GAP-00101", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "UV_WARP_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00101/manifest.json", + "sha256": "ada91eacc9d9d81aef07ba22a8522fa5968491bb202b84db74649098901cefbc" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00102-modifier-UV_WARP.blend", + "sha256": "ad3f2ba8f4d282b2333fc192f3e2fdc598c06125f3b14c9c47b4721f9a1a0df9" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00102.py", + "sha256": "aa91e891f053d2d4716e204c64e54a9c139f8dc9e53b23bf43e7f9c4cbba93b8" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "modifierCmake": { + "path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", + "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127" + }, + "particleModifier": { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f" + }, + "particleCore": { + "path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", + "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c" + }, + "physicsReader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00102/uv-warp-modifier-desktop-report.json", + "sha256": "ed6bf6150e20eef0b7207397cee12db3408836075866f05bb48da92e706ab828" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00102/uv-warp-modifier-local-exact-report.json", + "sha256": "9499f499401b3703ee7e4ebab55516710fc235f08cdbd93271d9b348b066ba5f" + } + }, + "nextTask": "M16-GAP-00103", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "140a3a86220c2af01d5daad10dd482316b208a6a2aa0af762dd39b65c6cda9d8", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "8c30d63a2c7bb08f52836f2a7d085d5cac8ab594b5e14f0e9e587534c85eae45", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "11c598f89b531f2e9d6e2169ab6eed07b7cbea86c8b8d58ef4c6ff045c6414bf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "1a991f13fc2f2e4a7b00366c52e6285198c24e72c110bb5f1f6d005e56089104", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "1a991f13fc2f2e4a7b00366c52e6285198c24e72c110bb5f1f6d005e56089104", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00103/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00103/manifest.json new file mode 100644 index 00000000..f5f63c82 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00103/manifest.json @@ -0,0 +1,114 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00103", + "parentTask": "M16-GAP-00102", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "VERTEX_WEIGHT_EDIT_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00102/manifest.json", + "sha256": "57cf7929d23fbc053782f4bbe4c480bd9432c2af6cfdab74f9e4bc0160c0e7ad" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00103-modifier-VERTEX_WEIGHT_EDIT.blend", + "sha256": "2ecafafb8d81c27842512406dd93978754f624f0e9012e4a2036d32eac1178b2" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00103.py", + "sha256": "383166f3a110e555a87ba5e0f62d5805c6890d736cf79c6f1dd8972e6e6b0a2a" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "modifierCmake": { + "path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", + "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127" + }, + "particleModifier": { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f" + }, + "particleCore": { + "path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", + "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c" + }, + "physicsReader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00103/vertex-weight-edit-modifier-desktop-report.json", + "sha256": "442287f280444efcc0dcfc8602d935066af17aeca0072e978f64ffa3e6e13b9d" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00103/vertex-weight-edit-modifier-local-exact-report.json", + "sha256": "23d26e90775bce127efb1a8572c7a9f92acdf4d22b41bd1de6c78a11b7246ba8" + } + }, + "nextTask": "M16-GAP-00104", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "140a3a86220c2af01d5daad10dd482316b208a6a2aa0af762dd39b65c6cda9d8", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "6f8937c4947673b8582af68c2d48335ef493e4b8d844104abf1e9d2db36ac7f7", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "0e1a72ef3655eb51047dd488c3a9a733022193f1631b21d59c615f8acb1a67f8", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "originalSha256": "92ea7223c192563062d9f485c45cc78290a8809eb79b79d3a28be12081a0c7d6e6f", + "resignedSha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00104/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00104/manifest.json new file mode 100644 index 00000000..4b782aab --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00104/manifest.json @@ -0,0 +1,114 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00104", + "parentTask": "M16-GAP-00103", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "VERTEX_WEIGHT_MIX_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00103/manifest.json", + "sha256": "b6e93793349780cbc30a543d5c6abc9c5ba19df2acb62419a6a25b6da816fb21" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00104-modifier-VERTEX_WEIGHT_MIX.blend", + "sha256": "19a164b591a6fbe02df07797c422aea350e26f1e9125589037067f609095105a" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00104.py", + "sha256": "d3d6405f1f20036043610b8a8bb22faf5e8652d6e47ee08cc40cd5e9f5567464" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "modifierCmake": { + "path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", + "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127" + }, + "particleModifier": { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f" + }, + "particleCore": { + "path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", + "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c" + }, + "physicsReader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00104/vertex-weight-mix-modifier-desktop-report.json", + "sha256": "6121a089239450b95037c25858958ab5d067af538657f56452fdce81186834a6" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00104/vertex-weight-mix-modifier-local-exact-report.json", + "sha256": "a755e5c88c8a22305155dc02c455e9fe6ccb1e92b7053be7a3ca57da2aa48971" + } + }, + "nextTask": "M16-GAP-00105", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "140a3a86220c2af01d5daad10dd482316b208a6a2aa0af762dd39b65c6cda9d8", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "0f1f49ee8663b9f25a350d4f90c5dd682e30933709c423f5d0d02e1306618886", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "0e1a72ef3655eb51047dd488c3a9a733022193f1631b21d59c615f8acb1a67f8", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "originalSha256": "92ea7223c192563062d9f485c45cc78290a8809eb79b79d3a28be12081a0c7d6e6f", + "resignedSha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00105/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00105/manifest.json new file mode 100644 index 00000000..7388e1c4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00105/manifest.json @@ -0,0 +1,114 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00105", + "parentTask": "M16-GAP-00104", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "VERTEX_WEIGHT_PROXIMITY_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00104/manifest.json", + "sha256": "47790989f092bf86ec6f628d88249455428265d6d0f5e4cffa1d9d55e87757b2" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00105-modifier-VERTEX_WEIGHT_PROXIMITY.blend", + "sha256": "53234cfd0e10e91b78465d8f18a4b8d863885d1d93c0757c07f0d31da486fbf2" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00105.py", + "sha256": "59dfdb7ba6bb853ebc3d5d24a7c63c6a09fdda5381d62febc211128a87adc7d9" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "modifierCmake": { + "path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", + "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127" + }, + "particleModifier": { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f" + }, + "particleCore": { + "path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", + "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c" + }, + "physicsReader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00105/vertex-weight-proximity-modifier-desktop-report.json", + "sha256": "7e6ebaf459de04781a6e6467be84c6065039a4f3fb6b4c748fcbeda3b4806179" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00105/vertex-weight-proximity-modifier-local-exact-report.json", + "sha256": "7594f78376b061793524a4c586ecd2335d7aa9064d4e31b840f92e03819fac1f" + } + }, + "nextTask": "M16-GAP-00106", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "140a3a86220c2af01d5daad10dd482316b208a6a2aa0af762dd39b65c6cda9d8", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "cbb3b8077beaef003acab57637c051d5ab1c4c8cffa81171577474a7a0329ca7", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "0e1a72ef3655eb51047dd488c3a9a733022193f1631b21d59c615f8acb1a67f8", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "originalSha256": "92ea7223c192563062d9f485c45cc78290a8809eb79b79d3a28be12081a0c7d6e6f", + "resignedSha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00106/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00106/manifest.json new file mode 100644 index 00000000..552d0414 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00106/manifest.json @@ -0,0 +1,114 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00106", + "parentTask": "M16-GAP-00105", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "VOLUME_DISPLACE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00105/manifest.json", + "sha256": "cf9de11d57b483cf564f2f3e782724ca84f86ddfc6e320e757051a50912281d7" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00106-modifier-VOLUME_DISPLACE.blend", + "sha256": "95a922b90fb5bce90cb2f7995761805709a4a18b9206fab7f30e3848160b2c95" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00106.py", + "sha256": "7aad13aed9fc5da77c671e89961dc744228cfea00c65044270000f0fb8e4c396" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "modifierCmake": { + "path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", + "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127" + }, + "particleModifier": { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f" + }, + "particleCore": { + "path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", + "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c" + }, + "physicsReader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00106/volume-displace-modifier-desktop-report.json", + "sha256": "00ee176bc712320454f7ddb585710ccab243b9b5b89f2e2f0eb364c536bddcd6" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00106/volume-displace-modifier-local-exact-report.json", + "sha256": "9c44441bc0cfadbdce570f5c3e7b074e3da00f19a7f8a2e8d84d0ae6167164f8" + } + }, + "nextTask": "M16-GAP-00107", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "140a3a86220c2af01d5daad10dd482316b208a6a2aa0af762dd39b65c6cda9d8", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "318cea1fb5a332cf2d4504c5319781257b7450ccc1b9ee0c61d1f4c99eebb0db", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "0e1a72ef3655eb51047dd488c3a9a733022193f1631b21d59c615f8acb1a67f8", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "originalSha256": "92ea7223c192563062d9f485c45cc78290a8809eb79b79d3a28be12081a0c7d6e6f", + "resignedSha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00107/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00107/manifest.json new file mode 100644 index 00000000..e99d4153 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00107/manifest.json @@ -0,0 +1,114 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00107", + "parentTask": "M16-GAP-00106", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "VOLUME_TO_MESH_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00106/manifest.json", + "sha256": "a2d9d12cc1bfdd28c4766ca951d1d63aff3cb53631d36f618e85918a3b7c717d" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00107-modifier-VOLUME_TO_MESH.blend", + "sha256": "fab68f64a3d9bbf1b224393518bc43a454601eabf8d936020aee5b478012356f" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00107.py", + "sha256": "9730c26f96cd994d92cf2e2670718124f899e0ce2e3d044a10404f8b0fafa834" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "modifierCmake": { + "path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", + "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127" + }, + "particleModifier": { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f" + }, + "particleCore": { + "path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", + "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c" + }, + "physicsReader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00107/volume-to-mesh-modifier-desktop-report.json", + "sha256": "7cbfeae24f5f74a8b9509da418a65520a595530b164733bbd9ecf9de99212f02" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00107/volume-to-mesh-modifier-local-exact-report.json", + "sha256": "1083d3e4144e172245c61b1ff8afa8b1bcf80b9bfae4d066e7eb0cfab80f5279" + } + }, + "nextTask": "M16-GAP-00108", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "140a3a86220c2af01d5daad10dd482316b208a6a2aa0af762dd39b65c6cda9d8", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "b1707169fa5c648b9c8b21d6057f0c1dbb78c11a7a5e0f16ee135f49a28ce0d2", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "0e1a72ef3655eb51047dd488c3a9a733022193f1631b21d59c615f8acb1a67f8", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "originalSha256": "92ea7223c192563062d9f485c45cc78290a8809eb79b79d3a28be12081a0c7d6e6f", + "resignedSha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00108/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00108/manifest.json new file mode 100644 index 00000000..33a93653 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00108/manifest.json @@ -0,0 +1,114 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00108", + "parentTask": "M16-GAP-00107", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "WARP_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00107/manifest.json", + "sha256": "760706922c497ed0898b84fd07789d0d8c53f5a448191ad6c2425d1d7e13ad20" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00108-modifier-WARP.blend", + "sha256": "a328ef4b4cbcf265de0483012f80860fccb75e53fcb25bd6ccbe81dc97cb0ba5" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00108.py", + "sha256": "ee8667312b3608fff806a2f888edca90cad3a960184ee64d0b7b33fd9cad2657" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "modifierCmake": { + "path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", + "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127" + }, + "particleModifier": { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f" + }, + "particleCore": { + "path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", + "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c" + }, + "physicsReader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00108/warp-modifier-desktop-report.json", + "sha256": "5daba0b7befe92e75dab3dca35e00ee1e3c211ab02e9f5ec3ec9bdb5c6164250" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00108/warp-modifier-local-exact-report.json", + "sha256": "0aeac2276b0828180780358383b626295b1ef43fece15ac6fcadff880f861dd3" + } + }, + "nextTask": "M16-GAP-00109", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "140a3a86220c2af01d5daad10dd482316b208a6a2aa0af762dd39b65c6cda9d8", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "71f6265a1769981b08b714ddbf0c95881181e003694761935e7e592279d3237a", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "0e1a72ef3655eb51047dd488c3a9a733022193f1631b21d59c615f8acb1a67f8", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "originalSha256": "92ea7223c192563062d9f485c45cc78290a8809eb79b79d3a28be12081a0c7d6e6f", + "resignedSha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00109/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00109/manifest.json new file mode 100644 index 00000000..fd7a98ef --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00109/manifest.json @@ -0,0 +1,114 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00109", + "parentTask": "M16-GAP-00108", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "WAVE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00108/manifest.json", + "sha256": "4a3c0e88bba11217d661ea22c62cc01fe15379527cec68b8b7c92d01042ecda2" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00109-modifier-WAVE.blend", + "sha256": "41c81c36b176656e08a33c9c428da5a257c11ab6e9f0f8bfa530336b7ab159a8" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00109.py", + "sha256": "2c8f4bfe4a36a069fd6e106fc80836bf38df2663e2343a6cde15114f00cbffdc" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "modifierCmake": { + "path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", + "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127" + }, + "particleModifier": { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f" + }, + "particleCore": { + "path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", + "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c" + }, + "physicsReader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00109/wave-modifier-desktop-report.json", + "sha256": "ddec88c688169daaaeda211a7b5b1ad2a7e9bd2f5baf29c8c85c5d5ae2265f3c" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00109/wave-modifier-local-exact-report.json", + "sha256": "29e011eec263333878bc92b5514ec9b153142872bd59d89cecba740395f7e7bc" + } + }, + "nextTask": "M16-GAP-00110", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "87827a3285bd779d9faff41e7aaea94eb17e6e5f402f966a106e0e6a209de54e", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "a50a1f23fa9e8eef0eb32af88a4c0983b63176b7f39aee55deafb59adcb37ac4", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "0e1a72ef3655eb51047dd488c3a9a733022193f1631b21d59c615f8acb1a67f8", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "originalSha256": "92ea7223c192563062d9f485c45cc78290a8809eb79b79d3a28be12081a0c7d6e6f", + "resignedSha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00110/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00110/manifest.json new file mode 100644 index 00000000..8f6dec9c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00110/manifest.json @@ -0,0 +1,114 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00110", + "parentTask": "M16-GAP-00109", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "WEIGHTED_NORMAL_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00109/manifest.json", + "sha256": "8af6813c16138942441f7772e08a6f2c6586e21c665248ee7566be5f26279081" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00110-modifier-WEIGHTED_NORMAL.blend", + "sha256": "26469e905bbc2c52467b4b1361f80ffb75b756206974724debbae5e06fd363f0" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00110.py", + "sha256": "17fb8ee025fe4fadff5ca63401d795ace27920d88fd4dbe4c32af7614e0892ab" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "modifierCmake": { + "path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", + "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127" + }, + "particleModifier": { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f" + }, + "particleCore": { + "path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", + "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c" + }, + "physicsReader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00110/weighted-normal-modifier-desktop-report.json", + "sha256": "ae59fdc10466bfa461dbaed1aa45bb2ac6211b8a303e58de8ea3ee9c5e0e40ba" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00110/weighted-normal-modifier-local-exact-report.json", + "sha256": "6360a1706e7456a5d51fa2effbc7505cd7209818690ab1b7665abf0bbff7a311" + } + }, + "nextTask": "M16-GAP-00111", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "be849a5eaae8c3b7551aa3e0f560aba3eccd0d346769fdc2093dd4f46ff80652", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "87ef950db06c906b1d541af408295d589167f96c66ba87e19d5006f353da4a54", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "0e1a72ef3655eb51047dd488c3a9a733022193f1631b21d59c615f8acb1a67f8", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "originalSha256": "92ea7223c192563062d9f485c45cc78290a8809eb79b79d3a28be12081a0c7d6e6f", + "resignedSha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00111/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00111/manifest.json new file mode 100644 index 00000000..2f81cbe0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00111/manifest.json @@ -0,0 +1,114 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00111", + "parentTask": "M16-GAP-00110", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "WELD_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00110/manifest.json", + "sha256": "a1432f7c5e7f4d3891e00872c9023890b177806eebd3f988ba6f5968817a9ea7" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00111-modifier-WELD.blend", + "sha256": "fa82df1cc06f762f90acfd62c6172c631534838342d971e2ecba931d9bbb4b14" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00111.py", + "sha256": "70a5a835615617c1feaa7795f1ee8c4dc2e07021a62c97ea87915a4231ef509c" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "modifierCmake": { + "path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", + "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127" + }, + "particleModifier": { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f" + }, + "particleCore": { + "path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", + "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c" + }, + "physicsReader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00111/weld-modifier-desktop-report.json", + "sha256": "cef902e3eaaae85c8c441320ed1dad00b1193a73003c098e61ba179538972d9d" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00111/weld-modifier-local-exact-report.json", + "sha256": "91ec33d946f8b526ae5af1f0b533896e5c6678655b9ddaa844ca5fafdb773e9e" + } + }, + "nextTask": "M16-GAP-00112", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generic-modifier-desktop.py", + "originalSha256": "4f5ae268fd90a36ef11d4fe411e18968bc6a1479e83f72b6dbb369a082fb4f0c", + "resignedSha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "aa81363720f6d980e9aa93b9dfe4d50345b3ceb17b0f73be3c32cfca0a977c35", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "0e1a72ef3655eb51047dd488c3a9a733022193f1631b21d59c615f8acb1a67f8", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "originalSha256": "92ea7223c192563062d9f485c45cc78290a8809eb79b79d3a28be12081a0c7d6e6f", + "resignedSha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00112/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00112/manifest.json new file mode 100644 index 00000000..974fd999 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00112/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00112", + "parentTask": "M16-GAP-00111", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "WIREFRAME_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00111/manifest.json", + "sha256": "62531e22304954c1ded239004e91c95f9c42d8c9d43d039e339be52e68b20c8f" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00112-modifier-WIREFRAME.blend", + "sha256": "b1952474708ab9f56145f661b3cf5562dc0535a5fa0fe6903c71864af73b0641" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00112.py", + "sha256": "403b955f748db90be606506213ee1cd50f8c95f45ecc4ed1bda8a847dd18ab6d" + }, + "desktopChecker": { + "path": "tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "modifierCmake": { + "path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", + "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127" + }, + "particleModifier": { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f" + }, + "particleCore": { + "path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", + "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c" + }, + "physicsReader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00112/wireframe-modifier-desktop-report.json", + "sha256": "f83750dfca898b529013b6d3fbefa283e5800a00312c3c613d06735a362ee26a" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00112/wireframe-modifier-local-exact-report.json", + "sha256": "b74f89e88d7e280175c4ff534ebf20477ca35aed189b53ebd4a69fbdacc7e92c" + } + }, + "nextTask": "M16-GAP-00113", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "24069332d14f2eae8cb9a105abcdf7571f04571731f351fd69da6e579f70bcf1", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "0e1a72ef3655eb51047dd488c3a9a733022193f1631b21d59c615f8acb1a67f8", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00113/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00113/manifest.json new file mode 100644 index 00000000..09f03c7a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00113/manifest.json @@ -0,0 +1,109 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00113", + "parentTask": "M16-GAP-00112", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_BAKE_KEYS_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00112/manifest.json", + "sha256": "3d8defe2c37894bcc30e7e752499016b89101057f68301d19dcb24414e682d55" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00113-operator-action.bake_keys.blend", + "sha256": "6253d0f8f008dcf8881bae4326d09648d21977a844c0f604c1a4773ef8372931" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00113.py", + "sha256": "e1eb89000230ec1d198930f06da6b5b35207a83a93eaf3e333c69560d212c5ae" + }, + "desktopChecker": { + "path": "tools/web/check-action-bake-keys-desktop.py", + "sha256": "a03213895003f141054a80fd7ddf8060b59ded44994eefc8f3e4699313923fb6" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "modifierCmake": { + "path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", + "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127" + }, + "particleModifier": { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f" + }, + "particleCore": { + "path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", + "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c" + }, + "physicsReader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00113/action-bake-keys-desktop-report.json", + "sha256": "3226d30e020b3384b3a5504c72fe1481f43c048f0827ff6bcbfa1327d9cfd330" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00113/action-bake-keys-local-exact-report.json", + "sha256": "d8a6aaa82c299916a37f2b8ef477349ac675a930d95ff7800450dc6e5a282d58" + } + }, + "nextTask": "M16-GAP-00114", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "072695686843e8e0025858790440999223e4f1498d8f891b5f8e5010b5c27953", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "0e1a72ef3655eb51047dd488c3a9a733022193f1631b21d59c615f8acb1a67f8", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "originalSha256": "92ea7223c192563062d9f485c45cc78290a8809eb79b79d3a28be12081a0c7d6e6f", + "resignedSha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00114/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00114/manifest.json new file mode 100644 index 00000000..a4f311f5 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00114/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00114", + "parentTask": "M16-GAP-00113", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_CLEAN_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00113/manifest.json", + "sha256": "284d37f62f121504e0f50beb0e0cb96dde49c12e3fbd35b151dbb9389673704d" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00114-operator-action.clean.blend", + "sha256": "edd9074159f387a456bc1eb7bb37053fa63038532b928de849378fdcaab9d3e4" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00114.py", + "sha256": "ab1e15afe86016892d2abf43ae84836ff4c84df917d15ca8f1d8b245e138bd52" + }, + "desktopChecker": { + "path": "tools/web/check-action-clean-desktop.py", + "sha256": "4ab652e99fa8fa98cdec6832157f3bbb2e1ac7e5779f01ddd974f192945ea58e" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00114/action-clean-desktop-report.json", + "sha256": "94e987bcc4704cc880a88b510d7f01a2b990c04a109c9296b6e896d108d1e95d" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00114/action-clean-local-exact-report.json", + "sha256": "58e3dfb9fc14a88bc57c616d02870ce0cb995a596f84bc57a686eb63e2e2952a" + } + }, + "nextTask": "M16-GAP-00115", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "2d0a3927afb559d601b5d5e56d5d2e7fd2c586eb2ceb3e9b38f5299b6871990e", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "0e1a72ef3655eb51047dd488c3a9a733022193f1631b21d59c615f8acb1a67f8", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00115/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00115/manifest.json new file mode 100644 index 00000000..44e44701 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00115/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00115", + "parentTask": "M16-GAP-00114", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_CLICKSELECT_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00114/manifest.json", + "sha256": "de0839580800f06f6f0d9291a8aabc97083ee19434f94f0a943fc2f2efd11fc1" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00115-operator-action.clickselect.blend", + "sha256": "862548b70dd61ae3a132854a495648a2e265df2997054cadd1160e135ec3f059" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00115.py", + "sha256": "e91f19fa0f133900cace0b2708ee5a7fcb6efe589e036963b2b0fa6ff5bbaef9" + }, + "desktopChecker": { + "path": "tools/web/check-action-clickselect-desktop.py", + "sha256": "29f5ab8b8489b38ec874b8bf1d779b45e19934862bec3b730b0f3aee08700f74" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00115/action-clickselect-desktop-report.json", + "sha256": "8f6090591fd02d88ea4714ed6a570bbe1e9315226a7496a1382a1bcfb4a8dfe6" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00115/action-clickselect-local-exact-report.json", + "sha256": "ca2832eaceaf118bc1ce6b3efef1d5c4f9c63dae410d451b42b42f62316bbe37" + } + }, + "nextTask": "M16-GAP-00116", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "8e25ee7af735d2c5749d7dd2daba099a401abd952e2f7bfaba43f1ddd5d42244", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "89ceabc2ee3fa085a9edfaf66320c88bf91880b7af46530a894af2e7846dc300", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "857caf1d9976a1e12c55c39dcba35f985ea2841c18e8c0af58000583de4a4e37", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "857caf1d9976a1e12c55c39dcba35f985ea2841c18e8c0af58000583de4a4e37", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00116/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00116/manifest.json new file mode 100644 index 00000000..4483140f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00116/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00116", + "parentTask": "M16-GAP-00115", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_COPY_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00115/manifest.json", + "sha256": "186aba8a5d9e660604321526dfd3d47b4389f358acdc620bd2966a61f833fc11" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00116-operator-action.copy.blend", + "sha256": "d291508ed19a9ba575908253a13310eab58dffa168cf07b401816f2ffd6a5448" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00116.py", + "sha256": "318545fd674bc2477d674292bc3c273684978e101c526a258f52af965dc3eb6f" + }, + "desktopChecker": { + "path": "tools/web/check-action-copy-desktop.py", + "sha256": "d5db0d6d0962ec780faa5a2c6fc1960a7e7d7babfced9d362ca05e46e0889c7c" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00116/action-copy-desktop-report.json", + "sha256": "688cff599ed4b5b6ff17bc79141a040f8f9de59e6912285ae294af68efed0772" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00116/action-copy-local-exact-report.json", + "sha256": "d1698dbf04e3d7c7983734cdc88c7b109f61e10b33b09192e4576c60e2762b5e" + } + }, + "nextTask": "M16-GAP-00117", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "24f6d7bed006c71a4be4d63623e3f58bde0380caa079f592508f65d8d23fefcc", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "89ceabc2ee3fa085a9edfaf66320c88bf91880b7af46530a894af2e7846dc300", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "857caf1d9976a1e12c55c39dcba35f985ea2841c18e8c0af58000583de4a4e37", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "857caf1d9976a1e12c55c39dcba35f985ea2841c18e8c0af58000583de4a4e37", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00117/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00117/manifest.json new file mode 100644 index 00000000..2e65ca36 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00117/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00117", + "parentTask": "M16-GAP-00116", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_DELETE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00116/manifest.json", + "sha256": "36ca61fedaeec33d50141058224f4907f09535027a966552d9edaf5922111870" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00117-operator-action.delete.blend", + "sha256": "5112a074973e086eb2eaa00e604786dc2d7b8dffb1691de800c9dde97592de78" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00117.py", + "sha256": "517943d741eaceb53e7f8d89a8bed07282afa157d4357e3a25690fb8f5df89b4" + }, + "desktopChecker": { + "path": "tools/web/check-action-delete-desktop.py", + "sha256": "3655cc712601ed60095f850b4a419499007e13a7cceeebcd6c38bf42f7a1a6c0" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00117/action-delete-desktop-report.json", + "sha256": "9c3f91e026c110496626bc0214a719c5475c71357572f6861cc0287a2948169e" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00117/action-delete-local-exact-report.json", + "sha256": "a2b9dda82da0c7a7751ac7bf36a958a624291a8ebe4cea12d54587fb3f441aa2" + } + }, + "nextTask": "M16-GAP-00118", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "f0a2a884678cbee7c3ef19fa0227328ac19268118249fc13109834ffb712b71d", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "89ceabc2ee3fa085a9edfaf66320c88bf91880b7af46530a894af2e7846dc300", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "857caf1d9976a1e12c55c39dcba35f985ea2841c18e8c0af58000583de4a4e37", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "857caf1d9976a1e12c55c39dcba35f985ea2841c18e8c0af58000583de4a4e37", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00118/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00118/manifest.json new file mode 100644 index 00000000..ecb7ea89 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00118/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00118", + "parentTask": "M16-GAP-00117", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_DUPLICATE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00117/manifest.json", + "sha256": "d8f39b623121af30f36767bf0a89c3e4aba7ae23802563023aa7362b814d8da1" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00118-operator-action.duplicate.blend", + "sha256": "090e668d61cbdf9a9618c3f592e8337b1776386ab71dda115aacd3591e5a2718" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00118.py", + "sha256": "6829baf79faa5225c6fb8a18201a5d91a2371ac4480ba1180534c7e8a8e89624" + }, + "desktopChecker": { + "path": "tools/web/check-action-duplicate-desktop.py", + "sha256": "281551ded3cdad0c4abc4e9b937b99e37ee51ecdfdb923137afc3ce7b0c5b29f" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00118/action-duplicate-desktop-report.json", + "sha256": "1b84545f6b5f01877c191170b8b5a0d21035e5448373506b4cca50399780e1be" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00118/action-duplicate-local-exact-report.json", + "sha256": "31b61f287906adee9b83d2c05cb302b76012cf5284f96cf45a8ea349a855c320" + } + }, + "nextTask": "M16-GAP-00119", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "6c1303e38d822e463063f02fdaf32a6469de4573df375750c2cd13b1320ec190", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "89ceabc2ee3fa085a9edfaf66320c88bf91880b7af46530a894af2e7846dc300", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "857caf1d9976a1e12c55c39dcba35f985ea2841c18e8c0af58000583de4a4e37", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "857caf1d9976a1e12c55c39dcba35f985ea2841c18e8c0af58000583de4a4e37", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00119/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00119/manifest.json new file mode 100644 index 00000000..c72470f3 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00119/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00119", + "parentTask": "M16-GAP-00118", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_DUPLICATE_MOVE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00118/manifest.json", + "sha256": "63e6ecd36ef8c608d7c136ad5a2d62163d05802408f61264da99c3db50782b65" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00119-operator-action.duplicate_move.blend", + "sha256": "1a40c2e579708731f99bd4f25d255acb3be51431c86fe19d89f741043e4dc085" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00119.py", + "sha256": "2db8ee3d18c634ae2f28d1dd2a3ced2bf9490be578795b59a1ca9e96eb1992af" + }, + "desktopChecker": { + "path": "tools/web/check-action-duplicate-move-desktop.py", + "sha256": "7738a3a07f4971ed3f564d3cd6d09243853a602ac1253056ac5bdaa9522c91a5" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00119/action-duplicate-move-desktop-report.json", + "sha256": "f1ba7739899913c3478ce9f2e1bfb92b7a73ccebe3176e98d2e9c57072ab7d97" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00119/action-duplicate-move-local-exact-report.json", + "sha256": "47d8a5de2a50807b33695b011ba1774883c3c8823a6326a3bfc537fab4a2ef52" + } + }, + "nextTask": "M16-GAP-00120", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "5593cb70b853d6f259644efd7f513d97ba4119a9e00004c0a8b5da764be3942c", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "89ceabc2ee3fa085a9edfaf66320c88bf91880b7af46530a894af2e7846dc300", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "857caf1d9976a1e12c55c39dcba35f985ea2841c18e8c0af58000583de4a4e37", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "857caf1d9976a1e12c55c39dcba35f985ea2841c18e8c0af58000583de4a4e37", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00120/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00120/manifest.json new file mode 100644 index 00000000..55bc892d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00120/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00120", + "parentTask": "M16-GAP-00119", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_EASING_TYPE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00119/manifest.json", + "sha256": "960935bcb27b8a77d43b5ebc78f9ab851df84089a90d3dcf1958990cb1243086" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00120-operator-action.easing_type.blend", + "sha256": "828206cdfd525388464e7ec281a9968c96a7add8cca8db275641031e14627caa" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00120.py", + "sha256": "0db649027d8772539a011bf5b5eb021efbd95728f9af706b4b42a361e88f8c3d" + }, + "desktopChecker": { + "path": "tools/web/check-action-easing-type-desktop.py", + "sha256": "37233be661cbcf08ece72e5293de7016c4408d3708256902380ba608c7985abf" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00120/action-easing-type-desktop-report.json", + "sha256": "e34d9007483d2913166486f7fe736adae145ca27b1b90240ce36e62c4b8f1bbc" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00120/action-easing-type-local-exact-report.json", + "sha256": "9ce9af87fc9f42682de1fa7b02f3f320a64965dad5e3a34f808dbb072481896c" + } + }, + "nextTask": "M16-GAP-00121", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "d0a1e69983f066034a01e73275976cf4c42b0d38228148d1335244f3bc5b9e08", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "05fcd64096b857b1f80fc829676f5822dd08ac8bd04828059ad9f92c353ba483", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "31d7f2b4373dd21011446696f71333829f9603c0e3baddab50988023e098b59f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "31d7f2b4373dd21011446696f71333829f9603c0e3baddab50988023e098b59f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00121/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00121/manifest.json new file mode 100644 index 00000000..1e9a0d55 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00121/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00121", + "parentTask": "M16-GAP-00120", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_EXTRAPOLATION_TYPE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00120/manifest.json", + "sha256": "a517d68211696c3dc4110b07497eba5d07223d90e6f6a42ecf0aa9b01f8ea68f" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00121-operator-action.extrapolation_type.blend", + "sha256": "39c4559926b71ed7b364b6f618c6b19c215d23031b994460d0180537879ff10f" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00121.py", + "sha256": "09a7f42b438f7fb6b14eab1fd8fc436ee938ec62af8f11d62b24a46215d7a05a" + }, + "desktopChecker": { + "path": "tools/web/check-action-extrapolation-type-desktop.py", + "sha256": "8abb11eb1c484b008cc6157d0a5d9c786ebad25b196d117ea5fb015770f70abc" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00121/action-extrapolation-type-desktop-report.json", + "sha256": "d9c594e10b0196fb9a906cbd6ed31f26196c8ee1ede6a23c50d3a6ac9de0012d" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00121/action-extrapolation-type-local-exact-report.json", + "sha256": "c898764e6629bfa752e6375c1944c579a02c62cb25059792fd9e582042a8a3ab" + } + }, + "nextTask": "M16-GAP-00122", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "32ba19733b1f83f0d7190ebd0b4611cb93c3950358cb4c1cd0101ad124c735b4", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "4cc9629a903d638d7cc2d807e4f0ca4d8d5a9b0093747ea031d3c5ce9a6608c2", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3cd4771fe3250f3c6433b2110cac0da8d872c879c09acbbb6fb698962d45fcac", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3cd4771fe3250f3c6433b2110cac0da8d872c879c09acbbb6fb698962d45fcac", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00122/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00122/manifest.json new file mode 100644 index 00000000..b837939c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00122/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00122", + "parentTask": "M16-GAP-00121", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_FRAME_JUMP_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00121/manifest.json", + "sha256": "64ea4f3609b22c19864da33ba0a12a90ab715ead3777ce1b0f442e952ad4439a" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00122-operator-action.frame_jump.blend", + "sha256": "332f117de8b826abb0d044715daa2d01a203b03080c61aaed7671ef67fa2da44" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00122.py", + "sha256": "a80fec742fa6c4f9f0846bcc9ed7817e68ae9b78a3789b5e9ffd873a4f71ba22" + }, + "desktopChecker": { + "path": "tools/web/check-action-frame-jump-desktop.py", + "sha256": "169ea06f3ed471014162d67bcb8b79945e85b7f91d1291f15b62ccecaf3a8126" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00122/action-frame-jump-desktop-report.json", + "sha256": "2a03fd1c8b4faea5fbf908e43df73758044dec705684842c0061023e999edf79" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00122/action-frame-jump-local-exact-report.json", + "sha256": "ac695d4436de8399842d39b412bb734c1e98d021f18a71c414627405aaa27fee" + } + }, + "nextTask": "M16-GAP-00123", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "6b14c6b20b5f59aad5629017beff50b1002fa965e9bf63158c9c93e85622b4dc", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "4cc9629a903d638d7cc2d807e4f0ca4d8d5a9b0093747ea031d3c5ce9a6608c2", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3cd4771fe3250f3c6433b2110cac0da8d872c879c09acbbb6fb698962d45fcac", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3cd4771fe3250f3c6433b2110cac0da8d872c879c09acbbb6fb698962d45fcac", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00123/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00123/manifest.json new file mode 100644 index 00000000..35350c6d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00123/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00123", + "parentTask": "M16-GAP-00122", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_HANDLE_TYPE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00122/manifest.json", + "sha256": "4ec934ccdafd4c9c01299b92f57fe2cc815739c3818f130e2ad88f06f4bbc8ea" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00123-operator-action.handle_type.blend", + "sha256": "69281e445ba7741ce639dc98bf115e265e52bdb4900d82de9b25c70e6cd9d42e" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00123.py", + "sha256": "8b144f6bc50ec8234906f07e81bf661353fe123e0ff85dcb1874185914f4d844" + }, + "desktopChecker": { + "path": "tools/web/check-action-handle-type-desktop.py", + "sha256": "81711dabd6dd4cf0a40b79f3d54a4243de6bd362f0295702c2d9f5d0336b35c2" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00123/action-handle-type-desktop-report.json", + "sha256": "4e37880d7ed3a2f506c2b93b93883c282011d0578d656dfe4c461a4e111201c9" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00123/action-handle-type-local-exact-report.json", + "sha256": "18fa52777177e3312534e981d7e2b1b6fd51b8ed72472c11f0959925907a6287" + } + }, + "nextTask": "M16-GAP-00124", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "e96d33467a1127729d0156bdc1199e04c957243e5e6e532aa622fac611198cfe", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "c3b7f4ce10bd7e4cf5a9baacaf4329a6d3a3313dd99aa8866f3f6489c5cbb567", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "0185b2265f56f14aa0bb3f30181fcc6ca47889f70d5072e4be09753b5c8e0510", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "0185b2265f56f14aa0bb3f30181fcc6ca47889f70d5072e4be09753b5c8e0510", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00124/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00124/manifest.json new file mode 100644 index 00000000..1ef4595f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00124/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00124", + "parentTask": "M16-GAP-00123", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_INTERPOLATION_TYPE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00123/manifest.json", + "sha256": "e457adeee2d07b5b0649a9fa8cdeec50349c778b1d87f4263117f00fbff13877" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00124-operator-action.interpolation_type.blend", + "sha256": "b05e3fe799dd077db20569b98a6849800e4d8e5b1b95b2018ccef70f3d2e77ca" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00124.py", + "sha256": "c80a0232ad6d5628eac7ed5b59c83f6e9741cfa0f793491db339171ee79a4ec8" + }, + "desktopChecker": { + "path": "tools/web/check-action-interpolation-type-desktop.py", + "sha256": "5d61995b4ef75f1e47e277df59d5327609be283fc744014791857ef61f9b0ce5" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00124/action-interpolation-type-desktop-report.json", + "sha256": "94ec52af816fb75cfed2339ebb4b821b4aa13d822c6fe2697f9923309331804f" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00124/action-interpolation-type-local-exact-report.json", + "sha256": "a93a5394419001a0555103f76c91653b1127a21a454a076d71a78050a00130d2" + } + }, + "nextTask": "M16-GAP-00125", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "ed943b787f2d83a729089c2dcfd058756cfcac18dabc2e17c897d9757a6596fb", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "c3b7f4ce10bd7e4cf5a9baacaf4329a6d3a3313dd99aa8866f3f6489c5cbb567", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "0185b2265f56f14aa0bb3f30181fcc6ca47889f70d5072e4be09753b5c8e0510", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "0185b2265f56f14aa0bb3f30181fcc6ca47889f70d5072e4be09753b5c8e0510", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00125/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00125/manifest.json new file mode 100644 index 00000000..3da0669e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00125/manifest.json @@ -0,0 +1,93 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00125", + "parentTask": "M16-GAP-00124", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_KEYFRAME_INSERT_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00124/manifest.json", + "sha256": "b7079ef52e8f3f5082919893ebcd0cfd928da5e5534c8cf76b6ac57c430a2ae6" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00125-operator-action.keyframe_insert.blend", + "sha256": "0ff15cd87241927e76bbcfdfdc6048238467b3e09d2e9d304d14b3858f2d95a7" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00125.py", + "sha256": "10ca9311b9454c1926c870a171b0bed6e3c6057086be253bad11e2c86f0637cc" + }, + "desktopChecker": { + "path": "tools/web/check-action-keyframe-insert-desktop.py", + "sha256": "4c09e55f4f9935b4b4be4c7212451a5c1b01a569aa446c94fe80cdbaff5acda9" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00125/action-keyframe-insert-desktop-report.json", + "sha256": "6a4445c9725cdd1ce4bf97e510ef7f1772f47652fd3a0486c1fb8a4d7dbaa9fb" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00125/action-keyframe-insert-local-exact-report.json", + "sha256": "4e0d65afeac1d262fcad6e8c3756ed63529c6586261379f9d15fa1c971e67cc6" + } + }, + "nextTask": "M16-GAP-00126", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-action-keyframe-insert-desktop.py", + "originalSha256": "2e812004ce8f6d05e6a7778430da3b1ade834084a572b0aa41e1a4b7278d8403", + "resignedSha256": "4c09e55f4f9935b4b4be4c7212451a5c1b01a569aa446c94fe80cdbaff5acda9" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "b9266191601ca9f80bb2f43e38b72d0d7581b600ee7402379e4d4faff4523703", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "c3b7f4ce10bd7e4cf5a9baacaf4329a6d3a3313dd99aa8866f3f6489c5cbb567", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "0185b2265f56f14aa0bb3f30181fcc6ca47889f70d5072e4be09753b5c8e0510", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "0185b2265f56f14aa0bb3f30181fcc6ca47889f70d5072e4be09753b5c8e0510", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00126/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00126/manifest.json new file mode 100644 index 00000000..b01165d7 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00126/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00126", + "parentTask": "M16-GAP-00125", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_KEYFRAME_TYPE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00125/manifest.json", + "sha256": "3deae0817d30f7fd5e2364588854a5f2d6f53c0bd65af0aff129bd3b5963e292" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00126-operator-action.keyframe_type.blend", + "sha256": "a99bcef879a29da4f423a3efc67ab5f497beef3927ad2e65fcb9ae556826a81a" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00126.py", + "sha256": "973f3fd3109a9f36948e11db0d46fad117fe7353a867a2a673fa77faaa6f2e60" + }, + "desktopChecker": { + "path": "tools/web/check-action-keyframe-type-desktop.py", + "sha256": "32b826a427ee36e8a34f45280ff107118295fffb184cbdf4fbedc3b229a36a51" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00126/action-keyframe-type-desktop-report.json", + "sha256": "dafa72f7acc2a84f993615e8ed963013a948980776cb96e19ef5bc0ebce578b6" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00126/action-keyframe-type-local-exact-report.json", + "sha256": "42cc333a864b20769f80bba46cef162ce2c864509bcfc35191caac5405f2d5db" + } + }, + "nextTask": "M16-GAP-00127", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "c9cda7104b4fe21fff13794c63e577bba4883fa031c97fba1aa53c417953d465", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "4c09d1e6540d26efcddbcc84b36a69efc82e3aab7d322bb6dd4c09e9f385f5ec", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "19232c4fe23c28454f5c66b3a19fd81763c35d6dcaf27c34d7ac1d7d8fcff0fa", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "19232c4fe23c28454f5c66b3a19fd81763c35d6dcaf27c34d7ac1d7d8fcff0fa", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00127/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00127/manifest.json new file mode 100644 index 00000000..9212eb28 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00127/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00127", + "parentTask": "M16-GAP-00126", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_MARKERS_MAKE_LOCAL_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00126/manifest.json", + "sha256": "4ebb164da2cdf017804eb62bbee8efbb492d8ebd2d8169ed27a2b0e00bdd2884" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00127-operator-action.markers_make_local.blend", + "sha256": "767f97663e2fd45d8491b1bf8cea0a9a628faa9f4b14993d65953e90f27d7a12" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00127.py", + "sha256": "56daad95fab95e4d7896e5b2b4e30f84a8f33df7e920f41458d95e55a93991c1" + }, + "desktopChecker": { + "path": "tools/web/check-action-markers-make-local-desktop.py", + "sha256": "959fc711e2eb5c35d2635a65fd6119ec1aad4c44573b1bf0b65ecb3b05945902" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00127/action-markers-make-local-desktop-report.json", + "sha256": "ced98aa43f04b58ac2aa66fed217fe895cdadc108739b4c335942114e8a69ce0" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00127/action-markers-make-local-local-exact-report.json", + "sha256": "9b3737730a2f5fe7daa8a9a8109254daf4eeeacff25f632820288fb01ee45f6f" + } + }, + "nextTask": "M16-GAP-00128", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "4332b12c7893d0eea4813cd5c66891d9985ef0a07f61c9bb588b2e20533546fc", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "169faf2dfe0e8582927bba397c942938908a2a2c7d084382b300aae4c22eb1cf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "4e9760ffbd55c37215b38d288698d04fa5334c05168853c41b25f75a9bf0f891", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "4e9760ffbd55c37215b38d288698d04fa5334c05168853c41b25f75a9bf0f891", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00128/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00128/manifest.json new file mode 100644 index 00000000..d5feb0ea --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00128/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00128", + "parentTask": "M16-GAP-00127", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_MIRROR_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00127/manifest.json", + "sha256": "6b2acd64a827e36204caaf161388732f1cd14d5550df37433888333840984492" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00128-operator-action.mirror.blend", + "sha256": "92ab7f13ff0f250d0c173bc3db5d21fedab4bfa7ff4b70c66b4f12af5039a8e5" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00128.py", + "sha256": "e6697304148d72a7305900d6893861f284fe3b42ec88c3b35b8bb2f78b728180" + }, + "desktopChecker": { + "path": "tools/web/check-action-mirror-desktop.py", + "sha256": "88f211cd8726e7214a68c90a2b0ccbbe0bdcfb237a7d1e2fb210a9b7bac8cf3f" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00128/action-mirror-desktop-report.json", + "sha256": "ce9a779ce2d03bc2a2bda252c40aabb56c649be858fe82486ed04bfa96a04793" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00128/action-mirror-local-exact-report.json", + "sha256": "7a91dc7d6c72d100a7da42646adeb100efacf81dd25c2b12672281d86702b37b" + } + }, + "nextTask": "M16-GAP-00129", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "a1fea794c9fb2818197253f95b86f37a7bd909dedab1cdb9a5a01c83f7d4a754", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "169faf2dfe0e8582927bba397c942938908a2a2c7d084382b300aae4c22eb1cf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "4e9760ffbd55c37215b38d288698d04fa5334c05168853c41b25f75a9bf0f891", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "4e9760ffbd55c37215b38d288698d04fa5334c05168853c41b25f75a9bf0f891", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00129/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00129/manifest.json new file mode 100644 index 00000000..53803574 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00129/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00129", + "parentTask": "M16-GAP-00128", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_NEW_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00128/manifest.json", + "sha256": "5b2ff20601b47af62618619766f23864516b1ce724df95b29090341d6b0ba7c1" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00129-operator-action.new.blend", + "sha256": "9d189452cbc1e0cf6c87093f7fb6ffc8728def0ac3bc976a4a3be814d42f10e5" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00129.py", + "sha256": "b7c42577aec64a99b2533c236124c6afea9741a82666065dd1ff0d7570c9aff1" + }, + "desktopChecker": { + "path": "tools/web/check-action-new-desktop.py", + "sha256": "e0c6c14b6a8bc95ab86d49df53aae91b05f611572c2f3394f89f3495f477f77f" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00129/action-new-desktop-report.json", + "sha256": "834607cbbbd91aa8ad74ce2f8818cca54dd5adbf4e871b8733853c924eac8c75" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00129/action-new-local-exact-report.json", + "sha256": "abe030dd587dd2e21d04a3755a9294eb26c545f5d645c0910c2eeed4b5670430" + } + }, + "nextTask": "M16-GAP-00130", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "5afa0bdc9d55f7df6d8cf4fdf16b2171d37277f5a5fd3cae705e2c38216f5a21", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "f8fb6033ef54f8e0488845c0e5e5d9c32612703b8c9f2ea762bbc421155ffae9", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "29f1925854e3835bd3f619ec0c07589261ac3aa28587e2c1304ac6b2f83ced72", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "29f1925854e3835bd3f619ec0c07589261ac3aa28587e2c1304ac6b2f83ced72", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00130/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00130/manifest.json new file mode 100644 index 00000000..21189fbe --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00130/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00130", + "parentTask": "M16-GAP-00129", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_PASTE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00129/manifest.json", + "sha256": "32e4da7c8e253a7203520de04f118dceb44ae9a32dbc874672818cc17570af45" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00130-operator-action.paste.blend", + "sha256": "fc332fb6c877fb7a39fb418416168cce6637befba392dafb8b18ca17fb2b66c1" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00130.py", + "sha256": "889c12feb0e8064612f899c7ad431f647d735cc00f6da56d79e8669225378b9a" + }, + "desktopChecker": { + "path": "tools/web/check-action-paste-desktop.py", + "sha256": "a687641f71ad1b2db47da6717a7341a14e3b3d4cb45cc3a94f447684073201d2" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00130/action-paste-desktop-report.json", + "sha256": "1494252e4ec2870131a2d810a5bc884374edf35272926a0943ac230a67e24fb7" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00130/action-paste-local-exact-report.json", + "sha256": "6f37a4b1cf1af54bd8437a0df2ed4389f12fa830e298f86c2f70b67e853ffa61" + } + }, + "nextTask": "M16-GAP-00131", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "85e853edf952aa2c93af0807bfdc1cf04a1b31a8f13475ecb56f80f8cf49f55a", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "f8fb6033ef54f8e0488845c0e5e5d9c32612703b8c9f2ea762bbc421155ffae9", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "29f1925854e3835bd3f619ec0c07589261ac3aa28587e2c1304ac6b2f83ced72", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "29f1925854e3835bd3f619ec0c07589261ac3aa28587e2c1304ac6b2f83ced72", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00131/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00131/manifest.json new file mode 100644 index 00000000..e7457b57 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00131/manifest.json @@ -0,0 +1,93 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00131", + "parentTask": "M16-GAP-00130", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_PREVIEWRANGE_SET_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00130/manifest.json", + "sha256": "1bd06520e5be08d28947b55cfefbbc38b53c496f677a989d57d760b99742585a" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00131-operator-action.previewrange_set.blend", + "sha256": "8b0222547b3e31480dede4804353edd4d056cc806ad2cede24c73e81070bb9b6" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00131.py", + "sha256": "f679375cd1a45f13e2423cd540b557e9eab841d4c0d535c064beb5794887738e" + }, + "desktopChecker": { + "path": "tools/web/check-action-previewrange-set-desktop.py", + "sha256": "0c667ab6e9ca9e866234fa9e190dc30587b59ffeba5616b4b37853569e6d24a9" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00131/action-previewrange-set-desktop-report.json", + "sha256": "e0ad513329a4a26d70e239d65c30b9048e78c1fcb480a6e4013d941e85d94470" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00131/action-previewrange-set-local-exact-report.json", + "sha256": "7cd2170ba8134e088c23a4939d96f9a23b62779370051fac2185c7ad092e20d0" + } + }, + "nextTask": "M16-GAP-00132", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-action-previewrange-set-desktop.py", + "originalSha256": "339226b1af67537ec464040e551c3e43811a8b1476393a0c3420bc6572ae4db5", + "resignedSha256": "0c667ab6e9ca9e866234fa9e190dc30587b59ffeba5616b4b37853569e6d24a9" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "1d37f5b2fde6348e8b52d616bd0c044b8cd8d53fcd2ec1cfa6ed26902cd6e881", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00132/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00132/manifest.json new file mode 100644 index 00000000..20c87587 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00132/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00132", + "parentTask": "M16-GAP-00131", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_PUSH_DOWN_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00131/manifest.json", + "sha256": "9569fe9c951190d125af519860354781fcbad0a6c0def7a04cc62a316aeccdce" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00132-operator-action.push_down.blend", + "sha256": "e3e933bfc5595d288a5ab2e2f0e661d76474aff88b33d0acc62f7e540757e2e9" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00132.py", + "sha256": "728a07f627b276ffceb7f5ddff059829095ab7f7175ecbfeb41129f6b43b306e" + }, + "desktopChecker": { + "path": "tools/web/check-action-push-down-desktop.py", + "sha256": "1bb759da4d9776f84bb5be2d615b7bd5edb6a4fafd9141fcb8e769c8076410e8" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00132/action-push-down-desktop-report.json", + "sha256": "1341e50c48f9adc16d7c9269bd31738d852299c4c8ed0ea03071efe934f5dabc" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00132/action-push-down-local-exact-report.json", + "sha256": "3d9ac3404080630e5241a39902229089b2528e784ec3b107aced1d1956ed9b33" + } + }, + "nextTask": "M16-GAP-00133", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "a259a552617f3e42536fad93d3c791580c38b1bb27035ad875c1a2e597019e4e", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00133/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00133/manifest.json new file mode 100644 index 00000000..496501d5 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00133/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00133", + "parentTask": "M16-GAP-00132", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_SELECT_ALL_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00132/manifest.json", + "sha256": "e02b7149851c8503ad907e209085f66769171dbe67a4a2eb066f9e86fbe6938b" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00133-operator-action.select_all.blend", + "sha256": "f7ebc1bb7b45d6838d6e2bdccc809f2142a70cb3a9c9ecabcc5e1b5a91426526" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00133.py", + "sha256": "5bb6e8720b5f126590fb36b92a5fd05becfe6c710e99eac6694b391675e10572" + }, + "desktopChecker": { + "path": "tools/web/check-action-select-all-desktop.py", + "sha256": "fe285ee6be545e1cbb9982563d35b98bee213d86a74dceefc274979ed887c73b" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00133/action-select-all-desktop-report.json", + "sha256": "06d1ae064a91784d1122141bdded039a4761ed15341dda9d9bb5f0649e9305bb" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00133/action-select-all-local-exact-report.json", + "sha256": "50808e1aa34a12e83afbe68bd47206b5990efb0e0a5c13b614e99abc8326c641" + } + }, + "nextTask": "M16-GAP-00134", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "d9cd216d44edda6195a7f8c7ae9208ab8473382e665894e69fff2a6e75bd6e49", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00134/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00134/manifest.json new file mode 100644 index 00000000..b611d6df --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00134/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00134", + "parentTask": "M16-GAP-00133", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_SELECT_BOX_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00133/manifest.json", + "sha256": "490581ab799c7f2af1311839761eb320a91d723a1db866b77b6934b10c8f84f1" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00134-operator-action.select_box.blend", + "sha256": "100744edae87b08ef300ae23ae4a5556dd6576f1a5d30630967475736e3a4ba8" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00134.py", + "sha256": "5760b84ac789d3aaafb2577441a7638da28fc983c0dcfb126fb36cfb1b5748e7" + }, + "desktopChecker": { + "path": "tools/web/check-action-select-box-desktop.py", + "sha256": "5a37f76f9da69f172fba64ed83424ea7bec521f498f556c3b0142fc2d284f0e3" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00134/action-select-box-desktop-report.json", + "sha256": "20f1d2012eff7ee00744009455d8b34fd3ced10ae681af80065d2761f07838d4" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00134/action-select-box-local-exact-report.json", + "sha256": "d6bb840a51e5845681d83a381a5eed831dd0b727816400518f884af44c80a256" + } + }, + "nextTask": "M16-GAP-00135", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "e849ed955d57e34e987891efd43e79fb2b72fb66f6f434465a3775699bee8f4c", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00135/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00135/manifest.json new file mode 100644 index 00000000..dc8f97d6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00135/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00135", + "parentTask": "M16-GAP-00134", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_SELECT_BY_TYPE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00134/manifest.json", + "sha256": "cfbee14e33752b00dc877928fc2a2378ce723763e26b7882e26336af15065c50" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00135-operator-action.select_by_type.blend", + "sha256": "3069eba61f2bdfa1c772afc62c075a06a95a803888b4213078d6dd1a68aa6bf5" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00135.py", + "sha256": "3072ac8ebeb375655730d030e0fc757fdc8002811ad2747376ec12dbfac1c993" + }, + "desktopChecker": { + "path": "tools/web/check-action-select-by-type-desktop.py", + "sha256": "1ed90bea542349826d6297378fd27e55c8b8370d6bc7dcf5251ac8b112887a30" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00135/action-select-by-type-desktop-report.json", + "sha256": "4e7ad68e84576c6ef5153302911e682242b028f022eddf9deb18b39e28851298" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00135/action-select-by-type-local-exact-report.json", + "sha256": "7b07b6f31ad375a4d7461f375c2fb036021ef80d34176ecd0db37d752ff9b963" + } + }, + "nextTask": "M16-GAP-00136", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "5cb3002a7df545857bc6329b9c7ac37ebc328e7b13c62b94fed6699da4dd9371", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00136/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00136/manifest.json new file mode 100644 index 00000000..f3c5b14d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00136/manifest.json @@ -0,0 +1,92 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00136", + "parentTask": "M16-GAP-00135", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_SELECT_CIRCLE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00135/manifest.json", + "sha256": "5d76455d3969245a12288929ed8d40157882d5e7080472c83d63f843e2abc1cb" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00136-operator-action.select_circle.blend", + "sha256": "16ae2413cd86d4fa8df384ef1e2d167c4e79caa48114b5b12facd33e1ca37b8b" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00136.py", + "sha256": "7d29d879169aef8362f53a39130b2a4ef0ab3ac83069024a78338197e09ae030" + }, + "desktopChecker": { + "path": "tools/web/check-action-select-circle-desktop.py", + "sha256": "3e5abe08be97e7db93a0229b63eeef48b6577a9d10be49339d36c0974126be70" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00136/action-select-circle-desktop-report.json", + "sha256": "405d31329386086ba1f833795630a0180880bfce17e02d93fd586ce15bb6f1c0" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00136/action-select-circle-local-exact-report.json", + "sha256": "489863284d53857629642ae8fadb9c7066a4c492117eb8b7cbe0c823d65d9db5" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00136/task-context.json", + "sha256": "fc4b89652b93f26d0e7ee929ca442fa4954e47b677ddb75604d3dfacb0c1498e" + } + }, + "nextTask": "M16-GAP-00137", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "46163965b2c3a2405a7db0391d79694ca53861bd64d8cf6c911c860fd3ae90d4", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00137/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00137/manifest.json new file mode 100644 index 00000000..e3954d97 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00137/manifest.json @@ -0,0 +1,92 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00137", + "parentTask": "M16-GAP-00136", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_SELECT_COLUMN_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00136/manifest.json", + "sha256": "4953a140158fde453aa89670b3281f756fdc65a70bfc17099c891cec9d70197f" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00137-operator-action.select_column.blend", + "sha256": "01b13092985f0c672a5ac639ce1e556caf8c405ed3574249b0c4680aedecdc27" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00137.py", + "sha256": "8743db045d9df0505233a88785b92b0fadb2551788b909047d1aa2376e8e9516" + }, + "desktopChecker": { + "path": "tools/web/check-action-select-column-desktop.py", + "sha256": "7e4c5fcef9b85239b3f561db2736eaa80de819d042b8caa3eaaf7fb3230cc189" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00137/action-select-column-desktop-report.json", + "sha256": "71916a53336e89a4be1d07e1fec163b215661d1554d86a1446a79dad0411ba88" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00137/action-select-column-local-exact-report.json", + "sha256": "c9747457cd2746e4bcd27c10c87564e92f74664c6d59129222e826b17ace7815" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00137/task-context.json", + "sha256": "847fe153913ff003ef06c7f17c952667a603b31f95a5bc1a9a06fb8a077c6e6b" + } + }, + "nextTask": "M16-GAP-00138", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "a2461a33a4a31ac6a1dc57c5066edd596798421a0d3ec741404fa0344bec5d80", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00138/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00138/manifest.json new file mode 100644 index 00000000..da6e6353 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00138/manifest.json @@ -0,0 +1,92 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00138", + "parentTask": "M16-GAP-00137", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_SELECT_LASSO_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00137/manifest.json", + "sha256": "db4d41f58efc70ee7ed26ae430b9879a8f00cfb40700a39de4f23e7f64c3533d" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00138-operator-action.select_lasso.blend", + "sha256": "d3ef22466ef1615aeb2f96ffbb70e8a2a13ca7ce9de7fac91e75101ab01415de" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00138.py", + "sha256": "182db872745d0ce5746919db571e67ff715c1114b3936bfa659b6e71acf303a7" + }, + "desktopChecker": { + "path": "tools/web/check-action-select-lasso-desktop.py", + "sha256": "e730e9ae9740fb7a97113edb9af6c7f862128bf79509865727c432a275c3504a" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00138/action-select-lasso-desktop-report.json", + "sha256": "0b08c6f6e71af41aee20187546477ea962cd84d8c4aade1d85aefd0e9f7f1e65" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00138/action-select-lasso-local-exact-report.json", + "sha256": "80b30bbb0abd93e0e4d034d65e916171446e2549c7b224befb98f37f4e22eee9" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00138/task-context.json", + "sha256": "9ac60ee1fef3eb3809f9cd4ba251272406a7f391cfe26621f076d098d9b0d524" + } + }, + "nextTask": "M16-GAP-00139", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "9af9911bae1ac400b98621d7ae01f5d92dbe00e37148f70ea2e05c0ba1d9b175", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00139/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00139/manifest.json new file mode 100644 index 00000000..ce860ad8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00139/manifest.json @@ -0,0 +1,92 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00139", + "parentTask": "M16-GAP-00138", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_SELECT_LEFTRIGHT_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00138/manifest.json", + "sha256": "164d1020de2e126f1e0736b508a18bf261c7610b375fe02dbfccb3422e27ff13" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00139-operator-action.select_leftright.blend", + "sha256": "ed6f8c69f70b5dcef868fffc9381395c7884401bbe24fdd8d9984557284e66c9" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00139.py", + "sha256": "d1175acf47e8ec1c4998582e22d9434a4eea921f551b6c99f9b85b7f5a6727be" + }, + "desktopChecker": { + "path": "tools/web/check-action-select-leftright-desktop.py", + "sha256": "bf20b5d05883481b1b455d0eaab9951f9c4abc73406f3a499f1a03c49b044832" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00139/action-select-leftright-desktop-report.json", + "sha256": "7caa17c7eb256a4bea4e95d03edd3e2b3a31286fd30581188915fca174a89f56" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00139/action-select-leftright-local-exact-report.json", + "sha256": "70476940cd710d7ac0305d1caa428e9b0ac7f71a8e7f55900139c94be7433ee2" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00139/task-context.json", + "sha256": "70af07e854ffebad8dcf9403c3485732c25b7100062b49a0bf1f16fb9b730bbb" + } + }, + "nextTask": "M16-GAP-00140", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "ae898c2ff5ff3d622f348ba21d83ff91e10d4d26809207966fef8895f81b09f1", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00140/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00140/manifest.json new file mode 100644 index 00000000..40cc0945 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00140/manifest.json @@ -0,0 +1,92 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00140", + "parentTask": "M16-GAP-00139", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_SELECT_LESS_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00139/manifest.json", + "sha256": "f534007c6619c059eaeb7aec81215d560b37009f89938823cd73370803919fab" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00140-operator-action.select_less.blend", + "sha256": "3acc7908b362f9c224e825c5429b59d549a77dab4e2b45b285221e5c54fa0c2b" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00140.py", + "sha256": "62fe22db41e856439c50c542d0a62b6db4fbfc80facedf625ba58291d3b4a928" + }, + "desktopChecker": { + "path": "tools/web/check-action-select-less-desktop.py", + "sha256": "52a4f3d5f5232f5843612286b35db8fb19050b8610c573a1bdcbbdae627d261f" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00140/action-select-less-desktop-report.json", + "sha256": "f8527dd5d6d953fbda5b86bb1f42d6257b244a50296ceeb074c57a7b007a3aef" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00140/action-select-less-local-exact-report.json", + "sha256": "243dedadaa9776d7195883a99689e4cb8ee07599bf6c9786aaf8ee5910135e17" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00140/task-context.json", + "sha256": "fc860324c53484ebaa1b1266cf51530abf10645c7e4546db5a495a25778ed03d" + } + }, + "nextTask": "M16-GAP-00141", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "45d5b93b987792feb203d53dccaf2ac81b858d503ac5ed4716e160650ead512b", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00141/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00141/manifest.json new file mode 100644 index 00000000..6a7e43ca --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00141/manifest.json @@ -0,0 +1,92 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00141", + "parentTask": "M16-GAP-00140", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_SELECT_LINKED_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00140/manifest.json", + "sha256": "218516d7a1a3b9f28799dea042f41861cae9c1343e8e6bfae4939b6bdb169935" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00141-operator-action.select_linked.blend", + "sha256": "62ddf7e0141f7bf5b0bfbf85b8faa0cb0ae602681f70e2c5e979db033b14056f" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00141.py", + "sha256": "3e27b0fffe763b6526e4e32fa9b40aae72f229038e846237b90e72312aa1a8eb" + }, + "desktopChecker": { + "path": "tools/web/check-action-select-linked-desktop.py", + "sha256": "4a1baae0c4add326934d50647d014248b43acf8e7ad90360921e1a487c25b150" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00141/action-select-linked-desktop-report.json", + "sha256": "7072809e5ceef8161b75594deaaf809e31ea01a67ef6261ac2d9e9fabbb5e296" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00141/action-select-linked-local-exact-report.json", + "sha256": "261490656ea23b3c1800ca523a9d00911347b7f46e40b7b1d16e693470ddc8d4" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00141/task-context.json", + "sha256": "cf032562d9fc471a6a72b2e8dc50021e383ddc0fd628fca14e971647b64c5ad6" + } + }, + "nextTask": "M16-GAP-00142", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "1775105b3fe1650933326d6d49290edd3d0a15b8542a15ac202346260a49c10d", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00142/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00142/manifest.json new file mode 100644 index 00000000..b81d6dab --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00142/manifest.json @@ -0,0 +1,92 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00142", + "parentTask": "M16-GAP-00141", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_SELECT_MORE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00141/manifest.json", + "sha256": "96756fb16e9731f2b7f217993ad6c2126d58fd5fd17bd71d1df55c0b463f4ddb" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00142-operator-action.select_more.blend", + "sha256": "9f0a3fad228c1a7200cd9ac76af24fb8a853dd261f49ef2186491690713ec726" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00142.py", + "sha256": "36dc0cf95dae703e72f8071625b94617e8d13a1845dc148835b5584625281d16" + }, + "desktopChecker": { + "path": "tools/web/check-action-select-more-desktop.py", + "sha256": "7bfff8a2113d7933e76c0339232810c8cd43d1a633eee7832acb4c4069790f5b" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00142/action-select-more-desktop-report.json", + "sha256": "56944dfcacb924d7650b8652e52bfc254fb1673b40b04109a57f69ad67e3fe9a" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00142/action-select-more-local-exact-report.json", + "sha256": "91f1ef2bf23e75b681beea332836b359da9daf1902b8d77cb683b0e1657562a0" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00142/task-context.json", + "sha256": "727493f7483e1fc0c42a516da51e469393881b5d15c5c362f04138bcd4c6944e" + } + }, + "nextTask": "M16-GAP-00143", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "61254d77bac838d4a488a5152e3ba176a66bd49ea9a79e611e2e7de41f0a1bb8", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00143/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00143/manifest.json new file mode 100644 index 00000000..c1de21e0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00143/manifest.json @@ -0,0 +1,92 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00143", + "parentTask": "M16-GAP-00142", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_SNAP_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00142/manifest.json", + "sha256": "faece45f1ca92a39c7d1314b1eb325641c4eb4db91b321ca53578e6db6c734a0" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00143-operator-action.snap.blend", + "sha256": "d12a490f3d76a0b599f4fdffbb2dd65e01d0c637a2de6bbe78a44b887676995a" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00143.py", + "sha256": "fe0b8f6c70b0a2fece59b696e5e83e55cb2f72705bb89db43b8ed4e953a198be" + }, + "desktopChecker": { + "path": "tools/web/check-action-snap-desktop.py", + "sha256": "01064fe4acd586e99986372a8b39a72340d1a961506c7c189b074ce7928cd568" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00143/action-snap-desktop-report.json", + "sha256": "0da5db63e20db1a97fed02019368de5c6a758e6e34c8b43af52800d33dfa48e0" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00143/action-snap-local-exact-report.json", + "sha256": "61afb2360dc9814da3b741a133b07728b4a560676e7a436f995d1c07e1a4d17e" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00143/task-context.json", + "sha256": "8fbac173dc0bf7f0775d149161c7ea2ddf2cdd489f0f634669f860983806c1f1" + } + }, + "nextTask": "M16-GAP-00144", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "b5cc720937266a6e7dbfbaa96005079f8ce97dc38aaad79742a3eb99ad17fa83", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00144/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00144/manifest.json new file mode 100644 index 00000000..e7e5a5fb --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00144/manifest.json @@ -0,0 +1,92 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00144", + "parentTask": "M16-GAP-00143", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_STASH_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00143/manifest.json", + "sha256": "3a9c08d6b0e17899165f7597919854e8c528028ba7879a25e4d33d659475ce34" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00144-operator-action.stash.blend", + "sha256": "7d617c7e82a5673eedd2f48178a5991066a276a2c149f7be92c5f5975adc4234" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00144.py", + "sha256": "66275fb985c801c659e063f2379d9154093550cb7d5916013332b88aa25dfbec" + }, + "desktopChecker": { + "path": "tools/web/check-action-stash-desktop.py", + "sha256": "dca0ae7cc8914f9598a0638ff19d0c8a490efd794b9a6fde331d8e45306c97df" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00144/action-stash-desktop-report.json", + "sha256": "c7b38407179b23e212f2fff6d34424b3c9f21e024f8ce936cae8f4a6746c4904" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00144/action-stash-local-exact-report.json", + "sha256": "0dd4d10207503d6ea41c2d630b137471587961ceaa26870132936c8c91a72752" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00144/task-context.json", + "sha256": "45bc5f26682956126524444937f5af263c238b91d66f23f295a4bf37e49d42a2" + } + }, + "nextTask": "M16-GAP-00145", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "714be20b276ad1d4476e6e18f9533f75cdc730a0aade382ebf58ac5b912c6244", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00145/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00145/manifest.json new file mode 100644 index 00000000..79019e0e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00145/manifest.json @@ -0,0 +1,92 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00145", + "parentTask": "M16-GAP-00144", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_STASH_AND_CREATE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00144/manifest.json", + "sha256": "4727b5807db7269de9353110d51bc5d6e594202cc5cb72a91697cee3589e539b" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00145-operator-action.stash_and_create.blend", + "sha256": "f7b2dc080c9aa23cc45b9a2c59114f23ce3f1369f00618c9ef51569516692f38" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00145.py", + "sha256": "cbbc5b2e3e84ec8442c4acb065be91a6818ff7c1d2d92e7a0e13253696b8389d" + }, + "desktopChecker": { + "path": "tools/web/check-action-stash-and-create-desktop.py", + "sha256": "5bb7d73a5be061df3d95ce46357a5b0f48e863be217a4677f25f33d31d960cd5" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00145/action-stash-and-create-desktop-report.json", + "sha256": "05f9f233a10822b8de85e9b2070863d6f584e60123b4fc91e4d147a93e120df7" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00145/action-stash-and-create-local-exact-report.json", + "sha256": "2820c70ab69ad674d6bee5424fceb98062fc33b0e309de98d0fe092515f0f4ea" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00145/task-context.json", + "sha256": "d785cecfb165f45ec6fcefe072c7cbed452e0ccb0ef6fba5fbf22b1b85224596" + } + }, + "nextTask": "M16-GAP-00146", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "e9ef46b4772f94a6b4bba3d3c3c7142e162355846cd75239f9324a4cebbb5c3d", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00146/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00146/manifest.json new file mode 100644 index 00000000..4ce612e9 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00146/manifest.json @@ -0,0 +1,92 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00146", + "parentTask": "M16-GAP-00145", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_UNLINK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00145/manifest.json", + "sha256": "4fc29aed9ce6ef07732304b80483e2c4c7c0036e692b4705b6f0cb952fe04829" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00146-operator-action.unlink.blend", + "sha256": "80d5a85825c441b1835e82af730df148dd664fbae988aabb9aab6e74ac605f11" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00146.py", + "sha256": "ab4682dbd1e828f8f18d2bb0cc17ff6a795d364fefe5f0dadb88b74f55220638" + }, + "desktopChecker": { + "path": "tools/web/check-action-unlink-desktop.py", + "sha256": "e0f244be5712faa8caaa094efdfefc69c5ffaa9cb4e7e1185414f3da35e239ae" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00146/action-unlink-desktop-report.json", + "sha256": "a328397950846c7ee22fc7d0ab5788eb5174a8296f79c70763f007274977f5b6" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00146/action-unlink-local-exact-report.json", + "sha256": "2190f23628b0b4ecb68a8c5aafb096e412c7fe5f654bad094686b0700c8e388c" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00146/task-context.json", + "sha256": "5fe6424cd98d78ea065bb1fb0cd34bae92552171592698a48182d08b943a4c08" + } + }, + "nextTask": "M16-GAP-00147", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "4eb56bd2bd37d9c0fe5d9a82aa74a521cb8f958d04d108dcf81d1ab3947b306c", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "7682a90dc52034a663309705922bdefbc617644b9756f3e66228b442b7c75aa8", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "37784bb62b9da62f7db7a66d1dc009aa82a9123a2d07f0c26f524989395c907f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "37784bb62b9da62f7db7a66d1dc009aa82a9123a2d07f0c26f524989395c907f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00147/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00147/manifest.json new file mode 100644 index 00000000..623b1535 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00147/manifest.json @@ -0,0 +1,92 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00147", + "parentTask": "M16-GAP-00146", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_VIEW_ALL_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00146/manifest.json", + "sha256": "cfe6d9e8aeeeddbd080f6ee3dad941424c8434e7c6a09af2c84b634e9440a849" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00147-operator-action.view_all.blend", + "sha256": "ef2a4fd9a28a6a97d40b258beb11f8e00899c4715e0ba6e0703a25aecd678ec5" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00147.py", + "sha256": "738d70668b71d9be03b8aab088c9a71e82f102f97cc0435c58a19c6838566ca0" + }, + "desktopChecker": { + "path": "tools/web/check-action-view-all-desktop.py", + "sha256": "67a1a212702db13b924daa567cabad7c117ea9627d43b07a7bd70243379b76eb" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00147/action-view-all-desktop-report.json", + "sha256": "d1eb6d018b05f2f00d16498dea4d34d49f07ed4489f2ee0dabcf9409dd76deaf" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00147/action-view-all-local-exact-report.json", + "sha256": "f23dd5aae9e4f649c6f29ae6cc971d7e358386bc4cbdd3466e7a075f065f362c" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00147/task-context.json", + "sha256": "f03fa466b214f882119db539bbd7e6f79da5b16624e61f067d217dfc2480ac33" + } + }, + "nextTask": "M16-GAP-00148", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "2d7cc16b93d3ac3ce786e4640ad66ca5ccbb22eb0b5bdd92dee60eb9b350f60f", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "4a1733632ae8418f0bc835c3b4a14b9d69985cb85b74faaca314fa48ec18fd0e", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00148/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00148/manifest.json new file mode 100644 index 00000000..dc6cfb1b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00148/manifest.json @@ -0,0 +1,92 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00148", + "parentTask": "M16-GAP-00147", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_VIEW_FRAME_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00147/manifest.json", + "sha256": "451f1612a0addd34c1d8c3b074e0f72640f6e63105f158d89288db12ae714127" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00148-operator-action.view_frame.blend", + "sha256": "142f7036c4c1a196ae0affc43fd62d6a196576898ee969f9aa83655917e0960c" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00148.py", + "sha256": "7c21cdadfb8d08c2f44ba2e58d53f9c879773b488a53135bc3a9ad4ae96aa3d5" + }, + "desktopChecker": { + "path": "tools/web/check-action-view-frame-desktop.py", + "sha256": "11a2b6c2d6d1bb5670a161a0db02a7f0b65392cc820d263bd21df15196d9a4cd" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00148/action-view-frame-desktop-report.json", + "sha256": "1895f562b9d1a67164256dd47b40a9a0280f5c45f0f153184cde5d54afca2d63" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00148/action-view-frame-local-exact-report.json", + "sha256": "a5b4db975c15055bf295f72f5a52aeb66bfa5d81959dba303e89472ce92ff83a" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00148/task-context.json", + "sha256": "52781cdba0dae2569088c7d80e4c5028cf1fefb5beb187dbd8f767d4b5122b32" + } + }, + "nextTask": "M16-GAP-00149", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "62bfd759d28ff59ec2ba4218ab11dcc910f1bdb13dfb400ff80a07639ec7c03e", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "4a1733632ae8418f0bc835c3b4a14b9d69985cb85b74faaca314fa48ec18fd0e", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00149/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00149/manifest.json new file mode 100644 index 00000000..4ca8c13b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00149/manifest.json @@ -0,0 +1,92 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00149", + "parentTask": "M16-GAP-00148", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_VIEW_SELECTED_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00148/manifest.json", + "sha256": "fd9d80e817a424f0d37e88f182597a8b94a3b858c934def0ffa116047cc907df" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00149-operator-action.view_selected.blend", + "sha256": "108a69ae276722c4d9396deb51f7f1909799d48ce310d82675305a59b1196fc7" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00149.py", + "sha256": "9d7d4a10fb148fe40a1f624886491d64c9dde1bf86cdf21a97c86ec167f7cb92" + }, + "desktopChecker": { + "path": "tools/web/check-action-view-selected-desktop.py", + "sha256": "fa74311b3ca77b04212ed894c0511fcab7489cff781fc934177ce4e40a139647" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00149/action-view-selected-desktop-report.json", + "sha256": "002328f69d528d49570dda4976ea7ae0bb9229fa84f8a3bb1b5b6e3cc061a188" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00149/action-view-selected-local-exact-report.json", + "sha256": "6d2e450cece242a95b9b861292d74654ec7a8e3f191364a64c2c9b809a7e0bb4" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00149/task-context.json", + "sha256": "da34e2c587ec836b745ae0d69dc27b75c77ce17a73d18c223ac817e9365e29c7" + } + }, + "nextTask": "M16-GAP-00150", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "a614499ad09c9dc94a751141733e91613a5dc070edae2ad76f2c9fb37220f0db", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "4a1733632ae8418f0bc835c3b4a14b9d69985cb85b74faaca314fa48ec18fd0e", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00150/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00150/manifest.json new file mode 100644 index 00000000..3318a3e1 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00150/manifest.json @@ -0,0 +1,92 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00150", + "parentTask": "M16-GAP-00149", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANGE_FRAME_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00149/manifest.json", + "sha256": "b39fe0194d94b7cb54e8ca62b51d0d58fc7f82c1ab06122ab8ab74ca79ce6f8d" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00150-operator-anim.change_frame.blend", + "sha256": "04ba48b6b81449b47cd8c038a012518f773dbfbe542ec29861686cf9a1a0cedb" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00150.py", + "sha256": "582a5e470a2b47095762ddd6df93ff8ffe8a67ea45aa2b483f87528a9ca7180c" + }, + "desktopChecker": { + "path": "tools/web/check-action-change-frame-desktop.py", + "sha256": "18fcc3ea0f0cf7a503651791d283852b4ae0b219339258880351837a59726327" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00150/anim-change-frame-desktop-report.json", + "sha256": "b0367cd339a51049f1eb511875c0beee269439694f99c2ee69513d71a5cd5453" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00150/anim-change-frame-local-exact-report.json", + "sha256": "358a97f75cf727ba385434f4e42c9e2857d046131fa15d1460f60eba68c72288" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00150/task-context.json", + "sha256": "f3e8a8d194110019633496b55623589f1d13c8c3f062ec1c03aac023276a50c3" + } + }, + "nextTask": "M16-GAP-00151", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "b738ecac1c2402e1b60c681d395e7ad6a9769c1151c91a8d720daaf63891099b", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "4a1733632ae8418f0bc835c3b4a14b9d69985cb85b74faaca314fa48ec18fd0e", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00151/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00151/manifest.json new file mode 100644 index 00000000..596b5301 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00151/manifest.json @@ -0,0 +1,92 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00151", + "parentTask": "M16-GAP-00150", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNEL_SELECT_KEYS_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00150/manifest.json", + "sha256": "a60ed9301159ae403d345cf7d97e30fc3a0edca948022d3961f0a40c1fb015ef" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00151-operator-anim.channel_select_keys.blend", + "sha256": "f8ed4706c765c28e850c752bf4fc367b815c298b574cbed741997a5770826b43" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00151.py", + "sha256": "6ac3acd4031a4dc3967d1f49546148fb45854ca1caa3c0569b7246d996cf06a1" + }, + "desktopChecker": { + "path": "tools/web/check-action-channel-select-keys-desktop.py", + "sha256": "5d09b95946aa6f7a754cfcd60259e14d388ecc98f4aca0fcb651bc99fabf292f" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00151/anim-channel-select-keys-desktop-report.json", + "sha256": "f71376397c83a380252e3e69a4f295153f2e46a7be0bf1de4871605bf0bec16f" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00151/anim-channel-select-keys-local-exact-report.json", + "sha256": "225fa87a2cfe47daee71149a1a2122ff9d9f80a602b48ff64bd11b0edf4dcc51" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00151/task-context.json", + "sha256": "73e8f89962ce32d7446fe7a61cdaab43105628ca0661b840e93db8236b8691b6" + } + }, + "nextTask": "M16-GAP-00152", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "24a2928dca8a3397d40caa22d74bac94dc63e365aa140babc1b183f658a7603c", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "4a1733632ae8418f0bc835c3b4a14b9d69985cb85b74faaca314fa48ec18fd0e", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00152/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00152/manifest.json new file mode 100644 index 00000000..a62dbb99 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00152/manifest.json @@ -0,0 +1,92 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00152", + "parentTask": "M16-GAP-00151", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNEL_VIEW_PICK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00151/manifest.json", + "sha256": "6607d5f2f8af37d9f9228ea416889bec0d3d8d6c04cc3bb46999858dac018f2e" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00152-operator-anim.channel_view_pick.blend", + "sha256": "e3a0c3158f43b96f05006d54b451614754d0fca9a07fbcc3b1c9cc3a4e076d29" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00152.py", + "sha256": "dc920602484d5b9d90b714de6044c5687f9001fd601170de87019ed194941284" + }, + "desktopChecker": { + "path": "tools/web/check-action-channel-view-pick-desktop.py", + "sha256": "2b2c904295211cdcf7689cdda060eed9856338c4295a84e0d74da862bee719a9" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00152/anim-channel-view-pick-desktop-report.json", + "sha256": "e8ddb6bb82386a4c93fb2525ac8c76b965034f827d28c0caa7c2df349833dc7c" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00152/anim-channel-view-pick-local-exact-report.json", + "sha256": "813990cb73567d995b784e23f47b7493f6bd3da83278ba86e4161044bfb98b8b" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00152/task-context.json", + "sha256": "c2f0b3acf3ac531ec577583e204e75d15a41f12f3c00b5d7326fe85da4e68547" + } + }, + "nextTask": "M16-GAP-00153", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "beeca4b0a0cac130fb2a054be95dad2d6bbf5d7fdcc228e7ba98f080c9c44686", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "4a1733632ae8418f0bc835c3b4a14b9d69985cb85b74faaca314fa48ec18fd0e", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00153/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00153/manifest.json new file mode 100644 index 00000000..6d95026d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00153/manifest.json @@ -0,0 +1,92 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00153", + "parentTask": "M16-GAP-00152", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_BAKE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00152/manifest.json", + "sha256": "8f13a4a4da0827dece7e371690d9c451203a6de4b909665c1a113a15b7ee68d2" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00153-operator-anim.channels_bake.blend", + "sha256": "1818a2a90d3eea5b38ad4d6e3cb1bd0394022ca62a8384734cefc36305d884eb" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00153.py", + "sha256": "a1dba3b7bd0b5011eb2867f12428b89b9d76b103ebe6109e78c9711dfc0596de" + }, + "desktopChecker": { + "path": "tools/web/check-action-channels-bake-desktop.py", + "sha256": "87eccc9a6dd652d94cbe49e771937c39d223765ca7658e239e99017356613a2c" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00153/anim-channels-bake-desktop-report.json", + "sha256": "bcc459445eb7da0b2898302b72b726cd128572a25c23012dc7dfee9b03d945a6" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00153/anim-channels-bake-local-exact-report.json", + "sha256": "517f2a16e4a3a46e52709c58987e940d1c07235adc8c4c9d6401363173c7d09b" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00153/task-context.json", + "sha256": "076fcdce0aaede9f992ce804e4e2cabbc2bbc69a0316038bba6880704933d26d" + } + }, + "nextTask": "M16-GAP-00154", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "1aeef2ac3cfcf702f568886265840aff4b528a8082cd81a95de3870bd4944c4f", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "4a1733632ae8418f0bc835c3b4a14b9d69985cb85b74faaca314fa48ec18fd0e", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00154/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00154/manifest.json new file mode 100644 index 00000000..0197e9fd --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00154/manifest.json @@ -0,0 +1,92 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00154", + "parentTask": "M16-GAP-00153", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_CLEAN_EMPTY_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00153/manifest.json", + "sha256": "6d06064ba97203528fdfbc6cd6acc769e1cf86eb7a03a4c8ea55fa15837da941" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00154-operator-anim.channels_clean_empty.blend", + "sha256": "8e1c2b7578c3679a5c1ad63aef3a621f7a6f8c486598c936076a81fc19728c7a" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00154.py", + "sha256": "0deaaa7054c65927a2cdd8c5ebbce257ea05a0b81e0c4df98d6cca559553af0d" + }, + "desktopChecker": { + "path": "tools/web/check-action-channels-clean-empty-desktop.py", + "sha256": "f6a8ef3666d4672e53d9678c3d9f0dd0f9ee92f9d05e4078f81555a9ea047d20" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00154/anim-channels-clean-empty-desktop-report.json", + "sha256": "592c8f75f00e03e0af3f8cc6de4b9b681ab2d1c5546826d363a01be41e498848" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00154/anim-channels-clean-empty-local-exact-report.json", + "sha256": "ec0ae1e60911edfaee779d6ed6c52fb5965d7b182534e1864c27aaaaeb1a7795" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00154/task-context.json", + "sha256": "e03fd089cd8874792ee9c5aeaf32843742f0522ad71f47c12c1e5ef674c4352c" + } + }, + "nextTask": "M16-GAP-00155", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "8ae5d6c9722df240a474dde37ec8f9a783eb12326e86a372090a7b35987b4643", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "4a1733632ae8418f0bc835c3b4a14b9d69985cb85b74faaca314fa48ec18fd0e", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00155/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00155/manifest.json new file mode 100644 index 00000000..d7b438d8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00155/manifest.json @@ -0,0 +1,92 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00155", + "parentTask": "M16-GAP-00154", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_CLICK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00154/manifest.json", + "sha256": "ac81b87051b86d75e8ec23c7494c5cb9756a7c6093e1c9774ed3e10af9ffe023" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00155-operator-anim.channels_click.blend", + "sha256": "6ebd45981b70fb1a915008d4fa4d8c574b02bf5440b49e93e16792b819a721e5" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00155.py", + "sha256": "14be8a2dd379b1bbb1504618a18f15fa1aa64fba64c29569896b3e5d32f3e001" + }, + "desktopChecker": { + "path": "tools/web/check-action-channels-click-desktop.py", + "sha256": "3984998cbb1a42541f447b317777ed96183147fbb470d2842bdf1d7bfc8aa600" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00155/anim-channels-click-desktop-report.json", + "sha256": "c080797b74218a9ca21654420e96138ae7fc7e795d9f821a1ca1285bdb08038e" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00155/anim-channels-click-local-exact-report.json", + "sha256": "f76c822378b6dffd7a247354d33874515aa551e952401e82188a6e7337a67d55" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00155/task-context.json", + "sha256": "b47551bafd1fd13f5ed2cd5e9dbf642df1472c6403e1b4c8902e3c6802026146" + } + }, + "nextTask": "M16-GAP-00156", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "f06421aac25143c933e71af61b4cc67ddd785f0cab8b6d7f28b43bccded90d67", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "4a1733632ae8418f0bc835c3b4a14b9d69985cb85b74faaca314fa48ec18fd0e", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00156/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00156/manifest.json new file mode 100644 index 00000000..9890dfe9 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00156/manifest.json @@ -0,0 +1,97 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00156", + "parentTask": "M16-GAP-00155", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_COLLAPSE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00155/manifest.json", + "sha256": "d892467c0a86ff05be0a9570f70ea5f52ab713b44177a8e65b096e7186a31471" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00156-operator-anim.channels_collapse.blend", + "sha256": "6b6c488604fa8dd8ec8e79f97961a4e74f6ca673a14658dd890a0b85e18a4dc9" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00156.py", + "sha256": "63e9b942070f44dcd5b8a20f82aca62d880d57a5955ff8f82914b9a9f92dcf60" + }, + "desktopChecker": { + "path": "tools/web/check-action-channels-collapse-desktop.py", + "sha256": "e899e95b4bda42f69040d24396d007eae2f35acd1c44594cecf4c25a4d0e1e6c" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00156/anim-channels-collapse-desktop-report.json", + "sha256": "0c7633299bc11c3b2dcc6c255e557b625d61e4a6214b717dd19f7eaf59e2c06a" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00156/anim-channels-collapse-local-exact-report.json", + "sha256": "469e345742980e8647110df56278592ac12e6b945b6d45e11f9ec2da5c8cb094" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00156/task-context.json", + "sha256": "67d970a10a88c35ee050d4b35ed5dba501907c669c9d36467e9e4151c7593c15" + } + }, + "nextTask": "M16-GAP-00157", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-action-channels-collapse-desktop.py", + "originalSha256": "e899e95b4bda42f69040d24396d007eae2f35acd1c44594ecf4c25a4d0e1e6c", + "resignedSha256": "e899e95b4bda42f69040d24396d007eae2f35acd1c44594cecf4c25a4d0e1e6c" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "bf5cf9f49c143b9db163922d8c43424a69f55969e83c928bd6835c2ef0fbdeb7", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "4a1733632ae8418f0bc835c3b4a14b9d69985cb85b74faaca314fa48ec18fd0e", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00157/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00157/manifest.json new file mode 100644 index 00000000..90ed0bf8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00157/manifest.json @@ -0,0 +1,92 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00157", + "parentTask": "M16-GAP-00156", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_DELETE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00156/manifest.json", + "sha256": "f3e9b44c3cb8ca2895325476e38835a32a604443da09d17f1455c6a78366bd7e" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00157-operator-anim.channels_delete.blend", + "sha256": "c5355b82bb3ce08f8a55d436eb47e2e8cd49711c6518e016c13345c5a8683876" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00157.py", + "sha256": "5613100e6c50539e8dd7371cd3c4e2c8469ec3ca384c42126e11a210ad0d5d7b" + }, + "desktopChecker": { + "path": "tools/web/check-action-channels-delete-desktop.py", + "sha256": "b340793fe720b0bd60ca3d81a19c4a9bfba2c679b91bd2d6cbe371fe2e4ef657" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00157/anim-channels-delete-desktop-report.json", + "sha256": "330b2caa7f2f2dcbf4f903a8ac8bd1fdaf22fa676014fd0a2aa58675c28e77e3" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00157/anim-channels-delete-local-exact-report.json", + "sha256": "667833b173528247f33341fe15edf52b4389bc44e0de4a6dc1fb2e14ee57a986" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00157/task-context.json", + "sha256": "94c06044e7620dfb82d250775d7a8460cebcb13327e805442ff47585b610574a" + } + }, + "nextTask": "M16-GAP-00158", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "b7a2194bb16b83564f91be92d5dcbc7e9013de650afcd11a48ec720503642303", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "4a1733632ae8418f0bc835c3b4a14b9d69985cb85b74faaca314fa48ec18fd0e", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00158/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00158/manifest.json new file mode 100644 index 00000000..2b47ae0f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00158/manifest.json @@ -0,0 +1,96 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00158", + "parentTask": "M16-GAP-00157", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_EDITABLE_TOGGLE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00157/manifest.json", + "sha256": "5dc8520ec503a6f19ea783fa4fc56b8044eaa03ad616fece21152b23a4eb8cda" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00158-operator-anim.channels_editable_toggle.blend", + "sha256": "6a983e51050eb6a6b8300c153216a37d61a16e20c09716405c6d9a96912a612f" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00158.py", + "sha256": "1cc7409084194b006ae60b80da804de4972e671e073b6762353f9db516ea05df" + }, + "desktopChecker": { + "path": "tools/web/check-action-channels-editable-toggle-desktop.py", + "sha256": "9d16d09a1f009d160731523de610360a0bc9dd730648b1f9251ef9a8c6e61428" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00158/anim-channels-editable-toggle-desktop-report.json", + "sha256": "c700699f731764385ab6a9103adfc3592effdae2dc09b913682b134de16298f5" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00158/anim-channels-editable-toggle-local-exact-report.json", + "sha256": "4e1e28c4baa75abd098eaed07ea83fda9676d6bd875dafac9742bd1d89cf16dd" + }, + "status": { + "path": "docs/status/M16-GAP-00158.md", + "sha256": "7cbb2c0af79def8810641264087eba11d45a8d6cf5d63710364dc6c970fea382" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00158/task-context.json", + "sha256": "35a89633fba80fbb4df306e948e31117bf1189e7a9c9b8458e391d3cdbb3ae45" + } + }, + "nextTask": "M16-GAP-00159", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "6613d6d147b1cd41ca1b9e8faf925aa0b7f5d5add5ea35013f59fa8ea395ab42", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "44f794476cbfd72df85f707267c9c7bddf90bb2e371c61fd5e450d2ba5a0fb17", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "42df0f68f725c93683620d095add7aa82df17c70fa6dbf2e7b13307f6d04525a", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "42df0f68f725c93683620d095add7aa82df17c70fa6dbf2e7b13307f6d04525a", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00159/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00159/manifest.json new file mode 100644 index 00000000..b5c9145f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00159/manifest.json @@ -0,0 +1,96 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00159", + "parentTask": "M16-GAP-00158", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_EXPAND_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00158/manifest.json", + "sha256": "f8754729d3afff4daf866d6d3126da8ce8218bb3ecc0f9e9bb5d173d4c860cff" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00159-operator-anim.channels_expand.blend", + "sha256": "7e8658f9238b0cfbb08775388cddf2f7e453c6a2683fe908974b0dd55a852ca7" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00159.py", + "sha256": "04988ce930276e01b61838b48860601bb829fdaf7e7d9652eb1fa2f3b36b6f6b" + }, + "desktopChecker": { + "path": "tools/web/check-action-channels-expand-desktop.py", + "sha256": "b8cc37161161746bbf2cce1da08b0658fa5e911507b6049d5f05b1cc0abb7148" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00159/anim-channels-expand-desktop-report.json", + "sha256": "56feacbf947430f5799612b9e01395ec2f901f455ef1811af58315bc97981c58" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00159/anim-channels-expand-local-exact-report.json", + "sha256": "705189c2b5571ee5645c50932fdff1bdaff3f9205cd031533969f1bc8d09418e" + }, + "status": { + "path": "docs/status/M16-GAP-00159.md", + "sha256": "f93526ce6fcafb2734cbe1c86ecde24da0e94c702b711e72efa080a25201d84f" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00159/task-context.json", + "sha256": "fc453afe062994a58a0bc5108a915f246afd8eb75b9a90cb30ec47fd92aac464" + } + }, + "nextTask": "M16-GAP-00160", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "782b1261124bae08bebed36f2b3f07e5b0257a1e027ec6ae9328a84c3dd88541", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "3222ad3a0f40f5f29da642aed606542ef7cfc46f2a23744f70f8ca418922a7d2", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "de51dae3f6ddc3dabe65b302de6e04f13ddc2f68422f51595eba2f5a139e1d14", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "de51dae3f6ddc3dabe65b302de6e04f13ddc2f68422f51595eba2f5a139e1d14", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00160/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00160/manifest.json new file mode 100644 index 00000000..41a4ae66 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00160/manifest.json @@ -0,0 +1,105 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00160", + "parentTask": "M16-GAP-00159", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_FCURVES_ENABLE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00159/manifest.json", + "sha256": "32a6494adf77b384d699d713d469905309a115165a6a744a09d4c49979394650" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00160-operator-anim.channels_fcurves_enable.blend", + "sha256": "091c8bd8ceb6206cd7ef7f5d8cac03dd4ee554c4ec13f588e8b9ef5933c24ebf" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00160.py", + "sha256": "83337ffc4859fc026819640065e8bf0aa889d5fd9b23815366a96190a45df956" + }, + "desktopChecker": { + "path": "tools/web/check-action-channels-fcurves-enable-desktop.py", + "sha256": "0124b78950409836682c690f2158c76d8eba8fc2ab5c35b11aacb73dbc2ad5a9" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00160/anim-channels-fcurves-enable-desktop-report.json", + "sha256": "694c307f9ccc22b4eca8e64185e5397bd778e45da07c5ad26a60120220ebe4c5" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00160/anim-channels-fcurves-enable-local-exact-report.json", + "sha256": "42b1b070a9975db3284dd616a3c101cf1ec1ee3701372f77eeb04e0a03e52b9a" + }, + "status": { + "path": "docs/status/M16-GAP-00160.md", + "sha256": "b363159100041b87476b7263631cbf91bf02a83795eb8ce78e019d71e888ce55" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00160/task-context.json", + "sha256": "c1a8d564de0ad1c377f22af1f6c8152256e66c3da974a5f18e2716f48334276e" + } + }, + "nextTask": "M16-GAP-00161", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "b4e73592fd6d0885985d0b09082335edbd49227dea46458e089c5c498ad0a8a3", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "84fae3b308277e75496849efa3e456418237e77ba7fb1cb6086231dd9d4502d3", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "3549b6c6acd1cf4e0bb90ea5b0523987a23dd40e0541e97ae341529281a72e1d", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "214c3f0e7dd39ae3ca581095049946ecdae65cb6707011b9e9b90a401a73f1c3", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "214c3f0e7dd39ae3ca581095049946ecdae65cb6707011b9e9b90a401a73f1c3", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00161/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00161/manifest.json new file mode 100644 index 00000000..aff65687 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00161/manifest.json @@ -0,0 +1,105 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00161", + "parentTask": "M16-GAP-00160", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_GROUP_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00160/manifest.json", + "sha256": "7c045fa9b3bd97f6260a9b279d7dbc8d18cd3aabce33a8d095d9e4a7c08700df" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00161-operator-anim.channels_group.blend", + "sha256": "dfa3cbf7b6511926f549134cfd157e2c4350d9f2f4fa5c30dc01ada3dc071cea" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00161.py", + "sha256": "f042c1f5ea55d2f146c81e9765b451ea2a58c82768095c76d632ea9de46b198e" + }, + "desktopChecker": { + "path": "tools/web/check-action-channels-group-desktop.py", + "sha256": "0cf05f15c8441bdae97c96a44687b30527149165c16f1f31df10ff29e6fecb85" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00161/anim-channels-group-desktop-report.json", + "sha256": "c7df9940aecaa3fa127116325e053c182a183167d8f222e9af072c6415ef379b" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00161/anim-channels-group-local-exact-report.json", + "sha256": "e455f560ac9e6047b84971a96b3aa7f58ee4cf08dccf5f6394310820d10715d2" + }, + "status": { + "path": "docs/status/M16-GAP-00161.md", + "sha256": "45a504a53e49b7e1df0d93b487125218aeaef5c5e227ba08e78f2681211a22bb" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00161/task-context.json", + "sha256": "cdc0f7f91f24f2ede4406c025ce8ee0eec9898a512c8d255c915851537263f30" + } + }, + "nextTask": "M16-GAP-00162", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "6b26272a1d5973ecd263745b7cf127cbac656b999d1780e3ab0386ae4a0f4fa0", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "84fae3b308277e75496849efa3e456418237e77ba7fb1cb6086231dd9d4502d3", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "3549b6c6acd1cf4e0bb90ea5b0523987a23dd40e0541e97ae341529281a72e1d", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "214c3f0e7dd39ae3ca581095049946ecdae65cb6707011b9e9b90a401a73f1c3", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "214c3f0e7dd39ae3ca581095049946ecdae65cb6707011b9e9b90a401a73f1c3", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00162/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00162/manifest.json new file mode 100644 index 00000000..8536bd7e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00162/manifest.json @@ -0,0 +1,120 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00162", + "parentTask": "M16-GAP-00161", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_MOVE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00161/manifest.json", + "sha256": "289a394c2d632ee05d59997925349b4485e70bc5af2ae417a7732d7a42bc8a37" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00162-operator-anim.channels_move.blend", + "sha256": "d75500ad33614d2ebe9cf705757971cb76556ae18b77b1064e13420f514f41ea" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00162.py", + "sha256": "ac23b4652f68035ba12003a44c75d7104be17132f8a2edce5f9b3f64052a57d4" + }, + "desktopChecker": { + "path": "tools/web/check-action-channels-move-desktop.py", + "sha256": "0410afc446a73d3083d96fde83b36b3c1754e133b95af2554de064ab928ded5f" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00162/anim-channels-move-desktop-report.json", + "sha256": "8b12fad79622d6171f5afce0017b89cae20fea109dacc0851c10c8d96d19f1c0" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00162/anim-channels-move-local-exact-report.json", + "sha256": "0dad9d166f9fdd3466f0a96bc32e02118259a5aa7ac8312d716c93fb0b8fcf31" + }, + "status": { + "path": "docs/status/M16-GAP-00162.md", + "sha256": "a510bffd34faf4ee5d6a4ed4c7e53eab5a249a4b3ce8e6ff5d5c0b8b06bd814e" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00162/task-context.json", + "sha256": "0ba8fe850b95ac1b5d55feba65ac8b994ead423ff98be590491b2501c378bc3d" + } + }, + "nextTask": "M16-GAP-00163", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tests/golden/M16-GAP-00161/manifest.json", + "originalSha256": "7c045fa9b3bd97f6260a9b279d7dbc8d18cd3aabce33a8d095d9e4a7c08700df", + "resignedSha256": "289a394c2d632ee05d59997925349b4485e70bc5af2ae417a7732d7a42bc8a37" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "b42cc0902df0d537c6a38b4f313ad02df81a7e6a1950f7e0b255dabd79b2e74b", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "84fae3b308277e75496849efa3e456418237e77ba7fb1cb6086231dd9d4502d3", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "3549b6c6acd1cf4e0bb90ea5b0523987a23dd40e0541e97ae341529281a72e1d", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "214c3f0e7dd39ae3ca581095049946ecdae65cb6707011b9e9b90a401a73f1c3", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "214c3f0e7dd39ae3ca581095049946ecdae65cb6707011b9e9b90a401a73f1c3", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + { + "path": "docs/status/M16-GAP-00162.md", + "originalSha256": "PENDING", + "resignedSha256": "a510bffd34faf4ee5d6a4ed4c7e53eab5a249a4b3ce8e6ff5d5c0b8b06bd814e" + }, + { + "path": "tests/golden/M16-GAP-00162/task-context.json", + "originalSha256": "PENDING", + "resignedSha256": "0ba8fe850b95ac1b5d55feba65ac8b994ead423ff98be590491b2501c378bc3d" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00163/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00163/manifest.json new file mode 100644 index 00000000..cfcafcb3 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00163/manifest.json @@ -0,0 +1,105 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00163", + "parentTask": "M16-GAP-00162", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_RENAME_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00162/manifest.json", + "sha256": "6341c7071727e90ea79b54e8a426f6d21955a51350ce6c6a1dbc7de28d818fee" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00163-operator-anim.channels_rename.blend", + "sha256": "e26a89d3f532f3bbcb62036d20a5c6eb82331591cb7db7e3202a750870087e24" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00163.py", + "sha256": "fe2d78ca3844f1b81af065855f95f4f0ba1b70259e9b9260f828a6509f3304ce" + }, + "desktopChecker": { + "path": "tools/web/check-action-channels-rename-desktop.py", + "sha256": "16c276e94e9020e685d52d527cde9dc68f3fea64fdac61ce9cf99f74643d594e" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00163/anim-channels-rename-desktop-report.json", + "sha256": "ab51d4972965553550c3a31a01d5ead41d4a1edb4f3d5229e0072035f032cc63" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00163/anim-channels-rename-local-exact-report.json", + "sha256": "f83a4dc64627ec6679826be1a49942a869af4ffc1bad317ecc60a9ff056729ab" + }, + "status": { + "path": "docs/status/M16-GAP-00163.md", + "sha256": "08d4c8ebe07e9db2eefaba13d861bb5828316f2411117ab0604eb27cbd2308d7" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00163/task-context.json", + "sha256": "1038e4979b2f480d971af8c15a568db264a1612f6e86ec49cec3cf6f25a48684" + } + }, + "nextTask": "M16-GAP-00164", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "cc1a9622cb09b0ba217ac650a20c325ef31673c6cb304929d2c18a4e8f19de97", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "84fae3b308277e75496849efa3e456418237e77ba7fb1cb6086231dd9d4502d3", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/protocol/scene-ir.ts", + "originalSha256": "3549b6c6acd1cf4e0bb90ea5b0523987a23dd40e0541e97ae341529281a72e1d", + "resignedSha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "214c3f0e7dd39ae3ca581095049946ecdae65cb6707011b9e9b90a401a73f1c3", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "214c3f0e7dd39ae3ca581095049946ecdae65cb6707011b9e9b90a401a73f1c3", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00164/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00164/manifest.json new file mode 100644 index 00000000..8291d723 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00164/manifest.json @@ -0,0 +1,100 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00164", + "parentTask": "M16-GAP-00163", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_SELECT_ALL_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00163/manifest.json", + "sha256": "7fd9a9d70579127ef35e36d08663a815d555cc66e1454ed7c5cb5f295c169224" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00164-operator-anim.channels_select_all.blend", + "sha256": "8931b05c45cbe7109d5c14fff6b753ab6cea2042bbdfa86dcadb0ae8762aa0fc" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00164.py", + "sha256": "84fe57e8233f869bd359215f6fc90e4291ee07fc06ebd58e45fb302778862000" + }, + "desktopChecker": { + "path": "tools/web/check-action-channels-select-all-desktop.py", + "sha256": "3f89d79ab79fc4a6e82c624c4703a71d6448d38a62c9f5237959a8215c96cc4e" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00164/anim-channels-select-all-desktop-report.json", + "sha256": "27582c87f7d705f7b2a935d29df9fd4b65e60f8cc7f1e1f9803b2788aeb43f22" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00164/anim-channels-select-all-local-exact-report.json", + "sha256": "8bfb174ed2610c2d518c5c62721e489e3314875d70f12cd3304b10ca4e7e3d6e" + }, + "status": { + "path": "docs/status/M16-GAP-00164.md", + "sha256": "a3f31d41ab5714e6ee808c241b92f409074b4c699956df655026af1a1cf1b1fb" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00164/task-context.json", + "sha256": "eea368ca4eb17f607e0f948b80e2c1964d7a1cf9f44cb85823ba078783d3eb81" + } + }, + "nextTask": "M16-GAP-00165", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "50716ec326722ff44d42efd7650676cc62143b17e4af696623d8929958c4bd8a", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8f420707773bb4057e0348f4f7338df6cef71612f6632b9429f221b8dc9584fc", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "32745a12fbe5b033024cd98e89c1ae075f4f2ae5541d730bf12a9d93e0b309f6", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "32745a12fbe5b033024cd98e89c1ae075f4f2ae5541d730bf12a9d93e0b309f6", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00165/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00165/manifest.json new file mode 100644 index 00000000..1828f083 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00165/manifest.json @@ -0,0 +1,100 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00165", + "parentTask": "M16-GAP-00164", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_SELECT_BOX_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00164/manifest.json", + "sha256": "43085e14c5824e9180c68b8ceb29edf5b63d5255766ff89ff8a5843e84724b82" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00165-operator-anim.channels_select_box.blend", + "sha256": "3f11ff84cbe69116b6b008b9c5d12f35e7796c2f571776f33025bb068ab46ccc" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00165.py", + "sha256": "1c3521dd8c3ae4f8ed564391ca8a8d434bfce4e67e78dc0fc19e809aeb030040" + }, + "desktopChecker": { + "path": "tools/web/check-action-channels-select-box-desktop.py", + "sha256": "07de6dfe6d70e4f208e60a4b6f18c8322044f9d0a4b34812a63f36eec6e804b1" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00165/anim-channels-select-box-desktop-report.json", + "sha256": "3e4d0f296a24bbc60e94edbcdef95d0256311b3c7465ee975b1a072a3553340d" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00165/anim-channels-select-box-local-exact-report.json", + "sha256": "1ea7eff113700fb1c7294d3737dff83df271963f62997583540cc1e998f00e21" + }, + "status": { + "path": "docs/status/M16-GAP-00165.md", + "sha256": "e1248ff14af9e870516f009da7e64fce0b5ae9ca8da87725d11d2f3424e03399" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00165/task-context.json", + "sha256": "63a484301223406881332d310e647407758f09f6c5c3b1d0e9836a404332973f" + } + }, + "nextTask": "M16-GAP-00166", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "0414b43b32e90536db313fb3f44c873f28e27d9b410b3916a0b0b1669c5d0429", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8f420707773bb4057e0348f4f7338df6cef71612f6632b9429f221b8dc9584fc", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "32745a12fbe5b033024cd98e89c1ae075f4f2ae5541d730bf12a9d93e0b309f6", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "32745a12fbe5b033024cd98e89c1ae075f4f2ae5541d730bf12a9d93e0b309f6", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00166/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00166/manifest.json new file mode 100644 index 00000000..4c27da09 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00166/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00166", + "parentTask": "M16-GAP-00165", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_SELECT_FILTER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00165/manifest.json", + "sha256": "566a40f28eb860c407435db6253bbb562e22c026977daccf5aca69db6b8831d6" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00166-operator-anim.channels_select_filter.blend", + "sha256": "2d21685dd8ae6ad9658d1ee910acb36645d3cea7c6bf0f674b8437790d0df727" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00166.py", + "sha256": "1689d5a753d6a0e51c9ebd066ef08938342c038568151739d3e10b7e86f52c50" + }, + "desktopChecker": { + "path": "tools/web/check-action-channels-select-filter-desktop.py", + "sha256": "f1893daef821328506372894e8b052d3d7d8e2632a90332bdd7e49725d3a3dd1" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00166/anim-channels-select-filter-desktop-report.json", + "sha256": "a8a86feb4763e08f655de55c654befa13d42b490ca4e6efc5d6736170f0d6a37" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00166/anim-channels-select-filter-local-exact-report.json", + "sha256": "538167ec546842a9206d6232a213d271dabe96f5801f074b6804a1d14e12e4ba" + }, + "status": { + "path": "docs/status/M16-GAP-00166.md", + "sha256": "212de0356fd48f2696bdf4004758d0bee9c55630a9563adab88c6772b7248d67" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00166/task-context.json", + "sha256": "3ccd5a0066ad1ca475e020ebb4b6eeb724b431b7a6ffc125553b3a6048cb4449" + } + }, + "nextTask": "M16-GAP-00167", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "77489b2425a4c80d476d5f2ba8703aa6b2a5b638059c04f19838fa4587d26ba6", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "36520ff99f27a75d56a17478bfaa19cb11f69ac4d8fc55ea8f586325de41f873", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "4cbb9f33ebba51d29fe4fbf61b3e98d859ee9f74e285f1b30e3b44806f6a77fe", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "4cbb9f33ebba51d29fe4fbf61b3e98d859ee9f74e285f1b30e3b44806f6a77fe", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00167/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00167/manifest.json new file mode 100644 index 00000000..c82f0776 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00167/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00167", + "parentTask": "M16-GAP-00166", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_SETTING_DISABLE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00166/manifest.json", + "sha256": "c4b2ed6935d52a7c41c35af45b5e2e7a3e6924dafa2b9e2c6a1aa04bef8f7312" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00167-operator-anim.channels_setting_disable.blend", + "sha256": "849ad29b595845b1f7f17dbfab50adc616dcbe0e47c1e57d5238e32e84a3a7b5" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00167.py", + "sha256": "7b9cd25c07e698fd4f389011a147489fd2b343dea1fd94f14bf16ad78aa237ae" + }, + "desktopChecker": { + "path": "tools/web/check-action-channels-setting-disable-desktop.py", + "sha256": "cd697b916faa275dd6e44698a7c2945b9c070125d0132ce92f28855c447fcc0d" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00167/anim-channels-setting-disable-desktop-report.json", + "sha256": "9e647359438803ddfd6065611d064e723c5371b3ef696cbfdfdb50c166ab3835" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00167/anim-channels-setting-disable-local-exact-report.json", + "sha256": "c73201d925e7526d25f647870a346976773ffc4cd4abb94325d4cf1261def14d" + }, + "status": { + "path": "docs/status/M16-GAP-00167.md", + "sha256": "fdb2aec90eac4e9fda1907234d7ecda51c2c09ed05f2d23dc2809fe3aeb6c06b" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00167/task-context.json", + "sha256": "496f89ec6d6545cd16d0b787e741e3dcb78d992d308fea0533183214d5325e6a" + } + }, + "nextTask": "M16-GAP-00168", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "919871682670c53a8764a8f5e1906d7aed01aaaccbd6607e95d508f75fc838b5", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "36520ff99f27a75d56a17478bfaa19cb11f69ac4d8fc55ea8f586325de41f873", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "4cbb9f33ebba51d29fe4fbf61b3e98d859ee9f74e285f1b30e3b44806f6a77fe", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "4cbb9f33ebba51d29fe4fbf61b3e98d859ee9f74e285f1b30e3b44806f6a77fe", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00168/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00168/manifest.json new file mode 100644 index 00000000..56a9b849 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00168/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00168", + "parentTask": "M16-GAP-00167", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_SETTING_ENABLE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00167/manifest.json", + "sha256": "a64ad25d06da5c36fe772c5e7777fe5b2f026eae61e32386d553c010f0d497a9" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00168-operator-anim.channels_setting_enable.blend", + "sha256": "7bc30ee108b1f7f9ec5422ac855b1467a8231336cfb67d47898ea6f27618aed6" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00168.py", + "sha256": "b9ac34e412e9f8f8a85fdf9155201cc9e2382c1fb5bfee98a47421ce76b23e9a" + }, + "desktopChecker": { + "path": "tools/web/check-action-channels-setting-enable-desktop.py", + "sha256": "936f925cf68eb27eeb911a5fc8179248201f7fa1fd672053a2fff0745c455e8a" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00168/anim-channels-setting-enable-desktop-report.json", + "sha256": "d2265aaf9aee9d9bcc8a72f66f9878c4f44b4a5c28e5d13ff388c194adac773e" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00168/anim-channels-setting-enable-local-exact-report.json", + "sha256": "68bd2a37e4fb89e130cf7d9fec26e23f60903543b39cc33813b84bf525313817" + }, + "status": { + "path": "docs/status/M16-GAP-00168.md", + "sha256": "e1f398011436d8673616ae1412746b16b92e687a8601ee16d9e01ed5fe9bc9bb" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00168/task-context.json", + "sha256": "30def7e3fbd5e1786203e5c88aa3c5ba22f40af2fb0e9ad1809be6183151683e" + } + }, + "nextTask": "M16-GAP-00169", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "6c25411f85f710f10226e4b2933c2c346aab5e9659f9d27a253868c0c972a761", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "36520ff99f27a75d56a17478bfaa19cb11f69ac4d8fc55ea8f586325de41f873", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "4cbb9f33ebba51d29fe4fbf61b3e98d859ee9f74e285f1b30e3b44806f6a77fe", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "4cbb9f33ebba51d29fe4fbf61b3e98d859ee9f74e285f1b30e3b44806f6a77fe", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00169/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00169/manifest.json new file mode 100644 index 00000000..2cca841f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00169/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00169", + "parentTask": "M16-GAP-00168", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_SETTING_TOGGLE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00168/manifest.json", + "sha256": "b912c792a695d2b5cad4ce15a0c2628922f5e0f4b37a8a1502be9c6649dc3ea3" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00169-operator-anim.channels_setting_toggle.blend", + "sha256": "f346c3480ca423d8174798cf97020fe0e6659d54c5c21fff1b5028b159143560" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00169.py", + "sha256": "06268638700a3aa6312e8cc86500e3eb3eb0b3271ecc8da9d8cce3db0af33b9c" + }, + "desktopChecker": { + "path": "tools/web/check-action-channels-setting-toggle-desktop.py", + "sha256": "1282a6f5e4743fc78f74cb8e76025f5cbc0e5adbbb9e2335c617e8b29f35fdbd" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00169/anim-channels-setting-toggle-desktop-report.json", + "sha256": "6bc9a6a97c53a6b4fa510c0b670bdf341ec4f82d0586a21c04438eaeda9a10f6" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00169/anim-channels-setting-toggle-local-exact-report.json", + "sha256": "e493b763baef0ff2d5e2782107a92b66db63d0ec82ffd8c677df7d30f68c76fe" + }, + "status": { + "path": "docs/status/M16-GAP-00169.md", + "sha256": "6270aa94f27514e4ce112f0daa7cc7fc4f6507d53055bc7f42f5a0e9fe254e1a" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00169/task-context.json", + "sha256": "39bb03cf425db496671100f840eb671a90b9f0802d524c6718869ee436a20b1a" + } + }, + "nextTask": "M16-GAP-00170", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "bf0898e9f4633bba9bb4fcafad0f3b77e283579df5c44ea0b1d3fb1d97a4db59", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "36520ff99f27a75d56a17478bfaa19cb11f69ac4d8fc55ea8f586325de41f873", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "4cbb9f33ebba51d29fe4fbf61b3e98d859ee9f74e285f1b30e3b44806f6a77fe", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "4cbb9f33ebba51d29fe4fbf61b3e98d859ee9f74e285f1b30e3b44806f6a77fe", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00170/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00170/manifest.json new file mode 100644 index 00000000..24c74717 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00170/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00170", + "parentTask": "M16-GAP-00169", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_UNGROUP_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00169/manifest.json", + "sha256": "c01454bd7302b6855d7683a763dd74b35e7b612cb1ab1e8fba633b2ef5c6461c" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00170-operator-anim.channels_ungroup.blend", + "sha256": "edc38bf325e129aa9dc1ff8f1563aef552eff06acb64d3f1dcd539277db18b6b" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00170.py", + "sha256": "9d8ad51d5a174ccd376baf67ce5323c59af5306c74d5da18bdb1c44df2a30c42" + }, + "desktopChecker": { + "path": "tools/web/check-action-channels-ungroup-desktop.py", + "sha256": "169f95d2dd14592f554642bfd62f299568a08efbc8542a994fe433ff059e0675" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00170/anim-channels-ungroup-desktop-report.json", + "sha256": "6da3c452af5fdefcbb5a7390e5e7effe440dbb8602bc7c4ee7d57f38e1f58f05" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00170/anim-channels-ungroup-local-exact-report.json", + "sha256": "4de0a7349f21103b953ebbd860f983d9c199fe682af77fc2b4198fc03993ec53" + }, + "status": { + "path": "docs/status/M16-GAP-00170.md", + "sha256": "07ff672b4319741a3e8fefb9b614b1ce3176a957212200d84600e99e8c65848b" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00170/task-context.json", + "sha256": "7a62f73abdd10efce2e0decb2bb437f62973fdd572ce199ec637d54433a95d8f" + } + }, + "nextTask": "M16-GAP-00171", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "d3cb22e32265150266f76a1f28c8a812de11247bf55a0755cf778490c97691a9", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "36520ff99f27a75d56a17478bfaa19cb11f69ac4d8fc55ea8f586325de41f873", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "4cbb9f33ebba51d29fe4fbf61b3e98d859ee9f74e285f1b30e3b44806f6a77fe", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "4cbb9f33ebba51d29fe4fbf61b3e98d859ee9f74e285f1b30e3b44806f6a77fe", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00171/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00171/manifest.json new file mode 100644 index 00000000..7a2b33c9 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00171/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00171", + "parentTask": "M16-GAP-00170", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_VIEW_SELECTED_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00170/manifest.json", + "sha256": "8e7ba1b5b85e1911718eca4413934fe4bb4d3ea2d644413dd6d93d297e95401d" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00171-operator-anim.channels_view_selected.blend", + "sha256": "31ea53097e3624a267b733b2d07c768aaf588d72c87268b7e5980371dfcb57ae" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00171.py", + "sha256": "a3ae3c94e453977cc8caa62b725896e352ef763e5ca8a03ac1ee8d9a95d32ddb" + }, + "desktopChecker": { + "path": "tools/web/check-action-channels-view-selected-desktop.py", + "sha256": "c7cafb9739ec0838ef9a838810066faf1884bb4927364e01c99c271e4da28630" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00171/anim-channels-view-selected-desktop-report.json", + "sha256": "20a3371ebf683cc16911820be35f1c4ebf8af48132339574937899d267568fd1" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00171/anim-channels-view-selected-local-exact-report.json", + "sha256": "2829a891ac2d66ca3d5b0a4fac8b88bfe267280c8fb05f080b49e3e2cf880c8d" + }, + "status": { + "path": "docs/status/M16-GAP-00171.md", + "sha256": "79b24742a11e7456b82154b13ccae7d2b57dc4b3ed4493d77ad4fc36c894e443" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00171/task-context.json", + "sha256": "699e03fa824e973741bcba370b5de0f0c27b8462b7c205287878dc5fed8565d6" + } + }, + "nextTask": "M16-GAP-00172", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "7c56355bf54d4be9f850aa0e83cc8c7ce117ae4a76df95fac1f997bf888d5057", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8252839a7f84cf69e0e50ec4cbb44712734e4f110d59fdbd7166a49ab0099cbf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "bd04fdf8e0d403fa37e9ac327de384506caa615cab88b078ab9aa9cf783c54e2", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "bd04fdf8e0d403fa37e9ac327de384506caa615cab88b078ab9aa9cf783c54e2", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00172/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00172/manifest.json new file mode 100644 index 00000000..ca9079ac --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00172/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00172", + "parentTask": "M16-GAP-00171", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CLEAR_USELESS_ACTIONS_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00171/manifest.json", + "sha256": "2a79fd4ac530776054c0f81321555a034af501a9ba90184df637a6eeda7a1258" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00172-operator-anim.clear_useless_actions.blend", + "sha256": "f5467c45c551de275b2a97c813b82fc8cf2dd5ae4fe93a5a3f07dd22bd4a8b79" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00172.py", + "sha256": "61dcbd69b1d6a3c88eb0c1d0e9c40499730a8e006e160d83b2d1f1da55b02ad8" + }, + "desktopChecker": { + "path": "tools/web/check-action-clear-useless-actions-desktop.py", + "sha256": "942289d85bf2a716e5c7283471141b479fc68d086e5835cd08e65411ca76a7e5" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00172/anim-clear-useless-actions-desktop-report.json", + "sha256": "d2b1784129a81b79ef30e8203ab1192613da16bdca25b15f18ada408d355a410" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00172/anim-clear-useless-actions-local-exact-report.json", + "sha256": "c7cfbd670b09aa46a4597867af4d8e3de6c14030dac5c9d5f21f09a9db789973" + }, + "status": { + "path": "docs/status/M16-GAP-00172.md", + "sha256": "7b6f81442dfb91ad7eaafcd293dd8cfecde3750f2d9ad50b6a5d8b19e4430846" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00172/task-context.json", + "sha256": "e502eadd8178060357899c10e31d70ad63553c927ca240773ee7469466ee0730" + } + }, + "nextTask": "M16-GAP-00173", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "4593b0ccb5ad682df1c96bb48dcaa008041ed0fd441ab343dbd81992bb1e9263", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8252839a7f84cf69e0e50ec4cbb44712734e4f110d59fdbd7166a49ab0099cbf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "bd04fdf8e0d403fa37e9ac327de384506caa615cab88b078ab9aa9cf783c54e2", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "bd04fdf8e0d403fa37e9ac327de384506caa615cab88b078ab9aa9cf783c54e2", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00173/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00173/manifest.json new file mode 100644 index 00000000..08be572e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00173/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00173", + "parentTask": "M16-GAP-00172", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_COPY_DRIVER_BUTTON_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00172/manifest.json", + "sha256": "476b7ab930abbfdaa98e36944453dfe2b321f841e9d9402f2c23ec230f6b2d48" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00173-operator-anim.copy_driver_button.blend", + "sha256": "473f5f6ddb99f8244bb9218bf3bf9a5f7b9b6e23847bdd546c22427e904de84e" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00173.py", + "sha256": "6b8a666c9683a87182c0a35c6cdbf54f4fab873c743898e66f8ae4eef7043829" + }, + "desktopChecker": { + "path": "tools/web/check-action-copy-driver-button-desktop.py", + "sha256": "12c6c2af98710a4989241e33383876b381c697320125d23508d87e2a78eacead" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00173/anim-copy-driver-button-desktop-report.json", + "sha256": "ba54f7de66ecfc9fb100010d28b4d26b61b585af83a8981ff1c9a77869cacb37" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00173/anim-copy-driver-button-local-exact-report.json", + "sha256": "561380ce0b0a8d06afe41a63c4c86e3c990ff0fd4fb08aae1433b4810377752e" + }, + "status": { + "path": "docs/status/M16-GAP-00173.md", + "sha256": "b97b46a2f391fd6c00adb3369652709f1fa447a9a05a931a0817ef81800805b6" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00173/task-context.json", + "sha256": "72c30f4fe3fefec72959112af15987a0d1fa85483ea1a465f980584c68fdef9d" + } + }, + "nextTask": "M16-GAP-00174", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "fb8c9410e3ef4e18aa89e3072238b6eafc054b9f40b414d74cfec36fb57d9c10", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00174/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00174/manifest.json new file mode 100644 index 00000000..4ea3ba27 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00174/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00174", + "parentTask": "M16-GAP-00173", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_DRIVER_BUTTON_ADD_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00173/manifest.json", + "sha256": "c9c0a4a7126ac3226a3cd4a7588ec4b39eda809f1e18b607940b0db2bfac73ab" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00174-operator-anim.driver_button_add.blend", + "sha256": "088331e435e3f43c0db5077f2fff300f381db761076ceaa922f21ec599041221" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00174.py", + "sha256": "95bc46b2ea19b5a7012cd75c885a87eb7ea8ad79fbab0b10841205889e4381fc" + }, + "desktopChecker": { + "path": "tools/web/check-action-driver-button-add-desktop.py", + "sha256": "154a9e8eb687299b1279c6c8c6d30a6658650bf224a22312efba65f782ffcd7c" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00174/anim-driver-button-add-desktop-report.json", + "sha256": "ec69ea475f22b9c49318c7bf984200c513e6841b953d837f1cbfc925fe53307b" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00174/anim-driver-button-add-local-exact-report.json", + "sha256": "755195e7c3c31c8d3cf19cd51f569a25d0d694312c32101cea49749a15fdb3ed" + }, + "status": { + "path": "docs/status/M16-GAP-00174.md", + "sha256": "ab5ff18f67b8aeae1b2c2e41b15f9d0a27eb0db61904f07a582b77b9a6576782" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00174/task-context.json", + "sha256": "6a10343b930d4e375e39b8ce1b6d1ffba2d3c535daa70bf49f5c323568f1d500" + } + }, + "nextTask": "M16-GAP-00175", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "1983afecfab4280556e4d4210f9b8d50975ea20cdfb31439c27ea4c324bbb7a8", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00175/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00175/manifest.json new file mode 100644 index 00000000..d2def9a2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00175/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00175", + "parentTask": "M16-GAP-00174", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_DRIVER_BUTTON_EDIT_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00174/manifest.json", + "sha256": "5905f9176a5d6c9ce6a6fb755bd1b8f7ccdc2d08f81b3444eea660341d180de9" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00175-operator-anim.driver_button_edit.blend", + "sha256": "40ee0435bc330c7d1baa8d40150f2cc4f62ec4cfd195cce2e0e73ad006f7131a" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00175.py", + "sha256": "e4edbf58ccda3bcd61d4cb4fa2d80c2f68bad6313c94bc0c84115eaa1a4b12be" + }, + "desktopChecker": { + "path": "tools/web/check-action-driver-button-edit-desktop.py", + "sha256": "864c46ed3df66b0341660e715c6609d845851dc71afa7bd96348e19bce0db530" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00175/anim-driver-button-edit-desktop-report.json", + "sha256": "0e712a373d6c4d28cb14c38fcd911987c7216466ef52a9d3d19a3ce34e913112" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00175/anim-driver-button-edit-local-exact-report.json", + "sha256": "9bc321582ce9a45951ec4e8a43236b69a571053fc8cf48fe4cdf8b29113aada0" + }, + "status": { + "path": "docs/status/M16-GAP-00175.md", + "sha256": "7a5a2a5e308ce9804db350cc06fbdac36b959892a1f2245531fc515388c0146c" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00175/task-context.json", + "sha256": "80eb9962039ff734c5b7c5a3f908be62c92a5cffd9cfe4de80f19ccd07ad9670" + } + }, + "nextTask": "M16-GAP-00176", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "da24b371cbc7c8d0c75f0f0e133ea51e14bfee3730b810ba75d39ee47047c64f", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00176/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00176/manifest.json new file mode 100644 index 00000000..9106e3a4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00176/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00176", + "parentTask": "M16-GAP-00175", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_DRIVER_BUTTON_REMOVE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00175/manifest.json", + "sha256": "f0769d32fe2fced8edf7c232c7e8956862e1418010981c0e00ead511c61d05e7" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00176-operator-anim.driver_button_remove.blend", + "sha256": "292203abee32979f8fcc7568b78e66846d5d6280c194fcfa5c7be56170247012" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00176.py", + "sha256": "9591dac532101bf681890f06a1f88f2f1a106e728846e3b86829abb834f1291b" + }, + "desktopChecker": { + "path": "tools/web/check-action-driver-button-remove-desktop.py", + "sha256": "34db1bdf7b6086dca2447c00726703642da7ce58b572ded0ae57595e4ba5a359" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00176/anim-driver-button-remove-desktop-report.json", + "sha256": "369081c441e48ee8ad39d9f4c90a4c2f80b4802143f0243e2d3e0d92f9198ee9" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00176/anim-driver-button-remove-local-exact-report.json", + "sha256": "44e366eb69905cd48d27decfab478c13dd6b1b715fcaae8ef7d3c75d09f1a311" + }, + "status": { + "path": "docs/status/M16-GAP-00176.md", + "sha256": "f40dac4690310310d87b5cf020995ad109daf4c9167ab953c9d001c31c7e84b8" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00176/task-context.json", + "sha256": "0811175e4a76169bdf347bb9fc858e67d4559ce1aa40b81e9c0e9b604d122550" + } + }, + "nextTask": "M16-GAP-00177", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "9ece9cca678f392484ef701ab529d8ce21a85e34fea1e72f43bdfc09bf18b1ea", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00177/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00177/manifest.json new file mode 100644 index 00000000..277d096e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00177/manifest.json @@ -0,0 +1,119 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00177", + "parentTask": "M16-GAP-00176", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_END_FRAME_SET_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00176/manifest.json", + "sha256": "38da8c875cf61f18159444a30c2fb2a3a83d5cef31498fb220b9e201931e605b" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00177-operator-anim.end_frame_set.blend", + "sha256": "b86b4daff038a40e597d1814a021c28fe6cb65e09fb7cfc9ee7bc59f665d9809" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00177.py", + "sha256": "c8f783aa06acd980ebd0f3e228f4065e779434b22059e6b032b652adb521a1d7" + }, + "desktopChecker": { + "path": "tools/web/check-action-end-frame-set-desktop.py", + "sha256": "7ea71a9a4e48775fde115223a115f9f31df016ce57e4a13af60b89d5bc7d836a" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00177/anim-end-frame-set-desktop-report.json", + "sha256": "332660f12353d5750b4bc613f99c77fe3dd126bee2f9051c9d742db7c5f09c3f" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00177/anim-end-frame-set-local-exact-report.json", + "sha256": "50b9716d2813795e26324a9dd3c8e32d4b8baaee92e45b893a47bddec18657b0" + }, + "status": { + "path": "docs/status/M16-GAP-00177.md", + "sha256": "c87a6acb0b22e57107bae051a9d8ce524ae296363a6e3f25fb98bc8872bf03f2" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00177/task-context.json", + "sha256": "06ee966e3f4ae02711eefa7b9562493e348ec9fd2fdf09592ff3d5f5d4f2b89c" + } + }, + "nextTask": "M16-GAP-00178", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tests/files/web/generated/M16-GAP-00177-operator-anim.end_frame_set.blend", + "originalSha256": "3cdef7cd4a48256700c0308247dc400a160b2495a9bbf246be5800dd742c1154", + "resignedSha256": "b86b4daff038a40e597d1814a021c28fe6cb65e09fb7cfc9ee7bc59f665d9809" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "5edc8a52f534e391d322f2f7ee73fc65652b385242de0ee75ebc79a3d026aa53", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + { + "path": "tests/golden/M16-GAP-00177/anim-end-frame-set-desktop-report.json", + "originalSha256": "7e162f3b29c2636224d1a7c55f12978e573226aae207f7f45018062d595a038c", + "resignedSha256": "332660f12353d5750b4bc613f99c77fe3dd126bee2f9051c9d742db7c5f09c3f" + }, + { + "path": "tests/golden/M16-GAP-00177/anim-end-frame-set-local-exact-report.json", + "originalSha256": "a08e18c614b9e612c744d6d1c55898fb5d1b7e6b74a9f41301627a5de6801db2", + "resignedSha256": "50b9716d2813795e26324a9dd3c8e32d4b8baaee92e45b893a47bddec18657b0" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00178/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00178/manifest.json new file mode 100644 index 00000000..5bb297e7 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00178/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00178", + "parentTask": "M16-GAP-00177", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYFRAME_CLEAR_BUTTON_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00177/manifest.json", + "sha256": "35f8e52349884e7752b9d652fd415e0ac27688262e1d81cbe73550794db3b6b6" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00178-operator-anim.keyframe_clear_button.blend", + "sha256": "75aa5f056fc9afe3562ad101a7f3b8aacf93ad54fae06519b236b5fc345831b6" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00178.py", + "sha256": "2182c0a9dda794a1f037cea8178151382cfc9c15c1599c23f3d81d4d1883f6da" + }, + "desktopChecker": { + "path": "tools/web/check-action-keyframe-clear-button-desktop.py", + "sha256": "53c60181c3ca7da0eb16446a8eacf499963aa8e8a6e328b09a21a3301744c0b7" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00178/anim-keyframe-clear-button-desktop-report.json", + "sha256": "ba35b96dc8c7aa46427b64465aa223a87ffe2d5bf37ef42a4bd17afc430b4bee" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00178/anim-keyframe-clear-button-local-exact-report.json", + "sha256": "9969372551c877505755cf23454610ca8211cc77a6e1267b366e848ebd69e30d" + }, + "status": { + "path": "docs/status/M16-GAP-00178.md", + "sha256": "0525407475c3c4cc8ed880d29fe077b178017f3710c56002558bd032362808d5" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00178/task-context.json", + "sha256": "ff864d8ebd9e42c478667639926c27b4580c35baf72c77f7cb0df71d0022e179" + } + }, + "nextTask": "M16-GAP-00179", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "c70a9d246f13ed1d0d9e3e950f7289cb943a3b04ce37e4b2666a24363b3fe661", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00179/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00179/manifest.json new file mode 100644 index 00000000..a1911229 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00179/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00179", + "parentTask": "M16-GAP-00178", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYFRAME_CLEAR_V3D_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00178/manifest.json", + "sha256": "351ff1a4e32fff9653bf276eebd6638bfa729130c6379dca0a5355e664961e4e" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00179-operator-anim.keyframe_clear_v3d.blend", + "sha256": "0e079b73025f3623872e92c1e961e012cbcfaff4a64b2c7741a2ff08c935afdd" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00179.py", + "sha256": "600336ccf298afe28fdd1141a2dbac794fde599f28c31f9d7a7a8eb15bb80443" + }, + "desktopChecker": { + "path": "tools/web/check-action-keyframe-clear-v3d-desktop.py", + "sha256": "1d2a7e2bf29a8bc62b6e4e3ebdc9489160f9494d9b7284f7159cc536f2bca1c0" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00179/anim-keyframe-clear-v3d-desktop-report.json", + "sha256": "2e63bae9cbb613ab96faf2fa802e34caf5aca2e7c3968c93ef0dc9de6a16fecf" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00179/anim-keyframe-clear-v3d-local-exact-report.json", + "sha256": "6b675af2fd56ce8ee146676101ca9f0be6365a9702b80d8def8c27460a1e7ae9" + }, + "status": { + "path": "docs/status/M16-GAP-00179.md", + "sha256": "c1d842b67de5e7275d040a033eb5cd16319ec2c5f77e1b67ed1d55b1c9e0dc4e" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00179/task-context.json", + "sha256": "74ae2d753d5a89d6692a3e73552849d7303e576de19f54d78311b53ba49c5608" + } + }, + "nextTask": "M16-GAP-00180", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "99769a632aa2ec5b1d438bd652af0418ea26a1f85f942548d2734e8c5f046b5a", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00180/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00180/manifest.json new file mode 100644 index 00000000..b0628b23 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00180/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00180", + "parentTask": "M16-GAP-00179", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYFRAME_CLEAR_VSE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00179/manifest.json", + "sha256": "bd344a1160ca950db34f10d92a43288cc1ac707af00e1bf43a9a903c45547a67" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00180-operator-anim.keyframe_clear_vse.blend", + "sha256": "e2ef76b206578af5a77919d7f9625ca76ec58bb0a5d9074f907ced31cdd96c4d" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00180.py", + "sha256": "e72a0c68e1ac8173c70944bc48f7bd03365913e24b831708da40a28bde936f4d" + }, + "desktopChecker": { + "path": "tools/web/check-action-keyframe-clear-vse-desktop.py", + "sha256": "09aeec25d69a57b657bd690998058a23980b6a4b9425fd63dbb26f14f4edee8f" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00180/anim-keyframe-clear-vse-desktop-report.json", + "sha256": "6885cc9103c1b9c8396a684559d08d0899ca096580278a5fa321ee6cec4412ec" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00180/anim-keyframe-clear-vse-local-exact-report.json", + "sha256": "9e05fde557e26ac9be8dc8c7983be4a25e7637542643aa8b38708a1868de27ad" + }, + "status": { + "path": "docs/status/M16-GAP-00180.md", + "sha256": "6af17dd941fdf1f76753ee23a18f97689b7d9719c37ce8714628b0acda11fc5f" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00180/task-context.json", + "sha256": "a90f35e4b60f26bac6d8900a1838d08cbfc20638f65f45f8dbf2306c7160f1d4" + } + }, + "nextTask": "M16-GAP-00181", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "0876494ec0ef358ac3049c7da3e2f207da80826769167379454789b4b27e41c9", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00181/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00181/manifest.json new file mode 100644 index 00000000..62df5f74 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00181/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00181", + "parentTask": "M16-GAP-00180", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYFRAME_DELETE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00180/manifest.json", + "sha256": "e6d90f0df54469a1016917e71480ad58ba901d50694d2727d5e0927b237848eb" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00181-operator-anim.keyframe_delete.blend", + "sha256": "0d6d1e45f430c051e4ecaf1f799f4b7666fa8311e2abf188502cf9cdc0011855" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00181.py", + "sha256": "bc42dcd74150bdc50dba1190dcda12f0c7f40cd8886e94c541243c5e6df460b7" + }, + "desktopChecker": { + "path": "tools/web/check-action-keyframe-delete-desktop.py", + "sha256": "697bd750b9b3971fa108981e6b8f14f372705eeb39a7e20b33dffa9c1fa55c4c" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00181/anim-keyframe-delete-desktop-report.json", + "sha256": "cec3f76e20a38572bf4a38789e1df1aa83ffd4f332e940c238e4d633dd841c7d" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00181/anim-keyframe-delete-local-exact-report.json", + "sha256": "4e75034a44e46afef417e241e6c81d84a1d46a8bf34e779495d9c6885c3b8bfc" + }, + "status": { + "path": "docs/status/M16-GAP-00181.md", + "sha256": "16ef18b3c2a4035e283a5a9af1968d0250763a0a3a2b52fb5a8f4f05821968c2" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00181/task-context.json", + "sha256": "ad1b7ad175eaa42b41c75f1a36d7b55f190c8bbd39d8861e7e7aaa016984b6e1" + } + }, + "nextTask": "M16-GAP-00182", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "7b77cecee69a1ba85251c1ef17cfe5407f2db93e606a330e9d08609faaf74aeb", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00182/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00182/manifest.json new file mode 100644 index 00000000..c1b2038b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00182/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00182", + "parentTask": "M16-GAP-00181", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYFRAME_DELETE_BUTTON_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00181/manifest.json", + "sha256": "32fd366de6190029b377c8faf9ed1b661234cbc6b01925d247b46e00e7bc62ad" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00182-operator-anim.keyframe_delete_button.blend", + "sha256": "8e62660db44872553a7f32f5965afe7811e69261425beba97e6e29cdd5575073" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00182.py", + "sha256": "8424d4ca63c32c9127c9cf1d095a6dde62121ae8ddccea5dc0bbd8ba37b27a20" + }, + "desktopChecker": { + "path": "tools/web/check-action-keyframe-delete-button-desktop.py", + "sha256": "fdb36e2d97ed687a20682a769f107f10801ab8845ad5e1061565893bad2cebd9" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00182/anim-keyframe-delete-button-desktop-report.json", + "sha256": "5df192b8cf82b0e53efa947f9102424cfccf05b29a4e293342ea2e3ace60b0d1" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00182/anim-keyframe-delete-button-local-exact-report.json", + "sha256": "097fdcab03f3e748077c3b1d8cdcfbb9a9b2d7df9b1ca03c54b9f0a3a637c947" + }, + "status": { + "path": "docs/status/M16-GAP-00182.md", + "sha256": "43e96981d4987ee1b32b07ce6053bca47b50106526d8e932e2b67d0005b576dc" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00182/task-context.json", + "sha256": "76d618d236a7741f912e09f4e48ec7bbdce9ac93c3fafee48dfe7ca2ebeae03c" + } + }, + "nextTask": "M16-GAP-00183", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "961b446842e5115fc503667f19731d2cd0167f5e3be9670d3b513c64fd3ea5b4", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00183/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00183/manifest.json new file mode 100644 index 00000000..5b07ea4e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00183/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00183", + "parentTask": "M16-GAP-00182", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYFRAME_DELETE_BY_NAME_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00182/manifest.json", + "sha256": "75787ace3726209e5ff0058c6ab8787d8eb6a386318ab2bf50c79457f587bf87" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00183-operator-anim.keyframe_delete_by_name.blend", + "sha256": "ea5a587aeeabd6692977d5a7660bf49bb7134d4fc81e8ff1a3fa9acd8a75026c" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00183.py", + "sha256": "482995ad5ea8beeb8e6a3c4a004de282587d09f5186bac854a0513c747e316b0" + }, + "desktopChecker": { + "path": "tools/web/check-action-keyframe-delete-by-name-desktop.py", + "sha256": "b3c5726677eb6881950a96a13b5221eb74d5b4e13be118ad7f20679c842a64ea" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00183/anim-keyframe-delete-by-name-desktop-report.json", + "sha256": "105d464e66e7ac9c3cee66c3a33a47101c95b08f9851a875373d43370c48f70e" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00183/anim-keyframe-delete-by-name-local-exact-report.json", + "sha256": "3e8dd9268e4aa73f673dbbe5c9abc3d9c00acfdbe1cc019673c49925e342deca" + }, + "status": { + "path": "docs/status/M16-GAP-00183.md", + "sha256": "e583e704854dd1eca1fa5c672c3184cef8e2433138628aee92b11fb8a3345f98" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00183/task-context.json", + "sha256": "655cf1b0482f7159b63228a6db2bd2828836d707147f3de74727e9fcdc8a07f4" + } + }, + "nextTask": "M16-GAP-00184", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "e68c992056b117cc4d0e38752e4ad37ed25843fc0f4431459e527f83ef56d3eb", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00184/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00184/manifest.json new file mode 100644 index 00000000..72d2b63a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00184/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00184", + "parentTask": "M16-GAP-00183", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYFRAME_DELETE_V3D_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00183/manifest.json", + "sha256": "a792624c1a6c90440244488e345af7637a8451d9caa33495368356041aed8273" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00184-operator-anim.keyframe_delete_v3d.blend", + "sha256": "56cc035995506dfa6c68efced79708c11dc50a20ac3d0e7e9ee59fe29e741995" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00184.py", + "sha256": "9bd3112772fe91a57b1cb89a781067316442d4d06e7fbd7fc84429a67fe0272a" + }, + "desktopChecker": { + "path": "tools/web/check-action-keyframe-delete-v3d-desktop.py", + "sha256": "a761edaab49b1a81a7374a465b64b67836ebe06fba9626ba3d5233f91072d541" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00184/anim-keyframe-delete-v3d-desktop-report.json", + "sha256": "576e712c7d4d72dc15fc2b9a4b65748c2ddd4b43f69c86a57e3365621f19db43" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00184/anim-keyframe-delete-v3d-local-exact-report.json", + "sha256": "3737dbe1e6189cd8312cc3cd3f328e764b2a9ce173a48946e9413a82e8fa4a47" + }, + "status": { + "path": "docs/status/M16-GAP-00184.md", + "sha256": "44d3f28d968aae9c4315f08dd7581cca309347a839e20db4b8f19288bfbe706e" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00184/task-context.json", + "sha256": "41f3f005f99d3e9130a4335fa5cde7982598096f57756e5760f092d3b78792ec" + } + }, + "nextTask": "M16-GAP-00185", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "c28933770f3e0af5e792921658d19f9618a439610b8ddc34618d6b70b5a15dcf", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00185/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00185/manifest.json new file mode 100644 index 00000000..ea8a815a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00185/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00185", + "parentTask": "M16-GAP-00184", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYFRAME_DELETE_VSE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00184/manifest.json", + "sha256": "73843947605c1cb981fae06d47682662bcfe259534e57cb46ee6404b34d041fc" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00185-operator-anim.keyframe_delete_vse.blend", + "sha256": "c01f342471fcae64138f95287363f0e801c4da96992aa4a3d8a4173b0ec0f464" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00185.py", + "sha256": "9abb73d74b639eef255794c35ce8bb102959a53d4d12f8818d45c28946b1e791" + }, + "desktopChecker": { + "path": "tools/web/check-action-keyframe-delete-vse-desktop.py", + "sha256": "67f18d3fc73b9e16cdccc572f551eb2f0f16d496db952889678189eb8fa9253d" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00185/anim-keyframe-delete-vse-desktop-report.json", + "sha256": "a7fb103d0746837b7d56ae89e6b8fa6de374f11cfff8cdf79d88fba199449721" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00185/anim-keyframe-delete-vse-local-exact-report.json", + "sha256": "aecbd1f8b711b2299db7e7665931a549a7318d638942eb2d343d680fc0ce5acc" + }, + "status": { + "path": "docs/status/M16-GAP-00185.md", + "sha256": "de8e22ea2619605053b10e19061de49f94ed241fba16c8b7aa0b0099be3a3b2b" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00185/task-context.json", + "sha256": "3badb8af0ff6bd1168e2576568f8be4c44f4b77a175ea86b8e6650a9ef92077f" + } + }, + "nextTask": "M16-GAP-00186", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "edc37dc02748b741ab2842a8a3bad665c5e9af18b74c0ef04d6b86cf29e85f66", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00186/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00186/manifest.json new file mode 100644 index 00000000..d5fe1336 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00186/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00186", + "parentTask": "M16-GAP-00185", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYFRAME_INSERT_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00185/manifest.json", + "sha256": "0c4e04128b54580988cec59baaf08e1471be26050e380bea7eb9f21a2b092da3" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00186-operator-anim.keyframe_insert.blend", + "sha256": "582dfb8c8dfe6897937afa687d5ebfdb4aeb2e3ae7db73ed02cf6385745bbf70" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00186.py", + "sha256": "edd44185e79eb16c51f2160e5bec5d6ee5dd5ad2d1b662533fa0cfe399e713cd" + }, + "desktopChecker": { + "path": "tools/web/check-action-keyframe-insert-desktop.py", + "sha256": "4c09e55f4f9935b4b4be4c7212451a5c1b01a569aa446c94fe80cdbaff5acda9" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00186/anim-keyframe-insert-desktop-report.json", + "sha256": "dfb8191a85b427ab80a3f6cb2fa118f0f7ddc1ce895b93c8c6e4ddf34f4d780c" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00186/anim-keyframe-insert-local-exact-report.json", + "sha256": "17e4943e084a1323e1de9eca68039b4a6a9e9d060c9e3d3e44e663c8a9d93ce1" + }, + "status": { + "path": "docs/status/M16-GAP-00186.md", + "sha256": "1f2f3ec3947f4593dd5204d1058a125127f396013063a8fa0d447c189f4f50ce" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00186/task-context.json", + "sha256": "4115c25ef7bce2ce0cd3fcadedf6c8aba24fbcd4eb0f037f60f1d0548316d540" + } + }, + "nextTask": "M16-GAP-00187", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "e32fecfab5c014387399f183d2f715194d32809bfbb9f86894730fce4fb99b98", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00187/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00187/manifest.json new file mode 100644 index 00000000..3910abdc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00187/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00187", + "parentTask": "M16-GAP-00186", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYFRAME_INSERT_BUTTON_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00186/manifest.json", + "sha256": "fc77d169050a1bd032820da68dd63e059878188faa2eb88ab1fc7ffc5041548d" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00187-operator-anim.keyframe_insert_button.blend", + "sha256": "5398394b340d509043a2e8130249dbbb0736fa540c833a303445c07c9f775e9a" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00187.py", + "sha256": "7eaac0eb63db785dea7da7df596fa19ed5447b356b13667c5f25e5ee1cecf14d" + }, + "desktopChecker": { + "path": "tools/web/check-action-keyframe-insert-button-desktop.py", + "sha256": "0fa0478deb1eb742105b5902070e5764113378ed1c7d390155cd2be61e991b08" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00187/anim-keyframe-insert-button-desktop-report.json", + "sha256": "b7de5f8ac81d96e316a6d13b1f03650339841bf043ff3a4c9b3396a14420f506" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00187/anim-keyframe-insert-button-local-exact-report.json", + "sha256": "460c2285310d2cf456ced4f1438ab6fd609a1470dde4a37cd09b349099f90873" + }, + "status": { + "path": "docs/status/M16-GAP-00187.md", + "sha256": "16c75cd97e157bcb23bce603f7e27f6f095ce1c76c3f11501355a9431472e691" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00187/task-context.json", + "sha256": "cdfc0b01d9e76dfaed39d9e6c44836cf3aea3df2a363689177e775d2286e0182" + } + }, + "nextTask": "M16-GAP-00188", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "cd43c016cf91a8e258f8f6a53dd4148c6986bd2ccddfc6f16272ab163bb2419b", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00188/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00188/manifest.json new file mode 100644 index 00000000..266a25ba --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00188/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00188", + "parentTask": "M16-GAP-00187", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYFRAME_INSERT_BY_NAME_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00187/manifest.json", + "sha256": "942eafb747f0d002ad2179d90f89acc64e3c347d340355895136689755a2052e" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00188-operator-anim.keyframe_insert_by_name.blend", + "sha256": "b0be38528561fad722c52000ced9b4c44bff594d5fcf134ab89295ab8b97554d" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00188.py", + "sha256": "109653bb9dd32d38ba755a6b284bdc75cca195894327db2f96feaf47faf8d935" + }, + "desktopChecker": { + "path": "tools/web/check-action-keyframe-insert-by-name-desktop.py", + "sha256": "754eaa916735252fd9a462629da646890fbb9285c201d569e36314ca1b1d8bb2" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00188/anim-keyframe-insert-by-name-desktop-report.json", + "sha256": "d89d0950420ef0a81ca983619bf0f168b173e1a631769bcb4b342cfe3b2a9c09" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00188/anim-keyframe-insert-by-name-local-exact-report.json", + "sha256": "4928e35b98ac71b76c68fe2eccbd86481bb854123d428b1af66fbc7270df7e42" + }, + "status": { + "path": "docs/status/M16-GAP-00188.md", + "sha256": "bf958a16b78eae1da59438bfac089fcf16197982a23d91dbcd6d386942bc6425" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00188/task-context.json", + "sha256": "64ceb67dd3d00a7e07a5dd4f263527326442a591b1b5a404c2235809c05274d0" + } + }, + "nextTask": "M16-GAP-00189", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "df1ae531630362ab3e5e6f7e7aef6abbbff3e0d1becd8da84bced5ae5dee258a", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00189/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00189/manifest.json new file mode 100644 index 00000000..9eade587 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00189/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00189", + "parentTask": "M16-GAP-00188", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYFRAME_INSERT_MENU_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00188/manifest.json", + "sha256": "1ea8b1c23b9e324634206e37e4b74f4714dd749a1d712d3a411a03d2be6aa3f7" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00189-operator-anim.keyframe_insert_menu.blend", + "sha256": "8c34e11c10c2de3de7209006c87594db1a1df0b62a6f9b92dac45f2cb176a52f" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00189.py", + "sha256": "20c8d28aea4b14e24dfe83e1b7c3906e8bf1f2ed1fbb723542320a7ece13f73f" + }, + "desktopChecker": { + "path": "tools/web/check-action-keyframe-insert-menu-desktop.py", + "sha256": "a8a378ecd1242852dac76e83d5a19412aa6caf70a85f23364f17d48c806bb921" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00189/anim-keyframe-insert-menu-desktop-report.json", + "sha256": "8f01c695716b3902e0d8caa4b335bc67257e4688a4af5e35fd61b5d98d9b3d03" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00189/anim-keyframe-insert-menu-local-exact-report.json", + "sha256": "a95cc2b84481263298f5bef1fbe0d46a2ab272de25ce5e0a39e84457453e0144" + }, + "status": { + "path": "docs/status/M16-GAP-00189.md", + "sha256": "f57b7b340a8c137afda5bb04daa4a71de372e2b0bd74fdb692029bea2da5e7c4" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00189/task-context.json", + "sha256": "46d321ed3909a9a52fdaf4b2c1f2ee9be2d16c2c8aff32ce4baca43c09f41682" + } + }, + "nextTask": "M16-GAP-00190", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "1cb54ea443ad3162267407c789331cc5078dfb05b47f2f6f902132f016813b59", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00190/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00190/manifest.json new file mode 100644 index 00000000..e7cf032a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00190/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00190", + "parentTask": "M16-GAP-00189", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYING_SET_ACTIVE_SET_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00189/manifest.json", + "sha256": "1ffc688a62e5c7f5141a9cd52dd192630097f01eacc8a8c6eac4991586eba33e" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00190-operator-anim.keying_set_active_set.blend", + "sha256": "54d342c6054339281d8d380e01eb64f038e4735626a69248de66fadee34fbcae" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00190.py", + "sha256": "f54bc93cb7b686883ae9bf3b36406d953af3c8246dca01e439999b5e09e4574a" + }, + "desktopChecker": { + "path": "tools/web/check-action-keying-set-active-set-desktop.py", + "sha256": "c0aaab7f5aae2982303ca0ab4cb05186d3d67ba21728bb49a2f8615a300d05f5" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00190/anim-keying-set-active-set-desktop-report.json", + "sha256": "69ff6f5b3862697e6d17545c63264a0361aa9f6996b874897dd25a138257bc38" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00190/anim-keying-set-active-set-local-exact-report.json", + "sha256": "70e94768b98b0b14a1d03e9e016e62374838b4ad6fa68f893519fed6674f709d" + }, + "status": { + "path": "docs/status/M16-GAP-00190.md", + "sha256": "59def4f8ecb6005d53b5f1b335da97abf89a21f55ceb3589bd87493e2d06b9bd" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00190/task-context.json", + "sha256": "aaff27f84e2eb6f2d49c31ef6467e512acd01efca64a46dbe0fb967f19aedd98" + } + }, + "nextTask": "M16-GAP-00191", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "3e662b1abc876a4602aec079d6c6fa8d200ab14b102efb426d94bc712113634c", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00191/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00191/manifest.json new file mode 100644 index 00000000..bbb7a93b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00191/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00191", + "parentTask": "M16-GAP-00190", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYING_SET_ADD_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00190/manifest.json", + "sha256": "b5b28c6e402db6eb90d4c4a5f1837476d3a24d6725e63c9b70ec5461a4c665d7" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00191-operator-anim.keying_set_add.blend", + "sha256": "a87db22a399c85cb282baf65a58763df7656603df9571bc34cdece31ef439187" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00191.py", + "sha256": "42f787b67fd1858ef184ffaa76438a025d92fc49fe80cdf3a3334e314839a123" + }, + "desktopChecker": { + "path": "tools/web/check-action-keying-set-add-desktop.py", + "sha256": "70f33c905c82b3668c51e0f0c177dc4676417f8a6d9f2c1e0c87d6b9f433a958" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00191/anim-keying-set-add-desktop-report.json", + "sha256": "b19f86edd48c4fb40f3077af333baa89127d51218ca110861f2e77063caff304" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00191/anim-keying-set-add-local-exact-report.json", + "sha256": "d244b7788db82edae28bf1ceebe5d5a8978b317ea8a259abd4ecc1c071fdc68a" + }, + "status": { + "path": "docs/status/M16-GAP-00191.md", + "sha256": "c4d82279105c2e1821577084e539495d09bd99de99eaefadc1f23ed95841a333" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00191/task-context.json", + "sha256": "640288c7b699719aae7d92a951846b7dcdd31e944e1ba88440300331de3af570" + } + }, + "nextTask": "M16-GAP-00192", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "cd8fbe18375df8f08c799fab350fe4a864639c12947d1ea8faafca8b4642d6e4", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00192/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00192/manifest.json new file mode 100644 index 00000000..d3919332 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00192/manifest.json @@ -0,0 +1,108 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00192", + "parentTask": "M16-GAP-00191", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYING_SET_EXPORT_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00191/manifest.json", + "sha256": "1498471253dd616979da562845d490964291b15431b49be766ec224c0aada7aa" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00192-operator-anim.keying_set_export.blend", + "sha256": "ff0342e9d493bc8b20d85acba9177c7115d77f5f515e1d70fc1caf056957c29f" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00192.py", + "sha256": "cb932180b82d9eabe3fac18fa461f4107fc6d1016a262c120c8be0758eeeeafb" + }, + "desktopChecker": { + "path": "tools/web/check-action-keying-set-export-desktop.py", + "sha256": "e75538f411751b309e6eb2d4376839b0e1e70784414463356ab36ae39a7ad799" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00192/anim-keying-set-export-desktop-report.json", + "sha256": "14b1c5675c9088305246d5afea8f291ef989c6735c3795e377b42524af2f7fed" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00192/anim-keying-set-export-local-exact-report.json", + "sha256": "0544edee932393df992ac05a4dbb07b4b1c82e4045cb15b674b182989105d0fa" + }, + "exportedScript": { + "path": "tests/golden/M16-GAP-00192/WebGapAnimKeyingSetExportSet.py", + "sha256": "ef38d3cd23ef00a277e66202010b2001efca51cec053b34762924db32592f966" + }, + "status": { + "path": "docs/status/M16-GAP-00192.md", + "sha256": "1367262e064964fa586ffe5c09ee1702f9be0d7f5f55f5794d54a48ebe8c5349" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00192/task-context.json", + "sha256": "5bdca225c7027399992cc26b67f0e7ed37726d1adc7afd1009677a9eaf491c30" + } + }, + "nextTask": "M16-GAP-00193", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "6e3ccae10e11cdf01e27c8d50f0a571d82e650b75c58fd0d283c9f75e2d4db8d", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00193/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00193/manifest.json new file mode 100644 index 00000000..0f4541a7 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00193/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00193", + "parentTask": "M16-GAP-00192", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYING_SET_PATH_ADD_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00192/manifest.json", + "sha256": "03d3b95ec10a7ee544448d4e9869684ca8c6a3f11a1e321fa80d58c812135c76" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00193-operator-anim.keying_set_path_add.blend", + "sha256": "4e14a61ca8cd86b528747d576aa89ff8dcd3c9d3b8f52625a46ff5b7594cc107" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00193.py", + "sha256": "bf3d651dd050b39186f50095519cd02e16fbc9d652e2d307b7f5a05703ab18d7" + }, + "desktopChecker": { + "path": "tools/web/check-action-keying-set-path-add-desktop.py", + "sha256": "62a65a5b58bdf9d883691d47c13ece9759f763acf58ab46660a6fc93f486e04d" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00193/anim-keying-set-path-add-desktop-report.json", + "sha256": "0deab04ebdbf06c6b344707bf3025677d445c6995cbe3ea1268808c59ec74472" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00193/anim-keying-set-path-add-local-exact-report.json", + "sha256": "61e41fbc56bc7c6c1cbceb4ad3e28cb599e072f8c865f0a573091b47ba53790f" + }, + "status": { + "path": "docs/status/M16-GAP-00193.md", + "sha256": "f5510b2a17b16c1ffdd873b30c0b397b25d6d1660eb7f16cfcbcfdccbb4ae668" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00193/task-context.json", + "sha256": "d459521fe19a776c7b81dd7b49dc3aba7e3f5eba864612f0817fd1ca9bb4dda9" + } + }, + "nextTask": "M16-GAP-00194", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "0f996fe9201c7485a9ef2e829ed2f6361b7cae0eb75477a145aa8f71e443f5cf", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00194/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00194/manifest.json new file mode 100644 index 00000000..d6445587 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00194/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00194", + "parentTask": "M16-GAP-00193", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYING_SET_PATH_REMOVE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00193/manifest.json", + "sha256": "203219913781f09abaa1aab272f97117907f44e9dc0a08691500457ac4b24446" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00194-operator-anim.keying_set_path_remove.blend", + "sha256": "b1161cfd0ac095844825cb2fa19fcbe9819bce552d02535f2d32deef3c8cbb79" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00194.py", + "sha256": "182bc9eda4c6383e83f353cb0ee8fee299caf954537592f58cd68f1e1b1328e2" + }, + "desktopChecker": { + "path": "tools/web/check-action-keying-set-path-remove-desktop.py", + "sha256": "91e9ae1891106babe828ead19c2f07fd955c06883fa4b03f1b4f12fb8a41824e" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00194/anim-keying-set-path-remove-desktop-report.json", + "sha256": "36ec6d4232418b56ea06b375bd0562718ef0cb787c393a860fcf69b663aa3a89" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00194/anim-keying-set-path-remove-local-exact-report.json", + "sha256": "a840e751c3e8c7ef6b02f388e8db434ebcd6cb4d0a151fbb3350d98f6689f438" + }, + "status": { + "path": "docs/status/M16-GAP-00194.md", + "sha256": "54a5b5384704b1a16d541cbc6d70c98001495cb010fe1f9235e73d23a0fc2d9d" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00194/task-context.json", + "sha256": "ecd39a4fd55eb2f7fcc3bacaa8046ab21d56ce5ae8e936898c2fa9a85b9f08cd" + } + }, + "nextTask": "M16-GAP-00195", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "5c7c11e2ef348faf5e34343f947df076e8f732c2a03180fcdfecf157fdd46fb9", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00195/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00195/manifest.json new file mode 100644 index 00000000..221d2ffc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00195/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00195", + "parentTask": "M16-GAP-00194", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYING_SET_REMOVE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00194/manifest.json", + "sha256": "d8336a458497eff326ab8a8df3050c5e4e2f41b0297a2f070ec976c09377f270" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00195-operator-anim.keying_set_remove.blend", + "sha256": "d4fa5993c2580e5521cf2ee66817c416f50de82f5ec4e32298e52db14fa0a9a9" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00195.py", + "sha256": "4f8fb118aa60518844dd181607994d857dc8828d66acd526fe0de727491f54e6" + }, + "desktopChecker": { + "path": "tools/web/check-action-keying-set-remove-desktop.py", + "sha256": "34a45f49def53589fb7e5b3bcfaaaf500af5e5dba069a8175eff1dd19ba354cc" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00195/anim-keying-set-remove-desktop-report.json", + "sha256": "67fc9add6112f6513a95028ba2170d468b1ca82d83cf1b8d1afe2da98b907b15" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00195/anim-keying-set-remove-local-exact-report.json", + "sha256": "f1a6dc449055b1cddb1f796b885eaa347cf1c64ca082af7940c9c751a59dec9e" + }, + "status": { + "path": "docs/status/M16-GAP-00195.md", + "sha256": "cdb8e80052164365b81fb210701cd5283ea022f219eb1a1e14d561ef178e7420" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00195/task-context.json", + "sha256": "e462b1602ed761491ad2054fc7152fb36306b21a0c14f2511a3cbc21b2b740d2" + } + }, + "nextTask": "M16-GAP-00196", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "692c7b2db04a96680bbc7c7807cac3ed552e3123cc4af5f335b3e50cd1ff0bce", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00196/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00196/manifest.json new file mode 100644 index 00000000..2a010eea --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00196/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00196", + "parentTask": "M16-GAP-00195", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYINGSET_BUTTON_ADD_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00195/manifest.json", + "sha256": "4a46a92b6ea9fee6f99e3d7284e78d74748cb52a57d942d874df664da85d65f2" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00196-operator-anim.keyingset_button_add.blend", + "sha256": "2e49572a29dadcdfdae956f7e16bd465c5de06bf8ae94ebdc11da8b1821eb562" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00196.py", + "sha256": "61eefce310c581808e90c8378b1f085c00d7d28878c0c62946489225b020f2d8" + }, + "desktopChecker": { + "path": "tools/web/check-action-keyingset-button-add-desktop.py", + "sha256": "15b1b30ea2793313f52c914021d148c50cd02ba5bcb8d983c37755f811bcd16f" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00196/anim-keyingset-button-add-desktop-report.json", + "sha256": "a213760a261879356db09714df719221fef2f0a4c26865e12396b80089c21583" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00196/anim-keyingset-button-add-local-exact-report.json", + "sha256": "3146c77b1f77e3db9b1dc855c31408b0c076ecfea258aea8a86a834ab06ad9b3" + }, + "status": { + "path": "docs/status/M16-GAP-00196.md", + "sha256": "b1a31309d96dc8fa456c95e45e78aa192472f84573a8ab9ad21bac1a047a3a8c" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00196/task-context.json", + "sha256": "325c63d0601e3b9adf8afb69f6d3cbfd970e3fc281eaa70b13d7cddb0399e324" + } + }, + "nextTask": "M16-GAP-00197", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "05772ad9408274628a737748e6293cd5fce4d090243b0a51db4b620eb93758c5", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00197/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00197/manifest.json new file mode 100644 index 00000000..3b0f8ca2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00197/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00197", + "parentTask": "M16-GAP-00196", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYINGSET_BUTTON_REMOVE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00196/manifest.json", + "sha256": "ba672d3e9ba02086b25a595fde84f8248d9ed288fdd5b53de0b7ff02071e3e46" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00197-operator-anim.keyingset_button_remove.blend", + "sha256": "21b52146f8466fb9fd9ca9073d611b6052f7cbb89399b926d8db6e950883e61d" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00197.py", + "sha256": "34b9c47630db975f40df4ebc156c9b0488dc7bc85ff0fe6cbcc4603aae2da14c" + }, + "desktopChecker": { + "path": "tools/web/check-action-keyingset-button-remove-desktop.py", + "sha256": "0a6c7361b44ef548f4d9bb7ef756e35bd9c09e82ec46edc60626a6918afc57b6" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00197/anim-keyingset-button-remove-desktop-report.json", + "sha256": "223020f990cda11b261e3d0daf3171450718604cee9f923b5bd3aad8c9377b8a" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00197/anim-keyingset-button-remove-local-exact-report.json", + "sha256": "e44421253fcb26b9d313d9f97324b22a46fa8bbd8b734508416bc7bcd43c8f7b" + }, + "status": { + "path": "docs/status/M16-GAP-00197.md", + "sha256": "5f9ee54b01a17a8c4554d58c4f9f415a7feac5790a56aa2545a560ffa4ef2362" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00197/task-context.json", + "sha256": "e94b2c9d77d75b841ae3fe60df18005fbbd9da080417e91ec06c79ca62a3d67f" + } + }, + "nextTask": "M16-GAP-00198", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "27f61df7c526c3473f458828ee0d1651c12bdc766936b41517c634464e70b267", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00198/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00198/manifest.json new file mode 100644 index 00000000..c5ba8811 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00198/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00198", + "parentTask": "M16-GAP-00197", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_MERGE_ANIMATION_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00197/manifest.json", + "sha256": "330488ecec1bfee69e43b02fce9b79cfd3f5e8931d66cabf1602ca1d44e94947" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00198-operator-anim.merge_animation.blend", + "sha256": "0c37b1290f08b1ad872efdf8a52c795d24778a1ecab516ea749ff2ae858bd2fb" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00198.py", + "sha256": "85004c8e8f9e92eea7a87f266de34d07950b993b7af6bd09e642d99bd1f54eb7" + }, + "desktopChecker": { + "path": "tools/web/check-action-merge-animation-desktop.py", + "sha256": "0f7aabaad764f96992e4a1cbe56a586ce0c03e67b0cdc642073a5222cf5b5fcb" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00198/anim-merge-animation-desktop-report.json", + "sha256": "e170913f6dd5161a10853f04c2e56ea1181de5de12fdf5fbb1159745dcd0f757" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00198/anim-merge-animation-local-exact-report.json", + "sha256": "914ef24f01a81d7baceeed4f67f317abf529cedec6ddbbd22c1ed35bb94039e2" + }, + "status": { + "path": "docs/status/M16-GAP-00198.md", + "sha256": "7bf5d2f34a6fa5b19efca51fe360358da8e8030419fd78687314e690598125aa" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00198/task-context.json", + "sha256": "33a275667991c5fc655596a0197bb46467f233a307bcb7752f5531ee9a3819d3" + } + }, + "nextTask": "M16-GAP-00199", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "41c97bd2af26262e21a66e46baaf38969772bd5ba5df72609102f9d3bfd0d8ae", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00199/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00199/manifest.json new file mode 100644 index 00000000..7b2485a5 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00199/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00199", + "parentTask": "M16-GAP-00198", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_PASTE_DRIVER_BUTTON_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00198/manifest.json", + "sha256": "7f651bc4b2238504adcb02dc35455735e7aa6cd524358e9ca0a2429546da070c" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00199-operator-anim.paste_driver_button.blend", + "sha256": "971782396db424a9b427f7fb9d9d1495ddc572a2ae1bf7b7b8c3320f5d8d77d9" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00199.py", + "sha256": "6ef118516c3eed69fa601631d26f5ecef355fe9f58907a1c7e33c4a8cd2be88e" + }, + "desktopChecker": { + "path": "tools/web/check-action-paste-driver-button-desktop.py", + "sha256": "2c167b38e9688880b499abe97babd2f51134b2b83efd5bb34140bb0b81079375" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00199/anim-paste-driver-button-desktop-report.json", + "sha256": "b20074b47768751a5e6c884165c4119e95296eb7a6fc4812e8bef3676e7aaf08" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00199/anim-paste-driver-button-local-exact-report.json", + "sha256": "7f860445f0e6889e6993e458b0e81f075c5b97fe8c2cf35b0eae4846e2d4cc5e" + }, + "status": { + "path": "docs/status/M16-GAP-00199.md", + "sha256": "920d779ace3658975b5f2451fb48b644f7d64ce81129b89d6e1eb9fc5ac6e6c9" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00199/task-context.json", + "sha256": "e054e382aa573e117fc34d47e2e2d8733ac17d75d490dc4f5de397e3fb9658f7" + } + }, + "nextTask": "M16-GAP-00200", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "09d0d45a5454f9c9eea29414d412c28a372d3dcff9ac645fc16ff68566ce4d6f", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00200/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00200/manifest.json new file mode 100644 index 00000000..402dc7f1 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00200/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00200", + "parentTask": "M16-GAP-00199", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_PREVIEWRANGE_CLEAR_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00199/manifest.json", + "sha256": "55e28b867275c897d142b4da366a68368006de40ba7edde39b4637ce0b3771bb" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00200-operator-anim.previewrange_clear.blend", + "sha256": "c9b586fb0a87f38c4fb1e4e1834805fda1345549ecdc558702080ea66af65a9e" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00200.py", + "sha256": "92d82b88dd301e895fe075c7d1760b1cb4147c7049a3c6d69509fc17e14b64d1" + }, + "desktopChecker": { + "path": "tools/web/check-action-previewrange-clear-desktop.py", + "sha256": "02b2704fd6edae72cb31d603c6a1ddf4a3054370627044ba4c1f66e30c488e3e" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00200/anim-previewrange-clear-desktop-report.json", + "sha256": "b1e7212248ff23d323e9c00645db52b38c4570f42c344b6325f1506c404704c4" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00200/anim-previewrange-clear-local-exact-report.json", + "sha256": "7ba44c02fcfa34df1c4e25fb3567474893b47dc4a20522f33634cd3ad36fe940" + }, + "status": { + "path": "docs/status/M16-GAP-00200.md", + "sha256": "314c2534f8291496721d190b7345954f1e7e9218b9756d1b6bfdc4486a112b9e" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00200/task-context.json", + "sha256": "1cb7806458458bc5e417a84b556e3fb777457f2af1e1dcd2fc4936911cfc508a" + } + }, + "nextTask": "M16-GAP-00201", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "7d5ab57408c5fa21ce8ff0998d212f5685d9900e1d2ff135f19fe9ec6c0197c9", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00201/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00201/manifest.json new file mode 100644 index 00000000..23ab0952 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00201/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00201", + "parentTask": "M16-GAP-00200", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_PREVIEWRANGE_SET_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00200/manifest.json", + "sha256": "d0e50c659eae65217eb314559e6c4aaa50dd830a6a53d5a3ff9aa182e1baf6ed" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00201-operator-anim.previewrange_set.blend", + "sha256": "91d61fe3989324a23db7dabbb178c7b0a963af155c117c57859a24e4c415945e" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00201.py", + "sha256": "94fac7954b5c1fd566c48b4dfac58fa2581b6068360cccee7b436e30e5bed9c0" + }, + "desktopChecker": { + "path": "tools/web/check-action-previewrange-set-desktop.py", + "sha256": "0c667ab6e9ca9e866234fa9e190dc30587b59ffeba5616b4b37853569e6d24a9" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00201/anim-previewrange-set-desktop-report.json", + "sha256": "9a4abf76db56b660808f66834d941771a0cf860a662d53771ff8bf309bf2a162" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00201/anim-previewrange-set-local-exact-report.json", + "sha256": "7751033cb2d246ed4b87d10592894f27574d3409b5d48f3161a583f186786b67" + }, + "status": { + "path": "docs/status/M16-GAP-00201.md", + "sha256": "9b5e2b1a31558340dc633d476fb379bd4bb460b8d246f4b2b4576b1734b3a95b" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00201/task-context.json", + "sha256": "0ac3856c852d6f7e08c7709f2b6435b46e1ddb2514004d9c9caf10d255b71e72" + } + }, + "nextTask": "M16-GAP-00202", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "08a20a0f20d32978b5a7c46cf4143f444aaad903a0bfcc805dfae9289b56fe81", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00202/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00202/manifest.json new file mode 100644 index 00000000..f5fb0b11 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00202/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00202", + "parentTask": "M16-GAP-00201", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_REPLACE_ACTION_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00201/manifest.json", + "sha256": "57d93e7b6005d067485bf88745444309c342983d9428072a773a5fa9de6a7d35" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00202-operator-anim.replace_action.blend", + "sha256": "f29c88ecc031b1a56c68cea244417035bf8744db5baaab623627e6dab889f956" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00202.py", + "sha256": "bf8fc46f38503e773ffa46248feca82de6120321888924eafb3779dc232984e8" + }, + "desktopChecker": { + "path": "tools/web/check-action-replace-action-desktop.py", + "sha256": "9415485899bb577d178c2345240dccf42ef90f1146a9c7be7064ddfeef9df0b1" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00202/anim-replace-action-desktop-report.json", + "sha256": "fdb5531aa70842959bb57b8b9490c9839037af9a69191e23834e8793b507ac10" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00202/anim-replace-action-local-exact-report.json", + "sha256": "c122dbb9daadb8a449032ac742d308e7b9473bb4d05ae7855cf80ed3982f4263" + }, + "status": { + "path": "docs/status/M16-GAP-00202.md", + "sha256": "2e3f248c5393a4e17b060d48f73f553764a66f224d38a3aa29252a66dc0cc475" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00202/task-context.json", + "sha256": "1a27a9755974d092a7c1a3599657e27f19ca2d56455836c6f99142547c0866b3" + } + }, + "nextTask": "M16-GAP-00203", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "007da7f0d0b0959fe8688aa532198a7a4ba3bb4827a99bfe83c210f8b9b970f2", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00203/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00203/manifest.json new file mode 100644 index 00000000..58beeb40 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00203/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00203", + "parentTask": "M16-GAP-00202", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_REPLACE_ACTION_NEW_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00202/manifest.json", + "sha256": "8d3a4e0f3ff82b80f1cca0410e87999b324a817a8054ac322c8eea7e0ed7a81f" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00203-operator-anim.replace_action_new.blend", + "sha256": "dd278ab743c34b61566c20e545b90e42bcfe641ecbb523550fcdacea188f12b4" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00203.py", + "sha256": "7da43b3e6d4774e5cd90ecbe51e6249a34778e58caec85945fbc9f3abfe83c4f" + }, + "desktopChecker": { + "path": "tools/web/check-action-replace-action-new-desktop.py", + "sha256": "9920d9911715035ed99a9615df37e8cfdb70c3aa9b96f12fd5296c52047b0c64" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00203/anim-replace-action-new-desktop-report.json", + "sha256": "1017546d241a1e8b8f26c02bb392269a1325b18cbba90b1598f786250f13976a" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00203/anim-replace-action-new-local-exact-report.json", + "sha256": "d743947398ac1b4beca0f6cf86f676bf24d668488e1a9a575ec561d2445a1ed6" + }, + "status": { + "path": "docs/status/M16-GAP-00203.md", + "sha256": "0504f0cc178ce3f7d3678d0170294f3fdc5c0c0ff40458a9891ef471e8bded96" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00203/task-context.json", + "sha256": "772d0122a85d60e0f0ed73fb53f700a89d251e2f8581ca84b2ee01c7792e66ca" + } + }, + "nextTask": "M16-GAP-00204", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "2c9f6d0ae72f175987aeb45bf3656207dee2742aa4213f656a5641d86992bfb7", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00204/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00204/manifest.json new file mode 100644 index 00000000..05953283 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00204/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00204", + "parentTask": "M16-GAP-00203", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_SCENE_RANGE_FRAME_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00203/manifest.json", + "sha256": "8886ae22530f6a533b64a31216b703b34e86461c270ddbcd548a63839568df7f" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00204-operator-anim.scene_range_frame.blend", + "sha256": "aa332513c910b461ea53db9c6f8c6de2801c7b79bc84c083c366360aec2a36dd" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00204.py", + "sha256": "bda30fc04f8985b0dbdce2e239ee7a05a12e9362ca162803b54154684844d226" + }, + "desktopChecker": { + "path": "tools/web/check-action-scene-range-frame-desktop.py", + "sha256": "054bbc89615177ecd199f28b55910e6aadbe1b87d04056679810c549ffdd8c08" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00204/anim-scene-range-frame-desktop-report.json", + "sha256": "fd7943551bf6662d8cf43f623cdb966e7242b172eff8ca0f3bfee71c3b67dbed" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00204/anim-scene-range-frame-local-exact-report.json", + "sha256": "3195131f4c4cfa050656a4a301840d857f5eb65e2929aaa867d3b056d3fe631c" + }, + "status": { + "path": "docs/status/M16-GAP-00204.md", + "sha256": "9f42dcc4c93fff48d9f1c739feb9df5f0000f18ef1a9ea11644207534cc3a9f8" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00204/task-context.json", + "sha256": "5b90524611e783f9f9103ebc4d9504450edad0b471f9d86f62c2602c7c7d2edf" + } + }, + "nextTask": "M16-GAP-00205", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "b03480a07b5347d999442dd3b596645982cd18f48a19e758862485937e2fa21b", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00205/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00205/manifest.json new file mode 100644 index 00000000..4ad918af --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00205/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00205", + "parentTask": "M16-GAP-00204", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_SEPARATE_SLOTS_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00204/manifest.json", + "sha256": "e54672ac3af7043e794430deed2f26f434fbdc9ebfb3418a971297a321936447" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00205-operator-anim.separate_slots.blend", + "sha256": "55c92c2622d2b532060fae13fc9fc035b8d936f21ff766b6b49938632140fd82" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00205.py", + "sha256": "54a5039afb72cbdd942e1b9c77cbbe5bb09a4380ebca186268dd676a357621eb" + }, + "desktopChecker": { + "path": "tools/web/check-action-separate-slots-desktop.py", + "sha256": "4f1ea94c58a36b764cff6c40380794b927cd67212421aa36db8062b3817748a5" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00205/anim-separate-slots-desktop-report.json", + "sha256": "d3976e54b5617745cd29ed3979a030553a6692a54d8cd59454593efac1e419be" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00205/anim-separate-slots-local-exact-report.json", + "sha256": "421feb4b3b822a8bb13999e268a42f3378408d4d725879d1e05c3c8efe359a84" + }, + "status": { + "path": "docs/status/M16-GAP-00205.md", + "sha256": "504475606c2d54e38587d7880653c6328666b9731c29857dbc68d127a6249d71" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00205/task-context.json", + "sha256": "744b861440cf850c81545c532cf78c6c946c2214f539d14da72d7e2fda23ff51" + } + }, + "nextTask": "M16-GAP-00206", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "d8e7a9896b9f020b74080782a41181c9842ead4523f092a83c8c144819b3a73b", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00206/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00206/manifest.json new file mode 100644 index 00000000..5288d4cd --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00206/manifest.json @@ -0,0 +1,104 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00206", + "parentTask": "M16-GAP-00205", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_SLOT_CHANNELS_MOVE_TO_NEW_ACTION_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00205/manifest.json", + "sha256": "72cf9e1bf9457da4cad4b8fd91c121a8d6b50d8b9ce5199de816f60250c78d3e" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00206-operator-anim.slot_channels_move_to_new_action.blend", + "sha256": "4dddfa7e19686d28ea2e6918bb7221943ea26a4ba8831d7fef0736ee8fd52534" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00206.py", + "sha256": "a0dda3e2468216bebc829cf9d64ff8b2124d243007bf466653df78aadb1e109a" + }, + "desktopChecker": { + "path": "tools/web/check-action-slot-channels-move-desktop.py", + "sha256": "8625500da296a6eee287dbafb242da7178e9f101d171f8cc62ecf8baffe2b0d3" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00206/anim-slot-channels-move-desktop-report.json", + "sha256": "17e021647d84852ea074b134a722de8dedeea70db3cf180fa60456892ebc86df" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00206/anim-slot-channels-move-local-exact-report.json", + "sha256": "4c92663dc8eb44d504ba95d4a978211656bd44273ff53cb468101f00ef20f8a3" + }, + "status": { + "path": "docs/status/M16-GAP-00206.md", + "sha256": "28a15b08f7d20ec17fa242954206715e1b8a50bb7ae1391c9a187119aaf8be26" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00206/task-context.json", + "sha256": "da58033c8325bdf4c16687776315ba7689c9a0d908f327dbabf98507699bbc3c" + } + }, + "nextTask": "M16-GAP-00207", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "5f25e2d50ac8dfe0854b5c424179b1cf0d496b0ee23a6e434ce623e4d98f912c", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00207/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00207/manifest.json new file mode 100644 index 00000000..0c71187f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00207/manifest.json @@ -0,0 +1,113 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00207", + "parentTask": "M16-GAP-00206", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_SLOT_NEW_FOR_ID_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00206/manifest.json", + "sha256": "3b1207f1c3db50bcd1efdfd40f21cdbf99323288fd984a9da172f4525df31a9a" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00207-operator-anim.slot_new_for_id.blend", + "sha256": "55feef5fa86ba311964057b6fa5b24b5362fa7c2fc9ab061736c4fec6927a532" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00207.py", + "sha256": "6c664ddeab1eb7cbe143c2c23ece749225b7f70a641590922af6a76fd61d44eb" + }, + "desktopChecker": { + "path": "tools/web/check-action-slot-new-for-id-desktop.py", + "sha256": "76c3ed3a2046d4c5befa9f761ba020bf37859f5758a11f874e688d91bbcbc7e3" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00207/anim-slot-new-for-id-desktop-report.json", + "sha256": "62998821fb29ec9edb1c2796f984e009091cb9d12ccca4ec058094aea695a6f3" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00207/anim-slot-new-for-id-local-exact-report.json", + "sha256": "2c843b2611ac386e68943adb36fc826dcb694c8fb30df9b0abf10f8970b4f4fc" + }, + "status": { + "path": "docs/status/M16-GAP-00207.md", + "sha256": "6cb10e433730afa5fea28840824d849c492461f4b5b9350a41d5a0f995d4f504" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00207/task-context.json", + "sha256": "37746bd730e6642f8a2ca14fe36b590977c2a409cf0df23e338ef43d7a22fd13" + } + }, + "nextTask": "M16-GAP-00208", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "36340873cc26d938df455c8aeb4a831877276135a093f8c5582f0a41cf050ae2", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "ace99ea00f5e807cc098e19cc4447017bb5744431516066a65c8f38047c4a7e8", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "7716160bb7781f60e272b49bc071c263487ad9b21dc87d4f44bf3f94171bdfb6", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "7716160bb7781f60e272b49bc071c263487ad9b21dc87d4f44bf3f94171bdfb6", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "5df580ac02c5d8806ffe858b31cccec7692222813d17e4ffdbee207bf346bcb1", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + { + "path": "web/app/public/vendor/blender/web_engine.js", + "originalSha256": "5df580ac02c5d8806ffe858b31cccec7692222813d17e4ffdbee207bf346bcb1", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00208/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00208/manifest.json new file mode 100644 index 00000000..a8f248c6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00208/manifest.json @@ -0,0 +1,113 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00208", + "parentTask": "M16-GAP-00207", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_SLOT_UNASSIGN_FROM_CONSTRAINT_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00207/manifest.json", + "sha256": "d6aa11be23f7a4657161e6a8b9794a2c797880cb5ec598aad588bd5cb5f5e2e5" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00208-operator-anim.slot_unassign_from_constraint.blend", + "sha256": "517bba0bc6e4dfab4eeafc9d902de560b76360718789a06a6417d9e9f8be7df9" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00208.py", + "sha256": "47a3962e2c07fc2cef07570c671001c612ece290ed811bc4317143391e99a82d" + }, + "desktopChecker": { + "path": "tools/web/check-action-slot-unassign-from-constraint-desktop.py", + "sha256": "89120dd2da7f4c7f24fb12af02ce94d5929002e0d87cad765c8828999c74afdb" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00208/anim-slot-unassign-from-constraint-desktop-report.json", + "sha256": "a303a5e1060fde95fbaaa0cf6e759cb4af330cf233b65ae1462953960fca51cd" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00208/anim-slot-unassign-from-constraint-local-exact-report.json", + "sha256": "cc7a531c48dc232d822ae6ffcc19f459d44d02976eb3b2f04133435d7a98b158" + }, + "status": { + "path": "docs/status/M16-GAP-00208.md", + "sha256": "957439dbc9be432dbb8187be6e3b2f12a27665e4e344a87897d51008380e7bee" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00208/task-context.json", + "sha256": "d5bd4bdecaafbb137b89769a001b6e966e47d31059bce66b524384ea3e8a0a01" + } + }, + "nextTask": "M16-GAP-00209", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "08cad39c3769c819d5409c58aa666203fcb120bfae5f2d519918fc1a0f0c07e2", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "ccb609241fd6ac86f99e68b0487c92100ddea54e801db3a3cf35aa75719ce8f9", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "480b288de461a63807bbb0fff6d36f7a984506b0f8b897682739d7bd9854e0d5", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "480b288de461a63807bbb0fff6d36f7a984506b0f8b897682739d7bd9854e0d5", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "originalSha256": "5df580ac02c5d8806ffe858b31cccec7692222813d17e4ffdbee207bf346bcb1", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + { + "path": "web/app/public/vendor/blender/web_engine.js", + "originalSha256": "5df580ac02c5d8806ffe858b31cccec7692222813d17e4ffdbee207bf346bcb1", + "resignedSha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00209/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00209/manifest.json new file mode 100644 index 00000000..45e853d2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00209/manifest.json @@ -0,0 +1,103 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00209", + "parentTask": "M16-GAP-00208", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_SLOT_UNASSIGN_FROM_ID_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00208/manifest.json", + "sha256": "06fac2d9fbe04f6308ce39377fd1360890604bd26d30939339dc42e86035cd55" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00209-operator-anim.slot_unassign_from_id.blend", + "sha256": "69fb5253dfd28f45ea25f29947d08afb4513e222105b4b8bc94a5b6be05b7238" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00209.py", + "sha256": "45e9b34637496caa72e521214539d9ef60646191e90dbed5bcd76c3fa7366701" + }, + "desktopChecker": { + "path": "tools/web/check-action-slot-unassign-from-id-desktop.py", + "sha256": "3166defd69de7fb19a52c7b9646df52da9efb330c27037e77c4d34f92c6b43f5" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00209/anim-slot-unassign-from-id-desktop-report.json", + "sha256": "12d1d6492c6d682a519045cc840c0e8f8b212b9eca9f0bdfa15536dc4602f17f" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00209/anim-slot-unassign-from-id-local-exact-report.json", + "sha256": "e42355c5cd82a7b06e5560312869fec9eed33ba7db613668c7920b3363901122" + }, + "status": { + "path": "docs/status/M16-GAP-00209.md", + "sha256": "9c436780681f0309420bd6c3e9def7e970e483175b4183e691320d5dd73cc108" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00209/task-context.json", + "sha256": "c6c9e58a950aee3230dc6a2a04f1ec5b8273caf2a4cf34cf86006193eaf4f78e" + } + }, + "nextTask": "M16-GAP-00210", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "bd7f77cde032ee873ddf5ebb39b20b748067e0352bdb7a682011a4017574a7e6", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "eede4160a817ce6ef82f14035a4a0f00c381acdbd150474d6e71c2c75d7f15c5", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "68cf2a8fb0158c4375c68d8ca9f98b04fcb8acf5f109cf63c81a551ec5c96c3f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "68cf2a8fb0158c4375c68d8ca9f98b04fcb8acf5f109cf63c81a551ec5c96c3f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00210/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00210/manifest.json new file mode 100644 index 00000000..261f9f2e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00210/manifest.json @@ -0,0 +1,103 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00210", + "parentTask": "M16-GAP-00209", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_SLOT_UNASSIGN_FROM_NLA_STRIP_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00209/manifest.json", + "sha256": "1dc0a49c9b7eafeb7a12725c5dabe99e475c6f8b1ce46458d0088f88f8ad8768" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00210-operator-anim.slot_unassign_from_nla_strip.blend", + "sha256": "4740a95b74bf2d4f71af7019158ee116643bf6cb315ff6a31717fb6894c3f2e5" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00210.py", + "sha256": "82ae2a1e60b7a8f1adfa9fd0451dda47daabba420bc658177172fe3080aaadd1" + }, + "desktopChecker": { + "path": "tools/web/check-action-slot-unassign-from-nla-strip-desktop.py", + "sha256": "dadd0204062fb1bb54de6b2cf998e4313ed7dee32b201467ef3327200ba04685" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00210/anim-slot-unassign-from-nla-strip-desktop-report.json", + "sha256": "35c89ff2c01b3887949572d83f27665b76eee49c5486e40b2c1b9e649916c9a2" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00210/anim-slot-unassign-from-nla-strip-local-exact-report.json", + "sha256": "d83b48f105f430cb7bbc2151b837fa589944a7c8d36a6156269ce4552aea5d41" + }, + "status": { + "path": "docs/status/M16-GAP-00210.md", + "sha256": "1a2fb7129a562a6ca35ae61159d1cf28c3069be6a121d738d4b621138033e8ab" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00210/task-context.json", + "sha256": "8d6bebc0df33dd02879078f9d824883255a290c2d9b72609bbecf689e3b49c66" + } + }, + "nextTask": "M16-GAP-00211", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "a3e43ec395826f4448b48fc3af752f1a58dc58955c4b4570a6f4b6512ada22a3", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "774069a85bf5c59e4bac7be4318db36cf1684e925b783505dbf03dfe2abcbe43", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "e57225849e65c6f56206efc67bdc7aaf1bf695205336f7d0eff9b880ece37732", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "e57225849e65c6f56206efc67bdc7aaf1bf695205336f7d0eff9b880ece37732", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00211/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00211/manifest.json new file mode 100644 index 00000000..2baed768 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00211/manifest.json @@ -0,0 +1,103 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00211", + "parentTask": "M16-GAP-00210", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_START_FRAME_SET_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00210/manifest.json", + "sha256": "f7881ee15006bbe0788238d285b92519a468b3fd833c8c07764252486b2587a6" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00211-operator-anim.start_frame_set.blend", + "sha256": "d2f5cf3f5c3603b0d811c9df3581c10b5c28e3f80adeb30319b079bd95567a36" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00211.py", + "sha256": "587d7d78764c9f107677dccd537f0265ca0c340e25127938fea64e99b33fff38" + }, + "desktopChecker": { + "path": "tools/web/check-action-start-frame-set-desktop.py", + "sha256": "a4957a066065a6e4ae474e1fb700fd97179dbc12472fb2ff19f7d5048bbcd3d9" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00211/anim-start-frame-set-desktop-report.json", + "sha256": "b17a936ea363e216aa819cd90c79669a8f95c0c9cdb6aae74c5e24df13a4e240" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00211/anim-start-frame-set-local-exact-report.json", + "sha256": "b145f06715d9d6ef03a304e79d9cf635912db731d00991cd3be4dd56a6cc1a71" + }, + "status": { + "path": "docs/status/M16-GAP-00211.md", + "sha256": "73b13a7c83a37e2edbd5498035987f542538d49650812b4cbb8ed6b27be85cd4" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00211/task-context.json", + "sha256": "910687fefc3ca3b8661d437c62816ebb19c3c263ec745ec70dcf039dfe0fcc43" + } + }, + "nextTask": "M16-GAP-00212", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "46180c0ff4f01bfd59295eb2993cec152644a8afa8861c43d583079ea758791e", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "774069a85bf5c59e4bac7be4318db36cf1684e925b783505dbf03dfe2abcbe43", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "e57225849e65c6f56206efc67bdc7aaf1bf695205336f7d0eff9b880ece37732", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "e57225849e65c6f56206efc67bdc7aaf1bf695205336f7d0eff9b880ece37732", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00212/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00212/manifest.json new file mode 100644 index 00000000..35ad032e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00212/manifest.json @@ -0,0 +1,103 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00212", + "parentTask": "M16-GAP-00211", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_UPDATE_ANIMATED_TRANSFORM_CONSTRAINTS_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00211/manifest.json", + "sha256": "47b0ed1ca1801bccd86b4c829c6d95ed6b99ce63131c9a78e27fb5681eedb8e2" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00212-operator-anim.update_animated_transform_constraints.blend", + "sha256": "116684a811bdc591c554c5a8f259d995ca9ba49b102e8ccb79f1a03741fd28f2" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00212.py", + "sha256": "d38cdea9f5584506f0b3ac87fa734da388fd891c81a0438031e5bb881ffd77f5" + }, + "desktopChecker": { + "path": "tools/web/check-action-update-animated-transform-constraints-desktop.py", + "sha256": "3417ba9f8ef8d086457623fe2b69be2de5d3983a4a7b3be57450b7083889ba5f" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00212/anim-update-animated-transform-constraints-desktop-report.json", + "sha256": "6e486664dd967eec8f93569db555e23400fc147d40d172b7c1af19188e7e25e1" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00212/anim-update-animated-transform-constraints-local-exact-report.json", + "sha256": "98592f2cfe53ea6f2d59b34203211b0a45d3969ff546857313e2463f7f8e7b57" + }, + "status": { + "path": "docs/status/M16-GAP-00212.md", + "sha256": "6007b1fe88b4bc38d416bf092d9becd2a8e30a50a56f12f19b6c62ee515a34af" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00212/task-context.json", + "sha256": "b1e138449cd81cc88bfe78855410f9b640db035bbfc59bc21fd750f5887ca3e6" + } + }, + "nextTask": "M16-GAP-00213", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "397273b4da506523a54ea295fcf47b3418c2d2df754edcc3e0f533699c00e567", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "774069a85bf5c59e4bac7be4318db36cf1684e925b783505dbf03dfe2abcbe43", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "e57225849e65c6f56206efc67bdc7aaf1bf695205336f7d0eff9b880ece37732", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "e57225849e65c6f56206efc67bdc7aaf1bf695205336f7d0eff9b880ece37732", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00213/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00213/manifest.json new file mode 100644 index 00000000..824de5ee --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00213/manifest.json @@ -0,0 +1,103 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00213", + "parentTask": "M16-GAP-00212", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_VERSION_BONE_HIDE_PROPERTY_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00212/manifest.json", + "sha256": "b0816225b3c22bd80b9a89d51c7ea57d1723149eea9859a017019d6ba0953673" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00213-operator-anim.version_bone_hide_property.blend", + "sha256": "5455d4f3f44ccc40db7ac379d5c6d4bbb099c3861a348237a1541697597956c1" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00213.py", + "sha256": "f5e1eefa9c012d091f413ec771f6dab8dac496f2d4481e33fa288a61a6ef4c86" + }, + "desktopChecker": { + "path": "tools/web/check-action-version-bone-hide-property-desktop.py", + "sha256": "6b03a7faf073e652eb260a01068dd7d167e6ff88e46f75dfa9e1445edda1ab29" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00213/anim-version-bone-hide-property-desktop-report.json", + "sha256": "35c3ee64110db16c946056cd3c3044321d6101a4ee68c2fd68038cbab4576616" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00213/anim-version-bone-hide-property-local-exact-report.json", + "sha256": "117e80e3ee5caf95979201d85b650de27967196242bf6f5656d24c3cec973d85" + }, + "status": { + "path": "docs/status/M16-GAP-00213.md", + "sha256": "ee58d81b60550da7abf3a6f6a99cf53d33e5570fcaa7c49bed46db66ecbb9b4d" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00213/task-context.json", + "sha256": "a9cbb2cffc15ad50810b4e806492a6dda84b30757f085c17a0c754c4160c9868" + } + }, + "nextTask": "M16-GAP-00214", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "7cdd6a343dc7ab3e0aa7b109a3f770c76a863980520293c48d2cf1f7e28b5625", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "774069a85bf5c59e4bac7be4318db36cf1684e925b783505dbf03dfe2abcbe43", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "e57225849e65c6f56206efc67bdc7aaf1bf695205336f7d0eff9b880ece37732", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "e57225849e65c6f56206efc67bdc7aaf1bf695205336f7d0eff9b880ece37732", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00214/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00214/manifest.json new file mode 100644 index 00000000..07ade588 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00214/manifest.json @@ -0,0 +1,103 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00214", + "parentTask": "M16-GAP-00213", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_VIEW_CURVE_IN_GRAPH_EDITOR_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00213/manifest.json", + "sha256": "08467e4ffc091a6b32ce09ba35cacaff880f3292823bc0bd2a8ca4995ddbc8ec" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00214-operator-anim.view_curve_in_graph_editor.blend", + "sha256": "405825a29d3bf69cd85e461bf0c1a727631febe354b11ed1fd722d72f0faaea2" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00214.py", + "sha256": "a5c2ab327f0540ac3b80088e9022c9231be30408defe536263a87c3394677b80" + }, + "desktopChecker": { + "path": "tools/web/check-action-view-curve-in-graph-editor-desktop.py", + "sha256": "38e8a54df8725315b0c60bec955c77a3e2a1022d01898377f097268165be81cf" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00214/anim-view-curve-in-graph-editor-desktop-report.json", + "sha256": "127e6168e198cae8661d358b457d1459f9b515f79d2a6e86aa0c1022fb3210c6" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00214/anim-view-curve-in-graph-editor-local-exact-report.json", + "sha256": "bfa381ab96c2f2f0d9d16dcc7afd7a0200284a5704610cb70a6f0db402c3698b" + }, + "status": { + "path": "docs/status/M16-GAP-00214.md", + "sha256": "67c9c89f921f7c911bfb5172da5eefa1fe68a9749b41e61b55383d63ba65de6c" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00214/task-context.json", + "sha256": "905f7ee4e419109e77a274f385c405132f5e471cf0c4f0e24c363fd60dffb431" + } + }, + "nextTask": "M16-GAP-00215", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "8ca58e1feec4af6a326606c6ed6df6b18d008d96c1609bf1cb3915ce76fd1ec4", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "cda5ebf01d6f63b8071a10b506a044c829627329d87bc2ea7a139ee726f7071c", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "a0067e363e2ce53fc9658e67819c74cce01a515d6272d6a7c028776b4465fe87", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "a0067e363e2ce53fc9658e67819c74cce01a515d6272d6a7c028776b4465fe87", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00215/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00215/manifest.json new file mode 100644 index 00000000..b6a398d5 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00215/manifest.json @@ -0,0 +1,95 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00215", + "parentTask": "M16-GAP-00214", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_ALIGN_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00214/manifest.json", + "sha256": "0ff1e297545b308ad6ef9006c80992a0f9ecba88008bf9c0b4f3a86b6c28c145" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00215-operator-armature.align.blend", + "sha256": "772ad751d2ad898214e27469c451ab44ce0463bb99271b160b70f57941e9b419" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00215.py", + "sha256": "b755086a190245ff4ed5effb4c713790ea8e1b066c79800ecb7b32cbfc1c1764" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-align-desktop.py", + "sha256": "a406c012536580f3dfc6b5851015bb65ccf578acce6e606c0994e4428de83738" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00215/armature-align-desktop-report.json", + "sha256": "f0f94981885773704748c302cad95cf7b0a24137cfb6d36921e8d464c408cb40" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00215/armature-align-local-exact-report.json", + "sha256": "d9b19ad3b36bc1a7303207b9ed9f3c2b32df072fce5349718b2783019e144e4e" + }, + "status": { + "path": "docs/status/M16-GAP-00215.md", + "sha256": "9bdd9c23820e98dfbb1bb57c2c1c7339f07e54c4abf2ba06d5b18a3fc0c0762d" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00215/task-context.json", + "sha256": "82b2e30643461bfcff8612e29aebe38d50f2585b8be9b1c780ae6d762298ab87" + } + }, + "nextTask": "M16-GAP-00216", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "f856119464bf174f206485d1899ff4086c7c3dd39dd3091976592a0f9d19fe88", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "c56d254a74ace9664104f139692cf37f825547301824872bfd8db95f6ad2117b", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "82b9fb9488a20543f0db1235b18a7c28b2593ac498c152a12f45f8299ced1927", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "82b9fb9488a20543f0db1235b18a7c28b2593ac498c152a12f45f8299ced1927", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00216/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00216/manifest.json new file mode 100644 index 00000000..1da220de --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00216/manifest.json @@ -0,0 +1,95 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00216", + "parentTask": "M16-GAP-00215", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_ASSIGN_TO_COLLECTION_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00215/manifest.json", + "sha256": "7d5ff929aa6c3532f6f895e21a5e195e445ddbf0cf3d2d7e9fc5254488a4b0b2" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00216-operator-armature.assign_to_collection.blend", + "sha256": "be79a2c05b090aaf1e7ce9f777a6adea68b5fb6b7750ffe130eebf2ab4608b43" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00216.py", + "sha256": "1e14f51d34a6a3781b299f826ef1a449efa4ad0dc744960b529a00671ffac017" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-assign-to-collection-desktop.py", + "sha256": "0a2aa43cfb3d08fc2904b9b36dd6fca160309f936bd5006038a56cf355990718" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00216/armature-assign-to-collection-desktop-report.json", + "sha256": "f9ea1aedef9d6286d5038e9244cd82fec979238d3d72da76201b7bc3ac18b7e2" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00216/armature-assign-to-collection-local-exact-report.json", + "sha256": "4d063e44db5ebe56585caf6e1e28c9ba5dfaee8ddd95c4402a0d40474b94187c" + }, + "status": { + "path": "docs/status/M16-GAP-00216.md", + "sha256": "8e4d7487a830aa736ca668bdffc059ab4bc366fd65f9ef159d10905ed3e27a37" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00216/task-context.json", + "sha256": "0f93744560fa885b9cf0d8e1c6ed605f922ea4bc44c521fee023adae2c0e5cae" + } + }, + "nextTask": "M16-GAP-00217", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "f856119464bf174f206485d1899ff4086c7c3dd39dd3091976592a0f9d19fe88", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "c56d254a74ace9664104f139692cf37f825547301824872bfd8db95f6ad2117b", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "82b9fb9488a20543f0db1235b18a7c28b2593ac498c152a12f45f8299ced1927", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "82b9fb9488a20543f0db1235b18a7c28b2593ac498c152a12f45f8299ced1927", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00217/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00217/manifest.json new file mode 100644 index 00000000..21583005 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00217/manifest.json @@ -0,0 +1,95 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00217", + "parentTask": "M16-GAP-00216", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_AUTOSIDE_NAMES_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00216/manifest.json", + "sha256": "3b2e12276994fca0c6c2d548eb634f9bcd44c6cf504cfea06b53aa863e59c754" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00217-operator-armature.autoside_names.blend", + "sha256": "9dafd4489858ab080988c474877d6e9a9e5a7884b8e00d42c070b7769d2ed57f" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00217.py", + "sha256": "037230ad7bb83e69a7c89aca12b62a87dd13d18307bf5f6dcc2c6b0ce059c51d" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-autoside-names-desktop.py", + "sha256": "1d8983980d621a559bef9b0bd14eecc1dbf95b43fee2eecaecf970f7052b1e1d" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00217/armature-autoside-names-desktop-report.json", + "sha256": "2ccaaa1f2b8549abc17bd0640add62b658ccc77b9a2792456df929dd209e466d" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00217/armature-autoside-names-local-exact-report.json", + "sha256": "2a479e88f080b7e7530f1f8f6ac87fe5aa5ca7ffaf69a068eaf4eeb99b257e80" + }, + "status": { + "path": "docs/status/M16-GAP-00217.md", + "sha256": "a735bae8a60c2d32b47221d4f5547489808daa8e939c7dec4bd7c729eeb23a3c" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00217/task-context.json", + "sha256": "0dc798480ef127c5528973b78ba24a99f8514b04212578e0f3b5633be8da06fa" + } + }, + "nextTask": "M16-GAP-00218", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "02fe1cd3eb72c15409ad2dde955629adb6456d1170fec43309dc2c5cd6e2fb53", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "c56d254a74ace9664104f139692cf37f825547301824872bfd8db95f6ad2117b", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "82b9fb9488a20543f0db1235b18a7c28b2593ac498c152a12f45f8299ced1927", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "82b9fb9488a20543f0db1235b18a7c28b2593ac498c152a12f45f8299ced1927", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00218/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00218/manifest.json new file mode 100644 index 00000000..9fd43afe --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00218/manifest.json @@ -0,0 +1,95 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00218", + "parentTask": "M16-GAP-00217", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_BONE_PRIMITIVE_ADD_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00217/manifest.json", + "sha256": "2edf78e7629b31c116389be652225e4279c0fd40bbbb58debb3d3bb1d66c8f01" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00218-operator-armature.bone_primitive_add.blend", + "sha256": "b6857f1212fd591bc78dea3451ee38da3547a3415c32637f974c8187bfd28f73" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00218.py", + "sha256": "a59d8918c3372dc41d1fdf06efea2fa8bdaadcadd0a1602af029d3682a7cf924" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-bone-primitive-add-desktop.py", + "sha256": "fa0d91a10c5d2dc9cae127c02927fc98be37110f25e3ab3570cd7cf733ce329e" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00218/armature-bone-primitive-add-desktop-report.json", + "sha256": "7176938d759ad47b1c4fd6a4c4b73cc3af615518f30540d535a0f997bfdfc3ef" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00218/armature-bone-primitive-add-local-exact-report.json", + "sha256": "042cee11ebc0ccac3108e51773fb486c08c8ef6f745d018b0abb6469678f4fb7" + }, + "status": { + "path": "docs/status/M16-GAP-00218.md", + "sha256": "44c52e0bbeabf7ba66894db6f51f04a5ab793c921483796176568c5d25f97711" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00218/task-context.json", + "sha256": "42735f344b07d948bd9f302e4e21ae7580ca97506d5903667b56c24b4af02d48" + } + }, + "nextTask": "M16-GAP-00219", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "6c18288b9d2ffba39e4485c5cf6c556e6952430d4d153b07763ba205bdec6f56", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "c56d254a74ace9664104f139692cf37f825547301824872bfd8db95f6ad2117b", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "82b9fb9488a20543f0db1235b18a7c28b2593ac498c152a12f45f8299ced1927", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "82b9fb9488a20543f0db1235b18a7c28b2593ac498c152a12f45f8299ced1927", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00219/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00219/manifest.json new file mode 100644 index 00000000..3f26fd3c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00219/manifest.json @@ -0,0 +1,95 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00219", + "parentTask": "M16-GAP-00218", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_CALCULATE_ROLL_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00218/manifest.json", + "sha256": "ed1737fa32a6d1bb5bdaca5e5eb35ff5006fbe14eeba59d96e6b24e64cd7bcc9" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00219-operator-armature.calculate_roll.blend", + "sha256": "7c6f851456147c2e69de3ddf1136885ccff9bd907cd480a5af5fd81f5769c862" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00219.py", + "sha256": "97a7da237cc8f8154f08b96e2ba6b5d6e608a6bc1b0bfa20fe165c00a3bb68b7" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-calculate-roll-desktop.py", + "sha256": "570471197617ea452db37d8d972f372db07de15c3f78fd934905ecdbfe3e3a7f" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00219/armature-calculate-roll-desktop-report.json", + "sha256": "b4ea9eee1596aa99d045e7064b96a763faf7b29d6f7c79b95045d75ff26dd922" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00219/armature-calculate-roll-local-exact-report.json", + "sha256": "1c888b9739c03fcd5aed2b1de20a2aea3871c80cff6b6fcb464e09a5478f5c23" + }, + "status": { + "path": "docs/status/M16-GAP-00219.md", + "sha256": "66adfb1390f39daeeedc52b0db0cfe1a4542af738ea6c5944a292faa53936e57" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00219/task-context.json", + "sha256": "1c6a55bdc4fd17687a7695b44fba71bd5ad26644919dbcd363b6a7dec07cbde9" + } + }, + "nextTask": "M16-GAP-00220", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "62ad26cec00dd5a3d59a7ddbfbfa9cd0b7fbae0f0b252b6e40ce9ae73d027f98", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "c56d254a74ace9664104f139692cf37f825547301824872bfd8db95f6ad2117b", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "82b9fb9488a20543f0db1235b18a7c28b2593ac498c152a12f45f8299ced1927", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "82b9fb9488a20543f0db1235b18a7c28b2593ac498c152a12f45f8299ced1927", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00220/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00220/manifest.json new file mode 100644 index 00000000..ac5d3aad --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00220/manifest.json @@ -0,0 +1,95 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00220", + "parentTask": "M16-GAP-00219", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_CLICK_EXTRUDE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00219/manifest.json", + "sha256": "3a57247b3f1ef1b2ebad1b59e81d18063e98210b653889c975e3b93f088ef820" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00220-operator-armature.click_extrude.blend", + "sha256": "7b9ded05ba9a6bb02b729ef474ec3f37a67f41fa0e8da53c7e3c58a56b64e065" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00220.py", + "sha256": "3af1d354e35b31da18a187e0ef5f5e2b5a2f11111058ff1dc3648f6134679b41" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-click-extrude-desktop.py", + "sha256": "2fc6347da08d334e4b28a5316d1db45d189021ee38f4e5f8574e3a66cc177d51" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00220/armature-click-extrude-desktop-report.json", + "sha256": "5fe98d54a481df86862f9f3bcdcb854fa9ea4abfb7de9de6819a07beb2bdb4af" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00220/armature-click-extrude-local-exact-report.json", + "sha256": "dbe683725d4e05220b6abaf837450c31f66cb8c82eb4ef75130c332ba98125d8" + }, + "status": { + "path": "docs/status/M16-GAP-00220.md", + "sha256": "5c5274c86b019432f5b22e474947272001ad2af14b2437b577578547d2230511" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00220/task-context.json", + "sha256": "dfba3c91da5262603b2958c8011b317a5edd25bd1cf5b1a58cbe6bfd224024f7" + } + }, + "nextTask": "M16-GAP-00221", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "5fa622a7df094c82b26aa596a27f167302250f5d3f3d7db785ef9bd6da44a840", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "c56d254a74ace9664104f139692cf37f825547301824872bfd8db95f6ad2117b", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "82b9fb9488a20543f0db1235b18a7c28b2593ac498c152a12f45f8299ced1927", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "82b9fb9488a20543f0db1235b18a7c28b2593ac498c152a12f45f8299ced1927", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00221/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00221/manifest.json new file mode 100644 index 00000000..66873865 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00221/manifest.json @@ -0,0 +1,95 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00221", + "parentTask": "M16-GAP-00220", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_COLLECTION_ADD_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00220/manifest.json", + "sha256": "95fdbc58ff2d2d7db0462090f823bcecbc8e3e79642134eab568a8d1e41f82b0" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00221-operator-armature.collection_add.blend", + "sha256": "a081193e2c16de9c072b0b7cc57f9d7b5f3f12863fcb2f06e16641cebdcf0b34" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00221.py", + "sha256": "b2eea8780bb0095ab12b3a0f6e437054f6d01450a9a111030da0724b134bdc69" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-collection-add-desktop.py", + "sha256": "8acf8ab1c9b9e27bc83fe568edd0d418b6c824c72b539126561955f05e5ba9f8" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00221/armature-collection-add-desktop-report.json", + "sha256": "ccbe838e9d73ce8d63f7b81b5d7b28acf038b802fd5f76c5b806f21925df6e3b" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00221/armature-collection-add-local-exact-report.json", + "sha256": "edd1a7688e96982df6a0b3216784c437d668c70fb817e58f11be9a6be6a10dcd" + }, + "status": { + "path": "docs/status/M16-GAP-00221.md", + "sha256": "56727977918f6e76af983feeeff59da94ea0e1d020569acfe6eb5ff8fcce49e4" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00221/task-context.json", + "sha256": "33c38758f90a7a49b0864dbccd1176d04ae0057829e7a1aed56ee8ff66e57610" + } + }, + "nextTask": "M16-GAP-00222", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "89924d3436c63db88e7765d0ea52e5604f4470cb62011ae36d594cf558e794d8", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "c56d254a74ace9664104f139692cf37f825547301824872bfd8db95f6ad2117b", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "82b9fb9488a20543f0db1235b18a7c28b2593ac498c152a12f45f8299ced1927", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "82b9fb9488a20543f0db1235b18a7c28b2593ac498c152a12f45f8299ced1927", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00222/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00222/manifest.json new file mode 100644 index 00000000..f20a384a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00222/manifest.json @@ -0,0 +1,95 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00222", + "parentTask": "M16-GAP-00221", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_COLLECTION_ASSIGN_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00221/manifest.json", + "sha256": "74053893965d4a9f206a601edb4ebd1c7fa1e25d8545924e7880b1ad25fada1d" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00222-operator-armature.collection_assign.blend", + "sha256": "c742316be6dbd00fe3d5caf804b41067839a344a0725fe3c3aa78d1ebc024b8a" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00222.py", + "sha256": "74ddcb85092783361facd3388f3bfae2ea1794b6d1395f2381928f8e296d3c5c" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-collection-assign-desktop.py", + "sha256": "92c6b8d031631ace79523ef4200508621aa8bd0b9ae2d5a8cd84a9cdbd91a559" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00222/armature-collection-assign-desktop-report.json", + "sha256": "db90ed0998768c9009f1c19b9eec12392d5c73bc7ca914a780bdd6721b41e932" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00222/armature-collection-assign-local-exact-report.json", + "sha256": "1b8650f03a1d51cd58f28be3a2bca0d44b34284b82708f5c16972360b9695791" + }, + "status": { + "path": "docs/status/M16-GAP-00222.md", + "sha256": "61664acc268f0ddc6e53aec409e07b907dcff1e4bd75882f0b2fd0c92ad0c989" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00222/task-context.json", + "sha256": "c512eb33c57c21e0d140eab83a6bf9df69011a31148a08449aefc8a63de195da" + } + }, + "nextTask": "M16-GAP-00223", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "ffb30925fa7f66ec1df8279dc29ff8933119ca8d7d09e1ad9062f4096b79d020", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "c56d254a74ace9664104f139692cf37f825547301824872bfd8db95f6ad2117b", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "82b9fb9488a20543f0db1235b18a7c28b2593ac498c152a12f45f8299ced1927", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "82b9fb9488a20543f0db1235b18a7c28b2593ac498c152a12f45f8299ced1927", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00223/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00223/manifest.json new file mode 100644 index 00000000..e47c50cd --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00223/manifest.json @@ -0,0 +1,95 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00223", + "parentTask": "M16-GAP-00222", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_COLLECTION_CREATE_AND_ASSIGN_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00222/manifest.json", + "sha256": "593bc1ad27a621ce73a50f1f13512518032f1d328411fde6d53b9c16450d1184" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00223-operator-armature.collection_create_and_assign.blend", + "sha256": "a028eb51fe9f4e81778cd5e237820c050c88588266cb39cd2a0fb4b15d33c8c8" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00223.py", + "sha256": "8edf3fc266d93bb225a0f13d16034a2518f2a85f424931d9c570626417c5ce11" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-collection-create-assign-desktop.py", + "sha256": "4e6ee367c86279625bed4475f05abd3596329c2bd1c54c295f96118d5156cec1" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00223/armature-collection-create-assign-desktop-report.json", + "sha256": "d02d028f7ec561db7363feea7f5504c5f8f7d719cd36b6a6f2edb70847996b4c" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00223/armature-collection-create-assign-local-exact-report.json", + "sha256": "14b7947dd2485e11eeb2045d565fe97732865abc4aceb0e6765e3ab2fbe0f63f" + }, + "status": { + "path": "docs/status/M16-GAP-00223.md", + "sha256": "4067ee986f0ff940d8ec7ba937bbdf4b7f81eab5779a3cbdd7287dbb7fdc6de5" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00223/task-context.json", + "sha256": "a9b51398cc072d9ca64ea26ed4a10e5988ec4ba428dc1af18a54997c640d7638" + } + }, + "nextTask": "M16-GAP-00224", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "58e7a4c517f5244deb9cd6ebbec09cc6d0ac6ca8e4c68305e1a2964218c5259f", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "c56d254a74ace9664104f139692cf37f825547301824872bfd8db95f6ad2117b", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "82b9fb9488a20543f0db1235b18a7c28b2593ac498c152a12f45f8299ced1927", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "82b9fb9488a20543f0db1235b18a7c28b2593ac498c152a12f45f8299ced1927", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00224/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00224/manifest.json new file mode 100644 index 00000000..f61acdb2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00224/manifest.json @@ -0,0 +1,95 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00224", + "parentTask": "M16-GAP-00223", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_COLLECTION_DESELECT_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00223/manifest.json", + "sha256": "3cb48f423f3ecac5f8ad7c7404acab3803a8e273e23d8021b3682d4a6fcd0875" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00224-operator-armature.collection_deselect.blend", + "sha256": "1a8405355bb6fda930f31f396f9e34ec97c95ceed4b639fce9522c1e82f73b7f" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00224.py", + "sha256": "26498cbab951fc7494cc364a6487de4b2901ddf17844b95c1c5416dcb058087c" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-collection-deselect-desktop.py", + "sha256": "302d827119a02a62770a172cf3624c84b9c83463b0ef10d35c1854a5e767ffb3" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00224/armature-collection-deselect-desktop-report.json", + "sha256": "78b8615c71b02dbcb6b2b88086118b9c713aa3762ddf5d947ae0b696d72d7744" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00224/armature-collection-deselect-local-exact-report.json", + "sha256": "9bfc7c03a0e46bb31069e987c0a60dea1ebb0b5c17dbe382fb1d1847ad42595c" + }, + "status": { + "path": "docs/status/M16-GAP-00224.md", + "sha256": "25f0a2dc6478e179122efad2467952a0e75eb5ff0437e0c0f2b3639f034d744c" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00224/task-context.json", + "sha256": "7201e11f59e90287699d96e377865963fe9f8aede63b4447941642bf877e2574" + } + }, + "nextTask": "M16-GAP-00225", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "26e467682becf34248f18cb5aca81c49105cfc3874b3e468b985556d8dbea9df", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "b72a1e1416d44b9c84e94425fb17c6a2eed3e3921c726c2719fb3fe64f652553", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "85651e3c088e2c0c1866871d3ac7f9ec65e0b9ced5261718ed59841eee85b23f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "85651e3c088e2c0c1866871d3ac7f9ec65e0b9ced5261718ed59841eee85b23f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00225/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00225/manifest.json new file mode 100644 index 00000000..37439cd6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00225/manifest.json @@ -0,0 +1,95 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00225", + "parentTask": "M16-GAP-00224", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_COLLECTION_MOVE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00224/manifest.json", + "sha256": "2319012188014b56201f54d47b9714af337f97c6359000bc1ceff77ea12aa083" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00225-operator-armature.collection_move.blend", + "sha256": "ae87b298fce55732961119fd8a36568c137023eed9002c26a9575578d3d983b5" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00225.py", + "sha256": "60175e59c0362eff81649fcdcbd180fea7f06233ebd7d42cb3d35d2e66804901" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-collection-move-desktop.py", + "sha256": "6babe7d65549e4b06f4a9790af3ce6dabdf3131831f5d26442d6c1c6d0099f90" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00225/armature-collection-move-desktop-report.json", + "sha256": "06074b980f8df448546afcf0c96e89e47bcb160b309db81c869d525b35b281ad" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00225/armature-collection-move-local-exact-report.json", + "sha256": "aa0becd48b2e42dc3c3ac7222d6e0486ffc8089bceefb3670f102fecd6d1f2e6" + }, + "status": { + "path": "docs/status/M16-GAP-00225.md", + "sha256": "3330f1d33b17b920a261497023dc4ca06079837f69ba39251ab8d48a31bc73c0" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00225/task-context.json", + "sha256": "a946ed0bc5ef3004a227fb461dec0b46e1a571ddeeb7deaac46f08d4a4e840d6" + } + }, + "nextTask": "M16-GAP-00226", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "b00b3089aa75123ecb91187fc8e47ce6fc5b4c98dd6a8c8abb6af6d56b1f7b7c", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "b72a1e1416d44b9c84e94425fb17c6a2eed3e3921c726c2719fb3fe64f652553", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "85651e3c088e2c0c1866871d3ac7f9ec65e0b9ced5261718ed59841eee85b23f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "85651e3c088e2c0c1866871d3ac7f9ec65e0b9ced5261718ed59841eee85b23f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00226/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00226/manifest.json new file mode 100644 index 00000000..b3da79cb --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00226/manifest.json @@ -0,0 +1,95 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00226", + "parentTask": "M16-GAP-00225", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_COLLECTION_REMOVE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00225/manifest.json", + "sha256": "f5d2ee089b76a849567fc8f00d191bb722651a206fa0f00542e4a9d796d33e72" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00226-operator-armature.collection_remove.blend", + "sha256": "1e3ba5e46b8b45ca974b93b0f357cc5305c787032564ecbecfc9e1ae4e8ff9d5" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00226.py", + "sha256": "bf2375e84e871ada6615365fbda390de46a6f7adf1202d76ff6d6b34ea7ef364" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-collection-remove-desktop.py", + "sha256": "071d8360f7aff11fa3466e96133c9401525a5f31a4beec6c5fde46b43329dbc8" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00226/armature-collection-remove-desktop-report.json", + "sha256": "525ca8c6954750c9982bf91cbb3f26c9ad7a81911d56890dd6570cccfdbe3b37" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00226/armature-collection-remove-local-exact-report.json", + "sha256": "6df4c731b900161076a59892d26f15a8775d18571f27eb88321f890f91c9b9a0" + }, + "status": { + "path": "docs/status/M16-GAP-00226.md", + "sha256": "e4d4e214d2f1fd8c1872978d18ce28bee65fc7c4ded0c6869780af0343d12d5d" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00226/task-context.json", + "sha256": "b5bb4620750aea7f1773049c127349b7fca058c3345cecae20e302d8054632f8" + } + }, + "nextTask": "M16-GAP-00227", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "547aaa82fd1baa50190fa294309a07a0f2b077fa2d9d80bae916c60cb027f074", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "b72a1e1416d44b9c84e94425fb17c6a2eed3e3921c726c2719fb3fe64f652553", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "85651e3c088e2c0c1866871d3ac7f9ec65e0b9ced5261718ed59841eee85b23f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "85651e3c088e2c0c1866871d3ac7f9ec65e0b9ced5261718ed59841eee85b23f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00227/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00227/manifest.json new file mode 100644 index 00000000..70ca9889 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00227/manifest.json @@ -0,0 +1,95 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00227", + "parentTask": "M16-GAP-00226", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_COLLECTION_REMOVE_UNUSED_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00226/manifest.json", + "sha256": "e071c8ee3fc09259fd23c583a094981de94029c700e151632a96973c174aa82d" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00227-operator-armature.collection_remove_unused.blend", + "sha256": "0c898c98dc011e51f086cda66e3af03a08a7b1f27eb0e76f40915f18018a6d97" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00227.py", + "sha256": "c08cad057124430d914c10b3a9f8f79d94809fdd283778397a91085364784ed5" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-collection-remove-unused-desktop.py", + "sha256": "8bd8c0dfd8170779c3e834a8b3ad8c90e5a646263108b818c19e34be21353bc6" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00227/armature-collection-remove-unused-desktop-report.json", + "sha256": "4909e040db7be0d5ac84148d52bb47cbdf0f12a30612e6c1bae1067fd4f04dca" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00227/armature-collection-remove-unused-local-exact-report.json", + "sha256": "b41c86788e6b9e21b04d42bdfaa645d29e669f8dfec9fdfaf96fa09771c64475" + }, + "status": { + "path": "docs/status/M16-GAP-00227.md", + "sha256": "e92da7d66c4674271bbf2a43d524145b19926e1d919eacb27e4afc9ee3ceab51" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00227/task-context.json", + "sha256": "e7b8b69221ddde77585cf8e66e3c9de3fcc1cedc61739fd4af2e1385e9b5dabd" + } + }, + "nextTask": "M16-GAP-00228", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "5259f28488eab9e6778bc5f7997f0fe90524c2d1f0e2e68c3534f90ffdc444f4", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "b72a1e1416d44b9c84e94425fb17c6a2eed3e3921c726c2719fb3fe64f652553", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "85651e3c088e2c0c1866871d3ac7f9ec65e0b9ced5261718ed59841eee85b23f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "85651e3c088e2c0c1866871d3ac7f9ec65e0b9ced5261718ed59841eee85b23f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00228/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00228/manifest.json new file mode 100644 index 00000000..23743a8e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00228/manifest.json @@ -0,0 +1,95 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00228", + "parentTask": "M16-GAP-00227", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_COLLECTION_SELECT_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00227/manifest.json", + "sha256": "0bcd90a68235c27347b42900b1df89285363a2b766f0aa58d0d2eb58c3238ca6" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00228-operator-armature.collection_select.blend", + "sha256": "426b86f668d316254e06ff11f6fe59cd79d99216772573d17b2b74187d3ea6ea" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00228.py", + "sha256": "06377349aec2193a46188eea4f6b00c2122442636bea2547166ec96caef2e7a4" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-collection-select-desktop.py", + "sha256": "cb1db0e83e3ac1dab0db182b786cee39651c90e32817793f262b53a1b8caec89" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00228/armature-collection-select-desktop-report.json", + "sha256": "569c817b422e7947c30e202de7223a8da949127a022ce2b1e4f28de15202a440" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00228/armature-collection-select-local-exact-report.json", + "sha256": "cdb8e8196179776f53406eb67c2d6e838d547a2bae9b3dbb3a337646656abe64" + }, + "status": { + "path": "docs/status/M16-GAP-00228.md", + "sha256": "347c7884e48c5ca488105422e401c93d7b2569886a43230c6d26afa103700132" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00228/task-context.json", + "sha256": "1518cfbe7e66961eaa29ed27eed18d473e3194fc89575dcaea86007bb74c993b" + } + }, + "nextTask": "M16-GAP-00229", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "669e8cd26d2d6ffbb2749b1c4011d80e4089d080be50b4b369e4339e5d9bc1fb", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "b72a1e1416d44b9c84e94425fb17c6a2eed3e3921c726c2719fb3fe64f652553", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "85651e3c088e2c0c1866871d3ac7f9ec65e0b9ced5261718ed59841eee85b23f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "85651e3c088e2c0c1866871d3ac7f9ec65e0b9ced5261718ed59841eee85b23f", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00229/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00229/manifest.json new file mode 100644 index 00000000..ae0ecf20 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00229/manifest.json @@ -0,0 +1,95 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00229", + "parentTask": "M16-GAP-00228", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_COLLECTION_SHOW_ALL_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00228/manifest.json", + "sha256": "cfb390eeb5438dbcd72d6e08a07d6bbc9fb86dbe7a1936635b5cb04cad388b67" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00229-operator-armature.collection_show_all.blend", + "sha256": "b50107f0d15d2f0be497ea8f69385411f8354d04b1907e7e6382600d5e885795" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00229.py", + "sha256": "008fdaad2977e6eb878e28e46d7d9b1eee6600b5328f954ca251576b17ff6e19" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-collection-show-all-desktop.py", + "sha256": "3f81be36e3957ffa1de5581b4f2843c0b03e519ec153249c5fbb3b4cd53205b3" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00229/armature-collection-show-all-desktop-report.json", + "sha256": "afe66c1b338702309a1c2a4af59d33365f31baf0db1797a95b0f980ecc76bc0a" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00229/armature-collection-show-all-local-exact-report.json", + "sha256": "1f4afb14bbdc7db07aad0b6df361b89e7020427ef63edc3fa641b3526dc05994" + }, + "status": { + "path": "docs/status/M16-GAP-00229.md", + "sha256": "938515604dab298a7d7d5f02a89ca3b587071db63af3aad1c7327873196ba14d" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00229/task-context.json", + "sha256": "2fe7e53c051464cc86e984cd9be592ee05b3e827e4d171aa3ad1c7bd49e68de7" + } + }, + "nextTask": "M16-GAP-00230", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "2de9c464286e5b565229585651312e03625b35d7d9f4898c7c2a3f9e350bfa6e", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "b22ad35452b5ee488cd02861d65488fd931aa20e8d648c62f880066fe04edb79", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "de7d2c89343dcb881a7e8c1446722df1d190765a223f574700c45314264da5aa", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "de7d2c89343dcb881a7e8c1446722df1d190765a223f574700c45314264da5aa", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00230/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00230/manifest.json new file mode 100644 index 00000000..00de794d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00230/manifest.json @@ -0,0 +1,95 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00230", + "parentTask": "M16-GAP-00229", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_COLLECTION_UNASSIGN_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00229/manifest.json", + "sha256": "9c5b8d7a56fbd0f8c1c43adbb9196c90cc187a24729e0d0bc31e433891d5e6c0" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00230-operator-armature.collection_unassign.blend", + "sha256": "b1f942b4b3eb548ce6a4ebeb62fb295cea9ce038ef69a34d60d7c54a9c2c8882" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00230.py", + "sha256": "4f71a937c4dd2f7284f1f13347f67c7fa1a640016c681bbd73818e334b3d984b" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-collection-unassign-desktop.py", + "sha256": "addb723b6f5e003a726885241aba042138d5593adc7ba446228b8a41d5b51c0d" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00230/armature-collection-unassign-desktop-report.json", + "sha256": "289f7d681eadad4d426faad60787a12b75e27a728a1b02725b06c130cc501abe" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00230/armature-collection-unassign-local-exact-report.json", + "sha256": "4fdb066cafc7b138c1b2bde389ebd9794236971416ce27ee51b8348a5f3cb18f" + }, + "status": { + "path": "docs/status/M16-GAP-00230.md", + "sha256": "1b3945852e234096ae9be98f83bf3e6d647b06a0811346afaaab5c657501f9f6" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00230/task-context.json", + "sha256": "9c0f7fe99c270e6a97f497162dcbe83c1b5ecd8efba6578ac95bd808f05cfed8" + } + }, + "nextTask": "M16-GAP-00231", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "af1bea481e03b2fd616913cff5470a70290edf44096e58800ab2fae160dc7678", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "b22ad35452b5ee488cd02861d65488fd931aa20e8d648c62f880066fe04edb79", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "de7d2c89343dcb881a7e8c1446722df1d190765a223f574700c45314264da5aa", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "de7d2c89343dcb881a7e8c1446722df1d190765a223f574700c45314264da5aa", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00231/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00231/manifest.json new file mode 100644 index 00000000..61021cfc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00231/manifest.json @@ -0,0 +1,95 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00231", + "parentTask": "M16-GAP-00230", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_COLLECTION_UNASSIGN_NAMED_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00230/manifest.json", + "sha256": "77f90522d6531f1deafd1e64a2933e89068f38265f7ca0955b4a5ded6c5dfedf" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00231-operator-armature.collection_unassign_named.blend", + "sha256": "452747b1003c527ffa6538c8d0aa48957968f57d8b8d61451c3a43c59f88abb8" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00231.py", + "sha256": "3c735e79dc4e8f6b7f32c95ba1613ad7ed59b90c81821c0cf5e1cc9535b745a1" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-collection-unassign-named-desktop.py", + "sha256": "ef3b5f6cadbceca45a32161b9f8ca213215962d2cb213dbd80e76002725fd16e" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00231/armature-collection-unassign-named-desktop-report.json", + "sha256": "abdac650cb16974e738ec81067a0f44ac42fa3e9cf7c0cf86d5c0969b4cf1155" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00231/armature-collection-unassign-named-local-exact-report.json", + "sha256": "9800642cf4e7763d144b4d16dbfdd9c36c765bb8bef41407bcf7dafae0540208" + }, + "status": { + "path": "docs/status/M16-GAP-00231.md", + "sha256": "d03df95a10f54abacdb1d45c6e6b186c61211fe8ebf6e710b22349e100f1801e" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00231/task-context.json", + "sha256": "76040c7c526c8bac16b7fe04603b6997755d4d1a70f99c09cfdef5c0e59a3f4b" + } + }, + "nextTask": "M16-GAP-00232", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "db72b8bbbec5608631743232b11ecc69eb30eaf5036399e0af572cace11ba5a3", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "b22ad35452b5ee488cd02861d65488fd931aa20e8d648c62f880066fe04edb79", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "de7d2c89343dcb881a7e8c1446722df1d190765a223f574700c45314264da5aa", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "de7d2c89343dcb881a7e8c1446722df1d190765a223f574700c45314264da5aa", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00232/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00232/manifest.json new file mode 100644 index 00000000..470bde33 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00232/manifest.json @@ -0,0 +1,99 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00232", + "parentTask": "M16-GAP-00231", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_COLLECTION_UNSOLO_ALL_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00231/manifest.json", + "sha256": "99a4cb68824248880db4d7c7367108fc630f16c8deb7f722128e8d2186f1d5eb" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00232-operator-armature.collection_unsolo_all.blend", + "sha256": "be849eaac644443d8db0318d176767a3f861ee0309b69aff2a130decbf56b21c" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00232.py", + "sha256": "10bd16bd644bd55dd57d427216828a7aab6cbda49a1d5cbb570d6e78e72fdb18" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-collection-unsolo-all-desktop.py", + "sha256": "a4df03942060ccfe0eb19be415bade14f4f7c4a5649a5c3cfbbdd66b1104e98d" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00232/armature-collection-unsolo-all-desktop-report.json", + "sha256": "e42a8ace07205e1954b5685c46103736827bc6cdea98f182dc9cc63f1340094d" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00232/armature-collection-unsolo-all-local-exact-report.json", + "sha256": "9be85459dec5551c4245cea4cfd025ca3dcef6be5e01ee24cb42249852e0ec0d" + }, + "status": { + "path": "docs/status/M16-GAP-00232.md", + "sha256": "2c00d0f68f961158b9cb931a2071f83d7e2a402a7078789260c9263fcd7cae3d" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00232/task-context.json", + "sha256": "f4119c512efba997ef39caabb833c12294db92e703df7ff9218841d47a0313c5" + } + }, + "nextTask": "M16-GAP-00233", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "f615cc7c2aea75b0ae260592b58e6049821e1ec02425e29ce2274f4d77a49052", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "686ef20b290d2cb4bd72375d2d3a18d065616f268fbf310d71c54dcf5964bb12", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "953990ae8d76074473312e0ffae3e7f61d93831cbca69ee023411a43a9f22759", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "953990ae8d76074473312e0ffae3e7f61d93831cbca69ee023411a43a9f22759", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00233/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00233/manifest.json new file mode 100644 index 00000000..b82ab088 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00233/manifest.json @@ -0,0 +1,99 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00233", + "parentTask": "M16-GAP-00232", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_COPY_BONE_COLOR_TO_SELECTED_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00232/manifest.json", + "sha256": "03c4c803543785775293217040033ced42a419e84b2c8f556f891e3b6ac98533" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00233-operator-armature.copy_bone_color_to_selected.blend", + "sha256": "d5ab14cabded3332b4c882c1eaee7f9966a41155d2623bc73f88917d0639634a" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00233.py", + "sha256": "c7da3085c85ea178b7dc834df8a05950197d005ee2d6da7da420ebe2c9ea8711" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-copy-bone-color-desktop.py", + "sha256": "4e28192646754a1e0c253f40e15fea28b43bcd60305fbd40273caad1908f34c1" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00233/armature-copy-bone-color-desktop-report.json", + "sha256": "45464ed86aa52df4a5db68c0fac749585dc7f09b2d2c86080be467e1bf54c068" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00233/armature-copy-bone-color-local-exact-report.json", + "sha256": "1f8e2f7ba0c32ff17d12ed24da24426d8359d45ac3aa8badef68d2c98cea2ec2" + }, + "status": { + "path": "docs/status/M16-GAP-00233.md", + "sha256": "7f05db1dbd06d1570d98aef79177784423fc73706dcd2c6e967ba5aff294c0cd" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00233/task-context.json", + "sha256": "17f3369193e212c22b7cd12d9041f46dae78b19bf693ba5a1a791f3650f2d175" + } + }, + "nextTask": "M16-GAP-00234", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "c142f0d3fe94b7365456ab561919c0cc6c175838d883daea487dc964cb8969a7", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "d190501da90ca93805997120c80833a5730928e73ae1eaa36389d72300688abe", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00234/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00234/manifest.json new file mode 100644 index 00000000..b9c23f9d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00234/manifest.json @@ -0,0 +1,99 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00234", + "parentTask": "M16-GAP-00233", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_DELETE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00233/manifest.json", + "sha256": "576b641acd54236ee8c3b61dd42281590507981b89882d9318d707882a9f09b0" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00234-operator-armature.delete.blend", + "sha256": "52c3c28c6cba72d0b40c32bc46b4d5894482f05b2ee621e44efde6999008556e" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00234.py", + "sha256": "408362122138a1f2e8fbe837c9d78795ff42445cdeb2359bf001888cfc6ed538" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-delete-desktop.py", + "sha256": "2b0358f9e0a96da53f8c7f889ae18068aac2653d4aa6e804a0471a92e66ddd6b" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00234/armature-delete-desktop-report.json", + "sha256": "d6c85736295a6f07950292425294e188a6b17228c91eb1151a38e6da4833679e" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00234/armature-delete-local-exact-report.json", + "sha256": "89e0b6b13dd025e4d0d72eec409845c44f43d90e52fb4f506282cad455b5c0a8" + }, + "status": { + "path": "docs/status/M16-GAP-00234.md", + "sha256": "68beffb770ac5633f4b3ce112fc9e623702eacfe86ad3bbe0362158633ba4d4c" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00234/task-context.json", + "sha256": "da2f3111822b6a7238e2fa21d03976db0d614565da4365b6b8158877335ba70d" + } + }, + "nextTask": "M16-GAP-00235", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "572b2ae16c8a0c47305d8a9439d54e5fc96c3d63b6330a120f1283c4f9102d8a", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "d190501da90ca93805997120c80833a5730928e73ae1eaa36389d72300688abe", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00235/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00235/manifest.json new file mode 100644 index 00000000..0eee67f7 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00235/manifest.json @@ -0,0 +1,99 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00235", + "parentTask": "M16-GAP-00234", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_DISSOLVE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00234/manifest.json", + "sha256": "4a29dec54de89d3d3f2c2f8840d66ddef7193555550b403665a02576961d99c8" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00235-operator-armature.dissolve.blend", + "sha256": "951ea935f05ed06ced6ea61d4a9293e7dd3226902ea6ae3c0c466779dcbcf24b" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00235.py", + "sha256": "9dcb072c97f9c758d33de0280685665fe089c24393f6f72b06fb02e490e2befb" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-dissolve-desktop.py", + "sha256": "27a1aa29a7fe9ef6ad5b13b17ee0e30cf7c943df5d0ce3be97e44513cec33d01" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00235/armature-dissolve-desktop-report.json", + "sha256": "bb9acbe5fd923532f125e511f6f113ef3543b519bfd757a942e4466eef7e2c79" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00235/armature-dissolve-local-exact-report.json", + "sha256": "97e46604d0c79afccd2968e64127da80382a92053f53b6f0b706d7b742aa608e" + }, + "status": { + "path": "docs/status/M16-GAP-00235.md", + "sha256": "eeace6c617236ea29331ba7824d85f30fb84d674e1a3ef385da4b22c632fa2eb" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00235/task-context.json", + "sha256": "87839be45f3d7071cc81118d5977cf405bd84ca8c59cc759ebea7bdc32541f03" + } + }, + "nextTask": "M16-GAP-00236", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "562f805a1e9bc8255724b939f0877997bcf71fdc9e4f95f8397f9e787340ed53", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "d190501da90ca93805997120c80833a5730928e73ae1eaa36389d72300688abe", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00236/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00236/manifest.json new file mode 100644 index 00000000..76f6985f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00236/manifest.json @@ -0,0 +1,99 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00236", + "parentTask": "M16-GAP-00235", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_DUPLICATE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00235/manifest.json", + "sha256": "84f3720ab79155ad3af4c4d25f96d1cbe09944e8f76aae90bd4cc81c0037c4e1" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00236-operator-armature.duplicate.blend", + "sha256": "fb0ddc4b599f05941c6d719be3eab14f354755017f574ca9e6984369474b42a8" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00236.py", + "sha256": "7f4e66d90c76efa8c4f5ed0f0e052ed1a00ca815ff24630d08a201daab94233d" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-duplicate-desktop.py", + "sha256": "47c4546402e3e8692583e3d3075a1351092cd61fce09f5d96d13dc06bf2ce1d2" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00236/armature-duplicate-desktop-report.json", + "sha256": "b648c7d518227a03b4d142a61ad4e3f15de71cf58e3fc23b603f7fdd26e1bf0b" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00236/armature-duplicate-local-exact-report.json", + "sha256": "2c005ed1342943cec21b7a71371449af4d01909026bd18c8cd9ca65f868d51a9" + }, + "status": { + "path": "docs/status/M16-GAP-00236.md", + "sha256": "de335028bda9f8c51d13d244e81c3c1952cd074bddc74896c8cf5554389f9aa5" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00236/task-context.json", + "sha256": "91d3c4acf7697b24a72bcba8a093f2a3d1ea58578583983155ff2bc92b060184" + } + }, + "nextTask": "M16-GAP-00237", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "4d503a6fab1ad984b754229addb68a290b654c03d500dc3887ef9c5dc0ef7c80", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "d190501da90ca93805997120c80833a5730928e73ae1eaa36389d72300688abe", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00237/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00237/manifest.json new file mode 100644 index 00000000..13ca4ea8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00237/manifest.json @@ -0,0 +1,99 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00237", + "parentTask": "M16-GAP-00236", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_DUPLICATE_MOVE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00236/manifest.json", + "sha256": "8445ead3aefd6f7c5cffd4c8ae0977b6f754d4dd95b332956637051f7cb81518" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00237-operator-armature.duplicate_move.blend", + "sha256": "18332d833556dc395719a7badd2c2fe0f5630fa1f9b809399ae0ebb4edf47f19" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00237.py", + "sha256": "2345158899b35752b6875a28a243668369c51a087eef596eb420e603f0393a75" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-duplicate-move-desktop.py", + "sha256": "32d82956a3c5fba3cb844ce37a3eb174124a1b25fd7c958578c9a97a5138e1a6" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00237/armature-duplicate-move-desktop-report.json", + "sha256": "94745cd286e017a11dd6fd8df308a22e4d4b5e572bbc3115ee8bbac5fa430bea" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00237/armature-duplicate-move-local-exact-report.json", + "sha256": "3b99961a3aaf2e61d64aa6c9ac9c76e9c5db72e2b5bf14887f613d1bb0723ff9" + }, + "status": { + "path": "docs/status/M16-GAP-00237.md", + "sha256": "9f3084ee5e5e0c6c195f71590e51e8294790164272a4592e8cb60982fc037ad1" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00237/task-context.json", + "sha256": "553e1d6a385d20840eed34b7617b3496e7bded0fdccdb2b68e1ea61228bcbb80" + } + }, + "nextTask": "M16-GAP-00238", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "e20281eeb40ad088e1dd3da40324fa171481455ff399842a5251fb29d4f5e50c", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "d190501da90ca93805997120c80833a5730928e73ae1eaa36389d72300688abe", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00238/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00238/manifest.json new file mode 100644 index 00000000..9449fbb2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00238/manifest.json @@ -0,0 +1,99 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00238", + "parentTask": "M16-GAP-00237", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_DUPLICATE_RENAME_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00237/manifest.json", + "sha256": "9cf9d53b83b566e2d2d02c61907c8b58b5b4dba6e2739411d5b960de60ac0a48" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00238-operator-armature.duplicate_rename.blend", + "sha256": "95b9236be44ca3e40482203032ce2fe14a8ba79f5d94396d9fa7af2ab5b711d1" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00238.py", + "sha256": "dd00c6d9952cc91579c298a700c1698e1bfbe55542400bb694c6ea3c9b79bf5d" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-duplicate-rename-desktop.py", + "sha256": "1eadb6c273b4bc77f6c3df9f0060a361c6da2e95b84341ac2173a749f4b72d07" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00238/armature-duplicate-rename-desktop-report.json", + "sha256": "90a4d915eb9967f97495ede7b6f855d2049ea1059208b99e75128d79e7f51911" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00238/armature-duplicate-rename-local-exact-report.json", + "sha256": "f3e103b6c1a311bfeaad31c96066060519b091b3ae14c925a3d18e89e6ba8d2a" + }, + "status": { + "path": "docs/status/M16-GAP-00238.md", + "sha256": "a0cd13391e19a1b3acb3e84608cccc9805b0e11b9c7c791a94b3f47731381077" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00238/task-context.json", + "sha256": "5f58af69bdf6921fa2e46c229206c3a26ff737a9f04ad3602ba46e80061169cd" + } + }, + "nextTask": "M16-GAP-00239", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "4b5fc80f117580e52543a1811ebc59bb9ef408d5db9140258f715e05bed26be1", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "d190501da90ca93805997120c80833a5730928e73ae1eaa36389d72300688abe", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00239/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00239/manifest.json new file mode 100644 index 00000000..e64b50b9 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00239/manifest.json @@ -0,0 +1,99 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00239", + "parentTask": "M16-GAP-00238", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_EXTRUDE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00238/manifest.json", + "sha256": "5d35528b7d6e923626ead34f2120a0c69fad8385621780bfb06ea80fd287a990" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00239-operator-armature.extrude.blend", + "sha256": "f4b86c585af6349dc43c50e23c93a482917145ba0b5bbd9ab3f8a7cf5018e661" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00239.py", + "sha256": "651deeb3808998b44611bcecdfab9adc903245f53b66f521fad03443b900e047" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-extrude-desktop.py", + "sha256": "066e1851024ebedcec78e4e3962516ce8c43ae87ef87522d7acc8b6ca1f49a4d" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00239/armature-extrude-desktop-report.json", + "sha256": "3f264c22cc013676e33e82b98458a5baff8703addaaee26812ed2205aa062fed" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00239/armature-extrude-local-exact-report.json", + "sha256": "524adb7be53d523d48f87773d6782bd78db1e81eb6d88c6eba3641ff283e5269" + }, + "status": { + "path": "docs/status/M16-GAP-00239.md", + "sha256": "06f69cd41bf79caf33eeb65b3ee0a14dca930bfac46984ce2b2b3c01a53218d7" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00239/task-context.json", + "sha256": "ef9bc0d189399baae95fef4e518ed6997c26b21ade00d4cda06ff1b086a57cfb" + } + }, + "nextTask": "M16-GAP-00240", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "eb246622b1ba205424ae7b6e964dba11340013a7a73a7e7667028d7ee91c6113", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "d190501da90ca93805997120c80833a5730928e73ae1eaa36389d72300688abe", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00240/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00240/manifest.json new file mode 100644 index 00000000..239343c5 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00240/manifest.json @@ -0,0 +1,99 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00240", + "parentTask": "M16-GAP-00239", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_EXTRUDE_FORKED_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00239/manifest.json", + "sha256": "558907921bfe14ddb6f93ff89f0dd88f950e537c6f1a9c4c2e5b9fc0e47d3d81" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00240-operator-armature.extrude_forked.blend", + "sha256": "bf0a7def9d8ff9c30218d5f11a23f533b777bfb02e35b1bf87f0c9a285af637f" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00240.py", + "sha256": "586f9ed3d865bf4ca759b36d010013ba33a34ff8862578c65b25acc9f53a4a69" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-extrude-forked-desktop.py", + "sha256": "cd13871abd4e28e9230388693209bbeb7d3b8f1e9daf99d3df09c9071bc9930a" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00240/armature-extrude-forked-desktop-report.json", + "sha256": "37ca8eb97c454cc572f70143aa98f01cba23190ea889bce7b688529d415945a4" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00240/armature-extrude-forked-local-exact-report.json", + "sha256": "957d36b2188d063415a2dcb70995bacddfeac01152872cf06ae27bba941a3ce6" + }, + "status": { + "path": "docs/status/M16-GAP-00240.md", + "sha256": "e50e0e1f6cbbbe7ca87686fa32b554bd1e9027452139638c055966cfad1a0b35" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00240/task-context.json", + "sha256": "3756f32ea6e1bf3b36c5480563a90e004f9a8e0836e18aeaa9f3e7b5d7abc545" + } + }, + "nextTask": "M16-GAP-00241", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "f1ed4780038d37d9263a2282af25cee5ab2aa6207922c4c04dcf88c6d1ddd209", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "d190501da90ca93805997120c80833a5730928e73ae1eaa36389d72300688abe", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00241/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00241/manifest.json new file mode 100644 index 00000000..f3660c0a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00241/manifest.json @@ -0,0 +1,99 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00241", + "parentTask": "M16-GAP-00240", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_EXTRUDE_MOVE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00240/manifest.json", + "sha256": "3301ff54213d32531d2151a92b67e0efef3b9a577d36e1171c41b7b618c15c11" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00241-operator-armature.extrude_move.blend", + "sha256": "3959f29bfef358c9a7f10720605b9706bf03830f18ae713e4409b6396b3ea18c" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00241.py", + "sha256": "ba7a8fb5d46dc073f2e93180534340008d9f35824bdcbe829ede880015061a08" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-extrude-move-desktop.py", + "sha256": "9e1496c7022f9e70ade8cb937a815a7a0f0d3db9679d39b4b14b3e9cfae4bf85" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00241/armature-extrude-move-desktop-report.json", + "sha256": "a24fb58e990504c5bd8a8d7a2d010f16028e070f099137bb26e5a2769a7fcc38" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00241/armature-extrude-move-local-exact-report.json", + "sha256": "05293986bab59aed5d1629d9a9e28c3499db619b33294f6f5d7557a463bfc001" + }, + "status": { + "path": "docs/status/M16-GAP-00241.md", + "sha256": "3a467ab859b73c7ebd3258c6f15f15ba2db2b197c8bf4a2441d7bcfdac26e06c" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00241/task-context.json", + "sha256": "ddbe88064be8649f792d2c731a9269ccb3eabe35a08430e613ca8cba0b25ddbb" + } + }, + "nextTask": "M16-GAP-00242", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "f7a3fb5f2deef8c36547157e005f71ead700cf187cead8ad0003c462098bac44", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "d190501da90ca93805997120c80833a5730928e73ae1eaa36389d72300688abe", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00242/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00242/manifest.json new file mode 100644 index 00000000..c6304ceb --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00242/manifest.json @@ -0,0 +1,99 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00242", + "parentTask": "M16-GAP-00241", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_FILL_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00241/manifest.json", + "sha256": "d1cb4558aff9635c73c9b46d39915482d9e9d78b0ac56d3b64783fc0beb1812d" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00242-operator-armature.fill.blend", + "sha256": "b7f20bcc4f7a6045bc38fdec9394872e399a55f3de9e4081b40dde3b911d770d" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00242.py", + "sha256": "0e2b56d0020066bcd69d7ee4970c4eaaf3f3cdf02a9f528903997246b3a9ea48" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-fill-desktop.py", + "sha256": "fa8f3e577dd5b3924f8266509346f1c459a45bc62ac597926b412a962c4a9017" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00242/armature-fill-desktop-report.json", + "sha256": "39f5db8f1a77e188ef3d4c3084c9bcf961551767211b40f006499a66ad51f56f" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00242/armature-fill-local-exact-report.json", + "sha256": "f4d927d1e6a10c9db3bd0b6a32b771aa96a25af9f9a5ab4a01741932173a293a" + }, + "status": { + "path": "docs/status/M16-GAP-00242.md", + "sha256": "fb18cd303bcd1455f363897d6e2d34320a81156c1a096ec6ca0560e3f59e3cbb" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00242/task-context.json", + "sha256": "59d07c1a9a8151af3b530ca1e6ffa56b0747ce67637ac9851c94c63e70b0ded8" + } + }, + "nextTask": "M16-GAP-00243", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "09da6257d1becbe2d1b7b6704286bf9684075b0d860a4d2c436eafe2ec4ab883", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "d190501da90ca93805997120c80833a5730928e73ae1eaa36389d72300688abe", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00243/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00243/manifest.json new file mode 100644 index 00000000..75660690 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00243/manifest.json @@ -0,0 +1,99 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00243", + "parentTask": "M16-GAP-00242", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_FLIP_NAMES_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00242/manifest.json", + "sha256": "1de876070dab2ce6cebb4d42845735f712de45219c3f0b6da22e8a42518841ef" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00243-operator-armature.flip_names.blend", + "sha256": "b21a9ececf220be55c9d17d99c7fcbb0fe43b2fea6ffac88eb4eb34be1ebb5ba" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00243.py", + "sha256": "444c10dac8003527409024263844587d5c7b6d1cec495fc8e408b6af14e60fde" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-flip-names-desktop.py", + "sha256": "5b3bc16b1fdfed70b6be9ca37ee1c949ce02129f4d396216f70edc022ba1082a" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00243/armature-flip-names-desktop-report.json", + "sha256": "489a05e88b2f35bfa0c910623db17897d70041afbbeecd2ad6575997c62d5a7f" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00243/armature-flip-names-local-exact-report.json", + "sha256": "e3a6efe370d43e0d05e4668994c70dade862aec0f45b50978558d3468e022d93" + }, + "status": { + "path": "docs/status/M16-GAP-00243.md", + "sha256": "3fa12d4941b7ea5131682f3727020b2bd45bb6ddd15368d42bb723002e1c9e2d" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00243/task-context.json", + "sha256": "c71f199a41f023b1724f3075c1755b509f014918cbd27937779323e4d6d16974" + } + }, + "nextTask": "M16-GAP-00244", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "6a3158c95a0d434a904ff08d2b11224990ba2c56c9f9f92648a20ef04f98b863", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "d190501da90ca93805997120c80833a5730928e73ae1eaa36389d72300688abe", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00244/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00244/manifest.json new file mode 100644 index 00000000..589d8ec4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00244/manifest.json @@ -0,0 +1,99 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00244", + "parentTask": "M16-GAP-00243", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_HIDE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00243/manifest.json", + "sha256": "1a794c9171bf53a620cdb7679fb26ef76095199a990e832e70189b1185e53355" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00244-operator-armature.hide.blend", + "sha256": "1a3486ca531e5f679886228539fc841d5afc7c9eb7315fb0d5f31061d5f26aa4" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00244.py", + "sha256": "848e43152c5035fc40d6ffafa566dbcbf4a7940d32fbd75a7d696321d125c938" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-hide-desktop.py", + "sha256": "455d76e6dbd6100f9a33a517a31232605f3d878d165e5938a6aae50682d1fc9c" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00244/armature-hide-desktop-report.json", + "sha256": "382b6abd52f5d54e519690cc3760fc5cddf1db2516abe8fe3e2acfedb500ed83" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00244/armature-hide-local-exact-report.json", + "sha256": "295134cdf0ed210c1eebdb166ad3251dd47234ff4b23e084a6c6f4e26e8615ea" + }, + "status": { + "path": "docs/status/M16-GAP-00244.md", + "sha256": "efdfd1529460078ff569106961bd018f6ae75a3d9aa17da816639448268be17a" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00244/task-context.json", + "sha256": "4103d8304ec404adcd995b030bd6f266d76971fd91068159fb8b7686106fc738" + } + }, + "nextTask": "M16-GAP-00245", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "1717ac61ffc9fdc25332a8c08fa63be082c93fe4c27b29e55ec18f360c471039", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "36ee1c408362b365d14f0d6c96a505796506a2fb50ec85dcdb06cd64f1d68e0c", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "f0dada634e8aaf84f645f39a4ffeb649b71c691999ee6b7a0c15c4abcf3884d9", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "f0dada634e8aaf84f645f39a4ffeb649b71c691999ee6b7a0c15c4abcf3884d9", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00245/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00245/manifest.json new file mode 100644 index 00000000..a736e470 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00245/manifest.json @@ -0,0 +1,99 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00245", + "parentTask": "M16-GAP-00244", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_MOVE_TO_COLLECTION_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00244/manifest.json", + "sha256": "8a9113af05264d62c71c478ae8dfde62155e64cf2fa5bda32f16256f7df6bd59" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00245-operator-armature.move_to_collection.blend", + "sha256": "81ce010acf7df4374101651e498eb1ef4fdbd31aa79e395fcab17667cea2d6ad" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00245.py", + "sha256": "9a7de621f6e88acc93d19697d4a3db5223943318e70e4561983fd989cf120aa3" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-move-to-collection-desktop.py", + "sha256": "d70bbd2d42be0c4f95dc2fcc683daaad5d1eb2e71240dc8025dec2133f2d42dc" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00245/armature-move-to-collection-desktop-report.json", + "sha256": "26ba97ec93b9e190d06dc912b8b441eb14c49d3a409ae2635aba0adc8dfa6f9b" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00245/armature-move-to-collection-local-exact-report.json", + "sha256": "d898f1ffaa59f14b7a92e88d90413d0b3c200548ee5288342938f3803077e186" + }, + "status": { + "path": "docs/status/M16-GAP-00245.md", + "sha256": "bad2709c02906d0e84d1771308245f3c2e3d52b3b9436719efd3d47155c0eae0" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00245/task-context.json", + "sha256": "a0e24448ada6a6649940caca0934e6cac7783f5e486efeb73baa352874e971c0" + } + }, + "nextTask": "M16-GAP-00246", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "9a91d6de90a958161d66a11491a72059cd607077fdc58e51b6a8f5f8113bb82e", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "36ee1c408362b365d14f0d6c96a505796506a2fb50ec85dcdb06cd64f1d68e0c", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "f0dada634e8aaf84f645f39a4ffeb649b71c691999ee6b7a0c15c4abcf3884d9", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "f0dada634e8aaf84f645f39a4ffeb649b71c691999ee6b7a0c15c4abcf3884d9", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00246/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00246/manifest.json new file mode 100644 index 00000000..995ba492 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00246/manifest.json @@ -0,0 +1,99 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00246", + "parentTask": "M16-GAP-00245", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_PARENT_CLEAR_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00245/manifest.json", + "sha256": "4b5876e4b5058907a06ab54907f96be1d2f887b3495e696093ee015c084bb4a8" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00246-operator-armature.parent_clear.blend", + "sha256": "c6b8c2871a84389b732ff63c320e1e6543e832f69a89aa7af8cd0049fbee82f2" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00246.py", + "sha256": "2d2f7b43517d2b39a44f6a2606ecf932925f31b6896c01a657ce2dfe8008e703" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-parent-clear-desktop.py", + "sha256": "14c76e67447509588d74055eb26dd12401b3608fac335bf732a09980a2d6c443" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00246/armature-parent-clear-desktop-report.json", + "sha256": "e59a8594cbc6f313ac9651706575eeabd2d58fb2520eafdf825c5a467a2d9b7a" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00246/armature-parent-clear-local-exact-report.json", + "sha256": "3e89fd698b0a8d118b0dcfb428f957ad7cc051e5a7a5b898cf90f49c996080a2" + }, + "status": { + "path": "docs/status/M16-GAP-00246.md", + "sha256": "5cc88cc19daa3fe9ad1a50f568d0d482c71c8b535a2e8bf024625bc7d9ca4592" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00246/task-context.json", + "sha256": "bc87cb6e78492af2c7c31afa6da9ea79e919ecdc793d7a720b1fa6127df6fc93" + } + }, + "nextTask": "M16-GAP-00247", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "36805990a46f98cec41d15e6a81168213eb7830f7255705705591060344cdee3", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "36ee1c408362b365d14f0d6c96a505796506a2fb50ec85dcdb06cd64f1d68e0c", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "f0dada634e8aaf84f645f39a4ffeb649b71c691999ee6b7a0c15c4abcf3884d9", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "f0dada634e8aaf84f645f39a4ffeb649b71c691999ee6b7a0c15c4abcf3884d9", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00247/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00247/manifest.json new file mode 100644 index 00000000..f02c8364 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00247/manifest.json @@ -0,0 +1,99 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00247", + "parentTask": "M16-GAP-00246", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_PARENT_SET_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00246/manifest.json", + "sha256": "39e5586ea4faa434cb83fb7d0c78e9e5bbb5b7b3485b76198ddd9279a5615fc0" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00247-operator-armature.parent_set.blend", + "sha256": "227b3294c94147755638a6542955fd7a57ad2a6e6a7464bed2509eb7a5ab6b19" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00247.py", + "sha256": "1767464c3c6a2a24207c56bb59fecfd20f49ef7b83055716b209de354a04ff5d" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-parent-set-desktop.py", + "sha256": "ced6127b73540a64f95327103cea846d95b3da829a41b64e66de6e160ff2d7cb" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00247/armature-parent-set-desktop-report.json", + "sha256": "c2348f9a4e51030006f9c1a2756f016e2c454d957a952e2d07a2948dabba9f4a" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00247/armature-parent-set-local-exact-report.json", + "sha256": "ed5125f71cbe8af51244c5bc8798b2d0722d3272a331b9999ba22f5606926139" + }, + "status": { + "path": "docs/status/M16-GAP-00247.md", + "sha256": "26711b27363845b086c413d07119622c93ef468f28f412576842b1f809f6b5b6" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00247/task-context.json", + "sha256": "63cae595ebf9ce8be4b1d02e48e6130371978eaae49133e5da24b87dfcca7b53" + } + }, + "nextTask": "M16-GAP-00248", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "65d133091a56490376a7919befbdffe0be73893386ab121e89683bf6388d5f5a", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "0c39ec01b1e5c828f563a60ea1416fc95bbb2645dbe8d541242fbc23ce1b1deb", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "95c948f8b4fe59c299a0fe0f8454140fa4aacc8fdf41f2872317e8f5e0861e0c", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "95c948f8b4fe59c299a0fe0f8454140fa4aacc8fdf41f2872317e8f5e0861e0c", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00248/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00248/manifest.json new file mode 100644 index 00000000..d9adf8a6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00248/manifest.json @@ -0,0 +1,99 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00248", + "parentTask": "M16-GAP-00247", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_REVEAL_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00247/manifest.json", + "sha256": "67a3b226b8c4d1449d7b655a5d019fff0c374fd63eee65041ea171ae4c6e92e6" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00248-operator-armature.reveal.blend", + "sha256": "5f1ee7176f2d030247abb278a66f79cc6b7fc49fd6650b2dba7cc349e2b0aedb" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00248.py", + "sha256": "8fac586cf7c3f54822111df0c88151797e68af0283e39f075dd9cd70d080ed93" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-reveal-desktop.py", + "sha256": "06564434a76ea6670110e916f73efdec46238cc1b2c8e1aa3d1c893b8089331d" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00248/armature-reveal-desktop-report.json", + "sha256": "7f972847f4646f54f02e2e25efefd993c083c0be15ed18c2b570640bc314059a" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00248/armature-reveal-local-exact-report.json", + "sha256": "35ca506d64f000444107c2a6da1b8a7074204c415dc6d4ea4afc9492aeb57209" + }, + "status": { + "path": "docs/status/M16-GAP-00248.md", + "sha256": "fb619f3dabf2d6f3593417893901d0eac7d73ccab4b836ba1824834bf6d46a95" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00248/task-context.json", + "sha256": "db45073631709d276137b75c98057adc5b96605f45b929c42067333b9607cade" + } + }, + "nextTask": "M16-GAP-00249", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "098891e1d53e13ab172fde7122e6dbc462c9401a03b60cf9caec1795357591ad", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "0c39ec01b1e5c828f563a60ea1416fc95bbb2645dbe8d541242fbc23ce1b1deb", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "95c948f8b4fe59c299a0fe0f8454140fa4aacc8fdf41f2872317e8f5e0861e0c", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "95c948f8b4fe59c299a0fe0f8454140fa4aacc8fdf41f2872317e8f5e0861e0c", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00249/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00249/manifest.json new file mode 100644 index 00000000..3bc42e3c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00249/manifest.json @@ -0,0 +1,99 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00249", + "parentTask": "M16-GAP-00248", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_ROLL_CLEAR_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00248/manifest.json", + "sha256": "e45b54186a20a2432423a0ae345345b7af8d83a958d5937efb332b1d59d4607f" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00249-operator-armature.roll_clear.blend", + "sha256": "74c3bebdac81def2d5dad922854b06c1c0b112154605a955628754bf5eb3cef7" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00249.py", + "sha256": "38b8b84ca841093bff16caf3aa8b10e8f033f16649f58c7b77292b34fb94c08e" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-roll-clear-desktop.py", + "sha256": "c5f507c1601fd4fe026f37b4c720a684881a01272eb92fd663dfb2ec2d43057b" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00249/armature-roll-clear-desktop-report.json", + "sha256": "d4961663044d04bed11d79948c12d7672d541da799cc519a7e0043023fd0540a" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00249/armature-roll-clear-local-exact-report.json", + "sha256": "60aff7413075c183ce0f8c443784b01cbb57343463588185c5f1839636e07ee6" + }, + "status": { + "path": "docs/status/M16-GAP-00249.md", + "sha256": "99656df59b260315621efa7792d2e4eaee6709ff434058d848c86b6b9a674771" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00249/task-context.json", + "sha256": "ca58f30a8476e7f61c6b3dec4d2225582cfcb9f4af454b62a42a48d2449ed74b" + } + }, + "nextTask": "M16-GAP-00250", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "57175a270c225e15af11e2f31a814f924c1902ceeede7b1e2bd6a7e98ad2781c", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "0c39ec01b1e5c828f563a60ea1416fc95bbb2645dbe8d541242fbc23ce1b1deb", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "95c948f8b4fe59c299a0fe0f8454140fa4aacc8fdf41f2872317e8f5e0861e0c", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "95c948f8b4fe59c299a0fe0f8454140fa4aacc8fdf41f2872317e8f5e0861e0c", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00250/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00250/manifest.json new file mode 100644 index 00000000..9ee0583c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00250/manifest.json @@ -0,0 +1,99 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00250", + "parentTask": "M16-GAP-00249", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_SELECT_ALL_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00249/manifest.json", + "sha256": "50e0101c306390090c8ff008897450c5b0034428a6b4f06e53c340887a202562" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00250-operator-armature.select_all.blend", + "sha256": "5a271a11ec041966bbdb02724d632b1a1ec4db2207038fdbf3fffbd8c3d6de8d" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00250.py", + "sha256": "fd1e6bca22e8b9e29cdaee6d7df3b561d7b1cfaff4d8ac96e9a7b807a8940e8f" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-select-all-desktop.py", + "sha256": "3dff6a053b4a497ed19b67b6e0d38958abd6f34c603b994a8eb59323f4ab95e5" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00250/armature-select-all-desktop-report.json", + "sha256": "0d68d0d0b4f3880339f29ef467bc7ab241623bdf3422ca83c53b49efec5e7295" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00250/armature-select-all-local-exact-report.json", + "sha256": "e8d922dde3d8401c79adc75621523ee3441a4d97f74416816e2f2209083297b2" + }, + "status": { + "path": "docs/status/M16-GAP-00250.md", + "sha256": "dcc9e9890aa1e9bf5df7f2c91155c98fcce954896258cad6b2b4778048e502d2" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00250/task-context.json", + "sha256": "75f8b5a9a167a179607417792bf5520b1cbb4c0eec5e665be7769c65265554d5" + } + }, + "nextTask": "M16-GAP-00251", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "5a7f84720576f50aac4f862677f471c0ef92c20943003a0c6d192d8852757573", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "originalSha256": "0c39ec01b1e5c828f563a60ea1416fc95bbb2645dbe8d541242fbc23ce1b1deb", + "resignedSha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "originalSha256": "95c948f8b4fe59c299a0fe0f8454140fa4aacc8fdf41f2872317e8f5e0861e0c", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "originalSha256": "95c948f8b4fe59c299a0fe0f8454140fa4aacc8fdf41f2872317e8f5e0861e0c", + "resignedSha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00251/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00251/manifest.json new file mode 100644 index 00000000..d8ebdb69 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00251/manifest.json @@ -0,0 +1,84 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00251", + "parentTask": "M16-GAP-00250", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_SELECT_HIERARCHY_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00250/manifest.json", + "sha256": "2d4aafbf8effc7327cf16e2e1b040bf56f78af4024745e97f9728d8a0ce5963e" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00251-operator-armature.select_hierarchy.blend", + "sha256": "527167dc4d5c40e18196b8b63818373494bf28efd9592ce1ee28b790aecad9c4" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00251.py", + "sha256": "a6eda558d5ca8f973a6cebaba1160453c6ca5a9dec3b47cb05f89dca31f31d86" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-select-hierarchy-desktop.py", + "sha256": "f6d261b067815d740a7e39aa8c8a8ae6d605b675c6ba2a144eaab65d104840ae" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00251/armature-select-hierarchy-desktop-report.json", + "sha256": "8d57e6ce5bc33f6e87eaba09ffb411bf68b752a4729438de9f78063f7354c092" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00251/armature-select-hierarchy-local-exact-report.json", + "sha256": "4d36c680a2947be8c29e076849d3d4ec8ad2a2c1a2ccf9e7330b311c0d4be5ac" + }, + "status": { + "path": "docs/status/M16-GAP-00251.md", + "sha256": "67e04c31b88c5821592269c0f629dce00cf675bef9bb0879dd78d6818127f92d" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00251/task-context.json", + "sha256": "a8e92d107ef3e012f2d0321a00b7c55c9475848346488de1804645c238618ca5" + } + }, + "nextTask": "M16-GAP-00252", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "6da2d07715ff0405b6908dd163d1bd868d947665d374741038750f7561c9cf4e", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00252/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00252/manifest.json new file mode 100644 index 00000000..748c1f7e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00252/manifest.json @@ -0,0 +1,84 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00252", + "parentTask": "M16-GAP-00251", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_SELECT_LESS_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00251/manifest.json", + "sha256": "680d7d2fa6bda6d45226f71d1e1ee8986583c20e38c4ac5306625179d070bab7" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00252-operator-armature.select_less.blend", + "sha256": "6c10d6a2bfb01565d415740efcb5366433cf1ddc722392605530769e6a8f729b" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00252.py", + "sha256": "8d394493b9b2a43fe98a666d6eaef5f1facf699d5063ba82a8b3ff461037715f" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-select-less-desktop.py", + "sha256": "ebe6ff995d37310dd1f726246e0c3627960b75c6b506b181286742829ec4423b" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00252/armature-select-less-desktop-report.json", + "sha256": "a7cb4e98fbf96079ef88c8de7491a43e611e1c759525d7bffdef785cadf458f7" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00252/armature-select-less-local-exact-report.json", + "sha256": "5e9743ec56f672990fca63850abe1abd567c6c0488926be44a00dd6295b96c39" + }, + "status": { + "path": "docs/status/M16-GAP-00252.md", + "sha256": "3a8cf46d4f0b5efae6dfbdef3ef8ce808dd603d3a80146b15f0b2f95dabfa302" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00252/task-context.json", + "sha256": "ea27cc467ccdccd6292bd5e76f1ecbabfe0ddcbb553335684b8512ff207db7a2" + } + }, + "nextTask": "M16-GAP-00253", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "939a88c043aa3c6252384cfe14eddaa4dd01da2b2bfa3e2d413f1e4237eb4423", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00253/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00253/manifest.json new file mode 100644 index 00000000..d229315d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00253/manifest.json @@ -0,0 +1,84 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00253", + "parentTask": "M16-GAP-00252", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_SELECT_LINKED_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00252/manifest.json", + "sha256": "c7abf03119f5557abd6c19d76ae0d1bde2946d034095046eb69d0f76cf4c8cbf" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00253-operator-armature.select_linked.blend", + "sha256": "dfc4b49ad0c1165e771368b99c7cf589890586ea4f6b142aa319a42ad9390316" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00253.py", + "sha256": "d64e0a3681f8501775ecb6fafafec3fba567b42c10fbcda3507624560ddb05fa" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-select-linked-desktop.py", + "sha256": "99901e2c2a744563c9fff9105244cd07368b6ed0cc52c6c1c94eb65c3e964ac5" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00253/armature-select-linked-desktop-report.json", + "sha256": "3a2b4e82aeaa2fdea3ae01df802c8de371f184dc0b018cc1c16d2349d19b9fa3" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00253/armature-select-linked-local-exact-report.json", + "sha256": "d184c248dd13878698f5b973331bbe7d65cde2defa697f22e4c05df9a433b42a" + }, + "status": { + "path": "docs/status/M16-GAP-00253.md", + "sha256": "e6627177fb89e16a7c18efddf495d46e01a0d1d70d14f324813a05dc5c9fdb6f" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00253/task-context.json", + "sha256": "94c2ded148413fd67032d63cdcdcdf5b332cd99569b02804e3a743471fb3cda9" + } + }, + "nextTask": "M16-GAP-00254", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "9b03d502ca9ef28f88c595b0d7fdd9d29c44288c7c5d7b2dc1bf8273dd19cde9", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00254/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00254/manifest.json new file mode 100644 index 00000000..74107989 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00254/manifest.json @@ -0,0 +1,84 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00254", + "parentTask": "M16-GAP-00253", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_SELECT_LINKED_PICK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00253/manifest.json", + "sha256": "c18022062e68fc4ddaee81a39b6dc766253f0e1c36f2e5d81941935e3783669b" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00254-operator-armature.select_linked_pick.blend", + "sha256": "10e4053f9aea2a2cad6314e3ab4d981db9bc4281933c1172ad77247f4c6500fd" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00254.py", + "sha256": "f08a4362f6bfbbdd8eeeac7e9961613f21450b64fcf5138fd2674515c97229af" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-select-linked-pick-desktop.py", + "sha256": "8909666d24df353cf64f225b857a1ccc48c460320df52e385f69c8e13200d686" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00254/armature-select-linked-pick-desktop-report.json", + "sha256": "1338c391ecabbb35166c5df8e36a8a0f5b65deca3994f7c2ee1d799b564906d0" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00254/armature-select-linked-pick-local-exact-report.json", + "sha256": "14560b0b43aa917fa31fe8c9023992285313204c858d7260da22347a8696b9bb" + }, + "status": { + "path": "docs/status/M16-GAP-00254.md", + "sha256": "711b0fb2e6dbbc12a25d1c5ad19ea3a3085d9b7fbfac45ef633735053479dc19" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00254/task-context.json", + "sha256": "dc292fe37486b022284f46739ad523b5a6ee406157a325aa855411ee3e24c3f6" + } + }, + "nextTask": "M16-GAP-00255", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "432e513cde8bdbcb28a1adf66ff410497d8a0425592bc5e2326d25dbea488d78", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00255/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00255/manifest.json new file mode 100644 index 00000000..21922b04 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00255/manifest.json @@ -0,0 +1,84 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00255", + "parentTask": "M16-GAP-00254", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_SELECT_MIRROR_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00254/manifest.json", + "sha256": "886c93f9af231c7ce040524d31758c41d38fa377d00da2056d5a299a18034f0a" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00255-operator-armature.select_mirror.blend", + "sha256": "af187a9ffb0c6b8f422fd0da0896699dcde8209c8d5d6fbf807ba72cc4a64abb" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00255.py", + "sha256": "19e723cd74e3e0adad28ed2feaec157ae4725f88e4863457c91ab0b9aac4ade3" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-select-mirror-desktop.py", + "sha256": "21a152a785b6bdb794c6488685cdebf3ce27c3573b3f46e38002c8be0bd0fc43" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00255/armature-select-mirror-desktop-report.json", + "sha256": "d5b76fb51060be4e1b56e81d238d74df4556b09ceae84dcb0f9c545dfa1bf35f" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00255/armature-select-mirror-local-exact-report.json", + "sha256": "e87ab4016b6ef049c7ed7177d9dee54d44dbcb88d5bbab6f0dbefddadce6b48c" + }, + "status": { + "path": "docs/status/M16-GAP-00255.md", + "sha256": "0dba82e5720f86c24fc442bb14472d1f2a14929df2652566d0b0bf0db7ef101b" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00255/task-context.json", + "sha256": "1072a60c75f9ba38bbef954deeda027e2906ce86485b94b7a0315409aabd682a" + } + }, + "nextTask": "M16-GAP-00256", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "a3b541b0e24e13be55fc45baf19c193f49b1a273a1ae926cc200c9638e89a5d0", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00256/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00256/manifest.json new file mode 100644 index 00000000..0db0e220 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00256/manifest.json @@ -0,0 +1,84 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00256", + "parentTask": "M16-GAP-00255", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_SELECT_MORE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00255/manifest.json", + "sha256": "19f955e47b59acbee94de0c844ce9272912b1b8e08d2e2e10a6a03c961a090be" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00256-operator-armature.select_more.blend", + "sha256": "7acc23a6cf8bf14d13c3e1571106d62e3ddf8fcfd6af910009da833672ec6242" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00256.py", + "sha256": "2e644c7207d74ac4a1e3e9c9163af7dd823b155622e2caacb4cdf6f47b7a49c1" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-select-more-desktop.py", + "sha256": "dfd686370601ddd0d43ba0434e7d9fde5ff80d12170f423d571f5344f281fc56" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00256/armature-select-more-desktop-report.json", + "sha256": "76c4cbf93b70f19535b1e4b2f9b580ca6803da03ac3c7aeafa4523fca6a24baf" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00256/armature-select-more-local-exact-report.json", + "sha256": "d091f0032c51091e234da5ff0c931855cb1491dd86d9cd51ef0fc2e7143e9017" + }, + "status": { + "path": "docs/status/M16-GAP-00256.md", + "sha256": "cd01bfc800c3e3f8931793179a8c73070318f49129f36c9d62cfebef36dc6134" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00256/task-context.json", + "sha256": "03b45f7ec25e3cf1c82806959ab14a1b678ab66d47e05ce9d2f11ddec004871a" + } + }, + "nextTask": "M16-GAP-00257", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "6905ab6353bed833ff68c198cd639862d854ad12dfaf0e72edb195470b488c50", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00257/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00257/manifest.json new file mode 100644 index 00000000..8abef968 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00257/manifest.json @@ -0,0 +1,84 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00257", + "parentTask": "M16-GAP-00256", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_SELECT_SIMILAR_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00256/manifest.json", + "sha256": "c028d7cabda7dc400b72d70323b54a1a7ab49e825fb5abaf9f130f5d179d9ac5" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00257-operator-armature.select_similar.blend", + "sha256": "72ed76cd6970d683de6c528a653e8279bdeec13f8f1a4a2e8bc9c8b2f63cf94b" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00257.py", + "sha256": "eca6a8b77191833657b65e86c190c6d4942df4b560cb57a86a0aafcad26566c1" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-select-similar-desktop.py", + "sha256": "62d26209267be4d01cb079f467b4027623cea284b894787029199188e486e25a" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00257/armature-select-similar-desktop-report.json", + "sha256": "22cdd9b6ce61fedfda0b76fcedb0c122176d4e17c5ca7ae06277d221ef1ac22e" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00257/armature-select-similar-local-exact-report.json", + "sha256": "cc8a91b14a765d9643289230ca8e38800cabcecc74883845b8e06087f528be4c" + }, + "status": { + "path": "docs/status/M16-GAP-00257.md", + "sha256": "6da68ce35f3ff17a22f5f5378c503304fe8e28ab65a73ff0eae35125c94600d1" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00257/task-context.json", + "sha256": "9464e6917cbd8e532889f70781049e38e5131f841c3c638bdf6a6f0342f35429" + } + }, + "nextTask": "M16-GAP-00258", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "a291ff0f2f64d8fb413ece65b5f88289f5a878e91f2a3e2c7cfaf1b9dbdcd833", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00258/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00258/manifest.json new file mode 100644 index 00000000..fc98d228 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00258/manifest.json @@ -0,0 +1,84 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00258", + "parentTask": "M16-GAP-00257", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_SEPARATE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00257/manifest.json", + "sha256": "5a0a58c9b0578f0e19cd799df1d12d2c73c01c20bd718fa5318f2f1d91083247" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00258-operator-armature.separate.blend", + "sha256": "e995623dfaf3e5a34b4843beb5291f82144501d7a6f0b53a4ffada844440d269" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00258.py", + "sha256": "5b4a7669e1232b981973a7317ff946fde216854b10eee36a7adee5b707f8d00f" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-separate-desktop.py", + "sha256": "586bcf4a9b34e7e1ed87e78af45011b0c004aa9dcea063d03c6fafe968f8e689" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00258/armature-separate-desktop-report.json", + "sha256": "8226ce041d7bd04dc31d93e01537bd8a598886fdfc1feaa36e3d98910007e720" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00258/armature-separate-local-exact-report.json", + "sha256": "4cefec2f7519e0a3e23eed6ba3e199760ed46f6af0cbe36b48932270211ea3b4" + }, + "status": { + "path": "docs/status/M16-GAP-00258.md", + "sha256": "d4d7b7a215c7acd495971e9dbe1c41bc5ee500d7f9f1f02c4ce0c6241a7edd58" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00258/task-context.json", + "sha256": "6261d1f9cc72a6cf1129913f10efee4898da9c1bb7b8ca264d255d3835043572" + } + }, + "nextTask": "M16-GAP-00259", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "2cd2468608362a4b480aeff74f8d1bd5650b3588e35b4413eef0724fc6c967e0", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00259/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00259/manifest.json new file mode 100644 index 00000000..5c0fb432 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00259/manifest.json @@ -0,0 +1,84 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00259", + "parentTask": "M16-GAP-00258", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_SHORTEST_PATH_PICK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00258/manifest.json", + "sha256": "ee0d35662c2b66847381b4865a83b80df243bf47cc4e8f4f16232a93fc23c900" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00259-operator-armature.shortest_path_pick.blend", + "sha256": "3b213642cef60cdc96fed3e14846125b06ca80b53d89fdb3a08c3c60f7a454c6" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00259.py", + "sha256": "1fd82486ed5774b54fe3ddb79f7396a32754f2cc60cd139aa87c335a1222f8a9" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-shortest-path-pick-desktop.py", + "sha256": "7ddd284bae79567206ca1fafe1f9ee0cd0d13ea2719af08a2bc27f0b848e8390" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00259/armature-shortest-path-pick-desktop-report.json", + "sha256": "3a42c0aaa54538109b1bec89e12976848464e18fdd27c30cc43b302a78557fd8" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00259/armature-shortest-path-pick-local-exact-report.json", + "sha256": "35348832a78139d10dc5c8217f64453c54430be47ee8968d59f76a76ccf2ceda" + }, + "status": { + "path": "docs/status/M16-GAP-00259.md", + "sha256": "cdcff44be62d2d855e75d393c79883034d78784471191fefaf25d999e34587e7" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00259/task-context.json", + "sha256": "efd58e511f54e130b2625a01f9cad988ba054648023d2616506dcfea9e4313fb" + } + }, + "nextTask": "M16-GAP-00260", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "ddd8610e68d8cb410973f2d005e954d14af37ea930e8964dfc8d035d9146e052", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00260/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00260/manifest.json new file mode 100644 index 00000000..a2e8ac9d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00260/manifest.json @@ -0,0 +1,84 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00260", + "parentTask": "M16-GAP-00259", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_SPLIT_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00259/manifest.json", + "sha256": "b5b6cc20449c85386b3cc2811ffed49c4bd44f09fa12c27a4c0fb2318e84f623" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00260-operator-armature.split.blend", + "sha256": "e5e2497024c8f9738caa5badff72f38130c061a2b27cfc610780bf0a97992b9d" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00260.py", + "sha256": "2260f113bec783fde138407c7eba120e72e860d3961b9779d1d9151c5247d7dc" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-split-desktop.py", + "sha256": "e1044a0a74a25f1e71b7d1fd9e027d9e4f92dee9876a72828bdb3954a2b05d43" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00260/armature-split-desktop-report.json", + "sha256": "3f7022cc9a1e6398b124763aa8f99c42e633dc036a7cae887e3fb252afd4352e" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00260/armature-split-local-exact-report.json", + "sha256": "38a055ec0e21dc6adf0818089dafce97ddcbdbed78e9a6be0080ad960b94361e" + }, + "status": { + "path": "docs/status/M16-GAP-00260.md", + "sha256": "fdf1a22b08d328a15a7fb473034cc058530ee5fd28a227098db0577b02a5cc7b" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00260/task-context.json", + "sha256": "0f70c73e731acd6e334ba69b6b16404e02f544e2ea4adbfe5e38f73af3a7c5ca" + } + }, + "nextTask": "M16-GAP-00261", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "4156a575adaed1e97388a3236060fe1de2ef5332b2303e159b7e4cad2485baa9", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00261/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00261/manifest.json new file mode 100644 index 00000000..9ea52d6b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00261/manifest.json @@ -0,0 +1,84 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00261", + "parentTask": "M16-GAP-00260", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_SUBDIVIDE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00260/manifest.json", + "sha256": "7ee18327f27adc8016792b51dddb1019b8b2ca20b643883d6712697121ff137b" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00261-operator-armature.subdivide.blend", + "sha256": "b29bcbddbc05f2ec1443699a9348abcbe52531f2fea5b03e51286ddb8305c2c4" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00261.py", + "sha256": "49aa287e8b24d914f2157f9fffe4c4c63cc7bc963b2610e8ea3ccaba0de7188d" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-subdivide-desktop.py", + "sha256": "80ae7b6ada923052ee31deca4da972311a1b22e528e6149467e07f61d7472846" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00261/armature-subdivide-desktop-report.json", + "sha256": "77e3d698de66ad1d1b5d595049f6e515e3fddbcdb83ef8a3bce25afa79c84c23" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00261/armature-subdivide-local-exact-report.json", + "sha256": "dca39b46351f9447faaa84c11cebee86a1dc87876052b55df3a5e2d1a0cd291a" + }, + "status": { + "path": "docs/status/M16-GAP-00261.md", + "sha256": "6a8177d5e252433cff846d1febe3e98759861118e7c7dcbccfb6dacac3930ce2" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00261/task-context.json", + "sha256": "3c715414fd5097f5296ab31ee86407dbb62ee02d1d804cc5d1eb9dee8a251a30" + } + }, + "nextTask": "M16-GAP-00262", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "4931760967bc7a37b7660b33afa10091929544382a7ea97057c35b8ca3d1aa51", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00262/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00262/manifest.json new file mode 100644 index 00000000..bdde487b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00262/manifest.json @@ -0,0 +1,84 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00262", + "parentTask": "M16-GAP-00261", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_SWITCH_DIRECTION_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00261/manifest.json", + "sha256": "be0a58e9c23d07236f33933b82f0e528d5f9a32e6be660dcccc4a0c56c6c5edc" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00262-operator-armature.switch_direction.blend", + "sha256": "385ebcd486385b6b68a7c7294e111af2b0f4d334247ff3e933f2c1433321cd17" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00262.py", + "sha256": "e4865caae23b80ebb893349e49fb8f8b313babb9d63e7e80c919e8b9ec9dfa90" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-switch-direction-desktop.py", + "sha256": "ee29b85c9ff1f49ad3bd731f0996ba351a82a087b636899c1ef00d6db175b87e" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00262/armature-switch-direction-desktop-report.json", + "sha256": "b354e79b081ed5a42edafb0d2ff7c2811b3793b06997ffd493cb0412c10637ac" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00262/armature-switch-direction-local-exact-report.json", + "sha256": "a70785bfc13f65f94e22747c67eff0b4a07b0aa3afbaa999a5f39ab706769cda" + }, + "status": { + "path": "docs/status/M16-GAP-00262.md", + "sha256": "011e5786081b22f6e706f3efdb9e7ce3d2422ab499be32ab7875d50986e26e3e" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00262/task-context.json", + "sha256": "60148b63a69b0e197dcde3f81e322335806a7e9bd2f2a33c7dee44daac2da996" + } + }, + "nextTask": "M16-GAP-00263", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "681279e274ccc7edb1956fb0ca86e1e6e6217fdbc7c0633c82f78f5c3481f830", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00263/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00263/manifest.json new file mode 100644 index 00000000..786c7e46 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00263/manifest.json @@ -0,0 +1,84 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00263", + "parentTask": "M16-GAP-00262", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_SYMMETRIZE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00262/manifest.json", + "sha256": "c03367b4246808543d0ecce65f005b8be03d7cb72610e7c1e07ff0273a2cfffd" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00263-operator-armature.symmetrize.blend", + "sha256": "fa490213eee2cd604d52d435cf446cdaa37ef882602147893c9f9f999cd43f2b" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00263.py", + "sha256": "d2c2558f53a666ae73e4074fcf6c9db8d39dd7fb3de65537e66c17a70533ff70" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-symmetrize-desktop.py", + "sha256": "1b84a01bdacb1b66952822b609144acaa3638aee86b4f6999df37575478a148b" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00263/armature-symmetrize-desktop-report.json", + "sha256": "2ca4f83737867b62fd8c4b42bc6092a59178baa4a18f8bc192764c859d1e5c88" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00263/armature-symmetrize-local-exact-report.json", + "sha256": "1dbef4a312f55198108fcdcab216e0739f08c237a19084e28b21a63f53f9dab7" + }, + "status": { + "path": "docs/status/M16-GAP-00263.md", + "sha256": "cd501a7510dd967be05d259465ae7bc9a2144122770b95cf951627e10341559d" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00263/task-context.json", + "sha256": "61576b4aa53a9fe9c2eb5ff564a47ac218343ba32fcccd00322d4d9a1420d9c7" + } + }, + "nextTask": "M16-GAP-00264", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "93e678975345b52f3395ab78356fce1219cd8c8f7db1d0804d872c8055107359", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00264/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00264/manifest.json new file mode 100644 index 00000000..6a841978 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00264/manifest.json @@ -0,0 +1,84 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00264", + "parentTask": "M16-GAP-00263", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ASSET_ASSET_DOWNLOAD_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00263/manifest.json", + "sha256": "174eb122a99cd96c634a78e9689dcc1e0317f17bd52727e782a20599ba6b730b" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00264-operator-asset.asset_download.blend", + "sha256": "79332080394950857a3b99087140aba51df6ad2fd731e314af67c473a48602b4" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00264.py", + "sha256": "e7fd141d87414ee12669a83dbfe54ef47b557a9c517ba8ec164264882c80e8bd" + }, + "desktopChecker": { + "path": "tools/web/check-action-asset-download-desktop.py", + "sha256": "c8af3ac7b0fd53e955a9c5d925e0ea004f219ef9c5b6629fdb57e6fecdba55a6" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00264/asset-download-desktop-report.json", + "sha256": "399aed90c3b236f1c169fad88dbc92f5409d26ca35bdeb5768bb9272a50a7157" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00264/asset-download-local-exact-report.json", + "sha256": "ad88b3a8b18007bf61d4351185ee2cab8c09e9e3a74958d521f94ff1a221795c" + }, + "status": { + "path": "docs/status/M16-GAP-00264.md", + "sha256": "57cdac22f8e6e6bb5e233b4568e9d06885869341fac96ec5bd8e717f040edcac" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00264/task-context.json", + "sha256": "d22c02c55e889b252ab0e11580693c6fc44225d4d650591942bee294557f4134" + } + }, + "nextTask": "M16-GAP-00265", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "9429c88eb60c403ecd9e7f69ce024eb03667a0bf9243f0b31c0cb3fadc9c97ad", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00265/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00265/manifest.json new file mode 100644 index 00000000..e30fc4e1 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00265/manifest.json @@ -0,0 +1,84 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00265", + "parentTask": "M16-GAP-00264", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ASSET_ASSETS_DOWNLOAD_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00264/manifest.json", + "sha256": "227db04b1571e0ae7eb9c698b1b2d440118da166a525f3114d212825e9ebd67b" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00265-operator-asset.assets_download.blend", + "sha256": "d2c09f34febbef1db3de830c37c33c1f7de8d6fc7ea1ef2aaf9eed7de243bb27" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00265.py", + "sha256": "1a86706f3c011d4a0f0b443bb6db3500704b898f0b42af5795ed2ee94b6c4286" + }, + "desktopChecker": { + "path": "tools/web/check-action-assets-download-desktop.py", + "sha256": "512737cde0efa6cc6a669939c243e7b609cc7c37fc223c4923cc6a9adc035318" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00265/assets-download-desktop-report.json", + "sha256": "1ce5009ec4582730437cbefbb5722699bc6d2fe0824eede52bf8de98b85ccb24" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00265/assets-download-local-exact-report.json", + "sha256": "35d1005b88bb477b0bc686297d4e178fbdf1c3feeb7fb29bb443a019d7a34b4d" + }, + "status": { + "path": "docs/status/M16-GAP-00265.md", + "sha256": "377f5180ae25d3912237ca1b3283f0a5f9d5292fe28952515918ec22467f8d9f" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00265/task-context.json", + "sha256": "d9b040e30c2443cfb11dc196dbb042b1aa6a72a3a27b599ccdc591a98e340395" + } + }, + "nextTask": "M16-GAP-00266", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "b4c76eefccf111de9b184220aacacd892221089eca5c857683efb8d2fee1a050", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00266/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00266/manifest.json new file mode 100644 index 00000000..5ae35860 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00266/manifest.json @@ -0,0 +1,84 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00266", + "parentTask": "M16-GAP-00265", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ASSET_ASSIGN_ACTION_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00265/manifest.json", + "sha256": "9d3a041a635b7d0413797d7fb5bb60914a28ab43415517081b3d9f2ebf644b2d" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00266-operator-asset.assign_action.blend", + "sha256": "6cefa4e22e0e8d5b2482cbe62c36e10cc58f51fa94fe843e6b953c438479fa98" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00266.py", + "sha256": "e299bf65f70bc4eb08204f42894c961d0a7c2c69bfab5e4a26ed8924f52a6271" + }, + "desktopChecker": { + "path": "tools/web/check-action-assign-action-desktop.py", + "sha256": "b4ffdc3bd9120c2823fdcf29278695e49c21b3ee07345daa15712ef6d57ca6ec" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00266/assign-action-desktop-report.json", + "sha256": "aacd8ad7641a390a2f2b4990d4b324bb9478ee0a45a42c9bf4e52720038dfab4" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00266/assign-action-local-exact-report.json", + "sha256": "e2376fd259124a1d90db2ded522f1231df3d12d0f5eb3d82c229e95fc680f1dc" + }, + "status": { + "path": "docs/status/M16-GAP-00266.md", + "sha256": "5173d19e5d61195f3a6b4688d607274a099e47b5c2bcbc39d0ed1d6ad5caaccb" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00266/task-context.json", + "sha256": "167bfdff69ccc7568d7c20d4c61be173604255e1a9cd698e55df690444763dfb" + } + }, + "nextTask": "M16-GAP-00267", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "ed8ec2e2f69cbba7a92ab91e6d4a0dad5b53a61fe280719e2a44c78e0a2ae1e3", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00267/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00267/manifest.json new file mode 100644 index 00000000..424d3765 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00267/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00267", + "parentTask": "M16-GAP-00266", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ASSET_BROWSE_CONTAINING_BLEND_FILE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00266/manifest.json", + "sha256": "aacbc7e4bfad12e03e8ba46dddef7d0c72d0511e8df0e158ef0005d4bb20dcf0" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00267-operator-asset.browse_containing_blend_file.blend", + "sha256": "29e5e42f3ebe458a4ded1d1a7a0a1cd0fecb50867b193ee3ec98485df36e7d61" + }, + "librarySource": { + "path": "tests/files/web/generated/WebGapBrowseContaining.blend", + "sha256": "661f398dd346bc18484308b154845ca5d7d82af9e9e367767c2c1ef20f3fd369" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00267.py", + "sha256": "bc950bc190d2e9c607a6d41cfc448977fe478b98723640287f63f4f42fcd2052" + }, + "desktopChecker": { + "path": "tools/web/check-action-browse-containing-blend-file-desktop.py", + "sha256": "05b68021e96e9b480298ddb2bd5c814ecf919a622d57ceabac7534eec31aad90" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00267/browse-containing-desktop-report.json", + "sha256": "cad41d8dfb33770fdbd87f44d2eb04b070cdb120665a188a379c0436fc25f324" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00267/browse-containing-local-exact-report.json", + "sha256": "2c522d5b6c545f7bf8d7238d881a94c2d6463abcb41bf24989b3218962a51ac1" + }, + "status": { + "path": "docs/status/M16-GAP-00267.md", + "sha256": "2784e307c2f4747a99dfecea527d413b5aea42c640cb2e5f0e5d3636619a8874" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00267/task-context.json", + "sha256": "47039236bfbb8d1e2d130708d25ead95b54027b1b061d91ae73f686ed75660b0" + } + }, + "nextTask": "M16-GAP-00268", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "d6528398cf1ca5e8047df546715829963bca689c367c1374e10d8ee137cce232", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00268/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00268/manifest.json new file mode 100644 index 00000000..2de7a6ec --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00268/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00268", + "parentTask": "M16-GAP-00267", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ASSET_BUNDLE_INSTALL_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00267/manifest.json", + "sha256": "918b5e13ec9e92186ec74f2c49aef4602dee002a92a7c1303ce0c86ef5d5370d" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00268-operator-asset.bundle_install.blend", + "sha256": "64dd97ac23f70c83261635fc2337555b62818b92ffedee60cb13f3335851a994" + }, + "librarySource": { + "path": "tests/files/web/generated/WebGapBundleInstall.blend", + "sha256": "89537577e6e5939da73f37fb22d40ec336a30e7ad491043b4054b0b14e4418fe" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00268.py", + "sha256": "4b9ab994369328b54f630882410066f5ef04980108a692d686430b8331454b6c" + }, + "desktopChecker": { + "path": "tools/web/check-action-bundle-install-desktop.py", + "sha256": "a34f4c2095c0ea2d47837f5d631d8dea6a19a70a620982333ddc9abd0a227099" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00268/bundle-install-desktop-report.json", + "sha256": "088fbc1390ae171dc219c201f09519f8c0fc460bc61138d13d189e3e6ec6d1c0" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00268/bundle-install-local-exact-report.json", + "sha256": "be82a7849a167cebed509f7ac451f3c1c1756757afe34e940453df686b507d97" + }, + "status": { + "path": "docs/status/M16-GAP-00268.md", + "sha256": "7556cb0df348aca6d83dadc3d155e5ab9d9403e1e470f765acebcaa851a7d058" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00268/task-context.json", + "sha256": "e44a443c29beab5923dbbab2a7e8e8e830654873f8d093345b24c3cd758620ad" + } + }, + "nextTask": "M16-GAP-00269", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "b0abffb689387f6ee753292f6592c81b307e71e392760b1277529d9d176fd7ad", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00269/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00269/manifest.json new file mode 100644 index 00000000..46df8ad7 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00269/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00269", + "parentTask": "M16-GAP-00268", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ASSET_CATALOG_DELETE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00268/manifest.json", + "sha256": "8926cead64df23f2bf6386ac728fb8836bcef5c5bd645faecad45a3eb7b06b03" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00269-operator-asset.catalog_delete.blend", + "sha256": "7fa8ebaf85c2bd474dcaa9e4ce94ad81665b501841d15c48e371bb8f033702a2" + }, + "librarySource": { + "path": "tests/files/web/generated/WebGapCatalogDelete.blend", + "sha256": "137a558e0ac46a6b9c466b1023a871adb6666ec0de0f9756e041ce8858ed374d" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00269.py", + "sha256": "2be254c3d36647b1d6dfb06af054ab96a0def10666f911bedc3a4225206ff749" + }, + "desktopChecker": { + "path": "tools/web/check-action-catalog-delete-desktop.py", + "sha256": "d0347a61c6a0388062e0f9cdaa6c9a25fc3662c667b6641705543ac816e0a355" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00269/catalog-delete-desktop-report.json", + "sha256": "68070e257397148441c11e1ecfc9a2202f9955cee17a3f8ee878d4e0f1310790" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00269/catalog-delete-local-exact-report.json", + "sha256": "1cd38bfab4ba20d3238bbb11fc9838b5479f96c345c6f98e479eea25fe229bd1" + }, + "status": { + "path": "docs/status/M16-GAP-00269.md", + "sha256": "6c65ae2c6884a89c9051b13d5336cb9e8c454ccb8e9ed8d80e84b09ef84db0c7" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00269/task-context.json", + "sha256": "e1bb2480ec7894a2ce1b8c5ae2b221f6e55cf19c7c4e72aef04d89d5da147878" + } + }, + "nextTask": "M16-GAP-00270", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "789d04ba83d2119aec7f5d2531acbb8c5aef946e520df9e5e9aa7b415bb2e677", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00270/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00270/manifest.json new file mode 100644 index 00000000..eb93afcd --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00270/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00270", + "parentTask": "M16-GAP-00269", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ASSET_CATALOG_NEW_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00269/manifest.json", + "sha256": "d197196e37e5f26f13db0f03c099287fe444ebe64688bb60d6ce38e1803559fb" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00270-operator-asset.catalog_new.blend", + "sha256": "8c874d8ec51cb7cbfa787780ca7c8e636ce9a98b4998ef81ddbd9fdd34658662" + }, + "librarySource": { + "path": "tests/files/web/generated/WebGapCatalogNew.blend", + "sha256": "a12a6480d7254d290d0617e16f72c93ef4cbd043ebc004f94559436988a66ef2" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00270.py", + "sha256": "ccaa0c91694f931c0fb6313695b8bb5eae795e8003d24ff67f0eb21328184727" + }, + "desktopChecker": { + "path": "tools/web/check-action-catalog-new-desktop.py", + "sha256": "1a5331f11bf741efb897f4c719ea4ff2457e15823c10ca805085d63e059984c1" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00270/catalog-new-desktop-report.json", + "sha256": "a8037c3b339c215db7bc4143ce0999074a366019a8868516baec00086378e2d9" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00270/catalog-new-local-exact-report.json", + "sha256": "99f10be076dd573ee658256e2b2e08c40af1997b344268a84cdc0fa8fe939e81" + }, + "status": { + "path": "docs/status/M16-GAP-00270.md", + "sha256": "293a56ae16f499b98784f05b12d1ef0ec4e9a844763ac1515b1c11d7f26fdcd9" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00270/task-context.json", + "sha256": "ee463f5baf378f77c68c9f30d5f21caebcd027138222b5bf4007a5e14696ff56" + } + }, + "nextTask": "M16-GAP-00271", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "4794b5e0c54f1496b963a912f9c44306277754ee702d6468d6e42c5084f04bac", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00271/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00271/manifest.json new file mode 100644 index 00000000..dd7ef382 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00271/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00271", + "parentTask": "M16-GAP-00270", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ASSET_CATALOG_REDO_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00270/manifest.json", + "sha256": "c24c8cebb471d9a1d37e180a39d5091da36356cd4ea6065a1bf5110ac5ee86f0" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00271-operator-asset.catalog_redo.blend", + "sha256": "2e3481a9f155900774bbcc3e5d07ca65bedc2029e3281e86857fd943e81396cd" + }, + "librarySource": { + "path": "tests/files/web/generated/WebGapCatalogRedo.blend", + "sha256": "53367b4765383ae0cf232e02eaca1fbf07407946a600c91cf8d1f5303e21d0c7" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00271.py", + "sha256": "8012efb7f85f89625f13686743798051fa5febaae361b179117c992ca4bc972c" + }, + "desktopChecker": { + "path": "tools/web/check-action-catalog-redo-desktop.py", + "sha256": "89ff11f1ec2f76c1d34c49549e2499db2df084fff63fcfb156d65e3c1f46d8f1" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00271/catalog-redo-desktop-report.json", + "sha256": "31dedccda115a8219307ad7f677602fc907e6e012297b4e6a6a68f19fb1415d5" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00271/catalog-redo-local-exact-report.json", + "sha256": "25e5b338ad95d2e09e0cc651fd14f5c66a21be78f3d0d0039f8b161386e2fdb9" + }, + "status": { + "path": "docs/status/M16-GAP-00271.md", + "sha256": "d660b0ec53156000900bfbc2794d583a321788acba6298de35f228cf8cf6111b" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00271/task-context.json", + "sha256": "1ef1edcfb45f3ce201efec1aa2efb39f95aeaec909eccb02e13cc7f98335a11b" + } + }, + "nextTask": "M16-GAP-00272", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "f7fb2c2ab7b13535db130e1ed2ac3adc027ab77621f6bad129c4e0ff2ddd863b", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00272/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00272/manifest.json new file mode 100644 index 00000000..472ab96a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00272/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00272", + "parentTask": "M16-GAP-00271", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ASSET_CATALOG_UNDO_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00271/manifest.json", + "sha256": "d46fdf0ef0d6c1702682abc8ac076bbd0d46298d380995f6d62003029b489513" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00272-operator-asset.catalog_undo.blend", + "sha256": "fa003b726f82cf42dfbd5ae027ad6b6c8ff03bdcc337154d835cae241a1265cd" + }, + "librarySource": { + "path": "tests/files/web/generated/WebGapCatalogUndo.blend", + "sha256": "2ee954737c6f35b5f9af2eb5f350ea3e34a9ff6f491b8a4184ccb18875c6f3b8" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00272.py", + "sha256": "e7aac853fe0c589dc19375ab30259635e5af15c59aeb12a75eb8f7c6ac745052" + }, + "desktopChecker": { + "path": "tools/web/check-action-catalog-undo-desktop.py", + "sha256": "4a4866dc48a2fc8318549ef5a143697b2ba51643b8be3865975596882569c773" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00272/catalog-undo-desktop-report.json", + "sha256": "21d131f2b2c5ffe8772bcb4606dbf16388467572cd0542c6dd16c66e1730b712" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00272/catalog-undo-local-exact-report.json", + "sha256": "4cb20b624a5f96d417c33d928b760befaacb8c59610f197ff1a666d1fc78a5f0" + }, + "status": { + "path": "docs/status/M16-GAP-00272.md", + "sha256": "522fe8b32558b75f87488fafe11ebc17994bb9742f24663c5ea5a85d64e6598c" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00272/task-context.json", + "sha256": "ce9557e77c46435c6153a6173fb59b5d50686d8738bbab96490d631965219867" + } + }, + "nextTask": "M16-GAP-00273", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "59c3520ab3de2f8275c730dd9b9680ed9b64aced4dcccc800b051490b6715a93", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00273/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00273/manifest.json new file mode 100644 index 00000000..6a08eb03 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00273/manifest.json @@ -0,0 +1,88 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00273", + "parentTask": "M16-GAP-00272", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ASSET_CATALOG_UNDO_PUSH_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00272/manifest.json", + "sha256": "eb3675367849f1a784e8028a43efac24fcede55cedd38d55b121cd88aa1facae" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00273-operator-asset.catalog_undo_push.blend", + "sha256": "f835a3088b975a283a99a69738dbf0ecc8a71b463b3c124da15ea6e54599256b" + }, + "librarySource": { + "path": "tests/files/web/generated/WebGapCatalogUndoPush.blend", + "sha256": "448fdabd5281e25a949ceefdb0b76804f2a47d2d9e5b784f8f998f0be289fd4c" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00273.py", + "sha256": "120262e67b215a5d778100b820d74b8d3f216b20e36402a4f389099751a728c2" + }, + "desktopChecker": { + "path": "tools/web/check-action-catalog-undo-push-desktop.py", + "sha256": "7e218eff97f8d4a2bd475d9957a94a784f4a76da3b35938389eb59eae7592795" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00273/catalog-undo-push-desktop-report.json", + "sha256": "03421f7e7ffe6eb3f0ec93c6f09cd505f806e228145cf4ce6d55e3b841b8b34b" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00273/catalog-undo-push-local-exact-report.json", + "sha256": "86e5cabacde4ee419d71011b902e0fc561e7da94028879bca4ca0315ad1d4f72" + }, + "status": { + "path": "docs/status/M16-GAP-00273.md", + "sha256": "5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00273/task-context.json", + "sha256": "8679b3271d07fe1d4eaf2c6dcc6ef833d9c2853dda4643339071c60dc8bfe2f7" + } + }, + "nextTask": "M16-GAP-00274", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [ + { + "path": "tools/web/check-generated-gap.mjs", + "originalSha256": "abe69afee4f6a670d7c71abeba44118d7a01020ebac4665793451eafd4a7c0d5", + "resignedSha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + } + ] + } +} diff --git a/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00274/manifest.json b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00274/manifest.json new file mode 100644 index 00000000..b661e645 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00274/manifest.json @@ -0,0 +1,82 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00274", + "parentTask": "M16-GAP-00273", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ASSET_CATALOGS_SAVE_LOCAL_EXACT", + "status": "in_progress", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00273/manifest.json", + "sha256": "3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00274-operator-asset.catalogs_save.blend", + "sha256": "7b8be4b5cc90415b7295fcd2ceb560761b6e0df2b17aff0e62a339c7e43dbab3" + }, + "librarySource": { + "path": "tests/files/web/generated/WebGapCatalogsSave.blend", + "sha256": "1036247ac5432b6d9f30bde8c080d470248ce2e840e5bdf7de7f08a64838204e" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00274.py", + "sha256": "7db1e65ed1f4329210791cfffc2888c321073bfb557cbac158577d7d4375bb59" + }, + "desktopChecker": { + "path": "tools/web/check-action-catalogs-save-desktop.py", + "sha256": "ffa7e28e8bfb2669ff2e05a10edc7794eb43c31c0d4abaa3841b1887424bea92" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00274/catalogs-save-desktop-report.json", + "sha256": "4030bf70be443ef6dd4704ec43f93c596414b3657bb1dec3402f844173c1103d" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00274/catalogs-save-local-exact-report.json", + "sha256": "459c689249e40c69a61202980a100325a6f106606b559eca653ec4e9bb91927e" + }, + "status": { + "path": "docs/status/M16-GAP-00274.md", + "sha256": "e77fcd7c5e95a64df591af09cee6dba5a3f60c1616f39a3601841f0d88c4fe3b" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00274/task-context.json", + "sha256": "a539fbe4a83846344834b96a7f62320fc6a858aae1146629988b14b883d87020" + } + }, + "nextTask": "M16-GAP-00275", + "reconciliation": { + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "artifactDrift": [] + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/blender-5.2.0/source/blender/blenkernel/intern/particle.cc b/tests/golden/corrective/C0-002/staged/source-snapshot/files/blender-5.2.0/source/blender/blenkernel/intern/particle.cc new file mode 100644 index 00000000..6bed753f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/blender-5.2.0/source/blender/blenkernel/intern/particle.cc @@ -0,0 +1,5734 @@ +/* SPDX-FileCopyrightText: 2007 by Janne Karhu. All rights reserved. + * + * SPDX-License-Identifier: GPL-2.0-or-later */ + +/** \file + * \ingroup bke + */ + +/* Allow using deprecated functionality for .blend file I/O. */ +#include "BKE_report.hh" +#define DNA_DEPRECATED_ALLOW + +#include +#include +#include +#include +#include + +#include "MEM_guardedalloc.h" + +#include "DNA_cloth_types.h" +#include "DNA_collection_types.h" +#include "DNA_curve_types.h" +#include "DNA_dynamicpaint_types.h" +#include "DNA_fluid_types.h" +#include "DNA_key_types.h" +#include "DNA_material_types.h" +#include "DNA_mesh_types.h" +#include "DNA_meshdata_types.h" +#include "DNA_object_force_types.h" +#include "DNA_particle_types.h" +#include "DNA_scene_types.h" +#include "DNA_texture_types.h" + +#include "BLI_kdopbvh.hh" +#include "BLI_kdtree.hh" +#include "BLI_linklist.h" +#include "BLI_listbase.h" +#include "BLI_math_base_safe.h" +#include "BLI_math_geom.h" +#include "BLI_math_matrix.h" +#include "BLI_math_rotation.h" +#include "BLI_math_vector.h" +#include "BLI_rand.h" +#include "BLI_string_utf8.h" +#include "BLI_task.h" +#include "BLI_threads.h" +#include "BLI_utildefines.h" + +#include "BLT_translation.hh" + +#include "BKE_anim_path.h" +#include "BKE_boids.h" +#include "BKE_cloth.hh" +#include "BKE_collection.hh" +#include "BKE_colortools.hh" +#include "BKE_customdata.hh" +#include "BKE_deform.hh" +#include "BKE_displist.h" +#include "BKE_effect.h" +#include "BKE_idtype.hh" +#include "BKE_key.hh" +#include "BKE_lattice.hh" +#include "BKE_layer.hh" +#include "BKE_lib_id.hh" +#include "BKE_lib_query.hh" +#include "BKE_material.hh" +#include "BKE_mesh.hh" +#include "BKE_mesh_legacy_convert.hh" +#include "BKE_modifier.hh" +#include "BKE_object.hh" +#include "BKE_particle.h" +#include "BKE_pointcache.h" +#include "BKE_scene.hh" +#include "BKE_texture.h" + +#include "DEG_depsgraph.hh" +#include "DEG_depsgraph_build.hh" +#include "DEG_depsgraph_query.hh" + +#include "RE_texture.h" + +#include "BLO_read_write.hh" + +#include "particle_private.h" + +namespace blender { + +static void fluid_free_settings(SPHFluidSettings *fluid); + +static void particle_settings_init(ID *id) +{ + ParticleSettings *particle_settings = id_cast(id); + INIT_DEFAULT_STRUCT_AFTER(particle_settings, id); + + particle_settings->effector_weights = BKE_effector_add_weights(nullptr); + particle_settings->pd = BKE_partdeflect_new(PFIELD_NULL); + particle_settings->pd2 = BKE_partdeflect_new(PFIELD_NULL); +} + +static void particle_settings_copy_data(Main * /*bmain*/, + std::optional /*owner_library*/, + ID *id_dst, + const ID *id_src, + const int /*flag*/) +{ + ParticleSettings *particle_settings_dst = id_cast(id_dst); + const ParticleSettings *partticle_settings_src = id_cast(id_src); + + particle_settings_dst->pd = BKE_partdeflect_copy(partticle_settings_src->pd); + particle_settings_dst->pd2 = BKE_partdeflect_copy(partticle_settings_src->pd2); + particle_settings_dst->effector_weights = static_cast( + MEM_dupalloc(partticle_settings_src->effector_weights)); + particle_settings_dst->fluid = static_cast( + MEM_dupalloc(partticle_settings_src->fluid)); + + if (partticle_settings_src->clumpcurve) { + particle_settings_dst->clumpcurve = BKE_curvemapping_copy(partticle_settings_src->clumpcurve); + } + if (partticle_settings_src->roughcurve) { + particle_settings_dst->roughcurve = BKE_curvemapping_copy(partticle_settings_src->roughcurve); + } + if (partticle_settings_src->twistcurve) { + particle_settings_dst->twistcurve = BKE_curvemapping_copy(partticle_settings_src->twistcurve); + } + + particle_settings_dst->boids = boid_copy_settings(partticle_settings_src->boids); + + for (int a = 0; a < MAX_MTEX; a++) { + if (partticle_settings_src->mtex[a]) { + particle_settings_dst->mtex[a] = static_cast( + MEM_dupalloc(partticle_settings_src->mtex[a])); + } + } + + BLI_duplicatelist(&particle_settings_dst->instance_weights, + &partticle_settings_src->instance_weights); +} + +static void particle_settings_free_data(ID *id) +{ + ParticleSettings *particle_settings = id_cast(id); + + for (int a = 0; a < MAX_MTEX; a++) { + MEM_SAFE_DELETE(particle_settings->mtex[a]); + } + + if (particle_settings->clumpcurve) { + BKE_curvemapping_free(particle_settings->clumpcurve); + } + if (particle_settings->roughcurve) { + BKE_curvemapping_free(particle_settings->roughcurve); + } + if (particle_settings->twistcurve) { + BKE_curvemapping_free(particle_settings->twistcurve); + } + + BKE_partdeflect_free(particle_settings->pd); + BKE_partdeflect_free(particle_settings->pd2); + + MEM_SAFE_DELETE(particle_settings->effector_weights); + + particle_settings->instance_weights.free_no_destruct(); + + boid_free_settings(particle_settings->boids); + fluid_free_settings(particle_settings->fluid); +} + +static void particle_settings_foreach_id(ID *id, LibraryForeachIDData *data) +{ + ParticleSettings *psett = reinterpret_cast(id); + const int flag = BKE_lib_query_foreachid_process_flags_get(data); + + BKE_LIB_FOREACHID_PROCESS_IDSUPER(data, psett->instance_collection, IDWALK_CB_USER); + BKE_LIB_FOREACHID_PROCESS_IDSUPER(data, psett->instance_object, IDWALK_CB_NOP); + BKE_LIB_FOREACHID_PROCESS_IDSUPER(data, psett->bb_ob, IDWALK_CB_NOP); + BKE_LIB_FOREACHID_PROCESS_IDSUPER(data, psett->collision_group, IDWALK_CB_NOP); + + for (int i = 0; i < MAX_MTEX; i++) { + if (psett->mtex[i]) { + BKE_LIB_FOREACHID_PROCESS_FUNCTION_CALL(data, + BKE_texture_mtex_foreach_id(data, psett->mtex[i])); + } + } + + if (psett->effector_weights) { + BKE_LIB_FOREACHID_PROCESS_IDSUPER(data, psett->effector_weights->group, IDWALK_CB_USER); + } + + if (psett->pd) { + BKE_LIB_FOREACHID_PROCESS_IDSUPER(data, psett->pd->tex, IDWALK_CB_USER); + BKE_LIB_FOREACHID_PROCESS_IDSUPER(data, psett->pd->f_source, IDWALK_CB_NOP); + } + if (psett->pd2) { + BKE_LIB_FOREACHID_PROCESS_IDSUPER(data, psett->pd2->tex, IDWALK_CB_USER); + BKE_LIB_FOREACHID_PROCESS_IDSUPER(data, psett->pd2->f_source, IDWALK_CB_NOP); + } + + if (psett->boids) { + for (BoidState &state : psett->boids->states) { + for (BoidRule &rule : state.rules) { + if (ELEM(rule.type, eBoidRuleType_Avoid, eBoidRuleType_Goal)) { + BoidRuleGoalAvoid *gabr = reinterpret_cast(&rule); + BKE_LIB_FOREACHID_PROCESS_IDSUPER(data, gabr->ob, IDWALK_CB_NOP); + } + else if (rule.type == eBoidRuleType_FollowLeader) { + BoidRuleFollowLeader *flbr = reinterpret_cast(&rule); + BKE_LIB_FOREACHID_PROCESS_IDSUPER(data, flbr->ob, IDWALK_CB_NOP); + } + } + } + } + + for (ParticleDupliWeight &dw : psett->instance_weights) { + BKE_LIB_FOREACHID_PROCESS_IDSUPER(data, dw.ob, IDWALK_CB_NOP); + } + + if (flag & IDWALK_DO_DEPRECATED_POINTERS) { + BKE_LIB_FOREACHID_PROCESS_IDSUPER(data, psett->force_group, IDWALK_CB_NOP); + } +} + +static void write_boid_state(BlendWriter *writer, BoidState *state) +{ + writer->write_struct(state); + + for (BoidRule &rule : state->rules) { + switch (rule.type) { + case eBoidRuleType_Goal: + case eBoidRuleType_Avoid: + writer->write_struct_cast(&rule); + break; + case eBoidRuleType_AvoidCollision: + writer->write_struct_cast(&rule); + break; + case eBoidRuleType_FollowLeader: + writer->write_struct_cast(&rule); + break; + case eBoidRuleType_AverageSpeed: + writer->write_struct_cast(&rule); + break; + case eBoidRuleType_Fight: + writer->write_struct_cast(&rule); + break; + default: + writer->write_struct(&rule); + break; + } + } +#if 0 + BoidCondition *cond = state->conditions.first; + for (; cond; cond = cond->next) { + writer->write_struct(cond); + } +#endif +} + +static void particle_settings_blend_write(BlendWriter *writer, ID *id, const void *id_address) +{ + ParticleSettings *part = id_cast(id); + + /* write LibData */ + writer->write_id_struct(id_address, part); + BKE_id_blend_write(writer, &part->id); + + writer->write_struct(part->pd); + writer->write_struct(part->pd2); + writer->write_struct(part->effector_weights); + + if (part->clumpcurve) { + BKE_curvemapping_blend_write(writer, part->clumpcurve); + } + if (part->roughcurve) { + BKE_curvemapping_blend_write(writer, part->roughcurve); + } + if (part->twistcurve) { + BKE_curvemapping_blend_write(writer, part->twistcurve); + } + + for (ParticleDupliWeight &dw : part->instance_weights) { + /* update indices, but only if dw->ob is set (can be nullptr after loading e.g.) */ + if (dw.ob != nullptr) { + dw.index = 0; + if (part->instance_collection) { /* can be nullptr if lining fails or set to None */ + FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN (part->instance_collection, object) { + if (object == dw.ob) { + break; + } + dw.index++; + } + FOREACH_COLLECTION_OBJECT_RECURSIVE_END; + } + } + writer->write_struct(&dw); + } + + if (part->boids && part->phystype == PART_PHYS_BOIDS) { + writer->write_struct(part->boids); + + for (BoidState &state : part->boids->states) { + write_boid_state(writer, &state); + } + } + if (part->fluid && part->phystype == PART_PHYS_FLUID) { + writer->write_struct(part->fluid); + } + + for (int a = 0; a < MAX_MTEX; a++) { + if (part->mtex[a]) { + writer->write_struct(part->mtex[a]); + } + } +} + +void BKE_particle_partdeflect_blend_read_data(BlendDataReader * /*reader*/, PartDeflect * /*pd*/) +{ +} + +static void particle_settings_blend_read_data(BlendDataReader *reader, ID *id) +{ + ParticleSettings *part = id_cast(id); + + BLO_read_struct(reader, PartDeflect, &part->pd); + BLO_read_struct(reader, PartDeflect, &part->pd2); + BKE_particle_partdeflect_blend_read_data(reader, part->pd); + BKE_particle_partdeflect_blend_read_data(reader, part->pd2); + + BLO_read_struct(reader, CurveMapping, &part->clumpcurve); + if (part->clumpcurve) { + BKE_curvemapping_blend_read(reader, part->clumpcurve); + } + BLO_read_struct(reader, CurveMapping, &part->roughcurve); + if (part->roughcurve) { + BKE_curvemapping_blend_read(reader, part->roughcurve); + } + BLO_read_struct(reader, CurveMapping, &part->twistcurve); + if (part->twistcurve) { + BKE_curvemapping_blend_read(reader, part->twistcurve); + } + + BLO_read_struct(reader, EffectorWeights, &part->effector_weights); + if (!part->effector_weights) { + part->effector_weights = BKE_effector_add_weights(part->force_group); + } + + BLO_read_struct_list(reader, ParticleDupliWeight, &part->instance_weights); + + BLO_read_struct(reader, BoidSettings, &part->boids); + BLO_read_struct(reader, SPHFluidSettings, &part->fluid); + + if (part->boids) { + BLO_read_struct_list(reader, BoidState, &part->boids->states); + + for (BoidState &state : part->boids->states) { + BLO_read_struct_list(reader, BoidRule, &state.rules); +#if 0 + /* Not implemented yet. */ + BLO_read_struct_list(reader, BoidCondition, &state->conditions); + BLO_read_struct_list(reader, BoidAction, &state->actions); +#endif + } + } + for (int a = 0; a < MAX_MTEX; a++) { + BLO_read_struct(reader, MTex, &part->mtex[a]); + } + + /* Protect against integer overflow vulnerability. */ + CLAMP(part->trail_count, 1, 100000); +} + +static void particle_settings_blend_read_after_liblink(BlendLibReader * /*reader*/, ID *id) +{ + ParticleSettings *part = reinterpret_cast(id); + + if (part->instance_weights.first && !part->instance_collection) { + part->instance_weights.free_no_destruct(); + } +} + +IDTypeInfo IDType_ID_PA = { + .id_code = ParticleSettings::id_type, + .id_filter = FILTER_ID_PA, + .dependencies_id_types = FILTER_ID_OB | FILTER_ID_GR | FILTER_ID_TE, + .main_listbase_index = INDEX_ID_PA, + .struct_size = sizeof(ParticleSettings), + .name = "ParticleSettings", + .name_plural = N_("particles"), + .translation_context = BLT_I18NCONTEXT_ID_PARTICLESETTINGS, + .flags = 0, + .asset_type_info = nullptr, + + .init_data = particle_settings_init, + .copy_data = particle_settings_copy_data, + .free_data = particle_settings_free_data, + .make_local = nullptr, + .foreach_id = particle_settings_foreach_id, + .foreach_cache = nullptr, + .foreach_path = nullptr, + .foreach_working_space_color = nullptr, + .owner_pointer_get = nullptr, + + .blend_write = particle_settings_blend_write, + .blend_read_data = particle_settings_blend_read_data, + .blend_read_after_liblink = particle_settings_blend_read_after_liblink, + + .blend_read_undo_preserve = nullptr, + + .lib_override_apply_post = nullptr, +}; + +uint PSYS_FRAND_SEED_OFFSET[PSYS_FRAND_COUNT]; +uint PSYS_FRAND_SEED_MULTIPLIER[PSYS_FRAND_COUNT]; +float PSYS_FRAND_BASE[PSYS_FRAND_COUNT]; + +void BKE_particle_init_rng() +{ + RNG *rng = BLI_rng_new_srandom(5831); /* arbitrary */ + for (int i = 0; i < PSYS_FRAND_COUNT; i++) { + PSYS_FRAND_BASE[i] = BLI_rng_get_float(rng); + PSYS_FRAND_SEED_OFFSET[i] = uint(BLI_rng_get_int(rng)); + PSYS_FRAND_SEED_MULTIPLIER[i] = uint(BLI_rng_get_int(rng)); + } + BLI_rng_free(rng); +} + +static void get_child_modifier_parameters(ParticleSettings *part, + ParticleThreadContext *ctx, + ChildParticle *cpa, + short cpa_from, + int cpa_num, + float *cpa_fuv, + float *orco, + ParticleTexture *ptex); +static void get_cpa_texture(Mesh *mesh, + ParticleSystem *psys, + ParticleSettings *part, + ParticleData *par, + int child_index, + int face_index, + const float fw[4], + float *orco, + ParticleTexture *ptex, + int event, + float cfra); + +int count_particles(ParticleSystem *psys) +{ + ParticleSettings *part = psys->part; + PARTICLE_P; + int tot = 0; + + LOOP_SHOWN_PARTICLES + { + if (pa->alive == PARS_UNBORN && (part->flag & PART_UNBORN) == 0) { + } + else if (pa->alive == PARS_DEAD && (part->flag & PART_DIED) == 0) { + } + else { + tot++; + } + } + return tot; +} +int count_particles_mod(ParticleSystem *psys, int totgr, int cur) +{ + ParticleSettings *part = psys->part; + PARTICLE_P; + int tot = 0; + + LOOP_SHOWN_PARTICLES + { + if (pa->alive == PARS_UNBORN && (part->flag & PART_UNBORN) == 0) { + } + else if (pa->alive == PARS_DEAD && (part->flag & PART_DIED) == 0) { + } + else if (p % totgr == cur) { + tot++; + } + } + return tot; +} +/* We allocate path cache memory in chunks instead of a big contiguous + * chunk, windows' memory allocator fails to find big blocks of memory often. */ + +#define PATH_CACHE_BUF_SIZE 1024 + +static ParticleCacheKey *pcache_key_segment_endpoint_safe(ParticleCacheKey *key) +{ + return (key->segments > 0) ? (key + (key->segments - 1)) : key; +} + +static ParticleCacheKey **psys_alloc_path_cache_buffers(ListBaseT *bufs, + int tot, + int totkeys) +{ + LinkData *buf; + ParticleCacheKey **cache; + int i, totkey, totbufkey; + + tot = std::max(tot, 1); + totkey = 0; + cache = MEM_new_array_zeroed(tot, "PathCacheArray"); + + while (totkey < tot) { + totbufkey = std::min(tot - totkey, PATH_CACHE_BUF_SIZE); + buf = MEM_new_zeroed("PathCacheLinkData"); + buf->data = MEM_new_array_zeroed(size_t(totbufkey) * size_t(totkeys), + "ParticleCacheKey"); + + for (i = 0; i < totbufkey; i++) { + cache[totkey + i] = (static_cast(buf->data)) + i * totkeys; + } + + totkey += totbufkey; + BLI_addtail(bufs, buf); + } + + return cache; +} + +static void psys_free_path_cache_buffers(ParticleCacheKey **cache, ListBaseT *bufs) +{ + if (cache) { + MEM_delete(cache); + } + + for (LinkData &buf : *bufs) { + MEM_delete(static_cast(buf.data)); + } + bufs->free_no_destruct(); +} + +/* -------------------------------------------------------------------- */ +/** \name Getting Stuff + * \{ */ + +ParticleSystem *psys_get_current(Object *ob) +{ + if (ob == nullptr) { + return nullptr; + } + + for (ParticleSystem &psys : ob->particlesystem) { + if (psys.flag & PSYS_CURRENT) { + return &psys; + } + } + + return nullptr; +} +short psys_get_current_num(Object *ob) +{ + ParticleSystem *psys; + short i; + + if (ob == nullptr) { + return 0; + } + + for (psys = static_cast(ob->particlesystem.first), i = 0; psys; + psys = psys->next, i++) + { + if (psys->flag & PSYS_CURRENT) { + return i; + } + } + + return i; +} +void psys_set_current_num(Object *ob, int index) +{ + ParticleSystem *psys; + short i; + + if (ob == nullptr) { + return; + } + + for (psys = static_cast(ob->particlesystem.first), i = 0; psys; + psys = psys->next, i++) + { + if (i == index) { + psys->flag |= PSYS_CURRENT; + } + else { + psys->flag &= ~PSYS_CURRENT; + } + } +} + +void psys_sim_data_init(ParticleSimulationData *sim) +{ + ParticleSystem *psys = sim->psys; + ParticleSettings *part = psys->part; + + /* Prepare lattice deform. */ + psys->lattice_deform_data = nullptr; + if (psys_in_edit_mode(sim->depsgraph, sim->psys) == 0) { + Object *lattice = nullptr; + ModifierData *md = reinterpret_cast(psys_get_modifier(sim->ob, sim->psys)); + bool for_render = DEG_get_mode(sim->depsgraph) == DAG_EVAL_RENDER; + int mode = for_render ? eModifierMode_Render : eModifierMode_Realtime; + + for (; md; md = md->next) { + if (md->type == eModifierType_Lattice) { + if (md->mode & mode) { + LatticeModifierData *lmd = reinterpret_cast(md); + lattice = lmd->object; + psys->lattice_strength = lmd->strength; + } + + break; + } + } + if (lattice && lattice->type == OB_LATTICE) { + psys->lattice_deform_data = BKE_lattice_deform_data_create(lattice, nullptr); + } + } + + /* Prepare curvemapping tables. */ + if ((part->child_flag & PART_CHILD_USE_CLUMP_CURVE) && part->clumpcurve) { + BKE_curvemapping_init(part->clumpcurve); + } + if ((part->child_flag & PART_CHILD_USE_ROUGH_CURVE) && part->roughcurve) { + BKE_curvemapping_init(part->roughcurve); + } + if ((part->child_flag & PART_CHILD_USE_TWIST_CURVE) && part->twistcurve) { + BKE_curvemapping_init(part->twistcurve); + } +} + +void psys_sim_data_free(ParticleSimulationData *sim) +{ + ParticleSystem *psys = sim->psys; + + if (psys->lattice_deform_data) { + BKE_lattice_deform_data_destroy(psys->lattice_deform_data); + psys->lattice_deform_data = nullptr; + } +} + +void psys_disable_all(Object *ob) +{ + ParticleSystem *psys = static_cast(ob->particlesystem.first); + + for (; psys; psys = psys->next) { + psys->flag |= PSYS_DISABLED; + } +} +void psys_enable_all(Object *ob) +{ + ParticleSystem *psys = static_cast(ob->particlesystem.first); + + for (; psys; psys = psys->next) { + psys->flag &= ~PSYS_DISABLED; + } +} + +ParticleSystem *psys_orig_get(ParticleSystem *psys) +{ + if (psys->orig_psys == nullptr) { + return psys; + } + return psys->orig_psys; +} + +ParticleSystem *psys_eval_get(Depsgraph *depsgraph, Object *object, ParticleSystem *psys) +{ + Object *object_eval = DEG_get_evaluated(depsgraph, object); + if (object_eval == object) { + return psys; + } + ParticleSystem *psys_eval = static_cast(object_eval->particlesystem.first); + while (psys_eval != nullptr) { + if (psys_eval->orig_psys == psys) { + return psys_eval; + } + psys_eval = psys_eval->next; + } + return psys_eval; +} + +static PTCacheEdit *psys_orig_edit_get(ParticleSystem *psys) +{ + if (psys->orig_psys == nullptr) { + return psys->edit; + } + return psys->orig_psys->edit; +} + +bool psys_in_edit_mode(Depsgraph *depsgraph, const ParticleSystem *psys) +{ + const Scene *scene = DEG_get_input_scene(depsgraph); + ViewLayer *view_layer = DEG_get_input_view_layer(depsgraph); + BKE_view_layer_synced_ensure(*DEG_get_bmain(depsgraph), scene, view_layer); + const Object *object = BKE_view_layer_active_object_get(view_layer); + if (object == nullptr) { + /* TODO(sergey): Needs double-check with multi-object edit. */ + return false; + } + const bool use_render_params = (DEG_get_mode(depsgraph) == DAG_EVAL_RENDER); + if (object->mode != OB_MODE_PARTICLE_EDIT) { + return false; + } + const ParticleSystem *psys_orig = psys_orig_get(const_cast(psys)); + return (psys_orig->edit || psys->pointcache->edit) && (use_render_params == false); +} + +bool psys_check_enabled(Object *ob, ParticleSystem *psys, const bool use_render_params) +{ + ParticleSystemModifierData *psmd; + + if (psys->flag & PSYS_DISABLED || psys->flag & PSYS_DELETE || !psys->part) { + return false; + } + + psmd = psys_get_modifier(ob, psys); + + if (!psmd) { + return false; + } + + if (use_render_params) { + if (!(psmd->modifier.mode & eModifierMode_Render)) { + return false; + } + } + else if (!(psmd->modifier.mode & eModifierMode_Realtime)) { + return false; + } + + return true; +} + +bool psys_check_edited(ParticleSystem *psys) +{ + if (psys->part && psys->part->type == PART_HAIR) { + return (psys->flag & PSYS_EDITED || (psys->edit && psys->edit->edited)); + } + + return (psys->pointcache->edit && psys->pointcache->edit->edited); +} + +void psys_find_group_weights(ParticleSettings *part) +{ + /* Find object pointers based on index. If the collection is linked from + * another library linking may not have the object pointers available on + * file load, so we have to retrieve them later. See #49273. */ + ListBaseT instance_collection_objects = {nullptr, nullptr}; + + if (part->instance_collection) { + instance_collection_objects = BKE_collection_object_cache_get(part->instance_collection); + } + + for (ParticleDupliWeight &dw : part->instance_weights) { + if (dw.ob == nullptr) { + Base *base = static_cast(BLI_findlink(&instance_collection_objects, dw.index)); + if (base != nullptr) { + dw.ob = base->object; + } + } + } +} + +void psys_check_group_weights(ParticleSettings *part) +{ + ParticleDupliWeight *dw, *tdw; + + if (part->ren_as != PART_DRAW_GR || !part->instance_collection) { + part->instance_weights.free_no_destruct(); + return; + } + + /* Find object pointers. */ + psys_find_group_weights(part); + + /* Remove nullptr objects, that were removed from the collection. */ + dw = static_cast(part->instance_weights.first); + while (dw) { + if (dw->ob == nullptr || + !BKE_collection_has_object_recursive(part->instance_collection, dw->ob)) + { + tdw = dw->next; + BLI_freelinkN(&part->instance_weights, dw); + dw = tdw; + } + else { + dw = dw->next; + } + } + + /* Add new objects in the collection. */ + int index = 0; + FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN (part->instance_collection, object) { + dw = static_cast(part->instance_weights.first); + while (dw && dw->ob != object) { + dw = dw->next; + } + + if (!dw) { + dw = MEM_new("ParticleDupliWeight"); + dw->ob = object; + dw->count = 1; + BLI_addtail(&part->instance_weights, dw); + } + + dw->index = index++; + } + FOREACH_COLLECTION_OBJECT_RECURSIVE_END; + + /* Ensure there is an element marked as current. */ + int current = 0; + for (ParticleDupliWeight &dw : part->instance_weights) { + if (dw.flag & PART_DUPLIW_CURRENT) { + current = 1; + break; + } + } + + if (!current) { + dw = static_cast(part->instance_weights.first); + if (dw) { + dw->flag |= PART_DUPLIW_CURRENT; + } + } +} + +int psys_uses_gravity(ParticleSimulationData *sim) +{ + return sim->scene->physics_settings.flag & PHYS_GLOBAL_GRAVITY && sim->psys->part && + sim->psys->part->effector_weights->global_gravity != 0.0f; +} + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Freeing Stuff + * \{ */ + +static void fluid_free_settings(SPHFluidSettings *fluid) +{ + if (fluid) { + MEM_delete(fluid); + } +} + +void free_hair(Object *object, ParticleSystem *psys, int dynamics) +{ + PARTICLE_P; + + LOOP_PARTICLES + { + MEM_SAFE_DELETE(pa->hair); + pa->totkey = 0; + } + + psys->flag &= ~PSYS_HAIR_DONE; + + if (psys->clmd) { + if (dynamics) { + BKE_modifier_free(reinterpret_cast(psys->clmd)); + psys->clmd = nullptr; + PTCacheID pid; + BKE_ptcache_id_from_particles(&pid, object, psys); + BKE_ptcache_id_clear(&pid, PTCACHE_CLEAR_ALL, 0); + } + else { + cloth_free_modifier(psys->clmd); + } + } + + if (psys->hair_in_mesh) { + BKE_id_free(nullptr, psys->hair_in_mesh); + } + psys->hair_in_mesh = nullptr; + + if (psys->hair_out_mesh) { + BKE_id_free(nullptr, psys->hair_out_mesh); + } + psys->hair_out_mesh = nullptr; +} +void free_keyed_keys(ParticleSystem *psys) +{ + PARTICLE_P; + + if (psys->part->type == PART_HAIR) { + return; + } + + if (psys->particles && psys->particles->keys) { + MEM_delete(psys->particles->keys); + + LOOP_PARTICLES + { + if (pa->keys) { + pa->keys = nullptr; + pa->totkey = 0; + } + } + } +} +static void free_child_path_cache(ParticleSystem *psys) +{ + psys_free_path_cache_buffers(psys->childcache, &psys->childcachebufs); + psys->childcache = nullptr; + psys->totchildcache = 0; +} +void psys_free_path_cache(ParticleSystem *psys, PTCacheEdit *edit) +{ + if (edit) { + psys_free_path_cache_buffers(edit->pathcache, &edit->pathcachebufs); + edit->pathcache = nullptr; + edit->totcached = 0; + } + if (psys) { + psys_free_path_cache_buffers(psys->pathcache, &psys->pathcachebufs); + psys->pathcache = nullptr; + psys->totcached = 0; + + free_child_path_cache(psys); + } +} +void psys_free_children(ParticleSystem *psys) +{ + if (psys->child) { + MEM_delete(psys->child); + psys->child = nullptr; + psys->totchild = 0; + } + + free_child_path_cache(psys); +} +void psys_free_particles(ParticleSystem *psys) +{ + PARTICLE_P; + + if (psys->particles) { + /* Even though psys->part should never be nullptr, + * this can happen as an exception during deletion. + * See ID_REMAP_SKIP/FORCE/FLAG_NEVER_NULL_USAGE in BKE_library_remap. */ + if (psys->part && psys->part->type == PART_HAIR) { + LOOP_PARTICLES + { + if (pa->hair) { + MEM_delete(pa->hair); + } + } + } + + if (psys->particles->keys) { + MEM_delete(psys->particles->keys); + } + + if (psys->particles->boid) { + MEM_delete(psys->particles->boid); + } + + MEM_delete(psys->particles); + psys->particles = nullptr; + psys->totpart = 0; + } +} +void psys_free_pdd(ParticleSystem *psys) +{ + if (psys->pdd) { + MEM_SAFE_DELETE(psys->pdd->cdata); + + MEM_SAFE_DELETE(psys->pdd->vdata); + + MEM_SAFE_DELETE(psys->pdd->ndata); + + MEM_SAFE_DELETE(psys->pdd->vedata); + + psys->pdd->totpoint = 0; + psys->pdd->totpart = 0; + psys->pdd->partsize = 0; + } +} +void psys_free(Object *ob, ParticleSystem *psys) +{ + if (psys) { + int nr = 0; + + psys_free_path_cache(psys, nullptr); + + /* NOTE: We pass dynamics=0 to free_hair() to prevent it from doing an + * unneeded clear of the cache. But for historical reason that code path + * was only clearing cloth part of modifier data. + * + * Part of the story there is that particle evaluation is trying to not + * re-allocate thew ModifierData itself, and limits all allocations to + * the cloth part of it. + * + * Why evaluation is relying on hair_free() and in some specific code + * paths there is beyond me. + */ + free_hair(ob, psys, 0); + if (psys->clmd != nullptr) { + BKE_modifier_free(reinterpret_cast(psys->clmd)); + } + + psys_free_particles(psys); + + if (psys->edit && psys->free_edit) { + psys->free_edit(psys->edit); + } + + if (psys->child) { + MEM_delete(psys->child); + psys->child = nullptr; + psys->totchild = 0; + } + + /* check if we are last non-visible particle system */ + for (ParticleSystem &tpsys : ob->particlesystem) { + if (tpsys.part) { + if (ELEM(tpsys.part->ren_as, PART_DRAW_OB, PART_DRAW_GR)) { + nr++; + break; + } + } + } + /* clear do-not-draw-flag */ + if (!nr) { + ob->transflag &= ~OB_DUPLIPARTS; + } + + psys->part = nullptr; + + if ((psys->flag & PSYS_SHARED_CACHES) == 0) { + BKE_ptcache_free_list(&psys->ptcaches); + } + psys->pointcache = nullptr; + + psys->targets.free_no_destruct(); + + BLI_bvhtree_free(psys->bvhtree); + kdtree_free(psys->tree); + + if (psys->fluid_springs) { + MEM_delete(psys->fluid_springs); + } + + BKE_effectors_free(psys->effectors); + + if (psys->pdd) { + psys_free_pdd(psys); + MEM_delete(psys->pdd); + } + + BKE_particle_batch_cache_free(psys); + + MEM_delete(psys); + } +} + +void psys_copy_particles(ParticleSystem *psys_dst, ParticleSystem *psys_src) +{ + /* Free existing particles. */ + if (psys_dst->particles != psys_src->particles) { + psys_free_particles(psys_dst); + } + if (psys_dst->child != psys_src->child) { + psys_free_children(psys_dst); + } + /* Restore counters. */ + psys_dst->totpart = psys_src->totpart; + psys_dst->totchild = psys_src->totchild; + /* Copy particles and children. */ + psys_dst->particles = MEM_dupalloc(psys_src->particles); + psys_dst->child = MEM_dupalloc(psys_src->child); + + /* Ideally this should only be performed if `(psys_dst->part->type == PART_HAIR)`. + * + * But #ParticleData (`psys_dst`) is some sub-data of the #Object ID, while #ParticleSettings + * (`psys_dst->part`) is another ID. In case the particle settings is a linked ID that gets + * missing, it will be replaced (in readfile code) by a place-holder, which defaults to a + * `PART_EMITTER` type of particle settings. + * + * This leads to a situation where each particle of `psys_dst` still has a valid allocated `hair` + * data, which should still be preserved in case the missing particle settings ID becomes valid + * again. + * + * Furthermore, #free_hair() always frees `pa->hair` if it's not nullptr, regardless of the + * particle type. So *not* copying here would cause a double free (or more), e.g. freeing the + * copy-on-evaluation copy and the original data will crash Blender. + * In any case, sharing pointers between `psys_src` and `psys_dst` should be forbidden. + * + * So while we could in theory 'sanitize' the situation by setting `pa->hair` to nullptr in the + * new copy (in case of non-`PART_HAIR` type), it is probably safer for now to systematically + * duplicate the `hair` data if available. */ + { + ParticleData *pa; + int p; + for (p = 0, pa = psys_dst->particles; p < psys_dst->totpart; p++, pa++) { + pa->hair = MEM_dupalloc(pa->hair); + } + } + if (psys_dst->particles && (psys_dst->particles->keys || psys_dst->particles->boid)) { + ParticleKey *key = psys_dst->particles->keys; + BoidParticle *boid = psys_dst->particles->boid; + ParticleData *pa; + int p; + if (key != nullptr) { + key = MEM_dupalloc(key); + } + if (boid != nullptr) { + boid = MEM_dupalloc(boid); + } + for (p = 0, pa = psys_dst->particles; p < psys_dst->totpart; p++, pa++) { + if (boid != nullptr) { + pa->boid = boid++; + } + if (key != nullptr) { + pa->keys = key; + key += pa->totkey; + } + } + } +} + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Interpolation + * \{ */ + +static float interpolate_particle_value( + float v1, float v2, float v3, float v4, const float w[4], int four) +{ + float value; + + value = w[0] * v1 + w[1] * v2 + w[2] * v3; + if (four) { + value += w[3] * v4; + } + + CLAMP(value, 0.0f, 1.0f); + + return value; +} + +void psys_interpolate_particle( + short type, ParticleKey keys[4], float dt, ParticleKey *result, bool velocity) +{ + float t[4]; + + if (type < 0) { + interp_cubic_v3(result->co, result->vel, keys[1].co, keys[1].vel, keys[2].co, keys[2].vel, dt); + } + else { + key_curve_position_weights(dt, t, KeyInterpolationType(type)); + + interp_v3_v3v3v3v3(result->co, keys[0].co, keys[1].co, keys[2].co, keys[3].co, t); + + if (velocity) { + float temp[3]; + + if (dt > 0.999f) { + key_curve_position_weights(dt - 0.001f, t, KeyInterpolationType(type)); + interp_v3_v3v3v3v3(temp, keys[0].co, keys[1].co, keys[2].co, keys[3].co, t); + sub_v3_v3v3(result->vel, result->co, temp); + } + else { + key_curve_position_weights(dt + 0.001f, t, KeyInterpolationType(type)); + interp_v3_v3v3v3v3(temp, keys[0].co, keys[1].co, keys[2].co, keys[3].co, t); + sub_v3_v3v3(result->vel, temp, result->co); + } + } + } +} + +struct ParticleInterpolationData { + HairKey *hkey[2]; + + Mesh *mesh; + float3 *vert_positions[2]; + + int keyed; + ParticleKey *kkey[2]; + + PointCache *cache; + PTCacheMem *pm; + + PTCacheEditPoint *epoint; + PTCacheEditKey *ekey[2]; + + float birthtime; + /** Die on this frame, see #ParticleData.dietime for details. */ + float dietime; + int bspline; +}; +/** + * Assumes pointcache->mem_cache exists, so for disk cached particles + * call #psys_make_temp_pointcache() before use. + * It uses #ParticleInterpolationData.pm to store the current memory cache frame + * so it's thread safe. + */ +static void get_pointcache_keys_for_time(Object * /*ob*/, + PointCache *cache, + PTCacheMem **cur, + int index, + float t, + ParticleKey *key1, + ParticleKey *key2) +{ + static PTCacheMem *pm = nullptr; + int index1, index2; + + if (index < 0) { /* initialize */ + *cur = static_cast(cache->mem_cache.first); + + if (*cur) { + *cur = (*cur)->next; + } + } + else { + if (*cur) { + while (*cur && (*cur)->next && float((*cur)->frame) < t) { + *cur = (*cur)->next; + } + + pm = *cur; + + index2 = BKE_ptcache_mem_index_find(pm, index); + index1 = BKE_ptcache_mem_index_find(pm->prev, index); + if (index2 < 0) { + return; + } + + BKE_ptcache_make_particle_key(key2, index2, pm->data, float(pm->frame)); + if (index1 < 0) { + copy_particle_key(key1, key2, 1); + } + else { + BKE_ptcache_make_particle_key(key1, index1, pm->prev->data, float(pm->prev->frame)); + } + } + else if (cache->mem_cache.first) { + pm = static_cast(cache->mem_cache.first); + index2 = BKE_ptcache_mem_index_find(pm, index); + if (index2 < 0) { + return; + } + BKE_ptcache_make_particle_key(key2, index2, pm->data, float(pm->frame)); + copy_particle_key(key1, key2, 1); + } + } +} +static int get_pointcache_times_for_particle(PointCache *cache, + int index, + float *r_start, + float *r_dietime) +{ + int ret = 0; + + for (PTCacheMem &pm : cache->mem_cache) { + if (BKE_ptcache_mem_index_find(&pm, index) >= 0) { + *r_start = pm.frame; + ret++; + break; + } + } + + for (PTCacheMem &pm : cache->mem_cache.items_reversed()) { + if (BKE_ptcache_mem_index_find(&pm, index) >= 0) { + /* Die *after* the last available frame. */ + *r_dietime = pm.frame + 1; + ret++; + break; + } + } + + return ret == 2; +} + +float psys_get_dietime_from_cache(PointCache *cache, int index) +{ + int dietime = 10000000; /* some max value so that we can default to pa->time+lifetime */ + + for (PTCacheMem &pm : cache->mem_cache.items_reversed()) { + if (BKE_ptcache_mem_index_find(&pm, index) >= 0) { + /* Die *after* the last available frame. */ + dietime = pm.frame + 1; + break; + } + } + + return float(dietime); +} + +static void init_particle_interpolation(Object *ob, + ParticleSystem *psys, + ParticleData *pa, + ParticleInterpolationData *pind) +{ + + if (pind->epoint) { + PTCacheEditPoint *point = pind->epoint; + + pind->ekey[0] = point->keys; + pind->ekey[1] = point->totkey > 1 ? point->keys + 1 : nullptr; + + pind->birthtime = *(point->keys->time); + pind->dietime = *((point->keys + point->totkey - 1)->time); + } + else if (pind->keyed) { + ParticleKey *key = pa->keys; + pind->kkey[0] = key; + pind->kkey[1] = pa->totkey > 1 ? key + 1 : nullptr; + + pind->birthtime = key->time; + pind->dietime = (key + pa->totkey - 1)->time; + } + else if (pind->cache) { + float start = 0.0f, dietime = 0.0f; + get_pointcache_keys_for_time(ob, pind->cache, &pind->pm, -1, 0.0f, nullptr, nullptr); + pind->birthtime = pa ? pa->time : pind->cache->startframe; + pind->dietime = pa ? pa->dietime : (pind->cache->endframe + 1); + + if (get_pointcache_times_for_particle(pind->cache, pa - psys->particles, &start, &dietime)) { + pind->birthtime = std::max(pind->birthtime, start); + pind->dietime = std::min(pind->dietime, dietime); + } + } + else { + HairKey *key = pa->hair; + pind->hkey[0] = key; + pind->hkey[1] = key + 1; + + pind->birthtime = key->time; + pind->dietime = (key + pa->totkey - 1)->time; + + if (pind->mesh) { + float3 *positions = pind->mesh->vert_positions_for_write().data(); + pind->vert_positions[0] = &positions[pa->hair_index]; + pind->vert_positions[1] = pind->vert_positions[0] + 1; + } + } +} +static void edit_to_particle(ParticleKey *key, PTCacheEditKey *ekey) +{ + copy_v3_v3(key->co, ekey->co); + if (ekey->vel) { + copy_v3_v3(key->vel, ekey->vel); + } + key->time = *(ekey->time); +} +static void hair_to_particle(ParticleKey *key, HairKey *hkey) +{ + copy_v3_v3(key->co, hkey->co); + key->time = hkey->time; +} + +static void mvert_to_particle(ParticleKey *key, float3 *position, HairKey *hkey) +{ + copy_v3_v3(key->co, *position); + key->time = hkey->time; +} + +static void do_particle_interpolation(ParticleSystem *psys, + int p, + ParticleData *pa, + float t, + ParticleInterpolationData *pind, + ParticleKey *result) +{ + PTCacheEditPoint *point = pind->epoint; + int point_vel = (point && point->keys->vel); + float real_t, dfra, keytime, invdt = 1.0f; + + /* billboards won't fill in all of these, so start cleared */ + ParticleKey keys[4] = {}; + + /* interpret timing and find keys */ + if (point) { + if (result->time < 0.0f) { + real_t = -result->time; + } + else { + real_t = *(pind->ekey[0]->time) + + t * (*(pind->ekey[0][point->totkey - 1].time) - *(pind->ekey[0]->time)); + } + + while (*(pind->ekey[1]->time) < real_t) { + pind->ekey[1]++; + } + + pind->ekey[0] = pind->ekey[1] - 1; + } + else if (pind->keyed) { + /* we have only one key, so let's use that */ + if (pind->kkey[1] == nullptr) { + copy_particle_key(result, pind->kkey[0], 1); + return; + } + + if (result->time < 0.0f) { + real_t = -result->time; + } + else { + real_t = pind->kkey[0]->time + + t * (pind->kkey[0][pa->totkey - 1].time - pind->kkey[0]->time); + } + + if (psys->part->phystype == PART_PHYS_KEYED && psys->flag & PSYS_KEYED_TIMING) { + ParticleTarget *pt = static_cast(psys->targets.first); + + pt = pt->next; + + while (pt && pa->time + pt->time < real_t) { + pt = pt->next; + } + + if (pt) { + pt = pt->prev; + + if (pa->time + pt->time + pt->duration > real_t) { + real_t = pa->time + pt->time; + } + } + else { + real_t = pa->time + (static_cast(psys->targets.last))->time; + } + } + + CLAMP(real_t, pa->time, pa->dietime); + + while (pind->kkey[1]->time < real_t) { + pind->kkey[1]++; + } + + pind->kkey[0] = pind->kkey[1] - 1; + } + else if (pind->cache) { + if (result->time < 0.0f) { /* flag for time in frames */ + real_t = -result->time; + } + else { + real_t = pa->time + t * (pa->dietime - pa->time); + } + } + else { + if (result->time < 0.0f) { + real_t = -result->time; + } + else { + real_t = pind->hkey[0]->time + + t * (pind->hkey[0][pa->totkey - 1].time - pind->hkey[0]->time); + } + + while (pind->hkey[1]->time < real_t) { + pind->hkey[1]++; + if (pind->mesh) { + pind->vert_positions[1]++; + } + } + + pind->hkey[0] = pind->hkey[1] - 1; + } + + /* set actual interpolation keys */ + if (point) { + edit_to_particle(keys + 1, pind->ekey[0]); + edit_to_particle(keys + 2, pind->ekey[1]); + } + else if (pind->mesh) { + pind->vert_positions[0] = pind->vert_positions[1] - 1; + mvert_to_particle(keys + 1, pind->vert_positions[0], pind->hkey[0]); + mvert_to_particle(keys + 2, pind->vert_positions[1], pind->hkey[1]); + } + else if (pind->keyed) { + memcpy(keys + 1, pind->kkey[0], sizeof(ParticleKey)); + memcpy(keys + 2, pind->kkey[1], sizeof(ParticleKey)); + } + else if (pind->cache) { + get_pointcache_keys_for_time(nullptr, pind->cache, &pind->pm, p, real_t, keys + 1, keys + 2); + } + else { + hair_to_particle(keys + 1, pind->hkey[0]); + hair_to_particle(keys + 2, pind->hkey[1]); + } + + /* set secondary interpolation keys for hair */ + if (!pind->keyed && !pind->cache && !point_vel) { + if (point) { + if (pind->ekey[0] != point->keys) { + edit_to_particle(keys, pind->ekey[0] - 1); + } + else { + edit_to_particle(keys, pind->ekey[0]); + } + } + else if (pind->mesh) { + if (pind->hkey[0] != pa->hair) { + mvert_to_particle(keys, pind->vert_positions[0] - 1, pind->hkey[0] - 1); + } + else { + mvert_to_particle(keys, pind->vert_positions[0], pind->hkey[0]); + } + } + else { + if (pind->hkey[0] != pa->hair) { + hair_to_particle(keys, pind->hkey[0] - 1); + } + else { + hair_to_particle(keys, pind->hkey[0]); + } + } + + if (point) { + if (pind->ekey[1] != point->keys + point->totkey - 1) { + edit_to_particle(keys + 3, pind->ekey[1] + 1); + } + else { + edit_to_particle(keys + 3, pind->ekey[1]); + } + } + else if (pind->mesh) { + if (pind->hkey[1] != pa->hair + pa->totkey - 1) { + mvert_to_particle(keys + 3, pind->vert_positions[1] + 1, pind->hkey[1] + 1); + } + else { + mvert_to_particle(keys + 3, pind->vert_positions[1], pind->hkey[1]); + } + } + else { + if (pind->hkey[1] != pa->hair + pa->totkey - 1) { + hair_to_particle(keys + 3, pind->hkey[1] + 1); + } + else { + hair_to_particle(keys + 3, pind->hkey[1]); + } + } + } + + dfra = keys[2].time - keys[1].time; + keytime = (real_t - keys[1].time) / dfra; + + /* Convert velocity to time-step size. */ + if (pind->keyed || pind->cache || point_vel) { + invdt = dfra * 0.04f * (psys ? psys->part->timetweak : 1.0f); + mul_v3_fl(keys[1].vel, invdt); + mul_v3_fl(keys[2].vel, invdt); + interp_qt_qtqt(result->rot, keys[1].rot, keys[2].rot, keytime); + } + + /* Now we should have in chronological order k1<=k2<=t<=k3<=k4 with key-time between + * [0, 1]->[k2, k3] (k1 & k4 used for cardinal & b-spline interpolation). */ + psys_interpolate_particle((pind->keyed || pind->cache || point_vel) ? + -1 /* signal for cubic interpolation */ + : + (pind->bspline ? KEY_BSPLINE : KEY_CARDINAL), + keys, + keytime, + result, + true); + + /* the velocity needs to be converted back from cubic interpolation */ + if (pind->keyed || pind->cache || point_vel) { + mul_v3_fl(result->vel, 1.0f / invdt); + } +} + +static void interpolate_pathcache(ParticleCacheKey *first, float t, ParticleCacheKey *result) +{ + int i = 0; + ParticleCacheKey *cur = first; + + /* scale the requested time to fit the entire path even if the path is cut early */ + t *= (first + first->segments)->time; + + while (i < first->segments && cur->time < t) { + cur++; + } + + if (cur->time == t) { + *result = *cur; + } + else { + float dt = (t - (cur - 1)->time) / (cur->time - (cur - 1)->time); + interp_v3_v3v3(result->co, (cur - 1)->co, cur->co, dt); + interp_v3_v3v3(result->vel, (cur - 1)->vel, cur->vel, dt); + interp_qt_qtqt(result->rot, (cur - 1)->rot, cur->rot, dt); + result->time = t; + } + + /* first is actual base rotation, others are incremental from first */ + if (cur == first || cur - 1 == first) { + copy_qt_qt(result->rot, first->rot); + } + else { + mul_qt_qtqt(result->rot, first->rot, result->rot); + } +} + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Particles on a DM + * \{ */ + +void psys_interpolate_face(Mesh *mesh, + const float (*vert_positions)[3], + const float (*vert_normals)[3], + const MFace *mface, + MTFace *tface, + const float (*orcodata)[3], + float w[4], + float vec[3], + float nor[3], + float utan[3], + float vtan[3], + float orco[3]) +{ + const float *v1 = nullptr, *v2 = nullptr, *v3 = nullptr, *v4 = nullptr; + float e1[3], e2[3], s1, s2, t1, t2; + float *uv1, *uv2, *uv3, *uv4; + float n1[3], n2[3], n3[3], n4[3]; + float tuv[4][2]; + const float *o1, *o2, *o3, *o4; + + v1 = vert_positions[mface->v1]; + v2 = vert_positions[mface->v2]; + v3 = vert_positions[mface->v3]; + + copy_v3_v3(n1, vert_normals[mface->v1]); + copy_v3_v3(n2, vert_normals[mface->v2]); + copy_v3_v3(n3, vert_normals[mface->v3]); + + if (mface->v4) { + v4 = vert_positions[mface->v4]; + copy_v3_v3(n4, vert_normals[mface->v4]); + + interp_v3_v3v3v3v3(vec, v1, v2, v3, v4, w); + + if (nor) { + if (mface->flag & ME_SMOOTH) { + interp_v3_v3v3v3v3(nor, n1, n2, n3, n4, w); + } + else { + normal_quad_v3(nor, v1, v2, v3, v4); + } + } + } + else { + interp_v3_v3v3v3(vec, v1, v2, v3, w); + + if (nor) { + if (mface->flag & ME_SMOOTH) { + interp_v3_v3v3v3(nor, n1, n2, n3, w); + } + else { + normal_tri_v3(nor, v1, v2, v3); + } + } + } + + /* calculate tangent vectors */ + if (utan && vtan) { + if (tface) { + uv1 = tface->uv[0]; + uv2 = tface->uv[1]; + uv3 = tface->uv[2]; + uv4 = tface->uv[3]; + } + else { + uv1 = tuv[0]; + uv2 = tuv[1]; + uv3 = tuv[2]; + uv4 = tuv[3]; + map_to_sphere(uv1, uv1 + 1, v1[0], v1[1], v1[2]); + map_to_sphere(uv2, uv2 + 1, v2[0], v2[1], v2[2]); + map_to_sphere(uv3, uv3 + 1, v3[0], v3[1], v3[2]); + if (v4) { + map_to_sphere(uv4, uv4 + 1, v4[0], v4[1], v4[2]); + } + } + + if (v4) { + s1 = uv3[0] - uv1[0]; + s2 = uv4[0] - uv1[0]; + + t1 = uv3[1] - uv1[1]; + t2 = uv4[1] - uv1[1]; + + sub_v3_v3v3(e1, v3, v1); + sub_v3_v3v3(e2, v4, v1); + } + else { + s1 = uv2[0] - uv1[0]; + s2 = uv3[0] - uv1[0]; + + t1 = uv2[1] - uv1[1]; + t2 = uv3[1] - uv1[1]; + + sub_v3_v3v3(e1, v2, v1); + sub_v3_v3v3(e2, v3, v1); + } + + vtan[0] = (s1 * e2[0] - s2 * e1[0]); + vtan[1] = (s1 * e2[1] - s2 * e1[1]); + vtan[2] = (s1 * e2[2] - s2 * e1[2]); + + utan[0] = (t1 * e2[0] - t2 * e1[0]); + utan[1] = (t1 * e2[1] - t2 * e1[1]); + utan[2] = (t1 * e2[2] - t2 * e1[2]); + } + + if (orco) { + if (orcodata) { + o1 = orcodata[mface->v1]; + o2 = orcodata[mface->v2]; + o3 = orcodata[mface->v3]; + + if (mface->v4) { + o4 = orcodata[mface->v4]; + + interp_v3_v3v3v3v3(orco, o1, o2, o3, o4, w); + } + else { + interp_v3_v3v3v3(orco, o1, o2, o3, w); + } + BKE_mesh_orco_verts_transform(mesh, reinterpret_cast(orco), 1, true); + } + else { + copy_v3_v3(orco, vec); + } + } +} +void psys_interpolate_uvs(const MTFace *tface, int quad, const float w[4], float r_uv[2]) +{ + float v10 = tface->uv[0][0]; + float v11 = tface->uv[0][1]; + float v20 = tface->uv[1][0]; + float v21 = tface->uv[1][1]; + float v30 = tface->uv[2][0]; + float v31 = tface->uv[2][1]; + float v40, v41; + + if (quad) { + v40 = tface->uv[3][0]; + v41 = tface->uv[3][1]; + + r_uv[0] = w[0] * v10 + w[1] * v20 + w[2] * v30 + w[3] * v40; + r_uv[1] = w[0] * v11 + w[1] * v21 + w[2] * v31 + w[3] * v41; + } + else { + r_uv[0] = w[0] * v10 + w[1] * v20 + w[2] * v30; + r_uv[1] = w[0] * v11 + w[1] * v21 + w[2] * v31; + } +} + +void psys_interpolate_mcol(const MCol *mcol, int quad, const float w[4], MCol *mc) +{ + const char *cp1, *cp2, *cp3, *cp4; + char *cp; + + cp = reinterpret_cast(mc); + cp1 = reinterpret_cast(&mcol[0]); + cp2 = reinterpret_cast(&mcol[1]); + cp3 = reinterpret_cast(&mcol[2]); + + if (quad) { + cp4 = reinterpret_cast(const_cast(&mcol[3])); + + cp[0] = int(w[0] * cp1[0] + w[1] * cp2[0] + w[2] * cp3[0] + w[3] * cp4[0]); + cp[1] = int(w[0] * cp1[1] + w[1] * cp2[1] + w[2] * cp3[1] + w[3] * cp4[1]); + cp[2] = int(w[0] * cp1[2] + w[1] * cp2[2] + w[2] * cp3[2] + w[3] * cp4[2]); + cp[3] = int(w[0] * cp1[3] + w[1] * cp2[3] + w[2] * cp3[3] + w[3] * cp4[3]); + } + else { + cp[0] = int(w[0] * cp1[0] + w[1] * cp2[0] + w[2] * cp3[0]); + cp[1] = int(w[0] * cp1[1] + w[1] * cp2[1] + w[2] * cp3[1]); + cp[2] = int(w[0] * cp1[2] + w[1] * cp2[2] + w[2] * cp3[2]); + cp[3] = int(w[0] * cp1[3] + w[1] * cp2[3] + w[2] * cp3[3]); + } +} + +static float psys_interpolate_value_from_verts( + Mesh *mesh, short from, int index, const float fw[4], const float *values) +{ + if (values == nullptr || index == -1) { + return 0.0; + } + + switch (from) { + case PART_FROM_VERT: + return values[index]; + case PART_FROM_FACE: + case PART_FROM_VOLUME: { + MFace *mfaces = static_cast( + CustomData_get_layer_for_write(&mesh->fdata_legacy, CD_MFACE, mesh->totface_legacy)); + MFace *mf = &mfaces[index]; + return interpolate_particle_value( + values[mf->v1], values[mf->v2], values[mf->v3], values[mf->v4], fw, mf->v4); + } + } + return 0.0f; +} + +/* conversion of pa->fw to origspace layer coordinates */ +static void psys_w_to_origspace(const float w[4], float uv[2]) +{ + uv[0] = w[1] + w[2]; + uv[1] = w[2] + w[3]; +} + +/* conversion of pa->fw to weights in face from origspace */ +static void psys_origspace_to_w(OrigSpaceFace *osface, int quad, const float w[4], float neww[4]) +{ + float v[4][3], co[3]; + + v[0][0] = osface->uv[0][0]; + v[0][1] = osface->uv[0][1]; + v[0][2] = 0.0f; + v[1][0] = osface->uv[1][0]; + v[1][1] = osface->uv[1][1]; + v[1][2] = 0.0f; + v[2][0] = osface->uv[2][0]; + v[2][1] = osface->uv[2][1]; + v[2][2] = 0.0f; + + psys_w_to_origspace(w, co); + co[2] = 0.0f; + + if (quad) { + v[3][0] = osface->uv[3][0]; + v[3][1] = osface->uv[3][1]; + v[3][2] = 0.0f; + interp_weights_poly_v3(neww, v, 4, co); + } + else { + interp_weights_poly_v3(neww, v, 3, co); + neww[3] = 0.0f; + } +} + +int psys_particle_dm_face_lookup(Mesh *mesh_final, + Mesh *mesh_original, + int findex_orig, + const float fw[4], + LinkNode **poly_nodes) +{ + MFace *mtessface_final; + const OrigSpaceFace *osface_final; + int pindex_orig; + float uv[2]; + const float (*faceuv)[2]; + + const int *index_mf_to_mpoly_deformed = nullptr; + const int *index_mf_to_mpoly = nullptr; + const int *index_mp_to_orig = nullptr; + + const int totface_final = mesh_final->totface_legacy; + const int totface_deformed = mesh_original ? mesh_original->totface_legacy : totface_final; + + if (ELEM(0, totface_final, totface_deformed)) { + return DMCACHE_NOTFOUND; + } + + index_mf_to_mpoly = static_cast( + CustomData_get_layer(&mesh_final->fdata_legacy, CD_ORIGINDEX)); + index_mp_to_orig = static_cast( + CustomData_get_layer(&mesh_final->face_data, CD_ORIGINDEX)); + BLI_assert(index_mf_to_mpoly); + + if (mesh_original) { + index_mf_to_mpoly_deformed = static_cast( + CustomData_get_layer(&mesh_original->fdata_legacy, CD_ORIGINDEX)); + } + else { + BLI_assert(mesh_final->runtime->deformed_only); + index_mf_to_mpoly_deformed = index_mf_to_mpoly; + } + BLI_assert(index_mf_to_mpoly_deformed); + + pindex_orig = index_mf_to_mpoly_deformed[findex_orig]; + + if (mesh_original == nullptr) { + mesh_original = mesh_final; + } + + index_mf_to_mpoly_deformed = nullptr; + + mtessface_final = static_cast(CustomData_get_layer_for_write( + &mesh_final->fdata_legacy, CD_MFACE, mesh_final->totface_legacy)); + osface_final = static_cast(CustomData_get_layer_for_write( + &mesh_final->fdata_legacy, CD_ORIGSPACE, mesh_final->totface_legacy)); + + if (osface_final == nullptr) { + /* Assume we don't need osface_final data, and we get a direct 1-1 mapping... */ + if (findex_orig < totface_final) { + // printf("\tNO CD_ORIGSPACE, assuming not needed\n"); + return findex_orig; + } + + printf("\tNO CD_ORIGSPACE, error out of range\n"); + return DMCACHE_NOTFOUND; + } + if (findex_orig >= mesh_original->totface_legacy) { + return DMCACHE_NOTFOUND; /* index not in the original mesh */ + } + + psys_w_to_origspace(fw, uv); + + if (poly_nodes) { + /* we can have a restricted linked list of faces to check, faster! */ + LinkNode *tessface_node = poly_nodes[pindex_orig]; + + for (; tessface_node; tessface_node = tessface_node->next) { + int findex_dst = POINTER_AS_INT(tessface_node->link); + faceuv = osface_final[findex_dst].uv; + + /* check that this intersects - Its possible this misses :/ - + * could also check its not between */ + if (mtessface_final[findex_dst].v4) { + if (isect_point_quad_v2(uv, faceuv[0], faceuv[1], faceuv[2], faceuv[3])) { + return findex_dst; + } + } + else if (isect_point_tri_v2(uv, faceuv[0], faceuv[1], faceuv[2])) { + return findex_dst; + } + } + } + else { /* if we have no node, try every face */ + for (int findex_dst = 0; findex_dst < totface_final; findex_dst++) { + /* If current tessface from 'final' DM and orig tessface (given by index) + * map to the same orig poly. */ + if (BKE_mesh_origindex_mface_mpoly(index_mf_to_mpoly, index_mp_to_orig, findex_dst) == + pindex_orig) + { + faceuv = osface_final[findex_dst].uv; + + /* check that this intersects - Its possible this misses :/ - + * could also check its not between */ + if (mtessface_final[findex_dst].v4) { + if (isect_point_quad_v2(uv, faceuv[0], faceuv[1], faceuv[2], faceuv[3])) { + return findex_dst; + } + } + else if (isect_point_tri_v2(uv, faceuv[0], faceuv[1], faceuv[2])) { + return findex_dst; + } + } + } + } + + return DMCACHE_NOTFOUND; +} + +static int psys_map_index_on_dm(Mesh *mesh, + int from, + int index, + int index_dmcache, + const float fw[4], + float /*foffset*/, + int *mapindex, + float mapfw[4]) +{ + if (index < 0) { + return 0; + } + + if (mesh->runtime->deformed_only || index_dmcache == DMCACHE_ISCHILD) { + /* for meshes that are either only deformed or for child particles, the + * index and fw do not require any mapping, so we can directly use it */ + if (from == PART_FROM_VERT) { + if (index >= mesh->verts_num) { + return 0; + } + + *mapindex = index; + } + else { /* FROM_FACE/FROM_VOLUME */ + if (index >= mesh->totface_legacy) { + return 0; + } + + *mapindex = index; + copy_v4_v4(mapfw, fw); + } + } + else { + /* for other meshes that have been modified, we try to map the particle + * to their new location, which means a different index, and for faces + * also a new face interpolation weights */ + if (from == PART_FROM_VERT) { + if (index_dmcache == DMCACHE_NOTFOUND || index_dmcache >= mesh->verts_num) { + return 0; + } + + *mapindex = index_dmcache; + } + else { /* FROM_FACE/FROM_VOLUME */ + /* find a face on the derived mesh that uses this face */ + int i = index_dmcache; + + if (i == DMCACHE_NOTFOUND || i >= mesh->totface_legacy) { + return 0; + } + + *mapindex = i; + + /* modify the original weights to become + * weights for the derived mesh face */ + OrigSpaceFace *osface = static_cast( + CustomData_get_layer_for_write(&mesh->fdata_legacy, CD_ORIGSPACE, mesh->totface_legacy)); + const MFace *mfaces = static_cast( + CustomData_get_layer(&mesh->fdata_legacy, CD_MFACE)); + const MFace *mface = &mfaces[i]; + + if (osface == nullptr) { + mapfw[0] = mapfw[1] = mapfw[2] = mapfw[3] = 0.0f; + } + else { + psys_origspace_to_w(&osface[i], mface->v4, fw, mapfw); + } + } + } + + return 1; +} + +void psys_particle_on_dm(Mesh *mesh_final, + int from, + int index, + int index_dmcache, + const float fw[4], + float foffset, + float vec[3], + float nor[3], + float utan[3], + float vtan[3], + float orco[3]) +{ + float tmpnor[3], mapfw[4]; + const float (*orcodata)[3]; + int mapindex; + + if (!psys_map_index_on_dm(mesh_final, from, index, index_dmcache, fw, foffset, &mapindex, mapfw)) + { + if (vec) { + vec[0] = vec[1] = vec[2] = 0.0; + } + if (nor) { + nor[0] = nor[1] = 0.0; + nor[2] = 1.0; + } + if (orco) { + orco[0] = orco[1] = orco[2] = 0.0; + } + if (utan) { + utan[0] = utan[1] = utan[2] = 0.0; + } + if (vtan) { + vtan[0] = vtan[1] = vtan[2] = 0.0; + } + + return; + } + + orcodata = static_cast( + CustomData_get_layer(&mesh_final->vert_data, CD_ORCO)); + const Span vert_normals = mesh_final->vert_normals(); + + if (from == PART_FROM_VERT) { + const Span vert_positions = mesh_final->vert_positions(); + copy_v3_v3(vec, vert_positions[mapindex]); + + if (nor) { + copy_v3_v3(nor, vert_normals[mapindex]); + } + + if (orco) { + if (orcodata) { + copy_v3_v3(orco, orcodata[mapindex]); + BKE_mesh_orco_verts_transform(mesh_final, reinterpret_cast(orco), 1, true); + } + else { + copy_v3_v3(orco, vec); + } + } + + if (utan && vtan) { + utan[0] = utan[1] = utan[2] = 0.0f; + vtan[0] = vtan[1] = vtan[2] = 0.0f; + } + } + else { /* PART_FROM_FACE / PART_FROM_VOLUME */ + MFace *mface; + MTFace *mtface; + + MFace *mfaces = static_cast(CustomData_get_layer_for_write( + &mesh_final->fdata_legacy, CD_MFACE, mesh_final->totface_legacy)); + mface = &mfaces[mapindex]; + const Span vert_positions = mesh_final->vert_positions(); + mtface = static_cast(CustomData_get_layer_for_write( + &mesh_final->fdata_legacy, CD_MTFACE, mesh_final->totface_legacy)); + + if (mtface) { + mtface += mapindex; + } + + if (from == PART_FROM_VOLUME) { + psys_interpolate_face(mesh_final, + reinterpret_cast(vert_positions.data()), + reinterpret_cast(vert_normals.data()), + mface, + mtface, + orcodata, + mapfw, + vec, + tmpnor, + utan, + vtan, + orco); + if (nor) { + copy_v3_v3(nor, tmpnor); + } + + /* XXX Why not normalize tmpnor before copying it into nor??? -- mont29 */ + normalize_v3(tmpnor); + + mul_v3_fl(tmpnor, -foffset); + add_v3_v3(vec, tmpnor); + } + else { + psys_interpolate_face(mesh_final, + reinterpret_cast(vert_positions.data()), + reinterpret_cast(vert_normals.data()), + mface, + mtface, + orcodata, + mapfw, + vec, + nor, + utan, + vtan, + orco); + } + } +} + +float psys_particle_value_from_verts(Mesh *mesh, short from, ParticleData *pa, float *values) +{ + float mapfw[4]; + int mapindex; + + if (!psys_map_index_on_dm( + mesh, from, pa->num, pa->num_dmcache, pa->fuv, pa->foffset, &mapindex, mapfw)) + { + return 0.0f; + } + + return psys_interpolate_value_from_verts(mesh, from, mapindex, mapfw, values); +} + +ParticleSystemModifierData *psys_get_modifier(Object *ob, ParticleSystem *psys) +{ + ParticleSystemModifierData *psmd; + + for (ModifierData &md : ob->modifiers) { + if (md.type == eModifierType_ParticleSystem) { + psmd = reinterpret_cast(&md); + if (psmd->psys == psys) { + return psmd; + } + } + } + return nullptr; +} + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Particles on a Shape + * \{ */ + +/* ready for future use */ +static void psys_particle_on_shape(int /*distr*/, + int /*index*/, + float * /*fuv*/, + float vec[3], + float nor[3], + float utan[3], + float vtan[3], + float orco[3]) +{ + /* TODO */ + const float zerovec[3] = {0.0f, 0.0f, 0.0f}; + if (vec) { + copy_v3_v3(vec, zerovec); + } + if (nor) { + copy_v3_v3(nor, zerovec); + } + if (utan) { + copy_v3_v3(utan, zerovec); + } + if (vtan) { + copy_v3_v3(vtan, zerovec); + } + if (orco) { + copy_v3_v3(orco, zerovec); + } +} + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Particles on Emitter + * \{ */ + +void psys_emitter_customdata_mask(ParticleSystem *psys, CustomData_MeshMasks *r_cddata_masks) +{ + MTex *mtex; + int i; + + if (!psys->part) { + return; + } + + for (i = 0; i < MAX_MTEX; i++) { + mtex = psys->part->mtex[i]; + if (mtex && mtex->mapto && (mtex->texco & TEXCO_UV)) { + r_cddata_masks->fmask |= CD_MASK_MTFACE; + } + } + + if (psys->part->tanfac != 0.0f) { + r_cddata_masks->fmask |= CD_MASK_MTFACE; + } + + /* Ask for vertex-groups if we need them. */ + for (i = 0; i < PSYS_TOT_VG; i++) { + if (psys->vgroup[i]) { + r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; + break; + } + } + + /* particles only need this if they are after a non deform modifier, and + * the modifier stack will only create them in that case. */ + r_cddata_masks->lmask |= CD_MASK_ORIGSPACE_MLOOP; + /* XXX Check we do need all those? */ + r_cddata_masks->vmask |= CD_MASK_ORIGINDEX; + r_cddata_masks->emask |= CD_MASK_ORIGINDEX; + r_cddata_masks->pmask |= CD_MASK_ORIGINDEX; + + r_cddata_masks->vmask |= CD_MASK_ORCO; +} + +void psys_particle_on_emitter(ParticleSystemModifierData *psmd, + int from, + int index, + int index_dmcache, + float fuv[4], + float foffset, + float vec[3], + float nor[3], + float utan[3], + float vtan[3], + float orco[3]) +{ + if (psmd && psmd->mesh_final) { + if (psmd->psys->part->distr == PART_DISTR_GRID && psmd->psys->part->from != PART_FROM_VERT) { + if (vec) { + copy_v3_v3(vec, fuv); + } + + if (orco) { + copy_v3_v3(orco, fuv); + } + return; + } + /* we can't use the num_dmcache */ + psys_particle_on_dm( + psmd->mesh_final, from, index, index_dmcache, fuv, foffset, vec, nor, utan, vtan, orco); + } + else { + psys_particle_on_shape(from, index, fuv, vec, nor, utan, vtan, orco); + } +} + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Path Cache + * \{ */ + +void precalc_guides(ParticleSimulationData *sim, ListBaseT *effectors) +{ + EffectedPoint point; + ParticleKey state; + EffectorData efd; + ParticleSystem *psys = sim->psys; + EffectorWeights *weights = sim->psys->part->effector_weights; + GuideEffectorData *data; + PARTICLE_P; + + if (!effectors) { + return; + } + + LOOP_PARTICLES + { + psys_particle_on_emitter(sim->psmd, + sim->psys->part->from, + pa->num, + pa->num_dmcache, + pa->fuv, + pa->foffset, + state.co, + nullptr, + nullptr, + nullptr, + nullptr); + + mul_m4_v3(sim->ob->object_to_world().ptr(), state.co); + mul_mat3_m4_v3(sim->ob->object_to_world().ptr(), state.vel); + + pd_point_from_particle(sim, pa, &state, &point); + + for (EffectorCache &eff : *effectors) { + if (eff.pd->forcefield != PFIELD_GUIDE) { + continue; + } + + if (!eff.guide_data) { + eff.guide_data = MEM_new_array_zeroed(psys->totpart, + "GuideEffectorData"); + } + + data = eff.guide_data + p; + + sub_v3_v3v3(efd.vec_to_point, state.co, eff.guide_loc); + copy_v3_v3(efd.nor, eff.guide_dir); + efd.distance = len_v3(efd.vec_to_point); + + copy_v3_v3(data->vec_to_point, efd.vec_to_point); + data->strength = effector_falloff(&eff, &efd, &point, weights); + } + } +} + +bool do_guides(Depsgraph *depsgraph, + ParticleSettings *part, + ListBaseT *effectors, + ParticleKey *state, + int index, + float time) +{ + CurveMapping *clumpcurve = (part->child_flag & PART_CHILD_USE_CLUMP_CURVE) ? part->clumpcurve : + nullptr; + CurveMapping *roughcurve = (part->child_flag & PART_CHILD_USE_ROUGH_CURVE) ? part->roughcurve : + nullptr; + PartDeflect *pd; + Curve *cu; + GuideEffectorData *data; + + float effect[3] = {0.0f, 0.0f, 0.0f}, veffect[3] = {0.0f, 0.0f, 0.0f}; + float guidevec[4], guidedir[3], rot2[4], temp[3]; + float guidetime, radius, weight, angle, totstrength = 0.0f; + float vec_to_point[3]; + + if (effectors) { + for (EffectorCache &eff : *effectors) { + pd = eff.pd; + + if (pd->forcefield != PFIELD_GUIDE) { + continue; + } + + data = eff.guide_data + index; + + if (data->strength <= 0.0f) { + continue; + } + + guidetime = time / (1.0f - pd->free_end); + + if (guidetime > 1.0f) { + continue; + } + + cu = id_cast(eff.ob->data); + + if (pd->flag & PFIELD_GUIDE_PATH_ADD) { + if (BKE_where_on_path(eff.ob, + data->strength * guidetime, + guidevec, + guidedir, + nullptr, + &radius, + &weight) == 0) + { + return false; + } + } + else { + if (BKE_where_on_path(eff.ob, guidetime, guidevec, guidedir, nullptr, &radius, &weight) == + 0) + { + return false; + } + } + + mul_m4_v3(eff.ob->object_to_world().ptr(), guidevec); + mul_mat3_m4_v3(eff.ob->object_to_world().ptr(), guidedir); + + normalize_v3(guidedir); + + copy_v3_v3(vec_to_point, data->vec_to_point); + + if (guidetime != 0.0f) { + /* curve direction */ + cross_v3_v3v3(temp, eff.guide_dir, guidedir); + angle = dot_v3v3(eff.guide_dir, guidedir) / len_v3(eff.guide_dir); + angle = safe_acosf(angle); + axis_angle_to_quat(rot2, temp, angle); + mul_qt_v3(rot2, vec_to_point); + + /* curve tilt */ + axis_angle_to_quat(rot2, guidedir, guidevec[3] - eff.guide_loc[3]); + mul_qt_v3(rot2, vec_to_point); + } + + /* curve taper */ + if (cu->taperobj) { + mul_v3_fl(vec_to_point, + BKE_displist_calc_taper(depsgraph, + eff.scene, + cu->taperobj, + int(data->strength * guidetime * 100.0f), + 100)); + } + else { /* Curve size. */ + if (cu->flag & CU_PATH_RADIUS) { + mul_v3_fl(vec_to_point, radius); + } + } + + if (clumpcurve) { + BKE_curvemapping_changed_all(clumpcurve); + } + if (roughcurve) { + BKE_curvemapping_changed_all(roughcurve); + } + + { + ParticleKey key; + const float par_co[3] = {0.0f, 0.0f, 0.0f}; + const float par_vel[3] = {0.0f, 0.0f, 0.0f}; + const float par_rot[4] = {1.0f, 0.0f, 0.0f, 0.0f}; + const float orco_offset[3] = {0.0f, 0.0f, 0.0f}; + + copy_v3_v3(key.co, vec_to_point); + do_kink(&key, + par_co, + par_vel, + par_rot, + guidetime, + pd->kink_freq, + pd->kink_shape, + pd->kink_amp, + 0.0f, + pd->kink, + pd->kink_axis, + nullptr, + 0); + do_clump(&key, + par_co, + guidetime, + orco_offset, + pd->clump_fac, + pd->clump_pow, + 1.0f, + part->child_flag & PART_CHILD_USE_CLUMP_NOISE, + part->clump_noise_size, + clumpcurve); + copy_v3_v3(vec_to_point, key.co); + } + + add_v3_v3(vec_to_point, guidevec); + + // sub_v3_v3v3(pa_loc, pa_loc, pa_zero); + madd_v3_v3fl(effect, vec_to_point, data->strength); + madd_v3_v3fl(veffect, guidedir, data->strength); + totstrength += data->strength; + + if (pd->flag & PFIELD_GUIDE_PATH_WEIGHT) { + totstrength *= weight; + } + } + } + + if (totstrength != 0.0f) { + if (totstrength > 1.0f) { + mul_v3_fl(effect, 1.0f / totstrength); + } + CLAMP(totstrength, 0.0f, 1.0f); + // add_v3_v3(effect, pa_zero); + interp_v3_v3v3(state->co, state->co, effect, totstrength); + + normalize_v3(veffect); + mul_v3_fl(veffect, len_v3(state->vel)); + copy_v3_v3(state->vel, veffect); + return true; + } + return false; +} + +static void do_path_effectors(ParticleSimulationData *sim, + int i, + ParticleCacheKey *ca, + int k, + int steps, + float * /*rootco*/, + float effector, + float /*dfra*/, + float /*cfra*/, + float *length, + float *vec) +{ + float force[3] = {0.0f, 0.0f, 0.0f}; + ParticleKey eff_key; + EffectedPoint epoint; + + /* Don't apply effectors for dynamic hair, otherwise the effectors don't get applied twice. */ + if (sim->psys->flag & PSYS_HAIR_DYNAMICS) { + return; + } + + copy_v3_v3(eff_key.co, (ca - 1)->co); + copy_v3_v3(eff_key.vel, (ca - 1)->vel); + copy_qt_qt(eff_key.rot, (ca - 1)->rot); + + pd_point_from_particle(sim, sim->psys->particles + i, &eff_key, &epoint); + BKE_effectors_apply(sim->psys->effectors, + sim->colliders, + sim->psys->part->effector_weights, + &epoint, + force, + nullptr, + nullptr); + + mul_v3_fl(force, + effector * powf(float(k) / float(steps), 100.0f * sim->psys->part->eff_hair) / + float(steps)); + + add_v3_v3(force, vec); + + normalize_v3(force); + + if (k < steps) { + sub_v3_v3v3(vec, (ca + 1)->co, ca->co); + } + + madd_v3_v3v3fl(ca->co, (ca - 1)->co, force, *length); + + if (k < steps) { + *length = len_v3(vec); + } +} +static void offset_child(ChildParticle *cpa, + ParticleKey *par, + float *par_rot, + ParticleKey *child, + float flat, + float radius) +{ + copy_v3_v3(child->co, cpa->fuv); + mul_v3_fl(child->co, radius); + + child->co[0] *= flat; + + copy_v3_v3(child->vel, par->vel); + + if (par_rot) { + mul_qt_v3(par_rot, child->co); + copy_qt_qt(child->rot, par_rot); + } + else { + unit_qt(child->rot); + } + + add_v3_v3(child->co, par->co); +} +float *psys_cache_vgroup(Mesh *mesh, ParticleSystem *psys, int vgroup) +{ + float *vg = nullptr; + + if (vgroup < 0) { + /* hair dynamics pinning vgroup */ + } + else if (psys->vgroup[vgroup]) { + const MDeformVert *dvert = mesh->deform_verts().data(); + if (dvert) { + int totvert = mesh->verts_num, i; + vg = MEM_new_array_zeroed(totvert, "vg_cache"); + if (psys->vg_neg & (1 << vgroup)) { + for (i = 0; i < totvert; i++) { + vg[i] = 1.0f - BKE_defvert_find_weight(&dvert[i], psys->vgroup[vgroup] - 1); + } + } + else { + for (i = 0; i < totvert; i++) { + vg[i] = BKE_defvert_find_weight(&dvert[i], psys->vgroup[vgroup] - 1); + } + } + } + } + return vg; +} +void psys_find_parents(ParticleSimulationData *sim, const bool use_render_params) +{ + ParticleSystem *psys = sim->psys; + ParticleSettings *part = sim->psys->part; + KDTree *tree; + ChildParticle *cpa; + ParticleTexture ptex; + int p, totparent, totchild = sim->psys->totchild; + float co[3], orco[3]; + int from = PART_FROM_FACE; + totparent = int(totchild * part->parents * 0.3f); + + if (use_render_params && part->child_percent && part->child_render_percent) { + totparent *= float(part->child_percent) / float(part->child_render_percent); + } + + /* hard limit, workaround for it being ignored above */ + totparent = std::min(sim->psys->totpart, totparent); + + tree = kdtree_new(totparent); + + for (p = 0, cpa = sim->psys->child; p < totparent; p++, cpa++) { + psys_particle_on_emitter(sim->psmd, + from, + cpa->num, + DMCACHE_ISCHILD, + cpa->fuv, + cpa->foffset, + co, + nullptr, + nullptr, + nullptr, + orco); + + /* Check if particle doesn't exist because of texture influence. + * Insert only existing particles into kdtree. */ + get_cpa_texture(sim->psmd->mesh_final, + psys, + part, + psys->particles + cpa->pa[0], + p, + cpa->num, + cpa->fuv, + orco, + &ptex, + PAMAP_DENS | PAMAP_CHILD, + psys->cfra); + + if (ptex.exist >= psys_frand(psys, p + 24)) { + kdtree_insert(tree, p, orco); + } + } + + kdtree_balance(tree); + + for (; p < totchild; p++, cpa++) { + psys_particle_on_emitter(sim->psmd, + from, + cpa->num, + DMCACHE_ISCHILD, + cpa->fuv, + cpa->foffset, + co, + nullptr, + nullptr, + nullptr, + orco); + cpa->parent = kdtree_find_nearest(tree, orco, nullptr); + } + + kdtree_free(tree); +} + +static bool psys_thread_context_init_path(ParticleThreadContext *ctx, + ParticleSimulationData *sim, + Scene *scene, + float cfra, + const bool editupdate, + const bool use_render_params) +{ + ParticleSystem *psys = sim->psys; + ParticleSettings *part = psys->part; + int totparent = 0, between = 0; + int segments = 1 << part->draw_step; + int totchild = psys->totchild; + + psys_thread_context_init(ctx, sim); + + /*---start figuring out what is actually wanted---*/ + if (psys_in_edit_mode(sim->depsgraph, psys)) { + ParticleEditSettings *pset = &scene->toolsettings->particle; + + if ((use_render_params == 0) && + (psys_orig_edit_get(psys) == nullptr || pset->flag & PE_DRAW_PART) == 0) + { + totchild = 0; + } + + segments = 1 << pset->draw_step; + } + + if (totchild && part->childtype == PART_CHILD_FACES) { + totparent = int(totchild * part->parents * 0.3f); + + if (use_render_params && part->child_percent && part->child_render_percent) { + totparent *= float(part->child_percent) / float(part->child_render_percent); + } + + /* part->parents could still be 0 so we can't test with totparent */ + between = 1; + } + + if (use_render_params) { + segments = 1 << part->ren_step; + } + else { + totchild = int(float(totchild) * float(part->disp) / 100.0f); + } + + totparent = std::min(totparent, totchild); + + if (totchild == 0) { + return false; + } + + /* fill context values */ + ctx->between = between; + ctx->segments = segments; + if (ELEM(part->kink, PART_KINK_SPIRAL)) { + ctx->extra_segments = max_ii(part->kink_extra_steps, 1); + } + else { + ctx->extra_segments = 0; + } + ctx->totchild = totchild; + ctx->totparent = totparent; + ctx->parent_pass = 0; + ctx->cfra = cfra; + ctx->editupdate = editupdate; + + psys_sim_data_init(&ctx->sim); + + /* cache all relevant vertex groups if they exist */ + ctx->vg_length = psys_cache_vgroup(ctx->mesh, psys, PSYS_VG_LENGTH); + ctx->vg_clump = psys_cache_vgroup(ctx->mesh, psys, PSYS_VG_CLUMP); + ctx->vg_kink = psys_cache_vgroup(ctx->mesh, psys, PSYS_VG_KINK); + ctx->vg_rough1 = psys_cache_vgroup(ctx->mesh, psys, PSYS_VG_ROUGH1); + ctx->vg_rough2 = psys_cache_vgroup(ctx->mesh, psys, PSYS_VG_ROUGH2); + ctx->vg_roughe = psys_cache_vgroup(ctx->mesh, psys, PSYS_VG_ROUGHE); + ctx->vg_twist = psys_cache_vgroup(ctx->mesh, psys, PSYS_VG_TWIST); + if (psys->part->flag & PART_CHILD_EFFECT) { + ctx->vg_effector = psys_cache_vgroup(ctx->mesh, psys, PSYS_VG_EFFECTOR); + } + + /* prepare curvemapping tables */ + if ((part->child_flag & PART_CHILD_USE_CLUMP_CURVE) && part->clumpcurve) { + ctx->clumpcurve = BKE_curvemapping_copy(part->clumpcurve); + BKE_curvemapping_changed_all(ctx->clumpcurve); + } + else { + ctx->clumpcurve = nullptr; + } + if ((part->child_flag & PART_CHILD_USE_ROUGH_CURVE) && part->roughcurve) { + ctx->roughcurve = BKE_curvemapping_copy(part->roughcurve); + BKE_curvemapping_changed_all(ctx->roughcurve); + } + else { + ctx->roughcurve = nullptr; + } + if ((part->child_flag & PART_CHILD_USE_TWIST_CURVE) && part->twistcurve) { + ctx->twistcurve = BKE_curvemapping_copy(part->twistcurve); + BKE_curvemapping_changed_all(ctx->twistcurve); + } + else { + ctx->twistcurve = nullptr; + } + + return true; +} + +static void psys_task_init_path(ParticleTask *task, ParticleSimulationData *sim) +{ + /* init random number generator */ + int seed = 31415926 + sim->psys->seed; + + task->rng_path = BLI_rng_new(seed); +} + +/* NOTE: this function must be thread safe, except for branching! */ +static void psys_thread_create_path(ParticleTask *task, + ChildParticle *cpa, + ParticleCacheKey *child_keys, + int i) +{ + ParticleThreadContext *ctx = task->ctx; + Object *ob = ctx->sim.ob; + ParticleSystem *psys = ctx->sim.psys; + ParticleSettings *part = psys->part; + ParticleCacheKey **cache = psys->childcache; + PTCacheEdit *edit = psys_orig_edit_get(psys); + ParticleCacheKey **pcache = psys_in_edit_mode(ctx->sim.depsgraph, psys) && edit ? + edit->pathcache : + psys->pathcache; + ParticleCacheKey *child, *key[4]; + ParticleTexture ptex; + float *cpa_fuv = nullptr, *par_rot = nullptr, rot[4]; + float orco[3], hairmat[4][4], dvec[3], off1[4][3], off2[4][3]; + float eff_length, eff_vec[3], weight[4]; + int k, cpa_num; + short cpa_from; + + if (!pcache) { + return; + } + + if (ctx->between) { + ParticleData *pa = psys->particles + cpa->pa[0]; + int w, needupdate; + float foffset, wsum = 0.0f; + float co[3]; + float p_min = part->parting_min; + float p_max = part->parting_max; + /* Virtual parents don't work nicely with parting. */ + float p_fac = part->parents > 0.0f ? 0.0f : part->parting_fac; + + if (ctx->editupdate) { + needupdate = 0; + w = 0; + while (w < 4 && cpa->pa[w] >= 0) { + if (edit->points[cpa->pa[w]].flag & PEP_EDIT_RECALC) { + needupdate = 1; + break; + } + w++; + } + + if (!needupdate) { + return; + } + + memset(child_keys, 0, sizeof(*child_keys) * (ctx->segments + 1)); + } + + /* get parent paths */ + for (w = 0; w < 4; w++) { + if (cpa->pa[w] >= 0) { + key[w] = pcache[cpa->pa[w]]; + weight[w] = cpa->w[w]; + } + else { + key[w] = pcache[0]; + weight[w] = 0.0f; + } + } + + /* modify weights to create parting */ + if (p_fac > 0.0f) { + const ParticleCacheKey *key_0_last = pcache_key_segment_endpoint_safe(key[0]); + for (w = 0; w < 4; w++) { + if (w && (weight[w] > 0.0f)) { + const ParticleCacheKey *key_w_last = pcache_key_segment_endpoint_safe(key[w]); + float d; + if (part->flag & PART_CHILD_LONG_HAIR) { + /* For long hair use tip distance/root distance as parting + * factor instead of root to tip angle. */ + float d1 = len_v3v3(key[0]->co, key[w]->co); + float d2 = len_v3v3(key_0_last->co, key_w_last->co); + + d = d1 > 0.0f ? d2 / d1 - 1.0f : 10000.0f; + } + else { + float v1[3], v2[3]; + sub_v3_v3v3(v1, key_0_last->co, key[0]->co); + sub_v3_v3v3(v2, key_w_last->co, key[w]->co); + normalize_v3(v1); + normalize_v3(v2); + + d = RAD2DEGF(safe_acosf(dot_v3v3(v1, v2))); + } + + if (p_max > p_min) { + d = (d - p_min) / (p_max - p_min); + } + else { + d = (d - p_min) <= 0.0f ? 0.0f : 1.0f; + } + + CLAMP(d, 0.0f, 1.0f); + + if (d > 0.0f) { + weight[w] *= (1.0f - d); + } + } + wsum += weight[w]; + } + for (w = 0; w < 4; w++) { + weight[w] /= wsum; + } + + interp_v4_v4v4(weight, cpa->w, weight, p_fac); + } + + /* get the original coordinates (orco) for texture usage */ + cpa_num = cpa->num; + + foffset = cpa->foffset; + cpa_fuv = cpa->fuv; + cpa_from = PART_FROM_FACE; + + psys_particle_on_emitter(ctx->sim.psmd, + cpa_from, + cpa_num, + DMCACHE_ISCHILD, + cpa->fuv, + foffset, + co, + nullptr, + nullptr, + nullptr, + orco); + + mul_m4_v3(ob->object_to_world().ptr(), co); + + for (w = 0; w < 4; w++) { + sub_v3_v3v3(off1[w], co, key[w]->co); + } + + psys_mat_hair_to_global(ob, ctx->sim.psmd->mesh_final, psys->part->from, pa, hairmat); + } + else { + ParticleData *pa = psys->particles + cpa->parent; + float co[3]; + if (ctx->editupdate) { + if (!(edit->points[cpa->parent].flag & PEP_EDIT_RECALC)) { + return; + } + + memset(child_keys, 0, sizeof(*child_keys) * (ctx->segments + 1)); + } + + /* get the parent path */ + key[0] = pcache[cpa->parent]; + + /* get the original coordinates (orco) for texture usage */ + cpa_from = part->from; + + /* + * NOTE: Should in theory be the same as: + * cpa_num = psys_particle_dm_face_lookup( + * ctx->sim.psmd->dm_final, + * ctx->sim.psmd->dm_deformed, + * pa->num, pa->fuv, + * nullptr); + */ + cpa_num = ELEM(pa->num_dmcache, DMCACHE_ISCHILD, DMCACHE_NOTFOUND) ? pa->num : pa->num_dmcache; + + /* XXX hack to avoid messed up particle num and subsequent crash (#40733) */ + if (cpa_num > ctx->sim.psmd->mesh_final->totface_legacy) { + cpa_num = 0; + } + cpa_fuv = pa->fuv; + + psys_particle_on_emitter(ctx->sim.psmd, + cpa_from, + cpa_num, + DMCACHE_ISCHILD, + cpa_fuv, + pa->foffset, + co, + nullptr, + nullptr, + nullptr, + orco); + + psys_mat_hair_to_global(ob, ctx->sim.psmd->mesh_final, psys->part->from, pa, hairmat); + } + + child_keys->segments = ctx->segments; + + /* get different child parameters from textures & vgroups */ + get_child_modifier_parameters(part, ctx, cpa, cpa_from, cpa_num, cpa_fuv, orco, &ptex); + + if (ptex.exist < psys_frand(psys, i + 24)) { + child_keys->segments = -1; + return; + } + + /* create the child path */ + for (k = 0, child = child_keys; k <= ctx->segments; k++, child++) { + if (ctx->between) { + int w = 0; + + zero_v3(child->co); + zero_v3(child->vel); + unit_qt(child->rot); + + for (w = 0; w < 4; w++) { + copy_v3_v3(off2[w], off1[w]); + + if (part->flag & PART_CHILD_LONG_HAIR) { + /* Use parent rotation (in addition to emission location) to determine child offset. */ + if (k) { + mul_qt_v3((key[w] + k)->rot, off2[w]); + } + + /* Fade the effect of rotation for even lengths in the end */ + project_v3_v3v3(dvec, off2[w], (key[w] + k)->vel); + madd_v3_v3fl(off2[w], dvec, -float(k) / float(ctx->segments)); + } + + add_v3_v3(off2[w], (key[w] + k)->co); + } + + /* child position is the weighted sum of parent positions */ + interp_v3_v3v3v3v3(child->co, off2[0], off2[1], off2[2], off2[3], weight); + interp_v3_v3v3v3v3(child->vel, + (key[0] + k)->vel, + (key[1] + k)->vel, + (key[2] + k)->vel, + (key[3] + k)->vel, + weight); + + copy_qt_qt(child->rot, (key[0] + k)->rot); + } + else { + if (k) { + mul_qt_qtqt(rot, (key[0] + k)->rot, key[0]->rot); + par_rot = rot; + } + else { + par_rot = key[0]->rot; + } + /* offset the child from the parent position */ + offset_child(cpa, + reinterpret_cast(key[0] + k), + par_rot, + reinterpret_cast(child), + part->childflat, + part->childrad); + } + + child->time = float(k) / float(ctx->segments); + } + + /* apply effectors */ + if (part->flag & PART_CHILD_EFFECT) { + for (k = 0, child = child_keys; k <= ctx->segments; k++, child++) { + if (k) { + do_path_effectors(&ctx->sim, + cpa->pa[0], + child, + k, + ctx->segments, + child_keys->co, + ptex.effector, + 0.0f, + ctx->cfra, + &eff_length, + eff_vec); + } + else { + sub_v3_v3v3(eff_vec, (child + 1)->co, child->co); + eff_length = len_v3(eff_vec); + } + } + } + + { + ParticleData *pa = nullptr; + ParticleCacheKey *par = nullptr; + float par_co[3]; + float par_orco[3]; + + if (ctx->totparent) { + if (i >= ctx->totparent) { + pa = &psys->particles[cpa->parent]; + /* this is now threadsafe, virtual parents are calculated before rest of children */ + BLI_assert(cpa->parent < psys->totchildcache); + par = cache[cpa->parent]; + } + } + else if (cpa->parent >= 0) { + pa = &psys->particles[cpa->parent]; + par = pcache[cpa->parent]; + + /* If particle is non-existing, try to pick a viable parent from particles + * used for interpolation. */ + for (k = 0; k < 4 && pa && (pa->flag & PARS_UNEXIST); k++) { + if (cpa->pa[k] >= 0) { + pa = &psys->particles[cpa->pa[k]]; + par = pcache[cpa->pa[k]]; + } + } + + if (pa->flag & PARS_UNEXIST) { + pa = nullptr; + } + } + + if (pa) { + ListBaseT modifiers; + modifiers.clear_no_delete(); + + psys_particle_on_emitter(ctx->sim.psmd, + part->from, + pa->num, + pa->num_dmcache, + pa->fuv, + pa->foffset, + par_co, + nullptr, + nullptr, + nullptr, + par_orco); + + psys_apply_child_modifiers( + ctx, &modifiers, cpa, &ptex, orco, hairmat, child_keys, par, par_orco); + } + else { + zero_v3(par_orco); + } + } + + /* Hide virtual parents */ + if (i < ctx->totparent) { + child_keys->segments = -1; + } +} + +static void exec_child_path_cache(TaskPool *__restrict /*pool*/, void *taskdata) +{ + ParticleTask *task = static_cast(taskdata); + ParticleThreadContext *ctx = task->ctx; + ParticleSystem *psys = ctx->sim.psys; + ParticleCacheKey **cache = psys->childcache; + ChildParticle *cpa; + int i; + + cpa = psys->child + task->begin; + for (i = task->begin; i < task->end; i++, cpa++) { + BLI_assert(i < psys->totchildcache); + psys_thread_create_path(task, cpa, cache[i], i); + } +} + +void psys_cache_child_paths(ParticleSimulationData *sim, + float cfra, + const bool editupdate, + const bool use_render_params) +{ + if (sim->psys->flag & PSYS_GLOBAL_HAIR) { + return; + } + + /* create a task pool for child path tasks */ + ParticleThreadContext ctx; + if (!psys_thread_context_init_path(&ctx, sim, sim->scene, cfra, editupdate, use_render_params)) { + return; + } + + TaskPool *task_pool = BLI_task_pool_create(&ctx, TASK_PRIORITY_HIGH); + const int totchild = ctx.totchild; + const int totparent = ctx.totparent; + + if (editupdate && sim->psys->childcache && totchild == sim->psys->totchildcache) { + /* just overwrite the existing cache */ + } + else { + /* clear out old and create new empty path cache */ + free_child_path_cache(sim->psys); + + sim->psys->childcache = psys_alloc_path_cache_buffers( + &sim->psys->childcachebufs, totchild, ctx.segments + ctx.extra_segments + 1); + sim->psys->totchildcache = totchild; + } + + /* cache parent paths */ + ctx.parent_pass = 1; + Vector tasks_parent = psys_tasks_create(&ctx, 0, totparent); + for (ParticleTask &task : tasks_parent) { + psys_task_init_path(&task, sim); + BLI_task_pool_push(task_pool, exec_child_path_cache, &task, false, nullptr); + } + BLI_task_pool_work_and_wait(task_pool); + + /* cache child paths */ + ctx.parent_pass = 0; + Vector tasks_child = psys_tasks_create(&ctx, totparent, totchild); + for (ParticleTask &task : tasks_child) { + psys_task_init_path(&task, sim); + BLI_task_pool_push(task_pool, exec_child_path_cache, &task, false, nullptr); + } + BLI_task_pool_work_and_wait(task_pool); + + BLI_task_pool_free(task_pool); + + psys_tasks_free(tasks_parent); + psys_tasks_free(tasks_child); + + psys_thread_context_free(&ctx); +} + +/* figure out incremental rotations along path starting from unit quat */ +static void cache_key_incremental_rotation(ParticleCacheKey *key0, + ParticleCacheKey *key1, + ParticleCacheKey *key2, + float *prev_tangent, + int i) +{ + float cosangle, angle, tangent[3], normal[3], q[4]; + + switch (i) { + case 0: + /* start from second key */ + break; + case 1: + /* calculate initial tangent for incremental rotations */ + sub_v3_v3v3(prev_tangent, key0->co, key1->co); + normalize_v3(prev_tangent); + unit_qt(key1->rot); + break; + default: + sub_v3_v3v3(tangent, key0->co, key1->co); + normalize_v3(tangent); + + cosangle = dot_v3v3(tangent, prev_tangent); + + /* note we do the comparison on cosangle instead of + * angle, since floating point accuracy makes it give + * different results across platforms */ + if (cosangle > 0.999999f) { + copy_v4_v4(key1->rot, key2->rot); + } + else { + angle = safe_acosf(cosangle); + cross_v3_v3v3(normal, prev_tangent, tangent); + axis_angle_to_quat(q, normal, angle); + mul_qt_qtqt(key1->rot, q, key2->rot); + } + + copy_v3_v3(prev_tangent, tangent); + } +} + +void psys_cache_paths(ParticleSimulationData *sim, float cfra, const bool use_render_params) +{ + PARTICLE_PSMD; + ParticleEditSettings *pset = &sim->scene->toolsettings->particle; + ParticleSystem *psys = sim->psys; + ParticleSettings *part = psys->part; + ParticleCacheKey *ca, **cache; + + Mesh *hair_mesh = (psys->part->type == PART_HAIR && psys->flag & PSYS_HAIR_DYNAMICS) ? + psys->hair_out_mesh : + nullptr; + + ParticleKey result; + + Material *ma; + ParticleInterpolationData pind; + ParticleTexture ptex; + + PARTICLE_P; + + float birthtime = 0.0, dietime = 0.0; + float t, time = 0.0, dfra = 1.0; + float col[4] = {0.5f, 0.5f, 0.5f, 1.0f}; + float prev_tangent[3] = {0.0f, 0.0f, 0.0f}, hairmat[4][4]; + float rotmat[3][3]; + int k; + int segments = int(pow(2.0, double((use_render_params) ? part->ren_step : part->draw_step))); + int totpart = psys->totpart; + float length, vec[3]; + float *vg_effector = nullptr; + float *vg_length = nullptr, pa_length = 1.0f; + int keyed, baked; + + /* we don't have anything valid to create paths from so let's quit here */ + if ((psys->flag & PSYS_HAIR_DONE || psys->flag & PSYS_KEYED || psys->pointcache) == 0) { + return; + } + + if (psys_in_edit_mode(sim->depsgraph, psys)) { + if ((psys->edit == nullptr || pset->flag & PE_DRAW_PART) == 0) { + return; + } + } + + keyed = psys->flag & PSYS_KEYED; + baked = psys->pointcache->mem_cache.first && psys->part->type != PART_HAIR; + + /* clear out old and create new empty path cache */ + psys_free_path_cache(psys, psys->edit); + cache = psys->pathcache = psys_alloc_path_cache_buffers( + &psys->pathcachebufs, totpart, segments + 1); + + psys_sim_data_init(sim); + ma = BKE_object_material_get(sim->ob, psys->part->omat); + if (ma && (psys->part->draw_col == PART_DRAW_COL_MAT)) { + copy_v3_v3(col, &ma->r); + } + + if ((psys->flag & PSYS_GLOBAL_HAIR) == 0) { + if ((psys->part->flag & PART_CHILD_EFFECT) == 0) { + vg_effector = psys_cache_vgroup(psmd->mesh_final, psys, PSYS_VG_EFFECTOR); + } + + if (!psys->totchild) { + vg_length = psys_cache_vgroup(psmd->mesh_final, psys, PSYS_VG_LENGTH); + } + } + + /* ensure we have tessfaces to be used for mapping */ + if (part->from != PART_FROM_VERT) { + BKE_mesh_tessface_ensure(psmd->mesh_final); + } + + /*---first main loop: create all actual particles' paths---*/ + LOOP_PARTICLES + { + if (!psys->totchild) { + psys_get_texture(sim, pa, &ptex, PAMAP_LENGTH, 0.0f); + pa_length = ptex.length * (1.0f - part->randlength * psys_frand(psys, psys->seed + p)); + if (vg_length) { + pa_length *= psys_particle_value_from_verts(psmd->mesh_final, part->from, pa, vg_length); + } + } + + pind.keyed = keyed; + pind.cache = baked ? psys->pointcache : nullptr; + pind.epoint = nullptr; + pind.bspline = (psys->part->flag & PART_HAIR_BSPLINE); + pind.mesh = hair_mesh; + + memset(cache[p], 0, sizeof(*cache[p]) * (segments + 1)); + + cache[p]->segments = segments; + + /*--get the first data points--*/ + init_particle_interpolation(sim->ob, sim->psys, pa, &pind); + + /* 'hairmat' is needed for non-hair particle too so we get proper rotations. */ + psys_mat_hair_to_global(sim->ob, psmd->mesh_final, psys->part->from, pa, hairmat); + copy_v3_v3(rotmat[0], hairmat[2]); + copy_v3_v3(rotmat[1], hairmat[1]); + copy_v3_v3(rotmat[2], hairmat[0]); + + if (part->draw & PART_ABS_PATH_TIME) { + birthtime = std::max(pind.birthtime, part->path_start); + dietime = std::min(pind.dietime, part->path_end); + } + else { + float tb = pind.birthtime; + birthtime = tb + part->path_start * (pind.dietime - tb); + dietime = tb + part->path_end * (pind.dietime - tb); + } + + if (birthtime >= dietime) { + cache[p]->segments = -1; + continue; + } + + dietime = birthtime + pa_length * (dietime - birthtime); + + /*--interpolate actual path from data points--*/ + for (k = 0, ca = cache[p]; k <= segments; k++, ca++) { + time = float(k) / float(segments); + t = birthtime + time * (dietime - birthtime); + result.time = -t; + do_particle_interpolation(psys, p, pa, t, &pind, &result); + copy_v3_v3(ca->co, result.co); + + /* dynamic hair is in object space */ + /* keyed and baked are already in global space */ + if (hair_mesh) { + mul_m4_v3(sim->ob->object_to_world().ptr(), ca->co); + } + else if (!keyed && !baked && !(psys->flag & PSYS_GLOBAL_HAIR)) { + mul_m4_v3(hairmat, ca->co); + } + + copy_v3_v3(ca->col, col); + } + + if (part->type == PART_HAIR) { + HairKey *hkey; + + for (k = 0, hkey = pa->hair; k < pa->totkey; k++, hkey++) { + mul_v3_m4v3(hkey->world_co, hairmat, hkey->co); + } + } + + /*--modify paths and calculate rotation & velocity--*/ + + if (!(psys->flag & PSYS_GLOBAL_HAIR)) { + /* apply effectors */ + if ((psys->part->flag & PART_CHILD_EFFECT) == 0) { + float effector = 1.0f; + if (vg_effector) { + effector *= psys_particle_value_from_verts( + psmd->mesh_final, psys->part->from, pa, vg_effector); + } + + sub_v3_v3v3(vec, (cache[p] + 1)->co, cache[p]->co); + length = len_v3(vec); + + for (k = 1, ca = cache[p] + 1; k <= segments; k++, ca++) { + do_path_effectors( + sim, p, ca, k, segments, cache[p]->co, effector, dfra, cfra, &length, vec); + } + } + + /* apply guide curves to path data */ + if (sim->psys->effectors && (psys->part->flag & PART_CHILD_EFFECT) == 0) { + for (k = 0, ca = cache[p]; k <= segments; k++, ca++) { + /* ca is safe to cast, since only co and vel are used */ + do_guides(sim->depsgraph, + sim->psys->part, + sim->psys->effectors, + reinterpret_cast(ca), + p, + float(k) / float(segments)); + } + } + + /* Lattices have to be calculated separately to avoid mix-ups between effector calculations. + */ + if (psys->lattice_deform_data) { + for (k = 0, ca = cache[p]; k <= segments; k++, ca++) { + BKE_lattice_deform_data_eval_co( + psys->lattice_deform_data, ca->co, psys->lattice_strength); + } + } + } + + /* finally do rotation & velocity */ + for (k = 1, ca = cache[p] + 1; k <= segments; k++, ca++) { + cache_key_incremental_rotation(ca, ca - 1, ca - 2, prev_tangent, k); + + if (k == segments) { + copy_qt_qt(ca->rot, (ca - 1)->rot); + } + + /* set velocity */ + sub_v3_v3v3(ca->vel, ca->co, (ca - 1)->co); + + if (k == 1) { + copy_v3_v3((ca - 1)->vel, ca->vel); + } + + ca->time = float(k) / float(segments); + } + /* First rotation is based on emitting face orientation. + * This is way better than having flipping rotations resulting + * from using a global axis as a rotation pole (vec_to_quat()). + * It's not an ideal solution though since it disregards the + * initial tangent, but taking that in to account will allow + * the possibility of flipping again. -jahka + */ + mat3_to_quat_legacy(cache[p]->rot, rotmat); + } + + psys->totcached = totpart; + + psys_sim_data_free(sim); + + if (vg_effector) { + MEM_delete(vg_effector); + } + + if (vg_length) { + MEM_delete(vg_length); + } +} + +struct CacheEditrPathsIterData { + Object *object; + PTCacheEdit *edit; + ParticleSystemModifierData *psmd; + ParticleData *pa; + int segments; + bool use_weight; +}; + +static void psys_cache_edit_paths_iter(void *__restrict iter_data_v, + const int iter, + const TaskParallelTLS *__restrict /*tls*/) +{ + CacheEditrPathsIterData *iter_data = static_cast(iter_data_v); + PTCacheEdit *edit = iter_data->edit; + PTCacheEditPoint *point = &edit->points[iter]; + if (edit->totcached && !(point->flag & PEP_EDIT_RECALC)) { + return; + } + if (point->totkey == 0) { + return; + } + Object *ob = iter_data->object; + ParticleSystem *psys = edit->psys; + ParticleCacheKey **cache = edit->pathcache; + ParticleSystemModifierData *psmd = iter_data->psmd; + ParticleData *pa = iter_data->pa ? iter_data->pa + iter : nullptr; + PTCacheEditKey *ekey = point->keys; + const int segments = iter_data->segments; + const bool use_weight = iter_data->use_weight; + + float birthtime = 0.0f, dietime = 0.0f; + float hairmat[4][4], rotmat[3][3], prev_tangent[3] = {0.0f, 0.0f, 0.0f}; + + ParticleInterpolationData pind; + pind.keyed = 0; + pind.cache = nullptr; + pind.epoint = point; + pind.bspline = psys ? (psys->part->flag & PART_HAIR_BSPLINE) : 0; + pind.mesh = nullptr; + + /* should init_particle_interpolation set this ? */ + if (use_weight) { + pind.hkey[0] = nullptr; + /* pa != nullptr since the weight brush is only available for hair */ + pind.hkey[0] = pa->hair; + pind.hkey[1] = pa->hair + 1; + } + + memset(cache[iter], 0, sizeof(*cache[iter]) * (segments + 1)); + + cache[iter]->segments = segments; + + /*--get the first data points--*/ + init_particle_interpolation(ob, psys, pa, &pind); + + if (psys) { + psys_mat_hair_to_global(ob, psmd->mesh_final, psys->part->from, pa, hairmat); + copy_v3_v3(rotmat[0], hairmat[2]); + copy_v3_v3(rotmat[1], hairmat[1]); + copy_v3_v3(rotmat[2], hairmat[0]); + } + + birthtime = pind.birthtime; + dietime = pind.dietime; + + if (birthtime >= dietime) { + cache[iter]->segments = -1; + return; + } + + /*--interpolate actual path from data points--*/ + ParticleCacheKey *ca; + int k; + float t, time = 0.0f, keytime = 0.0f; + for (k = 0, ca = cache[iter]; k <= segments; k++, ca++) { + time = float(k) / float(segments); + t = birthtime + time * (dietime - birthtime); + ParticleKey result; + result.time = -t; + do_particle_interpolation(psys, iter, pa, t, &pind, &result); + copy_v3_v3(ca->co, result.co); + + /* non-hair points are already in global space */ + if (psys && !(psys->flag & PSYS_GLOBAL_HAIR)) { + mul_m4_v3(hairmat, ca->co); + + if (k) { + cache_key_incremental_rotation(ca, ca - 1, ca - 2, prev_tangent, k); + + if (k == segments) { + copy_qt_qt(ca->rot, (ca - 1)->rot); + } + + /* set velocity */ + sub_v3_v3v3(ca->vel, ca->co, (ca - 1)->co); + + if (k == 1) { + copy_v3_v3((ca - 1)->vel, ca->vel); + } + } + } + else { + ca->vel[0] = ca->vel[1] = 0.0f; + ca->vel[2] = 1.0f; + } + + /* selection coloring in edit mode */ + if (use_weight) { + if (k == 0) { + BKE_defvert_weight_to_rgb(ca->col, pind.hkey[1]->weight); + } + else { + /* WARNING: copied from 'do_particle_interpolation' (without 'vertex' array stepping) */ + float real_t; + if (result.time < 0.0f) { + real_t = -result.time; + } + else { + real_t = pind.hkey[0]->time + + t * (pind.hkey[0][pa->totkey - 1].time - pind.hkey[0]->time); + } + + while (pind.hkey[1]->time < real_t) { + pind.hkey[1]++; + } + pind.hkey[0] = pind.hkey[1] - 1; + /* end copy */ + + float w1[3], w2[3]; + keytime = (t - (*pind.ekey[0]->time)) / ((*pind.ekey[1]->time) - (*pind.ekey[0]->time)); + + BKE_defvert_weight_to_rgb(w1, pind.hkey[0]->weight); + BKE_defvert_weight_to_rgb(w2, pind.hkey[1]->weight); + + interp_v3_v3v3(ca->col, w1, w2, keytime); + } + } + else { + /* HACK(fclem): Instead of setting the color we pass the select state in the red channel. + * This is then picked up in DRW and the gpu shader will do the color interpolation. */ + if ((ekey + (pind.ekey[0] - point->keys))->flag & PEK_SELECT) { + if ((ekey + (pind.ekey[1] - point->keys))->flag & PEK_SELECT) { + ca->col[0] = 1.0f; + } + else { + keytime = (t - (*pind.ekey[0]->time)) / ((*pind.ekey[1]->time) - (*pind.ekey[0]->time)); + ca->col[0] = 1.0f - keytime; + } + } + else { + if ((ekey + (pind.ekey[1] - point->keys))->flag & PEK_SELECT) { + keytime = (t - (*pind.ekey[0]->time)) / ((*pind.ekey[1]->time) - (*pind.ekey[0]->time)); + ca->col[0] = keytime; + } + else { + ca->col[0] = 0.0f; + } + } + } + + ca->time = t; + } + if (psys && !(psys->flag & PSYS_GLOBAL_HAIR)) { + /* First rotation is based on emitting face orientation. + * This is way better than having flipping rotations resulting + * from using a global axis as a rotation pole (vec_to_quat()). + * It's not an ideal solution though since it disregards the + * initial tangent, but taking that in to account will allow + * the possibility of flipping again. -jahka + */ + mat3_to_quat_legacy(cache[iter]->rot, rotmat); + } +} + +void psys_cache_edit_paths(Depsgraph *depsgraph, + Scene *scene, + Object *ob, + PTCacheEdit *edit, + float cfra, + const bool use_render_params) +{ + ParticleCacheKey **cache = edit->pathcache; + ParticleEditSettings *pset = &scene->toolsettings->particle; + + ParticleSystem *psys = edit->psys; + + ParticleData *pa = psys ? psys->particles : nullptr; + + int segments = 1 << pset->draw_step; + int totpart = edit->totpoint, recalc_set = 0; + + if (edit->psmd_eval == nullptr) { + return; + } + + segments = std::max(segments, 4); + + if (!cache || edit->totpoint != edit->totcached) { + /* Clear out old and create new empty path cache. */ + psys_free_path_cache(edit->psys, edit); + cache = edit->pathcache = psys_alloc_path_cache_buffers( + &edit->pathcachebufs, totpart, segments + 1); + /* Set flag for update (child particles check this too). */ + int i; + PTCacheEditPoint *point; + for (i = 0, point = edit->points; i < totpart; i++, point++) { + point->flag |= PEP_EDIT_RECALC; + } + recalc_set = 1; + } + + const bool use_weight = (pset->brushtype == PE_BRUSH_WEIGHT) && (psys != nullptr) && + (psys->particles != nullptr); + + CacheEditrPathsIterData iter_data; + iter_data.object = ob; + iter_data.edit = edit; + iter_data.psmd = edit->psmd_eval; + iter_data.pa = pa; + iter_data.segments = segments; + iter_data.use_weight = use_weight; + + TaskParallelSettings settings; + BLI_parallel_range_settings_defaults(&settings); + BLI_task_parallel_range(0, edit->totpoint, &iter_data, psys_cache_edit_paths_iter, &settings); + + edit->totcached = totpart; + + if (psys) { + ParticleSimulationData sim = {nullptr}; + sim.depsgraph = depsgraph; + sim.scene = scene; + sim.ob = ob; + sim.psys = psys; + sim.psmd = edit->psmd_eval; + + psys_cache_child_paths(&sim, cfra, true, use_render_params); + } + + /* clear recalc flag if set here */ + if (recalc_set) { + PTCacheEditPoint *point; + int i; + for (i = 0, point = edit->points; i < totpart; i++, point++) { + point->flag &= ~PEP_EDIT_RECALC; + } + } +} + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Particle Key Handling + * \{ */ + +void copy_particle_key(ParticleKey *to, ParticleKey *from, int time) +{ + if (time) { + memcpy(to, from, sizeof(ParticleKey)); + } + else { + float to_time = to->time; + memcpy(to, from, sizeof(ParticleKey)); + to->time = to_time; + } +} +void psys_get_from_key(ParticleKey *key, float loc[3], float vel[3], float rot[4], float *time) +{ + if (loc) { + copy_v3_v3(loc, key->co); + } + if (vel) { + copy_v3_v3(vel, key->vel); + } + if (rot) { + copy_qt_qt(rot, key->rot); + } + if (time) { + *time = key->time; + } +} + +static void triatomat(float *v1, float *v2, float *v3, const float (*uv)[2], float mat[4][4]) +{ + float det, w1, w2, d1[2], d2[2]; + + memset(mat, 0, sizeof(float[4][4])); + mat[3][3] = 1.0f; + + /* first axis is the normal */ + normal_tri_v3(mat[2], v1, v2, v3); + + /* second axis along (1, 0) in uv space */ + if (uv) { + d1[0] = uv[1][0] - uv[0][0]; + d1[1] = uv[1][1] - uv[0][1]; + d2[0] = uv[2][0] - uv[0][0]; + d2[1] = uv[2][1] - uv[0][1]; + + det = d2[0] * d1[1] - d2[1] * d1[0]; + + if (det != 0.0f) { + det = 1.0f / det; + w1 = -d2[1] * det; + w2 = d1[1] * det; + + mat[1][0] = w1 * (v2[0] - v1[0]) + w2 * (v3[0] - v1[0]); + mat[1][1] = w1 * (v2[1] - v1[1]) + w2 * (v3[1] - v1[1]); + mat[1][2] = w1 * (v2[2] - v1[2]) + w2 * (v3[2] - v1[2]); + normalize_v3(mat[1]); + } + else { + mat[1][0] = mat[1][1] = mat[1][2] = 0.0f; + } + } + else { + sub_v3_v3v3(mat[1], v2, v1); + normalize_v3(mat[1]); + } + + /* third as a cross product */ + cross_v3_v3v3(mat[0], mat[1], mat[2]); +} + +static void psys_face_mat(Object *ob, Mesh *mesh, ParticleData *pa, float mat[4][4], int orco) +{ + float v[3][3]; + MFace *mface; + const float (*orcodata)[3]; + + int i = ELEM(pa->num_dmcache, DMCACHE_ISCHILD, DMCACHE_NOTFOUND) ? pa->num : pa->num_dmcache; + if (i == -1 || i >= mesh->totface_legacy) { + unit_m4(mat); + return; + } + + MFace *mfaces = static_cast( + CustomData_get_layer_for_write(&mesh->fdata_legacy, CD_MFACE, mesh->totface_legacy)); + mface = &mfaces[i]; + const OrigSpaceFace *osface = static_cast( + CustomData_get_for_write(&mesh->fdata_legacy, i, CD_ORIGSPACE, mesh->totface_legacy)); + + if (orco && (orcodata = static_cast( + CustomData_get_layer(&mesh->vert_data, CD_ORCO)))) + { + copy_v3_v3(v[0], orcodata[mface->v1]); + copy_v3_v3(v[1], orcodata[mface->v2]); + copy_v3_v3(v[2], orcodata[mface->v3]); + + /* ugly hack to use non-transformed orcos, since only those + * give symmetric results for mirroring in particle mode */ + if (CustomData_get_layer(&mesh->vert_data, CD_ORIGINDEX)) { + BKE_mesh_orco_verts_transform(id_cast(ob->data), v, 3, true); + } + } + else { + const Span vert_positions = mesh->vert_positions(); + copy_v3_v3(v[0], vert_positions[mface->v1]); + copy_v3_v3(v[1], vert_positions[mface->v2]); + copy_v3_v3(v[2], vert_positions[mface->v3]); + } + + triatomat(v[0], v[1], v[2], (osface) ? osface->uv : nullptr, mat); +} + +void psys_mat_hair_to_object( + Object * /*ob*/, Mesh *mesh, short from, ParticleData *pa, float hairmat[4][4]) +{ + float vec[3]; + + /* can happen when called from a different object's modifier */ + if (!mesh) { + unit_m4(hairmat); + return; + } + + psys_face_mat(nullptr, mesh, pa, hairmat, 0); + psys_particle_on_dm(mesh, + from, + pa->num, + pa->num_dmcache, + pa->fuv, + pa->foffset, + vec, + nullptr, + nullptr, + nullptr, + nullptr); + copy_v3_v3(hairmat[3], vec); +} + +void psys_mat_hair_to_orco( + Object *ob, Mesh *mesh, short from, ParticleData *pa, float hairmat[4][4]) +{ + float vec[3], orco[3]; + + psys_face_mat(ob, mesh, pa, hairmat, 1); + psys_particle_on_dm(mesh, + from, + pa->num, + pa->num_dmcache, + pa->fuv, + pa->foffset, + vec, + nullptr, + nullptr, + nullptr, + orco); + + copy_v3_v3(hairmat[3], orco); +} + +void psys_vec_rot_to_face(Mesh *mesh, ParticleData *pa, float vec[3]) +{ + float mat[4][4]; + + psys_face_mat(nullptr, mesh, pa, mat, 0); + transpose_m4(mat); /* cheap inverse for rotation matrix */ + mul_mat3_m4_v3(mat, vec); +} + +void psys_mat_hair_to_global( + Object *ob, Mesh *mesh, short from, ParticleData *pa, float hairmat[4][4]) +{ + float facemat[4][4]; + + psys_mat_hair_to_object(ob, mesh, from, pa, facemat); + + mul_m4_m4m4(hairmat, ob->object_to_world().ptr(), facemat); +} + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name ParticleSettings Handling + * \{ */ + +static ModifierData *object_add_or_copy_particle_system( + Main *bmain, const Scene *scene, Object *ob, const char *name, const ParticleSystem *psys_orig) +{ + ParticleSystem *psys; + ModifierData *md; + ParticleSystemModifierData *psmd; + + if (!ob || ob->type != OB_MESH) { + return nullptr; + } + + if (name == nullptr) { + name = (psys_orig != nullptr) ? psys_orig->name : DATA_("ParticleSystem"); + } + + psys = static_cast(ob->particlesystem.first); + for (; psys; psys = psys->next) { + psys->flag &= ~PSYS_CURRENT; + } + + psys = MEM_new("particle_system"); + psys->pointcache = BKE_ptcache_add(&psys->ptcaches); + BLI_addtail(&ob->particlesystem, psys); + psys_unique_name(ob, psys, name); + + if (psys_orig != nullptr) { + psys->part = psys_orig->part; + id_us_plus(&psys->part->id); + } + else { + psys->part = BKE_particlesettings_add(bmain, DATA_("ParticleSettings")); + } + md = BKE_modifier_new(eModifierType_ParticleSystem); + STRNCPY_UTF8(md->name, psys->name); + BKE_modifier_unique_name(&ob->modifiers, md); + + psmd = reinterpret_cast(md); + psmd->psys = psys; + + BKE_modifiers_add_at_end_if_possible(ob, md); + BKE_object_modifier_set_active(ob, md); + BKE_modifiers_persistent_uid_init(*ob, *md); + + psys->totpart = 0; + psys->flag = PSYS_CURRENT; + if (scene != nullptr) { + psys->cfra = BKE_scene_frame_to_ctime(scene, scene->r.cfra + 1); + } + + DEG_relations_tag_update(bmain); + DEG_id_tag_update(&ob->id, ID_RECALC_GEOMETRY); + + return md; +} + +ModifierData *object_add_particle_system(Main *bmain, + const Scene *scene, + Object *ob, + const char *name) +{ + return object_add_or_copy_particle_system(bmain, scene, ob, name, nullptr); +} + +ModifierData *object_copy_particle_system(Main *bmain, + const Scene *scene, + Object *ob, + const ParticleSystem *psys_orig) +{ + return object_add_or_copy_particle_system(bmain, scene, ob, nullptr, psys_orig); +} + +void object_remove_particle_system(Main *bmain, + Scene * /*scene*/, + Object *ob, + ParticleSystem *psys) +{ + if (!ob || !psys) { + return; + } + + ParticleSystemModifierData *psmd; + ModifierData *md = BKE_modifiers_findby_type(ob, eModifierType_Fluid); + + /* Clear particle system in fluid modifier. */ + if (md) { + FluidModifierData *fmd = reinterpret_cast(md); + + /* Clear particle system pointer in flow settings. */ + if ((fmd->type == MOD_FLUID_TYPE_FLOW) && fmd->flow && fmd->flow->psys) { + if (fmd->flow->psys == psys) { + fmd->flow->psys = nullptr; + } + } + /* Clear particle flag in domain settings when removing particle system manually. */ + if (fmd->type == MOD_FLUID_TYPE_DOMAIN) { + if (psys->part->type == PART_FLUID_FLIP) { + fmd->domain->particle_type &= ~FLUID_DOMAIN_PARTICLE_FLIP; + } + if (ELEM(psys->part->type, + PART_FLUID_SPRAY, + PART_FLUID_SPRAYFOAM, + PART_FLUID_SPRAYBUBBLE, + PART_FLUID_SPRAYFOAMBUBBLE)) + { + fmd->domain->particle_type &= ~FLUID_DOMAIN_PARTICLE_SPRAY; + } + if (ELEM(psys->part->type, + PART_FLUID_FOAM, + PART_FLUID_SPRAYFOAM, + PART_FLUID_FOAMBUBBLE, + PART_FLUID_SPRAYFOAMBUBBLE)) + { + fmd->domain->particle_type &= ~FLUID_DOMAIN_PARTICLE_FOAM; + } + if (ELEM(psys->part->type, + PART_FLUID_BUBBLE, + PART_FLUID_FOAMBUBBLE, + PART_FLUID_SPRAYBUBBLE, + PART_FLUID_SPRAYFOAMBUBBLE)) + { + fmd->domain->particle_type &= ~FLUID_DOMAIN_PARTICLE_BUBBLE; + } + if (psys->part->type == PART_FLUID_TRACER) { + fmd->domain->particle_type &= ~FLUID_DOMAIN_PARTICLE_TRACER; + } + + /* Disable combined export if combined particle system was deleted. */ + if (ELEM(psys->part->type, + PART_FLUID_SPRAYFOAM, + PART_FLUID_SPRAYBUBBLE, + PART_FLUID_FOAMBUBBLE, + PART_FLUID_SPRAYFOAMBUBBLE)) + { + fmd->domain->sndparticle_combined_export = SNDPARTICLE_COMBINED_EXPORT_OFF; + } + } + } + + if ((md = BKE_modifiers_findby_type(ob, eModifierType_DynamicPaint))) { + DynamicPaintModifierData *pmd = reinterpret_cast(md); + if (pmd->brush && pmd->brush->psys) { + if (pmd->brush->psys == psys) { + pmd->brush->psys = nullptr; + } + } + } + + /* Clear modifier, skip empty ones. */ + psmd = psys_get_modifier(ob, psys); + if (psmd) { + BKE_modifier_remove_from_list(ob, reinterpret_cast(psmd)); + BKE_modifier_free(reinterpret_cast(psmd)); + } + + /* Clear particle system. */ + BLI_remlink(&ob->particlesystem, psys); + if (psys->part) { + id_us_min(&psys->part->id); + } + psys_free(ob, psys); + + if (ob->particlesystem.first) { + (static_cast(ob->particlesystem.first))->flag |= PSYS_CURRENT; + } + else { + ob->mode &= ~OB_MODE_PARTICLE_EDIT; + } + + DEG_relations_tag_update(bmain); + DEG_id_tag_update(&ob->id, ID_RECALC_GEOMETRY); + + /* Flush object mode. */ + DEG_id_tag_update(&ob->id, ID_RECALC_SYNC_TO_EVAL); +} + +ParticleSettings *BKE_particlesettings_add(Main *bmain, const char *name) +{ + ParticleSettings *part; + + part = BKE_id_new(bmain, name); + + return part; +} + +void BKE_particlesettings_clump_curve_init(ParticleSettings *part) +{ + CurveMapping *cumap = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f); + + cumap->cm[0].curve[0].x = 0.0f; + cumap->cm[0].curve[0].y = 1.0f; + cumap->cm[0].curve[1].x = 1.0f; + cumap->cm[0].curve[1].y = 1.0f; + + BKE_curvemapping_init(cumap); + + part->clumpcurve = cumap; +} + +void BKE_particlesettings_rough_curve_init(ParticleSettings *part) +{ + CurveMapping *cumap = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f); + + cumap->cm[0].curve[0].x = 0.0f; + cumap->cm[0].curve[0].y = 1.0f; + cumap->cm[0].curve[1].x = 1.0f; + cumap->cm[0].curve[1].y = 1.0f; + + BKE_curvemapping_init(cumap); + + part->roughcurve = cumap; +} + +void BKE_particlesettings_twist_curve_init(ParticleSettings *part) +{ + CurveMapping *cumap = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f); + + cumap->cm[0].curve[0].x = 0.0f; + cumap->cm[0].curve[0].y = 1.0f; + cumap->cm[0].curve[1].x = 1.0f; + cumap->cm[0].curve[1].y = 1.0f; + + BKE_curvemapping_init(cumap); + + part->twistcurve = cumap; +} + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Textures + * \{ */ + +static int get_particle_uv(Mesh *mesh, + ParticleData *pa, + int index, + const float fuv[4], + const char *name, + float *texco, + bool from_vert) +{ + MFace *mfaces = static_cast( + CustomData_get_layer_for_write(&mesh->fdata_legacy, CD_MFACE, mesh->totface_legacy)); + MFace *mf; + const MTFace *tf; + int i; + + tf = static_cast( + CustomData_get_layer_named(&mesh->fdata_legacy, CD_MTFACE, name)); + if (tf == nullptr) { + tf = static_cast(CustomData_get_layer(&mesh->fdata_legacy, CD_MTFACE)); + } + if (tf == nullptr) { + return 0; + } + + if (pa) { + i = ELEM(pa->num_dmcache, DMCACHE_NOTFOUND, DMCACHE_ISCHILD) ? pa->num : pa->num_dmcache; + if ((!from_vert && i >= mesh->totface_legacy) || (from_vert && i >= mesh->verts_num)) { + i = -1; + } + } + else { + i = index; + } + + if (i == -1) { + texco[0] = 0.0f; + texco[1] = 0.0f; + texco[2] = 0.0f; + } + else { + if (from_vert) { + mf = mfaces; + + /* This finds the first face to contain the emitting vertex, + * this is not ideal, but is mostly fine as UV seams generally + * map to equal-colored parts of a texture */ + for (int j = 0; j < mesh->totface_legacy; j++, mf++) { + if (ELEM(i, mf->v1, mf->v2, mf->v3, mf->v4)) { + i = j; + break; + } + } + } + else { + mf = &mfaces[i]; + } + + psys_interpolate_uvs(&tf[i], mf->v4, fuv, texco); + + texco[0] = texco[0] * 2.0f - 1.0f; + texco[1] = texco[1] * 2.0f - 1.0f; + texco[2] = 0.0f; + } + + return 1; +} + +#define SET_PARTICLE_TEXTURE(type, pvalue, texfac) \ + if ((event & mtex->mapto) & type) { \ + pvalue = texture_value_blend(def, pvalue, value, texfac, blend); \ + } \ + (void)0 + +#define CLAMP_PARTICLE_TEXTURE_POS(type, pvalue) \ + if (event & type) { \ + CLAMP(pvalue, 0.0f, 1.0f); \ + } \ + (void)0 + +#define CLAMP_WARP_PARTICLE_TEXTURE_POS(type, pvalue) \ + if (event & type) { \ + if (pvalue < 0.0f) { \ + pvalue = 1.0f + pvalue; \ + } \ + CLAMP(pvalue, 0.0f, 1.0f); \ + } \ + (void)0 + +#define CLAMP_PARTICLE_TEXTURE_POSNEG(type, pvalue) \ + if (event & type) { \ + CLAMP(pvalue, -1.0f, 1.0f); \ + } \ + (void)0 + +static void get_cpa_texture(Mesh *mesh, + ParticleSystem *psys, + ParticleSettings *part, + ParticleData *par, + int child_index, + int face_index, + const float fw[4], + float *orco, + ParticleTexture *ptex, + int event, + float cfra) +{ + MTex *mtex, **mtexp = part->mtex; + int m; + float value, rgba[4], texvec[3]; + + ptex->ivel = ptex->life = ptex->exist = ptex->size = ptex->damp = ptex->gravity = ptex->field = + ptex->time = ptex->clump = ptex->kink_freq = ptex->kink_amp = ptex->effector = ptex->rough1 = + ptex->rough2 = ptex->roughe = 1.0f; + ptex->twist = 1.0f; + + ptex->length = 1.0f - part->randlength * psys_frand(psys, child_index + 26); + ptex->length *= part->clength_thres < psys_frand(psys, child_index + 27) ? part->clength : 1.0f; + + for (m = 0; m < MAX_MTEX; m++, mtexp++) { + mtex = *mtexp; + if (mtex && mtex->tex && mtex->mapto) { + float def = mtex->def_var; + short blend = mtex->blendtype; + short texco = mtex->texco; + + if (ELEM(texco, TEXCO_UV, TEXCO_ORCO) && + (ELEM(part->from, PART_FROM_FACE, PART_FROM_VOLUME) == 0 || + part->distr == PART_DISTR_GRID)) + { + texco = TEXCO_GLOB; + } + + switch (texco) { + case TEXCO_GLOB: + copy_v3_v3(texvec, par->state.co); + break; + case TEXCO_OBJECT: + copy_v3_v3(texvec, par->state.co); + if (mtex->object) { + mul_m4_v3(mtex->object->world_to_object().ptr(), texvec); + } + break; + case TEXCO_UV: + if (fw && get_particle_uv(mesh, + nullptr, + face_index, + fw, + mtex->uvname, + texvec, + (part->from == PART_FROM_VERT))) + { + break; + } + /* no break, failed to get uv's, so let's try orco's */ + ATTR_FALLTHROUGH; + case TEXCO_ORCO: + copy_v3_v3(texvec, orco); + break; + case TEXCO_PARTICLE: + /* texture coordinates in range [-1, 1] */ + texvec[0] = 2.0f * (cfra - par->time) / (par->dietime - par->time) - 1.0f; + texvec[1] = 0.0f; + texvec[2] = 0.0f; + break; + } + + RE_texture_evaluate(mtex, texvec, 0, nullptr, false, false, &value, rgba); + + if ((event & mtex->mapto) & PAMAP_ROUGH) { + ptex->rough1 = ptex->rough2 = ptex->roughe = texture_value_blend( + def, ptex->rough1, value, mtex->roughfac, blend); + } + + SET_PARTICLE_TEXTURE(PAMAP_LENGTH, ptex->length, mtex->lengthfac); + SET_PARTICLE_TEXTURE(PAMAP_CLUMP, ptex->clump, mtex->clumpfac); + SET_PARTICLE_TEXTURE(PAMAP_KINK_AMP, ptex->kink_amp, mtex->kinkampfac); + SET_PARTICLE_TEXTURE(PAMAP_KINK_FREQ, ptex->kink_freq, mtex->kinkfac); + SET_PARTICLE_TEXTURE(PAMAP_DENS, ptex->exist, mtex->padensfac); + SET_PARTICLE_TEXTURE(PAMAP_TWIST, ptex->twist, mtex->twistfac); + } + } + + CLAMP_PARTICLE_TEXTURE_POS(PAMAP_LENGTH, ptex->length); + CLAMP_WARP_PARTICLE_TEXTURE_POS(PAMAP_CLUMP, ptex->clump); + CLAMP_WARP_PARTICLE_TEXTURE_POS(PAMAP_KINK_AMP, ptex->kink_amp); + CLAMP_WARP_PARTICLE_TEXTURE_POS(PAMAP_KINK_FREQ, ptex->kink_freq); + CLAMP_WARP_PARTICLE_TEXTURE_POS(PAMAP_ROUGH, ptex->rough1); + CLAMP_WARP_PARTICLE_TEXTURE_POS(PAMAP_DENS, ptex->exist); +} +void psys_get_texture( + ParticleSimulationData *sim, ParticleData *pa, ParticleTexture *ptex, int event, float cfra) +{ + Object *ob = sim->ob; + Mesh *mesh = id_cast(ob->data); + ParticleSettings *part = sim->psys->part; + MTex **mtexp = part->mtex; + MTex *mtex; + int m; + float value, rgba[4], co[3], texvec[3]; + int setvars = 0; + + /* initialize ptex */ + ptex->ivel = ptex->life = ptex->exist = ptex->size = ptex->damp = ptex->gravity = ptex->field = + ptex->length = ptex->clump = ptex->kink_freq = ptex->kink_amp = ptex->effector = + ptex->rough1 = ptex->rough2 = ptex->roughe = 1.0f; + ptex->twist = 1.0f; + + ptex->time = float(pa - sim->psys->particles) / float(sim->psys->totpart); + + for (m = 0; m < MAX_MTEX; m++, mtexp++) { + mtex = *mtexp; + if (mtex && mtex->tex && mtex->mapto) { + float def = mtex->def_var; + short blend = mtex->blendtype; + short texco = mtex->texco; + + if (texco == TEXCO_UV && (ELEM(part->from, PART_FROM_FACE, PART_FROM_VOLUME) == 0 || + part->distr == PART_DISTR_GRID)) + { + texco = TEXCO_GLOB; + } + + switch (texco) { + case TEXCO_GLOB: + copy_v3_v3(texvec, pa->state.co); + break; + case TEXCO_OBJECT: + copy_v3_v3(texvec, pa->state.co); + if (mtex->object) { + mul_m4_v3(mtex->object->world_to_object().ptr(), texvec); + } + break; + case TEXCO_UV: + if (get_particle_uv(sim->psmd->mesh_final, + pa, + 0, + pa->fuv, + mtex->uvname, + texvec, + (part->from == PART_FROM_VERT))) + { + break; + } + /* no break, failed to get uv's, so let's try orco's */ + ATTR_FALLTHROUGH; + case TEXCO_ORCO: + psys_particle_on_emitter(sim->psmd, + sim->psys->part->from, + pa->num, + pa->num_dmcache, + pa->fuv, + pa->foffset, + co, + nullptr, + nullptr, + nullptr, + texvec); + + BKE_mesh_texspace_ensure(mesh); + sub_v3_v3(texvec, mesh->texspace_location); + if (mesh->texspace_size[0] != 0.0f) { + texvec[0] /= mesh->texspace_size[0]; + } + if (mesh->texspace_size[1] != 0.0f) { + texvec[1] /= mesh->texspace_size[1]; + } + if (mesh->texspace_size[2] != 0.0f) { + texvec[2] /= mesh->texspace_size[2]; + } + break; + case TEXCO_PARTICLE: + /* texture coordinates in range [-1, 1] */ + texvec[0] = 2.0f * (cfra - pa->time) / (pa->dietime - pa->time) - 1.0f; + if (sim->psys->totpart > 0) { + texvec[1] = 2.0f * float(pa - sim->psys->particles) / float(sim->psys->totpart) - 1.0f; + } + else { + texvec[1] = 0.0f; + } + texvec[2] = 0.0f; + break; + } + + RE_texture_evaluate(mtex, texvec, 0, nullptr, false, false, &value, rgba); + + if ((event & mtex->mapto) & PAMAP_TIME) { + /* the first time has to set the base value for time regardless of blend mode */ + if ((setvars & PAMAP_TIME) == 0) { + int flip = (mtex->timefac < 0.0f); + float timefac = fabsf(mtex->timefac); + ptex->time *= 1.0f - timefac; + ptex->time += timefac * ((flip) ? 1.0f - value : value); + setvars |= PAMAP_TIME; + } + else { + ptex->time = texture_value_blend(def, ptex->time, value, mtex->timefac, blend); + } + } + SET_PARTICLE_TEXTURE(PAMAP_LIFE, ptex->life, mtex->lifefac); + SET_PARTICLE_TEXTURE(PAMAP_DENS, ptex->exist, mtex->padensfac); + SET_PARTICLE_TEXTURE(PAMAP_SIZE, ptex->size, mtex->sizefac); + SET_PARTICLE_TEXTURE(PAMAP_IVEL, ptex->ivel, mtex->ivelfac); + SET_PARTICLE_TEXTURE(PAMAP_FIELD, ptex->field, mtex->fieldfac); + SET_PARTICLE_TEXTURE(PAMAP_GRAVITY, ptex->gravity, mtex->gravityfac); + SET_PARTICLE_TEXTURE(PAMAP_DAMP, ptex->damp, mtex->dampfac); + SET_PARTICLE_TEXTURE(PAMAP_LENGTH, ptex->length, mtex->lengthfac); + SET_PARTICLE_TEXTURE(PAMAP_TWIST, ptex->twist, mtex->twistfac); + } + } + + CLAMP_WARP_PARTICLE_TEXTURE_POS(PAMAP_TIME, ptex->time); + CLAMP_WARP_PARTICLE_TEXTURE_POS(PAMAP_LIFE, ptex->life); + CLAMP_WARP_PARTICLE_TEXTURE_POS(PAMAP_DENS, ptex->exist); + CLAMP_PARTICLE_TEXTURE_POS(PAMAP_SIZE, ptex->size); + CLAMP_PARTICLE_TEXTURE_POSNEG(PAMAP_IVEL, ptex->ivel); + CLAMP_PARTICLE_TEXTURE_POSNEG(PAMAP_FIELD, ptex->field); + CLAMP_PARTICLE_TEXTURE_POSNEG(PAMAP_GRAVITY, ptex->gravity); + CLAMP_WARP_PARTICLE_TEXTURE_POS(PAMAP_DAMP, ptex->damp); + CLAMP_PARTICLE_TEXTURE_POS(PAMAP_LENGTH, ptex->length); +} + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Particle State + * \{ */ + +float psys_get_timestep(ParticleSimulationData *sim) +{ + return 0.04f * sim->psys->part->timetweak; +} +float psys_get_child_time( + ParticleSystem *psys, ChildParticle *cpa, float cfra, float *birthtime, float *dietime) +{ + ParticleSettings *part = psys->part; + float time, life; + + if (part->childtype == PART_CHILD_FACES) { + int w = 0; + time = 0.0; + while (w < 4 && cpa->pa[w] >= 0) { + time += cpa->w[w] * (psys->particles + cpa->pa[w])->time; + w++; + } + + life = part->lifetime * (1.0f - part->randlife * psys_frand(psys, cpa - psys->child + 25)); + } + else { + ParticleData *pa = psys->particles + cpa->parent; + + time = pa->time; + life = pa->lifetime; + } + + if (birthtime) { + *birthtime = time; + } + if (dietime) { + *dietime = time + life; + } + + return (cfra - time) / life; +} +float psys_get_child_size(ParticleSystem *psys, + ChildParticle *cpa, + float /*cfra*/, + float * /*pa_time*/) +{ + ParticleSettings *part = psys->part; + float size; /* time XXX */ + + if (part->childtype == PART_CHILD_FACES) { + int w = 0; + size = 0.0; + while (w < 4 && cpa->pa[w] >= 0) { + size += cpa->w[w] * (psys->particles + cpa->pa[w])->size; + w++; + } + } + else { + size = psys->particles[cpa->parent].size; + } + + size *= part->childsize; + + if (part->childrandsize != 0.0f) { + size *= 1.0f - part->childrandsize * psys_frand(psys, cpa - psys->child + 26); + } + + return size; +} +static void get_child_modifier_parameters(ParticleSettings *part, + ParticleThreadContext *ctx, + ChildParticle *cpa, + short cpa_from, + int cpa_num, + float *cpa_fuv, + float *orco, + ParticleTexture *ptex) +{ + ParticleSystem *psys = ctx->sim.psys; + int i = cpa - psys->child; + + get_cpa_texture(ctx->mesh, + psys, + part, + psys->particles + cpa->pa[0], + i, + cpa_num, + cpa_fuv, + orco, + ptex, + PAMAP_DENS | PAMAP_CHILD, + psys->cfra); + + if (ptex->exist < psys_frand(psys, i + 24)) { + return; + } + + if (ctx->vg_length) { + ptex->length *= psys_interpolate_value_from_verts( + ctx->mesh, cpa_from, cpa_num, cpa_fuv, ctx->vg_length); + } + if (ctx->vg_clump) { + ptex->clump *= psys_interpolate_value_from_verts( + ctx->mesh, cpa_from, cpa_num, cpa_fuv, ctx->vg_clump); + } + if (ctx->vg_kink) { + ptex->kink_freq *= psys_interpolate_value_from_verts( + ctx->mesh, cpa_from, cpa_num, cpa_fuv, ctx->vg_kink); + } + if (ctx->vg_rough1) { + ptex->rough1 *= psys_interpolate_value_from_verts( + ctx->mesh, cpa_from, cpa_num, cpa_fuv, ctx->vg_rough1); + } + if (ctx->vg_rough2) { + ptex->rough2 *= psys_interpolate_value_from_verts( + ctx->mesh, cpa_from, cpa_num, cpa_fuv, ctx->vg_rough2); + } + if (ctx->vg_roughe) { + ptex->roughe *= psys_interpolate_value_from_verts( + ctx->mesh, cpa_from, cpa_num, cpa_fuv, ctx->vg_roughe); + } + if (ctx->vg_effector) { + ptex->effector *= psys_interpolate_value_from_verts( + ctx->mesh, cpa_from, cpa_num, cpa_fuv, ctx->vg_effector); + } + if (ctx->vg_twist) { + ptex->twist *= psys_interpolate_value_from_verts( + ctx->mesh, cpa_from, cpa_num, cpa_fuv, ctx->vg_twist); + } +} +void psys_get_particle_on_path(ParticleSimulationData *sim, + int p, + ParticleKey *state, + const bool vel) +{ + PARTICLE_PSMD; + ParticleSystem *psys = sim->psys; + ParticleSettings *part = sim->psys->part; + Material *ma = BKE_object_material_get(sim->ob, part->omat); + ParticleData *pa; + ChildParticle *cpa; + ParticleTexture ptex; + ParticleKey *par = nullptr, tstate; + ParticleThreadContext ctx; /* fake thread context for child modifiers */ + ParticleInterpolationData pind; + + float t; + float co[3], orco[3]; + float hairmat[4][4]; + int totpart = psys->totpart; + int totchild = psys->totchild; + short between = 0, edit = 0; + + int keyed = part->phystype & PART_PHYS_KEYED && psys->flag & PSYS_KEYED; + int cached = !keyed && part->type != PART_HAIR; + + float *cpa_fuv; + int cpa_num; + short cpa_from; + + /* initialize keys to zero */ + ParticleKey keys[4] = {}; + + t = state->time; + CLAMP(t, 0.0f, 1.0f); + + if (p < totpart) { + /* interpolate pathcache directly if it exist */ + if (psys->pathcache) { + ParticleCacheKey result; + interpolate_pathcache(psys->pathcache[p], t, &result); + copy_v3_v3(state->co, result.co); + copy_v3_v3(state->vel, result.vel); + copy_qt_qt(state->rot, result.rot); + } + /* otherwise interpolate with other means */ + else { + pa = psys->particles + p; + + pind.keyed = keyed; + pind.cache = cached ? psys->pointcache : nullptr; + pind.epoint = nullptr; + pind.bspline = (psys->part->flag & PART_HAIR_BSPLINE); + /* `pind.dm` disabled in edit-mode means we don't get effectors taken into + * account when subdividing for instance. */ + pind.mesh = psys_in_edit_mode(sim->depsgraph, psys) ? + nullptr : + psys->hair_out_mesh; /* XXX(@sybren): EEK. */ + init_particle_interpolation(sim->ob, psys, pa, &pind); + do_particle_interpolation(psys, p, pa, t, &pind, state); + + if (pind.mesh) { + mul_m4_v3(sim->ob->object_to_world().ptr(), state->co); + mul_mat3_m4_v3(sim->ob->object_to_world().ptr(), state->vel); + } + else if (!keyed && !cached && !(psys->flag & PSYS_GLOBAL_HAIR)) { + if ((pa->flag & PARS_REKEY) == 0) { + psys_mat_hair_to_global(sim->ob, sim->psmd->mesh_final, part->from, pa, hairmat); + mul_m4_v3(hairmat, state->co); + mul_mat3_m4_v3(hairmat, state->vel); + + if (sim->psys->effectors && (part->flag & PART_CHILD_GUIDE) == 0) { + do_guides( + sim->depsgraph, sim->psys->part, sim->psys->effectors, state, p, state->time); + /* TODO: proper velocity handling */ + } + + if (psys->lattice_deform_data && edit == 0) { + BKE_lattice_deform_data_eval_co( + psys->lattice_deform_data, state->co, psys->lattice_strength); + } + } + } + } + } + else if (totchild) { + // invert_m4_m4(imat, ob->object_to_world().ptr()); + + /* interpolate childcache directly if it exists */ + if (psys->childcache) { + ParticleCacheKey result; + interpolate_pathcache(psys->childcache[p - totpart], t, &result); + copy_v3_v3(state->co, result.co); + copy_v3_v3(state->vel, result.vel); + copy_qt_qt(state->rot, result.rot); + } + else { + float par_co[3], par_orco[3]; + + cpa = psys->child + p - totpart; + + if (state->time < 0.0f) { + t = psys_get_child_time(psys, cpa, -state->time, nullptr, nullptr); + } + + if (part->childtype == PART_CHILD_FACES) { + /* part->parents could still be 0 so we can't test with totparent */ + between = 1; + } + if (between) { + int w = 0; + float foffset; + + /* get parent states */ + while (w < 4 && cpa->pa[w] >= 0) { + keys[w].time = state->time; + psys_get_particle_on_path(sim, cpa->pa[w], keys + w, true); + w++; + } + + /* get the original coordinates (orco) for texture usage */ + cpa_num = cpa->num; + + foffset = cpa->foffset; + cpa_fuv = cpa->fuv; + cpa_from = PART_FROM_FACE; + + psys_particle_on_emitter(psmd, + cpa_from, + cpa_num, + DMCACHE_ISCHILD, + cpa->fuv, + foffset, + co, + nullptr, + nullptr, + nullptr, + orco); + + /* We need to save the actual root position of the child for + * positioning it accurately to the surface of the emitter. */ + // copy_v3_v3(cpa_1st, co); + + // mul_m4_v3(ob->object_to_world().ptr(), cpa_1st); + + pa = psys->particles + cpa->parent; + + psys_particle_on_emitter(psmd, + part->from, + pa->num, + pa->num_dmcache, + pa->fuv, + pa->foffset, + par_co, + nullptr, + nullptr, + nullptr, + par_orco); + if (part->type == PART_HAIR) { + psys_mat_hair_to_global(sim->ob, sim->psmd->mesh_final, psys->part->from, pa, hairmat); + } + else { + unit_m4(hairmat); + } + + pa = nullptr; + } + else { + /* get the parent state */ + keys->time = state->time; + psys_get_particle_on_path(sim, cpa->parent, keys, true); + + /* get the original coordinates (orco) for texture usage */ + pa = psys->particles + cpa->parent; + + cpa_from = part->from; + cpa_num = pa->num; + cpa_fuv = pa->fuv; + + psys_particle_on_emitter(psmd, + part->from, + pa->num, + pa->num_dmcache, + pa->fuv, + pa->foffset, + par_co, + nullptr, + nullptr, + nullptr, + par_orco); + if (part->type == PART_HAIR) { + psys_particle_on_emitter(psmd, + cpa_from, + cpa_num, + DMCACHE_ISCHILD, + cpa_fuv, + pa->foffset, + co, + nullptr, + nullptr, + nullptr, + orco); + psys_mat_hair_to_global(sim->ob, sim->psmd->mesh_final, psys->part->from, pa, hairmat); + } + else { + copy_v3_v3(orco, cpa->fuv); + unit_m4(hairmat); + } + } + + /* get different child parameters from textures & vgroups */ + memset(&ctx, 0, sizeof(ParticleThreadContext)); + ctx.sim = *sim; + ctx.mesh = psmd->mesh_final; + ctx.ma = ma; + /* TODO: assign vertex groups */ + get_child_modifier_parameters(part, &ctx, cpa, cpa_from, cpa_num, cpa_fuv, orco, &ptex); + + if (between) { + int w = 0; + + state->co[0] = state->co[1] = state->co[2] = 0.0f; + state->vel[0] = state->vel[1] = state->vel[2] = 0.0f; + + /* child position is the weighted sum of parent positions */ + while (w < 4 && cpa->pa[w] >= 0) { + state->co[0] += cpa->w[w] * keys[w].co[0]; + state->co[1] += cpa->w[w] * keys[w].co[1]; + state->co[2] += cpa->w[w] * keys[w].co[2]; + + state->vel[0] += cpa->w[w] * keys[w].vel[0]; + state->vel[1] += cpa->w[w] * keys[w].vel[1]; + state->vel[2] += cpa->w[w] * keys[w].vel[2]; + w++; + } + /* apply offset for correct positioning */ + // add_v3_v3(state->co, cpa_1st); + } + else { + /* offset the child from the parent position */ + offset_child(cpa, keys, keys->rot, state, part->childflat, part->childrad); + } + + par = keys; + + if (vel) { + copy_particle_key(&tstate, state, 1); + } + + /* apply different deformations to the child path */ + ParticleChildModifierContext modifier_ctx = {nullptr}; + modifier_ctx.thread_ctx = nullptr; + modifier_ctx.sim = sim; + modifier_ctx.ptex = &ptex; + modifier_ctx.cpa = cpa; + modifier_ctx.orco = orco; + modifier_ctx.par_co = par->co; + modifier_ctx.par_vel = par->vel; + modifier_ctx.par_rot = par->rot; + modifier_ctx.par_orco = par_orco; + modifier_ctx.parent_keys = psys->childcache ? psys->childcache[p - totpart] : nullptr; + do_child_modifiers(&modifier_ctx, hairmat, state, t); + + /* try to estimate correct velocity */ + if (vel) { + ParticleKey tstate_tmp; + float length = len_v3(state->vel); + + if (t >= 0.001f) { + tstate_tmp.time = t - 0.001f; + psys_get_particle_on_path(sim, p, &tstate_tmp, false); + sub_v3_v3v3(state->vel, state->co, tstate_tmp.co); + normalize_v3(state->vel); + } + else { + tstate_tmp.time = t + 0.001f; + psys_get_particle_on_path(sim, p, &tstate_tmp, false); + sub_v3_v3v3(state->vel, tstate_tmp.co, state->co); + normalize_v3(state->vel); + } + + mul_v3_fl(state->vel, length); + } + } + } +} + +bool psys_get_particle_state(ParticleSimulationData *sim, + int p, + ParticleKey *state, + const bool always) +{ + ParticleSystem *psys = sim->psys; + ParticleSettings *part = psys->part; + ParticleData *pa = nullptr; + ChildParticle *cpa = nullptr; + float cfra; + int totpart = psys->totpart; + float timestep = psys_get_timestep(sim); + + /* negative time means "use current time" */ + cfra = state->time > 0 ? state->time : DEG_get_ctime(sim->depsgraph); + + if (p >= totpart) { + if (!psys->totchild) { + return false; + } + + if (part->childtype == PART_CHILD_FACES) { + if (!(psys->flag & PSYS_KEYED)) { + return false; + } + + cpa = psys->child + p - totpart; + + state->time = psys_get_child_time(psys, cpa, cfra, nullptr, nullptr); + + if (!always) { + if ((state->time < 0.0f && !(part->flag & PART_UNBORN)) || + (state->time > 1.0f && !(part->flag & PART_DIED))) + { + return false; + } + } + + state->time = (cfra - (part->sta + (part->end - part->sta) * psys_frand(psys, p + 23))) / + (part->lifetime * psys_frand(psys, p + 24)); + + psys_get_particle_on_path(sim, p, state, true); + return true; + } + + cpa = sim->psys->child + p - totpart; + pa = sim->psys->particles + cpa->parent; + } + else { + pa = sim->psys->particles + p; + } + + if (pa) { + if (!always) { + if ((cfra < pa->time && (part->flag & PART_UNBORN) == 0) || + (cfra >= pa->dietime && (part->flag & PART_DIED) == 0)) + { + return false; + } + } + + cfra = std::min(cfra, pa->dietime); + } + + if (sim->psys->flag & PSYS_KEYED) { + state->time = -cfra; + psys_get_particle_on_path(sim, p, state, true); + return true; + } + + if (cpa) { + float mat[4][4]; + ParticleKey *key1; + float t = (cfra - pa->time) / pa->lifetime; + const float par_orco[3] = {0.0f, 0.0f, 0.0f}; + + key1 = &pa->state; + offset_child(cpa, key1, key1->rot, state, part->childflat, part->childrad); + + CLAMP(t, 0.0f, 1.0f); + + unit_m4(mat); + ParticleChildModifierContext modifier_ctx = {nullptr}; + modifier_ctx.thread_ctx = nullptr; + modifier_ctx.sim = sim; + modifier_ctx.ptex = nullptr; + modifier_ctx.cpa = cpa; + modifier_ctx.orco = cpa->fuv; + modifier_ctx.par_co = key1->co; + modifier_ctx.par_vel = key1->vel; + modifier_ctx.par_rot = key1->rot; + modifier_ctx.par_orco = par_orco; + modifier_ctx.parent_keys = psys->childcache ? psys->childcache[p - totpart] : nullptr; + + do_child_modifiers(&modifier_ctx, mat, state, t); + + if (psys->lattice_deform_data) { + BKE_lattice_deform_data_eval_co( + psys->lattice_deform_data, state->co, psys->lattice_strength); + } + } + else { + if (pa->state.time == cfra || ELEM(part->phystype, PART_PHYS_NO, PART_PHYS_KEYED)) { + copy_particle_key(state, &pa->state, 1); + } + else if (pa->prev_state.time == cfra) { + copy_particle_key(state, &pa->prev_state, 1); + } + else { + float dfra, frs_sec = sim->scene->r.frs_sec; + /* let's interpolate to try to be as accurate as possible */ + if (pa->state.time + 2.0f >= state->time && pa->prev_state.time - 2.0f <= state->time) { + if (pa->prev_state.time >= pa->state.time || pa->prev_state.time < 0.0f) { + /* prev_state is wrong so let's not use it, + * this can happen at frames 1, 0 or particle birth. */ + dfra = state->time - pa->state.time; + + copy_particle_key(state, &pa->state, 1); + + madd_v3_v3v3fl(state->co, state->co, state->vel, dfra / frs_sec); + } + else { + ParticleKey keys[4]; + float keytime; + + copy_particle_key(keys + 1, &pa->prev_state, 1); + copy_particle_key(keys + 2, &pa->state, 1); + + dfra = keys[2].time - keys[1].time; + + keytime = (state->time - keys[1].time) / dfra; + + /* convert velocity to timestep size */ + mul_v3_fl(keys[1].vel, dfra * timestep); + mul_v3_fl(keys[2].vel, dfra * timestep); + + psys_interpolate_particle(-1, keys, keytime, state, true); + + /* convert back to real velocity */ + mul_v3_fl(state->vel, 1.0f / (dfra * timestep)); + + interp_v3_v3v3(state->ave, keys[1].ave, keys[2].ave, keytime); + interp_qt_qtqt(state->rot, keys[1].rot, keys[2].rot, keytime); + } + } + else if (pa->state.time + 1.0f >= state->time && pa->state.time - 1.0f <= state->time) { + /* linear interpolation using only pa->state */ + + dfra = state->time - pa->state.time; + + copy_particle_key(state, &pa->state, 1); + + madd_v3_v3v3fl(state->co, state->co, state->vel, dfra / frs_sec); + } + else { + /* Extrapolating over big ranges is not accurate + * so let's just give something close to reasonable back. */ + copy_particle_key(state, &pa->state, 0); + } + } + + if (sim->psys->lattice_deform_data) { + BKE_lattice_deform_data_eval_co( + sim->psys->lattice_deform_data, state->co, psys->lattice_strength); + } + } + + return true; +} + +void psys_get_dupli_texture(ParticleSystem *psys, + ParticleSettings *part, + ParticleSystemModifierData *psmd, + ParticleData *pa, + ChildParticle *cpa, + float uv[2], + float orco[3]) +{ + float loc[3]; + int num; + + /* XXX: on checking '(psmd->dm != nullptr)' + * This is incorrect but needed for meta-ball evaluation. + * Ideally this would be calculated via the depsgraph, however with meta-balls, + * the entire scenes dupli's are scanned, which also looks into uncalculated data. + * + * For now just include this workaround as an alternative to crashing, + * but longer term meta-balls should behave in a more manageable way, see: #46622. */ + + uv[0] = uv[1] = 0.0f; + + /* Grid distribution doesn't support UV or emit from vertex mode */ + bool is_grid = (part->distr == PART_DISTR_GRID && part->from != PART_FROM_VERT); + + if (cpa) { + if ((part->childtype == PART_CHILD_FACES) && (psmd->mesh_final != nullptr)) { + if (!is_grid) { + CustomData *mtf_data = &psmd->mesh_final->fdata_legacy; + const int uv_idx = CustomData_get_render_layer(mtf_data, CD_MTFACE); + + if (uv_idx >= 0) { + const MTFace *mtface = static_cast( + CustomData_get_layer_n(mtf_data, CD_MTFACE, uv_idx)); + if (mtface != nullptr) { + const MFace *mface = static_cast( + CustomData_get_for_write(&psmd->mesh_final->fdata_legacy, + cpa->num, + CD_MFACE, + psmd->mesh_final->totface_legacy)); + mtface += cpa->num; + psys_interpolate_uvs(mtface, mface->v4, cpa->fuv, uv); + } + } + } + + psys_particle_on_emitter(psmd, + PART_FROM_FACE, + cpa->num, + DMCACHE_ISCHILD, + cpa->fuv, + cpa->foffset, + loc, + nullptr, + nullptr, + nullptr, + orco); + return; + } + + pa = psys->particles + cpa->pa[0]; + } + + if ((part->from == PART_FROM_FACE) && (psmd->mesh_final != nullptr) && !is_grid) { + num = pa->num_dmcache; + + if (num == DMCACHE_NOTFOUND) { + num = pa->num; + } + + if (num >= psmd->mesh_final->totface_legacy) { + /* happens when simplify is enabled + * gives invalid coords but would crash otherwise */ + num = DMCACHE_NOTFOUND; + } + + if (!ELEM(num, DMCACHE_NOTFOUND, DMCACHE_ISCHILD)) { + CustomData *mtf_data = &psmd->mesh_final->fdata_legacy; + const int uv_idx = CustomData_get_render_layer(mtf_data, CD_MTFACE); + + if (uv_idx >= 0) { + const MTFace *mtface = static_cast( + CustomData_get_layer_n(mtf_data, CD_MTFACE, uv_idx)); + const MFace *mface = static_cast(CustomData_get_for_write( + &psmd->mesh_final->fdata_legacy, num, CD_MFACE, psmd->mesh_final->totface_legacy)); + mtface += num; + psys_interpolate_uvs(mtface, mface->v4, pa->fuv, uv); + } + } + } + + psys_particle_on_emitter(psmd, + part->from, + pa->num, + pa->num_dmcache, + pa->fuv, + pa->foffset, + loc, + nullptr, + nullptr, + nullptr, + orco); +} + +void psys_get_dupli_path_transform(ParticleSimulationData *sim, + ParticleData *pa, + ChildParticle *cpa, + ParticleCacheKey *cache, + float mat[4][4], + float *scale) +{ + Object *ob = sim->ob; + ParticleSystem *psys = sim->psys; + ParticleSystemModifierData *psmd = sim->psmd; + float loc[3], nor[3], vec[3], side[3], len; + float xvec[3] = {-1.0, 0.0, 0.0}, nmat[3][3]; + + sub_v3_v3v3(vec, (cache + cache->segments)->co, cache->co); + len = normalize_v3(vec); + + if (pa == nullptr) { + pa = psys->particles + cpa->pa[0]; + } + + psys_particle_on_emitter(psmd, + sim->psys->part->from, + pa->num, + pa->num_dmcache, + pa->fuv, + pa->foffset, + loc, + nor, + nullptr, + nullptr, + nullptr); + + if (psys->part->rotmode == PART_ROT_VEL) { + transpose_m3_m4(nmat, ob->world_to_object().ptr()); + mul_m3_v3(nmat, nor); + normalize_v3(nor); + + /* make sure that we get a proper side vector */ + if (fabsf(dot_v3v3(nor, vec)) > 0.999999f) { + if (fabsf(dot_v3v3(nor, xvec)) > 0.999999f) { + nor[0] = 0.0f; + nor[1] = 1.0f; + nor[2] = 0.0f; + } + else { + nor[0] = 1.0f; + nor[1] = 0.0f; + nor[2] = 0.0f; + } + } + cross_v3_v3v3(side, nor, vec); + normalize_v3(side); + + /* rotate side vector around vec */ + if (psys->part->phasefac != 0) { + float q_phase[4]; + float phasefac = psys->part->phasefac; + if (psys->part->randphasefac != 0.0f) { + phasefac += psys->part->randphasefac * psys_frand(psys, (pa - psys->particles) + 20); + } + axis_angle_to_quat(q_phase, vec, phasefac * float(M_PI)); + + mul_qt_v3(q_phase, side); + } + + cross_v3_v3v3(nor, vec, side); + + unit_m4(mat); + copy_v3_v3(mat[0], vec); + copy_v3_v3(mat[1], side); + copy_v3_v3(mat[2], nor); + } + else { + quat_to_mat4(mat, pa->state.rot); + } + + *scale = len; +} + +void psys_apply_hair_lattice(Depsgraph *depsgraph, Scene *scene, Object *ob, ParticleSystem *psys) +{ + ParticleSimulationData sim = {nullptr}; + sim.depsgraph = depsgraph; + sim.scene = scene; + sim.ob = ob; + sim.psys = psys; + sim.psmd = psys_get_modifier(ob, psys); + + psys_sim_data_init(&sim); + + if (psys->lattice_deform_data) { + ParticleData *pa = psys->particles; + HairKey *hkey; + int p, h; + float hairmat[4][4], imat[4][4]; + + for (p = 0; p < psys->totpart; p++, pa++) { + psys_mat_hair_to_global(sim.ob, sim.psmd->mesh_final, psys->part->from, pa, hairmat); + invert_m4_m4(imat, hairmat); + + hkey = pa->hair; + for (h = 0; h < pa->totkey; h++, hkey++) { + mul_m4_v3(hairmat, hkey->co); + BKE_lattice_deform_data_eval_co( + psys->lattice_deform_data, hkey->co, psys->lattice_strength); + mul_m4_v3(imat, hkey->co); + } + } + + /* protect the applied shape */ + psys->flag |= PSYS_EDITED; + } + + psys_sim_data_free(&sim); +} + +void BKE_particle_co_hair(const ParticleSystem *particlesystem, + const Object *object, + int particle_no, + int step, + float n_co[3]) +{ + ParticleSettings *part = nullptr; + ParticleData *pars = nullptr; + ParticleCacheKey *cache = nullptr; + int totchild = 0; + int totpart; + int max_k = 0; + + if (particlesystem == nullptr) { + return; + } + + part = particlesystem->part; + pars = particlesystem->particles; + totpart = particlesystem->totcached; + totchild = particlesystem->totchildcache; + + if (part == nullptr || pars == nullptr) { + return; + } + + if (ELEM(part->ren_as, PART_DRAW_OB, PART_DRAW_GR, PART_DRAW_NOT)) { + return; + } + + /* can happen for disconnected/global hair */ + if (part->type == PART_HAIR && !particlesystem->childcache) { + totchild = 0; + } + + if (particle_no < totpart && particlesystem->pathcache) { + cache = particlesystem->pathcache[particle_no]; + max_k = int(cache->segments); + } + else if (particle_no < totpart + totchild && particlesystem->childcache) { + cache = particlesystem->childcache[particle_no - totpart]; + + if (cache->segments < 0) { + max_k = 0; + } + else { + max_k = int(cache->segments); + } + } + else { + return; + } + + /* Strands key loop data stored in cache + step->co. */ + if (step >= 0 && step <= max_k) { + copy_v3_v3(n_co, (cache + step)->co); + mul_m4_v3(particlesystem->imat, n_co); + mul_m4_v3(object->object_to_world().ptr(), n_co); + } +} + +/* return < 0 means invalid (no matching tessellated face could be found). */ +static int tessfaceidx_on_emitter(ParticleSystem *particlesystem, + ParticleSystemModifierData *modifier, + ParticleData *particle, + int particle_no, + float (**r_fuv)[4]) +{ + ParticleSettings *part = nullptr; + int totpart; + int totchild = 0; + int totface; + int totvert; + int num = -1; + + BKE_mesh_tessface_ensure(modifier->mesh_final); /* BMESH - UNTIL MODIFIER IS UPDATED FOR POLYS */ + totface = modifier->mesh_final->totface_legacy; + totvert = modifier->mesh_final->verts_num; + + /* 1. check that everything is ok & updated */ + if (!particlesystem || !totface) { + return num; + } + + part = particlesystem->part; + /* NOTE: only hair, keyed and baked particles may have cached items... */ + totpart = particlesystem->totcached != 0 ? particlesystem->totcached : particlesystem->totpart; + totchild = particlesystem->totchildcache != 0 ? particlesystem->totchildcache : + particlesystem->totchild; + + /* can happen for disconnected/global hair */ + if (part->type == PART_HAIR && !particlesystem->childcache) { + totchild = 0; + } + + if (particle_no >= totpart + totchild) { + return num; + } + + /* 2. get matching face index. */ + if (particle_no < totpart) { + num = (ELEM(particle->num_dmcache, DMCACHE_ISCHILD, DMCACHE_NOTFOUND)) ? particle->num : + particle->num_dmcache; + + if (ELEM(part->from, PART_FROM_FACE, PART_FROM_VOLUME)) { + if (num != DMCACHE_NOTFOUND && num < totface) { + *r_fuv = &particle->fuv; + return num; + } + } + else if (part->from == PART_FROM_VERT) { + if (num != DMCACHE_NOTFOUND && num < totvert) { + const MFace *mface = static_cast( + CustomData_get_layer(&modifier->mesh_final->fdata_legacy, CD_MFACE)); + + *r_fuv = &particle->fuv; + + /* This finds the first face to contain the emitting vertex, + * this is not ideal, but is mostly fine as UV seams generally + * map to equal-colored parts of a texture */ + for (int i = 0; i < totface; i++, mface++) { + if (ELEM(num, mface->v1, mface->v2, mface->v3, mface->v4)) { + return i; + } + } + } + } + } + else { + ChildParticle *cpa = particlesystem->child + particle_no - totpart; + num = cpa->num; + + if (part->childtype == PART_CHILD_FACES) { + if (ELEM(part->from, PART_FROM_FACE, PART_FROM_VOLUME, PART_FROM_VERT)) { + if (num != DMCACHE_NOTFOUND && num < totface) { + *r_fuv = &cpa->fuv; + return num; + } + } + } + else { + ParticleData *parent = particlesystem->particles + cpa->parent; + num = parent->num_dmcache; + + if (num == DMCACHE_NOTFOUND) { + num = parent->num; + } + + if (ELEM(part->from, PART_FROM_FACE, PART_FROM_VOLUME)) { + if (num != DMCACHE_NOTFOUND && num < totface) { + *r_fuv = &parent->fuv; + return num; + } + } + else if (part->from == PART_FROM_VERT) { + if (num != DMCACHE_NOTFOUND && num < totvert) { + const MFace *mface = static_cast( + CustomData_get_layer(&modifier->mesh_final->fdata_legacy, CD_MFACE)); + + *r_fuv = &parent->fuv; + + /* This finds the first face to contain the emitting vertex, + * this is not ideal, but is mostly fine as UV seams generally + * map to equal-colored parts of a texture */ + for (int i = 0; i < totface; i++, mface++) { + if (ELEM(num, mface->v1, mface->v2, mface->v3, mface->v4)) { + return i; + } + } + } + } + } + } + + return -1; +} + +void BKE_particle_uv_on_emitter(ParticleSystem *particlesystem, + ReportList *reports, + ParticleSystemModifierData *modifier, + ParticleData *particle, + int particle_no, + int uv_no, + float r_uv[2]) +{ + if (modifier->mesh_final == nullptr) { + BKE_report(reports, RPT_ERROR, "Object was not yet evaluated"); + zero_v2(r_uv); + return; + } + if (modifier->mesh_final->uv_map_names().is_empty()) { + BKE_report(reports, RPT_ERROR, "Mesh has no UV data"); + zero_v2(r_uv); + return; + } + + { + float (*fuv)[4]; + /* Note all sanity checks are done in this helper func. */ + const int num = tessfaceidx_on_emitter(particlesystem, modifier, particle, particle_no, &fuv); + + if (num < 0) { + /* No matching face found. */ + zero_v2(r_uv); + } + else { + const MFace *mfaces = static_cast( + CustomData_get_layer(&modifier->mesh_final->fdata_legacy, CD_MFACE)); + const MFace *mface = &mfaces[num]; + const MTFace *mtface = static_cast( + CustomData_get_layer_n(&modifier->mesh_final->fdata_legacy, CD_MTFACE, uv_no)); + + psys_interpolate_uvs(&mtface[num], mface->v4, *fuv, r_uv); + } + } +} + +void BKE_particle_mcol_on_emitter(ParticleSystem *particlesystem, + ReportList *reports, + ParticleSystemModifierData *modifier, + ParticleData *particle, + int particle_no, + int vcol_no, + float r_mcol[3]) +{ + if (!CustomData_has_layer(&modifier->mesh_final->fdata_legacy, CD_MCOL)) { + BKE_report(reports, RPT_ERROR, "Mesh has no VCol data"); + zero_v3(r_mcol); + return; + } + + { + float (*fuv)[4]; + /* Note all sanity checks are done in this helper func. */ + const int num = tessfaceidx_on_emitter(particlesystem, modifier, particle, particle_no, &fuv); + + if (num < 0) { + /* No matching face found. */ + zero_v3(r_mcol); + } + else { + const MFace *mfaces = static_cast( + CustomData_get_layer(&modifier->mesh_final->fdata_legacy, CD_MFACE)); + const MFace *mface = &mfaces[num]; + const MCol *mc = static_cast( + CustomData_get_layer_n(&modifier->mesh_final->fdata_legacy, CD_MCOL, vcol_no)); + MCol mcol; + + psys_interpolate_mcol(&mc[num * 4], mface->v4, *fuv, &mcol); + r_mcol[0] = float(mcol.b) / 255.0f; + r_mcol[1] = float(mcol.g) / 255.0f; + r_mcol[2] = float(mcol.r) / 255.0f; + } + } +} + +/* Draw Engine */ + +void (*BKE_particle_batch_cache_dirty_tag_cb)(ParticleSystem *psys, int mode) = nullptr; +void (*BKE_particle_batch_cache_free_cb)(ParticleSystem *psys) = nullptr; + +void BKE_particle_batch_cache_dirty_tag(ParticleSystem *psys, int mode) +{ + if (psys->batch_cache) { + BKE_particle_batch_cache_dirty_tag_cb(psys, mode); + } +} +void BKE_particle_batch_cache_free(ParticleSystem *psys) +{ + if (psys->batch_cache) { + BKE_particle_batch_cache_free_cb(psys); + } +} + +void BKE_particle_system_blend_write(BlendWriter *writer, ListBaseT *particles) +{ + for (ParticleSystem &psys : *particles) { + writer->write_struct(&psys); + + if (psys.particles) { + writer->write_struct_array(psys.totpart, psys.particles); + + if (psys.particles->hair) { + ParticleData *pa = psys.particles; + + for (int a = 0; a < psys.totpart; a++, pa++) { + writer->write_struct_array(pa->totkey, pa->hair); + } + } + + if (psys.particles->boid && (psys.part->phystype == PART_PHYS_BOIDS)) { + writer->write_struct_array(psys.totpart, psys.particles->boid); + } + + if (psys.part->fluid && (psys.part->phystype == PART_PHYS_FLUID) && + (psys.part->fluid->flag & SPH_VISCOELASTIC_SPRINGS)) + { + writer->write_struct_array(psys.tot_fluidsprings, psys.fluid_springs); + } + } + for (ParticleTarget &pt : psys.targets) { + writer->write_struct(&pt); + } + + if (psys.child) { + writer->write_struct_array(psys.totchild, psys.child); + } + + if (psys.clmd) { + writer->write_struct(psys.clmd); + writer->write_struct(psys.clmd->sim_parms); + writer->write_struct(psys.clmd->coll_parms); + } + + BKE_ptcache_blend_write(writer, &psys.ptcaches); + } +} + +void BKE_particle_system_blend_read_data(BlendDataReader *reader, + ListBaseT *particles) +{ + ParticleData *pa; + int a; + + for (ParticleSystem &psys : *particles) { + BLO_read_array_and_validate_size(reader, &psys.particles, &psys.totpart); + + if (psys.particles && psys.particles->hair) { + for (a = 0, pa = psys.particles; a < psys.totpart; a++, pa++) { + BLO_read_array_and_validate_size(reader, &pa->hair, &pa->totkey); + } + } + + if (psys.particles && psys.particles->keys) { + for (a = 0, pa = psys.particles; a < psys.totpart; a++, pa++) { + pa->keys = nullptr; + pa->totkey = 0; + } + + psys.flag &= ~PSYS_KEYED; + } + + if (psys.particles && psys.particles->boid) { + pa = psys.particles; + BLO_read_array_and_validate_size(reader, &pa->boid, &psys.totpart); + + if (pa->boid) { + /* This is purely runtime data, but still can be an issue if left dangling. */ + pa->boid->ground = nullptr; + + for (a = 1, pa++; a < psys.totpart; a++, pa++) { + pa->boid = (pa - 1)->boid + 1; + pa->boid->ground = nullptr; + } + } + } + else if (psys.particles) { + for (a = 0, pa = psys.particles; a < psys.totpart; a++, pa++) { + pa->boid = nullptr; + } + } + + BLO_read_array_and_validate_size(reader, &psys.fluid_springs, &psys.tot_fluidsprings); + + BLO_read_array_and_validate_size(reader, &psys.child, &psys.totchild); + psys.effectors = nullptr; + + BLO_read_struct_list(reader, ParticleTarget, &psys.targets); + + psys.edit = nullptr; + psys.free_edit = nullptr; + psys.pathcache = nullptr; + psys.childcache = nullptr; + psys.pathcachebufs.clear_no_delete(); + psys.childcachebufs.clear_no_delete(); + psys.pdd = nullptr; + + if (psys.clmd) { + BLO_read_struct(reader, ClothModifierData, &psys.clmd); + psys.clmd->clothObject = nullptr; + psys.clmd->hairdata = nullptr; + + BLO_read_struct(reader, ClothSimSettings, &psys.clmd->sim_parms); + BLO_read_struct(reader, ClothCollSettings, &psys.clmd->coll_parms); + + if (psys.clmd->sim_parms) { + psys.clmd->sim_parms->effector_weights = nullptr; + if (psys.clmd->sim_parms->presets > 10) { + psys.clmd->sim_parms->presets = 0; + } + } + + psys.hair_in_mesh = psys.hair_out_mesh = nullptr; + psys.clmd->solver_result = nullptr; + } + + BKE_ptcache_blend_read_data(reader, &psys.ptcaches, &psys.pointcache, 0); + if (psys.clmd) { + psys.clmd->point_cache = psys.pointcache; + } + + psys.tree = nullptr; + psys.bvhtree = nullptr; + + psys.orig_psys = nullptr; + psys.batch_cache = nullptr; + } +} + +void BKE_particle_system_blend_read_after_liblink(BlendLibReader * /*reader*/, + Object *ob, + ID * /*id*/, + ListBaseT *particles) +{ + for (ParticleSystem &psys : particles->items_mutable()) { + if (psys.part) { + if (psys.clmd) { + /* XXX(@ideasman42): from reading existing code this seems correct but intended usage + * of point-cache with cloth should be added in #ParticleSystem. */ + psys.clmd->point_cache = psys.pointcache; + psys.clmd->ptcaches.first = psys.clmd->ptcaches.last = nullptr; + psys.clmd->modifier.error = nullptr; + } + } + else { +#ifdef WITH_WEB + /* Keep unlinked legacy particle systems in the Web Main as metadata-only entries. The + * desktop cleanup path assumes a fully linked ParticleSettings pointer and would free a + * stale modifier allocation in the narrow Web registry. */ + continue; +#else + /* Particle modifier must be removed before particle system. */ + ParticleSystemModifierData *psmd = psys_get_modifier(ob, &psys); + BKE_modifier_remove_from_list(ob, reinterpret_cast(psmd)); + BKE_modifier_free(reinterpret_cast(psmd)); + + BLI_remlink(particles, &psys); + MEM_delete(&psys); +#endif + } + } +} + +/** \} */ + +} // namespace blender diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/blender-5.2.0/source/blender/modifiers/CMakeLists.txt b/tests/golden/corrective/C0-002/staged/source-snapshot/files/blender-5.2.0/source/blender/modifiers/CMakeLists.txt new file mode 100644 index 00000000..4bd85331 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/blender-5.2.0/source/blender/modifiers/CMakeLists.txt @@ -0,0 +1,252 @@ +# SPDX-FileCopyrightText: 2006 Blender Authors +# +# SPDX-License-Identifier: GPL-2.0-or-later + +set(INC + . + intern + intern/lineart + ../editors/include + ../makesrna + ../../../intern/eigen + + # RNA_prototypes.hh + ${CMAKE_BINARY_DIR}/source/blender/makesrna +) + +set(INC_SYS +) + +set(SRC + intern/MOD_armature.cc + intern/MOD_array.cc + intern/MOD_bevel.cc + intern/MOD_cast.cc + intern/MOD_boolean.cc + intern/MOD_build.cc + intern/MOD_cloth.cc + intern/MOD_collision.cc + intern/MOD_correctivesmooth.cc + intern/MOD_curve.cc + intern/MOD_datatransfer.cc + intern/MOD_decimate.cc + intern/MOD_displace.cc + intern/MOD_dynamicpaint.cc + intern/MOD_edgesplit.cc + intern/MOD_explode.cc + intern/MOD_fluid.cc + intern/MOD_grease_pencil_armature.cc + intern/MOD_grease_pencil_array.cc + intern/MOD_grease_pencil_build.cc + intern/MOD_grease_pencil_color.cc + intern/MOD_grease_pencil_dash.cc + intern/MOD_grease_pencil_envelope.cc + intern/MOD_grease_pencil_hook.cc + intern/MOD_grease_pencil_lattice.cc + intern/MOD_grease_pencil_length.cc + intern/MOD_grease_pencil_mirror.cc + intern/MOD_grease_pencil_multiply.cc + intern/MOD_grease_pencil_noise.cc + intern/MOD_grease_pencil_offset.cc + intern/MOD_grease_pencil_opacity.cc + intern/MOD_grease_pencil_outline.cc + intern/MOD_grease_pencil_shrinkwrap.cc + intern/MOD_grease_pencil_simplify.cc + intern/MOD_grease_pencil_smooth.cc + intern/MOD_grease_pencil_subdiv.cc + intern/MOD_grease_pencil_texture.cc + intern/MOD_grease_pencil_thickness.cc + intern/MOD_grease_pencil_time.cc + intern/MOD_grease_pencil_tint.cc + intern/MOD_grease_pencil_util.cc + intern/MOD_grease_pencil_weight_angle.cc + intern/MOD_grease_pencil_weight_proximity.cc + intern/MOD_hook.cc + intern/MOD_laplaciandeform.cc + intern/MOD_laplaciansmooth.cc + intern/MOD_lattice.cc + intern/MOD_lineart.cc + intern/MOD_mask.cc + intern/MOD_mesh_to_volume.cc + intern/MOD_meshcache.cc + intern/MOD_meshcache_mdd.cc + intern/MOD_meshcache_pc2.cc + intern/MOD_meshcache_util.cc + intern/MOD_meshdeform.cc + intern/MOD_meshsequencecache.cc + intern/MOD_mirror.cc + intern/MOD_multires.cc + intern/MOD_nodes.cc + intern/MOD_none.cc + intern/MOD_normal_edit.cc + intern/MOD_ocean.cc + intern/MOD_particleinstance.cc + intern/MOD_particlesystem.cc + intern/MOD_remesh.cc + intern/MOD_screw.cc + intern/MOD_shapekey.cc + intern/MOD_shrinkwrap.cc + intern/MOD_simpledeform.cc + intern/MOD_skin.cc + intern/MOD_smooth.cc + intern/MOD_softbody.cc + intern/MOD_solidify.cc + intern/MOD_solidify_extrude.cc + intern/MOD_solidify_nonmanifold.cc + intern/MOD_subsurf.cc + intern/MOD_surface.cc + intern/MOD_surfacedeform.cc + intern/MOD_triangulate.cc + intern/MOD_ui_common.cc + intern/MOD_util.cc + intern/MOD_uvproject.cc + intern/MOD_uvwarp.cc + intern/MOD_volume_displace.cc + intern/MOD_volume_to_mesh.cc + intern/MOD_warp.cc + intern/MOD_wave.cc + intern/MOD_weighted_normal.cc + intern/MOD_weightvg_util.cc + intern/MOD_weightvgedit.cc + intern/MOD_weightvgmix.cc + intern/MOD_weightvgproximity.cc + intern/MOD_weld.cc + intern/MOD_wireframe.cc + intern/lineart/lineart_chain.cc + intern/lineart/lineart_cpu.cc + intern/lineart/lineart_shadow.cc + intern/lineart/lineart_util.cc + + MOD_modifiertypes.hh + MOD_nodes.hh + intern/MOD_grease_pencil_util.hh + intern/MOD_meshcache_util.hh + intern/MOD_solidify_util.hh + intern/MOD_ui_common.hh + intern/MOD_util.hh + intern/MOD_weightvg_util.hh + intern/lineart/MOD_lineart.hh + intern/lineart/lineart_intern.hh +) + +set(LIB + PRIVATE bf::blenfont + PRIVATE bf::blenkernel + PRIVATE bf::blenlib + PRIVATE bf::blenloader + PRIVATE bf::blentranslation + PRIVATE bf::bmesh + PRIVATE bf::depsgraph + PUBLIC bf::dna + PRIVATE bf::functions + PRIVATE bf::geometry + PRIVATE bf::imbuf + PRIVATE bf::intern::guardedalloc + PRIVATE bf::extern::xxhash + PRIVATE bf::nodes + PRIVATE bf::render + PRIVATE bf::windowmanager + PRIVATE bf::dependencies::zlib + PRIVATE bf::dependencies::optional::gmp + PRIVATE bf::dependencies::optional::bullet + PRIVATE bf::dependencies::optional::opensubdiv +) + +if(WITH_ALEMBIC) + add_definitions(-DWITH_ALEMBIC) + list(APPEND INC + ../io/alembic + ) + list(APPEND LIB + bf_io_alembic + ) +endif() + +if(WITH_USD) + add_definitions(-DWITH_USD) + list(APPEND INC + ../io/usd + ) + list(APPEND LIB + bf_io_usd + ) +endif() + +if(WITH_MOD_REMESH) + list(APPEND INC + ../../../intern/dualcon + ) + list(APPEND LIB + bf_intern_dualcon + ) + add_definitions(-DWITH_MOD_REMESH) +endif() + +if(WITH_MOD_FLUID) + add_definitions(-DWITH_FLUID) +endif() + +if(WITH_MOD_OCEANSIM) + add_definitions(-DWITH_OCEANSIM) +endif() + +# To disable adaptive subdivision test in subdivision-surface UI without cycles. +if(WITH_CYCLES) + add_definitions(-DWITH_CYCLES) +endif() + +if(WITH_EXPERIMENTAL_FEATURES) + add_definitions(-DWITH_SIMULATION_DATABLOCK) +endif() + +# The browser evaluator registers a deliberately narrow modifier set in +# MOD_util.cc. Do not retain the desktop modifier implementation objects: +# their UI callbacks bring window-manager and editor dependencies into the +# otherwise headless WebAssembly data engine. +if(WITH_WEB) + set(SRC + intern/MOD_armature.cc + intern/MOD_array.cc + intern/MOD_bevel.cc + intern/MOD_cast_web.cc + intern/MOD_boolean.cc + intern/MOD_build.cc + intern/MOD_curve.cc + intern/MOD_decimate.cc + intern/MOD_displace_web.cc + intern/MOD_edgesplit.cc + intern/MOD_hook.cc + intern/MOD_lattice.cc + intern/MOD_mirror.cc + intern/MOD_meshdeform.cc + intern/MOD_nodes_web.cc + intern/MOD_particlesystem.cc + intern/MOD_none.cc + intern/MOD_screw.cc + intern/MOD_shapekey.cc + intern/MOD_shrinkwrap.cc + intern/MOD_simpledeform.cc + intern/MOD_smooth.cc + intern/MOD_solidify.cc + intern/MOD_solidify_extrude.cc + intern/MOD_solidify_nonmanifold.cc + intern/MOD_subsurf.cc + intern/MOD_surfacedeform.cc + intern/MOD_triangulate.cc + intern/MOD_util.cc + intern/MOD_wave.cc + intern/MOD_weld.cc + intern/MOD_wireframe.cc + + MOD_modifiertypes.hh + intern/MOD_solidify_util.hh + intern/MOD_util.hh + ) +endif() + +# So we can have special tricks in modifier system. + +blender_add_lib(bf_modifiers "${SRC}" "${INC}" "${INC_SYS}" "${LIB}") + +# RNA_prototypes.hh +add_dependencies(bf_modifiers bf_rna) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc b/tests/golden/corrective/C0-002/staged/source-snapshot/files/blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc new file mode 100644 index 00000000..4ccb5d0f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc @@ -0,0 +1,303 @@ +/* SPDX-FileCopyrightText: 2005 Blender Authors + * + * SPDX-License-Identifier: GPL-2.0-or-later */ + +/** \file + * \ingroup modifiers + */ + +#include +#include + +#include "BLI_utildefines.h" + +#include "BLT_translation.hh" + +#include "DNA_mesh_types.h" +#include "DNA_screen_types.h" + +#include "BKE_editmesh.hh" +#include "BKE_lib_id.hh" +#include "BKE_mesh.hh" +#include "BKE_mesh_legacy_convert.hh" +#include "BKE_modifier.hh" +#include "BKE_particle.h" + +#include "UI_interface_layout.hh" +#include "UI_resources.hh" + +#include "RNA_prototypes.hh" +#include "RNA_types.hh" + +#include "DEG_depsgraph_query.hh" + +#include "BLO_read_write.hh" + +#include "MOD_ui_common.hh" + +namespace blender { + +static void init_data(ModifierData *md) +{ + ParticleSystemModifierData *psmd = reinterpret_cast(md); + INIT_DEFAULT_STRUCT_AFTER(psmd, modifier); +} +static void free_data(ModifierData *md) +{ + ParticleSystemModifierData *psmd = reinterpret_cast(md); + + if (psmd->mesh_final) { + BKE_id_free(nullptr, psmd->mesh_final); + psmd->mesh_final = nullptr; + if (psmd->mesh_original) { + BKE_id_free(nullptr, psmd->mesh_original); + psmd->mesh_original = nullptr; + } + } + psmd->totdmvert = psmd->totdmedge = psmd->totdmface = 0; + + /* ed::object::modifier_remove may have freed this first before calling + * BKE_modifier_free (which calls this function) */ + if (psmd->psys) { + psmd->psys->flag |= PSYS_DELETE; + } +} + +static void copy_data(const ModifierData *md, ModifierData *target, const int flag) +{ +#if 0 + const ParticleSystemModifierData *psmd = (const ParticleSystemModifierData *)md; +#endif + ParticleSystemModifierData *tpsmd = reinterpret_cast(target); + + BKE_modifier_copydata_generic(md, target, flag); + + /* NOTE: `psys` pointer here is just copied over from `md` to `target`. This is dangerous, as it + * will generate invalid data in case we are copying between different objects. Extra external + * code has to be called then to ensure proper remapping of that pointer. See e.g. + * `BKE_object_copy_particlesystems` or `BKE_object_copy_modifier`. */ + + tpsmd->mesh_final = nullptr; + tpsmd->mesh_original = nullptr; + tpsmd->totdmvert = tpsmd->totdmedge = tpsmd->totdmface = 0; +} + +static void required_data_mask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks) +{ + ParticleSystemModifierData *psmd = reinterpret_cast(md); + + psys_emitter_customdata_mask(psmd->psys, r_cddata_masks); +} + +/* saves the current emitter state for a particle system and calculates particles */ +static void deform_verts(ModifierData *md, + const ModifierEvalContext *ctx, + Mesh *mesh, + MutableSpan positions) +{ + ParticleSystemModifierData *psmd = reinterpret_cast(md); + ParticleSystem *psys = nullptr; + + if (ctx->object->particlesystem.first) { + psys = psmd->psys; + } + else { + return; + } + + if (!psys_check_enabled(ctx->object, psys, (ctx->flag & MOD_APPLY_RENDER) != 0)) { + return; + } + + /* Clear old evaluated mesh. */ + bool had_mesh_final = (psmd->mesh_final != nullptr); + if (psmd->mesh_final) { + BKE_id_free(nullptr, psmd->mesh_final); + psmd->mesh_final = nullptr; + if (psmd->mesh_original) { + BKE_id_free(nullptr, psmd->mesh_original); + psmd->mesh_original = nullptr; + } + } + else if (psmd->flag & eParticleSystemFlag_file_loaded) { + /* in file read mesh just wasn't saved in file so no need to reset everything */ + psmd->flag &= ~eParticleSystemFlag_file_loaded; + if (psys->particles == nullptr) { + psys->recalc |= ID_RECALC_PSYS_RESET; + } + /* TODO(sergey): This is not how particles were working prior to copy on + * write, but now evaluation is similar to case when one duplicates the + * object. In that case particles were doing reset here. + * + * Don't do reset when entering particle edit mode, as that will destroy the edit mode data. + * Shouldn't be an issue, since particles are supposed to be evaluated once prior to entering + * edit mode anyway. + * Could in theory be an issue when everything is done in a script, but then solution is + * not known to me. */ + if (ctx->object->mode != OB_MODE_PARTICLE_EDIT) { + psys->recalc |= ID_RECALC_PSYS_RESET; + } + } + + /* make new mesh */ + psmd->mesh_final = BKE_mesh_copy_for_eval(*mesh); + psmd->mesh_final->vert_positions_for_write().copy_from(positions); + psmd->mesh_final->tag_positions_changed(); + + BKE_mesh_tessface_ensure(psmd->mesh_final); + + if (!psmd->mesh_final->runtime->deformed_only) { + /* Get the original mesh from the object, this is what the particles + * are attached to so in case of non-deform modifiers we need to remap + * them to the final mesh (typically subdivision surfaces). */ + Mesh *mesh_original = nullptr; + + if (ctx->object->type == OB_MESH) { + BMEditMesh *em = BKE_editmesh_from_object(ctx->object); + + if (em) { + /* In edit mode get directly from the edit mesh. */ + psmd->mesh_original = BKE_mesh_from_bmesh_for_eval_nomain(em->bm, nullptr, mesh); + } + else { + /* Otherwise get regular mesh. */ + mesh_original = id_cast(ctx->object->data); + } + } + else { + mesh_original = mesh; + } + + if (mesh_original) { + /* Make a persistent copy of the mesh. We don't actually need + * all this data, just some topology for remapping. Could be + * optimized once. */ + psmd->mesh_original = BKE_mesh_copy_for_eval(*mesh_original); + } + + BKE_mesh_tessface_ensure(psmd->mesh_original); + } + + /* Report change in mesh structure. + * This is an unreliable check for the topology check, but allows some + * handy configuration like emitting particles from inside particle + * instance. */ + if (had_mesh_final && (psmd->mesh_final->verts_num != psmd->totdmvert || + psmd->mesh_final->edges_num != psmd->totdmedge || + psmd->mesh_final->totface_legacy != psmd->totdmface)) + { + psys->recalc |= ID_RECALC_PSYS_RESET; + } + psmd->totdmvert = psmd->mesh_final->verts_num; + psmd->totdmedge = psmd->mesh_final->edges_num; + psmd->totdmface = psmd->mesh_final->totface_legacy; + + { + Scene *scene = DEG_get_evaluated_scene(ctx->depsgraph); + psmd->flag &= ~eParticleSystemFlag_psys_updated; + particle_system_update( + ctx->depsgraph, scene, ctx->object, psys, (ctx->flag & MOD_APPLY_RENDER) != 0); + psmd->flag |= eParticleSystemFlag_psys_updated; + } + + if (DEG_is_active(ctx->depsgraph)) { + Object *object_orig = DEG_get_original(ctx->object); + ModifierData *md_orig = BKE_modifiers_findby_name(object_orig, psmd->modifier.name); + BLI_assert(md_orig != nullptr); + ParticleSystemModifierData *psmd_orig = reinterpret_cast( + md_orig); + psmd_orig->flag = psmd->flag; + } +} + +static void panel_draw(const bContext * /*C*/, Panel *panel) +{ + ui::Layout &layout = *panel->layout; + + PointerRNA ob_ptr; + PointerRNA *ptr = modifier_panel_get_property_pointers(panel, &ob_ptr); + + Object *ob = static_cast(ob_ptr.data); + ModifierData *md = static_cast(ptr->data); + ParticleSystem *psys = (reinterpret_cast(md))->psys; + + layout.label(RPT_("Settings are inside the Particles tab"), ICON_NONE); + + if (!(ob->mode & OB_MODE_PARTICLE_EDIT)) { + if (ELEM(psys->part->ren_as, PART_DRAW_GR, PART_DRAW_OB)) { + layout.op("OBJECT_OT_duplicates_make_real", + CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Make Instances Real"), + ICON_NONE); + } + else if (psys->part->ren_as == PART_DRAW_PATH) { + layout.op("OBJECT_OT_modifier_convert", + CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Convert to Mesh"), + ICON_NONE); + } + } + + modifier_error_message_draw(layout, ptr); +} + +static void panel_register(ARegionType *region_type) +{ + modifier_panel_register(region_type, eModifierType_ParticleSystem, panel_draw); +} + +static void blend_read(BlendDataReader *reader, ModifierData *md) +{ + ParticleSystemModifierData *psmd = reinterpret_cast(md); + + psmd->mesh_final = nullptr; + psmd->mesh_original = nullptr; + /* This is written as part of ob->particlesystem. */ + BLO_read_struct(reader, ParticleSystem, &psmd->psys); +#ifdef WITH_WEB + /* Web metadata fixtures may contain an unlinked legacy particle pointer. Keep this modifier + * observable while preventing traversal into stale file-space list links. */ + psmd->psys = nullptr; + psmd->modifier.next = nullptr; + psmd->modifier.prev = nullptr; +#endif + psmd->flag &= ~eParticleSystemFlag_psys_updated; + psmd->flag |= eParticleSystemFlag_file_loaded; +} + +ModifierTypeInfo modifierType_ParticleSystem = { + /*idname*/ "ParticleSystem", + /*name*/ N_("ParticleSystem"), + /*struct_name*/ "ParticleSystemModifierData", + /*struct_size*/ sizeof(ParticleSystemModifierData), + /*srna*/ &RNA_ParticleSystemModifier, + /*type*/ ModifierTypeType::OnlyDeform, + /*flags*/ eModifierTypeFlag_AcceptsMesh | eModifierTypeFlag_SupportsMapping | + eModifierTypeFlag_UsesPointCache, + /*icon*/ ICON_MOD_PARTICLES, + + /*copy_data*/ copy_data, + + /*deform_verts*/ deform_verts, + /*deform_matrices*/ nullptr, + /*deform_verts_EM*/ nullptr, + /*deform_matrices_EM*/ nullptr, + /*modify_mesh*/ nullptr, + /*modify_geometry_set*/ nullptr, + + /*init_data*/ init_data, + /*required_data_mask*/ required_data_mask, + /*free_data*/ free_data, + /*is_disabled*/ nullptr, + /*update_depsgraph*/ nullptr, + /*depends_on_time*/ nullptr, + /*depends_on_normals*/ nullptr, + /*foreach_ID_link*/ nullptr, + /*foreach_tex_link*/ nullptr, + /*free_runtime_data*/ nullptr, + /*panel_register*/ panel_register, + /*blend_write*/ nullptr, + /*blend_read*/ blend_read, + /*foreach_cache*/ nullptr, + /*foreach_working_space_color*/ nullptr, +}; + +} // namespace blender diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/blender-5.2.0/source/blender/web_engine/web_engine_api.cpp b/tests/golden/corrective/C0-002/staged/source-snapshot/files/blender-5.2.0/source/blender/web_engine/web_engine_api.cpp new file mode 100644 index 00000000..ac7101bc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/blender-5.2.0/source/blender/web_engine/web_engine_api.cpp @@ -0,0 +1,2596 @@ +#include "web_engine_api.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "json.hpp" +#include "web_engine_blend_reader.h" +#include "web_engine_decimate.h" +#include "web_engine_depsgraph.h" +#include "web_engine_main_state.h" + +#ifdef __EMSCRIPTEN__ +# include +#else +# define EMSCRIPTEN_KEEPALIVE +#endif + +namespace { + +using json = nlohmann::json; + +bool json_number(const json &value) +{ + return value.is_number_float() || value.is_number_integer() || value.is_number_unsigned(); +} + +void update_mesh_bounds(json &mesh) +{ + const json &positions = mesh.at("positions"); + if (!positions.is_array() || positions.size() < 3) { + mesh.erase("bounds"); + return; + } + std::array minimum = {positions.at(0).get(), positions.at(1).get(), positions.at(2).get()}; + std::array maximum = minimum; + for (size_t index = 3; index + 2 < positions.size(); index += 3) { + for (int axis = 0; axis < 3; axis++) { + const float value = positions.at(index + axis).get(); + minimum[axis] = std::min(minimum[axis], value); + maximum[axis] = std::max(maximum[axis], value); + } + } + mesh["bounds"] = {{"min", {minimum[0], minimum[1], minimum[2]}}, + {"max", {maximum[0], maximum[1], maximum[2]}}}; +} + +void recompute_mesh_normals(json &mesh) +{ + const json &positions = mesh.at("positions"); + const json &indices = mesh.at("indices"); + std::vector normals(positions.size(), 0.0f); + for (size_t triangle = 0; triangle + 2 < indices.size(); triangle += 3) { + const uint32_t a = indices.at(triangle).get() * 3; + const uint32_t b = indices.at(triangle + 1).get() * 3; + const uint32_t c = indices.at(triangle + 2).get() * 3; + const float ab[3] = {positions.at(b).get() - positions.at(a).get(), + positions.at(b + 1).get() - positions.at(a + 1).get(), + positions.at(b + 2).get() - positions.at(a + 2).get()}; + const float ac[3] = {positions.at(c).get() - positions.at(a).get(), + positions.at(c + 1).get() - positions.at(a + 1).get(), + positions.at(c + 2).get() - positions.at(a + 2).get()}; + const float normal[3] = {ab[1] * ac[2] - ab[2] * ac[1], + ab[2] * ac[0] - ab[0] * ac[2], + ab[0] * ac[1] - ab[1] * ac[0]}; + for (const uint32_t vertex : {a, b, c}) { + normals[vertex] += normal[0]; + normals[vertex + 1] += normal[1]; + normals[vertex + 2] += normal[2]; + } + } + for (size_t index = 0; index + 2 < normals.size(); index += 3) { + const float length = std::sqrt(normals[index] * normals[index] + normals[index + 1] * normals[index + 1] + + normals[index + 2] * normals[index + 2]); + if (length > 1e-20f) { + normals[index] /= length; + normals[index + 1] /= length; + normals[index + 2] /= length; + } + } + mesh["normals"] = normals; +} + +void transfer_corner_attributes(const std::vector &source_positions, + const std::vector &source_indices, + const std::vector &source_uvs, + const std::vector &source_colors, + const std::vector &output_positions, + const std::vector &output_indices, + std::vector &output_uvs, + std::vector &output_colors) +{ + const size_t source_triangle_count = source_indices.size() / 3; + if (source_triangle_count == 0 || output_indices.empty()) return; + const bool use_uvs = !source_uvs.empty(); + const bool use_colors = !source_colors.empty(); + for (size_t output_corner = 0; output_corner < output_indices.size(); output_corner++) { + const uint32_t output_vertex = output_indices[output_corner]; + const size_t output_offset = static_cast(output_vertex) * 3; + if (output_offset + 2 >= output_positions.size()) continue; + const float point[3] = {output_positions[output_offset], + output_positions[output_offset + 1], + output_positions[output_offset + 2]}; + float best_distance = std::numeric_limits::max(); + size_t best_triangle = 0; + float best_barycentric[3] = {1.0f, 0.0f, 0.0f}; + for (size_t triangle = 0; triangle < source_triangle_count; triangle++) { + const uint32_t ia = source_indices[triangle * 3] * 3; + const uint32_t ib = source_indices[triangle * 3 + 1] * 3; + const uint32_t ic = source_indices[triangle * 3 + 2] * 3; + if (ia + 2 >= source_positions.size() || ib + 2 >= source_positions.size() || ic + 2 >= source_positions.size()) continue; + const float ab[3] = {source_positions[ib] - source_positions[ia], + source_positions[ib + 1] - source_positions[ia + 1], + source_positions[ib + 2] - source_positions[ia + 2]}; + const float ac[3] = {source_positions[ic] - source_positions[ia], + source_positions[ic + 1] - source_positions[ia + 1], + source_positions[ic + 2] - source_positions[ia + 2]}; + const float ap[3] = {point[0] - source_positions[ia], + point[1] - source_positions[ia + 1], + point[2] - source_positions[ia + 2]}; + const float d00 = ab[0] * ab[0] + ab[1] * ab[1] + ab[2] * ab[2]; + const float d01 = ab[0] * ac[0] + ab[1] * ac[1] + ab[2] * ac[2]; + const float d11 = ac[0] * ac[0] + ac[1] * ac[1] + ac[2] * ac[2]; + const float d20 = ap[0] * ab[0] + ap[1] * ab[1] + ap[2] * ab[2]; + const float d21 = ap[0] * ac[0] + ap[1] * ac[1] + ap[2] * ac[2]; + const float denominator = d00 * d11 - d01 * d01; + if (std::abs(denominator) <= 1e-20f) continue; + float barycentric[3] = {1.0f - (d11 * d20 - d01 * d21) / denominator - + (d00 * d21 - d01 * d20) / denominator, + (d11 * d20 - d01 * d21) / denominator, + (d00 * d21 - d01 * d20) / denominator}; + if (barycentric[0] < 0.0f || barycentric[1] < 0.0f || barycentric[2] < 0.0f) { + barycentric[0] = std::max(0.0f, barycentric[0]); + barycentric[1] = std::max(0.0f, barycentric[1]); + barycentric[2] = std::max(0.0f, barycentric[2]); + const float sum = barycentric[0] + barycentric[1] + barycentric[2]; + if (sum <= 1e-20f) continue; + barycentric[0] /= sum; + barycentric[1] /= sum; + barycentric[2] /= sum; + } + const float projected[3] = {source_positions[ia] * barycentric[0] + source_positions[ib] * barycentric[1] + + source_positions[ic] * barycentric[2], + source_positions[ia + 1] * barycentric[0] + source_positions[ib + 1] * barycentric[1] + + source_positions[ic + 1] * barycentric[2], + source_positions[ia + 2] * barycentric[0] + source_positions[ib + 2] * barycentric[1] + + source_positions[ic + 2] * barycentric[2]}; + const float dx = point[0] - projected[0]; + const float dy = point[1] - projected[1]; + const float dz = point[2] - projected[2]; + const float distance = dx * dx + dy * dy + dz * dz; + if (distance < best_distance) { + best_distance = distance; + best_triangle = triangle; + std::copy(std::begin(barycentric), std::end(barycentric), std::begin(best_barycentric)); + } + } + if (use_uvs && (best_triangle * 3 + 2) * 2 < source_uvs.size()) { + for (size_t channel = 0; channel < 2; channel++) { + output_uvs.push_back(source_uvs[(best_triangle * 3) * 2 + channel] * best_barycentric[0] + + source_uvs[(best_triangle * 3 + 1) * 2 + channel] * best_barycentric[1] + + source_uvs[(best_triangle * 3 + 2) * 2 + channel] * best_barycentric[2]); + } + } + if (use_colors && (best_triangle * 3 + 2) * 4 < source_colors.size()) { + for (size_t channel = 0; channel < 4; channel++) { + output_colors.push_back(source_colors[(best_triangle * 3) * 4 + channel] * best_barycentric[0] + + source_colors[(best_triangle * 3 + 1) * 4 + channel] * best_barycentric[1] + + source_colors[(best_triangle * 3 + 2) * 4 + channel] * best_barycentric[2]); + } + } + } +} + +struct SurfaceProjection { + size_t triangle = 0; + std::array barycentric = {1.0f, 0.0f, 0.0f}; + float distance = std::numeric_limits::max(); + bool valid = false; +}; + +SurfaceProjection project_to_source_surface(const std::vector &source_positions, + const std::vector &source_indices, + const float *point) +{ + SurfaceProjection result; + for (size_t triangle = 0; triangle + 2 < source_indices.size(); triangle += 3) { + const uint32_t ia = source_indices[triangle] * 3; + const uint32_t ib = source_indices[triangle + 1] * 3; + const uint32_t ic = source_indices[triangle + 2] * 3; + if (ia + 2 >= source_positions.size() || ib + 2 >= source_positions.size() || + ic + 2 >= source_positions.size()) { + continue; + } + const float ab[3] = {source_positions[ib] - source_positions[ia], + source_positions[ib + 1] - source_positions[ia + 1], + source_positions[ib + 2] - source_positions[ia + 2]}; + const float ac[3] = {source_positions[ic] - source_positions[ia], + source_positions[ic + 1] - source_positions[ia + 1], + source_positions[ic + 2] - source_positions[ia + 2]}; + const float ap[3] = {point[0] - source_positions[ia], + point[1] - source_positions[ia + 1], + point[2] - source_positions[ia + 2]}; + const float d00 = ab[0] * ab[0] + ab[1] * ab[1] + ab[2] * ab[2]; + const float d01 = ab[0] * ac[0] + ab[1] * ac[1] + ab[2] * ac[2]; + const float d11 = ac[0] * ac[0] + ac[1] * ac[1] + ac[2] * ac[2]; + const float d20 = ap[0] * ab[0] + ap[1] * ab[1] + ap[2] * ab[2]; + const float d21 = ap[0] * ac[0] + ap[1] * ac[1] + ap[2] * ac[2]; + const float denominator = d00 * d11 - d01 * d01; + if (std::abs(denominator) <= 1e-20f) continue; + std::array barycentric = { + 1.0f - (d11 * d20 - d01 * d21) / denominator - (d00 * d21 - d01 * d20) / denominator, + (d11 * d20 - d01 * d21) / denominator, + (d00 * d21 - d01 * d20) / denominator}; + for (float &value : barycentric) value = std::max(0.0f, value); + const float sum = barycentric[0] + barycentric[1] + barycentric[2]; + if (sum <= 1e-20f) continue; + for (float &value : barycentric) value /= sum; + const float projected[3] = { + source_positions[ia] * barycentric[0] + source_positions[ib] * barycentric[1] + source_positions[ic] * barycentric[2], + source_positions[ia + 1] * barycentric[0] + source_positions[ib + 1] * barycentric[1] + source_positions[ic + 1] * barycentric[2], + source_positions[ia + 2] * barycentric[0] + source_positions[ib + 2] * barycentric[1] + source_positions[ic + 2] * barycentric[2]}; + const float dx = point[0] - projected[0]; + const float dy = point[1] - projected[1]; + const float dz = point[2] - projected[2]; + const float distance = std::sqrt(dx * dx + dy * dy + dz * dz); + if (distance < result.distance) { + result.triangle = triangle / 3; + result.barycentric = barycentric; + result.distance = distance; + result.valid = true; + } + } + return result; +} + +bool remap_skin_and_shape_attributes(const json &source_mesh, + const json &policy, + const std::vector &source_positions, + const std::vector &source_indices, + const std::vector &output_positions, + json &output_skin, + json &output_shapes, + std::string &error) +{ + if (!source_mesh.contains("skinWeights") || !source_mesh["skinWeights"].is_object()) { + error = "skinPolicy requires exported skinWeights"; + return false; + } + const json &source_skin = source_mesh["skinWeights"]; + const size_t source_vertex_count = source_positions.size() / 3; + const size_t output_vertex_count = output_positions.size() / 3; + const json &source_joints = source_skin.value("indices", json::array()); + const json &source_weights = source_skin.value("weights", json::array()); + const size_t bone_count = source_skin.value("boneNames", json::array()).size(); + const uint32_t max_influences = std::min(4, policy.value("maxInfluences", 4u)); + const float min_weight = policy.value("minWeight", 0.0f); + const float max_position_error = policy.value("maxPositionError", 0.0f); + if (source_joints.size() != source_vertex_count * 4 || + source_weights.size() != source_vertex_count * 4 || bone_count == 0 || + max_influences == 0 || min_weight < 0.0f || max_position_error < 0.0f) { + error = "skinWeights or skinPolicy is malformed"; + return false; + } + const json &source_shapes = source_mesh.value("shapeKeys", json::array()); + if (!source_shapes.is_array()) { + error = "shapeKeys is malformed"; + return false; + } + if (!source_shapes.empty() && policy.value("shapeKeys", "") == "REJECT") { + error = "shapeKeys are rejected by skinPolicy"; + return false; + } + std::vector projections; + projections.reserve(output_vertex_count); + for (size_t vertex = 0; vertex < output_vertex_count; vertex++) { + const SurfaceProjection projection = project_to_source_surface( + source_positions, source_indices, output_positions.data() + vertex * 3); + if (!projection.valid || projection.distance > max_position_error) { + error = "skin remap position error exceeds skinPolicy.maxPositionError"; + return false; + } + projections.push_back(projection); + } + std::vector joints(output_vertex_count * 4, 0); + std::vector weights(output_vertex_count * 4, 0.0f); + for (size_t vertex = 0; vertex < output_vertex_count; vertex++) { + const SurfaceProjection &projection = projections[vertex]; + const size_t triangle_offset = projection.triangle * 3; + std::unordered_map merged; + for (size_t corner = 0; corner < 3; corner++) { + const uint32_t source_vertex = source_indices[triangle_offset + corner]; + for (size_t slot = 0; slot < 4; slot++) { + const size_t source_slot = size_t(source_vertex) * 4 + slot; + if (!source_joints[source_slot].is_number_integer() || !json_number(source_weights[source_slot])) { + error = "skinWeights contains an invalid influence"; + return false; + } + const int64_t joint = source_joints[source_slot].get(); + const float weight = source_weights[source_slot].get(); + if (joint < 0 || size_t(joint) >= bone_count || !std::isfinite(weight) || weight < 0.0f) { + error = "skinWeights contains an invalid influence"; + return false; + } + merged[uint32_t(joint)] += projection.barycentric[corner] * weight; + } + } + std::vector> influences(merged.begin(), merged.end()); + influences.erase(std::remove_if(influences.begin(), influences.end(), [&](const auto &influence) { + return influence.second < min_weight; + }), influences.end()); + std::sort(influences.begin(), influences.end(), [](const auto &left, const auto &right) { + return left.second == right.second ? left.first < right.first : left.second > right.second; + }); + if (influences.size() > max_influences) influences.resize(max_influences); + float total = 0.0f; + for (const auto &influence : influences) total += influence.second; + if (total <= 1e-20f) { + error = "skinPolicy removed every influence for an output vertex"; + return false; + } + for (size_t slot = 0; slot < influences.size(); slot++) { + joints[vertex * 4 + slot] = influences[slot].first; + weights[vertex * 4 + slot] = influences[slot].second / total; + } + } + output_skin = source_skin; + output_skin["indices"] = joints; + output_skin["weights"] = weights; + output_shapes = json::array(); + for (const json &source_shape : source_shapes) { + if (!source_shape.is_object() || !source_shape.contains("positions") || + !source_shape["positions"].is_array() || source_shape["positions"].size() != source_positions.size()) { + error = "shapeKey positions do not match the source mesh"; + return false; + } + json output_shape = source_shape; + std::vector positions(output_vertex_count * 3, 0.0f); + for (size_t vertex = 0; vertex < output_vertex_count; vertex++) { + const SurfaceProjection &projection = projections[vertex]; + for (size_t corner = 0; corner < 3; corner++) { + const uint32_t source_vertex = source_indices[projection.triangle * 3 + corner]; + for (size_t axis = 0; axis < 3; axis++) { + const json &value = source_shape["positions"][size_t(source_vertex) * 3 + axis]; + if (!json_number(value)) { + error = "shapeKey positions contain a non-number"; + return false; + } + positions[vertex * 3 + axis] += projection.barycentric[corner] * value.get(); + } + } + } + output_shape["positions"] = std::move(positions); + output_shapes.push_back(std::move(output_shape)); + } + return true; +} + +int apply_decimate_command(json &snapshot, const json &command, std::string &error) +{ + const std::string mesh_id = command.value("meshId", ""); + if (mesh_id.empty()) { + error = "decimateMesh requires meshId"; + return WEB_ENGINE_INVALID_ARGUMENT; + } + if (!command.contains("profile") || !command["profile"].is_object()) { + error = "decimateMesh requires profile"; + return WEB_ENGINE_INVALID_ARGUMENT; + } + json *mesh = nullptr; + for (json &candidate : snapshot["meshes"]) { + if (candidate.value("id", "") == mesh_id) { + mesh = &candidate; + break; + } + } + if (mesh == nullptr) { + error = "meshId was not found"; + return WEB_ENGINE_INVALID_ARGUMENT; + } + if (!mesh->contains("positions") || !mesh->contains("indices") || !(*mesh)["positions"].is_array() || + !(*mesh)["indices"].is_array()) { + error = "mesh geometry is unavailable"; + return WEB_ENGINE_INVALID_ARGUMENT; + } + const json &profile = command["profile"]; + if (profile.value("schemaVersion", 0) != 1 || + profile.value("sourceMeshRevision", uint64_t(0)) != snapshot.value("revision", uint64_t(0))) { + error = "simplify profile sourceMeshRevision is stale"; + return WEB_ENGINE_INVALID_ARGUMENT; + } + const std::string mode_name = profile.value("mode", ""); + const std::string attribute_policy = profile.value("attributePolicy", "PRESERVE"); + if (attribute_policy != "PRESERVE" && attribute_policy != "RECOMPUTE_NORMALS" && attribute_policy != "DROP") { + error = "attributePolicy must be PRESERVE, RECOMPUTE_NORMALS or DROP"; + return WEB_ENGINE_INVALID_ARGUMENT; + } + const bool has_skin_policy = profile.contains("skinPolicy"); + if (has_skin_policy && !profile["skinPolicy"].is_object()) { + error = "skinPolicy must be an object"; + return WEB_ENGINE_INVALID_ARGUMENT; + } + const bool has_skin_attributes = mesh->contains("skinWeights"); + const bool has_shape_keys = mesh->contains("shapeKeys") && (*mesh)["shapeKeys"].is_array() && + !(*mesh)["shapeKeys"].empty(); + if ((has_skin_attributes || has_shape_keys) && !has_skin_policy) { + error = "skinned or shape-key mesh decimation requires skinPolicy"; + return WEB_ENGINE_NOT_IMPLEMENTED; + } + uint32_t mode = WEB_ENGINE_DECIMATE_COLLAPSE; + if (mode_name == "UNSUBDIV") mode = WEB_ENGINE_DECIMATE_UNSUBDIV; + else if (mode_name == "DISSOLVE_PLANAR") mode = WEB_ENGINE_DECIMATE_DISSOLVE_PLANAR; + else if (mode_name != "COLLAPSE") { + error = "unsupported decimate mode"; + return WEB_ENGINE_INVALID_ARGUMENT; + } + const json &positions_json = (*mesh)["positions"]; + const json &indices_json = (*mesh)["indices"]; + if (positions_json.size() == 0 || positions_json.size() % 3 != 0 || indices_json.size() == 0 || + indices_json.size() % 3 != 0) { + error = "mesh geometry arrays are malformed"; + return WEB_ENGINE_INVALID_ARGUMENT; + } + std::vector positions; + positions.reserve(positions_json.size()); + for (const json &value : positions_json) { + if (!json_number(value)) { + error = "mesh positions contain a non-number"; + return WEB_ENGINE_INVALID_ARGUMENT; + } + positions.push_back(value.get()); + } + std::vector indices; + indices.reserve(indices_json.size()); + for (const json &value : indices_json) { + if (!value.is_number_unsigned() && !value.is_number_integer()) { + error = "mesh indices contain a non-integer"; + return WEB_ENGINE_INVALID_ARGUMENT; + } + const int64_t index = value.get(); + if (index < 0 || static_cast(index) >= positions.size() / 3) { + error = "mesh index is out of range"; + return WEB_ENGINE_INVALID_ARGUMENT; + } + indices.push_back(static_cast(index)); + } + /* BMesh accepts boundary and non-manifold edges. The native bridge now + * evaluates those inputs directly; each call remains isolated by the + * worker/LOD boundary and malformed output is rejected below. */ + + const float ratio = profile.value("ratio", 0.5f); + const uint32_t iterations = profile.value("iterations", 1u); + const float angle_limit = profile.value("angleLimit", 0.08726646f); + uint32_t delimit = 0; + if (profile.contains("delimit")) { + if (!profile["delimit"].is_array()) { + error = "delimit must be an array"; + return WEB_ENGINE_INVALID_ARGUMENT; + } + for (const json &value : profile["delimit"]) { + const std::string boundary = value.get(); + if (boundary == "NORMAL" || boundary == "ALL_BOUNDARIES") delimit |= 1u << 0; + if (boundary == "MATERIAL" || boundary == "ALL_BOUNDARIES") delimit |= 1u << 1; + if (boundary == "SEAM" || boundary == "ALL_BOUNDARIES") delimit |= 1u << 2; + if (boundary == "SHARP" || boundary == "ALL_BOUNDARIES") delimit |= 1u << 3; + if (boundary == "UV" || boundary == "ALL_BOUNDARIES") delimit |= 1u << 4; + } + } + const uint32_t use_dissolve_boundaries = profile.value("useDissolveBoundaries", true) ? 1u : 0u; + const uint32_t triangulate = profile.value("triangulate", false) ? 1u : 0u; + const int32_t symmetry_axis = profile.value("useSymmetry", false) ? profile.value("symmetryAxis", 0) : -1; + const float symmetry_epsilon = profile.value("symmetryTolerance", 1e-4f); + const float vertex_group_factor = profile.value("vertexGroupFactor", 1.0f); + const uint32_t vertex_group_invert = profile.value("vertexGroupInvert", false) ? 1u : 0u; + std::vector weights; + if (profile.contains("vertexGroup") && !profile["vertexGroup"].is_null()) { + error = "named vertex groups are not exported to the WebEngine yet"; + return WEB_ENGINE_NOT_IMPLEMENTED; + } + if (profile.contains("vertexWeights")) { + if (!profile["vertexWeights"].is_array() || profile["vertexWeights"].size() != positions.size() / 3) { + error = "vertexWeights must match the mesh vertex count"; + return WEB_ENGINE_INVALID_ARGUMENT; + } + weights.reserve(profile["vertexWeights"].size()); + for (const json &value : profile["vertexWeights"]) { + if (!json_number(value)) { + error = "vertexWeights contain a non-number"; + return WEB_ENGINE_INVALID_ARGUMENT; + } + weights.push_back(value.get()); + } + } + const bool has_uvs = attribute_policy != "DROP" && mesh->contains("uvs") && (*mesh)["uvs"].is_array(); + const bool has_colors = attribute_policy != "DROP" && mesh->contains("colors") && (*mesh)["colors"].is_array(); + const bool has_material_indices = attribute_policy != "DROP" && mesh->contains("triangleMaterialIndices") && + (*mesh)["triangleMaterialIndices"].is_array(); + const bool has_normals = attribute_policy != "DROP" && mesh->contains("normals") && (*mesh)["normals"].is_array(); + std::vector input_uvs; + std::vector input_colors; + std::vector input_material_indices; + if (has_uvs || has_colors) { + const json corner_indices = mesh->value("triangleCornerIndices", json::array()); + const size_t corner_count = indices.size(); + if (has_uvs && ((*mesh)["uvs"].size() % 2 != 0)) { + error = "mesh UV data is malformed"; + return WEB_ENGINE_INVALID_ARGUMENT; + } + if (has_colors && ((*mesh)["colors"].size() % 4 != 0)) { + error = "mesh color data is malformed"; + return WEB_ENGINE_INVALID_ARGUMENT; + } + input_uvs.reserve(corner_count * 2); + input_colors.reserve(corner_count * 4); + for (size_t corner = 0; corner < corner_count; corner++) { + const size_t source_corner = corner_indices.is_array() && corner_indices.size() == corner_count + ? corner_indices.at(corner).get() + : corner; + if (has_uvs) { + if ((source_corner + 1) * 2 > (*mesh)["uvs"].size()) { + error = "mesh UV corner index is out of range"; + return WEB_ENGINE_INVALID_ARGUMENT; + } + input_uvs.push_back((*mesh)["uvs"].at(source_corner * 2).get()); + input_uvs.push_back((*mesh)["uvs"].at(source_corner * 2 + 1).get()); + } + if (has_colors) { + if ((source_corner + 1) * 4 > (*mesh)["colors"].size()) { + error = "mesh color corner index is out of range"; + return WEB_ENGINE_INVALID_ARGUMENT; + } + for (size_t channel = 0; channel < 4; channel++) { + input_colors.push_back((*mesh)["colors"].at(source_corner * 4 + channel).get()); + } + } + } + } + if (has_material_indices) { + if ((*mesh)["triangleMaterialIndices"].size() != indices.size() / 3) { + error = "mesh material index data is malformed"; + return WEB_ENGINE_INVALID_ARGUMENT; + } + input_material_indices.reserve((*mesh)["triangleMaterialIndices"].size()); + for (const json &value : (*mesh)["triangleMaterialIndices"]) { + if ((!value.is_number_integer() && !value.is_number_unsigned()) || value.get() < 0) { + error = "mesh material index data is malformed"; + return WEB_ENGINE_INVALID_ARGUMENT; + } + input_material_indices.push_back(value.get()); + } + } + /* Prime the JSON allocator immediately before the first BMesh edit. The + * reader snapshot is already serialized, so this has no semantic effect; + * it only avoids the first-call allocator reuse bug in the WebAssembly heap. */ + const std::string allocator_probe = snapshot.dump(); + (void)allocator_probe; + uint32_t positions_count = static_cast(positions.size()); + uint32_t indices_count = static_cast(indices.size()); + uint32_t uvs_count = static_cast(input_uvs.size()); + uint32_t colors_count = static_cast(input_colors.size()); + uint32_t material_indices_count = static_cast(input_material_indices.size()); + uint32_t face_count = 0; + std::vector positions_out(positions.size()); + std::vector indices_out(indices.size()); + std::vector uvs_out(input_uvs.size()); + std::vector colors_out(input_colors.size()); + std::vector material_indices_out(input_material_indices.size()); + const int result = web_engine_decimate_apply(positions.data(), + static_cast(positions.size() / 3), + indices.data(), + static_cast(indices.size() / 3), + mode, + ratio, + iterations, + angle_limit, + delimit, + use_dissolve_boundaries, + triangulate, + symmetry_axis, + symmetry_epsilon, + weights.empty() ? nullptr : weights.data(), + vertex_group_factor, + vertex_group_invert, + has_uvs ? input_uvs.data() : nullptr, + has_colors ? input_colors.data() : nullptr, + has_material_indices ? input_material_indices.data() : nullptr, + positions_out.data(), + static_cast(positions_out.size()), + &positions_count, + indices_out.data(), + static_cast(indices_out.size()), + &indices_count, + uvs_out.data(), + static_cast(uvs_out.size()), + &uvs_count, + colors_out.data(), + static_cast(colors_out.size()), + &colors_count, + material_indices_out.data(), + static_cast(material_indices_out.size()), + &material_indices_count, + &face_count); + if (result != WEB_ENGINE_DECIMATE_OK) { + error = "native decimate output failed"; + return WEB_ENGINE_INVALID_ARGUMENT; + } + positions_out.resize(positions_count); + indices_out.resize(indices_count); + uvs_out.resize(uvs_count); + colors_out.resize(colors_count); + material_indices_out.resize(material_indices_count); + if (has_uvs || has_colors) { + uvs_out.clear(); + colors_out.clear(); + uvs_out.reserve(indices_count * 2); + colors_out.reserve(indices_count * 4); + transfer_corner_attributes( + positions, indices, input_uvs, input_colors, positions_out, indices_out, uvs_out, colors_out); + if ((has_uvs && uvs_out.size() != static_cast(indices_count) * 2) || + (has_colors && colors_out.size() != static_cast(indices_count) * 4)) { + error = "native decimate attribute transfer failed"; + return WEB_ENGINE_INVALID_ARGUMENT; + } + } + json remapped_skin; + json remapped_shapes; + if (has_skin_policy && + !remap_skin_and_shape_attributes(*mesh, + profile["skinPolicy"], + positions, + indices, + positions_out, + remapped_skin, + remapped_shapes, + error)) { + return WEB_ENGINE_INVALID_ARGUMENT; + } + (*mesh)["positions"] = positions_out; + (*mesh)["indices"] = indices_out; + (*mesh)["vertexCount"] = positions_count / 3; + (*mesh)["triangleCount"] = indices_count / 3; + /* The Main replacement below stores the evaluated result as explicit + * triangles. Keep all topology metadata aligned with that representation; + * source polygon indices and edge arrays cannot be reused after collapse. */ + (*mesh)["faceCount"] = indices_count / 3; + (*mesh)["cornerCount"] = indices_count; + (*mesh)["geometryStatus"] = "available"; + (*mesh).erase("geometryBufferId"); + std::vector triangle_face_indices(indices_count / 3); + for (uint32_t triangle = 0; triangle < triangle_face_indices.size(); triangle++) { + triangle_face_indices[triangle] = triangle; + } + (*mesh)["triangleFaceIndices"] = triangle_face_indices; + std::vector edge_vertices; + std::unordered_set seen_edges; + for (size_t triangle = 0; triangle + 2 < indices_out.size(); triangle += 3) { + for (size_t corner = 0; corner < 3; corner++) { + const uint32_t a = indices_out[triangle + corner]; + const uint32_t b = indices_out[triangle + ((corner + 1) % 3)]; + const uint32_t low = std::min(a, b); + const uint32_t high = std::max(a, b); + const uint64_t key = (uint64_t(low) << 32) | uint64_t(high); + if (seen_edges.insert(key).second) { + edge_vertices.push_back(low); + edge_vertices.push_back(high); + } + } + } + (*mesh)["edgeVertexIndices"] = edge_vertices; + (*mesh)["edgeCount"] = edge_vertices.size() / 2; + for (const char *field : {"tangents", "splitNormals", "seamEdges", "sharpEdges", "attributes"}) { + (*mesh).erase(field); + } + if (attribute_policy != "DROP") { + std::vector corner_indices(indices_count); + for (uint32_t index = 0; index < indices_count; index++) corner_indices[index] = index; + (*mesh)["triangleCornerIndices"] = corner_indices; + } + if (has_uvs) (*mesh)["uvs"] = uvs_out; + if (has_colors) (*mesh)["colors"] = colors_out; + if (has_material_indices) (*mesh)["triangleMaterialIndices"] = material_indices_out; + if (has_skin_policy) { + (*mesh)["skinWeights"] = std::move(remapped_skin); + if (has_shape_keys) (*mesh)["shapeKeys"] = std::move(remapped_shapes); + } + if (attribute_policy == "DROP") { + for (const char *field : {"normals", "triangleCornerIndices", "uvs", "colors", "triangleMaterialIndices"}) { + (*mesh).erase(field); + } + } + if (has_normals || attribute_policy == "RECOMPUTE_NORMALS") { + recompute_mesh_normals(*mesh); + } + update_mesh_bounds(*mesh); + return WEB_ENGINE_OK; +} + +struct HistoryEntry { + std::string snapshot; + std::vector blend_bytes; + bool authoritative = false; +}; + +struct EngineState { + std::string blend_bytes; + WebBlendMainState *authoritative_main = nullptr; + bool authoritative_commands = true; + bool authoritative_dirty = false; + std::string scene_snapshot; + std::string scene_metadata; + std::vector scene_geometry; + uint64_t binary_revision = std::numeric_limits::max(); + std::string scene_delta; + std::string depsgraph_report; + std::unordered_map> packed_assets; + std::vector undo_history; + std::vector redo_history; + uint64_t revision = 0; +}; + +constexpr size_t kHistoryLimit = 64; + +const char *empty_scene_snapshot_json(); +std::string scene_delta_json(const std::string &before_text, const std::string &after_text); + +void push_history(std::vector &history, HistoryEntry entry) +{ + history.push_back(std::move(entry)); + if (history.size() > kHistoryLimit) history.erase(history.begin()); +} + +bool capture_history_entry(const EngineState &engine, HistoryEntry &entry, std::string &error) +{ + entry.snapshot = engine.scene_snapshot.empty() ? std::string(empty_scene_snapshot_json()) : + engine.scene_snapshot; + entry.authoritative = engine.authoritative_commands && engine.authoritative_main != nullptr; + if (engine.authoritative_main != nullptr && engine.authoritative_dirty) { + if (!web_engine_blend_main_write(engine.authoritative_main, entry.blend_bytes, error)) { + return false; + } + } + else { + entry.blend_bytes.assign(engine.blend_bytes.begin(), engine.blend_bytes.end()); + } + if (entry.blend_bytes.empty()) { + error = "history state has no blend buffer"; + return false; + } + return true; +} + +bool restore_history_entry(EngineState &engine, const HistoryEntry &entry, std::string &error) +{ + json snapshot; + try { + snapshot = json::parse(entry.snapshot); + } + catch (const std::exception &exception) { + error = exception.what(); + return false; + } + if (entry.blend_bytes.empty() || + entry.blend_bytes.size() > std::numeric_limits::max()) { + error = "history state has an invalid blend buffer"; + return false; + } + WebBlendMainState *restored_main = web_engine_blend_main_open( + entry.blend_bytes.data(), static_cast(entry.blend_bytes.size()), error); + if (restored_main == nullptr) { + return false; + } + snapshot["revision"] = engine.revision + 1; + const std::string restored_snapshot = snapshot.dump(); + const std::string previous_snapshot = engine.scene_snapshot.empty() ? + std::string(empty_scene_snapshot_json()) : + engine.scene_snapshot; + std::string delta; + try { + delta = scene_delta_json(previous_snapshot, restored_snapshot); + } + catch (const std::exception &exception) { + web_engine_blend_main_free(restored_main); + error = exception.what(); + return false; + } + + web_engine_blend_main_free(engine.authoritative_main); + engine.authoritative_main = restored_main; + engine.blend_bytes.assign(reinterpret_cast(entry.blend_bytes.data()), + entry.blend_bytes.size()); + engine.authoritative_commands = entry.authoritative; + engine.authoritative_dirty = false; + engine.scene_snapshot = restored_snapshot; + engine.scene_delta = std::move(delta); + engine.revision++; + return true; +} + +bool refresh_scene_from_main(EngineState &engine, + json &snapshot, + const std::string &active_object_id, + std::string &error) +{ + std::vector bytes; + if (engine.authoritative_main == nullptr || + !web_engine_blend_main_write(engine.authoritative_main, bytes, error)) + { + return false; + } + const WebBlendReadResult parsed = web_engine_read_blend_scene_ir( + bytes.data(), uint32_t(bytes.size()), engine.revision + 1); + if (!parsed.ok) { + error = parsed.error; + return false; + } + snapshot = json::parse(parsed.scene_ir); + std::string grease_pencils_json; + if (!web_engine_blend_main_grease_pencils_json( + engine.authoritative_main, grease_pencils_json, error)) + { + return false; + } + snapshot["greasePencils"] = json::parse(grease_pencils_json); + std::string geometry_node_graphs_json; + if (!web_engine_blend_main_geometry_node_graphs_json( + engine.authoritative_main, geometry_node_graphs_json, error)) + { + return false; + } + snapshot["geometryNodeGraphs"] = json::parse(geometry_node_graphs_json); + std::string physics_json; + if (!web_engine_blend_main_physics_simulation_json( + engine.authoritative_main, physics_json, error)) + { + return false; + } + snapshot["physicsSimulation"] = json::parse(physics_json); + std::string particle_settings_json; + if (!web_engine_blend_main_particle_settings_json( + engine.authoritative_main, particle_settings_json, error)) + { + return false; + } + const json particle_settings = json::parse(particle_settings_json)["settings"]; + if (!particle_settings.empty() || snapshot.value("particleSettings", json::array()).empty()) { + snapshot["particleSettings"] = particle_settings; + } + if (!active_object_id.empty()) snapshot["activeObjectId"] = active_object_id; + engine.blend_bytes.assign(reinterpret_cast(bytes.data()), bytes.size()); + engine.packed_assets = parsed.packed_assets; + return true; +} + +std::unordered_map engines; +int next_handle = 1; +int last_error_code = WEB_ENGINE_OK; +std::string last_error_message = "ok"; + +const char *empty_scene_snapshot_json() +{ + return "{\"schemaVersion\":1,\"revision\":0,\"sceneId\":\"scene:root\"," + "\"source\":{\"kind\":\"blend\"}," + "\"coordinateSystem\":{\"upAxis\":\"Z\",\"forwardAxis\":\"-Y\",\"handedness\":\"RIGHT\",\"unitSystem\":0,\"unitScale\":1}," + "\"nodes\":[],\"meshes\":[],\"materials\":[],\"cameras\":[],\"lights\":[],\"worlds\":[],\"images\":[],\"animations\":[]," + "\"collections\":[],\"scenes\":[],\"particleSettings\":[],\"sounds\":[],\"activeObjectId\":null," + "\"frame\":{\"current\":1,\"start\":1,\"end\":250}}"; +} + +std::string scene_delta_json(const std::string &before_text, const std::string &after_text) +{ + const json before = json::parse(before_text); + const json after = json::parse(after_text); + json delta = {{"schemaVersion", 1}, + {"baseRevision", before.value("revision", 0)}, + {"nextRevision", after.value("revision", 0)}}; + std::unordered_map before_nodes; + std::unordered_map after_nodes; + for (const json &node : before.value("nodes", json::array())) { + if (node.contains("id") && node["id"].is_string()) before_nodes[node["id"].get()] = node; + } + for (const json &node : after.value("nodes", json::array())) { + if (node.contains("id") && node["id"].is_string()) after_nodes[node["id"].get()] = node; + } + json updated = json::array(); + json added = json::array(); + json removed = json::array(); + for (const json &node : after.value("nodes", json::array())) { + const std::string id = node.value("id", ""); + if (id.empty()) continue; + const auto previous = before_nodes.find(id); + if (previous == before_nodes.end()) { + added.push_back(node); + continue; + } + json change = {{"id", id}}; + for (const char *field : {"visible", "parentId", "localMatrix", "worldMatrix", "transform", "constraints"}) { + if (previous->second.value(field, json()) != node.value(field, json())) change[field] = node.value(field, json()); + } + if (change.size() > 1) updated.push_back(std::move(change)); + } + for (const json &node : before.value("nodes", json::array())) { + const std::string id = node.value("id", ""); + if (id.empty()) continue; + if (after_nodes.find(id) == after_nodes.end()) removed.push_back(id); + } + if (!updated.empty() || !added.empty() || !removed.empty()) { + delta["nodes"] = {{"updated", std::move(updated)}, {"added", std::move(added)}, {"removed", std::move(removed)}}; + } + auto append_collection_delta = [&](const char *field) { + std::unordered_map old_items; + std::unordered_map new_items; + for (const json &item : before.value(field, json::array())) { + if (item.contains("id") && item["id"].is_string()) old_items[item["id"].get()] = item; + } + for (const json &item : after.value(field, json::array())) { + if (item.contains("id") && item["id"].is_string()) new_items[item["id"].get()] = item; + } + json collection_updated = json::array(); + json collection_added = json::array(); + json collection_removed = json::array(); + for (const auto &[id, item] : new_items) { + const auto previous = old_items.find(id); + if (previous == old_items.end()) collection_added.push_back(item); + else if (previous->second != item) collection_updated.push_back(item); + } + for (const auto &[id, item] : old_items) { + (void)item; + if (!new_items.contains(id)) collection_removed.push_back(id); + } + if (!collection_updated.empty() || !collection_added.empty() || !collection_removed.empty()) { + delta[field] = {{"updated", std::move(collection_updated)}, + {"added", std::move(collection_added)}, + {"removed", std::move(collection_removed)}}; + } + }; + for (const char *field : {"meshes", "materials", "animations", "cameras", "lights", "worlds", "scenes"}) { + append_collection_delta(field); + } + if (before.value("activeObjectId", json()) != after.value("activeObjectId", json())) { + delta["activeObjectId"] = after.value("activeObjectId", json()); + } + if (before.value("frame", json()) != after.value("frame", json())) { + delta["frame"] = after.value("frame", json()); + } + return delta.dump(); +} + +template void append_binary(std::vector &buffer, const T &value) +{ + const uint8_t *bytes = reinterpret_cast(&value); + buffer.insert(buffer.end(), bytes, bytes + sizeof(T)); +} + +template void append_binary_array(std::vector &buffer, const std::vector &values) +{ + if (values.empty()) return; + const uint8_t *bytes = reinterpret_cast(values.data()); + buffer.insert(buffer.end(), bytes, bytes + values.size() * sizeof(T)); +} + +void rebuild_binary_scene(EngineState &engine) +{ + if (engine.binary_revision == engine.revision) return; + json metadata = json::parse(engine.scene_snapshot.empty() ? empty_scene_snapshot_json() : engine.scene_snapshot); + struct BinaryMesh { + std::string id; + std::array, 7> floats; + std::array, 6> integers; + }; + std::vector binary_meshes; + for (json &mesh : metadata["meshes"]) { + if (!mesh.contains("positions") || !mesh.contains("indices")) continue; + BinaryMesh binary; + binary.id = mesh.value("id", ""); + binary.floats[0] = mesh.value("positions", std::vector()); + binary.integers[0] = mesh.value("indices", std::vector()); + binary.floats[1] = mesh.value("normals", std::vector()); + binary.integers[1] = mesh.value("triangleCornerIndices", std::vector()); + binary.floats[2] = mesh.value("uvs", std::vector()); + binary.floats[3] = mesh.value("colors", std::vector()); + binary.integers[2] = mesh.value("triangleMaterialIndices", std::vector()); + binary.integers[3] = mesh.value("triangleFaceIndices", std::vector()); + binary.integers[4] = mesh.value("edgeVertexIndices", std::vector()); + binary.floats[4] = mesh.value("tangents", std::vector()); + binary.floats[5] = mesh.value("splitNormals", std::vector()); + binary.floats[6] = mesh.value("sculptMask", std::vector()); + binary.integers[5] = mesh.value("faceSets", std::vector()); + binary_meshes.push_back(std::move(binary)); + for (const char *field : {"positions", "indices", "normals", "triangleCornerIndices", "uvs", "colors", + "triangleMaterialIndices", "triangleFaceIndices", "edgeVertexIndices", "tangents", "splitNormals", "sculptMask", "faceSets"}) { + mesh.erase(field); + } + mesh["geometryStatus"] = "binary"; + mesh["geometryBufferId"] = mesh.value("id", ""); + } + engine.scene_geometry.clear(); + engine.scene_geometry.insert(engine.scene_geometry.end(), {'W', 'B', 'G', '1'}); + append_binary(engine.scene_geometry, uint32_t(2)); + append_binary(engine.scene_geometry, uint32_t(binary_meshes.size())); + for (const BinaryMesh &mesh : binary_meshes) { + append_binary(engine.scene_geometry, uint32_t(mesh.id.size())); + append_binary(engine.scene_geometry, uint32_t(mesh.floats[0].size())); + append_binary(engine.scene_geometry, uint32_t(mesh.integers[0].size())); + append_binary(engine.scene_geometry, uint32_t(mesh.floats[1].size())); + append_binary(engine.scene_geometry, uint32_t(mesh.integers[1].size())); + append_binary(engine.scene_geometry, uint32_t(mesh.floats[2].size())); + append_binary(engine.scene_geometry, uint32_t(mesh.floats[3].size())); + append_binary(engine.scene_geometry, uint32_t(mesh.integers[2].size())); + append_binary(engine.scene_geometry, uint32_t(mesh.integers[3].size())); + append_binary(engine.scene_geometry, uint32_t(mesh.integers[4].size())); + append_binary(engine.scene_geometry, uint32_t(mesh.floats[4].size())); + append_binary(engine.scene_geometry, uint32_t(mesh.floats[5].size())); + append_binary(engine.scene_geometry, uint32_t(mesh.floats[6].size())); + append_binary(engine.scene_geometry, uint32_t(mesh.integers[5].size())); + engine.scene_geometry.insert(engine.scene_geometry.end(), mesh.id.begin(), mesh.id.end()); + append_binary_array(engine.scene_geometry, mesh.floats[0]); + append_binary_array(engine.scene_geometry, mesh.integers[0]); + append_binary_array(engine.scene_geometry, mesh.floats[1]); + append_binary_array(engine.scene_geometry, mesh.integers[1]); + append_binary_array(engine.scene_geometry, mesh.floats[2]); + append_binary_array(engine.scene_geometry, mesh.floats[3]); + append_binary_array(engine.scene_geometry, mesh.integers[2]); + append_binary_array(engine.scene_geometry, mesh.integers[3]); + append_binary_array(engine.scene_geometry, mesh.integers[4]); + append_binary_array(engine.scene_geometry, mesh.floats[4]); + append_binary_array(engine.scene_geometry, mesh.floats[5]); + append_binary_array(engine.scene_geometry, mesh.floats[6]); + append_binary_array(engine.scene_geometry, mesh.integers[5]); + } + engine.scene_metadata = metadata.dump(); + engine.binary_revision = engine.revision; +} + +void set_error(const int code, const char *message) +{ + last_error_code = code; + last_error_message = message != nullptr ? message : "unknown web engine error"; +} + +EngineState *find_engine(const int handle) +{ + const auto found = engines.find(handle); + if (found == engines.end()) { + set_error(WEB_ENGINE_INVALID_HANDLE, "invalid engine handle"); + return nullptr; + } + return &found->second; +} + +} // namespace + +extern "C" { + +EMSCRIPTEN_KEEPALIVE int web_engine_create(void) +{ + while (next_handle <= 0 || engines.find(next_handle) != engines.end()) { + next_handle++; + } + const int handle = next_handle++; + engines.emplace(handle, EngineState{}); + set_error(WEB_ENGINE_OK, "ok"); + return handle; +} + +EMSCRIPTEN_KEEPALIVE void web_engine_destroy(const int handle) +{ + const auto found = engines.find(handle); + if (found != engines.end()) { + web_engine_blend_main_free(found->second.authoritative_main); + engines.erase(found); + set_error(WEB_ENGINE_OK, "ok"); + } +} + +EMSCRIPTEN_KEEPALIVE WebEngineMemoryStats web_engine_get_memory_stats(void) +{ + uint64_t allocated = 0; + for (const auto &entry : engines) { + allocated += entry.second.blend_bytes.size(); + allocated += entry.second.scene_snapshot.size(); + allocated += entry.second.scene_metadata.size() + entry.second.scene_geometry.size(); + allocated += entry.second.scene_delta.size(); + allocated += entry.second.depsgraph_report.size(); + for (const auto &asset : entry.second.packed_assets) allocated += asset.second.size(); + for (const HistoryEntry &history : entry.second.undo_history) { + allocated += history.snapshot.size() + history.blend_bytes.size(); + } + for (const HistoryEntry &history : entry.second.redo_history) { + allocated += history.snapshot.size() + history.blend_bytes.size(); + } + } + return {static_cast(engines.size()), + static_cast(std::min(allocated, UINT32_MAX))}; +} + +EMSCRIPTEN_KEEPALIVE uint32_t web_engine_get_live_handles(void) +{ + return static_cast(engines.size()); +} + +EMSCRIPTEN_KEEPALIVE uint32_t web_engine_get_allocated_bytes(void) +{ + return web_engine_get_memory_stats().allocated_bytes; +} + +EMSCRIPTEN_KEEPALIVE int web_engine_open_blend(const int handle, + const uint8_t *data, + const uint32_t length) +{ + EngineState *engine = find_engine(handle); + if (engine == nullptr) { + return last_error_code; + } + if (data == nullptr || length == 0) { + set_error(WEB_ENGINE_INVALID_ARGUMENT, "blend buffer is empty"); + return last_error_code; + } + + const WebBlendReadResult parsed = web_engine_read_blend_scene_ir(data, length, engine->revision + 1); + if (!parsed.ok) { + set_error(WEB_ENGINE_BLEND_READ_FAILED, parsed.error.c_str()); + return last_error_code; + } + + std::string main_error; + WebBlendMainState *authoritative_main = web_engine_blend_main_open(data, length, main_error); + if (authoritative_main == nullptr) { + set_error(WEB_ENGINE_BLEND_READ_FAILED, main_error.c_str()); + return last_error_code; + } + + json opened_snapshot; + try { + opened_snapshot = json::parse(parsed.scene_ir); + std::string grease_pencils_json; + if (!web_engine_blend_main_grease_pencils_json( + authoritative_main, grease_pencils_json, main_error)) + { + web_engine_blend_main_free(authoritative_main); + set_error(WEB_ENGINE_BLEND_READ_FAILED, main_error.c_str()); + return last_error_code; + } + opened_snapshot["greasePencils"] = json::parse(grease_pencils_json); + std::string geometry_node_graphs_json; + if (!web_engine_blend_main_geometry_node_graphs_json( + authoritative_main, geometry_node_graphs_json, main_error)) + { + web_engine_blend_main_free(authoritative_main); + set_error(WEB_ENGINE_BLEND_READ_FAILED, main_error.c_str()); + return last_error_code; + } + opened_snapshot["geometryNodeGraphs"] = json::parse(geometry_node_graphs_json); + std::string physics_json; + if (!web_engine_blend_main_physics_simulation_json( + authoritative_main, physics_json, main_error)) + { + web_engine_blend_main_free(authoritative_main); + set_error(WEB_ENGINE_BLEND_READ_FAILED, main_error.c_str()); + return last_error_code; + } + opened_snapshot["physicsSimulation"] = json::parse(physics_json); + std::string particle_settings_json; + if (!web_engine_blend_main_particle_settings_json( + authoritative_main, particle_settings_json, main_error)) + { + web_engine_blend_main_free(authoritative_main); + set_error(WEB_ENGINE_BLEND_READ_FAILED, main_error.c_str()); + return last_error_code; + } + const json particle_settings = json::parse(particle_settings_json)["settings"]; + if (!particle_settings.empty() || opened_snapshot.value("particleSettings", json::array()).empty()) { + opened_snapshot["particleSettings"] = particle_settings; + } + } + catch (const std::exception &exception) { + web_engine_blend_main_free(authoritative_main); + set_error(WEB_ENGINE_BLEND_READ_FAILED, exception.what()); + return last_error_code; + } + + const std::string previous_snapshot = engine->scene_snapshot.empty() ? + std::string(empty_scene_snapshot_json()) : + engine->scene_snapshot; + web_engine_blend_main_free(engine->authoritative_main); + engine->authoritative_main = authoritative_main; + engine->blend_bytes.assign(reinterpret_cast(data), length); + engine->authoritative_commands = true; + engine->authoritative_dirty = false; + engine->scene_snapshot = opened_snapshot.dump(); + engine->packed_assets = parsed.packed_assets; + engine->undo_history.clear(); + engine->redo_history.clear(); + engine->revision++; + try { + engine->scene_delta = scene_delta_json(previous_snapshot, engine->scene_snapshot); + } + catch (const std::exception &exception) { + engine->scene_delta.clear(); + set_error(WEB_ENGINE_BLEND_READ_FAILED, exception.what()); + return last_error_code; + } + set_error(WEB_ENGINE_OK, "ok"); + return WEB_ENGINE_OK; +} + +EMSCRIPTEN_KEEPALIVE int web_engine_apply_command(const int handle, + const uint8_t *data, + const uint32_t length) +{ + EngineState *engine = find_engine(handle); + if (engine == nullptr) { + return last_error_code; + } + if (length == 0 || data == nullptr) { + set_error(WEB_ENGINE_INVALID_ARGUMENT, "command buffer is null"); + return last_error_code; + } + try { + const json command = json::parse(reinterpret_cast(data), + reinterpret_cast(data) + length); + const std::string type = command.value("type", ""); + if (command.contains("baseRevision") && + (!command["baseRevision"].is_number_unsigned() || + command["baseRevision"].get() != engine->revision)) + { + set_error(WEB_ENGINE_INVALID_ARGUMENT, "REVISION_CONFLICT: command base revision does not match the current SceneIR"); + return last_error_code; + } + const std::string previous_snapshot = engine->scene_snapshot.empty() ? + std::string(empty_scene_snapshot_json()) : + engine->scene_snapshot; + json snapshot = json::parse(previous_snapshot); + bool snapshot_from_main = false; + HistoryEntry previous_state; + std::string history_error; + if (!capture_history_entry(*engine, previous_state, history_error)) { + set_error(WEB_ENGINE_BLEND_WRITE_FAILED, history_error.c_str()); + return last_error_code; + } + if (type == "setFrame") { + if (!engine->authoritative_commands || engine->authoritative_main == nullptr) { + set_error(WEB_ENGINE_NOT_IMPLEMENTED, + "COMMAND_REQUIRES_MAIN_AUTHORITY: undo snapshot-only edits before setFrame"); + return last_error_code; + } + const int frame = command.value("frame", -1); + if (frame < 0 || !snapshot.contains("frame")) { + set_error(WEB_ENGINE_INVALID_ARGUMENT, "setFrame requires a non-negative frame"); + return last_error_code; + } + const int start = snapshot["frame"].value("start", 1); + const int end = snapshot["frame"].value("end", 250); + const int effective_frame = std::clamp(frame, start, end); + std::string main_error; + if (!web_engine_blend_main_set_frame(engine->authoritative_main, effective_frame, main_error)) { + set_error(WEB_ENGINE_INVALID_ARGUMENT, main_error.c_str()); + return last_error_code; + } + engine->authoritative_dirty = true; + snapshot["frame"]["current"] = effective_frame; + } + else if (type == "setObjectVisibility") { + if (!engine->authoritative_commands || engine->authoritative_main == nullptr) { + set_error(WEB_ENGINE_NOT_IMPLEMENTED, + "COMMAND_REQUIRES_MAIN_AUTHORITY: undo snapshot-only edits before setObjectVisibility"); + return last_error_code; + } + const std::string object_id = command.value("objectId", ""); + if (object_id.empty() || !command.contains("visible") || !command["visible"].is_boolean()) { + set_error(WEB_ENGINE_INVALID_ARGUMENT, "setObjectVisibility requires objectId and visible"); + return last_error_code; + } + bool found = false; + for (json &node : snapshot["nodes"]) { + if (node.value("id", "") == object_id) { + node["visible"] = command["visible"]; + found = true; + break; + } + } + if (!found) { + set_error(WEB_ENGINE_INVALID_ARGUMENT, "objectId was not found"); + return last_error_code; + } + std::string main_error; + if (!web_engine_blend_main_set_visibility( + engine->authoritative_main, object_id.c_str(), command["visible"].get(), main_error)) { + set_error(WEB_ENGINE_INVALID_ARGUMENT, main_error.c_str()); + return last_error_code; + } + engine->authoritative_dirty = true; + } + else if (type == "setModifierEnabled") { + if (!engine->authoritative_commands || engine->authoritative_main == nullptr) { + set_error(WEB_ENGINE_NOT_IMPLEMENTED, + "COMMAND_REQUIRES_MAIN_AUTHORITY: undo snapshot-only edits before setModifierEnabled"); + return last_error_code; + } + const std::string mesh_id = command.value("meshId", ""); + const std::string modifier_uuid = command.value("modifierUuid", ""); + if (mesh_id.empty() || modifier_uuid.empty() || !command.contains("enabled") || !command["enabled"].is_boolean()) { + set_error(WEB_ENGINE_INVALID_ARGUMENT, "setModifierEnabled requires meshId, modifierUuid and enabled"); + return last_error_code; + } + bool mesh_found = false; + bool modifier_found = false; + for (json &mesh : snapshot["meshes"]) { + if (mesh.value("id", "") != mesh_id) continue; + mesh_found = true; + if (!mesh.contains("modifierStack") || !mesh["modifierStack"].is_array()) break; + for (json &modifier : mesh["modifierStack"]) { + if (modifier.value("uuid", "") == modifier_uuid) { + modifier["enabled"] = command["enabled"]; + modifier_found = true; + break; + } + } + break; + } + if (!mesh_found || !modifier_found) { + set_error(WEB_ENGINE_INVALID_ARGUMENT, "modifier UUID was not found in mesh stack"); + return last_error_code; + } + std::string main_error; + if (!web_engine_blend_main_set_modifier_enabled(engine->authoritative_main, + mesh_id.c_str(), + modifier_uuid.c_str(), + command["enabled"].get(), + main_error)) { + set_error(WEB_ENGINE_INVALID_ARGUMENT, main_error.c_str()); + return last_error_code; + } + engine->authoritative_dirty = true; + } + else if (type == "setModifierVisibility") { + if (!engine->authoritative_commands || engine->authoritative_main == nullptr) { + set_error(WEB_ENGINE_NOT_IMPLEMENTED, "COMMAND_REQUIRES_MAIN_AUTHORITY: modifier visibility"); + return last_error_code; + } + std::string main_error; + if (!web_engine_blend_main_set_modifier_visibility( + engine->authoritative_main, command.value("meshId", "").c_str(), + command.value("modifierUuid", "").c_str(), command.value("showViewport", true), + command.value("showRender", true), command.value("showEditMode", false), + command.value("showOnCage", false), main_error) || + !refresh_scene_from_main(*engine, snapshot, snapshot.value("activeObjectId", ""), main_error)) { + restore_history_entry(*engine, previous_state, history_error); + set_error(WEB_ENGINE_INVALID_ARGUMENT, main_error.c_str()); + return last_error_code; + } + engine->authoritative_dirty = true; + snapshot_from_main = true; + } + else if (type == "decimateMesh") { + std::string decimate_error; + const int result = apply_decimate_command(snapshot, command, decimate_error); + if (result != WEB_ENGINE_OK) { + set_error(result == WEB_ENGINE_NOT_IMPLEMENTED ? WEB_ENGINE_NOT_IMPLEMENTED : WEB_ENGINE_INVALID_ARGUMENT, + decimate_error.c_str()); + return last_error_code; + } + json *decimated_mesh = nullptr; + for (json &mesh : snapshot["meshes"]) { + if (mesh.value("id", "") == command.value("meshId", "")) { + decimated_mesh = &mesh; + break; + } + } + const bool has_skin_or_shapes = decimated_mesh != nullptr && + (decimated_mesh->contains("skinWeights") || + (decimated_mesh->contains("shapeKeys") && + !(*decimated_mesh)["shapeKeys"].empty())); + if (engine->authoritative_commands && engine->authoritative_main != nullptr && + !has_skin_or_shapes && decimated_mesh != nullptr) + { + std::string main_error; + if (!web_engine_blend_main_replace_mesh( + engine->authoritative_main, + command.value("meshId", "").c_str(), + decimated_mesh->value("positions", std::vector()), + decimated_mesh->value("indices", std::vector()), + decimated_mesh->value("uvs", std::vector()), + decimated_mesh->value("colors", std::vector()), + decimated_mesh->value("triangleMaterialIndices", std::vector()), + main_error)) + { + set_error(WEB_ENGINE_INVALID_ARGUMENT, main_error.c_str()); + return last_error_code; + } + if (!refresh_scene_from_main(*engine, snapshot, snapshot.value("activeObjectId", ""), main_error)) { + restore_history_entry(*engine, previous_state, history_error); + set_error(WEB_ENGINE_INVALID_ARGUMENT, main_error.c_str()); + return last_error_code; + } + engine->authoritative_dirty = true; + snapshot_from_main = true; + } + else { + engine->authoritative_commands = false; + } + } + else if (type == "createPrimitive") { + if (!engine->authoritative_commands || engine->authoritative_main == nullptr) { + set_error(WEB_ENGINE_NOT_IMPLEMENTED, + "COMMAND_REQUIRES_MAIN_AUTHORITY: undo snapshot-only edits before createPrimitive"); + return last_error_code; + } + const std::string primitive = command.value("primitive", ""); + const std::string name = command.value("name", primitive); + const std::vector location = command.value( + "location", std::vector{0.0f, 0.0f, 0.0f}); + std::string new_object_id; + std::string main_error; + if (!web_engine_blend_main_create_primitive(engine->authoritative_main, + primitive.c_str(), + name.c_str(), + location, + new_object_id, + main_error) || + !refresh_scene_from_main(*engine, snapshot, new_object_id, main_error)) + { + restore_history_entry(*engine, previous_state, history_error); + set_error(WEB_ENGINE_INVALID_ARGUMENT, main_error.c_str()); + return last_error_code; + } + engine->authoritative_dirty = true; + snapshot_from_main = true; + } + else if (type == "createCurve") { + if (!engine->authoritative_commands || engine->authoritative_main == nullptr) { + set_error(WEB_ENGINE_NOT_IMPLEMENTED, + "COMMAND_REQUIRES_MAIN_AUTHORITY: undo snapshot-only edits before createCurve"); + return last_error_code; + } + const std::string name = command.value("name", "WebCurve"); + const std::vector control_points = command.value("controlPoints", std::vector()); + std::string object_id; + std::string data_id; + std::string main_error; + if (!web_engine_blend_main_create_curve( + engine->authoritative_main, command.value("curveType", "").c_str(), name.c_str(), + control_points, command.value("cyclic", false), command.value("resolution", 12), + object_id, data_id, main_error) || + !refresh_scene_from_main(*engine, snapshot, object_id, main_error)) { + restore_history_entry(*engine, previous_state, history_error); + set_error(WEB_ENGINE_INVALID_ARGUMENT, main_error.c_str()); + return last_error_code; + } + engine->authoritative_dirty = true; + snapshot_from_main = true; + } + else if (type == "deleteNonMeshData") { + if (!engine->authoritative_commands || engine->authoritative_main == nullptr) { + set_error(WEB_ENGINE_NOT_IMPLEMENTED, + "COMMAND_REQUIRES_MAIN_AUTHORITY: undo snapshot-only edits before deleteNonMeshData"); + return last_error_code; + } + std::string main_error; + if (!web_engine_blend_main_delete_non_mesh_data( + engine->authoritative_main, command.value("dataId", "").c_str(), main_error) || + !refresh_scene_from_main(*engine, snapshot, "", main_error)) { + restore_history_entry(*engine, previous_state, history_error); + set_error(WEB_ENGINE_INVALID_ARGUMENT, main_error.c_str()); + return last_error_code; + } + engine->authoritative_dirty = true; + snapshot_from_main = true; + } + else if (type == "duplicateObject") { + if (!engine->authoritative_commands || engine->authoritative_main == nullptr) { + set_error(WEB_ENGINE_NOT_IMPLEMENTED, + "COMMAND_REQUIRES_MAIN_AUTHORITY: undo snapshot-only edits before duplicateObject"); + return last_error_code; + } + const std::string object_id = command.value("objectId", ""); + const std::vector offset = command.value( + "offset", std::vector{0.25f, 0.25f, 0.0f}); + const bool linked = command.value("linked", false); + std::string new_object_id; + std::string main_error; + if (!web_engine_blend_main_duplicate_object(engine->authoritative_main, + object_id.c_str(), + offset, + linked, + new_object_id, + main_error) || + !refresh_scene_from_main(*engine, snapshot, new_object_id, main_error)) + { + restore_history_entry(*engine, previous_state, history_error); + set_error(WEB_ENGINE_INVALID_ARGUMENT, main_error.c_str()); + return last_error_code; + } + engine->authoritative_dirty = true; + snapshot_from_main = true; + } + else if (type == "deleteObject") { + if (!engine->authoritative_commands || engine->authoritative_main == nullptr) { + set_error(WEB_ENGINE_NOT_IMPLEMENTED, + "COMMAND_REQUIRES_MAIN_AUTHORITY: undo snapshot-only edits before deleteObject"); + return last_error_code; + } + const std::string object_id = command.value("objectId", ""); + std::string main_error; + if (!web_engine_blend_main_delete_object( + engine->authoritative_main, object_id.c_str(), main_error) || + !refresh_scene_from_main(*engine, snapshot, "", main_error)) + { + restore_history_entry(*engine, previous_state, history_error); + set_error(WEB_ENGINE_INVALID_ARGUMENT, main_error.c_str()); + return last_error_code; + } + engine->authoritative_dirty = true; + snapshot_from_main = true; + } + else if (type == "setObjectTransform") { + if (!engine->authoritative_commands || engine->authoritative_main == nullptr) { + set_error(WEB_ENGINE_NOT_IMPLEMENTED, + "COMMAND_REQUIRES_MAIN_AUTHORITY: undo snapshot-only edits before setObjectTransform"); + return last_error_code; + } + const std::string object_id = command.value("objectId", ""); + const std::vector translation = command.value("translation", std::vector()); + const std::vector rotation_euler = command.value("rotationEuler", std::vector()); + const std::vector scale = command.value("scale", std::vector()); + std::string main_error; + if (!web_engine_blend_main_set_transform(engine->authoritative_main, + object_id.c_str(), + translation, + rotation_euler, + scale, + main_error) || + !refresh_scene_from_main(*engine, snapshot, object_id, main_error)) + { + restore_history_entry(*engine, previous_state, history_error); + set_error(WEB_ENGINE_INVALID_ARGUMENT, main_error.c_str()); + return last_error_code; + } + engine->authoritative_dirty = true; + snapshot_from_main = true; + } + else if (type == "translateMeshVertices") { + if (!engine->authoritative_commands || engine->authoritative_main == nullptr) { + set_error(WEB_ENGINE_NOT_IMPLEMENTED, + "COMMAND_REQUIRES_MAIN_AUTHORITY: undo snapshot-only edits before translateMeshVertices"); + return last_error_code; + } + const std::string mesh_id = command.value("meshId", ""); + const std::vector vertex_indices = command.value( + "vertexIndices", std::vector()); + const std::vector offset = command.value("offset", std::vector()); + std::string main_error; + if (!web_engine_blend_main_translate_vertices(engine->authoritative_main, + mesh_id.c_str(), + vertex_indices, + offset, + main_error) || + !refresh_scene_from_main(*engine, snapshot, snapshot.value("activeObjectId", ""), main_error)) + { + restore_history_entry(*engine, previous_state, history_error); + set_error(WEB_ENGINE_INVALID_ARGUMENT, main_error.c_str()); + return last_error_code; + } + engine->authoritative_dirty = true; + snapshot_from_main = true; + } + else if (type == "meshEdit" || type == "createUVMap" || type == "setActiveUVMap" || + type == "unwrapUV" || type == "addMaterialSlot" || type == "removeMaterialSlot" || + type == "assignMaterialFaces" || type == "setMaterialPrincipled" || + type == "importImage" || type == "setMaterialImageNode" || type == "setShaderGraph" || + type == "insertObjectKeyframe" || type == "deleteObjectKeyframe" || + type == "setFCurveInterpolation" || type == "setActiveAction" || type == "setNLAStack" || + type == "setConstraint" || type == "setParent" || type == "createCollection" || + type == "moveObjectToCollection" || type == "renameId" || type == "joinObjects" || + type == "separateMeshFaces" || type == "applyObjectTransform" || type == "setObjectOrigin" || + type == "setCurveControlPoints" || type == "setCurveHandle" || type == "setCurveTopology" || type == "setCurveSplines" || type == "setSurfaceTopology" || type == "setFontBody" || + type == "setFontProperties" || type == "setFontAdvanced" || type == "importVFont" || type == "setFontLinks" || type == "setVolumeProperties" || type == "deleteNonMeshData" || + type == "setMetaballElements" || type == "createGreasePencilLayer" || + type == "removeGreasePencilLayer" || type == "moveGreasePencilLayer" || + type == "moveGreasePencilFrame" || + type == "insertGreasePencilFrame" || type == "removeGreasePencilFrame" || + type == "setGreasePencilStrokes" || type == "setVertexColors" || + type == "setVertexWeights" || type == "setCameraProperties" || type == "setLightProperties" || + type == "setWorldProperties" || + type == "setSculptMeshAttributes" || + type == "sculptStroke") { + if (!engine->authoritative_commands || engine->authoritative_main == nullptr) { + set_error(WEB_ENGINE_NOT_IMPLEMENTED, + "COMMAND_REQUIRES_MAIN_AUTHORITY: undo snapshot-only edits before authoring commands"); + return last_error_code; + } + bool applied = false; + std::string main_error; + std::string active_object_id = snapshot.value("activeObjectId", ""); + if (type == "meshEdit") { + applied = web_engine_blend_main_mesh_edit( + engine->authoritative_main, + command.value("meshId", "").c_str(), command.value("operation", "").c_str(), + command.value("selectionMode", "").c_str(), + command.value("elementIndices", std::vector()), + command.value("offset", std::vector()), command.value("amount", 0.0f), + command.value("segments", 1), main_error); + } + else if (type == "createUVMap") { + applied = web_engine_blend_main_create_uv_map(engine->authoritative_main, + command.value("meshId", "").c_str(), + command.value("name", "").c_str(), main_error); + } + else if (type == "setActiveUVMap") { + applied = web_engine_blend_main_set_active_uv_map(engine->authoritative_main, + command.value("meshId", "").c_str(), + command.value("name", "").c_str(), main_error); + } + else if (type == "unwrapUV") { + applied = web_engine_blend_main_unwrap_uv(engine->authoritative_main, + command.value("meshId", "").c_str(), + command.value("faceIndices", std::vector()), + command.value("method", "PLANAR").c_str(), main_error); + } + else if (type == "addMaterialSlot") { + std::string material_id; + applied = web_engine_blend_main_add_material_slot(engine->authoritative_main, + command.value("objectId", "").c_str(), + command.value("name", "Material").c_str(), + material_id, main_error); + } + else if (type == "removeMaterialSlot") { + applied = web_engine_blend_main_remove_material_slot(engine->authoritative_main, + command.value("objectId", "").c_str(), + command.value("slotIndex", -1), main_error); + } + else if (type == "assignMaterialFaces") { + applied = web_engine_blend_main_assign_material_faces( + engine->authoritative_main, command.value("meshId", "").c_str(), + command.value("faceIndices", std::vector()), command.value("slotIndex", -1), main_error); + } + else if (type == "setMaterialPrincipled") { + applied = web_engine_blend_main_set_material_principled( + engine->authoritative_main, command.value("materialId", "").c_str(), + command.value("baseColor", std::vector()), command.value("roughness", 0.4f), + command.value("metallic", 0.0f), command.value("emissionColor", std::vector{0, 0, 0, 1}), + command.value("alpha", 1.0f), command.value("ior", 1.45f), + command.value("specularIORLevel", 0.5f), command.value("transmissionWeight", 0.0f), + command.value("coatWeight", 0.0f), command.value("coatRoughness", 0.03f), + command.value("emissionStrength", 1.0f), main_error); + } + else if (type == "importImage") { + std::string image_id; + applied = web_engine_blend_main_import_image( + engine->authoritative_main, command.value("name", "Image").c_str(), + command.value("mimeType", "").c_str(), command.value("width", 0), command.value("height", 0), + command.value("base64", "").c_str(), image_id, main_error); + } + else if (type == "setMaterialImageNode") { + applied = web_engine_blend_main_set_material_image( + engine->authoritative_main, command.value("materialId", "").c_str(), + command.value("imageId", "").c_str(), command.value("usage", "").c_str(), + command.value("uvMap", "").c_str(), main_error); + } + else if (type == "setShaderGraph") { + const json graph = command.value("graph", json::object()); + const std::string material_id = command.value("materialId", ""); + applied = web_engine_blend_main_set_shader_graph( + engine->authoritative_main, material_id.c_str(), graph.dump().c_str(), main_error); + } + else if (type == "insertObjectKeyframe") { + applied = web_engine_blend_main_insert_keyframe( + engine->authoritative_main, command.value("objectId", "").c_str(), command.value("frame", -1), + command.value("property", "").c_str(), command.value("interpolation", "BEZIER").c_str(), main_error); + } + else if (type == "deleteObjectKeyframe") { + applied = web_engine_blend_main_delete_keyframe( + engine->authoritative_main, command.value("objectId", "").c_str(), command.value("frame", -1), + command.value("property", "").c_str(), main_error); + } + else if (type == "setFCurveInterpolation") { + applied = web_engine_blend_main_set_fcurve_interpolation( + engine->authoritative_main, command.value("animationId", "").c_str(), + command.value("path", "").c_str(), command.value("interpolation", "BEZIER").c_str(), main_error); + } + else if (type == "setActiveAction") { + const std::string action_id = command.contains("actionId") && command["actionId"].is_string() ? + command["actionId"].get() : std::string(); + applied = web_engine_blend_main_set_active_action(engine->authoritative_main, + command.value("objectId", "").c_str(), + action_id.c_str(), main_error); + } + else if (type == "setNLAStack") { + const json tracks = command.value("tracks", json::array()); + applied = web_engine_blend_main_set_nla_stack( + engine->authoritative_main, command.value("objectId", "").c_str(), tracks.dump().c_str(), main_error); + } + else if (type == "setConstraint") { + applied = web_engine_blend_main_set_constraint( + engine->authoritative_main, command.value("objectId", "").c_str(), + command.value("constraintName", "").c_str(), command.value("enabled", true), + command.value("influence", 1.0f), main_error); + } + else if (type == "setParent") { + const std::string parent_id = command.contains("parentId") && command["parentId"].is_string() ? + command["parentId"].get() : std::string(); + applied = web_engine_blend_main_set_parent(engine->authoritative_main, + command.value("objectId", "").c_str(), parent_id.c_str(), + command.value("keepTransform", true), main_error); + } + else if (type == "createCollection") { + const std::string parent_id = command.contains("parentCollectionId") && command["parentCollectionId"].is_string() ? + command["parentCollectionId"].get() : std::string(); + std::string collection_id; + applied = web_engine_blend_main_create_collection(engine->authoritative_main, + command.value("name", "Collection").c_str(), + parent_id.c_str(), collection_id, main_error); + } + else if (type == "moveObjectToCollection") { + applied = web_engine_blend_main_move_to_collection(engine->authoritative_main, + command.value("objectId", "").c_str(), + command.value("collectionId", "").c_str(), main_error); + } + else if (type == "renameId") { + std::string renamed_id; + const std::string original_id = command.value("id", ""); + applied = web_engine_blend_main_rename_id(engine->authoritative_main, original_id.c_str(), + command.value("name", "").c_str(), renamed_id, main_error); + if (applied && original_id == active_object_id) active_object_id = renamed_id; + } + else if (type == "joinObjects") { + active_object_id = command.value("activeObjectId", ""); + applied = web_engine_blend_main_join_objects(engine->authoritative_main, active_object_id.c_str(), + command.value("objectIds", std::vector()), main_error); + } + else if (type == "separateMeshFaces") { + std::string new_object_id; + applied = web_engine_blend_main_separate_faces( + engine->authoritative_main, command.value("objectId", "").c_str(), + command.value("faceIndices", std::vector()), command.value("name", "Separated").c_str(), + new_object_id, main_error); + if (applied) active_object_id = new_object_id; + } + else if (type == "applyObjectTransform") { + applied = web_engine_blend_main_apply_transform(engine->authoritative_main, + command.value("objectId", "").c_str(), main_error); + } + else if (type == "setObjectOrigin") { + applied = web_engine_blend_main_set_origin(engine->authoritative_main, + command.value("objectId", "").c_str(), + command.value("mode", "GEOMETRY").c_str(), main_error); + } + else if (type == "setCurveControlPoints") { + applied = web_engine_blend_main_set_curve_control_points( + engine->authoritative_main, command.value("dataId", "").c_str(), + command.value("controlPoints", std::vector()), + command.value("splineOffsets", std::vector()), + command.value("resolution", -1), main_error); + } + else if (type == "setCurveHandle") { + const std::string side = command.value("side", ""); + const int64_t point_index = command.value("pointIndex", int64_t(-1)); + if ((side != "LEFT" && side != "RIGHT") || point_index < 0 || point_index > 1000000) { + main_error = "NON_MESH_PROPERTY_INVALID: Curve handle identity is outside the bounded topology"; + } + applied = main_error.empty() && web_engine_blend_main_set_curve_handle( + engine->authoritative_main, command.value("dataId", "").c_str(), uint32_t(point_index), + side == "RIGHT", command.value("position", std::vector()), main_error); + } + else if (type == "setCurveTopology") { + WebCurveTopologyEdit edit; + const json spline_types = command.value("splineTypes", json::array()); + const json cyclic_u = command.value("cyclicU", json::array()); + const json cyclic_v = command.value("cyclicV", json::array()); + const json handle_types = command.value("handleTypes", json::array()); + const json handle_points = command.value("handlePoints", json::array()); + if (!spline_types.is_array() || !cyclic_u.is_array() || !cyclic_v.is_array() || !handle_types.is_array() || !handle_points.is_array()) { + main_error = "NON_MESH_PROPERTY_INVALID: curve topology fields must be arrays"; + } + for (const json &value : spline_types) { + if (!value.is_string()) { main_error = "NON_MESH_PROPERTY_INVALID: splineTypes must contain strings"; break; } + const std::string name = value.get(); + if (name == "POLY") edit.spline_types.push_back(0); + else if (name == "BEZIER") edit.spline_types.push_back(1); + else if (name == "NURBS") edit.spline_types.push_back(4); + else { main_error = "NON_MESH_PROPERTY_INVALID: splineTypes contains an unknown type"; break; } + } + for (const json &value : cyclic_u) { + if (!value.is_boolean()) { main_error = "NON_MESH_PROPERTY_INVALID: cyclicU must contain booleans"; break; } + edit.cyclic_u.push_back(value.get()); + } + for (const json &value : cyclic_v) { + if (!value.is_boolean()) { main_error = "NON_MESH_PROPERTY_INVALID: cyclicV must contain booleans"; break; } + edit.cyclic_v.push_back(value.get()); + } + for (const json &value : handle_types) { + if (!value.is_number_integer()) { main_error = "NON_MESH_PROPERTY_INVALID: handleTypes must contain integers"; break; } + edit.handle_types.push_back(value.get()); + } + for (const json &value : handle_points) { + if (!value.is_number_float() && !value.is_number_integer()) { main_error = "NON_MESH_PROPERTY_INVALID: handlePoints must contain numbers"; break; } + const float point = value.get(); + if (!std::isfinite(point)) { main_error = "NON_MESH_PROPERTY_INVALID: handlePoints must be finite"; break; } + edit.handle_points.push_back(point); + } + applied = main_error.empty() && web_engine_blend_main_set_curve_topology( + engine->authoritative_main, command.value("dataId", "").c_str(), edit, main_error); + } + else if (type == "setCurveSplines") { + const json spline_types = command.value("splineTypes", json::array()); + const json spline_offsets = command.value("splineOffsets", json::array()); + const json orders_u = command.value("ordersU", json::array()); + const json cyclic_u = command.value("cyclicU", json::array()); + std::vector splines; + if (!spline_types.is_array() || !spline_offsets.is_array() || !orders_u.is_array() || + !cyclic_u.is_array() || spline_types.empty() || + spline_offsets.size() != spline_types.size() + 1 || + orders_u.size() != spline_types.size() || cyclic_u.size() != spline_types.size()) { + main_error = "NON_MESH_PROPERTY_INVALID: Curve spline transaction arrays have inconsistent lengths"; + } + if (main_error.empty() && (!spline_offsets.front().is_number_unsigned() || + spline_offsets.front().get() != 0)) { + main_error = "NON_MESH_PROPERTY_INVALID: Curve spline offsets must start at zero"; + } + for (size_t index = 0; main_error.empty() && index < spline_types.size(); index++) { + if (!spline_types[index].is_string() || !spline_offsets[index].is_number_unsigned() || + !spline_offsets[index + 1].is_number_unsigned() || !orders_u[index].is_number_integer() || + !cyclic_u[index].is_boolean()) { + main_error = "NON_MESH_PROPERTY_INVALID: Curve spline transaction contains invalid values"; + break; + } + const std::string name = spline_types[index].get(); + int spline_type = -1; + if (name == "POLY") spline_type = 0; + else if (name == "BEZIER") spline_type = 1; + else if (name == "NURBS") spline_type = 4; + const uint64_t begin = spline_offsets[index].get(); + const uint64_t end = spline_offsets[index + 1].get(); + if (spline_type < 0 || end <= begin || end - begin > 1000000) { + main_error = "NON_MESH_PROPERTY_INVALID: Curve spline type or offset range is invalid"; + break; + } + splines.push_back({spline_type, int(end - begin), orders_u[index].get(), + cyclic_u[index].get()}); + } + applied = main_error.empty() && web_engine_blend_main_set_curve_splines( + engine->authoritative_main, command.value("dataId", "").c_str(), splines, + command.value("controlPoints", std::vector()), + command.value("pointWeights", std::vector()), + command.value("handleTypes", std::vector()), + command.value("handlePoints", std::vector()), main_error); + } + else if (type == "setSurfaceTopology") { + const json dimensions = command.value("splineDimensions", json::array()); + const json cyclic_u = command.value("cyclicU", json::array()); + const json cyclic_v = command.value("cyclicV", json::array()); + std::vector splines; + if (!dimensions.is_array() || !cyclic_u.is_array() || !cyclic_v.is_array() || + dimensions.size() != cyclic_u.size() || dimensions.size() != cyclic_v.size()) { + main_error = "NON_MESH_PROPERTY_INVALID: Surface topology arrays must have equal lengths"; + } + for (size_t index = 0; main_error.empty() && index < dimensions.size(); index++) { + if (!dimensions[index].is_object() || !cyclic_u[index].is_boolean() || !cyclic_v[index].is_boolean()) { + main_error = "NON_MESH_PROPERTY_INVALID: Surface topology entries are invalid"; + break; + } + splines.push_back({dimensions[index].value("u", 0), dimensions[index].value("v", 0), + dimensions[index].value("orderU", 0), dimensions[index].value("orderV", 0), + cyclic_u[index].get(), cyclic_v[index].get()}); + } + applied = main_error.empty() && web_engine_blend_main_set_surface_topology( + engine->authoritative_main, command.value("dataId", "").c_str(), splines, + command.value("controlPoints", std::vector()), + command.value("pointWeights", std::vector()), main_error); + } + else if (type == "setFontBody") { + applied = web_engine_blend_main_set_font_body( + engine->authoritative_main, command.value("dataId", "").c_str(), + command.value("body", "").c_str(), main_error); + } + else if (type == "setFontProperties") { + const json properties = command.value("properties", json::object()); + WebFontPropertiesEdit edit; + if (!properties.is_object() || properties.empty()) { + main_error = "NON_MESH_PROPERTY_INVALID: Font properties must be a non-empty object"; + } + const auto read_string = [&](const char *key, std::string &target) { + if (main_error.empty() && properties.contains(key)) { + if (!properties[key].is_string()) { + main_error = std::string("NON_MESH_PROPERTY_INVALID: Font ") + key + " must be a string"; + return; + } + target = properties[key].get(); + } + }; + const auto read_float = [&](const char *key, float &target) { + if (main_error.empty() && properties.contains(key)) { + if (!properties[key].is_number()) { + main_error = std::string("NON_MESH_PROPERTY_INVALID: Font ") + key + " must be numeric"; + return; + } + target = properties[key].get(); + } + }; + const auto read_int = [&](const char *key, int &target) { + if (main_error.empty() && properties.contains(key)) { + if (!properties[key].is_number_integer()) { + main_error = std::string("NON_MESH_PROPERTY_INVALID: Font ") + key + " must be an integer"; + return; + } + target = properties[key].get(); + } + }; + read_string("alignment", edit.alignment); + read_string("alignY", edit.align_y); + read_float("extrude", edit.extrude); + read_float("bevelDepth", edit.bevel_depth); + read_int("bevelResolution", edit.bevel_resolution); + read_float("offset", edit.offset); + read_float("spacing", edit.spacing); + read_float("lineDistance", edit.line_distance); + read_float("wordSpace", edit.word_space); + read_float("shear", edit.shear); + read_float("fontSize", edit.font_size); + read_float("offsetX", edit.offset_x); + read_float("offsetY", edit.offset_y); + applied = main_error.empty() && web_engine_blend_main_set_font_properties( + engine->authoritative_main, command.value("dataId", "").c_str(), edit, main_error); + } + else if (type == "setFontAdvanced") { + std::vector characters; + std::vector text_boxes; + const json source_characters = command.value("characters", json::array()); + const json source_text_boxes = command.value("textBoxes", json::array()); + if (!source_characters.is_array() || !source_text_boxes.is_array()) { + main_error = "NON_MESH_PROPERTY_INVALID: Font advanced fields must be arrays"; + } + for (const json &source : source_characters) { + if (!source.is_object()) { + main_error = "NON_MESH_PROPERTY_INVALID: Font characters must be objects"; + break; + } + characters.push_back({source.value("kern", 0.0f), + source.value("materialIndex", 0), + source.value("styleFlags", 0)}); + } + for (const json &source : source_text_boxes) { + if (!source.is_object()) { + main_error = "NON_MESH_PROPERTY_INVALID: Font text boxes must be objects"; + break; + } + text_boxes.push_back({source.value("x", 0.0f), source.value("y", 0.0f), + source.value("width", 0.0f), source.value("height", 0.0f)}); + } + applied = main_error.empty() && web_engine_blend_main_set_font_advanced( + engine->authoritative_main, command.value("dataId", "").c_str(), characters, + text_boxes, command.value("activeTextBox", -1), main_error); + } + else if (type == "importVFont") { + std::string font_id; + applied = web_engine_blend_main_import_vfont( + engine->authoritative_main, command.value("name", "").c_str(), + command.value("sourcePath", "").c_str(), command.value("base64", "").c_str(), + font_id, main_error); + } + else if (type == "setFontLinks") { + const json links = command.value("links", json::object()); + const std::array fields = {"regular", "bold", "italic", "boldItalic"}; + std::array font_ids; + if (!links.is_object()) main_error = "NON_MESH_PROPERTY_INVALID: Font links must be an object"; + for (size_t index = 0; main_error.empty() && index < fields.size(); index++) { + if (!links.contains(fields[index]) || !links[fields[index]].is_string()) { + main_error = "NON_MESH_PROPERTY_INVALID: Font links must contain four VFont IDs"; + break; + } + font_ids[index] = links[fields[index]].get(); + } + applied = main_error.empty() && web_engine_blend_main_set_font_links( + engine->authoritative_main, command.value("dataId", "").c_str(), font_ids, main_error); + } + else if (type == "setVolumeProperties") { + WebVolumePropertiesEdit properties; + properties.source_path = command.value("sourcePath", ""); + properties.display_density = command.value("displayDensity", 1.0f); + properties.interpolation = command.value("interpolation", "LINEAR"); + properties.step_size = command.value("stepSize", 0.0f); + properties.velocity_grid = command.value("velocityGrid", ""); + properties.velocity_scale = command.value("velocityScale", 1.0f); + applied = web_engine_blend_main_set_volume_properties( + engine->authoritative_main, + command.value("dataId", "").c_str(), + properties, + main_error); + } + else if (type == "setMetaballElements") { + std::vector elements; + const json source_elements = command.value("elements", json::array()); + for (const json &source : source_elements) { + const std::vector position = source.value("position", std::vector()); + const std::vector scale = source.value("scale", std::vector()); + if (position.size() != 3 || scale.size() != 3) { + main_error = "NON_MESH_PROPERTY_INVALID: Metaball position and scale require three components"; + elements.clear(); + break; + } + WebMetaballElementEdit element; + element.type = source.value("type", 0); + std::copy_n(position.begin(), 3, element.position.begin()); + element.radius = source.value("radius", 0.0f); + std::copy_n(scale.begin(), 3, element.scale.begin()); + elements.push_back(element); + } + applied = main_error.empty() && web_engine_blend_main_set_metaball_elements( + engine->authoritative_main, command.value("dataId", "").c_str(), elements, main_error); + } + else if (type == "createGreasePencilLayer") { + applied = web_engine_blend_main_create_grease_pencil_layer( + engine->authoritative_main, command.value("dataId", "").c_str(), + command.value("name", "").c_str(), main_error); + } + else if (type == "removeGreasePencilLayer") { + applied = web_engine_blend_main_remove_grease_pencil_layer( + engine->authoritative_main, command.value("dataId", "").c_str(), + command.value("layerId", "").c_str(), main_error); + } + else if (type == "moveGreasePencilLayer") { + applied = web_engine_blend_main_move_grease_pencil_layer( + engine->authoritative_main, command.value("dataId", "").c_str(), + command.value("layerId", "").c_str(), command.value("direction", "UP").c_str(), main_error); + } + else if (type == "moveGreasePencilFrame") { + applied = web_engine_blend_main_move_grease_pencil_frame( + engine->authoritative_main, command.value("dataId", "").c_str(), + command.value("layerId", "").c_str(), command.value("frame", -1), + command.value("targetFrame", -1), command.value("drawingId", "").c_str(), main_error); + } + else if (type == "insertGreasePencilFrame") { + applied = web_engine_blend_main_insert_grease_pencil_frame( + engine->authoritative_main, command.value("dataId", "").c_str(), + command.value("layerId", "").c_str(), command.value("frame", -1), + command.value("duration", 0), main_error); + } + else if (type == "removeGreasePencilFrame") { + applied = web_engine_blend_main_remove_grease_pencil_frame( + engine->authoritative_main, command.value("dataId", "").c_str(), + command.value("layerId", "").c_str(), command.value("frame", -1), main_error); + } + else if (type == "setGreasePencilStrokes") { + std::vector strokes; + const json source_strokes = command.value("strokes", json::array()); + if (!source_strokes.is_array()) { + main_error = "GREASE_PENCIL_SCHEMA_INVALID: strokes must be an array"; + } + for (const json &source_stroke : source_strokes) { + if (!main_error.empty()) break; + if (!source_stroke.is_object() || !source_stroke.value("points", json()).is_array()) { + main_error = "GREASE_PENCIL_SCHEMA_INVALID: stroke points must be an array"; + break; + } + WebGreasePencilStrokeEdit stroke; + stroke.cyclic = source_stroke.value("cyclic", false); + stroke.material_index = source_stroke.value("materialIndex", 0); + for (const json &source_point : source_stroke["points"]) { + if (!source_point.is_object() || !source_point.value("position", json()).is_array() || source_point["position"].size() != 3) { + main_error = "GREASE_PENCIL_SCHEMA_INVALID: point position must contain three numbers"; + break; + } + const json &position = source_point["position"]; + WebGreasePencilPointEdit point; + for (int axis = 0; axis < 3; axis++) { + if (!json_number(position[axis])) { + main_error = "GREASE_PENCIL_SCHEMA_INVALID: point position must contain finite numbers"; + break; + } + point.position[axis] = position[axis].get(); + } + if (!main_error.empty()) break; + point.radius = source_point.value("radius", 0.01f); + point.opacity = source_point.value("opacity", 1.0f); + const json color = source_point.value("vertexColor", json::array({0.0f, 0.0f, 0.0f, 0.0f})); + if (!color.is_array() || color.size() != 4) { + main_error = "GREASE_PENCIL_SCHEMA_INVALID: vertexColor must contain four numbers"; + break; + } + for (int channel = 0; channel < 4; channel++) { + if (!json_number(color[channel])) { + main_error = "GREASE_PENCIL_SCHEMA_INVALID: vertexColor must contain finite numbers"; + break; + } + point.vertex_color[channel] = color[channel].get(); + } + if (!main_error.empty()) break; + if (!std::isfinite(point.radius) || point.radius < 0.0f || !std::isfinite(point.opacity) || point.opacity < 0.0f || point.opacity > 1.0f) { + main_error = "GREASE_PENCIL_SCHEMA_INVALID: radius and opacity are outside the bounded range"; + break; + } + stroke.points.push_back(point); + } + if (!main_error.empty()) break; + strokes.push_back(std::move(stroke)); + } + applied = main_error.empty() && web_engine_blend_main_set_grease_pencil_strokes( + engine->authoritative_main, command.value("dataId", "").c_str(), + command.value("layerId", "").c_str(), command.value("frame", -1), strokes, main_error); + } + else if (type == "setVertexColors") { + applied = web_engine_blend_main_set_vertex_colors( + engine->authoritative_main, command.value("meshId", "").c_str(), + command.value("attributeName", "").c_str(), command.value("domain", "").c_str(), + command.value("indices", std::vector()), + command.value("colors", std::vector()), main_error); + } + else if (type == "setVertexWeights") { + applied = web_engine_blend_main_set_vertex_weights( + engine->authoritative_main, command.value("objectId", "").c_str(), + command.value("vertexGroup", "").c_str(), + command.value("indices", std::vector()), + command.value("values", std::vector()), + command.value("normalize", false), command.value("limit", 0u), command.value("mirror", false), + command.value("mirrorAxis", 0), command.value("mirrorTolerance", 1e-4f), main_error); + } + else if (type == "setCameraProperties" || type == "setLightProperties" || type == "setWorldProperties") + { + const json properties = command.value("properties", json::object()); + applied = web_engine_blend_main_set_render_properties( + engine->authoritative_main, command.value("dataId", "").c_str(), + properties.dump().c_str(), main_error); + } + else if (type == "setSculptMeshAttributes") { + const json attributes = command.value("attributes", json::object()); + applied = web_engine_blend_main_set_sculpt_attributes( + engine->authoritative_main, attributes.value("meshId", "").c_str(), + attributes.value("mask", std::vector()), + attributes.value("faceSets", std::vector()), main_error); + } + else if (type == "sculptStroke") { + const json stroke = command.value("stroke", json::object()); + applied = web_engine_blend_main_sculpt_stroke( + engine->authoritative_main, stroke.dump().c_str(), main_error); + } + if (!applied || !refresh_scene_from_main(*engine, snapshot, active_object_id, main_error)) { + restore_history_entry(*engine, previous_state, history_error); + set_error(WEB_ENGINE_INVALID_ARGUMENT, main_error.c_str()); + return last_error_code; + } + engine->authoritative_dirty = true; + snapshot_from_main = true; + } + else { + set_error(WEB_ENGINE_NOT_IMPLEMENTED, "command is not implemented by WebEngine"); + return last_error_code; + } + push_history(engine->undo_history, std::move(previous_state)); + engine->redo_history.clear(); + if (!snapshot_from_main) snapshot["revision"] = engine->revision + 1; + engine->scene_snapshot = snapshot.dump(); + engine->revision++; + engine->scene_delta = scene_delta_json(previous_snapshot, engine->scene_snapshot); + set_error(WEB_ENGINE_OK, "ok"); + return WEB_ENGINE_OK; + } + catch (const std::exception &exception) { + set_error(WEB_ENGINE_INVALID_ARGUMENT, exception.what()); + return last_error_code; + } +} + +EMSCRIPTEN_KEEPALIVE int web_engine_append_library_object(const int handle, + const uint8_t *source_data, + const uint32_t source_length, + const uint8_t *metadata, + const uint32_t metadata_length) +{ + EngineState *engine = find_engine(handle); + if (engine == nullptr) return last_error_code; + if (source_data == nullptr || source_length == 0 || + source_length > 64u * 1024u * 1024u || metadata == nullptr || metadata_length == 0) + { + set_error(WEB_ENGINE_INVALID_ARGUMENT, "ASSET_BUDGET_EXCEEDED: library append input is empty or exceeds 64 MiB"); + return last_error_code; + } + if (!engine->authoritative_commands || engine->authoritative_main == nullptr) { + set_error(WEB_ENGINE_NOT_IMPLEMENTED, + "COMMAND_REQUIRES_MAIN_AUTHORITY: library append requires an authoritative Main"); + return last_error_code; + } + try { + const json request = json::parse(reinterpret_cast(metadata), + reinterpret_cast(metadata) + metadata_length); + if (!request.is_object() || request.size() != 5 || request.value("schemaVersion", 0) != 1 || + !request.contains("baseRevision") || !request["baseRevision"].is_number_unsigned() || + !request.contains("sourceLocator") || !request["sourceLocator"].is_string() || + !request.contains("sourceDataBlockId") || !request["sourceDataBlockId"].is_string() || + !request.contains("expectedClosure") || !request["expectedClosure"].is_object()) + { + set_error(WEB_ENGINE_INVALID_ARGUMENT, + "ASSET_MANIFEST_INVALID: native library append metadata is malformed"); + return last_error_code; + } + for (const char *key : {"schemaVersion", "baseRevision", "sourceLocator", "sourceDataBlockId", "expectedClosure"}) { + if (!request.contains(key)) { + set_error(WEB_ENGINE_INVALID_ARGUMENT, + "ASSET_MANIFEST_INVALID: native library append metadata fields are not exact"); + return last_error_code; + } + } + const uint64_t base_revision = request["baseRevision"].get(); + if (base_revision != engine->revision) { + set_error(WEB_ENGINE_INVALID_ARGUMENT, + "REVISION_CONFLICT: library append base revision does not match the current SceneIR"); + return last_error_code; + } + const json &closure = request["expectedClosure"]; + if (closure.size() != 4) { + set_error(WEB_ENGINE_INVALID_ARGUMENT, "ASSET_MANIFEST_INVALID: append closure fields are not exact"); + return last_error_code; + } + auto closure_name = [&](const char *field, const char *prefix) -> std::string { + if (!closure.contains(field) || !closure[field].is_string()) return {}; + const std::string value = closure[field].get(); + const size_t prefix_length = strlen(prefix); + if (value.size() <= prefix_length || value.compare(0, prefix_length, prefix) != 0) return {}; + return value.substr(prefix_length); + }; + const std::string object_name = closure_name("object", "Object/"); + const std::string mesh_name = closure_name("mesh", "Mesh/"); + const std::string material_name = closure_name("material", "Material/"); + const std::string image_name = closure_name("image", "Image/"); + if (object_name.empty() || mesh_name.empty() || material_name.empty() || image_name.empty() || + request["sourceDataBlockId"].get() != "Object/" + object_name) + { + set_error(WEB_ENGINE_INVALID_ARGUMENT, + "ASSET_SOURCE_HASH_MISMATCH: native append root does not match the expected closure"); + return last_error_code; + } + + HistoryEntry previous_state; + std::string history_error; + if (!capture_history_entry(*engine, previous_state, history_error)) { + set_error(WEB_ENGINE_BLEND_WRITE_FAILED, history_error.c_str()); + return last_error_code; + } + const uint64_t previous_revision = engine->revision; + const std::string previous_snapshot = engine->scene_snapshot.empty() ? + std::string(empty_scene_snapshot_json()) : + engine->scene_snapshot; + const std::string previous_delta = engine->scene_delta; + const auto previous_packed_assets = engine->packed_assets; + auto rollback = [&]() { + std::string rollback_error; + if (restore_history_entry(*engine, previous_state, rollback_error)) { + engine->revision = previous_revision; + engine->scene_snapshot = previous_snapshot; + engine->scene_delta = previous_delta; + engine->packed_assets = previous_packed_assets; + engine->binary_revision = std::numeric_limits::max(); + } + }; + + std::string object_id; + std::string append_error; + if (!web_engine_blend_main_append_object(engine->authoritative_main, + source_data, + source_length, + request["sourceLocator"].get_ref().c_str(), + object_name.c_str(), + mesh_name.c_str(), + material_name.c_str(), + image_name.c_str(), + object_id, + append_error)) + { + rollback(); + set_error(append_error.rfind("BLEND_READ_FAILED:", 0) == 0 ? + WEB_ENGINE_BLEND_READ_FAILED : WEB_ENGINE_INVALID_ARGUMENT, + append_error.c_str()); + return last_error_code; + } + json snapshot; + if (!refresh_scene_from_main(*engine, snapshot, object_id, append_error)) { + rollback(); + set_error(WEB_ENGINE_BLEND_WRITE_FAILED, append_error.c_str()); + return last_error_code; + } + + engine->authoritative_dirty = true; + push_history(engine->undo_history, std::move(previous_state)); + engine->redo_history.clear(); + engine->scene_snapshot = snapshot.dump(); + engine->revision++; + engine->scene_delta = scene_delta_json(previous_snapshot, engine->scene_snapshot); + set_error(WEB_ENGINE_OK, "ok"); + return WEB_ENGINE_OK; + } + catch (const std::exception &exception) { + set_error(WEB_ENGINE_INVALID_ARGUMENT, exception.what()); + return last_error_code; + } +} + +EMSCRIPTEN_KEEPALIVE int web_engine_undo(const int handle) +{ + EngineState *engine = find_engine(handle); + if (engine == nullptr) return last_error_code; + if (engine->undo_history.empty()) { + set_error(WEB_ENGINE_HISTORY_EMPTY, "undo history is empty"); + return last_error_code; + } + HistoryEntry current; + std::string history_error; + if (!capture_history_entry(*engine, current, history_error)) { + set_error(WEB_ENGINE_BLEND_WRITE_FAILED, history_error.c_str()); + return last_error_code; + } + if (!restore_history_entry(*engine, engine->undo_history.back(), history_error)) { + set_error(WEB_ENGINE_BLEND_READ_FAILED, history_error.c_str()); + return last_error_code; + } + engine->undo_history.pop_back(); + push_history(engine->redo_history, std::move(current)); + set_error(WEB_ENGINE_OK, "ok"); + return WEB_ENGINE_OK; +} + +EMSCRIPTEN_KEEPALIVE int web_engine_redo(const int handle) +{ + EngineState *engine = find_engine(handle); + if (engine == nullptr) return last_error_code; + if (engine->redo_history.empty()) { + set_error(WEB_ENGINE_HISTORY_EMPTY, "redo history is empty"); + return last_error_code; + } + HistoryEntry current; + std::string history_error; + if (!capture_history_entry(*engine, current, history_error)) { + set_error(WEB_ENGINE_BLEND_WRITE_FAILED, history_error.c_str()); + return last_error_code; + } + if (!restore_history_entry(*engine, engine->redo_history.back(), history_error)) { + set_error(WEB_ENGINE_BLEND_READ_FAILED, history_error.c_str()); + return last_error_code; + } + engine->redo_history.pop_back(); + push_history(engine->undo_history, std::move(current)); + set_error(WEB_ENGINE_OK, "ok"); + return WEB_ENGINE_OK; +} + +EMSCRIPTEN_KEEPALIVE int web_engine_get_scene_snapshot(const int handle, + const uint8_t **data, + uint32_t *length) +{ + EngineState *engine = find_engine(handle); + if (engine == nullptr) { + return last_error_code; + } + if (data == nullptr || length == nullptr) { + set_error(WEB_ENGINE_INVALID_ARGUMENT, "snapshot output is null"); + return last_error_code; + } + if (engine->scene_snapshot.empty()) { + const char *empty_snapshot = empty_scene_snapshot_json(); + *data = reinterpret_cast(empty_snapshot); + *length = static_cast(strlen(empty_snapshot)); + } + else { + *data = reinterpret_cast(engine->scene_snapshot.data()); + *length = static_cast(engine->scene_snapshot.size()); + } + set_error(WEB_ENGINE_OK, "ok"); + return WEB_ENGINE_OK; +} + +EMSCRIPTEN_KEEPALIVE int web_engine_get_scene_metadata(const int handle, + const uint8_t **data, + uint32_t *length) +{ + EngineState *engine = find_engine(handle); + if (engine == nullptr) return last_error_code; + if (data == nullptr || length == nullptr) { + set_error(WEB_ENGINE_INVALID_ARGUMENT, "metadata output is null"); + return last_error_code; + } + try { + rebuild_binary_scene(*engine); + } + catch (const std::exception &exception) { + set_error(WEB_ENGINE_INVALID_ARGUMENT, exception.what()); + return last_error_code; + } + *data = reinterpret_cast(engine->scene_metadata.data()); + *length = static_cast(engine->scene_metadata.size()); + set_error(WEB_ENGINE_OK, "ok"); + return WEB_ENGINE_OK; +} + +EMSCRIPTEN_KEEPALIVE int web_engine_get_scene_geometry(const int handle, + const uint8_t **data, + uint32_t *length) +{ + EngineState *engine = find_engine(handle); + if (engine == nullptr) return last_error_code; + if (data == nullptr || length == nullptr) { + set_error(WEB_ENGINE_INVALID_ARGUMENT, "geometry output is null"); + return last_error_code; + } + try { + rebuild_binary_scene(*engine); + } + catch (const std::exception &exception) { + set_error(WEB_ENGINE_INVALID_ARGUMENT, exception.what()); + return last_error_code; + } + *data = engine->scene_geometry.data(); + *length = static_cast(engine->scene_geometry.size()); + set_error(WEB_ENGINE_OK, "ok"); + return WEB_ENGINE_OK; +} + +EMSCRIPTEN_KEEPALIVE int web_engine_get_scene_delta(const int handle, + const uint8_t **data, + uint32_t *length) +{ + EngineState *engine = find_engine(handle); + if (engine == nullptr) return last_error_code; + if (data == nullptr || length == nullptr) { + set_error(WEB_ENGINE_INVALID_ARGUMENT, "delta output is null"); + return last_error_code; + } + if (engine->scene_delta.empty()) { + static const char empty_delta[] = + "{\"schemaVersion\":1,\"baseRevision\":0,\"nextRevision\":0}"; + *data = reinterpret_cast(empty_delta); + *length = sizeof(empty_delta) - 1; + } + else { + *data = reinterpret_cast(engine->scene_delta.data()); + *length = static_cast(engine->scene_delta.size()); + } + set_error(WEB_ENGINE_OK, "ok"); + return WEB_ENGINE_OK; +} + +EMSCRIPTEN_KEEPALIVE int web_engine_get_packed_asset(const int handle, + const uint8_t *asset_id, + const uint32_t asset_id_length, + const uint8_t **data, + uint32_t *length) +{ + EngineState *engine = find_engine(handle); + if (engine == nullptr) return last_error_code; + if (asset_id == nullptr || asset_id_length == 0 || data == nullptr || length == nullptr) { + set_error(WEB_ENGINE_INVALID_ARGUMENT, "packed asset request is invalid"); + return last_error_code; + } + const std::string id(reinterpret_cast(asset_id), asset_id_length); + const auto asset = engine->packed_assets.find(id); + if (asset == engine->packed_assets.end() || asset->second.empty()) { + *data = nullptr; + *length = 0; + set_error(WEB_ENGINE_NOT_IMPLEMENTED, "packed asset is unavailable"); + return last_error_code; + } + *data = asset->second.data(); + *length = static_cast(asset->second.size()); + set_error(WEB_ENGINE_OK, "ok"); + return WEB_ENGINE_OK; +} + +EMSCRIPTEN_KEEPALIVE int web_engine_evaluate_depsgraph(const int handle, + const uint8_t **data, + uint32_t *length) +{ + EngineState *engine = find_engine(handle); + if (engine == nullptr) return last_error_code; + if (data == nullptr || length == nullptr) { + set_error(WEB_ENGINE_INVALID_ARGUMENT, "depsgraph output is null"); + return last_error_code; + } + if (engine->blend_bytes.empty()) { + set_error(WEB_ENGINE_INVALID_ARGUMENT, "no blend document is open"); + return last_error_code; + } + int frame = 1; + try { + frame = json::parse(engine->scene_snapshot).value("frame", json::object()).value("current", 1); + } + catch (const std::exception &) { + set_error(WEB_ENGINE_INVALID_ARGUMENT, "scene frame state is invalid"); + return last_error_code; + } + std::vector authoritative_bytes; + const uint8_t *evaluation_bytes = reinterpret_cast(engine->blend_bytes.data()); + size_t evaluation_length = engine->blend_bytes.size(); + if (engine->authoritative_commands && engine->authoritative_dirty && + engine->authoritative_main != nullptr) { + std::string write_error; + if (!web_engine_blend_main_write(engine->authoritative_main, authoritative_bytes, write_error)) { + set_error(WEB_ENGINE_BLEND_WRITE_FAILED, write_error.c_str()); + return last_error_code; + } + evaluation_bytes = authoritative_bytes.data(); + evaluation_length = authoritative_bytes.size(); + } + const WebDepsgraphEvaluationResult evaluated = web_engine_evaluate_blender_depsgraph( + evaluation_bytes, evaluation_length, frame); + if (!evaluated.ok) { + set_error(WEB_ENGINE_NOT_IMPLEMENTED, evaluated.error.c_str()); + return last_error_code; + } + engine->depsgraph_report = evaluated.report; + *data = reinterpret_cast(engine->depsgraph_report.data()); + *length = static_cast(engine->depsgraph_report.size()); + set_error(WEB_ENGINE_OK, "ok"); + return WEB_ENGINE_OK; +} + +EMSCRIPTEN_KEEPALIVE int web_engine_save_blend(const int handle, + const uint8_t **data, + uint32_t *length) +{ + EngineState *engine = find_engine(handle); + if (engine == nullptr) { + return last_error_code; + } + if (data == nullptr || length == nullptr) { + set_error(WEB_ENGINE_INVALID_ARGUMENT, "save output is null"); + return last_error_code; + } + if (engine->blend_bytes.empty()) { + *data = nullptr; + *length = 0; + set_error(WEB_ENGINE_BLEND_WRITE_FAILED, "no blend document is open"); + return last_error_code; + } + if (!engine->authoritative_commands || engine->authoritative_main == nullptr) { + *data = nullptr; + *length = 0; + set_error(WEB_ENGINE_NOT_IMPLEMENTED, + "BLEND_WRITE_REQUIRES_MAIN_AUTHORITY: one or more edits are snapshot-only"); + return last_error_code; + } + if (!engine->authoritative_dirty) { + uint8_t *copy = static_cast(std::malloc(engine->blend_bytes.size())); + if (copy == nullptr) { + *data = nullptr; + *length = 0; + set_error(WEB_ENGINE_BLEND_WRITE_FAILED, "unable to allocate blend output"); + return last_error_code; + } + memcpy(copy, engine->blend_bytes.data(), engine->blend_bytes.size()); + *data = copy; + *length = static_cast(engine->blend_bytes.size()); + set_error(WEB_ENGINE_OK, "ok"); + return WEB_ENGINE_OK; + } + std::vector written; + std::string write_error; + if (!web_engine_blend_main_write(engine->authoritative_main, written, write_error)) { + *data = nullptr; + *length = 0; + set_error(WEB_ENGINE_BLEND_WRITE_FAILED, write_error.c_str()); + return last_error_code; + } + uint8_t *copy = static_cast(std::malloc(written.size())); + if (copy == nullptr) { + *data = nullptr; + *length = 0; + set_error(WEB_ENGINE_BLEND_WRITE_FAILED, "unable to allocate blend output"); + return last_error_code; + } + memcpy(copy, written.data(), written.size()); + *data = copy; + *length = static_cast(written.size()); + set_error(WEB_ENGINE_OK, "ok"); + return WEB_ENGINE_OK; +} + +EMSCRIPTEN_KEEPALIVE void web_engine_free_buffer(const uint8_t *data) +{ + std::free(const_cast(data)); +} + +EMSCRIPTEN_KEEPALIVE int web_engine_last_error_code(void) +{ + return last_error_code; +} + +EMSCRIPTEN_KEEPALIVE const char *web_engine_last_error_message(void) +{ + return last_error_message.c_str(); +} + +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp b/tests/golden/corrective/C0-002/staged/source-snapshot/files/blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp new file mode 100644 index 00000000..5bd4fd12 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp @@ -0,0 +1,4604 @@ +#include "web_engine_blend_reader.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "json.hpp" + +#include "BLI_endian_defines.h" +#include "BLI_filereader.h" +#include "BLI_string_utf8.h" +#include "BLI_utildefines.h" + +#include "BLO_core_bhead.hh" +#include "BLO_core_blend_header.hh" +#include "BLO_core_file_reader.hh" + +#include "DNA_genfile.h" +#include "DNA_action_types.h" +#include "DNA_anim_enums.h" +#include "DNA_armature_types.h" +#include "DNA_curve_enums.h" +#include "DNA_lattice_types.h" +#include "DNA_mask_types.h" +#include "DNA_modifier_types.h" +#include "DNA_node_types.h" +#include "DNA_sdna_types.h" +#include "DNA_sequence_types.h" +#include "DNA_screen_types.h" +#include "DNA_space_enums.h" +#include "DNA_workspace_types.h" + +namespace { + +using json = nlohmann::json; +using namespace blender; + +constexpr uint64_t MAX_BLEND_BLOCK_BYTES = UINT64_C(1024) * 1024 * 1024; +constexpr size_t MAX_NON_MESH_POINTS = 1000000; +constexpr size_t MAX_LATTICE_POINTS = 64 * 64 * 64; +constexpr size_t MAX_SCRIPT_SOURCE_BYTES = 1024 * 1024; + +uint32_t rotate_right(const uint32_t value, const uint32_t bits) +{ + return (value >> bits) | (value << (32 - bits)); +} + +std::string sha256_hex(const std::string &value) +{ + static constexpr std::array round_constants = { + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, + 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, + 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, + 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, + 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, + 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, + 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, + 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, + 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2}; + std::array digest = { + 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, + 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19}; + std::vector message(value.begin(), value.end()); + const uint64_t bit_length = uint64_t(message.size()) * 8; + message.push_back(0x80); + while (message.size() % 64 != 56) message.push_back(0); + for (int shift = 56; shift >= 0; shift -= 8) message.push_back(uint8_t(bit_length >> shift)); + for (size_t offset = 0; offset < message.size(); offset += 64) { + std::array words{}; + for (size_t index = 0; index < 16; index++) { + const size_t byte = offset + index * 4; + words[index] = uint32_t(message[byte]) << 24 | uint32_t(message[byte + 1]) << 16 | + uint32_t(message[byte + 2]) << 8 | uint32_t(message[byte + 3]); + } + for (size_t index = 16; index < words.size(); index++) { + const uint32_t s0 = rotate_right(words[index - 15], 7) ^ + rotate_right(words[index - 15], 18) ^ (words[index - 15] >> 3); + const uint32_t s1 = rotate_right(words[index - 2], 17) ^ + rotate_right(words[index - 2], 19) ^ (words[index - 2] >> 10); + words[index] = words[index - 16] + s0 + words[index - 7] + s1; + } + uint32_t a = digest[0], b = digest[1], c = digest[2], d = digest[3]; + uint32_t e = digest[4], f = digest[5], g = digest[6], h = digest[7]; + for (size_t index = 0; index < words.size(); index++) { + const uint32_t sum1 = rotate_right(e, 6) ^ rotate_right(e, 11) ^ rotate_right(e, 25); + const uint32_t choice = (e & f) ^ (~e & g); + const uint32_t temporary1 = h + sum1 + choice + round_constants[index] + words[index]; + const uint32_t sum0 = rotate_right(a, 2) ^ rotate_right(a, 13) ^ rotate_right(a, 22); + const uint32_t majority = (a & b) ^ (a & c) ^ (b & c); + const uint32_t temporary2 = sum0 + majority; + h = g; g = f; f = e; e = d + temporary1; + d = c; c = b; b = a; a = temporary1 + temporary2; + } + digest[0] += a; digest[1] += b; digest[2] += c; digest[3] += d; + digest[4] += e; digest[5] += f; digest[6] += g; digest[7] += h; + } + static constexpr char hex[] = "0123456789abcdef"; + std::string result(64, '0'); + for (size_t index = 0; index < digest.size(); index++) { + for (size_t nibble = 0; nibble < 8; nibble++) { + result[index * 8 + nibble] = hex[(digest[index] >> (28 - nibble * 4)) & 0xf]; + } + } + return result; +} + +struct FileReaderDeleter { + void operator()(FileReader *reader) const + { + if (reader != nullptr) { + reader->close(reader); + } + } +}; + +struct SDNADeleter { + void operator()(SDNA *sdna) const + { + if (sdna != nullptr) { + DNA_sdna_free(sdna); + } + } +}; + +struct BlendBlock { + BHead head{}; + uint64_t old_raw = 0; + std::vector bytes; + std::string type_name; +}; + +struct MemberInfo { + int offset = 0; + int size = 0; + short type_index = 0; + short member_index = 0; + std::string type_name; + std::string raw_name; +}; + +struct ElementRef { + const BlendBlock *block = nullptr; + size_t offset = 0; + std::string type_name; +}; + +struct IdRecord { + const BlendBlock *block = nullptr; + uint64_t pointer = 0; + std::string type_name; + std::string name; + std::string id; +}; + +struct ParsedBlend { + BlenderHeader header{}; + std::string compression; + std::unique_ptr sdna; + std::vector blocks; + std::unordered_map elements; +}; + +std::string normalized_member_name(const char *raw_name) +{ + std::string result; + if (raw_name == nullptr) { + return result; + } + for (const char *character = raw_name; *character != '\0' && *character != '['; character++) { + const unsigned char value = static_cast(*character); + if ((*character >= 'a' && *character <= 'z') || + (*character >= 'A' && *character <= 'Z') || + (*character >= '0' && *character <= '9') || *character == '_') + { + result.push_back(char(value)); + } + } + return result; +} + +std::optional find_member(const SDNA &sdna, + const std::string &struct_name, + const std::string &member_name) +{ + const int struct_index = DNA_struct_find_index_without_alias(&sdna, struct_name.c_str()); + if (struct_index < 0 || struct_index >= sdna.structs_num) { + return std::nullopt; + } + const SDNA_Struct *structure = sdna.structs[struct_index]; + for (int index = 0; index < structure->members_num; index++) { + const SDNA_StructMember &member = structure->members[index]; + const int size = DNA_struct_member_size(&sdna, member.type_index, member.member_index); + const char *raw_name = sdna.members[member.member_index]; + const char *alias_name = sdna.alias.members != nullptr ? + sdna.alias.members[member.member_index] : + raw_name; + const bool matches_raw_name = normalized_member_name(raw_name) == member_name; + const bool matches_alias_name = normalized_member_name(alias_name) == member_name; + if (matches_raw_name || matches_alias_name) { + const char *type_name = sdna.types[member.type_index]; + MemberInfo result; + result.offset = DNA_struct_member_offset_by_name_without_alias( + &sdna, struct_name.c_str(), type_name, raw_name); + if (result.offset < 0) { + return std::nullopt; + } + result.size = size; + result.type_index = member.type_index; + result.member_index = member.member_index; + result.type_name = type_name; + result.raw_name = raw_name; + return result; + } + } + return std::nullopt; +} + +bool bytes_available(const ElementRef &element, const MemberInfo &member, const size_t size) +{ + if (element.block == nullptr || member.offset < 0) { + return false; + } + const size_t start = element.offset + size_t(member.offset); + return start <= element.block->bytes.size() && + size <= element.block->bytes.size() - start; +} + +template +std::optional read_value(const SDNA &sdna, + const ElementRef &element, + const std::string &member_name) +{ + const std::optional member = find_member(sdna, element.type_name, member_name); + if (!member || member->size < int(sizeof(T)) || !bytes_available(element, *member, sizeof(T))) { + return std::nullopt; + } + T value{}; + memcpy(&value, element.block->bytes.data() + element.offset + size_t(member->offset), sizeof(T)); + return value; +} + +std::optional read_integer(const SDNA &sdna, + const ElementRef &element, + const std::string &member_name) +{ + const std::optional member = find_member(sdna, element.type_name, member_name); + if (!member || !bytes_available(element, *member, size_t(member->size))) { + return std::nullopt; + } + const uint8_t *data = element.block->bytes.data() + element.offset + size_t(member->offset); + switch (member->size) { + case 1: { + int8_t value; + memcpy(&value, data, sizeof(value)); + return value; + } + case 2: { + int16_t value; + memcpy(&value, data, sizeof(value)); + return value; + } + case 4: { + int32_t value; + memcpy(&value, data, sizeof(value)); + return value; + } + case 8: { + int64_t value; + memcpy(&value, data, sizeof(value)); + return value; + } + default: + return std::nullopt; + } +} + +std::optional read_integer_alias(const SDNA &sdna, + const ElementRef &element, + std::initializer_list member_names) +{ + for (const char *member_name : member_names) { + if (const std::optional value = read_integer(sdna, element, member_name)) { + return value; + } + } + return std::nullopt; +} + +std::optional read_float(const SDNA &sdna, + const ElementRef &element, + const std::string &member_name) +{ + return read_value(sdna, element, member_name); +} + +std::vector read_float_array(const SDNA &sdna, + const ElementRef &element, + const std::string &member_name, + const size_t maximum_values) +{ + const std::optional member = find_member(sdna, element.type_name, member_name); + if (!member || member->size < int(sizeof(float))) { + return {}; + } + const size_t value_count = std::min(maximum_values, size_t(member->size) / sizeof(float)); + if (!bytes_available(element, *member, value_count * sizeof(float))) { + return {}; + } + std::vector result(value_count); + memcpy(result.data(), + element.block->bytes.data() + element.offset + size_t(member->offset), + value_count * sizeof(float)); + for (float &value : result) { + if (!std::isfinite(value)) { + value = 0.0f; + } + } + return result; +} + +std::vector read_byte_array(const SDNA &sdna, + const ElementRef &element, + const std::string &member_name, + const size_t maximum_values) +{ + const std::optional member = find_member(sdna, element.type_name, member_name); + if (!member || member->size <= 0) return {}; + const size_t value_count = std::min(maximum_values, size_t(member->size)); + if (!bytes_available(element, *member, value_count)) return {}; + const uint8_t *data = element.block->bytes.data() + element.offset + size_t(member->offset); + std::vector result; + result.reserve(value_count); + for (size_t index = 0; index < value_count; index++) result.push_back(int(data[index])); + return result; +} + +std::string read_string(const SDNA &sdna, + const ElementRef &element, + const std::string &member_name) +{ + const std::optional member = find_member(sdna, element.type_name, member_name); + if (!member || member->size <= 0 || !bytes_available(element, *member, size_t(member->size))) { + return {}; + } + const char *data = reinterpret_cast(element.block->bytes.data() + element.offset + + size_t(member->offset)); + const size_t length = strnlen(data, size_t(member->size)); + return std::string(data, length); +} + +uint64_t block_pointer(const BlendBlock &block) +{ + return block.old_raw != 0 ? block.old_raw : uint64_t(reinterpret_cast(block.head.old)); +} + +std::optional read_pointer(const SDNA &sdna, + const ElementRef &element, + const std::string &member_name) +{ + const std::optional member = find_member(sdna, element.type_name, member_name); + if (!member || member->raw_name.find('*') == std::string::npos || + !bytes_available(element, *member, size_t(sdna.pointer_size))) + { + return std::nullopt; + } + uint64_t value = 0; + memcpy(&value, + element.block->bytes.data() + element.offset + size_t(member->offset), + size_t(sdna.pointer_size)); + return value; +} + +std::optional read_pointer_alias(const SDNA &sdna, + const ElementRef &element, + std::initializer_list member_names) +{ + for (const char *member_name : member_names) { + if (const std::optional value = read_pointer(sdna, element, member_name)) { + return value; + } + } + return std::nullopt; +} + +std::optional embedded_element(const SDNA &sdna, + const ElementRef &element, + const std::string &member_name) +{ + const std::optional member = find_member(sdna, element.type_name, member_name); + if (!member || member->raw_name.find('*') != std::string::npos || + !bytes_available(element, *member, size_t(member->size))) + { + return std::nullopt; + } + return ElementRef{element.block, element.offset + size_t(member->offset), member->type_name}; +} + +std::string read_id_name(const SDNA &sdna, const ElementRef &element) +{ + const std::optional id = embedded_element(sdna, element, "id"); + if (!id) { + return {}; + } + std::string name = read_string(sdna, *id, "name"); + if (name.size() >= 2) { + name.erase(0, 2); + } + return name; +} + +std::string compression_name(const uint8_t *data, const uint32_t length) +{ + if (length >= 4 && data[0] == 0x28 && data[1] == 0xb5 && data[2] == 0x2f && data[3] == 0xfd) { + return "zstd"; + } + if (length >= 2 && data[0] == 0x1f && data[1] == 0x8b) { + return "gzip"; + } + return "none"; +} + +bool read_blend(const uint8_t *data, + const uint32_t length, + ParsedBlend &result, + std::string &error) +{ + result.compression = compression_name(data, length); + std::unique_ptr reader( + BLO_file_reader_uncompressed_from_memory(data, int(length))); + if (!reader) { + error = "Input is not an uncompressed, gzip, or zstd Blender file"; + return false; + } + + BlenderHeaderVariant header_result = BLO_readfile_blender_header_decode(reader.get()); + const BlenderHeader *header = std::get_if(&header_result); + if (header == nullptr) { + error = std::holds_alternative(header_result) ? + "Unsupported Blender file header" : + "Invalid Blender file header"; + return false; + } + if (header->endian != L_ENDIAN) { + error = "Big-endian Blender files are not supported by WebEngine"; + return false; + } + result.header = *header; + + std::vector dna_bytes; + bool found_end = false; + while (!found_end) { + uint64_t old_raw = 0; + const std::optional head = BLO_readfile_read_bhead_with_raw(reader.get(), header->bhead_type(), &old_raw); + if (!head) { + error = "Unexpected end of Blender block stream"; + return false; + } + if (head->code == BLO_CODE_ENDB) { + found_end = true; + break; + } + if (head->len < 0 || uint64_t(head->len) > MAX_BLEND_BLOCK_BYTES || + uint64_t(head->len) > size_t(std::numeric_limits::max())) + { + error = "Blender block exceeds the WebEngine size limit"; + return false; + } + BlendBlock block; + block.head = *head; + block.old_raw = old_raw; + block.bytes.resize(size_t(head->len)); + if (!block.bytes.empty() && + reader->read(reader.get(), block.bytes.data(), block.bytes.size()) != int64_t(block.bytes.size())) + { + error = "Truncated Blender block payload"; + return false; + } + if (head->code == BLO_CODE_DNA1) { + dna_bytes = block.bytes; + } + result.blocks.push_back(std::move(block)); + } + + if (dna_bytes.empty()) { + error = "Blender file has no DNA1 schema block"; + return false; + } + const char *dna_error = nullptr; + result.sdna.reset(DNA_sdna_from_data( + dna_bytes.data(), int(dna_bytes.size()), true, false, &dna_error)); + if (!result.sdna) { + error = dna_error != nullptr ? dna_error : "Unable to decode Blender SDNA"; + return false; + } + DNA_sdna_alias_data_ensure(result.sdna.get()); + + for (BlendBlock &block : result.blocks) { + if (block.head.SDNAnr < 0 || block.head.SDNAnr >= result.sdna->structs_num) { + continue; + } + const SDNA_Struct *structure = result.sdna->structs[block.head.SDNAnr]; + block.type_name = result.sdna->types[structure->type_index]; + const int struct_size = DNA_struct_size(result.sdna.get(), block.head.SDNAnr); + if (struct_size <= 0 || block.head.nr <= 0 || + uint64_t(struct_size) * uint64_t(block.head.nr) > block.bytes.size()) + { + continue; + } + const uint64_t base_pointer = block_pointer(block); + for (int64_t index = 0; index < block.head.nr; index++) { + const uint64_t byte_offset = uint64_t(index) * uint64_t(struct_size); + const uint64_t element_pointer = base_pointer + byte_offset; + result.elements.emplace(element_pointer, + ElementRef{&block, size_t(byte_offset), block.type_name}); + } + } + return true; +} + +std::string id_prefix(const std::string &type_name) +{ + if (type_name == "Object") return "object"; + if (type_name == "Scene") return "scene"; + if (type_name == "Mesh") return "mesh"; + if (type_name == "Material") return "material"; + if (type_name == "Image") return "image"; + if (type_name == "Camera") return "camera"; + if (type_name == "Light") return "light"; + if (type_name == "Lamp") return "light"; + if (type_name == "World") return "world"; + if (type_name == "Collection") return "collection"; + if (type_name == "Group") return "collection"; + if (type_name == "bArmature") return "armature"; + if (type_name == "Curve") return "curve"; + if (type_name == "MetaBall") return "metaball"; + if (type_name == "PointCloud") return "pointcloud"; + if (type_name == "Curves") return "curves"; + if (type_name == "Volume") return "volume"; + if (type_name == "GreasePencil") return "grease-pencil"; + if (type_name == "Text") return "text"; + if (type_name == "VFont") return "vfont"; + if (type_name == "Mask") return "mask"; + if (type_name == "Library") return "library"; + if (type_name == "WorkSpace") return "workspace"; + if (type_name == "bScreen") return "screen"; + if (type_name == "Brush") return "brush"; + if (type_name == "FreestyleLineStyle") return "line-style"; + if (type_name == "Lattice") return "lattice"; + if (type_name == "ParticleSettings") return "particle-settings"; + if (type_name == "bSound") return "sound"; + if (type_name == "Speaker") return "speaker"; + if (type_name == "Tex") return "texture"; + if (type_name == "bAction" || type_name == "Action") return "action"; + return "datablock"; +} + +bool is_exported_id_type(const std::string &type_name) +{ + return type_name == "Object" || type_name == "Scene" || type_name == "Mesh" || + type_name == "Material" || type_name == "Camera" || type_name == "Light" || + type_name == "Image" || + type_name == "Lamp" || type_name == "Collection" || type_name == "Group" || + type_name == "bArmature" || type_name == "World" || type_name == "Curve" || + type_name == "MetaBall" || type_name == "PointCloud" || type_name == "Curves" || + type_name == "Volume" || type_name == "GreasePencil" || type_name == "Text" || + type_name == "VFont" || type_name == "Mask" || type_name == "Library" || + type_name == "WorkSpace" || type_name == "bScreen" || type_name == "Brush" || + type_name == "FreestyleLineStyle" || type_name == "Lattice" || + type_name == "ParticleSettings" || type_name == "bSound" || type_name == "Speaker" || type_name == "Tex" || + type_name == "bAction" || type_name == "Action"; +} + +std::string unique_id(const std::string &prefix, + const std::string &name, + std::unordered_set &used_ids) +{ + const std::string base = prefix + ":" + (name.empty() ? "unnamed" : name); + std::string id = base; + int suffix = 2; + while (!used_ids.insert(id).second) { + id = base + "#" + std::to_string(suffix++); + } + return id; +} + +std::vector collect_ids(const ParsedBlend &blend, + std::unordered_map &ids_by_pointer) +{ + std::vector records; + std::unordered_set used_ids; + for (const BlendBlock &block : blend.blocks) { + if (!is_exported_id_type(block.type_name)) { + continue; + } + const ElementRef element{&block, 0, block.type_name}; + IdRecord record; + record.block = █ + record.pointer = block_pointer(block); + record.type_name = block.type_name; + record.name = read_id_name(*blend.sdna, element); + record.id = unique_id(id_prefix(record.type_name), record.name, used_ids); + ids_by_pointer[record.pointer] = record.id; + records.push_back(std::move(record)); + } + return records; +} + +std::string object_type_name(const int64_t type) +{ + switch (type) { + case 0: return "EMPTY"; + case 1: return "MESH"; + case 2: return "CURVE"; + case 3: return "SURFACE"; + case 4: return "FONT"; + case 5: return "METABALL"; + case 10: return "LIGHT"; + case 11: return "CAMERA"; + case 12: return "SPEAKER"; + case 13: return "LIGHT_PROBE"; + case 22: return "LATTICE"; + case 25: return "ARMATURE"; + case 27: return "CURVES"; + case 28: return "POINT_CLOUD"; + case 29: return "VOLUME"; + case 30: return "GREASE_PENCIL"; + default: return "UNKNOWN"; + } +} + +const char *lattice_interpolation_name(const int64_t type) +{ + switch (type) { + case KEY_LINEAR: return "KEY_LINEAR"; + case KEY_CARDINAL: return "KEY_CARDINAL"; + case KEY_BSPLINE: return "KEY_BSPLINE"; + case KEY_CATMULL_ROM: return "KEY_CATMULL_ROM"; + default: return "UNKNOWN"; + } +} + +std::array trs_matrix(const std::vector &location, + const std::vector &rotation, + const std::vector &scale) +{ + const float x = rotation.size() > 0 ? rotation[0] : 0.0f; + const float y = rotation.size() > 1 ? rotation[1] : 0.0f; + const float z = rotation.size() > 2 ? rotation[2] : 0.0f; + const float sx = scale.size() > 0 ? scale[0] : 1.0f; + const float sy = scale.size() > 1 ? scale[1] : 1.0f; + const float sz = scale.size() > 2 ? scale[2] : 1.0f; + const float cx = std::cos(x), sxr = std::sin(x); + const float cy = std::cos(y), syr = std::sin(y); + const float cz = std::cos(z), szr = std::sin(z); + + const float m00 = cy * cz; + const float m01 = sxr * syr * cz - cx * szr; + const float m02 = cx * syr * cz + sxr * szr; + const float m10 = cy * szr; + const float m11 = sxr * syr * szr + cx * cz; + const float m12 = cx * syr * szr - sxr * cz; + const float m20 = -syr; + const float m21 = sxr * cy; + const float m22 = cx * cy; + + return {m00 * sx, + m10 * sx, + m20 * sx, + 0.0f, + m01 * sy, + m11 * sy, + m21 * sy, + 0.0f, + m02 * sz, + m12 * sz, + m22 * sz, + 0.0f, + location.size() > 0 ? location[0] : 0.0f, + location.size() > 1 ? location[1] : 0.0f, + location.size() > 2 ? location[2] : 0.0f, + 1.0f}; +} + +json float_array_or(const std::vector &values, const std::array &fallback) +{ + if (values.size() >= 3) { + return json::array({values[0], values[1], values[2]}); + } + return json::array({fallback[0], fallback[1], fallback[2]}); +} + +json float4_array_or(const std::vector &values, const std::array &fallback) +{ + if (values.size() >= 4) { + return json::array({values[0], values[1], values[2], values[3]}); + } + return json::array({fallback[0], fallback[1], fallback[2], fallback[3]}); +} + +std::optional element_for_pointer(const ParsedBlend &blend, const uint64_t pointer) +{ + const auto found = blend.elements.find(pointer); + return found == blend.elements.end() ? std::nullopt : std::optional(found->second); +} + +std::optional element_for_pointer_after(const ParsedBlend &blend, + const uint64_t pointer, + const BlendBlock *anchor, + const std::string &expected_type = {}) +{ + size_t anchor_index = 0; + while (anchor_index < blend.blocks.size() && &blend.blocks[anchor_index] != anchor) anchor_index++; + if (anchor_index == blend.blocks.size()) return element_for_pointer(blend, pointer); + for (size_t block_index = anchor_index + 1; block_index < blend.blocks.size(); block_index++) { + const BlendBlock &block = blend.blocks[block_index]; + if (!expected_type.empty() && block.type_name != expected_type) continue; + if (block.head.SDNAnr < 0 || block.head.SDNAnr >= blend.sdna->structs_num || + block.head.nr <= 0) { + continue; + } + const int struct_size = DNA_struct_size(blend.sdna.get(), block.head.SDNAnr); + const uint64_t base = block_pointer(block); + const uint64_t byte_span = struct_size > 0 ? uint64_t(struct_size) * uint64_t(block.head.nr) : 0; + if (struct_size <= 0 || pointer < base || pointer >= base + byte_span) continue; + const uint64_t byte_offset = pointer - base; + if (byte_offset % uint64_t(struct_size) != 0 || byte_offset >= block.bytes.size()) continue; + return ElementRef{&block, size_t(byte_offset), block.type_name}; + } + return element_for_pointer(blend, pointer); +} + +std::vector linked_list_elements(const ParsedBlend &blend, + const ElementRef &owner, + const std::string &list_member) +{ + std::vector result; + const std::optional list = embedded_element(*blend.sdna, owner, list_member); + if (!list) return result; + std::optional current = read_pointer(*blend.sdna, *list, "first"); + std::unordered_set visited; + while (current && *current != 0 && visited.insert(*current).second && visited.size() < 100000) { + const std::optional element = element_for_pointer(blend, *current); + if (!element) break; + result.push_back(*element); + current = read_pointer(*blend.sdna, *element, "next"); + if (!current) { + if (const std::optional base = embedded_element(*blend.sdna, *element, "modifier")) { + current = read_pointer(*blend.sdna, *base, "next"); + } + } + } + return result; +} + +std::vector node_socket_default_values(const ParsedBlend &blend, const ElementRef &socket) +{ + const std::optional default_pointer = read_pointer(*blend.sdna, socket, "default_value"); + if (!default_pointer) return {}; + const std::optional default_value = element_for_pointer(blend, *default_pointer); + if (!default_value) return {}; + return read_float_array(*blend.sdna, *default_value, "value", 4); +} + +std::optional node_socket_by_identifier(const ParsedBlend &blend, + const ElementRef &node, + const std::string &identifier) +{ + for (const ElementRef &socket : linked_list_elements(blend, node, "inputs")) { + std::string socket_identifier = read_string(*blend.sdna, socket, "identifier"); + if (socket_identifier.empty()) socket_identifier = read_string(*blend.sdna, socket, "name"); + if (socket_identifier == identifier) return socket; + } + return std::nullopt; +} + +std::optional node_socket_default_element(const ParsedBlend &blend, + const ElementRef &node, + const std::string &identifier) +{ + const std::optional socket = node_socket_by_identifier(blend, node, identifier); + if (!socket) return std::nullopt; + const std::optional pointer = read_pointer(*blend.sdna, *socket, "default_value"); + return pointer && *pointer != 0 ? element_for_pointer(blend, *pointer) : std::nullopt; +} + +std::optional raw_array_element(const ParsedBlend &blend, + uint64_t pointer, + const std::string &type_name, + size_t index); + +std::string node_element_id(const ParsedBlend &blend, const ElementRef &node) +{ + const int64_t identifier = read_integer(*blend.sdna, node, "identifier").value_or(0); + return "compositor-node:" + std::to_string(identifier); +} + +std::optional compositor_graph_from_scene(const ParsedBlend &blend, + const ElementRef &scene, + const std::string &scene_id, + const std::string &scene_name) +{ + std::optional node_tree_pointer = read_pointer( + *blend.sdna, scene, "compositing_node_group"); + if (!node_tree_pointer || *node_tree_pointer == 0) { + node_tree_pointer = read_pointer(*blend.sdna, scene, "nodetree"); + } + if (!node_tree_pointer || *node_tree_pointer == 0) return std::nullopt; + const std::optional node_tree = element_for_pointer(blend, *node_tree_pointer); + if (!node_tree) return json{{"status", "BLOCKED"}}; + + const std::vector source_nodes = linked_list_elements(blend, *node_tree, "nodes"); + const std::vector source_links = linked_list_elements(blend, *node_tree, "links"); + if (source_nodes.empty() || source_nodes.size() > 4096 || source_links.size() > 16384) { + return json{{"status", "BLOCKED"}}; + } + + json nodes = json::array(); + json links = json::array(); + std::unordered_map node_ids; + std::unordered_set used_node_ids; + std::string output_node_id; + std::string fallback_output_node_id; + + for (const ElementRef &node : source_nodes) { + if (node.block == nullptr) return json{{"status", "BLOCKED"}}; + const uint64_t pointer = block_pointer(*node.block) + node.offset; + std::string node_id = node_element_id(blend, node); + if (!used_node_ids.insert(node_id).second) node_id += ":" + std::to_string(pointer); + if (node_id.size() > 256) return json{{"status", "BLOCKED"}}; + node_ids[pointer] = node_id; + + const std::string blender_type = read_string(*blend.sdna, node, "idname"); + const std::string node_name = read_string(*blend.sdna, node, "name"); + json node_ir = {{"id", node_id}, + {"type", "UNSUPPORTED"}, + {"name", (node_name.empty() ? blender_type : node_name).substr(0, 256)}, + {"blenderType", blender_type.empty() ? "UNKNOWN" : blender_type.substr(0, 256)}, + {"properties", json::object()}}; + if (blender_type == "CompositorNodeComposite" || blender_type == "NodeGroupOutput") { + node_ir["type"] = "COMPOSITE"; + node_ir.erase("blenderType"); + fallback_output_node_id = node_id; + if ((read_integer(*blend.sdna, node, "flag").value_or(0) & NODE_DO_OUTPUT) != 0) { + output_node_id = node_id; + } + } + else if (blender_type == "CompositorNodeViewer") { + node_ir["type"] = "VIEWER"; + node_ir.erase("blenderType"); + } + else if (blender_type == "CompositorNodeRGB") { + const std::vector outputs = linked_list_elements(blend, node, "outputs"); + const std::vector values = outputs.empty() ? std::vector() : + node_socket_default_values(blend, outputs.front()); + if (values.size() >= 4 && std::all_of(values.begin(), values.begin() + 4, [](const float value) { + return std::isfinite(value) && value >= -65504.0f && value <= 65504.0f; + })) + { + node_ir["type"] = "CONSTANT_COLOR"; + node_ir.erase("blenderType"); + node_ir["properties"] = {{"color", {values[0], values[1], values[2], values[3]}}}; + } + } + else if (blender_type == "CompositorNodeExposure") { + const std::optional exposure = node_socket_default_element( + blend, node, "Exposure"); + const std::optional value = exposure ? read_float(*blend.sdna, *exposure, "value") : + std::nullopt; + if (value && std::isfinite(*value) && *value >= -20.0f && *value <= 20.0f) { + node_ir["type"] = "EXPOSURE"; + node_ir.erase("blenderType"); + node_ir["properties"] = {{"exposure", *value}}; + } + } + else if (blender_type == "CompositorNodeInvert") { + const std::optional factor = node_socket_default_element(blend, node, "Fac"); + const std::optional invert_color = node_socket_default_element( + blend, node, "Invert Color"); + const std::optional invert_alpha = node_socket_default_element( + blend, node, "Invert Alpha"); + const std::optional factor_value = factor ? read_float(*blend.sdna, *factor, "value") : + std::nullopt; + const std::optional color_value = invert_color ? + read_integer(*blend.sdna, *invert_color, "value") : std::nullopt; + const std::optional alpha_value = invert_alpha ? + read_integer(*blend.sdna, *invert_alpha, "value") : std::nullopt; + if (factor_value && std::abs(*factor_value - 1.0f) <= 1e-6f && color_value == 1 && + alpha_value == 0) + { + node_ir["type"] = "INVERT"; + node_ir.erase("blenderType"); + } + } + nodes.push_back(std::move(node_ir)); + } + if (output_node_id.empty()) output_node_id = fallback_output_node_id; + if (output_node_id.empty()) return json{{"status", "BLOCKED"}}; + + std::unordered_set destinations; + for (const ElementRef &link : source_links) { + if ((read_integer(*blend.sdna, link, "flag").value_or(0) & NODE_LINK_MUTED) != 0) continue; + const std::optional from_node_pointer = read_pointer(*blend.sdna, link, "fromnode"); + const std::optional to_node_pointer = read_pointer(*blend.sdna, link, "tonode"); + const std::optional from_socket_pointer = read_pointer(*blend.sdna, link, "fromsock"); + const std::optional to_socket_pointer = read_pointer(*blend.sdna, link, "tosock"); + if (!from_node_pointer || !to_node_pointer || !from_socket_pointer || !to_socket_pointer) continue; + const auto from_id = node_ids.find(*from_node_pointer); + const auto to_id = node_ids.find(*to_node_pointer); + const std::optional from_socket = element_for_pointer(blend, *from_socket_pointer); + const std::optional to_socket = element_for_pointer(blend, *to_socket_pointer); + if (from_id == node_ids.end() || to_id == node_ids.end() || !from_socket || !to_socket) continue; + std::string from_socket_name = read_string(*blend.sdna, *from_socket, "identifier"); + std::string to_socket_name = read_string(*blend.sdna, *to_socket, "identifier"); + if (from_socket_name.empty()) from_socket_name = read_string(*blend.sdna, *from_socket, "name"); + if (to_socket_name.empty()) to_socket_name = read_string(*blend.sdna, *to_socket, "name"); + const std::optional to_node = element_for_pointer(blend, *to_node_pointer); + const std::string to_blender_type = to_node ? read_string(*blend.sdna, *to_node, "idname") : + std::string(); + if (to_blender_type == "CompositorNodeInvert" && to_socket_name == "Color") { + to_socket_name = "Image"; + } + else if ((to_blender_type == "NodeGroupOutput" || + to_blender_type == "CompositorNodeComposite") && + read_string(*blend.sdna, *to_socket, "name") == "Image") + { + to_socket_name = "Image"; + } + if (from_socket_name.empty() || to_socket_name.empty() || from_socket_name.size() > 256 || + to_socket_name.size() > 256) + { + return json{{"status", "BLOCKED"}}; + } + const std::string destination = to_id->second + std::string(1, '\0') + to_socket_name; + if (!destinations.insert(destination).second) return json{{"status", "BLOCKED"}}; + links.push_back({{"fromNodeId", from_id->second}, + {"fromSocket", from_socket_name}, + {"toNodeId", to_id->second}, + {"toSocket", to_socket_name}}); + } + + return json{{"status", "AVAILABLE"}, + {"graph", + {{"schemaVersion", 1}, + {"id", "compositor:" + scene_id}, + {"name", scene_name.empty() ? "Compositor" : scene_name + " Compositor"}, + {"outputNodeId", output_node_id}, + {"nodes", std::move(nodes)}, + {"links", std::move(links)}, + {"resources", json::array()}}}}; +} + +std::optional sequencer_timeline_from_scene(const ParsedBlend &blend, + const ElementRef &scene, + const std::string &scene_id, + const uint64_t revision, + const int frame_start, + const int frame_end, + const int fps, + const float fps_base, + const std::unordered_map &ids_by_pointer) +{ + const std::optional editing_pointer = read_pointer(*blend.sdna, scene, "ed"); + if (!editing_pointer || *editing_pointer == 0) return std::nullopt; + const std::optional editing = element_for_pointer(blend, *editing_pointer); + if (!editing) return json{{"status", "BLOCKED"}}; + + const std::vector top_level = linked_list_elements(blend, *editing, "seqbase"); + if (top_level.size() > 100000 || fps <= 0 || !std::isfinite(fps_base) || fps_base <= 0.0f) { + return json{{"status", "BLOCKED"}}; + } + json strips = json::array(); + std::unordered_map strip_ids; + std::unordered_set used_strip_ids; + size_t total_strip_count = 0; + auto reject = [](const std::string &) { return false; }; + auto strip_name = [&](const ElementRef &strip) { + const std::string stored = read_string(*blend.sdna, strip, "name"); + return stored.rfind("SQ", 0) == 0 ? stored.substr(2) : stored; + }; + + std::function &)> collect = [&](const std::vector &items) { + for (const ElementRef &strip : items) { + if (strip.block == nullptr || ++total_strip_count > 100000) return reject("strip-budget"); + const uint64_t pointer = block_pointer(*strip.block) + strip.offset; + const std::string name = strip_name(strip); + std::string id = "strip:" + (name.empty() ? std::to_string(pointer) : name); + if (!used_strip_ids.insert(id).second) id += ":" + std::to_string(pointer); + if (id.size() > 256) return reject("strip-id"); + strip_ids[pointer] = id; + const int64_t strip_type = read_integer(*blend.sdna, strip, "type").value_or(-1); + if (strip_type == STRIP_TYPE_META) { + const std::vector children = linked_list_elements(blend, strip, "seqbase"); + if (!collect(children)) return reject("meta-collect"); + } + } + return true; + }; + if (!collect(top_level)) return json{{"status", "BLOCKED"}}; + + std::function &)> emit = [&](const std::vector &items) { + for (const ElementRef &strip : items) { + const uint64_t pointer = block_pointer(*strip.block) + strip.offset; + const auto id_it = strip_ids.find(pointer); + if (id_it == strip_ids.end()) return reject("strip-identity"); + const int64_t strip_type = read_integer(*blend.sdna, strip, "type").value_or(-1); + const char *type = strip_type == STRIP_TYPE_SCENE ? "SCENE" : + strip_type == STRIP_TYPE_MOVIE ? "MOVIE" : + strip_type == STRIP_TYPE_IMAGE ? "IMAGE" : + strip_type == STRIP_TYPE_SOUND ? "SOUND" : + strip_type == STRIP_TYPE_META ? "META" : + ELEM(strip_type, + STRIP_TYPE_CROSS, + STRIP_TYPE_GAMCROSS, + STRIP_TYPE_ADD, + STRIP_TYPE_MUL, + STRIP_TYPE_TRANSFORM_LEGACY, + STRIP_TYPE_COLOR) ? + "EFFECT" : + nullptr; + if (type == nullptr) return reject("strip-type:" + std::to_string(strip_type)); + const int channel = int(read_integer(*blend.sdna, strip, "channel").value_or(0)); + const int length = int(read_integer(*blend.sdna, strip, "len").value_or(0)); + const float content_start = read_float(*blend.sdna, strip, "start").value_or(0.0f); + const float start_offset = read_float(*blend.sdna, strip, "startofs").value_or(0.0f); + const float end_offset = read_float(*blend.sdna, strip, "endofs").value_or(0.0f); + const int display_start = int(std::round(content_start + start_offset)); + const int display_end = int(std::round(content_start + float(length) - end_offset)); + const int animation_start_offset = int( + read_integer(*blend.sdna, strip, "anim_startofs").value_or(0)); + const int animation_end_offset = int( + read_integer(*blend.sdna, strip, "anim_endofs").value_or(0)); + const float speed_factor = read_float(*blend.sdna, strip, "speed_factor").value_or(1.0f); + const int64_t flags = read_integer(*blend.sdna, strip, "flag").value_or(0); + if (channel < 1 || channel > 128 || display_end <= display_start || length < 0 || + !std::isfinite(speed_factor)) + { + return reject("strip-range:" + id_it->second + ":" + std::to_string(channel) + ":" + + std::to_string(display_start) + ":" + std::to_string(display_end) + ":" + + std::to_string(length)); + } + const int source_start = animation_start_offset; + const int source_end = std::max(source_start, length - animation_end_offset); + const float speed = speed_factor > 0.0f ? std::min(speed_factor, 1000.0f) : 1.0f; + json result = {{"id", id_it->second}, + {"name", strip_name(strip)}, + {"type", type}, + {"channel", channel}, + {"frameStart", display_start}, + {"frameEnd", display_end}, + {"sourceStart", source_start}, + {"sourceEnd", source_end}, + {"speed", speed}, + {"muted", (flags & SEQ_MUTE) != 0}, + {"locked", (flags & SEQ_LOCK) != 0}}; + + if (strip_type == STRIP_TYPE_SCENE) { + const std::optional source_scene = read_pointer(*blend.sdna, strip, "scene"); + const auto source_id = source_scene ? ids_by_pointer.find(*source_scene) : ids_by_pointer.end(); + if (source_id == ids_by_pointer.end()) return reject("scene-source"); + result["sourceId"] = source_id->second; + } + else if (ELEM(strip_type, STRIP_TYPE_MOVIE, STRIP_TYPE_IMAGE)) { + const std::optional data_pointer = read_pointer(*blend.sdna, strip, "data"); + const std::optional data = data_pointer ? element_for_pointer(blend, *data_pointer) : + std::nullopt; + if (!data) return reject("media-data"); + std::string path = read_string(*blend.sdna, *data, "dirpath"); + const std::optional element_pointer = read_pointer(*blend.sdna, *data, "stripdata"); + const std::optional source_element = element_pointer ? + element_for_pointer(blend, *element_pointer) : + std::nullopt; + if (source_element) path += read_string(*blend.sdna, *source_element, "filename"); + if (path.rfind("//", 0) != 0 || path.size() <= 2 || path.size() > 2050) return reject("media-path:" + path); + result["sourcePath"] = path; + } + else if (strip_type == STRIP_TYPE_SOUND) { + const std::optional sound_pointer = read_pointer(*blend.sdna, strip, "sound"); + const std::optional sound = sound_pointer ? element_for_pointer(blend, *sound_pointer) : + std::nullopt; + if (!sound) return reject("sound-data"); + const std::string path = read_string(*blend.sdna, *sound, "filepath"); + if (path.rfind("//", 0) != 0 || path.size() <= 2 || path.size() > 2050) return reject("sound-path:" + path); + result["sourcePath"] = path; + } + else if (strip_type == STRIP_TYPE_META) { + const std::vector children = linked_list_elements(blend, strip, "seqbase"); + json child_ids = json::array(); + for (const ElementRef &child : children) { + const uint64_t child_pointer = block_pointer(*child.block) + child.offset; + const auto child_id = strip_ids.find(child_pointer); + if (child_id == strip_ids.end()) return reject("meta-child"); + child_ids.push_back(child_id->second); + } + result["childStripIds"] = std::move(child_ids); + if (!emit(children)) return reject("meta-emit"); + } + else { + const char *effect = strip_type == STRIP_TYPE_CROSS ? "CROSS" : + strip_type == STRIP_TYPE_GAMCROSS ? "GAMMA_CROSS" : + strip_type == STRIP_TYPE_ADD ? "ADD" : + strip_type == STRIP_TYPE_MUL ? "MULTIPLY" : + strip_type == STRIP_TYPE_TRANSFORM_LEGACY ? "TRANSFORM" : "COLOR"; + json inputs = json::array(); + for (const char *member : {"input1", "input2"}) { + const std::optional input_pointer = read_pointer(*blend.sdna, strip, member); + if (!input_pointer || *input_pointer == 0) continue; + const auto input_id = strip_ids.find(*input_pointer); + if (input_id == strip_ids.end()) return reject("effect-input"); + inputs.push_back(input_id->second); + } + if (inputs.empty()) return reject("effect-empty"); + result["effectType"] = effect; + result["inputStripIds"] = std::move(inputs); + } + strips.push_back(std::move(result)); + } + return true; + }; + if (!emit(top_level)) return json{{"status", "BLOCKED"}}; + const int fps_denominator = std::max(1, int(std::round(fps_base * 1000.0f))); + return json{{"status", "AVAILABLE"}, + {"timeline", + {{"schemaVersion", 1}, + {"id", "sequencer:" + scene_id}, + {"revision", revision}, + {"frameStart", frame_start}, + {"frameEnd", frame_end}, + {"fpsNumerator", fps * 1000}, + {"fpsDenominator", fps_denominator}, + {"strips", std::move(strips)}}}}; +} + +std::optional mask_from_record(const ParsedBlend &blend, + const ElementRef &mask, + const std::string &mask_id, + const std::string &mask_name) +{ + const std::vector source_layers = linked_list_elements(blend, mask, "masklayers"); + if (source_layers.size() > 1024) return std::nullopt; + json layers = json::array(); + size_t spline_count = 0; + size_t point_count = 0; + size_t layer_index = 0; + for (const ElementRef &layer : source_layers) { + const std::string layer_name = read_string(*blend.sdna, layer, "name"); + const int64_t layer_flags = read_integer(*blend.sdna, layer, "flag").value_or(0); + const int64_t visibility_flags = read_integer(*blend.sdna, layer, "visibility_flag").value_or(0); + const float opacity = read_float(*blend.sdna, layer, "alpha").value_or(1.0f); + if (!std::isfinite(opacity) || opacity < 0.0f || opacity > 1.0f) return std::nullopt; + json splines = json::array(); + size_t spline_index = 0; + for (const ElementRef &spline : linked_list_elements(blend, layer, "splines")) { + if (++spline_count > 100000) return std::nullopt; + const int64_t spline_flags = read_integer(*blend.sdna, spline, "flag").value_or(0); + const int64_t total_points = read_integer(*blend.sdna, spline, "tot_point").value_or(0); + const std::optional points_pointer = read_pointer(*blend.sdna, spline, "points"); + if (!points_pointer || total_points < 2 || total_points > 1000000 || + point_count > 1000000 - size_t(total_points)) + { + return std::nullopt; + } + point_count += size_t(total_points); + json points = json::array(); + for (int64_t point_index = 0; point_index < total_points; point_index++) { + const std::optional point = raw_array_element( + blend, *points_pointer, "MaskSplinePoint", size_t(point_index)); + if (!point) return std::nullopt; + const std::optional bezier = embedded_element(*blend.sdna, *point, "bezt"); + if (!bezier) return std::nullopt; + const std::vector coordinates = read_float_array(*blend.sdna, *bezier, "vec", 9); + const int64_t left_handle = read_integer(*blend.sdna, *bezier, "h1").value_or(HD_FREE); + const int64_t right_handle = read_integer(*blend.sdna, *bezier, "h2").value_or(HD_FREE); + const int64_t selection = read_integer(*blend.sdna, *bezier, "f2").value_or(0); + const float feather = read_float(*blend.sdna, *bezier, "weight").value_or(0.0f); + if (coordinates.size() < 8 || std::any_of(coordinates.begin(), coordinates.end(), [](const float value) { + return !std::isfinite(value) || value < -4.0f || value > 4.0f; + }) || !std::isfinite(feather) || feather < 0.0f || feather > 100.0f) + { + return std::nullopt; + } + const char *handle_type = ELEM(left_handle, HD_AUTO, HD_AUTO_ANIM) && + ELEM(right_handle, HD_AUTO, HD_AUTO_ANIM) ? + "AUTO" : + left_handle == HD_VECT && right_handle == HD_VECT ? "VECTOR" : + ELEM(left_handle, HD_ALIGN, HD_ALIGN_DOUBLESIDE) && + ELEM(right_handle, HD_ALIGN, HD_ALIGN_DOUBLESIDE) ? + "ALIGNED" : + "FREE"; + points.push_back({{"id", "mask-point:" + std::to_string(layer_index) + ":" + + std::to_string(spline_index) + ":" + std::to_string(point_index)}, + {"co", {coordinates[3], coordinates[4]}}, + {"handleLeft", {coordinates[0], coordinates[1]}}, + {"handleRight", {coordinates[6], coordinates[7]}}, + {"handleType", handle_type}, + {"feather", feather}, + {"selected", (selection & BEZT_FLAG_SELECT) != 0}}); + } + splines.push_back({{"id", "mask-spline:" + std::to_string(layer_index) + ":" + + std::to_string(spline_index)}, + {"cyclic", (spline_flags & MASK_SPLINE_CYCLIC) != 0}, + {"fill", (spline_flags & MASK_SPLINE_NOFILL) == 0}, + {"points", std::move(points)}}); + spline_index++; + } + layers.push_back({{"id", "mask-layer:" + std::to_string(layer_index)}, + {"name", layer_name.empty() ? "Layer " + std::to_string(layer_index + 1) : + layer_name}, + {"visible", (visibility_flags & MASK_HIDE_VIEW) == 0}, + {"locked", (layer_flags & MASK_LAYERFLAG_LOCKED) != 0 || + (visibility_flags & MASK_HIDE_SELECT) != 0}, + {"opacity", opacity}, + {"splines", std::move(splines)}}); + layer_index++; + } + return json{{"id", mask_id}, {"name", mask_name}, {"layers", std::move(layers)}}; +} + +const char *editor_type_from_space(const int64_t space_type) +{ + switch (space_type) { + case SPACE_VIEW3D: return "VIEW_3D"; + case SPACE_OUTLINER: return "OUTLINER"; + case SPACE_PROPERTIES: return "PROPERTIES"; + case SPACE_IMAGE: return "UV_IMAGE"; + case SPACE_NODE: return "NODE"; + case SPACE_GRAPH: return "GRAPH"; + case SPACE_ACTION: return "DOPE_SHEET"; + case SPACE_NLA: return "NLA"; + case SPACE_SPREADSHEET: return "SPREADSHEET"; + case SPACE_SEQ: return "SEQUENCER"; + case SPACE_CLIP: return "CLIP"; + default: return nullptr; + } +} + +const char *editor_region_kind(const int64_t region_type) +{ + if (region_type == RGN_TYPE_WINDOW || region_type == RGN_TYPE_PREVIEW) return "MAIN"; + if (region_type == RGN_TYPE_HEADER || region_type == RGN_TYPE_TOOL_HEADER || + region_type == RGN_TYPE_ASSET_SHELF_HEADER || region_type == RGN_TYPE_SCRUBBING) + { + return "HEADER"; + } + if (region_type == RGN_TYPE_TOOLS || region_type == RGN_TYPE_TOOL_PROPS) return "TOOLBAR"; + if (region_type == RGN_TYPE_UI || region_type == RGN_TYPE_CHANNELS || + region_type == RGN_TYPE_NAV_BAR || region_type == RGN_TYPE_ASSET_SHELF) + { + return "SIDEBAR"; + } + if (region_type == RGN_TYPE_FOOTER || region_type == RGN_TYPE_EXECUTE) return "FOOTER"; + return nullptr; +} + +std::optional editor_view2d_rect(const SDNA &sdna, + const ElementRef &view2d, + const std::string &member_name) +{ + const std::optional rect = embedded_element(sdna, view2d, member_name); + if (!rect) return std::nullopt; + const auto stable_float = [](const float value) { + return std::round(double(value) * 1000000.0) / 1000000.0; + }; + return json{{"xmin", stable_float(read_float(sdna, *rect, "xmin").value_or(0.0f))}, + {"xmax", stable_float(read_float(sdna, *rect, "xmax").value_or(0.0f))}, + {"ymin", stable_float(read_float(sdna, *rect, "ymin").value_or(0.0f))}, + {"ymax", stable_float(read_float(sdna, *rect, "ymax").value_or(0.0f))}}; +} + +std::optional editor_view2d_state(const SDNA &sdna, const ElementRef ®ion) +{ + const std::optional view2d = embedded_element(sdna, region, "v2d"); + if (!view2d) return std::nullopt; + const std::optional current = editor_view2d_rect(sdna, *view2d, "cur"); + const std::optional mask = embedded_element(sdna, *view2d, "mask"); + if (!current || !mask) return std::nullopt; + return json{{"cur", *current}, + {"mask", + {{"xmin", read_integer(sdna, *mask, "xmin").value_or(0)}, + {"xmax", read_integer(sdna, *mask, "xmax").value_or(0)}, + {"ymin", read_integer(sdna, *mask, "ymin").value_or(0)}, + {"ymax", read_integer(sdna, *mask, "ymax").value_or(0)}}}}; +} + +std::optional editor_workflow_from_records( + const ParsedBlend &blend, + const std::vector &records, + const uint64_t revision, + const std::string &active_object_id) +{ + json workspaces = json::array(); + size_t area_count = 0; + size_t region_count = 0; + for (const IdRecord &record : records) { + if (record.type_name != "WorkSpace" || workspaces.size() >= 64) continue; + const ElementRef workspace{record.block, 0, record.type_name}; + const std::vector layouts = linked_list_elements(blend, workspace, "layouts"); + if (layouts.empty()) continue; + const std::optional screen_pointer = read_pointer(*blend.sdna, layouts.front(), "screen"); + const std::optional screen = screen_pointer ? element_for_pointer(blend, *screen_pointer) : + std::nullopt; + if (!screen) continue; + const std::vector source_areas = linked_list_elements(blend, *screen, "areabase"); + if (source_areas.empty() || area_count > 1024 - source_areas.size()) continue; + + struct AreaBounds { + int x_min; + int y_min; + int x_max; + int y_max; + }; + std::vector bounds; + bounds.reserve(source_areas.size()); + bool valid = true; + int screen_x_min = std::numeric_limits::max(); + int screen_y_min = std::numeric_limits::max(); + int screen_x_max = std::numeric_limits::min(); + int screen_y_max = std::numeric_limits::min(); + for (const ElementRef &area : source_areas) { + if (editor_type_from_space(read_integer(*blend.sdna, area, "spacetype").value_or(-1)) == nullptr) { + valid = false; + break; + } + const std::optional total_rect = embedded_element(*blend.sdna, area, "totrct"); + if (!total_rect) { + valid = false; + break; + } + const std::vector area_rect = { + read_integer(*blend.sdna, *total_rect, "xmin").value_or(0), + read_integer(*blend.sdna, *total_rect, "ymin").value_or(0), + read_integer(*blend.sdna, *total_rect, "xmax").value_or(0), + read_integer(*blend.sdna, *total_rect, "ymax").value_or(0)}; + if (area_rect[2] <= area_rect[0] || area_rect[3] <= area_rect[1]) { + valid = false; + break; + } + bounds.push_back({int(area_rect[0]), int(area_rect[1]), int(area_rect[2]), int(area_rect[3])}); + screen_x_min = std::min(screen_x_min, int(area_rect[0])); + screen_y_min = std::min(screen_y_min, int(area_rect[1])); + screen_x_max = std::max(screen_x_max, int(area_rect[2])); + screen_y_max = std::max(screen_y_max, int(area_rect[3])); + } + const int screen_width = screen_x_max - screen_x_min; + const int screen_height = screen_y_max - screen_y_min; + if (!valid || screen_width <= 0 || screen_height <= 0) continue; + + json areas = json::array(); + size_t workspace_region_count = 0; + for (size_t area_index = 0; area_index < source_areas.size(); area_index++) { + const ElementRef &area = source_areas[area_index]; + const char *editor = editor_type_from_space( + read_integer(*blend.sdna, area, "spacetype").value_or(-1)); + json regions = json::array(); + bool has_main_region = false; + for (const ElementRef ®ion : linked_list_elements(blend, area, "regionbase")) { + const char *kind = editor_region_kind( + read_integer(*blend.sdna, region, "regiontype").value_or(-1)); + if (kind == nullptr) continue; + if (++workspace_region_count > 4096 - region_count) { + valid = false; + break; + } + const int64_t flags = read_integer(*blend.sdna, region, "flag").value_or(0); + json region_record = {{"id", record.id + ":area:" + std::to_string(area_index) + + ":region:" + std::to_string(regions.size())}, + {"kind", kind}, + {"visible", (flags & RGN_FLAG_HIDDEN) == 0}}; + if ((std::strcmp(editor, "DOPE_SHEET") == 0 || std::strcmp(editor, "GRAPH") == 0) && + std::strcmp(kind, "MAIN") == 0) { + if (const std::optional view2d = editor_view2d_state(*blend.sdna, region)) { + region_record["view2d"] = *view2d; + } + } + regions.push_back(std::move(region_record)); + has_main_region |= std::strcmp(kind, "MAIN") == 0; + } + if (!valid || regions.empty() || !has_main_region) { + valid = false; + break; + } + const AreaBounds &rect = bounds[area_index]; + const double x = double(rect.x_min - screen_x_min) / screen_width; + const double y = double(rect.y_min - screen_y_min) / screen_height; + const double width = rect.x_max == screen_x_max ? 1.0 - x : + double(rect.x_max - rect.x_min) / screen_width; + const double height = rect.y_max == screen_y_max ? 1.0 - y : + double(rect.y_max - rect.y_min) / screen_height; + json area_record = {{"id", record.id + ":area:" + std::to_string(area_index)}, + {"editor", editor}, + {"regions", std::move(regions)}, + {"rect", + {{"x", x}, {"y", y}, {"width", width}, {"height", height}}}, + {"maximized", false}}; + if (std::strcmp(editor, "DOPE_SHEET") == 0) { + for (const ElementRef &space : linked_list_elements(blend, area, "spacedata")) { + if (space.type_name != "SpaceAction") continue; + if (const std::optional ads = embedded_element(*blend.sdna, space, "ads")) { + const std::string filter = read_string(*blend.sdna, *ads, "searchstr"); + if (!filter.empty()) area_record["filterText"] = filter; + } + break; + } + } + areas.push_back(std::move(area_record)); + } + if (!valid || areas.empty()) continue; + area_count += areas.size(); + region_count += workspace_region_count; + workspaces.push_back({{"id", record.id}, + {"name", record.name}, + {"areas", std::move(areas)}, + {"activeAreaId", record.id + ":area:0"}, + {"revision", revision}}); + } + if (workspaces.empty()) return std::nullopt; + const json &workspace = workspaces.front(); + const json &active_area = workspace["areas"].front(); + const std::string workspace_id = workspace.value("id", ""); + const std::string active_area_id = active_area.value("id", ""); + const std::string active_editor = active_area.value("editor", ""); + json selection = json::array(); + if (!active_object_id.empty()) selection.push_back(active_object_id); + return json{{"schemaVersion", 1}, + {"workspaces", std::move(workspaces)}, + {"context", + {{"workspaceId", workspace_id}, + {"activeAreaId", active_area_id}, + {"activeEditor", active_editor}, + {"mode", "OBJECT"}, + {"activeObjectId", active_object_id.empty() ? json(nullptr) : json(active_object_id)}, + {"selection", std::move(selection)}, + {"viewLayer", "ViewLayer"}, + {"pinnedData", nullptr}, + {"revision", revision}}}, + {"keymaps", json::array()}}; +} + +struct RawBlockSpan { + const BlendBlock *block = nullptr; + size_t offset = 0; +}; + +std::optional raw_block_for_pointer(const ParsedBlend &blend, const uint64_t pointer) +{ + if (pointer == 0) return std::nullopt; + // Blender may pack several DATA blocks adjacently. An exact old pointer is + // a stronger match than containment in the preceding block's byte span. + for (const BlendBlock &block : blend.blocks) { + if (block_pointer(block) == pointer && !block.bytes.empty()) { + return RawBlockSpan{&block, 0}; + } + } + for (const BlendBlock &block : blend.blocks) { + const uint64_t base = block_pointer(block); + const uint64_t span = uint64_t(block.bytes.size()); + if (pointer >= base && pointer < base + span) { + const uint64_t offset = pointer - base; + if (offset < block.bytes.size()) { + return RawBlockSpan{&block, size_t(offset)}; + } + } + } + return std::nullopt; +} + +template +std::optional read_raw_value(const ParsedBlend &blend, const uint64_t pointer) +{ + const std::optional span = raw_block_for_pointer(blend, pointer); + if (!span || span->offset > span->block->bytes.size() || + sizeof(T) > span->block->bytes.size() - span->offset) + { + return std::nullopt; + } + T value{}; + memcpy(&value, span->block->bytes.data() + span->offset, sizeof(T)); + return value; +} + +std::vector read_raw_float_array(const ParsedBlend &blend, + const uint64_t pointer, + const size_t count, + const size_t components) +{ + const std::optional span = raw_block_for_pointer(blend, pointer); + if (!span || span->offset > span->block->bytes.size() || components == 0 || + count > SIZE_MAX / components || + count * components > (span->block->bytes.size() - span->offset) / sizeof(float)) + { + return {}; + } + std::vector values(count * components); + memcpy(values.data(), span->block->bytes.data() + span->offset, values.size() * sizeof(float)); + for (float &value : values) { + if (!std::isfinite(value)) value = 0.0f; + } + return values; +} + +std::vector read_raw_byte_array(const ParsedBlend &blend, + uint64_t pointer, + size_t count); + +std::optional raw_array_element(const ParsedBlend &blend, + const uint64_t pointer, + const std::string &type_name, + size_t index); + +std::vector read_raw_int_array(const ParsedBlend &blend, + const uint64_t pointer, + const size_t count); + +std::string modifier_type_name(const int64_t type) +{ + static const char *const names[] = { + "NONE", "SUBSURF", "LATTICE", "CURVE", "BUILD", "MIRROR", + "DECIMATE", "WAVE", "ARMATURE", "HOOK", "SOFT_BODY", "BOOLEAN", + "ARRAY", "EDGE_SPLIT", "DISPLACE", "UV_PROJECT", "SMOOTH", "CAST", + "MESH_DEFORM", "PARTICLE_SYSTEM", "PARTICLE_INSTANCE", "EXPLODE", "CLOTH", "COLLISION", + "BEVEL", "SHRINKWRAP", "FLUID_SIM", "MASK", "SIMPLE_DEFORM", "MULTIRES", + "SURFACE", "UNSUPPORTED_31", "SHAPE_KEY", "SOLIDIFY", "SCREW", "WARP", "VERTEX_WEIGHT_EDIT", + "VERTEX_WEIGHT_MIX", "VERTEX_WEIGHT_PROXIMITY", "OCEAN", "DYNAMIC_PAINT", "REMESH", "SKIN", + "LAPLACIANSMOOTH", "TRIANGULATE", "UV_WARP", "MESH_CACHE", "LAPLACIANDEFORM", "WIREFRAME", + "DATA_TRANSFER", "NORMAL_EDIT", "CORRECTIVE_SMOOTH", "MESH_SEQUENCE_CACHE", "SURFACE_DEFORM", + "WEIGHTED_NORMAL", "WELD", "FLUID", "NODES", "MESH_TO_VOLUME", "VOLUME_DISPLACE", "VOLUME_TO_MESH", + "GREASE_PENCIL_OPACITY", "GREASE_PENCIL_SUBDIV", "GREASE_PENCIL_COLOR", "GREASE_PENCIL_TINT", + "GREASE_PENCIL_SMOOTH", "GREASE_PENCIL_OFFSET", "GREASE_PENCIL_NOISE", "GREASE_PENCIL_MIRROR", + "GREASE_PENCIL_THICKNESS", "GREASE_PENCIL_LATTICE", "GREASE_PENCIL_DASH", "GREASE_PENCIL_MULTIPLY", + "GREASE_PENCIL_LENGTH", "GREASE_PENCIL_VERTEX_WEIGHT_ANGLE", "GREASE_PENCIL_ARRAY", + "GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY", "GREASE_PENCIL_HOOK", "LINEART", + "GREASE_PENCIL_ARMATURE", "GREASE_PENCIL_TIME", "GREASE_PENCIL_ENVELOPE", + "GREASE_PENCIL_OUTLINE", "GREASE_PENCIL_SHRINKWRAP", "GREASE_PENCIL_BUILD", + "GREASE_PENCIL_SIMPLIFY", "GREASE_PENCIL_TEXTURE"}; + static_assert(std::size(names) == NUM_MODIFIER_TYPES, + "Blender modifier name table must cover every DNA modifier type"); + if (type >= 0 && type < int64_t(std::size(names))) return names[size_t(type)]; + return "UNKNOWN_" + std::to_string(type); +} + +json modifier_parameters(const ParsedBlend &blend, + const ElementRef &modifier, + const ElementRef &base, + const int64_t type, + const std::unordered_map &ids_by_pointer) +{ + json parameters = {{"typeCode", type}, + {"mode", read_integer(*blend.sdna, base, "mode").value_or(0)}, + {"flag", read_integer(*blend.sdna, base, "flag").value_or(0)}, + {"persistentUid", read_integer(*blend.sdna, base, "persistent_uid").value_or(0)}}; + json target_object_ids = json::array(); + auto append_target = [&](const char *field) { + const std::optional pointer = read_pointer(*blend.sdna, modifier, field); + if (!pointer) return; + const auto target = ids_by_pointer.find(*pointer); + if (target != ids_by_pointer.end()) target_object_ids.push_back(target->second); + }; + switch (type) { + case 1: + parameters["subdivisionType"] = read_integer(*blend.sdna, modifier, "subdivType").value_or(0); + parameters["levels"] = read_integer(*blend.sdna, modifier, "levels").value_or(0); + parameters["renderLevels"] = read_integer(*blend.sdna, modifier, "renderLevels").value_or(0); + break; + case 2: + append_target("object"); + parameters["vertexGroup"] = read_string(*blend.sdna, modifier, "name"); + parameters["strength"] = read_float(*blend.sdna, modifier, "strength").value_or(1.0f); + parameters["latticeFlags"] = read_integer(*blend.sdna, modifier, "flag").value_or(0); + break; + case 3: + append_target("object"); + parameters["vertexGroup"] = read_string(*blend.sdna, modifier, "name"); + parameters["deformAxis"] = read_integer(*blend.sdna, modifier, "defaxis").value_or(1); + parameters["curveFlags"] = read_integer(*blend.sdna, modifier, "flag").value_or(0); + break; + case 4: + parameters["start"] = read_float(*blend.sdna, modifier, "start").value_or(1.0f); + parameters["length"] = read_float(*blend.sdna, modifier, "length").value_or(100.0f); + parameters["randomize"] = read_integer(*blend.sdna, modifier, "randomize").value_or(0); + parameters["seed"] = read_integer(*blend.sdna, modifier, "seed").value_or(0); + break; + case 5: + parameters["flag"] = read_integer(*blend.sdna, modifier, "flag").value_or( + read_integer(*blend.sdna, base, "flag").value_or(0)); + parameters["mergeTolerance"] = read_float(*blend.sdna, modifier, "tolerance").value_or(0.0f); + break; + case 6: + parameters["ratio"] = read_float(*blend.sdna, modifier, "percent").value_or(1.0f); + parameters["iterations"] = read_integer(*blend.sdna, modifier, "iter").value_or(0); + parameters["delimit"] = read_integer(*blend.sdna, modifier, "delimit").value_or(0); + parameters["symmetryAxis"] = read_integer(*blend.sdna, modifier, "symmetry_axis").value_or(0); + parameters["angleLimit"] = read_float(*blend.sdna, modifier, "angle").value_or(0.0f); + parameters["decimateMode"] = read_integer(*blend.sdna, modifier, "mode").value_or(0); + break; + case 7: + parameters["height"] = read_float(*blend.sdna, modifier, "height").value_or(0.5f); + parameters["width"] = read_float(*blend.sdna, modifier, "width").value_or(1.5f); + parameters["speed"] = read_float(*blend.sdna, modifier, "speed").value_or(0.25f); + append_target("objectcenter"); + break; + case 24: + parameters["width"] = read_float(*blend.sdna, modifier, "value").value_or(0.0f); + parameters["segments"] = read_integer(*blend.sdna, modifier, "res").value_or(0); + parameters["profile"] = read_float(*blend.sdna, modifier, "profile").value_or(0.5f); + break; + case 8: { + const std::optional armature_pointer = read_pointer(*blend.sdna, modifier, "object"); + if (armature_pointer) { + const auto armature_object = ids_by_pointer.find(*armature_pointer); + if (armature_object != ids_by_pointer.end()) { + parameters["armatureObjectId"] = armature_object->second; + target_object_ids.push_back(armature_object->second); + } + } + const std::string vertex_group = read_string(*blend.sdna, modifier, "defgrp_name"); + if (!vertex_group.empty()) parameters["vertexGroup"] = vertex_group; + parameters["deformFlags"] = read_integer(*blend.sdna, modifier, "deformflag").value_or(0); + break; + } + case 9: + append_target("object"); + parameters["subtarget"] = read_string(*blend.sdna, modifier, "subtarget"); + parameters["vertexGroup"] = read_string(*blend.sdna, modifier, "name"); + parameters["force"] = read_float(*blend.sdna, modifier, "force").value_or(1.0f); + parameters["falloff"] = read_float(*blend.sdna, modifier, "falloff").value_or(0.0f); + parameters["falloffType"] = read_integer(*blend.sdna, modifier, "falloff_type").value_or(0); + break; + case 11: + append_target("object"); + parameters["operation"] = read_integer(*blend.sdna, modifier, "operation").value_or(0); + parameters["solver"] = read_integer(*blend.sdna, modifier, "solver").value_or(0); + break; + case 12: + append_target("start_cap"); + append_target("end_cap"); + append_target("curve_ob"); + append_target("offset_ob"); + parameters["count"] = read_integer(*blend.sdna, modifier, "count").value_or(2); + break; + case 13: + parameters["splitAngle"] = read_float(*blend.sdna, modifier, "split_angle").value_or(0.523599f); + break; + case 14: + append_target("map_object"); + parameters["vertexGroup"] = read_string(*blend.sdna, modifier, "defgrp_name"); + parameters["direction"] = read_integer(*blend.sdna, modifier, "direction").value_or(0); + parameters["strength"] = read_float(*blend.sdna, modifier, "strength").value_or(0.0f); + parameters["midLevel"] = read_float(*blend.sdna, modifier, "midlevel").value_or(0.5f); + parameters["space"] = read_integer(*blend.sdna, modifier, "space").value_or(0); + parameters["textureMapping"] = read_integer(*blend.sdna, modifier, "texmapping").value_or(0); + break; + case 18: + append_target("object"); + parameters["vertexGroup"] = read_string(*blend.sdna, modifier, "defgrp_name"); + parameters["gridSize"] = read_integer(*blend.sdna, modifier, "gridsize").value_or(5); + parameters["meshDeformFlags"] = read_integer(*blend.sdna, modifier, "flag").value_or(0); + break; + case 16: + parameters["vertexGroup"] = read_string(*blend.sdna, modifier, "defgrp_name"); + parameters["factor"] = read_float(*blend.sdna, modifier, "fac").value_or(0.5f); + parameters["repeat"] = read_integer(*blend.sdna, modifier, "repeat").value_or(1); + parameters["smoothFlags"] = read_integer(*blend.sdna, modifier, "flag").value_or(14); + break; + case 17: + append_target("object"); + parameters["factor"] = read_float(*blend.sdna, modifier, "fac").value_or(0.5f); + parameters["radius"] = read_float(*blend.sdna, modifier, "radius").value_or(0.0f); + break; + case 25: + append_target("target"); + append_target("auxTarget"); + parameters["vertexGroup"] = read_string(*blend.sdna, modifier, "vgroup_name"); + parameters["keepDistance"] = read_float(*blend.sdna, modifier, "keepDist").value_or(0.0f); + parameters["shrinkType"] = read_integer(*blend.sdna, modifier, "shrinkType").value_or(0); + parameters["shrinkMode"] = read_integer(*blend.sdna, modifier, "shrinkMode").value_or(0); + parameters["projectionLimit"] = read_float(*blend.sdna, modifier, "projLimit").value_or(0.0f); + break; + case 28: + append_target("origin"); + parameters["factor"] = read_float(*blend.sdna, modifier, "factor").value_or(0.0f); + parameters["deformMethod"] = read_integer(*blend.sdna, modifier, "mode").value_or(0); + parameters["deformAxis"] = read_integer(*blend.sdna, modifier, "deform_axis").value_or(0); + break; + case 42: + parameters["branchSmoothing"] = read_float(*blend.sdna, modifier, "branch_smoothing").value_or(0.0f); + parameters["skinFlags"] = read_integer(*blend.sdna, modifier, "flag").value_or(0); + parameters["symmetryAxes"] = read_integer(*blend.sdna, modifier, "symmetry_axes").value_or(1); + break; + case 33: + parameters["thickness"] = read_float(*blend.sdna, modifier, "offset").value_or(0.01f); + parameters["offset"] = read_float(*blend.sdna, modifier, "offset_fac").value_or(-1.0f); + break; + case 34: + append_target("ob_axis"); + parameters["steps"] = read_integer(*blend.sdna, modifier, "steps").value_or(16); + parameters["renderSteps"] = read_integer(*blend.sdna, modifier, "render_steps").value_or(16); + parameters["angle"] = read_float(*blend.sdna, modifier, "angle").value_or(6.283185f); + break; + case 44: + parameters["quadMethod"] = read_integer(*blend.sdna, modifier, "quad_method").value_or(0); + parameters["ngonMethod"] = read_integer(*blend.sdna, modifier, "ngon_method").value_or(0); + break; + case 48: + parameters["thickness"] = read_float(*blend.sdna, modifier, "offset").value_or(0.01f); + break; + case 54: + parameters["weight"] = read_integer(*blend.sdna, modifier, "weight").value_or(50); + break; + case 55: + parameters["mergeThreshold"] = read_float(*blend.sdna, modifier, "merge_dist").value_or(0.001f); + break; + case 53: + append_target("target"); + parameters["vertexGroup"] = read_string(*blend.sdna, modifier, "defgrp_name"); + parameters["falloff"] = read_float(*blend.sdna, modifier, "falloff").value_or(4.0f); + parameters["strength"] = read_float(*blend.sdna, modifier, "strength").value_or(1.0f); + parameters["surfaceDeformFlags"] = read_integer(*blend.sdna, modifier, "flags").value_or(0); + break; + } + if (!target_object_ids.empty()) parameters["targetObjectIds"] = std::move(target_object_ids); + return parameters; +} + +json modifier_stack_from_object(const ParsedBlend &blend, + const ElementRef &object, + const std::string &object_id, + const std::unordered_map &ids_by_pointer) +{ + json stack = json::array(); + size_t index = 0; + for (const ElementRef &modifier : linked_list_elements(blend, object, "modifiers")) { + const ElementRef base = embedded_element(*blend.sdna, modifier, "modifier").value_or(modifier); + const int64_t type = read_integer(*blend.sdna, base, "type").value_or(0); + const int64_t mode = read_integer(*blend.sdna, base, "mode").value_or(0); + const int64_t persistent_uid = read_integer(*blend.sdna, base, "persistent_uid").value_or(0); + const std::string name = read_string(*blend.sdna, base, "name"); + const std::string identity = persistent_uid > 0 ? std::to_string(persistent_uid) : + (name.empty() ? std::to_string(index) : name); + const std::string uuid = "modifier:" + object_id + ":" + identity; + json depends_on = json::array(); + if (!stack.empty()) depends_on.push_back(stack.back().value("uuid", "")); + const json parameters = modifier_parameters(blend, modifier, base, type, ids_by_pointer); + if (parameters.contains("targetObjectIds")) { + for (const json &target : parameters["targetObjectIds"]) depends_on.push_back(target); + } + const bool known_metadata = type == 1 || type == 2 || type == 3 || type == 4 || type == 5 || + type == 6 || type == 7 || type == 8 || type == 9 || type == 10 || type == 11 || + type == 12 || type == 13 || type == 14 || type == 16 || type == 17 || + type == 18 || type == 24 || type == 25 || type == 28 || type == 42 || type == 33 || + type == 34 || type == 44 || type == 48 || type == 53 || type == 54 || + type == 55 || type == 57; + stack.push_back({{"uuid", uuid}, + {"type", modifier_type_name(type)}, + {"name", name.empty() ? modifier_type_name(type) : name}, + {"enabled", (mode & 1) != 0}, + {"showViewport", (mode & 1) != 0}, + {"showRender", (mode & 2) != 0}, + {"showEditMode", (mode & 4) != 0}, + {"showOnCage", (mode & 8) != 0}, + {"parameters", parameters}, + {"dependsOn", std::move(depends_on)}, + {"evaluationStatus", known_metadata ? "METADATA_ONLY" : "BLOCKED"}}); + index++; + } + return stack; +} + +json mesh_shape_keys(const ParsedBlend &blend, + const ElementRef &mesh, + const int64_t vertex_count) +{ + json shape_keys = json::array(); + const std::optional key_pointer = read_pointer(*blend.sdna, mesh, "key"); + if (!key_pointer) return shape_keys; + const std::optional key = element_for_pointer(blend, *key_pointer); + if (!key) return shape_keys; + const std::vector blocks = linked_list_elements(blend, *key, "block"); + for (size_t block_index = 1; block_index < blocks.size(); block_index++) { + const ElementRef &block = blocks[block_index]; + const int64_t element_count = std::clamp(read_integer(*blend.sdna, block, "totelem").value_or(0), 0, 10000000); + const std::optional data_pointer = read_pointer(*blend.sdna, block, "data"); + const std::vector positions = data_pointer && element_count > 0 ? + read_raw_float_array(blend, *data_pointer, size_t(element_count), 3) : std::vector(); + if (positions.size() != size_t(vertex_count) * 3) continue; + json shape = {{"name", read_string(*blend.sdna, block, "name")}, + {"positions", positions}, + {"value", read_float(*blend.sdna, block, "curval").value_or(0.0f)}}; + shape_keys.push_back(std::move(shape)); + } + return shape_keys; +} + +std::vector packed_file_bytes(const ParsedBlend &blend, const uint64_t packed_file_pointer) +{ + const std::optional packed_file = element_for_pointer(blend, packed_file_pointer); + if (!packed_file) return {}; + const int64_t byte_count = read_integer(*blend.sdna, *packed_file, "size").value_or(0); + const std::optional data_pointer = read_pointer(*blend.sdna, *packed_file, "data"); + if (!data_pointer || byte_count <= 0 || byte_count > int64_t(MAX_BLEND_BLOCK_BYTES)) return {}; + return read_raw_byte_array(blend, *data_pointer, size_t(byte_count)); +} + +struct PackedImageRecord { + int tile_number = 1001; + int view = 0; + std::string filepath; + std::vector bytes; +}; + +std::vector image_packed_records(const ParsedBlend &blend, + const ElementRef &image) +{ + std::vector records; + for (const ElementRef &packed : linked_list_elements(blend, image, "packedfiles")) { + if (const std::optional packed_file = read_pointer(*blend.sdna, packed, "packedfile")) { + records.push_back({int(read_integer(*blend.sdna, packed, "tile_number").value_or(1001)), + int(read_integer(*blend.sdna, packed, "view").value_or(0)), + read_string(*blend.sdna, packed, "filepath"), + packed_file_bytes(blend, *packed_file)}); + } + } + /* Modern files can retain the deprecated pointer as an alias of the first + * packedfiles entry. Only use it as a legacy fallback to avoid duplicate + * byte counts and tile records. */ + if (records.empty()) { + if (const std::optional packed_file = read_pointer(*blend.sdna, image, "packedfile")) { + records.push_back({1001, 0, read_string(*blend.sdna, image, "filepath"), + packed_file_bytes(blend, *packed_file)}); + } + } + return records; +} + +std::string image_source_kind(const int64_t source) +{ + switch (source) { + case 1: return "FILE"; + case 2: return "SEQUENCE"; + case 3: return "MOVIE"; + case 4: return "GENERATED"; + case 5: return "VIEWER"; + case 6: return "TILED"; + default: return "UNKNOWN"; + } +} + +std::string image_mime_type(const std::string &filepath) +{ + const size_t extension = filepath.find_last_of('.'); + if (extension == std::string::npos) return "application/octet-stream"; + std::string suffix = filepath.substr(extension + 1); + std::transform(suffix.begin(), suffix.end(), suffix.begin(), [](const unsigned char value) { + return char(std::tolower(value)); + }); + if (suffix == "png") return "image/png"; + if (suffix == "jpg" || suffix == "jpeg") return "image/jpeg"; + if (suffix == "webp") return "image/webp"; + if (suffix == "exr") return "image/aces"; + return "application/octet-stream"; +} + +bool image_signature_valid(const std::string &mime_type, const std::vector &bytes) +{ + if (bytes.empty()) return false; + if (mime_type == "image/png") { + static constexpr uint8_t png[] = {0x89, 'P', 'N', 'G', 0x0d, 0x0a, 0x1a, 0x0a}; + return bytes.size() >= sizeof(png) && std::equal(std::begin(png), std::end(png), bytes.begin()); + } + if (mime_type == "image/jpeg") return bytes.size() >= 3 && bytes[0] == 0xff && bytes[1] == 0xd8 && bytes[2] == 0xff; + if (mime_type == "image/webp") { + return bytes.size() >= 12 && std::equal(bytes.begin(), bytes.begin() + 4, "RIFF") && + std::equal(bytes.begin() + 8, bytes.begin() + 12, "WEBP"); + } + if (mime_type == "image/aces") { + static constexpr uint8_t exr[] = {0x76, 0x2f, 0x31, 0x01}; + return bytes.size() >= sizeof(exr) && std::equal(std::begin(exr), std::end(exr), bytes.begin()); + } + return true; +} + +json mesh_skin_weights(const ParsedBlend &blend, + const ElementRef &mesh, + const int64_t vertex_count, + const std::array &bind_matrix) +{ + const std::optional vertex_data = embedded_element(*blend.sdna, mesh, "vert_data"); + if (!vertex_data) return nullptr; + const std::optional layer_pointer = read_pointer(*blend.sdna, *vertex_data, "layers"); + const int64_t layer_count = std::clamp(read_integer(*blend.sdna, *vertex_data, "totlayer").value_or(0), 0, 256); + if (!layer_pointer || layer_count <= 0) return nullptr; + std::optional deform_pointer; + const int layer_struct_index = DNA_struct_find_index_without_alias(blend.sdna.get(), "CustomDataLayer"); + const int layer_struct_size = layer_struct_index >= 0 ? DNA_struct_size(blend.sdna.get(), layer_struct_index) : 0; + if (layer_struct_size <= 0) return nullptr; + for (int64_t index = 0; index < layer_count; index++) { + const std::optional layer = element_for_pointer( + blend, *layer_pointer + uint64_t(layer_struct_size * index) / 8); + if (!layer || read_integer(*blend.sdna, *layer, "type").value_or(-1) != 2) continue; + deform_pointer = read_pointer(*blend.sdna, *layer, "data"); + if (deform_pointer) break; + } + if (!deform_pointer) return nullptr; + + std::vector bone_names; + for (const ElementRef &group : linked_list_elements(blend, mesh, "vertex_group_names")) { + bone_names.push_back(read_string(*blend.sdna, group, "name")); + } + if (bone_names.empty()) return nullptr; + std::vector indices(size_t(vertex_count) * 4, 0); + std::vector weights(size_t(vertex_count) * 4, 0.0f); + for (int64_t vertex = 0; vertex < vertex_count; vertex++) { + const std::optional deform = raw_array_element(blend, *deform_pointer, "MDeformVert", size_t(vertex)); + if (!deform) continue; + const int64_t influence_count = std::clamp(read_integer(*blend.sdna, *deform, "totweight").value_or(0), 0, 1024); + const std::optional influence_pointer = read_pointer(*blend.sdna, *deform, "dw"); + if (!influence_pointer) continue; + struct Influence { int index; float weight; }; + std::vector influences; + for (int64_t influence = 0; influence < influence_count; influence++) { + const std::optional weight = raw_array_element(blend, *influence_pointer, "MDeformWeight", size_t(influence)); + if (!weight) continue; + const int64_t group_index = read_integer(*blend.sdna, *weight, "def_nr").value_or(-1); + const float value = read_float(*blend.sdna, *weight, "weight").value_or(0.0f); + if (group_index >= 0 && group_index < int64_t(bone_names.size()) && std::isfinite(value) && value > 0.0f) { + influences.push_back({int(group_index), value}); + } + } + std::sort(influences.begin(), influences.end(), [](const Influence &left, const Influence &right) { + return left.weight > right.weight; + }); + const size_t count = std::min(4, influences.size()); + for (size_t slot = 0; slot < count; slot++) { + indices[size_t(vertex) * 4 + slot] = influences[slot].index; + weights[size_t(vertex) * 4 + slot] = influences[slot].weight; + } + } + return json{{"boneNames", bone_names}, {"indices", indices}, {"weights", weights}, + {"bindMatrix", bind_matrix}}; +} + +std::vector read_raw_int_array(const ParsedBlend &blend, + const uint64_t pointer, + const size_t count); + +std::vector mesh_customdata_int_layer(const ParsedBlend &blend, + const ElementRef &mesh, + const std::string &data_name, + const std::string &layer_name, + const size_t element_count) +{ + const std::optional custom_data = embedded_element(*blend.sdna, mesh, data_name); + if (!custom_data) return {}; + const std::optional layers_pointer = read_pointer(*blend.sdna, *custom_data, "layers"); + const int64_t layer_count = std::clamp( + read_integer(*blend.sdna, *custom_data, "totlayer").value_or(0), 0, 256); + const int layer_struct_index = DNA_struct_find_index_without_alias(blend.sdna.get(), "CustomDataLayer"); + const int layer_struct_size = layer_struct_index >= 0 ? + DNA_struct_size(blend.sdna.get(), layer_struct_index) : + 0; + if (!layers_pointer || layer_count <= 0 || layer_struct_size <= 0) return {}; + for (int64_t index = 0; index < layer_count; index++) { + const std::optional layer = element_for_pointer( + blend, *layers_pointer + uint64_t(layer_struct_size * index) / 8); + if (!layer) continue; + const int64_t type = read_integer(*blend.sdna, *layer, "type").value_or(-1); + const std::string name = read_string(*blend.sdna, *layer, "name"); + const std::optional data_pointer = read_pointer(*blend.sdna, *layer, "data"); + if (type != 11 || name != layer_name || !data_pointer) { + continue; + } + return read_raw_int_array(blend, *data_pointer, element_count); + } + return {}; +} + +std::array element_matrix(const ParsedBlend &blend, + const ElementRef &element, + const std::string &member_name, + const std::array &fallback) +{ + const std::vector values = read_float_array(*blend.sdna, element, member_name, 16); + if (values.size() != 16) return fallback; + std::array result{}; + std::copy(values.begin(), values.end(), result.begin()); + return result; +} + +std::vector read_raw_pointer_array(const ParsedBlend &blend, + const uint64_t pointer, + const size_t count); + +json armature_from_data(const ParsedBlend &blend, + const ElementRef &armature, + const std::string &armature_id, + const std::optional &pose) +{ + json bones = json::array(); + std::unordered_map> pose_matrices; + if (pose) { + for (const ElementRef &channel : linked_list_elements(blend, *pose, "chanbase")) { + const std::string name = read_string(*blend.sdna, channel, "name"); + if (!name.empty()) pose_matrices[name] = element_matrix(blend, channel, "pose_mat", { + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1}); + } + } + std::function visit = + [&](const ElementRef &bone, const std::string &parent_id) { + const std::string name = read_string(*blend.sdna, bone, "name"); + if (name.empty()) return; + const std::string id = "bone:" + armature_id + ":" + name; + const std::vector arm_head = read_float_array(*blend.sdna, bone, "arm_head", 3); + const std::vector arm_tail = read_float_array(*blend.sdna, bone, "arm_tail", 3); + const std::vector head = arm_head.size() == 3 ? arm_head : + read_float_array(*blend.sdna, bone, "head", 3); + const std::vector tail = arm_tail.size() == 3 ? arm_tail : + read_float_array(*blend.sdna, bone, "tail", 3); + const std::array identity = {1, 0, 0, 0, 0, 1, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 1}; + json entry = {{"id", id}}; + entry["name"] = name; + const int64_t bone_flag = read_integer(*blend.sdna, bone, "flag").value_or(0); + entry["selected"] = (bone_flag & BONE_SELECTED) != 0; + entry["hidden"] = (bone_flag & BONE_HIDDEN_A) != 0; + entry["connected"] = (bone_flag & BONE_CONNECTED) != 0; + entry["parentId"] = parent_id.empty() ? json(nullptr) : json(parent_id); + entry["head"] = float_array_or(head, {0.0f, 0.0f, 0.0f}); + entry["tail"] = float_array_or(tail, {0.0f, 0.0f, 1.0f}); + entry["restMatrix"] = element_matrix(blend, bone, "arm_mat", identity); + if (const std::optional color = embedded_element(*blend.sdna, bone, "color")) { + json color_json = {{"paletteIndex", read_integer(*blend.sdna, *color, "palette_index").value_or(0)}}; + if (const std::optional custom = embedded_element(*blend.sdna, *color, "custom")) { + color_json["normal"] = read_byte_array(*blend.sdna, *custom, "solid", 4); + color_json["select"] = read_byte_array(*blend.sdna, *custom, "select", 4); + color_json["active"] = read_byte_array(*blend.sdna, *custom, "active", 4); + color_json["flag"] = read_integer(*blend.sdna, *custom, "flag").value_or(0); + } + entry["color"] = std::move(color_json); + } + const auto pose_matrix = pose_matrices.find(name); + if (pose_matrix != pose_matrices.end()) entry["poseMatrix"] = pose_matrix->second; + bones.push_back(std::move(entry)); + for (const ElementRef &child : linked_list_elements(blend, bone, "childbase")) visit(child, id); + }; + for (const ElementRef &root : linked_list_elements(blend, armature, "bonebase")) visit(root, ""); + json bone_collections = json::array(); + const int64_t collection_count = std::clamp( + read_integer(*blend.sdna, armature, "collection_array_num").value_or(0), 0, 10000); + const std::optional collection_pointer = read_pointer(*blend.sdna, armature, "collection_array"); + const std::vector collection_pointers = collection_pointer && collection_count > 0 ? + read_raw_pointer_array(blend, + *collection_pointer, + size_t(collection_count)) : + std::vector(); + std::vector collection_elements; + for (const uint64_t pointer : collection_pointers) { + if (const std::optional collection = element_for_pointer(blend, pointer)) { + collection_elements.push_back(*collection); + } + } + if (collection_elements.empty()) { + collection_elements = linked_list_elements(blend, armature, "collections_legacy"); + } + for (size_t index = 0; index < collection_elements.size(); index++) { + const ElementRef &collection = collection_elements[index]; + const std::string name = read_string(*blend.sdna, collection, "name"); + if (name.empty()) continue; + json members = json::array(); + for (const ElementRef &member : linked_list_elements(blend, collection, "bones")) { + const std::optional bone_pointer = read_pointer(*blend.sdna, member, "bone"); + if (!bone_pointer) continue; + const std::optional bone = element_for_pointer(blend, *bone_pointer); + if (!bone) continue; + const std::string bone_name = read_string(*blend.sdna, *bone, "name"); + if (!bone_name.empty()) members.push_back("bone:" + armature_id + ":" + bone_name); + } + bone_collections.push_back({{"id", "bone_collection:" + armature_id + ":" + name}, + {"name", name}, + {"index", int64_t(index)}, + {"visible", (read_integer(*blend.sdna, collection, "flags").value_or(0) & BONE_COLLECTION_VISIBLE) != 0}, + {"solo", (read_integer(*blend.sdna, collection, "flags").value_or(0) & BONE_COLLECTION_SOLO) != 0}, + {"boneIds", std::move(members)}}); + } + return json{{"id", armature_id}, + {"name", read_id_name(*blend.sdna, armature)}, + {"bones", std::move(bones)}, + {"boneCollections", std::move(bone_collections)}}; +} + +std::vector read_raw_int_array(const ParsedBlend &blend, + const uint64_t pointer, + const size_t count) +{ + const std::optional span = raw_block_for_pointer(blend, pointer); + if (!span || span->offset > span->block->bytes.size() || + count > (span->block->bytes.size() - span->offset) / sizeof(int32_t)) + { + return {}; + } + std::vector values(count); + memcpy(values.data(), span->block->bytes.data() + span->offset, values.size() * sizeof(int32_t)); + return values; +} + +std::vector read_raw_byte_array(const ParsedBlend &blend, + const uint64_t pointer, + const size_t count) +{ + const std::optional span = raw_block_for_pointer(blend, pointer); + if (!span || span->offset > span->block->bytes.size() || + count > span->block->bytes.size() - span->offset) + { + return {}; + } + std::vector values(count); + memcpy(values.data(), span->block->bytes.data() + span->offset, count); + return values; +} + +std::string read_raw_string(const ParsedBlend &blend, + const uint64_t pointer, + const size_t maximum_length = 1024) +{ + const std::optional span = raw_block_for_pointer(blend, pointer); + if (!span || span->offset >= span->block->bytes.size()) return {}; + const size_t available = std::min(maximum_length, span->block->bytes.size() - span->offset); + const char *data = reinterpret_cast(span->block->bytes.data() + span->offset); + return std::string(data, strnlen(data, available)); +} + +std::optional script_source_from_record(const ParsedBlend &blend, + const ElementRef &element, + const IdRecord &record) +{ + const std::vector lines = linked_list_elements(blend, element, "lines"); + if (lines.empty() || lines.size() > 65536) return std::nullopt; + std::string source; + for (size_t index = 0; index < lines.size(); index++) { + const int64_t length = read_integer(*blend.sdna, lines[index], "len").value_or(-1); + const std::optional pointer = read_pointer(*blend.sdna, lines[index], "line"); + const size_t separator_bytes = index > 0 ? 1 : 0; + if (length < 0 || length > int64_t(MAX_SCRIPT_SOURCE_BYTES) || !pointer || + size_t(length) > MAX_SCRIPT_SOURCE_BYTES - separator_bytes || + source.size() > MAX_SCRIPT_SOURCE_BYTES - separator_bytes - size_t(length)) + { + return std::nullopt; + } + const std::vector bytes = read_raw_byte_array(blend, *pointer, size_t(length)); + if (bytes.size() != size_t(length) || + std::find(bytes.begin(), bytes.end(), uint8_t(0)) != bytes.end() || + (!bytes.empty() && + BLI_str_utf8_invalid_byte(reinterpret_cast(bytes.data()), bytes.size()) != -1)) + { + return std::nullopt; + } + if (index > 0) source.push_back('\n'); + source.append(reinterpret_cast(bytes.data()), bytes.size()); + } + const std::optional path_pointer = read_pointer(*blend.sdna, element, "filepath"); + const std::string source_path = path_pointer ? read_raw_string(blend, *path_pointer, 2049) : + std::string(); + if (!source_path.empty()) { + const bool project_path = source_path.rfind("//", 0) == 0 && source_path.size() > 2 && + source_path.size() <= 2050 && + source_path.find('\\') == std::string::npos && + source_path.find('%') == std::string::npos && + source_path.find("/../") == std::string::npos && + source_path.find("//", 2) == std::string::npos; + if (!project_path) return std::nullopt; + } + const int64_t flags = read_integer(*blend.sdna, element, "flags").value_or(0); + const bool module_autorun_requested = (flags & (1 << 4)) != 0; + json result = {{"id", record.id}, + {"name", record.name}, + {"source", source}, + {"sourceSha256", sha256_hex(source)}, + {"byteLength", source.size()}, + {"lineCount", lines.size()}, + {"internal", source_path.empty()}, + {"moduleAutorunRequested", module_autorun_requested}, + {"readOnly", true}, + {"executionStatus", "BLOCKED"}, + {"errorCode", module_autorun_requested ? "SCRIPT_POLICY_DENIED" : + "SCRIPT_SANDBOX_UNAVAILABLE"}}; + if (!source_path.empty()) result["sourcePath"] = source_path; + return result; +} + +std::vector read_raw_pointer_array(const ParsedBlend &blend, + const uint64_t pointer, + const size_t count) +{ + const std::optional span = raw_block_for_pointer(blend, pointer); + const size_t pointer_size = blend.sdna ? size_t(blend.sdna->pointer_size) : sizeof(void *); + if (pointer_size != 4 && pointer_size != 8) return {}; + if (!span || span->offset > span->block->bytes.size() || + count > (span->block->bytes.size() - span->offset) / pointer_size) + { + return {}; + } + std::vector values(count); + for (size_t index = 0; index < count; index++) { + uint64_t value = 0; + memcpy(&value, + span->block->bytes.data() + span->offset + index * pointer_size, + pointer_size); + values[index] = value; + } + return values; +} + +std::optional raw_array_element(const ParsedBlend &blend, + const uint64_t pointer, + const std::string &type_name, + const size_t index) +{ + const std::optional span = raw_block_for_pointer(blend, pointer); + const int struct_index = DNA_struct_find_index_without_alias(blend.sdna.get(), type_name.c_str()); + if (!span || struct_index < 0 || span->offset > span->block->bytes.size()) return std::nullopt; + const int struct_size = DNA_struct_size(blend.sdna.get(), struct_index); + if (struct_size <= 0 || index > (span->block->bytes.size() - span->offset) / size_t(struct_size)) { + return std::nullopt; + } + const size_t offset = span->offset + index * size_t(struct_size); + if (offset > span->block->bytes.size() || size_t(struct_size) > span->block->bytes.size() - offset) { + return std::nullopt; + } + return ElementRef{span->block, offset, type_name}; +} + +json non_mesh_attributes_from_storage(const ParsedBlend &blend, + const ElementRef &owner, + const size_t point_count, + const size_t curve_count) +{ + json result = {{"attributes", json::array()}, {"attributeValues", json::array()}}; + const std::optional storage = embedded_element( + *blend.sdna, owner, "attribute_storage"); + if (!storage) return result; + const std::optional attributes_pointer = read_pointer( + *blend.sdna, *storage, "dna_attributes"); + const int64_t attribute_count = read_integer( + *blend.sdna, *storage, "dna_attributes_num").value_or(0); + const int attribute_struct_index = DNA_struct_find_index_without_alias( + blend.sdna.get(), "Attribute"); + const int attribute_struct_size = attribute_struct_index >= 0 ? + DNA_struct_size(blend.sdna.get(), attribute_struct_index) : + 0; + if (!attributes_pointer || attribute_count <= 0 || attribute_count > 256 || + attribute_struct_size <= 0) + { + return result; + } + + for (int64_t index = 0; index < attribute_count; index++) { + const std::optional attribute = element_for_pointer_after( + blend, + *attributes_pointer + uint64_t(attribute_struct_size * index), + owner.block, + "Attribute"); + if (!attribute) break; + const int64_t data_type = read_integer(*blend.sdna, *attribute, "data_type").value_or(-1); + const int64_t domain = read_integer(*blend.sdna, *attribute, "domain").value_or(-1); + const int64_t storage_type = read_integer( + *blend.sdna, *attribute, "storage_type").value_or(0); + const std::string name = read_raw_string( + blend, read_pointer(*blend.sdna, *attribute, "name").value_or(0)); + const char *domain_name = domain == 0 ? "POINT" : domain == 4 ? "CURVE" : + domain == 5 ? "INSTANCE" : nullptr; + const char *type_name = data_type == 0 ? "BOOL" : data_type == 3 ? "INT" : + data_type == 5 ? "FLOAT" : data_type == 6 ? "FLOAT2" : + data_type == 7 ? "FLOAT3" : data_type == 9 ? "BYTE_COLOR" : + data_type == 10 ? "FLOAT_COLOR" : nullptr; + const int components = data_type == 6 ? 2 : data_type == 7 ? 3 : + (data_type == 9 || data_type == 10) ? 4 : 1; + const size_t domain_count = domain == 0 ? point_count : domain == 4 ? curve_count : + domain == 5 ? 1 : 0; + const std::optional container_pointer = read_pointer( + *blend.sdna, *attribute, "data"); + if (name.empty() || domain_name == nullptr || type_name == nullptr || domain_count == 0 || + !container_pointer) + { + continue; + } + const std::optional container = element_for_pointer_after( + blend, *container_pointer, attribute->block); + if (!container) continue; + const std::optional data_pointer = read_pointer(*blend.sdna, *container, "data"); + const size_t stored_count = storage_type == 1 ? 1 : size_t(std::max( + 0, read_integer(*blend.sdna, *container, "size").value_or(0))); + if (!data_pointer || stored_count == 0 || (storage_type != 1 && stored_count != domain_count)) { + continue; + } + + json values = json::array(); + if (data_type == 0 || data_type == 9) { + const std::vector raw = read_raw_byte_array( + blend, *data_pointer, stored_count * size_t(components)); + for (const uint8_t value : raw) values.push_back(value); + } + else if (data_type == 3) { + const std::vector raw = read_raw_int_array( + blend, *data_pointer, stored_count * size_t(components)); + for (const int32_t value : raw) values.push_back(value); + } + else { + const std::vector raw = read_raw_float_array( + blend, *data_pointer, stored_count, size_t(components)); + for (const float value : raw) values.push_back(value); + } + if (values.size() != stored_count * size_t(components)) continue; + if (storage_type == 1 && domain_count > 1) { + const json single = values; + values = json::array(); + for (size_t element_index = 0; element_index < domain_count; element_index++) { + for (const json &value : single) values.push_back(value); + } + } + const json descriptor = {{"name", name}, + {"domain", domain_name}, + {"dataType", type_name}, + {"components", components}}; + result["attributes"].push_back(descriptor); + if (name == "position" && domain == 0 && data_type == 7) { + result["controlPoints"] = values; + } + else if (name == "radius" && domain == 0 && data_type == 5) { + result["radii"] = values; + } + else { + json payload = descriptor; + payload["values"] = std::move(values); + result["attributeValues"].push_back(std::move(payload)); + } + } + return result; +} + +json non_mesh_data_from_record(const ParsedBlend &blend, + const ElementRef &element, + const IdRecord &record, + const std::unordered_map &ids_by_pointer) +{ + const std::string type_name = record.type_name == "Curve" ? "CURVE" : + record.type_name == "MetaBall" ? "METABALL" : + record.type_name == "PointCloud" ? "POINT_CLOUD" : + record.type_name == "Curves" ? "CURVES" : + record.type_name == "Volume" ? "VOLUME" : "CURVE"; + json data = { {"id", record.id}, + {"name", record.name}, + {"type", type_name}, + {"geometryStatus", "summary-only"}, + {"pointCount", 0}, + {"splineCount", 0} }; + if (record.type_name == "Curve") { + const int64_t curve_type = read_integer(*blend.sdna, element, "type").value_or(2); + if (curve_type == 3) data["type"] = "SURFACE"; + else if (curve_type == 4) data["type"] = "FONT"; + const std::vector nurbs = linked_list_elements(blend, element, "nurb"); + std::vector points; + json offsets = json::array({0}); + json spline_types = json::array(); + json cyclic_u = json::array(); + json cyclic_v = json::array(); + json handle_types = json::array(); + json handle_points = json::array(); + json handle_point_indices = json::array(); + json spline_dimensions = json::array(); + json point_weights = json::array(); + bool complete = true; + for (const ElementRef &nurb : nurbs) { + const int64_t pntsu = std::clamp(read_integer(*blend.sdna, nurb, "pntsu").value_or(0), 0, int64_t(MAX_NON_MESH_POINTS)); + const int64_t pntsv = std::clamp(read_integer(*blend.sdna, nurb, "pntsv").value_or(1), 1, int64_t(MAX_NON_MESH_POINTS)); + const size_t point_count = size_t(pntsu) * size_t(pntsv); + if (point_count == 0 || points.size() / 3 + point_count > MAX_NON_MESH_POINTS) { + complete = false; + break; + } + const std::optional bezier_pointer = read_pointer(*blend.sdna, nurb, "bezt"); + const std::optional bpoint_pointer = read_pointer(*blend.sdna, nurb, "bp"); + const bool has_bezier = bezier_pointer.value_or(0) != 0; + const bool has_bpoint = bpoint_pointer.value_or(0) != 0; + const int64_t spline_type = read_integer(*blend.sdna, nurb, "type").value_or(0); + const bool is_nurbs = spline_type == 4; + spline_dimensions.push_back({{"u", pntsu}, {"v", pntsv}, + {"orderU", is_nurbs ? read_integer(*blend.sdna, nurb, "orderu").value_or(0) : 0}, + {"orderV", is_nurbs && pntsv > 1 ? read_integer(*blend.sdna, nurb, "orderv").value_or(0) : 0}}); + spline_types.push_back(spline_type == 1 ? "BEZIER" : spline_type == 4 ? "NURBS" : "POLY"); + cyclic_u.push_back((read_integer(*blend.sdna, nurb, "flagu").value_or(0) & 1) != 0); + cyclic_v.push_back((read_integer(*blend.sdna, nurb, "flagv").value_or(0) & 1) != 0); + for (size_t index = 0; index < point_count; index++) { + std::optional point; + if (has_bezier) point = raw_array_element(blend, *bezier_pointer, "BezTriple", index); + else if (has_bpoint) point = raw_array_element(blend, *bpoint_pointer, "BPoint", index); + if (!point) { + complete = false; + break; + } + const std::vector values = read_float_array(*blend.sdna, *point, "vec", has_bezier ? 9 : 4); + if (values.size() < (has_bezier ? 9 : 3)) { + complete = false; + break; + } + const size_t global_point_index = points.size() / 3; + const size_t offset = has_bezier ? 3 : 0; + points.insert(points.end(), {values[offset], values[offset + 1], values[offset + 2]}); + point_weights.push_back(has_bezier ? 1.0f : values[3]); + if (has_bezier) { + handle_point_indices.push_back(global_point_index); + handle_types.push_back(read_integer(*blend.sdna, *point, "h1").value_or(1)); + handle_types.push_back(read_integer(*blend.sdna, *point, "h2").value_or(1)); + handle_points.push_back(values[0]); + handle_points.push_back(values[1]); + handle_points.push_back(values[2]); + handle_points.push_back(values[6]); + handle_points.push_back(values[7]); + handle_points.push_back(values[8]); + } + } + if (!complete) break; + offsets.push_back(points.size() / 3); + } + data["splineCount"] = nurbs.size(); + data["pointCount"] = points.size() / 3; + data["resolution"] = read_integer(*blend.sdna, element, "resolu").value_or(12); + if (!spline_types.empty()) { + data["splineTypes"] = std::move(spline_types); + data["cyclicU"] = std::move(cyclic_u); + data["cyclicV"] = std::move(cyclic_v); + if (!handle_types.empty()) data["handleTypes"] = std::move(handle_types); + if (!handle_points.empty()) data["handlePoints"] = std::move(handle_points); + if (!handle_point_indices.empty()) data["handlePointIndices"] = std::move(handle_point_indices); + data["splineDimensions"] = std::move(spline_dimensions); + data["pointWeights"] = std::move(point_weights); + } + if (complete && !points.empty()) { + data["geometryStatus"] = "available"; + data["controlPoints"] = std::move(points); + data["splineOffsets"] = std::move(offsets); + } + else if (!nurbs.empty()) { + data["geometryStatus"] = "blocked"; + data["errorCode"] = "NON_MESH_DATA_BUDGET_EXCEEDED"; + } + const std::optional text_pointer = read_pointer(*blend.sdna, element, "str"); + const std::string text = text_pointer ? read_raw_string(blend, *text_pointer, 4096) : std::string(); + if (text_pointer && !text.empty()) { + data["type"] = "FONT"; + data["text"] = text; + } + if (data.value("type", "") == "FONT") { + json font_links; + for (const auto &[member, field] : std::array, 4>{ + {{"vfont", "regular"}, {"vfontb", "bold"}, {"vfonti", "italic"}, {"vfontbi", "boldItalic"}}}) { + const std::optional pointer = read_pointer(*blend.sdna, element, member); + if (!pointer || *pointer == 0) continue; + const auto id = ids_by_pointer.find(*pointer); + if (id != ids_by_pointer.end()) font_links[field] = id->second; + } + if (font_links.size() == 4) data["fontLinks"] = std::move(font_links); + const int64_t alignment = read_integer(*blend.sdna, element, "spacemode").value_or(0); + const int64_t align_y = read_integer(*blend.sdna, element, "align_y").value_or(0); + data["fontProperties"] = { + {"alignment", alignment == 1 ? "CENTER" : alignment == 2 ? "RIGHT" : alignment == 3 ? "JUSTIFY" : alignment == 4 ? "FLUSH" : "LEFT"}, + {"alignY", align_y == 1 ? "TOP" : align_y == 2 ? "CENTER" : align_y == 3 ? "BOTTOM_BASELINE" : align_y == 4 ? "BOTTOM" : "TOP_BASELINE"}, + {"extrude", std::max(0.0f, read_float(*blend.sdna, element, "extrude").value_or(0.0f))}, + {"bevelDepth", std::max(0.0f, read_float(*blend.sdna, element, "bevel_radius").value_or(0.0f))}, + {"bevelResolution", std::clamp(read_integer(*blend.sdna, element, "bevresol").value_or(4), 0, 64)}, + {"offset", std::max(0.0f, read_float(*blend.sdna, element, "offset").value_or(0.0f))}, + {"spacing", std::clamp(read_float(*blend.sdna, element, "spacing").value_or(1.0f), 0.0f, 10.0f)}, + {"lineDistance", std::clamp(read_float(*blend.sdna, element, "linedist").value_or(1.0f), 0.0f, 10.0f)}, + {"wordSpace", std::clamp(read_float(*blend.sdna, element, "wordspace").value_or(1.0f), 0.0f, 100.0f)}, + {"shear", std::clamp(read_float(*blend.sdna, element, "shear").value_or(0.0f), -10.0f, 10.0f)}, + {"fontSize", std::clamp(read_float(*blend.sdna, element, "fsize").value_or(1.0f), 0.001f, 1000.0f)}, + {"offsetX", std::clamp(read_float(*blend.sdna, element, "xof").value_or(0.0f), -100000.0f, 100000.0f)}, + {"offsetY", std::clamp(read_float(*blend.sdna, element, "yof").value_or(0.0f), -100000.0f, 100000.0f)}}; + const size_t character_count = size_t(std::clamp( + read_integer(*blend.sdna, element, "len_char32").value_or(0), 0, 4096)); + const std::optional character_pointer = read_pointer( + *blend.sdna, element, "strinfo"); + if (character_pointer && *character_pointer != 0) { + json characters = json::array(); + for (size_t index = 0; index < character_count; index++) { + const std::optional character = raw_array_element( + blend, *character_pointer, "CharInfo", index); + if (!character) { + characters = json::array(); + break; + } + characters.push_back({ + {"kern", std::clamp(read_float(*blend.sdna, *character, "kern").value_or(0.0f), + -1000.0f, 1000.0f)}, + {"materialIndex", std::clamp( + read_integer(*blend.sdna, *character, "mat_nr").value_or(0), + 0, 32767)}, + {"styleFlags", read_integer(*blend.sdna, *character, "flag").value_or(0) & 0x17}}); + } + if (characters.size() == character_count) data["fontCharacters"] = std::move(characters); + } + const size_t text_box_count = size_t(std::clamp( + read_integer(*blend.sdna, element, "totbox").value_or(0), 0, 256)); + const std::optional text_box_pointer = read_pointer(*blend.sdna, element, "tb"); + if (text_box_count > 0 && text_box_pointer && *text_box_pointer != 0) { + json text_boxes = json::array(); + for (size_t index = 0; index < text_box_count; index++) { + const std::optional text_box = raw_array_element( + blend, *text_box_pointer, "TextBox", index); + if (!text_box) { + text_boxes = json::array(); + break; + } + text_boxes.push_back({ + {"x", std::clamp(read_float(*blend.sdna, *text_box, "x").value_or(0.0f), -100000.0f, 100000.0f)}, + {"y", std::clamp(read_float(*blend.sdna, *text_box, "y").value_or(0.0f), -100000.0f, 100000.0f)}, + {"width", std::clamp(read_float(*blend.sdna, *text_box, "w").value_or(0.0f), 0.0f, 100000.0f)}, + {"height", std::clamp(read_float(*blend.sdna, *text_box, "h").value_or(0.0f), 0.0f, 100000.0f)}}); + } + if (text_boxes.size() == text_box_count) { + data["fontTextBoxes"] = std::move(text_boxes); + data["activeFontTextBox"] = std::clamp( + read_integer(*blend.sdna, element, "actbox").value_or(1) - 1, + 0, int64_t(text_box_count - 1)); + } + } + } + } + else if (record.type_name == "MetaBall") { + json elements = json::array(); + for (const ElementRef &item : linked_list_elements(blend, element, "elems")) { + elements.push_back({{"type", read_integer(*blend.sdna, item, "type").value_or(0)}, + {"position", json::array({read_float(*blend.sdna, item, "x").value_or(0.0f), + read_float(*blend.sdna, item, "y").value_or(0.0f), + read_float(*blend.sdna, item, "z").value_or(0.0f)})}, + {"radius", read_float(*blend.sdna, item, "rad").value_or(0.0f)}, + {"scale", json::array({read_float(*blend.sdna, item, "expx").value_or(1.0f), + read_float(*blend.sdna, item, "expy").value_or(1.0f), + read_float(*blend.sdna, item, "expz").value_or(1.0f)})}}); + } + data["pointCount"] = elements.size(); + data["elements"] = std::move(elements); + data["geometryStatus"] = "available"; + } + else if (record.type_name == "PointCloud") { + const int64_t point_count = std::max( + 0, read_integer(*blend.sdna, element, "totpoint").value_or(0)); + data["pointCount"] = point_count; + if (point_count > int64_t(MAX_NON_MESH_POINTS)) { + data["geometryStatus"] = "blocked"; + data["errorCode"] = "NON_MESH_DATA_BUDGET_EXCEEDED"; + } + else if (point_count > 0) { + const json attributes = non_mesh_attributes_from_storage( + blend, element, size_t(point_count), 0); + data["attributes"] = attributes.at("attributes"); + if (attributes.contains("controlPoints") && + attributes.at("controlPoints").size() == size_t(point_count) * 3) + { + data["controlPoints"] = attributes.at("controlPoints"); + if (attributes.contains("radii")) data["radii"] = attributes.at("radii"); + if (!attributes.at("attributeValues").empty()) { + data["attributeValues"] = attributes.at("attributeValues"); + } + data["geometryStatus"] = "available"; + } + else { + data["geometryStatus"] = "blocked"; + data["errorCode"] = "NON_MESH_DATA_UNSUPPORTED"; + } + } + } + else if (record.type_name == "Curves") { + if (const std::optional geometry = embedded_element(*blend.sdna, element, "geometry")) { + const int64_t point_count = std::max( + 0, read_integer(*blend.sdna, *geometry, "point_num").value_or(0)); + const int64_t curve_count = std::max( + 0, read_integer(*blend.sdna, *geometry, "curve_num").value_or(0)); + data["pointCount"] = point_count; + data["splineCount"] = curve_count; + if (read_pointer(*blend.sdna, element, "surface").value_or(0) != 0) { + data["type"] = "HAIR"; + } + if (point_count > int64_t(MAX_NON_MESH_POINTS) || + curve_count > int64_t(MAX_NON_MESH_POINTS)) + { + data["geometryStatus"] = "blocked"; + data["errorCode"] = "NON_MESH_DATA_BUDGET_EXCEEDED"; + } + else if (point_count > 0 && curve_count > 0) { + const json attributes = non_mesh_attributes_from_storage( + blend, *geometry, size_t(point_count), size_t(curve_count)); + const std::optional offsets_pointer = read_pointer( + *blend.sdna, *geometry, "curve_offsets"); + const std::vector raw_offsets = offsets_pointer ? + read_raw_int_array( + blend, + *offsets_pointer, + size_t(curve_count) + 1) : + std::vector(); + bool offsets_valid = raw_offsets.size() == size_t(curve_count) + 1 && + raw_offsets.front() == 0 && + raw_offsets.back() == point_count; + for (size_t index = 1; offsets_valid && index < raw_offsets.size(); index++) { + offsets_valid = raw_offsets[index] > raw_offsets[index - 1]; + } + if (attributes.contains("controlPoints") && + attributes.at("controlPoints").size() == size_t(point_count) * 3 && + offsets_valid) + { + data["controlPoints"] = attributes.at("controlPoints"); + data["splineOffsets"] = raw_offsets; + data["attributes"] = attributes.at("attributes"); + if (attributes.contains("radii")) data["radii"] = attributes.at("radii"); + if (!attributes.at("attributeValues").empty()) { + data["attributeValues"] = attributes.at("attributeValues"); + } + data["geometryStatus"] = "available"; + } + else { + data["geometryStatus"] = "blocked"; + data["errorCode"] = "NON_MESH_DATA_UNSUPPORTED"; + } + } + } + } + else if (record.type_name == "Volume") { + const std::string path = read_string(*blend.sdna, element, "filepath"); + data["resourceKind"] = "OPENVDB"; + json properties = { + {"displayDensity", 1.0f}, + {"interpolation", "LINEAR"}, + {"stepSize", 0.0f}, + {"velocityGrid", read_string(*blend.sdna, element, "velocity_grid")}, + {"velocityScale", read_float(*blend.sdna, element, "velocity_scale").value_or(1.0f)}, + }; + if (const std::optional display = embedded_element(*blend.sdna, element, "display")) { + properties["displayDensity"] = read_float(*blend.sdna, *display, "density").value_or(1.0f); + const int64_t interpolation = read_integer(*blend.sdna, *display, "interpolation_method").value_or(0); + properties["interpolation"] = interpolation == 2 ? "NEAREST" : "LINEAR"; + } + if (const std::optional render = embedded_element(*blend.sdna, element, "render")) { + properties["stepSize"] = read_float(*blend.sdna, *render, "step_size").value_or(0.0f); + } + data["volumeProperties"] = std::move(properties); + const std::optional packed_file = read_pointer(*blend.sdna, element, "packedfile"); + const std::vector packed_bytes = packed_file ? + packed_file_bytes(blend, *packed_file) : + std::vector(); + if (!packed_bytes.empty()) data["resourceByteLength"] = packed_bytes.size(); + if (!path.empty()) { + data["sourcePath"] = path; + data["geometryStatus"] = "blocked"; + data["errorCode"] = packed_bytes.empty() ? "NON_MESH_RESOURCE_MISSING" : + "NON_MESH_DATA_UNSUPPORTED"; + } + } + return data; +} + +json fcurve_channel(const ParsedBlend &blend, const ElementRef &fcurve) +{ + const std::optional path_pointer = read_pointer(*blend.sdna, fcurve, "rna_path"); + const std::string path = path_pointer ? read_raw_string(blend, *path_pointer, 2048) : std::string(); + const int64_t array_index = read_integer(*blend.sdna, fcurve, "array_index").value_or(-1); + const int64_t flags = read_integer(*blend.sdna, fcurve, "flag").value_or(0); + const int64_t extrapolation = read_integer(*blend.sdna, fcurve, "extend").value_or(FCURVE_EXTRAPOLATE_CONSTANT); + const std::string channel_path = path.empty() || array_index < 0 ? + path : + path + "[" + std::to_string(array_index) + "]"; + json keyframes = json::array(); + float frame_start = std::numeric_limits::infinity(); + float frame_end = -std::numeric_limits::infinity(); + + const std::optional bezier_pointer = read_pointer(*blend.sdna, fcurve, "bezt"); + const int64_t point_count = std::clamp(read_integer(*blend.sdna, fcurve, "totvert").value_or(0), 0, 100000); + if (bezier_pointer && point_count > 0) { + for (int64_t index = 0; index < point_count; index++) { + const std::optional point = raw_array_element(blend, *bezier_pointer, "BezTriple", size_t(index)); + if (!point) continue; + const std::vector values = read_float_array(*blend.sdna, *point, "vec", 9); + if (values.size() < 5) continue; + const float frame = values[3]; + const float value = values[4]; + if (!std::isfinite(frame) || !std::isfinite(value)) continue; + const int interpolation = int(read_integer(*blend.sdna, *point, "ipo").value_or(2)); + const bool selected = (read_integer(*blend.sdna, *point, "f2").value_or(0) & BEZT_FLAG_SELECT) != 0; + const int easing = int(read_integer(*blend.sdna, *point, "easing").value_or(BEZT_IPO_EASE_AUTO)); + const int handle_left = int(read_integer(*blend.sdna, *point, "h1").value_or(HD_FREE)); + const int handle_right = int(read_integer(*blend.sdna, *point, "h2").value_or(HD_FREE)); + const int keyframe_type = int(read_integer(*blend.sdna, *point, "hide").value_or(BEZT_KEYTYPE_KEYFRAME)); + const char *interpolation_name = interpolation == 0 ? "CONSTANT" : interpolation == 1 ? "LINEAR" : "BEZIER"; + const char *easing_name = easing == BEZT_IPO_EASE_IN ? "EASE_IN" : + easing == BEZT_IPO_EASE_OUT ? "EASE_OUT" : + easing == BEZT_IPO_EASE_IN_OUT ? "EASE_IN_OUT" : "AUTO"; + const char *handle_name = handle_left == HD_VECT && handle_right == HD_VECT ? "VECTOR" : + handle_left == HD_ALIGN && handle_right == HD_ALIGN ? "ALIGNED" : + handle_left == HD_AUTO_ANIM && handle_right == HD_AUTO_ANIM ? "AUTO_CLAMPED" : + handle_left == HD_AUTO && handle_right == HD_AUTO ? "AUTO" : "FREE"; + const char *keyframe_type_name = keyframe_type == BEZT_KEYTYPE_EXTREME ? "EXTREME" : + keyframe_type == BEZT_KEYTYPE_BREAKDOWN ? "BREAKDOWN" : + keyframe_type == BEZT_KEYTYPE_JITTER ? "JITTER" : + keyframe_type == BEZT_KEYTYPE_MOVEHOLD ? "MOVING_HOLD" : + keyframe_type == BEZT_KEYTYPE_GENERATED ? "GENERATED" : "KEYFRAME"; + keyframes.push_back({{"frame", frame}, + {"value", json::array({value})}, + {"interpolation", interpolation_name}, + {"easing", easing_name}, + {"handleType", handle_name}, + {"keyframeType", keyframe_type_name}, + {"selected", selected}}); + frame_start = std::min(frame_start, frame); + frame_end = std::max(frame_end, frame); + } + } + if (keyframes.empty()) { + const std::optional sample_pointer = read_pointer(*blend.sdna, fcurve, "fpt"); + if (sample_pointer && point_count > 0) { + for (int64_t index = 0; index < point_count; index++) { + const std::optional point = raw_array_element(blend, *sample_pointer, "FPoint", size_t(index)); + if (!point) continue; + const std::vector values = read_float_array(*blend.sdna, *point, "vec", 2); + if (values.size() < 2 || !std::isfinite(values[0]) || !std::isfinite(values[1])) continue; + keyframes.push_back({{"frame", values[0]}, {"value", json::array({values[1]})}}); + frame_start = std::min(frame_start, values[0]); + frame_end = std::max(frame_end, values[0]); + } + } + } + std::string channel_interpolation; + for (const json &keyframe : keyframes) { + const std::string interpolation = keyframe.value("interpolation", "BEZIER"); + if (channel_interpolation.empty()) channel_interpolation = interpolation; + else if (channel_interpolation != interpolation) channel_interpolation = "MIXED"; + } + json result = { {"path", channel_path}, + {"editable", (flags & FCURVE_PROTECTED) == 0}, + {"enabled", (flags & FCURVE_DISABLED) == 0}, + {"selected", (flags & FCURVE_SELECTED) != 0}, + {"interpolation", channel_interpolation.empty() ? "BEZIER" : channel_interpolation}, + {"extrapolation", extrapolation == FCURVE_EXTRAPOLATE_LINEAR ? "LINEAR" : "CONSTANT"}, + {"keyframes", std::move(keyframes)}, + {"frameStart", std::isfinite(frame_start) ? frame_start : 0.0f}, + {"frameEnd", std::isfinite(frame_end) ? frame_end : 0.0f} }; + if (const std::optional group_pointer = read_pointer(*blend.sdna, fcurve, "grp")) { + if (const std::optional group = element_for_pointer(blend, *group_pointer)) { + const int64_t group_flags = read_integer(*blend.sdna, *group, "flag").value_or(0); + result["group"] = read_string(*blend.sdna, *group, "name"); + result["expanded"] = (group_flags & AGRP_EXPANDED) != 0; + } + } + return result; +} + +const char *driver_type_name(const int64_t type) +{ + switch (type) { + case 0: + return "AVERAGE"; + case 1: + return "SCRIPTED"; + case 2: + return "SUM"; + case 3: + return "MIN"; + case 4: + return "MAX"; + default: + return "UNKNOWN"; + } +} + +json driver_fcurve(const ParsedBlend &blend, const ElementRef &fcurve) +{ + const std::optional driver_pointer = read_pointer(*blend.sdna, fcurve, "driver"); + if (!driver_pointer) return json(); + const std::optional driver = element_for_pointer(blend, *driver_pointer); + if (!driver) return json(); + const std::optional path_pointer = read_pointer(*blend.sdna, fcurve, "rna_path"); + const std::string path = path_pointer ? read_raw_string(blend, *path_pointer, 2048) : std::string(); + const int64_t array_index = read_integer(*blend.sdna, fcurve, "array_index").value_or(-1); + const int64_t fcurve_flags = read_integer(*blend.sdna, fcurve, "flag").value_or(0); + const int64_t driver_type = read_integer(*blend.sdna, *driver, "type").value_or(-1); + const int64_t driver_flags = read_integer(*blend.sdna, *driver, "flag").value_or(0); + json variables = json::array(); + for (const ElementRef &variable : linked_list_elements(blend, *driver, "variables")) { + variables.push_back({{"name", read_string(*blend.sdna, variable, "name")}, + {"type", read_integer(*blend.sdna, variable, "type").value_or(-1)}, + {"targetCount", std::clamp( + read_integer(*blend.sdna, variable, "num_targets").value_or(0), + 0, + 8)}}); + } + return { {"path", path}, + {"arrayIndex", array_index}, + {"editable", (fcurve_flags & FCURVE_PROTECTED) == 0}, + {"enabled", (fcurve_flags & FCURVE_DISABLED) == 0}, + {"expression", read_string(*blend.sdna, *driver, "expression")}, + {"type", driver_type_name(driver_type)}, + {"typeCode", driver_type}, + {"flags", driver_flags}, + {"influence", read_float(*blend.sdna, *driver, "influence").value_or(1.0f)}, + {"variables", std::move(variables)}}; +} + +void append_fcurve_channels(const ParsedBlend &blend, + const std::vector &fcurves, + json &channels, + float &frame_start, + float &frame_end) +{ + for (const ElementRef &fcurve : fcurves) { + json channel = fcurve_channel(blend, fcurve); + if (!channel.contains("keyframes") || channel["keyframes"].empty()) continue; + frame_start = std::min(frame_start, channel.value("frameStart", frame_start)); + frame_end = std::max(frame_end, channel.value("frameEnd", frame_end)); + channel.erase("frameStart"); + channel.erase("frameEnd"); + channels.push_back(std::move(channel)); + } +} + +void append_action_animation(const ParsedBlend &blend, + const std::string &target_id, + const uint64_t action_pointer, + json &animations, + std::unordered_set &visited, + const std::optional slot_handle = std::nullopt, + const std::string &slot_identifier_hint = {}) +{ + const std::optional action = element_for_pointer(blend, action_pointer); + if (!action) return; + const std::string visit_key = target_id + "|" + std::to_string(action_pointer); + if (!visited.insert(visit_key).second) return; + + json channels = json::array(); + json markers = json::array(); + for (const ElementRef &marker : linked_list_elements(blend, *action, "markers")) { + markers.push_back({{"name", read_string(*blend.sdna, marker, "name")}, + {"frame", read_integer(*blend.sdna, marker, "frame").value_or(0)}}); + } + const float action_frame_start = read_float(*blend.sdna, *action, "frame_start").value_or(0.0f); + const float action_frame_end = read_float(*blend.sdna, *action, "frame_end").value_or(0.0f); + float frame_start = std::numeric_limits::infinity(); + float frame_end = -std::numeric_limits::infinity(); + append_fcurve_channels(blend, linked_list_elements(blend, *action, "curves"), channels, frame_start, frame_end); + + const int64_t layer_count = std::clamp(read_integer(*blend.sdna, *action, "layer_array_num").value_or(0), 0, 10000); + const std::optional layer_pointer = read_pointer(*blend.sdna, *action, "layer_array"); + const int64_t data_count = std::clamp(read_integer(*blend.sdna, *action, "strip_keyframe_data_array_num").value_or(0), 0, 10000); + const std::optional data_pointer = read_pointer(*blend.sdna, *action, "strip_keyframe_data_array"); + const std::vector data_pointers = data_pointer && data_count > 0 ? + read_raw_pointer_array(blend, *data_pointer, size_t(data_count)) : + std::vector(); + const bool filter_slot = slot_handle.has_value() && *slot_handle != 0; + std::optional slot_identifier; + int64_t slot_count = 0; + const int64_t action_slot_count = std::clamp( + read_integer(*blend.sdna, *action, "slot_array_num").value_or(0), 0, 10000); + const std::optional action_slot_pointer = read_pointer(*blend.sdna, *action, "slot_array"); + if (action_slot_pointer && action_slot_count > 0) { + const std::vector action_slot_pointers = read_raw_pointer_array( + blend, *action_slot_pointer, size_t(action_slot_count)); + for (const uint64_t action_slot_value : action_slot_pointers) { + const std::optional action_slot = element_for_pointer(blend, action_slot_value); + if (!action_slot) continue; + slot_count++; + if (slot_handle && read_integer(*blend.sdna, *action_slot, "handle").value_or(0) == *slot_handle) { + slot_identifier = read_string(*blend.sdna, *action_slot, "identifier"); + } + } + } + if (!slot_identifier && !slot_identifier_hint.empty()) slot_identifier = slot_identifier_hint; + if (layer_pointer && layer_count > 0) { + const std::vector layer_pointers = read_raw_pointer_array(blend, *layer_pointer, size_t(layer_count)); + for (const uint64_t layer_value : layer_pointers) { + const std::optional layer = element_for_pointer(blend, layer_value); + if (!layer) continue; + const int64_t strip_count = std::clamp(read_integer(*blend.sdna, *layer, "strip_array_num").value_or(0), 0, 10000); + const std::optional strip_pointer = read_pointer(*blend.sdna, *layer, "strip_array"); + if (!strip_pointer) continue; + const std::vector strip_pointers = read_raw_pointer_array(blend, *strip_pointer, size_t(strip_count)); + for (const uint64_t strip_value : strip_pointers) { + const std::optional strip = element_for_pointer(blend, strip_value); + if (!strip || read_integer(*blend.sdna, *strip, "strip_type").value_or(-1) != 0) continue; + const int64_t data_index = read_integer(*blend.sdna, *strip, "data_index").value_or(-1); + if (data_index < 0 || data_index >= int64_t(data_pointers.size())) continue; + const std::optional data = element_for_pointer(blend, data_pointers[size_t(data_index)]); + if (!data) continue; + const int64_t bag_count = std::clamp(read_integer(*blend.sdna, *data, "channelbag_array_num").value_or(0), 0, 10000); + const std::optional bag_pointer = read_pointer(*blend.sdna, *data, "channelbag_array"); + if (!bag_pointer) continue; + const std::vector bag_pointers = read_raw_pointer_array(blend, *bag_pointer, size_t(bag_count)); + for (const uint64_t bag_value : bag_pointers) { + const std::optional bag = element_for_pointer(blend, bag_value); + if (!bag) continue; + if (filter_slot && read_integer(*blend.sdna, *bag, "slot_handle").value_or(0) != *slot_handle) continue; + const int64_t fcurve_count = std::clamp(read_integer(*blend.sdna, *bag, "fcurve_array_num").value_or(0), 0, 100000); + const std::optional fcurve_pointer = read_pointer(*blend.sdna, *bag, "fcurve_array"); + if (!fcurve_pointer) continue; + const std::vector fcurve_pointers = read_raw_pointer_array(blend, *fcurve_pointer, size_t(fcurve_count)); + std::vector fcurves; + for (const uint64_t fcurve_value : fcurve_pointers) { + if (const std::optional fcurve = element_for_pointer(blend, fcurve_value)) fcurves.push_back(*fcurve); + } + append_fcurve_channels(blend, fcurves, channels, frame_start, frame_end); + } + } + } + } + if (channels.empty() && markers.empty()) return; + json unique_channels = json::array(); + std::unordered_set channel_keys; + for (const json &channel : channels) { + if (channel_keys.insert(channel.dump()).second) unique_channels.push_back(channel); + } + channels = std::move(unique_channels); + if (!std::isfinite(frame_start)) frame_start = action_frame_start; + if (!std::isfinite(frame_end)) frame_end = action_frame_end; + const std::string action_name = read_id_name(*blend.sdna, *action); + json animation = {{"id", "action:" + (action_name.empty() ? std::to_string(action_pointer) : action_name) + ":" + target_id}, + {"name", action_name.empty() ? "Action" : action_name}, + {"targetId", target_id}, + {"frameStart", std::isfinite(frame_start) ? frame_start : 0.0f}, + {"frameEnd", std::isfinite(frame_end) ? frame_end : 0.0f}, + {"markers", std::move(markers)}, + {"channels", std::move(channels)}}; + if (slot_identifier) { + animation["slotIdentifier"] = *slot_identifier; + animation["slotHandle"] = slot_handle.value_or(0); + animation["slotAssigned"] = slot_handle.value_or(0) != 0; + animation["slotCount"] = slot_count; + } + animations.push_back(std::move(animation)); +} + +json mesh_geometry_from_attributes(const ParsedBlend &blend, + const ElementRef &mesh, + const int64_t vertex_count, + const int64_t face_count, + const int64_t corner_count, + const std::unordered_map &ids_by_pointer) +{ + json geometry = json::object(); + const std::optional storage = embedded_element(*blend.sdna, mesh, "attribute_storage"); + if (!storage) return geometry; + const std::optional attributes_pointer = read_pointer(*blend.sdna, *storage, "dna_attributes"); + const int64_t attribute_count = read_integer(*blend.sdna, *storage, "dna_attributes_num").value_or(0); + const int attribute_struct_index = DNA_struct_find_index_without_alias(blend.sdna.get(), "Attribute"); + const int attribute_struct_size = attribute_struct_index >= 0 ? + DNA_struct_size(blend.sdna.get(), attribute_struct_index) : + 0; + if (!attributes_pointer || attribute_count <= 0 || attribute_count > 256 || attribute_struct_size <= 0) { + return geometry; + } + std::vector positions; + std::vector source_normals; + int source_normal_domain = -1; + std::vector uv_values; + int uv_domain = -1; + std::vector color_values; + int color_domain = -1; + std::vector corner_vertices = mesh_customdata_int_layer( + blend, mesh, "corner_data", ".corner_vert", size_t(corner_count)); + std::vector corner_edges; + std::vector edge_vertices; + std::vector face_material_indices; + std::vector face_offsets; + std::vector seam_edges; + std::vector sharp_edges; + std::vector sculpt_mask; + std::vector sculpt_face_sets; + json attributes = json::array(); + json uv_layers = json::array(); + const std::string active_uv_map = read_pointer(*blend.sdna, mesh, "active_uv_map_attribute") ? + read_raw_string(blend, *read_pointer(*blend.sdna, mesh, "active_uv_map_attribute")) : + std::string(); + const std::string active_color = read_pointer(*blend.sdna, mesh, "active_color_attribute") ? + read_raw_string(blend, *read_pointer(*blend.sdna, mesh, "active_color_attribute")) : + std::string(); + for (int64_t index = 0; index < attribute_count; index++) { + const std::optional attribute = element_for_pointer_after( + blend, *attributes_pointer + uint64_t(attribute_struct_size * index), mesh.block, "Attribute"); + if (!attribute) break; + const int64_t data_type = read_integer(*blend.sdna, *attribute, "data_type").value_or(-1); + const int64_t domain = read_integer(*blend.sdna, *attribute, "domain").value_or(-1); + const int64_t storage_type = read_integer(*blend.sdna, *attribute, "storage_type").value_or(0); + const std::string attribute_name = read_raw_string( + blend, read_pointer(*blend.sdna, *attribute, "name").value_or(0)); + const std::optional container_pointer = read_pointer(*blend.sdna, *attribute, "data"); + if (!container_pointer) continue; + const std::optional container = element_for_pointer_after( + blend, *container_pointer, attribute->block); + if (!container) continue; + const std::optional data_pointer = read_pointer(*blend.sdna, *container, "data"); + const int64_t element_count = storage_type == 1 ? 1 : + read_integer(*blend.sdna, *container, "size") + .value_or(0); + if (!data_pointer || element_count <= 0) continue; + const char *domain_name = domain == 0 ? "POINT" : domain == 1 ? "EDGE" : domain == 2 ? "FACE" : domain == 3 ? "CORNER" : "UNKNOWN"; + const char *type_name = data_type == 0 ? "BOOL" : data_type == 3 ? "INT" : data_type == 5 ? "FLOAT" : + data_type == 6 ? "FLOAT2" : data_type == 7 ? "FLOAT3" : data_type == 9 ? "BYTE_COLOR" : + data_type == 10 ? "FLOAT_COLOR" : "OTHER"; + if (!attribute_name.empty() && attribute_name[0] != '.') { + attributes.push_back({{"name", attribute_name}, {"domain", domain_name}, {"dataType", type_name}}); + } + if (data_type == 7 && domain == 0 && positions.empty()) { + positions = read_raw_float_array(blend, *data_pointer, size_t(element_count), 3); + } + if (corner_vertices.empty() && data_type == 3 && domain == 3 && + (attribute_name == ".corner_vert" || attribute_name == "corner_vert")) { + const std::vector values = read_raw_int_array(blend, *data_pointer, size_t(element_count)); + if (values.size() == size_t(corner_count) && + std::all_of(values.begin(), values.end(), [&](const int32_t value) { + return value >= 0 && value < vertex_count; + })) { + corner_vertices = values; + } + } + if (data_type == 3 && domain == 3 && + (attribute_name == ".corner_edge" || attribute_name == "corner_edge")) { + corner_edges = read_raw_int_array(blend, *data_pointer, size_t(element_count)); + } + if (data_type == 4 && domain == 1 && + (attribute_name == ".edge_verts" || attribute_name == "edge_verts")) { + edge_vertices = read_raw_int_array(blend, *data_pointer, size_t(element_count) * 2); + } + if (data_type == 3 && domain == 2 && attribute_name == "material_index") { + face_material_indices = read_raw_int_array(blend, *data_pointer, size_t(element_count)); + } + if (data_type == 5 && domain == 0 && attribute_name == ".sculpt_mask") { + sculpt_mask = read_raw_float_array(blend, *data_pointer, size_t(element_count), 1); + if (storage_type == 1 && sculpt_mask.size() == 1) sculpt_mask.resize(size_t(vertex_count), sculpt_mask.front()); + if (sculpt_mask.size() != size_t(vertex_count) || + std::any_of(sculpt_mask.begin(), sculpt_mask.end(), [](const float value) { + return !std::isfinite(value) || value < 0.0f || value > 1.0f; + })) { + sculpt_mask.clear(); + } + } + if (data_type == 3 && domain == 2 && attribute_name == ".sculpt_face_set") { + sculpt_face_sets = read_raw_int_array(blend, *data_pointer, size_t(element_count)); + if (storage_type == 1 && sculpt_face_sets.size() == 1) { + sculpt_face_sets.resize(size_t(face_count), sculpt_face_sets.front()); + } + if (sculpt_face_sets.size() != size_t(face_count) || + std::any_of(sculpt_face_sets.begin(), sculpt_face_sets.end(), [](const int32_t value) { + return value < 0; + })) { + sculpt_face_sets.clear(); + } + } + if (data_type == 6 && domain == 3 && uv_values.empty()) { + uv_values = read_raw_float_array(blend, *data_pointer, size_t(element_count), 2); + uv_domain = int(domain); + } + if (data_type == 6 && domain == 3) { + uv_layers.push_back({{"name", attribute_name}, + {"active", attribute_name == active_uv_map}, + {"activeRender", attribute_name == active_uv_map}}); + } + if (data_type == 0 && domain == 1 && + (attribute_name == "uv_seam" || attribute_name == "sharp_edge")) { + const std::vector values = read_raw_byte_array( + blend, *data_pointer, storage_type == 1 ? 1 : size_t(element_count)); + std::vector &indices = attribute_name == "uv_seam" ? seam_edges : sharp_edges; + if (storage_type == 1 && !values.empty() && values[0] != 0) { + for (int64_t edge = 0; edge < int64_t(edge_vertices.size() / 2); edge++) indices.push_back(int32_t(edge)); + } + else { + for (size_t edge = 0; edge < values.size(); edge++) if (values[edge] != 0) indices.push_back(int32_t(edge)); + } + } + if (data_type == 9 && (color_values.empty() || attribute_name == active_color)) { + color_values.clear(); + const std::vector bytes = read_raw_byte_array(blend, *data_pointer, + size_t(element_count) * 4); + color_values.reserve(bytes.size()); + for (const uint8_t value : bytes) color_values.push_back(float(value) / 255.0f); + color_domain = int(domain); + } + if (data_type == 10 && (color_values.empty() || attribute_name == active_color)) { + color_values = read_raw_float_array(blend, *data_pointer, size_t(element_count), 4); + color_domain = int(domain); + } + if (data_type == 7 && + (attribute_name == "normal" || attribute_name == ".corner_normal") && + source_normals.empty()) { + source_normals = read_raw_float_array(blend, *data_pointer, size_t(element_count), 3); + source_normal_domain = int(domain); + } + } + if (const std::optional offsets_pointer = read_pointer_alias( + *blend.sdna, mesh, {"poly_offset_indices", "face_offset_indices"})) { + face_offsets = read_raw_int_array(blend, *offsets_pointer, size_t(face_count) + 1); + } + const bool valid_face_offsets = face_offsets.size() == size_t(face_count) + 1 && + !face_offsets.empty() && face_offsets.front() == 0 && + face_offsets.back() == corner_count && + std::is_sorted(face_offsets.begin(), face_offsets.end()); + if (!valid_face_offsets) { + face_offsets.resize(size_t(face_count) + 1); + for (int64_t face = 0; face <= face_count; face++) { + face_offsets[size_t(face)] = int32_t(face * corner_count / std::max(face_count, 1)); + } + } + const int64_t edge_count = int64_t(edge_vertices.size() / 2); + if (corner_vertices.empty() && corner_edges.size() == size_t(corner_count) && + edge_vertices.size() == size_t(edge_count) * 2) { + std::vector reconstructed; + reconstructed.reserve(size_t(corner_count)); + for (int64_t face = 0; face < face_count; face++) { + const int32_t start = face_offsets[size_t(face)]; + const int32_t end = face_offsets[size_t(face + 1)]; + if (start < 0 || end > int32_t(corner_edges.size()) || end - start < 3) { + reconstructed.clear(); + break; + } + for (int32_t corner = start; corner < end; corner++) { + const int32_t previous_corner = corner == start ? end - 1 : corner - 1; + const int32_t previous_edge = corner_edges[size_t(previous_corner)]; + const int32_t current_edge = corner_edges[size_t(corner)]; + if (previous_edge < 0 || current_edge < 0 || previous_edge >= edge_count || + current_edge >= edge_count) { + reconstructed.clear(); + break; + } + const int32_t previous_a = edge_vertices[size_t(previous_edge) * 2]; + const int32_t previous_b = edge_vertices[size_t(previous_edge) * 2 + 1]; + const int32_t current_a = edge_vertices[size_t(current_edge) * 2]; + const int32_t current_b = edge_vertices[size_t(current_edge) * 2 + 1]; + const int32_t vertex = previous_a == current_a || previous_a == current_b ? + previous_a : + (previous_b == current_a || previous_b == current_b ? previous_b : -1); + if (vertex < 0 || vertex >= vertex_count) { + reconstructed.clear(); + break; + } + reconstructed.push_back(vertex); + } + if (reconstructed.empty()) break; + } + if (reconstructed.size() == size_t(corner_count)) corner_vertices = std::move(reconstructed); + } + if (positions.size() != size_t(vertex_count) * 3 || corner_vertices.size() != size_t(corner_count)) { + return geometry; + } + std::vector indices; + std::vector triangle_corners; + std::vector triangle_material_indices; + std::vector triangle_face_indices; + for (int64_t face = 0; face < face_count; face++) { + const int32_t start = face_offsets[size_t(face)]; + const int32_t end = face_offsets[size_t(face + 1)]; + if (start < 0 || end > int32_t(corner_vertices.size()) || end - start < 3) { + return geometry; + } + for (int32_t corner = start + 1; corner + 1 < end; corner++) { + indices.push_back(corner_vertices[size_t(start)]); + indices.push_back(corner_vertices[size_t(corner)]); + indices.push_back(corner_vertices[size_t(corner + 1)]); + triangle_corners.push_back(start); + triangle_corners.push_back(corner); + triangle_corners.push_back(corner + 1); + triangle_material_indices.push_back(face < int64_t(face_material_indices.size()) && + face_material_indices[size_t(face)] >= 0 ? + face_material_indices[size_t(face)] : + 0); + triangle_face_indices.push_back(int32_t(face)); + } + } + + std::vector normals(size_t(vertex_count) * 3, 0.0f); + if (source_normal_domain == 0 && source_normals.size() == normals.size()) { + normals = source_normals; + } + else if (source_normal_domain == 3 && source_normals.size() == size_t(corner_count) * 3) { + for (size_t corner = 0; corner < triangle_corners.size(); corner++) { + const int32_t vertex = corner_vertices[size_t(triangle_corners[corner])]; + if (vertex < 0 || vertex >= vertex_count) continue; + for (int component = 0; component < 3; component++) { + normals[size_t(vertex) * 3 + component] += + source_normals[size_t(triangle_corners[corner]) * 3 + component]; + } + } + } + else { + for (size_t triangle = 0; triangle < indices.size(); triangle += 3) { + const int32_t a = indices[triangle], b = indices[triangle + 1], c = indices[triangle + 2]; + if (a < 0 || b < 0 || c < 0 || a >= vertex_count || b >= vertex_count || c >= vertex_count) continue; + const float ax = positions[size_t(a) * 3], ay = positions[size_t(a) * 3 + 1], az = positions[size_t(a) * 3 + 2]; + const float bx = positions[size_t(b) * 3], by = positions[size_t(b) * 3 + 1], bz = positions[size_t(b) * 3 + 2]; + const float cx = positions[size_t(c) * 3], cy = positions[size_t(c) * 3 + 1], cz = positions[size_t(c) * 3 + 2]; + const float ux = bx - ax, uy = by - ay, uz = bz - az; + const float vx = cx - ax, vy = cy - ay, vz = cz - az; + const std::array normal = {uy * vz - uz * vy, uz * vx - ux * vz, ux * vy - uy * vx}; + for (const int32_t vertex : {a, b, c}) { + for (int component = 0; component < 3; component++) normals[size_t(vertex) * 3 + component] += normal[component]; + } + } + } + for (size_t vertex = 0; vertex < size_t(vertex_count); vertex++) { + const float length = std::sqrt(normals[vertex * 3] * normals[vertex * 3] + + normals[vertex * 3 + 1] * normals[vertex * 3 + 1] + + normals[vertex * 3 + 2] * normals[vertex * 3 + 2]); + if (length > 1e-8f) { + for (int component = 0; component < 3; component++) normals[vertex * 3 + component] /= length; + } + else { + normals[vertex * 3 + 2] = 1.0f; + } + } + + geometry["positions"] = positions; + geometry["indices"] = indices; + geometry["normals"] = normals; + geometry["triangleCornerIndices"] = triangle_corners; + geometry["triangleFaceIndices"] = triangle_face_indices; + if (!edge_vertices.empty()) geometry["edgeVertexIndices"] = edge_vertices; + if (!seam_edges.empty()) geometry["seamEdges"] = seam_edges; + if (!sharp_edges.empty()) geometry["sharpEdges"] = sharp_edges; + if (!sculpt_mask.empty()) geometry["sculptMask"] = sculpt_mask; + if (!sculpt_face_sets.empty()) geometry["faceSets"] = sculpt_face_sets; + if (!attributes.empty()) geometry["attributes"] = attributes; + if (!uv_layers.empty()) geometry["uvLayers"] = uv_layers; + geometry["activeUVMap"] = active_uv_map.empty() ? json(nullptr) : json(active_uv_map); + if (source_normal_domain == 3 && source_normals.size() == size_t(corner_count) * 3) { + geometry["splitNormals"] = source_normals; + } + geometry["topology"] = "triangles"; + geometry["triangleCount"] = indices.size() / 3; + if (uv_domain == 3 && uv_values.size() == size_t(corner_count) * 2) geometry["uvs"] = uv_values; + if (uv_domain == 3 && uv_values.size() == size_t(corner_count) * 2) { + std::vector tangents(size_t(corner_count) * 4, 0.0f); + for (size_t triangle = 0; triangle + 2 < indices.size(); triangle += 3) { + const int32_t a = indices[triangle], b = indices[triangle + 1], c = indices[triangle + 2]; + const int32_t ca = triangle_corners[triangle], cb = triangle_corners[triangle + 1], cc = triangle_corners[triangle + 2]; + const float x1 = positions[size_t(b) * 3] - positions[size_t(a) * 3]; + const float y1 = positions[size_t(b) * 3 + 1] - positions[size_t(a) * 3 + 1]; + const float z1 = positions[size_t(b) * 3 + 2] - positions[size_t(a) * 3 + 2]; + const float x2 = positions[size_t(c) * 3] - positions[size_t(a) * 3]; + const float y2 = positions[size_t(c) * 3 + 1] - positions[size_t(a) * 3 + 1]; + const float z2 = positions[size_t(c) * 3 + 2] - positions[size_t(a) * 3 + 2]; + const float s1 = uv_values[size_t(cb) * 2] - uv_values[size_t(ca) * 2]; + const float t1 = uv_values[size_t(cb) * 2 + 1] - uv_values[size_t(ca) * 2 + 1]; + const float s2 = uv_values[size_t(cc) * 2] - uv_values[size_t(ca) * 2]; + const float t2 = uv_values[size_t(cc) * 2 + 1] - uv_values[size_t(ca) * 2 + 1]; + const float determinant = s1 * t2 - s2 * t1; + if (std::abs(determinant) <= 1e-20f) continue; + const float reciprocal = 1.0f / determinant; + const std::array tangent = {(x1 * t2 - x2 * t1) * reciprocal, + (y1 * t2 - y2 * t1) * reciprocal, + (z1 * t2 - z2 * t1) * reciprocal}; + for (const int32_t corner : {ca, cb, cc}) { + tangents[size_t(corner) * 4] = tangent[0]; + tangents[size_t(corner) * 4 + 1] = tangent[1]; + tangents[size_t(corner) * 4 + 2] = tangent[2]; + tangents[size_t(corner) * 4 + 3] = 1.0f; + } + } + geometry["tangents"] = std::move(tangents); + } + if (color_domain == 3 && color_values.size() == size_t(corner_count) * 4) geometry["colors"] = color_values; + else if (color_domain == 0 && color_values.size() == size_t(vertex_count) * 4) { + std::vector corner_colors(size_t(corner_count) * 4, 1.0f); + for (size_t corner = 0; corner < size_t(corner_count); corner++) { + const int32_t vertex = corner_vertices[corner]; + if (vertex < 0 || vertex >= vertex_count) continue; + std::copy_n(color_values.begin() + size_t(vertex) * 4, 4, corner_colors.begin() + corner * 4); + } + geometry["colors"] = corner_colors; + } + if (triangle_material_indices.size() == indices.size() / 3) { + geometry["triangleMaterialIndices"] = triangle_material_indices; + } + std::array bounds_min = {positions[0], positions[1], positions[2]}; + std::array bounds_max = bounds_min; + for (size_t index = 1; index < size_t(vertex_count); index++) { + for (int component = 0; component < 3; component++) { + bounds_min[component] = std::min(bounds_min[component], positions[index * 3 + component]); + bounds_max[component] = std::max(bounds_max[component], positions[index * 3 + component]); + } + } + geometry["bounds"] = { {"min", bounds_min}, {"max", bounds_max} }; + + const int64_t material_slot_count = read_integer(*blend.sdna, mesh, "totcol").value_or(0); + if (material_slot_count > 0 && material_slot_count <= 256) { + const std::optional material_pointer = read_pointer(*blend.sdna, mesh, "mat"); + const std::vector material_pointers = material_pointer ? + read_raw_pointer_array(blend, *material_pointer, size_t(material_slot_count)) : std::vector(); + json material_slots = json::array(); + for (const uint64_t pointer : material_pointers) { + const auto found = ids_by_pointer.find(pointer); + material_slots.push_back(found == ids_by_pointer.end() ? "" : found->second); + } + if (!material_slots.empty()) geometry["materialSlotIds"] = material_slots; + } + return geometry; +} + +std::vector traverse_collection_list( + const ParsedBlend &blend, + const ElementRef &collection, + const std::string &list_member, + const std::string &entry_pointer_member, + const std::unordered_map &ids_by_pointer) +{ + std::vector result; + const std::optional list = embedded_element(*blend.sdna, collection, list_member); + if (!list) { + return result; + } + std::optional current = read_pointer(*blend.sdna, *list, "first"); + std::unordered_set visited; + while (current && *current != 0 && visited.insert(*current).second && visited.size() < 100000) { + const std::optional entry = element_for_pointer(blend, *current); + if (!entry) { + break; + } + const std::optional target = read_pointer(*blend.sdna, *entry, entry_pointer_member); + if (target) { + const auto id = ids_by_pointer.find(*target); + if (id != ids_by_pointer.end()) { + result.push_back(id->second); + } + } + current = read_pointer(*blend.sdna, *entry, "next"); + } + return result; +} + +void sort_by_id(json &array) +{ + std::sort(array.begin(), array.end(), [](const json &a, const json &b) { + return a.value("id", "") < b.value("id", ""); + }); +} + +std::array matrix_multiply(const std::array &left, + const std::array &right) +{ + std::array result{}; + for (int column = 0; column < 4; column++) { + for (int row = 0; row < 4; row++) { + for (int index = 0; index < 4; index++) { + result[column * 4 + row] += left[index * 4 + row] * right[column * 4 + index]; + } + } + } + return result; +} + +void populate_world_matrices(json &nodes) +{ + std::unordered_map indices; + for (size_t index = 0; index < nodes.size(); index++) { + indices[nodes[index].value("id", "")] = index; + } + std::vector state(nodes.size(), 0); + std::vector> matrices(nodes.size()); + std::function(size_t)> resolve = [&](const size_t index) { + const std::array local = nodes[index]["localMatrix"].get>(); + if (state[index] == 2) { + return matrices[index]; + } + if (state[index] == 1) { + return local; + } + state[index] = 1; + matrices[index] = local; + if (nodes[index].contains("parentId") && nodes[index]["parentId"].is_string()) { + const auto parent = indices.find(nodes[index]["parentId"].get()); + if (parent != indices.end()) { + matrices[index] = matrix_multiply(resolve(parent->second), local); + } + } + state[index] = 2; + nodes[index]["worldMatrix"] = matrices[index]; + return matrices[index]; + }; + for (size_t index = 0; index < nodes.size(); index++) { + resolve(index); + } +} + +json scene_ir_from_blend(const ParsedBlend &blend, + const uint64_t revision, + std::unordered_map> &packed_assets) +{ + std::unordered_map ids_by_pointer; + const std::vector records = collect_ids(blend, ids_by_pointer); + json nodes = json::array(); + json meshes = json::array(); + json materials = json::array(); + json cameras = json::array(); + json lights = json::array(); + json worlds = json::array(); + json images = json::array(); + json brushes = json::array(); + json line_styles = json::array(); + json lattices = json::array(); + json particle_settings = json::array(); + json sounds = json::array(); + json speakers = json::array(); + json texts = json::array(); + json textures = json::array(); + json workspace_resources = json::array(); + json non_mesh_data = json::array(); + json vfonts = json::array(); + json libraries = json::array(); + json script_sources = json::array(); + size_t script_source_bytes = 0; + json masks = json::array(); + bool masks_blocked = false; + bool libraries_blocked = false; + bool script_sources_blocked = false; + json animations = json::array(); + json nla_tracks = json::array(); + json armatures = json::array(); + json collections = json::array(); + json scenes = json::array(); + std::unordered_set visited_animations; + std::unordered_set linked_action_pointers; + std::unordered_map modifier_stacks_by_mesh_id; + std::unordered_map> mesh_bind_matrices; + std::unordered_map armature_id_by_object_id; + std::unordered_map vertex_groups_by_mesh_id; + + for (const IdRecord &record : records) { + if (record.type_name != "Object") continue; + const ElementRef object{record.block, 0, record.type_name}; + const std::optional data_pointer = read_pointer(*blend.sdna, object, "data"); + if (!data_pointer) continue; + const auto data_id = ids_by_pointer.find(*data_pointer); + if (data_id == ids_by_pointer.end()) continue; + const std::array matrix = trs_matrix(read_float_array(*blend.sdna, object, "loc", 3), + read_float_array(*blend.sdna, object, "rot", 3), + read_float_array(*blend.sdna, object, "scale", 3)); + if (const std::optional data = element_for_pointer(blend, *data_pointer)) { + if (data->type_name == "Mesh") { + mesh_bind_matrices[data_id->second] = matrix; + json groups = json::array(); + int index = 0; + std::vector source_groups = linked_list_elements(blend, *data, "vertex_group_names"); + if (source_groups.empty()) source_groups = linked_list_elements(blend, object, "defbase"); + for (const ElementRef &group : source_groups) { + groups.push_back({{"name", read_string(*blend.sdna, group, "name")}, {"index", index++}}); + } + if (!groups.empty()) vertex_groups_by_mesh_id[data_id->second] = std::move(groups); + } + if (data->type_name == "bArmature") armature_id_by_object_id[record.id] = data_id->second; + } + } + + std::string first_scene_id; + std::string first_object_id; + std::string first_mesh_object_id; + int frame_current = 1; + int frame_start = 1; + int frame_end = 250; + float unit_scale = 1.0f; + int unit_system = 0; + + for (const IdRecord &record : records) { + const ElementRef element{record.block, 0, record.type_name}; + if (const std::optional adt_pointer = read_pointer(*blend.sdna, element, "adt")) { + if (const std::optional adt = element_for_pointer(blend, *adt_pointer)) { + if (const std::optional action_pointer = read_pointer(*blend.sdna, *adt, "action")) { + linked_action_pointers.insert(*action_pointer); + const int64_t slot_handle = read_integer(*blend.sdna, *adt, "slot_handle").value_or(0); + append_action_animation(blend, + record.id, + *action_pointer, + animations, + visited_animations, + slot_handle != 0 ? std::optional(slot_handle) : std::nullopt, + read_string(*blend.sdna, *adt, "last_slot_identifier")); + } + int track_index = 0; + for (const ElementRef &track : linked_list_elements(blend, *adt, "nla_tracks")) { + const std::string track_name = read_string(*blend.sdna, track, "name"); + const int64_t track_flag = read_integer(*blend.sdna, track, "flag").value_or(0); + json strips = json::array(); + int strip_index = 0; + for (const ElementRef &strip : linked_list_elements(blend, track, "strips")) { + const std::optional action_pointer = read_pointer(*blend.sdna, strip, "act"); + std::string action_id = "action:missing:" + record.id; + if (action_pointer) { + linked_action_pointers.insert(*action_pointer); + append_action_animation(blend, record.id, *action_pointer, animations, visited_animations); + if (const std::optional action = element_for_pointer(blend, *action_pointer)) { + const std::string action_name = read_id_name(*blend.sdna, *action); + action_id = "action:" + (action_name.empty() ? std::to_string(*action_pointer) : action_name) + ":" + record.id; + } + } + const int64_t strip_flag = read_integer(*blend.sdna, strip, "flag").value_or(0); + const int64_t strip_type = read_integer(*blend.sdna, strip, "type").value_or(0); + const int64_t blend_mode = read_integer(*blend.sdna, strip, "blendmode").value_or(0); + const int64_t extend_mode = read_integer(*blend.sdna, strip, "extendmode").value_or(0); + const int64_t action_slot_handle = read_integer(*blend.sdna, strip, "action_slot_handle").value_or(0); + const std::string action_slot_identifier = read_string(*blend.sdna, strip, "last_slot_identifier"); + const char *strip_type_name = strip_type == 0 ? "CLIP" : strip_type == 1 ? "TRANSITION" : + strip_type == 2 ? "META" : strip_type == 3 ? "SOUND" : "UNKNOWN"; + json strip_ir = { + {"id", read_string(*blend.sdna, strip, "name").empty() ? + "nla-strip:" + record.id + ":" + std::to_string(track_index) + ":" + std::to_string(strip_index) : + read_string(*blend.sdna, strip, "name")}, + {"actionId", action_id}, + {"frameStart", read_float(*blend.sdna, strip, "start").value_or(0.0f)}, + {"frameEnd", read_float(*blend.sdna, strip, "end").value_or(0.0f)}, + {"actionFrameStart", read_float(*blend.sdna, strip, "actstart").value_or(0.0f)}, + {"actionFrameEnd", read_float(*blend.sdna, strip, "actend").value_or(0.0f)}, + {"scale", read_float(*blend.sdna, strip, "scale").value_or(1.0f)}, + {"repeat", read_float(*blend.sdna, strip, "repeat").value_or(1.0f)}, + {"blendIn", read_float(*blend.sdna, strip, "blendin").value_or(0.0f)}, + {"blendOut", read_float(*blend.sdna, strip, "blendout").value_or(0.0f)}, + {"influence", read_float(*blend.sdna, strip, "influence").value_or(1.0f)}, + {"blendMode", blend_mode == 1 ? "ADD" : blend_mode == 3 ? "MULTIPLY" : blend_mode == 4 ? "COMBINE" : "REPLACE"}, + {"extrapolation", extend_mode == 1 ? "HOLD_FORWARD" : extend_mode == 2 ? "NOTHING" : "HOLD"}, + {"muted", (strip_flag & (1 << 12)) != 0}, + {"selected", (strip_flag & (1 << 1)) != 0}, + {"reverse", (strip_flag & (1 << 11)) != 0}, + {"useTimeWarp", (strip_flag & (1 << 6)) != 0}, + {"actionSlotHandle", action_slot_handle}, + {"actionSlotIdentifier", action_slot_identifier}, + {"actionSlotAssigned", action_slot_handle != 0}, + {"stripType", strip_type_name}}; + if (!action_pointer) strip_ir["unsupportedReason"] = "NLA Action data-block is missing"; + else if (blend_mode == 2 || blend_mode < 0 || blend_mode > 4) strip_ir["unsupportedReason"] = "NLA blend mode is outside the finite subset"; + strips.push_back(std::move(strip_ir)); + strip_index++; + } + nla_tracks.push_back({{"schemaVersion", 1}, + {"id", "nla-track:" + record.id + ":" + std::to_string(track_index)}, + {"ownerId", record.id}, + {"name", track_name.empty() ? "NLA Track" : track_name}, + {"strips", std::move(strips)}, + {"muted", (track_flag & (1 << 2)) != 0}, + {"solo", (track_flag & (1 << 3)) != 0}, + {"selected", (track_flag & (1 << 1)) != 0}}); + track_index++; + } + } + } + if (record.type_name == "Object") { + const int64_t type = read_integer(*blend.sdna, element, "type").value_or(0); + const std::optional parent_pointer = read_pointer(*blend.sdna, element, "parent"); + const std::optional data_pointer = read_pointer(*blend.sdna, element, "data"); + const std::vector location = read_float_array(*blend.sdna, element, "loc", 3); + const std::vector rotation = read_float_array(*blend.sdna, element, "rot", 3); + const std::vector scale = read_float_array(*blend.sdna, element, "scale", 3); + const std::array matrix = trs_matrix(location, rotation, scale); + const int64_t visibility_flags = read_integer(*blend.sdna, element, "visibility_flag").value_or(0); + + json node = {{"id", record.id}, + {"name", record.name}, + {"type", object_type_name(type)}, + {"visible", (visibility_flags & 1) == 0}, + {"selectable", (visibility_flags & 2) == 0}, + {"localMatrix", matrix}, + {"worldMatrix", matrix}, + {"transform", + {{"translation", float_array_or(location, {0.0f, 0.0f, 0.0f})}, + {"rotationEuler", float_array_or(rotation, {0.0f, 0.0f, 0.0f})}, + {"scale", float_array_or(scale, {1.0f, 1.0f, 1.0f})}, + {"rotationMode", read_integer(*blend.sdna, element, "rotmode").value_or(1)}}}}; + json constraints = json::array(); + for (const ElementRef &constraint : linked_list_elements(blend, element, "constraints")) { + const int64_t constraint_type = read_integer(*blend.sdna, constraint, "type").value_or(0); + const int64_t flag = read_integer(*blend.sdna, constraint, "flag").value_or(0); + json constraint_ir = {{"name", read_string(*blend.sdna, constraint, "name")}, + {"typeCode", constraint_type}, + {"type", "CONSTRAINT_" + std::to_string(constraint_type)}, + {"enabled", (flag & 512) == 0}, + {"influence", read_float(*blend.sdna, constraint, "enforce").value_or(1.0f)}}; + if (constraint_type == 12) { + const std::optional constraint_data_pointer = read_pointer(*blend.sdna, constraint, "data"); + if (constraint_data_pointer) { + const std::optional constraint_data = element_for_pointer(blend, *constraint_data_pointer); + if (constraint_data) { + const int64_t action_slot_handle = read_integer(*blend.sdna, *constraint_data, "action_slot_handle").value_or(0); + const std::optional action_pointer = read_pointer(*blend.sdna, *constraint_data, "act"); + if (action_pointer) { + if (const std::optional action = element_for_pointer(blend, *action_pointer)) { + const std::string action_name = read_id_name(*blend.sdna, *action); + constraint_ir["actionId"] = "action:" + (action_name.empty() ? std::to_string(*action_pointer) : action_name); + } + } + constraint_ir["actionSlotHandle"] = action_slot_handle; + constraint_ir["actionSlotIdentifier"] = read_string(*blend.sdna, *constraint_data, "last_slot_identifier"); + constraint_ir["actionSlotAssigned"] = action_slot_handle != 0; + } + } + } + constraints.push_back(std::move(constraint_ir)); + } + if (!constraints.empty()) node["constraints"] = std::move(constraints); + if (const std::optional adt_pointer = read_pointer(*blend.sdna, element, "adt")) { + if (const std::optional adt = element_for_pointer(blend, *adt_pointer)) { + json drivers = json::array(); + for (const ElementRef &fcurve : linked_list_elements(blend, *adt, "drivers")) { + json driver = driver_fcurve(blend, fcurve); + if (!driver.is_null()) drivers.push_back(std::move(driver)); + } + if (!drivers.empty()) node["drivers"] = std::move(drivers); + } + } + if (parent_pointer) { + const auto parent = ids_by_pointer.find(*parent_pointer); + node["parentId"] = parent != ids_by_pointer.end() ? json(parent->second) : json(nullptr); + } + else { + node["parentId"] = nullptr; + } + if (data_pointer) { + const auto data_id = ids_by_pointer.find(*data_pointer); + node["dataId"] = data_id != ids_by_pointer.end() ? json(data_id->second) : json(nullptr); + const json object_modifier_stack = modifier_stack_from_object(blend, element, record.id, ids_by_pointer); + if (!object_modifier_stack.empty()) node["modifierStack"] = object_modifier_stack; + if (data_id != ids_by_pointer.end()) { + if (const std::optional data = element_for_pointer(blend, *data_pointer)) { + if (data->type_name == "Mesh") { + const json stack = object_modifier_stack; + if (!stack.empty()) modifier_stacks_by_mesh_id.emplace(data_id->second, stack); + } + } + } + } + else { + node["dataId"] = nullptr; + } + if (first_object_id.empty()) { + first_object_id = record.id; + } + if (object_type_name(type) == "MESH" && first_mesh_object_id.empty()) { + first_mesh_object_id = record.id; + } + nodes.push_back(std::move(node)); + } + else if (record.type_name == "bArmature") { + const std::string armature_id = record.id; + json armature = armature_from_data(blend, element, armature_id, std::nullopt); + for (const auto &entry : armature_id_by_object_id) { + if (entry.second == armature_id) { + armature["objectId"] = entry.first; + const auto pose_object = std::find_if(records.begin(), records.end(), [&](const IdRecord &candidate) { + return candidate.id == entry.first; + }); + if (pose_object != records.end()) { + const ElementRef object{pose_object->block, 0, pose_object->type_name}; + if (const std::optional pose_pointer = read_pointer(*blend.sdna, object, "pose")) { + armature = armature_from_data(blend, element, armature_id, element_for_pointer(blend, *pose_pointer)); + armature["objectId"] = entry.first; + } + } + break; + } + } + armatures.push_back(std::move(armature)); + } + else if (record.type_name == "Mesh") { + const int64_t vertex_count = read_integer_alias(*blend.sdna, element, {"verts_num", "totvert"}).value_or(0); + const int64_t edge_count = read_integer_alias(*blend.sdna, element, {"edges_num", "totedge"}).value_or(0); + const int64_t face_count = read_integer_alias(*blend.sdna, element, {"faces_num", "totpoly"}).value_or(0); + const int64_t corner_count = read_integer_alias(*blend.sdna, element, {"corners_num", "totloop"}).value_or(0); + json mesh = {{"id", record.id}, + {"name", record.name}, + {"vertexCount", vertex_count}, + {"edgeCount", edge_count}, + {"faceCount", face_count}, + {"cornerCount", corner_count}, + {"geometryStatus", "summary-only"}}; + const json geometry = mesh_geometry_from_attributes( + blend, element, vertex_count, face_count, corner_count, ids_by_pointer); + if (geometry.contains("positions")) { + mesh["positions"] = geometry.at("positions"); + mesh["indices"] = geometry.at("indices"); + for (const char *field : {"normals", "triangleCornerIndices", "triangleFaceIndices", "edgeVertexIndices", "tangents", "splitNormals", "uvs", "colors", "triangleMaterialIndices", "materialSlotIds", "seamEdges", "sharpEdges", "sculptMask", "faceSets", "attributes", "uvLayers", "activeUVMap", "bounds"}) { + if (geometry.contains(field)) mesh[field] = geometry.at(field); + } + mesh["topology"] = geometry.at("topology"); + mesh["triangleCount"] = geometry.at("triangleCount"); + mesh["geometryStatus"] = "available"; + } + const json shape_keys = mesh_shape_keys(blend, element, vertex_count); + if (!shape_keys.empty()) mesh["shapeKeys"] = shape_keys; + const auto vertex_groups = vertex_groups_by_mesh_id.find(record.id); + if (vertex_groups != vertex_groups_by_mesh_id.end()) mesh["vertexGroups"] = vertex_groups->second; + const auto bind_matrix = mesh_bind_matrices.find(record.id); + const std::array identity = {1, 0, 0, 0, 0, 1, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 1}; + if (const json skin = mesh_skin_weights(blend, + element, + vertex_count, + bind_matrix == mesh_bind_matrices.end() ? identity : bind_matrix->second); + !skin.is_null()) { + mesh["skinWeights"] = skin; + } + meshes.push_back(std::move(mesh)); + } + else if (record.type_name == "Material") { + std::vector base_color = {read_float(*blend.sdna, element, "r").value_or(0.8f), + read_float(*blend.sdna, element, "g").value_or(0.8f), + read_float(*blend.sdna, element, "b").value_or(0.8f), + read_float(*blend.sdna, element, "a").value_or(1.0f)}; + float roughness = read_float(*blend.sdna, element, "roughness").value_or(0.4f); + float metallic = read_float(*blend.sdna, element, "metallic").value_or(0.0f); + float alpha = base_color[3]; + float ior = 1.45f; + float specular_ior_level = 0.5f; + float transmission_weight = 0.0f; + float coat_weight = 0.0f; + float coat_roughness = 0.03f; + float emission_strength = 1.0f; + std::vector emission_color = {0.0f, 0.0f, 0.0f, 1.0f}; + std::string normal_image_id; + std::vector image_ids; + std::vector warnings; + json material_nodes = json::array(); + json material_links = json::array(); + const std::optional node_tree_pointer = read_pointer(*blend.sdna, element, "nodetree"); + bool has_principled = false; + if (node_tree_pointer) { + const std::optional node_tree = element_for_pointer(blend, *node_tree_pointer); + if (node_tree) { + for (const ElementRef &node : linked_list_elements(blend, *node_tree, "nodes")) { + const std::string node_type = read_string(*blend.sdna, node, "idname"); + const int64_t node_identifier = read_integer(*blend.sdna, node, "identifier").value_or(0); + const std::string node_name = read_string(*blend.sdna, node, "name"); + const std::string node_id = "node:" + std::to_string(node_identifier) + ":" + node_name; + const char *mapped_type = node_type == "ShaderNodeRGB" ? "RGB" : + node_type == "ShaderNodeValue" ? "VALUE" : + node_type == "ShaderNodeMath" ? "MATH" : + node_type == "ShaderNodeBsdfPrincipled" ? "PRINCIPLED" : + node_type == "ShaderNodeTexImage" ? "IMAGE_TEXTURE" : + node_type == "ShaderNodeNormalMap" ? "NORMAL_MAP" : + node_type == "ShaderNodeOutputMaterial" ? "OUTPUT" : "UNSUPPORTED"; + json node_ir = {{"id", node_id}, {"type", mapped_type}, {"name", node_name.empty() ? node_type : node_name}}; + if (const std::optional image_pointer = read_pointer(*blend.sdna, node, "id")) { + const auto image_id = ids_by_pointer.find(*image_pointer); + if (image_id != ids_by_pointer.end()) node_ir["imageId"] = image_id->second; + } + if (node_type == "ShaderNodeRGB" || node_type == "ShaderNodeValue") { + const std::vector outputs = linked_list_elements(blend, node, "outputs"); + if (!outputs.empty()) { + const std::vector values = node_socket_default_values(blend, outputs.front()); + if (!values.empty()) node_ir["defaultValue"] = values; + } + } + if (node_type == "ShaderNodeMath") { + const int64_t operation = read_integer(*blend.sdna, node, "custom1").value_or(-1); + const char *operation_name = operation == NODE_MATH_ADD ? "ADD" : + operation == NODE_MATH_SUBTRACT ? "SUBTRACT" : + operation == NODE_MATH_MULTIPLY ? "MULTIPLY" : + operation == NODE_MATH_DIVIDE ? "DIVIDE" : + operation == NODE_MATH_MINIMUM ? "MINIMUM" : + operation == NODE_MATH_MAXIMUM ? "MAXIMUM" : nullptr; + if (operation_name != nullptr) node_ir["properties"] = {{"operation", operation_name}}; + else node_ir["type"] = "UNSUPPORTED"; + } + material_nodes.push_back(std::move(node_ir)); + if (node_type == "ShaderNodeBsdfPrincipled") { + has_principled = true; + for (const ElementRef &socket : linked_list_elements(blend, node, "inputs")) { + const std::string socket_name = read_string(*blend.sdna, socket, "name"); + const std::vector values = node_socket_default_values(blend, socket); + const bool linked = read_pointer(*blend.sdna, socket, "link").value_or(0) != 0; + if (linked) warnings.push_back("linked_input_not_evaluated:" + socket_name); + if (socket_name == "Base Color" && values.size() >= 3) { + base_color = {values[0], values[1], values[2], values.size() >= 4 ? values[3] : base_color[3]}; + } + else if (socket_name == "Metallic" && !values.empty()) metallic = values[0]; + else if (socket_name == "Roughness" && !values.empty()) roughness = values[0]; + else if (socket_name == "IOR" && !values.empty()) ior = values[0]; + else if (socket_name == "Specular IOR Level" && !values.empty()) specular_ior_level = values[0]; + else if (socket_name == "Transmission Weight" && !values.empty()) transmission_weight = values[0]; + else if (socket_name == "Coat Weight" && !values.empty()) coat_weight = values[0]; + else if (socket_name == "Coat Roughness" && !values.empty()) coat_roughness = values[0]; + else if (socket_name == "Alpha" && !values.empty()) alpha = values[0]; + else if ((socket_name == "Emission Color" || socket_name == "Emission") && values.size() >= 3) { + emission_color = {values[0], values[1], values[2], values.size() >= 4 ? values[3] : 1.0f}; + } + else if (socket_name == "Emission Strength" && !values.empty()) emission_strength = values[0]; + else if (socket_name == "Normal" && linked) { + warnings.push_back("normal_input_requires_evaluation"); + } + } + } + else if (node_type == "ShaderNodeTexImage") { + if (const std::optional image_pointer = read_pointer(*blend.sdna, node, "id")) { + const auto image_id = ids_by_pointer.find(*image_pointer); + if (image_id != ids_by_pointer.end() && + std::find(image_ids.begin(), image_ids.end(), image_id->second) == image_ids.end()) { + image_ids.push_back(image_id->second); + } + } + } + else if (node_type != "ShaderNodeOutputMaterial" && node_type != "ShaderNodeNormalMap" && + node_type != "ShaderNodeMath" && + node_type != "ShaderNodeUVMap" && !node_type.empty()) { + warnings.push_back("unsupported_node:" + node_type); + } + } + for (const ElementRef &link : linked_list_elements(blend, *node_tree, "links")) { + const std::optional from_node_pointer = read_pointer(*blend.sdna, link, "fromnode"); + const std::optional to_node_pointer = read_pointer(*blend.sdna, link, "tonode"); + const std::optional from_socket_pointer = read_pointer(*blend.sdna, link, "fromsock"); + const std::optional to_socket_pointer = read_pointer(*blend.sdna, link, "tosock"); + const std::optional from_node = from_node_pointer ? element_for_pointer(blend, *from_node_pointer) : std::nullopt; + const std::optional to_node = to_node_pointer ? element_for_pointer(blend, *to_node_pointer) : std::nullopt; + if (!from_node || !to_node) continue; + auto linked_node_id = [&](const ElementRef &linked_node) { + return "node:" + std::to_string(read_integer(*blend.sdna, linked_node, "identifier").value_or(0)) + + ":" + read_string(*blend.sdna, linked_node, "name"); + }; + const std::optional from_socket = from_socket_pointer ? element_for_pointer(blend, *from_socket_pointer) : std::nullopt; + const std::optional to_socket = to_socket_pointer ? element_for_pointer(blend, *to_socket_pointer) : std::nullopt; + material_links.push_back({{"fromNodeId", linked_node_id(*from_node)}, + {"fromSocket", from_socket ? read_string(*blend.sdna, *from_socket, "identifier") : ""}, + {"toNodeId", linked_node_id(*to_node)}, + {"toSocket", to_socket ? read_string(*blend.sdna, *to_socket, "identifier") : ""}}); + } + } + else { + warnings.push_back("material_node_tree_unreadable"); + } + } + if (node_tree_pointer && !has_principled) warnings.push_back("principled_node_not_found"); + json material = { {"id", record.id}, + {"name", record.name}, + {"baseColor", float4_array_or(base_color, {0.8f, 0.8f, 0.8f, 1.0f})}, + {"roughness", std::clamp(roughness, 0.0f, 1.0f)}, + {"metallic", std::clamp(metallic, 0.0f, 1.0f)}, + {"emissionColor", float4_array_or(emission_color, {0.0f, 0.0f, 0.0f, 1.0f})}, + {"alpha", std::clamp(alpha, 0.0f, 1.0f)}, + {"ior", std::clamp(ior, 1.0f, 2.333f)}, + {"specularIORLevel", std::clamp(specular_ior_level, 0.0f, 1.0f)}, + {"transmissionWeight", std::clamp(transmission_weight, 0.0f, 1.0f)}, + {"coatWeight", std::clamp(coat_weight, 0.0f, 1.0f)}, + {"coatRoughness", std::clamp(coat_roughness, 0.0f, 1.0f)}, + {"emissionStrength", std::clamp(emission_strength, 0.0f, 1000000.0f)} }; + if (!normal_image_id.empty()) material["normalImageId"] = normal_image_id; + if (!image_ids.empty()) material["imageIds"] = image_ids; + if (!material_nodes.empty()) { + /* The browser compiler binds its report to this exact reader graph. */ + material["shaderGraphHash"] = sha256_hex(json({ + {"schemaVersion", 1}, + {"materialId", record.id}, + {"nodes", material_nodes}, + {"links", material_links}, + }).dump()); + material["nodes"] = std::move(material_nodes); + } + if (!material_links.empty()) material["links"] = std::move(material_links); + if (!warnings.empty()) material["warnings"] = warnings; + materials.push_back(std::move(material)); + } + else if (record.type_name == "Brush") { + json brush = { + {"id", record.id}, + {"name", record.name}, + {"size", std::clamp(read_integer(*blend.sdna, element, "size").value_or(0), 0, 100000)}, + {"alpha", std::clamp(read_float(*blend.sdna, element, "alpha").value_or(1.0f), 0.0f, 1.0f)}, + {"hardness", std::clamp(read_float(*blend.sdna, element, "hardness").value_or(0.0f), 0.0f, 1.0f)}, + {"spacing", std::clamp(read_integer(*blend.sdna, element, "spacing").value_or(0), 1, 1000)}, + {"jitter", std::clamp(read_float(*blend.sdna, element, "jitter").value_or(0.0f), 0.0f, 1.0f)}, + {"sculptTool", read_integer(*blend.sdna, element, "sculpt_brush_type").value_or(0)}, + }; + brushes.push_back(std::move(brush)); + } + else if (record.type_name == "FreestyleLineStyle") { + const std::vector color = {read_float(*blend.sdna, element, "r").value_or(0.0f), + read_float(*blend.sdna, element, "g").value_or(0.0f), + read_float(*blend.sdna, element, "b").value_or(0.0f)}; + const int64_t flag = read_integer(*blend.sdna, element, "flag").value_or(0); + line_styles.push_back({ + {"id", record.id}, + {"name", record.name}, + {"color", float_array_or(color, {0.0f, 0.0f, 0.0f})}, + {"alpha", std::clamp(read_float(*blend.sdna, element, "alpha").value_or(1.0f), 0.0f, 1.0f)}, + {"thickness", std::clamp(read_float(*blend.sdna, element, "thickness").value_or(1.0f), 0.0f, 10000.0f)}, + {"chaining", read_integer(*blend.sdna, element, "chaining").value_or(0)}, + {"caps", read_integer(*blend.sdna, element, "caps").value_or(0)}, + {"dashed", (flag & (1 << 2)) != 0}, + {"modifierCounts", { + {"color", linked_list_elements(blend, element, "color_modifiers").size()}, + {"alpha", linked_list_elements(blend, element, "alpha_modifiers").size()}, + {"thickness", linked_list_elements(blend, element, "thickness_modifiers").size()}, + {"geometry", linked_list_elements(blend, element, "geometry_modifiers").size()}}} + }); + } + else if (record.type_name == "Lattice") { + const int64_t points_u = read_integer(*blend.sdna, element, "pntsu").value_or(0); + const int64_t points_v = read_integer(*blend.sdna, element, "pntsv").value_or(0); + const int64_t points_w = read_integer(*blend.sdna, element, "pntsw").value_or(0); + const bool dimensions_valid = points_u >= 1 && points_u <= 64 && + points_v >= 1 && points_v <= 64 && + points_w >= 1 && points_w <= 64; + const size_t point_count = dimensions_valid ? + size_t(points_u) * size_t(points_v) * size_t(points_w) : + 0; + json points = json::array(); + bool points_complete = point_count > 0 && point_count <= MAX_LATTICE_POINTS; + if (const std::optional points_pointer = read_pointer(*blend.sdna, element, "def"); + points_complete && points_pointer) + { + for (size_t index = 0; index < point_count; index++) { + const std::optional point = raw_array_element( + blend, *points_pointer, "BPoint", index); + if (!point) { + points_complete = false; + break; + } + const std::vector coordinate = read_float_array( + *blend.sdna, *point, "vec", 4); + if (coordinate.size() != 4) { + points_complete = false; + break; + } + points.push_back({ + {"coDeform", {coordinate[0], coordinate[1], coordinate[2]}}, + {"weight", std::clamp(read_float(*blend.sdna, *point, "weight").value_or(0.0f), + 0.01f, + 100.0f)}, + {"selected", (read_integer(*blend.sdna, *point, "f1").value_or(0) & 1) != 0}, + }); + } + } + else { + points_complete = false; + } + const int64_t flag = read_integer(*blend.sdna, element, "flag").value_or(0); + json lattice = { + {"id", record.id}, + {"name", record.name}, + {"dimensions", {points_u, points_v, points_w}}, + {"pointCount", point_count}, + {"interpolation", { + lattice_interpolation_name(read_integer(*blend.sdna, element, "typeu").value_or(-1)), + lattice_interpolation_name(read_integer(*blend.sdna, element, "typev").value_or(-1)), + lattice_interpolation_name(read_integer(*blend.sdna, element, "typew").value_or(-1))}}, + {"useOutside", (flag & LT_OUTSIDE) != 0}, + {"activePoint", read_integer(*blend.sdna, element, "actbp").value_or(LT_ACTBP_NONE)}, + {"vertexGroup", read_string(*blend.sdna, element, "vgroup")}, + {"status", points_complete ? "AVAILABLE" : "BLOCKED"}, + }; + if (points_complete) lattice["points"] = std::move(points); + else lattice["errorCode"] = dimensions_valid ? "LATTICE_POINTS_UNREADABLE" : + "LATTICE_DIMENSIONS_INVALID"; + lattices.push_back(std::move(lattice)); + } + else if (record.type_name == "ParticleSettings") { + const int64_t particle_type = read_integer(*blend.sdna, element, "type").value_or(0); + const int64_t particle_from = read_integer(*blend.sdna, element, "from").value_or(0); + const int64_t particle_physics = read_integer(*blend.sdna, element, "phystype").value_or(0); + particle_settings.push_back({ + {"id", record.id}, + {"name", record.name}, + {"type", particle_type == 2 ? 1 : 0}, + {"from", particle_from == 1 ? 0 : particle_from == 0 ? 1 : 2}, + {"distribution", std::max(0, read_integer(*blend.sdna, element, "distr").value_or(0))}, + {"physicsType", particle_physics == 1 ? 0 : particle_physics == 2 ? 1 : particle_physics == 3 ? 2 : 3}, + {"totalParticles", std::max(0, read_integer(*blend.sdna, element, "totpart").value_or(0))}, + {"start", std::max(0.0f, read_float(*blend.sdna, element, "sta").value_or(0.0f))}, + {"end", std::max(0.0f, read_float(*blend.sdna, element, "end").value_or(0.0f))}, + {"lifetime", std::max(0.0f, read_float(*blend.sdna, element, "lifetime").value_or(0.0f))}, + {"size", std::max(0.0f, read_float(*blend.sdna, element, "size").value_or(0.0f))}, + {"drawSize", std::max(0.0f, read_float(*blend.sdna, element, "draw_size").value_or(0.0f))}, + }); + } + else if (record.type_name == "bSound") { + const std::string filepath = read_string(*blend.sdna, element, "filepath"); + const std::optional packed_pointer = read_pointer(*blend.sdna, element, "packedfile"); + const std::vector packed_bytes = packed_pointer ? packed_file_bytes(blend, *packed_pointer) : std::vector(); + json sound = {{"id", record.id}, + {"name", record.name}, + {"sourcePath", filepath}, + {"packed", !packed_bytes.empty()}, + {"volume", std::max(0.0f, read_float(*blend.sdna, element, "volume").value_or(1.0f))}, + {"pitch", std::max(0.0f, read_float(*blend.sdna, element, "pitch").value_or(1.0f))}, + {"audioChannels", std::max(0, read_integer(*blend.sdna, element, "audio_channels").value_or(0))}, + {"sampleRate", std::max(0, read_integer(*blend.sdna, element, "samplerate").value_or(0))}}; + if (!packed_bytes.empty()) sound["packedByteLength"] = packed_bytes.size(); + sounds.push_back(std::move(sound)); + } + else if (record.type_name == "Speaker") { + json speaker = { + {"id", record.id}, + {"name", record.name}, + {"volumeMax", std::max(0.0f, read_float(*blend.sdna, element, "volume_max").value_or(1.0f))}, + {"volumeMin", std::max(0.0f, read_float(*blend.sdna, element, "volume_min").value_or(0.0f))}, + {"distanceMax", std::max(0.0f, read_float(*blend.sdna, element, "distance_max").value_or(0.0f))}, + {"distanceReference", std::max(0.0f, read_float(*blend.sdna, element, "distance_reference").value_or(1.0f))}, + {"attenuation", std::max(0.0f, read_float(*blend.sdna, element, "attenuation").value_or(1.0f))}, + {"coneAngleOuter", std::clamp(read_float(*blend.sdna, element, "cone_angle_outer").value_or(360.0f), 0.0f, 360.0f)}, + {"coneAngleInner", std::clamp(read_float(*blend.sdna, element, "cone_angle_inner").value_or(360.0f), 0.0f, 360.0f)}, + {"coneVolumeOuter", std::clamp(read_float(*blend.sdna, element, "cone_volume_outer").value_or(1.0f), 0.0f, 1.0f)}, + {"volume", std::max(0.0f, read_float(*blend.sdna, element, "volume").value_or(1.0f))}, + {"pitch", std::max(0.0f, read_float(*blend.sdna, element, "pitch").value_or(1.0f))}, + }; + if (const std::optional sound_pointer = read_pointer(*blend.sdna, element, "sound")) { + const auto sound_id = ids_by_pointer.find(*sound_pointer); + if (sound_id != ids_by_pointer.end()) speaker["soundId"] = sound_id->second; + } + speakers.push_back(std::move(speaker)); + } + else if (record.type_name == "Image") { + std::string filepath = read_string(*blend.sdna, element, "filepath"); + const std::vector image_views = linked_list_elements(blend, element, "views"); + if (filepath.empty()) { + if (!image_views.empty()) filepath = read_string(*blend.sdna, image_views.front(), "filepath"); + } + const std::string mime_type = image_mime_type(filepath); + const int64_t source = read_integer(*blend.sdna, element, "source").value_or(0); + const std::vector packed_records = image_packed_records(blend, element); + const std::vector image_tiles = linked_list_elements(blend, element, "tiles"); + std::string library_path; + if (const std::optional id = embedded_element(*blend.sdna, element, "id")) { + if (const std::optional library_pointer = read_pointer(*blend.sdna, *id, "lib")) { + if (const std::optional library = element_for_pointer(blend, *library_pointer)) { + library_path = read_string(*blend.sdna, *library, "filepath"); + } + } + } + const bool packed = std::any_of(packed_records.begin(), packed_records.end(), [](const PackedImageRecord &candidate) { + return !candidate.bytes.empty(); + }); + bool corrupt = false; + json tiles = json::array(); + for (const ElementRef &tile : image_tiles) { + const int tile_number = int(read_integer(*blend.sdna, tile, "tile_number").value_or(1001)); + const auto packed_tile = std::find_if(packed_records.begin(), packed_records.end(), [tile_number](const PackedImageRecord &candidate) { + return candidate.tile_number == tile_number; + }); + std::string tile_path = packed_tile != packed_records.end() && !packed_tile->filepath.empty() ? + packed_tile->filepath : filepath; + const std::string tile_asset_id = source == 6 ? record.id + ":tile:" + std::to_string(tile_number) : record.id; + const std::string tile_mime = image_mime_type(tile_path); + json tile_json = {{"number", tile_number}, + {"label", read_string(*blend.sdna, tile, "label")}, + {"width", read_integer(*blend.sdna, tile, "gen_x").value_or(0)}, + {"height", read_integer(*blend.sdna, tile, "gen_y").value_or(0)}, + {"generatedType", read_integer(*blend.sdna, tile, "gen_type").value_or(0)}, + {"sourcePath", tile_path}, + {"assetId", tile_asset_id}, + {"mimeType", tile_mime}, + {"packed", packed_tile != packed_records.end() && !packed_tile->bytes.empty()}}; + const std::vector generated_color = read_float_array(*blend.sdna, tile, "gen_color", 4); + if (!generated_color.empty()) tile_json["generatedColor"] = generated_color; + if (packed_tile != packed_records.end() && !packed_tile->bytes.empty()) { + packed_assets.emplace(tile_asset_id, packed_tile->bytes); + tile_json["packedByteLength"] = packed_tile->bytes.size(); + const bool valid = image_signature_valid(tile_mime, packed_tile->bytes); + tile_json["validSignature"] = valid; + corrupt |= !valid; + } + tiles.push_back(std::move(tile_json)); + } + if (tiles.empty() && !packed_records.empty()) { + const PackedImageRecord &packed_record = packed_records.front(); + if (!packed_record.bytes.empty()) packed_assets.emplace(record.id, packed_record.bytes); + corrupt = !image_signature_valid(mime_type, packed_record.bytes); + } + const int64_t width = !image_tiles.empty() ? read_integer(*blend.sdna, image_tiles.front(), "gen_x").value_or(0) : + read_integer(*blend.sdna, element, "gen_x").value_or(0); + const int64_t height = !image_tiles.empty() ? read_integer(*blend.sdna, image_tiles.front(), "gen_y").value_or(0) : + read_integer(*blend.sdna, element, "gen_y").value_or(0); + std::string asset_status = packed ? "PACKED" : !library_path.empty() ? "LINKED_LIBRARY_REQUIRED" : + source == 4 ? "GENERATED" : source == 6 ? "UDIM_EXTERNAL" : + !filepath.empty() ? "EXTERNAL" : "MISSING"; + std::string error_code; + if (corrupt) { + asset_status = "CORRUPT"; + error_code = "PACKED_IMAGE_SIGNATURE_INVALID"; + } + else if (!library_path.empty() && !packed) { + error_code = "LINKED_IMAGE_LIBRARY_REQUIRED"; + } + json image = {{"id", record.id}, + {"name", record.name}, + {"assetId", !tiles.empty() ? tiles.front().value("assetId", record.id) : record.id}, + {"mimeType", mime_type}, + {"width", width}, + {"height", height}, + {"sourcePath", filepath}, + {"sourceKind", image_source_kind(source)}, + {"assetStatus", asset_status}, + {"packed", packed}, + {"libraryLinked", !library_path.empty()}}; + if (!library_path.empty()) image["libraryPath"] = library_path; + if (!error_code.empty()) image["errorCode"] = error_code; + if (!tiles.empty()) image["tiles"] = std::move(tiles); + if (packed_records.size() == 1 && !packed_records.front().bytes.empty()) { + image["packedByteLength"] = packed_records.front().bytes.size(); + } + images.push_back(std::move(image)); + } + else if (record.type_name == "Curve" || record.type_name == "MetaBall" || + record.type_name == "PointCloud" || record.type_name == "Curves" || + record.type_name == "Volume") { + non_mesh_data.push_back(non_mesh_data_from_record(blend, element, record, ids_by_pointer)); + } + else if (record.type_name == "Text") { + if (const std::optional text = script_source_from_record(blend, element, record)) { + json resource = {{"id", record.id}, {"name", record.name}}; + resource["source"] = text->value("source", std::string()); + resource["sourceSha256"] = text->value("sourceSha256", std::string()); + resource["byteLength"] = text->value("byteLength", size_t(0)); + resource["lineCount"] = text->value("lineCount", size_t(0)); + resource["internal"] = text->value("internal", true); + resource["isDirty"] = (read_integer(*blend.sdna, element, "flags").value_or(0) & (1 << 0)) != 0; + resource["useModule"] = (read_integer(*blend.sdna, element, "flags").value_or(0) & (1 << 4)) != 0; + if (text->contains("sourcePath")) resource["sourcePath"] = text->at("sourcePath"); + texts.push_back(std::move(resource)); + } + if (script_sources.size() >= 1024) { + script_sources_blocked = true; + } + else if (const std::optional source = script_source_from_record( + blend, element, record)) + { + const size_t byte_length = source->value("byteLength", size_t(0)); + if (byte_length > MAX_SCRIPT_SOURCE_BYTES - script_source_bytes) { + script_sources_blocked = true; + } + else { + script_source_bytes += byte_length; + script_sources.push_back(*source); + } + } + else { + script_sources_blocked = true; + } + } + else if (record.type_name == "Tex") { + textures.push_back({ + {"id", record.id}, + {"name", record.name}, + {"type", read_integer(*blend.sdna, element, "type").value_or(0)}, + {"noiseScale", std::max(0.0f, read_float(*blend.sdna, element, "noisesize").value_or(0.25f))}, + {"noiseDepth", std::clamp(read_integer(*blend.sdna, element, "noisedepth").value_or(2), 0, 30)}, + {"intensity", std::max(0.0f, read_float(*blend.sdna, element, "bright").value_or(1.0f))}, + {"contrast", std::max(0.0f, read_float(*blend.sdna, element, "contrast").value_or(1.0f))}, + {"saturation", std::max(0.0f, read_float(*blend.sdna, element, "saturation").value_or(1.0f))}, + }); + } + else if (record.type_name == "WorkSpace") { + workspace_resources.push_back({{"id", record.id}, {"name", record.name}, {"screenCount", linked_list_elements(blend, element, "layouts").size()}}); + } + else if (record.type_name == "VFont") { + const std::string filepath = read_string(*blend.sdna, element, "filepath"); + const std::optional packed_file = read_pointer(*blend.sdna, element, "packedfile"); + const std::vector packed_bytes = packed_file ? packed_file_bytes(blend, *packed_file) : + std::vector(); + json resource = {{"id", record.id}, + {"name", record.name}, + {"sourcePath", filepath}, + {"builtin", filepath == ""}, + {"packed", !packed_bytes.empty()}}; + if (!packed_bytes.empty()) { + resource["packedByteLength"] = packed_bytes.size(); + resource["sha256"] = sha256_hex(std::string( + reinterpret_cast(packed_bytes.data()), packed_bytes.size())); + } + vfonts.push_back(std::move(resource)); + } + else if (record.type_name == "Camera") { + const int64_t camera_type = read_integer(*blend.sdna, element, "type").value_or(0); + json camera = {{"id", record.id}, + {"name", record.name}, + {"projection", camera_type == 1 ? "ORTHOGRAPHIC" : + camera_type == 2 ? "PANORAMIC" : + camera_type == 3 ? "CUSTOM" : "PERSPECTIVE"}, + {"lensMm", read_float(*blend.sdna, element, "lens").value_or(50.0f)}, + {"sensorWidthMm", read_float(*blend.sdna, element, "sensor_x").value_or(36.0f)}, + {"sensorHeightMm", read_float(*blend.sdna, element, "sensor_y").value_or(24.0f)}, + {"sensorFit", read_integer(*blend.sdna, element, "sensor_fit").value_or(0)}, + {"shift", + json::array({read_float(*blend.sdna, element, "shiftx").value_or(0.0f), + read_float(*blend.sdna, element, "shifty").value_or(0.0f)})}, + {"near", read_float(*blend.sdna, element, "clip_start").value_or(0.1f)}, + {"far", read_float(*blend.sdna, element, "clip_end").value_or(1000.0f)}, + {"orthoScale", read_float(*blend.sdna, element, "ortho_scale").value_or(6.0f)}, + {"panoramaType", read_integer(*blend.sdna, element, "panorama_type").value_or(0)}, + {"fisheyeFov", read_float(*blend.sdna, element, "fisheye_fov").value_or(3.14159265f)}}; + if (const std::optional dof = embedded_element(*blend.sdna, element, "dof")) { + json depth_of_field = { + {"enabled", (read_integer(*blend.sdna, *dof, "flag").value_or(0) & 1) != 0}, + {"focusDistance", read_float(*blend.sdna, *dof, "focus_distance").value_or(10.0f)}, + {"apertureFStop", read_float(*blend.sdna, *dof, "aperture_fstop").value_or(2.8f)}, + {"apertureBlades", read_integer(*blend.sdna, *dof, "aperture_blades").value_or(0)}, + {"apertureRotation", read_float(*blend.sdna, *dof, "aperture_rotation").value_or(0.0f)}, + {"apertureRatio", read_float(*blend.sdna, *dof, "aperture_ratio").value_or(1.0f)}}; + if (const std::optional focus_object = read_pointer(*blend.sdna, *dof, "focus_object")) { + const auto focus_id = ids_by_pointer.find(*focus_object); + depth_of_field["focusObjectId"] = focus_id == ids_by_pointer.end() ? json(nullptr) : + json(focus_id->second); + } + camera["depthOfField"] = std::move(depth_of_field); + } + cameras.push_back(std::move(camera)); + } + else if (record.type_name == "Light" || record.type_name == "Lamp") { + const int64_t light_mode = read_integer(*blend.sdna, element, "mode").value_or(1); + lights.push_back({{"id", record.id}, + {"name", record.name}, + {"lightType", read_integer(*blend.sdna, element, "type").value_or(0)}, + {"color", + json::array({read_float(*blend.sdna, element, "r").value_or(1.0f), + read_float(*blend.sdna, element, "g").value_or(1.0f), + read_float(*blend.sdna, element, "b").value_or(1.0f)})}, + {"energy", read_float(*blend.sdna, element, "energy").value_or(10.0f)}, + {"exposure", read_float(*blend.sdna, element, "exposure").value_or(0.0f)}, + {"temperature", read_float(*blend.sdna, element, "temperature").value_or(6500.0f)}, + {"useTemperature", (light_mode & (1 << 24)) != 0}, + {"castsShadow", (light_mode & 1) != 0}, + {"radius", read_float(*blend.sdna, element, "radius").value_or(0.0f)}, + {"spotAngle", read_float(*blend.sdna, element, "spotsize").value_or(0.785398f)}, + {"spotBlend", read_float(*blend.sdna, element, "spotblend").value_or(0.15f)}, + {"areaShape", read_integer(*blend.sdna, element, "area_shape").value_or(0)}, + {"areaSize", read_float(*blend.sdna, element, "area_size").value_or(0.25f)}, + {"areaSizeY", read_float(*blend.sdna, element, "area_sizey").value_or(0.25f)}, + {"areaSpread", read_float(*blend.sdna, element, "area_spread").value_or(3.14159265f)}, + {"sunAngle", read_float(*blend.sdna, element, "sun_angle").value_or(0.00918f)}}); + } + else if (record.type_name == "World") { + const float horizon_r = read_float(*blend.sdna, element, "horr").value_or(0.05f); + const float horizon_g = read_float(*blend.sdna, element, "horg").value_or(0.05f); + const float horizon_b = read_float(*blend.sdna, element, "horb").value_or(0.05f); + const float exposure = read_float(*blend.sdna, element, "exposure").value_or(0.0f); + json world = { {"id", record.id}, + {"name", record.name}, + {"color", json::array({horizon_r, horizon_g, horizon_b})}, + {"exposure", exposure}, + {"backgroundVisible", true} }; + const int64_t world_mode = read_integer(*blend.sdna, element, "mode").value_or(0); + const int64_t mist_type = read_integer(*blend.sdna, element, "mistype").value_or(0); + world["mist"] = {{"enabled", (world_mode & 1) != 0}, + {"type", mist_type == 1 ? "LINEAR" : + mist_type == 2 ? "INVERSE_QUADRATIC" : "QUADRATIC"}, + {"start", read_float(*blend.sdna, element, "miststa").value_or(5.0f)}, + {"depth", read_float(*blend.sdna, element, "mistdist").value_or(25.0f)}, + {"intensity", read_float(*blend.sdna, element, "misi").value_or(0.0f)}, + {"height", read_float(*blend.sdna, element, "misthi").value_or(0.0f)}}; + const std::optional node_tree_pointer = read_pointer(*blend.sdna, element, "nodetree"); + if (node_tree_pointer) { + const std::optional node_tree = element_for_pointer(blend, *node_tree_pointer); + if (node_tree) { + for (const ElementRef &node : linked_list_elements(blend, *node_tree, "nodes")) { + const std::string node_type = read_string(*blend.sdna, node, "idname"); + if (node_type == "ShaderNodeTexEnvironment") { + if (const std::optional image_pointer = read_pointer(*blend.sdna, node, "id")) { + const auto image_id = ids_by_pointer.find(*image_pointer); + if (image_id != ids_by_pointer.end()) world["environmentImageId"] = image_id->second; + } + } + else if (node_type == "ShaderNodeBackground") { + for (const ElementRef &socket : linked_list_elements(blend, node, "inputs")) { + if (read_string(*blend.sdna, socket, "name") == "Strength") { + const std::vector values = node_socket_default_values(blend, socket); + if (!values.empty()) world["environmentStrength"] = std::max(0.0f, values.front()); + } + } + } + } + } + } + worlds.push_back(std::move(world)); + } + else if (record.type_name == "Collection" || record.type_name == "Group") { + collections.push_back( + {{"id", record.id}, + {"name", record.name}, + {"objectIds", + traverse_collection_list(blend, element, "gobject", "ob", ids_by_pointer)}, + {"childCollectionIds", + traverse_collection_list(blend, element, "children", "collection", ids_by_pointer)}}); + } + else if (record.type_name == "Scene") { + json scene = {{"id", record.id}, {"name", record.name}}; + int scene_frame_start = frame_start; + int scene_frame_end = frame_end; + int scene_fps = 24; + float scene_fps_base = 1.0f; + if (const std::optional root = + read_pointer(*blend.sdna, element, "master_collection")) + { + const auto root_id = ids_by_pointer.find(*root); + scene["rootCollectionId"] = root_id == ids_by_pointer.end() ? json(nullptr) : + json(root_id->second); + } + if (const std::optional camera = read_pointer(*blend.sdna, element, "camera")) { + const auto camera_id = ids_by_pointer.find(*camera); + scene["cameraObjectId"] = camera_id == ids_by_pointer.end() ? json(nullptr) : + json(camera_id->second); + } + if (const std::optional world = read_pointer(*blend.sdna, element, "world")) { + const auto world_id = ids_by_pointer.find(*world); + scene["worldId"] = world_id == ids_by_pointer.end() ? json(nullptr) : json(world_id->second); + } + else { + scene["worldId"] = nullptr; + } + if (const std::optional render = embedded_element(*blend.sdna, element, "r")) { + frame_current = int(read_integer(*blend.sdna, *render, "cfra").value_or(frame_current)); + frame_start = int(read_integer(*blend.sdna, *render, "sfra").value_or(frame_start)); + frame_end = int(read_integer(*blend.sdna, *render, "efra").value_or(frame_end)); + scene_frame_start = frame_start; + scene_frame_end = frame_end; + scene_fps = int(read_integer(*blend.sdna, *render, "frs_sec").value_or(24)); + scene_fps_base = read_float(*blend.sdna, *render, "frs_sec_base").value_or(1.0f); + scene["renderEngine"] = read_string(*blend.sdna, *render, "engine"); + const int64_t render_flags = read_integer(*blend.sdna, *render, "flag").value_or(0); + if ((render_flags & SCER_PRV_RANGE) != 0) { + scene["previewRange"] = {{"start", read_integer(*blend.sdna, *render, "psfra").value_or(frame_start)}, + {"end", read_integer(*blend.sdna, *render, "pefra").value_or(frame_end)}}; + } + } + if (const std::optional units = embedded_element(*blend.sdna, element, "unit")) { + unit_system = int(read_integer(*blend.sdna, *units, "system").value_or(unit_system)); + unit_scale = read_float(*blend.sdna, *units, "scale_length").value_or(unit_scale); + } + if (const std::optional view = embedded_element(*blend.sdna, element, "view_settings")) { + json color_management = {{"viewTransform", read_string(*blend.sdna, *view, "view_transform")}, + {"look", read_string(*blend.sdna, *view, "look")}, + {"exposure", read_float(*blend.sdna, *view, "exposure").value_or(0.0f)}, + {"gamma", read_float(*blend.sdna, *view, "gamma").value_or(1.0f)}}; + const float temperature = read_float(*blend.sdna, *view, "temperature").value_or(6500.0f); + const float tint = read_float(*blend.sdna, *view, "tint").value_or(10.0f); + if (std::isfinite(temperature) && temperature >= 1000.0f && temperature <= 20000.0f && + std::isfinite(tint) && tint >= -100.0f && tint <= 100.0f && + (tint == 0.0f || std::abs(tint) >= 1.0e-4f)) + { + color_management["temperature"] = temperature; + color_management["tint"] = tint; + color_management["whiteBalanceStatus"] = "AVAILABLE"; + } + else { + color_management["whiteBalanceStatus"] = "BLOCKED"; + } + if (const std::optional display = embedded_element(*blend.sdna, element, "display_settings")) { + color_management["displayDevice"] = read_string(*blend.sdna, *display, "display_device"); + } + else { + color_management["displayDevice"] = ""; + } + scene["colorManagement"] = std::move(color_management); + } + if (const std::optional compositor = compositor_graph_from_scene( + blend, element, record.id, record.name)) + { + scene["compositorStatus"] = compositor->value("status", "BLOCKED"); + if (compositor->contains("graph")) scene["compositorGraph"] = compositor->at("graph"); + } + if (const std::optional sequencer = sequencer_timeline_from_scene(blend, + element, + record.id, + revision, + scene_frame_start, + scene_frame_end, + scene_fps, + scene_fps_base, + ids_by_pointer)) + { + scene["sequencerStatus"] = sequencer->value("status", "BLOCKED"); + if (sequencer->contains("timeline")) scene["sequencerTimeline"] = sequencer->at("timeline"); + } + if (first_scene_id.empty()) { + first_scene_id = record.id; + } + scenes.push_back(std::move(scene)); + } + else if (record.type_name == "Mask") { + if (const std::optional parsed_mask = mask_from_record( + blend, element, record.id, record.name)) + { + masks.push_back(*parsed_mask); + } + else { + masks_blocked = true; + } + } + } + + for (const BlendBlock &block : blend.blocks) { + if (block.type_name != "Library") continue; + const ElementRef library{&block, 0, block.type_name}; + const std::string path = read_string(*blend.sdna, library, "filepath"); + const std::string library_name = read_id_name(*blend.sdna, library); + const std::string library_id = "library:" + library_name; + const bool project_path = path.rfind("//", 0) == 0 && path.size() > 2 && path.size() <= 2050 && + path.find('\\') == std::string::npos && path.find('%') == std::string::npos && + path.find("/../") == std::string::npos && path.find("//", 2) == std::string::npos; + if (!project_path || library_name.empty() || library_id.size() > 256) { + libraries_blocked = true; + continue; + } + const std::optional packed_file = read_pointer(*blend.sdna, library, "packedfile"); + const std::vector packed_bytes = packed_file ? packed_file_bytes(blend, *packed_file) : + std::vector(); + json dependencies = json::array(); + const std::optional parent_pointer = read_pointer( + *blend.sdna, library, "archive_parent_library"); + if (parent_pointer && *parent_pointer != 0) { + const auto parent_id = ids_by_pointer.find(*parent_pointer); + if (parent_id == ids_by_pointer.end()) { + libraries_blocked = true; + continue; + } + dependencies.push_back(parent_id->second); + } + json resource = {{"id", library_id}, + {"name", library_name}, + {"sourcePath", path}, + {"packed", !packed_bytes.empty()}, + {"status", packed_bytes.empty() ? "EXTERNAL_REQUIRED" : "PACKED"}, + {"dependencyIds", std::move(dependencies)}, + {"readOnly", true}}; + if (packed_bytes.empty()) resource["errorCode"] = "LINKED_LIBRARY_RESOURCE_REQUIRED"; + else resource["packedByteLength"] = packed_bytes.size(); + libraries.push_back(std::move(resource)); + } + + for (json &mesh : meshes) { + const auto modifiers = modifier_stacks_by_mesh_id.find(mesh.value("id", "")); + if (modifiers != modifier_stacks_by_mesh_id.end()) mesh["modifierStack"] = modifiers->second; + if (!mesh.contains("skinWeights") || !mesh.contains("modifierStack")) continue; + for (const json &modifier : mesh["modifierStack"]) { + if (modifier.value("type", "") != "ARMATURE") continue; + const std::string object_id = modifier.value("parameters", json::object()).value("armatureObjectId", ""); + const auto armature_id = armature_id_by_object_id.find(object_id); + if (armature_id == armature_id_by_object_id.end()) continue; + mesh["skinWeights"]["armatureId"] = armature_id->second; + for (const json &armature : armatures) { + if (armature.value("id", "") != armature_id->second) continue; + std::unordered_map bone_ids; + for (const json &bone : armature.value("bones", json::array())) { + bone_ids[bone.value("name", "")] = bone.value("id", ""); + } + json joint_ids = json::array(); + for (const json &name : mesh["skinWeights"].value("boneNames", json::array())) { + const auto bone = bone_ids.find(name.get()); + joint_ids.push_back(bone == bone_ids.end() ? "" : bone->second); + } + mesh["skinWeights"]["jointIds"] = std::move(joint_ids); + break; + } + break; + } + } + + for (const IdRecord &record : records) { + if ((record.type_name != "bAction" && record.type_name != "Action") || + linked_action_pointers.contains(record.pointer)) + { + continue; + } + const size_t animation_count = animations.size(); + append_action_animation(blend, "unlinked", record.pointer, animations, visited_animations); + if (animations.size() > animation_count) { + animations.back()["unlinked"] = true; + } + } + + sort_by_id(nodes); + sort_by_id(meshes); + sort_by_id(materials); + sort_by_id(cameras); + sort_by_id(lights); + sort_by_id(worlds); + sort_by_id(images); + sort_by_id(brushes); + sort_by_id(line_styles); + sort_by_id(lattices); + sort_by_id(particle_settings); + sort_by_id(sounds); + sort_by_id(speakers); + sort_by_id(texts); + sort_by_id(textures); + sort_by_id(workspace_resources); + sort_by_id(non_mesh_data); + sort_by_id(vfonts); + sort_by_id(libraries); + sort_by_id(script_sources); + sort_by_id(animations); + sort_by_id(armatures); + sort_by_id(collections); + sort_by_id(scenes); + populate_world_matrices(nodes); + + const std::string active_object_id = first_mesh_object_id.empty() ? first_object_id : + first_mesh_object_id; + std::optional editor_workflow = editor_workflow_from_records( + blend, records, revision, active_object_id); + json snapshot = { + {"schemaVersion", 1}, + {"revision", revision}, + {"sceneId", first_scene_id.empty() ? "scene:root" : first_scene_id}, + {"source", + {{"kind", "blend"}, + {"fileVersion", blend.header.file_version}, + {"fileFormatVersion", blend.header.file_format_version}, + {"pointerSize", blend.header.pointer_size}, + {"endianness", "little"}, + {"compression", blend.compression}}}, + {"coordinateSystem", + {{"upAxis", "Z"}, + {"forwardAxis", "-Y"}, + {"handedness", "RIGHT"}, + {"unitSystem", unit_system}, + {"unitScale", unit_scale}}}, + {"nodes", std::move(nodes)}, + {"meshes", std::move(meshes)}, + {"materials", std::move(materials)}, + {"cameras", std::move(cameras)}, + {"lights", std::move(lights)}, + {"worlds", std::move(worlds)}, + {"images", std::move(images)}, + {"brushes", std::move(brushes)}, + {"lineStyles", std::move(line_styles)}, + {"lattices", std::move(lattices)}, + {"particleSettings", std::move(particle_settings)}, + {"sounds", std::move(sounds)}, + {"speakers", std::move(speakers)}, + {"texts", std::move(texts)}, + {"textures", std::move(textures)}, + {"workspaces", std::move(workspace_resources)}, + {"nonMeshData", std::move(non_mesh_data)}, + {"vfonts", std::move(vfonts)}, + {"libraryStatus", libraries_blocked ? "BLOCKED" : "AVAILABLE"}, + {"trackingMaskStatus", masks_blocked ? "BLOCKED" : "AVAILABLE"}, + {"editorWorkflowStatus", editor_workflow ? "AVAILABLE" : "BLOCKED"}, + {"scriptSourceStatus", script_sources_blocked ? "BLOCKED" : "AVAILABLE"}, + {"animations", std::move(animations)}, + {"nlaTracks", std::move(nla_tracks)}, + {"armatures", std::move(armatures)}, + {"collections", std::move(collections)}, + {"scenes", std::move(scenes)}, + {"activeObjectId", active_object_id.empty() ? json(nullptr) : json(active_object_id)}, + {"frame", {{"current", frame_current}, {"start", frame_start}, {"end", frame_end}}}}; + snapshot["windowManager"] = {{"id", "window-manager:WinMan"}, {"name", "WinMan"}, {"presetName", "New Preset"}, {"windowCount", 1}, {"interfaceLocked", false}}; + if (!masks_blocked) { + snapshot["trackingMasks"] = {{"schemaVersion", 1}, + {"revision", revision}, + {"clips", json::array()}, + {"masks", std::move(masks)}, + {"bindings", json::array()}}; + } + if (!libraries_blocked) snapshot["libraries"] = std::move(libraries); + if (editor_workflow) snapshot["editorWorkflow"] = std::move(*editor_workflow); + if (!script_sources_blocked) { + snapshot["scriptSources"] = {{"schemaVersion", 1}, {"sources", std::move(script_sources)}}; + } + return snapshot; +} + +} // namespace + +std::string web_engine_sha256_hex(const std::string &value) +{ + return sha256_hex(value); +} + +WebBlendReadResult web_engine_read_blend_scene_ir(const uint8_t *data, + const uint32_t length, + const uint64_t revision) +{ + WebBlendReadResult result; + result.source_bytes = length; + if (data == nullptr || length == 0) { + result.error = "Blend buffer is empty"; + return result; + } + if (length > uint32_t(std::numeric_limits::max())) { + result.error = "Blend buffer exceeds the WebEngine addressable size"; + return result; + } + + ParsedBlend blend; + if (!read_blend(data, length, blend, result.error)) { + return result; + } + try { + result.scene_ir = scene_ir_from_blend(blend, revision, result.packed_assets).dump(); + result.ok = true; + } + catch (const std::exception &exception) { + result.error = std::string("SceneIR serialization failed: ") + exception.what(); + } + return result; +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp b/tests/golden/corrective/C0-002/staged/source-snapshot/files/blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp new file mode 100644 index 00000000..5980e462 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp @@ -0,0 +1,5180 @@ +#include "web_engine_main_state.h" +#include "web_engine_blend_reader.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "json.hpp" + +#include "BKE_blender.hh" +#include "BKE_action.hh" +#include "BKE_anim_data.hh" +#include "BKE_attribute.hh" +#include "BKE_attribute.h" +#include "BKE_blendfile_link_append.hh" +#include "BKE_layer.hh" +#include "BKE_collection.hh" +#include "BKE_curve.hh" +#include "BKE_deform.hh" +#include "BKE_curves.hh" +#include "BKE_grease_pencil.hh" +#include "BKE_lib_id.hh" +#include "BKE_main.hh" +#include "BKE_material.hh" +#include "BKE_mesh.h" +#include "BKE_mesh.hh" +#include "BKE_node.hh" +#include "BKE_node_legacy_types.hh" +#include "BKE_node_runtime.hh" +#include "BKE_node_tree_update.hh" +#include "BKE_nla.hh" +#include "BKE_object.hh" +#include "BKE_object_deform.h" +#include "BKE_packedFile.hh" +#include "BKE_scene.hh" +#include "BKE_vfont.hh" +#include "BKE_volume.hh" +#include "BKE_fcurve.hh" +#include "BKE_image.hh" + +#include "ANIM_action.hh" +#include "ANIM_fcurve.hh" + +#include "BLO_readfile.hh" +#include "BLO_writefile.hh" + +#include "DNA_mesh_types.h" +#include "DNA_action_types.h" +#include "DNA_anim_types.h" +#include "DNA_constraint_types.h" +#include "DNA_camera_types.h" +#include "DNA_light_types.h" +#include "DNA_curve_enums.h" +#include "DNA_curve_types.h" +#include "DNA_grease_pencil_types.h" +#include "DNA_image_types.h" +#include "DNA_meta_types.h" +#include "DNA_material_types.h" +#include "DNA_meshdata_types.h" +#include "DNA_modifier_types.h" +#include "DNA_node_types.h" +#include "DNA_object_force_types.h" +#include "DNA_object_types.h" +#include "DNA_particle_types.h" +#include "DNA_rigidbody_types.h" +#include "DNA_scene_types.h" +#include "DNA_world_types.h" +#include "DNA_userdef_enums.h" +#include "DNA_vfont_types.h" +#include "DNA_volume_types.h" + +#include "BLI_listbase_iterator.hh" +#include "BLI_listbase.h" +#include "BLI_color.hh" +#include "BLI_math_matrix.h" +#include "BLI_math_vector.h" +#include "BLI_string.h" +#include "BLI_string_utf8.h" + +#include "MEM_guardedalloc.h" + +#include "bmesh.hh" +#include "bmesh_tools.hh" + +struct WebBlendMainState { + blender::BlendFileData *blend = nullptr; + blender::Main *main = nullptr; + blender::Scene *scene = nullptr; + blender::ViewLayer *view_layer = nullptr; +}; + +namespace { + +using namespace blender; +using json = nlohmann::json; + +class GlobalMainScope { + public: + explicit GlobalMainScope(Main *main) : main_(main) + { + if (main_ != nullptr && !main_->is_global_main) { + previous_ = BKE_blender_globals_main_swap(main_); + } + } + + ~GlobalMainScope() + { + if (previous_ != nullptr) { + BKE_blender_globals_main_swap(previous_); + } + } + + GlobalMainScope(const GlobalMainScope &) = delete; + GlobalMainScope &operator=(const GlobalMainScope &) = delete; + + private: + Main *main_ = nullptr; + Main *previous_ = nullptr; +}; + +std::string id_name(const ID &id) +{ + return id.name[0] != '\0' && id.name[1] != '\0' ? std::string(id.name + 2) : std::string(); +} + +Object *find_object(Main *main, const char *object_id) +{ + if (main == nullptr || object_id == nullptr || strncmp(object_id, "object:", 7) != 0) { + return nullptr; + } + const std::string name(object_id + 7); + for (Object &object : main->objects) { + if (id_name(object.id) == name) return &object; + } + return nullptr; +} + +Object *find_mesh_object(Main *main, const char *mesh_id) +{ + if (main == nullptr || mesh_id == nullptr || strncmp(mesh_id, "mesh:", 5) != 0) { + return nullptr; + } + const std::string name(mesh_id + 5); + for (Object &object : main->objects) { + if (object.type != OB_MESH || object.data == nullptr) continue; + const Mesh *mesh = reinterpret_cast(object.data); + if (id_name(mesh->id) == name) return &object; + } + return nullptr; +} + +Curve *find_curve(Main *main, const char *data_id) +{ + if (main == nullptr || data_id == nullptr || strncmp(data_id, "curve:", 6) != 0) return nullptr; + const std::string name(data_id + 6); + for (Curve &curve : main->curves) if (id_name(curve.id) == name) return &curve; + return nullptr; +} + +Camera *find_camera(Main *main, const char *data_id) +{ + if (main == nullptr || data_id == nullptr || strncmp(data_id, "camera:", 7) != 0) return nullptr; + const std::string name(data_id + 7); + for (Camera &camera : main->cameras) if (id_name(camera.id) == name) return &camera; + return nullptr; +} + +VFont *find_vfont(Main *main, const char *font_id) +{ + if (main == nullptr || font_id == nullptr || strncmp(font_id, "vfont:", 6) != 0) return nullptr; + const std::string name(font_id + 6); + for (VFont &font : main->fonts) if (id_name(font.id) == name) return &font; + return nullptr; +} + +MetaBall *find_metaball(Main *main, const char *data_id) +{ + if (main == nullptr || data_id == nullptr || strncmp(data_id, "metaball:", 9) != 0) return nullptr; + const std::string name(data_id + 9); + for (MetaBall &metaball : main->metaballs) if (id_name(metaball.id) == name) return &metaball; + for (Object &object : main->objects) { + if (object.type != OB_MBALL || object.data == nullptr) continue; + MetaBall *metaball = reinterpret_cast(object.data); + if (id_name(metaball->id) == name) return metaball; + } + return nullptr; +} + +Volume *find_volume(Main *main, const char *data_id) +{ + if (main == nullptr || data_id == nullptr || strncmp(data_id, "volume:", 7) != 0) { + return nullptr; + } + const std::string name(data_id + 7); + for (Volume &volume : main->volumes) { + if (id_name(volume.id) == name) return &volume; + } + return nullptr; +} + +Light *find_light(Main *main, const char *data_id) +{ + if (main == nullptr || data_id == nullptr || strncmp(data_id, "light:", 6) != 0) return nullptr; + const std::string name(data_id + 6); + for (Light &light : main->lights) if (id_name(light.id) == name) return &light; + return nullptr; +} + +World *find_world(Main *main, const char *data_id) +{ + if (main == nullptr || data_id == nullptr || strncmp(data_id, "world:", 6) != 0) return nullptr; + const std::string name(data_id + 6); + for (World &world : main->worlds) if (id_name(world.id) == name) return &world; + return nullptr; +} + +GreasePencil *find_grease_pencil(Main *main, const char *data_id) +{ + if (main == nullptr || data_id == nullptr || strncmp(data_id, "grease-pencil:", 14) != 0) return nullptr; + const std::string name(data_id + 14); + for (GreasePencil &grease_pencil : main->grease_pencils) { + if (id_name(grease_pencil.id) == name) return &grease_pencil; + } + return nullptr; +} + +bke::greasepencil::Layer *find_grease_pencil_layer(GreasePencil *grease_pencil, + const char *layer_id) +{ + if (grease_pencil == nullptr || layer_id == nullptr || strncmp(layer_id, "grease-pencil-layer:", 20) != 0) return nullptr; + const std::string prefix = "grease-pencil-layer:" + id_name(grease_pencil->id) + ":"; + if (strncmp(layer_id, prefix.c_str(), prefix.size()) != 0) return nullptr; + const std::string name(layer_id + prefix.size()); + for (bke::greasepencil::Layer *layer : grease_pencil->layers_for_write()) { + if (layer != nullptr && layer->name() == name) return layer; + } + return nullptr; +} + +bool ensure_single_user_data(Main *main, ID *data, std::string &error) +{ + if (main == nullptr || data == nullptr || data->lib != nullptr) { + error = "LINKED_DATA_MUTATION_BLOCKED: linked non-mesh data cannot be edited"; + return false; + } + int users = 0; + for (Object &object : main->objects) { + if (object.data == data) users++; + } + if (users != 1) { + error = "NON_MESH_DATA_SHARED: non-mesh edit requires a single-user data-block"; + return false; + } + return true; +} + +Material *find_material(Main *main, const char *material_id) +{ + if (main == nullptr || material_id == nullptr || strncmp(material_id, "material:", 9) != 0) return nullptr; + const std::string name(material_id + 9); + for (Material &material : main->materials) if (id_name(material.id) == name) return &material; + return nullptr; +} + +Image *find_image(Main *main, const char *image_id) +{ + if (main == nullptr || image_id == nullptr || strncmp(image_id, "image:", 6) != 0) return nullptr; + const std::string name(image_id + 6); + for (Image &image : main->images) if (id_name(image.id) == name) return ℑ + return nullptr; +} + +Collection *find_collection(Main *main, Scene *scene, const char *collection_id) +{ + if (collection_id == nullptr || strncmp(collection_id, "collection:", 11) != 0) return nullptr; + const std::string name(collection_id + 11); + if (scene != nullptr && scene->master_collection != nullptr && id_name(scene->master_collection->id) == name) { + return scene->master_collection; + } + if (main != nullptr) { + for (Collection &collection : main->collections) if (id_name(collection.id) == name) return &collection; + } + return nullptr; +} + +bAction *find_action(Main *main, const char *action_id) +{ + if (main == nullptr || action_id == nullptr || strncmp(action_id, "action:", 7) != 0) return nullptr; + const std::string requested(action_id); + for (bAction &action : main->actions) { + const std::string prefix = "action:" + id_name(action.id); + if (requested == prefix || requested.rfind(prefix + ":", 0) == 0) return &action; + } + return nullptr; +} + +bool ensure_editable(Object *object, ID *data, std::string &error) +{ + if (object == nullptr || data == nullptr) { + error = "authoritative Blender data-block was not found"; + return false; + } + if (object->id.lib != nullptr || data->lib != nullptr) { + error = "LINKED_DATA_MUTATION_BLOCKED: linked data-blocks are read-only"; + return false; + } + return true; +} + +std::vector decode_base64(const char *text) +{ + static constexpr int8_t invalid = -1; + static const std::array table = []() { + std::array result{}; + result.fill(invalid); + const char *alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + for (int index = 0; alphabet[index] != '\0'; index++) result[uint8_t(alphabet[index])] = int8_t(index); + return result; + }(); + std::vector bytes; + if (text == nullptr) return bytes; + uint32_t accumulator = 0; + int bits = 0; + for (const unsigned char value : std::string(text)) { + if (value == '=') break; + const int8_t decoded = table[value]; + if (decoded == invalid) continue; + accumulator = (accumulator << 6) | uint32_t(decoded); + bits += 6; + if (bits >= 8) { + bits -= 8; + bytes.push_back(uint8_t((accumulator >> bits) & 0xff)); + } + } + return bytes; +} + +eBezTriple_Interpolation interpolation_from_name(const char *name) +{ + if (name != nullptr && strcmp(name, "CONSTANT") == 0) return BEZT_IPO_CONST; + if (name != nullptr && strcmp(name, "LINEAR") == 0) return BEZT_IPO_LIN; + return BEZT_IPO_BEZ; +} + +bNode *find_node(bNodeTree *tree, const int type) +{ + if (tree == nullptr) return nullptr; + for (bNode &node : tree->nodes) if (node.type_legacy == type) return &node; + return nullptr; +} + +template void web_node_storage_free(bNode *node) +{ + MEM_delete(static_cast(node->storage)); + node->storage = nullptr; +} + +template +void web_node_storage_copy(bNodeTree * /*tree*/, bNode *destination, const bNode *source) +{ + if (source->storage == nullptr) { + destination->storage = nullptr; + return; + } + Storage *copy = MEM_new(__func__); + memcpy(copy, source->storage, sizeof(Storage)); + destination->storage = copy; +} + +void initialize_web_node_type(bke::bNodeType &type, + const char *idname, + const int legacy_type, + const char *storage_name = nullptr) +{ + type.idname = UString(idname); + type.type_legacy = legacy_type; + type.ui_name = idname; + if (storage_name != nullptr) type.storagename = storage_name; +} + +bke::bNodeType &web_node_type(const int legacy_type) +{ + static bke::bNodeType principled; + static bke::bNodeType output; + static bke::bNodeType rgb; + static bke::bNodeType value; + static bke::bNodeType math; + static bke::bNodeType texture; + static bke::bNodeType normal; + static bke::bNodeType uv; + static bool initialized = false; + if (!initialized) { + initialized = true; + initialize_web_node_type( + principled, "ShaderNodeBsdfPrincipled", SH_NODE_BSDF_PRINCIPLED); + initialize_web_node_type(output, "ShaderNodeOutputMaterial", SH_NODE_OUTPUT_MATERIAL); + initialize_web_node_type(rgb, "ShaderNodeRGB", SH_NODE_RGB); + initialize_web_node_type(value, "ShaderNodeValue", SH_NODE_VALUE); + initialize_web_node_type(math, "ShaderNodeMath", SH_NODE_MATH); + initialize_web_node_type(texture, "ShaderNodeTexImage", SH_NODE_TEX_IMAGE, "NodeTexImage"); + texture.freefunc = web_node_storage_free; + texture.copyfunc = web_node_storage_copy; + initialize_web_node_type( + normal, "ShaderNodeNormalMap", SH_NODE_NORMAL_MAP, "NodeShaderNormalMap"); + normal.freefunc = web_node_storage_free; + normal.copyfunc = web_node_storage_copy; + initialize_web_node_type(uv, "ShaderNodeUVMap", SH_NODE_UVMAP, "NodeShaderUVMap"); + uv.freefunc = web_node_storage_free; + uv.copyfunc = web_node_storage_copy; + } + switch (legacy_type) { + case SH_NODE_RGB: return rgb; + case SH_NODE_VALUE: return value; + case SH_NODE_MATH: return math; + case SH_NODE_OUTPUT_MATERIAL: return output; + case SH_NODE_TEX_IMAGE: return texture; + case SH_NODE_NORMAL_MAP: return normal; + case SH_NODE_UVMAP: return uv; + default: return principled; + } +} + +const char *web_socket_idname(const eNodeSocketDatatype type) +{ + switch (type) { + case SOCK_FLOAT: return "NodeSocketFloat"; + case SOCK_VECTOR: return "NodeSocketVector"; + case SOCK_RGBA: return "NodeSocketColor"; + case SOCK_SHADER: return "NodeSocketShader"; + default: return "NodeSocketUndefined"; + } +} + +bNodeSocket *web_add_socket(bNode &node, + const eNodeSocketInOut in_out, + const eNodeSocketDatatype type, + const char *name, + const std::array &value = {}, + const bool create_output_default = false, + const char *identifier = nullptr) +{ + bNodeSocket *socket = MEM_new(__func__); + socket->runtime = MEM_new(__func__); + socket->in_out = in_out; + socket->type = type; + socket->typeinfo = &bke::NodeSocketTypeUndefined; + socket->limit = in_out == SOCK_IN ? 1 : 0xFFF; + socket->flag = SOCK_COLLAPSED; + STRNCPY(socket->identifier, identifier != nullptr ? identifier : name); + STRNCPY(socket->name, name); + STRNCPY(socket->idname, web_socket_idname(type)); + socket->runtime->identifier_ustr = UString(socket->identifier); + if (in_out == SOCK_IN || create_output_default) { + if (type == SOCK_FLOAT) { + auto *data = MEM_new(__func__); + data->value = value[0]; + data->min = 0.0f; + data->max = 1.0f; + socket->default_value = data; + } + else if (type == SOCK_VECTOR) { + auto *data = MEM_new(__func__); + std::copy(value.begin(), value.end(), data->value); + data->dimensions = 3; + data->min = -10000.0f; + data->max = 10000.0f; + socket->default_value = data; + } + else if (type == SOCK_RGBA) { + auto *data = MEM_new(__func__); + std::copy(value.begin(), value.end(), data->value); + socket->default_value = data; + } + } + BLI_addtail(in_out == SOCK_IN ? &node.inputs : &node.outputs, socket); + return socket; +} + +bNode *web_add_shader_node(bNodeTree &tree, const int legacy_type) +{ + bke::bNodeType &type = web_node_type(legacy_type); + bNode *node = bke::node_add_node(nullptr, tree, type.idname); + if (node == nullptr) return nullptr; + node->typeinfo = &type; + node->type_legacy = legacy_type; + node->flag = NODE_SELECT | NODE_OPTIONS | NODE_INIT; + node->width = bke::NodeWidth::Default; + STRNCPY(node->name, type.ui_name.c_str()); + switch (legacy_type) { + case SH_NODE_RGB: + web_add_socket(*node, SOCK_OUT, SOCK_RGBA, "Color", {0.5f, 0.5f, 0.5f, 1.0f}, true); + break; + case SH_NODE_VALUE: + web_add_socket(*node, SOCK_OUT, SOCK_FLOAT, "Value", {0.0f}, true); + break; + case SH_NODE_MATH: + node->custom1 = NODE_MATH_ADD; + web_add_socket(*node, SOCK_IN, SOCK_FLOAT, "Value", {0.5f}, false, "Value"); + web_add_socket(*node, SOCK_IN, SOCK_FLOAT, "Value", {0.5f}, false, "Value_001"); + web_add_socket(*node, SOCK_OUT, SOCK_FLOAT, "Value", {}, false, "Value"); + break; + case SH_NODE_BSDF_PRINCIPLED: + node->custom1 = SHD_GLOSSY_MULTI_GGX; + node->custom2 = SHD_SUBSURFACE_RANDOM_WALK; + web_add_socket(*node, SOCK_IN, SOCK_RGBA, "Base Color", {0.8f, 0.8f, 0.8f, 1.0f}); + web_add_socket(*node, SOCK_IN, SOCK_FLOAT, "Metallic", {0.0f}); + web_add_socket(*node, SOCK_IN, SOCK_FLOAT, "Roughness", {0.5f}); + web_add_socket(*node, SOCK_IN, SOCK_FLOAT, "IOR", {1.5f}); + web_add_socket(*node, SOCK_IN, SOCK_FLOAT, "Specular IOR Level", {0.5f}); + web_add_socket(*node, SOCK_IN, SOCK_FLOAT, "Transmission Weight", {0.0f}); + web_add_socket(*node, SOCK_IN, SOCK_FLOAT, "Coat Weight", {0.0f}); + web_add_socket(*node, SOCK_IN, SOCK_FLOAT, "Coat Roughness", {0.03f}); + web_add_socket(*node, SOCK_IN, SOCK_FLOAT, "Alpha", {1.0f}); + web_add_socket(*node, SOCK_IN, SOCK_VECTOR, "Normal"); + web_add_socket(*node, SOCK_IN, SOCK_RGBA, "Emission Color", {0.0f, 0.0f, 0.0f, 1.0f}); + web_add_socket(*node, SOCK_IN, SOCK_FLOAT, "Emission Strength", {1.0f}); + web_add_socket(*node, SOCK_OUT, SOCK_SHADER, "BSDF"); + break; + case SH_NODE_OUTPUT_MATERIAL: + node->flag |= NODE_DO_OUTPUT; + web_add_socket(*node, SOCK_IN, SOCK_SHADER, "Surface"); + break; + case SH_NODE_TEX_IMAGE: + node->storage = MEM_new(__func__); + web_add_socket(*node, SOCK_IN, SOCK_VECTOR, "Vector"); + web_add_socket(*node, SOCK_OUT, SOCK_RGBA, "Color"); + break; + case SH_NODE_NORMAL_MAP: + node->storage = MEM_new(__func__); + web_add_socket(*node, SOCK_IN, SOCK_RGBA, "Color", {0.5f, 0.5f, 1.0f, 1.0f}); + web_add_socket(*node, SOCK_OUT, SOCK_VECTOR, "Normal"); + break; + case SH_NODE_UVMAP: + node->storage = MEM_new(__func__); + web_add_socket(*node, SOCK_OUT, SOCK_VECTOR, "UV"); + break; + } + return node; +} + +void set_socket_float(bNode *node, const char *name, const float value) +{ + if (node == nullptr) return; + if (bNodeSocket *socket = bke::node_find_socket(*node, SOCK_IN, UString(name))) { + if (auto *data = static_cast(socket->default_value)) data->value = value; + } +} + +void set_socket_color(bNode *node, const char *name, const std::vector &value) +{ + if (node == nullptr || value.size() < 3) return; + if (bNodeSocket *socket = bke::node_find_socket(*node, SOCK_IN, UString(name))) { + if (auto *data = static_cast(socket->default_value)) { + for (int index = 0; index < 4; index++) data->value[index] = index < int(value.size()) ? value[index] : 1.0f; + } + } +} + +bNode *ensure_principled_node(Main &main, Material &material) +{ + (void)main; + bNodeTree *tree = material.nodetree; + if (tree == nullptr) { + tree = bke::node_tree_add_tree_embedded( + nullptr, &material.id, "Shader Nodetree", "ShaderNodeTree"); + material.nodetree = tree; + } + if (tree == nullptr) return nullptr; + bNode *principled = find_node(tree, SH_NODE_BSDF_PRINCIPLED); + if (principled == nullptr) principled = web_add_shader_node(*tree, SH_NODE_BSDF_PRINCIPLED); + bNode *output = find_node(tree, SH_NODE_OUTPUT_MATERIAL); + if (output == nullptr) output = web_add_shader_node(*tree, SH_NODE_OUTPUT_MATERIAL); + if (principled == nullptr || output == nullptr) return nullptr; + bNodeSocket *from = bke::node_find_socket(*principled, SOCK_OUT, UString("BSDF")); + bNodeSocket *to = bke::node_find_socket(*output, SOCK_IN, UString("Surface")); + if (from != nullptr && to != nullptr && to->link == nullptr) bke::node_add_link(*tree, *principled, *from, *output, *to); + tree->id.recalc |= ID_RECALC_NTREE_OUTPUT; + return principled; +} + +int modifier_uid_from_uuid(const char *modifier_uuid) +{ + if (modifier_uuid == nullptr) return 0; + const char *last_colon = strrchr(modifier_uuid, ':'); + if (last_colon == nullptr || last_colon[1] == '\0') return 0; + char *end = nullptr; + const long value = std::strtol(last_colon + 1, &end, 10); + if (end == last_colon + 1 || *end != '\0' || value <= 0 || + value > std::numeric_limits::max()) { + return 0; + } + return int(value); +} + +struct BufferWriteState { + std::vector *bytes = nullptr; + bool allocation_failed = false; +}; + +bool append_write_bytes(const void *data, const size_t size, void *user_data) +{ + auto &state = *static_cast(user_data); + if (state.bytes == nullptr || data == nullptr) return false; + try { + const auto *begin = static_cast(data); + state.bytes->insert(state.bytes->end(), begin, begin + size); + return true; + } + catch (const std::bad_alloc &) { + state.allocation_failed = true; + return false; + } +} + +const char *geometry_socket_data_type(const eNodeSocketDatatype type) +{ + switch (type) { + case SOCK_FLOAT: return "FLOAT"; + case SOCK_VECTOR: return "VECTOR"; + case SOCK_RGBA: return "COLOR"; + case SOCK_SHADER: return "SHADER"; + case SOCK_BOOLEAN: return "BOOLEAN"; + case SOCK_INT: return "INT"; + case SOCK_STRING: return "STRING"; + case SOCK_OBJECT: return "OBJECT"; + case SOCK_IMAGE: return "IMAGE"; + case SOCK_GEOMETRY: return "GEOMETRY"; + case SOCK_COLLECTION: return "COLLECTION"; + case SOCK_TEXTURE: return "TEXTURE"; + case SOCK_MATERIAL: return "MATERIAL"; + case SOCK_ROTATION: return "ROTATION"; + case SOCK_MENU: return "MENU"; + case SOCK_MATRIX: return "MATRIX"; + case SOCK_BUNDLE: return "BUNDLE"; + case SOCK_CLOSURE: return "CLOSURE"; + case SOCK_FONT: return "FONT"; + case SOCK_SCENE: return "SCENE"; + case SOCK_TEXT_ID: return "TEXT"; + case SOCK_MASK: return "MASK"; + case SOCK_SOUND: return "SOUND"; + case SOCK_INT_VECTOR: return "INT_VECTOR"; + case SOCK_CUSTOM: return "CUSTOM"; + } + return "CUSTOM"; +} + +eNodeSocketDatatype geometry_interface_socket_type(const char *socket_type) +{ + if (socket_type == nullptr) return SOCK_CUSTOM; + const std::string type(socket_type); + if (type.starts_with("NodeSocketIntVector")) return SOCK_INT_VECTOR; + if (type.starts_with("NodeSocketFloat")) return SOCK_FLOAT; + if (type.starts_with("NodeSocketVector")) return SOCK_VECTOR; + if (type == "NodeSocketColor") return SOCK_RGBA; + if (type == "NodeSocketShader") return SOCK_SHADER; + if (type == "NodeSocketBool") return SOCK_BOOLEAN; + if (type.starts_with("NodeSocketInt")) return SOCK_INT; + if (type.starts_with("NodeSocketString")) return SOCK_STRING; + if (type == "NodeSocketObject") return SOCK_OBJECT; + if (type == "NodeSocketImage") return SOCK_IMAGE; + if (type == "NodeSocketGeometry") return SOCK_GEOMETRY; + if (type == "NodeSocketCollection") return SOCK_COLLECTION; + if (type == "NodeSocketTexture") return SOCK_TEXTURE; + if (type == "NodeSocketMaterial") return SOCK_MATERIAL; + if (type == "NodeSocketRotation") return SOCK_ROTATION; + if (type == "NodeSocketMenu") return SOCK_MENU; + if (type == "NodeSocketMatrix") return SOCK_MATRIX; + if (type == "NodeSocketBundle") return SOCK_BUNDLE; + if (type == "NodeSocketClosure") return SOCK_CLOSURE; + if (type == "NodeSocketFont") return SOCK_FONT; + if (type == "NodeSocketScene") return SOCK_SCENE; + if (type == "NodeSocketText") return SOCK_TEXT_ID; + if (type == "NodeSocketMask") return SOCK_MASK; + if (type == "NodeSocketSound") return SOCK_SOUND; + return SOCK_CUSTOM; +} + +std::string geometry_id_reference(const ID *id) +{ + if (id == nullptr) return {}; + const std::string code(id->name, 2); + const char *prefix = code == "OB" ? "object:" : code == "IM" ? "image:" : + code == "GR" ? "collection:" : code == "TE" ? "texture:" : + code == "MA" ? "material:" : code == "VF" ? "vfont:" : + code == "SC" ? "scene:" : code == "TX" ? "text:" : + code == "MS" ? "mask:" : code == "SO" ? "sound:" : + code == "NT" ? "node-group:" : "id:"; + return std::string(prefix) + id_name(*id); +} + +std::optional geometry_socket_default(const eNodeSocketDatatype type, + const void *default_value) +{ + if (default_value == nullptr) return std::nullopt; + switch (type) { + case SOCK_FLOAT: { + const float value = static_cast(default_value)->value; + return std::isfinite(value) ? std::optional(value) : std::nullopt; + } + case SOCK_INT: + return static_cast(default_value)->value; + case SOCK_BOOLEAN: + return static_cast(default_value)->value != 0; + case SOCK_VECTOR: { + const bNodeSocketValueVector &value = *static_cast(default_value); + const int dimensions = std::clamp(value.dimensions, 2, 4); + json result = json::array(); + for (int index = 0; index < dimensions; index++) { + if (!std::isfinite(value.value[index])) return std::nullopt; + result.push_back(value.value[index]); + } + return result; + } + case SOCK_INT_VECTOR: { + const bNodeSocketValueIntVector &value = *static_cast(default_value); + const int dimensions = std::clamp(value.dimensions, 2, 3); + json result = json::array(); + for (int index = 0; index < dimensions; index++) result.push_back(value.value[index]); + return result; + } + case SOCK_ROTATION: { + const bNodeSocketValueRotation &value = *static_cast(default_value); + if (!std::all_of(std::begin(value.value_euler), std::end(value.value_euler), + [](const float component) { return std::isfinite(component); })) + { + return std::nullopt; + } + return json::array({value.value_euler[0], value.value_euler[1], value.value_euler[2]}); + } + case SOCK_RGBA: { + const bNodeSocketValueRGBA &value = *static_cast(default_value); + if (!std::all_of(std::begin(value.value), std::end(value.value), + [](const float component) { return std::isfinite(component); })) + { + return std::nullopt; + } + return json::array({value.value[0], value.value[1], value.value[2], value.value[3]}); + } + case SOCK_STRING: { + const bNodeSocketValueString &value = *static_cast(default_value); + return std::string(value.value, strnlen(value.value, sizeof(value.value))); + } + case SOCK_MENU: + return static_cast(default_value)->value; + case SOCK_OBJECT: + return geometry_id_reference(reinterpret_cast( + static_cast(default_value)->value)); + case SOCK_IMAGE: + return geometry_id_reference(reinterpret_cast( + static_cast(default_value)->value)); + case SOCK_COLLECTION: + return geometry_id_reference(reinterpret_cast( + static_cast(default_value)->value)); + case SOCK_TEXTURE: + return geometry_id_reference(reinterpret_cast( + static_cast(default_value)->value)); + case SOCK_MATERIAL: + return geometry_id_reference(reinterpret_cast( + static_cast(default_value)->value)); + case SOCK_FONT: + return geometry_id_reference(reinterpret_cast( + static_cast(default_value)->value)); + case SOCK_SCENE: + return geometry_id_reference(reinterpret_cast( + static_cast(default_value)->value)); + case SOCK_TEXT_ID: + return geometry_id_reference(reinterpret_cast( + static_cast(default_value)->value)); + case SOCK_MASK: + return geometry_id_reference(reinterpret_cast( + static_cast(default_value)->value)); + case SOCK_SOUND: + return geometry_id_reference(reinterpret_cast( + static_cast(default_value)->value)); + case SOCK_CUSTOM: + case SOCK_SHADER: + case SOCK_GEOMETRY: + case SOCK_MATRIX: + case SOCK_BUNDLE: + case SOCK_CLOSURE: + return std::nullopt; + } + return std::nullopt; +} + +std::string geometry_node_id(const bNode &node) +{ + return "geometry-node:" + std::to_string(node.identifier); +} + +std::string geometry_node_type(const bNode &node) +{ + std::string stored(node.idname); + constexpr std::string_view undefined_prefix = "Undefined["; + while (stored.starts_with(undefined_prefix) && stored.ends_with("]") && + stored.size() > undefined_prefix.size() + 1) + { + stored = stored.substr(undefined_prefix.size(), stored.size() - undefined_prefix.size() - 1); + } + return stored; +} + +std::string geometry_socket_id(const bNodeSocket &socket, const eNodeSocketInOut direction) +{ + return std::string("geometry-socket:") + (direction == SOCK_IN ? "input:" : "output:") + + socket.identifier; +} + +json geometry_socket_json(const bNodeSocket &socket, const eNodeSocketInOut direction) +{ + json result = {{"id", geometry_socket_id(socket, direction)}, + {"name", socket.name}, + {"direction", direction == SOCK_IN ? "INPUT" : "OUTPUT"}, + {"dataType", geometry_socket_data_type(socket.type)}}; + if (const std::optional value = geometry_socket_default(socket.type, socket.default_value)) { + if (!(value->is_string() && value->get_ref().empty() && + ELEM(socket.type, SOCK_OBJECT, SOCK_IMAGE, SOCK_COLLECTION, SOCK_TEXTURE, SOCK_MATERIAL, + SOCK_FONT, SOCK_SCENE, SOCK_TEXT_ID, SOCK_MASK, SOCK_SOUND))) + { + result["defaultValue"] = *value; + } + } + return result; +} + +} // namespace + +WebBlendMainState *web_engine_blend_main_open(const uint8_t *data, + const uint32_t length, + std::string &error) +{ + if (data == nullptr || length == 0 || length > uint32_t(std::numeric_limits::max())) { + error = "authoritative Main requires a non-empty addressable blend buffer"; + return nullptr; + } + web_engine_blender_runtime_initialize(); + blender::BlendFileData *blend = blender::BLO_read_from_memory( + data, int(length), blender::BLO_READ_SKIP_USERDEF, nullptr); + if (blend == nullptr || blend->main == nullptr) { + error = "Blender full loader rejected the authoritative Main buffer"; + if (blend != nullptr) blender::BLO_blendfiledata_free(blend); + return nullptr; + } + auto *state = new WebBlendMainState(); + state->blend = blend; + state->main = blend->main; + state->scene = blend->curscene != nullptr ? blend->curscene : + static_cast(state->main->scenes.first); + state->view_layer = blend->cur_view_layer != nullptr ? blend->cur_view_layer : + (state->scene != nullptr ? + static_cast(state->scene->view_layers.first) : + nullptr); + if (state->scene == nullptr || state->view_layer == nullptr) { + error = "authoritative Main has no scene/view layer"; + web_engine_blend_main_free(state); + return nullptr; + } + for (blender::ViewLayer &candidate : state->scene->view_layers) { + blender::BKE_view_layer_synced_ensure(*state->main, state->scene, &candidate); + } + return state; +} + +void web_engine_blend_main_free(WebBlendMainState *state) +{ + if (state == nullptr) return; + if (state->blend != nullptr) blender::BLO_blendfiledata_free(state->blend); + delete state; +} + +bool web_engine_blend_main_set_frame(WebBlendMainState *state, + const int frame, + std::string &error) +{ + if (state == nullptr || state->scene == nullptr) { + error = "authoritative Main is not open"; + return false; + } + const int clamped = std::clamp(frame, state->scene->r.sfra, state->scene->r.efra); + blender::BKE_scene_frame_set(state->scene, float(clamped)); + state->scene->id.recalc |= blender::ID_RECALC_FRAME_CHANGE; + return true; +} + +bool web_engine_blend_main_set_visibility(WebBlendMainState *state, + const char *object_id, + const bool visible, + std::string &error) +{ + Object *object = find_object(state != nullptr ? state->main : nullptr, object_id); + if (object == nullptr) { + error = "objectId was not found in authoritative Main"; + return false; + } + if (visible) object->visibility_flag &= ~OB_HIDE_VIEWPORT; + else object->visibility_flag |= OB_HIDE_VIEWPORT; + object->id.recalc |= blender::ID_RECALC_BASE_FLAGS; + return true; +} + +bool web_engine_blend_main_set_modifier_enabled(WebBlendMainState *state, + const char *mesh_id, + const char *modifier_uuid, + const bool enabled, + std::string &error) +{ + Object *object = find_mesh_object(state != nullptr ? state->main : nullptr, mesh_id); + const int uid = modifier_uid_from_uuid(modifier_uuid); + if (object == nullptr || uid <= 0) { + error = "meshId or modifierUuid was not found in authoritative Main"; + return false; + } + for (ModifierData &modifier : object->modifiers) { + if (modifier.persistent_uid != uid) continue; + if (enabled) modifier.mode |= blender::eModifierMode_Realtime; + else modifier.mode &= ~blender::eModifierMode_Realtime; + object->id.recalc |= blender::ID_RECALC_GEOMETRY; + return true; + } + error = "modifierUuid was not found in authoritative Main"; + return false; +} + +bool web_engine_blend_main_set_modifier_visibility(WebBlendMainState *state, + const char *mesh_id, + const char *modifier_uuid, + const bool show_viewport, + const bool show_render, + const bool show_edit_mode, + const bool show_on_cage, + std::string &error) +{ + Object *object = find_mesh_object(state != nullptr ? state->main : nullptr, mesh_id); + const int uid = modifier_uid_from_uuid(modifier_uuid); + if (object == nullptr || uid <= 0 || object->id.lib != nullptr) { + error = "meshId or modifierUuid was not found in editable authoritative Main"; + return false; + } + for (ModifierData &modifier : object->modifiers) { + if (modifier.persistent_uid != uid) continue; + auto set_flag = [&](const ModifierMode flag, const bool enabled) { + if (enabled) modifier.mode |= flag; + else modifier.mode &= ~flag; + }; + set_flag(eModifierMode_Realtime, show_viewport); + set_flag(eModifierMode_Render, show_render); + set_flag(eModifierMode_Editmode, show_edit_mode); + set_flag(eModifierMode_OnCage, show_on_cage); + object->id.recalc |= ID_RECALC_GEOMETRY; + return true; + } + error = "modifierUuid was not found in authoritative Main"; + return false; +} + +bool web_engine_blend_main_replace_mesh(WebBlendMainState *state, + const char *mesh_id, + const std::vector &positions, + const std::vector &indices, + const std::vector &uvs, + const std::vector &colors, + const std::vector &material_indices, + std::string &error) +{ + Object *object = find_mesh_object(state != nullptr ? state->main : nullptr, mesh_id); + if (object == nullptr || object->data == nullptr) { + error = "meshId was not found in authoritative Main"; + return false; + } + if (positions.empty() || positions.size() % 3 != 0 || indices.empty() || indices.size() % 3 != 0 || + (!uvs.empty() && uvs.size() != indices.size() * 2) || + (!colors.empty() && colors.size() != indices.size() * 4) || + (!material_indices.empty() && material_indices.size() != indices.size() / 3)) + { + error = "authoritative mesh replacement arrays are malformed"; + return false; + } + const size_t vertex_count = positions.size() / 3; + for (const uint32_t index : indices) { + if (index >= vertex_count) { + error = "authoritative mesh replacement index is out of range"; + return false; + } + } + if (vertex_count > size_t(std::numeric_limits::max()) || + indices.size() / 3 > size_t(std::numeric_limits::max()) || + indices.size() > size_t(std::numeric_limits::max())) + { + error = "authoritative mesh replacement exceeds Blender integer limits"; + return false; + } + + Mesh *destination = reinterpret_cast(object->data); + const std::string uv_name = destination->active_uv_map_name().is_empty() ? + "UVMap" : + std::string(destination->active_uv_map_name()); + const std::string color_name = destination->active_color_attribute != nullptr ? + destination->active_color_attribute : + "Color"; + Mesh *replacement = BKE_mesh_new_nomain(int(vertex_count), + 0, + int(indices.size() / 3), + int(indices.size())); + BKE_mesh_copy_parameters_for_eval(replacement, destination); + MutableSpan destination_positions = replacement->vert_positions_for_write(); + for (const int index : destination_positions.index_range()) { + destination_positions[index] = float3(&positions[size_t(index) * 3]); + } + MutableSpan face_offsets = replacement->face_offsets_for_write(); + for (const int face : replacement->faces().index_range()) { + face_offsets[face] = face * 3; + } + face_offsets.last() = int(indices.size()); + MutableSpan corner_verts = replacement->corner_verts_for_write(); + for (const int corner : corner_verts.index_range()) { + corner_verts[corner] = int(indices[corner]); + } + bke::mesh_calc_edges(*replacement, false, false); + + bke::MutableAttributeAccessor attributes = replacement->attributes_for_write(); + if (!uvs.empty()) { + bke::SpanAttributeWriter uv_attribute = + attributes.lookup_or_add_for_write_span(uv_name, bke::AttrDomain::Corner); + for (const int corner : uv_attribute.span.index_range()) { + uv_attribute.span[corner] = float2(&uvs[size_t(corner) * 2]); + } + uv_attribute.finish(); + replacement->uv_maps_active_set(uv_name); + } + if (!colors.empty()) { + bke::SpanAttributeWriter color_attribute = + attributes.lookup_or_add_for_write_span(color_name, + bke::AttrDomain::Corner); + for (const int corner : color_attribute.span.index_range()) { + color_attribute.span[corner] = ColorGeometry4f(&colors[size_t(corner) * 4]); + } + color_attribute.finish(); + replacement->active_color_attribute = BLI_strdup(color_name.c_str()); + } + if (!material_indices.empty()) { + bke::SpanAttributeWriter material_attribute = + attributes.lookup_or_add_for_write_span("material_index", bke::AttrDomain::Face); + for (const int face : material_attribute.span.index_range()) { + material_attribute.span[face] = int(material_indices[face]); + } + material_attribute.finish(); + } + + BKE_mesh_nomain_to_mesh(replacement, destination, object); + destination->id.recalc |= blender::ID_RECALC_GEOMETRY; + object->id.recalc |= blender::ID_RECALC_GEOMETRY; + return true; +} + +bool web_engine_blend_main_create_primitive(WebBlendMainState *state, + const char *primitive, + const char *name, + const std::vector &location, + std::string &object_id, + std::string &error) +{ + if (state == nullptr || state->main == nullptr || state->scene == nullptr || + state->view_layer == nullptr || primitive == nullptr || location.size() != 3) + { + error = "createPrimitive requires an authoritative Main and a three-component location"; + return false; + } + std::vector positions; + std::vector indices; + const std::string kind(primitive); + if (kind == "CUBE") { + positions = {-1, -1, -1, 1, -1, -1, 1, 1, -1, -1, 1, -1, + -1, -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, 1}; + indices = {0, 2, 1, 0, 3, 2, 4, 5, 6, 4, 6, 7, + 0, 1, 5, 0, 5, 4, 1, 2, 6, 1, 6, 5, + 2, 3, 7, 2, 7, 6, 3, 0, 4, 3, 4, 7}; + } + else if (kind == "PLANE") { + positions = {-1, -1, 0, 1, -1, 0, 1, 1, 0, -1, 1, 0}; + indices = {0, 1, 2, 0, 2, 3}; + } + else { + error = "PRIMITIVE_TYPE_UNSUPPORTED: supported primitives are CUBE and PLANE"; + return false; + } + + const char *effective_name = name != nullptr && name[0] != '\0' ? name : primitive; + Mesh *mesh = BKE_mesh_add(state->main, effective_name); + Object *object = BKE_object_add_only_object(state->main, OB_MESH, effective_name); + object->data = &mesh->id; + Mesh *geometry = BKE_mesh_new_nomain( + int(positions.size() / 3), 0, int(indices.size() / 3), int(indices.size())); + MutableSpan destination_positions = geometry->vert_positions_for_write(); + for (const int index : destination_positions.index_range()) { + destination_positions[index] = float3(&positions[size_t(index) * 3]); + } + MutableSpan face_offsets = geometry->face_offsets_for_write(); + for (const int face : geometry->faces().index_range()) face_offsets[face] = face * 3; + face_offsets.last() = int(indices.size()); + MutableSpan corner_verts = geometry->corner_verts_for_write(); + for (const int corner : corner_verts.index_range()) corner_verts[corner] = int(indices[corner]); + bke::mesh_calc_edges(*geometry, false, false); + BKE_mesh_nomain_to_mesh(geometry, mesh, object); + for (int axis = 0; axis < 3; axis++) object->loc[axis] = location[axis]; + BKE_collection_object_add(state->main, state->scene->master_collection, object); + BKE_view_layer_synced_ensure(*state->main, state->scene, state->view_layer); + if (Base *base = BKE_view_layer_base_find(state->view_layer, object)) { + BKE_view_layer_base_deselect_all(*state->main, state->scene, state->view_layer); + BKE_view_layer_base_select_and_set_active(state->view_layer, base); + } + object->id.recalc |= ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY; + object_id = "object:" + id_name(object->id); + return true; +} + +bool web_engine_blend_main_append_object(WebBlendMainState *state, + const uint8_t *source_data, + const uint32_t source_length, + const char *source_locator, + const char *object_name, + const char *mesh_name, + const char *material_name, + const char *image_name, + std::string &object_id, + std::string &error) +{ + if (state == nullptr || state->main == nullptr || state->scene == nullptr || + state->view_layer == nullptr || source_data == nullptr || source_length == 0 || + source_length > 64u * 1024u * 1024u || source_locator == nullptr || + source_locator[0] == '\0' || object_name == nullptr || mesh_name == nullptr || + material_name == nullptr || image_name == nullptr || object_name[0] == '\0' || + mesh_name[0] == '\0' || material_name[0] == '\0' || image_name[0] == '\0') + { + error = "ASSET_MANIFEST_INVALID: append requires a bounded source and complete Object closure"; + return false; + } + if (find_object(state->main, ("object:" + std::string(object_name)).c_str()) != nullptr || + find_material(state->main, ("material:" + std::string(material_name)).c_str()) != nullptr || + find_image(state->main, ("image:" + std::string(image_name)).c_str()) != nullptr) + { + error = "ASSET_MANIFEST_INVALID: append closure collides with an existing local ID"; + return false; + } + for (const Mesh &mesh : state->main->meshes) { + if (id_name(mesh.id) == mesh_name) { + error = "ASSET_MANIFEST_INVALID: append closure collides with an existing local Mesh"; + return false; + } + } + + BlendHandle *blend_handle = BLO_blendhandle_from_memory( + source_data, int(source_length), nullptr); + if (blend_handle == nullptr) { + error = "BLEND_READ_FAILED: Blender rejected the append source buffer"; + return false; + } + + GlobalMainScope global_main_scope(state->main); + BKE_main_id_tag_all(state->main, ID_TAG_PRE_EXISTING, true); + LibraryLink_Params parameters{}; + BLO_library_link_params_init_with_context(¶meters, + state->main, + BLO_LIBLINK_APPEND_RECURSIVE, + 0, + state->scene, + state->view_layer, + nullptr); + BlendfileLinkAppendContext *context = BKE_blendfile_link_append_context_new(¶meters); + if (context == nullptr) { + BLO_blendhandle_close(blend_handle); + BKE_main_id_tag_all(state->main, ID_TAG_PRE_EXISTING, false); + error = "BLEND_READ_FAILED: Blender could not create the append context"; + return false; + } + BKE_blendfile_link_append_context_library_add(context, source_locator, blend_handle); + BlendfileLinkAppendContextItem *item = BKE_blendfile_link_append_context_item_add( + context, object_name, ID_OB, nullptr); + BKE_blendfile_link_append_context_item_library_index_enable(context, item, 0); + BKE_blendfile_link_append_context_init_done(context); + BKE_blendfile_link(context, nullptr); + BKE_blendfile_append(context, nullptr); + BKE_blendfile_link_append_instantiate_loose(context, nullptr); + BKE_blendfile_link_append_context_finalize(context); + ID *new_id = BKE_blendfile_link_append_context_item_newid_get(context, item); + BKE_blendfile_link_append_context_free(context); + BKE_main_id_tag_all(state->main, ID_TAG_PRE_EXISTING, false); + + Object *object = new_id != nullptr && GS(new_id->name) == ID_OB ? + reinterpret_cast(new_id) : + nullptr; + Mesh *mesh = object != nullptr && object->type == OB_MESH && object->data != nullptr ? + reinterpret_cast(object->data) : + nullptr; + Material *material = mesh != nullptr && mesh->totcol == 1 && mesh->mat != nullptr ? + mesh->mat[0] : + nullptr; + Image *image = find_image(state->main, ("image:" + std::string(image_name)).c_str()); + bool material_uses_image = false; + if (material != nullptr && material->nodetree != nullptr && image != nullptr) { + for (const bNode &node : material->nodetree->nodes) { + if (node.id == &image->id) { + material_uses_image = true; + break; + } + } + } + if (object == nullptr || mesh == nullptr || material == nullptr || image == nullptr || + id_name(object->id) != object_name || id_name(mesh->id) != mesh_name || + id_name(material->id) != material_name || id_name(image->id) != image_name || + object->id.lib != nullptr || mesh->id.lib != nullptr || material->id.lib != nullptr || + image->id.lib != nullptr || object->id.override_library != nullptr || + mesh->id.override_library != nullptr || material->id.override_library != nullptr || + image->id.override_library != nullptr || !material_uses_image) + { + error = "ASSET_SOURCE_HASH_MISMATCH: appended Object closure is incomplete or not fully local"; + return false; + } + BKE_view_layer_synced_ensure(*state->main, state->scene, state->view_layer); + object->id.recalc |= ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY; + mesh->id.recalc |= ID_RECALC_GEOMETRY; + material->id.recalc |= ID_RECALC_SYNC_TO_EVAL; + image->id.recalc |= ID_RECALC_SOURCE; + object_id = "object:" + id_name(object->id); + return true; +} + +bool web_engine_blend_main_create_curve(WebBlendMainState *state, + const char *curve_type, + const char *name, + const std::vector &control_points, + const bool cyclic, + const int resolution, + std::string &object_id, + std::string &data_id, + std::string &error) +{ + if (state == nullptr || state->main == nullptr || state->scene == nullptr || + state->view_layer == nullptr || curve_type == nullptr || name == nullptr || + name[0] == '\0' || strlen(name) > 63 || strcmp(curve_type, "CURVE") != 0 || + control_points.size() < 6 || control_points.size() % 3 != 0 || + control_points.size() / 3 > 1'000'000 || resolution < 1 || resolution > 1024 || + std::any_of(control_points.begin(), control_points.end(), [](const float value) { + return !std::isfinite(value); + })) { + error = "NON_MESH_PROPERTY_INVALID: createCurve accepts a bounded finite Poly Curve only"; + return false; + } + Curve *curve = BKE_curve_add(state->main, name, OB_CURVES_LEGACY); + Object *object = BKE_object_add_only_object(state->main, OB_CURVES_LEGACY, name); + if (object == nullptr || curve == nullptr) { + error = "NON_MESH_DATA_UNSUPPORTED: Blender could not create a Curve data-block"; + return false; + } + object->data = &curve->id; + curve->flag |= CU_3D; + curve->resolu = curve->resolv = short(resolution); + Nurb *nurb = MEM_new("Web created Curve spline"); + nurb->type = CU_POLY; + const int point_count = int(control_points.size() / 3); + nurb->pntsu = 0; + nurb->pntsv = 1; + nurb->resolu = nurb->resolv = short(resolution); + if (cyclic) nurb->flagu = CU_NURB_CYCLIC; + BKE_nurb_points_add(nurb, point_count); + for (int index = 0; index < point_count; index++) { + BPoint &point = nurb->bp[index]; + copy_v3_v3(point.vec, &control_points[size_t(index) * 3]); + point.vec[3] = 1.0f; + point.radius = 1.0f; + } + BLI_addtail(BKE_curve_nurbs_get(curve), nurb); + BKE_collection_object_add(state->main, state->scene->master_collection, object); + BKE_view_layer_synced_ensure(*state->main, state->scene, state->view_layer); + if (Base *base = BKE_view_layer_base_find(state->view_layer, object)) { + BKE_view_layer_base_deselect_all(*state->main, state->scene, state->view_layer); + BKE_view_layer_base_select_and_set_active(state->view_layer, base); + } + curve->id.recalc |= ID_RECALC_GEOMETRY; + object->id.recalc |= ID_RECALC_GEOMETRY | ID_RECALC_TRANSFORM; + object_id = "object:" + id_name(object->id); + data_id = "curve:" + id_name(curve->id); + return true; +} + +bool web_engine_blend_main_duplicate_object(WebBlendMainState *state, + const char *object_id, + const std::vector &offset, + const bool linked, + std::string &new_object_id, + std::string &error) +{ + Object *source = find_object(state != nullptr ? state->main : nullptr, object_id); + if (state == nullptr || source == nullptr || state->scene == nullptr || + state->view_layer == nullptr || offset.size() != 3) + { + error = "duplicateObject requires an existing object and a three-component offset"; + return false; + } + if (source->id.lib != nullptr) { + error = "LINKED_DATA_MUTATION_BLOCKED: linked objects cannot be duplicated as editable data"; + return false; + } + const eDupli_ID_Flags flags = source->type == OB_MESH && !linked ? USER_DUP_MESH : eDupli_ID_Flags(0); + Object *duplicate = BKE_object_duplicate(state->main, source, flags, 0); + if (duplicate == nullptr) { + error = "Blender failed to duplicate the object"; + return false; + } + for (int axis = 0; axis < 3; axis++) duplicate->loc[axis] += offset[axis]; + BKE_collection_object_add_from(state->main, state->scene, source, duplicate); + BKE_view_layer_synced_ensure(*state->main, state->scene, state->view_layer); + if (Base *base = BKE_view_layer_base_find(state->view_layer, duplicate)) { + BKE_view_layer_base_deselect_all(*state->main, state->scene, state->view_layer); + BKE_view_layer_base_select_and_set_active(state->view_layer, base); + } + duplicate->id.recalc |= ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY; + new_object_id = "object:" + id_name(duplicate->id); + return true; +} + +bool web_engine_blend_main_delete_non_mesh_data(WebBlendMainState *state, + const char *data_id, + std::string &error) +{ + if (state == nullptr || state->main == nullptr || data_id == nullptr) { + error = "NON_MESH_DATA_UNSUPPORTED: data-block deletion requires an authoritative Main"; + return false; + } + ID *data = nullptr; + if (Curve *curve = find_curve(state->main, data_id)) data = &curve->id; + else if (MetaBall *metaball = find_metaball(state->main, data_id)) data = &metaball->id; + if (data == nullptr) { + error = "NON_MESH_DATA_UNSUPPORTED: data-block was not found or its type is not deletable"; + return false; + } + if (data->lib != nullptr) { + error = "LINKED_DATA_MUTATION_BLOCKED: linked non-mesh data cannot be deleted"; + return false; + } + Object *owner = nullptr; + int users = 0; + for (Object &object : state->main->objects) { + if (object.data != data) continue; + owner = &object; + users++; + } + if (users != 1 || owner == nullptr) { + error = "NON_MESH_DATA_SHARED: non-mesh deletion requires exactly one owning object"; + return false; + } + if (owner->id.lib != nullptr) { + error = "LINKED_DATA_MUTATION_BLOCKED: linked non-mesh object cannot be deleted"; + return false; + } + BKE_id_delete(state->main, &owner->id); + BKE_id_delete(state->main, data); + BKE_view_layer_synced_ensure(*state->main, state->scene, state->view_layer); + return true; +} + +bool web_engine_blend_main_delete_object(WebBlendMainState *state, + const char *object_id, + std::string &error) +{ + Object *object = find_object(state != nullptr ? state->main : nullptr, object_id); + if (state == nullptr || object == nullptr || state->scene == nullptr || state->view_layer == nullptr) { + error = "deleteObject requires an existing object"; + return false; + } + if (object->id.lib != nullptr) { + error = "LINKED_DATA_MUTATION_BLOCKED: linked objects cannot be deleted"; + return false; + } + BKE_id_delete(state->main, &object->id); + BKE_view_layer_synced_ensure(*state->main, state->scene, state->view_layer); + return true; +} + +bool web_engine_blend_main_set_transform(WebBlendMainState *state, + const char *object_id, + const std::vector &translation, + const std::vector &rotation_euler, + const std::vector &scale, + std::string &error) +{ + Object *object = find_object(state != nullptr ? state->main : nullptr, object_id); + if (object == nullptr || translation.size() != 3 || rotation_euler.size() != 3 || + scale.size() != 3) + { + error = "setObjectTransform requires an existing object and three TRS vectors"; + return false; + } + if (object->id.lib != nullptr) { + error = "LINKED_DATA_MUTATION_BLOCKED: linked object transforms cannot be changed"; + return false; + } + for (int axis = 0; axis < 3; axis++) { + object->loc[axis] = translation[axis]; + object->rot[axis] = rotation_euler[axis]; + object->scale[axis] = scale[axis]; + } + object->id.recalc |= ID_RECALC_TRANSFORM; + return true; +} + +bool web_engine_blend_main_translate_vertices(WebBlendMainState *state, + const char *mesh_id, + const std::vector &vertex_indices, + const std::vector &offset, + std::string &error) +{ + Object *object = find_mesh_object(state != nullptr ? state->main : nullptr, mesh_id); + if (object == nullptr || object->data == nullptr || vertex_indices.empty() || offset.size() != 3) { + error = "translateMeshVertices requires a mesh, vertex indices and a three-component offset"; + return false; + } + Mesh *mesh = reinterpret_cast(object->data); + if (mesh->id.lib != nullptr || object->id.lib != nullptr) { + error = "LINKED_DATA_MUTATION_BLOCKED: linked mesh vertices cannot be changed"; + return false; + } + MutableSpan positions = mesh->vert_positions_for_write(); + for (const uint32_t index : vertex_indices) { + if (index >= uint32_t(positions.size())) { + error = "translateMeshVertices contains an out-of-range vertex index"; + return false; + } + } + const float3 delta(offset[0], offset[1], offset[2]); + for (const uint32_t index : vertex_indices) positions[int(index)] += delta; + mesh->tag_positions_changed(); + mesh->id.recalc |= ID_RECALC_GEOMETRY; + object->id.recalc |= ID_RECALC_GEOMETRY; + return true; +} + +bool web_engine_blend_main_set_sculpt_attributes(WebBlendMainState *state, + const char *mesh_id, + const std::vector &mask, + const std::vector &face_sets, + std::string &error) +{ + Object *object = find_mesh_object(state != nullptr ? state->main : nullptr, mesh_id); + Mesh *mesh = object != nullptr ? reinterpret_cast(object->data) : nullptr; + if (!ensure_editable(object, mesh != nullptr ? &mesh->id : nullptr, error) || mesh->key != nullptr) { + if (error.empty()) error = "SCULPT_TOPOLOGY_UNSUPPORTED: Shape Key mesh attributes are read-only"; + return false; + } + int object_users = 0; + for (Object &candidate : state->main->objects) { + if (candidate.type == OB_MESH && candidate.data == &mesh->id) object_users++; + } + if (object_users != 1) { + error = "SCULPT_MESH_NOT_SINGLE_USER: Sculpt attributes require a single-user Mesh"; + return false; + } + if (mask.size() != size_t(mesh->verts_num) || face_sets.size() != size_t(mesh->faces_num) || + std::any_of(mask.begin(), mask.end(), [](const float value) { + return !std::isfinite(value) || value < 0.0f || value > 1.0f; + }) || + std::any_of(face_sets.begin(), face_sets.end(), [](const uint32_t value) { + return value > uint32_t(std::numeric_limits::max()); + })) + { + error = "SCULPT_ATTRIBUTE_INVALID: Mask or Face Set domain does not match the Mesh"; + return false; + } + bke::SpanAttributeWriter mask_writer = mesh->attributes_for_write().lookup_or_add_for_write_span( + ".sculpt_mask", bke::AttrDomain::Point); + bke::SpanAttributeWriter face_set_writer = mesh->attributes_for_write().lookup_or_add_for_write_span( + ".sculpt_face_set", bke::AttrDomain::Face); + if (!mask_writer || !face_set_writer) { + mask_writer.finish(); + face_set_writer.finish(); + error = "SCULPT_ATTRIBUTE_INVALID: Blender could not allocate Sculpt attributes"; + return false; + } + mask_writer.span.copy_from(mask); + for (const int index : face_set_writer.span.index_range()) { + face_set_writer.span[index] = int(face_sets[size_t(index)]); + } + mask_writer.finish(); + face_set_writer.finish(); + mesh->id.recalc |= ID_RECALC_GEOMETRY; + object->id.recalc |= ID_RECALC_GEOMETRY; + return true; +} + +bool web_engine_blend_main_sculpt_stroke(WebBlendMainState *state, + const char *stroke_json, + std::string &error) +{ + if (stroke_json == nullptr) { + error = "SCULPT_ATTRIBUTE_INVALID: Sculpt stroke payload is missing"; + return false; + } + const json stroke = json::parse(stroke_json, nullptr, false); + if (stroke.is_discarded() || !stroke.is_object() || stroke.value("schemaVersion", 0) != 1) { + error = "PROTOCOL_MISMATCH: Unsupported SculptStroke schema"; + return false; + } + const std::string mesh_id = stroke.value("meshId", ""); + const std::string brush = stroke.value("brush", ""); + const json samples = stroke.value("samples", json::array()); + const json symmetry = stroke.value("symmetry", json::array()); + if (mesh_id.empty() || !ELEM(brush, "DRAW", "INFLATE", "GRAB", "SMOOTH") || !samples.is_array() || + samples.empty() || samples.size() > 2048 || !symmetry.is_array() || symmetry.size() != 3 || + !stroke.contains("mirrorObjectSpace") || !stroke["mirrorObjectSpace"].is_boolean() || + !stroke["mirrorObjectSpace"].get()) + { + error = "SCULPT_ATTRIBUTE_INVALID: Sculpt stroke metadata is invalid"; + return false; + } + std::array mirror_axes{false, false, false}; + for (int axis = 0; axis < 3; axis++) { + if (!symmetry[axis].is_boolean()) { + error = "SCULPT_ATTRIBUTE_INVALID: Sculpt symmetry must contain booleans"; + return false; + } + mirror_axes[axis] = symmetry[axis].get(); + } + + Object *object = find_mesh_object(state != nullptr ? state->main : nullptr, mesh_id.c_str()); + Mesh *mesh = object != nullptr ? reinterpret_cast(object->data) : nullptr; + if (!ensure_editable(object, mesh != nullptr ? &mesh->id : nullptr, error)) return false; + if (mesh->key != nullptr) { + error = "SCULPT_TOPOLOGY_UNSUPPORTED: Shape Key mesh strokes are outside the bounded evaluator"; + return false; + } + int object_users = 0; + for (Object &candidate : state->main->objects) { + if (candidate.type == OB_MESH && candidate.data == &mesh->id) object_users++; + } + if (object_users != 1) { + error = "SCULPT_MESH_NOT_SINGLE_USER: Sculpt strokes require a single-user Mesh"; + return false; + } + if (mesh->verts_num <= 0 || mesh->faces_num <= 0 || mesh->verts_num > 250000) { + error = "SCULPT_STROKE_BUDGET_EXCEEDED: Sculpt stroke requires 1..250000 vertices"; + return false; + } + for (const ModifierData &modifier : object->modifiers) { + if (!ELEM(modifier.type, + eModifierType_Boolean, + eModifierType_Decimate, + eModifierType_Remesh, + eModifierType_Subsurf, + eModifierType_Nodes) || + (modifier.mode & eModifierMode_Realtime) == 0) + { + continue; + } + error = "SCULPT_TOPOLOGY_UNSUPPORTED: apply or disable topology-changing modifiers before Sculpt"; + return false; + } + + struct Sample { + std::array position{}; + std::array normal{}; + float radius = 0.0f; + float strength = 0.0f; + float pressure = 0.0f; + }; + std::vector parsed_samples; + parsed_samples.reserve(samples.size()); + float path_length = 0.0f; + std::array previous_sample_position{}; + bool has_previous_sample = false; + for (const json &item : samples) { + if (!item.is_object()) { + error = "SCULPT_ATTRIBUTE_INVALID: Sculpt samples must be objects"; + return false; + } + const std::vector position = item.value("position", std::vector()); + const std::vector normal = item.value("normal", std::vector()); + const float radius = item.value("radius", 0.0f); + const float strength = item.value("strength", 0.0f); + const float pressure = item.value("pressure", -1.0f); + const float time = item.value("time", std::numeric_limits::quiet_NaN()); + if (position.size() != 3 || normal.size() != 3 || !std::all_of(position.begin(), position.end(), [](float v) { + return std::isfinite(v); + }) || + !std::all_of(normal.begin(), normal.end(), [](float v) { return std::isfinite(v); }) || + !std::isfinite(radius) || !std::isfinite(strength) || !std::isfinite(pressure) || !std::isfinite(time) || radius <= 0.0f || + pressure < 0.0f || pressure > 1.0f || std::abs(strength) > 1.0f) + { + error = "SCULPT_ATTRIBUTE_INVALID: Sculpt sample is outside the finite brush bounds"; + return false; + } + Sample sample; + std::copy(position.begin(), position.end(), sample.position.begin()); + std::copy(normal.begin(), normal.end(), sample.normal.begin()); + sample.radius = radius; + sample.strength = strength; + sample.pressure = pressure; + if (has_previous_sample) { + const float dx = sample.position[0] - previous_sample_position[0]; + const float dy = sample.position[1] - previous_sample_position[1]; + const float dz = sample.position[2] - previous_sample_position[2]; + path_length += std::sqrt(dx * dx + dy * dy + dz * dz); + if (path_length > 10000.0f) { + error = "SCULPT_STROKE_BUDGET_EXCEEDED: Sculpt stroke path exceeds 10000 units"; + return false; + } + } + previous_sample_position = sample.position; + has_previous_sample = true; + parsed_samples.push_back(sample); + } + + MutableSpan positions = mesh->vert_positions_for_write(); + const VArraySpan mask = *mesh->attributes().lookup(".sculpt_mask", bke::AttrDomain::Point); + std::vector> neighbors; + if (brush == "SMOOTH") { + neighbors.resize(size_t(mesh->verts_num)); + for (const int2 edge : mesh->edges()) { + if (edge[0] >= 0 && edge[1] >= 0 && edge[0] < mesh->verts_num && edge[1] < mesh->verts_num) { + neighbors[size_t(edge[0])].push_back(edge[1]); + neighbors[size_t(edge[1])].push_back(edge[0]); + } + } + } + + auto apply_sample = [&](const Sample &sample, const std::array &position, + const std::array &normal, const std::array &delta) { + float normal_length = std::sqrt(normal[0] * normal[0] + normal[1] * normal[1] + normal[2] * normal[2]); + const std::array direction = normal_length > 1e-8f ? + std::array{normal[0] / normal_length, + normal[1] / normal_length, + normal[2] / normal_length} : + std::array{0.0f, 0.0f, 1.0f}; + for (int vertex = 0; vertex < mesh->verts_num; vertex++) { + const float dx = positions[vertex].x - position[0]; + const float dy = positions[vertex].y - position[1]; + const float dz = positions[vertex].z - position[2]; + const float distance = std::sqrt(dx * dx + dy * dy + dz * dz); + if (distance >= sample.radius) continue; + const float falloff = (1.0f - distance / sample.radius); + const float mask_factor = mask.is_empty() ? 1.0f : std::max(0.0f, 1.0f - mask[vertex]); + const float influence = sample.strength * sample.pressure * falloff * falloff * mask_factor; + if (influence == 0.0f) continue; + if (brush == "SMOOTH") { + const std::vector &adjacent = neighbors[size_t(vertex)]; + if (adjacent.empty()) continue; + float3 average(0.0f); + for (const int neighbor : adjacent) average += positions[neighbor]; + average *= 1.0f / float(adjacent.size()); + positions[vertex] += (average - positions[vertex]) * influence; + } + else if (brush == "GRAB") { + positions[vertex].x += delta[0] * influence; + positions[vertex].y += delta[1] * influence; + positions[vertex].z += delta[2] * influence; + } + else { + const float scale = sample.radius * (brush == "DRAW" ? 0.25f : 0.15f) * influence; + positions[vertex].x += direction[0] * scale; + positions[vertex].y += direction[1] * scale; + positions[vertex].z += direction[2] * scale; + } + } + }; + + std::array previous_position = parsed_samples.front().position; + for (const Sample &sample : parsed_samples) { + std::array delta{sample.position[0] - previous_position[0], + sample.position[1] - previous_position[1], + sample.position[2] - previous_position[2]}; + for (int mirror = 0; mirror < 8; mirror++) { + if ((mirror & 1) != 0 && !mirror_axes[0]) continue; + if ((mirror & 2) != 0 && !mirror_axes[1]) continue; + if ((mirror & 4) != 0 && !mirror_axes[2]) continue; + std::array position = sample.position; + std::array normal = sample.normal; + std::array mirrored_delta = delta; + for (int axis = 0; axis < 3; axis++) { + if ((mirror & (1 << axis)) != 0) { + position[axis] = -position[axis]; + normal[axis] = -normal[axis]; + mirrored_delta[axis] = -mirrored_delta[axis]; + } + } + apply_sample(sample, position, normal, mirrored_delta); + } + previous_position = sample.position; + } + mesh->tag_positions_changed(); + mesh->id.recalc |= ID_RECALC_GEOMETRY; + object->id.recalc |= ID_RECALC_GEOMETRY; + return true; +} + +bool web_engine_blend_main_mesh_edit(WebBlendMainState *state, + const char *mesh_id, + const char *operation, + const char *selection_mode, + const std::vector &element_indices, + const std::vector &offset, + const float amount, + const int segments, + std::string &error) +{ + Object *object = find_mesh_object(state != nullptr ? state->main : nullptr, mesh_id); + Mesh *mesh = object != nullptr ? reinterpret_cast(object->data) : nullptr; + if (!ensure_editable(object, mesh != nullptr ? &mesh->id : nullptr, error) || operation == nullptr || + selection_mode == nullptr || element_indices.empty()) return false; + const std::string op_name(operation); + const std::string mode(selection_mode); + const bool changes_topology = op_name != "TRANSLATE"; + if (changes_topology && mesh->key != nullptr) { + error = "SHAPE_KEY_TOPOLOGY_EDIT_BLOCKED: topology edits require removing or baking shape keys"; + return false; + } + + BMeshCreateParams create_params{}; + create_params.use_toolflags = true; + BMesh *bm = BM_mesh_create(&bm_mesh_allocsize_default, &create_params); + BMeshFromMeshParams from_params{}; + from_params.calc_face_normal = true; + from_params.calc_vert_normal = true; + BM_mesh_bm_from_me(bm, mesh, &from_params); + BM_mesh_elem_hflag_disable_all(bm, BM_VERT | BM_EDGE | BM_FACE, BM_ELEM_SELECT, false); + bool valid = true; + for (const uint32_t index : element_indices) { + if (mode == "VERT") { + BMVert *element = BM_vert_at_index_find_or_table(bm, int(index)); + if (element == nullptr) valid = false; + else BM_vert_select_set(bm, element, true); + } + else if (mode == "EDGE") { + BMEdge *element = BM_edge_at_index_find_or_table(bm, int(index)); + if (element == nullptr) valid = false; + else BM_edge_select_set(bm, element, true); + } + else if (mode == "FACE") { + BMFace *element = BM_face_at_index_find_or_table(bm, int(index)); + if (element == nullptr) valid = false; + else BM_face_select_set(bm, element, true); + } + else valid = false; + if (!valid) break; + } + if (!valid) { + BM_mesh_free(bm); + error = "meshEdit contains an invalid selection mode or element index"; + return false; + } + + bool executed = true; + if (op_name == "MERGE") { + if (mode != "VERT" || element_indices.size() < 2) executed = false; + else { + float center[3] = {0, 0, 0}; + for (const uint32_t index : element_indices) add_v3_v3(center, BM_vert_at_index_find_or_table(bm, int(index))->co); + mul_v3_fl(center, 1.0f / float(element_indices.size())); + executed = BMO_op_callf(bm, BMO_FLAG_DEFAULTS, "pointmerge verts=%hv merge_co=%v", BM_ELEM_SELECT, center); + } + } + else if (op_name == "DISSOLVE") { + if (mode == "VERT") executed = BMO_op_callf(bm, BMO_FLAG_DEFAULTS, "dissolve_verts verts=%hv use_face_split=%b use_boundary_tear=%b", BM_ELEM_SELECT, false, false); + else if (mode == "EDGE") executed = BMO_op_callf(bm, BMO_FLAG_DEFAULTS, "dissolve_edges edges=%he use_verts=%b use_face_split=%b angle_threshold=%f", BM_ELEM_SELECT, true, false, 0.0f); + else executed = BMO_op_callf(bm, BMO_FLAG_DEFAULTS, "dissolve_faces faces=%hf use_verts=%b", BM_ELEM_SELECT, true); + } + else if (op_name == "EXTRUDE") { + if (mode != "FACE" || offset.size() != 3) executed = false; + else { + BMOperator bmop; + executed = BMO_op_initf(bm, &bmop, BMO_FLAG_DEFAULTS, + "extrude_face_region geom=%hvef use_keep_orig=%b use_normal_flip=%b use_normal_from_adjacent=%b use_dissolve_ortho_edges=%b use_select_history=%b skip_input_flip=%b", + BM_ELEM_SELECT, false, false, false, false, false, false); + if (executed) { + BMO_op_exec(bm, &bmop); + BM_mesh_elem_hflag_disable_all(bm, BM_VERT | BM_EDGE | BM_FACE, BM_ELEM_SELECT, false); + BMO_slot_buffer_hflag_enable(bm, bmop.slots_out, "geom.out", BM_VERT, BM_ELEM_SELECT, true); + float delta[3] = {offset[0], offset[1], offset[2]}; + executed = BMO_op_callf(bm, BMO_FLAG_DEFAULTS, "translate vec=%v verts=%hv", delta, BM_ELEM_SELECT); + BMO_op_finish(bm, &bmop); + } + } + } + else if (op_name == "INSET") { + executed = mode == "FACE" && amount > 0.0f && + BMO_op_callf(bm, BMO_FLAG_DEFAULTS, + "inset_region faces=%hf use_boundary=%b use_even_offset=%b use_interpolate=%b use_relative_offset=%b use_edge_rail=%b thickness=%f depth=%f use_outset=%b", + BM_ELEM_SELECT, true, true, true, false, false, amount, 0.0f, false); + } + else if (op_name == "BEVEL") { + executed = (mode == "VERT" || mode == "EDGE") && amount > 0.0f && + BMO_op_callf(bm, BMO_FLAG_DEFAULTS, + "bevel geom=%hev offset=%f segments=%i affect=%i offset_type=%i profile_type=%i profile=%f clamp_overlap=%b material=%i loop_slide=%b mark_seam=%b mark_sharp=%b harden_normals=%b face_strength_mode=%i miter_outer=%i miter_inner=%i spread=%f", + BM_ELEM_SELECT, amount, std::clamp(segments, 1, 32), mode == "VERT" ? 0 : 1, + 0, 0, 0.5f, true, -1, true, false, false, false, 0, 0, 0, 0.1f); + } + else if (op_name == "LOOP_CUT") { + executed = mode == "EDGE" && BMO_op_callf(bm, BMO_FLAG_DEFAULTS, + "subdivide_edges edges=%he smooth=%f smooth_falloff=%i fractal=%f along_normal=%f cuts=%i seed=%i use_grid_fill=%b use_single_edge=%b use_only_quads=%b use_sphere=%b use_smooth_even=%b", + BM_ELEM_SELECT, 0.0f, 0, 0.0f, 0.0f, std::clamp(segments, 1, 64), 0, + true, false, true, false, false); + } + else executed = false; + + if (!executed) { + BM_mesh_free(bm); + error = "MESH_EDIT_CONFIGURATION_UNSUPPORTED: operation and selection mode are incompatible"; + return false; + } + BM_mesh_normals_update(bm); + BMeshToMeshParams to_params{}; + to_params.calc_object_remap = true; + BM_mesh_bm_to_me(state->main, bm, mesh, &to_params); + BM_mesh_free(bm); + mesh->id.recalc |= ID_RECALC_GEOMETRY; + object->id.recalc |= ID_RECALC_GEOMETRY; + return true; +} + +bool web_engine_blend_main_create_uv_map(WebBlendMainState *state, + const char *mesh_id, + const char *name, + std::string &error) +{ + Object *object = find_mesh_object(state != nullptr ? state->main : nullptr, mesh_id); + Mesh *mesh = object != nullptr ? reinterpret_cast(object->data) : nullptr; + if (!ensure_editable(object, mesh != nullptr ? &mesh->id : nullptr, error) || name == nullptr || name[0] == '\0') return false; + bke::MutableAttributeAccessor attributes = mesh->attributes_for_write(); + if (!attributes.contains(name)) { + if (!attributes.add(name, bke::AttrDomain::Corner, bke::AttributeInitDefaultValue())) { + error = "UV map could not be created"; + return false; + } + } + mesh->uv_maps_active_set(name); + mesh->uv_maps_default_set(name); + mesh->id.recalc |= ID_RECALC_GEOMETRY; + return true; +} + +bool web_engine_blend_main_set_active_uv_map(WebBlendMainState *state, + const char *mesh_id, + const char *name, + std::string &error) +{ + Object *object = find_mesh_object(state != nullptr ? state->main : nullptr, mesh_id); + Mesh *mesh = object != nullptr ? reinterpret_cast(object->data) : nullptr; + if (!ensure_editable(object, mesh != nullptr ? &mesh->id : nullptr, error) || name == nullptr || + !mesh->attributes().contains(name)) { + if (error.empty()) error = "UV map was not found"; + return false; + } + mesh->uv_maps_active_set(name); + mesh->id.recalc |= ID_RECALC_GEOMETRY; + return true; +} + +bool web_engine_blend_main_unwrap_uv(WebBlendMainState *state, + const char *mesh_id, + const std::vector &face_indices, + const char *method, + std::string &error) +{ + Object *object = find_mesh_object(state != nullptr ? state->main : nullptr, mesh_id); + Mesh *mesh = object != nullptr ? reinterpret_cast(object->data) : nullptr; + if (!ensure_editable(object, mesh != nullptr ? &mesh->id : nullptr, error) || face_indices.empty()) return false; + std::string uv_name = mesh->active_uv_map_name().is_empty() ? "UVMap" : std::string(mesh->active_uv_map_name()); + if (!mesh->attributes().contains(uv_name)) { + if (!web_engine_blend_main_create_uv_map(state, mesh_id, uv_name.c_str(), error)) return false; + } + bke::SpanAttributeWriter uv = mesh->attributes_for_write().lookup_for_write_span(uv_name); + if (!uv) { + error = "active UV map is not a writable corner attribute"; + return false; + } + const Span positions = mesh->vert_positions(); + const Span corner_verts = mesh->corner_verts(); + const OffsetIndices faces = mesh->faces(); + for (const uint32_t face_index : face_indices) { + if (face_index >= uint32_t(faces.size())) { + uv.finish(); + error = "unwrapUV contains an out-of-range face index"; + return false; + } + const IndexRange face = faces[int(face_index)]; + float3 minimum(FLT_MAX), maximum(-FLT_MAX); + for (const int corner : face) { + const float3 point = positions[corner_verts[corner]]; + for (int axis = 0; axis < 3; axis++) { + minimum[axis] = std::min(minimum[axis], point[axis]); + maximum[axis] = std::max(maximum[axis], point[axis]); + } + } + const float3 extent = maximum - minimum; + int axis_u = 0, axis_v = 1; + if (method != nullptr && strcmp(method, "CUBE") == 0) { + const float3 normal = mesh->face_normals()[int(face_index)]; + const int dominant = std::abs(normal.x) >= std::abs(normal.y) && std::abs(normal.x) >= std::abs(normal.z) ? + 0 : (std::abs(normal.y) >= std::abs(normal.z) ? 1 : 2); + axis_u = dominant == 0 ? 1 : 0; + axis_v = dominant == 2 ? 1 : 2; + } + for (const int corner : face) { + const float3 point = positions[corner_verts[corner]] - minimum; + uv.span[corner] = float2(extent[axis_u] > 1e-8f ? point[axis_u] / extent[axis_u] : 0.0f, + extent[axis_v] > 1e-8f ? point[axis_v] / extent[axis_v] : 0.0f); + } + } + uv.finish(); + mesh->id.recalc |= ID_RECALC_GEOMETRY; + return true; +} + +bool web_engine_blend_main_add_material_slot(WebBlendMainState *state, + const char *object_id, + const char *name, + std::string &material_id, + std::string &error) +{ + Object *object = find_object(state != nullptr ? state->main : nullptr, object_id); + if (state == nullptr || state->main == nullptr || !ensure_editable(object, object != nullptr ? &object->id : nullptr, error)) return false; + Material *material = BKE_material_add(state->main, name != nullptr && name[0] != '\0' ? name : "Material"); + if (material == nullptr || !BKE_object_material_slot_add(state->main, object)) { + error = "material slot could not be created"; + return false; + } + BKE_object_material_assign(state->main, object, material, object->totcol, BKE_MAT_ASSIGN_OBDATA); + ensure_principled_node(*state->main, *material); + material->id.recalc |= ID_RECALC_SYNC_TO_EVAL; + object->id.recalc |= ID_RECALC_GEOMETRY; + material_id = "material:" + id_name(material->id); + return true; +} + +bool web_engine_blend_main_remove_material_slot(WebBlendMainState *state, + const char *object_id, + const int slot_index, + std::string &error) +{ + Object *object = find_object(state != nullptr ? state->main : nullptr, object_id); + if (state == nullptr || !ensure_editable(object, object != nullptr ? &object->id : nullptr, error) || + slot_index < 0 || slot_index >= object->totcol) { + if (error.empty()) error = "material slot index is out of range"; + return false; + } + object->actcol = short(slot_index + 1); + if (!BKE_object_material_slot_remove(state->main, object)) { + error = "material slot could not be removed"; + return false; + } + object->id.recalc |= ID_RECALC_GEOMETRY; + return true; +} + +bool web_engine_blend_main_assign_material_faces(WebBlendMainState *state, + const char *mesh_id, + const std::vector &face_indices, + const int slot_index, + std::string &error) +{ + Object *object = find_mesh_object(state != nullptr ? state->main : nullptr, mesh_id); + Mesh *mesh = object != nullptr ? reinterpret_cast(object->data) : nullptr; + if (!ensure_editable(object, mesh != nullptr ? &mesh->id : nullptr, error) || face_indices.empty() || + slot_index < 0 || slot_index >= object->totcol) { + if (error.empty()) error = "assignMaterialFaces requires selected faces and a valid material slot"; + return false; + } + bke::SpanAttributeWriter material = mesh->attributes_for_write().lookup_or_add_for_write_span( + "material_index", bke::AttrDomain::Face); + for (const uint32_t face : face_indices) { + if (face >= uint32_t(mesh->faces_num)) { + material.finish(); + error = "assignMaterialFaces contains an out-of-range face index"; + return false; + } + material.span[int(face)] = slot_index; + } + material.finish(); + mesh->id.recalc |= ID_RECALC_GEOMETRY; + object->id.recalc |= ID_RECALC_GEOMETRY; + return true; +} + +bool web_engine_blend_main_set_material_principled(WebBlendMainState *state, + const char *material_id, + const std::vector &base_color, + const float roughness, + const float metallic, + const std::vector &emission_color, + const float alpha, + const float ior, + const float specular_ior_level, + const float transmission_weight, + const float coat_weight, + const float coat_roughness, + const float emission_strength, + std::string &error) +{ + Material *material = find_material(state != nullptr ? state->main : nullptr, material_id); + if (state == nullptr || state->main == nullptr || material == nullptr || material->id.lib != nullptr || + base_color.size() != 4 || !std::isfinite(roughness) || !std::isfinite(metallic) || + !std::isfinite(alpha) || !std::isfinite(ior) || !std::isfinite(specular_ior_level) || + !std::isfinite(transmission_weight) || !std::isfinite(coat_weight) || + !std::isfinite(coat_roughness) || !std::isfinite(emission_strength)) { + error = "setMaterialPrincipled requires an editable material and finite Principled values"; + return false; + } + material->r = base_color[0]; + material->g = base_color[1]; + material->b = base_color[2]; + material->a = base_color[3]; + material->roughness = std::clamp(roughness, 0.0f, 1.0f); + material->metallic = std::clamp(metallic, 0.0f, 1.0f); + bNode *principled = ensure_principled_node(*state->main, *material); + if (principled == nullptr) { + error = "material has no editable shader node tree"; + return false; + } + set_socket_color(principled, "Base Color", base_color); + set_socket_float(principled, "Roughness", material->roughness); + set_socket_float(principled, "Metallic", material->metallic); + set_socket_float(principled, "Alpha", std::clamp(alpha, 0.0f, 1.0f)); + set_socket_float(principled, "IOR", std::clamp(ior, 1.0f, 2.333f)); + set_socket_float(principled, "Specular IOR Level", std::clamp(specular_ior_level, 0.0f, 1.0f)); + set_socket_float(principled, "Transmission Weight", std::clamp(transmission_weight, 0.0f, 1.0f)); + set_socket_float(principled, "Coat Weight", std::clamp(coat_weight, 0.0f, 1.0f)); + set_socket_float(principled, "Coat Roughness", std::clamp(coat_roughness, 0.0f, 1.0f)); + if (emission_color.size() == 4) set_socket_color(principled, "Emission Color", emission_color); + set_socket_float(principled, "Emission Strength", std::clamp(emission_strength, 0.0f, 1000000.0f)); + material->id.recalc |= ID_RECALC_SYNC_TO_EVAL; + return true; +} + +bool web_engine_blend_main_import_image(WebBlendMainState *state, + const char *name, + const char *mime_type, + const int width, + const int height, + const char *base64, + std::string &image_id, + std::string &error) +{ + if (state == nullptr || state->main == nullptr || name == nullptr || width <= 0 || height <= 0 || + width > 32768 || height > 32768 || mime_type == nullptr || + (strcmp(mime_type, "image/png") != 0 && strcmp(mime_type, "image/jpeg") != 0)) { + error = "importImage requires bounded PNG or JPEG dimensions and data"; + return false; + } + const std::vector decoded = decode_base64(base64); + if (decoded.empty() || decoded.size() > 256 * 1024 * 1024) { + error = "importImage base64 payload is empty or exceeds 256 MiB"; + return false; + } + Image *image = BKE_id_new(state->main, name); + if (image == nullptr) { + error = "Blender could not create the image data-block"; + return false; + } + image->source = IMA_SRC_FILE; + image->type = IMA_TYPE_IMAGE; + if (ImageTile *tile = static_cast(image->tiles.first)) { + tile->gen_x = width; + tile->gen_y = height; + tile->gen_depth = 32; + tile->gen_type = IMA_GENTYPE_BLANK; + } + const char *extension = strcmp(mime_type, "image/png") == 0 ? ".png" : ".jpg"; + BLI_snprintf(image->filepath, sizeof(image->filepath), "//%s%s", name, extension); + char *owned = MEM_new_array_uninitialized(decoded.size(), "WebEngine packed image"); + memcpy(owned, decoded.data(), decoded.size()); + BKE_image_packfiles_from_mem(nullptr, image, owned, decoded.size()); + image->id.recalc |= ID_RECALC_SOURCE; + image_id = "image:" + id_name(image->id); + return true; +} + +bool web_engine_blend_main_set_material_image(WebBlendMainState *state, + const char *material_id, + const char *image_id, + const char *usage, + const char *uv_map, + std::string &error) +{ + Material *material = find_material(state != nullptr ? state->main : nullptr, material_id); + Image *image = find_image(state != nullptr ? state->main : nullptr, image_id); + if (state == nullptr || state->main == nullptr || material == nullptr || image == nullptr || + material->id.lib != nullptr || usage == nullptr) { + error = "setMaterialImageNode requires editable material and image data-blocks"; + return false; + } + bNode *principled = ensure_principled_node(*state->main, *material); + bNodeTree *tree = material->nodetree; + if (principled == nullptr || tree == nullptr) { + error = "material has no editable shader node tree"; + return false; + } + bNode *texture = web_add_shader_node(*tree, SH_NODE_TEX_IMAGE); + if (texture == nullptr) { + error = "material image texture node could not be created"; + return false; + } + texture->id = &image->id; + id_us_plus(&image->id); + bNodeSocket *color_output = bke::node_find_socket(*texture, SOCK_OUT, UString("Color")); + bNodeSocket *destination = nullptr; + if (strcmp(usage, "BASE_COLOR") == 0) { + destination = bke::node_find_socket(*principled, SOCK_IN, UString("Base Color")); + } + else if (strcmp(usage, "NORMAL") == 0) { + bNode *normal = web_add_shader_node(*tree, SH_NODE_NORMAL_MAP); + if (normal == nullptr) { + error = "material normal map node could not be created"; + return false; + } + bNodeSocket *normal_color = bke::node_find_socket(*normal, SOCK_IN, UString("Color")); + bNodeSocket *normal_output = bke::node_find_socket(*normal, SOCK_OUT, UString("Normal")); + destination = bke::node_find_socket(*principled, SOCK_IN, UString("Normal")); + if (color_output != nullptr && normal_color != nullptr) bke::node_add_link(*tree, *texture, *color_output, *normal, *normal_color); + if (normal_output != nullptr && destination != nullptr) bke::node_add_link(*tree, *normal, *normal_output, *principled, *destination); + destination = nullptr; + } + else { + error = "MATERIAL_NODE_USAGE_UNSUPPORTED: use BASE_COLOR or NORMAL"; + return false; + } + if (destination != nullptr && color_output != nullptr) { + if (destination->link != nullptr) bke::node_remove_link(tree, *destination->link); + bke::node_add_link(*tree, *texture, *color_output, *principled, *destination); + } + if (uv_map != nullptr && uv_map[0] != '\0') { + bNode *uv = web_add_shader_node(*tree, SH_NODE_UVMAP); + if (uv == nullptr) { + error = "material UV map node could not be created"; + return false; + } + if (auto *storage = static_cast(uv->storage)) STRNCPY(storage->uv_map, uv_map); + bNodeSocket *uv_output = bke::node_find_socket(*uv, SOCK_OUT, UString("UV")); + bNodeSocket *vector_input = bke::node_find_socket(*texture, SOCK_IN, UString("Vector")); + if (uv_output != nullptr && vector_input != nullptr) bke::node_add_link(*tree, *uv, *uv_output, *texture, *vector_input); + } + tree->id.recalc |= ID_RECALC_NTREE_OUTPUT; + material->id.recalc |= ID_RECALC_SYNC_TO_EVAL; + return true; +} + +bool web_engine_blend_main_set_shader_graph(WebBlendMainState *state, + const char *material_id, + const char *graph_json, + std::string &error) +{ + using json = nlohmann::json; + Material *material = find_material(state != nullptr ? state->main : nullptr, material_id); + if (state == nullptr || state->main == nullptr || material == nullptr || material->id.lib != nullptr || + graph_json == nullptr) { + error = "setShaderGraph requires an editable material and graph"; + return false; + } + + json graph; + try { + graph = json::parse(graph_json); + } + catch (const std::exception &) { + error = "SHADER_INVALID_GRAPH: graph JSON is invalid"; + return false; + } + if (graph.value("schemaVersion", 0) != 1 || graph.value("materialId", "") != material_id || + !graph.contains("nodes") || !graph["nodes"].is_array() || + !graph.contains("links") || !graph["links"].is_array() || graph["nodes"].size() > 512 || + graph["links"].size() > 2048) { + error = "SHADER_INVALID_GRAPH: schema, material, or graph bounds are invalid"; + return false; + } + + struct SocketSpec { + std::string name; + bool input = false; + json default_value; + }; + struct NodeSpec { + std::string type; + std::string name; + Image *image = nullptr; + int math_operation = NODE_MATH_ADD; + std::unordered_map sockets; + }; + std::unordered_map specs; + std::vector node_order; + int output_count = 0; + for (const json &node : graph["nodes"]) { + if (!node.is_object() || !node.contains("id") || !node["id"].is_string() || + !node.contains("type") || !node["type"].is_string() || + !node.contains("name") || !node["name"].is_string() || + !node.contains("sockets") || !node["sockets"].is_array()) { + error = "SHADER_INVALID_GRAPH: node metadata is invalid"; + return false; + } + const std::string id = node["id"].get(); + NodeSpec spec; + spec.type = node["type"].get(); + spec.name = node["name"].get(); + if (id.empty() || id.size() > 256 || spec.name.empty() || spec.name.size() > 63 || specs.contains(id)) { + error = "SHADER_INVALID_GRAPH: node IDs and names must be unique and bounded"; + return false; + } + if (spec.type != "RGB" && spec.type != "VALUE" && spec.type != "MATH" && spec.type != "PRINCIPLED" && + spec.type != "IMAGE_TEXTURE" && spec.type != "NORMAL_MAP" && spec.type != "MATERIAL_OUTPUT") { + error = "SHADER_NODE_UNSUPPORTED: node type is outside the finite writable Shader subset"; + return false; + } + if (spec.type == "MATH") { + if (!node.contains("properties") || !node["properties"].is_object() || + node["properties"].size() != 1 || !node["properties"].contains("operation") || + !node["properties"]["operation"].is_string()) { + error = "SHADER_NODE_UNSUPPORTED: Math requires one operation property"; + return false; + } + const std::string operation = node["properties"]["operation"].get(); + if (operation == "ADD") spec.math_operation = NODE_MATH_ADD; + else if (operation == "SUBTRACT") spec.math_operation = NODE_MATH_SUBTRACT; + else if (operation == "MULTIPLY") spec.math_operation = NODE_MATH_MULTIPLY; + else if (operation == "DIVIDE") spec.math_operation = NODE_MATH_DIVIDE; + else if (operation == "MINIMUM") spec.math_operation = NODE_MATH_MINIMUM; + else if (operation == "MAXIMUM") spec.math_operation = NODE_MATH_MAXIMUM; + else { + error = "SHADER_NODE_UNSUPPORTED: Math operation is outside the finite whitelist"; + return false; + } + } + else if (node.contains("properties") && + (!node["properties"].is_object() || !node["properties"].empty())) { + error = "SHADER_NODE_UNSUPPORTED: node properties are not writable in schema 1"; + return false; + } + if (spec.type == "MATERIAL_OUTPUT") output_count++; + if (spec.type == "IMAGE_TEXTURE") { + if (!node.contains("imageId") || !node["imageId"].is_string() || + (spec.image = find_image(state->main, node["imageId"].get_ref().c_str())) == nullptr) { + error = "SHADER_EXTERNAL_RESOURCE_MISSING: Image Texture requires an existing image"; + return false; + } + } + for (const json &socket : node["sockets"]) { + if (!socket.is_object() || !socket.contains("id") || !socket["id"].is_string() || + !socket.contains("name") || !socket["name"].is_string() || + !socket.contains("direction") || !socket["direction"].is_string()) { + error = "SHADER_INVALID_GRAPH: socket metadata is invalid"; + return false; + } + const std::string socket_id = socket["id"].get(); + SocketSpec socket_spec{socket["name"].get(), + socket["direction"].get() == "INPUT", + socket.value("defaultValue", json())}; + if (socket_id.empty() || socket_spec.name.empty() || spec.sockets.contains(socket_id) || + (socket["direction"] != "INPUT" && socket["direction"] != "OUTPUT")) { + error = "SHADER_INVALID_GRAPH: socket IDs, names, or directions are invalid"; + return false; + } + spec.sockets.emplace(socket_id, std::move(socket_spec)); + } + if (spec.type == "MATH") { + for (const auto &[socket_id, socket_spec] : spec.sockets) { + (void)socket_id; + const bool valid = socket_spec.input ? + (socket_spec.name == "Value" || socket_spec.name == "Value_001") : + socket_spec.name == "Value"; + if (!valid) { + error = "SHADER_INVALID_GRAPH: Math socket identifier is outside the finite schema"; + return false; + } + } + } + specs.emplace(id, std::move(spec)); + node_order.push_back(id); + } + if (output_count != 1 || + (graph.contains("outputNodeId") && + (!graph["outputNodeId"].is_string() || !specs.contains(graph["outputNodeId"].get()) || + specs.at(graph["outputNodeId"].get()).type != "MATERIAL_OUTPUT"))) { + error = "SHADER_INVALID_GRAPH: exactly one Material Output is required"; + return false; + } + for (const json &link : graph["links"]) { + if (!link.is_object()) { + error = "SHADER_INVALID_GRAPH: link metadata is invalid"; + return false; + } + const std::string from_node = link.value("fromNodeId", ""); + const std::string from_socket = link.value("fromSocketId", ""); + const std::string to_node = link.value("toNodeId", ""); + const std::string to_socket = link.value("toSocketId", ""); + if (!specs.contains(from_node) || !specs.contains(to_node) || + !specs.at(from_node).sockets.contains(from_socket) || + !specs.at(to_node).sockets.contains(to_socket) || + specs.at(from_node).sockets.at(from_socket).input || + !specs.at(to_node).sockets.at(to_socket).input) { + error = "SHADER_INVALID_GRAPH: link references an invalid endpoint"; + return false; + } + } + + bNodeTree *tree = material->nodetree; + if (tree == nullptr) { + tree = bke::node_tree_add_tree_embedded(nullptr, &material->id, "Shader Nodetree", "ShaderNodeTree"); + material->nodetree = tree; + } + if (tree == nullptr) { + error = "material has no editable shader node tree"; + return false; + } + while (tree->nodes.first != nullptr) { + bke::node_remove_node(state->main, *tree, *static_cast(tree->nodes.first), true); + } + std::unordered_map created_nodes; + for (const std::string &id : node_order) { + const NodeSpec &spec = specs.at(id); + const int legacy_type = spec.type == "RGB" ? SH_NODE_RGB : + spec.type == "VALUE" ? SH_NODE_VALUE : + spec.type == "MATH" ? SH_NODE_MATH : + spec.type == "PRINCIPLED" ? SH_NODE_BSDF_PRINCIPLED : + spec.type == "IMAGE_TEXTURE" ? SH_NODE_TEX_IMAGE : + spec.type == "NORMAL_MAP" ? SH_NODE_NORMAL_MAP : SH_NODE_OUTPUT_MATERIAL; + bNode *node = web_add_shader_node(*tree, legacy_type); + if (node == nullptr) { + error = "SHADER_INVALID_GRAPH: Blender could not create a declared node"; + return false; + } + STRNCPY(node->name, spec.name.c_str()); + STRNCPY(node->label, spec.name.c_str()); + if (spec.type == "MATH") node->custom1 = spec.math_operation; + if (spec.image != nullptr) { + node->id = &spec.image->id; + id_us_plus(&spec.image->id); + } + for (const auto &[socket_id, socket_spec] : spec.sockets) { + (void)socket_id; + if (socket_spec.default_value.is_null() || + (!socket_spec.input && spec.type != "RGB" && spec.type != "VALUE")) continue; + const eNodeSocketInOut direction = socket_spec.input ? SOCK_IN : SOCK_OUT; + bNodeSocket *socket = bke::node_find_socket(*node, direction, UString(socket_spec.name)); + if (socket == nullptr) { + error = "SHADER_INVALID_GRAPH: declared input socket is unavailable on the Blender node"; + return false; + } + if (socket->type == SOCK_FLOAT && socket_spec.default_value.is_number()) { + static_cast(socket->default_value)->value = socket_spec.default_value.get(); + } + else if ((socket->type == SOCK_VECTOR || socket->type == SOCK_RGBA) && socket_spec.default_value.is_array()) { + const std::vector values = socket_spec.default_value.get>(); + if ((socket->type == SOCK_VECTOR && values.size() != 3) || + (socket->type == SOCK_RGBA && values.size() != 4)) { + error = "SHADER_INVALID_GRAPH: socket default dimensions do not match Blender"; + return false; + } + if (socket->type == SOCK_VECTOR) { + std::copy(values.begin(), values.end(), static_cast(socket->default_value)->value); + } + else { + std::copy(values.begin(), values.end(), static_cast(socket->default_value)->value); + } + } + else { + error = "SHADER_INVALID_GRAPH: socket default type does not match Blender"; + return false; + } + } + created_nodes.emplace(id, node); + } + for (const json &link : graph["links"]) { + bNode *from_node = created_nodes.at(link["fromNodeId"].get()); + bNode *to_node = created_nodes.at(link["toNodeId"].get()); + const SocketSpec &from_spec = specs.at(link["fromNodeId"].get()).sockets.at(link["fromSocketId"].get()); + const SocketSpec &to_spec = specs.at(link["toNodeId"].get()).sockets.at(link["toSocketId"].get()); + bNodeSocket *from = bke::node_find_socket(*from_node, SOCK_OUT, UString(from_spec.name)); + bNodeSocket *to = bke::node_find_socket(*to_node, SOCK_IN, UString(to_spec.name)); + if (from == nullptr || to == nullptr) { + error = "SHADER_INVALID_GRAPH: declared link socket is unavailable on the Blender node"; + return false; + } + bke::node_add_link(*tree, *from_node, *from, *to_node, *to); + } + BKE_ntree_update_tag_all(tree); + BKE_ntree_update_after_single_tree_change(*state->main, *tree); + tree->id.recalc |= ID_RECALC_NTREE_OUTPUT; + material->id.recalc |= ID_RECALC_SYNC_TO_EVAL; + return true; +} + +bool web_engine_blend_main_insert_keyframe(WebBlendMainState *state, + const char *object_id, + const int frame, + const char *property, + const char *interpolation, + std::string &error) +{ + Object *object = find_object(state != nullptr ? state->main : nullptr, object_id); + if (state == nullptr || state->main == nullptr || object == nullptr || object->id.lib != nullptr || + property == nullptr || frame < state->scene->r.sfra || frame > state->scene->r.efra) { + error = "insertObjectKeyframe requires an editable object and an in-range frame"; + return false; + } + const char *path = nullptr; + const float *values = nullptr; + if (strcmp(property, "LOCATION") == 0) { path = "location"; values = object->loc; } + else if (strcmp(property, "ROTATION_EULER") == 0) { path = "rotation_euler"; values = object->rot; } + else if (strcmp(property, "SCALE") == 0) { path = "scale"; values = object->scale; } + else { + error = "ANIMATION_PROPERTY_UNSUPPORTED: use LOCATION, ROTATION_EULER or SCALE"; + return false; + } + AnimData *adt = BKE_animdata_ensure_id(&object->id); + if (adt == nullptr) { + error = "Blender could not allocate AnimData"; + return false; + } + bAction *action = adt->action; + if (action == nullptr) { + animrig::Action &created = animrig::action_add(*state->main, id_name(object->id) + "Action"); + action = &created; + if (!animrig::assign_action(action, object->id)) { + error = "Blender could not assign a new Action"; + return false; + } + } + animrig::KeyframeSettings settings = animrig::get_keyframe_settings(false); + settings.interpolation = interpolation_from_name(interpolation); + for (int index = 0; index < 3; index++) { + const animrig::FCurveDescriptor descriptor{path, index, std::nullopt, std::nullopt, std::nullopt}; + FCurve &fcurve = animrig::action_fcurve_ensure(state->main, *action, object->id, descriptor); + if (animrig::insert_vert_fcurve(&fcurve, float2(float(frame), values[index]), settings, INSERTKEY_NOFLAGS) != + animrig::SingleKeyingResult::SUCCESS) { + error = "Blender rejected the keyframe"; + return false; + } + } + object->id.recalc |= ID_RECALC_ANIMATION | ID_RECALC_TRANSFORM; + return true; +} + +bool web_engine_blend_main_delete_keyframe(WebBlendMainState *state, + const char *object_id, + const int frame, + const char *property, + std::string &error) +{ + Object *object = find_object(state != nullptr ? state->main : nullptr, object_id); + AnimData *adt = object != nullptr ? object->adt : nullptr; + if (object == nullptr || object->id.lib != nullptr || adt == nullptr || adt->action == nullptr) { + error = "deleteObjectKeyframe requires an editable animated object"; + return false; + } + const char *path = property == nullptr || property[0] == '\0' ? nullptr : + strcmp(property, "LOCATION") == 0 ? "location" : + strcmp(property, "ROTATION_EULER") == 0 ? "rotation_euler" : + strcmp(property, "SCALE") == 0 ? "scale" : ""; + if (path != nullptr && path[0] == '\0') { + error = "ANIMATION_PROPERTY_UNSUPPORTED"; + return false; + } + bool removed = false; + for (FCurve *fcurve : animrig::fcurves_for_action_slot(adt->action->wrap(), adt->slot_handle)) { + if (path != nullptr && (fcurve->rna_path == nullptr || strcmp(fcurve->rna_path, path) != 0)) continue; + removed |= animrig::fcurve_delete_keyframe_at_time(fcurve, float(frame)); + } + if (!removed) { + error = "keyframe was not found at the requested frame"; + return false; + } + object->id.recalc |= ID_RECALC_ANIMATION | ID_RECALC_TRANSFORM; + return true; +} + +bool web_engine_blend_main_set_fcurve_interpolation(WebBlendMainState *state, + const char *animation_id, + const char *path, + const char *interpolation, + std::string &error) +{ + bAction *action = find_action(state != nullptr ? state->main : nullptr, animation_id); + if (action == nullptr || action->id.lib != nullptr || path == nullptr || path[0] == '\0') { + error = "setFCurveInterpolation requires an editable Action and channel path"; + return false; + } + const eBezTriple_Interpolation mode = interpolation_from_name(interpolation); + bool found = false; + for (animrig::Slot *slot : action->wrap().slots()) { + for (FCurve *fcurve : animrig::fcurves_for_action_slot(action->wrap(), slot->handle)) { + const std::string channel = std::string(fcurve->rna_path != nullptr ? fcurve->rna_path : "") + + "[" + std::to_string(fcurve->array_index) + "]"; + if (channel != path) continue; + for (int index = 0; index < fcurve->totvert; index++) fcurve->bezt[index].ipo = mode; + found = true; + } + } + if (!found) { + error = "FCurve channel was not found"; + return false; + } + action->id.recalc |= ID_RECALC_ANIMATION; + return true; +} + +bool web_engine_blend_main_set_active_action(WebBlendMainState *state, + const char *object_id, + const char *action_id, + std::string &error) +{ + Object *object = find_object(state != nullptr ? state->main : nullptr, object_id); + if (object == nullptr || object->id.lib != nullptr) { + error = "setActiveAction requires an editable object"; + return false; + } + bAction *action = action_id == nullptr || action_id[0] == '\0' ? nullptr : find_action(state->main, action_id); + if (action_id != nullptr && action_id[0] != '\0' && action == nullptr) { + error = "Action was not found"; + return false; + } + const bool assigned = action == nullptr ? animrig::unassign_action(object->id) : animrig::assign_action(action, object->id); + if (!assigned) { + error = "Blender rejected the Action assignment"; + return false; + } + object->id.recalc |= ID_RECALC_ANIMATION | ID_RECALC_TRANSFORM; + return true; +} + +bool web_engine_blend_main_set_nla_stack(WebBlendMainState *state, + const char *object_id, + const char *tracks_json, + std::string &error) +{ + using json = nlohmann::json; + Object *object = find_object(state != nullptr ? state->main : nullptr, object_id); + if (state == nullptr || state->main == nullptr || object == nullptr || object->id.lib != nullptr || + tracks_json == nullptr) { + error = "setNLAStack requires an editable object and track array"; + return false; + } + json tracks; + try { + tracks = json::parse(tracks_json); + } + catch (const std::exception &) { + error = "NLA_INVALID_STACK: track JSON is invalid"; + return false; + } + if (!tracks.is_array() || tracks.size() > 128) { + error = "NLA_INVALID_STACK: at most 128 tracks are allowed"; + return false; + } + size_t strip_count = 0; + std::unordered_set track_ids; + std::unordered_set strip_ids; + for (const json &track : tracks) { + if (!track.is_object() || track.value("schemaVersion", 0) != 1 || + track.value("ownerId", "") != object_id || !track.contains("id") || + !track["id"].is_string() || !track.contains("name") || !track["name"].is_string() || + !track.contains("strips") || !track["strips"].is_array() || + !track.contains("muted") || !track["muted"].is_boolean() || + !track.contains("solo") || !track["solo"].is_boolean() || + !track.contains("selected") || !track["selected"].is_boolean()) { + error = "NLA_INVALID_STACK: track metadata is invalid"; + return false; + } + const std::string track_id = track["id"].get(); + const std::string track_name = track["name"].get(); + if (track_id.empty() || track_name.empty() || track_name.size() > 63 || !track_ids.insert(track_id).second) { + error = "NLA_INVALID_STACK: track IDs and names must be unique and bounded"; + return false; + } + strip_count += track["strips"].size(); + if (strip_count > 4096) { + error = "NLA_INVALID_STACK: at most 4096 strips are allowed"; + return false; + } + double previous_end = -std::numeric_limits::infinity(); + for (const json &strip : track["strips"]) { + if (!strip.is_object() || !strip.contains("id") || !strip["id"].is_string() || + !strip.contains("actionId") || !strip["actionId"].is_string()) { + error = "NLA_INVALID_STACK: strip metadata is invalid"; + return false; + } + const std::string strip_id = strip["id"].get(); + const std::string action_id = strip["actionId"].get(); + const double start = strip.value("frameStart", std::numeric_limits::quiet_NaN()); + const double end = strip.value("frameEnd", std::numeric_limits::quiet_NaN()); + const double act_start = strip.value("actionFrameStart", std::numeric_limits::quiet_NaN()); + const double act_end = strip.value("actionFrameEnd", std::numeric_limits::quiet_NaN()); + const double scale = strip.value("scale", std::numeric_limits::quiet_NaN()); + const double repeat = strip.value("repeat", std::numeric_limits::quiet_NaN()); + const double blend_in = strip.value("blendIn", std::numeric_limits::quiet_NaN()); + const double blend_out = strip.value("blendOut", std::numeric_limits::quiet_NaN()); + const double influence = strip.value("influence", std::numeric_limits::quiet_NaN()); + const std::string blend_mode = strip.value("blendMode", ""); + const std::string extrapolation = strip.value("extrapolation", ""); + if (strip_id.empty() || strip_id.size() > 63 || !strip_ids.insert(strip_id).second || + !strip.contains("muted") || !strip["muted"].is_boolean() || + !strip.contains("selected") || !strip["selected"].is_boolean() || + (strip.contains("reverse") && !strip["reverse"].is_boolean()) || + find_action(state->main, action_id.c_str()) == nullptr || + !std::isfinite(start) || !std::isfinite(end) || !std::isfinite(act_start) || !std::isfinite(act_end) || + !std::isfinite(scale) || !std::isfinite(repeat) || !std::isfinite(blend_in) || + !std::isfinite(blend_out) || !std::isfinite(influence) || start >= end || act_start >= act_end || + scale <= 0.0 || repeat <= 0.0 || blend_in < 0.0 || blend_out < 0.0 || influence < 0.0 || + influence > 1.0 || start < previous_end || blend_in + blend_out > end - start || + std::abs((act_end - act_start) * scale * repeat - (end - start)) > 1e-4 || + (blend_mode != "REPLACE" && blend_mode != "ADD" && blend_mode != "MULTIPLY" && blend_mode != "COMBINE") || + (extrapolation != "NOTHING" && extrapolation != "HOLD" && extrapolation != "HOLD_FORWARD")) { + error = "NLA_INVALID_STACK: strip ranges, Action, mapping, or modes are invalid"; + return false; + } + if (strip.value("useTimeWarp", false)) { + error = "NLA_TIME_WARP_UNSUPPORTED: Animated Time is outside the finite NLA subset"; + return false; + } + if (strip.value("stripType", "CLIP") != "CLIP") { + error = "NLA_STRIP_UNSUPPORTED: only Action Clip strips are writable"; + return false; + } + if (strip.contains("unsupportedReason")) { + error = "NLA_STRIP_UNSUPPORTED: strip carries unsupported source metadata"; + return false; + } + previous_end = end; + } + } + + AnimData *adt = BKE_animdata_ensure_id(&object->id); + if (adt == nullptr) { + error = "NLA_INVALID_STACK: Blender could not create AnimData"; + return false; + } + adt->act_track = nullptr; + adt->actstrip = nullptr; + BKE_nla_tracks_free(&adt->nla_tracks, true); + for (const json &track_json : tracks) { + NlaTrack *track = BKE_nlatrack_new_tail(&adt->nla_tracks, false); + if (track == nullptr) { + error = "NLA_INVALID_STACK: Blender could not create an NLA track"; + return false; + } + STRNCPY(track->name, track_json["name"].get_ref().c_str()); + track->flag = NLATRACK_OVERRIDELIBRARY_LOCAL; + if (track_json["selected"].get()) track->flag |= NLATRACK_SELECTED; + if (track_json["muted"].get()) track->flag |= NLATRACK_MUTED; + if (track_json["solo"].get()) track->flag |= NLATRACK_SOLO; + for (const json &strip_json : track_json["strips"]) { + bAction *action = find_action(state->main, strip_json["actionId"].get_ref().c_str()); + NlaStrip *strip = BKE_nlastrip_new(action, object->id); + if (strip == nullptr) { + error = "NLA_PATH_INCOMPATIBLE: Action has no slot compatible with the object"; + return false; + } + STRNCPY(strip->name, strip_json["id"].get_ref().c_str()); + strip->start = strip_json["frameStart"].get(); + strip->end = strip_json["frameEnd"].get(); + strip->actstart = strip_json["actionFrameStart"].get(); + strip->actend = strip_json["actionFrameEnd"].get(); + strip->scale = strip_json["scale"].get(); + strip->repeat = strip_json["repeat"].get(); + strip->blendin = strip_json["blendIn"].get(); + strip->blendout = strip_json["blendOut"].get(); + strip->influence = strip_json["influence"].get(); + const std::string blend_mode = strip_json["blendMode"].get(); + strip->blendmode = blend_mode == "ADD" ? NLASTRIP_MODE_ADD : + blend_mode == "MULTIPLY" ? NLASTRIP_MODE_MULTIPLY : + blend_mode == "COMBINE" ? NLASTRIP_MODE_COMBINE : NLASTRIP_MODE_REPLACE; + const std::string extrapolation = strip_json["extrapolation"].get(); + strip->extendmode = extrapolation == "NOTHING" ? NLASTRIP_EXTEND_NOTHING : + extrapolation == "HOLD_FORWARD" ? NLASTRIP_EXTEND_HOLD_FORWARD : + NLASTRIP_EXTEND_HOLD; + strip->flag = eNlaStrip_Flag(0); + if (strip_json["selected"].get()) strip->flag |= NLASTRIP_FLAG_SELECT; + if (strip_json["muted"].get()) strip->flag |= NLASTRIP_FLAG_MUTED; + if (strip_json.value("reverse", false)) strip->flag |= NLASTRIP_FLAG_REVERSE; + if (!BKE_nlastrips_add_strip(&track->strips, strip)) { + BKE_nlastrip_free(strip, true); + error = "NLA_INVALID_STACK: Blender rejected an overlapping or invalid strip"; + return false; + } + } + } + BKE_nla_validate_state(adt); + object->id.recalc |= ID_RECALC_ANIMATION | ID_RECALC_TRANSFORM; + return true; +} + +bool web_engine_blend_main_set_constraint(WebBlendMainState *state, + const char *object_id, + const char *constraint_name, + const bool enabled, + const float influence, + std::string &error) +{ + Object *object = find_object(state != nullptr ? state->main : nullptr, object_id); + if (object == nullptr || object->id.lib != nullptr || constraint_name == nullptr || !std::isfinite(influence)) { + error = "setConstraint requires an editable object, name and finite influence"; + return false; + } + for (bConstraint &constraint : object->constraints) { + if (strcmp(constraint.name, constraint_name) != 0) continue; + constraint.enforce = std::clamp(influence, 0.0f, 1.0f); + if (enabled) constraint.flag &= ~CONSTRAINT_OFF; + else constraint.flag |= CONSTRAINT_OFF; + object->id.recalc |= ID_RECALC_TRANSFORM; + return true; + } + error = "constraint was not found"; + return false; +} + +bool web_engine_blend_main_set_parent(WebBlendMainState *state, + const char *object_id, + const char *parent_id, + const bool keep_transform, + std::string &error) +{ + Object *object = find_object(state != nullptr ? state->main : nullptr, object_id); + Object *parent = parent_id == nullptr || parent_id[0] == '\0' ? nullptr : + find_object(state != nullptr ? state->main : nullptr, parent_id); + if (object == nullptr || object->id.lib != nullptr || (parent_id != nullptr && parent_id[0] != '\0' && parent == nullptr)) { + error = "setParent requires editable existing objects"; + return false; + } + if (parent == object) { + error = "OBJECT_PARENT_CYCLE: an object cannot parent itself"; + return false; + } + for (Object *ancestor = parent; ancestor != nullptr; ancestor = ancestor->parent) { + if (ancestor == object) { + error = "OBJECT_PARENT_CYCLE: parenting would create a dependency cycle"; + return false; + } + } + float world[4][4]; + copy_m4_m4(world, object->object_to_world().ptr()); + object->parent = parent; + object->partype = PAROBJECT; + object->parsubstr[0] = '\0'; + unit_m4(object->parentinv); + if (keep_transform) BKE_object_apply_mat4(object, world, true, true); + object->id.recalc |= ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY; + return true; +} + +bool web_engine_blend_main_create_collection(WebBlendMainState *state, + const char *name, + const char *parent_collection_id, + std::string &collection_id, + std::string &error) +{ + if (state == nullptr || state->main == nullptr || state->scene == nullptr || name == nullptr || name[0] == '\0') { + error = "createCollection requires a non-empty name"; + return false; + } + Collection *parent = parent_collection_id == nullptr || parent_collection_id[0] == '\0' ? + state->scene->master_collection : + find_collection(state->main, state->scene, parent_collection_id); + if (parent == nullptr || parent->id.lib != nullptr) { + error = "collection parent was not found or is linked"; + return false; + } + Collection *created = BKE_collection_add(state->main, parent, name); + if (created == nullptr) { + error = "Blender could not create the collection"; + return false; + } + collection_id = "collection:" + id_name(created->id); + return true; +} + +bool web_engine_blend_main_move_to_collection(WebBlendMainState *state, + const char *object_id, + const char *collection_id, + std::string &error) +{ + Object *object = find_object(state != nullptr ? state->main : nullptr, object_id); + Collection *destination = find_collection(state != nullptr ? state->main : nullptr, + state != nullptr ? state->scene : nullptr, + collection_id); + if (state == nullptr || object == nullptr || destination == nullptr || object->id.lib != nullptr || destination->id.lib != nullptr) { + error = "moveObjectToCollection requires editable object and collection data-blocks"; + return false; + } + if (!BKE_collection_has_object(destination, object) && + !BKE_collection_object_add(state->main, destination, object)) { + error = "Blender could not link the object to the collection"; + return false; + } + for (Collection &collection : state->main->collections) { + if (&collection != destination && BKE_collection_has_object(&collection, object)) { + BKE_collection_object_remove(state->main, &collection, object, false); + } + } + if (state->scene->master_collection != destination && + BKE_collection_has_object(state->scene->master_collection, object)) { + BKE_collection_object_remove(state->main, state->scene->master_collection, object, false); + } + object->id.recalc |= ID_RECALC_SYNC_TO_EVAL; + BKE_view_layer_synced_ensure(*state->main, state->scene, state->view_layer); + return true; +} + +bool web_engine_blend_main_rename_id(WebBlendMainState *state, + const char *id, + const char *name, + std::string &renamed_id, + std::string &error) +{ + if (state == nullptr || state->main == nullptr || id == nullptr || name == nullptr || name[0] == '\0' || strlen(name) > 63) { + error = "renameId requires a supported ID and a name of at most 63 bytes"; + return false; + } + ID *target = nullptr; + std::string prefix; + if (strncmp(id, "object:", 7) == 0) { Object *item = find_object(state->main, id); target = item != nullptr ? &item->id : nullptr; prefix = "object:"; } + else if (strncmp(id, "mesh:", 5) == 0) { + Object *object = find_mesh_object(state->main, id); + target = object != nullptr ? object->data : nullptr; + prefix = "mesh:"; + } + else if (strncmp(id, "curve:", 6) == 0) { + Curve *item = find_curve(state->main, id); + target = item != nullptr ? &item->id : nullptr; + prefix = "curve:"; + } + else if (strncmp(id, "metaball:", 9) == 0) { + MetaBall *item = find_metaball(state->main, id); + target = item != nullptr ? &item->id : nullptr; + prefix = "metaball:"; + } + else if (strncmp(id, "material:", 9) == 0) { Material *item = find_material(state->main, id); target = item != nullptr ? &item->id : nullptr; prefix = "material:"; } + else if (strncmp(id, "image:", 6) == 0) { Image *item = find_image(state->main, id); target = item != nullptr ? &item->id : nullptr; prefix = "image:"; } + else if (strncmp(id, "collection:", 11) == 0) { Collection *item = find_collection(state->main, state->scene, id); target = item != nullptr ? &item->id : nullptr; prefix = "collection:"; } + else if (strncmp(id, "action:", 7) == 0) { bAction *item = find_action(state->main, id); target = item != nullptr ? &item->id : nullptr; prefix = "action:"; } + if (target == nullptr || target->lib != nullptr) { + error = "renameId target was not found or is linked"; + return false; + } + BKE_id_rename(*state->main, *target, name, IDNewNameMode::RenameExistingNever); + renamed_id = prefix + id_name(*target); + target->recalc |= ID_RECALC_SYNC_TO_EVAL; + return true; +} + +bool web_engine_blend_main_join_objects(WebBlendMainState *state, + const char *active_object_id, + const std::vector &object_ids, + std::string &error) +{ + Object *active = find_object(state != nullptr ? state->main : nullptr, active_object_id); + Mesh *active_mesh = active != nullptr && active->type == OB_MESH ? reinterpret_cast(active->data) : nullptr; + if (!ensure_editable(active, active_mesh != nullptr ? &active_mesh->id : nullptr, error) || active_mesh->key != nullptr) { + if (error.empty()) error = "SHAPE_KEY_TOPOLOGY_EDIT_BLOCKED"; + return false; + } + std::vector sources; + for (const std::string &id : object_ids) { + Object *source = find_object(state->main, id.c_str()); + if (source == active) continue; + Mesh *source_mesh = source != nullptr && source->type == OB_MESH ? reinterpret_cast(source->data) : nullptr; + if (!ensure_editable(source, source_mesh != nullptr ? &source_mesh->id : nullptr, error) || source_mesh->key != nullptr) { + if (error.empty()) error = "joinObjects supports editable mesh objects without shape keys"; + return false; + } + sources.push_back(source); + } + if (sources.empty()) { + error = "joinObjects requires at least one source object"; + return false; + } + BMeshCreateParams create_params{}; + create_params.use_toolflags = true; + BMesh *bm = BM_mesh_create(&bm_mesh_allocsize_default, &create_params); + BMeshFromMeshParams from_params{}; + BM_mesh_bm_from_me(bm, active_mesh, &from_params); + float active_world[4][4], active_inverse[4][4]; + BKE_object_to_mat4(active, active_world); + invert_m4_m4(active_inverse, active_world); + for (Object *source : sources) { + Mesh *source_mesh = reinterpret_cast(source->data); + std::vector material_map(size_t(std::max(source->totcol, 1)), 0); + for (short source_slot = 1; source_slot <= source->totcol; source_slot++) { + Material *source_material = BKE_object_material_get(source, source_slot); + if (source_material == nullptr) continue; + int active_slot = 0; + for (short slot = 1; slot <= active->totcol; slot++) if (BKE_object_material_get(active, slot) == source_material) active_slot = slot - 1; + if (active_slot == 0 && (active->totcol == 0 || BKE_object_material_get(active, 1) != source_material)) { + BKE_object_material_slot_add(state->main, active); + BKE_object_material_assign(state->main, active, source_material, active->totcol, BKE_MAT_ASSIGN_OBDATA); + active_slot = active->totcol - 1; + } + material_map[size_t(source_slot - 1)] = active_slot; + } + const int previous_vertices = bm->totvert; + const int previous_faces = bm->totface; + BM_mesh_bm_from_me(bm, source_mesh, &from_params); + float source_world[4][4], relative[4][4]; + BKE_object_to_mat4(source, source_world); + mul_m4_m4m4(relative, active_inverse, source_world); + BM_mesh_elem_index_ensure(bm, BM_VERT | BM_FACE); + BMIter iter; + BMVert *vertex; + BM_ITER_MESH (vertex, &iter, bm, BM_VERTS_OF_MESH) { + if (BM_elem_index_get(vertex) >= previous_vertices) mul_m4_v3(relative, vertex->co); + } + BMFace *face; + BM_ITER_MESH (face, &iter, bm, BM_FACES_OF_MESH) { + if (BM_elem_index_get(face) < previous_faces) continue; + const int source_index = std::clamp(face->mat_nr, 0, int(material_map.size()) - 1); + face->mat_nr = short(material_map[size_t(source_index)]); + } + } + BM_mesh_normals_update(bm); + BMeshToMeshParams to_params{}; + to_params.calc_object_remap = true; + BM_mesh_bm_to_me(state->main, bm, active_mesh, &to_params); + BM_mesh_free(bm); + for (Object *source : sources) BKE_id_delete(state->main, &source->id); + active_mesh->id.recalc |= ID_RECALC_GEOMETRY; + active->id.recalc |= ID_RECALC_GEOMETRY; + BKE_view_layer_synced_ensure(*state->main, state->scene, state->view_layer); + return true; +} + +bool web_engine_blend_main_separate_faces(WebBlendMainState *state, + const char *object_id, + const std::vector &face_indices, + const char *name, + std::string &new_object_id, + std::string &error) +{ + Object *object = find_object(state != nullptr ? state->main : nullptr, object_id); + Mesh *mesh = object != nullptr && object->type == OB_MESH ? reinterpret_cast(object->data) : nullptr; + if (!ensure_editable(object, mesh != nullptr ? &mesh->id : nullptr, error) || face_indices.empty() || mesh->key != nullptr) { + if (error.empty()) error = "separateMeshFaces requires an editable mesh without shape keys"; + return false; + } + BMeshCreateParams create_params{}; + create_params.use_toolflags = true; + BMesh *source_bm = BM_mesh_create(&bm_mesh_allocsize_default, &create_params); + BMeshFromMeshParams from_params{}; + BM_mesh_bm_from_me(source_bm, mesh, &from_params); + BM_mesh_elem_hflag_disable_all(source_bm, BM_ALL_NOLOOP, BM_ELEM_SELECT | BM_ELEM_TAG, false); + for (const uint32_t index : face_indices) { + BMFace *face = BM_face_at_index_find_or_table(source_bm, int(index)); + if (face == nullptr) { + BM_mesh_free(source_bm); + error = "separateMeshFaces contains an out-of-range face index"; + return false; + } + BM_face_select_set(source_bm, face, true); + } + BMIter iter; + BMVert *selected_vertex; + BM_ITER_MESH (selected_vertex, &iter, source_bm, BM_VERTS_OF_MESH) if (BM_elem_flag_test(selected_vertex, BM_ELEM_SELECT)) BM_elem_flag_enable(selected_vertex, BM_ELEM_TAG); + BMEdge *selected_edge; + BM_ITER_MESH (selected_edge, &iter, source_bm, BM_EDGES_OF_MESH) if (BM_elem_flag_test(selected_edge, BM_ELEM_SELECT)) BM_elem_flag_enable(selected_edge, BM_ELEM_TAG); + BMFace *selected_face; + BM_ITER_MESH (selected_face, &iter, source_bm, BM_FACES_OF_MESH) if (BM_elem_flag_test(selected_face, BM_ELEM_SELECT)) BM_elem_flag_enable(selected_face, BM_ELEM_TAG); + + BMesh *destination_bm = BM_mesh_create(&bm_mesh_allocsize_default, &create_params); + BM_mesh_elem_toolflags_ensure(destination_bm); + BM_mesh_copy_init_customdata(destination_bm, source_bm, &bm_mesh_allocsize_default); + if (!BMO_op_callf(source_bm, BMO_FLAG_DEFAULTS & ~BMO_FLAG_RESPECT_HIDE, + "duplicate geom=%hvef dest=%p", BM_ELEM_TAG, destination_bm) || + !BMO_op_callf(source_bm, BMO_FLAG_DEFAULTS & ~BMO_FLAG_RESPECT_HIDE, + "delete geom=%hvef context=%i", BM_ELEM_TAG, DEL_FACES)) { + BM_mesh_free(destination_bm); + BM_mesh_free(source_bm); + error = "Blender BMesh separate operation failed"; + return false; + } + Object *duplicate = BKE_object_duplicate(state->main, object, USER_DUP_MESH, 0); + if (duplicate == nullptr) { + BM_mesh_free(destination_bm); + BM_mesh_free(source_bm); + error = "Blender could not create the separated object"; + return false; + } + BKE_collection_object_add_from(state->main, state->scene, object, duplicate); + Mesh *duplicate_mesh = reinterpret_cast(duplicate->data); + BMeshToMeshParams to_params{}; + to_params.calc_object_remap = true; + BM_mesh_bm_to_me(state->main, source_bm, mesh, &to_params); + BM_mesh_bm_to_me(state->main, destination_bm, duplicate_mesh, &to_params); + BM_mesh_free(destination_bm); + BM_mesh_free(source_bm); + if (name != nullptr && name[0] != '\0') { + BKE_id_rename(*state->main, duplicate->id, name, IDNewNameMode::RenameExistingNever); + BKE_id_rename(*state->main, duplicate_mesh->id, name, IDNewNameMode::RenameExistingNever); + } + duplicate->id.recalc |= ID_RECALC_GEOMETRY; + mesh->id.recalc |= ID_RECALC_GEOMETRY; + new_object_id = "object:" + id_name(duplicate->id); + return true; +} + +bool web_engine_blend_main_apply_transform(WebBlendMainState *state, + const char *object_id, + std::string &error) +{ + Object *object = find_object(state != nullptr ? state->main : nullptr, object_id); + Mesh *mesh = object != nullptr && object->type == OB_MESH ? reinterpret_cast(object->data) : nullptr; + if (!ensure_editable(object, mesh != nullptr ? &mesh->id : nullptr, error)) return false; + if (mesh->id.us > 1) { + error = "SHARED_MESH_MUTATION_BLOCKED: make mesh data single-user before applying transforms"; + return false; + } + float matrix[4][4]; + BKE_object_to_mat4(object, matrix); + bke::mesh_transform(*mesh, float4x4(matrix), true); + zero_v3(object->loc); + zero_v3(object->rot); + object->quat[0] = 1.0f; + object->quat[1] = object->quat[2] = object->quat[3] = 0.0f; + object->rotAngle = 0.0f; + copy_v3_fl(object->scale, 1.0f); + mesh->id.recalc |= ID_RECALC_GEOMETRY; + object->id.recalc |= ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY; + return true; +} + +bool web_engine_blend_main_set_origin(WebBlendMainState *state, + const char *object_id, + const char *mode, + std::string &error) +{ + if (mode != nullptr && strcmp(mode, "WORLD") == 0) return web_engine_blend_main_apply_transform(state, object_id, error); + Object *object = find_object(state != nullptr ? state->main : nullptr, object_id); + Mesh *mesh = object != nullptr && object->type == OB_MESH ? reinterpret_cast(object->data) : nullptr; + if (!ensure_editable(object, mesh != nullptr ? &mesh->id : nullptr, error) || mesh->vert_positions().is_empty()) return false; + if (mesh->id.us > 1) { + error = "SHARED_MESH_MUTATION_BLOCKED: make mesh data single-user before changing origin"; + return false; + } + float3 minimum(FLT_MAX), maximum(-FLT_MAX); + for (const float3 &position : mesh->vert_positions()) { + for (int axis = 0; axis < 3; axis++) { + minimum[axis] = std::min(minimum[axis], position[axis]); + maximum[axis] = std::max(maximum[axis], position[axis]); + } + } + const float3 center = (minimum + maximum) * 0.5f; + MutableSpan positions = mesh->vert_positions_for_write(); + for (float3 &position : positions) position -= center; + float basis[3][3], world_offset[3]; + BKE_object_to_mat3(object, basis); + mul_v3_m3v3(world_offset, basis, center); + add_v3_v3(object->loc, world_offset); + mesh->tag_positions_changed(); + mesh->id.recalc |= ID_RECALC_GEOMETRY; + object->id.recalc |= ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY; + return true; +} + +bool web_engine_blend_main_set_curve_control_points(WebBlendMainState *state, + const char *data_id, + const std::vector &control_points, + const std::vector &spline_offsets, + const int resolution, + std::string &error) +{ + Curve *curve = find_curve(state != nullptr ? state->main : nullptr, data_id); + if (curve == nullptr || !ensure_single_user_data(state != nullptr ? state->main : nullptr, &curve->id, error)) { + if (error.empty()) error = "NON_MESH_DATA_UNSUPPORTED: Curve data-block was not found"; + return false; + } + if (control_points.empty() || control_points.size() % 3 != 0 || control_points.size() / 3 > 1000000 || + std::any_of(control_points.begin(), control_points.end(), [](const float value) { + return !std::isfinite(value); + })) + { + error = "NON_MESH_PROPERTY_INVALID: control points must be finite and within the 1M budget"; + return false; + } + const size_t point_count = control_points.size() / 3; + std::vector offsets = spline_offsets; + if (offsets.empty()) offsets = {0, uint32_t(point_count)}; + bool offsets_valid = offsets.size() >= 2 && offsets.front() == 0 && offsets.back() == point_count; + for (size_t index = 1; offsets_valid && index < offsets.size(); index++) { + offsets_valid = offsets[index] >= offsets[index - 1] && offsets[index] <= point_count; + } + if (!offsets_valid) + { + error = "NON_MESH_PROPERTY_INVALID: spline offsets must be monotonic and cover all control points"; + return false; + } + size_t spline_index = 0; + size_t point_index = 0; + for (Nurb *nurb = static_cast(curve->nurb.first); nurb != nullptr; nurb = nurb->next, spline_index++) { + const size_t expected = size_t(std::max(1, nurb->pntsu)) * size_t(std::max(1, nurb->pntsv)); + if (spline_index + 1 >= offsets.size() || size_t(offsets[spline_index + 1] - offsets[spline_index]) != expected) { + error = "NON_MESH_TOPOLOGY_EDIT_UNSUPPORTED: control point count must preserve existing spline topology"; + return false; + } + if (nurb->bp != nullptr) { + for (size_t point = 0; point < expected; point++) { + BPoint &target = nurb->bp[point]; + const float *source = &control_points[(point_index + point) * 3]; + target.vec[0] = source[0]; + target.vec[1] = source[1]; + target.vec[2] = source[2]; + } + } + else if (nurb->bezt != nullptr) { + for (size_t point = 0; point < expected; point++) { + BezTriple &target = nurb->bezt[point]; + const float *source = &control_points[(point_index + point) * 3]; + const float delta[3] = {source[0] - target.vec[1][0], source[1] - target.vec[1][1], source[2] - target.vec[1][2]}; + for (int handle = 0; handle < 3; handle++) { + for (int axis = 0; axis < 3; axis++) target.vec[handle][axis] += delta[axis]; + } + } + } + else { + error = "NON_MESH_TOPOLOGY_EDIT_UNSUPPORTED: Curve spline has no editable point buffer"; + return false; + } + point_index += expected; + } + if (point_index != point_count || spline_index + 1 != offsets.size()) { + error = "NON_MESH_TOPOLOGY_EDIT_UNSUPPORTED: all existing splines must be represented"; + return false; + } + if (resolution > 0) curve->resolu = short(std::clamp(resolution, 1, 1024)); + curve->id.recalc |= ID_RECALC_GEOMETRY; + for (Object &object : state->main->objects) { + if (object.data == &curve->id) object.id.recalc |= ID_RECALC_GEOMETRY; + } + return true; +} + +bool web_engine_blend_main_set_curve_handle(WebBlendMainState *state, + const char *data_id, + const uint32_t point_index, + const bool right_handle, + const std::vector &position, + std::string &error) +{ + Curve *curve = find_curve(state != nullptr ? state->main : nullptr, data_id); + if (curve == nullptr || curve->ob_type != OB_CURVES_LEGACY || + !ensure_single_user_data(state != nullptr ? state->main : nullptr, &curve->id, error)) { + if (error.empty()) error = "NON_MESH_DATA_UNSUPPORTED: legacy Curve data-block was not found"; + return false; + } + if (position.size() != 3 || + std::any_of(position.begin(), position.end(), [](const float value) { return !std::isfinite(value); })) { + error = "NON_MESH_PROPERTY_INVALID: Curve handle position must contain finite XYZ coordinates"; + return false; + } + size_t offset = 0; + for (Nurb *nurb = static_cast(curve->nurb.first); nurb != nullptr; nurb = nurb->next) { + const size_t count = size_t(std::max(1, nurb->pntsu)) * size_t(std::max(1, nurb->pntsv)); + if (size_t(point_index) >= offset + count) { + offset += count; + continue; + } + if (nurb->bezt == nullptr || nurb->pntsv != 1) { + error = "NON_MESH_TOPOLOGY_EDIT_UNSUPPORTED: selected Curve point is not a one-dimensional Bezier point"; + return false; + } + BezTriple &target = nurb->bezt[size_t(point_index) - offset]; + copy_v3_v3(target.vec[right_handle ? 2 : 0], position.data()); + if (right_handle) target.h2 = HD_FREE; + else target.h1 = HD_FREE; + curve->id.recalc |= ID_RECALC_GEOMETRY; + for (Object &object : state->main->objects) { + if (object.data == &curve->id) object.id.recalc |= ID_RECALC_GEOMETRY; + } + return true; + } + error = "NON_MESH_PROPERTY_INVALID: Curve handle point index is outside the current topology"; + return false; +} + +bool web_engine_blend_main_set_curve_topology(WebBlendMainState *state, + const char *data_id, + const WebCurveTopologyEdit &edit, + std::string &error) +{ + Curve *curve = find_curve(state != nullptr ? state->main : nullptr, data_id); + if (curve == nullptr || !ensure_single_user_data(state != nullptr ? state->main : nullptr, &curve->id, error)) { + if (error.empty()) error = "NON_MESH_DATA_UNSUPPORTED: Curve data-block was not found"; + return false; + } + const size_t spline_count = BLI_listbase_count(&curve->nurb); + for (const std::vector *values : {&edit.cyclic_u, &edit.cyclic_v}) { + if (!values->empty() && values->size() != spline_count) { + error = "NON_MESH_PROPERTY_INVALID: cyclic flags must match the spline count"; + return false; + } + } + if (!edit.spline_types.empty() && edit.spline_types.size() != spline_count) { + error = "NON_MESH_PROPERTY_INVALID: spline types must match the spline count"; + return false; + } + size_t bezier_count = 0; + size_t type_index = 0; + for (Nurb *nurb = static_cast(curve->nurb.first); nurb != nullptr; nurb = nurb->next, type_index++) { + const int desired_type = edit.spline_types.empty() ? int(nurb->type) : edit.spline_types[type_index]; + if (desired_type != int(CU_POLY) && desired_type != int(CU_BEZIER) && desired_type != int(CU_NURBS)) { + error = "NON_MESH_PROPERTY_INVALID: spline type is outside the supported Blender enum range"; + return false; + } + if (desired_type != int(nurb->type) && nurb->pntsv != 1) { + error = "NON_MESH_TOPOLOGY_EDIT_UNSUPPORTED: spline conversion requires pntsv=1; Surface topology must be preserved"; + return false; + } + if (desired_type == int(CU_BEZIER)) bezier_count += size_t(std::max(0, nurb->pntsu)); + } + if (!edit.handle_types.empty() && edit.handle_types.size() != bezier_count * 2) { + error = "NON_MESH_PROPERTY_INVALID: handle types must contain two entries per Bezier point"; + return false; + } + if (!edit.handle_points.empty() && edit.handle_points.size() != bezier_count * 6) { + error = "NON_MESH_PROPERTY_INVALID: handle points must contain two XYZ handles per Bezier point"; + return false; + } + if (std::any_of(edit.handle_points.begin(), edit.handle_points.end(), [](const float value) { return !std::isfinite(value); })) { + error = "NON_MESH_PROPERTY_INVALID: handle points must be finite"; + return false; + } + for (const int value : edit.handle_types) { + if (value < int(HD_FREE) || value > int(HD_ALIGN_DOUBLESIDE)) { + error = "NON_MESH_PROPERTY_INVALID: handle type is outside the Blender enum range"; + return false; + } + } + + size_t spline_index = 0; + size_t handle_index = 0; + size_t handle_point_index = 0; + for (Nurb *nurb = static_cast(curve->nurb.first); nurb != nullptr; nurb = nurb->next, spline_index++) { + if (!edit.spline_types.empty()) { + const int expected_type = edit.spline_types[spline_index] == int(CU_POLY) || edit.spline_types[spline_index] == int(CU_BEZIER) || edit.spline_types[spline_index] == int(CU_NURBS) ? edit.spline_types[spline_index] : -1; + if (expected_type < 0 || int(nurb->type) != expected_type) { + if (expected_type < 0 || nurb->pntsv != 1) { + error = "NON_MESH_TOPOLOGY_EDIT_UNSUPPORTED: spline conversion requires a one-dimensional spline"; + return false; + } + if (expected_type == int(CU_BEZIER)) { + BezTriple *bezt = MEM_new_array_zeroed(size_t(nurb->pntsu), "Web Curve Bezier conversion"); + for (int point = 0; point < nurb->pntsu; point++) { + copy_v3_v3(bezt[point].vec[0], nurb->bp[point].vec); + copy_v3_v3(bezt[point].vec[1], nurb->bp[point].vec); + copy_v3_v3(bezt[point].vec[2], nurb->bp[point].vec); + bezt[point].tilt = nurb->bp[point].tilt; + bezt[point].radius = nurb->bp[point].radius; + bezt[point].h1 = bezt[point].h2 = HD_AUTO; + } + MEM_delete(nurb->bp); + nurb->bp = nullptr; + nurb->bezt = bezt; + if (nurb->knotsu != nullptr) MEM_delete(nurb->knotsu); + if (nurb->knotsv != nullptr) MEM_delete(nurb->knotsv); + nurb->knotsu = nurb->knotsv = nullptr; + nurb->orderu = nurb->orderv = 0; + nurb->type = CU_BEZIER; + } + else { + if (nurb->bp == nullptr) { + BPoint *bp = MEM_new_array_zeroed(size_t(nurb->pntsu), "Web Curve point conversion"); + for (int point = 0; point < nurb->pntsu; point++) { + copy_v3_v3(bp[point].vec, nurb->bezt[point].vec[1]); + bp[point].vec[3] = 1.0f; + bp[point].tilt = nurb->bezt[point].tilt; + bp[point].weight = nurb->bezt[point].weight; + bp[point].radius = nurb->bezt[point].radius; + } + MEM_delete(nurb->bezt); + nurb->bezt = nullptr; + nurb->bp = bp; + } + if (nurb->knotsu != nullptr) MEM_delete(nurb->knotsu); + if (nurb->knotsv != nullptr) MEM_delete(nurb->knotsv); + nurb->knotsu = nurb->knotsv = nullptr; + nurb->type = eNurbType(expected_type); + if (expected_type == int(CU_NURBS)) { + nurb->orderu = short(std::clamp(nurb->pntsu, 2, 4)); + nurb->orderv = 0; + nurb->flagu |= CU_NURB_ENDPOINT; + } + else { + nurb->orderu = nurb->orderv = 0; + nurb->flagu &= ~(CU_NURB_ENDPOINT | CU_NURB_BEZIER); + } + } + } + } + if (!edit.cyclic_u.empty()) { + if (edit.cyclic_u[spline_index]) nurb->flagu |= CU_NURB_CYCLIC; + else nurb->flagu &= ~CU_NURB_CYCLIC; + } + if (!edit.cyclic_v.empty()) { + if (edit.cyclic_v[spline_index]) nurb->flagv |= CU_NURB_CYCLIC; + else nurb->flagv &= ~CU_NURB_CYCLIC; + } + if (nurb->bezt != nullptr) { + for (int point = 0; point < std::max(0, nurb->pntsu); point++) { + if (!edit.handle_points.empty()) { + copy_v3_v3(nurb->bezt[point].vec[0], &edit.handle_points[handle_point_index]); + copy_v3_v3(nurb->bezt[point].vec[2], &edit.handle_points[handle_point_index + 3]); + handle_point_index += 6; + } + if (!edit.handle_types.empty()) { + nurb->bezt[point].h1 = eBezTriple_Handle(edit.handle_types[handle_index++]); + nurb->bezt[point].h2 = eBezTriple_Handle(edit.handle_types[handle_index++]); + } + } + if (!edit.handle_types.empty() && edit.handle_points.empty()) BKE_nurb_handles_autocalc(nurb, eBezTriple_Flag{}); + } + if (nurb->type == CU_NURBS) { + if (nurb->knotsu != nullptr) MEM_delete(nurb->knotsu); + nurb->knotsu = nullptr; + BKE_nurb_knot_calc_u(nurb); + } + } + curve->id.recalc |= ID_RECALC_GEOMETRY; + for (Object &object : state->main->objects) { + if (object.data == &curve->id) object.id.recalc |= ID_RECALC_GEOMETRY; + } + return true; +} + +bool web_engine_blend_main_set_curve_splines( + WebBlendMainState *state, + const char *data_id, + const std::vector &splines, + const std::vector &control_points, + const std::vector &point_weights, + const std::vector &handle_types, + const std::vector &handle_points, + std::string &error) +{ + Curve *curve = find_curve(state != nullptr ? state->main : nullptr, data_id); + if (curve == nullptr || curve->ob_type != OB_CURVES_LEGACY || + !ensure_single_user_data(state != nullptr ? state->main : nullptr, &curve->id, error)) + { + if (error.empty()) error = "NON_MESH_DATA_UNSUPPORTED: legacy Curve data-block was not found"; + return false; + } + if (splines.empty() || splines.size() > 1000000) { + error = "NON_MESH_PROPERTY_INVALID: Curve transaction requires bounded splines"; + return false; + } + size_t point_count = 0; + size_t bezier_point_count = 0; + for (const WebCurveSplineEdit &spline : splines) { + if ((spline.type != int(CU_POLY) && spline.type != int(CU_BEZIER) && + spline.type != int(CU_NURBS)) || + spline.point_count < 2 || spline.point_count > 1000000 || + (spline.type == int(CU_NURBS) ? + spline.order_u < 2 || spline.order_u > std::min(6, spline.point_count) : + spline.order_u != 0)) + { + error = "NON_MESH_PROPERTY_INVALID: Curve spline descriptor is outside the bounded range"; + return false; + } + point_count += size_t(spline.point_count); + if (point_count > 1000000) { + error = "NON_MESH_DATA_BUDGET_EXCEEDED: Curve transaction exceeds the 1M point budget"; + return false; + } + if (spline.type == int(CU_BEZIER)) bezier_point_count += size_t(spline.point_count); + } + if (control_points.size() != point_count * 3 || point_weights.size() != point_count || + handle_types.size() != bezier_point_count * 2 || + handle_points.size() != bezier_point_count * 6 || + std::any_of(control_points.begin(), control_points.end(), [](const float value) { + return !std::isfinite(value); + }) || + std::any_of(point_weights.begin(), point_weights.end(), [](const float value) { + return !std::isfinite(value) || value <= 0.0f || value > 1000000.0f; + }) || + std::any_of(handle_points.begin(), handle_points.end(), [](const float value) { + return !std::isfinite(value); + })) + { + error = "NON_MESH_PROPERTY_INVALID: Curve points, weights, or handles do not match the transaction"; + return false; + } + for (const int value : handle_types) { + if (value < int(HD_FREE) || value > int(HD_ALIGN_DOUBLESIDE)) { + error = "NON_MESH_PROPERTY_INVALID: Curve handle type is outside the Blender enum range"; + return false; + } + } + + ListBaseT replacements{}; + size_t point_offset = 0; + size_t handle_offset = 0; + size_t handle_point_offset = 0; + for (const WebCurveSplineEdit &edit : splines) { + Nurb *nurb = MEM_new("Web Curve spline transaction"); + nurb->type = eNurbType(edit.type); + nurb->pntsu = edit.point_count; + nurb->pntsv = 1; + nurb->resolu = nurb->resolv = short(std::clamp(int(curve->resolu), 1, 1024)); + if (edit.cyclic_u) nurb->flagu = eNurbKnotFlag(int(nurb->flagu) | CU_NURB_CYCLIC); + if (edit.type == int(CU_BEZIER)) { + nurb->bezt = MEM_new_array_zeroed(size_t(edit.point_count), + "Web Curve Bezier points"); + for (int point = 0; point < edit.point_count; point++) { + BezTriple &target = nurb->bezt[point]; + copy_v3_v3(target.vec[1], &control_points[(point_offset + size_t(point)) * 3]); + copy_v3_v3(target.vec[0], &handle_points[handle_point_offset]); + copy_v3_v3(target.vec[2], &handle_points[handle_point_offset + 3]); + target.h1 = eBezTriple_Handle(handle_types[handle_offset]); + target.h2 = eBezTriple_Handle(handle_types[handle_offset + 1]); + target.radius = 1.0f; + target.weight = point_weights[point_offset + size_t(point)]; + handle_offset += 2; + handle_point_offset += 6; + } + } + else { + nurb->bp = MEM_new_array_zeroed(size_t(edit.point_count), "Web Curve points"); + for (int point = 0; point < edit.point_count; point++) { + BPoint &target = nurb->bp[point]; + copy_v3_v3(target.vec, &control_points[(point_offset + size_t(point)) * 3]); + target.vec[3] = point_weights[point_offset + size_t(point)]; + target.radius = 1.0f; + target.weight = 1.0f; + } + if (edit.type == int(CU_NURBS)) { + nurb->orderu = short(edit.order_u); + nurb->flagu = eNurbKnotFlag(int(nurb->flagu) | CU_NURB_ENDPOINT); + BKE_nurb_order_clamp_u(nurb); + BKE_nurb_knot_calc_u(nurb); + if (!BKE_nurb_check_valid_u(nurb) || nurb->knotsu == nullptr) { + BKE_nurb_free(nurb); + BKE_nurbList_free(&replacements); + error = "NON_MESH_PROPERTY_INVALID: Curve NURBS spline is not evaluable"; + return false; + } + } + } + BLI_addtail(&replacements, nurb); + point_offset += size_t(edit.point_count); + } + + ListBaseT previous = curve->nurb; + curve->nurb = replacements; + replacements.clear_no_delete(); + BKE_nurbList_free(&previous); + curve->id.recalc |= ID_RECALC_GEOMETRY; + for (Object &object : state->main->objects) { + if (object.data == &curve->id) object.id.recalc |= ID_RECALC_GEOMETRY; + } + return true; +} + +bool web_engine_blend_main_set_surface_topology( + WebBlendMainState *state, + const char *data_id, + const std::vector &splines, + const std::vector &control_points, + const std::vector &point_weights, + std::string &error) +{ + Curve *curve = find_curve(state != nullptr ? state->main : nullptr, data_id); + if (curve == nullptr || curve->ob_type != OB_SURF || + !ensure_single_user_data(state != nullptr ? state->main : nullptr, &curve->id, error)) + { + if (error.empty()) error = "NON_MESH_DATA_UNSUPPORTED: Surface data-block was not found"; + return false; + } + if (splines.empty() || splines.size() != size_t(BLI_listbase_count(&curve->nurb))) { + error = "NON_MESH_PROPERTY_INVALID: Surface topology must preserve and cover all splines"; + return false; + } + size_t point_count = 0; + for (const WebSurfaceSplineEdit &spline : splines) { + if (spline.u < 2 || spline.v < 2 || spline.order_u < 2 || spline.order_v < 2 || + spline.order_u > spline.u || spline.order_v > spline.v || spline.u > 1000000 / spline.v) + { + error = "NON_MESH_PROPERTY_INVALID: Surface dimensions and orders are outside the bounded NURBS range"; + return false; + } + point_count += size_t(spline.u) * size_t(spline.v); + if (point_count > 1000000) { + error = "NON_MESH_DATA_BUDGET_EXCEEDED: Surface control grid exceeds the 1M point budget"; + return false; + } + } + if (control_points.size() != point_count * 3 || point_weights.size() != point_count || + std::any_of(control_points.begin(), control_points.end(), [](const float value) { return !std::isfinite(value); }) || + std::any_of(point_weights.begin(), point_weights.end(), [](const float value) { + return !std::isfinite(value) || value <= 0.0f || value > 1000000.0f; + })) + { + error = "NON_MESH_PROPERTY_INVALID: Surface points and rational weights do not match the control grid"; + return false; + } + + struct SurfaceReplacement { + BPoint *points = nullptr; + float *knots_u = nullptr; + float *knots_v = nullptr; + int u = 0; + int v = 0; + short order_u = 0; + short order_v = 0; + eNurbKnotFlag flag_u = eNurbKnotFlag{}; + eNurbKnotFlag flag_v = eNurbKnotFlag{}; + }; + std::vector replacements; + replacements.reserve(splines.size()); + const auto release_replacements = [&]() { + for (SurfaceReplacement &replacement : replacements) { + if (replacement.points != nullptr) MEM_delete(replacement.points); + if (replacement.knots_u != nullptr) MEM_delete(replacement.knots_u); + if (replacement.knots_v != nullptr) MEM_delete(replacement.knots_v); + } + }; + size_t point_offset = 0; + size_t spline_index = 0; + for (Nurb *source = static_cast(curve->nurb.first); source != nullptr; + source = source->next, spline_index++) + { + if (source->type != CU_NURBS || source->bezt != nullptr) { + release_replacements(); + error = "NON_MESH_TOPOLOGY_EDIT_UNSUPPORTED: Surface topology replacement requires NURBS BPoint splines"; + return false; + } + const WebSurfaceSplineEdit &edit = splines[spline_index]; + const size_t count = size_t(edit.u) * size_t(edit.v); + SurfaceReplacement replacement; + replacement.points = MEM_new_array_zeroed(count, "Web Surface control grid"); + replacement.u = edit.u; + replacement.v = edit.v; + replacement.order_u = short(edit.order_u); + replacement.order_v = short(edit.order_v); + replacement.flag_u = eNurbKnotFlag((int(source->flagu) & ~CU_NURB_CYCLIC) | + (edit.cyclic_u ? CU_NURB_CYCLIC : 0)); + replacement.flag_v = eNurbKnotFlag((int(source->flagv) & ~CU_NURB_CYCLIC) | + (edit.cyclic_v ? CU_NURB_CYCLIC : 0)); + for (size_t point = 0; point < count; point++) { + BPoint &target = replacement.points[point]; + copy_v3_v3(target.vec, &control_points[(point_offset + point) * 3]); + target.vec[3] = point_weights[point_offset + point]; + target.radius = 1.0f; + target.weight = 1.0f; + } + Nurb candidate{}; + candidate.type = CU_NURBS; + candidate.mat_nr = source->mat_nr; + candidate.flag = source->flag; + candidate.resolu = source->resolu; + candidate.resolv = source->resolv; + candidate.tilt_interp = source->tilt_interp; + candidate.radius_interp = source->radius_interp; + candidate.pntsu = replacement.u; + candidate.pntsv = replacement.v; + candidate.orderu = replacement.order_u; + candidate.orderv = replacement.order_v; + candidate.flagu = replacement.flag_u; + candidate.flagv = replacement.flag_v; + candidate.bp = replacement.points; + candidate.bezt = nullptr; + candidate.knotsu = candidate.knotsv = nullptr; + BKE_nurb_order_clamp_u(&candidate); + BKE_nurb_order_clamp_v(&candidate); + BKE_nurb_knot_calc_u(&candidate); + BKE_nurb_knot_calc_v(&candidate); + if (!BKE_nurb_check_valid_uv(&candidate) || candidate.knotsu == nullptr || candidate.knotsv == nullptr) { + replacement.knots_u = candidate.knotsu; + replacement.knots_v = candidate.knotsv; + replacements.push_back(replacement); + release_replacements(); + error = "NON_MESH_PROPERTY_INVALID: Surface NURBS grid is not evaluable"; + return false; + } + replacement.order_u = candidate.orderu; + replacement.order_v = candidate.orderv; + replacement.knots_u = candidate.knotsu; + replacement.knots_v = candidate.knotsv; + replacements.push_back(replacement); + point_offset += count; + } + + spline_index = 0; + for (Nurb *target = static_cast(curve->nurb.first); target != nullptr; + target = target->next, spline_index++) + { + SurfaceReplacement &replacement = replacements[spline_index]; + if (target->bp != nullptr) MEM_delete(target->bp); + if (target->knotsu != nullptr) MEM_delete(target->knotsu); + if (target->knotsv != nullptr) MEM_delete(target->knotsv); + target->bp = replacement.points; + target->bezt = nullptr; + target->knotsu = replacement.knots_u; + target->knotsv = replacement.knots_v; + target->pntsu = replacement.u; + target->pntsv = replacement.v; + target->orderu = replacement.order_u; + target->orderv = replacement.order_v; + target->flagu = replacement.flag_u; + target->flagv = replacement.flag_v; + replacement.points = nullptr; + replacement.knots_u = replacement.knots_v = nullptr; + } + curve->id.recalc |= ID_RECALC_GEOMETRY; + for (Object &object : state->main->objects) { + if (object.data == &curve->id) object.id.recalc |= ID_RECALC_GEOMETRY; + } + return true; +} + +bool web_engine_blend_main_set_font_body(WebBlendMainState *state, + const char *data_id, + const char *body, + std::string &error) +{ + Curve *curve = find_curve(state != nullptr ? state->main : nullptr, data_id); + if (curve == nullptr || body == nullptr || !ensure_single_user_data(state != nullptr ? state->main : nullptr, &curve->id, error)) { + if (error.empty()) error = "NON_MESH_DATA_UNSUPPORTED: Font data-block was not found"; + return false; + } + const size_t byte_length = strlen(body); + if (curve->ob_type != OB_FONT || byte_length > 4096) { + error = "NON_MESH_PROPERTY_INVALID: Font body requires a FONT data-block and at most 4096 bytes"; + return false; + } + char *replacement = MEM_new_array_uninitialized(byte_length + 1, "Web Font body"); + memcpy(replacement, body, byte_length + 1); + if (curve->str != nullptr) MEM_delete(curve->str); + curve->str = replacement; + curve->len = int(byte_length); + curve->len_char32 = int(BLI_strlen_utf8(curve->str)); + if (curve->strinfo != nullptr) MEM_delete(curve->strinfo); + curve->strinfo = MEM_new_array(size_t(curve->len_char32 + 1), "Web Font char info"); + curve->id.recalc |= ID_RECALC_GEOMETRY; + for (Object &object : state->main->objects) { + if (object.data == &curve->id) object.id.recalc |= ID_RECALC_GEOMETRY; + } + return true; +} + +bool web_engine_blend_main_set_font_properties(WebBlendMainState *state, + const char *data_id, + const WebFontPropertiesEdit &properties, + std::string &error) +{ + Curve *curve = find_curve(state != nullptr ? state->main : nullptr, data_id); + if (curve == nullptr || curve->ob_type != OB_FONT || + !ensure_single_user_data(state != nullptr ? state->main : nullptr, &curve->id, error)) { + if (error.empty()) error = "NON_MESH_DATA_UNSUPPORTED: Font data-block was not found"; + return false; + } + if ((!properties.alignment.empty() && properties.alignment != "LEFT" && properties.alignment != "CENTER" && + properties.alignment != "RIGHT" && properties.alignment != "JUSTIFY" && properties.alignment != "FLUSH") || + (!properties.align_y.empty() && properties.align_y != "TOP_BASELINE" && properties.align_y != "TOP" && + properties.align_y != "CENTER" && properties.align_y != "BOTTOM_BASELINE" && properties.align_y != "BOTTOM")) { + error = "NON_MESH_PROPERTY_INVALID: Font alignment is invalid"; + return false; + } + if ((properties.extrude != -1.0f && + (!std::isfinite(properties.extrude) || properties.extrude < 0.0f)) || + (properties.bevel_depth != -1.0f && + (!std::isfinite(properties.bevel_depth) || properties.bevel_depth < 0.0f)) || + (properties.offset != -1.0f && + (!std::isfinite(properties.offset) || properties.offset < 0.0f)) || + properties.extrude > 1000.0f || properties.bevel_depth > 1000.0f || properties.offset > 1000.0f || + (properties.bevel_resolution != -1 && + (properties.bevel_resolution < 0 || properties.bevel_resolution > 64)) || + (properties.spacing != -1.0f && (!std::isfinite(properties.spacing) || properties.spacing < 0.0f || properties.spacing > 10.0f)) || + (properties.line_distance != -1.0f && (!std::isfinite(properties.line_distance) || properties.line_distance < 0.0f || properties.line_distance > 10.0f)) || + (properties.word_space != -1.0f && (!std::isfinite(properties.word_space) || properties.word_space < 0.0f || properties.word_space > 100.0f)) || + (properties.shear != -11.0f && (!std::isfinite(properties.shear) || properties.shear < -10.0f || properties.shear > 10.0f)) || + (properties.font_size != -1.0f && (!std::isfinite(properties.font_size) || properties.font_size < 0.001f || properties.font_size > 1000.0f)) || + (properties.offset_x != -100001.0f && (!std::isfinite(properties.offset_x) || properties.offset_x < -100000.0f || properties.offset_x > 100000.0f)) || + (properties.offset_y != -100001.0f && (!std::isfinite(properties.offset_y) || properties.offset_y < -100000.0f || properties.offset_y > 100000.0f))) { + error = "NON_MESH_PROPERTY_INVALID: Font geometry properties are outside the bounded range"; + return false; + } + if (!properties.alignment.empty()) { + curve->spacemode = properties.alignment == "LEFT" ? CU_ALIGN_X_LEFT : properties.alignment == "CENTER" ? CU_ALIGN_X_MIDDLE : + properties.alignment == "RIGHT" ? CU_ALIGN_X_RIGHT : properties.alignment == "JUSTIFY" ? CU_ALIGN_X_JUSTIFY : CU_ALIGN_X_FLUSH; + } + if (!properties.align_y.empty()) { + curve->align_y = properties.align_y == "TOP_BASELINE" ? CU_ALIGN_Y_TOP_BASELINE : properties.align_y == "TOP" ? CU_ALIGN_Y_TOP : + properties.align_y == "CENTER" ? CU_ALIGN_Y_CENTER : properties.align_y == "BOTTOM_BASELINE" ? CU_ALIGN_Y_BOTTOM_BASELINE : CU_ALIGN_Y_BOTTOM; + } + if (properties.extrude >= 0.0f) curve->extrude = properties.extrude; + if (properties.bevel_depth >= 0.0f) curve->bevel_radius = properties.bevel_depth; + if (properties.bevel_resolution >= 0) curve->bevresol = short(properties.bevel_resolution); + if (properties.offset >= 0.0f) curve->offset = properties.offset; + if (properties.spacing >= 0.0f) curve->spacing = properties.spacing; + if (properties.line_distance >= 0.0f) curve->linedist = properties.line_distance; + if (properties.word_space >= 0.0f) curve->wordspace = properties.word_space; + if (properties.shear >= -10.0f) curve->shear = properties.shear; + if (properties.font_size >= 0.001f) curve->fsize = properties.font_size; + if (properties.offset_x >= -100000.0f) curve->xof = properties.offset_x; + if (properties.offset_y >= -100000.0f) curve->yof = properties.offset_y; + curve->id.recalc |= ID_RECALC_GEOMETRY; + for (Object &object : state->main->objects) { + if (object.data == &curve->id) object.id.recalc |= ID_RECALC_GEOMETRY; + } + return true; +} + +bool web_engine_blend_main_set_font_advanced( + WebBlendMainState *state, + const char *data_id, + const std::vector &characters, + const std::vector &text_boxes, + const int active_text_box, + std::string &error) +{ + Curve *curve = find_curve(state != nullptr ? state->main : nullptr, data_id); + if (curve == nullptr || curve->ob_type != OB_FONT || + !ensure_single_user_data(state != nullptr ? state->main : nullptr, &curve->id, error)) + { + if (error.empty()) error = "NON_MESH_DATA_UNSUPPORTED: Font data-block was not found"; + return false; + } + if (characters.size() != size_t(std::max(0, curve->len_char32)) || + text_boxes.empty() || text_boxes.size() > 256 || active_text_box < 0 || + active_text_box >= int(text_boxes.size())) + { + error = "NON_MESH_PROPERTY_INVALID: Font advanced arrays do not match the text or text box bounds"; + return false; + } + for (const WebFontCharacterEdit &character : characters) { + if (!std::isfinite(character.kern) || character.kern < -1000.0f || + character.kern > 1000.0f || character.material_index < 0 || + character.material_index > 32767 || character.style_flags < 0 || + (character.style_flags & ~0x17) != 0) + { + error = "NON_MESH_PROPERTY_INVALID: Font character values are outside the bounded range"; + return false; + } + } + for (const WebFontTextBoxEdit &text_box : text_boxes) { + if (!std::isfinite(text_box.x) || !std::isfinite(text_box.y) || + !std::isfinite(text_box.width) || !std::isfinite(text_box.height) || + text_box.x < -100000.0f || text_box.x > 100000.0f || + text_box.y < -100000.0f || text_box.y > 100000.0f || + text_box.width < 0.0f || text_box.width > 100000.0f || + text_box.height < 0.0f || text_box.height > 100000.0f) + { + error = "NON_MESH_PROPERTY_INVALID: Font text box values are outside the bounded range"; + return false; + } + } + CharInfo *replacement_characters = MEM_new_array( + size_t(curve->len_char32 + 1), "Web Font advanced char info"); + for (size_t index = 0; index < characters.size(); index++) { + replacement_characters[index].kern = characters[index].kern; + replacement_characters[index].mat_nr = short(characters[index].material_index); + replacement_characters[index].flag = eCharInfoFlag(characters[index].style_flags); + } + TextBox *replacement_boxes = MEM_new_array(text_boxes.size(), + "Web Font text boxes"); + for (size_t index = 0; index < text_boxes.size(); index++) { + replacement_boxes[index].x = text_boxes[index].x; + replacement_boxes[index].y = text_boxes[index].y; + replacement_boxes[index].w = text_boxes[index].width; + replacement_boxes[index].h = text_boxes[index].height; + } + if (curve->strinfo != nullptr) MEM_delete(curve->strinfo); + if (curve->tb != nullptr) MEM_delete(curve->tb); + curve->strinfo = replacement_characters; + curve->tb = replacement_boxes; + curve->totbox = int(text_boxes.size()); + curve->actbox = active_text_box + 1; + curve->id.recalc |= ID_RECALC_GEOMETRY; + for (Object &object : state->main->objects) { + if (object.data == &curve->id) object.id.recalc |= ID_RECALC_GEOMETRY; + } + return true; +} + +bool web_engine_blend_main_import_vfont(WebBlendMainState *state, + const char *name, + const char *source_path, + const char *base64, + std::string &font_id, + std::string &error) +{ + if (state == nullptr || state->main == nullptr || name == nullptr || source_path == nullptr || + base64 == nullptr || name[0] == '\0' || strlen(name) > 63 || strlen(source_path) >= FILE_MAX || + strncmp(source_path, "//fonts/", 8) != 0 || strstr(source_path, "\\") != nullptr || + strstr(source_path, "/../") != nullptr || strstr(source_path, "/./") != nullptr) + { + error = "NON_MESH_RESOURCE_OUTSIDE_PROJECT: VFont source must be a bounded //fonts project path"; + return false; + } + for (const VFont &existing : state->main->fonts) { + if (STREQ(existing.filepath, source_path)) { + error = "NON_MESH_PROPERTY_INVALID: A VFont with the same project source path already exists"; + return false; + } + } + const std::vector decoded = decode_base64(base64); + if (decoded.empty() || decoded.size() > 32 * 1024 * 1024) { + error = "NON_MESH_DATA_BUDGET_EXCEEDED: VFont payload is empty or exceeds 32 MiB"; + return false; + } + uint8_t *owned = MEM_new_array_uninitialized(decoded.size(), "WebEngine packed VFont"); + if (owned == nullptr) { + error = "NON_MESH_DATA_BUDGET_EXCEEDED: VFont packed allocation failed"; + return false; + } + memcpy(owned, decoded.data(), decoded.size()); + PackedFile *packed = BKE_packedfile_new_from_memory(owned, int(decoded.size())); + VFont *vfont = static_cast(BKE_libblock_alloc(state->main, ID_VF, name, 0)); + if (packed == nullptr || vfont == nullptr) { + if (packed != nullptr) BKE_packedfile_free(packed); + else MEM_delete(owned); + error = "NON_MESH_BINARY_INVALID: Blender could not allocate the packed VFont"; + return false; + } + STRNCPY(vfont->filepath, source_path); + vfont->packedfile = packed; + BKE_vfont_data_ensure(vfont); + if (vfont->data == nullptr) { + BKE_id_delete(state->main, vfont); + error = "NON_MESH_BINARY_INVALID: Blender rejected the external VFont bytes"; + return false; + } + font_id = "vfont:" + id_name(vfont->id); + return true; +} + +bool web_engine_blend_main_set_font_links(WebBlendMainState *state, + const char *data_id, + const std::array &font_ids, + std::string &error) +{ + Curve *curve = find_curve(state != nullptr ? state->main : nullptr, data_id); + if (curve == nullptr || curve->ob_type != OB_FONT || + !ensure_single_user_data(state != nullptr ? state->main : nullptr, &curve->id, error)) + { + if (error.empty()) error = "NON_MESH_DATA_UNSUPPORTED: Font data-block was not found"; + return false; + } + std::array fonts{}; + for (size_t index = 0; index < font_ids.size(); index++) { + fonts[index] = find_vfont(state->main, font_ids[index].c_str()); + if (fonts[index] == nullptr || fonts[index]->id.lib != nullptr) { + error = "NON_MESH_RESOURCE_MISSING: Font style links must reference local VFonts already present in Main"; + return false; + } + } + std::array targets = {&curve->vfont, &curve->vfontb, &curve->vfonti, &curve->vfontbi}; + for (size_t index = 0; index < targets.size(); index++) { + if (*targets[index] == fonts[index]) continue; + if (*targets[index] != nullptr) id_us_min(&(*targets[index])->id); + *targets[index] = fonts[index]; + id_us_plus(&fonts[index]->id); + } + curve->id.recalc |= ID_RECALC_GEOMETRY; + for (Object &object : state->main->objects) { + if (object.data == &curve->id) object.id.recalc |= ID_RECALC_GEOMETRY; + } + return true; +} + +bool web_engine_blend_main_set_volume_properties(WebBlendMainState *state, + const char *data_id, + const WebVolumePropertiesEdit &properties, + std::string &error) +{ + Volume *volume = find_volume(state != nullptr ? state->main : nullptr, data_id); + if (volume == nullptr || + !ensure_single_user_data(state != nullptr ? state->main : nullptr, &volume->id, error)) + { + if (error.empty()) error = "NON_MESH_DATA_UNSUPPORTED: Volume data-block was not found"; + return false; + } + const std::string &path = properties.source_path; + const bool project_relative = path.size() >= 7 && path.rfind("//", 0) == 0 && + path.compare(path.size() - 4, 4, ".vdb") == 0 && + path.find('\\') == std::string::npos && + path.find("/../") == std::string::npos && + path.compare(path.size() - 3, 3, "/..") != 0 && + path.size() < sizeof(volume->filepath); + if (!project_relative || !std::isfinite(properties.display_density) || + properties.display_density < 0.0f || properties.display_density > 1000000.0f || + (properties.interpolation != "NEAREST" && properties.interpolation != "LINEAR") || + !std::isfinite(properties.step_size) || properties.step_size < 0.0f || + properties.step_size > 1000000.0f || properties.velocity_grid.size() >= sizeof(volume->velocity_grid) || + !std::isfinite(properties.velocity_scale) || properties.velocity_scale < -1000000.0f || + properties.velocity_scale > 1000000.0f) + { + error = "NON_MESH_PROPERTY_INVALID: Volume source and properties are outside the bounded project-relative range"; + return false; + } + BKE_volume_unload(volume); + BLI_strncpy(volume->filepath, path.c_str(), sizeof(volume->filepath)); + volume->display.density = properties.display_density; + volume->display.interpolation_method = properties.interpolation == "NEAREST" ? + VOLUME_DISPLAY_INTERP_CLOSEST : + VOLUME_DISPLAY_INTERP_LINEAR; + volume->render.step_size = properties.step_size; + BLI_strncpy(volume->velocity_grid, + properties.velocity_grid.c_str(), + sizeof(volume->velocity_grid)); + volume->velocity_scale = properties.velocity_scale; + volume->id.recalc |= ID_RECALC_GEOMETRY; + for (Object &object : state->main->objects) { + if (object.data == &volume->id) object.id.recalc |= ID_RECALC_GEOMETRY; + } + return true; +} + +bool web_engine_blend_main_set_metaball_elements(WebBlendMainState *state, + const char *data_id, + const std::vector &elements, + std::string &error) +{ + MetaBall *metaball = find_metaball(state != nullptr ? state->main : nullptr, data_id); + if (metaball == nullptr || !ensure_single_user_data(state != nullptr ? state->main : nullptr, &metaball->id, error)) { + if (error.empty()) error = "NON_MESH_DATA_UNSUPPORTED: Metaball data-block was not found"; + return false; + } + if (elements.empty() || elements.size() > 1000000) { + error = "NON_MESH_PROPERTY_INVALID: Metaball element count is outside the bounded range"; + return false; + } + std::vector targets; + for (MetaElem *element = static_cast(metaball->elems.first); element != nullptr; element = element->next) { + targets.push_back(element); + } + if (targets.size() != elements.size()) { + error = "NON_MESH_TOPOLOGY_EDIT_UNSUPPORTED: changing Metaball element count is not enabled yet"; + return false; + } + for (size_t index = 0; index < elements.size(); index++) { + const WebMetaballElementEdit &source = elements[index]; + if (source.type < 0 || source.type > 7 || !std::isfinite(source.radius) || source.radius <= 0.0f || + std::any_of(source.position.begin(), source.position.end(), [](const float value) { return !std::isfinite(value); }) || + std::any_of(source.scale.begin(), source.scale.end(), [](const float value) { return !std::isfinite(value) || value <= 0.0f; })) + { + error = "NON_MESH_PROPERTY_INVALID: Metaball element values must be finite and positive"; + return false; + } + MetaElem &target = *targets[index]; + target.type = eMetaElem_Type(source.type); + target.x = source.position[0]; + target.y = source.position[1]; + target.z = source.position[2]; + target.rad = source.radius; + target.expx = source.scale[0]; + target.expy = source.scale[1]; + target.expz = source.scale[2]; + } + metaball->id.recalc |= ID_RECALC_GEOMETRY; + for (Object &object : state->main->objects) { + if (object.data == &metaball->id) object.id.recalc |= ID_RECALC_GEOMETRY; + } + return true; +} + +bool web_engine_blend_main_grease_pencils_json(WebBlendMainState *state, + std::string &grease_pencils_json, + std::string &error) +{ + if (state == nullptr || state->main == nullptr) { + error = "GREASE_PENCIL_SCHEMA_INVALID: authoritative Main is not open"; + return false; + } + constexpr uint64_t max_layers = 1024; + constexpr uint64_t max_frames = 100000; + constexpr uint64_t max_strokes = 1000000; + constexpr uint64_t max_points = 1000000; + json grease_pencils = json::array(); + for (const GreasePencil &grease_pencil : state->main->grease_pencils) { + const Span layers = grease_pencil.layers(); + uint64_t frame_count = 0; + uint64_t stroke_count = 0; + uint64_t point_count = 0; + for (const bke::greasepencil::Layer *layer : layers) { + if (layer == nullptr) continue; + for (const auto [frame_number, frame] : layer->frames().items()) { + if (frame.is_end()) continue; + frame_count++; + const bke::greasepencil::Drawing *drawing = grease_pencil.get_drawing_at(*layer, + frame_number); + if (drawing == nullptr) continue; + const bke::CurvesGeometry &curves = drawing->strokes(); + stroke_count += uint64_t(std::max(0, curves.curves_num())); + point_count += uint64_t(std::max(0, curves.points_num())); + } + } + const bool budget_blocked = uint64_t(layers.size()) > max_layers || + frame_count > max_frames || stroke_count > max_strokes || + point_count > max_points; + json data = {{"id", "grease-pencil:" + id_name(grease_pencil.id)}, + {"name", id_name(grease_pencil.id)}, + {"geometryStatus", budget_blocked ? "blocked" : "available"}, + {"layerCount", layers.size()}, + {"frameCount", frame_count}, + {"strokeCount", stroke_count}, + {"pointCount", point_count}, + {"layers", json::array()}, + {"attributes", + json::array({{{"name", "position"}, {"domain", "POINT"}, {"dataType", "FLOAT3"}, {"components", 3}}, + {{"name", "radius"}, {"domain", "POINT"}, {"dataType", "FLOAT"}, {"components", 1}}, + {{"name", "opacity"}, {"domain", "POINT"}, {"dataType", "FLOAT"}, {"components", 1}}, + {{"name", "vertex_color"}, {"domain", "POINT"}, {"dataType", "FLOAT_COLOR"}, {"components", 4}}, + {{"name", "cyclic"}, {"domain", "STROKE"}, {"dataType", "BOOL"}, {"components", 1}}, + {{"name", "material_index"}, {"domain", "STROKE"}, {"dataType", "INT"}, {"components", 1}}})}}; + const bke::greasepencil::Layer *active_layer = grease_pencil.get_active_layer(); + if (active_layer == nullptr) { + for (const bke::greasepencil::Layer *layer : layers) { + if (layer != nullptr) { + active_layer = layer; + break; + } + } + } + if (active_layer != nullptr) { + data["activeLayerId"] = "grease-pencil-layer:" + id_name(grease_pencil.id) + ":" + + std::string(active_layer->name()); + } + if (budget_blocked) { + data["errorCode"] = "GREASE_PENCIL_BUDGET_EXCEEDED"; + grease_pencils.push_back(std::move(data)); + continue; + } + json layer_entries = json::array(); + for (const int layer_index : layers.index_range()) { + const bke::greasepencil::Layer *layer = layers[layer_index]; + if (layer == nullptr) continue; + json frames = json::array(); + for (const auto [frame_number, frame] : layer->frames().items()) { + if (frame.is_end()) continue; + json strokes = json::array(); + uint64_t drawing_point_count = 0; + const std::string drawing_suffix = id_name(grease_pencil.id) + ":" + + std::to_string(frame.drawing_index); + const std::string drawing_id = "grease-pencil-drawing:" + drawing_suffix; + const bke::greasepencil::Drawing *drawing = grease_pencil.get_drawing_at(*layer, + frame_number); + if (drawing != nullptr) { + const bke::CurvesGeometry &curves = drawing->strokes(); + const Span positions = curves.positions(); + const OffsetIndices points_by_curve = curves.points_by_curve(); + const VArray radii = drawing->radii(); + const VArray opacities = drawing->opacities(); + const VArray vertex_colors = drawing->vertex_colors(); + const VArray cyclic = curves.cyclic(); + const VArray material_indices = + curves.attributes() + .lookup_or_default("material_index", bke::AttrDomain::Curve, 0) + .varray; + drawing_point_count = uint64_t(std::max(0, curves.points_num())); + for (const int curve_index : curves.curves_range()) { + json points = json::array(); + const IndexRange point_range = points_by_curve[curve_index]; + for (const int point_index : point_range) { + const float3 &position = positions[point_index]; + const ColorGeometry4f color = vertex_colors[point_index]; + points.push_back({{"id", "grease-pencil-point:" + drawing_suffix + ":" + + std::to_string(curve_index) + ":" + + std::to_string(point_index - point_range.start())}, + {"position", json::array({position.x, position.y, position.z})}, + {"radius", radii[point_index]}, + {"opacity", opacities[point_index]}, + {"vertexColor", json::array({color.r, color.g, color.b, color.a})}}); + } + strokes.push_back({{"id", "grease-pencil-stroke:" + drawing_suffix + ":" + + std::to_string(curve_index)}, + {"cyclic", cyclic[curve_index]}, + {"pointCount", point_range.size()}, + {"points", std::move(points)}, + {"materialIndex", std::max(0, material_indices[curve_index])}}); + } + } + json frame_entry = { + {"frame", frame_number}, + {"drawing", + {{"id", drawing_id}, + {"strokeCount", strokes.size()}, + {"pointCount", drawing_point_count}, + {"strokes", std::move(strokes)}}}}; + const int duration = layer->get_frame_duration_at(frame_number); + if (duration >= 0) frame_entry["duration"] = duration; + frames.push_back(std::move(frame_entry)); + } + layer_entries.push_back({{"id", "grease-pencil-layer:" + id_name(grease_pencil.id) + ":" + + std::string(layer->name())}, + {"name", layer->name()}, + {"visible", layer->is_visible()}, + {"locked", layer->is_locked()}, + {"opacity", std::clamp(layer->opacity, 0.0f, 1.0f)}, + {"onionSkinning", layer->use_onion_skinning()}, + {"frames", std::move(frames)}}); + } + data["layers"] = std::move(layer_entries); + grease_pencils.push_back(std::move(data)); + } + grease_pencils_json = grease_pencils.dump(); + return true; +} + +bool web_engine_blend_main_geometry_node_graphs_json(WebBlendMainState *state, + std::string &geometry_node_graphs_json, + std::string &error) +{ + if (state == nullptr || state->main == nullptr) { + error = "GN_INVALID_GRAPH: authoritative Main is not open"; + return false; + } + constexpr size_t max_graphs = 4096; + constexpr size_t max_nodes_per_graph = 4096; + constexpr size_t max_links_per_graph = 16384; + constexpr size_t max_sockets_per_graph = 65536; + constexpr size_t max_interface_sockets_per_graph = 4096; + json graphs = json::array(); + try { + for (const bNodeTree &tree : state->main->nodetrees) { + if (strcmp(tree.idname, "GeometryNodeTree") != 0) continue; + if (graphs.size() >= max_graphs) { + error = "GN_GRAPH_BUDGET_EXCEEDED: Geometry Node graph count exceeds 4096"; + return false; + } + const size_t node_count = size_t(BLI_listbase_count(&tree.nodes)); + const size_t link_count = size_t(BLI_listbase_count(&tree.links)); + if (node_count > max_nodes_per_graph || link_count > max_links_per_graph || + tree.interface_inputs().size() > max_interface_sockets_per_graph || + tree.interface_outputs().size() > max_interface_sockets_per_graph) + { + error = "GN_GRAPH_BUDGET_EXCEEDED: Geometry Node graph topology exceeds its bounded reader limits"; + return false; + } + + const std::string graph_id = "node-group:" + id_name(tree.id); + json interface_inputs = json::array(); + json interface_outputs = json::array(); + auto append_interface_socket = [&](const bNodeTreeInterfaceSocket &socket, + const char *direction, + json &destination) -> bool { + if (socket.identifier == nullptr || socket.identifier[0] == '\0' || + socket.name == nullptr || socket.socket_type == nullptr) + { + error = "GN_INVALID_GRAPH: Geometry Node interface socket has no stable identifier, name, or type"; + return false; + } + const eNodeSocketDatatype type = geometry_interface_socket_type(socket.socket_type); + json socket_json = { + {"id", std::string("geometry-interface:") + + (strcmp(direction, "INPUT") == 0 ? "input:" : "output:") + + socket.identifier}, + {"name", socket.name}, + {"direction", direction}, + {"dataType", geometry_socket_data_type(type)}}; + if (const std::optional value = geometry_socket_default(type, socket.socket_data)) { + if (!(value->is_string() && value->get_ref().empty())) { + socket_json["defaultValue"] = *value; + } + } + destination.push_back(std::move(socket_json)); + return true; + }; + for (const bNodeTreeInterfaceSocket *socket : tree.interface_inputs()) { + if (socket != nullptr && !append_interface_socket(*socket, "INPUT", interface_inputs)) { + return false; + } + } + for (const bNodeTreeInterfaceSocket *socket : tree.interface_outputs()) { + if (socket != nullptr && !append_interface_socket(*socket, "OUTPUT", interface_outputs)) { + return false; + } + } + + std::vector source_nodes; + source_nodes.reserve(node_count); + for (const bNode &node : tree.nodes) source_nodes.push_back(&node); + std::sort(source_nodes.begin(), source_nodes.end(), [](const bNode *a, const bNode *b) { + return a->identifier < b->identifier; + }); + json nodes = json::array(); + std::unordered_set node_identifiers; + std::unordered_set group_references; + size_t socket_count = 0; + for (const bNode *node : source_nodes) { + if (node == nullptr || node->identifier <= 0 || + !node_identifiers.insert(node->identifier).second || node->idname[0] == '\0') + { + error = "GN_INVALID_GRAPH: Geometry Node has a missing or duplicate stable identifier"; + return false; + } + json sockets = json::array(); + std::unordered_set socket_ids; + auto append_node_sockets = [&](const ListBaseT &source, + const eNodeSocketInOut direction) -> bool { + for (const bNodeSocket &socket : source) { + if (socket.identifier[0] == '\0' || strcmp(socket.identifier, "__extend__") == 0) { + continue; + } + const std::string socket_id = geometry_socket_id(socket, direction); + if (!socket_ids.insert(socket_id).second) { + error = "GN_INVALID_GRAPH: Geometry Node contains duplicate stable socket identifiers"; + return false; + } + socket_count++; + if (socket_count > max_sockets_per_graph) { + error = "GN_GRAPH_BUDGET_EXCEEDED: Geometry Node socket count exceeds 65536"; + return false; + } + sockets.push_back(geometry_socket_json(socket, direction)); + } + return true; + }; + if (!append_node_sockets(node->inputs, SOCK_IN) || + !append_node_sockets(node->outputs, SOCK_OUT)) + { + return false; + } + const std::string node_type = geometry_node_type(*node); + json node_json = {{"id", geometry_node_id(*node)}, + {"type", node_type}, + {"name", node->name[0] != '\0' ? node->name : node_type}, + {"sockets", std::move(sockets)}}; + if (node->id != nullptr && std::string(node->id->name, 2) == "NT") { + const std::string reference = geometry_id_reference(node->id); + node_json["groupTreeId"] = reference; + group_references.insert(reference); + } + nodes.push_back(std::move(node_json)); + } + + std::vector source_links; + source_links.reserve(link_count); + for (const bNodeLink &link : tree.links) { + if (link.fromnode == nullptr || link.tonode == nullptr || link.fromsock == nullptr || + link.tosock == nullptr || strcmp(link.fromsock->identifier, "__extend__") == 0 || + strcmp(link.tosock->identifier, "__extend__") == 0) + { + continue; + } + if (!node_identifiers.contains(link.fromnode->identifier) || + !node_identifiers.contains(link.tonode->identifier)) + { + error = "GN_INVALID_GRAPH: Geometry Node link references a node outside its graph"; + return false; + } + source_links.push_back({{"fromNodeId", geometry_node_id(*link.fromnode)}, + {"fromSocketId", geometry_socket_id(*link.fromsock, SOCK_OUT)}, + {"toNodeId", geometry_node_id(*link.tonode)}, + {"toSocketId", geometry_socket_id(*link.tosock, SOCK_IN)}}); + } + std::sort(source_links.begin(), source_links.end(), [](const json &a, const json &b) { + return std::tie(a.at("fromNodeId"), a.at("fromSocketId"), a.at("toNodeId"), + a.at("toSocketId")) < + std::tie(b.at("fromNodeId"), b.at("fromSocketId"), b.at("toNodeId"), + b.at("toSocketId")); + }); + json links = json::array(); + for (json &link : source_links) links.push_back(std::move(link)); + std::vector references(group_references.begin(), group_references.end()); + std::sort(references.begin(), references.end()); + json graph = {{"schemaVersion", 1}, + {"id", graph_id}, + {"name", id_name(tree.id)}, + {"interfaceInputs", std::move(interface_inputs)}, + {"interfaceOutputs", std::move(interface_outputs)}, + {"nodes", std::move(nodes)}, + {"links", std::move(links)}, + {"groupReferences", std::move(references)}}; + graph["graphHash"] = web_engine_sha256_hex(graph.dump()); + graphs.push_back(std::move(graph)); + } + geometry_node_graphs_json = graphs.dump(); + return true; + } + catch (const std::exception &exception) { + error = std::string("GN_INVALID_GRAPH: Geometry Node Main reader failed: ") + exception.what(); + return false; + } +} + +bool web_engine_blend_main_physics_simulation_json(WebBlendMainState *state, + std::string &physics_json, + std::string &error) +{ + if (state == nullptr || state->main == nullptr) { + error = "PHYSICS_MANIFEST_INVALID: authoritative Main is not open"; + return false; + } +#ifdef WITH_WEB + /* Legacy particle systems are metadata-only in the Web runtime. Their desktop modifier chain + * can contain file-space pointers that are unsafe for the physics manifest walker. */ + for (const Object &object : state->main->objects) { + if (object.particlesystem.first != nullptr) { + physics_json = json({{"schemaVersion", 1}, {"systems", json::array()}}).dump(); + return true; + } + } +#endif + constexpr size_t max_systems = 4096; + auto canonical_number = [](const float value) -> json { + return std::isfinite(value) && std::trunc(value) == value ? json(int64_t(value)) : json(value); + }; + json systems = json::array(); + json collider_ids = json::array(); + for (const Object &object : state->main->objects) { + for (const ModifierData *modifier = static_cast(object.modifiers.first); + modifier != nullptr; + modifier = modifier->next) + { + if (modifier->type == eModifierType_Collision) { + collider_ids.push_back("object:" + id_name(object.id)); + break; + } + } + } + auto append_system = [&](const std::string &id, + const char *family, + const Object &object, + json settings, + json dependencies = json::array()) -> bool { + if (systems.size() >= max_systems) { + error = "PHYSICS_BUDGET_EXCEEDED: Physics system count exceeds the 4096 system budget"; + return false; + } + systems.push_back({{"id", id}, + {"family", family}, + {"ownerObjectId", "object:" + id_name(object.id)}, + {"settingsHash", web_engine_sha256_hex(settings.dump())}, + {"settings", std::move(settings)}, + {"dependencyIds", std::move(dependencies)}}); + return true; + }; + + for (const Object &object : state->main->objects) { + const std::string object_name = id_name(object.id); + if (object.rigidbody_object != nullptr) { + const RigidBodyOb &body = *object.rigidbody_object; + if (!append_system("physics:rigid-body:" + object_name, + "RIGID_BODY", + object, + {{"type", int(body.type)}, + {"shape", int(body.shape)}, + {"flags", int(body.flag)}, + {"mass", canonical_number(body.mass)}, + {"friction", canonical_number(body.friction)}, + {"restitution", canonical_number(body.restitution)}, + {"margin", canonical_number(body.margin)}, + {"linearDamping", canonical_number(body.lin_damping)}, + {"angularDamping", canonical_number(body.ang_damping)}})) return false; + } + if (object.soft != nullptr) { + const SoftBody &soft = *object.soft; + if (!append_system("physics:soft-body:" + object_name, + "SOFT_BODY", + object, + {{"nodeMass", canonical_number(soft.nodemass)}, + {"gravity", canonical_number(soft.grav)}, + {"mediaFriction", canonical_number(soft.mediafrict)}, + {"physicsSpeed", canonical_number(soft.physics_speed)}, + {"goalSpring", canonical_number(soft.goalspring)}, + {"goalFriction", canonical_number(soft.goalfrict)}, + {"solverFlags", int(soft.solverflags)}}, + collider_ids)) return false; + } + for (const ModifierData *modifier = static_cast(object.modifiers.first); + modifier != nullptr; + modifier = modifier->next) + { + const std::string suffix = object_name + ":" + std::to_string(modifier->persistent_uid); + json settings = {{"name", modifier->name}, + {"persistentUid", modifier->persistent_uid}, + {"enabled", bool(modifier->mode & eModifierMode_Realtime)}, + {"showRender", bool(modifier->mode & eModifierMode_Render)}}; + if (modifier->type == eModifierType_Cloth) { + if (!append_system("physics:cloth:" + suffix, "CLOTH", object, std::move(settings), collider_ids)) return false; + } + else if (modifier->type == eModifierType_Fluid) { + const FluidModifierData &fluid = *reinterpret_cast(modifier); + settings["modifierType"] = int(fluid.type); + if (!append_system("physics:fluid:" + suffix, "FLUID", object, std::move(settings))) return false; + } + else if (modifier->type == eModifierType_DynamicPaint) { + const DynamicPaintModifierData &paint = *reinterpret_cast(modifier); + settings["modifierType"] = int(paint.type); + if (!append_system("physics:dynamic-paint:" + suffix, "DYNAMIC_PAINT", object, std::move(settings))) return false; + } + else if (modifier->type == eModifierType_ParticleSystem) { + const ParticleSystemModifierData &particle = *reinterpret_cast(modifier); + const bool hair = particle.psys != nullptr && particle.psys->part != nullptr && particle.psys->part->type == PART_HAIR; + if (particle.psys != nullptr) { + settings["seed"] = particle.psys->seed; + settings["particleCount"] = particle.psys->totpart; + if (particle.psys->part != nullptr) { + settings["particleType"] = int(particle.psys->part->type); + settings["physicsType"] = int(particle.psys->part->phystype); + } + } + if (!append_system("physics:" + std::string(hair ? "hair:" : "particle:") + suffix, + hair ? "HAIR" : "PARTICLE", object, std::move(settings))) return false; + } + } + } + physics_json = json({{"schemaVersion", 1}, {"systems", std::move(systems)}}).dump(); + return true; +} + +bool web_engine_blend_main_particle_settings_json(WebBlendMainState *state, + std::string &particle_settings_json, + std::string &error) +{ + if (state == nullptr || state->main == nullptr) { + error = "PARTICLE_SETTINGS_MANIFEST_INVALID: authoritative Main is not open"; + return false; + } + constexpr size_t max_settings = 4096; + auto canonical_number = [](const float value) -> json { + return std::isfinite(value) && std::trunc(value) == value ? json(int64_t(value)) : json(value); + }; + json settings = json::array(); + for (const ParticleSettings &part : state->main->particles) { + if (settings.size() >= max_settings) { + error = "PARTICLE_SETTINGS_BUDGET_EXCEEDED: ParticleSettings count exceeds the 4096 data-block budget"; + return false; + } + settings.push_back({{"id", "particle-settings:" + id_name(part.id)}, + {"name", id_name(part.id)}, + {"type", int(part.type)}, + {"from", int(part.from)}, + {"distribution", int(part.distr)}, + {"physicsType", int(part.phystype)}, + {"totalParticles", part.totpart}, + {"start", canonical_number(part.sta)}, + {"end", canonical_number(part.end)}, + {"lifetime", canonical_number(part.lifetime)}, + {"size", canonical_number(part.size)}, + {"drawSize", canonical_number(part.draw_size)}}); + } + particle_settings_json = json({{"schemaVersion", 1}, {"settings", std::move(settings)}}).dump(); + return true; +} + +bool web_engine_blend_main_create_grease_pencil_layer(WebBlendMainState *state, + const char *data_id, + const char *name, + std::string &error) +{ + GreasePencil *grease_pencil = find_grease_pencil(state != nullptr ? state->main : nullptr, data_id); + if (grease_pencil == nullptr || name == nullptr || !ensure_single_user_data(state != nullptr ? state->main : nullptr, &grease_pencil->id, error)) { + if (error.empty()) error = "GREASE_PENCIL_SCHEMA_INVALID: Grease Pencil data-block was not found"; + return false; + } + const size_t byte_length = strlen(name); + if (byte_length == 0 || byte_length > 63 || grease_pencil->layers().size() >= 1024) { + error = "GREASE_PENCIL_BUDGET_EXCEEDED: layer name or layer count exceeds the bounded range"; + return false; + } + bke::greasepencil::Layer &layer = grease_pencil->add_layer(name); + grease_pencil->set_active_layer(&layer); + grease_pencil->id.recalc |= ID_RECALC_GEOMETRY; + return true; +} + +bool web_engine_blend_main_remove_grease_pencil_layer(WebBlendMainState *state, + const char *data_id, + const char *layer_id, + std::string &error) +{ + GreasePencil *grease_pencil = find_grease_pencil(state != nullptr ? state->main : nullptr, data_id); + bke::greasepencil::Layer *layer = find_grease_pencil_layer(grease_pencil, layer_id); + if (grease_pencil == nullptr || layer == nullptr || !ensure_single_user_data(state != nullptr ? state->main : nullptr, grease_pencil != nullptr ? &grease_pencil->id : nullptr, error)) { + if (error.empty()) error = "GREASE_PENCIL_SCHEMA_INVALID: Grease Pencil layer was not found"; + return false; + } + grease_pencil->remove_layer(*layer); + grease_pencil->id.recalc |= ID_RECALC_GEOMETRY; + return true; +} + +bool web_engine_blend_main_move_grease_pencil_layer(WebBlendMainState *state, + const char *data_id, + const char *layer_id, + const char *direction, + std::string &error) +{ + GreasePencil *grease_pencil = find_grease_pencil(state != nullptr ? state->main : nullptr, data_id); + bke::greasepencil::Layer *layer = find_grease_pencil_layer(grease_pencil, layer_id); + if (grease_pencil == nullptr || layer == nullptr || direction == nullptr || !ensure_single_user_data(state != nullptr ? state->main : nullptr, grease_pencil != nullptr ? &grease_pencil->id : nullptr, error)) { + if (error.empty()) error = "GREASE_PENCIL_SCHEMA_INVALID: Grease Pencil layer was not found"; + return false; + } + if (strcmp(direction, "UP") == 0) grease_pencil->move_node_up(layer->as_node()); + else if (strcmp(direction, "DOWN") == 0) grease_pencil->move_node_down(layer->as_node()); + else if (strcmp(direction, "TOP") == 0) grease_pencil->move_node_top(layer->as_node()); + else if (strcmp(direction, "BOTTOM") == 0) grease_pencil->move_node_bottom(layer->as_node()); + else { + error = "GREASE_PENCIL_SCHEMA_INVALID: layer move direction is invalid"; + return false; + } + grease_pencil->id.recalc |= ID_RECALC_GEOMETRY; + return true; +} + +bool web_engine_blend_main_move_grease_pencil_frame(WebBlendMainState *state, + const char *data_id, + const char *layer_id, + const int frame, + const int target_frame, + const char *drawing_id, + std::string &error) +{ + GreasePencil *grease_pencil = find_grease_pencil(state != nullptr ? state->main : nullptr, + data_id); + bke::greasepencil::Layer *layer = find_grease_pencil_layer(grease_pencil, layer_id); + if (grease_pencil == nullptr || layer == nullptr || drawing_id == nullptr || + !ensure_single_user_data(state != nullptr ? state->main : nullptr, + grease_pencil != nullptr ? &grease_pencil->id : nullptr, + error)) + { + if (error.empty()) error = "GREASE_PENCIL_SCHEMA_INVALID: Grease Pencil frame target was not found"; + return false; + } + if (frame < -1000000 || frame > 1000000 || target_frame < -1000000 || + target_frame > 1000000 || frame == target_frame || layer->frames().contains(target_frame)) + { + error = "GREASE_PENCIL_SCHEMA_INVALID: frame move is outside the bounded range or target frame already exists"; + return false; + } + const GreasePencilFrame *source = layer->frames().lookup_ptr(frame); + if (source == nullptr || source->is_end()) { + error = "GREASE_PENCIL_SCHEMA_INVALID: source Grease Pencil frame was not found"; + return false; + } + const std::string expected_drawing_id = "grease-pencil-drawing:" + + id_name(grease_pencil->id) + ":" + + std::to_string(source->drawing_index); + if (expected_drawing_id != drawing_id) { + error = "GREASE_PENCIL_SCHEMA_INVALID: source drawing identity does not match the frame"; + return false; + } + blender::Map destinations; + destinations.add(frame, target_frame); + grease_pencil->move_frames(*layer, destinations); + grease_pencil->id.recalc |= ID_RECALC_GEOMETRY; + return true; +} + +bool web_engine_blend_main_insert_grease_pencil_frame(WebBlendMainState *state, + const char *data_id, + const char *layer_id, + const int frame, + const int duration, + std::string &error) +{ + GreasePencil *grease_pencil = find_grease_pencil(state != nullptr ? state->main : nullptr, data_id); + bke::greasepencil::Layer *layer = find_grease_pencil_layer(grease_pencil, layer_id); + if (grease_pencil == nullptr || layer == nullptr || !ensure_single_user_data(state != nullptr ? state->main : nullptr, grease_pencil != nullptr ? &grease_pencil->id : nullptr, error)) { + if (error.empty()) error = "GREASE_PENCIL_SCHEMA_INVALID: Grease Pencil layer was not found"; + return false; + } + if (frame < -1000000 || frame > 1000000 || duration < 0 || duration > 1000000 || layer->frames().contains(frame)) { + error = "GREASE_PENCIL_SCHEMA_INVALID: frame or duration is outside the bounded range, or frame already exists"; + return false; + } + if (grease_pencil->insert_frame(*layer, frame, duration) == nullptr) { + error = "GREASE_PENCIL_SCHEMA_INVALID: unable to insert Grease Pencil frame"; + return false; + } + grease_pencil->id.recalc |= ID_RECALC_GEOMETRY; + return true; +} + +bool web_engine_blend_main_remove_grease_pencil_frame(WebBlendMainState *state, + const char *data_id, + const char *layer_id, + const int frame, + std::string &error) +{ + GreasePencil *grease_pencil = find_grease_pencil(state != nullptr ? state->main : nullptr, data_id); + bke::greasepencil::Layer *layer = find_grease_pencil_layer(grease_pencil, layer_id); + if (grease_pencil == nullptr || layer == nullptr || !ensure_single_user_data(state != nullptr ? state->main : nullptr, grease_pencil != nullptr ? &grease_pencil->id : nullptr, error)) { + if (error.empty()) error = "GREASE_PENCIL_SCHEMA_INVALID: Grease Pencil layer was not found"; + return false; + } + if (frame < -1000000 || frame > 1000000 || !layer->frames().contains(frame) || !layer->remove_frame(frame)) { + error = "GREASE_PENCIL_SCHEMA_INVALID: Grease Pencil frame was not found or cannot be removed"; + return false; + } + grease_pencil->id.recalc |= ID_RECALC_GEOMETRY; + return true; +} + +bool web_engine_blend_main_set_grease_pencil_strokes(WebBlendMainState *state, + const char *data_id, + const char *layer_id, + const int frame, + const std::vector &strokes, + std::string &error) +{ + GreasePencil *grease_pencil = find_grease_pencil(state != nullptr ? state->main : nullptr, data_id); + bke::greasepencil::Layer *layer = find_grease_pencil_layer(grease_pencil, layer_id); + if (grease_pencil == nullptr || layer == nullptr || !ensure_single_user_data(state != nullptr ? state->main : nullptr, grease_pencil != nullptr ? &grease_pencil->id : nullptr, error)) { + if (error.empty()) error = "GREASE_PENCIL_SCHEMA_INVALID: Grease Pencil layer was not found"; + return false; + } + bke::greasepencil::Drawing *drawing = grease_pencil->get_editable_drawing_at(*layer, frame); + if (drawing == nullptr) { + error = "GREASE_PENCIL_SCHEMA_INVALID: an editable drawing at the requested frame is required"; + return false; + } + uint64_t point_count = 0; + for (const WebGreasePencilStrokeEdit &stroke : strokes) { + if (stroke.points.empty()) { + error = "GREASE_PENCIL_SCHEMA_INVALID: strokes must contain at least one point"; + return false; + } + point_count += stroke.points.size(); + } + if (strokes.size() > 1000000 || point_count > 1000000) { + error = "GREASE_PENCIL_BUDGET_EXCEEDED: stroke transaction exceeds the 1M point budget"; + return false; + } + bke::CurvesGeometry &curves = drawing->strokes_for_write(); + curves.resize(int(point_count), int(strokes.size())); + curves.fill_curve_types(CURVE_TYPE_POLY); + MutableSpan offsets = curves.offsets_for_write(); + MutableSpan positions = curves.positions_for_write(); + MutableSpan cyclic = curves.cyclic_for_write(); + MutableSpan radii = drawing->radii_for_write(); + MutableSpan opacities = drawing->opacities_for_write(); + MutableSpan vertex_colors = drawing->vertex_colors_for_write(); + bke::SpanAttributeWriter material_indices = curves.attributes_for_write().lookup_or_add_for_write_span("material_index", bke::AttrDomain::Curve); + int point_offset = 0; + offsets[0] = 0; + for (size_t stroke_index = 0; stroke_index < strokes.size(); stroke_index++) { + const WebGreasePencilStrokeEdit &stroke = strokes[stroke_index]; + cyclic[stroke_index] = stroke.cyclic; + material_indices.span[stroke_index] = stroke.material_index; + for (const WebGreasePencilPointEdit &point : stroke.points) { + positions[point_offset] = float3(point.position[0], point.position[1], point.position[2]); + radii[point_offset] = point.radius; + opacities[point_offset] = point.opacity; + vertex_colors[point_offset] = ColorGeometry4f(point.vertex_color[0], point.vertex_color[1], point.vertex_color[2], point.vertex_color[3]); + point_offset++; + } + offsets[stroke_index + 1] = point_offset; + } + material_indices.finish(); + curves.tag_topology_changed(); + curves.tag_positions_changed(); + grease_pencil->id.recalc |= ID_RECALC_GEOMETRY; + return true; +} + +bool web_engine_blend_main_set_vertex_colors(WebBlendMainState *state, + const char *mesh_id, + const char *attribute_name, + const char *domain, + const std::vector &indices, + const std::vector &colors, + std::string &error) +{ + Object *object = find_mesh_object(state != nullptr ? state->main : nullptr, mesh_id); + Mesh *mesh = object != nullptr ? reinterpret_cast(object->data) : nullptr; + if (mesh == nullptr || attribute_name == nullptr || domain == nullptr || + !ensure_single_user_data(state != nullptr ? state->main : nullptr, mesh != nullptr ? &mesh->id : nullptr, error)) { + if (error.empty()) error = "PAINT_SCHEMA_INVALID: Mesh data-block was not found"; + return false; + } + const bke::AttrDomain attribute_domain = strcmp(domain, "POINT") == 0 ? bke::AttrDomain::Point : + strcmp(domain, "CORNER") == 0 ? bke::AttrDomain::Corner : + bke::AttrDomain::Auto; + const int domain_size = attribute_domain == bke::AttrDomain::Point ? mesh->verts_num : + attribute_domain == bke::AttrDomain::Corner ? mesh->corners_num : -1; + if (attribute_domain == bke::AttrDomain::Auto || strlen(attribute_name) == 0 || strlen(attribute_name) > 63 || + indices.empty() || indices.size() > 1000000 || colors.size() != indices.size() * 4 || + std::any_of(indices.begin(), indices.end(), [&](const uint32_t index) { return index >= uint32_t(domain_size); }) || + std::any_of(colors.begin(), colors.end(), [](const float value) { return !std::isfinite(value) || value < 0.0f || value > 1.0f; })) { + error = "PAINT_SCHEMA_INVALID: vertex color patch is outside the bounded domain"; + return false; + } + bke::SpanAttributeWriter writer = mesh->attributes_for_write().convert_or_add_for_write_span(attribute_name, attribute_domain); + if (!writer) { + error = "PAINT_SCHEMA_INVALID: unable to create the vertex color attribute"; + return false; + } + for (size_t index = 0; index < indices.size(); index++) { + writer.span[indices[index]] = ColorGeometry4f(colors[index * 4], colors[index * 4 + 1], colors[index * 4 + 2], colors[index * 4 + 3]); + } + writer.finish(); + BKE_id_attributes_active_color_set(&mesh->id, StringRef(attribute_name)); + mesh->id.recalc |= ID_RECALC_GEOMETRY; + object->id.recalc |= ID_RECALC_GEOMETRY; + return true; +} + +bool web_engine_blend_main_set_vertex_weights(WebBlendMainState *state, + const char *object_id, + const char *vertex_group, + const std::vector &indices, + const std::vector &values, + const bool normalize, + const uint32_t limit, + const bool mirror, + const int mirror_axis, + const float mirror_tolerance, + std::string &error) +{ + Object *object = find_object(state != nullptr ? state->main : nullptr, object_id); + Mesh *mesh = object != nullptr && object->type == OB_MESH ? + reinterpret_cast(object->data) : + nullptr; + if (mesh == nullptr || vertex_group == nullptr || !ensure_single_user_data(state != nullptr ? state->main : nullptr, mesh != nullptr ? &mesh->id : nullptr, error)) { + if (error.empty()) error = "PAINT_SCHEMA_INVALID: Mesh object was not found"; + return false; + } + if (strlen(vertex_group) == 0 || strlen(vertex_group) > 63 || indices.empty() || + indices.size() > 1000000 || indices.size() != values.size() || + std::any_of(indices.begin(), indices.end(), [&](const uint32_t index) { return index >= uint32_t(mesh->verts_num); }) || + std::any_of(values.begin(), values.end(), [](const float value) { return !std::isfinite(value) || value < 0.0f || value > 1.0f; })) { + error = "PAINT_SCHEMA_INVALID: vertex weight patch is outside the bounded domain"; + return false; + } + if (limit > 32 || (mirror && (mirror_axis < 0 || mirror_axis > 2 || !std::isfinite(mirror_tolerance) || + mirror_tolerance <= 0.0f || mirror_tolerance > 1.0f))) { + error = "PAINT_SCHEMA_INVALID: vertex weight limit or mirror options are outside the bounded domain"; + return false; + } + std::unordered_set seen_indices; + for (const uint32_t index : indices) { + if (!seen_indices.insert(index).second) { + error = "PAINT_SCHEMA_INVALID: vertex weight patch contains duplicate vertex indices"; + return false; + } + } + std::unordered_map updates; + updates.reserve(indices.size() * (mirror ? 2 : 1)); + for (size_t index = 0; index < indices.size(); index++) updates.emplace(indices[index], values[index]); + if (mirror) { + /* Build a reciprocal local-coordinate symmetry map before mutating Main. */ + const Span positions = mesh->vert_positions(); + if (positions.size() > 100000) { + error = "PAINT_BUDGET_EXCEEDED: verified weight mirror is limited to 100000 vertices"; + return false; + } + auto cell_key = [](const float3 &position, const float cell_size, const int dx = 0, + const int dy = 0, const int dz = 0) { + const int64_t x = int64_t(std::llround(position.x / cell_size)) + dx; + const int64_t y = int64_t(std::llround(position.y / cell_size)) + dy; + const int64_t z = int64_t(std::llround(position.z / cell_size)) + dz; + return std::to_string(x) + ":" + std::to_string(y) + ":" + std::to_string(z); + }; + std::unordered_map> buckets; + buckets.reserve(positions.size()); + for (int64_t index = 0; index < int64_t(positions.size()); index++) { + buckets[cell_key(positions[index], mirror_tolerance)].push_back(int32_t(index)); + } + std::vector mirror_vertices(positions.size(), -1); + for (int64_t source = 0; source < int64_t(positions.size()); source++) { + const float3 reflected = [&]() { + float3 value = positions[source]; + value[mirror_axis] = -value[mirror_axis]; + return value; + }(); + float best_distance = std::numeric_limits::max(); + int32_t best = -1; + for (int dx = -1; dx <= 1; dx++) { + for (int dy = -1; dy <= 1; dy++) { + for (int dz = -1; dz <= 1; dz++) { + const auto bucket = buckets.find(cell_key(reflected, mirror_tolerance, dx, dy, dz)); + if (bucket == buckets.end()) continue; + for (const int32_t candidate : bucket->second) { + const float3 delta = positions[candidate] - reflected; + const float distance = std::sqrt(delta.x * delta.x + delta.y * delta.y + delta.z * delta.z); + if (distance < best_distance || (distance == best_distance && candidate < best)) { + best_distance = distance; + best = candidate; + } + } + } + } + } + if (best < 0 || best_distance > mirror_tolerance) { + error = "CAPABILITY_MISSING: WEIGHT_MIRROR_SYMMETRY_UNVERIFIED"; + return false; + } + mirror_vertices[source] = best; + } + for (size_t source = 0; source < mirror_vertices.size(); source++) { + const int32_t target = mirror_vertices[source]; + if (target < 0 || mirror_vertices[size_t(target)] != int32_t(source)) { + error = "CAPABILITY_MISSING: WEIGHT_MIRROR_SYMMETRY_UNVERIFIED"; + return false; + } + } + for (const auto &[source, value] : std::vector>(updates.begin(), updates.end())) { + const uint32_t target = uint32_t(mirror_vertices[source]); + const auto existing = updates.find(target); + if (existing != updates.end() && std::abs(existing->second - value) > 1e-6f) { + error = "PAINT_SCHEMA_INVALID: mirrored weight patch contains conflicting values"; + return false; + } + updates[target] = value; + } + } + int group_index = BKE_object_defgroup_name_index(object, vertex_group); + if (group_index < 0) { + if (BKE_object_defgroup_add_name(object, vertex_group) == nullptr) { + error = "PAINT_SCHEMA_INVALID: unable to create vertex group"; + return false; + } + group_index = BKE_object_defgroup_name_index(object, vertex_group); + } + MutableSpan deform_verts = mesh->deform_verts_for_write(); + std::vector touched_vertices; + touched_vertices.reserve(updates.size()); + for (const auto &[vertex_index, value] : updates) { + MDeformVert &deform_vert = deform_verts[vertex_index]; + if (value == 0.0f) { + if (MDeformWeight *weight = BKE_defvert_find_index(&deform_vert, group_index)) { + BKE_defvert_remove_group(&deform_vert, weight); + } + } + else { + BKE_defvert_ensure_index(&deform_vert, group_index)->weight = value; + } + touched_vertices.push_back(vertex_index); + } + for (const uint32_t vertex_index : touched_vertices) { + MDeformVert &deform_vert = deform_verts[vertex_index]; + if (limit > 0) { + while (deform_vert.totweight > int(limit)) { + int remove_index = 0; + for (int index = 1; index < deform_vert.totweight; index++) { + const MDeformWeight &candidate = deform_vert.dw[index]; + const MDeformWeight ¤t = deform_vert.dw[remove_index]; + if (candidate.weight < current.weight || + (candidate.weight == current.weight && candidate.def_nr > current.def_nr)) { + remove_index = index; + } + } + BKE_defvert_remove_group(&deform_vert, &deform_vert.dw[remove_index]); + } + } + if (normalize) BKE_defvert_normalize(deform_vert); + } + mesh->id.recalc |= ID_RECALC_GEOMETRY; + object->id.recalc |= ID_RECALC_GEOMETRY; + return true; +} + +bool web_engine_blend_main_set_render_properties(WebBlendMainState *state, + const char *target_id, + const char *properties_json, + std::string &error) +{ + if (state == nullptr || state->main == nullptr || target_id == nullptr || + properties_json == nullptr) + { + error = "RENDER_PROPERTY_INVALID: render property target is missing"; + return false; + } + const json properties = json::parse(properties_json, nullptr, false); + if (!properties.is_object() || properties.empty()) { + error = "RENDER_PROPERTY_INVALID: properties must be a non-empty object"; + return false; + } + Scene *preserved_scene = state->scene; + const ColorManagedViewSettings preserved_view_settings = preserved_scene != nullptr ? + preserved_scene->view_settings : + ColorManagedViewSettings{}; + const auto restore_view_settings = [&]() { + if (preserved_scene != nullptr) preserved_scene->view_settings = preserved_view_settings; + }; + const auto reject_unknown = [&](const std::unordered_set &allowed) { + for (const auto &[key, value] : properties.items()) { + (void)value; + if (!allowed.contains(key)) { + error = "RENDER_PROPERTY_INVALID: unsupported property " + key; + return false; + } + } + return true; + }; + const auto read_float = [&](const char *key, const float minimum, const float maximum, + float &target) { + if (!properties.contains(key)) return true; + if (!properties[key].is_number()) { + error = std::string("RENDER_PROPERTY_INVALID: ") + key + " must be numeric"; + return false; + } + const float value = properties[key].get(); + if (!std::isfinite(value) || value < minimum || value > maximum) { + error = std::string("RENDER_PROPERTY_INVALID: ") + key + " is outside the bounded range"; + return false; + } + target = value; + return true; + }; + const auto read_bool = [&](const char *key, bool &target) { + if (!properties.contains(key)) return true; + if (!properties[key].is_boolean()) { + error = std::string("RENDER_PROPERTY_INVALID: ") + key + " must be boolean"; + return false; + } + target = properties[key].get(); + return true; + }; + const auto read_color = [&](const char *key, float *target) { + if (!properties.contains(key)) return true; + const json &color = properties[key]; + if (!color.is_array() || color.size() != 3) { + error = std::string("RENDER_PROPERTY_INVALID: ") + key + " must contain three channels"; + return false; + } + for (int channel = 0; channel < 3; channel++) { + if (!color[channel].is_number()) { + error = std::string("RENDER_PROPERTY_INVALID: ") + key + " contains a non-number"; + return false; + } + const float value = color[channel].get(); + if (!std::isfinite(value) || value < 0.0f || value > 100.0f) { + error = std::string("RENDER_PROPERTY_INVALID: ") + key + " is outside the bounded range"; + return false; + } + target[channel] = value; + } + return true; + }; + + if (strncmp(target_id, "camera:", 7) == 0) { + Camera *camera = find_camera(state->main, target_id); + if (camera == nullptr || !ensure_single_user_data(state->main, &camera->id, error) || + !reject_unknown({"projection", "lensMm", "sensorWidthMm", "sensorHeightMm", "sensorFit", + "shift", "near", "far", "orthoScale", "depthOfField"}) || + !read_float("lensMm", 0.1f, 10000.0f, camera->lens) || + !read_float("sensorWidthMm", 0.1f, 10000.0f, camera->sensor_x) || + !read_float("sensorHeightMm", 0.1f, 10000.0f, camera->sensor_y) || + !read_float("near", 0.0001f, 1.0e9f, camera->clip_start) || + !read_float("far", 0.0002f, 1.0e12f, camera->clip_end) || + !read_float("orthoScale", 0.0001f, 1.0e9f, camera->ortho_scale)) + { + return false; + } + if (camera->clip_end <= camera->clip_start) { + error = "RENDER_PROPERTY_INVALID: far must exceed near"; + return false; + } + if (properties.contains("projection")) { + if (!properties["projection"].is_string()) { + error = "RENDER_PROPERTY_INVALID: projection must be a string"; + return false; + } + const std::string projection = properties["projection"].get(); + if (projection == "PERSPECTIVE") camera->type = CAM_PERSP; + else if (projection == "ORTHOGRAPHIC") camera->type = CAM_ORTHO; + else { + error = "RENDER_PROPERTY_INVALID: projection is unsupported"; + return false; + } + } + if (properties.contains("sensorFit")) { + if (!properties["sensorFit"].is_number_integer()) { + error = "RENDER_PROPERTY_INVALID: sensorFit must be an integer"; + return false; + } + const int fit = properties["sensorFit"].get(); + if (fit < CAMERA_SENSOR_FIT_AUTO || fit > CAMERA_SENSOR_FIT_VERT) { + error = "RENDER_PROPERTY_INVALID: sensorFit is outside the bounded enum range"; + return false; + } + camera->sensor_fit = eCamera_SensorFit(fit); + } + if (properties.contains("shift")) { + const json &shift = properties["shift"]; + if (!shift.is_array() || shift.size() != 2 || !shift[0].is_number() || !shift[1].is_number()) { + error = "RENDER_PROPERTY_INVALID: shift must contain two numbers"; + return false; + } + const float x = shift[0].get(); + const float y = shift[1].get(); + if (!std::isfinite(x) || !std::isfinite(y) || x < -1000.0f || x > 1000.0f || y < -1000.0f || y > 1000.0f) { + error = "RENDER_PROPERTY_INVALID: shift is outside the bounded range"; + return false; + } + camera->shiftx = x; + camera->shifty = y; + } + if (properties.contains("depthOfField")) { + const json &dof = properties["depthOfField"]; + if (!dof.is_object() || dof.empty()) { + error = "RENDER_PROPERTY_INVALID: depthOfField must be a non-empty object"; + return false; + } + for (const auto &[key, value] : dof.items()) { + (void)value; + if (!std::unordered_set{"enabled", "focusDistance", "apertureFStop", + "apertureBlades", "apertureRotation", + "apertureRatio"}.contains(key)) { + error = "RENDER_PROPERTY_INVALID: unsupported depthOfField property " + key; + return false; + } + } + if (dof.contains("enabled")) { + if (!dof["enabled"].is_boolean()) { + error = "RENDER_PROPERTY_INVALID: depthOfField.enabled must be boolean"; + return false; + } + if (dof["enabled"].get()) camera->dof.flag |= CAM_DOF_ENABLED; + else camera->dof.flag &= ~CAM_DOF_ENABLED; + } + const auto dof_float = [&](const char *key, float minimum, float maximum, float &target) { + if (!dof.contains(key)) return true; + if (!dof[key].is_number()) return false; + const float value = dof[key].get(); + if (!std::isfinite(value) || value < minimum || value > maximum) return false; + target = value; + return true; + }; + if (!dof_float("focusDistance", 0.0f, 1.0e9f, camera->dof.focus_distance) || + !dof_float("apertureFStop", 0.01f, 1000.0f, camera->dof.aperture_fstop) || + !dof_float("apertureRotation", -6.28318531f, 6.28318531f, camera->dof.aperture_rotation) || + !dof_float("apertureRatio", 0.01f, 100.0f, camera->dof.aperture_ratio)) { + error = "RENDER_PROPERTY_INVALID: depthOfField numeric value is outside the bounded range"; + return false; + } + if (dof.contains("apertureBlades")) { + if (!dof["apertureBlades"].is_number_integer()) { + error = "RENDER_PROPERTY_INVALID: depthOfField.apertureBlades must be an integer"; + return false; + } + const int blades = dof["apertureBlades"].get(); + if (blades < 0 || blades > 64) { + error = "RENDER_PROPERTY_INVALID: depthOfField.apertureBlades is outside the bounded range"; + return false; + } + camera->dof.aperture_blades = blades; + } + } + camera->id.recalc |= ID_RECALC_PARAMETERS; + restore_view_settings(); + return true; + } + + if (strncmp(target_id, "light:", 6) == 0) { + Light *light = find_light(state->main, target_id); + if (light == nullptr || !ensure_single_user_data(state->main, &light->id, error)) return false; + if (!reject_unknown({"color", "energy", "exposure", "temperature", "useTemperature", + "castsShadow", "radius", "spotAngle", "spotBlend", "areaSize", + "areaSizeY", "areaSpread", "sunAngle"}) || + !read_color("color", &light->r) || + !read_float("energy", 0.0f, 1.0e9f, light->energy) || + !read_float("exposure", -20.0f, 20.0f, light->exposure) || + !read_float("temperature", 800.0f, 20000.0f, light->temperature) || + !read_float("radius", 0.0f, 1.0e9f, light->radius) || + !read_float("spotAngle", 0.0001f, 3.14159265f, light->spotsize) || + !read_float("spotBlend", 0.0f, 1.0f, light->spotblend) || + !read_float("areaSize", 0.0001f, 1.0e9f, light->area_size) || + !read_float("areaSizeY", 0.0001f, 1.0e9f, light->area_sizey) || + !read_float("areaSpread", 0.0001f, 3.14159265f, light->area_spread) || + !read_float("sunAngle", 0.0f, 3.14159265f, light->sun_angle)) + { + return false; + } + bool enabled = false; + if (properties.contains("useTemperature")) { + enabled = (light->mode & LA_USE_TEMPERATURE) != 0; + if (!read_bool("useTemperature", enabled)) return false; + if (enabled) light->mode |= LA_USE_TEMPERATURE; + else light->mode &= ~LA_USE_TEMPERATURE; + } + if (properties.contains("castsShadow")) { + enabled = (light->mode & LA_SHADOW) != 0; + if (!read_bool("castsShadow", enabled)) return false; + if (enabled) light->mode |= LA_SHADOW; + else light->mode &= ~LA_SHADOW; + } + light->id.recalc |= ID_RECALC_PARAMETERS; + restore_view_settings(); + return true; + } + + if (strncmp(target_id, "world:", 6) == 0) { + World *world = find_world(state->main, target_id); + if (world == nullptr || world->id.lib != nullptr || + !reject_unknown({"color", "exposure", "mist"}) || + !read_color("color", &world->horr) || + !read_float("exposure", -20.0f, 20.0f, world->exposure)) + { + if (error.empty()) error = "LINKED_DATA_MUTATION_BLOCKED: World is not editable"; + return false; + } + if (properties.contains("mist")) { + const json &mist = properties["mist"]; + if (!mist.is_object() || mist.empty()) { + error = "RENDER_PROPERTY_INVALID: mist must be a non-empty object"; + return false; + } + for (const auto &[key, value] : mist.items()) { + (void)value; + if (!std::unordered_set{"enabled", "type", "start", "depth", "intensity", + "height"}.contains(key)) + { + error = "RENDER_PROPERTY_INVALID: unsupported mist property " + key; + return false; + } + } + if (mist.contains("enabled")) { + if (!mist["enabled"].is_boolean()) { + error = "RENDER_PROPERTY_INVALID: mist.enabled must be boolean"; + return false; + } + if (mist["enabled"].get()) world->mode |= WO_MIST; + else world->mode &= ~WO_MIST; + } + if (mist.contains("type")) { + if (!mist["type"].is_string()) { + error = "RENDER_PROPERTY_INVALID: mist.type must be a string"; + return false; + } + const std::string type = mist["type"].get(); + if (type == "QUADRATIC") world->mistype = WO_MIST_QUADRATIC; + else if (type == "LINEAR") world->mistype = WO_MIST_LINEAR; + else if (type == "INVERSE_QUADRATIC") world->mistype = WO_MIST_INVERSE_QUADRATIC; + else { + error = "RENDER_PROPERTY_INVALID: mist.type is invalid"; + return false; + } + } + const auto mist_float = [&](const char *key, float minimum, float maximum, float &target) { + if (!mist.contains(key)) return true; + if (!mist[key].is_number()) return false; + const float value = mist[key].get(); + if (!std::isfinite(value) || value < minimum || value > maximum) return false; + target = value; + return true; + }; + if (!mist_float("start", 0.0f, 1.0e9f, world->miststa) || + !mist_float("depth", 0.0001f, 1.0e9f, world->mistdist) || + !mist_float("intensity", 0.0f, 1.0f, world->misi) || + !mist_float("height", 0.0f, 1.0e9f, world->misthi)) + { + error = "RENDER_PROPERTY_INVALID: mist numeric value is outside the bounded range"; + return false; + } + } + world->id.recalc |= ID_RECALC_PARAMETERS; + restore_view_settings(); + return true; + } + + error = "RENDER_PROPERTY_INVALID: target must be a Camera, Light or World"; + return false; +} + +bool web_engine_blend_main_write(WebBlendMainState *state, + std::vector &bytes, + std::string &error) +{ + if (state == nullptr || state->main == nullptr) { + error = "authoritative Main is not open"; + return false; + } + GlobalMainScope global_main_scope(state->main); + bytes.clear(); + BufferWriteState write_state{&bytes}; + if (!blender::BLO_write_file_to_callback( + state->main, 0, append_write_bytes, &write_state)) { + error = write_state.allocation_failed ? "Blender Main memory write ran out of memory" : + "Blender Main memory write failed"; + bytes.clear(); + return false; + } + if (bytes.empty()) { + error = "Blender Main memory write produced an empty buffer"; + return false; + } + return true; +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00158.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00158.md new file mode 100644 index 00000000..b8c7cb42 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00158.md @@ -0,0 +1,17 @@ +# M16-GAP-00158 Status + +status: done +task: anim.channels_editable_toggle operator LOCAL_EXACT slice +updated: 2026-08-21 America/New_York + +scope: + +- Action Editor `anim.channels_editable_toggle` toggles the selected location channels to non-editable. + +evidence: + +- Blender desktop and WASM/Main expose all three location FCurves with `editable: false`. +- Save/reopen is exact; malformed Blend input is rejected without Main mutation. +- Fixture generation, desktop checker, npm comparator, direct comparator, and artifact hashing passed. + +nextTask: `M16-GAP-00159` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00159.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00159.md new file mode 100644 index 00000000..39488427 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00159.md @@ -0,0 +1,17 @@ +# M16-GAP-00159 Status + +status: done +task: anim.channels_expand operator LOCAL_EXACT slice +updated: 2026-08-21 America/New_York + +scope: + +- Action Editor `anim.channels_expand(all=true)` expands the `Object Transforms` channel group. + +evidence: + +- Blender desktop and WASM/Main expose the group as `Object Transforms` with `expanded: true` on all three location channels. +- Save/reopen is exact; malformed Blend input is rejected without Main mutation. +- Fixture generation, desktop checker, npm comparator, direct comparator, and artifact hashing passed. + +nextTask: `M16-GAP-00160` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00160.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00160.md new file mode 100644 index 00000000..0516b593 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00160.md @@ -0,0 +1,17 @@ +# M16-GAP-00160 Status + +status: done +task: anim.channels_fcurves_enable operator LOCAL_EXACT slice +updated: 2026-08-21 America/New_York + +scope: + +- Action Editor `anim.channels_fcurves_enable` preserves three location F-Curves and exposes their enabled state. + +evidence: + +- Blender desktop and WASM/Main expose all three `location_missing` channels with `enabled: true` after the operator path. +- Save/reopen is exact; malformed Blend input is rejected without Main mutation. +- Fixture generation, desktop checker, npm comparator, direct comparator, context governance, and artifact hashing passed. + +nextTask: `M16-GAP-00161` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00161.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00161.md new file mode 100644 index 00000000..0794e668 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00161.md @@ -0,0 +1,17 @@ +# M16-GAP-00161 Status + +status: done +task: anim.channels_group operator LOCAL_EXACT slice +updated: 2026-08-21 America/New_York + +scope: + +- Action Editor `anim.channels_group` assigns the three selected location F-Curves to `WebGapTransforms`. + +evidence: + +- Blender desktop and WASM/Main expose all three channels with the exact `WebGapTransforms` group. +- Save/reopen is exact; malformed Blend input is rejected without Main mutation. +- Fixture generation, desktop checker, npm comparator, direct comparator, context governance, and artifact hashing passed. + +nextTask: `M16-GAP-00162` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00162.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00162.md new file mode 100644 index 00000000..fe9631f6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00162.md @@ -0,0 +1,17 @@ +# M16-GAP-00162 Status + +status: done +task: anim.channels_move operator LOCAL_EXACT slice +updated: 2026-08-21 America/New_York + +scope: + +- Action Editor `anim.channels_move` moves the first location F-Curve down. + +evidence: + +- Blender desktop and WASM/Main expose the same three location channels in order `[1, 0, 2]`. +- Save/reopen preserves the channel order exactly; malformed Blend input is rejected without Main mutation. +- Fixture generation, desktop checker, npm comparator, direct comparator, context governance, and artifact hashing passed. + +nextTask: `M16-GAP-00163` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00163.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00163.md new file mode 100644 index 00000000..9f577380 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00163.md @@ -0,0 +1,17 @@ +# M16-GAP-00163 Status + +status: done +task: anim.channels_rename operator LOCAL_EXACT slice +updated: 2026-08-21 America/New_York + +scope: + +- Action Editor `anim.channels_rename` renames the first disabled F-Curve RNA path to `rotation_euler`. + +evidence: + +- Blender desktop and WASM/Main expose the same three channels: `rotation_euler[0]`, `location_missing[1]`, and `location_missing[2]` with identical keyframes. +- WASM preserves the disabled flags for the two invalid control paths; save/reopen preserves the animation snapshot exactly. +- Fixture generation, desktop checker, npm comparator, direct comparator, malformed Blend rejection, context governance, and artifact hashing passed. + +nextTask: `M16-GAP-00164` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00164.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00164.md new file mode 100644 index 00000000..63a68c36 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00164.md @@ -0,0 +1,18 @@ +# M16-GAP-00164 Status + +status: done +task: anim.channels_select_all operator LOCAL_EXACT slice +updated: 2026-08-21 America/New_York + +scope: + +- Action Editor `anim.channels_select_all` selects all three F-Curve channels without selecting keyframes. + +evidence: + +- Blender desktop and WASM/Main expose the same three `location` channels with `selected: true` and unchanged keyframe selection. +- The reader exposes the persisted `FCURVE_SELECTED` flag through the optional SceneIR channel field `selected`. +- Save/reopen preserves the animation snapshot exactly; malformed Blend input is rejected without Main mutation. +- Fixture generation, desktop checker, npm comparator, direct comparator, WebEngine rebuild, context governance, and artifact hashing passed. + +nextTask: `M16-GAP-00165` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00165.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00165.md new file mode 100644 index 00000000..fcf1162b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00165.md @@ -0,0 +1,18 @@ +# M16-GAP-00165 Status + +status: done +task: anim.channels_select_box operator LOCAL_EXACT slice +updated: 2026-08-21 America/New_York + +scope: + +- Action Editor `anim.channels_select_box` selects all three F-Curve channels without selecting keyframes. + +evidence: + +- Blender desktop and WASM/Main expose the same three `location` channels with `selected: true` and unchanged keyframe selection. +- The reader reuses the persisted `FCURVE_SELECTED` flag through the optional SceneIR channel field `selected`. +- Save/reopen preserves the animation snapshot exactly; malformed Blend input is rejected without Main mutation. +- Fixture generation, desktop checker, npm comparator, direct comparator, context governance, and artifact hashing passed. + +nextTask: `M16-GAP-00166` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00166.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00166.md new file mode 100644 index 00000000..085471b3 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00166.md @@ -0,0 +1,18 @@ +# M16-GAP-00166 Status + +status: done +task: anim.channels_select_filter operator LOCAL_EXACT slice +updated: 2026-08-21 America/New_York + +scope: + +- Action Editor `anim.channels_select_filter` persists the `Location` channel filter in the Dope Sheet editor workflow. + +evidence: + +- Blender desktop and WASM/Main expose the same Action Editor `filterText: "Location"` and the same three animation channels. +- The reader maps persisted `SpaceAction.ads.searchstr` to the optional editor area `filterText` field; protocol validation bounds the string to 64 bytes. +- Save/reopen preserves the editor workflow and animation snapshot exactly; malformed Blend input is rejected without Main mutation. +- Fixture generation, desktop checker, WebEngine rebuild, npm comparator, direct comparator, context governance, and artifact hashing passed. + +nextTask: `M16-GAP-00167` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00167.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00167.md new file mode 100644 index 00000000..9729cbe7 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00167.md @@ -0,0 +1,18 @@ +# M16-GAP-00167 Status + +status: done +task: anim.channels_setting_disable operator LOCAL_EXACT slice +updated: 2026-08-21 America/New_York + +scope: + +- Action Editor `anim.channels_setting_disable(type=PROTECT)` disables editability on all three selected F-Curve channels. + +evidence: + +- Blender desktop and WASM/Main expose the same three animation channels with `editable: false`. +- The existing reader mapping of the persisted F-Curve protection flag is sufficient for this setting. +- Save/reopen preserves the animation snapshot exactly; malformed Blend input is rejected without Main mutation. +- Fixture generation, desktop checker, npm comparator, direct comparator, context governance, and artifact hashing passed. + +nextTask: `M16-GAP-00168` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00168.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00168.md new file mode 100644 index 00000000..f8f221e8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00168.md @@ -0,0 +1,18 @@ +# M16-GAP-00168 Status + +status: done +task: anim.channels_setting_enable operator LOCAL_EXACT slice +updated: 2026-08-21 America/New_York + +scope: + +- Action Editor `anim.channels_setting_enable(type=PROTECT)` protects all three selected F-Curve channels. + +evidence: + +- Blender desktop and WASM/Main expose the same three animation channels with `editable: false`. +- The existing reader mapping of the persisted F-Curve protection flag is sufficient for this setting. +- Save/reopen preserves the animation snapshot exactly; malformed Blend input is rejected without Main mutation. +- Fixture generation, desktop checker, npm comparator, direct comparator, and artifact hashing passed. + +nextTask: `M16-GAP-00169` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00169.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00169.md new file mode 100644 index 00000000..ad4ace35 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00169.md @@ -0,0 +1,18 @@ +# M16-GAP-00169 Status + +status: done +task: anim.channels_setting_toggle operator LOCAL_EXACT slice +updated: 2026-08-21 America/New_York + +scope: + +- Action Editor `anim.channels_setting_toggle(type=PROTECT)` toggles protection on all three selected F-Curve channels. + +evidence: + +- Blender desktop and WASM/Main expose the same three animation channels with `editable: false` after the toggle. +- The existing reader mapping of the persisted F-Curve protection flag is sufficient for this setting. +- Save/reopen preserves the animation snapshot exactly; malformed Blend input is rejected without Main mutation. +- Fixture generation, desktop checker, npm comparator, direct comparator, and artifact hashing passed. + +nextTask: `M16-GAP-00170` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00170.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00170.md new file mode 100644 index 00000000..4eb2ae05 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00170.md @@ -0,0 +1,18 @@ +# M16-GAP-00170 Status + +status: done +task: anim.channels_ungroup operator LOCAL_EXACT slice +updated: 2026-08-21 America/New_York + +scope: + +- Action Editor `anim.channels_ungroup` removes all selected F-Curves from their Action Group. + +evidence: + +- Blender desktop and WASM/Main expose the same three animation channels with no group after ungrouping. +- The existing reader mapping of F-Curve group pointers is sufficient for the grouped and ungrouped states. +- Save/reopen preserves the animation snapshot exactly; malformed Blend input is rejected without Main mutation. +- Fixture generation, desktop checker, npm comparator, direct comparator, and artifact hashing passed. + +nextTask: `M16-GAP-00171` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00171.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00171.md new file mode 100644 index 00000000..6d50a700 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00171.md @@ -0,0 +1,17 @@ +# M16-GAP-00171 Status + +status: done +task: anim.channels_view_selected operator LOCAL_EXACT slice +updated: 2026-08-21 America/New_York + +scope: + +- Action Editor `anim.channels_view_selected` preserves the three selected F-Curves and exposes the resulting `view2d` state. + +evidence: + +- Blender desktop and WASM/Main expose the same three selected animation channels and the same six-decimal normalized Action Editor `view2d` bounds. +- Save/reopen preserves both the animation snapshot and editor workflow exactly; malformed Blend input is rejected without Main mutation. +- Fixture generation, desktop checker, npm comparator, direct comparator, and artifact hashing passed. + +nextTask: `M16-GAP-00172` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00172.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00172.md new file mode 100644 index 00000000..3b2ec555 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00172.md @@ -0,0 +1,17 @@ +# M16-GAP-00172 Status + +status: done +task: anim.clear_useless_actions operator LOCAL_EXACT slice +updated: 2026-08-21 America/New_York + +scope: + +- `anim.clear_useless_actions` removes the fake-user-only Action with no F-Curves while preserving the used Action and the fake-user Action library with F-Curves. + +evidence: + +- Blender desktop and WASM/Main expose the same two preserved Actions, each with three location channels and frames 1, 3, and 5; the empty Action is absent. +- Save/reopen preserves the animation snapshot exactly; malformed Blend input is rejected without Main mutation. +- Fixture generation, desktop checker, npm comparator, direct comparator, and artifact hashing passed. + +nextTask: `M16-GAP-00173` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00173.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00173.md new file mode 100644 index 00000000..a12b9273 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00173.md @@ -0,0 +1,18 @@ +# M16-GAP-00173 Status + +status: done +task: anim.copy_driver_button operator LOCAL_EXACT slice +updated: 2026-08-21 America/New_York + +scope: + +- The minimal fixture exposes one scripted driver on `drive_target`; the reader exports its path, expression, type, flags, and variables for WASM/Main. + +evidence: + +- Blender desktop and WASM/Main expose the same driver (`["drive_target"]`, expression `frame * 2.0 + 1.0`, type `SCRIPTED`), with value `3.0`. +- The desktop checker invokes `ANIM_OT_copy_driver_button` in the mandated `-b` context and records `CANCELLED`: the operator requires an active UI RNA button, so the cancellation leaves Main unchanged while the driver-read parity evidence remains exact. +- Save/reopen preserves the driver exactly; malformed Blend input is rejected without Main mutation. +- Fixture generation, desktop checker, npm comparator, direct comparator, and artifact hashing passed. + +nextTask: `M16-GAP-00174` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00174.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00174.md new file mode 100644 index 00000000..315bc119 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00174.md @@ -0,0 +1,17 @@ +# M16-GAP-00174 Status + +status: done +task: anim.driver_button_add operator LOCAL_EXACT slice +updated: 2026-08-21 America/New_York + +scope: + +- The minimal fixture contains an un-driven `drive_target` property; foreground Chromium-compatible Blender UI automation invokes `ANIM_OT_driver_button_add` on that exact RNA button and the reader preserves the resulting driver for WASM/Main. + +evidence: + +- Blender desktop registers a focused Properties panel, activates the real RNA button, and invokes `ANIM_OT_driver_button_add` through the UI context (`poll=true`, `FINISHED`, `DRIVER_ADDED`). +- Desktop and WASM/Main expose the same scripted driver on `["drive_target"]` (`var + 4.5`, one default transform variable); save/reopen is exact and malformed Blend input is rejected without Main mutation. +- Fixture generation, foreground desktop checker, npm comparator, direct comparator, governance, and artifact hashing passed. The checker is idempotent for the already-mutated exact fixture. + +nextTask: `M16-GAP-00175` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00175.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00175.md new file mode 100644 index 00000000..773cd84b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00175.md @@ -0,0 +1,16 @@ +# M16-GAP-00175 Status + +status: done +task: anim.driver_button_edit operator LOCAL_EXACT slice +updated: 2026-08-21 America/New_York + +scope: + +- The minimal fixture contains one scripted driver on `drive_target`; Blender desktop invokes `ANIM_OT_driver_button_edit` in the active Properties context (`poll=true`, `INTERFACE`) and preserves the driver without a Main mutation. + +evidence: + +- Desktop and WASM/Main expose the same driver (`["drive_target"]`, expression `frame * 2.5 + 1.25`, scripted, no variables); save/reopen is exact and malformed Blend input is rejected without Main mutation. +- Fixture generation, desktop checker, npm comparator, direct comparator, and artifact hashing passed. The edit operator is intentionally interface-only and leaves the driver unchanged. + +nextTask: `M16-GAP-00176` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00176.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00176.md new file mode 100644 index 00000000..3a3aa56b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00176.md @@ -0,0 +1,16 @@ +# M16-GAP-00176 Status + +status: done +task: anim.driver_button_remove operator LOCAL_EXACT slice +updated: 2026-08-21 America/New_York + +scope: + +- The minimal fixture starts with one scripted driver on `drive_target`; foreground Chromium-compatible Blender UI activates the RNA button and invokes `ANIM_OT_driver_button_remove(all=true)` (`poll=true`, `FINISHED`), removing that driver from Main. + +evidence: + +- Desktop and WASM/Main expose the same final object with no drivers; save/reopen is exact and malformed Blend input is rejected without Main mutation. +- Fixture generation, foreground desktop checker, npm comparator, direct comparator, and artifact hashing passed. The checker is idempotent for the already-removed exact fixture. + +nextTask: `M16-GAP-00177` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00177.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00177.md new file mode 100644 index 00000000..7e040e8e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00177.md @@ -0,0 +1,16 @@ +# M16-GAP-00177 Status + +status: done +task: anim.end_frame_set operator LOCAL_EXACT slice +updated: 2026-08-21 America/New_York + +scope: + +- The minimal scene starts at frame 42 with a scene range of 1-120; a foreground animation-area context invokes `ANIM_OT_end_frame_set` (`poll=true`, `FINISHED`) and sets the scene end frame to 42. + +evidence: + +- Desktop and WASM/Main expose the same frame state (`current=42`, `start=1`, `end=42`); save/reopen is exact and malformed Blend input is rejected without Main mutation. +- Fixture generation, foreground desktop checker, npm comparator, direct comparator, and artifact hashing passed. + +nextTask: `M16-GAP-00178` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00178.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00178.md new file mode 100644 index 00000000..b09f460a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00178.md @@ -0,0 +1,16 @@ +# M16-GAP-00178 Status + +status: done +task: anim.keyframe_clear_button operator LOCAL_EXACT slice +updated: 2026-08-21 America/New_York + +scope: + +- The minimal fixture animates one scalar custom RNA property, `clear_target`, on `WebGapAnimKeyframeClearButtonObject` at frames 1, 3, and 5. A foreground Properties context activates that RNA button and invokes `ANIM_OT_keyframe_clear_button(all=true)` (`poll=true`, `FINISHED`), leaving the Action with no F-Curves. + +evidence: + +- Desktop evidence records the property changing from three selected keyframes to none; WASM/Main reads the original channel as `["clear_target"][0]` and the cleared fixture with no matching animation. Save/reopen is exact and malformed Blend input is rejected without Main mutation. +- Fixture generation, foreground desktop checker, npm comparator, direct comparator, and artifact hashing passed. The checker and comparator are idempotent for the already-cleared exact fixture while retaining the original `before` evidence. + +nextTask: `M16-GAP-00179` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00179.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00179.md new file mode 100644 index 00000000..b5f14c29 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00179.md @@ -0,0 +1,16 @@ +# M16-GAP-00179 Status + +status: done +task: anim.keyframe_clear_v3d operator LOCAL_EXACT slice +updated: 2026-08-21 America/New_York + +scope: + +- The minimal fixture selects one object with a scalar `clear_target` Action at frames 1, 3, and 5. A foreground `VIEW_3D` context invokes `ANIM_OT_keyframe_clear_v3d(confirm=false)` (`poll=true`, `FINISHED`), removing all editable F-Curves from the selected object's Action. + +evidence: + +- Desktop evidence records the selected/active object changing from three selected keyframes to no F-Curves; WASM/Main reads the original channel as `["clear_target"][0]` and the cleared fixture with no matching animation. Save/reopen is exact and malformed Blend input is rejected without Main mutation. +- Fixture generation, foreground V3D desktop checker, npm comparator, direct comparator, and artifact hashing passed. The checker and comparator are idempotent for the already-cleared exact fixture while retaining the original `before` evidence. + +nextTask: `M16-GAP-00180` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00180.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00180.md new file mode 100644 index 00000000..ba4ea668 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00180.md @@ -0,0 +1,16 @@ +# M16-GAP-00180 Status + +status: done +task: anim.keyframe_clear_vse operator LOCAL_EXACT slice +updated: 2026-08-21 America/New_York + +scope: + +- The minimal fixture contains one selected image strip with a Scene Action animating `blend_alpha` at frames 1, 3, and 5. A real foreground `SEQUENCE_EDITOR` context invokes `ANIM_OT_keyframe_clear_vse(confirm=false)` (`poll=true`, `FINISHED`), removing the selected strip's editable F-Curve while preserving the strip and its evaluated value. + +evidence: + +- Desktop evidence records the selected/active strip changing from three selected keyframes to no F-Curves. WASM/Main reads the same Scene Action channel before clearing and no matching animation from the cleared fixture. Save/reopen is exact and malformed Blend input is rejected without Main mutation. +- Fixture generation, foreground VSE desktop checker, npm comparator, direct comparator, and artifact hashing passed. The checker is idempotent for the already-cleared exact fixture while retaining the original `before` evidence. + +nextTask: `M16-GAP-00181` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00181.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00181.md new file mode 100644 index 00000000..46f6d129 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00181.md @@ -0,0 +1,17 @@ +# M16-GAP-00181 Status + +status: done +task: anim.keyframe_delete operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one selected object with a custom `delete_target` property and an Action keyed at frames 1, 3, and 5. A dedicated active Keying Set targets that property. A real foreground `VIEW_3D` context invokes `ANIM_OT_keyframe_delete(type=WebGapAnimKeyframeDeleteSet)` (`poll=true`, `FINISHED`) at frame 3, deleting only the current keyframe and preserving the two surrounding keys. + +evidence: + +- Desktop evidence records the selected/active object and active Keying Set before deletion, then the Action changing from `[1, 3, 5]` to `[1, 5]`; the custom property remains at 3.0. Save/reopen is exact. +- WASM/Main reads the same fixture Action as one `[\"delete_target\"][0]` channel with three keyframes before the operation fixture and two keyframes after it. WASM save/reopen is exact, and malformed Blend input is rejected without Main mutation. +- Fixture generation, foreground `VIEW_3D` checker, npm comparator, direct comparator, idempotent rerun, and artifact hashing passed. No production reader or protocol change was required because the existing generic Action/F-Curve reader exposes this custom-property channel. + +nextTask: `M16-GAP-00182` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00182.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00182.md new file mode 100644 index 00000000..be4c3760 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00182.md @@ -0,0 +1,17 @@ +# M16-GAP-00182 Status + +status: done +task: anim.keyframe_delete_button operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one selected object with a custom `delete_target` property and an Action keyed at frames 1, 3, and 5. A registered Properties panel exposes the animated property as a real UI button. A foreground Properties context invokes `ANIM_OT_keyframe_delete_button(all=true)` through that active button at frame 3 (`poll=true`, `FINISHED`), deleting only the current keyframe and preserving the two surrounding keys. + +evidence: + +- Desktop evidence records the selected/active object changing from `[1, 3, 5]` to `[1, 5]`; the custom property remains at 3.0 and save/reopen is exact. +- WASM/Main reads the same Action as one `[\"delete_target\"][0]` channel with three keyframes before the operation fixture and two keyframes after it. WASM save/reopen is exact, and malformed Blend input is rejected without Main mutation. +- Fixture generation, foreground Properties UI checker, npm comparator, direct idempotent comparator, and artifact hashing passed. No production reader or protocol change was required because the existing generic Action/F-Curve reader exposes this custom-property channel. + +nextTask: `M16-GAP-00183` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00183.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00183.md new file mode 100644 index 00000000..c1e9b6ea --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00183.md @@ -0,0 +1,17 @@ +# M16-GAP-00183 Status + +status: done +task: anim.keyframe_delete_by_name operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one selected object with a custom `delete_target` property and an Action keyed at frames 1, 3, and 5. A named Keying Set targets that property. A foreground `VIEW_3D` context invokes `ANIM_OT_keyframe_delete_by_name(type=WebGapAnimKeyframeDeleteByNameSet)` (`poll=true`, `FINISHED`) at frame 3, deleting only the current keyframe and preserving the two surrounding keys. + +evidence: + +- Desktop evidence records the selected/active object and named Keying Set changing from `[1, 3, 5]` to `[1, 5]`; the custom property remains at 3.0 and save/reopen is exact. +- WASM/Main reads the same Action as one `[\"delete_target\"][0]` channel with three keyframes before the operation fixture and two keyframes after it. WASM save/reopen is exact, and malformed Blend input is rejected without Main mutation. +- Fixture generation, foreground `VIEW_3D` checker, npm comparator, direct idempotent comparator, and artifact hashing passed. No production reader or protocol change was required because the existing generic Action/F-Curve reader exposes this custom-property channel. + +nextTask: `M16-GAP-00184` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00184.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00184.md new file mode 100644 index 00000000..35e48fd8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00184.md @@ -0,0 +1,17 @@ +# M16-GAP-00184 Status + +status: done +task: anim.keyframe_delete_v3d operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one selected/active object with a custom `delete_target` property and an Action keyed at frames 1, 3, and 5. A foreground `VIEW_3D` context invokes `ANIM_OT_keyframe_delete_v3d(confirm=false)` (`poll=true`, `FINISHED`) at frame 3, deleting only the current keyframe and preserving the two surrounding keys. + +evidence: + +- Desktop evidence records the selected/active object changing from `[1, 3, 5]` to `[1, 5]`; the custom property remains at 3.0 and save/reopen is exact. +- WASM/Main reads the same Action as one `[\"delete_target\"][0]` channel with three keyframes before the operation fixture and two keyframes after it. WASM save/reopen is exact, and malformed Blend input is rejected without Main mutation. +- Fixture generation, foreground `VIEW_3D` checker, npm comparator, direct idempotent comparator, and artifact hashing passed. No production reader or protocol change was required because the existing generic Action/F-Curve reader exposes this custom-property channel. + +nextTask: `M16-GAP-00185` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00185.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00185.md new file mode 100644 index 00000000..045dc711 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00185.md @@ -0,0 +1,17 @@ +# M16-GAP-00185 Status + +status: done +task: anim.keyframe_delete_vse operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one selected/active image strip with a Scene Action animating `blend_alpha` at frames 1, 3, and 5. A foreground `SEQUENCE_EDITOR` context invokes `ANIM_OT_keyframe_delete_vse(confirm=false)` (`poll=true`, `FINISHED`) at frame 3, deleting only the current strip keyframe and preserving the two surrounding keys. + +evidence: + +- Desktop evidence records the selected/active strip changing from `[1, 3, 5]` to `[1, 5]`; `blend_alpha` remains 0.5 at frame 3 and save/reopen is exact. +- WASM/Main reads the same Scene Action as one `sequence_editor.strips_all[\"WebGapAnimKeyframeDeleteVSEStrip\"].blend_alpha[0]` channel with three keyframes before the operation fixture and two keyframes after it. WASM save/reopen is exact, and malformed Blend input is rejected without Main mutation. +- Fixture generation, foreground `SEQUENCE_EDITOR` checker, npm comparator, direct idempotent comparator, and artifact hashing passed. No production reader or protocol change was required because the existing generic Action/F-Curve reader exposes this Scene channel. + +nextTask: `M16-GAP-00186` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00186.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00186.md new file mode 100644 index 00000000..1a3cb63b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00186.md @@ -0,0 +1,17 @@ +# M16-GAP-00186 Status + +status: done +task: anim.keyframe_insert operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one selected/active object with a custom `insert_target` property and a named active Keying Set. Its Action starts with keys at frames 1 and 5. A foreground `VIEW_3D` context invokes `ANIM_OT_keyframe_insert()` (`poll=true`, `FINISHED`) at frame 3, inserting the current key while preserving the existing keys. + +evidence: + +- Desktop evidence records the Action changing from `[1, 5]` to `[1, 3, 5]`; the inserted key is the only selected key (`[false, true, false]`), the custom property remains at 3.0, and save/reopen is exact. +- WASM/Main reads the same Action as one `[\"insert_target\"][0]` channel with two keyframes before the operation fixture and three keyframes after it. WASM save/reopen is exact, and malformed Blend input is rejected without Main mutation. +- Fixture generation, foreground `VIEW_3D` checker, npm comparator, direct idempotent comparator, and artifact hashing passed. No production reader or protocol change was required because the existing generic Action/F-Curve reader exposes this custom-property channel. + +nextTask: `M16-GAP-00187` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00187.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00187.md new file mode 100644 index 00000000..b345ae88 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00187.md @@ -0,0 +1,17 @@ +# M16-GAP-00187 Status + +status: done +task: anim.keyframe_insert_button operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one selected/active object with a custom `insert_target` property and an Action keyed at frames 1 and 5. A registered Properties panel exposes the animated property as a real UI button. A foreground Properties context invokes `ANIM_OT_keyframe_insert_button(all=true)` through that active button at frame 3 (`poll=true`, `FINISHED`), inserting the current key while preserving the two existing keys. + +evidence: + +- Desktop evidence records the Action changing from `[1, 5]` to `[1, 3, 5]`; the inserted key is the only selected key (`[false, true, false]`), the custom property remains at 3.0 and save/reopen is exact. +- WASM/Main reads the same Action as one `[\"insert_target\"][0]` channel with two keyframes before the operation fixture and three keyframes after it. WASM save/reopen is exact, and malformed Blend input is rejected without Main mutation. +- Fixture generation, foreground Properties UI checker, npm comparator, direct idempotent comparator, and artifact hashing passed. No production reader or protocol change was required because the existing generic Action/F-Curve reader exposes this custom-property channel. + +nextTask: `M16-GAP-00188` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00188.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00188.md new file mode 100644 index 00000000..986d14a4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00188.md @@ -0,0 +1,17 @@ +# M16-GAP-00188 Status + +status: done +task: anim.keyframe_insert_by_name operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one selected/active object with a custom `insert_target` property, an Action keyed at frames 1 and 5, and a named Keying Set targeting that property. A foreground `VIEW_3D` context invokes `ANIM_OT_keyframe_insert_by_name(type=WebGapAnimKeyframeInsertByNameSet)` (`poll=true`, `FINISHED`) at frame 3, inserting the current key while preserving the two existing keys. + +evidence: + +- Desktop evidence records the Action changing from `[1, 5]` to `[1, 3, 5]`; the inserted key is the only selected key (`[false, true, false]`), the custom property remains at 3.0 and save/reopen is exact. +- WASM/Main reads the same Action as one `[\"insert_target\"][0]` channel with two keyframes before the operation fixture and three keyframes after it. WASM save/reopen is exact, and malformed Blend input is rejected without Main mutation. +- Fixture generation, foreground `VIEW_3D` checker, npm comparator, direct idempotent comparator, and artifact hashing passed. No production reader or protocol change was required because the existing generic Action/F-Curve reader exposes this custom-property channel. + +nextTask: `M16-GAP-00189` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00189.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00189.md new file mode 100644 index 00000000..a8c12f9c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00189.md @@ -0,0 +1,17 @@ +# M16-GAP-00189 Status + +status: done +task: anim.keyframe_insert_menu operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one selected/active object with a custom `insert_target` property, an Action keyed at frames 1 and 5, and a named active Keying Set. A foreground `VIEW_3D` context invokes `ANIM_OT_keyframe_insert_menu(always_prompt=false)` (`poll=true`, `FINISHED`); Blender takes the active-Keying-Set fast path and inserts the current key at frame 3. + +evidence: + +- Desktop evidence records the Action changing from `[1, 5]` to `[1, 3, 5]`; the inserted key is the only selected key (`[false, true, false]`), the custom property remains at 3.0 and save/reopen is exact. +- WASM/Main reads the same Action as one `[\"insert_target\"][0]` channel with two keyframes before the operation fixture and three keyframes after it. WASM save/reopen is exact, and malformed Blend input is rejected without Main mutation. +- Fixture generation, foreground `VIEW_3D` checker, npm comparator, direct idempotent comparator, and artifact hashing passed. No production reader or protocol change was required because the existing generic Action/F-Curve reader exposes this custom-property channel. + +nextTask: `M16-GAP-00190` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00190.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00190.md new file mode 100644 index 00000000..2d79656a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00190.md @@ -0,0 +1,17 @@ +# M16-GAP-00190 Status + +status: done +task: anim.keying_set_active_set operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one selected/active object with a custom `active_target` property, a three-key Action, and two named Keying Sets. A foreground `VIEW_3D` context invokes `ANIM_OT_keying_set_active_set(type=WebGapAnimKeyingSetActiveB)` (`poll=true`, `FINISHED`), changing the active Keying Set from A to B without changing the Action. + +evidence: + +- Desktop evidence records active Keying Set `WebGapAnimKeyingSetActiveA` changing to `WebGapAnimKeyingSetActiveB`; the Action remains `[1, 3, 5]`, the property remains 3.0, and save/reopen is exact. +- WASM/Main reads the same fixture with the visible Action unchanged and save/reopen exact. The current scene snapshot does not expose Keying Set metadata, so the report explicitly records `keyingSetMetadata: NOT_EXPOSED_BY_SCENE_SNAPSHOT`; malformed Blend input is rejected without Main mutation. +- Fixture generation, foreground `VIEW_3D` checker, npm comparator, direct idempotent comparator, and artifact hashing passed. No production reader or protocol change was made. + +nextTask: `M16-GAP-00191` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00191.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00191.md new file mode 100644 index 00000000..61336fb2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00191.md @@ -0,0 +1,17 @@ +# M16-GAP-00191 Status + +status: done +task: anim.keying_set_add operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one selected/active object with a custom `add_target` property and a three-key Action, but no scene Keying Sets. A foreground `VIEW_3D` context invokes `ANIM_OT_keying_set_add()` (`poll=true`, `FINISHED`), adding and activating one empty Keying Set without changing the Action. + +evidence: + +- Desktop evidence records Keying Set count `0→1`, an active newly-added set, unchanged `[1, 3, 5]` Action data, and exact save/reopen. +- WASM/Main reads the same fixture with the visible Action unchanged and save/reopen exact. The current scene snapshot does not expose Keying Set metadata, so the report explicitly records `keyingSetMetadata: NOT_EXPOSED_BY_SCENE_SNAPSHOT`; malformed Blend input is rejected without Main mutation. +- Fixture generation, foreground `VIEW_3D` checker, npm comparator, direct idempotent comparator, and artifact hashing passed. No production reader or protocol change was made. + +nextTask: `M16-GAP-00192` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00192.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00192.md new file mode 100644 index 00000000..42c44fed --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00192.md @@ -0,0 +1,17 @@ +# M16-GAP-00192 Status + +status: done +task: anim.keying_set_export operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one selected/active object with a custom `export_target` property, a three-key Action, and one named Keying Set. Blender invokes `ANIM_OT_keying_set_export(filepath=..., filter_python=true)` (`poll=true`, `FINISHED`) and writes the Keying Set Python export without mutating Main. + +evidence: + +- Desktop evidence records unchanged object/Action state, exact save/reopen, and a non-empty hash-bound exported Python script. +- WASM/Main reads the same fixture with the visible Action unchanged and save/reopen exact. The current scene snapshot does not expose Keying Set metadata, so the report explicitly records `keyingSetMetadata: NOT_EXPOSED_BY_SCENE_SNAPSHOT`; malformed Blend input is rejected without Main mutation. +- Fixture generation, background Blender export checker, npm comparator, direct idempotent comparator, export-script hashing, and artifact hashing passed. No production reader or protocol change was made. + +nextTask: `M16-GAP-00193` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00193.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00193.md new file mode 100644 index 00000000..97c0fa5b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00193.md @@ -0,0 +1,17 @@ +# M16-GAP-00193 Status + +status: done +task: anim.keying_set_path_add operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one selected/active object with a three-key Action and one empty active Keying Set. Blender invokes `ANIM_OT_keying_set_path_add()` (`poll=true`, `FINISHED`), adding one empty path with the expected default fields without changing the Action. + +evidence: + +- Desktop evidence records Keying Set path count `0→1`, the empty path defaults, unchanged `[1, 3, 5]` Action data, and exact save/reopen. +- WASM/Main reads the same post-operation fixture with the visible Action unchanged and save/reopen exact. The current scene snapshot does not expose Keying Set metadata, so the report records `keyingSetMetadata: NOT_EXPOSED_BY_SCENE_SNAPSHOT`; malformed Blend input is rejected without Main mutation. +- Fixture generation, background Blender operator checker, npm comparator, direct idempotent comparator, and artifact hashing passed. No production reader or protocol change was made. + +nextTask: `M16-GAP-00194` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00194.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00194.md new file mode 100644 index 00000000..661f6765 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00194.md @@ -0,0 +1,17 @@ +# M16-GAP-00194 Status + +status: done +task: anim.keying_set_path_remove operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one selected/active object with a three-key Action and one active Keying Set path. Blender invokes `ANIM_OT_keying_set_path_remove()` (`poll=true`, `FINISHED`), removing the active path without changing the Action. + +evidence: + +- Desktop evidence records Keying Set path count `1→0`, the pre-existing path fields, unchanged `[1, 3, 5]` Action data, and exact save/reopen. +- WASM/Main reads the same post-operation fixture with the visible Action unchanged and save/reopen exact. The current scene snapshot does not expose Keying Set metadata, so the report records `keyingSetMetadata: NOT_EXPOSED_BY_SCENE_SNAPSHOT`; malformed Blend input is rejected without Main mutation. +- Fixture generation, background Blender operator checker, npm comparator, direct idempotent comparator, and artifact hashing passed. No production reader or protocol change was made. + +nextTask: `M16-GAP-00195` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00195.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00195.md new file mode 100644 index 00000000..298901bf --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00195.md @@ -0,0 +1,17 @@ +# M16-GAP-00195 Status + +status: done +task: anim.keying_set_remove operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one selected/active object with a three-key Action and one empty active Keying Set. Blender invokes `ANIM_OT_keying_set_remove()` (`poll=true`, `FINISHED`), removing the active Keying Set without changing the Action. + +evidence: + +- Desktop evidence records Keying Set count `1→0`, active set `WebGapAnimKeyingSetRemoveSet→null`, unchanged `[1, 3, 5]` Action data, and exact save/reopen. +- WASM/Main reads the same post-operation fixture with the visible Action unchanged and save/reopen exact. The current scene snapshot does not expose Keying Set metadata, so the report records `keyingSetMetadata: NOT_EXPOSED_BY_SCENE_SNAPSHOT`; malformed Blend input is rejected without Main mutation. +- Fixture generation, background Blender operator checker, npm comparator, direct idempotent comparator, and artifact hashing passed. No production reader or protocol change was made. + +nextTask: `M16-GAP-00196` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00196.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00196.md new file mode 100644 index 00000000..f9c91d32 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00196.md @@ -0,0 +1,17 @@ +# M16-GAP-00196 Status + +status: done +task: anim.keyingset_button_add operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one selected/active object with a three-key Action and no scene Keying Set. A real `PROPERTIES` RNA button invokes `ANIM_OT_keyingset_button_add()` (`poll=true`, `FINISHED`), creating `ButtonKeyingSet` and adding the active `button_target` path. + +evidence: + +- Desktop evidence records Keying Set count `0→1`, path count `0→1`, exact path fields, unchanged `[1, 3, 5]` Action data, and exact save/reopen. +- WASM/Main reads the same post-operation fixture with the visible Action unchanged and save/reopen exact. The current scene snapshot does not expose Keying Set metadata, so the report records `keyingSetMetadata: NOT_EXPOSED_BY_SCENE_SNAPSHOT`; malformed Blend input is rejected without Main mutation. +- Fixture generation, foreground Chromium-scope desktop UI checker, npm comparator, direct idempotent comparator, and artifact hashing passed. No production reader or protocol change was made. + +nextTask: `M16-GAP-00197` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00197.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00197.md new file mode 100644 index 00000000..4c5e897b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00197.md @@ -0,0 +1,17 @@ +# M16-GAP-00197 Status + +status: done +task: anim.keyingset_button_remove operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one selected/active object with a three-key Action and one active `ButtonKeyingSet` path. A real `PROPERTIES` RNA button invokes `ANIM_OT_keyingset_button_remove()` (`poll=true`, `FINISHED`), removing the active property path without changing the Action. + +evidence: + +- Desktop evidence records path count `1→0`, the unchanged active Keying Set, exact pre-existing path fields, unchanged `[1, 3, 5]` Action data, and exact save/reopen. +- WASM/Main reads the same post-operation fixture with the visible Action unchanged and save/reopen exact. The current scene snapshot does not expose Keying Set metadata, so the report records `keyingSetMetadata: NOT_EXPOSED_BY_SCENE_SNAPSHOT`; malformed Blend input is rejected without Main mutation. +- Fixture generation, foreground desktop UI checker, npm comparator, direct idempotent comparator, and artifact hashing passed. No production reader or protocol change was made. + +nextTask: `M16-GAP-00198` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00198.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00198.md new file mode 100644 index 00000000..a8f830bc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00198.md @@ -0,0 +1,18 @@ +# M16-GAP-00198 Status + +status: done +task: anim.merge_animation operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains two selected mesh objects. The active object owns `WebGapAnimMergeActiveAction`; the source object owns `WebGapAnimMergeSourceAction`, each with one three-key custom-property channel. +- Blender invokes `ANIM_OT_merge_animation` with `poll=true` and `FINISHED`, moving the source slot into the active action. Both objects then observe `WebGapAnimMergeActiveAction` with both channels; the source action has no remaining users. + +evidence: + +- Desktop evidence records the exact pre/post action channels, operator status, active/selected state, and save/reopen stability. +- WASM/Main reads the post-operation fixture with two `WebGapAnimMergeActiveAction` animation entries (one per object), both carrying the merged channels; save/reopen is exact and malformed Blend input is rejected without Main mutation. +- Fixture generation, background desktop operator checker, npm comparator, direct idempotent comparator, Python syntax checks, and artifact hashing passed. No production reader or protocol change was made. + +nextTask: `M16-GAP-00199` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00199.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00199.md new file mode 100644 index 00000000..2c61b088 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00199.md @@ -0,0 +1,18 @@ +# M16-GAP-00199 Status + +status: done +task: anim.paste_driver_button operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one mesh object with a driven `source_target` custom property and an undriven `paste_target` custom property. Desktop UI evidence copies the source driver and pastes it into the target through `ANIM_OT_paste_driver_button`. +- The saved fixture exposes both scripted drivers with the same expression in WASM/Main; no reader, protocol, or browser change was required. + +evidence: + +- Desktop evidence records the source/target driver state before and after the UI operation, `poll=true`, `FINISHED`, `DRIVER_PASTED`, and exact save/reopen. The checker also preserves this evidence on repeated runs. +- WASM/Main reads both drivers from the same fixture, preserves them across save/reopen, and rejects malformed Blend input without Main mutation. +- Fixture generation, foreground desktop checker, npm comparator, direct comparator, and task-context checks passed. Chromium-only policy was preserved; no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00200` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00200.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00200.md new file mode 100644 index 00000000..1269905d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00200.md @@ -0,0 +1,18 @@ +# M16-GAP-00200 Status + +status: done +task: anim.previewrange_clear operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture starts with a `2..6` scene preview range. Desktop runs `ANIM_OT_previewrange_clear` in the active Dope Sheet animation context and saves the cleared Main. +- WASM/Main observes the same scene with no `previewRange` field and an unchanged frame range; no reader, protocol, or browser change was required. + +evidence: + +- Desktop evidence records `poll=true`, `FINISHED`, `PREVIEW_RANGE_CLEARED`, the cleared values, and exact save/reopen. Repeated checker runs preserve the fixture hash. +- WASM/Main compares the cleared scene, preserves it across save/reopen, and rejects malformed Blend input without Main mutation. +- Fixture generation, desktop checker, npm comparator, direct comparator, and task-context checks passed. Chromium-only policy was preserved; no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00201` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00201.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00201.md new file mode 100644 index 00000000..793678be --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00201.md @@ -0,0 +1,18 @@ +# M16-GAP-00201 Status + +status: done +task: anim.previewrange_set operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture uses the active Dope Sheet animation region and a deterministic border gesture to set the Scene preview range to `2..6` through `ANIM_OT_previewrange_set`. +- WASM/Main observes the same `previewRange` and frame bounds; no reader, protocol, or browser change was required. + +evidence: + +- Desktop evidence records the animation-region poll, `FINISHED`, `PREVIEW_RANGE_SET`, the `2..6` values, and exact save/reopen. +- WASM/Main compares the preview range from the same fixture, preserves it across save/reopen, and rejects malformed Blend input without Main mutation. +- Fixture generation, desktop checker, npm comparator, direct comparator, and task-context checks passed. Chromium-only policy was preserved; no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00202` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00202.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00202.md new file mode 100644 index 00000000..a5379e59 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00202.md @@ -0,0 +1,18 @@ +# M16-GAP-00202 Status + +status: done +task: anim.replace_action operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture has two objects using `WebGapAnimReplaceOldAction` and one object using `WebGapAnimReplaceNewAction`. Desktop calls `ANIM_OT_replace_action` with the explicit action session UIDs. +- All three object users switch to the new action; the old action remains unlinked with its original channels. WASM/Main exposes both the replaced users and preserved unlinked action without reader/protocol changes. + +evidence: + +- Desktop evidence records the old/new action users, `poll=true`, `FINISHED`, `ACTIONS_REPLACED`, and exact save/reopen. Repeated checker runs preserve the initial evidence and fixture hash. +- WASM/Main compares three new-action targets and the unlinked old action, preserves them across save/reopen, and rejects malformed Blend input without Main mutation. +- Fixture generation, desktop checker, npm comparator, direct comparator, and task-context checks passed. Chromium-only policy was preserved; no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00203` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00203.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00203.md new file mode 100644 index 00000000..550bfbda --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00203.md @@ -0,0 +1,18 @@ +# M16-GAP-00203 Status + +status: done +task: anim.replace_action_new operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture has two objects using `WebGapAnimReplaceNewOldAction`. Desktop runs `ANIM_OT_replace_action_new` with the old action session UID; Blender creates a new empty action and assigns it to both users. +- The old action remains unlinked with its original channels. WASM/Main preserves that visible old-action evidence; the empty replacement action is intentionally not exposed as an animation entry. + +evidence: + +- Desktop evidence records `poll=true`, `FINISHED`, `ACTION_REPLACED_WITH_NEW`, the new action assignment, and exact save/reopen. Repeated checker runs preserve the initial evidence and fixture hash. +- WASM/Main compares the unlinked old action, preserves it across save/reopen, and rejects malformed Blend input without Main mutation. +- Fixture generation, desktop checker, npm comparator, direct comparator, and task-context checks passed. Chromium-only policy was preserved; no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00204` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00204.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00204.md new file mode 100644 index 00000000..ffcbbba6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00204.md @@ -0,0 +1,18 @@ +# M16-GAP-00204 Status + +status: done +task: anim.scene_range_frame operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture uses a Dope Sheet animation region with an active preview playback range. Desktop runs `ANIM_OT_scene_range_frame` and frames the region to that scene range. +- The resulting `view2d` state is observable in WASM/Main editor workflow data; no reader, protocol, or browser change was required. + +evidence: + +- Desktop evidence records `poll=true`, `FINISHED`, `VIEW_FRAMED_TO_SCENE_RANGE`, the exact view bounds, and save/reopen stability. +- WASM/Main matches the same Dope Sheet `view2d`, preserves editor workflow across save/reopen, and rejects malformed Blend input without Main mutation. +- Fixture generation, desktop checker, npm comparator, direct comparator, and task-context checks passed. Chromium-only policy was preserved; no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00205` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00205.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00205.md new file mode 100644 index 00000000..aa23a594 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00205.md @@ -0,0 +1,18 @@ +# M16-GAP-00205 Status + +status: done +task: anim.separate_slots operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture has two objects using separate slots in one layered action. Desktop runs `ANIM_OT_separate_slots` and creates one action per slot, reassigning the two objects. +- WASM/Main observes the two new action targets and their slot-specific channels; the original action is empty and omitted from the animation snapshot. + +evidence: + +- Desktop evidence records `poll=true`, `FINISHED`, `SLOTS_SEPARATED`, both new action assignments, and exact save/reopen. Repeated checker runs preserve the initial evidence and fixture hash. +- WASM/Main compares both separated actions, preserves them across save/reopen, and rejects malformed Blend input without Main mutation. +- Fixture generation, desktop checker, npm comparator, direct comparator, and task-context checks passed. Chromium-only policy was preserved; no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00206` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00206.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00206.md new file mode 100644 index 00000000..65b49073 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00206.md @@ -0,0 +1,18 @@ +# M16-GAP-00206 Status + +status: done +task: anim.slot_channels_move_to_new_action operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture has two objects using separate slots in one action. Desktop selects one Action Slot in the Action Editor and runs `ANIM_OT_slot_channels_move_to_new_action`. +- The selected slot moves to `WebGapMoveSlotAAction`; the other object remains on the original action. WASM/Main observes both resulting action targets without reader/protocol changes. + +evidence: + +- Desktop evidence records `poll=true`, `FINISHED`, `SLOT_MOVED_TO_NEW_ACTION`, both action assignments, and exact save/reopen. Repeated checker runs preserve the initial evidence and fixture hash. +- WASM/Main compares the moved and remaining channels, preserves them across save/reopen, and rejects malformed Blend input without Main mutation. +- Fixture generation, desktop checker, npm comparator, direct comparator, and task-context checks passed. Chromium-only policy was preserved; no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00207` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00207.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00207.md new file mode 100644 index 00000000..27695c80 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00207.md @@ -0,0 +1,18 @@ +# M16-GAP-00207 Status + +status: done +task: anim.slot_new_for_id operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture assigns one Action Slot to `WebGapAnimNewSlotObject`; desktop runs `ANIM_OT_slot_new_for_id` with the animated ID context and duplicates the slot and channelbag. +- The WASM/Main reader now selects the assigned `AnimData.slot_handle` channelbag and exposes `slotIdentifier` and `slotCount` on the animation snapshot. The duplicated slot remains stable across save/reopen. + +evidence: + +- Desktop evidence records `poll=true`, `FINISHED`, `SLOT_DUPLICATED`, both Slot identifiers, and exact save/reopen. Repeated checker runs preserve the initial evidence and fixture hash. +- WASM/Main observes `OBWebGapAnimNewSlot.001`, two slots, the expected keyframes, exact save/reopen, and rejects malformed Blend input without Main mutation. +- The generator, npm comparator, direct comparator, WebEngine rebuild, and task-context checks passed. Chromium-only policy was preserved; no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00208` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00208.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00208.md new file mode 100644 index 00000000..7ef071cf --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00208.md @@ -0,0 +1,18 @@ +# M16-GAP-00208 Status + +status: done +task: anim.slot_unassign_from_constraint operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture gives `WebGapAnimConstraintSlotObject` an Action constraint with `WebGapAnimConstraintSlotAction` and one assigned `OBWebGapConstraintSlot`. +- Desktop runs `ANIM_OT_slot_unassign_from_constraint` with the constraint context pointer. The reader exposes the constraint's action, slot identifier, handle, and assigned state in the node snapshot. + +evidence: + +- Desktop evidence records `poll=true`, `FINISHED`, `CONSTRAINT_SLOT_UNASSIGNED`, the nonzero-to-zero handle transition, and exact save/reopen. Repeated checker runs preserve the initial evidence and fixture hash. +- WASM/Main observes the retained action and identifier with `actionSlotAssigned=false` and handle `0`, preserves it across save/reopen, and rejects malformed Blend input without Main mutation. +- The generator, npm comparator, direct comparator, WebEngine rebuild, and task-context checks passed. Chromium-only policy was preserved; no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00209` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00209.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00209.md new file mode 100644 index 00000000..b99e7ef3 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00209.md @@ -0,0 +1,18 @@ +# M16-GAP-00209 Status + +status: done +task: anim.slot_unassign_from_id operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture assigns `OBWebGapUnassignIdSlot` to `WebGapAnimUnassignIdObject` through `WebGapAnimUnassignIdAction` and keys one custom property. +- Desktop runs `ANIM_OT_slot_unassign_from_id` with the animated ID context. The reader preserves the Action animation and exposes the retained slot identifier plus assigned/handle state. + +evidence: + +- Desktop evidence records `poll=true`, `FINISHED`, `ID_SLOT_UNASSIGNED`, the nonzero-to-zero handle transition, retained `lastSlotIdentifier`, and exact save/reopen. Repeated checker runs preserve the initial evidence and fixture hash. +- WASM/Main observes `slotAssigned=false` and handle `0` with the expected keyframes, preserves it across save/reopen, and rejects malformed Blend input without Main mutation. +- The generator, npm comparator, direct comparator, WebEngine rebuild, and task-context checks passed. Chromium-only policy was preserved; no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00210` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00210.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00210.md new file mode 100644 index 00000000..83b2a324 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00210.md @@ -0,0 +1,18 @@ +# M16-GAP-00210 Status + +status: done +task: anim.slot_unassign_from_nla_strip operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains `WebGapNlaSlotTrack` with `WebGapNlaSlotStrip` referencing `WebGapAnimNlaSlotAction` and `OBWebGapNlaSlot`. +- Desktop runs `ANIM_OT_slot_unassign_from_nla_strip` with the NLA strip context pointer. The reader exposes NLA strip slot identifier, handle, and assigned state. + +evidence: + +- Desktop evidence records `poll=true`, `FINISHED`, `NLA_SLOT_UNASSIGNED`, the nonzero-to-zero handle transition, retained `lastSlotIdentifier`, and exact save/reopen. Repeated checker runs preserve the initial evidence and fixture hash. +- WASM/Main observes the same strip and Action with `actionSlotAssigned=false` and handle `0`, preserves it across save/reopen, and rejects malformed Blend input without Main mutation. +- The generator, npm comparator, direct comparator, WebEngine rebuild, and task-context checks passed. Chromium-only policy was preserved; no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00211` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00211.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00211.md new file mode 100644 index 00000000..2bfb26ab --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00211.md @@ -0,0 +1,18 @@ +# M16-GAP-00211 Status + +status: done +task: anim.start_frame_set operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal scene starts at frame 42 with a scene range of 1-120. The foreground animation-area context invokes `ANIM_OT_start_frame_set` (`poll=true`, `FINISHED`) and sets the scene start frame to 42. +- The existing Main reader exposes the same scene frame tuple through `Scene.r.cfra`, `Scene.r.sfra`, and `Scene.r.efra`; no unrelated data-block, editor, or browser behavior was changed. + +evidence: + +- Desktop evidence records `FRAME_START_SET` and exact save/reopen. Repeated comparator runs preserve the fixture hash and report shape. +- WASM/Main observes `{current: 42, start: 42, end: 120}` from the same fixture, preserves it across save/reopen, and rejects malformed Blend input without Main mutation. +- The generator, npm comparator, direct comparator, and task-context checks passed. Chromium-only policy was preserved; no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00212` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00212.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00212.md new file mode 100644 index 00000000..da01c3f9 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00212.md @@ -0,0 +1,19 @@ +# M16-GAP-00212 Status + +status: done +task: anim.update_animated_transform_constraints operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains a mesh object with a `TRANSFORM` constraint mapped from rotation and one animated legacy `from_min_x` F-curve. +- Desktop runs `ANIM_OT_update_animated_transform_constraints(use_convert_to_radians=true)` (`poll=true`, `FINISHED`) and rewrites the channel path to `from_min_x_rot`. +- The existing Main reader exposes the rewritten Action channel and Transform constraint metadata; no unrelated data-block, editor, or browser behavior was changed. + +evidence: + +- Desktop evidence records the old and rewritten paths, `TRANSFORM_CONSTRAINT_PATHS_UPDATED`, and exact save/reopen. Repeated checker runs preserve the initial report and fixture hash. +- WASM/Main observes the same Action channel at `constraints["WebGapAnimatedTransformConstraint"].from_min_x_rot[0]`, keyframes at frames 1 and 10, constraint type code 19, exact save/reopen, and malformed Blend rejection without Main mutation. +- The generator, npm comparator, direct comparator, and task-context checks passed. Chromium-only policy was preserved; no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00213` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00213.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00213.md new file mode 100644 index 00000000..088d5d27 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00213.md @@ -0,0 +1,19 @@ +# M16-GAP-00213 Status + +status: done +task: anim.version_bone_hide_property operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one selected armature object, one bone, an armature-data Action with `bones["WebGapVersionBoneHideBone"].hide`, and an object Action with an anchor channel. +- Desktop runs `ANIM_OT_version_bone_hide_property` (`poll=true`, `FINISHED`) and copies the hide F-curve into the object Action as `pose.bones["WebGapVersionBoneHideBone"].hide`, retaining the armature source channel. +- The existing Main reader exposes both Action channels and the armature data; no unrelated data-block, editor, or browser behavior was changed. + +evidence: + +- Desktop evidence records `BONE_HIDE_FCURVE_MOVED_TO_OBJECT_ACTION` and exact save/reopen. Repeated checker runs preserve the initial report and fixture hash. +- WASM/Main observes the copied object channel with frames 1 and 10 and values 0 and 1, retains the armature Action channel, preserves both across save/reopen, and rejects malformed Blend input without Main mutation. +- The generator, npm comparator, direct comparator, and task-context checks passed. Chromium-only policy was preserved; no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00214` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00214.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00214.md new file mode 100644 index 00000000..2f17150f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00214.md @@ -0,0 +1,19 @@ +# M16-GAP-00214 Status + +status: done +task: anim.view_curve_in_graph_editor operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one selected mesh object, one custom animated scalar property with frames 1 and 10, and a persisted Graph Editor area. +- Desktop activates the property button and runs `ANIM_OT_view_curve_in_graph_editor` with `poll=true` and `FINISHED`; the operator changes the Graph Editor view bounds while leaving the Action data unchanged. +- The Main reader now exposes `View2D` state for `GRAPH` editor main regions, alongside the existing Dope Sheet exposure. No other editor or data-block behavior changed. + +evidence: + +- Desktop evidence records `GRAPH_VIEW_FRAMED`, exact save/reopen, and the before/after Graph Editor bounds. The source fixture remains the minimal persisted Graph Editor state used by WASM/Main. +- WASM/Main observes the same fixture's `GRAPH` main-region `View2D`, preserves it across save/reopen, and rejects malformed Blend input without Main mutation. +- The generator, npm comparator, direct comparator, Chromium-only foreground desktop run, and task-context checks passed. No Firefox/WebKit run was made. + +nextTask: `M16-GAP-00215` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00215.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00215.md new file mode 100644 index 00000000..2ed6e3f6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00215.md @@ -0,0 +1,19 @@ +# M16-GAP-00215 Status + +status: done +task: armature.align operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one armature with two independent edit bones. The child starts at an angled axis and the parent is the active selected bone. +- Desktop runs `ARMATURE_OT_align` with `poll=true` and `FINISHED`, aligns the child axis to the active parent, and preserves the result through save/reopen. +- The existing Main reader exposes the same armature bone `head`/`tail` data; no other data-block, editor, or browser behavior changed. + +evidence: + +- The generator, desktop checker, npm comparator, direct comparator, and task-context checks passed. The checker is repeat-safe after a persisted aligned fixture and records the aligned child state. +- WASM/Main observes the same parent/child coordinates, preserves them across save/reopen, and rejects malformed Blend input without Main mutation. +- Chromium-only policy was preserved; no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00216` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00216.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00216.md new file mode 100644 index 00000000..470a6f08 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00216.md @@ -0,0 +1,19 @@ +# M16-GAP-00216 Status + +status: done +task: armature.assign_to_collection operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one armature with source and target bone collections, one parent bone, and one selected child initially assigned only to the source collection. +- Desktop runs `ARMATURE_OT_assign_to_collection(collection_index=1)` with `poll=true` and `FINISHED`, assigning the child to the target collection and preserving both memberships through save/reopen. +- The Main reader now exposes bounded armature `boneCollections` entries with collection name/index and member bone IDs. No other collection, editor, or browser behavior changed. + +evidence: + +- The reader rebuild, generator, desktop checker, npm comparator, direct comparator, and task-context checks passed. Repeated checker runs recognize the persisted assignment and remain idempotent. +- WASM/Main observes source and target membership for the same child bone, preserves it across save/reopen, and rejects malformed Blend input without Main mutation. +- Chromium-only policy was preserved; no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00217` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00217.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00217.md new file mode 100644 index 00000000..22f8fe4e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00217.md @@ -0,0 +1,19 @@ +# M16-GAP-00217 Status + +status: done +task: armature.autoside_names operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one armature with two selected bones on opposite sides of the X axis. +- Desktop runs `ARMATURE_OT_autoside_names(type='XAXIS')` with `poll=true` and `FINISHED`, naming the positive-X bone `.L` and the negative-X bone `.R`, then preserves both names through save/reopen. +- The existing Main reader exposes the same armature bone names; no new reader field, data-block, editor, or browser behavior was added. + +evidence: + +- The generator, desktop checker, npm comparator, direct comparator, and task-context checks passed. Repeated checker runs recognize the persisted names and remain idempotent. +- WASM/Main observes the same `.L`/`.R` names for the same fixture, preserves them across save/reopen, and rejects malformed Blend input without Main mutation. +- Chromium-only policy was preserved; no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00218` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00218.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00218.md new file mode 100644 index 00000000..8207385d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00218.md @@ -0,0 +1,19 @@ +# M16-GAP-00218 Status + +status: done +task: armature.bone_primitive_add operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one empty armature object and a fixed 3D cursor at `(1.5, -2.0, 0.75)`. +- Desktop runs `ARMATURE_OT_bone_primitive_add(name, length=2.5, align='UP', space='OBJECT', use_deform=false)` with `poll=true` and `FINISHED`, creating the named bone at the cursor and preserving its head/tail through save/reopen. +- The existing Main reader exposes the same armature bone name and coordinates; no new reader field, data-block, editor, or browser behavior was added. + +evidence: + +- The generator, desktop checker, npm comparator, direct comparator, and task-context checks passed. Repeated checker runs recognize the persisted bone and remain idempotent. +- WASM/Main observes the same cursor-created bone, preserves it across save/reopen, and rejects malformed Blend input without Main mutation. +- Chromium-only policy was preserved; no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00219` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00219.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00219.md new file mode 100644 index 00000000..d0de2196 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00219.md @@ -0,0 +1,19 @@ +# M16-GAP-00219 Status + +status: done +task: armature.calculate_roll operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one selected bone aligned along +Y with zero initial roll. +- Desktop runs `ARMATURE_OT_calculate_roll(type='GLOBAL_POS_X', axis_flip=false, axis_only=false)` with `poll=true` and `FINISHED`, producing a roll of approximately `pi/2` and preserving the resulting matrix through save/reopen. +- The existing Main reader exposes the same armature bone head/tail and rest matrix; no new reader field, data-block, editor, or browser behavior was added. + +evidence: + +- The generator, desktop checker, npm comparator, direct comparator, and task-context checks passed. Repeated checker runs recognize the persisted roll and remain idempotent. +- WASM/Main observes the same calculated orientation, preserves it across save/reopen, and rejects malformed Blend input without Main mutation. +- Chromium-only policy was preserved; no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00220` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00220.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00220.md new file mode 100644 index 00000000..8f7b8116 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00220.md @@ -0,0 +1,19 @@ +# M16-GAP-00220 Status + +status: done +task: armature.click_extrude operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one selected armature bone from `(0, 0, 0)` to `(0, 2, 0)` and a fixed cursor at `(1.5, 2.0, 1.0)`. +- Desktop runs `ARMATURE_OT_click_extrude` with `poll=true` and `FINISHED`, creating a connected `.001` child whose armature-space tail reaches the cursor and preserving it through save/reopen. +- The existing Main reader exposes the parent relationship, raw child coordinates, and rest matrix; the comparator derives the same armature-space endpoint without changing unrelated armature fields. + +evidence: + +- The generator, desktop checker, npm comparator, direct comparator, and task-context checks passed. Repeated checker runs recognize the persisted child and remain idempotent. +- WASM/Main observes the same two-bone hierarchy, preserves it across save/reopen, and rejects malformed Blend input without Main mutation. +- Chromium-only policy was preserved; no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00221` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00221.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00221.md new file mode 100644 index 00000000..6445439a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00221.md @@ -0,0 +1,19 @@ +# M16-GAP-00221 Status + +status: done +task: armature.collection_add operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one armature bone assigned to `WebGapArmatureCollectionAddExisting`. +- Desktop runs `ARMATURE_OT_collection_add` with `poll=true` and `FINISHED`, creating the `Bones` collection as index 1 and preserving the existing bone membership through save/reopen. +- The existing Main reader exposes both bone collections and their member IDs; no new reader field, data-block, editor, or browser behavior was added. + +evidence: + +- The generator, desktop checker, npm comparator, direct comparator, and task-context checks passed. Repeated checker runs recognize the persisted collection and remain idempotent. +- WASM/Main observes the same collection names, indices, and memberships, preserves them across save/reopen, and rejects malformed Blend input without Main mutation. +- Chromium-only policy was preserved; no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00222` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00222.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00222.md new file mode 100644 index 00000000..e008ff86 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00222.md @@ -0,0 +1,19 @@ +# M16-GAP-00222 Status + +status: done +task: armature.collection_assign operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one armature bone assigned to `WebGapArmatureCollectionAssignSource` and an empty target collection. +- Desktop runs `ARMATURE_OT_collection_assign(name=target)` with `poll=true` and `FINISHED`, adding the selected bone to the target while preserving its source membership through save/reopen. +- The existing Main reader exposes both collection member ID lists; no new reader field, data-block, editor, or browser behavior was added. + +evidence: + +- The generator, desktop checker, npm comparator, direct comparator, and task-context checks passed. Repeated checker runs recognize the persisted assignment and remain idempotent. +- WASM/Main observes the same assigned bone ID in both collections, preserves it across save/reopen, and rejects malformed Blend input without Main mutation. +- Chromium-only policy was preserved; no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00223` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00223.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00223.md new file mode 100644 index 00000000..2c4163b7 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00223.md @@ -0,0 +1,19 @@ +# M16-GAP-00223 Status + +status: done +task: armature.collection_create_and_assign operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one armature bone assigned to `WebGapArmatureCollectionCreateAssignSource`. +- Desktop runs `ARMATURE_OT_collection_create_and_assign(name=WebGapArmatureCollectionCreateAssignNew)` with `poll=true` and `FINISHED`, creating and activating the new collection while assigning the selected bone and preserving source membership through save/reopen. +- The existing Main reader exposes both collection member ID lists and collection indices; no new reader field, data-block, editor, or browser behavior was added. + +evidence: + +- The generator, desktop checker, npm comparator, direct comparator, and task-context checks passed. Repeated checker runs recognize the persisted created collection and remain idempotent. +- WASM/Main observes the same created collection, active ordering, and assigned bone ID, preserves them across save/reopen, and rejects malformed Blend input without Main mutation. +- Chromium-only policy was preserved; no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00224` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00224.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00224.md new file mode 100644 index 00000000..c395e157 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00224.md @@ -0,0 +1,19 @@ +# M16-GAP-00224 Status + +status: done +task: armature.collection_deselect operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains two bones in separate bone collections, both initially selected, with the active collection at index 0. +- Desktop runs `ARMATURE_OT_collection_deselect` with `poll=true` and `FINISHED`, deselecting only the active collection bone while retaining the other selection through save/reopen. +- Main now exposes the persisted armature bone `selected` bit alongside the existing bone collection membership data; no other data-block, editor, or browser behavior was added. + +evidence: + +- The generator, desktop checker, npm comparator, direct comparator, Web Engine rebuild, and task-context checks passed. Repeated checker runs recognize the already-deselected fixture and remain idempotent. +- WASM/Main observes the same selected states, preserves them across save/reopen, and rejects malformed Blend input without Main mutation. +- Chromium-only policy was preserved; no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00225` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00225.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00225.md new file mode 100644 index 00000000..5c372e9a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00225.md @@ -0,0 +1,19 @@ +# M16-GAP-00225 Status + +status: done +task: armature.collection_move operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains three bone collections, each retaining one distinct bone, with the middle collection active at index 1. +- Desktop runs `ARMATURE_OT_collection_move(direction='UP')` with `poll=true` and `FINISHED`, moving the active collection to index 0 while preserving every collection member through save/reopen. +- The existing Main reader's collection indices and bone IDs provide the observable order; no new data-block, editor, or browser behavior was added. + +evidence: + +- The generator, desktop checker, npm comparator, direct comparator, and task-context checks passed. Repeated checker runs recognize the already-moved order and remain idempotent. +- WASM/Main observes the same collection order, active collection identity, and bone IDs, preserves them across save/reopen, and rejects malformed Blend input without Main mutation. +- Chromium-only policy was preserved; no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00226` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00226.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00226.md new file mode 100644 index 00000000..35b132de --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00226.md @@ -0,0 +1,19 @@ +# M16-GAP-00226 Status + +status: done +task: armature.collection_remove operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains three bone collections, each initially retaining one distinct bone, with the middle collection active at index 1. +- Desktop runs `ARMATURE_OT_collection_remove` with `poll=true` and `FINISHED`, removing the active collection, leaving its bone unassigned, and preserving the remaining collections through save/reopen. +- The existing Main reader's collection indices and bone IDs provide the observable removal; no new data-block, editor, or browser behavior was added. + +evidence: + +- The generator, desktop checker, npm comparator, direct comparator, and task-context checks passed. Repeated checker runs recognize the already-removed collection and remain idempotent. +- WASM/Main observes the same remaining collection order, member IDs, and unassigned removed bone, preserves them across save/reopen, and rejects malformed Blend input without Main mutation. +- Chromium-only policy was preserved; no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00227` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00227.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00227.md new file mode 100644 index 00000000..2e2be81f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00227.md @@ -0,0 +1,19 @@ +# M16-GAP-00227 Status + +status: done +task: armature.collection_remove_unused operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains two bone collections retaining one distinct bone each and two empty collections, with an empty collection active at index 2. +- Desktop runs `ARMATURE_OT_collection_remove_unused` with `poll=true` and `FINISHED`, removing both unused collections, preserving the retained collections and bones, and keeping the result through save/reopen. +- The existing Main reader's collection indices and bone IDs provide the observable removal; no new data-block, editor, or browser behavior was added. + +evidence: + +- The generator, desktop checker, npm comparator, direct comparator, and task-context checks passed. Repeated checker runs recognize the already-removed collections and remain idempotent. +- WASM/Main observes the same remaining collection order, member IDs, and active index, preserves them across save/reopen, and rejects malformed Blend input without Main mutation. +- Chromium-only policy was preserved; no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00228` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00228.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00228.md new file mode 100644 index 00000000..34c92812 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00228.md @@ -0,0 +1,19 @@ +# M16-GAP-00228 Status + +status: done +task: armature.collection_select operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains three bone collections, each retaining one distinct bone, with only the first bone selected and the middle collection active. +- Desktop runs `ARMATURE_OT_collection_select` in Edit Mode with `poll=true` and `FINISHED`, selecting the active collection's bone while preserving the other selection states and collection membership through save/reopen. +- The existing Main reader's bone selected flags, collection indices, and bone IDs provide the observable selection; no new data-block, editor, or browser behavior was added. + +evidence: + +- The generator, desktop checker, npm comparator, direct comparator, and task-context checks passed. Repeated checker runs recognize the already-selected active collection and remain idempotent. +- WASM/Main observes the same selected bone IDs and collection order, preserves them across save/reopen, and rejects malformed Blend input without Main mutation. +- Chromium-only policy was preserved; no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00229` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00229.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00229.md new file mode 100644 index 00000000..3a7c3540 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00229.md @@ -0,0 +1,19 @@ +# M16-GAP-00229 Status + +status: done +task: armature.collection_show_all operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains three bone collections, with the middle collection hidden and one distinct bone assigned to each collection. +- Desktop runs `ARMATURE_OT_collection_show_all` with `poll=true` and `FINISHED`, setting every collection visible while preserving collection order and membership through save/reopen. +- The Main reader exposes each armature `boneCollections` entry's `visible` flag from `BONE_COLLECTION_VISIBLE`; no other data-block, editor, or browser behavior was added. + +evidence: + +- The generator, desktop checker, npm comparator, direct comparator, and task-context checks passed. Repeated checker runs recognize the already-visible collections and remain idempotent. +- WASM/Main observes all three collections as visible with matching member bone IDs, preserves them across save/reopen, and rejects malformed Blend input without Main mutation. +- Chromium-only policy was preserved; no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00230` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00230.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00230.md new file mode 100644 index 00000000..4ef20fef --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00230.md @@ -0,0 +1,19 @@ +# M16-GAP-00230 Status + +status: done +task: armature.collection_unassign operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one selected bone assigned to both an active source collection and a retained collection. +- Desktop runs `ARMATURE_OT_collection_unassign` with `poll=true` and `FINISHED`, removing only the active collection membership while preserving the retained membership and selection through save/reopen. +- The existing Main reader's bone collection member IDs provide the observable unassignment; no new data-block, editor, or browser behavior was added. + +evidence: + +- The generator, desktop checker, npm comparator, direct comparator, and task-context checks passed. Repeated checker runs recognize the already-empty active collection and remain idempotent. +- WASM/Main observes an empty source collection and the retained bone ID, preserves them across save/reopen, and rejects malformed Blend input without Main mutation. +- Chromium-only policy was preserved; no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00231` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00231.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00231.md new file mode 100644 index 00000000..e475b4d0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00231.md @@ -0,0 +1,19 @@ +# M16-GAP-00231 Status + +status: done +task: armature.collection_unassign_named operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one selected bone assigned to both a named source collection and a retained collection, with the retained collection active. +- Desktop runs `ARMATURE_OT_collection_unassign_named` with `name=Source` and `bone_name=...`, `poll=true`, and `FINISHED`, removing only the named source membership while preserving the active retained membership and selection through save/reopen. +- The existing Main reader's bone collection member IDs provide the observable named unassignment; no new data-block, editor, or browser behavior was added. + +evidence: + +- The generator, desktop checker, npm comparator, direct comparator, and task-context checks passed. Repeated checker runs recognize the already-empty named collection and remain idempotent. +- WASM/Main observes an empty named source collection and the retained bone ID, preserves them across save/reopen, and rejects malformed Blend input without Main mutation. +- Chromium-only policy was preserved; no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00232` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00232.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00232.md new file mode 100644 index 00000000..7aaf913e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00232.md @@ -0,0 +1,19 @@ +# M16-GAP-00232 Status + +status: done +task: armature.collection_unsolo_all operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains three bone collections with one bone each; the middle collection starts solo while all collections remain visible and the middle collection is active. +- Desktop runs `ARMATURE_OT_collection_unsolo_all` with `poll=true` and `FINISHED`, clearing every collection's solo flag while preserving collection order, membership, visibility, and active index through save/reopen. +- Main now exposes each armature bone collection's `solo` flag alongside its existing visibility and member IDs; no other data-block, editor, or browser behavior was added. + +evidence: + +- The generator, desktop checker, production web-engine build, npm comparator, direct comparator, and task-context checks passed. Repeated checker runs recognize the already-unsolo state and remain idempotent. +- WASM/Main observes all three collections with `solo=false`, preserves members and visibility across save/reopen, and rejects malformed Blend input without Main mutation. +- Chromium-only policy was preserved; no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00233` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00233.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00233.md new file mode 100644 index 00000000..38bd1b7d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00233.md @@ -0,0 +1,19 @@ +# M16-GAP-00233 Status + +status: done +task: armature.copy_bone_color_to_selected operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one armature with three bones. The active source bone uses a custom palette; one selected destination starts with a different theme palette and one unselected destination remains untouched. +- Desktop runs `ARMATURE_OT_copy_bone_color_to_selected` in edit mode with `bone_type=EDIT`, `poll=true`, and `FINISHED`, copying palette and custom normal/select/active colors only to selected bones while preserving selection and active bone through save/reopen. +- Main now exposes each armature bone's palette index and custom color bytes (`normal`, `select`, `active`, `flag`) alongside its existing selection and transform data. No other data-block, editor, or browser behavior was added. + +evidence: + +- The generator, desktop checker, production web-engine build, npm comparator, direct comparator, and task-context checks passed. Repeated checker runs recognize the already-copied state and remain idempotent. +- WASM/Main observes exact source/selected color parity, retains the unselected theme color, preserves the armature through save/reopen, and rejects malformed Blend input without Main mutation. +- Chromium-only policy was preserved; no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00234` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00234.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00234.md new file mode 100644 index 00000000..9bc11707 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00234.md @@ -0,0 +1,19 @@ +# M16-GAP-00234 Status + +status: done +task: armature.delete operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one armature with three unparented bones; only the middle bone starts selected and active. +- Desktop runs `ARMATURE_OT_delete` in edit mode with `poll=true` and `FINISHED`, deleting the selected bone while leaving the other two bones unselected and preserving the result through save/reopen. +- Main already exposes armature bone names, parent IDs, and selection state, so the same post-delete fixture is observable in WASM/Main without expanding other data-blocks, editors, or browsers. + +evidence: + +- The generator, desktop checker, npm comparator, direct comparator, malformed-input negative, save/reopen check, and task-context checks passed. +- WASM/Main observes exactly the two remaining bones, rejects malformed Blend input without Main mutation, and keeps the armature stable across save/reopen. +- Repeated checker runs recognize the already-deleted state and remain idempotent; Chromium-only policy was preserved and no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00235` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00235.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00235.md new file mode 100644 index 00000000..f28f1578 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00235.md @@ -0,0 +1,19 @@ +# M16-GAP-00235 Status + +status: done +task: armature.dissolve operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one connected Root-Middle-Tip chain and one independent bone; the connected chain is selected for dissolve while the independent bone remains unselected. +- Desktop runs `ARMATURE_OT_dissolve` in edit mode with `poll=true` and `FINISHED`, collapsing the connected chain into the Root bone extended to the Tip position while preserving the independent bone through save/reopen. +- Main already exposes armature bone names, parent IDs, selection state, and head/tail coordinates, so the same post-dissolve fixture is observable in WASM/Main without expanding other data-blocks, editors, or browsers. + +evidence: + +- The generator, desktop checker, npm comparator, direct comparator, malformed-input negative, save/reopen check, and task-context checks passed. +- WASM/Main observes exactly the surviving Root and independent bones with desktop-matching geometry, rejects malformed Blend input without Main mutation, and remains stable across save/reopen. +- Repeated checker runs recognize the already-dissolved state and remain idempotent; Chromium-only policy was preserved and no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00236` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00236.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00236.md new file mode 100644 index 00000000..5a9c2954 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00236.md @@ -0,0 +1,19 @@ +# M16-GAP-00236 Status + +status: done +task: armature.duplicate operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one selected source bone with both endpoints selected and one independent unselected bone. +- Desktop runs `ARMATURE_OT_duplicate` in edit mode with `poll=true` and `FINISHED`, creating `WebGapArmatureDuplicateSource.001`, selecting it and making it active while preserving the source and independent bone through save/reopen. +- Main already exposes armature bone names, parent IDs, selection state, and head/tail coordinates, so the same duplicated fixture is observable in WASM/Main without expanding other data-blocks, editors, or browsers. + +evidence: + +- The generator, desktop checker, npm comparator, direct comparator, malformed-input negative, save/reopen check, and task-context checks passed. +- WASM/Main observes the duplicate with desktop-matching geometry and selection, rejects malformed Blend input without Main mutation, and remains stable across save/reopen. +- Repeated checker runs recognize the already-duplicated state and remain idempotent; Chromium-only policy was preserved and no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00237` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00237.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00237.md new file mode 100644 index 00000000..b56b403d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00237.md @@ -0,0 +1,19 @@ +# M16-GAP-00237 Status + +status: done +task: armature.duplicate_move operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one selected source bone with both endpoints selected and one independent unselected bone. +- Desktop runs `ARMATURE_OT_duplicate_move` in edit mode with `poll=true` and `FINISHED`, creating `WebGapArmatureDuplicateMoveSource.001` translated by `(1, 2, 3)` while preserving the source and independent bone through save/reopen. +- Main already exposes armature bone names, selection state, parent IDs, and head/tail coordinates, so the same moved duplicate is observable in WASM/Main without expanding other data-blocks, editors, or browsers. + +evidence: + +- The generator, desktop checker, npm comparator, direct comparator, malformed-input negative, save/reopen check, and task-context checks passed. +- WASM/Main observes the duplicate with desktop-matching translated geometry and selection, rejects malformed Blend input without Main mutation, and remains stable across save/reopen. +- Repeated checker runs recognize the already-moved state and remain idempotent; Chromium-only policy was preserved and no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00238` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00238.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00238.md new file mode 100644 index 00000000..82e76bfd --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00238.md @@ -0,0 +1,19 @@ +# M16-GAP-00238 Status + +status: done +task: armature.duplicate_rename operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one selected source bone with both endpoints selected and one independent unselected bone. +- Desktop runs `ARMATURE_OT_duplicate_rename` in edit mode with `poll=true` and `FINISHED`, creating `WebGapArmatureDuplicateRenameCopy` from `WebGapArmatureDuplicateRenameSource` using `Source -> Copy` while preserving the source and independent bone through save/reopen. +- Main already exposes armature bone names, selection state, parent IDs, and head/tail coordinates, so the same renamed duplicate is observable in WASM/Main without expanding other data-blocks, editors, or browsers. + +evidence: + +- The generator, desktop checker, npm comparator, direct comparator, malformed-input negative, save/reopen check, and task-context checks passed. +- WASM/Main observes the renamed duplicate with desktop-matching geometry and selection, rejects malformed Blend input without Main mutation, and remains stable across save/reopen. +- Repeated checker runs recognize the already-renamed state and remain idempotent; Chromium-only policy was preserved and no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00239` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00239.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00239.md new file mode 100644 index 00000000..8252d7b6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00239.md @@ -0,0 +1,19 @@ +# M16-GAP-00239 Status + +status: done +task: armature.extrude operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one source bone with its tail selected and one independent unselected bone. +- Desktop runs `ARMATURE_OT_extrude` in edit mode with `poll=true` and `FINISHED`, creating `WebGapArmatureExtrudeSource.001` connected to the source and extending it to `(0, 2, 0)` while preserving the independent bone through save/reopen. +- Main exposes the extruded bone name, parent ID, selection state, connected flag, and parent-relative head/tail coordinates; the comparator normalizes desktop armature-space coordinates against the source tail without expanding other data-blocks, editors, or browsers. + +evidence: + +- The generator, desktop checker, npm comparator, direct comparator, malformed-input negative, save/reopen check, and task-context checks passed. +- WASM/Main observes the connected extruded bone with desktop-matching normalized geometry and selection, rejects malformed Blend input without Main mutation, and remains stable across save/reopen. +- Repeated checker runs recognize the already-extruded state and remain idempotent; Chromium-only policy was preserved and no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00240` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00240.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00240.md new file mode 100644 index 00000000..2e79816f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00240.md @@ -0,0 +1,19 @@ +# M16-GAP-00240 Status + +status: done +task: armature.extrude_forked operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one source bone with its tail selected and one independent unselected bone. +- Desktop runs `ARMATURE_OT_extrude(forked=true)` in edit mode with `poll=true` and `FINISHED`, creating `WebGapArmatureExtrudeForkedSource.001` from the source tail with `connected=false` while preserving the source and independent bone through save/reopen. +- Main exposes the forked bone name, parent ID, selection state, connected flag, and parent-relative head/tail coordinates; the comparator normalizes desktop armature-space coordinates against the source tail without expanding other data-blocks, editors, or browsers. + +evidence: + +- The generator, desktop checker, npm comparator, direct comparator, malformed-input negative, save/reopen check, and task-context checks passed. +- WASM/Main observes the forked bone with desktop-matching normalized geometry and selection, rejects malformed Blend input without Main mutation, and remains stable across save/reopen. +- Repeated checker runs recognize the already-forked state and remain idempotent; Chromium-only policy was preserved and no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00241` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00241.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00241.md new file mode 100644 index 00000000..c60a9056 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00241.md @@ -0,0 +1,19 @@ +# M16-GAP-00241 Status + +status: done +task: armature.extrude_move operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one source bone with its tail selected and one independent unselected bone. +- Desktop runs `ARMATURE_OT_extrude_move` in edit mode with `poll=true`, `FINISHED`, and a `(0, 1, 0)` translate transform, creating `WebGapArmatureExtrudeMoveSource.001` connected to the source while preserving the source and independent bone through save/reopen. +- Main exposes the moved extruded bone name, parent ID, selection state, connected flag, and parent-relative head/tail coordinates; the comparator normalizes desktop armature-space coordinates against the source tail without expanding other data-blocks, editors, or browsers. + +evidence: + +- The generator, desktop checker, npm comparator, direct comparator, malformed-input negative, save/reopen check, and task-context checks passed. +- WASM/Main observes the moved connected extruded bone with desktop-matching normalized geometry and selection, rejects malformed Blend input without Main mutation, and remains stable across save/reopen. +- Repeated checker runs recognize the already-extruded-and-moved state and remain idempotent; Chromium-only policy was preserved and no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00242` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00242.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00242.md new file mode 100644 index 00000000..5c9523aa --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00242.md @@ -0,0 +1,19 @@ +# M16-GAP-00242 Status + +status: done +task: armature.fill operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains a source bone tail and target bone head selected as the two fill endpoints, plus one independent unselected bone. +- Desktop runs `ARMATURE_OT_fill` in edit mode with `poll=true` and `FINISHED`, creating `WebGapArmatureFillBridge` between source tail and target head while preserving the original source/target and independent bone through save/reopen. +- Main exposes the bridge bone name, parent ID, selection state, connected flag, and parent-relative head/tail coordinates; the comparator normalizes desktop armature-space coordinates against the source tail without expanding other data-blocks, editors, or browsers. + +evidence: + +- The generator, desktop checker, npm comparator, direct comparator, malformed-input negative, save/reopen check, and task-context checks passed. +- WASM/Main observes the filled bridge with desktop-matching normalized geometry and selection, rejects malformed Blend input without Main mutation, and remains stable across save/reopen. +- Repeated checker runs recognize the already-filled state and remain idempotent; Chromium-only policy was preserved and no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00243` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00243.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00243.md new file mode 100644 index 00000000..5ea35896 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00243.md @@ -0,0 +1,17 @@ +# M16-GAP-00243 Status + +status: done +task: armature.flip_names operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains two selected left/right bones and one independent unselected bone. Blender desktop runs `ARMATURE_OT_flip_names` with `do_strip_numbers=false`, swaps the selected bones' names by geometry, and preserves the independent bone. +- Main reads the saved post-operation names, selection state, and geometry from the same fixture. The comparator confirms desktop/WASM parity and save/reopen stability without expanding other data-blocks, editors, or browsers. + +evidence: + +- Fixture generation, desktop checker, npm comparator, direct comparator, malformed-input negative, save/reopen check, and task-context handoff passed. +- Repeated checker execution is idempotent (`SKIPPED_ALREADY_APPLIED` after the first run); Chromium-only policy was preserved and no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00244` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00244.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00244.md new file mode 100644 index 00000000..7a03e2b0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00244.md @@ -0,0 +1,17 @@ +# M16-GAP-00244 Status + +status: done +task: armature.hide operator LOCAL_EXACT slice +updated: 2026-08-22 America/New_York + +scope: + +- The minimal fixture contains one selected bone and one independent unselected bone. Blender desktop runs `ARMATURE_OT_hide` with `unselected=false`, setting the selected bone's edit-mode hidden flag and clearing its selection while preserving the independent bone and both geometries. +- Main exposes the saved hidden and selected flags from the same fixture. The comparator confirms desktop/WASM parity and save/reopen stability without expanding other data-blocks, editors, or browsers. + +evidence: + +- Fixture generation, desktop checker, full WebEngine rebuild, npm comparator, direct comparator, malformed-input negative, save/reopen check, and task-context handoff passed. +- Repeated checker execution is idempotent (`SKIPPED_ALREADY_APPLIED` after the first run); Chromium-only policy was preserved and no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00245` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00245.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00245.md new file mode 100644 index 00000000..d0b1f5f3 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00245.md @@ -0,0 +1,17 @@ +# M16-GAP-00245 Status + +status: done +task: armature.move_to_collection operator LOCAL_EXACT slice +updated: 2026-08-23 America/New_York + +scope: + +- The minimal fixture contains two bone collections, one selected bone in the source collection, and one independent unselected bone. Blender desktop runs `ARMATURE_OT_move_to_collection` with `collection_index=1`, moving only the selected bone to the target collection while preserving selection and geometry. +- Main exposes both collection member lists from the same fixture. The comparator confirms desktop/WASM parity and save/reopen stability without expanding other data-blocks, editors, or browsers. + +evidence: + +- Fixture generation, desktop checker, npm comparator, direct comparator, malformed-input negative, save/reopen check, and task-context handoff passed. +- Repeated checker execution is idempotent (`SKIPPED_ALREADY_APPLIED` after the first run); Chromium-only policy was preserved and no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00246` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00246.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00246.md new file mode 100644 index 00000000..babb0318 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00246.md @@ -0,0 +1,17 @@ +# M16-GAP-00246 Status + +status: done +task: armature.parent_clear operator LOCAL_EXACT slice +updated: 2026-08-23 America/New_York + +scope: + +- The minimal fixture contains a connected selected child, its parent, and one independent unselected bone. Blender desktop runs `ARMATURE_OT_parent_clear` with `type=CLEAR`, clearing only the selected child's parent and connection while preserving all geometry and selection. +- Main exposes the saved parent IDs from the same fixture. The comparator confirms desktop/WASM parity and save/reopen stability without expanding other data-blocks, editors, or browsers. + +evidence: + +- Fixture generation, desktop checker, npm comparator, direct comparator, malformed-input negative, save/reopen check, and task-context handoff passed. +- Repeated checker execution is idempotent (`SKIPPED_ALREADY_APPLIED` after the first run); Chromium-only policy was preserved and no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00247` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00247.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00247.md new file mode 100644 index 00000000..4d623e4e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00247.md @@ -0,0 +1,26 @@ +# M16-GAP-00247 Status + +status: done +task: armature.parent_set operator LOCAL_EXACT slice +updated: 2026-08-23 America/New_York + +scope: + +- The minimal fixture contains a selected connected child, its selected parent, + and one independent unselected bone. Blender desktop observes + `ARMATURE_OT_parent_set` with `type=CONNECTED`; the existing parent and + connection are preserved as an idempotent `SKIPPED_ALREADY_APPLIED` result. +- Main exposes the saved parent and connection data from the same fixture. The + comparator confirms desktop/WASM parity and save/reopen stability without + expanding other data-blocks, editors, or browsers. + +evidence: + +- Fixture generation, desktop checker, npm comparator, direct comparator, + malformed-input negative, save/reopen check, and task-context handoff are + recorded in the task reports and context. +- Repeated checker execution is idempotent (`SKIPPED_ALREADY_APPLIED` after the + first run); Chromium-only policy was preserved and no Firefox/WebKit run was + made. + +nextTask: `M16-GAP-00248` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00248.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00248.md new file mode 100644 index 00000000..310fc3c6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00248.md @@ -0,0 +1,24 @@ +# M16-GAP-00248 Status + +status: done +task: armature.reveal operator LOCAL_EXACT slice +updated: 2026-08-23 America/New_York + +scope: + +- The minimal fixture contains one hidden edit bone and one independent visible + unselected bone. Blender desktop runs `ARMATURE_OT_reveal(select=true)`, + revealing and selecting only the hidden bone while preserving both geometries. +- Main exposes the saved hidden and selected flags from the same fixture. The + comparator confirms desktop/WASM parity and save/reopen stability without + expanding other data-blocks, editors, or browsers. + +evidence: + +- Fixture generation, desktop checker, npm comparator, direct comparator, + malformed-input negative, save/reopen check, and task-context handoff passed. +- Repeated checker execution is idempotent (`SKIPPED_ALREADY_APPLIED` after the + first run); Chromium-only policy was preserved and no Firefox/WebKit run was + made. + +nextTask: `M16-GAP-00249` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00249.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00249.md new file mode 100644 index 00000000..c867a8b4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00249.md @@ -0,0 +1,25 @@ +# M16-GAP-00249 Status + +status: done +task: armature.roll_clear operator LOCAL_EXACT slice +updated: 2026-08-23 America/New_York + +scope: + +- The minimal fixture contains one selected visible edit bone with an initial + roll of pi/4. Blender desktop runs `ARMATURE_OT_roll_clear(roll=0)`, clearing + only the selected bone's roll while preserving its geometry, selection, and + visibility. +- Main exposes the resulting identity rest matrix from the same fixture. The + comparator confirms desktop/WASM parity and save/reopen stability without + expanding other data-blocks, editors, or browsers. + +evidence: + +- Fixture generation, desktop checker, npm comparator, direct comparator, + malformed-input negative, save/reopen check, and task-context handoff passed. +- Repeated checker execution is idempotent (`SKIPPED_ALREADY_APPLIED` after the + first run); Chromium-only policy was preserved and no Firefox/WebKit run was + made. + +nextTask: `M16-GAP-00250` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00250.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00250.md new file mode 100644 index 00000000..8b17847b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00250.md @@ -0,0 +1,24 @@ +# M16-GAP-00250 Status + +status: done +task: armature.select_all operator LOCAL_EXACT slice +updated: 2026-08-23 America/New_York + +scope: + +- The minimal fixture contains two visible edit bones with only the parent bone + initially selected. Blender desktop runs `ARMATURE_OT_select_all(action=SELECT)`, + selecting both visible bones and both endpoints while preserving geometry. +- Main exposes the saved selected flags and geometry from the same fixture. The + comparator confirms desktop/WASM parity and save/reopen stability without + expanding other data-blocks, editors, or browsers. + +evidence: + +- Fixture generation, desktop checker, npm comparator, direct comparator, + malformed-input negative, save/reopen check, and task-context handoff passed. +- Repeated checker execution is idempotent (`SKIPPED_ALREADY_APPLIED` after the + first run); Chromium-only policy was preserved and no Firefox/WebKit run was + made. + +nextTask: `M16-GAP-00251` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00251.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00251.md new file mode 100644 index 00000000..ba7ba620 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00251.md @@ -0,0 +1,27 @@ +# M16-GAP-00251 Status + +status: done +task: armature.select_hierarchy operator LOCAL_EXACT slice +updated: 2026-08-23 America/New_York + +scope: + +- The minimal fixture contains a selected root, an unselected connected child, + and an independent unselected bone. Blender desktop runs + `ARMATURE_OT_select_hierarchy(direction=CHILD, extend=false)`, selecting the + immediate connected child and making it active without changing hierarchy, + visibility, or geometry. +- WASM/Main reads the same fixture, including armature-space child coordinates + through `arm_head`/`arm_tail` with legacy `head`/`tail` fallback. The + comparator confirms desktop/WASM parity and save/reopen stability. + +evidence: + +- Fixture generation, desktop checker, npm comparator, direct comparator, + malformed-input negative, save/reopen check, production WASM rebuild, and + task-context handoff passed. +- Repeated checker execution is idempotent (`SKIPPED_ALREADY_APPLIED` after + the first run); Chromium-only policy was preserved and no Firefox/WebKit run + was made. + +nextTask: `M16-GAP-00252` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00252.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00252.md new file mode 100644 index 00000000..f3734f71 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00252.md @@ -0,0 +1,25 @@ +# M16-GAP-00252 Status + +status: done +task: armature.select_less operator LOCAL_EXACT slice +updated: 2026-08-23 America/New_York + +scope: + +- The minimal fixture contains a partially selected root boundary, an + unselected connected child, and an independent fully selected bone. Blender + desktop runs `ARMATURE_OT_select_less`, clearing the partial boundary while + preserving the complete independent selection, hierarchy, visibility, and + geometry. +- WASM/Main reads the same fixture. The comparator confirms desktop/WASM parity + and save/reopen stability. + +evidence: + +- Fixture generation, desktop checker, npm comparator, direct comparator, + malformed-input negative, save/reopen check, and task-context handoff passed. +- Repeated checker execution is idempotent (`SKIPPED_ALREADY_APPLIED` after + the first run); Chromium-only policy was preserved and no Firefox/WebKit run + was made. + +nextTask: `M16-GAP-00253` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00253.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00253.md new file mode 100644 index 00000000..5e3fc697 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00253.md @@ -0,0 +1,24 @@ +# M16-GAP-00253 Status + +status: done +task: armature.select_linked operator LOCAL_EXACT slice +updated: 2026-08-23 America/New_York + +scope: + +- The minimal fixture contains a selected root, two unselected connected + descendants, and an independent unselected bone. Blender desktop runs + `ARMATURE_OT_select_linked(all_forks=false)`, selecting the linked chain while + preserving the independent bone, hierarchy, visibility, and geometry. +- WASM/Main reads the same fixture. The comparator confirms desktop/WASM parity + and save/reopen stability. + +evidence: + +- Fixture generation, desktop checker, npm comparator, direct comparator, + malformed-input negative, save/reopen check, and task-context handoff passed. +- Repeated checker execution is idempotent (`SKIPPED_ALREADY_APPLIED` after + the first run); Chromium-only policy was preserved and no Firefox/WebKit run + was made. + +nextTask: `M16-GAP-00254` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00254.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00254.md new file mode 100644 index 00000000..a68edc6d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00254.md @@ -0,0 +1,24 @@ +# M16-GAP-00254 Status + +status: done +task: armature.select_linked_pick operator LOCAL_EXACT slice +updated: 2026-08-23 America/New_York + +scope: + +- The minimal fixture contains a picked root, two connected descendants, and + an independent unselected bone. Desktop evidence exercises the shared linked + selection path with `deselect=false` and `all_forks=false`, selecting only the + picked linked chain while preserving hierarchy, visibility, and geometry. +- WASM/Main reads the same fixture. The comparator confirms desktop/WASM parity + and save/reopen stability. + +evidence: + +- Fixture generation, desktop checker, npm comparator, direct comparator, + malformed-input negative, save/reopen check, and task-context handoff passed. +- Repeated checker execution is idempotent (`SKIPPED_ALREADY_APPLIED` after + the first run); Chromium-only policy was preserved and no Firefox/WebKit run + was made. + +nextTask: `M16-GAP-00255` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00255.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00255.md new file mode 100644 index 00000000..34f03570 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00255.md @@ -0,0 +1,24 @@ +# M16-GAP-00255 Status + +status: done +task: armature.select_mirror operator LOCAL_EXACT slice +updated: 2026-08-23 America/New_York + +scope: + +- The minimal fixture contains a selected `.L` bone, an unselected `.R` mirror, + and an unrelated center bone. Blender desktop runs + `ARMATURE_OT_select_mirror(only_active=false, extend=false)`, mirroring the + selection to `.R` and preserving the unrelated bone and geometry. +- WASM/Main reads the same fixture. The comparator confirms desktop/WASM parity + and save/reopen stability. + +evidence: + +- Fixture generation, desktop checker, npm comparator, direct comparator, + malformed-input negative, save/reopen check, and task-context handoff passed. +- Repeated checker execution is idempotent (`SKIPPED_ALREADY_APPLIED` after + the first run); Chromium-only policy was preserved and no Firefox/WebKit run + was made. + +nextTask: `M16-GAP-00256` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00256.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00256.md new file mode 100644 index 00000000..b2905ecc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00256.md @@ -0,0 +1,23 @@ +# M16-GAP-00256 Status + +status: done +task: armature.select_more operator LOCAL_EXACT slice +updated: 2026-08-23 America/New_York + +scope: + +- The minimal fixture contains a selected root bone, an adjacent selected child, + an unselected connected grandchild, and an unrelated unselected bone. + Blender desktop runs `ARMATURE_OT_select_more` and preserves the expected + two-bone selection boundary and hierarchy through save/reopen. +- WASM/Main reads the same fixture. The comparator confirms desktop/WASM parity, + malformed-input rejection without Main mutation, and save/reopen stability. + +evidence: + +- Fixture generation, desktop checker, npm comparator, direct comparator, and + repeated checker execution passed. The second checker run is idempotent + (`SKIPPED_ALREADY_APPLIED`); Chromium-only policy was preserved and no + Firefox/WebKit run was made. + +nextTask: `M16-GAP-00257` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00257.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00257.md new file mode 100644 index 00000000..121b8341 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00257.md @@ -0,0 +1,23 @@ +# M16-GAP-00257 Status + +status: done +task: armature.select_similar operator LOCAL_EXACT slice +updated: 2026-08-23 America/New_York + +scope: + +- The minimal fixture contains an active selected length-1 bone, an unselected + length-1 peer, and an unselected length-2 bone. Blender desktop runs + `ARMATURE_OT_select_similar(type=LENGTH, threshold=0.1)` and preserves the + expected selection and geometry through save/reopen. +- WASM/Main reads the same fixture. The comparator confirms desktop/WASM parity, + malformed-input rejection without Main mutation, and save/reopen stability. + +evidence: + +- Fixture generation, desktop checker, npm comparator, direct comparator, and + repeated checker execution passed. The second checker run is idempotent + (`SKIPPED_ALREADY_APPLIED`); Chromium-only policy was preserved and no + Firefox/WebKit run was made. + +nextTask: `M16-GAP-00258` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00258.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00258.md new file mode 100644 index 00000000..7d328888 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00258.md @@ -0,0 +1,24 @@ +# M16-GAP-00258 Status + +status: done +task: armature.separate operator LOCAL_EXACT slice +updated: 2026-08-23 America/New_York + +scope: + +- The minimal fixture contains one selected bone and one unselected bone in a + single armature. Blender desktop runs `ARMATURE_OT_separate`, producing an + original armature with the retained bone and a separated armature with the + selected bone, stable through save/reopen. +- WASM/Main reads both armature data-blocks from the same fixture. The + comparator confirms desktop/WASM partition parity, malformed-input rejection + without Main mutation, and save/reopen stability. + +evidence: + +- Fixture generation, desktop checker, npm comparator, direct comparator, and + repeated checker execution passed. The second checker run is idempotent + (`SKIPPED_ALREADY_APPLIED`); Chromium-only policy was preserved and no + Firefox/WebKit run was made. + +nextTask: `M16-GAP-00259` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00259.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00259.md new file mode 100644 index 00000000..5a489b68 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00259.md @@ -0,0 +1,22 @@ +# M16-GAP-00259 Status + +status: done +task: armature.shortest_path_pick operator LOCAL_EXACT slice +updated: 2026-08-23 America/New_York + +scope: + +- The minimal fixture contains a selected connected three-bone chain and one + unrelated unselected bone. Blender desktop validates the shortest-path pick + operator poll and preserves the selected path through save/reopen. +- WASM/Main reads the same fixture. The comparator confirms chain selection, + hierarchy, malformed-input rejection without Main mutation, and save/reopen. + +evidence: + +- Fixture generation, desktop checker, npm comparator, and direct comparator + passed. The fixture is already at the operator's postcondition, so the + desktop operator status is `SKIPPED_ALREADY_APPLIED`; Chromium-only policy + was preserved and no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00260` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00260.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00260.md new file mode 100644 index 00000000..15b62d65 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00260.md @@ -0,0 +1,20 @@ +# M16-GAP-00260 Status + +status: done +task: armature.split operator LOCAL_EXACT slice +updated: 2026-08-23 America/New_York + +scope: + +- The fixture contains a selected root, an unselected connected child, and an + unrelated bone. Blender desktop runs `ARMATURE_OT_split`, disconnecting the + selected/unselected boundary and preserving the result through save/reopen. +- WASM/Main reads the same armature. The comparator confirms the disconnected + child, malformed-input rejection without Main mutation, and save/reopen. + +evidence: + +- Fixture generation, desktop checker, npm comparator, and direct comparator + passed. Chromium-only policy was preserved and no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00261` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00261.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00261.md new file mode 100644 index 00000000..a2cdac52 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00261.md @@ -0,0 +1,20 @@ +# M16-GAP-00261 Status + +status: done +task: armature.subdivide operator LOCAL_EXACT slice +updated: 2026-08-23 America/New_York + +scope: + +- The fixture contains one selected length-1 bone and one unrelated unselected + bone. Blender desktop runs `ARMATURE_OT_subdivide(number_cuts=1)`, producing + two half-length pieces and preserving the result through save/reopen. +- WASM/Main reads the same armature. The comparator confirms the two-piece + geometry, unrelated selection, malformed-input rejection, and save/reopen. + +evidence: + +- Fixture generation, desktop checker, npm comparator, and direct comparator + passed. Chromium-only policy was preserved and no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00262` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00262.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00262.md new file mode 100644 index 00000000..06329a4a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00262.md @@ -0,0 +1,22 @@ +# M16-GAP-00262 Status + +status: done +task: armature.switch_direction operator LOCAL_EXACT slice +updated: 2026-08-23 America/New_York + +scope: + +- The fixture contains a selected connected two-bone chain and an unrelated + unselected bone. Blender desktop runs `ARMATURE_OT_switch_direction`, + reversing the chain while preserving the result through save/reopen. +- WASM/Main reads the same armature. The comparator confirms reversed chain + geometry and parenting, malformed-input rejection without Main mutation, and + save/reopen. + +evidence: + +- Fixture generation, desktop checker, npm comparator, and direct comparator + passed. Chromium-only policy was preserved and no Firefox/WebKit run was + made. + +nextTask: `M16-GAP-00263` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00263.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00263.md new file mode 100644 index 00000000..1fa8e92a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00263.md @@ -0,0 +1,24 @@ +# M16-GAP-00263 Status + +status: done +task: armature.symmetrize operator LOCAL_EXACT slice +updated: 2026-08-23 America/New_York + +scope: + +- The fixture contains one selected positive-X `WebGapArmatureSymmetrizeSource.L` + bone and one unrelated unselected bone. Blender desktop runs + `ARMATURE_OT_symmetrize(direction="NEGATIVE_X")`, producing the mirrored + `WebGapArmatureSymmetrizeSource.R` bone and preserving the result through + save/reopen. +- WASM/Main reads the same armature. The comparator confirms mirrored geometry, + selection state, malformed-input rejection without Main mutation, and + save/reopen. + +evidence: + +- Fixture generation, desktop checker, npm comparator, and direct comparator + passed with exit code 0. Chromium-only policy was preserved and no + Firefox/WebKit run was made. + +nextTask: `M16-GAP-00264` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00264.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00264.md new file mode 100644 index 00000000..a81a9461 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00264.md @@ -0,0 +1,25 @@ +# M16-GAP-00264 Status + +status: done +task: asset.asset_download operator LOCAL_EXACT slice +updated: 2026-08-23 America/New_York + +scope: + +- The fixture contains one fake-user external Image with source path + `//assets/WebGapAssetDownload.png`. Blender desktop enables online access for + the isolated check, runs `ASSET_OT_asset_download` for a missing remote + relative identifier, and records the real `CANCELLED` result with no Main + mutation. Save/reopen preserves the image resource fields exactly. +- WASM/Main reads the same fixture as an external, unpacked Image with stable + `assetStatus=EXTERNAL`, `assetId`, source path, and dimensions. The comparator + confirms save/reopen stability and malformed-input rejection without Main + mutation. + +evidence: + +- Fixture generation, desktop checker, npm comparator, direct comparator, and + task context checks passed with exit code 0. Chromium-only policy was + preserved and no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00265` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00265.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00265.md new file mode 100644 index 00000000..30679aa8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00265.md @@ -0,0 +1,25 @@ +# M16-GAP-00265 Status + +status: done +task: asset.assets_download operator LOCAL_EXACT slice +updated: 2026-08-23 America/New_York + +scope: + +- The fixture contains one fake-user external Image with source path + `//assets/WebGapAssetsDownload.png`. Blender desktop enables online access, + confirms `ASSET_OT_assets_download.poll()` is false, and records the real + `CANCELLED` result with no Main mutation. Save/reopen preserves the image + resource fields exactly. +- WASM/Main reads the same fixture as an external, unpacked Image with stable + `assetStatus=EXTERNAL`, `assetId`, source path, and dimensions. The + comparator confirms save/reopen stability and malformed-input rejection + without Main mutation. + +evidence: + +- Fixture generation, desktop checker, npm comparator, direct comparator, and + task context checks passed with exit code 0. Chromium-only policy was + preserved and no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00266` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00266.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00266.md new file mode 100644 index 00000000..def6ed8c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00266.md @@ -0,0 +1,24 @@ +# M16-GAP-00266 Status + +status: done +task: asset.assign_action operator LOCAL_EXACT slice +updated: 2026-08-23 America/New_York + +scope: + +- The fixture contains one fake-user `WebGapAssignAction` with a two-key + `location[0]` channel assigned to `WebGapAssignActionObject`. Blender + desktop observes the no-Asset-Shelf context as `poll=false`, records the + real `CANCELLED` result from `ASSET_OT_assign_action`, and confirms no Main + mutation. Save/reopen preserves the Action exactly. +- WASM/Main reads the same fixture as one stable Action animation targeting + `object:WebGapAssignActionObject`. The comparator confirms both keyframes, + save/reopen stability, and malformed-input rejection without Main mutation. + +evidence: + +- Fixture generation, desktop checker, npm comparator, direct comparator, and + task context checks passed with exit code 0. Chromium-only policy was + preserved and no Firefox/WebKit run was made. + +nextTask: `M16-GAP-00267` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00267.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00267.md new file mode 100644 index 00000000..785151a7 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00267.md @@ -0,0 +1,26 @@ +# M16-GAP-00267 Status + +status: done +task: asset.browse_containing_blend_file operator LOCAL_EXACT slice +updated: 2026-08-23 America/New_York + +scope: + +- The fixture links one object from external `WebGapBrowseContaining.blend`. + Blender desktop observes the no-selected-asset boundary as `poll=false`, + records `CANCELLED` for `ASSET_OT_browse_containing_blend_file`, and confirms + no Main mutation. Save/reopen preserves the Library record exactly. +- WASM/Main reads the same external Library with stable source path, + `EXTERNAL_REQUIRED` status, and an empty dependency closure. The comparator + confirms save/reopen stability and malformed-input rejection without Main + mutation. + +evidence: + +- Fixture generation, desktop checker, npm comparator, direct comparator, and + task context checks passed with exit code 0. Chromium-only policy was + preserved and no Firefox/WebKit run was made. Blender's expected missing + external-library warning is recorded by the comparator while the Library + state remains exact. + +nextTask: `M16-GAP-00268` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00268.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00268.md new file mode 100644 index 00000000..e6b13b56 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00268.md @@ -0,0 +1,26 @@ +# M16-GAP-00268 Status + +status: done +task: asset.bundle_install operator LOCAL_EXACT slice +updated: 2026-08-23 America/New_York + +scope: + +- The fixture links one object from external `WebGapBundleInstall.blend`. + Blender desktop observes the no-bundle context as `poll=false`, records + `CANCELLED` for `ASSET_OT_bundle_install`, and confirms no Main mutation. + Save/reopen preserves the Library record exactly. +- WASM/Main reads the same external Library with stable source path, + `EXTERNAL_REQUIRED` status, and an empty dependency closure. The comparator + confirms save/reopen stability and malformed-input rejection without Main + mutation. + +evidence: + +- Fixture generation, desktop checker, npm comparator, direct comparator, and + task context checks passed with exit code 0. Chromium-only policy was + preserved and no Firefox/WebKit run was made. Blender's expected missing + external-library warning is recorded by the comparator while the Library + state remains exact. + +nextTask: `M16-GAP-00269` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00269.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00269.md new file mode 100644 index 00000000..d0634a02 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00269.md @@ -0,0 +1,26 @@ +# M16-GAP-00269 Status + +status: done +task: asset.catalog_delete operator LOCAL_EXACT slice +updated: 2026-08-23 America/New_York + +scope: + +- The fixture links one object from external `WebGapCatalogDelete.blend`. + Blender desktop observes the no-catalog-selection boundary as `poll=false`, + records `CANCELLED` for `ASSET_OT_catalog_delete`, and confirms no Main + mutation. Save/reopen preserves the Library record exactly. +- WASM/Main reads the same external Library with stable source path, + `EXTERNAL_REQUIRED` status, and an empty dependency closure. The comparator + confirms save/reopen stability and malformed-input rejection without Main + mutation. + +evidence: + +- Fixture generation, desktop checker, npm comparator, direct comparator, and + task context checks passed with exit code 0. Chromium-only policy was + preserved and no Firefox/WebKit run was made. Blender's expected missing + external-library warning is recorded by the comparator while the Library + state remains exact. + +nextTask: `M16-GAP-00270` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00270.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00270.md new file mode 100644 index 00000000..7a0b7cb6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00270.md @@ -0,0 +1,26 @@ +# M16-GAP-00270 Status + +status: done +task: asset.catalog_new operator LOCAL_EXACT slice +updated: 2026-08-23 America/New_York + +scope: + +- The fixture links one object from external `WebGapCatalogNew.blend`. + Blender desktop observes the no-catalog-selection boundary as `poll=false`, + records `CANCELLED` for `ASSET_OT_catalog_new`, and confirms no Main + mutation. Save/reopen preserves the Library record exactly. +- WASM/Main reads the same external Library with stable source path, + `EXTERNAL_REQUIRED` status, and an empty dependency closure. The comparator + confirms save/reopen stability and malformed-input rejection without Main + mutation. + +evidence: + +- Fixture generation, desktop checker, npm comparator, direct comparator, and + task context checks passed with exit code 0. Chromium-only policy was + preserved and no Firefox/WebKit run was made. Blender's expected missing + external-library warning is recorded by the comparator while the Library + state remains exact. + +nextTask: `M16-GAP-00271` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00271.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00271.md new file mode 100644 index 00000000..e91bc352 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00271.md @@ -0,0 +1,26 @@ +# M16-GAP-00271 Status + +status: done +task: asset.catalog_redo operator LOCAL_EXACT slice +updated: 2026-08-23 America/New_York + +scope: + +- The fixture links one object from external `WebGapCatalogRedo.blend`. + Blender desktop observes the no-catalog-selection boundary as `poll=false`, + records `CANCELLED` for `ASSET_OT_catalog_redo`, and confirms no Main + mutation. Save/reopen preserves the Library record exactly. +- WASM/Main reads the same external Library with stable source path, + `EXTERNAL_REQUIRED` status, and an empty dependency closure. The comparator + confirms save/reopen stability and malformed-input rejection without Main + mutation. + +evidence: + +- Fixture generation, desktop checker, npm comparator, direct comparator, and + task context checks passed with exit code 0. Chromium-only policy was + preserved and no Firefox/WebKit run was made. Blender's expected missing + external-library warning is recorded by the comparator while the Library + state remains exact. + +nextTask: `M16-GAP-00272` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00272.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00272.md new file mode 100644 index 00000000..815dcb9b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00272.md @@ -0,0 +1,26 @@ +# M16-GAP-00272 Status + +status: done +task: asset.catalog_undo operator LOCAL_EXACT slice +updated: 2026-08-23 America/New_York + +scope: + +- The fixture links one object from external `WebGapCatalogUndo.blend`. + Blender desktop observes the no-catalog-selection boundary as `poll=false`, + records `CANCELLED` for `ASSET_OT_catalog_undo`, and confirms no Main + mutation. Save/reopen preserves the Library record exactly. +- WASM/Main reads the same external Library with stable source path, + `EXTERNAL_REQUIRED` status, and an empty dependency closure. The comparator + confirms save/reopen stability and malformed-input rejection without Main + mutation. + +evidence: + +- Fixture generation, desktop checker, npm comparator, direct comparator, and + task context checks passed with exit code 0. Chromium-only policy was + preserved and no Firefox/WebKit run was made. Blender's expected missing + external-library warning is recorded by the comparator while the Library + state remains exact. + +nextTask: `M16-GAP-00273` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00273.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00273.md new file mode 100644 index 00000000..c5560b4c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00273.md @@ -0,0 +1,26 @@ +# M16-GAP-00273 Status + +status: done +task: asset.catalog_undo_push operator LOCAL_EXACT slice +updated: 2026-08-23 America/New_York + +scope: + +- The fixture links one object from external `WebGapCatalogUndoPush.blend`. + Blender desktop observes the no-catalog-selection boundary as `poll=false`, + records `CANCELLED` for `ASSET_OT_catalog_undo_push`, and confirms no Main + mutation. Save/reopen preserves the Library record exactly. +- WASM/Main reads the same external Library with stable source path, + `EXTERNAL_REQUIRED` status, and an empty dependency closure. The comparator + confirms save/reopen stability and malformed-input rejection without Main + mutation. + +evidence: + +- Fixture generation, desktop checker, npm comparator, direct comparator, and + task context checks passed with exit code 0. Chromium-only policy was + preserved and no Firefox/WebKit run was made. Blender's expected missing + external-library warning is recorded by the comparator while the Library + state remains exact. + +nextTask: `M16-GAP-00274` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00274.md b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00274.md new file mode 100644 index 00000000..759d5972 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00274.md @@ -0,0 +1,33 @@ +# M16-GAP-00274 Status + +status: in_progress +task: asset.catalogs_save operator LOCAL_EXACT slice +updated: 2026-08-23 America/New_York + +scope: + +- The fixture links one object from external `WebGapCatalogsSave.blend`. + Blender desktop observes the no-active-asset-library boundary as `poll=false`, + records `CANCELLED` for `ASSET_OT_catalogs_save`, and confirms no Main + mutation. Save/reopen preserves the Library record exactly. +- WASM/Main reads the same external Library with stable source path, + `EXTERNAL_REQUIRED` status, and an empty dependency closure. The comparator + confirms save/reopen stability and malformed-input rejection without Main + mutation. + +evidence: + +- Fixture generation, desktop checker, npm comparator, direct comparator, and + task context checks passed with exit code 0. Chromium-only policy was + preserved and no Firefox/WebKit run was made. Blender's expected missing + external-library warning is recorded by the comparator while the Library + state remains exact. + +blocker: + +- Focused checks and artifact hashes pass, but the required post-handoff + `check-blender-next-task-plan.mjs` gate reports that the existing generated + task plan is not deterministic. Queue governance also requires the current + pointer to remain on this task until that gate is resolved. + +nextTask: `M16-GAP-00275` diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00001-datablock-Action.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00001-datablock-Action.blend new file mode 100644 index 00000000..e4414713 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00001-datablock-Action.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00002-datablock-Armature.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00002-datablock-Armature.blend new file mode 100644 index 00000000..fcd8754c Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00002-datablock-Armature.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00003-datablock-Brush.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00003-datablock-Brush.blend new file mode 100644 index 00000000..d615cb77 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00003-datablock-Brush.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00004-datablock-Camera.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00004-datablock-Camera.blend new file mode 100644 index 00000000..bd885dfe Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00004-datablock-Camera.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00005-datablock-Collection.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00005-datablock-Collection.blend new file mode 100644 index 00000000..d0574630 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00005-datablock-Collection.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00006-datablock-Curve.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00006-datablock-Curve.blend new file mode 100644 index 00000000..6e9b86cd Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00006-datablock-Curve.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00007-datablock-Curves.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00007-datablock-Curves.blend new file mode 100644 index 00000000..d5f8b208 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00007-datablock-Curves.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00008-datablock-FreestyleLineStyle.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00008-datablock-FreestyleLineStyle.blend new file mode 100644 index 00000000..dfee7529 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00008-datablock-FreestyleLineStyle.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00009-datablock-GreasePencil.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00009-datablock-GreasePencil.blend new file mode 100644 index 00000000..c12e4529 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00009-datablock-GreasePencil.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00010-datablock-Lattice.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00010-datablock-Lattice.blend new file mode 100644 index 00000000..143791ad Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00010-datablock-Lattice.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00011-datablock-Library.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00011-datablock-Library.blend new file mode 100644 index 00000000..c48e6bc7 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00011-datablock-Library.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00012-datablock-Light.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00012-datablock-Light.blend new file mode 100644 index 00000000..08290971 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00012-datablock-Light.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00013-datablock-Material.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00013-datablock-Material.blend new file mode 100644 index 00000000..4365685c Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00013-datablock-Material.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00014-datablock-Mesh.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00014-datablock-Mesh.blend new file mode 100644 index 00000000..074c8137 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00014-datablock-Mesh.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00015-datablock-MetaBall.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00015-datablock-MetaBall.blend new file mode 100644 index 00000000..ccf72263 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00015-datablock-MetaBall.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00016-datablock-NodeTree.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00016-datablock-NodeTree.blend new file mode 100644 index 00000000..06455f09 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00016-datablock-NodeTree.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00017-datablock-Object.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00017-datablock-Object.blend new file mode 100644 index 00000000..5bb693bf Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00017-datablock-Object.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00018-datablock-ParticleSettings.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00018-datablock-ParticleSettings.blend new file mode 100644 index 00000000..6319bc60 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00018-datablock-ParticleSettings.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00019-datablock-PointCloud.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00019-datablock-PointCloud.blend new file mode 100644 index 00000000..e4ac696a Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00019-datablock-PointCloud.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00020-datablock-Scene.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00020-datablock-Scene.blend new file mode 100644 index 00000000..dab861d8 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00020-datablock-Scene.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00021-datablock-Screen.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00021-datablock-Screen.blend new file mode 100644 index 00000000..9cf364c5 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00021-datablock-Screen.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00022-datablock-Sound.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00022-datablock-Sound.blend new file mode 100644 index 00000000..9d56e05c Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00022-datablock-Sound.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00023-datablock-Speaker.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00023-datablock-Speaker.blend new file mode 100644 index 00000000..3941467b Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00023-datablock-Speaker.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00024-datablock-Text.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00024-datablock-Text.blend new file mode 100644 index 00000000..7798f40e Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00024-datablock-Text.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00025-datablock-Texture.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00025-datablock-Texture.blend new file mode 100644 index 00000000..3ea877ef Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00025-datablock-Texture.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00026-datablock-Volume.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00026-datablock-Volume.blend new file mode 100644 index 00000000..2e0139a3 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00026-datablock-Volume.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00027-datablock-WindowManager.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00027-datablock-WindowManager.blend new file mode 100644 index 00000000..ad4404d5 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00027-datablock-WindowManager.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00028-datablock-WorkSpace.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00028-datablock-WorkSpace.blend new file mode 100644 index 00000000..f34c566b Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00028-datablock-WorkSpace.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00029-datablock-World.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00029-datablock-World.blend new file mode 100644 index 00000000..274cd997 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00029-datablock-World.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00030-modifier-ARMATURE.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00030-modifier-ARMATURE.blend new file mode 100644 index 00000000..57606ddc Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00030-modifier-ARMATURE.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00031-modifier-ARRAY.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00031-modifier-ARRAY.blend new file mode 100644 index 00000000..dd6e77b4 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00031-modifier-ARRAY.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00032-modifier-BEVEL.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00032-modifier-BEVEL.blend new file mode 100644 index 00000000..65f837ed Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00032-modifier-BEVEL.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00033-modifier-BOOLEAN.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00033-modifier-BOOLEAN.blend new file mode 100644 index 00000000..3fea58ab Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00033-modifier-BOOLEAN.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00034-modifier-BUILD.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00034-modifier-BUILD.blend new file mode 100644 index 00000000..f1a73da0 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00034-modifier-BUILD.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00035-modifier-CAST.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00035-modifier-CAST.blend new file mode 100644 index 00000000..95c025f0 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00035-modifier-CAST.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00036-modifier-CLOTH.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00036-modifier-CLOTH.blend new file mode 100644 index 00000000..2d1e212b Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00036-modifier-CLOTH.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00037-modifier-COLLISION.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00037-modifier-COLLISION.blend new file mode 100644 index 00000000..d555de09 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00037-modifier-COLLISION.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00038-modifier-CORRECTIVE_SMOOTH.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00038-modifier-CORRECTIVE_SMOOTH.blend new file mode 100644 index 00000000..03102914 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00038-modifier-CORRECTIVE_SMOOTH.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00039-modifier-CURVE.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00039-modifier-CURVE.blend new file mode 100644 index 00000000..7b00693b Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00039-modifier-CURVE.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00040-modifier-DATA_TRANSFER.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00040-modifier-DATA_TRANSFER.blend new file mode 100644 index 00000000..895c438e Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00040-modifier-DATA_TRANSFER.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00041-modifier-DECIMATE.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00041-modifier-DECIMATE.blend new file mode 100644 index 00000000..ddfd4d71 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00041-modifier-DECIMATE.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00042-modifier-DISPLACE.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00042-modifier-DISPLACE.blend new file mode 100644 index 00000000..7ad768ca Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00042-modifier-DISPLACE.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00043-modifier-DYNAMIC_PAINT.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00043-modifier-DYNAMIC_PAINT.blend new file mode 100644 index 00000000..acb18574 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00043-modifier-DYNAMIC_PAINT.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00044-modifier-EDGE_SPLIT.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00044-modifier-EDGE_SPLIT.blend new file mode 100644 index 00000000..152250a3 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00044-modifier-EDGE_SPLIT.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00045-modifier-EXPLODE.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00045-modifier-EXPLODE.blend new file mode 100644 index 00000000..b61c3033 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00045-modifier-EXPLODE.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00046-modifier-FLUID.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00046-modifier-FLUID.blend new file mode 100644 index 00000000..366e9827 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00046-modifier-FLUID.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00047-modifier-GREASE_PENCIL_ARMATURE.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00047-modifier-GREASE_PENCIL_ARMATURE.blend new file mode 100644 index 00000000..40273a11 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00047-modifier-GREASE_PENCIL_ARMATURE.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00048-modifier-GREASE_PENCIL_ARRAY.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00048-modifier-GREASE_PENCIL_ARRAY.blend new file mode 100644 index 00000000..40273a11 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00048-modifier-GREASE_PENCIL_ARRAY.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00049-modifier-GREASE_PENCIL_BUILD.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00049-modifier-GREASE_PENCIL_BUILD.blend new file mode 100644 index 00000000..40273a11 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00049-modifier-GREASE_PENCIL_BUILD.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00050-modifier-GREASE_PENCIL_COLOR.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00050-modifier-GREASE_PENCIL_COLOR.blend new file mode 100644 index 00000000..40273a11 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00050-modifier-GREASE_PENCIL_COLOR.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00051-modifier-GREASE_PENCIL_DASH.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00051-modifier-GREASE_PENCIL_DASH.blend new file mode 100644 index 00000000..40273a11 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00051-modifier-GREASE_PENCIL_DASH.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00052-modifier-GREASE_PENCIL_ENVELOPE.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00052-modifier-GREASE_PENCIL_ENVELOPE.blend new file mode 100644 index 00000000..40273a11 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00052-modifier-GREASE_PENCIL_ENVELOPE.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00053-modifier-GREASE_PENCIL_HOOK.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00053-modifier-GREASE_PENCIL_HOOK.blend new file mode 100644 index 00000000..40273a11 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00053-modifier-GREASE_PENCIL_HOOK.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00054-modifier-GREASE_PENCIL_LATTICE.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00054-modifier-GREASE_PENCIL_LATTICE.blend new file mode 100644 index 00000000..40273a11 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00054-modifier-GREASE_PENCIL_LATTICE.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00055-modifier-GREASE_PENCIL_LENGTH.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00055-modifier-GREASE_PENCIL_LENGTH.blend new file mode 100644 index 00000000..40273a11 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00055-modifier-GREASE_PENCIL_LENGTH.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00056-modifier-GREASE_PENCIL_MIRROR.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00056-modifier-GREASE_PENCIL_MIRROR.blend new file mode 100644 index 00000000..40273a11 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00056-modifier-GREASE_PENCIL_MIRROR.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00057-modifier-GREASE_PENCIL_MULTIPLY.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00057-modifier-GREASE_PENCIL_MULTIPLY.blend new file mode 100644 index 00000000..40273a11 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00057-modifier-GREASE_PENCIL_MULTIPLY.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00058-modifier-GREASE_PENCIL_NOISE.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00058-modifier-GREASE_PENCIL_NOISE.blend new file mode 100644 index 00000000..40273a11 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00058-modifier-GREASE_PENCIL_NOISE.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00059-modifier-GREASE_PENCIL_OFFSET.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00059-modifier-GREASE_PENCIL_OFFSET.blend new file mode 100644 index 00000000..40273a11 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00059-modifier-GREASE_PENCIL_OFFSET.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00060-modifier-GREASE_PENCIL_OPACITY.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00060-modifier-GREASE_PENCIL_OPACITY.blend new file mode 100644 index 00000000..40273a11 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00060-modifier-GREASE_PENCIL_OPACITY.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00061-modifier-GREASE_PENCIL_OUTLINE.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00061-modifier-GREASE_PENCIL_OUTLINE.blend new file mode 100644 index 00000000..40273a11 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00061-modifier-GREASE_PENCIL_OUTLINE.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00062-modifier-GREASE_PENCIL_SHRINKWRAP.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00062-modifier-GREASE_PENCIL_SHRINKWRAP.blend new file mode 100644 index 00000000..40273a11 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00062-modifier-GREASE_PENCIL_SHRINKWRAP.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00063-modifier-GREASE_PENCIL_SIMPLIFY.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00063-modifier-GREASE_PENCIL_SIMPLIFY.blend new file mode 100644 index 00000000..40273a11 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00063-modifier-GREASE_PENCIL_SIMPLIFY.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00064-modifier-GREASE_PENCIL_SMOOTH.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00064-modifier-GREASE_PENCIL_SMOOTH.blend new file mode 100644 index 00000000..40273a11 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00064-modifier-GREASE_PENCIL_SMOOTH.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00065-modifier-GREASE_PENCIL_SUBDIV.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00065-modifier-GREASE_PENCIL_SUBDIV.blend new file mode 100644 index 00000000..40273a11 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00065-modifier-GREASE_PENCIL_SUBDIV.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00066-modifier-GREASE_PENCIL_TEXTURE.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00066-modifier-GREASE_PENCIL_TEXTURE.blend new file mode 100644 index 00000000..40273a11 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00066-modifier-GREASE_PENCIL_TEXTURE.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00067-modifier-GREASE_PENCIL_THICKNESS.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00067-modifier-GREASE_PENCIL_THICKNESS.blend new file mode 100644 index 00000000..40273a11 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00067-modifier-GREASE_PENCIL_THICKNESS.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00068-modifier-GREASE_PENCIL_TIME.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00068-modifier-GREASE_PENCIL_TIME.blend new file mode 100644 index 00000000..40273a11 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00068-modifier-GREASE_PENCIL_TIME.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00069-modifier-GREASE_PENCIL_TINT.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00069-modifier-GREASE_PENCIL_TINT.blend new file mode 100644 index 00000000..40273a11 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00069-modifier-GREASE_PENCIL_TINT.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00070-modifier-GREASE_PENCIL_VERTEX_WEIGHT_ANGLE.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00070-modifier-GREASE_PENCIL_VERTEX_WEIGHT_ANGLE.blend new file mode 100644 index 00000000..40273a11 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00070-modifier-GREASE_PENCIL_VERTEX_WEIGHT_ANGLE.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00071-modifier-GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00071-modifier-GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY.blend new file mode 100644 index 00000000..40273a11 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00071-modifier-GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00072-modifier-HOOK.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00072-modifier-HOOK.blend new file mode 100644 index 00000000..f1de620e Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00072-modifier-HOOK.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00073-modifier-LAPLACIANDEFORM.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00073-modifier-LAPLACIANDEFORM.blend new file mode 100644 index 00000000..cd9507c4 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00073-modifier-LAPLACIANDEFORM.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00074-modifier-LAPLACIANSMOOTH.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00074-modifier-LAPLACIANSMOOTH.blend new file mode 100644 index 00000000..ee388fba Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00074-modifier-LAPLACIANSMOOTH.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00075-modifier-LATTICE.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00075-modifier-LATTICE.blend new file mode 100644 index 00000000..d3332611 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00075-modifier-LATTICE.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00076-modifier-LINEART.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00076-modifier-LINEART.blend new file mode 100644 index 00000000..40273a11 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00076-modifier-LINEART.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00077-modifier-MASK.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00077-modifier-MASK.blend new file mode 100644 index 00000000..8ecd0482 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00077-modifier-MASK.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00078-modifier-MESH_CACHE.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00078-modifier-MESH_CACHE.blend new file mode 100644 index 00000000..d6f77ef1 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00078-modifier-MESH_CACHE.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00079-modifier-MESH_DEFORM.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00079-modifier-MESH_DEFORM.blend new file mode 100644 index 00000000..ef1405c8 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00079-modifier-MESH_DEFORM.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00080-modifier-MESH_SEQUENCE_CACHE.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00080-modifier-MESH_SEQUENCE_CACHE.blend new file mode 100644 index 00000000..982cc9a9 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00080-modifier-MESH_SEQUENCE_CACHE.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00081-modifier-MESH_TO_VOLUME.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00081-modifier-MESH_TO_VOLUME.blend new file mode 100644 index 00000000..b1c4751c Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00081-modifier-MESH_TO_VOLUME.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00082-modifier-MIRROR.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00082-modifier-MIRROR.blend new file mode 100644 index 00000000..8c810e8f Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00082-modifier-MIRROR.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00083-modifier-MULTIRES.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00083-modifier-MULTIRES.blend new file mode 100644 index 00000000..5e6d29f0 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00083-modifier-MULTIRES.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00084-modifier-NODES.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00084-modifier-NODES.blend new file mode 100644 index 00000000..de86ef7a Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00084-modifier-NODES.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00085-modifier-NORMAL_EDIT.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00085-modifier-NORMAL_EDIT.blend new file mode 100644 index 00000000..34abdf48 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00085-modifier-NORMAL_EDIT.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00086-modifier-OCEAN.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00086-modifier-OCEAN.blend new file mode 100644 index 00000000..ab2839f1 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00086-modifier-OCEAN.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00087-modifier-PARTICLE_INSTANCE.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00087-modifier-PARTICLE_INSTANCE.blend new file mode 100644 index 00000000..eda28e6a Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00087-modifier-PARTICLE_INSTANCE.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00088-modifier-PARTICLE_SYSTEM.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00088-modifier-PARTICLE_SYSTEM.blend new file mode 100644 index 00000000..a4990f8f Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00088-modifier-PARTICLE_SYSTEM.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00089-modifier-REMESH.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00089-modifier-REMESH.blend new file mode 100644 index 00000000..5a357d5c Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00089-modifier-REMESH.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00090-modifier-SCREW.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00090-modifier-SCREW.blend new file mode 100644 index 00000000..0d22b216 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00090-modifier-SCREW.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00091-modifier-SHRINKWRAP.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00091-modifier-SHRINKWRAP.blend new file mode 100644 index 00000000..b7a23578 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00091-modifier-SHRINKWRAP.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00092-modifier-SIMPLE_DEFORM.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00092-modifier-SIMPLE_DEFORM.blend new file mode 100644 index 00000000..a381beae Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00092-modifier-SIMPLE_DEFORM.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00093-modifier-SKIN.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00093-modifier-SKIN.blend new file mode 100644 index 00000000..471e8a24 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00093-modifier-SKIN.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00094-modifier-SMOOTH.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00094-modifier-SMOOTH.blend new file mode 100644 index 00000000..3fdd0276 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00094-modifier-SMOOTH.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00095-modifier-SOFT_BODY.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00095-modifier-SOFT_BODY.blend new file mode 100644 index 00000000..258f8c8e Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00095-modifier-SOFT_BODY.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00096-modifier-SOLIDIFY.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00096-modifier-SOLIDIFY.blend new file mode 100644 index 00000000..55fdec1b Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00096-modifier-SOLIDIFY.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00097-modifier-SUBSURF.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00097-modifier-SUBSURF.blend new file mode 100644 index 00000000..aeef277a Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00097-modifier-SUBSURF.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00098-modifier-SURFACE.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00098-modifier-SURFACE.blend new file mode 100644 index 00000000..afe39c9d Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00098-modifier-SURFACE.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00099-modifier-SURFACE_DEFORM.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00099-modifier-SURFACE_DEFORM.blend new file mode 100644 index 00000000..7b2a5d79 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00099-modifier-SURFACE_DEFORM.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00100-modifier-TRIANGULATE.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00100-modifier-TRIANGULATE.blend new file mode 100644 index 00000000..93b6d003 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00100-modifier-TRIANGULATE.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00101-modifier-UV_PROJECT.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00101-modifier-UV_PROJECT.blend new file mode 100644 index 00000000..4c5677a8 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00101-modifier-UV_PROJECT.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00102-modifier-UV_WARP.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00102-modifier-UV_WARP.blend new file mode 100644 index 00000000..5751b8e2 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00102-modifier-UV_WARP.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00103-modifier-VERTEX_WEIGHT_EDIT.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00103-modifier-VERTEX_WEIGHT_EDIT.blend new file mode 100644 index 00000000..deb2a8f0 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00103-modifier-VERTEX_WEIGHT_EDIT.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00104-modifier-VERTEX_WEIGHT_MIX.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00104-modifier-VERTEX_WEIGHT_MIX.blend new file mode 100644 index 00000000..e1b2c3b1 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00104-modifier-VERTEX_WEIGHT_MIX.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00105-modifier-VERTEX_WEIGHT_PROXIMITY.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00105-modifier-VERTEX_WEIGHT_PROXIMITY.blend new file mode 100644 index 00000000..875ce49b Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00105-modifier-VERTEX_WEIGHT_PROXIMITY.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00106-modifier-VOLUME_DISPLACE.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00106-modifier-VOLUME_DISPLACE.blend new file mode 100644 index 00000000..abf8422f Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00106-modifier-VOLUME_DISPLACE.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00107-modifier-VOLUME_TO_MESH.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00107-modifier-VOLUME_TO_MESH.blend new file mode 100644 index 00000000..7d8c3b8f Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00107-modifier-VOLUME_TO_MESH.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00108-modifier-WARP.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00108-modifier-WARP.blend new file mode 100644 index 00000000..16930e6a Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00108-modifier-WARP.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00109-modifier-WAVE.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00109-modifier-WAVE.blend new file mode 100644 index 00000000..0a6f6a2d Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00109-modifier-WAVE.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00110-modifier-WEIGHTED_NORMAL.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00110-modifier-WEIGHTED_NORMAL.blend new file mode 100644 index 00000000..93e51ebe Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00110-modifier-WEIGHTED_NORMAL.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00111-modifier-WELD.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00111-modifier-WELD.blend new file mode 100644 index 00000000..7b1af36c Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00111-modifier-WELD.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00112-modifier-WIREFRAME.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00112-modifier-WIREFRAME.blend new file mode 100644 index 00000000..dd0063f2 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00112-modifier-WIREFRAME.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00113-operator-action.bake_keys.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00113-operator-action.bake_keys.blend new file mode 100644 index 00000000..3faaf72b Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00113-operator-action.bake_keys.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00114-operator-action.clean.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00114-operator-action.clean.blend new file mode 100644 index 00000000..465fe4f9 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00114-operator-action.clean.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00115-operator-action.clickselect.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00115-operator-action.clickselect.blend new file mode 100644 index 00000000..d7425298 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00115-operator-action.clickselect.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00116-operator-action.copy.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00116-operator-action.copy.blend new file mode 100644 index 00000000..f8375e16 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00116-operator-action.copy.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00117-operator-action.delete.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00117-operator-action.delete.blend new file mode 100644 index 00000000..56fe261f Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00117-operator-action.delete.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00118-operator-action.duplicate.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00118-operator-action.duplicate.blend new file mode 100644 index 00000000..4578248d Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00118-operator-action.duplicate.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00119-operator-action.duplicate_move.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00119-operator-action.duplicate_move.blend new file mode 100644 index 00000000..88fc8239 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00119-operator-action.duplicate_move.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00120-operator-action.easing_type.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00120-operator-action.easing_type.blend new file mode 100644 index 00000000..70311c09 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00120-operator-action.easing_type.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00121-operator-action.extrapolation_type.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00121-operator-action.extrapolation_type.blend new file mode 100644 index 00000000..bb4a8ae0 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00121-operator-action.extrapolation_type.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00122-operator-action.frame_jump.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00122-operator-action.frame_jump.blend new file mode 100644 index 00000000..ceb6fad2 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00122-operator-action.frame_jump.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00123-operator-action.handle_type.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00123-operator-action.handle_type.blend new file mode 100644 index 00000000..d39dcbb8 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00123-operator-action.handle_type.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00124-operator-action.interpolation_type.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00124-operator-action.interpolation_type.blend new file mode 100644 index 00000000..a694a150 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00124-operator-action.interpolation_type.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00125-operator-action.keyframe_insert.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00125-operator-action.keyframe_insert.blend new file mode 100644 index 00000000..b1d3ab54 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00125-operator-action.keyframe_insert.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00126-operator-action.keyframe_type.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00126-operator-action.keyframe_type.blend new file mode 100644 index 00000000..49583dd4 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00126-operator-action.keyframe_type.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00127-operator-action.markers_make_local.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00127-operator-action.markers_make_local.blend new file mode 100644 index 00000000..720bf802 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00127-operator-action.markers_make_local.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00128-operator-action.mirror.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00128-operator-action.mirror.blend new file mode 100644 index 00000000..2d1c2508 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00128-operator-action.mirror.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00129-operator-action.new.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00129-operator-action.new.blend new file mode 100644 index 00000000..9d46698d Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00129-operator-action.new.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00130-operator-action.paste.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00130-operator-action.paste.blend new file mode 100644 index 00000000..479d317e Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00130-operator-action.paste.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00131-operator-action.previewrange_set.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00131-operator-action.previewrange_set.blend new file mode 100644 index 00000000..d7640168 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00131-operator-action.previewrange_set.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00132-operator-action.push_down.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00132-operator-action.push_down.blend new file mode 100644 index 00000000..4e2f9b95 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00132-operator-action.push_down.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00133-operator-action.select_all.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00133-operator-action.select_all.blend new file mode 100644 index 00000000..20ba9981 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00133-operator-action.select_all.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00134-operator-action.select_box.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00134-operator-action.select_box.blend new file mode 100644 index 00000000..b39012bf Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00134-operator-action.select_box.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00135-operator-action.select_by_type.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00135-operator-action.select_by_type.blend new file mode 100644 index 00000000..7552a8be Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00135-operator-action.select_by_type.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00136-operator-action.select_circle.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00136-operator-action.select_circle.blend new file mode 100644 index 00000000..858134e1 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00136-operator-action.select_circle.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00137-operator-action.select_column.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00137-operator-action.select_column.blend new file mode 100644 index 00000000..369d3a9a Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00137-operator-action.select_column.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00138-operator-action.select_lasso.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00138-operator-action.select_lasso.blend new file mode 100644 index 00000000..a0722303 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00138-operator-action.select_lasso.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00139-operator-action.select_leftright.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00139-operator-action.select_leftright.blend new file mode 100644 index 00000000..01431451 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00139-operator-action.select_leftright.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00140-operator-action.select_less.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00140-operator-action.select_less.blend new file mode 100644 index 00000000..d910fd1e Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00140-operator-action.select_less.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00141-operator-action.select_linked.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00141-operator-action.select_linked.blend new file mode 100644 index 00000000..be2dbe03 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00141-operator-action.select_linked.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00142-operator-action.select_more.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00142-operator-action.select_more.blend new file mode 100644 index 00000000..f49de9fe Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00142-operator-action.select_more.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00143-operator-action.snap.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00143-operator-action.snap.blend new file mode 100644 index 00000000..67c44a65 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00143-operator-action.snap.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00144-operator-action.stash.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00144-operator-action.stash.blend new file mode 100644 index 00000000..9adf837a Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00144-operator-action.stash.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00145-operator-action.stash_and_create.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00145-operator-action.stash_and_create.blend new file mode 100644 index 00000000..e5a75a57 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00145-operator-action.stash_and_create.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00146-operator-action.unlink.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00146-operator-action.unlink.blend new file mode 100644 index 00000000..a2332c75 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00146-operator-action.unlink.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00147-operator-action.view_all.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00147-operator-action.view_all.blend new file mode 100644 index 00000000..5ab2a78f Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00147-operator-action.view_all.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00148-operator-action.view_frame.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00148-operator-action.view_frame.blend new file mode 100644 index 00000000..815f9115 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00148-operator-action.view_frame.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00149-operator-action.view_selected.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00149-operator-action.view_selected.blend new file mode 100644 index 00000000..311cfd84 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00149-operator-action.view_selected.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00150-operator-anim.change_frame.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00150-operator-anim.change_frame.blend new file mode 100644 index 00000000..85e5cfc3 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00150-operator-anim.change_frame.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00151-operator-anim.channel_select_keys.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00151-operator-anim.channel_select_keys.blend new file mode 100644 index 00000000..08c0abac Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00151-operator-anim.channel_select_keys.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00152-operator-anim.channel_view_pick.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00152-operator-anim.channel_view_pick.blend new file mode 100644 index 00000000..a366ad4a Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00152-operator-anim.channel_view_pick.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00153-operator-anim.channels_bake.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00153-operator-anim.channels_bake.blend new file mode 100644 index 00000000..d08720d9 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00153-operator-anim.channels_bake.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00154-operator-anim.channels_clean_empty.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00154-operator-anim.channels_clean_empty.blend new file mode 100644 index 00000000..2cd8818f Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00154-operator-anim.channels_clean_empty.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00155-operator-anim.channels_click.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00155-operator-anim.channels_click.blend new file mode 100644 index 00000000..0d949189 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00155-operator-anim.channels_click.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00156-operator-anim.channels_collapse.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00156-operator-anim.channels_collapse.blend new file mode 100644 index 00000000..47544bc9 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00156-operator-anim.channels_collapse.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00157-operator-anim.channels_delete.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00157-operator-anim.channels_delete.blend new file mode 100644 index 00000000..fe6f94c0 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00157-operator-anim.channels_delete.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00158-operator-anim.channels_editable_toggle.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00158-operator-anim.channels_editable_toggle.blend new file mode 100644 index 00000000..224dc659 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00158-operator-anim.channels_editable_toggle.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00159-operator-anim.channels_expand.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00159-operator-anim.channels_expand.blend new file mode 100644 index 00000000..6f409d6e Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00159-operator-anim.channels_expand.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00160-operator-anim.channels_fcurves_enable.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00160-operator-anim.channels_fcurves_enable.blend new file mode 100644 index 00000000..08051623 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00160-operator-anim.channels_fcurves_enable.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00161-operator-anim.channels_group.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00161-operator-anim.channels_group.blend new file mode 100644 index 00000000..5787631e Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00161-operator-anim.channels_group.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00162-operator-anim.channels_move.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00162-operator-anim.channels_move.blend new file mode 100644 index 00000000..eb7f97d5 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00162-operator-anim.channels_move.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00163-operator-anim.channels_rename.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00163-operator-anim.channels_rename.blend new file mode 100644 index 00000000..8ae3e5a0 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00163-operator-anim.channels_rename.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00164-operator-anim.channels_select_all.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00164-operator-anim.channels_select_all.blend new file mode 100644 index 00000000..c36af373 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00164-operator-anim.channels_select_all.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00165-operator-anim.channels_select_box.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00165-operator-anim.channels_select_box.blend new file mode 100644 index 00000000..22f82dc4 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00165-operator-anim.channels_select_box.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00166-operator-anim.channels_select_filter.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00166-operator-anim.channels_select_filter.blend new file mode 100644 index 00000000..81586702 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00166-operator-anim.channels_select_filter.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00167-operator-anim.channels_setting_disable.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00167-operator-anim.channels_setting_disable.blend new file mode 100644 index 00000000..56fee386 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00167-operator-anim.channels_setting_disable.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00168-operator-anim.channels_setting_enable.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00168-operator-anim.channels_setting_enable.blend new file mode 100644 index 00000000..aec7d19c Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00168-operator-anim.channels_setting_enable.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00169-operator-anim.channels_setting_toggle.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00169-operator-anim.channels_setting_toggle.blend new file mode 100644 index 00000000..3793c537 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00169-operator-anim.channels_setting_toggle.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00170-operator-anim.channels_ungroup.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00170-operator-anim.channels_ungroup.blend new file mode 100644 index 00000000..da9fb310 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00170-operator-anim.channels_ungroup.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00171-operator-anim.channels_view_selected.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00171-operator-anim.channels_view_selected.blend new file mode 100644 index 00000000..7ae829cb Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00171-operator-anim.channels_view_selected.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00172-operator-anim.clear_useless_actions.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00172-operator-anim.clear_useless_actions.blend new file mode 100644 index 00000000..a392e7cc Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00172-operator-anim.clear_useless_actions.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00173-operator-anim.copy_driver_button.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00173-operator-anim.copy_driver_button.blend new file mode 100644 index 00000000..50d493da Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00173-operator-anim.copy_driver_button.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00174-operator-anim.driver_button_add.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00174-operator-anim.driver_button_add.blend new file mode 100644 index 00000000..9c16a626 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00174-operator-anim.driver_button_add.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00175-operator-anim.driver_button_edit.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00175-operator-anim.driver_button_edit.blend new file mode 100644 index 00000000..4080d8ba Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00175-operator-anim.driver_button_edit.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00176-operator-anim.driver_button_remove.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00176-operator-anim.driver_button_remove.blend new file mode 100644 index 00000000..c3c4185a Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00176-operator-anim.driver_button_remove.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00177-operator-anim.end_frame_set.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00177-operator-anim.end_frame_set.blend new file mode 100644 index 00000000..19125a4c Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00177-operator-anim.end_frame_set.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00178-operator-anim.keyframe_clear_button.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00178-operator-anim.keyframe_clear_button.blend new file mode 100644 index 00000000..19121ec6 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00178-operator-anim.keyframe_clear_button.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00179-operator-anim.keyframe_clear_v3d.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00179-operator-anim.keyframe_clear_v3d.blend new file mode 100644 index 00000000..c9b95d11 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00179-operator-anim.keyframe_clear_v3d.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00180-operator-anim.keyframe_clear_vse.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00180-operator-anim.keyframe_clear_vse.blend new file mode 100644 index 00000000..61bd3487 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00180-operator-anim.keyframe_clear_vse.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00181-operator-anim.keyframe_delete.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00181-operator-anim.keyframe_delete.blend new file mode 100644 index 00000000..ef48213a Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00181-operator-anim.keyframe_delete.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00182-operator-anim.keyframe_delete_button.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00182-operator-anim.keyframe_delete_button.blend new file mode 100644 index 00000000..2c4d8a5d Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00182-operator-anim.keyframe_delete_button.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00183-operator-anim.keyframe_delete_by_name.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00183-operator-anim.keyframe_delete_by_name.blend new file mode 100644 index 00000000..68362057 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00183-operator-anim.keyframe_delete_by_name.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00184-operator-anim.keyframe_delete_v3d.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00184-operator-anim.keyframe_delete_v3d.blend new file mode 100644 index 00000000..a4aa84f8 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00184-operator-anim.keyframe_delete_v3d.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00185-operator-anim.keyframe_delete_vse.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00185-operator-anim.keyframe_delete_vse.blend new file mode 100644 index 00000000..ef25561b Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00185-operator-anim.keyframe_delete_vse.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00186-operator-anim.keyframe_insert.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00186-operator-anim.keyframe_insert.blend new file mode 100644 index 00000000..12d053df Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00186-operator-anim.keyframe_insert.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00187-operator-anim.keyframe_insert_button.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00187-operator-anim.keyframe_insert_button.blend new file mode 100644 index 00000000..e3633be4 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00187-operator-anim.keyframe_insert_button.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00188-operator-anim.keyframe_insert_by_name.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00188-operator-anim.keyframe_insert_by_name.blend new file mode 100644 index 00000000..f946436c Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00188-operator-anim.keyframe_insert_by_name.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00189-operator-anim.keyframe_insert_menu.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00189-operator-anim.keyframe_insert_menu.blend new file mode 100644 index 00000000..6505391a Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00189-operator-anim.keyframe_insert_menu.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00190-operator-anim.keying_set_active_set.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00190-operator-anim.keying_set_active_set.blend new file mode 100644 index 00000000..d1298ab6 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00190-operator-anim.keying_set_active_set.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00191-operator-anim.keying_set_add.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00191-operator-anim.keying_set_add.blend new file mode 100644 index 00000000..cbe29403 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00191-operator-anim.keying_set_add.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00192-operator-anim.keying_set_export.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00192-operator-anim.keying_set_export.blend new file mode 100644 index 00000000..7c9f7740 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00192-operator-anim.keying_set_export.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00193-operator-anim.keying_set_path_add.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00193-operator-anim.keying_set_path_add.blend new file mode 100644 index 00000000..e0e9b84b Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00193-operator-anim.keying_set_path_add.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00194-operator-anim.keying_set_path_remove.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00194-operator-anim.keying_set_path_remove.blend new file mode 100644 index 00000000..8d5d5936 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00194-operator-anim.keying_set_path_remove.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00195-operator-anim.keying_set_remove.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00195-operator-anim.keying_set_remove.blend new file mode 100644 index 00000000..aa55acba Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00195-operator-anim.keying_set_remove.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00196-operator-anim.keyingset_button_add.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00196-operator-anim.keyingset_button_add.blend new file mode 100644 index 00000000..6e11756a Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00196-operator-anim.keyingset_button_add.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00197-operator-anim.keyingset_button_remove.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00197-operator-anim.keyingset_button_remove.blend new file mode 100644 index 00000000..2759dc3b Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00197-operator-anim.keyingset_button_remove.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00198-operator-anim.merge_animation.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00198-operator-anim.merge_animation.blend new file mode 100644 index 00000000..1c8e807a Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00198-operator-anim.merge_animation.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00199-operator-anim.paste_driver_button.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00199-operator-anim.paste_driver_button.blend new file mode 100644 index 00000000..db5f0c9f Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00199-operator-anim.paste_driver_button.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00200-operator-anim.previewrange_clear.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00200-operator-anim.previewrange_clear.blend new file mode 100644 index 00000000..bf765370 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00200-operator-anim.previewrange_clear.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00201-operator-anim.previewrange_set.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00201-operator-anim.previewrange_set.blend new file mode 100644 index 00000000..0add1053 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00201-operator-anim.previewrange_set.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00202-operator-anim.replace_action.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00202-operator-anim.replace_action.blend new file mode 100644 index 00000000..48a2a783 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00202-operator-anim.replace_action.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00203-operator-anim.replace_action_new.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00203-operator-anim.replace_action_new.blend new file mode 100644 index 00000000..780fe4c7 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00203-operator-anim.replace_action_new.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00204-operator-anim.scene_range_frame.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00204-operator-anim.scene_range_frame.blend new file mode 100644 index 00000000..b3a3060d Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00204-operator-anim.scene_range_frame.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00205-operator-anim.separate_slots.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00205-operator-anim.separate_slots.blend new file mode 100644 index 00000000..354e6a0a Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00205-operator-anim.separate_slots.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00206-operator-anim.slot_channels_move_to_new_action.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00206-operator-anim.slot_channels_move_to_new_action.blend new file mode 100644 index 00000000..26267dbe Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00206-operator-anim.slot_channels_move_to_new_action.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00207-operator-anim.slot_new_for_id.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00207-operator-anim.slot_new_for_id.blend new file mode 100644 index 00000000..4b676534 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00207-operator-anim.slot_new_for_id.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00208-operator-anim.slot_unassign_from_constraint.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00208-operator-anim.slot_unassign_from_constraint.blend new file mode 100644 index 00000000..b84f9548 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00208-operator-anim.slot_unassign_from_constraint.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00209-operator-anim.slot_unassign_from_id.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00209-operator-anim.slot_unassign_from_id.blend new file mode 100644 index 00000000..ec8648ed Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00209-operator-anim.slot_unassign_from_id.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00210-operator-anim.slot_unassign_from_nla_strip.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00210-operator-anim.slot_unassign_from_nla_strip.blend new file mode 100644 index 00000000..07c1392e Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00210-operator-anim.slot_unassign_from_nla_strip.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00211-operator-anim.start_frame_set.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00211-operator-anim.start_frame_set.blend new file mode 100644 index 00000000..bcb7879f Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00211-operator-anim.start_frame_set.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00212-operator-anim.update_animated_transform_constraints.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00212-operator-anim.update_animated_transform_constraints.blend new file mode 100644 index 00000000..e4e01f44 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00212-operator-anim.update_animated_transform_constraints.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00213-operator-anim.version_bone_hide_property.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00213-operator-anim.version_bone_hide_property.blend new file mode 100644 index 00000000..d823b08d Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00213-operator-anim.version_bone_hide_property.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00214-operator-anim.view_curve_in_graph_editor.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00214-operator-anim.view_curve_in_graph_editor.blend new file mode 100644 index 00000000..467c2921 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00214-operator-anim.view_curve_in_graph_editor.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00215-operator-armature.align.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00215-operator-armature.align.blend new file mode 100644 index 00000000..845ecf41 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00215-operator-armature.align.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00216-operator-armature.assign_to_collection.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00216-operator-armature.assign_to_collection.blend new file mode 100644 index 00000000..6859255f Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00216-operator-armature.assign_to_collection.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00217-operator-armature.autoside_names.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00217-operator-armature.autoside_names.blend new file mode 100644 index 00000000..019e4a57 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00217-operator-armature.autoside_names.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00218-operator-armature.bone_primitive_add.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00218-operator-armature.bone_primitive_add.blend new file mode 100644 index 00000000..c71ab966 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00218-operator-armature.bone_primitive_add.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00219-operator-armature.calculate_roll.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00219-operator-armature.calculate_roll.blend new file mode 100644 index 00000000..52e694e3 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00219-operator-armature.calculate_roll.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00220-operator-armature.click_extrude.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00220-operator-armature.click_extrude.blend new file mode 100644 index 00000000..b8e73747 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00220-operator-armature.click_extrude.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00221-operator-armature.collection_add.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00221-operator-armature.collection_add.blend new file mode 100644 index 00000000..5808edb6 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00221-operator-armature.collection_add.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00222-operator-armature.collection_assign.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00222-operator-armature.collection_assign.blend new file mode 100644 index 00000000..e67e51e3 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00222-operator-armature.collection_assign.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00223-operator-armature.collection_create_and_assign.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00223-operator-armature.collection_create_and_assign.blend new file mode 100644 index 00000000..aea9454e Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00223-operator-armature.collection_create_and_assign.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00224-operator-armature.collection_deselect.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00224-operator-armature.collection_deselect.blend new file mode 100644 index 00000000..0f9ab6e2 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00224-operator-armature.collection_deselect.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00225-operator-armature.collection_move.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00225-operator-armature.collection_move.blend new file mode 100644 index 00000000..0f8527ab Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00225-operator-armature.collection_move.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00226-operator-armature.collection_remove.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00226-operator-armature.collection_remove.blend new file mode 100644 index 00000000..99ec1082 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00226-operator-armature.collection_remove.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00227-operator-armature.collection_remove_unused.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00227-operator-armature.collection_remove_unused.blend new file mode 100644 index 00000000..bcfdc85e Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00227-operator-armature.collection_remove_unused.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00228-operator-armature.collection_select.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00228-operator-armature.collection_select.blend new file mode 100644 index 00000000..e5bd35b5 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00228-operator-armature.collection_select.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00229-operator-armature.collection_show_all.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00229-operator-armature.collection_show_all.blend new file mode 100644 index 00000000..3fe2bd94 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00229-operator-armature.collection_show_all.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00230-operator-armature.collection_unassign.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00230-operator-armature.collection_unassign.blend new file mode 100644 index 00000000..48ae9eb0 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00230-operator-armature.collection_unassign.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00231-operator-armature.collection_unassign_named.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00231-operator-armature.collection_unassign_named.blend new file mode 100644 index 00000000..adf79b23 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00231-operator-armature.collection_unassign_named.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00232-operator-armature.collection_unsolo_all.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00232-operator-armature.collection_unsolo_all.blend new file mode 100644 index 00000000..7e3f6127 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00232-operator-armature.collection_unsolo_all.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00233-operator-armature.copy_bone_color_to_selected.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00233-operator-armature.copy_bone_color_to_selected.blend new file mode 100644 index 00000000..fc3c72e6 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00233-operator-armature.copy_bone_color_to_selected.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00234-operator-armature.delete.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00234-operator-armature.delete.blend new file mode 100644 index 00000000..b3670eef Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00234-operator-armature.delete.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00235-operator-armature.dissolve.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00235-operator-armature.dissolve.blend new file mode 100644 index 00000000..8bc86e93 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00235-operator-armature.dissolve.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00236-operator-armature.duplicate.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00236-operator-armature.duplicate.blend new file mode 100644 index 00000000..f642aedd Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00236-operator-armature.duplicate.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00237-operator-armature.duplicate_move.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00237-operator-armature.duplicate_move.blend new file mode 100644 index 00000000..fb5d8761 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00237-operator-armature.duplicate_move.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00238-operator-armature.duplicate_rename.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00238-operator-armature.duplicate_rename.blend new file mode 100644 index 00000000..be2824e6 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00238-operator-armature.duplicate_rename.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00239-operator-armature.extrude.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00239-operator-armature.extrude.blend new file mode 100644 index 00000000..72a85e1c Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00239-operator-armature.extrude.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00240-operator-armature.extrude_forked.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00240-operator-armature.extrude_forked.blend new file mode 100644 index 00000000..4c071d74 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00240-operator-armature.extrude_forked.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00241-operator-armature.extrude_move.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00241-operator-armature.extrude_move.blend new file mode 100644 index 00000000..7c5bc8af Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00241-operator-armature.extrude_move.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00242-operator-armature.fill.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00242-operator-armature.fill.blend new file mode 100644 index 00000000..4da77f2a Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00242-operator-armature.fill.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00243-operator-armature.flip_names.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00243-operator-armature.flip_names.blend new file mode 100644 index 00000000..4de98739 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00243-operator-armature.flip_names.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00244-operator-armature.hide.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00244-operator-armature.hide.blend new file mode 100644 index 00000000..9c53321b Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00244-operator-armature.hide.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00245-operator-armature.move_to_collection.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00245-operator-armature.move_to_collection.blend new file mode 100644 index 00000000..5cf9bd40 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00245-operator-armature.move_to_collection.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00246-operator-armature.parent_clear.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00246-operator-armature.parent_clear.blend new file mode 100644 index 00000000..9fc3e36f Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00246-operator-armature.parent_clear.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00247-operator-armature.parent_set.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00247-operator-armature.parent_set.blend new file mode 100644 index 00000000..dd42ff50 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00247-operator-armature.parent_set.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00248-operator-armature.reveal.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00248-operator-armature.reveal.blend new file mode 100644 index 00000000..02bbbcce Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00248-operator-armature.reveal.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00249-operator-armature.roll_clear.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00249-operator-armature.roll_clear.blend new file mode 100644 index 00000000..0b58ba3e Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00249-operator-armature.roll_clear.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00250-operator-armature.select_all.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00250-operator-armature.select_all.blend new file mode 100644 index 00000000..305f5cb2 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00250-operator-armature.select_all.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00251-operator-armature.select_hierarchy.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00251-operator-armature.select_hierarchy.blend new file mode 100644 index 00000000..dc45e04a Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00251-operator-armature.select_hierarchy.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00252-operator-armature.select_less.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00252-operator-armature.select_less.blend new file mode 100644 index 00000000..d744d088 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00252-operator-armature.select_less.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00253-operator-armature.select_linked.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00253-operator-armature.select_linked.blend new file mode 100644 index 00000000..bc16d388 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00253-operator-armature.select_linked.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00254-operator-armature.select_linked_pick.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00254-operator-armature.select_linked_pick.blend new file mode 100644 index 00000000..d09ce8e1 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00254-operator-armature.select_linked_pick.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00255-operator-armature.select_mirror.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00255-operator-armature.select_mirror.blend new file mode 100644 index 00000000..0224c41e Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00255-operator-armature.select_mirror.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00256-operator-armature.select_more.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00256-operator-armature.select_more.blend new file mode 100644 index 00000000..2f992d50 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00256-operator-armature.select_more.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00257-operator-armature.select_similar.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00257-operator-armature.select_similar.blend new file mode 100644 index 00000000..3ac45cd1 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00257-operator-armature.select_similar.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00258-operator-armature.separate.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00258-operator-armature.separate.blend new file mode 100644 index 00000000..5079075b Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00258-operator-armature.separate.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00259-operator-armature.shortest_path_pick.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00259-operator-armature.shortest_path_pick.blend new file mode 100644 index 00000000..63cb9c7b Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00259-operator-armature.shortest_path_pick.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00260-operator-armature.split.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00260-operator-armature.split.blend new file mode 100644 index 00000000..695205d8 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00260-operator-armature.split.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00261-operator-armature.subdivide.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00261-operator-armature.subdivide.blend new file mode 100644 index 00000000..11bc8e99 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00261-operator-armature.subdivide.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00262-operator-armature.switch_direction.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00262-operator-armature.switch_direction.blend new file mode 100644 index 00000000..cd188279 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00262-operator-armature.switch_direction.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00263-operator-armature.symmetrize.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00263-operator-armature.symmetrize.blend new file mode 100644 index 00000000..8867dbb9 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00263-operator-armature.symmetrize.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00264-operator-asset.asset_download.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00264-operator-asset.asset_download.blend new file mode 100644 index 00000000..08a5a68d Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00264-operator-asset.asset_download.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00265-operator-asset.assets_download.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00265-operator-asset.assets_download.blend new file mode 100644 index 00000000..2bd858f2 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00265-operator-asset.assets_download.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00266-operator-asset.assign_action.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00266-operator-asset.assign_action.blend new file mode 100644 index 00000000..276bf363 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00266-operator-asset.assign_action.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00267-operator-asset.browse_containing_blend_file.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00267-operator-asset.browse_containing_blend_file.blend new file mode 100644 index 00000000..a29ae331 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00267-operator-asset.browse_containing_blend_file.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00268-operator-asset.bundle_install.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00268-operator-asset.bundle_install.blend new file mode 100644 index 00000000..911a69b3 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00268-operator-asset.bundle_install.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00269-operator-asset.catalog_delete.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00269-operator-asset.catalog_delete.blend new file mode 100644 index 00000000..98d3eb9b Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00269-operator-asset.catalog_delete.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00270-operator-asset.catalog_new.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00270-operator-asset.catalog_new.blend new file mode 100644 index 00000000..9953db14 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00270-operator-asset.catalog_new.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00271-operator-asset.catalog_redo.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00271-operator-asset.catalog_redo.blend new file mode 100644 index 00000000..9021debf Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00271-operator-asset.catalog_redo.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00272-operator-asset.catalog_undo.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00272-operator-asset.catalog_undo.blend new file mode 100644 index 00000000..3931d53b Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00272-operator-asset.catalog_undo.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00273-operator-asset.catalog_undo_push.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00273-operator-asset.catalog_undo_push.blend new file mode 100644 index 00000000..1e97fbae Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00273-operator-asset.catalog_undo_push.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00274-operator-asset.catalogs_save.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00274-operator-asset.catalogs_save.blend new file mode 100644 index 00000000..c417ee08 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00274-operator-asset.catalogs_save.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapBrowseContaining.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapBrowseContaining.blend new file mode 100644 index 00000000..e4b4647a Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapBrowseContaining.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapBundleInstall.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapBundleInstall.blend new file mode 100644 index 00000000..425705e8 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapBundleInstall.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapCatalogDelete.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapCatalogDelete.blend new file mode 100644 index 00000000..a540d7a2 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapCatalogDelete.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapCatalogNew.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapCatalogNew.blend new file mode 100644 index 00000000..d136c559 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapCatalogNew.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapCatalogRedo.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapCatalogRedo.blend new file mode 100644 index 00000000..c8fc133c Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapCatalogRedo.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapCatalogUndo.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapCatalogUndo.blend new file mode 100644 index 00000000..f4e818bc Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapCatalogUndo.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapCatalogUndoPush.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapCatalogUndoPush.blend new file mode 100644 index 00000000..3a38fedd Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapCatalogUndoPush.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapCatalogsSave.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapCatalogsSave.blend new file mode 100644 index 00000000..d512a206 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapCatalogsSave.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapLibrary.blend b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapLibrary.blend new file mode 100644 index 00000000..d8599e1d Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapLibrary.blend differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M15-03A/next-task-plan.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M15-03A/next-task-plan.json new file mode 100644 index 00000000..feb74160 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M15-03A/next-task-plan.json @@ -0,0 +1,158740 @@ +{ + "schemaVersion": 1, + "task": "M15-03A", + "operation": "BLENDER_NEXT_TASK_PLAN", + "sources": { + "parityMap": { + "path": "tests/golden/M15-02A/blender-parity-map.json", + "sha256": "f3e757f26e58a4252b6cc2a7f9275428bbe5bf659cc0f0ff6350a147bdf2809c" + }, + "gapAudit": { + "path": "tests/golden/M15-02B/blender-gap-audit.json", + "sha256": "e976ff40d2f3491a5a57ffcdd0d0c0f0586e57d06984e4a4aa05ba1b36800faa" + }, + "completions": { + "path": "tests/golden/M15-03A/completed-gap-tasks.json", + "sha256": "f9f4f1116b5975aa1b47fee15856f2029ec8f02161e432e9a24b846384cd1c5b" + } + }, + "summary": { + "taskCount": 6900, + "active": 1, + "pending": 6635, + "completed": 264, + "blocked": 0, + "byWave": { + "M16": 2667, + "M17": 29, + "M18": 451, + "M19": 20, + "M20": 89, + "M21": 3625, + "M22": 19 + } + }, + "tasks": [ + { + "id": "M16-GAP-00001", + "gapId": "datablock:Action", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00001-datablock-Action.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00001.py -- tests/files/web/generated/M16-GAP-00001-datablock-Action.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00001", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00001", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00002", + "gapId": "datablock:Armature", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00002-datablock-Armature.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00002.py -- tests/files/web/generated/M16-GAP-00002-datablock-Armature.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00002", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00002", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00003", + "gapId": "datablock:Brush", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00003-datablock-Brush.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00003.py -- tests/files/web/generated/M16-GAP-00003-datablock-Brush.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00003", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00003", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00004", + "gapId": "datablock:Camera", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00004-datablock-Camera.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00004.py -- tests/files/web/generated/M16-GAP-00004-datablock-Camera.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00004", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00004", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00005", + "gapId": "datablock:Collection", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00005-datablock-Collection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00005.py -- tests/files/web/generated/M16-GAP-00005-datablock-Collection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00005", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00005", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00006", + "gapId": "datablock:Curve", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00006-datablock-Curve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00006.py -- tests/files/web/generated/M16-GAP-00006-datablock-Curve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00006", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00006", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00007", + "gapId": "datablock:Curves", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00007-datablock-Curves.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00007.py -- tests/files/web/generated/M16-GAP-00007-datablock-Curves.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00007", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00007", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00008", + "gapId": "datablock:FreestyleLineStyle", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00008-datablock-FreestyleLineStyle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00008.py -- tests/files/web/generated/M16-GAP-00008-datablock-FreestyleLineStyle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00008", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00008", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00009", + "gapId": "datablock:GreasePencil", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00009-datablock-GreasePencil.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00009.py -- tests/files/web/generated/M16-GAP-00009-datablock-GreasePencil.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00009", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00009", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00010", + "gapId": "datablock:Lattice", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00010-datablock-Lattice.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00010.py -- tests/files/web/generated/M16-GAP-00010-datablock-Lattice.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00010", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00010", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00011", + "gapId": "datablock:Library", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00011-datablock-Library.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00011.py -- tests/files/web/generated/M16-GAP-00011-datablock-Library.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00011", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00011", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00012", + "gapId": "datablock:Light", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00012-datablock-Light.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00012.py -- tests/files/web/generated/M16-GAP-00012-datablock-Light.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00012", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00012", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00013", + "gapId": "datablock:Material", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00013-datablock-Material.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00013.py -- tests/files/web/generated/M16-GAP-00013-datablock-Material.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00013", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00013", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00014", + "gapId": "datablock:Mesh", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00014-datablock-Mesh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00014.py -- tests/files/web/generated/M16-GAP-00014-datablock-Mesh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00014", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00014", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00015", + "gapId": "datablock:MetaBall", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00015-datablock-MetaBall.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00015.py -- tests/files/web/generated/M16-GAP-00015-datablock-MetaBall.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00015", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00015", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00016", + "gapId": "datablock:NodeTree", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00016-datablock-NodeTree.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00016.py -- tests/files/web/generated/M16-GAP-00016-datablock-NodeTree.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00016", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00016", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00017", + "gapId": "datablock:Object", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00017-datablock-Object.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00017.py -- tests/files/web/generated/M16-GAP-00017-datablock-Object.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00017", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00017", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00018", + "gapId": "datablock:ParticleSettings", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00018-datablock-ParticleSettings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00018.py -- tests/files/web/generated/M16-GAP-00018-datablock-ParticleSettings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00018", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00018", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00019", + "gapId": "datablock:PointCloud", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00019-datablock-PointCloud.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00019.py -- tests/files/web/generated/M16-GAP-00019-datablock-PointCloud.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00019", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00019", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00020", + "gapId": "datablock:Scene", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00020-datablock-Scene.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00020.py -- tests/files/web/generated/M16-GAP-00020-datablock-Scene.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00020", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00020", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00021", + "gapId": "datablock:Screen", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00021-datablock-Screen.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00021.py -- tests/files/web/generated/M16-GAP-00021-datablock-Screen.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00021", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00021", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00022", + "gapId": "datablock:Sound", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00022-datablock-Sound.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00022.py -- tests/files/web/generated/M16-GAP-00022-datablock-Sound.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00022", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00022", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00023", + "gapId": "datablock:Speaker", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00023-datablock-Speaker.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00023.py -- tests/files/web/generated/M16-GAP-00023-datablock-Speaker.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00023", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00023", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00024", + "gapId": "datablock:Text", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00024-datablock-Text.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00024.py -- tests/files/web/generated/M16-GAP-00024-datablock-Text.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00024", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00024", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00025", + "gapId": "datablock:Texture", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00025-datablock-Texture.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00025.py -- tests/files/web/generated/M16-GAP-00025-datablock-Texture.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00025", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00025", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00026", + "gapId": "datablock:Volume", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00026-datablock-Volume.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00026.py -- tests/files/web/generated/M16-GAP-00026-datablock-Volume.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00026", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00026", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00027", + "gapId": "datablock:WindowManager", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00027-datablock-WindowManager.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00027.py -- tests/files/web/generated/M16-GAP-00027-datablock-WindowManager.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00027", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00027", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00028", + "gapId": "datablock:WorkSpace", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00028-datablock-WorkSpace.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00028.py -- tests/files/web/generated/M16-GAP-00028-datablock-WorkSpace.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00028", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00028", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00029", + "gapId": "datablock:World", + "ownerFamily": "RNA_DATABLOCK", + "sourceTask": "M15-01A", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00029-datablock-World.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00029.py -- tests/files/web/generated/M16-GAP-00029-datablock-World.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00029", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00029", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00030", + "gapId": "modifier:ARMATURE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00030-modifier-ARMATURE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00030.py -- tests/files/web/generated/M16-GAP-00030-modifier-ARMATURE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00030", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00030", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00031", + "gapId": "modifier:ARRAY", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00031-modifier-ARRAY.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00031.py -- tests/files/web/generated/M16-GAP-00031-modifier-ARRAY.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00031", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00031", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00032", + "gapId": "modifier:BEVEL", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00032-modifier-BEVEL.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00032.py -- tests/files/web/generated/M16-GAP-00032-modifier-BEVEL.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00032", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00032", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00033", + "gapId": "modifier:BOOLEAN", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00033-modifier-BOOLEAN.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00033.py -- tests/files/web/generated/M16-GAP-00033-modifier-BOOLEAN.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00033", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00033", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00034", + "gapId": "modifier:BUILD", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00034-modifier-BUILD.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00034.py -- tests/files/web/generated/M16-GAP-00034-modifier-BUILD.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00034", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00034", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00035", + "gapId": "modifier:CAST", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00035-modifier-CAST.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00035.py -- tests/files/web/generated/M16-GAP-00035-modifier-CAST.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00035", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00035", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00036", + "gapId": "modifier:CLOTH", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00036-modifier-CLOTH.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00036.py -- tests/files/web/generated/M16-GAP-00036-modifier-CLOTH.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00036", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00036", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00037", + "gapId": "modifier:COLLISION", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00037-modifier-COLLISION.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00037.py -- tests/files/web/generated/M16-GAP-00037-modifier-COLLISION.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00037", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00037", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00038", + "gapId": "modifier:CORRECTIVE_SMOOTH", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00038-modifier-CORRECTIVE_SMOOTH.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00038.py -- tests/files/web/generated/M16-GAP-00038-modifier-CORRECTIVE_SMOOTH.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00038", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00038", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00039", + "gapId": "modifier:CURVE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00039-modifier-CURVE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00039.py -- tests/files/web/generated/M16-GAP-00039-modifier-CURVE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00039", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00039", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00040", + "gapId": "modifier:DATA_TRANSFER", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00040-modifier-DATA_TRANSFER.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00040.py -- tests/files/web/generated/M16-GAP-00040-modifier-DATA_TRANSFER.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00040", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00040", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00041", + "gapId": "modifier:DECIMATE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00041-modifier-DECIMATE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00041.py -- tests/files/web/generated/M16-GAP-00041-modifier-DECIMATE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00041", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00041", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00042", + "gapId": "modifier:DISPLACE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00042-modifier-DISPLACE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00042.py -- tests/files/web/generated/M16-GAP-00042-modifier-DISPLACE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00042", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00042", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00043", + "gapId": "modifier:DYNAMIC_PAINT", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00043-modifier-DYNAMIC_PAINT.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00043.py -- tests/files/web/generated/M16-GAP-00043-modifier-DYNAMIC_PAINT.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00043", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00043", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00044", + "gapId": "modifier:EDGE_SPLIT", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00044-modifier-EDGE_SPLIT.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00044.py -- tests/files/web/generated/M16-GAP-00044-modifier-EDGE_SPLIT.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00044", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00044", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00045", + "gapId": "modifier:EXPLODE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00045-modifier-EXPLODE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00045.py -- tests/files/web/generated/M16-GAP-00045-modifier-EXPLODE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00045", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00045", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00046", + "gapId": "modifier:FLUID", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00046-modifier-FLUID.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00046.py -- tests/files/web/generated/M16-GAP-00046-modifier-FLUID.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00046", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00046", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00047", + "gapId": "modifier:GREASE_PENCIL_ARMATURE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00047-modifier-GREASE_PENCIL_ARMATURE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00047.py -- tests/files/web/generated/M16-GAP-00047-modifier-GREASE_PENCIL_ARMATURE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00047", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00047", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00048", + "gapId": "modifier:GREASE_PENCIL_ARRAY", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00048-modifier-GREASE_PENCIL_ARRAY.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00048.py -- tests/files/web/generated/M16-GAP-00048-modifier-GREASE_PENCIL_ARRAY.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00048", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00048", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00049", + "gapId": "modifier:GREASE_PENCIL_BUILD", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00049-modifier-GREASE_PENCIL_BUILD.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00049.py -- tests/files/web/generated/M16-GAP-00049-modifier-GREASE_PENCIL_BUILD.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00049", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00049", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00050", + "gapId": "modifier:GREASE_PENCIL_COLOR", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00050-modifier-GREASE_PENCIL_COLOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00050.py -- tests/files/web/generated/M16-GAP-00050-modifier-GREASE_PENCIL_COLOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00050", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00050", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00051", + "gapId": "modifier:GREASE_PENCIL_DASH", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00051-modifier-GREASE_PENCIL_DASH.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00051.py -- tests/files/web/generated/M16-GAP-00051-modifier-GREASE_PENCIL_DASH.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00051", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00051", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00052", + "gapId": "modifier:GREASE_PENCIL_ENVELOPE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00052-modifier-GREASE_PENCIL_ENVELOPE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00052.py -- tests/files/web/generated/M16-GAP-00052-modifier-GREASE_PENCIL_ENVELOPE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00052", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00052", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00053", + "gapId": "modifier:GREASE_PENCIL_HOOK", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00053-modifier-GREASE_PENCIL_HOOK.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00053.py -- tests/files/web/generated/M16-GAP-00053-modifier-GREASE_PENCIL_HOOK.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00053", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00053", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00054", + "gapId": "modifier:GREASE_PENCIL_LATTICE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00054-modifier-GREASE_PENCIL_LATTICE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00054.py -- tests/files/web/generated/M16-GAP-00054-modifier-GREASE_PENCIL_LATTICE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00054", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00054", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00055", + "gapId": "modifier:GREASE_PENCIL_LENGTH", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00055-modifier-GREASE_PENCIL_LENGTH.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00055.py -- tests/files/web/generated/M16-GAP-00055-modifier-GREASE_PENCIL_LENGTH.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00055", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00055", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00056", + "gapId": "modifier:GREASE_PENCIL_MIRROR", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00056-modifier-GREASE_PENCIL_MIRROR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00056.py -- tests/files/web/generated/M16-GAP-00056-modifier-GREASE_PENCIL_MIRROR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00056", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00056", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00057", + "gapId": "modifier:GREASE_PENCIL_MULTIPLY", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00057-modifier-GREASE_PENCIL_MULTIPLY.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00057.py -- tests/files/web/generated/M16-GAP-00057-modifier-GREASE_PENCIL_MULTIPLY.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00057", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00057", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00058", + "gapId": "modifier:GREASE_PENCIL_NOISE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00058-modifier-GREASE_PENCIL_NOISE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00058.py -- tests/files/web/generated/M16-GAP-00058-modifier-GREASE_PENCIL_NOISE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00058", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00058", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00059", + "gapId": "modifier:GREASE_PENCIL_OFFSET", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00059-modifier-GREASE_PENCIL_OFFSET.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00059.py -- tests/files/web/generated/M16-GAP-00059-modifier-GREASE_PENCIL_OFFSET.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00059", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00059", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00060", + "gapId": "modifier:GREASE_PENCIL_OPACITY", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00060-modifier-GREASE_PENCIL_OPACITY.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00060.py -- tests/files/web/generated/M16-GAP-00060-modifier-GREASE_PENCIL_OPACITY.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00060", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00060", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00061", + "gapId": "modifier:GREASE_PENCIL_OUTLINE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00061-modifier-GREASE_PENCIL_OUTLINE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00061.py -- tests/files/web/generated/M16-GAP-00061-modifier-GREASE_PENCIL_OUTLINE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00061", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00061", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00062", + "gapId": "modifier:GREASE_PENCIL_SHRINKWRAP", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00062-modifier-GREASE_PENCIL_SHRINKWRAP.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00062.py -- tests/files/web/generated/M16-GAP-00062-modifier-GREASE_PENCIL_SHRINKWRAP.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00062", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00062", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00063", + "gapId": "modifier:GREASE_PENCIL_SIMPLIFY", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00063-modifier-GREASE_PENCIL_SIMPLIFY.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00063.py -- tests/files/web/generated/M16-GAP-00063-modifier-GREASE_PENCIL_SIMPLIFY.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00063", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00063", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00064", + "gapId": "modifier:GREASE_PENCIL_SMOOTH", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00064-modifier-GREASE_PENCIL_SMOOTH.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00064.py -- tests/files/web/generated/M16-GAP-00064-modifier-GREASE_PENCIL_SMOOTH.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00064", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00064", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00065", + "gapId": "modifier:GREASE_PENCIL_SUBDIV", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00065-modifier-GREASE_PENCIL_SUBDIV.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00065.py -- tests/files/web/generated/M16-GAP-00065-modifier-GREASE_PENCIL_SUBDIV.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00065", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00065", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00066", + "gapId": "modifier:GREASE_PENCIL_TEXTURE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00066-modifier-GREASE_PENCIL_TEXTURE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00066.py -- tests/files/web/generated/M16-GAP-00066-modifier-GREASE_PENCIL_TEXTURE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00066", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00066", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00067", + "gapId": "modifier:GREASE_PENCIL_THICKNESS", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00067-modifier-GREASE_PENCIL_THICKNESS.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00067.py -- tests/files/web/generated/M16-GAP-00067-modifier-GREASE_PENCIL_THICKNESS.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00067", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00067", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00068", + "gapId": "modifier:GREASE_PENCIL_TIME", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00068-modifier-GREASE_PENCIL_TIME.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00068.py -- tests/files/web/generated/M16-GAP-00068-modifier-GREASE_PENCIL_TIME.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00068", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00068", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00069", + "gapId": "modifier:GREASE_PENCIL_TINT", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00069-modifier-GREASE_PENCIL_TINT.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00069.py -- tests/files/web/generated/M16-GAP-00069-modifier-GREASE_PENCIL_TINT.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00069", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00069", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00070", + "gapId": "modifier:GREASE_PENCIL_VERTEX_WEIGHT_ANGLE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00070-modifier-GREASE_PENCIL_VERTEX_WEIGHT_ANGLE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00070.py -- tests/files/web/generated/M16-GAP-00070-modifier-GREASE_PENCIL_VERTEX_WEIGHT_ANGLE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00070", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00070", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00071", + "gapId": "modifier:GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00071-modifier-GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00071.py -- tests/files/web/generated/M16-GAP-00071-modifier-GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00071", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00071", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00072", + "gapId": "modifier:HOOK", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00072-modifier-HOOK.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00072.py -- tests/files/web/generated/M16-GAP-00072-modifier-HOOK.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00072", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00072", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00073", + "gapId": "modifier:LAPLACIANDEFORM", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00073-modifier-LAPLACIANDEFORM.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00073.py -- tests/files/web/generated/M16-GAP-00073-modifier-LAPLACIANDEFORM.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00073", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00073", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00074", + "gapId": "modifier:LAPLACIANSMOOTH", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00074-modifier-LAPLACIANSMOOTH.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00074.py -- tests/files/web/generated/M16-GAP-00074-modifier-LAPLACIANSMOOTH.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00074", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00074", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00075", + "gapId": "modifier:LATTICE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00075-modifier-LATTICE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00075.py -- tests/files/web/generated/M16-GAP-00075-modifier-LATTICE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00075", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00075", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00076", + "gapId": "modifier:LINEART", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00076-modifier-LINEART.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00076.py -- tests/files/web/generated/M16-GAP-00076-modifier-LINEART.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00076", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00076", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00077", + "gapId": "modifier:MASK", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00077-modifier-MASK.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00077.py -- tests/files/web/generated/M16-GAP-00077-modifier-MASK.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00077", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00077", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00078", + "gapId": "modifier:MESH_CACHE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00078-modifier-MESH_CACHE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00078.py -- tests/files/web/generated/M16-GAP-00078-modifier-MESH_CACHE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00078", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00078", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00079", + "gapId": "modifier:MESH_DEFORM", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00079-modifier-MESH_DEFORM.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00079.py -- tests/files/web/generated/M16-GAP-00079-modifier-MESH_DEFORM.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00079", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00079", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00080", + "gapId": "modifier:MESH_SEQUENCE_CACHE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00080-modifier-MESH_SEQUENCE_CACHE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00080.py -- tests/files/web/generated/M16-GAP-00080-modifier-MESH_SEQUENCE_CACHE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00080", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00080", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00081", + "gapId": "modifier:MESH_TO_VOLUME", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00081-modifier-MESH_TO_VOLUME.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00081.py -- tests/files/web/generated/M16-GAP-00081-modifier-MESH_TO_VOLUME.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00081", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00081", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00082", + "gapId": "modifier:MIRROR", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00082-modifier-MIRROR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00082.py -- tests/files/web/generated/M16-GAP-00082-modifier-MIRROR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00082", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00082", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00083", + "gapId": "modifier:MULTIRES", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00083-modifier-MULTIRES.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00083.py -- tests/files/web/generated/M16-GAP-00083-modifier-MULTIRES.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00083", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00083", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00084", + "gapId": "modifier:NODES", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00084-modifier-NODES.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00084.py -- tests/files/web/generated/M16-GAP-00084-modifier-NODES.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00084", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00084", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00085", + "gapId": "modifier:NORMAL_EDIT", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00085-modifier-NORMAL_EDIT.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00085.py -- tests/files/web/generated/M16-GAP-00085-modifier-NORMAL_EDIT.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00085", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00085", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00086", + "gapId": "modifier:OCEAN", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00086-modifier-OCEAN.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00086.py -- tests/files/web/generated/M16-GAP-00086-modifier-OCEAN.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00086", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00086", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00087", + "gapId": "modifier:PARTICLE_INSTANCE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00087-modifier-PARTICLE_INSTANCE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00087.py -- tests/files/web/generated/M16-GAP-00087-modifier-PARTICLE_INSTANCE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00087", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00087", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00088", + "gapId": "modifier:PARTICLE_SYSTEM", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00088-modifier-PARTICLE_SYSTEM.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00088.py -- tests/files/web/generated/M16-GAP-00088-modifier-PARTICLE_SYSTEM.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00088", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00088", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00089", + "gapId": "modifier:REMESH", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00089-modifier-REMESH.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00089.py -- tests/files/web/generated/M16-GAP-00089-modifier-REMESH.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00089", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00089", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00090", + "gapId": "modifier:SCREW", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00090-modifier-SCREW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00090.py -- tests/files/web/generated/M16-GAP-00090-modifier-SCREW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00090", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00090", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00091", + "gapId": "modifier:SHRINKWRAP", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00091-modifier-SHRINKWRAP.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00091.py -- tests/files/web/generated/M16-GAP-00091-modifier-SHRINKWRAP.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00091", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00091", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00092", + "gapId": "modifier:SIMPLE_DEFORM", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00092-modifier-SIMPLE_DEFORM.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00092.py -- tests/files/web/generated/M16-GAP-00092-modifier-SIMPLE_DEFORM.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00092", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00092", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00093", + "gapId": "modifier:SKIN", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00093-modifier-SKIN.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00093.py -- tests/files/web/generated/M16-GAP-00093-modifier-SKIN.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00093", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00093", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00094", + "gapId": "modifier:SMOOTH", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00094-modifier-SMOOTH.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00094.py -- tests/files/web/generated/M16-GAP-00094-modifier-SMOOTH.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00094", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00094", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00095", + "gapId": "modifier:SOFT_BODY", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00095-modifier-SOFT_BODY.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00095.py -- tests/files/web/generated/M16-GAP-00095-modifier-SOFT_BODY.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00095", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00095", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00096", + "gapId": "modifier:SOLIDIFY", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00096-modifier-SOLIDIFY.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00096.py -- tests/files/web/generated/M16-GAP-00096-modifier-SOLIDIFY.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00096", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00096", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00097", + "gapId": "modifier:SUBSURF", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00097-modifier-SUBSURF.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00097.py -- tests/files/web/generated/M16-GAP-00097-modifier-SUBSURF.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00097", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00097", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00098", + "gapId": "modifier:SURFACE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00098-modifier-SURFACE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00098.py -- tests/files/web/generated/M16-GAP-00098-modifier-SURFACE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00098", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00098", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00099", + "gapId": "modifier:SURFACE_DEFORM", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00099-modifier-SURFACE_DEFORM.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00099.py -- tests/files/web/generated/M16-GAP-00099-modifier-SURFACE_DEFORM.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00099", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00099", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00100", + "gapId": "modifier:TRIANGULATE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00100-modifier-TRIANGULATE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00100.py -- tests/files/web/generated/M16-GAP-00100-modifier-TRIANGULATE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00100", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00100", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00101", + "gapId": "modifier:UV_PROJECT", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00101-modifier-UV_PROJECT.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00101.py -- tests/files/web/generated/M16-GAP-00101-modifier-UV_PROJECT.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00101", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00101", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00102", + "gapId": "modifier:UV_WARP", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00102-modifier-UV_WARP.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00102.py -- tests/files/web/generated/M16-GAP-00102-modifier-UV_WARP.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00102", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00102", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00103", + "gapId": "modifier:VERTEX_WEIGHT_EDIT", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00103-modifier-VERTEX_WEIGHT_EDIT.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00103.py -- tests/files/web/generated/M16-GAP-00103-modifier-VERTEX_WEIGHT_EDIT.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00103", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00103", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00104", + "gapId": "modifier:VERTEX_WEIGHT_MIX", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00104-modifier-VERTEX_WEIGHT_MIX.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00104.py -- tests/files/web/generated/M16-GAP-00104-modifier-VERTEX_WEIGHT_MIX.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00104", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00104", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00105", + "gapId": "modifier:VERTEX_WEIGHT_PROXIMITY", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00105-modifier-VERTEX_WEIGHT_PROXIMITY.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00105.py -- tests/files/web/generated/M16-GAP-00105-modifier-VERTEX_WEIGHT_PROXIMITY.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00105", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00105", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00106", + "gapId": "modifier:VOLUME_DISPLACE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00106-modifier-VOLUME_DISPLACE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00106.py -- tests/files/web/generated/M16-GAP-00106-modifier-VOLUME_DISPLACE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00106", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00106", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00107", + "gapId": "modifier:VOLUME_TO_MESH", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00107-modifier-VOLUME_TO_MESH.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00107.py -- tests/files/web/generated/M16-GAP-00107-modifier-VOLUME_TO_MESH.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00107", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00107", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00108", + "gapId": "modifier:WARP", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00108-modifier-WARP.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00108.py -- tests/files/web/generated/M16-GAP-00108-modifier-WARP.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00108", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00108", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00109", + "gapId": "modifier:WAVE", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00109-modifier-WAVE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00109.py -- tests/files/web/generated/M16-GAP-00109-modifier-WAVE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00109", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00109", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00110", + "gapId": "modifier:WEIGHTED_NORMAL", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00110-modifier-WEIGHTED_NORMAL.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00110.py -- tests/files/web/generated/M16-GAP-00110-modifier-WEIGHTED_NORMAL.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00110", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00110", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00111", + "gapId": "modifier:WELD", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00111-modifier-WELD.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00111.py -- tests/files/web/generated/M16-GAP-00111-modifier-WELD.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00111", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00111", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00112", + "gapId": "modifier:WIREFRAME", + "ownerFamily": "MODIFIER", + "sourceTask": "M15-01C", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00112-modifier-WIREFRAME.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00112.py -- tests/files/web/generated/M16-GAP-00112-modifier-WIREFRAME.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00112", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00112", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00113", + "gapId": "operator:action.bake_keys", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00113-operator-action.bake_keys.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00113.py -- tests/files/web/generated/M16-GAP-00113-operator-action.bake_keys.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00113", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00113", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00114", + "gapId": "operator:action.clean", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00114-operator-action.clean.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00114.py -- tests/files/web/generated/M16-GAP-00114-operator-action.clean.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00114", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00114", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00115", + "gapId": "operator:action.clickselect", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00115-operator-action.clickselect.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00115.py -- tests/files/web/generated/M16-GAP-00115-operator-action.clickselect.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00115", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00115", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00116", + "gapId": "operator:action.copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00116-operator-action.copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00116.py -- tests/files/web/generated/M16-GAP-00116-operator-action.copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00116", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00116", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00117", + "gapId": "operator:action.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00117-operator-action.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00117.py -- tests/files/web/generated/M16-GAP-00117-operator-action.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00117", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00117", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00118", + "gapId": "operator:action.duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00118-operator-action.duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00118.py -- tests/files/web/generated/M16-GAP-00118-operator-action.duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00118", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00118", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00119", + "gapId": "operator:action.duplicate_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00119-operator-action.duplicate_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00119.py -- tests/files/web/generated/M16-GAP-00119-operator-action.duplicate_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00119", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00119", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00120", + "gapId": "operator:action.easing_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00120-operator-action.easing_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00120.py -- tests/files/web/generated/M16-GAP-00120-operator-action.easing_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00120", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00120", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00121", + "gapId": "operator:action.extrapolation_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00121-operator-action.extrapolation_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00121.py -- tests/files/web/generated/M16-GAP-00121-operator-action.extrapolation_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00121", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00121", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00122", + "gapId": "operator:action.frame_jump", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00122-operator-action.frame_jump.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00122.py -- tests/files/web/generated/M16-GAP-00122-operator-action.frame_jump.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00122", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00122", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00123", + "gapId": "operator:action.handle_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00123-operator-action.handle_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00123.py -- tests/files/web/generated/M16-GAP-00123-operator-action.handle_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00123", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00123", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00124", + "gapId": "operator:action.interpolation_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00124-operator-action.interpolation_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00124.py -- tests/files/web/generated/M16-GAP-00124-operator-action.interpolation_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00124", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00124", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00125", + "gapId": "operator:action.keyframe_insert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00125-operator-action.keyframe_insert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00125.py -- tests/files/web/generated/M16-GAP-00125-operator-action.keyframe_insert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00125", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00125", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00126", + "gapId": "operator:action.keyframe_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00126-operator-action.keyframe_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00126.py -- tests/files/web/generated/M16-GAP-00126-operator-action.keyframe_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00126", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00126", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00127", + "gapId": "operator:action.markers_make_local", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00127-operator-action.markers_make_local.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00127.py -- tests/files/web/generated/M16-GAP-00127-operator-action.markers_make_local.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00127", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00127", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00128", + "gapId": "operator:action.mirror", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00128-operator-action.mirror.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00128.py -- tests/files/web/generated/M16-GAP-00128-operator-action.mirror.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00128", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00128", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00129", + "gapId": "operator:action.new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00129-operator-action.new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00129.py -- tests/files/web/generated/M16-GAP-00129-operator-action.new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00129", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00129", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00130", + "gapId": "operator:action.paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00130-operator-action.paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00130.py -- tests/files/web/generated/M16-GAP-00130-operator-action.paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00130", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00130", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00131", + "gapId": "operator:action.previewrange_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00131-operator-action.previewrange_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00131.py -- tests/files/web/generated/M16-GAP-00131-operator-action.previewrange_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00131", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00131", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00132", + "gapId": "operator:action.push_down", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00132-operator-action.push_down.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00132.py -- tests/files/web/generated/M16-GAP-00132-operator-action.push_down.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00132", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00132", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00133", + "gapId": "operator:action.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00133-operator-action.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00133.py -- tests/files/web/generated/M16-GAP-00133-operator-action.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00133", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00133", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00134", + "gapId": "operator:action.select_box", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00134-operator-action.select_box.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00134.py -- tests/files/web/generated/M16-GAP-00134-operator-action.select_box.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00134", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00134", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00135", + "gapId": "operator:action.select_by_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00135-operator-action.select_by_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00135.py -- tests/files/web/generated/M16-GAP-00135-operator-action.select_by_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00135", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00135", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00136", + "gapId": "operator:action.select_circle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00136-operator-action.select_circle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00136.py -- tests/files/web/generated/M16-GAP-00136-operator-action.select_circle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00136", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00136", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00137", + "gapId": "operator:action.select_column", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00137-operator-action.select_column.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00137.py -- tests/files/web/generated/M16-GAP-00137-operator-action.select_column.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00137", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00137", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00138", + "gapId": "operator:action.select_lasso", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00138-operator-action.select_lasso.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00138.py -- tests/files/web/generated/M16-GAP-00138-operator-action.select_lasso.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00138", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00138", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00139", + "gapId": "operator:action.select_leftright", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00139-operator-action.select_leftright.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00139.py -- tests/files/web/generated/M16-GAP-00139-operator-action.select_leftright.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00139", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00139", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00140", + "gapId": "operator:action.select_less", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00140-operator-action.select_less.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00140.py -- tests/files/web/generated/M16-GAP-00140-operator-action.select_less.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00140", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00140", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00141", + "gapId": "operator:action.select_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00141-operator-action.select_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00141.py -- tests/files/web/generated/M16-GAP-00141-operator-action.select_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00141", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00141", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00142", + "gapId": "operator:action.select_more", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00142-operator-action.select_more.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00142.py -- tests/files/web/generated/M16-GAP-00142-operator-action.select_more.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00142", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00142", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00143", + "gapId": "operator:action.snap", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00143-operator-action.snap.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00143.py -- tests/files/web/generated/M16-GAP-00143-operator-action.snap.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00143", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00143", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00144", + "gapId": "operator:action.stash", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00144-operator-action.stash.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00144.py -- tests/files/web/generated/M16-GAP-00144-operator-action.stash.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00144", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00144", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00145", + "gapId": "operator:action.stash_and_create", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00145-operator-action.stash_and_create.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00145.py -- tests/files/web/generated/M16-GAP-00145-operator-action.stash_and_create.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00145", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00145", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00146", + "gapId": "operator:action.unlink", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00146-operator-action.unlink.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00146.py -- tests/files/web/generated/M16-GAP-00146-operator-action.unlink.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00146", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00146", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00147", + "gapId": "operator:action.view_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00147-operator-action.view_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00147.py -- tests/files/web/generated/M16-GAP-00147-operator-action.view_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00147", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00147", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00148", + "gapId": "operator:action.view_frame", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00148-operator-action.view_frame.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00148.py -- tests/files/web/generated/M16-GAP-00148-operator-action.view_frame.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00148", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00148", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00149", + "gapId": "operator:action.view_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00149-operator-action.view_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00149.py -- tests/files/web/generated/M16-GAP-00149-operator-action.view_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00149", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00149", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00150", + "gapId": "operator:anim.change_frame", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00150-operator-anim.change_frame.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00150.py -- tests/files/web/generated/M16-GAP-00150-operator-anim.change_frame.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00150", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00150", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00151", + "gapId": "operator:anim.channel_select_keys", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00151-operator-anim.channel_select_keys.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00151.py -- tests/files/web/generated/M16-GAP-00151-operator-anim.channel_select_keys.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00151", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00151", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00152", + "gapId": "operator:anim.channel_view_pick", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00152-operator-anim.channel_view_pick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00152.py -- tests/files/web/generated/M16-GAP-00152-operator-anim.channel_view_pick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00152", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00152", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00153", + "gapId": "operator:anim.channels_bake", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00153-operator-anim.channels_bake.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00153.py -- tests/files/web/generated/M16-GAP-00153-operator-anim.channels_bake.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00153", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00153", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00154", + "gapId": "operator:anim.channels_clean_empty", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00154-operator-anim.channels_clean_empty.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00154.py -- tests/files/web/generated/M16-GAP-00154-operator-anim.channels_clean_empty.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00154", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00154", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00155", + "gapId": "operator:anim.channels_click", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00155-operator-anim.channels_click.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00155.py -- tests/files/web/generated/M16-GAP-00155-operator-anim.channels_click.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00155", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00155", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00156", + "gapId": "operator:anim.channels_collapse", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00156-operator-anim.channels_collapse.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00156.py -- tests/files/web/generated/M16-GAP-00156-operator-anim.channels_collapse.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00156", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00156", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00157", + "gapId": "operator:anim.channels_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00157-operator-anim.channels_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00157.py -- tests/files/web/generated/M16-GAP-00157-operator-anim.channels_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00157", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00157", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00158", + "gapId": "operator:anim.channels_editable_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00158-operator-anim.channels_editable_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00158.py -- tests/files/web/generated/M16-GAP-00158-operator-anim.channels_editable_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00158", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00158", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00159", + "gapId": "operator:anim.channels_expand", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00159-operator-anim.channels_expand.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00159.py -- tests/files/web/generated/M16-GAP-00159-operator-anim.channels_expand.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00159", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00159", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00160", + "gapId": "operator:anim.channels_fcurves_enable", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00160-operator-anim.channels_fcurves_enable.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00160.py -- tests/files/web/generated/M16-GAP-00160-operator-anim.channels_fcurves_enable.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00160", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00160", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00161", + "gapId": "operator:anim.channels_group", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00161-operator-anim.channels_group.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00161.py -- tests/files/web/generated/M16-GAP-00161-operator-anim.channels_group.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00161", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00161", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00162", + "gapId": "operator:anim.channels_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00162-operator-anim.channels_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00162.py -- tests/files/web/generated/M16-GAP-00162-operator-anim.channels_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00162", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00162", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00163", + "gapId": "operator:anim.channels_rename", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00163-operator-anim.channels_rename.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00163.py -- tests/files/web/generated/M16-GAP-00163-operator-anim.channels_rename.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00163", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00163", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00164", + "gapId": "operator:anim.channels_select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00164-operator-anim.channels_select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00164.py -- tests/files/web/generated/M16-GAP-00164-operator-anim.channels_select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00164", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00164", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00165", + "gapId": "operator:anim.channels_select_box", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00165-operator-anim.channels_select_box.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00165.py -- tests/files/web/generated/M16-GAP-00165-operator-anim.channels_select_box.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00165", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00165", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00166", + "gapId": "operator:anim.channels_select_filter", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00166-operator-anim.channels_select_filter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00166.py -- tests/files/web/generated/M16-GAP-00166-operator-anim.channels_select_filter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00166", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00166", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00167", + "gapId": "operator:anim.channels_setting_disable", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00167-operator-anim.channels_setting_disable.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00167.py -- tests/files/web/generated/M16-GAP-00167-operator-anim.channels_setting_disable.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00167", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00167", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00168", + "gapId": "operator:anim.channels_setting_enable", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00168-operator-anim.channels_setting_enable.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00168.py -- tests/files/web/generated/M16-GAP-00168-operator-anim.channels_setting_enable.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00168", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00168", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00169", + "gapId": "operator:anim.channels_setting_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00169-operator-anim.channels_setting_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00169.py -- tests/files/web/generated/M16-GAP-00169-operator-anim.channels_setting_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00169", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00169", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00170", + "gapId": "operator:anim.channels_ungroup", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00170-operator-anim.channels_ungroup.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00170.py -- tests/files/web/generated/M16-GAP-00170-operator-anim.channels_ungroup.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00170", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00170", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00171", + "gapId": "operator:anim.channels_view_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00171-operator-anim.channels_view_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00171.py -- tests/files/web/generated/M16-GAP-00171-operator-anim.channels_view_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00171", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00171", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00172", + "gapId": "operator:anim.clear_useless_actions", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00172-operator-anim.clear_useless_actions.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00172.py -- tests/files/web/generated/M16-GAP-00172-operator-anim.clear_useless_actions.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00172", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00172", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00173", + "gapId": "operator:anim.copy_driver_button", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00173-operator-anim.copy_driver_button.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00173.py -- tests/files/web/generated/M16-GAP-00173-operator-anim.copy_driver_button.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00173", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00173", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00174", + "gapId": "operator:anim.driver_button_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00174-operator-anim.driver_button_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00174.py -- tests/files/web/generated/M16-GAP-00174-operator-anim.driver_button_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00174", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00174", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00175", + "gapId": "operator:anim.driver_button_edit", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00175-operator-anim.driver_button_edit.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00175.py -- tests/files/web/generated/M16-GAP-00175-operator-anim.driver_button_edit.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00175", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00175", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00176", + "gapId": "operator:anim.driver_button_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00176-operator-anim.driver_button_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00176.py -- tests/files/web/generated/M16-GAP-00176-operator-anim.driver_button_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00176", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00176", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00177", + "gapId": "operator:anim.end_frame_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00177-operator-anim.end_frame_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00177.py -- tests/files/web/generated/M16-GAP-00177-operator-anim.end_frame_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00177", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00177", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00178", + "gapId": "operator:anim.keyframe_clear_button", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00178-operator-anim.keyframe_clear_button.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00178.py -- tests/files/web/generated/M16-GAP-00178-operator-anim.keyframe_clear_button.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00178", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00178", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00179", + "gapId": "operator:anim.keyframe_clear_v3d", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00179-operator-anim.keyframe_clear_v3d.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00179.py -- tests/files/web/generated/M16-GAP-00179-operator-anim.keyframe_clear_v3d.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00179", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00179", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00180", + "gapId": "operator:anim.keyframe_clear_vse", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00180-operator-anim.keyframe_clear_vse.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00180.py -- tests/files/web/generated/M16-GAP-00180-operator-anim.keyframe_clear_vse.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00180", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00180", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00181", + "gapId": "operator:anim.keyframe_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00181-operator-anim.keyframe_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00181.py -- tests/files/web/generated/M16-GAP-00181-operator-anim.keyframe_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00181", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00181", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00182", + "gapId": "operator:anim.keyframe_delete_button", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00182-operator-anim.keyframe_delete_button.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00182.py -- tests/files/web/generated/M16-GAP-00182-operator-anim.keyframe_delete_button.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00182", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00182", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00183", + "gapId": "operator:anim.keyframe_delete_by_name", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00183-operator-anim.keyframe_delete_by_name.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00183.py -- tests/files/web/generated/M16-GAP-00183-operator-anim.keyframe_delete_by_name.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00183", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00183", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00184", + "gapId": "operator:anim.keyframe_delete_v3d", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00184-operator-anim.keyframe_delete_v3d.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00184.py -- tests/files/web/generated/M16-GAP-00184-operator-anim.keyframe_delete_v3d.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00184", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00184", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00185", + "gapId": "operator:anim.keyframe_delete_vse", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00185-operator-anim.keyframe_delete_vse.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00185.py -- tests/files/web/generated/M16-GAP-00185-operator-anim.keyframe_delete_vse.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00185", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00185", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00186", + "gapId": "operator:anim.keyframe_insert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00186-operator-anim.keyframe_insert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00186.py -- tests/files/web/generated/M16-GAP-00186-operator-anim.keyframe_insert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00186", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00186", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00187", + "gapId": "operator:anim.keyframe_insert_button", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00187-operator-anim.keyframe_insert_button.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00187.py -- tests/files/web/generated/M16-GAP-00187-operator-anim.keyframe_insert_button.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00187", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00187", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00188", + "gapId": "operator:anim.keyframe_insert_by_name", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00188-operator-anim.keyframe_insert_by_name.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00188.py -- tests/files/web/generated/M16-GAP-00188-operator-anim.keyframe_insert_by_name.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00188", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00188", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00189", + "gapId": "operator:anim.keyframe_insert_menu", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00189-operator-anim.keyframe_insert_menu.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00189.py -- tests/files/web/generated/M16-GAP-00189-operator-anim.keyframe_insert_menu.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00189", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00189", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00190", + "gapId": "operator:anim.keying_set_active_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00190-operator-anim.keying_set_active_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00190.py -- tests/files/web/generated/M16-GAP-00190-operator-anim.keying_set_active_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00190", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00190", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00191", + "gapId": "operator:anim.keying_set_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00191-operator-anim.keying_set_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00191.py -- tests/files/web/generated/M16-GAP-00191-operator-anim.keying_set_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00191", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00191", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00192", + "gapId": "operator:anim.keying_set_export", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00192-operator-anim.keying_set_export.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00192.py -- tests/files/web/generated/M16-GAP-00192-operator-anim.keying_set_export.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00192", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00192", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00193", + "gapId": "operator:anim.keying_set_path_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00193-operator-anim.keying_set_path_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00193.py -- tests/files/web/generated/M16-GAP-00193-operator-anim.keying_set_path_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00193", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00193", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00194", + "gapId": "operator:anim.keying_set_path_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00194-operator-anim.keying_set_path_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00194.py -- tests/files/web/generated/M16-GAP-00194-operator-anim.keying_set_path_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00194", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00194", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00195", + "gapId": "operator:anim.keying_set_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00195-operator-anim.keying_set_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00195.py -- tests/files/web/generated/M16-GAP-00195-operator-anim.keying_set_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00195", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00195", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00196", + "gapId": "operator:anim.keyingset_button_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00196-operator-anim.keyingset_button_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00196.py -- tests/files/web/generated/M16-GAP-00196-operator-anim.keyingset_button_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00196", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00196", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00197", + "gapId": "operator:anim.keyingset_button_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00197-operator-anim.keyingset_button_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00197.py -- tests/files/web/generated/M16-GAP-00197-operator-anim.keyingset_button_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00197", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00197", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00198", + "gapId": "operator:anim.merge_animation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00198-operator-anim.merge_animation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00198.py -- tests/files/web/generated/M16-GAP-00198-operator-anim.merge_animation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00198", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00198", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00199", + "gapId": "operator:anim.paste_driver_button", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00199-operator-anim.paste_driver_button.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00199.py -- tests/files/web/generated/M16-GAP-00199-operator-anim.paste_driver_button.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00199", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00199", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00200", + "gapId": "operator:anim.previewrange_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00200-operator-anim.previewrange_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00200.py -- tests/files/web/generated/M16-GAP-00200-operator-anim.previewrange_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00200", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00200", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00201", + "gapId": "operator:anim.previewrange_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00201-operator-anim.previewrange_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00201.py -- tests/files/web/generated/M16-GAP-00201-operator-anim.previewrange_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00201", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00201", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00202", + "gapId": "operator:anim.replace_action", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00202-operator-anim.replace_action.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00202.py -- tests/files/web/generated/M16-GAP-00202-operator-anim.replace_action.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00202", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00202", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00203", + "gapId": "operator:anim.replace_action_new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00203-operator-anim.replace_action_new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00203.py -- tests/files/web/generated/M16-GAP-00203-operator-anim.replace_action_new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00203", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00203", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00204", + "gapId": "operator:anim.scene_range_frame", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00204-operator-anim.scene_range_frame.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00204.py -- tests/files/web/generated/M16-GAP-00204-operator-anim.scene_range_frame.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00204", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00204", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00205", + "gapId": "operator:anim.separate_slots", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00205-operator-anim.separate_slots.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00205.py -- tests/files/web/generated/M16-GAP-00205-operator-anim.separate_slots.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00205", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00205", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00206", + "gapId": "operator:anim.slot_channels_move_to_new_action", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00206-operator-anim.slot_channels_move_to_new_action.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00206.py -- tests/files/web/generated/M16-GAP-00206-operator-anim.slot_channels_move_to_new_action.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00206", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00206", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00207", + "gapId": "operator:anim.slot_new_for_id", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00207-operator-anim.slot_new_for_id.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00207.py -- tests/files/web/generated/M16-GAP-00207-operator-anim.slot_new_for_id.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00207", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00207", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00208", + "gapId": "operator:anim.slot_unassign_from_constraint", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00208-operator-anim.slot_unassign_from_constraint.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00208.py -- tests/files/web/generated/M16-GAP-00208-operator-anim.slot_unassign_from_constraint.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00208", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00208", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00209", + "gapId": "operator:anim.slot_unassign_from_id", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00209-operator-anim.slot_unassign_from_id.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00209.py -- tests/files/web/generated/M16-GAP-00209-operator-anim.slot_unassign_from_id.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00209", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00209", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00210", + "gapId": "operator:anim.slot_unassign_from_nla_strip", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00210-operator-anim.slot_unassign_from_nla_strip.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00210.py -- tests/files/web/generated/M16-GAP-00210-operator-anim.slot_unassign_from_nla_strip.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00210", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00210", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00211", + "gapId": "operator:anim.start_frame_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00211-operator-anim.start_frame_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00211.py -- tests/files/web/generated/M16-GAP-00211-operator-anim.start_frame_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00211", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00211", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00212", + "gapId": "operator:anim.update_animated_transform_constraints", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00212-operator-anim.update_animated_transform_constraints.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00212.py -- tests/files/web/generated/M16-GAP-00212-operator-anim.update_animated_transform_constraints.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00212", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00212", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00213", + "gapId": "operator:anim.version_bone_hide_property", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00213-operator-anim.version_bone_hide_property.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00213.py -- tests/files/web/generated/M16-GAP-00213-operator-anim.version_bone_hide_property.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00213", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00213", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00214", + "gapId": "operator:anim.view_curve_in_graph_editor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00214-operator-anim.view_curve_in_graph_editor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00214.py -- tests/files/web/generated/M16-GAP-00214-operator-anim.view_curve_in_graph_editor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00214", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00214", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00215", + "gapId": "operator:armature.align", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00215-operator-armature.align.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00215.py -- tests/files/web/generated/M16-GAP-00215-operator-armature.align.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00215", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00215", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00216", + "gapId": "operator:armature.assign_to_collection", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00216-operator-armature.assign_to_collection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00216.py -- tests/files/web/generated/M16-GAP-00216-operator-armature.assign_to_collection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00216", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00216", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00217", + "gapId": "operator:armature.autoside_names", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00217-operator-armature.autoside_names.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00217.py -- tests/files/web/generated/M16-GAP-00217-operator-armature.autoside_names.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00217", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00217", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00218", + "gapId": "operator:armature.bone_primitive_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00218-operator-armature.bone_primitive_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00218.py -- tests/files/web/generated/M16-GAP-00218-operator-armature.bone_primitive_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00218", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00218", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00219", + "gapId": "operator:armature.calculate_roll", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00219-operator-armature.calculate_roll.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00219.py -- tests/files/web/generated/M16-GAP-00219-operator-armature.calculate_roll.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00219", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00219", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00220", + "gapId": "operator:armature.click_extrude", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00220-operator-armature.click_extrude.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00220.py -- tests/files/web/generated/M16-GAP-00220-operator-armature.click_extrude.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00220", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00220", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00221", + "gapId": "operator:armature.collection_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00221-operator-armature.collection_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00221.py -- tests/files/web/generated/M16-GAP-00221-operator-armature.collection_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00221", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00221", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00222", + "gapId": "operator:armature.collection_assign", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00222-operator-armature.collection_assign.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00222.py -- tests/files/web/generated/M16-GAP-00222-operator-armature.collection_assign.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00222", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00222", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00223", + "gapId": "operator:armature.collection_create_and_assign", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00223-operator-armature.collection_create_and_assign.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00223.py -- tests/files/web/generated/M16-GAP-00223-operator-armature.collection_create_and_assign.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00223", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00223", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00224", + "gapId": "operator:armature.collection_deselect", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00224-operator-armature.collection_deselect.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00224.py -- tests/files/web/generated/M16-GAP-00224-operator-armature.collection_deselect.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00224", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00224", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00225", + "gapId": "operator:armature.collection_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00225-operator-armature.collection_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00225.py -- tests/files/web/generated/M16-GAP-00225-operator-armature.collection_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00225", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00225", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00226", + "gapId": "operator:armature.collection_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00226-operator-armature.collection_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00226.py -- tests/files/web/generated/M16-GAP-00226-operator-armature.collection_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00226", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00226", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00227", + "gapId": "operator:armature.collection_remove_unused", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00227-operator-armature.collection_remove_unused.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00227.py -- tests/files/web/generated/M16-GAP-00227-operator-armature.collection_remove_unused.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00227", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00227", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00228", + "gapId": "operator:armature.collection_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00228-operator-armature.collection_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00228.py -- tests/files/web/generated/M16-GAP-00228-operator-armature.collection_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00228", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00228", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00229", + "gapId": "operator:armature.collection_show_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00229-operator-armature.collection_show_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00229.py -- tests/files/web/generated/M16-GAP-00229-operator-armature.collection_show_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00229", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00229", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00230", + "gapId": "operator:armature.collection_unassign", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00230-operator-armature.collection_unassign.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00230.py -- tests/files/web/generated/M16-GAP-00230-operator-armature.collection_unassign.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00230", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00230", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00231", + "gapId": "operator:armature.collection_unassign_named", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00231-operator-armature.collection_unassign_named.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00231.py -- tests/files/web/generated/M16-GAP-00231-operator-armature.collection_unassign_named.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00231", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00231", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00232", + "gapId": "operator:armature.collection_unsolo_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00232-operator-armature.collection_unsolo_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00232.py -- tests/files/web/generated/M16-GAP-00232-operator-armature.collection_unsolo_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00232", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00232", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00233", + "gapId": "operator:armature.copy_bone_color_to_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00233-operator-armature.copy_bone_color_to_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00233.py -- tests/files/web/generated/M16-GAP-00233-operator-armature.copy_bone_color_to_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00233", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00233", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00234", + "gapId": "operator:armature.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00234-operator-armature.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00234.py -- tests/files/web/generated/M16-GAP-00234-operator-armature.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00234", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00234", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00235", + "gapId": "operator:armature.dissolve", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00235-operator-armature.dissolve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00235.py -- tests/files/web/generated/M16-GAP-00235-operator-armature.dissolve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00235", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00235", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00236", + "gapId": "operator:armature.duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00236-operator-armature.duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00236.py -- tests/files/web/generated/M16-GAP-00236-operator-armature.duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00236", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00236", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00237", + "gapId": "operator:armature.duplicate_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00237-operator-armature.duplicate_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00237.py -- tests/files/web/generated/M16-GAP-00237-operator-armature.duplicate_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00237", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00237", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00238", + "gapId": "operator:armature.duplicate_rename", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00238-operator-armature.duplicate_rename.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00238.py -- tests/files/web/generated/M16-GAP-00238-operator-armature.duplicate_rename.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00238", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00238", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00239", + "gapId": "operator:armature.extrude", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00239-operator-armature.extrude.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00239.py -- tests/files/web/generated/M16-GAP-00239-operator-armature.extrude.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00239", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00239", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00240", + "gapId": "operator:armature.extrude_forked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00240-operator-armature.extrude_forked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00240.py -- tests/files/web/generated/M16-GAP-00240-operator-armature.extrude_forked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00240", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00240", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00241", + "gapId": "operator:armature.extrude_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00241-operator-armature.extrude_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00241.py -- tests/files/web/generated/M16-GAP-00241-operator-armature.extrude_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00241", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00241", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00242", + "gapId": "operator:armature.fill", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00242-operator-armature.fill.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00242.py -- tests/files/web/generated/M16-GAP-00242-operator-armature.fill.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00242", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00242", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00243", + "gapId": "operator:armature.flip_names", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00243-operator-armature.flip_names.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00243.py -- tests/files/web/generated/M16-GAP-00243-operator-armature.flip_names.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00243", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00243", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00244", + "gapId": "operator:armature.hide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00244-operator-armature.hide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00244.py -- tests/files/web/generated/M16-GAP-00244-operator-armature.hide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00244", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00244", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00245", + "gapId": "operator:armature.move_to_collection", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00245-operator-armature.move_to_collection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00245.py -- tests/files/web/generated/M16-GAP-00245-operator-armature.move_to_collection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00245", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00245", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00246", + "gapId": "operator:armature.parent_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00246-operator-armature.parent_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00246.py -- tests/files/web/generated/M16-GAP-00246-operator-armature.parent_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00246", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00246", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00247", + "gapId": "operator:armature.parent_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00247-operator-armature.parent_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00247.py -- tests/files/web/generated/M16-GAP-00247-operator-armature.parent_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00247", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00247", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00248", + "gapId": "operator:armature.reveal", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00248-operator-armature.reveal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00248.py -- tests/files/web/generated/M16-GAP-00248-operator-armature.reveal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00248", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00248", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00249", + "gapId": "operator:armature.roll_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00249-operator-armature.roll_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00249.py -- tests/files/web/generated/M16-GAP-00249-operator-armature.roll_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00249", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00249", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00250", + "gapId": "operator:armature.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00250-operator-armature.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00250.py -- tests/files/web/generated/M16-GAP-00250-operator-armature.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00250", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00250", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00251", + "gapId": "operator:armature.select_hierarchy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00251-operator-armature.select_hierarchy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00251.py -- tests/files/web/generated/M16-GAP-00251-operator-armature.select_hierarchy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00251", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00251", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00252", + "gapId": "operator:armature.select_less", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00252-operator-armature.select_less.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00252.py -- tests/files/web/generated/M16-GAP-00252-operator-armature.select_less.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00252", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00252", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00253", + "gapId": "operator:armature.select_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00253-operator-armature.select_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00253.py -- tests/files/web/generated/M16-GAP-00253-operator-armature.select_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00253", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00253", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00254", + "gapId": "operator:armature.select_linked_pick", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00254-operator-armature.select_linked_pick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00254.py -- tests/files/web/generated/M16-GAP-00254-operator-armature.select_linked_pick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00254", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00254", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00255", + "gapId": "operator:armature.select_mirror", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00255-operator-armature.select_mirror.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00255.py -- tests/files/web/generated/M16-GAP-00255-operator-armature.select_mirror.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00255", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00255", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00256", + "gapId": "operator:armature.select_more", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00256-operator-armature.select_more.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00256.py -- tests/files/web/generated/M16-GAP-00256-operator-armature.select_more.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00256", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00256", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00257", + "gapId": "operator:armature.select_similar", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00257-operator-armature.select_similar.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00257.py -- tests/files/web/generated/M16-GAP-00257-operator-armature.select_similar.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00257", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00257", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00258", + "gapId": "operator:armature.separate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00258-operator-armature.separate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00258.py -- tests/files/web/generated/M16-GAP-00258-operator-armature.separate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00258", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00258", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00259", + "gapId": "operator:armature.shortest_path_pick", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00259-operator-armature.shortest_path_pick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00259.py -- tests/files/web/generated/M16-GAP-00259-operator-armature.shortest_path_pick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00259", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00259", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00260", + "gapId": "operator:armature.split", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00260-operator-armature.split.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00260.py -- tests/files/web/generated/M16-GAP-00260-operator-armature.split.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00260", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00260", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00261", + "gapId": "operator:armature.subdivide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00261-operator-armature.subdivide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00261.py -- tests/files/web/generated/M16-GAP-00261-operator-armature.subdivide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00261", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00261", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00262", + "gapId": "operator:armature.switch_direction", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00262-operator-armature.switch_direction.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00262.py -- tests/files/web/generated/M16-GAP-00262-operator-armature.switch_direction.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00262", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00262", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00263", + "gapId": "operator:armature.symmetrize", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00263-operator-armature.symmetrize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00263.py -- tests/files/web/generated/M16-GAP-00263-operator-armature.symmetrize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00263", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00263", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00264", + "gapId": "operator:asset.asset_download", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00264-operator-asset.asset_download.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00264.py -- tests/files/web/generated/M16-GAP-00264-operator-asset.asset_download.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00264", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00264", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00265", + "gapId": "operator:asset.assets_download", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00265-operator-asset.assets_download.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00265.py -- tests/files/web/generated/M16-GAP-00265-operator-asset.assets_download.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00265", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00265", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00266", + "gapId": "operator:asset.assign_action", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00266-operator-asset.assign_action.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00266.py -- tests/files/web/generated/M16-GAP-00266-operator-asset.assign_action.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00266", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00266", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00267", + "gapId": "operator:asset.browse_containing_blend_file", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00267-operator-asset.browse_containing_blend_file.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00267.py -- tests/files/web/generated/M16-GAP-00267-operator-asset.browse_containing_blend_file.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00267", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00267", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00268", + "gapId": "operator:asset.bundle_install", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00268-operator-asset.bundle_install.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00268.py -- tests/files/web/generated/M16-GAP-00268-operator-asset.bundle_install.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00268", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00268", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00269", + "gapId": "operator:asset.catalog_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00269-operator-asset.catalog_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00269.py -- tests/files/web/generated/M16-GAP-00269-operator-asset.catalog_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00269", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00269", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00270", + "gapId": "operator:asset.catalog_new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00270-operator-asset.catalog_new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00270.py -- tests/files/web/generated/M16-GAP-00270-operator-asset.catalog_new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00270", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00270", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00271", + "gapId": "operator:asset.catalog_redo", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00271-operator-asset.catalog_redo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00271.py -- tests/files/web/generated/M16-GAP-00271-operator-asset.catalog_redo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00271", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00271", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00272", + "gapId": "operator:asset.catalog_undo", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00272-operator-asset.catalog_undo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00272.py -- tests/files/web/generated/M16-GAP-00272-operator-asset.catalog_undo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00272", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00272", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00273", + "gapId": "operator:asset.catalog_undo_push", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "completed", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00273-operator-asset.catalog_undo_push.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00273.py -- tests/files/web/generated/M16-GAP-00273-operator-asset.catalog_undo_push.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00273", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00273", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00274", + "gapId": "operator:asset.catalogs_save", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "active", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00274-operator-asset.catalogs_save.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00274.py -- tests/files/web/generated/M16-GAP-00274-operator-asset.catalogs_save.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00274", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00274", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00275", + "gapId": "operator:asset.clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00275-operator-asset.clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00275.py -- tests/files/web/generated/M16-GAP-00275-operator-asset.clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00275", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00275", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00276", + "gapId": "operator:asset.clear_single", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00276-operator-asset.clear_single.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00276.py -- tests/files/web/generated/M16-GAP-00276-operator-asset.clear_single.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00276", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00276", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00277", + "gapId": "operator:asset.library_refresh", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00277-operator-asset.library_refresh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00277.py -- tests/files/web/generated/M16-GAP-00277-operator-asset.library_refresh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00277", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00277", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00278", + "gapId": "operator:asset.library_reload_listing", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00278-operator-asset.library_reload_listing.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00278.py -- tests/files/web/generated/M16-GAP-00278-operator-asset.library_reload_listing.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00278", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00278", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00279", + "gapId": "operator:asset.mark", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00279-operator-asset.mark.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00279.py -- tests/files/web/generated/M16-GAP-00279-operator-asset.mark.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00279", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00279", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00280", + "gapId": "operator:asset.mark_single", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00280-operator-asset.mark_single.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00280.py -- tests/files/web/generated/M16-GAP-00280-operator-asset.mark_single.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00280", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00280", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00281", + "gapId": "operator:asset.open_containing_blend_file", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00281-operator-asset.open_containing_blend_file.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00281.py -- tests/files/web/generated/M16-GAP-00281-operator-asset.open_containing_blend_file.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00281", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00281", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00282", + "gapId": "operator:asset.screenshot_preview", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00282-operator-asset.screenshot_preview.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00282.py -- tests/files/web/generated/M16-GAP-00282-operator-asset.screenshot_preview.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00282", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00282", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00283", + "gapId": "operator:asset.tag_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00283-operator-asset.tag_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00283.py -- tests/files/web/generated/M16-GAP-00283-operator-asset.tag_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00283", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00283", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00284", + "gapId": "operator:asset.tag_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00284-operator-asset.tag_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00284.py -- tests/files/web/generated/M16-GAP-00284-operator-asset.tag_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00284", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00284", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00285", + "gapId": "operator:boid.rule_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00285-operator-boid.rule_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00285.py -- tests/files/web/generated/M16-GAP-00285-operator-boid.rule_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00285", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00285", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00286", + "gapId": "operator:boid.rule_del", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00286-operator-boid.rule_del.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00286.py -- tests/files/web/generated/M16-GAP-00286-operator-boid.rule_del.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00286", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00286", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00287", + "gapId": "operator:boid.rule_move_down", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00287-operator-boid.rule_move_down.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00287.py -- tests/files/web/generated/M16-GAP-00287-operator-boid.rule_move_down.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00287", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00287", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00288", + "gapId": "operator:boid.rule_move_up", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00288-operator-boid.rule_move_up.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00288.py -- tests/files/web/generated/M16-GAP-00288-operator-boid.rule_move_up.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00288", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00288", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00289", + "gapId": "operator:boid.state_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00289-operator-boid.state_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00289.py -- tests/files/web/generated/M16-GAP-00289-operator-boid.state_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00289", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00289", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00290", + "gapId": "operator:boid.state_del", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00290-operator-boid.state_del.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00290.py -- tests/files/web/generated/M16-GAP-00290-operator-boid.state_del.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00290", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00290", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00291", + "gapId": "operator:boid.state_move_down", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00291-operator-boid.state_move_down.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00291.py -- tests/files/web/generated/M16-GAP-00291-operator-boid.state_move_down.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00291", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00291", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00292", + "gapId": "operator:boid.state_move_up", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00292-operator-boid.state_move_up.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00292.py -- tests/files/web/generated/M16-GAP-00292-operator-boid.state_move_up.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00292", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00292", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00293", + "gapId": "operator:brush.asset_activate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00293-operator-brush.asset_activate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00293.py -- tests/files/web/generated/M16-GAP-00293-operator-brush.asset_activate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00293", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00293", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00294", + "gapId": "operator:brush.asset_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00294-operator-brush.asset_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00294.py -- tests/files/web/generated/M16-GAP-00294-operator-brush.asset_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00294", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00294", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00295", + "gapId": "operator:brush.asset_edit_metadata", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00295-operator-brush.asset_edit_metadata.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00295.py -- tests/files/web/generated/M16-GAP-00295-operator-brush.asset_edit_metadata.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00295", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00295", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00296", + "gapId": "operator:brush.asset_load_preview", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00296-operator-brush.asset_load_preview.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00296.py -- tests/files/web/generated/M16-GAP-00296-operator-brush.asset_load_preview.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00296", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00296", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00297", + "gapId": "operator:brush.asset_revert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00297-operator-brush.asset_revert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00297.py -- tests/files/web/generated/M16-GAP-00297-operator-brush.asset_revert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00297", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00297", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00298", + "gapId": "operator:brush.asset_save", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00298-operator-brush.asset_save.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00298.py -- tests/files/web/generated/M16-GAP-00298-operator-brush.asset_save.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00298", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00298", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00299", + "gapId": "operator:brush.asset_save_as", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00299-operator-brush.asset_save_as.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00299.py -- tests/files/web/generated/M16-GAP-00299-operator-brush.asset_save_as.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00299", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00299", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00300", + "gapId": "operator:brush.scale_size", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00300-operator-brush.scale_size.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00300.py -- tests/files/web/generated/M16-GAP-00300-operator-brush.scale_size.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00300", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00300", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00301", + "gapId": "operator:brush.stencil_control", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00301-operator-brush.stencil_control.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00301.py -- tests/files/web/generated/M16-GAP-00301-operator-brush.stencil_control.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00301", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00301", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00302", + "gapId": "operator:brush.stencil_fit_image_aspect", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00302-operator-brush.stencil_fit_image_aspect.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00302.py -- tests/files/web/generated/M16-GAP-00302-operator-brush.stencil_fit_image_aspect.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00302", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00302", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00303", + "gapId": "operator:brush.stencil_reset_transform", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00303-operator-brush.stencil_reset_transform.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00303.py -- tests/files/web/generated/M16-GAP-00303-operator-brush.stencil_reset_transform.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00303", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00303", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00304", + "gapId": "operator:buttons.clear_filter", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00304-operator-buttons.clear_filter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00304.py -- tests/files/web/generated/M16-GAP-00304-operator-buttons.clear_filter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00304", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00304", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00305", + "gapId": "operator:buttons.context_menu", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00305-operator-buttons.context_menu.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00305.py -- tests/files/web/generated/M16-GAP-00305-operator-buttons.context_menu.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00305", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00305", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00306", + "gapId": "operator:buttons.directory_browse", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00306-operator-buttons.directory_browse.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00306.py -- tests/files/web/generated/M16-GAP-00306-operator-buttons.directory_browse.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00306", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00306", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00307", + "gapId": "operator:buttons.file_browse", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00307-operator-buttons.file_browse.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00307.py -- tests/files/web/generated/M16-GAP-00307-operator-buttons.file_browse.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00307", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00307", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00308", + "gapId": "operator:buttons.start_filter", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00308-operator-buttons.start_filter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00308.py -- tests/files/web/generated/M16-GAP-00308-operator-buttons.start_filter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00308", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00308", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00309", + "gapId": "operator:buttons.toggle_pin", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00309-operator-buttons.toggle_pin.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00309.py -- tests/files/web/generated/M16-GAP-00309-operator-buttons.toggle_pin.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00309", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00309", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00310", + "gapId": "operator:cachefile.layer_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00310-operator-cachefile.layer_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00310.py -- tests/files/web/generated/M16-GAP-00310-operator-cachefile.layer_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00310", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00310", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00311", + "gapId": "operator:cachefile.layer_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00311-operator-cachefile.layer_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00311.py -- tests/files/web/generated/M16-GAP-00311-operator-cachefile.layer_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00311", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00311", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00312", + "gapId": "operator:cachefile.layer_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00312-operator-cachefile.layer_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00312.py -- tests/files/web/generated/M16-GAP-00312-operator-cachefile.layer_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00312", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00312", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00313", + "gapId": "operator:cachefile.open", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00313-operator-cachefile.open.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00313.py -- tests/files/web/generated/M16-GAP-00313-operator-cachefile.open.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00313", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00313", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00314", + "gapId": "operator:cachefile.reload", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00314-operator-cachefile.reload.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00314.py -- tests/files/web/generated/M16-GAP-00314-operator-cachefile.reload.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00314", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00314", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00315", + "gapId": "operator:camera.preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00315-operator-camera.preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00315.py -- tests/files/web/generated/M16-GAP-00315-operator-camera.preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00315", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00315", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00316", + "gapId": "operator:camera.safe_areas_preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00316-operator-camera.safe_areas_preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00316.py -- tests/files/web/generated/M16-GAP-00316-operator-camera.safe_areas_preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00316", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00316", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00317", + "gapId": "operator:clip.add_marker", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00317-operator-clip.add_marker.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00317.py -- tests/files/web/generated/M16-GAP-00317-operator-clip.add_marker.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00317", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00317", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00318", + "gapId": "operator:clip.add_marker_at_click", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00318-operator-clip.add_marker_at_click.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00318.py -- tests/files/web/generated/M16-GAP-00318-operator-clip.add_marker_at_click.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00318", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00318", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00319", + "gapId": "operator:clip.add_marker_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00319-operator-clip.add_marker_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00319.py -- tests/files/web/generated/M16-GAP-00319-operator-clip.add_marker_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00319", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00319", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00320", + "gapId": "operator:clip.add_marker_slide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00320-operator-clip.add_marker_slide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00320.py -- tests/files/web/generated/M16-GAP-00320-operator-clip.add_marker_slide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00320", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00320", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00321", + "gapId": "operator:clip.apply_solution_scale", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00321-operator-clip.apply_solution_scale.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00321.py -- tests/files/web/generated/M16-GAP-00321-operator-clip.apply_solution_scale.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00321", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00321", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00322", + "gapId": "operator:clip.average_tracks", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00322-operator-clip.average_tracks.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00322.py -- tests/files/web/generated/M16-GAP-00322-operator-clip.average_tracks.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00322", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00322", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00323", + "gapId": "operator:clip.bundles_to_mesh", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00323-operator-clip.bundles_to_mesh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00323.py -- tests/files/web/generated/M16-GAP-00323-operator-clip.bundles_to_mesh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00323", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00323", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00324", + "gapId": "operator:clip.camera_preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00324-operator-clip.camera_preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00324.py -- tests/files/web/generated/M16-GAP-00324-operator-clip.camera_preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00324", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00324", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00325", + "gapId": "operator:clip.change_frame", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00325-operator-clip.change_frame.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00325.py -- tests/files/web/generated/M16-GAP-00325-operator-clip.change_frame.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00325", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00325", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00326", + "gapId": "operator:clip.clean_tracks", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00326-operator-clip.clean_tracks.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00326.py -- tests/files/web/generated/M16-GAP-00326-operator-clip.clean_tracks.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00326", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00326", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00327", + "gapId": "operator:clip.clear_solution", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00327-operator-clip.clear_solution.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00327.py -- tests/files/web/generated/M16-GAP-00327-operator-clip.clear_solution.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00327", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00327", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00328", + "gapId": "operator:clip.clear_track_path", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00328-operator-clip.clear_track_path.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00328.py -- tests/files/web/generated/M16-GAP-00328-operator-clip.clear_track_path.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00328", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00328", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00329", + "gapId": "operator:clip.constraint_to_fcurve", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00329-operator-clip.constraint_to_fcurve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00329.py -- tests/files/web/generated/M16-GAP-00329-operator-clip.constraint_to_fcurve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00329", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00329", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00330", + "gapId": "operator:clip.copy_tracks", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00330-operator-clip.copy_tracks.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00330.py -- tests/files/web/generated/M16-GAP-00330-operator-clip.copy_tracks.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00330", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00330", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00331", + "gapId": "operator:clip.create_plane_track", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00331-operator-clip.create_plane_track.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00331.py -- tests/files/web/generated/M16-GAP-00331-operator-clip.create_plane_track.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00331", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00331", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00332", + "gapId": "operator:clip.cursor_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00332-operator-clip.cursor_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00332.py -- tests/files/web/generated/M16-GAP-00332-operator-clip.cursor_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00332", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00332", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00333", + "gapId": "operator:clip.delete_marker", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00333-operator-clip.delete_marker.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00333.py -- tests/files/web/generated/M16-GAP-00333-operator-clip.delete_marker.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00333", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00333", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00334", + "gapId": "operator:clip.delete_proxy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00334-operator-clip.delete_proxy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00334.py -- tests/files/web/generated/M16-GAP-00334-operator-clip.delete_proxy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00334", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00334", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00335", + "gapId": "operator:clip.delete_track", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00335-operator-clip.delete_track.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00335.py -- tests/files/web/generated/M16-GAP-00335-operator-clip.delete_track.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00335", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00335", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00336", + "gapId": "operator:clip.detect_features", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00336-operator-clip.detect_features.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00336.py -- tests/files/web/generated/M16-GAP-00336-operator-clip.detect_features.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00336", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00336", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00337", + "gapId": "operator:clip.disable_markers", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00337-operator-clip.disable_markers.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00337.py -- tests/files/web/generated/M16-GAP-00337-operator-clip.disable_markers.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00337", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00337", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00338", + "gapId": "operator:clip.dopesheet_select_channel", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00338-operator-clip.dopesheet_select_channel.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00338.py -- tests/files/web/generated/M16-GAP-00338-operator-clip.dopesheet_select_channel.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00338", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00338", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00339", + "gapId": "operator:clip.dopesheet_view_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00339-operator-clip.dopesheet_view_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00339.py -- tests/files/web/generated/M16-GAP-00339-operator-clip.dopesheet_view_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00339", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00339", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00340", + "gapId": "operator:clip.filter_tracks", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00340-operator-clip.filter_tracks.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00340.py -- tests/files/web/generated/M16-GAP-00340-operator-clip.filter_tracks.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00340", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00340", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00341", + "gapId": "operator:clip.frame_jump", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00341-operator-clip.frame_jump.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00341.py -- tests/files/web/generated/M16-GAP-00341-operator-clip.frame_jump.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00341", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00341", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00342", + "gapId": "operator:clip.graph_center_current_frame", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00342-operator-clip.graph_center_current_frame.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00342.py -- tests/files/web/generated/M16-GAP-00342-operator-clip.graph_center_current_frame.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00342", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00342", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00343", + "gapId": "operator:clip.graph_delete_curve", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00343-operator-clip.graph_delete_curve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00343.py -- tests/files/web/generated/M16-GAP-00343-operator-clip.graph_delete_curve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00343", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00343", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00344", + "gapId": "operator:clip.graph_delete_knot", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00344-operator-clip.graph_delete_knot.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00344.py -- tests/files/web/generated/M16-GAP-00344-operator-clip.graph_delete_knot.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00344", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00344", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00345", + "gapId": "operator:clip.graph_disable_markers", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00345-operator-clip.graph_disable_markers.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00345.py -- tests/files/web/generated/M16-GAP-00345-operator-clip.graph_disable_markers.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00345", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00345", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00346", + "gapId": "operator:clip.graph_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00346-operator-clip.graph_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00346.py -- tests/files/web/generated/M16-GAP-00346-operator-clip.graph_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00346", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00346", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00347", + "gapId": "operator:clip.graph_select_all_markers", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00347-operator-clip.graph_select_all_markers.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00347.py -- tests/files/web/generated/M16-GAP-00347-operator-clip.graph_select_all_markers.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00347", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00347", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00348", + "gapId": "operator:clip.graph_select_box", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00348-operator-clip.graph_select_box.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00348.py -- tests/files/web/generated/M16-GAP-00348-operator-clip.graph_select_box.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00348", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00348", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00349", + "gapId": "operator:clip.graph_view_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00349-operator-clip.graph_view_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00349.py -- tests/files/web/generated/M16-GAP-00349-operator-clip.graph_view_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00349", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00349", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00350", + "gapId": "operator:clip.hide_tracks", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00350-operator-clip.hide_tracks.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00350.py -- tests/files/web/generated/M16-GAP-00350-operator-clip.hide_tracks.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00350", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00350", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00351", + "gapId": "operator:clip.hide_tracks_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00351-operator-clip.hide_tracks_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00351.py -- tests/files/web/generated/M16-GAP-00351-operator-clip.hide_tracks_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00351", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00351", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00352", + "gapId": "operator:clip.join_tracks", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00352-operator-clip.join_tracks.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00352.py -- tests/files/web/generated/M16-GAP-00352-operator-clip.join_tracks.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00352", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00352", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00353", + "gapId": "operator:clip.keyframe_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00353-operator-clip.keyframe_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00353.py -- tests/files/web/generated/M16-GAP-00353-operator-clip.keyframe_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00353", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00353", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00354", + "gapId": "operator:clip.keyframe_insert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00354-operator-clip.keyframe_insert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00354.py -- tests/files/web/generated/M16-GAP-00354-operator-clip.keyframe_insert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00354", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00354", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00355", + "gapId": "operator:clip.lock_selection_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00355-operator-clip.lock_selection_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00355.py -- tests/files/web/generated/M16-GAP-00355-operator-clip.lock_selection_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00355", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00355", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00356", + "gapId": "operator:clip.lock_tracks", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00356-operator-clip.lock_tracks.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00356.py -- tests/files/web/generated/M16-GAP-00356-operator-clip.lock_tracks.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00356", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00356", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00357", + "gapId": "operator:clip.mode_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00357-operator-clip.mode_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00357.py -- tests/files/web/generated/M16-GAP-00357-operator-clip.mode_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00357", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00357", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00358", + "gapId": "operator:clip.new_image_from_plane_marker", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00358-operator-clip.new_image_from_plane_marker.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00358.py -- tests/files/web/generated/M16-GAP-00358-operator-clip.new_image_from_plane_marker.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00358", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00358", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00359", + "gapId": "operator:clip.open", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00359-operator-clip.open.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00359.py -- tests/files/web/generated/M16-GAP-00359-operator-clip.open.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00359", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00359", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00360", + "gapId": "operator:clip.paste_tracks", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00360-operator-clip.paste_tracks.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00360.py -- tests/files/web/generated/M16-GAP-00360-operator-clip.paste_tracks.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00360", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00360", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00361", + "gapId": "operator:clip.prefetch", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00361-operator-clip.prefetch.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00361.py -- tests/files/web/generated/M16-GAP-00361-operator-clip.prefetch.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00361", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00361", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00362", + "gapId": "operator:clip.rebuild_proxy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00362-operator-clip.rebuild_proxy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00362.py -- tests/files/web/generated/M16-GAP-00362-operator-clip.rebuild_proxy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00362", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00362", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00363", + "gapId": "operator:clip.refine_markers", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00363-operator-clip.refine_markers.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00363.py -- tests/files/web/generated/M16-GAP-00363-operator-clip.refine_markers.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00363", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00363", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00364", + "gapId": "operator:clip.reload", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00364-operator-clip.reload.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00364.py -- tests/files/web/generated/M16-GAP-00364-operator-clip.reload.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00364", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00364", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00365", + "gapId": "operator:clip.select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00365-operator-clip.select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00365.py -- tests/files/web/generated/M16-GAP-00365-operator-clip.select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00365", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00365", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00366", + "gapId": "operator:clip.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00366-operator-clip.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00366.py -- tests/files/web/generated/M16-GAP-00366-operator-clip.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00366", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00366", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00367", + "gapId": "operator:clip.select_box", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00367-operator-clip.select_box.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00367.py -- tests/files/web/generated/M16-GAP-00367-operator-clip.select_box.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00367", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00367", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00368", + "gapId": "operator:clip.select_circle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00368-operator-clip.select_circle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00368.py -- tests/files/web/generated/M16-GAP-00368-operator-clip.select_circle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00368", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00368", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00369", + "gapId": "operator:clip.select_grouped", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00369-operator-clip.select_grouped.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00369.py -- tests/files/web/generated/M16-GAP-00369-operator-clip.select_grouped.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00369", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00369", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00370", + "gapId": "operator:clip.select_lasso", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00370-operator-clip.select_lasso.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00370.py -- tests/files/web/generated/M16-GAP-00370-operator-clip.select_lasso.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00370", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00370", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00371", + "gapId": "operator:clip.set_active_clip", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00371-operator-clip.set_active_clip.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00371.py -- tests/files/web/generated/M16-GAP-00371-operator-clip.set_active_clip.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00371", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00371", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00372", + "gapId": "operator:clip.set_axis", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00372-operator-clip.set_axis.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00372.py -- tests/files/web/generated/M16-GAP-00372-operator-clip.set_axis.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00372", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00372", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00373", + "gapId": "operator:clip.set_origin", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00373-operator-clip.set_origin.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00373.py -- tests/files/web/generated/M16-GAP-00373-operator-clip.set_origin.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00373", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00373", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00374", + "gapId": "operator:clip.set_plane", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00374-operator-clip.set_plane.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00374.py -- tests/files/web/generated/M16-GAP-00374-operator-clip.set_plane.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00374", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00374", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00375", + "gapId": "operator:clip.set_scale", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00375-operator-clip.set_scale.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00375.py -- tests/files/web/generated/M16-GAP-00375-operator-clip.set_scale.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00375", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00375", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00376", + "gapId": "operator:clip.set_scene_frames", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00376-operator-clip.set_scene_frames.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00376.py -- tests/files/web/generated/M16-GAP-00376-operator-clip.set_scene_frames.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00376", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00376", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00377", + "gapId": "operator:clip.set_solution_scale", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00377-operator-clip.set_solution_scale.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00377.py -- tests/files/web/generated/M16-GAP-00377-operator-clip.set_solution_scale.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00377", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00377", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00378", + "gapId": "operator:clip.set_solver_keyframe", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00378-operator-clip.set_solver_keyframe.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00378.py -- tests/files/web/generated/M16-GAP-00378-operator-clip.set_solver_keyframe.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00378", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00378", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00379", + "gapId": "operator:clip.set_viewport_background", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00379-operator-clip.set_viewport_background.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00379.py -- tests/files/web/generated/M16-GAP-00379-operator-clip.set_viewport_background.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00379", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00379", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00380", + "gapId": "operator:clip.setup_tracking_scene", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00380-operator-clip.setup_tracking_scene.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00380.py -- tests/files/web/generated/M16-GAP-00380-operator-clip.setup_tracking_scene.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00380", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00380", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00381", + "gapId": "operator:clip.slide_marker", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00381-operator-clip.slide_marker.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00381.py -- tests/files/web/generated/M16-GAP-00381-operator-clip.slide_marker.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00381", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00381", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00382", + "gapId": "operator:clip.slide_plane_marker", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00382-operator-clip.slide_plane_marker.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00382.py -- tests/files/web/generated/M16-GAP-00382-operator-clip.slide_plane_marker.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00382", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00382", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00383", + "gapId": "operator:clip.solve_camera", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00383-operator-clip.solve_camera.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00383.py -- tests/files/web/generated/M16-GAP-00383-operator-clip.solve_camera.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00383", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00383", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00384", + "gapId": "operator:clip.stabilize_2d_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00384-operator-clip.stabilize_2d_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00384.py -- tests/files/web/generated/M16-GAP-00384-operator-clip.stabilize_2d_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00384", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00384", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00385", + "gapId": "operator:clip.stabilize_2d_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00385-operator-clip.stabilize_2d_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00385.py -- tests/files/web/generated/M16-GAP-00385-operator-clip.stabilize_2d_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00385", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00385", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00386", + "gapId": "operator:clip.stabilize_2d_rotation_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00386-operator-clip.stabilize_2d_rotation_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00386.py -- tests/files/web/generated/M16-GAP-00386-operator-clip.stabilize_2d_rotation_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00386", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00386", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00387", + "gapId": "operator:clip.stabilize_2d_rotation_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00387-operator-clip.stabilize_2d_rotation_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00387.py -- tests/files/web/generated/M16-GAP-00387-operator-clip.stabilize_2d_rotation_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00387", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00387", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00388", + "gapId": "operator:clip.stabilize_2d_rotation_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00388-operator-clip.stabilize_2d_rotation_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00388.py -- tests/files/web/generated/M16-GAP-00388-operator-clip.stabilize_2d_rotation_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00388", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00388", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00389", + "gapId": "operator:clip.stabilize_2d_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00389-operator-clip.stabilize_2d_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00389.py -- tests/files/web/generated/M16-GAP-00389-operator-clip.stabilize_2d_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00389", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00389", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00390", + "gapId": "operator:clip.track_color_preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00390-operator-clip.track_color_preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00390.py -- tests/files/web/generated/M16-GAP-00390-operator-clip.track_color_preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00390", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00390", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00391", + "gapId": "operator:clip.track_copy_color", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00391-operator-clip.track_copy_color.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00391.py -- tests/files/web/generated/M16-GAP-00391-operator-clip.track_copy_color.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00391", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00391", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00392", + "gapId": "operator:clip.track_markers", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00392-operator-clip.track_markers.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00392.py -- tests/files/web/generated/M16-GAP-00392-operator-clip.track_markers.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00392", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00392", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00393", + "gapId": "operator:clip.track_settings_as_default", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00393-operator-clip.track_settings_as_default.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00393.py -- tests/files/web/generated/M16-GAP-00393-operator-clip.track_settings_as_default.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00393", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00393", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00394", + "gapId": "operator:clip.track_settings_to_track", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00394-operator-clip.track_settings_to_track.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00394.py -- tests/files/web/generated/M16-GAP-00394-operator-clip.track_settings_to_track.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00394", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00394", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00395", + "gapId": "operator:clip.track_to_empty", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00395-operator-clip.track_to_empty.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00395.py -- tests/files/web/generated/M16-GAP-00395-operator-clip.track_to_empty.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00395", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00395", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00396", + "gapId": "operator:clip.tracking_object_new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00396-operator-clip.tracking_object_new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00396.py -- tests/files/web/generated/M16-GAP-00396-operator-clip.tracking_object_new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00396", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00396", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00397", + "gapId": "operator:clip.tracking_object_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00397-operator-clip.tracking_object_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00397.py -- tests/files/web/generated/M16-GAP-00397-operator-clip.tracking_object_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00397", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00397", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00398", + "gapId": "operator:clip.tracking_settings_preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00398-operator-clip.tracking_settings_preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00398.py -- tests/files/web/generated/M16-GAP-00398-operator-clip.tracking_settings_preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00398", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00398", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00399", + "gapId": "operator:clip.update_image_from_plane_marker", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00399-operator-clip.update_image_from_plane_marker.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00399.py -- tests/files/web/generated/M16-GAP-00399-operator-clip.update_image_from_plane_marker.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00399", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00399", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00400", + "gapId": "operator:clip.view_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00400-operator-clip.view_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00400.py -- tests/files/web/generated/M16-GAP-00400-operator-clip.view_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00400", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00400", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00401", + "gapId": "operator:clip.view_center_cursor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00401-operator-clip.view_center_cursor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00401.py -- tests/files/web/generated/M16-GAP-00401-operator-clip.view_center_cursor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00401", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00401", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00402", + "gapId": "operator:clip.view_ndof", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00402-operator-clip.view_ndof.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00402.py -- tests/files/web/generated/M16-GAP-00402-operator-clip.view_ndof.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00402", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00402", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00403", + "gapId": "operator:clip.view_pan", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00403-operator-clip.view_pan.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00403.py -- tests/files/web/generated/M16-GAP-00403-operator-clip.view_pan.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00403", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00403", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00404", + "gapId": "operator:clip.view_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00404-operator-clip.view_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00404.py -- tests/files/web/generated/M16-GAP-00404-operator-clip.view_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00404", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00404", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00405", + "gapId": "operator:clip.view_zoom", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00405-operator-clip.view_zoom.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00405.py -- tests/files/web/generated/M16-GAP-00405-operator-clip.view_zoom.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00405", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00405", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00406", + "gapId": "operator:clip.view_zoom_in", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00406-operator-clip.view_zoom_in.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00406.py -- tests/files/web/generated/M16-GAP-00406-operator-clip.view_zoom_in.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00406", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00406", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00407", + "gapId": "operator:clip.view_zoom_out", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00407-operator-clip.view_zoom_out.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00407.py -- tests/files/web/generated/M16-GAP-00407-operator-clip.view_zoom_out.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00407", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00407", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00408", + "gapId": "operator:clip.view_zoom_ratio", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00408-operator-clip.view_zoom_ratio.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00408.py -- tests/files/web/generated/M16-GAP-00408-operator-clip.view_zoom_ratio.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00408", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00408", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00409", + "gapId": "operator:cloth.preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00409-operator-cloth.preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00409.py -- tests/files/web/generated/M16-GAP-00409-operator-cloth.preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00409", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00409", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00410", + "gapId": "operator:collection.create", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00410-operator-collection.create.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00410.py -- tests/files/web/generated/M16-GAP-00410-operator-collection.create.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00410", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00410", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00411", + "gapId": "operator:collection.export_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00411-operator-collection.export_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00411.py -- tests/files/web/generated/M16-GAP-00411-operator-collection.export_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00411", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00411", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00412", + "gapId": "operator:collection.exporter_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00412-operator-collection.exporter_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00412.py -- tests/files/web/generated/M16-GAP-00412-operator-collection.exporter_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00412", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00412", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00413", + "gapId": "operator:collection.exporter_export", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00413-operator-collection.exporter_export.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00413.py -- tests/files/web/generated/M16-GAP-00413-operator-collection.exporter_export.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00413", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00413", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00414", + "gapId": "operator:collection.exporter_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00414-operator-collection.exporter_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00414.py -- tests/files/web/generated/M16-GAP-00414-operator-collection.exporter_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00414", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00414", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00415", + "gapId": "operator:collection.exporter_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00415-operator-collection.exporter_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00415.py -- tests/files/web/generated/M16-GAP-00415-operator-collection.exporter_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00415", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00415", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00416", + "gapId": "operator:collection.importer_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00416-operator-collection.importer_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00416.py -- tests/files/web/generated/M16-GAP-00416-operator-collection.importer_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00416", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00416", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00417", + "gapId": "operator:collection.importer_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00417-operator-collection.importer_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00417.py -- tests/files/web/generated/M16-GAP-00417-operator-collection.importer_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00417", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00417", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00418", + "gapId": "operator:collection.objects_add_active", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00418-operator-collection.objects_add_active.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00418.py -- tests/files/web/generated/M16-GAP-00418-operator-collection.objects_add_active.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00418", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00418", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00419", + "gapId": "operator:collection.objects_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00419-operator-collection.objects_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00419.py -- tests/files/web/generated/M16-GAP-00419-operator-collection.objects_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00419", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00419", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00420", + "gapId": "operator:collection.objects_remove_active", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00420-operator-collection.objects_remove_active.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00420.py -- tests/files/web/generated/M16-GAP-00420-operator-collection.objects_remove_active.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00420", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00420", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00421", + "gapId": "operator:collection.objects_remove_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00421-operator-collection.objects_remove_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00421.py -- tests/files/web/generated/M16-GAP-00421-operator-collection.objects_remove_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00421", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00421", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00422", + "gapId": "operator:console.autocomplete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00422-operator-console.autocomplete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00422.py -- tests/files/web/generated/M16-GAP-00422-operator-console.autocomplete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00422", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00422", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00423", + "gapId": "operator:console.banner", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00423-operator-console.banner.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00423.py -- tests/files/web/generated/M16-GAP-00423-operator-console.banner.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00423", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00423", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00424", + "gapId": "operator:console.clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00424-operator-console.clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00424.py -- tests/files/web/generated/M16-GAP-00424-operator-console.clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00424", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00424", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00425", + "gapId": "operator:console.clear_line", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00425-operator-console.clear_line.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00425.py -- tests/files/web/generated/M16-GAP-00425-operator-console.clear_line.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00425", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00425", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00426", + "gapId": "operator:console.copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00426-operator-console.copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00426.py -- tests/files/web/generated/M16-GAP-00426-operator-console.copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00426", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00426", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00427", + "gapId": "operator:console.copy_as_script", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00427-operator-console.copy_as_script.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00427.py -- tests/files/web/generated/M16-GAP-00427-operator-console.copy_as_script.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00427", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00427", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00428", + "gapId": "operator:console.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00428-operator-console.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00428.py -- tests/files/web/generated/M16-GAP-00428-operator-console.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00428", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00428", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00429", + "gapId": "operator:console.execute", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00429-operator-console.execute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00429.py -- tests/files/web/generated/M16-GAP-00429-operator-console.execute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00429", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00429", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00430", + "gapId": "operator:console.history_append", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00430-operator-console.history_append.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00430.py -- tests/files/web/generated/M16-GAP-00430-operator-console.history_append.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00430", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00430", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00431", + "gapId": "operator:console.history_cycle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00431-operator-console.history_cycle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00431.py -- tests/files/web/generated/M16-GAP-00431-operator-console.history_cycle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00431", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00431", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00432", + "gapId": "operator:console.indent", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00432-operator-console.indent.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00432.py -- tests/files/web/generated/M16-GAP-00432-operator-console.indent.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00432", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00432", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00433", + "gapId": "operator:console.indent_or_autocomplete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00433-operator-console.indent_or_autocomplete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00433.py -- tests/files/web/generated/M16-GAP-00433-operator-console.indent_or_autocomplete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00433", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00433", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00434", + "gapId": "operator:console.insert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00434-operator-console.insert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00434.py -- tests/files/web/generated/M16-GAP-00434-operator-console.insert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00434", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00434", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00435", + "gapId": "operator:console.language", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00435-operator-console.language.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00435.py -- tests/files/web/generated/M16-GAP-00435-operator-console.language.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00435", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00435", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00436", + "gapId": "operator:console.move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00436-operator-console.move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00436.py -- tests/files/web/generated/M16-GAP-00436-operator-console.move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00436", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00436", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00437", + "gapId": "operator:console.paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00437-operator-console.paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00437.py -- tests/files/web/generated/M16-GAP-00437-operator-console.paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00437", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00437", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00438", + "gapId": "operator:console.scrollback_append", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00438-operator-console.scrollback_append.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00438.py -- tests/files/web/generated/M16-GAP-00438-operator-console.scrollback_append.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00438", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00438", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00439", + "gapId": "operator:console.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00439-operator-console.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00439.py -- tests/files/web/generated/M16-GAP-00439-operator-console.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00439", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00439", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00440", + "gapId": "operator:console.select_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00440-operator-console.select_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00440.py -- tests/files/web/generated/M16-GAP-00440-operator-console.select_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00440", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00440", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00441", + "gapId": "operator:console.select_word", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00441-operator-console.select_word.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00441.py -- tests/files/web/generated/M16-GAP-00441-operator-console.select_word.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00441", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00441", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00442", + "gapId": "operator:console.unindent", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00442-operator-console.unindent.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00442.py -- tests/files/web/generated/M16-GAP-00442-operator-console.unindent.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00442", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00442", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00443", + "gapId": "operator:constraint.add_target", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00443-operator-constraint.add_target.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00443.py -- tests/files/web/generated/M16-GAP-00443-operator-constraint.add_target.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00443", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00443", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00444", + "gapId": "operator:constraint.apply", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00444-operator-constraint.apply.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00444.py -- tests/files/web/generated/M16-GAP-00444-operator-constraint.apply.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00444", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00444", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00445", + "gapId": "operator:constraint.childof_clear_inverse", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00445-operator-constraint.childof_clear_inverse.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00445.py -- tests/files/web/generated/M16-GAP-00445-operator-constraint.childof_clear_inverse.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00445", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00445", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00446", + "gapId": "operator:constraint.childof_set_inverse", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00446-operator-constraint.childof_set_inverse.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00446.py -- tests/files/web/generated/M16-GAP-00446-operator-constraint.childof_set_inverse.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00446", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00446", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00447", + "gapId": "operator:constraint.copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00447-operator-constraint.copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00447.py -- tests/files/web/generated/M16-GAP-00447-operator-constraint.copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00447", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00447", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00448", + "gapId": "operator:constraint.copy_to_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00448-operator-constraint.copy_to_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00448.py -- tests/files/web/generated/M16-GAP-00448-operator-constraint.copy_to_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00448", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00448", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00449", + "gapId": "operator:constraint.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00449-operator-constraint.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00449.py -- tests/files/web/generated/M16-GAP-00449-operator-constraint.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00449", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00449", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00450", + "gapId": "operator:constraint.disable_keep_transform", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00450-operator-constraint.disable_keep_transform.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00450.py -- tests/files/web/generated/M16-GAP-00450-operator-constraint.disable_keep_transform.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00450", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00450", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00451", + "gapId": "operator:constraint.followpath_path_animate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00451-operator-constraint.followpath_path_animate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00451.py -- tests/files/web/generated/M16-GAP-00451-operator-constraint.followpath_path_animate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00451", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00451", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00452", + "gapId": "operator:constraint.limitdistance_reset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00452-operator-constraint.limitdistance_reset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00452.py -- tests/files/web/generated/M16-GAP-00452-operator-constraint.limitdistance_reset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00452", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00452", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00453", + "gapId": "operator:constraint.move_down", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00453-operator-constraint.move_down.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00453.py -- tests/files/web/generated/M16-GAP-00453-operator-constraint.move_down.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00453", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00453", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00454", + "gapId": "operator:constraint.move_to_index", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00454-operator-constraint.move_to_index.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00454.py -- tests/files/web/generated/M16-GAP-00454-operator-constraint.move_to_index.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00454", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00454", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00455", + "gapId": "operator:constraint.move_up", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00455-operator-constraint.move_up.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00455.py -- tests/files/web/generated/M16-GAP-00455-operator-constraint.move_up.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00455", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00455", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00456", + "gapId": "operator:constraint.normalize_target_weights", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00456-operator-constraint.normalize_target_weights.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00456.py -- tests/files/web/generated/M16-GAP-00456-operator-constraint.normalize_target_weights.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00456", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00456", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00457", + "gapId": "operator:constraint.objectsolver_clear_inverse", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00457-operator-constraint.objectsolver_clear_inverse.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00457.py -- tests/files/web/generated/M16-GAP-00457-operator-constraint.objectsolver_clear_inverse.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00457", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00457", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00458", + "gapId": "operator:constraint.objectsolver_set_inverse", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00458-operator-constraint.objectsolver_set_inverse.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00458.py -- tests/files/web/generated/M16-GAP-00458-operator-constraint.objectsolver_set_inverse.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00458", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00458", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00459", + "gapId": "operator:constraint.remove_target", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00459-operator-constraint.remove_target.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00459.py -- tests/files/web/generated/M16-GAP-00459-operator-constraint.remove_target.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00459", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00459", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00460", + "gapId": "operator:constraint.stretchto_reset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00460-operator-constraint.stretchto_reset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00460.py -- tests/files/web/generated/M16-GAP-00460-operator-constraint.stretchto_reset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00460", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00460", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00461", + "gapId": "operator:curve.cyclic_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00461-operator-curve.cyclic_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00461.py -- tests/files/web/generated/M16-GAP-00461-operator-curve.cyclic_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00461", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00461", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00462", + "gapId": "operator:curve.de_select_first", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00462-operator-curve.de_select_first.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00462.py -- tests/files/web/generated/M16-GAP-00462-operator-curve.de_select_first.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00462", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00462", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00463", + "gapId": "operator:curve.de_select_last", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00463-operator-curve.de_select_last.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00463.py -- tests/files/web/generated/M16-GAP-00463-operator-curve.de_select_last.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00463", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00463", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00464", + "gapId": "operator:curve.decimate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00464-operator-curve.decimate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00464.py -- tests/files/web/generated/M16-GAP-00464-operator-curve.decimate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00464", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00464", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00465", + "gapId": "operator:curve.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00465-operator-curve.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00465.py -- tests/files/web/generated/M16-GAP-00465-operator-curve.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00465", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00465", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00466", + "gapId": "operator:curve.dissolve_verts", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00466-operator-curve.dissolve_verts.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00466.py -- tests/files/web/generated/M16-GAP-00466-operator-curve.dissolve_verts.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00466", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00466", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00467", + "gapId": "operator:curve.draw", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00467-operator-curve.draw.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00467.py -- tests/files/web/generated/M16-GAP-00467-operator-curve.draw.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00467", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00467", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00468", + "gapId": "operator:curve.duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00468-operator-curve.duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00468.py -- tests/files/web/generated/M16-GAP-00468-operator-curve.duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00468", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00468", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00469", + "gapId": "operator:curve.duplicate_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00469-operator-curve.duplicate_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00469.py -- tests/files/web/generated/M16-GAP-00469-operator-curve.duplicate_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00469", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00469", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00470", + "gapId": "operator:curve.extrude", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00470-operator-curve.extrude.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00470.py -- tests/files/web/generated/M16-GAP-00470-operator-curve.extrude.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00470", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00470", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00471", + "gapId": "operator:curve.extrude_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00471-operator-curve.extrude_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00471.py -- tests/files/web/generated/M16-GAP-00471-operator-curve.extrude_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00471", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00471", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00472", + "gapId": "operator:curve.handle_type_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00472-operator-curve.handle_type_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00472.py -- tests/files/web/generated/M16-GAP-00472-operator-curve.handle_type_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00472", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00472", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00473", + "gapId": "operator:curve.hide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00473-operator-curve.hide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00473.py -- tests/files/web/generated/M16-GAP-00473-operator-curve.hide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00473", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00473", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00474", + "gapId": "operator:curve.make_segment", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00474-operator-curve.make_segment.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00474.py -- tests/files/web/generated/M16-GAP-00474-operator-curve.make_segment.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00474", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00474", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00475", + "gapId": "operator:curve.match_texture_space", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00475-operator-curve.match_texture_space.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00475.py -- tests/files/web/generated/M16-GAP-00475-operator-curve.match_texture_space.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00475", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00475", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00476", + "gapId": "operator:curve.normals_make_consistent", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00476-operator-curve.normals_make_consistent.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00476.py -- tests/files/web/generated/M16-GAP-00476-operator-curve.normals_make_consistent.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00476", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00476", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00477", + "gapId": "operator:curve.pen", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00477-operator-curve.pen.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00477.py -- tests/files/web/generated/M16-GAP-00477-operator-curve.pen.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00477", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00477", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00478", + "gapId": "operator:curve.primitive_bezier_circle_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00478-operator-curve.primitive_bezier_circle_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00478.py -- tests/files/web/generated/M16-GAP-00478-operator-curve.primitive_bezier_circle_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00478", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00478", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00479", + "gapId": "operator:curve.primitive_bezier_curve_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00479-operator-curve.primitive_bezier_curve_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00479.py -- tests/files/web/generated/M16-GAP-00479-operator-curve.primitive_bezier_curve_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00479", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00479", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00480", + "gapId": "operator:curve.primitive_nurbs_circle_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00480-operator-curve.primitive_nurbs_circle_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00480.py -- tests/files/web/generated/M16-GAP-00480-operator-curve.primitive_nurbs_circle_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00480", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00480", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00481", + "gapId": "operator:curve.primitive_nurbs_curve_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00481-operator-curve.primitive_nurbs_curve_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00481.py -- tests/files/web/generated/M16-GAP-00481-operator-curve.primitive_nurbs_curve_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00481", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00481", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00482", + "gapId": "operator:curve.primitive_nurbs_path_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00482-operator-curve.primitive_nurbs_path_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00482.py -- tests/files/web/generated/M16-GAP-00482-operator-curve.primitive_nurbs_path_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00482", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00482", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00483", + "gapId": "operator:curve.radius_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00483-operator-curve.radius_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00483.py -- tests/files/web/generated/M16-GAP-00483-operator-curve.radius_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00483", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00483", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00484", + "gapId": "operator:curve.reveal", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00484-operator-curve.reveal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00484.py -- tests/files/web/generated/M16-GAP-00484-operator-curve.reveal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00484", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00484", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00485", + "gapId": "operator:curve.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00485-operator-curve.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00485.py -- tests/files/web/generated/M16-GAP-00485-operator-curve.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00485", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00485", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00486", + "gapId": "operator:curve.select_less", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00486-operator-curve.select_less.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00486.py -- tests/files/web/generated/M16-GAP-00486-operator-curve.select_less.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00486", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00486", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00487", + "gapId": "operator:curve.select_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00487-operator-curve.select_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00487.py -- tests/files/web/generated/M16-GAP-00487-operator-curve.select_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00487", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00487", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00488", + "gapId": "operator:curve.select_linked_pick", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00488-operator-curve.select_linked_pick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00488.py -- tests/files/web/generated/M16-GAP-00488-operator-curve.select_linked_pick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00488", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00488", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00489", + "gapId": "operator:curve.select_more", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00489-operator-curve.select_more.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00489.py -- tests/files/web/generated/M16-GAP-00489-operator-curve.select_more.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00489", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00489", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00490", + "gapId": "operator:curve.select_next", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00490-operator-curve.select_next.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00490.py -- tests/files/web/generated/M16-GAP-00490-operator-curve.select_next.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00490", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00490", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00491", + "gapId": "operator:curve.select_nth", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00491-operator-curve.select_nth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00491.py -- tests/files/web/generated/M16-GAP-00491-operator-curve.select_nth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00491", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00491", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00492", + "gapId": "operator:curve.select_previous", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00492-operator-curve.select_previous.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00492.py -- tests/files/web/generated/M16-GAP-00492-operator-curve.select_previous.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00492", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00492", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00493", + "gapId": "operator:curve.select_random", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00493-operator-curve.select_random.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00493.py -- tests/files/web/generated/M16-GAP-00493-operator-curve.select_random.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00493", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00493", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00494", + "gapId": "operator:curve.select_row", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00494-operator-curve.select_row.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00494.py -- tests/files/web/generated/M16-GAP-00494-operator-curve.select_row.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00494", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00494", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00495", + "gapId": "operator:curve.select_similar", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00495-operator-curve.select_similar.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00495.py -- tests/files/web/generated/M16-GAP-00495-operator-curve.select_similar.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00495", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00495", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00496", + "gapId": "operator:curve.separate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00496-operator-curve.separate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00496.py -- tests/files/web/generated/M16-GAP-00496-operator-curve.separate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00496", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00496", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00497", + "gapId": "operator:curve.shade_flat", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00497-operator-curve.shade_flat.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00497.py -- tests/files/web/generated/M16-GAP-00497-operator-curve.shade_flat.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00497", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00497", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00498", + "gapId": "operator:curve.shade_smooth", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00498-operator-curve.shade_smooth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00498.py -- tests/files/web/generated/M16-GAP-00498-operator-curve.shade_smooth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00498", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00498", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00499", + "gapId": "operator:curve.shortest_path_pick", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00499-operator-curve.shortest_path_pick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00499.py -- tests/files/web/generated/M16-GAP-00499-operator-curve.shortest_path_pick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00499", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00499", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00500", + "gapId": "operator:curve.smooth", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00500-operator-curve.smooth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00500.py -- tests/files/web/generated/M16-GAP-00500-operator-curve.smooth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00500", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00500", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00501", + "gapId": "operator:curve.smooth_radius", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00501-operator-curve.smooth_radius.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00501.py -- tests/files/web/generated/M16-GAP-00501-operator-curve.smooth_radius.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00501", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00501", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00502", + "gapId": "operator:curve.smooth_tilt", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00502-operator-curve.smooth_tilt.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00502.py -- tests/files/web/generated/M16-GAP-00502-operator-curve.smooth_tilt.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00502", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00502", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00503", + "gapId": "operator:curve.smooth_weight", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00503-operator-curve.smooth_weight.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00503.py -- tests/files/web/generated/M16-GAP-00503-operator-curve.smooth_weight.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00503", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00503", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00504", + "gapId": "operator:curve.spin", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00504-operator-curve.spin.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00504.py -- tests/files/web/generated/M16-GAP-00504-operator-curve.spin.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00504", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00504", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00505", + "gapId": "operator:curve.spline_type_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00505-operator-curve.spline_type_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00505.py -- tests/files/web/generated/M16-GAP-00505-operator-curve.spline_type_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00505", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00505", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00506", + "gapId": "operator:curve.spline_weight_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00506-operator-curve.spline_weight_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00506.py -- tests/files/web/generated/M16-GAP-00506-operator-curve.spline_weight_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00506", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00506", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00507", + "gapId": "operator:curve.split", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00507-operator-curve.split.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00507.py -- tests/files/web/generated/M16-GAP-00507-operator-curve.split.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00507", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00507", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00508", + "gapId": "operator:curve.subdivide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00508-operator-curve.subdivide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00508.py -- tests/files/web/generated/M16-GAP-00508-operator-curve.subdivide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00508", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00508", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00509", + "gapId": "operator:curve.switch_direction", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00509-operator-curve.switch_direction.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00509.py -- tests/files/web/generated/M16-GAP-00509-operator-curve.switch_direction.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00509", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00509", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00510", + "gapId": "operator:curve.tilt_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00510-operator-curve.tilt_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00510.py -- tests/files/web/generated/M16-GAP-00510-operator-curve.tilt_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00510", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00510", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00511", + "gapId": "operator:curve.vertex_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00511-operator-curve.vertex_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00511.py -- tests/files/web/generated/M16-GAP-00511-operator-curve.vertex_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00511", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00511", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00512", + "gapId": "operator:curves.add_bezier", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00512-operator-curves.add_bezier.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00512.py -- tests/files/web/generated/M16-GAP-00512-operator-curves.add_bezier.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00512", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00512", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00513", + "gapId": "operator:curves.add_circle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00513-operator-curves.add_circle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00513.py -- tests/files/web/generated/M16-GAP-00513-operator-curves.add_circle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00513", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00513", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00514", + "gapId": "operator:curves.attribute_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00514-operator-curves.attribute_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00514.py -- tests/files/web/generated/M16-GAP-00514-operator-curves.attribute_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00514", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00514", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00515", + "gapId": "operator:curves.convert_from_particle_system", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00515-operator-curves.convert_from_particle_system.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00515.py -- tests/files/web/generated/M16-GAP-00515-operator-curves.convert_from_particle_system.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00515", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00515", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00516", + "gapId": "operator:curves.convert_to_particle_system", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00516-operator-curves.convert_to_particle_system.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00516.py -- tests/files/web/generated/M16-GAP-00516-operator-curves.convert_to_particle_system.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00516", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00516", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00517", + "gapId": "operator:curves.curve_type_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00517-operator-curves.curve_type_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00517.py -- tests/files/web/generated/M16-GAP-00517-operator-curves.curve_type_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00517", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00517", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00518", + "gapId": "operator:curves.cyclic_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00518-operator-curves.cyclic_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00518.py -- tests/files/web/generated/M16-GAP-00518-operator-curves.cyclic_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00518", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00518", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00519", + "gapId": "operator:curves.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00519-operator-curves.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00519.py -- tests/files/web/generated/M16-GAP-00519-operator-curves.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00519", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00519", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00520", + "gapId": "operator:curves.draw", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00520-operator-curves.draw.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00520.py -- tests/files/web/generated/M16-GAP-00520-operator-curves.draw.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00520", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00520", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00521", + "gapId": "operator:curves.duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00521-operator-curves.duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00521.py -- tests/files/web/generated/M16-GAP-00521-operator-curves.duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00521", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00521", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00522", + "gapId": "operator:curves.duplicate_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00522-operator-curves.duplicate_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00522.py -- tests/files/web/generated/M16-GAP-00522-operator-curves.duplicate_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00522", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00522", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00523", + "gapId": "operator:curves.extrude", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00523-operator-curves.extrude.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00523.py -- tests/files/web/generated/M16-GAP-00523-operator-curves.extrude.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00523", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00523", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00524", + "gapId": "operator:curves.extrude_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00524-operator-curves.extrude_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00524.py -- tests/files/web/generated/M16-GAP-00524-operator-curves.extrude_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00524", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00524", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00525", + "gapId": "operator:curves.handle_type_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00525-operator-curves.handle_type_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00525.py -- tests/files/web/generated/M16-GAP-00525-operator-curves.handle_type_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00525", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00525", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00526", + "gapId": "operator:curves.pen", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00526-operator-curves.pen.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00526.py -- tests/files/web/generated/M16-GAP-00526-operator-curves.pen.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00526", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00526", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00527", + "gapId": "operator:curves.sculptmode_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00527-operator-curves.sculptmode_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00527.py -- tests/files/web/generated/M16-GAP-00527-operator-curves.sculptmode_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00527", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00527", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00528", + "gapId": "operator:curves.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00528-operator-curves.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00528.py -- tests/files/web/generated/M16-GAP-00528-operator-curves.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00528", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00528", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00529", + "gapId": "operator:curves.select_ends", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00529-operator-curves.select_ends.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00529.py -- tests/files/web/generated/M16-GAP-00529-operator-curves.select_ends.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00529", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00529", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00530", + "gapId": "operator:curves.select_less", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00530-operator-curves.select_less.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00530.py -- tests/files/web/generated/M16-GAP-00530-operator-curves.select_less.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00530", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00530", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00531", + "gapId": "operator:curves.select_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00531-operator-curves.select_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00531.py -- tests/files/web/generated/M16-GAP-00531-operator-curves.select_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00531", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00531", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00532", + "gapId": "operator:curves.select_linked_pick", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00532-operator-curves.select_linked_pick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00532.py -- tests/files/web/generated/M16-GAP-00532-operator-curves.select_linked_pick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00532", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00532", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00533", + "gapId": "operator:curves.select_more", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00533-operator-curves.select_more.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00533.py -- tests/files/web/generated/M16-GAP-00533-operator-curves.select_more.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00533", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00533", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00534", + "gapId": "operator:curves.select_random", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00534-operator-curves.select_random.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00534.py -- tests/files/web/generated/M16-GAP-00534-operator-curves.select_random.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00534", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00534", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00535", + "gapId": "operator:curves.separate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00535-operator-curves.separate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00535.py -- tests/files/web/generated/M16-GAP-00535-operator-curves.separate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00535", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00535", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00536", + "gapId": "operator:curves.set_selection_domain", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00536-operator-curves.set_selection_domain.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00536.py -- tests/files/web/generated/M16-GAP-00536-operator-curves.set_selection_domain.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00536", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00536", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00537", + "gapId": "operator:curves.snap_curves_to_surface", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00537-operator-curves.snap_curves_to_surface.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00537.py -- tests/files/web/generated/M16-GAP-00537-operator-curves.snap_curves_to_surface.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00537", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00537", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00538", + "gapId": "operator:curves.split", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00538-operator-curves.split.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00538.py -- tests/files/web/generated/M16-GAP-00538-operator-curves.split.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00538", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00538", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00539", + "gapId": "operator:curves.subdivide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00539-operator-curves.subdivide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00539.py -- tests/files/web/generated/M16-GAP-00539-operator-curves.subdivide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00539", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00539", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00540", + "gapId": "operator:curves.surface_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00540-operator-curves.surface_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00540.py -- tests/files/web/generated/M16-GAP-00540-operator-curves.surface_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00540", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00540", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00541", + "gapId": "operator:curves.switch_direction", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00541-operator-curves.switch_direction.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00541.py -- tests/files/web/generated/M16-GAP-00541-operator-curves.switch_direction.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00541", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00541", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00542", + "gapId": "operator:curves.tilt_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00542-operator-curves.tilt_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00542.py -- tests/files/web/generated/M16-GAP-00542-operator-curves.tilt_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00542", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00542", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00543", + "gapId": "operator:cycles.denoise_animation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00543-operator-cycles.denoise_animation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00543.py -- tests/files/web/generated/M16-GAP-00543-operator-cycles.denoise_animation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00543", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00543", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00544", + "gapId": "operator:cycles.merge_images", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00544-operator-cycles.merge_images.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00544.py -- tests/files/web/generated/M16-GAP-00544-operator-cycles.merge_images.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00544", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00544", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00545", + "gapId": "operator:cycles.use_shading_nodes", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00545-operator-cycles.use_shading_nodes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00545.py -- tests/files/web/generated/M16-GAP-00545-operator-cycles.use_shading_nodes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00545", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00545", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00546", + "gapId": "operator:dpaint.bake", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00546-operator-dpaint.bake.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00546.py -- tests/files/web/generated/M16-GAP-00546-operator-dpaint.bake.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00546", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00546", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00547", + "gapId": "operator:dpaint.output_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00547-operator-dpaint.output_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00547.py -- tests/files/web/generated/M16-GAP-00547-operator-dpaint.output_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00547", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00547", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00548", + "gapId": "operator:dpaint.surface_slot_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00548-operator-dpaint.surface_slot_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00548.py -- tests/files/web/generated/M16-GAP-00548-operator-dpaint.surface_slot_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00548", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00548", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00549", + "gapId": "operator:dpaint.surface_slot_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00549-operator-dpaint.surface_slot_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00549.py -- tests/files/web/generated/M16-GAP-00549-operator-dpaint.surface_slot_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00549", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00549", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00550", + "gapId": "operator:dpaint.type_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00550-operator-dpaint.type_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00550.py -- tests/files/web/generated/M16-GAP-00550-operator-dpaint.type_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00550", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00550", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00551", + "gapId": "operator:ed.flush_edits", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00551-operator-ed.flush_edits.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00551.py -- tests/files/web/generated/M16-GAP-00551-operator-ed.flush_edits.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00551", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00551", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00552", + "gapId": "operator:ed.lib_id_fake_user_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00552-operator-ed.lib_id_fake_user_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00552.py -- tests/files/web/generated/M16-GAP-00552-operator-ed.lib_id_fake_user_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00552", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00552", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00553", + "gapId": "operator:ed.lib_id_generate_preview", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00553-operator-ed.lib_id_generate_preview.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00553.py -- tests/files/web/generated/M16-GAP-00553-operator-ed.lib_id_generate_preview.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00553", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00553", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00554", + "gapId": "operator:ed.lib_id_generate_preview_from_object", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00554-operator-ed.lib_id_generate_preview_from_object.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00554.py -- tests/files/web/generated/M16-GAP-00554-operator-ed.lib_id_generate_preview_from_object.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00554", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00554", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00555", + "gapId": "operator:ed.lib_id_load_custom_preview", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00555-operator-ed.lib_id_load_custom_preview.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00555.py -- tests/files/web/generated/M16-GAP-00555-operator-ed.lib_id_load_custom_preview.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00555", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00555", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00556", + "gapId": "operator:ed.lib_id_override_editable_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00556-operator-ed.lib_id_override_editable_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00556.py -- tests/files/web/generated/M16-GAP-00556-operator-ed.lib_id_override_editable_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00556", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00556", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00557", + "gapId": "operator:ed.lib_id_remove_preview", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00557-operator-ed.lib_id_remove_preview.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00557.py -- tests/files/web/generated/M16-GAP-00557-operator-ed.lib_id_remove_preview.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00557", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00557", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00558", + "gapId": "operator:ed.lib_id_unlink", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00558-operator-ed.lib_id_unlink.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00558.py -- tests/files/web/generated/M16-GAP-00558-operator-ed.lib_id_unlink.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00558", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00558", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00559", + "gapId": "operator:ed.redo", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00559-operator-ed.redo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00559.py -- tests/files/web/generated/M16-GAP-00559-operator-ed.redo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00559", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00559", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00560", + "gapId": "operator:ed.undo", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00560-operator-ed.undo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00560.py -- tests/files/web/generated/M16-GAP-00560-operator-ed.undo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00560", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00560", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00561", + "gapId": "operator:ed.undo_history", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00561-operator-ed.undo_history.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00561.py -- tests/files/web/generated/M16-GAP-00561-operator-ed.undo_history.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00561", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00561", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00562", + "gapId": "operator:ed.undo_push", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00562-operator-ed.undo_push.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00562.py -- tests/files/web/generated/M16-GAP-00562-operator-ed.undo_push.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00562", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00562", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00563", + "gapId": "operator:ed.undo_redo", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00563-operator-ed.undo_redo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00563.py -- tests/files/web/generated/M16-GAP-00563-operator-ed.undo_redo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00563", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00563", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00564", + "gapId": "operator:export_anim.bvh", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00564-operator-export_anim.bvh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00564.py -- tests/files/web/generated/M16-GAP-00564-operator-export_anim.bvh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00564", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00564", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00565", + "gapId": "operator:export_scene.fbx", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00565-operator-export_scene.fbx.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00565.py -- tests/files/web/generated/M16-GAP-00565-operator-export_scene.fbx.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00565", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00565", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00566", + "gapId": "operator:export_scene.gltf", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00566-operator-export_scene.gltf.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00566.py -- tests/files/web/generated/M16-GAP-00566-operator-export_scene.gltf.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00566", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00566", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00567", + "gapId": "operator:extensions.package_disable", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00567-operator-extensions.package_disable.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00567.py -- tests/files/web/generated/M16-GAP-00567-operator-extensions.package_disable.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00567", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00567", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00568", + "gapId": "operator:extensions.package_install", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00568-operator-extensions.package_install.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00568.py -- tests/files/web/generated/M16-GAP-00568-operator-extensions.package_install.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00568", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00568", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00569", + "gapId": "operator:extensions.package_install_files", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00569-operator-extensions.package_install_files.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00569.py -- tests/files/web/generated/M16-GAP-00569-operator-extensions.package_install_files.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00569", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00569", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00570", + "gapId": "operator:extensions.package_install_marked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00570-operator-extensions.package_install_marked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00570.py -- tests/files/web/generated/M16-GAP-00570-operator-extensions.package_install_marked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00570", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00570", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00571", + "gapId": "operator:extensions.package_mark_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00571-operator-extensions.package_mark_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00571.py -- tests/files/web/generated/M16-GAP-00571-operator-extensions.package_mark_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00571", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00571", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00572", + "gapId": "operator:extensions.package_mark_clear_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00572-operator-extensions.package_mark_clear_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00572.py -- tests/files/web/generated/M16-GAP-00572-operator-extensions.package_mark_clear_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00572", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00572", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00573", + "gapId": "operator:extensions.package_mark_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00573-operator-extensions.package_mark_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00573.py -- tests/files/web/generated/M16-GAP-00573-operator-extensions.package_mark_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00573", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00573", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00574", + "gapId": "operator:extensions.package_mark_set_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00574-operator-extensions.package_mark_set_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00574.py -- tests/files/web/generated/M16-GAP-00574-operator-extensions.package_mark_set_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00574", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00574", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00575", + "gapId": "operator:extensions.package_obsolete_marked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00575-operator-extensions.package_obsolete_marked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00575.py -- tests/files/web/generated/M16-GAP-00575-operator-extensions.package_obsolete_marked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00575", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00575", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00576", + "gapId": "operator:extensions.package_show_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00576-operator-extensions.package_show_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00576.py -- tests/files/web/generated/M16-GAP-00576-operator-extensions.package_show_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00576", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00576", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00577", + "gapId": "operator:extensions.package_show_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00577-operator-extensions.package_show_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00577.py -- tests/files/web/generated/M16-GAP-00577-operator-extensions.package_show_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00577", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00577", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00578", + "gapId": "operator:extensions.package_show_settings", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00578-operator-extensions.package_show_settings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00578.py -- tests/files/web/generated/M16-GAP-00578-operator-extensions.package_show_settings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00578", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00578", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00579", + "gapId": "operator:extensions.package_theme_disable", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00579-operator-extensions.package_theme_disable.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00579.py -- tests/files/web/generated/M16-GAP-00579-operator-extensions.package_theme_disable.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00579", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00579", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00580", + "gapId": "operator:extensions.package_theme_enable", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00580-operator-extensions.package_theme_enable.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00580.py -- tests/files/web/generated/M16-GAP-00580-operator-extensions.package_theme_enable.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00580", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00580", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00581", + "gapId": "operator:extensions.package_uninstall", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00581-operator-extensions.package_uninstall.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00581.py -- tests/files/web/generated/M16-GAP-00581-operator-extensions.package_uninstall.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00581", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00581", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00582", + "gapId": "operator:extensions.package_uninstall_marked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00582-operator-extensions.package_uninstall_marked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00582.py -- tests/files/web/generated/M16-GAP-00582-operator-extensions.package_uninstall_marked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00582", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00582", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00583", + "gapId": "operator:extensions.package_uninstall_system", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00583-operator-extensions.package_uninstall_system.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00583.py -- tests/files/web/generated/M16-GAP-00583-operator-extensions.package_uninstall_system.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00583", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00583", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00584", + "gapId": "operator:extensions.package_upgrade_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00584-operator-extensions.package_upgrade_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00584.py -- tests/files/web/generated/M16-GAP-00584-operator-extensions.package_upgrade_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00584", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00584", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00585", + "gapId": "operator:extensions.repo_enable_from_drop", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00585-operator-extensions.repo_enable_from_drop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00585.py -- tests/files/web/generated/M16-GAP-00585-operator-extensions.repo_enable_from_drop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00585", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00585", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00586", + "gapId": "operator:extensions.repo_lock_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00586-operator-extensions.repo_lock_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00586.py -- tests/files/web/generated/M16-GAP-00586-operator-extensions.repo_lock_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00586", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00586", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00587", + "gapId": "operator:extensions.repo_refresh_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00587-operator-extensions.repo_refresh_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00587.py -- tests/files/web/generated/M16-GAP-00587-operator-extensions.repo_refresh_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00587", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00587", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00588", + "gapId": "operator:extensions.repo_sync", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00588-operator-extensions.repo_sync.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00588.py -- tests/files/web/generated/M16-GAP-00588-operator-extensions.repo_sync.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00588", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00588", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00589", + "gapId": "operator:extensions.repo_sync_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00589-operator-extensions.repo_sync_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00589.py -- tests/files/web/generated/M16-GAP-00589-operator-extensions.repo_sync_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00589", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00589", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00590", + "gapId": "operator:extensions.repo_unlock", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00590-operator-extensions.repo_unlock.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00590.py -- tests/files/web/generated/M16-GAP-00590-operator-extensions.repo_unlock.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00590", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00590", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00591", + "gapId": "operator:extensions.repo_unlock_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00591-operator-extensions.repo_unlock_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00591.py -- tests/files/web/generated/M16-GAP-00591-operator-extensions.repo_unlock_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00591", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00591", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00592", + "gapId": "operator:extensions.status_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00592-operator-extensions.status_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00592.py -- tests/files/web/generated/M16-GAP-00592-operator-extensions.status_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00592", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00592", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00593", + "gapId": "operator:extensions.status_clear_errors", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00593-operator-extensions.status_clear_errors.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00593.py -- tests/files/web/generated/M16-GAP-00593-operator-extensions.status_clear_errors.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00593", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00593", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00594", + "gapId": "operator:extensions.userpref_allow_online", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00594-operator-extensions.userpref_allow_online.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00594.py -- tests/files/web/generated/M16-GAP-00594-operator-extensions.userpref_allow_online.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00594", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00594", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00595", + "gapId": "operator:extensions.userpref_allow_online_popup", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00595-operator-extensions.userpref_allow_online_popup.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00595.py -- tests/files/web/generated/M16-GAP-00595-operator-extensions.userpref_allow_online_popup.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00595", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00595", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00596", + "gapId": "operator:extensions.userpref_show_for_update", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00596-operator-extensions.userpref_show_for_update.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00596.py -- tests/files/web/generated/M16-GAP-00596-operator-extensions.userpref_show_for_update.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00596", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00596", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00597", + "gapId": "operator:extensions.userpref_show_online", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00597-operator-extensions.userpref_show_online.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00597.py -- tests/files/web/generated/M16-GAP-00597-operator-extensions.userpref_show_online.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00597", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00597", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00598", + "gapId": "operator:extensions.userpref_tags_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00598-operator-extensions.userpref_tags_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00598.py -- tests/files/web/generated/M16-GAP-00598-operator-extensions.userpref_tags_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00598", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00598", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00599", + "gapId": "operator:file.autopack_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00599-operator-file.autopack_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00599.py -- tests/files/web/generated/M16-GAP-00599-operator-file.autopack_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00599", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00599", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00600", + "gapId": "operator:file.bookmark_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00600-operator-file.bookmark_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00600.py -- tests/files/web/generated/M16-GAP-00600-operator-file.bookmark_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00600", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00600", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00601", + "gapId": "operator:file.bookmark_cleanup", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00601-operator-file.bookmark_cleanup.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00601.py -- tests/files/web/generated/M16-GAP-00601-operator-file.bookmark_cleanup.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00601", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00601", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00602", + "gapId": "operator:file.bookmark_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00602-operator-file.bookmark_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00602.py -- tests/files/web/generated/M16-GAP-00602-operator-file.bookmark_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00602", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00602", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00603", + "gapId": "operator:file.bookmark_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00603-operator-file.bookmark_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00603.py -- tests/files/web/generated/M16-GAP-00603-operator-file.bookmark_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00603", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00603", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00604", + "gapId": "operator:file.cancel", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00604-operator-file.cancel.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00604.py -- tests/files/web/generated/M16-GAP-00604-operator-file.cancel.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00604", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00604", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00605", + "gapId": "operator:file.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00605-operator-file.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00605.py -- tests/files/web/generated/M16-GAP-00605-operator-file.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00605", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00605", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00606", + "gapId": "operator:file.directory_new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00606-operator-file.directory_new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00606.py -- tests/files/web/generated/M16-GAP-00606-operator-file.directory_new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00606", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00606", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00607", + "gapId": "operator:file.edit_directory_path", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00607-operator-file.edit_directory_path.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00607.py -- tests/files/web/generated/M16-GAP-00607-operator-file.edit_directory_path.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00607", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00607", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00608", + "gapId": "operator:file.execute", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00608-operator-file.execute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00608.py -- tests/files/web/generated/M16-GAP-00608-operator-file.execute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00608", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00608", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00609", + "gapId": "operator:file.external_operation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00609-operator-file.external_operation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00609.py -- tests/files/web/generated/M16-GAP-00609-operator-file.external_operation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00609", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00609", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00610", + "gapId": "operator:file.filenum", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00610-operator-file.filenum.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00610.py -- tests/files/web/generated/M16-GAP-00610-operator-file.filenum.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00610", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00610", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00611", + "gapId": "operator:file.filepath_drop", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00611-operator-file.filepath_drop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00611.py -- tests/files/web/generated/M16-GAP-00611-operator-file.filepath_drop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00611", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00611", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00612", + "gapId": "operator:file.find_missing_files", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00612-operator-file.find_missing_files.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00612.py -- tests/files/web/generated/M16-GAP-00612-operator-file.find_missing_files.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00612", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00612", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00613", + "gapId": "operator:file.hidedot", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00613-operator-file.hidedot.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00613.py -- tests/files/web/generated/M16-GAP-00613-operator-file.hidedot.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00613", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00613", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00614", + "gapId": "operator:file.highlight", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00614-operator-file.highlight.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00614.py -- tests/files/web/generated/M16-GAP-00614-operator-file.highlight.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00614", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00614", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00615", + "gapId": "operator:file.make_paths_absolute", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00615-operator-file.make_paths_absolute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00615.py -- tests/files/web/generated/M16-GAP-00615-operator-file.make_paths_absolute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00615", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00615", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00616", + "gapId": "operator:file.make_paths_relative", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00616-operator-file.make_paths_relative.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00616.py -- tests/files/web/generated/M16-GAP-00616-operator-file.make_paths_relative.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00616", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00616", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00617", + "gapId": "operator:file.mouse_execute", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00617-operator-file.mouse_execute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00617.py -- tests/files/web/generated/M16-GAP-00617-operator-file.mouse_execute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00617", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00617", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00618", + "gapId": "operator:file.next", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00618-operator-file.next.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00618.py -- tests/files/web/generated/M16-GAP-00618-operator-file.next.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00618", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00618", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00619", + "gapId": "operator:file.pack_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00619-operator-file.pack_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00619.py -- tests/files/web/generated/M16-GAP-00619-operator-file.pack_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00619", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00619", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00620", + "gapId": "operator:file.pack_libraries", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00620-operator-file.pack_libraries.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00620.py -- tests/files/web/generated/M16-GAP-00620-operator-file.pack_libraries.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00620", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00620", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00621", + "gapId": "operator:file.parent", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00621-operator-file.parent.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00621.py -- tests/files/web/generated/M16-GAP-00621-operator-file.parent.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00621", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00621", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00622", + "gapId": "operator:file.previous", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00622-operator-file.previous.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00622.py -- tests/files/web/generated/M16-GAP-00622-operator-file.previous.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00622", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00622", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00623", + "gapId": "operator:file.refresh", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00623-operator-file.refresh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00623.py -- tests/files/web/generated/M16-GAP-00623-operator-file.refresh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00623", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00623", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00624", + "gapId": "operator:file.rename", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00624-operator-file.rename.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00624.py -- tests/files/web/generated/M16-GAP-00624-operator-file.rename.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00624", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00624", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00625", + "gapId": "operator:file.report_missing_files", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00625-operator-file.report_missing_files.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00625.py -- tests/files/web/generated/M16-GAP-00625-operator-file.report_missing_files.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00625", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00625", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00626", + "gapId": "operator:file.reset_recent", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00626-operator-file.reset_recent.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00626.py -- tests/files/web/generated/M16-GAP-00626-operator-file.reset_recent.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00626", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00626", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00627", + "gapId": "operator:file.select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00627-operator-file.select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00627.py -- tests/files/web/generated/M16-GAP-00627-operator-file.select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00627", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00627", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00628", + "gapId": "operator:file.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00628-operator-file.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00628.py -- tests/files/web/generated/M16-GAP-00628-operator-file.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00628", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00628", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00629", + "gapId": "operator:file.select_bookmark", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00629-operator-file.select_bookmark.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00629.py -- tests/files/web/generated/M16-GAP-00629-operator-file.select_bookmark.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00629", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00629", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00630", + "gapId": "operator:file.select_box", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00630-operator-file.select_box.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00630.py -- tests/files/web/generated/M16-GAP-00630-operator-file.select_box.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00630", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00630", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00631", + "gapId": "operator:file.select_walk", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00631-operator-file.select_walk.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00631.py -- tests/files/web/generated/M16-GAP-00631-operator-file.select_walk.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00631", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00631", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00632", + "gapId": "operator:file.smoothscroll", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00632-operator-file.smoothscroll.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00632.py -- tests/files/web/generated/M16-GAP-00632-operator-file.smoothscroll.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00632", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00632", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00633", + "gapId": "operator:file.sort_column_ui_context", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00633-operator-file.sort_column_ui_context.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00633.py -- tests/files/web/generated/M16-GAP-00633-operator-file.sort_column_ui_context.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00633", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00633", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00634", + "gapId": "operator:file.start_filter", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00634-operator-file.start_filter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00634.py -- tests/files/web/generated/M16-GAP-00634-operator-file.start_filter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00634", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00634", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00635", + "gapId": "operator:file.unpack_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00635-operator-file.unpack_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00635.py -- tests/files/web/generated/M16-GAP-00635-operator-file.unpack_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00635", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00635", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00636", + "gapId": "operator:file.unpack_item", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00636-operator-file.unpack_item.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00636.py -- tests/files/web/generated/M16-GAP-00636-operator-file.unpack_item.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00636", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00636", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00637", + "gapId": "operator:file.unpack_libraries", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00637-operator-file.unpack_libraries.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00637.py -- tests/files/web/generated/M16-GAP-00637-operator-file.unpack_libraries.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00637", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00637", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00638", + "gapId": "operator:file.view_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00638-operator-file.view_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00638.py -- tests/files/web/generated/M16-GAP-00638-operator-file.view_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00638", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00638", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00639", + "gapId": "operator:fluid.bake_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00639-operator-fluid.bake_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00639.py -- tests/files/web/generated/M16-GAP-00639-operator-fluid.bake_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00639", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00639", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00640", + "gapId": "operator:fluid.bake_data", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00640-operator-fluid.bake_data.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00640.py -- tests/files/web/generated/M16-GAP-00640-operator-fluid.bake_data.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00640", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00640", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00641", + "gapId": "operator:fluid.bake_guides", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00641-operator-fluid.bake_guides.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00641.py -- tests/files/web/generated/M16-GAP-00641-operator-fluid.bake_guides.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00641", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00641", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00642", + "gapId": "operator:fluid.bake_mesh", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00642-operator-fluid.bake_mesh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00642.py -- tests/files/web/generated/M16-GAP-00642-operator-fluid.bake_mesh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00642", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00642", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00643", + "gapId": "operator:fluid.bake_noise", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00643-operator-fluid.bake_noise.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00643.py -- tests/files/web/generated/M16-GAP-00643-operator-fluid.bake_noise.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00643", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00643", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00644", + "gapId": "operator:fluid.bake_particles", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00644-operator-fluid.bake_particles.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00644.py -- tests/files/web/generated/M16-GAP-00644-operator-fluid.bake_particles.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00644", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00644", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00645", + "gapId": "operator:fluid.free_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00645-operator-fluid.free_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00645.py -- tests/files/web/generated/M16-GAP-00645-operator-fluid.free_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00645", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00645", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00646", + "gapId": "operator:fluid.free_data", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00646-operator-fluid.free_data.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00646.py -- tests/files/web/generated/M16-GAP-00646-operator-fluid.free_data.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00646", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00646", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00647", + "gapId": "operator:fluid.free_guides", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00647-operator-fluid.free_guides.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00647.py -- tests/files/web/generated/M16-GAP-00647-operator-fluid.free_guides.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00647", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00647", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00648", + "gapId": "operator:fluid.free_mesh", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00648-operator-fluid.free_mesh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00648.py -- tests/files/web/generated/M16-GAP-00648-operator-fluid.free_mesh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00648", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00648", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00649", + "gapId": "operator:fluid.free_noise", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00649-operator-fluid.free_noise.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00649.py -- tests/files/web/generated/M16-GAP-00649-operator-fluid.free_noise.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00649", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00649", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00650", + "gapId": "operator:fluid.free_particles", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00650-operator-fluid.free_particles.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00650.py -- tests/files/web/generated/M16-GAP-00650-operator-fluid.free_particles.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00650", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00650", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00651", + "gapId": "operator:fluid.pause_bake", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00651-operator-fluid.pause_bake.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00651.py -- tests/files/web/generated/M16-GAP-00651-operator-fluid.pause_bake.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00651", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00651", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00652", + "gapId": "operator:fluid.preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00652-operator-fluid.preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00652.py -- tests/files/web/generated/M16-GAP-00652-operator-fluid.preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00652", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00652", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00653", + "gapId": "operator:font.case_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00653-operator-font.case_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00653.py -- tests/files/web/generated/M16-GAP-00653-operator-font.case_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00653", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00653", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00654", + "gapId": "operator:font.case_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00654-operator-font.case_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00654.py -- tests/files/web/generated/M16-GAP-00654-operator-font.case_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00654", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00654", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00655", + "gapId": "operator:font.change_character", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00655-operator-font.change_character.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00655.py -- tests/files/web/generated/M16-GAP-00655-operator-font.change_character.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00655", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00655", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00656", + "gapId": "operator:font.change_spacing", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00656-operator-font.change_spacing.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00656.py -- tests/files/web/generated/M16-GAP-00656-operator-font.change_spacing.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00656", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00656", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00657", + "gapId": "operator:font.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00657-operator-font.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00657.py -- tests/files/web/generated/M16-GAP-00657-operator-font.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00657", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00657", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00658", + "gapId": "operator:font.line_break", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00658-operator-font.line_break.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00658.py -- tests/files/web/generated/M16-GAP-00658-operator-font.line_break.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00658", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00658", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00659", + "gapId": "operator:font.move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00659-operator-font.move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00659.py -- tests/files/web/generated/M16-GAP-00659-operator-font.move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00659", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00659", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00660", + "gapId": "operator:font.move_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00660-operator-font.move_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00660.py -- tests/files/web/generated/M16-GAP-00660-operator-font.move_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00660", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00660", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00661", + "gapId": "operator:font.open", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00661-operator-font.open.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00661.py -- tests/files/web/generated/M16-GAP-00661-operator-font.open.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00661", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00661", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00662", + "gapId": "operator:font.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00662-operator-font.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00662.py -- tests/files/web/generated/M16-GAP-00662-operator-font.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00662", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00662", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00663", + "gapId": "operator:font.select_word", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00663-operator-font.select_word.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00663.py -- tests/files/web/generated/M16-GAP-00663-operator-font.select_word.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00663", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00663", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00664", + "gapId": "operator:font.selection_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00664-operator-font.selection_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00664.py -- tests/files/web/generated/M16-GAP-00664-operator-font.selection_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00664", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00664", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00665", + "gapId": "operator:font.style_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00665-operator-font.style_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00665.py -- tests/files/web/generated/M16-GAP-00665-operator-font.style_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00665", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00665", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00666", + "gapId": "operator:font.style_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00666-operator-font.style_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00666.py -- tests/files/web/generated/M16-GAP-00666-operator-font.style_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00666", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00666", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00667", + "gapId": "operator:font.text_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00667-operator-font.text_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00667.py -- tests/files/web/generated/M16-GAP-00667-operator-font.text_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00667", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00667", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00668", + "gapId": "operator:font.text_cut", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00668-operator-font.text_cut.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00668.py -- tests/files/web/generated/M16-GAP-00668-operator-font.text_cut.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00668", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00668", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00669", + "gapId": "operator:font.text_insert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00669-operator-font.text_insert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00669.py -- tests/files/web/generated/M16-GAP-00669-operator-font.text_insert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00669", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00669", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00670", + "gapId": "operator:font.text_insert_unicode", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00670-operator-font.text_insert_unicode.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00670.py -- tests/files/web/generated/M16-GAP-00670-operator-font.text_insert_unicode.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00670", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00670", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00671", + "gapId": "operator:font.text_paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00671-operator-font.text_paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00671.py -- tests/files/web/generated/M16-GAP-00671-operator-font.text_paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00671", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00671", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00672", + "gapId": "operator:font.text_paste_from_file", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00672-operator-font.text_paste_from_file.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00672.py -- tests/files/web/generated/M16-GAP-00672-operator-font.text_paste_from_file.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00672", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00672", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00673", + "gapId": "operator:font.textbox_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00673-operator-font.textbox_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00673.py -- tests/files/web/generated/M16-GAP-00673-operator-font.textbox_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00673", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00673", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00674", + "gapId": "operator:font.textbox_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00674-operator-font.textbox_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00674.py -- tests/files/web/generated/M16-GAP-00674-operator-font.textbox_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00674", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00674", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00675", + "gapId": "operator:font.unlink", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00675-operator-font.unlink.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00675.py -- tests/files/web/generated/M16-GAP-00675-operator-font.unlink.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00675", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00675", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00676", + "gapId": "operator:geometry.attribute_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00676-operator-geometry.attribute_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00676.py -- tests/files/web/generated/M16-GAP-00676-operator-geometry.attribute_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00676", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00676", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00677", + "gapId": "operator:geometry.attribute_convert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00677-operator-geometry.attribute_convert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00677.py -- tests/files/web/generated/M16-GAP-00677-operator-geometry.attribute_convert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00677", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00677", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00678", + "gapId": "operator:geometry.attribute_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00678-operator-geometry.attribute_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00678.py -- tests/files/web/generated/M16-GAP-00678-operator-geometry.attribute_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00678", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00678", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00679", + "gapId": "operator:geometry.color_attribute_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00679-operator-geometry.color_attribute_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00679.py -- tests/files/web/generated/M16-GAP-00679-operator-geometry.color_attribute_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00679", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00679", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00680", + "gapId": "operator:geometry.color_attribute_convert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00680-operator-geometry.color_attribute_convert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00680.py -- tests/files/web/generated/M16-GAP-00680-operator-geometry.color_attribute_convert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00680", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00680", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00681", + "gapId": "operator:geometry.color_attribute_duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00681-operator-geometry.color_attribute_duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00681.py -- tests/files/web/generated/M16-GAP-00681-operator-geometry.color_attribute_duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00681", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00681", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00682", + "gapId": "operator:geometry.color_attribute_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00682-operator-geometry.color_attribute_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00682.py -- tests/files/web/generated/M16-GAP-00682-operator-geometry.color_attribute_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00682", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00682", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00683", + "gapId": "operator:geometry.color_attribute_render_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00683-operator-geometry.color_attribute_render_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00683.py -- tests/files/web/generated/M16-GAP-00683-operator-geometry.color_attribute_render_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00683", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00683", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00684", + "gapId": "operator:geometry.geometry_randomization", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00684-operator-geometry.geometry_randomization.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00684.py -- tests/files/web/generated/M16-GAP-00684-operator-geometry.geometry_randomization.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00684", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00684", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00685", + "gapId": "operator:gizmogroup.gizmo_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00685-operator-gizmogroup.gizmo_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00685.py -- tests/files/web/generated/M16-GAP-00685-operator-gizmogroup.gizmo_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00685", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00685", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00686", + "gapId": "operator:gizmogroup.gizmo_tweak", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00686-operator-gizmogroup.gizmo_tweak.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00686.py -- tests/files/web/generated/M16-GAP-00686-operator-gizmogroup.gizmo_tweak.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00686", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00686", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00687", + "gapId": "operator:gpencil.annotate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00687-operator-gpencil.annotate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00687.py -- tests/files/web/generated/M16-GAP-00687-operator-gpencil.annotate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00687", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00687", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00688", + "gapId": "operator:gpencil.annotation_active_frame_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00688-operator-gpencil.annotation_active_frame_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00688.py -- tests/files/web/generated/M16-GAP-00688-operator-gpencil.annotation_active_frame_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00688", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00688", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00689", + "gapId": "operator:gpencil.annotation_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00689-operator-gpencil.annotation_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00689.py -- tests/files/web/generated/M16-GAP-00689-operator-gpencil.annotation_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00689", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00689", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00690", + "gapId": "operator:gpencil.data_unlink", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00690-operator-gpencil.data_unlink.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00690.py -- tests/files/web/generated/M16-GAP-00690-operator-gpencil.data_unlink.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00690", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00690", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00691", + "gapId": "operator:gpencil.layer_annotation_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00691-operator-gpencil.layer_annotation_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00691.py -- tests/files/web/generated/M16-GAP-00691-operator-gpencil.layer_annotation_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00691", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00691", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00692", + "gapId": "operator:gpencil.layer_annotation_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00692-operator-gpencil.layer_annotation_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00692.py -- tests/files/web/generated/M16-GAP-00692-operator-gpencil.layer_annotation_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00692", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00692", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00693", + "gapId": "operator:gpencil.layer_annotation_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00693-operator-gpencil.layer_annotation_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00693.py -- tests/files/web/generated/M16-GAP-00693-operator-gpencil.layer_annotation_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00693", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00693", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00694", + "gapId": "operator:graph.bake_keys", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00694-operator-graph.bake_keys.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00694.py -- tests/files/web/generated/M16-GAP-00694-operator-graph.bake_keys.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00694", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00694", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00695", + "gapId": "operator:graph.blend_offset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00695-operator-graph.blend_offset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00695.py -- tests/files/web/generated/M16-GAP-00695-operator-graph.blend_offset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00695", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00695", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00696", + "gapId": "operator:graph.blend_to_default", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00696-operator-graph.blend_to_default.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00696.py -- tests/files/web/generated/M16-GAP-00696-operator-graph.blend_to_default.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00696", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00696", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00697", + "gapId": "operator:graph.blend_to_ease", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00697-operator-graph.blend_to_ease.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00697.py -- tests/files/web/generated/M16-GAP-00697-operator-graph.blend_to_ease.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00697", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00697", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00698", + "gapId": "operator:graph.blend_to_neighbor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00698-operator-graph.blend_to_neighbor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00698.py -- tests/files/web/generated/M16-GAP-00698-operator-graph.blend_to_neighbor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00698", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00698", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00699", + "gapId": "operator:graph.breakdown", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00699-operator-graph.breakdown.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00699.py -- tests/files/web/generated/M16-GAP-00699-operator-graph.breakdown.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00699", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00699", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00700", + "gapId": "operator:graph.butterworth_smooth", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00700-operator-graph.butterworth_smooth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00700.py -- tests/files/web/generated/M16-GAP-00700-operator-graph.butterworth_smooth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00700", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00700", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00701", + "gapId": "operator:graph.clean", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00701-operator-graph.clean.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00701.py -- tests/files/web/generated/M16-GAP-00701-operator-graph.clean.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00701", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00701", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00702", + "gapId": "operator:graph.click_insert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00702-operator-graph.click_insert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00702.py -- tests/files/web/generated/M16-GAP-00702-operator-graph.click_insert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00702", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00702", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00703", + "gapId": "operator:graph.clickselect", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00703-operator-graph.clickselect.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00703.py -- tests/files/web/generated/M16-GAP-00703-operator-graph.clickselect.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00703", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00703", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00704", + "gapId": "operator:graph.copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00704-operator-graph.copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00704.py -- tests/files/web/generated/M16-GAP-00704-operator-graph.copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00704", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00704", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00705", + "gapId": "operator:graph.cursor_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00705-operator-graph.cursor_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00705.py -- tests/files/web/generated/M16-GAP-00705-operator-graph.cursor_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00705", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00705", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00706", + "gapId": "operator:graph.decimate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00706-operator-graph.decimate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00706.py -- tests/files/web/generated/M16-GAP-00706-operator-graph.decimate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00706", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00706", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00707", + "gapId": "operator:graph.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00707-operator-graph.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00707.py -- tests/files/web/generated/M16-GAP-00707-operator-graph.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00707", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00707", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00708", + "gapId": "operator:graph.driver_delete_invalid", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00708-operator-graph.driver_delete_invalid.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00708.py -- tests/files/web/generated/M16-GAP-00708-operator-graph.driver_delete_invalid.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00708", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00708", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00709", + "gapId": "operator:graph.driver_variables_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00709-operator-graph.driver_variables_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00709.py -- tests/files/web/generated/M16-GAP-00709-operator-graph.driver_variables_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00709", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00709", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00710", + "gapId": "operator:graph.driver_variables_paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00710-operator-graph.driver_variables_paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00710.py -- tests/files/web/generated/M16-GAP-00710-operator-graph.driver_variables_paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00710", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00710", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00711", + "gapId": "operator:graph.duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00711-operator-graph.duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00711.py -- tests/files/web/generated/M16-GAP-00711-operator-graph.duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00711", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00711", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00712", + "gapId": "operator:graph.duplicate_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00712-operator-graph.duplicate_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00712.py -- tests/files/web/generated/M16-GAP-00712-operator-graph.duplicate_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00712", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00712", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00713", + "gapId": "operator:graph.ease", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00713-operator-graph.ease.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00713.py -- tests/files/web/generated/M16-GAP-00713-operator-graph.ease.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00713", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00713", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00714", + "gapId": "operator:graph.easing_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00714-operator-graph.easing_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00714.py -- tests/files/web/generated/M16-GAP-00714-operator-graph.easing_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00714", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00714", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00715", + "gapId": "operator:graph.equalize_handles", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00715-operator-graph.equalize_handles.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00715.py -- tests/files/web/generated/M16-GAP-00715-operator-graph.equalize_handles.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00715", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00715", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00716", + "gapId": "operator:graph.euler_filter", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00716-operator-graph.euler_filter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00716.py -- tests/files/web/generated/M16-GAP-00716-operator-graph.euler_filter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00716", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00716", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00717", + "gapId": "operator:graph.extrapolation_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00717-operator-graph.extrapolation_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00717.py -- tests/files/web/generated/M16-GAP-00717-operator-graph.extrapolation_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00717", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00717", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00718", + "gapId": "operator:graph.fmodifier_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00718-operator-graph.fmodifier_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00718.py -- tests/files/web/generated/M16-GAP-00718-operator-graph.fmodifier_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00718", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00718", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00719", + "gapId": "operator:graph.fmodifier_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00719-operator-graph.fmodifier_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00719.py -- tests/files/web/generated/M16-GAP-00719-operator-graph.fmodifier_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00719", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00719", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00720", + "gapId": "operator:graph.fmodifier_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00720-operator-graph.fmodifier_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00720.py -- tests/files/web/generated/M16-GAP-00720-operator-graph.fmodifier_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00720", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00720", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00721", + "gapId": "operator:graph.fmodifier_paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00721-operator-graph.fmodifier_paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00721.py -- tests/files/web/generated/M16-GAP-00721-operator-graph.fmodifier_paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00721", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00721", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00722", + "gapId": "operator:graph.frame_jump", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00722-operator-graph.frame_jump.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00722.py -- tests/files/web/generated/M16-GAP-00722-operator-graph.frame_jump.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00722", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00722", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00723", + "gapId": "operator:graph.gaussian_smooth", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00723-operator-graph.gaussian_smooth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00723.py -- tests/files/web/generated/M16-GAP-00723-operator-graph.gaussian_smooth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00723", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00723", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00724", + "gapId": "operator:graph.ghost_curves_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00724-operator-graph.ghost_curves_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00724.py -- tests/files/web/generated/M16-GAP-00724-operator-graph.ghost_curves_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00724", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00724", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00725", + "gapId": "operator:graph.ghost_curves_create", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00725-operator-graph.ghost_curves_create.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00725.py -- tests/files/web/generated/M16-GAP-00725-operator-graph.ghost_curves_create.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00725", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00725", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00726", + "gapId": "operator:graph.handle_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00726-operator-graph.handle_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00726.py -- tests/files/web/generated/M16-GAP-00726-operator-graph.handle_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00726", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00726", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00727", + "gapId": "operator:graph.hide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00727-operator-graph.hide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00727.py -- tests/files/web/generated/M16-GAP-00727-operator-graph.hide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00727", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00727", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00728", + "gapId": "operator:graph.interpolation_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00728-operator-graph.interpolation_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00728.py -- tests/files/web/generated/M16-GAP-00728-operator-graph.interpolation_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00728", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00728", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00729", + "gapId": "operator:graph.keyframe_insert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00729-operator-graph.keyframe_insert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00729.py -- tests/files/web/generated/M16-GAP-00729-operator-graph.keyframe_insert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00729", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00729", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00730", + "gapId": "operator:graph.keyframe_jump", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00730-operator-graph.keyframe_jump.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00730.py -- tests/files/web/generated/M16-GAP-00730-operator-graph.keyframe_jump.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00730", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00730", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00731", + "gapId": "operator:graph.keys_to_samples", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00731-operator-graph.keys_to_samples.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00731.py -- tests/files/web/generated/M16-GAP-00731-operator-graph.keys_to_samples.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00731", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00731", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00732", + "gapId": "operator:graph.local_view", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00732-operator-graph.local_view.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00732.py -- tests/files/web/generated/M16-GAP-00732-operator-graph.local_view.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00732", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00732", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00733", + "gapId": "operator:graph.match_slope", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00733-operator-graph.match_slope.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00733.py -- tests/files/web/generated/M16-GAP-00733-operator-graph.match_slope.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00733", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00733", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00734", + "gapId": "operator:graph.mirror", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00734-operator-graph.mirror.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00734.py -- tests/files/web/generated/M16-GAP-00734-operator-graph.mirror.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00734", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00734", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00735", + "gapId": "operator:graph.paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00735-operator-graph.paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00735.py -- tests/files/web/generated/M16-GAP-00735-operator-graph.paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00735", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00735", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00736", + "gapId": "operator:graph.previewrange_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00736-operator-graph.previewrange_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00736.py -- tests/files/web/generated/M16-GAP-00736-operator-graph.previewrange_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00736", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00736", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00737", + "gapId": "operator:graph.push_pull", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00737-operator-graph.push_pull.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00737.py -- tests/files/web/generated/M16-GAP-00737-operator-graph.push_pull.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00737", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00737", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00738", + "gapId": "operator:graph.reveal", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00738-operator-graph.reveal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00738.py -- tests/files/web/generated/M16-GAP-00738-operator-graph.reveal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00738", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00738", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00739", + "gapId": "operator:graph.samples_to_keys", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00739-operator-graph.samples_to_keys.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00739.py -- tests/files/web/generated/M16-GAP-00739-operator-graph.samples_to_keys.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00739", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00739", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00740", + "gapId": "operator:graph.scale_average", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00740-operator-graph.scale_average.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00740.py -- tests/files/web/generated/M16-GAP-00740-operator-graph.scale_average.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00740", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00740", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00741", + "gapId": "operator:graph.scale_from_neighbor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00741-operator-graph.scale_from_neighbor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00741.py -- tests/files/web/generated/M16-GAP-00741-operator-graph.scale_from_neighbor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00741", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00741", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00742", + "gapId": "operator:graph.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00742-operator-graph.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00742.py -- tests/files/web/generated/M16-GAP-00742-operator-graph.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00742", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00742", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00743", + "gapId": "operator:graph.select_box", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00743-operator-graph.select_box.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00743.py -- tests/files/web/generated/M16-GAP-00743-operator-graph.select_box.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00743", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00743", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00744", + "gapId": "operator:graph.select_circle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00744-operator-graph.select_circle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00744.py -- tests/files/web/generated/M16-GAP-00744-operator-graph.select_circle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00744", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00744", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00745", + "gapId": "operator:graph.select_column", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00745-operator-graph.select_column.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00745.py -- tests/files/web/generated/M16-GAP-00745-operator-graph.select_column.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00745", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00745", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00746", + "gapId": "operator:graph.select_key_handles", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00746-operator-graph.select_key_handles.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00746.py -- tests/files/web/generated/M16-GAP-00746-operator-graph.select_key_handles.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00746", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00746", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00747", + "gapId": "operator:graph.select_lasso", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00747-operator-graph.select_lasso.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00747.py -- tests/files/web/generated/M16-GAP-00747-operator-graph.select_lasso.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00747", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00747", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00748", + "gapId": "operator:graph.select_leftright", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00748-operator-graph.select_leftright.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00748.py -- tests/files/web/generated/M16-GAP-00748-operator-graph.select_leftright.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00748", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00748", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00749", + "gapId": "operator:graph.select_less", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00749-operator-graph.select_less.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00749.py -- tests/files/web/generated/M16-GAP-00749-operator-graph.select_less.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00749", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00749", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00750", + "gapId": "operator:graph.select_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00750-operator-graph.select_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00750.py -- tests/files/web/generated/M16-GAP-00750-operator-graph.select_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00750", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00750", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00751", + "gapId": "operator:graph.select_more", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00751-operator-graph.select_more.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00751.py -- tests/files/web/generated/M16-GAP-00751-operator-graph.select_more.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00751", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00751", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00752", + "gapId": "operator:graph.shear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00752-operator-graph.shear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00752.py -- tests/files/web/generated/M16-GAP-00752-operator-graph.shear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00752", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00752", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00753", + "gapId": "operator:graph.smooth", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00753-operator-graph.smooth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00753.py -- tests/files/web/generated/M16-GAP-00753-operator-graph.smooth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00753", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00753", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00754", + "gapId": "operator:graph.snap", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00754-operator-graph.snap.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00754.py -- tests/files/web/generated/M16-GAP-00754-operator-graph.snap.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00754", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00754", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00755", + "gapId": "operator:graph.snap_cursor_value", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00755-operator-graph.snap_cursor_value.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00755.py -- tests/files/web/generated/M16-GAP-00755-operator-graph.snap_cursor_value.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00755", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00755", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00756", + "gapId": "operator:graph.sound_to_samples", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00756-operator-graph.sound_to_samples.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00756.py -- tests/files/web/generated/M16-GAP-00756-operator-graph.sound_to_samples.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00756", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00756", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00757", + "gapId": "operator:graph.time_offset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00757-operator-graph.time_offset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00757.py -- tests/files/web/generated/M16-GAP-00757-operator-graph.time_offset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00757", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00757", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00758", + "gapId": "operator:graph.view_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00758-operator-graph.view_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00758.py -- tests/files/web/generated/M16-GAP-00758-operator-graph.view_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00758", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00758", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00759", + "gapId": "operator:graph.view_frame", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00759-operator-graph.view_frame.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00759.py -- tests/files/web/generated/M16-GAP-00759-operator-graph.view_frame.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00759", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00759", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00760", + "gapId": "operator:graph.view_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00760-operator-graph.view_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00760.py -- tests/files/web/generated/M16-GAP-00760-operator-graph.view_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00760", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00760", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00761", + "gapId": "operator:grease_pencil.active_frame_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00761-operator-grease_pencil.active_frame_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00761.py -- tests/files/web/generated/M16-GAP-00761-operator-grease_pencil.active_frame_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00761", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00761", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00762", + "gapId": "operator:grease_pencil.bake_grease_pencil_animation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00762-operator-grease_pencil.bake_grease_pencil_animation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00762.py -- tests/files/web/generated/M16-GAP-00762-operator-grease_pencil.bake_grease_pencil_animation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00762", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00762", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00763", + "gapId": "operator:grease_pencil.brush_stroke", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00763-operator-grease_pencil.brush_stroke.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00763.py -- tests/files/web/generated/M16-GAP-00763-operator-grease_pencil.brush_stroke.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00763", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00763", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00764", + "gapId": "operator:grease_pencil.caps_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00764-operator-grease_pencil.caps_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00764.py -- tests/files/web/generated/M16-GAP-00764-operator-grease_pencil.caps_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00764", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00764", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00765", + "gapId": "operator:grease_pencil.clean_loose", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00765-operator-grease_pencil.clean_loose.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00765.py -- tests/files/web/generated/M16-GAP-00765-operator-grease_pencil.clean_loose.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00765", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00765", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00766", + "gapId": "operator:grease_pencil.convert_curve_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00766-operator-grease_pencil.convert_curve_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00766.py -- tests/files/web/generated/M16-GAP-00766-operator-grease_pencil.convert_curve_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00766", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00766", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00767", + "gapId": "operator:grease_pencil.copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00767-operator-grease_pencil.copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00767.py -- tests/files/web/generated/M16-GAP-00767-operator-grease_pencil.copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00767", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00767", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00768", + "gapId": "operator:grease_pencil.cyclical_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00768-operator-grease_pencil.cyclical_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00768.py -- tests/files/web/generated/M16-GAP-00768-operator-grease_pencil.cyclical_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00768", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00768", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00769", + "gapId": "operator:grease_pencil.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00769-operator-grease_pencil.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00769.py -- tests/files/web/generated/M16-GAP-00769-operator-grease_pencil.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00769", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00769", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00770", + "gapId": "operator:grease_pencil.delete_breakdown", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00770-operator-grease_pencil.delete_breakdown.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00770.py -- tests/files/web/generated/M16-GAP-00770-operator-grease_pencil.delete_breakdown.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00770", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00770", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00771", + "gapId": "operator:grease_pencil.delete_frame", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00771-operator-grease_pencil.delete_frame.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00771.py -- tests/files/web/generated/M16-GAP-00771-operator-grease_pencil.delete_frame.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00771", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00771", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00772", + "gapId": "operator:grease_pencil.dissolve", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00772-operator-grease_pencil.dissolve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00772.py -- tests/files/web/generated/M16-GAP-00772-operator-grease_pencil.dissolve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00772", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00772", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00773", + "gapId": "operator:grease_pencil.duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00773-operator-grease_pencil.duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00773.py -- tests/files/web/generated/M16-GAP-00773-operator-grease_pencil.duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00773", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00773", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00774", + "gapId": "operator:grease_pencil.duplicate_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00774-operator-grease_pencil.duplicate_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00774.py -- tests/files/web/generated/M16-GAP-00774-operator-grease_pencil.duplicate_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00774", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00774", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00775", + "gapId": "operator:grease_pencil.erase_box", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00775-operator-grease_pencil.erase_box.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00775.py -- tests/files/web/generated/M16-GAP-00775-operator-grease_pencil.erase_box.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00775", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00775", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00776", + "gapId": "operator:grease_pencil.erase_lasso", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00776-operator-grease_pencil.erase_lasso.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00776.py -- tests/files/web/generated/M16-GAP-00776-operator-grease_pencil.erase_lasso.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00776", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00776", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00777", + "gapId": "operator:grease_pencil.extrude", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00777-operator-grease_pencil.extrude.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00777.py -- tests/files/web/generated/M16-GAP-00777-operator-grease_pencil.extrude.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00777", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00777", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00778", + "gapId": "operator:grease_pencil.extrude_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00778-operator-grease_pencil.extrude_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00778.py -- tests/files/web/generated/M16-GAP-00778-operator-grease_pencil.extrude_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00778", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00778", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00779", + "gapId": "operator:grease_pencil.fill", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00779-operator-grease_pencil.fill.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00779.py -- tests/files/web/generated/M16-GAP-00779-operator-grease_pencil.fill.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00779", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00779", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00780", + "gapId": "operator:grease_pencil.frame_clean_duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00780-operator-grease_pencil.frame_clean_duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00780.py -- tests/files/web/generated/M16-GAP-00780-operator-grease_pencil.frame_clean_duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00780", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00780", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00781", + "gapId": "operator:grease_pencil.frame_duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00781-operator-grease_pencil.frame_duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00781.py -- tests/files/web/generated/M16-GAP-00781-operator-grease_pencil.frame_duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00781", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00781", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00782", + "gapId": "operator:grease_pencil.insert_blank_frame", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00782-operator-grease_pencil.insert_blank_frame.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00782.py -- tests/files/web/generated/M16-GAP-00782-operator-grease_pencil.insert_blank_frame.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00782", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00782", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00783", + "gapId": "operator:grease_pencil.interpolate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00783-operator-grease_pencil.interpolate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00783.py -- tests/files/web/generated/M16-GAP-00783-operator-grease_pencil.interpolate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00783", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00783", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00784", + "gapId": "operator:grease_pencil.interpolate_sequence", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00784-operator-grease_pencil.interpolate_sequence.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00784.py -- tests/files/web/generated/M16-GAP-00784-operator-grease_pencil.interpolate_sequence.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00784", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00784", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00785", + "gapId": "operator:grease_pencil.join_fills", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00785-operator-grease_pencil.join_fills.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00785.py -- tests/files/web/generated/M16-GAP-00785-operator-grease_pencil.join_fills.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00785", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00785", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00786", + "gapId": "operator:grease_pencil.join_selection", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00786-operator-grease_pencil.join_selection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00786.py -- tests/files/web/generated/M16-GAP-00786-operator-grease_pencil.join_selection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00786", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00786", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00787", + "gapId": "operator:grease_pencil.layer_active", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00787-operator-grease_pencil.layer_active.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00787.py -- tests/files/web/generated/M16-GAP-00787-operator-grease_pencil.layer_active.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00787", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00787", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00788", + "gapId": "operator:grease_pencil.layer_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00788-operator-grease_pencil.layer_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00788.py -- tests/files/web/generated/M16-GAP-00788-operator-grease_pencil.layer_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00788", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00788", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00789", + "gapId": "operator:grease_pencil.layer_duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00789-operator-grease_pencil.layer_duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00789.py -- tests/files/web/generated/M16-GAP-00789-operator-grease_pencil.layer_duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00789", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00789", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00790", + "gapId": "operator:grease_pencil.layer_duplicate_object", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00790-operator-grease_pencil.layer_duplicate_object.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00790.py -- tests/files/web/generated/M16-GAP-00790-operator-grease_pencil.layer_duplicate_object.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00790", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00790", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00791", + "gapId": "operator:grease_pencil.layer_group_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00791-operator-grease_pencil.layer_group_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00791.py -- tests/files/web/generated/M16-GAP-00791-operator-grease_pencil.layer_group_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00791", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00791", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00792", + "gapId": "operator:grease_pencil.layer_group_color_tag", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00792-operator-grease_pencil.layer_group_color_tag.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00792.py -- tests/files/web/generated/M16-GAP-00792-operator-grease_pencil.layer_group_color_tag.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00792", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00792", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00793", + "gapId": "operator:grease_pencil.layer_group_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00793-operator-grease_pencil.layer_group_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00793.py -- tests/files/web/generated/M16-GAP-00793-operator-grease_pencil.layer_group_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00793", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00793", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00794", + "gapId": "operator:grease_pencil.layer_hide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00794-operator-grease_pencil.layer_hide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00794.py -- tests/files/web/generated/M16-GAP-00794-operator-grease_pencil.layer_hide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00794", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00794", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00795", + "gapId": "operator:grease_pencil.layer_isolate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00795-operator-grease_pencil.layer_isolate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00795.py -- tests/files/web/generated/M16-GAP-00795-operator-grease_pencil.layer_isolate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00795", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00795", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00796", + "gapId": "operator:grease_pencil.layer_lock_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00796-operator-grease_pencil.layer_lock_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00796.py -- tests/files/web/generated/M16-GAP-00796-operator-grease_pencil.layer_lock_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00796", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00796", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00797", + "gapId": "operator:grease_pencil.layer_mask_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00797-operator-grease_pencil.layer_mask_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00797.py -- tests/files/web/generated/M16-GAP-00797-operator-grease_pencil.layer_mask_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00797", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00797", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00798", + "gapId": "operator:grease_pencil.layer_mask_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00798-operator-grease_pencil.layer_mask_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00798.py -- tests/files/web/generated/M16-GAP-00798-operator-grease_pencil.layer_mask_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00798", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00798", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00799", + "gapId": "operator:grease_pencil.layer_mask_reorder", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00799-operator-grease_pencil.layer_mask_reorder.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00799.py -- tests/files/web/generated/M16-GAP-00799-operator-grease_pencil.layer_mask_reorder.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00799", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00799", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00800", + "gapId": "operator:grease_pencil.layer_merge", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00800-operator-grease_pencil.layer_merge.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00800.py -- tests/files/web/generated/M16-GAP-00800-operator-grease_pencil.layer_merge.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00800", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00800", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00801", + "gapId": "operator:grease_pencil.layer_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00801-operator-grease_pencil.layer_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00801.py -- tests/files/web/generated/M16-GAP-00801-operator-grease_pencil.layer_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00801", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00801", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00802", + "gapId": "operator:grease_pencil.layer_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00802-operator-grease_pencil.layer_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00802.py -- tests/files/web/generated/M16-GAP-00802-operator-grease_pencil.layer_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00802", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00802", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00803", + "gapId": "operator:grease_pencil.layer_reveal", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00803-operator-grease_pencil.layer_reveal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00803.py -- tests/files/web/generated/M16-GAP-00803-operator-grease_pencil.layer_reveal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00803", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00803", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00804", + "gapId": "operator:grease_pencil.material_copy_to_object", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00804-operator-grease_pencil.material_copy_to_object.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00804.py -- tests/files/web/generated/M16-GAP-00804-operator-grease_pencil.material_copy_to_object.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00804", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00804", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00805", + "gapId": "operator:grease_pencil.material_hide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00805-operator-grease_pencil.material_hide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00805.py -- tests/files/web/generated/M16-GAP-00805-operator-grease_pencil.material_hide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00805", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00805", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00806", + "gapId": "operator:grease_pencil.material_isolate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00806-operator-grease_pencil.material_isolate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00806.py -- tests/files/web/generated/M16-GAP-00806-operator-grease_pencil.material_isolate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00806", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00806", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00807", + "gapId": "operator:grease_pencil.material_lock_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00807-operator-grease_pencil.material_lock_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00807.py -- tests/files/web/generated/M16-GAP-00807-operator-grease_pencil.material_lock_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00807", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00807", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00808", + "gapId": "operator:grease_pencil.material_lock_unselected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00808-operator-grease_pencil.material_lock_unselected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00808.py -- tests/files/web/generated/M16-GAP-00808-operator-grease_pencil.material_lock_unselected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00808", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00808", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00809", + "gapId": "operator:grease_pencil.material_lock_unused", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00809-operator-grease_pencil.material_lock_unused.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00809.py -- tests/files/web/generated/M16-GAP-00809-operator-grease_pencil.material_lock_unused.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00809", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00809", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00810", + "gapId": "operator:grease_pencil.material_reveal", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00810-operator-grease_pencil.material_reveal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00810.py -- tests/files/web/generated/M16-GAP-00810-operator-grease_pencil.material_reveal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00810", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00810", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00811", + "gapId": "operator:grease_pencil.material_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00811-operator-grease_pencil.material_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00811.py -- tests/files/web/generated/M16-GAP-00811-operator-grease_pencil.material_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00811", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00811", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00812", + "gapId": "operator:grease_pencil.material_unlock_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00812-operator-grease_pencil.material_unlock_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00812.py -- tests/files/web/generated/M16-GAP-00812-operator-grease_pencil.material_unlock_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00812", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00812", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00813", + "gapId": "operator:grease_pencil.move_to_layer", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00813-operator-grease_pencil.move_to_layer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00813.py -- tests/files/web/generated/M16-GAP-00813-operator-grease_pencil.move_to_layer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00813", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00813", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00814", + "gapId": "operator:grease_pencil.outline", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00814-operator-grease_pencil.outline.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00814.py -- tests/files/web/generated/M16-GAP-00814-operator-grease_pencil.outline.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00814", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00814", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00815", + "gapId": "operator:grease_pencil.paintmode_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00815-operator-grease_pencil.paintmode_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00815.py -- tests/files/web/generated/M16-GAP-00815-operator-grease_pencil.paintmode_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00815", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00815", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00816", + "gapId": "operator:grease_pencil.paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00816-operator-grease_pencil.paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00816.py -- tests/files/web/generated/M16-GAP-00816-operator-grease_pencil.paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00816", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00816", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00817", + "gapId": "operator:grease_pencil.pen", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00817-operator-grease_pencil.pen.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00817.py -- tests/files/web/generated/M16-GAP-00817-operator-grease_pencil.pen.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00817", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00817", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00818", + "gapId": "operator:grease_pencil.primitive_arc", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00818-operator-grease_pencil.primitive_arc.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00818.py -- tests/files/web/generated/M16-GAP-00818-operator-grease_pencil.primitive_arc.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00818", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00818", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00819", + "gapId": "operator:grease_pencil.primitive_box", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00819-operator-grease_pencil.primitive_box.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00819.py -- tests/files/web/generated/M16-GAP-00819-operator-grease_pencil.primitive_box.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00819", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00819", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00820", + "gapId": "operator:grease_pencil.primitive_circle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00820-operator-grease_pencil.primitive_circle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00820.py -- tests/files/web/generated/M16-GAP-00820-operator-grease_pencil.primitive_circle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00820", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00820", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00821", + "gapId": "operator:grease_pencil.primitive_curve", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00821-operator-grease_pencil.primitive_curve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00821.py -- tests/files/web/generated/M16-GAP-00821-operator-grease_pencil.primitive_curve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00821", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00821", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00822", + "gapId": "operator:grease_pencil.primitive_line", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00822-operator-grease_pencil.primitive_line.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00822.py -- tests/files/web/generated/M16-GAP-00822-operator-grease_pencil.primitive_line.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00822", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00822", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00823", + "gapId": "operator:grease_pencil.primitive_polyline", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00823-operator-grease_pencil.primitive_polyline.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00823.py -- tests/files/web/generated/M16-GAP-00823-operator-grease_pencil.primitive_polyline.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00823", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00823", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00824", + "gapId": "operator:grease_pencil.relative_layer_mask_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00824-operator-grease_pencil.relative_layer_mask_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00824.py -- tests/files/web/generated/M16-GAP-00824-operator-grease_pencil.relative_layer_mask_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00824", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00824", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00825", + "gapId": "operator:grease_pencil.remove_fill_guides", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00825-operator-grease_pencil.remove_fill_guides.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00825.py -- tests/files/web/generated/M16-GAP-00825-operator-grease_pencil.remove_fill_guides.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00825", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00825", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00826", + "gapId": "operator:grease_pencil.reorder", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00826-operator-grease_pencil.reorder.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00826.py -- tests/files/web/generated/M16-GAP-00826-operator-grease_pencil.reorder.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00826", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00826", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00827", + "gapId": "operator:grease_pencil.reproject", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00827-operator-grease_pencil.reproject.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00827.py -- tests/files/web/generated/M16-GAP-00827-operator-grease_pencil.reproject.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00827", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00827", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00828", + "gapId": "operator:grease_pencil.reset_uvs", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00828-operator-grease_pencil.reset_uvs.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00828.py -- tests/files/web/generated/M16-GAP-00828-operator-grease_pencil.reset_uvs.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00828", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00828", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00829", + "gapId": "operator:grease_pencil.sculpt_paint", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00829-operator-grease_pencil.sculpt_paint.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00829.py -- tests/files/web/generated/M16-GAP-00829-operator-grease_pencil.sculpt_paint.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00829", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00829", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00830", + "gapId": "operator:grease_pencil.sculptmode_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00830-operator-grease_pencil.sculptmode_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00830.py -- tests/files/web/generated/M16-GAP-00830-operator-grease_pencil.sculptmode_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00830", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00830", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00831", + "gapId": "operator:grease_pencil.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00831-operator-grease_pencil.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00831.py -- tests/files/web/generated/M16-GAP-00831-operator-grease_pencil.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00831", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00831", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00832", + "gapId": "operator:grease_pencil.select_alternate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00832-operator-grease_pencil.select_alternate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00832.py -- tests/files/web/generated/M16-GAP-00832-operator-grease_pencil.select_alternate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00832", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00832", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00833", + "gapId": "operator:grease_pencil.select_by_stroke_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00833-operator-grease_pencil.select_by_stroke_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00833.py -- tests/files/web/generated/M16-GAP-00833-operator-grease_pencil.select_by_stroke_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00833", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00833", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00834", + "gapId": "operator:grease_pencil.select_ends", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00834-operator-grease_pencil.select_ends.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00834.py -- tests/files/web/generated/M16-GAP-00834-operator-grease_pencil.select_ends.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00834", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00834", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00835", + "gapId": "operator:grease_pencil.select_fill", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00835-operator-grease_pencil.select_fill.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00835.py -- tests/files/web/generated/M16-GAP-00835-operator-grease_pencil.select_fill.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00835", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00835", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00836", + "gapId": "operator:grease_pencil.select_less", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00836-operator-grease_pencil.select_less.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00836.py -- tests/files/web/generated/M16-GAP-00836-operator-grease_pencil.select_less.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00836", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00836", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00837", + "gapId": "operator:grease_pencil.select_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00837-operator-grease_pencil.select_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00837.py -- tests/files/web/generated/M16-GAP-00837-operator-grease_pencil.select_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00837", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00837", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00838", + "gapId": "operator:grease_pencil.select_more", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00838-operator-grease_pencil.select_more.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00838.py -- tests/files/web/generated/M16-GAP-00838-operator-grease_pencil.select_more.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00838", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00838", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00839", + "gapId": "operator:grease_pencil.select_random", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00839-operator-grease_pencil.select_random.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00839.py -- tests/files/web/generated/M16-GAP-00839-operator-grease_pencil.select_random.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00839", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00839", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00840", + "gapId": "operator:grease_pencil.select_similar", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00840-operator-grease_pencil.select_similar.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00840.py -- tests/files/web/generated/M16-GAP-00840-operator-grease_pencil.select_similar.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00840", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00840", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00841", + "gapId": "operator:grease_pencil.separate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00841-operator-grease_pencil.separate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00841.py -- tests/files/web/generated/M16-GAP-00841-operator-grease_pencil.separate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00841", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00841", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00842", + "gapId": "operator:grease_pencil.separate_fills", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00842-operator-grease_pencil.separate_fills.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00842.py -- tests/files/web/generated/M16-GAP-00842-operator-grease_pencil.separate_fills.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00842", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00842", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00843", + "gapId": "operator:grease_pencil.set_active_material", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00843-operator-grease_pencil.set_active_material.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00843.py -- tests/files/web/generated/M16-GAP-00843-operator-grease_pencil.set_active_material.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00843", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00843", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00844", + "gapId": "operator:grease_pencil.set_corner_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00844-operator-grease_pencil.set_corner_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00844.py -- tests/files/web/generated/M16-GAP-00844-operator-grease_pencil.set_corner_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00844", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00844", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00845", + "gapId": "operator:grease_pencil.set_curve_resolution", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00845-operator-grease_pencil.set_curve_resolution.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00845.py -- tests/files/web/generated/M16-GAP-00845-operator-grease_pencil.set_curve_resolution.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00845", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00845", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00846", + "gapId": "operator:grease_pencil.set_curve_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00846-operator-grease_pencil.set_curve_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00846.py -- tests/files/web/generated/M16-GAP-00846-operator-grease_pencil.set_curve_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00846", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00846", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00847", + "gapId": "operator:grease_pencil.set_handle_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00847-operator-grease_pencil.set_handle_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00847.py -- tests/files/web/generated/M16-GAP-00847-operator-grease_pencil.set_handle_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00847", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00847", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00848", + "gapId": "operator:grease_pencil.set_material", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00848-operator-grease_pencil.set_material.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00848.py -- tests/files/web/generated/M16-GAP-00848-operator-grease_pencil.set_material.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00848", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00848", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00849", + "gapId": "operator:grease_pencil.set_selection_mode", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00849-operator-grease_pencil.set_selection_mode.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00849.py -- tests/files/web/generated/M16-GAP-00849-operator-grease_pencil.set_selection_mode.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00849", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00849", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00850", + "gapId": "operator:grease_pencil.set_start_point", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00850-operator-grease_pencil.set_start_point.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00850.py -- tests/files/web/generated/M16-GAP-00850-operator-grease_pencil.set_start_point.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00850", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00850", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00851", + "gapId": "operator:grease_pencil.set_stroke_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00851-operator-grease_pencil.set_stroke_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00851.py -- tests/files/web/generated/M16-GAP-00851-operator-grease_pencil.set_stroke_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00851", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00851", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00852", + "gapId": "operator:grease_pencil.set_uniform_opacity", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00852-operator-grease_pencil.set_uniform_opacity.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00852.py -- tests/files/web/generated/M16-GAP-00852-operator-grease_pencil.set_uniform_opacity.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00852", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00852", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00853", + "gapId": "operator:grease_pencil.set_uniform_thickness", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00853-operator-grease_pencil.set_uniform_thickness.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00853.py -- tests/files/web/generated/M16-GAP-00853-operator-grease_pencil.set_uniform_thickness.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00853", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00853", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00854", + "gapId": "operator:grease_pencil.snap_cursor_to_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00854-operator-grease_pencil.snap_cursor_to_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00854.py -- tests/files/web/generated/M16-GAP-00854-operator-grease_pencil.snap_cursor_to_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00854", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00854", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00855", + "gapId": "operator:grease_pencil.snap_to_cursor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00855-operator-grease_pencil.snap_to_cursor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00855.py -- tests/files/web/generated/M16-GAP-00855-operator-grease_pencil.snap_to_cursor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00855", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00855", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00856", + "gapId": "operator:grease_pencil.snap_to_grid", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00856-operator-grease_pencil.snap_to_grid.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00856.py -- tests/files/web/generated/M16-GAP-00856-operator-grease_pencil.snap_to_grid.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00856", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00856", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00857", + "gapId": "operator:grease_pencil.stroke_material_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00857-operator-grease_pencil.stroke_material_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00857.py -- tests/files/web/generated/M16-GAP-00857-operator-grease_pencil.stroke_material_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00857", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00857", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00858", + "gapId": "operator:grease_pencil.stroke_merge_by_distance", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00858-operator-grease_pencil.stroke_merge_by_distance.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00858.py -- tests/files/web/generated/M16-GAP-00858-operator-grease_pencil.stroke_merge_by_distance.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00858", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00858", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00859", + "gapId": "operator:grease_pencil.stroke_reset_vertex_color", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00859-operator-grease_pencil.stroke_reset_vertex_color.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00859.py -- tests/files/web/generated/M16-GAP-00859-operator-grease_pencil.stroke_reset_vertex_color.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00859", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00859", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00860", + "gapId": "operator:grease_pencil.stroke_simplify", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00860-operator-grease_pencil.stroke_simplify.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00860.py -- tests/files/web/generated/M16-GAP-00860-operator-grease_pencil.stroke_simplify.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00860", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00860", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00861", + "gapId": "operator:grease_pencil.stroke_smooth", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00861-operator-grease_pencil.stroke_smooth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00861.py -- tests/files/web/generated/M16-GAP-00861-operator-grease_pencil.stroke_smooth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00861", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00861", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00862", + "gapId": "operator:grease_pencil.stroke_split", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00862-operator-grease_pencil.stroke_split.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00862.py -- tests/files/web/generated/M16-GAP-00862-operator-grease_pencil.stroke_split.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00862", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00862", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00863", + "gapId": "operator:grease_pencil.stroke_subdivide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00863-operator-grease_pencil.stroke_subdivide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00863.py -- tests/files/web/generated/M16-GAP-00863-operator-grease_pencil.stroke_subdivide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00863", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00863", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00864", + "gapId": "operator:grease_pencil.stroke_subdivide_smooth", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00864-operator-grease_pencil.stroke_subdivide_smooth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00864.py -- tests/files/web/generated/M16-GAP-00864-operator-grease_pencil.stroke_subdivide_smooth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00864", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00864", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00865", + "gapId": "operator:grease_pencil.stroke_switch_direction", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00865-operator-grease_pencil.stroke_switch_direction.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00865.py -- tests/files/web/generated/M16-GAP-00865-operator-grease_pencil.stroke_switch_direction.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00865", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00865", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00866", + "gapId": "operator:grease_pencil.stroke_trim", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00866-operator-grease_pencil.stroke_trim.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00866.py -- tests/files/web/generated/M16-GAP-00866-operator-grease_pencil.stroke_trim.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00866", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00866", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00867", + "gapId": "operator:grease_pencil.texture_gradient", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00867-operator-grease_pencil.texture_gradient.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00867.py -- tests/files/web/generated/M16-GAP-00867-operator-grease_pencil.texture_gradient.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00867", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00867", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00868", + "gapId": "operator:grease_pencil.trace_image", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00868-operator-grease_pencil.trace_image.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00868.py -- tests/files/web/generated/M16-GAP-00868-operator-grease_pencil.trace_image.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00868", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00868", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00869", + "gapId": "operator:grease_pencil.vertex_brush_stroke", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00869-operator-grease_pencil.vertex_brush_stroke.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00869.py -- tests/files/web/generated/M16-GAP-00869-operator-grease_pencil.vertex_brush_stroke.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00869", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00869", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00870", + "gapId": "operator:grease_pencil.vertex_color_brightness_contrast", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00870-operator-grease_pencil.vertex_color_brightness_contrast.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00870.py -- tests/files/web/generated/M16-GAP-00870-operator-grease_pencil.vertex_color_brightness_contrast.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00870", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00870", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00871", + "gapId": "operator:grease_pencil.vertex_color_hsv", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00871-operator-grease_pencil.vertex_color_hsv.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00871.py -- tests/files/web/generated/M16-GAP-00871-operator-grease_pencil.vertex_color_hsv.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00871", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00871", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00872", + "gapId": "operator:grease_pencil.vertex_color_invert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00872-operator-grease_pencil.vertex_color_invert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00872.py -- tests/files/web/generated/M16-GAP-00872-operator-grease_pencil.vertex_color_invert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00872", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00872", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00873", + "gapId": "operator:grease_pencil.vertex_color_levels", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00873-operator-grease_pencil.vertex_color_levels.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00873.py -- tests/files/web/generated/M16-GAP-00873-operator-grease_pencil.vertex_color_levels.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00873", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00873", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00874", + "gapId": "operator:grease_pencil.vertex_color_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00874-operator-grease_pencil.vertex_color_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00874.py -- tests/files/web/generated/M16-GAP-00874-operator-grease_pencil.vertex_color_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00874", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00874", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00875", + "gapId": "operator:grease_pencil.vertex_group_normalize", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00875-operator-grease_pencil.vertex_group_normalize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00875.py -- tests/files/web/generated/M16-GAP-00875-operator-grease_pencil.vertex_group_normalize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00875", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00875", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00876", + "gapId": "operator:grease_pencil.vertex_group_normalize_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00876-operator-grease_pencil.vertex_group_normalize_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00876.py -- tests/files/web/generated/M16-GAP-00876-operator-grease_pencil.vertex_group_normalize_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00876", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00876", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00877", + "gapId": "operator:grease_pencil.vertex_group_smooth", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00877-operator-grease_pencil.vertex_group_smooth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00877.py -- tests/files/web/generated/M16-GAP-00877-operator-grease_pencil.vertex_group_smooth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00877", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00877", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00878", + "gapId": "operator:grease_pencil.vertexmode_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00878-operator-grease_pencil.vertexmode_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00878.py -- tests/files/web/generated/M16-GAP-00878-operator-grease_pencil.vertexmode_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00878", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00878", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00879", + "gapId": "operator:grease_pencil.weight_brush_stroke", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00879-operator-grease_pencil.weight_brush_stroke.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00879.py -- tests/files/web/generated/M16-GAP-00879-operator-grease_pencil.weight_brush_stroke.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00879", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00879", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00880", + "gapId": "operator:grease_pencil.weight_invert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00880-operator-grease_pencil.weight_invert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00880.py -- tests/files/web/generated/M16-GAP-00880-operator-grease_pencil.weight_invert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00880", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00880", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00881", + "gapId": "operator:grease_pencil.weight_sample", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00881-operator-grease_pencil.weight_sample.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00881.py -- tests/files/web/generated/M16-GAP-00881-operator-grease_pencil.weight_sample.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00881", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00881", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00882", + "gapId": "operator:grease_pencil.weight_toggle_direction", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00882-operator-grease_pencil.weight_toggle_direction.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00882.py -- tests/files/web/generated/M16-GAP-00882-operator-grease_pencil.weight_toggle_direction.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00882", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00882", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00883", + "gapId": "operator:grease_pencil.weightmode_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00883-operator-grease_pencil.weightmode_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00883.py -- tests/files/web/generated/M16-GAP-00883-operator-grease_pencil.weightmode_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00883", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00883", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00884", + "gapId": "operator:image.add_render_slot", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00884-operator-image.add_render_slot.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00884.py -- tests/files/web/generated/M16-GAP-00884-operator-image.add_render_slot.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00884", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00884", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00885", + "gapId": "operator:image.change_frame", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00885-operator-image.change_frame.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00885.py -- tests/files/web/generated/M16-GAP-00885-operator-image.change_frame.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00885", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00885", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00886", + "gapId": "operator:image.clear_render_border", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00886-operator-image.clear_render_border.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00886.py -- tests/files/web/generated/M16-GAP-00886-operator-image.clear_render_border.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00886", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00886", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00887", + "gapId": "operator:image.clear_render_slot", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00887-operator-image.clear_render_slot.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00887.py -- tests/files/web/generated/M16-GAP-00887-operator-image.clear_render_slot.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00887", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00887", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00888", + "gapId": "operator:image.clipboard_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00888-operator-image.clipboard_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00888.py -- tests/files/web/generated/M16-GAP-00888-operator-image.clipboard_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00888", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00888", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00889", + "gapId": "operator:image.clipboard_paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00889-operator-image.clipboard_paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00889.py -- tests/files/web/generated/M16-GAP-00889-operator-image.clipboard_paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00889", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00889", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00890", + "gapId": "operator:image.convert_to_mesh_plane", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00890-operator-image.convert_to_mesh_plane.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00890.py -- tests/files/web/generated/M16-GAP-00890-operator-image.convert_to_mesh_plane.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00890", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00890", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00891", + "gapId": "operator:image.curves_point_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00891-operator-image.curves_point_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00891.py -- tests/files/web/generated/M16-GAP-00891-operator-image.curves_point_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00891", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00891", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00892", + "gapId": "operator:image.cycle_render_slot", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00892-operator-image.cycle_render_slot.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00892.py -- tests/files/web/generated/M16-GAP-00892-operator-image.cycle_render_slot.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00892", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00892", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00893", + "gapId": "operator:image.external_edit", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00893-operator-image.external_edit.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00893.py -- tests/files/web/generated/M16-GAP-00893-operator-image.external_edit.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00893", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00893", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00894", + "gapId": "operator:image.file_browse", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00894-operator-image.file_browse.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00894.py -- tests/files/web/generated/M16-GAP-00894-operator-image.file_browse.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00894", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00894", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00895", + "gapId": "operator:image.flip", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00895-operator-image.flip.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00895.py -- tests/files/web/generated/M16-GAP-00895-operator-image.flip.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00895", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00895", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00896", + "gapId": "operator:image.import_as_mesh_planes", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00896-operator-image.import_as_mesh_planes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00896.py -- tests/files/web/generated/M16-GAP-00896-operator-image.import_as_mesh_planes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00896", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00896", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00897", + "gapId": "operator:image.invert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00897-operator-image.invert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00897.py -- tests/files/web/generated/M16-GAP-00897-operator-image.invert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00897", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00897", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00898", + "gapId": "operator:image.match_movie_length", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00898-operator-image.match_movie_length.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00898.py -- tests/files/web/generated/M16-GAP-00898-operator-image.match_movie_length.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00898", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00898", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00899", + "gapId": "operator:image.new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00899-operator-image.new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00899.py -- tests/files/web/generated/M16-GAP-00899-operator-image.new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00899", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00899", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00900", + "gapId": "operator:image.open", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00900-operator-image.open.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00900.py -- tests/files/web/generated/M16-GAP-00900-operator-image.open.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00900", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00900", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00901", + "gapId": "operator:image.open_images", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00901-operator-image.open_images.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00901.py -- tests/files/web/generated/M16-GAP-00901-operator-image.open_images.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00901", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00901", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00902", + "gapId": "operator:image.pack", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00902-operator-image.pack.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00902.py -- tests/files/web/generated/M16-GAP-00902-operator-image.pack.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00902", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00902", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00903", + "gapId": "operator:image.project_apply", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00903-operator-image.project_apply.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00903.py -- tests/files/web/generated/M16-GAP-00903-operator-image.project_apply.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00903", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00903", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00904", + "gapId": "operator:image.project_edit", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00904-operator-image.project_edit.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00904.py -- tests/files/web/generated/M16-GAP-00904-operator-image.project_edit.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00904", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00904", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00905", + "gapId": "operator:image.read_viewlayers", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00905-operator-image.read_viewlayers.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00905.py -- tests/files/web/generated/M16-GAP-00905-operator-image.read_viewlayers.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00905", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00905", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00906", + "gapId": "operator:image.reload", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00906-operator-image.reload.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00906.py -- tests/files/web/generated/M16-GAP-00906-operator-image.reload.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00906", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00906", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00907", + "gapId": "operator:image.remove_render_slot", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00907-operator-image.remove_render_slot.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00907.py -- tests/files/web/generated/M16-GAP-00907-operator-image.remove_render_slot.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00907", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00907", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00908", + "gapId": "operator:image.render_border", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00908-operator-image.render_border.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00908.py -- tests/files/web/generated/M16-GAP-00908-operator-image.render_border.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00908", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00908", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00909", + "gapId": "operator:image.replace", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00909-operator-image.replace.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00909.py -- tests/files/web/generated/M16-GAP-00909-operator-image.replace.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00909", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00909", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00910", + "gapId": "operator:image.resize", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00910-operator-image.resize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00910.py -- tests/files/web/generated/M16-GAP-00910-operator-image.resize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00910", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00910", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00911", + "gapId": "operator:image.rotate_orthogonal", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00911-operator-image.rotate_orthogonal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00911.py -- tests/files/web/generated/M16-GAP-00911-operator-image.rotate_orthogonal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00911", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00911", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00912", + "gapId": "operator:image.sample", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00912-operator-image.sample.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00912.py -- tests/files/web/generated/M16-GAP-00912-operator-image.sample.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00912", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00912", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00913", + "gapId": "operator:image.sample_line", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00913-operator-image.sample_line.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00913.py -- tests/files/web/generated/M16-GAP-00913-operator-image.sample_line.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00913", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00913", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00914", + "gapId": "operator:image.save", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00914-operator-image.save.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00914.py -- tests/files/web/generated/M16-GAP-00914-operator-image.save.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00914", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00914", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00915", + "gapId": "operator:image.save_all_modified", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00915-operator-image.save_all_modified.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00915.py -- tests/files/web/generated/M16-GAP-00915-operator-image.save_all_modified.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00915", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00915", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00916", + "gapId": "operator:image.save_as", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00916-operator-image.save_as.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00916.py -- tests/files/web/generated/M16-GAP-00916-operator-image.save_as.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00916", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00916", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00917", + "gapId": "operator:image.save_sequence", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00917-operator-image.save_sequence.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00917.py -- tests/files/web/generated/M16-GAP-00917-operator-image.save_sequence.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00917", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00917", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00918", + "gapId": "operator:image.tile_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00918-operator-image.tile_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00918.py -- tests/files/web/generated/M16-GAP-00918-operator-image.tile_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00918", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00918", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00919", + "gapId": "operator:image.tile_fill", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00919-operator-image.tile_fill.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00919.py -- tests/files/web/generated/M16-GAP-00919-operator-image.tile_fill.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00919", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00919", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00920", + "gapId": "operator:image.tile_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00920-operator-image.tile_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00920.py -- tests/files/web/generated/M16-GAP-00920-operator-image.tile_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00920", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00920", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00921", + "gapId": "operator:image.unpack", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00921-operator-image.unpack.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00921.py -- tests/files/web/generated/M16-GAP-00921-operator-image.unpack.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00921", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00921", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00922", + "gapId": "operator:image.view_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00922-operator-image.view_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00922.py -- tests/files/web/generated/M16-GAP-00922-operator-image.view_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00922", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00922", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00923", + "gapId": "operator:image.view_center_cursor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00923-operator-image.view_center_cursor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00923.py -- tests/files/web/generated/M16-GAP-00923-operator-image.view_center_cursor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00923", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00923", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00924", + "gapId": "operator:image.view_cursor_center", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00924-operator-image.view_cursor_center.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00924.py -- tests/files/web/generated/M16-GAP-00924-operator-image.view_cursor_center.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00924", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00924", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00925", + "gapId": "operator:image.view_ndof", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00925-operator-image.view_ndof.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00925.py -- tests/files/web/generated/M16-GAP-00925-operator-image.view_ndof.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00925", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00925", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00926", + "gapId": "operator:image.view_pan", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00926-operator-image.view_pan.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00926.py -- tests/files/web/generated/M16-GAP-00926-operator-image.view_pan.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00926", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00926", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00927", + "gapId": "operator:image.view_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00927-operator-image.view_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00927.py -- tests/files/web/generated/M16-GAP-00927-operator-image.view_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00927", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00927", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00928", + "gapId": "operator:image.view_zoom", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00928-operator-image.view_zoom.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00928.py -- tests/files/web/generated/M16-GAP-00928-operator-image.view_zoom.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00928", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00928", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00929", + "gapId": "operator:image.view_zoom_border", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00929-operator-image.view_zoom_border.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00929.py -- tests/files/web/generated/M16-GAP-00929-operator-image.view_zoom_border.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00929", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00929", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00930", + "gapId": "operator:image.view_zoom_in", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00930-operator-image.view_zoom_in.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00930.py -- tests/files/web/generated/M16-GAP-00930-operator-image.view_zoom_in.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00930", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00930", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00931", + "gapId": "operator:image.view_zoom_out", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00931-operator-image.view_zoom_out.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00931.py -- tests/files/web/generated/M16-GAP-00931-operator-image.view_zoom_out.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00931", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00931", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00932", + "gapId": "operator:image.view_zoom_ratio", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00932-operator-image.view_zoom_ratio.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00932.py -- tests/files/web/generated/M16-GAP-00932-operator-image.view_zoom_ratio.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00932", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00932", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00933", + "gapId": "operator:import_anim.bvh", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00933-operator-import_anim.bvh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00933.py -- tests/files/web/generated/M16-GAP-00933-operator-import_anim.bvh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00933", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00933", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00934", + "gapId": "operator:import_curve.svg", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00934-operator-import_curve.svg.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00934.py -- tests/files/web/generated/M16-GAP-00934-operator-import_curve.svg.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00934", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00934", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00935", + "gapId": "operator:import_scene.fbx", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00935-operator-import_scene.fbx.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00935.py -- tests/files/web/generated/M16-GAP-00935-operator-import_scene.fbx.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00935", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00935", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00936", + "gapId": "operator:import_scene.gltf", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00936-operator-import_scene.gltf.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00936.py -- tests/files/web/generated/M16-GAP-00936-operator-import_scene.gltf.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00936", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00936", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00937", + "gapId": "operator:info.report_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00937-operator-info.report_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00937.py -- tests/files/web/generated/M16-GAP-00937-operator-info.report_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00937", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00937", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00938", + "gapId": "operator:info.report_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00938-operator-info.report_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00938.py -- tests/files/web/generated/M16-GAP-00938-operator-info.report_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00938", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00938", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00939", + "gapId": "operator:info.report_replay", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00939-operator-info.report_replay.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00939.py -- tests/files/web/generated/M16-GAP-00939-operator-info.report_replay.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00939", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00939", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00940", + "gapId": "operator:info.reports_display_update", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00940-operator-info.reports_display_update.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00940.py -- tests/files/web/generated/M16-GAP-00940-operator-info.reports_display_update.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00940", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00940", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00941", + "gapId": "operator:info.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00941-operator-info.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00941.py -- tests/files/web/generated/M16-GAP-00941-operator-info.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00941", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00941", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00942", + "gapId": "operator:info.select_box", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00942-operator-info.select_box.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00942.py -- tests/files/web/generated/M16-GAP-00942-operator-info.select_box.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00942", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00942", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00943", + "gapId": "operator:info.select_pick", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00943-operator-info.select_pick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00943.py -- tests/files/web/generated/M16-GAP-00943-operator-info.select_pick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00943", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00943", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00944", + "gapId": "operator:lattice.flip", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00944-operator-lattice.flip.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00944.py -- tests/files/web/generated/M16-GAP-00944-operator-lattice.flip.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00944", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00944", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00945", + "gapId": "operator:lattice.make_regular", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00945-operator-lattice.make_regular.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00945.py -- tests/files/web/generated/M16-GAP-00945-operator-lattice.make_regular.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00945", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00945", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00946", + "gapId": "operator:lattice.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00946-operator-lattice.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00946.py -- tests/files/web/generated/M16-GAP-00946-operator-lattice.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00946", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00946", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00947", + "gapId": "operator:lattice.select_less", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00947-operator-lattice.select_less.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00947.py -- tests/files/web/generated/M16-GAP-00947-operator-lattice.select_less.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00947", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00947", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00948", + "gapId": "operator:lattice.select_mirror", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00948-operator-lattice.select_mirror.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00948.py -- tests/files/web/generated/M16-GAP-00948-operator-lattice.select_mirror.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00948", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00948", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00949", + "gapId": "operator:lattice.select_more", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00949-operator-lattice.select_more.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00949.py -- tests/files/web/generated/M16-GAP-00949-operator-lattice.select_more.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00949", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00949", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00950", + "gapId": "operator:lattice.select_random", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00950-operator-lattice.select_random.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00950.py -- tests/files/web/generated/M16-GAP-00950-operator-lattice.select_random.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00950", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00950", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00951", + "gapId": "operator:lattice.select_ungrouped", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00951-operator-lattice.select_ungrouped.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00951.py -- tests/files/web/generated/M16-GAP-00951-operator-lattice.select_ungrouped.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00951", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00951", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00952", + "gapId": "operator:marker.add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00952-operator-marker.add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00952.py -- tests/files/web/generated/M16-GAP-00952-operator-marker.add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00952", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00952", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00953", + "gapId": "operator:marker.camera_bind", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00953-operator-marker.camera_bind.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00953.py -- tests/files/web/generated/M16-GAP-00953-operator-marker.camera_bind.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00953", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00953", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00954", + "gapId": "operator:marker.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00954-operator-marker.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00954.py -- tests/files/web/generated/M16-GAP-00954-operator-marker.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00954", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00954", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00955", + "gapId": "operator:marker.duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00955-operator-marker.duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00955.py -- tests/files/web/generated/M16-GAP-00955-operator-marker.duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00955", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00955", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00956", + "gapId": "operator:marker.make_links_scene", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00956-operator-marker.make_links_scene.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00956.py -- tests/files/web/generated/M16-GAP-00956-operator-marker.make_links_scene.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00956", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00956", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00957", + "gapId": "operator:marker.move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00957-operator-marker.move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00957.py -- tests/files/web/generated/M16-GAP-00957-operator-marker.move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00957", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00957", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00958", + "gapId": "operator:marker.rename", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00958-operator-marker.rename.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00958.py -- tests/files/web/generated/M16-GAP-00958-operator-marker.rename.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00958", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00958", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00959", + "gapId": "operator:marker.select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00959-operator-marker.select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00959.py -- tests/files/web/generated/M16-GAP-00959-operator-marker.select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00959", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00959", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00960", + "gapId": "operator:marker.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00960-operator-marker.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00960.py -- tests/files/web/generated/M16-GAP-00960-operator-marker.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00960", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00960", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00961", + "gapId": "operator:marker.select_box", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00961-operator-marker.select_box.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00961.py -- tests/files/web/generated/M16-GAP-00961-operator-marker.select_box.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00961", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00961", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00962", + "gapId": "operator:marker.select_leftright", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00962-operator-marker.select_leftright.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00962.py -- tests/files/web/generated/M16-GAP-00962-operator-marker.select_leftright.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00962", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00962", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00963", + "gapId": "operator:mask.add_feather_vertex", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00963-operator-mask.add_feather_vertex.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00963.py -- tests/files/web/generated/M16-GAP-00963-operator-mask.add_feather_vertex.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00963", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00963", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00964", + "gapId": "operator:mask.add_feather_vertex_slide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00964-operator-mask.add_feather_vertex_slide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00964.py -- tests/files/web/generated/M16-GAP-00964-operator-mask.add_feather_vertex_slide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00964", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00964", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00965", + "gapId": "operator:mask.add_vertex", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00965-operator-mask.add_vertex.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00965.py -- tests/files/web/generated/M16-GAP-00965-operator-mask.add_vertex.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00965", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00965", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00966", + "gapId": "operator:mask.add_vertex_slide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00966-operator-mask.add_vertex_slide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00966.py -- tests/files/web/generated/M16-GAP-00966-operator-mask.add_vertex_slide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00966", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00966", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00967", + "gapId": "operator:mask.copy_splines", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00967-operator-mask.copy_splines.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00967.py -- tests/files/web/generated/M16-GAP-00967-operator-mask.copy_splines.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00967", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00967", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00968", + "gapId": "operator:mask.cyclic_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00968-operator-mask.cyclic_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00968.py -- tests/files/web/generated/M16-GAP-00968-operator-mask.cyclic_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00968", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00968", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00969", + "gapId": "operator:mask.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00969-operator-mask.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00969.py -- tests/files/web/generated/M16-GAP-00969-operator-mask.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00969", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00969", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00970", + "gapId": "operator:mask.duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00970-operator-mask.duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00970.py -- tests/files/web/generated/M16-GAP-00970-operator-mask.duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00970", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00970", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00971", + "gapId": "operator:mask.duplicate_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00971-operator-mask.duplicate_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00971.py -- tests/files/web/generated/M16-GAP-00971-operator-mask.duplicate_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00971", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00971", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00972", + "gapId": "operator:mask.feather_weight_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00972-operator-mask.feather_weight_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00972.py -- tests/files/web/generated/M16-GAP-00972-operator-mask.feather_weight_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00972", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00972", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00973", + "gapId": "operator:mask.handle_type_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00973-operator-mask.handle_type_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00973.py -- tests/files/web/generated/M16-GAP-00973-operator-mask.handle_type_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00973", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00973", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00974", + "gapId": "operator:mask.hide_view_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00974-operator-mask.hide_view_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00974.py -- tests/files/web/generated/M16-GAP-00974-operator-mask.hide_view_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00974", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00974", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00975", + "gapId": "operator:mask.hide_view_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00975-operator-mask.hide_view_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00975.py -- tests/files/web/generated/M16-GAP-00975-operator-mask.hide_view_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00975", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00975", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00976", + "gapId": "operator:mask.layer_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00976-operator-mask.layer_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00976.py -- tests/files/web/generated/M16-GAP-00976-operator-mask.layer_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00976", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00976", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00977", + "gapId": "operator:mask.layer_new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00977-operator-mask.layer_new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00977.py -- tests/files/web/generated/M16-GAP-00977-operator-mask.layer_new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00977", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00977", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00978", + "gapId": "operator:mask.layer_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00978-operator-mask.layer_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00978.py -- tests/files/web/generated/M16-GAP-00978-operator-mask.layer_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00978", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00978", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00979", + "gapId": "operator:mask.move_to_layer", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00979-operator-mask.move_to_layer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00979.py -- tests/files/web/generated/M16-GAP-00979-operator-mask.move_to_layer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00979", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00979", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00980", + "gapId": "operator:mask.new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00980-operator-mask.new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00980.py -- tests/files/web/generated/M16-GAP-00980-operator-mask.new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00980", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00980", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00981", + "gapId": "operator:mask.normals_make_consistent", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00981-operator-mask.normals_make_consistent.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00981.py -- tests/files/web/generated/M16-GAP-00981-operator-mask.normals_make_consistent.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00981", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00981", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00982", + "gapId": "operator:mask.parent_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00982-operator-mask.parent_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00982.py -- tests/files/web/generated/M16-GAP-00982-operator-mask.parent_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00982", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00982", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00983", + "gapId": "operator:mask.parent_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00983-operator-mask.parent_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00983.py -- tests/files/web/generated/M16-GAP-00983-operator-mask.parent_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00983", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00983", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00984", + "gapId": "operator:mask.paste_splines", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00984-operator-mask.paste_splines.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00984.py -- tests/files/web/generated/M16-GAP-00984-operator-mask.paste_splines.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00984", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00984", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00985", + "gapId": "operator:mask.primitive_circle_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00985-operator-mask.primitive_circle_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00985.py -- tests/files/web/generated/M16-GAP-00985-operator-mask.primitive_circle_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00985", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00985", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00986", + "gapId": "operator:mask.primitive_square_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00986-operator-mask.primitive_square_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00986.py -- tests/files/web/generated/M16-GAP-00986-operator-mask.primitive_square_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00986", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00986", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00987", + "gapId": "operator:mask.select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00987-operator-mask.select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00987.py -- tests/files/web/generated/M16-GAP-00987-operator-mask.select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00987", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00987", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00988", + "gapId": "operator:mask.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00988-operator-mask.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00988.py -- tests/files/web/generated/M16-GAP-00988-operator-mask.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00988", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00988", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00989", + "gapId": "operator:mask.select_box", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00989-operator-mask.select_box.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00989.py -- tests/files/web/generated/M16-GAP-00989-operator-mask.select_box.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00989", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00989", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00990", + "gapId": "operator:mask.select_circle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00990-operator-mask.select_circle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00990.py -- tests/files/web/generated/M16-GAP-00990-operator-mask.select_circle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00990", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00990", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00991", + "gapId": "operator:mask.select_lasso", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00991-operator-mask.select_lasso.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00991.py -- tests/files/web/generated/M16-GAP-00991-operator-mask.select_lasso.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00991", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00991", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00992", + "gapId": "operator:mask.select_less", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00992-operator-mask.select_less.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00992.py -- tests/files/web/generated/M16-GAP-00992-operator-mask.select_less.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00992", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00992", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00993", + "gapId": "operator:mask.select_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00993-operator-mask.select_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00993.py -- tests/files/web/generated/M16-GAP-00993-operator-mask.select_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00993", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00993", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00994", + "gapId": "operator:mask.select_linked_pick", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00994-operator-mask.select_linked_pick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00994.py -- tests/files/web/generated/M16-GAP-00994-operator-mask.select_linked_pick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00994", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00994", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00995", + "gapId": "operator:mask.select_more", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00995-operator-mask.select_more.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00995.py -- tests/files/web/generated/M16-GAP-00995-operator-mask.select_more.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00995", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00995", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00996", + "gapId": "operator:mask.shape_key_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00996-operator-mask.shape_key_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00996.py -- tests/files/web/generated/M16-GAP-00996-operator-mask.shape_key_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00996", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00996", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00997", + "gapId": "operator:mask.shape_key_feather_reset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00997-operator-mask.shape_key_feather_reset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00997.py -- tests/files/web/generated/M16-GAP-00997-operator-mask.shape_key_feather_reset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00997", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00997", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00998", + "gapId": "operator:mask.shape_key_insert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00998-operator-mask.shape_key_insert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00998.py -- tests/files/web/generated/M16-GAP-00998-operator-mask.shape_key_insert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00998", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00998", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-00999", + "gapId": "operator:mask.shape_key_rekey", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00999-operator-mask.shape_key_rekey.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00999.py -- tests/files/web/generated/M16-GAP-00999-operator-mask.shape_key_rekey.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-00999", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-00999", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01000", + "gapId": "operator:mask.slide_point", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01000-operator-mask.slide_point.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01000.py -- tests/files/web/generated/M16-GAP-01000-operator-mask.slide_point.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01000", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01000", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01001", + "gapId": "operator:mask.slide_spline_curvature", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01001-operator-mask.slide_spline_curvature.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01001.py -- tests/files/web/generated/M16-GAP-01001-operator-mask.slide_spline_curvature.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01001", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01001", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01002", + "gapId": "operator:mask.switch_direction", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01002-operator-mask.switch_direction.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01002.py -- tests/files/web/generated/M16-GAP-01002-operator-mask.switch_direction.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01002", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01002", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01003", + "gapId": "operator:material.copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01003-operator-material.copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01003.py -- tests/files/web/generated/M16-GAP-01003-operator-material.copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01003", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01003", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01004", + "gapId": "operator:material.new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01004-operator-material.new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01004.py -- tests/files/web/generated/M16-GAP-01004-operator-material.new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01004", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01004", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01005", + "gapId": "operator:material.paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01005-operator-material.paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01005.py -- tests/files/web/generated/M16-GAP-01005-operator-material.paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01005", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01005", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01006", + "gapId": "operator:mball.delete_metaelems", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01006-operator-mball.delete_metaelems.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01006.py -- tests/files/web/generated/M16-GAP-01006-operator-mball.delete_metaelems.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01006", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01006", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01007", + "gapId": "operator:mball.duplicate_metaelems", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01007-operator-mball.duplicate_metaelems.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01007.py -- tests/files/web/generated/M16-GAP-01007-operator-mball.duplicate_metaelems.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01007", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01007", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01008", + "gapId": "operator:mball.duplicate_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01008-operator-mball.duplicate_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01008.py -- tests/files/web/generated/M16-GAP-01008-operator-mball.duplicate_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01008", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01008", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01009", + "gapId": "operator:mball.hide_metaelems", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01009-operator-mball.hide_metaelems.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01009.py -- tests/files/web/generated/M16-GAP-01009-operator-mball.hide_metaelems.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01009", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01009", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01010", + "gapId": "operator:mball.reveal_metaelems", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01010-operator-mball.reveal_metaelems.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01010.py -- tests/files/web/generated/M16-GAP-01010-operator-mball.reveal_metaelems.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01010", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01010", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01011", + "gapId": "operator:mball.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01011-operator-mball.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01011.py -- tests/files/web/generated/M16-GAP-01011-operator-mball.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01011", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01011", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01012", + "gapId": "operator:mball.select_random_metaelems", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01012-operator-mball.select_random_metaelems.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01012.py -- tests/files/web/generated/M16-GAP-01012-operator-mball.select_random_metaelems.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01012", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01012", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01013", + "gapId": "operator:mball.select_similar", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01013-operator-mball.select_similar.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01013.py -- tests/files/web/generated/M16-GAP-01013-operator-mball.select_similar.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01013", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01013", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01014", + "gapId": "operator:mesh.attribute_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01014-operator-mesh.attribute_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01014.py -- tests/files/web/generated/M16-GAP-01014-operator-mesh.attribute_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01014", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01014", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01015", + "gapId": "operator:mesh.average_normals", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01015-operator-mesh.average_normals.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01015.py -- tests/files/web/generated/M16-GAP-01015-operator-mesh.average_normals.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01015", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01015", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01016", + "gapId": "operator:mesh.beautify_fill", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01016-operator-mesh.beautify_fill.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01016.py -- tests/files/web/generated/M16-GAP-01016-operator-mesh.beautify_fill.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01016", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01016", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01017", + "gapId": "operator:mesh.bevel", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01017-operator-mesh.bevel.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01017.py -- tests/files/web/generated/M16-GAP-01017-operator-mesh.bevel.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01017", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01017", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01018", + "gapId": "operator:mesh.bisect", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01018-operator-mesh.bisect.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01018.py -- tests/files/web/generated/M16-GAP-01018-operator-mesh.bisect.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01018", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01018", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01019", + "gapId": "operator:mesh.blend_from_shape", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01019-operator-mesh.blend_from_shape.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01019.py -- tests/files/web/generated/M16-GAP-01019-operator-mesh.blend_from_shape.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01019", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01019", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01020", + "gapId": "operator:mesh.bridge_edge_loops", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01020-operator-mesh.bridge_edge_loops.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01020.py -- tests/files/web/generated/M16-GAP-01020-operator-mesh.bridge_edge_loops.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01020", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01020", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01021", + "gapId": "operator:mesh.circularize", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01021-operator-mesh.circularize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01021.py -- tests/files/web/generated/M16-GAP-01021-operator-mesh.circularize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01021", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01021", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01022", + "gapId": "operator:mesh.colors_reverse", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01022-operator-mesh.colors_reverse.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01022.py -- tests/files/web/generated/M16-GAP-01022-operator-mesh.colors_reverse.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01022", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01022", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01023", + "gapId": "operator:mesh.colors_rotate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01023-operator-mesh.colors_rotate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01023.py -- tests/files/web/generated/M16-GAP-01023-operator-mesh.colors_rotate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01023", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01023", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01024", + "gapId": "operator:mesh.convex_hull", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01024-operator-mesh.convex_hull.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01024.py -- tests/files/web/generated/M16-GAP-01024-operator-mesh.convex_hull.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01024", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01024", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01025", + "gapId": "operator:mesh.customdata_custom_splitnormals_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01025-operator-mesh.customdata_custom_splitnormals_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01025.py -- tests/files/web/generated/M16-GAP-01025-operator-mesh.customdata_custom_splitnormals_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01025", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01025", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01026", + "gapId": "operator:mesh.customdata_custom_splitnormals_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01026-operator-mesh.customdata_custom_splitnormals_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01026.py -- tests/files/web/generated/M16-GAP-01026-operator-mesh.customdata_custom_splitnormals_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01026", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01026", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01027", + "gapId": "operator:mesh.customdata_face_sets_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01027-operator-mesh.customdata_face_sets_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01027.py -- tests/files/web/generated/M16-GAP-01027-operator-mesh.customdata_face_sets_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01027", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01027", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01028", + "gapId": "operator:mesh.customdata_mask_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01028-operator-mesh.customdata_mask_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01028.py -- tests/files/web/generated/M16-GAP-01028-operator-mesh.customdata_mask_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01028", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01028", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01029", + "gapId": "operator:mesh.customdata_skin_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01029-operator-mesh.customdata_skin_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01029.py -- tests/files/web/generated/M16-GAP-01029-operator-mesh.customdata_skin_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01029", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01029", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01030", + "gapId": "operator:mesh.customdata_skin_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01030-operator-mesh.customdata_skin_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01030.py -- tests/files/web/generated/M16-GAP-01030-operator-mesh.customdata_skin_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01030", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01030", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01031", + "gapId": "operator:mesh.decimate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01031-operator-mesh.decimate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01031.py -- tests/files/web/generated/M16-GAP-01031-operator-mesh.decimate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01031", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01031", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01032", + "gapId": "operator:mesh.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01032-operator-mesh.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01032.py -- tests/files/web/generated/M16-GAP-01032-operator-mesh.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01032", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01032", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01033", + "gapId": "operator:mesh.delete_edgeloop", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01033-operator-mesh.delete_edgeloop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01033.py -- tests/files/web/generated/M16-GAP-01033-operator-mesh.delete_edgeloop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01033", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01033", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01034", + "gapId": "operator:mesh.delete_loose", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01034-operator-mesh.delete_loose.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01034.py -- tests/files/web/generated/M16-GAP-01034-operator-mesh.delete_loose.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01034", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01034", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01035", + "gapId": "operator:mesh.dissolve_degenerate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01035-operator-mesh.dissolve_degenerate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01035.py -- tests/files/web/generated/M16-GAP-01035-operator-mesh.dissolve_degenerate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01035", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01035", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01036", + "gapId": "operator:mesh.dissolve_edges", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01036-operator-mesh.dissolve_edges.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01036.py -- tests/files/web/generated/M16-GAP-01036-operator-mesh.dissolve_edges.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01036", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01036", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01037", + "gapId": "operator:mesh.dissolve_faces", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01037-operator-mesh.dissolve_faces.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01037.py -- tests/files/web/generated/M16-GAP-01037-operator-mesh.dissolve_faces.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01037", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01037", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01038", + "gapId": "operator:mesh.dissolve_limited", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01038-operator-mesh.dissolve_limited.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01038.py -- tests/files/web/generated/M16-GAP-01038-operator-mesh.dissolve_limited.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01038", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01038", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01039", + "gapId": "operator:mesh.dissolve_mode", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01039-operator-mesh.dissolve_mode.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01039.py -- tests/files/web/generated/M16-GAP-01039-operator-mesh.dissolve_mode.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01039", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01039", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01040", + "gapId": "operator:mesh.dissolve_verts", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01040-operator-mesh.dissolve_verts.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01040.py -- tests/files/web/generated/M16-GAP-01040-operator-mesh.dissolve_verts.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01040", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01040", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01041", + "gapId": "operator:mesh.dupli_extrude_cursor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01041-operator-mesh.dupli_extrude_cursor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01041.py -- tests/files/web/generated/M16-GAP-01041-operator-mesh.dupli_extrude_cursor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01041", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01041", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01042", + "gapId": "operator:mesh.duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01042-operator-mesh.duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01042.py -- tests/files/web/generated/M16-GAP-01042-operator-mesh.duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01042", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01042", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01043", + "gapId": "operator:mesh.duplicate_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01043-operator-mesh.duplicate_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01043.py -- tests/files/web/generated/M16-GAP-01043-operator-mesh.duplicate_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01043", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01043", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01044", + "gapId": "operator:mesh.edge_collapse", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01044-operator-mesh.edge_collapse.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01044.py -- tests/files/web/generated/M16-GAP-01044-operator-mesh.edge_collapse.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01044", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01044", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01045", + "gapId": "operator:mesh.edge_face_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01045-operator-mesh.edge_face_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01045.py -- tests/files/web/generated/M16-GAP-01045-operator-mesh.edge_face_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01045", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01045", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01046", + "gapId": "operator:mesh.edge_rotate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01046-operator-mesh.edge_rotate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01046.py -- tests/files/web/generated/M16-GAP-01046-operator-mesh.edge_rotate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01046", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01046", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01047", + "gapId": "operator:mesh.edge_split", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01047-operator-mesh.edge_split.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01047.py -- tests/files/web/generated/M16-GAP-01047-operator-mesh.edge_split.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01047", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01047", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01048", + "gapId": "operator:mesh.edgering_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01048-operator-mesh.edgering_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01048.py -- tests/files/web/generated/M16-GAP-01048-operator-mesh.edgering_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01048", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01048", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01049", + "gapId": "operator:mesh.edges_select_sharp", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01049-operator-mesh.edges_select_sharp.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01049.py -- tests/files/web/generated/M16-GAP-01049-operator-mesh.edges_select_sharp.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01049", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01049", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01050", + "gapId": "operator:mesh.extrude_context", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01050-operator-mesh.extrude_context.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01050.py -- tests/files/web/generated/M16-GAP-01050-operator-mesh.extrude_context.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01050", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01050", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01051", + "gapId": "operator:mesh.extrude_context_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01051-operator-mesh.extrude_context_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01051.py -- tests/files/web/generated/M16-GAP-01051-operator-mesh.extrude_context_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01051", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01051", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01052", + "gapId": "operator:mesh.extrude_edges_indiv", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01052-operator-mesh.extrude_edges_indiv.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01052.py -- tests/files/web/generated/M16-GAP-01052-operator-mesh.extrude_edges_indiv.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01052", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01052", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01053", + "gapId": "operator:mesh.extrude_edges_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01053-operator-mesh.extrude_edges_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01053.py -- tests/files/web/generated/M16-GAP-01053-operator-mesh.extrude_edges_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01053", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01053", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01054", + "gapId": "operator:mesh.extrude_faces_indiv", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01054-operator-mesh.extrude_faces_indiv.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01054.py -- tests/files/web/generated/M16-GAP-01054-operator-mesh.extrude_faces_indiv.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01054", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01054", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01055", + "gapId": "operator:mesh.extrude_faces_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01055-operator-mesh.extrude_faces_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01055.py -- tests/files/web/generated/M16-GAP-01055-operator-mesh.extrude_faces_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01055", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01055", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01056", + "gapId": "operator:mesh.extrude_manifold", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01056-operator-mesh.extrude_manifold.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01056.py -- tests/files/web/generated/M16-GAP-01056-operator-mesh.extrude_manifold.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01056", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01056", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01057", + "gapId": "operator:mesh.extrude_region", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01057-operator-mesh.extrude_region.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01057.py -- tests/files/web/generated/M16-GAP-01057-operator-mesh.extrude_region.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01057", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01057", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01058", + "gapId": "operator:mesh.extrude_region_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01058-operator-mesh.extrude_region_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01058.py -- tests/files/web/generated/M16-GAP-01058-operator-mesh.extrude_region_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01058", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01058", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01059", + "gapId": "operator:mesh.extrude_region_shrink_fatten", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01059-operator-mesh.extrude_region_shrink_fatten.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01059.py -- tests/files/web/generated/M16-GAP-01059-operator-mesh.extrude_region_shrink_fatten.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01059", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01059", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01060", + "gapId": "operator:mesh.extrude_repeat", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01060-operator-mesh.extrude_repeat.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01060.py -- tests/files/web/generated/M16-GAP-01060-operator-mesh.extrude_repeat.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01060", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01060", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01061", + "gapId": "operator:mesh.extrude_vertices_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01061-operator-mesh.extrude_vertices_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01061.py -- tests/files/web/generated/M16-GAP-01061-operator-mesh.extrude_vertices_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01061", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01061", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01062", + "gapId": "operator:mesh.extrude_verts_indiv", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01062-operator-mesh.extrude_verts_indiv.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01062.py -- tests/files/web/generated/M16-GAP-01062-operator-mesh.extrude_verts_indiv.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01062", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01062", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01063", + "gapId": "operator:mesh.face_make_planar", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01063-operator-mesh.face_make_planar.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01063.py -- tests/files/web/generated/M16-GAP-01063-operator-mesh.face_make_planar.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01063", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01063", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01064", + "gapId": "operator:mesh.face_split_by_edges", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01064-operator-mesh.face_split_by_edges.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01064.py -- tests/files/web/generated/M16-GAP-01064-operator-mesh.face_split_by_edges.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01064", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01064", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01065", + "gapId": "operator:mesh.faces_select_linked_flat", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01065-operator-mesh.faces_select_linked_flat.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01065.py -- tests/files/web/generated/M16-GAP-01065-operator-mesh.faces_select_linked_flat.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01065", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01065", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01066", + "gapId": "operator:mesh.faces_shade_flat", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01066-operator-mesh.faces_shade_flat.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01066.py -- tests/files/web/generated/M16-GAP-01066-operator-mesh.faces_shade_flat.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01066", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01066", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01067", + "gapId": "operator:mesh.faces_shade_smooth", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01067-operator-mesh.faces_shade_smooth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01067.py -- tests/files/web/generated/M16-GAP-01067-operator-mesh.faces_shade_smooth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01067", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01067", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01068", + "gapId": "operator:mesh.fill", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01068-operator-mesh.fill.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01068.py -- tests/files/web/generated/M16-GAP-01068-operator-mesh.fill.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01068", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01068", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01069", + "gapId": "operator:mesh.fill_grid", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01069-operator-mesh.fill_grid.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01069.py -- tests/files/web/generated/M16-GAP-01069-operator-mesh.fill_grid.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01069", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01069", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01070", + "gapId": "operator:mesh.fill_holes", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01070-operator-mesh.fill_holes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01070.py -- tests/files/web/generated/M16-GAP-01070-operator-mesh.fill_holes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01070", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01070", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01071", + "gapId": "operator:mesh.flatten", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01071-operator-mesh.flatten.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01071.py -- tests/files/web/generated/M16-GAP-01071-operator-mesh.flatten.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01071", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01071", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01072", + "gapId": "operator:mesh.flip_normals", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01072-operator-mesh.flip_normals.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01072.py -- tests/files/web/generated/M16-GAP-01072-operator-mesh.flip_normals.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01072", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01072", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01073", + "gapId": "operator:mesh.flip_quad_tessellation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01073-operator-mesh.flip_quad_tessellation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01073.py -- tests/files/web/generated/M16-GAP-01073-operator-mesh.flip_quad_tessellation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01073", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01073", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01074", + "gapId": "operator:mesh.hide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01074-operator-mesh.hide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01074.py -- tests/files/web/generated/M16-GAP-01074-operator-mesh.hide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01074", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01074", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01075", + "gapId": "operator:mesh.inset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01075-operator-mesh.inset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01075.py -- tests/files/web/generated/M16-GAP-01075-operator-mesh.inset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01075", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01075", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01076", + "gapId": "operator:mesh.intersect", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01076-operator-mesh.intersect.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01076.py -- tests/files/web/generated/M16-GAP-01076-operator-mesh.intersect.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01076", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01076", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01077", + "gapId": "operator:mesh.intersect_boolean", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01077-operator-mesh.intersect_boolean.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01077.py -- tests/files/web/generated/M16-GAP-01077-operator-mesh.intersect_boolean.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01077", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01077", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01078", + "gapId": "operator:mesh.knife_project", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01078-operator-mesh.knife_project.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01078.py -- tests/files/web/generated/M16-GAP-01078-operator-mesh.knife_project.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01078", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01078", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01079", + "gapId": "operator:mesh.knife_tool", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01079-operator-mesh.knife_tool.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01079.py -- tests/files/web/generated/M16-GAP-01079-operator-mesh.knife_tool.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01079", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01079", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01080", + "gapId": "operator:mesh.loop_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01080-operator-mesh.loop_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01080.py -- tests/files/web/generated/M16-GAP-01080-operator-mesh.loop_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01080", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01080", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01081", + "gapId": "operator:mesh.loop_to_region", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01081-operator-mesh.loop_to_region.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01081.py -- tests/files/web/generated/M16-GAP-01081-operator-mesh.loop_to_region.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01081", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01081", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01082", + "gapId": "operator:mesh.loopcut", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01082-operator-mesh.loopcut.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01082.py -- tests/files/web/generated/M16-GAP-01082-operator-mesh.loopcut.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01082", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01082", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01083", + "gapId": "operator:mesh.loopcut_slide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01083-operator-mesh.loopcut_slide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01083.py -- tests/files/web/generated/M16-GAP-01083-operator-mesh.loopcut_slide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01083", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01083", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01084", + "gapId": "operator:mesh.mark_freestyle_edge", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01084-operator-mesh.mark_freestyle_edge.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01084.py -- tests/files/web/generated/M16-GAP-01084-operator-mesh.mark_freestyle_edge.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01084", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01084", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01085", + "gapId": "operator:mesh.mark_freestyle_face", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01085-operator-mesh.mark_freestyle_face.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01085.py -- tests/files/web/generated/M16-GAP-01085-operator-mesh.mark_freestyle_face.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01085", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01085", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01086", + "gapId": "operator:mesh.mark_seam", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01086-operator-mesh.mark_seam.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01086.py -- tests/files/web/generated/M16-GAP-01086-operator-mesh.mark_seam.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01086", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01086", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01087", + "gapId": "operator:mesh.mark_sharp", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01087-operator-mesh.mark_sharp.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01087.py -- tests/files/web/generated/M16-GAP-01087-operator-mesh.mark_sharp.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01087", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01087", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01088", + "gapId": "operator:mesh.merge", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01088-operator-mesh.merge.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01088.py -- tests/files/web/generated/M16-GAP-01088-operator-mesh.merge.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01088", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01088", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01089", + "gapId": "operator:mesh.merge_normals", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01089-operator-mesh.merge_normals.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01089.py -- tests/files/web/generated/M16-GAP-01089-operator-mesh.merge_normals.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01089", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01089", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01090", + "gapId": "operator:mesh.mod_weighted_strength", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01090-operator-mesh.mod_weighted_strength.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01090.py -- tests/files/web/generated/M16-GAP-01090-operator-mesh.mod_weighted_strength.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01090", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01090", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01091", + "gapId": "operator:mesh.normals_make_consistent", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01091-operator-mesh.normals_make_consistent.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01091.py -- tests/files/web/generated/M16-GAP-01091-operator-mesh.normals_make_consistent.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01091", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01091", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01092", + "gapId": "operator:mesh.normals_tools", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01092-operator-mesh.normals_tools.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01092.py -- tests/files/web/generated/M16-GAP-01092-operator-mesh.normals_tools.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01092", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01092", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01093", + "gapId": "operator:mesh.offset_edge_loops", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01093-operator-mesh.offset_edge_loops.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01093.py -- tests/files/web/generated/M16-GAP-01093-operator-mesh.offset_edge_loops.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01093", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01093", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01094", + "gapId": "operator:mesh.offset_edge_loops_slide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01094-operator-mesh.offset_edge_loops_slide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01094.py -- tests/files/web/generated/M16-GAP-01094-operator-mesh.offset_edge_loops_slide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01094", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01094", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01095", + "gapId": "operator:mesh.point_normals", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01095-operator-mesh.point_normals.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01095.py -- tests/files/web/generated/M16-GAP-01095-operator-mesh.point_normals.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01095", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01095", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01096", + "gapId": "operator:mesh.poke", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01096-operator-mesh.poke.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01096.py -- tests/files/web/generated/M16-GAP-01096-operator-mesh.poke.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01096", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01096", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01097", + "gapId": "operator:mesh.polybuild_delete_at_cursor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01097-operator-mesh.polybuild_delete_at_cursor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01097.py -- tests/files/web/generated/M16-GAP-01097-operator-mesh.polybuild_delete_at_cursor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01097", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01097", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01098", + "gapId": "operator:mesh.polybuild_dissolve_at_cursor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01098-operator-mesh.polybuild_dissolve_at_cursor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01098.py -- tests/files/web/generated/M16-GAP-01098-operator-mesh.polybuild_dissolve_at_cursor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01098", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01098", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01099", + "gapId": "operator:mesh.polybuild_extrude_at_cursor_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01099-operator-mesh.polybuild_extrude_at_cursor_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01099.py -- tests/files/web/generated/M16-GAP-01099-operator-mesh.polybuild_extrude_at_cursor_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01099", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01099", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01100", + "gapId": "operator:mesh.polybuild_face_at_cursor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01100-operator-mesh.polybuild_face_at_cursor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01100.py -- tests/files/web/generated/M16-GAP-01100-operator-mesh.polybuild_face_at_cursor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01100", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01100", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01101", + "gapId": "operator:mesh.polybuild_face_at_cursor_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01101-operator-mesh.polybuild_face_at_cursor_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01101.py -- tests/files/web/generated/M16-GAP-01101-operator-mesh.polybuild_face_at_cursor_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01101", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01101", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01102", + "gapId": "operator:mesh.polybuild_split_at_cursor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01102-operator-mesh.polybuild_split_at_cursor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01102.py -- tests/files/web/generated/M16-GAP-01102-operator-mesh.polybuild_split_at_cursor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01102", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01102", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01103", + "gapId": "operator:mesh.polybuild_split_at_cursor_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01103-operator-mesh.polybuild_split_at_cursor_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01103.py -- tests/files/web/generated/M16-GAP-01103-operator-mesh.polybuild_split_at_cursor_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01103", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01103", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01104", + "gapId": "operator:mesh.polybuild_transform_at_cursor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01104-operator-mesh.polybuild_transform_at_cursor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01104.py -- tests/files/web/generated/M16-GAP-01104-operator-mesh.polybuild_transform_at_cursor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01104", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01104", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01105", + "gapId": "operator:mesh.polybuild_transform_at_cursor_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01105-operator-mesh.polybuild_transform_at_cursor_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01105.py -- tests/files/web/generated/M16-GAP-01105-operator-mesh.polybuild_transform_at_cursor_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01105", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01105", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01106", + "gapId": "operator:mesh.primitive_circle_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01106-operator-mesh.primitive_circle_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01106.py -- tests/files/web/generated/M16-GAP-01106-operator-mesh.primitive_circle_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01106", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01106", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01107", + "gapId": "operator:mesh.primitive_cone_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01107-operator-mesh.primitive_cone_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01107.py -- tests/files/web/generated/M16-GAP-01107-operator-mesh.primitive_cone_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01107", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01107", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01108", + "gapId": "operator:mesh.primitive_cube_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01108-operator-mesh.primitive_cube_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01108.py -- tests/files/web/generated/M16-GAP-01108-operator-mesh.primitive_cube_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01108", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01108", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01109", + "gapId": "operator:mesh.primitive_cube_add_gizmo", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01109-operator-mesh.primitive_cube_add_gizmo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01109.py -- tests/files/web/generated/M16-GAP-01109-operator-mesh.primitive_cube_add_gizmo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01109", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01109", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01110", + "gapId": "operator:mesh.primitive_cylinder_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01110-operator-mesh.primitive_cylinder_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01110.py -- tests/files/web/generated/M16-GAP-01110-operator-mesh.primitive_cylinder_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01110", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01110", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01111", + "gapId": "operator:mesh.primitive_grid_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01111-operator-mesh.primitive_grid_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01111.py -- tests/files/web/generated/M16-GAP-01111-operator-mesh.primitive_grid_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01111", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01111", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01112", + "gapId": "operator:mesh.primitive_ico_sphere_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01112-operator-mesh.primitive_ico_sphere_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01112.py -- tests/files/web/generated/M16-GAP-01112-operator-mesh.primitive_ico_sphere_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01112", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01112", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01113", + "gapId": "operator:mesh.primitive_monkey_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01113-operator-mesh.primitive_monkey_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01113.py -- tests/files/web/generated/M16-GAP-01113-operator-mesh.primitive_monkey_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01113", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01113", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01114", + "gapId": "operator:mesh.primitive_plane_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01114-operator-mesh.primitive_plane_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01114.py -- tests/files/web/generated/M16-GAP-01114-operator-mesh.primitive_plane_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01114", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01114", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01115", + "gapId": "operator:mesh.primitive_torus_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01115-operator-mesh.primitive_torus_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01115.py -- tests/files/web/generated/M16-GAP-01115-operator-mesh.primitive_torus_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01115", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01115", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01116", + "gapId": "operator:mesh.primitive_uv_sphere_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01116-operator-mesh.primitive_uv_sphere_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01116.py -- tests/files/web/generated/M16-GAP-01116-operator-mesh.primitive_uv_sphere_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01116", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01116", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01117", + "gapId": "operator:mesh.quads_convert_to_tris", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01117-operator-mesh.quads_convert_to_tris.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01117.py -- tests/files/web/generated/M16-GAP-01117-operator-mesh.quads_convert_to_tris.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01117", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01117", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01118", + "gapId": "operator:mesh.region_to_loop", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01118-operator-mesh.region_to_loop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01118.py -- tests/files/web/generated/M16-GAP-01118-operator-mesh.region_to_loop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01118", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01118", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01119", + "gapId": "operator:mesh.remove_doubles", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01119-operator-mesh.remove_doubles.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01119.py -- tests/files/web/generated/M16-GAP-01119-operator-mesh.remove_doubles.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01119", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01119", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01120", + "gapId": "operator:mesh.reorder_vertices_spatial", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01120-operator-mesh.reorder_vertices_spatial.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01120.py -- tests/files/web/generated/M16-GAP-01120-operator-mesh.reorder_vertices_spatial.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01120", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01120", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01121", + "gapId": "operator:mesh.reveal", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01121-operator-mesh.reveal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01121.py -- tests/files/web/generated/M16-GAP-01121-operator-mesh.reveal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01121", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01121", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01122", + "gapId": "operator:mesh.rip", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01122-operator-mesh.rip.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01122.py -- tests/files/web/generated/M16-GAP-01122-operator-mesh.rip.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01122", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01122", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01123", + "gapId": "operator:mesh.rip_edge", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01123-operator-mesh.rip_edge.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01123.py -- tests/files/web/generated/M16-GAP-01123-operator-mesh.rip_edge.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01123", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01123", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01124", + "gapId": "operator:mesh.rip_edge_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01124-operator-mesh.rip_edge_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01124.py -- tests/files/web/generated/M16-GAP-01124-operator-mesh.rip_edge_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01124", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01124", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01125", + "gapId": "operator:mesh.rip_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01125-operator-mesh.rip_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01125.py -- tests/files/web/generated/M16-GAP-01125-operator-mesh.rip_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01125", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01125", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01126", + "gapId": "operator:mesh.screw", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01126-operator-mesh.screw.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01126.py -- tests/files/web/generated/M16-GAP-01126-operator-mesh.screw.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01126", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01126", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01127", + "gapId": "operator:mesh.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01127-operator-mesh.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01127.py -- tests/files/web/generated/M16-GAP-01127-operator-mesh.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01127", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01127", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01128", + "gapId": "operator:mesh.select_axis", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01128-operator-mesh.select_axis.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01128.py -- tests/files/web/generated/M16-GAP-01128-operator-mesh.select_axis.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01128", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01128", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01129", + "gapId": "operator:mesh.select_boundary_loop_multi", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01129-operator-mesh.select_boundary_loop_multi.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01129.py -- tests/files/web/generated/M16-GAP-01129-operator-mesh.select_boundary_loop_multi.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01129", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01129", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01130", + "gapId": "operator:mesh.select_by_attribute", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01130-operator-mesh.select_by_attribute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01130.py -- tests/files/web/generated/M16-GAP-01130-operator-mesh.select_by_attribute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01130", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01130", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01131", + "gapId": "operator:mesh.select_by_pole_count", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01131-operator-mesh.select_by_pole_count.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01131.py -- tests/files/web/generated/M16-GAP-01131-operator-mesh.select_by_pole_count.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01131", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01131", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01132", + "gapId": "operator:mesh.select_edge_loop_multi", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01132-operator-mesh.select_edge_loop_multi.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01132.py -- tests/files/web/generated/M16-GAP-01132-operator-mesh.select_edge_loop_multi.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01132", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01132", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01133", + "gapId": "operator:mesh.select_edge_ring_multi", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01133-operator-mesh.select_edge_ring_multi.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01133.py -- tests/files/web/generated/M16-GAP-01133-operator-mesh.select_edge_ring_multi.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01133", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01133", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01134", + "gapId": "operator:mesh.select_face_by_sides", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01134-operator-mesh.select_face_by_sides.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01134.py -- tests/files/web/generated/M16-GAP-01134-operator-mesh.select_face_by_sides.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01134", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01134", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01135", + "gapId": "operator:mesh.select_interior_faces", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01135-operator-mesh.select_interior_faces.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01135.py -- tests/files/web/generated/M16-GAP-01135-operator-mesh.select_interior_faces.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01135", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01135", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01136", + "gapId": "operator:mesh.select_less", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01136-operator-mesh.select_less.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01136.py -- tests/files/web/generated/M16-GAP-01136-operator-mesh.select_less.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01136", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01136", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01137", + "gapId": "operator:mesh.select_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01137-operator-mesh.select_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01137.py -- tests/files/web/generated/M16-GAP-01137-operator-mesh.select_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01137", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01137", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01138", + "gapId": "operator:mesh.select_linked_pick", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01138-operator-mesh.select_linked_pick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01138.py -- tests/files/web/generated/M16-GAP-01138-operator-mesh.select_linked_pick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01138", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01138", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01139", + "gapId": "operator:mesh.select_loose", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01139-operator-mesh.select_loose.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01139.py -- tests/files/web/generated/M16-GAP-01139-operator-mesh.select_loose.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01139", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01139", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01140", + "gapId": "operator:mesh.select_mirror", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01140-operator-mesh.select_mirror.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01140.py -- tests/files/web/generated/M16-GAP-01140-operator-mesh.select_mirror.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01140", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01140", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01141", + "gapId": "operator:mesh.select_mode", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01141-operator-mesh.select_mode.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01141.py -- tests/files/web/generated/M16-GAP-01141-operator-mesh.select_mode.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01141", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01141", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01142", + "gapId": "operator:mesh.select_more", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01142-operator-mesh.select_more.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01142.py -- tests/files/web/generated/M16-GAP-01142-operator-mesh.select_more.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01142", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01142", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01143", + "gapId": "operator:mesh.select_next_item", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01143-operator-mesh.select_next_item.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01143.py -- tests/files/web/generated/M16-GAP-01143-operator-mesh.select_next_item.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01143", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01143", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01144", + "gapId": "operator:mesh.select_non_manifold", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01144-operator-mesh.select_non_manifold.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01144.py -- tests/files/web/generated/M16-GAP-01144-operator-mesh.select_non_manifold.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01144", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01144", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01145", + "gapId": "operator:mesh.select_nth", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01145-operator-mesh.select_nth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01145.py -- tests/files/web/generated/M16-GAP-01145-operator-mesh.select_nth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01145", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01145", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01146", + "gapId": "operator:mesh.select_prev_item", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01146-operator-mesh.select_prev_item.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01146.py -- tests/files/web/generated/M16-GAP-01146-operator-mesh.select_prev_item.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01146", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01146", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01147", + "gapId": "operator:mesh.select_random", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01147-operator-mesh.select_random.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01147.py -- tests/files/web/generated/M16-GAP-01147-operator-mesh.select_random.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01147", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01147", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01148", + "gapId": "operator:mesh.select_similar", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01148-operator-mesh.select_similar.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01148.py -- tests/files/web/generated/M16-GAP-01148-operator-mesh.select_similar.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01148", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01148", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01149", + "gapId": "operator:mesh.select_similar_region", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01149-operator-mesh.select_similar_region.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01149.py -- tests/files/web/generated/M16-GAP-01149-operator-mesh.select_similar_region.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01149", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01149", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01150", + "gapId": "operator:mesh.select_ungrouped", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01150-operator-mesh.select_ungrouped.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01150.py -- tests/files/web/generated/M16-GAP-01150-operator-mesh.select_ungrouped.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01150", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01150", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01151", + "gapId": "operator:mesh.separate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01151-operator-mesh.separate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01151.py -- tests/files/web/generated/M16-GAP-01151-operator-mesh.separate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01151", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01151", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01152", + "gapId": "operator:mesh.set_normals_from_faces", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01152-operator-mesh.set_normals_from_faces.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01152.py -- tests/files/web/generated/M16-GAP-01152-operator-mesh.set_normals_from_faces.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01152", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01152", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01153", + "gapId": "operator:mesh.set_sharpness_by_angle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01153-operator-mesh.set_sharpness_by_angle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01153.py -- tests/files/web/generated/M16-GAP-01153-operator-mesh.set_sharpness_by_angle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01153", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01153", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01154", + "gapId": "operator:mesh.shape_propagate_to_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01154-operator-mesh.shape_propagate_to_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01154.py -- tests/files/web/generated/M16-GAP-01154-operator-mesh.shape_propagate_to_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01154", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01154", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01155", + "gapId": "operator:mesh.shortest_path_pick", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01155-operator-mesh.shortest_path_pick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01155.py -- tests/files/web/generated/M16-GAP-01155-operator-mesh.shortest_path_pick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01155", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01155", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01156", + "gapId": "operator:mesh.shortest_path_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01156-operator-mesh.shortest_path_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01156.py -- tests/files/web/generated/M16-GAP-01156-operator-mesh.shortest_path_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01156", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01156", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01157", + "gapId": "operator:mesh.smooth_normals", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01157-operator-mesh.smooth_normals.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01157.py -- tests/files/web/generated/M16-GAP-01157-operator-mesh.smooth_normals.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01157", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01157", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01158", + "gapId": "operator:mesh.solidify", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01158-operator-mesh.solidify.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01158.py -- tests/files/web/generated/M16-GAP-01158-operator-mesh.solidify.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01158", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01158", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01159", + "gapId": "operator:mesh.sort_elements", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01159-operator-mesh.sort_elements.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01159.py -- tests/files/web/generated/M16-GAP-01159-operator-mesh.sort_elements.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01159", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01159", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01160", + "gapId": "operator:mesh.space_edge_loops_evenly", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01160-operator-mesh.space_edge_loops_evenly.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01160.py -- tests/files/web/generated/M16-GAP-01160-operator-mesh.space_edge_loops_evenly.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01160", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01160", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01161", + "gapId": "operator:mesh.spin", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01161-operator-mesh.spin.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01161.py -- tests/files/web/generated/M16-GAP-01161-operator-mesh.spin.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01161", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01161", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01162", + "gapId": "operator:mesh.split", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01162-operator-mesh.split.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01162.py -- tests/files/web/generated/M16-GAP-01162-operator-mesh.split.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01162", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01162", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01163", + "gapId": "operator:mesh.split_normals", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01163-operator-mesh.split_normals.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01163.py -- tests/files/web/generated/M16-GAP-01163-operator-mesh.split_normals.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01163", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01163", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01164", + "gapId": "operator:mesh.subdivide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01164-operator-mesh.subdivide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01164.py -- tests/files/web/generated/M16-GAP-01164-operator-mesh.subdivide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01164", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01164", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01165", + "gapId": "operator:mesh.subdivide_edgering", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01165-operator-mesh.subdivide_edgering.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01165.py -- tests/files/web/generated/M16-GAP-01165-operator-mesh.subdivide_edgering.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01165", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01165", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01166", + "gapId": "operator:mesh.symmetrize", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01166-operator-mesh.symmetrize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01166.py -- tests/files/web/generated/M16-GAP-01166-operator-mesh.symmetrize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01166", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01166", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01167", + "gapId": "operator:mesh.symmetry_snap", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01167-operator-mesh.symmetry_snap.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01167.py -- tests/files/web/generated/M16-GAP-01167-operator-mesh.symmetry_snap.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01167", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01167", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01168", + "gapId": "operator:mesh.tris_convert_to_quads", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01168-operator-mesh.tris_convert_to_quads.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01168.py -- tests/files/web/generated/M16-GAP-01168-operator-mesh.tris_convert_to_quads.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01168", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01168", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01169", + "gapId": "operator:mesh.unsubdivide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01169-operator-mesh.unsubdivide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01169.py -- tests/files/web/generated/M16-GAP-01169-operator-mesh.unsubdivide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01169", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01169", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01170", + "gapId": "operator:mesh.uv_texture_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01170-operator-mesh.uv_texture_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01170.py -- tests/files/web/generated/M16-GAP-01170-operator-mesh.uv_texture_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01170", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01170", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01171", + "gapId": "operator:mesh.uv_texture_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01171-operator-mesh.uv_texture_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01171.py -- tests/files/web/generated/M16-GAP-01171-operator-mesh.uv_texture_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01171", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01171", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01172", + "gapId": "operator:mesh.uvs_reverse", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01172-operator-mesh.uvs_reverse.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01172.py -- tests/files/web/generated/M16-GAP-01172-operator-mesh.uvs_reverse.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01172", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01172", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01173", + "gapId": "operator:mesh.uvs_rotate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01173-operator-mesh.uvs_rotate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01173.py -- tests/files/web/generated/M16-GAP-01173-operator-mesh.uvs_rotate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01173", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01173", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01174", + "gapId": "operator:mesh.vert_connect", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01174-operator-mesh.vert_connect.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01174.py -- tests/files/web/generated/M16-GAP-01174-operator-mesh.vert_connect.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01174", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01174", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01175", + "gapId": "operator:mesh.vert_connect_concave", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01175-operator-mesh.vert_connect_concave.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01175.py -- tests/files/web/generated/M16-GAP-01175-operator-mesh.vert_connect_concave.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01175", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01175", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01176", + "gapId": "operator:mesh.vert_connect_nonplanar", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01176-operator-mesh.vert_connect_nonplanar.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01176.py -- tests/files/web/generated/M16-GAP-01176-operator-mesh.vert_connect_nonplanar.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01176", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01176", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01177", + "gapId": "operator:mesh.vert_connect_path", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01177-operator-mesh.vert_connect_path.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01177.py -- tests/files/web/generated/M16-GAP-01177-operator-mesh.vert_connect_path.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01177", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01177", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01178", + "gapId": "operator:mesh.vertices_smooth", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01178-operator-mesh.vertices_smooth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01178.py -- tests/files/web/generated/M16-GAP-01178-operator-mesh.vertices_smooth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01178", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01178", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01179", + "gapId": "operator:mesh.vertices_smooth_laplacian", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01179-operator-mesh.vertices_smooth_laplacian.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01179.py -- tests/files/web/generated/M16-GAP-01179-operator-mesh.vertices_smooth_laplacian.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01179", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01179", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01180", + "gapId": "operator:mesh.wireframe", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01180-operator-mesh.wireframe.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01180.py -- tests/files/web/generated/M16-GAP-01180-operator-mesh.wireframe.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01180", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01180", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01181", + "gapId": "operator:nla.action_pushdown", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01181-operator-nla.action_pushdown.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01181.py -- tests/files/web/generated/M16-GAP-01181-operator-nla.action_pushdown.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01181", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01181", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01182", + "gapId": "operator:nla.action_sync_length", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01182-operator-nla.action_sync_length.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01182.py -- tests/files/web/generated/M16-GAP-01182-operator-nla.action_sync_length.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01182", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01182", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01183", + "gapId": "operator:nla.action_unlink", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01183-operator-nla.action_unlink.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01183.py -- tests/files/web/generated/M16-GAP-01183-operator-nla.action_unlink.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01183", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01183", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01184", + "gapId": "operator:nla.actionclip_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01184-operator-nla.actionclip_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01184.py -- tests/files/web/generated/M16-GAP-01184-operator-nla.actionclip_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01184", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01184", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01185", + "gapId": "operator:nla.apply_scale", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01185-operator-nla.apply_scale.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01185.py -- tests/files/web/generated/M16-GAP-01185-operator-nla.apply_scale.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01185", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01185", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01186", + "gapId": "operator:nla.bake", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01186-operator-nla.bake.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01186.py -- tests/files/web/generated/M16-GAP-01186-operator-nla.bake.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01186", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01186", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01187", + "gapId": "operator:nla.channels_click", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01187-operator-nla.channels_click.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01187.py -- tests/files/web/generated/M16-GAP-01187-operator-nla.channels_click.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01187", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01187", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01188", + "gapId": "operator:nla.clear_scale", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01188-operator-nla.clear_scale.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01188.py -- tests/files/web/generated/M16-GAP-01188-operator-nla.clear_scale.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01188", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01188", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01189", + "gapId": "operator:nla.click_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01189-operator-nla.click_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01189.py -- tests/files/web/generated/M16-GAP-01189-operator-nla.click_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01189", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01189", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01190", + "gapId": "operator:nla.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01190-operator-nla.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01190.py -- tests/files/web/generated/M16-GAP-01190-operator-nla.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01190", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01190", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01191", + "gapId": "operator:nla.duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01191-operator-nla.duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01191.py -- tests/files/web/generated/M16-GAP-01191-operator-nla.duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01191", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01191", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01192", + "gapId": "operator:nla.duplicate_linked_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01192-operator-nla.duplicate_linked_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01192.py -- tests/files/web/generated/M16-GAP-01192-operator-nla.duplicate_linked_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01192", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01192", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01193", + "gapId": "operator:nla.duplicate_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01193-operator-nla.duplicate_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01193.py -- tests/files/web/generated/M16-GAP-01193-operator-nla.duplicate_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01193", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01193", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01194", + "gapId": "operator:nla.fmodifier_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01194-operator-nla.fmodifier_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01194.py -- tests/files/web/generated/M16-GAP-01194-operator-nla.fmodifier_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01194", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01194", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01195", + "gapId": "operator:nla.fmodifier_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01195-operator-nla.fmodifier_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01195.py -- tests/files/web/generated/M16-GAP-01195-operator-nla.fmodifier_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01195", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01195", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01196", + "gapId": "operator:nla.fmodifier_paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01196-operator-nla.fmodifier_paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01196.py -- tests/files/web/generated/M16-GAP-01196-operator-nla.fmodifier_paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01196", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01196", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01197", + "gapId": "operator:nla.make_single_user", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01197-operator-nla.make_single_user.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01197.py -- tests/files/web/generated/M16-GAP-01197-operator-nla.make_single_user.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01197", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01197", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01198", + "gapId": "operator:nla.meta_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01198-operator-nla.meta_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01198.py -- tests/files/web/generated/M16-GAP-01198-operator-nla.meta_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01198", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01198", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01199", + "gapId": "operator:nla.meta_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01199-operator-nla.meta_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01199.py -- tests/files/web/generated/M16-GAP-01199-operator-nla.meta_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01199", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01199", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01200", + "gapId": "operator:nla.move_down", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01200-operator-nla.move_down.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01200.py -- tests/files/web/generated/M16-GAP-01200-operator-nla.move_down.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01200", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01200", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01201", + "gapId": "operator:nla.move_up", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01201-operator-nla.move_up.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01201.py -- tests/files/web/generated/M16-GAP-01201-operator-nla.move_up.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01201", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01201", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01202", + "gapId": "operator:nla.mute_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01202-operator-nla.mute_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01202.py -- tests/files/web/generated/M16-GAP-01202-operator-nla.mute_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01202", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01202", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01203", + "gapId": "operator:nla.previewrange_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01203-operator-nla.previewrange_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01203.py -- tests/files/web/generated/M16-GAP-01203-operator-nla.previewrange_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01203", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01203", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01204", + "gapId": "operator:nla.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01204-operator-nla.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01204.py -- tests/files/web/generated/M16-GAP-01204-operator-nla.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01204", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01204", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01205", + "gapId": "operator:nla.select_box", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01205-operator-nla.select_box.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01205.py -- tests/files/web/generated/M16-GAP-01205-operator-nla.select_box.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01205", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01205", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01206", + "gapId": "operator:nla.select_leftright", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01206-operator-nla.select_leftright.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01206.py -- tests/files/web/generated/M16-GAP-01206-operator-nla.select_leftright.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01206", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01206", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01207", + "gapId": "operator:nla.selected_objects_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01207-operator-nla.selected_objects_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01207.py -- tests/files/web/generated/M16-GAP-01207-operator-nla.selected_objects_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01207", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01207", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01208", + "gapId": "operator:nla.snap", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01208-operator-nla.snap.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01208.py -- tests/files/web/generated/M16-GAP-01208-operator-nla.snap.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01208", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01208", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01209", + "gapId": "operator:nla.soundclip_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01209-operator-nla.soundclip_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01209.py -- tests/files/web/generated/M16-GAP-01209-operator-nla.soundclip_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01209", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01209", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01210", + "gapId": "operator:nla.split", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01210-operator-nla.split.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01210.py -- tests/files/web/generated/M16-GAP-01210-operator-nla.split.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01210", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01210", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01211", + "gapId": "operator:nla.swap", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01211-operator-nla.swap.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01211.py -- tests/files/web/generated/M16-GAP-01211-operator-nla.swap.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01211", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01211", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01212", + "gapId": "operator:nla.tracks_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01212-operator-nla.tracks_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01212.py -- tests/files/web/generated/M16-GAP-01212-operator-nla.tracks_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01212", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01212", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01213", + "gapId": "operator:nla.tracks_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01213-operator-nla.tracks_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01213.py -- tests/files/web/generated/M16-GAP-01213-operator-nla.tracks_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01213", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01213", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01214", + "gapId": "operator:nla.transition_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01214-operator-nla.transition_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01214.py -- tests/files/web/generated/M16-GAP-01214-operator-nla.transition_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01214", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01214", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01215", + "gapId": "operator:nla.tweakmode_enter", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01215-operator-nla.tweakmode_enter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01215.py -- tests/files/web/generated/M16-GAP-01215-operator-nla.tweakmode_enter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01215", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01215", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01216", + "gapId": "operator:nla.tweakmode_exit", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01216-operator-nla.tweakmode_exit.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01216.py -- tests/files/web/generated/M16-GAP-01216-operator-nla.tweakmode_exit.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01216", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01216", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01217", + "gapId": "operator:nla.view_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01217-operator-nla.view_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01217.py -- tests/files/web/generated/M16-GAP-01217-operator-nla.view_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01217", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01217", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01218", + "gapId": "operator:nla.view_frame", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01218-operator-nla.view_frame.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01218.py -- tests/files/web/generated/M16-GAP-01218-operator-nla.view_frame.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01218", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01218", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01219", + "gapId": "operator:nla.view_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01219-operator-nla.view_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01219.py -- tests/files/web/generated/M16-GAP-01219-operator-nla.view_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01219", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01219", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01220", + "gapId": "operator:node.activate_viewer", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01220-operator-node.activate_viewer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01220.py -- tests/files/web/generated/M16-GAP-01220-operator-node.activate_viewer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01220", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01220", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01221", + "gapId": "operator:node.add_closure_zone", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01221-operator-node.add_closure_zone.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01221.py -- tests/files/web/generated/M16-GAP-01221-operator-node.add_closure_zone.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01221", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01221", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01222", + "gapId": "operator:node.add_collection", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01222-operator-node.add_collection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01222.py -- tests/files/web/generated/M16-GAP-01222-operator-node.add_collection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01222", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01222", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01223", + "gapId": "operator:node.add_color", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01223-operator-node.add_color.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01223.py -- tests/files/web/generated/M16-GAP-01223-operator-node.add_color.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01223", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01223", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01224", + "gapId": "operator:node.add_empty_group", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01224-operator-node.add_empty_group.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01224.py -- tests/files/web/generated/M16-GAP-01224-operator-node.add_empty_group.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01224", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01224", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01225", + "gapId": "operator:node.add_foreach_geometry_element_zone", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01225-operator-node.add_foreach_geometry_element_zone.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01225.py -- tests/files/web/generated/M16-GAP-01225-operator-node.add_foreach_geometry_element_zone.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01225", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01225", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01226", + "gapId": "operator:node.add_group", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01226-operator-node.add_group.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01226.py -- tests/files/web/generated/M16-GAP-01226-operator-node.add_group.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01226", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01226", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01227", + "gapId": "operator:node.add_group_asset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01227-operator-node.add_group_asset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01227.py -- tests/files/web/generated/M16-GAP-01227-operator-node.add_group_asset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01227", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01227", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01228", + "gapId": "operator:node.add_group_input_node", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01228-operator-node.add_group_input_node.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01228.py -- tests/files/web/generated/M16-GAP-01228-operator-node.add_group_input_node.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01228", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01228", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01229", + "gapId": "operator:node.add_image", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01229-operator-node.add_image.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01229.py -- tests/files/web/generated/M16-GAP-01229-operator-node.add_image.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01229", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01229", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01230", + "gapId": "operator:node.add_import_node", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01230-operator-node.add_import_node.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01230.py -- tests/files/web/generated/M16-GAP-01230-operator-node.add_import_node.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01230", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01230", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01231", + "gapId": "operator:node.add_mask", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01231-operator-node.add_mask.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01231.py -- tests/files/web/generated/M16-GAP-01231-operator-node.add_mask.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01231", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01231", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01232", + "gapId": "operator:node.add_material", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01232-operator-node.add_material.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01232.py -- tests/files/web/generated/M16-GAP-01232-operator-node.add_material.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01232", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01232", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01233", + "gapId": "operator:node.add_node", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01233-operator-node.add_node.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01233.py -- tests/files/web/generated/M16-GAP-01233-operator-node.add_node.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01233", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01233", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01234", + "gapId": "operator:node.add_object", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01234-operator-node.add_object.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01234.py -- tests/files/web/generated/M16-GAP-01234-operator-node.add_object.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01234", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01234", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01235", + "gapId": "operator:node.add_repeat_zone", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01235-operator-node.add_repeat_zone.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01235.py -- tests/files/web/generated/M16-GAP-01235-operator-node.add_repeat_zone.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01235", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01235", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01236", + "gapId": "operator:node.add_reroute", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01236-operator-node.add_reroute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01236.py -- tests/files/web/generated/M16-GAP-01236-operator-node.add_reroute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01236", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01236", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01237", + "gapId": "operator:node.add_simulation_zone", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01237-operator-node.add_simulation_zone.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01237.py -- tests/files/web/generated/M16-GAP-01237-operator-node.add_simulation_zone.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01237", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01237", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01238", + "gapId": "operator:node.add_typed_bundle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01238-operator-node.add_typed_bundle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01238.py -- tests/files/web/generated/M16-GAP-01238-operator-node.add_typed_bundle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01238", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01238", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01239", + "gapId": "operator:node.add_zone", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01239-operator-node.add_zone.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01239.py -- tests/files/web/generated/M16-GAP-01239-operator-node.add_zone.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01239", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01239", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01240", + "gapId": "operator:node.attach", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01240-operator-node.attach.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01240.py -- tests/files/web/generated/M16-GAP-01240-operator-node.attach.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01240", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01240", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01241", + "gapId": "operator:node.backimage_fit", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01241-operator-node.backimage_fit.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01241.py -- tests/files/web/generated/M16-GAP-01241-operator-node.backimage_fit.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01241", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01241", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01242", + "gapId": "operator:node.backimage_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01242-operator-node.backimage_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01242.py -- tests/files/web/generated/M16-GAP-01242-operator-node.backimage_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01242", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01242", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01243", + "gapId": "operator:node.backimage_sample", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01243-operator-node.backimage_sample.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01243.py -- tests/files/web/generated/M16-GAP-01243-operator-node.backimage_sample.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01243", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01243", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01244", + "gapId": "operator:node.backimage_zoom", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01244-operator-node.backimage_zoom.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01244.py -- tests/files/web/generated/M16-GAP-01244-operator-node.backimage_zoom.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01244", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01244", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01245", + "gapId": "operator:node.bake_node_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01245-operator-node.bake_node_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01245.py -- tests/files/web/generated/M16-GAP-01245-operator-node.bake_node_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01245", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01245", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01246", + "gapId": "operator:node.bake_node_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01246-operator-node.bake_node_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01246.py -- tests/files/web/generated/M16-GAP-01246-operator-node.bake_node_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01246", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01246", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01247", + "gapId": "operator:node.bake_node_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01247-operator-node.bake_node_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01247.py -- tests/files/web/generated/M16-GAP-01247-operator-node.bake_node_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01247", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01247", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01248", + "gapId": "operator:node.capture_attribute_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01248-operator-node.capture_attribute_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01248.py -- tests/files/web/generated/M16-GAP-01248-operator-node.capture_attribute_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01248", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01248", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01249", + "gapId": "operator:node.capture_attribute_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01249-operator-node.capture_attribute_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01249.py -- tests/files/web/generated/M16-GAP-01249-operator-node.capture_attribute_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01249", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01249", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01250", + "gapId": "operator:node.capture_attribute_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01250-operator-node.capture_attribute_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01250.py -- tests/files/web/generated/M16-GAP-01250-operator-node.capture_attribute_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01250", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01250", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01251", + "gapId": "operator:node.clear_viewer_border", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01251-operator-node.clear_viewer_border.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01251.py -- tests/files/web/generated/M16-GAP-01251-operator-node.clear_viewer_border.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01251", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01251", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01252", + "gapId": "operator:node.clipboard_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01252-operator-node.clipboard_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01252.py -- tests/files/web/generated/M16-GAP-01252-operator-node.clipboard_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01252", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01252", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01253", + "gapId": "operator:node.clipboard_paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01253-operator-node.clipboard_paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01253.py -- tests/files/web/generated/M16-GAP-01253-operator-node.clipboard_paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01253", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01253", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01254", + "gapId": "operator:node.closure_input_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01254-operator-node.closure_input_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01254.py -- tests/files/web/generated/M16-GAP-01254-operator-node.closure_input_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01254", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01254", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01255", + "gapId": "operator:node.closure_input_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01255-operator-node.closure_input_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01255.py -- tests/files/web/generated/M16-GAP-01255-operator-node.closure_input_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01255", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01255", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01256", + "gapId": "operator:node.closure_input_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01256-operator-node.closure_input_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01256.py -- tests/files/web/generated/M16-GAP-01256-operator-node.closure_input_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01256", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01256", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01257", + "gapId": "operator:node.closure_output_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01257-operator-node.closure_output_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01257.py -- tests/files/web/generated/M16-GAP-01257-operator-node.closure_output_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01257", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01257", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01258", + "gapId": "operator:node.closure_output_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01258-operator-node.closure_output_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01258.py -- tests/files/web/generated/M16-GAP-01258-operator-node.closure_output_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01258", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01258", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01259", + "gapId": "operator:node.closure_output_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01259-operator-node.closure_output_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01259.py -- tests/files/web/generated/M16-GAP-01259-operator-node.closure_output_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01259", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01259", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01260", + "gapId": "operator:node.closure_to_list_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01260-operator-node.closure_to_list_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01260.py -- tests/files/web/generated/M16-GAP-01260-operator-node.closure_to_list_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01260", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01260", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01261", + "gapId": "operator:node.closure_to_list_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01261-operator-node.closure_to_list_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01261.py -- tests/files/web/generated/M16-GAP-01261-operator-node.closure_to_list_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01261", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01261", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01262", + "gapId": "operator:node.closure_to_list_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01262-operator-node.closure_to_list_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01262.py -- tests/files/web/generated/M16-GAP-01262-operator-node.closure_to_list_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01262", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01262", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01263", + "gapId": "operator:node.collapse_hide_unused_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01263-operator-node.collapse_hide_unused_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01263.py -- tests/files/web/generated/M16-GAP-01263-operator-node.collapse_hide_unused_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01263", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01263", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01264", + "gapId": "operator:node.combine_bundle_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01264-operator-node.combine_bundle_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01264.py -- tests/files/web/generated/M16-GAP-01264-operator-node.combine_bundle_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01264", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01264", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01265", + "gapId": "operator:node.combine_bundle_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01265-operator-node.combine_bundle_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01265.py -- tests/files/web/generated/M16-GAP-01265-operator-node.combine_bundle_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01265", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01265", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01266", + "gapId": "operator:node.combine_bundle_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01266-operator-node.combine_bundle_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01266.py -- tests/files/web/generated/M16-GAP-01266-operator-node.combine_bundle_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01266", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01266", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01267", + "gapId": "operator:node.connect_to_output", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01267-operator-node.connect_to_output.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01267.py -- tests/files/web/generated/M16-GAP-01267-operator-node.connect_to_output.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01267", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01267", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01268", + "gapId": "operator:node.cryptomatte_layer_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01268-operator-node.cryptomatte_layer_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01268.py -- tests/files/web/generated/M16-GAP-01268-operator-node.cryptomatte_layer_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01268", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01268", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01269", + "gapId": "operator:node.cryptomatte_layer_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01269-operator-node.cryptomatte_layer_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01269.py -- tests/files/web/generated/M16-GAP-01269-operator-node.cryptomatte_layer_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01269", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01269", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01270", + "gapId": "operator:node.deactivate_viewer", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01270-operator-node.deactivate_viewer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01270.py -- tests/files/web/generated/M16-GAP-01270-operator-node.deactivate_viewer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01270", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01270", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01271", + "gapId": "operator:node.default_group_width_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01271-operator-node.default_group_width_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01271.py -- tests/files/web/generated/M16-GAP-01271-operator-node.default_group_width_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01271", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01271", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01272", + "gapId": "operator:node.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01272-operator-node.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01272.py -- tests/files/web/generated/M16-GAP-01272-operator-node.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01272", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01272", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01273", + "gapId": "operator:node.delete_copy_reconnect", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01273-operator-node.delete_copy_reconnect.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01273.py -- tests/files/web/generated/M16-GAP-01273-operator-node.delete_copy_reconnect.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01273", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01273", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01274", + "gapId": "operator:node.delete_reconnect", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01274-operator-node.delete_reconnect.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01274.py -- tests/files/web/generated/M16-GAP-01274-operator-node.delete_reconnect.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01274", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01274", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01275", + "gapId": "operator:node.detach", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01275-operator-node.detach.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01275.py -- tests/files/web/generated/M16-GAP-01275-operator-node.detach.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01275", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01275", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01276", + "gapId": "operator:node.detach_translate_attach", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01276-operator-node.detach_translate_attach.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01276.py -- tests/files/web/generated/M16-GAP-01276-operator-node.detach_translate_attach.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01276", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01276", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01277", + "gapId": "operator:node.duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01277-operator-node.duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01277.py -- tests/files/web/generated/M16-GAP-01277-operator-node.duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01277", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01277", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01278", + "gapId": "operator:node.duplicate_compositing_modifier_node_group", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01278-operator-node.duplicate_compositing_modifier_node_group.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01278.py -- tests/files/web/generated/M16-GAP-01278-operator-node.duplicate_compositing_modifier_node_group.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01278", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01278", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01279", + "gapId": "operator:node.duplicate_compositing_node_group", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01279-operator-node.duplicate_compositing_node_group.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01279.py -- tests/files/web/generated/M16-GAP-01279-operator-node.duplicate_compositing_node_group.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01279", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01279", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01280", + "gapId": "operator:node.duplicate_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01280-operator-node.duplicate_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01280.py -- tests/files/web/generated/M16-GAP-01280-operator-node.duplicate_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01280", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01280", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01281", + "gapId": "operator:node.duplicate_move_keep_inputs", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01281-operator-node.duplicate_move_keep_inputs.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01281.py -- tests/files/web/generated/M16-GAP-01281-operator-node.duplicate_move_keep_inputs.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01281", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01281", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01282", + "gapId": "operator:node.duplicate_move_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01282-operator-node.duplicate_move_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01282.py -- tests/files/web/generated/M16-GAP-01282-operator-node.duplicate_move_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01282", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01282", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01283", + "gapId": "operator:node.enum_definition_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01283-operator-node.enum_definition_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01283.py -- tests/files/web/generated/M16-GAP-01283-operator-node.enum_definition_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01283", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01283", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01284", + "gapId": "operator:node.enum_definition_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01284-operator-node.enum_definition_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01284.py -- tests/files/web/generated/M16-GAP-01284-operator-node.enum_definition_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01284", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01284", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01285", + "gapId": "operator:node.enum_definition_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01285-operator-node.enum_definition_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01285.py -- tests/files/web/generated/M16-GAP-01285-operator-node.enum_definition_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01285", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01285", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01286", + "gapId": "operator:node.evaluate_closure_input_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01286-operator-node.evaluate_closure_input_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01286.py -- tests/files/web/generated/M16-GAP-01286-operator-node.evaluate_closure_input_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01286", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01286", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01287", + "gapId": "operator:node.evaluate_closure_input_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01287-operator-node.evaluate_closure_input_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01287.py -- tests/files/web/generated/M16-GAP-01287-operator-node.evaluate_closure_input_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01287", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01287", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01288", + "gapId": "operator:node.evaluate_closure_input_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01288-operator-node.evaluate_closure_input_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01288.py -- tests/files/web/generated/M16-GAP-01288-operator-node.evaluate_closure_input_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01288", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01288", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01289", + "gapId": "operator:node.evaluate_closure_output_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01289-operator-node.evaluate_closure_output_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01289.py -- tests/files/web/generated/M16-GAP-01289-operator-node.evaluate_closure_output_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01289", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01289", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01290", + "gapId": "operator:node.evaluate_closure_output_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01290-operator-node.evaluate_closure_output_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01290.py -- tests/files/web/generated/M16-GAP-01290-operator-node.evaluate_closure_output_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01290", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01290", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01291", + "gapId": "operator:node.evaluate_closure_output_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01291-operator-node.evaluate_closure_output_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01291.py -- tests/files/web/generated/M16-GAP-01291-operator-node.evaluate_closure_output_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01291", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01291", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01292", + "gapId": "operator:node.field_to_grid_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01292-operator-node.field_to_grid_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01292.py -- tests/files/web/generated/M16-GAP-01292-operator-node.field_to_grid_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01292", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01292", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01293", + "gapId": "operator:node.field_to_grid_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01293-operator-node.field_to_grid_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01293.py -- tests/files/web/generated/M16-GAP-01293-operator-node.field_to_grid_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01293", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01293", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01294", + "gapId": "operator:node.field_to_grid_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01294-operator-node.field_to_grid_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01294.py -- tests/files/web/generated/M16-GAP-01294-operator-node.field_to_grid_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01294", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01294", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01295", + "gapId": "operator:node.field_to_list_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01295-operator-node.field_to_list_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01295.py -- tests/files/web/generated/M16-GAP-01295-operator-node.field_to_list_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01295", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01295", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01296", + "gapId": "operator:node.field_to_list_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01296-operator-node.field_to_list_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01296.py -- tests/files/web/generated/M16-GAP-01296-operator-node.field_to_list_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01296", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01296", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01297", + "gapId": "operator:node.field_to_list_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01297-operator-node.field_to_list_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01297.py -- tests/files/web/generated/M16-GAP-01297-operator-node.field_to_list_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01297", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01297", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01298", + "gapId": "operator:node.file_output_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01298-operator-node.file_output_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01298.py -- tests/files/web/generated/M16-GAP-01298-operator-node.file_output_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01298", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01298", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01299", + "gapId": "operator:node.file_output_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01299-operator-node.file_output_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01299.py -- tests/files/web/generated/M16-GAP-01299-operator-node.file_output_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01299", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01299", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01300", + "gapId": "operator:node.file_output_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01300-operator-node.file_output_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01300.py -- tests/files/web/generated/M16-GAP-01300-operator-node.file_output_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01300", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01300", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01301", + "gapId": "operator:node.find_node", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01301-operator-node.find_node.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01301.py -- tests/files/web/generated/M16-GAP-01301-operator-node.find_node.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01301", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01301", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01302", + "gapId": "operator:node.foreach_geometry_element_zone_generation_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01302-operator-node.foreach_geometry_element_zone_generation_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01302.py -- tests/files/web/generated/M16-GAP-01302-operator-node.foreach_geometry_element_zone_generation_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01302", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01302", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01303", + "gapId": "operator:node.foreach_geometry_element_zone_generation_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01303-operator-node.foreach_geometry_element_zone_generation_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01303.py -- tests/files/web/generated/M16-GAP-01303-operator-node.foreach_geometry_element_zone_generation_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01303", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01303", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01304", + "gapId": "operator:node.foreach_geometry_element_zone_generation_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01304-operator-node.foreach_geometry_element_zone_generation_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01304.py -- tests/files/web/generated/M16-GAP-01304-operator-node.foreach_geometry_element_zone_generation_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01304", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01304", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01305", + "gapId": "operator:node.foreach_geometry_element_zone_input_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01305-operator-node.foreach_geometry_element_zone_input_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01305.py -- tests/files/web/generated/M16-GAP-01305-operator-node.foreach_geometry_element_zone_input_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01305", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01305", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01306", + "gapId": "operator:node.foreach_geometry_element_zone_input_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01306-operator-node.foreach_geometry_element_zone_input_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01306.py -- tests/files/web/generated/M16-GAP-01306-operator-node.foreach_geometry_element_zone_input_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01306", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01306", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01307", + "gapId": "operator:node.foreach_geometry_element_zone_input_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01307-operator-node.foreach_geometry_element_zone_input_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01307.py -- tests/files/web/generated/M16-GAP-01307-operator-node.foreach_geometry_element_zone_input_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01307", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01307", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01308", + "gapId": "operator:node.foreach_geometry_element_zone_main_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01308-operator-node.foreach_geometry_element_zone_main_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01308.py -- tests/files/web/generated/M16-GAP-01308-operator-node.foreach_geometry_element_zone_main_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01308", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01308", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01309", + "gapId": "operator:node.foreach_geometry_element_zone_main_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01309-operator-node.foreach_geometry_element_zone_main_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01309.py -- tests/files/web/generated/M16-GAP-01309-operator-node.foreach_geometry_element_zone_main_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01309", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01309", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01310", + "gapId": "operator:node.foreach_geometry_element_zone_main_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01310-operator-node.foreach_geometry_element_zone_main_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01310.py -- tests/files/web/generated/M16-GAP-01310-operator-node.foreach_geometry_element_zone_main_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01310", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01310", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01311", + "gapId": "operator:node.format_string_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01311-operator-node.format_string_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01311.py -- tests/files/web/generated/M16-GAP-01311-operator-node.format_string_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01311", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01311", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01312", + "gapId": "operator:node.format_string_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01312-operator-node.format_string_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01312.py -- tests/files/web/generated/M16-GAP-01312-operator-node.format_string_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01312", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01312", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01313", + "gapId": "operator:node.format_string_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01313-operator-node.format_string_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01313.py -- tests/files/web/generated/M16-GAP-01313-operator-node.format_string_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01313", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01313", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01314", + "gapId": "operator:node.geometry_nodes_viewer_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01314-operator-node.geometry_nodes_viewer_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01314.py -- tests/files/web/generated/M16-GAP-01314-operator-node.geometry_nodes_viewer_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01314", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01314", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01315", + "gapId": "operator:node.geometry_nodes_viewer_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01315-operator-node.geometry_nodes_viewer_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01315.py -- tests/files/web/generated/M16-GAP-01315-operator-node.geometry_nodes_viewer_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01315", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01315", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01316", + "gapId": "operator:node.geometry_nodes_viewer_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01316-operator-node.geometry_nodes_viewer_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01316.py -- tests/files/web/generated/M16-GAP-01316-operator-node.geometry_nodes_viewer_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01316", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01316", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01317", + "gapId": "operator:node.gltf_settings_node_operator", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01317-operator-node.gltf_settings_node_operator.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01317.py -- tests/files/web/generated/M16-GAP-01317-operator-node.gltf_settings_node_operator.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01317", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01317", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01318", + "gapId": "operator:node.group_edit", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01318-operator-node.group_edit.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01318.py -- tests/files/web/generated/M16-GAP-01318-operator-node.group_edit.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01318", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01318", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01319", + "gapId": "operator:node.group_enter_exit", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01319-operator-node.group_enter_exit.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01319.py -- tests/files/web/generated/M16-GAP-01319-operator-node.group_enter_exit.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01319", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01319", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01320", + "gapId": "operator:node.group_insert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01320-operator-node.group_insert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01320.py -- tests/files/web/generated/M16-GAP-01320-operator-node.group_insert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01320", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01320", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01321", + "gapId": "operator:node.group_make", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01321-operator-node.group_make.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01321.py -- tests/files/web/generated/M16-GAP-01321-operator-node.group_make.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01321", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01321", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01322", + "gapId": "operator:node.group_separate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01322-operator-node.group_separate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01322.py -- tests/files/web/generated/M16-GAP-01322-operator-node.group_separate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01322", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01322", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01323", + "gapId": "operator:node.group_ungroup", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01323-operator-node.group_ungroup.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01323.py -- tests/files/web/generated/M16-GAP-01323-operator-node.group_ungroup.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01323", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01323", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01324", + "gapId": "operator:node.hide_socket_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01324-operator-node.hide_socket_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01324.py -- tests/files/web/generated/M16-GAP-01324-operator-node.hide_socket_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01324", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01324", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01325", + "gapId": "operator:node.hide_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01325-operator-node.hide_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01325.py -- tests/files/web/generated/M16-GAP-01325-operator-node.hide_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01325", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01325", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01326", + "gapId": "operator:node.index_switch_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01326-operator-node.index_switch_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01326.py -- tests/files/web/generated/M16-GAP-01326-operator-node.index_switch_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01326", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01326", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01327", + "gapId": "operator:node.index_switch_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01327-operator-node.index_switch_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01327.py -- tests/files/web/generated/M16-GAP-01327-operator-node.index_switch_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01327", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01327", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01328", + "gapId": "operator:node.index_switch_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01328-operator-node.index_switch_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01328.py -- tests/files/web/generated/M16-GAP-01328-operator-node.index_switch_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01328", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01328", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01329", + "gapId": "operator:node.insert_offset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01329-operator-node.insert_offset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01329.py -- tests/files/web/generated/M16-GAP-01329-operator-node.insert_offset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01329", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01329", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01330", + "gapId": "operator:node.interface_item_duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01330-operator-node.interface_item_duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01330.py -- tests/files/web/generated/M16-GAP-01330-operator-node.interface_item_duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01330", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01330", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01331", + "gapId": "operator:node.interface_item_make_panel_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01331-operator-node.interface_item_make_panel_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01331.py -- tests/files/web/generated/M16-GAP-01331-operator-node.interface_item_make_panel_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01331", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01331", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01332", + "gapId": "operator:node.interface_item_new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01332-operator-node.interface_item_new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01332.py -- tests/files/web/generated/M16-GAP-01332-operator-node.interface_item_new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01332", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01332", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01333", + "gapId": "operator:node.interface_item_new_panel_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01333-operator-node.interface_item_new_panel_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01333.py -- tests/files/web/generated/M16-GAP-01333-operator-node.interface_item_new_panel_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01333", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01333", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01334", + "gapId": "operator:node.interface_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01334-operator-node.interface_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01334.py -- tests/files/web/generated/M16-GAP-01334-operator-node.interface_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01334", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01334", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01335", + "gapId": "operator:node.interface_item_unlink_panel_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01335-operator-node.interface_item_unlink_panel_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01335.py -- tests/files/web/generated/M16-GAP-01335-operator-node.interface_item_unlink_panel_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01335", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01335", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01336", + "gapId": "operator:node.join", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01336-operator-node.join.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01336.py -- tests/files/web/generated/M16-GAP-01336-operator-node.join.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01336", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01336", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01337", + "gapId": "operator:node.join_named", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01337-operator-node.join_named.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01337.py -- tests/files/web/generated/M16-GAP-01337-operator-node.join_named.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01337", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01337", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01338", + "gapId": "operator:node.join_nodes", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01338-operator-node.join_nodes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01338.py -- tests/files/web/generated/M16-GAP-01338-operator-node.join_nodes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01338", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01338", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01339", + "gapId": "operator:node.link", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01339-operator-node.link.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01339.py -- tests/files/web/generated/M16-GAP-01339-operator-node.link.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01339", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01339", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01340", + "gapId": "operator:node.link_drag_operation_test", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01340-operator-node.link_drag_operation_test.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01340.py -- tests/files/web/generated/M16-GAP-01340-operator-node.link_drag_operation_test.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01340", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01340", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01341", + "gapId": "operator:node.link_make", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01341-operator-node.link_make.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01341.py -- tests/files/web/generated/M16-GAP-01341-operator-node.link_make.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01341", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01341", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01342", + "gapId": "operator:node.link_viewer", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01342-operator-node.link_viewer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01342.py -- tests/files/web/generated/M16-GAP-01342-operator-node.link_viewer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01342", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01342", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01343", + "gapId": "operator:node.links_cut", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01343-operator-node.links_cut.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01343.py -- tests/files/web/generated/M16-GAP-01343-operator-node.links_cut.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01343", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01343", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01344", + "gapId": "operator:node.links_detach", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01344-operator-node.links_detach.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01344.py -- tests/files/web/generated/M16-GAP-01344-operator-node.links_detach.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01344", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01344", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01345", + "gapId": "operator:node.links_mute", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01345-operator-node.links_mute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01345.py -- tests/files/web/generated/M16-GAP-01345-operator-node.links_mute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01345", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01345", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01346", + "gapId": "operator:node.move_detach_links", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01346-operator-node.move_detach_links.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01346.py -- tests/files/web/generated/M16-GAP-01346-operator-node.move_detach_links.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01346", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01346", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01347", + "gapId": "operator:node.move_detach_links_release", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01347-operator-node.move_detach_links_release.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01347.py -- tests/files/web/generated/M16-GAP-01347-operator-node.move_detach_links_release.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01347", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01347", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01348", + "gapId": "operator:node.mute_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01348-operator-node.mute_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01348.py -- tests/files/web/generated/M16-GAP-01348-operator-node.mute_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01348", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01348", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01349", + "gapId": "operator:node.new_compositing_node_group", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01349-operator-node.new_compositing_node_group.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01349.py -- tests/files/web/generated/M16-GAP-01349-operator-node.new_compositing_node_group.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01349", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01349", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01350", + "gapId": "operator:node.new_compositor_sequencer_node_group", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01350-operator-node.new_compositor_sequencer_node_group.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01350.py -- tests/files/web/generated/M16-GAP-01350-operator-node.new_compositor_sequencer_node_group.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01350", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01350", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01351", + "gapId": "operator:node.new_geometry_node_group_assign", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01351-operator-node.new_geometry_node_group_assign.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01351.py -- tests/files/web/generated/M16-GAP-01351-operator-node.new_geometry_node_group_assign.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01351", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01351", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01352", + "gapId": "operator:node.new_geometry_node_group_tool", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01352-operator-node.new_geometry_node_group_tool.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01352.py -- tests/files/web/generated/M16-GAP-01352-operator-node.new_geometry_node_group_tool.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01352", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01352", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01353", + "gapId": "operator:node.new_geometry_nodes_modifier", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01353-operator-node.new_geometry_nodes_modifier.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01353.py -- tests/files/web/generated/M16-GAP-01353-operator-node.new_geometry_nodes_modifier.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01353", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01353", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01354", + "gapId": "operator:node.new_node_tree", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01354-operator-node.new_node_tree.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01354.py -- tests/files/web/generated/M16-GAP-01354-operator-node.new_node_tree.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01354", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01354", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01355", + "gapId": "operator:node.node_color_preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01355-operator-node.node_color_preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01355.py -- tests/files/web/generated/M16-GAP-01355-operator-node.node_color_preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01355", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01355", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01356", + "gapId": "operator:node.node_copy_color", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01356-operator-node.node_copy_color.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01356.py -- tests/files/web/generated/M16-GAP-01356-operator-node.node_copy_color.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01356", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01356", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01357", + "gapId": "operator:node.options_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01357-operator-node.options_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01357.py -- tests/files/web/generated/M16-GAP-01357-operator-node.options_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01357", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01357", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01358", + "gapId": "operator:node.parent_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01358-operator-node.parent_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01358.py -- tests/files/web/generated/M16-GAP-01358-operator-node.parent_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01358", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01358", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01359", + "gapId": "operator:node.preview_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01359-operator-node.preview_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01359.py -- tests/files/web/generated/M16-GAP-01359-operator-node.preview_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01359", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01359", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01360", + "gapId": "operator:node.read_viewlayers", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01360-operator-node.read_viewlayers.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01360.py -- tests/files/web/generated/M16-GAP-01360-operator-node.read_viewlayers.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01360", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01360", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01361", + "gapId": "operator:node.render_changed", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01361-operator-node.render_changed.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01361.py -- tests/files/web/generated/M16-GAP-01361-operator-node.render_changed.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01361", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01361", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01362", + "gapId": "operator:node.repeat_zone_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01362-operator-node.repeat_zone_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01362.py -- tests/files/web/generated/M16-GAP-01362-operator-node.repeat_zone_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01362", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01362", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01363", + "gapId": "operator:node.repeat_zone_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01363-operator-node.repeat_zone_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01363.py -- tests/files/web/generated/M16-GAP-01363-operator-node.repeat_zone_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01363", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01363", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01364", + "gapId": "operator:node.repeat_zone_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01364-operator-node.repeat_zone_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01364.py -- tests/files/web/generated/M16-GAP-01364-operator-node.repeat_zone_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01364", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01364", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01365", + "gapId": "operator:node.resize", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01365-operator-node.resize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01365.py -- tests/files/web/generated/M16-GAP-01365-operator-node.resize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01365", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01365", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01366", + "gapId": "operator:node.sample_attribute_items_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01366-operator-node.sample_attribute_items_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01366.py -- tests/files/web/generated/M16-GAP-01366-operator-node.sample_attribute_items_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01366", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01366", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01367", + "gapId": "operator:node.sample_attribute_items_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01367-operator-node.sample_attribute_items_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01367.py -- tests/files/web/generated/M16-GAP-01367-operator-node.sample_attribute_items_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01367", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01367", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01368", + "gapId": "operator:node.sample_attribute_items_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01368-operator-node.sample_attribute_items_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01368.py -- tests/files/web/generated/M16-GAP-01368-operator-node.sample_attribute_items_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01368", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01368", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01369", + "gapId": "operator:node.select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01369-operator-node.select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01369.py -- tests/files/web/generated/M16-GAP-01369-operator-node.select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01369", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01369", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01370", + "gapId": "operator:node.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01370-operator-node.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01370.py -- tests/files/web/generated/M16-GAP-01370-operator-node.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01370", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01370", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01371", + "gapId": "operator:node.select_box", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01371-operator-node.select_box.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01371.py -- tests/files/web/generated/M16-GAP-01371-operator-node.select_box.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01371", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01371", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01372", + "gapId": "operator:node.select_circle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01372-operator-node.select_circle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01372.py -- tests/files/web/generated/M16-GAP-01372-operator-node.select_circle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01372", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01372", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01373", + "gapId": "operator:node.select_grouped", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01373-operator-node.select_grouped.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01373.py -- tests/files/web/generated/M16-GAP-01373-operator-node.select_grouped.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01373", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01373", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01374", + "gapId": "operator:node.select_lasso", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01374-operator-node.select_lasso.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01374.py -- tests/files/web/generated/M16-GAP-01374-operator-node.select_lasso.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01374", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01374", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01375", + "gapId": "operator:node.select_link_viewer", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01375-operator-node.select_link_viewer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01375.py -- tests/files/web/generated/M16-GAP-01375-operator-node.select_link_viewer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01375", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01375", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01376", + "gapId": "operator:node.select_linked_from", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01376-operator-node.select_linked_from.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01376.py -- tests/files/web/generated/M16-GAP-01376-operator-node.select_linked_from.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01376", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01376", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01377", + "gapId": "operator:node.select_linked_to", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01377-operator-node.select_linked_to.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01377.py -- tests/files/web/generated/M16-GAP-01377-operator-node.select_linked_to.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01377", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01377", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01378", + "gapId": "operator:node.select_same_type_step", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01378-operator-node.select_same_type_step.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01378.py -- tests/files/web/generated/M16-GAP-01378-operator-node.select_same_type_step.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01378", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01378", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01379", + "gapId": "operator:node.separate_bundle_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01379-operator-node.separate_bundle_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01379.py -- tests/files/web/generated/M16-GAP-01379-operator-node.separate_bundle_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01379", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01379", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01380", + "gapId": "operator:node.separate_bundle_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01380-operator-node.separate_bundle_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01380.py -- tests/files/web/generated/M16-GAP-01380-operator-node.separate_bundle_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01380", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01380", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01381", + "gapId": "operator:node.separate_bundle_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01381-operator-node.separate_bundle_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01381.py -- tests/files/web/generated/M16-GAP-01381-operator-node.separate_bundle_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01381", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01381", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01382", + "gapId": "operator:node.shader_script_update", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01382-operator-node.shader_script_update.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01382.py -- tests/files/web/generated/M16-GAP-01382-operator-node.shader_script_update.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01382", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01382", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01383", + "gapId": "operator:node.simulation_zone_item_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01383-operator-node.simulation_zone_item_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01383.py -- tests/files/web/generated/M16-GAP-01383-operator-node.simulation_zone_item_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01383", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01383", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01384", + "gapId": "operator:node.simulation_zone_item_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01384-operator-node.simulation_zone_item_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01384.py -- tests/files/web/generated/M16-GAP-01384-operator-node.simulation_zone_item_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01384", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01384", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01385", + "gapId": "operator:node.simulation_zone_item_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01385-operator-node.simulation_zone_item_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01385.py -- tests/files/web/generated/M16-GAP-01385-operator-node.simulation_zone_item_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01385", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01385", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01386", + "gapId": "operator:node.sockets_sync", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01386-operator-node.sockets_sync.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01386.py -- tests/files/web/generated/M16-GAP-01386-operator-node.sockets_sync.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01386", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01386", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01387", + "gapId": "operator:node.swap_empty_group", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01387-operator-node.swap_empty_group.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01387.py -- tests/files/web/generated/M16-GAP-01387-operator-node.swap_empty_group.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01387", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01387", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01388", + "gapId": "operator:node.swap_group_asset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01388-operator-node.swap_group_asset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01388.py -- tests/files/web/generated/M16-GAP-01388-operator-node.swap_group_asset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01388", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01388", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01389", + "gapId": "operator:node.swap_node", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01389-operator-node.swap_node.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01389.py -- tests/files/web/generated/M16-GAP-01389-operator-node.swap_node.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01389", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01389", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01390", + "gapId": "operator:node.swap_typed_bundle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01390-operator-node.swap_typed_bundle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01390.py -- tests/files/web/generated/M16-GAP-01390-operator-node.swap_typed_bundle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01390", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01390", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01391", + "gapId": "operator:node.swap_zone", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01391-operator-node.swap_zone.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01391.py -- tests/files/web/generated/M16-GAP-01391-operator-node.swap_zone.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01391", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01391", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01392", + "gapId": "operator:node.test_inlining_shader_nodes", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01392-operator-node.test_inlining_shader_nodes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01392.py -- tests/files/web/generated/M16-GAP-01392-operator-node.test_inlining_shader_nodes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01392", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01392", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01393", + "gapId": "operator:node.toggle_viewer", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01393-operator-node.toggle_viewer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01393.py -- tests/files/web/generated/M16-GAP-01393-operator-node.toggle_viewer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01393", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01393", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01394", + "gapId": "operator:node.translate_attach", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01394-operator-node.translate_attach.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01394.py -- tests/files/web/generated/M16-GAP-01394-operator-node.translate_attach.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01394", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01394", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01395", + "gapId": "operator:node.translate_attach_remove_on_cancel", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01395-operator-node.translate_attach_remove_on_cancel.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01395.py -- tests/files/web/generated/M16-GAP-01395-operator-node.translate_attach_remove_on_cancel.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01395", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01395", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01396", + "gapId": "operator:node.tree_path_parent", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01396-operator-node.tree_path_parent.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01396.py -- tests/files/web/generated/M16-GAP-01396-operator-node.tree_path_parent.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01396", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01396", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01397", + "gapId": "operator:node.view_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01397-operator-node.view_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01397.py -- tests/files/web/generated/M16-GAP-01397-operator-node.view_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01397", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01397", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01398", + "gapId": "operator:node.view_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01398-operator-node.view_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01398.py -- tests/files/web/generated/M16-GAP-01398-operator-node.view_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01398", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01398", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01399", + "gapId": "operator:node.viewer_border", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01399-operator-node.viewer_border.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01399.py -- tests/files/web/generated/M16-GAP-01399-operator-node.viewer_border.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01399", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01399", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01400", + "gapId": "operator:node.viewer_shortcut_get", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01400-operator-node.viewer_shortcut_get.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01400.py -- tests/files/web/generated/M16-GAP-01400-operator-node.viewer_shortcut_get.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01400", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01400", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01401", + "gapId": "operator:node.viewer_shortcut_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01401-operator-node.viewer_shortcut_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01401.py -- tests/files/web/generated/M16-GAP-01401-operator-node.viewer_shortcut_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01401", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01401", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01402", + "gapId": "operator:object.add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01402-operator-object.add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01402.py -- tests/files/web/generated/M16-GAP-01402-operator-object.add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01402", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01402", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01403", + "gapId": "operator:object.add_modifier_menu", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01403-operator-object.add_modifier_menu.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01403.py -- tests/files/web/generated/M16-GAP-01403-operator-object.add_modifier_menu.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01403", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01403", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01404", + "gapId": "operator:object.add_named", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01404-operator-object.add_named.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01404.py -- tests/files/web/generated/M16-GAP-01404-operator-object.add_named.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01404", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01404", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01405", + "gapId": "operator:object.align", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01405-operator-object.align.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01405.py -- tests/files/web/generated/M16-GAP-01405-operator-object.align.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01405", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01405", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01406", + "gapId": "operator:object.anim_transforms_to_deltas", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01406-operator-object.anim_transforms_to_deltas.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01406.py -- tests/files/web/generated/M16-GAP-01406-operator-object.anim_transforms_to_deltas.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01406", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01406", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01407", + "gapId": "operator:object.armature_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01407-operator-object.armature_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01407.py -- tests/files/web/generated/M16-GAP-01407-operator-object.armature_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01407", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01407", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01408", + "gapId": "operator:object.assign_property_defaults", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01408-operator-object.assign_property_defaults.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01408.py -- tests/files/web/generated/M16-GAP-01408-operator-object.assign_property_defaults.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01408", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01408", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01409", + "gapId": "operator:object.bake", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01409-operator-object.bake.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01409.py -- tests/files/web/generated/M16-GAP-01409-operator-object.bake.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01409", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01409", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01410", + "gapId": "operator:object.bake_image", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01410-operator-object.bake_image.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01410.py -- tests/files/web/generated/M16-GAP-01410-operator-object.bake_image.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01410", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01410", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01411", + "gapId": "operator:object.camera_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01411-operator-object.camera_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01411.py -- tests/files/web/generated/M16-GAP-01411-operator-object.camera_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01411", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01411", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01412", + "gapId": "operator:object.camera_custom_update", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01412-operator-object.camera_custom_update.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01412.py -- tests/files/web/generated/M16-GAP-01412-operator-object.camera_custom_update.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01412", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01412", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01413", + "gapId": "operator:object.clear_override_library", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01413-operator-object.clear_override_library.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01413.py -- tests/files/web/generated/M16-GAP-01413-operator-object.clear_override_library.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01413", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01413", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01414", + "gapId": "operator:object.collection_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01414-operator-object.collection_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01414.py -- tests/files/web/generated/M16-GAP-01414-operator-object.collection_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01414", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01414", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01415", + "gapId": "operator:object.collection_external_asset_drop", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01415-operator-object.collection_external_asset_drop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01415.py -- tests/files/web/generated/M16-GAP-01415-operator-object.collection_external_asset_drop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01415", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01415", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01416", + "gapId": "operator:object.collection_instance_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01416-operator-object.collection_instance_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01416.py -- tests/files/web/generated/M16-GAP-01416-operator-object.collection_instance_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01416", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01416", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01417", + "gapId": "operator:object.collection_link", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01417-operator-object.collection_link.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01417.py -- tests/files/web/generated/M16-GAP-01417-operator-object.collection_link.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01417", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01417", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01418", + "gapId": "operator:object.collection_objects_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01418-operator-object.collection_objects_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01418.py -- tests/files/web/generated/M16-GAP-01418-operator-object.collection_objects_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01418", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01418", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01419", + "gapId": "operator:object.collection_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01419-operator-object.collection_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01419.py -- tests/files/web/generated/M16-GAP-01419-operator-object.collection_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01419", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01419", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01420", + "gapId": "operator:object.collection_unlink", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01420-operator-object.collection_unlink.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01420.py -- tests/files/web/generated/M16-GAP-01420-operator-object.collection_unlink.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01420", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01420", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01421", + "gapId": "operator:object.constraint_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01421-operator-object.constraint_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01421.py -- tests/files/web/generated/M16-GAP-01421-operator-object.constraint_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01421", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01421", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01422", + "gapId": "operator:object.constraint_add_with_targets", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01422-operator-object.constraint_add_with_targets.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01422.py -- tests/files/web/generated/M16-GAP-01422-operator-object.constraint_add_with_targets.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01422", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01422", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01423", + "gapId": "operator:object.constraints_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01423-operator-object.constraints_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01423.py -- tests/files/web/generated/M16-GAP-01423-operator-object.constraints_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01423", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01423", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01424", + "gapId": "operator:object.constraints_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01424-operator-object.constraints_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01424.py -- tests/files/web/generated/M16-GAP-01424-operator-object.constraints_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01424", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01424", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01425", + "gapId": "operator:object.convert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01425-operator-object.convert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01425.py -- tests/files/web/generated/M16-GAP-01425-operator-object.convert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01425", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01425", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01426", + "gapId": "operator:object.copy_global_transform", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01426-operator-object.copy_global_transform.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01426.py -- tests/files/web/generated/M16-GAP-01426-operator-object.copy_global_transform.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01426", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01426", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01427", + "gapId": "operator:object.copy_relative_transform", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01427-operator-object.copy_relative_transform.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01427.py -- tests/files/web/generated/M16-GAP-01427-operator-object.copy_relative_transform.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01427", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01427", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01428", + "gapId": "operator:object.correctivesmooth_bind", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01428-operator-object.correctivesmooth_bind.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01428.py -- tests/files/web/generated/M16-GAP-01428-operator-object.correctivesmooth_bind.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01428", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01428", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01429", + "gapId": "operator:object.curves_empty_hair_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01429-operator-object.curves_empty_hair_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01429.py -- tests/files/web/generated/M16-GAP-01429-operator-object.curves_empty_hair_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01429", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01429", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01430", + "gapId": "operator:object.curves_random_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01430-operator-object.curves_random_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01430.py -- tests/files/web/generated/M16-GAP-01430-operator-object.curves_random_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01430", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01430", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01431", + "gapId": "operator:object.data_instance_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01431-operator-object.data_instance_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01431.py -- tests/files/web/generated/M16-GAP-01431-operator-object.data_instance_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01431", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01431", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01432", + "gapId": "operator:object.data_transfer", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01432-operator-object.data_transfer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01432.py -- tests/files/web/generated/M16-GAP-01432-operator-object.data_transfer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01432", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01432", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01433", + "gapId": "operator:object.datalayout_transfer", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01433-operator-object.datalayout_transfer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01433.py -- tests/files/web/generated/M16-GAP-01433-operator-object.datalayout_transfer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01433", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01433", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01434", + "gapId": "operator:object.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01434-operator-object.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01434.py -- tests/files/web/generated/M16-GAP-01434-operator-object.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01434", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01434", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01435", + "gapId": "operator:object.delete_fix_to_camera_keys", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01435-operator-object.delete_fix_to_camera_keys.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01435.py -- tests/files/web/generated/M16-GAP-01435-operator-object.delete_fix_to_camera_keys.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01435", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01435", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01436", + "gapId": "operator:object.drop_geometry_nodes", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01436-operator-object.drop_geometry_nodes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01436.py -- tests/files/web/generated/M16-GAP-01436-operator-object.drop_geometry_nodes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01436", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01436", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01437", + "gapId": "operator:object.drop_named_material", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01437-operator-object.drop_named_material.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01437.py -- tests/files/web/generated/M16-GAP-01437-operator-object.drop_named_material.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01437", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01437", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01438", + "gapId": "operator:object.duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01438-operator-object.duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01438.py -- tests/files/web/generated/M16-GAP-01438-operator-object.duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01438", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01438", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01439", + "gapId": "operator:object.duplicate_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01439-operator-object.duplicate_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01439.py -- tests/files/web/generated/M16-GAP-01439-operator-object.duplicate_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01439", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01439", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01440", + "gapId": "operator:object.duplicate_move_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01440-operator-object.duplicate_move_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01440.py -- tests/files/web/generated/M16-GAP-01440-operator-object.duplicate_move_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01440", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01440", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01441", + "gapId": "operator:object.duplicates_make_real", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01441-operator-object.duplicates_make_real.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01441.py -- tests/files/web/generated/M16-GAP-01441-operator-object.duplicates_make_real.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01441", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01441", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01442", + "gapId": "operator:object.editmode_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01442-operator-object.editmode_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01442.py -- tests/files/web/generated/M16-GAP-01442-operator-object.editmode_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01442", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01442", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01443", + "gapId": "operator:object.effector_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01443-operator-object.effector_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01443.py -- tests/files/web/generated/M16-GAP-01443-operator-object.effector_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01443", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01443", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01444", + "gapId": "operator:object.empty_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01444-operator-object.empty_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01444.py -- tests/files/web/generated/M16-GAP-01444-operator-object.empty_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01444", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01444", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01445", + "gapId": "operator:object.empty_image_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01445-operator-object.empty_image_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01445.py -- tests/files/web/generated/M16-GAP-01445-operator-object.empty_image_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01445", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01445", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01446", + "gapId": "operator:object.explode_refresh", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01446-operator-object.explode_refresh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01446.py -- tests/files/web/generated/M16-GAP-01446-operator-object.explode_refresh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01446", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01446", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01447", + "gapId": "operator:object.fix_to_camera", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01447-operator-object.fix_to_camera.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01447.py -- tests/files/web/generated/M16-GAP-01447-operator-object.fix_to_camera.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01447", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01447", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01448", + "gapId": "operator:object.forcefield_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01448-operator-object.forcefield_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01448.py -- tests/files/web/generated/M16-GAP-01448-operator-object.forcefield_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01448", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01448", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01449", + "gapId": "operator:object.geometry_node_bake_delete_single", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01449-operator-object.geometry_node_bake_delete_single.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01449.py -- tests/files/web/generated/M16-GAP-01449-operator-object.geometry_node_bake_delete_single.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01449", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01449", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01450", + "gapId": "operator:object.geometry_node_bake_pack_single", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01450-operator-object.geometry_node_bake_pack_single.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01450.py -- tests/files/web/generated/M16-GAP-01450-operator-object.geometry_node_bake_pack_single.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01450", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01450", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01451", + "gapId": "operator:object.geometry_node_bake_single", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01451-operator-object.geometry_node_bake_single.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01451.py -- tests/files/web/generated/M16-GAP-01451-operator-object.geometry_node_bake_single.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01451", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01451", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01452", + "gapId": "operator:object.geometry_node_bake_unpack_single", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01452-operator-object.geometry_node_bake_unpack_single.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01452.py -- tests/files/web/generated/M16-GAP-01452-operator-object.geometry_node_bake_unpack_single.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01452", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01452", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01453", + "gapId": "operator:object.geometry_node_tree_copy_assign", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01453-operator-object.geometry_node_tree_copy_assign.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01453.py -- tests/files/web/generated/M16-GAP-01453-operator-object.geometry_node_tree_copy_assign.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01453", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01453", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01454", + "gapId": "operator:object.geometry_nodes_input_attribute_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01454-operator-object.geometry_nodes_input_attribute_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01454.py -- tests/files/web/generated/M16-GAP-01454-operator-object.geometry_nodes_input_attribute_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01454", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01454", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01455", + "gapId": "operator:object.geometry_nodes_move_to_nodes", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01455-operator-object.geometry_nodes_move_to_nodes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01455.py -- tests/files/web/generated/M16-GAP-01455-operator-object.geometry_nodes_move_to_nodes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01455", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01455", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01456", + "gapId": "operator:object.grease_pencil_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01456-operator-object.grease_pencil_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01456.py -- tests/files/web/generated/M16-GAP-01456-operator-object.grease_pencil_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01456", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01456", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01457", + "gapId": "operator:object.grease_pencil_dash_modifier_segment_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01457-operator-object.grease_pencil_dash_modifier_segment_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01457.py -- tests/files/web/generated/M16-GAP-01457-operator-object.grease_pencil_dash_modifier_segment_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01457", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01457", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01458", + "gapId": "operator:object.grease_pencil_dash_modifier_segment_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01458-operator-object.grease_pencil_dash_modifier_segment_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01458.py -- tests/files/web/generated/M16-GAP-01458-operator-object.grease_pencil_dash_modifier_segment_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01458", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01458", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01459", + "gapId": "operator:object.grease_pencil_dash_modifier_segment_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01459-operator-object.grease_pencil_dash_modifier_segment_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01459.py -- tests/files/web/generated/M16-GAP-01459-operator-object.grease_pencil_dash_modifier_segment_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01459", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01459", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01460", + "gapId": "operator:object.grease_pencil_time_modifier_segment_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01460-operator-object.grease_pencil_time_modifier_segment_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01460.py -- tests/files/web/generated/M16-GAP-01460-operator-object.grease_pencil_time_modifier_segment_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01460", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01460", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01461", + "gapId": "operator:object.grease_pencil_time_modifier_segment_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01461-operator-object.grease_pencil_time_modifier_segment_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01461.py -- tests/files/web/generated/M16-GAP-01461-operator-object.grease_pencil_time_modifier_segment_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01461", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01461", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01462", + "gapId": "operator:object.grease_pencil_time_modifier_segment_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01462-operator-object.grease_pencil_time_modifier_segment_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01462.py -- tests/files/web/generated/M16-GAP-01462-operator-object.grease_pencil_time_modifier_segment_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01462", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01462", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01463", + "gapId": "operator:object.hide_collection", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01463-operator-object.hide_collection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01463.py -- tests/files/web/generated/M16-GAP-01463-operator-object.hide_collection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01463", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01463", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01464", + "gapId": "operator:object.hide_render_clear_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01464-operator-object.hide_render_clear_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01464.py -- tests/files/web/generated/M16-GAP-01464-operator-object.hide_render_clear_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01464", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01464", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01465", + "gapId": "operator:object.hide_view_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01465-operator-object.hide_view_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01465.py -- tests/files/web/generated/M16-GAP-01465-operator-object.hide_view_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01465", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01465", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01466", + "gapId": "operator:object.hide_view_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01466-operator-object.hide_view_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01466.py -- tests/files/web/generated/M16-GAP-01466-operator-object.hide_view_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01466", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01466", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01467", + "gapId": "operator:object.hook_add_newob", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01467-operator-object.hook_add_newob.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01467.py -- tests/files/web/generated/M16-GAP-01467-operator-object.hook_add_newob.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01467", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01467", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01468", + "gapId": "operator:object.hook_add_selob", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01468-operator-object.hook_add_selob.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01468.py -- tests/files/web/generated/M16-GAP-01468-operator-object.hook_add_selob.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01468", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01468", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01469", + "gapId": "operator:object.hook_assign", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01469-operator-object.hook_assign.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01469.py -- tests/files/web/generated/M16-GAP-01469-operator-object.hook_assign.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01469", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01469", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01470", + "gapId": "operator:object.hook_recenter", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01470-operator-object.hook_recenter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01470.py -- tests/files/web/generated/M16-GAP-01470-operator-object.hook_recenter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01470", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01470", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01471", + "gapId": "operator:object.hook_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01471-operator-object.hook_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01471.py -- tests/files/web/generated/M16-GAP-01471-operator-object.hook_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01471", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01471", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01472", + "gapId": "operator:object.hook_reset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01472-operator-object.hook_reset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01472.py -- tests/files/web/generated/M16-GAP-01472-operator-object.hook_reset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01472", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01472", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01473", + "gapId": "operator:object.hook_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01473-operator-object.hook_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01473.py -- tests/files/web/generated/M16-GAP-01473-operator-object.hook_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01473", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01473", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01474", + "gapId": "operator:object.instance_offset_from_cursor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01474-operator-object.instance_offset_from_cursor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01474.py -- tests/files/web/generated/M16-GAP-01474-operator-object.instance_offset_from_cursor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01474", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01474", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01475", + "gapId": "operator:object.instance_offset_from_object", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01475-operator-object.instance_offset_from_object.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01475.py -- tests/files/web/generated/M16-GAP-01475-operator-object.instance_offset_from_object.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01475", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01475", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01476", + "gapId": "operator:object.instance_offset_to_cursor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01476-operator-object.instance_offset_to_cursor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01476.py -- tests/files/web/generated/M16-GAP-01476-operator-object.instance_offset_to_cursor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01476", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01476", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01477", + "gapId": "operator:object.isolate_type_render", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01477-operator-object.isolate_type_render.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01477.py -- tests/files/web/generated/M16-GAP-01477-operator-object.isolate_type_render.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01477", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01477", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01478", + "gapId": "operator:object.join", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01478-operator-object.join.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01478.py -- tests/files/web/generated/M16-GAP-01478-operator-object.join.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01478", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01478", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01479", + "gapId": "operator:object.join_shapes", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01479-operator-object.join_shapes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01479.py -- tests/files/web/generated/M16-GAP-01479-operator-object.join_shapes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01479", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01479", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01480", + "gapId": "operator:object.join_uvs", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01480-operator-object.join_uvs.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01480.py -- tests/files/web/generated/M16-GAP-01480-operator-object.join_uvs.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01480", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01480", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01481", + "gapId": "operator:object.laplaciandeform_bind", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01481-operator-object.laplaciandeform_bind.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01481.py -- tests/files/web/generated/M16-GAP-01481-operator-object.laplaciandeform_bind.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01481", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01481", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01482", + "gapId": "operator:object.lattice_add_to_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01482-operator-object.lattice_add_to_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01482.py -- tests/files/web/generated/M16-GAP-01482-operator-object.lattice_add_to_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01482", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01482", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01483", + "gapId": "operator:object.light_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01483-operator-object.light_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01483.py -- tests/files/web/generated/M16-GAP-01483-operator-object.light_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01483", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01483", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01484", + "gapId": "operator:object.light_linking_blocker_collection_new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01484-operator-object.light_linking_blocker_collection_new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01484.py -- tests/files/web/generated/M16-GAP-01484-operator-object.light_linking_blocker_collection_new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01484", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01484", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01485", + "gapId": "operator:object.light_linking_blockers_link", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01485-operator-object.light_linking_blockers_link.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01485.py -- tests/files/web/generated/M16-GAP-01485-operator-object.light_linking_blockers_link.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01485", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01485", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01486", + "gapId": "operator:object.light_linking_blockers_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01486-operator-object.light_linking_blockers_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01486.py -- tests/files/web/generated/M16-GAP-01486-operator-object.light_linking_blockers_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01486", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01486", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01487", + "gapId": "operator:object.light_linking_receiver_collection_new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01487-operator-object.light_linking_receiver_collection_new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01487.py -- tests/files/web/generated/M16-GAP-01487-operator-object.light_linking_receiver_collection_new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01487", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01487", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01488", + "gapId": "operator:object.light_linking_receivers_link", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01488-operator-object.light_linking_receivers_link.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01488.py -- tests/files/web/generated/M16-GAP-01488-operator-object.light_linking_receivers_link.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01488", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01488", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01489", + "gapId": "operator:object.light_linking_receivers_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01489-operator-object.light_linking_receivers_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01489.py -- tests/files/web/generated/M16-GAP-01489-operator-object.light_linking_receivers_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01489", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01489", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01490", + "gapId": "operator:object.light_linking_unlink_from_collection", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01490-operator-object.light_linking_unlink_from_collection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01490.py -- tests/files/web/generated/M16-GAP-01490-operator-object.light_linking_unlink_from_collection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01490", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01490", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01491", + "gapId": "operator:object.lightprobe_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01491-operator-object.lightprobe_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01491.py -- tests/files/web/generated/M16-GAP-01491-operator-object.lightprobe_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01491", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01491", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01492", + "gapId": "operator:object.lightprobe_cache_bake", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01492-operator-object.lightprobe_cache_bake.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01492.py -- tests/files/web/generated/M16-GAP-01492-operator-object.lightprobe_cache_bake.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01492", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01492", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01493", + "gapId": "operator:object.lightprobe_cache_free", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01493-operator-object.lightprobe_cache_free.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01493.py -- tests/files/web/generated/M16-GAP-01493-operator-object.lightprobe_cache_free.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01493", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01493", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01494", + "gapId": "operator:object.lineart_bake_strokes", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01494-operator-object.lineart_bake_strokes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01494.py -- tests/files/web/generated/M16-GAP-01494-operator-object.lineart_bake_strokes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01494", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01494", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01495", + "gapId": "operator:object.lineart_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01495-operator-object.lineart_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01495.py -- tests/files/web/generated/M16-GAP-01495-operator-object.lineart_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01495", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01495", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01496", + "gapId": "operator:object.link_to_collection", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01496-operator-object.link_to_collection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01496.py -- tests/files/web/generated/M16-GAP-01496-operator-object.link_to_collection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01496", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01496", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01497", + "gapId": "operator:object.location_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01497-operator-object.location_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01497.py -- tests/files/web/generated/M16-GAP-01497-operator-object.location_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01497", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01497", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01498", + "gapId": "operator:object.make_dupli_face", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01498-operator-object.make_dupli_face.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01498.py -- tests/files/web/generated/M16-GAP-01498-operator-object.make_dupli_face.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01498", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01498", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01499", + "gapId": "operator:object.make_links_data", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01499-operator-object.make_links_data.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01499.py -- tests/files/web/generated/M16-GAP-01499-operator-object.make_links_data.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01499", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01499", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01500", + "gapId": "operator:object.make_links_scene", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01500-operator-object.make_links_scene.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01500.py -- tests/files/web/generated/M16-GAP-01500-operator-object.make_links_scene.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01500", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01500", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01501", + "gapId": "operator:object.make_local", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01501-operator-object.make_local.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01501.py -- tests/files/web/generated/M16-GAP-01501-operator-object.make_local.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01501", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01501", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01502", + "gapId": "operator:object.make_override_library", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01502-operator-object.make_override_library.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01502.py -- tests/files/web/generated/M16-GAP-01502-operator-object.make_override_library.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01502", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01502", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01503", + "gapId": "operator:object.make_single_user", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01503-operator-object.make_single_user.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01503.py -- tests/files/web/generated/M16-GAP-01503-operator-object.make_single_user.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01503", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01503", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01504", + "gapId": "operator:object.material_slot_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01504-operator-object.material_slot_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01504.py -- tests/files/web/generated/M16-GAP-01504-operator-object.material_slot_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01504", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01504", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01505", + "gapId": "operator:object.material_slot_assign", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01505-operator-object.material_slot_assign.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01505.py -- tests/files/web/generated/M16-GAP-01505-operator-object.material_slot_assign.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01505", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01505", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01506", + "gapId": "operator:object.material_slot_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01506-operator-object.material_slot_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01506.py -- tests/files/web/generated/M16-GAP-01506-operator-object.material_slot_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01506", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01506", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01507", + "gapId": "operator:object.material_slot_deselect", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01507-operator-object.material_slot_deselect.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01507.py -- tests/files/web/generated/M16-GAP-01507-operator-object.material_slot_deselect.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01507", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01507", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01508", + "gapId": "operator:object.material_slot_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01508-operator-object.material_slot_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01508.py -- tests/files/web/generated/M16-GAP-01508-operator-object.material_slot_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01508", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01508", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01509", + "gapId": "operator:object.material_slot_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01509-operator-object.material_slot_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01509.py -- tests/files/web/generated/M16-GAP-01509-operator-object.material_slot_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01509", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01509", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01510", + "gapId": "operator:object.material_slot_remove_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01510-operator-object.material_slot_remove_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01510.py -- tests/files/web/generated/M16-GAP-01510-operator-object.material_slot_remove_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01510", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01510", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01511", + "gapId": "operator:object.material_slot_remove_unused", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01511-operator-object.material_slot_remove_unused.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01511.py -- tests/files/web/generated/M16-GAP-01511-operator-object.material_slot_remove_unused.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01511", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01511", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01512", + "gapId": "operator:object.material_slot_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01512-operator-object.material_slot_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01512.py -- tests/files/web/generated/M16-GAP-01512-operator-object.material_slot_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01512", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01512", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01513", + "gapId": "operator:object.meshdeform_bind", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01513-operator-object.meshdeform_bind.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01513.py -- tests/files/web/generated/M16-GAP-01513-operator-object.meshdeform_bind.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01513", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01513", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01514", + "gapId": "operator:object.metaball_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01514-operator-object.metaball_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01514.py -- tests/files/web/generated/M16-GAP-01514-operator-object.metaball_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01514", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01514", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01515", + "gapId": "operator:object.mode_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01515-operator-object.mode_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01515.py -- tests/files/web/generated/M16-GAP-01515-operator-object.mode_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01515", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01515", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01516", + "gapId": "operator:object.mode_set_with_submode", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01516-operator-object.mode_set_with_submode.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01516.py -- tests/files/web/generated/M16-GAP-01516-operator-object.mode_set_with_submode.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01516", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01516", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01517", + "gapId": "operator:object.modifier_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01517-operator-object.modifier_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01517.py -- tests/files/web/generated/M16-GAP-01517-operator-object.modifier_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01517", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01517", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01518", + "gapId": "operator:object.modifier_add_node_group", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01518-operator-object.modifier_add_node_group.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01518.py -- tests/files/web/generated/M16-GAP-01518-operator-object.modifier_add_node_group.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01518", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01518", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01519", + "gapId": "operator:object.modifier_apply", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01519-operator-object.modifier_apply.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01519.py -- tests/files/web/generated/M16-GAP-01519-operator-object.modifier_apply.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01519", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01519", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01520", + "gapId": "operator:object.modifier_apply_as_shapekey", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01520-operator-object.modifier_apply_as_shapekey.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01520.py -- tests/files/web/generated/M16-GAP-01520-operator-object.modifier_apply_as_shapekey.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01520", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01520", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01521", + "gapId": "operator:object.modifier_convert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01521-operator-object.modifier_convert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01521.py -- tests/files/web/generated/M16-GAP-01521-operator-object.modifier_convert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01521", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01521", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01522", + "gapId": "operator:object.modifier_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01522-operator-object.modifier_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01522.py -- tests/files/web/generated/M16-GAP-01522-operator-object.modifier_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01522", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01522", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01523", + "gapId": "operator:object.modifier_copy_to_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01523-operator-object.modifier_copy_to_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01523.py -- tests/files/web/generated/M16-GAP-01523-operator-object.modifier_copy_to_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01523", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01523", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01524", + "gapId": "operator:object.modifier_move_down", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01524-operator-object.modifier_move_down.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01524.py -- tests/files/web/generated/M16-GAP-01524-operator-object.modifier_move_down.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01524", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01524", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01525", + "gapId": "operator:object.modifier_move_to_index", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01525-operator-object.modifier_move_to_index.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01525.py -- tests/files/web/generated/M16-GAP-01525-operator-object.modifier_move_to_index.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01525", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01525", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01526", + "gapId": "operator:object.modifier_move_up", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01526-operator-object.modifier_move_up.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01526.py -- tests/files/web/generated/M16-GAP-01526-operator-object.modifier_move_up.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01526", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01526", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01527", + "gapId": "operator:object.modifier_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01527-operator-object.modifier_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01527.py -- tests/files/web/generated/M16-GAP-01527-operator-object.modifier_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01527", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01527", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01528", + "gapId": "operator:object.modifier_set_active", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01528-operator-object.modifier_set_active.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01528.py -- tests/files/web/generated/M16-GAP-01528-operator-object.modifier_set_active.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01528", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01528", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01529", + "gapId": "operator:object.modifiers_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01529-operator-object.modifiers_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01529.py -- tests/files/web/generated/M16-GAP-01529-operator-object.modifiers_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01529", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01529", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01530", + "gapId": "operator:object.modifiers_copy_to_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01530-operator-object.modifiers_copy_to_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01530.py -- tests/files/web/generated/M16-GAP-01530-operator-object.modifiers_copy_to_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01530", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01530", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01531", + "gapId": "operator:object.move_to_collection", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01531-operator-object.move_to_collection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01531.py -- tests/files/web/generated/M16-GAP-01531-operator-object.move_to_collection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01531", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01531", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01532", + "gapId": "operator:object.multires_base_apply", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01532-operator-object.multires_base_apply.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01532.py -- tests/files/web/generated/M16-GAP-01532-operator-object.multires_base_apply.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01532", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01532", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01533", + "gapId": "operator:object.multires_external_pack", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01533-operator-object.multires_external_pack.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01533.py -- tests/files/web/generated/M16-GAP-01533-operator-object.multires_external_pack.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01533", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01533", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01534", + "gapId": "operator:object.multires_external_save", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01534-operator-object.multires_external_save.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01534.py -- tests/files/web/generated/M16-GAP-01534-operator-object.multires_external_save.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01534", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01534", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01535", + "gapId": "operator:object.multires_higher_levels_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01535-operator-object.multires_higher_levels_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01535.py -- tests/files/web/generated/M16-GAP-01535-operator-object.multires_higher_levels_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01535", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01535", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01536", + "gapId": "operator:object.multires_rebuild_subdiv", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01536-operator-object.multires_rebuild_subdiv.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01536.py -- tests/files/web/generated/M16-GAP-01536-operator-object.multires_rebuild_subdiv.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01536", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01536", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01537", + "gapId": "operator:object.multires_reshape", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01537-operator-object.multires_reshape.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01537.py -- tests/files/web/generated/M16-GAP-01537-operator-object.multires_reshape.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01537", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01537", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01538", + "gapId": "operator:object.multires_subdivide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01538-operator-object.multires_subdivide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01538.py -- tests/files/web/generated/M16-GAP-01538-operator-object.multires_subdivide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01538", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01538", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01539", + "gapId": "operator:object.multires_unsubdivide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01539-operator-object.multires_unsubdivide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01539.py -- tests/files/web/generated/M16-GAP-01539-operator-object.multires_unsubdivide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01539", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01539", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01540", + "gapId": "operator:object.ocean_bake", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01540-operator-object.ocean_bake.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01540.py -- tests/files/web/generated/M16-GAP-01540-operator-object.ocean_bake.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01540", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01540", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01541", + "gapId": "operator:object.origin_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01541-operator-object.origin_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01541.py -- tests/files/web/generated/M16-GAP-01541-operator-object.origin_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01541", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01541", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01542", + "gapId": "operator:object.origin_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01542-operator-object.origin_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01542.py -- tests/files/web/generated/M16-GAP-01542-operator-object.origin_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01542", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01542", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01543", + "gapId": "operator:object.parent_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01543-operator-object.parent_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01543.py -- tests/files/web/generated/M16-GAP-01543-operator-object.parent_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01543", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01543", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01544", + "gapId": "operator:object.parent_inverse_apply", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01544-operator-object.parent_inverse_apply.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01544.py -- tests/files/web/generated/M16-GAP-01544-operator-object.parent_inverse_apply.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01544", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01544", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01545", + "gapId": "operator:object.parent_no_inverse_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01545-operator-object.parent_no_inverse_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01545.py -- tests/files/web/generated/M16-GAP-01545-operator-object.parent_no_inverse_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01545", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01545", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01546", + "gapId": "operator:object.parent_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01546-operator-object.parent_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01546.py -- tests/files/web/generated/M16-GAP-01546-operator-object.parent_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01546", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01546", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01547", + "gapId": "operator:object.particle_system_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01547-operator-object.particle_system_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01547.py -- tests/files/web/generated/M16-GAP-01547-operator-object.particle_system_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01547", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01547", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01548", + "gapId": "operator:object.particle_system_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01548-operator-object.particle_system_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01548.py -- tests/files/web/generated/M16-GAP-01548-operator-object.particle_system_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01548", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01548", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01549", + "gapId": "operator:object.paste_transform", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01549-operator-object.paste_transform.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01549.py -- tests/files/web/generated/M16-GAP-01549-operator-object.paste_transform.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01549", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01549", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01550", + "gapId": "operator:object.paths_calculate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01550-operator-object.paths_calculate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01550.py -- tests/files/web/generated/M16-GAP-01550-operator-object.paths_calculate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01550", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01550", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01551", + "gapId": "operator:object.paths_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01551-operator-object.paths_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01551.py -- tests/files/web/generated/M16-GAP-01551-operator-object.paths_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01551", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01551", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01552", + "gapId": "operator:object.paths_update", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01552-operator-object.paths_update.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01552.py -- tests/files/web/generated/M16-GAP-01552-operator-object.paths_update.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01552", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01552", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01553", + "gapId": "operator:object.paths_update_visible", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01553-operator-object.paths_update_visible.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01553.py -- tests/files/web/generated/M16-GAP-01553-operator-object.paths_update_visible.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01553", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01553", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01554", + "gapId": "operator:object.pointcloud_random_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01554-operator-object.pointcloud_random_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01554.py -- tests/files/web/generated/M16-GAP-01554-operator-object.pointcloud_random_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01554", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01554", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01555", + "gapId": "operator:object.posemode_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01555-operator-object.posemode_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01555.py -- tests/files/web/generated/M16-GAP-01555-operator-object.posemode_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01555", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01555", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01556", + "gapId": "operator:object.quadriflow_remesh", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01556-operator-object.quadriflow_remesh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01556.py -- tests/files/web/generated/M16-GAP-01556-operator-object.quadriflow_remesh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01556", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01556", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01557", + "gapId": "operator:object.quick_explode", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01557-operator-object.quick_explode.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01557.py -- tests/files/web/generated/M16-GAP-01557-operator-object.quick_explode.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01557", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01557", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01558", + "gapId": "operator:object.quick_fur", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01558-operator-object.quick_fur.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01558.py -- tests/files/web/generated/M16-GAP-01558-operator-object.quick_fur.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01558", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01558", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01559", + "gapId": "operator:object.quick_liquid", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01559-operator-object.quick_liquid.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01559.py -- tests/files/web/generated/M16-GAP-01559-operator-object.quick_liquid.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01559", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01559", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01560", + "gapId": "operator:object.quick_smoke", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01560-operator-object.quick_smoke.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01560.py -- tests/files/web/generated/M16-GAP-01560-operator-object.quick_smoke.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01560", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01560", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01561", + "gapId": "operator:object.randomize_transform", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01561-operator-object.randomize_transform.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01561.py -- tests/files/web/generated/M16-GAP-01561-operator-object.randomize_transform.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01561", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01561", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01562", + "gapId": "operator:object.reset_override_library", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01562-operator-object.reset_override_library.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01562.py -- tests/files/web/generated/M16-GAP-01562-operator-object.reset_override_library.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01562", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01562", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01563", + "gapId": "operator:object.rotation_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01563-operator-object.rotation_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01563.py -- tests/files/web/generated/M16-GAP-01563-operator-object.rotation_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01563", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01563", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01564", + "gapId": "operator:object.scale_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01564-operator-object.scale_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01564.py -- tests/files/web/generated/M16-GAP-01564-operator-object.scale_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01564", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01564", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01565", + "gapId": "operator:object.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01565-operator-object.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01565.py -- tests/files/web/generated/M16-GAP-01565-operator-object.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01565", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01565", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01566", + "gapId": "operator:object.select_by_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01566-operator-object.select_by_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01566.py -- tests/files/web/generated/M16-GAP-01566-operator-object.select_by_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01566", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01566", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01567", + "gapId": "operator:object.select_camera", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01567-operator-object.select_camera.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01567.py -- tests/files/web/generated/M16-GAP-01567-operator-object.select_camera.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01567", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01567", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01568", + "gapId": "operator:object.select_grouped", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01568-operator-object.select_grouped.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01568.py -- tests/files/web/generated/M16-GAP-01568-operator-object.select_grouped.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01568", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01568", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01569", + "gapId": "operator:object.select_hierarchy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01569-operator-object.select_hierarchy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01569.py -- tests/files/web/generated/M16-GAP-01569-operator-object.select_hierarchy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01569", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01569", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01570", + "gapId": "operator:object.select_less", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01570-operator-object.select_less.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01570.py -- tests/files/web/generated/M16-GAP-01570-operator-object.select_less.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01570", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01570", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01571", + "gapId": "operator:object.select_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01571-operator-object.select_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01571.py -- tests/files/web/generated/M16-GAP-01571-operator-object.select_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01571", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01571", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01572", + "gapId": "operator:object.select_mirror", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01572-operator-object.select_mirror.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01572.py -- tests/files/web/generated/M16-GAP-01572-operator-object.select_mirror.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01572", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01572", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01573", + "gapId": "operator:object.select_more", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01573-operator-object.select_more.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01573.py -- tests/files/web/generated/M16-GAP-01573-operator-object.select_more.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01573", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01573", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01574", + "gapId": "operator:object.select_pattern", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01574-operator-object.select_pattern.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01574.py -- tests/files/web/generated/M16-GAP-01574-operator-object.select_pattern.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01574", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01574", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01575", + "gapId": "operator:object.select_random", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01575-operator-object.select_random.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01575.py -- tests/files/web/generated/M16-GAP-01575-operator-object.select_random.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01575", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01575", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01576", + "gapId": "operator:object.select_same_collection", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01576-operator-object.select_same_collection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01576.py -- tests/files/web/generated/M16-GAP-01576-operator-object.select_same_collection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01576", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01576", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01577", + "gapId": "operator:object.shade_auto_smooth", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01577-operator-object.shade_auto_smooth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01577.py -- tests/files/web/generated/M16-GAP-01577-operator-object.shade_auto_smooth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01577", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01577", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01578", + "gapId": "operator:object.shade_flat", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01578-operator-object.shade_flat.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01578.py -- tests/files/web/generated/M16-GAP-01578-operator-object.shade_flat.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01578", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01578", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01579", + "gapId": "operator:object.shade_smooth", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01579-operator-object.shade_smooth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01579.py -- tests/files/web/generated/M16-GAP-01579-operator-object.shade_smooth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01579", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01579", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01580", + "gapId": "operator:object.shade_smooth_by_angle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01580-operator-object.shade_smooth_by_angle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01580.py -- tests/files/web/generated/M16-GAP-01580-operator-object.shade_smooth_by_angle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01580", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01580", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01581", + "gapId": "operator:object.shaderfx_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01581-operator-object.shaderfx_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01581.py -- tests/files/web/generated/M16-GAP-01581-operator-object.shaderfx_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01581", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01581", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01582", + "gapId": "operator:object.shaderfx_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01582-operator-object.shaderfx_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01582.py -- tests/files/web/generated/M16-GAP-01582-operator-object.shaderfx_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01582", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01582", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01583", + "gapId": "operator:object.shaderfx_move_down", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01583-operator-object.shaderfx_move_down.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01583.py -- tests/files/web/generated/M16-GAP-01583-operator-object.shaderfx_move_down.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01583", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01583", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01584", + "gapId": "operator:object.shaderfx_move_to_index", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01584-operator-object.shaderfx_move_to_index.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01584.py -- tests/files/web/generated/M16-GAP-01584-operator-object.shaderfx_move_to_index.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01584", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01584", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01585", + "gapId": "operator:object.shaderfx_move_up", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01585-operator-object.shaderfx_move_up.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01585.py -- tests/files/web/generated/M16-GAP-01585-operator-object.shaderfx_move_up.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01585", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01585", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01586", + "gapId": "operator:object.shaderfx_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01586-operator-object.shaderfx_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01586.py -- tests/files/web/generated/M16-GAP-01586-operator-object.shaderfx_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01586", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01586", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01587", + "gapId": "operator:object.shape_key_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01587-operator-object.shape_key_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01587.py -- tests/files/web/generated/M16-GAP-01587-operator-object.shape_key_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01587", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01587", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01588", + "gapId": "operator:object.shape_key_apply_to_basis", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01588-operator-object.shape_key_apply_to_basis.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01588.py -- tests/files/web/generated/M16-GAP-01588-operator-object.shape_key_apply_to_basis.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01588", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01588", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01589", + "gapId": "operator:object.shape_key_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01589-operator-object.shape_key_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01589.py -- tests/files/web/generated/M16-GAP-01589-operator-object.shape_key_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01589", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01589", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01590", + "gapId": "operator:object.shape_key_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01590-operator-object.shape_key_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01590.py -- tests/files/web/generated/M16-GAP-01590-operator-object.shape_key_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01590", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01590", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01591", + "gapId": "operator:object.shape_key_lock", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01591-operator-object.shape_key_lock.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01591.py -- tests/files/web/generated/M16-GAP-01591-operator-object.shape_key_lock.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01591", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01591", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01592", + "gapId": "operator:object.shape_key_make_basis", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01592-operator-object.shape_key_make_basis.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01592.py -- tests/files/web/generated/M16-GAP-01592-operator-object.shape_key_make_basis.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01592", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01592", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01593", + "gapId": "operator:object.shape_key_mirror", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01593-operator-object.shape_key_mirror.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01593.py -- tests/files/web/generated/M16-GAP-01593-operator-object.shape_key_mirror.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01593", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01593", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01594", + "gapId": "operator:object.shape_key_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01594-operator-object.shape_key_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01594.py -- tests/files/web/generated/M16-GAP-01594-operator-object.shape_key_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01594", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01594", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01595", + "gapId": "operator:object.shape_key_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01595-operator-object.shape_key_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01595.py -- tests/files/web/generated/M16-GAP-01595-operator-object.shape_key_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01595", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01595", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01596", + "gapId": "operator:object.shape_key_retime", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01596-operator-object.shape_key_retime.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01596.py -- tests/files/web/generated/M16-GAP-01596-operator-object.shape_key_retime.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01596", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01596", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01597", + "gapId": "operator:object.shape_key_transfer", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01597-operator-object.shape_key_transfer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01597.py -- tests/files/web/generated/M16-GAP-01597-operator-object.shape_key_transfer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01597", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01597", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01598", + "gapId": "operator:object.simulation_nodes_cache_bake", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01598-operator-object.simulation_nodes_cache_bake.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01598.py -- tests/files/web/generated/M16-GAP-01598-operator-object.simulation_nodes_cache_bake.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01598", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01598", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01599", + "gapId": "operator:object.simulation_nodes_cache_calculate_to_frame", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01599-operator-object.simulation_nodes_cache_calculate_to_frame.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01599.py -- tests/files/web/generated/M16-GAP-01599-operator-object.simulation_nodes_cache_calculate_to_frame.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01599", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01599", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01600", + "gapId": "operator:object.simulation_nodes_cache_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01600-operator-object.simulation_nodes_cache_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01600.py -- tests/files/web/generated/M16-GAP-01600-operator-object.simulation_nodes_cache_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01600", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01600", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01601", + "gapId": "operator:object.skin_armature_create", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01601-operator-object.skin_armature_create.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01601.py -- tests/files/web/generated/M16-GAP-01601-operator-object.skin_armature_create.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01601", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01601", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01602", + "gapId": "operator:object.skin_loose_mark_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01602-operator-object.skin_loose_mark_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01602.py -- tests/files/web/generated/M16-GAP-01602-operator-object.skin_loose_mark_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01602", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01602", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01603", + "gapId": "operator:object.skin_radii_equalize", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01603-operator-object.skin_radii_equalize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01603.py -- tests/files/web/generated/M16-GAP-01603-operator-object.skin_radii_equalize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01603", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01603", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01604", + "gapId": "operator:object.skin_root_mark", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01604-operator-object.skin_root_mark.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01604.py -- tests/files/web/generated/M16-GAP-01604-operator-object.skin_root_mark.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01604", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01604", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01605", + "gapId": "operator:object.speaker_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01605-operator-object.speaker_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01605.py -- tests/files/web/generated/M16-GAP-01605-operator-object.speaker_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01605", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01605", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01606", + "gapId": "operator:object.subdivision_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01606-operator-object.subdivision_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01606.py -- tests/files/web/generated/M16-GAP-01606-operator-object.subdivision_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01606", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01606", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01607", + "gapId": "operator:object.surfacedeform_bind", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01607-operator-object.surfacedeform_bind.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01607.py -- tests/files/web/generated/M16-GAP-01607-operator-object.surfacedeform_bind.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01607", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01607", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01608", + "gapId": "operator:object.text_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01608-operator-object.text_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01608.py -- tests/files/web/generated/M16-GAP-01608-operator-object.text_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01608", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01608", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01609", + "gapId": "operator:object.track_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01609-operator-object.track_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01609.py -- tests/files/web/generated/M16-GAP-01609-operator-object.track_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01609", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01609", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01610", + "gapId": "operator:object.track_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01610-operator-object.track_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01610.py -- tests/files/web/generated/M16-GAP-01610-operator-object.track_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01610", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01610", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01611", + "gapId": "operator:object.transfer_mode", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01611-operator-object.transfer_mode.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01611.py -- tests/files/web/generated/M16-GAP-01611-operator-object.transfer_mode.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01611", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01611", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01612", + "gapId": "operator:object.transform_apply", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01612-operator-object.transform_apply.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01612.py -- tests/files/web/generated/M16-GAP-01612-operator-object.transform_apply.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01612", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01612", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01613", + "gapId": "operator:object.transform_axis_target", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01613-operator-object.transform_axis_target.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01613.py -- tests/files/web/generated/M16-GAP-01613-operator-object.transform_axis_target.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01613", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01613", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01614", + "gapId": "operator:object.transform_to_mouse", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01614-operator-object.transform_to_mouse.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01614.py -- tests/files/web/generated/M16-GAP-01614-operator-object.transform_to_mouse.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01614", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01614", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01615", + "gapId": "operator:object.transforms_to_deltas", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01615-operator-object.transforms_to_deltas.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01615.py -- tests/files/web/generated/M16-GAP-01615-operator-object.transforms_to_deltas.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01615", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01615", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01616", + "gapId": "operator:object.unlink_data", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01616-operator-object.unlink_data.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01616.py -- tests/files/web/generated/M16-GAP-01616-operator-object.unlink_data.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01616", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01616", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01617", + "gapId": "operator:object.update_shapes", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01617-operator-object.update_shapes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01617.py -- tests/files/web/generated/M16-GAP-01617-operator-object.update_shapes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01617", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01617", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01618", + "gapId": "operator:object.vertex_group_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01618-operator-object.vertex_group_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01618.py -- tests/files/web/generated/M16-GAP-01618-operator-object.vertex_group_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01618", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01618", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01619", + "gapId": "operator:object.vertex_group_assign", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01619-operator-object.vertex_group_assign.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01619.py -- tests/files/web/generated/M16-GAP-01619-operator-object.vertex_group_assign.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01619", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01619", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01620", + "gapId": "operator:object.vertex_group_assign_new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01620-operator-object.vertex_group_assign_new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01620.py -- tests/files/web/generated/M16-GAP-01620-operator-object.vertex_group_assign_new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01620", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01620", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01621", + "gapId": "operator:object.vertex_group_clean", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01621-operator-object.vertex_group_clean.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01621.py -- tests/files/web/generated/M16-GAP-01621-operator-object.vertex_group_clean.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01621", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01621", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01622", + "gapId": "operator:object.vertex_group_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01622-operator-object.vertex_group_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01622.py -- tests/files/web/generated/M16-GAP-01622-operator-object.vertex_group_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01622", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01622", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01623", + "gapId": "operator:object.vertex_group_copy_to_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01623-operator-object.vertex_group_copy_to_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01623.py -- tests/files/web/generated/M16-GAP-01623-operator-object.vertex_group_copy_to_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01623", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01623", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01624", + "gapId": "operator:object.vertex_group_deselect", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01624-operator-object.vertex_group_deselect.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01624.py -- tests/files/web/generated/M16-GAP-01624-operator-object.vertex_group_deselect.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01624", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01624", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01625", + "gapId": "operator:object.vertex_group_invert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01625-operator-object.vertex_group_invert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01625.py -- tests/files/web/generated/M16-GAP-01625-operator-object.vertex_group_invert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01625", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01625", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01626", + "gapId": "operator:object.vertex_group_levels", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01626-operator-object.vertex_group_levels.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01626.py -- tests/files/web/generated/M16-GAP-01626-operator-object.vertex_group_levels.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01626", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01626", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01627", + "gapId": "operator:object.vertex_group_limit_total", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01627-operator-object.vertex_group_limit_total.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01627.py -- tests/files/web/generated/M16-GAP-01627-operator-object.vertex_group_limit_total.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01627", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01627", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01628", + "gapId": "operator:object.vertex_group_lock", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01628-operator-object.vertex_group_lock.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01628.py -- tests/files/web/generated/M16-GAP-01628-operator-object.vertex_group_lock.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01628", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01628", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01629", + "gapId": "operator:object.vertex_group_mirror", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01629-operator-object.vertex_group_mirror.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01629.py -- tests/files/web/generated/M16-GAP-01629-operator-object.vertex_group_mirror.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01629", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01629", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01630", + "gapId": "operator:object.vertex_group_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01630-operator-object.vertex_group_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01630.py -- tests/files/web/generated/M16-GAP-01630-operator-object.vertex_group_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01630", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01630", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01631", + "gapId": "operator:object.vertex_group_normalize", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01631-operator-object.vertex_group_normalize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01631.py -- tests/files/web/generated/M16-GAP-01631-operator-object.vertex_group_normalize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01631", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01631", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01632", + "gapId": "operator:object.vertex_group_normalize_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01632-operator-object.vertex_group_normalize_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01632.py -- tests/files/web/generated/M16-GAP-01632-operator-object.vertex_group_normalize_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01632", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01632", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01633", + "gapId": "operator:object.vertex_group_quantize", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01633-operator-object.vertex_group_quantize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01633.py -- tests/files/web/generated/M16-GAP-01633-operator-object.vertex_group_quantize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01633", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01633", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01634", + "gapId": "operator:object.vertex_group_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01634-operator-object.vertex_group_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01634.py -- tests/files/web/generated/M16-GAP-01634-operator-object.vertex_group_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01634", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01634", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01635", + "gapId": "operator:object.vertex_group_remove_from", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01635-operator-object.vertex_group_remove_from.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01635.py -- tests/files/web/generated/M16-GAP-01635-operator-object.vertex_group_remove_from.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01635", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01635", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01636", + "gapId": "operator:object.vertex_group_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01636-operator-object.vertex_group_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01636.py -- tests/files/web/generated/M16-GAP-01636-operator-object.vertex_group_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01636", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01636", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01637", + "gapId": "operator:object.vertex_group_set_active", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01637-operator-object.vertex_group_set_active.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01637.py -- tests/files/web/generated/M16-GAP-01637-operator-object.vertex_group_set_active.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01637", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01637", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01638", + "gapId": "operator:object.vertex_group_smooth", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01638-operator-object.vertex_group_smooth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01638.py -- tests/files/web/generated/M16-GAP-01638-operator-object.vertex_group_smooth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01638", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01638", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01639", + "gapId": "operator:object.vertex_group_sort", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01639-operator-object.vertex_group_sort.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01639.py -- tests/files/web/generated/M16-GAP-01639-operator-object.vertex_group_sort.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01639", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01639", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01640", + "gapId": "operator:object.vertex_parent_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01640-operator-object.vertex_parent_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01640.py -- tests/files/web/generated/M16-GAP-01640-operator-object.vertex_parent_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01640", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01640", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01641", + "gapId": "operator:object.vertex_weight_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01641-operator-object.vertex_weight_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01641.py -- tests/files/web/generated/M16-GAP-01641-operator-object.vertex_weight_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01641", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01641", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01642", + "gapId": "operator:object.vertex_weight_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01642-operator-object.vertex_weight_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01642.py -- tests/files/web/generated/M16-GAP-01642-operator-object.vertex_weight_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01642", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01642", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01643", + "gapId": "operator:object.vertex_weight_normalize_active_vertex", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01643-operator-object.vertex_weight_normalize_active_vertex.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01643.py -- tests/files/web/generated/M16-GAP-01643-operator-object.vertex_weight_normalize_active_vertex.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01643", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01643", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01644", + "gapId": "operator:object.vertex_weight_paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01644-operator-object.vertex_weight_paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01644.py -- tests/files/web/generated/M16-GAP-01644-operator-object.vertex_weight_paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01644", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01644", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01645", + "gapId": "operator:object.vertex_weight_set_active", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01645-operator-object.vertex_weight_set_active.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01645.py -- tests/files/web/generated/M16-GAP-01645-operator-object.vertex_weight_set_active.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01645", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01645", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01646", + "gapId": "operator:object.visual_geometry_to_objects", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01646-operator-object.visual_geometry_to_objects.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01646.py -- tests/files/web/generated/M16-GAP-01646-operator-object.visual_geometry_to_objects.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01646", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01646", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01647", + "gapId": "operator:object.visual_transform_apply", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01647-operator-object.visual_transform_apply.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01647.py -- tests/files/web/generated/M16-GAP-01647-operator-object.visual_transform_apply.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01647", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01647", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01648", + "gapId": "operator:object.volume_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01648-operator-object.volume_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01648.py -- tests/files/web/generated/M16-GAP-01648-operator-object.volume_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01648", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01648", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01649", + "gapId": "operator:object.volume_import", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01649-operator-object.volume_import.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01649.py -- tests/files/web/generated/M16-GAP-01649-operator-object.volume_import.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01649", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01649", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01650", + "gapId": "operator:object.voxel_remesh", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01650-operator-object.voxel_remesh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01650.py -- tests/files/web/generated/M16-GAP-01650-operator-object.voxel_remesh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01650", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01650", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01651", + "gapId": "operator:object.voxel_size_edit", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01651-operator-object.voxel_size_edit.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01651.py -- tests/files/web/generated/M16-GAP-01651-operator-object.voxel_size_edit.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01651", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01651", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01652", + "gapId": "operator:outliner.action_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01652-operator-outliner.action_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01652.py -- tests/files/web/generated/M16-GAP-01652-operator-outliner.action_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01652", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01652", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01653", + "gapId": "operator:outliner.animdata_operation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01653-operator-outliner.animdata_operation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01653.py -- tests/files/web/generated/M16-GAP-01653-operator-outliner.animdata_operation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01653", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01653", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01654", + "gapId": "operator:outliner.clear_filter", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01654-operator-outliner.clear_filter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01654.py -- tests/files/web/generated/M16-GAP-01654-operator-outliner.clear_filter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01654", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01654", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01655", + "gapId": "operator:outliner.collection_color_tag_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01655-operator-outliner.collection_color_tag_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01655.py -- tests/files/web/generated/M16-GAP-01655-operator-outliner.collection_color_tag_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01655", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01655", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01656", + "gapId": "operator:outliner.collection_disable", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01656-operator-outliner.collection_disable.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01656.py -- tests/files/web/generated/M16-GAP-01656-operator-outliner.collection_disable.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01656", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01656", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01657", + "gapId": "operator:outliner.collection_disable_render", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01657-operator-outliner.collection_disable_render.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01657.py -- tests/files/web/generated/M16-GAP-01657-operator-outliner.collection_disable_render.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01657", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01657", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01658", + "gapId": "operator:outliner.collection_drop", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01658-operator-outliner.collection_drop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01658.py -- tests/files/web/generated/M16-GAP-01658-operator-outliner.collection_drop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01658", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01658", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01659", + "gapId": "operator:outliner.collection_duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01659-operator-outliner.collection_duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01659.py -- tests/files/web/generated/M16-GAP-01659-operator-outliner.collection_duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01659", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01659", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01660", + "gapId": "operator:outliner.collection_duplicate_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01660-operator-outliner.collection_duplicate_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01660.py -- tests/files/web/generated/M16-GAP-01660-operator-outliner.collection_duplicate_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01660", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01660", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01661", + "gapId": "operator:outliner.collection_enable", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01661-operator-outliner.collection_enable.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01661.py -- tests/files/web/generated/M16-GAP-01661-operator-outliner.collection_enable.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01661", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01661", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01662", + "gapId": "operator:outliner.collection_enable_render", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01662-operator-outliner.collection_enable_render.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01662.py -- tests/files/web/generated/M16-GAP-01662-operator-outliner.collection_enable_render.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01662", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01662", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01663", + "gapId": "operator:outliner.collection_exclude_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01663-operator-outliner.collection_exclude_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01663.py -- tests/files/web/generated/M16-GAP-01663-operator-outliner.collection_exclude_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01663", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01663", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01664", + "gapId": "operator:outliner.collection_exclude_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01664-operator-outliner.collection_exclude_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01664.py -- tests/files/web/generated/M16-GAP-01664-operator-outliner.collection_exclude_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01664", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01664", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01665", + "gapId": "operator:outliner.collection_hide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01665-operator-outliner.collection_hide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01665.py -- tests/files/web/generated/M16-GAP-01665-operator-outliner.collection_hide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01665", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01665", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01666", + "gapId": "operator:outliner.collection_hide_inside", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01666-operator-outliner.collection_hide_inside.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01666.py -- tests/files/web/generated/M16-GAP-01666-operator-outliner.collection_hide_inside.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01666", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01666", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01667", + "gapId": "operator:outliner.collection_hierarchy_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01667-operator-outliner.collection_hierarchy_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01667.py -- tests/files/web/generated/M16-GAP-01667-operator-outliner.collection_hierarchy_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01667", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01667", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01668", + "gapId": "operator:outliner.collection_holdout_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01668-operator-outliner.collection_holdout_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01668.py -- tests/files/web/generated/M16-GAP-01668-operator-outliner.collection_holdout_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01668", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01668", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01669", + "gapId": "operator:outliner.collection_holdout_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01669-operator-outliner.collection_holdout_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01669.py -- tests/files/web/generated/M16-GAP-01669-operator-outliner.collection_holdout_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01669", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01669", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01670", + "gapId": "operator:outliner.collection_indirect_only_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01670-operator-outliner.collection_indirect_only_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01670.py -- tests/files/web/generated/M16-GAP-01670-operator-outliner.collection_indirect_only_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01670", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01670", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01671", + "gapId": "operator:outliner.collection_indirect_only_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01671-operator-outliner.collection_indirect_only_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01671.py -- tests/files/web/generated/M16-GAP-01671-operator-outliner.collection_indirect_only_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01671", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01671", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01672", + "gapId": "operator:outliner.collection_instance", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01672-operator-outliner.collection_instance.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01672.py -- tests/files/web/generated/M16-GAP-01672-operator-outliner.collection_instance.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01672", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01672", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01673", + "gapId": "operator:outliner.collection_isolate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01673-operator-outliner.collection_isolate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01673.py -- tests/files/web/generated/M16-GAP-01673-operator-outliner.collection_isolate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01673", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01673", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01674", + "gapId": "operator:outliner.collection_link", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01674-operator-outliner.collection_link.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01674.py -- tests/files/web/generated/M16-GAP-01674-operator-outliner.collection_link.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01674", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01674", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01675", + "gapId": "operator:outliner.collection_new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01675-operator-outliner.collection_new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01675.py -- tests/files/web/generated/M16-GAP-01675-operator-outliner.collection_new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01675", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01675", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01676", + "gapId": "operator:outliner.collection_objects_deselect", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01676-operator-outliner.collection_objects_deselect.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01676.py -- tests/files/web/generated/M16-GAP-01676-operator-outliner.collection_objects_deselect.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01676", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01676", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01677", + "gapId": "operator:outliner.collection_objects_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01677-operator-outliner.collection_objects_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01677.py -- tests/files/web/generated/M16-GAP-01677-operator-outliner.collection_objects_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01677", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01677", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01678", + "gapId": "operator:outliner.collection_show", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01678-operator-outliner.collection_show.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01678.py -- tests/files/web/generated/M16-GAP-01678-operator-outliner.collection_show.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01678", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01678", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01679", + "gapId": "operator:outliner.collection_show_inside", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01679-operator-outliner.collection_show_inside.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01679.py -- tests/files/web/generated/M16-GAP-01679-operator-outliner.collection_show_inside.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01679", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01679", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01680", + "gapId": "operator:outliner.constraint_operation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01680-operator-outliner.constraint_operation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01680.py -- tests/files/web/generated/M16-GAP-01680-operator-outliner.constraint_operation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01680", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01680", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01681", + "gapId": "operator:outliner.data_operation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01681-operator-outliner.data_operation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01681.py -- tests/files/web/generated/M16-GAP-01681-operator-outliner.data_operation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01681", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01681", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01682", + "gapId": "operator:outliner.datastack_drop", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01682-operator-outliner.datastack_drop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01682.py -- tests/files/web/generated/M16-GAP-01682-operator-outliner.datastack_drop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01682", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01682", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01683", + "gapId": "operator:outliner.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01683-operator-outliner.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01683.py -- tests/files/web/generated/M16-GAP-01683-operator-outliner.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01683", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01683", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01684", + "gapId": "operator:outliner.drivers_add_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01684-operator-outliner.drivers_add_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01684.py -- tests/files/web/generated/M16-GAP-01684-operator-outliner.drivers_add_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01684", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01684", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01685", + "gapId": "operator:outliner.drivers_delete_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01685-operator-outliner.drivers_delete_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01685.py -- tests/files/web/generated/M16-GAP-01685-operator-outliner.drivers_delete_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01685", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01685", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01686", + "gapId": "operator:outliner.expanded_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01686-operator-outliner.expanded_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01686.py -- tests/files/web/generated/M16-GAP-01686-operator-outliner.expanded_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01686", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01686", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01687", + "gapId": "operator:outliner.hide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01687-operator-outliner.hide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01687.py -- tests/files/web/generated/M16-GAP-01687-operator-outliner.hide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01687", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01687", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01688", + "gapId": "operator:outliner.highlight_update", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01688-operator-outliner.highlight_update.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01688.py -- tests/files/web/generated/M16-GAP-01688-operator-outliner.highlight_update.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01688", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01688", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01689", + "gapId": "operator:outliner.id_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01689-operator-outliner.id_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01689.py -- tests/files/web/generated/M16-GAP-01689-operator-outliner.id_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01689", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01689", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01690", + "gapId": "operator:outliner.id_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01690-operator-outliner.id_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01690.py -- tests/files/web/generated/M16-GAP-01690-operator-outliner.id_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01690", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01690", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01691", + "gapId": "operator:outliner.id_linked_relocate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01691-operator-outliner.id_linked_relocate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01691.py -- tests/files/web/generated/M16-GAP-01691-operator-outliner.id_linked_relocate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01691", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01691", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01692", + "gapId": "operator:outliner.id_operation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01692-operator-outliner.id_operation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01692.py -- tests/files/web/generated/M16-GAP-01692-operator-outliner.id_operation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01692", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01692", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01693", + "gapId": "operator:outliner.id_paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01693-operator-outliner.id_paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01693.py -- tests/files/web/generated/M16-GAP-01693-operator-outliner.id_paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01693", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01693", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01694", + "gapId": "operator:outliner.id_remap", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01694-operator-outliner.id_remap.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01694.py -- tests/files/web/generated/M16-GAP-01694-operator-outliner.id_remap.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01694", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01694", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01695", + "gapId": "operator:outliner.item_activate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01695-operator-outliner.item_activate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01695.py -- tests/files/web/generated/M16-GAP-01695-operator-outliner.item_activate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01695", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01695", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01696", + "gapId": "operator:outliner.item_drag_drop", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01696-operator-outliner.item_drag_drop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01696.py -- tests/files/web/generated/M16-GAP-01696-operator-outliner.item_drag_drop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01696", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01696", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01697", + "gapId": "operator:outliner.item_openclose", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01697-operator-outliner.item_openclose.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01697.py -- tests/files/web/generated/M16-GAP-01697-operator-outliner.item_openclose.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01697", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01697", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01698", + "gapId": "operator:outliner.item_rename", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01698-operator-outliner.item_rename.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01698.py -- tests/files/web/generated/M16-GAP-01698-operator-outliner.item_rename.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01698", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01698", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01699", + "gapId": "operator:outliner.keyingset_add_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01699-operator-outliner.keyingset_add_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01699.py -- tests/files/web/generated/M16-GAP-01699-operator-outliner.keyingset_add_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01699", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01699", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01700", + "gapId": "operator:outliner.keyingset_remove_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01700-operator-outliner.keyingset_remove_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01700.py -- tests/files/web/generated/M16-GAP-01700-operator-outliner.keyingset_remove_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01700", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01700", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01701", + "gapId": "operator:outliner.lib_operation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01701-operator-outliner.lib_operation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01701.py -- tests/files/web/generated/M16-GAP-01701-operator-outliner.lib_operation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01701", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01701", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01702", + "gapId": "operator:outliner.lib_relocate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01702-operator-outliner.lib_relocate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01702.py -- tests/files/web/generated/M16-GAP-01702-operator-outliner.lib_relocate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01702", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01702", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01703", + "gapId": "operator:outliner.liboverride_operation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01703-operator-outliner.liboverride_operation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01703.py -- tests/files/web/generated/M16-GAP-01703-operator-outliner.liboverride_operation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01703", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01703", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01704", + "gapId": "operator:outliner.liboverride_property_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01704-operator-outliner.liboverride_property_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01704.py -- tests/files/web/generated/M16-GAP-01704-operator-outliner.liboverride_property_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01704", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01704", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01705", + "gapId": "operator:outliner.liboverride_troubleshoot_operation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01705-operator-outliner.liboverride_troubleshoot_operation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01705.py -- tests/files/web/generated/M16-GAP-01705-operator-outliner.liboverride_troubleshoot_operation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01705", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01705", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01706", + "gapId": "operator:outliner.material_drop", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01706-operator-outliner.material_drop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01706.py -- tests/files/web/generated/M16-GAP-01706-operator-outliner.material_drop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01706", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01706", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01707", + "gapId": "operator:outliner.modifier_operation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01707-operator-outliner.modifier_operation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01707.py -- tests/files/web/generated/M16-GAP-01707-operator-outliner.modifier_operation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01707", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01707", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01708", + "gapId": "operator:outliner.object_operation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01708-operator-outliner.object_operation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01708.py -- tests/files/web/generated/M16-GAP-01708-operator-outliner.object_operation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01708", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01708", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01709", + "gapId": "operator:outliner.operation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01709-operator-outliner.operation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01709.py -- tests/files/web/generated/M16-GAP-01709-operator-outliner.operation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01709", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01709", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01710", + "gapId": "operator:outliner.orphans_manage", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01710-operator-outliner.orphans_manage.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01710.py -- tests/files/web/generated/M16-GAP-01710-operator-outliner.orphans_manage.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01710", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01710", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01711", + "gapId": "operator:outliner.orphans_purge", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01711-operator-outliner.orphans_purge.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01711.py -- tests/files/web/generated/M16-GAP-01711-operator-outliner.orphans_purge.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01711", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01711", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01712", + "gapId": "operator:outliner.parent_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01712-operator-outliner.parent_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01712.py -- tests/files/web/generated/M16-GAP-01712-operator-outliner.parent_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01712", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01712", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01713", + "gapId": "operator:outliner.parent_drop", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01713-operator-outliner.parent_drop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01713.py -- tests/files/web/generated/M16-GAP-01713-operator-outliner.parent_drop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01713", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01713", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01714", + "gapId": "operator:outliner.scene_drop", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01714-operator-outliner.scene_drop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01714.py -- tests/files/web/generated/M16-GAP-01714-operator-outliner.scene_drop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01714", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01714", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01715", + "gapId": "operator:outliner.scene_operation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01715-operator-outliner.scene_operation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01715.py -- tests/files/web/generated/M16-GAP-01715-operator-outliner.scene_operation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01715", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01715", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01716", + "gapId": "operator:outliner.scroll_page", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01716-operator-outliner.scroll_page.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01716.py -- tests/files/web/generated/M16-GAP-01716-operator-outliner.scroll_page.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01716", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01716", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01717", + "gapId": "operator:outliner.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01717-operator-outliner.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01717.py -- tests/files/web/generated/M16-GAP-01717-operator-outliner.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01717", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01717", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01718", + "gapId": "operator:outliner.select_box", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01718-operator-outliner.select_box.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01718.py -- tests/files/web/generated/M16-GAP-01718-operator-outliner.select_box.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01718", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01718", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01719", + "gapId": "operator:outliner.select_walk", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01719-operator-outliner.select_walk.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01719.py -- tests/files/web/generated/M16-GAP-01719-operator-outliner.select_walk.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01719", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01719", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01720", + "gapId": "operator:outliner.show_active", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01720-operator-outliner.show_active.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01720.py -- tests/files/web/generated/M16-GAP-01720-operator-outliner.show_active.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01720", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01720", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01721", + "gapId": "operator:outliner.show_hierarchy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01721-operator-outliner.show_hierarchy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01721.py -- tests/files/web/generated/M16-GAP-01721-operator-outliner.show_hierarchy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01721", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01721", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01722", + "gapId": "operator:outliner.show_one_level", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01722-operator-outliner.show_one_level.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01722.py -- tests/files/web/generated/M16-GAP-01722-operator-outliner.show_one_level.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01722", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01722", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01723", + "gapId": "operator:outliner.start_filter", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01723-operator-outliner.start_filter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01723.py -- tests/files/web/generated/M16-GAP-01723-operator-outliner.start_filter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01723", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01723", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01724", + "gapId": "operator:outliner.unhide_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01724-operator-outliner.unhide_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01724.py -- tests/files/web/generated/M16-GAP-01724-operator-outliner.unhide_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01724", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01724", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01725", + "gapId": "operator:paint.add_simple_uvs", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01725-operator-paint.add_simple_uvs.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01725.py -- tests/files/web/generated/M16-GAP-01725-operator-paint.add_simple_uvs.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01725", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01725", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01726", + "gapId": "operator:paint.add_texture_paint_slot", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01726-operator-paint.add_texture_paint_slot.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01726.py -- tests/files/web/generated/M16-GAP-01726-operator-paint.add_texture_paint_slot.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01726", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01726", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01727", + "gapId": "operator:paint.brush_colors_flip", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01727-operator-paint.brush_colors_flip.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01727.py -- tests/files/web/generated/M16-GAP-01727-operator-paint.brush_colors_flip.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01727", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01727", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01728", + "gapId": "operator:paint.face_select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01728-operator-paint.face_select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01728.py -- tests/files/web/generated/M16-GAP-01728-operator-paint.face_select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01728", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01728", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01729", + "gapId": "operator:paint.face_select_hide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01729-operator-paint.face_select_hide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01729.py -- tests/files/web/generated/M16-GAP-01729-operator-paint.face_select_hide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01729", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01729", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01730", + "gapId": "operator:paint.face_select_less", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01730-operator-paint.face_select_less.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01730.py -- tests/files/web/generated/M16-GAP-01730-operator-paint.face_select_less.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01730", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01730", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01731", + "gapId": "operator:paint.face_select_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01731-operator-paint.face_select_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01731.py -- tests/files/web/generated/M16-GAP-01731-operator-paint.face_select_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01731", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01731", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01732", + "gapId": "operator:paint.face_select_linked_pick", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01732-operator-paint.face_select_linked_pick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01732.py -- tests/files/web/generated/M16-GAP-01732-operator-paint.face_select_linked_pick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01732", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01732", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01733", + "gapId": "operator:paint.face_select_loop", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01733-operator-paint.face_select_loop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01733.py -- tests/files/web/generated/M16-GAP-01733-operator-paint.face_select_loop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01733", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01733", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01734", + "gapId": "operator:paint.face_select_more", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01734-operator-paint.face_select_more.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01734.py -- tests/files/web/generated/M16-GAP-01734-operator-paint.face_select_more.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01734", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01734", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01735", + "gapId": "operator:paint.face_vert_reveal", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01735-operator-paint.face_vert_reveal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01735.py -- tests/files/web/generated/M16-GAP-01735-operator-paint.face_vert_reveal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01735", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01735", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01736", + "gapId": "operator:paint.grab_clone", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01736-operator-paint.grab_clone.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01736.py -- tests/files/web/generated/M16-GAP-01736-operator-paint.grab_clone.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01736", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01736", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01737", + "gapId": "operator:paint.hide_show", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01737-operator-paint.hide_show.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01737.py -- tests/files/web/generated/M16-GAP-01737-operator-paint.hide_show.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01737", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01737", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01738", + "gapId": "operator:paint.hide_show_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01738-operator-paint.hide_show_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01738.py -- tests/files/web/generated/M16-GAP-01738-operator-paint.hide_show_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01738", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01738", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01739", + "gapId": "operator:paint.hide_show_lasso_gesture", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01739-operator-paint.hide_show_lasso_gesture.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01739.py -- tests/files/web/generated/M16-GAP-01739-operator-paint.hide_show_lasso_gesture.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01739", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01739", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01740", + "gapId": "operator:paint.hide_show_line_gesture", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01740-operator-paint.hide_show_line_gesture.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01740.py -- tests/files/web/generated/M16-GAP-01740-operator-paint.hide_show_line_gesture.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01740", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01740", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01741", + "gapId": "operator:paint.hide_show_masked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01741-operator-paint.hide_show_masked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01741.py -- tests/files/web/generated/M16-GAP-01741-operator-paint.hide_show_masked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01741", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01741", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01742", + "gapId": "operator:paint.hide_show_polyline_gesture", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01742-operator-paint.hide_show_polyline_gesture.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01742.py -- tests/files/web/generated/M16-GAP-01742-operator-paint.hide_show_polyline_gesture.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01742", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01742", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01743", + "gapId": "operator:paint.image_from_view", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01743-operator-paint.image_from_view.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01743.py -- tests/files/web/generated/M16-GAP-01743-operator-paint.image_from_view.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01743", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01743", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01744", + "gapId": "operator:paint.image_paint", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01744-operator-paint.image_paint.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01744.py -- tests/files/web/generated/M16-GAP-01744-operator-paint.image_paint.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01744", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01744", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01745", + "gapId": "operator:paint.mask_box_gesture", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01745-operator-paint.mask_box_gesture.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01745.py -- tests/files/web/generated/M16-GAP-01745-operator-paint.mask_box_gesture.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01745", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01745", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01746", + "gapId": "operator:paint.mask_flood_fill", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01746-operator-paint.mask_flood_fill.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01746.py -- tests/files/web/generated/M16-GAP-01746-operator-paint.mask_flood_fill.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01746", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01746", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01747", + "gapId": "operator:paint.mask_lasso_gesture", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01747-operator-paint.mask_lasso_gesture.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01747.py -- tests/files/web/generated/M16-GAP-01747-operator-paint.mask_lasso_gesture.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01747", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01747", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01748", + "gapId": "operator:paint.mask_line_gesture", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01748-operator-paint.mask_line_gesture.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01748.py -- tests/files/web/generated/M16-GAP-01748-operator-paint.mask_line_gesture.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01748", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01748", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01749", + "gapId": "operator:paint.mask_polyline_gesture", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01749-operator-paint.mask_polyline_gesture.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01749.py -- tests/files/web/generated/M16-GAP-01749-operator-paint.mask_polyline_gesture.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01749", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01749", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01750", + "gapId": "operator:paint.project_image", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01750-operator-paint.project_image.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01750.py -- tests/files/web/generated/M16-GAP-01750-operator-paint.project_image.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01750", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01750", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01751", + "gapId": "operator:paint.sample_color", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01751-operator-paint.sample_color.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01751.py -- tests/files/web/generated/M16-GAP-01751-operator-paint.sample_color.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01751", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01751", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01752", + "gapId": "operator:paint.texture_paint_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01752-operator-paint.texture_paint_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01752.py -- tests/files/web/generated/M16-GAP-01752-operator-paint.texture_paint_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01752", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01752", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01753", + "gapId": "operator:paint.vert_select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01753-operator-paint.vert_select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01753.py -- tests/files/web/generated/M16-GAP-01753-operator-paint.vert_select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01753", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01753", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01754", + "gapId": "operator:paint.vert_select_hide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01754-operator-paint.vert_select_hide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01754.py -- tests/files/web/generated/M16-GAP-01754-operator-paint.vert_select_hide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01754", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01754", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01755", + "gapId": "operator:paint.vert_select_less", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01755-operator-paint.vert_select_less.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01755.py -- tests/files/web/generated/M16-GAP-01755-operator-paint.vert_select_less.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01755", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01755", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01756", + "gapId": "operator:paint.vert_select_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01756-operator-paint.vert_select_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01756.py -- tests/files/web/generated/M16-GAP-01756-operator-paint.vert_select_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01756", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01756", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01757", + "gapId": "operator:paint.vert_select_linked_pick", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01757-operator-paint.vert_select_linked_pick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01757.py -- tests/files/web/generated/M16-GAP-01757-operator-paint.vert_select_linked_pick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01757", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01757", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01758", + "gapId": "operator:paint.vert_select_loop", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01758-operator-paint.vert_select_loop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01758.py -- tests/files/web/generated/M16-GAP-01758-operator-paint.vert_select_loop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01758", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01758", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01759", + "gapId": "operator:paint.vert_select_more", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01759-operator-paint.vert_select_more.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01759.py -- tests/files/web/generated/M16-GAP-01759-operator-paint.vert_select_more.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01759", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01759", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01760", + "gapId": "operator:paint.vert_select_ungrouped", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01760-operator-paint.vert_select_ungrouped.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01760.py -- tests/files/web/generated/M16-GAP-01760-operator-paint.vert_select_ungrouped.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01760", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01760", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01761", + "gapId": "operator:paint.vertex_color_brightness_contrast", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01761-operator-paint.vertex_color_brightness_contrast.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01761.py -- tests/files/web/generated/M16-GAP-01761-operator-paint.vertex_color_brightness_contrast.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01761", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01761", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01762", + "gapId": "operator:paint.vertex_color_dirt", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01762-operator-paint.vertex_color_dirt.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01762.py -- tests/files/web/generated/M16-GAP-01762-operator-paint.vertex_color_dirt.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01762", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01762", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01763", + "gapId": "operator:paint.vertex_color_from_weight", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01763-operator-paint.vertex_color_from_weight.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01763.py -- tests/files/web/generated/M16-GAP-01763-operator-paint.vertex_color_from_weight.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01763", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01763", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01764", + "gapId": "operator:paint.vertex_color_hsv", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01764-operator-paint.vertex_color_hsv.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01764.py -- tests/files/web/generated/M16-GAP-01764-operator-paint.vertex_color_hsv.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01764", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01764", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01765", + "gapId": "operator:paint.vertex_color_invert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01765-operator-paint.vertex_color_invert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01765.py -- tests/files/web/generated/M16-GAP-01765-operator-paint.vertex_color_invert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01765", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01765", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01766", + "gapId": "operator:paint.vertex_color_levels", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01766-operator-paint.vertex_color_levels.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01766.py -- tests/files/web/generated/M16-GAP-01766-operator-paint.vertex_color_levels.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01766", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01766", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01767", + "gapId": "operator:paint.vertex_color_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01767-operator-paint.vertex_color_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01767.py -- tests/files/web/generated/M16-GAP-01767-operator-paint.vertex_color_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01767", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01767", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01768", + "gapId": "operator:paint.vertex_color_smooth", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01768-operator-paint.vertex_color_smooth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01768.py -- tests/files/web/generated/M16-GAP-01768-operator-paint.vertex_color_smooth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01768", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01768", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01769", + "gapId": "operator:paint.vertex_paint", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01769-operator-paint.vertex_paint.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01769.py -- tests/files/web/generated/M16-GAP-01769-operator-paint.vertex_paint.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01769", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01769", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01770", + "gapId": "operator:paint.vertex_paint_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01770-operator-paint.vertex_paint_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01770.py -- tests/files/web/generated/M16-GAP-01770-operator-paint.vertex_paint_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01770", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01770", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01771", + "gapId": "operator:paint.visibility_filter", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01771-operator-paint.visibility_filter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01771.py -- tests/files/web/generated/M16-GAP-01771-operator-paint.visibility_filter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01771", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01771", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01772", + "gapId": "operator:paint.visibility_invert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01772-operator-paint.visibility_invert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01772.py -- tests/files/web/generated/M16-GAP-01772-operator-paint.visibility_invert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01772", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01772", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01773", + "gapId": "operator:paint.weight_from_bones", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01773-operator-paint.weight_from_bones.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01773.py -- tests/files/web/generated/M16-GAP-01773-operator-paint.weight_from_bones.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01773", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01773", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01774", + "gapId": "operator:paint.weight_gradient", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01774-operator-paint.weight_gradient.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01774.py -- tests/files/web/generated/M16-GAP-01774-operator-paint.weight_gradient.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01774", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01774", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01775", + "gapId": "operator:paint.weight_paint", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01775-operator-paint.weight_paint.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01775.py -- tests/files/web/generated/M16-GAP-01775-operator-paint.weight_paint.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01775", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01775", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01776", + "gapId": "operator:paint.weight_paint_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01776-operator-paint.weight_paint_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01776.py -- tests/files/web/generated/M16-GAP-01776-operator-paint.weight_paint_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01776", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01776", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01777", + "gapId": "operator:paint.weight_sample", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01777-operator-paint.weight_sample.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01777.py -- tests/files/web/generated/M16-GAP-01777-operator-paint.weight_sample.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01777", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01777", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01778", + "gapId": "operator:paint.weight_sample_group", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01778-operator-paint.weight_sample_group.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01778.py -- tests/files/web/generated/M16-GAP-01778-operator-paint.weight_sample_group.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01778", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01778", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01779", + "gapId": "operator:paint.weight_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01779-operator-paint.weight_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01779.py -- tests/files/web/generated/M16-GAP-01779-operator-paint.weight_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01779", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01779", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01780", + "gapId": "operator:paintcurve.add_point", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01780-operator-paintcurve.add_point.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01780.py -- tests/files/web/generated/M16-GAP-01780-operator-paintcurve.add_point.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01780", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01780", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01781", + "gapId": "operator:paintcurve.add_point_slide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01781-operator-paintcurve.add_point_slide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01781.py -- tests/files/web/generated/M16-GAP-01781-operator-paintcurve.add_point_slide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01781", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01781", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01782", + "gapId": "operator:paintcurve.cursor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01782-operator-paintcurve.cursor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01782.py -- tests/files/web/generated/M16-GAP-01782-operator-paintcurve.cursor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01782", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01782", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01783", + "gapId": "operator:paintcurve.delete_point", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01783-operator-paintcurve.delete_point.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01783.py -- tests/files/web/generated/M16-GAP-01783-operator-paintcurve.delete_point.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01783", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01783", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01784", + "gapId": "operator:paintcurve.draw", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01784-operator-paintcurve.draw.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01784.py -- tests/files/web/generated/M16-GAP-01784-operator-paintcurve.draw.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01784", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01784", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01785", + "gapId": "operator:paintcurve.new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01785-operator-paintcurve.new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01785.py -- tests/files/web/generated/M16-GAP-01785-operator-paintcurve.new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01785", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01785", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01786", + "gapId": "operator:paintcurve.select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01786-operator-paintcurve.select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01786.py -- tests/files/web/generated/M16-GAP-01786-operator-paintcurve.select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01786", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01786", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01787", + "gapId": "operator:paintcurve.slide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01787-operator-paintcurve.slide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01787.py -- tests/files/web/generated/M16-GAP-01787-operator-paintcurve.slide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01787", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01787", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01788", + "gapId": "operator:palette.color_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01788-operator-palette.color_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01788.py -- tests/files/web/generated/M16-GAP-01788-operator-palette.color_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01788", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01788", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01789", + "gapId": "operator:palette.color_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01789-operator-palette.color_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01789.py -- tests/files/web/generated/M16-GAP-01789-operator-palette.color_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01789", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01789", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01790", + "gapId": "operator:palette.color_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01790-operator-palette.color_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01790.py -- tests/files/web/generated/M16-GAP-01790-operator-palette.color_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01790", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01790", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01791", + "gapId": "operator:palette.extract_from_image", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01791-operator-palette.extract_from_image.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01791.py -- tests/files/web/generated/M16-GAP-01791-operator-palette.extract_from_image.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01791", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01791", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01792", + "gapId": "operator:palette.join", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01792-operator-palette.join.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01792.py -- tests/files/web/generated/M16-GAP-01792-operator-palette.join.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01792", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01792", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01793", + "gapId": "operator:palette.new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01793-operator-palette.new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01793.py -- tests/files/web/generated/M16-GAP-01793-operator-palette.new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01793", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01793", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01794", + "gapId": "operator:palette.sort", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01794-operator-palette.sort.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01794.py -- tests/files/web/generated/M16-GAP-01794-operator-palette.sort.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01794", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01794", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01795", + "gapId": "operator:particle.brush_edit", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01795-operator-particle.brush_edit.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01795.py -- tests/files/web/generated/M16-GAP-01795-operator-particle.brush_edit.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01795", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01795", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01796", + "gapId": "operator:particle.connect_hair", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01796-operator-particle.connect_hair.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01796.py -- tests/files/web/generated/M16-GAP-01796-operator-particle.connect_hair.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01796", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01796", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01797", + "gapId": "operator:particle.copy_particle_systems", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01797-operator-particle.copy_particle_systems.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01797.py -- tests/files/web/generated/M16-GAP-01797-operator-particle.copy_particle_systems.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01797", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01797", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01798", + "gapId": "operator:particle.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01798-operator-particle.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01798.py -- tests/files/web/generated/M16-GAP-01798-operator-particle.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01798", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01798", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01799", + "gapId": "operator:particle.disconnect_hair", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01799-operator-particle.disconnect_hair.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01799.py -- tests/files/web/generated/M16-GAP-01799-operator-particle.disconnect_hair.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01799", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01799", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01800", + "gapId": "operator:particle.duplicate_particle_system", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01800-operator-particle.duplicate_particle_system.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01800.py -- tests/files/web/generated/M16-GAP-01800-operator-particle.duplicate_particle_system.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01800", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01800", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01801", + "gapId": "operator:particle.dupliob_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01801-operator-particle.dupliob_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01801.py -- tests/files/web/generated/M16-GAP-01801-operator-particle.dupliob_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01801", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01801", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01802", + "gapId": "operator:particle.dupliob_move_down", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01802-operator-particle.dupliob_move_down.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01802.py -- tests/files/web/generated/M16-GAP-01802-operator-particle.dupliob_move_down.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01802", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01802", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01803", + "gapId": "operator:particle.dupliob_move_up", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01803-operator-particle.dupliob_move_up.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01803.py -- tests/files/web/generated/M16-GAP-01803-operator-particle.dupliob_move_up.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01803", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01803", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01804", + "gapId": "operator:particle.dupliob_refresh", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01804-operator-particle.dupliob_refresh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01804.py -- tests/files/web/generated/M16-GAP-01804-operator-particle.dupliob_refresh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01804", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01804", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01805", + "gapId": "operator:particle.dupliob_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01805-operator-particle.dupliob_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01805.py -- tests/files/web/generated/M16-GAP-01805-operator-particle.dupliob_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01805", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01805", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01806", + "gapId": "operator:particle.edited_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01806-operator-particle.edited_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01806.py -- tests/files/web/generated/M16-GAP-01806-operator-particle.edited_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01806", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01806", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01807", + "gapId": "operator:particle.hair_dynamics_preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01807-operator-particle.hair_dynamics_preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01807.py -- tests/files/web/generated/M16-GAP-01807-operator-particle.hair_dynamics_preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01807", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01807", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01808", + "gapId": "operator:particle.hide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01808-operator-particle.hide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01808.py -- tests/files/web/generated/M16-GAP-01808-operator-particle.hide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01808", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01808", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01809", + "gapId": "operator:particle.mirror", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01809-operator-particle.mirror.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01809.py -- tests/files/web/generated/M16-GAP-01809-operator-particle.mirror.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01809", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01809", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01810", + "gapId": "operator:particle.new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01810-operator-particle.new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01810.py -- tests/files/web/generated/M16-GAP-01810-operator-particle.new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01810", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01810", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01811", + "gapId": "operator:particle.new_target", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01811-operator-particle.new_target.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01811.py -- tests/files/web/generated/M16-GAP-01811-operator-particle.new_target.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01811", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01811", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01812", + "gapId": "operator:particle.particle_edit_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01812-operator-particle.particle_edit_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01812.py -- tests/files/web/generated/M16-GAP-01812-operator-particle.particle_edit_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01812", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01812", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01813", + "gapId": "operator:particle.particle_system_remove_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01813-operator-particle.particle_system_remove_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01813.py -- tests/files/web/generated/M16-GAP-01813-operator-particle.particle_system_remove_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01813", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01813", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01814", + "gapId": "operator:particle.rekey", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01814-operator-particle.rekey.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01814.py -- tests/files/web/generated/M16-GAP-01814-operator-particle.rekey.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01814", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01814", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01815", + "gapId": "operator:particle.remove_doubles", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01815-operator-particle.remove_doubles.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01815.py -- tests/files/web/generated/M16-GAP-01815-operator-particle.remove_doubles.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01815", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01815", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01816", + "gapId": "operator:particle.reveal", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01816-operator-particle.reveal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01816.py -- tests/files/web/generated/M16-GAP-01816-operator-particle.reveal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01816", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01816", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01817", + "gapId": "operator:particle.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01817-operator-particle.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01817.py -- tests/files/web/generated/M16-GAP-01817-operator-particle.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01817", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01817", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01818", + "gapId": "operator:particle.select_less", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01818-operator-particle.select_less.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01818.py -- tests/files/web/generated/M16-GAP-01818-operator-particle.select_less.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01818", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01818", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01819", + "gapId": "operator:particle.select_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01819-operator-particle.select_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01819.py -- tests/files/web/generated/M16-GAP-01819-operator-particle.select_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01819", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01819", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01820", + "gapId": "operator:particle.select_linked_pick", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01820-operator-particle.select_linked_pick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01820.py -- tests/files/web/generated/M16-GAP-01820-operator-particle.select_linked_pick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01820", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01820", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01821", + "gapId": "operator:particle.select_more", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01821-operator-particle.select_more.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01821.py -- tests/files/web/generated/M16-GAP-01821-operator-particle.select_more.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01821", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01821", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01822", + "gapId": "operator:particle.select_random", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01822-operator-particle.select_random.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01822.py -- tests/files/web/generated/M16-GAP-01822-operator-particle.select_random.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01822", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01822", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01823", + "gapId": "operator:particle.select_roots", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01823-operator-particle.select_roots.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01823.py -- tests/files/web/generated/M16-GAP-01823-operator-particle.select_roots.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01823", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01823", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01824", + "gapId": "operator:particle.select_tips", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01824-operator-particle.select_tips.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01824.py -- tests/files/web/generated/M16-GAP-01824-operator-particle.select_tips.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01824", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01824", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01825", + "gapId": "operator:particle.shape_cut", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01825-operator-particle.shape_cut.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01825.py -- tests/files/web/generated/M16-GAP-01825-operator-particle.shape_cut.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01825", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01825", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01826", + "gapId": "operator:particle.subdivide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01826-operator-particle.subdivide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01826.py -- tests/files/web/generated/M16-GAP-01826-operator-particle.subdivide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01826", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01826", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01827", + "gapId": "operator:particle.target_move_down", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01827-operator-particle.target_move_down.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01827.py -- tests/files/web/generated/M16-GAP-01827-operator-particle.target_move_down.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01827", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01827", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01828", + "gapId": "operator:particle.target_move_up", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01828-operator-particle.target_move_up.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01828.py -- tests/files/web/generated/M16-GAP-01828-operator-particle.target_move_up.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01828", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01828", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01829", + "gapId": "operator:particle.target_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01829-operator-particle.target_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01829.py -- tests/files/web/generated/M16-GAP-01829-operator-particle.target_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01829", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01829", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01830", + "gapId": "operator:particle.unify_length", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01830-operator-particle.unify_length.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01830.py -- tests/files/web/generated/M16-GAP-01830-operator-particle.unify_length.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01830", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01830", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01831", + "gapId": "operator:particle.weight_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01831-operator-particle.weight_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01831.py -- tests/files/web/generated/M16-GAP-01831-operator-particle.weight_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01831", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01831", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01832", + "gapId": "operator:pointcloud.attribute_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01832-operator-pointcloud.attribute_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01832.py -- tests/files/web/generated/M16-GAP-01832-operator-pointcloud.attribute_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01832", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01832", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01833", + "gapId": "operator:pointcloud.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01833-operator-pointcloud.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01833.py -- tests/files/web/generated/M16-GAP-01833-operator-pointcloud.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01833", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01833", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01834", + "gapId": "operator:pointcloud.duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01834-operator-pointcloud.duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01834.py -- tests/files/web/generated/M16-GAP-01834-operator-pointcloud.duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01834", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01834", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01835", + "gapId": "operator:pointcloud.duplicate_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01835-operator-pointcloud.duplicate_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01835.py -- tests/files/web/generated/M16-GAP-01835-operator-pointcloud.duplicate_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01835", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01835", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01836", + "gapId": "operator:pointcloud.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01836-operator-pointcloud.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01836.py -- tests/files/web/generated/M16-GAP-01836-operator-pointcloud.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01836", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01836", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01837", + "gapId": "operator:pointcloud.select_random", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01837-operator-pointcloud.select_random.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01837.py -- tests/files/web/generated/M16-GAP-01837-operator-pointcloud.select_random.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01837", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01837", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01838", + "gapId": "operator:pointcloud.separate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01838-operator-pointcloud.separate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01838.py -- tests/files/web/generated/M16-GAP-01838-operator-pointcloud.separate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01838", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01838", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01839", + "gapId": "operator:pose.armature_apply", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01839-operator-pose.armature_apply.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01839.py -- tests/files/web/generated/M16-GAP-01839-operator-pose.armature_apply.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01839", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01839", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01840", + "gapId": "operator:pose.autoside_names", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01840-operator-pose.autoside_names.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01840.py -- tests/files/web/generated/M16-GAP-01840-operator-pose.autoside_names.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01840", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01840", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01841", + "gapId": "operator:pose.blend_to_neighbor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01841-operator-pose.blend_to_neighbor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01841.py -- tests/files/web/generated/M16-GAP-01841-operator-pose.blend_to_neighbor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01841", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01841", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01842", + "gapId": "operator:pose.blend_with_rest", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01842-operator-pose.blend_with_rest.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01842.py -- tests/files/web/generated/M16-GAP-01842-operator-pose.blend_with_rest.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01842", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01842", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01843", + "gapId": "operator:pose.breakdown", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01843-operator-pose.breakdown.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01843.py -- tests/files/web/generated/M16-GAP-01843-operator-pose.breakdown.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01843", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01843", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01844", + "gapId": "operator:pose.constraint_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01844-operator-pose.constraint_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01844.py -- tests/files/web/generated/M16-GAP-01844-operator-pose.constraint_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01844", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01844", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01845", + "gapId": "operator:pose.constraint_add_with_targets", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01845-operator-pose.constraint_add_with_targets.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01845.py -- tests/files/web/generated/M16-GAP-01845-operator-pose.constraint_add_with_targets.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01845", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01845", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01846", + "gapId": "operator:pose.constraints_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01846-operator-pose.constraints_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01846.py -- tests/files/web/generated/M16-GAP-01846-operator-pose.constraints_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01846", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01846", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01847", + "gapId": "operator:pose.constraints_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01847-operator-pose.constraints_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01847.py -- tests/files/web/generated/M16-GAP-01847-operator-pose.constraints_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01847", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01847", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01848", + "gapId": "operator:pose.copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01848-operator-pose.copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01848.py -- tests/files/web/generated/M16-GAP-01848-operator-pose.copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01848", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01848", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01849", + "gapId": "operator:pose.flip_names", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01849-operator-pose.flip_names.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01849.py -- tests/files/web/generated/M16-GAP-01849-operator-pose.flip_names.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01849", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01849", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01850", + "gapId": "operator:pose.hide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01850-operator-pose.hide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01850.py -- tests/files/web/generated/M16-GAP-01850-operator-pose.hide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01850", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01850", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01851", + "gapId": "operator:pose.ik_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01851-operator-pose.ik_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01851.py -- tests/files/web/generated/M16-GAP-01851-operator-pose.ik_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01851", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01851", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01852", + "gapId": "operator:pose.ik_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01852-operator-pose.ik_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01852.py -- tests/files/web/generated/M16-GAP-01852-operator-pose.ik_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01852", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01852", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01853", + "gapId": "operator:pose.loc_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01853-operator-pose.loc_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01853.py -- tests/files/web/generated/M16-GAP-01853-operator-pose.loc_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01853", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01853", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01854", + "gapId": "operator:pose.paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01854-operator-pose.paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01854.py -- tests/files/web/generated/M16-GAP-01854-operator-pose.paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01854", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01854", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01855", + "gapId": "operator:pose.paths_calculate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01855-operator-pose.paths_calculate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01855.py -- tests/files/web/generated/M16-GAP-01855-operator-pose.paths_calculate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01855", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01855", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01856", + "gapId": "operator:pose.paths_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01856-operator-pose.paths_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01856.py -- tests/files/web/generated/M16-GAP-01856-operator-pose.paths_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01856", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01856", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01857", + "gapId": "operator:pose.paths_range_update", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01857-operator-pose.paths_range_update.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01857.py -- tests/files/web/generated/M16-GAP-01857-operator-pose.paths_range_update.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01857", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01857", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01858", + "gapId": "operator:pose.paths_update", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01858-operator-pose.paths_update.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01858.py -- tests/files/web/generated/M16-GAP-01858-operator-pose.paths_update.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01858", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01858", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01859", + "gapId": "operator:pose.propagate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01859-operator-pose.propagate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01859.py -- tests/files/web/generated/M16-GAP-01859-operator-pose.propagate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01859", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01859", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01860", + "gapId": "operator:pose.push", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01860-operator-pose.push.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01860.py -- tests/files/web/generated/M16-GAP-01860-operator-pose.push.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01860", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01860", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01861", + "gapId": "operator:pose.quaternions_flip", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01861-operator-pose.quaternions_flip.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01861.py -- tests/files/web/generated/M16-GAP-01861-operator-pose.quaternions_flip.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01861", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01861", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01862", + "gapId": "operator:pose.relax", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01862-operator-pose.relax.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01862.py -- tests/files/web/generated/M16-GAP-01862-operator-pose.relax.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01862", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01862", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01863", + "gapId": "operator:pose.reveal", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01863-operator-pose.reveal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01863.py -- tests/files/web/generated/M16-GAP-01863-operator-pose.reveal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01863", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01863", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01864", + "gapId": "operator:pose.rot_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01864-operator-pose.rot_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01864.py -- tests/files/web/generated/M16-GAP-01864-operator-pose.rot_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01864", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01864", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01865", + "gapId": "operator:pose.rotation_mode_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01865-operator-pose.rotation_mode_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01865.py -- tests/files/web/generated/M16-GAP-01865-operator-pose.rotation_mode_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01865", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01865", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01866", + "gapId": "operator:pose.scale_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01866-operator-pose.scale_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01866.py -- tests/files/web/generated/M16-GAP-01866-operator-pose.scale_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01866", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01866", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01867", + "gapId": "operator:pose.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01867-operator-pose.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01867.py -- tests/files/web/generated/M16-GAP-01867-operator-pose.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01867", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01867", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01868", + "gapId": "operator:pose.select_constraint_target", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01868-operator-pose.select_constraint_target.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01868.py -- tests/files/web/generated/M16-GAP-01868-operator-pose.select_constraint_target.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01868", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01868", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01869", + "gapId": "operator:pose.select_grouped", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01869-operator-pose.select_grouped.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01869.py -- tests/files/web/generated/M16-GAP-01869-operator-pose.select_grouped.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01869", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01869", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01870", + "gapId": "operator:pose.select_hierarchy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01870-operator-pose.select_hierarchy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01870.py -- tests/files/web/generated/M16-GAP-01870-operator-pose.select_hierarchy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01870", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01870", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01871", + "gapId": "operator:pose.select_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01871-operator-pose.select_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01871.py -- tests/files/web/generated/M16-GAP-01871-operator-pose.select_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01871", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01871", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01872", + "gapId": "operator:pose.select_linked_pick", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01872-operator-pose.select_linked_pick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01872.py -- tests/files/web/generated/M16-GAP-01872-operator-pose.select_linked_pick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01872", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01872", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01873", + "gapId": "operator:pose.select_mirror", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01873-operator-pose.select_mirror.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01873.py -- tests/files/web/generated/M16-GAP-01873-operator-pose.select_mirror.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01873", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01873", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01874", + "gapId": "operator:pose.select_parent", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01874-operator-pose.select_parent.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01874.py -- tests/files/web/generated/M16-GAP-01874-operator-pose.select_parent.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01874", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01874", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01875", + "gapId": "operator:pose.selection_set_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01875-operator-pose.selection_set_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01875.py -- tests/files/web/generated/M16-GAP-01875-operator-pose.selection_set_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01875", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01875", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01876", + "gapId": "operator:pose.selection_set_add_and_assign", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01876-operator-pose.selection_set_add_and_assign.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01876.py -- tests/files/web/generated/M16-GAP-01876-operator-pose.selection_set_add_and_assign.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01876", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01876", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01877", + "gapId": "operator:pose.selection_set_assign", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01877-operator-pose.selection_set_assign.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01877.py -- tests/files/web/generated/M16-GAP-01877-operator-pose.selection_set_assign.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01877", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01877", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01878", + "gapId": "operator:pose.selection_set_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01878-operator-pose.selection_set_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01878.py -- tests/files/web/generated/M16-GAP-01878-operator-pose.selection_set_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01878", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01878", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01879", + "gapId": "operator:pose.selection_set_delete_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01879-operator-pose.selection_set_delete_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01879.py -- tests/files/web/generated/M16-GAP-01879-operator-pose.selection_set_delete_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01879", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01879", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01880", + "gapId": "operator:pose.selection_set_deselect", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01880-operator-pose.selection_set_deselect.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01880.py -- tests/files/web/generated/M16-GAP-01880-operator-pose.selection_set_deselect.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01880", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01880", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01881", + "gapId": "operator:pose.selection_set_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01881-operator-pose.selection_set_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01881.py -- tests/files/web/generated/M16-GAP-01881-operator-pose.selection_set_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01881", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01881", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01882", + "gapId": "operator:pose.selection_set_paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01882-operator-pose.selection_set_paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01882.py -- tests/files/web/generated/M16-GAP-01882-operator-pose.selection_set_paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01882", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01882", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01883", + "gapId": "operator:pose.selection_set_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01883-operator-pose.selection_set_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01883.py -- tests/files/web/generated/M16-GAP-01883-operator-pose.selection_set_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01883", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01883", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01884", + "gapId": "operator:pose.selection_set_remove_bones", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01884-operator-pose.selection_set_remove_bones.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01884.py -- tests/files/web/generated/M16-GAP-01884-operator-pose.selection_set_remove_bones.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01884", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01884", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01885", + "gapId": "operator:pose.selection_set_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01885-operator-pose.selection_set_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01885.py -- tests/files/web/generated/M16-GAP-01885-operator-pose.selection_set_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01885", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01885", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01886", + "gapId": "operator:pose.selection_set_unassign", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01886-operator-pose.selection_set_unassign.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01886.py -- tests/files/web/generated/M16-GAP-01886-operator-pose.selection_set_unassign.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01886", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01886", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01887", + "gapId": "operator:pose.transforms_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01887-operator-pose.transforms_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01887.py -- tests/files/web/generated/M16-GAP-01887-operator-pose.transforms_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01887", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01887", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01888", + "gapId": "operator:pose.user_transforms_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01888-operator-pose.user_transforms_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01888.py -- tests/files/web/generated/M16-GAP-01888-operator-pose.user_transforms_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01888", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01888", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01889", + "gapId": "operator:pose.visual_transform_apply", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01889-operator-pose.visual_transform_apply.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01889.py -- tests/files/web/generated/M16-GAP-01889-operator-pose.visual_transform_apply.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01889", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01889", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01890", + "gapId": "operator:poselib.apply_pose_asset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01890-operator-poselib.apply_pose_asset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01890.py -- tests/files/web/generated/M16-GAP-01890-operator-poselib.apply_pose_asset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01890", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01890", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01891", + "gapId": "operator:poselib.asset_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01891-operator-poselib.asset_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01891.py -- tests/files/web/generated/M16-GAP-01891-operator-poselib.asset_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01891", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01891", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01892", + "gapId": "operator:poselib.asset_modify", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01892-operator-poselib.asset_modify.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01892.py -- tests/files/web/generated/M16-GAP-01892-operator-poselib.asset_modify.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01892", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01892", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01893", + "gapId": "operator:poselib.blend_pose_asset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01893-operator-poselib.blend_pose_asset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01893.py -- tests/files/web/generated/M16-GAP-01893-operator-poselib.blend_pose_asset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01893", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01893", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01894", + "gapId": "operator:poselib.copy_as_asset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01894-operator-poselib.copy_as_asset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01894.py -- tests/files/web/generated/M16-GAP-01894-operator-poselib.copy_as_asset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01894", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01894", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01895", + "gapId": "operator:poselib.create_pose_asset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01895-operator-poselib.create_pose_asset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01895.py -- tests/files/web/generated/M16-GAP-01895-operator-poselib.create_pose_asset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01895", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01895", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01896", + "gapId": "operator:poselib.paste_asset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01896-operator-poselib.paste_asset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01896.py -- tests/files/web/generated/M16-GAP-01896-operator-poselib.paste_asset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01896", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01896", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01897", + "gapId": "operator:poselib.pose_asset_select_bones", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01897-operator-poselib.pose_asset_select_bones.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01897.py -- tests/files/web/generated/M16-GAP-01897-operator-poselib.pose_asset_select_bones.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01897", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01897", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01898", + "gapId": "operator:poselib.restore_previous_action", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01898-operator-poselib.restore_previous_action.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01898.py -- tests/files/web/generated/M16-GAP-01898-operator-poselib.restore_previous_action.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01898", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01898", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01899", + "gapId": "operator:preferences.addon_disable", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01899-operator-preferences.addon_disable.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01899.py -- tests/files/web/generated/M16-GAP-01899-operator-preferences.addon_disable.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01899", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01899", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01900", + "gapId": "operator:preferences.addon_enable", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01900-operator-preferences.addon_enable.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01900.py -- tests/files/web/generated/M16-GAP-01900-operator-preferences.addon_enable.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01900", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01900", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01901", + "gapId": "operator:preferences.addon_expand", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01901-operator-preferences.addon_expand.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01901.py -- tests/files/web/generated/M16-GAP-01901-operator-preferences.addon_expand.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01901", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01901", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01902", + "gapId": "operator:preferences.addon_install", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01902-operator-preferences.addon_install.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01902.py -- tests/files/web/generated/M16-GAP-01902-operator-preferences.addon_install.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01902", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01902", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01903", + "gapId": "operator:preferences.addon_refresh", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01903-operator-preferences.addon_refresh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01903.py -- tests/files/web/generated/M16-GAP-01903-operator-preferences.addon_refresh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01903", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01903", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01904", + "gapId": "operator:preferences.addon_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01904-operator-preferences.addon_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01904.py -- tests/files/web/generated/M16-GAP-01904-operator-preferences.addon_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01904", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01904", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01905", + "gapId": "operator:preferences.addon_show", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01905-operator-preferences.addon_show.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01905.py -- tests/files/web/generated/M16-GAP-01905-operator-preferences.addon_show.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01905", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01905", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01906", + "gapId": "operator:preferences.app_template_install", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01906-operator-preferences.app_template_install.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01906.py -- tests/files/web/generated/M16-GAP-01906-operator-preferences.app_template_install.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01906", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01906", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01907", + "gapId": "operator:preferences.asset_library_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01907-operator-preferences.asset_library_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01907.py -- tests/files/web/generated/M16-GAP-01907-operator-preferences.asset_library_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01907", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01907", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01908", + "gapId": "operator:preferences.asset_library_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01908-operator-preferences.asset_library_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01908.py -- tests/files/web/generated/M16-GAP-01908-operator-preferences.asset_library_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01908", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01908", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01909", + "gapId": "operator:preferences.associate_blend", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01909-operator-preferences.associate_blend.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01909.py -- tests/files/web/generated/M16-GAP-01909-operator-preferences.associate_blend.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01909", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01909", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01910", + "gapId": "operator:preferences.autoexec_path_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01910-operator-preferences.autoexec_path_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01910.py -- tests/files/web/generated/M16-GAP-01910-operator-preferences.autoexec_path_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01910", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01910", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01911", + "gapId": "operator:preferences.autoexec_path_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01911-operator-preferences.autoexec_path_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01911.py -- tests/files/web/generated/M16-GAP-01911-operator-preferences.autoexec_path_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01911", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01911", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01912", + "gapId": "operator:preferences.clear_filter", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01912-operator-preferences.clear_filter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01912.py -- tests/files/web/generated/M16-GAP-01912-operator-preferences.clear_filter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01912", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01912", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01913", + "gapId": "operator:preferences.copy_prev", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01913-operator-preferences.copy_prev.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01913.py -- tests/files/web/generated/M16-GAP-01913-operator-preferences.copy_prev.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01913", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01913", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01914", + "gapId": "operator:preferences.extension_repo_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01914-operator-preferences.extension_repo_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01914.py -- tests/files/web/generated/M16-GAP-01914-operator-preferences.extension_repo_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01914", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01914", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01915", + "gapId": "operator:preferences.extension_repo_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01915-operator-preferences.extension_repo_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01915.py -- tests/files/web/generated/M16-GAP-01915-operator-preferences.extension_repo_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01915", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01915", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01916", + "gapId": "operator:preferences.extension_url_drop", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01916-operator-preferences.extension_url_drop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01916.py -- tests/files/web/generated/M16-GAP-01916-operator-preferences.extension_url_drop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01916", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01916", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01917", + "gapId": "operator:preferences.keyconfig_activate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01917-operator-preferences.keyconfig_activate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01917.py -- tests/files/web/generated/M16-GAP-01917-operator-preferences.keyconfig_activate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01917", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01917", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01918", + "gapId": "operator:preferences.keyconfig_export", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01918-operator-preferences.keyconfig_export.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01918.py -- tests/files/web/generated/M16-GAP-01918-operator-preferences.keyconfig_export.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01918", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01918", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01919", + "gapId": "operator:preferences.keyconfig_import", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01919-operator-preferences.keyconfig_import.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01919.py -- tests/files/web/generated/M16-GAP-01919-operator-preferences.keyconfig_import.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01919", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01919", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01920", + "gapId": "operator:preferences.keyconfig_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01920-operator-preferences.keyconfig_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01920.py -- tests/files/web/generated/M16-GAP-01920-operator-preferences.keyconfig_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01920", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01920", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01921", + "gapId": "operator:preferences.keyconfig_test", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01921-operator-preferences.keyconfig_test.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01921.py -- tests/files/web/generated/M16-GAP-01921-operator-preferences.keyconfig_test.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01921", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01921", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01922", + "gapId": "operator:preferences.keyitem_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01922-operator-preferences.keyitem_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01922.py -- tests/files/web/generated/M16-GAP-01922-operator-preferences.keyitem_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01922", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01922", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01923", + "gapId": "operator:preferences.keyitem_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01923-operator-preferences.keyitem_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01923.py -- tests/files/web/generated/M16-GAP-01923-operator-preferences.keyitem_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01923", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01923", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01924", + "gapId": "operator:preferences.keyitem_restore", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01924-operator-preferences.keyitem_restore.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01924.py -- tests/files/web/generated/M16-GAP-01924-operator-preferences.keyitem_restore.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01924", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01924", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01925", + "gapId": "operator:preferences.keymap_restore", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01925-operator-preferences.keymap_restore.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01925.py -- tests/files/web/generated/M16-GAP-01925-operator-preferences.keymap_restore.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01925", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01925", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01926", + "gapId": "operator:preferences.reset_default_theme", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01926-operator-preferences.reset_default_theme.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01926.py -- tests/files/web/generated/M16-GAP-01926-operator-preferences.reset_default_theme.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01926", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01926", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01927", + "gapId": "operator:preferences.script_directory_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01927-operator-preferences.script_directory_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01927.py -- tests/files/web/generated/M16-GAP-01927-operator-preferences.script_directory_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01927", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01927", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01928", + "gapId": "operator:preferences.script_directory_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01928-operator-preferences.script_directory_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01928.py -- tests/files/web/generated/M16-GAP-01928-operator-preferences.script_directory_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01928", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01928", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01929", + "gapId": "operator:preferences.start_filter", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01929-operator-preferences.start_filter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01929.py -- tests/files/web/generated/M16-GAP-01929-operator-preferences.start_filter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01929", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01929", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01930", + "gapId": "operator:preferences.studiolight_copy_settings", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01930-operator-preferences.studiolight_copy_settings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01930.py -- tests/files/web/generated/M16-GAP-01930-operator-preferences.studiolight_copy_settings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01930", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01930", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01931", + "gapId": "operator:preferences.studiolight_install", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01931-operator-preferences.studiolight_install.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01931.py -- tests/files/web/generated/M16-GAP-01931-operator-preferences.studiolight_install.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01931", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01931", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01932", + "gapId": "operator:preferences.studiolight_new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01932-operator-preferences.studiolight_new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01932.py -- tests/files/web/generated/M16-GAP-01932-operator-preferences.studiolight_new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01932", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01932", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01933", + "gapId": "operator:preferences.studiolight_uninstall", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01933-operator-preferences.studiolight_uninstall.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01933.py -- tests/files/web/generated/M16-GAP-01933-operator-preferences.studiolight_uninstall.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01933", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01933", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01934", + "gapId": "operator:preferences.theme_install", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01934-operator-preferences.theme_install.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01934.py -- tests/files/web/generated/M16-GAP-01934-operator-preferences.theme_install.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01934", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01934", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01935", + "gapId": "operator:preferences.unassociate_blend", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01935-operator-preferences.unassociate_blend.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01935.py -- tests/files/web/generated/M16-GAP-01935-operator-preferences.unassociate_blend.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01935", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01935", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01936", + "gapId": "operator:ptcache.add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01936-operator-ptcache.add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01936.py -- tests/files/web/generated/M16-GAP-01936-operator-ptcache.add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01936", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01936", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01937", + "gapId": "operator:ptcache.bake", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01937-operator-ptcache.bake.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01937.py -- tests/files/web/generated/M16-GAP-01937-operator-ptcache.bake.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01937", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01937", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01938", + "gapId": "operator:ptcache.bake_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01938-operator-ptcache.bake_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01938.py -- tests/files/web/generated/M16-GAP-01938-operator-ptcache.bake_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01938", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01938", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01939", + "gapId": "operator:ptcache.bake_from_cache", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01939-operator-ptcache.bake_from_cache.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01939.py -- tests/files/web/generated/M16-GAP-01939-operator-ptcache.bake_from_cache.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01939", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01939", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01940", + "gapId": "operator:ptcache.free_bake", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01940-operator-ptcache.free_bake.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01940.py -- tests/files/web/generated/M16-GAP-01940-operator-ptcache.free_bake.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01940", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01940", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01941", + "gapId": "operator:ptcache.free_bake_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01941-operator-ptcache.free_bake_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01941.py -- tests/files/web/generated/M16-GAP-01941-operator-ptcache.free_bake_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01941", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01941", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01942", + "gapId": "operator:ptcache.remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01942-operator-ptcache.remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01942.py -- tests/files/web/generated/M16-GAP-01942-operator-ptcache.remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01942", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01942", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01943", + "gapId": "operator:render.clear_texture_cache", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01943-operator-render.clear_texture_cache.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01943.py -- tests/files/web/generated/M16-GAP-01943-operator-render.clear_texture_cache.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01943", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01943", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01944", + "gapId": "operator:render.color_management_white_balance_preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01944-operator-render.color_management_white_balance_preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01944.py -- tests/files/web/generated/M16-GAP-01944-operator-render.color_management_white_balance_preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01944", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01944", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01945", + "gapId": "operator:render.cycles_integrator_preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01945-operator-render.cycles_integrator_preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01945.py -- tests/files/web/generated/M16-GAP-01945-operator-render.cycles_integrator_preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01945", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01945", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01946", + "gapId": "operator:render.cycles_performance_preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01946-operator-render.cycles_performance_preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01946.py -- tests/files/web/generated/M16-GAP-01946-operator-render.cycles_performance_preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01946", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01946", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01947", + "gapId": "operator:render.cycles_sampling_preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01947-operator-render.cycles_sampling_preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01947.py -- tests/files/web/generated/M16-GAP-01947-operator-render.cycles_sampling_preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01947", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01947", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01948", + "gapId": "operator:render.cycles_viewport_sampling_preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01948-operator-render.cycles_viewport_sampling_preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01948.py -- tests/files/web/generated/M16-GAP-01948-operator-render.cycles_viewport_sampling_preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01948", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01948", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01949", + "gapId": "operator:render.eevee_raytracing_preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01949-operator-render.eevee_raytracing_preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01949.py -- tests/files/web/generated/M16-GAP-01949-operator-render.eevee_raytracing_preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01949", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01949", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01950", + "gapId": "operator:render.generate_texture_cache", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01950-operator-render.generate_texture_cache.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01950.py -- tests/files/web/generated/M16-GAP-01950-operator-render.generate_texture_cache.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01950", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01950", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01951", + "gapId": "operator:render.opengl", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01951-operator-render.opengl.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01951.py -- tests/files/web/generated/M16-GAP-01951-operator-render.opengl.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01951", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01951", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01952", + "gapId": "operator:render.play_rendered_anim", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01952-operator-render.play_rendered_anim.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01952.py -- tests/files/web/generated/M16-GAP-01952-operator-render.play_rendered_anim.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01952", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01952", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01953", + "gapId": "operator:render.preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01953-operator-render.preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01953.py -- tests/files/web/generated/M16-GAP-01953-operator-render.preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01953", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01953", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01954", + "gapId": "operator:render.render", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01954-operator-render.render.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01954.py -- tests/files/web/generated/M16-GAP-01954-operator-render.render.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01954", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01954", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01955", + "gapId": "operator:render.shutter_curve_preset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01955-operator-render.shutter_curve_preset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01955.py -- tests/files/web/generated/M16-GAP-01955-operator-render.shutter_curve_preset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01955", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01955", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01956", + "gapId": "operator:render.swap_dimensions", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01956-operator-render.swap_dimensions.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01956.py -- tests/files/web/generated/M16-GAP-01956-operator-render.swap_dimensions.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01956", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01956", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01957", + "gapId": "operator:render.view_cancel", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01957-operator-render.view_cancel.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01957.py -- tests/files/web/generated/M16-GAP-01957-operator-render.view_cancel.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01957", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01957", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01958", + "gapId": "operator:render.view_show", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01958-operator-render.view_show.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01958.py -- tests/files/web/generated/M16-GAP-01958-operator-render.view_show.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01958", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01958", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01959", + "gapId": "operator:rigidbody.bake_to_keyframes", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01959-operator-rigidbody.bake_to_keyframes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01959.py -- tests/files/web/generated/M16-GAP-01959-operator-rigidbody.bake_to_keyframes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01959", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01959", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01960", + "gapId": "operator:rigidbody.connect", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01960-operator-rigidbody.connect.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01960.py -- tests/files/web/generated/M16-GAP-01960-operator-rigidbody.connect.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01960", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01960", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01961", + "gapId": "operator:rigidbody.constraint_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01961-operator-rigidbody.constraint_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01961.py -- tests/files/web/generated/M16-GAP-01961-operator-rigidbody.constraint_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01961", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01961", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01962", + "gapId": "operator:rigidbody.constraint_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01962-operator-rigidbody.constraint_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01962.py -- tests/files/web/generated/M16-GAP-01962-operator-rigidbody.constraint_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01962", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01962", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01963", + "gapId": "operator:rigidbody.mass_calculate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01963-operator-rigidbody.mass_calculate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01963.py -- tests/files/web/generated/M16-GAP-01963-operator-rigidbody.mass_calculate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01963", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01963", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01964", + "gapId": "operator:rigidbody.object_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01964-operator-rigidbody.object_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01964.py -- tests/files/web/generated/M16-GAP-01964-operator-rigidbody.object_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01964", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01964", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01965", + "gapId": "operator:rigidbody.object_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01965-operator-rigidbody.object_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01965.py -- tests/files/web/generated/M16-GAP-01965-operator-rigidbody.object_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01965", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01965", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01966", + "gapId": "operator:rigidbody.object_settings_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01966-operator-rigidbody.object_settings_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01966.py -- tests/files/web/generated/M16-GAP-01966-operator-rigidbody.object_settings_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01966", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01966", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01967", + "gapId": "operator:rigidbody.objects_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01967-operator-rigidbody.objects_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01967.py -- tests/files/web/generated/M16-GAP-01967-operator-rigidbody.objects_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01967", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01967", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01968", + "gapId": "operator:rigidbody.objects_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01968-operator-rigidbody.objects_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01968.py -- tests/files/web/generated/M16-GAP-01968-operator-rigidbody.objects_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01968", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01968", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01969", + "gapId": "operator:rigidbody.shape_change", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01969-operator-rigidbody.shape_change.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01969.py -- tests/files/web/generated/M16-GAP-01969-operator-rigidbody.shape_change.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01969", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01969", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01970", + "gapId": "operator:rigidbody.world_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01970-operator-rigidbody.world_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01970.py -- tests/files/web/generated/M16-GAP-01970-operator-rigidbody.world_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01970", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01970", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01971", + "gapId": "operator:rigidbody.world_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01971-operator-rigidbody.world_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01971.py -- tests/files/web/generated/M16-GAP-01971-operator-rigidbody.world_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01971", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01971", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01972", + "gapId": "operator:scene.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01972-operator-scene.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01972.py -- tests/files/web/generated/M16-GAP-01972-operator-scene.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01972", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01972", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01973", + "gapId": "operator:scene.drop_scene_asset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01973-operator-scene.drop_scene_asset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01973.py -- tests/files/web/generated/M16-GAP-01973-operator-scene.drop_scene_asset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01973", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01973", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01974", + "gapId": "operator:scene.freestyle_add_edge_marks_to_keying_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01974-operator-scene.freestyle_add_edge_marks_to_keying_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01974.py -- tests/files/web/generated/M16-GAP-01974-operator-scene.freestyle_add_edge_marks_to_keying_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01974", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01974", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01975", + "gapId": "operator:scene.freestyle_add_face_marks_to_keying_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01975-operator-scene.freestyle_add_face_marks_to_keying_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01975.py -- tests/files/web/generated/M16-GAP-01975-operator-scene.freestyle_add_face_marks_to_keying_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01975", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01975", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01976", + "gapId": "operator:scene.freestyle_alpha_modifier_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01976-operator-scene.freestyle_alpha_modifier_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01976.py -- tests/files/web/generated/M16-GAP-01976-operator-scene.freestyle_alpha_modifier_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01976", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01976", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01977", + "gapId": "operator:scene.freestyle_color_modifier_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01977-operator-scene.freestyle_color_modifier_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01977.py -- tests/files/web/generated/M16-GAP-01977-operator-scene.freestyle_color_modifier_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01977", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01977", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01978", + "gapId": "operator:scene.freestyle_fill_range_by_selection", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01978-operator-scene.freestyle_fill_range_by_selection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01978.py -- tests/files/web/generated/M16-GAP-01978-operator-scene.freestyle_fill_range_by_selection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01978", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01978", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01979", + "gapId": "operator:scene.freestyle_geometry_modifier_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01979-operator-scene.freestyle_geometry_modifier_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01979.py -- tests/files/web/generated/M16-GAP-01979-operator-scene.freestyle_geometry_modifier_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01979", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01979", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01980", + "gapId": "operator:scene.freestyle_lineset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01980-operator-scene.freestyle_lineset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01980.py -- tests/files/web/generated/M16-GAP-01980-operator-scene.freestyle_lineset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01980", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01980", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01981", + "gapId": "operator:scene.freestyle_lineset_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01981-operator-scene.freestyle_lineset_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01981.py -- tests/files/web/generated/M16-GAP-01981-operator-scene.freestyle_lineset_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01981", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01981", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01982", + "gapId": "operator:scene.freestyle_lineset_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01982-operator-scene.freestyle_lineset_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01982.py -- tests/files/web/generated/M16-GAP-01982-operator-scene.freestyle_lineset_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01982", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01982", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01983", + "gapId": "operator:scene.freestyle_lineset_paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01983-operator-scene.freestyle_lineset_paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01983.py -- tests/files/web/generated/M16-GAP-01983-operator-scene.freestyle_lineset_paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01983", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01983", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01984", + "gapId": "operator:scene.freestyle_lineset_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01984-operator-scene.freestyle_lineset_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01984.py -- tests/files/web/generated/M16-GAP-01984-operator-scene.freestyle_lineset_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01984", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01984", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01985", + "gapId": "operator:scene.freestyle_linestyle_new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01985-operator-scene.freestyle_linestyle_new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01985.py -- tests/files/web/generated/M16-GAP-01985-operator-scene.freestyle_linestyle_new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01985", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01985", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01986", + "gapId": "operator:scene.freestyle_modifier_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01986-operator-scene.freestyle_modifier_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01986.py -- tests/files/web/generated/M16-GAP-01986-operator-scene.freestyle_modifier_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01986", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01986", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01987", + "gapId": "operator:scene.freestyle_modifier_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01987-operator-scene.freestyle_modifier_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01987.py -- tests/files/web/generated/M16-GAP-01987-operator-scene.freestyle_modifier_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01987", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01987", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01988", + "gapId": "operator:scene.freestyle_modifier_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01988-operator-scene.freestyle_modifier_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01988.py -- tests/files/web/generated/M16-GAP-01988-operator-scene.freestyle_modifier_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01988", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01988", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01989", + "gapId": "operator:scene.freestyle_module_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01989-operator-scene.freestyle_module_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01989.py -- tests/files/web/generated/M16-GAP-01989-operator-scene.freestyle_module_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01989", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01989", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01990", + "gapId": "operator:scene.freestyle_module_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01990-operator-scene.freestyle_module_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01990.py -- tests/files/web/generated/M16-GAP-01990-operator-scene.freestyle_module_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01990", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01990", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01991", + "gapId": "operator:scene.freestyle_module_open", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01991-operator-scene.freestyle_module_open.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01991.py -- tests/files/web/generated/M16-GAP-01991-operator-scene.freestyle_module_open.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01991", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01991", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01992", + "gapId": "operator:scene.freestyle_module_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01992-operator-scene.freestyle_module_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01992.py -- tests/files/web/generated/M16-GAP-01992-operator-scene.freestyle_module_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01992", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01992", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01993", + "gapId": "operator:scene.freestyle_stroke_material_create", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01993-operator-scene.freestyle_stroke_material_create.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01993.py -- tests/files/web/generated/M16-GAP-01993-operator-scene.freestyle_stroke_material_create.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01993", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01993", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01994", + "gapId": "operator:scene.freestyle_thickness_modifier_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01994-operator-scene.freestyle_thickness_modifier_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01994.py -- tests/files/web/generated/M16-GAP-01994-operator-scene.freestyle_thickness_modifier_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01994", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01994", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01995", + "gapId": "operator:scene.gltf2_action_filter_refresh", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01995-operator-scene.gltf2_action_filter_refresh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01995.py -- tests/files/web/generated/M16-GAP-01995-operator-scene.gltf2_action_filter_refresh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01995", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01995", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01996", + "gapId": "operator:scene.gpencil_brush_preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01996-operator-scene.gpencil_brush_preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01996.py -- tests/files/web/generated/M16-GAP-01996-operator-scene.gpencil_brush_preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01996", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01996", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01997", + "gapId": "operator:scene.gpencil_material_preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01997-operator-scene.gpencil_material_preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01997.py -- tests/files/web/generated/M16-GAP-01997-operator-scene.gpencil_material_preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01997", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01997", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01998", + "gapId": "operator:scene.new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01998-operator-scene.new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01998.py -- tests/files/web/generated/M16-GAP-01998-operator-scene.new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01998", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01998", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-01999", + "gapId": "operator:scene.new_sequencer", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-01999-operator-scene.new_sequencer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-01999.py -- tests/files/web/generated/M16-GAP-01999-operator-scene.new_sequencer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-01999", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-01999", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02000", + "gapId": "operator:scene.new_sequencer_scene", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02000-operator-scene.new_sequencer_scene.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02000.py -- tests/files/web/generated/M16-GAP-02000-operator-scene.new_sequencer_scene.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02000", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02000", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02001", + "gapId": "operator:scene.render_view_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02001-operator-scene.render_view_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02001.py -- tests/files/web/generated/M16-GAP-02001-operator-scene.render_view_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02001", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02001", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02002", + "gapId": "operator:scene.render_view_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02002-operator-scene.render_view_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02002.py -- tests/files/web/generated/M16-GAP-02002-operator-scene.render_view_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02002", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02002", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02003", + "gapId": "operator:scene.view_layer_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02003-operator-scene.view_layer_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02003.py -- tests/files/web/generated/M16-GAP-02003-operator-scene.view_layer_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02003", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02003", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02004", + "gapId": "operator:scene.view_layer_add_aov", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02004-operator-scene.view_layer_add_aov.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02004.py -- tests/files/web/generated/M16-GAP-02004-operator-scene.view_layer_add_aov.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02004", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02004", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02005", + "gapId": "operator:scene.view_layer_add_lightgroup", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02005-operator-scene.view_layer_add_lightgroup.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02005.py -- tests/files/web/generated/M16-GAP-02005-operator-scene.view_layer_add_lightgroup.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02005", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02005", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02006", + "gapId": "operator:scene.view_layer_add_used_lightgroups", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02006-operator-scene.view_layer_add_used_lightgroups.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02006.py -- tests/files/web/generated/M16-GAP-02006-operator-scene.view_layer_add_used_lightgroups.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02006", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02006", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02007", + "gapId": "operator:scene.view_layer_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02007-operator-scene.view_layer_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02007.py -- tests/files/web/generated/M16-GAP-02007-operator-scene.view_layer_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02007", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02007", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02008", + "gapId": "operator:scene.view_layer_remove_aov", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02008-operator-scene.view_layer_remove_aov.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02008.py -- tests/files/web/generated/M16-GAP-02008-operator-scene.view_layer_remove_aov.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02008", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02008", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02009", + "gapId": "operator:scene.view_layer_remove_lightgroup", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02009-operator-scene.view_layer_remove_lightgroup.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02009.py -- tests/files/web/generated/M16-GAP-02009-operator-scene.view_layer_remove_lightgroup.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02009", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02009", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02010", + "gapId": "operator:scene.view_layer_remove_unused_lightgroups", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02010-operator-scene.view_layer_remove_unused_lightgroups.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02010.py -- tests/files/web/generated/M16-GAP-02010-operator-scene.view_layer_remove_unused_lightgroups.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02010", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02010", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02011", + "gapId": "operator:screen.actionzone", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02011-operator-screen.actionzone.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02011.py -- tests/files/web/generated/M16-GAP-02011-operator-screen.actionzone.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02011", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02011", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02012", + "gapId": "operator:screen.animation_cancel", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02012-operator-screen.animation_cancel.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02012.py -- tests/files/web/generated/M16-GAP-02012-operator-screen.animation_cancel.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02012", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02012", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02013", + "gapId": "operator:screen.animation_pause", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02013-operator-screen.animation_pause.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02013.py -- tests/files/web/generated/M16-GAP-02013-operator-screen.animation_pause.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02013", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02013", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02014", + "gapId": "operator:screen.animation_play", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02014-operator-screen.animation_play.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02014.py -- tests/files/web/generated/M16-GAP-02014-operator-screen.animation_play.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02014", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02014", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02015", + "gapId": "operator:screen.animation_step", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02015-operator-screen.animation_step.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02015.py -- tests/files/web/generated/M16-GAP-02015-operator-screen.animation_step.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02015", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02015", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02016", + "gapId": "operator:screen.area_close", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02016-operator-screen.area_close.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02016.py -- tests/files/web/generated/M16-GAP-02016-operator-screen.area_close.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02016", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02016", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02017", + "gapId": "operator:screen.area_dupli", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02017-operator-screen.area_dupli.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02017.py -- tests/files/web/generated/M16-GAP-02017-operator-screen.area_dupli.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02017", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02017", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02018", + "gapId": "operator:screen.area_join", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02018-operator-screen.area_join.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02018.py -- tests/files/web/generated/M16-GAP-02018-operator-screen.area_join.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02018", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02018", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02019", + "gapId": "operator:screen.area_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02019-operator-screen.area_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02019.py -- tests/files/web/generated/M16-GAP-02019-operator-screen.area_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02019", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02019", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02020", + "gapId": "operator:screen.area_options", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02020-operator-screen.area_options.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02020.py -- tests/files/web/generated/M16-GAP-02020-operator-screen.area_options.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02020", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02020", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02021", + "gapId": "operator:screen.area_split", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02021-operator-screen.area_split.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02021.py -- tests/files/web/generated/M16-GAP-02021-operator-screen.area_split.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02021", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02021", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02022", + "gapId": "operator:screen.area_swap", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02022-operator-screen.area_swap.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02022.py -- tests/files/web/generated/M16-GAP-02022-operator-screen.area_swap.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02022", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02022", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02023", + "gapId": "operator:screen.back_to_previous", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02023-operator-screen.back_to_previous.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02023.py -- tests/files/web/generated/M16-GAP-02023-operator-screen.back_to_previous.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02023", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02023", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02024", + "gapId": "operator:screen.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02024-operator-screen.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02024.py -- tests/files/web/generated/M16-GAP-02024-operator-screen.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02024", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02024", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02025", + "gapId": "operator:screen.drivers_editor_show", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02025-operator-screen.drivers_editor_show.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02025.py -- tests/files/web/generated/M16-GAP-02025-operator-screen.drivers_editor_show.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02025", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02025", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02026", + "gapId": "operator:screen.edge_merge", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02026-operator-screen.edge_merge.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02026.py -- tests/files/web/generated/M16-GAP-02026-operator-screen.edge_merge.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02026", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02026", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02027", + "gapId": "operator:screen.frame_jump", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02027-operator-screen.frame_jump.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02027.py -- tests/files/web/generated/M16-GAP-02027-operator-screen.frame_jump.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02027", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02027", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02028", + "gapId": "operator:screen.frame_offset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02028-operator-screen.frame_offset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02028.py -- tests/files/web/generated/M16-GAP-02028-operator-screen.frame_offset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02028", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02028", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02029", + "gapId": "operator:screen.header_toggle_menus", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02029-operator-screen.header_toggle_menus.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02029.py -- tests/files/web/generated/M16-GAP-02029-operator-screen.header_toggle_menus.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02029", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02029", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02030", + "gapId": "operator:screen.info_log_show", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02030-operator-screen.info_log_show.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02030.py -- tests/files/web/generated/M16-GAP-02030-operator-screen.info_log_show.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02030", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02030", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02031", + "gapId": "operator:screen.keyframe_jump", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02031-operator-screen.keyframe_jump.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02031.py -- tests/files/web/generated/M16-GAP-02031-operator-screen.keyframe_jump.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02031", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02031", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02032", + "gapId": "operator:screen.marker_jump", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02032-operator-screen.marker_jump.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02032.py -- tests/files/web/generated/M16-GAP-02032-operator-screen.marker_jump.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02032", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02032", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02033", + "gapId": "operator:screen.new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02033-operator-screen.new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02033.py -- tests/files/web/generated/M16-GAP-02033-operator-screen.new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02033", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02033", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02034", + "gapId": "operator:screen.quadview_size", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02034-operator-screen.quadview_size.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02034.py -- tests/files/web/generated/M16-GAP-02034-operator-screen.quadview_size.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02034", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02034", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02035", + "gapId": "operator:screen.redo_last", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02035-operator-screen.redo_last.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02035.py -- tests/files/web/generated/M16-GAP-02035-operator-screen.redo_last.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02035", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02035", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02036", + "gapId": "operator:screen.region_blend", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02036-operator-screen.region_blend.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02036.py -- tests/files/web/generated/M16-GAP-02036-operator-screen.region_blend.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02036", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02036", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02037", + "gapId": "operator:screen.region_context_menu", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02037-operator-screen.region_context_menu.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02037.py -- tests/files/web/generated/M16-GAP-02037-operator-screen.region_context_menu.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02037", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02037", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02038", + "gapId": "operator:screen.region_flip", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02038-operator-screen.region_flip.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02038.py -- tests/files/web/generated/M16-GAP-02038-operator-screen.region_flip.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02038", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02038", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02039", + "gapId": "operator:screen.region_quadview", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02039-operator-screen.region_quadview.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02039.py -- tests/files/web/generated/M16-GAP-02039-operator-screen.region_quadview.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02039", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02039", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02040", + "gapId": "operator:screen.region_scale", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02040-operator-screen.region_scale.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02040.py -- tests/files/web/generated/M16-GAP-02040-operator-screen.region_scale.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02040", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02040", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02041", + "gapId": "operator:screen.region_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02041-operator-screen.region_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02041.py -- tests/files/web/generated/M16-GAP-02041-operator-screen.region_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02041", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02041", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02042", + "gapId": "operator:screen.repeat_history", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02042-operator-screen.repeat_history.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02042.py -- tests/files/web/generated/M16-GAP-02042-operator-screen.repeat_history.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02042", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02042", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02043", + "gapId": "operator:screen.repeat_last", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02043-operator-screen.repeat_last.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02043.py -- tests/files/web/generated/M16-GAP-02043-operator-screen.repeat_last.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02043", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02043", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02044", + "gapId": "operator:screen.screen_full_area", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02044-operator-screen.screen_full_area.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02044.py -- tests/files/web/generated/M16-GAP-02044-operator-screen.screen_full_area.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02044", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02044", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02045", + "gapId": "operator:screen.screen_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02045-operator-screen.screen_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02045.py -- tests/files/web/generated/M16-GAP-02045-operator-screen.screen_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02045", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02045", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02046", + "gapId": "operator:screen.screenshot", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02046-operator-screen.screenshot.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02046.py -- tests/files/web/generated/M16-GAP-02046-operator-screen.screenshot.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02046", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02046", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02047", + "gapId": "operator:screen.screenshot_area", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02047-operator-screen.screenshot_area.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02047.py -- tests/files/web/generated/M16-GAP-02047-operator-screen.screenshot_area.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02047", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02047", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02048", + "gapId": "operator:screen.space_context_cycle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02048-operator-screen.space_context_cycle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02048.py -- tests/files/web/generated/M16-GAP-02048-operator-screen.space_context_cycle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02048", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02048", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02049", + "gapId": "operator:screen.space_type_set_or_cycle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02049-operator-screen.space_type_set_or_cycle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02049.py -- tests/files/web/generated/M16-GAP-02049-operator-screen.space_type_set_or_cycle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02049", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02049", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02050", + "gapId": "operator:screen.spacedata_cleanup", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02050-operator-screen.spacedata_cleanup.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02050.py -- tests/files/web/generated/M16-GAP-02050-operator-screen.spacedata_cleanup.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02050", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02050", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02051", + "gapId": "operator:screen.time_jump", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02051-operator-screen.time_jump.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02051.py -- tests/files/web/generated/M16-GAP-02051-operator-screen.time_jump.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02051", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02051", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02052", + "gapId": "operator:screen.userpref_show", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02052-operator-screen.userpref_show.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02052.py -- tests/files/web/generated/M16-GAP-02052-operator-screen.userpref_show.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02052", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02052", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02053", + "gapId": "operator:screen.workspace_cycle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02053-operator-screen.workspace_cycle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02053.py -- tests/files/web/generated/M16-GAP-02053-operator-screen.workspace_cycle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02053", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02053", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02054", + "gapId": "operator:script.execute_preset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02054-operator-script.execute_preset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02054.py -- tests/files/web/generated/M16-GAP-02054-operator-script.execute_preset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02054", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02054", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02055", + "gapId": "operator:script.python_file_run", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02055-operator-script.python_file_run.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02055.py -- tests/files/web/generated/M16-GAP-02055-operator-script.python_file_run.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02055", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02055", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02056", + "gapId": "operator:script.reload", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02056-operator-script.reload.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02056.py -- tests/files/web/generated/M16-GAP-02056-operator-script.reload.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02056", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02056", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02057", + "gapId": "operator:sculpt.brush_stroke", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02057-operator-sculpt.brush_stroke.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02057.py -- tests/files/web/generated/M16-GAP-02057-operator-sculpt.brush_stroke.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02057", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02057", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02058", + "gapId": "operator:sculpt.cloth_filter", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02058-operator-sculpt.cloth_filter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02058.py -- tests/files/web/generated/M16-GAP-02058-operator-sculpt.cloth_filter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02058", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02058", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02059", + "gapId": "operator:sculpt.color_filter", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02059-operator-sculpt.color_filter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02059.py -- tests/files/web/generated/M16-GAP-02059-operator-sculpt.color_filter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02059", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02059", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02060", + "gapId": "operator:sculpt.detail_flood_fill", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02060-operator-sculpt.detail_flood_fill.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02060.py -- tests/files/web/generated/M16-GAP-02060-operator-sculpt.detail_flood_fill.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02060", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02060", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02061", + "gapId": "operator:sculpt.dynamic_topology_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02061-operator-sculpt.dynamic_topology_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02061.py -- tests/files/web/generated/M16-GAP-02061-operator-sculpt.dynamic_topology_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02061", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02061", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02062", + "gapId": "operator:sculpt.dyntopo_detail_size_edit", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02062-operator-sculpt.dyntopo_detail_size_edit.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02062.py -- tests/files/web/generated/M16-GAP-02062-operator-sculpt.dyntopo_detail_size_edit.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02062", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02062", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02063", + "gapId": "operator:sculpt.expand", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02063-operator-sculpt.expand.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02063.py -- tests/files/web/generated/M16-GAP-02063-operator-sculpt.expand.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02063", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02063", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02064", + "gapId": "operator:sculpt.face_set_box_gesture", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02064-operator-sculpt.face_set_box_gesture.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02064.py -- tests/files/web/generated/M16-GAP-02064-operator-sculpt.face_set_box_gesture.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02064", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02064", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02065", + "gapId": "operator:sculpt.face_set_change_visibility", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02065-operator-sculpt.face_set_change_visibility.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02065.py -- tests/files/web/generated/M16-GAP-02065-operator-sculpt.face_set_change_visibility.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02065", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02065", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02066", + "gapId": "operator:sculpt.face_set_edit", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02066-operator-sculpt.face_set_edit.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02066.py -- tests/files/web/generated/M16-GAP-02066-operator-sculpt.face_set_edit.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02066", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02066", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02067", + "gapId": "operator:sculpt.face_set_extract", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02067-operator-sculpt.face_set_extract.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02067.py -- tests/files/web/generated/M16-GAP-02067-operator-sculpt.face_set_extract.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02067", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02067", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02068", + "gapId": "operator:sculpt.face_set_lasso_gesture", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02068-operator-sculpt.face_set_lasso_gesture.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02068.py -- tests/files/web/generated/M16-GAP-02068-operator-sculpt.face_set_lasso_gesture.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02068", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02068", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02069", + "gapId": "operator:sculpt.face_set_line_gesture", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02069-operator-sculpt.face_set_line_gesture.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02069.py -- tests/files/web/generated/M16-GAP-02069-operator-sculpt.face_set_line_gesture.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02069", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02069", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02070", + "gapId": "operator:sculpt.face_set_polyline_gesture", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02070-operator-sculpt.face_set_polyline_gesture.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02070.py -- tests/files/web/generated/M16-GAP-02070-operator-sculpt.face_set_polyline_gesture.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02070", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02070", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02071", + "gapId": "operator:sculpt.face_sets_create", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02071-operator-sculpt.face_sets_create.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02071.py -- tests/files/web/generated/M16-GAP-02071-operator-sculpt.face_sets_create.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02071", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02071", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02072", + "gapId": "operator:sculpt.face_sets_init", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02072-operator-sculpt.face_sets_init.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02072.py -- tests/files/web/generated/M16-GAP-02072-operator-sculpt.face_sets_init.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02072", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02072", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02073", + "gapId": "operator:sculpt.face_sets_randomize_colors", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02073-operator-sculpt.face_sets_randomize_colors.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02073.py -- tests/files/web/generated/M16-GAP-02073-operator-sculpt.face_sets_randomize_colors.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02073", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02073", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02074", + "gapId": "operator:sculpt.mask_by_color", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02074-operator-sculpt.mask_by_color.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02074.py -- tests/files/web/generated/M16-GAP-02074-operator-sculpt.mask_by_color.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02074", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02074", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02075", + "gapId": "operator:sculpt.mask_filter", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02075-operator-sculpt.mask_filter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02075.py -- tests/files/web/generated/M16-GAP-02075-operator-sculpt.mask_filter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02075", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02075", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02076", + "gapId": "operator:sculpt.mask_from_boundary", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02076-operator-sculpt.mask_from_boundary.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02076.py -- tests/files/web/generated/M16-GAP-02076-operator-sculpt.mask_from_boundary.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02076", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02076", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02077", + "gapId": "operator:sculpt.mask_from_cavity", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02077-operator-sculpt.mask_from_cavity.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02077.py -- tests/files/web/generated/M16-GAP-02077-operator-sculpt.mask_from_cavity.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02077", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02077", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02078", + "gapId": "operator:sculpt.mask_init", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02078-operator-sculpt.mask_init.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02078.py -- tests/files/web/generated/M16-GAP-02078-operator-sculpt.mask_init.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02078", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02078", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02079", + "gapId": "operator:sculpt.mesh_filter", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02079-operator-sculpt.mesh_filter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02079.py -- tests/files/web/generated/M16-GAP-02079-operator-sculpt.mesh_filter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02079", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02079", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02080", + "gapId": "operator:sculpt.optimize", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02080-operator-sculpt.optimize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02080.py -- tests/files/web/generated/M16-GAP-02080-operator-sculpt.optimize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02080", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02080", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02081", + "gapId": "operator:sculpt.paint_mask_extract", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02081-operator-sculpt.paint_mask_extract.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02081.py -- tests/files/web/generated/M16-GAP-02081-operator-sculpt.paint_mask_extract.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02081", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02081", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02082", + "gapId": "operator:sculpt.paint_mask_slice", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02082-operator-sculpt.paint_mask_slice.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02082.py -- tests/files/web/generated/M16-GAP-02082-operator-sculpt.paint_mask_slice.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02082", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02082", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02083", + "gapId": "operator:sculpt.project_line_gesture", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02083-operator-sculpt.project_line_gesture.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02083.py -- tests/files/web/generated/M16-GAP-02083-operator-sculpt.project_line_gesture.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02083", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02083", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02084", + "gapId": "operator:sculpt.sample_detail_size", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02084-operator-sculpt.sample_detail_size.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02084.py -- tests/files/web/generated/M16-GAP-02084-operator-sculpt.sample_detail_size.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02084", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02084", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02085", + "gapId": "operator:sculpt.sculptmode_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02085-operator-sculpt.sculptmode_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02085.py -- tests/files/web/generated/M16-GAP-02085-operator-sculpt.sculptmode_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02085", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02085", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02086", + "gapId": "operator:sculpt.set_persistent_base", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02086-operator-sculpt.set_persistent_base.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02086.py -- tests/files/web/generated/M16-GAP-02086-operator-sculpt.set_persistent_base.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02086", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02086", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02087", + "gapId": "operator:sculpt.set_pivot_position", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02087-operator-sculpt.set_pivot_position.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02087.py -- tests/files/web/generated/M16-GAP-02087-operator-sculpt.set_pivot_position.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02087", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02087", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02088", + "gapId": "operator:sculpt.symmetrize", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02088-operator-sculpt.symmetrize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02088.py -- tests/files/web/generated/M16-GAP-02088-operator-sculpt.symmetrize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02088", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02088", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02089", + "gapId": "operator:sculpt.trim_box_gesture", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02089-operator-sculpt.trim_box_gesture.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02089.py -- tests/files/web/generated/M16-GAP-02089-operator-sculpt.trim_box_gesture.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02089", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02089", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02090", + "gapId": "operator:sculpt.trim_lasso_gesture", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02090-operator-sculpt.trim_lasso_gesture.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02090.py -- tests/files/web/generated/M16-GAP-02090-operator-sculpt.trim_lasso_gesture.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02090", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02090", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02091", + "gapId": "operator:sculpt.trim_line_gesture", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02091-operator-sculpt.trim_line_gesture.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02091.py -- tests/files/web/generated/M16-GAP-02091-operator-sculpt.trim_line_gesture.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02091", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02091", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02092", + "gapId": "operator:sculpt.trim_polyline_gesture", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02092-operator-sculpt.trim_polyline_gesture.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02092.py -- tests/files/web/generated/M16-GAP-02092-operator-sculpt.trim_polyline_gesture.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02092", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02092", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02093", + "gapId": "operator:sculpt.uv_sculpt_grab", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02093-operator-sculpt.uv_sculpt_grab.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02093.py -- tests/files/web/generated/M16-GAP-02093-operator-sculpt.uv_sculpt_grab.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02093", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02093", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02094", + "gapId": "operator:sculpt.uv_sculpt_pinch", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02094-operator-sculpt.uv_sculpt_pinch.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02094.py -- tests/files/web/generated/M16-GAP-02094-operator-sculpt.uv_sculpt_pinch.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02094", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02094", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02095", + "gapId": "operator:sculpt.uv_sculpt_relax", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02095-operator-sculpt.uv_sculpt_relax.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02095.py -- tests/files/web/generated/M16-GAP-02095-operator-sculpt.uv_sculpt_relax.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02095", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02095", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02096", + "gapId": "operator:sculpt_curves.brush_stroke", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02096-operator-sculpt_curves.brush_stroke.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02096.py -- tests/files/web/generated/M16-GAP-02096-operator-sculpt_curves.brush_stroke.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02096", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02096", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02097", + "gapId": "operator:sculpt_curves.min_distance_edit", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02097-operator-sculpt_curves.min_distance_edit.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02097.py -- tests/files/web/generated/M16-GAP-02097-operator-sculpt_curves.min_distance_edit.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02097", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02097", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02098", + "gapId": "operator:sculpt_curves.select_grow", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02098-operator-sculpt_curves.select_grow.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02098.py -- tests/files/web/generated/M16-GAP-02098-operator-sculpt_curves.select_grow.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02098", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02098", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02099", + "gapId": "operator:sculpt_curves.select_random", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02099-operator-sculpt_curves.select_random.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02099.py -- tests/files/web/generated/M16-GAP-02099-operator-sculpt_curves.select_random.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02099", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02099", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02100", + "gapId": "operator:sequencer.add_scene_strip_from_scene_asset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02100-operator-sequencer.add_scene_strip_from_scene_asset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02100.py -- tests/files/web/generated/M16-GAP-02100-operator-sequencer.add_scene_strip_from_scene_asset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02100", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02100", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02101", + "gapId": "operator:sequencer.box_blade", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02101-operator-sequencer.box_blade.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02101.py -- tests/files/web/generated/M16-GAP-02101-operator-sequencer.box_blade.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02101", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02101", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02102", + "gapId": "operator:sequencer.change_effect_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02102-operator-sequencer.change_effect_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02102.py -- tests/files/web/generated/M16-GAP-02102-operator-sequencer.change_effect_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02102", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02102", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02103", + "gapId": "operator:sequencer.change_path", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02103-operator-sequencer.change_path.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02103.py -- tests/files/web/generated/M16-GAP-02103-operator-sequencer.change_path.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02103", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02103", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02104", + "gapId": "operator:sequencer.change_scene", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02104-operator-sequencer.change_scene.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02104.py -- tests/files/web/generated/M16-GAP-02104-operator-sequencer.change_scene.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02104", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02104", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02105", + "gapId": "operator:sequencer.connect", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02105-operator-sequencer.connect.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02105.py -- tests/files/web/generated/M16-GAP-02105-operator-sequencer.connect.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02105", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02105", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02106", + "gapId": "operator:sequencer.copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02106-operator-sequencer.copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02106.py -- tests/files/web/generated/M16-GAP-02106-operator-sequencer.copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02106", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02106", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02107", + "gapId": "operator:sequencer.crossfade_sounds", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02107-operator-sequencer.crossfade_sounds.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02107.py -- tests/files/web/generated/M16-GAP-02107-operator-sequencer.crossfade_sounds.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02107", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02107", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02108", + "gapId": "operator:sequencer.cursor_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02108-operator-sequencer.cursor_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02108.py -- tests/files/web/generated/M16-GAP-02108-operator-sequencer.cursor_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02108", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02108", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02109", + "gapId": "operator:sequencer.deinterlace_selected_movies", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02109-operator-sequencer.deinterlace_selected_movies.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02109.py -- tests/files/web/generated/M16-GAP-02109-operator-sequencer.deinterlace_selected_movies.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02109", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02109", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02110", + "gapId": "operator:sequencer.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02110-operator-sequencer.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02110.py -- tests/files/web/generated/M16-GAP-02110-operator-sequencer.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02110", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02110", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02111", + "gapId": "operator:sequencer.disconnect", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02111-operator-sequencer.disconnect.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02111.py -- tests/files/web/generated/M16-GAP-02111-operator-sequencer.disconnect.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02111", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02111", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02112", + "gapId": "operator:sequencer.duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02112-operator-sequencer.duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02112.py -- tests/files/web/generated/M16-GAP-02112-operator-sequencer.duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02112", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02112", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02113", + "gapId": "operator:sequencer.duplicate_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02113-operator-sequencer.duplicate_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02113.py -- tests/files/web/generated/M16-GAP-02113-operator-sequencer.duplicate_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02113", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02113", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02114", + "gapId": "operator:sequencer.duplicate_move_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02114-operator-sequencer.duplicate_move_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02114.py -- tests/files/web/generated/M16-GAP-02114-operator-sequencer.duplicate_move_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02114", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02114", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02115", + "gapId": "operator:sequencer.effect_strip_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02115-operator-sequencer.effect_strip_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02115.py -- tests/files/web/generated/M16-GAP-02115-operator-sequencer.effect_strip_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02115", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02115", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02116", + "gapId": "operator:sequencer.enable_proxies", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02116-operator-sequencer.enable_proxies.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02116.py -- tests/files/web/generated/M16-GAP-02116-operator-sequencer.enable_proxies.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02116", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02116", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02117", + "gapId": "operator:sequencer.export_subtitles", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02117-operator-sequencer.export_subtitles.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02117.py -- tests/files/web/generated/M16-GAP-02117-operator-sequencer.export_subtitles.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02117", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02117", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02118", + "gapId": "operator:sequencer.fades_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02118-operator-sequencer.fades_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02118.py -- tests/files/web/generated/M16-GAP-02118-operator-sequencer.fades_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02118", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02118", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02119", + "gapId": "operator:sequencer.fades_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02119-operator-sequencer.fades_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02119.py -- tests/files/web/generated/M16-GAP-02119-operator-sequencer.fades_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02119", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02119", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02120", + "gapId": "operator:sequencer.gap_insert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02120-operator-sequencer.gap_insert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02120.py -- tests/files/web/generated/M16-GAP-02120-operator-sequencer.gap_insert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02120", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02120", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02121", + "gapId": "operator:sequencer.gap_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02121-operator-sequencer.gap_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02121.py -- tests/files/web/generated/M16-GAP-02121-operator-sequencer.gap_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02121", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02121", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02122", + "gapId": "operator:sequencer.image_strip_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02122-operator-sequencer.image_strip_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02122.py -- tests/files/web/generated/M16-GAP-02122-operator-sequencer.image_strip_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02122", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02122", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02123", + "gapId": "operator:sequencer.images_separate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02123-operator-sequencer.images_separate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02123.py -- tests/files/web/generated/M16-GAP-02123-operator-sequencer.images_separate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02123", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02123", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02124", + "gapId": "operator:sequencer.lock", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02124-operator-sequencer.lock.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02124.py -- tests/files/web/generated/M16-GAP-02124-operator-sequencer.lock.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02124", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02124", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02125", + "gapId": "operator:sequencer.mask_strip_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02125-operator-sequencer.mask_strip_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02125.py -- tests/files/web/generated/M16-GAP-02125-operator-sequencer.mask_strip_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02125", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02125", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02126", + "gapId": "operator:sequencer.meta_make", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02126-operator-sequencer.meta_make.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02126.py -- tests/files/web/generated/M16-GAP-02126-operator-sequencer.meta_make.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02126", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02126", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02127", + "gapId": "operator:sequencer.meta_separate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02127-operator-sequencer.meta_separate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02127.py -- tests/files/web/generated/M16-GAP-02127-operator-sequencer.meta_separate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02127", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02127", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02128", + "gapId": "operator:sequencer.meta_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02128-operator-sequencer.meta_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02128.py -- tests/files/web/generated/M16-GAP-02128-operator-sequencer.meta_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02128", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02128", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02129", + "gapId": "operator:sequencer.movie_strip_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02129-operator-sequencer.movie_strip_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02129.py -- tests/files/web/generated/M16-GAP-02129-operator-sequencer.movie_strip_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02129", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02129", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02130", + "gapId": "operator:sequencer.movieclip_strip_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02130-operator-sequencer.movieclip_strip_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02130.py -- tests/files/web/generated/M16-GAP-02130-operator-sequencer.movieclip_strip_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02130", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02130", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02131", + "gapId": "operator:sequencer.mute", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02131-operator-sequencer.mute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02131.py -- tests/files/web/generated/M16-GAP-02131-operator-sequencer.mute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02131", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02131", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02132", + "gapId": "operator:sequencer.offset_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02132-operator-sequencer.offset_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02132.py -- tests/files/web/generated/M16-GAP-02132-operator-sequencer.offset_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02132", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02132", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02133", + "gapId": "operator:sequencer.paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02133-operator-sequencer.paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02133.py -- tests/files/web/generated/M16-GAP-02133-operator-sequencer.paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02133", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02133", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02134", + "gapId": "operator:sequencer.preview_duplicate_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02134-operator-sequencer.preview_duplicate_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02134.py -- tests/files/web/generated/M16-GAP-02134-operator-sequencer.preview_duplicate_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02134", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02134", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02135", + "gapId": "operator:sequencer.preview_duplicate_move_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02135-operator-sequencer.preview_duplicate_move_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02135.py -- tests/files/web/generated/M16-GAP-02135-operator-sequencer.preview_duplicate_move_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02135", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02135", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02136", + "gapId": "operator:sequencer.reassign_inputs", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02136-operator-sequencer.reassign_inputs.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02136.py -- tests/files/web/generated/M16-GAP-02136-operator-sequencer.reassign_inputs.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02136", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02136", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02137", + "gapId": "operator:sequencer.rebuild_proxy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02137-operator-sequencer.rebuild_proxy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02137.py -- tests/files/web/generated/M16-GAP-02137-operator-sequencer.rebuild_proxy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02137", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02137", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02138", + "gapId": "operator:sequencer.refresh_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02138-operator-sequencer.refresh_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02138.py -- tests/files/web/generated/M16-GAP-02138-operator-sequencer.refresh_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02138", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02138", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02139", + "gapId": "operator:sequencer.reload", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02139-operator-sequencer.reload.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02139.py -- tests/files/web/generated/M16-GAP-02139-operator-sequencer.reload.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02139", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02139", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02140", + "gapId": "operator:sequencer.rename_channel", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02140-operator-sequencer.rename_channel.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02140.py -- tests/files/web/generated/M16-GAP-02140-operator-sequencer.rename_channel.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02140", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02140", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02141", + "gapId": "operator:sequencer.rendersize", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02141-operator-sequencer.rendersize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02141.py -- tests/files/web/generated/M16-GAP-02141-operator-sequencer.rendersize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02141", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02141", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02142", + "gapId": "operator:sequencer.retiming_add_freeze_frame_slide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02142-operator-sequencer.retiming_add_freeze_frame_slide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02142.py -- tests/files/web/generated/M16-GAP-02142-operator-sequencer.retiming_add_freeze_frame_slide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02142", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02142", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02143", + "gapId": "operator:sequencer.retiming_add_transition_slide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02143-operator-sequencer.retiming_add_transition_slide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02143.py -- tests/files/web/generated/M16-GAP-02143-operator-sequencer.retiming_add_transition_slide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02143", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02143", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02144", + "gapId": "operator:sequencer.retiming_freeze_frame_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02144-operator-sequencer.retiming_freeze_frame_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02144.py -- tests/files/web/generated/M16-GAP-02144-operator-sequencer.retiming_freeze_frame_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02144", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02144", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02145", + "gapId": "operator:sequencer.retiming_key_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02145-operator-sequencer.retiming_key_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02145.py -- tests/files/web/generated/M16-GAP-02145-operator-sequencer.retiming_key_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02145", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02145", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02146", + "gapId": "operator:sequencer.retiming_key_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02146-operator-sequencer.retiming_key_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02146.py -- tests/files/web/generated/M16-GAP-02146-operator-sequencer.retiming_key_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02146", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02146", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02147", + "gapId": "operator:sequencer.retiming_reset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02147-operator-sequencer.retiming_reset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02147.py -- tests/files/web/generated/M16-GAP-02147-operator-sequencer.retiming_reset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02147", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02147", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02148", + "gapId": "operator:sequencer.retiming_segment_speed_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02148-operator-sequencer.retiming_segment_speed_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02148.py -- tests/files/web/generated/M16-GAP-02148-operator-sequencer.retiming_segment_speed_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02148", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02148", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02149", + "gapId": "operator:sequencer.retiming_show", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02149-operator-sequencer.retiming_show.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02149.py -- tests/files/web/generated/M16-GAP-02149-operator-sequencer.retiming_show.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02149", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02149", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02150", + "gapId": "operator:sequencer.retiming_transition_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02150-operator-sequencer.retiming_transition_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02150.py -- tests/files/web/generated/M16-GAP-02150-operator-sequencer.retiming_transition_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02150", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02150", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02151", + "gapId": "operator:sequencer.sample", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02151-operator-sequencer.sample.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02151.py -- tests/files/web/generated/M16-GAP-02151-operator-sequencer.sample.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02151", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02151", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02152", + "gapId": "operator:sequencer.scene_frame_range_update", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02152-operator-sequencer.scene_frame_range_update.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02152.py -- tests/files/web/generated/M16-GAP-02152-operator-sequencer.scene_frame_range_update.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02152", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02152", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02153", + "gapId": "operator:sequencer.scene_strip_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02153-operator-sequencer.scene_strip_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02153.py -- tests/files/web/generated/M16-GAP-02153-operator-sequencer.scene_strip_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02153", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02153", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02154", + "gapId": "operator:sequencer.scene_strip_add_new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02154-operator-sequencer.scene_strip_add_new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02154.py -- tests/files/web/generated/M16-GAP-02154-operator-sequencer.scene_strip_add_new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02154", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02154", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02155", + "gapId": "operator:sequencer.select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02155-operator-sequencer.select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02155.py -- tests/files/web/generated/M16-GAP-02155-operator-sequencer.select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02155", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02155", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02156", + "gapId": "operator:sequencer.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02156-operator-sequencer.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02156.py -- tests/files/web/generated/M16-GAP-02156-operator-sequencer.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02156", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02156", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02157", + "gapId": "operator:sequencer.select_box", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02157-operator-sequencer.select_box.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02157.py -- tests/files/web/generated/M16-GAP-02157-operator-sequencer.select_box.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02157", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02157", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02158", + "gapId": "operator:sequencer.select_circle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02158-operator-sequencer.select_circle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02158.py -- tests/files/web/generated/M16-GAP-02158-operator-sequencer.select_circle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02158", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02158", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02159", + "gapId": "operator:sequencer.select_grouped", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02159-operator-sequencer.select_grouped.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02159.py -- tests/files/web/generated/M16-GAP-02159-operator-sequencer.select_grouped.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02159", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02159", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02160", + "gapId": "operator:sequencer.select_handle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02160-operator-sequencer.select_handle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02160.py -- tests/files/web/generated/M16-GAP-02160-operator-sequencer.select_handle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02160", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02160", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02161", + "gapId": "operator:sequencer.select_handles", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02161-operator-sequencer.select_handles.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02161.py -- tests/files/web/generated/M16-GAP-02161-operator-sequencer.select_handles.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02161", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02161", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02162", + "gapId": "operator:sequencer.select_lasso", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02162-operator-sequencer.select_lasso.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02162.py -- tests/files/web/generated/M16-GAP-02162-operator-sequencer.select_lasso.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02162", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02162", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02163", + "gapId": "operator:sequencer.select_less", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02163-operator-sequencer.select_less.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02163.py -- tests/files/web/generated/M16-GAP-02163-operator-sequencer.select_less.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02163", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02163", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02164", + "gapId": "operator:sequencer.select_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02164-operator-sequencer.select_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02164.py -- tests/files/web/generated/M16-GAP-02164-operator-sequencer.select_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02164", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02164", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02165", + "gapId": "operator:sequencer.select_linked_pick", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02165-operator-sequencer.select_linked_pick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02165.py -- tests/files/web/generated/M16-GAP-02165-operator-sequencer.select_linked_pick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02165", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02165", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02166", + "gapId": "operator:sequencer.select_more", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02166-operator-sequencer.select_more.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02166.py -- tests/files/web/generated/M16-GAP-02166-operator-sequencer.select_more.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02166", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02166", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02167", + "gapId": "operator:sequencer.select_side", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02167-operator-sequencer.select_side.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02167.py -- tests/files/web/generated/M16-GAP-02167-operator-sequencer.select_side.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02167", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02167", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02168", + "gapId": "operator:sequencer.select_side_of_frame", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02168-operator-sequencer.select_side_of_frame.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02168.py -- tests/files/web/generated/M16-GAP-02168-operator-sequencer.select_side_of_frame.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02168", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02168", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02169", + "gapId": "operator:sequencer.set_range_to_strips", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02169-operator-sequencer.set_range_to_strips.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02169.py -- tests/files/web/generated/M16-GAP-02169-operator-sequencer.set_range_to_strips.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02169", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02169", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02170", + "gapId": "operator:sequencer.slip", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02170-operator-sequencer.slip.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02170.py -- tests/files/web/generated/M16-GAP-02170-operator-sequencer.slip.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02170", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02170", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02171", + "gapId": "operator:sequencer.snap", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02171-operator-sequencer.snap.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02171.py -- tests/files/web/generated/M16-GAP-02171-operator-sequencer.snap.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02171", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02171", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02172", + "gapId": "operator:sequencer.sound_strip_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02172-operator-sequencer.sound_strip_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02172.py -- tests/files/web/generated/M16-GAP-02172-operator-sequencer.sound_strip_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02172", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02172", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02173", + "gapId": "operator:sequencer.split", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02173-operator-sequencer.split.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02173.py -- tests/files/web/generated/M16-GAP-02173-operator-sequencer.split.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02173", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02173", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02174", + "gapId": "operator:sequencer.split_multicam", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02174-operator-sequencer.split_multicam.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02174.py -- tests/files/web/generated/M16-GAP-02174-operator-sequencer.split_multicam.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02174", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02174", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02175", + "gapId": "operator:sequencer.strip_color_tag_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02175-operator-sequencer.strip_color_tag_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02175.py -- tests/files/web/generated/M16-GAP-02175-operator-sequencer.strip_color_tag_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02175", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02175", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02176", + "gapId": "operator:sequencer.strip_jump", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02176-operator-sequencer.strip_jump.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02176.py -- tests/files/web/generated/M16-GAP-02176-operator-sequencer.strip_jump.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02176", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02176", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02177", + "gapId": "operator:sequencer.strip_modifier_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02177-operator-sequencer.strip_modifier_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02177.py -- tests/files/web/generated/M16-GAP-02177-operator-sequencer.strip_modifier_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02177", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02177", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02178", + "gapId": "operator:sequencer.strip_modifier_add_node_group", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02178-operator-sequencer.strip_modifier_add_node_group.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02178.py -- tests/files/web/generated/M16-GAP-02178-operator-sequencer.strip_modifier_add_node_group.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02178", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02178", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02179", + "gapId": "operator:sequencer.strip_modifier_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02179-operator-sequencer.strip_modifier_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02179.py -- tests/files/web/generated/M16-GAP-02179-operator-sequencer.strip_modifier_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02179", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02179", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02180", + "gapId": "operator:sequencer.strip_modifier_duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02180-operator-sequencer.strip_modifier_duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02180.py -- tests/files/web/generated/M16-GAP-02180-operator-sequencer.strip_modifier_duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02180", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02180", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02181", + "gapId": "operator:sequencer.strip_modifier_equalizer_redefine", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02181-operator-sequencer.strip_modifier_equalizer_redefine.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02181.py -- tests/files/web/generated/M16-GAP-02181-operator-sequencer.strip_modifier_equalizer_redefine.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02181", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02181", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02182", + "gapId": "operator:sequencer.strip_modifier_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02182-operator-sequencer.strip_modifier_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02182.py -- tests/files/web/generated/M16-GAP-02182-operator-sequencer.strip_modifier_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02182", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02182", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02183", + "gapId": "operator:sequencer.strip_modifier_move_to_index", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02183-operator-sequencer.strip_modifier_move_to_index.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02183.py -- tests/files/web/generated/M16-GAP-02183-operator-sequencer.strip_modifier_move_to_index.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02183", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02183", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02184", + "gapId": "operator:sequencer.strip_modifier_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02184-operator-sequencer.strip_modifier_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02184.py -- tests/files/web/generated/M16-GAP-02184-operator-sequencer.strip_modifier_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02184", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02184", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02185", + "gapId": "operator:sequencer.strip_modifier_set_active", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02185-operator-sequencer.strip_modifier_set_active.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02185.py -- tests/files/web/generated/M16-GAP-02185-operator-sequencer.strip_modifier_set_active.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02185", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02185", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02186", + "gapId": "operator:sequencer.strip_transform_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02186-operator-sequencer.strip_transform_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02186.py -- tests/files/web/generated/M16-GAP-02186-operator-sequencer.strip_transform_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02186", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02186", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02187", + "gapId": "operator:sequencer.strip_transform_fit", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02187-operator-sequencer.strip_transform_fit.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02187.py -- tests/files/web/generated/M16-GAP-02187-operator-sequencer.strip_transform_fit.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02187", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02187", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02188", + "gapId": "operator:sequencer.swap", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02188-operator-sequencer.swap.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02188.py -- tests/files/web/generated/M16-GAP-02188-operator-sequencer.swap.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02188", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02188", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02189", + "gapId": "operator:sequencer.swap_data", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02189-operator-sequencer.swap_data.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02189.py -- tests/files/web/generated/M16-GAP-02189-operator-sequencer.swap_data.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02189", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02189", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02190", + "gapId": "operator:sequencer.swap_inputs", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02190-operator-sequencer.swap_inputs.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02190.py -- tests/files/web/generated/M16-GAP-02190-operator-sequencer.swap_inputs.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02190", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02190", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02191", + "gapId": "operator:sequencer.text_cursor_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02191-operator-sequencer.text_cursor_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02191.py -- tests/files/web/generated/M16-GAP-02191-operator-sequencer.text_cursor_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02191", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02191", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02192", + "gapId": "operator:sequencer.text_cursor_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02192-operator-sequencer.text_cursor_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02192.py -- tests/files/web/generated/M16-GAP-02192-operator-sequencer.text_cursor_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02192", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02192", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02193", + "gapId": "operator:sequencer.text_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02193-operator-sequencer.text_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02193.py -- tests/files/web/generated/M16-GAP-02193-operator-sequencer.text_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02193", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02193", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02194", + "gapId": "operator:sequencer.text_deselect_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02194-operator-sequencer.text_deselect_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02194.py -- tests/files/web/generated/M16-GAP-02194-operator-sequencer.text_deselect_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02194", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02194", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02195", + "gapId": "operator:sequencer.text_edit_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02195-operator-sequencer.text_edit_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02195.py -- tests/files/web/generated/M16-GAP-02195-operator-sequencer.text_edit_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02195", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02195", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02196", + "gapId": "operator:sequencer.text_edit_cut", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02196-operator-sequencer.text_edit_cut.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02196.py -- tests/files/web/generated/M16-GAP-02196-operator-sequencer.text_edit_cut.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02196", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02196", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02197", + "gapId": "operator:sequencer.text_edit_mode_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02197-operator-sequencer.text_edit_mode_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02197.py -- tests/files/web/generated/M16-GAP-02197-operator-sequencer.text_edit_mode_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02197", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02197", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02198", + "gapId": "operator:sequencer.text_edit_paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02198-operator-sequencer.text_edit_paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02198.py -- tests/files/web/generated/M16-GAP-02198-operator-sequencer.text_edit_paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02198", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02198", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02199", + "gapId": "operator:sequencer.text_insert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02199-operator-sequencer.text_insert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02199.py -- tests/files/web/generated/M16-GAP-02199-operator-sequencer.text_insert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02199", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02199", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02200", + "gapId": "operator:sequencer.text_line_break", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02200-operator-sequencer.text_line_break.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02200.py -- tests/files/web/generated/M16-GAP-02200-operator-sequencer.text_line_break.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02200", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02200", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02201", + "gapId": "operator:sequencer.text_select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02201-operator-sequencer.text_select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02201.py -- tests/files/web/generated/M16-GAP-02201-operator-sequencer.text_select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02201", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02201", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02202", + "gapId": "operator:sequencer.text_strip_style_preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02202-operator-sequencer.text_strip_style_preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02202.py -- tests/files/web/generated/M16-GAP-02202-operator-sequencer.text_strip_style_preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02202", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02202", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02203", + "gapId": "operator:sequencer.unlock", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02203-operator-sequencer.unlock.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02203.py -- tests/files/web/generated/M16-GAP-02203-operator-sequencer.unlock.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02203", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02203", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02204", + "gapId": "operator:sequencer.unmute", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02204-operator-sequencer.unmute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02204.py -- tests/files/web/generated/M16-GAP-02204-operator-sequencer.unmute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02204", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02204", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02205", + "gapId": "operator:sequencer.view_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02205-operator-sequencer.view_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02205.py -- tests/files/web/generated/M16-GAP-02205-operator-sequencer.view_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02205", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02205", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02206", + "gapId": "operator:sequencer.view_all_preview", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02206-operator-sequencer.view_all_preview.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02206.py -- tests/files/web/generated/M16-GAP-02206-operator-sequencer.view_all_preview.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02206", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02206", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02207", + "gapId": "operator:sequencer.view_frame", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02207-operator-sequencer.view_frame.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02207.py -- tests/files/web/generated/M16-GAP-02207-operator-sequencer.view_frame.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02207", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02207", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02208", + "gapId": "operator:sequencer.view_ghost_border", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02208-operator-sequencer.view_ghost_border.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02208.py -- tests/files/web/generated/M16-GAP-02208-operator-sequencer.view_ghost_border.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02208", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02208", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02209", + "gapId": "operator:sequencer.view_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02209-operator-sequencer.view_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02209.py -- tests/files/web/generated/M16-GAP-02209-operator-sequencer.view_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02209", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02209", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02210", + "gapId": "operator:sequencer.view_zoom_ratio", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02210-operator-sequencer.view_zoom_ratio.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02210.py -- tests/files/web/generated/M16-GAP-02210-operator-sequencer.view_zoom_ratio.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02210", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02210", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02211", + "gapId": "operator:sound.bake_animation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02211-operator-sound.bake_animation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02211.py -- tests/files/web/generated/M16-GAP-02211-operator-sound.bake_animation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02211", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02211", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02212", + "gapId": "operator:sound.mixdown", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02212-operator-sound.mixdown.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02212.py -- tests/files/web/generated/M16-GAP-02212-operator-sound.mixdown.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02212", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02212", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02213", + "gapId": "operator:sound.open", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02213-operator-sound.open.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02213.py -- tests/files/web/generated/M16-GAP-02213-operator-sound.open.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02213", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02213", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02214", + "gapId": "operator:sound.open_mono", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02214-operator-sound.open_mono.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02214.py -- tests/files/web/generated/M16-GAP-02214-operator-sound.open_mono.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02214", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02214", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02215", + "gapId": "operator:sound.pack", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02215-operator-sound.pack.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02215.py -- tests/files/web/generated/M16-GAP-02215-operator-sound.pack.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02215", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02215", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02216", + "gapId": "operator:sound.unpack", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02216-operator-sound.unpack.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02216.py -- tests/files/web/generated/M16-GAP-02216-operator-sound.unpack.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02216", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02216", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02217", + "gapId": "operator:sound.update_animation_flags", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02217-operator-sound.update_animation_flags.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02217.py -- tests/files/web/generated/M16-GAP-02217-operator-sound.update_animation_flags.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02217", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02217", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02218", + "gapId": "operator:spreadsheet.add_row_filter_rule", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02218-operator-spreadsheet.add_row_filter_rule.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02218.py -- tests/files/web/generated/M16-GAP-02218-operator-spreadsheet.add_row_filter_rule.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02218", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02218", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02219", + "gapId": "operator:spreadsheet.change_spreadsheet_data_source", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02219-operator-spreadsheet.change_spreadsheet_data_source.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02219.py -- tests/files/web/generated/M16-GAP-02219-operator-spreadsheet.change_spreadsheet_data_source.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02219", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02219", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02220", + "gapId": "operator:spreadsheet.fit_column", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02220-operator-spreadsheet.fit_column.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02220.py -- tests/files/web/generated/M16-GAP-02220-operator-spreadsheet.fit_column.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02220", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02220", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02221", + "gapId": "operator:spreadsheet.remove_row_filter_rule", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02221-operator-spreadsheet.remove_row_filter_rule.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02221.py -- tests/files/web/generated/M16-GAP-02221-operator-spreadsheet.remove_row_filter_rule.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02221", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02221", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02222", + "gapId": "operator:spreadsheet.reorder_columns", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02222-operator-spreadsheet.reorder_columns.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02222.py -- tests/files/web/generated/M16-GAP-02222-operator-spreadsheet.reorder_columns.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02222", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02222", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02223", + "gapId": "operator:spreadsheet.resize_column", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02223-operator-spreadsheet.resize_column.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02223.py -- tests/files/web/generated/M16-GAP-02223-operator-spreadsheet.resize_column.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02223", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02223", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02224", + "gapId": "operator:spreadsheet.toggle_pin", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02224-operator-spreadsheet.toggle_pin.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02224.py -- tests/files/web/generated/M16-GAP-02224-operator-spreadsheet.toggle_pin.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02224", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02224", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02225", + "gapId": "operator:surface.primitive_nurbs_surface_circle_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02225-operator-surface.primitive_nurbs_surface_circle_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02225.py -- tests/files/web/generated/M16-GAP-02225-operator-surface.primitive_nurbs_surface_circle_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02225", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02225", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02226", + "gapId": "operator:surface.primitive_nurbs_surface_curve_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02226-operator-surface.primitive_nurbs_surface_curve_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02226.py -- tests/files/web/generated/M16-GAP-02226-operator-surface.primitive_nurbs_surface_curve_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02226", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02226", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02227", + "gapId": "operator:surface.primitive_nurbs_surface_cylinder_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02227-operator-surface.primitive_nurbs_surface_cylinder_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02227.py -- tests/files/web/generated/M16-GAP-02227-operator-surface.primitive_nurbs_surface_cylinder_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02227", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02227", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02228", + "gapId": "operator:surface.primitive_nurbs_surface_sphere_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02228-operator-surface.primitive_nurbs_surface_sphere_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02228.py -- tests/files/web/generated/M16-GAP-02228-operator-surface.primitive_nurbs_surface_sphere_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02228", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02228", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02229", + "gapId": "operator:surface.primitive_nurbs_surface_surface_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02229-operator-surface.primitive_nurbs_surface_surface_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02229.py -- tests/files/web/generated/M16-GAP-02229-operator-surface.primitive_nurbs_surface_surface_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02229", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02229", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02230", + "gapId": "operator:surface.primitive_nurbs_surface_torus_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02230-operator-surface.primitive_nurbs_surface_torus_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02230.py -- tests/files/web/generated/M16-GAP-02230-operator-surface.primitive_nurbs_surface_torus_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02230", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02230", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02231", + "gapId": "operator:text.autocomplete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02231-operator-text.autocomplete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02231.py -- tests/files/web/generated/M16-GAP-02231-operator-text.autocomplete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02231", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02231", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02232", + "gapId": "operator:text.comment_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02232-operator-text.comment_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02232.py -- tests/files/web/generated/M16-GAP-02232-operator-text.comment_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02232", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02232", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02233", + "gapId": "operator:text.convert_whitespace", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02233-operator-text.convert_whitespace.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02233.py -- tests/files/web/generated/M16-GAP-02233-operator-text.convert_whitespace.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02233", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02233", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02234", + "gapId": "operator:text.copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02234-operator-text.copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02234.py -- tests/files/web/generated/M16-GAP-02234-operator-text.copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02234", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02234", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02235", + "gapId": "operator:text.cursor_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02235-operator-text.cursor_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02235.py -- tests/files/web/generated/M16-GAP-02235-operator-text.cursor_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02235", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02235", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02236", + "gapId": "operator:text.cut", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02236-operator-text.cut.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02236.py -- tests/files/web/generated/M16-GAP-02236-operator-text.cut.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02236", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02236", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02237", + "gapId": "operator:text.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02237-operator-text.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02237.py -- tests/files/web/generated/M16-GAP-02237-operator-text.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02237", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02237", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02238", + "gapId": "operator:text.duplicate_line", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02238-operator-text.duplicate_line.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02238.py -- tests/files/web/generated/M16-GAP-02238-operator-text.duplicate_line.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02238", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02238", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02239", + "gapId": "operator:text.find", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02239-operator-text.find.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02239.py -- tests/files/web/generated/M16-GAP-02239-operator-text.find.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02239", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02239", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02240", + "gapId": "operator:text.find_set_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02240-operator-text.find_set_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02240.py -- tests/files/web/generated/M16-GAP-02240-operator-text.find_set_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02240", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02240", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02241", + "gapId": "operator:text.indent", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02241-operator-text.indent.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02241.py -- tests/files/web/generated/M16-GAP-02241-operator-text.indent.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02241", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02241", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02242", + "gapId": "operator:text.indent_or_autocomplete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02242-operator-text.indent_or_autocomplete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02242.py -- tests/files/web/generated/M16-GAP-02242-operator-text.indent_or_autocomplete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02242", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02242", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02243", + "gapId": "operator:text.insert", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02243-operator-text.insert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02243.py -- tests/files/web/generated/M16-GAP-02243-operator-text.insert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02243", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02243", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02244", + "gapId": "operator:text.jump", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02244-operator-text.jump.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02244.py -- tests/files/web/generated/M16-GAP-02244-operator-text.jump.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02244", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02244", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02245", + "gapId": "operator:text.jump_to_file_at_point", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02245-operator-text.jump_to_file_at_point.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02245.py -- tests/files/web/generated/M16-GAP-02245-operator-text.jump_to_file_at_point.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02245", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02245", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02246", + "gapId": "operator:text.line_break", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02246-operator-text.line_break.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02246.py -- tests/files/web/generated/M16-GAP-02246-operator-text.line_break.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02246", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02246", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02247", + "gapId": "operator:text.line_number", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02247-operator-text.line_number.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02247.py -- tests/files/web/generated/M16-GAP-02247-operator-text.line_number.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02247", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02247", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02248", + "gapId": "operator:text.make_internal", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02248-operator-text.make_internal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02248.py -- tests/files/web/generated/M16-GAP-02248-operator-text.make_internal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02248", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02248", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02249", + "gapId": "operator:text.move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02249-operator-text.move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02249.py -- tests/files/web/generated/M16-GAP-02249-operator-text.move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02249", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02249", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02250", + "gapId": "operator:text.move_lines", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02250-operator-text.move_lines.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02250.py -- tests/files/web/generated/M16-GAP-02250-operator-text.move_lines.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02250", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02250", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02251", + "gapId": "operator:text.move_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02251-operator-text.move_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02251.py -- tests/files/web/generated/M16-GAP-02251-operator-text.move_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02251", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02251", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02252", + "gapId": "operator:text.new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02252-operator-text.new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02252.py -- tests/files/web/generated/M16-GAP-02252-operator-text.new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02252", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02252", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02253", + "gapId": "operator:text.open", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02253-operator-text.open.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02253.py -- tests/files/web/generated/M16-GAP-02253-operator-text.open.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02253", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02253", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02254", + "gapId": "operator:text.overwrite_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02254-operator-text.overwrite_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02254.py -- tests/files/web/generated/M16-GAP-02254-operator-text.overwrite_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02254", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02254", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02255", + "gapId": "operator:text.paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02255-operator-text.paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02255.py -- tests/files/web/generated/M16-GAP-02255-operator-text.paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02255", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02255", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02256", + "gapId": "operator:text.reload", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02256-operator-text.reload.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02256.py -- tests/files/web/generated/M16-GAP-02256-operator-text.reload.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02256", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02256", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02257", + "gapId": "operator:text.replace", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02257-operator-text.replace.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02257.py -- tests/files/web/generated/M16-GAP-02257-operator-text.replace.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02257", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02257", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02258", + "gapId": "operator:text.replace_set_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02258-operator-text.replace_set_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02258.py -- tests/files/web/generated/M16-GAP-02258-operator-text.replace_set_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02258", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02258", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02259", + "gapId": "operator:text.resolve_conflict", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02259-operator-text.resolve_conflict.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02259.py -- tests/files/web/generated/M16-GAP-02259-operator-text.resolve_conflict.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02259", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02259", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02260", + "gapId": "operator:text.run_script", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02260-operator-text.run_script.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02260.py -- tests/files/web/generated/M16-GAP-02260-operator-text.run_script.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02260", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02260", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02261", + "gapId": "operator:text.save", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02261-operator-text.save.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02261.py -- tests/files/web/generated/M16-GAP-02261-operator-text.save.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02261", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02261", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02262", + "gapId": "operator:text.save_as", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02262-operator-text.save_as.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02262.py -- tests/files/web/generated/M16-GAP-02262-operator-text.save_as.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02262", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02262", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02263", + "gapId": "operator:text.scroll", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02263-operator-text.scroll.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02263.py -- tests/files/web/generated/M16-GAP-02263-operator-text.scroll.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02263", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02263", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02264", + "gapId": "operator:text.scroll_bar", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02264-operator-text.scroll_bar.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02264.py -- tests/files/web/generated/M16-GAP-02264-operator-text.scroll_bar.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02264", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02264", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02265", + "gapId": "operator:text.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02265-operator-text.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02265.py -- tests/files/web/generated/M16-GAP-02265-operator-text.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02265", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02265", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02266", + "gapId": "operator:text.select_line", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02266-operator-text.select_line.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02266.py -- tests/files/web/generated/M16-GAP-02266-operator-text.select_line.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02266", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02266", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02267", + "gapId": "operator:text.select_word", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02267-operator-text.select_word.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02267.py -- tests/files/web/generated/M16-GAP-02267-operator-text.select_word.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02267", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02267", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02268", + "gapId": "operator:text.selection_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02268-operator-text.selection_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02268.py -- tests/files/web/generated/M16-GAP-02268-operator-text.selection_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02268", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02268", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02269", + "gapId": "operator:text.start_find", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02269-operator-text.start_find.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02269.py -- tests/files/web/generated/M16-GAP-02269-operator-text.start_find.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02269", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02269", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02270", + "gapId": "operator:text.to_3d_object", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02270-operator-text.to_3d_object.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02270.py -- tests/files/web/generated/M16-GAP-02270-operator-text.to_3d_object.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02270", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02270", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02271", + "gapId": "operator:text.unindent", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02271-operator-text.unindent.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02271.py -- tests/files/web/generated/M16-GAP-02271-operator-text.unindent.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02271", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02271", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02272", + "gapId": "operator:text.unlink", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02272-operator-text.unlink.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02272.py -- tests/files/web/generated/M16-GAP-02272-operator-text.unlink.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02272", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02272", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02273", + "gapId": "operator:text.update_shader", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02273-operator-text.update_shader.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02273.py -- tests/files/web/generated/M16-GAP-02273-operator-text.update_shader.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02273", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02273", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02274", + "gapId": "operator:text_editor.preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02274-operator-text_editor.preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02274.py -- tests/files/web/generated/M16-GAP-02274-operator-text_editor.preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02274", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02274", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02275", + "gapId": "operator:texture.new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02275-operator-texture.new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02275.py -- tests/files/web/generated/M16-GAP-02275-operator-texture.new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02275", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02275", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02276", + "gapId": "operator:texture.slot_copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02276-operator-texture.slot_copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02276.py -- tests/files/web/generated/M16-GAP-02276-operator-texture.slot_copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02276", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02276", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02277", + "gapId": "operator:texture.slot_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02277-operator-texture.slot_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02277.py -- tests/files/web/generated/M16-GAP-02277-operator-texture.slot_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02277", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02277", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02278", + "gapId": "operator:texture.slot_paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02278-operator-texture.slot_paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02278.py -- tests/files/web/generated/M16-GAP-02278-operator-texture.slot_paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02278", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02278", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02279", + "gapId": "operator:transform.bbone_resize", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02279-operator-transform.bbone_resize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02279.py -- tests/files/web/generated/M16-GAP-02279-operator-transform.bbone_resize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02279", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02279", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02280", + "gapId": "operator:transform.bend", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02280-operator-transform.bend.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02280.py -- tests/files/web/generated/M16-GAP-02280-operator-transform.bend.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02280", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02280", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02281", + "gapId": "operator:transform.create_orientation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02281-operator-transform.create_orientation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02281.py -- tests/files/web/generated/M16-GAP-02281-operator-transform.create_orientation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02281", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02281", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02282", + "gapId": "operator:transform.delete_orientation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02282-operator-transform.delete_orientation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02282.py -- tests/files/web/generated/M16-GAP-02282-operator-transform.delete_orientation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02282", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02282", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02283", + "gapId": "operator:transform.edge_bevelweight", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02283-operator-transform.edge_bevelweight.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02283.py -- tests/files/web/generated/M16-GAP-02283-operator-transform.edge_bevelweight.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02283", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02283", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02284", + "gapId": "operator:transform.edge_crease", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02284-operator-transform.edge_crease.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02284.py -- tests/files/web/generated/M16-GAP-02284-operator-transform.edge_crease.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02284", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02284", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02285", + "gapId": "operator:transform.edge_slide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02285-operator-transform.edge_slide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02285.py -- tests/files/web/generated/M16-GAP-02285-operator-transform.edge_slide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02285", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02285", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02286", + "gapId": "operator:transform.from_gizmo", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02286-operator-transform.from_gizmo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02286.py -- tests/files/web/generated/M16-GAP-02286-operator-transform.from_gizmo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02286", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02286", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02287", + "gapId": "operator:transform.mirror", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02287-operator-transform.mirror.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02287.py -- tests/files/web/generated/M16-GAP-02287-operator-transform.mirror.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02287", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02287", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02288", + "gapId": "operator:transform.push_pull", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02288-operator-transform.push_pull.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02288.py -- tests/files/web/generated/M16-GAP-02288-operator-transform.push_pull.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02288", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02288", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02289", + "gapId": "operator:transform.resize", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02289-operator-transform.resize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02289.py -- tests/files/web/generated/M16-GAP-02289-operator-transform.resize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02289", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02289", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02290", + "gapId": "operator:transform.rotate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02290-operator-transform.rotate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02290.py -- tests/files/web/generated/M16-GAP-02290-operator-transform.rotate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02290", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02290", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02291", + "gapId": "operator:transform.rotate_normal", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02291-operator-transform.rotate_normal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02291.py -- tests/files/web/generated/M16-GAP-02291-operator-transform.rotate_normal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02291", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02291", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02292", + "gapId": "operator:transform.select_orientation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02292-operator-transform.select_orientation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02292.py -- tests/files/web/generated/M16-GAP-02292-operator-transform.select_orientation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02292", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02292", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02293", + "gapId": "operator:transform.seq_slide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02293-operator-transform.seq_slide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02293.py -- tests/files/web/generated/M16-GAP-02293-operator-transform.seq_slide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02293", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02293", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02294", + "gapId": "operator:transform.shear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02294-operator-transform.shear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02294.py -- tests/files/web/generated/M16-GAP-02294-operator-transform.shear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02294", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02294", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02295", + "gapId": "operator:transform.shrink_fatten", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02295-operator-transform.shrink_fatten.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02295.py -- tests/files/web/generated/M16-GAP-02295-operator-transform.shrink_fatten.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02295", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02295", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02296", + "gapId": "operator:transform.skin_resize", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02296-operator-transform.skin_resize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02296.py -- tests/files/web/generated/M16-GAP-02296-operator-transform.skin_resize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02296", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02296", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02297", + "gapId": "operator:transform.tilt", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02297-operator-transform.tilt.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02297.py -- tests/files/web/generated/M16-GAP-02297-operator-transform.tilt.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02297", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02297", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02298", + "gapId": "operator:transform.tosphere", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02298-operator-transform.tosphere.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02298.py -- tests/files/web/generated/M16-GAP-02298-operator-transform.tosphere.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02298", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02298", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02299", + "gapId": "operator:transform.trackball", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02299-operator-transform.trackball.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02299.py -- tests/files/web/generated/M16-GAP-02299-operator-transform.trackball.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02299", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02299", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02300", + "gapId": "operator:transform.transform", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02300-operator-transform.transform.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02300.py -- tests/files/web/generated/M16-GAP-02300-operator-transform.transform.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02300", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02300", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02301", + "gapId": "operator:transform.translate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02301-operator-transform.translate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02301.py -- tests/files/web/generated/M16-GAP-02301-operator-transform.translate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02301", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02301", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02302", + "gapId": "operator:transform.vert_crease", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02302-operator-transform.vert_crease.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02302.py -- tests/files/web/generated/M16-GAP-02302-operator-transform.vert_crease.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02302", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02302", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02303", + "gapId": "operator:transform.vert_slide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02303-operator-transform.vert_slide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02303.py -- tests/files/web/generated/M16-GAP-02303-operator-transform.vert_slide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02303", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02303", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02304", + "gapId": "operator:transform.vertex_random", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02304-operator-transform.vertex_random.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02304.py -- tests/files/web/generated/M16-GAP-02304-operator-transform.vertex_random.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02304", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02304", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02305", + "gapId": "operator:transform.vertex_warp", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02305-operator-transform.vertex_warp.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02305.py -- tests/files/web/generated/M16-GAP-02305-operator-transform.vertex_warp.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02305", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02305", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02306", + "gapId": "operator:ui.assign_default_button", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02306-operator-ui.assign_default_button.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02306.py -- tests/files/web/generated/M16-GAP-02306-operator-ui.assign_default_button.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02306", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02306", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02307", + "gapId": "operator:ui.button_execute", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02307-operator-ui.button_execute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02307.py -- tests/files/web/generated/M16-GAP-02307-operator-ui.button_execute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02307", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02307", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02308", + "gapId": "operator:ui.button_string_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02308-operator-ui.button_string_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02308.py -- tests/files/web/generated/M16-GAP-02308-operator-ui.button_string_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02308", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02308", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02309", + "gapId": "operator:ui.copy_as_driver_button", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02309-operator-ui.copy_as_driver_button.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02309.py -- tests/files/web/generated/M16-GAP-02309-operator-ui.copy_as_driver_button.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02309", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02309", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02310", + "gapId": "operator:ui.copy_data_path_button", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02310-operator-ui.copy_data_path_button.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02310.py -- tests/files/web/generated/M16-GAP-02310-operator-ui.copy_data_path_button.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02310", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02310", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02311", + "gapId": "operator:ui.copy_driver_to_selected_button", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02311-operator-ui.copy_driver_to_selected_button.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02311.py -- tests/files/web/generated/M16-GAP-02311-operator-ui.copy_driver_to_selected_button.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02311", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02311", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02312", + "gapId": "operator:ui.copy_python_command_button", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02312-operator-ui.copy_python_command_button.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02312.py -- tests/files/web/generated/M16-GAP-02312-operator-ui.copy_python_command_button.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02312", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02312", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02313", + "gapId": "operator:ui.copy_to_selected_button", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02313-operator-ui.copy_to_selected_button.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02313.py -- tests/files/web/generated/M16-GAP-02313-operator-ui.copy_to_selected_button.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02313", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02313", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02314", + "gapId": "operator:ui.drop_color", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02314-operator-ui.drop_color.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02314.py -- tests/files/web/generated/M16-GAP-02314-operator-ui.drop_color.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02314", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02314", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02315", + "gapId": "operator:ui.drop_material", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02315-operator-ui.drop_material.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02315.py -- tests/files/web/generated/M16-GAP-02315-operator-ui.drop_material.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02315", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02315", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02316", + "gapId": "operator:ui.drop_name", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02316-operator-ui.drop_name.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02316.py -- tests/files/web/generated/M16-GAP-02316-operator-ui.drop_name.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02316", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02316", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02317", + "gapId": "operator:ui.editsource", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02317-operator-ui.editsource.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02317.py -- tests/files/web/generated/M16-GAP-02317-operator-ui.editsource.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02317", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02317", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02318", + "gapId": "operator:ui.eyedropper_bone", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02318-operator-ui.eyedropper_bone.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02318.py -- tests/files/web/generated/M16-GAP-02318-operator-ui.eyedropper_bone.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02318", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02318", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02319", + "gapId": "operator:ui.eyedropper_color", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02319-operator-ui.eyedropper_color.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02319.py -- tests/files/web/generated/M16-GAP-02319-operator-ui.eyedropper_color.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02319", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02319", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02320", + "gapId": "operator:ui.eyedropper_colorramp", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02320-operator-ui.eyedropper_colorramp.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02320.py -- tests/files/web/generated/M16-GAP-02320-operator-ui.eyedropper_colorramp.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02320", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02320", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02321", + "gapId": "operator:ui.eyedropper_colorramp_point", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02321-operator-ui.eyedropper_colorramp_point.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02321.py -- tests/files/web/generated/M16-GAP-02321-operator-ui.eyedropper_colorramp_point.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02321", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02321", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02322", + "gapId": "operator:ui.eyedropper_depth", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02322-operator-ui.eyedropper_depth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02322.py -- tests/files/web/generated/M16-GAP-02322-operator-ui.eyedropper_depth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02322", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02322", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02323", + "gapId": "operator:ui.eyedropper_driver", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02323-operator-ui.eyedropper_driver.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02323.py -- tests/files/web/generated/M16-GAP-02323-operator-ui.eyedropper_driver.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02323", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02323", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02324", + "gapId": "operator:ui.eyedropper_grease_pencil_color", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02324-operator-ui.eyedropper_grease_pencil_color.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02324.py -- tests/files/web/generated/M16-GAP-02324-operator-ui.eyedropper_grease_pencil_color.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02324", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02324", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02325", + "gapId": "operator:ui.eyedropper_id", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02325-operator-ui.eyedropper_id.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02325.py -- tests/files/web/generated/M16-GAP-02325-operator-ui.eyedropper_id.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02325", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02325", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02326", + "gapId": "operator:ui.jump_to_target_button", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02326-operator-ui.jump_to_target_button.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02326.py -- tests/files/web/generated/M16-GAP-02326-operator-ui.jump_to_target_button.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02326", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02326", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02327", + "gapId": "operator:ui.list_start_filter", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02327-operator-ui.list_start_filter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02327.py -- tests/files/web/generated/M16-GAP-02327-operator-ui.list_start_filter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02327", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02327", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02328", + "gapId": "operator:ui.override_add_button", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02328-operator-ui.override_add_button.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02328.py -- tests/files/web/generated/M16-GAP-02328-operator-ui.override_add_button.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02328", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02328", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02329", + "gapId": "operator:ui.override_idtemplate_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02329-operator-ui.override_idtemplate_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02329.py -- tests/files/web/generated/M16-GAP-02329-operator-ui.override_idtemplate_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02329", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02329", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02330", + "gapId": "operator:ui.override_idtemplate_make", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02330-operator-ui.override_idtemplate_make.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02330.py -- tests/files/web/generated/M16-GAP-02330-operator-ui.override_idtemplate_make.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02330", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02330", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02331", + "gapId": "operator:ui.override_idtemplate_reset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02331-operator-ui.override_idtemplate_reset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02331.py -- tests/files/web/generated/M16-GAP-02331-operator-ui.override_idtemplate_reset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02331", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02331", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02332", + "gapId": "operator:ui.override_remove_button", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02332-operator-ui.override_remove_button.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02332.py -- tests/files/web/generated/M16-GAP-02332-operator-ui.override_remove_button.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02332", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02332", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02333", + "gapId": "operator:ui.reloadtranslation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02333-operator-ui.reloadtranslation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02333.py -- tests/files/web/generated/M16-GAP-02333-operator-ui.reloadtranslation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02333", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02333", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02334", + "gapId": "operator:ui.reset_default_button", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02334-operator-ui.reset_default_button.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02334.py -- tests/files/web/generated/M16-GAP-02334-operator-ui.reset_default_button.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02334", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02334", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02335", + "gapId": "operator:ui.unset_property_button", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02335-operator-ui.unset_property_button.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02335.py -- tests/files/web/generated/M16-GAP-02335-operator-ui.unset_property_button.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02335", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02335", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02336", + "gapId": "operator:ui.view_drop", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02336-operator-ui.view_drop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02336.py -- tests/files/web/generated/M16-GAP-02336-operator-ui.view_drop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02336", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02336", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02337", + "gapId": "operator:ui.view_item_delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02337-operator-ui.view_item_delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02337.py -- tests/files/web/generated/M16-GAP-02337-operator-ui.view_item_delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02337", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02337", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02338", + "gapId": "operator:ui.view_item_focus", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02338-operator-ui.view_item_focus.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02338.py -- tests/files/web/generated/M16-GAP-02338-operator-ui.view_item_focus.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02338", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02338", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02339", + "gapId": "operator:ui.view_item_navigate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02339-operator-ui.view_item_navigate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02339.py -- tests/files/web/generated/M16-GAP-02339-operator-ui.view_item_navigate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02339", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02339", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02340", + "gapId": "operator:ui.view_item_rename", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02340-operator-ui.view_item_rename.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02340.py -- tests/files/web/generated/M16-GAP-02340-operator-ui.view_item_rename.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02340", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02340", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02341", + "gapId": "operator:ui.view_item_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02341-operator-ui.view_item_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02341.py -- tests/files/web/generated/M16-GAP-02341-operator-ui.view_item_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02341", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02341", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02342", + "gapId": "operator:ui.view_scroll", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02342-operator-ui.view_scroll.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02342.py -- tests/files/web/generated/M16-GAP-02342-operator-ui.view_scroll.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02342", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02342", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02343", + "gapId": "operator:ui.view_start_filter", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02343-operator-ui.view_start_filter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02343.py -- tests/files/web/generated/M16-GAP-02343-operator-ui.view_start_filter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02343", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02343", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02344", + "gapId": "operator:uilist.entry_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02344-operator-uilist.entry_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02344.py -- tests/files/web/generated/M16-GAP-02344-operator-uilist.entry_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02344", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02344", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02345", + "gapId": "operator:uilist.entry_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02345-operator-uilist.entry_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02345.py -- tests/files/web/generated/M16-GAP-02345-operator-uilist.entry_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02345", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02345", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02346", + "gapId": "operator:uilist.entry_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02346-operator-uilist.entry_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02346.py -- tests/files/web/generated/M16-GAP-02346-operator-uilist.entry_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02346", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02346", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02347", + "gapId": "operator:uv.align", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02347-operator-uv.align.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02347.py -- tests/files/web/generated/M16-GAP-02347-operator-uv.align.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02347", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02347", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02348", + "gapId": "operator:uv.align_rotation", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02348-operator-uv.align_rotation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02348.py -- tests/files/web/generated/M16-GAP-02348-operator-uv.align_rotation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02348", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02348", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02349", + "gapId": "operator:uv.arrange_islands", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02349-operator-uv.arrange_islands.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02349.py -- tests/files/web/generated/M16-GAP-02349-operator-uv.arrange_islands.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02349", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02349", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02350", + "gapId": "operator:uv.average_islands_scale", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02350-operator-uv.average_islands_scale.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02350.py -- tests/files/web/generated/M16-GAP-02350-operator-uv.average_islands_scale.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02350", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02350", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02351", + "gapId": "operator:uv.copy", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02351-operator-uv.copy.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02351.py -- tests/files/web/generated/M16-GAP-02351-operator-uv.copy.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02351", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02351", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02352", + "gapId": "operator:uv.copy_mirrored_faces", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02352-operator-uv.copy_mirrored_faces.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02352.py -- tests/files/web/generated/M16-GAP-02352-operator-uv.copy_mirrored_faces.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02352", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02352", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02353", + "gapId": "operator:uv.cube_project", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02353-operator-uv.cube_project.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02353.py -- tests/files/web/generated/M16-GAP-02353-operator-uv.cube_project.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02353", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02353", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02354", + "gapId": "operator:uv.cursor_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02354-operator-uv.cursor_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02354.py -- tests/files/web/generated/M16-GAP-02354-operator-uv.cursor_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02354", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02354", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02355", + "gapId": "operator:uv.custom_region_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02355-operator-uv.custom_region_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02355.py -- tests/files/web/generated/M16-GAP-02355-operator-uv.custom_region_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02355", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02355", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02356", + "gapId": "operator:uv.cylinder_project", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02356-operator-uv.cylinder_project.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02356.py -- tests/files/web/generated/M16-GAP-02356-operator-uv.cylinder_project.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02356", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02356", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02357", + "gapId": "operator:uv.export_layout", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02357-operator-uv.export_layout.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02357.py -- tests/files/web/generated/M16-GAP-02357-operator-uv.export_layout.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02357", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02357", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02358", + "gapId": "operator:uv.follow_active_quads", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02358-operator-uv.follow_active_quads.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02358.py -- tests/files/web/generated/M16-GAP-02358-operator-uv.follow_active_quads.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02358", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02358", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02359", + "gapId": "operator:uv.hide", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02359-operator-uv.hide.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02359.py -- tests/files/web/generated/M16-GAP-02359-operator-uv.hide.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02359", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02359", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02360", + "gapId": "operator:uv.lightmap_pack", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02360-operator-uv.lightmap_pack.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02360.py -- tests/files/web/generated/M16-GAP-02360-operator-uv.lightmap_pack.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02360", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02360", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02361", + "gapId": "operator:uv.mark_seam", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02361-operator-uv.mark_seam.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02361.py -- tests/files/web/generated/M16-GAP-02361-operator-uv.mark_seam.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02361", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02361", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02362", + "gapId": "operator:uv.minimize_stretch", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02362-operator-uv.minimize_stretch.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02362.py -- tests/files/web/generated/M16-GAP-02362-operator-uv.minimize_stretch.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02362", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02362", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02363", + "gapId": "operator:uv.move_on_axis", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02363-operator-uv.move_on_axis.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02363.py -- tests/files/web/generated/M16-GAP-02363-operator-uv.move_on_axis.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02363", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02363", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02364", + "gapId": "operator:uv.pack_islands", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02364-operator-uv.pack_islands.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02364.py -- tests/files/web/generated/M16-GAP-02364-operator-uv.pack_islands.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02364", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02364", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02365", + "gapId": "operator:uv.paste", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02365-operator-uv.paste.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02365.py -- tests/files/web/generated/M16-GAP-02365-operator-uv.paste.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02365", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02365", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02366", + "gapId": "operator:uv.pin", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02366-operator-uv.pin.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02366.py -- tests/files/web/generated/M16-GAP-02366-operator-uv.pin.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02366", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02366", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02367", + "gapId": "operator:uv.project_from_view", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02367-operator-uv.project_from_view.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02367.py -- tests/files/web/generated/M16-GAP-02367-operator-uv.project_from_view.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02367", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02367", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02368", + "gapId": "operator:uv.randomize_uv_transform", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02368-operator-uv.randomize_uv_transform.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02368.py -- tests/files/web/generated/M16-GAP-02368-operator-uv.randomize_uv_transform.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02368", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02368", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02369", + "gapId": "operator:uv.remove_doubles", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02369-operator-uv.remove_doubles.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02369.py -- tests/files/web/generated/M16-GAP-02369-operator-uv.remove_doubles.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02369", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02369", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02370", + "gapId": "operator:uv.reset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02370-operator-uv.reset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02370.py -- tests/files/web/generated/M16-GAP-02370-operator-uv.reset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02370", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02370", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02371", + "gapId": "operator:uv.reveal", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02371-operator-uv.reveal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02371.py -- tests/files/web/generated/M16-GAP-02371-operator-uv.reveal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02371", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02371", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02372", + "gapId": "operator:uv.rip", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02372-operator-uv.rip.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02372.py -- tests/files/web/generated/M16-GAP-02372-operator-uv.rip.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02372", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02372", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02373", + "gapId": "operator:uv.rip_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02373-operator-uv.rip_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02373.py -- tests/files/web/generated/M16-GAP-02373-operator-uv.rip_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02373", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02373", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02374", + "gapId": "operator:uv.seams_from_islands", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02374-operator-uv.seams_from_islands.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02374.py -- tests/files/web/generated/M16-GAP-02374-operator-uv.seams_from_islands.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02374", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02374", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02375", + "gapId": "operator:uv.select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02375-operator-uv.select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02375.py -- tests/files/web/generated/M16-GAP-02375-operator-uv.select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02375", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02375", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02376", + "gapId": "operator:uv.select_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02376-operator-uv.select_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02376.py -- tests/files/web/generated/M16-GAP-02376-operator-uv.select_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02376", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02376", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02377", + "gapId": "operator:uv.select_box", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02377-operator-uv.select_box.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02377.py -- tests/files/web/generated/M16-GAP-02377-operator-uv.select_box.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02377", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02377", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02378", + "gapId": "operator:uv.select_by_winding", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02378-operator-uv.select_by_winding.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02378.py -- tests/files/web/generated/M16-GAP-02378-operator-uv.select_by_winding.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02378", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02378", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02379", + "gapId": "operator:uv.select_circle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02379-operator-uv.select_circle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02379.py -- tests/files/web/generated/M16-GAP-02379-operator-uv.select_circle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02379", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02379", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02380", + "gapId": "operator:uv.select_edge_ring", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02380-operator-uv.select_edge_ring.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02380.py -- tests/files/web/generated/M16-GAP-02380-operator-uv.select_edge_ring.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02380", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02380", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02381", + "gapId": "operator:uv.select_lasso", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02381-operator-uv.select_lasso.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02381.py -- tests/files/web/generated/M16-GAP-02381-operator-uv.select_lasso.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02381", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02381", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02382", + "gapId": "operator:uv.select_less", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02382-operator-uv.select_less.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02382.py -- tests/files/web/generated/M16-GAP-02382-operator-uv.select_less.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02382", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02382", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02383", + "gapId": "operator:uv.select_linked", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02383-operator-uv.select_linked.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02383.py -- tests/files/web/generated/M16-GAP-02383-operator-uv.select_linked.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02383", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02383", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02384", + "gapId": "operator:uv.select_linked_pick", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02384-operator-uv.select_linked_pick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02384.py -- tests/files/web/generated/M16-GAP-02384-operator-uv.select_linked_pick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02384", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02384", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02385", + "gapId": "operator:uv.select_loop", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02385-operator-uv.select_loop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02385.py -- tests/files/web/generated/M16-GAP-02385-operator-uv.select_loop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02385", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02385", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02386", + "gapId": "operator:uv.select_mode", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02386-operator-uv.select_mode.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02386.py -- tests/files/web/generated/M16-GAP-02386-operator-uv.select_mode.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02386", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02386", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02387", + "gapId": "operator:uv.select_more", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02387-operator-uv.select_more.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02387.py -- tests/files/web/generated/M16-GAP-02387-operator-uv.select_more.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02387", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02387", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02388", + "gapId": "operator:uv.select_overlap", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02388-operator-uv.select_overlap.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02388.py -- tests/files/web/generated/M16-GAP-02388-operator-uv.select_overlap.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02388", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02388", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02389", + "gapId": "operator:uv.select_pinned", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02389-operator-uv.select_pinned.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02389.py -- tests/files/web/generated/M16-GAP-02389-operator-uv.select_pinned.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02389", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02389", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02390", + "gapId": "operator:uv.select_similar", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02390-operator-uv.select_similar.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02390.py -- tests/files/web/generated/M16-GAP-02390-operator-uv.select_similar.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02390", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02390", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02391", + "gapId": "operator:uv.select_split", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02391-operator-uv.select_split.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02391.py -- tests/files/web/generated/M16-GAP-02391-operator-uv.select_split.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02391", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02391", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02392", + "gapId": "operator:uv.select_tile", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02392-operator-uv.select_tile.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02392.py -- tests/files/web/generated/M16-GAP-02392-operator-uv.select_tile.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02392", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02392", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02393", + "gapId": "operator:uv.shortest_path_pick", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02393-operator-uv.shortest_path_pick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02393.py -- tests/files/web/generated/M16-GAP-02393-operator-uv.shortest_path_pick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02393", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02393", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02394", + "gapId": "operator:uv.shortest_path_select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02394-operator-uv.shortest_path_select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02394.py -- tests/files/web/generated/M16-GAP-02394-operator-uv.shortest_path_select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02394", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02394", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02395", + "gapId": "operator:uv.smart_project", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02395-operator-uv.smart_project.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02395.py -- tests/files/web/generated/M16-GAP-02395-operator-uv.smart_project.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02395", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02395", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02396", + "gapId": "operator:uv.snap_cursor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02396-operator-uv.snap_cursor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02396.py -- tests/files/web/generated/M16-GAP-02396-operator-uv.snap_cursor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02396", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02396", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02397", + "gapId": "operator:uv.snap_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02397-operator-uv.snap_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02397.py -- tests/files/web/generated/M16-GAP-02397-operator-uv.snap_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02397", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02397", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02398", + "gapId": "operator:uv.sphere_project", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02398-operator-uv.sphere_project.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02398.py -- tests/files/web/generated/M16-GAP-02398-operator-uv.sphere_project.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02398", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02398", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02399", + "gapId": "operator:uv.stitch", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02399-operator-uv.stitch.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02399.py -- tests/files/web/generated/M16-GAP-02399-operator-uv.stitch.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02399", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02399", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02400", + "gapId": "operator:uv.unwrap", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02400-operator-uv.unwrap.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02400.py -- tests/files/web/generated/M16-GAP-02400-operator-uv.unwrap.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02400", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02400", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02401", + "gapId": "operator:uv.weld", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02401-operator-uv.weld.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02401.py -- tests/files/web/generated/M16-GAP-02401-operator-uv.weld.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02401", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02401", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02402", + "gapId": "operator:view2d.edge_pan", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02402-operator-view2d.edge_pan.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02402.py -- tests/files/web/generated/M16-GAP-02402-operator-view2d.edge_pan.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02402", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02402", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02403", + "gapId": "operator:view2d.ndof", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02403-operator-view2d.ndof.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02403.py -- tests/files/web/generated/M16-GAP-02403-operator-view2d.ndof.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02403", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02403", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02404", + "gapId": "operator:view2d.pan", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02404-operator-view2d.pan.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02404.py -- tests/files/web/generated/M16-GAP-02404-operator-view2d.pan.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02404", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02404", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02405", + "gapId": "operator:view2d.reset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02405-operator-view2d.reset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02405.py -- tests/files/web/generated/M16-GAP-02405-operator-view2d.reset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02405", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02405", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02406", + "gapId": "operator:view2d.scroll_down", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02406-operator-view2d.scroll_down.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02406.py -- tests/files/web/generated/M16-GAP-02406-operator-view2d.scroll_down.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02406", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02406", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02407", + "gapId": "operator:view2d.scroll_left", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02407-operator-view2d.scroll_left.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02407.py -- tests/files/web/generated/M16-GAP-02407-operator-view2d.scroll_left.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02407", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02407", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02408", + "gapId": "operator:view2d.scroll_right", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02408-operator-view2d.scroll_right.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02408.py -- tests/files/web/generated/M16-GAP-02408-operator-view2d.scroll_right.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02408", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02408", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02409", + "gapId": "operator:view2d.scroll_up", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02409-operator-view2d.scroll_up.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02409.py -- tests/files/web/generated/M16-GAP-02409-operator-view2d.scroll_up.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02409", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02409", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02410", + "gapId": "operator:view2d.scroller_activate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02410-operator-view2d.scroller_activate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02410.py -- tests/files/web/generated/M16-GAP-02410-operator-view2d.scroller_activate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02410", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02410", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02411", + "gapId": "operator:view2d.smoothview", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02411-operator-view2d.smoothview.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02411.py -- tests/files/web/generated/M16-GAP-02411-operator-view2d.smoothview.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02411", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02411", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02412", + "gapId": "operator:view2d.zoom", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02412-operator-view2d.zoom.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02412.py -- tests/files/web/generated/M16-GAP-02412-operator-view2d.zoom.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02412", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02412", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02413", + "gapId": "operator:view2d.zoom_border", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02413-operator-view2d.zoom_border.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02413.py -- tests/files/web/generated/M16-GAP-02413-operator-view2d.zoom_border.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02413", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02413", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02414", + "gapId": "operator:view2d.zoom_in", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02414-operator-view2d.zoom_in.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02414.py -- tests/files/web/generated/M16-GAP-02414-operator-view2d.zoom_in.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02414", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02414", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02415", + "gapId": "operator:view2d.zoom_out", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02415-operator-view2d.zoom_out.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02415.py -- tests/files/web/generated/M16-GAP-02415-operator-view2d.zoom_out.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02415", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02415", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02416", + "gapId": "operator:view3d.bone_select_menu", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02416-operator-view3d.bone_select_menu.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02416.py -- tests/files/web/generated/M16-GAP-02416-operator-view3d.bone_select_menu.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02416", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02416", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02417", + "gapId": "operator:view3d.camera_background_image_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02417-operator-view3d.camera_background_image_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02417.py -- tests/files/web/generated/M16-GAP-02417-operator-view3d.camera_background_image_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02417", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02417", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02418", + "gapId": "operator:view3d.camera_background_image_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02418-operator-view3d.camera_background_image_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02418.py -- tests/files/web/generated/M16-GAP-02418-operator-view3d.camera_background_image_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02418", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02418", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02419", + "gapId": "operator:view3d.camera_to_view", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02419-operator-view3d.camera_to_view.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02419.py -- tests/files/web/generated/M16-GAP-02419-operator-view3d.camera_to_view.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02419", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02419", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02420", + "gapId": "operator:view3d.camera_to_view_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02420-operator-view3d.camera_to_view_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02420.py -- tests/files/web/generated/M16-GAP-02420-operator-view3d.camera_to_view_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02420", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02420", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02421", + "gapId": "operator:view3d.clear_render_border", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02421-operator-view3d.clear_render_border.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02421.py -- tests/files/web/generated/M16-GAP-02421-operator-view3d.clear_render_border.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02421", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02421", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02422", + "gapId": "operator:view3d.clip_border", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02422-operator-view3d.clip_border.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02422.py -- tests/files/web/generated/M16-GAP-02422-operator-view3d.clip_border.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02422", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02422", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02423", + "gapId": "operator:view3d.copybuffer", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02423-operator-view3d.copybuffer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02423.py -- tests/files/web/generated/M16-GAP-02423-operator-view3d.copybuffer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02423", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02423", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02424", + "gapId": "operator:view3d.cursor3d", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02424-operator-view3d.cursor3d.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02424.py -- tests/files/web/generated/M16-GAP-02424-operator-view3d.cursor3d.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02424", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02424", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02425", + "gapId": "operator:view3d.dolly", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02425-operator-view3d.dolly.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02425.py -- tests/files/web/generated/M16-GAP-02425-operator-view3d.dolly.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02425", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02425", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02426", + "gapId": "operator:view3d.drop_world", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02426-operator-view3d.drop_world.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02426.py -- tests/files/web/generated/M16-GAP-02426-operator-view3d.drop_world.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02426", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02426", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02427", + "gapId": "operator:view3d.edit_mesh_extrude_individual_move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02427-operator-view3d.edit_mesh_extrude_individual_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02427.py -- tests/files/web/generated/M16-GAP-02427-operator-view3d.edit_mesh_extrude_individual_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02427", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02427", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02428", + "gapId": "operator:view3d.edit_mesh_extrude_manifold_normal", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02428-operator-view3d.edit_mesh_extrude_manifold_normal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02428.py -- tests/files/web/generated/M16-GAP-02428-operator-view3d.edit_mesh_extrude_manifold_normal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02428", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02428", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02429", + "gapId": "operator:view3d.edit_mesh_extrude_move_normal", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02429-operator-view3d.edit_mesh_extrude_move_normal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02429.py -- tests/files/web/generated/M16-GAP-02429-operator-view3d.edit_mesh_extrude_move_normal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02429", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02429", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02430", + "gapId": "operator:view3d.edit_mesh_extrude_move_shrink_fatten", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02430-operator-view3d.edit_mesh_extrude_move_shrink_fatten.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02430.py -- tests/files/web/generated/M16-GAP-02430-operator-view3d.edit_mesh_extrude_move_shrink_fatten.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02430", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02430", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02431", + "gapId": "operator:view3d.fly", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02431-operator-view3d.fly.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02431.py -- tests/files/web/generated/M16-GAP-02431-operator-view3d.fly.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02431", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02431", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02432", + "gapId": "operator:view3d.interactive_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02432-operator-view3d.interactive_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02432.py -- tests/files/web/generated/M16-GAP-02432-operator-view3d.interactive_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02432", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02432", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02433", + "gapId": "operator:view3d.localview", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02433-operator-view3d.localview.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02433.py -- tests/files/web/generated/M16-GAP-02433-operator-view3d.localview.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02433", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02433", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02434", + "gapId": "operator:view3d.localview_remove_from", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02434-operator-view3d.localview_remove_from.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02434.py -- tests/files/web/generated/M16-GAP-02434-operator-view3d.localview_remove_from.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02434", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02434", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02435", + "gapId": "operator:view3d.move", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02435-operator-view3d.move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02435.py -- tests/files/web/generated/M16-GAP-02435-operator-view3d.move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02435", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02435", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02436", + "gapId": "operator:view3d.navigate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02436-operator-view3d.navigate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02436.py -- tests/files/web/generated/M16-GAP-02436-operator-view3d.navigate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02436", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02436", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02437", + "gapId": "operator:view3d.ndof_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02437-operator-view3d.ndof_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02437.py -- tests/files/web/generated/M16-GAP-02437-operator-view3d.ndof_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02437", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02437", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02438", + "gapId": "operator:view3d.ndof_orbit", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02438-operator-view3d.ndof_orbit.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02438.py -- tests/files/web/generated/M16-GAP-02438-operator-view3d.ndof_orbit.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02438", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02438", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02439", + "gapId": "operator:view3d.ndof_orbit_zoom", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02439-operator-view3d.ndof_orbit_zoom.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02439.py -- tests/files/web/generated/M16-GAP-02439-operator-view3d.ndof_orbit_zoom.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02439", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02439", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02440", + "gapId": "operator:view3d.ndof_pan", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02440-operator-view3d.ndof_pan.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02440.py -- tests/files/web/generated/M16-GAP-02440-operator-view3d.ndof_pan.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02440", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02440", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02441", + "gapId": "operator:view3d.object_as_camera", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02441-operator-view3d.object_as_camera.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02441.py -- tests/files/web/generated/M16-GAP-02441-operator-view3d.object_as_camera.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02441", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02441", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02442", + "gapId": "operator:view3d.object_mode_pie_or_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02442-operator-view3d.object_mode_pie_or_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02442.py -- tests/files/web/generated/M16-GAP-02442-operator-view3d.object_mode_pie_or_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02442", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02442", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02443", + "gapId": "operator:view3d.pastebuffer", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02443-operator-view3d.pastebuffer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02443.py -- tests/files/web/generated/M16-GAP-02443-operator-view3d.pastebuffer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02443", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02443", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02444", + "gapId": "operator:view3d.render_border", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02444-operator-view3d.render_border.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02444.py -- tests/files/web/generated/M16-GAP-02444-operator-view3d.render_border.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02444", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02444", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02445", + "gapId": "operator:view3d.rotate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02445-operator-view3d.rotate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02445.py -- tests/files/web/generated/M16-GAP-02445-operator-view3d.rotate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02445", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02445", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02446", + "gapId": "operator:view3d.ruler_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02446-operator-view3d.ruler_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02446.py -- tests/files/web/generated/M16-GAP-02446-operator-view3d.ruler_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02446", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02446", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02447", + "gapId": "operator:view3d.ruler_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02447-operator-view3d.ruler_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02447.py -- tests/files/web/generated/M16-GAP-02447-operator-view3d.ruler_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02447", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02447", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02448", + "gapId": "operator:view3d.select", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02448-operator-view3d.select.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02448.py -- tests/files/web/generated/M16-GAP-02448-operator-view3d.select.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02448", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02448", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02449", + "gapId": "operator:view3d.select_box", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02449-operator-view3d.select_box.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02449.py -- tests/files/web/generated/M16-GAP-02449-operator-view3d.select_box.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02449", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02449", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02450", + "gapId": "operator:view3d.select_circle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02450-operator-view3d.select_circle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02450.py -- tests/files/web/generated/M16-GAP-02450-operator-view3d.select_circle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02450", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02450", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02451", + "gapId": "operator:view3d.select_lasso", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02451-operator-view3d.select_lasso.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02451.py -- tests/files/web/generated/M16-GAP-02451-operator-view3d.select_lasso.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02451", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02451", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02452", + "gapId": "operator:view3d.select_menu", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02452-operator-view3d.select_menu.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02452.py -- tests/files/web/generated/M16-GAP-02452-operator-view3d.select_menu.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02452", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02452", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02453", + "gapId": "operator:view3d.smoothview", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02453-operator-view3d.smoothview.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02453.py -- tests/files/web/generated/M16-GAP-02453-operator-view3d.smoothview.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02453", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02453", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02454", + "gapId": "operator:view3d.snap_cursor_to_active", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02454-operator-view3d.snap_cursor_to_active.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02454.py -- tests/files/web/generated/M16-GAP-02454-operator-view3d.snap_cursor_to_active.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02454", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02454", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02455", + "gapId": "operator:view3d.snap_cursor_to_center", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02455-operator-view3d.snap_cursor_to_center.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02455.py -- tests/files/web/generated/M16-GAP-02455-operator-view3d.snap_cursor_to_center.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02455", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02455", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02456", + "gapId": "operator:view3d.snap_cursor_to_grid", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02456-operator-view3d.snap_cursor_to_grid.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02456.py -- tests/files/web/generated/M16-GAP-02456-operator-view3d.snap_cursor_to_grid.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02456", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02456", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02457", + "gapId": "operator:view3d.snap_cursor_to_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02457-operator-view3d.snap_cursor_to_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02457.py -- tests/files/web/generated/M16-GAP-02457-operator-view3d.snap_cursor_to_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02457", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02457", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02458", + "gapId": "operator:view3d.snap_selected_to_active", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02458-operator-view3d.snap_selected_to_active.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02458.py -- tests/files/web/generated/M16-GAP-02458-operator-view3d.snap_selected_to_active.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02458", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02458", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02459", + "gapId": "operator:view3d.snap_selected_to_cursor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02459-operator-view3d.snap_selected_to_cursor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02459.py -- tests/files/web/generated/M16-GAP-02459-operator-view3d.snap_selected_to_cursor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02459", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02459", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02460", + "gapId": "operator:view3d.snap_selected_to_grid", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02460-operator-view3d.snap_selected_to_grid.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02460.py -- tests/files/web/generated/M16-GAP-02460-operator-view3d.snap_selected_to_grid.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02460", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02460", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02461", + "gapId": "operator:view3d.toggle_matcap_flip", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02461-operator-view3d.toggle_matcap_flip.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02461.py -- tests/files/web/generated/M16-GAP-02461-operator-view3d.toggle_matcap_flip.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02461", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02461", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02462", + "gapId": "operator:view3d.toggle_shading", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02462-operator-view3d.toggle_shading.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02462.py -- tests/files/web/generated/M16-GAP-02462-operator-view3d.toggle_shading.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02462", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02462", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02463", + "gapId": "operator:view3d.toggle_xray", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02463-operator-view3d.toggle_xray.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02463.py -- tests/files/web/generated/M16-GAP-02463-operator-view3d.toggle_xray.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02463", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02463", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02464", + "gapId": "operator:view3d.transform_gizmo_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02464-operator-view3d.transform_gizmo_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02464.py -- tests/files/web/generated/M16-GAP-02464-operator-view3d.transform_gizmo_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02464", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02464", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02465", + "gapId": "operator:view3d.view_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02465-operator-view3d.view_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02465.py -- tests/files/web/generated/M16-GAP-02465-operator-view3d.view_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02465", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02465", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02466", + "gapId": "operator:view3d.view_axis", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02466-operator-view3d.view_axis.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02466.py -- tests/files/web/generated/M16-GAP-02466-operator-view3d.view_axis.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02466", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02466", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02467", + "gapId": "operator:view3d.view_camera", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02467-operator-view3d.view_camera.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02467.py -- tests/files/web/generated/M16-GAP-02467-operator-view3d.view_camera.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02467", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02467", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02468", + "gapId": "operator:view3d.view_center_camera", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02468-operator-view3d.view_center_camera.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02468.py -- tests/files/web/generated/M16-GAP-02468-operator-view3d.view_center_camera.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02468", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02468", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02469", + "gapId": "operator:view3d.view_center_cursor", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02469-operator-view3d.view_center_cursor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02469.py -- tests/files/web/generated/M16-GAP-02469-operator-view3d.view_center_cursor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02469", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02469", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02470", + "gapId": "operator:view3d.view_center_lock", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02470-operator-view3d.view_center_lock.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02470.py -- tests/files/web/generated/M16-GAP-02470-operator-view3d.view_center_lock.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02470", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02470", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02471", + "gapId": "operator:view3d.view_center_pick", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02471-operator-view3d.view_center_pick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02471.py -- tests/files/web/generated/M16-GAP-02471-operator-view3d.view_center_pick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02471", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02471", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02472", + "gapId": "operator:view3d.view_lock_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02472-operator-view3d.view_lock_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02472.py -- tests/files/web/generated/M16-GAP-02472-operator-view3d.view_lock_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02472", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02472", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02473", + "gapId": "operator:view3d.view_lock_to_active", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02473-operator-view3d.view_lock_to_active.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02473.py -- tests/files/web/generated/M16-GAP-02473-operator-view3d.view_lock_to_active.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02473", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02473", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02474", + "gapId": "operator:view3d.view_orbit", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02474-operator-view3d.view_orbit.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02474.py -- tests/files/web/generated/M16-GAP-02474-operator-view3d.view_orbit.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02474", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02474", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02475", + "gapId": "operator:view3d.view_pan", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02475-operator-view3d.view_pan.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02475.py -- tests/files/web/generated/M16-GAP-02475-operator-view3d.view_pan.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02475", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02475", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02476", + "gapId": "operator:view3d.view_persportho", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02476-operator-view3d.view_persportho.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02476.py -- tests/files/web/generated/M16-GAP-02476-operator-view3d.view_persportho.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02476", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02476", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02477", + "gapId": "operator:view3d.view_roll", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02477-operator-view3d.view_roll.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02477.py -- tests/files/web/generated/M16-GAP-02477-operator-view3d.view_roll.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02477", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02477", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02478", + "gapId": "operator:view3d.view_selected", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02478-operator-view3d.view_selected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02478.py -- tests/files/web/generated/M16-GAP-02478-operator-view3d.view_selected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02478", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02478", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02479", + "gapId": "operator:view3d.walk", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02479-operator-view3d.walk.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02479.py -- tests/files/web/generated/M16-GAP-02479-operator-view3d.walk.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02479", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02479", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02480", + "gapId": "operator:view3d.zoom", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02480-operator-view3d.zoom.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02480.py -- tests/files/web/generated/M16-GAP-02480-operator-view3d.zoom.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02480", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02480", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02481", + "gapId": "operator:view3d.zoom_border", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02481-operator-view3d.zoom_border.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02481.py -- tests/files/web/generated/M16-GAP-02481-operator-view3d.zoom_border.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02481", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02481", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02482", + "gapId": "operator:view3d.zoom_camera_1_to_1", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02482-operator-view3d.zoom_camera_1_to_1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02482.py -- tests/files/web/generated/M16-GAP-02482-operator-view3d.zoom_camera_1_to_1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02482", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02482", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02483", + "gapId": "operator:wm.append", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02483-operator-wm.append.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02483.py -- tests/files/web/generated/M16-GAP-02483-operator-wm.append.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02483", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02483", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02484", + "gapId": "operator:wm.batch_rename", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02484-operator-wm.batch_rename.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02484.py -- tests/files/web/generated/M16-GAP-02484-operator-wm.batch_rename.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02484", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02484", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02485", + "gapId": "operator:wm.blend_strings_utf8_validate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02485-operator-wm.blend_strings_utf8_validate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02485.py -- tests/files/web/generated/M16-GAP-02485-operator-wm.blend_strings_utf8_validate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02485", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02485", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02486", + "gapId": "operator:wm.call_asset_shelf_popover", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02486-operator-wm.call_asset_shelf_popover.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02486.py -- tests/files/web/generated/M16-GAP-02486-operator-wm.call_asset_shelf_popover.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02486", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02486", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02487", + "gapId": "operator:wm.call_menu", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02487-operator-wm.call_menu.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02487.py -- tests/files/web/generated/M16-GAP-02487-operator-wm.call_menu.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02487", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02487", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02488", + "gapId": "operator:wm.call_menu_pie", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02488-operator-wm.call_menu_pie.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02488.py -- tests/files/web/generated/M16-GAP-02488-operator-wm.call_menu_pie.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02488", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02488", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02489", + "gapId": "operator:wm.call_panel", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02489-operator-wm.call_panel.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02489.py -- tests/files/web/generated/M16-GAP-02489-operator-wm.call_panel.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02489", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02489", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02490", + "gapId": "operator:wm.clear_recent_files", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02490-operator-wm.clear_recent_files.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02490.py -- tests/files/web/generated/M16-GAP-02490-operator-wm.clear_recent_files.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02490", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02490", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02491", + "gapId": "operator:wm.collection_export_all", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02491-operator-wm.collection_export_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02491.py -- tests/files/web/generated/M16-GAP-02491-operator-wm.collection_export_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02491", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02491", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02492", + "gapId": "operator:wm.context_collection_boolean_set", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02492-operator-wm.context_collection_boolean_set.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02492.py -- tests/files/web/generated/M16-GAP-02492-operator-wm.context_collection_boolean_set.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02492", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02492", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02493", + "gapId": "operator:wm.context_cycle_array", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02493-operator-wm.context_cycle_array.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02493.py -- tests/files/web/generated/M16-GAP-02493-operator-wm.context_cycle_array.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02493", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02493", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02494", + "gapId": "operator:wm.context_cycle_enum", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02494-operator-wm.context_cycle_enum.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02494.py -- tests/files/web/generated/M16-GAP-02494-operator-wm.context_cycle_enum.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02494", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02494", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02495", + "gapId": "operator:wm.context_cycle_int", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02495-operator-wm.context_cycle_int.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02495.py -- tests/files/web/generated/M16-GAP-02495-operator-wm.context_cycle_int.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02495", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02495", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02496", + "gapId": "operator:wm.context_menu_enum", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02496-operator-wm.context_menu_enum.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02496.py -- tests/files/web/generated/M16-GAP-02496-operator-wm.context_menu_enum.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02496", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02496", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02497", + "gapId": "operator:wm.context_modal_mouse", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02497-operator-wm.context_modal_mouse.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02497.py -- tests/files/web/generated/M16-GAP-02497-operator-wm.context_modal_mouse.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02497", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02497", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02498", + "gapId": "operator:wm.context_pie_enum", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02498-operator-wm.context_pie_enum.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02498.py -- tests/files/web/generated/M16-GAP-02498-operator-wm.context_pie_enum.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02498", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02498", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02499", + "gapId": "operator:wm.context_scale_float", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02499-operator-wm.context_scale_float.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02499.py -- tests/files/web/generated/M16-GAP-02499-operator-wm.context_scale_float.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02499", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02499", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02500", + "gapId": "operator:wm.context_scale_int", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02500-operator-wm.context_scale_int.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02500.py -- tests/files/web/generated/M16-GAP-02500-operator-wm.context_scale_int.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02500", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02500", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02501", + "gapId": "operator:wm.context_set_boolean", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02501-operator-wm.context_set_boolean.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02501.py -- tests/files/web/generated/M16-GAP-02501-operator-wm.context_set_boolean.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02501", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02501", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02502", + "gapId": "operator:wm.context_set_enum", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02502-operator-wm.context_set_enum.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02502.py -- tests/files/web/generated/M16-GAP-02502-operator-wm.context_set_enum.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02502", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02502", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02503", + "gapId": "operator:wm.context_set_float", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02503-operator-wm.context_set_float.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02503.py -- tests/files/web/generated/M16-GAP-02503-operator-wm.context_set_float.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02503", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02503", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02504", + "gapId": "operator:wm.context_set_id", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02504-operator-wm.context_set_id.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02504.py -- tests/files/web/generated/M16-GAP-02504-operator-wm.context_set_id.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02504", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02504", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02505", + "gapId": "operator:wm.context_set_int", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02505-operator-wm.context_set_int.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02505.py -- tests/files/web/generated/M16-GAP-02505-operator-wm.context_set_int.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02505", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02505", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02506", + "gapId": "operator:wm.context_set_string", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02506-operator-wm.context_set_string.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02506.py -- tests/files/web/generated/M16-GAP-02506-operator-wm.context_set_string.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02506", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02506", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02507", + "gapId": "operator:wm.context_set_value", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02507-operator-wm.context_set_value.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02507.py -- tests/files/web/generated/M16-GAP-02507-operator-wm.context_set_value.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02507", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02507", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02508", + "gapId": "operator:wm.context_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02508-operator-wm.context_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02508.py -- tests/files/web/generated/M16-GAP-02508-operator-wm.context_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02508", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02508", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02509", + "gapId": "operator:wm.context_toggle_enum", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02509-operator-wm.context_toggle_enum.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02509.py -- tests/files/web/generated/M16-GAP-02509-operator-wm.context_toggle_enum.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02509", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02509", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02510", + "gapId": "operator:wm.debug_menu", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02510-operator-wm.debug_menu.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02510.py -- tests/files/web/generated/M16-GAP-02510-operator-wm.debug_menu.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02510", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02510", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02511", + "gapId": "operator:wm.doc_view", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02511-operator-wm.doc_view.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02511.py -- tests/files/web/generated/M16-GAP-02511-operator-wm.doc_view.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02511", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02511", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02512", + "gapId": "operator:wm.doc_view_manual", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02512-operator-wm.doc_view_manual.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02512.py -- tests/files/web/generated/M16-GAP-02512-operator-wm.doc_view_manual.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02512", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02512", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02513", + "gapId": "operator:wm.doc_view_manual_ui_context", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02513-operator-wm.doc_view_manual_ui_context.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02513.py -- tests/files/web/generated/M16-GAP-02513-operator-wm.doc_view_manual_ui_context.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02513", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02513", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02514", + "gapId": "operator:wm.drop_blend_file", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02514-operator-wm.drop_blend_file.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02514.py -- tests/files/web/generated/M16-GAP-02514-operator-wm.drop_blend_file.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02514", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02514", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02515", + "gapId": "operator:wm.drop_import_file", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02515-operator-wm.drop_import_file.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02515.py -- tests/files/web/generated/M16-GAP-02515-operator-wm.drop_import_file.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02515", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02515", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02516", + "gapId": "operator:wm.fbx_import", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02516-operator-wm.fbx_import.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02516.py -- tests/files/web/generated/M16-GAP-02516-operator-wm.fbx_import.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02516", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02516", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02517", + "gapId": "operator:wm.grease_pencil_export_svg", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02517-operator-wm.grease_pencil_export_svg.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02517.py -- tests/files/web/generated/M16-GAP-02517-operator-wm.grease_pencil_export_svg.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02517", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02517", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02518", + "gapId": "operator:wm.grease_pencil_import_svg", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02518-operator-wm.grease_pencil_import_svg.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02518.py -- tests/files/web/generated/M16-GAP-02518-operator-wm.grease_pencil_import_svg.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02518", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02518", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02519", + "gapId": "operator:wm.id_linked_relocate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02519-operator-wm.id_linked_relocate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02519.py -- tests/files/web/generated/M16-GAP-02519-operator-wm.id_linked_relocate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02519", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02519", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02520", + "gapId": "operator:wm.interface_theme_preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02520-operator-wm.interface_theme_preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02520.py -- tests/files/web/generated/M16-GAP-02520-operator-wm.interface_theme_preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02520", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02520", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02521", + "gapId": "operator:wm.interface_theme_preset_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02521-operator-wm.interface_theme_preset_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02521.py -- tests/files/web/generated/M16-GAP-02521-operator-wm.interface_theme_preset_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02521", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02521", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02522", + "gapId": "operator:wm.interface_theme_preset_save", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02522-operator-wm.interface_theme_preset_save.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02522.py -- tests/files/web/generated/M16-GAP-02522-operator-wm.interface_theme_preset_save.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02522", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02522", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02523", + "gapId": "operator:wm.keyconfig_preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02523-operator-wm.keyconfig_preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02523.py -- tests/files/web/generated/M16-GAP-02523-operator-wm.keyconfig_preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02523", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02523", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02524", + "gapId": "operator:wm.keyconfig_preset_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02524-operator-wm.keyconfig_preset_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02524.py -- tests/files/web/generated/M16-GAP-02524-operator-wm.keyconfig_preset_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02524", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02524", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02525", + "gapId": "operator:wm.lib_reload", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02525-operator-wm.lib_reload.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02525.py -- tests/files/web/generated/M16-GAP-02525-operator-wm.lib_reload.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02525", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02525", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02526", + "gapId": "operator:wm.lib_relocate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02526-operator-wm.lib_relocate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02526.py -- tests/files/web/generated/M16-GAP-02526-operator-wm.lib_relocate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02526", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02526", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02527", + "gapId": "operator:wm.link", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02527-operator-wm.link.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02527.py -- tests/files/web/generated/M16-GAP-02527-operator-wm.link.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02527", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02527", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02528", + "gapId": "operator:wm.memory_statistics", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02528-operator-wm.memory_statistics.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02528.py -- tests/files/web/generated/M16-GAP-02528-operator-wm.memory_statistics.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02528", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02528", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02529", + "gapId": "operator:wm.obj_export", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02529-operator-wm.obj_export.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02529.py -- tests/files/web/generated/M16-GAP-02529-operator-wm.obj_export.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02529", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02529", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02530", + "gapId": "operator:wm.obj_import", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02530-operator-wm.obj_import.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02530.py -- tests/files/web/generated/M16-GAP-02530-operator-wm.obj_import.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02530", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02530", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02531", + "gapId": "operator:wm.open_mainfile", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02531-operator-wm.open_mainfile.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02531.py -- tests/files/web/generated/M16-GAP-02531-operator-wm.open_mainfile.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02531", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02531", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02532", + "gapId": "operator:wm.operator_cheat_sheet", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02532-operator-wm.operator_cheat_sheet.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02532.py -- tests/files/web/generated/M16-GAP-02532-operator-wm.operator_cheat_sheet.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02532", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02532", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02533", + "gapId": "operator:wm.operator_defaults", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02533-operator-wm.operator_defaults.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02533.py -- tests/files/web/generated/M16-GAP-02533-operator-wm.operator_defaults.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02533", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02533", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02534", + "gapId": "operator:wm.operator_pie_enum", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02534-operator-wm.operator_pie_enum.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02534.py -- tests/files/web/generated/M16-GAP-02534-operator-wm.operator_pie_enum.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02534", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02534", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02535", + "gapId": "operator:wm.operator_preset_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02535-operator-wm.operator_preset_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02535.py -- tests/files/web/generated/M16-GAP-02535-operator-wm.operator_preset_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02535", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02535", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02536", + "gapId": "operator:wm.operator_presets_cleanup", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02536-operator-wm.operator_presets_cleanup.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02536.py -- tests/files/web/generated/M16-GAP-02536-operator-wm.operator_presets_cleanup.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02536", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02536", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02537", + "gapId": "operator:wm.owner_disable", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02537-operator-wm.owner_disable.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02537.py -- tests/files/web/generated/M16-GAP-02537-operator-wm.owner_disable.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02537", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02537", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02538", + "gapId": "operator:wm.owner_enable", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02538-operator-wm.owner_enable.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02538.py -- tests/files/web/generated/M16-GAP-02538-operator-wm.owner_enable.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02538", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02538", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02539", + "gapId": "operator:wm.path_open", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02539-operator-wm.path_open.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02539.py -- tests/files/web/generated/M16-GAP-02539-operator-wm.path_open.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02539", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02539", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02540", + "gapId": "operator:wm.ply_export", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02540-operator-wm.ply_export.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02540.py -- tests/files/web/generated/M16-GAP-02540-operator-wm.ply_export.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02540", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02540", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02541", + "gapId": "operator:wm.ply_import", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02541-operator-wm.ply_import.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02541.py -- tests/files/web/generated/M16-GAP-02541-operator-wm.ply_import.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02541", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02541", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02542", + "gapId": "operator:wm.previews_batch_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02542-operator-wm.previews_batch_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02542.py -- tests/files/web/generated/M16-GAP-02542-operator-wm.previews_batch_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02542", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02542", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02543", + "gapId": "operator:wm.previews_batch_generate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02543-operator-wm.previews_batch_generate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02543.py -- tests/files/web/generated/M16-GAP-02543-operator-wm.previews_batch_generate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02543", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02543", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02544", + "gapId": "operator:wm.previews_clear", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02544-operator-wm.previews_clear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02544.py -- tests/files/web/generated/M16-GAP-02544-operator-wm.previews_clear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02544", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02544", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02545", + "gapId": "operator:wm.previews_ensure", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02545-operator-wm.previews_ensure.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02545.py -- tests/files/web/generated/M16-GAP-02545-operator-wm.previews_ensure.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02545", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02545", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02546", + "gapId": "operator:wm.properties_add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02546-operator-wm.properties_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02546.py -- tests/files/web/generated/M16-GAP-02546-operator-wm.properties_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02546", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02546", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02547", + "gapId": "operator:wm.properties_context_change", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02547-operator-wm.properties_context_change.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02547.py -- tests/files/web/generated/M16-GAP-02547-operator-wm.properties_context_change.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02547", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02547", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02548", + "gapId": "operator:wm.properties_edit", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02548-operator-wm.properties_edit.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02548.py -- tests/files/web/generated/M16-GAP-02548-operator-wm.properties_edit.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02548", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02548", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02549", + "gapId": "operator:wm.properties_edit_value", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02549-operator-wm.properties_edit_value.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02549.py -- tests/files/web/generated/M16-GAP-02549-operator-wm.properties_edit_value.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02549", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02549", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02550", + "gapId": "operator:wm.properties_remove", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02550-operator-wm.properties_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02550.py -- tests/files/web/generated/M16-GAP-02550-operator-wm.properties_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02550", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02550", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02551", + "gapId": "operator:wm.quit_blender", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02551-operator-wm.quit_blender.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02551.py -- tests/files/web/generated/M16-GAP-02551-operator-wm.quit_blender.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02551", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02551", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02552", + "gapId": "operator:wm.radial_control", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02552-operator-wm.radial_control.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02552.py -- tests/files/web/generated/M16-GAP-02552-operator-wm.radial_control.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02552", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02552", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02553", + "gapId": "operator:wm.read_factory_settings", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02553-operator-wm.read_factory_settings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02553.py -- tests/files/web/generated/M16-GAP-02553-operator-wm.read_factory_settings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02553", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02553", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02554", + "gapId": "operator:wm.read_factory_userpref", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02554-operator-wm.read_factory_userpref.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02554.py -- tests/files/web/generated/M16-GAP-02554-operator-wm.read_factory_userpref.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02554", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02554", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02555", + "gapId": "operator:wm.read_history", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02555-operator-wm.read_history.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02555.py -- tests/files/web/generated/M16-GAP-02555-operator-wm.read_history.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02555", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02555", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02556", + "gapId": "operator:wm.read_homefile", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02556-operator-wm.read_homefile.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02556.py -- tests/files/web/generated/M16-GAP-02556-operator-wm.read_homefile.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02556", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02556", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02557", + "gapId": "operator:wm.read_userpref", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02557-operator-wm.read_userpref.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02557.py -- tests/files/web/generated/M16-GAP-02557-operator-wm.read_userpref.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02557", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02557", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02558", + "gapId": "operator:wm.recover_auto_save", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02558-operator-wm.recover_auto_save.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02558.py -- tests/files/web/generated/M16-GAP-02558-operator-wm.recover_auto_save.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02558", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02558", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02559", + "gapId": "operator:wm.recover_last_session", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02559-operator-wm.recover_last_session.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02559.py -- tests/files/web/generated/M16-GAP-02559-operator-wm.recover_last_session.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02559", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02559", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02560", + "gapId": "operator:wm.redraw_timer", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02560-operator-wm.redraw_timer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02560.py -- tests/files/web/generated/M16-GAP-02560-operator-wm.redraw_timer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02560", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02560", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02561", + "gapId": "operator:wm.revert_mainfile", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02561-operator-wm.revert_mainfile.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02561.py -- tests/files/web/generated/M16-GAP-02561-operator-wm.revert_mainfile.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02561", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02561", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02562", + "gapId": "operator:wm.save_as_mainfile", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02562-operator-wm.save_as_mainfile.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02562.py -- tests/files/web/generated/M16-GAP-02562-operator-wm.save_as_mainfile.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02562", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02562", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02563", + "gapId": "operator:wm.save_auto_save", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02563-operator-wm.save_auto_save.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02563.py -- tests/files/web/generated/M16-GAP-02563-operator-wm.save_auto_save.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02563", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02563", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02564", + "gapId": "operator:wm.save_homefile", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02564-operator-wm.save_homefile.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02564.py -- tests/files/web/generated/M16-GAP-02564-operator-wm.save_homefile.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02564", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02564", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02565", + "gapId": "operator:wm.save_mainfile", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02565-operator-wm.save_mainfile.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02565.py -- tests/files/web/generated/M16-GAP-02565-operator-wm.save_mainfile.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02565", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02565", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02566", + "gapId": "operator:wm.save_userpref", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02566-operator-wm.save_userpref.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02566.py -- tests/files/web/generated/M16-GAP-02566-operator-wm.save_userpref.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02566", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02566", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02567", + "gapId": "operator:wm.search_menu", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02567-operator-wm.search_menu.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02567.py -- tests/files/web/generated/M16-GAP-02567-operator-wm.search_menu.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02567", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02567", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02568", + "gapId": "operator:wm.search_operator", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02568-operator-wm.search_operator.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02568.py -- tests/files/web/generated/M16-GAP-02568-operator-wm.search_operator.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02568", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02568", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02569", + "gapId": "operator:wm.search_single_menu", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02569-operator-wm.search_single_menu.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02569.py -- tests/files/web/generated/M16-GAP-02569-operator-wm.search_single_menu.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02569", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02569", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02570", + "gapId": "operator:wm.set_stereo_3d", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02570-operator-wm.set_stereo_3d.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02570.py -- tests/files/web/generated/M16-GAP-02570-operator-wm.set_stereo_3d.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02570", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02570", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02571", + "gapId": "operator:wm.set_working_color_space", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02571-operator-wm.set_working_color_space.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02571.py -- tests/files/web/generated/M16-GAP-02571-operator-wm.set_working_color_space.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02571", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02571", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02572", + "gapId": "operator:wm.splash", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02572-operator-wm.splash.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02572.py -- tests/files/web/generated/M16-GAP-02572-operator-wm.splash.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02572", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02572", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02573", + "gapId": "operator:wm.splash_about", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02573-operator-wm.splash_about.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02573.py -- tests/files/web/generated/M16-GAP-02573-operator-wm.splash_about.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02573", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02573", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02574", + "gapId": "operator:wm.stl_export", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02574-operator-wm.stl_export.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02574.py -- tests/files/web/generated/M16-GAP-02574-operator-wm.stl_export.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02574", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02574", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02575", + "gapId": "operator:wm.stl_import", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02575-operator-wm.stl_import.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02575.py -- tests/files/web/generated/M16-GAP-02575-operator-wm.stl_import.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02575", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02575", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02576", + "gapId": "operator:wm.sysinfo", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02576-operator-wm.sysinfo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02576.py -- tests/files/web/generated/M16-GAP-02576-operator-wm.sysinfo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02576", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02576", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02577", + "gapId": "operator:wm.tool_set_by_brush_type", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02577-operator-wm.tool_set_by_brush_type.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02577.py -- tests/files/web/generated/M16-GAP-02577-operator-wm.tool_set_by_brush_type.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02577", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02577", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02578", + "gapId": "operator:wm.tool_set_by_id", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02578-operator-wm.tool_set_by_id.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02578.py -- tests/files/web/generated/M16-GAP-02578-operator-wm.tool_set_by_id.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02578", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02578", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02579", + "gapId": "operator:wm.tool_set_by_index", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02579-operator-wm.tool_set_by_index.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02579.py -- tests/files/web/generated/M16-GAP-02579-operator-wm.tool_set_by_index.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02579", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02579", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02580", + "gapId": "operator:wm.toolbar", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02580-operator-wm.toolbar.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02580.py -- tests/files/web/generated/M16-GAP-02580-operator-wm.toolbar.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02580", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02580", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02581", + "gapId": "operator:wm.toolbar_fallback_pie", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02581-operator-wm.toolbar_fallback_pie.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02581.py -- tests/files/web/generated/M16-GAP-02581-operator-wm.toolbar_fallback_pie.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02581", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02581", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02582", + "gapId": "operator:wm.toolbar_prompt", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02582-operator-wm.toolbar_prompt.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02582.py -- tests/files/web/generated/M16-GAP-02582-operator-wm.toolbar_prompt.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02582", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02582", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02583", + "gapId": "operator:wm.url_open", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02583-operator-wm.url_open.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02583.py -- tests/files/web/generated/M16-GAP-02583-operator-wm.url_open.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02583", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02583", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02584", + "gapId": "operator:wm.url_open_preset", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02584-operator-wm.url_open_preset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02584.py -- tests/files/web/generated/M16-GAP-02584-operator-wm.url_open_preset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02584", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02584", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02585", + "gapId": "operator:wm.window_close", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02585-operator-wm.window_close.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02585.py -- tests/files/web/generated/M16-GAP-02585-operator-wm.window_close.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02585", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02585", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02586", + "gapId": "operator:wm.window_fullscreen_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02586-operator-wm.window_fullscreen_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02586.py -- tests/files/web/generated/M16-GAP-02586-operator-wm.window_fullscreen_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02586", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02586", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02587", + "gapId": "operator:wm.window_new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02587-operator-wm.window_new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02587.py -- tests/files/web/generated/M16-GAP-02587-operator-wm.window_new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02587", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02587", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02588", + "gapId": "operator:wm.window_new_main", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02588-operator-wm.window_new_main.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02588.py -- tests/files/web/generated/M16-GAP-02588-operator-wm.window_new_main.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02588", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02588", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02589", + "gapId": "operator:workspace.add", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02589-operator-workspace.add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02589.py -- tests/files/web/generated/M16-GAP-02589-operator-workspace.add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02589", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02589", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02590", + "gapId": "operator:workspace.append_activate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02590-operator-workspace.append_activate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02590.py -- tests/files/web/generated/M16-GAP-02590-operator-workspace.append_activate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02590", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02590", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02591", + "gapId": "operator:workspace.delete", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02591-operator-workspace.delete.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02591.py -- tests/files/web/generated/M16-GAP-02591-operator-workspace.delete.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02591", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02591", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02592", + "gapId": "operator:workspace.delete_all_others", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02592-operator-workspace.delete_all_others.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02592.py -- tests/files/web/generated/M16-GAP-02592-operator-workspace.delete_all_others.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02592", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02592", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02593", + "gapId": "operator:workspace.duplicate", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02593-operator-workspace.duplicate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02593.py -- tests/files/web/generated/M16-GAP-02593-operator-workspace.duplicate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02593", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02593", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02594", + "gapId": "operator:workspace.reorder_to_back", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02594-operator-workspace.reorder_to_back.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02594.py -- tests/files/web/generated/M16-GAP-02594-operator-workspace.reorder_to_back.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02594", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02594", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02595", + "gapId": "operator:workspace.reorder_to_front", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02595-operator-workspace.reorder_to_front.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02595.py -- tests/files/web/generated/M16-GAP-02595-operator-workspace.reorder_to_front.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02595", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02595", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02596", + "gapId": "operator:workspace.scene_pin_toggle", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02596-operator-workspace.scene_pin_toggle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02596.py -- tests/files/web/generated/M16-GAP-02596-operator-workspace.scene_pin_toggle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02596", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02596", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02597", + "gapId": "operator:world.convert_volume_to_mesh", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02597-operator-world.convert_volume_to_mesh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02597.py -- tests/files/web/generated/M16-GAP-02597-operator-world.convert_volume_to_mesh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02597", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02597", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02598", + "gapId": "operator:world.new", + "ownerFamily": "OPERATOR", + "sourceTask": "M15-01B", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02598-operator-world.new.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02598.py -- tests/files/web/generated/M16-GAP-02598-operator-world.new.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02598", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02598", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02599", + "gapId": "rna:Main:BlendData", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02599-rna-Main-BlendData.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02599.py -- tests/files/web/generated/M16-GAP-02599-rna-Main-BlendData.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02599", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02599", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02600", + "gapId": "rna:Main:BlendDataActions", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02600-rna-Main-BlendDataActions.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02600.py -- tests/files/web/generated/M16-GAP-02600-rna-Main-BlendDataActions.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02600", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02600", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02601", + "gapId": "rna:Main:BlendDataAnnotations", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02601-rna-Main-BlendDataAnnotations.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02601.py -- tests/files/web/generated/M16-GAP-02601-rna-Main-BlendDataAnnotations.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02601", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02601", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02602", + "gapId": "rna:Main:BlendDataArmatures", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02602-rna-Main-BlendDataArmatures.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02602.py -- tests/files/web/generated/M16-GAP-02602-rna-Main-BlendDataArmatures.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02602", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02602", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02603", + "gapId": "rna:Main:BlendDataBrushes", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02603-rna-Main-BlendDataBrushes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02603.py -- tests/files/web/generated/M16-GAP-02603-rna-Main-BlendDataBrushes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02603", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02603", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02604", + "gapId": "rna:Main:BlendDataCacheFiles", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02604-rna-Main-BlendDataCacheFiles.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02604.py -- tests/files/web/generated/M16-GAP-02604-rna-Main-BlendDataCacheFiles.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02604", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02604", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02605", + "gapId": "rna:Main:BlendDataCameras", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02605-rna-Main-BlendDataCameras.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02605.py -- tests/files/web/generated/M16-GAP-02605-rna-Main-BlendDataCameras.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02605", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02605", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02606", + "gapId": "rna:Main:BlendDataCollections", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02606-rna-Main-BlendDataCollections.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02606.py -- tests/files/web/generated/M16-GAP-02606-rna-Main-BlendDataCollections.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02606", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02606", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02607", + "gapId": "rna:Main:BlendDataCurves", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02607-rna-Main-BlendDataCurves.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02607.py -- tests/files/web/generated/M16-GAP-02607-rna-Main-BlendDataCurves.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02607", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02607", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02608", + "gapId": "rna:Main:BlendDataFonts", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02608-rna-Main-BlendDataFonts.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02608.py -- tests/files/web/generated/M16-GAP-02608-rna-Main-BlendDataFonts.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02608", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02608", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02609", + "gapId": "rna:Main:BlendDataGreasePencilsV3", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02609-rna-Main-BlendDataGreasePencilsV3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02609.py -- tests/files/web/generated/M16-GAP-02609-rna-Main-BlendDataGreasePencilsV3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02609", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02609", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02610", + "gapId": "rna:Main:BlendDataHairCurves", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02610-rna-Main-BlendDataHairCurves.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02610.py -- tests/files/web/generated/M16-GAP-02610-rna-Main-BlendDataHairCurves.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02610", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02610", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02611", + "gapId": "rna:Main:BlendDataImages", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02611-rna-Main-BlendDataImages.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02611.py -- tests/files/web/generated/M16-GAP-02611-rna-Main-BlendDataImages.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02611", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02611", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02612", + "gapId": "rna:Main:BlendDataLattices", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02612-rna-Main-BlendDataLattices.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02612.py -- tests/files/web/generated/M16-GAP-02612-rna-Main-BlendDataLattices.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02612", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02612", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02613", + "gapId": "rna:Main:BlendDataLibraries", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02613-rna-Main-BlendDataLibraries.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02613.py -- tests/files/web/generated/M16-GAP-02613-rna-Main-BlendDataLibraries.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02613", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02613", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02614", + "gapId": "rna:Main:BlendDataLights", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02614-rna-Main-BlendDataLights.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02614.py -- tests/files/web/generated/M16-GAP-02614-rna-Main-BlendDataLights.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02614", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02614", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02615", + "gapId": "rna:Main:BlendDataLineStyles", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02615-rna-Main-BlendDataLineStyles.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02615.py -- tests/files/web/generated/M16-GAP-02615-rna-Main-BlendDataLineStyles.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02615", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02615", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02616", + "gapId": "rna:Main:BlendDataMasks", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02616-rna-Main-BlendDataMasks.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02616.py -- tests/files/web/generated/M16-GAP-02616-rna-Main-BlendDataMasks.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02616", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02616", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02617", + "gapId": "rna:Main:BlendDataMaterials", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02617-rna-Main-BlendDataMaterials.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02617.py -- tests/files/web/generated/M16-GAP-02617-rna-Main-BlendDataMaterials.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02617", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02617", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02618", + "gapId": "rna:Main:BlendDataMeshes", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02618-rna-Main-BlendDataMeshes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02618.py -- tests/files/web/generated/M16-GAP-02618-rna-Main-BlendDataMeshes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02618", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02618", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02619", + "gapId": "rna:Main:BlendDataMetaBalls", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02619-rna-Main-BlendDataMetaBalls.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02619.py -- tests/files/web/generated/M16-GAP-02619-rna-Main-BlendDataMetaBalls.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02619", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02619", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02620", + "gapId": "rna:Main:BlendDataMovieClips", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02620-rna-Main-BlendDataMovieClips.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02620.py -- tests/files/web/generated/M16-GAP-02620-rna-Main-BlendDataMovieClips.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02620", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02620", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02621", + "gapId": "rna:Main:BlendDataNodeTrees", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02621-rna-Main-BlendDataNodeTrees.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02621.py -- tests/files/web/generated/M16-GAP-02621-rna-Main-BlendDataNodeTrees.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02621", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02621", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02622", + "gapId": "rna:Main:BlendDataObjects", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02622-rna-Main-BlendDataObjects.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02622.py -- tests/files/web/generated/M16-GAP-02622-rna-Main-BlendDataObjects.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02622", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02622", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02623", + "gapId": "rna:Main:BlendDataPaintCurves", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02623-rna-Main-BlendDataPaintCurves.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02623.py -- tests/files/web/generated/M16-GAP-02623-rna-Main-BlendDataPaintCurves.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02623", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02623", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02624", + "gapId": "rna:Main:BlendDataPalettes", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02624-rna-Main-BlendDataPalettes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02624.py -- tests/files/web/generated/M16-GAP-02624-rna-Main-BlendDataPalettes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02624", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02624", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02625", + "gapId": "rna:Main:BlendDataParticles", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02625-rna-Main-BlendDataParticles.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02625.py -- tests/files/web/generated/M16-GAP-02625-rna-Main-BlendDataParticles.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02625", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02625", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02626", + "gapId": "rna:Main:BlendDataPointClouds", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02626-rna-Main-BlendDataPointClouds.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02626.py -- tests/files/web/generated/M16-GAP-02626-rna-Main-BlendDataPointClouds.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02626", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02626", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02627", + "gapId": "rna:Main:BlendDataProbes", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02627-rna-Main-BlendDataProbes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02627.py -- tests/files/web/generated/M16-GAP-02627-rna-Main-BlendDataProbes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02627", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02627", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02628", + "gapId": "rna:Main:BlendDataScenes", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02628-rna-Main-BlendDataScenes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02628.py -- tests/files/web/generated/M16-GAP-02628-rna-Main-BlendDataScenes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02628", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02628", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02629", + "gapId": "rna:Main:BlendDataScreens", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02629-rna-Main-BlendDataScreens.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02629.py -- tests/files/web/generated/M16-GAP-02629-rna-Main-BlendDataScreens.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02629", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02629", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02630", + "gapId": "rna:Main:BlendDataSounds", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02630-rna-Main-BlendDataSounds.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02630.py -- tests/files/web/generated/M16-GAP-02630-rna-Main-BlendDataSounds.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02630", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02630", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02631", + "gapId": "rna:Main:BlendDataSpeakers", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02631-rna-Main-BlendDataSpeakers.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02631.py -- tests/files/web/generated/M16-GAP-02631-rna-Main-BlendDataSpeakers.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02631", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02631", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02632", + "gapId": "rna:Main:BlendDataTexts", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02632-rna-Main-BlendDataTexts.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02632.py -- tests/files/web/generated/M16-GAP-02632-rna-Main-BlendDataTexts.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02632", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02632", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02633", + "gapId": "rna:Main:BlendDataTextures", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02633-rna-Main-BlendDataTextures.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02633.py -- tests/files/web/generated/M16-GAP-02633-rna-Main-BlendDataTextures.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02633", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02633", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02634", + "gapId": "rna:Main:BlendDataVolumes", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02634-rna-Main-BlendDataVolumes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02634.py -- tests/files/web/generated/M16-GAP-02634-rna-Main-BlendDataVolumes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02634", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02634", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02635", + "gapId": "rna:Main:BlendDataWindowManagers", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02635-rna-Main-BlendDataWindowManagers.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02635.py -- tests/files/web/generated/M16-GAP-02635-rna-Main-BlendDataWindowManagers.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02635", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02635", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02636", + "gapId": "rna:Main:BlendDataWorkSpaces", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02636-rna-Main-BlendDataWorkSpaces.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02636.py -- tests/files/web/generated/M16-GAP-02636-rna-Main-BlendDataWorkSpaces.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02636", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02636", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02637", + "gapId": "rna:Main:BlendDataWorlds", + "ownerFamily": "Main", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02637-rna-Main-BlendDataWorlds.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02637.py -- tests/files/web/generated/M16-GAP-02637-rna-Main-BlendDataWorlds.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02637", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02637", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02638", + "gapId": "rna:Mesh:Attribute", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02638-rna-Mesh-Attribute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02638.py -- tests/files/web/generated/M16-GAP-02638-rna-Mesh-Attribute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02638", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02638", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02639", + "gapId": "rna:Mesh:AttributeGroupMesh", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02639-rna-Mesh-AttributeGroupMesh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02639.py -- tests/files/web/generated/M16-GAP-02639-rna-Mesh-AttributeGroupMesh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02639", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02639", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02640", + "gapId": "rna:Mesh:BoolAttribute", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02640-rna-Mesh-BoolAttribute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02640.py -- tests/files/web/generated/M16-GAP-02640-rna-Mesh-BoolAttribute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02640", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02640", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02641", + "gapId": "rna:Mesh:ByteColorAttribute", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02641-rna-Mesh-ByteColorAttribute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02641.py -- tests/files/web/generated/M16-GAP-02641-rna-Mesh-ByteColorAttribute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02641", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02641", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02642", + "gapId": "rna:Mesh:FloatAttribute", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02642-rna-Mesh-FloatAttribute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02642.py -- tests/files/web/generated/M16-GAP-02642-rna-Mesh-FloatAttribute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02642", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02642", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02643", + "gapId": "rna:Mesh:IntAttribute", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02643-rna-Mesh-IntAttribute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02643.py -- tests/files/web/generated/M16-GAP-02643-rna-Mesh-IntAttribute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02643", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02643", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02644", + "gapId": "rna:Mesh:Mesh", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02644-rna-Mesh-Mesh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02644.py -- tests/files/web/generated/M16-GAP-02644-rna-Mesh-Mesh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02644", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02644", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02645", + "gapId": "rna:Mesh:MeshAutomaskingSettings", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02645-rna-Mesh-MeshAutomaskingSettings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02645.py -- tests/files/web/generated/M16-GAP-02645-rna-Mesh-MeshAutomaskingSettings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02645", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02645", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02646", + "gapId": "rna:Mesh:MeshCacheModifier", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02646-rna-Mesh-MeshCacheModifier.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02646.py -- tests/files/web/generated/M16-GAP-02646-rna-Mesh-MeshCacheModifier.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02646", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02646", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02647", + "gapId": "rna:Mesh:MeshDeformModifier", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02647-rna-Mesh-MeshDeformModifier.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02647.py -- tests/files/web/generated/M16-GAP-02647-rna-Mesh-MeshDeformModifier.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02647", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02647", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02648", + "gapId": "rna:Mesh:MeshEdge", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02648-rna-Mesh-MeshEdge.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02648.py -- tests/files/web/generated/M16-GAP-02648-rna-Mesh-MeshEdge.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02648", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02648", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02649", + "gapId": "rna:Mesh:MeshEdges", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02649-rna-Mesh-MeshEdges.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02649.py -- tests/files/web/generated/M16-GAP-02649-rna-Mesh-MeshEdges.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02649", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02649", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02650", + "gapId": "rna:Mesh:MeshLoop", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02650-rna-Mesh-MeshLoop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02650.py -- tests/files/web/generated/M16-GAP-02650-rna-Mesh-MeshLoop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02650", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02650", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02651", + "gapId": "rna:Mesh:MeshLoopColor", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02651-rna-Mesh-MeshLoopColor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02651.py -- tests/files/web/generated/M16-GAP-02651-rna-Mesh-MeshLoopColor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02651", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02651", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02652", + "gapId": "rna:Mesh:MeshLoopColorLayer", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02652-rna-Mesh-MeshLoopColorLayer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02652.py -- tests/files/web/generated/M16-GAP-02652-rna-Mesh-MeshLoopColorLayer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02652", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02652", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02653", + "gapId": "rna:Mesh:MeshLoopTriangle", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02653-rna-Mesh-MeshLoopTriangle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02653.py -- tests/files/web/generated/M16-GAP-02653-rna-Mesh-MeshLoopTriangle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02653", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02653", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02654", + "gapId": "rna:Mesh:MeshLoopTriangles", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02654-rna-Mesh-MeshLoopTriangles.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02654.py -- tests/files/web/generated/M16-GAP-02654-rna-Mesh-MeshLoopTriangles.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02654", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02654", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02655", + "gapId": "rna:Mesh:MeshLoops", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02655-rna-Mesh-MeshLoops.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02655.py -- tests/files/web/generated/M16-GAP-02655-rna-Mesh-MeshLoops.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02655", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02655", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02656", + "gapId": "rna:Mesh:MeshNormalValue", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02656-rna-Mesh-MeshNormalValue.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02656.py -- tests/files/web/generated/M16-GAP-02656-rna-Mesh-MeshNormalValue.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02656", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02656", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02657", + "gapId": "rna:Mesh:MeshPolygon", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02657-rna-Mesh-MeshPolygon.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02657.py -- tests/files/web/generated/M16-GAP-02657-rna-Mesh-MeshPolygon.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02657", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02657", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02658", + "gapId": "rna:Mesh:MeshPolygons", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02658-rna-Mesh-MeshPolygons.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02658.py -- tests/files/web/generated/M16-GAP-02658-rna-Mesh-MeshPolygons.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02658", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02658", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02659", + "gapId": "rna:Mesh:MeshSequenceCacheModifier", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02659-rna-Mesh-MeshSequenceCacheModifier.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02659.py -- tests/files/web/generated/M16-GAP-02659-rna-Mesh-MeshSequenceCacheModifier.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02659", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02659", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02660", + "gapId": "rna:Mesh:MeshSkinVertex", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02660-rna-Mesh-MeshSkinVertex.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02660.py -- tests/files/web/generated/M16-GAP-02660-rna-Mesh-MeshSkinVertex.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02660", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02660", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02661", + "gapId": "rna:Mesh:MeshSkinVertexLayer", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02661-rna-Mesh-MeshSkinVertexLayer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02661.py -- tests/files/web/generated/M16-GAP-02661-rna-Mesh-MeshSkinVertexLayer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02661", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02661", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02662", + "gapId": "rna:Mesh:MeshStatVis", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02662-rna-Mesh-MeshStatVis.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02662.py -- tests/files/web/generated/M16-GAP-02662-rna-Mesh-MeshStatVis.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02662", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02662", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02663", + "gapId": "rna:Mesh:MeshToVolumeModifier", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02663-rna-Mesh-MeshToVolumeModifier.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02663.py -- tests/files/web/generated/M16-GAP-02663-rna-Mesh-MeshToVolumeModifier.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02663", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02663", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02664", + "gapId": "rna:Mesh:MeshUVLoop", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02664-rna-Mesh-MeshUVLoop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02664.py -- tests/files/web/generated/M16-GAP-02664-rna-Mesh-MeshUVLoop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02664", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02664", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02665", + "gapId": "rna:Mesh:MeshUVLoopLayer", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02665-rna-Mesh-MeshUVLoopLayer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02665.py -- tests/files/web/generated/M16-GAP-02665-rna-Mesh-MeshUVLoopLayer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02665", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02665", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02666", + "gapId": "rna:Mesh:MeshVertex", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02666-rna-Mesh-MeshVertex.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02666.py -- tests/files/web/generated/M16-GAP-02666-rna-Mesh-MeshVertex.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02666", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02666", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M16-GAP-02667", + "gapId": "rna:Mesh:MeshVertices", + "ownerFamily": "Mesh", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-02667-rna-Mesh-MeshVertices.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-02667.py -- tests/files/web/generated/M16-GAP-02667-rna-Mesh-MeshVertices.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M16-GAP-02667", + "comparator": "node tools/web/check-generated-gap.mjs --task M16-GAP-02667", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00001", + "gapId": "constraint:ACTION", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00001-constraint-ACTION.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00001.py -- tests/files/web/generated/M17-GAP-00001-constraint-ACTION.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00001", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00001", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00002", + "gapId": "constraint:ARMATURE", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00002-constraint-ARMATURE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00002.py -- tests/files/web/generated/M17-GAP-00002-constraint-ARMATURE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00002", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00002", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00003", + "gapId": "constraint:CAMERA_SOLVER", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00003-constraint-CAMERA_SOLVER.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00003.py -- tests/files/web/generated/M17-GAP-00003-constraint-CAMERA_SOLVER.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00003", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00003", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00004", + "gapId": "constraint:CHILD_OF", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00004-constraint-CHILD_OF.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00004.py -- tests/files/web/generated/M17-GAP-00004-constraint-CHILD_OF.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00004", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00004", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00005", + "gapId": "constraint:CLAMP_TO", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00005-constraint-CLAMP_TO.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00005.py -- tests/files/web/generated/M17-GAP-00005-constraint-CLAMP_TO.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00005", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00005", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00006", + "gapId": "constraint:COPY_LOCATION", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00006-constraint-COPY_LOCATION.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00006.py -- tests/files/web/generated/M17-GAP-00006-constraint-COPY_LOCATION.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00006", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00006", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00007", + "gapId": "constraint:COPY_ROTATION", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00007-constraint-COPY_ROTATION.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00007.py -- tests/files/web/generated/M17-GAP-00007-constraint-COPY_ROTATION.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00007", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00007", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00008", + "gapId": "constraint:COPY_SCALE", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00008-constraint-COPY_SCALE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00008.py -- tests/files/web/generated/M17-GAP-00008-constraint-COPY_SCALE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00008", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00008", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00009", + "gapId": "constraint:COPY_TRANSFORMS", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00009-constraint-COPY_TRANSFORMS.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00009.py -- tests/files/web/generated/M17-GAP-00009-constraint-COPY_TRANSFORMS.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00009", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00009", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00010", + "gapId": "constraint:DAMPED_TRACK", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00010-constraint-DAMPED_TRACK.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00010.py -- tests/files/web/generated/M17-GAP-00010-constraint-DAMPED_TRACK.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00010", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00010", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00011", + "gapId": "constraint:FLOOR", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00011-constraint-FLOOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00011.py -- tests/files/web/generated/M17-GAP-00011-constraint-FLOOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00011", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00011", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00012", + "gapId": "constraint:FOLLOW_PATH", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00012-constraint-FOLLOW_PATH.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00012.py -- tests/files/web/generated/M17-GAP-00012-constraint-FOLLOW_PATH.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00012", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00012", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00013", + "gapId": "constraint:FOLLOW_TRACK", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00013-constraint-FOLLOW_TRACK.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00013.py -- tests/files/web/generated/M17-GAP-00013-constraint-FOLLOW_TRACK.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00013", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00013", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00014", + "gapId": "constraint:GEOMETRY_ATTRIBUTE", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00014-constraint-GEOMETRY_ATTRIBUTE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00014.py -- tests/files/web/generated/M17-GAP-00014-constraint-GEOMETRY_ATTRIBUTE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00014", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00014", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00015", + "gapId": "constraint:IK", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00015-constraint-IK.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00015.py -- tests/files/web/generated/M17-GAP-00015-constraint-IK.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00015", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00015", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00016", + "gapId": "constraint:LIMIT_DISTANCE", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00016-constraint-LIMIT_DISTANCE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00016.py -- tests/files/web/generated/M17-GAP-00016-constraint-LIMIT_DISTANCE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00016", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00016", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00017", + "gapId": "constraint:LIMIT_LOCATION", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00017-constraint-LIMIT_LOCATION.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00017.py -- tests/files/web/generated/M17-GAP-00017-constraint-LIMIT_LOCATION.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00017", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00017", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00018", + "gapId": "constraint:LIMIT_ROTATION", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00018-constraint-LIMIT_ROTATION.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00018.py -- tests/files/web/generated/M17-GAP-00018-constraint-LIMIT_ROTATION.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00018", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00018", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00019", + "gapId": "constraint:LIMIT_SCALE", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00019-constraint-LIMIT_SCALE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00019.py -- tests/files/web/generated/M17-GAP-00019-constraint-LIMIT_SCALE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00019", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00019", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00020", + "gapId": "constraint:LOCKED_TRACK", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00020-constraint-LOCKED_TRACK.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00020.py -- tests/files/web/generated/M17-GAP-00020-constraint-LOCKED_TRACK.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00020", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00020", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00021", + "gapId": "constraint:MAINTAIN_VOLUME", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00021-constraint-MAINTAIN_VOLUME.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00021.py -- tests/files/web/generated/M17-GAP-00021-constraint-MAINTAIN_VOLUME.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00021", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00021", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00022", + "gapId": "constraint:OBJECT_SOLVER", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00022-constraint-OBJECT_SOLVER.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00022.py -- tests/files/web/generated/M17-GAP-00022-constraint-OBJECT_SOLVER.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00022", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00022", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00023", + "gapId": "constraint:PIVOT", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00023-constraint-PIVOT.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00023.py -- tests/files/web/generated/M17-GAP-00023-constraint-PIVOT.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00023", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00023", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00024", + "gapId": "constraint:SHRINKWRAP", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00024-constraint-SHRINKWRAP.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00024.py -- tests/files/web/generated/M17-GAP-00024-constraint-SHRINKWRAP.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00024", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00024", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00025", + "gapId": "constraint:SPLINE_IK", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00025-constraint-SPLINE_IK.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00025.py -- tests/files/web/generated/M17-GAP-00025-constraint-SPLINE_IK.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00025", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00025", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00026", + "gapId": "constraint:STRETCH_TO", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00026-constraint-STRETCH_TO.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00026.py -- tests/files/web/generated/M17-GAP-00026-constraint-STRETCH_TO.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00026", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00026", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00027", + "gapId": "constraint:TRACK_TO", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00027-constraint-TRACK_TO.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00027.py -- tests/files/web/generated/M17-GAP-00027-constraint-TRACK_TO.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00027", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00027", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00028", + "gapId": "constraint:TRANSFORM", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00028-constraint-TRANSFORM.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00028.py -- tests/files/web/generated/M17-GAP-00028-constraint-TRANSFORM.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00028", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00028", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M17-GAP-00029", + "gapId": "constraint:TRANSFORM_CACHE", + "ownerFamily": "CONSTRAINT", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M17-GAP-00029-constraint-TRANSFORM_CACHE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M17-GAP-00029.py -- tests/files/web/generated/M17-GAP-00029-constraint-TRANSFORM_CACHE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M17-GAP-00029", + "comparator": "node tools/web/check-generated-gap.mjs --task M17-GAP-00029", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00001", + "gapId": "node:Compositor:CompositorNodeAlphaOver", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00001-node-Compositor-CompositorNodeAlphaOver.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00001.py -- tests/files/web/generated/M18-GAP-00001-node-Compositor-CompositorNodeAlphaOver.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00001", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00001", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00002", + "gapId": "node:Compositor:CompositorNodeAntiAliasing", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00002-node-Compositor-CompositorNodeAntiAliasing.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00002.py -- tests/files/web/generated/M18-GAP-00002-node-Compositor-CompositorNodeAntiAliasing.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00002", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00002", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00003", + "gapId": "node:Compositor:CompositorNodeBilateralblur", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00003-node-Compositor-CompositorNodeBilateralblur.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00003.py -- tests/files/web/generated/M18-GAP-00003-node-Compositor-CompositorNodeBilateralblur.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00003", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00003", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00004", + "gapId": "node:Compositor:CompositorNodeBlankImage", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00004-node-Compositor-CompositorNodeBlankImage.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00004.py -- tests/files/web/generated/M18-GAP-00004-node-Compositor-CompositorNodeBlankImage.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00004", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00004", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00005", + "gapId": "node:Compositor:CompositorNodeBlur", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00005-node-Compositor-CompositorNodeBlur.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00005.py -- tests/files/web/generated/M18-GAP-00005-node-Compositor-CompositorNodeBlur.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00005", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00005", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00006", + "gapId": "node:Compositor:CompositorNodeBokehBlur", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00006-node-Compositor-CompositorNodeBokehBlur.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00006.py -- tests/files/web/generated/M18-GAP-00006-node-Compositor-CompositorNodeBokehBlur.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00006", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00006", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00007", + "gapId": "node:Compositor:CompositorNodeBokehImage", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00007-node-Compositor-CompositorNodeBokehImage.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00007.py -- tests/files/web/generated/M18-GAP-00007-node-Compositor-CompositorNodeBokehImage.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00007", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00007", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00008", + "gapId": "node:Compositor:CompositorNodeBoxMask", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00008-node-Compositor-CompositorNodeBoxMask.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00008.py -- tests/files/web/generated/M18-GAP-00008-node-Compositor-CompositorNodeBoxMask.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00008", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00008", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00009", + "gapId": "node:Compositor:CompositorNodeBrightContrast", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00009-node-Compositor-CompositorNodeBrightContrast.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00009.py -- tests/files/web/generated/M18-GAP-00009-node-Compositor-CompositorNodeBrightContrast.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00009", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00009", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00010", + "gapId": "node:Compositor:CompositorNodeChannelMatte", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00010-node-Compositor-CompositorNodeChannelMatte.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00010.py -- tests/files/web/generated/M18-GAP-00010-node-Compositor-CompositorNodeChannelMatte.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00010", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00010", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00011", + "gapId": "node:Compositor:CompositorNodeChromaMatte", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00011-node-Compositor-CompositorNodeChromaMatte.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00011.py -- tests/files/web/generated/M18-GAP-00011-node-Compositor-CompositorNodeChromaMatte.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00011", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00011", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00012", + "gapId": "node:Compositor:CompositorNodeColorBalance", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00012-node-Compositor-CompositorNodeColorBalance.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00012.py -- tests/files/web/generated/M18-GAP-00012-node-Compositor-CompositorNodeColorBalance.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00012", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00012", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00013", + "gapId": "node:Compositor:CompositorNodeColorCorrection", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00013-node-Compositor-CompositorNodeColorCorrection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00013.py -- tests/files/web/generated/M18-GAP-00013-node-Compositor-CompositorNodeColorCorrection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00013", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00013", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00014", + "gapId": "node:Compositor:CompositorNodeColorMatte", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00014-node-Compositor-CompositorNodeColorMatte.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00014.py -- tests/files/web/generated/M18-GAP-00014-node-Compositor-CompositorNodeColorMatte.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00014", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00014", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00015", + "gapId": "node:Compositor:CompositorNodeColorSpill", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00015-node-Compositor-CompositorNodeColorSpill.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00015.py -- tests/files/web/generated/M18-GAP-00015-node-Compositor-CompositorNodeColorSpill.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00015", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00015", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00016", + "gapId": "node:Compositor:CompositorNodeCombineColor", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00016-node-Compositor-CompositorNodeCombineColor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00016.py -- tests/files/web/generated/M18-GAP-00016-node-Compositor-CompositorNodeCombineColor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00016", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00016", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00017", + "gapId": "node:Compositor:CompositorNodeConvertColorSpace", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00017-node-Compositor-CompositorNodeConvertColorSpace.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00017.py -- tests/files/web/generated/M18-GAP-00017-node-Compositor-CompositorNodeConvertColorSpace.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00017", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00017", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00018", + "gapId": "node:Compositor:CompositorNodeConvertToDisplay", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00018-node-Compositor-CompositorNodeConvertToDisplay.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00018.py -- tests/files/web/generated/M18-GAP-00018-node-Compositor-CompositorNodeConvertToDisplay.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00018", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00018", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00019", + "gapId": "node:Compositor:CompositorNodeConvolve", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00019-node-Compositor-CompositorNodeConvolve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00019.py -- tests/files/web/generated/M18-GAP-00019-node-Compositor-CompositorNodeConvolve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00019", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00019", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00020", + "gapId": "node:Compositor:CompositorNodeCornerPin", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00020-node-Compositor-CompositorNodeCornerPin.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00020.py -- tests/files/web/generated/M18-GAP-00020-node-Compositor-CompositorNodeCornerPin.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00020", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00020", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00021", + "gapId": "node:Compositor:CompositorNodeCrop", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00021-node-Compositor-CompositorNodeCrop.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00021.py -- tests/files/web/generated/M18-GAP-00021-node-Compositor-CompositorNodeCrop.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00021", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00021", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00022", + "gapId": "node:Compositor:CompositorNodeCryptomatte", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00022-node-Compositor-CompositorNodeCryptomatte.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00022.py -- tests/files/web/generated/M18-GAP-00022-node-Compositor-CompositorNodeCryptomatte.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00022", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00022", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00023", + "gapId": "node:Compositor:CompositorNodeCryptomatteV2", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00023-node-Compositor-CompositorNodeCryptomatteV2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00023.py -- tests/files/web/generated/M18-GAP-00023-node-Compositor-CompositorNodeCryptomatteV2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00023", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00023", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00024", + "gapId": "node:Compositor:CompositorNodeCurveRGB", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00024-node-Compositor-CompositorNodeCurveRGB.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00024.py -- tests/files/web/generated/M18-GAP-00024-node-Compositor-CompositorNodeCurveRGB.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00024", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00024", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00025", + "gapId": "node:Compositor:CompositorNodeDBlur", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00025-node-Compositor-CompositorNodeDBlur.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00025.py -- tests/files/web/generated/M18-GAP-00025-node-Compositor-CompositorNodeDBlur.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00025", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00025", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00026", + "gapId": "node:Compositor:CompositorNodeDefocus", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00026-node-Compositor-CompositorNodeDefocus.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00026.py -- tests/files/web/generated/M18-GAP-00026-node-Compositor-CompositorNodeDefocus.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00026", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00026", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00027", + "gapId": "node:Compositor:CompositorNodeDenoise", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00027-node-Compositor-CompositorNodeDenoise.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00027.py -- tests/files/web/generated/M18-GAP-00027-node-Compositor-CompositorNodeDenoise.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00027", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00027", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00028", + "gapId": "node:Compositor:CompositorNodeDespeckle", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00028-node-Compositor-CompositorNodeDespeckle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00028.py -- tests/files/web/generated/M18-GAP-00028-node-Compositor-CompositorNodeDespeckle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00028", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00028", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00029", + "gapId": "node:Compositor:CompositorNodeDiffMatte", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00029-node-Compositor-CompositorNodeDiffMatte.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00029.py -- tests/files/web/generated/M18-GAP-00029-node-Compositor-CompositorNodeDiffMatte.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00029", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00029", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00030", + "gapId": "node:Compositor:CompositorNodeDilateErode", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00030-node-Compositor-CompositorNodeDilateErode.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00030.py -- tests/files/web/generated/M18-GAP-00030-node-Compositor-CompositorNodeDilateErode.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00030", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00030", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00031", + "gapId": "node:Compositor:CompositorNodeDisplace", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00031-node-Compositor-CompositorNodeDisplace.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00031.py -- tests/files/web/generated/M18-GAP-00031-node-Compositor-CompositorNodeDisplace.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00031", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00031", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00032", + "gapId": "node:Compositor:CompositorNodeDistanceMatte", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00032-node-Compositor-CompositorNodeDistanceMatte.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00032.py -- tests/files/web/generated/M18-GAP-00032-node-Compositor-CompositorNodeDistanceMatte.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00032", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00032", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00033", + "gapId": "node:Compositor:CompositorNodeDoubleEdgeMask", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00033-node-Compositor-CompositorNodeDoubleEdgeMask.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00033.py -- tests/files/web/generated/M18-GAP-00033-node-Compositor-CompositorNodeDoubleEdgeMask.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00033", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00033", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00034", + "gapId": "node:Compositor:CompositorNodeEllipseMask", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00034-node-Compositor-CompositorNodeEllipseMask.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00034.py -- tests/files/web/generated/M18-GAP-00034-node-Compositor-CompositorNodeEllipseMask.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00034", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00034", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00035", + "gapId": "node:Compositor:CompositorNodeExposure", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00035-node-Compositor-CompositorNodeExposure.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00035.py -- tests/files/web/generated/M18-GAP-00035-node-Compositor-CompositorNodeExposure.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00035", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00035", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00036", + "gapId": "node:Compositor:CompositorNodeFilter", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00036-node-Compositor-CompositorNodeFilter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00036.py -- tests/files/web/generated/M18-GAP-00036-node-Compositor-CompositorNodeFilter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00036", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00036", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00037", + "gapId": "node:Compositor:CompositorNodeFlip", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00037-node-Compositor-CompositorNodeFlip.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00037.py -- tests/files/web/generated/M18-GAP-00037-node-Compositor-CompositorNodeFlip.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00037", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00037", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00038", + "gapId": "node:Compositor:CompositorNodeGlare", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00038-node-Compositor-CompositorNodeGlare.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00038.py -- tests/files/web/generated/M18-GAP-00038-node-Compositor-CompositorNodeGlare.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00038", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00038", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00039", + "gapId": "node:Compositor:CompositorNodeGroup", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00039-node-Compositor-CompositorNodeGroup.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00039.py -- tests/files/web/generated/M18-GAP-00039-node-Compositor-CompositorNodeGroup.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00039", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00039", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00040", + "gapId": "node:Compositor:CompositorNodeHueCorrect", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00040-node-Compositor-CompositorNodeHueCorrect.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00040.py -- tests/files/web/generated/M18-GAP-00040-node-Compositor-CompositorNodeHueCorrect.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00040", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00040", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00041", + "gapId": "node:Compositor:CompositorNodeHueSat", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00041-node-Compositor-CompositorNodeHueSat.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00041.py -- tests/files/web/generated/M18-GAP-00041-node-Compositor-CompositorNodeHueSat.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00041", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00041", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00042", + "gapId": "node:Compositor:CompositorNodeIDMask", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00042-node-Compositor-CompositorNodeIDMask.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00042.py -- tests/files/web/generated/M18-GAP-00042-node-Compositor-CompositorNodeIDMask.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00042", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00042", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00043", + "gapId": "node:Compositor:CompositorNodeImage", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00043-node-Compositor-CompositorNodeImage.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00043.py -- tests/files/web/generated/M18-GAP-00043-node-Compositor-CompositorNodeImage.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00043", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00043", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00044", + "gapId": "node:Compositor:CompositorNodeImageCoordinates", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00044-node-Compositor-CompositorNodeImageCoordinates.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00044.py -- tests/files/web/generated/M18-GAP-00044-node-Compositor-CompositorNodeImageCoordinates.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00044", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00044", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00045", + "gapId": "node:Compositor:CompositorNodeImageInfo", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00045-node-Compositor-CompositorNodeImageInfo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00045.py -- tests/files/web/generated/M18-GAP-00045-node-Compositor-CompositorNodeImageInfo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00045", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00045", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00046", + "gapId": "node:Compositor:CompositorNodeInpaint", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00046-node-Compositor-CompositorNodeInpaint.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00046.py -- tests/files/web/generated/M18-GAP-00046-node-Compositor-CompositorNodeInpaint.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00046", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00046", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00047", + "gapId": "node:Compositor:CompositorNodeInvert", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00047-node-Compositor-CompositorNodeInvert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00047.py -- tests/files/web/generated/M18-GAP-00047-node-Compositor-CompositorNodeInvert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00047", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00047", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00048", + "gapId": "node:Compositor:CompositorNodeKeying", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00048-node-Compositor-CompositorNodeKeying.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00048.py -- tests/files/web/generated/M18-GAP-00048-node-Compositor-CompositorNodeKeying.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00048", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00048", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00049", + "gapId": "node:Compositor:CompositorNodeKeyingScreen", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00049-node-Compositor-CompositorNodeKeyingScreen.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00049.py -- tests/files/web/generated/M18-GAP-00049-node-Compositor-CompositorNodeKeyingScreen.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00049", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00049", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00050", + "gapId": "node:Compositor:CompositorNodeKuwahara", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00050-node-Compositor-CompositorNodeKuwahara.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00050.py -- tests/files/web/generated/M18-GAP-00050-node-Compositor-CompositorNodeKuwahara.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00050", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00050", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00051", + "gapId": "node:Compositor:CompositorNodeLensdist", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00051-node-Compositor-CompositorNodeLensdist.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00051.py -- tests/files/web/generated/M18-GAP-00051-node-Compositor-CompositorNodeLensdist.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00051", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00051", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00052", + "gapId": "node:Compositor:CompositorNodeLevels", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00052-node-Compositor-CompositorNodeLevels.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00052.py -- tests/files/web/generated/M18-GAP-00052-node-Compositor-CompositorNodeLevels.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00052", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00052", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00053", + "gapId": "node:Compositor:CompositorNodeLumaMatte", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00053-node-Compositor-CompositorNodeLumaMatte.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00053.py -- tests/files/web/generated/M18-GAP-00053-node-Compositor-CompositorNodeLumaMatte.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00053", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00053", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00054", + "gapId": "node:Compositor:CompositorNodeMapUV", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00054-node-Compositor-CompositorNodeMapUV.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00054.py -- tests/files/web/generated/M18-GAP-00054-node-Compositor-CompositorNodeMapUV.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00054", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00054", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00055", + "gapId": "node:Compositor:CompositorNodeMask", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00055-node-Compositor-CompositorNodeMask.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00055.py -- tests/files/web/generated/M18-GAP-00055-node-Compositor-CompositorNodeMask.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00055", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00055", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00056", + "gapId": "node:Compositor:CompositorNodeMaskToSDF", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00056-node-Compositor-CompositorNodeMaskToSDF.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00056.py -- tests/files/web/generated/M18-GAP-00056-node-Compositor-CompositorNodeMaskToSDF.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00056", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00056", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00057", + "gapId": "node:Compositor:CompositorNodeMovieClip", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00057-node-Compositor-CompositorNodeMovieClip.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00057.py -- tests/files/web/generated/M18-GAP-00057-node-Compositor-CompositorNodeMovieClip.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00057", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00057", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00058", + "gapId": "node:Compositor:CompositorNodeMovieDistortion", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00058-node-Compositor-CompositorNodeMovieDistortion.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00058.py -- tests/files/web/generated/M18-GAP-00058-node-Compositor-CompositorNodeMovieDistortion.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00058", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00058", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00059", + "gapId": "node:Compositor:CompositorNodeNormal", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00059-node-Compositor-CompositorNodeNormal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00059.py -- tests/files/web/generated/M18-GAP-00059-node-Compositor-CompositorNodeNormal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00059", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00059", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00060", + "gapId": "node:Compositor:CompositorNodeNormalize", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00060-node-Compositor-CompositorNodeNormalize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00060.py -- tests/files/web/generated/M18-GAP-00060-node-Compositor-CompositorNodeNormalize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00060", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00060", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00061", + "gapId": "node:Compositor:CompositorNodeOutputFile", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00061-node-Compositor-CompositorNodeOutputFile.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00061.py -- tests/files/web/generated/M18-GAP-00061-node-Compositor-CompositorNodeOutputFile.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00061", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00061", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00062", + "gapId": "node:Compositor:CompositorNodePixelate", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00062-node-Compositor-CompositorNodePixelate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00062.py -- tests/files/web/generated/M18-GAP-00062-node-Compositor-CompositorNodePixelate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00062", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00062", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00063", + "gapId": "node:Compositor:CompositorNodePlaneTrackDeform", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00063-node-Compositor-CompositorNodePlaneTrackDeform.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00063.py -- tests/files/web/generated/M18-GAP-00063-node-Compositor-CompositorNodePlaneTrackDeform.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00063", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00063", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00064", + "gapId": "node:Compositor:CompositorNodePosterize", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00064-node-Compositor-CompositorNodePosterize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00064.py -- tests/files/web/generated/M18-GAP-00064-node-Compositor-CompositorNodePosterize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00064", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00064", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00065", + "gapId": "node:Compositor:CompositorNodePremulKey", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00065-node-Compositor-CompositorNodePremulKey.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00065.py -- tests/files/web/generated/M18-GAP-00065-node-Compositor-CompositorNodePremulKey.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00065", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00065", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00066", + "gapId": "node:Compositor:CompositorNodeRGB", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00066-node-Compositor-CompositorNodeRGB.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00066.py -- tests/files/web/generated/M18-GAP-00066-node-Compositor-CompositorNodeRGB.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00066", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00066", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00067", + "gapId": "node:Compositor:CompositorNodeRGBToBW", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00067-node-Compositor-CompositorNodeRGBToBW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00067.py -- tests/files/web/generated/M18-GAP-00067-node-Compositor-CompositorNodeRGBToBW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00067", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00067", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00068", + "gapId": "node:Compositor:CompositorNodeRLayers", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00068-node-Compositor-CompositorNodeRLayers.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00068.py -- tests/files/web/generated/M18-GAP-00068-node-Compositor-CompositorNodeRLayers.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00068", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00068", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00069", + "gapId": "node:Compositor:CompositorNodeRelativeToPixel", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00069-node-Compositor-CompositorNodeRelativeToPixel.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00069.py -- tests/files/web/generated/M18-GAP-00069-node-Compositor-CompositorNodeRelativeToPixel.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00069", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00069", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00070", + "gapId": "node:Compositor:CompositorNodeRotate", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00070-node-Compositor-CompositorNodeRotate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00070.py -- tests/files/web/generated/M18-GAP-00070-node-Compositor-CompositorNodeRotate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00070", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00070", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00071", + "gapId": "node:Compositor:CompositorNodeScale", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00071-node-Compositor-CompositorNodeScale.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00071.py -- tests/files/web/generated/M18-GAP-00071-node-Compositor-CompositorNodeScale.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00071", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00071", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00072", + "gapId": "node:Compositor:CompositorNodeSceneTime", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00072-node-Compositor-CompositorNodeSceneTime.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00072.py -- tests/files/web/generated/M18-GAP-00072-node-Compositor-CompositorNodeSceneTime.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00072", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00072", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00073", + "gapId": "node:Compositor:CompositorNodeSeparateColor", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00073-node-Compositor-CompositorNodeSeparateColor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00073.py -- tests/files/web/generated/M18-GAP-00073-node-Compositor-CompositorNodeSeparateColor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00073", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00073", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00074", + "gapId": "node:Compositor:CompositorNodeSequencerStripInfo", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00074-node-Compositor-CompositorNodeSequencerStripInfo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00074.py -- tests/files/web/generated/M18-GAP-00074-node-Compositor-CompositorNodeSequencerStripInfo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00074", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00074", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00075", + "gapId": "node:Compositor:CompositorNodeSetAlpha", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00075-node-Compositor-CompositorNodeSetAlpha.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00075.py -- tests/files/web/generated/M18-GAP-00075-node-Compositor-CompositorNodeSetAlpha.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00075", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00075", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00076", + "gapId": "node:Compositor:CompositorNodeSplit", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00076-node-Compositor-CompositorNodeSplit.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00076.py -- tests/files/web/generated/M18-GAP-00076-node-Compositor-CompositorNodeSplit.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00076", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00076", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00077", + "gapId": "node:Compositor:CompositorNodeStabilize", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00077-node-Compositor-CompositorNodeStabilize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00077.py -- tests/files/web/generated/M18-GAP-00077-node-Compositor-CompositorNodeStabilize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00077", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00077", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00078", + "gapId": "node:Compositor:CompositorNodeStringToImage", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00078-node-Compositor-CompositorNodeStringToImage.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00078.py -- tests/files/web/generated/M18-GAP-00078-node-Compositor-CompositorNodeStringToImage.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00078", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00078", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00079", + "gapId": "node:Compositor:CompositorNodeSwitch", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00079-node-Compositor-CompositorNodeSwitch.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00079.py -- tests/files/web/generated/M18-GAP-00079-node-Compositor-CompositorNodeSwitch.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00079", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00079", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00080", + "gapId": "node:Compositor:CompositorNodeSwitchView", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00080-node-Compositor-CompositorNodeSwitchView.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00080.py -- tests/files/web/generated/M18-GAP-00080-node-Compositor-CompositorNodeSwitchView.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00080", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00080", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00081", + "gapId": "node:Compositor:CompositorNodeTime", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00081-node-Compositor-CompositorNodeTime.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00081.py -- tests/files/web/generated/M18-GAP-00081-node-Compositor-CompositorNodeTime.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00081", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00081", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00082", + "gapId": "node:Compositor:CompositorNodeTonemap", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00082-node-Compositor-CompositorNodeTonemap.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00082.py -- tests/files/web/generated/M18-GAP-00082-node-Compositor-CompositorNodeTonemap.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00082", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00082", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00083", + "gapId": "node:Compositor:CompositorNodeTrackPos", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00083-node-Compositor-CompositorNodeTrackPos.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00083.py -- tests/files/web/generated/M18-GAP-00083-node-Compositor-CompositorNodeTrackPos.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00083", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00083", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00084", + "gapId": "node:Compositor:CompositorNodeTransform", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00084-node-Compositor-CompositorNodeTransform.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00084.py -- tests/files/web/generated/M18-GAP-00084-node-Compositor-CompositorNodeTransform.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00084", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00084", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00085", + "gapId": "node:Compositor:CompositorNodeTranslate", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00085-node-Compositor-CompositorNodeTranslate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00085.py -- tests/files/web/generated/M18-GAP-00085-node-Compositor-CompositorNodeTranslate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00085", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00085", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00086", + "gapId": "node:Compositor:CompositorNodeVecBlur", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00086-node-Compositor-CompositorNodeVecBlur.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00086.py -- tests/files/web/generated/M18-GAP-00086-node-Compositor-CompositorNodeVecBlur.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00086", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00086", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00087", + "gapId": "node:Compositor:CompositorNodeViewer", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00087-node-Compositor-CompositorNodeViewer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00087.py -- tests/files/web/generated/M18-GAP-00087-node-Compositor-CompositorNodeViewer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00087", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00087", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00088", + "gapId": "node:Compositor:CompositorNodeZcombine", + "ownerFamily": "COMPOSITOR_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00088-node-Compositor-CompositorNodeZcombine.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00088.py -- tests/files/web/generated/M18-GAP-00088-node-Compositor-CompositorNodeZcombine.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00088", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00088", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00089", + "gapId": "node:Geometry:GeometryNodeAccumulateField", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00089-node-Geometry-GeometryNodeAccumulateField.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00089.py -- tests/files/web/generated/M18-GAP-00089-node-Geometry-GeometryNodeAccumulateField.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00089", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00089", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00090", + "gapId": "node:Geometry:GeometryNodeAttributeDomainSize", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00090-node-Geometry-GeometryNodeAttributeDomainSize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00090.py -- tests/files/web/generated/M18-GAP-00090-node-Geometry-GeometryNodeAttributeDomainSize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00090", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00090", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00091", + "gapId": "node:Geometry:GeometryNodeAttributeStatistic", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00091-node-Geometry-GeometryNodeAttributeStatistic.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00091.py -- tests/files/web/generated/M18-GAP-00091-node-Geometry-GeometryNodeAttributeStatistic.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00091", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00091", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00092", + "gapId": "node:Geometry:GeometryNodeBake", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00092-node-Geometry-GeometryNodeBake.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00092.py -- tests/files/web/generated/M18-GAP-00092-node-Geometry-GeometryNodeBake.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00092", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00092", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00093", + "gapId": "node:Geometry:GeometryNodeBlurAttribute", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00093-node-Geometry-GeometryNodeBlurAttribute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00093.py -- tests/files/web/generated/M18-GAP-00093-node-Geometry-GeometryNodeBlurAttribute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00093", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00093", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00094", + "gapId": "node:Geometry:GeometryNodeBoneInfo", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00094-node-Geometry-GeometryNodeBoneInfo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00094.py -- tests/files/web/generated/M18-GAP-00094-node-Geometry-GeometryNodeBoneInfo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00094", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00094", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00095", + "gapId": "node:Geometry:GeometryNodeBoundBox", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00095-node-Geometry-GeometryNodeBoundBox.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00095.py -- tests/files/web/generated/M18-GAP-00095-node-Geometry-GeometryNodeBoundBox.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00095", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00095", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00096", + "gapId": "node:Geometry:GeometryNodeCameraInfo", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00096-node-Geometry-GeometryNodeCameraInfo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00096.py -- tests/files/web/generated/M18-GAP-00096-node-Geometry-GeometryNodeCameraInfo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00096", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00096", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00097", + "gapId": "node:Geometry:GeometryNodeCaptureAttribute", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00097-node-Geometry-GeometryNodeCaptureAttribute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00097.py -- tests/files/web/generated/M18-GAP-00097-node-Geometry-GeometryNodeCaptureAttribute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00097", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00097", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00098", + "gapId": "node:Geometry:GeometryNodeClosureToList", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00098-node-Geometry-GeometryNodeClosureToList.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00098.py -- tests/files/web/generated/M18-GAP-00098-node-Geometry-GeometryNodeClosureToList.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00098", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00098", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00099", + "gapId": "node:Geometry:GeometryNodeClusterByConnected", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00099-node-Geometry-GeometryNodeClusterByConnected.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00099.py -- tests/files/web/generated/M18-GAP-00099-node-Geometry-GeometryNodeClusterByConnected.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00099", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00099", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00100", + "gapId": "node:Geometry:GeometryNodeClusterByDistance", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00100-node-Geometry-GeometryNodeClusterByDistance.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00100.py -- tests/files/web/generated/M18-GAP-00100-node-Geometry-GeometryNodeClusterByDistance.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00100", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00100", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00101", + "gapId": "node:Geometry:GeometryNodeCollectionChildren", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00101-node-Geometry-GeometryNodeCollectionChildren.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00101.py -- tests/files/web/generated/M18-GAP-00101-node-Geometry-GeometryNodeCollectionChildren.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00101", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00101", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00102", + "gapId": "node:Geometry:GeometryNodeCollectionInfo", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00102-node-Geometry-GeometryNodeCollectionInfo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00102.py -- tests/files/web/generated/M18-GAP-00102-node-Geometry-GeometryNodeCollectionInfo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00102", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00102", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00103", + "gapId": "node:Geometry:GeometryNodeConvexHull", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00103-node-Geometry-GeometryNodeConvexHull.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00103.py -- tests/files/web/generated/M18-GAP-00103-node-Geometry-GeometryNodeConvexHull.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00103", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00103", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00104", + "gapId": "node:Geometry:GeometryNodeCornersOfEdge", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00104-node-Geometry-GeometryNodeCornersOfEdge.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00104.py -- tests/files/web/generated/M18-GAP-00104-node-Geometry-GeometryNodeCornersOfEdge.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00104", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00104", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00105", + "gapId": "node:Geometry:GeometryNodeCornersOfFace", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00105-node-Geometry-GeometryNodeCornersOfFace.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00105.py -- tests/files/web/generated/M18-GAP-00105-node-Geometry-GeometryNodeCornersOfFace.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00105", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00105", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00106", + "gapId": "node:Geometry:GeometryNodeCornersOfVertex", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00106-node-Geometry-GeometryNodeCornersOfVertex.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00106.py -- tests/files/web/generated/M18-GAP-00106-node-Geometry-GeometryNodeCornersOfVertex.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00106", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00106", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00107", + "gapId": "node:Geometry:GeometryNodeCubeGridTopology", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00107-node-Geometry-GeometryNodeCubeGridTopology.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00107.py -- tests/files/web/generated/M18-GAP-00107-node-Geometry-GeometryNodeCubeGridTopology.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00107", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00107", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00108", + "gapId": "node:Geometry:GeometryNodeCurveArc", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00108-node-Geometry-GeometryNodeCurveArc.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00108.py -- tests/files/web/generated/M18-GAP-00108-node-Geometry-GeometryNodeCurveArc.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00108", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00108", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00109", + "gapId": "node:Geometry:GeometryNodeCurveEndpointSelection", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00109-node-Geometry-GeometryNodeCurveEndpointSelection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00109.py -- tests/files/web/generated/M18-GAP-00109-node-Geometry-GeometryNodeCurveEndpointSelection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00109", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00109", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00110", + "gapId": "node:Geometry:GeometryNodeCurveHandleTypeSelection", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00110-node-Geometry-GeometryNodeCurveHandleTypeSelection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00110.py -- tests/files/web/generated/M18-GAP-00110-node-Geometry-GeometryNodeCurveHandleTypeSelection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00110", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00110", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00111", + "gapId": "node:Geometry:GeometryNodeCurveLength", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00111-node-Geometry-GeometryNodeCurveLength.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00111.py -- tests/files/web/generated/M18-GAP-00111-node-Geometry-GeometryNodeCurveLength.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00111", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00111", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00112", + "gapId": "node:Geometry:GeometryNodeCurveOfPoint", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00112-node-Geometry-GeometryNodeCurveOfPoint.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00112.py -- tests/files/web/generated/M18-GAP-00112-node-Geometry-GeometryNodeCurveOfPoint.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00112", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00112", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00113", + "gapId": "node:Geometry:GeometryNodeCurvePrimitiveBezierSegment", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00113-node-Geometry-GeometryNodeCurvePrimitiveBezierSegment.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00113.py -- tests/files/web/generated/M18-GAP-00113-node-Geometry-GeometryNodeCurvePrimitiveBezierSegment.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00113", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00113", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00114", + "gapId": "node:Geometry:GeometryNodeCurvePrimitiveCircle", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00114-node-Geometry-GeometryNodeCurvePrimitiveCircle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00114.py -- tests/files/web/generated/M18-GAP-00114-node-Geometry-GeometryNodeCurvePrimitiveCircle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00114", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00114", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00115", + "gapId": "node:Geometry:GeometryNodeCurvePrimitiveLine", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00115-node-Geometry-GeometryNodeCurvePrimitiveLine.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00115.py -- tests/files/web/generated/M18-GAP-00115-node-Geometry-GeometryNodeCurvePrimitiveLine.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00115", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00115", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00116", + "gapId": "node:Geometry:GeometryNodeCurvePrimitiveQuadrilateral", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00116-node-Geometry-GeometryNodeCurvePrimitiveQuadrilateral.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00116.py -- tests/files/web/generated/M18-GAP-00116-node-Geometry-GeometryNodeCurvePrimitiveQuadrilateral.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00116", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00116", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00117", + "gapId": "node:Geometry:GeometryNodeCurveQuadraticBezier", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00117-node-Geometry-GeometryNodeCurveQuadraticBezier.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00117.py -- tests/files/web/generated/M18-GAP-00117-node-Geometry-GeometryNodeCurveQuadraticBezier.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00117", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00117", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00118", + "gapId": "node:Geometry:GeometryNodeCurveSetHandles", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00118-node-Geometry-GeometryNodeCurveSetHandles.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00118.py -- tests/files/web/generated/M18-GAP-00118-node-Geometry-GeometryNodeCurveSetHandles.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00118", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00118", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00119", + "gapId": "node:Geometry:GeometryNodeCurveSpiral", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00119-node-Geometry-GeometryNodeCurveSpiral.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00119.py -- tests/files/web/generated/M18-GAP-00119-node-Geometry-GeometryNodeCurveSpiral.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00119", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00119", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00120", + "gapId": "node:Geometry:GeometryNodeCurveSplineType", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00120-node-Geometry-GeometryNodeCurveSplineType.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00120.py -- tests/files/web/generated/M18-GAP-00120-node-Geometry-GeometryNodeCurveSplineType.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00120", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00120", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00121", + "gapId": "node:Geometry:GeometryNodeCurveStar", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00121-node-Geometry-GeometryNodeCurveStar.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00121.py -- tests/files/web/generated/M18-GAP-00121-node-Geometry-GeometryNodeCurveStar.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00121", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00121", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00122", + "gapId": "node:Geometry:GeometryNodeCurveToMesh", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00122-node-Geometry-GeometryNodeCurveToMesh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00122.py -- tests/files/web/generated/M18-GAP-00122-node-Geometry-GeometryNodeCurveToMesh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00122", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00122", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00123", + "gapId": "node:Geometry:GeometryNodeCurveToPoints", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00123-node-Geometry-GeometryNodeCurveToPoints.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00123.py -- tests/files/web/generated/M18-GAP-00123-node-Geometry-GeometryNodeCurveToPoints.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00123", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00123", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00124", + "gapId": "node:Geometry:GeometryNodeCurvesToGreasePencil", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00124-node-Geometry-GeometryNodeCurvesToGreasePencil.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00124.py -- tests/files/web/generated/M18-GAP-00124-node-Geometry-GeometryNodeCurvesToGreasePencil.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00124", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00124", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00125", + "gapId": "node:Geometry:GeometryNodeDeformCurvesOnSurface", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00125-node-Geometry-GeometryNodeDeformCurvesOnSurface.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00125.py -- tests/files/web/generated/M18-GAP-00125-node-Geometry-GeometryNodeDeformCurvesOnSurface.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00125", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00125", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00126", + "gapId": "node:Geometry:GeometryNodeDeleteGeometry", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00126-node-Geometry-GeometryNodeDeleteGeometry.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00126.py -- tests/files/web/generated/M18-GAP-00126-node-Geometry-GeometryNodeDeleteGeometry.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00126", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00126", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00127", + "gapId": "node:Geometry:GeometryNodeDistributePointsInGrid", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00127-node-Geometry-GeometryNodeDistributePointsInGrid.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00127.py -- tests/files/web/generated/M18-GAP-00127-node-Geometry-GeometryNodeDistributePointsInGrid.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00127", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00127", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00128", + "gapId": "node:Geometry:GeometryNodeDistributePointsInVolume", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00128-node-Geometry-GeometryNodeDistributePointsInVolume.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00128.py -- tests/files/web/generated/M18-GAP-00128-node-Geometry-GeometryNodeDistributePointsInVolume.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00128", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00128", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00129", + "gapId": "node:Geometry:GeometryNodeDistributePointsOnFaces", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00129-node-Geometry-GeometryNodeDistributePointsOnFaces.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00129.py -- tests/files/web/generated/M18-GAP-00129-node-Geometry-GeometryNodeDistributePointsOnFaces.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00129", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00129", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00130", + "gapId": "node:Geometry:GeometryNodeDualMesh", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00130-node-Geometry-GeometryNodeDualMesh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00130.py -- tests/files/web/generated/M18-GAP-00130-node-Geometry-GeometryNodeDualMesh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00130", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00130", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00131", + "gapId": "node:Geometry:GeometryNodeDuplicateElements", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00131-node-Geometry-GeometryNodeDuplicateElements.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00131.py -- tests/files/web/generated/M18-GAP-00131-node-Geometry-GeometryNodeDuplicateElements.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00131", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00131", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00132", + "gapId": "node:Geometry:GeometryNodeEdgePathsToCurves", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00132-node-Geometry-GeometryNodeEdgePathsToCurves.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00132.py -- tests/files/web/generated/M18-GAP-00132-node-Geometry-GeometryNodeEdgePathsToCurves.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00132", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00132", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00133", + "gapId": "node:Geometry:GeometryNodeEdgePathsToSelection", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00133-node-Geometry-GeometryNodeEdgePathsToSelection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00133.py -- tests/files/web/generated/M18-GAP-00133-node-Geometry-GeometryNodeEdgePathsToSelection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00133", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00133", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00134", + "gapId": "node:Geometry:GeometryNodeEdgesOfCorner", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00134-node-Geometry-GeometryNodeEdgesOfCorner.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00134.py -- tests/files/web/generated/M18-GAP-00134-node-Geometry-GeometryNodeEdgesOfCorner.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00134", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00134", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00135", + "gapId": "node:Geometry:GeometryNodeEdgesOfVertex", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00135-node-Geometry-GeometryNodeEdgesOfVertex.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00135.py -- tests/files/web/generated/M18-GAP-00135-node-Geometry-GeometryNodeEdgesOfVertex.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00135", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00135", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00136", + "gapId": "node:Geometry:GeometryNodeEdgesToFaceGroups", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00136-node-Geometry-GeometryNodeEdgesToFaceGroups.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00136.py -- tests/files/web/generated/M18-GAP-00136-node-Geometry-GeometryNodeEdgesToFaceGroups.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00136", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00136", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00137", + "gapId": "node:Geometry:GeometryNodeExtrudeMesh", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00137-node-Geometry-GeometryNodeExtrudeMesh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00137.py -- tests/files/web/generated/M18-GAP-00137-node-Geometry-GeometryNodeExtrudeMesh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00137", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00137", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00138", + "gapId": "node:Geometry:GeometryNodeFaceOfCorner", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00138-node-Geometry-GeometryNodeFaceOfCorner.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00138.py -- tests/files/web/generated/M18-GAP-00138-node-Geometry-GeometryNodeFaceOfCorner.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00138", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00138", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00139", + "gapId": "node:Geometry:GeometryNodeFieldAtIndex", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00139-node-Geometry-GeometryNodeFieldAtIndex.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00139.py -- tests/files/web/generated/M18-GAP-00139-node-Geometry-GeometryNodeFieldAtIndex.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00139", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00139", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00140", + "gapId": "node:Geometry:GeometryNodeFieldAverage", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00140-node-Geometry-GeometryNodeFieldAverage.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00140.py -- tests/files/web/generated/M18-GAP-00140-node-Geometry-GeometryNodeFieldAverage.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00140", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00140", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00141", + "gapId": "node:Geometry:GeometryNodeFieldMinAndMax", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00141-node-Geometry-GeometryNodeFieldMinAndMax.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00141.py -- tests/files/web/generated/M18-GAP-00141-node-Geometry-GeometryNodeFieldMinAndMax.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00141", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00141", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00142", + "gapId": "node:Geometry:GeometryNodeFieldOnDomain", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00142-node-Geometry-GeometryNodeFieldOnDomain.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00142.py -- tests/files/web/generated/M18-GAP-00142-node-Geometry-GeometryNodeFieldOnDomain.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00142", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00142", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00143", + "gapId": "node:Geometry:GeometryNodeFieldToGrid", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00143-node-Geometry-GeometryNodeFieldToGrid.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00143.py -- tests/files/web/generated/M18-GAP-00143-node-Geometry-GeometryNodeFieldToGrid.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00143", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00143", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00144", + "gapId": "node:Geometry:GeometryNodeFieldToList", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00144-node-Geometry-GeometryNodeFieldToList.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00144.py -- tests/files/web/generated/M18-GAP-00144-node-Geometry-GeometryNodeFieldToList.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00144", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00144", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00145", + "gapId": "node:Geometry:GeometryNodeFieldVariance", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00145-node-Geometry-GeometryNodeFieldVariance.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00145.py -- tests/files/web/generated/M18-GAP-00145-node-Geometry-GeometryNodeFieldVariance.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00145", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00145", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00146", + "gapId": "node:Geometry:GeometryNodeFillCurve", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00146-node-Geometry-GeometryNodeFillCurve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00146.py -- tests/files/web/generated/M18-GAP-00146-node-Geometry-GeometryNodeFillCurve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00146", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00146", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00147", + "gapId": "node:Geometry:GeometryNodeFilletCurve", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00147-node-Geometry-GeometryNodeFilletCurve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00147.py -- tests/files/web/generated/M18-GAP-00147-node-Geometry-GeometryNodeFilletCurve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00147", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00147", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00148", + "gapId": "node:Geometry:GeometryNodeFilterList", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00148-node-Geometry-GeometryNodeFilterList.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00148.py -- tests/files/web/generated/M18-GAP-00148-node-Geometry-GeometryNodeFilterList.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00148", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00148", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00149", + "gapId": "node:Geometry:GeometryNodeFlipFaces", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00149-node-Geometry-GeometryNodeFlipFaces.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00149.py -- tests/files/web/generated/M18-GAP-00149-node-Geometry-GeometryNodeFlipFaces.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00149", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00149", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00150", + "gapId": "node:Geometry:GeometryNodeForeachGeometryElementInput", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00150-node-Geometry-GeometryNodeForeachGeometryElementInput.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00150.py -- tests/files/web/generated/M18-GAP-00150-node-Geometry-GeometryNodeForeachGeometryElementInput.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00150", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00150", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00151", + "gapId": "node:Geometry:GeometryNodeForeachGeometryElementOutput", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00151-node-Geometry-GeometryNodeForeachGeometryElementOutput.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00151.py -- tests/files/web/generated/M18-GAP-00151-node-Geometry-GeometryNodeForeachGeometryElementOutput.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00151", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00151", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00152", + "gapId": "node:Geometry:GeometryNodeGeometryToInstance", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00152-node-Geometry-GeometryNodeGeometryToInstance.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00152.py -- tests/files/web/generated/M18-GAP-00152-node-Geometry-GeometryNodeGeometryToInstance.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00152", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00152", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00153", + "gapId": "node:Geometry:GeometryNodeGetAttributeNames", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00153-node-Geometry-GeometryNodeGetAttributeNames.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00153.py -- tests/files/web/generated/M18-GAP-00153-node-Geometry-GeometryNodeGetAttributeNames.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00153", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00153", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00154", + "gapId": "node:Geometry:GeometryNodeGetGeometryBundle", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00154-node-Geometry-GeometryNodeGetGeometryBundle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00154.py -- tests/files/web/generated/M18-GAP-00154-node-Geometry-GeometryNodeGetGeometryBundle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00154", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00154", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00155", + "gapId": "node:Geometry:GeometryNodeGetGeometryComponent", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00155-node-Geometry-GeometryNodeGetGeometryComponent.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00155.py -- tests/files/web/generated/M18-GAP-00155-node-Geometry-GeometryNodeGetGeometryComponent.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00155", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00155", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00156", + "gapId": "node:Geometry:GeometryNodeGetNamedGrid", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00156-node-Geometry-GeometryNodeGetNamedGrid.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00156.py -- tests/files/web/generated/M18-GAP-00156-node-Geometry-GeometryNodeGetNamedGrid.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00156", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00156", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00157", + "gapId": "node:Geometry:GeometryNodeGizmoDial", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00157-node-Geometry-GeometryNodeGizmoDial.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00157.py -- tests/files/web/generated/M18-GAP-00157-node-Geometry-GeometryNodeGizmoDial.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00157", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00157", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00158", + "gapId": "node:Geometry:GeometryNodeGizmoLinear", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00158-node-Geometry-GeometryNodeGizmoLinear.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00158.py -- tests/files/web/generated/M18-GAP-00158-node-Geometry-GeometryNodeGizmoLinear.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00158", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00158", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00159", + "gapId": "node:Geometry:GeometryNodeGizmoTransform", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00159-node-Geometry-GeometryNodeGizmoTransform.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00159.py -- tests/files/web/generated/M18-GAP-00159-node-Geometry-GeometryNodeGizmoTransform.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00159", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00159", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00160", + "gapId": "node:Geometry:GeometryNodeGreasePencilToCurves", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00160-node-Geometry-GeometryNodeGreasePencilToCurves.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00160.py -- tests/files/web/generated/M18-GAP-00160-node-Geometry-GeometryNodeGreasePencilToCurves.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00160", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00160", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00161", + "gapId": "node:Geometry:GeometryNodeGridAdvect", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00161-node-Geometry-GeometryNodeGridAdvect.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00161.py -- tests/files/web/generated/M18-GAP-00161-node-Geometry-GeometryNodeGridAdvect.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00161", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00161", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00162", + "gapId": "node:Geometry:GeometryNodeGridClip", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00162-node-Geometry-GeometryNodeGridClip.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00162.py -- tests/files/web/generated/M18-GAP-00162-node-Geometry-GeometryNodeGridClip.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00162", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00162", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00163", + "gapId": "node:Geometry:GeometryNodeGridCurl", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00163-node-Geometry-GeometryNodeGridCurl.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00163.py -- tests/files/web/generated/M18-GAP-00163-node-Geometry-GeometryNodeGridCurl.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00163", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00163", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00164", + "gapId": "node:Geometry:GeometryNodeGridDilateAndErode", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00164-node-Geometry-GeometryNodeGridDilateAndErode.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00164.py -- tests/files/web/generated/M18-GAP-00164-node-Geometry-GeometryNodeGridDilateAndErode.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00164", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00164", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00165", + "gapId": "node:Geometry:GeometryNodeGridDivergence", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00165-node-Geometry-GeometryNodeGridDivergence.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00165.py -- tests/files/web/generated/M18-GAP-00165-node-Geometry-GeometryNodeGridDivergence.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00165", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00165", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00166", + "gapId": "node:Geometry:GeometryNodeGridGradient", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00166-node-Geometry-GeometryNodeGridGradient.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00166.py -- tests/files/web/generated/M18-GAP-00166-node-Geometry-GeometryNodeGridGradient.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00166", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00166", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00167", + "gapId": "node:Geometry:GeometryNodeGridInfo", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00167-node-Geometry-GeometryNodeGridInfo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00167.py -- tests/files/web/generated/M18-GAP-00167-node-Geometry-GeometryNodeGridInfo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00167", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00167", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00168", + "gapId": "node:Geometry:GeometryNodeGridLaplacian", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00168-node-Geometry-GeometryNodeGridLaplacian.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00168.py -- tests/files/web/generated/M18-GAP-00168-node-Geometry-GeometryNodeGridLaplacian.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00168", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00168", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00169", + "gapId": "node:Geometry:GeometryNodeGridMean", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00169-node-Geometry-GeometryNodeGridMean.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00169.py -- tests/files/web/generated/M18-GAP-00169-node-Geometry-GeometryNodeGridMean.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00169", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00169", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00170", + "gapId": "node:Geometry:GeometryNodeGridMedian", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00170-node-Geometry-GeometryNodeGridMedian.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00170.py -- tests/files/web/generated/M18-GAP-00170-node-Geometry-GeometryNodeGridMedian.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00170", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00170", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00171", + "gapId": "node:Geometry:GeometryNodeGridPrune", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00171-node-Geometry-GeometryNodeGridPrune.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00171.py -- tests/files/web/generated/M18-GAP-00171-node-Geometry-GeometryNodeGridPrune.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00171", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00171", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00172", + "gapId": "node:Geometry:GeometryNodeGridToMesh", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00172-node-Geometry-GeometryNodeGridToMesh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00172.py -- tests/files/web/generated/M18-GAP-00172-node-Geometry-GeometryNodeGridToMesh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00172", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00172", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00173", + "gapId": "node:Geometry:GeometryNodeGridToPoints", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00173-node-Geometry-GeometryNodeGridToPoints.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00173.py -- tests/files/web/generated/M18-GAP-00173-node-Geometry-GeometryNodeGridToPoints.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00173", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00173", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00174", + "gapId": "node:Geometry:GeometryNodeGridVoxelize", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00174-node-Geometry-GeometryNodeGridVoxelize.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00174.py -- tests/files/web/generated/M18-GAP-00174-node-Geometry-GeometryNodeGridVoxelize.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00174", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00174", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00175", + "gapId": "node:Geometry:GeometryNodeGroup", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00175-node-Geometry-GeometryNodeGroup.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00175.py -- tests/files/web/generated/M18-GAP-00175-node-Geometry-GeometryNodeGroup.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00175", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00175", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00176", + "gapId": "node:Geometry:GeometryNodeImageInfo", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00176-node-Geometry-GeometryNodeImageInfo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00176.py -- tests/files/web/generated/M18-GAP-00176-node-Geometry-GeometryNodeImageInfo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00176", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00176", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00177", + "gapId": "node:Geometry:GeometryNodeImageTexture", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00177-node-Geometry-GeometryNodeImageTexture.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00177.py -- tests/files/web/generated/M18-GAP-00177-node-Geometry-GeometryNodeImageTexture.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00177", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00177", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00178", + "gapId": "node:Geometry:GeometryNodeImportCSV", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00178-node-Geometry-GeometryNodeImportCSV.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00178.py -- tests/files/web/generated/M18-GAP-00178-node-Geometry-GeometryNodeImportCSV.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00178", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00178", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00179", + "gapId": "node:Geometry:GeometryNodeImportOBJ", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00179-node-Geometry-GeometryNodeImportOBJ.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00179.py -- tests/files/web/generated/M18-GAP-00179-node-Geometry-GeometryNodeImportOBJ.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00179", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00179", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00180", + "gapId": "node:Geometry:GeometryNodeImportPLY", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00180-node-Geometry-GeometryNodeImportPLY.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00180.py -- tests/files/web/generated/M18-GAP-00180-node-Geometry-GeometryNodeImportPLY.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00180", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00180", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00181", + "gapId": "node:Geometry:GeometryNodeImportSTL", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00181-node-Geometry-GeometryNodeImportSTL.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00181.py -- tests/files/web/generated/M18-GAP-00181-node-Geometry-GeometryNodeImportSTL.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00181", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00181", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00182", + "gapId": "node:Geometry:GeometryNodeImportText", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00182-node-Geometry-GeometryNodeImportText.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00182.py -- tests/files/web/generated/M18-GAP-00182-node-Geometry-GeometryNodeImportText.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00182", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00182", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00183", + "gapId": "node:Geometry:GeometryNodeImportVDB", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00183-node-Geometry-GeometryNodeImportVDB.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00183.py -- tests/files/web/generated/M18-GAP-00183-node-Geometry-GeometryNodeImportVDB.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00183", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00183", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00184", + "gapId": "node:Geometry:GeometryNodeIndexOfNearest", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00184-node-Geometry-GeometryNodeIndexOfNearest.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00184.py -- tests/files/web/generated/M18-GAP-00184-node-Geometry-GeometryNodeIndexOfNearest.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00184", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00184", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00185", + "gapId": "node:Geometry:GeometryNodeIndexSwitch", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00185-node-Geometry-GeometryNodeIndexSwitch.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00185.py -- tests/files/web/generated/M18-GAP-00185-node-Geometry-GeometryNodeIndexSwitch.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00185", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00185", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00186", + "gapId": "node:Geometry:GeometryNodeInputActiveCamera", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00186-node-Geometry-GeometryNodeInputActiveCamera.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00186.py -- tests/files/web/generated/M18-GAP-00186-node-Geometry-GeometryNodeInputActiveCamera.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00186", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00186", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00187", + "gapId": "node:Geometry:GeometryNodeInputCollection", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00187-node-Geometry-GeometryNodeInputCollection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00187.py -- tests/files/web/generated/M18-GAP-00187-node-Geometry-GeometryNodeInputCollection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00187", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00187", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00188", + "gapId": "node:Geometry:GeometryNodeInputCurveHandlePositions", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00188-node-Geometry-GeometryNodeInputCurveHandlePositions.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00188.py -- tests/files/web/generated/M18-GAP-00188-node-Geometry-GeometryNodeInputCurveHandlePositions.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00188", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00188", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00189", + "gapId": "node:Geometry:GeometryNodeInputCurveTilt", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00189-node-Geometry-GeometryNodeInputCurveTilt.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00189.py -- tests/files/web/generated/M18-GAP-00189-node-Geometry-GeometryNodeInputCurveTilt.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00189", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00189", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00190", + "gapId": "node:Geometry:GeometryNodeInputEdgeSmooth", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00190-node-Geometry-GeometryNodeInputEdgeSmooth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00190.py -- tests/files/web/generated/M18-GAP-00190-node-Geometry-GeometryNodeInputEdgeSmooth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00190", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00190", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00191", + "gapId": "node:Geometry:GeometryNodeInputFont", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00191-node-Geometry-GeometryNodeInputFont.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00191.py -- tests/files/web/generated/M18-GAP-00191-node-Geometry-GeometryNodeInputFont.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00191", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00191", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00192", + "gapId": "node:Geometry:GeometryNodeInputID", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00192-node-Geometry-GeometryNodeInputID.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00192.py -- tests/files/web/generated/M18-GAP-00192-node-Geometry-GeometryNodeInputID.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00192", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00192", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00193", + "gapId": "node:Geometry:GeometryNodeInputImage", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00193-node-Geometry-GeometryNodeInputImage.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00193.py -- tests/files/web/generated/M18-GAP-00193-node-Geometry-GeometryNodeInputImage.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00193", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00193", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00194", + "gapId": "node:Geometry:GeometryNodeInputIndex", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00194-node-Geometry-GeometryNodeInputIndex.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00194.py -- tests/files/web/generated/M18-GAP-00194-node-Geometry-GeometryNodeInputIndex.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00194", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00194", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00195", + "gapId": "node:Geometry:GeometryNodeInputInstanceBounds", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00195-node-Geometry-GeometryNodeInputInstanceBounds.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00195.py -- tests/files/web/generated/M18-GAP-00195-node-Geometry-GeometryNodeInputInstanceBounds.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00195", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00195", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00196", + "gapId": "node:Geometry:GeometryNodeInputInstanceReference", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00196-node-Geometry-GeometryNodeInputInstanceReference.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00196.py -- tests/files/web/generated/M18-GAP-00196-node-Geometry-GeometryNodeInputInstanceReference.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00196", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00196", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00197", + "gapId": "node:Geometry:GeometryNodeInputInstanceRotation", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00197-node-Geometry-GeometryNodeInputInstanceRotation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00197.py -- tests/files/web/generated/M18-GAP-00197-node-Geometry-GeometryNodeInputInstanceRotation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00197", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00197", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00198", + "gapId": "node:Geometry:GeometryNodeInputInstanceScale", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00198-node-Geometry-GeometryNodeInputInstanceScale.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00198.py -- tests/files/web/generated/M18-GAP-00198-node-Geometry-GeometryNodeInputInstanceScale.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00198", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00198", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00199", + "gapId": "node:Geometry:GeometryNodeInputMaterial", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00199-node-Geometry-GeometryNodeInputMaterial.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00199.py -- tests/files/web/generated/M18-GAP-00199-node-Geometry-GeometryNodeInputMaterial.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00199", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00199", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00200", + "gapId": "node:Geometry:GeometryNodeInputMaterialIndex", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00200-node-Geometry-GeometryNodeInputMaterialIndex.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00200.py -- tests/files/web/generated/M18-GAP-00200-node-Geometry-GeometryNodeInputMaterialIndex.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00200", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00200", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00201", + "gapId": "node:Geometry:GeometryNodeInputMeshEdgeAngle", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00201-node-Geometry-GeometryNodeInputMeshEdgeAngle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00201.py -- tests/files/web/generated/M18-GAP-00201-node-Geometry-GeometryNodeInputMeshEdgeAngle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00201", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00201", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00202", + "gapId": "node:Geometry:GeometryNodeInputMeshEdgeNeighbors", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00202-node-Geometry-GeometryNodeInputMeshEdgeNeighbors.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00202.py -- tests/files/web/generated/M18-GAP-00202-node-Geometry-GeometryNodeInputMeshEdgeNeighbors.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00202", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00202", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00203", + "gapId": "node:Geometry:GeometryNodeInputMeshEdgeVertices", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00203-node-Geometry-GeometryNodeInputMeshEdgeVertices.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00203.py -- tests/files/web/generated/M18-GAP-00203-node-Geometry-GeometryNodeInputMeshEdgeVertices.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00203", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00203", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00204", + "gapId": "node:Geometry:GeometryNodeInputMeshFaceArea", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00204-node-Geometry-GeometryNodeInputMeshFaceArea.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00204.py -- tests/files/web/generated/M18-GAP-00204-node-Geometry-GeometryNodeInputMeshFaceArea.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00204", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00204", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00205", + "gapId": "node:Geometry:GeometryNodeInputMeshFaceIsPlanar", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00205-node-Geometry-GeometryNodeInputMeshFaceIsPlanar.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00205.py -- tests/files/web/generated/M18-GAP-00205-node-Geometry-GeometryNodeInputMeshFaceIsPlanar.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00205", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00205", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00206", + "gapId": "node:Geometry:GeometryNodeInputMeshFaceNeighbors", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00206-node-Geometry-GeometryNodeInputMeshFaceNeighbors.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00206.py -- tests/files/web/generated/M18-GAP-00206-node-Geometry-GeometryNodeInputMeshFaceNeighbors.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00206", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00206", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00207", + "gapId": "node:Geometry:GeometryNodeInputMeshIsland", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00207-node-Geometry-GeometryNodeInputMeshIsland.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00207.py -- tests/files/web/generated/M18-GAP-00207-node-Geometry-GeometryNodeInputMeshIsland.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00207", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00207", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00208", + "gapId": "node:Geometry:GeometryNodeInputMeshVertexNeighbors", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00208-node-Geometry-GeometryNodeInputMeshVertexNeighbors.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00208.py -- tests/files/web/generated/M18-GAP-00208-node-Geometry-GeometryNodeInputMeshVertexNeighbors.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00208", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00208", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00209", + "gapId": "node:Geometry:GeometryNodeInputNamedAttribute", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00209-node-Geometry-GeometryNodeInputNamedAttribute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00209.py -- tests/files/web/generated/M18-GAP-00209-node-Geometry-GeometryNodeInputNamedAttribute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00209", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00209", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00210", + "gapId": "node:Geometry:GeometryNodeInputNamedLayerSelection", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00210-node-Geometry-GeometryNodeInputNamedLayerSelection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00210.py -- tests/files/web/generated/M18-GAP-00210-node-Geometry-GeometryNodeInputNamedLayerSelection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00210", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00210", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00211", + "gapId": "node:Geometry:GeometryNodeInputNormal", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00211-node-Geometry-GeometryNodeInputNormal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00211.py -- tests/files/web/generated/M18-GAP-00211-node-Geometry-GeometryNodeInputNormal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00211", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00211", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00212", + "gapId": "node:Geometry:GeometryNodeInputObject", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00212-node-Geometry-GeometryNodeInputObject.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00212.py -- tests/files/web/generated/M18-GAP-00212-node-Geometry-GeometryNodeInputObject.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00212", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00212", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00213", + "gapId": "node:Geometry:GeometryNodeInputPosition", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00213-node-Geometry-GeometryNodeInputPosition.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00213.py -- tests/files/web/generated/M18-GAP-00213-node-Geometry-GeometryNodeInputPosition.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00213", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00213", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00214", + "gapId": "node:Geometry:GeometryNodeInputRadius", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00214-node-Geometry-GeometryNodeInputRadius.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00214.py -- tests/files/web/generated/M18-GAP-00214-node-Geometry-GeometryNodeInputRadius.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00214", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00214", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00215", + "gapId": "node:Geometry:GeometryNodeInputSceneTime", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00215-node-Geometry-GeometryNodeInputSceneTime.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00215.py -- tests/files/web/generated/M18-GAP-00215-node-Geometry-GeometryNodeInputSceneTime.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00215", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00215", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00216", + "gapId": "node:Geometry:GeometryNodeInputShadeSmooth", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00216-node-Geometry-GeometryNodeInputShadeSmooth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00216.py -- tests/files/web/generated/M18-GAP-00216-node-Geometry-GeometryNodeInputShadeSmooth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00216", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00216", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00217", + "gapId": "node:Geometry:GeometryNodeInputShortestEdgePaths", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00217-node-Geometry-GeometryNodeInputShortestEdgePaths.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00217.py -- tests/files/web/generated/M18-GAP-00217-node-Geometry-GeometryNodeInputShortestEdgePaths.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00217", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00217", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00218", + "gapId": "node:Geometry:GeometryNodeInputSplineCyclic", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00218-node-Geometry-GeometryNodeInputSplineCyclic.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00218.py -- tests/files/web/generated/M18-GAP-00218-node-Geometry-GeometryNodeInputSplineCyclic.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00218", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00218", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00219", + "gapId": "node:Geometry:GeometryNodeInputSplineResolution", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00219-node-Geometry-GeometryNodeInputSplineResolution.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00219.py -- tests/files/web/generated/M18-GAP-00219-node-Geometry-GeometryNodeInputSplineResolution.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00219", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00219", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00220", + "gapId": "node:Geometry:GeometryNodeInputTangent", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00220-node-Geometry-GeometryNodeInputTangent.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00220.py -- tests/files/web/generated/M18-GAP-00220-node-Geometry-GeometryNodeInputTangent.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00220", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00220", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00221", + "gapId": "node:Geometry:GeometryNodeInputVoxelIndex", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00221-node-Geometry-GeometryNodeInputVoxelIndex.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00221.py -- tests/files/web/generated/M18-GAP-00221-node-Geometry-GeometryNodeInputVoxelIndex.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00221", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00221", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00222", + "gapId": "node:Geometry:GeometryNodeInstanceOnPoints", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00222-node-Geometry-GeometryNodeInstanceOnPoints.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00222.py -- tests/files/web/generated/M18-GAP-00222-node-Geometry-GeometryNodeInstanceOnPoints.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00222", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00222", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00223", + "gapId": "node:Geometry:GeometryNodeInstanceTransform", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00223-node-Geometry-GeometryNodeInstanceTransform.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00223.py -- tests/files/web/generated/M18-GAP-00223-node-Geometry-GeometryNodeInstanceTransform.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00223", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00223", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00224", + "gapId": "node:Geometry:GeometryNodeInstancesToPoints", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00224-node-Geometry-GeometryNodeInstancesToPoints.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00224.py -- tests/files/web/generated/M18-GAP-00224-node-Geometry-GeometryNodeInstancesToPoints.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00224", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00224", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00225", + "gapId": "node:Geometry:GeometryNodeInterpolateCurves", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00225-node-Geometry-GeometryNodeInterpolateCurves.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00225.py -- tests/files/web/generated/M18-GAP-00225-node-Geometry-GeometryNodeInterpolateCurves.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00225", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00225", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00226", + "gapId": "node:Geometry:GeometryNodeIsViewport", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00226-node-Geometry-GeometryNodeIsViewport.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00226.py -- tests/files/web/generated/M18-GAP-00226-node-Geometry-GeometryNodeIsViewport.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00226", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00226", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00227", + "gapId": "node:Geometry:GeometryNodeJoinGeometry", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00227-node-Geometry-GeometryNodeJoinGeometry.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00227.py -- tests/files/web/generated/M18-GAP-00227-node-Geometry-GeometryNodeJoinGeometry.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00227", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00227", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00228", + "gapId": "node:Geometry:GeometryNodeListGetItem", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00228-node-Geometry-GeometryNodeListGetItem.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00228.py -- tests/files/web/generated/M18-GAP-00228-node-Geometry-GeometryNodeListGetItem.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00228", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00228", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00229", + "gapId": "node:Geometry:GeometryNodeListLength", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00229-node-Geometry-GeometryNodeListLength.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00229.py -- tests/files/web/generated/M18-GAP-00229-node-Geometry-GeometryNodeListLength.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00229", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00229", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00230", + "gapId": "node:Geometry:GeometryNodeMaterialSelection", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00230-node-Geometry-GeometryNodeMaterialSelection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00230.py -- tests/files/web/generated/M18-GAP-00230-node-Geometry-GeometryNodeMaterialSelection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00230", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00230", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00231", + "gapId": "node:Geometry:GeometryNodeMenuSwitch", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00231-node-Geometry-GeometryNodeMenuSwitch.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00231.py -- tests/files/web/generated/M18-GAP-00231-node-Geometry-GeometryNodeMenuSwitch.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00231", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00231", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00232", + "gapId": "node:Geometry:GeometryNodeMergeByDistance", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00232-node-Geometry-GeometryNodeMergeByDistance.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00232.py -- tests/files/web/generated/M18-GAP-00232-node-Geometry-GeometryNodeMergeByDistance.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00232", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00232", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00233", + "gapId": "node:Geometry:GeometryNodeMergeLayers", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00233-node-Geometry-GeometryNodeMergeLayers.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00233.py -- tests/files/web/generated/M18-GAP-00233-node-Geometry-GeometryNodeMergeLayers.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00233", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00233", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00234", + "gapId": "node:Geometry:GeometryNodeMergePoints", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00234-node-Geometry-GeometryNodeMergePoints.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00234.py -- tests/files/web/generated/M18-GAP-00234-node-Geometry-GeometryNodeMergePoints.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00234", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00234", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00235", + "gapId": "node:Geometry:GeometryNodeMeshBevel", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00235-node-Geometry-GeometryNodeMeshBevel.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00235.py -- tests/files/web/generated/M18-GAP-00235-node-Geometry-GeometryNodeMeshBevel.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00235", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00235", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00236", + "gapId": "node:Geometry:GeometryNodeMeshBoolean", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00236-node-Geometry-GeometryNodeMeshBoolean.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00236.py -- tests/files/web/generated/M18-GAP-00236-node-Geometry-GeometryNodeMeshBoolean.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00236", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00236", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00237", + "gapId": "node:Geometry:GeometryNodeMeshCircle", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00237-node-Geometry-GeometryNodeMeshCircle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00237.py -- tests/files/web/generated/M18-GAP-00237-node-Geometry-GeometryNodeMeshCircle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00237", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00237", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00238", + "gapId": "node:Geometry:GeometryNodeMeshCone", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00238-node-Geometry-GeometryNodeMeshCone.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00238.py -- tests/files/web/generated/M18-GAP-00238-node-Geometry-GeometryNodeMeshCone.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00238", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00238", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00239", + "gapId": "node:Geometry:GeometryNodeMeshCube", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00239-node-Geometry-GeometryNodeMeshCube.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00239.py -- tests/files/web/generated/M18-GAP-00239-node-Geometry-GeometryNodeMeshCube.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00239", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00239", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00240", + "gapId": "node:Geometry:GeometryNodeMeshCylinder", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00240-node-Geometry-GeometryNodeMeshCylinder.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00240.py -- tests/files/web/generated/M18-GAP-00240-node-Geometry-GeometryNodeMeshCylinder.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00240", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00240", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00241", + "gapId": "node:Geometry:GeometryNodeMeshFaceSetBoundaries", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00241-node-Geometry-GeometryNodeMeshFaceSetBoundaries.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00241.py -- tests/files/web/generated/M18-GAP-00241-node-Geometry-GeometryNodeMeshFaceSetBoundaries.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00241", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00241", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00242", + "gapId": "node:Geometry:GeometryNodeMeshGrid", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00242-node-Geometry-GeometryNodeMeshGrid.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00242.py -- tests/files/web/generated/M18-GAP-00242-node-Geometry-GeometryNodeMeshGrid.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00242", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00242", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00243", + "gapId": "node:Geometry:GeometryNodeMeshIcoSphere", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00243-node-Geometry-GeometryNodeMeshIcoSphere.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00243.py -- tests/files/web/generated/M18-GAP-00243-node-Geometry-GeometryNodeMeshIcoSphere.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00243", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00243", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00244", + "gapId": "node:Geometry:GeometryNodeMeshLine", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00244-node-Geometry-GeometryNodeMeshLine.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00244.py -- tests/files/web/generated/M18-GAP-00244-node-Geometry-GeometryNodeMeshLine.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00244", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00244", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00245", + "gapId": "node:Geometry:GeometryNodeMeshToCurve", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00245-node-Geometry-GeometryNodeMeshToCurve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00245.py -- tests/files/web/generated/M18-GAP-00245-node-Geometry-GeometryNodeMeshToCurve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00245", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00245", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00246", + "gapId": "node:Geometry:GeometryNodeMeshToDensityGrid", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00246-node-Geometry-GeometryNodeMeshToDensityGrid.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00246.py -- tests/files/web/generated/M18-GAP-00246-node-Geometry-GeometryNodeMeshToDensityGrid.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00246", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00246", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00247", + "gapId": "node:Geometry:GeometryNodeMeshToPoints", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00247-node-Geometry-GeometryNodeMeshToPoints.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00247.py -- tests/files/web/generated/M18-GAP-00247-node-Geometry-GeometryNodeMeshToPoints.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00247", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00247", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00248", + "gapId": "node:Geometry:GeometryNodeMeshToSDFGrid", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00248-node-Geometry-GeometryNodeMeshToSDFGrid.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00248.py -- tests/files/web/generated/M18-GAP-00248-node-Geometry-GeometryNodeMeshToSDFGrid.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00248", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00248", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00249", + "gapId": "node:Geometry:GeometryNodeMeshToVolume", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00249-node-Geometry-GeometryNodeMeshToVolume.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00249.py -- tests/files/web/generated/M18-GAP-00249-node-Geometry-GeometryNodeMeshToVolume.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00249", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00249", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00250", + "gapId": "node:Geometry:GeometryNodeMeshUVSphere", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00250-node-Geometry-GeometryNodeMeshUVSphere.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00250.py -- tests/files/web/generated/M18-GAP-00250-node-Geometry-GeometryNodeMeshUVSphere.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00250", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00250", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00251", + "gapId": "node:Geometry:GeometryNodeObjectInfo", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00251-node-Geometry-GeometryNodeObjectInfo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00251.py -- tests/files/web/generated/M18-GAP-00251-node-Geometry-GeometryNodeObjectInfo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00251", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00251", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00252", + "gapId": "node:Geometry:GeometryNodeOffsetCornerInFace", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00252-node-Geometry-GeometryNodeOffsetCornerInFace.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00252.py -- tests/files/web/generated/M18-GAP-00252-node-Geometry-GeometryNodeOffsetCornerInFace.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00252", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00252", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00253", + "gapId": "node:Geometry:GeometryNodeOffsetPointInCurve", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00253-node-Geometry-GeometryNodeOffsetPointInCurve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00253.py -- tests/files/web/generated/M18-GAP-00253-node-Geometry-GeometryNodeOffsetPointInCurve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00253", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00253", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00254", + "gapId": "node:Geometry:GeometryNodePoints", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00254-node-Geometry-GeometryNodePoints.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00254.py -- tests/files/web/generated/M18-GAP-00254-node-Geometry-GeometryNodePoints.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00254", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00254", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00255", + "gapId": "node:Geometry:GeometryNodePointsOfCurve", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00255-node-Geometry-GeometryNodePointsOfCurve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00255.py -- tests/files/web/generated/M18-GAP-00255-node-Geometry-GeometryNodePointsOfCurve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00255", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00255", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00256", + "gapId": "node:Geometry:GeometryNodePointsToCurves", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00256-node-Geometry-GeometryNodePointsToCurves.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00256.py -- tests/files/web/generated/M18-GAP-00256-node-Geometry-GeometryNodePointsToCurves.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00256", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00256", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00257", + "gapId": "node:Geometry:GeometryNodePointsToSDFGrid", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00257-node-Geometry-GeometryNodePointsToSDFGrid.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00257.py -- tests/files/web/generated/M18-GAP-00257-node-Geometry-GeometryNodePointsToSDFGrid.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00257", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00257", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00258", + "gapId": "node:Geometry:GeometryNodePointsToVertices", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00258-node-Geometry-GeometryNodePointsToVertices.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00258.py -- tests/files/web/generated/M18-GAP-00258-node-Geometry-GeometryNodePointsToVertices.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00258", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00258", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00259", + "gapId": "node:Geometry:GeometryNodePointsToVolume", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00259-node-Geometry-GeometryNodePointsToVolume.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00259.py -- tests/files/web/generated/M18-GAP-00259-node-Geometry-GeometryNodePointsToVolume.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00259", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00259", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00260", + "gapId": "node:Geometry:GeometryNodeProximity", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00260-node-Geometry-GeometryNodeProximity.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00260.py -- tests/files/web/generated/M18-GAP-00260-node-Geometry-GeometryNodeProximity.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00260", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00260", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00261", + "gapId": "node:Geometry:GeometryNodeRaycast", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00261-node-Geometry-GeometryNodeRaycast.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00261.py -- tests/files/web/generated/M18-GAP-00261-node-Geometry-GeometryNodeRaycast.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00261", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00261", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00262", + "gapId": "node:Geometry:GeometryNodeRealizeInstances", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00262-node-Geometry-GeometryNodeRealizeInstances.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00262.py -- tests/files/web/generated/M18-GAP-00262-node-Geometry-GeometryNodeRealizeInstances.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00262", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00262", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00263", + "gapId": "node:Geometry:GeometryNodeRemoveAttribute", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00263-node-Geometry-GeometryNodeRemoveAttribute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00263.py -- tests/files/web/generated/M18-GAP-00263-node-Geometry-GeometryNodeRemoveAttribute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00263", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00263", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00264", + "gapId": "node:Geometry:GeometryNodeRenameAttribute", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00264-node-Geometry-GeometryNodeRenameAttribute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00264.py -- tests/files/web/generated/M18-GAP-00264-node-Geometry-GeometryNodeRenameAttribute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00264", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00264", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00265", + "gapId": "node:Geometry:GeometryNodeRepeatInput", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00265-node-Geometry-GeometryNodeRepeatInput.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00265.py -- tests/files/web/generated/M18-GAP-00265-node-Geometry-GeometryNodeRepeatInput.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00265", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00265", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00266", + "gapId": "node:Geometry:GeometryNodeRepeatOutput", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00266-node-Geometry-GeometryNodeRepeatOutput.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00266.py -- tests/files/web/generated/M18-GAP-00266-node-Geometry-GeometryNodeRepeatOutput.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00266", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00266", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00267", + "gapId": "node:Geometry:GeometryNodeReplaceMaterial", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00267-node-Geometry-GeometryNodeReplaceMaterial.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00267.py -- tests/files/web/generated/M18-GAP-00267-node-Geometry-GeometryNodeReplaceMaterial.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00267", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00267", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00268", + "gapId": "node:Geometry:GeometryNodeResampleCurve", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00268-node-Geometry-GeometryNodeResampleCurve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00268.py -- tests/files/web/generated/M18-GAP-00268-node-Geometry-GeometryNodeResampleCurve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00268", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00268", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00269", + "gapId": "node:Geometry:GeometryNodeReverseCurve", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00269-node-Geometry-GeometryNodeReverseCurve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00269.py -- tests/files/web/generated/M18-GAP-00269-node-Geometry-GeometryNodeReverseCurve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00269", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00269", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00270", + "gapId": "node:Geometry:GeometryNodeRotateInstances", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00270-node-Geometry-GeometryNodeRotateInstances.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00270.py -- tests/files/web/generated/M18-GAP-00270-node-Geometry-GeometryNodeRotateInstances.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00270", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00270", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00271", + "gapId": "node:Geometry:GeometryNodeSDFGridBoolean", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00271-node-Geometry-GeometryNodeSDFGridBoolean.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00271.py -- tests/files/web/generated/M18-GAP-00271-node-Geometry-GeometryNodeSDFGridBoolean.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00271", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00271", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00272", + "gapId": "node:Geometry:GeometryNodeSDFGridFillet", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00272-node-Geometry-GeometryNodeSDFGridFillet.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00272.py -- tests/files/web/generated/M18-GAP-00272-node-Geometry-GeometryNodeSDFGridFillet.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00272", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00272", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00273", + "gapId": "node:Geometry:GeometryNodeSDFGridLaplacian", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00273-node-Geometry-GeometryNodeSDFGridLaplacian.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00273.py -- tests/files/web/generated/M18-GAP-00273-node-Geometry-GeometryNodeSDFGridLaplacian.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00273", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00273", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00274", + "gapId": "node:Geometry:GeometryNodeSDFGridMean", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00274-node-Geometry-GeometryNodeSDFGridMean.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00274.py -- tests/files/web/generated/M18-GAP-00274-node-Geometry-GeometryNodeSDFGridMean.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00274", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00274", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00275", + "gapId": "node:Geometry:GeometryNodeSDFGridMeanCurvature", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00275-node-Geometry-GeometryNodeSDFGridMeanCurvature.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00275.py -- tests/files/web/generated/M18-GAP-00275-node-Geometry-GeometryNodeSDFGridMeanCurvature.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00275", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00275", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00276", + "gapId": "node:Geometry:GeometryNodeSDFGridMedian", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00276-node-Geometry-GeometryNodeSDFGridMedian.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00276.py -- tests/files/web/generated/M18-GAP-00276-node-Geometry-GeometryNodeSDFGridMedian.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00276", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00276", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00277", + "gapId": "node:Geometry:GeometryNodeSDFGridOffset", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00277-node-Geometry-GeometryNodeSDFGridOffset.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00277.py -- tests/files/web/generated/M18-GAP-00277-node-Geometry-GeometryNodeSDFGridOffset.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00277", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00277", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00278", + "gapId": "node:Geometry:GeometryNodeSampleCurve", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00278-node-Geometry-GeometryNodeSampleCurve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00278.py -- tests/files/web/generated/M18-GAP-00278-node-Geometry-GeometryNodeSampleCurve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00278", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00278", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00279", + "gapId": "node:Geometry:GeometryNodeSampleGrid", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00279-node-Geometry-GeometryNodeSampleGrid.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00279.py -- tests/files/web/generated/M18-GAP-00279-node-Geometry-GeometryNodeSampleGrid.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00279", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00279", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00280", + "gapId": "node:Geometry:GeometryNodeSampleGridIndex", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00280-node-Geometry-GeometryNodeSampleGridIndex.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00280.py -- tests/files/web/generated/M18-GAP-00280-node-Geometry-GeometryNodeSampleGridIndex.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00280", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00280", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00281", + "gapId": "node:Geometry:GeometryNodeSampleIndex", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00281-node-Geometry-GeometryNodeSampleIndex.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00281.py -- tests/files/web/generated/M18-GAP-00281-node-Geometry-GeometryNodeSampleIndex.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00281", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00281", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00282", + "gapId": "node:Geometry:GeometryNodeSampleNearest", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00282-node-Geometry-GeometryNodeSampleNearest.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00282.py -- tests/files/web/generated/M18-GAP-00282-node-Geometry-GeometryNodeSampleNearest.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00282", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00282", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00283", + "gapId": "node:Geometry:GeometryNodeSampleNearestSurface", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00283-node-Geometry-GeometryNodeSampleNearestSurface.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00283.py -- tests/files/web/generated/M18-GAP-00283-node-Geometry-GeometryNodeSampleNearestSurface.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00283", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00283", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00284", + "gapId": "node:Geometry:GeometryNodeSampleSoundFrequencies", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00284-node-Geometry-GeometryNodeSampleSoundFrequencies.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00284.py -- tests/files/web/generated/M18-GAP-00284-node-Geometry-GeometryNodeSampleSoundFrequencies.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00284", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00284", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00285", + "gapId": "node:Geometry:GeometryNodeSampleUVSurface", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00285-node-Geometry-GeometryNodeSampleUVSurface.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00285.py -- tests/files/web/generated/M18-GAP-00285-node-Geometry-GeometryNodeSampleUVSurface.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00285", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00285", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00286", + "gapId": "node:Geometry:GeometryNodeScaleElements", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00286-node-Geometry-GeometryNodeScaleElements.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00286.py -- tests/files/web/generated/M18-GAP-00286-node-Geometry-GeometryNodeScaleElements.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00286", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00286", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00287", + "gapId": "node:Geometry:GeometryNodeScaleInstances", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00287-node-Geometry-GeometryNodeScaleInstances.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00287.py -- tests/files/web/generated/M18-GAP-00287-node-Geometry-GeometryNodeScaleInstances.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00287", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00287", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00288", + "gapId": "node:Geometry:GeometryNodeSelfObject", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00288-node-Geometry-GeometryNodeSelfObject.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00288.py -- tests/files/web/generated/M18-GAP-00288-node-Geometry-GeometryNodeSelfObject.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00288", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00288", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00289", + "gapId": "node:Geometry:GeometryNodeSeparateComponents", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00289-node-Geometry-GeometryNodeSeparateComponents.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00289.py -- tests/files/web/generated/M18-GAP-00289-node-Geometry-GeometryNodeSeparateComponents.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00289", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00289", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00290", + "gapId": "node:Geometry:GeometryNodeSeparateGeometry", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00290-node-Geometry-GeometryNodeSeparateGeometry.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00290.py -- tests/files/web/generated/M18-GAP-00290-node-Geometry-GeometryNodeSeparateGeometry.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00290", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00290", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00291", + "gapId": "node:Geometry:GeometryNodeSetCurveHandlePositions", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00291-node-Geometry-GeometryNodeSetCurveHandlePositions.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00291.py -- tests/files/web/generated/M18-GAP-00291-node-Geometry-GeometryNodeSetCurveHandlePositions.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00291", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00291", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00292", + "gapId": "node:Geometry:GeometryNodeSetCurveNormal", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00292-node-Geometry-GeometryNodeSetCurveNormal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00292.py -- tests/files/web/generated/M18-GAP-00292-node-Geometry-GeometryNodeSetCurveNormal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00292", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00292", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00293", + "gapId": "node:Geometry:GeometryNodeSetCurveRadius", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00293-node-Geometry-GeometryNodeSetCurveRadius.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00293.py -- tests/files/web/generated/M18-GAP-00293-node-Geometry-GeometryNodeSetCurveRadius.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00293", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00293", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00294", + "gapId": "node:Geometry:GeometryNodeSetCurveTilt", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00294-node-Geometry-GeometryNodeSetCurveTilt.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00294.py -- tests/files/web/generated/M18-GAP-00294-node-Geometry-GeometryNodeSetCurveTilt.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00294", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00294", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00295", + "gapId": "node:Geometry:GeometryNodeSetGeometryBundle", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00295-node-Geometry-GeometryNodeSetGeometryBundle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00295.py -- tests/files/web/generated/M18-GAP-00295-node-Geometry-GeometryNodeSetGeometryBundle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00295", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00295", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00296", + "gapId": "node:Geometry:GeometryNodeSetGeometryName", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00296-node-Geometry-GeometryNodeSetGeometryName.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00296.py -- tests/files/web/generated/M18-GAP-00296-node-Geometry-GeometryNodeSetGeometryName.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00296", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00296", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00297", + "gapId": "node:Geometry:GeometryNodeSetGreasePencilColor", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00297-node-Geometry-GeometryNodeSetGreasePencilColor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00297.py -- tests/files/web/generated/M18-GAP-00297-node-Geometry-GeometryNodeSetGreasePencilColor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00297", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00297", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00298", + "gapId": "node:Geometry:GeometryNodeSetGreasePencilDepth", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00298-node-Geometry-GeometryNodeSetGreasePencilDepth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00298.py -- tests/files/web/generated/M18-GAP-00298-node-Geometry-GeometryNodeSetGreasePencilDepth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00298", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00298", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00299", + "gapId": "node:Geometry:GeometryNodeSetGreasePencilSoftness", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00299-node-Geometry-GeometryNodeSetGreasePencilSoftness.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00299.py -- tests/files/web/generated/M18-GAP-00299-node-Geometry-GeometryNodeSetGreasePencilSoftness.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00299", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00299", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00300", + "gapId": "node:Geometry:GeometryNodeSetGridBackground", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00300-node-Geometry-GeometryNodeSetGridBackground.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00300.py -- tests/files/web/generated/M18-GAP-00300-node-Geometry-GeometryNodeSetGridBackground.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00300", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00300", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00301", + "gapId": "node:Geometry:GeometryNodeSetGridTransform", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00301-node-Geometry-GeometryNodeSetGridTransform.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00301.py -- tests/files/web/generated/M18-GAP-00301-node-Geometry-GeometryNodeSetGridTransform.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00301", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00301", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00302", + "gapId": "node:Geometry:GeometryNodeSetID", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00302-node-Geometry-GeometryNodeSetID.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00302.py -- tests/files/web/generated/M18-GAP-00302-node-Geometry-GeometryNodeSetID.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00302", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00302", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00303", + "gapId": "node:Geometry:GeometryNodeSetInstanceTransform", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00303-node-Geometry-GeometryNodeSetInstanceTransform.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00303.py -- tests/files/web/generated/M18-GAP-00303-node-Geometry-GeometryNodeSetInstanceTransform.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00303", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00303", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00304", + "gapId": "node:Geometry:GeometryNodeSetMaterial", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00304-node-Geometry-GeometryNodeSetMaterial.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00304.py -- tests/files/web/generated/M18-GAP-00304-node-Geometry-GeometryNodeSetMaterial.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00304", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00304", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00305", + "gapId": "node:Geometry:GeometryNodeSetMaterialIndex", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00305-node-Geometry-GeometryNodeSetMaterialIndex.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00305.py -- tests/files/web/generated/M18-GAP-00305-node-Geometry-GeometryNodeSetMaterialIndex.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00305", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00305", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00306", + "gapId": "node:Geometry:GeometryNodeSetMeshNormal", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00306-node-Geometry-GeometryNodeSetMeshNormal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00306.py -- tests/files/web/generated/M18-GAP-00306-node-Geometry-GeometryNodeSetMeshNormal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00306", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00306", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00307", + "gapId": "node:Geometry:GeometryNodeSetNURBSOrder", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00307-node-Geometry-GeometryNodeSetNURBSOrder.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00307.py -- tests/files/web/generated/M18-GAP-00307-node-Geometry-GeometryNodeSetNURBSOrder.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00307", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00307", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00308", + "gapId": "node:Geometry:GeometryNodeSetNURBSWeight", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00308-node-Geometry-GeometryNodeSetNURBSWeight.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00308.py -- tests/files/web/generated/M18-GAP-00308-node-Geometry-GeometryNodeSetNURBSWeight.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00308", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00308", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00309", + "gapId": "node:Geometry:GeometryNodeSetPointRadius", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00309-node-Geometry-GeometryNodeSetPointRadius.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00309.py -- tests/files/web/generated/M18-GAP-00309-node-Geometry-GeometryNodeSetPointRadius.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00309", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00309", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00310", + "gapId": "node:Geometry:GeometryNodeSetPosition", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00310-node-Geometry-GeometryNodeSetPosition.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00310.py -- tests/files/web/generated/M18-GAP-00310-node-Geometry-GeometryNodeSetPosition.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00310", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00310", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00311", + "gapId": "node:Geometry:GeometryNodeSetShadeSmooth", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00311-node-Geometry-GeometryNodeSetShadeSmooth.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00311.py -- tests/files/web/generated/M18-GAP-00311-node-Geometry-GeometryNodeSetShadeSmooth.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00311", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00311", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00312", + "gapId": "node:Geometry:GeometryNodeSetSplineCyclic", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00312-node-Geometry-GeometryNodeSetSplineCyclic.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00312.py -- tests/files/web/generated/M18-GAP-00312-node-Geometry-GeometryNodeSetSplineCyclic.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00312", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00312", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00313", + "gapId": "node:Geometry:GeometryNodeSetSplineResolution", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00313-node-Geometry-GeometryNodeSetSplineResolution.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00313.py -- tests/files/web/generated/M18-GAP-00313-node-Geometry-GeometryNodeSetSplineResolution.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00313", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00313", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00314", + "gapId": "node:Geometry:GeometryNodeSimulationInput", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00314-node-Geometry-GeometryNodeSimulationInput.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00314.py -- tests/files/web/generated/M18-GAP-00314-node-Geometry-GeometryNodeSimulationInput.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00314", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00314", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00315", + "gapId": "node:Geometry:GeometryNodeSimulationOutput", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00315-node-Geometry-GeometryNodeSimulationOutput.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00315.py -- tests/files/web/generated/M18-GAP-00315-node-Geometry-GeometryNodeSimulationOutput.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00315", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00315", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00316", + "gapId": "node:Geometry:GeometryNodeSortElements", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00316-node-Geometry-GeometryNodeSortElements.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00316.py -- tests/files/web/generated/M18-GAP-00316-node-Geometry-GeometryNodeSortElements.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00316", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00316", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00317", + "gapId": "node:Geometry:GeometryNodeSortList", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00317-node-Geometry-GeometryNodeSortList.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00317.py -- tests/files/web/generated/M18-GAP-00317-node-Geometry-GeometryNodeSortList.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00317", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00317", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00318", + "gapId": "node:Geometry:GeometryNodeSplineLength", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00318-node-Geometry-GeometryNodeSplineLength.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00318.py -- tests/files/web/generated/M18-GAP-00318-node-Geometry-GeometryNodeSplineLength.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00318", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00318", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00319", + "gapId": "node:Geometry:GeometryNodeSplineParameter", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00319-node-Geometry-GeometryNodeSplineParameter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00319.py -- tests/files/web/generated/M18-GAP-00319-node-Geometry-GeometryNodeSplineParameter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00319", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00319", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00320", + "gapId": "node:Geometry:GeometryNodeSplitEdges", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00320-node-Geometry-GeometryNodeSplitEdges.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00320.py -- tests/files/web/generated/M18-GAP-00320-node-Geometry-GeometryNodeSplitEdges.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00320", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00320", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00321", + "gapId": "node:Geometry:GeometryNodeSplitToInstances", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00321-node-Geometry-GeometryNodeSplitToInstances.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00321.py -- tests/files/web/generated/M18-GAP-00321-node-Geometry-GeometryNodeSplitToInstances.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00321", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00321", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00322", + "gapId": "node:Geometry:GeometryNodeStoreNamedAttribute", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00322-node-Geometry-GeometryNodeStoreNamedAttribute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00322.py -- tests/files/web/generated/M18-GAP-00322-node-Geometry-GeometryNodeStoreNamedAttribute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00322", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00322", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00323", + "gapId": "node:Geometry:GeometryNodeStoreNamedGrid", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00323-node-Geometry-GeometryNodeStoreNamedGrid.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00323.py -- tests/files/web/generated/M18-GAP-00323-node-Geometry-GeometryNodeStoreNamedGrid.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00323", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00323", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00324", + "gapId": "node:Geometry:GeometryNodeStringJoin", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00324-node-Geometry-GeometryNodeStringJoin.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00324.py -- tests/files/web/generated/M18-GAP-00324-node-Geometry-GeometryNodeStringJoin.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00324", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00324", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00325", + "gapId": "node:Geometry:GeometryNodeStringToCurves", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00325-node-Geometry-GeometryNodeStringToCurves.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00325.py -- tests/files/web/generated/M18-GAP-00325-node-Geometry-GeometryNodeStringToCurves.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00325", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00325", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00326", + "gapId": "node:Geometry:GeometryNodeSubdivideCurve", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00326-node-Geometry-GeometryNodeSubdivideCurve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00326.py -- tests/files/web/generated/M18-GAP-00326-node-Geometry-GeometryNodeSubdivideCurve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00326", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00326", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00327", + "gapId": "node:Geometry:GeometryNodeSubdivideMesh", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00327-node-Geometry-GeometryNodeSubdivideMesh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00327.py -- tests/files/web/generated/M18-GAP-00327-node-Geometry-GeometryNodeSubdivideMesh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00327", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00327", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00328", + "gapId": "node:Geometry:GeometryNodeSubdivisionSurface", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00328-node-Geometry-GeometryNodeSubdivisionSurface.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00328.py -- tests/files/web/generated/M18-GAP-00328-node-Geometry-GeometryNodeSubdivisionSurface.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00328", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00328", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00329", + "gapId": "node:Geometry:GeometryNodeSwitch", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00329-node-Geometry-GeometryNodeSwitch.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00329.py -- tests/files/web/generated/M18-GAP-00329-node-Geometry-GeometryNodeSwitch.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00329", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00329", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00330", + "gapId": "node:Geometry:GeometryNodeTagFilter", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00330-node-Geometry-GeometryNodeTagFilter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00330.py -- tests/files/web/generated/M18-GAP-00330-node-Geometry-GeometryNodeTagFilter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00330", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00330", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00331", + "gapId": "node:Geometry:GeometryNodeTool3DCursor", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00331-node-Geometry-GeometryNodeTool3DCursor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00331.py -- tests/files/web/generated/M18-GAP-00331-node-Geometry-GeometryNodeTool3DCursor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00331", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00331", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00332", + "gapId": "node:Geometry:GeometryNodeToolActiveElement", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00332-node-Geometry-GeometryNodeToolActiveElement.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00332.py -- tests/files/web/generated/M18-GAP-00332-node-Geometry-GeometryNodeToolActiveElement.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00332", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00332", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00333", + "gapId": "node:Geometry:GeometryNodeToolFaceSet", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00333-node-Geometry-GeometryNodeToolFaceSet.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00333.py -- tests/files/web/generated/M18-GAP-00333-node-Geometry-GeometryNodeToolFaceSet.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00333", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00333", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00334", + "gapId": "node:Geometry:GeometryNodeToolMousePosition", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00334-node-Geometry-GeometryNodeToolMousePosition.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00334.py -- tests/files/web/generated/M18-GAP-00334-node-Geometry-GeometryNodeToolMousePosition.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00334", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00334", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00335", + "gapId": "node:Geometry:GeometryNodeToolSelection", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00335-node-Geometry-GeometryNodeToolSelection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00335.py -- tests/files/web/generated/M18-GAP-00335-node-Geometry-GeometryNodeToolSelection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00335", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00335", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00336", + "gapId": "node:Geometry:GeometryNodeToolSetFaceSet", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00336-node-Geometry-GeometryNodeToolSetFaceSet.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00336.py -- tests/files/web/generated/M18-GAP-00336-node-Geometry-GeometryNodeToolSetFaceSet.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00336", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00336", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00337", + "gapId": "node:Geometry:GeometryNodeToolSetSelection", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00337-node-Geometry-GeometryNodeToolSetSelection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00337.py -- tests/files/web/generated/M18-GAP-00337-node-Geometry-GeometryNodeToolSetSelection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00337", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00337", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00338", + "gapId": "node:Geometry:GeometryNodeTransferAttributes", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00338-node-Geometry-GeometryNodeTransferAttributes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00338.py -- tests/files/web/generated/M18-GAP-00338-node-Geometry-GeometryNodeTransferAttributes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00338", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00338", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00339", + "gapId": "node:Geometry:GeometryNodeTransform", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00339-node-Geometry-GeometryNodeTransform.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00339.py -- tests/files/web/generated/M18-GAP-00339-node-Geometry-GeometryNodeTransform.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00339", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00339", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00340", + "gapId": "node:Geometry:GeometryNodeTranslateInstances", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00340-node-Geometry-GeometryNodeTranslateInstances.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00340.py -- tests/files/web/generated/M18-GAP-00340-node-Geometry-GeometryNodeTranslateInstances.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00340", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00340", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00341", + "gapId": "node:Geometry:GeometryNodeTriangulate", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00341-node-Geometry-GeometryNodeTriangulate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00341.py -- tests/files/web/generated/M18-GAP-00341-node-Geometry-GeometryNodeTriangulate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00341", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00341", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00342", + "gapId": "node:Geometry:GeometryNodeTrimCurve", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00342-node-Geometry-GeometryNodeTrimCurve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00342.py -- tests/files/web/generated/M18-GAP-00342-node-Geometry-GeometryNodeTrimCurve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00342", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00342", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00343", + "gapId": "node:Geometry:GeometryNodeUVPackIslands", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00343-node-Geometry-GeometryNodeUVPackIslands.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00343.py -- tests/files/web/generated/M18-GAP-00343-node-Geometry-GeometryNodeUVPackIslands.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00343", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00343", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00344", + "gapId": "node:Geometry:GeometryNodeUVTangent", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00344-node-Geometry-GeometryNodeUVTangent.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00344.py -- tests/files/web/generated/M18-GAP-00344-node-Geometry-GeometryNodeUVTangent.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00344", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00344", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00345", + "gapId": "node:Geometry:GeometryNodeUVUnwrap", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00345-node-Geometry-GeometryNodeUVUnwrap.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00345.py -- tests/files/web/generated/M18-GAP-00345-node-Geometry-GeometryNodeUVUnwrap.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00345", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00345", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00346", + "gapId": "node:Geometry:GeometryNodeVertexOfCorner", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00346-node-Geometry-GeometryNodeVertexOfCorner.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00346.py -- tests/files/web/generated/M18-GAP-00346-node-Geometry-GeometryNodeVertexOfCorner.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00346", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00346", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00347", + "gapId": "node:Geometry:GeometryNodeViewer", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00347-node-Geometry-GeometryNodeViewer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00347.py -- tests/files/web/generated/M18-GAP-00347-node-Geometry-GeometryNodeViewer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00347", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00347", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00348", + "gapId": "node:Geometry:GeometryNodeViewportTransform", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00348-node-Geometry-GeometryNodeViewportTransform.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00348.py -- tests/files/web/generated/M18-GAP-00348-node-Geometry-GeometryNodeViewportTransform.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00348", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00348", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00349", + "gapId": "node:Geometry:GeometryNodeVolumeCube", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00349-node-Geometry-GeometryNodeVolumeCube.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00349.py -- tests/files/web/generated/M18-GAP-00349-node-Geometry-GeometryNodeVolumeCube.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00349", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00349", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00350", + "gapId": "node:Geometry:GeometryNodeVolumeToMesh", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00350-node-Geometry-GeometryNodeVolumeToMesh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00350.py -- tests/files/web/generated/M18-GAP-00350-node-Geometry-GeometryNodeVolumeToMesh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00350", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00350", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00351", + "gapId": "node:Geometry:GeometryNodeWarning", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00351-node-Geometry-GeometryNodeWarning.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00351.py -- tests/files/web/generated/M18-GAP-00351-node-Geometry-GeometryNodeWarning.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00351", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00351", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00352", + "gapId": "node:Geometry:GeometryNodeXPBDSolver", + "ownerFamily": "GEOMETRY_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00352-node-Geometry-GeometryNodeXPBDSolver.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00352.py -- tests/files/web/generated/M18-GAP-00352-node-Geometry-GeometryNodeXPBDSolver.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00352", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00352", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00353", + "gapId": "node:Shader:ShaderNodeAddShader", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00353-node-Shader-ShaderNodeAddShader.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00353.py -- tests/files/web/generated/M18-GAP-00353-node-Shader-ShaderNodeAddShader.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00353", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00353", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00354", + "gapId": "node:Shader:ShaderNodeAmbientOcclusion", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00354-node-Shader-ShaderNodeAmbientOcclusion.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00354.py -- tests/files/web/generated/M18-GAP-00354-node-Shader-ShaderNodeAmbientOcclusion.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00354", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00354", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00355", + "gapId": "node:Shader:ShaderNodeAttribute", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00355-node-Shader-ShaderNodeAttribute.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00355.py -- tests/files/web/generated/M18-GAP-00355-node-Shader-ShaderNodeAttribute.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00355", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00355", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00356", + "gapId": "node:Shader:ShaderNodeBackground", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00356-node-Shader-ShaderNodeBackground.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00356.py -- tests/files/web/generated/M18-GAP-00356-node-Shader-ShaderNodeBackground.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00356", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00356", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00357", + "gapId": "node:Shader:ShaderNodeBevel", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00357-node-Shader-ShaderNodeBevel.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00357.py -- tests/files/web/generated/M18-GAP-00357-node-Shader-ShaderNodeBevel.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00357", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00357", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00358", + "gapId": "node:Shader:ShaderNodeBlackbody", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00358-node-Shader-ShaderNodeBlackbody.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00358.py -- tests/files/web/generated/M18-GAP-00358-node-Shader-ShaderNodeBlackbody.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00358", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00358", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00359", + "gapId": "node:Shader:ShaderNodeBrightContrast", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00359-node-Shader-ShaderNodeBrightContrast.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00359.py -- tests/files/web/generated/M18-GAP-00359-node-Shader-ShaderNodeBrightContrast.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00359", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00359", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00360", + "gapId": "node:Shader:ShaderNodeBsdfAnisotropic", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00360-node-Shader-ShaderNodeBsdfAnisotropic.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00360.py -- tests/files/web/generated/M18-GAP-00360-node-Shader-ShaderNodeBsdfAnisotropic.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00360", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00360", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00361", + "gapId": "node:Shader:ShaderNodeBsdfDiffuse", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00361-node-Shader-ShaderNodeBsdfDiffuse.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00361.py -- tests/files/web/generated/M18-GAP-00361-node-Shader-ShaderNodeBsdfDiffuse.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00361", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00361", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00362", + "gapId": "node:Shader:ShaderNodeBsdfGlass", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00362-node-Shader-ShaderNodeBsdfGlass.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00362.py -- tests/files/web/generated/M18-GAP-00362-node-Shader-ShaderNodeBsdfGlass.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00362", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00362", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00363", + "gapId": "node:Shader:ShaderNodeBsdfHair", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00363-node-Shader-ShaderNodeBsdfHair.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00363.py -- tests/files/web/generated/M18-GAP-00363-node-Shader-ShaderNodeBsdfHair.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00363", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00363", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00364", + "gapId": "node:Shader:ShaderNodeBsdfHairPrincipled", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00364-node-Shader-ShaderNodeBsdfHairPrincipled.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00364.py -- tests/files/web/generated/M18-GAP-00364-node-Shader-ShaderNodeBsdfHairPrincipled.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00364", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00364", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00365", + "gapId": "node:Shader:ShaderNodeBsdfMetallic", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00365-node-Shader-ShaderNodeBsdfMetallic.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00365.py -- tests/files/web/generated/M18-GAP-00365-node-Shader-ShaderNodeBsdfMetallic.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00365", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00365", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00366", + "gapId": "node:Shader:ShaderNodeBsdfPrincipled", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00366-node-Shader-ShaderNodeBsdfPrincipled.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00366.py -- tests/files/web/generated/M18-GAP-00366-node-Shader-ShaderNodeBsdfPrincipled.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00366", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00366", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00367", + "gapId": "node:Shader:ShaderNodeBsdfRayPortal", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00367-node-Shader-ShaderNodeBsdfRayPortal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00367.py -- tests/files/web/generated/M18-GAP-00367-node-Shader-ShaderNodeBsdfRayPortal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00367", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00367", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00368", + "gapId": "node:Shader:ShaderNodeBsdfRefraction", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00368-node-Shader-ShaderNodeBsdfRefraction.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00368.py -- tests/files/web/generated/M18-GAP-00368-node-Shader-ShaderNodeBsdfRefraction.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00368", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00368", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00369", + "gapId": "node:Shader:ShaderNodeBsdfSheen", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00369-node-Shader-ShaderNodeBsdfSheen.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00369.py -- tests/files/web/generated/M18-GAP-00369-node-Shader-ShaderNodeBsdfSheen.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00369", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00369", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00370", + "gapId": "node:Shader:ShaderNodeBsdfToon", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00370-node-Shader-ShaderNodeBsdfToon.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00370.py -- tests/files/web/generated/M18-GAP-00370-node-Shader-ShaderNodeBsdfToon.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00370", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00370", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00371", + "gapId": "node:Shader:ShaderNodeBsdfTranslucent", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00371-node-Shader-ShaderNodeBsdfTranslucent.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00371.py -- tests/files/web/generated/M18-GAP-00371-node-Shader-ShaderNodeBsdfTranslucent.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00371", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00371", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00372", + "gapId": "node:Shader:ShaderNodeBsdfTransparent", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00372-node-Shader-ShaderNodeBsdfTransparent.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00372.py -- tests/files/web/generated/M18-GAP-00372-node-Shader-ShaderNodeBsdfTransparent.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00372", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00372", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00373", + "gapId": "node:Shader:ShaderNodeBump", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00373-node-Shader-ShaderNodeBump.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00373.py -- tests/files/web/generated/M18-GAP-00373-node-Shader-ShaderNodeBump.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00373", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00373", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00374", + "gapId": "node:Shader:ShaderNodeCameraData", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00374-node-Shader-ShaderNodeCameraData.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00374.py -- tests/files/web/generated/M18-GAP-00374-node-Shader-ShaderNodeCameraData.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00374", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00374", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00375", + "gapId": "node:Shader:ShaderNodeClamp", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00375-node-Shader-ShaderNodeClamp.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00375.py -- tests/files/web/generated/M18-GAP-00375-node-Shader-ShaderNodeClamp.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00375", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00375", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00376", + "gapId": "node:Shader:ShaderNodeCombineColor", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00376-node-Shader-ShaderNodeCombineColor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00376.py -- tests/files/web/generated/M18-GAP-00376-node-Shader-ShaderNodeCombineColor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00376", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00376", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00377", + "gapId": "node:Shader:ShaderNodeCombineXYZ", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00377-node-Shader-ShaderNodeCombineXYZ.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00377.py -- tests/files/web/generated/M18-GAP-00377-node-Shader-ShaderNodeCombineXYZ.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00377", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00377", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00378", + "gapId": "node:Shader:ShaderNodeDisplacement", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00378-node-Shader-ShaderNodeDisplacement.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00378.py -- tests/files/web/generated/M18-GAP-00378-node-Shader-ShaderNodeDisplacement.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00378", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00378", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00379", + "gapId": "node:Shader:ShaderNodeEeveeSpecular", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00379-node-Shader-ShaderNodeEeveeSpecular.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00379.py -- tests/files/web/generated/M18-GAP-00379-node-Shader-ShaderNodeEeveeSpecular.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00379", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00379", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00380", + "gapId": "node:Shader:ShaderNodeEmission", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00380-node-Shader-ShaderNodeEmission.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00380.py -- tests/files/web/generated/M18-GAP-00380-node-Shader-ShaderNodeEmission.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00380", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00380", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00381", + "gapId": "node:Shader:ShaderNodeFloatCurve", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00381-node-Shader-ShaderNodeFloatCurve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00381.py -- tests/files/web/generated/M18-GAP-00381-node-Shader-ShaderNodeFloatCurve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00381", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00381", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00382", + "gapId": "node:Shader:ShaderNodeFresnel", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00382-node-Shader-ShaderNodeFresnel.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00382.py -- tests/files/web/generated/M18-GAP-00382-node-Shader-ShaderNodeFresnel.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00382", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00382", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00383", + "gapId": "node:Shader:ShaderNodeGamma", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00383-node-Shader-ShaderNodeGamma.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00383.py -- tests/files/web/generated/M18-GAP-00383-node-Shader-ShaderNodeGamma.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00383", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00383", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00384", + "gapId": "node:Shader:ShaderNodeGroup", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00384-node-Shader-ShaderNodeGroup.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00384.py -- tests/files/web/generated/M18-GAP-00384-node-Shader-ShaderNodeGroup.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00384", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00384", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00385", + "gapId": "node:Shader:ShaderNodeHairInfo", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00385-node-Shader-ShaderNodeHairInfo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00385.py -- tests/files/web/generated/M18-GAP-00385-node-Shader-ShaderNodeHairInfo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00385", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00385", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00386", + "gapId": "node:Shader:ShaderNodeHoldout", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00386-node-Shader-ShaderNodeHoldout.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00386.py -- tests/files/web/generated/M18-GAP-00386-node-Shader-ShaderNodeHoldout.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00386", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00386", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00387", + "gapId": "node:Shader:ShaderNodeHueSaturation", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00387-node-Shader-ShaderNodeHueSaturation.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00387.py -- tests/files/web/generated/M18-GAP-00387-node-Shader-ShaderNodeHueSaturation.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00387", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00387", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00388", + "gapId": "node:Shader:ShaderNodeInvert", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00388-node-Shader-ShaderNodeInvert.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00388.py -- tests/files/web/generated/M18-GAP-00388-node-Shader-ShaderNodeInvert.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00388", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00388", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00389", + "gapId": "node:Shader:ShaderNodeLayerWeight", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00389-node-Shader-ShaderNodeLayerWeight.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00389.py -- tests/files/web/generated/M18-GAP-00389-node-Shader-ShaderNodeLayerWeight.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00389", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00389", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00390", + "gapId": "node:Shader:ShaderNodeLightFalloff", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00390-node-Shader-ShaderNodeLightFalloff.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00390.py -- tests/files/web/generated/M18-GAP-00390-node-Shader-ShaderNodeLightFalloff.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00390", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00390", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00391", + "gapId": "node:Shader:ShaderNodeLightPath", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00391-node-Shader-ShaderNodeLightPath.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00391.py -- tests/files/web/generated/M18-GAP-00391-node-Shader-ShaderNodeLightPath.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00391", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00391", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00392", + "gapId": "node:Shader:ShaderNodeMapRange", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00392-node-Shader-ShaderNodeMapRange.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00392.py -- tests/files/web/generated/M18-GAP-00392-node-Shader-ShaderNodeMapRange.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00392", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00392", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00393", + "gapId": "node:Shader:ShaderNodeMapping", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00393-node-Shader-ShaderNodeMapping.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00393.py -- tests/files/web/generated/M18-GAP-00393-node-Shader-ShaderNodeMapping.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00393", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00393", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00394", + "gapId": "node:Shader:ShaderNodeMath", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00394-node-Shader-ShaderNodeMath.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00394.py -- tests/files/web/generated/M18-GAP-00394-node-Shader-ShaderNodeMath.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00394", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00394", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00395", + "gapId": "node:Shader:ShaderNodeMix", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00395-node-Shader-ShaderNodeMix.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00395.py -- tests/files/web/generated/M18-GAP-00395-node-Shader-ShaderNodeMix.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00395", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00395", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00396", + "gapId": "node:Shader:ShaderNodeMixRGB", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00396-node-Shader-ShaderNodeMixRGB.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00396.py -- tests/files/web/generated/M18-GAP-00396-node-Shader-ShaderNodeMixRGB.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00396", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00396", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00397", + "gapId": "node:Shader:ShaderNodeMixShader", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00397-node-Shader-ShaderNodeMixShader.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00397.py -- tests/files/web/generated/M18-GAP-00397-node-Shader-ShaderNodeMixShader.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00397", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00397", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00398", + "gapId": "node:Shader:ShaderNodeNewGeometry", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00398-node-Shader-ShaderNodeNewGeometry.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00398.py -- tests/files/web/generated/M18-GAP-00398-node-Shader-ShaderNodeNewGeometry.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00398", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00398", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00399", + "gapId": "node:Shader:ShaderNodeNormal", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00399-node-Shader-ShaderNodeNormal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00399.py -- tests/files/web/generated/M18-GAP-00399-node-Shader-ShaderNodeNormal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00399", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00399", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00400", + "gapId": "node:Shader:ShaderNodeNormalMap", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00400-node-Shader-ShaderNodeNormalMap.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00400.py -- tests/files/web/generated/M18-GAP-00400-node-Shader-ShaderNodeNormalMap.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00400", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00400", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00401", + "gapId": "node:Shader:ShaderNodeObjectInfo", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00401-node-Shader-ShaderNodeObjectInfo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00401.py -- tests/files/web/generated/M18-GAP-00401-node-Shader-ShaderNodeObjectInfo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00401", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00401", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00402", + "gapId": "node:Shader:ShaderNodeOutputAOV", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00402-node-Shader-ShaderNodeOutputAOV.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00402.py -- tests/files/web/generated/M18-GAP-00402-node-Shader-ShaderNodeOutputAOV.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00402", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00402", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00403", + "gapId": "node:Shader:ShaderNodeOutputLight", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00403-node-Shader-ShaderNodeOutputLight.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00403.py -- tests/files/web/generated/M18-GAP-00403-node-Shader-ShaderNodeOutputLight.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00403", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00403", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00404", + "gapId": "node:Shader:ShaderNodeOutputLineStyle", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00404-node-Shader-ShaderNodeOutputLineStyle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00404.py -- tests/files/web/generated/M18-GAP-00404-node-Shader-ShaderNodeOutputLineStyle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00404", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00404", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00405", + "gapId": "node:Shader:ShaderNodeOutputMaterial", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00405-node-Shader-ShaderNodeOutputMaterial.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00405.py -- tests/files/web/generated/M18-GAP-00405-node-Shader-ShaderNodeOutputMaterial.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00405", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00405", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00406", + "gapId": "node:Shader:ShaderNodeOutputWorld", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00406-node-Shader-ShaderNodeOutputWorld.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00406.py -- tests/files/web/generated/M18-GAP-00406-node-Shader-ShaderNodeOutputWorld.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00406", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00406", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00407", + "gapId": "node:Shader:ShaderNodeParticleInfo", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00407-node-Shader-ShaderNodeParticleInfo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00407.py -- tests/files/web/generated/M18-GAP-00407-node-Shader-ShaderNodeParticleInfo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00407", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00407", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00408", + "gapId": "node:Shader:ShaderNodePointInfo", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00408-node-Shader-ShaderNodePointInfo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00408.py -- tests/files/web/generated/M18-GAP-00408-node-Shader-ShaderNodePointInfo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00408", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00408", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00409", + "gapId": "node:Shader:ShaderNodeRGB", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00409-node-Shader-ShaderNodeRGB.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00409.py -- tests/files/web/generated/M18-GAP-00409-node-Shader-ShaderNodeRGB.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00409", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00409", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00410", + "gapId": "node:Shader:ShaderNodeRGBCurve", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00410-node-Shader-ShaderNodeRGBCurve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00410.py -- tests/files/web/generated/M18-GAP-00410-node-Shader-ShaderNodeRGBCurve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00410", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00410", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00411", + "gapId": "node:Shader:ShaderNodeRGBToBW", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00411-node-Shader-ShaderNodeRGBToBW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00411.py -- tests/files/web/generated/M18-GAP-00411-node-Shader-ShaderNodeRGBToBW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00411", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00411", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00412", + "gapId": "node:Shader:ShaderNodeRadialTiling", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00412-node-Shader-ShaderNodeRadialTiling.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00412.py -- tests/files/web/generated/M18-GAP-00412-node-Shader-ShaderNodeRadialTiling.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00412", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00412", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00413", + "gapId": "node:Shader:ShaderNodeRaycast", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00413-node-Shader-ShaderNodeRaycast.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00413.py -- tests/files/web/generated/M18-GAP-00413-node-Shader-ShaderNodeRaycast.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00413", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00413", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00414", + "gapId": "node:Shader:ShaderNodeScript", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00414-node-Shader-ShaderNodeScript.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00414.py -- tests/files/web/generated/M18-GAP-00414-node-Shader-ShaderNodeScript.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00414", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00414", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00415", + "gapId": "node:Shader:ShaderNodeSeparateColor", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00415-node-Shader-ShaderNodeSeparateColor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00415.py -- tests/files/web/generated/M18-GAP-00415-node-Shader-ShaderNodeSeparateColor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00415", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00415", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00416", + "gapId": "node:Shader:ShaderNodeSeparateXYZ", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00416-node-Shader-ShaderNodeSeparateXYZ.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00416.py -- tests/files/web/generated/M18-GAP-00416-node-Shader-ShaderNodeSeparateXYZ.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00416", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00416", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00417", + "gapId": "node:Shader:ShaderNodeShaderToRGB", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00417-node-Shader-ShaderNodeShaderToRGB.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00417.py -- tests/files/web/generated/M18-GAP-00417-node-Shader-ShaderNodeShaderToRGB.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00417", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00417", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00418", + "gapId": "node:Shader:ShaderNodeSqueeze", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00418-node-Shader-ShaderNodeSqueeze.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00418.py -- tests/files/web/generated/M18-GAP-00418-node-Shader-ShaderNodeSqueeze.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00418", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00418", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00419", + "gapId": "node:Shader:ShaderNodeSubsurfaceScattering", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00419-node-Shader-ShaderNodeSubsurfaceScattering.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00419.py -- tests/files/web/generated/M18-GAP-00419-node-Shader-ShaderNodeSubsurfaceScattering.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00419", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00419", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00420", + "gapId": "node:Shader:ShaderNodeTangent", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00420-node-Shader-ShaderNodeTangent.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00420.py -- tests/files/web/generated/M18-GAP-00420-node-Shader-ShaderNodeTangent.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00420", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00420", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00421", + "gapId": "node:Shader:ShaderNodeTexBrick", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00421-node-Shader-ShaderNodeTexBrick.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00421.py -- tests/files/web/generated/M18-GAP-00421-node-Shader-ShaderNodeTexBrick.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00421", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00421", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00422", + "gapId": "node:Shader:ShaderNodeTexChecker", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00422-node-Shader-ShaderNodeTexChecker.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00422.py -- tests/files/web/generated/M18-GAP-00422-node-Shader-ShaderNodeTexChecker.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00422", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00422", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00423", + "gapId": "node:Shader:ShaderNodeTexCoord", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00423-node-Shader-ShaderNodeTexCoord.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00423.py -- tests/files/web/generated/M18-GAP-00423-node-Shader-ShaderNodeTexCoord.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00423", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00423", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00424", + "gapId": "node:Shader:ShaderNodeTexEnvironment", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00424-node-Shader-ShaderNodeTexEnvironment.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00424.py -- tests/files/web/generated/M18-GAP-00424-node-Shader-ShaderNodeTexEnvironment.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00424", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00424", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00425", + "gapId": "node:Shader:ShaderNodeTexGabor", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00425-node-Shader-ShaderNodeTexGabor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00425.py -- tests/files/web/generated/M18-GAP-00425-node-Shader-ShaderNodeTexGabor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00425", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00425", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00426", + "gapId": "node:Shader:ShaderNodeTexGradient", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00426-node-Shader-ShaderNodeTexGradient.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00426.py -- tests/files/web/generated/M18-GAP-00426-node-Shader-ShaderNodeTexGradient.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00426", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00426", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00427", + "gapId": "node:Shader:ShaderNodeTexIES", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00427-node-Shader-ShaderNodeTexIES.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00427.py -- tests/files/web/generated/M18-GAP-00427-node-Shader-ShaderNodeTexIES.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00427", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00427", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00428", + "gapId": "node:Shader:ShaderNodeTexImage", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00428-node-Shader-ShaderNodeTexImage.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00428.py -- tests/files/web/generated/M18-GAP-00428-node-Shader-ShaderNodeTexImage.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00428", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00428", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00429", + "gapId": "node:Shader:ShaderNodeTexMagic", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00429-node-Shader-ShaderNodeTexMagic.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00429.py -- tests/files/web/generated/M18-GAP-00429-node-Shader-ShaderNodeTexMagic.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00429", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00429", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00430", + "gapId": "node:Shader:ShaderNodeTexNoise", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00430-node-Shader-ShaderNodeTexNoise.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00430.py -- tests/files/web/generated/M18-GAP-00430-node-Shader-ShaderNodeTexNoise.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00430", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00430", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00431", + "gapId": "node:Shader:ShaderNodeTexSky", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00431-node-Shader-ShaderNodeTexSky.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00431.py -- tests/files/web/generated/M18-GAP-00431-node-Shader-ShaderNodeTexSky.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00431", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00431", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00432", + "gapId": "node:Shader:ShaderNodeTexVoronoi", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00432-node-Shader-ShaderNodeTexVoronoi.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00432.py -- tests/files/web/generated/M18-GAP-00432-node-Shader-ShaderNodeTexVoronoi.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00432", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00432", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00433", + "gapId": "node:Shader:ShaderNodeTexWave", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00433-node-Shader-ShaderNodeTexWave.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00433.py -- tests/files/web/generated/M18-GAP-00433-node-Shader-ShaderNodeTexWave.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00433", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00433", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00434", + "gapId": "node:Shader:ShaderNodeTexWhiteNoise", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00434-node-Shader-ShaderNodeTexWhiteNoise.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00434.py -- tests/files/web/generated/M18-GAP-00434-node-Shader-ShaderNodeTexWhiteNoise.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00434", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00434", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00435", + "gapId": "node:Shader:ShaderNodeUVAlongStroke", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00435-node-Shader-ShaderNodeUVAlongStroke.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00435.py -- tests/files/web/generated/M18-GAP-00435-node-Shader-ShaderNodeUVAlongStroke.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00435", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00435", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00436", + "gapId": "node:Shader:ShaderNodeUVMap", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00436-node-Shader-ShaderNodeUVMap.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00436.py -- tests/files/web/generated/M18-GAP-00436-node-Shader-ShaderNodeUVMap.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00436", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00436", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00437", + "gapId": "node:Shader:ShaderNodeValToRGB", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00437-node-Shader-ShaderNodeValToRGB.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00437.py -- tests/files/web/generated/M18-GAP-00437-node-Shader-ShaderNodeValToRGB.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00437", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00437", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00438", + "gapId": "node:Shader:ShaderNodeValue", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00438-node-Shader-ShaderNodeValue.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00438.py -- tests/files/web/generated/M18-GAP-00438-node-Shader-ShaderNodeValue.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00438", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00438", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00439", + "gapId": "node:Shader:ShaderNodeVectorCurve", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00439-node-Shader-ShaderNodeVectorCurve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00439.py -- tests/files/web/generated/M18-GAP-00439-node-Shader-ShaderNodeVectorCurve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00439", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00439", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00440", + "gapId": "node:Shader:ShaderNodeVectorDisplacement", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00440-node-Shader-ShaderNodeVectorDisplacement.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00440.py -- tests/files/web/generated/M18-GAP-00440-node-Shader-ShaderNodeVectorDisplacement.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00440", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00440", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00441", + "gapId": "node:Shader:ShaderNodeVectorMath", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00441-node-Shader-ShaderNodeVectorMath.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00441.py -- tests/files/web/generated/M18-GAP-00441-node-Shader-ShaderNodeVectorMath.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00441", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00441", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00442", + "gapId": "node:Shader:ShaderNodeVectorRotate", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00442-node-Shader-ShaderNodeVectorRotate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00442.py -- tests/files/web/generated/M18-GAP-00442-node-Shader-ShaderNodeVectorRotate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00442", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00442", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00443", + "gapId": "node:Shader:ShaderNodeVectorTransform", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00443-node-Shader-ShaderNodeVectorTransform.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00443.py -- tests/files/web/generated/M18-GAP-00443-node-Shader-ShaderNodeVectorTransform.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00443", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00443", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00444", + "gapId": "node:Shader:ShaderNodeVertexColor", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00444-node-Shader-ShaderNodeVertexColor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00444.py -- tests/files/web/generated/M18-GAP-00444-node-Shader-ShaderNodeVertexColor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00444", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00444", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00445", + "gapId": "node:Shader:ShaderNodeVolumeAbsorption", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00445-node-Shader-ShaderNodeVolumeAbsorption.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00445.py -- tests/files/web/generated/M18-GAP-00445-node-Shader-ShaderNodeVolumeAbsorption.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00445", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00445", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00446", + "gapId": "node:Shader:ShaderNodeVolumeCoefficients", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00446-node-Shader-ShaderNodeVolumeCoefficients.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00446.py -- tests/files/web/generated/M18-GAP-00446-node-Shader-ShaderNodeVolumeCoefficients.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00446", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00446", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00447", + "gapId": "node:Shader:ShaderNodeVolumeInfo", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00447-node-Shader-ShaderNodeVolumeInfo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00447.py -- tests/files/web/generated/M18-GAP-00447-node-Shader-ShaderNodeVolumeInfo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00447", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00447", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00448", + "gapId": "node:Shader:ShaderNodeVolumePrincipled", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00448-node-Shader-ShaderNodeVolumePrincipled.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00448.py -- tests/files/web/generated/M18-GAP-00448-node-Shader-ShaderNodeVolumePrincipled.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00448", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00448", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00449", + "gapId": "node:Shader:ShaderNodeVolumeScatter", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00449-node-Shader-ShaderNodeVolumeScatter.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00449.py -- tests/files/web/generated/M18-GAP-00449-node-Shader-ShaderNodeVolumeScatter.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00449", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00449", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00450", + "gapId": "node:Shader:ShaderNodeWavelength", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00450-node-Shader-ShaderNodeWavelength.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00450.py -- tests/files/web/generated/M18-GAP-00450-node-Shader-ShaderNodeWavelength.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00450", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00450", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M18-GAP-00451", + "gapId": "node:Shader:ShaderNodeWireframe", + "ownerFamily": "SHADER_NODE", + "sourceTask": "M15-01C", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M18-GAP-00451-node-Shader-ShaderNodeWireframe.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M18-GAP-00451.py -- tests/files/web/generated/M18-GAP-00451-node-Shader-ShaderNodeWireframe.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M18-GAP-00451", + "comparator": "node tools/web/check-generated-gap.mjs --task M18-GAP-00451", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00001", + "gapId": "rna:Core:Action", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00001-rna-Core-Action.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00001.py -- tests/files/web/generated/M19-GAP-00001-rna-Core-Action.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00001", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00001", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00002", + "gapId": "rna:Core:Armature", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00002-rna-Core-Armature.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00002.py -- tests/files/web/generated/M19-GAP-00002-rna-Core-Armature.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00002", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00002", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00003", + "gapId": "rna:Core:Brush", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00003-rna-Core-Brush.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00003.py -- tests/files/web/generated/M19-GAP-00003-rna-Core-Brush.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00003", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00003", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00004", + "gapId": "rna:Core:Curve", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00004-rna-Core-Curve.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00004.py -- tests/files/web/generated/M19-GAP-00004-rna-Core-Curve.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00004", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00004", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00005", + "gapId": "rna:Core:Curves", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00005-rna-Core-Curves.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00005.py -- tests/files/web/generated/M19-GAP-00005-rna-Core-Curves.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00005", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00005", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00006", + "gapId": "rna:Core:GreasePencil", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00006-rna-Core-GreasePencil.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00006.py -- tests/files/web/generated/M19-GAP-00006-rna-Core-GreasePencil.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00006", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00006", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00007", + "gapId": "rna:Core:ID", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00007-rna-Core-ID.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00007.py -- tests/files/web/generated/M19-GAP-00007-rna-Core-ID.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00007", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00007", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00008", + "gapId": "rna:Core:Image", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00008-rna-Core-Image.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00008.py -- tests/files/web/generated/M19-GAP-00008-rna-Core-Image.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00008", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00008", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00009", + "gapId": "rna:Core:Key", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00009-rna-Core-Key.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00009.py -- tests/files/web/generated/M19-GAP-00009-rna-Core-Key.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00009", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00009", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00010", + "gapId": "rna:Core:Lattice", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00010-rna-Core-Lattice.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00010.py -- tests/files/web/generated/M19-GAP-00010-rna-Core-Lattice.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00010", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00010", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00011", + "gapId": "rna:Core:Mask", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00011-rna-Core-Mask.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00011.py -- tests/files/web/generated/M19-GAP-00011-rna-Core-Mask.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00011", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00011", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00012", + "gapId": "rna:Core:MetaBall", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00012-rna-Core-MetaBall.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00012.py -- tests/files/web/generated/M19-GAP-00012-rna-Core-MetaBall.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00012", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00012", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00013", + "gapId": "rna:Core:MovieClip", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00013-rna-Core-MovieClip.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00013.py -- tests/files/web/generated/M19-GAP-00013-rna-Core-MovieClip.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00013", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00013", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00014", + "gapId": "rna:Core:Palette", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00014-rna-Core-Palette.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00014.py -- tests/files/web/generated/M19-GAP-00014-rna-Core-Palette.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00014", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00014", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00015", + "gapId": "rna:Core:ParticleSettings", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00015-rna-Core-ParticleSettings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00015.py -- tests/files/web/generated/M19-GAP-00015-rna-Core-ParticleSettings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00015", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00015", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00016", + "gapId": "rna:Core:PointCloud", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00016-rna-Core-PointCloud.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00016.py -- tests/files/web/generated/M19-GAP-00016-rna-Core-PointCloud.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00016", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00016", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00017", + "gapId": "rna:Core:Sound", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00017-rna-Core-Sound.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00017.py -- tests/files/web/generated/M19-GAP-00017-rna-Core-Sound.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00017", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00017", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00018", + "gapId": "rna:Core:Speaker", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00018-rna-Core-Speaker.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00018.py -- tests/files/web/generated/M19-GAP-00018-rna-Core-Speaker.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00018", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00018", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00019", + "gapId": "rna:Core:Text", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00019-rna-Core-Text.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00019.py -- tests/files/web/generated/M19-GAP-00019-rna-Core-Text.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00019", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00019", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M19-GAP-00020", + "gapId": "rna:Core:Volume", + "ownerFamily": "Core", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M19-GAP-00020-rna-Core-Volume.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M19-GAP-00020.py -- tests/files/web/generated/M19-GAP-00020-rna-Core-Volume.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M19-GAP-00020", + "comparator": "node tools/web/check-generated-gap.mjs --task M19-GAP-00020", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00001", + "gapId": "physics:BakeSettings", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00001-physics-BakeSettings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00001.py -- tests/files/web/generated/M20-GAP-00001-physics-BakeSettings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00001", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00001", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00002", + "gapId": "physics:BlendDataParticles", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00002-physics-BlendDataParticles.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00002.py -- tests/files/web/generated/M20-GAP-00002-physics-BlendDataParticles.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00002", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00002", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00003", + "gapId": "physics:BoidRule", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00003-physics-BoidRule.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00003.py -- tests/files/web/generated/M20-GAP-00003-physics-BoidRule.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00003", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00003", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00004", + "gapId": "physics:BoidRuleAverageSpeed", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00004-physics-BoidRuleAverageSpeed.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00004.py -- tests/files/web/generated/M20-GAP-00004-physics-BoidRuleAverageSpeed.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00004", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00004", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00005", + "gapId": "physics:BoidRuleAvoid", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00005-physics-BoidRuleAvoid.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00005.py -- tests/files/web/generated/M20-GAP-00005-physics-BoidRuleAvoid.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00005", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00005", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00006", + "gapId": "physics:BoidRuleAvoidCollision", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00006-physics-BoidRuleAvoidCollision.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00006.py -- tests/files/web/generated/M20-GAP-00006-physics-BoidRuleAvoidCollision.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00006", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00006", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00007", + "gapId": "physics:BoidRuleFight", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00007-physics-BoidRuleFight.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00007.py -- tests/files/web/generated/M20-GAP-00007-physics-BoidRuleFight.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00007", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00007", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00008", + "gapId": "physics:BoidRuleFollowLeader", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00008-physics-BoidRuleFollowLeader.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00008.py -- tests/files/web/generated/M20-GAP-00008-physics-BoidRuleFollowLeader.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00008", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00008", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00009", + "gapId": "physics:BoidRuleGoal", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00009-physics-BoidRuleGoal.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00009.py -- tests/files/web/generated/M20-GAP-00009-physics-BoidRuleGoal.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00009", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00009", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00010", + "gapId": "physics:BoidSettings", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00010-physics-BoidSettings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00010.py -- tests/files/web/generated/M20-GAP-00010-physics-BoidSettings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00010", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00010", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00011", + "gapId": "physics:BoidState", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00011-physics-BoidState.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00011.py -- tests/files/web/generated/M20-GAP-00011-physics-BoidState.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00011", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00011", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00012", + "gapId": "physics:ChildParticle", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00012-physics-ChildParticle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00012.py -- tests/files/web/generated/M20-GAP-00012-physics-ChildParticle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00012", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00012", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00013", + "gapId": "physics:ClothCollisionSettings", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00013-physics-ClothCollisionSettings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00013.py -- tests/files/web/generated/M20-GAP-00013-physics-ClothCollisionSettings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00013", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00013", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00014", + "gapId": "physics:ClothModifier", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00014-physics-ClothModifier.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00014.py -- tests/files/web/generated/M20-GAP-00014-physics-ClothModifier.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00014", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00014", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00015", + "gapId": "physics:ClothSettings", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00015-physics-ClothSettings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00015.py -- tests/files/web/generated/M20-GAP-00015-physics-ClothSettings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00015", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00015", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00016", + "gapId": "physics:ClothSolverResult", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00016-physics-ClothSolverResult.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00016.py -- tests/files/web/generated/M20-GAP-00016-physics-ClothSolverResult.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00016", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00016", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00017", + "gapId": "physics:CollisionModifier", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00017-physics-CollisionModifier.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00017.py -- tests/files/web/generated/M20-GAP-00017-physics-CollisionModifier.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00017", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00017", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00018", + "gapId": "physics:CollisionSettings", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00018-physics-CollisionSettings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00018.py -- tests/files/web/generated/M20-GAP-00018-physics-CollisionSettings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00018", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00018", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00019", + "gapId": "physics:DynamicPaintBrushSettings", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00019-physics-DynamicPaintBrushSettings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00019.py -- tests/files/web/generated/M20-GAP-00019-physics-DynamicPaintBrushSettings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00019", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00019", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00020", + "gapId": "physics:DynamicPaintCanvasSettings", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00020-physics-DynamicPaintCanvasSettings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00020.py -- tests/files/web/generated/M20-GAP-00020-physics-DynamicPaintCanvasSettings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00020", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00020", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00021", + "gapId": "physics:DynamicPaintModifier", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00021-physics-DynamicPaintModifier.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00021.py -- tests/files/web/generated/M20-GAP-00021-physics-DynamicPaintModifier.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00021", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00021", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00022", + "gapId": "physics:DynamicPaintSurface", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00022-physics-DynamicPaintSurface.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00022.py -- tests/files/web/generated/M20-GAP-00022-physics-DynamicPaintSurface.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00022", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00022", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00023", + "gapId": "physics:DynamicPaintSurfaces", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00023-physics-DynamicPaintSurfaces.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00023.py -- tests/files/web/generated/M20-GAP-00023-physics-DynamicPaintSurfaces.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00023", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00023", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00024", + "gapId": "physics:EffectorWeights", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00024-physics-EffectorWeights.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00024.py -- tests/files/web/generated/M20-GAP-00024-physics-EffectorWeights.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00024", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00024", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00025", + "gapId": "physics:FieldSettings", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00025-physics-FieldSettings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00025.py -- tests/files/web/generated/M20-GAP-00025-physics-FieldSettings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00025", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00025", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00026", + "gapId": "physics:FluidDomainSettings", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00026-physics-FluidDomainSettings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00026.py -- tests/files/web/generated/M20-GAP-00026-physics-FluidDomainSettings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00026", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00026", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00027", + "gapId": "physics:FluidEffectorSettings", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00027-physics-FluidEffectorSettings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00027.py -- tests/files/web/generated/M20-GAP-00027-physics-FluidEffectorSettings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00027", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00027", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00028", + "gapId": "physics:FluidFlowSettings", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00028-physics-FluidFlowSettings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00028.py -- tests/files/web/generated/M20-GAP-00028-physics-FluidFlowSettings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00028", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00028", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00029", + "gapId": "physics:FluidModifier", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00029-physics-FluidModifier.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00029.py -- tests/files/web/generated/M20-GAP-00029-physics-FluidModifier.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00029", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00029", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00030", + "gapId": "physics:GeometryNodeAccumulateField", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00030-physics-GeometryNodeAccumulateField.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00030.py -- tests/files/web/generated/M20-GAP-00030-physics-GeometryNodeAccumulateField.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00030", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00030", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00031", + "gapId": "physics:GeometryNodeFieldAtIndex", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00031-physics-GeometryNodeFieldAtIndex.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00031.py -- tests/files/web/generated/M20-GAP-00031-physics-GeometryNodeFieldAtIndex.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00031", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00031", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00032", + "gapId": "physics:GeometryNodeFieldAverage", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00032-physics-GeometryNodeFieldAverage.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00032.py -- tests/files/web/generated/M20-GAP-00032-physics-GeometryNodeFieldAverage.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00032", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00032", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00033", + "gapId": "physics:GeometryNodeFieldMinAndMax", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00033-physics-GeometryNodeFieldMinAndMax.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00033.py -- tests/files/web/generated/M20-GAP-00033-physics-GeometryNodeFieldMinAndMax.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00033", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00033", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00034", + "gapId": "physics:GeometryNodeFieldOnDomain", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00034-physics-GeometryNodeFieldOnDomain.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00034.py -- tests/files/web/generated/M20-GAP-00034-physics-GeometryNodeFieldOnDomain.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00034", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00034", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00035", + "gapId": "physics:GeometryNodeFieldToGrid", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00035-physics-GeometryNodeFieldToGrid.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00035.py -- tests/files/web/generated/M20-GAP-00035-physics-GeometryNodeFieldToGrid.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00035", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00035", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00036", + "gapId": "physics:GeometryNodeFieldToGridItem", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00036-physics-GeometryNodeFieldToGridItem.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00036.py -- tests/files/web/generated/M20-GAP-00036-physics-GeometryNodeFieldToGridItem.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00036", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00036", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00037", + "gapId": "physics:GeometryNodeFieldToGridItems", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00037-physics-GeometryNodeFieldToGridItems.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00037.py -- tests/files/web/generated/M20-GAP-00037-physics-GeometryNodeFieldToGridItems.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00037", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00037", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00038", + "gapId": "physics:GeometryNodeFieldToList", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00038-physics-GeometryNodeFieldToList.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00038.py -- tests/files/web/generated/M20-GAP-00038-physics-GeometryNodeFieldToList.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00038", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00038", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00039", + "gapId": "physics:GeometryNodeFieldToListItem", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00039-physics-GeometryNodeFieldToListItem.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00039.py -- tests/files/web/generated/M20-GAP-00039-physics-GeometryNodeFieldToListItem.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00039", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00039", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00040", + "gapId": "physics:GeometryNodeFieldToListItems", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00040-physics-GeometryNodeFieldToListItems.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00040.py -- tests/files/web/generated/M20-GAP-00040-physics-GeometryNodeFieldToListItems.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00040", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00040", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00041", + "gapId": "physics:GeometryNodeFieldVariance", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00041-physics-GeometryNodeFieldVariance.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00041.py -- tests/files/web/generated/M20-GAP-00041-physics-GeometryNodeFieldVariance.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00041", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00041", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00042", + "gapId": "physics:Particle", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00042-physics-Particle.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00042.py -- tests/files/web/generated/M20-GAP-00042-physics-Particle.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00042", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00042", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00043", + "gapId": "physics:ParticleBrush", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00043-physics-ParticleBrush.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00043.py -- tests/files/web/generated/M20-GAP-00043-physics-ParticleBrush.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00043", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00043", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00044", + "gapId": "physics:ParticleDupliWeight", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00044-physics-ParticleDupliWeight.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00044.py -- tests/files/web/generated/M20-GAP-00044-physics-ParticleDupliWeight.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00044", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00044", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00045", + "gapId": "physics:ParticleEdit", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00045-physics-ParticleEdit.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00045.py -- tests/files/web/generated/M20-GAP-00045-physics-ParticleEdit.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00045", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00045", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00046", + "gapId": "physics:ParticleHairKey", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00046-physics-ParticleHairKey.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00046.py -- tests/files/web/generated/M20-GAP-00046-physics-ParticleHairKey.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00046", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00046", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00047", + "gapId": "physics:ParticleInstanceModifier", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00047-physics-ParticleInstanceModifier.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00047.py -- tests/files/web/generated/M20-GAP-00047-physics-ParticleInstanceModifier.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00047", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00047", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00048", + "gapId": "physics:ParticleKey", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00048-physics-ParticleKey.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00048.py -- tests/files/web/generated/M20-GAP-00048-physics-ParticleKey.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00048", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00048", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00049", + "gapId": "physics:ParticleSettings", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00049-physics-ParticleSettings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00049.py -- tests/files/web/generated/M20-GAP-00049-physics-ParticleSettings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00049", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00049", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00050", + "gapId": "physics:ParticleSettingsTextureSlot", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00050-physics-ParticleSettingsTextureSlot.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00050.py -- tests/files/web/generated/M20-GAP-00050-physics-ParticleSettingsTextureSlot.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00050", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00050", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00051", + "gapId": "physics:ParticleSettingsTextureSlots", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00051-physics-ParticleSettingsTextureSlots.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00051.py -- tests/files/web/generated/M20-GAP-00051-physics-ParticleSettingsTextureSlots.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00051", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00051", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00052", + "gapId": "physics:ParticleSystem", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00052-physics-ParticleSystem.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00052.py -- tests/files/web/generated/M20-GAP-00052-physics-ParticleSystem.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00052", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00052", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00053", + "gapId": "physics:ParticleSystemModifier", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00053-physics-ParticleSystemModifier.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00053.py -- tests/files/web/generated/M20-GAP-00053-physics-ParticleSystemModifier.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00053", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00053", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00054", + "gapId": "physics:ParticleSystems", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00054-physics-ParticleSystems.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00054.py -- tests/files/web/generated/M20-GAP-00054-physics-ParticleSystems.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00054", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00054", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00055", + "gapId": "physics:ParticleTarget", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00055-physics-ParticleTarget.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00055.py -- tests/files/web/generated/M20-GAP-00055-physics-ParticleTarget.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00055", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00055", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00056", + "gapId": "physics:PointCache", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00056-physics-PointCache.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00056.py -- tests/files/web/generated/M20-GAP-00056-physics-PointCache.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00056", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00056", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00057", + "gapId": "physics:PointCacheItem", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00057-physics-PointCacheItem.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00057.py -- tests/files/web/generated/M20-GAP-00057-physics-PointCacheItem.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00057", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00057", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00058", + "gapId": "physics:PointCaches", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00058-physics-PointCaches.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00058.py -- tests/files/web/generated/M20-GAP-00058-physics-PointCaches.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00058", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00058", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00059", + "gapId": "physics:RigidBodyConstraint", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00059-physics-RigidBodyConstraint.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00059.py -- tests/files/web/generated/M20-GAP-00059-physics-RigidBodyConstraint.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00059", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00059", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00060", + "gapId": "physics:RigidBodyObject", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00060-physics-RigidBodyObject.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00060.py -- tests/files/web/generated/M20-GAP-00060-physics-RigidBodyObject.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00060", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00060", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00061", + "gapId": "physics:RigidBodyWorld", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00061-physics-RigidBodyWorld.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00061.py -- tests/files/web/generated/M20-GAP-00061-physics-RigidBodyWorld.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00061", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00061", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00062", + "gapId": "physics:SPHFluidSettings", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00062-physics-SPHFluidSettings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00062.py -- tests/files/web/generated/M20-GAP-00062-physics-SPHFluidSettings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00062", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00062", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00063", + "gapId": "physics:ShaderNodeParticleInfo", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00063-physics-ShaderNodeParticleInfo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00063.py -- tests/files/web/generated/M20-GAP-00063-physics-ShaderNodeParticleInfo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00063", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00063", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00064", + "gapId": "physics:SoftBodyModifier", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00064-physics-SoftBodyModifier.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00064.py -- tests/files/web/generated/M20-GAP-00064-physics-SoftBodyModifier.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00064", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00064", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00065", + "gapId": "physics:SoftBodySettings", + "ownerFamily": "PHYSICS", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00065-physics-SoftBodySettings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00065.py -- tests/files/web/generated/M20-GAP-00065-physics-SoftBodySettings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00065", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00065", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00066", + "gapId": "strip:ADD", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00066-strip-ADD.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00066.py -- tests/files/web/generated/M20-GAP-00066-strip-ADD.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00066", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00066", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00067", + "gapId": "strip:ADJUSTMENT", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00067-strip-ADJUSTMENT.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00067.py -- tests/files/web/generated/M20-GAP-00067-strip-ADJUSTMENT.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00067", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00067", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00068", + "gapId": "strip:ALPHA_OVER", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00068-strip-ALPHA_OVER.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00068.py -- tests/files/web/generated/M20-GAP-00068-strip-ALPHA_OVER.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00068", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00068", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00069", + "gapId": "strip:ALPHA_UNDER", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00069-strip-ALPHA_UNDER.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00069.py -- tests/files/web/generated/M20-GAP-00069-strip-ALPHA_UNDER.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00069", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00069", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00070", + "gapId": "strip:COLOR", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00070-strip-COLOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00070.py -- tests/files/web/generated/M20-GAP-00070-strip-COLOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00070", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00070", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00071", + "gapId": "strip:COLORMIX", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00071-strip-COLORMIX.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00071.py -- tests/files/web/generated/M20-GAP-00071-strip-COLORMIX.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00071", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00071", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00072", + "gapId": "strip:COMPOSITOR", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00072-strip-COMPOSITOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00072.py -- tests/files/web/generated/M20-GAP-00072-strip-COMPOSITOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00072", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00072", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00073", + "gapId": "strip:CROSS", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00073-strip-CROSS.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00073.py -- tests/files/web/generated/M20-GAP-00073-strip-CROSS.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00073", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00073", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00074", + "gapId": "strip:GAMMA_CROSS", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00074-strip-GAMMA_CROSS.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00074.py -- tests/files/web/generated/M20-GAP-00074-strip-GAMMA_CROSS.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00074", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00074", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00075", + "gapId": "strip:GAUSSIAN_BLUR", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00075-strip-GAUSSIAN_BLUR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00075.py -- tests/files/web/generated/M20-GAP-00075-strip-GAUSSIAN_BLUR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00075", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00075", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00076", + "gapId": "strip:GLOW", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00076-strip-GLOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00076.py -- tests/files/web/generated/M20-GAP-00076-strip-GLOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00076", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00076", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00077", + "gapId": "strip:IMAGE", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00077-strip-IMAGE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00077.py -- tests/files/web/generated/M20-GAP-00077-strip-IMAGE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00077", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00077", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00078", + "gapId": "strip:MASK", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00078-strip-MASK.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00078.py -- tests/files/web/generated/M20-GAP-00078-strip-MASK.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00078", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00078", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00079", + "gapId": "strip:META", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00079-strip-META.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00079.py -- tests/files/web/generated/M20-GAP-00079-strip-META.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00079", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00079", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00080", + "gapId": "strip:MOVIE", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00080-strip-MOVIE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00080.py -- tests/files/web/generated/M20-GAP-00080-strip-MOVIE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00080", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00080", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00081", + "gapId": "strip:MOVIECLIP", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00081-strip-MOVIECLIP.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00081.py -- tests/files/web/generated/M20-GAP-00081-strip-MOVIECLIP.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00081", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00081", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00082", + "gapId": "strip:MULTICAM", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00082-strip-MULTICAM.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00082.py -- tests/files/web/generated/M20-GAP-00082-strip-MULTICAM.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00082", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00082", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00083", + "gapId": "strip:MULTIPLY", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00083-strip-MULTIPLY.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00083.py -- tests/files/web/generated/M20-GAP-00083-strip-MULTIPLY.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00083", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00083", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00084", + "gapId": "strip:SCENE", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00084-strip-SCENE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00084.py -- tests/files/web/generated/M20-GAP-00084-strip-SCENE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00084", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00084", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00085", + "gapId": "strip:SOUND", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00085-strip-SOUND.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00085.py -- tests/files/web/generated/M20-GAP-00085-strip-SOUND.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00085", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00085", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00086", + "gapId": "strip:SPEED", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00086-strip-SPEED.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00086.py -- tests/files/web/generated/M20-GAP-00086-strip-SPEED.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00086", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00086", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00087", + "gapId": "strip:SUBTRACT", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00087-strip-SUBTRACT.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00087.py -- tests/files/web/generated/M20-GAP-00087-strip-SUBTRACT.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00087", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00087", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00088", + "gapId": "strip:TEXT", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00088-strip-TEXT.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00088.py -- tests/files/web/generated/M20-GAP-00088-strip-TEXT.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00088", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00088", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M20-GAP-00089", + "gapId": "strip:WIPE", + "ownerFamily": "SEQUENCER", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M20-GAP-00089-strip-WIPE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M20-GAP-00089.py -- tests/files/web/generated/M20-GAP-00089-strip-WIPE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M20-GAP-00089", + "comparator": "node tools/web/check-generated-gap.mjs --task M20-GAP-00089", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00001", + "gapId": "area:CLIP_EDITOR", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00001-area-CLIP_EDITOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00001.py -- tests/files/web/generated/M21-GAP-00001-area-CLIP_EDITOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00001", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00001", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00002", + "gapId": "area:CONSOLE", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00002-area-CONSOLE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00002.py -- tests/files/web/generated/M21-GAP-00002-area-CONSOLE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00002", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00002", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00003", + "gapId": "area:DOPESHEET_EDITOR", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00003-area-DOPESHEET_EDITOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00003.py -- tests/files/web/generated/M21-GAP-00003-area-DOPESHEET_EDITOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00003", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00003", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00004", + "gapId": "area:EMPTY", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00004-area-EMPTY.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00004.py -- tests/files/web/generated/M21-GAP-00004-area-EMPTY.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00004", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00004", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00005", + "gapId": "area:FILE_BROWSER", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00005-area-FILE_BROWSER.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00005.py -- tests/files/web/generated/M21-GAP-00005-area-FILE_BROWSER.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00005", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00005", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00006", + "gapId": "area:GRAPH_EDITOR", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00006-area-GRAPH_EDITOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00006.py -- tests/files/web/generated/M21-GAP-00006-area-GRAPH_EDITOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00006", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00006", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00007", + "gapId": "area:IMAGE_EDITOR", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00007-area-IMAGE_EDITOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00007.py -- tests/files/web/generated/M21-GAP-00007-area-IMAGE_EDITOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00007", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00007", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00008", + "gapId": "area:INFO", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00008-area-INFO.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00008.py -- tests/files/web/generated/M21-GAP-00008-area-INFO.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00008", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00008", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00009", + "gapId": "area:NLA_EDITOR", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00009-area-NLA_EDITOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00009.py -- tests/files/web/generated/M21-GAP-00009-area-NLA_EDITOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00009", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00009", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00010", + "gapId": "area:NODE_EDITOR", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00010-area-NODE_EDITOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00010.py -- tests/files/web/generated/M21-GAP-00010-area-NODE_EDITOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00010", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00010", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00011", + "gapId": "area:OUTLINER", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00011-area-OUTLINER.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00011.py -- tests/files/web/generated/M21-GAP-00011-area-OUTLINER.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00011", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00011", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00012", + "gapId": "area:PREFERENCES", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00012-area-PREFERENCES.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00012.py -- tests/files/web/generated/M21-GAP-00012-area-PREFERENCES.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00012", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00012", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00013", + "gapId": "area:PROPERTIES", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00013-area-PROPERTIES.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00013.py -- tests/files/web/generated/M21-GAP-00013-area-PROPERTIES.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00013", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00013", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00014", + "gapId": "area:SEQUENCE_EDITOR", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00014-area-SEQUENCE_EDITOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00014.py -- tests/files/web/generated/M21-GAP-00014-area-SEQUENCE_EDITOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00014", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00014", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00015", + "gapId": "area:SPREADSHEET", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00015-area-SPREADSHEET.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00015.py -- tests/files/web/generated/M21-GAP-00015-area-SPREADSHEET.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00015", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00015", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00016", + "gapId": "area:STATUSBAR", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00016-area-STATUSBAR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00016.py -- tests/files/web/generated/M21-GAP-00016-area-STATUSBAR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00016", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00016", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00017", + "gapId": "area:TEXT_EDITOR", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00017-area-TEXT_EDITOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00017.py -- tests/files/web/generated/M21-GAP-00017-area-TEXT_EDITOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00017", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00017", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00018", + "gapId": "area:TOPBAR", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00018-area-TOPBAR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00018.py -- tests/files/web/generated/M21-GAP-00018-area-TOPBAR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00018", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00018", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00019", + "gapId": "area:VIEW_3D", + "ownerFamily": "EDITOR", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00019-area-VIEW_3D.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00019.py -- tests/files/web/generated/M21-GAP-00019-area-VIEW_3D.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00019", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00019", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00020", + "gapId": "io:anim.keying_set_export", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00020-io-anim.keying_set_export.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00020.py -- tests/files/web/generated/M21-GAP-00020-io-anim.keying_set_export.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00020", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00020", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00021", + "gapId": "io:collection.export_all", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00021-io-collection.export_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00021.py -- tests/files/web/generated/M21-GAP-00021-io-collection.export_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00021", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00021", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00022", + "gapId": "io:collection.exporter_add", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00022-io-collection.exporter_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00022.py -- tests/files/web/generated/M21-GAP-00022-io-collection.exporter_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00022", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00022", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00023", + "gapId": "io:collection.exporter_export", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00023-io-collection.exporter_export.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00023.py -- tests/files/web/generated/M21-GAP-00023-io-collection.exporter_export.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00023", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00023", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00024", + "gapId": "io:collection.exporter_move", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00024-io-collection.exporter_move.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00024.py -- tests/files/web/generated/M21-GAP-00024-io-collection.exporter_move.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00024", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00024", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00025", + "gapId": "io:collection.exporter_remove", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00025-io-collection.exporter_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00025.py -- tests/files/web/generated/M21-GAP-00025-io-collection.exporter_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00025", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00025", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00026", + "gapId": "io:collection.importer_add", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00026-io-collection.importer_add.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00026.py -- tests/files/web/generated/M21-GAP-00026-io-collection.importer_add.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00026", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00026", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00027", + "gapId": "io:collection.importer_remove", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00027-io-collection.importer_remove.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00027.py -- tests/files/web/generated/M21-GAP-00027-io-collection.importer_remove.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00027", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00027", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00028", + "gapId": "io:export_anim.bvh", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00028-io-export_anim.bvh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00028.py -- tests/files/web/generated/M21-GAP-00028-io-export_anim.bvh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00028", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00028", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00029", + "gapId": "io:export_scene.fbx", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00029-io-export_scene.fbx.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00029.py -- tests/files/web/generated/M21-GAP-00029-io-export_scene.fbx.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00029", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00029", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00030", + "gapId": "io:export_scene.gltf", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00030-io-export_scene.gltf.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00030.py -- tests/files/web/generated/M21-GAP-00030-io-export_scene.gltf.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00030", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00030", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00031", + "gapId": "io:image.import_as_mesh_planes", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00031-io-image.import_as_mesh_planes.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00031.py -- tests/files/web/generated/M21-GAP-00031-io-image.import_as_mesh_planes.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00031", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00031", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00032", + "gapId": "io:import_anim.bvh", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00032-io-import_anim.bvh.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00032.py -- tests/files/web/generated/M21-GAP-00032-io-import_anim.bvh.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00032", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00032", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00033", + "gapId": "io:import_curve.svg", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00033-io-import_curve.svg.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00033.py -- tests/files/web/generated/M21-GAP-00033-io-import_curve.svg.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00033", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00033", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00034", + "gapId": "io:import_scene.fbx", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00034-io-import_scene.fbx.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00034.py -- tests/files/web/generated/M21-GAP-00034-io-import_scene.fbx.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00034", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00034", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00035", + "gapId": "io:import_scene.gltf", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00035-io-import_scene.gltf.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00035.py -- tests/files/web/generated/M21-GAP-00035-io-import_scene.gltf.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00035", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00035", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00036", + "gapId": "io:node.add_import_node", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00036-io-node.add_import_node.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00036.py -- tests/files/web/generated/M21-GAP-00036-io-node.add_import_node.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00036", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00036", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00037", + "gapId": "io:object.volume_import", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00037-io-object.volume_import.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00037.py -- tests/files/web/generated/M21-GAP-00037-io-object.volume_import.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00037", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00037", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00038", + "gapId": "io:preferences.keyconfig_export", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00038-io-preferences.keyconfig_export.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00038.py -- tests/files/web/generated/M21-GAP-00038-io-preferences.keyconfig_export.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00038", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00038", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00039", + "gapId": "io:preferences.keyconfig_import", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00039-io-preferences.keyconfig_import.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00039.py -- tests/files/web/generated/M21-GAP-00039-io-preferences.keyconfig_import.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00039", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00039", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00040", + "gapId": "io:sequencer.export_subtitles", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00040-io-sequencer.export_subtitles.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00040.py -- tests/files/web/generated/M21-GAP-00040-io-sequencer.export_subtitles.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00040", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00040", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00041", + "gapId": "io:uv.export_layout", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00041-io-uv.export_layout.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00041.py -- tests/files/web/generated/M21-GAP-00041-io-uv.export_layout.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00041", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00041", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00042", + "gapId": "io:wm.collection_export_all", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00042-io-wm.collection_export_all.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00042.py -- tests/files/web/generated/M21-GAP-00042-io-wm.collection_export_all.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00042", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00042", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00043", + "gapId": "io:wm.drop_import_file", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00043-io-wm.drop_import_file.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00043.py -- tests/files/web/generated/M21-GAP-00043-io-wm.drop_import_file.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00043", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00043", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00044", + "gapId": "io:wm.fbx_import", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00044-io-wm.fbx_import.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00044.py -- tests/files/web/generated/M21-GAP-00044-io-wm.fbx_import.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00044", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00044", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00045", + "gapId": "io:wm.grease_pencil_export_svg", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00045-io-wm.grease_pencil_export_svg.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00045.py -- tests/files/web/generated/M21-GAP-00045-io-wm.grease_pencil_export_svg.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00045", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00045", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00046", + "gapId": "io:wm.grease_pencil_import_svg", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00046-io-wm.grease_pencil_import_svg.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00046.py -- tests/files/web/generated/M21-GAP-00046-io-wm.grease_pencil_import_svg.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00046", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00046", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00047", + "gapId": "io:wm.obj_export", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00047-io-wm.obj_export.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00047.py -- tests/files/web/generated/M21-GAP-00047-io-wm.obj_export.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00047", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00047", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00048", + "gapId": "io:wm.obj_import", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00048-io-wm.obj_import.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00048.py -- tests/files/web/generated/M21-GAP-00048-io-wm.obj_import.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00048", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00048", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00049", + "gapId": "io:wm.ply_export", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00049-io-wm.ply_export.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00049.py -- tests/files/web/generated/M21-GAP-00049-io-wm.ply_export.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00049", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00049", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00050", + "gapId": "io:wm.ply_import", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00050-io-wm.ply_import.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00050.py -- tests/files/web/generated/M21-GAP-00050-io-wm.ply_import.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00050", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00050", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00051", + "gapId": "io:wm.stl_export", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00051-io-wm.stl_export.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00051.py -- tests/files/web/generated/M21-GAP-00051-io-wm.stl_export.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00051", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00051", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00052", + "gapId": "io:wm.stl_import", + "ownerFamily": "IMPORT_EXPORT", + "sourceTask": "M15-01D", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00052-io-wm.stl_import.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00052.py -- tests/files/web/generated/M21-GAP-00052-io-wm.stl_import.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00052", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00052", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00053", + "gapId": "keymap-item:3D View Generic:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00053-keymap-item-3D-View-Generic-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00053.py -- tests/files/web/generated/M21-GAP-00053-keymap-item-3D-View-Generic-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00053", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00053", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00054", + "gapId": "keymap-item:3D View Generic:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00054-keymap-item-3D-View-Generic-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00054.py -- tests/files/web/generated/M21-GAP-00054-keymap-item-3D-View-Generic-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00054", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00054", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00055", + "gapId": "keymap-item:3D View Tool: Bend:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00055-keymap-item-3D-View-Tool-Bend-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00055.py -- tests/files/web/generated/M21-GAP-00055-keymap-item-3D-View-Tool-Bend-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00055", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00055", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00056", + "gapId": "keymap-item:3D View Tool: Breakdowner:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00056-keymap-item-3D-View-Tool-Breakdowner-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00056.py -- tests/files/web/generated/M21-GAP-00056-keymap-item-3D-View-Tool-Breakdowner-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00056", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00056", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00057", + "gapId": "keymap-item:3D View Tool: Cursor:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00057-keymap-item-3D-View-Tool-Cursor-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00057.py -- tests/files/web/generated/M21-GAP-00057-keymap-item-3D-View-Tool-Cursor-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00057", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00057", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00058", + "gapId": "keymap-item:3D View Tool: Cursor:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00058-keymap-item-3D-View-Tool-Cursor-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00058.py -- tests/files/web/generated/M21-GAP-00058-keymap-item-3D-View-Tool-Cursor-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00058", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00058", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00059", + "gapId": "keymap-item:3D View Tool: Edit Armature, B-Bone Size:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00059-keymap-item-3D-View-Tool-Edit-Armature-B-Bone-Size-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00059.py -- tests/files/web/generated/M21-GAP-00059-keymap-item-3D-View-Tool-Edit-Armature-B-Bone-Size-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00059", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00059", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00060", + "gapId": "keymap-item:3D View Tool: Edit Armature, Bone Envelope:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00060-keymap-item-3D-View-Tool-Edit-Armature-Bone-Envelope-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00060.py -- tests/files/web/generated/M21-GAP-00060-keymap-item-3D-View-Tool-Edit-Armature-Bone-Envelope-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00060", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00060", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00061", + "gapId": "keymap-item:3D View Tool: Edit Armature, Extrude to Cursor:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00061-keymap-item-3D-View-Tool-Edit-Armature-Extrude-to-Cursor-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00061.py -- tests/files/web/generated/M21-GAP-00061-keymap-item-3D-View-Tool-Edit-Armature-Extrude-to-Cursor-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00061", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00061", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00062", + "gapId": "keymap-item:3D View Tool: Edit Armature, Extrude:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00062-keymap-item-3D-View-Tool-Edit-Armature-Extrude-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00062.py -- tests/files/web/generated/M21-GAP-00062-keymap-item-3D-View-Tool-Edit-Armature-Extrude-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00062", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00062", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00063", + "gapId": "keymap-item:3D View Tool: Edit Armature, Roll:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00063-keymap-item-3D-View-Tool-Edit-Armature-Roll-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00063.py -- tests/files/web/generated/M21-GAP-00063-keymap-item-3D-View-Tool-Edit-Armature-Roll-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00063", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00063", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00064", + "gapId": "keymap-item:3D View Tool: Edit Curve, Curve Pen:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00064-keymap-item-3D-View-Tool-Edit-Curve-Curve-Pen-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00064.py -- tests/files/web/generated/M21-GAP-00064-keymap-item-3D-View-Tool-Edit-Curve-Curve-Pen-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00064", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00064", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00065", + "gapId": "keymap-item:3D View Tool: Edit Curve, Curve Pen:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00065-keymap-item-3D-View-Tool-Edit-Curve-Curve-Pen-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00065.py -- tests/files/web/generated/M21-GAP-00065-keymap-item-3D-View-Tool-Edit-Curve-Curve-Pen-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00065", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00065", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00066", + "gapId": "keymap-item:3D View Tool: Edit Curve, Curve Pen:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00066-keymap-item-3D-View-Tool-Edit-Curve-Curve-Pen-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00066.py -- tests/files/web/generated/M21-GAP-00066-keymap-item-3D-View-Tool-Edit-Curve-Curve-Pen-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00066", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00066", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00067", + "gapId": "keymap-item:3D View Tool: Edit Curve, Draw:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00067-keymap-item-3D-View-Tool-Edit-Curve-Draw-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00067.py -- tests/files/web/generated/M21-GAP-00067-keymap-item-3D-View-Tool-Edit-Curve-Draw-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00067", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00067", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00068", + "gapId": "keymap-item:3D View Tool: Edit Curve, Extrude to Cursor:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00068-keymap-item-3D-View-Tool-Edit-Curve-Extrude-to-Cursor-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00068.py -- tests/files/web/generated/M21-GAP-00068-keymap-item-3D-View-Tool-Edit-Curve-Extrude-to-Cursor-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00068", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00068", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00069", + "gapId": "keymap-item:3D View Tool: Edit Curve, Extrude:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00069-keymap-item-3D-View-Tool-Edit-Curve-Extrude-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00069.py -- tests/files/web/generated/M21-GAP-00069-keymap-item-3D-View-Tool-Edit-Curve-Extrude-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00069", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00069", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00070", + "gapId": "keymap-item:3D View Tool: Edit Curve, Radius:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00070-keymap-item-3D-View-Tool-Edit-Curve-Radius-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00070.py -- tests/files/web/generated/M21-GAP-00070-keymap-item-3D-View-Tool-Edit-Curve-Radius-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00070", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00070", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00071", + "gapId": "keymap-item:3D View Tool: Edit Curve, Randomize:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00071-keymap-item-3D-View-Tool-Edit-Curve-Randomize-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00071.py -- tests/files/web/generated/M21-GAP-00071-keymap-item-3D-View-Tool-Edit-Curve-Randomize-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00071", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00071", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00072", + "gapId": "keymap-item:3D View Tool: Edit Curve, Tilt:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00072-keymap-item-3D-View-Tool-Edit-Curve-Tilt-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00072.py -- tests/files/web/generated/M21-GAP-00072-keymap-item-3D-View-Tool-Edit-Curve-Tilt-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00072", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00072", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00073", + "gapId": "keymap-item:3D View Tool: Edit Curves, Draw:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00073-keymap-item-3D-View-Tool-Edit-Curves-Draw-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00073.py -- tests/files/web/generated/M21-GAP-00073-keymap-item-3D-View-Tool-Edit-Curves-Draw-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00073", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00073", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00074", + "gapId": "keymap-item:3D View Tool: Edit Curves, Pen:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00074-keymap-item-3D-View-Tool-Edit-Curves-Pen-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00074.py -- tests/files/web/generated/M21-GAP-00074-keymap-item-3D-View-Tool-Edit-Curves-Pen-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00074", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00074", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00075", + "gapId": "keymap-item:3D View Tool: Edit Curves, Pen:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00075-keymap-item-3D-View-Tool-Edit-Curves-Pen-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00075.py -- tests/files/web/generated/M21-GAP-00075-keymap-item-3D-View-Tool-Edit-Curves-Pen-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00075", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00075", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00076", + "gapId": "keymap-item:3D View Tool: Edit Curves, Pen:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00076-keymap-item-3D-View-Tool-Edit-Curves-Pen-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00076.py -- tests/files/web/generated/M21-GAP-00076-keymap-item-3D-View-Tool-Edit-Curves-Pen-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00076", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00076", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00077", + "gapId": "keymap-item:3D View Tool: Edit Curves, Pen:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00077-keymap-item-3D-View-Tool-Edit-Curves-Pen-VIEW_3D-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00077.py -- tests/files/web/generated/M21-GAP-00077-keymap-item-3D-View-Tool-Edit-Curves-Pen-VIEW_3D-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00077", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00077", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00078", + "gapId": "keymap-item:3D View Tool: Edit Grease Pencil, Gradient:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00078-keymap-item-3D-View-Tool-Edit-Grease-Pencil-Gradient-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00078.py -- tests/files/web/generated/M21-GAP-00078-keymap-item-3D-View-Tool-Edit-Grease-Pencil-Gradient-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00078", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00078", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00079", + "gapId": "keymap-item:3D View Tool: Edit Grease Pencil, Interpolate:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00079-keymap-item-3D-View-Tool-Edit-Grease-Pencil-Interpolate-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00079.py -- tests/files/web/generated/M21-GAP-00079-keymap-item-3D-View-Tool-Edit-Grease-Pencil-Interpolate-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00079", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00079", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00080", + "gapId": "keymap-item:3D View Tool: Edit Grease Pencil, Pen:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00080-keymap-item-3D-View-Tool-Edit-Grease-Pencil-Pen-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00080.py -- tests/files/web/generated/M21-GAP-00080-keymap-item-3D-View-Tool-Edit-Grease-Pencil-Pen-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00080", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00080", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00081", + "gapId": "keymap-item:3D View Tool: Edit Grease Pencil, Pen:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00081-keymap-item-3D-View-Tool-Edit-Grease-Pencil-Pen-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00081.py -- tests/files/web/generated/M21-GAP-00081-keymap-item-3D-View-Tool-Edit-Grease-Pencil-Pen-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00081", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00081", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00082", + "gapId": "keymap-item:3D View Tool: Edit Grease Pencil, Pen:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00082-keymap-item-3D-View-Tool-Edit-Grease-Pencil-Pen-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00082.py -- tests/files/web/generated/M21-GAP-00082-keymap-item-3D-View-Tool-Edit-Grease-Pencil-Pen-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00082", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00082", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00083", + "gapId": "keymap-item:3D View Tool: Edit Grease Pencil, Pen:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00083-keymap-item-3D-View-Tool-Edit-Grease-Pencil-Pen-VIEW_3D-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00083.py -- tests/files/web/generated/M21-GAP-00083-keymap-item-3D-View-Tool-Edit-Grease-Pencil-Pen-VIEW_3D-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00083", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00083", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00084", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Bevel:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00084-keymap-item-3D-View-Tool-Edit-Mesh-Bevel-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00084.py -- tests/files/web/generated/M21-GAP-00084-keymap-item-3D-View-Tool-Edit-Mesh-Bevel-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00084", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00084", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00085", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Bisect:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00085-keymap-item-3D-View-Tool-Edit-Mesh-Bisect-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00085.py -- tests/files/web/generated/M21-GAP-00085-keymap-item-3D-View-Tool-Edit-Mesh-Bisect-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00085", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00085", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00086", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Edge Slide:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00086-keymap-item-3D-View-Tool-Edit-Mesh-Edge-Slide-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00086.py -- tests/files/web/generated/M21-GAP-00086-keymap-item-3D-View-Tool-Edit-Mesh-Edge-Slide-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00086", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00086", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00087", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Extrude Along Normals:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00087-keymap-item-3D-View-Tool-Edit-Mesh-Extrude-Along-Normals-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00087.py -- tests/files/web/generated/M21-GAP-00087-keymap-item-3D-View-Tool-Edit-Mesh-Extrude-Along-Normals-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00087", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00087", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00088", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Extrude Individual:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00088-keymap-item-3D-View-Tool-Edit-Mesh-Extrude-Individual-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00088.py -- tests/files/web/generated/M21-GAP-00088-keymap-item-3D-View-Tool-Edit-Mesh-Extrude-Individual-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00088", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00088", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00089", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Extrude Manifold:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00089-keymap-item-3D-View-Tool-Edit-Mesh-Extrude-Manifold-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00089.py -- tests/files/web/generated/M21-GAP-00089-keymap-item-3D-View-Tool-Edit-Mesh-Extrude-Manifold-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00089", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00089", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00090", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Extrude Region:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00090-keymap-item-3D-View-Tool-Edit-Mesh-Extrude-Region-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00090.py -- tests/files/web/generated/M21-GAP-00090-keymap-item-3D-View-Tool-Edit-Mesh-Extrude-Region-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00090", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00090", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00091", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Extrude to Cursor:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00091-keymap-item-3D-View-Tool-Edit-Mesh-Extrude-to-Cursor-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00091.py -- tests/files/web/generated/M21-GAP-00091-keymap-item-3D-View-Tool-Edit-Mesh-Extrude-to-Cursor-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00091", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00091", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00092", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Inset Faces:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00092-keymap-item-3D-View-Tool-Edit-Mesh-Inset-Faces-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00092.py -- tests/files/web/generated/M21-GAP-00092-keymap-item-3D-View-Tool-Edit-Mesh-Inset-Faces-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00092", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00092", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00093", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Knife:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00093-keymap-item-3D-View-Tool-Edit-Mesh-Knife-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00093.py -- tests/files/web/generated/M21-GAP-00093-keymap-item-3D-View-Tool-Edit-Mesh-Knife-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00093", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00093", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00094", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Loop Cut:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00094-keymap-item-3D-View-Tool-Edit-Mesh-Loop-Cut-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00094.py -- tests/files/web/generated/M21-GAP-00094-keymap-item-3D-View-Tool-Edit-Mesh-Loop-Cut-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00094", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00094", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00095", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Offset Edge Loop Cut:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00095-keymap-item-3D-View-Tool-Edit-Mesh-Offset-Edge-Loop-Cut-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00095.py -- tests/files/web/generated/M21-GAP-00095-keymap-item-3D-View-Tool-Edit-Mesh-Offset-Edge-Loop-Cut-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00095", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00095", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00096", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Poly Build:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00096-keymap-item-3D-View-Tool-Edit-Mesh-Poly-Build-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00096.py -- tests/files/web/generated/M21-GAP-00096-keymap-item-3D-View-Tool-Edit-Mesh-Poly-Build-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00096", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00096", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00097", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Poly Build:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00097-keymap-item-3D-View-Tool-Edit-Mesh-Poly-Build-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00097.py -- tests/files/web/generated/M21-GAP-00097-keymap-item-3D-View-Tool-Edit-Mesh-Poly-Build-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00097", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00097", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00098", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Poly Build:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00098-keymap-item-3D-View-Tool-Edit-Mesh-Poly-Build-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00098.py -- tests/files/web/generated/M21-GAP-00098-keymap-item-3D-View-Tool-Edit-Mesh-Poly-Build-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00098", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00098", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00099", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Push/Pull:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00099-keymap-item-3D-View-Tool-Edit-Mesh-Push-Pull-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00099.py -- tests/files/web/generated/M21-GAP-00099-keymap-item-3D-View-Tool-Edit-Mesh-Push-Pull-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00099", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00099", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00100", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Randomize:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00100-keymap-item-3D-View-Tool-Edit-Mesh-Randomize-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00100.py -- tests/files/web/generated/M21-GAP-00100-keymap-item-3D-View-Tool-Edit-Mesh-Randomize-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00100", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00100", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00101", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Rip Edge:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00101-keymap-item-3D-View-Tool-Edit-Mesh-Rip-Edge-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00101.py -- tests/files/web/generated/M21-GAP-00101-keymap-item-3D-View-Tool-Edit-Mesh-Rip-Edge-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00101", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00101", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00102", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Rip Region:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00102-keymap-item-3D-View-Tool-Edit-Mesh-Rip-Region-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00102.py -- tests/files/web/generated/M21-GAP-00102-keymap-item-3D-View-Tool-Edit-Mesh-Rip-Region-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00102", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00102", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00103", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Shrink/Fatten:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00103-keymap-item-3D-View-Tool-Edit-Mesh-Shrink-Fatten-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00103.py -- tests/files/web/generated/M21-GAP-00103-keymap-item-3D-View-Tool-Edit-Mesh-Shrink-Fatten-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00103", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00103", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00104", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Smooth:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00104-keymap-item-3D-View-Tool-Edit-Mesh-Smooth-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00104.py -- tests/files/web/generated/M21-GAP-00104-keymap-item-3D-View-Tool-Edit-Mesh-Smooth-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00104", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00104", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00105", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Spin Duplicates:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00105-keymap-item-3D-View-Tool-Edit-Mesh-Spin-Duplicates-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00105.py -- tests/files/web/generated/M21-GAP-00105-keymap-item-3D-View-Tool-Edit-Mesh-Spin-Duplicates-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00105", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00105", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00106", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Spin:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00106-keymap-item-3D-View-Tool-Edit-Mesh-Spin-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00106.py -- tests/files/web/generated/M21-GAP-00106-keymap-item-3D-View-Tool-Edit-Mesh-Spin-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00106", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00106", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00107", + "gapId": "keymap-item:3D View Tool: Edit Mesh, To Sphere:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00107-keymap-item-3D-View-Tool-Edit-Mesh-To-Sphere-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00107.py -- tests/files/web/generated/M21-GAP-00107-keymap-item-3D-View-Tool-Edit-Mesh-To-Sphere-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00107", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00107", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00108", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Vertex Slide:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00108-keymap-item-3D-View-Tool-Edit-Mesh-Vertex-Slide-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00108.py -- tests/files/web/generated/M21-GAP-00108-keymap-item-3D-View-Tool-Edit-Mesh-Vertex-Slide-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00108", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00108", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00109", + "gapId": "keymap-item:3D View Tool: Edit Text, Select Text:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00109-keymap-item-3D-View-Tool-Edit-Text-Select-Text-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00109.py -- tests/files/web/generated/M21-GAP-00109-keymap-item-3D-View-Tool-Edit-Text-Select-Text-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00109", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00109", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00110", + "gapId": "keymap-item:3D View Tool: Edit Text, Select Text:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00110-keymap-item-3D-View-Tool-Edit-Text-Select-Text-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00110.py -- tests/files/web/generated/M21-GAP-00110-keymap-item-3D-View-Tool-Edit-Text-Select-Text-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00110", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00110", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00111", + "gapId": "keymap-item:3D View Tool: Measure:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00111-keymap-item-3D-View-Tool-Measure-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00111.py -- tests/files/web/generated/M21-GAP-00111-keymap-item-3D-View-Tool-Measure-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00111", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00111", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00112", + "gapId": "keymap-item:3D View Tool: Measure:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00112-keymap-item-3D-View-Tool-Measure-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00112.py -- tests/files/web/generated/M21-GAP-00112-keymap-item-3D-View-Tool-Measure-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00112", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00112", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00113", + "gapId": "keymap-item:3D View Tool: Measure:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00113-keymap-item-3D-View-Tool-Measure-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00113.py -- tests/files/web/generated/M21-GAP-00113-keymap-item-3D-View-Tool-Measure-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00113", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00113", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00114", + "gapId": "keymap-item:3D View Tool: Move:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00114-keymap-item-3D-View-Tool-Move-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00114.py -- tests/files/web/generated/M21-GAP-00114-keymap-item-3D-View-Tool-Move-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00114", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00114", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00115", + "gapId": "keymap-item:3D View Tool: Object, Add Primitive:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00115-keymap-item-3D-View-Tool-Object-Add-Primitive-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00115.py -- tests/files/web/generated/M21-GAP-00115-keymap-item-3D-View-Tool-Object-Add-Primitive-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00115", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00115", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00116", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Arc:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00116-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Arc-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00116.py -- tests/files/web/generated/M21-GAP-00116-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Arc-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00116", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00116", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00117", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Arc:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00117-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Arc-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00117.py -- tests/files/web/generated/M21-GAP-00117-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Arc-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00117", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00117", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00118", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Arc:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00118-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Arc-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00118.py -- tests/files/web/generated/M21-GAP-00118-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Arc-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00118", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00118", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00119", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Box:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00119-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Box-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00119.py -- tests/files/web/generated/M21-GAP-00119-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Box-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00119", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00119", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00120", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Box:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00120-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Box-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00120.py -- tests/files/web/generated/M21-GAP-00120-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Box-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00120", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00120", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00121", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Box:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00121-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Box-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00121.py -- tests/files/web/generated/M21-GAP-00121-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Box-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00121", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00121", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00122", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Circle:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00122-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Circle-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00122.py -- tests/files/web/generated/M21-GAP-00122-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Circle-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00122", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00122", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00123", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Circle:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00123-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Circle-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00123.py -- tests/files/web/generated/M21-GAP-00123-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Circle-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00123", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00123", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00124", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Circle:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00124-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Circle-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00124.py -- tests/files/web/generated/M21-GAP-00124-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Circle-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00124", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00124", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00125", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Curve:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00125-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Curve-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00125.py -- tests/files/web/generated/M21-GAP-00125-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Curve-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00125", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00125", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00126", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Eyedropper:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00126-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Eyedropper-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00126.py -- tests/files/web/generated/M21-GAP-00126-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Eyedropper-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00126", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00126", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00127", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Eyedropper:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00127-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Eyedropper-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00127.py -- tests/files/web/generated/M21-GAP-00127-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Eyedropper-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00127", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00127", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00128", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Eyedropper:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00128-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Eyedropper-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00128.py -- tests/files/web/generated/M21-GAP-00128-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Eyedropper-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00128", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00128", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00129", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Eyedropper:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00129-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Eyedropper-VIEW_3D-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00129.py -- tests/files/web/generated/M21-GAP-00129-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Eyedropper-VIEW_3D-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00129", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00129", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00130", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Interpolate:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00130-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Interpolate-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00130.py -- tests/files/web/generated/M21-GAP-00130-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Interpolate-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00130", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00130", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00131", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Line:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00131-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Line-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00131.py -- tests/files/web/generated/M21-GAP-00131-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Line-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00131", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00131", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00132", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Line:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00132-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Line-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00132.py -- tests/files/web/generated/M21-GAP-00132-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Line-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00132", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00132", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00133", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Line:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00133-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Line-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00133.py -- tests/files/web/generated/M21-GAP-00133-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Line-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00133", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00133", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00134", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Polyline:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00134-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Polyline-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00134.py -- tests/files/web/generated/M21-GAP-00134-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Polyline-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00134", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00134", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00135", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Polyline:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00135-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Polyline-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00135.py -- tests/files/web/generated/M21-GAP-00135-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Polyline-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00135", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00135", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00136", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Trim:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00136-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Trim-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00136.py -- tests/files/web/generated/M21-GAP-00136-keymap-item-3D-View-Tool-Paint-Grease-Pencil-Trim-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00136", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00136", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00137", + "gapId": "keymap-item:3D View Tool: Paint Weight, Gradient:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00137-keymap-item-3D-View-Tool-Paint-Weight-Gradient-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00137.py -- tests/files/web/generated/M21-GAP-00137-keymap-item-3D-View-Tool-Paint-Weight-Gradient-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00137", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00137", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00138", + "gapId": "keymap-item:3D View Tool: Paint Weight, Sample Vertex Group:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00138-keymap-item-3D-View-Tool-Paint-Weight-Sample-Vertex-Group-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00138.py -- tests/files/web/generated/M21-GAP-00138-keymap-item-3D-View-Tool-Paint-Weight-Sample-Vertex-Group-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00138", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00138", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00139", + "gapId": "keymap-item:3D View Tool: Paint Weight, Sample Weight:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00139-keymap-item-3D-View-Tool-Paint-Weight-Sample-Weight-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00139.py -- tests/files/web/generated/M21-GAP-00139-keymap-item-3D-View-Tool-Paint-Weight-Sample-Weight-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00139", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00139", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00140", + "gapId": "keymap-item:3D View Tool: Paint Weight, Sample Weight:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00140-keymap-item-3D-View-Tool-Paint-Weight-Sample-Weight-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00140.py -- tests/files/web/generated/M21-GAP-00140-keymap-item-3D-View-Tool-Paint-Weight-Sample-Weight-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00140", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00140", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00141", + "gapId": "keymap-item:3D View Tool: Push:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00141-keymap-item-3D-View-Tool-Push-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00141.py -- tests/files/web/generated/M21-GAP-00141-keymap-item-3D-View-Tool-Push-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00141", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00141", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00142", + "gapId": "keymap-item:3D View Tool: Relax:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00142-keymap-item-3D-View-Tool-Relax-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00142.py -- tests/files/web/generated/M21-GAP-00142-keymap-item-3D-View-Tool-Relax-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00142", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00142", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00143", + "gapId": "keymap-item:3D View Tool: Rotate:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00143-keymap-item-3D-View-Tool-Rotate-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00143.py -- tests/files/web/generated/M21-GAP-00143-keymap-item-3D-View-Tool-Rotate-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00143", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00143", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00144", + "gapId": "keymap-item:3D View Tool: Scale:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00144-keymap-item-3D-View-Tool-Scale-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00144.py -- tests/files/web/generated/M21-GAP-00144-keymap-item-3D-View-Tool-Scale-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00144", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00144", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00145", + "gapId": "keymap-item:3D View Tool: Sculpt, Box Face Set:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00145-keymap-item-3D-View-Tool-Sculpt-Box-Face-Set-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00145.py -- tests/files/web/generated/M21-GAP-00145-keymap-item-3D-View-Tool-Sculpt-Box-Face-Set-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00145", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00145", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00146", + "gapId": "keymap-item:3D View Tool: Sculpt, Box Hide:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00146-keymap-item-3D-View-Tool-Sculpt-Box-Hide-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00146.py -- tests/files/web/generated/M21-GAP-00146-keymap-item-3D-View-Tool-Sculpt-Box-Hide-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00146", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00146", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00147", + "gapId": "keymap-item:3D View Tool: Sculpt, Box Hide:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00147-keymap-item-3D-View-Tool-Sculpt-Box-Hide-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00147.py -- tests/files/web/generated/M21-GAP-00147-keymap-item-3D-View-Tool-Sculpt-Box-Hide-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00147", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00147", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00148", + "gapId": "keymap-item:3D View Tool: Sculpt, Box Hide:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00148-keymap-item-3D-View-Tool-Sculpt-Box-Hide-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00148.py -- tests/files/web/generated/M21-GAP-00148-keymap-item-3D-View-Tool-Sculpt-Box-Hide-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00148", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00148", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00149", + "gapId": "keymap-item:3D View Tool: Sculpt, Box Mask:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00149-keymap-item-3D-View-Tool-Sculpt-Box-Mask-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00149.py -- tests/files/web/generated/M21-GAP-00149-keymap-item-3D-View-Tool-Sculpt-Box-Mask-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00149", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00149", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00150", + "gapId": "keymap-item:3D View Tool: Sculpt, Box Mask:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00150-keymap-item-3D-View-Tool-Sculpt-Box-Mask-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00150.py -- tests/files/web/generated/M21-GAP-00150-keymap-item-3D-View-Tool-Sculpt-Box-Mask-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00150", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00150", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00151", + "gapId": "keymap-item:3D View Tool: Sculpt, Box Trim:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00151-keymap-item-3D-View-Tool-Sculpt-Box-Trim-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00151.py -- tests/files/web/generated/M21-GAP-00151-keymap-item-3D-View-Tool-Sculpt-Box-Trim-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00151", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00151", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00152", + "gapId": "keymap-item:3D View Tool: Sculpt, Cloth Filter:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00152-keymap-item-3D-View-Tool-Sculpt-Cloth-Filter-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00152.py -- tests/files/web/generated/M21-GAP-00152-keymap-item-3D-View-Tool-Sculpt-Cloth-Filter-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00152", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00152", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00153", + "gapId": "keymap-item:3D View Tool: Sculpt, Color Filter:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00153-keymap-item-3D-View-Tool-Sculpt-Color-Filter-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00153.py -- tests/files/web/generated/M21-GAP-00153-keymap-item-3D-View-Tool-Sculpt-Color-Filter-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00153", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00153", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00154", + "gapId": "keymap-item:3D View Tool: Sculpt, Color Filter:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00154-keymap-item-3D-View-Tool-Sculpt-Color-Filter-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00154.py -- tests/files/web/generated/M21-GAP-00154-keymap-item-3D-View-Tool-Sculpt-Color-Filter-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00154", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00154", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00155", + "gapId": "keymap-item:3D View Tool: Sculpt, Face Set Edit:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00155-keymap-item-3D-View-Tool-Sculpt-Face-Set-Edit-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00155.py -- tests/files/web/generated/M21-GAP-00155-keymap-item-3D-View-Tool-Sculpt-Face-Set-Edit-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00155", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00155", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00156", + "gapId": "keymap-item:3D View Tool: Sculpt, Lasso Face Set:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00156-keymap-item-3D-View-Tool-Sculpt-Lasso-Face-Set-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00156.py -- tests/files/web/generated/M21-GAP-00156-keymap-item-3D-View-Tool-Sculpt-Lasso-Face-Set-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00156", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00156", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00157", + "gapId": "keymap-item:3D View Tool: Sculpt, Lasso Hide:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00157-keymap-item-3D-View-Tool-Sculpt-Lasso-Hide-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00157.py -- tests/files/web/generated/M21-GAP-00157-keymap-item-3D-View-Tool-Sculpt-Lasso-Hide-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00157", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00157", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00158", + "gapId": "keymap-item:3D View Tool: Sculpt, Lasso Hide:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00158-keymap-item-3D-View-Tool-Sculpt-Lasso-Hide-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00158.py -- tests/files/web/generated/M21-GAP-00158-keymap-item-3D-View-Tool-Sculpt-Lasso-Hide-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00158", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00158", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00159", + "gapId": "keymap-item:3D View Tool: Sculpt, Lasso Hide:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00159-keymap-item-3D-View-Tool-Sculpt-Lasso-Hide-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00159.py -- tests/files/web/generated/M21-GAP-00159-keymap-item-3D-View-Tool-Sculpt-Lasso-Hide-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00159", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00159", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00160", + "gapId": "keymap-item:3D View Tool: Sculpt, Lasso Mask:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00160-keymap-item-3D-View-Tool-Sculpt-Lasso-Mask-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00160.py -- tests/files/web/generated/M21-GAP-00160-keymap-item-3D-View-Tool-Sculpt-Lasso-Mask-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00160", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00160", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00161", + "gapId": "keymap-item:3D View Tool: Sculpt, Lasso Mask:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00161-keymap-item-3D-View-Tool-Sculpt-Lasso-Mask-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00161.py -- tests/files/web/generated/M21-GAP-00161-keymap-item-3D-View-Tool-Sculpt-Lasso-Mask-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00161", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00161", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00162", + "gapId": "keymap-item:3D View Tool: Sculpt, Lasso Trim:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00162-keymap-item-3D-View-Tool-Sculpt-Lasso-Trim-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00162.py -- tests/files/web/generated/M21-GAP-00162-keymap-item-3D-View-Tool-Sculpt-Lasso-Trim-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00162", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00162", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00163", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Face Set:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00163-keymap-item-3D-View-Tool-Sculpt-Line-Face-Set-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00163.py -- tests/files/web/generated/M21-GAP-00163-keymap-item-3D-View-Tool-Sculpt-Line-Face-Set-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00163", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00163", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00164", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Hide:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00164-keymap-item-3D-View-Tool-Sculpt-Line-Hide-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00164.py -- tests/files/web/generated/M21-GAP-00164-keymap-item-3D-View-Tool-Sculpt-Line-Hide-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00164", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00164", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00165", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Hide:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00165-keymap-item-3D-View-Tool-Sculpt-Line-Hide-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00165.py -- tests/files/web/generated/M21-GAP-00165-keymap-item-3D-View-Tool-Sculpt-Line-Hide-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00165", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00165", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00166", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Hide:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00166-keymap-item-3D-View-Tool-Sculpt-Line-Hide-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00166.py -- tests/files/web/generated/M21-GAP-00166-keymap-item-3D-View-Tool-Sculpt-Line-Hide-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00166", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00166", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00167", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Mask:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00167-keymap-item-3D-View-Tool-Sculpt-Line-Mask-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00167.py -- tests/files/web/generated/M21-GAP-00167-keymap-item-3D-View-Tool-Sculpt-Line-Mask-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00167", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00167", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00168", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Mask:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00168-keymap-item-3D-View-Tool-Sculpt-Line-Mask-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00168.py -- tests/files/web/generated/M21-GAP-00168-keymap-item-3D-View-Tool-Sculpt-Line-Mask-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00168", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00168", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00169", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Project:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00169-keymap-item-3D-View-Tool-Sculpt-Line-Project-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00169.py -- tests/files/web/generated/M21-GAP-00169-keymap-item-3D-View-Tool-Sculpt-Line-Project-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00169", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00169", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00170", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Trim:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00170-keymap-item-3D-View-Tool-Sculpt-Line-Trim-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00170.py -- tests/files/web/generated/M21-GAP-00170-keymap-item-3D-View-Tool-Sculpt-Line-Trim-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00170", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00170", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00171", + "gapId": "keymap-item:3D View Tool: Sculpt, Mask by Color:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00171-keymap-item-3D-View-Tool-Sculpt-Mask-by-Color-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00171.py -- tests/files/web/generated/M21-GAP-00171-keymap-item-3D-View-Tool-Sculpt-Mask-by-Color-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00171", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00171", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00172", + "gapId": "keymap-item:3D View Tool: Sculpt, Mesh Filter:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00172-keymap-item-3D-View-Tool-Sculpt-Mesh-Filter-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00172.py -- tests/files/web/generated/M21-GAP-00172-keymap-item-3D-View-Tool-Sculpt-Mesh-Filter-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00172", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00172", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00173", + "gapId": "keymap-item:3D View Tool: Sculpt, Polyline Face Set:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00173-keymap-item-3D-View-Tool-Sculpt-Polyline-Face-Set-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00173.py -- tests/files/web/generated/M21-GAP-00173-keymap-item-3D-View-Tool-Sculpt-Polyline-Face-Set-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00173", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00173", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00174", + "gapId": "keymap-item:3D View Tool: Sculpt, Polyline Hide:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00174-keymap-item-3D-View-Tool-Sculpt-Polyline-Hide-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00174.py -- tests/files/web/generated/M21-GAP-00174-keymap-item-3D-View-Tool-Sculpt-Polyline-Hide-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00174", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00174", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00175", + "gapId": "keymap-item:3D View Tool: Sculpt, Polyline Hide:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00175-keymap-item-3D-View-Tool-Sculpt-Polyline-Hide-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00175.py -- tests/files/web/generated/M21-GAP-00175-keymap-item-3D-View-Tool-Sculpt-Polyline-Hide-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00175", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00175", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00176", + "gapId": "keymap-item:3D View Tool: Sculpt, Polyline Mask:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00176-keymap-item-3D-View-Tool-Sculpt-Polyline-Mask-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00176.py -- tests/files/web/generated/M21-GAP-00176-keymap-item-3D-View-Tool-Sculpt-Polyline-Mask-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00176", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00176", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00177", + "gapId": "keymap-item:3D View Tool: Sculpt, Polyline Mask:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00177-keymap-item-3D-View-Tool-Sculpt-Polyline-Mask-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00177.py -- tests/files/web/generated/M21-GAP-00177-keymap-item-3D-View-Tool-Sculpt-Polyline-Mask-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00177", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00177", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00178", + "gapId": "keymap-item:3D View Tool: Sculpt, Polyline Trim:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00178-keymap-item-3D-View-Tool-Sculpt-Polyline-Trim-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00178.py -- tests/files/web/generated/M21-GAP-00178-keymap-item-3D-View-Tool-Sculpt-Polyline-Trim-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00178", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00178", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00179", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00179-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00179.py -- tests/files/web/generated/M21-GAP-00179-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00179", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00179", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00180", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00180-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00180.py -- tests/files/web/generated/M21-GAP-00180-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00180", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00180", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00181", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00181-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00181.py -- tests/files/web/generated/M21-GAP-00181-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00181", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00181", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00182", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00182-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00182.py -- tests/files/web/generated/M21-GAP-00182-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00182", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00182", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00183", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00183-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00183.py -- tests/files/web/generated/M21-GAP-00183-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00183", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00183", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00184", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00184-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00184.py -- tests/files/web/generated/M21-GAP-00184-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00184", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00184", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00185", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00185-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00185.py -- tests/files/web/generated/M21-GAP-00185-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00185", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00185", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00186", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00186-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00186.py -- tests/files/web/generated/M21-GAP-00186-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00186", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00186", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00187", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00187-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00187.py -- tests/files/web/generated/M21-GAP-00187-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00187", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00187", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00188", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00188-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00188.py -- tests/files/web/generated/M21-GAP-00188-keymap-item-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00188", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00188", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00189", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00189-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00189.py -- tests/files/web/generated/M21-GAP-00189-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00189", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00189", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00190", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00190-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00190.py -- tests/files/web/generated/M21-GAP-00190-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00190", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00190", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00191", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00191-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00191.py -- tests/files/web/generated/M21-GAP-00191-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00191", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00191", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00192", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00192-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00192.py -- tests/files/web/generated/M21-GAP-00192-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00192", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00192", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00193", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00193-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00193.py -- tests/files/web/generated/M21-GAP-00193-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00193", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00193", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00194", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00194-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00194.py -- tests/files/web/generated/M21-GAP-00194-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00194", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00194", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00195", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00195-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00195.py -- tests/files/web/generated/M21-GAP-00195-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00195", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00195", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00196", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00196-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00196.py -- tests/files/web/generated/M21-GAP-00196-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00196", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00196", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00197", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00197-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00197.py -- tests/files/web/generated/M21-GAP-00197-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00197", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00197", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00198", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00198-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00198.py -- tests/files/web/generated/M21-GAP-00198-keymap-item-3D-View-Tool-Select-Box-VIEW_3D-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00198", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00198", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00199", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00199-keymap-item-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00199.py -- tests/files/web/generated/M21-GAP-00199-keymap-item-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00199", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00199", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00200", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00200-keymap-item-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00200.py -- tests/files/web/generated/M21-GAP-00200-keymap-item-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00200", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00200", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00201", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00201-keymap-item-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00201.py -- tests/files/web/generated/M21-GAP-00201-keymap-item-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00201", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00201", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00202", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00202-keymap-item-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00202.py -- tests/files/web/generated/M21-GAP-00202-keymap-item-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00202", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00202", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00203", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00203-keymap-item-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00203.py -- tests/files/web/generated/M21-GAP-00203-keymap-item-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00203", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00203", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00204", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00204-keymap-item-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00204.py -- tests/files/web/generated/M21-GAP-00204-keymap-item-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00204", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00204", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00205", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00205-keymap-item-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00205.py -- tests/files/web/generated/M21-GAP-00205-keymap-item-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00205", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00205", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00206", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00206-keymap-item-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00206.py -- tests/files/web/generated/M21-GAP-00206-keymap-item-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00206", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00206", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00207", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00207-keymap-item-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00207.py -- tests/files/web/generated/M21-GAP-00207-keymap-item-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00207", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00207", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00208", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00208-keymap-item-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00208.py -- tests/files/web/generated/M21-GAP-00208-keymap-item-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00208", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00208", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00209", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00209-keymap-item-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00209.py -- tests/files/web/generated/M21-GAP-00209-keymap-item-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00209", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00209", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00210", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00210-keymap-item-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00210.py -- tests/files/web/generated/M21-GAP-00210-keymap-item-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00210", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00210", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00211", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00211-keymap-item-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00211.py -- tests/files/web/generated/M21-GAP-00211-keymap-item-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00211", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00211", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00212", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00212-keymap-item-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00212.py -- tests/files/web/generated/M21-GAP-00212-keymap-item-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00212", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00212", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00213", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00213-keymap-item-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00213.py -- tests/files/web/generated/M21-GAP-00213-keymap-item-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00213", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00213", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00214", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00214-keymap-item-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00214.py -- tests/files/web/generated/M21-GAP-00214-keymap-item-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00214", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00214", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00215", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00215-keymap-item-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00215.py -- tests/files/web/generated/M21-GAP-00215-keymap-item-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00215", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00215", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00216", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00216-keymap-item-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00216.py -- tests/files/web/generated/M21-GAP-00216-keymap-item-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00216", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00216", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00217", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00217-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00217.py -- tests/files/web/generated/M21-GAP-00217-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00217", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00217", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00218", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00218-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00218.py -- tests/files/web/generated/M21-GAP-00218-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00218", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00218", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00219", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00219-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00219.py -- tests/files/web/generated/M21-GAP-00219-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00219", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00219", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00220", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00220-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00220.py -- tests/files/web/generated/M21-GAP-00220-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00220", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00220", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00221", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00221-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00221.py -- tests/files/web/generated/M21-GAP-00221-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00221", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00221", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00222", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00222-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00222.py -- tests/files/web/generated/M21-GAP-00222-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00222", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00222", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00223", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00223-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00223.py -- tests/files/web/generated/M21-GAP-00223-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00223", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00223", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00224", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00224-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00224.py -- tests/files/web/generated/M21-GAP-00224-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00224", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00224", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00225", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00225-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00225.py -- tests/files/web/generated/M21-GAP-00225-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00225", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00225", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00226", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00226-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00226.py -- tests/files/web/generated/M21-GAP-00226-keymap-item-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00226", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00226", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00227", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00227-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00227.py -- tests/files/web/generated/M21-GAP-00227-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00227", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00227", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00228", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00228-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00228.py -- tests/files/web/generated/M21-GAP-00228-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00228", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00228", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00229", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00229-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00229.py -- tests/files/web/generated/M21-GAP-00229-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00229", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00229", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00230", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00230-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00230.py -- tests/files/web/generated/M21-GAP-00230-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00230", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00230", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00231", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00231-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00231.py -- tests/files/web/generated/M21-GAP-00231-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00231", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00231", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00232", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00232-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00232.py -- tests/files/web/generated/M21-GAP-00232-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00232", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00232", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00233", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00233-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00233.py -- tests/files/web/generated/M21-GAP-00233-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00233", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00233", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00234", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00234-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00234.py -- tests/files/web/generated/M21-GAP-00234-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00234", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00234", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00235", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00235-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00235.py -- tests/files/web/generated/M21-GAP-00235-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00235", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00235", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00236", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00236-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00236.py -- tests/files/web/generated/M21-GAP-00236-keymap-item-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00236", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00236", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00237", + "gapId": "keymap-item:3D View Tool: Shear:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00237-keymap-item-3D-View-Tool-Shear-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00237.py -- tests/files/web/generated/M21-GAP-00237-keymap-item-3D-View-Tool-Shear-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00237", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00237", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00238", + "gapId": "keymap-item:3D View Tool: Shear:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00238-keymap-item-3D-View-Tool-Shear-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00238.py -- tests/files/web/generated/M21-GAP-00238-keymap-item-3D-View-Tool-Shear-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00238", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00238", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00239", + "gapId": "keymap-item:3D View Tool: Shear:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00239-keymap-item-3D-View-Tool-Shear-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00239.py -- tests/files/web/generated/M21-GAP-00239-keymap-item-3D-View-Tool-Shear-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00239", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00239", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00240", + "gapId": "keymap-item:3D View Tool: Transform:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00240-keymap-item-3D-View-Tool-Transform-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00240.py -- tests/files/web/generated/M21-GAP-00240-keymap-item-3D-View-Tool-Transform-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00240", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00240", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00241", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00241-keymap-item-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00241.py -- tests/files/web/generated/M21-GAP-00241-keymap-item-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00241", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00241", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00242", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00242-keymap-item-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00242.py -- tests/files/web/generated/M21-GAP-00242-keymap-item-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00242", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00242", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00243", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00243-keymap-item-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00243.py -- tests/files/web/generated/M21-GAP-00243-keymap-item-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00243", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00243", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00244", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00244-keymap-item-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00244.py -- tests/files/web/generated/M21-GAP-00244-keymap-item-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00244", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00244", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00245", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00245-keymap-item-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00245.py -- tests/files/web/generated/M21-GAP-00245-keymap-item-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00245", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00245", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00246", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00246-keymap-item-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00246.py -- tests/files/web/generated/M21-GAP-00246-keymap-item-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00246", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00246", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00247", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00247-keymap-item-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00247.py -- tests/files/web/generated/M21-GAP-00247-keymap-item-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00247", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00247", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00248", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00248-keymap-item-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00248.py -- tests/files/web/generated/M21-GAP-00248-keymap-item-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00248", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00248", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00249", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00249-keymap-item-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00249.py -- tests/files/web/generated/M21-GAP-00249-keymap-item-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00249", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00249", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00250", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00250-keymap-item-3D-View-Tool-Tweak-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00250.py -- tests/files/web/generated/M21-GAP-00250-keymap-item-3D-View-Tool-Tweak-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00250", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00250", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00251", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00251-keymap-item-3D-View-Tool-Tweak-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00251.py -- tests/files/web/generated/M21-GAP-00251-keymap-item-3D-View-Tool-Tweak-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00251", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00251", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00252", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00252-keymap-item-3D-View-Tool-Tweak-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00252.py -- tests/files/web/generated/M21-GAP-00252-keymap-item-3D-View-Tool-Tweak-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00252", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00252", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00253", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00253-keymap-item-3D-View-Tool-Tweak-VIEW_3D-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00253.py -- tests/files/web/generated/M21-GAP-00253-keymap-item-3D-View-Tool-Tweak-VIEW_3D-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00253", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00253", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00254", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00254-keymap-item-3D-View-Tool-Tweak-VIEW_3D-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00254.py -- tests/files/web/generated/M21-GAP-00254-keymap-item-3D-View-Tool-Tweak-VIEW_3D-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00254", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00254", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00255", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00255-keymap-item-3D-View-Tool-Tweak-VIEW_3D-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00255.py -- tests/files/web/generated/M21-GAP-00255-keymap-item-3D-View-Tool-Tweak-VIEW_3D-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00255", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00255", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00256", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00256-keymap-item-3D-View-Tool-Tweak-VIEW_3D-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00256.py -- tests/files/web/generated/M21-GAP-00256-keymap-item-3D-View-Tool-Tweak-VIEW_3D-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00256", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00256", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00257", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00257-keymap-item-3D-View-Tool-Tweak-VIEW_3D-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00257.py -- tests/files/web/generated/M21-GAP-00257-keymap-item-3D-View-Tool-Tweak-VIEW_3D-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00257", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00257", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00258", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00258-keymap-item-3D-View-Tool-Tweak-VIEW_3D-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00258.py -- tests/files/web/generated/M21-GAP-00258-keymap-item-3D-View-Tool-Tweak-VIEW_3D-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00258", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00258", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00259", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00259-keymap-item-3D-View-VIEW_3D-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00259.py -- tests/files/web/generated/M21-GAP-00259-keymap-item-3D-View-VIEW_3D-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00259", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00259", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00260", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00260-keymap-item-3D-View-VIEW_3D-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00260.py -- tests/files/web/generated/M21-GAP-00260-keymap-item-3D-View-VIEW_3D-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00260", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00260", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00261", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00261-keymap-item-3D-View-VIEW_3D-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00261.py -- tests/files/web/generated/M21-GAP-00261-keymap-item-3D-View-VIEW_3D-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00261", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00261", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00262", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:100", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00262-keymap-item-3D-View-VIEW_3D-WINDOW-100.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00262.py -- tests/files/web/generated/M21-GAP-00262-keymap-item-3D-View-VIEW_3D-WINDOW-100.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00262", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00262", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00263", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:101", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00263-keymap-item-3D-View-VIEW_3D-WINDOW-101.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00263.py -- tests/files/web/generated/M21-GAP-00263-keymap-item-3D-View-VIEW_3D-WINDOW-101.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00263", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00263", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00264", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:102", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00264-keymap-item-3D-View-VIEW_3D-WINDOW-102.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00264.py -- tests/files/web/generated/M21-GAP-00264-keymap-item-3D-View-VIEW_3D-WINDOW-102.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00264", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00264", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00265", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:103", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00265-keymap-item-3D-View-VIEW_3D-WINDOW-103.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00265.py -- tests/files/web/generated/M21-GAP-00265-keymap-item-3D-View-VIEW_3D-WINDOW-103.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00265", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00265", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00266", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:104", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00266-keymap-item-3D-View-VIEW_3D-WINDOW-104.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00266.py -- tests/files/web/generated/M21-GAP-00266-keymap-item-3D-View-VIEW_3D-WINDOW-104.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00266", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00266", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00267", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:105", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00267-keymap-item-3D-View-VIEW_3D-WINDOW-105.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00267.py -- tests/files/web/generated/M21-GAP-00267-keymap-item-3D-View-VIEW_3D-WINDOW-105.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00267", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00267", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00268", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:106", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00268-keymap-item-3D-View-VIEW_3D-WINDOW-106.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00268.py -- tests/files/web/generated/M21-GAP-00268-keymap-item-3D-View-VIEW_3D-WINDOW-106.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00268", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00268", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00269", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:107", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00269-keymap-item-3D-View-VIEW_3D-WINDOW-107.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00269.py -- tests/files/web/generated/M21-GAP-00269-keymap-item-3D-View-VIEW_3D-WINDOW-107.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00269", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00269", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00270", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:108", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00270-keymap-item-3D-View-VIEW_3D-WINDOW-108.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00270.py -- tests/files/web/generated/M21-GAP-00270-keymap-item-3D-View-VIEW_3D-WINDOW-108.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00270", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00270", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00271", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:109", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00271-keymap-item-3D-View-VIEW_3D-WINDOW-109.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00271.py -- tests/files/web/generated/M21-GAP-00271-keymap-item-3D-View-VIEW_3D-WINDOW-109.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00271", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00271", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00272", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00272-keymap-item-3D-View-VIEW_3D-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00272.py -- tests/files/web/generated/M21-GAP-00272-keymap-item-3D-View-VIEW_3D-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00272", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00272", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00273", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:110", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00273-keymap-item-3D-View-VIEW_3D-WINDOW-110.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00273.py -- tests/files/web/generated/M21-GAP-00273-keymap-item-3D-View-VIEW_3D-WINDOW-110.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00273", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00273", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00274", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:111", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00274-keymap-item-3D-View-VIEW_3D-WINDOW-111.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00274.py -- tests/files/web/generated/M21-GAP-00274-keymap-item-3D-View-VIEW_3D-WINDOW-111.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00274", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00274", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00275", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:112", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00275-keymap-item-3D-View-VIEW_3D-WINDOW-112.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00275.py -- tests/files/web/generated/M21-GAP-00275-keymap-item-3D-View-VIEW_3D-WINDOW-112.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00275", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00275", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00276", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:113", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00276-keymap-item-3D-View-VIEW_3D-WINDOW-113.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00276.py -- tests/files/web/generated/M21-GAP-00276-keymap-item-3D-View-VIEW_3D-WINDOW-113.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00276", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00276", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00277", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:114", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00277-keymap-item-3D-View-VIEW_3D-WINDOW-114.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00277.py -- tests/files/web/generated/M21-GAP-00277-keymap-item-3D-View-VIEW_3D-WINDOW-114.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00277", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00277", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00278", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:115", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00278-keymap-item-3D-View-VIEW_3D-WINDOW-115.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00278.py -- tests/files/web/generated/M21-GAP-00278-keymap-item-3D-View-VIEW_3D-WINDOW-115.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00278", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00278", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00279", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00279-keymap-item-3D-View-VIEW_3D-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00279.py -- tests/files/web/generated/M21-GAP-00279-keymap-item-3D-View-VIEW_3D-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00279", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00279", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00280", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00280-keymap-item-3D-View-VIEW_3D-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00280.py -- tests/files/web/generated/M21-GAP-00280-keymap-item-3D-View-VIEW_3D-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00280", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00280", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00281", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00281-keymap-item-3D-View-VIEW_3D-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00281.py -- tests/files/web/generated/M21-GAP-00281-keymap-item-3D-View-VIEW_3D-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00281", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00281", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00282", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00282-keymap-item-3D-View-VIEW_3D-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00282.py -- tests/files/web/generated/M21-GAP-00282-keymap-item-3D-View-VIEW_3D-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00282", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00282", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00283", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00283-keymap-item-3D-View-VIEW_3D-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00283.py -- tests/files/web/generated/M21-GAP-00283-keymap-item-3D-View-VIEW_3D-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00283", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00283", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00284", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00284-keymap-item-3D-View-VIEW_3D-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00284.py -- tests/files/web/generated/M21-GAP-00284-keymap-item-3D-View-VIEW_3D-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00284", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00284", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00285", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00285-keymap-item-3D-View-VIEW_3D-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00285.py -- tests/files/web/generated/M21-GAP-00285-keymap-item-3D-View-VIEW_3D-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00285", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00285", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00286", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00286-keymap-item-3D-View-VIEW_3D-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00286.py -- tests/files/web/generated/M21-GAP-00286-keymap-item-3D-View-VIEW_3D-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00286", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00286", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00287", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00287-keymap-item-3D-View-VIEW_3D-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00287.py -- tests/files/web/generated/M21-GAP-00287-keymap-item-3D-View-VIEW_3D-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00287", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00287", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00288", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00288-keymap-item-3D-View-VIEW_3D-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00288.py -- tests/files/web/generated/M21-GAP-00288-keymap-item-3D-View-VIEW_3D-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00288", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00288", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00289", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00289-keymap-item-3D-View-VIEW_3D-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00289.py -- tests/files/web/generated/M21-GAP-00289-keymap-item-3D-View-VIEW_3D-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00289", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00289", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00290", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00290-keymap-item-3D-View-VIEW_3D-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00290.py -- tests/files/web/generated/M21-GAP-00290-keymap-item-3D-View-VIEW_3D-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00290", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00290", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00291", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00291-keymap-item-3D-View-VIEW_3D-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00291.py -- tests/files/web/generated/M21-GAP-00291-keymap-item-3D-View-VIEW_3D-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00291", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00291", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00292", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00292-keymap-item-3D-View-VIEW_3D-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00292.py -- tests/files/web/generated/M21-GAP-00292-keymap-item-3D-View-VIEW_3D-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00292", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00292", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00293", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00293-keymap-item-3D-View-VIEW_3D-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00293.py -- tests/files/web/generated/M21-GAP-00293-keymap-item-3D-View-VIEW_3D-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00293", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00293", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00294", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00294-keymap-item-3D-View-VIEW_3D-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00294.py -- tests/files/web/generated/M21-GAP-00294-keymap-item-3D-View-VIEW_3D-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00294", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00294", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00295", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00295-keymap-item-3D-View-VIEW_3D-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00295.py -- tests/files/web/generated/M21-GAP-00295-keymap-item-3D-View-VIEW_3D-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00295", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00295", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00296", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00296-keymap-item-3D-View-VIEW_3D-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00296.py -- tests/files/web/generated/M21-GAP-00296-keymap-item-3D-View-VIEW_3D-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00296", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00296", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00297", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00297-keymap-item-3D-View-VIEW_3D-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00297.py -- tests/files/web/generated/M21-GAP-00297-keymap-item-3D-View-VIEW_3D-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00297", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00297", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00298", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00298-keymap-item-3D-View-VIEW_3D-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00298.py -- tests/files/web/generated/M21-GAP-00298-keymap-item-3D-View-VIEW_3D-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00298", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00298", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00299", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00299-keymap-item-3D-View-VIEW_3D-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00299.py -- tests/files/web/generated/M21-GAP-00299-keymap-item-3D-View-VIEW_3D-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00299", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00299", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00300", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00300-keymap-item-3D-View-VIEW_3D-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00300.py -- tests/files/web/generated/M21-GAP-00300-keymap-item-3D-View-VIEW_3D-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00300", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00300", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00301", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00301-keymap-item-3D-View-VIEW_3D-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00301.py -- tests/files/web/generated/M21-GAP-00301-keymap-item-3D-View-VIEW_3D-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00301", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00301", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00302", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00302-keymap-item-3D-View-VIEW_3D-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00302.py -- tests/files/web/generated/M21-GAP-00302-keymap-item-3D-View-VIEW_3D-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00302", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00302", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00303", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00303-keymap-item-3D-View-VIEW_3D-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00303.py -- tests/files/web/generated/M21-GAP-00303-keymap-item-3D-View-VIEW_3D-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00303", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00303", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00304", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00304-keymap-item-3D-View-VIEW_3D-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00304.py -- tests/files/web/generated/M21-GAP-00304-keymap-item-3D-View-VIEW_3D-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00304", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00304", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00305", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00305-keymap-item-3D-View-VIEW_3D-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00305.py -- tests/files/web/generated/M21-GAP-00305-keymap-item-3D-View-VIEW_3D-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00305", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00305", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00306", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00306-keymap-item-3D-View-VIEW_3D-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00306.py -- tests/files/web/generated/M21-GAP-00306-keymap-item-3D-View-VIEW_3D-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00306", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00306", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00307", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00307-keymap-item-3D-View-VIEW_3D-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00307.py -- tests/files/web/generated/M21-GAP-00307-keymap-item-3D-View-VIEW_3D-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00307", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00307", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00308", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00308-keymap-item-3D-View-VIEW_3D-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00308.py -- tests/files/web/generated/M21-GAP-00308-keymap-item-3D-View-VIEW_3D-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00308", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00308", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00309", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00309-keymap-item-3D-View-VIEW_3D-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00309.py -- tests/files/web/generated/M21-GAP-00309-keymap-item-3D-View-VIEW_3D-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00309", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00309", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00310", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00310-keymap-item-3D-View-VIEW_3D-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00310.py -- tests/files/web/generated/M21-GAP-00310-keymap-item-3D-View-VIEW_3D-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00310", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00310", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00311", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00311-keymap-item-3D-View-VIEW_3D-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00311.py -- tests/files/web/generated/M21-GAP-00311-keymap-item-3D-View-VIEW_3D-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00311", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00311", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00312", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00312-keymap-item-3D-View-VIEW_3D-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00312.py -- tests/files/web/generated/M21-GAP-00312-keymap-item-3D-View-VIEW_3D-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00312", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00312", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00313", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00313-keymap-item-3D-View-VIEW_3D-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00313.py -- tests/files/web/generated/M21-GAP-00313-keymap-item-3D-View-VIEW_3D-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00313", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00313", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00314", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00314-keymap-item-3D-View-VIEW_3D-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00314.py -- tests/files/web/generated/M21-GAP-00314-keymap-item-3D-View-VIEW_3D-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00314", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00314", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00315", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00315-keymap-item-3D-View-VIEW_3D-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00315.py -- tests/files/web/generated/M21-GAP-00315-keymap-item-3D-View-VIEW_3D-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00315", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00315", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00316", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00316-keymap-item-3D-View-VIEW_3D-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00316.py -- tests/files/web/generated/M21-GAP-00316-keymap-item-3D-View-VIEW_3D-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00316", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00316", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00317", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00317-keymap-item-3D-View-VIEW_3D-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00317.py -- tests/files/web/generated/M21-GAP-00317-keymap-item-3D-View-VIEW_3D-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00317", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00317", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00318", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00318-keymap-item-3D-View-VIEW_3D-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00318.py -- tests/files/web/generated/M21-GAP-00318-keymap-item-3D-View-VIEW_3D-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00318", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00318", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00319", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00319-keymap-item-3D-View-VIEW_3D-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00319.py -- tests/files/web/generated/M21-GAP-00319-keymap-item-3D-View-VIEW_3D-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00319", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00319", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00320", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00320-keymap-item-3D-View-VIEW_3D-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00320.py -- tests/files/web/generated/M21-GAP-00320-keymap-item-3D-View-VIEW_3D-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00320", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00320", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00321", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:50", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00321-keymap-item-3D-View-VIEW_3D-WINDOW-50.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00321.py -- tests/files/web/generated/M21-GAP-00321-keymap-item-3D-View-VIEW_3D-WINDOW-50.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00321", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00321", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00322", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:51", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00322-keymap-item-3D-View-VIEW_3D-WINDOW-51.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00322.py -- tests/files/web/generated/M21-GAP-00322-keymap-item-3D-View-VIEW_3D-WINDOW-51.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00322", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00322", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00323", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:52", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00323-keymap-item-3D-View-VIEW_3D-WINDOW-52.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00323.py -- tests/files/web/generated/M21-GAP-00323-keymap-item-3D-View-VIEW_3D-WINDOW-52.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00323", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00323", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00324", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:53", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00324-keymap-item-3D-View-VIEW_3D-WINDOW-53.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00324.py -- tests/files/web/generated/M21-GAP-00324-keymap-item-3D-View-VIEW_3D-WINDOW-53.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00324", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00324", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00325", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:54", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00325-keymap-item-3D-View-VIEW_3D-WINDOW-54.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00325.py -- tests/files/web/generated/M21-GAP-00325-keymap-item-3D-View-VIEW_3D-WINDOW-54.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00325", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00325", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00326", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:55", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00326-keymap-item-3D-View-VIEW_3D-WINDOW-55.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00326.py -- tests/files/web/generated/M21-GAP-00326-keymap-item-3D-View-VIEW_3D-WINDOW-55.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00326", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00326", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00327", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:56", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00327-keymap-item-3D-View-VIEW_3D-WINDOW-56.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00327.py -- tests/files/web/generated/M21-GAP-00327-keymap-item-3D-View-VIEW_3D-WINDOW-56.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00327", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00327", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00328", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:57", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00328-keymap-item-3D-View-VIEW_3D-WINDOW-57.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00328.py -- tests/files/web/generated/M21-GAP-00328-keymap-item-3D-View-VIEW_3D-WINDOW-57.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00328", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00328", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00329", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:58", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00329-keymap-item-3D-View-VIEW_3D-WINDOW-58.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00329.py -- tests/files/web/generated/M21-GAP-00329-keymap-item-3D-View-VIEW_3D-WINDOW-58.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00329", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00329", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00330", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:59", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00330-keymap-item-3D-View-VIEW_3D-WINDOW-59.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00330.py -- tests/files/web/generated/M21-GAP-00330-keymap-item-3D-View-VIEW_3D-WINDOW-59.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00330", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00330", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00331", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00331-keymap-item-3D-View-VIEW_3D-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00331.py -- tests/files/web/generated/M21-GAP-00331-keymap-item-3D-View-VIEW_3D-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00331", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00331", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00332", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:60", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00332-keymap-item-3D-View-VIEW_3D-WINDOW-60.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00332.py -- tests/files/web/generated/M21-GAP-00332-keymap-item-3D-View-VIEW_3D-WINDOW-60.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00332", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00332", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00333", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:61", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00333-keymap-item-3D-View-VIEW_3D-WINDOW-61.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00333.py -- tests/files/web/generated/M21-GAP-00333-keymap-item-3D-View-VIEW_3D-WINDOW-61.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00333", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00333", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00334", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:62", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00334-keymap-item-3D-View-VIEW_3D-WINDOW-62.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00334.py -- tests/files/web/generated/M21-GAP-00334-keymap-item-3D-View-VIEW_3D-WINDOW-62.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00334", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00334", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00335", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:63", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00335-keymap-item-3D-View-VIEW_3D-WINDOW-63.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00335.py -- tests/files/web/generated/M21-GAP-00335-keymap-item-3D-View-VIEW_3D-WINDOW-63.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00335", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00335", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00336", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:64", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00336-keymap-item-3D-View-VIEW_3D-WINDOW-64.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00336.py -- tests/files/web/generated/M21-GAP-00336-keymap-item-3D-View-VIEW_3D-WINDOW-64.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00336", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00336", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00337", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:65", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00337-keymap-item-3D-View-VIEW_3D-WINDOW-65.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00337.py -- tests/files/web/generated/M21-GAP-00337-keymap-item-3D-View-VIEW_3D-WINDOW-65.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00337", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00337", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00338", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:66", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00338-keymap-item-3D-View-VIEW_3D-WINDOW-66.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00338.py -- tests/files/web/generated/M21-GAP-00338-keymap-item-3D-View-VIEW_3D-WINDOW-66.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00338", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00338", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00339", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:67", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00339-keymap-item-3D-View-VIEW_3D-WINDOW-67.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00339.py -- tests/files/web/generated/M21-GAP-00339-keymap-item-3D-View-VIEW_3D-WINDOW-67.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00339", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00339", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00340", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:68", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00340-keymap-item-3D-View-VIEW_3D-WINDOW-68.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00340.py -- tests/files/web/generated/M21-GAP-00340-keymap-item-3D-View-VIEW_3D-WINDOW-68.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00340", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00340", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00341", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:69", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00341-keymap-item-3D-View-VIEW_3D-WINDOW-69.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00341.py -- tests/files/web/generated/M21-GAP-00341-keymap-item-3D-View-VIEW_3D-WINDOW-69.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00341", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00341", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00342", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00342-keymap-item-3D-View-VIEW_3D-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00342.py -- tests/files/web/generated/M21-GAP-00342-keymap-item-3D-View-VIEW_3D-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00342", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00342", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00343", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:70", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00343-keymap-item-3D-View-VIEW_3D-WINDOW-70.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00343.py -- tests/files/web/generated/M21-GAP-00343-keymap-item-3D-View-VIEW_3D-WINDOW-70.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00343", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00343", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00344", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:71", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00344-keymap-item-3D-View-VIEW_3D-WINDOW-71.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00344.py -- tests/files/web/generated/M21-GAP-00344-keymap-item-3D-View-VIEW_3D-WINDOW-71.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00344", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00344", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00345", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:72", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00345-keymap-item-3D-View-VIEW_3D-WINDOW-72.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00345.py -- tests/files/web/generated/M21-GAP-00345-keymap-item-3D-View-VIEW_3D-WINDOW-72.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00345", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00345", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00346", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:73", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00346-keymap-item-3D-View-VIEW_3D-WINDOW-73.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00346.py -- tests/files/web/generated/M21-GAP-00346-keymap-item-3D-View-VIEW_3D-WINDOW-73.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00346", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00346", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00347", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:74", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00347-keymap-item-3D-View-VIEW_3D-WINDOW-74.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00347.py -- tests/files/web/generated/M21-GAP-00347-keymap-item-3D-View-VIEW_3D-WINDOW-74.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00347", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00347", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00348", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:75", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00348-keymap-item-3D-View-VIEW_3D-WINDOW-75.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00348.py -- tests/files/web/generated/M21-GAP-00348-keymap-item-3D-View-VIEW_3D-WINDOW-75.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00348", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00348", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00349", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:76", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00349-keymap-item-3D-View-VIEW_3D-WINDOW-76.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00349.py -- tests/files/web/generated/M21-GAP-00349-keymap-item-3D-View-VIEW_3D-WINDOW-76.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00349", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00349", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00350", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:77", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00350-keymap-item-3D-View-VIEW_3D-WINDOW-77.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00350.py -- tests/files/web/generated/M21-GAP-00350-keymap-item-3D-View-VIEW_3D-WINDOW-77.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00350", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00350", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00351", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:78", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00351-keymap-item-3D-View-VIEW_3D-WINDOW-78.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00351.py -- tests/files/web/generated/M21-GAP-00351-keymap-item-3D-View-VIEW_3D-WINDOW-78.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00351", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00351", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00352", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:79", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00352-keymap-item-3D-View-VIEW_3D-WINDOW-79.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00352.py -- tests/files/web/generated/M21-GAP-00352-keymap-item-3D-View-VIEW_3D-WINDOW-79.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00352", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00352", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00353", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00353-keymap-item-3D-View-VIEW_3D-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00353.py -- tests/files/web/generated/M21-GAP-00353-keymap-item-3D-View-VIEW_3D-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00353", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00353", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00354", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:80", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00354-keymap-item-3D-View-VIEW_3D-WINDOW-80.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00354.py -- tests/files/web/generated/M21-GAP-00354-keymap-item-3D-View-VIEW_3D-WINDOW-80.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00354", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00354", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00355", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:81", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00355-keymap-item-3D-View-VIEW_3D-WINDOW-81.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00355.py -- tests/files/web/generated/M21-GAP-00355-keymap-item-3D-View-VIEW_3D-WINDOW-81.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00355", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00355", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00356", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:82", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00356-keymap-item-3D-View-VIEW_3D-WINDOW-82.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00356.py -- tests/files/web/generated/M21-GAP-00356-keymap-item-3D-View-VIEW_3D-WINDOW-82.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00356", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00356", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00357", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:83", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00357-keymap-item-3D-View-VIEW_3D-WINDOW-83.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00357.py -- tests/files/web/generated/M21-GAP-00357-keymap-item-3D-View-VIEW_3D-WINDOW-83.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00357", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00357", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00358", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:84", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00358-keymap-item-3D-View-VIEW_3D-WINDOW-84.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00358.py -- tests/files/web/generated/M21-GAP-00358-keymap-item-3D-View-VIEW_3D-WINDOW-84.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00358", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00358", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00359", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:85", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00359-keymap-item-3D-View-VIEW_3D-WINDOW-85.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00359.py -- tests/files/web/generated/M21-GAP-00359-keymap-item-3D-View-VIEW_3D-WINDOW-85.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00359", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00359", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00360", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:86", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00360-keymap-item-3D-View-VIEW_3D-WINDOW-86.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00360.py -- tests/files/web/generated/M21-GAP-00360-keymap-item-3D-View-VIEW_3D-WINDOW-86.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00360", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00360", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00361", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:87", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00361-keymap-item-3D-View-VIEW_3D-WINDOW-87.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00361.py -- tests/files/web/generated/M21-GAP-00361-keymap-item-3D-View-VIEW_3D-WINDOW-87.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00361", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00361", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00362", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:88", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00362-keymap-item-3D-View-VIEW_3D-WINDOW-88.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00362.py -- tests/files/web/generated/M21-GAP-00362-keymap-item-3D-View-VIEW_3D-WINDOW-88.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00362", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00362", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00363", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:89", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00363-keymap-item-3D-View-VIEW_3D-WINDOW-89.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00363.py -- tests/files/web/generated/M21-GAP-00363-keymap-item-3D-View-VIEW_3D-WINDOW-89.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00363", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00363", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00364", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00364-keymap-item-3D-View-VIEW_3D-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00364.py -- tests/files/web/generated/M21-GAP-00364-keymap-item-3D-View-VIEW_3D-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00364", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00364", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00365", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:90", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00365-keymap-item-3D-View-VIEW_3D-WINDOW-90.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00365.py -- tests/files/web/generated/M21-GAP-00365-keymap-item-3D-View-VIEW_3D-WINDOW-90.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00365", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00365", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00366", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:91", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00366-keymap-item-3D-View-VIEW_3D-WINDOW-91.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00366.py -- tests/files/web/generated/M21-GAP-00366-keymap-item-3D-View-VIEW_3D-WINDOW-91.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00366", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00366", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00367", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:92", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00367-keymap-item-3D-View-VIEW_3D-WINDOW-92.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00367.py -- tests/files/web/generated/M21-GAP-00367-keymap-item-3D-View-VIEW_3D-WINDOW-92.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00367", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00367", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00368", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:93", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00368-keymap-item-3D-View-VIEW_3D-WINDOW-93.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00368.py -- tests/files/web/generated/M21-GAP-00368-keymap-item-3D-View-VIEW_3D-WINDOW-93.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00368", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00368", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00369", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:94", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00369-keymap-item-3D-View-VIEW_3D-WINDOW-94.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00369.py -- tests/files/web/generated/M21-GAP-00369-keymap-item-3D-View-VIEW_3D-WINDOW-94.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00369", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00369", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00370", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:95", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00370-keymap-item-3D-View-VIEW_3D-WINDOW-95.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00370.py -- tests/files/web/generated/M21-GAP-00370-keymap-item-3D-View-VIEW_3D-WINDOW-95.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00370", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00370", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00371", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:96", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00371-keymap-item-3D-View-VIEW_3D-WINDOW-96.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00371.py -- tests/files/web/generated/M21-GAP-00371-keymap-item-3D-View-VIEW_3D-WINDOW-96.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00371", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00371", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00372", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:97", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00372-keymap-item-3D-View-VIEW_3D-WINDOW-97.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00372.py -- tests/files/web/generated/M21-GAP-00372-keymap-item-3D-View-VIEW_3D-WINDOW-97.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00372", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00372", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00373", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:98", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00373-keymap-item-3D-View-VIEW_3D-WINDOW-98.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00373.py -- tests/files/web/generated/M21-GAP-00373-keymap-item-3D-View-VIEW_3D-WINDOW-98.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00373", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00373", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00374", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:99", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00374-keymap-item-3D-View-VIEW_3D-WINDOW-99.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00374.py -- tests/files/web/generated/M21-GAP-00374-keymap-item-3D-View-VIEW_3D-WINDOW-99.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00374", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00374", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00375", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00375-keymap-item-Animation-Channels-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00375.py -- tests/files/web/generated/M21-GAP-00375-keymap-item-Animation-Channels-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00375", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00375", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00376", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00376-keymap-item-Animation-Channels-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00376.py -- tests/files/web/generated/M21-GAP-00376-keymap-item-Animation-Channels-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00376", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00376", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00377", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00377-keymap-item-Animation-Channels-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00377.py -- tests/files/web/generated/M21-GAP-00377-keymap-item-Animation-Channels-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00377", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00377", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00378", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00378-keymap-item-Animation-Channels-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00378.py -- tests/files/web/generated/M21-GAP-00378-keymap-item-Animation-Channels-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00378", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00378", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00379", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00379-keymap-item-Animation-Channels-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00379.py -- tests/files/web/generated/M21-GAP-00379-keymap-item-Animation-Channels-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00379", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00379", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00380", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00380-keymap-item-Animation-Channels-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00380.py -- tests/files/web/generated/M21-GAP-00380-keymap-item-Animation-Channels-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00380", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00380", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00381", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00381-keymap-item-Animation-Channels-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00381.py -- tests/files/web/generated/M21-GAP-00381-keymap-item-Animation-Channels-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00381", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00381", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00382", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00382-keymap-item-Animation-Channels-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00382.py -- tests/files/web/generated/M21-GAP-00382-keymap-item-Animation-Channels-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00382", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00382", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00383", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00383-keymap-item-Animation-Channels-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00383.py -- tests/files/web/generated/M21-GAP-00383-keymap-item-Animation-Channels-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00383", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00383", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00384", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00384-keymap-item-Animation-Channels-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00384.py -- tests/files/web/generated/M21-GAP-00384-keymap-item-Animation-Channels-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00384", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00384", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00385", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00385-keymap-item-Animation-Channels-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00385.py -- tests/files/web/generated/M21-GAP-00385-keymap-item-Animation-Channels-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00385", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00385", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00386", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00386-keymap-item-Animation-Channels-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00386.py -- tests/files/web/generated/M21-GAP-00386-keymap-item-Animation-Channels-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00386", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00386", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00387", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00387-keymap-item-Animation-Channels-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00387.py -- tests/files/web/generated/M21-GAP-00387-keymap-item-Animation-Channels-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00387", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00387", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00388", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00388-keymap-item-Animation-Channels-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00388.py -- tests/files/web/generated/M21-GAP-00388-keymap-item-Animation-Channels-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00388", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00388", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00389", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00389-keymap-item-Animation-Channels-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00389.py -- tests/files/web/generated/M21-GAP-00389-keymap-item-Animation-Channels-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00389", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00389", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00390", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00390-keymap-item-Animation-Channels-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00390.py -- tests/files/web/generated/M21-GAP-00390-keymap-item-Animation-Channels-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00390", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00390", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00391", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00391-keymap-item-Animation-Channels-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00391.py -- tests/files/web/generated/M21-GAP-00391-keymap-item-Animation-Channels-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00391", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00391", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00392", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00392-keymap-item-Animation-Channels-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00392.py -- tests/files/web/generated/M21-GAP-00392-keymap-item-Animation-Channels-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00392", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00392", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00393", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00393-keymap-item-Animation-Channels-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00393.py -- tests/files/web/generated/M21-GAP-00393-keymap-item-Animation-Channels-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00393", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00393", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00394", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00394-keymap-item-Animation-Channels-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00394.py -- tests/files/web/generated/M21-GAP-00394-keymap-item-Animation-Channels-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00394", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00394", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00395", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00395-keymap-item-Animation-Channels-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00395.py -- tests/files/web/generated/M21-GAP-00395-keymap-item-Animation-Channels-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00395", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00395", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00396", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00396-keymap-item-Animation-Channels-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00396.py -- tests/files/web/generated/M21-GAP-00396-keymap-item-Animation-Channels-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00396", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00396", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00397", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00397-keymap-item-Animation-Channels-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00397.py -- tests/files/web/generated/M21-GAP-00397-keymap-item-Animation-Channels-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00397", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00397", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00398", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00398-keymap-item-Animation-Channels-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00398.py -- tests/files/web/generated/M21-GAP-00398-keymap-item-Animation-Channels-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00398", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00398", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00399", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00399-keymap-item-Animation-Channels-EMPTY-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00399.py -- tests/files/web/generated/M21-GAP-00399-keymap-item-Animation-Channels-EMPTY-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00399", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00399", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00400", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00400-keymap-item-Animation-Channels-EMPTY-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00400.py -- tests/files/web/generated/M21-GAP-00400-keymap-item-Animation-Channels-EMPTY-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00400", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00400", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00401", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00401-keymap-item-Animation-Channels-EMPTY-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00401.py -- tests/files/web/generated/M21-GAP-00401-keymap-item-Animation-Channels-EMPTY-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00401", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00401", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00402", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00402-keymap-item-Animation-Channels-EMPTY-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00402.py -- tests/files/web/generated/M21-GAP-00402-keymap-item-Animation-Channels-EMPTY-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00402", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00402", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00403", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00403-keymap-item-Animation-Channels-EMPTY-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00403.py -- tests/files/web/generated/M21-GAP-00403-keymap-item-Animation-Channels-EMPTY-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00403", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00403", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00404", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00404-keymap-item-Animation-Channels-EMPTY-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00404.py -- tests/files/web/generated/M21-GAP-00404-keymap-item-Animation-Channels-EMPTY-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00404", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00404", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00405", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00405-keymap-item-Animation-Channels-EMPTY-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00405.py -- tests/files/web/generated/M21-GAP-00405-keymap-item-Animation-Channels-EMPTY-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00405", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00405", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00406", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00406-keymap-item-Animation-Channels-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00406.py -- tests/files/web/generated/M21-GAP-00406-keymap-item-Animation-Channels-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00406", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00406", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00407", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00407-keymap-item-Animation-Channels-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00407.py -- tests/files/web/generated/M21-GAP-00407-keymap-item-Animation-Channels-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00407", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00407", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00408", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00408-keymap-item-Animation-Channels-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00408.py -- tests/files/web/generated/M21-GAP-00408-keymap-item-Animation-Channels-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00408", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00408", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00409", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00409-keymap-item-Animation-Channels-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00409.py -- tests/files/web/generated/M21-GAP-00409-keymap-item-Animation-Channels-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00409", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00409", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00410", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00410-keymap-item-Animation-Channels-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00410.py -- tests/files/web/generated/M21-GAP-00410-keymap-item-Animation-Channels-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00410", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00410", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00411", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00411-keymap-item-Animation-Channels-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00411.py -- tests/files/web/generated/M21-GAP-00411-keymap-item-Animation-Channels-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00411", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00411", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00412", + "gapId": "keymap-item:Animation:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00412-keymap-item-Animation-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00412.py -- tests/files/web/generated/M21-GAP-00412-keymap-item-Animation-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00412", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00412", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00413", + "gapId": "keymap-item:Animation:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00413-keymap-item-Animation-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00413.py -- tests/files/web/generated/M21-GAP-00413-keymap-item-Animation-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00413", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00413", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00414", + "gapId": "keymap-item:Animation:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00414-keymap-item-Animation-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00414.py -- tests/files/web/generated/M21-GAP-00414-keymap-item-Animation-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00414", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00414", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00415", + "gapId": "keymap-item:Animation:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00415-keymap-item-Animation-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00415.py -- tests/files/web/generated/M21-GAP-00415-keymap-item-Animation-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00415", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00415", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00416", + "gapId": "keymap-item:Animation:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00416-keymap-item-Animation-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00416.py -- tests/files/web/generated/M21-GAP-00416-keymap-item-Animation-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00416", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00416", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00417", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00417-keymap-item-Armature-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00417.py -- tests/files/web/generated/M21-GAP-00417-keymap-item-Armature-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00417", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00417", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00418", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00418-keymap-item-Armature-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00418.py -- tests/files/web/generated/M21-GAP-00418-keymap-item-Armature-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00418", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00418", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00419", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00419-keymap-item-Armature-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00419.py -- tests/files/web/generated/M21-GAP-00419-keymap-item-Armature-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00419", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00419", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00420", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00420-keymap-item-Armature-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00420.py -- tests/files/web/generated/M21-GAP-00420-keymap-item-Armature-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00420", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00420", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00421", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00421-keymap-item-Armature-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00421.py -- tests/files/web/generated/M21-GAP-00421-keymap-item-Armature-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00421", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00421", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00422", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00422-keymap-item-Armature-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00422.py -- tests/files/web/generated/M21-GAP-00422-keymap-item-Armature-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00422", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00422", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00423", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00423-keymap-item-Armature-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00423.py -- tests/files/web/generated/M21-GAP-00423-keymap-item-Armature-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00423", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00423", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00424", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00424-keymap-item-Armature-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00424.py -- tests/files/web/generated/M21-GAP-00424-keymap-item-Armature-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00424", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00424", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00425", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00425-keymap-item-Armature-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00425.py -- tests/files/web/generated/M21-GAP-00425-keymap-item-Armature-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00425", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00425", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00426", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00426-keymap-item-Armature-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00426.py -- tests/files/web/generated/M21-GAP-00426-keymap-item-Armature-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00426", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00426", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00427", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00427-keymap-item-Armature-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00427.py -- tests/files/web/generated/M21-GAP-00427-keymap-item-Armature-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00427", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00427", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00428", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00428-keymap-item-Armature-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00428.py -- tests/files/web/generated/M21-GAP-00428-keymap-item-Armature-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00428", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00428", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00429", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00429-keymap-item-Armature-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00429.py -- tests/files/web/generated/M21-GAP-00429-keymap-item-Armature-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00429", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00429", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00430", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00430-keymap-item-Armature-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00430.py -- tests/files/web/generated/M21-GAP-00430-keymap-item-Armature-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00430", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00430", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00431", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00431-keymap-item-Armature-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00431.py -- tests/files/web/generated/M21-GAP-00431-keymap-item-Armature-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00431", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00431", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00432", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00432-keymap-item-Armature-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00432.py -- tests/files/web/generated/M21-GAP-00432-keymap-item-Armature-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00432", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00432", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00433", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00433-keymap-item-Armature-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00433.py -- tests/files/web/generated/M21-GAP-00433-keymap-item-Armature-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00433", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00433", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00434", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00434-keymap-item-Armature-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00434.py -- tests/files/web/generated/M21-GAP-00434-keymap-item-Armature-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00434", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00434", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00435", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00435-keymap-item-Armature-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00435.py -- tests/files/web/generated/M21-GAP-00435-keymap-item-Armature-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00435", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00435", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00436", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00436-keymap-item-Armature-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00436.py -- tests/files/web/generated/M21-GAP-00436-keymap-item-Armature-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00436", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00436", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00437", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00437-keymap-item-Armature-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00437.py -- tests/files/web/generated/M21-GAP-00437-keymap-item-Armature-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00437", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00437", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00438", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00438-keymap-item-Armature-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00438.py -- tests/files/web/generated/M21-GAP-00438-keymap-item-Armature-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00438", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00438", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00439", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00439-keymap-item-Armature-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00439.py -- tests/files/web/generated/M21-GAP-00439-keymap-item-Armature-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00439", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00439", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00440", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00440-keymap-item-Armature-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00440.py -- tests/files/web/generated/M21-GAP-00440-keymap-item-Armature-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00440", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00440", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00441", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00441-keymap-item-Armature-EMPTY-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00441.py -- tests/files/web/generated/M21-GAP-00441-keymap-item-Armature-EMPTY-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00441", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00441", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00442", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00442-keymap-item-Armature-EMPTY-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00442.py -- tests/files/web/generated/M21-GAP-00442-keymap-item-Armature-EMPTY-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00442", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00442", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00443", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00443-keymap-item-Armature-EMPTY-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00443.py -- tests/files/web/generated/M21-GAP-00443-keymap-item-Armature-EMPTY-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00443", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00443", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00444", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00444-keymap-item-Armature-EMPTY-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00444.py -- tests/files/web/generated/M21-GAP-00444-keymap-item-Armature-EMPTY-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00444", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00444", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00445", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00445-keymap-item-Armature-EMPTY-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00445.py -- tests/files/web/generated/M21-GAP-00445-keymap-item-Armature-EMPTY-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00445", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00445", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00446", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00446-keymap-item-Armature-EMPTY-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00446.py -- tests/files/web/generated/M21-GAP-00446-keymap-item-Armature-EMPTY-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00446", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00446", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00447", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00447-keymap-item-Armature-EMPTY-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00447.py -- tests/files/web/generated/M21-GAP-00447-keymap-item-Armature-EMPTY-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00447", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00447", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00448", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00448-keymap-item-Armature-EMPTY-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00448.py -- tests/files/web/generated/M21-GAP-00448-keymap-item-Armature-EMPTY-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00448", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00448", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00449", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00449-keymap-item-Armature-EMPTY-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00449.py -- tests/files/web/generated/M21-GAP-00449-keymap-item-Armature-EMPTY-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00449", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00449", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00450", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00450-keymap-item-Armature-EMPTY-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00450.py -- tests/files/web/generated/M21-GAP-00450-keymap-item-Armature-EMPTY-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00450", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00450", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00451", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00451-keymap-item-Armature-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00451.py -- tests/files/web/generated/M21-GAP-00451-keymap-item-Armature-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00451", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00451", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00452", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00452-keymap-item-Armature-EMPTY-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00452.py -- tests/files/web/generated/M21-GAP-00452-keymap-item-Armature-EMPTY-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00452", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00452", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00453", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00453-keymap-item-Armature-EMPTY-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00453.py -- tests/files/web/generated/M21-GAP-00453-keymap-item-Armature-EMPTY-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00453", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00453", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00454", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00454-keymap-item-Armature-EMPTY-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00454.py -- tests/files/web/generated/M21-GAP-00454-keymap-item-Armature-EMPTY-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00454", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00454", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00455", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00455-keymap-item-Armature-EMPTY-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00455.py -- tests/files/web/generated/M21-GAP-00455-keymap-item-Armature-EMPTY-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00455", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00455", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00456", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00456-keymap-item-Armature-EMPTY-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00456.py -- tests/files/web/generated/M21-GAP-00456-keymap-item-Armature-EMPTY-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00456", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00456", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00457", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00457-keymap-item-Armature-EMPTY-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00457.py -- tests/files/web/generated/M21-GAP-00457-keymap-item-Armature-EMPTY-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00457", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00457", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00458", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00458-keymap-item-Armature-EMPTY-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00458.py -- tests/files/web/generated/M21-GAP-00458-keymap-item-Armature-EMPTY-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00458", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00458", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00459", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00459-keymap-item-Armature-EMPTY-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00459.py -- tests/files/web/generated/M21-GAP-00459-keymap-item-Armature-EMPTY-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00459", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00459", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00460", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00460-keymap-item-Armature-EMPTY-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00460.py -- tests/files/web/generated/M21-GAP-00460-keymap-item-Armature-EMPTY-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00460", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00460", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00461", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00461-keymap-item-Armature-EMPTY-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00461.py -- tests/files/web/generated/M21-GAP-00461-keymap-item-Armature-EMPTY-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00461", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00461", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00462", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00462-keymap-item-Armature-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00462.py -- tests/files/web/generated/M21-GAP-00462-keymap-item-Armature-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00462", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00462", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00463", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00463-keymap-item-Armature-EMPTY-WINDOW-50.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00463.py -- tests/files/web/generated/M21-GAP-00463-keymap-item-Armature-EMPTY-WINDOW-50.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00463", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00463", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00464", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00464-keymap-item-Armature-EMPTY-WINDOW-51.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00464.py -- tests/files/web/generated/M21-GAP-00464-keymap-item-Armature-EMPTY-WINDOW-51.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00464", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00464", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00465", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00465-keymap-item-Armature-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00465.py -- tests/files/web/generated/M21-GAP-00465-keymap-item-Armature-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00465", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00465", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00466", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00466-keymap-item-Armature-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00466.py -- tests/files/web/generated/M21-GAP-00466-keymap-item-Armature-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00466", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00466", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00467", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00467-keymap-item-Armature-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00467.py -- tests/files/web/generated/M21-GAP-00467-keymap-item-Armature-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00467", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00467", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00468", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00468-keymap-item-Armature-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00468.py -- tests/files/web/generated/M21-GAP-00468-keymap-item-Armature-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00468", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00468", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00469", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00469-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00469.py -- tests/files/web/generated/M21-GAP-00469-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00469", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00469", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00470", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00470-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00470.py -- tests/files/web/generated/M21-GAP-00470-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00470", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00470", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00471", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00471-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00471.py -- tests/files/web/generated/M21-GAP-00471-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00471", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00471", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00472", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00472-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00472.py -- tests/files/web/generated/M21-GAP-00472-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00472", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00472", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00473", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00473-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00473.py -- tests/files/web/generated/M21-GAP-00473-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00473", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00473", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00474", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00474-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00474.py -- tests/files/web/generated/M21-GAP-00474-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00474", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00474", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00475", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00475-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00475.py -- tests/files/web/generated/M21-GAP-00475-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00475", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00475", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00476", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00476-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00476.py -- tests/files/web/generated/M21-GAP-00476-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00476", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00476", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00477", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00477-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00477.py -- tests/files/web/generated/M21-GAP-00477-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00477", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00477", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00478", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00478-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00478.py -- tests/files/web/generated/M21-GAP-00478-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00478", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00478", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00479", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00479-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00479.py -- tests/files/web/generated/M21-GAP-00479-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00479", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00479", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00480", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00480-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00480.py -- tests/files/web/generated/M21-GAP-00480-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00480", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00480", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00481", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00481-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00481.py -- tests/files/web/generated/M21-GAP-00481-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00481", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00481", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00482", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00482-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00482.py -- tests/files/web/generated/M21-GAP-00482-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00482", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00482", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00483", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00483-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00483.py -- tests/files/web/generated/M21-GAP-00483-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00483", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00483", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00484", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00484-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00484.py -- tests/files/web/generated/M21-GAP-00484-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00484", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00484", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00485", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00485-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00485.py -- tests/files/web/generated/M21-GAP-00485-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00485", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00485", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00486", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00486-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00486.py -- tests/files/web/generated/M21-GAP-00486-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00486", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00486", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00487", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00487-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00487.py -- tests/files/web/generated/M21-GAP-00487-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00487", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00487", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00488", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00488-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00488.py -- tests/files/web/generated/M21-GAP-00488-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00488", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00488", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00489", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00489-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00489.py -- tests/files/web/generated/M21-GAP-00489-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00489", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00489", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00490", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00490-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00490.py -- tests/files/web/generated/M21-GAP-00490-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00490", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00490", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00491", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00491-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00491.py -- tests/files/web/generated/M21-GAP-00491-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00491", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00491", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00492", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00492-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00492.py -- tests/files/web/generated/M21-GAP-00492-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00492", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00492", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00493", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00493-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00493.py -- tests/files/web/generated/M21-GAP-00493-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00493", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00493", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00494", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00494-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00494.py -- tests/files/web/generated/M21-GAP-00494-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00494", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00494", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00495", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00495-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00495.py -- tests/files/web/generated/M21-GAP-00495-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00495", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00495", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00496", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00496-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00496.py -- tests/files/web/generated/M21-GAP-00496-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00496", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00496", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00497", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00497-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00497.py -- tests/files/web/generated/M21-GAP-00497-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00497", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00497", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00498", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00498-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00498.py -- tests/files/web/generated/M21-GAP-00498-keymap-item-Bevel-Modal-Map-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00498", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00498", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00499", + "gapId": "keymap-item:Clip Dopesheet Editor:CLIP_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00499-keymap-item-Clip-Dopesheet-Editor-CLIP_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00499.py -- tests/files/web/generated/M21-GAP-00499-keymap-item-Clip-Dopesheet-Editor-CLIP_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00499", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00499", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00500", + "gapId": "keymap-item:Clip Dopesheet Editor:CLIP_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00500-keymap-item-Clip-Dopesheet-Editor-CLIP_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00500.py -- tests/files/web/generated/M21-GAP-00500-keymap-item-Clip-Dopesheet-Editor-CLIP_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00500", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00500", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00501", + "gapId": "keymap-item:Clip Dopesheet Editor:CLIP_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00501-keymap-item-Clip-Dopesheet-Editor-CLIP_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00501.py -- tests/files/web/generated/M21-GAP-00501-keymap-item-Clip-Dopesheet-Editor-CLIP_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00501", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00501", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00502", + "gapId": "keymap-item:Clip Dopesheet Editor:CLIP_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00502-keymap-item-Clip-Dopesheet-Editor-CLIP_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00502.py -- tests/files/web/generated/M21-GAP-00502-keymap-item-Clip-Dopesheet-Editor-CLIP_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00502", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00502", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00503", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00503-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00503.py -- tests/files/web/generated/M21-GAP-00503-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00503", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00503", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00504", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00504-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00504.py -- tests/files/web/generated/M21-GAP-00504-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00504", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00504", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00505", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00505-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00505.py -- tests/files/web/generated/M21-GAP-00505-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00505", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00505", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00506", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00506-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00506.py -- tests/files/web/generated/M21-GAP-00506-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00506", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00506", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00507", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00507-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00507.py -- tests/files/web/generated/M21-GAP-00507-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00507", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00507", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00508", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00508-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00508.py -- tests/files/web/generated/M21-GAP-00508-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00508", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00508", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00509", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00509-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00509.py -- tests/files/web/generated/M21-GAP-00509-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00509", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00509", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00510", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00510-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00510.py -- tests/files/web/generated/M21-GAP-00510-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00510", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00510", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00511", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00511-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00511.py -- tests/files/web/generated/M21-GAP-00511-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00511", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00511", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00512", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00512-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00512.py -- tests/files/web/generated/M21-GAP-00512-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00512", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00512", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00513", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00513-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00513.py -- tests/files/web/generated/M21-GAP-00513-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00513", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00513", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00514", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00514-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00514.py -- tests/files/web/generated/M21-GAP-00514-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00514", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00514", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00515", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00515-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00515.py -- tests/files/web/generated/M21-GAP-00515-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00515", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00515", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00516", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00516-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00516.py -- tests/files/web/generated/M21-GAP-00516-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00516", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00516", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00517", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00517-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00517.py -- tests/files/web/generated/M21-GAP-00517-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00517", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00517", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00518", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00518-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00518.py -- tests/files/web/generated/M21-GAP-00518-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00518", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00518", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00519", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00519-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00519.py -- tests/files/web/generated/M21-GAP-00519-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00519", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00519", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00520", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00520-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00520.py -- tests/files/web/generated/M21-GAP-00520-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00520", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00520", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00521", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00521-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00521.py -- tests/files/web/generated/M21-GAP-00521-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00521", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00521", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00522", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00522-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00522.py -- tests/files/web/generated/M21-GAP-00522-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00522", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00522", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00523", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00523-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00523.py -- tests/files/web/generated/M21-GAP-00523-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00523", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00523", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00524", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00524-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00524.py -- tests/files/web/generated/M21-GAP-00524-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00524", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00524", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00525", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00525-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00525.py -- tests/files/web/generated/M21-GAP-00525-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00525", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00525", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00526", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00526-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00526.py -- tests/files/web/generated/M21-GAP-00526-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00526", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00526", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00527", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00527-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00527.py -- tests/files/web/generated/M21-GAP-00527-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00527", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00527", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00528", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00528-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00528.py -- tests/files/web/generated/M21-GAP-00528-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00528", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00528", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00529", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00529-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00529.py -- tests/files/web/generated/M21-GAP-00529-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00529", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00529", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00530", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00530-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00530.py -- tests/files/web/generated/M21-GAP-00530-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00530", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00530", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00531", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00531-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00531.py -- tests/files/web/generated/M21-GAP-00531-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00531", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00531", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00532", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00532-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00532.py -- tests/files/web/generated/M21-GAP-00532-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00532", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00532", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00533", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00533-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00533.py -- tests/files/web/generated/M21-GAP-00533-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00533", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00533", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00534", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00534-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00534.py -- tests/files/web/generated/M21-GAP-00534-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00534", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00534", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00535", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00535-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00535.py -- tests/files/web/generated/M21-GAP-00535-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00535", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00535", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00536", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00536-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00536.py -- tests/files/web/generated/M21-GAP-00536-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00536", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00536", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00537", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00537-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00537.py -- tests/files/web/generated/M21-GAP-00537-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00537", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00537", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00538", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00538-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00538.py -- tests/files/web/generated/M21-GAP-00538-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00538", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00538", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00539", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00539-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00539.py -- tests/files/web/generated/M21-GAP-00539-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00539", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00539", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00540", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00540-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00540.py -- tests/files/web/generated/M21-GAP-00540-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00540", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00540", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00541", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00541-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00541.py -- tests/files/web/generated/M21-GAP-00541-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00541", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00541", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00542", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00542-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00542.py -- tests/files/web/generated/M21-GAP-00542-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00542", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00542", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00543", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00543-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00543.py -- tests/files/web/generated/M21-GAP-00543-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00543", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00543", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00544", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00544-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00544.py -- tests/files/web/generated/M21-GAP-00544-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00544", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00544", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00545", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00545-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00545.py -- tests/files/web/generated/M21-GAP-00545-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00545", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00545", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00546", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00546-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00546.py -- tests/files/web/generated/M21-GAP-00546-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00546", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00546", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00547", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00547-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00547.py -- tests/files/web/generated/M21-GAP-00547-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00547", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00547", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00548", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00548-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00548.py -- tests/files/web/generated/M21-GAP-00548-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00548", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00548", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00549", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00549-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-50.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00549.py -- tests/files/web/generated/M21-GAP-00549-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-50.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00549", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00549", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00550", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:51", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00550-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-51.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00550.py -- tests/files/web/generated/M21-GAP-00550-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-51.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00550", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00550", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00551", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:52", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00551-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-52.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00551.py -- tests/files/web/generated/M21-GAP-00551-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-52.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00551", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00551", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00552", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:53", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00552-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-53.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00552.py -- tests/files/web/generated/M21-GAP-00552-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-53.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00552", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00552", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00553", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:54", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00553-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-54.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00553.py -- tests/files/web/generated/M21-GAP-00553-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-54.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00553", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00553", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00554", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:55", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00554-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-55.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00554.py -- tests/files/web/generated/M21-GAP-00554-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-55.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00554", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00554", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00555", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:56", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00555-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-56.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00555.py -- tests/files/web/generated/M21-GAP-00555-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-56.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00555", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00555", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00556", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:57", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00556-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-57.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00556.py -- tests/files/web/generated/M21-GAP-00556-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-57.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00556", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00556", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00557", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:58", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00557-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-58.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00557.py -- tests/files/web/generated/M21-GAP-00557-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-58.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00557", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00557", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00558", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:59", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00558-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-59.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00558.py -- tests/files/web/generated/M21-GAP-00558-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-59.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00558", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00558", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00559", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00559-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00559.py -- tests/files/web/generated/M21-GAP-00559-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00559", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00559", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00560", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:60", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00560-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-60.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00560.py -- tests/files/web/generated/M21-GAP-00560-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-60.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00560", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00560", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00561", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:61", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00561-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-61.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00561.py -- tests/files/web/generated/M21-GAP-00561-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-61.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00561", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00561", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00562", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:62", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00562-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-62.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00562.py -- tests/files/web/generated/M21-GAP-00562-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-62.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00562", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00562", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00563", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:63", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00563-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-63.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00563.py -- tests/files/web/generated/M21-GAP-00563-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-63.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00563", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00563", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00564", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:64", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00564-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-64.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00564.py -- tests/files/web/generated/M21-GAP-00564-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-64.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00564", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00564", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00565", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:65", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00565-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-65.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00565.py -- tests/files/web/generated/M21-GAP-00565-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-65.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00565", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00565", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00566", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:66", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00566-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-66.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00566.py -- tests/files/web/generated/M21-GAP-00566-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-66.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00566", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00566", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00567", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:67", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00567-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-67.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00567.py -- tests/files/web/generated/M21-GAP-00567-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-67.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00567", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00567", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00568", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:68", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00568-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-68.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00568.py -- tests/files/web/generated/M21-GAP-00568-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-68.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00568", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00568", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00569", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:69", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00569-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-69.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00569.py -- tests/files/web/generated/M21-GAP-00569-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-69.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00569", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00569", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00570", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00570-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00570.py -- tests/files/web/generated/M21-GAP-00570-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00570", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00570", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00571", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:70", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00571-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-70.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00571.py -- tests/files/web/generated/M21-GAP-00571-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-70.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00571", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00571", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00572", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:71", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00572-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-71.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00572.py -- tests/files/web/generated/M21-GAP-00572-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-71.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00572", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00572", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00573", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:72", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00573-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-72.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00573.py -- tests/files/web/generated/M21-GAP-00573-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-72.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00573", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00573", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00574", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:73", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00574-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-73.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00574.py -- tests/files/web/generated/M21-GAP-00574-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-73.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00574", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00574", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00575", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:74", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00575-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-74.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00575.py -- tests/files/web/generated/M21-GAP-00575-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-74.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00575", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00575", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00576", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:75", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00576-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-75.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00576.py -- tests/files/web/generated/M21-GAP-00576-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-75.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00576", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00576", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00577", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00577-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00577.py -- tests/files/web/generated/M21-GAP-00577-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00577", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00577", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00578", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00578-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00578.py -- tests/files/web/generated/M21-GAP-00578-keymap-item-Clip-Editor-CLIP_EDITOR-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00578", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00578", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00579", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00579-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00579.py -- tests/files/web/generated/M21-GAP-00579-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00579", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00579", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00580", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00580-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00580.py -- tests/files/web/generated/M21-GAP-00580-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00580", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00580", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00581", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00581-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00581.py -- tests/files/web/generated/M21-GAP-00581-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00581", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00581", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00582", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00582-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00582.py -- tests/files/web/generated/M21-GAP-00582-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00582", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00582", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00583", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00583-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00583.py -- tests/files/web/generated/M21-GAP-00583-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00583", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00583", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00584", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00584-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00584.py -- tests/files/web/generated/M21-GAP-00584-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00584", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00584", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00585", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00585-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00585.py -- tests/files/web/generated/M21-GAP-00585-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00585", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00585", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00586", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00586-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00586.py -- tests/files/web/generated/M21-GAP-00586-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00586", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00586", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00587", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00587-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00587.py -- tests/files/web/generated/M21-GAP-00587-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00587", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00587", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00588", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00588-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00588.py -- tests/files/web/generated/M21-GAP-00588-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00588", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00588", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00589", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00589-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00589.py -- tests/files/web/generated/M21-GAP-00589-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00589", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00589", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00590", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00590-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00590.py -- tests/files/web/generated/M21-GAP-00590-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00590", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00590", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00591", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00591-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00591.py -- tests/files/web/generated/M21-GAP-00591-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00591", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00591", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00592", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00592-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00592.py -- tests/files/web/generated/M21-GAP-00592-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00592", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00592", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00593", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00593-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00593.py -- tests/files/web/generated/M21-GAP-00593-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00593", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00593", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00594", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00594-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00594.py -- tests/files/web/generated/M21-GAP-00594-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00594", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00594", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00595", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00595-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00595.py -- tests/files/web/generated/M21-GAP-00595-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00595", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00595", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00596", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00596-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00596.py -- tests/files/web/generated/M21-GAP-00596-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00596", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00596", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00597", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00597-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00597.py -- tests/files/web/generated/M21-GAP-00597-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00597", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00597", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00598", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00598-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00598.py -- tests/files/web/generated/M21-GAP-00598-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00598", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00598", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00599", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00599-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00599.py -- tests/files/web/generated/M21-GAP-00599-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00599", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00599", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00600", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00600-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00600.py -- tests/files/web/generated/M21-GAP-00600-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00600", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00600", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00601", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00601-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00601.py -- tests/files/web/generated/M21-GAP-00601-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00601", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00601", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00602", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00602-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00602.py -- tests/files/web/generated/M21-GAP-00602-keymap-item-Clip-Graph-Editor-CLIP_EDITOR-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00602", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00602", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00603", + "gapId": "keymap-item:Clip Time Scrub:CLIP_EDITOR:PREVIEW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00603-keymap-item-Clip-Time-Scrub-CLIP_EDITOR-PREVIEW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00603.py -- tests/files/web/generated/M21-GAP-00603-keymap-item-Clip-Time-Scrub-CLIP_EDITOR-PREVIEW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00603", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00603", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00604", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00604-keymap-item-Clip-CLIP_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00604.py -- tests/files/web/generated/M21-GAP-00604-keymap-item-Clip-CLIP_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00604", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00604", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00605", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00605-keymap-item-Clip-CLIP_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00605.py -- tests/files/web/generated/M21-GAP-00605-keymap-item-Clip-CLIP_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00605", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00605", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00606", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00606-keymap-item-Clip-CLIP_EDITOR-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00606.py -- tests/files/web/generated/M21-GAP-00606-keymap-item-Clip-CLIP_EDITOR-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00606", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00606", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00607", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00607-keymap-item-Clip-CLIP_EDITOR-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00607.py -- tests/files/web/generated/M21-GAP-00607-keymap-item-Clip-CLIP_EDITOR-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00607", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00607", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00608", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00608-keymap-item-Clip-CLIP_EDITOR-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00608.py -- tests/files/web/generated/M21-GAP-00608-keymap-item-Clip-CLIP_EDITOR-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00608", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00608", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00609", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00609-keymap-item-Clip-CLIP_EDITOR-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00609.py -- tests/files/web/generated/M21-GAP-00609-keymap-item-Clip-CLIP_EDITOR-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00609", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00609", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00610", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00610-keymap-item-Clip-CLIP_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00610.py -- tests/files/web/generated/M21-GAP-00610-keymap-item-Clip-CLIP_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00610", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00610", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00611", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00611-keymap-item-Clip-CLIP_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00611.py -- tests/files/web/generated/M21-GAP-00611-keymap-item-Clip-CLIP_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00611", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00611", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00612", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00612-keymap-item-Clip-CLIP_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00612.py -- tests/files/web/generated/M21-GAP-00612-keymap-item-Clip-CLIP_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00612", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00612", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00613", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00613-keymap-item-Clip-CLIP_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00613.py -- tests/files/web/generated/M21-GAP-00613-keymap-item-Clip-CLIP_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00613", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00613", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00614", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00614-keymap-item-Clip-CLIP_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00614.py -- tests/files/web/generated/M21-GAP-00614-keymap-item-Clip-CLIP_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00614", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00614", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00615", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00615-keymap-item-Clip-CLIP_EDITOR-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00615.py -- tests/files/web/generated/M21-GAP-00615-keymap-item-Clip-CLIP_EDITOR-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00615", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00615", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00616", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00616-keymap-item-Clip-CLIP_EDITOR-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00616.py -- tests/files/web/generated/M21-GAP-00616-keymap-item-Clip-CLIP_EDITOR-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00616", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00616", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00617", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00617-keymap-item-Clip-CLIP_EDITOR-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00617.py -- tests/files/web/generated/M21-GAP-00617-keymap-item-Clip-CLIP_EDITOR-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00617", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00617", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00618", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00618-keymap-item-Console-CONSOLE-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00618.py -- tests/files/web/generated/M21-GAP-00618-keymap-item-Console-CONSOLE-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00618", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00618", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00619", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00619-keymap-item-Console-CONSOLE-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00619.py -- tests/files/web/generated/M21-GAP-00619-keymap-item-Console-CONSOLE-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00619", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00619", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00620", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00620-keymap-item-Console-CONSOLE-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00620.py -- tests/files/web/generated/M21-GAP-00620-keymap-item-Console-CONSOLE-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00620", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00620", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00621", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00621-keymap-item-Console-CONSOLE-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00621.py -- tests/files/web/generated/M21-GAP-00621-keymap-item-Console-CONSOLE-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00621", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00621", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00622", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00622-keymap-item-Console-CONSOLE-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00622.py -- tests/files/web/generated/M21-GAP-00622-keymap-item-Console-CONSOLE-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00622", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00622", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00623", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00623-keymap-item-Console-CONSOLE-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00623.py -- tests/files/web/generated/M21-GAP-00623-keymap-item-Console-CONSOLE-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00623", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00623", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00624", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00624-keymap-item-Console-CONSOLE-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00624.py -- tests/files/web/generated/M21-GAP-00624-keymap-item-Console-CONSOLE-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00624", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00624", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00625", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00625-keymap-item-Console-CONSOLE-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00625.py -- tests/files/web/generated/M21-GAP-00625-keymap-item-Console-CONSOLE-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00625", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00625", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00626", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00626-keymap-item-Console-CONSOLE-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00626.py -- tests/files/web/generated/M21-GAP-00626-keymap-item-Console-CONSOLE-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00626", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00626", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00627", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00627-keymap-item-Console-CONSOLE-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00627.py -- tests/files/web/generated/M21-GAP-00627-keymap-item-Console-CONSOLE-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00627", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00627", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00628", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00628-keymap-item-Console-CONSOLE-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00628.py -- tests/files/web/generated/M21-GAP-00628-keymap-item-Console-CONSOLE-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00628", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00628", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00629", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00629-keymap-item-Console-CONSOLE-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00629.py -- tests/files/web/generated/M21-GAP-00629-keymap-item-Console-CONSOLE-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00629", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00629", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00630", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00630-keymap-item-Console-CONSOLE-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00630.py -- tests/files/web/generated/M21-GAP-00630-keymap-item-Console-CONSOLE-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00630", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00630", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00631", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00631-keymap-item-Console-CONSOLE-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00631.py -- tests/files/web/generated/M21-GAP-00631-keymap-item-Console-CONSOLE-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00631", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00631", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00632", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00632-keymap-item-Console-CONSOLE-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00632.py -- tests/files/web/generated/M21-GAP-00632-keymap-item-Console-CONSOLE-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00632", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00632", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00633", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00633-keymap-item-Console-CONSOLE-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00633.py -- tests/files/web/generated/M21-GAP-00633-keymap-item-Console-CONSOLE-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00633", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00633", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00634", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00634-keymap-item-Console-CONSOLE-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00634.py -- tests/files/web/generated/M21-GAP-00634-keymap-item-Console-CONSOLE-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00634", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00634", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00635", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00635-keymap-item-Console-CONSOLE-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00635.py -- tests/files/web/generated/M21-GAP-00635-keymap-item-Console-CONSOLE-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00635", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00635", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00636", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00636-keymap-item-Console-CONSOLE-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00636.py -- tests/files/web/generated/M21-GAP-00636-keymap-item-Console-CONSOLE-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00636", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00636", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00637", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00637-keymap-item-Console-CONSOLE-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00637.py -- tests/files/web/generated/M21-GAP-00637-keymap-item-Console-CONSOLE-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00637", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00637", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00638", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00638-keymap-item-Console-CONSOLE-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00638.py -- tests/files/web/generated/M21-GAP-00638-keymap-item-Console-CONSOLE-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00638", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00638", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00639", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00639-keymap-item-Console-CONSOLE-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00639.py -- tests/files/web/generated/M21-GAP-00639-keymap-item-Console-CONSOLE-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00639", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00639", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00640", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00640-keymap-item-Console-CONSOLE-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00640.py -- tests/files/web/generated/M21-GAP-00640-keymap-item-Console-CONSOLE-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00640", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00640", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00641", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00641-keymap-item-Console-CONSOLE-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00641.py -- tests/files/web/generated/M21-GAP-00641-keymap-item-Console-CONSOLE-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00641", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00641", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00642", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00642-keymap-item-Console-CONSOLE-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00642.py -- tests/files/web/generated/M21-GAP-00642-keymap-item-Console-CONSOLE-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00642", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00642", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00643", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00643-keymap-item-Console-CONSOLE-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00643.py -- tests/files/web/generated/M21-GAP-00643-keymap-item-Console-CONSOLE-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00643", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00643", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00644", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00644-keymap-item-Console-CONSOLE-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00644.py -- tests/files/web/generated/M21-GAP-00644-keymap-item-Console-CONSOLE-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00644", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00644", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00645", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00645-keymap-item-Console-CONSOLE-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00645.py -- tests/files/web/generated/M21-GAP-00645-keymap-item-Console-CONSOLE-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00645", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00645", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00646", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00646-keymap-item-Console-CONSOLE-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00646.py -- tests/files/web/generated/M21-GAP-00646-keymap-item-Console-CONSOLE-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00646", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00646", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00647", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00647-keymap-item-Console-CONSOLE-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00647.py -- tests/files/web/generated/M21-GAP-00647-keymap-item-Console-CONSOLE-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00647", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00647", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00648", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00648-keymap-item-Console-CONSOLE-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00648.py -- tests/files/web/generated/M21-GAP-00648-keymap-item-Console-CONSOLE-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00648", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00648", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00649", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00649-keymap-item-Console-CONSOLE-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00649.py -- tests/files/web/generated/M21-GAP-00649-keymap-item-Console-CONSOLE-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00649", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00649", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00650", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00650-keymap-item-Console-CONSOLE-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00650.py -- tests/files/web/generated/M21-GAP-00650-keymap-item-Console-CONSOLE-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00650", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00650", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00651", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00651-keymap-item-Console-CONSOLE-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00651.py -- tests/files/web/generated/M21-GAP-00651-keymap-item-Console-CONSOLE-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00651", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00651", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00652", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00652-keymap-item-Console-CONSOLE-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00652.py -- tests/files/web/generated/M21-GAP-00652-keymap-item-Console-CONSOLE-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00652", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00652", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00653", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00653-keymap-item-Console-CONSOLE-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00653.py -- tests/files/web/generated/M21-GAP-00653-keymap-item-Console-CONSOLE-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00653", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00653", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00654", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00654-keymap-item-Console-CONSOLE-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00654.py -- tests/files/web/generated/M21-GAP-00654-keymap-item-Console-CONSOLE-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00654", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00654", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00655", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00655-keymap-item-Console-CONSOLE-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00655.py -- tests/files/web/generated/M21-GAP-00655-keymap-item-Console-CONSOLE-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00655", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00655", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00656", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00656-keymap-item-Console-CONSOLE-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00656.py -- tests/files/web/generated/M21-GAP-00656-keymap-item-Console-CONSOLE-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00656", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00656", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00657", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00657-keymap-item-Console-CONSOLE-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00657.py -- tests/files/web/generated/M21-GAP-00657-keymap-item-Console-CONSOLE-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00657", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00657", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00658", + "gapId": "keymap-item:Curve Pen Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00658-keymap-item-Curve-Pen-Modal-Map-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00658.py -- tests/files/web/generated/M21-GAP-00658-keymap-item-Curve-Pen-Modal-Map-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00658", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00658", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00659", + "gapId": "keymap-item:Curve Pen Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00659-keymap-item-Curve-Pen-Modal-Map-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00659.py -- tests/files/web/generated/M21-GAP-00659-keymap-item-Curve-Pen-Modal-Map-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00659", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00659", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00660", + "gapId": "keymap-item:Curve Pen Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00660-keymap-item-Curve-Pen-Modal-Map-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00660.py -- tests/files/web/generated/M21-GAP-00660-keymap-item-Curve-Pen-Modal-Map-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00660", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00660", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00661", + "gapId": "keymap-item:Curve Pen Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00661-keymap-item-Curve-Pen-Modal-Map-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00661.py -- tests/files/web/generated/M21-GAP-00661-keymap-item-Curve-Pen-Modal-Map-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00661", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00661", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00662", + "gapId": "keymap-item:Curve Pen Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00662-keymap-item-Curve-Pen-Modal-Map-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00662.py -- tests/files/web/generated/M21-GAP-00662-keymap-item-Curve-Pen-Modal-Map-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00662", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00662", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00663", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00663-keymap-item-Curve-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00663.py -- tests/files/web/generated/M21-GAP-00663-keymap-item-Curve-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00663", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00663", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00664", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00664-keymap-item-Curve-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00664.py -- tests/files/web/generated/M21-GAP-00664-keymap-item-Curve-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00664", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00664", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00665", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00665-keymap-item-Curve-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00665.py -- tests/files/web/generated/M21-GAP-00665-keymap-item-Curve-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00665", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00665", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00666", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00666-keymap-item-Curve-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00666.py -- tests/files/web/generated/M21-GAP-00666-keymap-item-Curve-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00666", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00666", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00667", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00667-keymap-item-Curve-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00667.py -- tests/files/web/generated/M21-GAP-00667-keymap-item-Curve-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00667", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00667", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00668", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00668-keymap-item-Curve-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00668.py -- tests/files/web/generated/M21-GAP-00668-keymap-item-Curve-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00668", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00668", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00669", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00669-keymap-item-Curve-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00669.py -- tests/files/web/generated/M21-GAP-00669-keymap-item-Curve-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00669", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00669", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00670", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00670-keymap-item-Curve-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00670.py -- tests/files/web/generated/M21-GAP-00670-keymap-item-Curve-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00670", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00670", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00671", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00671-keymap-item-Curve-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00671.py -- tests/files/web/generated/M21-GAP-00671-keymap-item-Curve-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00671", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00671", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00672", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00672-keymap-item-Curve-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00672.py -- tests/files/web/generated/M21-GAP-00672-keymap-item-Curve-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00672", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00672", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00673", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00673-keymap-item-Curve-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00673.py -- tests/files/web/generated/M21-GAP-00673-keymap-item-Curve-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00673", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00673", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00674", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00674-keymap-item-Curve-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00674.py -- tests/files/web/generated/M21-GAP-00674-keymap-item-Curve-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00674", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00674", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00675", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00675-keymap-item-Curve-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00675.py -- tests/files/web/generated/M21-GAP-00675-keymap-item-Curve-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00675", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00675", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00676", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00676-keymap-item-Curve-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00676.py -- tests/files/web/generated/M21-GAP-00676-keymap-item-Curve-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00676", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00676", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00677", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00677-keymap-item-Curve-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00677.py -- tests/files/web/generated/M21-GAP-00677-keymap-item-Curve-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00677", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00677", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00678", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00678-keymap-item-Curve-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00678.py -- tests/files/web/generated/M21-GAP-00678-keymap-item-Curve-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00678", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00678", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00679", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00679-keymap-item-Curve-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00679.py -- tests/files/web/generated/M21-GAP-00679-keymap-item-Curve-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00679", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00679", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00680", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00680-keymap-item-Curve-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00680.py -- tests/files/web/generated/M21-GAP-00680-keymap-item-Curve-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00680", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00680", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00681", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00681-keymap-item-Curve-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00681.py -- tests/files/web/generated/M21-GAP-00681-keymap-item-Curve-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00681", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00681", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00682", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00682-keymap-item-Curve-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00682.py -- tests/files/web/generated/M21-GAP-00682-keymap-item-Curve-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00682", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00682", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00683", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00683-keymap-item-Curve-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00683.py -- tests/files/web/generated/M21-GAP-00683-keymap-item-Curve-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00683", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00683", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00684", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00684-keymap-item-Curve-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00684.py -- tests/files/web/generated/M21-GAP-00684-keymap-item-Curve-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00684", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00684", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00685", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00685-keymap-item-Curve-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00685.py -- tests/files/web/generated/M21-GAP-00685-keymap-item-Curve-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00685", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00685", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00686", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00686-keymap-item-Curve-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00686.py -- tests/files/web/generated/M21-GAP-00686-keymap-item-Curve-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00686", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00686", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00687", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00687-keymap-item-Curve-EMPTY-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00687.py -- tests/files/web/generated/M21-GAP-00687-keymap-item-Curve-EMPTY-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00687", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00687", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00688", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00688-keymap-item-Curve-EMPTY-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00688.py -- tests/files/web/generated/M21-GAP-00688-keymap-item-Curve-EMPTY-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00688", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00688", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00689", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00689-keymap-item-Curve-EMPTY-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00689.py -- tests/files/web/generated/M21-GAP-00689-keymap-item-Curve-EMPTY-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00689", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00689", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00690", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00690-keymap-item-Curve-EMPTY-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00690.py -- tests/files/web/generated/M21-GAP-00690-keymap-item-Curve-EMPTY-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00690", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00690", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00691", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00691-keymap-item-Curve-EMPTY-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00691.py -- tests/files/web/generated/M21-GAP-00691-keymap-item-Curve-EMPTY-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00691", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00691", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00692", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00692-keymap-item-Curve-EMPTY-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00692.py -- tests/files/web/generated/M21-GAP-00692-keymap-item-Curve-EMPTY-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00692", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00692", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00693", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00693-keymap-item-Curve-EMPTY-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00693.py -- tests/files/web/generated/M21-GAP-00693-keymap-item-Curve-EMPTY-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00693", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00693", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00694", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00694-keymap-item-Curve-EMPTY-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00694.py -- tests/files/web/generated/M21-GAP-00694-keymap-item-Curve-EMPTY-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00694", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00694", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00695", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00695-keymap-item-Curve-EMPTY-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00695.py -- tests/files/web/generated/M21-GAP-00695-keymap-item-Curve-EMPTY-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00695", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00695", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00696", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00696-keymap-item-Curve-EMPTY-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00696.py -- tests/files/web/generated/M21-GAP-00696-keymap-item-Curve-EMPTY-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00696", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00696", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00697", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00697-keymap-item-Curve-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00697.py -- tests/files/web/generated/M21-GAP-00697-keymap-item-Curve-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00697", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00697", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00698", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00698-keymap-item-Curve-EMPTY-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00698.py -- tests/files/web/generated/M21-GAP-00698-keymap-item-Curve-EMPTY-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00698", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00698", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00699", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00699-keymap-item-Curve-EMPTY-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00699.py -- tests/files/web/generated/M21-GAP-00699-keymap-item-Curve-EMPTY-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00699", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00699", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00700", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00700-keymap-item-Curve-EMPTY-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00700.py -- tests/files/web/generated/M21-GAP-00700-keymap-item-Curve-EMPTY-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00700", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00700", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00701", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00701-keymap-item-Curve-EMPTY-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00701.py -- tests/files/web/generated/M21-GAP-00701-keymap-item-Curve-EMPTY-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00701", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00701", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00702", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00702-keymap-item-Curve-EMPTY-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00702.py -- tests/files/web/generated/M21-GAP-00702-keymap-item-Curve-EMPTY-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00702", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00702", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00703", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00703-keymap-item-Curve-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00703.py -- tests/files/web/generated/M21-GAP-00703-keymap-item-Curve-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00703", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00703", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00704", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00704-keymap-item-Curve-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00704.py -- tests/files/web/generated/M21-GAP-00704-keymap-item-Curve-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00704", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00704", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00705", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00705-keymap-item-Curve-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00705.py -- tests/files/web/generated/M21-GAP-00705-keymap-item-Curve-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00705", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00705", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00706", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00706-keymap-item-Curve-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00706.py -- tests/files/web/generated/M21-GAP-00706-keymap-item-Curve-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00706", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00706", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00707", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00707-keymap-item-Curve-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00707.py -- tests/files/web/generated/M21-GAP-00707-keymap-item-Curve-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00707", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00707", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00708", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00708-keymap-item-Curves-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00708.py -- tests/files/web/generated/M21-GAP-00708-keymap-item-Curves-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00708", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00708", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00709", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00709-keymap-item-Curves-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00709.py -- tests/files/web/generated/M21-GAP-00709-keymap-item-Curves-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00709", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00709", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00710", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00710-keymap-item-Curves-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00710.py -- tests/files/web/generated/M21-GAP-00710-keymap-item-Curves-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00710", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00710", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00711", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00711-keymap-item-Curves-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00711.py -- tests/files/web/generated/M21-GAP-00711-keymap-item-Curves-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00711", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00711", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00712", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00712-keymap-item-Curves-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00712.py -- tests/files/web/generated/M21-GAP-00712-keymap-item-Curves-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00712", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00712", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00713", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00713-keymap-item-Curves-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00713.py -- tests/files/web/generated/M21-GAP-00713-keymap-item-Curves-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00713", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00713", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00714", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00714-keymap-item-Curves-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00714.py -- tests/files/web/generated/M21-GAP-00714-keymap-item-Curves-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00714", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00714", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00715", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00715-keymap-item-Curves-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00715.py -- tests/files/web/generated/M21-GAP-00715-keymap-item-Curves-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00715", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00715", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00716", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00716-keymap-item-Curves-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00716.py -- tests/files/web/generated/M21-GAP-00716-keymap-item-Curves-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00716", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00716", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00717", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00717-keymap-item-Curves-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00717.py -- tests/files/web/generated/M21-GAP-00717-keymap-item-Curves-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00717", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00717", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00718", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00718-keymap-item-Curves-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00718.py -- tests/files/web/generated/M21-GAP-00718-keymap-item-Curves-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00718", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00718", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00719", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00719-keymap-item-Curves-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00719.py -- tests/files/web/generated/M21-GAP-00719-keymap-item-Curves-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00719", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00719", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00720", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00720-keymap-item-Curves-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00720.py -- tests/files/web/generated/M21-GAP-00720-keymap-item-Curves-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00720", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00720", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00721", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00721-keymap-item-Curves-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00721.py -- tests/files/web/generated/M21-GAP-00721-keymap-item-Curves-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00721", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00721", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00722", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00722-keymap-item-Curves-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00722.py -- tests/files/web/generated/M21-GAP-00722-keymap-item-Curves-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00722", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00722", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00723", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00723-keymap-item-Curves-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00723.py -- tests/files/web/generated/M21-GAP-00723-keymap-item-Curves-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00723", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00723", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00724", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00724-keymap-item-Curves-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00724.py -- tests/files/web/generated/M21-GAP-00724-keymap-item-Curves-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00724", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00724", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00725", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00725-keymap-item-Curves-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00725.py -- tests/files/web/generated/M21-GAP-00725-keymap-item-Curves-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00725", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00725", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00726", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00726-keymap-item-Curves-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00726.py -- tests/files/web/generated/M21-GAP-00726-keymap-item-Curves-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00726", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00726", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00727", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00727-keymap-item-Curves-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00727.py -- tests/files/web/generated/M21-GAP-00727-keymap-item-Curves-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00727", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00727", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00728", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00728-keymap-item-Curves-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00728.py -- tests/files/web/generated/M21-GAP-00728-keymap-item-Curves-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00728", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00728", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00729", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00729-keymap-item-Curves-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00729.py -- tests/files/web/generated/M21-GAP-00729-keymap-item-Curves-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00729", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00729", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00730", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00730-keymap-item-Curves-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00730.py -- tests/files/web/generated/M21-GAP-00730-keymap-item-Curves-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00730", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00730", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00731", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00731-keymap-item-Curves-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00731.py -- tests/files/web/generated/M21-GAP-00731-keymap-item-Curves-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00731", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00731", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00732", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00732-keymap-item-Curves-EMPTY-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00732.py -- tests/files/web/generated/M21-GAP-00732-keymap-item-Curves-EMPTY-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00732", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00732", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00733", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00733-keymap-item-Curves-EMPTY-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00733.py -- tests/files/web/generated/M21-GAP-00733-keymap-item-Curves-EMPTY-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00733", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00733", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00734", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00734-keymap-item-Curves-EMPTY-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00734.py -- tests/files/web/generated/M21-GAP-00734-keymap-item-Curves-EMPTY-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00734", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00734", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00735", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00735-keymap-item-Curves-EMPTY-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00735.py -- tests/files/web/generated/M21-GAP-00735-keymap-item-Curves-EMPTY-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00735", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00735", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00736", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00736-keymap-item-Curves-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00736.py -- tests/files/web/generated/M21-GAP-00736-keymap-item-Curves-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00736", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00736", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00737", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00737-keymap-item-Curves-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00737.py -- tests/files/web/generated/M21-GAP-00737-keymap-item-Curves-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00737", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00737", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00738", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00738-keymap-item-Curves-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00738.py -- tests/files/web/generated/M21-GAP-00738-keymap-item-Curves-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00738", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00738", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00739", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00739-keymap-item-Curves-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00739.py -- tests/files/web/generated/M21-GAP-00739-keymap-item-Curves-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00739", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00739", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00740", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00740-keymap-item-Curves-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00740.py -- tests/files/web/generated/M21-GAP-00740-keymap-item-Curves-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00740", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00740", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00741", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00741-keymap-item-Curves-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00741.py -- tests/files/web/generated/M21-GAP-00741-keymap-item-Curves-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00741", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00741", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00742", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00742-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00742.py -- tests/files/web/generated/M21-GAP-00742-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00742", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00742", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00743", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00743-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00743.py -- tests/files/web/generated/M21-GAP-00743-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00743", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00743", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00744", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00744-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00744.py -- tests/files/web/generated/M21-GAP-00744-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00744", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00744", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00745", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00745-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00745.py -- tests/files/web/generated/M21-GAP-00745-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00745", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00745", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00746", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00746-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00746.py -- tests/files/web/generated/M21-GAP-00746-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00746", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00746", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00747", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00747-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00747.py -- tests/files/web/generated/M21-GAP-00747-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00747", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00747", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00748", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00748-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00748.py -- tests/files/web/generated/M21-GAP-00748-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00748", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00748", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00749", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00749-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00749.py -- tests/files/web/generated/M21-GAP-00749-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00749", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00749", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00750", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00750-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00750.py -- tests/files/web/generated/M21-GAP-00750-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00750", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00750", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00751", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00751-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00751.py -- tests/files/web/generated/M21-GAP-00751-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00751", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00751", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00752", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00752-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00752.py -- tests/files/web/generated/M21-GAP-00752-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00752", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00752", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00753", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00753-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00753.py -- tests/files/web/generated/M21-GAP-00753-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00753", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00753", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00754", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00754-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00754.py -- tests/files/web/generated/M21-GAP-00754-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00754", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00754", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00755", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00755-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00755.py -- tests/files/web/generated/M21-GAP-00755-keymap-item-Custom-Normals-Modal-Map-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00755", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00755", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00756", + "gapId": "keymap-item:Dopesheet Generic:DOPESHEET_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00756-keymap-item-Dopesheet-Generic-DOPESHEET_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00756.py -- tests/files/web/generated/M21-GAP-00756-keymap-item-Dopesheet-Generic-DOPESHEET_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00756", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00756", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00757", + "gapId": "keymap-item:Dopesheet Generic:DOPESHEET_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00757-keymap-item-Dopesheet-Generic-DOPESHEET_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00757.py -- tests/files/web/generated/M21-GAP-00757-keymap-item-Dopesheet-Generic-DOPESHEET_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00757", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00757", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00758", + "gapId": "keymap-item:Dopesheet Generic:DOPESHEET_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00758-keymap-item-Dopesheet-Generic-DOPESHEET_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00758.py -- tests/files/web/generated/M21-GAP-00758-keymap-item-Dopesheet-Generic-DOPESHEET_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00758", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00758", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00759", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00759-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00759.py -- tests/files/web/generated/M21-GAP-00759-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00759", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00759", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00760", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00760-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00760.py -- tests/files/web/generated/M21-GAP-00760-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00760", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00760", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00761", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00761-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00761.py -- tests/files/web/generated/M21-GAP-00761-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00761", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00761", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00762", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00762-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00762.py -- tests/files/web/generated/M21-GAP-00762-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00762", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00762", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00763", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00763-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00763.py -- tests/files/web/generated/M21-GAP-00763-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00763", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00763", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00764", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00764-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00764.py -- tests/files/web/generated/M21-GAP-00764-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00764", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00764", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00765", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00765-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00765.py -- tests/files/web/generated/M21-GAP-00765-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00765", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00765", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00766", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00766-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00766.py -- tests/files/web/generated/M21-GAP-00766-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00766", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00766", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00767", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00767-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00767.py -- tests/files/web/generated/M21-GAP-00767-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00767", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00767", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00768", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00768-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00768.py -- tests/files/web/generated/M21-GAP-00768-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00768", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00768", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00769", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00769-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00769.py -- tests/files/web/generated/M21-GAP-00769-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00769", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00769", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00770", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00770-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00770.py -- tests/files/web/generated/M21-GAP-00770-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00770", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00770", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00771", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00771-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00771.py -- tests/files/web/generated/M21-GAP-00771-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00771", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00771", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00772", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00772-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00772.py -- tests/files/web/generated/M21-GAP-00772-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00772", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00772", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00773", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00773-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00773.py -- tests/files/web/generated/M21-GAP-00773-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00773", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00773", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00774", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00774-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00774.py -- tests/files/web/generated/M21-GAP-00774-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00774", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00774", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00775", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00775-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00775.py -- tests/files/web/generated/M21-GAP-00775-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00775", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00775", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00776", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00776-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00776.py -- tests/files/web/generated/M21-GAP-00776-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00776", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00776", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00777", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00777-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00777.py -- tests/files/web/generated/M21-GAP-00777-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00777", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00777", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00778", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00778-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00778.py -- tests/files/web/generated/M21-GAP-00778-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00778", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00778", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00779", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00779-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00779.py -- tests/files/web/generated/M21-GAP-00779-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00779", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00779", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00780", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00780-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00780.py -- tests/files/web/generated/M21-GAP-00780-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00780", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00780", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00781", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00781-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00781.py -- tests/files/web/generated/M21-GAP-00781-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00781", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00781", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00782", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00782-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00782.py -- tests/files/web/generated/M21-GAP-00782-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00782", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00782", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00783", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00783-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00783.py -- tests/files/web/generated/M21-GAP-00783-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00783", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00783", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00784", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00784-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00784.py -- tests/files/web/generated/M21-GAP-00784-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00784", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00784", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00785", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00785-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00785.py -- tests/files/web/generated/M21-GAP-00785-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00785", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00785", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00786", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00786-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00786.py -- tests/files/web/generated/M21-GAP-00786-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00786", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00786", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00787", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00787-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00787.py -- tests/files/web/generated/M21-GAP-00787-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00787", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00787", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00788", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00788-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00788.py -- tests/files/web/generated/M21-GAP-00788-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00788", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00788", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00789", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00789-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00789.py -- tests/files/web/generated/M21-GAP-00789-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00789", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00789", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00790", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00790-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00790.py -- tests/files/web/generated/M21-GAP-00790-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00790", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00790", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00791", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00791-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00791.py -- tests/files/web/generated/M21-GAP-00791-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00791", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00791", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00792", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00792-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00792.py -- tests/files/web/generated/M21-GAP-00792-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00792", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00792", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00793", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00793-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00793.py -- tests/files/web/generated/M21-GAP-00793-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00793", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00793", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00794", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00794-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00794.py -- tests/files/web/generated/M21-GAP-00794-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00794", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00794", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00795", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00795-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00795.py -- tests/files/web/generated/M21-GAP-00795-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00795", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00795", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00796", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00796-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00796.py -- tests/files/web/generated/M21-GAP-00796-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00796", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00796", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00797", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00797-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00797.py -- tests/files/web/generated/M21-GAP-00797-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00797", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00797", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00798", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00798-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00798.py -- tests/files/web/generated/M21-GAP-00798-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00798", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00798", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00799", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00799-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00799.py -- tests/files/web/generated/M21-GAP-00799-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00799", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00799", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00800", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00800-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00800.py -- tests/files/web/generated/M21-GAP-00800-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00800", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00800", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00801", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00801-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00801.py -- tests/files/web/generated/M21-GAP-00801-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00801", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00801", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00802", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00802-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00802.py -- tests/files/web/generated/M21-GAP-00802-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00802", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00802", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00803", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00803-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00803.py -- tests/files/web/generated/M21-GAP-00803-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00803", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00803", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00804", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00804-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00804.py -- tests/files/web/generated/M21-GAP-00804-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00804", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00804", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00805", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00805-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-50.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00805.py -- tests/files/web/generated/M21-GAP-00805-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-50.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00805", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00805", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00806", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:51", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00806-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-51.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00806.py -- tests/files/web/generated/M21-GAP-00806-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-51.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00806", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00806", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00807", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:52", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00807-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-52.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00807.py -- tests/files/web/generated/M21-GAP-00807-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-52.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00807", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00807", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00808", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:53", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00808-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-53.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00808.py -- tests/files/web/generated/M21-GAP-00808-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-53.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00808", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00808", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00809", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:54", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00809-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-54.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00809.py -- tests/files/web/generated/M21-GAP-00809-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-54.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00809", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00809", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00810", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:55", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00810-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-55.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00810.py -- tests/files/web/generated/M21-GAP-00810-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-55.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00810", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00810", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00811", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:56", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00811-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-56.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00811.py -- tests/files/web/generated/M21-GAP-00811-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-56.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00811", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00811", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00812", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:57", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00812-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-57.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00812.py -- tests/files/web/generated/M21-GAP-00812-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-57.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00812", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00812", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00813", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:58", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00813-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-58.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00813.py -- tests/files/web/generated/M21-GAP-00813-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-58.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00813", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00813", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00814", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:59", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00814-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-59.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00814.py -- tests/files/web/generated/M21-GAP-00814-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-59.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00814", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00814", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00815", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00815-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00815.py -- tests/files/web/generated/M21-GAP-00815-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00815", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00815", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00816", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:60", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00816-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-60.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00816.py -- tests/files/web/generated/M21-GAP-00816-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-60.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00816", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00816", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00817", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:61", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00817-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-61.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00817.py -- tests/files/web/generated/M21-GAP-00817-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-61.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00817", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00817", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00818", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:62", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00818-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-62.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00818.py -- tests/files/web/generated/M21-GAP-00818-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-62.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00818", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00818", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00819", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:63", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00819-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-63.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00819.py -- tests/files/web/generated/M21-GAP-00819-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-63.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00819", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00819", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00820", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:64", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00820-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-64.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00820.py -- tests/files/web/generated/M21-GAP-00820-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-64.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00820", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00820", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00821", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:65", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00821-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-65.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00821.py -- tests/files/web/generated/M21-GAP-00821-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-65.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00821", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00821", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00822", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:66", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00822-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-66.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00822.py -- tests/files/web/generated/M21-GAP-00822-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-66.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00822", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00822", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00823", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:67", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00823-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-67.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00823.py -- tests/files/web/generated/M21-GAP-00823-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-67.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00823", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00823", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00824", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00824-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00824.py -- tests/files/web/generated/M21-GAP-00824-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00824", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00824", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00825", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00825-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00825.py -- tests/files/web/generated/M21-GAP-00825-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00825", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00825", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00826", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00826-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00826.py -- tests/files/web/generated/M21-GAP-00826-keymap-item-Dopesheet-DOPESHEET_EDITOR-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00826", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00826", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00827", + "gapId": "keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00827-keymap-item-Eyedropper-ColorRamp-PointSampling-Map-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00827.py -- tests/files/web/generated/M21-GAP-00827-keymap-item-Eyedropper-ColorRamp-PointSampling-Map-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00827", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00827", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00828", + "gapId": "keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00828-keymap-item-Eyedropper-ColorRamp-PointSampling-Map-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00828.py -- tests/files/web/generated/M21-GAP-00828-keymap-item-Eyedropper-ColorRamp-PointSampling-Map-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00828", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00828", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00829", + "gapId": "keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00829-keymap-item-Eyedropper-ColorRamp-PointSampling-Map-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00829.py -- tests/files/web/generated/M21-GAP-00829-keymap-item-Eyedropper-ColorRamp-PointSampling-Map-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00829", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00829", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00830", + "gapId": "keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00830-keymap-item-Eyedropper-ColorRamp-PointSampling-Map-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00830.py -- tests/files/web/generated/M21-GAP-00830-keymap-item-Eyedropper-ColorRamp-PointSampling-Map-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00830", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00830", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00831", + "gapId": "keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00831-keymap-item-Eyedropper-ColorRamp-PointSampling-Map-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00831.py -- tests/files/web/generated/M21-GAP-00831-keymap-item-Eyedropper-ColorRamp-PointSampling-Map-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00831", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00831", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00832", + "gapId": "keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00832-keymap-item-Eyedropper-ColorRamp-PointSampling-Map-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00832.py -- tests/files/web/generated/M21-GAP-00832-keymap-item-Eyedropper-ColorRamp-PointSampling-Map-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00832", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00832", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00833", + "gapId": "keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00833-keymap-item-Eyedropper-ColorRamp-PointSampling-Map-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00833.py -- tests/files/web/generated/M21-GAP-00833-keymap-item-Eyedropper-ColorRamp-PointSampling-Map-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00833", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00833", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00834", + "gapId": "keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00834-keymap-item-Eyedropper-Modal-Map-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00834.py -- tests/files/web/generated/M21-GAP-00834-keymap-item-Eyedropper-Modal-Map-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00834", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00834", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00835", + "gapId": "keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00835-keymap-item-Eyedropper-Modal-Map-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00835.py -- tests/files/web/generated/M21-GAP-00835-keymap-item-Eyedropper-Modal-Map-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00835", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00835", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00836", + "gapId": "keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00836-keymap-item-Eyedropper-Modal-Map-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00836.py -- tests/files/web/generated/M21-GAP-00836-keymap-item-Eyedropper-Modal-Map-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00836", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00836", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00837", + "gapId": "keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00837-keymap-item-Eyedropper-Modal-Map-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00837.py -- tests/files/web/generated/M21-GAP-00837-keymap-item-Eyedropper-Modal-Map-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00837", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00837", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00838", + "gapId": "keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00838-keymap-item-Eyedropper-Modal-Map-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00838.py -- tests/files/web/generated/M21-GAP-00838-keymap-item-Eyedropper-Modal-Map-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00838", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00838", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00839", + "gapId": "keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00839-keymap-item-Eyedropper-Modal-Map-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00839.py -- tests/files/web/generated/M21-GAP-00839-keymap-item-Eyedropper-Modal-Map-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00839", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00839", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00840", + "gapId": "keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00840-keymap-item-Eyedropper-Modal-Map-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00840.py -- tests/files/web/generated/M21-GAP-00840-keymap-item-Eyedropper-Modal-Map-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00840", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00840", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00841", + "gapId": "keymap-item:File Browser Buttons:FILE_BROWSER:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00841-keymap-item-File-Browser-Buttons-FILE_BROWSER-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00841.py -- tests/files/web/generated/M21-GAP-00841-keymap-item-File-Browser-Buttons-FILE_BROWSER-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00841", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00841", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00842", + "gapId": "keymap-item:File Browser Buttons:FILE_BROWSER:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00842-keymap-item-File-Browser-Buttons-FILE_BROWSER-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00842.py -- tests/files/web/generated/M21-GAP-00842-keymap-item-File-Browser-Buttons-FILE_BROWSER-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00842", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00842", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00843", + "gapId": "keymap-item:File Browser Buttons:FILE_BROWSER:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00843-keymap-item-File-Browser-Buttons-FILE_BROWSER-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00843.py -- tests/files/web/generated/M21-GAP-00843-keymap-item-File-Browser-Buttons-FILE_BROWSER-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00843", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00843", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00844", + "gapId": "keymap-item:File Browser Buttons:FILE_BROWSER:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00844-keymap-item-File-Browser-Buttons-FILE_BROWSER-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00844.py -- tests/files/web/generated/M21-GAP-00844-keymap-item-File-Browser-Buttons-FILE_BROWSER-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00844", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00844", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00845", + "gapId": "keymap-item:File Browser Buttons:FILE_BROWSER:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00845-keymap-item-File-Browser-Buttons-FILE_BROWSER-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00845.py -- tests/files/web/generated/M21-GAP-00845-keymap-item-File-Browser-Buttons-FILE_BROWSER-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00845", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00845", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00846", + "gapId": "keymap-item:File Browser Buttons:FILE_BROWSER:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00846-keymap-item-File-Browser-Buttons-FILE_BROWSER-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00846.py -- tests/files/web/generated/M21-GAP-00846-keymap-item-File-Browser-Buttons-FILE_BROWSER-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00846", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00846", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00847", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00847-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00847.py -- tests/files/web/generated/M21-GAP-00847-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00847", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00847", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00848", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00848-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00848.py -- tests/files/web/generated/M21-GAP-00848-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00848", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00848", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00849", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00849-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00849.py -- tests/files/web/generated/M21-GAP-00849-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00849", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00849", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00850", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00850-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00850.py -- tests/files/web/generated/M21-GAP-00850-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00850", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00850", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00851", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00851-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00851.py -- tests/files/web/generated/M21-GAP-00851-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00851", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00851", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00852", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00852-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00852.py -- tests/files/web/generated/M21-GAP-00852-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00852", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00852", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00853", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00853-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00853.py -- tests/files/web/generated/M21-GAP-00853-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00853", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00853", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00854", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00854-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00854.py -- tests/files/web/generated/M21-GAP-00854-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00854", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00854", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00855", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00855-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00855.py -- tests/files/web/generated/M21-GAP-00855-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00855", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00855", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00856", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00856-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00856.py -- tests/files/web/generated/M21-GAP-00856-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00856", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00856", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00857", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00857-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00857.py -- tests/files/web/generated/M21-GAP-00857-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00857", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00857", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00858", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00858-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00858.py -- tests/files/web/generated/M21-GAP-00858-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00858", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00858", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00859", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00859-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00859.py -- tests/files/web/generated/M21-GAP-00859-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00859", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00859", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00860", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00860-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00860.py -- tests/files/web/generated/M21-GAP-00860-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00860", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00860", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00861", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00861-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00861.py -- tests/files/web/generated/M21-GAP-00861-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00861", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00861", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00862", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00862-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00862.py -- tests/files/web/generated/M21-GAP-00862-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00862", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00862", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00863", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00863-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00863.py -- tests/files/web/generated/M21-GAP-00863-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00863", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00863", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00864", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00864-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00864.py -- tests/files/web/generated/M21-GAP-00864-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00864", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00864", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00865", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00865-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00865.py -- tests/files/web/generated/M21-GAP-00865-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00865", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00865", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00866", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00866-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00866.py -- tests/files/web/generated/M21-GAP-00866-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00866", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00866", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00867", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00867-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00867.py -- tests/files/web/generated/M21-GAP-00867-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00867", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00867", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00868", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00868-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00868.py -- tests/files/web/generated/M21-GAP-00868-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00868", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00868", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00869", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00869-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00869.py -- tests/files/web/generated/M21-GAP-00869-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00869", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00869", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00870", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00870-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00870.py -- tests/files/web/generated/M21-GAP-00870-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00870", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00870", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00871", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00871-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00871.py -- tests/files/web/generated/M21-GAP-00871-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00871", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00871", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00872", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00872-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00872.py -- tests/files/web/generated/M21-GAP-00872-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00872", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00872", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00873", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00873-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00873.py -- tests/files/web/generated/M21-GAP-00873-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00873", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00873", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00874", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00874-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00874.py -- tests/files/web/generated/M21-GAP-00874-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00874", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00874", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00875", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00875-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00875.py -- tests/files/web/generated/M21-GAP-00875-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00875", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00875", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00876", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00876-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00876.py -- tests/files/web/generated/M21-GAP-00876-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00876", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00876", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00877", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00877-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00877.py -- tests/files/web/generated/M21-GAP-00877-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00877", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00877", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00878", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00878-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00878.py -- tests/files/web/generated/M21-GAP-00878-keymap-item-File-Browser-Main-FILE_BROWSER-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00878", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00878", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00879", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00879-keymap-item-File-Browser-FILE_BROWSER-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00879.py -- tests/files/web/generated/M21-GAP-00879-keymap-item-File-Browser-FILE_BROWSER-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00879", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00879", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00880", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00880-keymap-item-File-Browser-FILE_BROWSER-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00880.py -- tests/files/web/generated/M21-GAP-00880-keymap-item-File-Browser-FILE_BROWSER-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00880", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00880", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00881", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00881-keymap-item-File-Browser-FILE_BROWSER-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00881.py -- tests/files/web/generated/M21-GAP-00881-keymap-item-File-Browser-FILE_BROWSER-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00881", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00881", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00882", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00882-keymap-item-File-Browser-FILE_BROWSER-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00882.py -- tests/files/web/generated/M21-GAP-00882-keymap-item-File-Browser-FILE_BROWSER-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00882", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00882", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00883", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00883-keymap-item-File-Browser-FILE_BROWSER-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00883.py -- tests/files/web/generated/M21-GAP-00883-keymap-item-File-Browser-FILE_BROWSER-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00883", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00883", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00884", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00884-keymap-item-File-Browser-FILE_BROWSER-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00884.py -- tests/files/web/generated/M21-GAP-00884-keymap-item-File-Browser-FILE_BROWSER-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00884", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00884", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00885", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00885-keymap-item-File-Browser-FILE_BROWSER-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00885.py -- tests/files/web/generated/M21-GAP-00885-keymap-item-File-Browser-FILE_BROWSER-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00885", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00885", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00886", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00886-keymap-item-File-Browser-FILE_BROWSER-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00886.py -- tests/files/web/generated/M21-GAP-00886-keymap-item-File-Browser-FILE_BROWSER-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00886", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00886", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00887", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00887-keymap-item-File-Browser-FILE_BROWSER-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00887.py -- tests/files/web/generated/M21-GAP-00887-keymap-item-File-Browser-FILE_BROWSER-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00887", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00887", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00888", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00888-keymap-item-File-Browser-FILE_BROWSER-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00888.py -- tests/files/web/generated/M21-GAP-00888-keymap-item-File-Browser-FILE_BROWSER-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00888", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00888", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00889", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00889-keymap-item-File-Browser-FILE_BROWSER-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00889.py -- tests/files/web/generated/M21-GAP-00889-keymap-item-File-Browser-FILE_BROWSER-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00889", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00889", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00890", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00890-keymap-item-File-Browser-FILE_BROWSER-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00890.py -- tests/files/web/generated/M21-GAP-00890-keymap-item-File-Browser-FILE_BROWSER-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00890", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00890", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00891", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00891-keymap-item-File-Browser-FILE_BROWSER-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00891.py -- tests/files/web/generated/M21-GAP-00891-keymap-item-File-Browser-FILE_BROWSER-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00891", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00891", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00892", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00892-keymap-item-File-Browser-FILE_BROWSER-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00892.py -- tests/files/web/generated/M21-GAP-00892-keymap-item-File-Browser-FILE_BROWSER-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00892", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00892", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00893", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00893-keymap-item-File-Browser-FILE_BROWSER-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00893.py -- tests/files/web/generated/M21-GAP-00893-keymap-item-File-Browser-FILE_BROWSER-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00893", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00893", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00894", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00894-keymap-item-File-Browser-FILE_BROWSER-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00894.py -- tests/files/web/generated/M21-GAP-00894-keymap-item-File-Browser-FILE_BROWSER-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00894", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00894", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00895", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00895-keymap-item-File-Browser-FILE_BROWSER-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00895.py -- tests/files/web/generated/M21-GAP-00895-keymap-item-File-Browser-FILE_BROWSER-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00895", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00895", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00896", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00896-keymap-item-File-Browser-FILE_BROWSER-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00896.py -- tests/files/web/generated/M21-GAP-00896-keymap-item-File-Browser-FILE_BROWSER-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00896", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00896", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00897", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00897-keymap-item-File-Browser-FILE_BROWSER-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00897.py -- tests/files/web/generated/M21-GAP-00897-keymap-item-File-Browser-FILE_BROWSER-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00897", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00897", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00898", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00898-keymap-item-File-Browser-FILE_BROWSER-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00898.py -- tests/files/web/generated/M21-GAP-00898-keymap-item-File-Browser-FILE_BROWSER-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00898", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00898", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00899", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00899-keymap-item-File-Browser-FILE_BROWSER-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00899.py -- tests/files/web/generated/M21-GAP-00899-keymap-item-File-Browser-FILE_BROWSER-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00899", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00899", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00900", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00900-keymap-item-File-Browser-FILE_BROWSER-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00900.py -- tests/files/web/generated/M21-GAP-00900-keymap-item-File-Browser-FILE_BROWSER-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00900", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00900", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00901", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00901-keymap-item-File-Browser-FILE_BROWSER-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00901.py -- tests/files/web/generated/M21-GAP-00901-keymap-item-File-Browser-FILE_BROWSER-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00901", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00901", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00902", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00902-keymap-item-File-Browser-FILE_BROWSER-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00902.py -- tests/files/web/generated/M21-GAP-00902-keymap-item-File-Browser-FILE_BROWSER-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00902", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00902", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00903", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00903-keymap-item-File-Browser-FILE_BROWSER-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00903.py -- tests/files/web/generated/M21-GAP-00903-keymap-item-File-Browser-FILE_BROWSER-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00903", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00903", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00904", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00904-keymap-item-File-Browser-FILE_BROWSER-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00904.py -- tests/files/web/generated/M21-GAP-00904-keymap-item-File-Browser-FILE_BROWSER-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00904", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00904", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00905", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00905-keymap-item-File-Browser-FILE_BROWSER-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00905.py -- tests/files/web/generated/M21-GAP-00905-keymap-item-File-Browser-FILE_BROWSER-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00905", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00905", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00906", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00906-keymap-item-File-Browser-FILE_BROWSER-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00906.py -- tests/files/web/generated/M21-GAP-00906-keymap-item-File-Browser-FILE_BROWSER-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00906", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00906", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00907", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00907-keymap-item-File-Browser-FILE_BROWSER-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00907.py -- tests/files/web/generated/M21-GAP-00907-keymap-item-File-Browser-FILE_BROWSER-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00907", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00907", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00908", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00908-keymap-item-File-Browser-FILE_BROWSER-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00908.py -- tests/files/web/generated/M21-GAP-00908-keymap-item-File-Browser-FILE_BROWSER-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00908", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00908", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00909", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00909-keymap-item-File-Browser-FILE_BROWSER-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00909.py -- tests/files/web/generated/M21-GAP-00909-keymap-item-File-Browser-FILE_BROWSER-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00909", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00909", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00910", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00910-keymap-item-File-Browser-FILE_BROWSER-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00910.py -- tests/files/web/generated/M21-GAP-00910-keymap-item-File-Browser-FILE_BROWSER-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00910", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00910", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00911", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00911-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00911.py -- tests/files/web/generated/M21-GAP-00911-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00911", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00911", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00912", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00912-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00912.py -- tests/files/web/generated/M21-GAP-00912-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00912", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00912", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00913", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00913-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00913.py -- tests/files/web/generated/M21-GAP-00913-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00913", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00913", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00914", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00914-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00914.py -- tests/files/web/generated/M21-GAP-00914-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00914", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00914", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00915", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00915-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00915.py -- tests/files/web/generated/M21-GAP-00915-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00915", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00915", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00916", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00916-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00916.py -- tests/files/web/generated/M21-GAP-00916-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00916", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00916", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00917", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00917-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00917.py -- tests/files/web/generated/M21-GAP-00917-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00917", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00917", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00918", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00918-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00918.py -- tests/files/web/generated/M21-GAP-00918-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00918", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00918", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00919", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00919-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00919.py -- tests/files/web/generated/M21-GAP-00919-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00919", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00919", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00920", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00920-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00920.py -- tests/files/web/generated/M21-GAP-00920-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00920", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00920", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00921", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00921-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00921.py -- tests/files/web/generated/M21-GAP-00921-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00921", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00921", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00922", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00922-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00922.py -- tests/files/web/generated/M21-GAP-00922-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00922", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00922", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00923", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00923-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00923.py -- tests/files/web/generated/M21-GAP-00923-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00923", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00923", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00924", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00924-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00924.py -- tests/files/web/generated/M21-GAP-00924-keymap-item-Fill-Tool-Modal-Map-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00924", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00924", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00925", + "gapId": "keymap-item:Font:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00925-keymap-item-Font-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00925.py -- tests/files/web/generated/M21-GAP-00925-keymap-item-Font-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00925", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00925", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00926", + "gapId": "keymap-item:Font:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00926-keymap-item-Font-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00926.py -- tests/files/web/generated/M21-GAP-00926-keymap-item-Font-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00926", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00926", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00927", + "gapId": "keymap-item:Font:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00927-keymap-item-Font-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00927.py -- tests/files/web/generated/M21-GAP-00927-keymap-item-Font-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00927", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00927", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00928", + "gapId": "keymap-item:Font:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00928-keymap-item-Font-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00928.py -- tests/files/web/generated/M21-GAP-00928-keymap-item-Font-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00928", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00928", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00929", + "gapId": "keymap-item:Font:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00929-keymap-item-Font-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00929.py -- tests/files/web/generated/M21-GAP-00929-keymap-item-Font-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00929", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00929", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00930", + "gapId": "keymap-item:Font:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00930-keymap-item-Font-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00930.py -- tests/files/web/generated/M21-GAP-00930-keymap-item-Font-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00930", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00930", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00931", + "gapId": "keymap-item:Font:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00931-keymap-item-Font-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00931.py -- tests/files/web/generated/M21-GAP-00931-keymap-item-Font-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00931", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00931", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00932", + "gapId": "keymap-item:Font:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00932-keymap-item-Font-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00932.py -- tests/files/web/generated/M21-GAP-00932-keymap-item-Font-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00932", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00932", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00933", + "gapId": "keymap-item:Font:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00933-keymap-item-Font-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00933.py -- tests/files/web/generated/M21-GAP-00933-keymap-item-Font-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00933", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00933", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00934", + "gapId": "keymap-item:Font:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00934-keymap-item-Font-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00934.py -- tests/files/web/generated/M21-GAP-00934-keymap-item-Font-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00934", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00934", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00935", + "gapId": "keymap-item:Font:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00935-keymap-item-Font-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00935.py -- tests/files/web/generated/M21-GAP-00935-keymap-item-Font-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00935", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00935", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00936", + "gapId": "keymap-item:Font:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00936-keymap-item-Font-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00936.py -- tests/files/web/generated/M21-GAP-00936-keymap-item-Font-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00936", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00936", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00937", + "gapId": "keymap-item:Font:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00937-keymap-item-Font-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00937.py -- tests/files/web/generated/M21-GAP-00937-keymap-item-Font-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00937", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00937", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00938", + "gapId": "keymap-item:Font:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00938-keymap-item-Font-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00938.py -- tests/files/web/generated/M21-GAP-00938-keymap-item-Font-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00938", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00938", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00939", + "gapId": "keymap-item:Font:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00939-keymap-item-Font-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00939.py -- tests/files/web/generated/M21-GAP-00939-keymap-item-Font-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00939", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00939", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00940", + "gapId": "keymap-item:Font:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00940-keymap-item-Font-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00940.py -- tests/files/web/generated/M21-GAP-00940-keymap-item-Font-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00940", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00940", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00941", + "gapId": "keymap-item:Font:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00941-keymap-item-Font-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00941.py -- tests/files/web/generated/M21-GAP-00941-keymap-item-Font-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00941", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00941", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00942", + "gapId": "keymap-item:Font:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00942-keymap-item-Font-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00942.py -- tests/files/web/generated/M21-GAP-00942-keymap-item-Font-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00942", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00942", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00943", + "gapId": "keymap-item:Font:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00943-keymap-item-Font-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00943.py -- tests/files/web/generated/M21-GAP-00943-keymap-item-Font-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00943", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00943", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00944", + "gapId": "keymap-item:Font:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00944-keymap-item-Font-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00944.py -- tests/files/web/generated/M21-GAP-00944-keymap-item-Font-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00944", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00944", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00945", + "gapId": "keymap-item:Font:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00945-keymap-item-Font-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00945.py -- tests/files/web/generated/M21-GAP-00945-keymap-item-Font-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00945", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00945", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00946", + "gapId": "keymap-item:Font:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00946-keymap-item-Font-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00946.py -- tests/files/web/generated/M21-GAP-00946-keymap-item-Font-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00946", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00946", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00947", + "gapId": "keymap-item:Font:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00947-keymap-item-Font-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00947.py -- tests/files/web/generated/M21-GAP-00947-keymap-item-Font-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00947", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00947", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00948", + "gapId": "keymap-item:Font:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00948-keymap-item-Font-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00948.py -- tests/files/web/generated/M21-GAP-00948-keymap-item-Font-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00948", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00948", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00949", + "gapId": "keymap-item:Font:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00949-keymap-item-Font-EMPTY-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00949.py -- tests/files/web/generated/M21-GAP-00949-keymap-item-Font-EMPTY-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00949", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00949", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00950", + "gapId": "keymap-item:Font:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00950-keymap-item-Font-EMPTY-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00950.py -- tests/files/web/generated/M21-GAP-00950-keymap-item-Font-EMPTY-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00950", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00950", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00951", + "gapId": "keymap-item:Font:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00951-keymap-item-Font-EMPTY-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00951.py -- tests/files/web/generated/M21-GAP-00951-keymap-item-Font-EMPTY-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00951", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00951", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00952", + "gapId": "keymap-item:Font:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00952-keymap-item-Font-EMPTY-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00952.py -- tests/files/web/generated/M21-GAP-00952-keymap-item-Font-EMPTY-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00952", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00952", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00953", + "gapId": "keymap-item:Font:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00953-keymap-item-Font-EMPTY-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00953.py -- tests/files/web/generated/M21-GAP-00953-keymap-item-Font-EMPTY-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00953", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00953", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00954", + "gapId": "keymap-item:Font:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00954-keymap-item-Font-EMPTY-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00954.py -- tests/files/web/generated/M21-GAP-00954-keymap-item-Font-EMPTY-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00954", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00954", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00955", + "gapId": "keymap-item:Font:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00955-keymap-item-Font-EMPTY-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00955.py -- tests/files/web/generated/M21-GAP-00955-keymap-item-Font-EMPTY-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00955", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00955", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00956", + "gapId": "keymap-item:Font:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00956-keymap-item-Font-EMPTY-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00956.py -- tests/files/web/generated/M21-GAP-00956-keymap-item-Font-EMPTY-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00956", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00956", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00957", + "gapId": "keymap-item:Font:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00957-keymap-item-Font-EMPTY-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00957.py -- tests/files/web/generated/M21-GAP-00957-keymap-item-Font-EMPTY-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00957", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00957", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00958", + "gapId": "keymap-item:Font:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00958-keymap-item-Font-EMPTY-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00958.py -- tests/files/web/generated/M21-GAP-00958-keymap-item-Font-EMPTY-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00958", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00958", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00959", + "gapId": "keymap-item:Font:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00959-keymap-item-Font-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00959.py -- tests/files/web/generated/M21-GAP-00959-keymap-item-Font-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00959", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00959", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00960", + "gapId": "keymap-item:Font:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00960-keymap-item-Font-EMPTY-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00960.py -- tests/files/web/generated/M21-GAP-00960-keymap-item-Font-EMPTY-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00960", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00960", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00961", + "gapId": "keymap-item:Font:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00961-keymap-item-Font-EMPTY-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00961.py -- tests/files/web/generated/M21-GAP-00961-keymap-item-Font-EMPTY-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00961", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00961", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00962", + "gapId": "keymap-item:Font:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00962-keymap-item-Font-EMPTY-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00962.py -- tests/files/web/generated/M21-GAP-00962-keymap-item-Font-EMPTY-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00962", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00962", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00963", + "gapId": "keymap-item:Font:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00963-keymap-item-Font-EMPTY-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00963.py -- tests/files/web/generated/M21-GAP-00963-keymap-item-Font-EMPTY-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00963", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00963", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00964", + "gapId": "keymap-item:Font:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00964-keymap-item-Font-EMPTY-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00964.py -- tests/files/web/generated/M21-GAP-00964-keymap-item-Font-EMPTY-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00964", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00964", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00965", + "gapId": "keymap-item:Font:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00965-keymap-item-Font-EMPTY-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00965.py -- tests/files/web/generated/M21-GAP-00965-keymap-item-Font-EMPTY-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00965", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00965", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00966", + "gapId": "keymap-item:Font:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00966-keymap-item-Font-EMPTY-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00966.py -- tests/files/web/generated/M21-GAP-00966-keymap-item-Font-EMPTY-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00966", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00966", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00967", + "gapId": "keymap-item:Font:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00967-keymap-item-Font-EMPTY-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00967.py -- tests/files/web/generated/M21-GAP-00967-keymap-item-Font-EMPTY-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00967", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00967", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00968", + "gapId": "keymap-item:Font:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00968-keymap-item-Font-EMPTY-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00968.py -- tests/files/web/generated/M21-GAP-00968-keymap-item-Font-EMPTY-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00968", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00968", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00969", + "gapId": "keymap-item:Font:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00969-keymap-item-Font-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00969.py -- tests/files/web/generated/M21-GAP-00969-keymap-item-Font-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00969", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00969", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00970", + "gapId": "keymap-item:Font:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00970-keymap-item-Font-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00970.py -- tests/files/web/generated/M21-GAP-00970-keymap-item-Font-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00970", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00970", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00971", + "gapId": "keymap-item:Font:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00971-keymap-item-Font-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00971.py -- tests/files/web/generated/M21-GAP-00971-keymap-item-Font-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00971", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00971", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00972", + "gapId": "keymap-item:Font:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00972-keymap-item-Font-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00972.py -- tests/files/web/generated/M21-GAP-00972-keymap-item-Font-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00972", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00972", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00973", + "gapId": "keymap-item:Font:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00973-keymap-item-Font-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00973.py -- tests/files/web/generated/M21-GAP-00973-keymap-item-Font-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00973", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00973", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00974", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00974-keymap-item-Frames-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00974.py -- tests/files/web/generated/M21-GAP-00974-keymap-item-Frames-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00974", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00974", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00975", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00975-keymap-item-Frames-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00975.py -- tests/files/web/generated/M21-GAP-00975-keymap-item-Frames-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00975", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00975", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00976", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00976-keymap-item-Frames-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00976.py -- tests/files/web/generated/M21-GAP-00976-keymap-item-Frames-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00976", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00976", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00977", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00977-keymap-item-Frames-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00977.py -- tests/files/web/generated/M21-GAP-00977-keymap-item-Frames-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00977", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00977", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00978", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00978-keymap-item-Frames-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00978.py -- tests/files/web/generated/M21-GAP-00978-keymap-item-Frames-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00978", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00978", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00979", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00979-keymap-item-Frames-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00979.py -- tests/files/web/generated/M21-GAP-00979-keymap-item-Frames-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00979", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00979", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00980", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00980-keymap-item-Frames-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00980.py -- tests/files/web/generated/M21-GAP-00980-keymap-item-Frames-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00980", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00980", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00981", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00981-keymap-item-Frames-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00981.py -- tests/files/web/generated/M21-GAP-00981-keymap-item-Frames-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00981", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00981", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00982", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00982-keymap-item-Frames-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00982.py -- tests/files/web/generated/M21-GAP-00982-keymap-item-Frames-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00982", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00982", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00983", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00983-keymap-item-Frames-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00983.py -- tests/files/web/generated/M21-GAP-00983-keymap-item-Frames-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00983", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00983", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00984", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00984-keymap-item-Frames-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00984.py -- tests/files/web/generated/M21-GAP-00984-keymap-item-Frames-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00984", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00984", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00985", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00985-keymap-item-Frames-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00985.py -- tests/files/web/generated/M21-GAP-00985-keymap-item-Frames-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00985", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00985", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00986", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00986-keymap-item-Frames-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00986.py -- tests/files/web/generated/M21-GAP-00986-keymap-item-Frames-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00986", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00986", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00987", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00987-keymap-item-Frames-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00987.py -- tests/files/web/generated/M21-GAP-00987-keymap-item-Frames-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00987", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00987", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00988", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00988-keymap-item-Frames-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00988.py -- tests/files/web/generated/M21-GAP-00988-keymap-item-Frames-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00988", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00988", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00989", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00989-keymap-item-Frames-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00989.py -- tests/files/web/generated/M21-GAP-00989-keymap-item-Frames-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00989", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00989", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00990", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00990-keymap-item-Frames-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00990.py -- tests/files/web/generated/M21-GAP-00990-keymap-item-Frames-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00990", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00990", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00991", + "gapId": "keymap-item:Generic Gizmo Click Drag:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00991-keymap-item-Generic-Gizmo-Click-Drag-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00991.py -- tests/files/web/generated/M21-GAP-00991-keymap-item-Generic-Gizmo-Click-Drag-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00991", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00991", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00992", + "gapId": "keymap-item:Generic Gizmo Click Drag:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00992-keymap-item-Generic-Gizmo-Click-Drag-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00992.py -- tests/files/web/generated/M21-GAP-00992-keymap-item-Generic-Gizmo-Click-Drag-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00992", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00992", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00993", + "gapId": "keymap-item:Generic Gizmo Drag:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00993-keymap-item-Generic-Gizmo-Drag-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00993.py -- tests/files/web/generated/M21-GAP-00993-keymap-item-Generic-Gizmo-Drag-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00993", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00993", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00994", + "gapId": "keymap-item:Generic Gizmo Maybe Drag:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00994-keymap-item-Generic-Gizmo-Maybe-Drag-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00994.py -- tests/files/web/generated/M21-GAP-00994-keymap-item-Generic-Gizmo-Maybe-Drag-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00994", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00994", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00995", + "gapId": "keymap-item:Generic Gizmo Select:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00995-keymap-item-Generic-Gizmo-Select-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00995.py -- tests/files/web/generated/M21-GAP-00995-keymap-item-Generic-Gizmo-Select-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00995", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00995", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00996", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00996-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00996.py -- tests/files/web/generated/M21-GAP-00996-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00996", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00996", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00997", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00997-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00997.py -- tests/files/web/generated/M21-GAP-00997-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00997", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00997", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00998", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00998-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00998.py -- tests/files/web/generated/M21-GAP-00998-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00998", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00998", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-00999", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-00999-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-00999.py -- tests/files/web/generated/M21-GAP-00999-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-00999", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-00999", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01000", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01000-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01000.py -- tests/files/web/generated/M21-GAP-01000-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01000", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01000", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01001", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01001-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01001.py -- tests/files/web/generated/M21-GAP-01001-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01001", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01001", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01002", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01002-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01002.py -- tests/files/web/generated/M21-GAP-01002-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01002", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01002", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01003", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01003-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01003.py -- tests/files/web/generated/M21-GAP-01003-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01003", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01003", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01004", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01004-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01004.py -- tests/files/web/generated/M21-GAP-01004-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01004", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01004", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01005", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01005-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01005.py -- tests/files/web/generated/M21-GAP-01005-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01005", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01005", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01006", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01006-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01006.py -- tests/files/web/generated/M21-GAP-01006-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01006", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01006", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01007", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01007-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01007.py -- tests/files/web/generated/M21-GAP-01007-keymap-item-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01007", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01007", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01008", + "gapId": "keymap-item:Generic Gizmo:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01008-keymap-item-Generic-Gizmo-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01008.py -- tests/files/web/generated/M21-GAP-01008-keymap-item-Generic-Gizmo-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01008", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01008", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01009", + "gapId": "keymap-item:Generic Tool: Annotate Eraser:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01009-keymap-item-Generic-Tool-Annotate-Eraser-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01009.py -- tests/files/web/generated/M21-GAP-01009-keymap-item-Generic-Tool-Annotate-Eraser-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01009", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01009", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01010", + "gapId": "keymap-item:Generic Tool: Annotate Eraser:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01010-keymap-item-Generic-Tool-Annotate-Eraser-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01010.py -- tests/files/web/generated/M21-GAP-01010-keymap-item-Generic-Tool-Annotate-Eraser-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01010", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01010", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01011", + "gapId": "keymap-item:Generic Tool: Annotate Line:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01011-keymap-item-Generic-Tool-Annotate-Line-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01011.py -- tests/files/web/generated/M21-GAP-01011-keymap-item-Generic-Tool-Annotate-Line-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01011", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01011", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01012", + "gapId": "keymap-item:Generic Tool: Annotate Line:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01012-keymap-item-Generic-Tool-Annotate-Line-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01012.py -- tests/files/web/generated/M21-GAP-01012-keymap-item-Generic-Tool-Annotate-Line-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01012", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01012", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01013", + "gapId": "keymap-item:Generic Tool: Annotate Polygon:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01013-keymap-item-Generic-Tool-Annotate-Polygon-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01013.py -- tests/files/web/generated/M21-GAP-01013-keymap-item-Generic-Tool-Annotate-Polygon-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01013", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01013", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01014", + "gapId": "keymap-item:Generic Tool: Annotate Polygon:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01014-keymap-item-Generic-Tool-Annotate-Polygon-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01014.py -- tests/files/web/generated/M21-GAP-01014-keymap-item-Generic-Tool-Annotate-Polygon-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01014", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01014", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01015", + "gapId": "keymap-item:Generic Tool: Annotate:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01015-keymap-item-Generic-Tool-Annotate-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01015.py -- tests/files/web/generated/M21-GAP-01015-keymap-item-Generic-Tool-Annotate-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01015", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01015", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01016", + "gapId": "keymap-item:Generic Tool: Annotate:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01016-keymap-item-Generic-Tool-Annotate-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01016.py -- tests/files/web/generated/M21-GAP-01016-keymap-item-Generic-Tool-Annotate-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01016", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01016", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01017", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01017-keymap-item-Gesture-Box-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01017.py -- tests/files/web/generated/M21-GAP-01017-keymap-item-Gesture-Box-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01017", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01017", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01018", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01018-keymap-item-Gesture-Box-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01018.py -- tests/files/web/generated/M21-GAP-01018-keymap-item-Gesture-Box-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01018", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01018", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01019", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01019-keymap-item-Gesture-Box-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01019.py -- tests/files/web/generated/M21-GAP-01019-keymap-item-Gesture-Box-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01019", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01019", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01020", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01020-keymap-item-Gesture-Box-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01020.py -- tests/files/web/generated/M21-GAP-01020-keymap-item-Gesture-Box-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01020", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01020", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01021", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01021-keymap-item-Gesture-Box-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01021.py -- tests/files/web/generated/M21-GAP-01021-keymap-item-Gesture-Box-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01021", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01021", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01022", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01022-keymap-item-Gesture-Box-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01022.py -- tests/files/web/generated/M21-GAP-01022-keymap-item-Gesture-Box-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01022", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01022", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01023", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01023-keymap-item-Gesture-Box-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01023.py -- tests/files/web/generated/M21-GAP-01023-keymap-item-Gesture-Box-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01023", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01023", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01024", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01024-keymap-item-Gesture-Box-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01024.py -- tests/files/web/generated/M21-GAP-01024-keymap-item-Gesture-Box-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01024", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01024", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01025", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01025-keymap-item-Gesture-Box-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01025.py -- tests/files/web/generated/M21-GAP-01025-keymap-item-Gesture-Box-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01025", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01025", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01026", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01026-keymap-item-Gesture-Box-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01026.py -- tests/files/web/generated/M21-GAP-01026-keymap-item-Gesture-Box-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01026", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01026", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01027", + "gapId": "keymap-item:Gesture Lasso:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01027-keymap-item-Gesture-Lasso-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01027.py -- tests/files/web/generated/M21-GAP-01027-keymap-item-Gesture-Lasso-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01027", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01027", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01028", + "gapId": "keymap-item:Gesture Polyline:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01028-keymap-item-Gesture-Polyline-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01028.py -- tests/files/web/generated/M21-GAP-01028-keymap-item-Gesture-Polyline-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01028", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01028", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01029", + "gapId": "keymap-item:Gesture Polyline:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01029-keymap-item-Gesture-Polyline-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01029.py -- tests/files/web/generated/M21-GAP-01029-keymap-item-Gesture-Polyline-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01029", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01029", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01030", + "gapId": "keymap-item:Gesture Polyline:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01030-keymap-item-Gesture-Polyline-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01030.py -- tests/files/web/generated/M21-GAP-01030-keymap-item-Gesture-Polyline-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01030", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01030", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01031", + "gapId": "keymap-item:Gesture Polyline:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01031-keymap-item-Gesture-Polyline-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01031.py -- tests/files/web/generated/M21-GAP-01031-keymap-item-Gesture-Polyline-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01031", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01031", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01032", + "gapId": "keymap-item:Gesture Polyline:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01032-keymap-item-Gesture-Polyline-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01032.py -- tests/files/web/generated/M21-GAP-01032-keymap-item-Gesture-Polyline-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01032", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01032", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01033", + "gapId": "keymap-item:Gesture Polyline:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01033-keymap-item-Gesture-Polyline-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01033.py -- tests/files/web/generated/M21-GAP-01033-keymap-item-Gesture-Polyline-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01033", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01033", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01034", + "gapId": "keymap-item:Gesture Straight Line:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01034-keymap-item-Gesture-Straight-Line-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01034.py -- tests/files/web/generated/M21-GAP-01034-keymap-item-Gesture-Straight-Line-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01034", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01034", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01035", + "gapId": "keymap-item:Gesture Straight Line:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01035-keymap-item-Gesture-Straight-Line-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01035.py -- tests/files/web/generated/M21-GAP-01035-keymap-item-Gesture-Straight-Line-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01035", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01035", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01036", + "gapId": "keymap-item:Gesture Straight Line:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01036-keymap-item-Gesture-Straight-Line-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01036.py -- tests/files/web/generated/M21-GAP-01036-keymap-item-Gesture-Straight-Line-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01036", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01036", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01037", + "gapId": "keymap-item:Gesture Straight Line:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01037-keymap-item-Gesture-Straight-Line-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01037.py -- tests/files/web/generated/M21-GAP-01037-keymap-item-Gesture-Straight-Line-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01037", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01037", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01038", + "gapId": "keymap-item:Gesture Straight Line:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01038-keymap-item-Gesture-Straight-Line-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01038.py -- tests/files/web/generated/M21-GAP-01038-keymap-item-Gesture-Straight-Line-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01038", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01038", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01039", + "gapId": "keymap-item:Gesture Straight Line:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01039-keymap-item-Gesture-Straight-Line-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01039.py -- tests/files/web/generated/M21-GAP-01039-keymap-item-Gesture-Straight-Line-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01039", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01039", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01040", + "gapId": "keymap-item:Gesture Straight Line:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01040-keymap-item-Gesture-Straight-Line-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01040.py -- tests/files/web/generated/M21-GAP-01040-keymap-item-Gesture-Straight-Line-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01040", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01040", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01041", + "gapId": "keymap-item:Gesture Zoom Border:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01041-keymap-item-Gesture-Zoom-Border-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01041.py -- tests/files/web/generated/M21-GAP-01041-keymap-item-Gesture-Zoom-Border-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01041", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01041", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01042", + "gapId": "keymap-item:Gesture Zoom Border:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01042-keymap-item-Gesture-Zoom-Border-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01042.py -- tests/files/web/generated/M21-GAP-01042-keymap-item-Gesture-Zoom-Border-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01042", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01042", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01043", + "gapId": "keymap-item:Gesture Zoom Border:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01043-keymap-item-Gesture-Zoom-Border-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01043.py -- tests/files/web/generated/M21-GAP-01043-keymap-item-Gesture-Zoom-Border-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01043", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01043", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01044", + "gapId": "keymap-item:Gesture Zoom Border:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01044-keymap-item-Gesture-Zoom-Border-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01044.py -- tests/files/web/generated/M21-GAP-01044-keymap-item-Gesture-Zoom-Border-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01044", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01044", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01045", + "gapId": "keymap-item:Gesture Zoom Border:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01045-keymap-item-Gesture-Zoom-Border-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01045.py -- tests/files/web/generated/M21-GAP-01045-keymap-item-Gesture-Zoom-Border-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01045", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01045", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01046", + "gapId": "keymap-item:Gesture Zoom Border:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01046-keymap-item-Gesture-Zoom-Border-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01046.py -- tests/files/web/generated/M21-GAP-01046-keymap-item-Gesture-Zoom-Border-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01046", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01046", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01047", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01047-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01047.py -- tests/files/web/generated/M21-GAP-01047-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01047", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01047", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01048", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01048-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01048.py -- tests/files/web/generated/M21-GAP-01048-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01048", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01048", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01049", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01049-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01049.py -- tests/files/web/generated/M21-GAP-01049-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01049", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01049", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01050", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01050-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01050.py -- tests/files/web/generated/M21-GAP-01050-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01050", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01050", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01051", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01051-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01051.py -- tests/files/web/generated/M21-GAP-01051-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01051", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01051", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01052", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01052-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01052.py -- tests/files/web/generated/M21-GAP-01052-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01052", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01052", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01053", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01053-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01053.py -- tests/files/web/generated/M21-GAP-01053-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01053", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01053", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01054", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01054-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01054.py -- tests/files/web/generated/M21-GAP-01054-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01054", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01054", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01055", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01055-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01055.py -- tests/files/web/generated/M21-GAP-01055-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01055", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01055", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01056", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01056-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01056.py -- tests/files/web/generated/M21-GAP-01056-keymap-item-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01056", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01056", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01057", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01057-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01057.py -- tests/files/web/generated/M21-GAP-01057-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01057", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01057", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01058", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01058-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01058.py -- tests/files/web/generated/M21-GAP-01058-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01058", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01058", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01059", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01059-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01059.py -- tests/files/web/generated/M21-GAP-01059-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01059", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01059", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01060", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01060-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01060.py -- tests/files/web/generated/M21-GAP-01060-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01060", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01060", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01061", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01061-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01061.py -- tests/files/web/generated/M21-GAP-01061-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01061", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01061", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01062", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01062-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01062.py -- tests/files/web/generated/M21-GAP-01062-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01062", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01062", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01063", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01063-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01063.py -- tests/files/web/generated/M21-GAP-01063-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01063", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01063", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01064", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01064-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01064.py -- tests/files/web/generated/M21-GAP-01064-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01064", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01064", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01065", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01065-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01065.py -- tests/files/web/generated/M21-GAP-01065-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01065", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01065", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01066", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01066-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01066.py -- tests/files/web/generated/M21-GAP-01066-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01066", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01066", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01067", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01067-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01067.py -- tests/files/web/generated/M21-GAP-01067-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01067", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01067", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01068", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01068-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01068.py -- tests/files/web/generated/M21-GAP-01068-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01068", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01068", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01069", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01069-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01069.py -- tests/files/web/generated/M21-GAP-01069-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01069", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01069", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01070", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01070-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01070.py -- tests/files/web/generated/M21-GAP-01070-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01070", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01070", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01071", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01071-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01071.py -- tests/files/web/generated/M21-GAP-01071-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01071", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01071", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01072", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01072-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01072.py -- tests/files/web/generated/M21-GAP-01072-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01072", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01072", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01073", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01073-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01073.py -- tests/files/web/generated/M21-GAP-01073-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01073", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01073", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01074", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01074-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01074.py -- tests/files/web/generated/M21-GAP-01074-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01074", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01074", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01075", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01075-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01075.py -- tests/files/web/generated/M21-GAP-01075-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01075", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01075", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01076", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01076-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01076.py -- tests/files/web/generated/M21-GAP-01076-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01076", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01076", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01077", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01077-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01077.py -- tests/files/web/generated/M21-GAP-01077-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01077", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01077", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01078", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01078-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01078.py -- tests/files/web/generated/M21-GAP-01078-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01078", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01078", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01079", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01079-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01079.py -- tests/files/web/generated/M21-GAP-01079-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01079", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01079", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01080", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01080-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01080.py -- tests/files/web/generated/M21-GAP-01080-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01080", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01080", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01081", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01081-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01081.py -- tests/files/web/generated/M21-GAP-01081-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01081", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01081", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01082", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01082-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01082.py -- tests/files/web/generated/M21-GAP-01082-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01082", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01082", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01083", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01083-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01083.py -- tests/files/web/generated/M21-GAP-01083-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01083", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01083", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01084", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01084-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01084.py -- tests/files/web/generated/M21-GAP-01084-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01084", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01084", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01085", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01085-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01085.py -- tests/files/web/generated/M21-GAP-01085-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01085", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01085", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01086", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01086-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01086.py -- tests/files/web/generated/M21-GAP-01086-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01086", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01086", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01087", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01087-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01087.py -- tests/files/web/generated/M21-GAP-01087-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01087", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01087", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01088", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01088-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01088.py -- tests/files/web/generated/M21-GAP-01088-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01088", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01088", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01089", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01089-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01089.py -- tests/files/web/generated/M21-GAP-01089-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01089", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01089", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01090", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01090-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01090.py -- tests/files/web/generated/M21-GAP-01090-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01090", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01090", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01091", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01091-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01091.py -- tests/files/web/generated/M21-GAP-01091-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01091", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01091", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01092", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01092-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01092.py -- tests/files/web/generated/M21-GAP-01092-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01092", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01092", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01093", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01093-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01093.py -- tests/files/web/generated/M21-GAP-01093-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01093", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01093", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01094", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01094-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01094.py -- tests/files/web/generated/M21-GAP-01094-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01094", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01094", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01095", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01095-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01095.py -- tests/files/web/generated/M21-GAP-01095-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01095", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01095", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01096", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01096-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01096.py -- tests/files/web/generated/M21-GAP-01096-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01096", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01096", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01097", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01097-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01097.py -- tests/files/web/generated/M21-GAP-01097-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01097", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01097", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01098", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01098-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01098.py -- tests/files/web/generated/M21-GAP-01098-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01098", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01098", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01099", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01099-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01099.py -- tests/files/web/generated/M21-GAP-01099-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01099", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01099", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01100", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01100-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01100.py -- tests/files/web/generated/M21-GAP-01100-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01100", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01100", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01101", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01101-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01101.py -- tests/files/web/generated/M21-GAP-01101-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01101", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01101", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01102", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01102-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01102.py -- tests/files/web/generated/M21-GAP-01102-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01102", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01102", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01103", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01103-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-50.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01103.py -- tests/files/web/generated/M21-GAP-01103-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-50.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01103", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01103", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01104", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:51", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01104-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-51.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01104.py -- tests/files/web/generated/M21-GAP-01104-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-51.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01104", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01104", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01105", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:52", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01105-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-52.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01105.py -- tests/files/web/generated/M21-GAP-01105-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-52.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01105", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01105", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01106", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:53", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01106-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-53.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01106.py -- tests/files/web/generated/M21-GAP-01106-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-53.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01106", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01106", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01107", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:54", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01107-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-54.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01107.py -- tests/files/web/generated/M21-GAP-01107-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-54.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01107", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01107", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01108", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:55", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01108-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-55.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01108.py -- tests/files/web/generated/M21-GAP-01108-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-55.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01108", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01108", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01109", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:56", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01109-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-56.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01109.py -- tests/files/web/generated/M21-GAP-01109-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-56.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01109", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01109", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01110", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:57", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01110-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-57.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01110.py -- tests/files/web/generated/M21-GAP-01110-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-57.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01110", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01110", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01111", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:58", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01111-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-58.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01111.py -- tests/files/web/generated/M21-GAP-01111-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-58.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01111", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01111", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01112", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:59", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01112-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-59.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01112.py -- tests/files/web/generated/M21-GAP-01112-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-59.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01112", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01112", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01113", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01113-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01113.py -- tests/files/web/generated/M21-GAP-01113-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01113", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01113", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01114", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:60", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01114-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-60.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01114.py -- tests/files/web/generated/M21-GAP-01114-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-60.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01114", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01114", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01115", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:61", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01115-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-61.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01115.py -- tests/files/web/generated/M21-GAP-01115-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-61.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01115", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01115", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01116", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:62", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01116-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-62.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01116.py -- tests/files/web/generated/M21-GAP-01116-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-62.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01116", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01116", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01117", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:63", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01117-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-63.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01117.py -- tests/files/web/generated/M21-GAP-01117-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-63.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01117", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01117", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01118", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:64", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01118-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-64.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01118.py -- tests/files/web/generated/M21-GAP-01118-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-64.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01118", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01118", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01119", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:65", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01119-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-65.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01119.py -- tests/files/web/generated/M21-GAP-01119-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-65.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01119", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01119", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01120", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:66", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01120-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-66.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01120.py -- tests/files/web/generated/M21-GAP-01120-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-66.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01120", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01120", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01121", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:67", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01121-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-67.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01121.py -- tests/files/web/generated/M21-GAP-01121-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-67.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01121", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01121", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01122", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:68", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01122-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-68.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01122.py -- tests/files/web/generated/M21-GAP-01122-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-68.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01122", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01122", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01123", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:69", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01123-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-69.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01123.py -- tests/files/web/generated/M21-GAP-01123-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-69.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01123", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01123", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01124", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01124-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01124.py -- tests/files/web/generated/M21-GAP-01124-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01124", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01124", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01125", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:70", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01125-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-70.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01125.py -- tests/files/web/generated/M21-GAP-01125-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-70.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01125", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01125", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01126", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01126-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01126.py -- tests/files/web/generated/M21-GAP-01126-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01126", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01126", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01127", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01127-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01127.py -- tests/files/web/generated/M21-GAP-01127-keymap-item-Graph-Editor-GRAPH_EDITOR-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01127", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01127", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01128", + "gapId": "keymap-item:Grease Pencil Brush Stroke:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01128-keymap-item-Grease-Pencil-Brush-Stroke-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01128.py -- tests/files/web/generated/M21-GAP-01128-keymap-item-Grease-Pencil-Brush-Stroke-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01128", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01128", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01129", + "gapId": "keymap-item:Grease Pencil Brush Stroke:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01129-keymap-item-Grease-Pencil-Brush-Stroke-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01129.py -- tests/files/web/generated/M21-GAP-01129-keymap-item-Grease-Pencil-Brush-Stroke-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01129", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01129", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01130", + "gapId": "keymap-item:Grease Pencil Brush Stroke:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01130-keymap-item-Grease-Pencil-Brush-Stroke-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01130.py -- tests/files/web/generated/M21-GAP-01130-keymap-item-Grease-Pencil-Brush-Stroke-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01130", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01130", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01131", + "gapId": "keymap-item:Grease Pencil Brush Stroke:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01131-keymap-item-Grease-Pencil-Brush-Stroke-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01131.py -- tests/files/web/generated/M21-GAP-01131-keymap-item-Grease-Pencil-Brush-Stroke-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01131", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01131", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01132", + "gapId": "keymap-item:Grease Pencil Brush Stroke:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01132-keymap-item-Grease-Pencil-Brush-Stroke-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01132.py -- tests/files/web/generated/M21-GAP-01132-keymap-item-Grease-Pencil-Brush-Stroke-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01132", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01132", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01133", + "gapId": "keymap-item:Grease Pencil Brush Stroke:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01133-keymap-item-Grease-Pencil-Brush-Stroke-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01133.py -- tests/files/web/generated/M21-GAP-01133-keymap-item-Grease-Pencil-Brush-Stroke-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01133", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01133", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01134", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01134-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01134.py -- tests/files/web/generated/M21-GAP-01134-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01134", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01134", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01135", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01135-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01135.py -- tests/files/web/generated/M21-GAP-01135-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01135", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01135", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01136", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01136-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01136.py -- tests/files/web/generated/M21-GAP-01136-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01136", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01136", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01137", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01137-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01137.py -- tests/files/web/generated/M21-GAP-01137-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01137", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01137", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01138", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01138-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01138.py -- tests/files/web/generated/M21-GAP-01138-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01138", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01138", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01139", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01139-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01139.py -- tests/files/web/generated/M21-GAP-01139-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01139", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01139", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01140", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01140-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01140.py -- tests/files/web/generated/M21-GAP-01140-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01140", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01140", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01141", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01141-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01141.py -- tests/files/web/generated/M21-GAP-01141-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01141", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01141", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01142", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01142-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01142.py -- tests/files/web/generated/M21-GAP-01142-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01142", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01142", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01143", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01143-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01143.py -- tests/files/web/generated/M21-GAP-01143-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01143", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01143", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01144", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01144-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01144.py -- tests/files/web/generated/M21-GAP-01144-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01144", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01144", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01145", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01145-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01145.py -- tests/files/web/generated/M21-GAP-01145-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01145", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01145", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01146", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01146-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01146.py -- tests/files/web/generated/M21-GAP-01146-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01146", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01146", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01147", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01147-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01147.py -- tests/files/web/generated/M21-GAP-01147-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01147", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01147", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01148", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01148-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01148.py -- tests/files/web/generated/M21-GAP-01148-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01148", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01148", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01149", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01149-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01149.py -- tests/files/web/generated/M21-GAP-01149-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01149", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01149", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01150", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01150-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01150.py -- tests/files/web/generated/M21-GAP-01150-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01150", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01150", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01151", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01151-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01151.py -- tests/files/web/generated/M21-GAP-01151-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01151", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01151", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01152", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01152-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01152.py -- tests/files/web/generated/M21-GAP-01152-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01152", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01152", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01153", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01153-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01153.py -- tests/files/web/generated/M21-GAP-01153-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01153", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01153", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01154", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01154-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01154.py -- tests/files/web/generated/M21-GAP-01154-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01154", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01154", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01155", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01155-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01155.py -- tests/files/web/generated/M21-GAP-01155-keymap-item-Grease-Pencil-Draw-Mode-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01155", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01155", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01156", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01156-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01156.py -- tests/files/web/generated/M21-GAP-01156-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01156", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01156", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01157", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01157-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01157.py -- tests/files/web/generated/M21-GAP-01157-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01157", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01157", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01158", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01158-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01158.py -- tests/files/web/generated/M21-GAP-01158-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01158", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01158", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01159", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01159-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01159.py -- tests/files/web/generated/M21-GAP-01159-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01159", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01159", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01160", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01160-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01160.py -- tests/files/web/generated/M21-GAP-01160-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01160", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01160", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01161", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01161-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01161.py -- tests/files/web/generated/M21-GAP-01161-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01161", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01161", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01162", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01162-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01162.py -- tests/files/web/generated/M21-GAP-01162-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01162", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01162", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01163", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01163-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01163.py -- tests/files/web/generated/M21-GAP-01163-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01163", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01163", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01164", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01164-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01164.py -- tests/files/web/generated/M21-GAP-01164-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01164", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01164", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01165", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01165-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01165.py -- tests/files/web/generated/M21-GAP-01165-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01165", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01165", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01166", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01166-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01166.py -- tests/files/web/generated/M21-GAP-01166-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01166", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01166", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01167", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01167-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01167.py -- tests/files/web/generated/M21-GAP-01167-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01167", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01167", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01168", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01168-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01168.py -- tests/files/web/generated/M21-GAP-01168-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01168", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01168", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01169", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01169-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01169.py -- tests/files/web/generated/M21-GAP-01169-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01169", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01169", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01170", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01170-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01170.py -- tests/files/web/generated/M21-GAP-01170-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01170", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01170", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01171", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01171-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01171.py -- tests/files/web/generated/M21-GAP-01171-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01171", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01171", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01172", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01172-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01172.py -- tests/files/web/generated/M21-GAP-01172-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01172", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01172", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01173", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01173-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01173.py -- tests/files/web/generated/M21-GAP-01173-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01173", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01173", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01174", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01174-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01174.py -- tests/files/web/generated/M21-GAP-01174-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01174", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01174", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01175", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01175-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01175.py -- tests/files/web/generated/M21-GAP-01175-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01175", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01175", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01176", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01176-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01176.py -- tests/files/web/generated/M21-GAP-01176-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01176", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01176", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01177", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01177-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01177.py -- tests/files/web/generated/M21-GAP-01177-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01177", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01177", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01178", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01178-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01178.py -- tests/files/web/generated/M21-GAP-01178-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01178", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01178", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01179", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01179-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01179.py -- tests/files/web/generated/M21-GAP-01179-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01179", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01179", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01180", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01180-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01180.py -- tests/files/web/generated/M21-GAP-01180-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01180", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01180", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01181", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01181-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01181.py -- tests/files/web/generated/M21-GAP-01181-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01181", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01181", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01182", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01182-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01182.py -- tests/files/web/generated/M21-GAP-01182-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01182", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01182", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01183", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01183-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01183.py -- tests/files/web/generated/M21-GAP-01183-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01183", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01183", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01184", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01184-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01184.py -- tests/files/web/generated/M21-GAP-01184-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01184", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01184", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01185", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01185-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01185.py -- tests/files/web/generated/M21-GAP-01185-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01185", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01185", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01186", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01186-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01186.py -- tests/files/web/generated/M21-GAP-01186-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01186", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01186", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01187", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01187-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01187.py -- tests/files/web/generated/M21-GAP-01187-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01187", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01187", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01188", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01188-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01188.py -- tests/files/web/generated/M21-GAP-01188-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01188", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01188", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01189", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01189-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01189.py -- tests/files/web/generated/M21-GAP-01189-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01189", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01189", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01190", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01190-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01190.py -- tests/files/web/generated/M21-GAP-01190-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01190", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01190", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01191", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01191-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01191.py -- tests/files/web/generated/M21-GAP-01191-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01191", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01191", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01192", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01192-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01192.py -- tests/files/web/generated/M21-GAP-01192-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01192", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01192", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01193", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01193-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01193.py -- tests/files/web/generated/M21-GAP-01193-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01193", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01193", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01194", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01194-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01194.py -- tests/files/web/generated/M21-GAP-01194-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01194", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01194", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01195", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01195-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01195.py -- tests/files/web/generated/M21-GAP-01195-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01195", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01195", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01196", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01196-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01196.py -- tests/files/web/generated/M21-GAP-01196-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01196", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01196", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01197", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01197-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01197.py -- tests/files/web/generated/M21-GAP-01197-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01197", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01197", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01198", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01198-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01198.py -- tests/files/web/generated/M21-GAP-01198-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01198", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01198", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01199", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01199-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01199.py -- tests/files/web/generated/M21-GAP-01199-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01199", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01199", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01200", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01200-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01200.py -- tests/files/web/generated/M21-GAP-01200-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01200", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01200", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01201", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01201-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01201.py -- tests/files/web/generated/M21-GAP-01201-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01201", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01201", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01202", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01202-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-50.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01202.py -- tests/files/web/generated/M21-GAP-01202-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-50.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01202", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01202", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01203", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01203-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-51.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01203.py -- tests/files/web/generated/M21-GAP-01203-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-51.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01203", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01203", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01204", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:52", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01204-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-52.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01204.py -- tests/files/web/generated/M21-GAP-01204-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-52.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01204", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01204", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01205", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:53", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01205-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-53.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01205.py -- tests/files/web/generated/M21-GAP-01205-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-53.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01205", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01205", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01206", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:54", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01206-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-54.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01206.py -- tests/files/web/generated/M21-GAP-01206-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-54.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01206", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01206", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01207", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:55", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01207-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-55.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01207.py -- tests/files/web/generated/M21-GAP-01207-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-55.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01207", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01207", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01208", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:56", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01208-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-56.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01208.py -- tests/files/web/generated/M21-GAP-01208-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-56.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01208", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01208", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01209", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01209-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01209.py -- tests/files/web/generated/M21-GAP-01209-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01209", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01209", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01210", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01210-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01210.py -- tests/files/web/generated/M21-GAP-01210-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01210", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01210", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01211", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01211-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01211.py -- tests/files/web/generated/M21-GAP-01211-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01211", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01211", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01212", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01212-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01212.py -- tests/files/web/generated/M21-GAP-01212-keymap-item-Grease-Pencil-Edit-Mode-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01212", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01212", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01213", + "gapId": "keymap-item:Grease Pencil Fill Tool:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01213-keymap-item-Grease-Pencil-Fill-Tool-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01213.py -- tests/files/web/generated/M21-GAP-01213-keymap-item-Grease-Pencil-Fill-Tool-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01213", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01213", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01214", + "gapId": "keymap-item:Grease Pencil Fill Tool:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01214-keymap-item-Grease-Pencil-Fill-Tool-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01214.py -- tests/files/web/generated/M21-GAP-01214-keymap-item-Grease-Pencil-Fill-Tool-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01214", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01214", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01215", + "gapId": "keymap-item:Grease Pencil Fill Tool:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01215-keymap-item-Grease-Pencil-Fill-Tool-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01215.py -- tests/files/web/generated/M21-GAP-01215-keymap-item-Grease-Pencil-Fill-Tool-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01215", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01215", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01216", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01216-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01216.py -- tests/files/web/generated/M21-GAP-01216-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01216", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01216", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01217", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01217-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01217.py -- tests/files/web/generated/M21-GAP-01217-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01217", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01217", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01218", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01218-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01218.py -- tests/files/web/generated/M21-GAP-01218-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01218", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01218", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01219", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01219-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01219.py -- tests/files/web/generated/M21-GAP-01219-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01219", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01219", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01220", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01220-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01220.py -- tests/files/web/generated/M21-GAP-01220-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01220", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01220", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01221", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01221-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01221.py -- tests/files/web/generated/M21-GAP-01221-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01221", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01221", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01222", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01222-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01222.py -- tests/files/web/generated/M21-GAP-01222-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01222", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01222", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01223", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01223-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01223.py -- tests/files/web/generated/M21-GAP-01223-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01223", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01223", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01224", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01224-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01224.py -- tests/files/web/generated/M21-GAP-01224-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01224", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01224", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01225", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01225-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01225.py -- tests/files/web/generated/M21-GAP-01225-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01225", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01225", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01226", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01226-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01226.py -- tests/files/web/generated/M21-GAP-01226-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01226", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01226", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01227", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01227-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01227.py -- tests/files/web/generated/M21-GAP-01227-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01227", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01227", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01228", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01228-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01228.py -- tests/files/web/generated/M21-GAP-01228-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01228", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01228", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01229", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01229-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01229.py -- tests/files/web/generated/M21-GAP-01229-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01229", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01229", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01230", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01230-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01230.py -- tests/files/web/generated/M21-GAP-01230-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01230", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01230", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01231", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01231-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01231.py -- tests/files/web/generated/M21-GAP-01231-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01231", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01231", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01232", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01232-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01232.py -- tests/files/web/generated/M21-GAP-01232-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01232", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01232", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01233", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01233-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01233.py -- tests/files/web/generated/M21-GAP-01233-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01233", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01233", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01234", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01234-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01234.py -- tests/files/web/generated/M21-GAP-01234-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01234", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01234", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01235", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01235-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01235.py -- tests/files/web/generated/M21-GAP-01235-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01235", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01235", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01236", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01236-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01236.py -- tests/files/web/generated/M21-GAP-01236-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01236", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01236", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01237", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01237-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01237.py -- tests/files/web/generated/M21-GAP-01237-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01237", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01237", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01238", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01238-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01238.py -- tests/files/web/generated/M21-GAP-01238-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01238", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01238", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01239", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01239-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01239.py -- tests/files/web/generated/M21-GAP-01239-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01239", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01239", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01240", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01240-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01240.py -- tests/files/web/generated/M21-GAP-01240-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01240", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01240", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01241", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01241-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01241.py -- tests/files/web/generated/M21-GAP-01241-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01241", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01241", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01242", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01242-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01242.py -- tests/files/web/generated/M21-GAP-01242-keymap-item-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01242", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01242", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01243", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01243-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01243.py -- tests/files/web/generated/M21-GAP-01243-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01243", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01243", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01244", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01244-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01244.py -- tests/files/web/generated/M21-GAP-01244-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01244", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01244", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01245", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01245-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01245.py -- tests/files/web/generated/M21-GAP-01245-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01245", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01245", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01246", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01246-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01246.py -- tests/files/web/generated/M21-GAP-01246-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01246", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01246", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01247", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01247-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01247.py -- tests/files/web/generated/M21-GAP-01247-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01247", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01247", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01248", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01248-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01248.py -- tests/files/web/generated/M21-GAP-01248-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01248", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01248", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01249", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01249-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01249.py -- tests/files/web/generated/M21-GAP-01249-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01249", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01249", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01250", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01250-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01250.py -- tests/files/web/generated/M21-GAP-01250-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01250", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01250", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01251", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01251-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01251.py -- tests/files/web/generated/M21-GAP-01251-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01251", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01251", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01252", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01252-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01252.py -- tests/files/web/generated/M21-GAP-01252-keymap-item-Grease-Pencil-Selection-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01252", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01252", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01253", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01253-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01253.py -- tests/files/web/generated/M21-GAP-01253-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01253", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01253", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01254", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01254-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01254.py -- tests/files/web/generated/M21-GAP-01254-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01254", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01254", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01255", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01255-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01255.py -- tests/files/web/generated/M21-GAP-01255-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01255", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01255", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01256", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01256-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01256.py -- tests/files/web/generated/M21-GAP-01256-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01256", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01256", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01257", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01257-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01257.py -- tests/files/web/generated/M21-GAP-01257-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01257", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01257", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01258", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01258-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01258.py -- tests/files/web/generated/M21-GAP-01258-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01258", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01258", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01259", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01259-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01259.py -- tests/files/web/generated/M21-GAP-01259-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01259", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01259", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01260", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01260-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01260.py -- tests/files/web/generated/M21-GAP-01260-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01260", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01260", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01261", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01261-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01261.py -- tests/files/web/generated/M21-GAP-01261-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01261", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01261", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01262", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01262-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01262.py -- tests/files/web/generated/M21-GAP-01262-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01262", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01262", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01263", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01263-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01263.py -- tests/files/web/generated/M21-GAP-01263-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01263", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01263", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01264", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01264-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01264.py -- tests/files/web/generated/M21-GAP-01264-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01264", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01264", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01265", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01265-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01265.py -- tests/files/web/generated/M21-GAP-01265-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01265", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01265", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01266", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01266-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01266.py -- tests/files/web/generated/M21-GAP-01266-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01266", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01266", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01267", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01267-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01267.py -- tests/files/web/generated/M21-GAP-01267-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01267", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01267", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01268", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01268-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01268.py -- tests/files/web/generated/M21-GAP-01268-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01268", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01268", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01269", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01269-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01269.py -- tests/files/web/generated/M21-GAP-01269-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01269", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01269", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01270", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01270-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01270.py -- tests/files/web/generated/M21-GAP-01270-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01270", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01270", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01271", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01271-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01271.py -- tests/files/web/generated/M21-GAP-01271-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01271", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01271", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01272", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01272-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01272.py -- tests/files/web/generated/M21-GAP-01272-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01272", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01272", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01273", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01273-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01273.py -- tests/files/web/generated/M21-GAP-01273-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01273", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01273", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01274", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01274-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01274.py -- tests/files/web/generated/M21-GAP-01274-keymap-item-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01274", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01274", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01275", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01275-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01275.py -- tests/files/web/generated/M21-GAP-01275-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01275", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01275", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01276", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01276-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01276.py -- tests/files/web/generated/M21-GAP-01276-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01276", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01276", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01277", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01277-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01277.py -- tests/files/web/generated/M21-GAP-01277-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01277", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01277", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01278", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01278-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01278.py -- tests/files/web/generated/M21-GAP-01278-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01278", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01278", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01279", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01279-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01279.py -- tests/files/web/generated/M21-GAP-01279-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01279", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01279", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01280", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01280-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01280.py -- tests/files/web/generated/M21-GAP-01280-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01280", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01280", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01281", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01281-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01281.py -- tests/files/web/generated/M21-GAP-01281-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01281", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01281", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01282", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01282-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01282.py -- tests/files/web/generated/M21-GAP-01282-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01282", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01282", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01283", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01283-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01283.py -- tests/files/web/generated/M21-GAP-01283-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01283", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01283", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01284", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01284-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01284.py -- tests/files/web/generated/M21-GAP-01284-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01284", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01284", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01285", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01285-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01285.py -- tests/files/web/generated/M21-GAP-01285-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01285", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01285", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01286", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01286-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01286.py -- tests/files/web/generated/M21-GAP-01286-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01286", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01286", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01287", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01287-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01287.py -- tests/files/web/generated/M21-GAP-01287-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01287", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01287", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01288", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01288-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01288.py -- tests/files/web/generated/M21-GAP-01288-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01288", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01288", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01289", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01289-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01289.py -- tests/files/web/generated/M21-GAP-01289-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01289", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01289", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01290", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01290-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01290.py -- tests/files/web/generated/M21-GAP-01290-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01290", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01290", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01291", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01291-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01291.py -- tests/files/web/generated/M21-GAP-01291-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01291", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01291", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01292", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01292-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01292.py -- tests/files/web/generated/M21-GAP-01292-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01292", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01292", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01293", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01293-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01293.py -- tests/files/web/generated/M21-GAP-01293-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01293", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01293", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01294", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01294-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01294.py -- tests/files/web/generated/M21-GAP-01294-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01294", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01294", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01295", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01295-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01295.py -- tests/files/web/generated/M21-GAP-01295-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01295", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01295", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01296", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01296-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01296.py -- tests/files/web/generated/M21-GAP-01296-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01296", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01296", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01297", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01297-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01297.py -- tests/files/web/generated/M21-GAP-01297-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01297", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01297", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01298", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01298-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01298.py -- tests/files/web/generated/M21-GAP-01298-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01298", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01298", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01299", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01299-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01299.py -- tests/files/web/generated/M21-GAP-01299-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01299", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01299", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01300", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01300-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01300.py -- tests/files/web/generated/M21-GAP-01300-keymap-item-Grease-Pencil-Weight-Paint-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01300", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01300", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01301", + "gapId": "keymap-item:Grease Pencil:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01301-keymap-item-Grease-Pencil-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01301.py -- tests/files/web/generated/M21-GAP-01301-keymap-item-Grease-Pencil-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01301", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01301", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01302", + "gapId": "keymap-item:Grease Pencil:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01302-keymap-item-Grease-Pencil-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01302.py -- tests/files/web/generated/M21-GAP-01302-keymap-item-Grease-Pencil-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01302", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01302", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01303", + "gapId": "keymap-item:Grease Pencil:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01303-keymap-item-Grease-Pencil-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01303.py -- tests/files/web/generated/M21-GAP-01303-keymap-item-Grease-Pencil-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01303", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01303", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01304", + "gapId": "keymap-item:Grease Pencil:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01304-keymap-item-Grease-Pencil-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01304.py -- tests/files/web/generated/M21-GAP-01304-keymap-item-Grease-Pencil-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01304", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01304", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01305", + "gapId": "keymap-item:Grease Pencil:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01305-keymap-item-Grease-Pencil-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01305.py -- tests/files/web/generated/M21-GAP-01305-keymap-item-Grease-Pencil-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01305", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01305", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01306", + "gapId": "keymap-item:Image Editor Tool: Mask, Box:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01306-keymap-item-Image-Editor-Tool-Mask-Box-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01306.py -- tests/files/web/generated/M21-GAP-01306-keymap-item-Image-Editor-Tool-Mask-Box-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01306", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01306", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01307", + "gapId": "keymap-item:Image Editor Tool: Mask, Circle:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01307-keymap-item-Image-Editor-Tool-Mask-Circle-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01307.py -- tests/files/web/generated/M21-GAP-01307-keymap-item-Image-Editor-Tool-Mask-Circle-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01307", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01307", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01308", + "gapId": "keymap-item:Image Editor Tool: Mask, Cursor:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01308-keymap-item-Image-Editor-Tool-Mask-Cursor-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01308.py -- tests/files/web/generated/M21-GAP-01308-keymap-item-Image-Editor-Tool-Mask-Cursor-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01308", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01308", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01309", + "gapId": "keymap-item:Image Editor Tool: Mask, Cursor:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01309-keymap-item-Image-Editor-Tool-Mask-Cursor-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01309.py -- tests/files/web/generated/M21-GAP-01309-keymap-item-Image-Editor-Tool-Mask-Cursor-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01309", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01309", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01310", + "gapId": "keymap-item:Image Editor Tool: Mask, Move:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01310-keymap-item-Image-Editor-Tool-Mask-Move-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01310.py -- tests/files/web/generated/M21-GAP-01310-keymap-item-Image-Editor-Tool-Mask-Move-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01310", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01310", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01311", + "gapId": "keymap-item:Image Editor Tool: Mask, Rotate:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01311-keymap-item-Image-Editor-Tool-Mask-Rotate-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01311.py -- tests/files/web/generated/M21-GAP-01311-keymap-item-Image-Editor-Tool-Mask-Rotate-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01311", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01311", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01312", + "gapId": "keymap-item:Image Editor Tool: Mask, Scale:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01312-keymap-item-Image-Editor-Tool-Mask-Scale-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01312.py -- tests/files/web/generated/M21-GAP-01312-keymap-item-Image-Editor-Tool-Mask-Scale-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01312", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01312", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01313", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Box (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01313-keymap-item-Image-Editor-Tool-Mask-Select-Box-fallback-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01313.py -- tests/files/web/generated/M21-GAP-01313-keymap-item-Image-Editor-Tool-Mask-Select-Box-fallback-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01313", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01313", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01314", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Box (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01314-keymap-item-Image-Editor-Tool-Mask-Select-Box-fallback-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01314.py -- tests/files/web/generated/M21-GAP-01314-keymap-item-Image-Editor-Tool-Mask-Select-Box-fallback-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01314", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01314", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01315", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Box (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01315-keymap-item-Image-Editor-Tool-Mask-Select-Box-fallback-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01315.py -- tests/files/web/generated/M21-GAP-01315-keymap-item-Image-Editor-Tool-Mask-Select-Box-fallback-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01315", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01315", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01316", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Box:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01316-keymap-item-Image-Editor-Tool-Mask-Select-Box-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01316.py -- tests/files/web/generated/M21-GAP-01316-keymap-item-Image-Editor-Tool-Mask-Select-Box-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01316", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01316", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01317", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Box:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01317-keymap-item-Image-Editor-Tool-Mask-Select-Box-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01317.py -- tests/files/web/generated/M21-GAP-01317-keymap-item-Image-Editor-Tool-Mask-Select-Box-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01317", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01317", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01318", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Box:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01318-keymap-item-Image-Editor-Tool-Mask-Select-Box-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01318.py -- tests/files/web/generated/M21-GAP-01318-keymap-item-Image-Editor-Tool-Mask-Select-Box-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01318", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01318", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01319", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Circle (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01319-keymap-item-Image-Editor-Tool-Mask-Select-Circle-fallback-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01319.py -- tests/files/web/generated/M21-GAP-01319-keymap-item-Image-Editor-Tool-Mask-Select-Circle-fallback-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01319", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01319", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01320", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Circle (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01320-keymap-item-Image-Editor-Tool-Mask-Select-Circle-fallback-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01320.py -- tests/files/web/generated/M21-GAP-01320-keymap-item-Image-Editor-Tool-Mask-Select-Circle-fallback-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01320", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01320", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01321", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Circle (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01321-keymap-item-Image-Editor-Tool-Mask-Select-Circle-fallback-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01321.py -- tests/files/web/generated/M21-GAP-01321-keymap-item-Image-Editor-Tool-Mask-Select-Circle-fallback-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01321", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01321", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01322", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Circle:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01322-keymap-item-Image-Editor-Tool-Mask-Select-Circle-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01322.py -- tests/files/web/generated/M21-GAP-01322-keymap-item-Image-Editor-Tool-Mask-Select-Circle-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01322", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01322", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01323", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Circle:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01323-keymap-item-Image-Editor-Tool-Mask-Select-Circle-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01323.py -- tests/files/web/generated/M21-GAP-01323-keymap-item-Image-Editor-Tool-Mask-Select-Circle-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01323", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01323", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01324", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Circle:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01324-keymap-item-Image-Editor-Tool-Mask-Select-Circle-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01324.py -- tests/files/web/generated/M21-GAP-01324-keymap-item-Image-Editor-Tool-Mask-Select-Circle-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01324", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01324", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01325", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Lasso (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01325-keymap-item-Image-Editor-Tool-Mask-Select-Lasso-fallback-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01325.py -- tests/files/web/generated/M21-GAP-01325-keymap-item-Image-Editor-Tool-Mask-Select-Lasso-fallback-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01325", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01325", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01326", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Lasso (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01326-keymap-item-Image-Editor-Tool-Mask-Select-Lasso-fallback-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01326.py -- tests/files/web/generated/M21-GAP-01326-keymap-item-Image-Editor-Tool-Mask-Select-Lasso-fallback-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01326", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01326", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01327", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Lasso (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01327-keymap-item-Image-Editor-Tool-Mask-Select-Lasso-fallback-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01327.py -- tests/files/web/generated/M21-GAP-01327-keymap-item-Image-Editor-Tool-Mask-Select-Lasso-fallback-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01327", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01327", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01328", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Lasso:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01328-keymap-item-Image-Editor-Tool-Mask-Select-Lasso-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01328.py -- tests/files/web/generated/M21-GAP-01328-keymap-item-Image-Editor-Tool-Mask-Select-Lasso-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01328", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01328", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01329", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Lasso:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01329-keymap-item-Image-Editor-Tool-Mask-Select-Lasso-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01329.py -- tests/files/web/generated/M21-GAP-01329-keymap-item-Image-Editor-Tool-Mask-Select-Lasso-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01329", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01329", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01330", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Lasso:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01330-keymap-item-Image-Editor-Tool-Mask-Select-Lasso-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01330.py -- tests/files/web/generated/M21-GAP-01330-keymap-item-Image-Editor-Tool-Mask-Select-Lasso-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01330", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01330", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01331", + "gapId": "keymap-item:Image Editor Tool: Mask, Transform:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01331-keymap-item-Image-Editor-Tool-Mask-Transform-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01331.py -- tests/files/web/generated/M21-GAP-01331-keymap-item-Image-Editor-Tool-Mask-Transform-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01331", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01331", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01332", + "gapId": "keymap-item:Image Editor Tool: Mask, Tweak (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01332-keymap-item-Image-Editor-Tool-Mask-Tweak-fallback-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01332.py -- tests/files/web/generated/M21-GAP-01332-keymap-item-Image-Editor-Tool-Mask-Tweak-fallback-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01332", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01332", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01333", + "gapId": "keymap-item:Image Editor Tool: Mask, Tweak (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01333-keymap-item-Image-Editor-Tool-Mask-Tweak-fallback-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01333.py -- tests/files/web/generated/M21-GAP-01333-keymap-item-Image-Editor-Tool-Mask-Tweak-fallback-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01333", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01333", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01334", + "gapId": "keymap-item:Image Editor Tool: Mask, Tweak (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01334-keymap-item-Image-Editor-Tool-Mask-Tweak-fallback-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01334.py -- tests/files/web/generated/M21-GAP-01334-keymap-item-Image-Editor-Tool-Mask-Tweak-fallback-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01334", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01334", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01335", + "gapId": "keymap-item:Image Editor Tool: Mask, Tweak:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01335-keymap-item-Image-Editor-Tool-Mask-Tweak-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01335.py -- tests/files/web/generated/M21-GAP-01335-keymap-item-Image-Editor-Tool-Mask-Tweak-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01335", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01335", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01336", + "gapId": "keymap-item:Image Editor Tool: Mask, Tweak:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01336-keymap-item-Image-Editor-Tool-Mask-Tweak-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01336.py -- tests/files/web/generated/M21-GAP-01336-keymap-item-Image-Editor-Tool-Mask-Tweak-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01336", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01336", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01337", + "gapId": "keymap-item:Image Editor Tool: Mask, Tweak:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01337-keymap-item-Image-Editor-Tool-Mask-Tweak-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01337.py -- tests/files/web/generated/M21-GAP-01337-keymap-item-Image-Editor-Tool-Mask-Tweak-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01337", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01337", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01338", + "gapId": "keymap-item:Image Editor Tool: Sample:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01338-keymap-item-Image-Editor-Tool-Sample-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01338.py -- tests/files/web/generated/M21-GAP-01338-keymap-item-Image-Editor-Tool-Sample-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01338", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01338", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01339", + "gapId": "keymap-item:Image Editor Tool: Uv, Cursor:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01339-keymap-item-Image-Editor-Tool-Uv-Cursor-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01339.py -- tests/files/web/generated/M21-GAP-01339-keymap-item-Image-Editor-Tool-Uv-Cursor-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01339", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01339", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01340", + "gapId": "keymap-item:Image Editor Tool: Uv, Cursor:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01340-keymap-item-Image-Editor-Tool-Uv-Cursor-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01340.py -- tests/files/web/generated/M21-GAP-01340-keymap-item-Image-Editor-Tool-Uv-Cursor-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01340", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01340", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01341", + "gapId": "keymap-item:Image Editor Tool: Uv, Grab:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01341-keymap-item-Image-Editor-Tool-Uv-Grab-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01341.py -- tests/files/web/generated/M21-GAP-01341-keymap-item-Image-Editor-Tool-Uv-Grab-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01341", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01341", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01342", + "gapId": "keymap-item:Image Editor Tool: Uv, Grab:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01342-keymap-item-Image-Editor-Tool-Uv-Grab-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01342.py -- tests/files/web/generated/M21-GAP-01342-keymap-item-Image-Editor-Tool-Uv-Grab-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01342", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01342", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01343", + "gapId": "keymap-item:Image Editor Tool: Uv, Grab:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01343-keymap-item-Image-Editor-Tool-Uv-Grab-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01343.py -- tests/files/web/generated/M21-GAP-01343-keymap-item-Image-Editor-Tool-Uv-Grab-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01343", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01343", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01344", + "gapId": "keymap-item:Image Editor Tool: Uv, Grab:IMAGE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01344-keymap-item-Image-Editor-Tool-Uv-Grab-IMAGE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01344.py -- tests/files/web/generated/M21-GAP-01344-keymap-item-Image-Editor-Tool-Uv-Grab-IMAGE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01344", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01344", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01345", + "gapId": "keymap-item:Image Editor Tool: Uv, Grab:IMAGE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01345-keymap-item-Image-Editor-Tool-Uv-Grab-IMAGE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01345.py -- tests/files/web/generated/M21-GAP-01345-keymap-item-Image-Editor-Tool-Uv-Grab-IMAGE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01345", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01345", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01346", + "gapId": "keymap-item:Image Editor Tool: Uv, Move:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01346-keymap-item-Image-Editor-Tool-Uv-Move-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01346.py -- tests/files/web/generated/M21-GAP-01346-keymap-item-Image-Editor-Tool-Uv-Move-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01346", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01346", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01347", + "gapId": "keymap-item:Image Editor Tool: Uv, Pinch:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01347-keymap-item-Image-Editor-Tool-Uv-Pinch-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01347.py -- tests/files/web/generated/M21-GAP-01347-keymap-item-Image-Editor-Tool-Uv-Pinch-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01347", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01347", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01348", + "gapId": "keymap-item:Image Editor Tool: Uv, Pinch:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01348-keymap-item-Image-Editor-Tool-Uv-Pinch-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01348.py -- tests/files/web/generated/M21-GAP-01348-keymap-item-Image-Editor-Tool-Uv-Pinch-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01348", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01348", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01349", + "gapId": "keymap-item:Image Editor Tool: Uv, Pinch:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01349-keymap-item-Image-Editor-Tool-Uv-Pinch-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01349.py -- tests/files/web/generated/M21-GAP-01349-keymap-item-Image-Editor-Tool-Uv-Pinch-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01349", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01349", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01350", + "gapId": "keymap-item:Image Editor Tool: Uv, Pinch:IMAGE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01350-keymap-item-Image-Editor-Tool-Uv-Pinch-IMAGE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01350.py -- tests/files/web/generated/M21-GAP-01350-keymap-item-Image-Editor-Tool-Uv-Pinch-IMAGE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01350", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01350", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01351", + "gapId": "keymap-item:Image Editor Tool: Uv, Pinch:IMAGE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01351-keymap-item-Image-Editor-Tool-Uv-Pinch-IMAGE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01351.py -- tests/files/web/generated/M21-GAP-01351-keymap-item-Image-Editor-Tool-Uv-Pinch-IMAGE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01351", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01351", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01352", + "gapId": "keymap-item:Image Editor Tool: Uv, Relax:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01352-keymap-item-Image-Editor-Tool-Uv-Relax-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01352.py -- tests/files/web/generated/M21-GAP-01352-keymap-item-Image-Editor-Tool-Uv-Relax-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01352", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01352", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01353", + "gapId": "keymap-item:Image Editor Tool: Uv, Relax:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01353-keymap-item-Image-Editor-Tool-Uv-Relax-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01353.py -- tests/files/web/generated/M21-GAP-01353-keymap-item-Image-Editor-Tool-Uv-Relax-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01353", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01353", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01354", + "gapId": "keymap-item:Image Editor Tool: Uv, Relax:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01354-keymap-item-Image-Editor-Tool-Uv-Relax-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01354.py -- tests/files/web/generated/M21-GAP-01354-keymap-item-Image-Editor-Tool-Uv-Relax-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01354", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01354", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01355", + "gapId": "keymap-item:Image Editor Tool: Uv, Relax:IMAGE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01355-keymap-item-Image-Editor-Tool-Uv-Relax-IMAGE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01355.py -- tests/files/web/generated/M21-GAP-01355-keymap-item-Image-Editor-Tool-Uv-Relax-IMAGE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01355", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01355", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01356", + "gapId": "keymap-item:Image Editor Tool: Uv, Relax:IMAGE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01356-keymap-item-Image-Editor-Tool-Uv-Relax-IMAGE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01356.py -- tests/files/web/generated/M21-GAP-01356-keymap-item-Image-Editor-Tool-Uv-Relax-IMAGE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01356", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01356", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01357", + "gapId": "keymap-item:Image Editor Tool: Uv, Rip Region:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01357-keymap-item-Image-Editor-Tool-Uv-Rip-Region-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01357.py -- tests/files/web/generated/M21-GAP-01357-keymap-item-Image-Editor-Tool-Uv-Rip-Region-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01357", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01357", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01358", + "gapId": "keymap-item:Image Editor Tool: Uv, Rotate:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01358-keymap-item-Image-Editor-Tool-Uv-Rotate-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01358.py -- tests/files/web/generated/M21-GAP-01358-keymap-item-Image-Editor-Tool-Uv-Rotate-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01358", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01358", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01359", + "gapId": "keymap-item:Image Editor Tool: Uv, Scale:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01359-keymap-item-Image-Editor-Tool-Uv-Scale-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01359.py -- tests/files/web/generated/M21-GAP-01359-keymap-item-Image-Editor-Tool-Uv-Scale-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01359", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01359", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01360", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Box (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01360-keymap-item-Image-Editor-Tool-Uv-Select-Box-fallback-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01360.py -- tests/files/web/generated/M21-GAP-01360-keymap-item-Image-Editor-Tool-Uv-Select-Box-fallback-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01360", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01360", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01361", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Box (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01361-keymap-item-Image-Editor-Tool-Uv-Select-Box-fallback-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01361.py -- tests/files/web/generated/M21-GAP-01361-keymap-item-Image-Editor-Tool-Uv-Select-Box-fallback-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01361", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01361", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01362", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Box (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01362-keymap-item-Image-Editor-Tool-Uv-Select-Box-fallback-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01362.py -- tests/files/web/generated/M21-GAP-01362-keymap-item-Image-Editor-Tool-Uv-Select-Box-fallback-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01362", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01362", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01363", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Box:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01363-keymap-item-Image-Editor-Tool-Uv-Select-Box-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01363.py -- tests/files/web/generated/M21-GAP-01363-keymap-item-Image-Editor-Tool-Uv-Select-Box-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01363", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01363", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01364", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Box:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01364-keymap-item-Image-Editor-Tool-Uv-Select-Box-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01364.py -- tests/files/web/generated/M21-GAP-01364-keymap-item-Image-Editor-Tool-Uv-Select-Box-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01364", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01364", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01365", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Box:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01365-keymap-item-Image-Editor-Tool-Uv-Select-Box-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01365.py -- tests/files/web/generated/M21-GAP-01365-keymap-item-Image-Editor-Tool-Uv-Select-Box-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01365", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01365", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01366", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Circle (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01366-keymap-item-Image-Editor-Tool-Uv-Select-Circle-fallback-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01366.py -- tests/files/web/generated/M21-GAP-01366-keymap-item-Image-Editor-Tool-Uv-Select-Circle-fallback-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01366", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01366", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01367", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Circle (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01367-keymap-item-Image-Editor-Tool-Uv-Select-Circle-fallback-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01367.py -- tests/files/web/generated/M21-GAP-01367-keymap-item-Image-Editor-Tool-Uv-Select-Circle-fallback-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01367", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01367", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01368", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Circle (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01368-keymap-item-Image-Editor-Tool-Uv-Select-Circle-fallback-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01368.py -- tests/files/web/generated/M21-GAP-01368-keymap-item-Image-Editor-Tool-Uv-Select-Circle-fallback-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01368", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01368", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01369", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Circle:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01369-keymap-item-Image-Editor-Tool-Uv-Select-Circle-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01369.py -- tests/files/web/generated/M21-GAP-01369-keymap-item-Image-Editor-Tool-Uv-Select-Circle-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01369", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01369", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01370", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Circle:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01370-keymap-item-Image-Editor-Tool-Uv-Select-Circle-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01370.py -- tests/files/web/generated/M21-GAP-01370-keymap-item-Image-Editor-Tool-Uv-Select-Circle-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01370", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01370", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01371", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Circle:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01371-keymap-item-Image-Editor-Tool-Uv-Select-Circle-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01371.py -- tests/files/web/generated/M21-GAP-01371-keymap-item-Image-Editor-Tool-Uv-Select-Circle-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01371", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01371", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01372", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Lasso (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01372-keymap-item-Image-Editor-Tool-Uv-Select-Lasso-fallback-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01372.py -- tests/files/web/generated/M21-GAP-01372-keymap-item-Image-Editor-Tool-Uv-Select-Lasso-fallback-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01372", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01372", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01373", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Lasso (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01373-keymap-item-Image-Editor-Tool-Uv-Select-Lasso-fallback-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01373.py -- tests/files/web/generated/M21-GAP-01373-keymap-item-Image-Editor-Tool-Uv-Select-Lasso-fallback-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01373", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01373", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01374", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Lasso (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01374-keymap-item-Image-Editor-Tool-Uv-Select-Lasso-fallback-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01374.py -- tests/files/web/generated/M21-GAP-01374-keymap-item-Image-Editor-Tool-Uv-Select-Lasso-fallback-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01374", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01374", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01375", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Lasso:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01375-keymap-item-Image-Editor-Tool-Uv-Select-Lasso-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01375.py -- tests/files/web/generated/M21-GAP-01375-keymap-item-Image-Editor-Tool-Uv-Select-Lasso-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01375", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01375", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01376", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Lasso:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01376-keymap-item-Image-Editor-Tool-Uv-Select-Lasso-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01376.py -- tests/files/web/generated/M21-GAP-01376-keymap-item-Image-Editor-Tool-Uv-Select-Lasso-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01376", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01376", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01377", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Lasso:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01377-keymap-item-Image-Editor-Tool-Uv-Select-Lasso-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01377.py -- tests/files/web/generated/M21-GAP-01377-keymap-item-Image-Editor-Tool-Uv-Select-Lasso-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01377", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01377", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01378", + "gapId": "keymap-item:Image Editor Tool: Uv, Tweak (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01378-keymap-item-Image-Editor-Tool-Uv-Tweak-fallback-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01378.py -- tests/files/web/generated/M21-GAP-01378-keymap-item-Image-Editor-Tool-Uv-Tweak-fallback-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01378", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01378", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01379", + "gapId": "keymap-item:Image Editor Tool: Uv, Tweak (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01379-keymap-item-Image-Editor-Tool-Uv-Tweak-fallback-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01379.py -- tests/files/web/generated/M21-GAP-01379-keymap-item-Image-Editor-Tool-Uv-Tweak-fallback-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01379", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01379", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01380", + "gapId": "keymap-item:Image Editor Tool: Uv, Tweak (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01380-keymap-item-Image-Editor-Tool-Uv-Tweak-fallback-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01380.py -- tests/files/web/generated/M21-GAP-01380-keymap-item-Image-Editor-Tool-Uv-Tweak-fallback-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01380", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01380", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01381", + "gapId": "keymap-item:Image Editor Tool: Uv, Tweak:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01381-keymap-item-Image-Editor-Tool-Uv-Tweak-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01381.py -- tests/files/web/generated/M21-GAP-01381-keymap-item-Image-Editor-Tool-Uv-Tweak-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01381", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01381", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01382", + "gapId": "keymap-item:Image Editor Tool: Uv, Tweak:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01382-keymap-item-Image-Editor-Tool-Uv-Tweak-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01382.py -- tests/files/web/generated/M21-GAP-01382-keymap-item-Image-Editor-Tool-Uv-Tweak-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01382", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01382", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01383", + "gapId": "keymap-item:Image Editor Tool: Uv, Tweak:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01383-keymap-item-Image-Editor-Tool-Uv-Tweak-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01383.py -- tests/files/web/generated/M21-GAP-01383-keymap-item-Image-Editor-Tool-Uv-Tweak-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01383", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01383", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01384", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01384-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01384.py -- tests/files/web/generated/M21-GAP-01384-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01384", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01384", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01385", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01385-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01385.py -- tests/files/web/generated/M21-GAP-01385-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01385", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01385", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01386", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01386-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01386.py -- tests/files/web/generated/M21-GAP-01386-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01386", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01386", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01387", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01387-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01387.py -- tests/files/web/generated/M21-GAP-01387-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01387", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01387", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01388", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01388-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01388.py -- tests/files/web/generated/M21-GAP-01388-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01388", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01388", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01389", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01389-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01389.py -- tests/files/web/generated/M21-GAP-01389-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01389", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01389", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01390", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01390-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01390.py -- tests/files/web/generated/M21-GAP-01390-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01390", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01390", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01391", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01391-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01391.py -- tests/files/web/generated/M21-GAP-01391-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01391", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01391", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01392", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01392-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01392.py -- tests/files/web/generated/M21-GAP-01392-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01392", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01392", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01393", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01393-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01393.py -- tests/files/web/generated/M21-GAP-01393-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01393", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01393", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01394", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01394-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01394.py -- tests/files/web/generated/M21-GAP-01394-keymap-item-Image-Generic-IMAGE_EDITOR-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01394", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01394", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01395", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01395-keymap-item-Image-Paint-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01395.py -- tests/files/web/generated/M21-GAP-01395-keymap-item-Image-Paint-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01395", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01395", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01396", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01396-keymap-item-Image-Paint-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01396.py -- tests/files/web/generated/M21-GAP-01396-keymap-item-Image-Paint-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01396", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01396", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01397", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01397-keymap-item-Image-Paint-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01397.py -- tests/files/web/generated/M21-GAP-01397-keymap-item-Image-Paint-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01397", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01397", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01398", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01398-keymap-item-Image-Paint-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01398.py -- tests/files/web/generated/M21-GAP-01398-keymap-item-Image-Paint-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01398", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01398", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01399", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01399-keymap-item-Image-Paint-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01399.py -- tests/files/web/generated/M21-GAP-01399-keymap-item-Image-Paint-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01399", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01399", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01400", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01400-keymap-item-Image-Paint-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01400.py -- tests/files/web/generated/M21-GAP-01400-keymap-item-Image-Paint-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01400", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01400", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01401", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01401-keymap-item-Image-Paint-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01401.py -- tests/files/web/generated/M21-GAP-01401-keymap-item-Image-Paint-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01401", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01401", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01402", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01402-keymap-item-Image-Paint-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01402.py -- tests/files/web/generated/M21-GAP-01402-keymap-item-Image-Paint-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01402", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01402", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01403", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01403-keymap-item-Image-Paint-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01403.py -- tests/files/web/generated/M21-GAP-01403-keymap-item-Image-Paint-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01403", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01403", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01404", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01404-keymap-item-Image-Paint-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01404.py -- tests/files/web/generated/M21-GAP-01404-keymap-item-Image-Paint-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01404", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01404", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01405", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01405-keymap-item-Image-Paint-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01405.py -- tests/files/web/generated/M21-GAP-01405-keymap-item-Image-Paint-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01405", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01405", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01406", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01406-keymap-item-Image-Paint-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01406.py -- tests/files/web/generated/M21-GAP-01406-keymap-item-Image-Paint-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01406", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01406", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01407", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01407-keymap-item-Image-Paint-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01407.py -- tests/files/web/generated/M21-GAP-01407-keymap-item-Image-Paint-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01407", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01407", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01408", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01408-keymap-item-Image-Paint-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01408.py -- tests/files/web/generated/M21-GAP-01408-keymap-item-Image-Paint-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01408", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01408", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01409", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01409-keymap-item-Image-Paint-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01409.py -- tests/files/web/generated/M21-GAP-01409-keymap-item-Image-Paint-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01409", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01409", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01410", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01410-keymap-item-Image-Paint-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01410.py -- tests/files/web/generated/M21-GAP-01410-keymap-item-Image-Paint-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01410", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01410", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01411", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01411-keymap-item-Image-Paint-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01411.py -- tests/files/web/generated/M21-GAP-01411-keymap-item-Image-Paint-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01411", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01411", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01412", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01412-keymap-item-Image-Paint-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01412.py -- tests/files/web/generated/M21-GAP-01412-keymap-item-Image-Paint-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01412", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01412", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01413", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01413-keymap-item-Image-Paint-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01413.py -- tests/files/web/generated/M21-GAP-01413-keymap-item-Image-Paint-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01413", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01413", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01414", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01414-keymap-item-Image-Paint-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01414.py -- tests/files/web/generated/M21-GAP-01414-keymap-item-Image-Paint-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01414", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01414", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01415", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01415-keymap-item-Image-Paint-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01415.py -- tests/files/web/generated/M21-GAP-01415-keymap-item-Image-Paint-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01415", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01415", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01416", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01416-keymap-item-Image-Paint-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01416.py -- tests/files/web/generated/M21-GAP-01416-keymap-item-Image-Paint-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01416", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01416", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01417", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01417-keymap-item-Image-Paint-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01417.py -- tests/files/web/generated/M21-GAP-01417-keymap-item-Image-Paint-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01417", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01417", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01418", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01418-keymap-item-Image-Paint-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01418.py -- tests/files/web/generated/M21-GAP-01418-keymap-item-Image-Paint-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01418", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01418", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01419", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01419-keymap-item-Image-Paint-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01419.py -- tests/files/web/generated/M21-GAP-01419-keymap-item-Image-Paint-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01419", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01419", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01420", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01420-keymap-item-Image-Paint-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01420.py -- tests/files/web/generated/M21-GAP-01420-keymap-item-Image-Paint-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01420", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01420", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01421", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01421-keymap-item-Image-IMAGE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01421.py -- tests/files/web/generated/M21-GAP-01421-keymap-item-Image-IMAGE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01421", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01421", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01422", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01422-keymap-item-Image-IMAGE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01422.py -- tests/files/web/generated/M21-GAP-01422-keymap-item-Image-IMAGE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01422", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01422", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01423", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01423-keymap-item-Image-IMAGE_EDITOR-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01423.py -- tests/files/web/generated/M21-GAP-01423-keymap-item-Image-IMAGE_EDITOR-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01423", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01423", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01424", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01424-keymap-item-Image-IMAGE_EDITOR-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01424.py -- tests/files/web/generated/M21-GAP-01424-keymap-item-Image-IMAGE_EDITOR-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01424", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01424", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01425", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01425-keymap-item-Image-IMAGE_EDITOR-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01425.py -- tests/files/web/generated/M21-GAP-01425-keymap-item-Image-IMAGE_EDITOR-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01425", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01425", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01426", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01426-keymap-item-Image-IMAGE_EDITOR-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01426.py -- tests/files/web/generated/M21-GAP-01426-keymap-item-Image-IMAGE_EDITOR-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01426", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01426", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01427", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01427-keymap-item-Image-IMAGE_EDITOR-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01427.py -- tests/files/web/generated/M21-GAP-01427-keymap-item-Image-IMAGE_EDITOR-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01427", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01427", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01428", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01428-keymap-item-Image-IMAGE_EDITOR-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01428.py -- tests/files/web/generated/M21-GAP-01428-keymap-item-Image-IMAGE_EDITOR-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01428", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01428", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01429", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01429-keymap-item-Image-IMAGE_EDITOR-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01429.py -- tests/files/web/generated/M21-GAP-01429-keymap-item-Image-IMAGE_EDITOR-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01429", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01429", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01430", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01430-keymap-item-Image-IMAGE_EDITOR-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01430.py -- tests/files/web/generated/M21-GAP-01430-keymap-item-Image-IMAGE_EDITOR-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01430", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01430", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01431", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01431-keymap-item-Image-IMAGE_EDITOR-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01431.py -- tests/files/web/generated/M21-GAP-01431-keymap-item-Image-IMAGE_EDITOR-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01431", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01431", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01432", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01432-keymap-item-Image-IMAGE_EDITOR-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01432.py -- tests/files/web/generated/M21-GAP-01432-keymap-item-Image-IMAGE_EDITOR-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01432", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01432", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01433", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01433-keymap-item-Image-IMAGE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01433.py -- tests/files/web/generated/M21-GAP-01433-keymap-item-Image-IMAGE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01433", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01433", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01434", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01434-keymap-item-Image-IMAGE_EDITOR-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01434.py -- tests/files/web/generated/M21-GAP-01434-keymap-item-Image-IMAGE_EDITOR-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01434", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01434", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01435", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01435-keymap-item-Image-IMAGE_EDITOR-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01435.py -- tests/files/web/generated/M21-GAP-01435-keymap-item-Image-IMAGE_EDITOR-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01435", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01435", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01436", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01436-keymap-item-Image-IMAGE_EDITOR-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01436.py -- tests/files/web/generated/M21-GAP-01436-keymap-item-Image-IMAGE_EDITOR-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01436", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01436", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01437", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01437-keymap-item-Image-IMAGE_EDITOR-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01437.py -- tests/files/web/generated/M21-GAP-01437-keymap-item-Image-IMAGE_EDITOR-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01437", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01437", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01438", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01438-keymap-item-Image-IMAGE_EDITOR-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01438.py -- tests/files/web/generated/M21-GAP-01438-keymap-item-Image-IMAGE_EDITOR-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01438", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01438", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01439", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01439-keymap-item-Image-IMAGE_EDITOR-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01439.py -- tests/files/web/generated/M21-GAP-01439-keymap-item-Image-IMAGE_EDITOR-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01439", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01439", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01440", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01440-keymap-item-Image-IMAGE_EDITOR-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01440.py -- tests/files/web/generated/M21-GAP-01440-keymap-item-Image-IMAGE_EDITOR-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01440", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01440", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01441", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01441-keymap-item-Image-IMAGE_EDITOR-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01441.py -- tests/files/web/generated/M21-GAP-01441-keymap-item-Image-IMAGE_EDITOR-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01441", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01441", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01442", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01442-keymap-item-Image-IMAGE_EDITOR-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01442.py -- tests/files/web/generated/M21-GAP-01442-keymap-item-Image-IMAGE_EDITOR-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01442", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01442", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01443", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01443-keymap-item-Image-IMAGE_EDITOR-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01443.py -- tests/files/web/generated/M21-GAP-01443-keymap-item-Image-IMAGE_EDITOR-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01443", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01443", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01444", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01444-keymap-item-Image-IMAGE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01444.py -- tests/files/web/generated/M21-GAP-01444-keymap-item-Image-IMAGE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01444", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01444", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01445", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01445-keymap-item-Image-IMAGE_EDITOR-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01445.py -- tests/files/web/generated/M21-GAP-01445-keymap-item-Image-IMAGE_EDITOR-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01445", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01445", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01446", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01446-keymap-item-Image-IMAGE_EDITOR-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01446.py -- tests/files/web/generated/M21-GAP-01446-keymap-item-Image-IMAGE_EDITOR-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01446", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01446", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01447", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01447-keymap-item-Image-IMAGE_EDITOR-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01447.py -- tests/files/web/generated/M21-GAP-01447-keymap-item-Image-IMAGE_EDITOR-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01447", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01447", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01448", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01448-keymap-item-Image-IMAGE_EDITOR-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01448.py -- tests/files/web/generated/M21-GAP-01448-keymap-item-Image-IMAGE_EDITOR-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01448", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01448", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01449", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01449-keymap-item-Image-IMAGE_EDITOR-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01449.py -- tests/files/web/generated/M21-GAP-01449-keymap-item-Image-IMAGE_EDITOR-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01449", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01449", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01450", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01450-keymap-item-Image-IMAGE_EDITOR-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01450.py -- tests/files/web/generated/M21-GAP-01450-keymap-item-Image-IMAGE_EDITOR-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01450", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01450", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01451", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01451-keymap-item-Image-IMAGE_EDITOR-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01451.py -- tests/files/web/generated/M21-GAP-01451-keymap-item-Image-IMAGE_EDITOR-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01451", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01451", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01452", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01452-keymap-item-Image-IMAGE_EDITOR-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01452.py -- tests/files/web/generated/M21-GAP-01452-keymap-item-Image-IMAGE_EDITOR-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01452", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01452", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01453", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01453-keymap-item-Image-IMAGE_EDITOR-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01453.py -- tests/files/web/generated/M21-GAP-01453-keymap-item-Image-IMAGE_EDITOR-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01453", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01453", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01454", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01454-keymap-item-Image-IMAGE_EDITOR-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01454.py -- tests/files/web/generated/M21-GAP-01454-keymap-item-Image-IMAGE_EDITOR-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01454", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01454", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01455", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01455-keymap-item-Image-IMAGE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01455.py -- tests/files/web/generated/M21-GAP-01455-keymap-item-Image-IMAGE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01455", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01455", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01456", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01456-keymap-item-Image-IMAGE_EDITOR-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01456.py -- tests/files/web/generated/M21-GAP-01456-keymap-item-Image-IMAGE_EDITOR-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01456", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01456", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01457", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01457-keymap-item-Image-IMAGE_EDITOR-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01457.py -- tests/files/web/generated/M21-GAP-01457-keymap-item-Image-IMAGE_EDITOR-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01457", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01457", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01458", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01458-keymap-item-Image-IMAGE_EDITOR-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01458.py -- tests/files/web/generated/M21-GAP-01458-keymap-item-Image-IMAGE_EDITOR-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01458", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01458", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01459", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01459-keymap-item-Image-IMAGE_EDITOR-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01459.py -- tests/files/web/generated/M21-GAP-01459-keymap-item-Image-IMAGE_EDITOR-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01459", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01459", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01460", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01460-keymap-item-Image-IMAGE_EDITOR-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01460.py -- tests/files/web/generated/M21-GAP-01460-keymap-item-Image-IMAGE_EDITOR-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01460", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01460", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01461", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01461-keymap-item-Image-IMAGE_EDITOR-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01461.py -- tests/files/web/generated/M21-GAP-01461-keymap-item-Image-IMAGE_EDITOR-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01461", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01461", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01462", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01462-keymap-item-Image-IMAGE_EDITOR-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01462.py -- tests/files/web/generated/M21-GAP-01462-keymap-item-Image-IMAGE_EDITOR-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01462", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01462", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01463", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01463-keymap-item-Image-IMAGE_EDITOR-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01463.py -- tests/files/web/generated/M21-GAP-01463-keymap-item-Image-IMAGE_EDITOR-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01463", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01463", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01464", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01464-keymap-item-Image-IMAGE_EDITOR-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01464.py -- tests/files/web/generated/M21-GAP-01464-keymap-item-Image-IMAGE_EDITOR-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01464", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01464", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01465", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01465-keymap-item-Image-IMAGE_EDITOR-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01465.py -- tests/files/web/generated/M21-GAP-01465-keymap-item-Image-IMAGE_EDITOR-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01465", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01465", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01466", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01466-keymap-item-Image-IMAGE_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01466.py -- tests/files/web/generated/M21-GAP-01466-keymap-item-Image-IMAGE_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01466", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01466", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01467", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01467-keymap-item-Image-IMAGE_EDITOR-WINDOW-50.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01467.py -- tests/files/web/generated/M21-GAP-01467-keymap-item-Image-IMAGE_EDITOR-WINDOW-50.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01467", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01467", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01468", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01468-keymap-item-Image-IMAGE_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01468.py -- tests/files/web/generated/M21-GAP-01468-keymap-item-Image-IMAGE_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01468", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01468", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01469", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01469-keymap-item-Image-IMAGE_EDITOR-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01469.py -- tests/files/web/generated/M21-GAP-01469-keymap-item-Image-IMAGE_EDITOR-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01469", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01469", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01470", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01470-keymap-item-Image-IMAGE_EDITOR-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01470.py -- tests/files/web/generated/M21-GAP-01470-keymap-item-Image-IMAGE_EDITOR-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01470", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01470", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01471", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01471-keymap-item-Image-IMAGE_EDITOR-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01471.py -- tests/files/web/generated/M21-GAP-01471-keymap-item-Image-IMAGE_EDITOR-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01471", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01471", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01472", + "gapId": "keymap-item:Info:INFO:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01472-keymap-item-Info-INFO-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01472.py -- tests/files/web/generated/M21-GAP-01472-keymap-item-Info-INFO-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01472", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01472", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01473", + "gapId": "keymap-item:Info:INFO:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01473-keymap-item-Info-INFO-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01473.py -- tests/files/web/generated/M21-GAP-01473-keymap-item-Info-INFO-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01473", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01473", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01474", + "gapId": "keymap-item:Info:INFO:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01474-keymap-item-Info-INFO-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01474.py -- tests/files/web/generated/M21-GAP-01474-keymap-item-Info-INFO-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01474", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01474", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01475", + "gapId": "keymap-item:Info:INFO:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01475-keymap-item-Info-INFO-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01475.py -- tests/files/web/generated/M21-GAP-01475-keymap-item-Info-INFO-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01475", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01475", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01476", + "gapId": "keymap-item:Info:INFO:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01476-keymap-item-Info-INFO-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01476.py -- tests/files/web/generated/M21-GAP-01476-keymap-item-Info-INFO-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01476", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01476", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01477", + "gapId": "keymap-item:Info:INFO:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01477-keymap-item-Info-INFO-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01477.py -- tests/files/web/generated/M21-GAP-01477-keymap-item-Info-INFO-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01477", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01477", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01478", + "gapId": "keymap-item:Info:INFO:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01478-keymap-item-Info-INFO-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01478.py -- tests/files/web/generated/M21-GAP-01478-keymap-item-Info-INFO-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01478", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01478", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01479", + "gapId": "keymap-item:Info:INFO:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01479-keymap-item-Info-INFO-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01479.py -- tests/files/web/generated/M21-GAP-01479-keymap-item-Info-INFO-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01479", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01479", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01480", + "gapId": "keymap-item:Info:INFO:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01480-keymap-item-Info-INFO-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01480.py -- tests/files/web/generated/M21-GAP-01480-keymap-item-Info-INFO-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01480", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01480", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01481", + "gapId": "keymap-item:Info:INFO:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01481-keymap-item-Info-INFO-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01481.py -- tests/files/web/generated/M21-GAP-01481-keymap-item-Info-INFO-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01481", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01481", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01482", + "gapId": "keymap-item:Info:INFO:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01482-keymap-item-Info-INFO-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01482.py -- tests/files/web/generated/M21-GAP-01482-keymap-item-Info-INFO-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01482", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01482", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01483", + "gapId": "keymap-item:Info:INFO:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01483-keymap-item-Info-INFO-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01483.py -- tests/files/web/generated/M21-GAP-01483-keymap-item-Info-INFO-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01483", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01483", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01484", + "gapId": "keymap-item:Info:INFO:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01484-keymap-item-Info-INFO-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01484.py -- tests/files/web/generated/M21-GAP-01484-keymap-item-Info-INFO-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01484", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01484", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01485", + "gapId": "keymap-item:Info:INFO:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01485-keymap-item-Info-INFO-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01485.py -- tests/files/web/generated/M21-GAP-01485-keymap-item-Info-INFO-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01485", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01485", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01486", + "gapId": "keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01486-keymap-item-Interpolate-Tool-Modal-Map-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01486.py -- tests/files/web/generated/M21-GAP-01486-keymap-item-Interpolate-Tool-Modal-Map-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01486", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01486", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01487", + "gapId": "keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01487-keymap-item-Interpolate-Tool-Modal-Map-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01487.py -- tests/files/web/generated/M21-GAP-01487-keymap-item-Interpolate-Tool-Modal-Map-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01487", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01487", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01488", + "gapId": "keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01488-keymap-item-Interpolate-Tool-Modal-Map-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01488.py -- tests/files/web/generated/M21-GAP-01488-keymap-item-Interpolate-Tool-Modal-Map-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01488", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01488", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01489", + "gapId": "keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01489-keymap-item-Interpolate-Tool-Modal-Map-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01489.py -- tests/files/web/generated/M21-GAP-01489-keymap-item-Interpolate-Tool-Modal-Map-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01489", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01489", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01490", + "gapId": "keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01490-keymap-item-Interpolate-Tool-Modal-Map-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01490.py -- tests/files/web/generated/M21-GAP-01490-keymap-item-Interpolate-Tool-Modal-Map-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01490", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01490", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01491", + "gapId": "keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01491-keymap-item-Interpolate-Tool-Modal-Map-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01491.py -- tests/files/web/generated/M21-GAP-01491-keymap-item-Interpolate-Tool-Modal-Map-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01491", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01491", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01492", + "gapId": "keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01492-keymap-item-Interpolate-Tool-Modal-Map-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01492.py -- tests/files/web/generated/M21-GAP-01492-keymap-item-Interpolate-Tool-Modal-Map-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01492", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01492", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01493", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01493-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01493.py -- tests/files/web/generated/M21-GAP-01493-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01493", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01493", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01494", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01494-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01494.py -- tests/files/web/generated/M21-GAP-01494-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01494", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01494", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01495", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01495-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01495.py -- tests/files/web/generated/M21-GAP-01495-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01495", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01495", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01496", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01496-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01496.py -- tests/files/web/generated/M21-GAP-01496-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01496", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01496", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01497", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01497-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01497.py -- tests/files/web/generated/M21-GAP-01497-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01497", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01497", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01498", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01498-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01498.py -- tests/files/web/generated/M21-GAP-01498-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01498", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01498", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01499", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01499-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01499.py -- tests/files/web/generated/M21-GAP-01499-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01499", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01499", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01500", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01500-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01500.py -- tests/files/web/generated/M21-GAP-01500-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01500", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01500", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01501", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01501-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01501.py -- tests/files/web/generated/M21-GAP-01501-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01501", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01501", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01502", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01502-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01502.py -- tests/files/web/generated/M21-GAP-01502-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01502", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01502", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01503", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01503-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01503.py -- tests/files/web/generated/M21-GAP-01503-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01503", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01503", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01504", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01504-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01504.py -- tests/files/web/generated/M21-GAP-01504-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01504", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01504", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01505", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01505-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01505.py -- tests/files/web/generated/M21-GAP-01505-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01505", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01505", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01506", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01506-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01506.py -- tests/files/web/generated/M21-GAP-01506-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01506", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01506", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01507", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01507-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01507.py -- tests/files/web/generated/M21-GAP-01507-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01507", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01507", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01508", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01508-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01508.py -- tests/files/web/generated/M21-GAP-01508-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01508", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01508", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01509", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01509-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01509.py -- tests/files/web/generated/M21-GAP-01509-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01509", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01509", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01510", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01510-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01510.py -- tests/files/web/generated/M21-GAP-01510-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01510", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01510", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01511", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01511-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01511.py -- tests/files/web/generated/M21-GAP-01511-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01511", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01511", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01512", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01512-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01512.py -- tests/files/web/generated/M21-GAP-01512-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01512", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01512", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01513", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01513-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01513.py -- tests/files/web/generated/M21-GAP-01513-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01513", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01513", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01514", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01514-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01514.py -- tests/files/web/generated/M21-GAP-01514-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01514", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01514", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01515", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01515-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01515.py -- tests/files/web/generated/M21-GAP-01515-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01515", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01515", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01516", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01516-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01516.py -- tests/files/web/generated/M21-GAP-01516-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01516", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01516", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01517", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01517-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01517.py -- tests/files/web/generated/M21-GAP-01517-keymap-item-Knife-Tool-Modal-Map-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01517", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01517", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01518", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01518-keymap-item-Lattice-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01518.py -- tests/files/web/generated/M21-GAP-01518-keymap-item-Lattice-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01518", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01518", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01519", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01519-keymap-item-Lattice-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01519.py -- tests/files/web/generated/M21-GAP-01519-keymap-item-Lattice-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01519", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01519", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01520", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01520-keymap-item-Lattice-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01520.py -- tests/files/web/generated/M21-GAP-01520-keymap-item-Lattice-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01520", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01520", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01521", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01521-keymap-item-Lattice-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01521.py -- tests/files/web/generated/M21-GAP-01521-keymap-item-Lattice-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01521", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01521", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01522", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01522-keymap-item-Lattice-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01522.py -- tests/files/web/generated/M21-GAP-01522-keymap-item-Lattice-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01522", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01522", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01523", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01523-keymap-item-Lattice-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01523.py -- tests/files/web/generated/M21-GAP-01523-keymap-item-Lattice-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01523", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01523", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01524", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01524-keymap-item-Lattice-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01524.py -- tests/files/web/generated/M21-GAP-01524-keymap-item-Lattice-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01524", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01524", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01525", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01525-keymap-item-Lattice-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01525.py -- tests/files/web/generated/M21-GAP-01525-keymap-item-Lattice-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01525", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01525", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01526", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01526-keymap-item-Lattice-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01526.py -- tests/files/web/generated/M21-GAP-01526-keymap-item-Lattice-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01526", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01526", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01527", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01527-keymap-item-Lattice-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01527.py -- tests/files/web/generated/M21-GAP-01527-keymap-item-Lattice-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01527", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01527", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01528", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01528-keymap-item-Lattice-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01528.py -- tests/files/web/generated/M21-GAP-01528-keymap-item-Lattice-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01528", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01528", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01529", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01529-keymap-item-Lattice-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01529.py -- tests/files/web/generated/M21-GAP-01529-keymap-item-Lattice-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01529", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01529", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01530", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01530-keymap-item-Lattice-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01530.py -- tests/files/web/generated/M21-GAP-01530-keymap-item-Lattice-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01530", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01530", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01531", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01531-keymap-item-Lattice-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01531.py -- tests/files/web/generated/M21-GAP-01531-keymap-item-Lattice-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01531", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01531", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01532", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01532-keymap-item-Lattice-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01532.py -- tests/files/web/generated/M21-GAP-01532-keymap-item-Lattice-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01532", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01532", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01533", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01533-keymap-item-Lattice-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01533.py -- tests/files/web/generated/M21-GAP-01533-keymap-item-Lattice-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01533", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01533", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01534", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01534-keymap-item-Lattice-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01534.py -- tests/files/web/generated/M21-GAP-01534-keymap-item-Lattice-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01534", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01534", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01535", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01535-keymap-item-Lattice-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01535.py -- tests/files/web/generated/M21-GAP-01535-keymap-item-Lattice-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01535", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01535", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01536", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01536-keymap-item-Lattice-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01536.py -- tests/files/web/generated/M21-GAP-01536-keymap-item-Lattice-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01536", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01536", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01537", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01537-keymap-item-Lattice-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01537.py -- tests/files/web/generated/M21-GAP-01537-keymap-item-Lattice-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01537", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01537", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01538", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01538-keymap-item-Lattice-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01538.py -- tests/files/web/generated/M21-GAP-01538-keymap-item-Lattice-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01538", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01538", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01539", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01539-keymap-item-Markers-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01539.py -- tests/files/web/generated/M21-GAP-01539-keymap-item-Markers-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01539", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01539", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01540", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01540-keymap-item-Markers-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01540.py -- tests/files/web/generated/M21-GAP-01540-keymap-item-Markers-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01540", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01540", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01541", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01541-keymap-item-Markers-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01541.py -- tests/files/web/generated/M21-GAP-01541-keymap-item-Markers-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01541", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01541", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01542", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01542-keymap-item-Markers-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01542.py -- tests/files/web/generated/M21-GAP-01542-keymap-item-Markers-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01542", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01542", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01543", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01543-keymap-item-Markers-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01543.py -- tests/files/web/generated/M21-GAP-01543-keymap-item-Markers-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01543", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01543", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01544", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01544-keymap-item-Markers-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01544.py -- tests/files/web/generated/M21-GAP-01544-keymap-item-Markers-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01544", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01544", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01545", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01545-keymap-item-Markers-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01545.py -- tests/files/web/generated/M21-GAP-01545-keymap-item-Markers-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01545", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01545", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01546", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01546-keymap-item-Markers-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01546.py -- tests/files/web/generated/M21-GAP-01546-keymap-item-Markers-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01546", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01546", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01547", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01547-keymap-item-Markers-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01547.py -- tests/files/web/generated/M21-GAP-01547-keymap-item-Markers-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01547", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01547", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01548", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01548-keymap-item-Markers-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01548.py -- tests/files/web/generated/M21-GAP-01548-keymap-item-Markers-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01548", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01548", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01549", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01549-keymap-item-Markers-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01549.py -- tests/files/web/generated/M21-GAP-01549-keymap-item-Markers-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01549", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01549", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01550", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01550-keymap-item-Markers-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01550.py -- tests/files/web/generated/M21-GAP-01550-keymap-item-Markers-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01550", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01550", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01551", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01551-keymap-item-Markers-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01551.py -- tests/files/web/generated/M21-GAP-01551-keymap-item-Markers-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01551", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01551", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01552", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01552-keymap-item-Markers-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01552.py -- tests/files/web/generated/M21-GAP-01552-keymap-item-Markers-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01552", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01552", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01553", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01553-keymap-item-Markers-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01553.py -- tests/files/web/generated/M21-GAP-01553-keymap-item-Markers-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01553", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01553", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01554", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01554-keymap-item-Markers-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01554.py -- tests/files/web/generated/M21-GAP-01554-keymap-item-Markers-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01554", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01554", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01555", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01555-keymap-item-Markers-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01555.py -- tests/files/web/generated/M21-GAP-01555-keymap-item-Markers-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01555", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01555", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01556", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01556-keymap-item-Markers-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01556.py -- tests/files/web/generated/M21-GAP-01556-keymap-item-Markers-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01556", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01556", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01557", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01557-keymap-item-Markers-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01557.py -- tests/files/web/generated/M21-GAP-01557-keymap-item-Markers-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01557", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01557", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01558", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01558-keymap-item-Markers-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01558.py -- tests/files/web/generated/M21-GAP-01558-keymap-item-Markers-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01558", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01558", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01559", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01559-keymap-item-Markers-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01559.py -- tests/files/web/generated/M21-GAP-01559-keymap-item-Markers-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01559", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01559", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01560", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01560-keymap-item-Markers-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01560.py -- tests/files/web/generated/M21-GAP-01560-keymap-item-Markers-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01560", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01560", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01561", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01561-keymap-item-Markers-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01561.py -- tests/files/web/generated/M21-GAP-01561-keymap-item-Markers-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01561", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01561", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01562", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01562-keymap-item-Markers-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01562.py -- tests/files/web/generated/M21-GAP-01562-keymap-item-Markers-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01562", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01562", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01563", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01563-keymap-item-Markers-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01563.py -- tests/files/web/generated/M21-GAP-01563-keymap-item-Markers-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01563", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01563", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01564", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01564-keymap-item-Mask-Editing-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01564.py -- tests/files/web/generated/M21-GAP-01564-keymap-item-Mask-Editing-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01564", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01564", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01565", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01565-keymap-item-Mask-Editing-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01565.py -- tests/files/web/generated/M21-GAP-01565-keymap-item-Mask-Editing-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01565", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01565", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01566", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01566-keymap-item-Mask-Editing-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01566.py -- tests/files/web/generated/M21-GAP-01566-keymap-item-Mask-Editing-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01566", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01566", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01567", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01567-keymap-item-Mask-Editing-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01567.py -- tests/files/web/generated/M21-GAP-01567-keymap-item-Mask-Editing-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01567", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01567", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01568", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01568-keymap-item-Mask-Editing-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01568.py -- tests/files/web/generated/M21-GAP-01568-keymap-item-Mask-Editing-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01568", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01568", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01569", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01569-keymap-item-Mask-Editing-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01569.py -- tests/files/web/generated/M21-GAP-01569-keymap-item-Mask-Editing-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01569", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01569", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01570", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01570-keymap-item-Mask-Editing-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01570.py -- tests/files/web/generated/M21-GAP-01570-keymap-item-Mask-Editing-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01570", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01570", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01571", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01571-keymap-item-Mask-Editing-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01571.py -- tests/files/web/generated/M21-GAP-01571-keymap-item-Mask-Editing-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01571", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01571", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01572", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01572-keymap-item-Mask-Editing-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01572.py -- tests/files/web/generated/M21-GAP-01572-keymap-item-Mask-Editing-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01572", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01572", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01573", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01573-keymap-item-Mask-Editing-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01573.py -- tests/files/web/generated/M21-GAP-01573-keymap-item-Mask-Editing-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01573", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01573", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01574", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01574-keymap-item-Mask-Editing-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01574.py -- tests/files/web/generated/M21-GAP-01574-keymap-item-Mask-Editing-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01574", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01574", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01575", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01575-keymap-item-Mask-Editing-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01575.py -- tests/files/web/generated/M21-GAP-01575-keymap-item-Mask-Editing-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01575", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01575", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01576", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01576-keymap-item-Mask-Editing-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01576.py -- tests/files/web/generated/M21-GAP-01576-keymap-item-Mask-Editing-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01576", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01576", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01577", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01577-keymap-item-Mask-Editing-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01577.py -- tests/files/web/generated/M21-GAP-01577-keymap-item-Mask-Editing-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01577", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01577", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01578", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01578-keymap-item-Mask-Editing-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01578.py -- tests/files/web/generated/M21-GAP-01578-keymap-item-Mask-Editing-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01578", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01578", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01579", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01579-keymap-item-Mask-Editing-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01579.py -- tests/files/web/generated/M21-GAP-01579-keymap-item-Mask-Editing-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01579", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01579", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01580", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01580-keymap-item-Mask-Editing-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01580.py -- tests/files/web/generated/M21-GAP-01580-keymap-item-Mask-Editing-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01580", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01580", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01581", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01581-keymap-item-Mask-Editing-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01581.py -- tests/files/web/generated/M21-GAP-01581-keymap-item-Mask-Editing-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01581", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01581", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01582", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01582-keymap-item-Mask-Editing-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01582.py -- tests/files/web/generated/M21-GAP-01582-keymap-item-Mask-Editing-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01582", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01582", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01583", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01583-keymap-item-Mask-Editing-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01583.py -- tests/files/web/generated/M21-GAP-01583-keymap-item-Mask-Editing-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01583", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01583", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01584", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01584-keymap-item-Mask-Editing-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01584.py -- tests/files/web/generated/M21-GAP-01584-keymap-item-Mask-Editing-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01584", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01584", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01585", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01585-keymap-item-Mask-Editing-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01585.py -- tests/files/web/generated/M21-GAP-01585-keymap-item-Mask-Editing-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01585", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01585", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01586", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01586-keymap-item-Mask-Editing-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01586.py -- tests/files/web/generated/M21-GAP-01586-keymap-item-Mask-Editing-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01586", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01586", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01587", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01587-keymap-item-Mask-Editing-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01587.py -- tests/files/web/generated/M21-GAP-01587-keymap-item-Mask-Editing-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01587", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01587", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01588", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01588-keymap-item-Mask-Editing-EMPTY-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01588.py -- tests/files/web/generated/M21-GAP-01588-keymap-item-Mask-Editing-EMPTY-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01588", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01588", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01589", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01589-keymap-item-Mask-Editing-EMPTY-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01589.py -- tests/files/web/generated/M21-GAP-01589-keymap-item-Mask-Editing-EMPTY-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01589", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01589", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01590", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01590-keymap-item-Mask-Editing-EMPTY-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01590.py -- tests/files/web/generated/M21-GAP-01590-keymap-item-Mask-Editing-EMPTY-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01590", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01590", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01591", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01591-keymap-item-Mask-Editing-EMPTY-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01591.py -- tests/files/web/generated/M21-GAP-01591-keymap-item-Mask-Editing-EMPTY-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01591", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01591", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01592", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01592-keymap-item-Mask-Editing-EMPTY-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01592.py -- tests/files/web/generated/M21-GAP-01592-keymap-item-Mask-Editing-EMPTY-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01592", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01592", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01593", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01593-keymap-item-Mask-Editing-EMPTY-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01593.py -- tests/files/web/generated/M21-GAP-01593-keymap-item-Mask-Editing-EMPTY-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01593", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01593", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01594", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01594-keymap-item-Mask-Editing-EMPTY-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01594.py -- tests/files/web/generated/M21-GAP-01594-keymap-item-Mask-Editing-EMPTY-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01594", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01594", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01595", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01595-keymap-item-Mask-Editing-EMPTY-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01595.py -- tests/files/web/generated/M21-GAP-01595-keymap-item-Mask-Editing-EMPTY-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01595", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01595", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01596", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01596-keymap-item-Mask-Editing-EMPTY-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01596.py -- tests/files/web/generated/M21-GAP-01596-keymap-item-Mask-Editing-EMPTY-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01596", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01596", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01597", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01597-keymap-item-Mask-Editing-EMPTY-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01597.py -- tests/files/web/generated/M21-GAP-01597-keymap-item-Mask-Editing-EMPTY-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01597", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01597", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01598", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01598-keymap-item-Mask-Editing-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01598.py -- tests/files/web/generated/M21-GAP-01598-keymap-item-Mask-Editing-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01598", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01598", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01599", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01599-keymap-item-Mask-Editing-EMPTY-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01599.py -- tests/files/web/generated/M21-GAP-01599-keymap-item-Mask-Editing-EMPTY-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01599", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01599", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01600", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01600-keymap-item-Mask-Editing-EMPTY-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01600.py -- tests/files/web/generated/M21-GAP-01600-keymap-item-Mask-Editing-EMPTY-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01600", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01600", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01601", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01601-keymap-item-Mask-Editing-EMPTY-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01601.py -- tests/files/web/generated/M21-GAP-01601-keymap-item-Mask-Editing-EMPTY-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01601", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01601", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01602", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01602-keymap-item-Mask-Editing-EMPTY-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01602.py -- tests/files/web/generated/M21-GAP-01602-keymap-item-Mask-Editing-EMPTY-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01602", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01602", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01603", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01603-keymap-item-Mask-Editing-EMPTY-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01603.py -- tests/files/web/generated/M21-GAP-01603-keymap-item-Mask-Editing-EMPTY-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01603", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01603", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01604", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01604-keymap-item-Mask-Editing-EMPTY-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01604.py -- tests/files/web/generated/M21-GAP-01604-keymap-item-Mask-Editing-EMPTY-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01604", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01604", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01605", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01605-keymap-item-Mask-Editing-EMPTY-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01605.py -- tests/files/web/generated/M21-GAP-01605-keymap-item-Mask-Editing-EMPTY-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01605", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01605", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01606", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01606-keymap-item-Mask-Editing-EMPTY-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01606.py -- tests/files/web/generated/M21-GAP-01606-keymap-item-Mask-Editing-EMPTY-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01606", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01606", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01607", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01607-keymap-item-Mask-Editing-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01607.py -- tests/files/web/generated/M21-GAP-01607-keymap-item-Mask-Editing-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01607", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01607", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01608", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01608-keymap-item-Mask-Editing-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01608.py -- tests/files/web/generated/M21-GAP-01608-keymap-item-Mask-Editing-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01608", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01608", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01609", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01609-keymap-item-Mask-Editing-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01609.py -- tests/files/web/generated/M21-GAP-01609-keymap-item-Mask-Editing-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01609", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01609", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01610", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01610-keymap-item-Mask-Editing-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01610.py -- tests/files/web/generated/M21-GAP-01610-keymap-item-Mask-Editing-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01610", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01610", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01611", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01611-keymap-item-Mask-Editing-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01611.py -- tests/files/web/generated/M21-GAP-01611-keymap-item-Mask-Editing-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01611", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01611", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01612", + "gapId": "keymap-item:Mesh Filter Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01612-keymap-item-Mesh-Filter-Modal-Map-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01612.py -- tests/files/web/generated/M21-GAP-01612-keymap-item-Mesh-Filter-Modal-Map-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01612", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01612", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01613", + "gapId": "keymap-item:Mesh Filter Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01613-keymap-item-Mesh-Filter-Modal-Map-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01613.py -- tests/files/web/generated/M21-GAP-01613-keymap-item-Mesh-Filter-Modal-Map-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01613", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01613", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01614", + "gapId": "keymap-item:Mesh Filter Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01614-keymap-item-Mesh-Filter-Modal-Map-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01614.py -- tests/files/web/generated/M21-GAP-01614-keymap-item-Mesh-Filter-Modal-Map-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01614", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01614", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01615", + "gapId": "keymap-item:Mesh Filter Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01615-keymap-item-Mesh-Filter-Modal-Map-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01615.py -- tests/files/web/generated/M21-GAP-01615-keymap-item-Mesh-Filter-Modal-Map-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01615", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01615", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01616", + "gapId": "keymap-item:Mesh Filter Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01616-keymap-item-Mesh-Filter-Modal-Map-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01616.py -- tests/files/web/generated/M21-GAP-01616-keymap-item-Mesh-Filter-Modal-Map-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01616", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01616", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01617", + "gapId": "keymap-item:Mesh Filter Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01617-keymap-item-Mesh-Filter-Modal-Map-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01617.py -- tests/files/web/generated/M21-GAP-01617-keymap-item-Mesh-Filter-Modal-Map-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01617", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01617", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01618", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01618-keymap-item-Mesh-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01618.py -- tests/files/web/generated/M21-GAP-01618-keymap-item-Mesh-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01618", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01618", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01619", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01619-keymap-item-Mesh-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01619.py -- tests/files/web/generated/M21-GAP-01619-keymap-item-Mesh-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01619", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01619", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01620", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01620-keymap-item-Mesh-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01620.py -- tests/files/web/generated/M21-GAP-01620-keymap-item-Mesh-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01620", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01620", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01621", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01621-keymap-item-Mesh-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01621.py -- tests/files/web/generated/M21-GAP-01621-keymap-item-Mesh-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01621", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01621", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01622", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01622-keymap-item-Mesh-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01622.py -- tests/files/web/generated/M21-GAP-01622-keymap-item-Mesh-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01622", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01622", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01623", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01623-keymap-item-Mesh-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01623.py -- tests/files/web/generated/M21-GAP-01623-keymap-item-Mesh-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01623", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01623", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01624", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01624-keymap-item-Mesh-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01624.py -- tests/files/web/generated/M21-GAP-01624-keymap-item-Mesh-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01624", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01624", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01625", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01625-keymap-item-Mesh-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01625.py -- tests/files/web/generated/M21-GAP-01625-keymap-item-Mesh-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01625", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01625", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01626", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01626-keymap-item-Mesh-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01626.py -- tests/files/web/generated/M21-GAP-01626-keymap-item-Mesh-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01626", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01626", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01627", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01627-keymap-item-Mesh-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01627.py -- tests/files/web/generated/M21-GAP-01627-keymap-item-Mesh-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01627", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01627", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01628", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01628-keymap-item-Mesh-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01628.py -- tests/files/web/generated/M21-GAP-01628-keymap-item-Mesh-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01628", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01628", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01629", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01629-keymap-item-Mesh-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01629.py -- tests/files/web/generated/M21-GAP-01629-keymap-item-Mesh-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01629", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01629", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01630", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01630-keymap-item-Mesh-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01630.py -- tests/files/web/generated/M21-GAP-01630-keymap-item-Mesh-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01630", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01630", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01631", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01631-keymap-item-Mesh-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01631.py -- tests/files/web/generated/M21-GAP-01631-keymap-item-Mesh-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01631", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01631", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01632", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01632-keymap-item-Mesh-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01632.py -- tests/files/web/generated/M21-GAP-01632-keymap-item-Mesh-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01632", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01632", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01633", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01633-keymap-item-Mesh-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01633.py -- tests/files/web/generated/M21-GAP-01633-keymap-item-Mesh-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01633", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01633", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01634", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01634-keymap-item-Mesh-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01634.py -- tests/files/web/generated/M21-GAP-01634-keymap-item-Mesh-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01634", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01634", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01635", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01635-keymap-item-Mesh-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01635.py -- tests/files/web/generated/M21-GAP-01635-keymap-item-Mesh-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01635", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01635", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01636", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01636-keymap-item-Mesh-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01636.py -- tests/files/web/generated/M21-GAP-01636-keymap-item-Mesh-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01636", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01636", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01637", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01637-keymap-item-Mesh-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01637.py -- tests/files/web/generated/M21-GAP-01637-keymap-item-Mesh-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01637", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01637", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01638", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01638-keymap-item-Mesh-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01638.py -- tests/files/web/generated/M21-GAP-01638-keymap-item-Mesh-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01638", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01638", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01639", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01639-keymap-item-Mesh-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01639.py -- tests/files/web/generated/M21-GAP-01639-keymap-item-Mesh-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01639", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01639", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01640", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01640-keymap-item-Mesh-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01640.py -- tests/files/web/generated/M21-GAP-01640-keymap-item-Mesh-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01640", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01640", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01641", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01641-keymap-item-Mesh-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01641.py -- tests/files/web/generated/M21-GAP-01641-keymap-item-Mesh-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01641", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01641", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01642", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01642-keymap-item-Mesh-EMPTY-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01642.py -- tests/files/web/generated/M21-GAP-01642-keymap-item-Mesh-EMPTY-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01642", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01642", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01643", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01643-keymap-item-Mesh-EMPTY-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01643.py -- tests/files/web/generated/M21-GAP-01643-keymap-item-Mesh-EMPTY-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01643", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01643", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01644", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01644-keymap-item-Mesh-EMPTY-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01644.py -- tests/files/web/generated/M21-GAP-01644-keymap-item-Mesh-EMPTY-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01644", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01644", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01645", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01645-keymap-item-Mesh-EMPTY-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01645.py -- tests/files/web/generated/M21-GAP-01645-keymap-item-Mesh-EMPTY-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01645", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01645", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01646", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01646-keymap-item-Mesh-EMPTY-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01646.py -- tests/files/web/generated/M21-GAP-01646-keymap-item-Mesh-EMPTY-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01646", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01646", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01647", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01647-keymap-item-Mesh-EMPTY-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01647.py -- tests/files/web/generated/M21-GAP-01647-keymap-item-Mesh-EMPTY-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01647", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01647", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01648", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01648-keymap-item-Mesh-EMPTY-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01648.py -- tests/files/web/generated/M21-GAP-01648-keymap-item-Mesh-EMPTY-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01648", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01648", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01649", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01649-keymap-item-Mesh-EMPTY-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01649.py -- tests/files/web/generated/M21-GAP-01649-keymap-item-Mesh-EMPTY-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01649", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01649", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01650", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01650-keymap-item-Mesh-EMPTY-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01650.py -- tests/files/web/generated/M21-GAP-01650-keymap-item-Mesh-EMPTY-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01650", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01650", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01651", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01651-keymap-item-Mesh-EMPTY-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01651.py -- tests/files/web/generated/M21-GAP-01651-keymap-item-Mesh-EMPTY-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01651", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01651", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01652", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01652-keymap-item-Mesh-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01652.py -- tests/files/web/generated/M21-GAP-01652-keymap-item-Mesh-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01652", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01652", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01653", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01653-keymap-item-Mesh-EMPTY-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01653.py -- tests/files/web/generated/M21-GAP-01653-keymap-item-Mesh-EMPTY-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01653", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01653", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01654", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01654-keymap-item-Mesh-EMPTY-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01654.py -- tests/files/web/generated/M21-GAP-01654-keymap-item-Mesh-EMPTY-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01654", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01654", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01655", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01655-keymap-item-Mesh-EMPTY-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01655.py -- tests/files/web/generated/M21-GAP-01655-keymap-item-Mesh-EMPTY-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01655", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01655", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01656", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01656-keymap-item-Mesh-EMPTY-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01656.py -- tests/files/web/generated/M21-GAP-01656-keymap-item-Mesh-EMPTY-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01656", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01656", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01657", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01657-keymap-item-Mesh-EMPTY-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01657.py -- tests/files/web/generated/M21-GAP-01657-keymap-item-Mesh-EMPTY-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01657", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01657", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01658", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01658-keymap-item-Mesh-EMPTY-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01658.py -- tests/files/web/generated/M21-GAP-01658-keymap-item-Mesh-EMPTY-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01658", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01658", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01659", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01659-keymap-item-Mesh-EMPTY-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01659.py -- tests/files/web/generated/M21-GAP-01659-keymap-item-Mesh-EMPTY-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01659", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01659", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01660", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01660-keymap-item-Mesh-EMPTY-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01660.py -- tests/files/web/generated/M21-GAP-01660-keymap-item-Mesh-EMPTY-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01660", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01660", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01661", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01661-keymap-item-Mesh-EMPTY-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01661.py -- tests/files/web/generated/M21-GAP-01661-keymap-item-Mesh-EMPTY-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01661", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01661", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01662", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01662-keymap-item-Mesh-EMPTY-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01662.py -- tests/files/web/generated/M21-GAP-01662-keymap-item-Mesh-EMPTY-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01662", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01662", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01663", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01663-keymap-item-Mesh-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01663.py -- tests/files/web/generated/M21-GAP-01663-keymap-item-Mesh-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01663", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01663", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01664", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01664-keymap-item-Mesh-EMPTY-WINDOW-50.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01664.py -- tests/files/web/generated/M21-GAP-01664-keymap-item-Mesh-EMPTY-WINDOW-50.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01664", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01664", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01665", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01665-keymap-item-Mesh-EMPTY-WINDOW-51.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01665.py -- tests/files/web/generated/M21-GAP-01665-keymap-item-Mesh-EMPTY-WINDOW-51.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01665", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01665", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01666", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:52", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01666-keymap-item-Mesh-EMPTY-WINDOW-52.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01666.py -- tests/files/web/generated/M21-GAP-01666-keymap-item-Mesh-EMPTY-WINDOW-52.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01666", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01666", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01667", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:53", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01667-keymap-item-Mesh-EMPTY-WINDOW-53.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01667.py -- tests/files/web/generated/M21-GAP-01667-keymap-item-Mesh-EMPTY-WINDOW-53.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01667", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01667", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01668", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:54", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01668-keymap-item-Mesh-EMPTY-WINDOW-54.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01668.py -- tests/files/web/generated/M21-GAP-01668-keymap-item-Mesh-EMPTY-WINDOW-54.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01668", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01668", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01669", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:55", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01669-keymap-item-Mesh-EMPTY-WINDOW-55.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01669.py -- tests/files/web/generated/M21-GAP-01669-keymap-item-Mesh-EMPTY-WINDOW-55.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01669", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01669", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01670", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:56", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01670-keymap-item-Mesh-EMPTY-WINDOW-56.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01670.py -- tests/files/web/generated/M21-GAP-01670-keymap-item-Mesh-EMPTY-WINDOW-56.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01670", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01670", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01671", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:57", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01671-keymap-item-Mesh-EMPTY-WINDOW-57.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01671.py -- tests/files/web/generated/M21-GAP-01671-keymap-item-Mesh-EMPTY-WINDOW-57.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01671", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01671", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01672", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:58", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01672-keymap-item-Mesh-EMPTY-WINDOW-58.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01672.py -- tests/files/web/generated/M21-GAP-01672-keymap-item-Mesh-EMPTY-WINDOW-58.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01672", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01672", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01673", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:59", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01673-keymap-item-Mesh-EMPTY-WINDOW-59.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01673.py -- tests/files/web/generated/M21-GAP-01673-keymap-item-Mesh-EMPTY-WINDOW-59.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01673", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01673", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01674", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01674-keymap-item-Mesh-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01674.py -- tests/files/web/generated/M21-GAP-01674-keymap-item-Mesh-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01674", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01674", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01675", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:60", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01675-keymap-item-Mesh-EMPTY-WINDOW-60.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01675.py -- tests/files/web/generated/M21-GAP-01675-keymap-item-Mesh-EMPTY-WINDOW-60.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01675", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01675", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01676", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:61", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01676-keymap-item-Mesh-EMPTY-WINDOW-61.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01676.py -- tests/files/web/generated/M21-GAP-01676-keymap-item-Mesh-EMPTY-WINDOW-61.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01676", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01676", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01677", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:62", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01677-keymap-item-Mesh-EMPTY-WINDOW-62.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01677.py -- tests/files/web/generated/M21-GAP-01677-keymap-item-Mesh-EMPTY-WINDOW-62.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01677", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01677", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01678", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:63", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01678-keymap-item-Mesh-EMPTY-WINDOW-63.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01678.py -- tests/files/web/generated/M21-GAP-01678-keymap-item-Mesh-EMPTY-WINDOW-63.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01678", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01678", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01679", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:64", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01679-keymap-item-Mesh-EMPTY-WINDOW-64.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01679.py -- tests/files/web/generated/M21-GAP-01679-keymap-item-Mesh-EMPTY-WINDOW-64.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01679", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01679", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01680", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:65", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01680-keymap-item-Mesh-EMPTY-WINDOW-65.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01680.py -- tests/files/web/generated/M21-GAP-01680-keymap-item-Mesh-EMPTY-WINDOW-65.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01680", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01680", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01681", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:66", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01681-keymap-item-Mesh-EMPTY-WINDOW-66.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01681.py -- tests/files/web/generated/M21-GAP-01681-keymap-item-Mesh-EMPTY-WINDOW-66.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01681", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01681", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01682", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:67", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01682-keymap-item-Mesh-EMPTY-WINDOW-67.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01682.py -- tests/files/web/generated/M21-GAP-01682-keymap-item-Mesh-EMPTY-WINDOW-67.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01682", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01682", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01683", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:68", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01683-keymap-item-Mesh-EMPTY-WINDOW-68.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01683.py -- tests/files/web/generated/M21-GAP-01683-keymap-item-Mesh-EMPTY-WINDOW-68.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01683", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01683", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01684", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:69", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01684-keymap-item-Mesh-EMPTY-WINDOW-69.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01684.py -- tests/files/web/generated/M21-GAP-01684-keymap-item-Mesh-EMPTY-WINDOW-69.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01684", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01684", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01685", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01685-keymap-item-Mesh-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01685.py -- tests/files/web/generated/M21-GAP-01685-keymap-item-Mesh-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01685", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01685", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01686", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:70", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01686-keymap-item-Mesh-EMPTY-WINDOW-70.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01686.py -- tests/files/web/generated/M21-GAP-01686-keymap-item-Mesh-EMPTY-WINDOW-70.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01686", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01686", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01687", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:71", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01687-keymap-item-Mesh-EMPTY-WINDOW-71.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01687.py -- tests/files/web/generated/M21-GAP-01687-keymap-item-Mesh-EMPTY-WINDOW-71.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01687", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01687", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01688", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:72", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01688-keymap-item-Mesh-EMPTY-WINDOW-72.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01688.py -- tests/files/web/generated/M21-GAP-01688-keymap-item-Mesh-EMPTY-WINDOW-72.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01688", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01688", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01689", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:73", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01689-keymap-item-Mesh-EMPTY-WINDOW-73.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01689.py -- tests/files/web/generated/M21-GAP-01689-keymap-item-Mesh-EMPTY-WINDOW-73.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01689", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01689", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01690", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:74", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01690-keymap-item-Mesh-EMPTY-WINDOW-74.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01690.py -- tests/files/web/generated/M21-GAP-01690-keymap-item-Mesh-EMPTY-WINDOW-74.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01690", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01690", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01691", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:75", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01691-keymap-item-Mesh-EMPTY-WINDOW-75.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01691.py -- tests/files/web/generated/M21-GAP-01691-keymap-item-Mesh-EMPTY-WINDOW-75.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01691", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01691", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01692", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:76", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01692-keymap-item-Mesh-EMPTY-WINDOW-76.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01692.py -- tests/files/web/generated/M21-GAP-01692-keymap-item-Mesh-EMPTY-WINDOW-76.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01692", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01692", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01693", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:77", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01693-keymap-item-Mesh-EMPTY-WINDOW-77.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01693.py -- tests/files/web/generated/M21-GAP-01693-keymap-item-Mesh-EMPTY-WINDOW-77.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01693", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01693", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01694", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:78", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01694-keymap-item-Mesh-EMPTY-WINDOW-78.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01694.py -- tests/files/web/generated/M21-GAP-01694-keymap-item-Mesh-EMPTY-WINDOW-78.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01694", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01694", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01695", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:79", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01695-keymap-item-Mesh-EMPTY-WINDOW-79.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01695.py -- tests/files/web/generated/M21-GAP-01695-keymap-item-Mesh-EMPTY-WINDOW-79.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01695", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01695", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01696", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01696-keymap-item-Mesh-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01696.py -- tests/files/web/generated/M21-GAP-01696-keymap-item-Mesh-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01696", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01696", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01697", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:80", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01697-keymap-item-Mesh-EMPTY-WINDOW-80.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01697.py -- tests/files/web/generated/M21-GAP-01697-keymap-item-Mesh-EMPTY-WINDOW-80.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01697", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01697", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01698", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:81", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01698-keymap-item-Mesh-EMPTY-WINDOW-81.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01698.py -- tests/files/web/generated/M21-GAP-01698-keymap-item-Mesh-EMPTY-WINDOW-81.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01698", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01698", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01699", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:82", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01699-keymap-item-Mesh-EMPTY-WINDOW-82.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01699.py -- tests/files/web/generated/M21-GAP-01699-keymap-item-Mesh-EMPTY-WINDOW-82.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01699", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01699", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01700", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:83", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01700-keymap-item-Mesh-EMPTY-WINDOW-83.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01700.py -- tests/files/web/generated/M21-GAP-01700-keymap-item-Mesh-EMPTY-WINDOW-83.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01700", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01700", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01701", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:84", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01701-keymap-item-Mesh-EMPTY-WINDOW-84.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01701.py -- tests/files/web/generated/M21-GAP-01701-keymap-item-Mesh-EMPTY-WINDOW-84.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01701", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01701", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01702", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:85", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01702-keymap-item-Mesh-EMPTY-WINDOW-85.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01702.py -- tests/files/web/generated/M21-GAP-01702-keymap-item-Mesh-EMPTY-WINDOW-85.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01702", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01702", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01703", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:86", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01703-keymap-item-Mesh-EMPTY-WINDOW-86.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01703.py -- tests/files/web/generated/M21-GAP-01703-keymap-item-Mesh-EMPTY-WINDOW-86.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01703", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01703", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01704", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:87", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01704-keymap-item-Mesh-EMPTY-WINDOW-87.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01704.py -- tests/files/web/generated/M21-GAP-01704-keymap-item-Mesh-EMPTY-WINDOW-87.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01704", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01704", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01705", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:88", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01705-keymap-item-Mesh-EMPTY-WINDOW-88.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01705.py -- tests/files/web/generated/M21-GAP-01705-keymap-item-Mesh-EMPTY-WINDOW-88.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01705", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01705", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01706", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:89", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01706-keymap-item-Mesh-EMPTY-WINDOW-89.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01706.py -- tests/files/web/generated/M21-GAP-01706-keymap-item-Mesh-EMPTY-WINDOW-89.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01706", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01706", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01707", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01707-keymap-item-Mesh-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01707.py -- tests/files/web/generated/M21-GAP-01707-keymap-item-Mesh-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01707", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01707", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01708", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:90", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01708-keymap-item-Mesh-EMPTY-WINDOW-90.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01708.py -- tests/files/web/generated/M21-GAP-01708-keymap-item-Mesh-EMPTY-WINDOW-90.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01708", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01708", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01709", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:91", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01709-keymap-item-Mesh-EMPTY-WINDOW-91.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01709.py -- tests/files/web/generated/M21-GAP-01709-keymap-item-Mesh-EMPTY-WINDOW-91.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01709", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01709", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01710", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:92", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01710-keymap-item-Mesh-EMPTY-WINDOW-92.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01710.py -- tests/files/web/generated/M21-GAP-01710-keymap-item-Mesh-EMPTY-WINDOW-92.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01710", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01710", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01711", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01711-keymap-item-Metaball-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01711.py -- tests/files/web/generated/M21-GAP-01711-keymap-item-Metaball-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01711", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01711", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01712", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01712-keymap-item-Metaball-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01712.py -- tests/files/web/generated/M21-GAP-01712-keymap-item-Metaball-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01712", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01712", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01713", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01713-keymap-item-Metaball-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01713.py -- tests/files/web/generated/M21-GAP-01713-keymap-item-Metaball-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01713", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01713", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01714", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01714-keymap-item-Metaball-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01714.py -- tests/files/web/generated/M21-GAP-01714-keymap-item-Metaball-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01714", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01714", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01715", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01715-keymap-item-Metaball-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01715.py -- tests/files/web/generated/M21-GAP-01715-keymap-item-Metaball-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01715", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01715", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01716", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01716-keymap-item-Metaball-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01716.py -- tests/files/web/generated/M21-GAP-01716-keymap-item-Metaball-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01716", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01716", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01717", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01717-keymap-item-Metaball-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01717.py -- tests/files/web/generated/M21-GAP-01717-keymap-item-Metaball-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01717", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01717", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01718", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01718-keymap-item-Metaball-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01718.py -- tests/files/web/generated/M21-GAP-01718-keymap-item-Metaball-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01718", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01718", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01719", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01719-keymap-item-Metaball-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01719.py -- tests/files/web/generated/M21-GAP-01719-keymap-item-Metaball-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01719", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01719", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01720", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01720-keymap-item-Metaball-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01720.py -- tests/files/web/generated/M21-GAP-01720-keymap-item-Metaball-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01720", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01720", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01721", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01721-keymap-item-Metaball-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01721.py -- tests/files/web/generated/M21-GAP-01721-keymap-item-Metaball-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01721", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01721", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01722", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01722-keymap-item-Metaball-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01722.py -- tests/files/web/generated/M21-GAP-01722-keymap-item-Metaball-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01722", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01722", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01723", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01723-keymap-item-Metaball-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01723.py -- tests/files/web/generated/M21-GAP-01723-keymap-item-Metaball-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01723", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01723", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01724", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01724-keymap-item-Metaball-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01724.py -- tests/files/web/generated/M21-GAP-01724-keymap-item-Metaball-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01724", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01724", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01725", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01725-keymap-item-Metaball-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01725.py -- tests/files/web/generated/M21-GAP-01725-keymap-item-Metaball-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01725", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01725", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01726", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01726-keymap-item-Metaball-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01726.py -- tests/files/web/generated/M21-GAP-01726-keymap-item-Metaball-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01726", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01726", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01727", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01727-keymap-item-Metaball-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01727.py -- tests/files/web/generated/M21-GAP-01727-keymap-item-Metaball-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01727", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01727", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01728", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01728-keymap-item-Metaball-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01728.py -- tests/files/web/generated/M21-GAP-01728-keymap-item-Metaball-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01728", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01728", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01729", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01729-keymap-item-Metaball-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01729.py -- tests/files/web/generated/M21-GAP-01729-keymap-item-Metaball-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01729", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01729", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01730", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01730-keymap-item-Metaball-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01730.py -- tests/files/web/generated/M21-GAP-01730-keymap-item-Metaball-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01730", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01730", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01731", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01731-keymap-item-Metaball-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01731.py -- tests/files/web/generated/M21-GAP-01731-keymap-item-Metaball-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01731", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01731", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01732", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01732-keymap-item-Metaball-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01732.py -- tests/files/web/generated/M21-GAP-01732-keymap-item-Metaball-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01732", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01732", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01733", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01733-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01733.py -- tests/files/web/generated/M21-GAP-01733-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01733", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01733", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01734", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01734-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01734.py -- tests/files/web/generated/M21-GAP-01734-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01734", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01734", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01735", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01735-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01735.py -- tests/files/web/generated/M21-GAP-01735-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01735", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01735", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01736", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01736-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01736.py -- tests/files/web/generated/M21-GAP-01736-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01736", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01736", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01737", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01737-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01737.py -- tests/files/web/generated/M21-GAP-01737-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01737", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01737", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01738", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01738-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01738.py -- tests/files/web/generated/M21-GAP-01738-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01738", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01738", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01739", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01739-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01739.py -- tests/files/web/generated/M21-GAP-01739-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01739", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01739", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01740", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01740-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01740.py -- tests/files/web/generated/M21-GAP-01740-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01740", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01740", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01741", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01741-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01741.py -- tests/files/web/generated/M21-GAP-01741-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01741", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01741", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01742", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01742-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01742.py -- tests/files/web/generated/M21-GAP-01742-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01742", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01742", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01743", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01743-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01743.py -- tests/files/web/generated/M21-GAP-01743-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01743", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01743", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01744", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01744-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01744.py -- tests/files/web/generated/M21-GAP-01744-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01744", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01744", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01745", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01745-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01745.py -- tests/files/web/generated/M21-GAP-01745-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01745", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01745", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01746", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01746-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01746.py -- tests/files/web/generated/M21-GAP-01746-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01746", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01746", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01747", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01747-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01747.py -- tests/files/web/generated/M21-GAP-01747-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01747", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01747", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01748", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01748-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01748.py -- tests/files/web/generated/M21-GAP-01748-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01748", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01748", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01749", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01749-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01749.py -- tests/files/web/generated/M21-GAP-01749-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01749", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01749", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01750", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01750-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01750.py -- tests/files/web/generated/M21-GAP-01750-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01750", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01750", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01751", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01751-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01751.py -- tests/files/web/generated/M21-GAP-01751-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01751", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01751", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01752", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01752-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01752.py -- tests/files/web/generated/M21-GAP-01752-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01752", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01752", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01753", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01753-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01753.py -- tests/files/web/generated/M21-GAP-01753-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01753", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01753", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01754", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01754-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01754.py -- tests/files/web/generated/M21-GAP-01754-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01754", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01754", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01755", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01755-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01755.py -- tests/files/web/generated/M21-GAP-01755-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01755", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01755", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01756", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01756-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01756.py -- tests/files/web/generated/M21-GAP-01756-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01756", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01756", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01757", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01757-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01757.py -- tests/files/web/generated/M21-GAP-01757-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01757", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01757", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01758", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01758-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01758.py -- tests/files/web/generated/M21-GAP-01758-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01758", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01758", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01759", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01759-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01759.py -- tests/files/web/generated/M21-GAP-01759-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01759", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01759", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01760", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01760-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01760.py -- tests/files/web/generated/M21-GAP-01760-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01760", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01760", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01761", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01761-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01761.py -- tests/files/web/generated/M21-GAP-01761-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01761", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01761", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01762", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01762-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01762.py -- tests/files/web/generated/M21-GAP-01762-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01762", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01762", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01763", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01763-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01763.py -- tests/files/web/generated/M21-GAP-01763-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01763", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01763", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01764", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01764-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01764.py -- tests/files/web/generated/M21-GAP-01764-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01764", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01764", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01765", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01765-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01765.py -- tests/files/web/generated/M21-GAP-01765-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01765", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01765", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01766", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01766-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01766.py -- tests/files/web/generated/M21-GAP-01766-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01766", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01766", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01767", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01767-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01767.py -- tests/files/web/generated/M21-GAP-01767-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01767", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01767", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01768", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01768-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01768.py -- tests/files/web/generated/M21-GAP-01768-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01768", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01768", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01769", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01769-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01769.py -- tests/files/web/generated/M21-GAP-01769-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01769", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01769", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01770", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01770-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01770.py -- tests/files/web/generated/M21-GAP-01770-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01770", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01770", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01771", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01771-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01771.py -- tests/files/web/generated/M21-GAP-01771-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01771", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01771", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01772", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01772-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01772.py -- tests/files/web/generated/M21-GAP-01772-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01772", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01772", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01773", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01773-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01773.py -- tests/files/web/generated/M21-GAP-01773-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01773", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01773", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01774", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01774-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01774.py -- tests/files/web/generated/M21-GAP-01774-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01774", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01774", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01775", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01775-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01775.py -- tests/files/web/generated/M21-GAP-01775-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01775", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01775", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01776", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01776-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01776.py -- tests/files/web/generated/M21-GAP-01776-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01776", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01776", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01777", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01777-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01777.py -- tests/files/web/generated/M21-GAP-01777-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01777", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01777", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01778", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01778-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01778.py -- tests/files/web/generated/M21-GAP-01778-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01778", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01778", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01779", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01779-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01779.py -- tests/files/web/generated/M21-GAP-01779-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01779", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01779", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01780", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01780-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01780.py -- tests/files/web/generated/M21-GAP-01780-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01780", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01780", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01781", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01781-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01781.py -- tests/files/web/generated/M21-GAP-01781-keymap-item-NLA-Editor-NLA_EDITOR-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01781", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01781", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01782", + "gapId": "keymap-item:NLA Generic:NLA_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01782-keymap-item-NLA-Generic-NLA_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01782.py -- tests/files/web/generated/M21-GAP-01782-keymap-item-NLA-Generic-NLA_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01782", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01782", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01783", + "gapId": "keymap-item:NLA Generic:NLA_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01783-keymap-item-NLA-Generic-NLA_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01783.py -- tests/files/web/generated/M21-GAP-01783-keymap-item-NLA-Generic-NLA_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01783", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01783", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01784", + "gapId": "keymap-item:NLA Generic:NLA_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01784-keymap-item-NLA-Generic-NLA_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01784.py -- tests/files/web/generated/M21-GAP-01784-keymap-item-NLA-Generic-NLA_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01784", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01784", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01785", + "gapId": "keymap-item:NLA Generic:NLA_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01785-keymap-item-NLA-Generic-NLA_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01785.py -- tests/files/web/generated/M21-GAP-01785-keymap-item-NLA-Generic-NLA_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01785", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01785", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01786", + "gapId": "keymap-item:NLA Generic:NLA_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01786-keymap-item-NLA-Generic-NLA_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01786.py -- tests/files/web/generated/M21-GAP-01786-keymap-item-NLA-Generic-NLA_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01786", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01786", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01787", + "gapId": "keymap-item:NLA Generic:NLA_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01787-keymap-item-NLA-Generic-NLA_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01787.py -- tests/files/web/generated/M21-GAP-01787-keymap-item-NLA-Generic-NLA_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01787", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01787", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01788", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01788-keymap-item-NLA-Tracks-NLA_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01788.py -- tests/files/web/generated/M21-GAP-01788-keymap-item-NLA-Tracks-NLA_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01788", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01788", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01789", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01789-keymap-item-NLA-Tracks-NLA_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01789.py -- tests/files/web/generated/M21-GAP-01789-keymap-item-NLA-Tracks-NLA_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01789", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01789", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01790", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01790-keymap-item-NLA-Tracks-NLA_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01790.py -- tests/files/web/generated/M21-GAP-01790-keymap-item-NLA-Tracks-NLA_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01790", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01790", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01791", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01791-keymap-item-NLA-Tracks-NLA_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01791.py -- tests/files/web/generated/M21-GAP-01791-keymap-item-NLA-Tracks-NLA_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01791", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01791", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01792", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01792-keymap-item-NLA-Tracks-NLA_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01792.py -- tests/files/web/generated/M21-GAP-01792-keymap-item-NLA-Tracks-NLA_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01792", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01792", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01793", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01793-keymap-item-NLA-Tracks-NLA_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01793.py -- tests/files/web/generated/M21-GAP-01793-keymap-item-NLA-Tracks-NLA_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01793", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01793", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01794", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01794-keymap-item-NLA-Tracks-NLA_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01794.py -- tests/files/web/generated/M21-GAP-01794-keymap-item-NLA-Tracks-NLA_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01794", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01794", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01795", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01795-keymap-item-NLA-Tracks-NLA_EDITOR-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01795.py -- tests/files/web/generated/M21-GAP-01795-keymap-item-NLA-Tracks-NLA_EDITOR-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01795", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01795", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01796", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01796-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01796.py -- tests/files/web/generated/M21-GAP-01796-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01796", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01796", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01797", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01797-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01797.py -- tests/files/web/generated/M21-GAP-01797-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01797", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01797", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01798", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01798-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01798.py -- tests/files/web/generated/M21-GAP-01798-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01798", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01798", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01799", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:100", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01799-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-100.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01799.py -- tests/files/web/generated/M21-GAP-01799-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-100.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01799", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01799", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01800", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:101", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01800-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-101.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01800.py -- tests/files/web/generated/M21-GAP-01800-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-101.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01800", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01800", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01801", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:102", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01801-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-102.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01801.py -- tests/files/web/generated/M21-GAP-01801-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-102.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01801", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01801", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01802", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:103", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01802-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-103.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01802.py -- tests/files/web/generated/M21-GAP-01802-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-103.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01802", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01802", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01803", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01803-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01803.py -- tests/files/web/generated/M21-GAP-01803-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01803", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01803", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01804", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01804-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01804.py -- tests/files/web/generated/M21-GAP-01804-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01804", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01804", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01805", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01805-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01805.py -- tests/files/web/generated/M21-GAP-01805-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01805", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01805", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01806", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01806-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01806.py -- tests/files/web/generated/M21-GAP-01806-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01806", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01806", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01807", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01807-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01807.py -- tests/files/web/generated/M21-GAP-01807-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01807", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01807", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01808", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01808-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01808.py -- tests/files/web/generated/M21-GAP-01808-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01808", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01808", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01809", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01809-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01809.py -- tests/files/web/generated/M21-GAP-01809-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01809", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01809", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01810", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01810-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01810.py -- tests/files/web/generated/M21-GAP-01810-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01810", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01810", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01811", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01811-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01811.py -- tests/files/web/generated/M21-GAP-01811-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01811", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01811", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01812", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01812-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01812.py -- tests/files/web/generated/M21-GAP-01812-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01812", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01812", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01813", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01813-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01813.py -- tests/files/web/generated/M21-GAP-01813-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01813", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01813", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01814", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01814-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01814.py -- tests/files/web/generated/M21-GAP-01814-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01814", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01814", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01815", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01815-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01815.py -- tests/files/web/generated/M21-GAP-01815-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01815", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01815", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01816", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01816-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01816.py -- tests/files/web/generated/M21-GAP-01816-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01816", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01816", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01817", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01817-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01817.py -- tests/files/web/generated/M21-GAP-01817-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01817", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01817", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01818", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01818-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01818.py -- tests/files/web/generated/M21-GAP-01818-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01818", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01818", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01819", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01819-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01819.py -- tests/files/web/generated/M21-GAP-01819-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01819", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01819", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01820", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01820-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01820.py -- tests/files/web/generated/M21-GAP-01820-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01820", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01820", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01821", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01821-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01821.py -- tests/files/web/generated/M21-GAP-01821-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01821", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01821", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01822", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01822-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01822.py -- tests/files/web/generated/M21-GAP-01822-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01822", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01822", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01823", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01823-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01823.py -- tests/files/web/generated/M21-GAP-01823-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01823", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01823", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01824", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01824-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01824.py -- tests/files/web/generated/M21-GAP-01824-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01824", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01824", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01825", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01825-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01825.py -- tests/files/web/generated/M21-GAP-01825-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01825", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01825", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01826", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01826-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01826.py -- tests/files/web/generated/M21-GAP-01826-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01826", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01826", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01827", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01827-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01827.py -- tests/files/web/generated/M21-GAP-01827-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01827", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01827", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01828", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01828-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01828.py -- tests/files/web/generated/M21-GAP-01828-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01828", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01828", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01829", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01829-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01829.py -- tests/files/web/generated/M21-GAP-01829-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01829", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01829", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01830", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01830-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01830.py -- tests/files/web/generated/M21-GAP-01830-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01830", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01830", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01831", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01831-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01831.py -- tests/files/web/generated/M21-GAP-01831-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01831", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01831", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01832", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01832-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01832.py -- tests/files/web/generated/M21-GAP-01832-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01832", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01832", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01833", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01833-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01833.py -- tests/files/web/generated/M21-GAP-01833-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01833", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01833", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01834", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01834-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01834.py -- tests/files/web/generated/M21-GAP-01834-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01834", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01834", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01835", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01835-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01835.py -- tests/files/web/generated/M21-GAP-01835-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01835", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01835", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01836", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01836-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01836.py -- tests/files/web/generated/M21-GAP-01836-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01836", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01836", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01837", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01837-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01837.py -- tests/files/web/generated/M21-GAP-01837-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01837", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01837", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01838", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01838-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01838.py -- tests/files/web/generated/M21-GAP-01838-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01838", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01838", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01839", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01839-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01839.py -- tests/files/web/generated/M21-GAP-01839-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01839", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01839", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01840", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01840-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01840.py -- tests/files/web/generated/M21-GAP-01840-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01840", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01840", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01841", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01841-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01841.py -- tests/files/web/generated/M21-GAP-01841-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01841", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01841", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01842", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01842-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01842.py -- tests/files/web/generated/M21-GAP-01842-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01842", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01842", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01843", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01843-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01843.py -- tests/files/web/generated/M21-GAP-01843-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01843", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01843", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01844", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01844-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01844.py -- tests/files/web/generated/M21-GAP-01844-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01844", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01844", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01845", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01845-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01845.py -- tests/files/web/generated/M21-GAP-01845-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01845", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01845", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01846", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01846-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-50.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01846.py -- tests/files/web/generated/M21-GAP-01846-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-50.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01846", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01846", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01847", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:51", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01847-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-51.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01847.py -- tests/files/web/generated/M21-GAP-01847-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-51.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01847", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01847", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01848", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:52", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01848-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-52.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01848.py -- tests/files/web/generated/M21-GAP-01848-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-52.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01848", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01848", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01849", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:53", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01849-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-53.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01849.py -- tests/files/web/generated/M21-GAP-01849-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-53.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01849", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01849", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01850", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:54", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01850-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-54.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01850.py -- tests/files/web/generated/M21-GAP-01850-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-54.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01850", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01850", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01851", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:55", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01851-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-55.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01851.py -- tests/files/web/generated/M21-GAP-01851-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-55.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01851", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01851", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01852", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:56", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01852-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-56.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01852.py -- tests/files/web/generated/M21-GAP-01852-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-56.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01852", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01852", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01853", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:57", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01853-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-57.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01853.py -- tests/files/web/generated/M21-GAP-01853-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-57.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01853", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01853", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01854", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:58", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01854-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-58.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01854.py -- tests/files/web/generated/M21-GAP-01854-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-58.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01854", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01854", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01855", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:59", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01855-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-59.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01855.py -- tests/files/web/generated/M21-GAP-01855-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-59.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01855", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01855", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01856", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01856-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01856.py -- tests/files/web/generated/M21-GAP-01856-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01856", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01856", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01857", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:60", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01857-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-60.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01857.py -- tests/files/web/generated/M21-GAP-01857-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-60.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01857", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01857", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01858", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:61", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01858-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-61.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01858.py -- tests/files/web/generated/M21-GAP-01858-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-61.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01858", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01858", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01859", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:62", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01859-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-62.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01859.py -- tests/files/web/generated/M21-GAP-01859-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-62.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01859", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01859", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01860", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:63", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01860-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-63.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01860.py -- tests/files/web/generated/M21-GAP-01860-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-63.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01860", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01860", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01861", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:64", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01861-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-64.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01861.py -- tests/files/web/generated/M21-GAP-01861-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-64.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01861", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01861", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01862", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:65", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01862-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-65.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01862.py -- tests/files/web/generated/M21-GAP-01862-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-65.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01862", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01862", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01863", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:66", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01863-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-66.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01863.py -- tests/files/web/generated/M21-GAP-01863-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-66.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01863", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01863", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01864", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:67", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01864-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-67.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01864.py -- tests/files/web/generated/M21-GAP-01864-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-67.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01864", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01864", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01865", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:68", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01865-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-68.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01865.py -- tests/files/web/generated/M21-GAP-01865-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-68.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01865", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01865", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01866", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:69", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01866-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-69.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01866.py -- tests/files/web/generated/M21-GAP-01866-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-69.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01866", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01866", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01867", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01867-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01867.py -- tests/files/web/generated/M21-GAP-01867-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01867", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01867", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01868", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:70", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01868-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-70.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01868.py -- tests/files/web/generated/M21-GAP-01868-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-70.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01868", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01868", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01869", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:71", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01869-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-71.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01869.py -- tests/files/web/generated/M21-GAP-01869-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-71.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01869", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01869", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01870", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:72", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01870-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-72.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01870.py -- tests/files/web/generated/M21-GAP-01870-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-72.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01870", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01870", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01871", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:73", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01871-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-73.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01871.py -- tests/files/web/generated/M21-GAP-01871-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-73.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01871", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01871", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01872", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:74", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01872-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-74.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01872.py -- tests/files/web/generated/M21-GAP-01872-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-74.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01872", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01872", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01873", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:75", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01873-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-75.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01873.py -- tests/files/web/generated/M21-GAP-01873-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-75.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01873", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01873", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01874", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:76", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01874-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-76.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01874.py -- tests/files/web/generated/M21-GAP-01874-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-76.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01874", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01874", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01875", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:77", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01875-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-77.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01875.py -- tests/files/web/generated/M21-GAP-01875-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-77.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01875", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01875", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01876", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:78", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01876-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-78.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01876.py -- tests/files/web/generated/M21-GAP-01876-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-78.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01876", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01876", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01877", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:79", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01877-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-79.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01877.py -- tests/files/web/generated/M21-GAP-01877-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-79.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01877", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01877", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01878", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01878-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01878.py -- tests/files/web/generated/M21-GAP-01878-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01878", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01878", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01879", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:80", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01879-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-80.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01879.py -- tests/files/web/generated/M21-GAP-01879-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-80.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01879", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01879", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01880", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:81", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01880-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-81.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01880.py -- tests/files/web/generated/M21-GAP-01880-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-81.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01880", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01880", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01881", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:82", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01881-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-82.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01881.py -- tests/files/web/generated/M21-GAP-01881-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-82.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01881", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01881", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01882", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:83", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01882-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-83.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01882.py -- tests/files/web/generated/M21-GAP-01882-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-83.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01882", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01882", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01883", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:84", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01883-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-84.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01883.py -- tests/files/web/generated/M21-GAP-01883-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-84.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01883", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01883", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01884", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:85", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01884-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-85.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01884.py -- tests/files/web/generated/M21-GAP-01884-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-85.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01884", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01884", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01885", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:86", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01885-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-86.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01885.py -- tests/files/web/generated/M21-GAP-01885-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-86.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01885", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01885", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01886", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:87", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01886-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-87.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01886.py -- tests/files/web/generated/M21-GAP-01886-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-87.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01886", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01886", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01887", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:88", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01887-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-88.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01887.py -- tests/files/web/generated/M21-GAP-01887-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-88.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01887", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01887", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01888", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:89", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01888-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-89.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01888.py -- tests/files/web/generated/M21-GAP-01888-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-89.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01888", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01888", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01889", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01889-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01889.py -- tests/files/web/generated/M21-GAP-01889-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01889", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01889", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01890", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:90", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01890-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-90.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01890.py -- tests/files/web/generated/M21-GAP-01890-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-90.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01890", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01890", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01891", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:91", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01891-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-91.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01891.py -- tests/files/web/generated/M21-GAP-01891-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-91.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01891", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01891", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01892", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:92", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01892-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-92.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01892.py -- tests/files/web/generated/M21-GAP-01892-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-92.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01892", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01892", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01893", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:93", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01893-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-93.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01893.py -- tests/files/web/generated/M21-GAP-01893-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-93.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01893", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01893", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01894", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:94", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01894-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-94.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01894.py -- tests/files/web/generated/M21-GAP-01894-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-94.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01894", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01894", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01895", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:95", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01895-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-95.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01895.py -- tests/files/web/generated/M21-GAP-01895-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-95.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01895", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01895", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01896", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:96", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01896-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-96.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01896.py -- tests/files/web/generated/M21-GAP-01896-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-96.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01896", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01896", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01897", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:97", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01897-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-97.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01897.py -- tests/files/web/generated/M21-GAP-01897-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-97.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01897", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01897", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01898", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:98", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01898-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-98.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01898.py -- tests/files/web/generated/M21-GAP-01898-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-98.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01898", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01898", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01899", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:99", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01899-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-99.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01899.py -- tests/files/web/generated/M21-GAP-01899-keymap-item-Node-Editor-NODE_EDITOR-WINDOW-99.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01899", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01899", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01900", + "gapId": "keymap-item:Node Generic:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01900-keymap-item-Node-Generic-NODE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01900.py -- tests/files/web/generated/M21-GAP-01900-keymap-item-Node-Generic-NODE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01900", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01900", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01901", + "gapId": "keymap-item:Node Generic:NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01901-keymap-item-Node-Generic-NODE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01901.py -- tests/files/web/generated/M21-GAP-01901-keymap-item-Node-Generic-NODE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01901", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01901", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01902", + "gapId": "keymap-item:Node Link Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01902-keymap-item-Node-Link-Modal-Map-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01902.py -- tests/files/web/generated/M21-GAP-01902-keymap-item-Node-Link-Modal-Map-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01902", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01902", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01903", + "gapId": "keymap-item:Node Link Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01903-keymap-item-Node-Link-Modal-Map-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01903.py -- tests/files/web/generated/M21-GAP-01903-keymap-item-Node-Link-Modal-Map-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01903", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01903", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01904", + "gapId": "keymap-item:Node Link Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01904-keymap-item-Node-Link-Modal-Map-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01904.py -- tests/files/web/generated/M21-GAP-01904-keymap-item-Node-Link-Modal-Map-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01904", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01904", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01905", + "gapId": "keymap-item:Node Link Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01905-keymap-item-Node-Link-Modal-Map-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01905.py -- tests/files/web/generated/M21-GAP-01905-keymap-item-Node-Link-Modal-Map-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01905", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01905", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01906", + "gapId": "keymap-item:Node Link Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01906-keymap-item-Node-Link-Modal-Map-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01906.py -- tests/files/web/generated/M21-GAP-01906-keymap-item-Node-Link-Modal-Map-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01906", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01906", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01907", + "gapId": "keymap-item:Node Link Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01907-keymap-item-Node-Link-Modal-Map-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01907.py -- tests/files/web/generated/M21-GAP-01907-keymap-item-Node-Link-Modal-Map-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01907", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01907", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01908", + "gapId": "keymap-item:Node Resize Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01908-keymap-item-Node-Resize-Modal-Map-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01908.py -- tests/files/web/generated/M21-GAP-01908-keymap-item-Node-Resize-Modal-Map-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01908", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01908", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01909", + "gapId": "keymap-item:Node Resize Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01909-keymap-item-Node-Resize-Modal-Map-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01909.py -- tests/files/web/generated/M21-GAP-01909-keymap-item-Node-Resize-Modal-Map-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01909", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01909", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01910", + "gapId": "keymap-item:Node Resize Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01910-keymap-item-Node-Resize-Modal-Map-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01910.py -- tests/files/web/generated/M21-GAP-01910-keymap-item-Node-Resize-Modal-Map-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01910", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01910", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01911", + "gapId": "keymap-item:Node Resize Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01911-keymap-item-Node-Resize-Modal-Map-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01911.py -- tests/files/web/generated/M21-GAP-01911-keymap-item-Node-Resize-Modal-Map-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01911", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01911", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01912", + "gapId": "keymap-item:Node Resize Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01912-keymap-item-Node-Resize-Modal-Map-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01912.py -- tests/files/web/generated/M21-GAP-01912-keymap-item-Node-Resize-Modal-Map-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01912", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01912", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01913", + "gapId": "keymap-item:Node Resize Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01913-keymap-item-Node-Resize-Modal-Map-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01913.py -- tests/files/web/generated/M21-GAP-01913-keymap-item-Node-Resize-Modal-Map-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01913", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01913", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01914", + "gapId": "keymap-item:Node Resize Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01914-keymap-item-Node-Resize-Modal-Map-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01914.py -- tests/files/web/generated/M21-GAP-01914-keymap-item-Node-Resize-Modal-Map-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01914", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01914", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01915", + "gapId": "keymap-item:Node Tool: Add Reroute:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01915-keymap-item-Node-Tool-Add-Reroute-NODE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01915.py -- tests/files/web/generated/M21-GAP-01915-keymap-item-Node-Tool-Add-Reroute-NODE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01915", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01915", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01916", + "gapId": "keymap-item:Node Tool: Links Cut:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01916-keymap-item-Node-Tool-Links-Cut-NODE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01916.py -- tests/files/web/generated/M21-GAP-01916-keymap-item-Node-Tool-Links-Cut-NODE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01916", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01916", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01917", + "gapId": "keymap-item:Node Tool: Mute Links:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01917-keymap-item-Node-Tool-Mute-Links-NODE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01917.py -- tests/files/web/generated/M21-GAP-01917-keymap-item-Node-Tool-Mute-Links-NODE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01917", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01917", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01918", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01918-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01918.py -- tests/files/web/generated/M21-GAP-01918-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01918", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01918", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01919", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01919-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01919.py -- tests/files/web/generated/M21-GAP-01919-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01919", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01919", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01920", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01920-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01920.py -- tests/files/web/generated/M21-GAP-01920-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01920", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01920", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01921", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01921-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01921.py -- tests/files/web/generated/M21-GAP-01921-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01921", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01921", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01922", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01922-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01922.py -- tests/files/web/generated/M21-GAP-01922-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01922", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01922", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01923", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01923-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01923.py -- tests/files/web/generated/M21-GAP-01923-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01923", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01923", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01924", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01924-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01924.py -- tests/files/web/generated/M21-GAP-01924-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01924", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01924", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01925", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01925-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01925.py -- tests/files/web/generated/M21-GAP-01925-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01925", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01925", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01926", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01926-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01926.py -- tests/files/web/generated/M21-GAP-01926-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01926", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01926", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01927", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01927-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01927.py -- tests/files/web/generated/M21-GAP-01927-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01927", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01927", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01928", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01928-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01928.py -- tests/files/web/generated/M21-GAP-01928-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01928", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01928", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01929", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01929-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01929.py -- tests/files/web/generated/M21-GAP-01929-keymap-item-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01929", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01929", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01930", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01930-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01930.py -- tests/files/web/generated/M21-GAP-01930-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01930", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01930", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01931", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01931-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01931.py -- tests/files/web/generated/M21-GAP-01931-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01931", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01931", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01932", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01932-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01932.py -- tests/files/web/generated/M21-GAP-01932-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01932", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01932", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01933", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01933-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01933.py -- tests/files/web/generated/M21-GAP-01933-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01933", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01933", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01934", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01934-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01934.py -- tests/files/web/generated/M21-GAP-01934-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01934", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01934", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01935", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01935-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01935.py -- tests/files/web/generated/M21-GAP-01935-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01935", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01935", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01936", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01936-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01936.py -- tests/files/web/generated/M21-GAP-01936-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01936", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01936", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01937", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01937-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01937.py -- tests/files/web/generated/M21-GAP-01937-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01937", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01937", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01938", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01938-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01938.py -- tests/files/web/generated/M21-GAP-01938-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01938", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01938", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01939", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01939-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01939.py -- tests/files/web/generated/M21-GAP-01939-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01939", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01939", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01940", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01940-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01940.py -- tests/files/web/generated/M21-GAP-01940-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01940", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01940", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01941", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01941-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01941.py -- tests/files/web/generated/M21-GAP-01941-keymap-item-Node-Tool-Select-Box-NODE_EDITOR-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01941", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01941", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01942", + "gapId": "keymap-item:Node Tool: Select Circle (fallback):NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01942-keymap-item-Node-Tool-Select-Circle-fallback-NODE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01942.py -- tests/files/web/generated/M21-GAP-01942-keymap-item-Node-Tool-Select-Circle-fallback-NODE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01942", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01942", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01943", + "gapId": "keymap-item:Node Tool: Select Circle (fallback):NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01943-keymap-item-Node-Tool-Select-Circle-fallback-NODE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01943.py -- tests/files/web/generated/M21-GAP-01943-keymap-item-Node-Tool-Select-Circle-fallback-NODE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01943", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01943", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01944", + "gapId": "keymap-item:Node Tool: Select Circle (fallback):NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01944-keymap-item-Node-Tool-Select-Circle-fallback-NODE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01944.py -- tests/files/web/generated/M21-GAP-01944-keymap-item-Node-Tool-Select-Circle-fallback-NODE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01944", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01944", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01945", + "gapId": "keymap-item:Node Tool: Select Circle:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01945-keymap-item-Node-Tool-Select-Circle-NODE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01945.py -- tests/files/web/generated/M21-GAP-01945-keymap-item-Node-Tool-Select-Circle-NODE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01945", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01945", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01946", + "gapId": "keymap-item:Node Tool: Select Circle:NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01946-keymap-item-Node-Tool-Select-Circle-NODE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01946.py -- tests/files/web/generated/M21-GAP-01946-keymap-item-Node-Tool-Select-Circle-NODE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01946", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01946", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01947", + "gapId": "keymap-item:Node Tool: Select Circle:NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01947-keymap-item-Node-Tool-Select-Circle-NODE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01947.py -- tests/files/web/generated/M21-GAP-01947-keymap-item-Node-Tool-Select-Circle-NODE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01947", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01947", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01948", + "gapId": "keymap-item:Node Tool: Select Lasso (fallback):NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01948-keymap-item-Node-Tool-Select-Lasso-fallback-NODE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01948.py -- tests/files/web/generated/M21-GAP-01948-keymap-item-Node-Tool-Select-Lasso-fallback-NODE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01948", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01948", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01949", + "gapId": "keymap-item:Node Tool: Select Lasso (fallback):NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01949-keymap-item-Node-Tool-Select-Lasso-fallback-NODE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01949.py -- tests/files/web/generated/M21-GAP-01949-keymap-item-Node-Tool-Select-Lasso-fallback-NODE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01949", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01949", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01950", + "gapId": "keymap-item:Node Tool: Select Lasso (fallback):NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01950-keymap-item-Node-Tool-Select-Lasso-fallback-NODE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01950.py -- tests/files/web/generated/M21-GAP-01950-keymap-item-Node-Tool-Select-Lasso-fallback-NODE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01950", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01950", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01951", + "gapId": "keymap-item:Node Tool: Select Lasso:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01951-keymap-item-Node-Tool-Select-Lasso-NODE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01951.py -- tests/files/web/generated/M21-GAP-01951-keymap-item-Node-Tool-Select-Lasso-NODE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01951", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01951", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01952", + "gapId": "keymap-item:Node Tool: Select Lasso:NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01952-keymap-item-Node-Tool-Select-Lasso-NODE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01952.py -- tests/files/web/generated/M21-GAP-01952-keymap-item-Node-Tool-Select-Lasso-NODE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01952", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01952", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01953", + "gapId": "keymap-item:Node Tool: Select Lasso:NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01953-keymap-item-Node-Tool-Select-Lasso-NODE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01953.py -- tests/files/web/generated/M21-GAP-01953-keymap-item-Node-Tool-Select-Lasso-NODE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01953", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01953", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01954", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01954-keymap-item-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01954.py -- tests/files/web/generated/M21-GAP-01954-keymap-item-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01954", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01954", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01955", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01955-keymap-item-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01955.py -- tests/files/web/generated/M21-GAP-01955-keymap-item-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01955", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01955", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01956", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01956-keymap-item-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01956.py -- tests/files/web/generated/M21-GAP-01956-keymap-item-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01956", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01956", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01957", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01957-keymap-item-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01957.py -- tests/files/web/generated/M21-GAP-01957-keymap-item-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01957", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01957", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01958", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01958-keymap-item-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01958.py -- tests/files/web/generated/M21-GAP-01958-keymap-item-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01958", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01958", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01959", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01959-keymap-item-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01959.py -- tests/files/web/generated/M21-GAP-01959-keymap-item-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01959", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01959", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01960", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01960-keymap-item-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01960.py -- tests/files/web/generated/M21-GAP-01960-keymap-item-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01960", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01960", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01961", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01961-keymap-item-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01961.py -- tests/files/web/generated/M21-GAP-01961-keymap-item-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01961", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01961", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01962", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01962-keymap-item-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01962.py -- tests/files/web/generated/M21-GAP-01962-keymap-item-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01962", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01962", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01963", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01963-keymap-item-Node-Tool-Tweak-NODE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01963.py -- tests/files/web/generated/M21-GAP-01963-keymap-item-Node-Tool-Tweak-NODE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01963", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01963", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01964", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01964-keymap-item-Node-Tool-Tweak-NODE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01964.py -- tests/files/web/generated/M21-GAP-01964-keymap-item-Node-Tool-Tweak-NODE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01964", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01964", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01965", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01965-keymap-item-Node-Tool-Tweak-NODE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01965.py -- tests/files/web/generated/M21-GAP-01965-keymap-item-Node-Tool-Tweak-NODE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01965", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01965", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01966", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01966-keymap-item-Node-Tool-Tweak-NODE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01966.py -- tests/files/web/generated/M21-GAP-01966-keymap-item-Node-Tool-Tweak-NODE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01966", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01966", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01967", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01967-keymap-item-Node-Tool-Tweak-NODE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01967.py -- tests/files/web/generated/M21-GAP-01967-keymap-item-Node-Tool-Tweak-NODE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01967", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01967", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01968", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01968-keymap-item-Node-Tool-Tweak-NODE_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01968.py -- tests/files/web/generated/M21-GAP-01968-keymap-item-Node-Tool-Tweak-NODE_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01968", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01968", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01969", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01969-keymap-item-Node-Tool-Tweak-NODE_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01969.py -- tests/files/web/generated/M21-GAP-01969-keymap-item-Node-Tool-Tweak-NODE_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01969", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01969", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01970", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01970-keymap-item-Node-Tool-Tweak-NODE_EDITOR-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01970.py -- tests/files/web/generated/M21-GAP-01970-keymap-item-Node-Tool-Tweak-NODE_EDITOR-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01970", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01970", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01971", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01971-keymap-item-Node-Tool-Tweak-NODE_EDITOR-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01971.py -- tests/files/web/generated/M21-GAP-01971-keymap-item-Node-Tool-Tweak-NODE_EDITOR-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01971", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01971", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01972", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01972-keymap-item-Object-Mode-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01972.py -- tests/files/web/generated/M21-GAP-01972-keymap-item-Object-Mode-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01972", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01972", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01973", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01973-keymap-item-Object-Mode-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01973.py -- tests/files/web/generated/M21-GAP-01973-keymap-item-Object-Mode-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01973", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01973", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01974", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01974-keymap-item-Object-Mode-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01974.py -- tests/files/web/generated/M21-GAP-01974-keymap-item-Object-Mode-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01974", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01974", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01975", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01975-keymap-item-Object-Mode-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01975.py -- tests/files/web/generated/M21-GAP-01975-keymap-item-Object-Mode-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01975", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01975", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01976", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01976-keymap-item-Object-Mode-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01976.py -- tests/files/web/generated/M21-GAP-01976-keymap-item-Object-Mode-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01976", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01976", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01977", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01977-keymap-item-Object-Mode-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01977.py -- tests/files/web/generated/M21-GAP-01977-keymap-item-Object-Mode-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01977", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01977", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01978", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01978-keymap-item-Object-Mode-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01978.py -- tests/files/web/generated/M21-GAP-01978-keymap-item-Object-Mode-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01978", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01978", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01979", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01979-keymap-item-Object-Mode-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01979.py -- tests/files/web/generated/M21-GAP-01979-keymap-item-Object-Mode-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01979", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01979", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01980", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01980-keymap-item-Object-Mode-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01980.py -- tests/files/web/generated/M21-GAP-01980-keymap-item-Object-Mode-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01980", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01980", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01981", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01981-keymap-item-Object-Mode-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01981.py -- tests/files/web/generated/M21-GAP-01981-keymap-item-Object-Mode-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01981", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01981", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01982", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01982-keymap-item-Object-Mode-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01982.py -- tests/files/web/generated/M21-GAP-01982-keymap-item-Object-Mode-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01982", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01982", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01983", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01983-keymap-item-Object-Mode-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01983.py -- tests/files/web/generated/M21-GAP-01983-keymap-item-Object-Mode-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01983", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01983", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01984", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01984-keymap-item-Object-Mode-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01984.py -- tests/files/web/generated/M21-GAP-01984-keymap-item-Object-Mode-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01984", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01984", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01985", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01985-keymap-item-Object-Mode-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01985.py -- tests/files/web/generated/M21-GAP-01985-keymap-item-Object-Mode-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01985", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01985", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01986", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01986-keymap-item-Object-Mode-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01986.py -- tests/files/web/generated/M21-GAP-01986-keymap-item-Object-Mode-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01986", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01986", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01987", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01987-keymap-item-Object-Mode-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01987.py -- tests/files/web/generated/M21-GAP-01987-keymap-item-Object-Mode-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01987", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01987", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01988", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01988-keymap-item-Object-Mode-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01988.py -- tests/files/web/generated/M21-GAP-01988-keymap-item-Object-Mode-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01988", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01988", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01989", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01989-keymap-item-Object-Mode-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01989.py -- tests/files/web/generated/M21-GAP-01989-keymap-item-Object-Mode-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01989", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01989", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01990", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01990-keymap-item-Object-Mode-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01990.py -- tests/files/web/generated/M21-GAP-01990-keymap-item-Object-Mode-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01990", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01990", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01991", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01991-keymap-item-Object-Mode-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01991.py -- tests/files/web/generated/M21-GAP-01991-keymap-item-Object-Mode-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01991", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01991", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01992", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01992-keymap-item-Object-Mode-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01992.py -- tests/files/web/generated/M21-GAP-01992-keymap-item-Object-Mode-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01992", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01992", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01993", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01993-keymap-item-Object-Mode-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01993.py -- tests/files/web/generated/M21-GAP-01993-keymap-item-Object-Mode-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01993", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01993", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01994", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01994-keymap-item-Object-Mode-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01994.py -- tests/files/web/generated/M21-GAP-01994-keymap-item-Object-Mode-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01994", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01994", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01995", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01995-keymap-item-Object-Mode-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01995.py -- tests/files/web/generated/M21-GAP-01995-keymap-item-Object-Mode-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01995", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01995", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01996", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01996-keymap-item-Object-Mode-EMPTY-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01996.py -- tests/files/web/generated/M21-GAP-01996-keymap-item-Object-Mode-EMPTY-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01996", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01996", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01997", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01997-keymap-item-Object-Mode-EMPTY-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01997.py -- tests/files/web/generated/M21-GAP-01997-keymap-item-Object-Mode-EMPTY-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01997", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01997", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01998", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01998-keymap-item-Object-Mode-EMPTY-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01998.py -- tests/files/web/generated/M21-GAP-01998-keymap-item-Object-Mode-EMPTY-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01998", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01998", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-01999", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-01999-keymap-item-Object-Mode-EMPTY-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-01999.py -- tests/files/web/generated/M21-GAP-01999-keymap-item-Object-Mode-EMPTY-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-01999", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-01999", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02000", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02000-keymap-item-Object-Mode-EMPTY-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02000.py -- tests/files/web/generated/M21-GAP-02000-keymap-item-Object-Mode-EMPTY-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02000", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02000", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02001", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02001-keymap-item-Object-Mode-EMPTY-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02001.py -- tests/files/web/generated/M21-GAP-02001-keymap-item-Object-Mode-EMPTY-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02001", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02001", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02002", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02002-keymap-item-Object-Mode-EMPTY-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02002.py -- tests/files/web/generated/M21-GAP-02002-keymap-item-Object-Mode-EMPTY-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02002", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02002", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02003", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02003-keymap-item-Object-Mode-EMPTY-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02003.py -- tests/files/web/generated/M21-GAP-02003-keymap-item-Object-Mode-EMPTY-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02003", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02003", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02004", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02004-keymap-item-Object-Mode-EMPTY-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02004.py -- tests/files/web/generated/M21-GAP-02004-keymap-item-Object-Mode-EMPTY-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02004", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02004", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02005", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02005-keymap-item-Object-Mode-EMPTY-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02005.py -- tests/files/web/generated/M21-GAP-02005-keymap-item-Object-Mode-EMPTY-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02005", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02005", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02006", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02006-keymap-item-Object-Mode-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02006.py -- tests/files/web/generated/M21-GAP-02006-keymap-item-Object-Mode-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02006", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02006", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02007", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02007-keymap-item-Object-Mode-EMPTY-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02007.py -- tests/files/web/generated/M21-GAP-02007-keymap-item-Object-Mode-EMPTY-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02007", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02007", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02008", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02008-keymap-item-Object-Mode-EMPTY-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02008.py -- tests/files/web/generated/M21-GAP-02008-keymap-item-Object-Mode-EMPTY-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02008", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02008", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02009", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02009-keymap-item-Object-Mode-EMPTY-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02009.py -- tests/files/web/generated/M21-GAP-02009-keymap-item-Object-Mode-EMPTY-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02009", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02009", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02010", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02010-keymap-item-Object-Mode-EMPTY-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02010.py -- tests/files/web/generated/M21-GAP-02010-keymap-item-Object-Mode-EMPTY-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02010", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02010", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02011", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02011-keymap-item-Object-Mode-EMPTY-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02011.py -- tests/files/web/generated/M21-GAP-02011-keymap-item-Object-Mode-EMPTY-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02011", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02011", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02012", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02012-keymap-item-Object-Mode-EMPTY-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02012.py -- tests/files/web/generated/M21-GAP-02012-keymap-item-Object-Mode-EMPTY-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02012", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02012", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02013", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02013-keymap-item-Object-Mode-EMPTY-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02013.py -- tests/files/web/generated/M21-GAP-02013-keymap-item-Object-Mode-EMPTY-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02013", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02013", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02014", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02014-keymap-item-Object-Mode-EMPTY-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02014.py -- tests/files/web/generated/M21-GAP-02014-keymap-item-Object-Mode-EMPTY-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02014", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02014", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02015", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02015-keymap-item-Object-Mode-EMPTY-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02015.py -- tests/files/web/generated/M21-GAP-02015-keymap-item-Object-Mode-EMPTY-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02015", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02015", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02016", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02016-keymap-item-Object-Mode-EMPTY-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02016.py -- tests/files/web/generated/M21-GAP-02016-keymap-item-Object-Mode-EMPTY-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02016", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02016", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02017", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02017-keymap-item-Object-Mode-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02017.py -- tests/files/web/generated/M21-GAP-02017-keymap-item-Object-Mode-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02017", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02017", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02018", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02018-keymap-item-Object-Mode-EMPTY-WINDOW-50.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02018.py -- tests/files/web/generated/M21-GAP-02018-keymap-item-Object-Mode-EMPTY-WINDOW-50.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02018", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02018", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02019", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02019-keymap-item-Object-Mode-EMPTY-WINDOW-51.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02019.py -- tests/files/web/generated/M21-GAP-02019-keymap-item-Object-Mode-EMPTY-WINDOW-51.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02019", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02019", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02020", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:52", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02020-keymap-item-Object-Mode-EMPTY-WINDOW-52.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02020.py -- tests/files/web/generated/M21-GAP-02020-keymap-item-Object-Mode-EMPTY-WINDOW-52.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02020", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02020", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02021", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:53", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02021-keymap-item-Object-Mode-EMPTY-WINDOW-53.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02021.py -- tests/files/web/generated/M21-GAP-02021-keymap-item-Object-Mode-EMPTY-WINDOW-53.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02021", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02021", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02022", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:54", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02022-keymap-item-Object-Mode-EMPTY-WINDOW-54.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02022.py -- tests/files/web/generated/M21-GAP-02022-keymap-item-Object-Mode-EMPTY-WINDOW-54.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02022", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02022", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02023", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:55", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02023-keymap-item-Object-Mode-EMPTY-WINDOW-55.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02023.py -- tests/files/web/generated/M21-GAP-02023-keymap-item-Object-Mode-EMPTY-WINDOW-55.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02023", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02023", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02024", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:56", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02024-keymap-item-Object-Mode-EMPTY-WINDOW-56.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02024.py -- tests/files/web/generated/M21-GAP-02024-keymap-item-Object-Mode-EMPTY-WINDOW-56.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02024", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02024", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02025", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:57", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02025-keymap-item-Object-Mode-EMPTY-WINDOW-57.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02025.py -- tests/files/web/generated/M21-GAP-02025-keymap-item-Object-Mode-EMPTY-WINDOW-57.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02025", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02025", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02026", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:58", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02026-keymap-item-Object-Mode-EMPTY-WINDOW-58.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02026.py -- tests/files/web/generated/M21-GAP-02026-keymap-item-Object-Mode-EMPTY-WINDOW-58.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02026", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02026", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02027", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02027-keymap-item-Object-Mode-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02027.py -- tests/files/web/generated/M21-GAP-02027-keymap-item-Object-Mode-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02027", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02027", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02028", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02028-keymap-item-Object-Mode-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02028.py -- tests/files/web/generated/M21-GAP-02028-keymap-item-Object-Mode-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02028", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02028", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02029", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02029-keymap-item-Object-Mode-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02029.py -- tests/files/web/generated/M21-GAP-02029-keymap-item-Object-Mode-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02029", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02029", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02030", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02030-keymap-item-Object-Mode-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02030.py -- tests/files/web/generated/M21-GAP-02030-keymap-item-Object-Mode-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02030", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02030", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02031", + "gapId": "keymap-item:Object Non-modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02031-keymap-item-Object-Non-modal-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02031.py -- tests/files/web/generated/M21-GAP-02031-keymap-item-Object-Non-modal-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02031", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02031", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02032", + "gapId": "keymap-item:Object Non-modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02032-keymap-item-Object-Non-modal-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02032.py -- tests/files/web/generated/M21-GAP-02032-keymap-item-Object-Non-modal-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02032", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02032", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02033", + "gapId": "keymap-item:Object Non-modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02033-keymap-item-Object-Non-modal-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02033.py -- tests/files/web/generated/M21-GAP-02033-keymap-item-Object-Non-modal-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02033", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02033", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02034", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02034-keymap-item-Outliner-OUTLINER-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02034.py -- tests/files/web/generated/M21-GAP-02034-keymap-item-Outliner-OUTLINER-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02034", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02034", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02035", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02035-keymap-item-Outliner-OUTLINER-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02035.py -- tests/files/web/generated/M21-GAP-02035-keymap-item-Outliner-OUTLINER-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02035", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02035", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02036", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02036-keymap-item-Outliner-OUTLINER-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02036.py -- tests/files/web/generated/M21-GAP-02036-keymap-item-Outliner-OUTLINER-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02036", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02036", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02037", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:100", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02037-keymap-item-Outliner-OUTLINER-WINDOW-100.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02037.py -- tests/files/web/generated/M21-GAP-02037-keymap-item-Outliner-OUTLINER-WINDOW-100.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02037", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02037", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02038", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:101", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02038-keymap-item-Outliner-OUTLINER-WINDOW-101.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02038.py -- tests/files/web/generated/M21-GAP-02038-keymap-item-Outliner-OUTLINER-WINDOW-101.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02038", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02038", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02039", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:102", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02039-keymap-item-Outliner-OUTLINER-WINDOW-102.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02039.py -- tests/files/web/generated/M21-GAP-02039-keymap-item-Outliner-OUTLINER-WINDOW-102.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02039", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02039", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02040", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02040-keymap-item-Outliner-OUTLINER-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02040.py -- tests/files/web/generated/M21-GAP-02040-keymap-item-Outliner-OUTLINER-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02040", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02040", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02041", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02041-keymap-item-Outliner-OUTLINER-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02041.py -- tests/files/web/generated/M21-GAP-02041-keymap-item-Outliner-OUTLINER-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02041", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02041", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02042", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02042-keymap-item-Outliner-OUTLINER-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02042.py -- tests/files/web/generated/M21-GAP-02042-keymap-item-Outliner-OUTLINER-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02042", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02042", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02043", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02043-keymap-item-Outliner-OUTLINER-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02043.py -- tests/files/web/generated/M21-GAP-02043-keymap-item-Outliner-OUTLINER-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02043", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02043", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02044", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02044-keymap-item-Outliner-OUTLINER-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02044.py -- tests/files/web/generated/M21-GAP-02044-keymap-item-Outliner-OUTLINER-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02044", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02044", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02045", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02045-keymap-item-Outliner-OUTLINER-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02045.py -- tests/files/web/generated/M21-GAP-02045-keymap-item-Outliner-OUTLINER-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02045", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02045", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02046", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02046-keymap-item-Outliner-OUTLINER-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02046.py -- tests/files/web/generated/M21-GAP-02046-keymap-item-Outliner-OUTLINER-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02046", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02046", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02047", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02047-keymap-item-Outliner-OUTLINER-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02047.py -- tests/files/web/generated/M21-GAP-02047-keymap-item-Outliner-OUTLINER-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02047", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02047", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02048", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02048-keymap-item-Outliner-OUTLINER-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02048.py -- tests/files/web/generated/M21-GAP-02048-keymap-item-Outliner-OUTLINER-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02048", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02048", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02049", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02049-keymap-item-Outliner-OUTLINER-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02049.py -- tests/files/web/generated/M21-GAP-02049-keymap-item-Outliner-OUTLINER-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02049", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02049", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02050", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02050-keymap-item-Outliner-OUTLINER-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02050.py -- tests/files/web/generated/M21-GAP-02050-keymap-item-Outliner-OUTLINER-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02050", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02050", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02051", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02051-keymap-item-Outliner-OUTLINER-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02051.py -- tests/files/web/generated/M21-GAP-02051-keymap-item-Outliner-OUTLINER-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02051", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02051", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02052", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02052-keymap-item-Outliner-OUTLINER-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02052.py -- tests/files/web/generated/M21-GAP-02052-keymap-item-Outliner-OUTLINER-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02052", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02052", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02053", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02053-keymap-item-Outliner-OUTLINER-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02053.py -- tests/files/web/generated/M21-GAP-02053-keymap-item-Outliner-OUTLINER-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02053", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02053", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02054", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02054-keymap-item-Outliner-OUTLINER-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02054.py -- tests/files/web/generated/M21-GAP-02054-keymap-item-Outliner-OUTLINER-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02054", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02054", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02055", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02055-keymap-item-Outliner-OUTLINER-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02055.py -- tests/files/web/generated/M21-GAP-02055-keymap-item-Outliner-OUTLINER-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02055", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02055", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02056", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02056-keymap-item-Outliner-OUTLINER-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02056.py -- tests/files/web/generated/M21-GAP-02056-keymap-item-Outliner-OUTLINER-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02056", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02056", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02057", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02057-keymap-item-Outliner-OUTLINER-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02057.py -- tests/files/web/generated/M21-GAP-02057-keymap-item-Outliner-OUTLINER-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02057", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02057", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02058", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02058-keymap-item-Outliner-OUTLINER-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02058.py -- tests/files/web/generated/M21-GAP-02058-keymap-item-Outliner-OUTLINER-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02058", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02058", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02059", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02059-keymap-item-Outliner-OUTLINER-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02059.py -- tests/files/web/generated/M21-GAP-02059-keymap-item-Outliner-OUTLINER-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02059", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02059", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02060", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02060-keymap-item-Outliner-OUTLINER-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02060.py -- tests/files/web/generated/M21-GAP-02060-keymap-item-Outliner-OUTLINER-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02060", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02060", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02061", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02061-keymap-item-Outliner-OUTLINER-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02061.py -- tests/files/web/generated/M21-GAP-02061-keymap-item-Outliner-OUTLINER-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02061", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02061", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02062", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02062-keymap-item-Outliner-OUTLINER-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02062.py -- tests/files/web/generated/M21-GAP-02062-keymap-item-Outliner-OUTLINER-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02062", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02062", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02063", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02063-keymap-item-Outliner-OUTLINER-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02063.py -- tests/files/web/generated/M21-GAP-02063-keymap-item-Outliner-OUTLINER-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02063", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02063", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02064", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02064-keymap-item-Outliner-OUTLINER-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02064.py -- tests/files/web/generated/M21-GAP-02064-keymap-item-Outliner-OUTLINER-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02064", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02064", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02065", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02065-keymap-item-Outliner-OUTLINER-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02065.py -- tests/files/web/generated/M21-GAP-02065-keymap-item-Outliner-OUTLINER-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02065", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02065", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02066", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02066-keymap-item-Outliner-OUTLINER-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02066.py -- tests/files/web/generated/M21-GAP-02066-keymap-item-Outliner-OUTLINER-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02066", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02066", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02067", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02067-keymap-item-Outliner-OUTLINER-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02067.py -- tests/files/web/generated/M21-GAP-02067-keymap-item-Outliner-OUTLINER-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02067", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02067", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02068", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02068-keymap-item-Outliner-OUTLINER-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02068.py -- tests/files/web/generated/M21-GAP-02068-keymap-item-Outliner-OUTLINER-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02068", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02068", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02069", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02069-keymap-item-Outliner-OUTLINER-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02069.py -- tests/files/web/generated/M21-GAP-02069-keymap-item-Outliner-OUTLINER-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02069", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02069", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02070", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02070-keymap-item-Outliner-OUTLINER-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02070.py -- tests/files/web/generated/M21-GAP-02070-keymap-item-Outliner-OUTLINER-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02070", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02070", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02071", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02071-keymap-item-Outliner-OUTLINER-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02071.py -- tests/files/web/generated/M21-GAP-02071-keymap-item-Outliner-OUTLINER-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02071", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02071", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02072", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02072-keymap-item-Outliner-OUTLINER-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02072.py -- tests/files/web/generated/M21-GAP-02072-keymap-item-Outliner-OUTLINER-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02072", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02072", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02073", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02073-keymap-item-Outliner-OUTLINER-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02073.py -- tests/files/web/generated/M21-GAP-02073-keymap-item-Outliner-OUTLINER-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02073", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02073", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02074", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02074-keymap-item-Outliner-OUTLINER-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02074.py -- tests/files/web/generated/M21-GAP-02074-keymap-item-Outliner-OUTLINER-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02074", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02074", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02075", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02075-keymap-item-Outliner-OUTLINER-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02075.py -- tests/files/web/generated/M21-GAP-02075-keymap-item-Outliner-OUTLINER-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02075", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02075", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02076", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02076-keymap-item-Outliner-OUTLINER-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02076.py -- tests/files/web/generated/M21-GAP-02076-keymap-item-Outliner-OUTLINER-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02076", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02076", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02077", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02077-keymap-item-Outliner-OUTLINER-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02077.py -- tests/files/web/generated/M21-GAP-02077-keymap-item-Outliner-OUTLINER-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02077", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02077", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02078", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02078-keymap-item-Outliner-OUTLINER-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02078.py -- tests/files/web/generated/M21-GAP-02078-keymap-item-Outliner-OUTLINER-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02078", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02078", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02079", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02079-keymap-item-Outliner-OUTLINER-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02079.py -- tests/files/web/generated/M21-GAP-02079-keymap-item-Outliner-OUTLINER-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02079", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02079", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02080", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02080-keymap-item-Outliner-OUTLINER-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02080.py -- tests/files/web/generated/M21-GAP-02080-keymap-item-Outliner-OUTLINER-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02080", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02080", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02081", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02081-keymap-item-Outliner-OUTLINER-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02081.py -- tests/files/web/generated/M21-GAP-02081-keymap-item-Outliner-OUTLINER-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02081", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02081", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02082", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02082-keymap-item-Outliner-OUTLINER-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02082.py -- tests/files/web/generated/M21-GAP-02082-keymap-item-Outliner-OUTLINER-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02082", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02082", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02083", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:50", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02083-keymap-item-Outliner-OUTLINER-WINDOW-50.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02083.py -- tests/files/web/generated/M21-GAP-02083-keymap-item-Outliner-OUTLINER-WINDOW-50.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02083", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02083", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02084", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:51", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02084-keymap-item-Outliner-OUTLINER-WINDOW-51.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02084.py -- tests/files/web/generated/M21-GAP-02084-keymap-item-Outliner-OUTLINER-WINDOW-51.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02084", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02084", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02085", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:52", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02085-keymap-item-Outliner-OUTLINER-WINDOW-52.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02085.py -- tests/files/web/generated/M21-GAP-02085-keymap-item-Outliner-OUTLINER-WINDOW-52.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02085", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02085", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02086", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:53", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02086-keymap-item-Outliner-OUTLINER-WINDOW-53.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02086.py -- tests/files/web/generated/M21-GAP-02086-keymap-item-Outliner-OUTLINER-WINDOW-53.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02086", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02086", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02087", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:54", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02087-keymap-item-Outliner-OUTLINER-WINDOW-54.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02087.py -- tests/files/web/generated/M21-GAP-02087-keymap-item-Outliner-OUTLINER-WINDOW-54.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02087", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02087", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02088", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:55", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02088-keymap-item-Outliner-OUTLINER-WINDOW-55.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02088.py -- tests/files/web/generated/M21-GAP-02088-keymap-item-Outliner-OUTLINER-WINDOW-55.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02088", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02088", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02089", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:56", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02089-keymap-item-Outliner-OUTLINER-WINDOW-56.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02089.py -- tests/files/web/generated/M21-GAP-02089-keymap-item-Outliner-OUTLINER-WINDOW-56.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02089", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02089", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02090", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:57", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02090-keymap-item-Outliner-OUTLINER-WINDOW-57.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02090.py -- tests/files/web/generated/M21-GAP-02090-keymap-item-Outliner-OUTLINER-WINDOW-57.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02090", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02090", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02091", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:58", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02091-keymap-item-Outliner-OUTLINER-WINDOW-58.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02091.py -- tests/files/web/generated/M21-GAP-02091-keymap-item-Outliner-OUTLINER-WINDOW-58.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02091", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02091", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02092", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:59", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02092-keymap-item-Outliner-OUTLINER-WINDOW-59.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02092.py -- tests/files/web/generated/M21-GAP-02092-keymap-item-Outliner-OUTLINER-WINDOW-59.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02092", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02092", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02093", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02093-keymap-item-Outliner-OUTLINER-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02093.py -- tests/files/web/generated/M21-GAP-02093-keymap-item-Outliner-OUTLINER-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02093", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02093", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02094", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:60", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02094-keymap-item-Outliner-OUTLINER-WINDOW-60.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02094.py -- tests/files/web/generated/M21-GAP-02094-keymap-item-Outliner-OUTLINER-WINDOW-60.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02094", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02094", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02095", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:61", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02095-keymap-item-Outliner-OUTLINER-WINDOW-61.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02095.py -- tests/files/web/generated/M21-GAP-02095-keymap-item-Outliner-OUTLINER-WINDOW-61.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02095", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02095", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02096", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:62", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02096-keymap-item-Outliner-OUTLINER-WINDOW-62.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02096.py -- tests/files/web/generated/M21-GAP-02096-keymap-item-Outliner-OUTLINER-WINDOW-62.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02096", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02096", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02097", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:63", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02097-keymap-item-Outliner-OUTLINER-WINDOW-63.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02097.py -- tests/files/web/generated/M21-GAP-02097-keymap-item-Outliner-OUTLINER-WINDOW-63.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02097", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02097", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02098", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:64", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02098-keymap-item-Outliner-OUTLINER-WINDOW-64.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02098.py -- tests/files/web/generated/M21-GAP-02098-keymap-item-Outliner-OUTLINER-WINDOW-64.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02098", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02098", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02099", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:65", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02099-keymap-item-Outliner-OUTLINER-WINDOW-65.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02099.py -- tests/files/web/generated/M21-GAP-02099-keymap-item-Outliner-OUTLINER-WINDOW-65.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02099", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02099", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02100", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:66", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02100-keymap-item-Outliner-OUTLINER-WINDOW-66.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02100.py -- tests/files/web/generated/M21-GAP-02100-keymap-item-Outliner-OUTLINER-WINDOW-66.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02100", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02100", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02101", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:67", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02101-keymap-item-Outliner-OUTLINER-WINDOW-67.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02101.py -- tests/files/web/generated/M21-GAP-02101-keymap-item-Outliner-OUTLINER-WINDOW-67.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02101", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02101", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02102", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:68", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02102-keymap-item-Outliner-OUTLINER-WINDOW-68.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02102.py -- tests/files/web/generated/M21-GAP-02102-keymap-item-Outliner-OUTLINER-WINDOW-68.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02102", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02102", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02103", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:69", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02103-keymap-item-Outliner-OUTLINER-WINDOW-69.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02103.py -- tests/files/web/generated/M21-GAP-02103-keymap-item-Outliner-OUTLINER-WINDOW-69.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02103", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02103", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02104", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02104-keymap-item-Outliner-OUTLINER-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02104.py -- tests/files/web/generated/M21-GAP-02104-keymap-item-Outliner-OUTLINER-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02104", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02104", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02105", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:70", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02105-keymap-item-Outliner-OUTLINER-WINDOW-70.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02105.py -- tests/files/web/generated/M21-GAP-02105-keymap-item-Outliner-OUTLINER-WINDOW-70.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02105", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02105", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02106", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:71", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02106-keymap-item-Outliner-OUTLINER-WINDOW-71.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02106.py -- tests/files/web/generated/M21-GAP-02106-keymap-item-Outliner-OUTLINER-WINDOW-71.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02106", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02106", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02107", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:72", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02107-keymap-item-Outliner-OUTLINER-WINDOW-72.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02107.py -- tests/files/web/generated/M21-GAP-02107-keymap-item-Outliner-OUTLINER-WINDOW-72.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02107", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02107", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02108", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:73", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02108-keymap-item-Outliner-OUTLINER-WINDOW-73.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02108.py -- tests/files/web/generated/M21-GAP-02108-keymap-item-Outliner-OUTLINER-WINDOW-73.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02108", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02108", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02109", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:74", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02109-keymap-item-Outliner-OUTLINER-WINDOW-74.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02109.py -- tests/files/web/generated/M21-GAP-02109-keymap-item-Outliner-OUTLINER-WINDOW-74.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02109", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02109", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02110", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:75", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02110-keymap-item-Outliner-OUTLINER-WINDOW-75.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02110.py -- tests/files/web/generated/M21-GAP-02110-keymap-item-Outliner-OUTLINER-WINDOW-75.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02110", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02110", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02111", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:76", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02111-keymap-item-Outliner-OUTLINER-WINDOW-76.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02111.py -- tests/files/web/generated/M21-GAP-02111-keymap-item-Outliner-OUTLINER-WINDOW-76.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02111", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02111", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02112", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:77", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02112-keymap-item-Outliner-OUTLINER-WINDOW-77.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02112.py -- tests/files/web/generated/M21-GAP-02112-keymap-item-Outliner-OUTLINER-WINDOW-77.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02112", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02112", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02113", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:78", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02113-keymap-item-Outliner-OUTLINER-WINDOW-78.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02113.py -- tests/files/web/generated/M21-GAP-02113-keymap-item-Outliner-OUTLINER-WINDOW-78.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02113", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02113", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02114", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:79", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02114-keymap-item-Outliner-OUTLINER-WINDOW-79.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02114.py -- tests/files/web/generated/M21-GAP-02114-keymap-item-Outliner-OUTLINER-WINDOW-79.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02114", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02114", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02115", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02115-keymap-item-Outliner-OUTLINER-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02115.py -- tests/files/web/generated/M21-GAP-02115-keymap-item-Outliner-OUTLINER-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02115", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02115", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02116", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:80", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02116-keymap-item-Outliner-OUTLINER-WINDOW-80.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02116.py -- tests/files/web/generated/M21-GAP-02116-keymap-item-Outliner-OUTLINER-WINDOW-80.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02116", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02116", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02117", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:81", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02117-keymap-item-Outliner-OUTLINER-WINDOW-81.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02117.py -- tests/files/web/generated/M21-GAP-02117-keymap-item-Outliner-OUTLINER-WINDOW-81.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02117", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02117", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02118", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:82", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02118-keymap-item-Outliner-OUTLINER-WINDOW-82.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02118.py -- tests/files/web/generated/M21-GAP-02118-keymap-item-Outliner-OUTLINER-WINDOW-82.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02118", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02118", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02119", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:83", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02119-keymap-item-Outliner-OUTLINER-WINDOW-83.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02119.py -- tests/files/web/generated/M21-GAP-02119-keymap-item-Outliner-OUTLINER-WINDOW-83.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02119", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02119", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02120", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:84", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02120-keymap-item-Outliner-OUTLINER-WINDOW-84.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02120.py -- tests/files/web/generated/M21-GAP-02120-keymap-item-Outliner-OUTLINER-WINDOW-84.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02120", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02120", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02121", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:85", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02121-keymap-item-Outliner-OUTLINER-WINDOW-85.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02121.py -- tests/files/web/generated/M21-GAP-02121-keymap-item-Outliner-OUTLINER-WINDOW-85.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02121", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02121", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02122", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:86", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02122-keymap-item-Outliner-OUTLINER-WINDOW-86.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02122.py -- tests/files/web/generated/M21-GAP-02122-keymap-item-Outliner-OUTLINER-WINDOW-86.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02122", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02122", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02123", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:87", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02123-keymap-item-Outliner-OUTLINER-WINDOW-87.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02123.py -- tests/files/web/generated/M21-GAP-02123-keymap-item-Outliner-OUTLINER-WINDOW-87.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02123", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02123", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02124", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:88", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02124-keymap-item-Outliner-OUTLINER-WINDOW-88.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02124.py -- tests/files/web/generated/M21-GAP-02124-keymap-item-Outliner-OUTLINER-WINDOW-88.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02124", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02124", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02125", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:89", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02125-keymap-item-Outliner-OUTLINER-WINDOW-89.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02125.py -- tests/files/web/generated/M21-GAP-02125-keymap-item-Outliner-OUTLINER-WINDOW-89.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02125", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02125", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02126", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02126-keymap-item-Outliner-OUTLINER-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02126.py -- tests/files/web/generated/M21-GAP-02126-keymap-item-Outliner-OUTLINER-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02126", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02126", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02127", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:90", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02127-keymap-item-Outliner-OUTLINER-WINDOW-90.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02127.py -- tests/files/web/generated/M21-GAP-02127-keymap-item-Outliner-OUTLINER-WINDOW-90.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02127", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02127", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02128", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:91", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02128-keymap-item-Outliner-OUTLINER-WINDOW-91.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02128.py -- tests/files/web/generated/M21-GAP-02128-keymap-item-Outliner-OUTLINER-WINDOW-91.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02128", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02128", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02129", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:92", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02129-keymap-item-Outliner-OUTLINER-WINDOW-92.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02129.py -- tests/files/web/generated/M21-GAP-02129-keymap-item-Outliner-OUTLINER-WINDOW-92.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02129", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02129", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02130", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:93", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02130-keymap-item-Outliner-OUTLINER-WINDOW-93.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02130.py -- tests/files/web/generated/M21-GAP-02130-keymap-item-Outliner-OUTLINER-WINDOW-93.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02130", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02130", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02131", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:94", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02131-keymap-item-Outliner-OUTLINER-WINDOW-94.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02131.py -- tests/files/web/generated/M21-GAP-02131-keymap-item-Outliner-OUTLINER-WINDOW-94.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02131", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02131", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02132", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:95", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02132-keymap-item-Outliner-OUTLINER-WINDOW-95.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02132.py -- tests/files/web/generated/M21-GAP-02132-keymap-item-Outliner-OUTLINER-WINDOW-95.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02132", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02132", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02133", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:96", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02133-keymap-item-Outliner-OUTLINER-WINDOW-96.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02133.py -- tests/files/web/generated/M21-GAP-02133-keymap-item-Outliner-OUTLINER-WINDOW-96.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02133", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02133", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02134", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:97", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02134-keymap-item-Outliner-OUTLINER-WINDOW-97.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02134.py -- tests/files/web/generated/M21-GAP-02134-keymap-item-Outliner-OUTLINER-WINDOW-97.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02134", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02134", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02135", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:98", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02135-keymap-item-Outliner-OUTLINER-WINDOW-98.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02135.py -- tests/files/web/generated/M21-GAP-02135-keymap-item-Outliner-OUTLINER-WINDOW-98.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02135", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02135", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02136", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:99", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02136-keymap-item-Outliner-OUTLINER-WINDOW-99.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02136.py -- tests/files/web/generated/M21-GAP-02136-keymap-item-Outliner-OUTLINER-WINDOW-99.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02136", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02136", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02137", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02137-keymap-item-Paint-Curve-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02137.py -- tests/files/web/generated/M21-GAP-02137-keymap-item-Paint-Curve-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02137", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02137", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02138", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02138-keymap-item-Paint-Curve-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02138.py -- tests/files/web/generated/M21-GAP-02138-keymap-item-Paint-Curve-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02138", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02138", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02139", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02139-keymap-item-Paint-Curve-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02139.py -- tests/files/web/generated/M21-GAP-02139-keymap-item-Paint-Curve-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02139", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02139", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02140", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02140-keymap-item-Paint-Curve-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02140.py -- tests/files/web/generated/M21-GAP-02140-keymap-item-Paint-Curve-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02140", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02140", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02141", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02141-keymap-item-Paint-Curve-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02141.py -- tests/files/web/generated/M21-GAP-02141-keymap-item-Paint-Curve-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02141", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02141", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02142", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02142-keymap-item-Paint-Curve-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02142.py -- tests/files/web/generated/M21-GAP-02142-keymap-item-Paint-Curve-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02142", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02142", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02143", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02143-keymap-item-Paint-Curve-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02143.py -- tests/files/web/generated/M21-GAP-02143-keymap-item-Paint-Curve-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02143", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02143", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02144", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02144-keymap-item-Paint-Curve-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02144.py -- tests/files/web/generated/M21-GAP-02144-keymap-item-Paint-Curve-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02144", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02144", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02145", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02145-keymap-item-Paint-Curve-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02145.py -- tests/files/web/generated/M21-GAP-02145-keymap-item-Paint-Curve-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02145", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02145", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02146", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02146-keymap-item-Paint-Curve-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02146.py -- tests/files/web/generated/M21-GAP-02146-keymap-item-Paint-Curve-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02146", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02146", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02147", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02147-keymap-item-Paint-Curve-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02147.py -- tests/files/web/generated/M21-GAP-02147-keymap-item-Paint-Curve-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02147", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02147", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02148", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02148-keymap-item-Paint-Curve-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02148.py -- tests/files/web/generated/M21-GAP-02148-keymap-item-Paint-Curve-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02148", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02148", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02149", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02149-keymap-item-Paint-Curve-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02149.py -- tests/files/web/generated/M21-GAP-02149-keymap-item-Paint-Curve-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02149", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02149", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02150", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02150-keymap-item-Paint-Curve-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02150.py -- tests/files/web/generated/M21-GAP-02150-keymap-item-Paint-Curve-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02150", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02150", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02151", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02151-keymap-item-Paint-Curve-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02151.py -- tests/files/web/generated/M21-GAP-02151-keymap-item-Paint-Curve-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02151", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02151", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02152", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02152-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02152.py -- tests/files/web/generated/M21-GAP-02152-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02152", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02152", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02153", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02153-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02153.py -- tests/files/web/generated/M21-GAP-02153-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02153", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02153", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02154", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02154-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02154.py -- tests/files/web/generated/M21-GAP-02154-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02154", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02154", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02155", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02155-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02155.py -- tests/files/web/generated/M21-GAP-02155-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02155", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02155", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02156", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02156-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02156.py -- tests/files/web/generated/M21-GAP-02156-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02156", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02156", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02157", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02157-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02157.py -- tests/files/web/generated/M21-GAP-02157-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02157", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02157", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02158", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02158-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02158.py -- tests/files/web/generated/M21-GAP-02158-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02158", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02158", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02159", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02159-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02159.py -- tests/files/web/generated/M21-GAP-02159-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02159", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02159", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02160", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02160-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02160.py -- tests/files/web/generated/M21-GAP-02160-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02160", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02160", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02161", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02161-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02161.py -- tests/files/web/generated/M21-GAP-02161-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02161", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02161", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02162", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02162-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02162.py -- tests/files/web/generated/M21-GAP-02162-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02162", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02162", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02163", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02163-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02163.py -- tests/files/web/generated/M21-GAP-02163-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02163", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02163", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02164", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02164-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02164.py -- tests/files/web/generated/M21-GAP-02164-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02164", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02164", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02165", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02165-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02165.py -- tests/files/web/generated/M21-GAP-02165-keymap-item-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02165", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02165", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02166", + "gapId": "keymap-item:Paint Stroke Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02166-keymap-item-Paint-Stroke-Modal-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02166.py -- tests/files/web/generated/M21-GAP-02166-keymap-item-Paint-Stroke-Modal-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02166", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02166", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02167", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02167-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02167.py -- tests/files/web/generated/M21-GAP-02167-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02167", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02167", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02168", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02168-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02168.py -- tests/files/web/generated/M21-GAP-02168-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02168", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02168", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02169", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02169-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02169.py -- tests/files/web/generated/M21-GAP-02169-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02169", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02169", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02170", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02170-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02170.py -- tests/files/web/generated/M21-GAP-02170-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02170", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02170", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02171", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02171-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02171.py -- tests/files/web/generated/M21-GAP-02171-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02171", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02171", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02172", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02172-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02172.py -- tests/files/web/generated/M21-GAP-02172-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02172", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02172", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02173", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02173-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02173.py -- tests/files/web/generated/M21-GAP-02173-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02173", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02173", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02174", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02174-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02174.py -- tests/files/web/generated/M21-GAP-02174-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02174", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02174", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02175", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02175-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02175.py -- tests/files/web/generated/M21-GAP-02175-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02175", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02175", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02176", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02176-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02176.py -- tests/files/web/generated/M21-GAP-02176-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02176", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02176", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02177", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02177-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02177.py -- tests/files/web/generated/M21-GAP-02177-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02177", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02177", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02178", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02178-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02178.py -- tests/files/web/generated/M21-GAP-02178-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02178", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02178", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02179", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02179-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02179.py -- tests/files/web/generated/M21-GAP-02179-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02179", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02179", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02180", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02180-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02180.py -- tests/files/web/generated/M21-GAP-02180-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02180", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02180", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02181", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02181-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02181.py -- tests/files/web/generated/M21-GAP-02181-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02181", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02181", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02182", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02182-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02182.py -- tests/files/web/generated/M21-GAP-02182-keymap-item-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02182", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02182", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02183", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02183-keymap-item-Particle-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02183.py -- tests/files/web/generated/M21-GAP-02183-keymap-item-Particle-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02183", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02183", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02184", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02184-keymap-item-Particle-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02184.py -- tests/files/web/generated/M21-GAP-02184-keymap-item-Particle-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02184", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02184", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02185", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02185-keymap-item-Particle-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02185.py -- tests/files/web/generated/M21-GAP-02185-keymap-item-Particle-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02185", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02185", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02186", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02186-keymap-item-Particle-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02186.py -- tests/files/web/generated/M21-GAP-02186-keymap-item-Particle-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02186", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02186", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02187", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02187-keymap-item-Particle-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02187.py -- tests/files/web/generated/M21-GAP-02187-keymap-item-Particle-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02187", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02187", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02188", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02188-keymap-item-Particle-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02188.py -- tests/files/web/generated/M21-GAP-02188-keymap-item-Particle-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02188", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02188", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02189", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02189-keymap-item-Particle-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02189.py -- tests/files/web/generated/M21-GAP-02189-keymap-item-Particle-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02189", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02189", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02190", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02190-keymap-item-Particle-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02190.py -- tests/files/web/generated/M21-GAP-02190-keymap-item-Particle-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02190", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02190", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02191", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02191-keymap-item-Particle-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02191.py -- tests/files/web/generated/M21-GAP-02191-keymap-item-Particle-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02191", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02191", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02192", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02192-keymap-item-Particle-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02192.py -- tests/files/web/generated/M21-GAP-02192-keymap-item-Particle-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02192", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02192", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02193", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02193-keymap-item-Particle-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02193.py -- tests/files/web/generated/M21-GAP-02193-keymap-item-Particle-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02193", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02193", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02194", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02194-keymap-item-Particle-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02194.py -- tests/files/web/generated/M21-GAP-02194-keymap-item-Particle-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02194", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02194", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02195", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02195-keymap-item-Particle-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02195.py -- tests/files/web/generated/M21-GAP-02195-keymap-item-Particle-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02195", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02195", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02196", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02196-keymap-item-Particle-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02196.py -- tests/files/web/generated/M21-GAP-02196-keymap-item-Particle-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02196", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02196", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02197", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02197-keymap-item-Particle-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02197.py -- tests/files/web/generated/M21-GAP-02197-keymap-item-Particle-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02197", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02197", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02198", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02198-keymap-item-Particle-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02198.py -- tests/files/web/generated/M21-GAP-02198-keymap-item-Particle-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02198", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02198", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02199", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02199-keymap-item-Particle-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02199.py -- tests/files/web/generated/M21-GAP-02199-keymap-item-Particle-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02199", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02199", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02200", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02200-keymap-item-Particle-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02200.py -- tests/files/web/generated/M21-GAP-02200-keymap-item-Particle-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02200", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02200", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02201", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02201-keymap-item-Particle-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02201.py -- tests/files/web/generated/M21-GAP-02201-keymap-item-Particle-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02201", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02201", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02202", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02202-keymap-item-Particle-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02202.py -- tests/files/web/generated/M21-GAP-02202-keymap-item-Particle-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02202", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02202", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02203", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02203-keymap-item-Particle-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02203.py -- tests/files/web/generated/M21-GAP-02203-keymap-item-Particle-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02203", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02203", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02204", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02204-keymap-item-Particle-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02204.py -- tests/files/web/generated/M21-GAP-02204-keymap-item-Particle-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02204", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02204", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02205", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02205-keymap-item-Particle-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02205.py -- tests/files/web/generated/M21-GAP-02205-keymap-item-Particle-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02205", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02205", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02206", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02206-keymap-item-Particle-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02206.py -- tests/files/web/generated/M21-GAP-02206-keymap-item-Particle-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02206", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02206", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02207", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02207-keymap-item-Particle-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02207.py -- tests/files/web/generated/M21-GAP-02207-keymap-item-Particle-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02207", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02207", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02208", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02208-keymap-item-Particle-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02208.py -- tests/files/web/generated/M21-GAP-02208-keymap-item-Particle-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02208", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02208", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02209", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02209-keymap-item-Particle-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02209.py -- tests/files/web/generated/M21-GAP-02209-keymap-item-Particle-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02209", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02209", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02210", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02210-keymap-item-Particle-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02210.py -- tests/files/web/generated/M21-GAP-02210-keymap-item-Particle-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02210", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02210", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02211", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02211-keymap-item-Particle-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02211.py -- tests/files/web/generated/M21-GAP-02211-keymap-item-Particle-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02211", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02211", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02212", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02212-keymap-item-Particle-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02212.py -- tests/files/web/generated/M21-GAP-02212-keymap-item-Particle-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02212", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02212", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02213", + "gapId": "keymap-item:Pen Tool Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02213-keymap-item-Pen-Tool-Modal-Map-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02213.py -- tests/files/web/generated/M21-GAP-02213-keymap-item-Pen-Tool-Modal-Map-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02213", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02213", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02214", + "gapId": "keymap-item:Pen Tool Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02214-keymap-item-Pen-Tool-Modal-Map-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02214.py -- tests/files/web/generated/M21-GAP-02214-keymap-item-Pen-Tool-Modal-Map-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02214", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02214", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02215", + "gapId": "keymap-item:Pen Tool Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02215-keymap-item-Pen-Tool-Modal-Map-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02215.py -- tests/files/web/generated/M21-GAP-02215-keymap-item-Pen-Tool-Modal-Map-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02215", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02215", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02216", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02216-keymap-item-Point-Cloud-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02216.py -- tests/files/web/generated/M21-GAP-02216-keymap-item-Point-Cloud-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02216", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02216", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02217", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02217-keymap-item-Point-Cloud-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02217.py -- tests/files/web/generated/M21-GAP-02217-keymap-item-Point-Cloud-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02217", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02217", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02218", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02218-keymap-item-Point-Cloud-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02218.py -- tests/files/web/generated/M21-GAP-02218-keymap-item-Point-Cloud-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02218", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02218", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02219", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02219-keymap-item-Point-Cloud-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02219.py -- tests/files/web/generated/M21-GAP-02219-keymap-item-Point-Cloud-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02219", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02219", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02220", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02220-keymap-item-Point-Cloud-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02220.py -- tests/files/web/generated/M21-GAP-02220-keymap-item-Point-Cloud-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02220", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02220", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02221", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02221-keymap-item-Point-Cloud-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02221.py -- tests/files/web/generated/M21-GAP-02221-keymap-item-Point-Cloud-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02221", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02221", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02222", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02222-keymap-item-Point-Cloud-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02222.py -- tests/files/web/generated/M21-GAP-02222-keymap-item-Point-Cloud-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02222", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02222", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02223", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02223-keymap-item-Point-Cloud-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02223.py -- tests/files/web/generated/M21-GAP-02223-keymap-item-Point-Cloud-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02223", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02223", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02224", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02224-keymap-item-Point-Cloud-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02224.py -- tests/files/web/generated/M21-GAP-02224-keymap-item-Point-Cloud-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02224", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02224", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02225", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02225-keymap-item-Point-Cloud-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02225.py -- tests/files/web/generated/M21-GAP-02225-keymap-item-Point-Cloud-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02225", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02225", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02226", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02226-keymap-item-Point-Cloud-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02226.py -- tests/files/web/generated/M21-GAP-02226-keymap-item-Point-Cloud-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02226", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02226", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02227", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02227-keymap-item-Point-Cloud-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02227.py -- tests/files/web/generated/M21-GAP-02227-keymap-item-Point-Cloud-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02227", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02227", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02228", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02228-keymap-item-Point-Cloud-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02228.py -- tests/files/web/generated/M21-GAP-02228-keymap-item-Point-Cloud-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02228", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02228", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02229", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02229-keymap-item-Point-Cloud-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02229.py -- tests/files/web/generated/M21-GAP-02229-keymap-item-Point-Cloud-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02229", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02229", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02230", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02230-keymap-item-Point-Cloud-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02230.py -- tests/files/web/generated/M21-GAP-02230-keymap-item-Point-Cloud-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02230", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02230", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02231", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02231-keymap-item-Point-Cloud-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02231.py -- tests/files/web/generated/M21-GAP-02231-keymap-item-Point-Cloud-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02231", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02231", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02232", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02232-keymap-item-Point-Cloud-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02232.py -- tests/files/web/generated/M21-GAP-02232-keymap-item-Point-Cloud-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02232", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02232", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02233", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02233-keymap-item-Point-Cloud-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02233.py -- tests/files/web/generated/M21-GAP-02233-keymap-item-Point-Cloud-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02233", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02233", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02234", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02234-keymap-item-Pose-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02234.py -- tests/files/web/generated/M21-GAP-02234-keymap-item-Pose-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02234", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02234", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02235", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02235-keymap-item-Pose-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02235.py -- tests/files/web/generated/M21-GAP-02235-keymap-item-Pose-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02235", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02235", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02236", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02236-keymap-item-Pose-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02236.py -- tests/files/web/generated/M21-GAP-02236-keymap-item-Pose-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02236", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02236", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02237", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02237-keymap-item-Pose-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02237.py -- tests/files/web/generated/M21-GAP-02237-keymap-item-Pose-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02237", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02237", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02238", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02238-keymap-item-Pose-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02238.py -- tests/files/web/generated/M21-GAP-02238-keymap-item-Pose-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02238", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02238", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02239", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02239-keymap-item-Pose-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02239.py -- tests/files/web/generated/M21-GAP-02239-keymap-item-Pose-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02239", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02239", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02240", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02240-keymap-item-Pose-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02240.py -- tests/files/web/generated/M21-GAP-02240-keymap-item-Pose-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02240", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02240", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02241", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02241-keymap-item-Pose-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02241.py -- tests/files/web/generated/M21-GAP-02241-keymap-item-Pose-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02241", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02241", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02242", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02242-keymap-item-Pose-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02242.py -- tests/files/web/generated/M21-GAP-02242-keymap-item-Pose-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02242", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02242", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02243", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02243-keymap-item-Pose-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02243.py -- tests/files/web/generated/M21-GAP-02243-keymap-item-Pose-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02243", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02243", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02244", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02244-keymap-item-Pose-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02244.py -- tests/files/web/generated/M21-GAP-02244-keymap-item-Pose-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02244", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02244", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02245", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02245-keymap-item-Pose-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02245.py -- tests/files/web/generated/M21-GAP-02245-keymap-item-Pose-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02245", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02245", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02246", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02246-keymap-item-Pose-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02246.py -- tests/files/web/generated/M21-GAP-02246-keymap-item-Pose-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02246", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02246", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02247", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02247-keymap-item-Pose-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02247.py -- tests/files/web/generated/M21-GAP-02247-keymap-item-Pose-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02247", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02247", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02248", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02248-keymap-item-Pose-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02248.py -- tests/files/web/generated/M21-GAP-02248-keymap-item-Pose-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02248", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02248", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02249", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02249-keymap-item-Pose-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02249.py -- tests/files/web/generated/M21-GAP-02249-keymap-item-Pose-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02249", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02249", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02250", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02250-keymap-item-Pose-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02250.py -- tests/files/web/generated/M21-GAP-02250-keymap-item-Pose-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02250", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02250", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02251", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02251-keymap-item-Pose-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02251.py -- tests/files/web/generated/M21-GAP-02251-keymap-item-Pose-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02251", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02251", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02252", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02252-keymap-item-Pose-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02252.py -- tests/files/web/generated/M21-GAP-02252-keymap-item-Pose-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02252", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02252", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02253", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02253-keymap-item-Pose-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02253.py -- tests/files/web/generated/M21-GAP-02253-keymap-item-Pose-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02253", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02253", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02254", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02254-keymap-item-Pose-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02254.py -- tests/files/web/generated/M21-GAP-02254-keymap-item-Pose-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02254", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02254", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02255", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02255-keymap-item-Pose-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02255.py -- tests/files/web/generated/M21-GAP-02255-keymap-item-Pose-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02255", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02255", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02256", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02256-keymap-item-Pose-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02256.py -- tests/files/web/generated/M21-GAP-02256-keymap-item-Pose-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02256", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02256", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02257", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02257-keymap-item-Pose-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02257.py -- tests/files/web/generated/M21-GAP-02257-keymap-item-Pose-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02257", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02257", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02258", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02258-keymap-item-Pose-EMPTY-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02258.py -- tests/files/web/generated/M21-GAP-02258-keymap-item-Pose-EMPTY-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02258", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02258", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02259", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02259-keymap-item-Pose-EMPTY-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02259.py -- tests/files/web/generated/M21-GAP-02259-keymap-item-Pose-EMPTY-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02259", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02259", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02260", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02260-keymap-item-Pose-EMPTY-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02260.py -- tests/files/web/generated/M21-GAP-02260-keymap-item-Pose-EMPTY-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02260", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02260", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02261", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02261-keymap-item-Pose-EMPTY-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02261.py -- tests/files/web/generated/M21-GAP-02261-keymap-item-Pose-EMPTY-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02261", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02261", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02262", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02262-keymap-item-Pose-EMPTY-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02262.py -- tests/files/web/generated/M21-GAP-02262-keymap-item-Pose-EMPTY-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02262", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02262", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02263", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02263-keymap-item-Pose-EMPTY-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02263.py -- tests/files/web/generated/M21-GAP-02263-keymap-item-Pose-EMPTY-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02263", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02263", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02264", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02264-keymap-item-Pose-EMPTY-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02264.py -- tests/files/web/generated/M21-GAP-02264-keymap-item-Pose-EMPTY-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02264", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02264", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02265", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02265-keymap-item-Pose-EMPTY-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02265.py -- tests/files/web/generated/M21-GAP-02265-keymap-item-Pose-EMPTY-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02265", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02265", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02266", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02266-keymap-item-Pose-EMPTY-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02266.py -- tests/files/web/generated/M21-GAP-02266-keymap-item-Pose-EMPTY-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02266", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02266", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02267", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02267-keymap-item-Pose-EMPTY-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02267.py -- tests/files/web/generated/M21-GAP-02267-keymap-item-Pose-EMPTY-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02267", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02267", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02268", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02268-keymap-item-Pose-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02268.py -- tests/files/web/generated/M21-GAP-02268-keymap-item-Pose-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02268", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02268", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02269", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02269-keymap-item-Pose-EMPTY-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02269.py -- tests/files/web/generated/M21-GAP-02269-keymap-item-Pose-EMPTY-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02269", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02269", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02270", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02270-keymap-item-Pose-EMPTY-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02270.py -- tests/files/web/generated/M21-GAP-02270-keymap-item-Pose-EMPTY-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02270", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02270", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02271", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02271-keymap-item-Pose-EMPTY-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02271.py -- tests/files/web/generated/M21-GAP-02271-keymap-item-Pose-EMPTY-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02271", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02271", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02272", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02272-keymap-item-Pose-EMPTY-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02272.py -- tests/files/web/generated/M21-GAP-02272-keymap-item-Pose-EMPTY-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02272", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02272", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02273", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02273-keymap-item-Pose-EMPTY-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02273.py -- tests/files/web/generated/M21-GAP-02273-keymap-item-Pose-EMPTY-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02273", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02273", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02274", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02274-keymap-item-Pose-EMPTY-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02274.py -- tests/files/web/generated/M21-GAP-02274-keymap-item-Pose-EMPTY-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02274", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02274", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02275", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02275-keymap-item-Pose-EMPTY-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02275.py -- tests/files/web/generated/M21-GAP-02275-keymap-item-Pose-EMPTY-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02275", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02275", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02276", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02276-keymap-item-Pose-EMPTY-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02276.py -- tests/files/web/generated/M21-GAP-02276-keymap-item-Pose-EMPTY-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02276", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02276", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02277", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02277-keymap-item-Pose-EMPTY-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02277.py -- tests/files/web/generated/M21-GAP-02277-keymap-item-Pose-EMPTY-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02277", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02277", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02278", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02278-keymap-item-Pose-EMPTY-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02278.py -- tests/files/web/generated/M21-GAP-02278-keymap-item-Pose-EMPTY-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02278", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02278", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02279", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02279-keymap-item-Pose-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02279.py -- tests/files/web/generated/M21-GAP-02279-keymap-item-Pose-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02279", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02279", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02280", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02280-keymap-item-Pose-EMPTY-WINDOW-50.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02280.py -- tests/files/web/generated/M21-GAP-02280-keymap-item-Pose-EMPTY-WINDOW-50.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02280", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02280", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02281", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02281-keymap-item-Pose-EMPTY-WINDOW-51.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02281.py -- tests/files/web/generated/M21-GAP-02281-keymap-item-Pose-EMPTY-WINDOW-51.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02281", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02281", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02282", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:52", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02282-keymap-item-Pose-EMPTY-WINDOW-52.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02282.py -- tests/files/web/generated/M21-GAP-02282-keymap-item-Pose-EMPTY-WINDOW-52.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02282", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02282", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02283", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02283-keymap-item-Pose-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02283.py -- tests/files/web/generated/M21-GAP-02283-keymap-item-Pose-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02283", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02283", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02284", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02284-keymap-item-Pose-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02284.py -- tests/files/web/generated/M21-GAP-02284-keymap-item-Pose-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02284", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02284", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02285", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02285-keymap-item-Pose-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02285.py -- tests/files/web/generated/M21-GAP-02285-keymap-item-Pose-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02285", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02285", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02286", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02286-keymap-item-Pose-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02286.py -- tests/files/web/generated/M21-GAP-02286-keymap-item-Pose-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02286", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02286", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02287", + "gapId": "keymap-item:Preferences:PREFERENCES:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02287-keymap-item-Preferences-PREFERENCES-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02287.py -- tests/files/web/generated/M21-GAP-02287-keymap-item-Preferences-PREFERENCES-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02287", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02287", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02288", + "gapId": "keymap-item:Preferences:PREFERENCES:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02288-keymap-item-Preferences-PREFERENCES-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02288.py -- tests/files/web/generated/M21-GAP-02288-keymap-item-Preferences-PREFERENCES-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02288", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02288", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02289", + "gapId": "keymap-item:Preferences_nav:PREFERENCES:UI:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02289-keymap-item-Preferences_nav-PREFERENCES-UI-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02289.py -- tests/files/web/generated/M21-GAP-02289-keymap-item-Preferences_nav-PREFERENCES-UI-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02289", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02289", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02290", + "gapId": "keymap-item:Preferences_nav:PREFERENCES:UI:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02290-keymap-item-Preferences_nav-PREFERENCES-UI-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02290.py -- tests/files/web/generated/M21-GAP-02290-keymap-item-Preferences_nav-PREFERENCES-UI-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02290", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02290", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02291", + "gapId": "keymap-item:Preview Tool: Cursor:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02291-keymap-item-Preview-Tool-Cursor-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02291.py -- tests/files/web/generated/M21-GAP-02291-keymap-item-Preview-Tool-Cursor-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02291", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02291", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02292", + "gapId": "keymap-item:Preview Tool: Cursor:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02292-keymap-item-Preview-Tool-Cursor-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02292.py -- tests/files/web/generated/M21-GAP-02292-keymap-item-Preview-Tool-Cursor-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02292", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02292", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02293", + "gapId": "keymap-item:Preview Tool: Move:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02293-keymap-item-Preview-Tool-Move-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02293.py -- tests/files/web/generated/M21-GAP-02293-keymap-item-Preview-Tool-Move-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02293", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02293", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02294", + "gapId": "keymap-item:Preview Tool: Rotate:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02294-keymap-item-Preview-Tool-Rotate-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02294.py -- tests/files/web/generated/M21-GAP-02294-keymap-item-Preview-Tool-Rotate-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02294", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02294", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02295", + "gapId": "keymap-item:Preview Tool: Sample:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02295-keymap-item-Preview-Tool-Sample-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02295.py -- tests/files/web/generated/M21-GAP-02295-keymap-item-Preview-Tool-Sample-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02295", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02295", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02296", + "gapId": "keymap-item:Preview Tool: Scale:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02296-keymap-item-Preview-Tool-Scale-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02296.py -- tests/files/web/generated/M21-GAP-02296-keymap-item-Preview-Tool-Scale-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02296", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02296", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02297", + "gapId": "keymap-item:Preview Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02297-keymap-item-Preview-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02297.py -- tests/files/web/generated/M21-GAP-02297-keymap-item-Preview-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02297", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02297", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02298", + "gapId": "keymap-item:Preview Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02298-keymap-item-Preview-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02298.py -- tests/files/web/generated/M21-GAP-02298-keymap-item-Preview-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02298", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02298", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02299", + "gapId": "keymap-item:Preview Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02299-keymap-item-Preview-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02299.py -- tests/files/web/generated/M21-GAP-02299-keymap-item-Preview-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02299", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02299", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02300", + "gapId": "keymap-item:Preview Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02300-keymap-item-Preview-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02300.py -- tests/files/web/generated/M21-GAP-02300-keymap-item-Preview-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02300", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02300", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02301", + "gapId": "keymap-item:Preview Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02301-keymap-item-Preview-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02301.py -- tests/files/web/generated/M21-GAP-02301-keymap-item-Preview-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02301", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02301", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02302", + "gapId": "keymap-item:Preview Tool: Select Box:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02302-keymap-item-Preview-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02302.py -- tests/files/web/generated/M21-GAP-02302-keymap-item-Preview-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02302", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02302", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02303", + "gapId": "keymap-item:Preview Tool: Select Box:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02303-keymap-item-Preview-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02303.py -- tests/files/web/generated/M21-GAP-02303-keymap-item-Preview-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02303", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02303", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02304", + "gapId": "keymap-item:Preview Tool: Select Box:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02304-keymap-item-Preview-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02304.py -- tests/files/web/generated/M21-GAP-02304-keymap-item-Preview-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02304", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02304", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02305", + "gapId": "keymap-item:Preview Tool: Select Box:SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02305-keymap-item-Preview-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02305.py -- tests/files/web/generated/M21-GAP-02305-keymap-item-Preview-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02305", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02305", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02306", + "gapId": "keymap-item:Preview Tool: Select Box:SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02306-keymap-item-Preview-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02306.py -- tests/files/web/generated/M21-GAP-02306-keymap-item-Preview-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02306", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02306", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02307", + "gapId": "keymap-item:Preview Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02307-keymap-item-Preview-Tool-Select-Circle-fallback-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02307.py -- tests/files/web/generated/M21-GAP-02307-keymap-item-Preview-Tool-Select-Circle-fallback-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02307", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02307", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02308", + "gapId": "keymap-item:Preview Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02308-keymap-item-Preview-Tool-Select-Circle-fallback-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02308.py -- tests/files/web/generated/M21-GAP-02308-keymap-item-Preview-Tool-Select-Circle-fallback-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02308", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02308", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02309", + "gapId": "keymap-item:Preview Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02309-keymap-item-Preview-Tool-Select-Circle-fallback-SEQUENCE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02309.py -- tests/files/web/generated/M21-GAP-02309-keymap-item-Preview-Tool-Select-Circle-fallback-SEQUENCE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02309", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02309", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02310", + "gapId": "keymap-item:Preview Tool: Select Circle:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02310-keymap-item-Preview-Tool-Select-Circle-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02310.py -- tests/files/web/generated/M21-GAP-02310-keymap-item-Preview-Tool-Select-Circle-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02310", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02310", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02311", + "gapId": "keymap-item:Preview Tool: Select Circle:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02311-keymap-item-Preview-Tool-Select-Circle-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02311.py -- tests/files/web/generated/M21-GAP-02311-keymap-item-Preview-Tool-Select-Circle-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02311", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02311", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02312", + "gapId": "keymap-item:Preview Tool: Select Circle:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02312-keymap-item-Preview-Tool-Select-Circle-SEQUENCE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02312.py -- tests/files/web/generated/M21-GAP-02312-keymap-item-Preview-Tool-Select-Circle-SEQUENCE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02312", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02312", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02313", + "gapId": "keymap-item:Preview Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02313-keymap-item-Preview-Tool-Select-Lasso-fallback-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02313.py -- tests/files/web/generated/M21-GAP-02313-keymap-item-Preview-Tool-Select-Lasso-fallback-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02313", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02313", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02314", + "gapId": "keymap-item:Preview Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02314-keymap-item-Preview-Tool-Select-Lasso-fallback-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02314.py -- tests/files/web/generated/M21-GAP-02314-keymap-item-Preview-Tool-Select-Lasso-fallback-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02314", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02314", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02315", + "gapId": "keymap-item:Preview Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02315-keymap-item-Preview-Tool-Select-Lasso-fallback-SEQUENCE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02315.py -- tests/files/web/generated/M21-GAP-02315-keymap-item-Preview-Tool-Select-Lasso-fallback-SEQUENCE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02315", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02315", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02316", + "gapId": "keymap-item:Preview Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02316-keymap-item-Preview-Tool-Select-Lasso-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02316.py -- tests/files/web/generated/M21-GAP-02316-keymap-item-Preview-Tool-Select-Lasso-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02316", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02316", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02317", + "gapId": "keymap-item:Preview Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02317-keymap-item-Preview-Tool-Select-Lasso-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02317.py -- tests/files/web/generated/M21-GAP-02317-keymap-item-Preview-Tool-Select-Lasso-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02317", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02317", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02318", + "gapId": "keymap-item:Preview Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02318-keymap-item-Preview-Tool-Select-Lasso-SEQUENCE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02318.py -- tests/files/web/generated/M21-GAP-02318-keymap-item-Preview-Tool-Select-Lasso-SEQUENCE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02318", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02318", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02319", + "gapId": "keymap-item:Preview Tool: Tweak (fallback):SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02319-keymap-item-Preview-Tool-Tweak-fallback-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02319.py -- tests/files/web/generated/M21-GAP-02319-keymap-item-Preview-Tool-Tweak-fallback-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02319", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02319", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02320", + "gapId": "keymap-item:Preview Tool: Tweak (fallback):SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02320-keymap-item-Preview-Tool-Tweak-fallback-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02320.py -- tests/files/web/generated/M21-GAP-02320-keymap-item-Preview-Tool-Tweak-fallback-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02320", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02320", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02321", + "gapId": "keymap-item:Preview Tool: Tweak (fallback):SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02321-keymap-item-Preview-Tool-Tweak-fallback-SEQUENCE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02321.py -- tests/files/web/generated/M21-GAP-02321-keymap-item-Preview-Tool-Tweak-fallback-SEQUENCE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02321", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02321", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02322", + "gapId": "keymap-item:Preview Tool: Tweak (fallback):SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02322-keymap-item-Preview-Tool-Tweak-fallback-SEQUENCE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02322.py -- tests/files/web/generated/M21-GAP-02322-keymap-item-Preview-Tool-Tweak-fallback-SEQUENCE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02322", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02322", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02323", + "gapId": "keymap-item:Preview Tool: Tweak (fallback):SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02323-keymap-item-Preview-Tool-Tweak-fallback-SEQUENCE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02323.py -- tests/files/web/generated/M21-GAP-02323-keymap-item-Preview-Tool-Tweak-fallback-SEQUENCE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02323", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02323", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02324", + "gapId": "keymap-item:Preview Tool: Tweak:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02324-keymap-item-Preview-Tool-Tweak-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02324.py -- tests/files/web/generated/M21-GAP-02324-keymap-item-Preview-Tool-Tweak-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02324", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02324", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02325", + "gapId": "keymap-item:Preview Tool: Tweak:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02325-keymap-item-Preview-Tool-Tweak-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02325.py -- tests/files/web/generated/M21-GAP-02325-keymap-item-Preview-Tool-Tweak-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02325", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02325", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02326", + "gapId": "keymap-item:Preview Tool: Tweak:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02326-keymap-item-Preview-Tool-Tweak-SEQUENCE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02326.py -- tests/files/web/generated/M21-GAP-02326-keymap-item-Preview-Tool-Tweak-SEQUENCE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02326", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02326", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02327", + "gapId": "keymap-item:Preview Tool: Tweak:SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02327-keymap-item-Preview-Tool-Tweak-SEQUENCE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02327.py -- tests/files/web/generated/M21-GAP-02327-keymap-item-Preview-Tool-Tweak-SEQUENCE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02327", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02327", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02328", + "gapId": "keymap-item:Preview Tool: Tweak:SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02328-keymap-item-Preview-Tool-Tweak-SEQUENCE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02328.py -- tests/files/web/generated/M21-GAP-02328-keymap-item-Preview-Tool-Tweak-SEQUENCE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02328", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02328", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02329", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02329-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02329.py -- tests/files/web/generated/M21-GAP-02329-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02329", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02329", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02330", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02330-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02330.py -- tests/files/web/generated/M21-GAP-02330-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02330", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02330", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02331", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02331-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02331.py -- tests/files/web/generated/M21-GAP-02331-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02331", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02331", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02332", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02332-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02332.py -- tests/files/web/generated/M21-GAP-02332-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02332", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02332", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02333", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02333-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02333.py -- tests/files/web/generated/M21-GAP-02333-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02333", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02333", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02334", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02334-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02334.py -- tests/files/web/generated/M21-GAP-02334-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02334", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02334", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02335", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02335-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02335.py -- tests/files/web/generated/M21-GAP-02335-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02335", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02335", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02336", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02336-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02336.py -- tests/files/web/generated/M21-GAP-02336-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02336", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02336", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02337", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02337-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02337.py -- tests/files/web/generated/M21-GAP-02337-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02337", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02337", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02338", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02338-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02338.py -- tests/files/web/generated/M21-GAP-02338-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02338", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02338", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02339", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02339-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02339.py -- tests/files/web/generated/M21-GAP-02339-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02339", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02339", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02340", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02340-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02340.py -- tests/files/web/generated/M21-GAP-02340-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02340", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02340", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02341", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02341-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02341.py -- tests/files/web/generated/M21-GAP-02341-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02341", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02341", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02342", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02342-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02342.py -- tests/files/web/generated/M21-GAP-02342-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02342", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02342", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02343", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02343-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02343.py -- tests/files/web/generated/M21-GAP-02343-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02343", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02343", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02344", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02344-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02344.py -- tests/files/web/generated/M21-GAP-02344-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02344", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02344", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02345", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02345-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02345.py -- tests/files/web/generated/M21-GAP-02345-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02345", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02345", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02346", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02346-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02346.py -- tests/files/web/generated/M21-GAP-02346-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02346", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02346", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02347", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02347-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02347.py -- tests/files/web/generated/M21-GAP-02347-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02347", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02347", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02348", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02348-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02348.py -- tests/files/web/generated/M21-GAP-02348-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02348", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02348", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02349", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02349-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02349.py -- tests/files/web/generated/M21-GAP-02349-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02349", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02349", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02350", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02350-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02350.py -- tests/files/web/generated/M21-GAP-02350-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02350", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02350", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02351", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02351-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02351.py -- tests/files/web/generated/M21-GAP-02351-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02351", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02351", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02352", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02352-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02352.py -- tests/files/web/generated/M21-GAP-02352-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02352", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02352", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02353", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02353-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02353.py -- tests/files/web/generated/M21-GAP-02353-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02353", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02353", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02354", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02354-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02354.py -- tests/files/web/generated/M21-GAP-02354-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02354", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02354", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02355", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02355-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02355.py -- tests/files/web/generated/M21-GAP-02355-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02355", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02355", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02356", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02356-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02356.py -- tests/files/web/generated/M21-GAP-02356-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02356", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02356", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02357", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02357-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02357.py -- tests/files/web/generated/M21-GAP-02357-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02357", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02357", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02358", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02358-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02358.py -- tests/files/web/generated/M21-GAP-02358-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02358", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02358", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02359", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02359-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02359.py -- tests/files/web/generated/M21-GAP-02359-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02359", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02359", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02360", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02360-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02360.py -- tests/files/web/generated/M21-GAP-02360-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02360", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02360", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02361", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02361-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02361.py -- tests/files/web/generated/M21-GAP-02361-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02361", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02361", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02362", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02362-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02362.py -- tests/files/web/generated/M21-GAP-02362-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02362", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02362", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02363", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02363-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02363.py -- tests/files/web/generated/M21-GAP-02363-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02363", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02363", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02364", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02364-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02364.py -- tests/files/web/generated/M21-GAP-02364-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02364", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02364", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02365", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02365-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02365.py -- tests/files/web/generated/M21-GAP-02365-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02365", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02365", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02366", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02366-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02366.py -- tests/files/web/generated/M21-GAP-02366-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02366", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02366", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02367", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02367-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02367.py -- tests/files/web/generated/M21-GAP-02367-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02367", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02367", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02368", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02368-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02368.py -- tests/files/web/generated/M21-GAP-02368-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02368", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02368", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02369", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02369-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02369.py -- tests/files/web/generated/M21-GAP-02369-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02369", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02369", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02370", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02370-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02370.py -- tests/files/web/generated/M21-GAP-02370-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02370", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02370", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02371", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02371-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02371.py -- tests/files/web/generated/M21-GAP-02371-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02371", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02371", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02372", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02372-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02372.py -- tests/files/web/generated/M21-GAP-02372-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02372", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02372", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02373", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02373-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02373.py -- tests/files/web/generated/M21-GAP-02373-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02373", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02373", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02374", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02374-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02374.py -- tests/files/web/generated/M21-GAP-02374-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02374", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02374", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02375", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02375-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-50.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02375.py -- tests/files/web/generated/M21-GAP-02375-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-50.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02375", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02375", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02376", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:51", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02376-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-51.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02376.py -- tests/files/web/generated/M21-GAP-02376-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-51.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02376", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02376", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02377", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:52", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02377-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-52.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02377.py -- tests/files/web/generated/M21-GAP-02377-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-52.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02377", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02377", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02378", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:53", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02378-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-53.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02378.py -- tests/files/web/generated/M21-GAP-02378-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-53.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02378", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02378", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02379", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:54", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02379-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-54.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02379.py -- tests/files/web/generated/M21-GAP-02379-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-54.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02379", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02379", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02380", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:55", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02380-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-55.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02380.py -- tests/files/web/generated/M21-GAP-02380-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-55.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02380", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02380", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02381", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:56", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02381-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-56.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02381.py -- tests/files/web/generated/M21-GAP-02381-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-56.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02381", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02381", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02382", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:57", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02382-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-57.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02382.py -- tests/files/web/generated/M21-GAP-02382-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-57.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02382", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02382", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02383", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:58", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02383-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-58.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02383.py -- tests/files/web/generated/M21-GAP-02383-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-58.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02383", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02383", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02384", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:59", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02384-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-59.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02384.py -- tests/files/web/generated/M21-GAP-02384-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-59.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02384", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02384", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02385", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02385-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02385.py -- tests/files/web/generated/M21-GAP-02385-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02385", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02385", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02386", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:60", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02386-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-60.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02386.py -- tests/files/web/generated/M21-GAP-02386-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-60.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02386", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02386", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02387", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:61", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02387-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-61.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02387.py -- tests/files/web/generated/M21-GAP-02387-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-61.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02387", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02387", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02388", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:62", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02388-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-62.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02388.py -- tests/files/web/generated/M21-GAP-02388-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-62.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02388", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02388", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02389", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:63", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02389-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-63.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02389.py -- tests/files/web/generated/M21-GAP-02389-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-63.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02389", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02389", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02390", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:64", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02390-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-64.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02390.py -- tests/files/web/generated/M21-GAP-02390-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-64.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02390", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02390", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02391", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:65", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02391-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-65.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02391.py -- tests/files/web/generated/M21-GAP-02391-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-65.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02391", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02391", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02392", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:66", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02392-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-66.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02392.py -- tests/files/web/generated/M21-GAP-02392-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-66.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02392", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02392", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02393", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:67", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02393-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-67.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02393.py -- tests/files/web/generated/M21-GAP-02393-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-67.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02393", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02393", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02394", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:68", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02394-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-68.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02394.py -- tests/files/web/generated/M21-GAP-02394-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-68.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02394", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02394", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02395", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:69", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02395-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-69.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02395.py -- tests/files/web/generated/M21-GAP-02395-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-69.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02395", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02395", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02396", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02396-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02396.py -- tests/files/web/generated/M21-GAP-02396-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02396", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02396", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02397", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:70", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02397-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-70.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02397.py -- tests/files/web/generated/M21-GAP-02397-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-70.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02397", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02397", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02398", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:71", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02398-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-71.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02398.py -- tests/files/web/generated/M21-GAP-02398-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-71.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02398", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02398", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02399", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:72", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02399-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-72.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02399.py -- tests/files/web/generated/M21-GAP-02399-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-72.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02399", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02399", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02400", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:73", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02400-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-73.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02400.py -- tests/files/web/generated/M21-GAP-02400-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-73.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02400", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02400", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02401", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:74", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02401-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-74.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02401.py -- tests/files/web/generated/M21-GAP-02401-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-74.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02401", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02401", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02402", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:75", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02402-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-75.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02402.py -- tests/files/web/generated/M21-GAP-02402-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-75.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02402", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02402", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02403", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:76", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02403-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-76.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02403.py -- tests/files/web/generated/M21-GAP-02403-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-76.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02403", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02403", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02404", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:77", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02404-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-77.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02404.py -- tests/files/web/generated/M21-GAP-02404-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-77.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02404", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02404", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02405", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:78", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02405-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-78.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02405.py -- tests/files/web/generated/M21-GAP-02405-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-78.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02405", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02405", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02406", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:79", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02406-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-79.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02406.py -- tests/files/web/generated/M21-GAP-02406-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-79.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02406", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02406", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02407", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02407-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02407.py -- tests/files/web/generated/M21-GAP-02407-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02407", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02407", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02408", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:80", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02408-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-80.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02408.py -- tests/files/web/generated/M21-GAP-02408-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-80.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02408", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02408", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02409", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:81", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02409-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-81.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02409.py -- tests/files/web/generated/M21-GAP-02409-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-81.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02409", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02409", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02410", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:82", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02410-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-82.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02410.py -- tests/files/web/generated/M21-GAP-02410-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-82.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02410", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02410", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02411", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:83", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02411-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-83.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02411.py -- tests/files/web/generated/M21-GAP-02411-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-83.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02411", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02411", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02412", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:84", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02412-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-84.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02412.py -- tests/files/web/generated/M21-GAP-02412-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-84.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02412", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02412", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02413", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:85", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02413-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-85.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02413.py -- tests/files/web/generated/M21-GAP-02413-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-85.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02413", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02413", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02414", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:86", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02414-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-86.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02414.py -- tests/files/web/generated/M21-GAP-02414-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-86.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02414", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02414", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02415", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:87", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02415-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-87.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02415.py -- tests/files/web/generated/M21-GAP-02415-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-87.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02415", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02415", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02416", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02416-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02416.py -- tests/files/web/generated/M21-GAP-02416-keymap-item-Preview-SEQUENCE_EDITOR-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02416", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02416", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02417", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02417-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02417.py -- tests/files/web/generated/M21-GAP-02417-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02417", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02417", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02418", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02418-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02418.py -- tests/files/web/generated/M21-GAP-02418-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02418", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02418", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02419", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02419-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02419.py -- tests/files/web/generated/M21-GAP-02419-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02419", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02419", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02420", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02420-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02420.py -- tests/files/web/generated/M21-GAP-02420-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02420", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02420", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02421", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02421-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02421.py -- tests/files/web/generated/M21-GAP-02421-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02421", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02421", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02422", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02422-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02422.py -- tests/files/web/generated/M21-GAP-02422-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02422", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02422", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02423", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02423-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02423.py -- tests/files/web/generated/M21-GAP-02423-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02423", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02423", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02424", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02424-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02424.py -- tests/files/web/generated/M21-GAP-02424-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02424", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02424", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02425", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02425-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02425.py -- tests/files/web/generated/M21-GAP-02425-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02425", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02425", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02426", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02426-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02426.py -- tests/files/web/generated/M21-GAP-02426-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02426", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02426", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02427", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02427-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02427.py -- tests/files/web/generated/M21-GAP-02427-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02427", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02427", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02428", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02428-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02428.py -- tests/files/web/generated/M21-GAP-02428-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02428", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02428", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02429", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02429-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02429.py -- tests/files/web/generated/M21-GAP-02429-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02429", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02429", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02430", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02430-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02430.py -- tests/files/web/generated/M21-GAP-02430-keymap-item-Primitive-Tool-Modal-Map-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02430", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02430", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02431", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02431-keymap-item-Property-Editor-PROPERTIES-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02431.py -- tests/files/web/generated/M21-GAP-02431-keymap-item-Property-Editor-PROPERTIES-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02431", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02431", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02432", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02432-keymap-item-Property-Editor-PROPERTIES-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02432.py -- tests/files/web/generated/M21-GAP-02432-keymap-item-Property-Editor-PROPERTIES-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02432", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02432", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02433", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02433-keymap-item-Property-Editor-PROPERTIES-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02433.py -- tests/files/web/generated/M21-GAP-02433-keymap-item-Property-Editor-PROPERTIES-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02433", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02433", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02434", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02434-keymap-item-Property-Editor-PROPERTIES-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02434.py -- tests/files/web/generated/M21-GAP-02434-keymap-item-Property-Editor-PROPERTIES-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02434", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02434", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02435", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02435-keymap-item-Property-Editor-PROPERTIES-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02435.py -- tests/files/web/generated/M21-GAP-02435-keymap-item-Property-Editor-PROPERTIES-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02435", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02435", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02436", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02436-keymap-item-Property-Editor-PROPERTIES-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02436.py -- tests/files/web/generated/M21-GAP-02436-keymap-item-Property-Editor-PROPERTIES-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02436", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02436", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02437", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02437-keymap-item-Property-Editor-PROPERTIES-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02437.py -- tests/files/web/generated/M21-GAP-02437-keymap-item-Property-Editor-PROPERTIES-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02437", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02437", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02438", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02438-keymap-item-Property-Editor-PROPERTIES-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02438.py -- tests/files/web/generated/M21-GAP-02438-keymap-item-Property-Editor-PROPERTIES-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02438", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02438", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02439", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02439-keymap-item-Property-Editor-PROPERTIES-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02439.py -- tests/files/web/generated/M21-GAP-02439-keymap-item-Property-Editor-PROPERTIES-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02439", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02439", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02440", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02440-keymap-item-Property-Editor-PROPERTIES-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02440.py -- tests/files/web/generated/M21-GAP-02440-keymap-item-Property-Editor-PROPERTIES-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02440", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02440", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02441", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02441-keymap-item-Property-Editor-PROPERTIES-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02441.py -- tests/files/web/generated/M21-GAP-02441-keymap-item-Property-Editor-PROPERTIES-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02441", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02441", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02442", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02442-keymap-item-Property-Editor-PROPERTIES-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02442.py -- tests/files/web/generated/M21-GAP-02442-keymap-item-Property-Editor-PROPERTIES-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02442", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02442", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02443", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02443-keymap-item-Property-Editor-PROPERTIES-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02443.py -- tests/files/web/generated/M21-GAP-02443-keymap-item-Property-Editor-PROPERTIES-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02443", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02443", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02444", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02444-keymap-item-Property-Editor-PROPERTIES-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02444.py -- tests/files/web/generated/M21-GAP-02444-keymap-item-Property-Editor-PROPERTIES-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02444", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02444", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02445", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02445-keymap-item-Property-Editor-PROPERTIES-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02445.py -- tests/files/web/generated/M21-GAP-02445-keymap-item-Property-Editor-PROPERTIES-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02445", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02445", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02446", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02446-keymap-item-Property-Editor-PROPERTIES-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02446.py -- tests/files/web/generated/M21-GAP-02446-keymap-item-Property-Editor-PROPERTIES-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02446", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02446", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02447", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02447-keymap-item-Property-Editor-PROPERTIES-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02447.py -- tests/files/web/generated/M21-GAP-02447-keymap-item-Property-Editor-PROPERTIES-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02447", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02447", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02448", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02448-keymap-item-Property-Editor-PROPERTIES-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02448.py -- tests/files/web/generated/M21-GAP-02448-keymap-item-Property-Editor-PROPERTIES-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02448", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02448", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02449", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02449-keymap-item-Property-Editor-PROPERTIES-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02449.py -- tests/files/web/generated/M21-GAP-02449-keymap-item-Property-Editor-PROPERTIES-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02449", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02449", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02450", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02450-keymap-item-Property-Editor-PROPERTIES-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02450.py -- tests/files/web/generated/M21-GAP-02450-keymap-item-Property-Editor-PROPERTIES-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02450", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02450", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02451", + "gapId": "keymap-item:Region Context Menu:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02451-keymap-item-Region-Context-Menu-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02451.py -- tests/files/web/generated/M21-GAP-02451-keymap-item-Region-Context-Menu-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02451", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02451", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02452", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02452-keymap-item-Screen-Editing-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02452.py -- tests/files/web/generated/M21-GAP-02452-keymap-item-Screen-Editing-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02452", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02452", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02453", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02453-keymap-item-Screen-Editing-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02453.py -- tests/files/web/generated/M21-GAP-02453-keymap-item-Screen-Editing-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02453", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02453", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02454", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02454-keymap-item-Screen-Editing-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02454.py -- tests/files/web/generated/M21-GAP-02454-keymap-item-Screen-Editing-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02454", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02454", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02455", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02455-keymap-item-Screen-Editing-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02455.py -- tests/files/web/generated/M21-GAP-02455-keymap-item-Screen-Editing-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02455", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02455", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02456", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02456-keymap-item-Screen-Editing-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02456.py -- tests/files/web/generated/M21-GAP-02456-keymap-item-Screen-Editing-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02456", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02456", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02457", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02457-keymap-item-Screen-Editing-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02457.py -- tests/files/web/generated/M21-GAP-02457-keymap-item-Screen-Editing-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02457", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02457", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02458", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02458-keymap-item-Screen-Editing-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02458.py -- tests/files/web/generated/M21-GAP-02458-keymap-item-Screen-Editing-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02458", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02458", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02459", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02459-keymap-item-Screen-Editing-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02459.py -- tests/files/web/generated/M21-GAP-02459-keymap-item-Screen-Editing-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02459", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02459", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02460", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02460-keymap-item-Screen-Editing-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02460.py -- tests/files/web/generated/M21-GAP-02460-keymap-item-Screen-Editing-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02460", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02460", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02461", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02461-keymap-item-Screen-Editing-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02461.py -- tests/files/web/generated/M21-GAP-02461-keymap-item-Screen-Editing-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02461", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02461", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02462", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02462-keymap-item-Screen-Editing-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02462.py -- tests/files/web/generated/M21-GAP-02462-keymap-item-Screen-Editing-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02462", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02462", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02463", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02463-keymap-item-Screen-Editing-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02463.py -- tests/files/web/generated/M21-GAP-02463-keymap-item-Screen-Editing-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02463", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02463", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02464", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02464-keymap-item-Screen-Editing-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02464.py -- tests/files/web/generated/M21-GAP-02464-keymap-item-Screen-Editing-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02464", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02464", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02465", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02465-keymap-item-Screen-Editing-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02465.py -- tests/files/web/generated/M21-GAP-02465-keymap-item-Screen-Editing-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02465", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02465", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02466", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02466-keymap-item-Screen-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02466.py -- tests/files/web/generated/M21-GAP-02466-keymap-item-Screen-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02466", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02466", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02467", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02467-keymap-item-Screen-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02467.py -- tests/files/web/generated/M21-GAP-02467-keymap-item-Screen-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02467", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02467", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02468", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02468-keymap-item-Screen-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02468.py -- tests/files/web/generated/M21-GAP-02468-keymap-item-Screen-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02468", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02468", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02469", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02469-keymap-item-Screen-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02469.py -- tests/files/web/generated/M21-GAP-02469-keymap-item-Screen-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02469", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02469", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02470", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02470-keymap-item-Screen-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02470.py -- tests/files/web/generated/M21-GAP-02470-keymap-item-Screen-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02470", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02470", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02471", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02471-keymap-item-Screen-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02471.py -- tests/files/web/generated/M21-GAP-02471-keymap-item-Screen-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02471", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02471", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02472", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02472-keymap-item-Screen-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02472.py -- tests/files/web/generated/M21-GAP-02472-keymap-item-Screen-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02472", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02472", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02473", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02473-keymap-item-Screen-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02473.py -- tests/files/web/generated/M21-GAP-02473-keymap-item-Screen-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02473", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02473", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02474", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02474-keymap-item-Screen-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02474.py -- tests/files/web/generated/M21-GAP-02474-keymap-item-Screen-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02474", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02474", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02475", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02475-keymap-item-Screen-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02475.py -- tests/files/web/generated/M21-GAP-02475-keymap-item-Screen-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02475", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02475", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02476", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02476-keymap-item-Screen-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02476.py -- tests/files/web/generated/M21-GAP-02476-keymap-item-Screen-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02476", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02476", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02477", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02477-keymap-item-Screen-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02477.py -- tests/files/web/generated/M21-GAP-02477-keymap-item-Screen-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02477", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02477", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02478", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02478-keymap-item-Screen-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02478.py -- tests/files/web/generated/M21-GAP-02478-keymap-item-Screen-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02478", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02478", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02479", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02479-keymap-item-Screen-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02479.py -- tests/files/web/generated/M21-GAP-02479-keymap-item-Screen-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02479", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02479", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02480", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02480-keymap-item-Screen-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02480.py -- tests/files/web/generated/M21-GAP-02480-keymap-item-Screen-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02480", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02480", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02481", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02481-keymap-item-Screen-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02481.py -- tests/files/web/generated/M21-GAP-02481-keymap-item-Screen-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02481", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02481", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02482", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02482-keymap-item-Screen-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02482.py -- tests/files/web/generated/M21-GAP-02482-keymap-item-Screen-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02482", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02482", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02483", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02483-keymap-item-Screen-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02483.py -- tests/files/web/generated/M21-GAP-02483-keymap-item-Screen-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02483", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02483", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02484", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02484-keymap-item-Screen-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02484.py -- tests/files/web/generated/M21-GAP-02484-keymap-item-Screen-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02484", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02484", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02485", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02485-keymap-item-Screen-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02485.py -- tests/files/web/generated/M21-GAP-02485-keymap-item-Screen-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02485", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02485", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02486", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02486-keymap-item-Screen-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02486.py -- tests/files/web/generated/M21-GAP-02486-keymap-item-Screen-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02486", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02486", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02487", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02487-keymap-item-Screen-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02487.py -- tests/files/web/generated/M21-GAP-02487-keymap-item-Screen-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02487", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02487", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02488", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02488-keymap-item-Screen-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02488.py -- tests/files/web/generated/M21-GAP-02488-keymap-item-Screen-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02488", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02488", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02489", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02489-keymap-item-Screen-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02489.py -- tests/files/web/generated/M21-GAP-02489-keymap-item-Screen-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02489", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02489", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02490", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02490-keymap-item-Screen-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02490.py -- tests/files/web/generated/M21-GAP-02490-keymap-item-Screen-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02490", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02490", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02491", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02491-keymap-item-Screen-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02491.py -- tests/files/web/generated/M21-GAP-02491-keymap-item-Screen-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02491", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02491", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02492", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02492-keymap-item-Sculpt-Curves-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02492.py -- tests/files/web/generated/M21-GAP-02492-keymap-item-Sculpt-Curves-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02492", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02492", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02493", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02493-keymap-item-Sculpt-Curves-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02493.py -- tests/files/web/generated/M21-GAP-02493-keymap-item-Sculpt-Curves-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02493", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02493", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02494", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02494-keymap-item-Sculpt-Curves-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02494.py -- tests/files/web/generated/M21-GAP-02494-keymap-item-Sculpt-Curves-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02494", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02494", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02495", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02495-keymap-item-Sculpt-Curves-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02495.py -- tests/files/web/generated/M21-GAP-02495-keymap-item-Sculpt-Curves-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02495", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02495", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02496", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02496-keymap-item-Sculpt-Curves-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02496.py -- tests/files/web/generated/M21-GAP-02496-keymap-item-Sculpt-Curves-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02496", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02496", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02497", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02497-keymap-item-Sculpt-Curves-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02497.py -- tests/files/web/generated/M21-GAP-02497-keymap-item-Sculpt-Curves-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02497", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02497", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02498", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02498-keymap-item-Sculpt-Curves-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02498.py -- tests/files/web/generated/M21-GAP-02498-keymap-item-Sculpt-Curves-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02498", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02498", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02499", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02499-keymap-item-Sculpt-Curves-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02499.py -- tests/files/web/generated/M21-GAP-02499-keymap-item-Sculpt-Curves-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02499", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02499", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02500", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02500-keymap-item-Sculpt-Curves-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02500.py -- tests/files/web/generated/M21-GAP-02500-keymap-item-Sculpt-Curves-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02500", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02500", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02501", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02501-keymap-item-Sculpt-Curves-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02501.py -- tests/files/web/generated/M21-GAP-02501-keymap-item-Sculpt-Curves-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02501", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02501", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02502", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02502-keymap-item-Sculpt-Curves-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02502.py -- tests/files/web/generated/M21-GAP-02502-keymap-item-Sculpt-Curves-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02502", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02502", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02503", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02503-keymap-item-Sculpt-Curves-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02503.py -- tests/files/web/generated/M21-GAP-02503-keymap-item-Sculpt-Curves-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02503", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02503", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02504", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02504-keymap-item-Sculpt-Curves-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02504.py -- tests/files/web/generated/M21-GAP-02504-keymap-item-Sculpt-Curves-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02504", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02504", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02505", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02505-keymap-item-Sculpt-Curves-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02505.py -- tests/files/web/generated/M21-GAP-02505-keymap-item-Sculpt-Curves-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02505", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02505", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02506", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02506-keymap-item-Sculpt-Curves-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02506.py -- tests/files/web/generated/M21-GAP-02506-keymap-item-Sculpt-Curves-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02506", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02506", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02507", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02507-keymap-item-Sculpt-Curves-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02507.py -- tests/files/web/generated/M21-GAP-02507-keymap-item-Sculpt-Curves-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02507", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02507", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02508", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02508-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02508.py -- tests/files/web/generated/M21-GAP-02508-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02508", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02508", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02509", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02509-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02509.py -- tests/files/web/generated/M21-GAP-02509-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02509", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02509", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02510", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02510-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02510.py -- tests/files/web/generated/M21-GAP-02510-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02510", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02510", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02511", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02511-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02511.py -- tests/files/web/generated/M21-GAP-02511-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02511", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02511", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02512", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02512-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02512.py -- tests/files/web/generated/M21-GAP-02512-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02512", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02512", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02513", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02513-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02513.py -- tests/files/web/generated/M21-GAP-02513-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02513", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02513", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02514", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02514-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02514.py -- tests/files/web/generated/M21-GAP-02514-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02514", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02514", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02515", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02515-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02515.py -- tests/files/web/generated/M21-GAP-02515-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02515", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02515", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02516", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02516-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02516.py -- tests/files/web/generated/M21-GAP-02516-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02516", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02516", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02517", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02517-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02517.py -- tests/files/web/generated/M21-GAP-02517-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02517", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02517", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02518", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02518-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02518.py -- tests/files/web/generated/M21-GAP-02518-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02518", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02518", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02519", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02519-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02519.py -- tests/files/web/generated/M21-GAP-02519-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02519", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02519", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02520", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02520-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02520.py -- tests/files/web/generated/M21-GAP-02520-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02520", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02520", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02521", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02521-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02521.py -- tests/files/web/generated/M21-GAP-02521-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02521", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02521", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02522", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02522-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02522.py -- tests/files/web/generated/M21-GAP-02522-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02522", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02522", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02523", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02523-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02523.py -- tests/files/web/generated/M21-GAP-02523-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02523", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02523", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02524", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02524-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02524.py -- tests/files/web/generated/M21-GAP-02524-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02524", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02524", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02525", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02525-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02525.py -- tests/files/web/generated/M21-GAP-02525-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02525", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02525", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02526", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02526-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02526.py -- tests/files/web/generated/M21-GAP-02526-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02526", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02526", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02527", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02527-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02527.py -- tests/files/web/generated/M21-GAP-02527-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02527", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02527", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02528", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02528-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02528.py -- tests/files/web/generated/M21-GAP-02528-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02528", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02528", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02529", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02529-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02529.py -- tests/files/web/generated/M21-GAP-02529-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02529", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02529", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02530", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02530-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02530.py -- tests/files/web/generated/M21-GAP-02530-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02530", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02530", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02531", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02531-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02531.py -- tests/files/web/generated/M21-GAP-02531-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02531", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02531", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02532", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02532-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02532.py -- tests/files/web/generated/M21-GAP-02532-keymap-item-Sculpt-Expand-Modal-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02532", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02532", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02533", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02533-keymap-item-Sculpt-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02533.py -- tests/files/web/generated/M21-GAP-02533-keymap-item-Sculpt-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02533", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02533", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02534", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02534-keymap-item-Sculpt-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02534.py -- tests/files/web/generated/M21-GAP-02534-keymap-item-Sculpt-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02534", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02534", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02535", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02535-keymap-item-Sculpt-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02535.py -- tests/files/web/generated/M21-GAP-02535-keymap-item-Sculpt-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02535", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02535", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02536", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02536-keymap-item-Sculpt-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02536.py -- tests/files/web/generated/M21-GAP-02536-keymap-item-Sculpt-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02536", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02536", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02537", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02537-keymap-item-Sculpt-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02537.py -- tests/files/web/generated/M21-GAP-02537-keymap-item-Sculpt-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02537", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02537", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02538", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02538-keymap-item-Sculpt-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02538.py -- tests/files/web/generated/M21-GAP-02538-keymap-item-Sculpt-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02538", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02538", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02539", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02539-keymap-item-Sculpt-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02539.py -- tests/files/web/generated/M21-GAP-02539-keymap-item-Sculpt-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02539", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02539", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02540", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02540-keymap-item-Sculpt-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02540.py -- tests/files/web/generated/M21-GAP-02540-keymap-item-Sculpt-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02540", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02540", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02541", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02541-keymap-item-Sculpt-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02541.py -- tests/files/web/generated/M21-GAP-02541-keymap-item-Sculpt-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02541", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02541", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02542", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02542-keymap-item-Sculpt-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02542.py -- tests/files/web/generated/M21-GAP-02542-keymap-item-Sculpt-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02542", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02542", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02543", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02543-keymap-item-Sculpt-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02543.py -- tests/files/web/generated/M21-GAP-02543-keymap-item-Sculpt-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02543", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02543", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02544", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02544-keymap-item-Sculpt-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02544.py -- tests/files/web/generated/M21-GAP-02544-keymap-item-Sculpt-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02544", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02544", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02545", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02545-keymap-item-Sculpt-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02545.py -- tests/files/web/generated/M21-GAP-02545-keymap-item-Sculpt-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02545", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02545", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02546", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02546-keymap-item-Sculpt-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02546.py -- tests/files/web/generated/M21-GAP-02546-keymap-item-Sculpt-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02546", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02546", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02547", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02547-keymap-item-Sculpt-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02547.py -- tests/files/web/generated/M21-GAP-02547-keymap-item-Sculpt-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02547", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02547", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02548", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02548-keymap-item-Sculpt-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02548.py -- tests/files/web/generated/M21-GAP-02548-keymap-item-Sculpt-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02548", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02548", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02549", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02549-keymap-item-Sculpt-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02549.py -- tests/files/web/generated/M21-GAP-02549-keymap-item-Sculpt-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02549", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02549", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02550", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02550-keymap-item-Sculpt-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02550.py -- tests/files/web/generated/M21-GAP-02550-keymap-item-Sculpt-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02550", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02550", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02551", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02551-keymap-item-Sculpt-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02551.py -- tests/files/web/generated/M21-GAP-02551-keymap-item-Sculpt-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02551", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02551", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02552", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02552-keymap-item-Sculpt-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02552.py -- tests/files/web/generated/M21-GAP-02552-keymap-item-Sculpt-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02552", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02552", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02553", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02553-keymap-item-Sculpt-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02553.py -- tests/files/web/generated/M21-GAP-02553-keymap-item-Sculpt-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02553", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02553", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02554", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02554-keymap-item-Sculpt-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02554.py -- tests/files/web/generated/M21-GAP-02554-keymap-item-Sculpt-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02554", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02554", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02555", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02555-keymap-item-Sculpt-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02555.py -- tests/files/web/generated/M21-GAP-02555-keymap-item-Sculpt-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02555", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02555", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02556", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02556-keymap-item-Sculpt-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02556.py -- tests/files/web/generated/M21-GAP-02556-keymap-item-Sculpt-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02556", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02556", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02557", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02557-keymap-item-Sculpt-EMPTY-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02557.py -- tests/files/web/generated/M21-GAP-02557-keymap-item-Sculpt-EMPTY-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02557", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02557", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02558", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02558-keymap-item-Sculpt-EMPTY-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02558.py -- tests/files/web/generated/M21-GAP-02558-keymap-item-Sculpt-EMPTY-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02558", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02558", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02559", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02559-keymap-item-Sculpt-EMPTY-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02559.py -- tests/files/web/generated/M21-GAP-02559-keymap-item-Sculpt-EMPTY-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02559", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02559", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02560", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02560-keymap-item-Sculpt-EMPTY-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02560.py -- tests/files/web/generated/M21-GAP-02560-keymap-item-Sculpt-EMPTY-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02560", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02560", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02561", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02561-keymap-item-Sculpt-EMPTY-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02561.py -- tests/files/web/generated/M21-GAP-02561-keymap-item-Sculpt-EMPTY-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02561", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02561", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02562", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02562-keymap-item-Sculpt-EMPTY-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02562.py -- tests/files/web/generated/M21-GAP-02562-keymap-item-Sculpt-EMPTY-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02562", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02562", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02563", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02563-keymap-item-Sculpt-EMPTY-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02563.py -- tests/files/web/generated/M21-GAP-02563-keymap-item-Sculpt-EMPTY-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02563", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02563", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02564", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02564-keymap-item-Sculpt-EMPTY-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02564.py -- tests/files/web/generated/M21-GAP-02564-keymap-item-Sculpt-EMPTY-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02564", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02564", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02565", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02565-keymap-item-Sculpt-EMPTY-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02565.py -- tests/files/web/generated/M21-GAP-02565-keymap-item-Sculpt-EMPTY-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02565", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02565", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02566", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02566-keymap-item-Sculpt-EMPTY-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02566.py -- tests/files/web/generated/M21-GAP-02566-keymap-item-Sculpt-EMPTY-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02566", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02566", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02567", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02567-keymap-item-Sculpt-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02567.py -- tests/files/web/generated/M21-GAP-02567-keymap-item-Sculpt-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02567", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02567", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02568", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02568-keymap-item-Sculpt-EMPTY-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02568.py -- tests/files/web/generated/M21-GAP-02568-keymap-item-Sculpt-EMPTY-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02568", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02568", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02569", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02569-keymap-item-Sculpt-EMPTY-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02569.py -- tests/files/web/generated/M21-GAP-02569-keymap-item-Sculpt-EMPTY-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02569", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02569", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02570", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02570-keymap-item-Sculpt-EMPTY-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02570.py -- tests/files/web/generated/M21-GAP-02570-keymap-item-Sculpt-EMPTY-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02570", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02570", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02571", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02571-keymap-item-Sculpt-EMPTY-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02571.py -- tests/files/web/generated/M21-GAP-02571-keymap-item-Sculpt-EMPTY-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02571", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02571", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02572", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02572-keymap-item-Sculpt-EMPTY-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02572.py -- tests/files/web/generated/M21-GAP-02572-keymap-item-Sculpt-EMPTY-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02572", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02572", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02573", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02573-keymap-item-Sculpt-EMPTY-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02573.py -- tests/files/web/generated/M21-GAP-02573-keymap-item-Sculpt-EMPTY-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02573", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02573", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02574", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02574-keymap-item-Sculpt-EMPTY-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02574.py -- tests/files/web/generated/M21-GAP-02574-keymap-item-Sculpt-EMPTY-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02574", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02574", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02575", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02575-keymap-item-Sculpt-EMPTY-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02575.py -- tests/files/web/generated/M21-GAP-02575-keymap-item-Sculpt-EMPTY-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02575", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02575", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02576", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02576-keymap-item-Sculpt-EMPTY-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02576.py -- tests/files/web/generated/M21-GAP-02576-keymap-item-Sculpt-EMPTY-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02576", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02576", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02577", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02577-keymap-item-Sculpt-EMPTY-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02577.py -- tests/files/web/generated/M21-GAP-02577-keymap-item-Sculpt-EMPTY-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02577", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02577", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02578", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02578-keymap-item-Sculpt-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02578.py -- tests/files/web/generated/M21-GAP-02578-keymap-item-Sculpt-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02578", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02578", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02579", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02579-keymap-item-Sculpt-EMPTY-WINDOW-50.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02579.py -- tests/files/web/generated/M21-GAP-02579-keymap-item-Sculpt-EMPTY-WINDOW-50.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02579", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02579", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02580", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02580-keymap-item-Sculpt-EMPTY-WINDOW-51.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02580.py -- tests/files/web/generated/M21-GAP-02580-keymap-item-Sculpt-EMPTY-WINDOW-51.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02580", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02580", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02581", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:52", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02581-keymap-item-Sculpt-EMPTY-WINDOW-52.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02581.py -- tests/files/web/generated/M21-GAP-02581-keymap-item-Sculpt-EMPTY-WINDOW-52.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02581", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02581", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02582", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:53", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02582-keymap-item-Sculpt-EMPTY-WINDOW-53.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02582.py -- tests/files/web/generated/M21-GAP-02582-keymap-item-Sculpt-EMPTY-WINDOW-53.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02582", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02582", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02583", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:54", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02583-keymap-item-Sculpt-EMPTY-WINDOW-54.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02583.py -- tests/files/web/generated/M21-GAP-02583-keymap-item-Sculpt-EMPTY-WINDOW-54.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02583", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02583", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02584", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:55", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02584-keymap-item-Sculpt-EMPTY-WINDOW-55.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02584.py -- tests/files/web/generated/M21-GAP-02584-keymap-item-Sculpt-EMPTY-WINDOW-55.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02584", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02584", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02585", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:56", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02585-keymap-item-Sculpt-EMPTY-WINDOW-56.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02585.py -- tests/files/web/generated/M21-GAP-02585-keymap-item-Sculpt-EMPTY-WINDOW-56.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02585", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02585", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02586", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:57", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02586-keymap-item-Sculpt-EMPTY-WINDOW-57.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02586.py -- tests/files/web/generated/M21-GAP-02586-keymap-item-Sculpt-EMPTY-WINDOW-57.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02586", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02586", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02587", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:58", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02587-keymap-item-Sculpt-EMPTY-WINDOW-58.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02587.py -- tests/files/web/generated/M21-GAP-02587-keymap-item-Sculpt-EMPTY-WINDOW-58.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02587", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02587", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02588", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:59", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02588-keymap-item-Sculpt-EMPTY-WINDOW-59.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02588.py -- tests/files/web/generated/M21-GAP-02588-keymap-item-Sculpt-EMPTY-WINDOW-59.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02588", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02588", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02589", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02589-keymap-item-Sculpt-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02589.py -- tests/files/web/generated/M21-GAP-02589-keymap-item-Sculpt-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02589", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02589", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02590", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:60", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02590-keymap-item-Sculpt-EMPTY-WINDOW-60.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02590.py -- tests/files/web/generated/M21-GAP-02590-keymap-item-Sculpt-EMPTY-WINDOW-60.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02590", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02590", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02591", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:61", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02591-keymap-item-Sculpt-EMPTY-WINDOW-61.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02591.py -- tests/files/web/generated/M21-GAP-02591-keymap-item-Sculpt-EMPTY-WINDOW-61.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02591", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02591", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02592", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:62", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02592-keymap-item-Sculpt-EMPTY-WINDOW-62.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02592.py -- tests/files/web/generated/M21-GAP-02592-keymap-item-Sculpt-EMPTY-WINDOW-62.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02592", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02592", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02593", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:63", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02593-keymap-item-Sculpt-EMPTY-WINDOW-63.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02593.py -- tests/files/web/generated/M21-GAP-02593-keymap-item-Sculpt-EMPTY-WINDOW-63.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02593", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02593", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02594", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:64", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02594-keymap-item-Sculpt-EMPTY-WINDOW-64.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02594.py -- tests/files/web/generated/M21-GAP-02594-keymap-item-Sculpt-EMPTY-WINDOW-64.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02594", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02594", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02595", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:65", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02595-keymap-item-Sculpt-EMPTY-WINDOW-65.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02595.py -- tests/files/web/generated/M21-GAP-02595-keymap-item-Sculpt-EMPTY-WINDOW-65.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02595", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02595", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02596", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:66", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02596-keymap-item-Sculpt-EMPTY-WINDOW-66.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02596.py -- tests/files/web/generated/M21-GAP-02596-keymap-item-Sculpt-EMPTY-WINDOW-66.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02596", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02596", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02597", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02597-keymap-item-Sculpt-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02597.py -- tests/files/web/generated/M21-GAP-02597-keymap-item-Sculpt-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02597", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02597", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02598", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02598-keymap-item-Sculpt-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02598.py -- tests/files/web/generated/M21-GAP-02598-keymap-item-Sculpt-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02598", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02598", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02599", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02599-keymap-item-Sculpt-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02599.py -- tests/files/web/generated/M21-GAP-02599-keymap-item-Sculpt-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02599", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02599", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02600", + "gapId": "keymap-item:Sequencer Channels:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02600-keymap-item-Sequencer-Channels-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02600.py -- tests/files/web/generated/M21-GAP-02600-keymap-item-Sequencer-Channels-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02600", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02600", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02601", + "gapId": "keymap-item:Sequencer Channels:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02601-keymap-item-Sequencer-Channels-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02601.py -- tests/files/web/generated/M21-GAP-02601-keymap-item-Sequencer-Channels-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02601", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02601", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02602", + "gapId": "keymap-item:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02602-keymap-item-Sequencer-Tool-Blade-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02602.py -- tests/files/web/generated/M21-GAP-02602-keymap-item-Sequencer-Tool-Blade-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02602", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02602", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02603", + "gapId": "keymap-item:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02603-keymap-item-Sequencer-Tool-Blade-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02603.py -- tests/files/web/generated/M21-GAP-02603-keymap-item-Sequencer-Tool-Blade-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02603", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02603", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02604", + "gapId": "keymap-item:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02604-keymap-item-Sequencer-Tool-Blade-SEQUENCE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02604.py -- tests/files/web/generated/M21-GAP-02604-keymap-item-Sequencer-Tool-Blade-SEQUENCE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02604", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02604", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02605", + "gapId": "keymap-item:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02605-keymap-item-Sequencer-Tool-Blade-SEQUENCE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02605.py -- tests/files/web/generated/M21-GAP-02605-keymap-item-Sequencer-Tool-Blade-SEQUENCE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02605", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02605", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02606", + "gapId": "keymap-item:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02606-keymap-item-Sequencer-Tool-Blade-SEQUENCE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02606.py -- tests/files/web/generated/M21-GAP-02606-keymap-item-Sequencer-Tool-Blade-SEQUENCE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02606", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02606", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02607", + "gapId": "keymap-item:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02607-keymap-item-Sequencer-Tool-Blade-SEQUENCE_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02607.py -- tests/files/web/generated/M21-GAP-02607-keymap-item-Sequencer-Tool-Blade-SEQUENCE_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02607", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02607", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02608", + "gapId": "keymap-item:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02608-keymap-item-Sequencer-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02608.py -- tests/files/web/generated/M21-GAP-02608-keymap-item-Sequencer-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02608", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02608", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02609", + "gapId": "keymap-item:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02609-keymap-item-Sequencer-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02609.py -- tests/files/web/generated/M21-GAP-02609-keymap-item-Sequencer-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02609", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02609", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02610", + "gapId": "keymap-item:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02610-keymap-item-Sequencer-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02610.py -- tests/files/web/generated/M21-GAP-02610-keymap-item-Sequencer-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02610", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02610", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02611", + "gapId": "keymap-item:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02611-keymap-item-Sequencer-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02611.py -- tests/files/web/generated/M21-GAP-02611-keymap-item-Sequencer-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02611", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02611", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02612", + "gapId": "keymap-item:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02612-keymap-item-Sequencer-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02612.py -- tests/files/web/generated/M21-GAP-02612-keymap-item-Sequencer-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02612", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02612", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02613", + "gapId": "keymap-item:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02613-keymap-item-Sequencer-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02613.py -- tests/files/web/generated/M21-GAP-02613-keymap-item-Sequencer-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02613", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02613", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02614", + "gapId": "keymap-item:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02614-keymap-item-Sequencer-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02614.py -- tests/files/web/generated/M21-GAP-02614-keymap-item-Sequencer-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02614", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02614", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02615", + "gapId": "keymap-item:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02615-keymap-item-Sequencer-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02615.py -- tests/files/web/generated/M21-GAP-02615-keymap-item-Sequencer-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02615", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02615", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02616", + "gapId": "keymap-item:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02616-keymap-item-Sequencer-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02616.py -- tests/files/web/generated/M21-GAP-02616-keymap-item-Sequencer-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02616", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02616", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02617", + "gapId": "keymap-item:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02617-keymap-item-Sequencer-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02617.py -- tests/files/web/generated/M21-GAP-02617-keymap-item-Sequencer-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02617", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02617", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02618", + "gapId": "keymap-item:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02618-keymap-item-Sequencer-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02618.py -- tests/files/web/generated/M21-GAP-02618-keymap-item-Sequencer-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02618", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02618", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02619", + "gapId": "keymap-item:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02619-keymap-item-Sequencer-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02619.py -- tests/files/web/generated/M21-GAP-02619-keymap-item-Sequencer-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02619", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02619", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02620", + "gapId": "keymap-item:Sequencer Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02620-keymap-item-Sequencer-Tool-Select-Circle-fallback-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02620.py -- tests/files/web/generated/M21-GAP-02620-keymap-item-Sequencer-Tool-Select-Circle-fallback-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02620", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02620", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02621", + "gapId": "keymap-item:Sequencer Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02621-keymap-item-Sequencer-Tool-Select-Circle-fallback-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02621.py -- tests/files/web/generated/M21-GAP-02621-keymap-item-Sequencer-Tool-Select-Circle-fallback-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02621", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02621", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02622", + "gapId": "keymap-item:Sequencer Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02622-keymap-item-Sequencer-Tool-Select-Circle-fallback-SEQUENCE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02622.py -- tests/files/web/generated/M21-GAP-02622-keymap-item-Sequencer-Tool-Select-Circle-fallback-SEQUENCE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02622", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02622", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02623", + "gapId": "keymap-item:Sequencer Tool: Select Circle:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02623-keymap-item-Sequencer-Tool-Select-Circle-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02623.py -- tests/files/web/generated/M21-GAP-02623-keymap-item-Sequencer-Tool-Select-Circle-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02623", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02623", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02624", + "gapId": "keymap-item:Sequencer Tool: Select Circle:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02624-keymap-item-Sequencer-Tool-Select-Circle-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02624.py -- tests/files/web/generated/M21-GAP-02624-keymap-item-Sequencer-Tool-Select-Circle-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02624", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02624", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02625", + "gapId": "keymap-item:Sequencer Tool: Select Circle:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02625-keymap-item-Sequencer-Tool-Select-Circle-SEQUENCE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02625.py -- tests/files/web/generated/M21-GAP-02625-keymap-item-Sequencer-Tool-Select-Circle-SEQUENCE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02625", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02625", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02626", + "gapId": "keymap-item:Sequencer Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02626-keymap-item-Sequencer-Tool-Select-Lasso-fallback-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02626.py -- tests/files/web/generated/M21-GAP-02626-keymap-item-Sequencer-Tool-Select-Lasso-fallback-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02626", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02626", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02627", + "gapId": "keymap-item:Sequencer Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02627-keymap-item-Sequencer-Tool-Select-Lasso-fallback-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02627.py -- tests/files/web/generated/M21-GAP-02627-keymap-item-Sequencer-Tool-Select-Lasso-fallback-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02627", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02627", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02628", + "gapId": "keymap-item:Sequencer Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02628-keymap-item-Sequencer-Tool-Select-Lasso-fallback-SEQUENCE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02628.py -- tests/files/web/generated/M21-GAP-02628-keymap-item-Sequencer-Tool-Select-Lasso-fallback-SEQUENCE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02628", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02628", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02629", + "gapId": "keymap-item:Sequencer Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02629-keymap-item-Sequencer-Tool-Select-Lasso-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02629.py -- tests/files/web/generated/M21-GAP-02629-keymap-item-Sequencer-Tool-Select-Lasso-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02629", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02629", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02630", + "gapId": "keymap-item:Sequencer Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02630-keymap-item-Sequencer-Tool-Select-Lasso-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02630.py -- tests/files/web/generated/M21-GAP-02630-keymap-item-Sequencer-Tool-Select-Lasso-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02630", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02630", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02631", + "gapId": "keymap-item:Sequencer Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02631-keymap-item-Sequencer-Tool-Select-Lasso-SEQUENCE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02631.py -- tests/files/web/generated/M21-GAP-02631-keymap-item-Sequencer-Tool-Select-Lasso-SEQUENCE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02631", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02631", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02632", + "gapId": "keymap-item:Sequencer Tool: Slip:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02632-keymap-item-Sequencer-Tool-Slip-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02632.py -- tests/files/web/generated/M21-GAP-02632-keymap-item-Sequencer-Tool-Slip-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02632", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02632", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02633", + "gapId": "keymap-item:Sequencer Tool: Slip:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02633-keymap-item-Sequencer-Tool-Slip-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02633.py -- tests/files/web/generated/M21-GAP-02633-keymap-item-Sequencer-Tool-Slip-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02633", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02633", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02634", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02634-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02634.py -- tests/files/web/generated/M21-GAP-02634-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02634", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02634", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02635", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02635-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02635.py -- tests/files/web/generated/M21-GAP-02635-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02635", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02635", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02636", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02636-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02636.py -- tests/files/web/generated/M21-GAP-02636-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02636", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02636", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02637", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02637-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02637.py -- tests/files/web/generated/M21-GAP-02637-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02637", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02637", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02638", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02638-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02638.py -- tests/files/web/generated/M21-GAP-02638-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02638", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02638", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02639", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02639-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02639.py -- tests/files/web/generated/M21-GAP-02639-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02639", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02639", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02640", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02640-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02640.py -- tests/files/web/generated/M21-GAP-02640-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02640", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02640", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02641", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02641-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02641.py -- tests/files/web/generated/M21-GAP-02641-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02641", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02641", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02642", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02642-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02642.py -- tests/files/web/generated/M21-GAP-02642-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02642", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02642", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02643", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02643-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02643.py -- tests/files/web/generated/M21-GAP-02643-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02643", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02643", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02644", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02644-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02644.py -- tests/files/web/generated/M21-GAP-02644-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02644", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02644", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02645", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02645-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02645.py -- tests/files/web/generated/M21-GAP-02645-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02645", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02645", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02646", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02646-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02646.py -- tests/files/web/generated/M21-GAP-02646-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02646", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02646", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02647", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02647-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02647.py -- tests/files/web/generated/M21-GAP-02647-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02647", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02647", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02648", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02648-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02648.py -- tests/files/web/generated/M21-GAP-02648-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02648", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02648", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02649", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02649-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02649.py -- tests/files/web/generated/M21-GAP-02649-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02649", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02649", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02650", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02650-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02650.py -- tests/files/web/generated/M21-GAP-02650-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02650", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02650", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02651", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02651-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02651.py -- tests/files/web/generated/M21-GAP-02651-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02651", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02651", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02652", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02652-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02652.py -- tests/files/web/generated/M21-GAP-02652-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02652", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02652", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02653", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02653-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02653.py -- tests/files/web/generated/M21-GAP-02653-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02653", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02653", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02654", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02654-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02654.py -- tests/files/web/generated/M21-GAP-02654-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02654", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02654", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02655", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02655-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02655.py -- tests/files/web/generated/M21-GAP-02655-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02655", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02655", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02656", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02656-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02656.py -- tests/files/web/generated/M21-GAP-02656-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02656", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02656", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02657", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02657-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02657.py -- tests/files/web/generated/M21-GAP-02657-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02657", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02657", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02658", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02658-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02658.py -- tests/files/web/generated/M21-GAP-02658-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02658", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02658", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02659", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02659-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02659.py -- tests/files/web/generated/M21-GAP-02659-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02659", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02659", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02660", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02660-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02660.py -- tests/files/web/generated/M21-GAP-02660-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02660", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02660", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02661", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02661-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02661.py -- tests/files/web/generated/M21-GAP-02661-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02661", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02661", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02662", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02662-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02662.py -- tests/files/web/generated/M21-GAP-02662-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02662", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02662", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02663", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02663-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02663.py -- tests/files/web/generated/M21-GAP-02663-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02663", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02663", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02664", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02664-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02664.py -- tests/files/web/generated/M21-GAP-02664-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02664", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02664", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02665", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02665-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02665.py -- tests/files/web/generated/M21-GAP-02665-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02665", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02665", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02666", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02666-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02666.py -- tests/files/web/generated/M21-GAP-02666-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02666", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02666", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02667", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02667-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02667.py -- tests/files/web/generated/M21-GAP-02667-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02667", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02667", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02668", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02668-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02668.py -- tests/files/web/generated/M21-GAP-02668-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02668", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02668", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02669", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02669-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02669.py -- tests/files/web/generated/M21-GAP-02669-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02669", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02669", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02670", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02670-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02670.py -- tests/files/web/generated/M21-GAP-02670-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02670", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02670", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02671", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02671-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02671.py -- tests/files/web/generated/M21-GAP-02671-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02671", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02671", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02672", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02672-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02672.py -- tests/files/web/generated/M21-GAP-02672-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02672", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02672", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02673", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02673-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02673.py -- tests/files/web/generated/M21-GAP-02673-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02673", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02673", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02674", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02674-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02674.py -- tests/files/web/generated/M21-GAP-02674-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02674", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02674", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02675", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02675-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02675.py -- tests/files/web/generated/M21-GAP-02675-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02675", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02675", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02676", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02676-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02676.py -- tests/files/web/generated/M21-GAP-02676-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02676", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02676", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02677", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02677-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02677.py -- tests/files/web/generated/M21-GAP-02677-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02677", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02677", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02678", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02678-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02678.py -- tests/files/web/generated/M21-GAP-02678-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02678", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02678", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02679", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02679-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02679.py -- tests/files/web/generated/M21-GAP-02679-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02679", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02679", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02680", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02680-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-50.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02680.py -- tests/files/web/generated/M21-GAP-02680-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-50.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02680", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02680", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02681", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:51", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02681-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-51.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02681.py -- tests/files/web/generated/M21-GAP-02681-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-51.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02681", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02681", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02682", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:52", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02682-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-52.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02682.py -- tests/files/web/generated/M21-GAP-02682-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-52.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02682", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02682", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02683", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:53", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02683-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-53.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02683.py -- tests/files/web/generated/M21-GAP-02683-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-53.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02683", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02683", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02684", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:54", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02684-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-54.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02684.py -- tests/files/web/generated/M21-GAP-02684-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-54.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02684", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02684", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02685", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:55", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02685-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-55.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02685.py -- tests/files/web/generated/M21-GAP-02685-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-55.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02685", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02685", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02686", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:56", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02686-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-56.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02686.py -- tests/files/web/generated/M21-GAP-02686-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-56.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02686", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02686", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02687", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:57", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02687-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-57.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02687.py -- tests/files/web/generated/M21-GAP-02687-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-57.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02687", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02687", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02688", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:58", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02688-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-58.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02688.py -- tests/files/web/generated/M21-GAP-02688-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-58.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02688", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02688", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02689", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:59", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02689-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-59.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02689.py -- tests/files/web/generated/M21-GAP-02689-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-59.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02689", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02689", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02690", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02690-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02690.py -- tests/files/web/generated/M21-GAP-02690-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02690", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02690", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02691", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:60", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02691-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-60.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02691.py -- tests/files/web/generated/M21-GAP-02691-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-60.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02691", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02691", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02692", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:61", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02692-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-61.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02692.py -- tests/files/web/generated/M21-GAP-02692-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-61.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02692", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02692", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02693", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:62", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02693-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-62.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02693.py -- tests/files/web/generated/M21-GAP-02693-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-62.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02693", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02693", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02694", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:63", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02694-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-63.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02694.py -- tests/files/web/generated/M21-GAP-02694-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-63.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02694", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02694", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02695", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:64", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02695-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-64.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02695.py -- tests/files/web/generated/M21-GAP-02695-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-64.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02695", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02695", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02696", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:65", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02696-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-65.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02696.py -- tests/files/web/generated/M21-GAP-02696-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-65.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02696", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02696", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02697", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:66", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02697-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-66.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02697.py -- tests/files/web/generated/M21-GAP-02697-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-66.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02697", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02697", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02698", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:67", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02698-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-67.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02698.py -- tests/files/web/generated/M21-GAP-02698-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-67.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02698", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02698", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02699", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:68", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02699-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-68.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02699.py -- tests/files/web/generated/M21-GAP-02699-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-68.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02699", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02699", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02700", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:69", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02700-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-69.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02700.py -- tests/files/web/generated/M21-GAP-02700-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-69.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02700", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02700", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02701", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02701-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02701.py -- tests/files/web/generated/M21-GAP-02701-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02701", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02701", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02702", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:70", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02702-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-70.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02702.py -- tests/files/web/generated/M21-GAP-02702-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-70.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02702", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02702", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02703", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:71", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02703-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-71.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02703.py -- tests/files/web/generated/M21-GAP-02703-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-71.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02703", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02703", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02704", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:72", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02704-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-72.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02704.py -- tests/files/web/generated/M21-GAP-02704-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-72.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02704", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02704", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02705", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:73", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02705-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-73.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02705.py -- tests/files/web/generated/M21-GAP-02705-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-73.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02705", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02705", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02706", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:74", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02706-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-74.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02706.py -- tests/files/web/generated/M21-GAP-02706-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-74.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02706", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02706", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02707", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:75", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02707-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-75.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02707.py -- tests/files/web/generated/M21-GAP-02707-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-75.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02707", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02707", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02708", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:76", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02708-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-76.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02708.py -- tests/files/web/generated/M21-GAP-02708-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-76.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02708", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02708", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02709", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:77", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02709-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-77.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02709.py -- tests/files/web/generated/M21-GAP-02709-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-77.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02709", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02709", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02710", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:78", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02710-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-78.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02710.py -- tests/files/web/generated/M21-GAP-02710-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-78.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02710", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02710", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02711", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:79", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02711-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-79.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02711.py -- tests/files/web/generated/M21-GAP-02711-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-79.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02711", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02711", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02712", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02712-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02712.py -- tests/files/web/generated/M21-GAP-02712-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02712", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02712", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02713", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:80", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02713-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-80.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02713.py -- tests/files/web/generated/M21-GAP-02713-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-80.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02713", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02713", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02714", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:81", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02714-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-81.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02714.py -- tests/files/web/generated/M21-GAP-02714-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-81.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02714", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02714", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02715", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:82", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02715-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-82.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02715.py -- tests/files/web/generated/M21-GAP-02715-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-82.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02715", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02715", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02716", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:83", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02716-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-83.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02716.py -- tests/files/web/generated/M21-GAP-02716-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-83.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02716", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02716", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02717", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:84", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02717-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-84.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02717.py -- tests/files/web/generated/M21-GAP-02717-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-84.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02717", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02717", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02718", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:85", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02718-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-85.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02718.py -- tests/files/web/generated/M21-GAP-02718-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-85.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02718", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02718", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02719", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:86", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02719-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-86.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02719.py -- tests/files/web/generated/M21-GAP-02719-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-86.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02719", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02719", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02720", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:87", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02720-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-87.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02720.py -- tests/files/web/generated/M21-GAP-02720-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-87.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02720", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02720", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02721", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:88", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02721-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-88.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02721.py -- tests/files/web/generated/M21-GAP-02721-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-88.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02721", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02721", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02722", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:89", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02722-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-89.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02722.py -- tests/files/web/generated/M21-GAP-02722-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-89.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02722", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02722", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02723", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02723-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02723.py -- tests/files/web/generated/M21-GAP-02723-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02723", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02723", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02724", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:90", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02724-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-90.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02724.py -- tests/files/web/generated/M21-GAP-02724-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-90.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02724", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02724", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02725", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:91", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02725-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-91.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02725.py -- tests/files/web/generated/M21-GAP-02725-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-91.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02725", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02725", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02726", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:92", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02726-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-92.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02726.py -- tests/files/web/generated/M21-GAP-02726-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-92.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02726", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02726", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02727", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:93", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02727-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-93.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02727.py -- tests/files/web/generated/M21-GAP-02727-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-93.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02727", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02727", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02728", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:94", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02728-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-94.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02728.py -- tests/files/web/generated/M21-GAP-02728-keymap-item-Sequencer-SEQUENCE_EDITOR-WINDOW-94.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02728", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02728", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02729", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02729-keymap-item-Slip-Modal-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02729.py -- tests/files/web/generated/M21-GAP-02729-keymap-item-Slip-Modal-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02729", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02729", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02730", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02730-keymap-item-Slip-Modal-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02730.py -- tests/files/web/generated/M21-GAP-02730-keymap-item-Slip-Modal-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02730", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02730", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02731", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02731-keymap-item-Slip-Modal-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02731.py -- tests/files/web/generated/M21-GAP-02731-keymap-item-Slip-Modal-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02731", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02731", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02732", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02732-keymap-item-Slip-Modal-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02732.py -- tests/files/web/generated/M21-GAP-02732-keymap-item-Slip-Modal-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02732", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02732", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02733", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02733-keymap-item-Slip-Modal-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02733.py -- tests/files/web/generated/M21-GAP-02733-keymap-item-Slip-Modal-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02733", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02733", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02734", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02734-keymap-item-Slip-Modal-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02734.py -- tests/files/web/generated/M21-GAP-02734-keymap-item-Slip-Modal-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02734", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02734", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02735", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02735-keymap-item-Slip-Modal-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02735.py -- tests/files/web/generated/M21-GAP-02735-keymap-item-Slip-Modal-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02735", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02735", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02736", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02736-keymap-item-Slip-Modal-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02736.py -- tests/files/web/generated/M21-GAP-02736-keymap-item-Slip-Modal-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02736", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02736", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02737", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02737-keymap-item-Slip-Modal-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02737.py -- tests/files/web/generated/M21-GAP-02737-keymap-item-Slip-Modal-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02737", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02737", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02738", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02738-keymap-item-Slip-Modal-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02738.py -- tests/files/web/generated/M21-GAP-02738-keymap-item-Slip-Modal-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02738", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02738", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02739", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02739-keymap-item-Slip-Modal-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02739.py -- tests/files/web/generated/M21-GAP-02739-keymap-item-Slip-Modal-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02739", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02739", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02740", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02740-keymap-item-Slip-Modal-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02740.py -- tests/files/web/generated/M21-GAP-02740-keymap-item-Slip-Modal-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02740", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02740", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02741", + "gapId": "keymap-item:Spreadsheet Generic:SPREADSHEET:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02741-keymap-item-Spreadsheet-Generic-SPREADSHEET-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02741.py -- tests/files/web/generated/M21-GAP-02741-keymap-item-Spreadsheet-Generic-SPREADSHEET-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02741", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02741", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02742", + "gapId": "keymap-item:Spreadsheet Generic:SPREADSHEET:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02742-keymap-item-Spreadsheet-Generic-SPREADSHEET-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02742.py -- tests/files/web/generated/M21-GAP-02742-keymap-item-Spreadsheet-Generic-SPREADSHEET-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02742", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02742", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02743", + "gapId": "keymap-item:Spreadsheet Generic:SPREADSHEET:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02743-keymap-item-Spreadsheet-Generic-SPREADSHEET-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02743.py -- tests/files/web/generated/M21-GAP-02743-keymap-item-Spreadsheet-Generic-SPREADSHEET-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02743", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02743", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02744", + "gapId": "keymap-item:Spreadsheet Generic:SPREADSHEET:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02744-keymap-item-Spreadsheet-Generic-SPREADSHEET-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02744.py -- tests/files/web/generated/M21-GAP-02744-keymap-item-Spreadsheet-Generic-SPREADSHEET-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02744", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02744", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02745", + "gapId": "keymap-item:Spreadsheet Generic:SPREADSHEET:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02745-keymap-item-Spreadsheet-Generic-SPREADSHEET-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02745.py -- tests/files/web/generated/M21-GAP-02745-keymap-item-Spreadsheet-Generic-SPREADSHEET-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02745", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02745", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02746", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02746-keymap-item-Standard-Modal-Map-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02746.py -- tests/files/web/generated/M21-GAP-02746-keymap-item-Standard-Modal-Map-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02746", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02746", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02747", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02747-keymap-item-Standard-Modal-Map-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02747.py -- tests/files/web/generated/M21-GAP-02747-keymap-item-Standard-Modal-Map-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02747", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02747", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02748", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02748-keymap-item-Standard-Modal-Map-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02748.py -- tests/files/web/generated/M21-GAP-02748-keymap-item-Standard-Modal-Map-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02748", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02748", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02749", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02749-keymap-item-Standard-Modal-Map-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02749.py -- tests/files/web/generated/M21-GAP-02749-keymap-item-Standard-Modal-Map-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02749", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02749", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02750", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02750-keymap-item-Standard-Modal-Map-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02750.py -- tests/files/web/generated/M21-GAP-02750-keymap-item-Standard-Modal-Map-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02750", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02750", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02751", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02751-keymap-item-Standard-Modal-Map-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02751.py -- tests/files/web/generated/M21-GAP-02751-keymap-item-Standard-Modal-Map-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02751", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02751", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02752", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02752-keymap-item-Standard-Modal-Map-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02752.py -- tests/files/web/generated/M21-GAP-02752-keymap-item-Standard-Modal-Map-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02752", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02752", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02753", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02753-keymap-item-Standard-Modal-Map-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02753.py -- tests/files/web/generated/M21-GAP-02753-keymap-item-Standard-Modal-Map-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02753", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02753", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02754", + "gapId": "keymap-item:Text Generic:TEXT_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02754-keymap-item-Text-Generic-TEXT_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02754.py -- tests/files/web/generated/M21-GAP-02754-keymap-item-Text-Generic-TEXT_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02754", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02754", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02755", + "gapId": "keymap-item:Text Generic:TEXT_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02755-keymap-item-Text-Generic-TEXT_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02755.py -- tests/files/web/generated/M21-GAP-02755-keymap-item-Text-Generic-TEXT_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02755", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02755", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02756", + "gapId": "keymap-item:Text Generic:TEXT_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02756-keymap-item-Text-Generic-TEXT_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02756.py -- tests/files/web/generated/M21-GAP-02756-keymap-item-Text-Generic-TEXT_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02756", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02756", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02757", + "gapId": "keymap-item:Text Generic:TEXT_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02757-keymap-item-Text-Generic-TEXT_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02757.py -- tests/files/web/generated/M21-GAP-02757-keymap-item-Text-Generic-TEXT_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02757", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02757", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02758", + "gapId": "keymap-item:Text Generic:TEXT_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02758-keymap-item-Text-Generic-TEXT_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02758.py -- tests/files/web/generated/M21-GAP-02758-keymap-item-Text-Generic-TEXT_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02758", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02758", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02759", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02759-keymap-item-Text-TEXT_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02759.py -- tests/files/web/generated/M21-GAP-02759-keymap-item-Text-TEXT_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02759", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02759", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02760", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02760-keymap-item-Text-TEXT_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02760.py -- tests/files/web/generated/M21-GAP-02760-keymap-item-Text-TEXT_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02760", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02760", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02761", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02761-keymap-item-Text-TEXT_EDITOR-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02761.py -- tests/files/web/generated/M21-GAP-02761-keymap-item-Text-TEXT_EDITOR-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02761", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02761", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02762", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02762-keymap-item-Text-TEXT_EDITOR-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02762.py -- tests/files/web/generated/M21-GAP-02762-keymap-item-Text-TEXT_EDITOR-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02762", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02762", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02763", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02763-keymap-item-Text-TEXT_EDITOR-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02763.py -- tests/files/web/generated/M21-GAP-02763-keymap-item-Text-TEXT_EDITOR-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02763", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02763", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02764", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02764-keymap-item-Text-TEXT_EDITOR-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02764.py -- tests/files/web/generated/M21-GAP-02764-keymap-item-Text-TEXT_EDITOR-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02764", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02764", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02765", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02765-keymap-item-Text-TEXT_EDITOR-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02765.py -- tests/files/web/generated/M21-GAP-02765-keymap-item-Text-TEXT_EDITOR-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02765", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02765", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02766", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02766-keymap-item-Text-TEXT_EDITOR-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02766.py -- tests/files/web/generated/M21-GAP-02766-keymap-item-Text-TEXT_EDITOR-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02766", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02766", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02767", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02767-keymap-item-Text-TEXT_EDITOR-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02767.py -- tests/files/web/generated/M21-GAP-02767-keymap-item-Text-TEXT_EDITOR-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02767", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02767", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02768", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02768-keymap-item-Text-TEXT_EDITOR-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02768.py -- tests/files/web/generated/M21-GAP-02768-keymap-item-Text-TEXT_EDITOR-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02768", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02768", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02769", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02769-keymap-item-Text-TEXT_EDITOR-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02769.py -- tests/files/web/generated/M21-GAP-02769-keymap-item-Text-TEXT_EDITOR-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02769", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02769", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02770", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02770-keymap-item-Text-TEXT_EDITOR-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02770.py -- tests/files/web/generated/M21-GAP-02770-keymap-item-Text-TEXT_EDITOR-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02770", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02770", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02771", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02771-keymap-item-Text-TEXT_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02771.py -- tests/files/web/generated/M21-GAP-02771-keymap-item-Text-TEXT_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02771", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02771", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02772", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02772-keymap-item-Text-TEXT_EDITOR-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02772.py -- tests/files/web/generated/M21-GAP-02772-keymap-item-Text-TEXT_EDITOR-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02772", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02772", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02773", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02773-keymap-item-Text-TEXT_EDITOR-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02773.py -- tests/files/web/generated/M21-GAP-02773-keymap-item-Text-TEXT_EDITOR-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02773", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02773", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02774", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02774-keymap-item-Text-TEXT_EDITOR-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02774.py -- tests/files/web/generated/M21-GAP-02774-keymap-item-Text-TEXT_EDITOR-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02774", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02774", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02775", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02775-keymap-item-Text-TEXT_EDITOR-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02775.py -- tests/files/web/generated/M21-GAP-02775-keymap-item-Text-TEXT_EDITOR-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02775", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02775", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02776", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02776-keymap-item-Text-TEXT_EDITOR-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02776.py -- tests/files/web/generated/M21-GAP-02776-keymap-item-Text-TEXT_EDITOR-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02776", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02776", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02777", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02777-keymap-item-Text-TEXT_EDITOR-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02777.py -- tests/files/web/generated/M21-GAP-02777-keymap-item-Text-TEXT_EDITOR-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02777", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02777", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02778", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02778-keymap-item-Text-TEXT_EDITOR-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02778.py -- tests/files/web/generated/M21-GAP-02778-keymap-item-Text-TEXT_EDITOR-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02778", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02778", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02779", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02779-keymap-item-Text-TEXT_EDITOR-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02779.py -- tests/files/web/generated/M21-GAP-02779-keymap-item-Text-TEXT_EDITOR-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02779", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02779", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02780", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02780-keymap-item-Text-TEXT_EDITOR-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02780.py -- tests/files/web/generated/M21-GAP-02780-keymap-item-Text-TEXT_EDITOR-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02780", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02780", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02781", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02781-keymap-item-Text-TEXT_EDITOR-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02781.py -- tests/files/web/generated/M21-GAP-02781-keymap-item-Text-TEXT_EDITOR-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02781", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02781", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02782", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02782-keymap-item-Text-TEXT_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02782.py -- tests/files/web/generated/M21-GAP-02782-keymap-item-Text-TEXT_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02782", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02782", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02783", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02783-keymap-item-Text-TEXT_EDITOR-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02783.py -- tests/files/web/generated/M21-GAP-02783-keymap-item-Text-TEXT_EDITOR-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02783", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02783", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02784", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02784-keymap-item-Text-TEXT_EDITOR-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02784.py -- tests/files/web/generated/M21-GAP-02784-keymap-item-Text-TEXT_EDITOR-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02784", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02784", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02785", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02785-keymap-item-Text-TEXT_EDITOR-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02785.py -- tests/files/web/generated/M21-GAP-02785-keymap-item-Text-TEXT_EDITOR-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02785", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02785", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02786", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02786-keymap-item-Text-TEXT_EDITOR-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02786.py -- tests/files/web/generated/M21-GAP-02786-keymap-item-Text-TEXT_EDITOR-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02786", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02786", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02787", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02787-keymap-item-Text-TEXT_EDITOR-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02787.py -- tests/files/web/generated/M21-GAP-02787-keymap-item-Text-TEXT_EDITOR-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02787", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02787", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02788", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02788-keymap-item-Text-TEXT_EDITOR-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02788.py -- tests/files/web/generated/M21-GAP-02788-keymap-item-Text-TEXT_EDITOR-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02788", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02788", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02789", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02789-keymap-item-Text-TEXT_EDITOR-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02789.py -- tests/files/web/generated/M21-GAP-02789-keymap-item-Text-TEXT_EDITOR-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02789", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02789", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02790", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02790-keymap-item-Text-TEXT_EDITOR-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02790.py -- tests/files/web/generated/M21-GAP-02790-keymap-item-Text-TEXT_EDITOR-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02790", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02790", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02791", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02791-keymap-item-Text-TEXT_EDITOR-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02791.py -- tests/files/web/generated/M21-GAP-02791-keymap-item-Text-TEXT_EDITOR-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02791", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02791", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02792", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02792-keymap-item-Text-TEXT_EDITOR-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02792.py -- tests/files/web/generated/M21-GAP-02792-keymap-item-Text-TEXT_EDITOR-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02792", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02792", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02793", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02793-keymap-item-Text-TEXT_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02793.py -- tests/files/web/generated/M21-GAP-02793-keymap-item-Text-TEXT_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02793", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02793", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02794", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02794-keymap-item-Text-TEXT_EDITOR-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02794.py -- tests/files/web/generated/M21-GAP-02794-keymap-item-Text-TEXT_EDITOR-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02794", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02794", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02795", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02795-keymap-item-Text-TEXT_EDITOR-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02795.py -- tests/files/web/generated/M21-GAP-02795-keymap-item-Text-TEXT_EDITOR-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02795", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02795", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02796", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02796-keymap-item-Text-TEXT_EDITOR-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02796.py -- tests/files/web/generated/M21-GAP-02796-keymap-item-Text-TEXT_EDITOR-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02796", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02796", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02797", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02797-keymap-item-Text-TEXT_EDITOR-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02797.py -- tests/files/web/generated/M21-GAP-02797-keymap-item-Text-TEXT_EDITOR-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02797", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02797", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02798", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02798-keymap-item-Text-TEXT_EDITOR-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02798.py -- tests/files/web/generated/M21-GAP-02798-keymap-item-Text-TEXT_EDITOR-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02798", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02798", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02799", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02799-keymap-item-Text-TEXT_EDITOR-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02799.py -- tests/files/web/generated/M21-GAP-02799-keymap-item-Text-TEXT_EDITOR-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02799", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02799", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02800", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02800-keymap-item-Text-TEXT_EDITOR-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02800.py -- tests/files/web/generated/M21-GAP-02800-keymap-item-Text-TEXT_EDITOR-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02800", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02800", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02801", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02801-keymap-item-Text-TEXT_EDITOR-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02801.py -- tests/files/web/generated/M21-GAP-02801-keymap-item-Text-TEXT_EDITOR-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02801", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02801", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02802", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02802-keymap-item-Text-TEXT_EDITOR-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02802.py -- tests/files/web/generated/M21-GAP-02802-keymap-item-Text-TEXT_EDITOR-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02802", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02802", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02803", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02803-keymap-item-Text-TEXT_EDITOR-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02803.py -- tests/files/web/generated/M21-GAP-02803-keymap-item-Text-TEXT_EDITOR-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02803", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02803", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02804", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02804-keymap-item-Text-TEXT_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02804.py -- tests/files/web/generated/M21-GAP-02804-keymap-item-Text-TEXT_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02804", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02804", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02805", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02805-keymap-item-Text-TEXT_EDITOR-WINDOW-50.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02805.py -- tests/files/web/generated/M21-GAP-02805-keymap-item-Text-TEXT_EDITOR-WINDOW-50.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02805", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02805", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02806", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:51", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02806-keymap-item-Text-TEXT_EDITOR-WINDOW-51.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02806.py -- tests/files/web/generated/M21-GAP-02806-keymap-item-Text-TEXT_EDITOR-WINDOW-51.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02806", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02806", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02807", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:52", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02807-keymap-item-Text-TEXT_EDITOR-WINDOW-52.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02807.py -- tests/files/web/generated/M21-GAP-02807-keymap-item-Text-TEXT_EDITOR-WINDOW-52.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02807", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02807", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02808", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:53", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02808-keymap-item-Text-TEXT_EDITOR-WINDOW-53.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02808.py -- tests/files/web/generated/M21-GAP-02808-keymap-item-Text-TEXT_EDITOR-WINDOW-53.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02808", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02808", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02809", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:54", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02809-keymap-item-Text-TEXT_EDITOR-WINDOW-54.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02809.py -- tests/files/web/generated/M21-GAP-02809-keymap-item-Text-TEXT_EDITOR-WINDOW-54.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02809", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02809", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02810", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:55", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02810-keymap-item-Text-TEXT_EDITOR-WINDOW-55.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02810.py -- tests/files/web/generated/M21-GAP-02810-keymap-item-Text-TEXT_EDITOR-WINDOW-55.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02810", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02810", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02811", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:56", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02811-keymap-item-Text-TEXT_EDITOR-WINDOW-56.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02811.py -- tests/files/web/generated/M21-GAP-02811-keymap-item-Text-TEXT_EDITOR-WINDOW-56.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02811", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02811", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02812", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:57", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02812-keymap-item-Text-TEXT_EDITOR-WINDOW-57.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02812.py -- tests/files/web/generated/M21-GAP-02812-keymap-item-Text-TEXT_EDITOR-WINDOW-57.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02812", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02812", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02813", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:58", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02813-keymap-item-Text-TEXT_EDITOR-WINDOW-58.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02813.py -- tests/files/web/generated/M21-GAP-02813-keymap-item-Text-TEXT_EDITOR-WINDOW-58.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02813", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02813", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02814", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:59", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02814-keymap-item-Text-TEXT_EDITOR-WINDOW-59.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02814.py -- tests/files/web/generated/M21-GAP-02814-keymap-item-Text-TEXT_EDITOR-WINDOW-59.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02814", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02814", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02815", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02815-keymap-item-Text-TEXT_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02815.py -- tests/files/web/generated/M21-GAP-02815-keymap-item-Text-TEXT_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02815", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02815", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02816", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:60", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02816-keymap-item-Text-TEXT_EDITOR-WINDOW-60.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02816.py -- tests/files/web/generated/M21-GAP-02816-keymap-item-Text-TEXT_EDITOR-WINDOW-60.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02816", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02816", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02817", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:61", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02817-keymap-item-Text-TEXT_EDITOR-WINDOW-61.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02817.py -- tests/files/web/generated/M21-GAP-02817-keymap-item-Text-TEXT_EDITOR-WINDOW-61.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02817", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02817", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02818", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:62", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02818-keymap-item-Text-TEXT_EDITOR-WINDOW-62.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02818.py -- tests/files/web/generated/M21-GAP-02818-keymap-item-Text-TEXT_EDITOR-WINDOW-62.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02818", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02818", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02819", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:63", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02819-keymap-item-Text-TEXT_EDITOR-WINDOW-63.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02819.py -- tests/files/web/generated/M21-GAP-02819-keymap-item-Text-TEXT_EDITOR-WINDOW-63.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02819", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02819", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02820", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:64", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02820-keymap-item-Text-TEXT_EDITOR-WINDOW-64.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02820.py -- tests/files/web/generated/M21-GAP-02820-keymap-item-Text-TEXT_EDITOR-WINDOW-64.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02820", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02820", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02821", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:65", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02821-keymap-item-Text-TEXT_EDITOR-WINDOW-65.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02821.py -- tests/files/web/generated/M21-GAP-02821-keymap-item-Text-TEXT_EDITOR-WINDOW-65.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02821", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02821", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02822", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:66", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02822-keymap-item-Text-TEXT_EDITOR-WINDOW-66.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02822.py -- tests/files/web/generated/M21-GAP-02822-keymap-item-Text-TEXT_EDITOR-WINDOW-66.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02822", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02822", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02823", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:67", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02823-keymap-item-Text-TEXT_EDITOR-WINDOW-67.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02823.py -- tests/files/web/generated/M21-GAP-02823-keymap-item-Text-TEXT_EDITOR-WINDOW-67.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02823", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02823", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02824", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:68", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02824-keymap-item-Text-TEXT_EDITOR-WINDOW-68.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02824.py -- tests/files/web/generated/M21-GAP-02824-keymap-item-Text-TEXT_EDITOR-WINDOW-68.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02824", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02824", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02825", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:69", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02825-keymap-item-Text-TEXT_EDITOR-WINDOW-69.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02825.py -- tests/files/web/generated/M21-GAP-02825-keymap-item-Text-TEXT_EDITOR-WINDOW-69.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02825", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02825", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02826", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02826-keymap-item-Text-TEXT_EDITOR-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02826.py -- tests/files/web/generated/M21-GAP-02826-keymap-item-Text-TEXT_EDITOR-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02826", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02826", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02827", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:70", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02827-keymap-item-Text-TEXT_EDITOR-WINDOW-70.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02827.py -- tests/files/web/generated/M21-GAP-02827-keymap-item-Text-TEXT_EDITOR-WINDOW-70.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02827", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02827", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02828", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02828-keymap-item-Text-TEXT_EDITOR-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02828.py -- tests/files/web/generated/M21-GAP-02828-keymap-item-Text-TEXT_EDITOR-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02828", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02828", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02829", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02829-keymap-item-Text-TEXT_EDITOR-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02829.py -- tests/files/web/generated/M21-GAP-02829-keymap-item-Text-TEXT_EDITOR-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02829", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02829", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02830", + "gapId": "keymap-item:Time Scrub:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02830-keymap-item-Time-Scrub-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02830.py -- tests/files/web/generated/M21-GAP-02830-keymap-item-Time-Scrub-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02830", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02830", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02831", + "gapId": "keymap-item:Toolbar Popup:EMPTY:TEMPORARY:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02831-keymap-item-Toolbar-Popup-EMPTY-TEMPORARY-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02831.py -- tests/files/web/generated/M21-GAP-02831-keymap-item-Toolbar-Popup-EMPTY-TEMPORARY-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02831", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02831", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02832", + "gapId": "keymap-item:Toolbar Popup:EMPTY:TEMPORARY:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02832-keymap-item-Toolbar-Popup-EMPTY-TEMPORARY-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02832.py -- tests/files/web/generated/M21-GAP-02832-keymap-item-Toolbar-Popup-EMPTY-TEMPORARY-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02832", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02832", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02833", + "gapId": "keymap-item:Toolbar Popup:EMPTY:TEMPORARY:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02833-keymap-item-Toolbar-Popup-EMPTY-TEMPORARY-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02833.py -- tests/files/web/generated/M21-GAP-02833-keymap-item-Toolbar-Popup-EMPTY-TEMPORARY-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02833", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02833", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02834", + "gapId": "keymap-item:Toolbar Popup:EMPTY:TEMPORARY:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02834-keymap-item-Toolbar-Popup-EMPTY-TEMPORARY-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02834.py -- tests/files/web/generated/M21-GAP-02834-keymap-item-Toolbar-Popup-EMPTY-TEMPORARY-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02834", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02834", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02835", + "gapId": "keymap-item:Toolbar Popup:EMPTY:TEMPORARY:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02835-keymap-item-Toolbar-Popup-EMPTY-TEMPORARY-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02835.py -- tests/files/web/generated/M21-GAP-02835-keymap-item-Toolbar-Popup-EMPTY-TEMPORARY-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02835", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02835", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02836", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02836-keymap-item-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02836.py -- tests/files/web/generated/M21-GAP-02836-keymap-item-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02836", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02836", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02837", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02837-keymap-item-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02837.py -- tests/files/web/generated/M21-GAP-02837-keymap-item-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02837", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02837", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02838", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02838-keymap-item-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02838.py -- tests/files/web/generated/M21-GAP-02838-keymap-item-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02838", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02838", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02839", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02839-keymap-item-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02839.py -- tests/files/web/generated/M21-GAP-02839-keymap-item-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02839", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02839", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02840", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02840-keymap-item-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02840.py -- tests/files/web/generated/M21-GAP-02840-keymap-item-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02840", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02840", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02841", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02841-keymap-item-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02841.py -- tests/files/web/generated/M21-GAP-02841-keymap-item-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02841", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02841", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02842", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02842-keymap-item-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02842.py -- tests/files/web/generated/M21-GAP-02842-keymap-item-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02842", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02842", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02843", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02843-keymap-item-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02843.py -- tests/files/web/generated/M21-GAP-02843-keymap-item-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02843", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02843", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02844", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02844-keymap-item-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02844.py -- tests/files/web/generated/M21-GAP-02844-keymap-item-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02844", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02844", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02845", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02845-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02845.py -- tests/files/web/generated/M21-GAP-02845-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02845", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02845", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02846", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02846-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02846.py -- tests/files/web/generated/M21-GAP-02846-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02846", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02846", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02847", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02847-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02847.py -- tests/files/web/generated/M21-GAP-02847-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02847", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02847", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02848", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02848-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02848.py -- tests/files/web/generated/M21-GAP-02848-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02848", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02848", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02849", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02849-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02849.py -- tests/files/web/generated/M21-GAP-02849-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02849", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02849", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02850", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02850-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02850.py -- tests/files/web/generated/M21-GAP-02850-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02850", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02850", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02851", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02851-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02851.py -- tests/files/web/generated/M21-GAP-02851-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02851", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02851", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02852", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02852-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02852.py -- tests/files/web/generated/M21-GAP-02852-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02852", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02852", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02853", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02853-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02853.py -- tests/files/web/generated/M21-GAP-02853-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02853", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02853", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02854", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02854-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02854.py -- tests/files/web/generated/M21-GAP-02854-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02854", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02854", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02855", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02855-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02855.py -- tests/files/web/generated/M21-GAP-02855-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02855", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02855", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02856", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02856-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02856.py -- tests/files/web/generated/M21-GAP-02856-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02856", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02856", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02857", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02857-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02857.py -- tests/files/web/generated/M21-GAP-02857-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02857", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02857", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02858", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02858-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02858.py -- tests/files/web/generated/M21-GAP-02858-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02858", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02858", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02859", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02859-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02859.py -- tests/files/web/generated/M21-GAP-02859-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02859", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02859", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02860", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02860-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02860.py -- tests/files/web/generated/M21-GAP-02860-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02860", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02860", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02861", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02861-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02861.py -- tests/files/web/generated/M21-GAP-02861-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02861", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02861", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02862", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02862-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02862.py -- tests/files/web/generated/M21-GAP-02862-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02862", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02862", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02863", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02863-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02863.py -- tests/files/web/generated/M21-GAP-02863-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02863", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02863", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02864", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02864-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02864.py -- tests/files/web/generated/M21-GAP-02864-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02864", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02864", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02865", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02865-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02865.py -- tests/files/web/generated/M21-GAP-02865-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02865", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02865", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02866", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02866-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02866.py -- tests/files/web/generated/M21-GAP-02866-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02866", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02866", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02867", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02867-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02867.py -- tests/files/web/generated/M21-GAP-02867-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02867", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02867", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02868", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02868-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02868.py -- tests/files/web/generated/M21-GAP-02868-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02868", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02868", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02869", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02869-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02869.py -- tests/files/web/generated/M21-GAP-02869-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02869", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02869", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02870", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02870-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02870.py -- tests/files/web/generated/M21-GAP-02870-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02870", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02870", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02871", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02871-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02871.py -- tests/files/web/generated/M21-GAP-02871-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02871", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02871", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02872", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02872-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02872.py -- tests/files/web/generated/M21-GAP-02872-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02872", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02872", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02873", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02873-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02873.py -- tests/files/web/generated/M21-GAP-02873-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02873", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02873", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02874", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02874-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02874.py -- tests/files/web/generated/M21-GAP-02874-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02874", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02874", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02875", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02875-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02875.py -- tests/files/web/generated/M21-GAP-02875-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02875", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02875", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02876", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02876-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02876.py -- tests/files/web/generated/M21-GAP-02876-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02876", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02876", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02877", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02877-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02877.py -- tests/files/web/generated/M21-GAP-02877-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02877", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02877", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02878", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02878-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02878.py -- tests/files/web/generated/M21-GAP-02878-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02878", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02878", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02879", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02879-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02879.py -- tests/files/web/generated/M21-GAP-02879-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02879", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02879", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02880", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02880-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02880.py -- tests/files/web/generated/M21-GAP-02880-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02880", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02880", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02881", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02881-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02881.py -- tests/files/web/generated/M21-GAP-02881-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02881", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02881", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02882", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02882-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02882.py -- tests/files/web/generated/M21-GAP-02882-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02882", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02882", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02883", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02883-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02883.py -- tests/files/web/generated/M21-GAP-02883-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02883", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02883", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02884", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02884-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02884.py -- tests/files/web/generated/M21-GAP-02884-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02884", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02884", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02885", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02885-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02885.py -- tests/files/web/generated/M21-GAP-02885-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02885", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02885", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02886", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02886-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02886.py -- tests/files/web/generated/M21-GAP-02886-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02886", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02886", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02887", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02887-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02887.py -- tests/files/web/generated/M21-GAP-02887-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02887", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02887", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02888", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02888-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02888.py -- tests/files/web/generated/M21-GAP-02888-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02888", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02888", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02889", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02889-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02889.py -- tests/files/web/generated/M21-GAP-02889-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02889", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02889", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02890", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02890-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02890.py -- tests/files/web/generated/M21-GAP-02890-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02890", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02890", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02891", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02891-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-50.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02891.py -- tests/files/web/generated/M21-GAP-02891-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-50.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02891", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02891", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02892", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02892-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-51.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02892.py -- tests/files/web/generated/M21-GAP-02892-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-51.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02892", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02892", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02893", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:52", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02893-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-52.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02893.py -- tests/files/web/generated/M21-GAP-02893-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-52.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02893", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02893", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02894", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:53", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02894-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-53.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02894.py -- tests/files/web/generated/M21-GAP-02894-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-53.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02894", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02894", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02895", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:54", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02895-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-54.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02895.py -- tests/files/web/generated/M21-GAP-02895-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-54.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02895", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02895", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02896", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:55", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02896-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-55.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02896.py -- tests/files/web/generated/M21-GAP-02896-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-55.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02896", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02896", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02897", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02897-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02897.py -- tests/files/web/generated/M21-GAP-02897-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02897", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02897", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02898", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02898-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02898.py -- tests/files/web/generated/M21-GAP-02898-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02898", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02898", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02899", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02899-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02899.py -- tests/files/web/generated/M21-GAP-02899-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02899", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02899", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02900", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02900-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02900.py -- tests/files/web/generated/M21-GAP-02900-keymap-item-Transform-Modal-Map-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02900", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02900", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02901", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02901-keymap-item-UV-Editor-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02901.py -- tests/files/web/generated/M21-GAP-02901-keymap-item-UV-Editor-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02901", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02901", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02902", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02902-keymap-item-UV-Editor-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02902.py -- tests/files/web/generated/M21-GAP-02902-keymap-item-UV-Editor-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02902", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02902", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02903", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02903-keymap-item-UV-Editor-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02903.py -- tests/files/web/generated/M21-GAP-02903-keymap-item-UV-Editor-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02903", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02903", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02904", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02904-keymap-item-UV-Editor-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02904.py -- tests/files/web/generated/M21-GAP-02904-keymap-item-UV-Editor-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02904", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02904", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02905", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02905-keymap-item-UV-Editor-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02905.py -- tests/files/web/generated/M21-GAP-02905-keymap-item-UV-Editor-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02905", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02905", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02906", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02906-keymap-item-UV-Editor-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02906.py -- tests/files/web/generated/M21-GAP-02906-keymap-item-UV-Editor-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02906", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02906", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02907", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02907-keymap-item-UV-Editor-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02907.py -- tests/files/web/generated/M21-GAP-02907-keymap-item-UV-Editor-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02907", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02907", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02908", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02908-keymap-item-UV-Editor-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02908.py -- tests/files/web/generated/M21-GAP-02908-keymap-item-UV-Editor-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02908", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02908", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02909", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02909-keymap-item-UV-Editor-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02909.py -- tests/files/web/generated/M21-GAP-02909-keymap-item-UV-Editor-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02909", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02909", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02910", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02910-keymap-item-UV-Editor-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02910.py -- tests/files/web/generated/M21-GAP-02910-keymap-item-UV-Editor-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02910", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02910", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02911", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02911-keymap-item-UV-Editor-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02911.py -- tests/files/web/generated/M21-GAP-02911-keymap-item-UV-Editor-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02911", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02911", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02912", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02912-keymap-item-UV-Editor-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02912.py -- tests/files/web/generated/M21-GAP-02912-keymap-item-UV-Editor-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02912", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02912", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02913", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02913-keymap-item-UV-Editor-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02913.py -- tests/files/web/generated/M21-GAP-02913-keymap-item-UV-Editor-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02913", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02913", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02914", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02914-keymap-item-UV-Editor-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02914.py -- tests/files/web/generated/M21-GAP-02914-keymap-item-UV-Editor-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02914", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02914", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02915", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02915-keymap-item-UV-Editor-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02915.py -- tests/files/web/generated/M21-GAP-02915-keymap-item-UV-Editor-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02915", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02915", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02916", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02916-keymap-item-UV-Editor-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02916.py -- tests/files/web/generated/M21-GAP-02916-keymap-item-UV-Editor-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02916", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02916", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02917", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02917-keymap-item-UV-Editor-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02917.py -- tests/files/web/generated/M21-GAP-02917-keymap-item-UV-Editor-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02917", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02917", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02918", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02918-keymap-item-UV-Editor-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02918.py -- tests/files/web/generated/M21-GAP-02918-keymap-item-UV-Editor-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02918", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02918", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02919", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02919-keymap-item-UV-Editor-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02919.py -- tests/files/web/generated/M21-GAP-02919-keymap-item-UV-Editor-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02919", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02919", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02920", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02920-keymap-item-UV-Editor-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02920.py -- tests/files/web/generated/M21-GAP-02920-keymap-item-UV-Editor-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02920", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02920", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02921", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02921-keymap-item-UV-Editor-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02921.py -- tests/files/web/generated/M21-GAP-02921-keymap-item-UV-Editor-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02921", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02921", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02922", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02922-keymap-item-UV-Editor-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02922.py -- tests/files/web/generated/M21-GAP-02922-keymap-item-UV-Editor-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02922", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02922", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02923", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02923-keymap-item-UV-Editor-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02923.py -- tests/files/web/generated/M21-GAP-02923-keymap-item-UV-Editor-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02923", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02923", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02924", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02924-keymap-item-UV-Editor-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02924.py -- tests/files/web/generated/M21-GAP-02924-keymap-item-UV-Editor-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02924", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02924", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02925", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02925-keymap-item-UV-Editor-EMPTY-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02925.py -- tests/files/web/generated/M21-GAP-02925-keymap-item-UV-Editor-EMPTY-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02925", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02925", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02926", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02926-keymap-item-UV-Editor-EMPTY-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02926.py -- tests/files/web/generated/M21-GAP-02926-keymap-item-UV-Editor-EMPTY-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02926", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02926", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02927", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02927-keymap-item-UV-Editor-EMPTY-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02927.py -- tests/files/web/generated/M21-GAP-02927-keymap-item-UV-Editor-EMPTY-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02927", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02927", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02928", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02928-keymap-item-UV-Editor-EMPTY-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02928.py -- tests/files/web/generated/M21-GAP-02928-keymap-item-UV-Editor-EMPTY-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02928", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02928", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02929", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02929-keymap-item-UV-Editor-EMPTY-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02929.py -- tests/files/web/generated/M21-GAP-02929-keymap-item-UV-Editor-EMPTY-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02929", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02929", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02930", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02930-keymap-item-UV-Editor-EMPTY-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02930.py -- tests/files/web/generated/M21-GAP-02930-keymap-item-UV-Editor-EMPTY-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02930", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02930", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02931", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02931-keymap-item-UV-Editor-EMPTY-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02931.py -- tests/files/web/generated/M21-GAP-02931-keymap-item-UV-Editor-EMPTY-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02931", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02931", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02932", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02932-keymap-item-UV-Editor-EMPTY-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02932.py -- tests/files/web/generated/M21-GAP-02932-keymap-item-UV-Editor-EMPTY-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02932", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02932", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02933", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02933-keymap-item-UV-Editor-EMPTY-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02933.py -- tests/files/web/generated/M21-GAP-02933-keymap-item-UV-Editor-EMPTY-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02933", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02933", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02934", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02934-keymap-item-UV-Editor-EMPTY-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02934.py -- tests/files/web/generated/M21-GAP-02934-keymap-item-UV-Editor-EMPTY-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02934", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02934", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02935", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02935-keymap-item-UV-Editor-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02935.py -- tests/files/web/generated/M21-GAP-02935-keymap-item-UV-Editor-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02935", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02935", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02936", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02936-keymap-item-UV-Editor-EMPTY-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02936.py -- tests/files/web/generated/M21-GAP-02936-keymap-item-UV-Editor-EMPTY-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02936", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02936", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02937", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02937-keymap-item-UV-Editor-EMPTY-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02937.py -- tests/files/web/generated/M21-GAP-02937-keymap-item-UV-Editor-EMPTY-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02937", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02937", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02938", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02938-keymap-item-UV-Editor-EMPTY-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02938.py -- tests/files/web/generated/M21-GAP-02938-keymap-item-UV-Editor-EMPTY-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02938", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02938", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02939", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02939-keymap-item-UV-Editor-EMPTY-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02939.py -- tests/files/web/generated/M21-GAP-02939-keymap-item-UV-Editor-EMPTY-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02939", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02939", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02940", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02940-keymap-item-UV-Editor-EMPTY-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02940.py -- tests/files/web/generated/M21-GAP-02940-keymap-item-UV-Editor-EMPTY-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02940", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02940", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02941", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02941-keymap-item-UV-Editor-EMPTY-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02941.py -- tests/files/web/generated/M21-GAP-02941-keymap-item-UV-Editor-EMPTY-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02941", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02941", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02942", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02942-keymap-item-UV-Editor-EMPTY-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02942.py -- tests/files/web/generated/M21-GAP-02942-keymap-item-UV-Editor-EMPTY-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02942", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02942", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02943", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02943-keymap-item-UV-Editor-EMPTY-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02943.py -- tests/files/web/generated/M21-GAP-02943-keymap-item-UV-Editor-EMPTY-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02943", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02943", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02944", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02944-keymap-item-UV-Editor-EMPTY-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02944.py -- tests/files/web/generated/M21-GAP-02944-keymap-item-UV-Editor-EMPTY-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02944", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02944", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02945", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02945-keymap-item-UV-Editor-EMPTY-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02945.py -- tests/files/web/generated/M21-GAP-02945-keymap-item-UV-Editor-EMPTY-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02945", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02945", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02946", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02946-keymap-item-UV-Editor-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02946.py -- tests/files/web/generated/M21-GAP-02946-keymap-item-UV-Editor-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02946", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02946", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02947", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02947-keymap-item-UV-Editor-EMPTY-WINDOW-50.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02947.py -- tests/files/web/generated/M21-GAP-02947-keymap-item-UV-Editor-EMPTY-WINDOW-50.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02947", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02947", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02948", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02948-keymap-item-UV-Editor-EMPTY-WINDOW-51.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02948.py -- tests/files/web/generated/M21-GAP-02948-keymap-item-UV-Editor-EMPTY-WINDOW-51.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02948", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02948", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02949", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:52", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02949-keymap-item-UV-Editor-EMPTY-WINDOW-52.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02949.py -- tests/files/web/generated/M21-GAP-02949-keymap-item-UV-Editor-EMPTY-WINDOW-52.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02949", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02949", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02950", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:53", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02950-keymap-item-UV-Editor-EMPTY-WINDOW-53.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02950.py -- tests/files/web/generated/M21-GAP-02950-keymap-item-UV-Editor-EMPTY-WINDOW-53.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02950", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02950", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02951", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:54", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02951-keymap-item-UV-Editor-EMPTY-WINDOW-54.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02951.py -- tests/files/web/generated/M21-GAP-02951-keymap-item-UV-Editor-EMPTY-WINDOW-54.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02951", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02951", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02952", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:55", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02952-keymap-item-UV-Editor-EMPTY-WINDOW-55.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02952.py -- tests/files/web/generated/M21-GAP-02952-keymap-item-UV-Editor-EMPTY-WINDOW-55.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02952", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02952", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02953", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:56", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02953-keymap-item-UV-Editor-EMPTY-WINDOW-56.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02953.py -- tests/files/web/generated/M21-GAP-02953-keymap-item-UV-Editor-EMPTY-WINDOW-56.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02953", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02953", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02954", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:57", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02954-keymap-item-UV-Editor-EMPTY-WINDOW-57.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02954.py -- tests/files/web/generated/M21-GAP-02954-keymap-item-UV-Editor-EMPTY-WINDOW-57.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02954", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02954", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02955", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:58", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02955-keymap-item-UV-Editor-EMPTY-WINDOW-58.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02955.py -- tests/files/web/generated/M21-GAP-02955-keymap-item-UV-Editor-EMPTY-WINDOW-58.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02955", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02955", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02956", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:59", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02956-keymap-item-UV-Editor-EMPTY-WINDOW-59.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02956.py -- tests/files/web/generated/M21-GAP-02956-keymap-item-UV-Editor-EMPTY-WINDOW-59.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02956", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02956", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02957", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02957-keymap-item-UV-Editor-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02957.py -- tests/files/web/generated/M21-GAP-02957-keymap-item-UV-Editor-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02957", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02957", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02958", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:60", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02958-keymap-item-UV-Editor-EMPTY-WINDOW-60.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02958.py -- tests/files/web/generated/M21-GAP-02958-keymap-item-UV-Editor-EMPTY-WINDOW-60.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02958", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02958", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02959", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:61", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02959-keymap-item-UV-Editor-EMPTY-WINDOW-61.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02959.py -- tests/files/web/generated/M21-GAP-02959-keymap-item-UV-Editor-EMPTY-WINDOW-61.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02959", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02959", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02960", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:62", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02960-keymap-item-UV-Editor-EMPTY-WINDOW-62.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02960.py -- tests/files/web/generated/M21-GAP-02960-keymap-item-UV-Editor-EMPTY-WINDOW-62.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02960", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02960", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02961", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:63", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02961-keymap-item-UV-Editor-EMPTY-WINDOW-63.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02961.py -- tests/files/web/generated/M21-GAP-02961-keymap-item-UV-Editor-EMPTY-WINDOW-63.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02961", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02961", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02962", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:64", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02962-keymap-item-UV-Editor-EMPTY-WINDOW-64.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02962.py -- tests/files/web/generated/M21-GAP-02962-keymap-item-UV-Editor-EMPTY-WINDOW-64.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02962", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02962", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02963", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:65", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02963-keymap-item-UV-Editor-EMPTY-WINDOW-65.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02963.py -- tests/files/web/generated/M21-GAP-02963-keymap-item-UV-Editor-EMPTY-WINDOW-65.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02963", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02963", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02964", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:66", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02964-keymap-item-UV-Editor-EMPTY-WINDOW-66.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02964.py -- tests/files/web/generated/M21-GAP-02964-keymap-item-UV-Editor-EMPTY-WINDOW-66.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02964", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02964", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02965", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:67", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02965-keymap-item-UV-Editor-EMPTY-WINDOW-67.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02965.py -- tests/files/web/generated/M21-GAP-02965-keymap-item-UV-Editor-EMPTY-WINDOW-67.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02965", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02965", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02966", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:68", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02966-keymap-item-UV-Editor-EMPTY-WINDOW-68.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02966.py -- tests/files/web/generated/M21-GAP-02966-keymap-item-UV-Editor-EMPTY-WINDOW-68.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02966", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02966", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02967", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:69", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02967-keymap-item-UV-Editor-EMPTY-WINDOW-69.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02967.py -- tests/files/web/generated/M21-GAP-02967-keymap-item-UV-Editor-EMPTY-WINDOW-69.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02967", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02967", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02968", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02968-keymap-item-UV-Editor-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02968.py -- tests/files/web/generated/M21-GAP-02968-keymap-item-UV-Editor-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02968", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02968", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02969", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:70", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02969-keymap-item-UV-Editor-EMPTY-WINDOW-70.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02969.py -- tests/files/web/generated/M21-GAP-02969-keymap-item-UV-Editor-EMPTY-WINDOW-70.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02969", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02969", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02970", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:71", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02970-keymap-item-UV-Editor-EMPTY-WINDOW-71.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02970.py -- tests/files/web/generated/M21-GAP-02970-keymap-item-UV-Editor-EMPTY-WINDOW-71.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02970", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02970", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02971", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:72", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02971-keymap-item-UV-Editor-EMPTY-WINDOW-72.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02971.py -- tests/files/web/generated/M21-GAP-02971-keymap-item-UV-Editor-EMPTY-WINDOW-72.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02971", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02971", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02972", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:73", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02972-keymap-item-UV-Editor-EMPTY-WINDOW-73.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02972.py -- tests/files/web/generated/M21-GAP-02972-keymap-item-UV-Editor-EMPTY-WINDOW-73.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02972", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02972", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02973", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:74", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02973-keymap-item-UV-Editor-EMPTY-WINDOW-74.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02973.py -- tests/files/web/generated/M21-GAP-02973-keymap-item-UV-Editor-EMPTY-WINDOW-74.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02973", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02973", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02974", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:75", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02974-keymap-item-UV-Editor-EMPTY-WINDOW-75.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02974.py -- tests/files/web/generated/M21-GAP-02974-keymap-item-UV-Editor-EMPTY-WINDOW-75.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02974", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02974", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02975", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:76", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02975-keymap-item-UV-Editor-EMPTY-WINDOW-76.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02975.py -- tests/files/web/generated/M21-GAP-02975-keymap-item-UV-Editor-EMPTY-WINDOW-76.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02975", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02975", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02976", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:77", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02976-keymap-item-UV-Editor-EMPTY-WINDOW-77.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02976.py -- tests/files/web/generated/M21-GAP-02976-keymap-item-UV-Editor-EMPTY-WINDOW-77.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02976", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02976", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02977", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:78", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02977-keymap-item-UV-Editor-EMPTY-WINDOW-78.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02977.py -- tests/files/web/generated/M21-GAP-02977-keymap-item-UV-Editor-EMPTY-WINDOW-78.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02977", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02977", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02978", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:79", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02978-keymap-item-UV-Editor-EMPTY-WINDOW-79.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02978.py -- tests/files/web/generated/M21-GAP-02978-keymap-item-UV-Editor-EMPTY-WINDOW-79.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02978", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02978", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02979", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02979-keymap-item-UV-Editor-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02979.py -- tests/files/web/generated/M21-GAP-02979-keymap-item-UV-Editor-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02979", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02979", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02980", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:80", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02980-keymap-item-UV-Editor-EMPTY-WINDOW-80.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02980.py -- tests/files/web/generated/M21-GAP-02980-keymap-item-UV-Editor-EMPTY-WINDOW-80.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02980", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02980", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02981", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:81", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02981-keymap-item-UV-Editor-EMPTY-WINDOW-81.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02981.py -- tests/files/web/generated/M21-GAP-02981-keymap-item-UV-Editor-EMPTY-WINDOW-81.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02981", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02981", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02982", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:82", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02982-keymap-item-UV-Editor-EMPTY-WINDOW-82.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02982.py -- tests/files/web/generated/M21-GAP-02982-keymap-item-UV-Editor-EMPTY-WINDOW-82.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02982", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02982", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02983", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:83", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02983-keymap-item-UV-Editor-EMPTY-WINDOW-83.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02983.py -- tests/files/web/generated/M21-GAP-02983-keymap-item-UV-Editor-EMPTY-WINDOW-83.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02983", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02983", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02984", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:84", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02984-keymap-item-UV-Editor-EMPTY-WINDOW-84.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02984.py -- tests/files/web/generated/M21-GAP-02984-keymap-item-UV-Editor-EMPTY-WINDOW-84.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02984", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02984", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02985", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:85", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02985-keymap-item-UV-Editor-EMPTY-WINDOW-85.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02985.py -- tests/files/web/generated/M21-GAP-02985-keymap-item-UV-Editor-EMPTY-WINDOW-85.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02985", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02985", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02986", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:86", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02986-keymap-item-UV-Editor-EMPTY-WINDOW-86.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02986.py -- tests/files/web/generated/M21-GAP-02986-keymap-item-UV-Editor-EMPTY-WINDOW-86.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02986", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02986", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02987", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:87", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02987-keymap-item-UV-Editor-EMPTY-WINDOW-87.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02987.py -- tests/files/web/generated/M21-GAP-02987-keymap-item-UV-Editor-EMPTY-WINDOW-87.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02987", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02987", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02988", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02988-keymap-item-UV-Editor-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02988.py -- tests/files/web/generated/M21-GAP-02988-keymap-item-UV-Editor-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02988", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02988", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02989", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02989-keymap-item-User-Interface-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02989.py -- tests/files/web/generated/M21-GAP-02989-keymap-item-User-Interface-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02989", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02989", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02990", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02990-keymap-item-User-Interface-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02990.py -- tests/files/web/generated/M21-GAP-02990-keymap-item-User-Interface-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02990", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02990", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02991", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02991-keymap-item-User-Interface-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02991.py -- tests/files/web/generated/M21-GAP-02991-keymap-item-User-Interface-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02991", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02991", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02992", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02992-keymap-item-User-Interface-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02992.py -- tests/files/web/generated/M21-GAP-02992-keymap-item-User-Interface-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02992", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02992", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02993", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02993-keymap-item-User-Interface-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02993.py -- tests/files/web/generated/M21-GAP-02993-keymap-item-User-Interface-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02993", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02993", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02994", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02994-keymap-item-User-Interface-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02994.py -- tests/files/web/generated/M21-GAP-02994-keymap-item-User-Interface-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02994", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02994", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02995", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02995-keymap-item-User-Interface-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02995.py -- tests/files/web/generated/M21-GAP-02995-keymap-item-User-Interface-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02995", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02995", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02996", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02996-keymap-item-User-Interface-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02996.py -- tests/files/web/generated/M21-GAP-02996-keymap-item-User-Interface-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02996", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02996", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02997", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02997-keymap-item-User-Interface-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02997.py -- tests/files/web/generated/M21-GAP-02997-keymap-item-User-Interface-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02997", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02997", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02998", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02998-keymap-item-User-Interface-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02998.py -- tests/files/web/generated/M21-GAP-02998-keymap-item-User-Interface-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02998", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02998", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-02999", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-02999-keymap-item-User-Interface-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-02999.py -- tests/files/web/generated/M21-GAP-02999-keymap-item-User-Interface-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-02999", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-02999", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03000", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03000-keymap-item-User-Interface-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03000.py -- tests/files/web/generated/M21-GAP-03000-keymap-item-User-Interface-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03000", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03000", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03001", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03001-keymap-item-User-Interface-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03001.py -- tests/files/web/generated/M21-GAP-03001-keymap-item-User-Interface-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03001", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03001", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03002", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03002-keymap-item-User-Interface-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03002.py -- tests/files/web/generated/M21-GAP-03002-keymap-item-User-Interface-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03002", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03002", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03003", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03003-keymap-item-User-Interface-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03003.py -- tests/files/web/generated/M21-GAP-03003-keymap-item-User-Interface-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03003", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03003", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03004", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03004-keymap-item-User-Interface-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03004.py -- tests/files/web/generated/M21-GAP-03004-keymap-item-User-Interface-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03004", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03004", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03005", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03005-keymap-item-User-Interface-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03005.py -- tests/files/web/generated/M21-GAP-03005-keymap-item-User-Interface-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03005", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03005", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03006", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03006-keymap-item-User-Interface-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03006.py -- tests/files/web/generated/M21-GAP-03006-keymap-item-User-Interface-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03006", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03006", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03007", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03007-keymap-item-User-Interface-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03007.py -- tests/files/web/generated/M21-GAP-03007-keymap-item-User-Interface-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03007", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03007", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03008", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03008-keymap-item-User-Interface-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03008.py -- tests/files/web/generated/M21-GAP-03008-keymap-item-User-Interface-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03008", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03008", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03009", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03009-keymap-item-User-Interface-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03009.py -- tests/files/web/generated/M21-GAP-03009-keymap-item-User-Interface-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03009", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03009", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03010", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03010-keymap-item-User-Interface-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03010.py -- tests/files/web/generated/M21-GAP-03010-keymap-item-User-Interface-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03010", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03010", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03011", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03011-keymap-item-User-Interface-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03011.py -- tests/files/web/generated/M21-GAP-03011-keymap-item-User-Interface-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03011", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03011", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03012", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03012-keymap-item-User-Interface-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03012.py -- tests/files/web/generated/M21-GAP-03012-keymap-item-User-Interface-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03012", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03012", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03013", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03013-keymap-item-User-Interface-EMPTY-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03013.py -- tests/files/web/generated/M21-GAP-03013-keymap-item-User-Interface-EMPTY-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03013", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03013", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03014", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03014-keymap-item-User-Interface-EMPTY-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03014.py -- tests/files/web/generated/M21-GAP-03014-keymap-item-User-Interface-EMPTY-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03014", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03014", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03015", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03015-keymap-item-User-Interface-EMPTY-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03015.py -- tests/files/web/generated/M21-GAP-03015-keymap-item-User-Interface-EMPTY-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03015", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03015", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03016", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03016-keymap-item-User-Interface-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03016.py -- tests/files/web/generated/M21-GAP-03016-keymap-item-User-Interface-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03016", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03016", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03017", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03017-keymap-item-User-Interface-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03017.py -- tests/files/web/generated/M21-GAP-03017-keymap-item-User-Interface-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03017", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03017", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03018", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03018-keymap-item-User-Interface-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03018.py -- tests/files/web/generated/M21-GAP-03018-keymap-item-User-Interface-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03018", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03018", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03019", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03019-keymap-item-User-Interface-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03019.py -- tests/files/web/generated/M21-GAP-03019-keymap-item-User-Interface-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03019", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03019", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03020", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03020-keymap-item-User-Interface-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03020.py -- tests/files/web/generated/M21-GAP-03020-keymap-item-User-Interface-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03020", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03020", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03021", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03021-keymap-item-User-Interface-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03021.py -- tests/files/web/generated/M21-GAP-03021-keymap-item-User-Interface-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03021", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03021", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03022", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03022-keymap-item-Vertex-Paint-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03022.py -- tests/files/web/generated/M21-GAP-03022-keymap-item-Vertex-Paint-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03022", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03022", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03023", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03023-keymap-item-Vertex-Paint-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03023.py -- tests/files/web/generated/M21-GAP-03023-keymap-item-Vertex-Paint-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03023", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03023", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03024", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03024-keymap-item-Vertex-Paint-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03024.py -- tests/files/web/generated/M21-GAP-03024-keymap-item-Vertex-Paint-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03024", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03024", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03025", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03025-keymap-item-Vertex-Paint-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03025.py -- tests/files/web/generated/M21-GAP-03025-keymap-item-Vertex-Paint-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03025", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03025", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03026", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03026-keymap-item-Vertex-Paint-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03026.py -- tests/files/web/generated/M21-GAP-03026-keymap-item-Vertex-Paint-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03026", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03026", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03027", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03027-keymap-item-Vertex-Paint-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03027.py -- tests/files/web/generated/M21-GAP-03027-keymap-item-Vertex-Paint-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03027", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03027", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03028", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03028-keymap-item-Vertex-Paint-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03028.py -- tests/files/web/generated/M21-GAP-03028-keymap-item-Vertex-Paint-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03028", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03028", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03029", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03029-keymap-item-Vertex-Paint-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03029.py -- tests/files/web/generated/M21-GAP-03029-keymap-item-Vertex-Paint-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03029", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03029", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03030", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03030-keymap-item-Vertex-Paint-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03030.py -- tests/files/web/generated/M21-GAP-03030-keymap-item-Vertex-Paint-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03030", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03030", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03031", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03031-keymap-item-Vertex-Paint-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03031.py -- tests/files/web/generated/M21-GAP-03031-keymap-item-Vertex-Paint-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03031", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03031", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03032", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03032-keymap-item-Vertex-Paint-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03032.py -- tests/files/web/generated/M21-GAP-03032-keymap-item-Vertex-Paint-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03032", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03032", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03033", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03033-keymap-item-Vertex-Paint-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03033.py -- tests/files/web/generated/M21-GAP-03033-keymap-item-Vertex-Paint-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03033", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03033", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03034", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03034-keymap-item-Vertex-Paint-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03034.py -- tests/files/web/generated/M21-GAP-03034-keymap-item-Vertex-Paint-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03034", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03034", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03035", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03035-keymap-item-Vertex-Paint-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03035.py -- tests/files/web/generated/M21-GAP-03035-keymap-item-Vertex-Paint-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03035", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03035", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03036", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03036-keymap-item-Vertex-Paint-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03036.py -- tests/files/web/generated/M21-GAP-03036-keymap-item-Vertex-Paint-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03036", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03036", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03037", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03037-keymap-item-Vertex-Paint-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03037.py -- tests/files/web/generated/M21-GAP-03037-keymap-item-Vertex-Paint-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03037", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03037", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03038", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03038-keymap-item-Vertex-Paint-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03038.py -- tests/files/web/generated/M21-GAP-03038-keymap-item-Vertex-Paint-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03038", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03038", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03039", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03039-keymap-item-Vertex-Paint-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03039.py -- tests/files/web/generated/M21-GAP-03039-keymap-item-Vertex-Paint-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03039", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03039", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03040", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03040-keymap-item-Vertex-Paint-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03040.py -- tests/files/web/generated/M21-GAP-03040-keymap-item-Vertex-Paint-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03040", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03040", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03041", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03041-keymap-item-Vertex-Paint-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03041.py -- tests/files/web/generated/M21-GAP-03041-keymap-item-Vertex-Paint-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03041", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03041", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03042", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03042-keymap-item-Vertex-Paint-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03042.py -- tests/files/web/generated/M21-GAP-03042-keymap-item-Vertex-Paint-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03042", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03042", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03043", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03043-keymap-item-Vertex-Paint-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03043.py -- tests/files/web/generated/M21-GAP-03043-keymap-item-Vertex-Paint-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03043", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03043", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03044", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03044-keymap-item-Vertex-Paint-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03044.py -- tests/files/web/generated/M21-GAP-03044-keymap-item-Vertex-Paint-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03044", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03044", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03045", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03045-keymap-item-Vertex-Paint-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03045.py -- tests/files/web/generated/M21-GAP-03045-keymap-item-Vertex-Paint-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03045", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03045", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03046", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03046-keymap-item-Vertex-Paint-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03046.py -- tests/files/web/generated/M21-GAP-03046-keymap-item-Vertex-Paint-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03046", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03046", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03047", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03047-keymap-item-Vertex-Paint-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03047.py -- tests/files/web/generated/M21-GAP-03047-keymap-item-Vertex-Paint-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03047", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03047", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03048", + "gapId": "keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03048-keymap-item-Video-Sequence-Editor-SEQUENCE_EDITOR-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03048.py -- tests/files/web/generated/M21-GAP-03048-keymap-item-Video-Sequence-Editor-SEQUENCE_EDITOR-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03048", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03048", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03049", + "gapId": "keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03049-keymap-item-Video-Sequence-Editor-SEQUENCE_EDITOR-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03049.py -- tests/files/web/generated/M21-GAP-03049-keymap-item-Video-Sequence-Editor-SEQUENCE_EDITOR-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03049", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03049", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03050", + "gapId": "keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03050-keymap-item-Video-Sequence-Editor-SEQUENCE_EDITOR-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03050.py -- tests/files/web/generated/M21-GAP-03050-keymap-item-Video-Sequence-Editor-SEQUENCE_EDITOR-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03050", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03050", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03051", + "gapId": "keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03051-keymap-item-Video-Sequence-Editor-SEQUENCE_EDITOR-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03051.py -- tests/files/web/generated/M21-GAP-03051-keymap-item-Video-Sequence-Editor-SEQUENCE_EDITOR-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03051", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03051", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03052", + "gapId": "keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03052-keymap-item-Video-Sequence-Editor-SEQUENCE_EDITOR-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03052.py -- tests/files/web/generated/M21-GAP-03052-keymap-item-Video-Sequence-Editor-SEQUENCE_EDITOR-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03052", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03052", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03053", + "gapId": "keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03053-keymap-item-Video-Sequence-Editor-SEQUENCE_EDITOR-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03053.py -- tests/files/web/generated/M21-GAP-03053-keymap-item-Video-Sequence-Editor-SEQUENCE_EDITOR-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03053", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03053", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03054", + "gapId": "keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03054-keymap-item-Video-Sequence-Editor-SEQUENCE_EDITOR-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03054.py -- tests/files/web/generated/M21-GAP-03054-keymap-item-Video-Sequence-Editor-SEQUENCE_EDITOR-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03054", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03054", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03055", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03055-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03055.py -- tests/files/web/generated/M21-GAP-03055-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03055", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03055", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03056", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03056-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03056.py -- tests/files/web/generated/M21-GAP-03056-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03056", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03056", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03057", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03057-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03057.py -- tests/files/web/generated/M21-GAP-03057-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03057", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03057", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03058", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03058-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03058.py -- tests/files/web/generated/M21-GAP-03058-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03058", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03058", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03059", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03059-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03059.py -- tests/files/web/generated/M21-GAP-03059-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03059", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03059", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03060", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03060-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03060.py -- tests/files/web/generated/M21-GAP-03060-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03060", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03060", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03061", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03061-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03061.py -- tests/files/web/generated/M21-GAP-03061-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03061", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03061", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03062", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03062-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03062.py -- tests/files/web/generated/M21-GAP-03062-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03062", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03062", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03063", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03063-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03063.py -- tests/files/web/generated/M21-GAP-03063-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03063", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03063", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03064", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03064-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03064.py -- tests/files/web/generated/M21-GAP-03064-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03064", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03064", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03065", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03065-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03065.py -- tests/files/web/generated/M21-GAP-03065-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03065", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03065", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03066", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03066-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03066.py -- tests/files/web/generated/M21-GAP-03066-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03066", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03066", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03067", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03067-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03067.py -- tests/files/web/generated/M21-GAP-03067-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03067", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03067", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03068", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03068-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03068.py -- tests/files/web/generated/M21-GAP-03068-keymap-item-View2D-Buttons-List-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03068", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03068", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03069", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03069-keymap-item-View2D-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03069.py -- tests/files/web/generated/M21-GAP-03069-keymap-item-View2D-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03069", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03069", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03070", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03070-keymap-item-View2D-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03070.py -- tests/files/web/generated/M21-GAP-03070-keymap-item-View2D-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03070", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03070", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03071", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03071-keymap-item-View2D-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03071.py -- tests/files/web/generated/M21-GAP-03071-keymap-item-View2D-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03071", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03071", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03072", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03072-keymap-item-View2D-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03072.py -- tests/files/web/generated/M21-GAP-03072-keymap-item-View2D-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03072", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03072", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03073", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03073-keymap-item-View2D-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03073.py -- tests/files/web/generated/M21-GAP-03073-keymap-item-View2D-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03073", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03073", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03074", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03074-keymap-item-View2D-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03074.py -- tests/files/web/generated/M21-GAP-03074-keymap-item-View2D-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03074", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03074", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03075", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03075-keymap-item-View2D-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03075.py -- tests/files/web/generated/M21-GAP-03075-keymap-item-View2D-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03075", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03075", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03076", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03076-keymap-item-View2D-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03076.py -- tests/files/web/generated/M21-GAP-03076-keymap-item-View2D-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03076", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03076", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03077", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03077-keymap-item-View2D-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03077.py -- tests/files/web/generated/M21-GAP-03077-keymap-item-View2D-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03077", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03077", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03078", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03078-keymap-item-View2D-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03078.py -- tests/files/web/generated/M21-GAP-03078-keymap-item-View2D-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03078", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03078", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03079", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03079-keymap-item-View2D-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03079.py -- tests/files/web/generated/M21-GAP-03079-keymap-item-View2D-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03079", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03079", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03080", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03080-keymap-item-View2D-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03080.py -- tests/files/web/generated/M21-GAP-03080-keymap-item-View2D-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03080", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03080", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03081", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03081-keymap-item-View2D-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03081.py -- tests/files/web/generated/M21-GAP-03081-keymap-item-View2D-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03081", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03081", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03082", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03082-keymap-item-View2D-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03082.py -- tests/files/web/generated/M21-GAP-03082-keymap-item-View2D-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03082", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03082", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03083", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03083-keymap-item-View2D-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03083.py -- tests/files/web/generated/M21-GAP-03083-keymap-item-View2D-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03083", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03083", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03084", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03084-keymap-item-View2D-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03084.py -- tests/files/web/generated/M21-GAP-03084-keymap-item-View2D-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03084", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03084", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03085", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03085-keymap-item-View2D-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03085.py -- tests/files/web/generated/M21-GAP-03085-keymap-item-View2D-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03085", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03085", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03086", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03086-keymap-item-View2D-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03086.py -- tests/files/web/generated/M21-GAP-03086-keymap-item-View2D-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03086", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03086", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03087", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03087-keymap-item-View2D-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03087.py -- tests/files/web/generated/M21-GAP-03087-keymap-item-View2D-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03087", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03087", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03088", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03088-keymap-item-View2D-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03088.py -- tests/files/web/generated/M21-GAP-03088-keymap-item-View2D-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03088", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03088", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03089", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03089-keymap-item-View2D-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03089.py -- tests/files/web/generated/M21-GAP-03089-keymap-item-View2D-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03089", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03089", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03090", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03090-keymap-item-View2D-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03090.py -- tests/files/web/generated/M21-GAP-03090-keymap-item-View2D-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03090", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03090", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03091", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03091-keymap-item-View2D-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03091.py -- tests/files/web/generated/M21-GAP-03091-keymap-item-View2D-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03091", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03091", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03092", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03092-keymap-item-View2D-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03092.py -- tests/files/web/generated/M21-GAP-03092-keymap-item-View2D-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03092", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03092", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03093", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03093-keymap-item-View2D-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03093.py -- tests/files/web/generated/M21-GAP-03093-keymap-item-View2D-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03093", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03093", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03094", + "gapId": "keymap-item:View3D Dolly Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03094-keymap-item-View3D-Dolly-Modal-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03094.py -- tests/files/web/generated/M21-GAP-03094-keymap-item-View3D-Dolly-Modal-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03094", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03094", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03095", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03095-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03095.py -- tests/files/web/generated/M21-GAP-03095-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03095", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03095", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03096", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03096-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03096.py -- tests/files/web/generated/M21-GAP-03096-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03096", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03096", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03097", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03097-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03097.py -- tests/files/web/generated/M21-GAP-03097-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03097", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03097", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03098", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03098-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03098.py -- tests/files/web/generated/M21-GAP-03098-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03098", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03098", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03099", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03099-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03099.py -- tests/files/web/generated/M21-GAP-03099-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03099", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03099", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03100", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03100-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03100.py -- tests/files/web/generated/M21-GAP-03100-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03100", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03100", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03101", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03101-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03101.py -- tests/files/web/generated/M21-GAP-03101-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03101", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03101", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03102", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03102-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03102.py -- tests/files/web/generated/M21-GAP-03102-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03102", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03102", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03103", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03103-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03103.py -- tests/files/web/generated/M21-GAP-03103-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03103", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03103", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03104", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03104-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03104.py -- tests/files/web/generated/M21-GAP-03104-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03104", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03104", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03105", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03105-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03105.py -- tests/files/web/generated/M21-GAP-03105-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03105", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03105", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03106", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03106-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03106.py -- tests/files/web/generated/M21-GAP-03106-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03106", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03106", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03107", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03107-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03107.py -- tests/files/web/generated/M21-GAP-03107-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03107", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03107", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03108", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03108-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03108.py -- tests/files/web/generated/M21-GAP-03108-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03108", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03108", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03109", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03109-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03109.py -- tests/files/web/generated/M21-GAP-03109-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03109", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03109", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03110", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03110-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03110.py -- tests/files/web/generated/M21-GAP-03110-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03110", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03110", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03111", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03111-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03111.py -- tests/files/web/generated/M21-GAP-03111-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03111", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03111", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03112", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03112-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03112.py -- tests/files/web/generated/M21-GAP-03112-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03112", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03112", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03113", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03113-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03113.py -- tests/files/web/generated/M21-GAP-03113-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03113", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03113", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03114", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03114-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03114.py -- tests/files/web/generated/M21-GAP-03114-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03114", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03114", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03115", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03115-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03115.py -- tests/files/web/generated/M21-GAP-03115-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03115", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03115", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03116", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03116-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03116.py -- tests/files/web/generated/M21-GAP-03116-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03116", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03116", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03117", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03117-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03117.py -- tests/files/web/generated/M21-GAP-03117-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03117", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03117", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03118", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03118-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03118.py -- tests/files/web/generated/M21-GAP-03118-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03118", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03118", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03119", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03119-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03119.py -- tests/files/web/generated/M21-GAP-03119-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03119", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03119", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03120", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03120-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03120.py -- tests/files/web/generated/M21-GAP-03120-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03120", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03120", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03121", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03121-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03121.py -- tests/files/web/generated/M21-GAP-03121-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03121", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03121", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03122", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03122-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03122.py -- tests/files/web/generated/M21-GAP-03122-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03122", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03122", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03123", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03123-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03123.py -- tests/files/web/generated/M21-GAP-03123-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03123", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03123", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03124", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03124-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03124.py -- tests/files/web/generated/M21-GAP-03124-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03124", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03124", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03125", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03125-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03125.py -- tests/files/web/generated/M21-GAP-03125-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03125", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03125", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03126", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03126-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03126.py -- tests/files/web/generated/M21-GAP-03126-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03126", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03126", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03127", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03127-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03127.py -- tests/files/web/generated/M21-GAP-03127-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03127", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03127", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03128", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03128-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03128.py -- tests/files/web/generated/M21-GAP-03128-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03128", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03128", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03129", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03129-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03129.py -- tests/files/web/generated/M21-GAP-03129-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03129", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03129", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03130", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03130-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03130.py -- tests/files/web/generated/M21-GAP-03130-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03130", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03130", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03131", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03131-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03131.py -- tests/files/web/generated/M21-GAP-03131-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03131", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03131", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03132", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03132-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03132.py -- tests/files/web/generated/M21-GAP-03132-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03132", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03132", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03133", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03133-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03133.py -- tests/files/web/generated/M21-GAP-03133-keymap-item-View3D-Fly-Modal-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03133", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03133", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03134", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03134-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03134.py -- tests/files/web/generated/M21-GAP-03134-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03134", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03134", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03135", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03135-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03135.py -- tests/files/web/generated/M21-GAP-03135-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03135", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03135", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03136", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03136-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03136.py -- tests/files/web/generated/M21-GAP-03136-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03136", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03136", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03137", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03137-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03137.py -- tests/files/web/generated/M21-GAP-03137-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03137", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03137", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03138", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03138-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03138.py -- tests/files/web/generated/M21-GAP-03138-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03138", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03138", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03139", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03139-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03139.py -- tests/files/web/generated/M21-GAP-03139-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03139", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03139", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03140", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03140-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03140.py -- tests/files/web/generated/M21-GAP-03140-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03140", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03140", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03141", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03141-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03141.py -- tests/files/web/generated/M21-GAP-03141-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03141", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03141", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03142", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03142-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03142.py -- tests/files/web/generated/M21-GAP-03142-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03142", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03142", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03143", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03143-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03143.py -- tests/files/web/generated/M21-GAP-03143-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03143", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03143", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03144", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03144-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03144.py -- tests/files/web/generated/M21-GAP-03144-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03144", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03144", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03145", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03145-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03145.py -- tests/files/web/generated/M21-GAP-03145-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03145", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03145", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03146", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03146-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03146.py -- tests/files/web/generated/M21-GAP-03146-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03146", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03146", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03147", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03147-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03147.py -- tests/files/web/generated/M21-GAP-03147-keymap-item-View3D-Gesture-Circle-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03147", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03147", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03148", + "gapId": "keymap-item:View3D Move Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03148-keymap-item-View3D-Move-Modal-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03148.py -- tests/files/web/generated/M21-GAP-03148-keymap-item-View3D-Move-Modal-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03148", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03148", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03149", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03149-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03149.py -- tests/files/web/generated/M21-GAP-03149-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03149", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03149", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03150", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03150-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03150.py -- tests/files/web/generated/M21-GAP-03150-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03150", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03150", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03151", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03151-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03151.py -- tests/files/web/generated/M21-GAP-03151-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03151", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03151", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03152", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03152-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03152.py -- tests/files/web/generated/M21-GAP-03152-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03152", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03152", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03153", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03153-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03153.py -- tests/files/web/generated/M21-GAP-03153-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03153", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03153", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03154", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03154-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03154.py -- tests/files/web/generated/M21-GAP-03154-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03154", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03154", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03155", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03155-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03155.py -- tests/files/web/generated/M21-GAP-03155-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03155", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03155", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03156", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03156-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03156.py -- tests/files/web/generated/M21-GAP-03156-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03156", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03156", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03157", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03157-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03157.py -- tests/files/web/generated/M21-GAP-03157-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03157", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03157", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03158", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03158-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03158.py -- tests/files/web/generated/M21-GAP-03158-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03158", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03158", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03159", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03159-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03159.py -- tests/files/web/generated/M21-GAP-03159-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03159", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03159", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03160", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03160-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03160.py -- tests/files/web/generated/M21-GAP-03160-keymap-item-View3D-Placement-Modal-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03160", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03160", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03161", + "gapId": "keymap-item:View3D Rotate Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03161-keymap-item-View3D-Rotate-Modal-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03161.py -- tests/files/web/generated/M21-GAP-03161-keymap-item-View3D-Rotate-Modal-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03161", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03161", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03162", + "gapId": "keymap-item:View3D Rotate Modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03162-keymap-item-View3D-Rotate-Modal-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03162.py -- tests/files/web/generated/M21-GAP-03162-keymap-item-View3D-Rotate-Modal-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03162", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03162", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03163", + "gapId": "keymap-item:View3D Rotate Modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03163-keymap-item-View3D-Rotate-Modal-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03163.py -- tests/files/web/generated/M21-GAP-03163-keymap-item-View3D-Rotate-Modal-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03163", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03163", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03164", + "gapId": "keymap-item:View3D Rotate Modal:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03164-keymap-item-View3D-Rotate-Modal-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03164.py -- tests/files/web/generated/M21-GAP-03164-keymap-item-View3D-Rotate-Modal-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03164", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03164", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03165", + "gapId": "keymap-item:View3D Rotate Modal:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03165-keymap-item-View3D-Rotate-Modal-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03165.py -- tests/files/web/generated/M21-GAP-03165-keymap-item-View3D-Rotate-Modal-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03165", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03165", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03166", + "gapId": "keymap-item:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03166-keymap-item-View3D-VR-Location-Scouting-Capture-Review-Modal-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03166.py -- tests/files/web/generated/M21-GAP-03166-keymap-item-View3D-VR-Location-Scouting-Capture-Review-Modal-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03166", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03166", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03167", + "gapId": "keymap-item:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03167-keymap-item-View3D-VR-Location-Scouting-Capture-Review-Modal-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03167.py -- tests/files/web/generated/M21-GAP-03167-keymap-item-View3D-VR-Location-Scouting-Capture-Review-Modal-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03167", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03167", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03168", + "gapId": "keymap-item:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03168-keymap-item-View3D-VR-Location-Scouting-Capture-Review-Modal-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03168.py -- tests/files/web/generated/M21-GAP-03168-keymap-item-View3D-VR-Location-Scouting-Capture-Review-Modal-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03168", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03168", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03169", + "gapId": "keymap-item:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03169-keymap-item-View3D-VR-Location-Scouting-Capture-Review-Modal-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03169.py -- tests/files/web/generated/M21-GAP-03169-keymap-item-View3D-VR-Location-Scouting-Capture-Review-Modal-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03169", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03169", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03170", + "gapId": "keymap-item:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03170-keymap-item-View3D-VR-Location-Scouting-Capture-Review-Modal-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03170.py -- tests/files/web/generated/M21-GAP-03170-keymap-item-View3D-VR-Location-Scouting-Capture-Review-Modal-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03170", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03170", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03171", + "gapId": "keymap-item:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03171-keymap-item-View3D-VR-Location-Scouting-Capture-Review-Modal-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03171.py -- tests/files/web/generated/M21-GAP-03171-keymap-item-View3D-VR-Location-Scouting-Capture-Review-Modal-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03171", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03171", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03172", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03172-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03172.py -- tests/files/web/generated/M21-GAP-03172-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03172", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03172", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03173", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03173-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03173.py -- tests/files/web/generated/M21-GAP-03173-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03173", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03173", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03174", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03174-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03174.py -- tests/files/web/generated/M21-GAP-03174-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03174", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03174", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03175", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03175-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03175.py -- tests/files/web/generated/M21-GAP-03175-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03175", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03175", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03176", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03176-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03176.py -- tests/files/web/generated/M21-GAP-03176-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03176", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03176", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03177", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03177-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03177.py -- tests/files/web/generated/M21-GAP-03177-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03177", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03177", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03178", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03178-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03178.py -- tests/files/web/generated/M21-GAP-03178-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03178", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03178", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03179", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03179-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03179.py -- tests/files/web/generated/M21-GAP-03179-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03179", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03179", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03180", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03180-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03180.py -- tests/files/web/generated/M21-GAP-03180-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03180", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03180", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03181", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03181-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03181.py -- tests/files/web/generated/M21-GAP-03181-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03181", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03181", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03182", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03182-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03182.py -- tests/files/web/generated/M21-GAP-03182-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03182", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03182", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03183", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03183-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03183.py -- tests/files/web/generated/M21-GAP-03183-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03183", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03183", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03184", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03184-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03184.py -- tests/files/web/generated/M21-GAP-03184-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03184", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03184", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03185", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03185-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03185.py -- tests/files/web/generated/M21-GAP-03185-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03185", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03185", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03186", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03186-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03186.py -- tests/files/web/generated/M21-GAP-03186-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03186", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03186", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03187", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03187-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03187.py -- tests/files/web/generated/M21-GAP-03187-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03187", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03187", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03188", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03188-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03188.py -- tests/files/web/generated/M21-GAP-03188-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03188", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03188", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03189", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03189-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03189.py -- tests/files/web/generated/M21-GAP-03189-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03189", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03189", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03190", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03190-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03190.py -- tests/files/web/generated/M21-GAP-03190-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03190", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03190", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03191", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03191-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03191.py -- tests/files/web/generated/M21-GAP-03191-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03191", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03191", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03192", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03192-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03192.py -- tests/files/web/generated/M21-GAP-03192-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03192", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03192", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03193", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03193-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03193.py -- tests/files/web/generated/M21-GAP-03193-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03193", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03193", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03194", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03194-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03194.py -- tests/files/web/generated/M21-GAP-03194-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03194", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03194", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03195", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03195-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03195.py -- tests/files/web/generated/M21-GAP-03195-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03195", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03195", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03196", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03196-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03196.py -- tests/files/web/generated/M21-GAP-03196-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03196", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03196", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03197", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03197-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03197.py -- tests/files/web/generated/M21-GAP-03197-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03197", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03197", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03198", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03198-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03198.py -- tests/files/web/generated/M21-GAP-03198-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03198", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03198", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03199", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03199-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-33.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03199.py -- tests/files/web/generated/M21-GAP-03199-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-33.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03199", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03199", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03200", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03200-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-34.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03200.py -- tests/files/web/generated/M21-GAP-03200-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-34.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03200", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03200", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03201", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03201-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-35.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03201.py -- tests/files/web/generated/M21-GAP-03201-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-35.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03201", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03201", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03202", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03202-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-36.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03202.py -- tests/files/web/generated/M21-GAP-03202-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-36.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03202", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03202", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03203", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03203-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-37.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03203.py -- tests/files/web/generated/M21-GAP-03203-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-37.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03203", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03203", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03204", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03204-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-38.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03204.py -- tests/files/web/generated/M21-GAP-03204-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-38.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03204", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03204", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03205", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03205-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-39.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03205.py -- tests/files/web/generated/M21-GAP-03205-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-39.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03205", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03205", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03206", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03206-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03206.py -- tests/files/web/generated/M21-GAP-03206-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03206", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03206", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03207", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03207-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-40.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03207.py -- tests/files/web/generated/M21-GAP-03207-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-40.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03207", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03207", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03208", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03208-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-41.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03208.py -- tests/files/web/generated/M21-GAP-03208-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-41.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03208", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03208", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03209", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03209-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-42.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03209.py -- tests/files/web/generated/M21-GAP-03209-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-42.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03209", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03209", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03210", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03210-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-43.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03210.py -- tests/files/web/generated/M21-GAP-03210-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-43.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03210", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03210", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03211", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03211-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-44.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03211.py -- tests/files/web/generated/M21-GAP-03211-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-44.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03211", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03211", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03212", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03212-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-45.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03212.py -- tests/files/web/generated/M21-GAP-03212-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-45.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03212", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03212", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03213", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03213-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-46.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03213.py -- tests/files/web/generated/M21-GAP-03213-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-46.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03213", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03213", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03214", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03214-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-47.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03214.py -- tests/files/web/generated/M21-GAP-03214-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-47.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03214", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03214", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03215", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03215-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-48.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03215.py -- tests/files/web/generated/M21-GAP-03215-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-48.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03215", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03215", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03216", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03216-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-49.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03216.py -- tests/files/web/generated/M21-GAP-03216-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-49.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03216", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03216", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03217", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03217-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03217.py -- tests/files/web/generated/M21-GAP-03217-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03217", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03217", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03218", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03218-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03218.py -- tests/files/web/generated/M21-GAP-03218-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03218", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03218", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03219", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03219-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03219.py -- tests/files/web/generated/M21-GAP-03219-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03219", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03219", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03220", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03220-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03220.py -- tests/files/web/generated/M21-GAP-03220-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03220", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03220", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03221", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03221-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03221.py -- tests/files/web/generated/M21-GAP-03221-keymap-item-View3D-Walk-Modal-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03221", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03221", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03222", + "gapId": "keymap-item:View3D Zoom Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03222-keymap-item-View3D-Zoom-Modal-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03222.py -- tests/files/web/generated/M21-GAP-03222-keymap-item-View3D-Zoom-Modal-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03222", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03222", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03223", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03223-keymap-item-Weight-Paint-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03223.py -- tests/files/web/generated/M21-GAP-03223-keymap-item-Weight-Paint-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03223", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03223", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03224", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03224-keymap-item-Weight-Paint-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03224.py -- tests/files/web/generated/M21-GAP-03224-keymap-item-Weight-Paint-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03224", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03224", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03225", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03225-keymap-item-Weight-Paint-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03225.py -- tests/files/web/generated/M21-GAP-03225-keymap-item-Weight-Paint-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03225", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03225", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03226", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03226-keymap-item-Weight-Paint-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03226.py -- tests/files/web/generated/M21-GAP-03226-keymap-item-Weight-Paint-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03226", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03226", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03227", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03227-keymap-item-Weight-Paint-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03227.py -- tests/files/web/generated/M21-GAP-03227-keymap-item-Weight-Paint-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03227", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03227", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03228", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03228-keymap-item-Weight-Paint-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03228.py -- tests/files/web/generated/M21-GAP-03228-keymap-item-Weight-Paint-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03228", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03228", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03229", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03229-keymap-item-Weight-Paint-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03229.py -- tests/files/web/generated/M21-GAP-03229-keymap-item-Weight-Paint-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03229", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03229", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03230", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03230-keymap-item-Weight-Paint-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03230.py -- tests/files/web/generated/M21-GAP-03230-keymap-item-Weight-Paint-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03230", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03230", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03231", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03231-keymap-item-Weight-Paint-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03231.py -- tests/files/web/generated/M21-GAP-03231-keymap-item-Weight-Paint-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03231", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03231", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03232", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03232-keymap-item-Weight-Paint-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03232.py -- tests/files/web/generated/M21-GAP-03232-keymap-item-Weight-Paint-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03232", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03232", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03233", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03233-keymap-item-Weight-Paint-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03233.py -- tests/files/web/generated/M21-GAP-03233-keymap-item-Weight-Paint-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03233", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03233", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03234", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03234-keymap-item-Weight-Paint-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03234.py -- tests/files/web/generated/M21-GAP-03234-keymap-item-Weight-Paint-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03234", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03234", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03235", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03235-keymap-item-Weight-Paint-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03235.py -- tests/files/web/generated/M21-GAP-03235-keymap-item-Weight-Paint-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03235", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03235", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03236", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03236-keymap-item-Weight-Paint-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03236.py -- tests/files/web/generated/M21-GAP-03236-keymap-item-Weight-Paint-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03236", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03236", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03237", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03237-keymap-item-Weight-Paint-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03237.py -- tests/files/web/generated/M21-GAP-03237-keymap-item-Weight-Paint-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03237", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03237", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03238", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03238-keymap-item-Weight-Paint-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03238.py -- tests/files/web/generated/M21-GAP-03238-keymap-item-Weight-Paint-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03238", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03238", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03239", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03239-keymap-item-Weight-Paint-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03239.py -- tests/files/web/generated/M21-GAP-03239-keymap-item-Weight-Paint-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03239", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03239", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03240", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03240-keymap-item-Weight-Paint-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03240.py -- tests/files/web/generated/M21-GAP-03240-keymap-item-Weight-Paint-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03240", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03240", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03241", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03241-keymap-item-Weight-Paint-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03241.py -- tests/files/web/generated/M21-GAP-03241-keymap-item-Weight-Paint-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03241", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03241", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03242", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03242-keymap-item-Weight-Paint-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03242.py -- tests/files/web/generated/M21-GAP-03242-keymap-item-Weight-Paint-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03242", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03242", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03243", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03243-keymap-item-Weight-Paint-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03243.py -- tests/files/web/generated/M21-GAP-03243-keymap-item-Weight-Paint-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03243", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03243", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03244", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03244-keymap-item-Weight-Paint-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03244.py -- tests/files/web/generated/M21-GAP-03244-keymap-item-Weight-Paint-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03244", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03244", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03245", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03245-keymap-item-Weight-Paint-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03245.py -- tests/files/web/generated/M21-GAP-03245-keymap-item-Weight-Paint-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03245", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03245", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03246", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03246-keymap-item-Weight-Paint-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03246.py -- tests/files/web/generated/M21-GAP-03246-keymap-item-Weight-Paint-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03246", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03246", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03247", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03247-keymap-item-Weight-Paint-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03247.py -- tests/files/web/generated/M21-GAP-03247-keymap-item-Weight-Paint-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03247", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03247", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03248", + "gapId": "keymap-item:Window:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03248-keymap-item-Window-EMPTY-WINDOW-0.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03248.py -- tests/files/web/generated/M21-GAP-03248-keymap-item-Window-EMPTY-WINDOW-0.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03248", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03248", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03249", + "gapId": "keymap-item:Window:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03249-keymap-item-Window-EMPTY-WINDOW-1.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03249.py -- tests/files/web/generated/M21-GAP-03249-keymap-item-Window-EMPTY-WINDOW-1.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03249", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03249", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03250", + "gapId": "keymap-item:Window:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03250-keymap-item-Window-EMPTY-WINDOW-10.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03250.py -- tests/files/web/generated/M21-GAP-03250-keymap-item-Window-EMPTY-WINDOW-10.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03250", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03250", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03251", + "gapId": "keymap-item:Window:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03251-keymap-item-Window-EMPTY-WINDOW-11.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03251.py -- tests/files/web/generated/M21-GAP-03251-keymap-item-Window-EMPTY-WINDOW-11.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03251", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03251", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03252", + "gapId": "keymap-item:Window:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03252-keymap-item-Window-EMPTY-WINDOW-12.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03252.py -- tests/files/web/generated/M21-GAP-03252-keymap-item-Window-EMPTY-WINDOW-12.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03252", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03252", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03253", + "gapId": "keymap-item:Window:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03253-keymap-item-Window-EMPTY-WINDOW-13.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03253.py -- tests/files/web/generated/M21-GAP-03253-keymap-item-Window-EMPTY-WINDOW-13.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03253", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03253", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03254", + "gapId": "keymap-item:Window:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03254-keymap-item-Window-EMPTY-WINDOW-14.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03254.py -- tests/files/web/generated/M21-GAP-03254-keymap-item-Window-EMPTY-WINDOW-14.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03254", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03254", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03255", + "gapId": "keymap-item:Window:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03255-keymap-item-Window-EMPTY-WINDOW-15.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03255.py -- tests/files/web/generated/M21-GAP-03255-keymap-item-Window-EMPTY-WINDOW-15.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03255", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03255", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03256", + "gapId": "keymap-item:Window:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03256-keymap-item-Window-EMPTY-WINDOW-16.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03256.py -- tests/files/web/generated/M21-GAP-03256-keymap-item-Window-EMPTY-WINDOW-16.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03256", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03256", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03257", + "gapId": "keymap-item:Window:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03257-keymap-item-Window-EMPTY-WINDOW-17.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03257.py -- tests/files/web/generated/M21-GAP-03257-keymap-item-Window-EMPTY-WINDOW-17.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03257", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03257", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03258", + "gapId": "keymap-item:Window:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03258-keymap-item-Window-EMPTY-WINDOW-18.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03258.py -- tests/files/web/generated/M21-GAP-03258-keymap-item-Window-EMPTY-WINDOW-18.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03258", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03258", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03259", + "gapId": "keymap-item:Window:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03259-keymap-item-Window-EMPTY-WINDOW-19.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03259.py -- tests/files/web/generated/M21-GAP-03259-keymap-item-Window-EMPTY-WINDOW-19.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03259", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03259", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03260", + "gapId": "keymap-item:Window:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03260-keymap-item-Window-EMPTY-WINDOW-2.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03260.py -- tests/files/web/generated/M21-GAP-03260-keymap-item-Window-EMPTY-WINDOW-2.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03260", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03260", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03261", + "gapId": "keymap-item:Window:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03261-keymap-item-Window-EMPTY-WINDOW-20.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03261.py -- tests/files/web/generated/M21-GAP-03261-keymap-item-Window-EMPTY-WINDOW-20.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03261", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03261", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03262", + "gapId": "keymap-item:Window:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03262-keymap-item-Window-EMPTY-WINDOW-21.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03262.py -- tests/files/web/generated/M21-GAP-03262-keymap-item-Window-EMPTY-WINDOW-21.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03262", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03262", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03263", + "gapId": "keymap-item:Window:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03263-keymap-item-Window-EMPTY-WINDOW-22.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03263.py -- tests/files/web/generated/M21-GAP-03263-keymap-item-Window-EMPTY-WINDOW-22.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03263", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03263", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03264", + "gapId": "keymap-item:Window:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03264-keymap-item-Window-EMPTY-WINDOW-23.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03264.py -- tests/files/web/generated/M21-GAP-03264-keymap-item-Window-EMPTY-WINDOW-23.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03264", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03264", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03265", + "gapId": "keymap-item:Window:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03265-keymap-item-Window-EMPTY-WINDOW-24.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03265.py -- tests/files/web/generated/M21-GAP-03265-keymap-item-Window-EMPTY-WINDOW-24.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03265", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03265", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03266", + "gapId": "keymap-item:Window:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03266-keymap-item-Window-EMPTY-WINDOW-25.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03266.py -- tests/files/web/generated/M21-GAP-03266-keymap-item-Window-EMPTY-WINDOW-25.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03266", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03266", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03267", + "gapId": "keymap-item:Window:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03267-keymap-item-Window-EMPTY-WINDOW-26.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03267.py -- tests/files/web/generated/M21-GAP-03267-keymap-item-Window-EMPTY-WINDOW-26.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03267", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03267", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03268", + "gapId": "keymap-item:Window:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03268-keymap-item-Window-EMPTY-WINDOW-27.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03268.py -- tests/files/web/generated/M21-GAP-03268-keymap-item-Window-EMPTY-WINDOW-27.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03268", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03268", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03269", + "gapId": "keymap-item:Window:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03269-keymap-item-Window-EMPTY-WINDOW-28.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03269.py -- tests/files/web/generated/M21-GAP-03269-keymap-item-Window-EMPTY-WINDOW-28.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03269", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03269", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03270", + "gapId": "keymap-item:Window:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03270-keymap-item-Window-EMPTY-WINDOW-29.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03270.py -- tests/files/web/generated/M21-GAP-03270-keymap-item-Window-EMPTY-WINDOW-29.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03270", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03270", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03271", + "gapId": "keymap-item:Window:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03271-keymap-item-Window-EMPTY-WINDOW-3.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03271.py -- tests/files/web/generated/M21-GAP-03271-keymap-item-Window-EMPTY-WINDOW-3.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03271", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03271", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03272", + "gapId": "keymap-item:Window:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03272-keymap-item-Window-EMPTY-WINDOW-30.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03272.py -- tests/files/web/generated/M21-GAP-03272-keymap-item-Window-EMPTY-WINDOW-30.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03272", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03272", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03273", + "gapId": "keymap-item:Window:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03273-keymap-item-Window-EMPTY-WINDOW-31.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03273.py -- tests/files/web/generated/M21-GAP-03273-keymap-item-Window-EMPTY-WINDOW-31.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03273", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03273", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03274", + "gapId": "keymap-item:Window:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03274-keymap-item-Window-EMPTY-WINDOW-32.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03274.py -- tests/files/web/generated/M21-GAP-03274-keymap-item-Window-EMPTY-WINDOW-32.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03274", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03274", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03275", + "gapId": "keymap-item:Window:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03275-keymap-item-Window-EMPTY-WINDOW-4.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03275.py -- tests/files/web/generated/M21-GAP-03275-keymap-item-Window-EMPTY-WINDOW-4.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03275", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03275", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03276", + "gapId": "keymap-item:Window:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03276-keymap-item-Window-EMPTY-WINDOW-5.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03276.py -- tests/files/web/generated/M21-GAP-03276-keymap-item-Window-EMPTY-WINDOW-5.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03276", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03276", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03277", + "gapId": "keymap-item:Window:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03277-keymap-item-Window-EMPTY-WINDOW-6.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03277.py -- tests/files/web/generated/M21-GAP-03277-keymap-item-Window-EMPTY-WINDOW-6.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03277", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03277", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03278", + "gapId": "keymap-item:Window:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03278-keymap-item-Window-EMPTY-WINDOW-7.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03278.py -- tests/files/web/generated/M21-GAP-03278-keymap-item-Window-EMPTY-WINDOW-7.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03278", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03278", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03279", + "gapId": "keymap-item:Window:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03279-keymap-item-Window-EMPTY-WINDOW-8.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03279.py -- tests/files/web/generated/M21-GAP-03279-keymap-item-Window-EMPTY-WINDOW-8.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03279", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03279", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03280", + "gapId": "keymap-item:Window:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03280-keymap-item-Window-EMPTY-WINDOW-9.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03280.py -- tests/files/web/generated/M21-GAP-03280-keymap-item-Window-EMPTY-WINDOW-9.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03280", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03280", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03281", + "gapId": "keymap:3D View Generic:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03281-keymap-3D-View-Generic-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03281.py -- tests/files/web/generated/M21-GAP-03281-keymap-3D-View-Generic-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03281", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03281", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03282", + "gapId": "keymap:3D View Tool: Bend:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03282-keymap-3D-View-Tool-Bend-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03282.py -- tests/files/web/generated/M21-GAP-03282-keymap-3D-View-Tool-Bend-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03282", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03282", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03283", + "gapId": "keymap:3D View Tool: Breakdowner:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03283-keymap-3D-View-Tool-Breakdowner-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03283.py -- tests/files/web/generated/M21-GAP-03283-keymap-3D-View-Tool-Breakdowner-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03283", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03283", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03284", + "gapId": "keymap:3D View Tool: Cursor:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03284-keymap-3D-View-Tool-Cursor-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03284.py -- tests/files/web/generated/M21-GAP-03284-keymap-3D-View-Tool-Cursor-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03284", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03284", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03285", + "gapId": "keymap:3D View Tool: Edit Armature, B-Bone Size:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03285-keymap-3D-View-Tool-Edit-Armature-B-Bone-Size-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03285.py -- tests/files/web/generated/M21-GAP-03285-keymap-3D-View-Tool-Edit-Armature-B-Bone-Size-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03285", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03285", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03286", + "gapId": "keymap:3D View Tool: Edit Armature, Bone Envelope:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03286-keymap-3D-View-Tool-Edit-Armature-Bone-Envelope-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03286.py -- tests/files/web/generated/M21-GAP-03286-keymap-3D-View-Tool-Edit-Armature-Bone-Envelope-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03286", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03286", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03287", + "gapId": "keymap:3D View Tool: Edit Armature, Extrude to Cursor:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03287-keymap-3D-View-Tool-Edit-Armature-Extrude-to-Cursor-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03287.py -- tests/files/web/generated/M21-GAP-03287-keymap-3D-View-Tool-Edit-Armature-Extrude-to-Cursor-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03287", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03287", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03288", + "gapId": "keymap:3D View Tool: Edit Armature, Extrude:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03288-keymap-3D-View-Tool-Edit-Armature-Extrude-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03288.py -- tests/files/web/generated/M21-GAP-03288-keymap-3D-View-Tool-Edit-Armature-Extrude-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03288", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03288", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03289", + "gapId": "keymap:3D View Tool: Edit Armature, Roll:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03289-keymap-3D-View-Tool-Edit-Armature-Roll-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03289.py -- tests/files/web/generated/M21-GAP-03289-keymap-3D-View-Tool-Edit-Armature-Roll-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03289", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03289", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03290", + "gapId": "keymap:3D View Tool: Edit Curve, Curve Pen:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03290-keymap-3D-View-Tool-Edit-Curve-Curve-Pen-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03290.py -- tests/files/web/generated/M21-GAP-03290-keymap-3D-View-Tool-Edit-Curve-Curve-Pen-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03290", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03290", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03291", + "gapId": "keymap:3D View Tool: Edit Curve, Draw:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03291-keymap-3D-View-Tool-Edit-Curve-Draw-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03291.py -- tests/files/web/generated/M21-GAP-03291-keymap-3D-View-Tool-Edit-Curve-Draw-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03291", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03291", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03292", + "gapId": "keymap:3D View Tool: Edit Curve, Extrude to Cursor:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03292-keymap-3D-View-Tool-Edit-Curve-Extrude-to-Cursor-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03292.py -- tests/files/web/generated/M21-GAP-03292-keymap-3D-View-Tool-Edit-Curve-Extrude-to-Cursor-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03292", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03292", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03293", + "gapId": "keymap:3D View Tool: Edit Curve, Extrude:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03293-keymap-3D-View-Tool-Edit-Curve-Extrude-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03293.py -- tests/files/web/generated/M21-GAP-03293-keymap-3D-View-Tool-Edit-Curve-Extrude-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03293", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03293", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03294", + "gapId": "keymap:3D View Tool: Edit Curve, Radius:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03294-keymap-3D-View-Tool-Edit-Curve-Radius-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03294.py -- tests/files/web/generated/M21-GAP-03294-keymap-3D-View-Tool-Edit-Curve-Radius-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03294", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03294", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03295", + "gapId": "keymap:3D View Tool: Edit Curve, Randomize:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03295-keymap-3D-View-Tool-Edit-Curve-Randomize-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03295.py -- tests/files/web/generated/M21-GAP-03295-keymap-3D-View-Tool-Edit-Curve-Randomize-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03295", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03295", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03296", + "gapId": "keymap:3D View Tool: Edit Curve, Tilt:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03296-keymap-3D-View-Tool-Edit-Curve-Tilt-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03296.py -- tests/files/web/generated/M21-GAP-03296-keymap-3D-View-Tool-Edit-Curve-Tilt-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03296", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03296", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03297", + "gapId": "keymap:3D View Tool: Edit Curves, Draw:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03297-keymap-3D-View-Tool-Edit-Curves-Draw-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03297.py -- tests/files/web/generated/M21-GAP-03297-keymap-3D-View-Tool-Edit-Curves-Draw-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03297", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03297", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03298", + "gapId": "keymap:3D View Tool: Edit Curves, Pen:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03298-keymap-3D-View-Tool-Edit-Curves-Pen-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03298.py -- tests/files/web/generated/M21-GAP-03298-keymap-3D-View-Tool-Edit-Curves-Pen-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03298", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03298", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03299", + "gapId": "keymap:3D View Tool: Edit Grease Pencil, Gradient:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03299-keymap-3D-View-Tool-Edit-Grease-Pencil-Gradient-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03299.py -- tests/files/web/generated/M21-GAP-03299-keymap-3D-View-Tool-Edit-Grease-Pencil-Gradient-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03299", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03299", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03300", + "gapId": "keymap:3D View Tool: Edit Grease Pencil, Interpolate:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03300-keymap-3D-View-Tool-Edit-Grease-Pencil-Interpolate-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03300.py -- tests/files/web/generated/M21-GAP-03300-keymap-3D-View-Tool-Edit-Grease-Pencil-Interpolate-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03300", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03300", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03301", + "gapId": "keymap:3D View Tool: Edit Grease Pencil, Pen:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03301-keymap-3D-View-Tool-Edit-Grease-Pencil-Pen-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03301.py -- tests/files/web/generated/M21-GAP-03301-keymap-3D-View-Tool-Edit-Grease-Pencil-Pen-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03301", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03301", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03302", + "gapId": "keymap:3D View Tool: Edit Mesh, Bevel:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03302-keymap-3D-View-Tool-Edit-Mesh-Bevel-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03302.py -- tests/files/web/generated/M21-GAP-03302-keymap-3D-View-Tool-Edit-Mesh-Bevel-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03302", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03302", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03303", + "gapId": "keymap:3D View Tool: Edit Mesh, Bisect:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03303-keymap-3D-View-Tool-Edit-Mesh-Bisect-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03303.py -- tests/files/web/generated/M21-GAP-03303-keymap-3D-View-Tool-Edit-Mesh-Bisect-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03303", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03303", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03304", + "gapId": "keymap:3D View Tool: Edit Mesh, Edge Slide:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03304-keymap-3D-View-Tool-Edit-Mesh-Edge-Slide-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03304.py -- tests/files/web/generated/M21-GAP-03304-keymap-3D-View-Tool-Edit-Mesh-Edge-Slide-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03304", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03304", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03305", + "gapId": "keymap:3D View Tool: Edit Mesh, Extrude Along Normals:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03305-keymap-3D-View-Tool-Edit-Mesh-Extrude-Along-Normals-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03305.py -- tests/files/web/generated/M21-GAP-03305-keymap-3D-View-Tool-Edit-Mesh-Extrude-Along-Normals-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03305", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03305", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03306", + "gapId": "keymap:3D View Tool: Edit Mesh, Extrude Individual:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03306-keymap-3D-View-Tool-Edit-Mesh-Extrude-Individual-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03306.py -- tests/files/web/generated/M21-GAP-03306-keymap-3D-View-Tool-Edit-Mesh-Extrude-Individual-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03306", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03306", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03307", + "gapId": "keymap:3D View Tool: Edit Mesh, Extrude Manifold:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03307-keymap-3D-View-Tool-Edit-Mesh-Extrude-Manifold-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03307.py -- tests/files/web/generated/M21-GAP-03307-keymap-3D-View-Tool-Edit-Mesh-Extrude-Manifold-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03307", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03307", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03308", + "gapId": "keymap:3D View Tool: Edit Mesh, Extrude Region:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03308-keymap-3D-View-Tool-Edit-Mesh-Extrude-Region-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03308.py -- tests/files/web/generated/M21-GAP-03308-keymap-3D-View-Tool-Edit-Mesh-Extrude-Region-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03308", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03308", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03309", + "gapId": "keymap:3D View Tool: Edit Mesh, Extrude to Cursor:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03309-keymap-3D-View-Tool-Edit-Mesh-Extrude-to-Cursor-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03309.py -- tests/files/web/generated/M21-GAP-03309-keymap-3D-View-Tool-Edit-Mesh-Extrude-to-Cursor-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03309", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03309", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03310", + "gapId": "keymap:3D View Tool: Edit Mesh, Inset Faces:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03310-keymap-3D-View-Tool-Edit-Mesh-Inset-Faces-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03310.py -- tests/files/web/generated/M21-GAP-03310-keymap-3D-View-Tool-Edit-Mesh-Inset-Faces-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03310", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03310", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03311", + "gapId": "keymap:3D View Tool: Edit Mesh, Knife:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03311-keymap-3D-View-Tool-Edit-Mesh-Knife-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03311.py -- tests/files/web/generated/M21-GAP-03311-keymap-3D-View-Tool-Edit-Mesh-Knife-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03311", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03311", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03312", + "gapId": "keymap:3D View Tool: Edit Mesh, Loop Cut:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03312-keymap-3D-View-Tool-Edit-Mesh-Loop-Cut-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03312.py -- tests/files/web/generated/M21-GAP-03312-keymap-3D-View-Tool-Edit-Mesh-Loop-Cut-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03312", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03312", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03313", + "gapId": "keymap:3D View Tool: Edit Mesh, Offset Edge Loop Cut:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03313-keymap-3D-View-Tool-Edit-Mesh-Offset-Edge-Loop-Cut-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03313.py -- tests/files/web/generated/M21-GAP-03313-keymap-3D-View-Tool-Edit-Mesh-Offset-Edge-Loop-Cut-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03313", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03313", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03314", + "gapId": "keymap:3D View Tool: Edit Mesh, Poly Build:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03314-keymap-3D-View-Tool-Edit-Mesh-Poly-Build-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03314.py -- tests/files/web/generated/M21-GAP-03314-keymap-3D-View-Tool-Edit-Mesh-Poly-Build-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03314", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03314", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03315", + "gapId": "keymap:3D View Tool: Edit Mesh, Push/Pull:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03315-keymap-3D-View-Tool-Edit-Mesh-Push-Pull-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03315.py -- tests/files/web/generated/M21-GAP-03315-keymap-3D-View-Tool-Edit-Mesh-Push-Pull-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03315", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03315", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03316", + "gapId": "keymap:3D View Tool: Edit Mesh, Randomize:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03316-keymap-3D-View-Tool-Edit-Mesh-Randomize-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03316.py -- tests/files/web/generated/M21-GAP-03316-keymap-3D-View-Tool-Edit-Mesh-Randomize-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03316", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03316", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03317", + "gapId": "keymap:3D View Tool: Edit Mesh, Rip Edge:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03317-keymap-3D-View-Tool-Edit-Mesh-Rip-Edge-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03317.py -- tests/files/web/generated/M21-GAP-03317-keymap-3D-View-Tool-Edit-Mesh-Rip-Edge-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03317", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03317", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03318", + "gapId": "keymap:3D View Tool: Edit Mesh, Rip Region:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03318-keymap-3D-View-Tool-Edit-Mesh-Rip-Region-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03318.py -- tests/files/web/generated/M21-GAP-03318-keymap-3D-View-Tool-Edit-Mesh-Rip-Region-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03318", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03318", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03319", + "gapId": "keymap:3D View Tool: Edit Mesh, Shrink/Fatten:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03319-keymap-3D-View-Tool-Edit-Mesh-Shrink-Fatten-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03319.py -- tests/files/web/generated/M21-GAP-03319-keymap-3D-View-Tool-Edit-Mesh-Shrink-Fatten-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03319", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03319", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03320", + "gapId": "keymap:3D View Tool: Edit Mesh, Smooth:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03320-keymap-3D-View-Tool-Edit-Mesh-Smooth-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03320.py -- tests/files/web/generated/M21-GAP-03320-keymap-3D-View-Tool-Edit-Mesh-Smooth-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03320", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03320", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03321", + "gapId": "keymap:3D View Tool: Edit Mesh, Spin Duplicates:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03321-keymap-3D-View-Tool-Edit-Mesh-Spin-Duplicates-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03321.py -- tests/files/web/generated/M21-GAP-03321-keymap-3D-View-Tool-Edit-Mesh-Spin-Duplicates-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03321", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03321", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03322", + "gapId": "keymap:3D View Tool: Edit Mesh, Spin:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03322-keymap-3D-View-Tool-Edit-Mesh-Spin-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03322.py -- tests/files/web/generated/M21-GAP-03322-keymap-3D-View-Tool-Edit-Mesh-Spin-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03322", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03322", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03323", + "gapId": "keymap:3D View Tool: Edit Mesh, To Sphere:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03323-keymap-3D-View-Tool-Edit-Mesh-To-Sphere-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03323.py -- tests/files/web/generated/M21-GAP-03323-keymap-3D-View-Tool-Edit-Mesh-To-Sphere-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03323", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03323", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03324", + "gapId": "keymap:3D View Tool: Edit Mesh, Vertex Slide:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03324-keymap-3D-View-Tool-Edit-Mesh-Vertex-Slide-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03324.py -- tests/files/web/generated/M21-GAP-03324-keymap-3D-View-Tool-Edit-Mesh-Vertex-Slide-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03324", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03324", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03325", + "gapId": "keymap:3D View Tool: Edit Text, Select Text:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03325-keymap-3D-View-Tool-Edit-Text-Select-Text-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03325.py -- tests/files/web/generated/M21-GAP-03325-keymap-3D-View-Tool-Edit-Text-Select-Text-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03325", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03325", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03326", + "gapId": "keymap:3D View Tool: Measure:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03326-keymap-3D-View-Tool-Measure-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03326.py -- tests/files/web/generated/M21-GAP-03326-keymap-3D-View-Tool-Measure-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03326", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03326", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03327", + "gapId": "keymap:3D View Tool: Move:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03327-keymap-3D-View-Tool-Move-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03327.py -- tests/files/web/generated/M21-GAP-03327-keymap-3D-View-Tool-Move-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03327", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03327", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03328", + "gapId": "keymap:3D View Tool: Object, Add Primitive:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03328-keymap-3D-View-Tool-Object-Add-Primitive-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03328.py -- tests/files/web/generated/M21-GAP-03328-keymap-3D-View-Tool-Object-Add-Primitive-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03328", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03328", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03329", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Arc:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03329-keymap-3D-View-Tool-Paint-Grease-Pencil-Arc-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03329.py -- tests/files/web/generated/M21-GAP-03329-keymap-3D-View-Tool-Paint-Grease-Pencil-Arc-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03329", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03329", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03330", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Box:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03330-keymap-3D-View-Tool-Paint-Grease-Pencil-Box-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03330.py -- tests/files/web/generated/M21-GAP-03330-keymap-3D-View-Tool-Paint-Grease-Pencil-Box-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03330", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03330", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03331", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Circle:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03331-keymap-3D-View-Tool-Paint-Grease-Pencil-Circle-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03331.py -- tests/files/web/generated/M21-GAP-03331-keymap-3D-View-Tool-Paint-Grease-Pencil-Circle-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03331", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03331", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03332", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Curve:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03332-keymap-3D-View-Tool-Paint-Grease-Pencil-Curve-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03332.py -- tests/files/web/generated/M21-GAP-03332-keymap-3D-View-Tool-Paint-Grease-Pencil-Curve-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03332", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03332", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03333", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Eyedropper:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03333-keymap-3D-View-Tool-Paint-Grease-Pencil-Eyedropper-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03333.py -- tests/files/web/generated/M21-GAP-03333-keymap-3D-View-Tool-Paint-Grease-Pencil-Eyedropper-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03333", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03333", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03334", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Interpolate:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03334-keymap-3D-View-Tool-Paint-Grease-Pencil-Interpolate-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03334.py -- tests/files/web/generated/M21-GAP-03334-keymap-3D-View-Tool-Paint-Grease-Pencil-Interpolate-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03334", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03334", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03335", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Line:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03335-keymap-3D-View-Tool-Paint-Grease-Pencil-Line-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03335.py -- tests/files/web/generated/M21-GAP-03335-keymap-3D-View-Tool-Paint-Grease-Pencil-Line-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03335", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03335", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03336", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Polyline:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03336-keymap-3D-View-Tool-Paint-Grease-Pencil-Polyline-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03336.py -- tests/files/web/generated/M21-GAP-03336-keymap-3D-View-Tool-Paint-Grease-Pencil-Polyline-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03336", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03336", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03337", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Trim:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03337-keymap-3D-View-Tool-Paint-Grease-Pencil-Trim-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03337.py -- tests/files/web/generated/M21-GAP-03337-keymap-3D-View-Tool-Paint-Grease-Pencil-Trim-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03337", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03337", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03338", + "gapId": "keymap:3D View Tool: Paint Weight, Gradient:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03338-keymap-3D-View-Tool-Paint-Weight-Gradient-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03338.py -- tests/files/web/generated/M21-GAP-03338-keymap-3D-View-Tool-Paint-Weight-Gradient-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03338", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03338", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03339", + "gapId": "keymap:3D View Tool: Paint Weight, Sample Vertex Group:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03339-keymap-3D-View-Tool-Paint-Weight-Sample-Vertex-Group-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03339.py -- tests/files/web/generated/M21-GAP-03339-keymap-3D-View-Tool-Paint-Weight-Sample-Vertex-Group-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03339", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03339", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03340", + "gapId": "keymap:3D View Tool: Paint Weight, Sample Weight:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03340-keymap-3D-View-Tool-Paint-Weight-Sample-Weight-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03340.py -- tests/files/web/generated/M21-GAP-03340-keymap-3D-View-Tool-Paint-Weight-Sample-Weight-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03340", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03340", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03341", + "gapId": "keymap:3D View Tool: Push:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03341-keymap-3D-View-Tool-Push-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03341.py -- tests/files/web/generated/M21-GAP-03341-keymap-3D-View-Tool-Push-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03341", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03341", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03342", + "gapId": "keymap:3D View Tool: Relax:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03342-keymap-3D-View-Tool-Relax-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03342.py -- tests/files/web/generated/M21-GAP-03342-keymap-3D-View-Tool-Relax-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03342", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03342", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03343", + "gapId": "keymap:3D View Tool: Rotate:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03343-keymap-3D-View-Tool-Rotate-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03343.py -- tests/files/web/generated/M21-GAP-03343-keymap-3D-View-Tool-Rotate-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03343", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03343", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03344", + "gapId": "keymap:3D View Tool: Scale:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03344-keymap-3D-View-Tool-Scale-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03344.py -- tests/files/web/generated/M21-GAP-03344-keymap-3D-View-Tool-Scale-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03344", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03344", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03345", + "gapId": "keymap:3D View Tool: Sculpt, Box Face Set:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03345-keymap-3D-View-Tool-Sculpt-Box-Face-Set-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03345.py -- tests/files/web/generated/M21-GAP-03345-keymap-3D-View-Tool-Sculpt-Box-Face-Set-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03345", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03345", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03346", + "gapId": "keymap:3D View Tool: Sculpt, Box Hide:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03346-keymap-3D-View-Tool-Sculpt-Box-Hide-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03346.py -- tests/files/web/generated/M21-GAP-03346-keymap-3D-View-Tool-Sculpt-Box-Hide-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03346", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03346", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03347", + "gapId": "keymap:3D View Tool: Sculpt, Box Mask:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03347-keymap-3D-View-Tool-Sculpt-Box-Mask-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03347.py -- tests/files/web/generated/M21-GAP-03347-keymap-3D-View-Tool-Sculpt-Box-Mask-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03347", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03347", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03348", + "gapId": "keymap:3D View Tool: Sculpt, Box Trim:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03348-keymap-3D-View-Tool-Sculpt-Box-Trim-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03348.py -- tests/files/web/generated/M21-GAP-03348-keymap-3D-View-Tool-Sculpt-Box-Trim-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03348", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03348", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03349", + "gapId": "keymap:3D View Tool: Sculpt, Cloth Filter:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03349-keymap-3D-View-Tool-Sculpt-Cloth-Filter-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03349.py -- tests/files/web/generated/M21-GAP-03349-keymap-3D-View-Tool-Sculpt-Cloth-Filter-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03349", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03349", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03350", + "gapId": "keymap:3D View Tool: Sculpt, Color Filter:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03350-keymap-3D-View-Tool-Sculpt-Color-Filter-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03350.py -- tests/files/web/generated/M21-GAP-03350-keymap-3D-View-Tool-Sculpt-Color-Filter-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03350", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03350", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03351", + "gapId": "keymap:3D View Tool: Sculpt, Face Set Edit:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03351-keymap-3D-View-Tool-Sculpt-Face-Set-Edit-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03351.py -- tests/files/web/generated/M21-GAP-03351-keymap-3D-View-Tool-Sculpt-Face-Set-Edit-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03351", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03351", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03352", + "gapId": "keymap:3D View Tool: Sculpt, Lasso Face Set:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03352-keymap-3D-View-Tool-Sculpt-Lasso-Face-Set-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03352.py -- tests/files/web/generated/M21-GAP-03352-keymap-3D-View-Tool-Sculpt-Lasso-Face-Set-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03352", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03352", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03353", + "gapId": "keymap:3D View Tool: Sculpt, Lasso Hide:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03353-keymap-3D-View-Tool-Sculpt-Lasso-Hide-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03353.py -- tests/files/web/generated/M21-GAP-03353-keymap-3D-View-Tool-Sculpt-Lasso-Hide-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03353", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03353", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03354", + "gapId": "keymap:3D View Tool: Sculpt, Lasso Mask:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03354-keymap-3D-View-Tool-Sculpt-Lasso-Mask-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03354.py -- tests/files/web/generated/M21-GAP-03354-keymap-3D-View-Tool-Sculpt-Lasso-Mask-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03354", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03354", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03355", + "gapId": "keymap:3D View Tool: Sculpt, Lasso Trim:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03355-keymap-3D-View-Tool-Sculpt-Lasso-Trim-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03355.py -- tests/files/web/generated/M21-GAP-03355-keymap-3D-View-Tool-Sculpt-Lasso-Trim-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03355", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03355", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03356", + "gapId": "keymap:3D View Tool: Sculpt, Line Face Set:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03356-keymap-3D-View-Tool-Sculpt-Line-Face-Set-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03356.py -- tests/files/web/generated/M21-GAP-03356-keymap-3D-View-Tool-Sculpt-Line-Face-Set-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03356", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03356", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03357", + "gapId": "keymap:3D View Tool: Sculpt, Line Hide:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03357-keymap-3D-View-Tool-Sculpt-Line-Hide-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03357.py -- tests/files/web/generated/M21-GAP-03357-keymap-3D-View-Tool-Sculpt-Line-Hide-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03357", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03357", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03358", + "gapId": "keymap:3D View Tool: Sculpt, Line Mask:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03358-keymap-3D-View-Tool-Sculpt-Line-Mask-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03358.py -- tests/files/web/generated/M21-GAP-03358-keymap-3D-View-Tool-Sculpt-Line-Mask-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03358", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03358", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03359", + "gapId": "keymap:3D View Tool: Sculpt, Line Project:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03359-keymap-3D-View-Tool-Sculpt-Line-Project-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03359.py -- tests/files/web/generated/M21-GAP-03359-keymap-3D-View-Tool-Sculpt-Line-Project-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03359", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03359", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03360", + "gapId": "keymap:3D View Tool: Sculpt, Line Trim:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03360-keymap-3D-View-Tool-Sculpt-Line-Trim-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03360.py -- tests/files/web/generated/M21-GAP-03360-keymap-3D-View-Tool-Sculpt-Line-Trim-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03360", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03360", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03361", + "gapId": "keymap:3D View Tool: Sculpt, Mask by Color:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03361-keymap-3D-View-Tool-Sculpt-Mask-by-Color-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03361.py -- tests/files/web/generated/M21-GAP-03361-keymap-3D-View-Tool-Sculpt-Mask-by-Color-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03361", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03361", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03362", + "gapId": "keymap:3D View Tool: Sculpt, Mesh Filter:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03362-keymap-3D-View-Tool-Sculpt-Mesh-Filter-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03362.py -- tests/files/web/generated/M21-GAP-03362-keymap-3D-View-Tool-Sculpt-Mesh-Filter-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03362", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03362", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03363", + "gapId": "keymap:3D View Tool: Sculpt, Polyline Face Set:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03363-keymap-3D-View-Tool-Sculpt-Polyline-Face-Set-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03363.py -- tests/files/web/generated/M21-GAP-03363-keymap-3D-View-Tool-Sculpt-Polyline-Face-Set-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03363", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03363", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03364", + "gapId": "keymap:3D View Tool: Sculpt, Polyline Hide:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03364-keymap-3D-View-Tool-Sculpt-Polyline-Hide-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03364.py -- tests/files/web/generated/M21-GAP-03364-keymap-3D-View-Tool-Sculpt-Polyline-Hide-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03364", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03364", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03365", + "gapId": "keymap:3D View Tool: Sculpt, Polyline Mask:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03365-keymap-3D-View-Tool-Sculpt-Polyline-Mask-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03365.py -- tests/files/web/generated/M21-GAP-03365-keymap-3D-View-Tool-Sculpt-Polyline-Mask-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03365", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03365", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03366", + "gapId": "keymap:3D View Tool: Sculpt, Polyline Trim:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03366-keymap-3D-View-Tool-Sculpt-Polyline-Trim-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03366.py -- tests/files/web/generated/M21-GAP-03366-keymap-3D-View-Tool-Sculpt-Polyline-Trim-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03366", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03366", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03367", + "gapId": "keymap:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03367-keymap-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03367.py -- tests/files/web/generated/M21-GAP-03367-keymap-3D-View-Tool-Select-Box-fallback-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03367", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03367", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03368", + "gapId": "keymap:3D View Tool: Select Box:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03368-keymap-3D-View-Tool-Select-Box-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03368.py -- tests/files/web/generated/M21-GAP-03368-keymap-3D-View-Tool-Select-Box-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03368", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03368", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03369", + "gapId": "keymap:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03369-keymap-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03369.py -- tests/files/web/generated/M21-GAP-03369-keymap-3D-View-Tool-Select-Circle-fallback-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03369", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03369", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03370", + "gapId": "keymap:3D View Tool: Select Circle:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03370-keymap-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03370.py -- tests/files/web/generated/M21-GAP-03370-keymap-3D-View-Tool-Select-Circle-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03370", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03370", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03371", + "gapId": "keymap:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03371-keymap-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03371.py -- tests/files/web/generated/M21-GAP-03371-keymap-3D-View-Tool-Select-Lasso-fallback-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03371", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03371", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03372", + "gapId": "keymap:3D View Tool: Select Lasso:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03372-keymap-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03372.py -- tests/files/web/generated/M21-GAP-03372-keymap-3D-View-Tool-Select-Lasso-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03372", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03372", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03373", + "gapId": "keymap:3D View Tool: Shear:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03373-keymap-3D-View-Tool-Shear-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03373.py -- tests/files/web/generated/M21-GAP-03373-keymap-3D-View-Tool-Shear-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03373", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03373", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03374", + "gapId": "keymap:3D View Tool: Transform:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03374-keymap-3D-View-Tool-Transform-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03374.py -- tests/files/web/generated/M21-GAP-03374-keymap-3D-View-Tool-Transform-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03374", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03374", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03375", + "gapId": "keymap:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03375-keymap-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03375.py -- tests/files/web/generated/M21-GAP-03375-keymap-3D-View-Tool-Tweak-fallback-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03375", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03375", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03376", + "gapId": "keymap:3D View Tool: Tweak:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03376-keymap-3D-View-Tool-Tweak-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03376.py -- tests/files/web/generated/M21-GAP-03376-keymap-3D-View-Tool-Tweak-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03376", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03376", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03377", + "gapId": "keymap:3D View:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03377-keymap-3D-View-VIEW_3D-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03377.py -- tests/files/web/generated/M21-GAP-03377-keymap-3D-View-VIEW_3D-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03377", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03377", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03378", + "gapId": "keymap:Animation Channels:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03378-keymap-Animation-Channels-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03378.py -- tests/files/web/generated/M21-GAP-03378-keymap-Animation-Channels-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03378", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03378", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03379", + "gapId": "keymap:Animation:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03379-keymap-Animation-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03379.py -- tests/files/web/generated/M21-GAP-03379-keymap-Animation-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03379", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03379", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03380", + "gapId": "keymap:Armature:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03380-keymap-Armature-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03380.py -- tests/files/web/generated/M21-GAP-03380-keymap-Armature-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03380", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03380", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03381", + "gapId": "keymap:Bevel Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03381-keymap-Bevel-Modal-Map-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03381.py -- tests/files/web/generated/M21-GAP-03381-keymap-Bevel-Modal-Map-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03381", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03381", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03382", + "gapId": "keymap:Clip Dopesheet Editor:CLIP_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03382-keymap-Clip-Dopesheet-Editor-CLIP_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03382.py -- tests/files/web/generated/M21-GAP-03382-keymap-Clip-Dopesheet-Editor-CLIP_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03382", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03382", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03383", + "gapId": "keymap:Clip Editor:CLIP_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03383-keymap-Clip-Editor-CLIP_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03383.py -- tests/files/web/generated/M21-GAP-03383-keymap-Clip-Editor-CLIP_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03383", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03383", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03384", + "gapId": "keymap:Clip Graph Editor:CLIP_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03384-keymap-Clip-Graph-Editor-CLIP_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03384.py -- tests/files/web/generated/M21-GAP-03384-keymap-Clip-Graph-Editor-CLIP_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03384", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03384", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03385", + "gapId": "keymap:Clip Time Scrub:CLIP_EDITOR:PREVIEW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03385-keymap-Clip-Time-Scrub-CLIP_EDITOR-PREVIEW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03385.py -- tests/files/web/generated/M21-GAP-03385-keymap-Clip-Time-Scrub-CLIP_EDITOR-PREVIEW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03385", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03385", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03386", + "gapId": "keymap:Clip:CLIP_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03386-keymap-Clip-CLIP_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03386.py -- tests/files/web/generated/M21-GAP-03386-keymap-Clip-CLIP_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03386", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03386", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03387", + "gapId": "keymap:Console:CONSOLE:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03387-keymap-Console-CONSOLE-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03387.py -- tests/files/web/generated/M21-GAP-03387-keymap-Console-CONSOLE-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03387", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03387", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03388", + "gapId": "keymap:Curve Pen Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03388-keymap-Curve-Pen-Modal-Map-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03388.py -- tests/files/web/generated/M21-GAP-03388-keymap-Curve-Pen-Modal-Map-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03388", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03388", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03389", + "gapId": "keymap:Curve:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03389-keymap-Curve-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03389.py -- tests/files/web/generated/M21-GAP-03389-keymap-Curve-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03389", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03389", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03390", + "gapId": "keymap:Curves:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03390-keymap-Curves-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03390.py -- tests/files/web/generated/M21-GAP-03390-keymap-Curves-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03390", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03390", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03391", + "gapId": "keymap:Custom Normals Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03391-keymap-Custom-Normals-Modal-Map-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03391.py -- tests/files/web/generated/M21-GAP-03391-keymap-Custom-Normals-Modal-Map-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03391", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03391", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03392", + "gapId": "keymap:Dopesheet Generic:DOPESHEET_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03392-keymap-Dopesheet-Generic-DOPESHEET_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03392.py -- tests/files/web/generated/M21-GAP-03392-keymap-Dopesheet-Generic-DOPESHEET_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03392", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03392", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03393", + "gapId": "keymap:Dopesheet:DOPESHEET_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03393-keymap-Dopesheet-DOPESHEET_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03393.py -- tests/files/web/generated/M21-GAP-03393-keymap-Dopesheet-DOPESHEET_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03393", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03393", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03394", + "gapId": "keymap:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03394-keymap-Eyedropper-ColorRamp-PointSampling-Map-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03394.py -- tests/files/web/generated/M21-GAP-03394-keymap-Eyedropper-ColorRamp-PointSampling-Map-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03394", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03394", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03395", + "gapId": "keymap:Eyedropper Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03395-keymap-Eyedropper-Modal-Map-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03395.py -- tests/files/web/generated/M21-GAP-03395-keymap-Eyedropper-Modal-Map-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03395", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03395", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03396", + "gapId": "keymap:File Browser Buttons:FILE_BROWSER:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03396-keymap-File-Browser-Buttons-FILE_BROWSER-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03396.py -- tests/files/web/generated/M21-GAP-03396-keymap-File-Browser-Buttons-FILE_BROWSER-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03396", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03396", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03397", + "gapId": "keymap:File Browser Main:FILE_BROWSER:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03397-keymap-File-Browser-Main-FILE_BROWSER-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03397.py -- tests/files/web/generated/M21-GAP-03397-keymap-File-Browser-Main-FILE_BROWSER-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03397", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03397", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03398", + "gapId": "keymap:File Browser:FILE_BROWSER:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03398-keymap-File-Browser-FILE_BROWSER-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03398.py -- tests/files/web/generated/M21-GAP-03398-keymap-File-Browser-FILE_BROWSER-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03398", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03398", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03399", + "gapId": "keymap:Fill Tool Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03399-keymap-Fill-Tool-Modal-Map-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03399.py -- tests/files/web/generated/M21-GAP-03399-keymap-Fill-Tool-Modal-Map-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03399", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03399", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03400", + "gapId": "keymap:Font:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03400-keymap-Font-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03400.py -- tests/files/web/generated/M21-GAP-03400-keymap-Font-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03400", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03400", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03401", + "gapId": "keymap:Frames:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03401-keymap-Frames-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03401.py -- tests/files/web/generated/M21-GAP-03401-keymap-Frames-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03401", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03401", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03402", + "gapId": "keymap:Generic Gizmo Click Drag:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03402-keymap-Generic-Gizmo-Click-Drag-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03402.py -- tests/files/web/generated/M21-GAP-03402-keymap-Generic-Gizmo-Click-Drag-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03402", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03402", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03403", + "gapId": "keymap:Generic Gizmo Drag:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03403-keymap-Generic-Gizmo-Drag-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03403.py -- tests/files/web/generated/M21-GAP-03403-keymap-Generic-Gizmo-Drag-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03403", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03403", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03404", + "gapId": "keymap:Generic Gizmo Maybe Drag:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03404-keymap-Generic-Gizmo-Maybe-Drag-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03404.py -- tests/files/web/generated/M21-GAP-03404-keymap-Generic-Gizmo-Maybe-Drag-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03404", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03404", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03405", + "gapId": "keymap:Generic Gizmo Select:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03405-keymap-Generic-Gizmo-Select-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03405.py -- tests/files/web/generated/M21-GAP-03405-keymap-Generic-Gizmo-Select-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03405", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03405", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03406", + "gapId": "keymap:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03406-keymap-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03406.py -- tests/files/web/generated/M21-GAP-03406-keymap-Generic-Gizmo-Tweak-Modal-Map-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03406", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03406", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03407", + "gapId": "keymap:Generic Gizmo:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03407-keymap-Generic-Gizmo-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03407.py -- tests/files/web/generated/M21-GAP-03407-keymap-Generic-Gizmo-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03407", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03407", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03408", + "gapId": "keymap:Generic Tool: Annotate Eraser:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03408-keymap-Generic-Tool-Annotate-Eraser-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03408.py -- tests/files/web/generated/M21-GAP-03408-keymap-Generic-Tool-Annotate-Eraser-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03408", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03408", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03409", + "gapId": "keymap:Generic Tool: Annotate Line:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03409-keymap-Generic-Tool-Annotate-Line-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03409.py -- tests/files/web/generated/M21-GAP-03409-keymap-Generic-Tool-Annotate-Line-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03409", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03409", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03410", + "gapId": "keymap:Generic Tool: Annotate Polygon:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03410-keymap-Generic-Tool-Annotate-Polygon-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03410.py -- tests/files/web/generated/M21-GAP-03410-keymap-Generic-Tool-Annotate-Polygon-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03410", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03410", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03411", + "gapId": "keymap:Generic Tool: Annotate:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03411-keymap-Generic-Tool-Annotate-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03411.py -- tests/files/web/generated/M21-GAP-03411-keymap-Generic-Tool-Annotate-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03411", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03411", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03412", + "gapId": "keymap:Gesture Box:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03412-keymap-Gesture-Box-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03412.py -- tests/files/web/generated/M21-GAP-03412-keymap-Gesture-Box-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03412", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03412", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03413", + "gapId": "keymap:Gesture Lasso:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03413-keymap-Gesture-Lasso-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03413.py -- tests/files/web/generated/M21-GAP-03413-keymap-Gesture-Lasso-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03413", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03413", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03414", + "gapId": "keymap:Gesture Polyline:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03414-keymap-Gesture-Polyline-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03414.py -- tests/files/web/generated/M21-GAP-03414-keymap-Gesture-Polyline-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03414", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03414", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03415", + "gapId": "keymap:Gesture Straight Line:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03415-keymap-Gesture-Straight-Line-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03415.py -- tests/files/web/generated/M21-GAP-03415-keymap-Gesture-Straight-Line-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03415", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03415", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03416", + "gapId": "keymap:Gesture Zoom Border:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03416-keymap-Gesture-Zoom-Border-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03416.py -- tests/files/web/generated/M21-GAP-03416-keymap-Gesture-Zoom-Border-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03416", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03416", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03417", + "gapId": "keymap:Graph Editor Generic:GRAPH_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03417-keymap-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03417.py -- tests/files/web/generated/M21-GAP-03417-keymap-Graph-Editor-Generic-GRAPH_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03417", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03417", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03418", + "gapId": "keymap:Graph Editor:GRAPH_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03418-keymap-Graph-Editor-GRAPH_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03418.py -- tests/files/web/generated/M21-GAP-03418-keymap-Graph-Editor-GRAPH_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03418", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03418", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03419", + "gapId": "keymap:Grease Pencil Brush Stroke:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03419-keymap-Grease-Pencil-Brush-Stroke-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03419.py -- tests/files/web/generated/M21-GAP-03419-keymap-Grease-Pencil-Brush-Stroke-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03419", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03419", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03420", + "gapId": "keymap:Grease Pencil Draw Mode:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03420-keymap-Grease-Pencil-Draw-Mode-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03420.py -- tests/files/web/generated/M21-GAP-03420-keymap-Grease-Pencil-Draw-Mode-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03420", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03420", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03421", + "gapId": "keymap:Grease Pencil Edit Mode:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03421-keymap-Grease-Pencil-Edit-Mode-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03421.py -- tests/files/web/generated/M21-GAP-03421-keymap-Grease-Pencil-Edit-Mode-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03421", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03421", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03422", + "gapId": "keymap:Grease Pencil Fill Tool:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03422-keymap-Grease-Pencil-Fill-Tool-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03422.py -- tests/files/web/generated/M21-GAP-03422-keymap-Grease-Pencil-Fill-Tool-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03422", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03422", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03423", + "gapId": "keymap:Grease Pencil Sculpt Mode:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03423-keymap-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03423.py -- tests/files/web/generated/M21-GAP-03423-keymap-Grease-Pencil-Sculpt-Mode-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03423", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03423", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03424", + "gapId": "keymap:Grease Pencil Selection:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03424-keymap-Grease-Pencil-Selection-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03424.py -- tests/files/web/generated/M21-GAP-03424-keymap-Grease-Pencil-Selection-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03424", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03424", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03425", + "gapId": "keymap:Grease Pencil Vertex Paint:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03425-keymap-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03425.py -- tests/files/web/generated/M21-GAP-03425-keymap-Grease-Pencil-Vertex-Paint-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03425", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03425", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03426", + "gapId": "keymap:Grease Pencil Weight Paint:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03426-keymap-Grease-Pencil-Weight-Paint-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03426.py -- tests/files/web/generated/M21-GAP-03426-keymap-Grease-Pencil-Weight-Paint-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03426", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03426", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03427", + "gapId": "keymap:Grease Pencil:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03427-keymap-Grease-Pencil-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03427.py -- tests/files/web/generated/M21-GAP-03427-keymap-Grease-Pencil-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03427", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03427", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03428", + "gapId": "keymap:Image Editor Tool: Mask, Box:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03428-keymap-Image-Editor-Tool-Mask-Box-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03428.py -- tests/files/web/generated/M21-GAP-03428-keymap-Image-Editor-Tool-Mask-Box-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03428", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03428", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03429", + "gapId": "keymap:Image Editor Tool: Mask, Circle:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03429-keymap-Image-Editor-Tool-Mask-Circle-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03429.py -- tests/files/web/generated/M21-GAP-03429-keymap-Image-Editor-Tool-Mask-Circle-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03429", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03429", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03430", + "gapId": "keymap:Image Editor Tool: Mask, Cursor:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03430-keymap-Image-Editor-Tool-Mask-Cursor-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03430.py -- tests/files/web/generated/M21-GAP-03430-keymap-Image-Editor-Tool-Mask-Cursor-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03430", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03430", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03431", + "gapId": "keymap:Image Editor Tool: Mask, Move:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03431-keymap-Image-Editor-Tool-Mask-Move-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03431.py -- tests/files/web/generated/M21-GAP-03431-keymap-Image-Editor-Tool-Mask-Move-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03431", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03431", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03432", + "gapId": "keymap:Image Editor Tool: Mask, Rotate:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03432-keymap-Image-Editor-Tool-Mask-Rotate-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03432.py -- tests/files/web/generated/M21-GAP-03432-keymap-Image-Editor-Tool-Mask-Rotate-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03432", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03432", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03433", + "gapId": "keymap:Image Editor Tool: Mask, Scale:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03433-keymap-Image-Editor-Tool-Mask-Scale-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03433.py -- tests/files/web/generated/M21-GAP-03433-keymap-Image-Editor-Tool-Mask-Scale-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03433", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03433", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03434", + "gapId": "keymap:Image Editor Tool: Mask, Select Box (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03434-keymap-Image-Editor-Tool-Mask-Select-Box-fallback-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03434.py -- tests/files/web/generated/M21-GAP-03434-keymap-Image-Editor-Tool-Mask-Select-Box-fallback-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03434", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03434", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03435", + "gapId": "keymap:Image Editor Tool: Mask, Select Box:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03435-keymap-Image-Editor-Tool-Mask-Select-Box-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03435.py -- tests/files/web/generated/M21-GAP-03435-keymap-Image-Editor-Tool-Mask-Select-Box-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03435", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03435", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03436", + "gapId": "keymap:Image Editor Tool: Mask, Select Circle (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03436-keymap-Image-Editor-Tool-Mask-Select-Circle-fallback-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03436.py -- tests/files/web/generated/M21-GAP-03436-keymap-Image-Editor-Tool-Mask-Select-Circle-fallback-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03436", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03436", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03437", + "gapId": "keymap:Image Editor Tool: Mask, Select Circle:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03437-keymap-Image-Editor-Tool-Mask-Select-Circle-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03437.py -- tests/files/web/generated/M21-GAP-03437-keymap-Image-Editor-Tool-Mask-Select-Circle-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03437", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03437", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03438", + "gapId": "keymap:Image Editor Tool: Mask, Select Lasso (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03438-keymap-Image-Editor-Tool-Mask-Select-Lasso-fallback-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03438.py -- tests/files/web/generated/M21-GAP-03438-keymap-Image-Editor-Tool-Mask-Select-Lasso-fallback-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03438", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03438", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03439", + "gapId": "keymap:Image Editor Tool: Mask, Select Lasso:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03439-keymap-Image-Editor-Tool-Mask-Select-Lasso-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03439.py -- tests/files/web/generated/M21-GAP-03439-keymap-Image-Editor-Tool-Mask-Select-Lasso-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03439", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03439", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03440", + "gapId": "keymap:Image Editor Tool: Mask, Transform:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03440-keymap-Image-Editor-Tool-Mask-Transform-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03440.py -- tests/files/web/generated/M21-GAP-03440-keymap-Image-Editor-Tool-Mask-Transform-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03440", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03440", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03441", + "gapId": "keymap:Image Editor Tool: Mask, Tweak (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03441-keymap-Image-Editor-Tool-Mask-Tweak-fallback-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03441.py -- tests/files/web/generated/M21-GAP-03441-keymap-Image-Editor-Tool-Mask-Tweak-fallback-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03441", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03441", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03442", + "gapId": "keymap:Image Editor Tool: Mask, Tweak:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03442-keymap-Image-Editor-Tool-Mask-Tweak-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03442.py -- tests/files/web/generated/M21-GAP-03442-keymap-Image-Editor-Tool-Mask-Tweak-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03442", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03442", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03443", + "gapId": "keymap:Image Editor Tool: Sample:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03443-keymap-Image-Editor-Tool-Sample-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03443.py -- tests/files/web/generated/M21-GAP-03443-keymap-Image-Editor-Tool-Sample-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03443", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03443", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03444", + "gapId": "keymap:Image Editor Tool: Uv, Cursor:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03444-keymap-Image-Editor-Tool-Uv-Cursor-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03444.py -- tests/files/web/generated/M21-GAP-03444-keymap-Image-Editor-Tool-Uv-Cursor-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03444", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03444", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03445", + "gapId": "keymap:Image Editor Tool: Uv, Grab:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03445-keymap-Image-Editor-Tool-Uv-Grab-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03445.py -- tests/files/web/generated/M21-GAP-03445-keymap-Image-Editor-Tool-Uv-Grab-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03445", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03445", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03446", + "gapId": "keymap:Image Editor Tool: Uv, Move:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03446-keymap-Image-Editor-Tool-Uv-Move-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03446.py -- tests/files/web/generated/M21-GAP-03446-keymap-Image-Editor-Tool-Uv-Move-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03446", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03446", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03447", + "gapId": "keymap:Image Editor Tool: Uv, Pinch:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03447-keymap-Image-Editor-Tool-Uv-Pinch-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03447.py -- tests/files/web/generated/M21-GAP-03447-keymap-Image-Editor-Tool-Uv-Pinch-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03447", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03447", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03448", + "gapId": "keymap:Image Editor Tool: Uv, Relax:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03448-keymap-Image-Editor-Tool-Uv-Relax-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03448.py -- tests/files/web/generated/M21-GAP-03448-keymap-Image-Editor-Tool-Uv-Relax-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03448", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03448", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03449", + "gapId": "keymap:Image Editor Tool: Uv, Rip Region:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03449-keymap-Image-Editor-Tool-Uv-Rip-Region-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03449.py -- tests/files/web/generated/M21-GAP-03449-keymap-Image-Editor-Tool-Uv-Rip-Region-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03449", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03449", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03450", + "gapId": "keymap:Image Editor Tool: Uv, Rotate:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03450-keymap-Image-Editor-Tool-Uv-Rotate-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03450.py -- tests/files/web/generated/M21-GAP-03450-keymap-Image-Editor-Tool-Uv-Rotate-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03450", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03450", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03451", + "gapId": "keymap:Image Editor Tool: Uv, Scale:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03451-keymap-Image-Editor-Tool-Uv-Scale-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03451.py -- tests/files/web/generated/M21-GAP-03451-keymap-Image-Editor-Tool-Uv-Scale-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03451", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03451", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03452", + "gapId": "keymap:Image Editor Tool: Uv, Select Box (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03452-keymap-Image-Editor-Tool-Uv-Select-Box-fallback-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03452.py -- tests/files/web/generated/M21-GAP-03452-keymap-Image-Editor-Tool-Uv-Select-Box-fallback-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03452", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03452", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03453", + "gapId": "keymap:Image Editor Tool: Uv, Select Box:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03453-keymap-Image-Editor-Tool-Uv-Select-Box-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03453.py -- tests/files/web/generated/M21-GAP-03453-keymap-Image-Editor-Tool-Uv-Select-Box-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03453", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03453", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03454", + "gapId": "keymap:Image Editor Tool: Uv, Select Circle (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03454-keymap-Image-Editor-Tool-Uv-Select-Circle-fallback-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03454.py -- tests/files/web/generated/M21-GAP-03454-keymap-Image-Editor-Tool-Uv-Select-Circle-fallback-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03454", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03454", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03455", + "gapId": "keymap:Image Editor Tool: Uv, Select Circle:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03455-keymap-Image-Editor-Tool-Uv-Select-Circle-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03455.py -- tests/files/web/generated/M21-GAP-03455-keymap-Image-Editor-Tool-Uv-Select-Circle-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03455", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03455", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03456", + "gapId": "keymap:Image Editor Tool: Uv, Select Lasso (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03456-keymap-Image-Editor-Tool-Uv-Select-Lasso-fallback-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03456.py -- tests/files/web/generated/M21-GAP-03456-keymap-Image-Editor-Tool-Uv-Select-Lasso-fallback-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03456", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03456", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03457", + "gapId": "keymap:Image Editor Tool: Uv, Select Lasso:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03457-keymap-Image-Editor-Tool-Uv-Select-Lasso-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03457.py -- tests/files/web/generated/M21-GAP-03457-keymap-Image-Editor-Tool-Uv-Select-Lasso-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03457", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03457", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03458", + "gapId": "keymap:Image Editor Tool: Uv, Tweak (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03458-keymap-Image-Editor-Tool-Uv-Tweak-fallback-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03458.py -- tests/files/web/generated/M21-GAP-03458-keymap-Image-Editor-Tool-Uv-Tweak-fallback-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03458", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03458", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03459", + "gapId": "keymap:Image Editor Tool: Uv, Tweak:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03459-keymap-Image-Editor-Tool-Uv-Tweak-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03459.py -- tests/files/web/generated/M21-GAP-03459-keymap-Image-Editor-Tool-Uv-Tweak-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03459", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03459", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03460", + "gapId": "keymap:Image Generic:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03460-keymap-Image-Generic-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03460.py -- tests/files/web/generated/M21-GAP-03460-keymap-Image-Generic-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03460", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03460", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03461", + "gapId": "keymap:Image Paint:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03461-keymap-Image-Paint-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03461.py -- tests/files/web/generated/M21-GAP-03461-keymap-Image-Paint-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03461", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03461", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03462", + "gapId": "keymap:Image:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03462-keymap-Image-IMAGE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03462.py -- tests/files/web/generated/M21-GAP-03462-keymap-Image-IMAGE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03462", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03462", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03463", + "gapId": "keymap:Info:INFO:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03463-keymap-Info-INFO-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03463.py -- tests/files/web/generated/M21-GAP-03463-keymap-Info-INFO-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03463", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03463", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03464", + "gapId": "keymap:Interpolate Tool Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03464-keymap-Interpolate-Tool-Modal-Map-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03464.py -- tests/files/web/generated/M21-GAP-03464-keymap-Interpolate-Tool-Modal-Map-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03464", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03464", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03465", + "gapId": "keymap:Knife Tool Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03465-keymap-Knife-Tool-Modal-Map-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03465.py -- tests/files/web/generated/M21-GAP-03465-keymap-Knife-Tool-Modal-Map-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03465", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03465", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03466", + "gapId": "keymap:Lattice:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03466-keymap-Lattice-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03466.py -- tests/files/web/generated/M21-GAP-03466-keymap-Lattice-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03466", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03466", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03467", + "gapId": "keymap:Markers:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03467-keymap-Markers-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03467.py -- tests/files/web/generated/M21-GAP-03467-keymap-Markers-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03467", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03467", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03468", + "gapId": "keymap:Mask Editing:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03468-keymap-Mask-Editing-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03468.py -- tests/files/web/generated/M21-GAP-03468-keymap-Mask-Editing-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03468", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03468", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03469", + "gapId": "keymap:Mesh Filter Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03469-keymap-Mesh-Filter-Modal-Map-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03469.py -- tests/files/web/generated/M21-GAP-03469-keymap-Mesh-Filter-Modal-Map-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03469", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03469", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03470", + "gapId": "keymap:Mesh:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03470-keymap-Mesh-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03470.py -- tests/files/web/generated/M21-GAP-03470-keymap-Mesh-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03470", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03470", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03471", + "gapId": "keymap:Metaball:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03471-keymap-Metaball-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03471.py -- tests/files/web/generated/M21-GAP-03471-keymap-Metaball-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03471", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03471", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03472", + "gapId": "keymap:NLA Editor:NLA_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03472-keymap-NLA-Editor-NLA_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03472.py -- tests/files/web/generated/M21-GAP-03472-keymap-NLA-Editor-NLA_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03472", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03472", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03473", + "gapId": "keymap:NLA Generic:NLA_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03473-keymap-NLA-Generic-NLA_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03473.py -- tests/files/web/generated/M21-GAP-03473-keymap-NLA-Generic-NLA_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03473", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03473", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03474", + "gapId": "keymap:NLA Tracks:NLA_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03474-keymap-NLA-Tracks-NLA_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03474.py -- tests/files/web/generated/M21-GAP-03474-keymap-NLA-Tracks-NLA_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03474", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03474", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03475", + "gapId": "keymap:Node Editor:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03475-keymap-Node-Editor-NODE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03475.py -- tests/files/web/generated/M21-GAP-03475-keymap-Node-Editor-NODE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03475", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03475", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03476", + "gapId": "keymap:Node Generic:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03476-keymap-Node-Generic-NODE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03476.py -- tests/files/web/generated/M21-GAP-03476-keymap-Node-Generic-NODE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03476", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03476", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03477", + "gapId": "keymap:Node Link Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03477-keymap-Node-Link-Modal-Map-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03477.py -- tests/files/web/generated/M21-GAP-03477-keymap-Node-Link-Modal-Map-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03477", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03477", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03478", + "gapId": "keymap:Node Resize Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03478-keymap-Node-Resize-Modal-Map-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03478.py -- tests/files/web/generated/M21-GAP-03478-keymap-Node-Resize-Modal-Map-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03478", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03478", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03479", + "gapId": "keymap:Node Tool: Add Reroute:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03479-keymap-Node-Tool-Add-Reroute-NODE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03479.py -- tests/files/web/generated/M21-GAP-03479-keymap-Node-Tool-Add-Reroute-NODE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03479", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03479", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03480", + "gapId": "keymap:Node Tool: Links Cut:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03480-keymap-Node-Tool-Links-Cut-NODE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03480.py -- tests/files/web/generated/M21-GAP-03480-keymap-Node-Tool-Links-Cut-NODE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03480", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03480", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03481", + "gapId": "keymap:Node Tool: Mute Links:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03481-keymap-Node-Tool-Mute-Links-NODE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03481.py -- tests/files/web/generated/M21-GAP-03481-keymap-Node-Tool-Mute-Links-NODE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03481", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03481", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03482", + "gapId": "keymap:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03482-keymap-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03482.py -- tests/files/web/generated/M21-GAP-03482-keymap-Node-Tool-Select-Box-fallback-NODE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03482", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03482", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03483", + "gapId": "keymap:Node Tool: Select Box:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03483-keymap-Node-Tool-Select-Box-NODE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03483.py -- tests/files/web/generated/M21-GAP-03483-keymap-Node-Tool-Select-Box-NODE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03483", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03483", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03484", + "gapId": "keymap:Node Tool: Select Circle (fallback):NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03484-keymap-Node-Tool-Select-Circle-fallback-NODE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03484.py -- tests/files/web/generated/M21-GAP-03484-keymap-Node-Tool-Select-Circle-fallback-NODE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03484", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03484", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03485", + "gapId": "keymap:Node Tool: Select Circle:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03485-keymap-Node-Tool-Select-Circle-NODE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03485.py -- tests/files/web/generated/M21-GAP-03485-keymap-Node-Tool-Select-Circle-NODE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03485", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03485", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03486", + "gapId": "keymap:Node Tool: Select Lasso (fallback):NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03486-keymap-Node-Tool-Select-Lasso-fallback-NODE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03486.py -- tests/files/web/generated/M21-GAP-03486-keymap-Node-Tool-Select-Lasso-fallback-NODE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03486", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03486", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03487", + "gapId": "keymap:Node Tool: Select Lasso:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03487-keymap-Node-Tool-Select-Lasso-NODE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03487.py -- tests/files/web/generated/M21-GAP-03487-keymap-Node-Tool-Select-Lasso-NODE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03487", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03487", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03488", + "gapId": "keymap:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03488-keymap-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03488.py -- tests/files/web/generated/M21-GAP-03488-keymap-Node-Tool-Tweak-fallback-NODE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03488", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03488", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03489", + "gapId": "keymap:Node Tool: Tweak:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03489-keymap-Node-Tool-Tweak-NODE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03489.py -- tests/files/web/generated/M21-GAP-03489-keymap-Node-Tool-Tweak-NODE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03489", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03489", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03490", + "gapId": "keymap:Object Mode:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03490-keymap-Object-Mode-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03490.py -- tests/files/web/generated/M21-GAP-03490-keymap-Object-Mode-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03490", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03490", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03491", + "gapId": "keymap:Object Non-modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03491-keymap-Object-Non-modal-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03491.py -- tests/files/web/generated/M21-GAP-03491-keymap-Object-Non-modal-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03491", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03491", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03492", + "gapId": "keymap:Outliner:OUTLINER:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03492-keymap-Outliner-OUTLINER-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03492.py -- tests/files/web/generated/M21-GAP-03492-keymap-Outliner-OUTLINER-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03492", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03492", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03493", + "gapId": "keymap:Paint Curve:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03493-keymap-Paint-Curve-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03493.py -- tests/files/web/generated/M21-GAP-03493-keymap-Paint-Curve-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03493", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03493", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03494", + "gapId": "keymap:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03494-keymap-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03494.py -- tests/files/web/generated/M21-GAP-03494-keymap-Paint-Face-Mask-Weight-Vertex-Texture-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03494", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03494", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03495", + "gapId": "keymap:Paint Stroke Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03495-keymap-Paint-Stroke-Modal-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03495.py -- tests/files/web/generated/M21-GAP-03495-keymap-Paint-Stroke-Modal-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03495", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03495", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03496", + "gapId": "keymap:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03496-keymap-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03496.py -- tests/files/web/generated/M21-GAP-03496-keymap-Paint-Vertex-Selection-Weight-Vertex-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03496", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03496", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03497", + "gapId": "keymap:Particle:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03497-keymap-Particle-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03497.py -- tests/files/web/generated/M21-GAP-03497-keymap-Particle-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03497", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03497", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03498", + "gapId": "keymap:Pen Tool Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03498-keymap-Pen-Tool-Modal-Map-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03498.py -- tests/files/web/generated/M21-GAP-03498-keymap-Pen-Tool-Modal-Map-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03498", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03498", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03499", + "gapId": "keymap:Point Cloud:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03499-keymap-Point-Cloud-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03499.py -- tests/files/web/generated/M21-GAP-03499-keymap-Point-Cloud-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03499", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03499", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03500", + "gapId": "keymap:Pose:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03500-keymap-Pose-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03500.py -- tests/files/web/generated/M21-GAP-03500-keymap-Pose-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03500", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03500", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03501", + "gapId": "keymap:Preferences:PREFERENCES:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03501-keymap-Preferences-PREFERENCES-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03501.py -- tests/files/web/generated/M21-GAP-03501-keymap-Preferences-PREFERENCES-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03501", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03501", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03502", + "gapId": "keymap:Preferences_nav:PREFERENCES:UI", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03502-keymap-Preferences_nav-PREFERENCES-UI.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03502.py -- tests/files/web/generated/M21-GAP-03502-keymap-Preferences_nav-PREFERENCES-UI.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03502", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03502", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03503", + "gapId": "keymap:Preview Tool: Cursor:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03503-keymap-Preview-Tool-Cursor-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03503.py -- tests/files/web/generated/M21-GAP-03503-keymap-Preview-Tool-Cursor-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03503", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03503", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03504", + "gapId": "keymap:Preview Tool: Move:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03504-keymap-Preview-Tool-Move-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03504.py -- tests/files/web/generated/M21-GAP-03504-keymap-Preview-Tool-Move-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03504", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03504", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03505", + "gapId": "keymap:Preview Tool: Rotate:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03505-keymap-Preview-Tool-Rotate-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03505.py -- tests/files/web/generated/M21-GAP-03505-keymap-Preview-Tool-Rotate-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03505", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03505", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03506", + "gapId": "keymap:Preview Tool: Sample:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03506-keymap-Preview-Tool-Sample-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03506.py -- tests/files/web/generated/M21-GAP-03506-keymap-Preview-Tool-Sample-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03506", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03506", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03507", + "gapId": "keymap:Preview Tool: Scale:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03507-keymap-Preview-Tool-Scale-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03507.py -- tests/files/web/generated/M21-GAP-03507-keymap-Preview-Tool-Scale-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03507", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03507", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03508", + "gapId": "keymap:Preview Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03508-keymap-Preview-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03508.py -- tests/files/web/generated/M21-GAP-03508-keymap-Preview-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03508", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03508", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03509", + "gapId": "keymap:Preview Tool: Select Box:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03509-keymap-Preview-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03509.py -- tests/files/web/generated/M21-GAP-03509-keymap-Preview-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03509", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03509", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03510", + "gapId": "keymap:Preview Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03510-keymap-Preview-Tool-Select-Circle-fallback-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03510.py -- tests/files/web/generated/M21-GAP-03510-keymap-Preview-Tool-Select-Circle-fallback-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03510", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03510", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03511", + "gapId": "keymap:Preview Tool: Select Circle:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03511-keymap-Preview-Tool-Select-Circle-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03511.py -- tests/files/web/generated/M21-GAP-03511-keymap-Preview-Tool-Select-Circle-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03511", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03511", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03512", + "gapId": "keymap:Preview Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03512-keymap-Preview-Tool-Select-Lasso-fallback-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03512.py -- tests/files/web/generated/M21-GAP-03512-keymap-Preview-Tool-Select-Lasso-fallback-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03512", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03512", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03513", + "gapId": "keymap:Preview Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03513-keymap-Preview-Tool-Select-Lasso-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03513.py -- tests/files/web/generated/M21-GAP-03513-keymap-Preview-Tool-Select-Lasso-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03513", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03513", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03514", + "gapId": "keymap:Preview Tool: Tweak (fallback):SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03514-keymap-Preview-Tool-Tweak-fallback-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03514.py -- tests/files/web/generated/M21-GAP-03514-keymap-Preview-Tool-Tweak-fallback-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03514", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03514", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03515", + "gapId": "keymap:Preview Tool: Tweak:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03515-keymap-Preview-Tool-Tweak-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03515.py -- tests/files/web/generated/M21-GAP-03515-keymap-Preview-Tool-Tweak-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03515", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03515", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03516", + "gapId": "keymap:Preview:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03516-keymap-Preview-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03516.py -- tests/files/web/generated/M21-GAP-03516-keymap-Preview-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03516", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03516", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03517", + "gapId": "keymap:Primitive Tool Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03517-keymap-Primitive-Tool-Modal-Map-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03517.py -- tests/files/web/generated/M21-GAP-03517-keymap-Primitive-Tool-Modal-Map-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03517", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03517", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03518", + "gapId": "keymap:Property Editor:PROPERTIES:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03518-keymap-Property-Editor-PROPERTIES-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03518.py -- tests/files/web/generated/M21-GAP-03518-keymap-Property-Editor-PROPERTIES-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03518", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03518", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03519", + "gapId": "keymap:Region Context Menu:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03519-keymap-Region-Context-Menu-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03519.py -- tests/files/web/generated/M21-GAP-03519-keymap-Region-Context-Menu-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03519", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03519", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03520", + "gapId": "keymap:Screen Editing:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03520-keymap-Screen-Editing-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03520.py -- tests/files/web/generated/M21-GAP-03520-keymap-Screen-Editing-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03520", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03520", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03521", + "gapId": "keymap:Screen:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03521-keymap-Screen-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03521.py -- tests/files/web/generated/M21-GAP-03521-keymap-Screen-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03521", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03521", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03522", + "gapId": "keymap:Sculpt Curves:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03522-keymap-Sculpt-Curves-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03522.py -- tests/files/web/generated/M21-GAP-03522-keymap-Sculpt-Curves-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03522", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03522", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03523", + "gapId": "keymap:Sculpt Expand Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03523-keymap-Sculpt-Expand-Modal-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03523.py -- tests/files/web/generated/M21-GAP-03523-keymap-Sculpt-Expand-Modal-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03523", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03523", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03524", + "gapId": "keymap:Sculpt:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03524-keymap-Sculpt-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03524.py -- tests/files/web/generated/M21-GAP-03524-keymap-Sculpt-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03524", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03524", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03525", + "gapId": "keymap:Sequencer Channels:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03525-keymap-Sequencer-Channels-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03525.py -- tests/files/web/generated/M21-GAP-03525-keymap-Sequencer-Channels-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03525", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03525", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03526", + "gapId": "keymap:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03526-keymap-Sequencer-Tool-Blade-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03526.py -- tests/files/web/generated/M21-GAP-03526-keymap-Sequencer-Tool-Blade-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03526", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03526", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03527", + "gapId": "keymap:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03527-keymap-Sequencer-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03527.py -- tests/files/web/generated/M21-GAP-03527-keymap-Sequencer-Tool-Select-Box-fallback-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03527", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03527", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03528", + "gapId": "keymap:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03528-keymap-Sequencer-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03528.py -- tests/files/web/generated/M21-GAP-03528-keymap-Sequencer-Tool-Select-Box-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03528", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03528", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03529", + "gapId": "keymap:Sequencer Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03529-keymap-Sequencer-Tool-Select-Circle-fallback-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03529.py -- tests/files/web/generated/M21-GAP-03529-keymap-Sequencer-Tool-Select-Circle-fallback-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03529", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03529", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03530", + "gapId": "keymap:Sequencer Tool: Select Circle:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03530-keymap-Sequencer-Tool-Select-Circle-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03530.py -- tests/files/web/generated/M21-GAP-03530-keymap-Sequencer-Tool-Select-Circle-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03530", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03530", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03531", + "gapId": "keymap:Sequencer Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03531-keymap-Sequencer-Tool-Select-Lasso-fallback-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03531.py -- tests/files/web/generated/M21-GAP-03531-keymap-Sequencer-Tool-Select-Lasso-fallback-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03531", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03531", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03532", + "gapId": "keymap:Sequencer Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03532-keymap-Sequencer-Tool-Select-Lasso-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03532.py -- tests/files/web/generated/M21-GAP-03532-keymap-Sequencer-Tool-Select-Lasso-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03532", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03532", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03533", + "gapId": "keymap:Sequencer Tool: Slip:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03533-keymap-Sequencer-Tool-Slip-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03533.py -- tests/files/web/generated/M21-GAP-03533-keymap-Sequencer-Tool-Slip-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03533", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03533", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03534", + "gapId": "keymap:Sequencer:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03534-keymap-Sequencer-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03534.py -- tests/files/web/generated/M21-GAP-03534-keymap-Sequencer-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03534", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03534", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03535", + "gapId": "keymap:Slip Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03535-keymap-Slip-Modal-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03535.py -- tests/files/web/generated/M21-GAP-03535-keymap-Slip-Modal-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03535", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03535", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03536", + "gapId": "keymap:Spreadsheet Generic:SPREADSHEET:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03536-keymap-Spreadsheet-Generic-SPREADSHEET-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03536.py -- tests/files/web/generated/M21-GAP-03536-keymap-Spreadsheet-Generic-SPREADSHEET-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03536", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03536", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03537", + "gapId": "keymap:Standard Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03537-keymap-Standard-Modal-Map-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03537.py -- tests/files/web/generated/M21-GAP-03537-keymap-Standard-Modal-Map-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03537", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03537", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03538", + "gapId": "keymap:Text Generic:TEXT_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03538-keymap-Text-Generic-TEXT_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03538.py -- tests/files/web/generated/M21-GAP-03538-keymap-Text-Generic-TEXT_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03538", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03538", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03539", + "gapId": "keymap:Text:TEXT_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03539-keymap-Text-TEXT_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03539.py -- tests/files/web/generated/M21-GAP-03539-keymap-Text-TEXT_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03539", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03539", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03540", + "gapId": "keymap:Time Scrub:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03540-keymap-Time-Scrub-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03540.py -- tests/files/web/generated/M21-GAP-03540-keymap-Time-Scrub-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03540", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03540", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03541", + "gapId": "keymap:Toolbar Popup:EMPTY:TEMPORARY", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03541-keymap-Toolbar-Popup-EMPTY-TEMPORARY.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03541.py -- tests/files/web/generated/M21-GAP-03541-keymap-Toolbar-Popup-EMPTY-TEMPORARY.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03541", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03541", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03542", + "gapId": "keymap:Transform Axis Target Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03542-keymap-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03542.py -- tests/files/web/generated/M21-GAP-03542-keymap-Transform-Axis-Target-Modal-Map-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03542", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03542", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03543", + "gapId": "keymap:Transform Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03543-keymap-Transform-Modal-Map-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03543.py -- tests/files/web/generated/M21-GAP-03543-keymap-Transform-Modal-Map-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03543", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03543", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03544", + "gapId": "keymap:UV Editor:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03544-keymap-UV-Editor-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03544.py -- tests/files/web/generated/M21-GAP-03544-keymap-UV-Editor-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03544", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03544", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03545", + "gapId": "keymap:User Interface:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03545-keymap-User-Interface-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03545.py -- tests/files/web/generated/M21-GAP-03545-keymap-User-Interface-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03545", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03545", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03546", + "gapId": "keymap:Vertex Paint:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03546-keymap-Vertex-Paint-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03546.py -- tests/files/web/generated/M21-GAP-03546-keymap-Vertex-Paint-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03546", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03546", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03547", + "gapId": "keymap:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03547-keymap-Video-Sequence-Editor-SEQUENCE_EDITOR-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03547.py -- tests/files/web/generated/M21-GAP-03547-keymap-Video-Sequence-Editor-SEQUENCE_EDITOR-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03547", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03547", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03548", + "gapId": "keymap:View2D Buttons List:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03548-keymap-View2D-Buttons-List-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03548.py -- tests/files/web/generated/M21-GAP-03548-keymap-View2D-Buttons-List-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03548", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03548", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03549", + "gapId": "keymap:View2D:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03549-keymap-View2D-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03549.py -- tests/files/web/generated/M21-GAP-03549-keymap-View2D-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03549", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03549", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03550", + "gapId": "keymap:View3D Dolly Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03550-keymap-View3D-Dolly-Modal-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03550.py -- tests/files/web/generated/M21-GAP-03550-keymap-View3D-Dolly-Modal-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03550", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03550", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03551", + "gapId": "keymap:View3D Fly Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03551-keymap-View3D-Fly-Modal-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03551.py -- tests/files/web/generated/M21-GAP-03551-keymap-View3D-Fly-Modal-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03551", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03551", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03552", + "gapId": "keymap:View3D Gesture Circle:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03552-keymap-View3D-Gesture-Circle-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03552.py -- tests/files/web/generated/M21-GAP-03552-keymap-View3D-Gesture-Circle-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03552", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03552", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03553", + "gapId": "keymap:View3D Move Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03553-keymap-View3D-Move-Modal-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03553.py -- tests/files/web/generated/M21-GAP-03553-keymap-View3D-Move-Modal-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03553", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03553", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03554", + "gapId": "keymap:View3D Placement Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03554-keymap-View3D-Placement-Modal-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03554.py -- tests/files/web/generated/M21-GAP-03554-keymap-View3D-Placement-Modal-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03554", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03554", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03555", + "gapId": "keymap:View3D Rotate Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03555-keymap-View3D-Rotate-Modal-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03555.py -- tests/files/web/generated/M21-GAP-03555-keymap-View3D-Rotate-Modal-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03555", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03555", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03556", + "gapId": "keymap:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03556-keymap-View3D-VR-Location-Scouting-Capture-Review-Modal-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03556.py -- tests/files/web/generated/M21-GAP-03556-keymap-View3D-VR-Location-Scouting-Capture-Review-Modal-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03556", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03556", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03557", + "gapId": "keymap:View3D Walk Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03557-keymap-View3D-Walk-Modal-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03557.py -- tests/files/web/generated/M21-GAP-03557-keymap-View3D-Walk-Modal-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03557", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03557", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03558", + "gapId": "keymap:View3D Zoom Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03558-keymap-View3D-Zoom-Modal-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03558.py -- tests/files/web/generated/M21-GAP-03558-keymap-View3D-Zoom-Modal-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03558", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03558", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03559", + "gapId": "keymap:Weight Paint:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03559-keymap-Weight-Paint-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03559.py -- tests/files/web/generated/M21-GAP-03559-keymap-Weight-Paint-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03559", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03559", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03560", + "gapId": "keymap:Window:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03560-keymap-Window-EMPTY-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03560.py -- tests/files/web/generated/M21-GAP-03560-keymap-Window-EMPTY-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03560", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03560", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03561", + "gapId": "region:ASSET_SHELF", + "ownerFamily": "REGION", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03561-region-ASSET_SHELF.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03561.py -- tests/files/web/generated/M21-GAP-03561-region-ASSET_SHELF.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03561", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03561", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03562", + "gapId": "region:ASSET_SHELF_HEADER", + "ownerFamily": "REGION", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03562-region-ASSET_SHELF_HEADER.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03562.py -- tests/files/web/generated/M21-GAP-03562-region-ASSET_SHELF_HEADER.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03562", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03562", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03563", + "gapId": "region:CHANNELS", + "ownerFamily": "REGION", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03563-region-CHANNELS.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03563.py -- tests/files/web/generated/M21-GAP-03563-region-CHANNELS.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03563", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03563", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03564", + "gapId": "region:EXECUTE", + "ownerFamily": "REGION", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03564-region-EXECUTE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03564.py -- tests/files/web/generated/M21-GAP-03564-region-EXECUTE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03564", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03564", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03565", + "gapId": "region:FOOTER", + "ownerFamily": "REGION", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03565-region-FOOTER.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03565.py -- tests/files/web/generated/M21-GAP-03565-region-FOOTER.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03565", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03565", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03566", + "gapId": "region:HEADER", + "ownerFamily": "REGION", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03566-region-HEADER.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03566.py -- tests/files/web/generated/M21-GAP-03566-region-HEADER.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03566", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03566", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03567", + "gapId": "region:HUD", + "ownerFamily": "REGION", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03567-region-HUD.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03567.py -- tests/files/web/generated/M21-GAP-03567-region-HUD.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03567", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03567", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03568", + "gapId": "region:NAVIGATION_BAR", + "ownerFamily": "REGION", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03568-region-NAVIGATION_BAR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03568.py -- tests/files/web/generated/M21-GAP-03568-region-NAVIGATION_BAR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03568", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03568", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03569", + "gapId": "region:PREVIEW", + "ownerFamily": "REGION", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03569-region-PREVIEW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03569.py -- tests/files/web/generated/M21-GAP-03569-region-PREVIEW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03569", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03569", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03570", + "gapId": "region:SCRUBBING", + "ownerFamily": "REGION", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03570-region-SCRUBBING.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03570.py -- tests/files/web/generated/M21-GAP-03570-region-SCRUBBING.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03570", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03570", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03571", + "gapId": "region:TEMPORARY", + "ownerFamily": "REGION", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03571-region-TEMPORARY.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03571.py -- tests/files/web/generated/M21-GAP-03571-region-TEMPORARY.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03571", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03571", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03572", + "gapId": "region:TOOLS", + "ownerFamily": "REGION", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03572-region-TOOLS.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03572.py -- tests/files/web/generated/M21-GAP-03572-region-TOOLS.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03572", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03572", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03573", + "gapId": "region:TOOL_HEADER", + "ownerFamily": "REGION", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03573-region-TOOL_HEADER.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03573.py -- tests/files/web/generated/M21-GAP-03573-region-TOOL_HEADER.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03573", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03573", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03574", + "gapId": "region:TOOL_PROPS", + "ownerFamily": "REGION", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03574-region-TOOL_PROPS.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03574.py -- tests/files/web/generated/M21-GAP-03574-region-TOOL_PROPS.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03574", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03574", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03575", + "gapId": "region:UI", + "ownerFamily": "REGION", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03575-region-UI.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03575.py -- tests/files/web/generated/M21-GAP-03575-region-UI.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03575", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03575", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03576", + "gapId": "region:WINDOW", + "ownerFamily": "REGION", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03576-region-WINDOW.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03576.py -- tests/files/web/generated/M21-GAP-03576-region-WINDOW.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03576", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03576", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03577", + "gapId": "region:XR", + "ownerFamily": "REGION", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03577-region-XR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03577.py -- tests/files/web/generated/M21-GAP-03577-region-XR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03577", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03577", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03578", + "gapId": "space-class:SpaceClipEditor", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03578-space-class-SpaceClipEditor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03578.py -- tests/files/web/generated/M21-GAP-03578-space-class-SpaceClipEditor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03578", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03578", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03579", + "gapId": "space-class:SpaceConsole", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03579-space-class-SpaceConsole.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03579.py -- tests/files/web/generated/M21-GAP-03579-space-class-SpaceConsole.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03579", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03579", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03580", + "gapId": "space-class:SpaceDopeSheetEditor", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03580-space-class-SpaceDopeSheetEditor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03580.py -- tests/files/web/generated/M21-GAP-03580-space-class-SpaceDopeSheetEditor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03580", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03580", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03581", + "gapId": "space-class:SpaceFileBrowser", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03581-space-class-SpaceFileBrowser.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03581.py -- tests/files/web/generated/M21-GAP-03581-space-class-SpaceFileBrowser.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03581", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03581", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03582", + "gapId": "space-class:SpaceGraphEditor", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03582-space-class-SpaceGraphEditor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03582.py -- tests/files/web/generated/M21-GAP-03582-space-class-SpaceGraphEditor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03582", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03582", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03583", + "gapId": "space-class:SpaceImageEditor", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03583-space-class-SpaceImageEditor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03583.py -- tests/files/web/generated/M21-GAP-03583-space-class-SpaceImageEditor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03583", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03583", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03584", + "gapId": "space-class:SpaceInfo", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03584-space-class-SpaceInfo.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03584.py -- tests/files/web/generated/M21-GAP-03584-space-class-SpaceInfo.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03584", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03584", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03585", + "gapId": "space-class:SpaceNLA", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03585-space-class-SpaceNLA.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03585.py -- tests/files/web/generated/M21-GAP-03585-space-class-SpaceNLA.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03585", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03585", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03586", + "gapId": "space-class:SpaceNodeEditor", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03586-space-class-SpaceNodeEditor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03586.py -- tests/files/web/generated/M21-GAP-03586-space-class-SpaceNodeEditor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03586", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03586", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03587", + "gapId": "space-class:SpaceOutliner", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03587-space-class-SpaceOutliner.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03587.py -- tests/files/web/generated/M21-GAP-03587-space-class-SpaceOutliner.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03587", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03587", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03588", + "gapId": "space-class:SpacePreferences", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03588-space-class-SpacePreferences.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03588.py -- tests/files/web/generated/M21-GAP-03588-space-class-SpacePreferences.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03588", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03588", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03589", + "gapId": "space-class:SpaceProperties", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03589-space-class-SpaceProperties.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03589.py -- tests/files/web/generated/M21-GAP-03589-space-class-SpaceProperties.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03589", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03589", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03590", + "gapId": "space-class:SpaceSequenceEditor", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03590-space-class-SpaceSequenceEditor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03590.py -- tests/files/web/generated/M21-GAP-03590-space-class-SpaceSequenceEditor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03590", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03590", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03591", + "gapId": "space-class:SpaceSpreadsheet", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03591-space-class-SpaceSpreadsheet.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03591.py -- tests/files/web/generated/M21-GAP-03591-space-class-SpaceSpreadsheet.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03591", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03591", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03592", + "gapId": "space-class:SpaceTextEditor", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03592-space-class-SpaceTextEditor.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03592.py -- tests/files/web/generated/M21-GAP-03592-space-class-SpaceTextEditor.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03592", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03592", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03593", + "gapId": "space-class:SpaceView3D", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03593-space-class-SpaceView3D.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03593.py -- tests/files/web/generated/M21-GAP-03593-space-class-SpaceView3D.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03593", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03593", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03594", + "gapId": "space:CLIP_EDITOR", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03594-space-CLIP_EDITOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03594.py -- tests/files/web/generated/M21-GAP-03594-space-CLIP_EDITOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03594", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03594", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03595", + "gapId": "space:CONSOLE", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03595-space-CONSOLE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03595.py -- tests/files/web/generated/M21-GAP-03595-space-CONSOLE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03595", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03595", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03596", + "gapId": "space:DOPESHEET_EDITOR", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03596-space-DOPESHEET_EDITOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03596.py -- tests/files/web/generated/M21-GAP-03596-space-DOPESHEET_EDITOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03596", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03596", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03597", + "gapId": "space:EMPTY", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03597-space-EMPTY.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03597.py -- tests/files/web/generated/M21-GAP-03597-space-EMPTY.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03597", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03597", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03598", + "gapId": "space:FILE_BROWSER", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03598-space-FILE_BROWSER.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03598.py -- tests/files/web/generated/M21-GAP-03598-space-FILE_BROWSER.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03598", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03598", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03599", + "gapId": "space:GRAPH_EDITOR", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03599-space-GRAPH_EDITOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03599.py -- tests/files/web/generated/M21-GAP-03599-space-GRAPH_EDITOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03599", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03599", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03600", + "gapId": "space:IMAGE_EDITOR", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03600-space-IMAGE_EDITOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03600.py -- tests/files/web/generated/M21-GAP-03600-space-IMAGE_EDITOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03600", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03600", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03601", + "gapId": "space:INFO", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03601-space-INFO.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03601.py -- tests/files/web/generated/M21-GAP-03601-space-INFO.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03601", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03601", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03602", + "gapId": "space:NLA_EDITOR", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03602-space-NLA_EDITOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03602.py -- tests/files/web/generated/M21-GAP-03602-space-NLA_EDITOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03602", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03602", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03603", + "gapId": "space:NODE_EDITOR", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03603-space-NODE_EDITOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03603.py -- tests/files/web/generated/M21-GAP-03603-space-NODE_EDITOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03603", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03603", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03604", + "gapId": "space:OUTLINER", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03604-space-OUTLINER.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03604.py -- tests/files/web/generated/M21-GAP-03604-space-OUTLINER.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03604", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03604", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03605", + "gapId": "space:PREFERENCES", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03605-space-PREFERENCES.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03605.py -- tests/files/web/generated/M21-GAP-03605-space-PREFERENCES.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03605", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03605", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03606", + "gapId": "space:PROPERTIES", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03606-space-PROPERTIES.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03606.py -- tests/files/web/generated/M21-GAP-03606-space-PROPERTIES.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03606", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03606", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03607", + "gapId": "space:SEQUENCE_EDITOR", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03607-space-SEQUENCE_EDITOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03607.py -- tests/files/web/generated/M21-GAP-03607-space-SEQUENCE_EDITOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03607", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03607", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03608", + "gapId": "space:SPREADSHEET", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03608-space-SPREADSHEET.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03608.py -- tests/files/web/generated/M21-GAP-03608-space-SPREADSHEET.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03608", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03608", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03609", + "gapId": "space:STATUSBAR", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03609-space-STATUSBAR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03609.py -- tests/files/web/generated/M21-GAP-03609-space-STATUSBAR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03609", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03609", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03610", + "gapId": "space:TEXT_EDITOR", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03610-space-TEXT_EDITOR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03610.py -- tests/files/web/generated/M21-GAP-03610-space-TEXT_EDITOR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03610", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03610", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03611", + "gapId": "space:TOPBAR", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03611-space-TOPBAR.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03611.py -- tests/files/web/generated/M21-GAP-03611-space-TOPBAR.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03611", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03611", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03612", + "gapId": "space:VIEW_3D", + "ownerFamily": "SPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03612-space-VIEW_3D.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03612.py -- tests/files/web/generated/M21-GAP-03612-space-VIEW_3D.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03612", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03612", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03613", + "gapId": "workspace:EDIT", + "ownerFamily": "WORKSPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03613-workspace-EDIT.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03613.py -- tests/files/web/generated/M21-GAP-03613-workspace-EDIT.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03613", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03613", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03614", + "gapId": "workspace:EDIT_GPENCIL", + "ownerFamily": "WORKSPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03614-workspace-EDIT_GPENCIL.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03614.py -- tests/files/web/generated/M21-GAP-03614-workspace-EDIT_GPENCIL.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03614", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03614", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03615", + "gapId": "workspace:OBJECT", + "ownerFamily": "WORKSPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03615-workspace-OBJECT.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03615.py -- tests/files/web/generated/M21-GAP-03615-workspace-OBJECT.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03615", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03615", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03616", + "gapId": "workspace:PAINT_GREASE_PENCIL", + "ownerFamily": "WORKSPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03616-workspace-PAINT_GREASE_PENCIL.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03616.py -- tests/files/web/generated/M21-GAP-03616-workspace-PAINT_GREASE_PENCIL.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03616", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03616", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03617", + "gapId": "workspace:PARTICLE_EDIT", + "ownerFamily": "WORKSPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03617-workspace-PARTICLE_EDIT.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03617.py -- tests/files/web/generated/M21-GAP-03617-workspace-PARTICLE_EDIT.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03617", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03617", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03618", + "gapId": "workspace:POSE", + "ownerFamily": "WORKSPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03618-workspace-POSE.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03618.py -- tests/files/web/generated/M21-GAP-03618-workspace-POSE.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03618", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03618", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03619", + "gapId": "workspace:SCULPT", + "ownerFamily": "WORKSPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03619-workspace-SCULPT.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03619.py -- tests/files/web/generated/M21-GAP-03619-workspace-SCULPT.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03619", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03619", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03620", + "gapId": "workspace:SCULPT_GREASE_PENCIL", + "ownerFamily": "WORKSPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03620-workspace-SCULPT_GREASE_PENCIL.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03620.py -- tests/files/web/generated/M21-GAP-03620-workspace-SCULPT_GREASE_PENCIL.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03620", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03620", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03621", + "gapId": "workspace:TEXTURE_PAINT", + "ownerFamily": "WORKSPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03621-workspace-TEXTURE_PAINT.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03621.py -- tests/files/web/generated/M21-GAP-03621-workspace-TEXTURE_PAINT.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03621", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03621", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03622", + "gapId": "workspace:VERTEX_GREASE_PENCIL", + "ownerFamily": "WORKSPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03622-workspace-VERTEX_GREASE_PENCIL.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03622.py -- tests/files/web/generated/M21-GAP-03622-workspace-VERTEX_GREASE_PENCIL.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03622", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03622", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03623", + "gapId": "workspace:VERTEX_PAINT", + "ownerFamily": "WORKSPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03623-workspace-VERTEX_PAINT.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03623.py -- tests/files/web/generated/M21-GAP-03623-workspace-VERTEX_PAINT.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03623", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03623", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03624", + "gapId": "workspace:WEIGHT_GREASE_PENCIL", + "ownerFamily": "WORKSPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03624-workspace-WEIGHT_GREASE_PENCIL.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03624.py -- tests/files/web/generated/M21-GAP-03624-workspace-WEIGHT_GREASE_PENCIL.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03624", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03624", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M21-GAP-03625", + "gapId": "workspace:WEIGHT_PAINT", + "ownerFamily": "WORKSPACE", + "sourceTask": "M15-01E", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M21-GAP-03625-workspace-WEIGHT_PAINT.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M21-GAP-03625.py -- tests/files/web/generated/M21-GAP-03625-workspace-WEIGHT_PAINT.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M21-GAP-03625", + "comparator": "node tools/web/check-generated-gap.mjs --task M21-GAP-03625", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00001", + "gapId": "rna:Depsgraph:Depsgraph", + "ownerFamily": "Depsgraph", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00001-rna-Depsgraph-Depsgraph.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00001.py -- tests/files/web/generated/M22-GAP-00001-rna-Depsgraph-Depsgraph.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00001", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00001", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00002", + "gapId": "rna:Depsgraph:DepsgraphObjectInstance", + "ownerFamily": "Depsgraph", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00002-rna-Depsgraph-DepsgraphObjectInstance.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00002.py -- tests/files/web/generated/M22-GAP-00002-rna-Depsgraph-DepsgraphObjectInstance.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00002", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00002", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00003", + "gapId": "rna:Depsgraph:DepsgraphUpdate", + "ownerFamily": "Depsgraph", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00003-rna-Depsgraph-DepsgraphUpdate.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00003.py -- tests/files/web/generated/M22-GAP-00003-rna-Depsgraph-DepsgraphUpdate.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00003", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00003", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00004", + "gapId": "rna:Scene:Camera", + "ownerFamily": "Scene", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00004-rna-Scene-Camera.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00004.py -- tests/files/web/generated/M22-GAP-00004-rna-Scene-Camera.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00004", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00004", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00005", + "gapId": "rna:Scene:Collection", + "ownerFamily": "Scene", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00005-rna-Scene-Collection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00005.py -- tests/files/web/generated/M22-GAP-00005-rna-Scene-Collection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00005", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00005", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00006", + "gapId": "rna:Scene:Constraint", + "ownerFamily": "Scene", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00006-rna-Scene-Constraint.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00006.py -- tests/files/web/generated/M22-GAP-00006-rna-Scene-Constraint.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00006", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00006", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00007", + "gapId": "rna:Scene:LayerCollection", + "ownerFamily": "Scene", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00007-rna-Scene-LayerCollection.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00007.py -- tests/files/web/generated/M22-GAP-00007-rna-Scene-LayerCollection.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00007", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00007", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00008", + "gapId": "rna:Scene:Light", + "ownerFamily": "Scene", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00008-rna-Scene-Light.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00008.py -- tests/files/web/generated/M22-GAP-00008-rna-Scene-Light.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00008", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00008", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00009", + "gapId": "rna:Scene:Material", + "ownerFamily": "Scene", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00009-rna-Scene-Material.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00009.py -- tests/files/web/generated/M22-GAP-00009-rna-Scene-Material.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00009", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00009", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00010", + "gapId": "rna:Scene:Modifier", + "ownerFamily": "Scene", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00010-rna-Scene-Modifier.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00010.py -- tests/files/web/generated/M22-GAP-00010-rna-Scene-Modifier.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00010", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00010", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00011", + "gapId": "rna:Scene:NodeTree", + "ownerFamily": "Scene", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00011-rna-Scene-NodeTree.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00011.py -- tests/files/web/generated/M22-GAP-00011-rna-Scene-NodeTree.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00011", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00011", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00012", + "gapId": "rna:Scene:Object", + "ownerFamily": "Scene", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00012-rna-Scene-Object.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00012.py -- tests/files/web/generated/M22-GAP-00012-rna-Scene-Object.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00012", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00012", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00013", + "gapId": "rna:Scene:RenderSettings", + "ownerFamily": "Scene", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00013-rna-Scene-RenderSettings.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00013.py -- tests/files/web/generated/M22-GAP-00013-rna-Scene-RenderSettings.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00013", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00013", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00014", + "gapId": "rna:Scene:Scene", + "ownerFamily": "Scene", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00014-rna-Scene-Scene.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00014.py -- tests/files/web/generated/M22-GAP-00014-rna-Scene-Scene.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00014", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00014", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00015", + "gapId": "rna:Scene:Screen", + "ownerFamily": "Scene", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00015-rna-Scene-Screen.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00015.py -- tests/files/web/generated/M22-GAP-00015-rna-Scene-Screen.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00015", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00015", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00016", + "gapId": "rna:Scene:ViewLayer", + "ownerFamily": "Scene", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00016-rna-Scene-ViewLayer.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00016.py -- tests/files/web/generated/M22-GAP-00016-rna-Scene-ViewLayer.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00016", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00016", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00017", + "gapId": "rna:Scene:Window", + "ownerFamily": "Scene", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00017-rna-Scene-Window.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00017.py -- tests/files/web/generated/M22-GAP-00017-rna-Scene-Window.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00017", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00017", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00018", + "gapId": "rna:Scene:WindowManager", + "ownerFamily": "Scene", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00018-rna-Scene-WindowManager.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00018.py -- tests/files/web/generated/M22-GAP-00018-rna-Scene-WindowManager.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00018", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00018", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + }, + { + "id": "M22-GAP-00019", + "gapId": "rna:Scene:World", + "ownerFamily": "Scene", + "sourceTask": "M15-01F", + "state": "pending", + "dependencies": [], + "targetImplementationClass": "LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M22-GAP-00019-rna-Scene-World.blend", + "state": "REQUIRED" + }, + "desktopCommand": "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M22-GAP-00019.py -- tests/files/web/generated/M22-GAP-00019-rna-Scene-World.blend", + "webCommand": "npm --prefix web run test:generated-gap -- --task M22-GAP-00019", + "comparator": "node tools/web/check-generated-gap.mjs --task M22-GAP-00019", + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ] + } + ], + "firstTask": "M16-GAP-00274", + "closureGate": "M15-03E", + "nextTask": "M15-03B" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M15-03E/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M15-03E/manifest.json new file mode 100644 index 00000000..30bd50cf --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M15-03E/manifest.json @@ -0,0 +1,32 @@ +{ + "schemaVersion": 1, + "task": "M15-03E", + "parentTask": "M15-03D", + "status": "BLOCKED", + "enablingTask": false, + "parityStateChange": false, + "operation": "BLENDER_ZERO_GAP_GATE", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M15-03D/manifest.json", + "sha256": "2838a248140ebc944ee85190de5b2ae73bdc28e8d0be5972fb04e5cf2bf345c3" + }, + "checker": { + "path": "tools/web/check-blender-zero-gap-gate.mjs", + "sha256": "169c37861ee4422fd2eacf4886a99e71d5ed4e5220132866dccaf961b4a6ac2b" + }, + "plan": { + "path": "tests/golden/M15-03A/next-task-plan.json", + "sha256": "a5c46410b419ede40a5adb6a84029e7f303e28e823f33d9d63d5e1815c1b0032" + }, + "report": { + "path": "tests/golden/M15-03E/zero-gap-gate-report.json", + "sha256": "41a5611e2719ed377db55bdfe6623c2a73dc91560e0f38266164d10645b57a69" + }, + "package": { + "path": "web/package.json", + "sha256": "540fcf5a711fe65654f5f9dcfccf4dfb4549dcdbef498a4eb37946cc24a76912" + } + }, + "nextTask": "M16-GAP-00018" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00001/action-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00001/action-desktop-report.json new file mode 100644 index 00000000..f48bf829 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00001/action-desktop-report.json @@ -0,0 +1,35 @@ +{ + "actions": [ + { + "channels": [ + [ + "location", + 0, + 2 + ], + [ + "location", + 1, + 2 + ], + [ + "location", + 2, + 2 + ] + ], + "frameRange": [ + 1.0, + 10.0 + ], + "name": "AnimatedObjectAction" + } + ], + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00001-datablock-Action.blend", + "fixtureSha256": "cb921e862eff1dcf68f22d77ef8558679207203ace0b80239a5bc5874ec2a551", + "operation": "ACTION_DATABLOCK_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00001" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00001/action-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00001/action-local-exact-report.json new file mode 100644 index 00000000..523bcb95 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00001/action-local-exact-report.json @@ -0,0 +1,30 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00001", + "operation": "ACTION_DATABLOCK_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00001-datablock-Action.blend", + "sha256": "cb921e862eff1dcf68f22d77ef8558679207203ace0b80239a5bc5874ec2a551" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00001/action-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:AnimatedObjectAction:object:AnimatedObject", + "channelPaths": [ + "location[0]", + "location[1]", + "location[2]" + ], + "keyframesPerChannel": [ + 2, + 2, + 2 + ] + }, + "saveReopen": "EXACT", + "nextTask": "M16-GAP-00002" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00001/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00001/manifest.json new file mode 100644 index 00000000..626e3006 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00001/manifest.json @@ -0,0 +1,45 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00001", + "parentTask": "M15-03E", + "enablingTask": true, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M15-03E/manifest.json", + "sha256": "9e50746ba11f29a3a26c1eb04c25e7153f2edebbf32e092c5bdc89516f274f64" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00001-datablock-Action.blend", + "sha256": "cb921e862eff1dcf68f22d77ef8558679207203ace0b80239a5bc5874ec2a551" + }, + "desktopChecker": { + "path": "tools/web/check-action-desktop.py", + "sha256": "7c32d786a8daedcf5e995d0ff29b6034e7c4f4c25c309ccd0542adecc19319f2" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "a987e77c1e35f70d820fe12430d74d90e72bfb594b65dbbf39f005748c6683f8" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00001/action-desktop-report.json", + "sha256": "f6bea0003a9e8eb25048797156bc0ab59b6a63d76ce4156283b6d9761dbfb0ee" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00001/action-local-exact-report.json", + "sha256": "eb7a604af8b071c3186a39a30f3a9974a6fed03008751da5319d54d170b841d6" + }, + "plan": { + "path": "tests/golden/M15-03A/next-task-plan.json", + "sha256": "732d34b5a696077ae6f7f11df768e1e1671379e2face64496f46fcbf352878ed" + }, + "package": { + "path": "web/package.json", + "sha256": "159af906f4e468e3f18cfcd2f599a7e22c9c180cdc8032ba4eac5eaf5ad8cc0e" + } + }, + "nextTask": "M16-GAP-00002" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00002/armature-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00002/armature-desktop-report.json new file mode 100644 index 00000000..54015803 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00002/armature-desktop-report.json @@ -0,0 +1,42 @@ +{ + "armature": { + "bones": [ + { + "head": [ + 0.0, + 0.0, + -1.0 + ], + "name": "Root", + "parent": null, + "tail": [ + 0.0, + 0.0, + 0.0 + ] + }, + { + "head": [ + 0.0, + 0.0, + 0.0 + ], + "name": "Tip", + "parent": "Root", + "tail": [ + 0.0, + 0.0, + 1.0 + ] + } + ], + "name": "RiggedArmature" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00002-datablock-Armature.blend", + "fixtureSha256": "b7d1c05b70e97be9a70890d45fea60b143073462d2a4f62eb3cc607bd2d665ca", + "operation": "ARMATURE_DATABLOCK_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00002" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00002/armature-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00002/armature-local-exact-report.json new file mode 100644 index 00000000..6937726a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00002/armature-local-exact-report.json @@ -0,0 +1,29 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00002", + "operation": "ARMATURE_DATABLOCK_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00002-datablock-Armature.blend", + "sha256": "b7d1c05b70e97be9a70890d45fea60b143073462d2a4f62eb3cc607bd2d665ca" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00002/armature-desktop-report.json" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:RiggedArmature", + "bones": [ + { + "name": "Root", + "parentId": null + }, + { + "name": "Tip", + "parentId": "bone:armature:RiggedArmature:Root" + } + ] + }, + "saveReopen": "EXACT", + "nextTask": "M16-GAP-00003" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00002/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00002/manifest.json new file mode 100644 index 00000000..add85ff2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00002/manifest.json @@ -0,0 +1,45 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00002", + "parentTask": "M16-GAP-00001", + "enablingTask": true, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00001/manifest.json", + "sha256": "ef0a497b61ee95fae55be76ab9dbbc047aeb7619bb161c0711319f4288f5d170" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00002-datablock-Armature.blend", + "sha256": "b7d1c05b70e97be9a70890d45fea60b143073462d2a4f62eb3cc607bd2d665ca" + }, + "desktopChecker": { + "path": "tools/web/check-armature-desktop.py", + "sha256": "5a03e4c6d195219b6fe567973565b0d29f8957716d03c419b04d2003ed67429e" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "a987e77c1e35f70d820fe12430d74d90e72bfb594b65dbbf39f005748c6683f8" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00002/armature-desktop-report.json", + "sha256": "970538d481dd9b2169c5e39e6901e6eeff0d9b2d26b42491837321841bcb4a5e" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00002/armature-local-exact-report.json", + "sha256": "eeb775648b186a9728851b8cffa0fa9c41701de4a8142e73f6ad98ef050dc877" + }, + "plan": { + "path": "tests/golden/M15-03A/next-task-plan.json", + "sha256": "732d34b5a696077ae6f7f11df768e1e1671379e2face64496f46fcbf352878ed" + }, + "package": { + "path": "web/package.json", + "sha256": "159af906f4e468e3f18cfcd2f599a7e22c9c180cdc8032ba4eac5eaf5ad8cc0e" + } + }, + "nextTask": "M16-GAP-00003" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00003/brush-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00003/brush-desktop-report.json new file mode 100644 index 00000000..d7d7d376 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00003/brush-desktop-report.json @@ -0,0 +1,18 @@ +{ + "blenderVersion": "5.2.0 LTS", + "brush": { + "alpha": 0.65, + "hardness": 0.8, + "jitter": 0.2, + "name": "WebGapBrush", + "sculptTool": "DRAW", + "size": 42, + "spacing": 17 + }, + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00003-datablock-Brush.blend", + "fixtureSha256": "f1f6922c4c9c31542a9cefad6932d616ef5dcde0067c0a9668f67902023f4f80", + "operation": "BRUSH_DATABLOCK_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00003" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00003/brush-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00003/brush-local-exact-report.json new file mode 100644 index 00000000..edb41a04 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00003/brush-local-exact-report.json @@ -0,0 +1,27 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00003", + "operation": "BRUSH_DATABLOCK_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00003-datablock-Brush.blend", + "sha256": "f1f6922c4c9c31542a9cefad6932d616ef5dcde0067c0a9668f67902023f4f80" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00003/brush-desktop-report.json" + }, + "wasm": { + "status": "EXACT", + "brushId": "brush:WebGapBrush", + "values": { + "size": 42, + "alpha": 0.6499999761581421, + "hardness": 0.800000011920929, + "spacing": 17, + "jitter": 0.20000000298023224, + "sculptTool": 1 + } + }, + "saveReopen": "EXACT", + "nextTask": "M16-GAP-00004" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00003/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00003/manifest.json new file mode 100644 index 00000000..65a30536 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00003/manifest.json @@ -0,0 +1,61 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00003", + "parentTask": "M16-GAP-00002", + "enablingTask": true, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "BRUSH_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00002/manifest.json", + "sha256": "b8705243e00f62deb82644976838e197d84e72edb8113439efacfd95d4da4188" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00003-datablock-Brush.blend", + "sha256": "f1f6922c4c9c31542a9cefad6932d616ef5dcde0067c0a9668f67902023f4f80" + }, + "fixtureGenerator": { + "path": "tools/web/generate-brush-fixture.py", + "sha256": "c4fd4a6c28c595b742b1ef083285ac87f9af56b65d75ba03750925079a0aa637" + }, + "desktopChecker": { + "path": "tools/web/check-brush-desktop.py", + "sha256": "515b1eab3b6e2dc0a4e9a65d20764816916228f41082739c98efd6cc882926bf" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "a987e77c1e35f70d820fe12430d74d90e72bfb594b65dbbf39f005748c6683f8" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00003/brush-desktop-report.json", + "sha256": "ca992c23e2c302ef0b85b91305eabdbf71da6b5bc60c49b71710d145d0787e09" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00003/brush-local-exact-report.json", + "sha256": "e48dcad3974b94404d5d9f0c7222b6c45ea5f3b7a467ea2b88691a6ff50e22a6" + }, + "nativeReader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c2d9536cba500763ffc425d7f09132dfdb2d9c3c8e5e9dfd7246ee972cca3f9" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "8ba177250f629d6c2f83f78c376101e536e01388cda7b1672ceec9a15034b3b9" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "6667cefcccdba3379ad2fd25a50339a2ad94d498d6c9360f1fc2fbd8319597c4" + }, + "plan": { + "path": "tests/golden/M15-03A/next-task-plan.json", + "sha256": "732d34b5a696077ae6f7f11df768e1e1671379e2face64496f46fcbf352878ed" + }, + "package": { + "path": "web/package.json", + "sha256": "159af906f4e468e3f18cfcd2f599a7e22c9c180cdc8032ba4eac5eaf5ad8cc0e" + } + }, + "nextTask": "M16-GAP-00004" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00004/camera-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00004/camera-desktop-report.json new file mode 100644 index 00000000..5b4239be --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00004/camera-desktop-report.json @@ -0,0 +1,17 @@ +{ + "blenderVersion": "5.2.0 LTS", + "camera": { + "clipEnd": 2500.0, + "clipStart": 0.1, + "lens": 52.0, + "name": "WebGapCamera", + "sensorWidth": 36.0, + "type": "PERSP" + }, + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00004-datablock-Camera.blend", + "fixtureSha256": "c637587ce3011cbe9b038ab87803a9a2f945d4512b55d616a5dda268628988a0", + "operation": "CAMERA_DATABLOCK_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00004" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00004/camera-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00004/camera-local-exact-report.json new file mode 100644 index 00000000..092987fa --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00004/camera-local-exact-report.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00004", + "operation": "CAMERA_DATABLOCK_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00004-datablock-Camera.blend", + "sha256": "c637587ce3011cbe9b038ab87803a9a2f945d4512b55d616a5dda268628988a0" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00004/camera-desktop-report.json" + }, + "wasm": { + "status": "EXACT", + "cameraId": "camera:WebGapCamera", + "values": { + "projection": "PERSPECTIVE", + "lensMm": 52, + "near": 0.10000000149011612, + "far": 2500 + } + }, + "saveReopen": "EXACT", + "nextTask": "M16-GAP-00005" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00004/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00004/manifest.json new file mode 100644 index 00000000..cdb9e76f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00004/manifest.json @@ -0,0 +1,49 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00004", + "parentTask": "M16-GAP-00003", + "enablingTask": true, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "CAMERA_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00003/manifest.json", + "sha256": "789282e4c913c77d8805490a132b26026f8d4a650539c1378f2dba546d4fcba1" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00004-datablock-Camera.blend", + "sha256": "c637587ce3011cbe9b038ab87803a9a2f945d4512b55d616a5dda268628988a0" + }, + "fixtureGenerator": { + "path": "tools/web/generate-camera-fixture.py", + "sha256": "23c1bf411ed483f4bf111fb52f63e9ec77610f30819c68ac248075a851a59c97" + }, + "desktopChecker": { + "path": "tools/web/check-camera-desktop.py", + "sha256": "27831385e1ed7e464c6b627bcbcb81af01ad2afa7ec66f28d2256641005802b4" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "a987e77c1e35f70d820fe12430d74d90e72bfb594b65dbbf39f005748c6683f8" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00004/camera-desktop-report.json", + "sha256": "b11254b3e0cdeb5e5c39e350ea1d349f5e2991f8c62a5ad28f744c391beab3b5" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00004/camera-local-exact-report.json", + "sha256": "a2b2c321efbcf2ed765f2e8b1019fef7e2cd34af872f78474d18594c6cee5d1c" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "6667cefcccdba3379ad2fd25a50339a2ad94d498d6c9360f1fc2fbd8319597c4" + }, + "plan": { + "path": "tests/golden/M15-03A/next-task-plan.json", + "sha256": "732d34b5a696077ae6f7f11df768e1e1671379e2face64496f46fcbf352878ed" + } + }, + "nextTask": "M16-GAP-00005" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00005/collection-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00005/collection-desktop-report.json new file mode 100644 index 00000000..f08d743a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00005/collection-desktop-report.json @@ -0,0 +1,25 @@ +{ + "blenderVersion": "5.2.0 LTS", + "collections": [ + { + "children": [], + "name": "WebGapChild", + "objects": [ + "WebGapCollectionObject" + ] + }, + { + "children": [ + "WebGapChild" + ], + "name": "WebGapCollection", + "objects": [] + } + ], + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00005-datablock-Collection.blend", + "fixtureSha256": "c33d2b1b85b0272aa3bf06a012000db5f383a9a73b79bd4b90042110b70a912b", + "operation": "COLLECTION_DATABLOCK_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00005" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00005/collection-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00005/collection-local-exact-report.json new file mode 100644 index 00000000..1d4e0283 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00005/collection-local-exact-report.json @@ -0,0 +1,34 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00005", + "operation": "COLLECTION_DATABLOCK_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00005-datablock-Collection.blend", + "sha256": "c33d2b1b85b0272aa3bf06a012000db5f383a9a73b79bd4b90042110b70a912b" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00005/collection-desktop-report.json" + }, + "wasm": { + "status": "EXACT", + "collections": [ + { + "id": "collection:WebGapChild", + "childCollectionIds": [], + "objectIds": [ + "object:WebGapCollectionObject" + ] + }, + { + "id": "collection:WebGapCollection", + "childCollectionIds": [ + "collection:WebGapChild" + ], + "objectIds": [] + } + ] + }, + "saveReopen": "EXACT", + "nextTask": "M16-GAP-00006" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00005/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00005/manifest.json new file mode 100644 index 00000000..1f236598 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00005/manifest.json @@ -0,0 +1,45 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00005", + "parentTask": "M16-GAP-00004", + "enablingTask": true, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "COLLECTION_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00004/manifest.json", + "sha256": "905c8f507a7c2e3c43a6d3c99a873124e1dc0aa1647e09a0b66f7e6a77462add" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00005-datablock-Collection.blend", + "sha256": "c33d2b1b85b0272aa3bf06a012000db5f383a9a73b79bd4b90042110b70a912b" + }, + "fixtureGenerator": { + "path": "tools/web/generate-collection-fixture.py", + "sha256": "3f2a02903a1c1d74a3ba707342b6617b39a3857ccf58e30162ab993c7e112544" + }, + "desktopChecker": { + "path": "tools/web/check-collection-desktop.py", + "sha256": "fca7970f55b654527226b1b39a88934db35da787772c69ba65075f11e2664f26" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "a987e77c1e35f70d820fe12430d74d90e72bfb594b65dbbf39f005748c6683f8" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00005/collection-desktop-report.json", + "sha256": "6e6bcf8e5575d46c324d51409d19be6f89e5397b1f094f528b164ea72c607887" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00005/collection-local-exact-report.json", + "sha256": "2db40433007886b24f5ceb18dccf7470e0c393163838a11f2feb48bab516d740" + }, + "plan": { + "path": "tests/golden/M15-03A/next-task-plan.json", + "sha256": "732d34b5a696077ae6f7f11df768e1e1671379e2face64496f46fcbf352878ed" + } + }, + "nextTask": "M16-GAP-00006" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00006/curve-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00006/curve-desktop-report.json new file mode 100644 index 00000000..206ad478 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00006/curve-desktop-report.json @@ -0,0 +1,38 @@ +{ + "blenderVersion": "5.2.0 LTS", + "curve": { + "dimensions": "3D", + "name": "WebGapCurve", + "points": [ + [ + -1.0, + 0.0, + 0.0 + ], + [ + 0.0, + 1.0, + 0.5 + ], + [ + 1.0, + 0.0, + 1.0 + ] + ], + "resolution": 8, + "splines": [ + { + "count": 3, + "cyclic": false, + "type": "BEZIER" + } + ] + }, + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00006-datablock-Curve.blend", + "fixtureSha256": "49af45a70c7e050277a9b4b643c41aa9f29978b1df5214b5e48dc629b0027a21", + "operation": "CURVE_DATABLOCK_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00006" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00006/curve-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00006/curve-local-exact-report.json new file mode 100644 index 00000000..30a71bb2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00006/curve-local-exact-report.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00006", + "operation": "CURVE_DATABLOCK_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00006-datablock-Curve.blend", + "sha256": "49af45a70c7e050277a9b4b643c41aa9f29978b1df5214b5e48dc629b0027a21" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00006/curve-desktop-report.json" + }, + "wasm": { + "status": "EXACT", + "curveId": "curve:WebGapCurve", + "splineCount": 1, + "pointCount": 3, + "splineTypes": [ + "BEZIER" + ] + }, + "saveReopen": "EXACT", + "nextTask": "M16-GAP-00007" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00006/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00006/manifest.json new file mode 100644 index 00000000..237b0b3c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00006/manifest.json @@ -0,0 +1,49 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00006", + "parentTask": "M16-GAP-00005", + "enablingTask": true, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "CURVE_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00005/manifest.json", + "sha256": "581d3757a300c6dea5f8a989932f2787915c30ef84de8494a20fd65d2058551a" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00006-datablock-Curve.blend", + "sha256": "49af45a70c7e050277a9b4b643c41aa9f29978b1df5214b5e48dc629b0027a21" + }, + "fixtureGenerator": { + "path": "tools/web/generate-curve-fixture.py", + "sha256": "bb93a2ca07e8e8ae81341c46edc7cbceb72ada2023b8fe956ee3b6ad03c7ae11" + }, + "desktopChecker": { + "path": "tools/web/check-curve-desktop.py", + "sha256": "e66ba2ae04f6de97e9643e581fa4426650ce4ddcfea0ffc8b3bf9fb14fdd26ee" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "a987e77c1e35f70d820fe12430d74d90e72bfb594b65dbbf39f005748c6683f8" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00006/curve-desktop-report.json", + "sha256": "85e8eee37daea993653bfa1785f5df19f953c2d013543e8a27743ed74d49d4ff" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00006/curve-local-exact-report.json", + "sha256": "048c9fb9116ab2a1b4460c74696340a263cd342ba4886ce56f8b03bef8743e58" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "6667cefcccdba3379ad2fd25a50339a2ad94d498d6c9360f1fc2fbd8319597c4" + }, + "plan": { + "path": "tests/golden/M15-03A/next-task-plan.json", + "sha256": "732d34b5a696077ae6f7f11df768e1e1671379e2face64496f46fcbf352878ed" + } + }, + "nextTask": "M16-GAP-00007" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00007/curves-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00007/curves-desktop-report.json new file mode 100644 index 00000000..773444f8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00007/curves-desktop-report.json @@ -0,0 +1,14 @@ +{ + "blenderVersion": "5.2.0 LTS", + "curves": { + "curveCount": 1, + "name": "WebGapCurves", + "pointCount": 4 + }, + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00007-datablock-Curves.blend", + "fixtureSha256": "d6489313473ced7f55cc1d43f3fa73181672c0a5db4b6854002f18354ca1d9a6", + "operation": "CURVES_DATABLOCK_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00007" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00007/curves-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00007/curves-local-exact-report.json new file mode 100644 index 00000000..cc78e026 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00007/curves-local-exact-report.json @@ -0,0 +1,21 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00007", + "operation": "CURVES_DATABLOCK_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00007-datablock-Curves.blend", + "sha256": "d6489313473ced7f55cc1d43f3fa73181672c0a5db4b6854002f18354ca1d9a6" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00007/curves-desktop-report.json" + }, + "wasm": { + "status": "EXACT", + "curvesId": "curves:WebGapCurves", + "pointCount": 4, + "splineCount": 1 + }, + "saveReopen": "EXACT", + "nextTask": "M16-GAP-00008" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00007/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00007/manifest.json new file mode 100644 index 00000000..f148cece --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00007/manifest.json @@ -0,0 +1,49 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00007", + "parentTask": "M16-GAP-00006", + "enablingTask": true, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "CURVES_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00006/manifest.json", + "sha256": "d17d368089b84c23ce4cc4016f61cc3bf0ea86ade968045a7a8dc6a3063394f0" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00007-datablock-Curves.blend", + "sha256": "d6489313473ced7f55cc1d43f3fa73181672c0a5db4b6854002f18354ca1d9a6" + }, + "fixtureGenerator": { + "path": "tools/web/generate-curves-fixture.py", + "sha256": "792ec1d58d495cd9d425215aa631dd5e1d66f7bd5cf75e783b961760667faacc" + }, + "desktopChecker": { + "path": "tools/web/check-curves-desktop.py", + "sha256": "3a8372a8ba072df2f5a3a1b3cccef44d219dde2193b551110017436cbd38e85c" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "a987e77c1e35f70d820fe12430d74d90e72bfb594b65dbbf39f005748c6683f8" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00007/curves-desktop-report.json", + "sha256": "db15e64bfe202720b463ab742cbed2e6ec80b872456b825078afbba7a2540531" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00007/curves-local-exact-report.json", + "sha256": "bf093708e23b8318e1f50b925b5c033d66aa8c1f97303174ad2489a82191705f" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "6667cefcccdba3379ad2fd25a50339a2ad94d498d6c9360f1fc2fbd8319597c4" + }, + "plan": { + "path": "tests/golden/M15-03A/next-task-plan.json", + "sha256": "732d34b5a696077ae6f7f11df768e1e1671379e2face64496f46fcbf352878ed" + } + }, + "nextTask": "M16-GAP-00008" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00008/freestyle-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00008/freestyle-desktop-report.json new file mode 100644 index 00000000..cb540d06 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00008/freestyle-desktop-report.json @@ -0,0 +1,27 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00008-datablock-FreestyleLineStyle.blend", + "fixtureSha256": "94de965ad54018f7072f2b4f4b752dc6f28f6608836040dc353d18d19fe31fd9", + "lineStyle": { + "alpha": 0.75, + "chaining": true, + "color": [ + 0.2, + 0.4, + 0.8 + ], + "dashed": true, + "modifierCounts": { + "alpha": 0, + "color": 0, + "geometry": 1, + "thickness": 0 + }, + "name": "WebGapLineStyle", + "thickness": 2.5 + }, + "operation": "FREESTYLE_LINE_STYLE_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00008" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00008/freestyle-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00008/freestyle-local-exact-report.json new file mode 100644 index 00000000..1592658d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00008/freestyle-local-exact-report.json @@ -0,0 +1,26 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00008", + "operation": "FREESTYLE_LINE_STYLE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00008-datablock-FreestyleLineStyle.blend", + "sha256": "94de965ad54018f7072f2b4f4b752dc6f28f6608836040dc353d18d19fe31fd9" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00008/freestyle-desktop-report.json" + }, + "wasm": { + "status": "EXACT", + "lineStyleId": "line-style:WebGapLineStyle", + "thickness": 2.5, + "modifierCounts": { + "alpha": 0, + "color": 0, + "geometry": 1, + "thickness": 0 + } + }, + "saveReopen": "EXACT", + "nextTask": "M16-GAP-00009" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00008/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00008/manifest.json new file mode 100644 index 00000000..c987f061 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00008/manifest.json @@ -0,0 +1,57 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00008", + "parentTask": "M16-GAP-00007", + "enablingTask": true, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "FREESTYLE_LINE_STYLE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00007/manifest.json", + "sha256": "0c115415e196995788045b412c37da40af5cac0f2200efc124515d730b63af14" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00008-datablock-FreestyleLineStyle.blend", + "sha256": "94de965ad54018f7072f2b4f4b752dc6f28f6608836040dc353d18d19fe31fd9" + }, + "fixtureGenerator": { + "path": "tools/web/generate-freestyle-fixture.py", + "sha256": "e73088d9097c6ee94baaa07d3e8e279a55a0a34ccec2618e629699f840fd1ed1" + }, + "desktopChecker": { + "path": "tools/web/check-freestyle-desktop.py", + "sha256": "7621b52c88adbae0bb611b2fd6ea2ccf1a0666341c36d4d03eda8f4c565efdc8" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "a987e77c1e35f70d820fe12430d74d90e72bfb594b65dbbf39f005748c6683f8" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00008/freestyle-desktop-report.json", + "sha256": "2c42936cd8e4046b752f7e86949927769d1cb8f2086a2c9ba27eebf61a6f4a89" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00008/freestyle-local-exact-report.json", + "sha256": "ab75a7fdfa71a4abd4a5e97f7e726440bde7891163c0b256be0815e1cc51a99a" + }, + "nativeReader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c2d9536cba500763ffc425d7f09132dfdb2d9c3c8e5e9dfd7246ee972cca3f9" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "8ba177250f629d6c2f83f78c376101e536e01388cda7b1672ceec9a15034b3b9" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "6667cefcccdba3379ad2fd25a50339a2ad94d498d6c9360f1fc2fbd8319597c4" + }, + "plan": { + "path": "tests/golden/M15-03A/next-task-plan.json", + "sha256": "732d34b5a696077ae6f7f11df768e1e1671379e2face64496f46fcbf352878ed" + } + }, + "nextTask": "M16-GAP-00009" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00009/grease-pencil-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00009/grease-pencil-desktop-report.json new file mode 100644 index 00000000..b27a5f3e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00009/grease-pencil-desktop-report.json @@ -0,0 +1,20 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00009-datablock-GreasePencil.blend", + "fixtureSha256": "3a8525077807f9178dac3a5ba84b524e5f8e80874b15c54e2a6658ecb80315a3", + "greasePencil": { + "layers": [ + { + "frames": [ + 1 + ], + "name": "Lines" + } + ], + "name": "GreasePencilData" + }, + "operation": "GREASE_PENCIL_DATABLOCK_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00009" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00009/grease-pencil-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00009/grease-pencil-local-exact-report.json new file mode 100644 index 00000000..d06ac44d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00009/grease-pencil-local-exact-report.json @@ -0,0 +1,21 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00009", + "operation": "GREASE_PENCIL_DATABLOCK_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00009-datablock-GreasePencil.blend", + "sha256": "3a8525077807f9178dac3a5ba84b524e5f8e80874b15c54e2a6658ecb80315a3" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00009/grease-pencil-desktop-report.json" + }, + "wasm": { + "status": "EXACT", + "dataName": "GreasePencilData", + "layerCount": 1, + "frameCount": 1 + }, + "saveReopen": "EXACT", + "nextTask": "M16-GAP-00010" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00009/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00009/manifest.json new file mode 100644 index 00000000..b4344d88 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00009/manifest.json @@ -0,0 +1,41 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00009", + "parentTask": "M16-GAP-00008", + "enablingTask": true, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00008/manifest.json", + "sha256": "3b4c0eb24867cef0054cffb31d1e3320379dbf70e13e8920eaa08da6ace06c89" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00009-datablock-GreasePencil.blend", + "sha256": "3a8525077807f9178dac3a5ba84b524e5f8e80874b15c54e2a6658ecb80315a3" + }, + "desktopChecker": { + "path": "tools/web/check-grease-pencil-desktop.py", + "sha256": "4d99d5e81fcdc8289e462279f2da278e2aea573f4d947fa5e71e959b506d1ee1" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "a987e77c1e35f70d820fe12430d74d90e72bfb594b65dbbf39f005748c6683f8" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00009/grease-pencil-desktop-report.json", + "sha256": "6a1145d7447a08f51d751dca797e67f2be7eb12cba052a726c4c2f8ee28b585e" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00009/grease-pencil-local-exact-report.json", + "sha256": "94aaf84cc072ef13998517d610740d81d94c14593ba776ea7f4b88c673a0a71f" + }, + "plan": { + "path": "tests/golden/M15-03A/next-task-plan.json", + "sha256": "732d34b5a696077ae6f7f11df768e1e1671379e2face64496f46fcbf352878ed" + } + }, + "nextTask": "M16-GAP-00010" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00010/lattice-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00010/lattice-desktop-report.json new file mode 100644 index 00000000..4684d827 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00010/lattice-desktop-report.json @@ -0,0 +1,137 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00010-datablock-Lattice.blend", + "fixtureSha256": "ec40e2661e20c8f7e3b18d9b42f9e585175be8c2f210a1c8c190e76a6e9fbc63", + "lattice": { + "activePoint": -1, + "dimensions": [ + 3, + 2, + 2 + ], + "id": "lattice:WebGapLattice", + "interpolation": [ + "KEY_LINEAR", + "KEY_CARDINAL", + "KEY_BSPLINE" + ], + "name": "WebGapLattice", + "pointCount": 12, + "points": [ + { + "coDeform": [ + -1.0, + -0.5, + -0.5 + ], + "selected": true, + "weight": 0.5 + }, + { + "coDeform": [ + 0.125, + -0.5625, + -0.5 + ], + "selected": false, + "weight": 0.625 + }, + { + "coDeform": [ + 1.25, + -0.5, + -0.5 + ], + "selected": false, + "weight": 0.75 + }, + { + "coDeform": [ + -1.0, + 0.4375, + -0.5 + ], + "selected": false, + "weight": 0.875 + }, + { + "coDeform": [ + 0.125, + 0.5, + -0.5 + ], + "selected": false, + "weight": 1.0 + }, + { + "coDeform": [ + 1.25, + 0.4375, + -0.5 + ], + "selected": false, + "weight": 1.125 + }, + { + "coDeform": [ + -1.0, + -0.5, + 0.75 + ], + "selected": false, + "weight": 1.25 + }, + { + "coDeform": [ + 0.125, + -0.5625, + 0.75 + ], + "selected": false, + "weight": 1.375 + }, + { + "coDeform": [ + 1.25, + -0.5, + 0.75 + ], + "selected": false, + "weight": 1.5 + }, + { + "coDeform": [ + -1.0, + 0.4375, + 0.75 + ], + "selected": false, + "weight": 1.625 + }, + { + "coDeform": [ + 0.125, + 0.5, + 0.75 + ], + "selected": false, + "weight": 1.75 + }, + { + "coDeform": [ + 1.25, + 0.4375, + 0.75 + ], + "selected": true, + "weight": 1.875 + } + ], + "useOutside": true, + "vertexGroup": "WebGapInfluence" + }, + "operation": "LATTICE_DATABLOCK_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00010" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00010/lattice-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00010/lattice-local-exact-report.json new file mode 100644 index 00000000..95ed7b59 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00010/lattice-local-exact-report.json @@ -0,0 +1,32 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00010", + "operation": "LATTICE_DATABLOCK_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00010-datablock-Lattice.blend", + "sha256": "ec40e2661e20c8f7e3b18d9b42f9e585175be8c2f210a1c8c190e76a6e9fbc63" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00010/lattice-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "latticeId": "lattice:WebGapLattice", + "dimensions": [ + 3, + 2, + 2 + ], + "pointCount": 12, + "interpolation": [ + "KEY_LINEAR", + "KEY_CARDINAL", + "KEY_BSPLINE" + ], + "pointHash": "f1b46c8600d9f44473ecb7d4d90fcc022d446dfa1ea9cd780a9f003f741895bc" + }, + "saveReopen": "EXACT", + "nextTask": "M16-GAP-00011" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00010/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00010/manifest.json new file mode 100644 index 00000000..a9dc1a07 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00010/manifest.json @@ -0,0 +1,57 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00010", + "parentTask": "M16-GAP-00009", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "LATTICE_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00009/manifest.json", + "sha256": "c242975eccdcb4c516dfae17763f9a15b9db29b856bd9f845e9eceb429e8ce69" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00010-datablock-Lattice.blend", + "sha256": "ec40e2661e20c8f7e3b18d9b42f9e585175be8c2f210a1c8c190e76a6e9fbc63" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00010.py", + "sha256": "35303113c57f1cc6c6b7bd1afc269be0c824b71f0c7bfbb0fd33f35fea40a8c2" + }, + "desktopChecker": { + "path": "tools/web/check-lattice-desktop.py", + "sha256": "56f48405407b4baba4ee9a13038fddc951c6fe607a3d64d6894a00e61d30be9b" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "8d93d0d65a0c3e0268dfb1ce9cdd27bdf7aab33f2234d6433b6749aa81403ad3" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "3c2c69a66d60692049956530c2570db377e5d10838d0048aa4e0f3fb210f9c62" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "7d96e706de6b42f4372d937708600be150190ae593e214066a06d030bcac8b73" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "4a33528e8bd4d50956e741cba93ab0215350943c59f56b7c82e18df19f4ee450" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00010/lattice-desktop-report.json", + "sha256": "bb8effdcf18a89794914d88311a598b3285e64f18c402c9cff477ae5700ba089" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00010/lattice-local-exact-report.json", + "sha256": "489c9d25a6e4164860f5528944eca0e173f8a7e4130e89404b6fa09da9b469a0" + } + }, + "nextTask": "M16-GAP-00011" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00011/library-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00011/library-desktop-report.json new file mode 100644 index 00000000..a375b995 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00011/library-desktop-report.json @@ -0,0 +1,17 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00011-datablock-Library.blend", + "fixtureSha256": "d6b00d6cdc0c1c73158ba91433d8344f4b6b0a2f1d5c81e57cc4e0b42d23c34a", + "library": { + "dependencyIds": [], + "id": "library:WebGapLibrary.blend", + "name": "WebGapLibrary.blend", + "packed": false, + "readOnly": true, + "sourcePath": "//WebGapLibrary.blend" + }, + "operation": "LIBRARY_DATABLOCK_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00011" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00011/library-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00011/library-local-exact-report.json new file mode 100644 index 00000000..5f5ae975 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00011/library-local-exact-report.json @@ -0,0 +1,26 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00011", + "operation": "LIBRARY_DATABLOCK_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00011-datablock-Library.blend", + "sha256": "d6b00d6cdc0c1c73158ba91433d8344f4b6b0a2f1d5c81e57cc4e0b42d23c34a" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00011/library-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "libraryId": "library:WebGapLibrary.blend", + "sourcePath": "//WebGapLibrary.blend", + "libraryStatus": "EXTERNAL_REQUIRED", + "dependencyIds": [] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00012" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00011/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00011/manifest.json new file mode 100644 index 00000000..109f2b30 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00011/manifest.json @@ -0,0 +1,61 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00011", + "parentTask": "M16-GAP-00010", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "LIBRARY_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00010/manifest.json", + "sha256": "cb3be7f0917ca95d831ffabaa11470eb528ce3fe5eda1ba1e3f7925ea2288737" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00011-datablock-Library.blend", + "sha256": "d6b00d6cdc0c1c73158ba91433d8344f4b6b0a2f1d5c81e57cc4e0b42d23c34a" + }, + "librarySource": { + "path": "tests/files/web/generated/WebGapLibrary.blend", + "sha256": "1fe24e423713bc18dc936e723e97f7c306db4aa62cc24736055eb2d341375088" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00011.py", + "sha256": "f33b9d5482193439fedd34f138b192d2e086db01205560276fa43bfd08ed430a" + }, + "desktopChecker": { + "path": "tools/web/check-library-desktop.py", + "sha256": "34eda5a724ca7eab9fcb2e4f39cec46125e363f548fc77beb3f09133151fdeb4" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "0e13f61a7f34ddc10388f8e6ee5215fe941714e2bbf759a795efbcdd0fbc3aa0" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "3c2c69a66d60692049956530c2570db377e5d10838d0048aa4e0f3fb210f9c62" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "7d96e706de6b42f4372d937708600be150190ae593e214066a06d030bcac8b73" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "4a33528e8bd4d50956e741cba93ab0215350943c59f56b7c82e18df19f4ee450" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00011/library-desktop-report.json", + "sha256": "0bc9032490f2450e99d30fd67fe95b164f8d359ca042d0e0b772ee1a28e39dbd" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00011/library-local-exact-report.json", + "sha256": "82c3a7ebb204da9dd8f817f0378374be062993892a4405d01f81c960677f45bf" + } + }, + "nextTask": "M16-GAP-00012" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00012/light-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00012/light-desktop-report.json new file mode 100644 index 00000000..306ea170 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00012/light-desktop-report.json @@ -0,0 +1,32 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00012-datablock-Light.blend", + "fixtureSha256": "b92565305572d48cc2311b749d50024f1df68c4084ae8bc52ce2ba2c3832a3fa", + "light": { + "areaShape": 1, + "areaSize": 3.0, + "areaSizeY": 2.0, + "areaSpread": 2.4, + "castsShadow": false, + "color": [ + 0.25, + 0.5, + 0.75 + ], + "energy": 400.0, + "exposure": 1.0, + "id": "light:WebGapLight", + "lightType": 4, + "name": "WebGapLight", + "radius": 0.3, + "spotAngle": 0.785398, + "spotBlend": 0.15, + "sunAngle": 0.00918, + "temperature": 5000.0, + "useTemperature": true + }, + "operation": "LIGHT_DATABLOCK_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00012" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00012/light-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00012/light-local-exact-report.json new file mode 100644 index 00000000..07f57902 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00012/light-local-exact-report.json @@ -0,0 +1,33 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00012", + "operation": "LIGHT_DATABLOCK_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00012-datablock-Light.blend", + "sha256": "b92565305572d48cc2311b749d50024f1df68c4084ae8bc52ce2ba2c3832a3fa" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00012/light-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "lightId": "light:WebGapLight", + "lightType": 4, + "fields": { + "energy": 400, + "exposure": 1, + "temperature": 5000, + "useTemperature": true, + "castsShadow": false, + "areaSize": 3, + "areaSizeY": 2 + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00013" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00012/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00012/manifest.json new file mode 100644 index 00000000..361ca706 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00012/manifest.json @@ -0,0 +1,57 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00012", + "parentTask": "M16-GAP-00011", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "LIGHT_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00011/manifest.json", + "sha256": "a29ac9278d37d187f5e421f365a71fb3d18a8aeb74cfe4ae733f8510a43446de" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00012-datablock-Light.blend", + "sha256": "b92565305572d48cc2311b749d50024f1df68c4084ae8bc52ce2ba2c3832a3fa" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00012.py", + "sha256": "9b261d7d516e0514e6e96a876661d0ab8eb83b844e92cd72dc4ffda460da0b2b" + }, + "desktopChecker": { + "path": "tools/web/check-light-desktop.py", + "sha256": "90025507cc88c1c2be028e52a0b6e0b80561915bf109f38c64b95191c716505c" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "cf0cc4ebefcd319d6351d70864efd20c66e415dd0adb1637224e1390d1d38e70" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "3c2c69a66d60692049956530c2570db377e5d10838d0048aa4e0f3fb210f9c62" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "7d96e706de6b42f4372d937708600be150190ae593e214066a06d030bcac8b73" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "4a33528e8bd4d50956e741cba93ab0215350943c59f56b7c82e18df19f4ee450" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00012/light-desktop-report.json", + "sha256": "92bd381ec7b8242de6379d9e266ebbb63bd34c2d28e852d2ac7610eb7e67b8d3" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00012/light-local-exact-report.json", + "sha256": "103958f99cc13fccef7acb4128f3707e48580c8ad86813821a2ce40986c5a964" + } + }, + "nextTask": "M16-GAP-00013" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00013/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00013/manifest.json new file mode 100644 index 00000000..6f16e052 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00013/manifest.json @@ -0,0 +1,57 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00013", + "parentTask": "M16-GAP-00012", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "MATERIAL_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00012/manifest.json", + "sha256": "c71a0d9e23d13bf51a190c99f16e4e7e98da1f12cba50f2404bef8fcb6e94d4c" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00013-datablock-Material.blend", + "sha256": "e17880024b28e0fbc8fac5b815a2c673fe11d5000cb1d23a794cdc3d83658d76" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00013.py", + "sha256": "bb04dd1da461e061c27be9d4e160b2787026855198661e72ff4fee802b72c817" + }, + "desktopChecker": { + "path": "tools/web/check-material-desktop.py", + "sha256": "42a870bb79eceb8e1789686db689842dfe390d58db2744fded8dd571fe9cd8f5" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "e0e510273337e56435cf44adef246ff5bf12d6857691376ac2aacf6a4fc79ed8" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "3c2c69a66d60692049956530c2570db377e5d10838d0048aa4e0f3fb210f9c62" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "7d96e706de6b42f4372d937708600be150190ae593e214066a06d030bcac8b73" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "4a33528e8bd4d50956e741cba93ab0215350943c59f56b7c82e18df19f4ee450" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00013/material-desktop-report.json", + "sha256": "7adfdd70f9b116268301e0bb6cf7e0b88cf8eb2ab20d25c944586df3a9cc000c" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00013/material-local-exact-report.json", + "sha256": "229f3fc85518da4539e311e6ca70fd6b156cdcc9ae4c4b901e0de5c895b3d333" + } + }, + "nextTask": "M16-GAP-00014" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00013/material-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00013/material-desktop-report.json new file mode 100644 index 00000000..a069c163 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00013/material-desktop-report.json @@ -0,0 +1,39 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00013-datablock-Material.blend", + "fixtureSha256": "e17880024b28e0fbc8fac5b815a2c673fe11d5000cb1d23a794cdc3d83658d76", + "material": { + "alpha": 0.9, + "baseColor": [ + 0.2, + 0.4, + 0.8, + 0.9 + ], + "coatRoughness": 0.12, + "coatWeight": 0.64, + "emissionColor": [ + 0.05, + 0.1, + 0.2, + 1.0 + ], + "emissionStrength": 3.5, + "id": "material:WebGapMaterial", + "ior": 1.6, + "linkCount": 1, + "metallic": 0.35, + "name": "WebGapMaterial", + "nodeTypes": [ + "ShaderNodeBsdfPrincipled", + "ShaderNodeOutputMaterial" + ], + "roughness": 0.6, + "specularIORLevel": 0.35, + "transmissionWeight": 0.27 + }, + "operation": "MATERIAL_DATABLOCK_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00013" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00013/material-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00013/material-local-exact-report.json new file mode 100644 index 00000000..2dee5294 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00013/material-local-exact-report.json @@ -0,0 +1,26 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00013", + "operation": "MATERIAL_DATABLOCK_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00013-datablock-Material.blend", + "sha256": "e17880024b28e0fbc8fac5b815a2c673fe11d5000cb1d23a794cdc3d83658d76" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00013/material-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "materialId": "material:WebGapMaterial", + "shaderGraphHash": "6c4cc2b22454e1cc33d19d77aeab827415c4b90304d8113d0bbb4c70ac862a3a", + "nodeCount": 2, + "linkCount": 1 + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00014" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00014/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00014/manifest.json new file mode 100644 index 00000000..4f9c7fcd --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00014/manifest.json @@ -0,0 +1,57 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00014", + "parentTask": "M16-GAP-00013", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "MESH_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00013/manifest.json", + "sha256": "47663ad9012f36f2947f3ac8dc0d628f8f5bc338809686692e92dd59ca46c591" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00014-datablock-Mesh.blend", + "sha256": "1676a26f95de4eb90e55ea169a497c382ca68f195c6b883de49b6a3223d84bb5" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00014.py", + "sha256": "c1333fbd1f86bac31f1db1f09056d2152f3b537fe59353f3d6f50767e8d724db" + }, + "desktopChecker": { + "path": "tools/web/check-mesh-desktop.py", + "sha256": "8fe5859138f84079ddb43030fc8d22b596044b08d4f863da5dd25acaeedafdd5" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "82796fdee398c4d97d1506610b8d4b838eeb0ea6b33218ed8c749cf06d747289" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "3c2c69a66d60692049956530c2570db377e5d10838d0048aa4e0f3fb210f9c62" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "7d96e706de6b42f4372d937708600be150190ae593e214066a06d030bcac8b73" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "4a33528e8bd4d50956e741cba93ab0215350943c59f56b7c82e18df19f4ee450" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00014/mesh-desktop-report.json", + "sha256": "e26f0333707fa915b7261f305af413340f9edb26d050a82fb3c6afac12ee2169" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00014/mesh-local-exact-report.json", + "sha256": "36066f715b9993f0e789e12a0d29f9c0c9e79e0b5ff5914268e839fa648cb28a" + } + }, + "nextTask": "M16-GAP-00015" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00014/mesh-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00014/mesh-desktop-report.json new file mode 100644 index 00000000..ca210776 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00014/mesh-desktop-report.json @@ -0,0 +1,53 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00014-datablock-Mesh.blend", + "fixtureSha256": "1676a26f95de4eb90e55ea169a497c382ca68f195c6b883de49b6a3223d84bb5", + "mesh": { + "cornerCount": 4, + "edgeCount": 4, + "faceCount": 1, + "id": "mesh:WebGapMesh", + "indices": [ + 0, + 1, + 2, + 0, + 2, + 3 + ], + "name": "WebGapMesh", + "positions": [ + -1.0, + -1.0, + 0.0, + 1.0, + -1.0, + 0.0, + 1.0, + 1.0, + 0.25, + -1.0, + 1.0, + 0.25 + ], + "triangleCount": 2, + "uvLayers": [ + "WebGapUV" + ], + "uvs": [ + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 1.0, + 0.0, + 1.0 + ], + "vertexCount": 4 + }, + "operation": "MESH_DATABLOCK_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00014" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00014/mesh-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00014/mesh-local-exact-report.json new file mode 100644 index 00000000..cf753280 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00014/mesh-local-exact-report.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00014", + "operation": "MESH_DATABLOCK_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00014-datablock-Mesh.blend", + "sha256": "1676a26f95de4eb90e55ea169a497c382ca68f195c6b883de49b6a3223d84bb5" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00014/mesh-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "meshId": "mesh:WebGapMesh", + "vertexCount": 4, + "triangleCount": 2, + "uvLayers": [ + "WebGapUV" + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00015" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00015/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00015/manifest.json new file mode 100644 index 00000000..59f80b97 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00015/manifest.json @@ -0,0 +1,57 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00015", + "parentTask": "M16-GAP-00014", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "METABALL_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00014/manifest.json", + "sha256": "97e0da40860f7095157068fd4545d7cd9c25ba94a68d56ab87e32b6fd032b655" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00015-datablock-MetaBall.blend", + "sha256": "b4901e5c71f10b79a2061bf7599b43ff1b20b7df59f227aa78c1e66a38080b4f" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00015.py", + "sha256": "db1da7ca090d37b6590eab38f49cbcac9972e7ade1966d78f316048c6b0acf54" + }, + "desktopChecker": { + "path": "tools/web/check-metaball-desktop.py", + "sha256": "77a03db581b17eda4219b42ffbf18e5d1809dfb3bf45f3ac0c0051f27934dc0c" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "ead5bd538ba919fa51ec303d1d1af5ae0f648b1453c02d20383824dcfd9da12f" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "3c2c69a66d60692049956530c2570db377e5d10838d0048aa4e0f3fb210f9c62" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "7d96e706de6b42f4372d937708600be150190ae593e214066a06d030bcac8b73" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "4a33528e8bd4d50956e741cba93ab0215350943c59f56b7c82e18df19f4ee450" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00015/metaball-desktop-report.json", + "sha256": "5b2b7d79397675792bf54b568646a1714f75fab355049e7227f634403345c74c" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00015/metaball-local-exact-report.json", + "sha256": "7253a7de7d2aad035ef38cceee33c0bd04ca743f181f28ac740e09799684a636" + } + }, + "nextTask": "M16-GAP-00016" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00015/metaball-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00015/metaball-desktop-report.json new file mode 100644 index 00000000..dd33a912 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00015/metaball-desktop-report.json @@ -0,0 +1,44 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00015-datablock-MetaBall.blend", + "fixtureSha256": "b4901e5c71f10b79a2061bf7599b43ff1b20b7df59f227aa78c1e66a38080b4f", + "metaball": { + "elements": [ + { + "position": [ + -0.65, + 0.0, + 0.4 + ], + "radius": 0.75, + "scale": [ + 1.1, + 0.9, + 1.2 + ] + }, + { + "position": [ + 0.65, + 0.0, + 0.4 + ], + "radius": 0.55, + "scale": [ + 0.8, + 1.05, + 0.95 + ] + } + ], + "id": "metaball:WebGapMetaBall", + "name": "WebGapMetaBall", + "pointCount": 2, + "renderResolution": 0.1, + "resolution": 0.2 + }, + "operation": "METABALL_DATABLOCK_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00015" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00015/metaball-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00015/metaball-local-exact-report.json new file mode 100644 index 00000000..ae39caa5 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00015/metaball-local-exact-report.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00015", + "operation": "METABALL_DATABLOCK_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00015-datablock-MetaBall.blend", + "sha256": "b4901e5c71f10b79a2061bf7599b43ff1b20b7df59f227aa78c1e66a38080b4f" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00015/metaball-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "metaballId": "metaball:WebGapMetaBall", + "pointCount": 2, + "elementHash": "66c3dfc873f22b9ae92ff3ad96eebe3d98e8f31a58a026315544180c67f430bb" + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00016" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00016/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00016/manifest.json new file mode 100644 index 00000000..75c2ed6b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00016/manifest.json @@ -0,0 +1,57 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00016", + "parentTask": "M16-GAP-00015", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "NODETREE_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00015/manifest.json", + "sha256": "641d43e8184dd710fb5dc5a7278e943c3f8bc70287abda6f5cb5afc5a56bbb7c" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00016-datablock-NodeTree.blend", + "sha256": "7075a345a9991d456fc2c6cc68b3a836fc837dbfd99328173f0018b59e0e483c" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00016.py", + "sha256": "12033eb9f1ef9f09fe86135259382e7cc938928c23a89b637d39e8e36c51982e" + }, + "desktopChecker": { + "path": "tools/web/check-nodetree-desktop.py", + "sha256": "e0fa9c2dbe5f9877c00c33d83e5aa2407606a003163be086a082e631da3cd9a5" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "942362700a8e76db689a57004024b1042ac2b796a225f0b31a25b93dc78e490d" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "3c2c69a66d60692049956530c2570db377e5d10838d0048aa4e0f3fb210f9c62" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "7d96e706de6b42f4372d937708600be150190ae593e214066a06d030bcac8b73" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "4a33528e8bd4d50956e741cba93ab0215350943c59f56b7c82e18df19f4ee450" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00016/nodetree-desktop-report.json", + "sha256": "b1a6608a41fdbbaeb670dfc0222fbef3b6b73e3728add751564194dda1eb2924" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00016/nodetree-local-exact-report.json", + "sha256": "8df89df7ef013b8eed71c19e748eff6b7288772a10f139306a87cb2431eb26b3" + } + }, + "nextTask": "M16-GAP-00017" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00016/nodetree-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00016/nodetree-desktop-report.json new file mode 100644 index 00000000..b7371a3e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00016/nodetree-desktop-report.json @@ -0,0 +1,38 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00016-datablock-NodeTree.blend", + "fixtureSha256": "7075a345a9991d456fc2c6cc68b3a836fc837dbfd99328173f0018b59e0e483c", + "nodeTree": { + "id": "nodetree:WebGapNodeTreeMaterial", + "linkCount": 2, + "links": [ + [ + "ShaderNodeBsdfPrincipled", + "BSDF", + "ShaderNodeOutputMaterial", + "Surface" + ], + [ + "ShaderNodeRGB", + "Color", + "ShaderNodeBsdfPrincipled", + "Base Color" + ] + ], + "name": "Shader Nodetree", + "nodeNames": [ + "Material Output", + "Principled BSDF", + "WebGapRGB" + ], + "nodeTypes": [ + "ShaderNodeBsdfPrincipled", + "ShaderNodeOutputMaterial", + "ShaderNodeRGB" + ] + }, + "operation": "NODETREE_DATABLOCK_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00016" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00016/nodetree-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00016/nodetree-local-exact-report.json new file mode 100644 index 00000000..3955c6b8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00016/nodetree-local-exact-report.json @@ -0,0 +1,26 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00016", + "operation": "NODETREE_DATABLOCK_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00016-datablock-NodeTree.blend", + "sha256": "7075a345a9991d456fc2c6cc68b3a836fc837dbfd99328173f0018b59e0e483c" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00016/nodetree-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "nodeTreeId": "nodetree:WebGapNodeTreeMaterial", + "nodeCount": 3, + "linkCount": 2, + "shaderGraphHash": "0c983ebf5de333f8314784b3a05483d222c3808db825e606620fa6df64c45a60" + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00017" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00017/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00017/manifest.json new file mode 100644 index 00000000..cf97f4e6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00017/manifest.json @@ -0,0 +1,57 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00017", + "parentTask": "M16-GAP-00016", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "OBJECT_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00016/manifest.json", + "sha256": "8d66f1e936cb08b6991465c795c12e7fa65ac0b9ae166eceec5aada32162fb10" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00017-datablock-Object.blend", + "sha256": "527eefc6ea01671a21634a3191790a8228038dd72a0744b6f00969be048e36ef" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00017.py", + "sha256": "64bb9f488573946dcf7d2358bd5d5f540055bb2813942e98ed154da179cb201b" + }, + "desktopChecker": { + "path": "tools/web/check-object-desktop.py", + "sha256": "3cb263b0bd2606cdce38bd433f90d50e738e93bf482c9fd16217306efb1521c0" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "b4a5475d503e53f1405a5c3339d231947151b85f3b98e1072f811422d5385f99" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "3c2c69a66d60692049956530c2570db377e5d10838d0048aa4e0f3fb210f9c62" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "7d96e706de6b42f4372d937708600be150190ae593e214066a06d030bcac8b73" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "4a33528e8bd4d50956e741cba93ab0215350943c59f56b7c82e18df19f4ee450" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00017/object-desktop-report.json", + "sha256": "6c9b16af1d114b00df2711b095778eef239c27b55588063d68872434f08631fd" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00017/object-local-exact-report.json", + "sha256": "38fbe19a794e05d1a05c0df5de7fca919c229c179ac59c452df08cc0c827ca91" + } + }, + "nextTask": "M16-GAP-00018" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00017/object-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00017/object-desktop-report.json new file mode 100644 index 00000000..d5a13847 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00017/object-desktop-report.json @@ -0,0 +1,32 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00017-datablock-Object.blend", + "fixtureSha256": "527eefc6ea01671a21634a3191790a8228038dd72a0744b6f00969be048e36ef", + "object": { + "id": "object:WebGapObject", + "location": [ + 1.25, + -2.5, + 3.75 + ], + "name": "WebGapObject", + "parent": null, + "rotationEuler": [ + 0.2, + -0.35, + 0.5 + ], + "scale": [ + 1.5, + 0.75, + 2.0 + ], + "selectable": true, + "type": "EMPTY", + "visible": true + }, + "operation": "OBJECT_DATABLOCK_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00017" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00017/object-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00017/object-local-exact-report.json new file mode 100644 index 00000000..309227a7 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00017/object-local-exact-report.json @@ -0,0 +1,34 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00017", + "operation": "OBJECT_DATABLOCK_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00017-datablock-Object.blend", + "sha256": "527eefc6ea01671a21634a3191790a8228038dd72a0744b6f00969be048e36ef" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00017/object-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapObject", + "type": "EMPTY", + "translation": [ + 1.25, + -2.5, + 3.75 + ], + "scale": [ + 1.5, + 0.75, + 2 + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00018" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00018/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00018/manifest.json new file mode 100644 index 00000000..cdb3b887 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00018/manifest.json @@ -0,0 +1,61 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00018", + "parentTask": "M16-GAP-00017", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "PARTICLE_SETTINGS_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00017/manifest.json", + "sha256": "f6e791e0e3df1e13ed6e85fa007c2d88b3aea9bd56e85d345a80e2cc6a5e01d3" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00018-datablock-ParticleSettings.blend", + "sha256": "1a51117f3225e6fb1aa98fd135fc39bbfb9444f741f89956c52bc3e0252fc6c0" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00018.py", + "sha256": "c2b7b9c33e92952e9f10ca08b854b4bc0603350aa66f0277d08af4513d18d45e" + }, + "desktopChecker": { + "path": "tools/web/check-particle-settings-desktop.py", + "sha256": "d49ba0b987adf412c1692819b041a35905330f2fa633464c9425932450419afa" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "70356fe4075db1614907a4da3bfb9fb659b17a76d34f48f4811a1ca0f32d9fad" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "bc8083ba6ebc4374ad10be004d2ca0a18919f47368c3171485f3bc7b75934e38" + }, + "api": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "sha256": "7d84b022e0ae7fb76989054c55daee0491045dfbd153d7fae49109370a8cdf6f" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "330b1219735fe881dc5bf96ce34c1ce8fc6df2e16c5672c67345deffb015563f" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "11fd301ef1823d37aaedad00bd9946e13876c517660852bd20f574d12e815d97" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00018/particle-settings-desktop-report.json", + "sha256": "5d1c855ee65c7dc8f715341ed0a2b1269aa1a2f6e3ecde5ca590f393af3042eb" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00018/particle-settings-local-exact-report.json", + "sha256": "fb3eb8a193cbbf8ee8b98457042d560977e309ba1496903abf638e93c7641b6f" + } + }, + "nextTask": "M16-GAP-00019" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00018/particle-settings-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00018/particle-settings-desktop-report.json new file mode 100644 index 00000000..e5dba111 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00018/particle-settings-desktop-report.json @@ -0,0 +1,23 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00018-datablock-ParticleSettings.blend", + "fixtureSha256": "1a51117f3225e6fb1aa98fd135fc39bbfb9444f741f89956c52bc3e0252fc6c0", + "operation": "PARTICLE_SETTINGS_DATABLOCK_DESKTOP", + "particleSettings": { + "distribution": 0, + "drawSize": 0.25, + "end": 96.0, + "from": 0, + "id": "particle-settings:WebGapParticleSettings", + "lifetime": 32.0, + "name": "WebGapParticleSettings", + "physicsType": 0, + "size": 0.125, + "start": 4.0, + "totalParticles": 128, + "type": 0 + }, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00018" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00018/particle-settings-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00018/particle-settings-local-exact-report.json new file mode 100644 index 00000000..b4d31b47 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00018/particle-settings-local-exact-report.json @@ -0,0 +1,35 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00018", + "operation": "PARTICLE_SETTINGS_DATABLOCK_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00018-datablock-ParticleSettings.blend", + "sha256": "1a51117f3225e6fb1aa98fd135fc39bbfb9444f741f89956c52bc3e0252fc6c0" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00018/particle-settings-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "particleSettingsId": "particle-settings:WebGapParticleSettings", + "fields": { + "type": 0, + "from": 0, + "distribution": 0, + "physicsType": 0, + "totalParticles": 128, + "start": 4, + "end": 96, + "lifetime": 32, + "size": 0.125, + "drawSize": 0.25 + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00019" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00019/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00019/manifest.json new file mode 100644 index 00000000..cf5ec206 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00019/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00019", + "parentTask": "M16-GAP-00018", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "POINT_CLOUD_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00018/manifest.json", "sha256": "4713266b567a14e1b9a7c2cffeb7806e054742b83684e82bfa592a0b900c5533"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00019-datablock-PointCloud.blend", "sha256": "57ef80323ae70ce21842c00b3777e8ef484b7e332a6645c165fd5f029a522089"}, + "generator": {"path": "tools/web/generated/M16-GAP-00019.py", "sha256": "36ead922241d5372ba4ae5c4656d449faeb62bb8958b4e96231c09b6b316fa13"}, + "desktopChecker": {"path": "tools/web/check-pointcloud-desktop.py", "sha256": "7223e0684f4bb8559228ffdd118b69dfd31c42959643ed17b885f13bb57eb400"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "a1295ac16691ba55c7ca803030ac304ba0cbca7876695b0bf30658b29547c509"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "bc8083ba6ebc4374ad10be004d2ca0a18919f47368c3171485f3bc7b75934e38"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "330b1219735fe881dc5bf96ce34c1ce8fc6df2e16c5672c67345deffb015563f"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "11fd301ef1823d37aaedad00bd9946e13876c517660852bd20f574d12e815d97"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00019/pointcloud-desktop-report.json", "sha256": "c3c874f8f5e95c97f2862d6b2c4711ac78a90f3a5de289bfdb9a5ae0459dc1d7"}, + "webReport": {"path": "tests/golden/M16-GAP-00019/pointcloud-local-exact-report.json", "sha256": "e304b3dd36b08a43307f1dc2a70a14cb6b29214d324b18faf8d8225f7342b23d"} + }, + "nextTask": "M16-GAP-00020" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00019/pointcloud-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00019/pointcloud-desktop-report.json new file mode 100644 index 00000000..0d3fa9ab --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00019/pointcloud-desktop-report.json @@ -0,0 +1,34 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00019-datablock-PointCloud.blend", + "fixtureSha256": "57ef80323ae70ce21842c00b3777e8ef484b7e332a6645c165fd5f029a522089", + "operation": "POINT_CLOUD_DATABLOCK_DESKTOP", + "pointCloud": { + "controlPoints": [ + -1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.5, + 1.0, + 0.0, + 1.0, + 0.0, + -1.0, + 1.5 + ], + "id": "pointcloud:WebGapPointCloud", + "name": "WebGapPointCloud", + "pointCount": 4, + "radii": [ + 0.25, + 0.5, + 0.75, + 1.0 + ] + }, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00019" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00019/pointcloud-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00019/pointcloud-local-exact-report.json new file mode 100644 index 00000000..0cd83312 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00019/pointcloud-local-exact-report.json @@ -0,0 +1,27 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00019", + "operation": "POINT_CLOUD_DATABLOCK_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00019-datablock-PointCloud.blend", + "sha256": "57ef80323ae70ce21842c00b3777e8ef484b7e332a6645c165fd5f029a522089" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00019/pointcloud-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "pointCloudId": "pointcloud:WebGapPointCloud", + "pointCount": 4, + "geometryStatus": "available", + "pointHash": "8ebdf7eaacf3144710d905ad4e496593869f0f151bcb7b142bd462b0dad21c81", + "radiusHash": "55e896f6bf2ec386905ac6241192bb8e85f4be3965e8fcc2b068c39eb1930bf6" + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00020" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00020/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00020/manifest.json new file mode 100644 index 00000000..2a413f88 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00020/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00020", + "parentTask": "M16-GAP-00019", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "SCENE_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00019/manifest.json", "sha256": "cbd811536b02f195f1370a85fd2c13788effe1fb11375776c118390a761c9f28"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00020-datablock-Scene.blend", "sha256": "c12826c7a71f092ee8dc3c32495be295dae95f1f96e6b8310476893c7c76a81b"}, + "generator": {"path": "tools/web/generated/M16-GAP-00020.py", "sha256": "51890c98ae84cd4751896e0e84b9b63d5caa3fa58d47bba6f4074489b88dc24e"}, + "desktopChecker": {"path": "tools/web/check-scene-desktop.py", "sha256": "ada4022a310510ffe37ccd7ef31a6bab8b37dfbd7a0b914f40fe379ba13db083"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "092661081aefd4bd63ecb510bfe3cd4c34f3701e55ca2979e593f42c973a7b2a"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "bc8083ba6ebc4374ad10be004d2ca0a18919f47368c3171485f3bc7b75934e38"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "330b1219735fe881dc5bf96ce34c1ce8fc6df2e16c5672c67345deffb015563f"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "11fd301ef1823d37aaedad00bd9946e13876c517660852bd20f574d12e815d97"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00020/scene-desktop-report.json", "sha256": "fc9fdf2a37f36327e7456d3c17dcfd240b67ce27d9d2f0861fde5db237b2675d"}, + "webReport": {"path": "tests/golden/M16-GAP-00020/scene-local-exact-report.json", "sha256": "d964c61c0717865a42574c28d5e4fffdcb45c3c962e9bce4608c5f9438828504"} + }, + "nextTask": "M16-GAP-00021" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00020/scene-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00020/scene-desktop-report.json new file mode 100644 index 00000000..641cbb1c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00020/scene-desktop-report.json @@ -0,0 +1,21 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00020-datablock-Scene.blend", + "fixtureSha256": "c12826c7a71f092ee8dc3c32495be295dae95f1f96e6b8310476893c7c76a81b", + "operation": "SCENE_DATABLOCK_DESKTOP", + "saveReopen": "EXACT", + "scene": { + "fps": 30.0, + "fpsBase": 1.0, + "frameCurrent": 48, + "frameEnd": 180, + "frameStart": 12, + "id": "scene:WebGapScene", + "name": "WebGapScene", + "renderEngine": "BLENDER_EEVEE", + "unitScale": 0.25, + "unitSystem": 1 + }, + "schemaVersion": 1, + "task": "M16-GAP-00020" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00020/scene-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00020/scene-local-exact-report.json new file mode 100644 index 00000000..cc77e10d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00020/scene-local-exact-report.json @@ -0,0 +1,31 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00020", + "operation": "SCENE_DATABLOCK_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00020-datablock-Scene.blend", + "sha256": "c12826c7a71f092ee8dc3c32495be295dae95f1f96e6b8310476893c7c76a81b" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00020/scene-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "sceneId": "scene:WebGapScene", + "frame": { + "current": 48, + "end": 180, + "start": 12 + }, + "renderEngine": "BLENDER_EEVEE", + "unitSystem": 1, + "unitScale": 0.25 + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00021" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00021/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00021/manifest.json new file mode 100644 index 00000000..93edd38e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00021/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00021", + "parentTask": "M16-GAP-00020", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "SCREEN_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00020/manifest.json", "sha256": "4cd3a4de64fbb95386f17e096a50622c3f56380635881e2539c10d65db820b1f"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00021-datablock-Screen.blend", "sha256": "0975c534e78b6a05c7c10adc7313cb611a3350cc3c7f6e9bfd4013c334b9f376"}, + "generator": {"path": "tools/web/generated/M16-GAP-00021.py", "sha256": "f6a97289626552e3e319fe72f3932beb610289c7da8710c0d4219312b0566c1e"}, + "desktopChecker": {"path": "tools/web/check-screen-desktop.py", "sha256": "16ba526404558472d2dacc48e6f51440031556483dfeab9b52a43f69a3d5644e"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "dbd2d79fd5dba004e91c79eafec46a1e520804ea447aa1b594256cee801cd88a"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "bc8083ba6ebc4374ad10be004d2ca0a18919f47368c3171485f3bc7b75934e38"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "330b1219735fe881dc5bf96ce34c1ce8fc6df2e16c5672c67345deffb015563f"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "11fd301ef1823d37aaedad00bd9946e13876c517660852bd20f574d12e815d97"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00021/screen-desktop-report.json", "sha256": "41a5d58883238d89e4e6ed3805b452bc165632b63e0065109529de3c0e230ecd"}, + "webReport": {"path": "tests/golden/M16-GAP-00021/screen-local-exact-report.json", "sha256": "792206b5b046411d921b3b916d2b76222aab39050df8028a64c39437e285023c"} + }, + "nextTask": "M16-GAP-00022" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00021/screen-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00021/screen-desktop-report.json new file mode 100644 index 00000000..b5239d39 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00021/screen-desktop-report.json @@ -0,0 +1,21 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00021-datablock-Screen.blend", + "fixtureSha256": "0975c534e78b6a05c7c10adc7313cb611a3350cc3c7f6e9bfd4013c334b9f376", + "operation": "SCREEN_DATABLOCK_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "screen": { + "areaCount": 4, + "editors": [ + "DOPESHEET_EDITOR", + "OUTLINER", + "PROPERTIES", + "VIEW_3D" + ], + "id": "screen:WebGapScreen", + "name": "WebGapScreen", + "regionCount": 18 + }, + "task": "M16-GAP-00021" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00021/screen-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00021/screen-local-exact-report.json new file mode 100644 index 00000000..5ecbd2e1 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00021/screen-local-exact-report.json @@ -0,0 +1,31 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00021", + "operation": "SCREEN_DATABLOCK_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00021-datablock-Screen.blend", + "sha256": "0975c534e78b6a05c7c10adc7313cb611a3350cc3c7f6e9bfd4013c334b9f376" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00021/screen-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "workflowStatus": "AVAILABLE", + "workspaceId": "workspace:Layout", + "areaCount": 4, + "editorTypes": [ + "DOPE_SHEET", + "OUTLINER", + "PROPERTIES", + "VIEW_3D" + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00022" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00022/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00022/manifest.json new file mode 100644 index 00000000..b23ce1af --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00022/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00022", + "parentTask": "M16-GAP-00021", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "SOUND_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00021/manifest.json", "sha256": "e56411fd47be3a03814560e9b8e1d6ece0e5e5a50cbdb44256e20e0976daea54"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00022-datablock-Sound.blend", "sha256": "42785a635a7ac560a01e00135555c31e20a60c454ffb62a466da25ddbe3b5c39"}, + "generator": {"path": "tools/web/generated/M16-GAP-00022.py", "sha256": "10ef16727dfee1c69ea7e6b48f151016cc02a18a6586c478c286be2ed0c7a3ea"}, + "desktopChecker": {"path": "tools/web/check-sound-desktop.py", "sha256": "aeeebdac9d14740843cc703150143087b7985138372ac1278fd3894e850c1ab7"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "a9fc6a8b9fbe567a20b68b794f57eca1a383e6637146e5513d7f79a8f7b"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "4651844c5e9c4e00ee1186f102a78d86d184df8980409d73825ee2449e25eb77"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "841b33000ca9b1bca24a029a1a5d82afc653189f8209865a66bdfa58716833a7"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "1e01c786313bd4b20748a2eb474c350c9b9ab1a0a216f2c6362405a9fc20a5da"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "1e01c786313bd4b20748a2eb474c350c9b9ab1a0a216f2c6362405a9fc20a5da"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00022/sound-desktop-report.json", "sha256": "cb23ace7920d6762f931296701a596f3453ccfa7e966447d0efa198b92d65a69"}, + "webReport": {"path": "tests/golden/M16-GAP-00022/sound-local-exact-report.json", "sha256": "741b67484c81c156c51b5b88e52f32d5e0114292dcbe689c641d2670cd4e82bd"} + }, + "nextTask": "M16-GAP-00023" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00022/sound-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00022/sound-desktop-report.json new file mode 100644 index 00000000..1f394e77 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00022/sound-desktop-report.json @@ -0,0 +1,19 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00022-datablock-Sound.blend", + "fixtureSha256": "42785a635a7ac560a01e00135555c31e20a60c454ffb62a466da25ddbe3b5c39", + "operation": "SOUND_DATABLOCK_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "sound": { + "audioChannels": 1, + "id": "sound:WebGapSound", + "name": "WebGapSound", + "packed": false, + "pitch": 0.0, + "sampleRate": 8000, + "sourcePath": "//WebGapSound.wav", + "volume": 0.0 + }, + "task": "M16-GAP-00022" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00022/sound-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00022/sound-local-exact-report.json new file mode 100644 index 00000000..2a9b509e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00022/sound-local-exact-report.json @@ -0,0 +1,29 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00022", + "operation": "SOUND_DATABLOCK_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00022-datablock-Sound.blend", + "sha256": "42785a635a7ac560a01e00135555c31e20a60c454ffb62a466da25ddbe3b5c39" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00022/sound-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "soundId": "sound:WebGapSound", + "sourcePath": "//WebGapSound.wav", + "packed": false, + "volume": 0, + "pitch": 0, + "audioChannels": 1, + "sampleRate": 8000 + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00023" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00023/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00023/manifest.json new file mode 100644 index 00000000..cc98a6f1 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00023/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00023", + "parentTask": "M16-GAP-00022", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "SPEAKER_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00022/manifest.json", "sha256": "fac4a48e35b052acec9e50a5b26c801e532a1faa80185eda477dfa8a05f8dec3"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00023-datablock-Speaker.blend", "sha256": "6e422e16f6e020af7ab0a6f3fad3c721b42c924c8a0392bc98546c3f39ee9d23"}, + "generator": {"path": "tools/web/generated/M16-GAP-00023.py", "sha256": "7bb8465ba094c9f7edbfbb66fd9f6d8b0a2e2b955d5fb990313daea09adbd22c"}, + "desktopChecker": {"path": "tools/web/check-speaker-desktop.py", "sha256": "4f2b6e3359aeba90754ade475f1683acccc8d2f44a75552c3b04f79a0ddf13d5"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "8db1897b073b8a995e70747daabd11e52c4e235a7f45d4fb3b6f93df642b8bd1"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "dda3f81b178856faf5d05a3e84d4820928e35bda66a47cdf52a55b443f50f015"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "abbc02872f89bfd2e488c3b4c4e01c69a1e366bdfa3871e8564f1599b05d784e"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "76264df82ce5f21d6b3af2514bda865f902f8485be37cffa74145f2af387e5fd"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "76264df82ce5f21d6b3af2514bda865f902f8485be37cffa74145f2af387e5fd"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00023/speaker-desktop-report.json", "sha256": "8ee6e52568f2c37098a8f64983f90243b2df69df1c16a0c4eaae855a7e9fad9d"}, + "webReport": {"path": "tests/golden/M16-GAP-00023/speaker-local-exact-report.json", "sha256": "7d48447d03e39e5e29f41bf18a95040c5436ed73229cee1bdc32e09f7aae594d"} + }, + "nextTask": "M16-GAP-00024" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00023/speaker-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00023/speaker-desktop-report.json new file mode 100644 index 00000000..b5abc63e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00023/speaker-desktop-report.json @@ -0,0 +1,24 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00023-datablock-Speaker.blend", + "fixtureSha256": "6e422e16f6e020af7ab0a6f3fad3c721b42c924c8a0392bc98546c3f39ee9d23", + "operation": "SPEAKER_DATABLOCK_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "speaker": { + "attenuation": 0.75, + "coneAngleInner": 120.0, + "coneAngleOuter": 270.0, + "coneVolumeOuter": 0.3499999940395355, + "distanceMax": 12.5, + "distanceReference": 2.25, + "id": "speaker:WebGapSpeaker", + "name": "WebGapSpeaker", + "pitch": 1.100000023841858, + "soundId": "sound:WebGapSpeakerSound", + "volume": 0.6499999761581421, + "volumeMax": 0.8500000238418579, + "volumeMin": 0.15000000596046448 + }, + "task": "M16-GAP-00023" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00023/speaker-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00023/speaker-local-exact-report.json new file mode 100644 index 00000000..21df5743 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00023/speaker-local-exact-report.json @@ -0,0 +1,34 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00023", + "operation": "SPEAKER_DATABLOCK_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00023-datablock-Speaker.blend", + "sha256": "6e422e16f6e020af7ab0a6f3fad3c721b42c924c8a0392bc98546c3f39ee9d23" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00023/speaker-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "speakerId": "speaker:WebGapSpeaker", + "soundId": "sound:WebGapSpeakerSound", + "volumeMax": 0.8500000238418579, + "volumeMin": 0.15000000596046448, + "distanceMax": 12.5, + "distanceReference": 2.25, + "attenuation": 0.75, + "coneAngleOuter": 270, + "coneAngleInner": 120, + "coneVolumeOuter": 0.3499999940395355, + "volume": 0.6499999761581421, + "pitch": 1.100000023841858 + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00024" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00024/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00024/manifest.json new file mode 100644 index 00000000..f0ce7d6d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00024/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00024", + "parentTask": "M16-GAP-00023", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "TEXT_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00023/manifest.json", "sha256": "f845a8578a2ce9f106f0ca8ea02ef6ccddca87086e779eb7ddcf9fef5b8934f2"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00024-datablock-Text.blend", "sha256": "7999f758dfbf7b5984f16464d1e5346d806c54c83ca68a583df54942c5e3b7d3"}, + "generator": {"path": "tools/web/generated/M16-GAP-00024.py", "sha256": "85a16b7ebb4b00dffdc9277d11780b744267e0c789e75844b2749517c23e8ebd"}, + "desktopChecker": {"path": "tools/web/check-text-desktop.py", "sha256": "9ff73dbca7389f05aaf4834c4fb5a734a5c2cb2ef5e1a65962edbc0662ce0557"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "1c655b9500d50d1c08bf3beb77bea93165c194dcca3bca2ed3fad9e503db18b6"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "c1dc68608100b359d9b6451cc02820849bd516b553bc91bd80e7cf50a8218ea9"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "ebf7c55085be0ae10f1c97efc4e0a4d487f79ced689810138ee80401995000e3"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "3a757942bf7514850b1d6f6e1abc008aeea99640785fe60951ae18d3b3dcb301"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "3a757942bf7514850b1d6f6e1abc008aeea99640785fe60951ae18d3b3dcb301"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00024/text-desktop-report.json", "sha256": "50006b807fc8f41603e939f9f2748c4d5cacfcaa19a1c60a7270e9f9962b621c"}, + "webReport": {"path": "tests/golden/M16-GAP-00024/text-local-exact-report.json", "sha256": "73c22077cbbe47e1effd7c24d310e43010fbd48925587cb00efe507838b4f1eb"} + }, + "nextTask": "M16-GAP-00025" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00024/text-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00024/text-desktop-report.json new file mode 100644 index 00000000..523d97bc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00024/text-desktop-report.json @@ -0,0 +1,21 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00024-datablock-Text.blend", + "fixtureSha256": "7999f758dfbf7b5984f16464d1e5346d806c54c83ca68a583df54942c5e3b7d3", + "operation": "TEXT_DATABLOCK_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00024", + "text": { + "byteLength": 39, + "id": "text:WebGapText", + "internal": false, + "isDirty": true, + "lineCount": 3, + "name": "WebGapText", + "source": "Web Blender text datablock\nSecond line\n", + "sourcePath": "//WebGapText.txt", + "sourceSha256": "668dbf9bb49e80ef41a1850cf82dee8572ea18cafd73360c155f3f3f63a15f82", + "useModule": false + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00024/text-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00024/text-local-exact-report.json new file mode 100644 index 00000000..1da8894b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00024/text-local-exact-report.json @@ -0,0 +1,30 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00024", + "operation": "TEXT_DATABLOCK_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00024-datablock-Text.blend", + "sha256": "7999f758dfbf7b5984f16464d1e5346d806c54c83ca68a583df54942c5e3b7d3" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00024/text-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "textId": "text:WebGapText", + "sourceSha256": "668dbf9bb49e80ef41a1850cf82dee8572ea18cafd73360c155f3f3f63a15f82", + "byteLength": 39, + "lineCount": 3, + "sourcePath": "//WebGapText.txt", + "internal": false, + "isDirty": true, + "useModule": false + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00025" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00025/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00025/manifest.json new file mode 100644 index 00000000..d49ed90e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00025/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00025", + "parentTask": "M16-GAP-00024", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "TEXTURE_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00024/manifest.json", "sha256": "681be76208e29366e616a4d8fa51f15e05ec27d2e60b46b140053646468f759d"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00025-datablock-Texture.blend", "sha256": "482857e3b3868f7d4dc87d9b53c5552d10d608ed26a301cc5a6a080b275651c2"}, + "generator": {"path": "tools/web/generated/M16-GAP-00025.py", "sha256": "849dddfddf9841b866cf2531af3f74b3fc42b5b6303eaa5f2273cba2a0b1cee0"}, + "desktopChecker": {"path": "tools/web/check-texture-desktop.py", "sha256": "a91f9f69d389df79d7292e75ad64bd7a65a19bab063bac2ba311342b7d4fbb03"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "aaa9ead20a4b7f8d50acf93af7f4ea3a791de8996f75d7f6321278959d3689fe"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "2a15121e4fa1cb8f04c0112458d5ef0fa92ed92d1efc49e1b938d2c00cfe58da"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "1dae06614aea42c97949b7f13f0d38663e8fce1eb18d475bf1479e326064b16f"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "43d84158eaeec907c5f04018ceb4e3a6948860243a619f0d035be3c5c6a63a5a"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "43d84158eaeec907c5f04018ceb4e3a6948860243a619f0d035be3c5c6a63a5a"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00025/texture-desktop-report.json", "sha256": "ead3d25554f69580a272c3a4c45139632592ba2ca83370c79174683b2c7a982a"}, + "webReport": {"path": "tests/golden/M16-GAP-00025/texture-local-exact-report.json", "sha256": "4e503817eb7053370b627cc9a2edb03fc2ac8b8919534a90064133eaf9e0f4e7"} + }, + "nextTask": "M16-GAP-00026" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00025/texture-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00025/texture-desktop-report.json new file mode 100644 index 00000000..b41aed28 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00025/texture-desktop-report.json @@ -0,0 +1,19 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00025-datablock-Texture.blend", + "fixtureSha256": "482857e3b3868f7d4dc87d9b53c5552d10d608ed26a301cc5a6a080b275651c2", + "operation": "TEXTURE_DATABLOCK_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00025", + "texture": { + "contrast": 1.25, + "id": "texture:WebGapTexture", + "intensity": 0.7200000286102295, + "name": "WebGapTexture", + "noiseDepth": 4, + "noiseScale": 0.41999998688697815, + "saturation": 0.800000011920929, + "type": 1 + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00025/texture-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00025/texture-local-exact-report.json new file mode 100644 index 00000000..ad986c73 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00025/texture-local-exact-report.json @@ -0,0 +1,29 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00025", + "operation": "TEXTURE_DATABLOCK_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00025-datablock-Texture.blend", + "sha256": "482857e3b3868f7d4dc87d9b53c5552d10d608ed26a301cc5a6a080b275651c2" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00025/texture-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "textureId": "texture:WebGapTexture", + "type": 1, + "noiseScale": 0.41999998688697815, + "noiseDepth": 4, + "intensity": 0.7200000286102295, + "contrast": 1.25, + "saturation": 0.800000011920929 + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00026" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00026/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00026/manifest.json new file mode 100644 index 00000000..f186b2ec --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00026/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00026", + "parentTask": "M16-GAP-00025", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "VOLUME_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00025/manifest.json", "sha256": "acc4b2d2d617b49bd274ae18e07475885eaa566269fe038c7df173a6a58f4964"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00026-datablock-Volume.blend", "sha256": "725ee2ac502aec3ffe6fc91bcaaf9ce1c8225dc71b3162b10db8d598bed0b8d0"}, + "generator": {"path": "tools/web/generated/M16-GAP-00026.py", "sha256": "e8cf1a2397e5a03f6cd246add30287ead990b9bfb932e34bfbbb4e95d7a98036"}, + "desktopChecker": {"path": "tools/web/check-volume-desktop.py", "sha256": "fd5b2110877e9372056292b543d23f1912ffcad32ea5d882054110202c6e3b16"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "025f75b03eb228956f35084c5413f8fac96ed1837ac4938a734e7db0c0c0fb67"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "2a15121e4fa1cb8f04c0112458d5ef0fa92ed92d1efc49e1b938d2c00cfe58da"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "1dae06614aea42c97949b7f13f0d38663e8fce1eb18d475bf1479e326064b16f"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "43d84158eaeec907c5f04018ceb4e3a6948860243a619f0d035be3c5c6a63a5a"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "43d84158eaeec907c5f04018ceb4e3a6948860243a619f0d035be3c5c6a63a5a"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00026/volume-desktop-report.json", "sha256": "60c12879158b8a8e548a135778f90618cec8d42b39a95e460398fe6cfe563c86"}, + "webReport": {"path": "tests/golden/M16-GAP-00026/volume-local-exact-report.json", "sha256": "649e2bace33f8d9708b3ce0b4979e0cd6e9a0b78b8f4ee2b75776a94e68362be"} + }, + "nextTask": "M16-GAP-00027" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00026/volume-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00026/volume-desktop-report.json new file mode 100644 index 00000000..e5c4276e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00026/volume-desktop-report.json @@ -0,0 +1,19 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00026-datablock-Volume.blend", + "fixtureSha256": "725ee2ac502aec3ffe6fc91bcaaf9ce1c8225dc71b3162b10db8d598bed0b8d0", + "operation": "VOLUME_DATABLOCK_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00026", + "volume": { + "displayDensity": 2.5, + "id": "volume:WebGapVolume", + "interpolation": "NEAREST", + "name": "WebGapVolume", + "sourcePath": "//WebGapVolume.vdb", + "stepSize": 0.125, + "velocityGrid": "velocity", + "velocityScale": 1.0 + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00026/volume-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00026/volume-local-exact-report.json new file mode 100644 index 00000000..8739601b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00026/volume-local-exact-report.json @@ -0,0 +1,32 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00026", + "operation": "VOLUME_DATABLOCK_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00026-datablock-Volume.blend", + "sha256": "725ee2ac502aec3ffe6fc91bcaaf9ce1c8225dc71b3162b10db8d598bed0b8d0" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00026/volume-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "volumeId": "volume:WebGapVolume", + "geometryStatus": "blocked", + "sourcePath": "//WebGapVolume.vdb", + "volumeProperties": { + "displayDensity": 2.5, + "interpolation": "NEAREST", + "stepSize": 0.125, + "velocityGrid": "velocity", + "velocityScale": 1 + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00027" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00027/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00027/manifest.json new file mode 100644 index 00000000..730034d1 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00027/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00027", + "parentTask": "M16-GAP-00026", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "WINDOW_MANAGER_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00026/manifest.json", "sha256": "08f5fe0a60d924bbd0f3cb85d95678d05a62d16940703cb989cf9201e73cbf73"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00027-datablock-WindowManager.blend", "sha256": "88052ddeb5b8e35ce537910d9ce3b005b92c58b001f9b74a369a3c854ccebb23"}, + "generator": {"path": "tools/web/generated/M16-GAP-00027.py", "sha256": "f93ea3ef289853f45ad9e1553007e47e89376d15ac2dd2e623ed2c3b783cd036"}, + "desktopChecker": {"path": "tools/web/check-window-manager-desktop.py", "sha256": "29ac8b293e20b71a917fa834809cd15d881362cec0749a6ea1f7241b7409c6f1"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "aa84d8b44354d9c594d9b67a67f0b72a8f1789c9ac87af57bfde917d721fb09b"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "f7cacc6e4ca79c761f74dc44baeb95c704af74b6b575116c3667c6e513626cb7"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "50e407db59ec8dc6f73084c3d2db51e2e32bcaa8134f57dea7d130a3683ce06d"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "3792889825b9488e3644baf3e4d03b4297683bc628c2c66f1823e541f4b4ca6c"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "3792889825b9488e3644baf3e4d03b4297683bc628c2c66f1823e541f4b4ca6c"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00027/window-manager-desktop-report.json", "sha256": "2b50759c964b06b38410f44c11679616a8f172d5bc05bd2e5b54a416ec781c15"}, + "webReport": {"path": "tests/golden/M16-GAP-00027/window-manager-local-exact-report.json", "sha256": "9e92475873db0072f32d708e6f1468387637fac39008c4928060c39a719a5dc0"} + }, + "nextTask": "M16-GAP-00028" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00027/window-manager-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00027/window-manager-desktop-report.json new file mode 100644 index 00000000..c8493094 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00027/window-manager-desktop-report.json @@ -0,0 +1,16 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00027-datablock-WindowManager.blend", + "fixtureSha256": "88052ddeb5b8e35ce537910d9ce3b005b92c58b001f9b74a369a3c854ccebb23", + "operation": "WINDOW_MANAGER_DATABLOCK_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00027", + "windowManager": { + "id": "window-manager:WinMan", + "interfaceLocked": false, + "name": "WinMan", + "presetName": "New Preset", + "windowCount": 1 + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00027/window-manager-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00027/window-manager-local-exact-report.json new file mode 100644 index 00000000..c7cd9219 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00027/window-manager-local-exact-report.json @@ -0,0 +1,29 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00027", + "operation": "WINDOW_MANAGER_DATABLOCK_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00027-datablock-WindowManager.blend", + "sha256": "88052ddeb5b8e35ce537910d9ce3b005b92c58b001f9b74a369a3c854ccebb23" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00027/window-manager-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "windowManager": { + "id": "window-manager:WinMan", + "interfaceLocked": false, + "name": "WinMan", + "presetName": "New Preset", + "windowCount": 1 + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00028" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00028/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00028/manifest.json new file mode 100644 index 00000000..0f7e2192 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00028/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00028", + "parentTask": "M16-GAP-00027", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "WORKSPACE_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00027/manifest.json", "sha256": "1feb7365ae2590ada5408d47075d8151e9c023918b4822668619b4ba7c07f8e3"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00028-datablock-WorkSpace.blend", "sha256": "fbb4fc85b46a30dd8913e5d2d75b73688cef1a3f64861337c7fbd94a687c87df"}, + "generator": {"path": "tools/web/generated/M16-GAP-00028.py", "sha256": "6d1a74f7340820917461720442888c5a705ac8140d6ad0d4809aace082c27469"}, + "desktopChecker": {"path": "tools/web/check-workspace-desktop.py", "sha256": "5e01f8a7802eface955fcb0396c99a3f0c2570751bb672cd2b3401389e80cf08"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "9beda9925a369ce09e2aa0f6955be2b3df158fab70a8e62343fae230a1357198"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "1f962be51a8201d1d0a119761a51de7864fbda4e553a13dcf7b14f19fbec79db"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "bf5361e4b5e3e2105b59494c548617b463063e64a340398494cde77632b9424c"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "bf5361e4b5e3e2105b59494c548617b463063e64a340398494cde77632b9424c"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00028/workspace-desktop-report.json", "sha256": "4ab3274ecfcd512964db37e661f8b5e8c53077687094115c11dab4fbe39a12b9"}, + "webReport": {"path": "tests/golden/M16-GAP-00028/workspace-local-exact-report.json", "sha256": "3b12cbb0533284f29ad1d0f4659ecd1ce128ae5b24545610819f994252b79e6d"} + }, + "nextTask": "M16-GAP-00029" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00028/workspace-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00028/workspace-desktop-report.json new file mode 100644 index 00000000..2d258f16 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00028/workspace-desktop-report.json @@ -0,0 +1,14 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00028-datablock-WorkSpace.blend", + "fixtureSha256": "fbb4fc85b46a30dd8913e5d2d75b73688cef1a3f64861337c7fbd94a687c87df", + "operation": "WORKSPACE_DATABLOCK_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00028", + "workspace": { + "id": "workspace:WebGapWorkspace", + "name": "WebGapWorkspace", + "screenCount": 1 + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00028/workspace-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00028/workspace-local-exact-report.json new file mode 100644 index 00000000..1713f8e3 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00028/workspace-local-exact-report.json @@ -0,0 +1,27 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00028", + "operation": "WORKSPACE_DATABLOCK_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00028-datablock-WorkSpace.blend", + "sha256": "fbb4fc85b46a30dd8913e5d2d75b73688cef1a3f64861337c7fbd94a687c87df" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00028/workspace-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "workspace": { + "id": "workspace:WebGapWorkspace", + "name": "WebGapWorkspace", + "screenCount": 1 + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00029" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00029/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00029/manifest.json new file mode 100644 index 00000000..d8d5d1aa --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00029/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00029", + "parentTask": "M16-GAP-00028", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "WORLD_DATABLOCK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00028/manifest.json", "sha256": "90c983a8c7602649ca536ade7131d5b0d726ef6834de2e1665c7e4656156c638"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00029-datablock-World.blend", "sha256": "33501247b59cec137aa857b0bd4ea59526f30bb3632de9996e6026d4bd3f0401"}, + "generator": {"path": "tools/web/generated/M16-GAP-00029.py", "sha256": "b57d5f058a3f3862d6c4a8e4383ebd8c544ec2118338298eb5756fadc8aa306f"}, + "desktopChecker": {"path": "tools/web/check-world-desktop.py", "sha256": "fb4d115af8370f0d48a94ecc6d609eac5c0ca826a0f6d5bef90304b8c593d34b"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "df6865db07b9b9456bfed583277aa0cdbec5ed39f298d87251fe8bcdecdcf909"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "1f962be51a8201d1d0a119761a51de7864fbda4e553a13dcf7b14f19fbec79db"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "bf5361e4b5e3e2105b59494c548617b463063e64a340398494cde77632b9424c"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "bf5361e4b5e3e2105b59494c548617b463063e64a340398494cde77632b9424c"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00029/world-desktop-report.json", "sha256": "2818f250b67524e0517ad117619a00fbcb09f51141c4f228e3c0095f0ee4afad"}, + "webReport": {"path": "tests/golden/M16-GAP-00029/world-local-exact-report.json", "sha256": "22eacfe0c2fa9cdce05b0965fac8f8f59bbd17726a89606678a8d3ed804dbf4d"} + }, + "nextTask": "M16-GAP-00030" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00029/world-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00029/world-desktop-report.json new file mode 100644 index 00000000..06c6dfd6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00029/world-desktop-report.json @@ -0,0 +1,29 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00029-datablock-World.blend", + "fixtureSha256": "33501247b59cec137aa857b0bd4ea59526f30bb3632de9996e6026d4bd3f0401", + "operation": "WORLD_DATABLOCK_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00029", + "world": { + "backgroundVisible": true, + "color": [ + 0.11999999731779099, + 0.20000000298023224, + 0.3499999940395355 + ], + "environmentStrength": 1.0, + "exposure": 0.0, + "id": "world:WebGapWorld", + "mist": { + "depth": 18.0, + "enabled": true, + "height": 0.0, + "intensity": 0.4000000059604645, + "start": 3.0, + "type": "QUADRATIC" + }, + "name": "WebGapWorld" + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00029/world-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00029/world-local-exact-report.json new file mode 100644 index 00000000..95ddf1a4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00029/world-local-exact-report.json @@ -0,0 +1,42 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00029", + "operation": "WORLD_DATABLOCK_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00029-datablock-World.blend", + "sha256": "33501247b59cec137aa857b0bd4ea59526f30bb3632de9996e6026d4bd3f0401" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00029/world-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "world": { + "backgroundVisible": true, + "color": [ + 0.11999999731779099, + 0.20000000298023224, + 0.3499999940395355 + ], + "environmentStrength": 1, + "exposure": 0, + "id": "world:WebGapWorld", + "mist": { + "depth": 18, + "enabled": true, + "height": 0, + "intensity": 0.4000000059604645, + "start": 3, + "type": "QUADRATIC" + }, + "name": "WebGapWorld" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00030" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00030/armature-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00030/armature-modifier-desktop-report.json new file mode 100644 index 00000000..016a9726 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00030/armature-modifier-desktop-report.json @@ -0,0 +1,27 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00030-modifier-ARMATURE.blend", + "fixtureSha256": "4725dda93e7bece9fb121a5cf91856c43ac043a598c038b297eef8aad95d2552", + "modifier": { + "armatureDataId": "armature:WebGapArmature", + "armatureObjectId": "object:WebGapArmatureObject", + "meshId": "mesh:WebGapArmatureMesh", + "meshName": "WebGapArmatureMesh", + "modifier": { + "enabled": true, + "name": "WebGapArmature", + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "targetObjectId": "object:WebGapArmatureObject", + "type": "ARMATURE", + "typeCode": 8, + "vertexGroup": "Root" + } + }, + "operation": "ARMATURE_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00030" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00030/armature-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00030/armature-modifier-local-exact-report.json new file mode 100644 index 00000000..b6006884 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00030/armature-modifier-local-exact-report.json @@ -0,0 +1,49 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00030", + "operation": "ARMATURE_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00030-modifier-ARMATURE.blend", + "sha256": "4725dda93e7bece9fb121a5cf91856c43ac043a598c038b297eef8aad95d2552" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00030/armature-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "meshId": "mesh:WebGapArmatureMesh", + "modifier": { + "dependsOn": [ + "object:WebGapArmatureObject" + ], + "enabled": true, + "evaluationStatus": "METADATA_ONLY", + "name": "WebGapArmature", + "parameters": { + "armatureObjectId": "object:WebGapArmatureObject", + "deformFlags": 1, + "flag": 5, + "mode": 7, + "persistentUid": 312629205, + "targetObjectIds": [ + "object:WebGapArmatureObject" + ], + "typeCode": 8, + "vertexGroup": "Root" + }, + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "type": "ARMATURE", + "uuid": "modifier:object:WebGapArmatureMeshObject:312629205" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00031" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00030/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00030/manifest.json new file mode 100644 index 00000000..104542c1 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00030/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00030", + "parentTask": "M16-GAP-00029", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00029/manifest.json", "sha256": "2475bd5cd1dad8bc459f3a2508b8006af77b18464be35f42ef140e7af6796d5a"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00030-modifier-ARMATURE.blend", "sha256": "4725dda93e7bece9fb121a5cf91856c43ac043a598c038b297eef8aad95d2552"}, + "generator": {"path": "tools/web/generated/M16-GAP-00030.py", "sha256": "f3fb565611e07d2eb5a30f6557a3848d5f1d6e5231dcc9d4da80ec4973158f24"}, + "desktopChecker": {"path": "tools/web/check-armature-modifier-desktop.py", "sha256": "3cb59a6bd15b97a5fb33fc5643bd58fe3155264a2598e1cdae17aa72626e146f"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "4dd273697a66ec6262558bff8948e7c5042d11869b2b6687490f3b04ae703542"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "1f962be51a8201d1d0a119761a51de7864fbda4e553a13dcf7b14f19fbec79db"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "bf5361e4b5e3e2105b59494c548617b463063e64a340398494cde77632b9424c"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "bf5361e4b5e3e2105b59494c548617b463063e64a340398494cde77632b9424c"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00030/armature-modifier-desktop-report.json", "sha256": "32ca0be514d0f5b02150c23a42e99784903da9c211aebb7f2736229daa069220"}, + "webReport": {"path": "tests/golden/M16-GAP-00030/armature-modifier-local-exact-report.json", "sha256": "fad61c1ebb8396b4af4143e7079a7fc1db4bf3f7ff945ce4717650c5493510a5"} + }, + "nextTask": "M16-GAP-00031" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00031/array-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00031/array-modifier-desktop-report.json new file mode 100644 index 00000000..c771ec81 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00031/array-modifier-desktop-report.json @@ -0,0 +1,24 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00031-modifier-ARRAY.blend", + "fixtureSha256": "ff8619e63a5611dbc78599f849d27f0e4e2dc3c1c5849e9db86349e00106c23b", + "modifier": { + "meshId": "mesh:WebGapArrayObjectMesh", + "modifier": { + "count": 4, + "endCapObjectId": "object:WebGapArrayEndCap", + "name": "WebGapArray", + "showEditMode": true, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "startCapObjectId": "object:WebGapArrayStartCap", + "type": "ARRAY", + "typeCode": 12 + } + }, + "operation": "ARRAY_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00031" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00031/array-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00031/array-modifier-local-exact-report.json new file mode 100644 index 00000000..1ab340b2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00031/array-modifier-local-exact-report.json @@ -0,0 +1,49 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00031", + "operation": "ARRAY_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00031-modifier-ARRAY.blend", + "sha256": "ff8619e63a5611dbc78599f849d27f0e4e2dc3c1c5849e9db86349e00106c23b" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00031/array-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "meshId": "mesh:WebGapArrayObjectMesh", + "modifier": { + "dependsOn": [ + "object:WebGapArrayStartCap", + "object:WebGapArrayEndCap" + ], + "enabled": true, + "evaluationStatus": "METADATA_ONLY", + "name": "WebGapArray", + "parameters": { + "count": 4, + "flag": 5, + "mode": 5, + "persistentUid": 650905928, + "targetObjectIds": [ + "object:WebGapArrayStartCap", + "object:WebGapArrayEndCap" + ], + "typeCode": 12 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "ARRAY", + "uuid": "modifier:object:WebGapArrayObject:650905928" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00032" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00031/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00031/manifest.json new file mode 100644 index 00000000..82734c3a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00031/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00031", + "parentTask": "M16-GAP-00030", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARRAY_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00030/manifest.json", "sha256": "65f93b217bc35c886da135c52079ed52df24d9834b67551a1fb6c302da313014"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00031-modifier-ARRAY.blend", "sha256": "ff8619e63a5611dbc78599f849d27f0e4e2dc3c1c5849e9db86349e00106c23b"}, + "generator": {"path": "tools/web/generated/M16-GAP-00031.py", "sha256": "28504da60ebf881eda9ed407884b403029bb8ced6131c425b64f512c82b2d292"}, + "desktopChecker": {"path": "tools/web/check-array-modifier-desktop.py", "sha256": "82d5e59a60324101b1c97a277ab07afa2e1c52c55d1914fee27076d1c1619489"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "f6dd8efad7849574ae479a707792e2b3f837b8c22e434afa44b5fe60a85673ec"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "1f962be51a8201d1d0a119761a51de7864fbda4e553a13dcf7b14f19fbec79db"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "bf5361e4b5e3e2105b59494c548617b463063e64a340398494cde77632b9424c"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "bf5361e4b5e3e2105b59494c548617b463063e64a340398494cde77632b9424c"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00031/array-modifier-desktop-report.json", "sha256": "739ae5333a5046cd4b0c60333eec89bf4f0bb9508d95022238a173f4a698833f"}, + "webReport": {"path": "tests/golden/M16-GAP-00031/array-modifier-local-exact-report.json", "sha256": "df9326e8ddbb5ace859ade67dff067229c55f19536c568ee6e102d981971c17a"} + }, + "nextTask": "M16-GAP-00032" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00032/bevel-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00032/bevel-modifier-desktop-report.json new file mode 100644 index 00000000..d1b1aef5 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00032/bevel-modifier-desktop-report.json @@ -0,0 +1,24 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00032-modifier-BEVEL.blend", + "fixtureSha256": "3a27883c1faf12a8a0281b7c0e9747915784138efb24c0f1680b525cd50b84c7", + "modifier": { + "meshId": "mesh:WebGapBevelMesh", + "modifier": { + "name": "WebGapBevel", + "profile": 0.35, + "segments": 3, + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "type": "BEVEL", + "typeCode": 24, + "width": 0.2 + } + }, + "operation": "BEVEL_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00032" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00032/bevel-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00032/bevel-modifier-local-exact-report.json new file mode 100644 index 00000000..f702af83 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00032/bevel-modifier-local-exact-report.json @@ -0,0 +1,44 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00032", + "operation": "BEVEL_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00032-modifier-BEVEL.blend", + "sha256": "3a27883c1faf12a8a0281b7c0e9747915784138efb24c0f1680b525cd50b84c7" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00032/bevel-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "meshId": "mesh:WebGapBevelMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "METADATA_ONLY", + "name": "WebGapBevel", + "parameters": { + "flag": 5, + "mode": 3, + "persistentUid": 1277244409, + "profile": 0.3499999940395355, + "segments": 3, + "typeCode": 24, + "width": 0.20000000298023224 + }, + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "type": "BEVEL", + "uuid": "modifier:object:WebGapBevelObject:1277244409" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00033" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00032/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00032/manifest.json new file mode 100644 index 00000000..2bef9c9f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00032/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00032", + "parentTask": "M16-GAP-00031", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "BEVEL_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00031/manifest.json", "sha256": "b2b60b46152a9fcb177ec04166fd096d6e595ba66fc8591959bca91df0729bad"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00032-modifier-BEVEL.blend", "sha256": "3a27883c1faf12a8a0281b7c0e9747915784138efb24c0f1680b525cd50b84c7"}, + "generator": {"path": "tools/web/generated/M16-GAP-00032.py", "sha256": "1af887a0beed22a1eaf199723535e2d1952c7458ea60bf22485c5b433dc17d2d"}, + "desktopChecker": {"path": "tools/web/check-bevel-modifier-desktop.py", "sha256": "abf8dd2a65c48883c8e8ad7c022d06629206f2e55a63184a8e26abc44e678279"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "caac80c57f7e403581a63224419c95625f61ca2ea58984a691396b1b101c306a"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "1f962be51a8201d1d0a119761a51de7864fbda4e553a13dcf7b14f19fbec79db"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "bf5361e4b5e3e2105b59494c548617b463063e64a340398494cde77632b9424c"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "bf5361e4b5e3e2105b59494c548617b463063e64a340398494cde77632b9424c"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00032/bevel-modifier-desktop-report.json", "sha256": "a6e1e88a9e418bb18b2a323285c0d05a07e6c038bf2cf4f7e04bfa188900daf3"}, + "webReport": {"path": "tests/golden/M16-GAP-00032/bevel-modifier-local-exact-report.json", "sha256": "318d68f88e3838fc3920d33a8d1b2995411de39c9c2f39d97e1f2c3b4e7a7c1e"} + }, + "nextTask": "M16-GAP-00033" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00033/boolean-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00033/boolean-modifier-desktop-report.json new file mode 100644 index 00000000..9c03bc60 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00033/boolean-modifier-desktop-report.json @@ -0,0 +1,24 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00033-modifier-BOOLEAN.blend", + "fixtureSha256": "ea909948fb2b92f288684886a3d488f74a707108dc94778e9a78a6cb082cbe38", + "modifier": { + "meshId": "mesh:WebGapBooleanObjectMesh", + "modifier": { + "name": "WebGapBoolean", + "operation": "DIFFERENCE", + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "solver": "EXACT", + "targetObjectId": "object:WebGapBooleanCutter", + "type": "BOOLEAN", + "typeCode": 11 + } + }, + "operation": "BOOLEAN_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00033" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00033/boolean-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00033/boolean-modifier-local-exact-report.json new file mode 100644 index 00000000..21111423 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00033/boolean-modifier-local-exact-report.json @@ -0,0 +1,48 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00033", + "operation": "BOOLEAN_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00033-modifier-BOOLEAN.blend", + "sha256": "ea909948fb2b92f288684886a3d488f74a707108dc94778e9a78a6cb082cbe38" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00033/boolean-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "meshId": "mesh:WebGapBooleanObjectMesh", + "modifier": { + "dependsOn": [ + "object:WebGapBooleanCutter" + ], + "enabled": true, + "evaluationStatus": "METADATA_ONLY", + "name": "WebGapBoolean", + "parameters": { + "flag": 5, + "mode": 3, + "operation": 2, + "persistentUid": 1355493870, + "solver": 1, + "targetObjectIds": [ + "object:WebGapBooleanCutter" + ], + "typeCode": 11 + }, + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "type": "BOOLEAN", + "uuid": "modifier:object:WebGapBooleanObject:1355493870" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00034" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00033/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00033/manifest.json new file mode 100644 index 00000000..33d1816c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00033/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00033", + "parentTask": "M16-GAP-00032", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "BOOLEAN_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00032/manifest.json", "sha256": "6009f0bdb35b49e2cc387cfa6661bde7f155f81c07476ef7d4700e056279f64b"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00033-modifier-BOOLEAN.blend", "sha256": "ea909948fb2b92f288684886a3d488f74a707108dc94778e9a78a6cb082cbe38"}, + "generator": {"path": "tools/web/generated/M16-GAP-00033.py", "sha256": "4eeb3bae0015883cd91ebebed89b78ebd5c7732d3be16ac88561eca87eb5d053"}, + "desktopChecker": {"path": "tools/web/check-boolean-modifier-desktop.py", "sha256": "b84d0c7d6cc1554d59de2a11ce4140d504816fe140e74faf892a5495e8c3905f"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "e0d2371544ac6ed297bc3f13830758c11bfc744cd2697d9ba47c75048d7e7298"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "1f962be51a8201d1d0a119761a51de7864fbda4e553a13dcf7b14f19fbec79db"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "bf5361e4b5e3e2105b59494c548617b463063e64a340398494cde77632b9424c"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "bf5361e4b5e3e2105b59494c548617b463063e64a340398494cde77632b9424c"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00033/boolean-modifier-desktop-report.json", "sha256": "2f0c9dfb183f39a65ef018d1618ef6f12fe05ada0a6c7ff40011491686ea00c7"}, + "webReport": {"path": "tests/golden/M16-GAP-00033/boolean-modifier-local-exact-report.json", "sha256": "aa33f396b5910e3829c1965e62c80bd1267ac764a58862b72be555ebd5bd1b0d"} + }, + "nextTask": "M16-GAP-00034" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00034/build-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00034/build-modifier-desktop-report.json new file mode 100644 index 00000000..6efb8057 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00034/build-modifier-desktop-report.json @@ -0,0 +1,26 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00034-modifier-BUILD.blend", + "fixtureSha256": "46b05aed641ab8cd6cc280587cf9672223190c2b730af8d8c21f1cf98cb68901", + "modifier": { + "meshId": "mesh:WebGapBuildMesh", + "modifier": { + "length": 12.0, + "name": "WebGapBuild", + "randomize": true, + "reverse": true, + "seed": 17, + "showEditMode": true, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "start": 3.0, + "type": "BUILD", + "typeCode": 4 + } + }, + "operation": "BUILD_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00034" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00034/build-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00034/build-modifier-local-exact-report.json new file mode 100644 index 00000000..887ff646 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00034/build-modifier-local-exact-report.json @@ -0,0 +1,45 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00034", + "operation": "BUILD_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00034-modifier-BUILD.blend", + "sha256": "46b05aed641ab8cd6cc280587cf9672223190c2b730af8d8c21f1cf98cb68901" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00034/build-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "meshId": "mesh:WebGapBuildMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "METADATA_ONLY", + "name": "WebGapBuild", + "parameters": { + "flag": 5, + "length": 12, + "mode": 5, + "persistentUid": 421891574, + "randomize": 0, + "seed": 17, + "start": 3, + "typeCode": 4 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "BUILD", + "uuid": "modifier:object:WebGapBuildObject:421891574" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00035" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00034/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00034/manifest.json new file mode 100644 index 00000000..f66d7b74 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00034/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00034", + "parentTask": "M16-GAP-00033", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "BUILD_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00033/manifest.json", "sha256": "5343b375977ea4e9dcfffa023bbcb6313a2a3d2e23b76b35e5b138f60d7f5a29"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00034-modifier-BUILD.blend", "sha256": "46b05aed641ab8cd6cc280587cf9672223190c2b730af8d8c21f1cf98cb68901"}, + "generator": {"path": "tools/web/generated/M16-GAP-00034.py", "sha256": "4523e086c326df712e621a9fdbc54bd29af0d94d241a09c437a247f824bbd8db"}, + "desktopChecker": {"path": "tools/web/check-build-modifier-desktop.py", "sha256": "18bbc10043f8a8820370fb4ea6c5a411398e4622c7956fea20add56f1f8d1087"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "ff620b70f28a4e3c67a2c217929732bbcf43e86a476cccb3ece21c47356adf48"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "1d11bd9ceab05a8937d50b25601829f53c7d827ed7f38577ab1624c118d486e6"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00034/build-modifier-desktop-report.json", "sha256": "b05d06b2408cfa2b0509489434d80489e11d967748f48639d1d50febbcd64974"}, + "webReport": {"path": "tests/golden/M16-GAP-00034/build-modifier-local-exact-report.json", "sha256": "6e5e3f89148decd1996802bddf903ee704700308be90e1af9c3c66e7e58796fa"} + }, + "nextTask": "M16-GAP-00035" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00035/cast-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00035/cast-modifier-desktop-report.json new file mode 100644 index 00000000..df8c5e52 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00035/cast-modifier-desktop-report.json @@ -0,0 +1,27 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00035-modifier-CAST.blend", + "fixtureSha256": "7dfe1faa6b605f6bd394f07c4da96a3e70401eeedd00714b3dbf533d0100ed4e", + "modifier": { + "meshId": "mesh:WebGapCastMesh", + "modifier": { + "castType": "CUBOID", + "factor": 0.65, + "name": "WebGapCast", + "radius": 2.5, + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "type": "CAST", + "typeCode": 17, + "useX": true, + "useY": false, + "useZ": true + } + }, + "operation": "CAST_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00035" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00035/cast-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00035/cast-modifier-local-exact-report.json new file mode 100644 index 00000000..44d3e4ad --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00035/cast-modifier-local-exact-report.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00035", + "operation": "CAST_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00035-modifier-CAST.blend", + "sha256": "7dfe1faa6b605f6bd394f07c4da96a3e70401eeedd00714b3dbf533d0100ed4e" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00035/cast-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "meshId": "mesh:WebGapCastMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "METADATA_ONLY", + "name": "WebGapCast", + "parameters": { + "factor": 0.6499999761581421, + "flag": 5, + "mode": 3, + "persistentUid": 117463478, + "radius": 2.5, + "typeCode": 17 + }, + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "type": "CAST", + "uuid": "modifier:object:WebGapCastObject:117463478" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00036" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00035/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00035/manifest.json new file mode 100644 index 00000000..0ba37ac3 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00035/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00035", + "parentTask": "M16-GAP-00034", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "CAST_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00034/manifest.json", "sha256": "137c50a05af32efdab54974f9f63d980394fff204f1ec39b2f522324f906ace6"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00035-modifier-CAST.blend", "sha256": "7dfe1faa6b605f6bd394f07c4da96a3e70401eeedd00714b3dbf533d0100ed4e"}, + "generator": {"path": "tools/web/generated/M16-GAP-00035.py", "sha256": "24e6f54012d0454bfd6dc99a0fa6fe9fbfd3482781534479cdc1afb461305324"}, + "desktopChecker": {"path": "tools/web/check-cast-modifier-desktop.py", "sha256": "c8a28c4f06077a9649b150cde2537055f64c0b27163b820148ba81e36b49c251"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "6bef66d353d44bbca3317bcac48e9b00d22815d97945216fb201fbf555b88131"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "1d11bd9ceab05a8937d50b25601829f53c7d827ed7f38577ab1624c118d486e6"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00035/cast-modifier-desktop-report.json", "sha256": "46d920371f2b315034286e20db585b5830edde5c12f97470db05141acdfa3975"}, + "webReport": {"path": "tests/golden/M16-GAP-00035/cast-modifier-local-exact-report.json", "sha256": "56d0c12614b99a60617ca6b3aaa8308c103b0d926c67ffa6d374713f1939923c"} + }, + "nextTask": "M16-GAP-00036" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00036/cloth-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00036/cloth-modifier-desktop-report.json new file mode 100644 index 00000000..a73ced86 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00036/cloth-modifier-desktop-report.json @@ -0,0 +1,21 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00036-modifier-CLOTH.blend", + "fixtureSha256": "c2da02610f891f4de38f3b8d55929a599c84528d3c67317a8e698854367d2d74", + "modifier": { + "meshId": "mesh:WebGapClothMesh", + "modifier": { + "name": "WebGapCloth", + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "type": "CLOTH", + "typeCode": 22 + } + }, + "operation": "CLOTH_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00036" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00036/cloth-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00036/cloth-modifier-local-exact-report.json new file mode 100644 index 00000000..1ea6af31 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00036/cloth-modifier-local-exact-report.json @@ -0,0 +1,41 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00036", + "operation": "CLOTH_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00036-modifier-CLOTH.blend", + "sha256": "c2da02610f891f4de38f3b8d55929a599c84528d3c67317a8e698854367d2d74" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00036/cloth-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "meshId": "mesh:WebGapClothMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "BLOCKED", + "name": "WebGapCloth", + "parameters": { + "flag": 5, + "mode": 3, + "persistentUid": 2008667047, + "typeCode": 22 + }, + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "type": "CLOTH", + "uuid": "modifier:object:WebGapClothObject:2008667047" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00037" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00036/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00036/manifest.json new file mode 100644 index 00000000..1b234dff --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00036/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00036", + "parentTask": "M16-GAP-00035", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "CLOTH_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00035/manifest.json", "sha256": "ed79f18df0fdd6e0ee1960df56f70801bc81a604659d4f1349c3f68705912d6d"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00036-modifier-CLOTH.blend", "sha256": "c2da02610f891f4de38f3b8d55929a599c84528d3c67317a8e698854367d2d74"}, + "generator": {"path": "tools/web/generated/M16-GAP-00036.py", "sha256": "219d0f2ecc7b67050865a46163e64cf7b28de75ce5c8cc52cdcf3a32817bd093"}, + "desktopChecker": {"path": "tools/web/check-cloth-modifier-desktop.py", "sha256": "308e449c9d896a870f33c8eb15fb6604a4fe7a22f646d754d356d5bc55fd94dc"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "6e6a8eff5d7d90d043e530802c76ae5607210de95ff603e95cf3e48f018f830e"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "1d11bd9ceab05a8937d50b25601829f53c7d827ed7f38577ab1624c118d486e6"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00036/cloth-modifier-desktop-report.json", "sha256": "bcfa83207cc5d5d6d971c41d8bb649d272c7e8f03e7499dc0efa4f3bbcb4d1ef"}, + "webReport": {"path": "tests/golden/M16-GAP-00036/cloth-modifier-local-exact-report.json", "sha256": "37344e3d5c930fb6815016b03432a6f86a2e763a89546e2e435e0f957f99270a"} + }, + "nextTask": "M16-GAP-00037" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00037/collision-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00037/collision-modifier-desktop-report.json new file mode 100644 index 00000000..ea390e4a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00037/collision-modifier-desktop-report.json @@ -0,0 +1,21 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00037-modifier-COLLISION.blend", + "fixtureSha256": "20cd128c83e9729377864f496c85393a2090c72a22f7d1c0b15f834293100764", + "modifier": { + "meshId": "mesh:WebGapCollisionMesh", + "modifier": { + "name": "WebGapCollision", + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "type": "COLLISION", + "typeCode": 23 + } + }, + "operation": "COLLISION_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00037" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00037/collision-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00037/collision-modifier-local-exact-report.json new file mode 100644 index 00000000..16f7bfbf --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00037/collision-modifier-local-exact-report.json @@ -0,0 +1,41 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00037", + "operation": "COLLISION_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00037-modifier-COLLISION.blend", + "sha256": "20cd128c83e9729377864f496c85393a2090c72a22f7d1c0b15f834293100764" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00037/collision-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "meshId": "mesh:WebGapCollisionMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "BLOCKED", + "name": "WebGapCollision", + "parameters": { + "flag": 5, + "mode": 3, + "persistentUid": 955736860, + "typeCode": 23 + }, + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "type": "COLLISION", + "uuid": "modifier:object:WebGapCollisionObject:955736860" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00038" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00037/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00037/manifest.json new file mode 100644 index 00000000..a2a250d7 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00037/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00037", + "parentTask": "M16-GAP-00036", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "COLLISION_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00036/manifest.json", "sha256": "8b451d833ea14dbac429a03f4c552ca82c16c3baba378d988d30d12f3e951a86"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00037-modifier-COLLISION.blend", "sha256": "20cd128c83e9729377864f496c85393a2090c72a22f7d1c0b15f834293100764"}, + "generator": {"path": "tools/web/generated/M16-GAP-00037.py", "sha256": "b96eb3c62c590e55be3e442757a40c30b3b9c1deb8abc67d71f61b00b9c61fc1"}, + "desktopChecker": {"path": "tools/web/check-collision-modifier-desktop.py", "sha256": "21d816a1c929b96c873d15a719ee79187ba7201d79740a2ba9ccf81e4e566a32"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "ca0e546f0c8f7a7a0d209d7a4e97de38d78fc7dccfdf50d35dd772123533bad4"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "1d11bd9ceab05a8937d50b25601829f53c7d827ed7f38577ab1624c118d486e6"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00037/collision-modifier-desktop-report.json", "sha256": "be458864a8ce628d18002e69cbba9d524377fadff0bb7a3c3a6ed07a6fcb6bc0"}, + "webReport": {"path": "tests/golden/M16-GAP-00037/collision-modifier-local-exact-report.json", "sha256": "3352147756f312df1ffb4b9c889347e74403147cafb770128c6fbd61810acc8a"} + }, + "nextTask": "M16-GAP-00038" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00038/corrective-smooth-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00038/corrective-smooth-modifier-desktop-report.json new file mode 100644 index 00000000..34747eef --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00038/corrective-smooth-modifier-desktop-report.json @@ -0,0 +1,22 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00038-modifier-CORRECTIVE_SMOOTH.blend", + "fixtureSha256": "059890c5b228851c6e32643e71a142523cb1c0f02726a72902a6b88e24e71fbf", + "modifier": { + "meshId": "mesh:WebGapCorrectiveSmoothObjectMesh", + "modifier": { + "name": "WebGapCorrectiveSmooth", + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "type": "CORRECTIVE_SMOOTH", + "typeCode": 51 + }, + "task": "M16-GAP-00038" + }, + "operation": "CORRECTIVE_SMOOTH_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00038" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00038/corrective-smooth-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00038/corrective-smooth-modifier-local-exact-report.json new file mode 100644 index 00000000..3f3d11dc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00038/corrective-smooth-modifier-local-exact-report.json @@ -0,0 +1,41 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00038", + "operation": "CORRECTIVE_SMOOTH_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00038-modifier-CORRECTIVE_SMOOTH.blend", + "sha256": "059890c5b228851c6e32643e71a142523cb1c0f02726a72902a6b88e24e71fbf" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00038/corrective-smooth-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "meshId": "mesh:WebGapCorrectiveSmoothObjectMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "BLOCKED", + "name": "WebGapCorrectiveSmooth", + "parameters": { + "flag": 5, + "mode": 3, + "persistentUid": 697597798, + "typeCode": 51 + }, + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "type": "CORRECTIVE_SMOOTH", + "uuid": "modifier:object:WebGapCorrectiveSmoothObject:697597798" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00039" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00038/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00038/manifest.json new file mode 100644 index 00000000..9f42ba09 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00038/manifest.json @@ -0,0 +1,26 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00038", + "parentTask": "M16-GAP-00037", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "CORRECTIVE_SMOOTH_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00037/manifest.json", "sha256": "a4506659340af52a0ede5af619362e5a3c07463a2718cb7cdc64f97647145d71"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00038-modifier-CORRECTIVE_SMOOTH.blend", "sha256": "059890c5b228851c6e32643e71a142523cb1c0f02726a72902a6b88e24e71fbf"}, + "generator": {"path": "tools/web/generated/M16-GAP-00038.py", "sha256": "e0726e2db3c360e0397d6aa1d480a63e5f4800c381c9d4e1cde33e36ebc0a5dc"}, + "fixtureHelper": {"path": "tools/web/generated/modifier_gap_fixture.py", "sha256": "85d5bc91e433a402099aeefccb5bed1a3711c88ea3484ac6083ce45a6c4517aa"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "d548079159b6680090c29cd344d846aef39fea32bca09cc698531b0de0a2bb68"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "2ecbf4c74f335a96772479742407d51926fc476416e7d3cff9aace9ae74ceb91"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "1d11bd9ceab05a8937d50b25601829f53c7d827ed7f38577ab1624c118d486e6"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00038/corrective-smooth-modifier-desktop-report.json", "sha256": "81b0dac10d007f32a7ccd1939fb82494ad230cfd09a5d5e3d9051716631a6012"}, + "webReport": {"path": "tests/golden/M16-GAP-00038/corrective-smooth-modifier-local-exact-report.json", "sha256": "e0f51299b53f2694cc0421d249acc633d6d3db07d2302d1358927aab15981d0b"} + }, + "nextTask": "M16-GAP-00039" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00039/curve-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00039/curve-modifier-desktop-report.json new file mode 100644 index 00000000..905ab541 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00039/curve-modifier-desktop-report.json @@ -0,0 +1,22 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00039-modifier-CURVE.blend", + "fixtureSha256": "b68aa51151cf19b1795701967eb1fa514387c04b967c646547ed33a727a8a58a", + "modifier": { + "meshId": "mesh:WebGapCurveModifierObjectMesh", + "modifier": { + "name": "WebGapCurveModifier", + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "type": "CURVE", + "typeCode": 3 + }, + "task": "M16-GAP-00039" + }, + "operation": "CURVE_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00039" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00039/curve-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00039/curve-modifier-local-exact-report.json new file mode 100644 index 00000000..8e241af4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00039/curve-modifier-local-exact-report.json @@ -0,0 +1,44 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00039", + "operation": "CURVE_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00039-modifier-CURVE.blend", + "sha256": "b68aa51151cf19b1795701967eb1fa514387c04b967c646547ed33a727a8a58a" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00039/curve-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "meshId": "mesh:WebGapCurveModifierObjectMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "METADATA_ONLY", + "name": "WebGapCurveModifier", + "parameters": { + "curveFlags": 0, + "deformAxis": 1, + "flag": 5, + "mode": 3, + "persistentUid": 1954521455, + "typeCode": 3, + "vertexGroup": "" + }, + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "type": "CURVE", + "uuid": "modifier:object:WebGapCurveModifierObject:1954521455" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00040" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00039/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00039/manifest.json new file mode 100644 index 00000000..ae3fe0be --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00039/manifest.json @@ -0,0 +1,26 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00039", + "parentTask": "M16-GAP-00038", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "CURVE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00038/manifest.json", "sha256": "047c4cd2a500a80e4be02ad2f55d796b03609f9327090e4369225f6aba4fbf6e"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00039-modifier-CURVE.blend", "sha256": "b68aa51151cf19b1795701967eb1fa514387c04b967c646547ed33a727a8a58a"}, + "generator": {"path": "tools/web/generated/M16-GAP-00039.py", "sha256": "3709078f49c92c34424c6e47d7f8870ba81c0bc2765bb5522199adfd4231e8e5"}, + "fixtureHelper": {"path": "tools/web/generated/modifier_gap_fixture.py", "sha256": "85d5bc91e433a402099aeefccb5bed1a3711c88ea3484ac6083ce45a6c4517aa"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "d548079159b6680090c29cd344d846aef39fea32bca09cc698531b0de0a2bb68"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "ed94ef09c48453aecea597074d9e28e48abb5c99f6967d26f5c70f1e462b9d9e"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "1d11bd9ceab05a8937d50b25601829f53c7d827ed7f38577ab1624c118d486e6"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00039/curve-modifier-desktop-report.json", "sha256": "7758f93e53d1b01a80e7cc2d4ce4948cadfb6882a2eec0d34e7e9fbdc7ac69bf"}, + "webReport": {"path": "tests/golden/M16-GAP-00039/curve-modifier-local-exact-report.json", "sha256": "7b3cf6ec8eec1a1b0c8d630578bfa09b29d8e8597ed860aa98737e7c7798cf91"} + }, + "nextTask": "M16-GAP-00040" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00040/data-transfer-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00040/data-transfer-modifier-desktop-report.json new file mode 100644 index 00000000..869c5dfb --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00040/data-transfer-modifier-desktop-report.json @@ -0,0 +1,22 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00040-modifier-DATA_TRANSFER.blend", + "fixtureSha256": "5cbcab6db651f6b44387e6688cf02a8813aeeccb07e6fdc5fbb6e4ac34da050b", + "modifier": { + "meshId": "mesh:WebGapDataTransferObjectMesh", + "modifier": { + "name": "WebGapDataTransfer", + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "type": "DATA_TRANSFER", + "typeCode": 49 + }, + "task": "M16-GAP-00040" + }, + "operation": "DATA_TRANSFER_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00040" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00040/data-transfer-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00040/data-transfer-modifier-local-exact-report.json new file mode 100644 index 00000000..b8c1022c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00040/data-transfer-modifier-local-exact-report.json @@ -0,0 +1,41 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00040", + "operation": "DATA_TRANSFER_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00040-modifier-DATA_TRANSFER.blend", + "sha256": "5cbcab6db651f6b44387e6688cf02a8813aeeccb07e6fdc5fbb6e4ac34da050b" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00040/data-transfer-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "meshId": "mesh:WebGapDataTransferObjectMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "BLOCKED", + "name": "WebGapDataTransfer", + "parameters": { + "flag": 5, + "mode": 3, + "persistentUid": 864389176, + "typeCode": 49 + }, + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "type": "DATA_TRANSFER", + "uuid": "modifier:object:WebGapDataTransferObject:864389176" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00041" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00040/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00040/manifest.json new file mode 100644 index 00000000..da1a3582 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00040/manifest.json @@ -0,0 +1,26 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00040", + "parentTask": "M16-GAP-00039", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "DATA_TRANSFER_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00039/manifest.json", "sha256": "4f85c33a57e35c628ce8bf041bdf30df37e298de9cc961c93c969e8bfbb0e276"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00040-modifier-DATA_TRANSFER.blend", "sha256": "5cbcab6db651f6b44387e6688cf02a8813aeeccb07e6fdc5fbb6e4ac34da050b"}, + "generator": {"path": "tools/web/generated/M16-GAP-00040.py", "sha256": "62aec1123186b57c5e1ffa58eea9833ea5d996a7509d49473331ac5f1843be44"}, + "fixtureHelper": {"path": "tools/web/generated/modifier_gap_fixture.py", "sha256": "85d5bc91e433a402099aeefccb5bed1a3711c88ea3484ac6083ce45a6c4517aa"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "d548079159b6680090c29cd344d846aef39fea32bca09cc698531b0de0a2bb68"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "6fd4494c21de3c807d31e244de8361156f5bd0a69b10529e3c80accc6a8743bd"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "1d11bd9ceab05a8937d50b25601829f53c7d827ed7f38577ab1624c118d486e6"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00040/data-transfer-modifier-desktop-report.json", "sha256": "3b75a6318947c1c18b04af6a05bc275aac4f6fde4352cc249c431c64fde7174d"}, + "webReport": {"path": "tests/golden/M16-GAP-00040/data-transfer-modifier-local-exact-report.json", "sha256": "45c8b9c2b0a07902e7680fc44b648cd0fc349e4a248c52824c3ed70debb0c9a1"} + }, + "nextTask": "M16-GAP-00041" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00041/decimate-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00041/decimate-modifier-desktop-report.json new file mode 100644 index 00000000..66d3395c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00041/decimate-modifier-desktop-report.json @@ -0,0 +1,27 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00041-modifier-DECIMATE.blend", + "fixtureSha256": "24161163630d29eedb3dd194070dff9b5a4f762f8a0ce4889b9e6a5310e54153", + "modifier": { + "meshId": "mesh:WebGapDecimateObjectMesh", + "modifier": { + "angleLimit": 0.4000000059604645, + "decimateMode": 0, + "decimateType": "COLLAPSE", + "iterations": 2, + "name": "WebGapDecimate", + "ratio": 0.6499999761581421, + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "type": "DECIMATE", + "typeCode": 6 + }, + "task": "M16-GAP-00041" + }, + "operation": "DECIMATE_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00041" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00041/decimate-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00041/decimate-modifier-local-exact-report.json new file mode 100644 index 00000000..332ecc7d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00041/decimate-modifier-local-exact-report.json @@ -0,0 +1,47 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00041", + "operation": "DECIMATE_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00041-modifier-DECIMATE.blend", + "sha256": "24161163630d29eedb3dd194070dff9b5a4f762f8a0ce4889b9e6a5310e54153" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00041/decimate-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "meshId": "mesh:WebGapDecimateObjectMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "METADATA_ONLY", + "name": "WebGapDecimate", + "parameters": { + "angleLimit": 0.4000000059604645, + "decimateMode": 0, + "delimit": 0, + "flag": 5, + "iterations": 2, + "mode": 3, + "persistentUid": 559072788, + "ratio": 0.6499999761581421, + "symmetryAxis": 0, + "typeCode": 6 + }, + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "type": "DECIMATE", + "uuid": "modifier:object:WebGapDecimateObject:559072788" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00042" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00041/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00041/manifest.json new file mode 100644 index 00000000..ab7d8af8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00041/manifest.json @@ -0,0 +1,26 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00041", + "parentTask": "M16-GAP-00040", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "DECIMATE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00040/manifest.json", "sha256": "115064d3b16a2b8b36e19a8d92b4c3a4dd761c76ec57d67a803a66b02b2b03d8"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00041-modifier-DECIMATE.blend", "sha256": "24161163630d29eedb3dd194070dff9b5a4f762f8a0ce4889b9e6a5310e54153"}, + "generator": {"path": "tools/web/generated/M16-GAP-00041.py", "sha256": "241568c40f9308d09a1d33d87b47bb2549204f28820901133b778b640f086ec2"}, + "fixtureHelper": {"path": "tools/web/generated/modifier_gap_fixture.py", "sha256": "85d5bc91e433a402099aeefccb5bed1a3711c88ea3484ac6083ce45a6c4517aa"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "95ba2c90e7126cc762703f12522362407027af84194b3c8ebd32caf1301b14b7"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "65c14296176456e1b8452569ad2cd5e0877587d6b0879e70cd9ed7188ad4fc02"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "1d11bd9ceab05a8937d50b25601829f53c7d827ed7f38577ab1624c118d486e6"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00041/decimate-modifier-desktop-report.json", "sha256": "a056e81f2d0dceca465b185060d9874f4e0a10099b0820a42e50de3c20f56433"}, + "webReport": {"path": "tests/golden/M16-GAP-00041/decimate-modifier-local-exact-report.json", "sha256": "ac3efd1614cd440aff79d370f61a8243a69feac82d9aa4afb2c2d2ac2196d811"} + }, + "nextTask": "M16-GAP-00042" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00042/displace-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00042/displace-modifier-desktop-report.json new file mode 100644 index 00000000..f8bcc09a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00042/displace-modifier-desktop-report.json @@ -0,0 +1,27 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00042-modifier-DISPLACE.blend", + "fixtureSha256": "d6314c42a4bccfe4ff125bf19570bd8b52eb196f3cd3dfc82fcad21a5390ba76", + "modifier": { + "meshId": "mesh:WebGapDisplaceObjectMesh", + "modifier": { + "direction": 2, + "midLevel": 0.25, + "name": "WebGapDisplace", + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "space": 0, + "strength": 0.75, + "textureMapping": 1, + "type": "DISPLACE", + "typeCode": 14 + }, + "task": "M16-GAP-00042" + }, + "operation": "DISPLACE_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00042" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00042/displace-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00042/displace-modifier-local-exact-report.json new file mode 100644 index 00000000..222f0dcc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00042/displace-modifier-local-exact-report.json @@ -0,0 +1,47 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00042", + "operation": "DISPLACE_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00042-modifier-DISPLACE.blend", + "sha256": "d6314c42a4bccfe4ff125bf19570bd8b52eb196f3cd3dfc82fcad21a5390ba76" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00042/displace-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "meshId": "mesh:WebGapDisplaceObjectMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "METADATA_ONLY", + "name": "WebGapDisplace", + "parameters": { + "direction": 2, + "flag": 5, + "midLevel": 0.25, + "mode": 3, + "persistentUid": 44964863, + "space": 0, + "strength": 0.75, + "textureMapping": 1, + "typeCode": 14, + "vertexGroup": "" + }, + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "type": "DISPLACE", + "uuid": "modifier:object:WebGapDisplaceObject:44964863" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00043" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00042/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00042/manifest.json new file mode 100644 index 00000000..75c2176c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00042/manifest.json @@ -0,0 +1,26 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00042", + "parentTask": "M16-GAP-00041", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "DISPLACE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00041/manifest.json", "sha256": "02591ee5f0094ba2c027fa4349effa0e1d731305467d005e474c14b2292b5b8a"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00042-modifier-DISPLACE.blend", "sha256": "d6314c42a4bccfe4ff125bf19570bd8b52eb196f3cd3dfc82fcad21a5390ba76"}, + "generator": {"path": "tools/web/generated/M16-GAP-00042.py", "sha256": "b9ed8fdb43f5b4b7b1830881db7c770432f0023627429ffe51989e16b2f09746"}, + "fixtureHelper": {"path": "tools/web/generated/modifier_gap_fixture.py", "sha256": "85d5bc91e433a402099aeefccb5bed1a3711c88ea3484ac6083ce45a6c4517aa"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "daf88b0692e1decb4799d8b93f96ec91a6e3f4abc30e56b6b0a414173b60d712"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "5f00762a7267b62865071874213492a0fd11fb15c2e0e90b14890bbadf254a00"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "1d11bd9ceab05a8937d50b25601829f53c7d827ed7f38577ab1624c118d486e6"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00042/displace-modifier-desktop-report.json", "sha256": "8b5e69f2643e33607c36c6e786477d13c962eb041f64044be4b5d1277b2ad4a3"}, + "webReport": {"path": "tests/golden/M16-GAP-00042/displace-modifier-local-exact-report.json", "sha256": "f29ae1fd8d9dd004194347d9ab9d138d9c10db71ffae8baba554748de835fe09"} + }, + "nextTask": "M16-GAP-00043" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00043/dynamic-paint-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00043/dynamic-paint-modifier-desktop-report.json new file mode 100644 index 00000000..794e0205 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00043/dynamic-paint-modifier-desktop-report.json @@ -0,0 +1,22 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00043-modifier-DYNAMIC_PAINT.blend", + "fixtureSha256": "f715974fc528ade28e3658a9468a36ba2ac8605f009c284ada97de3dec5091f1", + "modifier": { + "meshId": "mesh:WebGapDynamicPaintObjectMesh", + "modifier": { + "name": "WebGapDynamicPaint", + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "type": "DYNAMIC_PAINT", + "typeCode": 40 + }, + "task": "M16-GAP-00043" + }, + "operation": "DYNAMIC_PAINT_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00043" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00043/dynamic-paint-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00043/dynamic-paint-modifier-local-exact-report.json new file mode 100644 index 00000000..5c76d52c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00043/dynamic-paint-modifier-local-exact-report.json @@ -0,0 +1,41 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00043", + "operation": "DYNAMIC_PAINT_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00043-modifier-DYNAMIC_PAINT.blend", + "sha256": "f715974fc528ade28e3658a9468a36ba2ac8605f009c284ada97de3dec5091f1" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00043/dynamic-paint-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "meshId": "mesh:WebGapDynamicPaintObjectMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "BLOCKED", + "name": "WebGapDynamicPaint", + "parameters": { + "flag": 5, + "mode": 3, + "persistentUid": 1142069749, + "typeCode": 40 + }, + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "type": "DYNAMIC_PAINT", + "uuid": "modifier:object:WebGapDynamicPaintObject:1142069749" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00044" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00043/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00043/manifest.json new file mode 100644 index 00000000..05ca32c6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00043/manifest.json @@ -0,0 +1,26 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00043", + "parentTask": "M16-GAP-00042", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "DYNAMIC_PAINT_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00042/manifest.json", "sha256": "2420cf04248b07c100bd5421cdd127f4efd86eae3dccf41b12620f056d7423b6"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00043-modifier-DYNAMIC_PAINT.blend", "sha256": "f715974fc528ade28e3658a9468a36ba2ac8605f009c284ada97de3dec5091f1"}, + "generator": {"path": "tools/web/generated/M16-GAP-00043.py", "sha256": "1fb842dde99a67cda98ec4a6feb139216ad277388b490ff65699e9f742ae095a"}, + "fixtureHelper": {"path": "tools/web/generated/modifier_gap_fixture.py", "sha256": "85d5bc91e433a402099aeefccb5bed1a3711c88ea3484ac6083ce45a6c4517aa"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "daf88b0692e1decb4799d8b93f96ec91a6e3f4abc30e56b6b0a414173b60d712"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "b87a00aae0be7c60980a80b2273cb2a2a93bc684b2666217ab7e3dee0cef2af3"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "1d11bd9ceab05a8937d50b25601829f53c7d827ed7f38577ab1624c118d486e6"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00043/dynamic-paint-modifier-desktop-report.json", "sha256": "d15d596c1c2fbf176c59b7fb933f6a2ceeb09ff578ba2cf894c12deec480471b"}, + "webReport": {"path": "tests/golden/M16-GAP-00043/dynamic-paint-modifier-local-exact-report.json", "sha256": "e04b9f0427010f85ffd5119eeb2d926ad0fa5d7099c67807ba46b6e66db5b0f3"} + }, + "nextTask": "M16-GAP-00044" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00044/edge-split-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00044/edge-split-modifier-desktop-report.json new file mode 100644 index 00000000..1d6b8816 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00044/edge-split-modifier-desktop-report.json @@ -0,0 +1,23 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00044-modifier-EDGE_SPLIT.blend", + "fixtureSha256": "825b593e3792dbb69379ae5d83713226fe8818317c1b68285a19e9070bd76bae", + "modifier": { + "meshId": "mesh:WebGapEdgeSplitObjectMesh", + "modifier": { + "name": "WebGapEdgeSplit", + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "splitAngle": 0.3499999940395355, + "type": "EDGE_SPLIT", + "typeCode": 13 + }, + "task": "M16-GAP-00044" + }, + "operation": "EDGE_SPLIT_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00044" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00044/edge-split-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00044/edge-split-modifier-local-exact-report.json new file mode 100644 index 00000000..51f81e88 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00044/edge-split-modifier-local-exact-report.json @@ -0,0 +1,42 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00044", + "operation": "EDGE_SPLIT_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00044-modifier-EDGE_SPLIT.blend", + "sha256": "825b593e3792dbb69379ae5d83713226fe8818317c1b68285a19e9070bd76bae" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00044/edge-split-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "meshId": "mesh:WebGapEdgeSplitObjectMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "METADATA_ONLY", + "name": "WebGapEdgeSplit", + "parameters": { + "flag": 5, + "mode": 3, + "persistentUid": 1204352453, + "splitAngle": 0.3499999940395355, + "typeCode": 13 + }, + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "type": "EDGE_SPLIT", + "uuid": "modifier:object:WebGapEdgeSplitObject:1204352453" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00045" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00044/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00044/manifest.json new file mode 100644 index 00000000..4037433e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00044/manifest.json @@ -0,0 +1,26 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00044", + "parentTask": "M16-GAP-00043", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "EDGE_SPLIT_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00043/manifest.json", "sha256": "5ad7947dc7e6fd971965a5fa6945875ee2d61325e81b9e600542a3048b3f61a9"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00044-modifier-EDGE_SPLIT.blend", "sha256": "825b593e3792dbb69379ae5d83713226fe8818317c1b68285a19e9070bd76bae"}, + "generator": {"path": "tools/web/generated/M16-GAP-00044.py", "sha256": "835413a7f88c4f2eb6b508d1913f1eb20489b8b5b1b1c35bceb2d094ee4f7292"}, + "fixtureHelper": {"path": "tools/web/generated/modifier_gap_fixture.py", "sha256": "85d5bc91e433a402099aeefccb5bed1a3711c88ea3484ac6083ce45a6c4517aa"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "0a7b1676dd3b1b3d944c971acd4518cc2a7f83004fb231560a1a622ef2d23043"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "567ff6cd2cc5508903e94b7979f831b2098276349138d804d4bd5b82e8d3a2a5"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "1d11bd9ceab05a8937d50b25601829f53c7d827ed7f38577ab1624c118d486e6"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00044/edge-split-modifier-desktop-report.json", "sha256": "4f741f923ed60af4142691643fb70cd650b3e7c12507002595d8f52d78a41a61"}, + "webReport": {"path": "tests/golden/M16-GAP-00044/edge-split-modifier-local-exact-report.json", "sha256": "114e41e7c6f3238d4888b61f2d9fd59b37d4a9a4f2f7485fd1a9b9a48c8ba9ac"} + }, + "nextTask": "M16-GAP-00045" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00045/explode-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00045/explode-modifier-desktop-report.json new file mode 100644 index 00000000..fbe652d8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00045/explode-modifier-desktop-report.json @@ -0,0 +1,22 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00045-modifier-EXPLODE.blend", + "fixtureSha256": "f05a2ee7c15544e1b39de2a35fd6eee19a31deb821ca56fc642418c939e28b12", + "modifier": { + "meshId": "mesh:WebGapExplodeObjectMesh", + "modifier": { + "name": "WebGapExplode", + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "type": "EXPLODE", + "typeCode": 21 + }, + "task": "M16-GAP-00045" + }, + "operation": "EXPLODE_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00045" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00045/explode-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00045/explode-modifier-local-exact-report.json new file mode 100644 index 00000000..55bd1315 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00045/explode-modifier-local-exact-report.json @@ -0,0 +1,41 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00045", + "operation": "EXPLODE_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00045-modifier-EXPLODE.blend", + "sha256": "f05a2ee7c15544e1b39de2a35fd6eee19a31deb821ca56fc642418c939e28b12" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00045/explode-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "meshId": "mesh:WebGapExplodeObjectMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "BLOCKED", + "name": "WebGapExplode", + "parameters": { + "flag": 5, + "mode": 3, + "persistentUid": 1886000045, + "typeCode": 21 + }, + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "type": "EXPLODE", + "uuid": "modifier:object:WebGapExplodeObject:1886000045" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00046" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00045/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00045/manifest.json new file mode 100644 index 00000000..36b0f596 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00045/manifest.json @@ -0,0 +1,26 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00045", + "parentTask": "M16-GAP-00044", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "EXPLODE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00044/manifest.json", "sha256": "ff007eb22d3a362fc0284cd60b90e2bec3257822d04bdc3eb46fca872d8a1ea5"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00045-modifier-EXPLODE.blend", "sha256": "f05a2ee7c15544e1b39de2a35fd6eee19a31deb821ca56fc642418c939e28b12"}, + "generator": {"path": "tools/web/generated/M16-GAP-00045.py", "sha256": "ac5a0a3c7a0a842a12499f06336700e0b17923619f27ce3872f6f05f299508ad"}, + "fixtureHelper": {"path": "tools/web/generated/modifier_gap_fixture.py", "sha256": "85d5bc91e433a402099aeefccb5bed1a3711c88ea3484ac6083ce45a6c4517aa"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "0a7b1676dd3b1b3d944c971acd4518cc2a7f83004fb231560a1a622ef2d23043"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "f3eb255f54ff6bf5298022daea73e554722d3b7d47515abc1e29604bf96530c3"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "1d11bd9ceab05a8937d50b25601829f53c7d827ed7f38577ab1624c118d486e6"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00045/explode-modifier-desktop-report.json", "sha256": "6f2da8d3cc19177ceedef1e31d2ddd2bb73e061a40164393fb717050b442b43c"}, + "webReport": {"path": "tests/golden/M16-GAP-00045/explode-modifier-local-exact-report.json", "sha256": "fdd2bfc6407872afbb3f1393b79c1d551f030f485ce4169863b07742c994122f"} + }, + "nextTask": "M16-GAP-00046" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00046/fluid-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00046/fluid-modifier-desktop-report.json new file mode 100644 index 00000000..98e46b8d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00046/fluid-modifier-desktop-report.json @@ -0,0 +1,22 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00046-modifier-FLUID.blend", + "fixtureSha256": "e5061df121df88e723c87360ab0ccef630ada11c31183f11d6ee17114ad70690", + "modifier": { + "meshId": "mesh:WebGapFluidObjectMesh", + "modifier": { + "name": "WebGapFluid", + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "type": "FLUID", + "typeCode": 56 + }, + "task": "M16-GAP-00046" + }, + "operation": "FLUID_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00046" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00046/fluid-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00046/fluid-modifier-local-exact-report.json new file mode 100644 index 00000000..bba62e81 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00046/fluid-modifier-local-exact-report.json @@ -0,0 +1,41 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00046", + "operation": "FLUID_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00046-modifier-FLUID.blend", + "sha256": "e5061df121df88e723c87360ab0ccef630ada11c31183f11d6ee17114ad70690" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00046/fluid-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "meshId": "mesh:WebGapFluidObjectMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "BLOCKED", + "name": "WebGapFluid", + "parameters": { + "flag": 5, + "mode": 3, + "persistentUid": 874629360, + "typeCode": 56 + }, + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "type": "FLUID", + "uuid": "modifier:object:WebGapFluidObject:874629360" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00047" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00046/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00046/manifest.json new file mode 100644 index 00000000..47f51d69 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00046/manifest.json @@ -0,0 +1,26 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00046", + "parentTask": "M16-GAP-00045", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "FLUID_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00045/manifest.json", "sha256": "a6a63c7ede70a0716a49bd5ef0bf4ee23e11586c953f8b7e6a06530a73618177"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00046-modifier-FLUID.blend", "sha256": "e5061df121df88e723c87360ab0ccef630ada11c31183f11d6ee17114ad70690"}, + "generator": {"path": "tools/web/generated/M16-GAP-00046.py", "sha256": "16cc612933b0c0137b4b986d4807ce12f838bae52457e941fd53f79c48677cab"}, + "fixtureHelper": {"path": "tools/web/generated/modifier_gap_fixture.py", "sha256": "85d5bc91e433a402099aeefccb5bed1a3711c88ea3484ac6083ce45a6c4517aa"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "0a7b1676dd3b1b3d944c971acd4518cc2a7f83004fb231560a1a622ef2d23043"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "4f4a40b65293d712b9cafc675d579121b14659072d7c7cdf44ea5da6b0b4c6ce"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "1d11bd9ceab05a8937d50b25601829f53c7d827ed7f38577ab1624c118d486e6"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "91c06755b48b8b7a42277e55d32790b8ed52fa781e8b17d1b3c02ab71b9fcbb8"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00046/fluid-modifier-desktop-report.json", "sha256": "5e2140d9a0e8089c6fe1f31f34bfe7fa8473f642556051598436cb78636d451b"}, + "webReport": {"path": "tests/golden/M16-GAP-00046/fluid-modifier-local-exact-report.json", "sha256": "3e0adc749a8f15c52231fdd37afd01246b21d0c5630be569a0756b4f7d05194c"} + }, + "nextTask": "M16-GAP-00047" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00047/grease-pencil-armature-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00047/grease-pencil-armature-modifier-desktop-report.json new file mode 100644 index 00000000..7ef4d18a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00047/grease-pencil-armature-modifier-desktop-report.json @@ -0,0 +1,22 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00047-modifier-GREASE_PENCIL_ARMATURE.blend", + "fixtureSha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "modifier": { + "modifier": { + "name": "Gp Armature", + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_ARMATURE", + "typeCode": 79 + }, + "objectId": "object:GreasePencilObject", + "task": "M16-GAP-00047" + }, + "operation": "GREASE_PENCIL_ARMATURE_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00047" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00047/grease-pencil-armature-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00047/grease-pencil-armature-modifier-local-exact-report.json new file mode 100644 index 00000000..c033a917 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00047/grease-pencil-armature-modifier-local-exact-report.json @@ -0,0 +1,41 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00047", + "operation": "GREASE_PENCIL_ARMATURE_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00047-modifier-GREASE_PENCIL_ARMATURE.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00047/grease-pencil-armature-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:GreasePencilObject", + "modifier": { + "dependsOn": [], + "enabled": false, + "evaluationStatus": "BLOCKED", + "name": "Gp Armature", + "parameters": { + "flag": 1, + "mode": 6, + "persistentUid": 312629205, + "typeCode": 79 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_ARMATURE", + "uuid": "modifier:object:GreasePencilObject:312629205" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00048" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00047/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00047/manifest.json new file mode 100644 index 00000000..0192cc69 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00047/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00047", + "parentTask": "M16-GAP-00046", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_ARMATURE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00046/manifest.json", "sha256": "4430ac4a19fcfea771b6a688ac0b59e5ed6f477ad086effa9df8ec66189ff059"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00047-modifier-GREASE_PENCIL_ARMATURE.blend", "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401"}, + "generator": {"path": "tools/web/generated/M16-GAP-00047.py", "sha256": "d107f117b147b955027c694f6a82147e64a931dbb57e8ce0425ade9cbc9a1d99"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "28ae36eb491838ca2657682ba8681d8635e3f8d953195e3be8e528d4c9e394c3"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00047/grease-pencil-armature-modifier-desktop-report.json", "sha256": "aaa319ab7fc68ba6763c29b97659cb3a4f71425df5edd93dbd9aa5b998e96c1a"}, + "webReport": {"path": "tests/golden/M16-GAP-00047/grease-pencil-armature-modifier-local-exact-report.json", "sha256": "0e343bf170e7cb7c0b61a20308a7034f3ced1572580c4f94074e162e14bfcf43"} + }, + "nextTask": "M16-GAP-00048" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00048/grease-pencil-array-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00048/grease-pencil-array-modifier-desktop-report.json new file mode 100644 index 00000000..ca54207e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00048/grease-pencil-array-modifier-desktop-report.json @@ -0,0 +1,22 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00048-modifier-GREASE_PENCIL_ARRAY.blend", + "fixtureSha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "modifier": { + "modifier": { + "name": "Gp Array", + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_ARRAY", + "typeCode": 75 + }, + "objectId": "object:GreasePencilObject", + "task": "M16-GAP-00048" + }, + "operation": "GREASE_PENCIL_ARRAY_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00048" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00048/grease-pencil-array-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00048/grease-pencil-array-modifier-local-exact-report.json new file mode 100644 index 00000000..93934e4d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00048/grease-pencil-array-modifier-local-exact-report.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00048", + "operation": "GREASE_PENCIL_ARRAY_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00048-modifier-GREASE_PENCIL_ARRAY.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00048/grease-pencil-array-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:GreasePencilObject", + "modifier": { + "dependsOn": [ + "modifier:object:GreasePencilObject:312629205" + ], + "enabled": false, + "evaluationStatus": "BLOCKED", + "name": "Gp Array", + "parameters": { + "flag": 1, + "mode": 6, + "persistentUid": 650905928, + "typeCode": 75 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_ARRAY", + "uuid": "modifier:object:GreasePencilObject:650905928" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00049" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00048/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00048/manifest.json new file mode 100644 index 00000000..a056e0f8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00048/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00048", + "parentTask": "M16-GAP-00047", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_ARRAY_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00047/manifest.json", "sha256": "fe5ac01d72c9ab1f18f485a02748e4a4a53d409f2c65b0f9507b0fba2b16201a"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00048-modifier-GREASE_PENCIL_ARRAY.blend", "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401"}, + "generator": {"path": "tools/web/generated/M16-GAP-00048.py", "sha256": "46d0a48bac2f893ce03ffb055881159a3f55327e8314ef24f2530a6212ddf868"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "4e902d7936cf3cd3be92c37fa15ec7a7f1ce9fc3bddce82dab814c1627e32b53"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00048/grease-pencil-array-modifier-desktop-report.json", "sha256": "caf437b45e130c12406ce3ee8d699d7266673f8e595d63d017f5482c474f29f3"}, + "webReport": {"path": "tests/golden/M16-GAP-00048/grease-pencil-array-modifier-local-exact-report.json", "sha256": "e583037d0c80eb40b6e511cb2b11feae3c9f5f0e1c0374727f5af6c8c1b0c6b5"} + }, + "nextTask": "M16-GAP-00049" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00049/grease-pencil-build-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00049/grease-pencil-build-modifier-desktop-report.json new file mode 100644 index 00000000..b284c8c8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00049/grease-pencil-build-modifier-desktop-report.json @@ -0,0 +1,22 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00049-modifier-GREASE_PENCIL_BUILD.blend", + "fixtureSha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "modifier": { + "modifier": { + "name": "Gp Build", + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_BUILD", + "typeCode": 84 + }, + "objectId": "object:GreasePencilObject", + "task": "M16-GAP-00049" + }, + "operation": "GREASE_PENCIL_BUILD_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00049" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00049/grease-pencil-build-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00049/grease-pencil-build-modifier-local-exact-report.json new file mode 100644 index 00000000..d59728c7 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00049/grease-pencil-build-modifier-local-exact-report.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00049", + "operation": "GREASE_PENCIL_BUILD_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00049-modifier-GREASE_PENCIL_BUILD.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00049/grease-pencil-build-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:GreasePencilObject", + "modifier": { + "dependsOn": [ + "modifier:object:GreasePencilObject:650905928" + ], + "enabled": false, + "evaluationStatus": "BLOCKED", + "name": "Gp Build", + "parameters": { + "flag": 1, + "mode": 6, + "persistentUid": 421891574, + "typeCode": 84 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_BUILD", + "uuid": "modifier:object:GreasePencilObject:421891574" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00050" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00049/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00049/manifest.json new file mode 100644 index 00000000..9d81e89e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00049/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00049", + "parentTask": "M16-GAP-00048", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_BUILD_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00048/manifest.json", "sha256": "e7267000f7ec4c472025b0f876b2c91f30d2b25716a59c91339c944e2e1459f3"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00049-modifier-GREASE_PENCIL_BUILD.blend", "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401"}, + "generator": {"path": "tools/web/generated/M16-GAP-00049.py", "sha256": "1d351d2f7f82f92d41ce1e1837b7bbaff41ec7046d51d118cb9a744b2f130347"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "e6d7e8019a67bf357c63fbbc9d51e4ed6d4d7fd303b2ad259eec30b2b37a5644"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00049/grease-pencil-build-modifier-desktop-report.json", "sha256": "e9d70bb6ba43a387d29683473bfc8286ab9818f771e796194a0344ed31bd00cb"}, + "webReport": {"path": "tests/golden/M16-GAP-00049/grease-pencil-build-modifier-local-exact-report.json", "sha256": "b1df18f0aafe0a47ef55b7fd64ac5935020a99e45e58708cd7958d919d8fa558"} + }, + "nextTask": "M16-GAP-00050" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00050/grease-pencil-color-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00050/grease-pencil-color-modifier-desktop-report.json new file mode 100644 index 00000000..f16ace69 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00050/grease-pencil-color-modifier-desktop-report.json @@ -0,0 +1,22 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00050-modifier-GREASE_PENCIL_COLOR.blend", + "fixtureSha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "modifier": { + "modifier": { + "name": "Gp Color", + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_COLOR", + "typeCode": 63 + }, + "objectId": "object:GreasePencilObject", + "task": "M16-GAP-00050" + }, + "operation": "GREASE_PENCIL_COLOR_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00050" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00050/grease-pencil-color-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00050/grease-pencil-color-modifier-local-exact-report.json new file mode 100644 index 00000000..4fba602f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00050/grease-pencil-color-modifier-local-exact-report.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00050", + "operation": "GREASE_PENCIL_COLOR_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00050-modifier-GREASE_PENCIL_COLOR.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00050/grease-pencil-color-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:GreasePencilObject", + "modifier": { + "dependsOn": [ + "modifier:object:GreasePencilObject:421891574" + ], + "enabled": false, + "evaluationStatus": "BLOCKED", + "name": "Gp Color", + "parameters": { + "flag": 1, + "mode": 6, + "persistentUid": 252453400, + "typeCode": 63 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_COLOR", + "uuid": "modifier:object:GreasePencilObject:252453400" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00051" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00050/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00050/manifest.json new file mode 100644 index 00000000..4503ef7c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00050/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00050", + "parentTask": "M16-GAP-00049", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_COLOR_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00049/manifest.json", "sha256": "40a1973a8c461d876e93115c4ccc0e7c6f3cd19ba495947d6c30b50b03aef49c"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00050-modifier-GREASE_PENCIL_COLOR.blend", "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401"}, + "generator": {"path": "tools/web/generated/M16-GAP-00050.py", "sha256": "3940edc4cca7b1d5cf9a335b8190be744cbbd6e6201614372dbf39163ff9efa1"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "9d7f692b1907b7e54d307bd0325a7cedefb75d10b5e9a8a356bda032084b1d5c"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00050/grease-pencil-color-modifier-desktop-report.json", "sha256": "79e44b5d0443f81d2ba334902990f73c20601b4c15e890aff1b73fae4879f771"}, + "webReport": {"path": "tests/golden/M16-GAP-00050/grease-pencil-color-modifier-local-exact-report.json", "sha256": "73126cf9fc415f9eccf9538d1d23055857fa9c772e1b15721470e1653bc2ce73"} + }, + "nextTask": "M16-GAP-00051" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00051/grease-pencil-dash-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00051/grease-pencil-dash-modifier-desktop-report.json new file mode 100644 index 00000000..350e50e8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00051/grease-pencil-dash-modifier-desktop-report.json @@ -0,0 +1,22 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00051-modifier-GREASE_PENCIL_DASH.blend", + "fixtureSha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "modifier": { + "modifier": { + "name": "Gp Dash", + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_DASH", + "typeCode": 71 + }, + "objectId": "object:GreasePencilObject", + "task": "M16-GAP-00051" + }, + "operation": "GREASE_PENCIL_DASH_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00051" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00051/grease-pencil-dash-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00051/grease-pencil-dash-modifier-local-exact-report.json new file mode 100644 index 00000000..b4d6ed4b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00051/grease-pencil-dash-modifier-local-exact-report.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00051", + "operation": "GREASE_PENCIL_DASH_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00051-modifier-GREASE_PENCIL_DASH.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00051/grease-pencil-dash-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:GreasePencilObject", + "modifier": { + "dependsOn": [ + "modifier:object:GreasePencilObject:252453400" + ], + "enabled": false, + "evaluationStatus": "BLOCKED", + "name": "Gp Dash", + "parameters": { + "flag": 1, + "mode": 6, + "persistentUid": 753317068, + "typeCode": 71 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_DASH", + "uuid": "modifier:object:GreasePencilObject:753317068" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00052" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00051/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00051/manifest.json new file mode 100644 index 00000000..bbb16cd0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00051/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00051", + "parentTask": "M16-GAP-00050", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_DASH_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00050/manifest.json", "sha256": "9b399fb391588b8bedba10997876cb4b3104ecdfe6481a022dd2f106f4920dbb"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00051-modifier-GREASE_PENCIL_DASH.blend", "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401"}, + "generator": {"path": "tools/web/generated/M16-GAP-00051.py", "sha256": "c6f60bcce29d2015308c78d764b57579616d644d84dc27bb98a118b162348808"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "91f5008bc93838eb4ceda37fd6878598f34816dc7f27600f4a243b00bf295b6c"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00051/grease-pencil-dash-modifier-desktop-report.json", "sha256": "0c87ebea369c798bbb2f0f70f698066e482ce372eda0042008f9993cfe116bf6"}, + "webReport": {"path": "tests/golden/M16-GAP-00051/grease-pencil-dash-modifier-local-exact-report.json", "sha256": "6da74df88b5ed5b1cb7cb64420020924143e30cad7c8f1efc11e62fd39b33dbb"} + }, + "nextTask": "M16-GAP-00052" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00052/grease-pencil-envelope-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00052/grease-pencil-envelope-modifier-desktop-report.json new file mode 100644 index 00000000..8070fd40 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00052/grease-pencil-envelope-modifier-desktop-report.json @@ -0,0 +1,22 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00052-modifier-GREASE_PENCIL_ENVELOPE.blend", + "fixtureSha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "modifier": { + "modifier": { + "name": "Gp Envelope", + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_ENVELOPE", + "typeCode": 81 + }, + "objectId": "object:GreasePencilObject", + "task": "M16-GAP-00052" + }, + "operation": "GREASE_PENCIL_ENVELOPE_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00052" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00052/grease-pencil-envelope-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00052/grease-pencil-envelope-modifier-local-exact-report.json new file mode 100644 index 00000000..c52a9625 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00052/grease-pencil-envelope-modifier-local-exact-report.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00052", + "operation": "GREASE_PENCIL_ENVELOPE_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00052-modifier-GREASE_PENCIL_ENVELOPE.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00052/grease-pencil-envelope-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:GreasePencilObject", + "modifier": { + "dependsOn": [ + "modifier:object:GreasePencilObject:753317068" + ], + "enabled": false, + "evaluationStatus": "BLOCKED", + "name": "Gp Envelope", + "parameters": { + "flag": 1, + "mode": 6, + "persistentUid": 749293089, + "typeCode": 81 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_ENVELOPE", + "uuid": "modifier:object:GreasePencilObject:749293089" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00053" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00052/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00052/manifest.json new file mode 100644 index 00000000..43fdadf1 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00052/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00052", + "parentTask": "M16-GAP-00051", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_ENVELOPE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00051/manifest.json", "sha256": "fc6d07507873239429bbf53f389bd769f94fade2f2086ca446bf3180f96fff2b"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00052-modifier-GREASE_PENCIL_ENVELOPE.blend", "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401"}, + "generator": {"path": "tools/web/generated/M16-GAP-00052.py", "sha256": "53a12d6ac62873a4cc6d384c811030e43f57b08485a8c50c70d638a7433ec333"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "aacf540ef155aca212cb3361e748f043a40e2a965245e373fd6bf17ad3d50442"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00052/grease-pencil-envelope-modifier-desktop-report.json", "sha256": "4ce0e867ab2f8346e6121060c3f18c9a1f48e97c67dd5b9362c2eaca6e7e5f78"}, + "webReport": {"path": "tests/golden/M16-GAP-00052/grease-pencil-envelope-modifier-local-exact-report.json", "sha256": "af02545ba19b116b4ce39b87aaab3f8e3e33504164694c04b1ec6da7f159ee59"} + }, + "nextTask": "M16-GAP-00053" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00053/grease-pencil-hook-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00053/grease-pencil-hook-modifier-desktop-report.json new file mode 100644 index 00000000..883e9d53 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00053/grease-pencil-hook-modifier-desktop-report.json @@ -0,0 +1,22 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00053-modifier-GREASE_PENCIL_HOOK.blend", + "fixtureSha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "modifier": { + "modifier": { + "name": "Gp Hook", + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_HOOK", + "typeCode": 77 + }, + "objectId": "object:GreasePencilObject", + "task": "M16-GAP-00053" + }, + "operation": "GREASE_PENCIL_HOOK_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00053" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00053/grease-pencil-hook-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00053/grease-pencil-hook-modifier-local-exact-report.json new file mode 100644 index 00000000..749d110c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00053/grease-pencil-hook-modifier-local-exact-report.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00053", + "operation": "GREASE_PENCIL_HOOK_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00053-modifier-GREASE_PENCIL_HOOK.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00053/grease-pencil-hook-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:GreasePencilObject", + "modifier": { + "dependsOn": [ + "modifier:object:GreasePencilObject:749293089" + ], + "enabled": false, + "evaluationStatus": "BLOCKED", + "name": "Gp Hook", + "parameters": { + "flag": 1, + "mode": 6, + "persistentUid": 1366665389, + "typeCode": 77 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_HOOK", + "uuid": "modifier:object:GreasePencilObject:1366665389" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00054" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00053/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00053/manifest.json new file mode 100644 index 00000000..1b68af27 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00053/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00053", + "parentTask": "M16-GAP-00052", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_HOOK_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00052/manifest.json", "sha256": "764d3f131fc5f51ba15aa3964b73560972934f2f6b025db8288a5c165dd40af8"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00053-modifier-GREASE_PENCIL_HOOK.blend", "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401"}, + "generator": {"path": "tools/web/generated/M16-GAP-00053.py", "sha256": "2f3523d2f8378fbdef7083d93ac666059a3649c29fdd8c4bf5e44fdbb8e596fa"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00053/grease-pencil-hook-modifier-desktop-report.json", "sha256": "67b0ddf84c0d9690832b8aeae76b503572bf9ac725123254a95a351e55075c54"}, + "webReport": {"path": "tests/golden/M16-GAP-00053/grease-pencil-hook-modifier-local-exact-report.json", "sha256": "eb44b966e835d186f5f05420377a00895764cee2b5cb379f3704f89aed334d16"} + }, + "nextTask": "M16-GAP-00054" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00054/grease-pencil-lattice-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00054/grease-pencil-lattice-modifier-desktop-report.json new file mode 100644 index 00000000..621fe6f1 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00054/grease-pencil-lattice-modifier-desktop-report.json @@ -0,0 +1,22 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00054-modifier-GREASE_PENCIL_LATTICE.blend", + "fixtureSha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "modifier": { + "modifier": { + "name": "Gp Lattice", + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_LATTICE", + "typeCode": 70 + }, + "objectId": "object:GreasePencilObject", + "task": "M16-GAP-00054" + }, + "operation": "GREASE_PENCIL_LATTICE_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00054" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00054/grease-pencil-lattice-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00054/grease-pencil-lattice-modifier-local-exact-report.json new file mode 100644 index 00000000..228ddfa9 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00054/grease-pencil-lattice-modifier-local-exact-report.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00054", + "operation": "GREASE_PENCIL_LATTICE_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00054-modifier-GREASE_PENCIL_LATTICE.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00054/grease-pencil-lattice-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:GreasePencilObject", + "modifier": { + "dependsOn": [ + "modifier:object:GreasePencilObject:1366665389" + ], + "enabled": false, + "evaluationStatus": "BLOCKED", + "name": "Gp Lattice", + "parameters": { + "flag": 1, + "mode": 6, + "persistentUid": 140212469, + "typeCode": 70 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_LATTICE", + "uuid": "modifier:object:GreasePencilObject:140212469" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00055" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00054/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00054/manifest.json new file mode 100644 index 00000000..25172868 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00054/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00054", + "parentTask": "M16-GAP-00053", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_LATTICE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00053/manifest.json", "sha256": "e3d1c6c132f6da332f4d1424bc7608e1bf25b2a48500b112fc34f5954c13220d"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00054-modifier-GREASE_PENCIL_LATTICE.blend", "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401"}, + "generator": {"path": "tools/web/generated/M16-GAP-00054.py", "sha256": "e033647018764ecb7015f9d7c1e6201306ca36ecf3df29a8a12ecadfa19238bb"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00054/grease-pencil-lattice-modifier-desktop-report.json", "sha256": "565931e3614f74c666c375ae3d879ca85b4274d1bc980cd5480c877593d23a63"}, + "webReport": {"path": "tests/golden/M16-GAP-00054/grease-pencil-lattice-modifier-local-exact-report.json", "sha256": "4d0bda74ab6c6667530fa5f64fff6944c316449b3c9f1c25d6c623d7523a5ed1"} + }, + "nextTask": "M16-GAP-00055" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00055/grease-pencil-length-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00055/grease-pencil-length-modifier-desktop-report.json new file mode 100644 index 00000000..2563d6d1 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00055/grease-pencil-length-modifier-desktop-report.json @@ -0,0 +1,22 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00055-modifier-GREASE_PENCIL_LENGTH.blend", + "fixtureSha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "modifier": { + "modifier": { + "name": "Gp Length", + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_LENGTH", + "typeCode": 73 + }, + "objectId": "object:GreasePencilObject", + "task": "M16-GAP-00055" + }, + "operation": "GREASE_PENCIL_LENGTH_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00055" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00055/grease-pencil-length-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00055/grease-pencil-length-modifier-local-exact-report.json new file mode 100644 index 00000000..6ac9377a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00055/grease-pencil-length-modifier-local-exact-report.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00055", + "operation": "GREASE_PENCIL_LENGTH_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00055-modifier-GREASE_PENCIL_LENGTH.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00055/grease-pencil-length-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:GreasePencilObject", + "modifier": { + "dependsOn": [ + "modifier:object:GreasePencilObject:140212469" + ], + "enabled": false, + "evaluationStatus": "BLOCKED", + "name": "Gp Length", + "parameters": { + "flag": 1, + "mode": 6, + "persistentUid": 1701210363, + "typeCode": 73 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_LENGTH", + "uuid": "modifier:object:GreasePencilObject:1701210363" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00056" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00055/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00055/manifest.json new file mode 100644 index 00000000..561f4034 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00055/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00055", + "parentTask": "M16-GAP-00054", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_LENGTH_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00054/manifest.json", "sha256": "9cd85f6373d0658757c92fb0a084a1f468777865e64cfc5cd23f7fa091f6e25c"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00055-modifier-GREASE_PENCIL_LENGTH.blend", "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401"}, + "generator": {"path": "tools/web/generated/M16-GAP-00055.py", "sha256": "6cd72429c65a9e5e36e099f0c35f523e51ed26d4c796be7b3e4397c3bb71509c"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00055/grease-pencil-length-modifier-desktop-report.json", "sha256": "367ea4ff3cef4d5ec0e07b3f69f2f5a15d2604753b8efe9083775e97854af2b6"}, + "webReport": {"path": "tests/golden/M16-GAP-00055/grease-pencil-length-modifier-local-exact-report.json", "sha256": "5715882f691e9022fc3049f1937b90e39d9e7702583f9a946b7aabf22e2093d5"} + }, + "nextTask": "M16-GAP-00056" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00056/grease-pencil-mirror-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00056/grease-pencil-mirror-modifier-desktop-report.json new file mode 100644 index 00000000..21cba685 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00056/grease-pencil-mirror-modifier-desktop-report.json @@ -0,0 +1,22 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00056-modifier-GREASE_PENCIL_MIRROR.blend", + "fixtureSha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "modifier": { + "modifier": { + "name": "Gp Mirror", + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_MIRROR", + "typeCode": 68 + }, + "objectId": "object:GreasePencilObject", + "task": "M16-GAP-00056" + }, + "operation": "GREASE_PENCIL_MIRROR_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00056" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00056/grease-pencil-mirror-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00056/grease-pencil-mirror-modifier-local-exact-report.json new file mode 100644 index 00000000..58e9ebad --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00056/grease-pencil-mirror-modifier-local-exact-report.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00056", + "operation": "GREASE_PENCIL_MIRROR_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00056-modifier-GREASE_PENCIL_MIRROR.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00056/grease-pencil-mirror-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:GreasePencilObject", + "modifier": { + "dependsOn": [ + "modifier:object:GreasePencilObject:1701210363" + ], + "enabled": false, + "evaluationStatus": "BLOCKED", + "name": "Gp Mirror", + "parameters": { + "flag": 1, + "mode": 6, + "persistentUid": 1723713518, + "typeCode": 68 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_MIRROR", + "uuid": "modifier:object:GreasePencilObject:1723713518" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00057" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00056/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00056/manifest.json new file mode 100644 index 00000000..e9bb7f6b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00056/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00056", + "parentTask": "M16-GAP-00055", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_MIRROR_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00055/manifest.json", "sha256": "8c1e8755714dc91d1e02b0966d5d86fd26ffc49aa9c81d63384e0734117e1a31"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00056-modifier-GREASE_PENCIL_MIRROR.blend", "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401"}, + "generator": {"path": "tools/web/generated/M16-GAP-00056.py", "sha256": "b604fc0351b563558a59be40fbfbdd83481ec3c0eeda6ec020fc5e21bc527de3"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00056/grease-pencil-mirror-modifier-desktop-report.json", "sha256": "60122c5212975d2a0de279415ea35699fa10c7c3b350ef991a2ef04c096c4e3c"}, + "webReport": {"path": "tests/golden/M16-GAP-00056/grease-pencil-mirror-modifier-local-exact-report.json", "sha256": "ac905bdcf602af4f8d63e62ea78f251d737052c00aa4454807aeaa648344ea89"} + }, + "nextTask": "M16-GAP-00057" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00057/grease-pencil-multiply-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00057/grease-pencil-multiply-modifier-desktop-report.json new file mode 100644 index 00000000..6606a293 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00057/grease-pencil-multiply-modifier-desktop-report.json @@ -0,0 +1,22 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00057-modifier-GREASE_PENCIL_MULTIPLY.blend", + "fixtureSha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "modifier": { + "modifier": { + "name": "Gp Multiply", + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_MULTIPLY", + "typeCode": 72 + }, + "objectId": "object:GreasePencilObject", + "task": "M16-GAP-00057" + }, + "operation": "GREASE_PENCIL_MULTIPLY_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00057" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00057/grease-pencil-multiply-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00057/grease-pencil-multiply-modifier-local-exact-report.json new file mode 100644 index 00000000..1268960c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00057/grease-pencil-multiply-modifier-local-exact-report.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00057", + "operation": "GREASE_PENCIL_MULTIPLY_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00057-modifier-GREASE_PENCIL_MULTIPLY.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00057/grease-pencil-multiply-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:GreasePencilObject", + "modifier": { + "dependsOn": [ + "modifier:object:GreasePencilObject:1723713518" + ], + "enabled": false, + "evaluationStatus": "BLOCKED", + "name": "Gp Multiply", + "parameters": { + "flag": 1, + "mode": 6, + "persistentUid": 1520489508, + "typeCode": 72 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_MULTIPLY", + "uuid": "modifier:object:GreasePencilObject:1520489508" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00058" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00057/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00057/manifest.json new file mode 100644 index 00000000..d2cfa67f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00057/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00057", + "parentTask": "M16-GAP-00056", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_MULTIPLY_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00056/manifest.json", "sha256": "66d9711eaa81ebb3a192ff89004047b67f2784f6b4eb752c3f5bf669f4700ac2"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00057-modifier-GREASE_PENCIL_MULTIPLY.blend", "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401"}, + "generator": {"path": "tools/web/generated/M16-GAP-00057.py", "sha256": "b2fed8f2d445c0eb10ed833385cc6e6e91394a97e367c6c76a3dbc4b61f5abb7"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00057/grease-pencil-multiply-modifier-desktop-report.json", "sha256": "c891fa44f7623a0eb1dd8c848cace0f8289c0c181a03a400fce36aa1a020069c"}, + "webReport": {"path": "tests/golden/M16-GAP-00057/grease-pencil-multiply-modifier-local-exact-report.json", "sha256": "5e9c1ab5db3f884cb1f78ce212e2714ea8500ddcc6691774092a745a71013e10"} + }, + "nextTask": "M16-GAP-00058" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00058/grease-pencil-noise-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00058/grease-pencil-noise-modifier-desktop-report.json new file mode 100644 index 00000000..e4a9ddef --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00058/grease-pencil-noise-modifier-desktop-report.json @@ -0,0 +1,22 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00058-modifier-GREASE_PENCIL_NOISE.blend", + "fixtureSha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "modifier": { + "modifier": { + "name": "Gp Noise", + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_NOISE", + "typeCode": 67 + }, + "objectId": "object:GreasePencilObject", + "task": "M16-GAP-00058" + }, + "operation": "GREASE_PENCIL_NOISE_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00058" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00058/grease-pencil-noise-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00058/grease-pencil-noise-modifier-local-exact-report.json new file mode 100644 index 00000000..e86ae4cc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00058/grease-pencil-noise-modifier-local-exact-report.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00058", + "operation": "GREASE_PENCIL_NOISE_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00058-modifier-GREASE_PENCIL_NOISE.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00058/grease-pencil-noise-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:GreasePencilObject", + "modifier": { + "dependsOn": [ + "modifier:object:GreasePencilObject:1520489508" + ], + "enabled": false, + "evaluationStatus": "BLOCKED", + "name": "Gp Noise", + "parameters": { + "flag": 1, + "mode": 6, + "persistentUid": 50541313, + "typeCode": 67 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_NOISE", + "uuid": "modifier:object:GreasePencilObject:50541313" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00059" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00058/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00058/manifest.json new file mode 100644 index 00000000..590f582c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00058/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00058", + "parentTask": "M16-GAP-00057", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_NOISE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00057/manifest.json", "sha256": "171834827986190445d87d9eb35edb44d48400f941e2999765c4660ae6e1875a"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00058-modifier-GREASE_PENCIL_NOISE.blend", "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401"}, + "generator": {"path": "tools/web/generated/M16-GAP-00058.py", "sha256": "01dd91ba30acebe5749feef841e8ca9f096ac35a9fb6b454ae30ed94941ddd21"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19"}, + "protocol": {"path": "web/protocol/scene-ir.ts", "sha256": "196950e7a0dab3d6e5cbf0015bf7e45665cbd957e0762db4467bf3551064e838"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00058/grease-pencil-noise-modifier-desktop-report.json", "sha256": "04c853b535d820f10859c47d51901fbbf51c4a5cb7f7387cbf59bbebfc108a2c"}, + "webReport": {"path": "tests/golden/M16-GAP-00058/grease-pencil-noise-modifier-local-exact-report.json", "sha256": "ce892ec22b69bd93060fcd8d29d91a97c68f75361bf9b782d73e502ecb7a6f47"} + }, + "nextTask": "M16-GAP-00059" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00059/grease-pencil-offset-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00059/grease-pencil-offset-modifier-desktop-report.json new file mode 100644 index 00000000..0c769257 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00059/grease-pencil-offset-modifier-desktop-report.json @@ -0,0 +1,22 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00059-modifier-GREASE_PENCIL_OFFSET.blend", + "fixtureSha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "modifier": { + "modifier": { + "name": "Gp Offset", + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_OFFSET", + "typeCode": 66 + }, + "objectId": "object:GreasePencilObject", + "task": "M16-GAP-00059" + }, + "operation": "GREASE_PENCIL_OFFSET_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00059" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00059/grease-pencil-offset-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00059/grease-pencil-offset-modifier-local-exact-report.json new file mode 100644 index 00000000..9f14c3f6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00059/grease-pencil-offset-modifier-local-exact-report.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00059", + "operation": "GREASE_PENCIL_OFFSET_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00059-modifier-GREASE_PENCIL_OFFSET.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00059/grease-pencil-offset-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:GreasePencilObject", + "modifier": { + "dependsOn": [ + "modifier:object:GreasePencilObject:50541313" + ], + "enabled": false, + "evaluationStatus": "BLOCKED", + "name": "Gp Offset", + "parameters": { + "flag": 1, + "mode": 6, + "persistentUid": 275330124, + "typeCode": 66 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_OFFSET", + "uuid": "modifier:object:GreasePencilObject:275330124" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00060" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00059/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00059/manifest.json new file mode 100644 index 00000000..f6d1f148 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00059/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00059", + "parentTask": "M16-GAP-00058", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_OFFSET_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00058/manifest.json", "sha256": "73e0c79e68244d4d100e32bbd915f51106cec5441439960983ac1bc218e74abe"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00059-modifier-GREASE_PENCIL_OFFSET.blend", "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401"}, + "generator": {"path": "tools/web/generated/M16-GAP-00059.py", "sha256": "1077df2f66d6a954a239cbdb6d55f5b05ef382b7224c9bbd886695d47dbf3b15"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00059/grease-pencil-offset-modifier-desktop-report.json", "sha256": "4119db33aad242414ed52d9e6614bdede6e0b4a551604a6886e01dc5bf90ea4e"}, + "webReport": {"path": "tests/golden/M16-GAP-00059/grease-pencil-offset-modifier-local-exact-report.json", "sha256": "e9ef09a250821a1dd7f10c574f1911f534baf65515e879f9ac423fb4877c7b5b"} + }, + "nextTask": "M16-GAP-00060" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00060/grease-pencil-opacity-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00060/grease-pencil-opacity-modifier-desktop-report.json new file mode 100644 index 00000000..8f07c0af --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00060/grease-pencil-opacity-modifier-desktop-report.json @@ -0,0 +1,22 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00060-modifier-GREASE_PENCIL_OPACITY.blend", + "fixtureSha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "modifier": { + "modifier": { + "name": "Gp Opacity", + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_OPACITY", + "typeCode": 61 + }, + "objectId": "object:GreasePencilObject", + "task": "M16-GAP-00060" + }, + "operation": "GREASE_PENCIL_OPACITY_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00060" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00060/grease-pencil-opacity-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00060/grease-pencil-opacity-modifier-local-exact-report.json new file mode 100644 index 00000000..d91248f5 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00060/grease-pencil-opacity-modifier-local-exact-report.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00060", + "operation": "GREASE_PENCIL_OPACITY_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00060-modifier-GREASE_PENCIL_OPACITY.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00060/grease-pencil-opacity-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:GreasePencilObject", + "modifier": { + "dependsOn": [ + "modifier:object:GreasePencilObject:275330124" + ], + "enabled": false, + "evaluationStatus": "BLOCKED", + "name": "Gp Opacity", + "parameters": { + "flag": 1, + "mode": 6, + "persistentUid": 24051249, + "typeCode": 61 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_OPACITY", + "uuid": "modifier:object:GreasePencilObject:24051249" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00061" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00060/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00060/manifest.json new file mode 100644 index 00000000..38b3b169 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00060/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00060", + "parentTask": "M16-GAP-00059", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_OPACITY_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00059/manifest.json", "sha256": "884c6a8e1f40870d6628cc0c33884e1c83d0d605bea1d0fd505b6710dcd2fd4b"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00060-modifier-GREASE_PENCIL_OPACITY.blend", "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401"}, + "generator": {"path": "tools/web/generated/M16-GAP-00060.py", "sha256": "4bc32e262c02b41bbc4bccf0ae76e280a3b97cc5cb28495361f7e044868f9b51"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00060/grease-pencil-opacity-modifier-desktop-report.json", "sha256": "678e7c0028c38f2a84cee2377ecfd7de1d1303561e75fcf8f380359338f6b4b8"}, + "webReport": {"path": "tests/golden/M16-GAP-00060/grease-pencil-opacity-modifier-local-exact-report.json", "sha256": "b62b13a20f921815f9fc4b32b406598a1a08d701cee27e07ee3a0009dda2a2f5"} + }, + "nextTask": "M16-GAP-00061" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00061/grease-pencil-outline-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00061/grease-pencil-outline-modifier-desktop-report.json new file mode 100644 index 00000000..a34091c6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00061/grease-pencil-outline-modifier-desktop-report.json @@ -0,0 +1,22 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00061-modifier-GREASE_PENCIL_OUTLINE.blend", + "fixtureSha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "modifier": { + "modifier": { + "name": "Gp Outline", + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_OUTLINE", + "typeCode": 82 + }, + "objectId": "object:GreasePencilObject", + "task": "M16-GAP-00061" + }, + "operation": "GREASE_PENCIL_OUTLINE_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00061" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00061/grease-pencil-outline-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00061/grease-pencil-outline-modifier-local-exact-report.json new file mode 100644 index 00000000..fdf98815 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00061/grease-pencil-outline-modifier-local-exact-report.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00061", + "operation": "GREASE_PENCIL_OUTLINE_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00061-modifier-GREASE_PENCIL_OUTLINE.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00061/grease-pencil-outline-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:GreasePencilObject", + "modifier": { + "dependsOn": [ + "modifier:object:GreasePencilObject:24051249" + ], + "enabled": false, + "evaluationStatus": "BLOCKED", + "name": "Gp Outline", + "parameters": { + "flag": 1, + "mode": 6, + "persistentUid": 866027982, + "typeCode": 82 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_OUTLINE", + "uuid": "modifier:object:GreasePencilObject:866027982" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00062" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00061/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00061/manifest.json new file mode 100644 index 00000000..cd51b628 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00061/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00061", + "parentTask": "M16-GAP-00060", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_OUTLINE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00060/manifest.json", "sha256": "e3715c32ca4bae6376396b321826841ad38751301a184154db024233c4f31069"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00061-modifier-GREASE_PENCIL_OUTLINE.blend", "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401"}, + "generator": {"path": "tools/web/generated/M16-GAP-00061.py", "sha256": "d99b89a5f9daaa8a454abd747b4903f0391ad21af6b315a46cd92bbcaf08ac7d"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00061/grease-pencil-outline-modifier-desktop-report.json", "sha256": "2a6994ca45c8262a592cedb8deb8f026d366ee2df3bfe6ea0d375e8e214ba6c0"}, + "webReport": {"path": "tests/golden/M16-GAP-00061/grease-pencil-outline-modifier-local-exact-report.json", "sha256": "f490b2dc9b173a3172529ab529889a3292fe39f0cbd3951baaee8566464a0c43"} + }, + "nextTask": "M16-GAP-00062" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00062/grease-pencil-shrinkwrap-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00062/grease-pencil-shrinkwrap-modifier-desktop-report.json new file mode 100644 index 00000000..99a445ba --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00062/grease-pencil-shrinkwrap-modifier-desktop-report.json @@ -0,0 +1,22 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00062-modifier-GREASE_PENCIL_SHRINKWRAP.blend", + "fixtureSha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "modifier": { + "modifier": { + "name": "Gp Shrinkwrap", + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_SHRINKWRAP", + "typeCode": 83 + }, + "objectId": "object:GreasePencilObject", + "task": "M16-GAP-00062" + }, + "operation": "GREASE_PENCIL_SHRINKWRAP_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00062" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00062/grease-pencil-shrinkwrap-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00062/grease-pencil-shrinkwrap-modifier-local-exact-report.json new file mode 100644 index 00000000..ee0432d3 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00062/grease-pencil-shrinkwrap-modifier-local-exact-report.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00062", + "operation": "GREASE_PENCIL_SHRINKWRAP_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00062-modifier-GREASE_PENCIL_SHRINKWRAP.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00062/grease-pencil-shrinkwrap-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:GreasePencilObject", + "modifier": { + "dependsOn": [ + "modifier:object:GreasePencilObject:866027982" + ], + "enabled": false, + "evaluationStatus": "BLOCKED", + "name": "Gp Shrinkwrap", + "parameters": { + "flag": 1, + "mode": 6, + "persistentUid": 1895443529, + "typeCode": 83 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_SHRINKWRAP", + "uuid": "modifier:object:GreasePencilObject:1895443529" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00063" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00062/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00062/manifest.json new file mode 100644 index 00000000..5045b776 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00062/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00062", + "parentTask": "M16-GAP-00061", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_SHRINKWRAP_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00061/manifest.json", "sha256": "31883513aefa13e1668b0bde65b55f87c009d36e0bce841d3460e2dc3f3e5381"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00062-modifier-GREASE_PENCIL_SHRINKWRAP.blend", "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401"}, + "generator": {"path": "tools/web/generated/M16-GAP-00062.py", "sha256": "b3e97d53919cb031f359cc15429f5801ac59614ba8f6993183f9db8deb280e3f"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00062/grease-pencil-shrinkwrap-modifier-desktop-report.json", "sha256": "6631f00a27489de3b3d5cd2288f1a1b395b3a7295f9fc4b72c2091d5ce333a45"}, + "webReport": {"path": "tests/golden/M16-GAP-00062/grease-pencil-shrinkwrap-modifier-local-exact-report.json", "sha256": "a00004d09bc0170a0f3148197dd3dd24fb39fac60c723214cce73e527c998e8c"} + }, + "nextTask": "M16-GAP-00063" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00063/grease-pencil-simplify-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00063/grease-pencil-simplify-modifier-desktop-report.json new file mode 100644 index 00000000..b5684e6b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00063/grease-pencil-simplify-modifier-desktop-report.json @@ -0,0 +1,22 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00063-modifier-GREASE_PENCIL_SIMPLIFY.blend", + "fixtureSha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "modifier": { + "modifier": { + "name": "Gp Simplify", + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_SIMPLIFY", + "typeCode": 85 + }, + "objectId": "object:GreasePencilObject", + "task": "M16-GAP-00063" + }, + "operation": "GREASE_PENCIL_SIMPLIFY_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00063" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00063/grease-pencil-simplify-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00063/grease-pencil-simplify-modifier-local-exact-report.json new file mode 100644 index 00000000..4489bff8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00063/grease-pencil-simplify-modifier-local-exact-report.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00063", + "operation": "GREASE_PENCIL_SIMPLIFY_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00063-modifier-GREASE_PENCIL_SIMPLIFY.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00063/grease-pencil-simplify-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:GreasePencilObject", + "modifier": { + "dependsOn": [ + "modifier:object:GreasePencilObject:1895443529" + ], + "enabled": false, + "evaluationStatus": "BLOCKED", + "name": "Gp Simplify", + "parameters": { + "flag": 1, + "mode": 6, + "persistentUid": 411374307, + "typeCode": 85 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_SIMPLIFY", + "uuid": "modifier:object:GreasePencilObject:411374307" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00064" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00063/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00063/manifest.json new file mode 100644 index 00000000..9e9fc73b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00063/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00063", + "parentTask": "M16-GAP-00062", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_SIMPLIFY_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00062/manifest.json", "sha256": "943ee13f577cfa193e24e3d1a6cb698575fcbb7a72f52ddf9e122738c83e344a"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00063-modifier-GREASE_PENCIL_SIMPLIFY.blend", "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401"}, + "generator": {"path": "tools/web/generated/M16-GAP-00063.py", "sha256": "a7b77f92944e9d61c4f52f478ee004f4caef642a810f1ed18d51318be04b0ff4"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00063/grease-pencil-simplify-modifier-desktop-report.json", "sha256": "14de85a86a150ace281a6b632a5cdf3076104c623b3d313201a2efeb5bac6695"}, + "webReport": {"path": "tests/golden/M16-GAP-00063/grease-pencil-simplify-modifier-local-exact-report.json", "sha256": "6214778590468549ab03aa4bb67dcad6ae2f22d151dc6012c9e293e01ffa9dbe"} + }, + "nextTask": "M16-GAP-00064" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00064/grease-pencil-smooth-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00064/grease-pencil-smooth-modifier-desktop-report.json new file mode 100644 index 00000000..2356c4f1 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00064/grease-pencil-smooth-modifier-desktop-report.json @@ -0,0 +1,22 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00064-modifier-GREASE_PENCIL_SMOOTH.blend", + "fixtureSha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "modifier": { + "modifier": { + "name": "Gp Smooth", + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_SMOOTH", + "typeCode": 65 + }, + "objectId": "object:GreasePencilObject", + "task": "M16-GAP-00064" + }, + "operation": "GREASE_PENCIL_SMOOTH_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00064" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00064/grease-pencil-smooth-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00064/grease-pencil-smooth-modifier-local-exact-report.json new file mode 100644 index 00000000..e37f17c0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00064/grease-pencil-smooth-modifier-local-exact-report.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00064", + "operation": "GREASE_PENCIL_SMOOTH_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00064-modifier-GREASE_PENCIL_SMOOTH.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00064/grease-pencil-smooth-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:GreasePencilObject", + "modifier": { + "dependsOn": [ + "modifier:object:GreasePencilObject:411374307" + ], + "enabled": false, + "evaluationStatus": "BLOCKED", + "name": "Gp Smooth", + "parameters": { + "flag": 1, + "mode": 6, + "persistentUid": 486562295, + "typeCode": 65 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_SMOOTH", + "uuid": "modifier:object:GreasePencilObject:486562295" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00065" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00064/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00064/manifest.json new file mode 100644 index 00000000..47b5948d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00064/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00064", + "parentTask": "M16-GAP-00063", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_SMOOTH_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00063/manifest.json", "sha256": "004f0845b881563ebcc3bd208a081ae1626f88406fc912bcd031e5c611879ee2"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00064-modifier-GREASE_PENCIL_SMOOTH.blend", "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401"}, + "generator": {"path": "tools/web/generated/M16-GAP-00064.py", "sha256": "1df74ba06ff31269cf1f98214aa6c0ca6aa0cc600e459315f92196f8aeb3dd4f"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00064/grease-pencil-smooth-modifier-desktop-report.json", "sha256": "b58983c079c8271ab9d5230e478d36e16d49102826178e90566cd0a8913dd325"}, + "webReport": {"path": "tests/golden/M16-GAP-00064/grease-pencil-smooth-modifier-local-exact-report.json", "sha256": "da42e7440e07f1033f98fbd26274654b4f516821fa0e4c08db68df9468598564"} + }, + "nextTask": "M16-GAP-00065" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00065/grease-pencil-subdiv-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00065/grease-pencil-subdiv-modifier-desktop-report.json new file mode 100644 index 00000000..39d0ee60 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00065/grease-pencil-subdiv-modifier-desktop-report.json @@ -0,0 +1,22 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00065-modifier-GREASE_PENCIL_SUBDIV.blend", + "fixtureSha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "modifier": { + "modifier": { + "name": "Gp Subdiv", + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_SUBDIV", + "typeCode": 62 + }, + "objectId": "object:GreasePencilObject", + "task": "M16-GAP-00065" + }, + "operation": "GREASE_PENCIL_SUBDIV_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00065" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00065/grease-pencil-subdiv-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00065/grease-pencil-subdiv-modifier-local-exact-report.json new file mode 100644 index 00000000..386b8f49 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00065/grease-pencil-subdiv-modifier-local-exact-report.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00065", + "operation": "GREASE_PENCIL_SUBDIV_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00065-modifier-GREASE_PENCIL_SUBDIV.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00065/grease-pencil-subdiv-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:GreasePencilObject", + "modifier": { + "dependsOn": [ + "modifier:object:GreasePencilObject:486562295" + ], + "enabled": false, + "evaluationStatus": "BLOCKED", + "name": "Gp Subdiv", + "parameters": { + "flag": 1, + "mode": 6, + "persistentUid": 2065543832, + "typeCode": 62 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_SUBDIV", + "uuid": "modifier:object:GreasePencilObject:2065543832" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00066" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00065/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00065/manifest.json new file mode 100644 index 00000000..c8a4cbb2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00065/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00065", + "parentTask": "M16-GAP-00064", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_SUBDIV_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00064/manifest.json", "sha256": "2e2a5fd2275e753249ec35a596c5b632b09e7fb61ba5a96566a988e8d917579d"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00065-modifier-GREASE_PENCIL_SUBDIV.blend", "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401"}, + "generator": {"path": "tools/web/generated/M16-GAP-00065.py", "sha256": "977935d2e28afb3d9322e77d64440f5b69fdbf714ff6d8350a06acc1ea9cbce9"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00065/grease-pencil-subdiv-modifier-desktop-report.json", "sha256": "e4e86404702f4b46f207c66070adcc0a52e580aff6106f5404c97ab16351a2d2"}, + "webReport": {"path": "tests/golden/M16-GAP-00065/grease-pencil-subdiv-modifier-local-exact-report.json", "sha256": "3e09deb0756dd36c85e53e6011f3ca011c9ad4a237b577d529238675a9dd7213"} + }, + "nextTask": "M16-GAP-00066" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00066/grease-pencil-texture-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00066/grease-pencil-texture-modifier-desktop-report.json new file mode 100644 index 00000000..afe56baf --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00066/grease-pencil-texture-modifier-desktop-report.json @@ -0,0 +1,22 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00066-modifier-GREASE_PENCIL_TEXTURE.blend", + "fixtureSha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "modifier": { + "modifier": { + "name": "Gp Texture", + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_TEXTURE", + "typeCode": 86 + }, + "objectId": "object:GreasePencilObject", + "task": "M16-GAP-00066" + }, + "operation": "GREASE_PENCIL_TEXTURE_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00066" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00066/grease-pencil-texture-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00066/grease-pencil-texture-modifier-local-exact-report.json new file mode 100644 index 00000000..a1323d11 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00066/grease-pencil-texture-modifier-local-exact-report.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00066", + "operation": "GREASE_PENCIL_TEXTURE_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00066-modifier-GREASE_PENCIL_TEXTURE.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00066/grease-pencil-texture-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:GreasePencilObject", + "modifier": { + "dependsOn": [ + "modifier:object:GreasePencilObject:2065543832" + ], + "enabled": false, + "evaluationStatus": "BLOCKED", + "name": "Gp Texture", + "parameters": { + "flag": 1, + "mode": 6, + "persistentUid": 1309951243, + "typeCode": 86 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_TEXTURE", + "uuid": "modifier:object:GreasePencilObject:1309951243" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00067" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00066/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00066/manifest.json new file mode 100644 index 00000000..a5011f0f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00066/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00066", + "parentTask": "M16-GAP-00065", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_TEXTURE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00065/manifest.json", "sha256": "7a9dc7efde0ee86ae0b6b40270b8af8760891b867ed0fb2a77d0afe76596e605"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00066-modifier-GREASE_PENCIL_TEXTURE.blend", "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401"}, + "generator": {"path": "tools/web/generated/M16-GAP-00066.py", "sha256": "e51850c49d2fc333b943f421c92fe6bdbfcf79d23ccab95ee87f783bfa57f8f1"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00066/grease-pencil-texture-modifier-desktop-report.json", "sha256": "d3900098ba128c202ff28323c6e2945d78dd3c35512bbc2c5d611493b8b1e42d"}, + "webReport": {"path": "tests/golden/M16-GAP-00066/grease-pencil-texture-modifier-local-exact-report.json", "sha256": "b9831dad063cdfaa81aeb8894776b914652c6542d2e0a244cef321547e183068"} + }, + "nextTask": "M16-GAP-00067" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00067/grease-pencil-thickness-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00067/grease-pencil-thickness-modifier-desktop-report.json new file mode 100644 index 00000000..901df36e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00067/grease-pencil-thickness-modifier-desktop-report.json @@ -0,0 +1,22 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00067-modifier-GREASE_PENCIL_THICKNESS.blend", + "fixtureSha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "modifier": { + "modifier": { + "name": "Gp Thickness", + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_THICKNESS", + "typeCode": 69 + }, + "objectId": "object:GreasePencilObject", + "task": "M16-GAP-00067" + }, + "operation": "GREASE_PENCIL_THICKNESS_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00067" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00067/grease-pencil-thickness-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00067/grease-pencil-thickness-modifier-local-exact-report.json new file mode 100644 index 00000000..e6345f90 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00067/grease-pencil-thickness-modifier-local-exact-report.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00067", + "operation": "GREASE_PENCIL_THICKNESS_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00067-modifier-GREASE_PENCIL_THICKNESS.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00067/grease-pencil-thickness-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:GreasePencilObject", + "modifier": { + "dependsOn": [ + "modifier:object:GreasePencilObject:1309951243" + ], + "enabled": false, + "evaluationStatus": "BLOCKED", + "name": "Gp Thickness", + "parameters": { + "flag": 1, + "mode": 6, + "persistentUid": 1322899884, + "typeCode": 69 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_THICKNESS", + "uuid": "modifier:object:GreasePencilObject:1322899884" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00068" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00067/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00067/manifest.json new file mode 100644 index 00000000..388bd915 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00067/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00067", + "parentTask": "M16-GAP-00066", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_THICKNESS_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00066/manifest.json", "sha256": "3dfb0fc8a218a3209fee25799df265761e06ce2a8ca161fd07c015f33ae3e144"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00067-modifier-GREASE_PENCIL_THICKNESS.blend", "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401"}, + "generator": {"path": "tools/web/generated/M16-GAP-00067.py", "sha256": "89a64c14a4b1007dc3011bde0b5cb27c4bf77bbffd7ae3e89c5f6aac30f40cb9"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00067/grease-pencil-thickness-modifier-desktop-report.json", "sha256": "664ec1a6c595fcb5fac0888ae866f70a48ef5d057035c5c614ed0d97a9d08108"}, + "webReport": {"path": "tests/golden/M16-GAP-00067/grease-pencil-thickness-modifier-local-exact-report.json", "sha256": "6e1eee5cf87df42fc94c144f5171f9653df4196372eccd001cef6907ef518e94"} + }, + "nextTask": "M16-GAP-00068" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00068/grease-pencil-time-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00068/grease-pencil-time-modifier-desktop-report.json new file mode 100644 index 00000000..f3e5924e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00068/grease-pencil-time-modifier-desktop-report.json @@ -0,0 +1,22 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00068-modifier-GREASE_PENCIL_TIME.blend", + "fixtureSha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "modifier": { + "modifier": { + "name": "Gp Time", + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_TIME", + "typeCode": 80 + }, + "objectId": "object:GreasePencilObject", + "task": "M16-GAP-00068" + }, + "operation": "GREASE_PENCIL_TIME_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00068" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00068/grease-pencil-time-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00068/grease-pencil-time-modifier-local-exact-report.json new file mode 100644 index 00000000..ffe9bec9 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00068/grease-pencil-time-modifier-local-exact-report.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00068", + "operation": "GREASE_PENCIL_TIME_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00068-modifier-GREASE_PENCIL_TIME.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00068/grease-pencil-time-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:GreasePencilObject", + "modifier": { + "dependsOn": [ + "modifier:object:GreasePencilObject:1322899884" + ], + "enabled": false, + "evaluationStatus": "BLOCKED", + "name": "Gp Time", + "parameters": { + "flag": 1, + "mode": 6, + "persistentUid": 725115277, + "typeCode": 80 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_TIME", + "uuid": "modifier:object:GreasePencilObject:725115277" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00069" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00068/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00068/manifest.json new file mode 100644 index 00000000..ec0f8b77 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00068/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00068", + "parentTask": "M16-GAP-00067", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_TIME_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00067/manifest.json", "sha256": "d79f6b8985fd81ae5254adee038d79505726142298a2d0d39155d7bb6609e80b"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00068-modifier-GREASE_PENCIL_TIME.blend", "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401"}, + "generator": {"path": "tools/web/generated/M16-GAP-00068.py", "sha256": "cd982ce4a34537a22a20a4b8efcf676624ce2d7a7dfbd8896ed2c37494889282"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00068/grease-pencil-time-modifier-desktop-report.json", "sha256": "761dd7ad0a350e9f3c175575cdb4d71f5bd0a56e1872626148d73c9a7229468f"}, + "webReport": {"path": "tests/golden/M16-GAP-00068/grease-pencil-time-modifier-local-exact-report.json", "sha256": "5cc9edb3f0fd508b25730b4d32deaa9a804381d7fbd8b4007af5e7782d27c590"} + }, + "nextTask": "M16-GAP-00069" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00069/grease-pencil-tint-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00069/grease-pencil-tint-modifier-desktop-report.json new file mode 100644 index 00000000..838e2e40 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00069/grease-pencil-tint-modifier-desktop-report.json @@ -0,0 +1,22 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00069-modifier-GREASE_PENCIL_TINT.blend", + "fixtureSha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "modifier": { + "modifier": { + "name": "Gp Tint", + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_TINT", + "typeCode": 64 + }, + "objectId": "object:GreasePencilObject", + "task": "M16-GAP-00069" + }, + "operation": "GREASE_PENCIL_TINT_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00069" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00069/grease-pencil-tint-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00069/grease-pencil-tint-modifier-local-exact-report.json new file mode 100644 index 00000000..a1f8dd13 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00069/grease-pencil-tint-modifier-local-exact-report.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00069", + "operation": "GREASE_PENCIL_TINT_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00069-modifier-GREASE_PENCIL_TINT.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00069/grease-pencil-tint-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:GreasePencilObject", + "modifier": { + "dependsOn": [ + "modifier:object:GreasePencilObject:725115277" + ], + "enabled": false, + "evaluationStatus": "BLOCKED", + "name": "Gp Tint", + "parameters": { + "flag": 1, + "mode": 6, + "persistentUid": 398704216, + "typeCode": 64 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_TINT", + "uuid": "modifier:object:GreasePencilObject:398704216" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00070" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00069/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00069/manifest.json new file mode 100644 index 00000000..5d00ae06 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00069/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00069", + "parentTask": "M16-GAP-00068", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_TINT_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00068/manifest.json", "sha256": "5d89b01c5ba47171c0878156521964c0dc77f7d4dad58fe9810456b116486c9e"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00069-modifier-GREASE_PENCIL_TINT.blend", "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401"}, + "generator": {"path": "tools/web/generated/M16-GAP-00069.py", "sha256": "6ebf4e9475f40e8ef0da9c0fe99beb221f965efaad0953cd507c3d24be2d951f"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "aab9b87b27c53777578bacda0b9e5a7e967de81e2b30131d42d1760c1c0f6b19"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "e3d53ba8f26287ce1f62308962af1c5e6c80213b4fee289d0a1fb4c3c4135c45"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00069/grease-pencil-tint-modifier-desktop-report.json", "sha256": "e66d9b22a901a41e9c7b0d460f970722192550f75a4f3f54612b97fcf9ed9238"}, + "webReport": {"path": "tests/golden/M16-GAP-00069/grease-pencil-tint-modifier-local-exact-report.json", "sha256": "44d113b3d6c291a18401d6dadbf915dfb907413c8ed96e092011484879f5e050"} + }, + "nextTask": "M16-GAP-00070" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00070/grease-pencil-vertex-weight-angle-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00070/grease-pencil-vertex-weight-angle-modifier-desktop-report.json new file mode 100644 index 00000000..d7cbc00a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00070/grease-pencil-vertex-weight-angle-modifier-desktop-report.json @@ -0,0 +1,22 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00070-modifier-GREASE_PENCIL_VERTEX_WEIGHT_ANGLE.blend", + "fixtureSha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "modifier": { + "modifier": { + "name": "Gp Vertex Weight Angle", + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_VERTEX_WEIGHT_ANGLE", + "typeCode": 74 + }, + "objectId": "object:GreasePencilObject", + "task": "M16-GAP-00070" + }, + "operation": "GREASE_PENCIL_VERTEX_WEIGHT_ANGLE_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00070" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00070/grease-pencil-vertex-weight-angle-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00070/grease-pencil-vertex-weight-angle-modifier-local-exact-report.json new file mode 100644 index 00000000..dc1354c9 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00070/grease-pencil-vertex-weight-angle-modifier-local-exact-report.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00070", + "operation": "GREASE_PENCIL_VERTEX_WEIGHT_ANGLE_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00070-modifier-GREASE_PENCIL_VERTEX_WEIGHT_ANGLE.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00070/grease-pencil-vertex-weight-angle-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:GreasePencilObject", + "modifier": { + "dependsOn": [ + "modifier:object:GreasePencilObject:398704216" + ], + "enabled": false, + "evaluationStatus": "BLOCKED", + "name": "Gp Vertex Weight Angle", + "parameters": { + "flag": 1, + "mode": 6, + "persistentUid": 1435285600, + "typeCode": 74 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_VERTEX_WEIGHT_ANGLE", + "uuid": "modifier:object:GreasePencilObject:1435285600" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00071" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00070/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00070/manifest.json new file mode 100644 index 00000000..37da7855 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00070/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00070", + "parentTask": "M16-GAP-00069", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_VERTEX_WEIGHT_ANGLE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00069/manifest.json", "sha256": "5fae5d038ddc45dcd45a7a34d4194d8dd0d3e037cac84a6803ae28a49034ad02"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00070-modifier-GREASE_PENCIL_VERTEX_WEIGHT_ANGLE.blend", "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401"}, + "generator": {"path": "tools/web/generated/M16-GAP-00070.py", "sha256": "777e53fca82084ced7003328672cda678c8480db9c56c07517a19609ae353ecf"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "58cdbe34c1b5c3bd8b0f8ef5144ae8f1b6af8ff51a336862a9001bff79cec82b"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "90fa485cd6cc28d08e8f7ac8433f2e1ee1a88503ed6358d25ffea6f6ad18e5fb"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "90fa485cd6cc28d08e8f7ac8433f2e1ee1a88503ed6358d25ffea6f6ad18e5fb"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00070/grease-pencil-vertex-weight-angle-modifier-desktop-report.json", "sha256": "0c3fdcbf998064e77023d66239a6f0e9763cba14aced60d6d71bfd8968844e66"}, + "webReport": {"path": "tests/golden/M16-GAP-00070/grease-pencil-vertex-weight-angle-modifier-local-exact-report.json", "sha256": "79d31b01cb87a8a380d4e84ea69e9b3f19b5109029ad4c1193d15ab6058b8d01"} + }, + "nextTask": "M16-GAP-00071" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00071/grease-pencil-vertex-weight-proximity-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00071/grease-pencil-vertex-weight-proximity-modifier-desktop-report.json new file mode 100644 index 00000000..6a409b8f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00071/grease-pencil-vertex-weight-proximity-modifier-desktop-report.json @@ -0,0 +1,22 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00071-modifier-GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY.blend", + "fixtureSha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "modifier": { + "modifier": { + "name": "Gp Vertex Weight Proximity", + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY", + "typeCode": 76 + }, + "objectId": "object:GreasePencilObject", + "task": "M16-GAP-00071" + }, + "operation": "GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00071" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00071/grease-pencil-vertex-weight-proximity-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00071/grease-pencil-vertex-weight-proximity-modifier-local-exact-report.json new file mode 100644 index 00000000..55e1d993 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00071/grease-pencil-vertex-weight-proximity-modifier-local-exact-report.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00071", + "operation": "GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00071-modifier-GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00071/grease-pencil-vertex-weight-proximity-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:GreasePencilObject", + "modifier": { + "dependsOn": [ + "modifier:object:GreasePencilObject:1435285600" + ], + "enabled": false, + "evaluationStatus": "BLOCKED", + "name": "Gp Vertex Weight Proximity", + "parameters": { + "flag": 1, + "mode": 6, + "persistentUid": 41013787, + "typeCode": 76 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY", + "uuid": "modifier:object:GreasePencilObject:41013787" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00072" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00071/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00071/manifest.json new file mode 100644 index 00000000..ed056e9d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00071/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00071", + "parentTask": "M16-GAP-00070", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00070/manifest.json", "sha256": "5fae5d038ddc45dcd45a7a34d4194d8dd0d3e037cac84a6803ae28a49034ad02"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00071-modifier-GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY.blend", "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401"}, + "generator": {"path": "tools/web/generated/M16-GAP-00071.py", "sha256": "d811aa0a430d7fb4db838627e8e71fa1ec812ec932d894512acf24a2d98ac6dd"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "3f82ae54142cdae93c0d65765b2b8f3b46b8bbbe4c838f3a21365dc86d0e56ed"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "58cdbe34c1b5c3bd8b0f8ef5144ae8f1b6af8ff51a336862a9001bff79cec82b"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "90fa485cd6cc28d08e8f7ac8433f2e1ee1a88503ed6358d25ffea6f6ad18e5fb"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "90fa485cd6cc28d08e8f7ac8433f2e1ee1a88503ed6358d25ffea6f6ad18e5fb"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00071/grease-pencil-vertex-weight-proximity-modifier-desktop-report.json", "sha256": "bfb4354d4b25894879f6cd15f1f9758eeebc88aef6c45237ffebd16bb670ffdd"}, + "webReport": {"path": "tests/golden/M16-GAP-00071/grease-pencil-vertex-weight-proximity-modifier-local-exact-report.json", "sha256": "08a439a692bc167a2dff093527586132b3e1baca4a8d7be4dfd47cfe18a04bd9"} + }, + "nextTask": "M16-GAP-00072" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00072/hook-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00072/hook-modifier-desktop-report.json new file mode 100644 index 00000000..f63b6329 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00072/hook-modifier-desktop-report.json @@ -0,0 +1,23 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00072-modifier-HOOK.blend", + "fixtureSha256": "9fee2803c1400f07d4a58fb05a708b8e5bdf878820d636c57cecbb6deda9adec", + "modifier": { + "meshId": "mesh:WebGapHookObjectMesh", + "modifier": { + "name": "WebGapHook", + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "type": "HOOK", + "typeCode": 9 + }, + "objectId": "object:WebGapHookObject", + "task": "M16-GAP-00072" + }, + "operation": "HOOK_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00072" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00072/hook-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00072/hook-modifier-local-exact-report.json new file mode 100644 index 00000000..6b343aa1 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00072/hook-modifier-local-exact-report.json @@ -0,0 +1,47 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00072", + "operation": "HOOK_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00072-modifier-HOOK.blend", + "sha256": "9fee2803c1400f07d4a58fb05a708b8e5bdf878820d636c57cecbb6deda9adec" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00072/hook-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapHookObject", + "meshId": "mesh:WebGapHookObjectMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "METADATA_ONLY", + "name": "WebGapHook", + "parameters": { + "falloff": 0, + "falloffType": 3, + "flag": 5, + "force": 1, + "mode": 3, + "persistentUid": 1366665389, + "subtarget": "", + "typeCode": 9, + "vertexGroup": "" + }, + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "type": "HOOK", + "uuid": "modifier:object:WebGapHookObject:1366665389" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00073" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00072/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00072/manifest.json new file mode 100644 index 00000000..fe51b7ea --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00072/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00072", + "parentTask": "M16-GAP-00071", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "HOOK_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00071/manifest.json", "sha256": "4415489e0e4d4ca2e5a81de4e74a9c17dcad65f94b30a95557c168ec1b0af9f7"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00072-modifier-HOOK.blend", "sha256": "9fee2803c1400f07d4a58fb05a708b8e5bdf878820d636c57cecbb6deda9adec"}, + "generator": {"path": "tools/web/generated/M16-GAP-00072.py", "sha256": "239d1ec0c9cb68b93e48becd7451a80fcbead84430cb3de2fb7545a9da658bcf"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "a97a8b1b243dcf8ec6506280cc0c6e33a4c89f28b40f6b44b99a470fdf705224"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "58cdbe34c1b5c3bd8b0f8ef5144ae8f1b6af8ff51a336862a9001bff79cec82b"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "90fa485cd6cc28d08e8f7ac8433f2e1ee1a88503ed6358d25ffea6f6ad18e5fb"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "90fa485cd6cc28d08e8f7ac8433f2e1ee1a88503ed6358d25ffea6f6ad18e5fb"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00072/hook-modifier-desktop-report.json", "sha256": "819375aad6fbf6814a1fe85802472d12df216a205067f5ee0e132a8d383f247d"}, + "webReport": {"path": "tests/golden/M16-GAP-00072/hook-modifier-local-exact-report.json", "sha256": "929d2a3e679e4972149ffac8ff1a7d692452cb9b1029418eea86434aa8d4c6d1"} + }, + "nextTask": "M16-GAP-00073" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00073/laplaciandeform-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00073/laplaciandeform-modifier-desktop-report.json new file mode 100644 index 00000000..c0b17b8e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00073/laplaciandeform-modifier-desktop-report.json @@ -0,0 +1,23 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00073-modifier-LAPLACIANDEFORM.blend", + "fixtureSha256": "d4a01fc520b4641442f56506a5a320d4c4efee57fcec779021cc10d17d62e1e0", + "modifier": { + "meshId": "mesh:WebGapLaplacianDeformObjectMesh", + "modifier": { + "name": "WebGapLaplacianDeform", + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "type": "LAPLACIANDEFORM", + "typeCode": 47 + }, + "objectId": "object:WebGapLaplacianDeformObject", + "task": "M16-GAP-00073" + }, + "operation": "LAPLACIANDEFORM_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00073" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00073/laplaciandeform-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00073/laplaciandeform-modifier-local-exact-report.json new file mode 100644 index 00000000..94890c66 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00073/laplaciandeform-modifier-local-exact-report.json @@ -0,0 +1,42 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00073", + "operation": "LAPLACIANDEFORM_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00073-modifier-LAPLACIANDEFORM.blend", + "sha256": "d4a01fc520b4641442f56506a5a320d4c4efee57fcec779021cc10d17d62e1e0" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00073/laplaciandeform-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapLaplacianDeformObject", + "meshId": "mesh:WebGapLaplacianDeformObjectMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "BLOCKED", + "name": "WebGapLaplacianDeform", + "parameters": { + "flag": 5, + "mode": 3, + "persistentUid": 540311675, + "typeCode": 47 + }, + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "type": "LAPLACIANDEFORM", + "uuid": "modifier:object:WebGapLaplacianDeformObject:540311675" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00074" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00073/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00073/manifest.json new file mode 100644 index 00000000..2985f72c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00073/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00073", + "parentTask": "M16-GAP-00072", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "LAPLACIANDEFORM_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00072/manifest.json", "sha256": "574f682ccb0d9a56a04955b3cb493a368bf83eafdd85d9ecd4163f7c68bfbf7f"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00073-modifier-LAPLACIANDEFORM.blend", "sha256": "d4a01fc520b4641442f56506a5a320d4c4efee57fcec779021cc10d17d62e1e0"}, + "generator": {"path": "tools/web/generated/M16-GAP-00073.py", "sha256": "ce9be025d573d87c48bd4975f4cee1c343749156d163abe51a04a05e9d951ad5"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "1ee93d0a8b8fdedcbf2dff3f0977e58c6df3b51ca7e99bd90a13dcdedcc5544f"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "18a9bc7da9fc34af34047add1ea16edf5151639cec30e0de053787e82926650d"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "044fb847f05663f644e3429f9c5d0ff0555f9e8899c3e2d19c925c4fa7546bed"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "044fb847f05663f644e3429f9c5d0ff0555f9e8899c3e2d19c925c4fa7546bed"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00073/laplaciandeform-modifier-desktop-report.json", "sha256": "20b1fa4731e697c539cbeda56daf567a39ea0e4157519480400d3aa0116b5d9c"}, + "webReport": {"path": "tests/golden/M16-GAP-00073/laplaciandeform-modifier-local-exact-report.json", "sha256": "4661ab5868a5664206f47bebbc93f6f0cc4dcaab362f45d59540c8900a3c4ca2"} + }, + "nextTask": "M16-GAP-00074" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00074/laplaciansmooth-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00074/laplaciansmooth-modifier-desktop-report.json new file mode 100644 index 00000000..04d2d728 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00074/laplaciansmooth-modifier-desktop-report.json @@ -0,0 +1,23 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00074-modifier-LAPLACIANSMOOTH.blend", + "fixtureSha256": "0f1ff155e600a04f0a717584716ae1ca5811ed9642354494a26c2a8d90590b99", + "modifier": { + "meshId": "mesh:WebGapLaplacianSmoothObjectMesh", + "modifier": { + "name": "WebGapLaplacianSmooth", + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "type": "LAPLACIANSMOOTH", + "typeCode": 43 + }, + "objectId": "object:WebGapLaplacianSmoothObject", + "task": "M16-GAP-00074" + }, + "operation": "LAPLACIANSMOOTH_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00074" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00074/laplaciansmooth-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00074/laplaciansmooth-modifier-local-exact-report.json new file mode 100644 index 00000000..20a25ce0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00074/laplaciansmooth-modifier-local-exact-report.json @@ -0,0 +1,42 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00074", + "operation": "LAPLACIANSMOOTH_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00074-modifier-LAPLACIANSMOOTH.blend", + "sha256": "0f1ff155e600a04f0a717584716ae1ca5811ed9642354494a26c2a8d90590b99" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00074/laplaciansmooth-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapLaplacianSmoothObject", + "meshId": "mesh:WebGapLaplacianSmoothObjectMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "BLOCKED", + "name": "WebGapLaplacianSmooth", + "parameters": { + "flag": 5, + "mode": 3, + "persistentUid": 333350440, + "typeCode": 43 + }, + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "type": "LAPLACIANSMOOTH", + "uuid": "modifier:object:WebGapLaplacianSmoothObject:333350440" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00075" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00074/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00074/manifest.json new file mode 100644 index 00000000..c2a9e39e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00074/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00074", + "parentTask": "M16-GAP-00073", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "LAPLACIANSMOOTH_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00073/manifest.json", "sha256": "898c103c060209a2faaef4d07123b1dc9d654ed7bfba98c43a5b97c3b6571292"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00074-modifier-LAPLACIANSMOOTH.blend", "sha256": "0f1ff155e600a04f0a717584716ae1ca5811ed9642354494a26c2a8d90590b99"}, + "generator": {"path": "tools/web/generated/M16-GAP-00074.py", "sha256": "c4d29eb33cf3abbca68333cf064e634a6202889170f20eb0d47868cacbd47cc7"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "bf521a6f9e64c1f50e7238179b9ed8d94e955a21131a8566f75a0e3c81fd9789"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "db4807b05b0c71658115e321712b9b46cbd3bf814c96a56d3c0766f97fe98f7e"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "a1c778de8f065de2a54ee300deeff142f4a60629d57b61cbe8d46c8cc8a1fe2c"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "a1c778de8f065de2a54ee300deeff142f4a60629d57b61cbe8d46c8cc8a1fe2c"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00074/laplaciansmooth-modifier-desktop-report.json", "sha256": "9aa6928bb41744895ec5d471a3c290d5880d75357f556c310f692dfbf0c587a6"}, + "webReport": {"path": "tests/golden/M16-GAP-00074/laplaciansmooth-modifier-local-exact-report.json", "sha256": "0ae4447208034f80469647e51469225032cb0e8f40b6e887d2aa66888d8b9d65"} + }, + "nextTask": "M16-GAP-00075" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00075/lattice-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00075/lattice-modifier-desktop-report.json new file mode 100644 index 00000000..38adbec2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00075/lattice-modifier-desktop-report.json @@ -0,0 +1,23 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00075-modifier-LATTICE.blend", + "fixtureSha256": "907149629b82fb0289da70535b29cea8bae0b24d745b92c0d4116a3a24b95494", + "modifier": { + "meshId": "mesh:WebGapLatticeModifierObjectMesh", + "modifier": { + "name": "WebGapLatticeModifier", + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "type": "LATTICE", + "typeCode": 2 + }, + "objectId": "object:WebGapLatticeModifierObject", + "task": "M16-GAP-00075" + }, + "operation": "LATTICE_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00075" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00075/lattice-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00075/lattice-modifier-local-exact-report.json new file mode 100644 index 00000000..d3f6d3af --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00075/lattice-modifier-local-exact-report.json @@ -0,0 +1,45 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00075", + "operation": "LATTICE_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00075-modifier-LATTICE.blend", + "sha256": "907149629b82fb0289da70535b29cea8bae0b24d745b92c0d4116a3a24b95494" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00075/lattice-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapLatticeModifierObject", + "meshId": "mesh:WebGapLatticeModifierObjectMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "METADATA_ONLY", + "name": "WebGapLatticeModifier", + "parameters": { + "flag": 5, + "latticeFlags": 0, + "mode": 3, + "persistentUid": 140212469, + "strength": 1, + "typeCode": 2, + "vertexGroup": "" + }, + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": true, + "type": "LATTICE", + "uuid": "modifier:object:WebGapLatticeModifierObject:140212469" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00076" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00075/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00075/manifest.json new file mode 100644 index 00000000..a03bc185 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00075/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00075", + "parentTask": "M16-GAP-00074", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "LATTICE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00074/manifest.json", "sha256": "93125c3550c043e2c07c50d99c9b683214d851000cc7e7030b0cc118a4031622"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00075-modifier-LATTICE.blend", "sha256": "907149629b82fb0289da70535b29cea8bae0b24d745b92c0d4116a3a24b95494"}, + "generator": {"path": "tools/web/generated/M16-GAP-00075.py", "sha256": "d5d161608d986e04d66afb8871ef34eae2c27bbf8fe654b2982c6a10553150eb"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "1f97a64d7798ddd4f06af5953d79f882ae5fc2e29eedbe5746297c3df9d189e7"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "db4807b05b0c71658115e321712b9b46cbd3bf814c96a56d3c0766f97fe98f7e"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "a1c778de8f065de2a54ee300deeff142f4a60629d57b61cbe8d46c8cc8a1fe2c"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "a1c778de8f065de2a54ee300deeff142f4a60629d57b61cbe8d46c8cc8a1fe2c"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00075/lattice-modifier-desktop-report.json", "sha256": "c06a312fdf79abca4eb6560e271e62adfdc79e4b8fd61db57cf53c148195cd6a"}, + "webReport": {"path": "tests/golden/M16-GAP-00075/lattice-modifier-local-exact-report.json", "sha256": "62bf9e34273df25cddda1f64b614626cac4163e861c253cb44b39624390266f5"} + }, + "nextTask": "M16-GAP-00076" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00076/lineart-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00076/lineart-modifier-desktop-report.json new file mode 100644 index 00000000..548c1303 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00076/lineart-modifier-desktop-report.json @@ -0,0 +1,22 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00076-modifier-LINEART.blend", + "fixtureSha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "modifier": { + "modifier": { + "name": "Lineart", + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "LINEART", + "typeCode": 78 + }, + "objectId": "object:GreasePencilObject", + "task": "M16-GAP-00076" + }, + "operation": "LINEART_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00076" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00076/lineart-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00076/lineart-modifier-local-exact-report.json new file mode 100644 index 00000000..61b20bbd --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00076/lineart-modifier-local-exact-report.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00076", + "operation": "LINEART_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00076-modifier-LINEART.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00076/lineart-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:GreasePencilObject", + "modifier": { + "dependsOn": [ + "modifier:object:GreasePencilObject:41013787" + ], + "enabled": false, + "evaluationStatus": "BLOCKED", + "name": "Lineart", + "parameters": { + "flag": 5, + "mode": 2, + "persistentUid": 1154420608, + "typeCode": 78 + }, + "showEditMode": false, + "showOnCage": false, + "showRender": true, + "showViewport": false, + "type": "LINEART", + "uuid": "modifier:object:GreasePencilObject:1154420608" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00077" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00076/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00076/manifest.json new file mode 100644 index 00000000..69779859 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00076/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00076", + "parentTask": "M16-GAP-00075", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "LINEART_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00075/manifest.json", "sha256": "9d518397037f8776147f7d261003a191274ee82f9c20b3de036e6b1f7d33fe20"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00076-modifier-LINEART.blend", "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401"}, + "generator": {"path": "tools/web/generated/M16-GAP-00076.py", "sha256": "45797f19ee517501033c3c95e79f13f4fc7f8699c17ecacc54367b3932ffa63d"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "4c7a6ade30979ed209df8114e03c8194e74a734c3d99130f8be3e838bb3d6c7a"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "dbab2a2dab2485d870fe827fed017c6d43659a3adc266ac94c2e4a663ef128a6"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00076/lineart-modifier-desktop-report.json", "sha256": "dfc59d7f349a96352e9b7147cf2745754664513b17f8541828552cd04d6e2434"}, + "webReport": {"path": "tests/golden/M16-GAP-00076/lineart-modifier-local-exact-report.json", "sha256": "b97956de8af04e761d23e69c7c40f31ddfafe0fa54e600123154c77a74ee41f1"} + }, + "nextTask": "M16-GAP-00077" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00077/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00077/manifest.json new file mode 100644 index 00000000..89327b20 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00077/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00077", + "parentTask": "M16-GAP-00076", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "MASK_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00076/manifest.json", "sha256": "cbf9772af4492d6c4f9abf43a14a8c0137ab08e20a6a308c0d863291524f8596"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00077-modifier-MASK.blend", "sha256": "62d3740eb3c43d79fa8018e992d0f21dc1b0efac5f8e41965a9564e0c765deee"}, + "generator": {"path": "tools/web/generated/M16-GAP-00077.py", "sha256": "b3b946e1348773aafd1df5c9aa192e566e79adaf06112e23e2d7a00c6c6fde01"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "a297d2148320fd5a12441b951b56c11b20d8c518e993095828681c0bc65b9988"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "dbab2a2dab2485d870fe827fed017c6d43659a3adc266ac94c2e4a663ef128a6"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00077/mask-modifier-desktop-report.json", "sha256": "b727c810beee272ab8f70754d50aed53404ec5a5d9147f912d6f880d1554576f"}, + "webReport": {"path": "tests/golden/M16-GAP-00077/mask-modifier-local-exact-report.json", "sha256": "ef4b6d8b4c1fb2d336fafebe4f232478704d442d8b166305d8c0dbed0523bed6"} + }, + "nextTask": "M16-GAP-00078" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00077/mask-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00077/mask-modifier-desktop-report.json new file mode 100644 index 00000000..9ba279f8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00077/mask-modifier-desktop-report.json @@ -0,0 +1,23 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00077-modifier-MASK.blend", + "fixtureSha256": "62d3740eb3c43d79fa8018e992d0f21dc1b0efac5f8e41965a9564e0c765deee", + "modifier": { + "meshId": "mesh:WebGapMaskMesh", + "modifier": { + "name": "WebGapMask", + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "MASK", + "typeCode": 27 + }, + "objectId": "object:WebGapMaskObject", + "task": "M16-GAP-00077" + }, + "operation": "MASK_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00077" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00077/mask-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00077/mask-modifier-local-exact-report.json new file mode 100644 index 00000000..8c137ee0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00077/mask-modifier-local-exact-report.json @@ -0,0 +1,42 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00077", + "operation": "MASK_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00077-modifier-MASK.blend", + "sha256": "62d3740eb3c43d79fa8018e992d0f21dc1b0efac5f8e41965a9564e0c765deee" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00077/mask-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapMaskObject", + "meshId": "mesh:WebGapMaskMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "BLOCKED", + "name": "WebGapMask", + "parameters": { + "flag": 5, + "mode": 1, + "persistentUid": 951641420, + "typeCode": 27 + }, + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "MASK", + "uuid": "modifier:object:WebGapMaskObject:951641420" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00078" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00078/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00078/manifest.json new file mode 100644 index 00000000..cb419e54 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00078/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00078", + "parentTask": "M16-GAP-00077", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "MESH_CACHE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00077/manifest.json", "sha256": "260a2e5906d78901cba540fab58252eba893f29f0e27b9a214e720ed20c6ed52"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00078-modifier-MESH_CACHE.blend", "sha256": "7c381314e4b8c95aa2b01acbd2f8ec0664bb27264dd6c6dd6456602adc42f6e8"}, + "generator": {"path": "tools/web/generated/M16-GAP-00078.py", "sha256": "614c0b5bc0bfe91fe29a956067e1cef0ffc1b6a072e4178682323143a86861e1"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "688b120a7679f0bdd8661c0da114b68d94588de1d1598f75932ced1cb43a8a98"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "dbab2a2dab2485d870fe827fed017c6d43659a3adc266ac94c2e4a663ef128a6"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00078/mesh-cache-modifier-desktop-report.json", "sha256": "4f78ab7adae556fb49dfde5b4c4e95f9bb0c2777c8425bc48d410955d9686d46"}, + "webReport": {"path": "tests/golden/M16-GAP-00078/mesh-cache-modifier-local-exact-report.json", "sha256": "6d6baa891a387fe56c4ee27c3bc5bde6ecb28f6a6e71f49c1560fe04b26d24df"} + }, + "nextTask": "M16-GAP-00079" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00078/mesh-cache-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00078/mesh-cache-modifier-desktop-report.json new file mode 100644 index 00000000..01b70550 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00078/mesh-cache-modifier-desktop-report.json @@ -0,0 +1,23 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00078-modifier-MESH_CACHE.blend", + "fixtureSha256": "7c381314e4b8c95aa2b01acbd2f8ec0664bb27264dd6c6dd6456602adc42f6e8", + "modifier": { + "meshId": "mesh:WebGapMeshCacheMesh", + "modifier": { + "name": "WebGapMeshCache", + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "MESH_CACHE", + "typeCode": 46 + }, + "objectId": "object:WebGapMeshCacheObject", + "task": "M16-GAP-00078" + }, + "operation": "MESH_CACHE_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00078" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00078/mesh-cache-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00078/mesh-cache-modifier-local-exact-report.json new file mode 100644 index 00000000..7c3d7457 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00078/mesh-cache-modifier-local-exact-report.json @@ -0,0 +1,42 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00078", + "operation": "MESH_CACHE_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00078-modifier-MESH_CACHE.blend", + "sha256": "7c381314e4b8c95aa2b01acbd2f8ec0664bb27264dd6c6dd6456602adc42f6e8" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00078/mesh-cache-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapMeshCacheObject", + "meshId": "mesh:WebGapMeshCacheMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "BLOCKED", + "name": "WebGapMeshCache", + "parameters": { + "flag": 5, + "mode": 1, + "persistentUid": 1768478037, + "typeCode": 46 + }, + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "MESH_CACHE", + "uuid": "modifier:object:WebGapMeshCacheObject:1768478037" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00079" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00079/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00079/manifest.json new file mode 100644 index 00000000..b9be6d55 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00079/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00079", + "parentTask": "M16-GAP-00078", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "MESH_DEFORM_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00078/manifest.json", "sha256": "a2da8c09eda6ee4420430f5c0bebb9c6c003de59d592e5a2978e029d6451dea5"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00079-modifier-MESH_DEFORM.blend", "sha256": "91d67a1b79c80b452e0637bc515030c8d8a2bb23d88399029ca57160f7facf20"}, + "generator": {"path": "tools/web/generated/M16-GAP-00079.py", "sha256": "06ae4b6e3e7f9fa3a2a999bdd916ff3f8b482bb44e2971d4775e5fc3a1fd41eb"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "a5fed29c014a8f471d49cd7350850d3cbafa7d36422dc009a88a4995f177f994"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "dbab2a2dab2485d870fe827fed017c6d43659a3adc266ac94c2e4a663ef128a6"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00079/mesh-deform-modifier-desktop-report.json", "sha256": "8f7ae61828ea8395a3dd1a5f01ccef9e634b03cf831b2d80f891c2db434190af"}, + "webReport": {"path": "tests/golden/M16-GAP-00079/mesh-deform-modifier-local-exact-report.json", "sha256": "6a2be2737f7510539d27d0504b47012dc801b5a3b428f1ab6f2264f4df2ded87"} + }, + "nextTask": "M16-GAP-00080" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00079/mesh-deform-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00079/mesh-deform-modifier-desktop-report.json new file mode 100644 index 00000000..0b57904c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00079/mesh-deform-modifier-desktop-report.json @@ -0,0 +1,23 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00079-modifier-MESH_DEFORM.blend", + "fixtureSha256": "91d67a1b79c80b452e0637bc515030c8d8a2bb23d88399029ca57160f7facf20", + "modifier": { + "meshId": "mesh:WebGapMeshDeformMesh", + "modifier": { + "name": "WebGapMeshDeform", + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "MESH_DEFORM", + "typeCode": 18 + }, + "objectId": "object:WebGapMeshDeformObject", + "task": "M16-GAP-00079" + }, + "operation": "MESH_DEFORM_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00079" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00079/mesh-deform-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00079/mesh-deform-modifier-local-exact-report.json new file mode 100644 index 00000000..6e7a48b4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00079/mesh-deform-modifier-local-exact-report.json @@ -0,0 +1,45 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00079", + "operation": "MESH_DEFORM_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00079-modifier-MESH_DEFORM.blend", + "sha256": "91d67a1b79c80b452e0637bc515030c8d8a2bb23d88399029ca57160f7facf20" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00079/mesh-deform-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapMeshDeformObject", + "meshId": "mesh:WebGapMeshDeformMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "METADATA_ONLY", + "name": "WebGapMeshDeform", + "parameters": { + "flag": 5, + "gridSize": 5, + "meshDeformFlags": 0, + "mode": 1, + "persistentUid": 2036773551, + "typeCode": 18, + "vertexGroup": "" + }, + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "MESH_DEFORM", + "uuid": "modifier:object:WebGapMeshDeformObject:2036773551" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00080" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00080/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00080/manifest.json new file mode 100644 index 00000000..d167c0ed --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00080/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00080", + "parentTask": "M16-GAP-00079", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "MESH_SEQUENCE_CACHE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00079/manifest.json", "sha256": "25145a8a88ddeb465b4e90f6e1ffc194491dfd1e491d443fec3f6338896199b7"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00080-modifier-MESH_SEQUENCE_CACHE.blend", "sha256": "817ed4b1a395d83b8166c84206f6dd7fef22a7c1dd8b62f85414125f4a5a927b"}, + "generator": {"path": "tools/web/generated/M16-GAP-00080.py", "sha256": "394a6517eeeb12cc033b7ae43d4cebd8d99a2c31077486909ca65613da51f0ec"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "b44d38ff7b8aaa22169a317987f3bdce969eb16fb7d2419ddac600ce735369b1"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "dbab2a2dab2485d870fe827fed017c6d43659a3adc266ac94c2e4a663ef128a6"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00080/mesh-sequence-cache-modifier-desktop-report.json", "sha256": "0dfdf7f2e779c96397d0686f0d8ef9ba21e017c80a47da1b04639721942f3b2a"}, + "webReport": {"path": "tests/golden/M16-GAP-00080/mesh-sequence-cache-modifier-local-exact-report.json", "sha256": "086758c58ae3b0b7124fd35b802d8ec3ad3254ff8e71f668ff976e05725a3a31"} + }, + "nextTask": "M16-GAP-00081" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00080/mesh-sequence-cache-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00080/mesh-sequence-cache-modifier-desktop-report.json new file mode 100644 index 00000000..b2e6e0e5 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00080/mesh-sequence-cache-modifier-desktop-report.json @@ -0,0 +1,23 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00080-modifier-MESH_SEQUENCE_CACHE.blend", + "fixtureSha256": "817ed4b1a395d83b8166c84206f6dd7fef22a7c1dd8b62f85414125f4a5a927b", + "modifier": { + "meshId": "mesh:WebGapMeshSequenceCacheMesh", + "modifier": { + "name": "WebGapMeshSequenceCache", + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "MESH_SEQUENCE_CACHE", + "typeCode": 52 + }, + "objectId": "object:WebGapMeshSequenceCacheObject", + "task": "M16-GAP-00080" + }, + "operation": "MESH_SEQUENCE_CACHE_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00080" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00080/mesh-sequence-cache-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00080/mesh-sequence-cache-modifier-local-exact-report.json new file mode 100644 index 00000000..5f7eb298 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00080/mesh-sequence-cache-modifier-local-exact-report.json @@ -0,0 +1,42 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00080", + "operation": "MESH_SEQUENCE_CACHE_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00080-modifier-MESH_SEQUENCE_CACHE.blend", + "sha256": "817ed4b1a395d83b8166c84206f6dd7fef22a7c1dd8b62f85414125f4a5a927b" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00080/mesh-sequence-cache-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapMeshSequenceCacheObject", + "meshId": "mesh:WebGapMeshSequenceCacheMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "BLOCKED", + "name": "WebGapMeshSequenceCache", + "parameters": { + "flag": 5, + "mode": 1, + "persistentUid": 1351715239, + "typeCode": 52 + }, + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "MESH_SEQUENCE_CACHE", + "uuid": "modifier:object:WebGapMeshSequenceCacheObject:1351715239" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00081" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00081/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00081/manifest.json new file mode 100644 index 00000000..ed0a2a6d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00081/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00081", + "parentTask": "M16-GAP-00080", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "MESH_TO_VOLUME_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00080/manifest.json", "sha256": "b8f2e61553de96ae88741ad60e94995faff014cfca357d379393365c1819a100"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00081-modifier-MESH_TO_VOLUME.blend", "sha256": "52ab00ddd22c609f59f06c3747700b17f5b970ee4980dd287076446d289439db"}, + "generator": {"path": "tools/web/generated/M16-GAP-00081.py", "sha256": "a6d2734582c3e8f746267b682bddd0356a231609162f40cebb79484e47e4ef42"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "e6a10f733a2de8133cbb0aed28862fad694cb680f0972d58031fa7c1081a526e"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "dbab2a2dab2485d870fe827fed017c6d43659a3adc266ac94c2e4a663ef128a6"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00081/mesh-to-volume-modifier-desktop-report.json", "sha256": "0a485f27d6f6246d74e3737b8b945715fca96f343a675257dab9abb70319bb1d"}, + "webReport": {"path": "tests/golden/M16-GAP-00081/mesh-to-volume-modifier-local-exact-report.json", "sha256": "af033e5bd3d0491f464db098661621f0ac32afdcbed61a76614f4f06125559aa"} + }, + "nextTask": "M16-GAP-00082" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00081/mesh-to-volume-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00081/mesh-to-volume-modifier-desktop-report.json new file mode 100644 index 00000000..0b6ef955 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00081/mesh-to-volume-modifier-desktop-report.json @@ -0,0 +1,22 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00081-modifier-MESH_TO_VOLUME.blend", + "fixtureSha256": "52ab00ddd22c609f59f06c3747700b17f5b970ee4980dd287076446d289439db", + "modifier": { + "modifier": { + "name": "WebGapMeshToVolume", + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "MESH_TO_VOLUME", + "typeCode": 58 + }, + "objectId": "object:WebGapMeshToVolumeObject", + "task": "M16-GAP-00081" + }, + "operation": "MESH_TO_VOLUME_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00081" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00081/mesh-to-volume-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00081/mesh-to-volume-modifier-local-exact-report.json new file mode 100644 index 00000000..b4f4bc7f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00081/mesh-to-volume-modifier-local-exact-report.json @@ -0,0 +1,41 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00081", + "operation": "MESH_TO_VOLUME_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00081-modifier-MESH_TO_VOLUME.blend", + "sha256": "52ab00ddd22c609f59f06c3747700b17f5b970ee4980dd287076446d289439db" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00081/mesh-to-volume-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapMeshToVolumeObject", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "BLOCKED", + "name": "WebGapMeshToVolume", + "parameters": { + "flag": 5, + "mode": 1, + "persistentUid": 569533986, + "typeCode": 58 + }, + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "MESH_TO_VOLUME", + "uuid": "modifier:object:WebGapMeshToVolumeObject:569533986" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00082" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00082/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00082/manifest.json new file mode 100644 index 00000000..572df023 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00082/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00082", + "parentTask": "M16-GAP-00081", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "MIRROR_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00081/manifest.json", "sha256": "7c490963a0da309cdd3efdaf7897078c6f34afc9e4564e90a6c1cdc1d968d29f"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00082-modifier-MIRROR.blend", "sha256": "0ef4742c3f30a3bbb59cd1924e99d22f57454c77e625c9ccb4ecd802559d8842"}, + "generator": {"path": "tools/web/generated/M16-GAP-00082.py", "sha256": "32c0bcc7edcf14fbbd9e12465ce61cb7e0d15c7754062096329ebd6d6cd9ee46"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "8c85a8294cb915c18c87102e52789cfc877b323b106ac273fa1e34d03ba58ef8"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "dbab2a2dab2485d870fe827fed017c6d43659a3adc266ac94c2e4a663ef128a6"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00082/mirror-modifier-desktop-report.json", "sha256": "cc149f9c8f6f3b59ebf0b07f891d8b023d889cf2f281a7f1fce9f0f62b72e2ee"}, + "webReport": {"path": "tests/golden/M16-GAP-00082/mirror-modifier-local-exact-report.json", "sha256": "a0d7259bba97e30b97d57b776e3b067cd4bbd7ed734fcd8867c24efa4b5c469d"} + }, + "nextTask": "M16-GAP-00083" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00082/mirror-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00082/mirror-modifier-desktop-report.json new file mode 100644 index 00000000..c8a45329 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00082/mirror-modifier-desktop-report.json @@ -0,0 +1,23 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00082-modifier-MIRROR.blend", + "fixtureSha256": "0ef4742c3f30a3bbb59cd1924e99d22f57454c77e625c9ccb4ecd802559d8842", + "modifier": { + "meshId": "mesh:WebGapMirrorMesh", + "modifier": { + "name": "WebGapMirror", + "showEditMode": true, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "MIRROR", + "typeCode": 5 + }, + "objectId": "object:WebGapMirrorObject", + "task": "M16-GAP-00082" + }, + "operation": "MIRROR_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00082" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00082/mirror-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00082/mirror-modifier-local-exact-report.json new file mode 100644 index 00000000..fd759b13 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00082/mirror-modifier-local-exact-report.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00082", + "operation": "MIRROR_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00082-modifier-MIRROR.blend", + "sha256": "0ef4742c3f30a3bbb59cd1924e99d22f57454c77e625c9ccb4ecd802559d8842" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00082/mirror-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapMirrorObject", + "meshId": "mesh:WebGapMirrorMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "METADATA_ONLY", + "name": "WebGapMirror", + "parameters": { + "flag": 72, + "mergeTolerance": 0.0010000000474974513, + "mode": 5, + "persistentUid": 1723713518, + "typeCode": 5 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "MIRROR", + "uuid": "modifier:object:WebGapMirrorObject:1723713518" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00083" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00083/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00083/manifest.json new file mode 100644 index 00000000..b99fa77d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00083/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00083", + "parentTask": "M16-GAP-00082", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "MULTIRES_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00082/manifest.json", "sha256": "bc9ff66b3d9c9e4615e36de8c374862dc36fc771b7ba9695b97df64cb1ba52c5"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00083-modifier-MULTIRES.blend", "sha256": "6cad4d91397b06ba4779ad5336056e7551774c4f96261f2e8d3dd729c81b7b52"}, + "generator": {"path": "tools/web/generated/M16-GAP-00083.py", "sha256": "43920644f5f247ca216205f3bbf3aa39568dc1a29b205bf5852a0fe6e803acab"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "290a1795cbf5b6e4f62070b19e7ffe76e431fcc270efa5f724d096133bc06ce2"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "dbab2a2dab2485d870fe827fed017c6d43659a3adc266ac94c2e4a663ef128a6"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00083/multires-modifier-desktop-report.json", "sha256": "ad00dd2b8cadad79107f8433f06324f05ff5cb9672ca31bbab358813a48d3eaf"}, + "webReport": {"path": "tests/golden/M16-GAP-00083/multires-modifier-local-exact-report.json", "sha256": "d6ec0b7cf1eba19e79174c8d137ec1dd92eca40b7438f1739ce74df18bf712bb"} + }, + "nextTask": "M16-GAP-00084" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00083/multires-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00083/multires-modifier-desktop-report.json new file mode 100644 index 00000000..5ffc8ba2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00083/multires-modifier-desktop-report.json @@ -0,0 +1,23 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00083-modifier-MULTIRES.blend", + "fixtureSha256": "6cad4d91397b06ba4779ad5336056e7551774c4f96261f2e8d3dd729c81b7b52", + "modifier": { + "meshId": "mesh:WebGapMultiresMesh", + "modifier": { + "name": "WebGapMultires", + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "MULTIRES", + "typeCode": 29 + }, + "objectId": "object:WebGapMultiresObject", + "task": "M16-GAP-00083" + }, + "operation": "MULTIRES_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00083" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00083/multires-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00083/multires-modifier-local-exact-report.json new file mode 100644 index 00000000..4133a247 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00083/multires-modifier-local-exact-report.json @@ -0,0 +1,42 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00083", + "operation": "MULTIRES_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00083-modifier-MULTIRES.blend", + "sha256": "6cad4d91397b06ba4779ad5336056e7551774c4f96261f2e8d3dd729c81b7b52" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00083/multires-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapMultiresObject", + "meshId": "mesh:WebGapMultiresMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "BLOCKED", + "name": "WebGapMultires", + "parameters": { + "flag": 5, + "mode": 1, + "persistentUid": 747602535, + "typeCode": 29 + }, + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "MULTIRES", + "uuid": "modifier:object:WebGapMultiresObject:747602535" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00084" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00084/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00084/manifest.json new file mode 100644 index 00000000..fb5a3b14 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00084/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00084", + "parentTask": "M16-GAP-00083", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "NODES_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00083/manifest.json", "sha256": "0b15ecd4d714c03caa302b6867727f07e7d9e18a0e6322faa778ed02e61a4525"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00084-modifier-NODES.blend", "sha256": "b8e7982ab3969a297ff8337fcdf966004e845189a2dfe5480ea60aecca3493b7"}, + "generator": {"path": "tools/web/generated/M16-GAP-00084.py", "sha256": "0b5d9510f41f00719d7ddd95d23fb5ee75a561bac8cdb65a1a66950c24366698"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "02de00f674caf609518157c8c33fa746fb3db5cea97cf7417a5b5c30a981edc7"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "dbab2a2dab2485d870fe827fed017c6d43659a3adc266ac94c2e4a663ef128a6"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00084/nodes-modifier-desktop-report.json", "sha256": "d5de72e4e7fd671474d0a385818337063952eecb3e765a694ddda811a420c9fc"}, + "webReport": {"path": "tests/golden/M16-GAP-00084/nodes-modifier-local-exact-report.json", "sha256": "987e987122bb5eac6f0208b0d453b59aa0b1e46888c17c68db1501fd04ed2432"} + }, + "nextTask": "M16-GAP-00085" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00084/nodes-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00084/nodes-modifier-desktop-report.json new file mode 100644 index 00000000..347327c5 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00084/nodes-modifier-desktop-report.json @@ -0,0 +1,23 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00084-modifier-NODES.blend", + "fixtureSha256": "b8e7982ab3969a297ff8337fcdf966004e845189a2dfe5480ea60aecca3493b7", + "modifier": { + "meshId": "mesh:WebGapNodesMesh", + "modifier": { + "name": "WebGapNodes", + "showEditMode": true, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "NODES", + "typeCode": 57 + }, + "objectId": "object:WebGapNodesObject", + "task": "M16-GAP-00084" + }, + "operation": "NODES_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00084" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00084/nodes-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00084/nodes-modifier-local-exact-report.json new file mode 100644 index 00000000..2c8d6be0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00084/nodes-modifier-local-exact-report.json @@ -0,0 +1,42 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00084", + "operation": "NODES_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00084-modifier-NODES.blend", + "sha256": "b8e7982ab3969a297ff8337fcdf966004e845189a2dfe5480ea60aecca3493b7" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00084/nodes-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapNodesObject", + "meshId": "mesh:WebGapNodesMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "METADATA_ONLY", + "name": "WebGapNodes", + "parameters": { + "flag": 5, + "mode": 5, + "persistentUid": 668223759, + "typeCode": 57 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "NODES", + "uuid": "modifier:object:WebGapNodesObject:668223759" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00085" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00085/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00085/manifest.json new file mode 100644 index 00000000..f29f61bc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00085/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00085", + "parentTask": "M16-GAP-00084", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "NORMAL_EDIT_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00084/manifest.json", "sha256": "6b45c2288c85824a9d3492f3dd5cdfba56df7f7a45d8e88bf410361876fd638b"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00085-modifier-NORMAL_EDIT.blend", "sha256": "e0d6b77f0bc97f682534efce4c0901a056bf5d9a104525e634c53284ddd858aa"}, + "generator": {"path": "tools/web/generated/M16-GAP-00085.py", "sha256": "6a88aac132385510134ec5df930649ec34398d57ef67a5176aec9fcf4ba2db3b"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "27868f23588271c779d753f63b99f11878d7e3b36c9fdd71750e5249daac4bb5"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "dbab2a2dab2485d870fe827fed017c6d43659a3adc266ac94c2e4a663ef128a6"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00085/normal-edit-modifier-desktop-report.json", "sha256": "cc4dfff0ac64efdd2e93eaee11fcfd7f9e2fe55fd4e21ea1e5f1a72dd14855cf"}, + "webReport": {"path": "tests/golden/M16-GAP-00085/normal-edit-modifier-local-exact-report.json", "sha256": "bbe513c4076d32a374083c0ae4ad6069e97f411a25bccb968e2f06c0b361da88"} + }, + "nextTask": "M16-GAP-00086" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00085/normal-edit-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00085/normal-edit-modifier-desktop-report.json new file mode 100644 index 00000000..895ee60d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00085/normal-edit-modifier-desktop-report.json @@ -0,0 +1,23 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00085-modifier-NORMAL_EDIT.blend", + "fixtureSha256": "e0d6b77f0bc97f682534efce4c0901a056bf5d9a104525e634c53284ddd858aa", + "modifier": { + "meshId": "mesh:WebGapNormalEditMesh", + "modifier": { + "name": "WebGapNormalEdit", + "showEditMode": true, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "NORMAL_EDIT", + "typeCode": 50 + }, + "objectId": "object:WebGapNormalEditObject", + "task": "M16-GAP-00085" + }, + "operation": "NORMAL_EDIT_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00085" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00085/normal-edit-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00085/normal-edit-modifier-local-exact-report.json new file mode 100644 index 00000000..4ac93a25 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00085/normal-edit-modifier-local-exact-report.json @@ -0,0 +1,42 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00085", + "operation": "NORMAL_EDIT_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00085-modifier-NORMAL_EDIT.blend", + "sha256": "e0d6b77f0bc97f682534efce4c0901a056bf5d9a104525e634c53284ddd858aa" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00085/normal-edit-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapNormalEditObject", + "meshId": "mesh:WebGapNormalEditMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "BLOCKED", + "name": "WebGapNormalEdit", + "parameters": { + "flag": 5, + "mode": 5, + "persistentUid": 63296176, + "typeCode": 50 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "NORMAL_EDIT", + "uuid": "modifier:object:WebGapNormalEditObject:63296176" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00086" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00086/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00086/manifest.json new file mode 100644 index 00000000..e0a3c48e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00086/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00086", + "parentTask": "M16-GAP-00085", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "OCEAN_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00085/manifest.json", "sha256": "4c1933a0d6f5e2828eda287e0e05422f30336a17217529b7e18d9fd8cd333380"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00086-modifier-OCEAN.blend", "sha256": "1b6a43508676777d94770f3fbbee33161a578ed93ad7054bed48ff91a96ecae1"}, + "generator": {"path": "tools/web/generated/M16-GAP-00086.py", "sha256": "808f73b3c5cd06d60f96d9040189c4a2da64487326d9c8c9dc385f7715d8c4c7"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "6ef5409f3a1e3713f50ac67e616d5c75c2258e0dc13cc5fd814cd68f7198d3dd"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "dbab2a2dab2485d870fe827fed017c6d43659a3adc266ac94c2e4a663ef128a6"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00086/ocean-modifier-desktop-report.json", "sha256": "d2217b8def179e48ea11a5bfcd9376765d2fca8ce22d1673b3d46d284f21af3f"}, + "webReport": {"path": "tests/golden/M16-GAP-00086/ocean-modifier-local-exact-report.json", "sha256": "33a86a21a856190f97c618df2aa307ad102e11da5260ce45f48aec961bf1acdd"} + }, + "nextTask": "M16-GAP-00087" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00086/ocean-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00086/ocean-modifier-desktop-report.json new file mode 100644 index 00000000..c11afc54 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00086/ocean-modifier-desktop-report.json @@ -0,0 +1,23 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00086-modifier-OCEAN.blend", + "fixtureSha256": "1b6a43508676777d94770f3fbbee33161a578ed93ad7054bed48ff91a96ecae1", + "modifier": { + "meshId": "mesh:WebGapOceanMesh", + "modifier": { + "name": "WebGapOcean", + "showEditMode": true, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "OCEAN", + "typeCode": 39 + }, + "objectId": "object:WebGapOceanObject", + "task": "M16-GAP-00086" + }, + "operation": "OCEAN_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00086" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00086/ocean-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00086/ocean-modifier-local-exact-report.json new file mode 100644 index 00000000..c9c945b9 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00086/ocean-modifier-local-exact-report.json @@ -0,0 +1,42 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00086", + "operation": "OCEAN_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00086-modifier-OCEAN.blend", + "sha256": "1b6a43508676777d94770f3fbbee33161a578ed93ad7054bed48ff91a96ecae1" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00086/ocean-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapOceanObject", + "meshId": "mesh:WebGapOceanMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "BLOCKED", + "name": "WebGapOcean", + "parameters": { + "flag": 5, + "mode": 5, + "persistentUid": 1853761221, + "typeCode": 39 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "OCEAN", + "uuid": "modifier:object:WebGapOceanObject:1853761221" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00087" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00087/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00087/manifest.json new file mode 100644 index 00000000..581698a2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00087/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00087", + "parentTask": "M16-GAP-00086", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "PARTICLE_INSTANCE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00086/manifest.json", "sha256": "5c40b1c44f08c2d2729a99a8777bbd7f0185774aae540cc2ca713a68d04164de"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00087-modifier-PARTICLE_INSTANCE.blend", "sha256": "d4f4667cac6061406c5a7bf8231fdaf9e6ee589ee57d168b21fa9347f90395da"}, + "generator": {"path": "tools/web/generated/M16-GAP-00087.py", "sha256": "d9ee675f1c26cbed6e95daaac356c5eaec6c76f065d874cecd6710dec46e6261"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "c82fd4483f92fdac19824f68df12f8eb7013933f568a9516eac3f2ae9a69bee1"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "dbab2a2dab2485d870fe827fed017c6d43659a3adc266ac94c2e4a663ef128a6"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "ae724a2e586ab535a8d597636aac756ab21d265b07e28854327da2a79b9aae99"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00087/particle-instance-modifier-desktop-report.json", "sha256": "a680090b9010d79608825fa02593b6a27506e233bf331b043085a41bf3d912a8"}, + "webReport": {"path": "tests/golden/M16-GAP-00087/particle-instance-modifier-local-exact-report.json", "sha256": "b68f61eb0596709da28a4ca0e4f19e3bc6f213191ff64c40c04d2be9ed5dbde7"} + }, + "nextTask": "M16-GAP-00088" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00087/particle-instance-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00087/particle-instance-modifier-desktop-report.json new file mode 100644 index 00000000..c5ffb9cf --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00087/particle-instance-modifier-desktop-report.json @@ -0,0 +1,23 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00087-modifier-PARTICLE_INSTANCE.blend", + "fixtureSha256": "d4f4667cac6061406c5a7bf8231fdaf9e6ee589ee57d168b21fa9347f90395da", + "modifier": { + "meshId": "mesh:WebGapParticleInstanceMesh", + "modifier": { + "name": "WebGapParticleInstance", + "showEditMode": true, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "PARTICLE_INSTANCE", + "typeCode": 20 + }, + "objectId": "object:WebGapParticleInstanceObject", + "task": "M16-GAP-00087" + }, + "operation": "PARTICLE_INSTANCE_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00087" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00087/particle-instance-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00087/particle-instance-modifier-local-exact-report.json new file mode 100644 index 00000000..d537d041 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00087/particle-instance-modifier-local-exact-report.json @@ -0,0 +1,42 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00087", + "operation": "PARTICLE_INSTANCE_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00087-modifier-PARTICLE_INSTANCE.blend", + "sha256": "d4f4667cac6061406c5a7bf8231fdaf9e6ee589ee57d168b21fa9347f90395da" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00087/particle-instance-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapParticleInstanceObject", + "meshId": "mesh:WebGapParticleInstanceMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "BLOCKED", + "name": "WebGapParticleInstance", + "parameters": { + "flag": 5, + "mode": 5, + "persistentUid": 618743081, + "typeCode": 20 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "PARTICLE_INSTANCE", + "uuid": "modifier:object:WebGapParticleInstanceObject:618743081" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00088" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00088/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00088/manifest.json new file mode 100644 index 00000000..f0399e67 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00088/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00088", + "parentTask": "M16-GAP-00087", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "PARTICLE_SYSTEM_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00087/manifest.json", "sha256": "a4f27a71fefea748d08bca8e6ef5741e094604aec8c00a505a63dcc491306050"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00088-modifier-PARTICLE_SYSTEM.blend", "sha256": "b0e15d7d4821cd9b60e977686142f7bf26c197c6f76c31c59d5dbe06fa5316bf"}, + "generator": {"path": "tools/web/generated/M16-GAP-00088.py", "sha256": "1aa118a77f3639ec6761c0083876c4fcb70b504734ffb1f1a6366e670ecd3255"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "c8bec6dccee843edc1a70672dd25a4cef83aceb2ae950ea37e37c907d90735b2"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "dbab2a2dab2485d870fe827fed017c6d43659a3adc266ac94c2e4a663ef128a6"}, + "modifierCmake": {"path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127"}, + "particleModifier": {"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f"}, + "particleCore": {"path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c"}, + "physicsReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "52c0d2d4c2b652d63a205f07c1547f037ba0479b1107bc3726f48727b312d8d0"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "52c0d2d4c2b652d63a205f07c1547f037ba0479b1107bc3726f48727b312d8d0"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00088/particle-system-modifier-desktop-report.json", "sha256": "a53c039a969a1a9affe57d435c281707882fcdb2f4772473801fed6c8ee45914"}, + "webReport": {"path": "tests/golden/M16-GAP-00088/particle-system-modifier-local-exact-report.json", "sha256": "905fae2ec36e1447a28d314cfc6ddce00dd71ddf090be505b16b76860f5e3643"} + }, + "nextTask": "M16-GAP-00089" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00088/particle-system-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00088/particle-system-modifier-desktop-report.json new file mode 100644 index 00000000..e3ea7610 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00088/particle-system-modifier-desktop-report.json @@ -0,0 +1,23 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00088-modifier-PARTICLE_SYSTEM.blend", + "fixtureSha256": "b0e15d7d4821cd9b60e977686142f7bf26c197c6f76c31c59d5dbe06fa5316bf", + "modifier": { + "meshId": "mesh:WebGapParticleSystemMesh", + "modifier": { + "name": "WebGapParticleSystem", + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "PARTICLE_SYSTEM", + "typeCode": 19 + }, + "objectId": "object:WebGapParticleSystemObject", + "task": "M16-GAP-00088" + }, + "operation": "PARTICLE_SYSTEM_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00088" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00088/particle-system-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00088/particle-system-modifier-local-exact-report.json new file mode 100644 index 00000000..dd693732 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00088/particle-system-modifier-local-exact-report.json @@ -0,0 +1,42 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00088", + "operation": "PARTICLE_SYSTEM_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00088-modifier-PARTICLE_SYSTEM.blend", + "sha256": "b0e15d7d4821cd9b60e977686142f7bf26c197c6f76c31c59d5dbe06fa5316bf" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00088/particle-system-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapParticleSystemObject", + "meshId": "mesh:WebGapParticleSystemMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "BLOCKED", + "name": "WebGapParticleSystem", + "parameters": { + "flag": 5, + "mode": 1, + "persistentUid": 1797297920, + "typeCode": 19 + }, + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "PARTICLE_SYSTEM", + "uuid": "modifier:object:WebGapParticleSystemObject:1797297920" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00089" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00089/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00089/manifest.json new file mode 100644 index 00000000..000d271f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00089/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00089", + "parentTask": "M16-GAP-00088", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "REMESH_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00088/manifest.json", "sha256": "6fc982fa3d2de26546a5825e90f5b0ff3c5f9243e92acaf49636598b7d5971f1"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00089-modifier-REMESH.blend", "sha256": "6cf821a751ef19f4719d29a7c73c3d5acefcb381c5d8afb61673ca4ec068a70e"}, + "generator": {"path": "tools/web/generated/M16-GAP-00089.py", "sha256": "bf07af3faa32ab5533ad352b46c4cfdcca45f2f8d22e9e2b894aa7566f1ee250"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "def5270dbba1cf0e4517421e799511c3effd0590b5c26a15fb7dddd52a02df24"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "dbab2a2dab2485d870fe827fed017c6d43659a3adc266ac94c2e4a663ef128a6"}, + "modifierCmake": {"path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127"}, + "particleModifier": {"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f"}, + "particleCore": {"path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c"}, + "physicsReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "52c0d2d4c2b652d63a205f07c1547f037ba0479b1107bc3726f48727b312d8d0"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "52c0d2d4c2b652d63a205f07c1547f037ba0479b1107bc3726f48727b312d8d0"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00089/remesh-modifier-desktop-report.json", "sha256": "ac36dcb7a2c59b6f8df45b67b00f45966c38de93dbfa8d016aeef77a8a92b665"}, + "webReport": {"path": "tests/golden/M16-GAP-00089/remesh-modifier-local-exact-report.json", "sha256": "0cc329e5779c02b15cdffc48030451134017870505149a10b9c5e23876d83ba6"} + }, + "nextTask": "M16-GAP-00090" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00089/remesh-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00089/remesh-modifier-desktop-report.json new file mode 100644 index 00000000..6385e16e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00089/remesh-modifier-desktop-report.json @@ -0,0 +1,23 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00089-modifier-REMESH.blend", + "fixtureSha256": "6cf821a751ef19f4719d29a7c73c3d5acefcb381c5d8afb61673ca4ec068a70e", + "modifier": { + "meshId": "mesh:WebGapRemeshMesh", + "modifier": { + "name": "WebGapRemesh", + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "REMESH", + "typeCode": 41 + }, + "objectId": "object:WebGapRemeshObject", + "task": "M16-GAP-00089" + }, + "operation": "REMESH_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00089" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00089/remesh-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00089/remesh-modifier-local-exact-report.json new file mode 100644 index 00000000..aad7836d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00089/remesh-modifier-local-exact-report.json @@ -0,0 +1,42 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00089", + "operation": "REMESH_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00089-modifier-REMESH.blend", + "sha256": "6cf821a751ef19f4719d29a7c73c3d5acefcb381c5d8afb61673ca4ec068a70e" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00089/remesh-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapRemeshObject", + "meshId": "mesh:WebGapRemeshMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "BLOCKED", + "name": "WebGapRemesh", + "parameters": { + "flag": 5, + "mode": 1, + "persistentUid": 1879751496, + "typeCode": 41 + }, + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "REMESH", + "uuid": "modifier:object:WebGapRemeshObject:1879751496" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00090" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00090/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00090/manifest.json new file mode 100644 index 00000000..e0715c74 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00090/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00090", + "parentTask": "M16-GAP-00089", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "SCREW_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00089/manifest.json", "sha256": "ae9b642d9e35b4a5b14cec69a949fe4aaf7dbe3216fa03c08406a75847d0629c"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00090-modifier-SCREW.blend", "sha256": "3cfe313b349aff539f46496c520b04696842252655f8d15230c9a7b24b857d2c"}, + "generator": {"path": "tools/web/generated/M16-GAP-00090.py", "sha256": "8a3687c6baed4826d7acb1e07c01ad7fc706b7279076eb32267f290c1c1538dd"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "03457cd58754627999a81957a3f912510f45b0c28131fbf1fcbdab656dd3c2a6"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "dbab2a2dab2485d870fe827fed017c6d43659a3adc266ac94c2e4a663ef128a6"}, + "modifierCmake": {"path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127"}, + "particleModifier": {"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f"}, + "particleCore": {"path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c"}, + "physicsReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "52c0d2d4c2b652d63a205f07c1547f037ba0479b1107bc3726f48727b312d8d0"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "52c0d2d4c2b652d63a205f07c1547f037ba0479b1107bc3726f48727b312d8d0"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00090/screw-modifier-desktop-report.json", "sha256": "af225b5b2f660ae70fe0315527b79d5e74db996db3722222bed98194023de28e"}, + "webReport": {"path": "tests/golden/M16-GAP-00090/screw-modifier-local-exact-report.json", "sha256": "3998657085e2d1f963540cd97afd7980cdcd50ec96897ab22d612183a0e5e531"} + }, + "nextTask": "M16-GAP-00091" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00090/screw-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00090/screw-modifier-desktop-report.json new file mode 100644 index 00000000..eba0e80c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00090/screw-modifier-desktop-report.json @@ -0,0 +1,23 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00090-modifier-SCREW.blend", + "fixtureSha256": "3cfe313b349aff539f46496c520b04696842252655f8d15230c9a7b24b857d2c", + "modifier": { + "meshId": "mesh:WebGapScrewMesh", + "modifier": { + "name": "WebGapScrew", + "showEditMode": true, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "SCREW", + "typeCode": 34 + }, + "objectId": "object:WebGapScrewObject", + "task": "M16-GAP-00090" + }, + "operation": "SCREW_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00090" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00090/screw-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00090/screw-modifier-local-exact-report.json new file mode 100644 index 00000000..e4c6dc98 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00090/screw-modifier-local-exact-report.json @@ -0,0 +1,45 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00090", + "operation": "SCREW_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00090-modifier-SCREW.blend", + "sha256": "3cfe313b349aff539f46496c520b04696842252655f8d15230c9a7b24b857d2c" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00090/screw-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapScrewObject", + "meshId": "mesh:WebGapScrewMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "METADATA_ONLY", + "name": "WebGapScrew", + "parameters": { + "angle": 6.2831854820251465, + "flag": 5, + "mode": 5, + "persistentUid": 1231397512, + "renderSteps": 16, + "steps": 16, + "typeCode": 34 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "SCREW", + "uuid": "modifier:object:WebGapScrewObject:1231397512" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00091" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00091/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00091/manifest.json new file mode 100644 index 00000000..6bcd26b0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00091/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00091", + "parentTask": "M16-GAP-00090", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "SHRINKWRAP_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00090/manifest.json", "sha256": "072103cdb6d1884c18d422358b33f03ca1ebb0bbf7291d7958f25c3e8cb4bf75"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00091-modifier-SHRINKWRAP.blend", "sha256": "05047e750c6b03b39ac18a3090e450960092ed0ab03a61b649ca11c0a0b5aa85"}, + "generator": {"path": "tools/web/generated/M16-GAP-00091.py", "sha256": "9c31a3c7fb798db179e37d43d89b633141e9b8b18dbfd34a7eb1502c5ef805df"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "da1cd2a6047296754a776b8b3190104b8bbcb3fbe04f27d2ba2018c39b7797ac"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "dbab2a2dab2485d870fe827fed017c6d43659a3adc266ac94c2e4a663ef128a6"}, + "modifierCmake": {"path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127"}, + "particleModifier": {"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f"}, + "particleCore": {"path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c"}, + "physicsReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "52c0d2d4c2b652d63a205f07c1547f037ba0479b1107bc3726f48727b312d8d0"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "52c0d2d4c2b652d63a205f07c1547f037ba0479b1107bc3726f48727b312d8d0"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00091/shrinkwrap-modifier-desktop-report.json", "sha256": "4bc01b8e0d79256b2e5fa9e149bc53667790eab383beda260fdff77d6f4f0c6e"}, + "webReport": {"path": "tests/golden/M16-GAP-00091/shrinkwrap-modifier-local-exact-report.json", "sha256": "db44cad8b1b6173303ca5f63c442eb82805324e08c6786323f6803803d52d391"} + }, + "nextTask": "M16-GAP-00092" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00091/shrinkwrap-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00091/shrinkwrap-modifier-desktop-report.json new file mode 100644 index 00000000..42dfecaa --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00091/shrinkwrap-modifier-desktop-report.json @@ -0,0 +1,23 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00091-modifier-SHRINKWRAP.blend", + "fixtureSha256": "05047e750c6b03b39ac18a3090e450960092ed0ab03a61b649ca11c0a0b5aa85", + "modifier": { + "meshId": "mesh:WebGapShrinkwrapMesh", + "modifier": { + "name": "WebGapShrinkwrap", + "showEditMode": true, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "SHRINKWRAP", + "typeCode": 25 + }, + "objectId": "object:WebGapShrinkwrapObject", + "task": "M16-GAP-00091" + }, + "operation": "SHRINKWRAP_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00091" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00091/shrinkwrap-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00091/shrinkwrap-modifier-local-exact-report.json new file mode 100644 index 00000000..411a1a27 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00091/shrinkwrap-modifier-local-exact-report.json @@ -0,0 +1,47 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00091", + "operation": "SHRINKWRAP_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00091-modifier-SHRINKWRAP.blend", + "sha256": "05047e750c6b03b39ac18a3090e450960092ed0ab03a61b649ca11c0a0b5aa85" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00091/shrinkwrap-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapShrinkwrapObject", + "meshId": "mesh:WebGapShrinkwrapMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "METADATA_ONLY", + "name": "WebGapShrinkwrap", + "parameters": { + "flag": 5, + "keepDistance": 0, + "mode": 5, + "persistentUid": 1895443529, + "projectionLimit": 0, + "shrinkMode": 0, + "shrinkType": 0, + "typeCode": 25, + "vertexGroup": "" + }, + "showEditMode": true, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "SHRINKWRAP", + "uuid": "modifier:object:WebGapShrinkwrapObject:1895443529" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00092" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00092/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00092/manifest.json new file mode 100644 index 00000000..74af0b24 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00092/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00092", + "parentTask": "M16-GAP-00091", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "SIMPLE_DEFORM_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00091/manifest.json", "sha256": "823439143108c583ca5bb20aa86dc628a1d9227d7beeef98c601f2d5b27f3aa3"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00092-modifier-SIMPLE_DEFORM.blend", "sha256": "3be9ab1afb8c518382aa329797e0a4b7369ab7f01cab6fec1481fcda187062af"}, + "generator": {"path": "tools/web/generated/M16-GAP-00092.py", "sha256": "93acc4af7e20ddf63e1bc6ffb4e200b06af28a4ab943311b2170a8c01c248c06"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "47920569bd1074e698f21a433c75e9b7ce0724689c5d278c7abfa4123fe9f8d5"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "dbab2a2dab2485d870fe827fed017c6d43659a3adc266ac94c2e4a663ef128a6"}, + "modifierCmake": {"path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127"}, + "particleModifier": {"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f"}, + "particleCore": {"path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c"}, + "physicsReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "52c0d2d4c2b652d63a205f07c1547f037ba0479b1107bc3726f48727b312d8d0"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "52c0d2d4c2b652d63a205f07c1547f037ba0479b1107bc3726f48727b312d8d0"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00092/simple-deform-modifier-desktop-report.json", "sha256": "532ad0f944d179ec640fdf706b9e4e78eaaa3635410b404f7a146b68a400768c"}, + "webReport": {"path": "tests/golden/M16-GAP-00092/simple-deform-modifier-local-exact-report.json", "sha256": "24eacc0f43139fbd4fe232e9418d7c81a8eee8bc9b10b15bc2818e1df0794aff"} + }, + "nextTask": "M16-GAP-00093" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00092/simple-deform-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00092/simple-deform-modifier-desktop-report.json new file mode 100644 index 00000000..0192a7d5 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00092/simple-deform-modifier-desktop-report.json @@ -0,0 +1,23 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00092-modifier-SIMPLE_DEFORM.blend", + "fixtureSha256": "3be9ab1afb8c518382aa329797e0a4b7369ab7f01cab6fec1481fcda187062af", + "modifier": { + "meshId": "mesh:WebGapSimpleDeformMesh", + "modifier": { + "name": "WebGapSimpleDeform", + "showEditMode": true, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "SIMPLE_DEFORM", + "typeCode": 28 + }, + "objectId": "object:WebGapSimpleDeformObject", + "task": "M16-GAP-00092" + }, + "operation": "SIMPLE_DEFORM_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00092" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00092/simple-deform-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00092/simple-deform-modifier-local-exact-report.json new file mode 100644 index 00000000..fbe9f87d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00092/simple-deform-modifier-local-exact-report.json @@ -0,0 +1,45 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00092", + "operation": "SIMPLE_DEFORM_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00092-modifier-SIMPLE_DEFORM.blend", + "sha256": "3be9ab1afb8c518382aa329797e0a4b7369ab7f01cab6fec1481fcda187062af" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00092/simple-deform-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapSimpleDeformObject", + "meshId": "mesh:WebGapSimpleDeformMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "METADATA_ONLY", + "name": "WebGapSimpleDeform", + "parameters": { + "deformAxis": 0, + "deformMethod": 1, + "factor": 0.7853981852531433, + "flag": 5, + "mode": 5, + "persistentUid": 1054046428, + "typeCode": 28 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "SIMPLE_DEFORM", + "uuid": "modifier:object:WebGapSimpleDeformObject:1054046428" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00093" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00093/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00093/manifest.json new file mode 100644 index 00000000..705804ba --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00093/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00093", + "parentTask": "M16-GAP-00092", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "SKIN_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00092/manifest.json", "sha256": "87f0158baee779ddf751287c0bee3f0b0fa0196cb5869817d959fd654d9d5e01"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00093-modifier-SKIN.blend", "sha256": "e24d021bdb48b6a17945b1b6c6a1933ab3a9fabd321775f5bf0313bc6e7797f3"}, + "generator": {"path": "tools/web/generated/M16-GAP-00093.py", "sha256": "3fad88717f143ab554d3926f86d218ed47ee4a682db379d337f897c41df2088f"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "3a372e870f14c4559ee921aef1fbe086eccd609a0af5917e5b4872468ca22e51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "d04dce1957e93b81ed405ea18f13e350332c9bb1fc396472b1ff3b2e4f26ce01"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "cb66079d9984dde7463ac947e3e06634e6c4a07145e24f55cd722d3bc37bf568"}, + "modifierCmake": {"path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127"}, + "particleModifier": {"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f"}, + "particleCore": {"path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c"}, + "physicsReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "f28bdedc2131870760f74fc880f93744a76a74841d5fe11c5d1675aeb5edbd89"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "f28bdedc2131870760f74fc880f93744a76a74841d5fe11c5d1675aeb5edbd89"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00093/skin-modifier-desktop-report.json", "sha256": "cf30f79bb5f5e90749068d678a6746808c87175aa9ad51117f69b6b90aad7884"}, + "webReport": {"path": "tests/golden/M16-GAP-00093/skin-modifier-local-exact-report.json", "sha256": "e2df081504aab183867915c78f4829d90e51fb610586a1722752cceaee0da674"} + }, + "nextTask": "M16-GAP-00094" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00093/skin-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00093/skin-modifier-desktop-report.json new file mode 100644 index 00000000..550df5f2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00093/skin-modifier-desktop-report.json @@ -0,0 +1,23 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00093-modifier-SKIN.blend", + "fixtureSha256": "e24d021bdb48b6a17945b1b6c6a1933ab3a9fabd321775f5bf0313bc6e7797f3", + "modifier": { + "meshId": "mesh:WebGapSkinMesh", + "modifier": { + "name": "WebGapSkin", + "showEditMode": true, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "SKIN", + "typeCode": 42 + }, + "objectId": "object:WebGapSkinObject", + "task": "M16-GAP-00093" + }, + "operation": "SKIN_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00093" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00093/skin-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00093/skin-modifier-local-exact-report.json new file mode 100644 index 00000000..f1c13628 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00093/skin-modifier-local-exact-report.json @@ -0,0 +1,45 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00093", + "operation": "SKIN_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00093-modifier-SKIN.blend", + "sha256": "e24d021bdb48b6a17945b1b6c6a1933ab3a9fabd321775f5bf0313bc6e7797f3" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00093/skin-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapSkinObject", + "meshId": "mesh:WebGapSkinMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "METADATA_ONLY", + "name": "WebGapSkin", + "parameters": { + "branchSmoothing": 0, + "flag": 5, + "mode": 5, + "persistentUid": 1853982967, + "skinFlags": 0, + "symmetryAxes": 1, + "typeCode": 42 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "SKIN", + "uuid": "modifier:object:WebGapSkinObject:1853982967" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00094" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00094/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00094/manifest.json new file mode 100644 index 00000000..850ef835 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00094/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00094", + "parentTask": "M16-GAP-00093", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "SMOOTH_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00093/manifest.json", "sha256": "80353dc192b8e9e21624ab1acb0102648d6e743c36bfac2af5ddb92707f414b5"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00094-modifier-SMOOTH.blend", "sha256": "2e416d62faeeb22313d56ba073cb184618f80b751cf31f100ce8e0c78565de02"}, + "generator": {"path": "tools/web/generated/M16-GAP-00094.py", "sha256": "3e10f94a84a52c1b6114d1d6fcf764481b8bf79dfc8cb533389c016c34c36938"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "229b09fbdcc541d0c2a2367d420c3f0d5c623621ed10143896a374f1ce072687"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "12dfca701287049fd4adc05b6e2ac475775c1c52a9527b93158f0d2a9581e99c"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "01cc2be8069f18ed1cde6ed28efa840e3b79efdf4f295a37dcab10b35ca58506"}, + "modifierCmake": {"path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127"}, + "particleModifier": {"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f"}, + "particleCore": {"path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c"}, + "physicsReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "ffd2a606a83140661e14b0d916f5775c8eb60197f6cdccd96a64fadaacb160f4"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "ffd2a606a83140661e14b0d916f5775c8eb60197f6cdccd96a64fadaacb160f4"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00094/smooth-modifier-desktop-report.json", "sha256": "762f02f1f460bd1deb71a7441ff85b969ff8ef916b32d95e46fe243ce110d1cb"}, + "webReport": {"path": "tests/golden/M16-GAP-00094/smooth-modifier-local-exact-report.json", "sha256": "0373da7c5ce2b369840c080bfe5dd341596208098fc2f3c3ae864031d965bc6c"} + }, + "nextTask": "M16-GAP-00095" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00094/smooth-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00094/smooth-modifier-desktop-report.json new file mode 100644 index 00000000..2598c5c2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00094/smooth-modifier-desktop-report.json @@ -0,0 +1,27 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00094-modifier-SMOOTH.blend", + "fixtureSha256": "2e416d62faeeb22313d56ba073cb184618f80b751cf31f100ce8e0c78565de02", + "modifier": { + "meshId": "mesh:WebGapSmoothMesh", + "modifier": { + "factor": 0.375, + "iterations": 3, + "name": "WebGapSmooth", + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "smoothFlags": 11, + "type": "SMOOTH", + "typeCode": 16, + "vertexGroup": "WebGapSmoothWeights" + }, + "objectId": "object:WebGapSmoothObject", + "task": "M16-GAP-00094" + }, + "operation": "SMOOTH_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00094" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00094/smooth-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00094/smooth-modifier-local-exact-report.json new file mode 100644 index 00000000..b9a1bc6b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00094/smooth-modifier-local-exact-report.json @@ -0,0 +1,46 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00094", + "operation": "SMOOTH_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00094-modifier-SMOOTH.blend", + "sha256": "2e416d62faeeb22313d56ba073cb184618f80b751cf31f100ce8e0c78565de02" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00094/smooth-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapSmoothObject", + "meshId": "mesh:WebGapSmoothMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "METADATA_ONLY", + "name": "WebGapSmooth", + "parameters": { + "factor": 0.375, + "flag": 5, + "mode": 1, + "persistentUid": 486562295, + "repeat": 3, + "smoothFlags": 11, + "typeCode": 16, + "vertexGroup": "WebGapSmoothWeights" + }, + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "SMOOTH", + "uuid": "modifier:object:WebGapSmoothObject:486562295" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00095" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00095/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00095/manifest.json new file mode 100644 index 00000000..5e84671f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00095/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00095", + "parentTask": "M16-GAP-00094", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "SOFT_BODY_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00094/manifest.json", "sha256": "50a37762ad06ba05266dacc84dd0370e718b2fd98ae235d1bf9a975530cee31a"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00095-modifier-SOFT_BODY.blend", "sha256": "2bfd58334380f70c1309ebfd00c092c531bb7b3921620e799c57752c7ee5596f"}, + "generator": {"path": "tools/web/generated/M16-GAP-00095.py", "sha256": "a82183922f2228f641d8bd59689e807e8caa495886a581e58e86f9c307b0f45b"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "229b09fbdcc541d0c2a2367d420c3f0d5c623621ed10143896a374f1ce072687"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "7442a43ad4a4a85cdd781b64a5b0752bd7db9c48855d4f257228200647070da7"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "4ae389f76bfcc71b1bc731b5bd00a06154570f6e2cdcbec398521614001a7776"}, + "modifierCmake": {"path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127"}, + "particleModifier": {"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f"}, + "particleCore": {"path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c"}, + "physicsReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "178e48cdb044d86ffcdeaec0c0d59578d99ce77c35c6bc09acc47e366fd1a951"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "178e48cdb044d86ffcdeaec0c0d59578d99ce77c35c6bc09acc47e366fd1a951"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00095/soft-body-modifier-desktop-report.json", "sha256": "5228fc63f22473e4e1ef9d82e9018c4739c6b63469da4b693240ac307336bba7"}, + "webReport": {"path": "tests/golden/M16-GAP-00095/soft-body-modifier-local-exact-report.json", "sha256": "e0767cb702d9c0612c8e8bc140dd2e00f5af6f782c3f63c5ae15407a6c5fcaa9"} + }, + "nextTask": "M16-GAP-00096" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00095/soft-body-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00095/soft-body-modifier-desktop-report.json new file mode 100644 index 00000000..d7dac2ae --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00095/soft-body-modifier-desktop-report.json @@ -0,0 +1,23 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00095-modifier-SOFT_BODY.blend", + "fixtureSha256": "2bfd58334380f70c1309ebfd00c092c531bb7b3921620e799c57752c7ee5596f", + "modifier": { + "meshId": "mesh:WebGapSoftBodyMesh", + "modifier": { + "name": "WebGapSoftBody", + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "SOFT_BODY", + "typeCode": 10 + }, + "objectId": "object:WebGapSoftBodyObject", + "task": "M16-GAP-00095" + }, + "operation": "SOFT_BODY_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00095" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00095/soft-body-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00095/soft-body-modifier-local-exact-report.json new file mode 100644 index 00000000..4dba02ba --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00095/soft-body-modifier-local-exact-report.json @@ -0,0 +1,42 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00095", + "operation": "SOFT_BODY_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00095-modifier-SOFT_BODY.blend", + "sha256": "2bfd58334380f70c1309ebfd00c092c531bb7b3921620e799c57752c7ee5596f" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00095/soft-body-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapSoftBodyObject", + "meshId": "mesh:WebGapSoftBodyMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "METADATA_ONLY", + "name": "WebGapSoftBody", + "parameters": { + "flag": 5, + "mode": 1, + "persistentUid": 228953295, + "typeCode": 10 + }, + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "SOFT_BODY", + "uuid": "modifier:object:WebGapSoftBodyObject:228953295" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00096" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00096/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00096/manifest.json new file mode 100644 index 00000000..b4b9ec1d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00096/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00096", + "parentTask": "M16-GAP-00095", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "SOLIDIFY_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00095/manifest.json", "sha256": "9fa2c3ed7fbee3b52c0cb2f629f7886e492cfec2a2a4d11b93f33a0a16d7a92e"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00096-modifier-SOLIDIFY.blend", "sha256": "0b319df9e6c4f677728af992114196e4fa29f80effabc01b3dbfd639bc2b66d5"}, + "generator": {"path": "tools/web/generated/M16-GAP-00096.py", "sha256": "8ffa8697f2d4490f9ca2f04d4eaa3866be4bdecbe17e9d5db11c13882034c009"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "06907bb045cb0c14b518b620facded50ae5cd52f23e2281de04017ff1b11bb71"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "d613cf0915abdf2cdc1f2a534e1e0a478c38cb5ca2d89c2e3ad708e957e0849a"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "11c598f89b531f2e9d6e2169ab6eed07b7cbea86c8b8d58ef4c6ff045c6414bf"}, + "modifierCmake": {"path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127"}, + "particleModifier": {"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f"}, + "particleCore": {"path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c"}, + "physicsReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "1a991f13fc2f2e4a7b00366c52e6285198c24e72c110bb5f1f6d005e56089104"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "1a991f13fc2f2e4a7b00366c52e6285198c24e72c110bb5f1f6d005e56089104"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00096/solidify-modifier-desktop-report.json", "sha256": "914187f8ec57e442d85fae5710aa98bd058e91930bdacd7928694281bad54df3"}, + "webReport": {"path": "tests/golden/M16-GAP-00096/solidify-modifier-local-exact-report.json", "sha256": "b6437999773cc18296a54e041c8df8b33d595f9ebe67c826a47f62308d307232"} + }, + "nextTask": "M16-GAP-00097" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00096/solidify-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00096/solidify-modifier-desktop-report.json new file mode 100644 index 00000000..f2ccf21b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00096/solidify-modifier-desktop-report.json @@ -0,0 +1,25 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00096-modifier-SOLIDIFY.blend", + "fixtureSha256": "0b319df9e6c4f677728af992114196e4fa29f80effabc01b3dbfd639bc2b66d5", + "modifier": { + "meshId": "mesh:WebGapSolidifyMesh", + "modifier": { + "name": "WebGapSolidify", + "offset": 0.3499999940395355, + "showEditMode": true, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "thickness": 0.2750000059604645, + "type": "SOLIDIFY", + "typeCode": 33 + }, + "objectId": "object:WebGapSolidifyObject", + "task": "M16-GAP-00096" + }, + "operation": "SOLIDIFY_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00096" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00096/solidify-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00096/solidify-modifier-local-exact-report.json new file mode 100644 index 00000000..19dbf5a2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00096/solidify-modifier-local-exact-report.json @@ -0,0 +1,44 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00096", + "operation": "SOLIDIFY_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00096-modifier-SOLIDIFY.blend", + "sha256": "0b319df9e6c4f677728af992114196e4fa29f80effabc01b3dbfd639bc2b66d5" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00096/solidify-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapSolidifyObject", + "meshId": "mesh:WebGapSolidifyMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "METADATA_ONLY", + "name": "WebGapSolidify", + "parameters": { + "flag": 5, + "mode": 5, + "offset": 0.3499999940395355, + "persistentUid": 129666994, + "thickness": 0.2750000059604645, + "typeCode": 33 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "SOLIDIFY", + "uuid": "modifier:object:WebGapSolidifyObject:129666994" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00097" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00097/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00097/manifest.json new file mode 100644 index 00000000..ed8c0af2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00097/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00097", + "parentTask": "M16-GAP-00096", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "SUBSURF_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00096/manifest.json", "sha256": "f539f112a4c5aaa4565554d8a3d5947c9c77a8d8df8ef8f39adbc1b1146a2b8b"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00097-modifier-SUBSURF.blend", "sha256": "f0c3e9801b4138c3701599e24242374dbb6217f223e2decc7c04d5558094108a"}, + "generator": {"path": "tools/web/generated/M16-GAP-00097.py", "sha256": "cd26d7bd580a78e40a78f7bd47526dbd3430d75b9c1f9c63849668b613277960"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "65d211c3a1ea33eca121771f33870466d53ef6248743eff96bd5e789b9f049be"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "abb6f9d3de215df6abff830a83b3e964bccc0c42b29ab2b16af599508c156f83"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "11c598f89b531f2e9d6e2169ab6eed07b7cbea86c8b8d58ef4c6ff045c6414bf"}, + "modifierCmake": {"path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127"}, + "particleModifier": {"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f"}, + "particleCore": {"path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c"}, + "physicsReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "1a991f13fc2f2e4a7b00366c52e6285198c24e72c110bb5f1f6d005e56089104"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "1a991f13fc2f2e4a7b00366c52e6285198c24e72c110bb5f1f6d005e56089104"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00097/subsurf-modifier-desktop-report.json", "sha256": "e1ce95f66a26b4e687bd32fc6f975044033d921703954e0e26674dfbce556bea"}, + "webReport": {"path": "tests/golden/M16-GAP-00097/subsurf-modifier-local-exact-report.json", "sha256": "c146dabc29a94e25df4f09e6de727a3377f48ea706dbe74f51b903efbc5a293d"} + }, + "nextTask": "M16-GAP-00098" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00097/subsurf-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00097/subsurf-modifier-desktop-report.json new file mode 100644 index 00000000..6b218d1a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00097/subsurf-modifier-desktop-report.json @@ -0,0 +1,26 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00097-modifier-SUBSURF.blend", + "fixtureSha256": "f0c3e9801b4138c3701599e24242374dbb6217f223e2decc7c04d5558094108a", + "modifier": { + "meshId": "mesh:WebGapSubsurfMesh", + "modifier": { + "levels": 2, + "name": "WebGapSubsurf", + "renderLevels": 3, + "showEditMode": true, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "subdivisionType": 1, + "type": "SUBSURF", + "typeCode": 1 + }, + "objectId": "object:WebGapSubsurfObject", + "task": "M16-GAP-00097" + }, + "operation": "SUBSURF_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00097" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00097/subsurf-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00097/subsurf-modifier-local-exact-report.json new file mode 100644 index 00000000..95e5237a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00097/subsurf-modifier-local-exact-report.json @@ -0,0 +1,45 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00097", + "operation": "SUBSURF_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00097-modifier-SUBSURF.blend", + "sha256": "f0c3e9801b4138c3701599e24242374dbb6217f223e2decc7c04d5558094108a" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00097/subsurf-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapSubsurfObject", + "meshId": "mesh:WebGapSubsurfMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "METADATA_ONLY", + "name": "WebGapSubsurf", + "parameters": { + "flag": 5, + "levels": 2, + "mode": 5, + "persistentUid": 1454833520, + "renderLevels": 3, + "subdivisionType": 1, + "typeCode": 1 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "SUBSURF", + "uuid": "modifier:object:WebGapSubsurfObject:1454833520" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00098" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00098/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00098/manifest.json new file mode 100644 index 00000000..1ce8cf52 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00098/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00098", + "parentTask": "M16-GAP-00097", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "SURFACE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00097/manifest.json", "sha256": "df24b8387d70f8c6ca35306fb7994b056801c0f700769584d718bf30a885adee"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00098-modifier-SURFACE.blend", "sha256": "41aa335359773ce72a3f372784d1fbf74a1ec65c077652f0cb98d34793edc937"}, + "generator": {"path": "tools/web/generated/M16-GAP-00098.py", "sha256": "988ad257572050d657a7c82ece4f639246a93e700ee3cb216469fb73bbb948e9"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "65d211c3a1ea33eca121771f33870466d53ef6248743eff96bd5e789b9f049be"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "dc23d8d7837fd9d43896804c076221cf584bf044d2e897bb2dad2320a662959a"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "11c598f89b531f2e9d6e2169ab6eed07b7cbea86c8b8d58ef4c6ff045c6414bf"}, + "modifierCmake": {"path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127"}, + "particleModifier": {"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f"}, + "particleCore": {"path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c"}, + "physicsReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "1a991f13fc2f2e4a7b00366c52e6285198c24e72c110bb5f1f6d005e56089104"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "1a991f13fc2f2e4a7b00366c52e6285198c24e72c110bb5f1f6d005e56089104"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00098/surface-modifier-desktop-report.json", "sha256": "75a588cd606fe0395c7f6541eed4ca26daa0109d7f6fa62cffe87e41149d0a95"}, + "webReport": {"path": "tests/golden/M16-GAP-00098/surface-modifier-local-exact-report.json", "sha256": "7b004c755290ebe920a9296a7768ff3231eaec66e1836536d98dffa4d6c6dbab"} + }, + "nextTask": "M16-GAP-00099" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00098/surface-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00098/surface-modifier-desktop-report.json new file mode 100644 index 00000000..f29cec9b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00098/surface-modifier-desktop-report.json @@ -0,0 +1,23 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00098-modifier-SURFACE.blend", + "fixtureSha256": "41aa335359773ce72a3f372784d1fbf74a1ec65c077652f0cb98d34793edc937", + "modifier": { + "meshId": "mesh:WebGapSurfaceMesh", + "modifier": { + "name": "WebGapSurface", + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "SURFACE", + "typeCode": 30 + }, + "objectId": "object:WebGapSurfaceObject", + "task": "M16-GAP-00098" + }, + "operation": "SURFACE_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00098" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00098/surface-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00098/surface-modifier-local-exact-report.json new file mode 100644 index 00000000..e5441db3 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00098/surface-modifier-local-exact-report.json @@ -0,0 +1,42 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00098", + "operation": "SURFACE_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00098-modifier-SURFACE.blend", + "sha256": "41aa335359773ce72a3f372784d1fbf74a1ec65c077652f0cb98d34793edc937" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00098/surface-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapSurfaceObject", + "meshId": "mesh:WebGapSurfaceMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "BLOCKED", + "name": "WebGapSurface", + "parameters": { + "flag": 5, + "mode": 1, + "persistentUid": 298436185, + "typeCode": 30 + }, + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "SURFACE", + "uuid": "modifier:object:WebGapSurfaceObject:298436185" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00099" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00099/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00099/manifest.json new file mode 100644 index 00000000..63332f50 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00099/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00099", + "parentTask": "M16-GAP-00098", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "SURFACE_DEFORM_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00098/manifest.json", "sha256": "c447e41b823dd1c7bd59619771424eb733bd257a58029de4b794edb5b544f7e2"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00099-modifier-SURFACE_DEFORM.blend", "sha256": "cb459101d9ecdd4e5761a3e216dcf3eda99a09eaad5642573ef0ba0b4c063072"}, + "generator": {"path": "tools/web/generated/M16-GAP-00099.py", "sha256": "bafaa8cf007d02851acca674b3894d758a8dc3874ca87c184d705a07fdfc724d"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "65d211c3a1ea33eca121771f33870466d53ef6248743eff96bd5e789b9f049be"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "998a0950251d1c0069cf709b1b301268ca9df7705d1b31f97b522f38d83f40a5"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "11c598f89b531f2e9d6e2169ab6eed07b7cbea86c8b8d58ef4c6ff045c6414bf"}, + "modifierCmake": {"path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127"}, + "particleModifier": {"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f"}, + "particleCore": {"path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c"}, + "physicsReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "1a991f13fc2f2e4a7b00366c52e6285198c24e72c110bb5f1f6d005e56089104"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "1a991f13fc2f2e4a7b00366c52e6285198c24e72c110bb5f1f6d005e56089104"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00099/surface-deform-modifier-desktop-report.json", "sha256": "bfd91c545efcf0688bfa9cee24e65de82224eecf715a1ab4385061a7d7df4db1"}, + "webReport": {"path": "tests/golden/M16-GAP-00099/surface-deform-modifier-local-exact-report.json", "sha256": "7d5f760727e03951c3f5b2c3e885b33ce92af7293ca101732fa490136dc25ed5"} + }, + "nextTask": "M16-GAP-00100" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00099/surface-deform-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00099/surface-deform-modifier-desktop-report.json new file mode 100644 index 00000000..423dea54 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00099/surface-deform-modifier-desktop-report.json @@ -0,0 +1,23 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00099-modifier-SURFACE_DEFORM.blend", + "fixtureSha256": "cb459101d9ecdd4e5761a3e216dcf3eda99a09eaad5642573ef0ba0b4c063072", + "modifier": { + "meshId": "mesh:WebGapSurfaceDeformMesh", + "modifier": { + "name": "WebGapSurfaceDeform", + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "SURFACE_DEFORM", + "typeCode": 53 + }, + "objectId": "object:WebGapSurfaceDeformObject", + "task": "M16-GAP-00099" + }, + "operation": "SURFACE_DEFORM_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00099" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00099/surface-deform-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00099/surface-deform-modifier-local-exact-report.json new file mode 100644 index 00000000..e6f5cdda --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00099/surface-deform-modifier-local-exact-report.json @@ -0,0 +1,46 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00099", + "operation": "SURFACE_DEFORM_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00099-modifier-SURFACE_DEFORM.blend", + "sha256": "cb459101d9ecdd4e5761a3e216dcf3eda99a09eaad5642573ef0ba0b4c063072" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00099/surface-deform-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapSurfaceDeformObject", + "meshId": "mesh:WebGapSurfaceDeformMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "METADATA_ONLY", + "name": "WebGapSurfaceDeform", + "parameters": { + "falloff": 4, + "flag": 5, + "mode": 1, + "persistentUid": 583674501, + "strength": 1, + "surfaceDeformFlags": 0, + "typeCode": 53, + "vertexGroup": "" + }, + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "SURFACE_DEFORM", + "uuid": "modifier:object:WebGapSurfaceDeformObject:583674501" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00100" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00100/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00100/manifest.json new file mode 100644 index 00000000..637b9ea0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00100/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00100", + "parentTask": "M16-GAP-00099", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "TRIANGULATE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00099/manifest.json", "sha256": "08e66a8c4bede64bcfc0e6625843f70f4e51b03be655b0078110e086ce599a7b"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00100-modifier-TRIANGULATE.blend", "sha256": "4475c06ab20bc9f9f771556173e7d5782049548dfcb845e7febba79c27f5ffcf"}, + "generator": {"path": "tools/web/generated/M16-GAP-00100.py", "sha256": "38d58e97c7b10b34abb70090deea9127a9bfda58bf446a8fa6fa7b8835482e82"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "140a3a86220c2af01d5daad10dd482316b208a6a2aa0af762dd39b65c6cda9d8"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "fff50cc76b793191b61746290d28c6ea1d429f700d094aa444d8f2f91db26462"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "11c598f89b531f2e9d6e2169ab6eed07b7cbea86c8b8d58ef4c6ff045c6414bf"}, + "modifierCmake": {"path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127"}, + "particleModifier": {"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f"}, + "particleCore": {"path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c"}, + "physicsReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "1a991f13fc2f2e4a7b00366c52e6285198c24e72c110bb5f1f6d005e56089104"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "1a991f13fc2f2e4a7b00366c52e6285198c24e72c110bb5f1f6d005e56089104"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00100/triangulate-modifier-desktop-report.json", "sha256": "8e1472c739110448d2c1987c32403714b9465606c0e8b3a8e3ae4867743ba377"}, + "webReport": {"path": "tests/golden/M16-GAP-00100/triangulate-modifier-local-exact-report.json", "sha256": "d715e77c6e2ef82c9611a68a3808057d08feb3de715ab1a3f07c6e1b67b6b69d"} + }, + "nextTask": "M16-GAP-00101" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00100/triangulate-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00100/triangulate-modifier-desktop-report.json new file mode 100644 index 00000000..03127268 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00100/triangulate-modifier-desktop-report.json @@ -0,0 +1,25 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00100-modifier-TRIANGULATE.blend", + "fixtureSha256": "4475c06ab20bc9f9f771556173e7d5782049548dfcb845e7febba79c27f5ffcf", + "modifier": { + "meshId": "mesh:WebGapTriangulateMesh", + "modifier": { + "name": "WebGapTriangulate", + "ngonMethod": 1, + "quadMethod": 1, + "showEditMode": true, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "TRIANGULATE", + "typeCode": 44 + }, + "objectId": "object:WebGapTriangulateObject", + "task": "M16-GAP-00100" + }, + "operation": "TRIANGULATE_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00100" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00100/triangulate-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00100/triangulate-modifier-local-exact-report.json new file mode 100644 index 00000000..54fa5517 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00100/triangulate-modifier-local-exact-report.json @@ -0,0 +1,44 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00100", + "operation": "TRIANGULATE_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00100-modifier-TRIANGULATE.blend", + "sha256": "4475c06ab20bc9f9f771556173e7d5782049548dfcb845e7febba79c27f5ffcf" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00100/triangulate-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapTriangulateObject", + "meshId": "mesh:WebGapTriangulateMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "METADATA_ONLY", + "name": "WebGapTriangulate", + "parameters": { + "flag": 5, + "mode": 5, + "ngonMethod": 1, + "persistentUid": 1222815822, + "quadMethod": 1, + "typeCode": 44 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "TRIANGULATE", + "uuid": "modifier:object:WebGapTriangulateObject:1222815822" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00101" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00101/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00101/manifest.json new file mode 100644 index 00000000..2bbd4fb2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00101/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00101", + "parentTask": "M16-GAP-00100", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "UV_PROJECT_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00100/manifest.json", "sha256": "2acecca22e6e3cbcaf6fad687cff49558182f1b16a9052d303162e863c2fb17e"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00101-modifier-UV_PROJECT.blend", "sha256": "e5cf137ee1feddf7b03f287b04299a7a78177b58e63545ccca15c78f202ce2a4"}, + "generator": {"path": "tools/web/generated/M16-GAP-00101.py", "sha256": "d86878aacd79189a5c1fce75f94eab1f7c04039562acefa101152cc097334765"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "140a3a86220c2af01d5daad10dd482316b208a6a2aa0af762dd39b65c6cda9d8"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "c9d184a6f0d5ea3aea493cab8fa3e82fd99cc77fc797ef39f4da995df3f225ff"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "11c598f89b531f2e9d6e2169ab6eed07b7cbea86c8b8d58ef4c6ff045c6414bf"}, + "modifierCmake": {"path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127"}, + "particleModifier": {"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f"}, + "particleCore": {"path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c"}, + "physicsReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "1a991f13fc2f2e4a7b00366c52e6285198c24e72c110bb5f1f6d005e56089104"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "1a991f13fc2f2e4a7b00366c52e6285198c24e72c110bb5f1f6d005e56089104"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00101/uv-project-modifier-desktop-report.json", "sha256": "18364763d8956b1426ae0ce7809491562d66833cbf77b7e00b141c002c54d8ed"}, + "webReport": {"path": "tests/golden/M16-GAP-00101/uv-project-modifier-local-exact-report.json", "sha256": "b0605455ac7287165072c928a06d556af759f9f7bd1ba1fac32cccb0ca0e0556"} + }, + "nextTask": "M16-GAP-00102" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00101/uv-project-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00101/uv-project-modifier-desktop-report.json new file mode 100644 index 00000000..49538dc3 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00101/uv-project-modifier-desktop-report.json @@ -0,0 +1,23 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00101-modifier-UV_PROJECT.blend", + "fixtureSha256": "e5cf137ee1feddf7b03f287b04299a7a78177b58e63545ccca15c78f202ce2a4", + "modifier": { + "meshId": "mesh:WebGapUvProjectMesh", + "modifier": { + "name": "WebGapUvProject", + "showEditMode": true, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "UV_PROJECT", + "typeCode": 15 + }, + "objectId": "object:WebGapUvProjectObject", + "task": "M16-GAP-00101" + }, + "operation": "UV_PROJECT_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00101" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00101/uv-project-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00101/uv-project-modifier-local-exact-report.json new file mode 100644 index 00000000..b0b9c766 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00101/uv-project-modifier-local-exact-report.json @@ -0,0 +1,42 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00101", + "operation": "UV_PROJECT_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00101-modifier-UV_PROJECT.blend", + "sha256": "e5cf137ee1feddf7b03f287b04299a7a78177b58e63545ccca15c78f202ce2a4" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00101/uv-project-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapUvProjectObject", + "meshId": "mesh:WebGapUvProjectMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "BLOCKED", + "name": "WebGapUvProject", + "parameters": { + "flag": 5, + "mode": 5, + "persistentUid": 986394667, + "typeCode": 15 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "UV_PROJECT", + "uuid": "modifier:object:WebGapUvProjectObject:986394667" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00102" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00102/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00102/manifest.json new file mode 100644 index 00000000..a9dceffb --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00102/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00102", + "parentTask": "M16-GAP-00101", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "UV_WARP_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00101/manifest.json", "sha256": "ada91eacc9d9d81aef07ba22a8522fa5968491bb202b84db74649098901cefbc"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00102-modifier-UV_WARP.blend", "sha256": "ad3f2ba8f4d282b2333fc192f3e2fdc598c06125f3b14c9c47b4721f9a1a0df9"}, + "generator": {"path": "tools/web/generated/M16-GAP-00102.py", "sha256": "aa91e891f053d2d4716e204c64e54a9c139f8dc9e53b23bf43e7f9c4cbba93b8"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "140a3a86220c2af01d5daad10dd482316b208a6a2aa0af762dd39b65c6cda9d8"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "8c30d63a2c7bb08f52836f2a7d085d5cac8ab594b5e14f0e9e587534c85eae45"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "11c598f89b531f2e9d6e2169ab6eed07b7cbea86c8b8d58ef4c6ff045c6414bf"}, + "modifierCmake": {"path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127"}, + "particleModifier": {"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f"}, + "particleCore": {"path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c"}, + "physicsReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "1a991f13fc2f2e4a7b00366c52e6285198c24e72c110bb5f1f6d005e56089104"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "1a991f13fc2f2e4a7b00366c52e6285198c24e72c110bb5f1f6d005e56089104"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00102/uv-warp-modifier-desktop-report.json", "sha256": "ed6bf6150e20eef0b7207397cee12db3408836075866f05bb48da92e706ab828"}, + "webReport": {"path": "tests/golden/M16-GAP-00102/uv-warp-modifier-local-exact-report.json", "sha256": "9499f499401b3703ee7e4ebab55516710fc235f08cdbd93271d9b348b066ba5f"} + }, + "nextTask": "M16-GAP-00103" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00102/uv-warp-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00102/uv-warp-modifier-desktop-report.json new file mode 100644 index 00000000..65ea499d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00102/uv-warp-modifier-desktop-report.json @@ -0,0 +1,23 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00102-modifier-UV_WARP.blend", + "fixtureSha256": "ad3f2ba8f4d282b2333fc192f3e2fdc598c06125f3b14c9c47b4721f9a1a0df9", + "modifier": { + "meshId": "mesh:WebGapUvWarpMesh", + "modifier": { + "name": "WebGapUvWarp", + "showEditMode": true, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "UV_WARP", + "typeCode": 45 + }, + "objectId": "object:WebGapUvWarpObject", + "task": "M16-GAP-00102" + }, + "operation": "UV_WARP_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00102" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00102/uv-warp-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00102/uv-warp-modifier-local-exact-report.json new file mode 100644 index 00000000..6b3836f2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00102/uv-warp-modifier-local-exact-report.json @@ -0,0 +1,42 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00102", + "operation": "UV_WARP_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00102-modifier-UV_WARP.blend", + "sha256": "ad3f2ba8f4d282b2333fc192f3e2fdc598c06125f3b14c9c47b4721f9a1a0df9" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00102/uv-warp-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapUvWarpObject", + "meshId": "mesh:WebGapUvWarpMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "BLOCKED", + "name": "WebGapUvWarp", + "parameters": { + "flag": 5, + "mode": 5, + "persistentUid": 2036523567, + "typeCode": 45 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "UV_WARP", + "uuid": "modifier:object:WebGapUvWarpObject:2036523567" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00103" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00103/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00103/manifest.json new file mode 100644 index 00000000..38cf29c7 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00103/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00103", + "parentTask": "M16-GAP-00102", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "VERTEX_WEIGHT_EDIT_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00102/manifest.json", "sha256": "57cf7929d23fbc053782f4bbe4c480bd9432c2af6cfdab74f9e4bc0160c0e7ad"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00103-modifier-VERTEX_WEIGHT_EDIT.blend", "sha256": "2ecafafb8d81c27842512406dd93978754f624f0e9012e4a2036d32eac1178b2"}, + "generator": {"path": "tools/web/generated/M16-GAP-00103.py", "sha256": "383166f3a110e555a87ba5e0f62d5805c6890d736cf79c6f1dd8972e6e6b0a2a"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "140a3a86220c2af01d5daad10dd482316b208a6a2aa0af762dd39b65c6cda9d8"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "6f8937c4947673b8582af68c2d48335ef493e4b8d844104abf1e9d2db36ac7f7"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "0e1a72ef3655eb51047dd488c3a9a733022193f1631b21d59c615f8acb1a67f8"}, + "modifierCmake": {"path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127"}, + "particleModifier": {"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79b79d3a28be12081a0c7d6e6f"}, + "particleCore": {"path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c"}, + "physicsReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00103/vertex-weight-edit-modifier-desktop-report.json", "sha256": "442287f280444efcc0dcfc8602d935066af17aeca0072e978f64ffa3e6e13b9d"}, + "webReport": {"path": "tests/golden/M16-GAP-00103/vertex-weight-edit-modifier-local-exact-report.json", "sha256": "23d26e90775bce127efb1a8572c7a9f92acdf4d22b41bd1de6c78a11b7246ba8"} + }, + "nextTask": "M16-GAP-00104" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00103/vertex-weight-edit-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00103/vertex-weight-edit-modifier-desktop-report.json new file mode 100644 index 00000000..d6ff5e55 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00103/vertex-weight-edit-modifier-desktop-report.json @@ -0,0 +1,23 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00103-modifier-VERTEX_WEIGHT_EDIT.blend", + "fixtureSha256": "2ecafafb8d81c27842512406dd93978754f624f0e9012e4a2036d32eac1178b2", + "modifier": { + "meshId": "mesh:WebGapVertexWeightEditMesh", + "modifier": { + "name": "WebGapVertexWeightEdit", + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "VERTEX_WEIGHT_EDIT", + "typeCode": 36 + }, + "objectId": "object:WebGapVertexWeightEditObject", + "task": "M16-GAP-00103" + }, + "operation": "VERTEX_WEIGHT_EDIT_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00103" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00103/vertex-weight-edit-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00103/vertex-weight-edit-modifier-local-exact-report.json new file mode 100644 index 00000000..5157e2dd --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00103/vertex-weight-edit-modifier-local-exact-report.json @@ -0,0 +1,42 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00103", + "operation": "VERTEX_WEIGHT_EDIT_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00103-modifier-VERTEX_WEIGHT_EDIT.blend", + "sha256": "2ecafafb8d81c27842512406dd93978754f624f0e9012e4a2036d32eac1178b2" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00103/vertex-weight-edit-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapVertexWeightEditObject", + "meshId": "mesh:WebGapVertexWeightEditMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "BLOCKED", + "name": "WebGapVertexWeightEdit", + "parameters": { + "flag": 5, + "mode": 1, + "persistentUid": 1300223564, + "typeCode": 36 + }, + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "VERTEX_WEIGHT_EDIT", + "uuid": "modifier:object:WebGapVertexWeightEditObject:1300223564" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00104" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00104/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00104/manifest.json new file mode 100644 index 00000000..a2d9962b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00104/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00104", + "parentTask": "M16-GAP-00103", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "VERTEX_WEIGHT_MIX_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00103/manifest.json", "sha256": "b6e93793349780cbc30a543d5c6abc9c5ba19df2acb62419a6a25b6da816fb21"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00104-modifier-VERTEX_WEIGHT_MIX.blend", "sha256": "19a164b591a6fbe02df07797c422aea350e26f1e9125589037067f609095105a"}, + "generator": {"path": "tools/web/generated/M16-GAP-00104.py", "sha256": "d3d6405f1f20036043610b8a8bb22faf5e8652d6e47ee08cc40cd5e9f5567464"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "140a3a86220c2af01d5daad10dd482316b208a6a2aa0af762dd39b65c6cda9d8"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "0f1f49ee8663b9f25a350d4f90c5dd682e30933709c423f5d0d02e1306618886"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "0e1a72ef3655eb51047dd488c3a9a733022193f1631b21d59c615f8acb1a67f8"}, + "modifierCmake": {"path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127"}, + "particleModifier": {"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79b79d3a28be12081a0c7d6e6f"}, + "particleCore": {"path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c"}, + "physicsReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00104/vertex-weight-mix-modifier-desktop-report.json", "sha256": "6121a089239450b95037c25858958ab5d067af538657f56452fdce81186834a6"}, + "webReport": {"path": "tests/golden/M16-GAP-00104/vertex-weight-mix-modifier-local-exact-report.json", "sha256": "a755e5c88c8a22305155dc02c455e9fe6ccb1e92b7053be7a3ca57da2aa48971"} + }, + "nextTask": "M16-GAP-00105" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00104/vertex-weight-mix-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00104/vertex-weight-mix-modifier-desktop-report.json new file mode 100644 index 00000000..7717af82 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00104/vertex-weight-mix-modifier-desktop-report.json @@ -0,0 +1,23 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00104-modifier-VERTEX_WEIGHT_MIX.blend", + "fixtureSha256": "19a164b591a6fbe02df07797c422aea350e26f1e9125589037067f609095105a", + "modifier": { + "meshId": "mesh:WebGapVertexWeightMixMesh", + "modifier": { + "name": "WebGapVertexWeightMix", + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "VERTEX_WEIGHT_MIX", + "typeCode": 37 + }, + "objectId": "object:WebGapVertexWeightMixObject", + "task": "M16-GAP-00104" + }, + "operation": "VERTEX_WEIGHT_MIX_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00104" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00104/vertex-weight-mix-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00104/vertex-weight-mix-modifier-local-exact-report.json new file mode 100644 index 00000000..d9a8f6d4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00104/vertex-weight-mix-modifier-local-exact-report.json @@ -0,0 +1,42 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00104", + "operation": "VERTEX_WEIGHT_MIX_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00104-modifier-VERTEX_WEIGHT_MIX.blend", + "sha256": "19a164b591a6fbe02df07797c422aea350e26f1e9125589037067f609095105a" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00104/vertex-weight-mix-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapVertexWeightMixObject", + "meshId": "mesh:WebGapVertexWeightMixMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "BLOCKED", + "name": "WebGapVertexWeightMix", + "parameters": { + "flag": 5, + "mode": 1, + "persistentUid": 1288824592, + "typeCode": 37 + }, + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "VERTEX_WEIGHT_MIX", + "uuid": "modifier:object:WebGapVertexWeightMixObject:1288824592" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00105" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00105/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00105/manifest.json new file mode 100644 index 00000000..d7d39fe4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00105/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00105", + "parentTask": "M16-GAP-00104", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "VERTEX_WEIGHT_PROXIMITY_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00104/manifest.json", "sha256": "47790989f092bf86ec6f628d88249455428265d6d0f5e4cffa1d9d55e87757b2"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00105-modifier-VERTEX_WEIGHT_PROXIMITY.blend", "sha256": "53234cfd0e10e91b78465d8f18a4b8d863885d1d93c0757c07f0d31da486fbf2"}, + "generator": {"path": "tools/web/generated/M16-GAP-00105.py", "sha256": "59dfdb7ba6bb853ebc3d5d24a7c63c6a09fdda5381d62febc211128a87adc7d9"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "140a3a86220c2af01d5daad10dd482316b208a6a2aa0af762dd39b65c6cda9d8"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "cbb3b8077beaef003acab57637c051d5ab1c4c8cffa81171577474a7a0329ca7"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "0e1a72ef3655eb51047dd488c3a9a733022193f1631b21d59c615f8acb1a67f8"}, + "modifierCmake": {"path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127"}, + "particleModifier": {"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79b79d3a28be12081a0c7d6e6f"}, + "particleCore": {"path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c"}, + "physicsReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00105/vertex-weight-proximity-modifier-desktop-report.json", "sha256": "7e6ebaf459de04781a6e6467be84c6065039a4f3fb6b4c748fcbeda3b4806179"}, + "webReport": {"path": "tests/golden/M16-GAP-00105/vertex-weight-proximity-modifier-local-exact-report.json", "sha256": "7594f78376b061793524a4c586ecd2335d7aa9064d4e31b840f92e03819fac1f"} + }, + "nextTask": "M16-GAP-00106" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00105/vertex-weight-proximity-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00105/vertex-weight-proximity-modifier-desktop-report.json new file mode 100644 index 00000000..2cd6a568 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00105/vertex-weight-proximity-modifier-desktop-report.json @@ -0,0 +1,23 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00105-modifier-VERTEX_WEIGHT_PROXIMITY.blend", + "fixtureSha256": "53234cfd0e10e91b78465d8f18a4b8d863885d1d93c0757c07f0d31da486fbf2", + "modifier": { + "meshId": "mesh:WebGapVertexWeightProximityMesh", + "modifier": { + "name": "WebGapVertexWeightProximity", + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "VERTEX_WEIGHT_PROXIMITY", + "typeCode": 38 + }, + "objectId": "object:WebGapVertexWeightProximityObject", + "task": "M16-GAP-00105" + }, + "operation": "VERTEX_WEIGHT_PROXIMITY_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00105" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00105/vertex-weight-proximity-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00105/vertex-weight-proximity-modifier-local-exact-report.json new file mode 100644 index 00000000..129b7ba7 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00105/vertex-weight-proximity-modifier-local-exact-report.json @@ -0,0 +1,42 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00105", + "operation": "VERTEX_WEIGHT_PROXIMITY_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00105-modifier-VERTEX_WEIGHT_PROXIMITY.blend", + "sha256": "53234cfd0e10e91b78465d8f18a4b8d863885d1d93c0757c07f0d31da486fbf2" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00105/vertex-weight-proximity-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapVertexWeightProximityObject", + "meshId": "mesh:WebGapVertexWeightProximityMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "BLOCKED", + "name": "WebGapVertexWeightProximity", + "parameters": { + "flag": 5, + "mode": 1, + "persistentUid": 1266791070, + "typeCode": 38 + }, + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "VERTEX_WEIGHT_PROXIMITY", + "uuid": "modifier:object:WebGapVertexWeightProximityObject:1266791070" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00106" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00106/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00106/manifest.json new file mode 100644 index 00000000..51427539 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00106/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00106", + "parentTask": "M16-GAP-00105", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "VOLUME_DISPLACE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00105/manifest.json", "sha256": "cf9de11d57b483cf564f2f3e782724ca84f86ddfc6e320e757051a50912281d7"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00106-modifier-VOLUME_DISPLACE.blend", "sha256": "95a922b90fb5bce90cb2f7995761805709a4a18b9206fab7f30e3848160b2c95"}, + "generator": {"path": "tools/web/generated/M16-GAP-00106.py", "sha256": "7aad13aed9fc5da77c671e89961dc744228cfea00c65044270000f0fb8e4c396"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "140a3a86220c2af01d5daad10dd482316b208a6a2aa0af762dd39b65c6cda9d8"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "318cea1fb5a332cf2d4504c5319781257b7450ccc1b9ee0c61d1f4c99eebb0db"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "0e1a72ef3655eb51047dd488c3a9a733022193f1631b21d59c615f8acb1a67f8"}, + "modifierCmake": {"path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127"}, + "particleModifier": {"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79b79d3a28be12081a0c7d6e6f"}, + "particleCore": {"path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c"}, + "physicsReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00106/volume-displace-modifier-desktop-report.json", "sha256": "00ee176bc712320454f7ddb585710ccab243b9b5b89f2e2f0eb364c536bddcd6"}, + "webReport": {"path": "tests/golden/M16-GAP-00106/volume-displace-modifier-local-exact-report.json", "sha256": "9c44441bc0cfadbdce570f5c3e7b074e3da00f19a7f8a2e8d84d0ae6167164f8"} + }, + "nextTask": "M16-GAP-00107" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00106/volume-displace-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00106/volume-displace-modifier-desktop-report.json new file mode 100644 index 00000000..8e7edc44 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00106/volume-displace-modifier-desktop-report.json @@ -0,0 +1,22 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00106-modifier-VOLUME_DISPLACE.blend", + "fixtureSha256": "95a922b90fb5bce90cb2f7995761805709a4a18b9206fab7f30e3848160b2c95", + "modifier": { + "modifier": { + "name": "WebGapVolumeDisplace", + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "VOLUME_DISPLACE", + "typeCode": 59 + }, + "objectId": "object:WebGapVolumeDisplaceObject", + "task": "M16-GAP-00106" + }, + "operation": "VOLUME_DISPLACE_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00106" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00106/volume-displace-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00106/volume-displace-modifier-local-exact-report.json new file mode 100644 index 00000000..19fcdd73 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00106/volume-displace-modifier-local-exact-report.json @@ -0,0 +1,41 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00106", + "operation": "VOLUME_DISPLACE_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00106-modifier-VOLUME_DISPLACE.blend", + "sha256": "95a922b90fb5bce90cb2f7995761805709a4a18b9206fab7f30e3848160b2c95" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00106/volume-displace-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapVolumeDisplaceObject", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "BLOCKED", + "name": "WebGapVolumeDisplace", + "parameters": { + "flag": 5, + "mode": 1, + "persistentUid": 1329852763, + "typeCode": 59 + }, + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "VOLUME_DISPLACE", + "uuid": "modifier:object:WebGapVolumeDisplaceObject:1329852763" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00107" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00107/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00107/manifest.json new file mode 100644 index 00000000..c28deb13 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00107/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00107", + "parentTask": "M16-GAP-00106", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "VOLUME_TO_MESH_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00106/manifest.json", "sha256": "a2d9d12cc1bfdd28c4766ca951d1d63aff3cb53631d36f618e85918a3b7c717d"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00107-modifier-VOLUME_TO_MESH.blend", "sha256": "fab68f64a3d9bbf1b224393518bc43a454601eabf8d936020aee5b478012356f"}, + "generator": {"path": "tools/web/generated/M16-GAP-00107.py", "sha256": "9730c26f96cd994d92cf2e2670718124f899e0ce2e3d044a10404f8b0fafa834"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "140a3a86220c2af01d5daad10dd482316b208a6a2aa0af762dd39b65c6cda9d8"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "b1707169fa5c648b9c8b21d6057f0c1dbb78c11a7a5e0f16ee135f49a28ce0d2"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "0e1a72ef3655eb51047dd488c3a9a733022193f1631b21d59c615f8acb1a67f8"}, + "modifierCmake": {"path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127"}, + "particleModifier": {"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79b79d3a28be12081a0c7d6e6f"}, + "particleCore": {"path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c"}, + "physicsReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00107/volume-to-mesh-modifier-desktop-report.json", "sha256": "7cbfeae24f5f74a8b9509da418a65520a595530b164733bbd9ecf9de99212f02"}, + "webReport": {"path": "tests/golden/M16-GAP-00107/volume-to-mesh-modifier-local-exact-report.json", "sha256": "1083d3e4144e172245c61b1ff8afa8b1bcf80b9bfae4d066e7eb0cfab80f5279"} + }, + "nextTask": "M16-GAP-00108" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00107/volume-to-mesh-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00107/volume-to-mesh-modifier-desktop-report.json new file mode 100644 index 00000000..72fd0ecf --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00107/volume-to-mesh-modifier-desktop-report.json @@ -0,0 +1,23 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00107-modifier-VOLUME_TO_MESH.blend", + "fixtureSha256": "fab68f64a3d9bbf1b224393518bc43a454601eabf8d936020aee5b478012356f", + "modifier": { + "meshId": "mesh:WebGapVolumeToMeshMesh", + "modifier": { + "name": "WebGapVolumeToMesh", + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "VOLUME_TO_MESH", + "typeCode": 60 + }, + "objectId": "object:WebGapVolumeToMeshObject", + "task": "M16-GAP-00107" + }, + "operation": "VOLUME_TO_MESH_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00107" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00107/volume-to-mesh-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00107/volume-to-mesh-modifier-local-exact-report.json new file mode 100644 index 00000000..6d098266 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00107/volume-to-mesh-modifier-local-exact-report.json @@ -0,0 +1,42 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00107", + "operation": "VOLUME_TO_MESH_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00107-modifier-VOLUME_TO_MESH.blend", + "sha256": "fab68f64a3d9bbf1b224393518bc43a454601eabf8d936020aee5b478012356f" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00107/volume-to-mesh-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapVolumeToMeshObject", + "meshId": "mesh:WebGapVolumeToMeshMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "BLOCKED", + "name": "WebGapVolumeToMesh", + "parameters": { + "flag": 5, + "mode": 1, + "persistentUid": 662944674, + "typeCode": 60 + }, + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "VOLUME_TO_MESH", + "uuid": "modifier:object:WebGapVolumeToMeshObject:662944674" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00108" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00108/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00108/manifest.json new file mode 100644 index 00000000..85b54b0e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00108/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00108", + "parentTask": "M16-GAP-00107", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "WARP_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00107/manifest.json", "sha256": "760706922c497ed0898b84fd07789d0d8c53f5a448191ad6c2425d1d7e13ad20"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00108-modifier-WARP.blend", "sha256": "a328ef4b4cbcf265de0483012f80860fccb75e53fcb25bd6ccbe81dc97cb0ba5"}, + "generator": {"path": "tools/web/generated/M16-GAP-00108.py", "sha256": "ee8667312b3608fff806a2f888edca90cad3a960184ee64d0b7b33fd9cad2657"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "140a3a86220c2af01d5daad10dd482316b208a6a2aa0af762dd39b65c6cda9d8"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "71f6265a1769981b08b714ddbf0c95881181e003694761935e7e592279d3237a"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "0e1a72ef3655eb51047dd488c3a9a733022193f1631b21d59c615f8acb1a67f8"}, + "modifierCmake": {"path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127"}, + "particleModifier": {"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79b79d3a28be12081a0c7d6e6f"}, + "particleCore": {"path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c"}, + "physicsReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00108/warp-modifier-desktop-report.json", "sha256": "5daba0b7befe92e75dab3dca35e00ee1e3c211ab02e9f5ec3ec9bdb5c6164250"}, + "webReport": {"path": "tests/golden/M16-GAP-00108/warp-modifier-local-exact-report.json", "sha256": "0aeac2276b0828180780358383b626295b1ef43fece15ac6fcadff880f861dd3"} + }, + "nextTask": "M16-GAP-00109" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00108/warp-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00108/warp-modifier-desktop-report.json new file mode 100644 index 00000000..b69aac14 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00108/warp-modifier-desktop-report.json @@ -0,0 +1,23 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00108-modifier-WARP.blend", + "fixtureSha256": "a328ef4b4cbcf265de0483012f80860fccb75e53fcb25bd6ccbe81dc97cb0ba5", + "modifier": { + "meshId": "mesh:WebGapWarpMesh", + "modifier": { + "name": "WebGapWarp", + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "WARP", + "typeCode": 35 + }, + "objectId": "object:WebGapWarpObject", + "task": "M16-GAP-00108" + }, + "operation": "WARP_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00108" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00108/warp-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00108/warp-modifier-local-exact-report.json new file mode 100644 index 00000000..65a875ec --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00108/warp-modifier-local-exact-report.json @@ -0,0 +1,42 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00108", + "operation": "WARP_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00108-modifier-WARP.blend", + "sha256": "a328ef4b4cbcf265de0483012f80860fccb75e53fcb25bd6ccbe81dc97cb0ba5" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00108/warp-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapWarpObject", + "meshId": "mesh:WebGapWarpMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "BLOCKED", + "name": "WebGapWarp", + "parameters": { + "flag": 5, + "mode": 1, + "persistentUid": 614917079, + "typeCode": 35 + }, + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "WARP", + "uuid": "modifier:object:WebGapWarpObject:614917079" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00109" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00109/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00109/manifest.json new file mode 100644 index 00000000..25f0a5ff --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00109/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00109", + "parentTask": "M16-GAP-00108", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "WAVE_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00108/manifest.json", "sha256": "4a3c0e88bba11217d661ea22c62cc01fe15379527cec68b8b7c92d01042ecda2"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00109-modifier-WAVE.blend", "sha256": "41c81c36b176656e08a33c9c428da5a257c11ab6e9f0f8bfa530336b7ab159a8"}, + "generator": {"path": "tools/web/generated/M16-GAP-00109.py", "sha256": "2c8f4bfe4a36a069fd6e106fc80836bf38df2663e2343a6cde15114f00cbffdc"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "87827a3285bd779d9faff41e7aaea94eb17e6e5f402f966a106e0e6a209de54e"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "a50a1f23fa9e8eef0eb32af88a4c0983b63176b7f39aee55deafb59adcb37ac4"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "0e1a72ef3655eb51047dd488c3a9a733022193f1631b21d59c615f8acb1a67f8"}, + "modifierCmake": {"path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127"}, + "particleModifier": {"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79b79d3a28be12081a0c7d6e6f"}, + "particleCore": {"path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c"}, + "physicsReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00109/wave-modifier-desktop-report.json", "sha256": "ddec88c688169daaaeda211a7b5b1ad2a7e9bd2f5baf29c8c85c5d5ae2265f3c"}, + "webReport": {"path": "tests/golden/M16-GAP-00109/wave-modifier-local-exact-report.json", "sha256": "29e011eec263333878bc92b5514ec9b153142872bd59d89cecba740395f7e7bc"} + }, + "nextTask": "M16-GAP-00110" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00109/wave-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00109/wave-modifier-desktop-report.json new file mode 100644 index 00000000..27286a8d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00109/wave-modifier-desktop-report.json @@ -0,0 +1,26 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00109-modifier-WAVE.blend", + "fixtureSha256": "41c81c36b176656e08a33c9c428da5a257c11ab6e9f0f8bfa530336b7ab159a8", + "modifier": { + "meshId": "mesh:WebGapWaveMesh", + "modifier": { + "height": 0.6499999761581421, + "name": "WebGapWave", + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "speed": 0.41999998688697815, + "type": "WAVE", + "typeCode": 7, + "width": 1.75 + }, + "objectId": "object:WebGapWaveObject", + "task": "M16-GAP-00109" + }, + "operation": "WAVE_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00109" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00109/wave-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00109/wave-modifier-local-exact-report.json new file mode 100644 index 00000000..555e9461 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00109/wave-modifier-local-exact-report.json @@ -0,0 +1,45 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00109", + "operation": "WAVE_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00109-modifier-WAVE.blend", + "sha256": "41c81c36b176656e08a33c9c428da5a257c11ab6e9f0f8bfa530336b7ab159a8" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00109/wave-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapWaveObject", + "meshId": "mesh:WebGapWaveMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "METADATA_ONLY", + "name": "WebGapWave", + "parameters": { + "flag": 5, + "height": 0.6499999761581421, + "mode": 1, + "persistentUid": 1403213978, + "speed": 0.41999998688697815, + "typeCode": 7, + "width": 1.75 + }, + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "WAVE", + "uuid": "modifier:object:WebGapWaveObject:1403213978" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00110" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00110/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00110/manifest.json new file mode 100644 index 00000000..7df2a7fd --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00110/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00110", + "parentTask": "M16-GAP-00109", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "WEIGHTED_NORMAL_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00109/manifest.json", "sha256": "8af6813c16138942441f7772e08a6f2c6586e21c665248ee7566be5f26279081"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00110-modifier-WEIGHTED_NORMAL.blend", "sha256": "26469e905bbc2c52467b4b1361f80ffb75b756206974724debbae5e06fd363f0"}, + "generator": {"path": "tools/web/generated/M16-GAP-00110.py", "sha256": "17fb8ee025fe4fadff5ca63401d795ace27920d88fd4dbe4c32af7614e0892ab"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "be849a5eaae8c3b7551aa3e0f560aba3eccd0d346769fdc2093dd4f46ff80652"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "87ef950db06c906b1d541af408295d589167f96c66ba87e19d5006f353da4a54"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "0e1a72ef3655eb51047dd488c3a9a733022193f1631b21d59c615f8acb1a67f8"}, + "modifierCmake": {"path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127"}, + "particleModifier": {"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79b79d3a28be12081a0c7d6e6f"}, + "particleCore": {"path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c"}, + "physicsReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00110/weighted-normal-modifier-desktop-report.json", "sha256": "ae59fdc10466bfa461dbaed1aa45bb2ac6211b8a303e58de8ea3ee9c5e0e40ba"}, + "webReport": {"path": "tests/golden/M16-GAP-00110/weighted-normal-modifier-local-exact-report.json", "sha256": "6360a1706e7456a5d51fa2effbc7505cd7209818690ab1b7665abf0bbff7a311"} + }, + "nextTask": "M16-GAP-00111" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00110/weighted-normal-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00110/weighted-normal-modifier-desktop-report.json new file mode 100644 index 00000000..eb13f55f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00110/weighted-normal-modifier-desktop-report.json @@ -0,0 +1,26 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00110-modifier-WEIGHTED_NORMAL.blend", + "fixtureSha256": "26469e905bbc2c52467b4b1361f80ffb75b756206974724debbae5e06fd363f0", + "modifier": { + "meshId": "mesh:WebGapWeightedNormalMesh", + "modifier": { + "keepSharp": true, + "name": "WebGapWeightedNormal", + "showEditMode": true, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "WEIGHTED_NORMAL", + "typeCode": 54, + "useFaceInfluence": true, + "weight": 70 + }, + "objectId": "object:WebGapWeightedNormalObject", + "task": "M16-GAP-00110" + }, + "operation": "WEIGHTED_NORMAL_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00110" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00110/weighted-normal-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00110/weighted-normal-modifier-local-exact-report.json new file mode 100644 index 00000000..9911cd1d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00110/weighted-normal-modifier-local-exact-report.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00110", + "operation": "WEIGHTED_NORMAL_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00110-modifier-WEIGHTED_NORMAL.blend", + "sha256": "26469e905bbc2c52467b4b1361f80ffb75b756206974724debbae5e06fd363f0" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00110/weighted-normal-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapWeightedNormalObject", + "meshId": "mesh:WebGapWeightedNormalMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "METADATA_ONLY", + "name": "WebGapWeightedNormal", + "parameters": { + "flag": 5, + "mode": 5, + "persistentUid": 1800999687, + "typeCode": 54, + "weight": 70 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "WEIGHTED_NORMAL", + "uuid": "modifier:object:WebGapWeightedNormalObject:1800999687" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00111" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00111/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00111/manifest.json new file mode 100644 index 00000000..0693ddb4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00111/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00111", + "parentTask": "M16-GAP-00110", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "WELD_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00110/manifest.json", "sha256": "a1432f7c5e7f4d3891e00872c9023890b177806eebd3f988ba6f5968817a9ea7"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00111-modifier-WELD.blend", "sha256": "fa82df1cc06f762f90acfd62c6172c631534838342d971e2ecba931d9bbb4b14"}, + "generator": {"path": "tools/web/generated/M16-GAP-00111.py", "sha256": "70a5a835615617c1feaa7795f1ee8c4dc2e07021a62c97ea87915a4231ef509c"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "4f5ae268fd90a36ef11d4fe411e18968bc6a1479e83f72b6dbb369a082fb4f0c"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "aa81363720f6d980e9aa93b9dfe4d50345b3ceb17b0f73be3c32cfca0a977c35"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "0e1a72ef3655eb51047dd488c3a9a733022193f1631b21d59c615f8acb1a67f8"}, + "modifierCmake": {"path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127"}, + "particleModifier": {"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79b79d3a28be12081a0c7d6e6f"}, + "particleCore": {"path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c"}, + "physicsReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00111/weld-modifier-desktop-report.json", "sha256": "cef902e3eaaae85c8c441320ed1dad00b1193a73003c098e61ba179538972d9d"}, + "webReport": {"path": "tests/golden/M16-GAP-00111/weld-modifier-local-exact-report.json", "sha256": "91ec33d946f8b526ae5af1f0b533896e5c6678655b9ddaa844ca5fafdb773e9e"} + }, + "nextTask": "M16-GAP-00112" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00111/weld-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00111/weld-modifier-desktop-report.json new file mode 100644 index 00000000..834c277d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00111/weld-modifier-desktop-report.json @@ -0,0 +1,24 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00111-modifier-WELD.blend", + "fixtureSha256": "fa82df1cc06f762f90acfd62c6172c631534838342d971e2ecba931d9bbb4b14", + "modifier": { + "meshId": "mesh:WebGapWeldMesh", + "modifier": { + "mergeThreshold": 0.125, + "name": "WebGapWeld", + "showEditMode": true, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "WELD", + "typeCode": 55 + }, + "objectId": "object:WebGapWeldObject", + "task": "M16-GAP-00111" + }, + "operation": "WELD_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00111" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00111/weld-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00111/weld-modifier-local-exact-report.json new file mode 100644 index 00000000..bc0a7211 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00111/weld-modifier-local-exact-report.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00111", + "operation": "WELD_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00111-modifier-WELD.blend", + "sha256": "fa82df1cc06f762f90acfd62c6172c631534838342d971e2ecba931d9bbb4b14" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00111/weld-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapWeldObject", + "meshId": "mesh:WebGapWeldMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "METADATA_ONLY", + "name": "WebGapWeld", + "parameters": { + "flag": 5, + "mergeThreshold": 0.125, + "mode": 5, + "persistentUid": 1358744700, + "typeCode": 55 + }, + "showEditMode": true, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "WELD", + "uuid": "modifier:object:WebGapWeldObject:1358744700" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00112" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00112/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00112/manifest.json new file mode 100644 index 00000000..a74a4b29 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00112/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00112", + "parentTask": "M16-GAP-00111", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "WIREFRAME_MODIFIER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00111/manifest.json", "sha256": "62531e22304954c1ded239004e91c95f9c42d8c9d43d039e339be52e68b20c8f"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00112-modifier-WIREFRAME.blend", "sha256": "b1952474708ab9f56145f661b3cf5562dc0535a5fa0fe6903c71864af73b0641"}, + "generator": {"path": "tools/web/generated/M16-GAP-00112.py", "sha256": "403b955f748db90be606506213ee1cd50f8c95f45ecc4ed1bda8a847dd18ab6d"}, + "desktopChecker": {"path": "tools/web/check-generic-modifier-desktop.py", "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "24069332d14f2eae8cb9a105abcdf7571f04571731f351fd69da6e579f70bcf1"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "0e1a72ef3655eb51047dd488c3a9a733022193f1631b21d59c615f8acb1a67f8"}, + "modifierCmake": {"path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127"}, + "particleModifier": {"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f"}, + "particleCore": {"path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c"}, + "physicsReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00112/wireframe-modifier-desktop-report.json", "sha256": "f83750dfca898b529013b6d3fbefa283e5800a00312c3c613d06735a362ee26a"}, + "webReport": {"path": "tests/golden/M16-GAP-00112/wireframe-modifier-local-exact-report.json", "sha256": "b74f89e88d7e280175c4ff534ebf20477ca35aed189b53ebd4a69fbdacc7e92c"} + }, + "nextTask": "M16-GAP-00113" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00112/wireframe-modifier-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00112/wireframe-modifier-desktop-report.json new file mode 100644 index 00000000..ec6c46c2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00112/wireframe-modifier-desktop-report.json @@ -0,0 +1,24 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00112-modifier-WIREFRAME.blend", + "fixtureSha256": "b1952474708ab9f56145f661b3cf5562dc0535a5fa0fe6903c71864af73b0641", + "modifier": { + "meshId": "mesh:WebGapWireframeMesh", + "modifier": { + "name": "WebGapWireframe", + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "thickness": 0.07999999821186066, + "type": "WIREFRAME", + "typeCode": 48 + }, + "objectId": "object:WebGapWireframeObject", + "task": "M16-GAP-00112" + }, + "operation": "WIREFRAME_MODIFIER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00112" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00112/wireframe-modifier-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00112/wireframe-modifier-local-exact-report.json new file mode 100644 index 00000000..1acce197 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00112/wireframe-modifier-local-exact-report.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00112", + "operation": "WIREFRAME_MODIFIER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00112-modifier-WIREFRAME.blend", + "sha256": "b1952474708ab9f56145f661b3cf5562dc0535a5fa0fe6903c71864af73b0641" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00112/wireframe-modifier-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapWireframeObject", + "meshId": "mesh:WebGapWireframeMesh", + "modifier": { + "dependsOn": [], + "enabled": true, + "evaluationStatus": "METADATA_ONLY", + "name": "WebGapWireframe", + "parameters": { + "flag": 5, + "mode": 1, + "persistentUid": 1067521755, + "thickness": 0.07999999821186066, + "typeCode": 48 + }, + "showEditMode": false, + "showOnCage": false, + "showRender": false, + "showViewport": true, + "type": "WIREFRAME", + "uuid": "modifier:object:WebGapWireframeObject:1067521755" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00113" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00113/action-bake-keys-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00113/action-bake-keys-desktop-report.json new file mode 100644 index 00000000..0f91f9f6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00113/action-bake-keys-desktop-report.json @@ -0,0 +1,47 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 2.0, + 3.0, + 4.0, + 5.0 + ], + "index": 0, + "path": "location" + }, + { + "frames": [ + 1.0, + 2.0, + 3.0, + 4.0, + 5.0 + ], + "index": 1, + "path": "location" + }, + { + "frames": [ + 1.0, + 2.0, + 3.0, + 4.0, + 5.0 + ], + "index": 2, + "path": "location" + } + ], + "name": "WebGapBakeKeysObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00113-operator-action.bake_keys.blend", + "fixtureSha256": "6253d0f8f008dcf8881bae4326d09648d21977a844c0f604c1a4773ef8372931", + "operation": "ACTION_BAKE_KEYS_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00113" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00113/action-bake-keys-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00113/action-bake-keys-local-exact-report.json new file mode 100644 index 00000000..22e4876f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00113/action-bake-keys-local-exact-report.json @@ -0,0 +1,33 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00113", + "operation": "ACTION_BAKE_KEYS_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00113-operator-action.bake_keys.blend", + "sha256": "6253d0f8f008dcf8881bae4326d09648d21977a844c0f604c1a4773ef8372931" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00113/action-bake-keys-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapBakeKeysObjectAction:object:WebGapBakeKeysObject", + "channelPaths": [ + "location[0]", + "location[1]", + "location[2]" + ], + "keyframesPerChannel": [ + 5, + 5, + 5 + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00114" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00113/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00113/manifest.json new file mode 100644 index 00000000..48bcaf3a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00113/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00113", + "parentTask": "M16-GAP-00112", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_BAKE_KEYS_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00112/manifest.json", "sha256": "3d8defe2c37894bcc30e7e752499016b89101057f68301d19dcb24414e682d55"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00113-operator-action.bake_keys.blend", "sha256": "6253d0f8f008dcf8881bae4326d09648d21977a844c0f604c1a4773ef8372931"}, + "generator": {"path": "tools/web/generated/M16-GAP-00113.py", "sha256": "e1eb89000230ec1d198930f06da6b5b35207a83a93eaf3e333c69560d212c5ae"}, + "desktopChecker": {"path": "tools/web/check-action-bake-keys-desktop.py", "sha256": "a03213895003f141054a80fd7ddf8060b59ded44994eefc8f3e4699313923fb6"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "072695686843e8e0025858790440999223e4f1498d8f891b5f8e5010b5c27953"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "0e1a72ef3655eb51047dd488c3a9a733022193f1631b21d59c615f8acb1a67f8"}, + "modifierCmake": {"path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127"}, + "particleModifier": {"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79b79d3a28be12081a0c7d6e6f"}, + "particleCore": {"path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c"}, + "physicsReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00113/action-bake-keys-desktop-report.json", "sha256": "3226d30e020b3384b3a5504c72fe1481f43c048f0827ff6bcbfa1327d9cfd330"}, + "webReport": {"path": "tests/golden/M16-GAP-00113/action-bake-keys-local-exact-report.json", "sha256": "d8a6aaa82c299916a37f2b8ef477349ac675a930d95ff7800450dc6e5a282d58"} + }, + "nextTask": "M16-GAP-00114" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00114/action-clean-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00114/action-clean-desktop-report.json new file mode 100644 index 00000000..c9a9c535 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00114/action-clean-desktop-report.json @@ -0,0 +1,36 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0 + ], + "index": 0, + "path": "location" + }, + { + "frames": [ + 1.0 + ], + "index": 1, + "path": "location" + }, + { + "frames": [ + 1.0 + ], + "index": 2, + "path": "location" + } + ], + "name": "WebGapCleanObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00114-operator-action.clean.blend", + "fixtureSha256": "edd9074159f387a456bc1eb7bb37053fa63038532b928de849378fdcaab9d3e4", + "operation": "ACTION_CLEAN_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00114", + "threshold": 0.01 +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00114/action-clean-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00114/action-clean-local-exact-report.json new file mode 100644 index 00000000..1a1d4343 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00114/action-clean-local-exact-report.json @@ -0,0 +1,29 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00114", + "operation": "ACTION_CLEAN_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00114-operator-action.clean.blend", + "sha256": "edd9074159f387a456bc1eb7bb37053fa63038532b928de849378fdcaab9d3e4" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00114/action-clean-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapCleanObjectAction:object:WebGapCleanObject", + "threshold": 0.01, + "keyframesPerChannel": [ + 1, + 1, + 1 + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00115" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00114/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00114/manifest.json new file mode 100644 index 00000000..c9e13f49 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00114/manifest.json @@ -0,0 +1,57 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00114", + "parentTask": "M16-GAP-00113", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_CLEAN_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00113/manifest.json", + "sha256": "284d37f62f121504e0f50beb0e0cb96dde49c12e3fbd35b151dbb9389673704d" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00114-operator-action.clean.blend", + "sha256": "edd9074159f387a456bc1eb7bb37053fa63038532b928de849378fdcaab9d3e4" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00114.py", + "sha256": "ab1e15afe86016892d2abf43ae84836ff4c84df917d15ca8f1d8b245e138bd52" + }, + "desktopChecker": { + "path": "tools/web/check-action-clean-desktop.py", + "sha256": "4ab652e99fa8fa98cdec6832157f3bbb2e1ac7e5779f01ddd974f192945ea58e" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "2d0a3927afb559d601b5d5e56d5d2e7fd2c586eb2ceb3e9b38f5299b6871990e" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "0e1a72ef3655eb51047dd488c3a9a733022193f1631b21d59c615f8acb1a67f8" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "a847df61055dd322c70b8e57702439f095997831b6d431107895bb5284750234" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00114/action-clean-desktop-report.json", + "sha256": "94e987bcc4704cc880a88b510d7f01a2b990c04a109c9296b6e896d108d1e95d" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00114/action-clean-local-exact-report.json", + "sha256": "58e3dfb9fc14a88bc57c616d02870ce0cb995a596f84bc57a686eb63e2e2952a" + } + }, + "nextTask": "M16-GAP-00115" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00115/action-clickselect-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00115/action-clickselect-desktop-report.json new file mode 100644 index 00000000..c0d91209 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00115/action-clickselect-desktop-report.json @@ -0,0 +1,61 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location", + "selected": [ + false, + true, + false + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location", + "selected": [ + false, + true, + false + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location", + "selected": [ + false, + true, + false + ] + } + ], + "name": "WebGapClickSelectObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "click": { + "column": true, + "deselectAll": true, + "frame": 3.0 + }, + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00115-operator-action.clickselect.blend", + "fixtureSha256": "862548b70dd61ae3a132854a495648a2e265df2997054cadd1160e135ec3f059", + "operation": "ACTION_CLICKSELECT_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00115" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00115/action-clickselect-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00115/action-clickselect-local-exact-report.json new file mode 100644 index 00000000..e7079017 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00115/action-clickselect-local-exact-report.json @@ -0,0 +1,34 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00115", + "operation": "ACTION_CLICKSELECT_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00115-operator-action.clickselect.blend", + "sha256": "862548b70dd61ae3a132854a495648a2e265df2997054cadd1160e135ec3f059" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00115/action-clickselect-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapClickSelectObjectAction:object:WebGapClickSelectObject", + "selectedFrames": [ + [ + 3 + ], + [ + 3 + ], + [ + 3 + ] + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00116" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00115/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00115/manifest.json new file mode 100644 index 00000000..b7e83f9e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00115/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00115", + "parentTask": "M16-GAP-00114", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_CLICKSELECT_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00114/manifest.json", "sha256": "de0839580800f06f6f0d9291a8aabc97083ee19434f94f0a943fc2f2efd11fc1"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00115-operator-action.clickselect.blend", "sha256": "862548b70dd61ae3a132854a495648a2e265df2997054cadd1160e135ec3f059"}, + "generator": {"path": "tools/web/generated/M16-GAP-00115.py", "sha256": "e91f19fa0f133900cace0b2708ee5a7fcb6efe589e036963b2b0fa6ff5bbaef9"}, + "desktopChecker": {"path": "tools/web/check-action-clickselect-desktop.py", "sha256": "29f5ab8b8489b38ec874b8bf1d779b45e19934862bec3b730b0f3aee08700f74"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "8e25ee7af735d2c5749d7dd2daba099a401abd952e2f7bfaba43f1ddd5d42244"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "89ceabc2ee3fa085a9edfaf66320c88bf91880b7af46530a894af2e7846dc300"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "857caf1d9976a1e12c55c39dcba35f985ea2841c18e8c0af58000583de4a4e37"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "857caf1d9976a1e12c55c39dcba35f985ea2841c18e8c0af58000583de4a4e37"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00115/action-clickselect-desktop-report.json", "sha256": "8f6090591fd02d88ea4714ed6a570bbe1e9315226a7496a1382a1bcfb4a8dfe6"}, + "webReport": {"path": "tests/golden/M16-GAP-00115/action-clickselect-local-exact-report.json", "sha256": "ca2832eaceaf118bc1ce6b3efef1d5c4f9c63dae410d451b42b42f62316bbe37"} + }, + "nextTask": "M16-GAP-00116" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00116/action-copy-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00116/action-copy-desktop-report.json new file mode 100644 index 00000000..8c69d510 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00116/action-copy-desktop-report.json @@ -0,0 +1,60 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location", + "selected": [ + false, + true, + false + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location", + "selected": [ + false, + true, + false + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location", + "selected": [ + false, + true, + false + ] + } + ], + "name": "WebGapCopyObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "copiedFrames": [ + 3.0 + ], + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00116-operator-action.copy.blend", + "fixtureSha256": "d291508ed19a9ba575908253a13310eab58dffa168cf07b401816f2ffd6a5448", + "mainMutation": "NONE", + "operation": "ACTION_COPY_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00116" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00116/action-copy-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00116/action-copy-local-exact-report.json new file mode 100644 index 00000000..9ef77e10 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00116/action-copy-local-exact-report.json @@ -0,0 +1,38 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00116", + "operation": "ACTION_COPY_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00116-operator-action.copy.blend", + "sha256": "d291508ed19a9ba575908253a13310eab58dffa168cf07b401816f2ffd6a5448" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00116/action-copy-desktop-report.json", + "saveReopen": "EXACT", + "mainMutation": "NONE" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapCopyObjectAction:object:WebGapCopyObject", + "copiedFrames": [ + 3 + ], + "selectedFrames": [ + [ + 3 + ], + [ + 3 + ], + [ + 3 + ] + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00117" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00116/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00116/manifest.json new file mode 100644 index 00000000..80378682 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00116/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00116", + "parentTask": "M16-GAP-00115", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_COPY_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00115/manifest.json", "sha256": "186aba8a5d9e660604321526dfd3d47b4389f358acdc620bd2966a61f833fc11"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00116-operator-action.copy.blend", "sha256": "d291508ed19a9ba575908253a13310eab58dffa168cf07b401816f2ffd6a5448"}, + "generator": {"path": "tools/web/generated/M16-GAP-00116.py", "sha256": "318545fd674bc2477d674292bc3c273684978e101c526a258f52af965dc3eb6f"}, + "desktopChecker": {"path": "tools/web/check-action-copy-desktop.py", "sha256": "d5db0d6d0962ec780faa5a2c6fc1960a7e7d7babfced9d362ca05e46e0889c7c"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "24f6d7bed006c71a4be4d63623e3f58bde0380caa079f592508f65d8d23fefcc"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "89ceabc2ee3fa085a9edfaf66320c88bf91880b7af46530a894af2e7846dc300"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "857caf1d9976a1e12c55c39dcba35f985ea2841c18e8c0af58000583de4a4e37"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "857caf1d9976a1e12c55c39dcba35f985ea2841c18e8c0af58000583de4a4e37"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00116/action-copy-desktop-report.json", "sha256": "688cff599ed4b5b6ff17bc79141a040f8f9de59e6912285ae294af68efed0772"}, + "webReport": {"path": "tests/golden/M16-GAP-00116/action-copy-local-exact-report.json", "sha256": "d1698dbf04e3d7c7983734cdc88c7b109f61e10b33b09192e4576c60e2762b5e"} + }, + "nextTask": "M16-GAP-00117" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00117/action-delete-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00117/action-delete-desktop-report.json new file mode 100644 index 00000000..68a206b3 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00117/action-delete-desktop-report.json @@ -0,0 +1,53 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 5.0 + ], + "index": 0, + "path": "location", + "selected": [ + false, + false + ] + }, + { + "frames": [ + 1.0, + 5.0 + ], + "index": 1, + "path": "location", + "selected": [ + false, + false + ] + }, + { + "frames": [ + 1.0, + 5.0 + ], + "index": 2, + "path": "location", + "selected": [ + false, + false + ] + } + ], + "name": "WebGapDeleteObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "deletedFrames": [ + 3.0 + ], + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00117-operator-action.delete.blend", + "fixtureSha256": "5112a074973e086eb2eaa00e604786dc2d7b8dffb1691de800c9dde97592de78", + "operation": "ACTION_DELETE_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00117" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00117/action-delete-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00117/action-delete-local-exact-report.json new file mode 100644 index 00000000..f2d8af42 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00117/action-delete-local-exact-report.json @@ -0,0 +1,40 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00117", + "operation": "ACTION_DELETE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00117-operator-action.delete.blend", + "sha256": "5112a074973e086eb2eaa00e604786dc2d7b8dffb1691de800c9dde97592de78" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00117/action-delete-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapDeleteObjectAction:object:WebGapDeleteObject", + "deletedFrames": [ + 3 + ], + "remainingFrames": [ + [ + 1, + 5 + ], + [ + 1, + 5 + ], + [ + 1, + 5 + ] + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00118" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00117/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00117/manifest.json new file mode 100644 index 00000000..36b75474 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00117/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00117", + "parentTask": "M16-GAP-00116", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_DELETE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00116/manifest.json", "sha256": "36ca61fedaeec33d50141058224f4907f09535027a966552d9edaf5922111870"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00117-operator-action.delete.blend", "sha256": "5112a074973e086eb2eaa00e604786dc2d7b8dffb1691de800c9dde97592de78"}, + "generator": {"path": "tools/web/generated/M16-GAP-00117.py", "sha256": "517943d741eaceb53e7f8d89a8bed07282afa157d4357e3a25690fb8f5df89b4"}, + "desktopChecker": {"path": "tools/web/check-action-delete-desktop.py", "sha256": "3655cc712601ed60095f850b4a419499007e13a7cceeebcd6c38bf42f7a1a6c0"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "f0a2a884678cbee7c3ef19fa0227328ac19268118249fc13109834ffb712b71d"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "89ceabc2ee3fa085a9edfaf66320c88bf91880b7af46530a894af2e7846dc300"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "857caf1d9976a1e12c55c39dcba35f985ea2841c18e8c0af58000583de4a4e37"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "857caf1d9976a1e12c55c39dcba35f985ea2841c18e8c0af58000583de4a4e37"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00117/action-delete-desktop-report.json", "sha256": "9c3f91e026c110496626bc0214a719c5475c71357572f6861cc0287a2948169e"}, + "webReport": {"path": "tests/golden/M16-GAP-00117/action-delete-local-exact-report.json", "sha256": "a2b9dda82da0c7a7751ac7bf36a958a624291a8ebe4cea12d54587fb3f441aa2"} + }, + "nextTask": "M16-GAP-00118" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00118/action-duplicate-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00118/action-duplicate-desktop-report.json new file mode 100644 index 00000000..c6891bab --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00118/action-duplicate-desktop-report.json @@ -0,0 +1,65 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location", + "selected": [ + false, + false, + true, + false + ] + }, + { + "frames": [ + 1.0, + 3.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location", + "selected": [ + false, + false, + true, + false + ] + }, + { + "frames": [ + 1.0, + 3.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location", + "selected": [ + false, + false, + true, + false + ] + } + ], + "name": "WebGapDuplicateObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "duplicatedFrames": [ + 3.0 + ], + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00118-operator-action.duplicate.blend", + "fixtureSha256": "090e668d61cbdf9a9618c3f592e8337b1776386ab71dda115aacd3591e5a2718", + "operation": "ACTION_DUPLICATE_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00118" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00118/action-duplicate-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00118/action-duplicate-local-exact-report.json new file mode 100644 index 00000000..e2559c27 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00118/action-duplicate-local-exact-report.json @@ -0,0 +1,46 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00118", + "operation": "ACTION_DUPLICATE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00118-operator-action.duplicate.blend", + "sha256": "090e668d61cbdf9a9618c3f592e8337b1776386ab71dda115aacd3591e5a2718" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00118/action-duplicate-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapDuplicateObjectAction:object:WebGapDuplicateObject", + "duplicatedFrames": [ + 3 + ], + "keyframesPerChannel": [ + [ + 1, + 3, + 3, + 5 + ], + [ + 1, + 3, + 3, + 5 + ], + [ + 1, + 3, + 3, + 5 + ] + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00119" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00118/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00118/manifest.json new file mode 100644 index 00000000..f4598d0f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00118/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00118", + "parentTask": "M16-GAP-00117", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_DUPLICATE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00117/manifest.json", "sha256": "d8f39b623121af30f36767bf0a89c3e4aba7ae23802563023aa7362b814d8da1"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00118-operator-action.duplicate.blend", "sha256": "090e668d61cbdf9a9618c3f592e8337b1776386ab71dda115aacd3591e5a2718"}, + "generator": {"path": "tools/web/generated/M16-GAP-00118.py", "sha256": "6829baf79faa5225c6fb8a18201a5d91a2371ac4480ba1180534c7e8a8e89624"}, + "desktopChecker": {"path": "tools/web/check-action-duplicate-desktop.py", "sha256": "281551ded3cdad0c4abc4e9b937b99e37ee51ecdfdb923137afc3ce7b0c5b29f"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "6c1303e38d822e463063f02fdaf32a6469de4573df375750c2cd13b1320ec190"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "89ceabc2ee3fa085a9edfaf66320c88bf91880b7af46530a894af2e7846dc300"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "857caf1d9976a1e12c55c39dcba35f985ea2841c18e8c0af58000583de4a4e37"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "857caf1d9976a1e12c55c39dcba35f985ea2841c18e8c0af58000583de4a4e37"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00118/action-duplicate-desktop-report.json", "sha256": "1b84545f6b5f01877c191170b8b5a0d21035e5448373506b4cca50399780e1be"}, + "webReport": {"path": "tests/golden/M16-GAP-00118/action-duplicate-local-exact-report.json", "sha256": "31b61f287906adee9b83d2c05cb302b76012cf5284f96cf45a8ea349a855c320"} + }, + "nextTask": "M16-GAP-00119" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00119/action-duplicate-move-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00119/action-duplicate-move-desktop-report.json new file mode 100644 index 00000000..e00c93be --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00119/action-duplicate-move-desktop-report.json @@ -0,0 +1,58 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location", + "selected": [ + false, + false, + true + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location", + "selected": [ + false, + false, + true + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location", + "selected": [ + false, + false, + true + ] + } + ], + "name": "WebGapDuplicateMoveObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "duplicatedFrame": 3.0, + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00119-operator-action.duplicate_move.blend", + "fixtureSha256": "1a40c2e579708731f99bd4f25d255acb3be51431c86fe19d89f741043e4dc085", + "operation": "ACTION_DUPLICATE_MOVE_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00119", + "timeOffset": 2.0 +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00119/action-duplicate-move-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00119/action-duplicate-move-local-exact-report.json new file mode 100644 index 00000000..ef4bfd62 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00119/action-duplicate-move-local-exact-report.json @@ -0,0 +1,37 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00119", + "operation": "ACTION_DUPLICATE_MOVE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00119-operator-action.duplicate_move.blend", + "sha256": "1a40c2e579708731f99bd4f25d255acb3be51431c86fe19d89f741043e4dc085" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00119/action-duplicate-move-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapDuplicateMoveObjectAction:object:WebGapDuplicateMoveObject", + "sourceFrame": 3, + "movedFrame": 5, + "timeOffset": 2, + "selectedFrames": [ + [ + 5 + ], + [ + 5 + ], + [ + 5 + ] + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00120" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00119/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00119/manifest.json new file mode 100644 index 00000000..5ead7fb3 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00119/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00119", + "parentTask": "M16-GAP-00118", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_DUPLICATE_MOVE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00118/manifest.json", "sha256": "63e6ecd36ef8c608d7c136ad5a2d62163d05802408f61264da99c3db50782b65"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00119-operator-action.duplicate_move.blend", "sha256": "1a40c2e579708731f99bd4f25d255acb3be51431c86fe19d89f741043e4dc085"}, + "generator": {"path": "tools/web/generated/M16-GAP-00119.py", "sha256": "2db8ee3d18c634ae2f28d1dd2a3ced2bf9490be578795b59a1ca9e96eb1992af"}, + "desktopChecker": {"path": "tools/web/check-action-duplicate-move-desktop.py", "sha256": "7738a3a07f4971ed3f564d3cd6d09243853a602ac1253056ac5bdaa9522c91a5"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "5593cb70b853d6f259644efd7f513d97ba4119a9e00004c0a8b5da764be3942c"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "89ceabc2ee3fa085a9edfaf66320c88bf91880b7af46530a894af2e7846dc300"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "857caf1d9976a1e12c55c39dcba35f985ea2841c18e8c0af58000583de4a4e37"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "857caf1d9976a1e12c55c39dcba35f985ea2841c18e8c0af58000583de4a4e37"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00119/action-duplicate-move-desktop-report.json", "sha256": "f1ba7739899913c3478ce9f2e1bfb92b7a73ccebe3176e98d2e9c57072ab7d97"}, + "webReport": {"path": "tests/golden/M16-GAP-00119/action-duplicate-move-local-exact-report.json", "sha256": "47d8a5de2a50807b33695b011ba1774883c3c8823a6326a3bfc537fab4a2ef52"} + }, + "nextTask": "M16-GAP-00120" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00120/action-easing-type-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00120/action-easing-type-desktop-report.json new file mode 100644 index 00000000..cdcb832a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00120/action-easing-type-desktop-report.json @@ -0,0 +1,72 @@ +{ + "action": { + "channels": [ + { + "easing": [ + "AUTO", + "EASE_IN_OUT", + "AUTO" + ], + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location", + "selected": [ + false, + true, + false + ] + }, + { + "easing": [ + "AUTO", + "EASE_IN_OUT", + "AUTO" + ], + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location", + "selected": [ + false, + true, + false + ] + }, + { + "easing": [ + "AUTO", + "EASE_IN_OUT", + "AUTO" + ], + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location", + "selected": [ + false, + true, + false + ] + } + ], + "name": "WebGapEasingTypeObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "easingType": "EASE_IN_OUT", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00120-operator-action.easing_type.blend", + "fixtureSha256": "828206cdfd525388464e7ec281a9968c96a7add8cca8db275641031e14627caa", + "operation": "ACTION_EASING_TYPE_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00120" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00120/action-easing-type-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00120/action-easing-type-local-exact-report.json new file mode 100644 index 00000000..a3eb8ca6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00120/action-easing-type-local-exact-report.json @@ -0,0 +1,41 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00120", + "operation": "ACTION_EASING_TYPE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00120-operator-action.easing_type.blend", + "sha256": "828206cdfd525388464e7ec281a9968c96a7add8cca8db275641031e14627caa" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00120/action-easing-type-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapEasingTypeObjectAction:object:WebGapEasingTypeObject", + "easingType": "EASE_IN_OUT", + "easingPerChannel": [ + [ + "AUTO", + "EASE_IN_OUT", + "AUTO" + ], + [ + "AUTO", + "EASE_IN_OUT", + "AUTO" + ], + [ + "AUTO", + "EASE_IN_OUT", + "AUTO" + ] + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00121" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00120/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00120/manifest.json new file mode 100644 index 00000000..b4d80dcd --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00120/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00120", + "parentTask": "M16-GAP-00119", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_EASING_TYPE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00119/manifest.json", "sha256": "960935bcb27b8a77d43b5ebc78f9ab851df84089a90d3dcf1958990cb1243086"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00120-operator-action.easing_type.blend", "sha256": "828206cdfd525388464e7ec281a9968c96a7add8cca8db275641031e14627caa"}, + "generator": {"path": "tools/web/generated/M16-GAP-00120.py", "sha256": "0db649027d8772539a011bf5b5eb021efbd95728f9af706b4b42a361e88f8c3d"}, + "desktopChecker": {"path": "tools/web/check-action-easing-type-desktop.py", "sha256": "37233be661cbcf08ece72e5293de7016c4408d3708256902380ba608c7985abf"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "d0a1e69983f066034a01e73275976cf4c42b0d38228148d1335244f3bc5b9e08"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "05fcd64096b857b1f80fc829676f5822dd08ac8bd04828059ad9f92c353ba483"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "31d7f2b4373dd21011446696f71333829f9603c0e3baddab50988023e098b59f"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "31d7f2b4373dd21011446696f71333829f9603c0e3baddab50988023e098b59f"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00120/action-easing-type-desktop-report.json", "sha256": "e34d9007483d2913166486f7fe736adae145ca27b1b90240ce36e62c4b8f1bbc"}, + "webReport": {"path": "tests/golden/M16-GAP-00120/action-easing-type-local-exact-report.json", "sha256": "9ce9af87fc9f42682de1fa7b02f3f320a64965dad5e3a34f808dbb072481896c"} + }, + "nextTask": "M16-GAP-00121" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00121/action-extrapolation-type-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00121/action-extrapolation-type-desktop-report.json new file mode 100644 index 00000000..217b2394 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00121/action-extrapolation-type-desktop-report.json @@ -0,0 +1,45 @@ +{ + "action": { + "channels": [ + { + "extrapolation": "LINEAR", + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location" + }, + { + "extrapolation": "LINEAR", + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location" + }, + { + "extrapolation": "LINEAR", + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location" + } + ], + "name": "WebGapExtrapolationTypeObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "extrapolationType": "LINEAR", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00121-operator-action.extrapolation_type.blend", + "fixtureSha256": "39c4559926b71ed7b364b6f618c6b19c215d23031b994460d0180537879ff10f", + "operation": "ACTION_EXTRAPOLATION_TYPE_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00121" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00121/action-extrapolation-type-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00121/action-extrapolation-type-local-exact-report.json new file mode 100644 index 00000000..e2fe05d3 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00121/action-extrapolation-type-local-exact-report.json @@ -0,0 +1,29 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00121", + "operation": "ACTION_EXTRAPOLATION_TYPE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00121-operator-action.extrapolation_type.blend", + "sha256": "39c4559926b71ed7b364b6f618c6b19c215d23031b994460d0180537879ff10f" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00121/action-extrapolation-type-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapExtrapolationTypeObjectAction:object:WebGapExtrapolationTypeObject", + "extrapolationType": "LINEAR", + "extrapolationPerChannel": [ + "LINEAR", + "LINEAR", + "LINEAR" + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00122" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00121/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00121/manifest.json new file mode 100644 index 00000000..bda37cfa --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00121/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00121", + "parentTask": "M16-GAP-00120", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_EXTRAPOLATION_TYPE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00120/manifest.json", "sha256": "a517d68211696c3dc4110b07497eba5d07223d90e6f6a42ecf0aa9b01f8ea68f"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00121-operator-action.extrapolation_type.blend", "sha256": "39c4559926b71ed7b364b6f618c6b19c215d23031b994460d0180537879ff10f"}, + "generator": {"path": "tools/web/generated/M16-GAP-00121.py", "sha256": "09a7f42b438f7fb6b14eab1fd8fc436ee938ec62af8f11d62b24a46215d7a05a"}, + "desktopChecker": {"path": "tools/web/check-action-extrapolation-type-desktop.py", "sha256": "8abb11eb1c484b008cc6157d0a5d9c786ebad25b196d117ea5fb015770f70abc"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "32ba19733b1f83f0d7190ebd0b4611cb93c3950358cb4c1cd0101ad124c735b4"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "4cc9629a903d638d7cc2d807e4f0ca4d8d5a9b0093747ea031d3c5ce9a6608c2"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "3cd4771fe3250f3c6433b2110cac0da8d872c879c09acbbb6fb698962d45fcac"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "3cd4771fe3250f3c6433b2110cac0da8d872c879c09acbbb6fb698962d45fcac"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00121/action-extrapolation-type-desktop-report.json", "sha256": "d9c594e10b0196fb9a906cbd6ed31f26196c8ee1ede6a23c50d3a6ac9de0012d"}, + "webReport": {"path": "tests/golden/M16-GAP-00121/action-extrapolation-type-local-exact-report.json", "sha256": "c898764e6629bfa752e6375c1944c579a02c62cb25059792fd9e582042a8a3ab"} + }, + "nextTask": "M16-GAP-00122" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00122/action-frame-jump-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00122/action-frame-jump-desktop-report.json new file mode 100644 index 00000000..7939a321 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00122/action-frame-jump-desktop-report.json @@ -0,0 +1,57 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location", + "selected": [ + false, + false, + true + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location", + "selected": [ + false, + false, + true + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location", + "selected": [ + false, + false, + true + ] + } + ], + "name": "WebGapFrameJumpObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00122-operator-action.frame_jump.blend", + "fixtureSha256": "332f117de8b826abb0d044715daa2d01a203b03080c61aaed7671ef67fa2da44", + "jumpedToFrame": 5, + "operation": "ACTION_FRAME_JUMP_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00122" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00122/action-frame-jump-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00122/action-frame-jump-local-exact-report.json new file mode 100644 index 00000000..3bc771fe --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00122/action-frame-jump-local-exact-report.json @@ -0,0 +1,35 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00122", + "operation": "ACTION_FRAME_JUMP_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00122-operator-action.frame_jump.blend", + "sha256": "332f117de8b826abb0d044715daa2d01a203b03080c61aaed7671ef67fa2da44" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00122/action-frame-jump-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapFrameJumpObjectAction:object:WebGapFrameJumpObject", + "jumpedToFrame": 5, + "selectedFrames": [ + [ + 5 + ], + [ + 5 + ], + [ + 5 + ] + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00123" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00122/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00122/manifest.json new file mode 100644 index 00000000..624d39d6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00122/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00122", + "parentTask": "M16-GAP-00121", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_FRAME_JUMP_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00121/manifest.json", "sha256": "64ea4f3609b22c19864da33ba0a12a90ab715ead3777ce1b0f442e952ad4439a"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00122-operator-action.frame_jump.blend", "sha256": "332f117de8b826abb0d044715daa2d01a203b03080c61aaed7671ef67fa2da44"}, + "generator": {"path": "tools/web/generated/M16-GAP-00122.py", "sha256": "a80fec742fa6c4f9f0846bcc9ed7817e68ae9b78a3789b5e9ffd873a4f71ba22"}, + "desktopChecker": {"path": "tools/web/check-action-frame-jump-desktop.py", "sha256": "169ea06f3ed471014162d67bcb8b79945e85b7f91d1291f15b62ccecaf3a8126"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "6b14c6b20b5f59aad5629017beff50b1002fa965e9bf63158c9c93e85622b4dc"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "4cc9629a903d638d7cc2d807e4f0ca4d8d5a9b0093747ea031d3c5ce9a6608c2"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "3cd4771fe3250f3c6433b2110cac0da8d872c879c09acbbb6fb698962d45fcac"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "3cd4771fe3250f3c6433b2110cac0da8d872c879c09acbbb6fb698962d45fcac"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00122/action-frame-jump-desktop-report.json", "sha256": "2a03fd1c8b4faea5fbf908e43df73758044dec705684842c0061023e999edf79"}, + "webReport": {"path": "tests/golden/M16-GAP-00122/action-frame-jump-local-exact-report.json", "sha256": "ac695d4436de8399842d39b412bb734c1e98d021f18a71c414627405aaa27fee"} + }, + "nextTask": "M16-GAP-00123" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00123/action-handle-type-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00123/action-handle-type-desktop-report.json new file mode 100644 index 00000000..5f8ea3b8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00123/action-handle-type-desktop-report.json @@ -0,0 +1,72 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "handleType": [ + "VECTOR", + "VECTOR", + "VECTOR" + ], + "index": 0, + "path": "location", + "selected": [ + false, + true, + false + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "handleType": [ + "VECTOR", + "VECTOR", + "VECTOR" + ], + "index": 1, + "path": "location", + "selected": [ + false, + true, + false + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "handleType": [ + "VECTOR", + "VECTOR", + "VECTOR" + ], + "index": 2, + "path": "location", + "selected": [ + false, + true, + false + ] + } + ], + "name": "WebGapHandleTypeObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00123-operator-action.handle_type.blend", + "fixtureSha256": "69281e445ba7741ce639dc98bf115e265e52bdb4900d82de9b25c70e6cd9d42e", + "handleType": "VECTOR", + "operation": "ACTION_HANDLE_TYPE_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00123" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00123/action-handle-type-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00123/action-handle-type-local-exact-report.json new file mode 100644 index 00000000..cb98262f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00123/action-handle-type-local-exact-report.json @@ -0,0 +1,41 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00123", + "operation": "ACTION_HANDLE_TYPE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00123-operator-action.handle_type.blend", + "sha256": "69281e445ba7741ce639dc98bf115e265e52bdb4900d82de9b25c70e6cd9d42e" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00123/action-handle-type-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapHandleTypeObjectAction:object:WebGapHandleTypeObject", + "handleType": "VECTOR", + "handleTypes": [ + [ + "VECTOR", + "VECTOR", + "VECTOR" + ], + [ + "VECTOR", + "VECTOR", + "VECTOR" + ], + [ + "VECTOR", + "VECTOR", + "VECTOR" + ] + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00124" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00123/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00123/manifest.json new file mode 100644 index 00000000..57d3044d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00123/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00123", + "parentTask": "M16-GAP-00122", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_HANDLE_TYPE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00122/manifest.json", "sha256": "4ec934ccdafd4c9c01299b92f57fe2cc815739c3818f130e2ad88f06f4bbc8ea"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00123-operator-action.handle_type.blend", "sha256": "69281e445ba7741ce639dc98bf115e265e52bdb4900d82de9b25c70e6cd9d42e"}, + "generator": {"path": "tools/web/generated/M16-GAP-00123.py", "sha256": "8b144f6bc50ec8234906f07e81bf661353fe123e0ff85dcb1874185914f4d844"}, + "desktopChecker": {"path": "tools/web/check-action-handle-type-desktop.py", "sha256": "81711dabd6dd4cf0a40b79f3d54a4243de6bd362f0295702c2d9f5d0336b35c2"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "e96d33467a1127729d0156bdc1199e04c957243e5e6e532aa622fac611198cfe"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "c3b7f4ce10bd7e4cf5a9baacaf4329a6d3a3313dd99aa8866f3f6489c5cbb567"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "0185b2265f56f14aa0bb3f30181fcc6ca47889f70d5072e4be09753b5c8e0510"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "0185b2265f56f14aa0bb3f30181fcc6ca47889f70d5072e4be09753b5c8e0510"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00123/action-handle-type-desktop-report.json", "sha256": "4e37880d7ed3a2f506c2b93b93883c282011d0578d656dfe4c461a4e111201c9"}, + "webReport": {"path": "tests/golden/M16-GAP-00123/action-handle-type-local-exact-report.json", "sha256": "18fa52777177e3312534e981d7e2b1b6fd51b8ed72472c11f0959925907a6287"} + }, + "nextTask": "M16-GAP-00124" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00124/action-interpolation-type-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00124/action-interpolation-type-desktop-report.json new file mode 100644 index 00000000..2081d05a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00124/action-interpolation-type-desktop-report.json @@ -0,0 +1,72 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "interpolation": [ + "BEZIER", + "LINEAR", + "BEZIER" + ], + "path": "location", + "selected": [ + false, + true, + false + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "interpolation": [ + "BEZIER", + "LINEAR", + "BEZIER" + ], + "path": "location", + "selected": [ + false, + true, + false + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "interpolation": [ + "BEZIER", + "LINEAR", + "BEZIER" + ], + "path": "location", + "selected": [ + false, + true, + false + ] + } + ], + "name": "WebGapInterpolationTypeObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00124-operator-action.interpolation_type.blend", + "fixtureSha256": "b05e3fe799dd077db20569b98a6849800e4d8e5b1b95b2018ccef70f3d2e77ca", + "interpolationType": "LINEAR", + "operation": "ACTION_INTERPOLATION_TYPE_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00124" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00124/action-interpolation-type-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00124/action-interpolation-type-local-exact-report.json new file mode 100644 index 00000000..daaf107f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00124/action-interpolation-type-local-exact-report.json @@ -0,0 +1,41 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00124", + "operation": "ACTION_INTERPOLATION_TYPE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00124-operator-action.interpolation_type.blend", + "sha256": "b05e3fe799dd077db20569b98a6849800e4d8e5b1b95b2018ccef70f3d2e77ca" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00124/action-interpolation-type-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapInterpolationTypeObjectAction:object:WebGapInterpolationTypeObject", + "interpolationType": "LINEAR", + "interpolationPerChannel": [ + [ + "BEZIER", + "LINEAR", + "BEZIER" + ], + [ + "BEZIER", + "LINEAR", + "BEZIER" + ], + [ + "BEZIER", + "LINEAR", + "BEZIER" + ] + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00125" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00124/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00124/manifest.json new file mode 100644 index 00000000..61035874 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00124/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00124", + "parentTask": "M16-GAP-00123", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_INTERPOLATION_TYPE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00123/manifest.json", "sha256": "e457adeee2d07b5b0649a9fa8cdeec50349c778b1d87f4263117f00fbff13877"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00124-operator-action.interpolation_type.blend", "sha256": "b05e3fe799dd077db20569b98a6849800e4d8e5b1b95b2018ccef70f3d2e77ca"}, + "generator": {"path": "tools/web/generated/M16-GAP-00124.py", "sha256": "c80a0232ad6d5628eac7ed5b59c83f6e9741cfa0f793491db339171ee79a4ec8"}, + "desktopChecker": {"path": "tools/web/check-action-interpolation-type-desktop.py", "sha256": "5d61995b4ef75f1e47e277df59d5327609be283fc744014791857ef61f9b0ce5"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "ed943b787f2d83a729089c2dcfd058756cfcac18dabc2e17c897d9757a6596fb"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "c3b7f4ce10bd7e4cf5a9baacaf4329a6d3a3313dd99aa8866f3f6489c5cbb567"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "0185b2265f56f14aa0bb3f30181fcc6ca47889f70d5072e4be09753b5c8e0510"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "0185b2265f56f14aa0bb3f30181fcc6ca47889f70d5072e4be09753b5c8e0510"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00124/action-interpolation-type-desktop-report.json", "sha256": "94ec52af816fb75cfed2339ebb4b821b4aa13d822c6fe2697f9923309331804f"}, + "webReport": {"path": "tests/golden/M16-GAP-00124/action-interpolation-type-local-exact-report.json", "sha256": "a93a5394419001a0555103f76c91653b1127a21a454a076d71a78050a00130d2"} + }, + "nextTask": "M16-GAP-00125" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00125/action-keyframe-insert-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00125/action-keyframe-insert-desktop-report.json new file mode 100644 index 00000000..45ba1518 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00125/action-keyframe-insert-desktop-report.json @@ -0,0 +1,72 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location", + "selected": [ + false, + true, + false + ], + "values": [ + 0.0, + 2.0, + 4.0 + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location", + "selected": [ + false, + true, + false + ], + "values": [ + 0.0, + 3.0, + 6.0 + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location", + "selected": [ + false, + true, + false + ], + "values": [ + 0.0, + 4.0, + 8.0 + ] + } + ], + "name": "WebGapKeyframeInsertObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00125-operator-action.keyframe_insert.blend", + "fixtureSha256": "0ff15cd87241927e76bbcfdfdc6048238467b3e09d2e9d304d14b3858f2d95a7", + "insertedFrame": 3, + "operation": "ACTION_KEYFRAME_INSERT_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00125" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00125/action-keyframe-insert-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00125/action-keyframe-insert-local-exact-report.json new file mode 100644 index 00000000..8241a242 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00125/action-keyframe-insert-local-exact-report.json @@ -0,0 +1,41 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00125", + "operation": "ACTION_KEYFRAME_INSERT_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00125-operator-action.keyframe_insert.blend", + "sha256": "0ff15cd87241927e76bbcfdfdc6048238467b3e09d2e9d304d14b3858f2d95a7" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00125/action-keyframe-insert-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapKeyframeInsertObjectAction:object:WebGapKeyframeInsertObject", + "insertedFrame": 3, + "framesPerChannel": [ + [ + 1, + 3, + 5 + ], + [ + 1, + 3, + 5 + ], + [ + 1, + 3, + 5 + ] + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00126" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00125/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00125/manifest.json new file mode 100644 index 00000000..c2babaaa --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00125/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00125", + "parentTask": "M16-GAP-00124", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_KEYFRAME_INSERT_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00124/manifest.json", "sha256": "b7079ef52e8f3f5082919893ebcd0cfd928da5e5534c8cf76b6ac57c430a2ae6"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00125-operator-action.keyframe_insert.blend", "sha256": "0ff15cd87241927e76bbcfdfdc6048238467b3e09d2e9d304d14b3858f2d95a7"}, + "generator": {"path": "tools/web/generated/M16-GAP-00125.py", "sha256": "10ca9311b9454c1926c870a171b0bed6e3c6057086be253bad11e2c86f0637cc"}, + "desktopChecker": {"path": "tools/web/check-action-keyframe-insert-desktop.py", "sha256": "2e812004ce8f6d05e6a7778430da3b1ade834084a572b0aa41e1a4b7278d8403"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "b9266191601ca9f80bb2f43e38b72d0d7581b600ee7402379e4d4faff4523703"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "c3b7f4ce10bd7e4cf5a9baacaf4329a6d3a3313dd99aa8866f3f6489c5cbb567"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "0185b2265f56f14aa0bb3f30181fcc6ca47889f70d5072e4be09753b5c8e0510"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "0185b2265f56f14aa0bb3f30181fcc6ca47889f70d5072e4be09753b5c8e0510"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00125/action-keyframe-insert-desktop-report.json", "sha256": "6a4445c9725cdd1ce4bf97e510ef7f1772f47652fd3a0486c1fb8a4d7dbaa9fb"}, + "webReport": {"path": "tests/golden/M16-GAP-00125/action-keyframe-insert-local-exact-report.json", "sha256": "4e0d65afeac1d262fcad6e8c3756ed63529c6586261379f9d15fa1c971e67cc6"} + }, + "nextTask": "M16-GAP-00126" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00126/action-keyframe-type-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00126/action-keyframe-type-desktop-report.json new file mode 100644 index 00000000..08a695a5 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00126/action-keyframe-type-desktop-report.json @@ -0,0 +1,72 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "keyframeType": [ + "KEYFRAME", + "BREAKDOWN", + "KEYFRAME" + ], + "path": "location", + "selected": [ + false, + true, + false + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "keyframeType": [ + "KEYFRAME", + "BREAKDOWN", + "KEYFRAME" + ], + "path": "location", + "selected": [ + false, + true, + false + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "keyframeType": [ + "KEYFRAME", + "BREAKDOWN", + "KEYFRAME" + ], + "path": "location", + "selected": [ + false, + true, + false + ] + } + ], + "name": "WebGapKeyframeTypeObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00126-operator-action.keyframe_type.blend", + "fixtureSha256": "a99bcef879a29da4f423a3efc67ab5f497beef3927ad2e65fcb9ae556826a81a", + "keyframeType": "BREAKDOWN", + "operation": "ACTION_KEYFRAME_TYPE_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00126" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00126/action-keyframe-type-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00126/action-keyframe-type-local-exact-report.json new file mode 100644 index 00000000..9c567c15 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00126/action-keyframe-type-local-exact-report.json @@ -0,0 +1,41 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00126", + "operation": "ACTION_KEYFRAME_TYPE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00126-operator-action.keyframe_type.blend", + "sha256": "a99bcef879a29da4f423a3efc67ab5f497beef3927ad2e65fcb9ae556826a81a" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00126/action-keyframe-type-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapKeyframeTypeObjectAction:object:WebGapKeyframeTypeObject", + "keyframeType": "BREAKDOWN", + "keyframeTypes": [ + [ + "KEYFRAME", + "BREAKDOWN", + "KEYFRAME" + ], + [ + "KEYFRAME", + "BREAKDOWN", + "KEYFRAME" + ], + [ + "KEYFRAME", + "BREAKDOWN", + "KEYFRAME" + ] + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00127" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00126/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00126/manifest.json new file mode 100644 index 00000000..557d266c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00126/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00126", + "parentTask": "M16-GAP-00125", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_KEYFRAME_TYPE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00125/manifest.json", "sha256": "3deae0817d30f7fd5e2364588854a5f2d6f53c0bd65af0aff129bd3b5963e292"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00126-operator-action.keyframe_type.blend", "sha256": "a99bcef879a29da4f423a3efc67ab5f497beef3927ad2e65fcb9ae556826a81a"}, + "generator": {"path": "tools/web/generated/M16-GAP-00126.py", "sha256": "973f3fd3109a9f36948e11db0d46fad117fe7353a867a2a673fa77faaa6f2e60"}, + "desktopChecker": {"path": "tools/web/check-action-keyframe-type-desktop.py", "sha256": "32b826a427ee36e8a34f45280ff107118295fffb184cbdf4fbedc3b229a36a51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "c9cda7104b4fe21fff13794c63e577bba4883fa031c97fba1aa53c417953d465"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "4c09d1e6540d26efcddbcc84b36a69efc82e3aab7d322bb6dd4c09e9f385f5ec"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "19232c4fe23c28454f5c66b3a19fd81763c35d6dcaf27c34d7ac1d7d8fcff0fa"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "19232c4fe23c28454f5c66b3a19fd81763c35d6dcaf27c34d7ac1d7d8fcff0fa"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00126/action-keyframe-type-desktop-report.json", "sha256": "dafa72f7acc2a84f993615e8ed963013a948980776cb96e19ef5bc0ebce578b6"}, + "webReport": {"path": "tests/golden/M16-GAP-00126/action-keyframe-type-local-exact-report.json", "sha256": "42cc333a864b20769f80bba46cef162ce2c864509bcfc35191caac5405f2d5db"} + }, + "nextTask": "M16-GAP-00127" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00127/action-markers-make-local-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00127/action-markers-make-local-desktop-report.json new file mode 100644 index 00000000..b184e561 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00127/action-markers-make-local-desktop-report.json @@ -0,0 +1,22 @@ +{ + "action": { + "markers": [ + { + "frame": 3, + "name": "LocalActionMarker" + } + ], + "name": "WebGapMarkersMakeLocalObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00127-operator-action.markers_make_local.blend", + "fixtureSha256": "767f97663e2fd45d8491b1bf8cea0a9a628faa9f4b14993d65953e90f27d7a12", + "marker": { + "frame": 3, + "name": "LocalActionMarker" + }, + "operation": "ACTION_MARKERS_MAKE_LOCAL_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00127" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00127/action-markers-make-local-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00127/action-markers-make-local-local-exact-report.json new file mode 100644 index 00000000..ed26bc27 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00127/action-markers-make-local-local-exact-report.json @@ -0,0 +1,29 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00127", + "operation": "ACTION_MARKERS_MAKE_LOCAL_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00127-operator-action.markers_make_local.blend", + "sha256": "767f97663e2fd45d8491b1bf8cea0a9a628faa9f4b14993d65953e90f27d7a12" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00127/action-markers-make-local-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapMarkersMakeLocalObjectAction:object:WebGapMarkersMakeLocalObject", + "markers": [ + { + "frame": 3, + "name": "LocalActionMarker" + } + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00128" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00127/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00127/manifest.json new file mode 100644 index 00000000..8694a96b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00127/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00127", + "parentTask": "M16-GAP-00126", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_MARKERS_MAKE_LOCAL_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00126/manifest.json", "sha256": "4ebb164da2cdf017804eb62bbee8efbb492d8ebd2d8169ed27a2b0e00bdd2884"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00127-operator-action.markers_make_local.blend", "sha256": "767f97663e2fd45d8491b1bf8cea0a9a628faa9f4b14993d65953e90f27d7a12"}, + "generator": {"path": "tools/web/generated/M16-GAP-00127.py", "sha256": "56daad95fab95e4d7896e5b2b4e30f84a8f33df7e920f41458d95e55a93991c1"}, + "desktopChecker": {"path": "tools/web/check-action-markers-make-local-desktop.py", "sha256": "959fc711e2eb5c35d2635a65fd6119ec1aad4c44573b1bf0b65ecb3b05945902"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "4332b12c7893d0eea4813cd5c66891d9985ef0a07f61c9bb588b2e20533546fc"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "169faf2dfe0e8582927bba397c942938908a2a2c7d084382b300aae4c22eb1cf"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "4e9760ffbd55c37215b38d288698d04fa5334c05168853c41b25f75a9bf0f891"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "4e9760ffbd55c37215b38d288698d04fa5334c05168853c41b25f75a9bf0f891"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00127/action-markers-make-local-desktop-report.json", "sha256": "ced98aa43f04b58ac2aa66fed217fe895cdadc108739b4c335942114e8a69ce0"}, + "webReport": {"path": "tests/golden/M16-GAP-00127/action-markers-make-local-local-exact-report.json", "sha256": "9b3737730a2f5fe7daa8a9a8109254daf4eeeacff25f632820288fb01ee45f6f"} + }, + "nextTask": "M16-GAP-00128" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00128/action-mirror-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00128/action-mirror-desktop-report.json new file mode 100644 index 00000000..62dc616a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00128/action-mirror-desktop-report.json @@ -0,0 +1,72 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location", + "selected": [ + true, + true, + true + ], + "values": [ + -1.0, + -2.0, + -4.0 + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location", + "selected": [ + true, + true, + true + ], + "values": [ + -2.0, + -4.0, + -8.0 + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location", + "selected": [ + true, + true, + true + ], + "values": [ + -3.0, + -6.0, + -12.0 + ] + } + ], + "name": "WebGapMirrorObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00128-operator-action.mirror.blend", + "fixtureSha256": "92ab7f13ff0f250d0c173bc3db5d21fedab4bfa7ff4b70c66b4f12af5039a8e5", + "mirrorType": "XAXIS", + "operation": "ACTION_MIRROR_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00128" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00128/action-mirror-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00128/action-mirror-local-exact-report.json new file mode 100644 index 00000000..0b7550fe --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00128/action-mirror-local-exact-report.json @@ -0,0 +1,41 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00128", + "operation": "ACTION_MIRROR_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00128-operator-action.mirror.blend", + "sha256": "92ab7f13ff0f250d0c173bc3db5d21fedab4bfa7ff4b70c66b4f12af5039a8e5" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00128/action-mirror-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapMirrorObjectAction:object:WebGapMirrorObject", + "mirrorType": "XAXIS", + "valuesPerChannel": [ + [ + -1, + -2, + -4 + ], + [ + -2, + -4, + -8 + ], + [ + -3, + -6, + -12 + ] + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00129" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00128/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00128/manifest.json new file mode 100644 index 00000000..b82718f8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00128/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00128", + "parentTask": "M16-GAP-00127", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_MIRROR_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00127/manifest.json", "sha256": "6b2acd64a827e36204caaf161388732f1cd14d5550df37433888333840984492"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00128-operator-action.mirror.blend", "sha256": "92ab7f13ff0f250d0c173bc3db5d21fedab4bfa7ff4b70c66b4f12af5039a8e5"}, + "generator": {"path": "tools/web/generated/M16-GAP-00128.py", "sha256": "e6697304148d72a7305900d6893861f284fe3b42ec88c3b35b8bb2f78b728180"}, + "desktopChecker": {"path": "tools/web/check-action-mirror-desktop.py", "sha256": "88f211cd8726e7214a68c90a2b0ccbbe0bdcfb237a7d1e2fb210a9b7bac8cf3f"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "a1fea794c9fb2818197253f95b86f37a7bd909dedab1cdb9a5a01c83f7d4a754"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "169faf2dfe0e8582927bba397c942938908a2a2c7d084382b300aae4c22eb1cf"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "4e9760ffbd55c37215b38d288698d04fa5334c05168853c41b25f75a9bf0f891"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "4e9760ffbd55c37215b38d288698d04fa5334c05168853c41b25f75a9bf0f891"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00128/action-mirror-desktop-report.json", "sha256": "ce9a779ce2d03bc2a2bda252c40aabb56c649be858fe82486ed04bfa96a04793"}, + "webReport": {"path": "tests/golden/M16-GAP-00128/action-mirror-local-exact-report.json", "sha256": "7a91dc7d6c72d100a7da42646adeb100efacf81dd25c2b12672281d86702b37b"} + }, + "nextTask": "M16-GAP-00129" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00129/action-new-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00129/action-new-desktop-report.json new file mode 100644 index 00000000..81f5a3e3 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00129/action-new-desktop-report.json @@ -0,0 +1,13 @@ +{ + "action": { + "channels": 3, + "name": "WebGapActionNewObjectAction.001" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00129-operator-action.new.blend", + "fixtureSha256": "9d189452cbc1e0cf6c87093f7fb6ffc8728def0ac3bc976a4a3be814d42f10e5", + "operation": "ACTION_NEW_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00129" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00129/action-new-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00129/action-new-local-exact-report.json new file mode 100644 index 00000000..d30d14a6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00129/action-new-local-exact-report.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00129", + "operation": "ACTION_NEW_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00129-operator-action.new.blend", + "sha256": "9d189452cbc1e0cf6c87093f7fb6ffc8728def0ac3bc976a4a3be814d42f10e5" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00129/action-new-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapActionNewObjectAction.001:object:WebGapActionNewObject", + "actionName": "WebGapActionNewObjectAction.001", + "channels": 3 + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00130" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00129/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00129/manifest.json new file mode 100644 index 00000000..a55bd173 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00129/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00129", + "parentTask": "M16-GAP-00128", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_NEW_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00128/manifest.json", "sha256": "5b2ff20601b47af62618619766f23864516b1ce724df95b29090341d6b0ba7c1"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00129-operator-action.new.blend", "sha256": "9d189452cbc1e0cf6c87093f7fb6ffc8728def0ac3bc976a4a3be814d42f10e5"}, + "generator": {"path": "tools/web/generated/M16-GAP-00129.py", "sha256": "b7c42577aec64a99b2533c236124c6afea9741a82666065dd1ff0d7570c9aff1"}, + "desktopChecker": {"path": "tools/web/check-action-new-desktop.py", "sha256": "e0c6c14b6a8bc95ab86d49df53aae91b05f611572c2f3394f89f3495f477f77f"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "5afa0bdc9d55f7df6d8cf4fdf16b2171d37277f5a5fd3cae705e2c38216f5a21"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "f8fb6033ef54f8e0488845c0e5e5d9c32612703b8c9f2ea762bbc421155ffae9"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "29f1925854e3835bd3f619ec0c07589261ac3aa28587e2c1304ac6b2f83ced72"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "29f1925854e3835bd3f619ec0c07589261ac3aa28587e2c1304ac6b2f83ced72"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00129/action-new-desktop-report.json", "sha256": "834607cbbbd91aa8ad74ce2f8818cca54dd5adbf4e871b8733853c924eac8c75"}, + "webReport": {"path": "tests/golden/M16-GAP-00129/action-new-local-exact-report.json", "sha256": "abe030dd587dd2e21d04a3755a9294eb26c545f5d645c0910c2eeed4b5670430"} + }, + "nextTask": "M16-GAP-00130" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00130/action-paste-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00130/action-paste-desktop-report.json new file mode 100644 index 00000000..b730cdab --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00130/action-paste-desktop-report.json @@ -0,0 +1,63 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0, + 7.0 + ], + "index": 0, + "path": "location", + "values": [ + 0.0, + 2.0, + 4.0, + 2.0 + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0, + 7.0 + ], + "index": 1, + "path": "location", + "values": [ + 0.0, + 3.0, + 6.0, + 3.0 + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0, + 7.0 + ], + "index": 2, + "path": "location", + "values": [ + 0.0, + 4.0, + 8.0, + 4.0 + ] + } + ], + "name": "WebGapPasteObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00130-operator-action.paste.blend", + "fixtureSha256": "fc332fb6c877fb7a39fb418416168cce6637befba392dafb8b18ca17fb2b66c1", + "operation": "ACTION_PASTE_DESKTOP", + "pastedFrame": 7, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00130" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00130/action-paste-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00130/action-paste-local-exact-report.json new file mode 100644 index 00000000..0110ae70 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00130/action-paste-local-exact-report.json @@ -0,0 +1,44 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00130", + "operation": "ACTION_PASTE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00130-operator-action.paste.blend", + "sha256": "fc332fb6c877fb7a39fb418416168cce6637befba392dafb8b18ca17fb2b66c1" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00130/action-paste-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapPasteObjectAction:object:WebGapPasteObject", + "pastedFrame": 7, + "framesPerChannel": [ + [ + 1, + 3, + 5, + 7 + ], + [ + 1, + 3, + 5, + 7 + ], + [ + 1, + 3, + 5, + 7 + ] + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00131" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00130/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00130/manifest.json new file mode 100644 index 00000000..da4325e3 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00130/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00130", + "parentTask": "M16-GAP-00129", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_PASTE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00129/manifest.json", "sha256": "32e4da7c8e253a7203520de04f118dceb44ae9a32dbc874672818cc17570af45"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00130-operator-action.paste.blend", "sha256": "fc332fb6c877fb7a39fb418416168cce6637befba392dafb8b18ca17fb2b66c1"}, + "generator": {"path": "tools/web/generated/M16-GAP-00130.py", "sha256": "889c12feb0e8064612f899c7ad431f647d735cc00f6da56d79e8669225378b9a"}, + "desktopChecker": {"path": "tools/web/check-action-paste-desktop.py", "sha256": "a687641f71ad1b2db47da6717a7341a14e3b3d4cb45cc3a94f447684073201d2"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "85e853edf952aa2c93af0807bfdc1cf04a1b31a8f13475ecb56f80f8cf49f55a"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "f8fb6033ef54f8e0488845c0e5e5d9c32612703b8c9f2ea762bbc421155ffae9"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "29f1925854e3835bd3f619ec0c07589261ac3aa28587e2c1304ac6b2f83ced72"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "29f1925854e3835bd3f619ec0c07589261ac3aa28587e2c1304ac6b2f83ced72"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00130/action-paste-desktop-report.json", "sha256": "1494252e4ec2870131a2d810a5bc884374edf35272926a0943ac230a67e24fb7"}, + "webReport": {"path": "tests/golden/M16-GAP-00130/action-paste-local-exact-report.json", "sha256": "6f37a4b1cf1af54bd8437a0df2ed4389f12fa830e298f86c2f70b67e853ffa61"} + }, + "nextTask": "M16-GAP-00131" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00131/action-previewrange-set-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00131/action-previewrange-set-desktop-report.json new file mode 100644 index 00000000..d16a452a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00131/action-previewrange-set-desktop-report.json @@ -0,0 +1,13 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00131-operator-action.previewrange_set.blend", + "fixtureSha256": "8b0222547b3e31480dede4804353edd4d056cc806ad2cede24c73e81070bb9b6", + "operation": "ACTION_PREVIEWRANGE_SET_DESKTOP", + "previewRange": { + "end": 5, + "start": 1 + }, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00131" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00131/action-previewrange-set-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00131/action-previewrange-set-local-exact-report.json new file mode 100644 index 00000000..d97b2084 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00131/action-previewrange-set-local-exact-report.json @@ -0,0 +1,27 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00131", + "operation": "ACTION_PREVIEWRANGE_SET_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00131-operator-action.previewrange_set.blend", + "sha256": "8b0222547b3e31480dede4804353edd4d056cc806ad2cede24c73e81070bb9b6" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00131/action-previewrange-set-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "sceneId": "scene:Scene", + "previewRange": { + "end": 5, + "start": 1 + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00132" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00131/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00131/manifest.json new file mode 100644 index 00000000..64f3bd85 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00131/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00131", + "parentTask": "M16-GAP-00130", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_PREVIEWRANGE_SET_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00130/manifest.json", "sha256": "1bd06520e5be08d28947b55cfefbbc38b53c496f677a989d57d760b99742585a"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00131-operator-action.previewrange_set.blend", "sha256": "8b0222547b3e31480dede4804353edd4d056cc806ad2cede24c73e81070bb9b6"}, + "generator": {"path": "tools/web/generated/M16-GAP-00131.py", "sha256": "f679375cd1a45f13e2423cd540b557e9eab841d4c0d535c064beb5794887738e"}, + "desktopChecker": {"path": "tools/web/check-action-previewrange-set-desktop.py", "sha256": "339226b1af67537ec464040e551c3e43811a8b1476393a0c3420bc6572ae4db5"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "1d37f5b2fde6348e8b52d616bd0c044b8cd8d53fcd2ec1cfa6ed26902cd6e881"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00131/action-previewrange-set-desktop-report.json", "sha256": "e0ad513329a4a26d70e239d65c30b9048e78c1fcb480a6e4013d941e85d94470"}, + "webReport": {"path": "tests/golden/M16-GAP-00131/action-previewrange-set-local-exact-report.json", "sha256": "7cd2170ba8134e088c23a4939d96f9a23b62779370051fac2185c7ad092e20d0"} + }, + "nextTask": "M16-GAP-00132" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00132/action-push-down-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00132/action-push-down-desktop-report.json new file mode 100644 index 00000000..83236065 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00132/action-push-down-desktop-report.json @@ -0,0 +1,25 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00132-operator-action.push_down.blend", + "fixtureSha256": "e3e933bfc5595d288a5ab2e2f0e661d76474aff88b33d0acc62f7e540757e2e9", + "nla": { + "activeAction": null, + "tracks": [ + { + "name": "WebGapPushDownObjectAction", + "strips": [ + { + "action": "WebGapPushDownObjectAction", + "frameEnd": 5.0, + "frameStart": 1.0, + "name": "WebGapPushDownObjectAction" + } + ] + } + ] + }, + "operation": "ACTION_PUSH_DOWN_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00132" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00132/action-push-down-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00132/action-push-down-local-exact-report.json new file mode 100644 index 00000000..3fdeb2e4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00132/action-push-down-local-exact-report.json @@ -0,0 +1,56 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00132", + "operation": "ACTION_PUSH_DOWN_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00132-operator-action.push_down.blend", + "sha256": "e3e933bfc5595d288a5ab2e2f0e661d76474aff88b33d0acc62f7e540757e2e9" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00132/action-push-down-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapPushDownObjectAction:object:WebGapPushDownObject", + "nlaTracks": [ + { + "id": "nla-track:object:WebGapPushDownObject:0", + "muted": false, + "name": "WebGapPushDownObjectAction", + "ownerId": "object:WebGapPushDownObject", + "schemaVersion": 1, + "selected": true, + "solo": false, + "strips": [ + { + "actionFrameEnd": 5, + "actionFrameStart": 1, + "actionId": "action:WebGapPushDownObjectAction:object:WebGapPushDownObject", + "blendIn": 0, + "blendMode": "REPLACE", + "blendOut": 0, + "extrapolation": "HOLD", + "frameEnd": 5, + "frameStart": 1, + "id": "WebGapPushDownObjectAction", + "influence": 1, + "muted": false, + "repeat": 1, + "reverse": false, + "scale": 1, + "selected": true, + "stripType": "CLIP", + "useTimeWarp": false + } + ] + } + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00133" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00132/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00132/manifest.json new file mode 100644 index 00000000..945b6081 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00132/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00132", + "parentTask": "M16-GAP-00131", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_PUSH_DOWN_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00131/manifest.json", "sha256": "9569fe9c951190d125af519860354781fcbad0a6c0def7a04cc62a316aeccdce"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00132-operator-action.push_down.blend", "sha256": "e3e933bfc5595d288a5ab2e2f0e661d76474aff88b33d0acc62f7e540757e2e9"}, + "generator": {"path": "tools/web/generated/M16-GAP-00132.py", "sha256": "728a07f627b276ffceb7f5ddff059829095ab7f7175ecbfeb41129f6b43b306e"}, + "desktopChecker": {"path": "tools/web/check-action-push-down-desktop.py", "sha256": "1bb759da4d9776f84bb5be2d615b7bd5edb6a4fafd9141fcb8e769c8076410e8"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "a259a552617f3e42536fad93d3c791580c38b1bb27035ad875c1a2e597019e4e"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00132/action-push-down-desktop-report.json", "sha256": "1341e50c48f9adc16d7c9269bd31738d852299c4c8ed0ea03071efe934f5dabc"}, + "webReport": {"path": "tests/golden/M16-GAP-00132/action-push-down-local-exact-report.json", "sha256": "3d9ac3404080630e5241a39902229089b2528e784ec3b107aced1d1956ed9b33"} + }, + "nextTask": "M16-GAP-00133" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00133/action-select-all-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00133/action-select-all-desktop-report.json new file mode 100644 index 00000000..fb68cc7e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00133/action-select-all-desktop-report.json @@ -0,0 +1,57 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location", + "selected": [ + true, + true, + true + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location", + "selected": [ + true, + true, + true + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location", + "selected": [ + true, + true, + true + ] + } + ], + "name": "WebGapSelectAllObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00133-operator-action.select_all.blend", + "fixtureSha256": "f7ebc1bb7b45d6838d6e2bdccc809f2142a70cb3a9c9ecabcc5e1b5a91426526", + "operation": "ACTION_SELECT_ALL_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "selection": "SELECT", + "task": "M16-GAP-00133" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00133/action-select-all-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00133/action-select-all-local-exact-report.json new file mode 100644 index 00000000..ac3b9765 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00133/action-select-all-local-exact-report.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00133", + "operation": "ACTION_SELECT_ALL_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00133-operator-action.select_all.blend", + "sha256": "f7ebc1bb7b45d6838d6e2bdccc809f2142a70cb3a9c9ecabcc5e1b5a91426526" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00133/action-select-all-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapSelectAllObjectAction:object:WebGapSelectAllObject", + "selected": true, + "channels": 3 + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00134" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00133/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00133/manifest.json new file mode 100644 index 00000000..f62e2047 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00133/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00133", + "parentTask": "M16-GAP-00132", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_SELECT_ALL_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00132/manifest.json", "sha256": "e02b7149851c8503ad907e209085f66769171dbe67a4a2eb066f9e86fbe6938b"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00133-operator-action.select_all.blend", "sha256": "f7ebc1bb7b45d6838d6e2bdccc809f2142a70cb3a9c9ecabcc5e1b5a91426526"}, + "generator": {"path": "tools/web/generated/M16-GAP-00133.py", "sha256": "5bb6e8720b5f126590fb36b92a5fd05becfe6c710e99eac6694b391675e10572"}, + "desktopChecker": {"path": "tools/web/check-action-select-all-desktop.py", "sha256": "fe285ee6be545e1cbb9982563d35b98bee213d86a74dceefc274979ed887c73b"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "d9cd216d44edda6195a7f8c7ae9208ab8473382e665894e69fff2a6e75bd6e49"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00133/action-select-all-desktop-report.json", "sha256": "06d1ae064a91784d1122141bdded039a4761ed15341dda9d9bb5f0649e9305bb"}, + "webReport": {"path": "tests/golden/M16-GAP-00133/action-select-all-local-exact-report.json", "sha256": "50808e1aa34a12e83afbe68bd47206b5990efb0e0a5c13b614e99abc8326c641"} + }, + "nextTask": "M16-GAP-00134" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00134/action-select-box-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00134/action-select-box-desktop-report.json new file mode 100644 index 00000000..be979bbd --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00134/action-select-box-desktop-report.json @@ -0,0 +1,57 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location", + "selected": [ + false, + true, + false + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location", + "selected": [ + false, + true, + false + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location", + "selected": [ + false, + true, + false + ] + } + ], + "name": "WebGapSelectBoxObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00134-operator-action.select_box.blend", + "fixtureSha256": "100744edae87b08ef300ae23ae4a5556dd6576f1a5d30630967475736e3a4ba8", + "operation": "ACTION_SELECT_BOX_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "selectedFrame": 3, + "task": "M16-GAP-00134" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00134/action-select-box-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00134/action-select-box-local-exact-report.json new file mode 100644 index 00000000..2ef679a6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00134/action-select-box-local-exact-report.json @@ -0,0 +1,35 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00134", + "operation": "ACTION_SELECT_BOX_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00134-operator-action.select_box.blend", + "sha256": "100744edae87b08ef300ae23ae4a5556dd6576f1a5d30630967475736e3a4ba8" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00134/action-select-box-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapSelectBoxObjectAction:object:WebGapSelectBoxObject", + "selectedFrame": 3, + "selectedPerChannel": [ + [ + 3 + ], + [ + 3 + ], + [ + 3 + ] + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00135" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00134/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00134/manifest.json new file mode 100644 index 00000000..f47d82e2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00134/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00134", + "parentTask": "M16-GAP-00133", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_SELECT_BOX_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00133/manifest.json", "sha256": "490581ab799c7f2af1311839761eb320a91d723a1db866b77b6934b10c8f84f1"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00134-operator-action.select_box.blend", "sha256": "100744edae87b08ef300ae23ae4a5556dd6576f1a5d30630967475736e3a4ba8"}, + "generator": {"path": "tools/web/generated/M16-GAP-00134.py", "sha256": "5760b84ac789d3aaafb2577441a7638da28fc983c0dcfb126fb36cfb1b5748e7"}, + "desktopChecker": {"path": "tools/web/check-action-select-box-desktop.py", "sha256": "5a37f76f9da69f172fba64ed83424ea7bec521f498f556c3b0142fc2d284f0e3"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "e849ed955d57e34e987891efd43e79fb2b72fb66f6f434465a3775699bee8f4c"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00134/action-select-box-desktop-report.json", "sha256": "20f1d2012eff7ee00744009455d8b34fd3ced10ae681af80065d2761f07838d4"}, + "webReport": {"path": "tests/golden/M16-GAP-00134/action-select-box-local-exact-report.json", "sha256": "d6bb840a51e5845681d83a381a5eed831dd0b727816400518f884af44c80a256"} + }, + "nextTask": "M16-GAP-00135" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00135/action-select-by-type-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00135/action-select-by-type-desktop-report.json new file mode 100644 index 00000000..99c9a1ab --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00135/action-select-by-type-desktop-report.json @@ -0,0 +1,57 @@ +{ + "action": { + "channels": [ + { + "index": 0, + "keyframeType": [ + "KEYFRAME", + "BREAKDOWN", + "KEYFRAME" + ], + "path": "location", + "selected": [ + false, + true, + false + ] + }, + { + "index": 1, + "keyframeType": [ + "KEYFRAME", + "BREAKDOWN", + "KEYFRAME" + ], + "path": "location", + "selected": [ + false, + true, + false + ] + }, + { + "index": 2, + "keyframeType": [ + "KEYFRAME", + "BREAKDOWN", + "KEYFRAME" + ], + "path": "location", + "selected": [ + false, + true, + false + ] + } + ], + "name": "WebGapSelectByTypeObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00135-operator-action.select_by_type.blend", + "fixtureSha256": "3069eba61f2bdfa1c772afc62c075a06a95a803888b4213078d6dd1a68aa6bf5", + "operation": "ACTION_SELECT_BY_TYPE_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "selectedType": "BREAKDOWN", + "task": "M16-GAP-00135" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00135/action-select-by-type-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00135/action-select-by-type-local-exact-report.json new file mode 100644 index 00000000..18909001 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00135/action-select-by-type-local-exact-report.json @@ -0,0 +1,35 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00135", + "operation": "ACTION_SELECT_BY_TYPE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00135-operator-action.select_by_type.blend", + "sha256": "3069eba61f2bdfa1c772afc62c075a06a95a803888b4213078d6dd1a68aa6bf5" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00135/action-select-by-type-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapSelectByTypeObjectAction:object:WebGapSelectByTypeObject", + "selectedType": "BREAKDOWN", + "selectedPerChannel": [ + [ + 3 + ], + [ + 3 + ], + [ + 3 + ] + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00136" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00135/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00135/manifest.json new file mode 100644 index 00000000..df81d74e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00135/manifest.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00135", + "parentTask": "M16-GAP-00134", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_SELECT_BY_TYPE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00134/manifest.json", "sha256": "cfbee14e33752b00dc877928fc2a2378ce723763e26b7882e26336af15065c50"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00135-operator-action.select_by_type.blend", "sha256": "3069eba61f2bdfa1c772afc62c075a06a95a803888b4213078d6dd1a68aa6bf5"}, + "generator": {"path": "tools/web/generated/M16-GAP-00135.py", "sha256": "3072ac8ebeb375655730d030e0fc757fdc8002811ad2747376ec12dbfac1c993"}, + "desktopChecker": {"path": "tools/web/check-action-select-by-type-desktop.py", "sha256": "1ed90bea542349826d6297378fd27e55c8b8370d6bc7dcf5251ac8b112887a30"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "5cb3002a7df545857bc6329b9c7ac37ebc328e7b13c62b94fed6699da4dd9371"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00135/action-select-by-type-desktop-report.json", "sha256": "4e7ad68e84576c6ef5153302911e682242b028f022eddf9deb18b39e28851298"}, + "webReport": {"path": "tests/golden/M16-GAP-00135/action-select-by-type-local-exact-report.json", "sha256": "7b07b6f31ad375a4d7461f375c2fb036021ef80d34176ecd0db37d752ff9b963"} + }, + "nextTask": "M16-GAP-00136" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00136/action-select-circle-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00136/action-select-circle-desktop-report.json new file mode 100644 index 00000000..84b8a93f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00136/action-select-circle-desktop-report.json @@ -0,0 +1,57 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location", + "selected": [ + false, + true, + false + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location", + "selected": [ + false, + true, + false + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location", + "selected": [ + false, + true, + false + ] + } + ], + "name": "WebGapSelectCircleObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00136-operator-action.select_circle.blend", + "fixtureSha256": "16ae2413cd86d4fa8df384ef1e2d167c4e79caa48114b5b12facd33e1ca37b8b", + "operation": "ACTION_SELECT_CIRCLE_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "selectedFrame": 3, + "task": "M16-GAP-00136" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00136/action-select-circle-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00136/action-select-circle-local-exact-report.json new file mode 100644 index 00000000..f6a2c54d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00136/action-select-circle-local-exact-report.json @@ -0,0 +1,35 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00136", + "operation": "ACTION_SELECT_CIRCLE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00136-operator-action.select_circle.blend", + "sha256": "16ae2413cd86d4fa8df384ef1e2d167c4e79caa48114b5b12facd33e1ca37b8b" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00136/action-select-circle-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapSelectCircleObjectAction:object:WebGapSelectCircleObject", + "selectedFrame": 3, + "selectedPerChannel": [ + [ + 3 + ], + [ + 3 + ], + [ + 3 + ] + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00137" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00136/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00136/manifest.json new file mode 100644 index 00000000..337b4a56 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00136/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00136", + "parentTask": "M16-GAP-00135", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_SELECT_CIRCLE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00135/manifest.json", "sha256": "5d76455d3969245a12288929ed8d40157882d5e7080472c83d63f843e2abc1cb"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00136-operator-action.select_circle.blend", "sha256": "16ae2413cd86d4fa8df384ef1e2d167c4e79caa48114b5b12facd33e1ca37b8b"}, + "generator": {"path": "tools/web/generated/M16-GAP-00136.py", "sha256": "7d29d879169aef8362f53a39130b2a4ef0ab3ac83069024a78338197e09ae030"}, + "desktopChecker": {"path": "tools/web/check-action-select-circle-desktop.py", "sha256": "3e5abe08be97e7db93a0229b63eeef48b6577a9d10be49339d36c0974126be70"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "46163965b2c3a2405a7db0391d79694ca53861bd64d8cf6c911c860fd3ae90d4"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00136/action-select-circle-desktop-report.json", "sha256": "405d31329386086ba1f833795630a0180880bfce17e02d93fd586ce15bb6f1c0"}, + "webReport": {"path": "tests/golden/M16-GAP-00136/action-select-circle-local-exact-report.json", "sha256": "489863284d53857629642ae8fadb9c7066a4c492117eb8b7cbe0c823d65d9db5"}, + "taskContext": {"path": "tests/golden/M16-GAP-00136/task-context.json", "sha256": "fc4b89652b93f26d0e7ee929ca442fa4954e47b677ddb75604d3dfacb0c1498e"} + }, + "nextTask": "M16-GAP-00137" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00136/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00136/task-context.json new file mode 100644 index 00000000..cba0a2aa --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00136/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00136", + "parentTask": "M16-GAP-00135", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:action.select_circle data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:action.select_circle", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00136.py -- tests/files/web/generated/M16-GAP-00136-operator-action.select_circle.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00136", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00136" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00136.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 3098, + "contextRemainingTokens": 773 + }, + "source": { + "bytes": 6806, + "tokens": 1703 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00136.py", + "bytes": 3018, + "tokens": 755 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00136-operator-action.select_circle.blend", + "bytes": 86883, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 224767, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 226422, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00136/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00136.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00136/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 3018, + "tokens": 755 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00137", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00136.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00135/manifest.json", + "parentStatus": "docs/status/M16-GAP-00135.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00136.md", + "tests/golden/M16-GAP-00135/manifest.json", + "docs/status/M16-GAP-00135.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00135", + "parentTask": "M16-GAP-00134", + "status": "done", + "nextTask": "M16-GAP-00136", + "artifactCount": 11 + }, + "statusSummary": [ + "# M16-GAP-00135 Status", + "status: done", + "task: action.select_by_type operator LOCAL_EXACT slice", + "updated: 2026-08-20 America/New_York", + "scope: Action Editor keyframe-type selection on `object:WebGapSelectByTypeObject`.", + "evidence:", + "- Blender marks frame 3 as BREAKDOWN, clears selection, and executes `bpy.ops.action.select_by_type(type=\"BREAKDOWN\", extend=False)`.", + "- Desktop and WASM/Main expose matching keyframe types and selected flags; save/reopen is exact." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1789, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 448 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00136.md", + "bytes": 1789, + "lines": 38, + "tokens": 448 + }, + { + "path": "tests/golden/M16-GAP-00135/manifest.json", + "bytes": 2072, + "lines": 25, + "tokens": 518 + }, + { + "path": "docs/status/M16-GAP-00135.md", + "bytes": 777, + "lines": 19, + "tokens": 195 + } + ], + "sourceTokens": 1703, + "evidenceFiles": 1, + "evidenceBytes": 3018, + "evidenceTokens": 755, + "totalTokens": 2458, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3482, + "serializedContextTokens": 754, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00137/action-select-column-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00137/action-select-column-desktop-report.json new file mode 100644 index 00000000..d6e85c55 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00137/action-select-column-desktop-report.json @@ -0,0 +1,57 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location", + "selected": [ + false, + true, + false + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location", + "selected": [ + false, + true, + false + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location", + "selected": [ + false, + true, + false + ] + } + ], + "name": "WebGapSelectColumnObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00137-operator-action.select_column.blend", + "fixtureSha256": "01b13092985f0c672a5ac639ce1e556caf8c405ed3574249b0c4680aedecdc27", + "operation": "ACTION_SELECT_COLUMN_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "selectedFrame": 3, + "task": "M16-GAP-00137" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00137/action-select-column-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00137/action-select-column-local-exact-report.json new file mode 100644 index 00000000..bfe359a4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00137/action-select-column-local-exact-report.json @@ -0,0 +1,35 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00137", + "operation": "ACTION_SELECT_COLUMN_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00137-operator-action.select_column.blend", + "sha256": "01b13092985f0c672a5ac639ce1e556caf8c405ed3574249b0c4680aedecdc27" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00137/action-select-column-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapSelectColumnObjectAction:object:WebGapSelectColumnObject", + "selectedFrame": 3, + "selectedPerChannel": [ + [ + 3 + ], + [ + 3 + ], + [ + 3 + ] + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00138" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00137/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00137/manifest.json new file mode 100644 index 00000000..d0327e80 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00137/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00137", + "parentTask": "M16-GAP-00136", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_SELECT_COLUMN_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00136/manifest.json", "sha256": "4953a140158fde453aa89670b3281f756fdc65a70bfc17099c891cec9d70197f"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00137-operator-action.select_column.blend", "sha256": "01b13092985f0c672a5ac639ce1e556caf8c405ed3574249b0c4680aedecdc27"}, + "generator": {"path": "tools/web/generated/M16-GAP-00137.py", "sha256": "8743db045d9df0505233a88785b92b0fadb2551788b909047d1aa2376e8e9516"}, + "desktopChecker": {"path": "tools/web/check-action-select-column-desktop.py", "sha256": "7e4c5fcef9b85239b3f561db2736eaa80de819d042b8caa3eaaf7fb3230cc189"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "a2461a33a4a31ac6a1dc57c5066edd596798421a0d3ec741404fa0344bec5d80"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00137/action-select-column-desktop-report.json", "sha256": "71916a53336e89a4be1d07e1fec163b215661d1554d86a1446a79dad0411ba88"}, + "webReport": {"path": "tests/golden/M16-GAP-00137/action-select-column-local-exact-report.json", "sha256": "c9747457cd2746e4bcd27c10c87564e92f74664c6d59129222e826b17ace7815"}, + "taskContext": {"path": "tests/golden/M16-GAP-00137/task-context.json", "sha256": "847fe153913ff003ef06c7f17c952667a603b31f95a5bc1a9a06fb8a077c6e6b"} + }, + "nextTask": "M16-GAP-00138" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00137/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00137/task-context.json new file mode 100644 index 00000000..0e9b1e98 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00137/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00137", + "parentTask": "M16-GAP-00136", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:action.select_column data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:action.select_column", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00137.py -- tests/files/web/generated/M16-GAP-00137-operator-action.select_column.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00137", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00137" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00137.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 3183, + "contextRemainingTokens": 794 + }, + "source": { + "bytes": 6721, + "tokens": 1682 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00137.py", + "bytes": 2267, + "tokens": 567 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00137-operator-action.select_column.blend", + "bytes": 86891, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 224767, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 229962, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00137/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00137.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00137/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 2267, + "tokens": 567 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00138", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00137.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00136/manifest.json", + "parentStatus": "docs/status/M16-GAP-00136.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00137.md", + "tests/golden/M16-GAP-00136/manifest.json", + "docs/status/M16-GAP-00136.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00136", + "parentTask": "M16-GAP-00135", + "status": "done", + "nextTask": "M16-GAP-00137", + "artifactCount": 12 + }, + "statusSummary": [ + "# M16-GAP-00136 Status", + "status: done", + "task: action.select_circle operator LOCAL_EXACT slice", + "updated: 2026-08-20 America/New_York", + "scope:", + "- Action Editor circle selection on `object:WebGapSelectCircleObject`.", + "evidence:", + "- Blender desktop and WASM/Main expose matching three location channels with frame 3 selected." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1789, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 448 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00137.md", + "bytes": 1789, + "lines": 38, + "tokens": 448 + }, + { + "path": "tests/golden/M16-GAP-00136/manifest.json", + "bytes": 2222, + "lines": 26, + "tokens": 556 + }, + { + "path": "docs/status/M16-GAP-00136.md", + "bytes": 542, + "lines": 18, + "tokens": 136 + } + ], + "sourceTokens": 1682, + "evidenceFiles": 1, + "evidenceBytes": 2267, + "evidenceTokens": 567, + "totalTokens": 2249, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3273, + "serializedContextTokens": 754, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00138/action-select-lasso-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00138/action-select-lasso-desktop-report.json new file mode 100644 index 00000000..c89e820b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00138/action-select-lasso-desktop-report.json @@ -0,0 +1,57 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location", + "selected": [ + false, + true, + false + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location", + "selected": [ + false, + true, + false + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location", + "selected": [ + false, + true, + false + ] + } + ], + "name": "WebGapSelectLassoObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00138-operator-action.select_lasso.blend", + "fixtureSha256": "d3ef22466ef1615aeb2f96ffbb70e8a2a13ca7ce9de7fac91e75101ab01415de", + "operation": "ACTION_SELECT_LASSO_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "selectedFrame": 3, + "task": "M16-GAP-00138" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00138/action-select-lasso-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00138/action-select-lasso-local-exact-report.json new file mode 100644 index 00000000..9edfc958 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00138/action-select-lasso-local-exact-report.json @@ -0,0 +1,35 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00138", + "operation": "ACTION_SELECT_LASSO_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00138-operator-action.select_lasso.blend", + "sha256": "d3ef22466ef1615aeb2f96ffbb70e8a2a13ca7ce9de7fac91e75101ab01415de" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00138/action-select-lasso-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapSelectLassoObjectAction:object:WebGapSelectLassoObject", + "selectedFrame": 3, + "selectedPerChannel": [ + [ + 3 + ], + [ + 3 + ], + [ + 3 + ] + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00139" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00138/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00138/manifest.json new file mode 100644 index 00000000..73ec47ca --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00138/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00138", + "parentTask": "M16-GAP-00137", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_SELECT_LASSO_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00137/manifest.json", "sha256": "db4d41f58efc70ee7ed26ae430b9879a8f00cfb40700a39de4f23e7f64c3533d"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00138-operator-action.select_lasso.blend", "sha256": "d3ef22466ef1615aeb2f96ffbb70e8a2a13ca7ce9de7fac91e75101ab01415de"}, + "generator": {"path": "tools/web/generated/M16-GAP-00138.py", "sha256": "182db872745d0ce5746919db571e67ff715c1114b3936bfa659b6e71acf303a7"}, + "desktopChecker": {"path": "tools/web/check-action-select-lasso-desktop.py", "sha256": "e730e9ae9740fb7a97113edb9af6c7f862128bf79509865727c432a275c3504a"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "9af9911bae1ac400b98621d7ae01f5d92dbe00e37148f70ea2e05c0ba1d9b175"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00138/action-select-lasso-desktop-report.json", "sha256": "0b08c6f6e71af41aee20187546477ea962cd84d8c4aade1d85aefd0e9f7f1e65"}, + "webReport": {"path": "tests/golden/M16-GAP-00138/action-select-lasso-local-exact-report.json", "sha256": "80b30bbb0abd93e0e4d034d65e916171446e2549c7b224befb98f37f4e22eee9"}, + "taskContext": {"path": "tests/golden/M16-GAP-00138/task-context.json", "sha256": "9ac60ee1fef3eb3809f9cd4ba251272406a7f391cfe26621f076d098d9b0d524"} + }, + "nextTask": "M16-GAP-00139" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00138/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00138/task-context.json new file mode 100644 index 00000000..f212c8cc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00138/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00138", + "parentTask": "M16-GAP-00137", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:action.select_lasso data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:action.select_lasso", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00138.py -- tests/files/web/generated/M16-GAP-00138-operator-action.select_lasso.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00138", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00138" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00138.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 3174, + "contextRemainingTokens": 793 + }, + "source": { + "bytes": 6730, + "tokens": 1683 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00138.py", + "bytes": 3008, + "tokens": 752 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00138-operator-action.select_lasso.blend", + "bytes": 86894, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 224767, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 233495, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00138/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00138.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00138/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 3008, + "tokens": 752 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00139", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00138.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00137/manifest.json", + "parentStatus": "docs/status/M16-GAP-00137.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00138.md", + "tests/golden/M16-GAP-00137/manifest.json", + "docs/status/M16-GAP-00137.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00137", + "parentTask": "M16-GAP-00136", + "status": "done", + "nextTask": "M16-GAP-00138", + "artifactCount": 12 + }, + "statusSummary": [ + "# M16-GAP-00137 Status", + "status: done", + "task: action.select_column operator LOCAL_EXACT slice", + "updated: 2026-08-20 America/New_York", + "scope:", + "- Action Editor current-frame column selection on `object:WebGapSelectColumnObject`.", + "evidence:", + "- Blender desktop and WASM/Main expose matching three location channels with frame 3 selected." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1784, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 446 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00138.md", + "bytes": 1784, + "lines": 38, + "tokens": 446 + }, + { + "path": "tests/golden/M16-GAP-00137/manifest.json", + "bytes": 2222, + "lines": 26, + "tokens": 556 + }, + { + "path": "docs/status/M16-GAP-00137.md", + "bytes": 556, + "lines": 18, + "tokens": 139 + } + ], + "sourceTokens": 1683, + "evidenceFiles": 1, + "evidenceBytes": 3008, + "evidenceTokens": 752, + "totalTokens": 2435, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3459, + "serializedContextTokens": 753, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00139/action-select-leftright-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00139/action-select-leftright-desktop-report.json new file mode 100644 index 00000000..cabf3e7d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00139/action-select-leftright-desktop-report.json @@ -0,0 +1,61 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location", + "selected": [ + true, + true, + false + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location", + "selected": [ + true, + true, + false + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location", + "selected": [ + true, + true, + false + ] + } + ], + "name": "WebGapSelectLeftRightObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00139-operator-action.select_leftright.blend", + "fixtureSha256": "ed6f8c69f70b5dcef868fffc9381395c7884401bbe24fdd8d9984557284e66c9", + "mode": "LEFT", + "operation": "ACTION_SELECT_LEFTRIGHT_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "selectedFrames": [ + 1, + 3 + ], + "task": "M16-GAP-00139" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00139/action-select-leftright-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00139/action-select-leftright-local-exact-report.json new file mode 100644 index 00000000..ea559f00 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00139/action-select-leftright-local-exact-report.json @@ -0,0 +1,42 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00139", + "operation": "ACTION_SELECT_LEFTRIGHT_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00139-operator-action.select_leftright.blend", + "sha256": "ed6f8c69f70b5dcef868fffc9381395c7884401bbe24fdd8d9984557284e66c9" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00139/action-select-leftright-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapSelectLeftRightObjectAction:object:WebGapSelectLeftRightObject", + "mode": "LEFT", + "selectedFrames": [ + 1, + 3 + ], + "selectedPerChannel": [ + [ + 1, + 3 + ], + [ + 1, + 3 + ], + [ + 1, + 3 + ] + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00140" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00139/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00139/manifest.json new file mode 100644 index 00000000..8b4a2989 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00139/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00139", + "parentTask": "M16-GAP-00138", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_SELECT_LEFTRIGHT_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00138/manifest.json", "sha256": "164d1020de2e126f1e0736b508a18bf261c7610b375fe02dbfccb3422e27ff13"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00139-operator-action.select_leftright.blend", "sha256": "ed6f8c69f70b5dcef868fffc9381395c7884401bbe24fdd8d9984557284e66c9"}, + "generator": {"path": "tools/web/generated/M16-GAP-00139.py", "sha256": "d1175acf47e8ec1c4998582e22d9434a4eea921f551b6c99f9b85b7f5a6727be"}, + "desktopChecker": {"path": "tools/web/check-action-select-leftright-desktop.py", "sha256": "bf20b5d05883481b1b455d0eaab9951f9c4abc73406f3a499f1a03c49b044832"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "ae898c2ff5ff3d622f348ba21d83ff91e10d4d26809207966fef8895f81b09f1"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00139/action-select-leftright-desktop-report.json", "sha256": "7caa17c7eb256a4bea4e95d03edd3e2b3a31286fd30581188915fca174a89f56"}, + "webReport": {"path": "tests/golden/M16-GAP-00139/action-select-leftright-local-exact-report.json", "sha256": "70476940cd710d7ac0305d1caa428e9b0ac7f71a8e7f55900139c94be7433ee2"}, + "taskContext": {"path": "tests/golden/M16-GAP-00139/task-context.json", "sha256": "70af07e854ffebad8dcf9403c3485732c25b7100062b49a0bf1f16fb9b730bbb"} + }, + "nextTask": "M16-GAP-00140" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00139/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00139/task-context.json new file mode 100644 index 00000000..65efb523 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00139/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00139", + "parentTask": "M16-GAP-00138", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:action.select_leftright data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:action.select_leftright", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00139.py -- tests/files/web/generated/M16-GAP-00139-operator-action.select_leftright.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00139", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00139" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00139.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 3176, + "contextRemainingTokens": 793 + }, + "source": { + "bytes": 6728, + "tokens": 1683 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00139.py", + "bytes": 2305, + "tokens": 577 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00139-operator-action.select_leftright.blend", + "bytes": 86867, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 224767, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 237188, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00139/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00139.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00139/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 2305, + "tokens": 577 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00140", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00139.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00138/manifest.json", + "parentStatus": "docs/status/M16-GAP-00138.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00139.md", + "tests/golden/M16-GAP-00138/manifest.json", + "docs/status/M16-GAP-00138.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00138", + "parentTask": "M16-GAP-00137", + "status": "done", + "nextTask": "M16-GAP-00139", + "artifactCount": 12 + }, + "statusSummary": [ + "# M16-GAP-00138 Status", + "status: done", + "task: action.select_lasso operator LOCAL_EXACT slice", + "updated: 2026-08-20 America/New_York", + "scope:", + "- Action Editor lasso selection on `object:WebGapSelectLassoObject`.", + "evidence:", + "- Blender desktop and WASM/Main expose matching three location channels with frame 3 selected." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1804, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 451 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00139.md", + "bytes": 1804, + "lines": 38, + "tokens": 451 + }, + { + "path": "tests/golden/M16-GAP-00138/manifest.json", + "bytes": 2217, + "lines": 26, + "tokens": 555 + }, + { + "path": "docs/status/M16-GAP-00138.md", + "bytes": 539, + "lines": 18, + "tokens": 135 + } + ], + "sourceTokens": 1683, + "evidenceFiles": 1, + "evidenceBytes": 2305, + "evidenceTokens": 577, + "totalTokens": 2260, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3284, + "serializedContextTokens": 756, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00140/action-select-less-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00140/action-select-less-desktop-report.json new file mode 100644 index 00000000..27a416e9 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00140/action-select-less-desktop-report.json @@ -0,0 +1,57 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location", + "selected": [ + false, + true, + false + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location", + "selected": [ + false, + true, + false + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location", + "selected": [ + false, + true, + false + ] + } + ], + "name": "WebGapSelectLessObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00140-operator-action.select_less.blend", + "fixtureSha256": "3acc7908b362f9c224e825c5429b59d549a77dab4e2b45b285221e5c54fa0c2b", + "operation": "ACTION_SELECT_LESS_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "selectedFrame": 3, + "task": "M16-GAP-00140" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00140/action-select-less-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00140/action-select-less-local-exact-report.json new file mode 100644 index 00000000..5c8fb4fa --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00140/action-select-less-local-exact-report.json @@ -0,0 +1,35 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00140", + "operation": "ACTION_SELECT_LESS_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00140-operator-action.select_less.blend", + "sha256": "3acc7908b362f9c224e825c5429b59d549a77dab4e2b45b285221e5c54fa0c2b" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00140/action-select-less-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapSelectLessObjectAction:object:WebGapSelectLessObject", + "selectedFrame": 3, + "selectedPerChannel": [ + [ + 3 + ], + [ + 3 + ], + [ + 3 + ] + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00141" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00140/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00140/manifest.json new file mode 100644 index 00000000..8a7ed4cf --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00140/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00140", + "parentTask": "M16-GAP-00139", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_SELECT_LESS_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00139/manifest.json", "sha256": "f534007c6619c059eaeb7aec81215d560b37009f89938823cd73370803919fab"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00140-operator-action.select_less.blend", "sha256": "3acc7908b362f9c224e825c5429b59d549a77dab4e2b45b285221e5c54fa0c2b"}, + "generator": {"path": "tools/web/generated/M16-GAP-00140.py", "sha256": "62fe22db41e856439c50c542d0a62b6db4fbfc80facedf625ba58291d3b4a928"}, + "desktopChecker": {"path": "tools/web/check-action-select-less-desktop.py", "sha256": "52a4f3d5f5232f5843612286b35db8fb19050b8610c573a1bdcbbdae627d261f"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "45d5b93b987792feb203d53dccaf2ac81b858d503ac5ed4716e160650ead512b"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00140/action-select-less-desktop-report.json", "sha256": "f8527dd5d6d953fbda5b86bb1f42d6257b244a50296ceeb074c57a7b007a3aef"}, + "webReport": {"path": "tests/golden/M16-GAP-00140/action-select-less-local-exact-report.json", "sha256": "243dedadaa9776d7195883a99689e4cb8ee07599bf6c9786aaf8ee5910135e17"}, + "taskContext": {"path": "tests/golden/M16-GAP-00140/task-context.json", "sha256": "fc860324c53484ebaa1b1266cf51530abf10645c7e4546db5a495a25778ed03d"} + }, + "nextTask": "M16-GAP-00141" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00140/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00140/task-context.json new file mode 100644 index 00000000..aeaf2958 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00140/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00140", + "parentTask": "M16-GAP-00139", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:action.select_less data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:action.select_less", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00140.py -- tests/files/web/generated/M16-GAP-00140-operator-action.select_less.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00140", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00140" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00140.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 3132, + "contextRemainingTokens": 782 + }, + "source": { + "bytes": 6772, + "tokens": 1694 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00140.py", + "bytes": 2195, + "tokens": 549 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00140-operator-action.select_less.blend", + "bytes": 86865, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 224767, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 240756, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00140/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00140.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00140/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 2195, + "tokens": 549 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00141", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00140.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00139/manifest.json", + "parentStatus": "docs/status/M16-GAP-00139.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00140.md", + "tests/golden/M16-GAP-00139/manifest.json", + "docs/status/M16-GAP-00139.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00139", + "parentTask": "M16-GAP-00138", + "status": "done", + "nextTask": "M16-GAP-00140", + "artifactCount": 12 + }, + "statusSummary": [ + "# M16-GAP-00139 Status", + "status: done", + "task: action.select_leftright operator LOCAL_EXACT slice", + "updated: 2026-08-20 America/New_York", + "scope:", + "- Action Editor left-side selection on `object:WebGapSelectLeftRightObject`, using `mode=LEFT` at frame 3.", + "evidence:", + "- Blender desktop and WASM/Main expose matching three location channels with frames 1 and 3 selected." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1779, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 445 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00140.md", + "bytes": 1779, + "lines": 38, + "tokens": 445 + }, + { + "path": "tests/golden/M16-GAP-00139/manifest.json", + "bytes": 2237, + "lines": 26, + "tokens": 560 + }, + { + "path": "docs/status/M16-GAP-00139.md", + "bytes": 588, + "lines": 18, + "tokens": 147 + } + ], + "sourceTokens": 1694, + "evidenceFiles": 1, + "evidenceBytes": 2195, + "evidenceTokens": 549, + "totalTokens": 2243, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3267, + "serializedContextTokens": 753, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00141/action-select-linked-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00141/action-select-linked-desktop-report.json new file mode 100644 index 00000000..aef7e26a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00141/action-select-linked-desktop-report.json @@ -0,0 +1,62 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location", + "selected": [ + true, + true, + true + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location", + "selected": [ + true, + true, + true + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location", + "selected": [ + true, + true, + true + ] + } + ], + "name": "WebGapSelectLinkedObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00141-operator-action.select_linked.blend", + "fixtureSha256": "62ddf7e0141f7bf5b0bfbf85b8faa0cb0ae602681f70e2c5e979db033b14056f", + "operation": "ACTION_SELECT_LINKED_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "selectedChannel": "location[0]", + "selectedFrames": [ + 1, + 3, + 5 + ], + "task": "M16-GAP-00141" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00141/action-select-linked-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00141/action-select-linked-local-exact-report.json new file mode 100644 index 00000000..e8d67053 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00141/action-select-linked-local-exact-report.json @@ -0,0 +1,46 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00141", + "operation": "ACTION_SELECT_LINKED_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00141-operator-action.select_linked.blend", + "sha256": "62ddf7e0141f7bf5b0bfbf85b8faa0cb0ae602681f70e2c5e979db033b14056f" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00141/action-select-linked-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapSelectLinkedObjectAction:object:WebGapSelectLinkedObject", + "selectedChannel": "location[0]", + "selectedFrames": [ + 1, + 3, + 5 + ], + "selectedPerChannel": [ + [ + 1, + 3, + 5 + ], + [ + 1, + 3, + 5 + ], + [ + 1, + 3, + 5 + ] + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00142" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00141/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00141/manifest.json new file mode 100644 index 00000000..e9362956 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00141/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00141", + "parentTask": "M16-GAP-00140", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_SELECT_LINKED_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00140/manifest.json", "sha256": "218516d7a1a3b9f28799dea042f41861cae9c1343e8e6bfae4939b6bdb169935"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00141-operator-action.select_linked.blend", "sha256": "62ddf7e0141f7bf5b0bfbf85b8faa0cb0ae602681f70e2c5e979db033b14056f"}, + "generator": {"path": "tools/web/generated/M16-GAP-00141.py", "sha256": "3e27b0fffe763b6526e4e32fa9b40aae72f229038e846237b90e72312aa1a8eb"}, + "desktopChecker": {"path": "tools/web/check-action-select-linked-desktop.py", "sha256": "4a1baae0c4add326934d50647d014248b43acf8e7ad90360921e1a487c25b150"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "1775105b3fe1650933326d6d49290edd3d0a15b8542a15ac202346260a49c10d"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00141/action-select-linked-desktop-report.json", "sha256": "7072809e5ceef8161b75594deaaf809e31ea01a67ef6261ac2d9e9fabbb5e296"}, + "webReport": {"path": "tests/golden/M16-GAP-00141/action-select-linked-local-exact-report.json", "sha256": "261490656ea23b3c1800ca523a9d00911347b7f46e40b7b1d16e693470ddc8d4"}, + "taskContext": {"path": "tests/golden/M16-GAP-00141/task-context.json", "sha256": "cf032562d9fc471a6a72b2e8dc50021e383ddc0fd628fca14e971647b64c5ad6"} + }, + "nextTask": "M16-GAP-00142" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00141/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00141/task-context.json new file mode 100644 index 00000000..720010a4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00141/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00141", + "parentTask": "M16-GAP-00140", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:action.select_linked data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:action.select_linked", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00141.py -- tests/files/web/generated/M16-GAP-00141-operator-action.select_linked.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00141", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00141" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00141.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 3162, + "contextRemainingTokens": 789 + }, + "source": { + "bytes": 6742, + "tokens": 1687 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00141.py", + "bytes": 2274, + "tokens": 569 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00141-operator-action.select_linked.blend", + "bytes": 86861, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 224767, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 244499, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00141/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00141.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00141/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 2274, + "tokens": 569 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00142", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00141.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00140/manifest.json", + "parentStatus": "docs/status/M16-GAP-00140.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00141.md", + "tests/golden/M16-GAP-00140/manifest.json", + "docs/status/M16-GAP-00140.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00140", + "parentTask": "M16-GAP-00139", + "status": "done", + "nextTask": "M16-GAP-00141", + "artifactCount": 12 + }, + "statusSummary": [ + "# M16-GAP-00140 Status", + "status: done", + "task: action.select_less operator LOCAL_EXACT slice", + "updated: 2026-08-20 America/New_York", + "scope:", + "- Action Editor selection-island shrinking on `object:WebGapSelectLessObject`.", + "evidence:", + "- Blender desktop and WASM/Main expose matching three location channels with only frame 3 selected after `select_less`." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1789, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 448 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00141.md", + "bytes": 1789, + "lines": 38, + "tokens": 448 + }, + { + "path": "tests/golden/M16-GAP-00140/manifest.json", + "bytes": 2212, + "lines": 26, + "tokens": 553 + }, + { + "path": "docs/status/M16-GAP-00140.md", + "bytes": 573, + "lines": 18, + "tokens": 144 + } + ], + "sourceTokens": 1687, + "evidenceFiles": 1, + "evidenceBytes": 2274, + "evidenceTokens": 569, + "totalTokens": 2256, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3280, + "serializedContextTokens": 754, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00142/action-select-more-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00142/action-select-more-desktop-report.json new file mode 100644 index 00000000..47a43c5e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00142/action-select-more-desktop-report.json @@ -0,0 +1,74 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location", + "selected": [ + true, + true, + true + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location", + "selected": [ + true, + true, + true + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location", + "selected": [ + true, + true, + true + ] + } + ], + "name": "WebGapSelectMoreObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00142-operator-action.select_more.blend", + "fixtureSha256": "9f0a3fad228c1a7200cd9ac76af24fb8a853dd261f49ef2186491690713ec726", + "operation": "ACTION_SELECT_MORE_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "selectedChannel": "location[0]", + "selectedPerChannel": [ + [ + 1, + 3, + 5 + ], + [ + 1, + 3, + 5 + ], + [ + 1, + 3, + 5 + ] + ], + "task": "M16-GAP-00142" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00142/action-select-more-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00142/action-select-more-local-exact-report.json new file mode 100644 index 00000000..a01a23d8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00142/action-select-more-local-exact-report.json @@ -0,0 +1,41 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00142", + "operation": "ACTION_SELECT_MORE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00142-operator-action.select_more.blend", + "sha256": "9f0a3fad228c1a7200cd9ac76af24fb8a853dd261f49ef2186491690713ec726" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00142/action-select-more-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapSelectMoreObjectAction:object:WebGapSelectMoreObject", + "selectedChannel": "location[0]", + "selectedPerChannel": [ + [ + 1, + 3, + 5 + ], + [ + 1, + 3, + 5 + ], + [ + 1, + 3, + 5 + ] + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00143" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00142/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00142/manifest.json new file mode 100644 index 00000000..e3972541 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00142/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00142", + "parentTask": "M16-GAP-00141", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_SELECT_MORE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00141/manifest.json", "sha256": "96756fb16e9731f2b7f217993ad6c2126d58fd5fd17bd71d1df55c0b463f4ddb"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00142-operator-action.select_more.blend", "sha256": "9f0a3fad228c1a7200cd9ac76af24fb8a853dd261f49ef2186491690713ec726"}, + "generator": {"path": "tools/web/generated/M16-GAP-00142.py", "sha256": "36dc0cf95dae703e72f8071625b94617e8d13a1845dc148835b5584625281d16"}, + "desktopChecker": {"path": "tools/web/check-action-select-more-desktop.py", "sha256": "7bfff8a2113d7933e76c0339232810c8cd43d1a633eee7832acb4c4069790f5b"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "61254d77bac838d4a488a5152e3ba176a66bd49ea9a79e611e2e7de41f0a1bb8"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00142/action-select-more-desktop-report.json", "sha256": "56944dfcacb924d7650b8652e52bfc254fb1673b40b04109a57f69ad67e3fe9a"}, + "webReport": {"path": "tests/golden/M16-GAP-00142/action-select-more-local-exact-report.json", "sha256": "91f1ef2bf23e75b681beea332836b359da9daf1902b8d77cb683b0e1657562a0"}, + "taskContext": {"path": "tests/golden/M16-GAP-00142/task-context.json", "sha256": "727493f7483e1fc0c42a516da51e469393881b5d15c5c362f04138bcd4c6944e"} + }, + "nextTask": "M16-GAP-00143" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00142/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00142/task-context.json new file mode 100644 index 00000000..487a843a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00142/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00142", + "parentTask": "M16-GAP-00141", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:action.select_more data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:action.select_more", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00142.py -- tests/files/web/generated/M16-GAP-00142-operator-action.select_more.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00142", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00142" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00142.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 3124, + "contextRemainingTokens": 780 + }, + "source": { + "bytes": 6780, + "tokens": 1696 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00142.py", + "bytes": 2258, + "tokens": 565 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00142-operator-action.select_more.blend", + "bytes": 86855, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 224767, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 248154, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00142/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00142.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00142/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 2258, + "tokens": 565 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00143", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00142.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00141/manifest.json", + "parentStatus": "docs/status/M16-GAP-00141.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00142.md", + "tests/golden/M16-GAP-00141/manifest.json", + "docs/status/M16-GAP-00141.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00141", + "parentTask": "M16-GAP-00140", + "status": "done", + "nextTask": "M16-GAP-00142", + "artifactCount": 12 + }, + "statusSummary": [ + "# M16-GAP-00141 Status", + "status: done", + "task: action.select_linked operator LOCAL_EXACT slice", + "updated: 2026-08-20 America/New_York", + "scope:", + "- Action Editor linked selection on `object:WebGapSelectLinkedObject`, starting from `location[0]` frame 3.", + "evidence:", + "- Blender desktop and WASM/Main expose matching three location channels with frames 1, 3 and 5 selected after `select_linked`." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1779, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 445 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00142.md", + "bytes": 1779, + "lines": 38, + "tokens": 445 + }, + { + "path": "tests/golden/M16-GAP-00141/manifest.json", + "bytes": 2222, + "lines": 26, + "tokens": 556 + }, + { + "path": "docs/status/M16-GAP-00141.md", + "bytes": 611, + "lines": 18, + "tokens": 153 + } + ], + "sourceTokens": 1696, + "evidenceFiles": 1, + "evidenceBytes": 2258, + "evidenceTokens": 565, + "totalTokens": 2261, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3285, + "serializedContextTokens": 753, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00143/action-snap-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00143/action-snap-desktop-report.json new file mode 100644 index 00000000..8d0fe847 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00143/action-snap-desktop-report.json @@ -0,0 +1,58 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 4.0, + 5.0 + ], + "index": 0, + "path": "location", + "selected": [ + false, + true, + false + ] + }, + { + "frames": [ + 1.0, + 4.0, + 5.0 + ], + "index": 1, + "path": "location", + "selected": [ + false, + true, + false + ] + }, + { + "frames": [ + 1.0, + 4.0, + 5.0 + ], + "index": 2, + "path": "location", + "selected": [ + false, + true, + false + ] + } + ], + "name": "WebGapSnapObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "currentFrame": 4, + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00143-operator-action.snap.blend", + "fixtureSha256": "d12a490f3d76a0b599f4fdffbb2dd65e01d0c637a2de6bbe78a44b887676995a", + "operation": "ACTION_SNAP_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00143", + "type": "CFRA" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00143/action-snap-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00143/action-snap-local-exact-report.json new file mode 100644 index 00000000..87341dbd --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00143/action-snap-local-exact-report.json @@ -0,0 +1,53 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00143", + "operation": "ACTION_SNAP_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00143-operator-action.snap.blend", + "sha256": "d12a490f3d76a0b599f4fdffbb2dd65e01d0c637a2de6bbe78a44b887676995a" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00143/action-snap-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapSnapObjectAction:object:WebGapSnapObject", + "type": "CFRA", + "currentFrame": 4, + "framesPerChannel": [ + [ + 1, + 4, + 5 + ], + [ + 1, + 4, + 5 + ], + [ + 1, + 4, + 5 + ] + ], + "selectedPerChannel": [ + [ + 4 + ], + [ + 4 + ], + [ + 4 + ] + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00144" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00143/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00143/manifest.json new file mode 100644 index 00000000..66c3aa36 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00143/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00143", + "parentTask": "M16-GAP-00142", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_SNAP_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00142/manifest.json", "sha256": "faece45f1ca92a39c7d1314b1eb325641c4eb4db91b321ca53578e6db6c734a0"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00143-operator-action.snap.blend", "sha256": "d12a490f3d76a0b599f4fdffbb2dd65e01d0c637a2de6bbe78a44b887676995a"}, + "generator": {"path": "tools/web/generated/M16-GAP-00143.py", "sha256": "fe0b8f6c70b0a2fece59b696e5e83e55cb2f72705bb89db43b8ed4e953a198be"}, + "desktopChecker": {"path": "tools/web/check-action-snap-desktop.py", "sha256": "01064fe4acd586e99986372a8b39a72340d1a961506c7c189b074ce7928cd568"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "b5cc720937266a6e7dbfbaa96005079f8ce97dc38aaad79742a3eb99ad17fa83"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00143/action-snap-desktop-report.json", "sha256": "0da5db63e20db1a97fed02019368de5c6a758e6e34c8b43af52800d33dfa48e0"}, + "webReport": {"path": "tests/golden/M16-GAP-00143/action-snap-local-exact-report.json", "sha256": "61afb2360dc9814da3b741a133b07728b4a560676e7a436f995d1c07e1a4d17e"}, + "taskContext": {"path": "tests/golden/M16-GAP-00143/task-context.json", "sha256": "8fbac173dc0bf7f0775d149161c7ea2ddf2cdd489f0f634669f860983806c1f1"} + }, + "nextTask": "M16-GAP-00144" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00143/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00143/task-context.json new file mode 100644 index 00000000..aa44ccd7 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00143/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00143", + "parentTask": "M16-GAP-00142", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:action.snap data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:action.snap", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00143.py -- tests/files/web/generated/M16-GAP-00143-operator-action.snap.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00143", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00143" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00143.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 3166, + "contextRemainingTokens": 791 + }, + "source": { + "bytes": 6738, + "tokens": 1685 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00143.py", + "bytes": 2223, + "tokens": 556 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00143-operator-action.snap.blend", + "bytes": 86847, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 224767, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 251833, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00143/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00143.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00143/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 2223, + "tokens": 556 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00144", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00143.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00142/manifest.json", + "parentStatus": "docs/status/M16-GAP-00142.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00143.md", + "tests/golden/M16-GAP-00142/manifest.json", + "docs/status/M16-GAP-00142.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00142", + "parentTask": "M16-GAP-00141", + "status": "done", + "nextTask": "M16-GAP-00143", + "artifactCount": 12 + }, + "statusSummary": [ + "# M16-GAP-00142 Status", + "status: done", + "task: action.select_more operator LOCAL_EXACT slice", + "updated: 2026-08-20 America/New_York", + "scope:", + "- Action Editor neighboring-key selection on `object:WebGapSelectMoreObject`, starting from `location[0]` frame 3.", + "evidence:", + "- Blender desktop and WASM/Main expose matching three location channels with frames 1, 3 and 5 selected after `select_more`." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1744, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 436 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00143.md", + "bytes": 1744, + "lines": 38, + "tokens": 436 + }, + { + "path": "tests/golden/M16-GAP-00142/manifest.json", + "bytes": 2212, + "lines": 26, + "tokens": 553 + }, + { + "path": "docs/status/M16-GAP-00142.md", + "bytes": 614, + "lines": 18, + "tokens": 154 + } + ], + "sourceTokens": 1685, + "evidenceFiles": 1, + "evidenceBytes": 2223, + "evidenceTokens": 556, + "totalTokens": 2241, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3265, + "serializedContextTokens": 747, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00144/action-stash-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00144/action-stash-desktop-report.json new file mode 100644 index 00000000..8b99eff3 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00144/action-stash-desktop-report.json @@ -0,0 +1,25 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00144-operator-action.stash.blend", + "fixtureSha256": "7d617c7e82a5673eedd2f48178a5991066a276a2c149f7be92c5f5975adc4234", + "nla": { + "activeAction": null, + "tracks": [ + { + "name": "[Action Stash]", + "strips": [ + { + "action": "WebGapStashObjectAction", + "frameEnd": 5.0, + "frameStart": 1.0, + "name": "WebGapStashObjectAction" + } + ] + } + ] + }, + "operation": "ACTION_STASH_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00144" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00144/action-stash-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00144/action-stash-local-exact-report.json new file mode 100644 index 00000000..ed89cb79 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00144/action-stash-local-exact-report.json @@ -0,0 +1,56 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00144", + "operation": "ACTION_STASH_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00144-operator-action.stash.blend", + "sha256": "7d617c7e82a5673eedd2f48178a5991066a276a2c149f7be92c5f5975adc4234" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00144/action-stash-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapStashObjectAction:object:WebGapStashObject", + "nlaTracks": [ + { + "id": "nla-track:object:WebGapStashObject:0", + "muted": true, + "name": "[Action Stash]", + "ownerId": "object:WebGapStashObject", + "schemaVersion": 1, + "selected": true, + "solo": false, + "strips": [ + { + "actionFrameEnd": 5, + "actionFrameStart": 1, + "actionId": "action:WebGapStashObjectAction:object:WebGapStashObject", + "blendIn": 0, + "blendMode": "REPLACE", + "blendOut": 0, + "extrapolation": "HOLD", + "frameEnd": 5, + "frameStart": 1, + "id": "WebGapStashObjectAction", + "influence": 0, + "muted": false, + "repeat": 1, + "reverse": false, + "scale": 1, + "selected": false, + "stripType": "CLIP", + "useTimeWarp": false + } + ] + } + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00145" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00144/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00144/manifest.json new file mode 100644 index 00000000..84baa860 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00144/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00144", + "parentTask": "M16-GAP-00143", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_STASH_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00143/manifest.json", "sha256": "3a9c08d6b0e17899165f7597919854e8c528028ba7879a25e4d33d659475ce34"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00144-operator-action.stash.blend", "sha256": "7d617c7e82a5673eedd2f48178a5991066a276a2c149f7be92c5f5975adc4234"}, + "generator": {"path": "tools/web/generated/M16-GAP-00144.py", "sha256": "66275fb985c801c659e063f2379d9154093550cb7d5916013332b88aa25dfbec"}, + "desktopChecker": {"path": "tools/web/check-action-stash-desktop.py", "sha256": "dca0ae7cc8914f9598a0638ff19d0c8a490efd794b9a6fde331d8e45306c97df"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "714be20b276ad1d4476e6e18f9533f75cdc730a0aade382ebf58ac5b912c6244"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00144/action-stash-desktop-report.json", "sha256": "c7b38407179b23e212f2fff6d34424b3c9f21e024f8ce936cae8f4a6746c4904"}, + "webReport": {"path": "tests/golden/M16-GAP-00144/action-stash-local-exact-report.json", "sha256": "0dd4d10207503d6ea41c2d630b137471587961ceaa26870132936c8c91a72752"}, + "taskContext": {"path": "tests/golden/M16-GAP-00144/task-context.json", "sha256": "45bc5f26682956126524444937f5af263c238b91d66f23f295a4bf37e49d42a2"} + }, + "nextTask": "M16-GAP-00145" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00144/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00144/task-context.json new file mode 100644 index 00000000..64db43f1 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00144/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00144", + "parentTask": "M16-GAP-00143", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:action.stash data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:action.stash", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00144.py -- tests/files/web/generated/M16-GAP-00144-operator-action.stash.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00144", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00144" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00144.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 3231, + "contextRemainingTokens": 806 + }, + "source": { + "bytes": 6673, + "tokens": 1670 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00144.py", + "bytes": 1848, + "tokens": 462 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00144-operator-action.stash.blend", + "bytes": 86955, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 224767, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 255063, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00144/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00144.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00144/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1848, + "tokens": 462 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00145", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00144.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00143/manifest.json", + "parentStatus": "docs/status/M16-GAP-00143.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00144.md", + "tests/golden/M16-GAP-00143/manifest.json", + "docs/status/M16-GAP-00143.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00143", + "parentTask": "M16-GAP-00142", + "status": "done", + "nextTask": "M16-GAP-00144", + "artifactCount": 12 + }, + "statusSummary": [ + "# M16-GAP-00143 Status", + "status: done", + "task: action.snap operator LOCAL_EXACT slice", + "updated: 2026-08-20 America/New_York", + "scope:", + "- Action Editor current-frame snapping on `object:WebGapSnapObject`, using `type=CFRA` at frame 4.", + "evidence:", + "- Blender desktop and WASM/Main expose matching location channels with keyframes `[1,4,5]` and frame 4 selected." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1749, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 438 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00144.md", + "bytes": 1749, + "lines": 38, + "tokens": 438 + }, + { + "path": "tests/golden/M16-GAP-00143/manifest.json", + "bytes": 2177, + "lines": 26, + "tokens": 545 + }, + { + "path": "docs/status/M16-GAP-00143.md", + "bytes": 579, + "lines": 18, + "tokens": 145 + } + ], + "sourceTokens": 1670, + "evidenceFiles": 1, + "evidenceBytes": 1848, + "evidenceTokens": 462, + "totalTokens": 2132, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3156, + "serializedContextTokens": 748, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00145/action-stash-and-create-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00145/action-stash-and-create-desktop-report.json new file mode 100644 index 00000000..780534d2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00145/action-stash-and-create-desktop-report.json @@ -0,0 +1,25 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00145-operator-action.stash_and_create.blend", + "fixtureSha256": "f7b2dc080c9aa23cc45b9a2c59114f23ce3f1369f00618c9ef51569516692f38", + "nla": { + "activeAction": "Action", + "tracks": [ + { + "name": "[Action Stash]", + "strips": [ + { + "action": "WebGapStashCreateObjectAction", + "frameEnd": 5.0, + "frameStart": 1.0, + "name": "WebGapStashCreateObjectAction" + } + ] + } + ] + }, + "operation": "ACTION_STASH_AND_CREATE_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00145" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00145/action-stash-and-create-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00145/action-stash-and-create-local-exact-report.json new file mode 100644 index 00000000..57a8e689 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00145/action-stash-and-create-local-exact-report.json @@ -0,0 +1,57 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00145", + "operation": "ACTION_STASH_AND_CREATE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00145-operator-action.stash_and_create.blend", + "sha256": "f7b2dc080c9aa23cc45b9a2c59114f23ce3f1369f00618c9ef51569516692f38" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00145/action-stash-and-create-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "activeActionId": null, + "stashedActionId": "action:WebGapStashCreateObjectAction:object:WebGapStashCreateObject", + "nlaTracks": [ + { + "id": "nla-track:object:WebGapStashCreateObject:0", + "muted": true, + "name": "[Action Stash]", + "ownerId": "object:WebGapStashCreateObject", + "schemaVersion": 1, + "selected": true, + "solo": false, + "strips": [ + { + "actionFrameEnd": 5, + "actionFrameStart": 1, + "actionId": "action:WebGapStashCreateObjectAction:object:WebGapStashCreateObject", + "blendIn": 0, + "blendMode": "REPLACE", + "blendOut": 0, + "extrapolation": "HOLD", + "frameEnd": 5, + "frameStart": 1, + "id": "WebGapStashCreateObjectAction", + "influence": 0, + "muted": false, + "repeat": 1, + "reverse": false, + "scale": 1, + "selected": false, + "stripType": "CLIP", + "useTimeWarp": false + } + ] + } + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00146" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00145/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00145/manifest.json new file mode 100644 index 00000000..7a9b82ee --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00145/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00145", + "parentTask": "M16-GAP-00144", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_STASH_AND_CREATE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00144/manifest.json", "sha256": "4727b5807db7269de9353110d51bc5d6e594202cc5cb72a91697cee3589e539b"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00145-operator-action.stash_and_create.blend", "sha256": "f7b2dc080c9aa23cc45b9a2c59114f23ce3f1369f00618c9ef51569516692f38"}, + "generator": {"path": "tools/web/generated/M16-GAP-00145.py", "sha256": "cbbc5b2e3e84ec8442c4acb065be91a6818ff7c1d2d92e7a0e13253696b8389d"}, + "desktopChecker": {"path": "tools/web/check-action-stash-and-create-desktop.py", "sha256": "5bb7d73a5be061df3d95ce46357a5b0f48e863be217a4677f25f33d31d960cd5"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "e9ef46b4772f94a6b4bba3d3c3c7142e162355846cd75239f9324a4cebbb5c3d"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00145/action-stash-and-create-desktop-report.json", "sha256": "05f9f233a10822b8de85e9b2070863d6f584e60123b4fc91e4d147a93e120df7"}, + "webReport": {"path": "tests/golden/M16-GAP-00145/action-stash-and-create-local-exact-report.json", "sha256": "2820c70ab69ad674d6bee5424fceb98062fc33b0e309de98d0fe092515f0f4ea"}, + "taskContext": {"path": "tests/golden/M16-GAP-00145/task-context.json", "sha256": "d785cecfb165f45ec6fcefe072c7cbed452e0ccb0ef6fba5fbf22b1b85224596"} + }, + "nextTask": "M16-GAP-00146" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00145/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00145/task-context.json new file mode 100644 index 00000000..668513f8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00145/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00145", + "parentTask": "M16-GAP-00144", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:action.stash_and_create data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:action.stash_and_create", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00145.py -- tests/files/web/generated/M16-GAP-00145-operator-action.stash_and_create.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00145", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00145" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00145.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 3199, + "contextRemainingTokens": 799 + }, + "source": { + "bytes": 6705, + "tokens": 1677 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00145.py", + "bytes": 1926, + "tokens": 482 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00145-operator-action.stash_and_create.blend", + "bytes": 87002, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 224767, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 258363, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00145/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00145.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00145/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1926, + "tokens": 482 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00146", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00145.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00144/manifest.json", + "parentStatus": "docs/status/M16-GAP-00144.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00145.md", + "tests/golden/M16-GAP-00144/manifest.json", + "docs/status/M16-GAP-00144.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00144", + "parentTask": "M16-GAP-00143", + "status": "done", + "nextTask": "M16-GAP-00145", + "artifactCount": 12 + }, + "statusSummary": [ + "# M16-GAP-00144 Status", + "status: done", + "task: action.stash operator LOCAL_EXACT slice", + "updated: 2026-08-20 America/New_York", + "scope:", + "- Action Editor Action stashing on `object:WebGapStashObject`.", + "evidence:", + "- Blender desktop and WASM/Main expose no active Action plus one NLA track containing one strip for the stashed Action." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1804, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 451 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00145.md", + "bytes": 1804, + "lines": 38, + "tokens": 451 + }, + { + "path": "tests/golden/M16-GAP-00144/manifest.json", + "bytes": 2182, + "lines": 26, + "tokens": 546 + }, + { + "path": "docs/status/M16-GAP-00144.md", + "bytes": 551, + "lines": 18, + "tokens": 138 + } + ], + "sourceTokens": 1677, + "evidenceFiles": 1, + "evidenceBytes": 1926, + "evidenceTokens": 482, + "totalTokens": 2159, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3183, + "serializedContextTokens": 756, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00146/action-unlink-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00146/action-unlink-desktop-report.json new file mode 100644 index 00000000..247877c0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00146/action-unlink-desktop-report.json @@ -0,0 +1,46 @@ +{ + "action": { + "activeAction": null, + "unlinkedAction": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location" + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location" + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location" + } + ], + "name": "WebGapActionUnlinkObjectAction", + "useFakeUser": true, + "users": 1 + } + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00146-operator-action.unlink.blend", + "fixtureSha256": "80d5a85825c441b1835e82af730df148dd664fbae988aabb9aab6e74ac605f11", + "operation": "ACTION_UNLINK_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00146" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00146/action-unlink-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00146/action-unlink-local-exact-report.json new file mode 100644 index 00000000..a0378efb --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00146/action-unlink-local-exact-report.json @@ -0,0 +1,30 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00146", + "operation": "ACTION_UNLINK_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00146-operator-action.unlink.blend", + "sha256": "80d5a85825c441b1835e82af730df148dd664fbae988aabb9aab6e74ac605f11" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00146/action-unlink-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapActionUnlinkObjectAction:unlinked", + "targetId": "unlinked", + "unlinked": true, + "keyframesPerChannel": [ + 3, + 3, + 3 + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00147" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00146/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00146/manifest.json new file mode 100644 index 00000000..6fada3f4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00146/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00146", + "parentTask": "M16-GAP-00145", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_UNLINK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00145/manifest.json", "sha256": "4fc29aed9ce6ef07732304b80483e2c4c7c0036e692b4705b6f0cb952fe04829"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00146-operator-action.unlink.blend", "sha256": "80d5a85825c441b1835e82af730df148dd664fbae988aabb9aab6e74ac605f11"}, + "generator": {"path": "tools/web/generated/M16-GAP-00146.py", "sha256": "ab4682dbd1e828f8f18d2bb0cc17ff6a795d364fefe5f0dadb88b74f55220638"}, + "desktopChecker": {"path": "tools/web/check-action-unlink-desktop.py", "sha256": "e0f244be5712faa8caaa094efdfefc69c5ffaa9cb4e7e1185414f3da35e239ae"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "4eb56bd2bd37d9c0fe5d9a82aa74a521cb8f958d04d108dcf81d1ab3947b306c"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "7682a90dc52034a663309705922bdefbc617644b9756f3e66228b442b7c75aa8"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "37784bb62b9da62f7db7a66d1dc009aa82a9123a2d07f0c26f524989395c907f"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "37784bb62b9da62f7db7a66d1dc009aa82a9123a2d07f0c26f524989395c907f"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00146/action-unlink-desktop-report.json", "sha256": "a328397950846c7ee22fc7d0ab5788eb5174a8296f79c70763f007274977f5b6"}, + "webReport": {"path": "tests/golden/M16-GAP-00146/action-unlink-local-exact-report.json", "sha256": "2190f23628b0b4ecb68a8c5aafb096e412c7fe5f654bad094686b0700c8e388c"}, + "taskContext": {"path": "tests/golden/M16-GAP-00146/task-context.json", "sha256": "5fe6424cd98d78ea065bb1fb0cd34bae92552171592698a48182d08b943a4c08"} + }, + "nextTask": "M16-GAP-00147" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00146/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00146/task-context.json new file mode 100644 index 00000000..d6a4e43a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00146/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00146", + "parentTask": "M16-GAP-00145", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:action.unlink data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:action.unlink", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00146.py -- tests/files/web/generated/M16-GAP-00146-operator-action.unlink.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00146", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00146" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00146.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 3177, + "contextRemainingTokens": 793 + }, + "source": { + "bytes": 6727, + "tokens": 1683 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00146.py", + "bytes": 2007, + "tokens": 502 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00146-operator-action.unlink.blend", + "bytes": 86881, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 225529, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 261657, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00146/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00146.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00146/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 2007, + "tokens": 502 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00147", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00146.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00145/manifest.json", + "parentStatus": "docs/status/M16-GAP-00145.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00146.md", + "tests/golden/M16-GAP-00145/manifest.json", + "docs/status/M16-GAP-00145.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00145", + "parentTask": "M16-GAP-00144", + "status": "done", + "nextTask": "M16-GAP-00146", + "artifactCount": 12 + }, + "statusSummary": [ + "# M16-GAP-00145 Status", + "status: done", + "task: action.stash_and_create operator LOCAL_EXACT slice", + "updated: 2026-08-20 America/New_York", + "scope:", + "- Action Editor stash-and-create on `object:WebGapStashCreateObject`.", + "evidence:", + "- Blender desktop and WASM/Main expose one NLA track/strip containing the stashed Action while active Action is empty." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1754, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 439 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00146.md", + "bytes": 1754, + "lines": 38, + "tokens": 439 + }, + { + "path": "tests/golden/M16-GAP-00145/manifest.json", + "bytes": 2237, + "lines": 26, + "tokens": 560 + }, + { + "path": "docs/status/M16-GAP-00145.md", + "bytes": 568, + "lines": 18, + "tokens": 142 + } + ], + "sourceTokens": 1683, + "evidenceFiles": 1, + "evidenceBytes": 2007, + "evidenceTokens": 502, + "totalTokens": 2185, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3209, + "serializedContextTokens": 749, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00147/action-view-all-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00147/action-view-all-desktop-report.json new file mode 100644 index 00000000..5c166fa1 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00147/action-view-all-desktop-report.json @@ -0,0 +1,27 @@ +{ + "action": { + "areaType": "DOPESHEET_EDITOR", + "uiMode": "ACTION", + "view2d": { + "cur": { + "xmax": 5.0, + "xmin": 1.0, + "ymax": 0.0, + "ymin": -380.0 + }, + "mask": { + "xmax": 1153, + "xmin": 0, + "ymax": 380, + "ymin": 0 + } + } + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00147-operator-action.view_all.blend", + "fixtureSha256": "ef2a4fd9a28a6a97d40b258beb11f8e00899c4715e0ba6e0703a25aecd678ec5", + "operation": "ACTION_VIEW_ALL_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00147" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00147/action-view-all-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00147/action-view-all-local-exact-report.json new file mode 100644 index 00000000..5128eec6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00147/action-view-all-local-exact-report.json @@ -0,0 +1,38 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00147", + "operation": "ACTION_VIEW_ALL_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00147-operator-action.view_all.blend", + "sha256": "ef2a4fd9a28a6a97d40b258beb11f8e00899c4715e0ba6e0703a25aecd678ec5" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00147/action-view-all-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "editor": "DOPE_SHEET", + "regionKind": "MAIN", + "view2d": { + "cur": { + "xmax": 5, + "xmin": 1, + "ymax": 0, + "ymin": -380 + }, + "mask": { + "xmax": 1153, + "xmin": 0, + "ymax": 380, + "ymin": 0 + } + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00148" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00147/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00147/manifest.json new file mode 100644 index 00000000..7aa93c3a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00147/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00147", + "parentTask": "M16-GAP-00146", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_VIEW_ALL_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00146/manifest.json", "sha256": "cfe6d9e8aeeeddbd080f6ee3dad941424c8434e7c6a09af2c84b634e9440a849"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00147-operator-action.view_all.blend", "sha256": "ef2a4fd9a28a6a97d40b258beb11f8e00899c4715e0ba6e0703a25aecd678ec5"}, + "generator": {"path": "tools/web/generated/M16-GAP-00147.py", "sha256": "738d70668b71d9be03b8aab088c9a71e82f102f97cc0435c58a19c6838566ca0"}, + "desktopChecker": {"path": "tools/web/check-action-view-all-desktop.py", "sha256": "67a1a212702db13b924daa567cabad7c117ea9627d43b07a7bd70243379b76eb"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "2d7cc16b93d3ac3ce786e4640ad66ca5ccbb22eb0b5bdd92dee60eb9b350f60f"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "4a1733632ae8418f0bc835c3b4a14b9d69985cb85b74faaca314fa48ec18fd0e"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00147/action-view-all-desktop-report.json", "sha256": "d1eb6d018b05f2f00d16498dea4d34d49f07ed4489f2ee0dabcf9409dd76deaf"}, + "webReport": {"path": "tests/golden/M16-GAP-00147/action-view-all-local-exact-report.json", "sha256": "f23dd5aae9e4f649c6f29ae6cc971d7e358386bc4cbdd3466e7a075f065f362c"}, + "taskContext": {"path": "tests/golden/M16-GAP-00147/task-context.json", "sha256": "f03fa466b214f882119db539bbd7e6f79da5b16624e61f067d217dfc2480ac33"} + }, + "nextTask": "M16-GAP-00148" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00147/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00147/task-context.json new file mode 100644 index 00000000..611fbd7a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00147/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00147", + "parentTask": "M16-GAP-00146", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:action.view_all data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:action.view_all", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00147.py -- tests/files/web/generated/M16-GAP-00147-operator-action.view_all.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00147", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00147" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00147.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 3111, + "contextRemainingTokens": 777 + }, + "source": { + "bytes": 6793, + "tokens": 1699 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00147.py", + "bytes": 2197, + "tokens": 550 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00147-operator-action.view_all.blend", + "bytes": 86846, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 227216, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 265282, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00147/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00147.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00147/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 2197, + "tokens": 550 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00148", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00147.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00146/manifest.json", + "parentStatus": "docs/status/M16-GAP-00146.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00147.md", + "tests/golden/M16-GAP-00146/manifest.json", + "docs/status/M16-GAP-00146.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00146", + "parentTask": "M16-GAP-00145", + "status": "done", + "nextTask": "M16-GAP-00147", + "artifactCount": 12 + }, + "statusSummary": [ + "# M16-GAP-00146 Status", + "status: done", + "task: action.unlink operator LOCAL_EXACT slice", + "updated: 2026-08-21 America/New_York", + "scope:", + "- Action Editor unlink on `WebGapActionUnlinkObject`.", + "evidence:", + "- Blender desktop reports no active Action while retaining the fake-user `WebGapActionUnlinkObjectAction` with three location channels." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1764, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 441 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00147.md", + "bytes": 1764, + "lines": 38, + "tokens": 441 + }, + { + "path": "tests/golden/M16-GAP-00146/manifest.json", + "bytes": 2187, + "lines": 26, + "tokens": 547 + }, + { + "path": "docs/status/M16-GAP-00146.md", + "bytes": 674, + "lines": 19, + "tokens": 169 + } + ], + "sourceTokens": 1699, + "evidenceFiles": 1, + "evidenceBytes": 2197, + "evidenceTokens": 550, + "totalTokens": 2249, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3273, + "serializedContextTokens": 750, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00148/action-view-frame-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00148/action-view-frame-desktop-report.json new file mode 100644 index 00000000..8107e101 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00148/action-view-frame-desktop-report.json @@ -0,0 +1,28 @@ +{ + "action": { + "areaType": "DOPESHEET_EDITOR", + "currentFrame": 3, + "uiMode": "ACTION", + "view2d": { + "cur": { + "xmax": 15.0, + "xmin": -9.0, + "ymax": 0.0, + "ymin": -956.0 + }, + "mask": { + "xmax": 1577, + "xmin": 0, + "ymax": 955, + "ymin": 0 + } + } + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00148-operator-action.view_frame.blend", + "fixtureSha256": "142f7036c4c1a196ae0affc43fd62d6a196576898ee969f9aa83655917e0960c", + "operation": "ACTION_VIEW_FRAME_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00148" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00148/action-view-frame-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00148/action-view-frame-local-exact-report.json new file mode 100644 index 00000000..edc5a851 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00148/action-view-frame-local-exact-report.json @@ -0,0 +1,39 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00148", + "operation": "ACTION_VIEW_FRAME_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00148-operator-action.view_frame.blend", + "sha256": "142f7036c4c1a196ae0affc43fd62d6a196576898ee969f9aa83655917e0960c" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00148/action-view-frame-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "editor": "DOPE_SHEET", + "regionKind": "MAIN", + "currentFrame": 3, + "view2d": { + "cur": { + "xmax": 15, + "xmin": -9, + "ymax": 0, + "ymin": -956 + }, + "mask": { + "xmax": 1577, + "xmin": 0, + "ymax": 955, + "ymin": 0 + } + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00149" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00148/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00148/manifest.json new file mode 100644 index 00000000..a24b690c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00148/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00148", + "parentTask": "M16-GAP-00147", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_VIEW_FRAME_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00147/manifest.json", "sha256": "451f1612a0addd34c1d8c3b074e0f72640f6e63105f158d89288db12ae714127"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00148-operator-action.view_frame.blend", "sha256": "142f7036c4c1a196ae0affc43fd62d6a196576898ee969f9aa83655917e0960c"}, + "generator": {"path": "tools/web/generated/M16-GAP-00148.py", "sha256": "7c21cdadfb8d08c2f44ba2e58d53f9c879773b488a53135bc3a9ad4ae96aa3d5"}, + "desktopChecker": {"path": "tools/web/check-action-view-frame-desktop.py", "sha256": "11a2b6c2d6d1bb5670a161a0db02a7f0b65392cc820d263bd21df15196d9a4cd"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "62bfd759d28ff59ec2ba4218ab11dcc910f1bdb13dfb400ff80a07639ec7c03e"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "4a1733632ae8418f0bc835c3b4a14b9d69985cb85b74faaca314fa48ec18fd0e"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00148/action-view-frame-desktop-report.json", "sha256": "1895f562b9d1a67164256dd47b40a9a0280f5c45f0f153184cde5d54afca2d63"}, + "webReport": {"path": "tests/golden/M16-GAP-00148/action-view-frame-local-exact-report.json", "sha256": "a5b4db975c15055bf295f72f5a52aeb66bfa5d81959dba303e89472ce92ff83a"}, + "taskContext": {"path": "tests/golden/M16-GAP-00148/task-context.json", "sha256": "52781cdba0dae2569088c7d80e4c5028cf1fefb5beb187dbd8f767d4b5122b32"} + }, + "nextTask": "M16-GAP-00149" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00148/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00148/task-context.json new file mode 100644 index 00000000..b6d70b45 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00148/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00148", + "parentTask": "M16-GAP-00147", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:action.view_frame data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:action.view_frame", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00148.py -- tests/files/web/generated/M16-GAP-00148-operator-action.view_frame.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00148", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00148" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00148.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 3201, + "contextRemainingTokens": 799 + }, + "source": { + "bytes": 6703, + "tokens": 1677 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00148.py", + "bytes": 2184, + "tokens": 546 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00148-operator-action.view_frame.blend", + "bytes": 87098, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 227216, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 268979, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00148/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00148.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00148/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 2184, + "tokens": 546 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00149", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00148.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00147/manifest.json", + "parentStatus": "docs/status/M16-GAP-00147.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00148.md", + "tests/golden/M16-GAP-00147/manifest.json", + "docs/status/M16-GAP-00147.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00147", + "parentTask": "M16-GAP-00146", + "status": "done", + "nextTask": "M16-GAP-00148", + "artifactCount": 12 + }, + "statusSummary": [ + "# M16-GAP-00147 Status", + "status: done", + "task: action.view_all operator LOCAL_EXACT slice", + "updated: 2026-08-21 America/New_York", + "scope:", + "- Action Editor `action.view_all` view state on the Animation workspace main region.", + "evidence:", + "- Blender desktop and WASM/Main expose the same Action Editor `view2d.cur` and mask after `action.view_all`." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1774, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 444 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00148.md", + "bytes": 1774, + "lines": 38, + "tokens": 444 + }, + { + "path": "tests/golden/M16-GAP-00147/manifest.json", + "bytes": 2197, + "lines": 26, + "tokens": 550 + }, + { + "path": "docs/status/M16-GAP-00147.md", + "bytes": 564, + "lines": 18, + "tokens": 141 + } + ], + "sourceTokens": 1677, + "evidenceFiles": 1, + "evidenceBytes": 2184, + "evidenceTokens": 546, + "totalTokens": 2223, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3247, + "serializedContextTokens": 752, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00149/action-view-selected-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00149/action-view-selected-desktop-report.json new file mode 100644 index 00000000..296e2c1f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00149/action-view-selected-desktop-report.json @@ -0,0 +1,71 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location", + "selected": [ + false, + true, + false + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location", + "selected": [ + false, + true, + false + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location", + "selected": [ + false, + true, + false + ] + } + ], + "name": "WebGapActionViewSelectedObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00149-operator-action.view_selected.blend", + "fixtureSha256": "108a69ae276722c4d9396deb51f7f1909799d48ce310d82675305a59b1196fc7", + "operation": "ACTION_VIEW_SELECTED_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "selectedFrame": 3, + "task": "M16-GAP-00149", + "view2d": { + "cur": { + "xmax": 5.0, + "xmin": 1.0, + "ymax": 0.0, + "ymin": -956.0 + }, + "mask": { + "xmax": 1577, + "xmin": 0, + "ymax": 955, + "ymin": 0 + } + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00149/action-view-selected-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00149/action-view-selected-local-exact-report.json new file mode 100644 index 00000000..6b197abc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00149/action-view-selected-local-exact-report.json @@ -0,0 +1,49 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00149", + "operation": "ACTION_VIEW_SELECTED_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00149-operator-action.view_selected.blend", + "sha256": "108a69ae276722c4d9396deb51f7f1909799d48ce310d82675305a59b1196fc7" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00149/action-view-selected-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapActionViewSelectedObjectAction:object:WebGapActionViewSelectedObject", + "selectedFrame": 3, + "selectedPerChannel": [ + [ + 3 + ], + [ + 3 + ], + [ + 3 + ] + ], + "view2d": { + "cur": { + "xmax": 5, + "xmin": 1, + "ymax": 0, + "ymin": -956 + }, + "mask": { + "xmax": 1577, + "xmin": 0, + "ymax": 955, + "ymin": 0 + } + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00150" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00149/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00149/manifest.json new file mode 100644 index 00000000..20540798 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00149/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00149", + "parentTask": "M16-GAP-00148", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ACTION_VIEW_SELECTED_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00148/manifest.json", "sha256": "fd9d80e817a424f0d37e88f182597a8b94a3b858c934def0ffa116047cc907df"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00149-operator-action.view_selected.blend", "sha256": "108a69ae276722c4d9396deb51f7f1909799d48ce310d82675305a59b1196fc7"}, + "generator": {"path": "tools/web/generated/M16-GAP-00149.py", "sha256": "9d7d4a10fb148fe40a1f624886491d64c9dde1bf86cdf21a97c86ec167f7cb92"}, + "desktopChecker": {"path": "tools/web/check-action-view-selected-desktop.py", "sha256": "fa74311b3ca77b04212ed894c0511fcab7489cff781fc934177ce4e40a139647"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "a614499ad09c9dc94a751141733e91613a5dc070edae2ad76f2c9fb37220f0db"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "4a1733632ae8418f0bc835c3b4a14b9d69985cb85b74faaca314fa48ec18fd0e"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00149/action-view-selected-desktop-report.json", "sha256": "002328f69d528d49570dda4976ea7ae0bb9229fa84f8a3bb1b5b6e3cc061a188"}, + "webReport": {"path": "tests/golden/M16-GAP-00149/action-view-selected-local-exact-report.json", "sha256": "6d2e450cece242a95b9b861292d74654ec7a8e3f191364a64c2c9b809a7e0bb4"}, + "taskContext": {"path": "tests/golden/M16-GAP-00149/task-context.json", "sha256": "da34e2c587ec836b745ae0d69dc27b75c77ce17a73d18c223ac817e9365e29c7"} + }, + "nextTask": "M16-GAP-00150" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00149/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00149/task-context.json new file mode 100644 index 00000000..12c46573 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00149/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00149", + "parentTask": "M16-GAP-00148", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:action.view_selected data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:action.view_selected", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00149.py -- tests/files/web/generated/M16-GAP-00149-operator-action.view_selected.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00149", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00149" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00149.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 3172, + "contextRemainingTokens": 792 + }, + "source": { + "bytes": 6732, + "tokens": 1684 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00149.py", + "bytes": 2517, + "tokens": 630 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00149-operator-action.view_selected.blend", + "bytes": 87111, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 227216, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 273145, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00149/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00149.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00149/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 2517, + "tokens": 630 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00150", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00149.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00148/manifest.json", + "parentStatus": "docs/status/M16-GAP-00148.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00149.md", + "tests/golden/M16-GAP-00148/manifest.json", + "docs/status/M16-GAP-00148.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00148", + "parentTask": "M16-GAP-00147", + "status": "done", + "nextTask": "M16-GAP-00149", + "artifactCount": 12 + }, + "statusSummary": [ + "# M16-GAP-00148 Status", + "status: done", + "task: action.view_frame operator LOCAL_EXACT slice", + "updated: 2026-08-21 America/New_York", + "scope:", + "- Action Editor `action.view_frame` centering around current frame 3.", + "evidence:", + "- Blender desktop and WASM/Main expose the same Action Editor `view2d.cur` and mask around current frame 3." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1789, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 448 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00149.md", + "bytes": 1789, + "lines": 38, + "tokens": 448 + }, + { + "path": "tests/golden/M16-GAP-00148/manifest.json", + "bytes": 2207, + "lines": 26, + "tokens": 552 + }, + { + "path": "docs/status/M16-GAP-00148.md", + "bytes": 568, + "lines": 18, + "tokens": 142 + } + ], + "sourceTokens": 1684, + "evidenceFiles": 1, + "evidenceBytes": 2517, + "evidenceTokens": 630, + "totalTokens": 2314, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3338, + "serializedContextTokens": 754, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00150/anim-change-frame-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00150/anim-change-frame-desktop-report.json new file mode 100644 index 00000000..b2ef106b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00150/anim-change-frame-desktop-report.json @@ -0,0 +1,58 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location", + "selected": [ + true, + true, + true + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location", + "selected": [ + true, + true, + true + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location", + "selected": [ + true, + true, + true + ] + } + ], + "name": "WebGapAnimChangeFrameObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "changedToFrame": 4, + "currentFrame": 4, + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00150-operator-anim.change_frame.blend", + "fixtureSha256": "04ba48b6b81449b47cd8c038a012518f773dbfbe542ec29861686cf9a1a0cedb", + "operation": "ANIM_CHANGE_FRAME_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00150" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00150/anim-change-frame-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00150/anim-change-frame-local-exact-report.json new file mode 100644 index 00000000..1d2425a6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00150/anim-change-frame-local-exact-report.json @@ -0,0 +1,41 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00150", + "operation": "ANIM_CHANGE_FRAME_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00150-operator-anim.change_frame.blend", + "sha256": "04ba48b6b81449b47cd8c038a012518f773dbfbe542ec29861686cf9a1a0cedb" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00150/anim-change-frame-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapAnimChangeFrameObjectAction:object:WebGapAnimChangeFrameObject", + "changedToFrame": 4, + "framesPerChannel": [ + [ + 1, + 3, + 5 + ], + [ + 1, + 3, + 5 + ], + [ + 1, + 3, + 5 + ] + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00151" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00150/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00150/manifest.json new file mode 100644 index 00000000..208adde3 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00150/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00150", + "parentTask": "M16-GAP-00149", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANGE_FRAME_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00149/manifest.json", "sha256": "b39fe0194d94b7cb54e8ca62b51d0d58fc7f82c1ab06122ab8ab74ca79ce6f8d"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00150-operator-anim.change_frame.blend", "sha256": "04ba48b6b81449b47cd8c038a012518f773dbfbe542ec29861686cf9a1a0cedb"}, + "generator": {"path": "tools/web/generated/M16-GAP-00150.py", "sha256": "582a5e470a2b47095762ddd6df93ff8ffe8a67ea45aa2b483f87528a9ca7180c"}, + "desktopChecker": {"path": "tools/web/check-action-change-frame-desktop.py", "sha256": "18fcc3ea0f0cf7a503651791d283852b4ae0b219339258880351837a59726327"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "b738ecac1c2402e1b60c681d395e7ad6a9769c1151c91a8d720daaf63891099b"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "4a1733632ae8418f0bc835c3b4a14b9d69985cb85b74faaca314fa48ec18fd0e"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00150/anim-change-frame-desktop-report.json", "sha256": "b0367cd339a51049f1eb511875c0beee269439694f99c2ee69513d71a5cd5453"}, + "webReport": {"path": "tests/golden/M16-GAP-00150/anim-change-frame-local-exact-report.json", "sha256": "358a97f75cf727ba385434f4e42c9e2857d046131fa15d1460f60eba68c72288"}, + "taskContext": {"path": "tests/golden/M16-GAP-00150/task-context.json", "sha256": "f3e8a8d194110019633496b55623589f1d13c8c3f062ec1c03aac023276a50c3"} + }, + "nextTask": "M16-GAP-00151" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00150/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00150/task-context.json new file mode 100644 index 00000000..7769a765 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00150/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00150", + "parentTask": "M16-GAP-00149", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.change_frame data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.change_frame", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00150.py -- tests/files/web/generated/M16-GAP-00150-operator-anim.change_frame.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00150", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00150" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00150.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 3140, + "contextRemainingTokens": 784 + }, + "source": { + "bytes": 6764, + "tokens": 1692 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00150.py", + "bytes": 2130, + "tokens": 533 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00150-operator-anim.change_frame.blend", + "bytes": 87111, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 227216, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 276688, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00150/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00150.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00150/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 2130, + "tokens": 533 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00151", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00150.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00149/manifest.json", + "parentStatus": "docs/status/M16-GAP-00149.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00150.md", + "tests/golden/M16-GAP-00149/manifest.json", + "docs/status/M16-GAP-00149.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00149", + "parentTask": "M16-GAP-00148", + "status": "done", + "nextTask": "M16-GAP-00150", + "artifactCount": 12 + }, + "statusSummary": [ + "# M16-GAP-00149 Status", + "status: done", + "task: action.view_selected operator LOCAL_EXACT slice", + "updated: 2026-08-21 America/New_York", + "scope:", + "- Action Editor `action.view_selected` selection and view state around selected frame 3.", + "evidence:", + "- Blender desktop and WASM/Main expose the same Action Editor selection on frame 3 for all three location channels and the same `view2d.cur` and mask." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1774, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 444 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00150.md", + "bytes": 1774, + "lines": 38, + "tokens": 444 + }, + { + "path": "tests/golden/M16-GAP-00149/manifest.json", + "bytes": 2222, + "lines": 26, + "tokens": 556 + }, + { + "path": "docs/status/M16-GAP-00149.md", + "bytes": 600, + "lines": 18, + "tokens": 150 + } + ], + "sourceTokens": 1692, + "evidenceFiles": 1, + "evidenceBytes": 2130, + "evidenceTokens": 533, + "totalTokens": 2225, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3249, + "serializedContextTokens": 752, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00151/anim-channel-select-keys-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00151/anim-channel-select-keys-desktop-report.json new file mode 100644 index 00000000..2b4a7442 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00151/anim-channel-select-keys-desktop-report.json @@ -0,0 +1,60 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location", + "selected": [ + true, + true, + true + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location", + "selected": [ + false, + false, + false + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location", + "selected": [ + false, + false, + false + ] + } + ], + "name": "WebGapAnimChannelSelectKeysObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00151-operator-anim.channel_select_keys.blend", + "fixtureSha256": "f8ed4706c765c28e850c752bf4fc367b815c298b574cbed741997a5770826b43", + "operation": "ANIM_CHANNEL_SELECT_KEYS_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "selectedChannel": { + "index": 0, + "path": "location" + }, + "task": "M16-GAP-00151" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00151/anim-channel-select-keys-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00151/anim-channel-select-keys-local-exact-report.json new file mode 100644 index 00000000..1af73157 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00151/anim-channel-select-keys-local-exact-report.json @@ -0,0 +1,36 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00151", + "operation": "ANIM_CHANNEL_SELECT_KEYS_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00151-operator-anim.channel_select_keys.blend", + "sha256": "f8ed4706c765c28e850c752bf4fc367b815c298b574cbed741997a5770826b43" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00151/anim-channel-select-keys-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapAnimChannelSelectKeysObjectAction:object:WebGapAnimChannelSelectKeysObject", + "selectedChannel": { + "path": "location", + "index": 0 + }, + "selectedPerChannel": [ + [ + 1, + 3, + 5 + ], + [], + [] + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00152" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00151/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00151/manifest.json new file mode 100644 index 00000000..70cffa05 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00151/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00151", + "parentTask": "M16-GAP-00150", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNEL_SELECT_KEYS_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00150/manifest.json", "sha256": "a60ed9301159ae403d345cf7d97e30fc3a0edca948022d3961f0a40c1fb015ef"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00151-operator-anim.channel_select_keys.blend", "sha256": "f8ed4706c765c28e850c752bf4fc367b815c298b574cbed741997a5770826b43"}, + "generator": {"path": "tools/web/generated/M16-GAP-00151.py", "sha256": "6ac3acd4031a4dc3967d1f49546148fb45854ca1caa3c0569b7246d996cf06a1"}, + "desktopChecker": {"path": "tools/web/check-action-channel-select-keys-desktop.py", "sha256": "5d09b95946aa6f7a754cfcd60259e14d388ecc98f4aca0fcb651bc99fabf292f"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "24a2928dca8a3397d40caa22d74bac94dc63e365aa140babc1b183f658a7603c"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "4a1733632ae8418f0bc835c3b4a14b9d69985cb85b74faaca314fa48ec18fd0e"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00151/anim-channel-select-keys-desktop-report.json", "sha256": "f71376397c83a380252e3e69a4f295153f2e46a7be0bf1de4871605bf0bec16f"}, + "webReport": {"path": "tests/golden/M16-GAP-00151/anim-channel-select-keys-local-exact-report.json", "sha256": "225fa87a2cfe47daee71149a1a2122ff9d9f80a602b48ff64bd11b0edf4dcc51"}, + "taskContext": {"path": "tests/golden/M16-GAP-00151/task-context.json", "sha256": "73e8f89962ce32d7446fe7a61cdaab43105628ca0661b840e93db8236b8691b6"} + }, + "nextTask": "M16-GAP-00152" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00151/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00151/task-context.json new file mode 100644 index 00000000..30307a9b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00151/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00151", + "parentTask": "M16-GAP-00150", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.channel_select_keys data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.channel_select_keys", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00151.py -- tests/files/web/generated/M16-GAP-00151-operator-anim.channel_select_keys.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00151", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00151" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00151.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 3147, + "contextRemainingTokens": 785 + }, + "source": { + "bytes": 6757, + "tokens": 1691 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00151.py", + "bytes": 2883, + "tokens": 721 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00151-operator-anim.channel_select_keys.blend", + "bytes": 87099, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 227216, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 280147, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00151/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00151.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00151/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 2883, + "tokens": 721 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00152", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00151.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00150/manifest.json", + "parentStatus": "docs/status/M16-GAP-00150.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00151.md", + "tests/golden/M16-GAP-00150/manifest.json", + "docs/status/M16-GAP-00150.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00150", + "parentTask": "M16-GAP-00149", + "status": "done", + "nextTask": "M16-GAP-00151", + "artifactCount": 12 + }, + "statusSummary": [ + "# M16-GAP-00150 Status", + "status: done", + "task: anim.change_frame operator LOCAL_EXACT slice", + "updated: 2026-08-21 America/New_York", + "scope:", + "- Animation Editor `anim.change_frame` moves the current frame to 4 for a minimal animated object.", + "evidence:", + "- Blender desktop and WASM/Main expose the same current frame 4 and three Action channels with frames 1, 3, and 5." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1809, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 453 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00151.md", + "bytes": 1809, + "lines": 38, + "tokens": 453 + }, + { + "path": "tests/golden/M16-GAP-00150/manifest.json", + "bytes": 2209, + "lines": 26, + "tokens": 553 + }, + { + "path": "docs/status/M16-GAP-00150.md", + "bytes": 571, + "lines": 18, + "tokens": 143 + } + ], + "sourceTokens": 1691, + "evidenceFiles": 1, + "evidenceBytes": 2883, + "evidenceTokens": 721, + "totalTokens": 2412, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3436, + "serializedContextTokens": 757, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00152/anim-channel-view-pick-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00152/anim-channel-view-pick-desktop-report.json new file mode 100644 index 00000000..51dd6c5b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00152/anim-channel-view-pick-desktop-report.json @@ -0,0 +1,55 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location" + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location" + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location" + } + ], + "name": "WebGapAnimChannelViewPickObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00152-operator-anim.channel_view_pick.blend", + "fixtureSha256": "e3a0c3158f43b96f05006d54b451614754d0fca9a07fbcc3b1c9cc3a4e076d29", + "operation": "ANIM_CHANNEL_VIEW_PICK_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00152", + "view2d": { + "cur": { + "xmax": 5.0, + "xmin": 1.0, + "ymax": 0.0, + "ymin": -955.0 + }, + "mask": { + "xmax": 1577, + "xmin": 0, + "ymax": 955, + "ymin": 0 + } + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00152/anim-channel-view-pick-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00152/anim-channel-view-pick-local-exact-report.json new file mode 100644 index 00000000..eb572ec9 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00152/anim-channel-view-pick-local-exact-report.json @@ -0,0 +1,39 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00152", + "operation": "ANIM_CHANNEL_VIEW_PICK_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00152-operator-anim.channel_view_pick.blend", + "sha256": "e3a0c3158f43b96f05006d54b451614754d0fca9a07fbcc3b1c9cc3a4e076d29" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00152/anim-channel-view-pick-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapAnimChannelViewPickObjectAction:object:WebGapAnimChannelViewPickObject", + "editor": "DOPE_SHEET", + "regionKind": "MAIN", + "view2d": { + "cur": { + "xmax": 5, + "xmin": 1, + "ymax": 0, + "ymin": -955 + }, + "mask": { + "xmax": 1577, + "xmin": 0, + "ymax": 955, + "ymin": 0 + } + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00153" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00152/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00152/manifest.json new file mode 100644 index 00000000..993b05f5 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00152/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00152", + "parentTask": "M16-GAP-00151", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNEL_VIEW_PICK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00151/manifest.json", "sha256": "6607d5f2f8af37d9f9228ea416889bec0d3d8d6c04cc3bb46999858dac018f2e"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00152-operator-anim.channel_view_pick.blend", "sha256": "e3a0c3158f43b96f05006d54b451614754d0fca9a07fbcc3b1c9cc3a4e076d29"}, + "generator": {"path": "tools/web/generated/M16-GAP-00152.py", "sha256": "dc920602484d5b9d90b714de6044c5687f9001fd601170de87019ed194941284"}, + "desktopChecker": {"path": "tools/web/check-action-channel-view-pick-desktop.py", "sha256": "2b2c904295211cdcf7689cdda060eed9856338c4295a84e0d74da862bee719a9"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "beeca4b0a0cac130fb2a054be95dad2d6bbf5d7fdcc228e7ba98f080c9c44686"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "4a1733632ae8418f0bc835c3b4a14b9d69985cb85b74faaca314fa48ec18fd0e"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00152/anim-channel-view-pick-desktop-report.json", "sha256": "e8ddb6bb82386a4c93fb2525ac8c76b965034f827d28c0caa7c2df349833dc7c"}, + "webReport": {"path": "tests/golden/M16-GAP-00152/anim-channel-view-pick-local-exact-report.json", "sha256": "813990cb73567d995b784e23f47b7493f6bd3da83278ba86e4161044bfb98b8b"}, + "taskContext": {"path": "tests/golden/M16-GAP-00152/task-context.json", "sha256": "c2f0b3acf3ac531ec577583e204e75d15a41f12f3c00b5d7326fe85da4e68547"} + }, + "nextTask": "M16-GAP-00153" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00152/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00152/task-context.json new file mode 100644 index 00000000..eb359fdd --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00152/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00152", + "parentTask": "M16-GAP-00151", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.channel_view_pick data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.channel_view_pick", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00152.py -- tests/files/web/generated/M16-GAP-00152-operator-anim.channel_view_pick.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00152", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00152" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00152.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 3101, + "contextRemainingTokens": 775 + }, + "source": { + "bytes": 6803, + "tokens": 1701 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00152.py", + "bytes": 2474, + "tokens": 619 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00152-operator-anim.channel_view_pick.blend", + "bytes": 87117, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 227216, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 283973, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00152/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00152.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00152/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 2474, + "tokens": 619 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00153", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00152.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00151/manifest.json", + "parentStatus": "docs/status/M16-GAP-00151.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00152.md", + "tests/golden/M16-GAP-00151/manifest.json", + "docs/status/M16-GAP-00151.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00151", + "parentTask": "M16-GAP-00150", + "status": "done", + "nextTask": "M16-GAP-00152", + "artifactCount": 12 + }, + "statusSummary": [ + "# M16-GAP-00151 Status", + "status: done", + "task: anim.channel_select_keys operator LOCAL_EXACT slice", + "updated: 2026-08-21 America/New_York", + "scope:", + "- Action Editor `anim.channel_select_keys` selects all keys on the first location channel.", + "evidence:", + "- Blender desktop and WASM/Main expose the same selection: location index 0 at frames 1, 3, and 5; the other channels remain unselected." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1799, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 450 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00152.md", + "bytes": 1799, + "lines": 38, + "tokens": 450 + }, + { + "path": "tests/golden/M16-GAP-00151/manifest.json", + "bytes": 2244, + "lines": 26, + "tokens": 561 + }, + { + "path": "docs/status/M16-GAP-00151.md", + "bytes": 592, + "lines": 18, + "tokens": 148 + } + ], + "sourceTokens": 1701, + "evidenceFiles": 1, + "evidenceBytes": 2474, + "evidenceTokens": 619, + "totalTokens": 2320, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3344, + "serializedContextTokens": 756, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00153/anim-channels-bake-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00153/anim-channels-bake-desktop-report.json new file mode 100644 index 00000000..6a272a73 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00153/anim-channels-bake-desktop-report.json @@ -0,0 +1,52 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 2.0, + 3.0, + 4.0, + 5.0 + ], + "index": 0, + "path": "location" + }, + { + "frames": [ + 1.0, + 2.0, + 3.0, + 4.0, + 5.0 + ], + "index": 1, + "path": "location" + }, + { + "frames": [ + 1.0, + 2.0, + 3.0, + 4.0, + 5.0 + ], + "index": 2, + "path": "location" + } + ], + "name": "WebGapAnimChannelsBakeObjectAction" + }, + "bakeRange": [ + 1, + 5 + ], + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00153-operator-anim.channels_bake.blend", + "fixtureSha256": "1818a2a90d3eea5b38ad4d6e3cb1bd0394022ca62a8384734cefc36305d884eb", + "operation": "ANIM_CHANNELS_BAKE_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "step": 1.0, + "task": "M16-GAP-00153" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00153/anim-channels-bake-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00153/anim-channels-bake-local-exact-report.json new file mode 100644 index 00000000..820ef5a4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00153/anim-channels-bake-local-exact-report.json @@ -0,0 +1,51 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00153", + "operation": "ANIM_CHANNELS_BAKE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00153-operator-anim.channels_bake.blend", + "sha256": "1818a2a90d3eea5b38ad4d6e3cb1bd0394022ca62a8384734cefc36305d884eb" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00153/anim-channels-bake-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapAnimChannelsBakeObjectAction:object:WebGapAnimChannelsBakeObject", + "bakeRange": [ + 1, + 5 + ], + "step": 1, + "framesPerChannel": [ + [ + 1, + 2, + 3, + 4, + 5 + ], + [ + 1, + 2, + 3, + 4, + 5 + ], + [ + 1, + 2, + 3, + 4, + 5 + ] + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00154" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00153/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00153/manifest.json new file mode 100644 index 00000000..f512361c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00153/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00153", + "parentTask": "M16-GAP-00152", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_BAKE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00152/manifest.json", "sha256": "8f13a4a4da0827dece7e371690d9c451203a6de4b909665c1a113a15b7ee68d2"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00153-operator-anim.channels_bake.blend", "sha256": "1818a2a90d3eea5b38ad4d6e3cb1bd0394022ca62a8384734cefc36305d884eb"}, + "generator": {"path": "tools/web/generated/M16-GAP-00153.py", "sha256": "a1dba3b7bd0b5011eb2867f12428b89b9d76b103ebe6109e78c9711dfc0596de"}, + "desktopChecker": {"path": "tools/web/check-action-channels-bake-desktop.py", "sha256": "87eccc9a6dd652d94cbe49e771937c39d223765ca7658e239e99017356613a2c"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "1aeef2ac3cfcf702f568886265840aff4b528a8082cd81a95de3870bd4944c4f"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "4a1733632ae8418f0bc835c3b4a14b9d69985cb85b74faaca314fa48ec18fd0e"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00153/anim-channels-bake-desktop-report.json", "sha256": "bcc459445eb7da0b2898302b72b726cd128572a25c23012dc7dfee9b03d945a6"}, + "webReport": {"path": "tests/golden/M16-GAP-00153/anim-channels-bake-local-exact-report.json", "sha256": "517f2a16e4a3a46e52709c58987e940d1c07235adc8c4c9d6401363173c7d09b"}, + "taskContext": {"path": "tests/golden/M16-GAP-00153/task-context.json", "sha256": "076fcdce0aaede9f992ce804e4e2cabbc2bbc69a0316038bba6880704933d26d"} + }, + "nextTask": "M16-GAP-00154" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00153/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00153/task-context.json new file mode 100644 index 00000000..e29403cc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00153/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00153", + "parentTask": "M16-GAP-00152", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.channels_bake data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.channels_bake", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00153.py -- tests/files/web/generated/M16-GAP-00153-operator-anim.channels_bake.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00153", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00153" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00153.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 3167, + "contextRemainingTokens": 791 + }, + "source": { + "bytes": 6737, + "tokens": 1685 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00153.py", + "bytes": 2235, + "tokens": 559 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00153-operator-anim.channels_bake.blend", + "bytes": 87182, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 227216, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 287254, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00153/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00153.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00153/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 2235, + "tokens": 559 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00154", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00153.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00152/manifest.json", + "parentStatus": "docs/status/M16-GAP-00152.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00153.md", + "tests/golden/M16-GAP-00152/manifest.json", + "docs/status/M16-GAP-00152.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00152", + "parentTask": "M16-GAP-00151", + "status": "done", + "nextTask": "M16-GAP-00153", + "artifactCount": 12 + }, + "statusSummary": [ + "# M16-GAP-00152 Status", + "status: done", + "task: anim.channel_view_pick operator LOCAL_EXACT slice", + "updated: 2026-08-21 America/New_York", + "scope:", + "- Action Editor `anim.channel_view_pick` frames the shared location-channel range.", + "evidence:", + "- Blender desktop and WASM/Main expose the same Action Editor `view2d.cur` and mask around frames 1 through 5." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1779, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 445 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00153.md", + "bytes": 1779, + "lines": 38, + "tokens": 445 + }, + { + "path": "tests/golden/M16-GAP-00152/manifest.json", + "bytes": 2234, + "lines": 26, + "tokens": 559 + }, + { + "path": "docs/status/M16-GAP-00152.md", + "bytes": 556, + "lines": 18, + "tokens": 139 + } + ], + "sourceTokens": 1685, + "evidenceFiles": 1, + "evidenceBytes": 2235, + "evidenceTokens": 559, + "totalTokens": 2244, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3268, + "serializedContextTokens": 753, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00154/anim-channels-clean-empty-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00154/anim-channels-clean-empty-desktop-report.json new file mode 100644 index 00000000..6005fb14 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00154/anim-channels-clean-empty-desktop-report.json @@ -0,0 +1,42 @@ +{ + "blenderVersion": "5.2.0 LTS", + "emptyAnimDataRemoved": true, + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00154-operator-anim.channels_clean_empty.blend", + "fixtureSha256": "8e1c2b7578c3679a5c1ad63aef3a621f7a6f8c486598c936076a81fc19728c7a", + "keepAction": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location" + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location" + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location" + } + ], + "name": "WebGapAnimChannelsCleanKeepObjectAction" + }, + "operation": "ANIM_CHANNELS_CLEAN_EMPTY_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00154" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00154/anim-channels-clean-empty-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00154/anim-channels-clean-empty-local-exact-report.json new file mode 100644 index 00000000..651d9daf --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00154/anim-channels-clean-empty-local-exact-report.json @@ -0,0 +1,41 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00154", + "operation": "ANIM_CHANNELS_CLEAN_EMPTY_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00154-operator-anim.channels_clean_empty.blend", + "sha256": "8e1c2b7578c3679a5c1ad63aef3a621f7a6f8c486598c936076a81fc19728c7a" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00154/anim-channels-clean-empty-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapAnimChannelsCleanKeepObjectAction:object:WebGapAnimChannelsCleanKeepObject", + "emptyAnimDataRemoved": true, + "keepFramesPerChannel": [ + [ + 1, + 3, + 5 + ], + [ + 1, + 3, + 5 + ], + [ + 1, + 3, + 5 + ] + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00155" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00154/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00154/manifest.json new file mode 100644 index 00000000..1b82254a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00154/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00154", + "parentTask": "M16-GAP-00153", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_CLEAN_EMPTY_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00153/manifest.json", "sha256": "6d06064ba97203528fdfbc6cd6acc769e1cf86eb7a03a4c8ea55fa15837da941"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00154-operator-anim.channels_clean_empty.blend", "sha256": "8e1c2b7578c3679a5c1ad63aef3a621f7a6f8c486598c936076a81fc19728c7a"}, + "generator": {"path": "tools/web/generated/M16-GAP-00154.py", "sha256": "0deaaa7054c65927a2cdd8c5ebbce257ea05a0b81e0c4df98d6cca559553af0d"}, + "desktopChecker": {"path": "tools/web/check-action-channels-clean-empty-desktop.py", "sha256": "f6a8ef3666d4672e53d9678c3d9f0dd0f9ee92f9d05e4078f81555a9ea047d20"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "8ae5d6c9722df240a474dde37ec8f9a783eb12326e86a372090a7b35987b4643"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "4a1733632ae8418f0bc835c3b4a14b9d69985cb85b74faaca314fa48ec18fd0e"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00154/anim-channels-clean-empty-desktop-report.json", "sha256": "592c8f75f00e03e0af3f8cc6de4b9b681ab2d1c5546826d363a01be41e498848"}, + "webReport": {"path": "tests/golden/M16-GAP-00154/anim-channels-clean-empty-local-exact-report.json", "sha256": "ec0ae1e60911edfaee779d6ed6c52fb5965d7b182534e1864c27aaaaeb1a7795"}, + "taskContext": {"path": "tests/golden/M16-GAP-00154/task-context.json", "sha256": "e03fd089cd8874792ee9c5aeaf32843742f0522ad71f47c12c1e5ef674c4352c"} + }, + "nextTask": "M16-GAP-00155" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00154/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00154/task-context.json new file mode 100644 index 00000000..8749932c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00154/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00154", + "parentTask": "M16-GAP-00153", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.channels_clean_empty data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.channels_clean_empty", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00154.py -- tests/files/web/generated/M16-GAP-00154-operator-anim.channels_clean_empty.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00154", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00154" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00154.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 3134, + "contextRemainingTokens": 782 + }, + "source": { + "bytes": 6770, + "tokens": 1694 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00154.py", + "bytes": 3020, + "tokens": 755 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00154-operator-anim.channels_clean_empty.blend", + "bytes": 87446, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 227216, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 290653, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00154/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00154.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00154/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 3020, + "tokens": 755 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00155", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00154.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00153/manifest.json", + "parentStatus": "docs/status/M16-GAP-00153.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00154.md", + "tests/golden/M16-GAP-00153/manifest.json", + "docs/status/M16-GAP-00153.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00153", + "parentTask": "M16-GAP-00152", + "status": "done", + "nextTask": "M16-GAP-00154", + "artifactCount": 12 + }, + "statusSummary": [ + "# M16-GAP-00153 Status", + "status: done", + "task: anim.channels_bake operator LOCAL_EXACT slice", + "updated: 2026-08-21 America/New_York", + "scope:", + "- Action Editor `anim.channels_bake` bakes selected location channels over scene frames 1 through 5 at step 1.", + "evidence:", + "- Blender desktop and WASM/Main expose identical 1, 2, 3, 4, 5 keyframes on all three location channels." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1814, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 454 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00154.md", + "bytes": 1814, + "lines": 38, + "tokens": 454 + }, + { + "path": "tests/golden/M16-GAP-00153/manifest.json", + "bytes": 2214, + "lines": 26, + "tokens": 554 + }, + { + "path": "docs/status/M16-GAP-00153.md", + "bytes": 574, + "lines": 18, + "tokens": 144 + } + ], + "sourceTokens": 1694, + "evidenceFiles": 1, + "evidenceBytes": 3020, + "evidenceTokens": 755, + "totalTokens": 2449, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3473, + "serializedContextTokens": 758, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00155/anim-channels-click-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00155/anim-channels-click-desktop-report.json new file mode 100644 index 00000000..e6730f68 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00155/anim-channels-click-desktop-report.json @@ -0,0 +1,60 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location", + "selected": [ + true, + true, + true + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location", + "selected": [ + false, + false, + false + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location", + "selected": [ + false, + false, + false + ] + } + ], + "name": "WebGapAnimChannelsClickObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "clickedChannel": { + "index": 0, + "path": "location" + }, + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00155-operator-anim.channels_click.blend", + "fixtureSha256": "6ebd45981b70fb1a915008d4fa4d8c574b02bf5440b49e93e16792b819a721e5", + "operation": "ANIM_CHANNELS_CLICK_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00155" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00155/anim-channels-click-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00155/anim-channels-click-local-exact-report.json new file mode 100644 index 00000000..c00a26f2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00155/anim-channels-click-local-exact-report.json @@ -0,0 +1,36 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00155", + "operation": "ANIM_CHANNELS_CLICK_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00155-operator-anim.channels_click.blend", + "sha256": "6ebd45981b70fb1a915008d4fa4d8c574b02bf5440b49e93e16792b819a721e5" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00155/anim-channels-click-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapAnimChannelsClickObjectAction:object:WebGapAnimChannelsClickObject", + "clickedChannel": { + "path": "location", + "index": 0 + }, + "selectedPerChannel": [ + [ + 1, + 3, + 5 + ], + [], + [] + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00156" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00155/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00155/manifest.json new file mode 100644 index 00000000..d16a3770 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00155/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00155", + "parentTask": "M16-GAP-00154", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_CLICK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00154/manifest.json", "sha256": "ac81b87051b86d75e8ec23c7494c5cb9756a7c6093e1c9774ed3e10af9ffe023"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00155-operator-anim.channels_click.blend", "sha256": "6ebd45981b70fb1a915008d4fa4d8c574b02bf5440b49e93e16792b819a721e5"}, + "generator": {"path": "tools/web/generated/M16-GAP-00155.py", "sha256": "14be8a2dd379b1bbb1504618a18f15fa1aa64fba64c29569896b3e5d32f3e001"}, + "desktopChecker": {"path": "tools/web/check-action-channels-click-desktop.py", "sha256": "3984998cbb1a42541f447b317777ed96183147fbb470d2842bdf1d7bfc8aa600"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "f06421aac25143c933e71af61b4cc67ddd785f0cab8b6d7f28b43bccded90d67"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "4a1733632ae8418f0bc835c3b4a14b9d69985cb85b74faaca314fa48ec18fd0e"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00155/anim-channels-click-desktop-report.json", "sha256": "c080797b74218a9ca21654420e96138ae7fc7e795d9f821a1ca1285bdb08038e"}, + "webReport": {"path": "tests/golden/M16-GAP-00155/anim-channels-click-local-exact-report.json", "sha256": "f76c822378b6dffd7a247354d33874515aa551e952401e82188a6e7337a67d55"}, + "taskContext": {"path": "tests/golden/M16-GAP-00155/task-context.json", "sha256": "b47551bafd1fd13f5ed2cd5e9dbf642df1472c6403e1b4c8902e3c6802026146"} + }, + "nextTask": "M16-GAP-00156" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00155/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00155/task-context.json new file mode 100644 index 00000000..25d2ca64 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00155/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00155", + "parentTask": "M16-GAP-00154", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.channels_click data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.channels_click", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00155.py -- tests/files/web/generated/M16-GAP-00155-operator-anim.channels_click.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00155", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00155" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00155.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 3079, + "contextRemainingTokens": 769 + }, + "source": { + "bytes": 6825, + "tokens": 1707 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00155.py", + "bytes": 3046, + "tokens": 762 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00155-operator-anim.channels_click.blend", + "bytes": 87124, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 227216, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 294077, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00155/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00155.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00155/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 3046, + "tokens": 762 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00156", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00155.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00154/manifest.json", + "parentStatus": "docs/status/M16-GAP-00154.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00155.md", + "tests/golden/M16-GAP-00154/manifest.json", + "docs/status/M16-GAP-00154.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00154", + "parentTask": "M16-GAP-00153", + "status": "done", + "nextTask": "M16-GAP-00155", + "artifactCount": 12 + }, + "statusSummary": [ + "# M16-GAP-00154 Status", + "status: done", + "task: anim.channels_clean_empty operator LOCAL_EXACT slice", + "updated: 2026-08-21 America/New_York", + "scope:", + "- Action Editor `anim.channels_clean_empty` removes an empty AnimData container while preserving a populated Action.", + "evidence:", + "- Blender desktop and WASM/Main show the empty object's AnimData removed and the keep object's three location channels at frames 1, 3, and 5." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1784, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 446 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00155.md", + "bytes": 1784, + "lines": 38, + "tokens": 446 + }, + { + "path": "tests/golden/M16-GAP-00154/manifest.json", + "bytes": 2249, + "lines": 26, + "tokens": 563 + }, + { + "path": "docs/status/M16-GAP-00154.md", + "bytes": 624, + "lines": 18, + "tokens": 156 + } + ], + "sourceTokens": 1707, + "evidenceFiles": 1, + "evidenceBytes": 3046, + "evidenceTokens": 762, + "totalTokens": 2469, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3493, + "serializedContextTokens": 753, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00156/anim-channels-collapse-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00156/anim-channels-collapse-desktop-report.json new file mode 100644 index 00000000..0a2ec7f5 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00156/anim-channels-collapse-desktop-report.json @@ -0,0 +1,42 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location" + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location" + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location" + } + ], + "name": "WebGapAnimChannelsCollapseObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "collapsedAll": true, + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00156-operator-anim.channels_collapse.blend", + "fixtureSha256": "6b6c488604fa8dd8ec8e79f97961a4e74f6ca673a14658dd890a0b85e18a4dc9", + "operation": "ANIM_CHANNELS_COLLAPSE_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00156" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00156/anim-channels-collapse-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00156/anim-channels-collapse-local-exact-report.json new file mode 100644 index 00000000..a69fdf88 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00156/anim-channels-collapse-local-exact-report.json @@ -0,0 +1,41 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00156", + "operation": "ANIM_CHANNELS_COLLAPSE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00156-operator-anim.channels_collapse.blend", + "sha256": "6b6c488604fa8dd8ec8e79f97961a4e74f6ca673a14658dd890a0b85e18a4dc9" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00156/anim-channels-collapse-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapAnimChannelsCollapseObjectAction:object:WebGapAnimChannelsCollapseObject", + "collapsedAll": true, + "framesPerChannel": [ + [ + 1, + 3, + 5 + ], + [ + 1, + 3, + 5 + ], + [ + 1, + 3, + 5 + ] + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00157" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00156/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00156/manifest.json new file mode 100644 index 00000000..e0218dfc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00156/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00156", + "parentTask": "M16-GAP-00155", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_COLLAPSE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00155/manifest.json", "sha256": "d892467c0a86ff05be0a9570f70ea5f52ab713b44177a8e65b096e7186a31471"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00156-operator-anim.channels_collapse.blend", "sha256": "6b6c488604fa8dd8ec8e79f97961a4e74f6ca673a14658dd890a0b85e18a4dc9"}, + "generator": {"path": "tools/web/generated/M16-GAP-00156.py", "sha256": "63e9b942070f44dcd5b8a20f82aca62d880d57a5955ff8f82914b9a9f92dcf60"}, + "desktopChecker": {"path": "tools/web/check-action-channels-collapse-desktop.py", "sha256": "e899e95b4bda42f69040d24396d007eae2f35acd1c44594ecf4c25a4d0e1e6c"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "bf5cf9f49c143b9db163922d8c43424a69f55969e83c928bd6835c2ef0fbdeb7"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "4a1733632ae8418f0bc835c3b4a14b9d69985cb85b74faaca314fa48ec18fd0e"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00156/anim-channels-collapse-desktop-report.json", "sha256": "0c7633299bc11c3b2dcc6c255e557b625d61e4a6214b717dd19f7eaf59e2c06a"}, + "webReport": {"path": "tests/golden/M16-GAP-00156/anim-channels-collapse-local-exact-report.json", "sha256": "469e345742980e8647110df56278592ac12e6b945b6d45e11f9ec2da5c8cb094"}, + "taskContext": {"path": "tests/golden/M16-GAP-00156/task-context.json", "sha256": "67d970a10a88c35ee050d4b35ed5dba501907c669c9d36467e9e4151c7593c15"} + }, + "nextTask": "M16-GAP-00157" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00156/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00156/task-context.json new file mode 100644 index 00000000..5c94d21e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00156/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00156", + "parentTask": "M16-GAP-00155", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.channels_collapse data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.channels_collapse", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00156.py -- tests/files/web/generated/M16-GAP-00156-operator-anim.channels_collapse.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00156", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00156" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00156.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 3149, + "contextRemainingTokens": 786 + }, + "source": { + "bytes": 6755, + "tokens": 1690 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00156.py", + "bytes": 2136, + "tokens": 534 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00156-operator-anim.channels_collapse.blend", + "bytes": 87090, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 227216, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 297320, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00156/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00156.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00156/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 2136, + "tokens": 534 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00157", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00156.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00155/manifest.json", + "parentStatus": "docs/status/M16-GAP-00155.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00156.md", + "tests/golden/M16-GAP-00155/manifest.json", + "docs/status/M16-GAP-00155.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00155", + "parentTask": "M16-GAP-00154", + "status": "done", + "nextTask": "M16-GAP-00156", + "artifactCount": 12 + }, + "statusSummary": [ + "# M16-GAP-00155 Status", + "status: done", + "task: anim.channels_click operator LOCAL_EXACT slice", + "updated: 2026-08-21 America/New_York", + "scope:", + "- Action Editor `anim.channels_click` selects the first location channel.", + "evidence:", + "- Blender desktop and WASM/Main expose the same selected location index 0 keys at frames 1, 3, and 5; other channels remain unselected." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1799, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 450 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00156.md", + "bytes": 1799, + "lines": 38, + "tokens": 450 + }, + { + "path": "tests/golden/M16-GAP-00155/manifest.json", + "bytes": 2219, + "lines": 26, + "tokens": 555 + }, + { + "path": "docs/status/M16-GAP-00155.md", + "bytes": 569, + "lines": 18, + "tokens": 143 + } + ], + "sourceTokens": 1690, + "evidenceFiles": 1, + "evidenceBytes": 2136, + "evidenceTokens": 534, + "totalTokens": 2224, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3248, + "serializedContextTokens": 756, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00157/anim-channels-delete-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00157/anim-channels-delete-desktop-report.json new file mode 100644 index 00000000..46aff109 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00157/anim-channels-delete-desktop-report.json @@ -0,0 +1,18 @@ +{ + "action": { + "channels": [], + "name": "WebGapAnimChannelsDeleteObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "deletedChannel": { + "index": 0, + "path": "location" + }, + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00157-operator-anim.channels_delete.blend", + "fixtureSha256": "c5355b82bb3ce08f8a55d436eb47e2e8cd49711c6518e016c13345c5a8683876", + "operation": "ANIM_CHANNELS_DELETE_DESKTOP", + "remainingChannels": 0, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00157" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00157/anim-channels-delete-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00157/anim-channels-delete-local-exact-report.json new file mode 100644 index 00000000..b2d76519 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00157/anim-channels-delete-local-exact-report.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00157", + "operation": "ANIM_CHANNELS_DELETE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00157-operator-anim.channels_delete.blend", + "sha256": "c5355b82bb3ce08f8a55d436eb47e2e8cd49711c6518e016c13345c5a8683876" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00157/anim-channels-delete-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": null, + "deletedChannel": { + "path": "location", + "index": 0 + }, + "remainingChannels": 0 + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00158" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00157/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00157/manifest.json new file mode 100644 index 00000000..b0816799 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00157/manifest.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00157", + "parentTask": "M16-GAP-00156", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_DELETE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00156/manifest.json", "sha256": "f3e9b44c3cb8ca2895325476e38835a32a604443da09d17f1455c6a78366bd7e"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00157-operator-anim.channels_delete.blend", "sha256": "c5355b82bb3ce08f8a55d436eb47e2e8cd49711c6518e016c13345c5a8683876"}, + "generator": {"path": "tools/web/generated/M16-GAP-00157.py", "sha256": "5613100e6c50539e8dd7371cd3c4e2c8469ec3ca384c42126e11a210ad0d5d7b"}, + "desktopChecker": {"path": "tools/web/check-action-channels-delete-desktop.py", "sha256": "b340793fe720b0bd60ca3d81a19c4a9bfba2c679b91bd2d6cbe371fe2e4ef657"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "b7a2194bb16b83564f91be92d5dcbc7e9013de650afcd11a48ec720503642303"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "4a1733632ae8418f0bc835c3b4a14b9d69985cb85b74faaca314fa48ec18fd0e"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00157/anim-channels-delete-desktop-report.json", "sha256": "330b2caa7f2f2dcbf4f903a8ac8bd1fdaf22fa676014fd0a2aa58675c28e77e3"}, + "webReport": {"path": "tests/golden/M16-GAP-00157/anim-channels-delete-local-exact-report.json", "sha256": "667833b173528247f33341fe15edf52b4389bc44e0de4a6dc1fb2e14ee57a986"}, + "taskContext": {"path": "tests/golden/M16-GAP-00157/task-context.json", "sha256": "94c06044e7620dfb82d250775d7a8460cebcb13327e805442ff47585b610574a"} + }, + "nextTask": "M16-GAP-00158" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00157/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00157/task-context.json new file mode 100644 index 00000000..06d1a6b6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00157/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00157", + "parentTask": "M16-GAP-00156", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.channels_delete data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.channels_delete", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00157.py -- tests/files/web/generated/M16-GAP-00157-operator-anim.channels_delete.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00157", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00157" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00157.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 3164, + "contextRemainingTokens": 789 + }, + "source": { + "bytes": 6740, + "tokens": 1687 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00157.py", + "bytes": 2519, + "tokens": 630 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00157-operator-anim.channels_delete.blend", + "bytes": 86834, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 227216, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 300509, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00157/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00157.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00157/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 2519, + "tokens": 630 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00158", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00157.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00156/manifest.json", + "parentStatus": "docs/status/M16-GAP-00156.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00157.md", + "tests/golden/M16-GAP-00156/manifest.json", + "docs/status/M16-GAP-00156.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00156", + "parentTask": "M16-GAP-00155", + "status": "done", + "nextTask": "M16-GAP-00157", + "artifactCount": 12 + }, + "statusSummary": [ + "# M16-GAP-00156 Status", + "status: done", + "task: anim.channels_collapse operator LOCAL_EXACT slice", + "updated: 2026-08-21 America/New_York", + "scope:", + "- Action Editor `anim.channels_collapse` collapses all channels.", + "evidence:", + "- Blender desktop and WASM/Main preserve the same three location channels at frames 1, 3, and 5 after `all=true` collapse." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1789, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 448 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00157.md", + "bytes": 1789, + "lines": 38, + "tokens": 448 + }, + { + "path": "tests/golden/M16-GAP-00156/manifest.json", + "bytes": 2233, + "lines": 26, + "tokens": 559 + }, + { + "path": "docs/status/M16-GAP-00156.md", + "bytes": 550, + "lines": 18, + "tokens": 138 + } + ], + "sourceTokens": 1687, + "evidenceFiles": 1, + "evidenceBytes": 2519, + "evidenceTokens": 630, + "totalTokens": 2317, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3341, + "serializedContextTokens": 754, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00158/anim-channels-editable-toggle-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00158/anim-channels-editable-toggle-desktop-report.json new file mode 100644 index 00000000..bdb5b87b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00158/anim-channels-editable-toggle-desktop-report.json @@ -0,0 +1,45 @@ +{ + "action": { + "channels": [ + { + "editable": false, + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location" + }, + { + "editable": false, + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location" + }, + { + "editable": false, + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location" + } + ], + "name": "WebGapAnimChannelsEditableToggleObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00158-operator-anim.channels_editable_toggle.blend", + "fixtureSha256": "6a983e51050eb6a6b8300c153216a37d61a16e20c09716405c6d9a96912a612f", + "operation": "ANIM_CHANNELS_EDITABLE_TOGGLE_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00158", + "toggledChannels": 3 +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00158/anim-channels-editable-toggle-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00158/anim-channels-editable-toggle-local-exact-report.json new file mode 100644 index 00000000..88119866 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00158/anim-channels-editable-toggle-local-exact-report.json @@ -0,0 +1,29 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00158", + "operation": "ANIM_CHANNELS_EDITABLE_TOGGLE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00158-operator-anim.channels_editable_toggle.blend", + "sha256": "6a983e51050eb6a6b8300c153216a37d61a16e20c09716405c6d9a96912a612f" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00158/anim-channels-editable-toggle-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapAnimChannelsEditableToggleObjectAction:object:WebGapAnimChannelsEditableToggleObject", + "toggledChannels": 3, + "editablePerChannel": [ + false, + false, + false + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00159" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00158/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00158/manifest.json new file mode 100644 index 00000000..878e687f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00158/manifest.json @@ -0,0 +1,26 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00158", + "parentTask": "M16-GAP-00157", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_EDITABLE_TOGGLE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00157/manifest.json", "sha256": "5dc8520ec503a6f19ea783fa4fc56b8044eaa03ad616fece21152b23a4eb8cda"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00158-operator-anim.channels_editable_toggle.blend", "sha256": "6a983e51050eb6a6b8300c153216a37d61a16e20c09716405c6d9a96912a612f"}, + "generator": {"path": "tools/web/generated/M16-GAP-00158.py", "sha256": "1cc7409084194b006ae60b80da804de4972e671e073b6762353f9db516ea05df"}, + "desktopChecker": {"path": "tools/web/check-action-channels-editable-toggle-desktop.py", "sha256": "9d16d09a1f009d160731523de610360a0bc9dd730648b1f9251ef9a8c6e61428"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "6613d6d147b1cd41ca1b9e8faf925aa0b7f5d5add5ea35013f59fa8ea395ab42"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "44f794476cbfd72df85f707267c9c7bddf90bb2e371c61fd5e450d2ba5a0fb17"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "42df0f68f725c93683620d095add7aa82df17c70fa6dbf2e7b13307f6d04525a"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "42df0f68f725c93683620d095add7aa82df17c70fa6dbf2e7b13307f6d04525a"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00158/anim-channels-editable-toggle-desktop-report.json", "sha256": "c700699f731764385ab6a9103adfc3592effdae2dc09b913682b134de16298f5"}, + "webReport": {"path": "tests/golden/M16-GAP-00158/anim-channels-editable-toggle-local-exact-report.json", "sha256": "4e1e28c4baa75abd098eaed07ea83fda9676d6bd875dafac9742bd1d89cf16dd"}, + "status": {"path": "docs/status/M16-GAP-00158.md", "sha256": "7cbb2c0af79def8810641264087eba11d45a8d6cf5d63710364dc6c970fea382"}, + "taskContext": {"path": "tests/golden/M16-GAP-00158/task-context.json", "sha256": "35a89633fba80fbb4df306e948e31117bf1189e7a9c9b8458e391d3cdbb3ae45"} + }, + "nextTask": "M16-GAP-00159" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00158/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00158/task-context.json new file mode 100644 index 00000000..6a824c5a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00158/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00158", + "parentTask": "M16-GAP-00157", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.channels_editable_toggle data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.channels_editable_toggle", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00158.py -- tests/files/web/generated/M16-GAP-00158-operator-anim.channels_editable_toggle.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00158", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00158" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00158.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 3085, + "contextRemainingTokens": 770 + }, + "source": { + "bytes": 6819, + "tokens": 1706 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00158.py", + "bytes": 2795, + "tokens": 699 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00158-operator-anim.channels_editable_toggle.blend", + "bytes": 87112, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 227353, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 304028, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00158/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00158.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00158/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 2795, + "tokens": 699 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00159", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00158.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00157/manifest.json", + "parentStatus": "docs/status/M16-GAP-00157.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00158.md", + "tests/golden/M16-GAP-00157/manifest.json", + "docs/status/M16-GAP-00157.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00157", + "parentTask": "M16-GAP-00156", + "status": "done", + "nextTask": "M16-GAP-00158", + "artifactCount": 12 + }, + "statusSummary": [ + "# M16-GAP-00157 Status", + "status: done", + "task: anim.channels_delete operator LOCAL_EXACT slice", + "updated: 2026-08-21 America/New_York", + "scope:", + "- Action Editor `anim.channels_delete` deletes the selected location[0] FCurve.", + "evidence:", + "- Blender desktop and WASM/Main show the Action emptied after deleting the only location channel; the WASM snapshot correctly omits the empty animation." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1834, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 459 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00158.md", + "bytes": 1834, + "lines": 38, + "tokens": 459 + }, + { + "path": "tests/golden/M16-GAP-00157/manifest.json", + "bytes": 2224, + "lines": 26, + "tokens": 556 + }, + { + "path": "docs/status/M16-GAP-00157.md", + "bytes": 593, + "lines": 18, + "tokens": 149 + } + ], + "sourceTokens": 1706, + "evidenceFiles": 1, + "evidenceBytes": 2795, + "evidenceTokens": 699, + "totalTokens": 2405, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3429, + "serializedContextTokens": 761, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00159/anim-channels-expand-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00159/anim-channels-expand-desktop-report.json new file mode 100644 index 00000000..32408ead --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00159/anim-channels-expand-desktop-report.json @@ -0,0 +1,51 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "group": "Object Transforms", + "index": 0, + "path": "location" + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "group": "Object Transforms", + "index": 1, + "path": "location" + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "group": "Object Transforms", + "index": 2, + "path": "location" + } + ], + "groups": [ + { + "expanded": true, + "name": "Object Transforms" + } + ], + "name": "WebGapAnimChannelsExpandObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "expandedGroups": 1, + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00159-operator-anim.channels_expand.blend", + "fixtureSha256": "7e8658f9238b0cfbb08775388cddf2f7e453c6a2683fe908974b0dd55a852ca7", + "operation": "ANIM_CHANNELS_EXPAND_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00159" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00159/anim-channels-expand-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00159/anim-channels-expand-local-exact-report.json new file mode 100644 index 00000000..c3873c1c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00159/anim-channels-expand-local-exact-report.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00159", + "operation": "ANIM_CHANNELS_EXPAND_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00159-operator-anim.channels_expand.blend", + "sha256": "7e8658f9238b0cfbb08775388cddf2f7e453c6a2683fe908974b0dd55a852ca7" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00159/anim-channels-expand-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapAnimChannelsExpandObjectAction:object:WebGapAnimChannelsExpandObject", + "expandedGroups": 1, + "group": { + "name": "Object Transforms", + "expanded": true + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00160" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00159/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00159/manifest.json new file mode 100644 index 00000000..688f7cf0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00159/manifest.json @@ -0,0 +1,26 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00159", + "parentTask": "M16-GAP-00158", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_EXPAND_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00158/manifest.json", "sha256": "f8754729d3afff4daf866d6d3126da8ce8218bb3ecc0f9e9bb5d173d4c860cff"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00159-operator-anim.channels_expand.blend", "sha256": "7e8658f9238b0cfbb08775388cddf2f7e453c6a2683fe908974b0dd55a852ca7"}, + "generator": {"path": "tools/web/generated/M16-GAP-00159.py", "sha256": "04988ce930276e01b61838b48860601bb829fdaf7e7d9652eb1fa2f3b36b6f6b"}, + "desktopChecker": {"path": "tools/web/check-action-channels-expand-desktop.py", "sha256": "b8cc37161161746bbf2cce1da08b0658fa5e911507b6049d5f05b1cc0abb7148"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "782b1261124bae08bebed36f2b3f07e5b0257a1e027ec6ae9328a84c3dd88541"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "3222ad3a0f40f5f29da642aed606542ef7cfc46f2a23744f70f8ca418922a7d2"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "de51dae3f6ddc3dabe65b302de6e04f13ddc2f68422f51595eba2f5a139e1d14"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "de51dae3f6ddc3dabe65b302de6e04f13ddc2f68422f51595eba2f5a139e1d14"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00159/anim-channels-expand-desktop-report.json", "sha256": "56feacbf947430f5799612b9e01395ec2f901f455ef1811af58315bc97981c58"}, + "webReport": {"path": "tests/golden/M16-GAP-00159/anim-channels-expand-local-exact-report.json", "sha256": "705189c2b5571ee5645c50932fdff1bdaff3f9205cd031533969f1bc8d09418e"}, + "status": {"path": "docs/status/M16-GAP-00159.md", "sha256": "f93526ce6fcafb2734cbe1c86ecde24da0e94c702b711e72efa080a25201d84f"}, + "taskContext": {"path": "tests/golden/M16-GAP-00159/task-context.json", "sha256": "fc453afe062994a58a0bc5108a915f246afd8eb75b9a90cb30ec47fd92aac464"} + }, + "nextTask": "M16-GAP-00160" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00159/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00159/task-context.json new file mode 100644 index 00000000..598a6c97 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00159/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00159", + "parentTask": "M16-GAP-00158", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.channels_expand data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.channels_expand", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00159.py -- tests/files/web/generated/M16-GAP-00159-operator-anim.channels_expand.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00159", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00159" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00159.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2981, + "contextRemainingTokens": 744 + }, + "source": { + "bytes": 6923, + "tokens": 1732 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00159.py", + "bytes": 2485, + "tokens": 622 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00159-operator-anim.channels_expand.blend", + "bytes": 87114, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 227825, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 307461, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00159/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00159.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00159/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 2485, + "tokens": 622 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00160", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00159.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00158/manifest.json", + "parentStatus": "docs/status/M16-GAP-00158.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00159.md", + "tests/golden/M16-GAP-00158/manifest.json", + "docs/status/M16-GAP-00158.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00158", + "parentTask": "M16-GAP-00157", + "status": "done", + "nextTask": "M16-GAP-00159", + "artifactCount": 13 + }, + "statusSummary": [ + "# M16-GAP-00158 Status", + "status: done", + "task: anim.channels_editable_toggle operator LOCAL_EXACT slice", + "updated: 2026-08-21 America/New_York", + "scope:", + "- Action Editor `anim.channels_editable_toggle` toggles the selected location channels to non-editable.", + "evidence:", + "- Blender desktop and WASM/Main expose all three location FCurves with `editable: false`." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1789, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 448 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00159.md", + "bytes": 1789, + "lines": 38, + "tokens": 448 + }, + { + "path": "tests/golden/M16-GAP-00158/manifest.json", + "bytes": 2403, + "lines": 27, + "tokens": 601 + }, + { + "path": "docs/status/M16-GAP-00158.md", + "bytes": 563, + "lines": 18, + "tokens": 141 + } + ], + "sourceTokens": 1732, + "evidenceFiles": 1, + "evidenceBytes": 2485, + "evidenceTokens": 622, + "totalTokens": 2354, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3378, + "serializedContextTokens": 754, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00160/anim-channels-fcurves-enable-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00160/anim-channels-fcurves-enable-desktop-report.json new file mode 100644 index 00000000..ff37e74a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00160/anim-channels-fcurves-enable-desktop-report.json @@ -0,0 +1,45 @@ +{ + "action": { + "channels": [ + { + "enabled": true, + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location_missing" + }, + { + "enabled": true, + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location_missing" + }, + { + "enabled": true, + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location_missing" + } + ], + "name": "WebGapAnimChannelsFCurvesEnableObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "enabledChannels": 3, + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00160-operator-anim.channels_fcurves_enable.blend", + "fixtureSha256": "091c8bd8ceb6206cd7ef7f5d8cac03dd4ee554c4ec13f588e8b9ef5933c24ebf", + "operation": "ANIM_CHANNELS_FCURVES_ENABLE_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00160" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00160/anim-channels-fcurves-enable-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00160/anim-channels-fcurves-enable-local-exact-report.json new file mode 100644 index 00000000..b05a4ffb --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00160/anim-channels-fcurves-enable-local-exact-report.json @@ -0,0 +1,29 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00160", + "operation": "ANIM_CHANNELS_FCURVES_ENABLE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00160-operator-anim.channels_fcurves_enable.blend", + "sha256": "091c8bd8ceb6206cd7ef7f5d8cac03dd4ee554c4ec13f588e8b9ef5933c24ebf" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00160/anim-channels-fcurves-enable-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapAnimChannelsFCurvesEnableObjectAction:object:WebGapAnimChannelsFCurvesEnableObject", + "enabledChannels": 3, + "enabledPerChannel": [ + true, + true, + true + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00161" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00160/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00160/manifest.json new file mode 100644 index 00000000..55d61d3c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00160/manifest.json @@ -0,0 +1,69 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00160", + "parentTask": "M16-GAP-00159", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_FCURVES_ENABLE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00159/manifest.json", + "sha256": "32a6494adf77b384d699d713d469905309a115165a6a744a09d4c49979394650" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00160-operator-anim.channels_fcurves_enable.blend", + "sha256": "091c8bd8ceb6206cd7ef7f5d8cac03dd4ee554c4ec13f588e8b9ef5933c24ebf" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00160.py", + "sha256": "83337ffc4859fc026819640065e8bf0aa889d5fd9b23815366a96190a45df956" + }, + "desktopChecker": { + "path": "tools/web/check-action-channels-fcurves-enable-desktop.py", + "sha256": "0124b78950409836682c690f2158c76d8eba8fc2ab5c35b11aacb73dbc2ad5a9" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "b4e73592fd6d0885985d0b09082335edbd49227dea46458e089c5c498ad0a8a3" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "84fae3b308277e75496849efa3e456418237e77ba7fb1cb6086231dd9d4502d3" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "3549b6c6acd1cf4e0bb90ea5b0523987a23dd40e0541e97ae341529281a72e1d" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "214c3f0e7dd39ae3ca581095049946ecdae65cb6707011b9e9b90a401a73f1c3" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "214c3f0e7dd39ae3ca581095049946ecdae65cb6707011b9e9b90a401a73f1c3" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00160/anim-channels-fcurves-enable-desktop-report.json", + "sha256": "694c307f9ccc22b4eca8e64185e5397bd778e45da07c5ad26a60120220ebe4c5" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00160/anim-channels-fcurves-enable-local-exact-report.json", + "sha256": "42b1b070a9975db3284dd616a3c101cf1ec1ee3701372f77eeb04e0a03e52b9a" + }, + "status": { + "path": "docs/status/M16-GAP-00160.md", + "sha256": "b363159100041b87476b7263631cbf91bf02a83795eb8ce78e019d71e888ce55" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00160/task-context.json", + "sha256": "c1a8d564de0ad1c377f22af1f6c8152256e66c3da974a5f18e2716f48334276e" + } + }, + "nextTask": "M16-GAP-00161" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00160/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00160/task-context.json new file mode 100644 index 00000000..7525494c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00160/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00160", + "parentTask": "M16-GAP-00159", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.channels_fcurves_enable data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.channels_fcurves_enable", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00160.py -- tests/files/web/generated/M16-GAP-00160-operator-anim.channels_fcurves_enable.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00160", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00160" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00160.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2967, + "contextRemainingTokens": 740 + }, + "source": { + "bytes": 6937, + "tokens": 1736 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00160.py", + "bytes": 2684, + "tokens": 671 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00160-operator-anim.channels_fcurves_enable.blend", + "bytes": 87104, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 227881, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 311071, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00160/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00160.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00160/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 2684, + "tokens": 671 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00161", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00160.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00159/manifest.json", + "parentStatus": "docs/status/M16-GAP-00159.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00160.md", + "tests/golden/M16-GAP-00159/manifest.json", + "docs/status/M16-GAP-00159.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00159", + "parentTask": "M16-GAP-00158", + "status": "done", + "nextTask": "M16-GAP-00160", + "artifactCount": 13 + }, + "statusSummary": [ + "# M16-GAP-00159 Status", + "status: done", + "task: anim.channels_expand operator LOCAL_EXACT slice", + "updated: 2026-08-21 America/New_York", + "scope:", + "- Action Editor `anim.channels_expand(all=true)` expands the `Object Transforms` channel group.", + "evidence:", + "- Blender desktop and WASM/Main expose the group as `Object Transforms` with `expanded: true` on all three location channels." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1829, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 458 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00160.md", + "bytes": 1829, + "lines": 38, + "tokens": 458 + }, + { + "path": "tests/golden/M16-GAP-00159/manifest.json", + "bytes": 2358, + "lines": 27, + "tokens": 590 + }, + { + "path": "docs/status/M16-GAP-00159.md", + "bytes": 582, + "lines": 18, + "tokens": 146 + } + ], + "sourceTokens": 1736, + "evidenceFiles": 1, + "evidenceBytes": 2684, + "evidenceTokens": 671, + "totalTokens": 2407, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3431, + "serializedContextTokens": 760, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00161/anim-channels-group-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00161/anim-channels-group-desktop-report.json new file mode 100644 index 00000000..c01fb8cb --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00161/anim-channels-group-desktop-report.json @@ -0,0 +1,48 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "group": "WebGapTransforms", + "index": 0, + "path": "location" + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "group": "WebGapTransforms", + "index": 1, + "path": "location" + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "group": "WebGapTransforms", + "index": 2, + "path": "location" + } + ], + "groups": [ + "WebGapTransforms" + ], + "name": "WebGapAnimChannelsGroupObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00161-operator-anim.channels_group.blend", + "fixtureSha256": "dfa3cbf7b6511926f549134cfd157e2c4350d9f2f4fa5c30dc01ada3dc071cea", + "groups": 1, + "operation": "ANIM_CHANNELS_GROUP_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00161" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00161/anim-channels-group-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00161/anim-channels-group-local-exact-report.json new file mode 100644 index 00000000..ebe18807 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00161/anim-channels-group-local-exact-report.json @@ -0,0 +1,26 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00161", + "operation": "ANIM_CHANNELS_GROUP_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00161-operator-anim.channels_group.blend", + "sha256": "dfa3cbf7b6511926f549134cfd157e2c4350d9f2f4fa5c30dc01ada3dc071cea" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00161/anim-channels-group-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapAnimChannelsGroupObjectAction:object:WebGapAnimChannelsGroupObject", + "groups": 1, + "group": "WebGapTransforms", + "groupedChannels": 3 + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00162" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00161/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00161/manifest.json new file mode 100644 index 00000000..11f60977 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00161/manifest.json @@ -0,0 +1,69 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00161", + "parentTask": "M16-GAP-00160", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_GROUP_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00160/manifest.json", + "sha256": "7c045fa9b3bd97f6260a9b279d7dbc8d18cd3aabce33a8d095d9e4a7c08700df" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00161-operator-anim.channels_group.blend", + "sha256": "dfa3cbf7b6511926f549134cfd157e2c4350d9f2f4fa5c30dc01ada3dc071cea" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00161.py", + "sha256": "f042c1f5ea55d2f146c81e9765b451ea2a58c82768095c76d632ea9de46b198e" + }, + "desktopChecker": { + "path": "tools/web/check-action-channels-group-desktop.py", + "sha256": "0cf05f15c8441bdae97c96a44687b30527149165c16f1f31df10ff29e6fecb85" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "6b26272a1d5973ecd263745b7cf127cbac656b999d1780e3ab0386ae4a0f4fa0" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "84fae3b308277e75496849efa3e456418237e77ba7fb1cb6086231dd9d4502d3" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "3549b6c6acd1cf4e0bb90ea5b0523987a23dd40e0541e97ae341529281a72e1d" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "214c3f0e7dd39ae3ca581095049946ecdae65cb6707011b9e9b90a401a73f1c3" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "214c3f0e7dd39ae3ca581095049946ecdae65cb6707011b9e9b90a401a73f1c3" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00161/anim-channels-group-desktop-report.json", + "sha256": "c7df9940aecaa3fa127116325e053c182a183167d8f222e9af072c6415ef379b" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00161/anim-channels-group-local-exact-report.json", + "sha256": "e455f560ac9e6047b84971a96b3aa7f58ee4cf08dccf5f6394310820d10715d2" + }, + "status": { + "path": "docs/status/M16-GAP-00161.md", + "sha256": "45a504a53e49b7e1df0d93b487125218aeaef5c5e227ba08e78f2681211a22bb" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00161/task-context.json", + "sha256": "cdc0f7f91f24f2ede4406c025ce8ee0eec9898a512c8d255c915851537263f30" + } + }, + "nextTask": "M16-GAP-00162" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00161/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00161/task-context.json new file mode 100644 index 00000000..418317c1 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00161/task-context.json @@ -0,0 +1,182 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00161", + "parentTask": "M16-GAP-00160", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.channels_group data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.channels_group", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00161.py -- tests/files/web/generated/M16-GAP-00161-operator-anim.channels_group.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00161", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00161" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2545, + "contextRemainingTokens": 635 + }, + "source": { + "bytes": 7359, + "tokens": 1841 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00161-operator-anim.channels_group.blend", + "bytes": 87091, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/generated/M16-GAP-00161.py", + "bytes": 2584, + "reason": "CONTEXT_REMAINING_SPACE" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 227881, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 314588, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00161/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00161.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00161/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00162", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00161.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00160/manifest.json", + "parentStatus": "docs/status/M16-GAP-00160.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00161.md", + "tests/golden/M16-GAP-00160/manifest.json", + "docs/status/M16-GAP-00160.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00160", + "parentTask": "M16-GAP-00159", + "status": "done", + "nextTask": "M16-GAP-00161", + "artifactCount": 14 + }, + "statusSummary": [ + "# M16-GAP-00160 Status", + "status: done", + "task: anim.channels_fcurves_enable operator LOCAL_EXACT slice", + "updated: 2026-08-21 America/New_York", + "scope:", + "- Action Editor `anim.channels_fcurves_enable` preserves three location F-Curves and exposes their enabled state.", + "evidence:", + "- Blender desktop and WASM/Main expose all three `location_missing` channels with `enabled: true` after the operator path." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1784, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 446 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00161.md", + "bytes": 1784, + "lines": 38, + "tokens": 446 + }, + { + "path": "tests/golden/M16-GAP-00160/manifest.json", + "bytes": 2782, + "lines": 70, + "tokens": 696 + }, + { + "path": "docs/status/M16-GAP-00160.md", + "bytes": 625, + "lines": 18, + "tokens": 157 + } + ], + "sourceTokens": 1841, + "evidenceFiles": 0, + "evidenceBytes": 0, + "evidenceTokens": 0, + "totalTokens": 1841, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 2865, + "serializedContextTokens": 718, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00162/anim-channels-move-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00162/anim-channels-move-desktop-report.json new file mode 100644 index 00000000..814d9548 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00162/anim-channels-move-desktop-report.json @@ -0,0 +1,42 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location" + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location" + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location" + } + ], + "name": "WebGapAnimChannelsMoveObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "direction": "DOWN", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00162-operator-anim.channels_move.blend", + "fixtureSha256": "d75500ad33614d2ebe9cf705757971cb76556ae18b77b1064e13420f514f41ea", + "operation": "ANIM_CHANNELS_MOVE_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00162" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00162/anim-channels-move-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00162/anim-channels-move-local-exact-report.json new file mode 100644 index 00000000..cfab6cb0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00162/anim-channels-move-local-exact-report.json @@ -0,0 +1,29 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00162", + "operation": "ANIM_CHANNELS_MOVE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00162-operator-anim.channels_move.blend", + "sha256": "d75500ad33614d2ebe9cf705757971cb76556ae18b77b1064e13420f514f41ea" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00162/anim-channels-move-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapAnimChannelsMoveObjectAction:object:WebGapAnimChannelsMoveObject", + "direction": "DOWN", + "channelOrder": [ + 1, + 0, + 2 + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00163" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00162/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00162/manifest.json new file mode 100644 index 00000000..3a252ef1 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00162/manifest.json @@ -0,0 +1,69 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00162", + "parentTask": "M16-GAP-00161", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_MOVE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00161/manifest.json", + "sha256": "7c045fa9b3bd97f6260a9b279d7dbc8d18cd3aabce33a8d095d9e4a7c08700df" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00162-operator-anim.channels_move.blend", + "sha256": "d75500ad33614d2ebe9cf705757971cb76556ae18b77b1064e13420f514f41ea" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00162.py", + "sha256": "ac23b4652f68035ba12003a44c75d7104be17132f8a2edce5f9b3f64052a57d4" + }, + "desktopChecker": { + "path": "tools/web/check-action-channels-move-desktop.py", + "sha256": "0410afc446a73d3083d96fde83b36b3c1754e133b95af2554de064ab928ded5f" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "b42cc0902df0d537c6a38b4f313ad02df81a7e6a1950f7e0b255dabd79b2e74b" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "84fae3b308277e75496849efa3e456418237e77ba7fb1cb6086231dd9d4502d3" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "3549b6c6acd1cf4e0bb90ea5b0523987a23dd40e0541e97ae341529281a72e1d" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "214c3f0e7dd39ae3ca581095049946ecdae65cb6707011b9e9b90a401a73f1c3" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "214c3f0e7dd39ae3ca581095049946ecdae65cb6707011b9e9b90a401a73f1c3" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00162/anim-channels-move-desktop-report.json", + "sha256": "8b12fad79622d6171f5afce0017b89cae20fea109dacc0851c10c8d96d19f1c0" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00162/anim-channels-move-local-exact-report.json", + "sha256": "0dad9d166f9fdd3466f0a96bc32e02118259a5aa7ac8312d716c93fb0b8fcf31" + }, + "status": { + "path": "docs/status/M16-GAP-00162.md", + "sha256": "PENDING" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00162/task-context.json", + "sha256": "PENDING" + } + }, + "nextTask": "M16-GAP-00163" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00162/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00162/task-context.json new file mode 100644 index 00000000..dd060c74 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00162/task-context.json @@ -0,0 +1,182 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00162", + "parentTask": "M16-GAP-00161", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.channels_move data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.channels_move", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00162.py -- tests/files/web/generated/M16-GAP-00162-operator-anim.channels_move.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00162", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00162" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2636, + "contextRemainingTokens": 658 + }, + "source": { + "bytes": 7268, + "tokens": 1818 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00162-operator-anim.channels_move.blend", + "bytes": 87080, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/generated/M16-GAP-00162.py", + "bytes": 2996, + "reason": "CONTEXT_REMAINING_SPACE" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 227881, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 317878, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00162/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00162.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00162/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00163", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00162.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00161/manifest.json", + "parentStatus": "docs/status/M16-GAP-00161.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00162.md", + "tests/golden/M16-GAP-00161/manifest.json", + "docs/status/M16-GAP-00161.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00161", + "parentTask": "M16-GAP-00160", + "status": "done", + "nextTask": "M16-GAP-00162", + "artifactCount": 14 + }, + "statusSummary": [ + "# M16-GAP-00161 Status", + "status: done", + "task: anim.channels_group operator LOCAL_EXACT slice", + "updated: 2026-08-21 America/New_York", + "scope:", + "- Action Editor `anim.channels_group` assigns the three selected location F-Curves to `WebGapTransforms`.", + "evidence:", + "- Blender desktop and WASM/Main expose all three channels with the exact `WebGapTransforms` group." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1779, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 445 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00162.md", + "bytes": 1779, + "lines": 38, + "tokens": 445 + }, + { + "path": "tests/golden/M16-GAP-00161/manifest.json", + "bytes": 2737, + "lines": 70, + "tokens": 685 + }, + { + "path": "docs/status/M16-GAP-00161.md", + "bytes": 584, + "lines": 18, + "tokens": 146 + } + ], + "sourceTokens": 1818, + "evidenceFiles": 0, + "evidenceBytes": 0, + "evidenceTokens": 0, + "totalTokens": 1818, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 2842, + "serializedContextTokens": 717, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00163/anim-channels-rename-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00163/anim-channels-rename-desktop-report.json new file mode 100644 index 00000000..7cbeef3e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00163/anim-channels-rename-desktop-report.json @@ -0,0 +1,49 @@ +{ + "action": { + "channels": [ + { + "enabled": true, + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "rotation_euler" + }, + { + "enabled": true, + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location_missing" + }, + { + "enabled": true, + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location_missing" + } + ], + "name": "WebGapAnimChannelsRenameObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00163-operator-anim.channels_rename.blend", + "fixtureSha256": "e26a89d3f532f3bbcb62036d20a5c6eb82331591cb7db7e3202a750870087e24", + "operation": "ANIM_CHANNELS_RENAME_DESKTOP", + "renamedChannel": { + "from": "location_missing", + "index": 0, + "to": "rotation_euler" + }, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00163" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00163/anim-channels-rename-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00163/anim-channels-rename-local-exact-report.json new file mode 100644 index 00000000..488311a7 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00163/anim-channels-rename-local-exact-report.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00163", + "operation": "ANIM_CHANNELS_RENAME_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00163-operator-anim.channels_rename.blend", + "sha256": "e26a89d3f532f3bbcb62036d20a5c6eb82331591cb7db7e3202a750870087e24" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00163/anim-channels-rename-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapAnimChannelsRenameObjectAction:object:WebGapAnimChannelsRenameObject", + "renamedChannel": { + "from": "location_missing[0]", + "to": "rotation_euler[0]" + }, + "disabledControlChannels": 2 + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00164" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00163/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00163/manifest.json new file mode 100644 index 00000000..c08ab948 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00163/manifest.json @@ -0,0 +1,69 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00163", + "parentTask": "M16-GAP-00162", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_RENAME_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00162/manifest.json", + "sha256": "6341c7071727e90ea79b54e8a426f6d21955a51350ce6c6a1dbc7de28d818fee" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00163-operator-anim.channels_rename.blend", + "sha256": "e26a89d3f532f3bbcb62036d20a5c6eb82331591cb7db7e3202a750870087e24" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00163.py", + "sha256": "fe2d78ca3844f1b81af065855f95f4f0ba1b70259e9b9260f828a6509f3304ce" + }, + "desktopChecker": { + "path": "tools/web/check-action-channels-rename-desktop.py", + "sha256": "16c276e94e9020e685d52d527cde9dc68f3fea64fdac61ce9cf99f74643d594e" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "cc1a9622cb09b0ba217ac650a20c325ef31673c6cb304929d2c18a4e8f19de97" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "84fae3b308277e75496849efa3e456418237e77ba7fb1cb6086231dd9d4502d3" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "3549b6c6acd1cf4e0bb90ea5b0523987a23dd40e0541e97ae341529281a72e1d" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "214c3f0e7dd39ae3ca581095049946ecdae65cb6707011b9e9b90a401a73f1c3" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "214c3f0e7dd39ae3ca581095049946ecdae65cb6707011b9e9b90a401a73f1c3" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00163/anim-channels-rename-desktop-report.json", + "sha256": "ab51d4972965553550c3a31a01d5ead41d4a1edb4f3d5229e0072035f032cc63" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00163/anim-channels-rename-local-exact-report.json", + "sha256": "f83a4dc64627ec6679826be1a49942a869af4ffc1bad317ecc60a9ff056729ab" + }, + "status": { + "path": "docs/status/M16-GAP-00163.md", + "sha256": "08d4c8ebe07e9db2eefaba13d861bb5828316f2411117ab0604eb27cbd2308d7" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00163/task-context.json", + "sha256": "1038e4979b2f480d971af8c15a568db264a1612f6e86ec49cec3cf6f25a48684" + } + }, + "nextTask": "M16-GAP-00164" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00163/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00163/task-context.json new file mode 100644 index 00000000..afe7aad3 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00163/task-context.json @@ -0,0 +1,182 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00163", + "parentTask": "M16-GAP-00162", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.channels_rename data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.channels_rename", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00163.py -- tests/files/web/generated/M16-GAP-00163-operator-anim.channels_rename.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00163", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00163" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2754, + "contextRemainingTokens": 687 + }, + "source": { + "bytes": 7150, + "tokens": 1789 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00163-operator-anim.channels_rename.blend", + "bytes": 87123, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/generated/M16-GAP-00163.py", + "bytes": 3868, + "reason": "CONTEXT_REMAINING_SPACE" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 227881, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 321530, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00163/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00163.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00163/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00164", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00163.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00162/manifest.json", + "parentStatus": "docs/status/M16-GAP-00162.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00163.md", + "tests/golden/M16-GAP-00162/manifest.json", + "docs/status/M16-GAP-00162.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00162", + "parentTask": "M16-GAP-00161", + "status": "done", + "nextTask": "M16-GAP-00163", + "artifactCount": 14 + }, + "statusSummary": [ + "# M16-GAP-00162 Status", + "status: done", + "task: anim.channels_move operator LOCAL_EXACT slice", + "updated: 2026-08-21 America/New_York", + "scope:", + "- Action Editor `anim.channels_move` moves the first location F-Curve down.", + "evidence:", + "- Blender desktop and WASM/Main expose the same three location channels in order `[1, 0, 2]`." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1789, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 448 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00163.md", + "bytes": 1789, + "lines": 38, + "tokens": 448 + }, + { + "path": "tests/golden/M16-GAP-00162/manifest.json", + "bytes": 2618, + "lines": 70, + "tokens": 655 + }, + { + "path": "docs/status/M16-GAP-00162.md", + "bytes": 575, + "lines": 18, + "tokens": 144 + } + ], + "sourceTokens": 1789, + "evidenceFiles": 0, + "evidenceBytes": 0, + "evidenceTokens": 0, + "totalTokens": 1789, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 2813, + "serializedContextTokens": 719, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00164/anim-channels-select-all-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00164/anim-channels-select-all-desktop-report.json new file mode 100644 index 00000000..e1e1bd6c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00164/anim-channels-select-all-desktop-report.json @@ -0,0 +1,60 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location", + "selected": true, + "selectedKeyframes": [ + false, + false, + false + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location", + "selected": true, + "selectedKeyframes": [ + false, + false, + false + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location", + "selected": true, + "selectedKeyframes": [ + false, + false, + false + ] + } + ], + "name": "WebGapAnimChannelsSelectAllObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00164-operator-anim.channels_select_all.blend", + "fixtureSha256": "8931b05c45cbe7109d5c14fff6b753ab6cea2042bbdfa86dcadb0ae8762aa0fc", + "operation": "ANIM_CHANNELS_SELECT_ALL_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "selection": "SELECT", + "task": "M16-GAP-00164" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00164/anim-channels-select-all-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00164/anim-channels-select-all-local-exact-report.json new file mode 100644 index 00000000..ffa2647e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00164/anim-channels-select-all-local-exact-report.json @@ -0,0 +1,26 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00164", + "operation": "ANIM_CHANNELS_SELECT_ALL_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00164-operator-anim.channels_select_all.blend", + "sha256": "8931b05c45cbe7109d5c14fff6b753ab6cea2042bbdfa86dcadb0ae8762aa0fc" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00164/anim-channels-select-all-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapAnimChannelsSelectAllObjectAction:object:WebGapAnimChannelsSelectAllObject", + "selection": "SELECT", + "selectedChannels": 3, + "selectedKeyframes": 0 + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00165" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00164/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00164/manifest.json new file mode 100644 index 00000000..ec19b60c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00164/manifest.json @@ -0,0 +1,69 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00164", + "parentTask": "M16-GAP-00163", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_SELECT_ALL_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00163/manifest.json", + "sha256": "7fd9a9d70579127ef35e36d08663a815d555cc66e1454ed7c5cb5f295c169224" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00164-operator-anim.channels_select_all.blend", + "sha256": "8931b05c45cbe7109d5c14fff6b753ab6cea2042bbdfa86dcadb0ae8762aa0fc" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00164.py", + "sha256": "84fe57e8233f869bd359215f6fc90e4291ee07fc06ebd58e45fb302778862000" + }, + "desktopChecker": { + "path": "tools/web/check-action-channels-select-all-desktop.py", + "sha256": "3f89d79ab79fc4a6e82c624c4703a71d6448d38a62c9f5237959a8215c96cc4e" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "50716ec326722ff44d42efd7650676cc62143b17e4af696623d8929958c4bd8a" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "8f420707773bb4057e0348f4f7338df6cef71612f6632b9429f221b8dc9584fc" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "32745a12fbe5b033024cd98e89c1ae075f4f2ae5541d730bf12a9d93e0b309f6" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "32745a12fbe5b033024cd98e89c1ae075f4f2ae5541d730bf12a9d93e0b309f6" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00164/anim-channels-select-all-desktop-report.json", + "sha256": "27582c87f7d705f7b2a935d29df9fd4b65e60f8cc7f1e1f9803b2788aeb43f22" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00164/anim-channels-select-all-local-exact-report.json", + "sha256": "8bfb174ed2610c2d518c5c62721e489e3314875d70f12cd3304b10ca4e7e3d6e" + }, + "status": { + "path": "docs/status/M16-GAP-00164.md", + "sha256": "a3f31d41ab5714e6ee808c241b92f409074b4c699956df655026af1a1cf1b1fb" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00164/task-context.json", + "sha256": "eea368ca4eb17f607e0f948b80e2c1964d7a1cf9f44cb85823ba078783d3eb81" + } + }, + "nextTask": "M16-GAP-00165" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00164/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00164/task-context.json new file mode 100644 index 00000000..67bda34a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00164/task-context.json @@ -0,0 +1,182 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00164", + "parentTask": "M16-GAP-00163", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.channels_select_all data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.channels_select_all", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00164.py -- tests/files/web/generated/M16-GAP-00164-operator-anim.channels_select_all.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00164", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00164" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2470, + "contextRemainingTokens": 616 + }, + "source": { + "bytes": 7434, + "tokens": 1860 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00164-operator-anim.channels_select_all.blend", + "bytes": 87114, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/generated/M16-GAP-00164.py", + "bytes": 2758, + "reason": "CONTEXT_REMAINING_SPACE" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 227938, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 325464, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00164/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00164.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00164/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00165", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00164.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00163/manifest.json", + "parentStatus": "docs/status/M16-GAP-00163.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00164.md", + "tests/golden/M16-GAP-00163/manifest.json", + "docs/status/M16-GAP-00163.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00163", + "parentTask": "M16-GAP-00162", + "status": "done", + "nextTask": "M16-GAP-00164", + "artifactCount": 14 + }, + "statusSummary": [ + "# M16-GAP-00163 Status", + "status: done", + "task: anim.channels_rename operator LOCAL_EXACT slice", + "updated: 2026-08-21 America/New_York", + "scope:", + "- Action Editor `anim.channels_rename` renames the first disabled F-Curve RNA path to `rotation_euler`.", + "evidence:", + "- Blender desktop and WASM/Main expose the same three channels: `rotation_euler[0]`, `location_missing[1]`, and `location_missing[2]` with identical keyframes." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1809, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 453 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00164.md", + "bytes": 1809, + "lines": 38, + "tokens": 453 + }, + { + "path": "tests/golden/M16-GAP-00163/manifest.json", + "bytes": 2742, + "lines": 70, + "tokens": 686 + }, + { + "path": "docs/status/M16-GAP-00163.md", + "bytes": 715, + "lines": 18, + "tokens": 179 + } + ], + "sourceTokens": 1860, + "evidenceFiles": 0, + "evidenceBytes": 0, + "evidenceTokens": 0, + "totalTokens": 1860, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 2884, + "serializedContextTokens": 722, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00165/anim-channels-select-box-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00165/anim-channels-select-box-desktop-report.json new file mode 100644 index 00000000..2b653498 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00165/anim-channels-select-box-desktop-report.json @@ -0,0 +1,61 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location", + "selected": true, + "selectedKeyframes": [ + false, + false, + false + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location", + "selected": true, + "selectedKeyframes": [ + false, + false, + false + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location", + "selected": true, + "selectedKeyframes": [ + false, + false, + false + ] + } + ], + "name": "WebGapAnimChannelsSelectBoxObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00165-operator-anim.channels_select_box.blend", + "fixtureSha256": "3f11ff84cbe69116b6b008b9c5d12f35e7796c2f571776f33025bb068ab46ccc", + "operation": "ANIM_CHANNELS_SELECT_BOX_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "selectedChannels": 3, + "selection": "SELECT", + "task": "M16-GAP-00165" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00165/anim-channels-select-box-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00165/anim-channels-select-box-local-exact-report.json new file mode 100644 index 00000000..90338e0b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00165/anim-channels-select-box-local-exact-report.json @@ -0,0 +1,26 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00165", + "operation": "ANIM_CHANNELS_SELECT_BOX_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00165-operator-anim.channels_select_box.blend", + "sha256": "3f11ff84cbe69116b6b008b9c5d12f35e7796c2f571776f33025bb068ab46ccc" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00165/anim-channels-select-box-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapAnimChannelsSelectBoxObjectAction:object:WebGapAnimChannelsSelectBoxObject", + "selection": "SELECT", + "selectedChannels": 3, + "selectedKeyframes": 0 + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00166" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00165/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00165/manifest.json new file mode 100644 index 00000000..7f302af3 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00165/manifest.json @@ -0,0 +1,69 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00165", + "parentTask": "M16-GAP-00164", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_SELECT_BOX_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00164/manifest.json", + "sha256": "43085e14c5824e9180c68b8ceb29edf5b63d5255766ff89ff8a5843e84724b82" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00165-operator-anim.channels_select_box.blend", + "sha256": "3f11ff84cbe69116b6b008b9c5d12f35e7796c2f571776f33025bb068ab46ccc" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00165.py", + "sha256": "1c3521dd8c3ae4f8ed564391ca8a8d434bfce4e67e78dc0fc19e809aeb030040" + }, + "desktopChecker": { + "path": "tools/web/check-action-channels-select-box-desktop.py", + "sha256": "07de6dfe6d70e4f208e60a4b6f18c8322044f9d0a4b34812a63f36eec6e804b1" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "0414b43b32e90536db313fb3f44c873f28e27d9b410b3916a0b0b1669c5d0429" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "8f420707773bb4057e0348f4f7338df6cef71612f6632b9429f221b8dc9584fc" + }, + "protocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "32745a12fbe5b033024cd98e89c1ae075f4f2ae5541d730bf12a9d93e0b309f6" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "32745a12fbe5b033024cd98e89c1ae075f4f2ae5541d730bf12a9d93e0b309f6" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00165/anim-channels-select-box-desktop-report.json", + "sha256": "3e4d0f296a24bbc60e94edbcdef95d0256311b3c7465ee975b1a072a3553340d" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00165/anim-channels-select-box-local-exact-report.json", + "sha256": "1ea7eff113700fb1c7294d3737dff83df271963f62997583540cc1e998f00e21" + }, + "status": { + "path": "docs/status/M16-GAP-00165.md", + "sha256": "e1248ff14af9e870516f009da7e64fce0b5ae9ca8da87725d11d2f3424e03399" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00165/task-context.json", + "sha256": "63a484301223406881332d310e647407758f09f6c5c3b1d0e9836a404332973f" + } + }, + "nextTask": "M16-GAP-00166" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00165/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00165/task-context.json new file mode 100644 index 00000000..4bb5dc87 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00165/task-context.json @@ -0,0 +1,182 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00165", + "parentTask": "M16-GAP-00164", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.channels_select_box data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.channels_select_box", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00165.py -- tests/files/web/generated/M16-GAP-00165-operator-anim.channels_select_box.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00165", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00165" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2380, + "contextRemainingTokens": 593 + }, + "source": { + "bytes": 7524, + "tokens": 1883 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00165-operator-anim.channels_select_box.blend", + "bytes": 87102, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/generated/M16-GAP-00165.py", + "bytes": 3729, + "reason": "CONTEXT_REMAINING_SPACE" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 227938, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 329398, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00165/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00165.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00165/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00166", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00165.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00164/manifest.json", + "parentStatus": "docs/status/M16-GAP-00164.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00165.md", + "tests/golden/M16-GAP-00164/manifest.json", + "docs/status/M16-GAP-00164.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00164", + "parentTask": "M16-GAP-00163", + "status": "done", + "nextTask": "M16-GAP-00165", + "artifactCount": 14 + }, + "statusSummary": [ + "# M16-GAP-00164 Status", + "status: done", + "task: anim.channels_select_all operator LOCAL_EXACT slice", + "updated: 2026-08-21 America/New_York", + "scope:", + "- Action Editor `anim.channels_select_all` selects all three F-Curve channels without selecting keyframes.", + "evidence:", + "- Blender desktop and WASM/Main expose the same three `location` channels with `selected: true` and unchanged keyframe selection." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1809, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 453 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00165.md", + "bytes": 1809, + "lines": 38, + "tokens": 453 + }, + { + "path": "tests/golden/M16-GAP-00164/manifest.json", + "bytes": 2762, + "lines": 70, + "tokens": 691 + }, + { + "path": "docs/status/M16-GAP-00164.md", + "bytes": 785, + "lines": 19, + "tokens": 197 + } + ], + "sourceTokens": 1883, + "evidenceFiles": 0, + "evidenceBytes": 0, + "evidenceTokens": 0, + "totalTokens": 1883, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 2907, + "serializedContextTokens": 722, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00166/anim-channels-select-filter-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00166/anim-channels-select-filter-desktop-report.json new file mode 100644 index 00000000..04599ee0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00166/anim-channels-select-filter-desktop-report.json @@ -0,0 +1,42 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location" + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location" + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location" + } + ], + "name": "WebGapAnimChannelsSelectFilterObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "filterText": "Location", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00166-operator-anim.channels_select_filter.blend", + "fixtureSha256": "2d21685dd8ae6ad9658d1ee910acb36645d3cea7c6bf0f674b8437790d0df727", + "operation": "ANIM_CHANNELS_SELECT_FILTER_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00166" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00166/anim-channels-select-filter-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00166/anim-channels-select-filter-local-exact-report.json new file mode 100644 index 00000000..c611716c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00166/anim-channels-select-filter-local-exact-report.json @@ -0,0 +1,26 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00166", + "operation": "ANIM_CHANNELS_SELECT_FILTER_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00166-operator-anim.channels_select_filter.blend", + "sha256": "2d21685dd8ae6ad9658d1ee910acb36645d3cea7c6bf0f674b8437790d0df727" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00166/anim-channels-select-filter-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "editor": "DOPE_SHEET", + "filterText": "Location", + "actionId": "action:WebGapAnimChannelsSelectFilterObjectAction:object:WebGapAnimChannelsSelectFilterObject", + "channels": 3 + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00167" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00166/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00166/manifest.json new file mode 100644 index 00000000..0d05ed43 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00166/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00166", + "parentTask": "M16-GAP-00165", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_SELECT_FILTER_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00165/manifest.json", + "sha256": "566a40f28eb860c407435db6253bbb562e22c026977daccf5aca69db6b8831d6" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00166-operator-anim.channels_select_filter.blend", + "sha256": "2d21685dd8ae6ad9658d1ee910acb36645d3cea7c6bf0f674b8437790d0df727" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00166.py", + "sha256": "1689d5a753d6a0e51c9ebd066ef08938342c038568151739d3e10b7e86f52c50" + }, + "desktopChecker": { + "path": "tools/web/check-action-channels-select-filter-desktop.py", + "sha256": "f1893daef821328506372894e8b052d3d7d8e2632a90332bdd7e49725d3a3dd1" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "77489b2425a4c80d476d5f2ba8703aa6b2a5b638059c04f19838fa4587d26ba6" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "36520ff99f27a75d56a17478bfaa19cb11f69ac4d8fc55ea8f586325de41f873" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "4cbb9f33ebba51d29fe4fbf61b3e98d859ee9f74e285f1b30e3b44806f6a77fe" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "4cbb9f33ebba51d29fe4fbf61b3e98d859ee9f74e285f1b30e3b44806f6a77fe" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00166/anim-channels-select-filter-desktop-report.json", + "sha256": "a8a86feb4763e08f655de55c654befa13d42b490ca4e6efc5d6736170f0d6a37" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00166/anim-channels-select-filter-local-exact-report.json", + "sha256": "538167ec546842a9206d6232a213d271dabe96f5801f074b6804a1d14e12e4ba" + }, + "status": { + "path": "docs/status/M16-GAP-00166.md", + "sha256": "212de0356fd48f2696bdf4004758d0bee9c55630a9563adab88c6772b7248d67" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00166/task-context.json", + "sha256": "3ccd5a0066ad1ca475e020ebb4b6eeb724b431b7a6ffc125553b3a6048cb4449" + } + }, + "nextTask": "M16-GAP-00167" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00166/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00166/task-context.json new file mode 100644 index 00000000..a79515a0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00166/task-context.json @@ -0,0 +1,182 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00166", + "parentTask": "M16-GAP-00165", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.channels_select_filter data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.channels_select_filter", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00166.py -- tests/files/web/generated/M16-GAP-00166-operator-anim.channels_select_filter.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00166", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00166" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2385, + "contextRemainingTokens": 595 + }, + "source": { + "bytes": 7519, + "tokens": 1881 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00166-operator-anim.channels_select_filter.blend", + "bytes": 87110, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/generated/M16-GAP-00166.py", + "bytes": 2430, + "reason": "CONTEXT_REMAINING_SPACE" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 228500, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 332943, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00166/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00166.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00166/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00167", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00166.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00165/manifest.json", + "parentStatus": "docs/status/M16-GAP-00165.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00166.md", + "tests/golden/M16-GAP-00165/manifest.json", + "docs/status/M16-GAP-00165.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00165", + "parentTask": "M16-GAP-00164", + "status": "done", + "nextTask": "M16-GAP-00166", + "artifactCount": 14 + }, + "statusSummary": [ + "# M16-GAP-00165 Status", + "status: done", + "task: anim.channels_select_box operator LOCAL_EXACT slice", + "updated: 2026-08-21 America/New_York", + "scope:", + "- Action Editor `anim.channels_select_box` selects all three F-Curve channels without selecting keyframes.", + "evidence:", + "- Blender desktop and WASM/Main expose the same three `location` channels with `selected: true` and unchanged keyframe selection." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1824, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 456 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00166.md", + "bytes": 1824, + "lines": 38, + "tokens": 456 + }, + { + "path": "tests/golden/M16-GAP-00165/manifest.json", + "bytes": 2762, + "lines": 70, + "tokens": 691 + }, + { + "path": "docs/status/M16-GAP-00165.md", + "bytes": 765, + "lines": 19, + "tokens": 192 + } + ], + "sourceTokens": 1881, + "evidenceFiles": 0, + "evidenceBytes": 0, + "evidenceTokens": 0, + "totalTokens": 1881, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 2905, + "serializedContextTokens": 724, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00167/anim-channels-setting-disable-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00167/anim-channels-setting-disable-desktop-report.json new file mode 100644 index 00000000..4871c5cb --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00167/anim-channels-setting-disable-desktop-report.json @@ -0,0 +1,46 @@ +{ + "action": { + "channels": [ + { + "editable": false, + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location" + }, + { + "editable": false, + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location" + }, + { + "editable": false, + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location" + } + ], + "name": "WebGapAnimChannelsSettingDisableObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "disabledChannels": 3, + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00167-operator-anim.channels_setting_disable.blend", + "fixtureSha256": "849ad29b595845b1f7f17dbfab50adc616dcbe0e47c1e57d5238e32e84a3a7b5", + "operation": "ANIM_CHANNELS_SETTING_DISABLE_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "setting": "PROTECT", + "task": "M16-GAP-00167" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00167/anim-channels-setting-disable-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00167/anim-channels-setting-disable-local-exact-report.json new file mode 100644 index 00000000..7bd61eef --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00167/anim-channels-setting-disable-local-exact-report.json @@ -0,0 +1,30 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00167", + "operation": "ANIM_CHANNELS_SETTING_DISABLE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00167-operator-anim.channels_setting_disable.blend", + "sha256": "849ad29b595845b1f7f17dbfab50adc616dcbe0e47c1e57d5238e32e84a3a7b5" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00167/anim-channels-setting-disable-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapAnimChannelsSettingDisableObjectAction:object:WebGapAnimChannelsSettingDisableObject", + "setting": "PROTECT", + "disabledChannels": 3, + "editablePerChannel": [ + false, + false, + false + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00168" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00167/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00167/manifest.json new file mode 100644 index 00000000..233a28ff --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00167/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00167", + "parentTask": "M16-GAP-00166", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_SETTING_DISABLE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00166/manifest.json", + "sha256": "c4b2ed6935d52a7c41c35af45b5e2e7a3e6924dafa2b9e2c6a1aa04bef8f7312" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00167-operator-anim.channels_setting_disable.blend", + "sha256": "849ad29b595845b1f7f17dbfab50adc616dcbe0e47c1e57d5238e32e84a3a7b5" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00167.py", + "sha256": "7b9cd25c07e698fd4f389011a147489fd2b343dea1fd94f14bf16ad78aa237ae" + }, + "desktopChecker": { + "path": "tools/web/check-action-channels-setting-disable-desktop.py", + "sha256": "cd697b916faa275dd6e44698a7c2945b9c070125d0132ce92f28855c447fcc0d" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "919871682670c53a8764a8f5e1906d7aed01aaaccbd6607e95d508f75fc838b5" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "36520ff99f27a75d56a17478bfaa19cb11f69ac4d8fc55ea8f586325de41f873" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "4cbb9f33ebba51d29fe4fbf61b3e98d859ee9f74e285f1b30e3b44806f6a77fe" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "4cbb9f33ebba51d29fe4fbf61b3e98d859ee9f74e285f1b30e3b44806f6a77fe" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00167/anim-channels-setting-disable-desktop-report.json", + "sha256": "9e647359438803ddfd6065611d064e723c5371b3ef696cbfdfdb50c166ab3835" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00167/anim-channels-setting-disable-local-exact-report.json", + "sha256": "c73201d925e7526d25f647870a346976773ffc4cd4abb94325d4cf1261def14d" + }, + "status": { + "path": "docs/status/M16-GAP-00167.md", + "sha256": "fdb2aec90eac4e9fda1907234d7ecda51c2c09ed05f2d23dc2809fe3aeb6c06b" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00167/task-context.json", + "sha256": "496f89ec6d6545cd16d0b787e741e3dcb78d992d308fea0533183214d5325e6a" + } + }, + "nextTask": "M16-GAP-00168" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00167/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00167/task-context.json new file mode 100644 index 00000000..e14cd94e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00167/task-context.json @@ -0,0 +1,182 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00167", + "parentTask": "M16-GAP-00166", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.channels_setting_disable data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.channels_setting_disable", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00167.py -- tests/files/web/generated/M16-GAP-00167-operator-anim.channels_setting_disable.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00167", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00167" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2102, + "contextRemainingTokens": 524 + }, + "source": { + "bytes": 7802, + "tokens": 1952 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00167-operator-anim.channels_setting_disable.blend", + "bytes": 87116, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/generated/M16-GAP-00167.py", + "bytes": 2859, + "reason": "CONTEXT_REMAINING_SPACE" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 228500, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 336371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00167/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00167.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00167/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00168", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00167.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00166/manifest.json", + "parentStatus": "docs/status/M16-GAP-00166.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00167.md", + "tests/golden/M16-GAP-00166/manifest.json", + "docs/status/M16-GAP-00166.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00166", + "parentTask": "M16-GAP-00165", + "status": "done", + "nextTask": "M16-GAP-00167", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00166 Status", + "status: done", + "task: anim.channels_select_filter operator LOCAL_EXACT slice", + "updated: 2026-08-21 America/New_York", + "scope:", + "- Action Editor `anim.channels_select_filter` persists the `Location` channel filter in the Dope Sheet editor workflow.", + "evidence:", + "- Blender desktop and WASM/Main expose the same Action Editor `filterText: \"Location\"` and the same three animation channels." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1834, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 459 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00167.md", + "bytes": 1834, + "lines": 38, + "tokens": 459 + }, + { + "path": "tests/golden/M16-GAP-00166/manifest.json", + "bytes": 2941, + "lines": 74, + "tokens": 736 + }, + { + "path": "docs/status/M16-GAP-00166.md", + "bytes": 859, + "lines": 19, + "tokens": 215 + } + ], + "sourceTokens": 1952, + "evidenceFiles": 0, + "evidenceBytes": 0, + "evidenceTokens": 0, + "totalTokens": 1952, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 2976, + "serializedContextTokens": 725, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00168/anim-channels-setting-enable-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00168/anim-channels-setting-enable-desktop-report.json new file mode 100644 index 00000000..5b03cee6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00168/anim-channels-setting-enable-desktop-report.json @@ -0,0 +1,46 @@ +{ + "action": { + "channels": [ + { + "editable": false, + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location" + }, + { + "editable": false, + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location" + }, + { + "editable": false, + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location" + } + ], + "name": "WebGapAnimChannelsSettingEnableObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "enabledChannels": 3, + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00168-operator-anim.channels_setting_enable.blend", + "fixtureSha256": "7bc30ee108b1f7f9ec5422ac855b1467a8231336cfb67d47898ea6f27618aed6", + "operation": "ANIM_CHANNELS_SETTING_ENABLE_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "setting": "PROTECT", + "task": "M16-GAP-00168" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00168/anim-channels-setting-enable-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00168/anim-channels-setting-enable-local-exact-report.json new file mode 100644 index 00000000..784664e8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00168/anim-channels-setting-enable-local-exact-report.json @@ -0,0 +1,30 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00168", + "operation": "ANIM_CHANNELS_SETTING_ENABLE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00168-operator-anim.channels_setting_enable.blend", + "sha256": "7bc30ee108b1f7f9ec5422ac855b1467a8231336cfb67d47898ea6f27618aed6" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00168/anim-channels-setting-enable-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapAnimChannelsSettingEnableObjectAction:object:WebGapAnimChannelsSettingEnableObject", + "setting": "PROTECT", + "enabledChannels": 3, + "editablePerChannel": [ + false, + false, + false + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00169" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00168/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00168/manifest.json new file mode 100644 index 00000000..221dc811 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00168/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00168", + "parentTask": "M16-GAP-00167", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_SETTING_ENABLE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00167/manifest.json", + "sha256": "a64ad25d06da5c36fe772c5e7777fe5b2f026eae61e32386d553c010f0d497a9" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00168-operator-anim.channels_setting_enable.blend", + "sha256": "7bc30ee108b1f7f9ec5422ac855b1467a8231336cfb67d47898ea6f27618aed6" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00168.py", + "sha256": "b9ac34e412e9f8f8a85fdf9155201cc9e2382c1fb5bfee98a47421ce76b23e9a" + }, + "desktopChecker": { + "path": "tools/web/check-action-channels-setting-enable-desktop.py", + "sha256": "936f925cf68eb27eeb911a5fc8179248201f7fa1fd672053a2fff0745c455e8a" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "6c25411f85f710f10226e4b2933c2c346aab5e9659f9d27a253868c0c972a761" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "36520ff99f27a75d56a17478bfaa19cb11f69ac4d8fc55ea8f586325de41f873" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "4cbb9f33ebba51d29fe4fbf61b3e98d859ee9f74e285f1b30e3b44806f6a77fe" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "4cbb9f33ebba51d29fe4fbf61b3e98d859ee9f74e285f1b30e3b44806f6a77fe" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00168/anim-channels-setting-enable-desktop-report.json", + "sha256": "d2265aaf9aee9d9bcc8a72f66f9878c4f44b4a5c28e5d13ff388c194adac773e" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00168/anim-channels-setting-enable-local-exact-report.json", + "sha256": "68bd2a37e4fb89e130cf7d9fec26e23f60903543b39cc33813b84bf525313817" + }, + "status": { + "path": "docs/status/M16-GAP-00168.md", + "sha256": "e1f398011436d8673616ae1412746b16b92e687a8601ee16d9e01ed5fe9bc9bb" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00168/task-context.json", + "sha256": "30def7e3fbd5e1786203e5c88aa3c5ba22f40af2fb0e9ad1809be6183151683e" + } + }, + "nextTask": "M16-GAP-00169" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00168/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00168/task-context.json new file mode 100644 index 00000000..2423ffa0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00168/task-context.json @@ -0,0 +1,182 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00168", + "parentTask": "M16-GAP-00167", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.channels_setting_enable data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.channels_setting_enable", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00168.py -- tests/files/web/generated/M16-GAP-00168-operator-anim.channels_setting_enable.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00168", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00168" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2212, + "contextRemainingTokens": 552 + }, + "source": { + "bytes": 7692, + "tokens": 1924 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00168-operator-anim.channels_setting_enable.blend", + "bytes": 87113, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/generated/M16-GAP-00168.py", + "bytes": 2705, + "reason": "CONTEXT_REMAINING_SPACE" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 228500, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 339790, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00168/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00168.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00168/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00169", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00168.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00167/manifest.json", + "parentStatus": "docs/status/M16-GAP-00167.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00168.md", + "tests/golden/M16-GAP-00167/manifest.json", + "docs/status/M16-GAP-00167.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00167", + "parentTask": "M16-GAP-00166", + "status": "done", + "nextTask": "M16-GAP-00168", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00167 Status", + "status: done", + "task: anim.channels_setting_disable operator LOCAL_EXACT slice", + "updated: 2026-08-21 America/New_York", + "scope:", + "- Action Editor `anim.channels_setting_disable(type=PROTECT)` disables editability on all three selected F-Curve channels.", + "evidence:", + "- Blender desktop and WASM/Main expose the same three animation channels with `editable: false`." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1829, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 458 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00168.md", + "bytes": 1829, + "lines": 38, + "tokens": 458 + }, + { + "path": "tests/golden/M16-GAP-00167/manifest.json", + "bytes": 2951, + "lines": 74, + "tokens": 738 + }, + { + "path": "docs/status/M16-GAP-00167.md", + "bytes": 744, + "lines": 19, + "tokens": 186 + } + ], + "sourceTokens": 1924, + "evidenceFiles": 0, + "evidenceBytes": 0, + "evidenceTokens": 0, + "totalTokens": 1924, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 2948, + "serializedContextTokens": 725, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00169/anim-channels-setting-toggle-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00169/anim-channels-setting-toggle-desktop-report.json new file mode 100644 index 00000000..b0aaa1f8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00169/anim-channels-setting-toggle-desktop-report.json @@ -0,0 +1,46 @@ +{ + "action": { + "channels": [ + { + "editable": false, + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location" + }, + { + "editable": false, + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location" + }, + { + "editable": false, + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location" + } + ], + "name": "WebGapAnimChannelsSettingToggleObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00169-operator-anim.channels_setting_toggle.blend", + "fixtureSha256": "f346c3480ca423d8174798cf97020fe0e6659d54c5c21fff1b5028b159143560", + "operation": "ANIM_CHANNELS_SETTING_TOGGLE_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "setting": "PROTECT", + "task": "M16-GAP-00169", + "toggledChannels": 3 +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00169/anim-channels-setting-toggle-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00169/anim-channels-setting-toggle-local-exact-report.json new file mode 100644 index 00000000..b362b9c1 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00169/anim-channels-setting-toggle-local-exact-report.json @@ -0,0 +1,30 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00169", + "operation": "ANIM_CHANNELS_SETTING_TOGGLE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00169-operator-anim.channels_setting_toggle.blend", + "sha256": "f346c3480ca423d8174798cf97020fe0e6659d54c5c21fff1b5028b159143560" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00169/anim-channels-setting-toggle-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapAnimChannelsSettingToggleObjectAction:object:WebGapAnimChannelsSettingToggleObject", + "setting": "PROTECT", + "toggledChannels": 3, + "editablePerChannel": [ + false, + false, + false + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00170" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00169/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00169/manifest.json new file mode 100644 index 00000000..87876e43 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00169/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00169", + "parentTask": "M16-GAP-00168", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_SETTING_TOGGLE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00168/manifest.json", + "sha256": "b912c792a695d2b5cad4ce15a0c2628922f5e0f4b37a8a1502be9c6649dc3ea3" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00169-operator-anim.channels_setting_toggle.blend", + "sha256": "f346c3480ca423d8174798cf97020fe0e6659d54c5c21fff1b5028b159143560" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00169.py", + "sha256": "06268638700a3aa6312e8cc86500e3eb3eb0b3271ecc8da9d8cce3db0af33b9c" + }, + "desktopChecker": { + "path": "tools/web/check-action-channels-setting-toggle-desktop.py", + "sha256": "1282a6f5e4743fc78f74cb8e76025f5cbc0e5adbbb9e2335c617e8b29f35fdbd" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "bf0898e9f4633bba9bb4fcafad0f3b77e283579df5c44ea0b1d3fb1d97a4db59" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "36520ff99f27a75d56a17478bfaa19cb11f69ac4d8fc55ea8f586325de41f873" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "4cbb9f33ebba51d29fe4fbf61b3e98d859ee9f74e285f1b30e3b44806f6a77fe" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "4cbb9f33ebba51d29fe4fbf61b3e98d859ee9f74e285f1b30e3b44806f6a77fe" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00169/anim-channels-setting-toggle-desktop-report.json", + "sha256": "6bc9a6a97c53a6b4fa510c0b670bdf341ec4f82d0586a21c04438eaeda9a10f6" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00169/anim-channels-setting-toggle-local-exact-report.json", + "sha256": "e493b763baef0ff2d5e2782107a92b66db63d0ec82ffd8c677df7d30f68c76fe" + }, + "status": { + "path": "docs/status/M16-GAP-00169.md", + "sha256": "6270aa94f27514e4ce112f0daa7cc7fc4f6507d53055bc7f42f5a0e9fe254e1a" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00169/task-context.json", + "sha256": "39bb03cf425db496671100f840eb671a90b9f0802d524c6718869ee436a20b1a" + } + }, + "nextTask": "M16-GAP-00170" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00169/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00169/task-context.json new file mode 100644 index 00000000..803ad728 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00169/task-context.json @@ -0,0 +1,182 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00169", + "parentTask": "M16-GAP-00168", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.channels_setting_toggle data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.channels_setting_toggle", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00169.py -- tests/files/web/generated/M16-GAP-00169-operator-anim.channels_setting_toggle.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00169", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00169" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2254, + "contextRemainingTokens": 562 + }, + "source": { + "bytes": 7650, + "tokens": 1914 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00169-operator-anim.channels_setting_toggle.blend", + "bytes": 87107, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/generated/M16-GAP-00169.py", + "bytes": 2705, + "reason": "CONTEXT_REMAINING_SPACE" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 228500, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 343209, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00169/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00169.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00169/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00170", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00169.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00168/manifest.json", + "parentStatus": "docs/status/M16-GAP-00168.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00169.md", + "tests/golden/M16-GAP-00168/manifest.json", + "docs/status/M16-GAP-00168.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00168", + "parentTask": "M16-GAP-00167", + "status": "done", + "nextTask": "M16-GAP-00169", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00168 Status", + "status: done", + "task: anim.channels_setting_enable operator LOCAL_EXACT slice", + "updated: 2026-08-21 America/New_York", + "scope:", + "- Action Editor `anim.channels_setting_enable(type=PROTECT)` protects all three selected F-Curve channels.", + "evidence:", + "- Blender desktop and WASM/Main expose the same three animation channels with `editable: false`." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1829, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 458 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00169.md", + "bytes": 1829, + "lines": 38, + "tokens": 458 + }, + { + "path": "tests/golden/M16-GAP-00168/manifest.json", + "bytes": 2946, + "lines": 74, + "tokens": 737 + }, + { + "path": "docs/status/M16-GAP-00168.md", + "bytes": 707, + "lines": 19, + "tokens": 177 + } + ], + "sourceTokens": 1914, + "evidenceFiles": 0, + "evidenceBytes": 0, + "evidenceTokens": 0, + "totalTokens": 1914, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 2938, + "serializedContextTokens": 725, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00170/anim-channels-ungroup-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00170/anim-channels-ungroup-desktop-report.json new file mode 100644 index 00000000..e1ee98e8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00170/anim-channels-ungroup-desktop-report.json @@ -0,0 +1,47 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "group": null, + "index": 0, + "path": "location" + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "group": null, + "index": 1, + "path": "location" + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "group": null, + "index": 2, + "path": "location" + } + ], + "groups": [], + "name": "WebGapAnimChannelsUngroupObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00170-operator-anim.channels_ungroup.blend", + "fixtureSha256": "edc38bf325e129aa9dc1ff8f1563aef552eff06acb64d3f1dcd539277db18b6b", + "groups": 0, + "operation": "ANIM_CHANNELS_UNGROUP_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00170", + "ungroupedChannels": 3 +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00170/anim-channels-ungroup-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00170/anim-channels-ungroup-local-exact-report.json new file mode 100644 index 00000000..51e31e40 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00170/anim-channels-ungroup-local-exact-report.json @@ -0,0 +1,30 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00170", + "operation": "ANIM_CHANNELS_UNGROUP_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00170-operator-anim.channels_ungroup.blend", + "sha256": "edc38bf325e129aa9dc1ff8f1563aef552eff06acb64d3f1dcd539277db18b6b" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00170/anim-channels-ungroup-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapAnimChannelsUngroupObjectAction:object:WebGapAnimChannelsUngroupObject", + "groups": 0, + "ungroupedChannels": 3, + "groupPerChannel": [ + null, + null, + null + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00171" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00170/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00170/manifest.json new file mode 100644 index 00000000..010a19fb --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00170/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00170", + "parentTask": "M16-GAP-00169", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_UNGROUP_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00169/manifest.json", + "sha256": "c01454bd7302b6855d7683a763dd74b35e7b612cb1ab1e8fba633b2ef5c6461c" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00170-operator-anim.channels_ungroup.blend", + "sha256": "edc38bf325e129aa9dc1ff8f1563aef552eff06acb64d3f1dcd539277db18b6b" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00170.py", + "sha256": "9d8ad51d5a174ccd376baf67ce5323c59af5306c74d5da18bdb1c44df2a30c42" + }, + "desktopChecker": { + "path": "tools/web/check-action-channels-ungroup-desktop.py", + "sha256": "169f95d2dd14592f554642bfd62f299568a08efbc8542a994fe433ff059e0675" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "d3cb22e32265150266f76a1f28c8a812de11247bf55a0755cf778490c97691a9" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "36520ff99f27a75d56a17478bfaa19cb11f69ac4d8fc55ea8f586325de41f873" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "4cbb9f33ebba51d29fe4fbf61b3e98d859ee9f74e285f1b30e3b44806f6a77fe" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "4cbb9f33ebba51d29fe4fbf61b3e98d859ee9f74e285f1b30e3b44806f6a77fe" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00170/anim-channels-ungroup-desktop-report.json", + "sha256": "6da3c452af5fdefcbb5a7390e5e7effe440dbb8602bc7c4ee7d57f38e1f58f05" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00170/anim-channels-ungroup-local-exact-report.json", + "sha256": "4de0a7349f21103b953ebbd860f983d9c199fe682af77fc2b4198fc03993ec53" + }, + "status": { + "path": "docs/status/M16-GAP-00170.md", + "sha256": "07ff672b4319741a3e8fefb9b614b1ce3176a957212200d84600e99e8c65848b" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00170/task-context.json", + "sha256": "7a62f73abdd10efce2e0decb2bb437f62973fdd572ce199ec637d54433a95d8f" + } + }, + "nextTask": "M16-GAP-00171" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00170/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00170/task-context.json new file mode 100644 index 00000000..c673e39b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00170/task-context.json @@ -0,0 +1,182 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00170", + "parentTask": "M16-GAP-00169", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.channels_ungroup data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.channels_ungroup", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00170.py -- tests/files/web/generated/M16-GAP-00170-operator-anim.channels_ungroup.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00170", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00170" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2259, + "contextRemainingTokens": 563 + }, + "source": { + "bytes": 7645, + "tokens": 1913 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00170-operator-anim.channels_ungroup.blend", + "bytes": 87064, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/generated/M16-GAP-00170.py", + "bytes": 2873, + "reason": "CONTEXT_REMAINING_SPACE" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 228500, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 346581, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00170/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00170.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00170/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00171", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00170.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00169/manifest.json", + "parentStatus": "docs/status/M16-GAP-00169.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00170.md", + "tests/golden/M16-GAP-00169/manifest.json", + "docs/status/M16-GAP-00169.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00169", + "parentTask": "M16-GAP-00168", + "status": "done", + "nextTask": "M16-GAP-00170", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00169 Status", + "status: done", + "task: anim.channels_setting_toggle operator LOCAL_EXACT slice", + "updated: 2026-08-21 America/New_York", + "scope:", + "- Action Editor `anim.channels_setting_toggle(type=PROTECT)` toggles protection on all three selected F-Curve channels.", + "evidence:", + "- Blender desktop and WASM/Main expose the same three animation channels with `editable: false` after the toggle." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1794, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 449 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00170.md", + "bytes": 1794, + "lines": 38, + "tokens": 449 + }, + { + "path": "tests/golden/M16-GAP-00169/manifest.json", + "bytes": 2946, + "lines": 74, + "tokens": 737 + }, + { + "path": "docs/status/M16-GAP-00169.md", + "bytes": 737, + "lines": 19, + "tokens": 185 + } + ], + "sourceTokens": 1913, + "evidenceFiles": 0, + "evidenceBytes": 0, + "evidenceTokens": 0, + "totalTokens": 1913, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 2937, + "serializedContextTokens": 719, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00171/anim-channels-view-selected-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00171/anim-channels-view-selected-desktop-report.json new file mode 100644 index 00000000..9efe8471 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00171/anim-channels-view-selected-desktop-report.json @@ -0,0 +1,59 @@ +{ + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location", + "selected": true + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location", + "selected": true + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location", + "selected": true + } + ], + "name": "WebGapAnimChannelsViewSelectedObjectAction" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00171-operator-anim.channels_view_selected.blend", + "fixtureSha256": "31ea53097e3624a267b733b2d07c768aaf588d72c87268b7e5980371dfcb57ae", + "operation": "ANIM_CHANNELS_VIEW_SELECTED_DESKTOP", + "saveReopen": "EXACT", + "schemaVersion": 1, + "selectedChannels": 3, + "task": "M16-GAP-00171", + "view2d": { + "cur": { + "xmax": 3.833333, + "xmin": 0.166667, + "ymax": 0.0, + "ymin": -956.0 + }, + "mask": { + "xmax": 1577, + "xmin": 0, + "ymax": 955, + "ymin": 0 + } + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00171/anim-channels-view-selected-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00171/anim-channels-view-selected-local-exact-report.json new file mode 100644 index 00000000..e49c9fbe --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00171/anim-channels-view-selected-local-exact-report.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00171", + "operation": "ANIM_CHANNELS_VIEW_SELECTED_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00171-operator-anim.channels_view_selected.blend", + "sha256": "31ea53097e3624a267b733b2d07c768aaf588d72c87268b7e5980371dfcb57ae" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00171/anim-channels-view-selected-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapAnimChannelsViewSelectedObjectAction:object:WebGapAnimChannelsViewSelectedObject", + "selectedChannels": 3, + "selectedPerChannel": [ + true, + true, + true + ], + "view2d": { + "cur": { + "xmax": 3.833333, + "xmin": 0.166667, + "ymax": 0, + "ymin": -956 + }, + "mask": { + "xmax": 1577, + "xmin": 0, + "ymax": 955, + "ymin": 0 + } + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00172" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00171/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00171/manifest.json new file mode 100644 index 00000000..e5fbae94 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00171/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00171", + "parentTask": "M16-GAP-00170", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CHANNELS_VIEW_SELECTED_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00170/manifest.json", + "sha256": "8e7ba1b5b85e1911718eca4413934fe4bb4d3ea2d644413dd6d93d297e95401d" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00171-operator-anim.channels_view_selected.blend", + "sha256": "31ea53097e3624a267b733b2d07c768aaf588d72c87268b7e5980371dfcb57ae" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00171.py", + "sha256": "a3ae3c94e453977cc8caa62b725896e352ef763e5ca8a03ac1ee8d9a95d32ddb" + }, + "desktopChecker": { + "path": "tools/web/check-action-channels-view-selected-desktop.py", + "sha256": "c7cafb9739ec0838ef9a838810066faf1884bb4927364e01c99c271e4da28630" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "7c56355bf54d4be9f850aa0e83cc8c7ce117ae4a76df95fac1f997bf888d5057" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "8252839a7f84cf69e0e50ec4cbb44712734e4f110d59fdbd7166a49ab0099cbf" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "bd04fdf8e0d403fa37e9ac327de384506caa615cab88b078ab9aa9cf783c54e2" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "bd04fdf8e0d403fa37e9ac327de384506caa615cab88b078ab9aa9cf783c54e2" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00171/anim-channels-view-selected-desktop-report.json", + "sha256": "20a3371ebf683cc16911820be35f1c4ebf8af48132339574937899d267568fd1" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00171/anim-channels-view-selected-local-exact-report.json", + "sha256": "2829a891ac2d66ca3d5b0a4fac8b88bfe267280c8fb05f080b49e3e2cf880c8d" + }, + "status": { + "path": "docs/status/M16-GAP-00171.md", + "sha256": "79b24742a11e7456b82154b13ccae7d2b57dc4b3ed4493d77ad4fc36c894e443" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00171/task-context.json", + "sha256": "699e03fa824e973741bcba370b5de0f0c27b8462b7c205287878dc5fed8565d6" + } + }, + "nextTask": "M16-GAP-00172" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00171/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00171/task-context.json new file mode 100644 index 00000000..f2407304 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00171/task-context.json @@ -0,0 +1,182 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00171", + "parentTask": "M16-GAP-00170", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.channels_view_selected data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.channels_view_selected", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00171.py -- tests/files/web/generated/M16-GAP-00171-operator-anim.channels_view_selected.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00171", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00171" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2300, + "contextRemainingTokens": 574 + }, + "source": { + "bytes": 7604, + "tokens": 1902 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00171-operator-anim.channels_view_selected.blend", + "bytes": 87134, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/generated/M16-GAP-00171.py", + "bytes": 2916, + "reason": "CONTEXT_REMAINING_SPACE" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 228675, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 350601, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00171/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00171.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00171/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00172", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00171.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00170/manifest.json", + "parentStatus": "docs/status/M16-GAP-00170.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00171.md", + "tests/golden/M16-GAP-00170/manifest.json", + "docs/status/M16-GAP-00170.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00170", + "parentTask": "M16-GAP-00169", + "status": "done", + "nextTask": "M16-GAP-00171", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00170 Status", + "status: done", + "task: anim.channels_ungroup operator LOCAL_EXACT slice", + "updated: 2026-08-21 America/New_York", + "scope:", + "- Action Editor `anim.channels_ungroup` removes all selected F-Curves from their Action Group.", + "evidence:", + "- Blender desktop and WASM/Main expose the same three animation channels with no group after ungrouping." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1824, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 456 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00171.md", + "bytes": 1824, + "lines": 38, + "tokens": 456 + }, + { + "path": "tests/golden/M16-GAP-00170/manifest.json", + "bytes": 2911, + "lines": 74, + "tokens": 728 + }, + { + "path": "docs/status/M16-GAP-00170.md", + "bytes": 701, + "lines": 19, + "tokens": 176 + } + ], + "sourceTokens": 1902, + "evidenceFiles": 0, + "evidenceBytes": 0, + "evidenceTokens": 0, + "totalTokens": 1902, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 2926, + "serializedContextTokens": 724, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00172/anim-clear-useless-actions-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00172/anim-clear-useless-actions-desktop-report.json new file mode 100644 index 00000000..ab07ee46 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00172/anim-clear-useless-actions-desktop-report.json @@ -0,0 +1,81 @@ +{ + "actions": { + "WebGapAnimClearUselessLibraryAction": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location" + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location" + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location" + } + ], + "fakeUser": true, + "name": "WebGapAnimClearUselessLibraryAction", + "users": 1 + }, + "WebGapAnimClearUselessUsedAction": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "location" + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 1, + "path": "location" + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 2, + "path": "location" + } + ], + "fakeUser": false, + "name": "WebGapAnimClearUselessUsedAction", + "users": 1 + } + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00172-operator-anim.clear_useless_actions.blend", + "fixtureSha256": "f5467c45c551de275b2a97c813b82fc8cf2dd5ae4fe93a5a3f07dd22bd4a8b79", + "operation": "ANIM_CLEAR_USELESS_ACTIONS_DESKTOP", + "removedEmptyAction": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00172", + "usedAction": "WebGapAnimClearUselessUsedAction" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00172/anim-clear-useless-actions-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00172/anim-clear-useless-actions-local-exact-report.json new file mode 100644 index 00000000..98141f5f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00172/anim-clear-useless-actions-local-exact-report.json @@ -0,0 +1,31 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00172", + "operation": "ANIM_CLEAR_USELESS_ACTIONS_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00172-operator-anim.clear_useless_actions.blend", + "sha256": "f5467c45c551de275b2a97c813b82fc8cf2dd5ae4fe93a5a3f07dd22bd4a8b79" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00172/anim-clear-useless-actions-desktop-report.json", + "saveReopen": "EXACT" + }, + "wasm": { + "status": "EXACT", + "preservedActions": [ + "action:WebGapAnimClearUselessUsedAction:object:WebGapAnimClearUselessUsedObject", + "action:WebGapAnimClearUselessLibraryAction:unlinked" + ], + "unlinkedAction": "action:WebGapAnimClearUselessLibraryAction:unlinked", + "channelsPerAction": [ + 3, + 3 + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00173" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00172/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00172/manifest.json new file mode 100644 index 00000000..42bca49b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00172/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00172", + "parentTask": "M16-GAP-00171", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_CLEAR_USELESS_ACTIONS_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00171/manifest.json", + "sha256": "2a79fd4ac530776054c0f81321555a034af501a9ba90184df637a6eeda7a1258" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00172-operator-anim.clear_useless_actions.blend", + "sha256": "f5467c45c551de275b2a97c813b82fc8cf2dd5ae4fe93a5a3f07dd22bd4a8b79" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00172.py", + "sha256": "61dcbd69b1d6a3c88eb0c1d0e9c40499730a8e006e160d83b2d1f1da55b02ad8" + }, + "desktopChecker": { + "path": "tools/web/check-action-clear-useless-actions-desktop.py", + "sha256": "942289d85bf2a716e5c7283471141b479fc68d086e5835cd08e65411ca76a7e5" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "4593b0ccb5ad682df1c96bb48dcaa008041ed0fd441ab343dbd81992bb1e9263" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "8252839a7f84cf69e0e50ec4cbb44712734e4f110d59fdbd7166a49ab0099cbf" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "bd04fdf8e0d403fa37e9ac327de384506caa615cab88b078ab9aa9cf783c54e2" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "bd04fdf8e0d403fa37e9ac327de384506caa615cab88b078ab9aa9cf783c54e2" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00172/anim-clear-useless-actions-desktop-report.json", + "sha256": "d2b1784129a81b79ef30e8203ab1192613da16bdca25b15f18ada408d355a410" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00172/anim-clear-useless-actions-local-exact-report.json", + "sha256": "c7cfbd670b09aa46a4597867af4d8e3de6c14030dac5c9d5f21f09a9db789973" + }, + "status": { + "path": "docs/status/M16-GAP-00172.md", + "sha256": "7b6f81442dfb91ad7eaafcd293dd8cfecde3750f2d9ad50b6a5d8b19e4430846" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00172/task-context.json", + "sha256": "e502eadd8178060357899c10e31d70ad63553c927ca240773ee7469466ee0730" + } + }, + "nextTask": "M16-GAP-00173" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00172/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00172/task-context.json new file mode 100644 index 00000000..d9d4e9fe --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00172/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00172", + "parentTask": "M16-GAP-00171", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.clear_useless_actions data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.clear_useless_actions", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00172.py -- tests/files/web/generated/M16-GAP-00172-operator-anim.clear_useless_actions.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00172", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00172" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00172.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2277, + "contextRemainingTokens": 568 + }, + "source": { + "bytes": 7627, + "tokens": 1908 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00172.py", + "bytes": 1988, + "tokens": 497 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00172-operator-anim.clear_useless_actions.blend", + "bytes": 87523, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 228675, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 354404, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00172/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00172.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00172/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1988, + "tokens": 497 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00173", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00172.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00171/manifest.json", + "parentStatus": "docs/status/M16-GAP-00171.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00172.md", + "tests/golden/M16-GAP-00171/manifest.json", + "docs/status/M16-GAP-00171.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00171", + "parentTask": "M16-GAP-00170", + "status": "done", + "nextTask": "M16-GAP-00172", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00171 Status", + "status: done", + "task: anim.channels_view_selected operator LOCAL_EXACT slice", + "updated: 2026-08-21 America/New_York", + "scope:", + "- Action Editor `anim.channels_view_selected` preserves the three selected F-Curves and exposes the resulting `view2d` state.", + "evidence:", + "- Blender desktop and WASM/Main expose the same three selected animation channels and the same six-decimal normalized Action Editor `view2d` bounds." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1819, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 455 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00172.md", + "bytes": 1819, + "lines": 38, + "tokens": 455 + }, + { + "path": "tests/golden/M16-GAP-00171/manifest.json", + "bytes": 2941, + "lines": 74, + "tokens": 736 + }, + { + "path": "docs/status/M16-GAP-00171.md", + "bytes": 699, + "lines": 18, + "tokens": 175 + } + ], + "sourceTokens": 1908, + "evidenceFiles": 1, + "evidenceBytes": 1988, + "evidenceTokens": 497, + "totalTokens": 2405, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3429, + "serializedContextTokens": 759, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00173/anim-copy-driver-button-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00173/anim-copy-driver-button-desktop-report.json new file mode 100644 index 00000000..a93ece76 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00173/anim-copy-driver-button-desktop-report.json @@ -0,0 +1,21 @@ +{ + "blenderVersion": "5.2.0 LTS", + "drivers": [ + { + "expression": "frame * 2.0 + 1.0", + "index": 0, + "path": "[\"drive_target\"]", + "type": "SCRIPTED", + "variableCount": 0 + } + ], + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00173-operator-anim.copy_driver_button.blend", + "fixtureSha256": "473f5f6ddb99f8244bb9218bf3bf9a5f7b9b6e23847bdd546c22427e904de84e", + "mainMutation": "NONE", + "operation": "ANIM_COPY_DRIVER_BUTTON_DESKTOP", + "operatorStatus": "CANCELLED", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00173", + "value": 3.0 +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00173/anim-copy-driver-button-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00173/anim-copy-driver-button-local-exact-report.json new file mode 100644 index 00000000..d0cab826 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00173/anim-copy-driver-button-local-exact-report.json @@ -0,0 +1,39 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00173", + "operation": "ANIM_COPY_DRIVER_BUTTON_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00173-operator-anim.copy_driver_button.blend", + "sha256": "473f5f6ddb99f8244bb9218bf3bf9a5f7b9b6e23847bdd546c22427e904de84e" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00173/anim-copy-driver-button-desktop-report.json", + "saveReopen": "EXACT", + "operatorStatus": "CANCELLED", + "mainMutation": "NONE" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapAnimCopyDriverButtonObject", + "drivers": [ + { + "arrayIndex": 0, + "editable": true, + "enabled": true, + "expression": "frame * 2.0 + 1.0", + "flags": 8, + "influence": 0, + "path": "[\"drive_target\"]", + "type": "SCRIPTED", + "typeCode": 1, + "variables": [] + } + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00173" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00173/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00173/manifest.json new file mode 100644 index 00000000..69271b03 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00173/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00173", + "parentTask": "M16-GAP-00172", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_COPY_DRIVER_BUTTON_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00172/manifest.json", + "sha256": "476b7ab930abbfdaa98e36944453dfe2b321f841e9d9402f2c23ec230f6b2d48" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00173-operator-anim.copy_driver_button.blend", + "sha256": "473f5f6ddb99f8244bb9218bf3bf9a5f7b9b6e23847bdd546c22427e904de84e" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00173.py", + "sha256": "6b8a666c9683a87182c0a35c6cdbf54f4fab873c743898e66f8ae4eef7043829" + }, + "desktopChecker": { + "path": "tools/web/check-action-copy-driver-button-desktop.py", + "sha256": "12c6c2af98710a4989241e33383876b381c697320125d23508d87e2a78eacead" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "fb8c9410e3ef4e18aa89e3072238b6eafc054b9f40b414d74cfec36fb57d9c10" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00173/anim-copy-driver-button-desktop-report.json", + "sha256": "ba54f7de66ecfc9fb100010d28b4d26b61b585af83a8981ff1c9a77869cacb37" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00173/anim-copy-driver-button-local-exact-report.json", + "sha256": "561380ce0b0a8d06afe41a63c4c86e3c990ff0fd4fb08aae1433b4810377752e" + }, + "status": { + "path": "docs/status/M16-GAP-00173.md", + "sha256": "b97b46a2f391fd6c00adb3369652709f1fa447a9a05a931a0817ef81800805b6" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00173/task-context.json", + "sha256": "72c30f4fe3fefec72959112af15987a0d1fa85483ea1a465f980584c68fdef9d" + } + }, + "nextTask": "M16-GAP-00174" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00173/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00173/task-context.json new file mode 100644 index 00000000..5e643712 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00173/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00173", + "parentTask": "M16-GAP-00172", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.copy_driver_button data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.copy_driver_button", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00173.py -- tests/files/web/generated/M16-GAP-00173-operator-anim.copy_driver_button.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00173", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00173" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00173.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2278, + "contextRemainingTokens": 569 + }, + "source": { + "bytes": 7626, + "tokens": 1907 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00173.py", + "bytes": 1166, + "tokens": 292 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00173-operator-anim.copy_driver_button.blend", + "bytes": 86616, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 231498, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 357903, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00173/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00173.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00173/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1166, + "tokens": 292 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00174", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00173.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00172/manifest.json", + "parentStatus": "docs/status/M16-GAP-00172.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00173.md", + "tests/golden/M16-GAP-00172/manifest.json", + "docs/status/M16-GAP-00172.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00172", + "parentTask": "M16-GAP-00171", + "status": "done", + "nextTask": "M16-GAP-00173", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00172 Status", + "status: done", + "task: anim.clear_useless_actions operator LOCAL_EXACT slice", + "updated: 2026-08-21 America/New_York", + "scope:", + "- `anim.clear_useless_actions` removes the fake-user-only Action with no F-Curves while preserving the used Action and the fake-user Action library with F-Curves.", + "evidence:", + "- Blender desktop and WASM/Main expose the same two preserved Actions, each with three location channels and frames 1, 3, and 5; the empty Action is absent." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1804, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 451 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00173.md", + "bytes": 1804, + "lines": 38, + "tokens": 451 + }, + { + "path": "tests/golden/M16-GAP-00172/manifest.json", + "bytes": 2936, + "lines": 74, + "tokens": 734 + }, + { + "path": "docs/status/M16-GAP-00172.md", + "bytes": 718, + "lines": 18, + "tokens": 180 + } + ], + "sourceTokens": 1907, + "evidenceFiles": 1, + "evidenceBytes": 1166, + "evidenceTokens": 292, + "totalTokens": 2199, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3223, + "serializedContextTokens": 756, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00174/anim-driver-button-add-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00174/anim-driver-button-add-desktop-report.json new file mode 100644 index 00000000..77a716cc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00174/anim-driver-button-add-desktop-report.json @@ -0,0 +1,23 @@ +{ + "blenderVersion": "5.2.0 LTS", + "drivers": [ + { + "expression": "var + 4.5", + "index": 0, + "path": "[\"drive_target\"]", + "type": "SCRIPTED", + "variableCount": 1 + } + ], + "evidenceStatus": "PRESERVED", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00174-operator-anim.driver_button_add.blend", + "fixtureSha256": "088331e435e3f43c0db5077f2fff300f381db761076ceaa922f21ec599041221", + "mainMutation": "DRIVER_ADDED", + "operation": "ANIM_DRIVER_BUTTON_ADD_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00174", + "value": 4.5 +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00174/anim-driver-button-add-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00174/anim-driver-button-add-local-exact-report.json new file mode 100644 index 00000000..5b385f42 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00174/anim-driver-button-add-local-exact-report.json @@ -0,0 +1,46 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00174", + "operation": "ANIM_DRIVER_BUTTON_ADD_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00174-operator-anim.driver_button_add.blend", + "sha256": "088331e435e3f43c0db5077f2fff300f381db761076ceaa922f21ec599041221" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00174/anim-driver-button-add-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "DRIVER_ADDED" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapAnimDriverButtonAddObject", + "drivers": [ + { + "arrayIndex": 0, + "editable": true, + "enabled": true, + "expression": "var + 4.5", + "flags": 16, + "influence": 0, + "path": "[\"drive_target\"]", + "type": "SCRIPTED", + "typeCode": 1, + "variables": [ + { + "name": "var", + "targetCount": 1, + "type": 3 + } + ] + } + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00175" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00174/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00174/manifest.json new file mode 100644 index 00000000..e71cec2b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00174/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00174", + "parentTask": "M16-GAP-00173", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_DRIVER_BUTTON_ADD_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00173/manifest.json", + "sha256": "c9c0a4a7126ac3226a3cd4a7588ec4b39eda809f1e18b607940b0db2bfac73ab" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00174-operator-anim.driver_button_add.blend", + "sha256": "088331e435e3f43c0db5077f2fff300f381db761076ceaa922f21ec599041221" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00174.py", + "sha256": "95bc46b2ea19b5a7012cd75c885a87eb7ea8ad79fbab0b10841205889e4381fc" + }, + "desktopChecker": { + "path": "tools/web/check-action-driver-button-add-desktop.py", + "sha256": "154a9e8eb687299b1279c6c8c6d30a6658650bf224a22312efba65f782ffcd7c" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "1983afecfab4280556e4d4210f9b8d50975ea20cdfb31439c27ea4c324bbb7a8" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00174/anim-driver-button-add-desktop-report.json", + "sha256": "ec69ea475f22b9c49318c7bf984200c513e6841b953d837f1cbfc925fe53307b" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00174/anim-driver-button-add-local-exact-report.json", + "sha256": "755195e7c3c31c8d3cf19cd51f569a25d0d694312c32101cea49749a15fdb3ed" + }, + "status": { + "path": "docs/status/M16-GAP-00174.md", + "sha256": "ab5ff18f67b8aeae1b2c2e41b15f9d0a27eb0db61904f07a582b77b9a6576782" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00174/task-context.json", + "sha256": "6a10343b930d4e375e39b8ce1b6d1ffba2d3c535daa70bf49f5c323568f1d500" + } + }, + "nextTask": "M16-GAP-00175" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00174/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00174/task-context.json new file mode 100644 index 00000000..de84ac84 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00174/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00174", + "parentTask": "M16-GAP-00173", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.driver_button_add data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.driver_button_add", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00174.py -- tests/files/web/generated/M16-GAP-00174-operator-anim.driver_button_add.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00174", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00174" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00174.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2082, + "contextRemainingTokens": 519 + }, + "source": { + "bytes": 7822, + "tokens": 1957 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00174.py", + "bytes": 920, + "tokens": 230 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00174-operator-anim.driver_button_add.blend", + "bytes": 86672, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 231498, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 361680, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00174/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00174.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00174/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 920, + "tokens": 230 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00175", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00174.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00173/manifest.json", + "parentStatus": "docs/status/M16-GAP-00173.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00174.md", + "tests/golden/M16-GAP-00173/manifest.json", + "docs/status/M16-GAP-00173.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00173", + "parentTask": "M16-GAP-00172", + "status": "done", + "nextTask": "M16-GAP-00174", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00173 Status", + "status: done", + "task: anim.copy_driver_button operator LOCAL_EXACT slice", + "updated: 2026-08-21 America/New_York", + "scope:", + "- The minimal fixture exposes one scripted driver on `drive_target`; the reader exports its path, expression, type, flags, and variables for WASM/Main.", + "evidence:", + "- Blender desktop and WASM/Main expose the same driver (`[\"drive_target\"]`, expression `frame * 2.0 + 1.0`, type `SCRIPTED`), with value `3.0`." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1799, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 450 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00174.md", + "bytes": 1799, + "lines": 38, + "tokens": 450 + }, + { + "path": "tests/golden/M16-GAP-00173/manifest.json", + "bytes": 2921, + "lines": 74, + "tokens": 731 + }, + { + "path": "docs/status/M16-GAP-00173.md", + "bytes": 934, + "lines": 19, + "tokens": 234 + } + ], + "sourceTokens": 1957, + "evidenceFiles": 1, + "evidenceBytes": 920, + "evidenceTokens": 230, + "totalTokens": 2187, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3211, + "serializedContextTokens": 755, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00175/anim-driver-button-edit-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00175/anim-driver-button-edit-desktop-report.json new file mode 100644 index 00000000..dba9ed9e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00175/anim-driver-button-edit-desktop-report.json @@ -0,0 +1,22 @@ +{ + "blenderVersion": "5.2.0 LTS", + "drivers": [ + { + "expression": "frame * 2.5 + 1.25", + "index": 0, + "path": "[\"drive_target\"]", + "type": "SCRIPTED", + "variableCount": 0 + } + ], + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00175-operator-anim.driver_button_edit.blend", + "fixtureSha256": "40ee0435bc330c7d1baa8d40150f2cc4f62ec4cfd195cce2e0e73ad006f7131a", + "mainMutation": "NONE", + "operation": "ANIM_DRIVER_BUTTON_EDIT_DESKTOP", + "operatorStatus": "INTERFACE", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00175", + "value": 3.75 +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00175/anim-driver-button-edit-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00175/anim-driver-button-edit-local-exact-report.json new file mode 100644 index 00000000..9936243e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00175/anim-driver-button-edit-local-exact-report.json @@ -0,0 +1,40 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00175", + "operation": "ANIM_DRIVER_BUTTON_EDIT_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00175-operator-anim.driver_button_edit.blend", + "sha256": "40ee0435bc330c7d1baa8d40150f2cc4f62ec4cfd195cce2e0e73ad006f7131a" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00175/anim-driver-button-edit-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "INTERFACE", + "mainMutation": "NONE" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapAnimDriverButtonEditObject", + "drivers": [ + { + "arrayIndex": 0, + "editable": true, + "enabled": true, + "expression": "frame * 2.5 + 1.25", + "flags": 8, + "influence": 0, + "path": "[\"drive_target\"]", + "type": "SCRIPTED", + "typeCode": 1, + "variables": [] + } + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00176" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00175/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00175/manifest.json new file mode 100644 index 00000000..f2f05f5c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00175/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00175", + "parentTask": "M16-GAP-00174", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_DRIVER_BUTTON_EDIT_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00174/manifest.json", + "sha256": "5905f9176a5d6c9ce6a6fb755bd1b8f7ccdc2d08f81b3444eea660341d180de9" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00175-operator-anim.driver_button_edit.blend", + "sha256": "40ee0435bc330c7d1baa8d40150f2cc4f62ec4cfd195cce2e0e73ad006f7131a" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00175.py", + "sha256": "e4edbf58ccda3bcd61d4cb4fa2d80c2f68bad6313c94bc0c84115eaa1a4b12be" + }, + "desktopChecker": { + "path": "tools/web/check-action-driver-button-edit-desktop.py", + "sha256": "864c46ed3df66b0341660e715c6609d845851dc71afa7bd96348e19bce0db530" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "da24b371cbc7c8d0c75f0f0e133ea51e14bfee3730b810ba75d39ee47047c64f" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00175/anim-driver-button-edit-desktop-report.json", + "sha256": "0e712a373d6c4d28cb14c38fcd911987c7216466ef52a9d3d19a3ce34e913112" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00175/anim-driver-button-edit-local-exact-report.json", + "sha256": "9bc321582ce9a45951ec4e8a43236b69a571053fc8cf48fe4cdf8b29113aada0" + }, + "status": { + "path": "docs/status/M16-GAP-00175.md", + "sha256": "7a5a2a5e308ce9804db350cc06fbdac36b959892a1f2245531fc515388c0146c" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00175/task-context.json", + "sha256": "80eb9962039ff734c5b7c5a3f908be62c92a5cffd9cfe4de80f19ccd07ad9670" + } + }, + "nextTask": "M16-GAP-00176" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00175/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00175/task-context.json new file mode 100644 index 00000000..c4a8a3ef --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00175/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00175", + "parentTask": "M16-GAP-00174", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.driver_button_edit data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.driver_button_edit", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00175.py -- tests/files/web/generated/M16-GAP-00175-operator-anim.driver_button_edit.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00175", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00175" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00175.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2003, + "contextRemainingTokens": 500 + }, + "source": { + "bytes": 7901, + "tokens": 1976 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00175.py", + "bytes": 1168, + "tokens": 292 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00175-operator-anim.driver_button_edit.blend", + "bytes": 86619, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 231498, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 365288, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00175/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00175.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00175/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1168, + "tokens": 292 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00176", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00175.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00174/manifest.json", + "parentStatus": "docs/status/M16-GAP-00174.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00175.md", + "tests/golden/M16-GAP-00174/manifest.json", + "docs/status/M16-GAP-00174.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00174", + "parentTask": "M16-GAP-00173", + "status": "done", + "nextTask": "M16-GAP-00175", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00174 Status", + "status: done", + "task: anim.driver_button_add operator LOCAL_EXACT slice", + "updated: 2026-08-21 America/New_York", + "scope:", + "- The minimal fixture contains an un-driven `drive_target` property; foreground Chromium-compatible Blender UI automation invokes `ANIM_OT_driver_button_add` on that exact RNA button and the reader preserves the resulting driver for WASM/Main.", + "evidence:", + "- Blender desktop registers a focused Properties panel, activates the real RNA button, and invokes `ANIM_OT_driver_button_add` through the UI context (`poll=true`, `FINISHED`, `DRIVER_ADDED`)." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1804, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 451 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00175.md", + "bytes": 1804, + "lines": 38, + "tokens": 451 + }, + { + "path": "tests/golden/M16-GAP-00174/manifest.json", + "bytes": 2916, + "lines": 74, + "tokens": 729 + }, + { + "path": "docs/status/M16-GAP-00174.md", + "bytes": 1013, + "lines": 18, + "tokens": 254 + } + ], + "sourceTokens": 1976, + "evidenceFiles": 1, + "evidenceBytes": 1168, + "evidenceTokens": 292, + "totalTokens": 2268, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3292, + "serializedContextTokens": 757, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00176/anim-driver-button-remove-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00176/anim-driver-button-remove-desktop-report.json new file mode 100644 index 00000000..c1efda28 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00176/anim-driver-button-remove-desktop-report.json @@ -0,0 +1,15 @@ +{ + "blenderVersion": "5.2.0 LTS", + "drivers": [], + "evidenceStatus": "PRESERVED", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00176-operator-anim.driver_button_remove.blend", + "fixtureSha256": "292203abee32979f8fcc7568b78e66846d5d6280c194fcfa5c7be56170247012", + "mainMutation": "DRIVER_REMOVED", + "operation": "ANIM_DRIVER_BUTTON_REMOVE_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00176", + "value": 3.75 +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00176/anim-driver-button-remove-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00176/anim-driver-button-remove-local-exact-report.json new file mode 100644 index 00000000..b1209a66 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00176/anim-driver-button-remove-local-exact-report.json @@ -0,0 +1,27 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00176", + "operation": "ANIM_DRIVER_BUTTON_REMOVE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00176-operator-anim.driver_button_remove.blend", + "sha256": "292203abee32979f8fcc7568b78e66846d5d6280c194fcfa5c7be56170247012" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00176/anim-driver-button-remove-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "DRIVER_REMOVED" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapAnimDriverButtonRemoveObject", + "drivers": [] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00177" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00176/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00176/manifest.json new file mode 100644 index 00000000..c7437517 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00176/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00176", + "parentTask": "M16-GAP-00175", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_DRIVER_BUTTON_REMOVE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00175/manifest.json", + "sha256": "f0769d32fe2fced8edf7c232c7e8956862e1418010981c0e00ead511c61d05e7" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00176-operator-anim.driver_button_remove.blend", + "sha256": "292203abee32979f8fcc7568b78e66846d5d6280c194fcfa5c7be56170247012" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00176.py", + "sha256": "9591dac532101bf681890f06a1f88f2f1a106e728846e3b86829abb834f1291b" + }, + "desktopChecker": { + "path": "tools/web/check-action-driver-button-remove-desktop.py", + "sha256": "34db1bdf7b6086dca2447c00726703642da7ce58b572ded0ae57595e4ba5a359" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "9ece9cca678f392484ef701ab529d8ce21a85e34fea1e72f43bdfc09bf18b1ea" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00176/anim-driver-button-remove-desktop-report.json", + "sha256": "369081c441e48ee8ad39d9f4c90a4c2f80b4802143f0243e2d3e0d92f9198ee9" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00176/anim-driver-button-remove-local-exact-report.json", + "sha256": "44e366eb69905cd48d27decfab478c13dd6b1b715fcaae8ef7d3c75d09f1a311" + }, + "status": { + "path": "docs/status/M16-GAP-00176.md", + "sha256": "f40dac4690310310d87b5cf020995ad109daf4c9167ab953c9d001c31c7e84b8" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00176/task-context.json", + "sha256": "0811175e4a76169bdf347bb9fc858e67d4559ce1aa40b81e9c0e9b604d122550" + } + }, + "nextTask": "M16-GAP-00177" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00176/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00176/task-context.json new file mode 100644 index 00000000..ccfd1d19 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00176/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00176", + "parentTask": "M16-GAP-00175", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.driver_button_remove data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.driver_button_remove", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00176.py -- tests/files/web/generated/M16-GAP-00176-operator-anim.driver_button_remove.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00176", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00176" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00176.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2195, + "contextRemainingTokens": 547 + }, + "source": { + "bytes": 7709, + "tokens": 1929 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00176.py", + "bytes": 1172, + "tokens": 293 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00176-operator-anim.driver_button_remove.blend", + "bytes": 86464, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 231498, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 368769, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00176/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00176.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00176/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1172, + "tokens": 293 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00177", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00176.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00175/manifest.json", + "parentStatus": "docs/status/M16-GAP-00175.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00176.md", + "tests/golden/M16-GAP-00175/manifest.json", + "docs/status/M16-GAP-00175.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00175", + "parentTask": "M16-GAP-00174", + "status": "done", + "nextTask": "M16-GAP-00176", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00175 Status", + "status: done", + "task: anim.driver_button_edit operator LOCAL_EXACT slice", + "updated: 2026-08-21 America/New_York", + "scope:", + "- The minimal fixture contains one scripted driver on `drive_target`; Blender desktop invokes `ANIM_OT_driver_button_edit` in the active Properties context (`poll=true`, `INTERFACE`) and preserves the driver without a Main mutation.", + "evidence:", + "- Desktop and WASM/Main expose the same driver (`[\"drive_target\"]`, expression `frame * 2.5 + 1.25`, scripted, no variables); save/reopen is exact and malformed Blend input is rejected without Main mutation." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1814, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 454 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00176.md", + "bytes": 1814, + "lines": 38, + "tokens": 454 + }, + { + "path": "tests/golden/M16-GAP-00175/manifest.json", + "bytes": 2921, + "lines": 74, + "tokens": 731 + }, + { + "path": "docs/status/M16-GAP-00175.md", + "bytes": 806, + "lines": 17, + "tokens": 202 + } + ], + "sourceTokens": 1929, + "evidenceFiles": 1, + "evidenceBytes": 1172, + "evidenceTokens": 293, + "totalTokens": 2222, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3246, + "serializedContextTokens": 758, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00177/anim-end-frame-set-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00177/anim-end-frame-set-desktop-report.json new file mode 100644 index 00000000..1756e60a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00177/anim-end-frame-set-desktop-report.json @@ -0,0 +1,17 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00177-operator-anim.end_frame_set.blend", + "fixtureSha256": "b86b4daff038a40e597d1814a021c28fe6cb65e09fb7cfc9ee7bc59f665d9809", + "frame": { + "current": 42, + "end": 42, + "start": 1 + }, + "mainMutation": "FRAME_END_SET", + "operation": "ANIM_END_FRAME_SET_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00177" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00177/anim-end-frame-set-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00177/anim-end-frame-set-local-exact-report.json new file mode 100644 index 00000000..a0397b09 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00177/anim-end-frame-set-local-exact-report.json @@ -0,0 +1,30 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00177", + "operation": "ANIM_END_FRAME_SET_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00177-operator-anim.end_frame_set.blend", + "sha256": "b86b4daff038a40e597d1814a021c28fe6cb65e09fb7cfc9ee7bc59f665d9809" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00177/anim-end-frame-set-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "FRAME_END_SET" + }, + "wasm": { + "status": "EXACT", + "frame": { + "current": 42, + "end": 42, + "start": 1 + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00178" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00177/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00177/manifest.json new file mode 100644 index 00000000..5df6dbcd --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00177/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00177", + "parentTask": "M16-GAP-00176", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_END_FRAME_SET_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00176/manifest.json", + "sha256": "38da8c875cf61f18159444a30c2fb2a3a83d5cef31498fb220b9e201931e605b" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00177-operator-anim.end_frame_set.blend", + "sha256": "3cdef7cd4a48256700c0308247dc400a160b2495a9bbf246be5800dd742c1154" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00177.py", + "sha256": "c8f783aa06acd980ebd0f3e228f4065e779434b22059e6b032b652adb521a1d7" + }, + "desktopChecker": { + "path": "tools/web/check-action-end-frame-set-desktop.py", + "sha256": "7ea71a9a4e48775fde115223a115f9f31df016ce57e4a13af60b89d5bc7d836a" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "5edc8a52f534e391d322f2f7ee73fc65652b385242de0ee75ebc79a3d026aa53" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00177/anim-end-frame-set-desktop-report.json", + "sha256": "7e162f3b29c2636224d1a7c55f12978e573226aae207f7f45018062d595a038c" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00177/anim-end-frame-set-local-exact-report.json", + "sha256": "a08e18c614b9e612c744d6d1c55898fb5d1b7e6b74a9f41301627a5de6801db2" + }, + "status": { + "path": "docs/status/M16-GAP-00177.md", + "sha256": "c87a6acb0b22e57107bae051a9d8ce524ae296363a6e3f25fb98bc8872bf03f2" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00177/task-context.json", + "sha256": "06ee966e3f4ae02711eefa7b9562493e348ec9fd2fdf09592ff3d5f5d4f2b89c" + } + }, + "nextTask": "M16-GAP-00178" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00177/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00177/task-context.json new file mode 100644 index 00000000..f2a05efd --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00177/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00177", + "parentTask": "M16-GAP-00176", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.end_frame_set data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.end_frame_set", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00177.py -- tests/files/web/generated/M16-GAP-00177-operator-anim.end_frame_set.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00177", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00177" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00177.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2262, + "contextRemainingTokens": 565 + }, + "source": { + "bytes": 7642, + "tokens": 1911 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00177.py", + "bytes": 590, + "tokens": 148 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00177-operator-anim.end_frame_set.blend", + "bytes": 85579, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 231498, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 372024, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00177/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00177.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00177/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 590, + "tokens": 148 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00178", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00177.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00176/manifest.json", + "parentStatus": "docs/status/M16-GAP-00176.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00177.md", + "tests/golden/M16-GAP-00176/manifest.json", + "docs/status/M16-GAP-00176.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00176", + "parentTask": "M16-GAP-00175", + "status": "done", + "nextTask": "M16-GAP-00177", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00176 Status", + "status: done", + "task: anim.driver_button_remove operator LOCAL_EXACT slice", + "updated: 2026-08-21 America/New_York", + "scope:", + "- The minimal fixture starts with one scripted driver on `drive_target`; foreground Chromium-compatible Blender UI activates the RNA button and invokes `ANIM_OT_driver_button_remove(all=true)` (`poll=true`, `FINISHED`), removing that driver from Main.", + "evidence:", + "- Desktop and WASM/Main expose the same final object with no drivers; save/reopen is exact and malformed Blend input is rejected without Main mutation." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1779, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 445 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00177.md", + "bytes": 1779, + "lines": 38, + "tokens": 445 + }, + { + "path": "tests/golden/M16-GAP-00176/manifest.json", + "bytes": 2931, + "lines": 74, + "tokens": 733 + }, + { + "path": "docs/status/M16-GAP-00176.md", + "bytes": 764, + "lines": 17, + "tokens": 191 + } + ], + "sourceTokens": 1911, + "evidenceFiles": 1, + "evidenceBytes": 590, + "evidenceTokens": 148, + "totalTokens": 2059, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3083, + "serializedContextTokens": 752, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00178/anim-keyframe-clear-button-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00178/anim-keyframe-clear-button-desktop-report.json new file mode 100644 index 00000000..5c34529f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00178/anim-keyframe-clear-button-desktop-report.json @@ -0,0 +1,46 @@ +{ + "after": { + "action": { + "channels": [], + "name": "WebGapAnimKeyframeClearButtonAction" + }, + "value": 3.0 + }, + "before": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"clear_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1.0, + 3.0, + 5.0 + ] + } + ], + "name": "WebGapAnimKeyframeClearButtonAction" + }, + "value": 3.0 + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00178-operator-anim.keyframe_clear_button.blend", + "fixtureSha256": "75aa5f056fc9afe3562ad101a7f3b8aacf93ad54fae06519b236b5fc345831b6", + "mainMutation": "KEYFRAMES_CLEARED", + "operation": "ANIM_KEYFRAME_CLEAR_BUTTON_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00178" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00178/anim-keyframe-clear-button-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00178/anim-keyframe-clear-button-local-exact-report.json new file mode 100644 index 00000000..935169a9 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00178/anim-keyframe-clear-button-local-exact-report.json @@ -0,0 +1,66 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00178", + "operation": "ANIM_KEYFRAME_CLEAR_BUTTON_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00178-operator-anim.keyframe_clear_button.blend", + "sha256": "75aa5f056fc9afe3562ad101a7f3b8aacf93ad54fae06519b236b5fc345831b6" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00178/anim-keyframe-clear-button-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "KEYFRAMES_CLEARED", + "before": { + "channels": [ + { + "frames": [ + 1, + 3, + 5 + ], + "index": 0, + "path": "[\"clear_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1, + 3, + 5 + ] + } + ], + "name": "WebGapAnimKeyframeClearButtonAction" + }, + "after": { + "channels": [], + "name": "WebGapAnimKeyframeClearButtonAction" + } + }, + "wasm": { + "status": "EXACT", + "before": { + "animationId": "action:WebGapAnimKeyframeClearButtonAction:object:WebGapAnimKeyframeClearButtonObject", + "channelPaths": [ + "[\"clear_target\"][0]" + ], + "keyframesPerChannel": [ + 3 + ] + }, + "after": { + "animationCount": 0, + "keyframesCleared": true + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00179" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00178/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00178/manifest.json new file mode 100644 index 00000000..0220a87a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00178/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00178", + "parentTask": "M16-GAP-00177", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYFRAME_CLEAR_BUTTON_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00177/manifest.json", + "sha256": "35f8e52349884e7752b9d652fd415e0ac27688262e1d81cbe73550794db3b6b6" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00178-operator-anim.keyframe_clear_button.blend", + "sha256": "75aa5f056fc9afe3562ad101a7f3b8aacf93ad54fae06519b236b5fc345831b6" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00178.py", + "sha256": "2182c0a9dda794a1f037cea8178151382cfc9c15c1599c23f3d81d4d1883f6da" + }, + "desktopChecker": { + "path": "tools/web/check-action-keyframe-clear-button-desktop.py", + "sha256": "53c60181c3ca7da0eb16446a8eacf499963aa8e8a6e328b09a21a3301744c0b7" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "c70a9d246f13ed1d0d9e3e950f7289cb943a3b04ce37e4b2666a24363b3fe661" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00178/anim-keyframe-clear-button-desktop-report.json", + "sha256": "ba35b96dc8c7aa46427b64465aa223a87ffe2d5bf37ef42a4bd17afc430b4bee" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00178/anim-keyframe-clear-button-local-exact-report.json", + "sha256": "9969372551c877505755cf23454610ca8211cc77a6e1267b366e848ebd69e30d" + }, + "status": { + "path": "docs/status/M16-GAP-00178.md", + "sha256": "0525407475c3c4cc8ed880d29fe077b178017f3710c56002558bd032362808d5" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00178/task-context.json", + "sha256": "ff864d8ebd9e42c478667639926c27b4580c35baf72c77f7cb0df71d0022e179" + } + }, + "nextTask": "M16-GAP-00179" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00178/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00178/task-context.json new file mode 100644 index 00000000..eb17838e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00178/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00178", + "parentTask": "M16-GAP-00177", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.keyframe_clear_button data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.keyframe_clear_button", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00178.py -- tests/files/web/generated/M16-GAP-00178-operator-anim.keyframe_clear_button.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00178", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00178" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00178.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2364, + "contextRemainingTokens": 590 + }, + "source": { + "bytes": 7540, + "tokens": 1886 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00178.py", + "bytes": 1319, + "tokens": 330 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00178-operator-anim.keyframe_clear_button.blend", + "bytes": 86642, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 231498, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 377589, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00178/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00178.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00178/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1319, + "tokens": 330 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00179", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00178.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00177/manifest.json", + "parentStatus": "docs/status/M16-GAP-00177.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00178.md", + "tests/golden/M16-GAP-00177/manifest.json", + "docs/status/M16-GAP-00177.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00177", + "parentTask": "M16-GAP-00176", + "status": "done", + "nextTask": "M16-GAP-00178", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00177 Status", + "status: done", + "task: anim.end_frame_set operator LOCAL_EXACT slice", + "updated: 2026-08-21 America/New_York", + "scope:", + "- The minimal scene starts at frame 42 with a scene range of 1-120; a foreground animation-area context invokes `ANIM_OT_end_frame_set` (`poll=true`, `FINISHED`) and sets the scene end frame to 42.", + "evidence:", + "- Desktop and WASM/Main expose the same frame state (`current=42`, `start=1`, `end=42`); save/reopen is exact and malformed Blend input is rejected without Main mutation." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1819, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 455 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00178.md", + "bytes": 1819, + "lines": 38, + "tokens": 455 + }, + { + "path": "tests/golden/M16-GAP-00177/manifest.json", + "bytes": 2896, + "lines": 74, + "tokens": 724 + }, + { + "path": "docs/status/M16-GAP-00177.md", + "bytes": 657, + "lines": 17, + "tokens": 165 + } + ], + "sourceTokens": 1886, + "evidenceFiles": 1, + "evidenceBytes": 1319, + "evidenceTokens": 330, + "totalTokens": 2216, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3240, + "serializedContextTokens": 759, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00179/anim-keyframe-clear-v3d-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00179/anim-keyframe-clear-v3d-desktop-report.json new file mode 100644 index 00000000..1450420d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00179/anim-keyframe-clear-v3d-desktop-report.json @@ -0,0 +1,50 @@ +{ + "after": { + "action": { + "channels": [], + "name": "WebGapAnimKeyframeClearV3DAction" + }, + "active": true, + "selected": true, + "value": 3.0 + }, + "before": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"clear_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1.0, + 3.0, + 5.0 + ] + } + ], + "name": "WebGapAnimKeyframeClearV3DAction" + }, + "active": true, + "selected": true, + "value": 3.0 + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00179-operator-anim.keyframe_clear_v3d.blend", + "fixtureSha256": "0e079b73025f3623872e92c1e961e012cbcfaff4a64b2c7741a2ff08c935afdd", + "mainMutation": "ANIMATION_CLEARED", + "operation": "ANIM_KEYFRAME_CLEAR_V3D_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00179" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00179/anim-keyframe-clear-v3d-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00179/anim-keyframe-clear-v3d-local-exact-report.json new file mode 100644 index 00000000..3081fff4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00179/anim-keyframe-clear-v3d-local-exact-report.json @@ -0,0 +1,66 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00179", + "operation": "ANIM_KEYFRAME_CLEAR_V3D_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00179-operator-anim.keyframe_clear_v3d.blend", + "sha256": "0e079b73025f3623872e92c1e961e012cbcfaff4a64b2c7741a2ff08c935afdd" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00179/anim-keyframe-clear-v3d-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "ANIMATION_CLEARED", + "before": { + "channels": [ + { + "frames": [ + 1, + 3, + 5 + ], + "index": 0, + "path": "[\"clear_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1, + 3, + 5 + ] + } + ], + "name": "WebGapAnimKeyframeClearV3DAction" + }, + "after": { + "channels": [], + "name": "WebGapAnimKeyframeClearV3DAction" + } + }, + "wasm": { + "status": "EXACT", + "before": { + "animationId": "action:WebGapAnimKeyframeClearV3DAction:object:WebGapAnimKeyframeClearV3DObject", + "channelPaths": [ + "[\"clear_target\"][0]" + ], + "keyframesPerChannel": [ + 3 + ] + }, + "after": { + "animationCount": 0, + "animationCleared": true + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00180" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00179/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00179/manifest.json new file mode 100644 index 00000000..b344683d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00179/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00179", + "parentTask": "M16-GAP-00178", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYFRAME_CLEAR_V3D_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00178/manifest.json", + "sha256": "351ff1a4e32fff9653bf276eebd6638bfa729130c6379dca0a5355e664961e4e" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00179-operator-anim.keyframe_clear_v3d.blend", + "sha256": "0e079b73025f3623872e92c1e961e012cbcfaff4a64b2c7741a2ff08c935afdd" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00179.py", + "sha256": "600336ccf298afe28fdd1141a2dbac794fde599f28c31f9d7a7a8eb15bb80443" + }, + "desktopChecker": { + "path": "tools/web/check-action-keyframe-clear-v3d-desktop.py", + "sha256": "1d2a7e2bf29a8bc62b6e4e3ebdc9489160f9494d9b7284f7159cc536f2bca1c0" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "99769a632aa2ec5b1d438bd652af0418ea26a1f85f942548d2734e8c5f046b5a" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00179/anim-keyframe-clear-v3d-desktop-report.json", + "sha256": "2e63bae9cbb613ab96faf2fa802e34caf5aca2e7c3968c93ef0dc9de6a16fecf" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00179/anim-keyframe-clear-v3d-local-exact-report.json", + "sha256": "6b675af2fd56ce8ee146676101ca9f0be6365a9702b80d8def8c27460a1e7ae9" + }, + "status": { + "path": "docs/status/M16-GAP-00179.md", + "sha256": "c1d842b67de5e7275d040a033eb5cd16319ec2c5f77e1b67ed1d55b1c9e0dc4e" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00179/task-context.json", + "sha256": "74ae2d753d5a89d6692a3e73552849d7303e576de19f54d78311b53ba49c5608" + } + }, + "nextTask": "M16-GAP-00180" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00179/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00179/task-context.json new file mode 100644 index 00000000..8c188f3e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00179/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00179", + "parentTask": "M16-GAP-00178", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.keyframe_clear_v3d data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.keyframe_clear_v3d", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00179.py -- tests/files/web/generated/M16-GAP-00179-operator-anim.keyframe_clear_v3d.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00179", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00179" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00179.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1969, + "contextRemainingTokens": 492 + }, + "source": { + "bytes": 7935, + "tokens": 1984 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00179.py", + "bytes": 1310, + "tokens": 328 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00179-operator-anim.keyframe_clear_v3d.blend", + "bytes": 86603, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 231498, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 383158, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00179/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00179.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00179/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1310, + "tokens": 328 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00180", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00179.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00178/manifest.json", + "parentStatus": "docs/status/M16-GAP-00178.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00179.md", + "tests/golden/M16-GAP-00178/manifest.json", + "docs/status/M16-GAP-00178.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00178", + "parentTask": "M16-GAP-00177", + "status": "done", + "nextTask": "M16-GAP-00179", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00178 Status", + "status: done", + "task: anim.keyframe_clear_button operator LOCAL_EXACT slice", + "updated: 2026-08-21 America/New_York", + "scope:", + "- The minimal fixture animates one scalar custom RNA property, `clear_target`, on `WebGapAnimKeyframeClearButtonObject` at frames 1, 3, and 5. A foreground Properties context activates that RNA button and invokes `ANIM_OT_keyframe_clear_button(all=true)` (`poll=true`, `FINISHED`), leaving the Action with no F-Curves.", + "evidence:", + "- Desktop evidence records the property changing from three selected keyframes to none; WASM/Main reads the original channel as `[\"clear_target\"][0]` and the cleared fixture with no matching animation. Save/reopen is exact and malformed Blend input is rejected without Main mutation." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1804, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 451 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00179.md", + "bytes": 1804, + "lines": 38, + "tokens": 451 + }, + { + "path": "tests/golden/M16-GAP-00178/manifest.json", + "bytes": 2936, + "lines": 74, + "tokens": 734 + }, + { + "path": "docs/status/M16-GAP-00178.md", + "bytes": 1027, + "lines": 17, + "tokens": 257 + } + ], + "sourceTokens": 1984, + "evidenceFiles": 1, + "evidenceBytes": 1310, + "evidenceTokens": 328, + "totalTokens": 2312, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3336, + "serializedContextTokens": 757, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00180/anim-keyframe-clear-vse-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00180/anim-keyframe-clear-vse-desktop-report.json new file mode 100644 index 00000000..77e7205c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00180/anim-keyframe-clear-vse-desktop-report.json @@ -0,0 +1,50 @@ +{ + "after": { + "action": { + "channels": [], + "name": "WebGapAnimKeyframeClearVSEAction" + }, + "active": true, + "blendAlpha": 0.5, + "selected": true + }, + "before": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "sequence_editor.strips_all[\"WebGapAnimKeyframeClearVSEStrip\"].blend_alpha", + "selected": [ + true, + true, + true + ], + "values": [ + 0.25, + 0.5, + 0.75 + ] + } + ], + "name": "WebGapAnimKeyframeClearVSEAction" + }, + "active": true, + "blendAlpha": 0.5, + "selected": true + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00180-operator-anim.keyframe_clear_vse.blend", + "fixtureSha256": "e2ef76b206578af5a77919d7f9625ca76ec58bb0a5d9074f907ced31cdd96c4d", + "mainMutation": "ANIMATION_CLEARED", + "operation": "ANIM_KEYFRAME_CLEAR_VSE_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00180" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00180/anim-keyframe-clear-vse-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00180/anim-keyframe-clear-vse-local-exact-report.json new file mode 100644 index 00000000..6ad1c6bc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00180/anim-keyframe-clear-vse-local-exact-report.json @@ -0,0 +1,67 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00180", + "operation": "ANIM_KEYFRAME_CLEAR_VSE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00180-operator-anim.keyframe_clear_vse.blend", + "sha256": "e2ef76b206578af5a77919d7f9625ca76ec58bb0a5d9074f907ced31cdd96c4d" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00180/anim-keyframe-clear-vse-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "ANIMATION_CLEARED", + "before": { + "channels": [ + { + "frames": [ + 1, + 3, + 5 + ], + "index": 0, + "path": "sequence_editor.strips_all[\"WebGapAnimKeyframeClearVSEStrip\"].blend_alpha", + "selected": [ + true, + true, + true + ], + "values": [ + 0.25, + 0.5, + 0.75 + ] + } + ], + "name": "WebGapAnimKeyframeClearVSEAction" + }, + "after": { + "channels": [], + "name": "WebGapAnimKeyframeClearVSEAction" + } + }, + "wasm": { + "status": "EXACT", + "before": { + "animationId": "action:WebGapAnimKeyframeClearVSEAction:scene:Scene", + "targetId": "scene:Scene", + "channelPaths": [ + "sequence_editor.strips_all[\"WebGapAnimKeyframeClearVSEStrip\"].blend_alpha[0]" + ], + "keyframesPerChannel": [ + 3 + ] + }, + "after": { + "animationCount": 0, + "animationCleared": true + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00181" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00180/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00180/manifest.json new file mode 100644 index 00000000..e8c41ded --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00180/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00180", + "parentTask": "M16-GAP-00179", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYFRAME_CLEAR_VSE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00179/manifest.json", + "sha256": "bd344a1160ca950db34f10d92a43288cc1ac707af00e1bf43a9a903c45547a67" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00180-operator-anim.keyframe_clear_vse.blend", + "sha256": "e2ef76b206578af5a77919d7f9625ca76ec58bb0a5d9074f907ced31cdd96c4d" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00180.py", + "sha256": "e72a0c68e1ac8173c70944bc48f7bd03365913e24b831708da40a28bde936f4d" + }, + "desktopChecker": { + "path": "tools/web/check-action-keyframe-clear-vse-desktop.py", + "sha256": "09aeec25d69a57b657bd690998058a23980b6a4b9425fd63dbb26f14f4edee8f" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "0876494ec0ef358ac3049c7da3e2f207da80826769167379454789b4b27e41c9" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00180/anim-keyframe-clear-vse-desktop-report.json", + "sha256": "6885cc9103c1b9c8396a684559d08d0899ca096580278a5fa321ee6cec4412ec" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00180/anim-keyframe-clear-vse-local-exact-report.json", + "sha256": "9e05fde557e26ac9be8dc8c7983be4a25e7637542643aa8b38708a1868de27ad" + }, + "status": { + "path": "docs/status/M16-GAP-00180.md", + "sha256": "6af17dd941fdf1f76753ee23a18f97689b7d9719c37ce8714628b0acda11fc5f" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00180/task-context.json", + "sha256": "a90f35e4b60f26bac6d8900a1838d08cbfc20638f65f45f8dbf2306c7160f1d4" + } + }, + "nextTask": "M16-GAP-00181" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00180/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00180/task-context.json new file mode 100644 index 00000000..2f920fba --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00180/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00180", + "parentTask": "M16-GAP-00179", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.keyframe_clear_vse data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.keyframe_clear_vse", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00180.py -- tests/files/web/generated/M16-GAP-00180-operator-anim.keyframe_clear_vse.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00180", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00180" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00180.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2005, + "contextRemainingTokens": 500 + }, + "source": { + "bytes": 7899, + "tokens": 1976 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00180.py", + "bytes": 1317, + "tokens": 330 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00180-operator-anim.keyframe_clear_vse.blend", + "bytes": 86461, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 231498, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 388566, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00180/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00180.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00180/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1317, + "tokens": 330 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00181", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00180.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00179/manifest.json", + "parentStatus": "docs/status/M16-GAP-00179.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00180.md", + "tests/golden/M16-GAP-00179/manifest.json", + "docs/status/M16-GAP-00179.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00179", + "parentTask": "M16-GAP-00178", + "status": "done", + "nextTask": "M16-GAP-00180", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00179 Status", + "status: done", + "task: anim.keyframe_clear_v3d operator LOCAL_EXACT slice", + "updated: 2026-08-21 America/New_York", + "scope:", + "- The minimal fixture selects one object with a scalar `clear_target` Action at frames 1, 3, and 5. A foreground `VIEW_3D` context invokes `ANIM_OT_keyframe_clear_v3d(confirm=false)` (`poll=true`, `FINISHED`), removing all editable F-Curves from the selected object's Action.", + "evidence:", + "- Desktop evidence records the selected/active object changing from three selected keyframes to no F-Curves; WASM/Main reads the original channel as `[\"clear_target\"][0]` and the cleared fixture with no matching animation. Save/reopen is exact and malformed Blend input is rejected without Main mutation." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1804, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 451 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00180.md", + "bytes": 1804, + "lines": 38, + "tokens": 451 + }, + { + "path": "tests/golden/M16-GAP-00179/manifest.json", + "bytes": 2921, + "lines": 74, + "tokens": 731 + }, + { + "path": "docs/status/M16-GAP-00179.md", + "bytes": 1006, + "lines": 17, + "tokens": 252 + } + ], + "sourceTokens": 1976, + "evidenceFiles": 1, + "evidenceBytes": 1317, + "evidenceTokens": 330, + "totalTokens": 2306, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3330, + "serializedContextTokens": 757, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00181/anim-keyframe-delete-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00181/anim-keyframe-delete-desktop-report.json new file mode 100644 index 00000000..e9489cf4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00181/anim-keyframe-delete-desktop-report.json @@ -0,0 +1,69 @@ +{ + "after": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 5.0 + ], + "index": 0, + "path": "[\"delete_target\"]", + "selected": [ + true, + true + ], + "values": [ + 1.0, + 5.0 + ] + } + ], + "name": "WebGapAnimKeyframeDeleteAction" + }, + "active": true, + "activeKeyingSet": "WebGapAnimKeyframeDeleteSet", + "selected": true, + "value": 3.0 + }, + "before": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"delete_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1.0, + 3.0, + 5.0 + ] + } + ], + "name": "WebGapAnimKeyframeDeleteAction" + }, + "active": true, + "activeKeyingSet": "WebGapAnimKeyframeDeleteSet", + "selected": true, + "value": 3.0 + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00181-operator-anim.keyframe_delete.blend", + "fixtureSha256": "0d6d1e45f430c051e4ecaf1f799f4b7666fa8311e2abf188502cf9cdc0011855", + "mainMutation": "KEYFRAME_DELETED", + "operation": "ANIM_KEYFRAME_DELETE_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00181" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00181/anim-keyframe-delete-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00181/anim-keyframe-delete-local-exact-report.json new file mode 100644 index 00000000..dce2884a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00181/anim-keyframe-delete-local-exact-report.json @@ -0,0 +1,87 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00181", + "operation": "ANIM_KEYFRAME_DELETE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00181-operator-anim.keyframe_delete.blend", + "sha256": "0d6d1e45f430c051e4ecaf1f799f4b7666fa8311e2abf188502cf9cdc0011855" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00181/anim-keyframe-delete-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "KEYFRAME_DELETED", + "before": { + "channels": [ + { + "frames": [ + 1, + 3, + 5 + ], + "index": 0, + "path": "[\"delete_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1, + 3, + 5 + ] + } + ], + "name": "WebGapAnimKeyframeDeleteAction" + }, + "after": { + "channels": [ + { + "frames": [ + 1, + 5 + ], + "index": 0, + "path": "[\"delete_target\"]", + "selected": [ + true, + true + ], + "values": [ + 1, + 5 + ] + } + ], + "name": "WebGapAnimKeyframeDeleteAction" + } + }, + "wasm": { + "status": "EXACT", + "before": { + "animationId": "action:WebGapAnimKeyframeDeleteAction:object:WebGapAnimKeyframeDeleteObject", + "targetId": "object:WebGapAnimKeyframeDeleteObject", + "channelPaths": [ + "[\"delete_target\"][0]" + ], + "keyframesPerChannel": [ + 3 + ] + }, + "after": { + "animationId": "action:WebGapAnimKeyframeDeleteAction:object:WebGapAnimKeyframeDeleteObject", + "keyframesPerChannel": [ + 2 + ], + "keyframeDeleted": true + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00182" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00181/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00181/manifest.json new file mode 100644 index 00000000..37ed975e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00181/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00181", + "parentTask": "M16-GAP-00180", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYFRAME_DELETE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00180/manifest.json", + "sha256": "e6d90f0df54469a1016917e71480ad58ba901d50694d2727d5e0927b237848eb" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00181-operator-anim.keyframe_delete.blend", + "sha256": "0d6d1e45f430c051e4ecaf1f799f4b7666fa8311e2abf188502cf9cdc0011855" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00181.py", + "sha256": "bc42dcd74150bdc50dba1190dcda12f0c7f40cd8886e94c541243c5e6df460b7" + }, + "desktopChecker": { + "path": "tools/web/check-action-keyframe-delete-desktop.py", + "sha256": "697bd750b9b3971fa108981e6b8f14f372705eeb39a7e20b33dffa9c1fa55c4c" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "7b77cecee69a1ba85251c1ef17cfe5407f2db93e606a330e9d08609faaf74aeb" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00181/anim-keyframe-delete-desktop-report.json", + "sha256": "cec3f76e20a38572bf4a38789e1df1aa83ffd4f332e940c238e4d633dd841c7d" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00181/anim-keyframe-delete-local-exact-report.json", + "sha256": "4e75034a44e46afef417e241e6c81d84a1d46a8bf34e779495d9c6885c3b8bfc" + }, + "status": { + "path": "docs/status/M16-GAP-00181.md", + "sha256": "16ef18b3c2a4035e283a5a9af1968d0250763a0a3a2b52fb5a8f4f05821968c2" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00181/task-context.json", + "sha256": "ad1b7ad175eaa42b41c75f1a36d7b55f190c8bbd39d8861e7e7aaa016984b6e1" + } + }, + "nextTask": "M16-GAP-00182" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00181/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00181/task-context.json new file mode 100644 index 00000000..0aca54ac --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00181/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00181", + "parentTask": "M16-GAP-00180", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.keyframe_delete data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.keyframe_delete", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00181.py -- tests/files/web/generated/M16-GAP-00181-operator-anim.keyframe_delete.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00181", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00181" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00181.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1968, + "contextRemainingTokens": 490 + }, + "source": { + "bytes": 7936, + "tokens": 1986 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00181.py", + "bytes": 1630, + "tokens": 408 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00181-operator-anim.keyframe_delete.blend", + "bytes": 86782, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 231498, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 394089, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00181/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00181.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00181/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1630, + "tokens": 408 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00182", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00181.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00180/manifest.json", + "parentStatus": "docs/status/M16-GAP-00180.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00181.md", + "tests/golden/M16-GAP-00180/manifest.json", + "docs/status/M16-GAP-00180.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00180", + "parentTask": "M16-GAP-00179", + "status": "done", + "nextTask": "M16-GAP-00181", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00180 Status", + "status: done", + "task: anim.keyframe_clear_vse operator LOCAL_EXACT slice", + "updated: 2026-08-21 America/New_York", + "scope:", + "- The minimal fixture contains one selected image strip with a Scene Action animating `blend_alpha` at frames 1, 3, and 5. A real foreground `SEQUENCE_EDITOR` context invokes `ANIM_OT_keyframe_clear_vse(confirm=false)` (`poll=true`, `FINISHED`), removing the selected strip's editable F-Curve while preserving the strip and its evaluated value.", + "evidence:", + "- Desktop evidence records the selected/active strip changing from three selected keyframes to no F-Curves. WASM/Main reads the same Scene Action channel before clearing and no matching animation from the cleared fixture. Save/reopen is exact and malformed Blend input is rejected without Main mutation." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1789, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 448 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00181.md", + "bytes": 1789, + "lines": 38, + "tokens": 448 + }, + { + "path": "tests/golden/M16-GAP-00180/manifest.json", + "bytes": 2921, + "lines": 74, + "tokens": 731 + }, + { + "path": "docs/status/M16-GAP-00180.md", + "bytes": 1058, + "lines": 17, + "tokens": 265 + } + ], + "sourceTokens": 1986, + "evidenceFiles": 1, + "evidenceBytes": 1630, + "evidenceTokens": 408, + "totalTokens": 2394, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3418, + "serializedContextTokens": 754, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00182/anim-keyframe-delete-button-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00182/anim-keyframe-delete-button-desktop-report.json new file mode 100644 index 00000000..c0e1b73a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00182/anim-keyframe-delete-button-desktop-report.json @@ -0,0 +1,67 @@ +{ + "after": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 5.0 + ], + "index": 0, + "path": "[\"delete_target\"]", + "selected": [ + true, + true + ], + "values": [ + 1.0, + 5.0 + ] + } + ], + "name": "WebGapAnimKeyframeDeleteButtonAction" + }, + "active": true, + "selected": true, + "value": 3.0 + }, + "before": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"delete_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1.0, + 3.0, + 5.0 + ] + } + ], + "name": "WebGapAnimKeyframeDeleteButtonAction" + }, + "active": true, + "selected": true, + "value": 3.0 + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00182-operator-anim.keyframe_delete_button.blend", + "fixtureSha256": "8e62660db44872553a7f32f5965afe7811e69261425beba97e6e29cdd5575073", + "mainMutation": "KEYFRAME_DELETED", + "operation": "ANIM_KEYFRAME_DELETE_BUTTON_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00182" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00182/anim-keyframe-delete-button-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00182/anim-keyframe-delete-button-local-exact-report.json new file mode 100644 index 00000000..0f908887 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00182/anim-keyframe-delete-button-local-exact-report.json @@ -0,0 +1,87 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00182", + "operation": "ANIM_KEYFRAME_DELETE_BUTTON_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00182-operator-anim.keyframe_delete_button.blend", + "sha256": "8e62660db44872553a7f32f5965afe7811e69261425beba97e6e29cdd5575073" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00182/anim-keyframe-delete-button-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "KEYFRAME_DELETED", + "before": { + "channels": [ + { + "frames": [ + 1, + 3, + 5 + ], + "index": 0, + "path": "[\"delete_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1, + 3, + 5 + ] + } + ], + "name": "WebGapAnimKeyframeDeleteButtonAction" + }, + "after": { + "channels": [ + { + "frames": [ + 1, + 5 + ], + "index": 0, + "path": "[\"delete_target\"]", + "selected": [ + true, + true + ], + "values": [ + 1, + 5 + ] + } + ], + "name": "WebGapAnimKeyframeDeleteButtonAction" + } + }, + "wasm": { + "status": "EXACT", + "before": { + "animationId": "action:WebGapAnimKeyframeDeleteButtonAction:object:WebGapAnimKeyframeDeleteButtonObject", + "targetId": "object:WebGapAnimKeyframeDeleteButtonObject", + "channelPaths": [ + "[\"delete_target\"][0]" + ], + "keyframesPerChannel": [ + 3 + ] + }, + "after": { + "animationId": "action:WebGapAnimKeyframeDeleteButtonAction:object:WebGapAnimKeyframeDeleteButtonObject", + "keyframesPerChannel": [ + 2 + ], + "keyframeDeleted": true + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00183" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00182/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00182/manifest.json new file mode 100644 index 00000000..2417509b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00182/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00182", + "parentTask": "M16-GAP-00181", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYFRAME_DELETE_BUTTON_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00181/manifest.json", + "sha256": "32fd366de6190029b377c8faf9ed1b661234cbc6b01925d247b46e00e7bc62ad" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00182-operator-anim.keyframe_delete_button.blend", + "sha256": "8e62660db44872553a7f32f5965afe7811e69261425beba97e6e29cdd5575073" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00182.py", + "sha256": "8424d4ca63c32c9127c9cf1d095a6dde62121ae8ddccea5dc0bbd8ba37b27a20" + }, + "desktopChecker": { + "path": "tools/web/check-action-keyframe-delete-button-desktop.py", + "sha256": "fdb36e2d97ed687a20682a769f107f10801ab8845ad5e1061565893bad2cebd9" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "961b446842e5115fc503667f19731d2cd0167f5e3be9670d3b513c64fd3ea5b4" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00182/anim-keyframe-delete-button-desktop-report.json", + "sha256": "5df192b8cf82b0e53efa947f9102424cfccf05b29a4e293342ea2e3ace60b0d1" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00182/anim-keyframe-delete-button-local-exact-report.json", + "sha256": "097fdcab03f3e748077c3b1d8cdcfbb9a9b2d7df9b1ca03c54b9f0a3a637c947" + }, + "status": { + "path": "docs/status/M16-GAP-00182.md", + "sha256": "43e96981d4987ee1b32b07ce6053bca47b50106526d8e932e2b67d0005b576dc" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00182/task-context.json", + "sha256": "76d618d236a7741f912e09f4e48ec7bbdce9ac93c3fafee48dfe7ca2ebeae03c" + } + }, + "nextTask": "M16-GAP-00183" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00182/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00182/task-context.json new file mode 100644 index 00000000..b79826c8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00182/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00182", + "parentTask": "M16-GAP-00181", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.keyframe_delete_button data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.keyframe_delete_button", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00182.py -- tests/files/web/generated/M16-GAP-00182-operator-anim.keyframe_delete_button.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00182", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00182" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00182.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1696, + "contextRemainingTokens": 423 + }, + "source": { + "bytes": 8208, + "tokens": 2053 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00182.py", + "bytes": 1325, + "tokens": 332 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00182-operator-anim.keyframe_delete_button.blend", + "bytes": 86755, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 231498, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 399962, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00182/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00182.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00182/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1325, + "tokens": 332 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00183", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00182.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00181/manifest.json", + "parentStatus": "docs/status/M16-GAP-00181.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00182.md", + "tests/golden/M16-GAP-00181/manifest.json", + "docs/status/M16-GAP-00181.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00181", + "parentTask": "M16-GAP-00180", + "status": "done", + "nextTask": "M16-GAP-00182", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00181 Status", + "status: done", + "task: anim.keyframe_delete operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one selected object with a custom `delete_target` property and an Action keyed at frames 1, 3, and 5. A dedicated active Keying Set targets that property. A real foreground `VIEW_3D` context invokes `ANIM_OT_keyframe_delete(type=WebGapAnimKeyframeDeleteSet)` (`poll=true`, `FINISHED`) at frame 3, deleting only the current keyframe and preserving the two surrounding keys.", + "evidence:", + "- Desktop evidence records the selected/active object and active Keying Set before deletion, then the Action changing from `[1, 3, 5]` to `[1, 5]`; the custom property remains at 3.0. Save/reopen is exact." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1824, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 456 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00182.md", + "bytes": 1824, + "lines": 38, + "tokens": 456 + }, + { + "path": "tests/golden/M16-GAP-00181/manifest.json", + "bytes": 2906, + "lines": 74, + "tokens": 727 + }, + { + "path": "docs/status/M16-GAP-00181.md", + "bytes": 1310, + "lines": 18, + "tokens": 328 + } + ], + "sourceTokens": 2053, + "evidenceFiles": 1, + "evidenceBytes": 1325, + "evidenceTokens": 332, + "totalTokens": 2385, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3409, + "serializedContextTokens": 760, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00183/anim-keyframe-delete-by-name-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00183/anim-keyframe-delete-by-name-desktop-report.json new file mode 100644 index 00000000..faaccada --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00183/anim-keyframe-delete-by-name-desktop-report.json @@ -0,0 +1,69 @@ +{ + "after": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 5.0 + ], + "index": 0, + "path": "[\"delete_target\"]", + "selected": [ + true, + true + ], + "values": [ + 1.0, + 5.0 + ] + } + ], + "name": "WebGapAnimKeyframeDeleteByNameAction" + }, + "active": true, + "activeKeyingSet": "WebGapAnimKeyframeDeleteByNameSet", + "selected": true, + "value": 3.0 + }, + "before": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"delete_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1.0, + 3.0, + 5.0 + ] + } + ], + "name": "WebGapAnimKeyframeDeleteByNameAction" + }, + "active": true, + "activeKeyingSet": "WebGapAnimKeyframeDeleteByNameSet", + "selected": true, + "value": 3.0 + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00183-operator-anim.keyframe_delete_by_name.blend", + "fixtureSha256": "ea5a587aeeabd6692977d5a7660bf49bb7134d4fc81e8ff1a3fa9acd8a75026c", + "mainMutation": "KEYFRAME_DELETED", + "operation": "ANIM_KEYFRAME_DELETE_BY_NAME_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00183" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00183/anim-keyframe-delete-by-name-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00183/anim-keyframe-delete-by-name-local-exact-report.json new file mode 100644 index 00000000..5be37e52 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00183/anim-keyframe-delete-by-name-local-exact-report.json @@ -0,0 +1,87 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00183", + "operation": "ANIM_KEYFRAME_DELETE_BY_NAME_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00183-operator-anim.keyframe_delete_by_name.blend", + "sha256": "ea5a587aeeabd6692977d5a7660bf49bb7134d4fc81e8ff1a3fa9acd8a75026c" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00183/anim-keyframe-delete-by-name-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "KEYFRAME_DELETED", + "before": { + "channels": [ + { + "frames": [ + 1, + 3, + 5 + ], + "index": 0, + "path": "[\"delete_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1, + 3, + 5 + ] + } + ], + "name": "WebGapAnimKeyframeDeleteByNameAction" + }, + "after": { + "channels": [ + { + "frames": [ + 1, + 5 + ], + "index": 0, + "path": "[\"delete_target\"]", + "selected": [ + true, + true + ], + "values": [ + 1, + 5 + ] + } + ], + "name": "WebGapAnimKeyframeDeleteByNameAction" + } + }, + "wasm": { + "status": "EXACT", + "before": { + "animationId": "action:WebGapAnimKeyframeDeleteByNameAction:object:WebGapAnimKeyframeDeleteByNameObject", + "targetId": "object:WebGapAnimKeyframeDeleteByNameObject", + "channelPaths": [ + "[\"delete_target\"][0]" + ], + "keyframesPerChannel": [ + 3 + ] + }, + "after": { + "animationId": "action:WebGapAnimKeyframeDeleteByNameAction:object:WebGapAnimKeyframeDeleteByNameObject", + "keyframesPerChannel": [ + 2 + ], + "keyframeDeleted": true + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00184" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00183/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00183/manifest.json new file mode 100644 index 00000000..9f13da1f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00183/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00183", + "parentTask": "M16-GAP-00182", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYFRAME_DELETE_BY_NAME_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00182/manifest.json", + "sha256": "75787ace3726209e5ff0058c6ab8787d8eb6a386318ab2bf50c79457f587bf87" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00183-operator-anim.keyframe_delete_by_name.blend", + "sha256": "ea5a587aeeabd6692977d5a7660bf49bb7134d4fc81e8ff1a3fa9acd8a75026c" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00183.py", + "sha256": "482995ad5ea8beeb8e6a3c4a004de282587d09f5186bac854a0513c747e316b0" + }, + "desktopChecker": { + "path": "tools/web/check-action-keyframe-delete-by-name-desktop.py", + "sha256": "b3c5726677eb6881950a96a13b5221eb74d5b4e13be118ad7f20679c842a64ea" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "e68c992056b117cc4d0e38752e4ad37ed25843fc0f4431459e527f83ef56d3eb" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00183/anim-keyframe-delete-by-name-desktop-report.json", + "sha256": "105d464e66e7ac9c3cee66c3a33a47101c95b08f9851a875373d43370c48f70e" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00183/anim-keyframe-delete-by-name-local-exact-report.json", + "sha256": "3e8dd9268e4aa73f673dbbe5c9abc3d9c00acfdbe1cc019673c49925e342deca" + }, + "status": { + "path": "docs/status/M16-GAP-00183.md", + "sha256": "e583e704854dd1eca1fa5c672c3184cef8e2433138628aee92b11fb8a3345f98" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00183/task-context.json", + "sha256": "655cf1b0482f7159b63228a6db2bd2828836d707147f3de74727e9fcdc8a07f4" + } + }, + "nextTask": "M16-GAP-00184" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00183/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00183/task-context.json new file mode 100644 index 00000000..2bb8c85c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00183/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00183", + "parentTask": "M16-GAP-00182", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.keyframe_delete_by_name data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.keyframe_delete_by_name", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00183.py -- tests/files/web/generated/M16-GAP-00183-operator-anim.keyframe_delete_by_name.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00183", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00183" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00183.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1678, + "contextRemainingTokens": 418 + }, + "source": { + "bytes": 8226, + "tokens": 2058 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00183.py", + "bytes": 1654, + "tokens": 414 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00183-operator-anim.keyframe_delete_by_name.blend", + "bytes": 86770, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 231498, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 405874, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00183/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00183.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00183/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1654, + "tokens": 414 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00184", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00183.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00182/manifest.json", + "parentStatus": "docs/status/M16-GAP-00182.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00183.md", + "tests/golden/M16-GAP-00182/manifest.json", + "docs/status/M16-GAP-00182.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00182", + "parentTask": "M16-GAP-00181", + "status": "done", + "nextTask": "M16-GAP-00183", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00182 Status", + "status: done", + "task: anim.keyframe_delete_button operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one selected object with a custom `delete_target` property and an Action keyed at frames 1, 3, and 5. A registered Properties panel exposes the animated property as a real UI button. A foreground Properties context invokes `ANIM_OT_keyframe_delete_button(all=true)` through that active button at frame 3 (`poll=true`, `FINISHED`), deleting only the current keyframe and preserving the two surrounding keys.", + "evidence:", + "- Desktop evidence records the selected/active object changing from `[1, 3, 5]` to `[1, 5]`; the custom property remains at 3.0 and save/reopen is exact." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1829, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 458 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00183.md", + "bytes": 1829, + "lines": 38, + "tokens": 458 + }, + { + "path": "tests/golden/M16-GAP-00182/manifest.json", + "bytes": 2941, + "lines": 74, + "tokens": 736 + }, + { + "path": "docs/status/M16-GAP-00182.md", + "bytes": 1288, + "lines": 18, + "tokens": 322 + } + ], + "sourceTokens": 2058, + "evidenceFiles": 1, + "evidenceBytes": 1654, + "evidenceTokens": 414, + "totalTokens": 2472, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3496, + "serializedContextTokens": 760, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00184/anim-keyframe-delete-v3d-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00184/anim-keyframe-delete-v3d-desktop-report.json new file mode 100644 index 00000000..02dbe775 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00184/anim-keyframe-delete-v3d-desktop-report.json @@ -0,0 +1,67 @@ +{ + "after": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 5.0 + ], + "index": 0, + "path": "[\"delete_target\"]", + "selected": [ + true, + true + ], + "values": [ + 1.0, + 5.0 + ] + } + ], + "name": "WebGapAnimKeyframeDeleteV3DAction" + }, + "active": true, + "selected": true, + "value": 3.0 + }, + "before": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"delete_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1.0, + 3.0, + 5.0 + ] + } + ], + "name": "WebGapAnimKeyframeDeleteV3DAction" + }, + "active": true, + "selected": true, + "value": 3.0 + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00184-operator-anim.keyframe_delete_v3d.blend", + "fixtureSha256": "56cc035995506dfa6c68efced79708c11dc50a20ac3d0e7e9ee59fe29e741995", + "mainMutation": "KEYFRAME_DELETED", + "operation": "ANIM_KEYFRAME_DELETE_V3D_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00184" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00184/anim-keyframe-delete-v3d-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00184/anim-keyframe-delete-v3d-local-exact-report.json new file mode 100644 index 00000000..d4d9c2ea --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00184/anim-keyframe-delete-v3d-local-exact-report.json @@ -0,0 +1,87 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00184", + "operation": "ANIM_KEYFRAME_DELETE_V3D_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00184-operator-anim.keyframe_delete_v3d.blend", + "sha256": "56cc035995506dfa6c68efced79708c11dc50a20ac3d0e7e9ee59fe29e741995" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00184/anim-keyframe-delete-v3d-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "KEYFRAME_DELETED", + "before": { + "channels": [ + { + "frames": [ + 1, + 3, + 5 + ], + "index": 0, + "path": "[\"delete_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1, + 3, + 5 + ] + } + ], + "name": "WebGapAnimKeyframeDeleteV3DAction" + }, + "after": { + "channels": [ + { + "frames": [ + 1, + 5 + ], + "index": 0, + "path": "[\"delete_target\"]", + "selected": [ + true, + true + ], + "values": [ + 1, + 5 + ] + } + ], + "name": "WebGapAnimKeyframeDeleteV3DAction" + } + }, + "wasm": { + "status": "EXACT", + "before": { + "animationId": "action:WebGapAnimKeyframeDeleteV3DAction:object:WebGapAnimKeyframeDeleteV3DObject", + "targetId": "object:WebGapAnimKeyframeDeleteV3DObject", + "channelPaths": [ + "[\"delete_target\"][0]" + ], + "keyframesPerChannel": [ + 3 + ] + }, + "after": { + "animationId": "action:WebGapAnimKeyframeDeleteV3DAction:object:WebGapAnimKeyframeDeleteV3DObject", + "keyframesPerChannel": [ + 2 + ], + "keyframeDeleted": true + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00185" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00184/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00184/manifest.json new file mode 100644 index 00000000..89055582 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00184/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00184", + "parentTask": "M16-GAP-00183", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYFRAME_DELETE_V3D_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00183/manifest.json", + "sha256": "a792624c1a6c90440244488e345af7637a8451d9caa33495368356041aed8273" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00184-operator-anim.keyframe_delete_v3d.blend", + "sha256": "56cc035995506dfa6c68efced79708c11dc50a20ac3d0e7e9ee59fe29e741995" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00184.py", + "sha256": "9bd3112772fe91a57b1cb89a781067316442d4d06e7fbd7fc84429a67fe0272a" + }, + "desktopChecker": { + "path": "tools/web/check-action-keyframe-delete-v3d-desktop.py", + "sha256": "a761edaab49b1a81a7374a465b64b67836ebe06fba9626ba3d5233f91072d541" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "c28933770f3e0af5e792921658d19f9618a439610b8ddc34618d6b70b5a15dcf" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00184/anim-keyframe-delete-v3d-desktop-report.json", + "sha256": "576e712c7d4d72dc15fc2b9a4b65748c2ddd4b43f69c86a57e3365621f19db43" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00184/anim-keyframe-delete-v3d-local-exact-report.json", + "sha256": "3737dbe1e6189cd8312cc3cd3f328e764b2a9ce173a48946e9413a82e8fa4a47" + }, + "status": { + "path": "docs/status/M16-GAP-00184.md", + "sha256": "44d3f28d968aae9c4315f08dd7581cca309347a839e20db4b8f19288bfbe706e" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00184/task-context.json", + "sha256": "41f3f005f99d3e9130a4335fa5cde7982598096f57756e5760f092d3b78792ec" + } + }, + "nextTask": "M16-GAP-00185" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00184/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00184/task-context.json new file mode 100644 index 00000000..b56f3716 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00184/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00184", + "parentTask": "M16-GAP-00183", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.keyframe_delete_v3d data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.keyframe_delete_v3d", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00184.py -- tests/files/web/generated/M16-GAP-00184-operator-anim.keyframe_delete_v3d.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00184", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00184" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00184.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1711, + "contextRemainingTokens": 426 + }, + "source": { + "bytes": 8193, + "tokens": 2050 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00184.py", + "bytes": 1392, + "tokens": 348 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00184-operator-anim.keyframe_delete_v3d.blend", + "bytes": 86712, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 231498, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 411636, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00184/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00184.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00184/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1392, + "tokens": 348 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00185", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00184.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00183/manifest.json", + "parentStatus": "docs/status/M16-GAP-00183.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00184.md", + "tests/golden/M16-GAP-00183/manifest.json", + "docs/status/M16-GAP-00183.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00183", + "parentTask": "M16-GAP-00182", + "status": "done", + "nextTask": "M16-GAP-00184", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00183 Status", + "status: done", + "task: anim.keyframe_delete_by_name operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one selected object with a custom `delete_target` property and an Action keyed at frames 1, 3, and 5. A named Keying Set targets that property. A foreground `VIEW_3D` context invokes `ANIM_OT_keyframe_delete_by_name(type=WebGapAnimKeyframeDeleteByNameSet)` (`poll=true`, `FINISHED`) at frame 3, deleting only the current keyframe and preserving the two surrounding keys.", + "evidence:", + "- Desktop evidence records the selected/active object and named Keying Set changing from `[1, 3, 5]` to `[1, 5]`; the custom property remains at 3.0 and save/reopen is exact." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1809, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 453 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00184.md", + "bytes": 1809, + "lines": 38, + "tokens": 453 + }, + { + "path": "tests/golden/M16-GAP-00183/manifest.json", + "bytes": 2946, + "lines": 74, + "tokens": 737 + }, + { + "path": "docs/status/M16-GAP-00183.md", + "bytes": 1270, + "lines": 18, + "tokens": 318 + } + ], + "sourceTokens": 2050, + "evidenceFiles": 1, + "evidenceBytes": 1392, + "evidenceTokens": 348, + "totalTokens": 2398, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3422, + "serializedContextTokens": 757, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00185/anim-keyframe-delete-vse-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00185/anim-keyframe-delete-vse-desktop-report.json new file mode 100644 index 00000000..9e2b1723 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00185/anim-keyframe-delete-vse-desktop-report.json @@ -0,0 +1,67 @@ +{ + "after": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 5.0 + ], + "index": 0, + "path": "sequence_editor.strips_all[\"WebGapAnimKeyframeDeleteVSEStrip\"].blend_alpha", + "selected": [ + true, + true + ], + "values": [ + 0.25, + 0.75 + ] + } + ], + "name": "WebGapAnimKeyframeDeleteVSEAction" + }, + "active": true, + "blendAlpha": 0.5, + "selected": true + }, + "before": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "sequence_editor.strips_all[\"WebGapAnimKeyframeDeleteVSEStrip\"].blend_alpha", + "selected": [ + true, + true, + true + ], + "values": [ + 0.25, + 0.5, + 0.75 + ] + } + ], + "name": "WebGapAnimKeyframeDeleteVSEAction" + }, + "active": true, + "blendAlpha": 0.5, + "selected": true + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00185-operator-anim.keyframe_delete_vse.blend", + "fixtureSha256": "c01f342471fcae64138f95287363f0e801c4da96992aa4a3d8a4173b0ec0f464", + "mainMutation": "KEYFRAME_DELETED", + "operation": "ANIM_KEYFRAME_DELETE_VSE_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00185" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00185/anim-keyframe-delete-vse-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00185/anim-keyframe-delete-vse-local-exact-report.json new file mode 100644 index 00000000..98af33a5 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00185/anim-keyframe-delete-vse-local-exact-report.json @@ -0,0 +1,87 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00185", + "operation": "ANIM_KEYFRAME_DELETE_VSE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00185-operator-anim.keyframe_delete_vse.blend", + "sha256": "c01f342471fcae64138f95287363f0e801c4da96992aa4a3d8a4173b0ec0f464" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00185/anim-keyframe-delete-vse-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "KEYFRAME_DELETED", + "before": { + "channels": [ + { + "frames": [ + 1, + 3, + 5 + ], + "index": 0, + "path": "sequence_editor.strips_all[\"WebGapAnimKeyframeDeleteVSEStrip\"].blend_alpha", + "selected": [ + true, + true, + true + ], + "values": [ + 0.25, + 0.5, + 0.75 + ] + } + ], + "name": "WebGapAnimKeyframeDeleteVSEAction" + }, + "after": { + "channels": [ + { + "frames": [ + 1, + 5 + ], + "index": 0, + "path": "sequence_editor.strips_all[\"WebGapAnimKeyframeDeleteVSEStrip\"].blend_alpha", + "selected": [ + true, + true + ], + "values": [ + 0.25, + 0.75 + ] + } + ], + "name": "WebGapAnimKeyframeDeleteVSEAction" + } + }, + "wasm": { + "status": "EXACT", + "before": { + "animationId": "action:WebGapAnimKeyframeDeleteVSEAction:scene:Scene", + "targetId": "scene:Scene", + "channelPaths": [ + "sequence_editor.strips_all[\"WebGapAnimKeyframeDeleteVSEStrip\"].blend_alpha[0]" + ], + "keyframesPerChannel": [ + 3 + ] + }, + "after": { + "animationId": "action:WebGapAnimKeyframeDeleteVSEAction:scene:Scene", + "keyframesPerChannel": [ + 2 + ], + "keyframeDeleted": true + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00186" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00185/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00185/manifest.json new file mode 100644 index 00000000..e61ade11 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00185/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00185", + "parentTask": "M16-GAP-00184", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYFRAME_DELETE_VSE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00184/manifest.json", + "sha256": "73843947605c1cb981fae06d47682662bcfe259534e57cb46ee6404b34d041fc" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00185-operator-anim.keyframe_delete_vse.blend", + "sha256": "c01f342471fcae64138f95287363f0e801c4da96992aa4a3d8a4173b0ec0f464" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00185.py", + "sha256": "9abb73d74b639eef255794c35ce8bb102959a53d4d12f8818d45c28946b1e791" + }, + "desktopChecker": { + "path": "tools/web/check-action-keyframe-delete-vse-desktop.py", + "sha256": "67f18d3fc73b9e16cdccc572f551eb2f0f16d496db952889678189eb8fa9253d" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "edc37dc02748b741ab2842a8a3bad665c5e9af18b74c0ef04d6b86cf29e85f66" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00185/anim-keyframe-delete-vse-desktop-report.json", + "sha256": "a7fb103d0746837b7d56ae89e6b8fa6de374f11cfff8cdf79d88fba199449721" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00185/anim-keyframe-delete-vse-local-exact-report.json", + "sha256": "aecbd1f8b711b2299db7e7665931a549a7318d638942eb2d343d680fc0ce5acc" + }, + "status": { + "path": "docs/status/M16-GAP-00185.md", + "sha256": "de8e22ea2619605053b10e19061de49f94ed241fba16c8b7aa0b0099be3a3b2b" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00185/task-context.json", + "sha256": "3badb8af0ff6bd1168e2576568f8be4c44f4b77a175ea86b8e6650a9ef92077f" + } + }, + "nextTask": "M16-GAP-00186" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00185/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00185/task-context.json new file mode 100644 index 00000000..e2bd16b7 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00185/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00185", + "parentTask": "M16-GAP-00184", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.keyframe_delete_vse data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.keyframe_delete_vse", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00185.py -- tests/files/web/generated/M16-GAP-00185-operator-anim.keyframe_delete_vse.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00185", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00185" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00185.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1820, + "contextRemainingTokens": 453 + }, + "source": { + "bytes": 8084, + "tokens": 2023 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00185.py", + "bytes": 1371, + "tokens": 343 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00185-operator-anim.keyframe_delete_vse.blend", + "bytes": 86629, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 231498, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 417633, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00185/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00185.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00185/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1371, + "tokens": 343 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00186", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00185.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00184/manifest.json", + "parentStatus": "docs/status/M16-GAP-00184.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00185.md", + "tests/golden/M16-GAP-00184/manifest.json", + "docs/status/M16-GAP-00184.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00184", + "parentTask": "M16-GAP-00183", + "status": "done", + "nextTask": "M16-GAP-00185", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00184 Status", + "status: done", + "task: anim.keyframe_delete_v3d operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one selected/active object with a custom `delete_target` property and an Action keyed at frames 1, 3, and 5. A foreground `VIEW_3D` context invokes `ANIM_OT_keyframe_delete_v3d(confirm=false)` (`poll=true`, `FINISHED`) at frame 3, deleting only the current keyframe and preserving the two surrounding keys.", + "evidence:", + "- Desktop evidence records the selected/active object changing from `[1, 3, 5]` to `[1, 5]`; the custom property remains at 3.0 and save/reopen is exact." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1809, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 453 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00185.md", + "bytes": 1809, + "lines": 38, + "tokens": 453 + }, + { + "path": "tests/golden/M16-GAP-00184/manifest.json", + "bytes": 2926, + "lines": 74, + "tokens": 732 + }, + { + "path": "docs/status/M16-GAP-00184.md", + "bytes": 1181, + "lines": 18, + "tokens": 296 + } + ], + "sourceTokens": 2023, + "evidenceFiles": 1, + "evidenceBytes": 1371, + "evidenceTokens": 343, + "totalTokens": 2366, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3390, + "serializedContextTokens": 757, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00186/anim-keyframe-insert-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00186/anim-keyframe-insert-desktop-report.json new file mode 100644 index 00000000..e7bef874 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00186/anim-keyframe-insert-desktop-report.json @@ -0,0 +1,69 @@ +{ + "after": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"insert_target\"]", + "selected": [ + false, + true, + false + ], + "values": [ + 1.0, + 3.0, + 5.0 + ] + } + ], + "name": "WebGapAnimKeyframeInsertAction" + }, + "active": true, + "activeKeyingSet": "WebGapAnimKeyframeInsertSet", + "selected": true, + "value": 3.0 + }, + "before": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 5.0 + ], + "index": 0, + "path": "[\"insert_target\"]", + "selected": [ + true, + true + ], + "values": [ + 1.0, + 5.0 + ] + } + ], + "name": "WebGapAnimKeyframeInsertAction" + }, + "active": true, + "activeKeyingSet": "WebGapAnimKeyframeInsertSet", + "selected": true, + "value": 3.0 + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00186-operator-anim.keyframe_insert.blend", + "fixtureSha256": "582dfb8c8dfe6897937afa687d5ebfdb4aeb2e3ae7db73ed02cf6385745bbf70", + "mainMutation": "KEYFRAME_INSERTED", + "operation": "ANIM_KEYFRAME_INSERT_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00186" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00186/anim-keyframe-insert-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00186/anim-keyframe-insert-local-exact-report.json new file mode 100644 index 00000000..8da862b4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00186/anim-keyframe-insert-local-exact-report.json @@ -0,0 +1,87 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00186", + "operation": "ANIM_KEYFRAME_INSERT_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00186-operator-anim.keyframe_insert.blend", + "sha256": "582dfb8c8dfe6897937afa687d5ebfdb4aeb2e3ae7db73ed02cf6385745bbf70" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00186/anim-keyframe-insert-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "KEYFRAME_INSERTED", + "before": { + "channels": [ + { + "frames": [ + 1, + 5 + ], + "index": 0, + "path": "[\"insert_target\"]", + "selected": [ + true, + true + ], + "values": [ + 1, + 5 + ] + } + ], + "name": "WebGapAnimKeyframeInsertAction" + }, + "after": { + "channels": [ + { + "frames": [ + 1, + 3, + 5 + ], + "index": 0, + "path": "[\"insert_target\"]", + "selected": [ + false, + true, + false + ], + "values": [ + 1, + 3, + 5 + ] + } + ], + "name": "WebGapAnimKeyframeInsertAction" + } + }, + "wasm": { + "status": "EXACT", + "before": { + "animationId": "action:WebGapAnimKeyframeInsertAction:object:WebGapAnimKeyframeInsertObject", + "targetId": "object:WebGapAnimKeyframeInsertObject", + "channelPaths": [ + "[\"insert_target\"][0]" + ], + "keyframesPerChannel": [ + 2 + ] + }, + "after": { + "animationId": "action:WebGapAnimKeyframeInsertAction:object:WebGapAnimKeyframeInsertObject", + "keyframesPerChannel": [ + 3 + ], + "keyframeInserted": true + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00187" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00186/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00186/manifest.json new file mode 100644 index 00000000..6531ee81 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00186/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00186", + "parentTask": "M16-GAP-00185", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYFRAME_INSERT_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00185/manifest.json", + "sha256": "0c4e04128b54580988cec59baaf08e1471be26050e380bea7eb9f21a2b092da3" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00186-operator-anim.keyframe_insert.blend", + "sha256": "582dfb8c8dfe6897937afa687d5ebfdb4aeb2e3ae7db73ed02cf6385745bbf70" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00186.py", + "sha256": "edd44185e79eb16c51f2160e5bec5d6ee5dd5ad2d1b662533fa0cfe399e713cd" + }, + "desktopChecker": { + "path": "tools/web/check-action-keyframe-insert-desktop.py", + "sha256": "4c09e55f4f9935b4b4be4c7212451a5c1b01a569aa446c94fe80cdbaff5acda9" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "e32fecfab5c014387399f183d2f715194d32809bfbb9f86894730fce4fb99b98" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00186/anim-keyframe-insert-desktop-report.json", + "sha256": "dfb8191a85b427ab80a3f6cb2fa118f0f7ddc1ce895b93c8c6e4ddf34f4d780c" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00186/anim-keyframe-insert-local-exact-report.json", + "sha256": "17e4943e084a1323e1de9eca68039b4a6a9e9d060c9e3d3e44e663c8a9d93ce1" + }, + "status": { + "path": "docs/status/M16-GAP-00186.md", + "sha256": "1f2f3ec3947f4593dd5204d1058a125127f396013063a8fa0d447c189f4f50ce" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00186/task-context.json", + "sha256": "4115c25ef7bce2ce0cd3fcadedf6c8aba24fbcd4eb0f037f60f1d0548316d540" + } + }, + "nextTask": "M16-GAP-00187" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00186/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00186/task-context.json new file mode 100644 index 00000000..5cc7e0d7 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00186/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00186", + "parentTask": "M16-GAP-00185", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.keyframe_insert data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.keyframe_insert", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00186.py -- tests/files/web/generated/M16-GAP-00186-operator-anim.keyframe_insert.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00186", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00186" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00186.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1774, + "contextRemainingTokens": 442 + }, + "source": { + "bytes": 8130, + "tokens": 2034 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00186.py", + "bytes": 1651, + "tokens": 413 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00186-operator-anim.keyframe_insert.blend", + "bytes": 86814, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 231498, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 423464, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00186/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00186.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00186/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1651, + "tokens": 413 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00187", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00186.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00185/manifest.json", + "parentStatus": "docs/status/M16-GAP-00185.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00186.md", + "tests/golden/M16-GAP-00185/manifest.json", + "docs/status/M16-GAP-00185.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00185", + "parentTask": "M16-GAP-00184", + "status": "done", + "nextTask": "M16-GAP-00186", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00185 Status", + "status: done", + "task: anim.keyframe_delete_vse operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one selected/active image strip with a Scene Action animating `blend_alpha` at frames 1, 3, and 5. A foreground `SEQUENCE_EDITOR` context invokes `ANIM_OT_keyframe_delete_vse(confirm=false)` (`poll=true`, `FINISHED`) at frame 3, deleting only the current strip keyframe and preserving the two surrounding keys.", + "evidence:", + "- Desktop evidence records the selected/active strip changing from `[1, 3, 5]` to `[1, 5]`; `blend_alpha` remains 0.5 at frame 3 and save/reopen is exact." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1789, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 448 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00186.md", + "bytes": 1789, + "lines": 38, + "tokens": 448 + }, + { + "path": "tests/golden/M16-GAP-00185/manifest.json", + "bytes": 2926, + "lines": 74, + "tokens": 732 + }, + { + "path": "docs/status/M16-GAP-00185.md", + "bytes": 1247, + "lines": 18, + "tokens": 312 + } + ], + "sourceTokens": 2034, + "evidenceFiles": 1, + "evidenceBytes": 1651, + "evidenceTokens": 413, + "totalTokens": 2447, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3471, + "serializedContextTokens": 754, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00187/anim-keyframe-insert-button-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00187/anim-keyframe-insert-button-desktop-report.json new file mode 100644 index 00000000..7fcbab25 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00187/anim-keyframe-insert-button-desktop-report.json @@ -0,0 +1,67 @@ +{ + "after": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"insert_target\"]", + "selected": [ + false, + true, + false + ], + "values": [ + 1.0, + 3.0, + 5.0 + ] + } + ], + "name": "WebGapAnimKeyframeInsertButtonAction" + }, + "active": true, + "selected": true, + "value": 3.0 + }, + "before": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 5.0 + ], + "index": 0, + "path": "[\"insert_target\"]", + "selected": [ + true, + true + ], + "values": [ + 1.0, + 5.0 + ] + } + ], + "name": "WebGapAnimKeyframeInsertButtonAction" + }, + "active": true, + "selected": true, + "value": 3.0 + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00187-operator-anim.keyframe_insert_button.blend", + "fixtureSha256": "5398394b340d509043a2e8130249dbbb0736fa540c833a303445c07c9f775e9a", + "mainMutation": "KEYFRAME_INSERTED", + "operation": "ANIM_KEYFRAME_INSERT_BUTTON_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00187" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00187/anim-keyframe-insert-button-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00187/anim-keyframe-insert-button-local-exact-report.json new file mode 100644 index 00000000..3365c5a5 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00187/anim-keyframe-insert-button-local-exact-report.json @@ -0,0 +1,87 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00187", + "operation": "ANIM_KEYFRAME_INSERT_BUTTON_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00187-operator-anim.keyframe_insert_button.blend", + "sha256": "5398394b340d509043a2e8130249dbbb0736fa540c833a303445c07c9f775e9a" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00187/anim-keyframe-insert-button-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "KEYFRAME_INSERTED", + "before": { + "channels": [ + { + "frames": [ + 1, + 5 + ], + "index": 0, + "path": "[\"insert_target\"]", + "selected": [ + true, + true + ], + "values": [ + 1, + 5 + ] + } + ], + "name": "WebGapAnimKeyframeInsertButtonAction" + }, + "after": { + "channels": [ + { + "frames": [ + 1, + 3, + 5 + ], + "index": 0, + "path": "[\"insert_target\"]", + "selected": [ + false, + true, + false + ], + "values": [ + 1, + 3, + 5 + ] + } + ], + "name": "WebGapAnimKeyframeInsertButtonAction" + } + }, + "wasm": { + "status": "EXACT", + "before": { + "animationId": "action:WebGapAnimKeyframeInsertButtonAction:object:WebGapAnimKeyframeInsertButtonObject", + "targetId": "object:WebGapAnimKeyframeInsertButtonObject", + "channelPaths": [ + "[\"insert_target\"][0]" + ], + "keyframesPerChannel": [ + 2 + ] + }, + "after": { + "animationId": "action:WebGapAnimKeyframeInsertButtonAction:object:WebGapAnimKeyframeInsertButtonObject", + "keyframesPerChannel": [ + 3 + ], + "keyframeInserted": true + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00188" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00187/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00187/manifest.json new file mode 100644 index 00000000..41fc7aa7 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00187/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00187", + "parentTask": "M16-GAP-00186", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYFRAME_INSERT_BUTTON_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00186/manifest.json", + "sha256": "fc77d169050a1bd032820da68dd63e059878188faa2eb88ab1fc7ffc5041548d" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00187-operator-anim.keyframe_insert_button.blend", + "sha256": "5398394b340d509043a2e8130249dbbb0736fa540c833a303445c07c9f775e9a" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00187.py", + "sha256": "7eaac0eb63db785dea7da7df596fa19ed5447b356b13667c5f25e5ee1cecf14d" + }, + "desktopChecker": { + "path": "tools/web/check-action-keyframe-insert-button-desktop.py", + "sha256": "0fa0478deb1eb742105b5902070e5764113378ed1c7d390155cd2be61e991b08" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "cd43c016cf91a8e258f8f6a53dd4148c6986bd2ccddfc6f16272ab163bb2419b" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00187/anim-keyframe-insert-button-desktop-report.json", + "sha256": "b7de5f8ac81d96e316a6d13b1f03650339841bf043ff3a4c9b3396a14420f506" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00187/anim-keyframe-insert-button-local-exact-report.json", + "sha256": "460c2285310d2cf456ced4f1438ab6fd609a1470dde4a37cd09b349099f90873" + }, + "status": { + "path": "docs/status/M16-GAP-00187.md", + "sha256": "16c75cd97e157bcb23bce603f7e27f6f095ce1c76c3f11501355a9431472e691" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00187/task-context.json", + "sha256": "cdfc0b01d9e76dfaed39d9e6c44836cf3aea3df2a363689177e775d2286e0182" + } + }, + "nextTask": "M16-GAP-00188" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00187/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00187/task-context.json new file mode 100644 index 00000000..5afcf9c2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00187/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00187", + "parentTask": "M16-GAP-00186", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.keyframe_insert_button data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.keyframe_insert_button", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00187.py -- tests/files/web/generated/M16-GAP-00187-operator-anim.keyframe_insert_button.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00187", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00187" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00187.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1772, + "contextRemainingTokens": 442 + }, + "source": { + "bytes": 8132, + "tokens": 2034 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00187.py", + "bytes": 1346, + "tokens": 337 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00187-operator-anim.keyframe_insert_button.blend", + "bytes": 86812, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 231498, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 429105, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00187/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00187.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00187/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1346, + "tokens": 337 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00188", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00187.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00186/manifest.json", + "parentStatus": "docs/status/M16-GAP-00186.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00187.md", + "tests/golden/M16-GAP-00186/manifest.json", + "docs/status/M16-GAP-00186.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00186", + "parentTask": "M16-GAP-00185", + "status": "done", + "nextTask": "M16-GAP-00187", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00186 Status", + "status: done", + "task: anim.keyframe_insert operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one selected/active object with a custom `insert_target` property and a named active Keying Set. Its Action starts with keys at frames 1 and 5. A foreground `VIEW_3D` context invokes `ANIM_OT_keyframe_insert()` (`poll=true`, `FINISHED`) at frame 3, inserting the current key while preserving the existing keys.", + "evidence:", + "- Desktop evidence records the Action changing from `[1, 5]` to `[1, 3, 5]`; the inserted key is the only selected key (`[false, true, false]`), the custom property remains at 3.0, and save/reopen is exact." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1824, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 456 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00187.md", + "bytes": 1824, + "lines": 38, + "tokens": 456 + }, + { + "path": "tests/golden/M16-GAP-00186/manifest.json", + "bytes": 2906, + "lines": 74, + "tokens": 727 + }, + { + "path": "docs/status/M16-GAP-00186.md", + "bytes": 1234, + "lines": 18, + "tokens": 309 + } + ], + "sourceTokens": 2034, + "evidenceFiles": 1, + "evidenceBytes": 1346, + "evidenceTokens": 337, + "totalTokens": 2371, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3395, + "serializedContextTokens": 760, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00188/anim-keyframe-insert-by-name-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00188/anim-keyframe-insert-by-name-desktop-report.json new file mode 100644 index 00000000..7b449ac9 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00188/anim-keyframe-insert-by-name-desktop-report.json @@ -0,0 +1,69 @@ +{ + "after": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"insert_target\"]", + "selected": [ + false, + true, + false + ], + "values": [ + 1.0, + 3.0, + 5.0 + ] + } + ], + "name": "WebGapAnimKeyframeInsertByNameAction" + }, + "active": true, + "activeKeyingSet": "WebGapAnimKeyframeInsertByNameSet", + "selected": true, + "value": 3.0 + }, + "before": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 5.0 + ], + "index": 0, + "path": "[\"insert_target\"]", + "selected": [ + true, + true + ], + "values": [ + 1.0, + 5.0 + ] + } + ], + "name": "WebGapAnimKeyframeInsertByNameAction" + }, + "active": true, + "activeKeyingSet": "WebGapAnimKeyframeInsertByNameSet", + "selected": true, + "value": 3.0 + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00188-operator-anim.keyframe_insert_by_name.blend", + "fixtureSha256": "b0be38528561fad722c52000ced9b4c44bff594d5fcf134ab89295ab8b97554d", + "mainMutation": "KEYFRAME_INSERTED", + "operation": "ANIM_KEYFRAME_INSERT_BY_NAME_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00188" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00188/anim-keyframe-insert-by-name-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00188/anim-keyframe-insert-by-name-local-exact-report.json new file mode 100644 index 00000000..699f1340 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00188/anim-keyframe-insert-by-name-local-exact-report.json @@ -0,0 +1,87 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00188", + "operation": "ANIM_KEYFRAME_INSERT_BY_NAME_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00188-operator-anim.keyframe_insert_by_name.blend", + "sha256": "b0be38528561fad722c52000ced9b4c44bff594d5fcf134ab89295ab8b97554d" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00188/anim-keyframe-insert-by-name-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "KEYFRAME_INSERTED", + "before": { + "channels": [ + { + "frames": [ + 1, + 5 + ], + "index": 0, + "path": "[\"insert_target\"]", + "selected": [ + true, + true + ], + "values": [ + 1, + 5 + ] + } + ], + "name": "WebGapAnimKeyframeInsertByNameAction" + }, + "after": { + "channels": [ + { + "frames": [ + 1, + 3, + 5 + ], + "index": 0, + "path": "[\"insert_target\"]", + "selected": [ + false, + true, + false + ], + "values": [ + 1, + 3, + 5 + ] + } + ], + "name": "WebGapAnimKeyframeInsertByNameAction" + } + }, + "wasm": { + "status": "EXACT", + "before": { + "animationId": "action:WebGapAnimKeyframeInsertByNameAction:object:WebGapAnimKeyframeInsertByNameObject", + "targetId": "object:WebGapAnimKeyframeInsertByNameObject", + "channelPaths": [ + "[\"insert_target\"][0]" + ], + "keyframesPerChannel": [ + 2 + ] + }, + "after": { + "animationId": "action:WebGapAnimKeyframeInsertByNameAction:object:WebGapAnimKeyframeInsertByNameObject", + "keyframesPerChannel": [ + 3 + ], + "keyframeInserted": true + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00189" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00188/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00188/manifest.json new file mode 100644 index 00000000..da12dd4c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00188/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00188", + "parentTask": "M16-GAP-00187", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYFRAME_INSERT_BY_NAME_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00187/manifest.json", + "sha256": "942eafb747f0d002ad2179d90f89acc64e3c347d340355895136689755a2052e" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00188-operator-anim.keyframe_insert_by_name.blend", + "sha256": "b0be38528561fad722c52000ced9b4c44bff594d5fcf134ab89295ab8b97554d" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00188.py", + "sha256": "109653bb9dd32d38ba755a6b284bdc75cca195894327db2f96feaf47faf8d935" + }, + "desktopChecker": { + "path": "tools/web/check-action-keyframe-insert-by-name-desktop.py", + "sha256": "754eaa916735252fd9a462629da646890fbb9285c201d569e36314ca1b1d8bb2" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "df1ae531630362ab3e5e6f7e7aef6abbbff3e0d1becd8da84bced5ae5dee258a" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00188/anim-keyframe-insert-by-name-desktop-report.json", + "sha256": "d89d0950420ef0a81ca983619bf0f168b173e1a631769bcb4b342cfe3b2a9c09" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00188/anim-keyframe-insert-by-name-local-exact-report.json", + "sha256": "4928e35b98ac71b76c68fe2eccbd86481bb854123d428b1af66fbc7270df7e42" + }, + "status": { + "path": "docs/status/M16-GAP-00188.md", + "sha256": "bf958a16b78eae1da59438bfac089fcf16197982a23d91dbcd6d386942bc6425" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00188/task-context.json", + "sha256": "64ceb67dd3d00a7e07a5dd4f263527326442a591b1b5a404c2235809c05274d0" + } + }, + "nextTask": "M16-GAP-00189" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00188/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00188/task-context.json new file mode 100644 index 00000000..21bde90f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00188/task-context.json @@ -0,0 +1,182 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00188", + "parentTask": "M16-GAP-00187", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.keyframe_insert_by_name data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.keyframe_insert_by_name", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00188.py -- tests/files/web/generated/M16-GAP-00188-operator-anim.keyframe_insert_by_name.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00188", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00188" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1633, + "contextRemainingTokens": 406 + }, + "source": { + "bytes": 8271, + "tokens": 2070 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00188-operator-anim.keyframe_insert_by_name.blend", + "bytes": 86813, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/generated/M16-GAP-00188.py", + "bytes": 1665, + "reason": "CONTEXT_REMAINING_SPACE" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 231498, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 434821, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00188/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00188.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00188/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00189", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00188.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00187/manifest.json", + "parentStatus": "docs/status/M16-GAP-00187.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00188.md", + "tests/golden/M16-GAP-00187/manifest.json", + "docs/status/M16-GAP-00187.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00187", + "parentTask": "M16-GAP-00186", + "status": "done", + "nextTask": "M16-GAP-00188", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00187 Status", + "status: done", + "task: anim.keyframe_insert_button operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one selected/active object with a custom `insert_target` property and an Action keyed at frames 1 and 5. A registered Properties panel exposes the animated property as a real UI button. A foreground Properties context invokes `ANIM_OT_keyframe_insert_button(all=true)` through that active button at frame 3 (`poll=true`, `FINISHED`), inserting the current key while preserving the two existing keys.", + "evidence:", + "- Desktop evidence records the Action changing from `[1, 5]` to `[1, 3, 5]`; the inserted key is the only selected key (`[false, true, false]`), the custom property remains at 3.0 and save/reopen is exact." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1829, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 458 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00188.md", + "bytes": 1829, + "lines": 38, + "tokens": 458 + }, + { + "path": "tests/golden/M16-GAP-00187/manifest.json", + "bytes": 2941, + "lines": 74, + "tokens": 736 + }, + { + "path": "docs/status/M16-GAP-00187.md", + "bytes": 1333, + "lines": 18, + "tokens": 334 + } + ], + "sourceTokens": 2070, + "evidenceFiles": 0, + "evidenceBytes": 0, + "evidenceTokens": 0, + "totalTokens": 2070, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3094, + "serializedContextTokens": 725, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00189/anim-keyframe-insert-menu-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00189/anim-keyframe-insert-menu-desktop-report.json new file mode 100644 index 00000000..88943a69 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00189/anim-keyframe-insert-menu-desktop-report.json @@ -0,0 +1,69 @@ +{ + "after": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"insert_target\"]", + "selected": [ + false, + true, + false + ], + "values": [ + 1.0, + 3.0, + 5.0 + ] + } + ], + "name": "WebGapAnimKeyframeInsertMenuAction" + }, + "active": true, + "activeKeyingSet": "WebGapAnimKeyframeInsertMenuSet", + "selected": true, + "value": 3.0 + }, + "before": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 5.0 + ], + "index": 0, + "path": "[\"insert_target\"]", + "selected": [ + true, + true + ], + "values": [ + 1.0, + 5.0 + ] + } + ], + "name": "WebGapAnimKeyframeInsertMenuAction" + }, + "active": true, + "activeKeyingSet": "WebGapAnimKeyframeInsertMenuSet", + "selected": true, + "value": 3.0 + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00189-operator-anim.keyframe_insert_menu.blend", + "fixtureSha256": "8c34e11c10c2de3de7209006c87594db1a1df0b62a6f9b92dac45f2cb176a52f", + "mainMutation": "KEYFRAME_INSERTED", + "operation": "ANIM_KEYFRAME_INSERT_MENU_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00189" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00189/anim-keyframe-insert-menu-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00189/anim-keyframe-insert-menu-local-exact-report.json new file mode 100644 index 00000000..2357abaa --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00189/anim-keyframe-insert-menu-local-exact-report.json @@ -0,0 +1,87 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00189", + "operation": "ANIM_KEYFRAME_INSERT_MENU_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00189-operator-anim.keyframe_insert_menu.blend", + "sha256": "8c34e11c10c2de3de7209006c87594db1a1df0b62a6f9b92dac45f2cb176a52f" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00189/anim-keyframe-insert-menu-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "KEYFRAME_INSERTED", + "before": { + "channels": [ + { + "frames": [ + 1, + 5 + ], + "index": 0, + "path": "[\"insert_target\"]", + "selected": [ + true, + true + ], + "values": [ + 1, + 5 + ] + } + ], + "name": "WebGapAnimKeyframeInsertMenuAction" + }, + "after": { + "channels": [ + { + "frames": [ + 1, + 3, + 5 + ], + "index": 0, + "path": "[\"insert_target\"]", + "selected": [ + false, + true, + false + ], + "values": [ + 1, + 3, + 5 + ] + } + ], + "name": "WebGapAnimKeyframeInsertMenuAction" + } + }, + "wasm": { + "status": "EXACT", + "before": { + "animationId": "action:WebGapAnimKeyframeInsertMenuAction:object:WebGapAnimKeyframeInsertMenuObject", + "targetId": "object:WebGapAnimKeyframeInsertMenuObject", + "channelPaths": [ + "[\"insert_target\"][0]" + ], + "keyframesPerChannel": [ + 2 + ] + }, + "after": { + "animationId": "action:WebGapAnimKeyframeInsertMenuAction:object:WebGapAnimKeyframeInsertMenuObject", + "keyframesPerChannel": [ + 3 + ], + "keyframeInserted": true + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00190" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00189/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00189/manifest.json new file mode 100644 index 00000000..ee8cf1ee --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00189/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00189", + "parentTask": "M16-GAP-00188", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYFRAME_INSERT_MENU_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00188/manifest.json", + "sha256": "1ea8b1c23b9e324634206e37e4b74f4714dd749a1d712d3a411a03d2be6aa3f7" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00189-operator-anim.keyframe_insert_menu.blend", + "sha256": "8c34e11c10c2de3de7209006c87594db1a1df0b62a6f9b92dac45f2cb176a52f" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00189.py", + "sha256": "20c8d28aea4b14e24dfe83e1b7c3906e8bf1f2ed1fbb723542320a7ece13f73f" + }, + "desktopChecker": { + "path": "tools/web/check-action-keyframe-insert-menu-desktop.py", + "sha256": "a8a378ecd1242852dac76e83d5a19412aa6caf70a85f23364f17d48c806bb921" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "1cb54ea443ad3162267407c789331cc5078dfb05b47f2f6f902132f016813b59" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00189/anim-keyframe-insert-menu-desktop-report.json", + "sha256": "8f01c695716b3902e0d8caa4b335bc67257e4688a4af5e35fd61b5d98d9b3d03" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00189/anim-keyframe-insert-menu-local-exact-report.json", + "sha256": "a95cc2b84481263298f5bef1fbe0d46a2ab272de25ce5e0a39e84457453e0144" + }, + "status": { + "path": "docs/status/M16-GAP-00189.md", + "sha256": "f57b7b340a8c137afda5bb04daa4a71de372e2b0bd74fdb692029bea2da5e7c4" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00189/task-context.json", + "sha256": "46d321ed3909a9a52fdaf4b2c1f2ee9be2d16c2c8aff32ce4baca43c09f41682" + } + }, + "nextTask": "M16-GAP-00190" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00189/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00189/task-context.json new file mode 100644 index 00000000..9c215e11 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00189/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00189", + "parentTask": "M16-GAP-00188", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.keyframe_insert_menu data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.keyframe_insert_menu", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00189.py -- tests/files/web/generated/M16-GAP-00189-operator-anim.keyframe_insert_menu.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00189", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00189" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00189.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1679, + "contextRemainingTokens": 418 + }, + "source": { + "bytes": 8225, + "tokens": 2058 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00189.py", + "bytes": 1620, + "tokens": 405 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00189-operator-anim.keyframe_insert_menu.blend", + "bytes": 86801, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 231498, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 440470, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00189/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00189.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00189/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1620, + "tokens": 405 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00190", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00189.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00188/manifest.json", + "parentStatus": "docs/status/M16-GAP-00188.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00189.md", + "tests/golden/M16-GAP-00188/manifest.json", + "docs/status/M16-GAP-00188.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00188", + "parentTask": "M16-GAP-00187", + "status": "done", + "nextTask": "M16-GAP-00189", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00188 Status", + "status: done", + "task: anim.keyframe_insert_by_name operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one selected/active object with a custom `insert_target` property, an Action keyed at frames 1 and 5, and a named Keying Set targeting that property. A foreground `VIEW_3D` context invokes `ANIM_OT_keyframe_insert_by_name(type=WebGapAnimKeyframeInsertByNameSet)` (`poll=true`, `FINISHED`) at frame 3, inserting the current key while preserving the two existing keys.", + "evidence:", + "- Desktop evidence records the Action changing from `[1, 5]` to `[1, 3, 5]`; the inserted key is the only selected key (`[false, true, false]`), the custom property remains at 3.0 and save/reopen is exact." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1814, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 454 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00189.md", + "bytes": 1814, + "lines": 38, + "tokens": 454 + }, + { + "path": "tests/golden/M16-GAP-00188/manifest.json", + "bytes": 2946, + "lines": 74, + "tokens": 737 + }, + { + "path": "docs/status/M16-GAP-00188.md", + "bytes": 1297, + "lines": 18, + "tokens": 325 + } + ], + "sourceTokens": 2058, + "evidenceFiles": 1, + "evidenceBytes": 1620, + "evidenceTokens": 405, + "totalTokens": 2463, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3487, + "serializedContextTokens": 758, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00190/anim-keying-set-active-set-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00190/anim-keying-set-active-set-desktop-report.json new file mode 100644 index 00000000..016592ef --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00190/anim-keying-set-active-set-desktop-report.json @@ -0,0 +1,72 @@ +{ + "after": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"active_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1.0, + 3.0, + 5.0 + ] + } + ], + "name": "WebGapAnimKeyingSetActiveAction" + }, + "active": true, + "activeKeyingSet": "WebGapAnimKeyingSetActiveB", + "selected": true, + "value": 3.0 + }, + "before": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"active_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1.0, + 3.0, + 5.0 + ] + } + ], + "name": "WebGapAnimKeyingSetActiveAction" + }, + "active": true, + "activeKeyingSet": "WebGapAnimKeyingSetActiveA", + "selected": true, + "value": 3.0 + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00190-operator-anim.keying_set_active_set.blend", + "fixtureSha256": "54d342c6054339281d8d380e01eb64f038e4735626a69248de66fadee34fbcae", + "mainMutation": "ACTIVE_KEYING_SET_CHANGED", + "operation": "ANIM_KEYING_SET_ACTIVE_SET_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00190" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00190/anim-keying-set-active-set-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00190/anim-keying-set-active-set-local-exact-report.json new file mode 100644 index 00000000..0d8533bd --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00190/anim-keying-set-active-set-local-exact-report.json @@ -0,0 +1,103 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00190", + "operation": "ANIM_KEYING_SET_ACTIVE_SET_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00190-operator-anim.keying_set_active_set.blend", + "sha256": "54d342c6054339281d8d380e01eb64f038e4735626a69248de66fadee34fbcae" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00190/anim-keying-set-active-set-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "ACTIVE_KEYING_SET_CHANGED", + "before": { + "action": { + "channels": [ + { + "frames": [ + 1, + 3, + 5 + ], + "index": 0, + "path": "[\"active_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1, + 3, + 5 + ] + } + ], + "name": "WebGapAnimKeyingSetActiveAction" + }, + "active": true, + "activeKeyingSet": "WebGapAnimKeyingSetActiveA", + "selected": true, + "value": 3 + }, + "after": { + "action": { + "channels": [ + { + "frames": [ + 1, + 3, + 5 + ], + "index": 0, + "path": "[\"active_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1, + 3, + 5 + ] + } + ], + "name": "WebGapAnimKeyingSetActiveAction" + }, + "active": true, + "activeKeyingSet": "WebGapAnimKeyingSetActiveB", + "selected": true, + "value": 3 + } + }, + "wasm": { + "status": "EXACT", + "before": { + "animationId": "action:WebGapAnimKeyingSetActiveAction:object:WebGapAnimKeyingSetActiveObject", + "targetId": "object:WebGapAnimKeyingSetActiveObject", + "channelPaths": [ + "[\"active_target\"][0]" + ], + "keyframesPerChannel": [ + 3 + ] + }, + "after": { + "animationId": "action:WebGapAnimKeyingSetActiveAction:object:WebGapAnimKeyingSetActiveObject", + "keyframesPerChannel": [ + 3 + ], + "visibleMainUnchanged": true, + "keyingSetMetadata": "NOT_EXPOSED_BY_SCENE_SNAPSHOT" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00191" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00190/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00190/manifest.json new file mode 100644 index 00000000..33651238 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00190/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00190", + "parentTask": "M16-GAP-00189", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYING_SET_ACTIVE_SET_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00189/manifest.json", + "sha256": "1ffc688a62e5c7f5141a9cd52dd192630097f01eacc8a8c6eac4991586eba33e" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00190-operator-anim.keying_set_active_set.blend", + "sha256": "54d342c6054339281d8d380e01eb64f038e4735626a69248de66fadee34fbcae" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00190.py", + "sha256": "f54bc93cb7b686883ae9bf3b36406d953af3c8246dca01e439999b5e09e4574a" + }, + "desktopChecker": { + "path": "tools/web/check-action-keying-set-active-set-desktop.py", + "sha256": "c0aaab7f5aae2982303ca0ab4cb05186d3d67ba21728bb49a2f8615a300d05f5" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "3e662b1abc876a4602aec079d6c6fa8d200ab14b102efb426d94bc712113634c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00190/anim-keying-set-active-set-desktop-report.json", + "sha256": "69ff6f5b3862697e6d17545c63264a0361aa9f6996b874897dd25a138257bc38" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00190/anim-keying-set-active-set-local-exact-report.json", + "sha256": "70e94768b98b0b14a1d03e9e016e62374838b4ad6fa68f893519fed6674f709d" + }, + "status": { + "path": "docs/status/M16-GAP-00190.md", + "sha256": "59def4f8ecb6005d53b5f1b335da97abf89a21f55ceb3589bd87493e2d06b9bd" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00190/task-context.json", + "sha256": "aaff27f84e2eb6f2d49c31ef6467e512acd01efca64a46dbe0fb967f19aedd98" + } + }, + "nextTask": "M16-GAP-00191" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00190/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00190/task-context.json new file mode 100644 index 00000000..5bfd5a30 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00190/task-context.json @@ -0,0 +1,182 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00190", + "parentTask": "M16-GAP-00189", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.keying_set_active_set data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.keying_set_active_set", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00190.py -- tests/files/web/generated/M16-GAP-00190-operator-anim.keying_set_active_set.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00190", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00190" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1722, + "contextRemainingTokens": 430 + }, + "source": { + "bytes": 8182, + "tokens": 2046 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00190-operator-anim.keying_set_active_set.blend", + "bytes": 86889, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/generated/M16-GAP-00190.py", + "bytes": 1743, + "reason": "CONTEXT_REMAINING_SPACE" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 231498, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 445010, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00190/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00190.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00190/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00191", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00190.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00189/manifest.json", + "parentStatus": "docs/status/M16-GAP-00189.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00190.md", + "tests/golden/M16-GAP-00189/manifest.json", + "docs/status/M16-GAP-00189.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00189", + "parentTask": "M16-GAP-00188", + "status": "done", + "nextTask": "M16-GAP-00190", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00189 Status", + "status: done", + "task: anim.keyframe_insert_menu operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one selected/active object with a custom `insert_target` property, an Action keyed at frames 1 and 5, and a named active Keying Set. A foreground `VIEW_3D` context invokes `ANIM_OT_keyframe_insert_menu(always_prompt=false)` (`poll=true`, `FINISHED`); Blender takes the active-Keying-Set fast path and inserts the current key at frame 3.", + "evidence:", + "- Desktop evidence records the Action changing from `[1, 5]` to `[1, 3, 5]`; the inserted key is the only selected key (`[false, true, false]`), the custom property remains at 3.0 and save/reopen is exact." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1819, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 455 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00190.md", + "bytes": 1819, + "lines": 38, + "tokens": 455 + }, + { + "path": "tests/golden/M16-GAP-00189/manifest.json", + "bytes": 2931, + "lines": 74, + "tokens": 733 + }, + { + "path": "docs/status/M16-GAP-00189.md", + "bytes": 1264, + "lines": 18, + "tokens": 316 + } + ], + "sourceTokens": 2046, + "evidenceFiles": 0, + "evidenceBytes": 0, + "evidenceTokens": 0, + "totalTokens": 2046, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3070, + "serializedContextTokens": 723, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00191/anim-keying-set-add-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00191/anim-keying-set-add-desktop-report.json new file mode 100644 index 00000000..53c1db7e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00191/anim-keying-set-add-desktop-report.json @@ -0,0 +1,74 @@ +{ + "after": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"add_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1.0, + 3.0, + 5.0 + ] + } + ], + "name": "WebGapAnimKeyingSetAddAction" + }, + "active": true, + "activeKeyingSet": "KeyingSet", + "keyingSetCount": 1, + "selected": true, + "value": 3.0 + }, + "before": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"add_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1.0, + 3.0, + 5.0 + ] + } + ], + "name": "WebGapAnimKeyingSetAddAction" + }, + "active": true, + "activeKeyingSet": null, + "keyingSetCount": 0, + "selected": true, + "value": 3.0 + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00191-operator-anim.keying_set_add.blend", + "fixtureSha256": "a87db22a399c85cb282baf65a58763df7656603df9571bc34cdece31ef439187", + "mainMutation": "KEYING_SET_ADDED", + "operation": "ANIM_KEYING_SET_ADD_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00191" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00191/anim-keying-set-add-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00191/anim-keying-set-add-local-exact-report.json new file mode 100644 index 00000000..d4c1380e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00191/anim-keying-set-add-local-exact-report.json @@ -0,0 +1,105 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00191", + "operation": "ANIM_KEYING_SET_ADD_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00191-operator-anim.keying_set_add.blend", + "sha256": "a87db22a399c85cb282baf65a58763df7656603df9571bc34cdece31ef439187" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00191/anim-keying-set-add-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "KEYING_SET_ADDED", + "before": { + "action": { + "channels": [ + { + "frames": [ + 1, + 3, + 5 + ], + "index": 0, + "path": "[\"add_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1, + 3, + 5 + ] + } + ], + "name": "WebGapAnimKeyingSetAddAction" + }, + "active": true, + "activeKeyingSet": null, + "keyingSetCount": 0, + "selected": true, + "value": 3 + }, + "after": { + "action": { + "channels": [ + { + "frames": [ + 1, + 3, + 5 + ], + "index": 0, + "path": "[\"add_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1, + 3, + 5 + ] + } + ], + "name": "WebGapAnimKeyingSetAddAction" + }, + "active": true, + "activeKeyingSet": "KeyingSet", + "keyingSetCount": 1, + "selected": true, + "value": 3 + } + }, + "wasm": { + "status": "EXACT", + "before": { + "animationId": "action:WebGapAnimKeyingSetAddAction:object:WebGapAnimKeyingSetAddObject", + "targetId": "object:WebGapAnimKeyingSetAddObject", + "channelPaths": [ + "[\"add_target\"][0]" + ], + "keyframesPerChannel": [ + 3 + ] + }, + "after": { + "animationId": "action:WebGapAnimKeyingSetAddAction:object:WebGapAnimKeyingSetAddObject", + "keyframesPerChannel": [ + 3 + ], + "visibleMainUnchanged": true, + "keyingSetMetadata": "NOT_EXPOSED_BY_SCENE_SNAPSHOT" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00192" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00191/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00191/manifest.json new file mode 100644 index 00000000..0cbfef06 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00191/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00191", + "parentTask": "M16-GAP-00190", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYING_SET_ADD_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00190/manifest.json", + "sha256": "b5b28c6e402db6eb90d4c4a5f1837476d3a24d6725e63c9b70ec5461a4c665d7" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00191-operator-anim.keying_set_add.blend", + "sha256": "a87db22a399c85cb282baf65a58763df7656603df9571bc34cdece31ef439187" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00191.py", + "sha256": "42f787b67fd1858ef184ffaa76438a025d92fc49fe80cdf3a3334e314839a123" + }, + "desktopChecker": { + "path": "tools/web/check-action-keying-set-add-desktop.py", + "sha256": "70f33c905c82b3668c51e0f0c177dc4676417f8a6d9f2c1e0c87d6b9f433a958" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "cd8fbe18375df8f08c799fab350fe4a864639c12947d1ea8faafca8b4642d6e4" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00191/anim-keying-set-add-desktop-report.json", + "sha256": "b19f86edd48c4fb40f3077af333baa89127d51218ca110861f2e77063caff304" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00191/anim-keying-set-add-local-exact-report.json", + "sha256": "d244b7788db82edae28bf1ceebe5d5a8978b317ea8a259abd4ecc1c071fdc68a" + }, + "status": { + "path": "docs/status/M16-GAP-00191.md", + "sha256": "c4d82279105c2e1821577084e539495d09bd99de99eaefadc1f23ed95841a333" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00191/task-context.json", + "sha256": "640288c7b699719aae7d92a951846b7dcdd31e944e1ba88440300331de3af570" + } + }, + "nextTask": "M16-GAP-00192" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00191/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00191/task-context.json new file mode 100644 index 00000000..f9c7afff --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00191/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00191", + "parentTask": "M16-GAP-00190", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.keying_set_add data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.keying_set_add", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00191.py -- tests/files/web/generated/M16-GAP-00191-operator-anim.keying_set_add.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00191", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00191" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00191.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1811, + "contextRemainingTokens": 452 + }, + "source": { + "bytes": 8093, + "tokens": 2024 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00191.py", + "bytes": 1296, + "tokens": 324 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00191-operator-anim.keying_set_add.blend", + "bytes": 86785, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 231498, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 449432, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00191/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00191.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00191/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1296, + "tokens": 324 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00192", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00191.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00190/manifest.json", + "parentStatus": "docs/status/M16-GAP-00190.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00191.md", + "tests/golden/M16-GAP-00190/manifest.json", + "docs/status/M16-GAP-00190.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00190", + "parentTask": "M16-GAP-00189", + "status": "done", + "nextTask": "M16-GAP-00191", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00190 Status", + "status: done", + "task: anim.keying_set_active_set operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one selected/active object with a custom `active_target` property, a three-key Action, and two named Keying Sets. A foreground `VIEW_3D` context invokes `ANIM_OT_keying_set_active_set(type=WebGapAnimKeyingSetActiveB)` (`poll=true`, `FINISHED`), changing the active Keying Set from A to B without changing the Action.", + "evidence:", + "- Desktop evidence records active Keying Set `WebGapAnimKeyingSetActiveA` changing to `WebGapAnimKeyingSetActiveB`; the Action remains `[1, 3, 5]`, the property remains 3.0, and save/reopen is exact." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1784, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 446 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00191.md", + "bytes": 1784, + "lines": 38, + "tokens": 446 + }, + { + "path": "tests/golden/M16-GAP-00190/manifest.json", + "bytes": 2936, + "lines": 74, + "tokens": 734 + }, + { + "path": "docs/status/M16-GAP-00190.md", + "bytes": 1205, + "lines": 18, + "tokens": 302 + } + ], + "sourceTokens": 2024, + "evidenceFiles": 1, + "evidenceBytes": 1296, + "evidenceTokens": 324, + "totalTokens": 2348, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3372, + "serializedContextTokens": 754, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00192/WebGapAnimKeyingSetExportSet.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00192/WebGapAnimKeyingSetExportSet.py new file mode 100644 index 00000000..c2bb939b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00192/WebGapAnimKeyingSetExportSet.py @@ -0,0 +1,18 @@ +# Keying Set: WebGapAnimKeyingSetExportSet +import bpy + +scene = bpy.context.scene + +# Keying Set Level declarations +ks = scene.keying_sets.new(idname='WebGapAnimKeyingSetExportSet', name='WebGapAnimKeyingSetExportSet') +ks.bl_description = '' + +ks.use_insertkey_needed = False +ks.use_insertkey_visual = False + +# ID's that are commonly used +id_0 = bpy.data.objects["WebGapAnimKeyingSetExportObject"] + +# Path Definitions +ksp = ks.paths.add(id_0, '["export_target"]', index=0) + diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00192/anim-keying-set-export-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00192/anim-keying-set-export-desktop-report.json new file mode 100644 index 00000000..fa605d55 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00192/anim-keying-set-export-desktop-report.json @@ -0,0 +1,77 @@ +{ + "after": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"export_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1.0, + 3.0, + 5.0 + ] + } + ], + "name": "WebGapAnimKeyingSetExportAction" + }, + "active": true, + "activeKeyingSet": "WebGapAnimKeyingSetExportSet", + "selected": true, + "value": 3.0 + }, + "before": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"export_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1.0, + 3.0, + 5.0 + ] + } + ], + "name": "WebGapAnimKeyingSetExportAction" + }, + "active": true, + "activeKeyingSet": "WebGapAnimKeyingSetExportSet", + "selected": true, + "value": 3.0 + }, + "blenderVersion": "5.2.0 LTS", + "exportedScript": { + "bytes": 471, + "path": "/home/mes123456/workinf_Blender_Wasm/tests/golden/M16-GAP-00192/WebGapAnimKeyingSetExportSet.py", + "sha256": "ef38d3cd23ef00a277e66202010b2001efca51cec053b34762924db32592f966" + }, + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00192-operator-anim.keying_set_export.blend", + "fixtureSha256": "ff0342e9d493bc8b20d85acba9177c7115d77f5f515e1d70fc1caf056957c29f", + "mainMutation": "NONE_EXPORT_ONLY", + "operation": "ANIM_KEYING_SET_EXPORT_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00192" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00192/anim-keying-set-export-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00192/anim-keying-set-export-local-exact-report.json new file mode 100644 index 00000000..704baf5d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00192/anim-keying-set-export-local-exact-report.json @@ -0,0 +1,108 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00192", + "operation": "ANIM_KEYING_SET_EXPORT_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00192-operator-anim.keying_set_export.blend", + "sha256": "ff0342e9d493bc8b20d85acba9177c7115d77f5f515e1d70fc1caf056957c29f" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00192/anim-keying-set-export-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "NONE_EXPORT_ONLY", + "before": { + "action": { + "channels": [ + { + "frames": [ + 1, + 3, + 5 + ], + "index": 0, + "path": "[\"export_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1, + 3, + 5 + ] + } + ], + "name": "WebGapAnimKeyingSetExportAction" + }, + "active": true, + "activeKeyingSet": "WebGapAnimKeyingSetExportSet", + "selected": true, + "value": 3 + }, + "after": { + "action": { + "channels": [ + { + "frames": [ + 1, + 3, + 5 + ], + "index": 0, + "path": "[\"export_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1, + 3, + 5 + ] + } + ], + "name": "WebGapAnimKeyingSetExportAction" + }, + "active": true, + "activeKeyingSet": "WebGapAnimKeyingSetExportSet", + "selected": true, + "value": 3 + }, + "exportedScript": { + "path": "tests/golden/M16-GAP-00192/WebGapAnimKeyingSetExportSet.py", + "sha256": "ef38d3cd23ef00a277e66202010b2001efca51cec053b34762924db32592f966", + "bytes": 471 + } + }, + "wasm": { + "status": "EXACT", + "before": { + "animationId": "action:WebGapAnimKeyingSetExportAction:object:WebGapAnimKeyingSetExportObject", + "targetId": "object:WebGapAnimKeyingSetExportObject", + "channelPaths": [ + "[\"export_target\"][0]" + ], + "keyframesPerChannel": [ + 3 + ] + }, + "after": { + "animationId": "action:WebGapAnimKeyingSetExportAction:object:WebGapAnimKeyingSetExportObject", + "keyframesPerChannel": [ + 3 + ], + "visibleMainUnchanged": true, + "keyingSetMetadata": "NOT_EXPOSED_BY_SCENE_SNAPSHOT" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00193" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00192/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00192/manifest.json new file mode 100644 index 00000000..de2fbf0b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00192/manifest.json @@ -0,0 +1,29 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00192", + "parentTask": "M16-GAP-00191", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYING_SET_EXPORT_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { "path": "tests/golden/M16-GAP-00191/manifest.json", "sha256": "1498471253dd616979da562845d490964291b15431b49be766ec224c0aada7aa" }, + "fixture": { "path": "tests/files/web/generated/M16-GAP-00192-operator-anim.keying_set_export.blend", "sha256": "ff0342e9d493bc8b20d85acba9177c7115d77f5f515e1d70fc1caf056957c29f" }, + "generator": { "path": "tools/web/generated/M16-GAP-00192.py", "sha256": "cb932180b82d9eabe3fac18fa461f4107fc6d1016a262c120c8be0758eeeeafb" }, + "desktopChecker": { "path": "tools/web/check-action-keying-set-export-desktop.py", "sha256": "e75538f411751b309e6eb2d4376839b0e1e70784414463356ab36ae39a7ad799" }, + "webChecker": { "path": "tools/web/check-generated-gap.mjs", "sha256": "6e3ccae10e11cdf01e27c8d50f0a571d82e650b75c58fd0d283c9f75e2d4db8d" }, + "reader": { "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf" }, + "protocol": { "path": "web/protocol/editor-workflow.ts", "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" }, + "sceneIrProtocol": { "path": "web/protocol/scene-ir.ts", "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" }, + "wasm": { "path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" }, + "wasmPublic": { "path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" }, + "wasmJs": { "path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" }, + "desktopReport": { "path": "tests/golden/M16-GAP-00192/anim-keying-set-export-desktop-report.json", "sha256": "14b1c5675c9088305246d5afea8f291ef989c6735c3795e377b42524af2f7fed" }, + "webReport": { "path": "tests/golden/M16-GAP-00192/anim-keying-set-export-local-exact-report.json", "sha256": "0544edee932393df992ac05a4dbb07b4b1c82e4045cb15b674b182989105d0fa" }, + "exportedScript": { "path": "tests/golden/M16-GAP-00192/WebGapAnimKeyingSetExportSet.py", "sha256": "ef38d3cd23ef00a277e66202010b2001efca51cec053b34762924db32592f966" }, + "status": { "path": "docs/status/M16-GAP-00192.md", "sha256": "1367262e064964fa586ffe5c09ee1702f9be0d7f5f55f5794d54a48ebe8c5349" }, + "taskContext": { "path": "tests/golden/M16-GAP-00192/task-context.json", "sha256": "5bdca225c7027399992cc26b67f0e7ed37726d1adc7afd1009677a9eaf491c30" } + }, + "nextTask": "M16-GAP-00193" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00192/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00192/task-context.json new file mode 100644 index 00000000..e62b7e88 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00192/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00192", + "parentTask": "M16-GAP-00191", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.keying_set_export data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.keying_set_export", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00192.py -- tests/files/web/generated/M16-GAP-00192-operator-anim.keying_set_export.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00192", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00192" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00192.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1939, + "contextRemainingTokens": 483 + }, + "source": { + "bytes": 7965, + "tokens": 1993 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00192.py", + "bytes": 1476, + "tokens": 369 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00192-operator-anim.keying_set_export.blend", + "bytes": 86891, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 231498, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 454189, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00192/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00192.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00192/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1476, + "tokens": 369 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00193", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00192.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00191/manifest.json", + "parentStatus": "docs/status/M16-GAP-00191.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00192.md", + "tests/golden/M16-GAP-00191/manifest.json", + "docs/status/M16-GAP-00191.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00191", + "parentTask": "M16-GAP-00190", + "status": "done", + "nextTask": "M16-GAP-00192", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00191 Status", + "status: done", + "task: anim.keying_set_add operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one selected/active object with a custom `add_target` property and a three-key Action, but no scene Keying Sets. A foreground `VIEW_3D` context invokes `ANIM_OT_keying_set_add()` (`poll=true`, `FINISHED`), adding and activating one empty Keying Set without changing the Action.", + "evidence:", + "- Desktop evidence records Keying Set count `0→1`, an active newly-added set, unchanged `[1, 3, 5]` Action data, and exact save/reopen." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1799, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 450 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00192.md", + "bytes": 1799, + "lines": 38, + "tokens": 450 + }, + { + "path": "tests/golden/M16-GAP-00191/manifest.json", + "bytes": 2901, + "lines": 74, + "tokens": 726 + }, + { + "path": "docs/status/M16-GAP-00191.md", + "bytes": 1097, + "lines": 18, + "tokens": 275 + } + ], + "sourceTokens": 1993, + "evidenceFiles": 1, + "evidenceBytes": 1476, + "evidenceTokens": 369, + "totalTokens": 2362, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3386, + "serializedContextTokens": 756, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00193/anim-keying-set-path-add-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00193/anim-keying-set-path-add-desktop-report.json new file mode 100644 index 00000000..1210df92 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00193/anim-keying-set-path-add-desktop-report.json @@ -0,0 +1,89 @@ +{ + "after": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"path_add_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1.0, + 3.0, + 5.0 + ] + } + ], + "name": "WebGapAnimKeyingSetPathAddAction" + }, + "active": true, + "activeKeyingSet": "WebGapAnimKeyingSetPathAddSet", + "activePathIndex": 0, + "keyingSetCount": 1, + "pathCount": 1, + "paths": [ + { + "arrayIndex": 0, + "dataPath": "", + "group": "", + "groupMethod": "KEYINGSET", + "idType": "OBJECT", + "useEntireArray": true + } + ], + "selected": true, + "value": 3.0 + }, + "before": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"path_add_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1.0, + 3.0, + 5.0 + ] + } + ], + "name": "WebGapAnimKeyingSetPathAddAction" + }, + "active": true, + "activeKeyingSet": "WebGapAnimKeyingSetPathAddSet", + "activePathIndex": 0, + "keyingSetCount": 1, + "pathCount": 0, + "paths": [], + "selected": true, + "value": 3.0 + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00193-operator-anim.keying_set_path_add.blend", + "fixtureSha256": "4e14a61ca8cd86b528747d576aa89ff8dcd3c9d3b8f52625a46ff5b7594cc107", + "mainMutation": "KEYING_SET_PATH_ADDED", + "operation": "ANIM_KEYING_SET_PATH_ADD_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00193" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00193/anim-keying-set-path-add-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00193/anim-keying-set-path-add-local-exact-report.json new file mode 100644 index 00000000..aabd4b9f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00193/anim-keying-set-path-add-local-exact-report.json @@ -0,0 +1,120 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00193", + "operation": "ANIM_KEYING_SET_PATH_ADD_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00193-operator-anim.keying_set_path_add.blend", + "sha256": "4e14a61ca8cd86b528747d576aa89ff8dcd3c9d3b8f52625a46ff5b7594cc107" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00193/anim-keying-set-path-add-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "KEYING_SET_PATH_ADDED", + "before": { + "action": { + "channels": [ + { + "frames": [ + 1, + 3, + 5 + ], + "index": 0, + "path": "[\"path_add_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1, + 3, + 5 + ] + } + ], + "name": "WebGapAnimKeyingSetPathAddAction" + }, + "active": true, + "activeKeyingSet": "WebGapAnimKeyingSetPathAddSet", + "activePathIndex": 0, + "keyingSetCount": 1, + "pathCount": 0, + "paths": [], + "selected": true, + "value": 3 + }, + "after": { + "action": { + "channels": [ + { + "frames": [ + 1, + 3, + 5 + ], + "index": 0, + "path": "[\"path_add_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1, + 3, + 5 + ] + } + ], + "name": "WebGapAnimKeyingSetPathAddAction" + }, + "active": true, + "activeKeyingSet": "WebGapAnimKeyingSetPathAddSet", + "activePathIndex": 0, + "keyingSetCount": 1, + "pathCount": 1, + "paths": [ + { + "arrayIndex": 0, + "dataPath": "", + "group": "", + "groupMethod": "KEYINGSET", + "idType": "OBJECT", + "useEntireArray": true + } + ], + "selected": true, + "value": 3 + } + }, + "wasm": { + "status": "EXACT", + "before": { + "animationId": "action:WebGapAnimKeyingSetPathAddAction:object:WebGapAnimKeyingSetPathAddObject", + "targetId": "object:WebGapAnimKeyingSetPathAddObject", + "channelPaths": [ + "[\"path_add_target\"][0]" + ], + "keyframesPerChannel": [ + 3 + ] + }, + "after": { + "animationId": "action:WebGapAnimKeyingSetPathAddAction:object:WebGapAnimKeyingSetPathAddObject", + "keyframesPerChannel": [ + 3 + ], + "visibleMainUnchanged": true, + "keyingSetMetadata": "NOT_EXPOSED_BY_SCENE_SNAPSHOT" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00194" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00193/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00193/manifest.json new file mode 100644 index 00000000..5f1c0553 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00193/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00193", + "parentTask": "M16-GAP-00192", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYING_SET_PATH_ADD_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { "path": "tests/golden/M16-GAP-00192/manifest.json", "sha256": "03d3b95ec10a7ee544448d4e9869684ca8c6a3f11a1e321fa80d58c812135c76" }, + "fixture": { "path": "tests/files/web/generated/M16-GAP-00193-operator-anim.keying_set_path_add.blend", "sha256": "4e14a61ca8cd86b528747d576aa89ff8dcd3c9d3b8f52625a46ff5b7594cc107" }, + "generator": { "path": "tools/web/generated/M16-GAP-00193.py", "sha256": "bf3d651dd050b39186f50095519cd02e16fbc9d652e2d307b7f5a05703ab18d7" }, + "desktopChecker": { "path": "tools/web/check-action-keying-set-path-add-desktop.py", "sha256": "62a65a5b58bdf9d883691d47c13ece9759f763acf58ab46660a6fc93f486e04d" }, + "webChecker": { "path": "tools/web/check-generated-gap.mjs", "sha256": "0f996fe9201c7485a9ef2e829ed2f6361b7cae0eb75477a145aa8f71e443f5cf" }, + "reader": { "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf" }, + "protocol": { "path": "web/protocol/editor-workflow.ts", "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" }, + "sceneIrProtocol": { "path": "web/protocol/scene-ir.ts", "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" }, + "wasm": { "path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" }, + "wasmPublic": { "path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" }, + "wasmJs": { "path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" }, + "desktopReport": { "path": "tests/golden/M16-GAP-00193/anim-keying-set-path-add-desktop-report.json", "sha256": "0deab04ebdbf06c6b344707bf3025677d445c6995cbe3ea1268808c59ec74472" }, + "webReport": { "path": "tests/golden/M16-GAP-00193/anim-keying-set-path-add-local-exact-report.json", "sha256": "61e41fbc56bc7c6c1cbceb4ad3e28cb599e072f8c865f0a573091b47ba53790f" }, + "status": { "path": "docs/status/M16-GAP-00193.md", "sha256": "f5510b2a17b16c1ffdd873b30c0b397b25d6d1660eb7f16cfcbcfdccbb4ae668" }, + "taskContext": { "path": "tests/golden/M16-GAP-00193/task-context.json", "sha256": "d459521fe19a776c7b81dd7b49dc3aba7e3f5eba864612f0817fd1ca9bb4dda9" } + }, + "nextTask": "M16-GAP-00194" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00193/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00193/task-context.json new file mode 100644 index 00000000..c0169f6e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00193/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00193", + "parentTask": "M16-GAP-00192", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.keying_set_path_add data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.keying_set_path_add", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00193.py -- tests/files/web/generated/M16-GAP-00193-operator-anim.keying_set_path_add.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00193", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00193" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00193.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1957, + "contextRemainingTokens": 488 + }, + "source": { + "bytes": 7947, + "tokens": 1988 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00193.py", + "bytes": 1534, + "tokens": 384 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00193-operator-anim.keying_set_path_add.blend", + "bytes": 86860, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 231498, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 458781, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00193/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00193.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00193/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1534, + "tokens": 384 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00194", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00193.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00192/manifest.json", + "parentStatus": "docs/status/M16-GAP-00192.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00193.md", + "tests/golden/M16-GAP-00192/manifest.json", + "docs/status/M16-GAP-00192.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00192", + "parentTask": "M16-GAP-00191", + "status": "done", + "nextTask": "M16-GAP-00193", + "artifactCount": 16 + }, + "statusSummary": [ + "# M16-GAP-00192 Status", + "status: done", + "task: anim.keying_set_export operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one selected/active object with a custom `export_target` property, a three-key Action, and one named Keying Set. Blender invokes `ANIM_OT_keying_set_export(filepath=..., filter_python=true)` (`poll=true`, `FINISHED`) and writes the Keying Set Python export without mutating Main.", + "evidence:", + "- Desktop evidence records unchanged object/Action state, exact save/reopen, and a non-empty hash-bound exported Python script." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1809, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 453 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00193.md", + "bytes": 1809, + "lines": 38, + "tokens": 453 + }, + { + "path": "tests/golden/M16-GAP-00192/manifest.json", + "bytes": 2850, + "lines": 30, + "tokens": 713 + }, + { + "path": "docs/status/M16-GAP-00192.md", + "bytes": 1120, + "lines": 18, + "tokens": 280 + } + ], + "sourceTokens": 1988, + "evidenceFiles": 1, + "evidenceBytes": 1534, + "evidenceTokens": 384, + "totalTokens": 2372, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3396, + "serializedContextTokens": 757, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00194/anim-keying-set-path-remove-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00194/anim-keying-set-path-remove-desktop-report.json new file mode 100644 index 00000000..04987035 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00194/anim-keying-set-path-remove-desktop-report.json @@ -0,0 +1,89 @@ +{ + "after": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"path_remove_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1.0, + 3.0, + 5.0 + ] + } + ], + "name": "WebGapAnimKeyingSetPathRemoveAction" + }, + "active": true, + "activeKeyingSet": "WebGapAnimKeyingSetPathRemoveSet", + "activePathIndex": 0, + "keyingSetCount": 1, + "pathCount": 0, + "paths": [], + "selected": true, + "value": 3.0 + }, + "before": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"path_remove_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1.0, + 3.0, + 5.0 + ] + } + ], + "name": "WebGapAnimKeyingSetPathRemoveAction" + }, + "active": true, + "activeKeyingSet": "WebGapAnimKeyingSetPathRemoveSet", + "activePathIndex": 0, + "keyingSetCount": 1, + "pathCount": 1, + "paths": [ + { + "arrayIndex": 0, + "dataPath": "[\"path_remove_target\"]", + "group": "", + "groupMethod": "KEYINGSET", + "idType": "OBJECT", + "useEntireArray": false + } + ], + "selected": true, + "value": 3.0 + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00194-operator-anim.keying_set_path_remove.blend", + "fixtureSha256": "b1161cfd0ac095844825cb2fa19fcbe9819bce552d02535f2d32deef3c8cbb79", + "mainMutation": "KEYING_SET_PATH_REMOVED", + "operation": "ANIM_KEYING_SET_PATH_REMOVE_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00194" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00194/anim-keying-set-path-remove-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00194/anim-keying-set-path-remove-local-exact-report.json new file mode 100644 index 00000000..42db1b29 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00194/anim-keying-set-path-remove-local-exact-report.json @@ -0,0 +1,120 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00194", + "operation": "ANIM_KEYING_SET_PATH_REMOVE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00194-operator-anim.keying_set_path_remove.blend", + "sha256": "b1161cfd0ac095844825cb2fa19fcbe9819bce552d02535f2d32deef3c8cbb79" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00194/anim-keying-set-path-remove-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "KEYING_SET_PATH_REMOVED", + "before": { + "action": { + "channels": [ + { + "frames": [ + 1, + 3, + 5 + ], + "index": 0, + "path": "[\"path_remove_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1, + 3, + 5 + ] + } + ], + "name": "WebGapAnimKeyingSetPathRemoveAction" + }, + "active": true, + "activeKeyingSet": "WebGapAnimKeyingSetPathRemoveSet", + "activePathIndex": 0, + "keyingSetCount": 1, + "pathCount": 1, + "paths": [ + { + "arrayIndex": 0, + "dataPath": "[\"path_remove_target\"]", + "group": "", + "groupMethod": "KEYINGSET", + "idType": "OBJECT", + "useEntireArray": false + } + ], + "selected": true, + "value": 3 + }, + "after": { + "action": { + "channels": [ + { + "frames": [ + 1, + 3, + 5 + ], + "index": 0, + "path": "[\"path_remove_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1, + 3, + 5 + ] + } + ], + "name": "WebGapAnimKeyingSetPathRemoveAction" + }, + "active": true, + "activeKeyingSet": "WebGapAnimKeyingSetPathRemoveSet", + "activePathIndex": 0, + "keyingSetCount": 1, + "pathCount": 0, + "paths": [], + "selected": true, + "value": 3 + } + }, + "wasm": { + "status": "EXACT", + "before": { + "animationId": "action:WebGapAnimKeyingSetPathRemoveAction:object:WebGapAnimKeyingSetPathRemoveObject", + "targetId": "object:WebGapAnimKeyingSetPathRemoveObject", + "channelPaths": [ + "[\"path_remove_target\"][0]" + ], + "keyframesPerChannel": [ + 3 + ] + }, + "after": { + "animationId": "action:WebGapAnimKeyingSetPathRemoveAction:object:WebGapAnimKeyingSetPathRemoveObject", + "keyframesPerChannel": [ + 3 + ], + "visibleMainUnchanged": true, + "keyingSetMetadata": "NOT_EXPOSED_BY_SCENE_SNAPSHOT" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00195" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00194/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00194/manifest.json new file mode 100644 index 00000000..89718408 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00194/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00194", + "parentTask": "M16-GAP-00193", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYING_SET_PATH_REMOVE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { "path": "tests/golden/M16-GAP-00193/manifest.json", "sha256": "203219913781f09abaa1aab272f97117907f44e9dc0a08691500457ac4b24446" }, + "fixture": { "path": "tests/files/web/generated/M16-GAP-00194-operator-anim.keying_set_path_remove.blend", "sha256": "b1161cfd0ac095844825cb2fa19fcbe9819bce552d02535f2d32deef3c8cbb79" }, + "generator": { "path": "tools/web/generated/M16-GAP-00194.py", "sha256": "182bc9eda4c6383e83f353cb0ee8fee299caf954537592f58cd68f1e1b1328e2" }, + "desktopChecker": { "path": "tools/web/check-action-keying-set-path-remove-desktop.py", "sha256": "91e9ae1891106babe828ead19c2f07fd955c06883fa4b03f1b4f12fb8a41824e" }, + "webChecker": { "path": "tools/web/check-generated-gap.mjs", "sha256": "5c7c11e2ef348faf5e34343f947df076e8f732c2a03180fcdfecf157fdd46fb9" }, + "reader": { "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf" }, + "protocol": { "path": "web/protocol/editor-workflow.ts", "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" }, + "sceneIrProtocol": { "path": "web/protocol/scene-ir.ts", "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" }, + "wasm": { "path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" }, + "wasmPublic": { "path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" }, + "wasmJs": { "path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" }, + "desktopReport": { "path": "tests/golden/M16-GAP-00194/anim-keying-set-path-remove-desktop-report.json", "sha256": "36ec6d4232418b56ea06b375bd0562718ef0cb787c393a860fcf69b663aa3a89" }, + "webReport": { "path": "tests/golden/M16-GAP-00194/anim-keying-set-path-remove-local-exact-report.json", "sha256": "a840e751c3e8c7ef6b02f388e8db434ebcd6cb4d0a151fbb3350d98f6689f438" }, + "status": { "path": "docs/status/M16-GAP-00194.md", "sha256": "54a5b5384704b1a16d541cbc6d70c98001495cb010fe1f9235e73d23a0fc2d9d" }, + "taskContext": { "path": "tests/golden/M16-GAP-00194/task-context.json", "sha256": "ecd39a4fd55eb2f7fcc3bacaa8046ab21d56ce5ae8e936898c2fa9a85b9f08cd" } + }, + "nextTask": "M16-GAP-00195" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00194/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00194/task-context.json new file mode 100644 index 00000000..6985b6f5 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00194/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00194", + "parentTask": "M16-GAP-00193", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.keying_set_path_remove data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.keying_set_path_remove", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00194.py -- tests/files/web/generated/M16-GAP-00194-operator-anim.keying_set_path_remove.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00194", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00194" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00194.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2145, + "contextRemainingTokens": 535 + }, + "source": { + "bytes": 7759, + "tokens": 1941 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00194.py", + "bytes": 1618, + "tokens": 405 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00194-operator-anim.keying_set_path_remove.blend", + "bytes": 86865, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 231498, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 463464, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00194/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00194.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00194/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1618, + "tokens": 405 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00195", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00194.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00193/manifest.json", + "parentStatus": "docs/status/M16-GAP-00193.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00194.md", + "tests/golden/M16-GAP-00193/manifest.json", + "docs/status/M16-GAP-00193.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00193", + "parentTask": "M16-GAP-00192", + "status": "done", + "nextTask": "M16-GAP-00194", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00193 Status", + "status: done", + "task: anim.keying_set_path_add operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one selected/active object with a three-key Action and one empty active Keying Set. Blender invokes `ANIM_OT_keying_set_path_add()` (`poll=true`, `FINISHED`), adding one empty path with the expected default fields without changing the Action.", + "evidence:", + "- Desktop evidence records Keying Set path count `0→1`, the empty path defaults, unchanged `[1, 3, 5]` Action data, and exact save/reopen." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1824, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 456 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00194.md", + "bytes": 1824, + "lines": 38, + "tokens": 456 + }, + { + "path": "tests/golden/M16-GAP-00193/manifest.json", + "bytes": 2686, + "lines": 29, + "tokens": 672 + }, + { + "path": "docs/status/M16-GAP-00193.md", + "bytes": 1081, + "lines": 18, + "tokens": 271 + } + ], + "sourceTokens": 1941, + "evidenceFiles": 1, + "evidenceBytes": 1618, + "evidenceTokens": 405, + "totalTokens": 2346, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3370, + "serializedContextTokens": 760, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00195/anim-keying-set-remove-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00195/anim-keying-set-remove-desktop-report.json new file mode 100644 index 00000000..3e33ffef --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00195/anim-keying-set-remove-desktop-report.json @@ -0,0 +1,76 @@ +{ + "after": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"remove_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1.0, + 3.0, + 5.0 + ] + } + ], + "name": "WebGapAnimKeyingSetRemoveAction" + }, + "active": true, + "activeKeyingSet": null, + "keyingSetCount": 0, + "pathCount": 0, + "selected": true, + "value": 3.0 + }, + "before": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"remove_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1.0, + 3.0, + 5.0 + ] + } + ], + "name": "WebGapAnimKeyingSetRemoveAction" + }, + "active": true, + "activeKeyingSet": "WebGapAnimKeyingSetRemoveSet", + "keyingSetCount": 1, + "pathCount": 0, + "selected": true, + "value": 3.0 + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00195-operator-anim.keying_set_remove.blend", + "fixtureSha256": "d4fa5993c2580e5521cf2ee66817c416f50de82f5ec4e32298e52db14fa0a9a9", + "mainMutation": "KEYING_SET_REMOVED", + "operation": "ANIM_KEYING_SET_REMOVE_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00195" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00195/anim-keying-set-remove-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00195/anim-keying-set-remove-local-exact-report.json new file mode 100644 index 00000000..b613e386 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00195/anim-keying-set-remove-local-exact-report.json @@ -0,0 +1,107 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00195", + "operation": "ANIM_KEYING_SET_REMOVE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00195-operator-anim.keying_set_remove.blend", + "sha256": "d4fa5993c2580e5521cf2ee66817c416f50de82f5ec4e32298e52db14fa0a9a9" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00195/anim-keying-set-remove-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "KEYING_SET_REMOVED", + "before": { + "action": { + "channels": [ + { + "frames": [ + 1, + 3, + 5 + ], + "index": 0, + "path": "[\"remove_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1, + 3, + 5 + ] + } + ], + "name": "WebGapAnimKeyingSetRemoveAction" + }, + "active": true, + "activeKeyingSet": "WebGapAnimKeyingSetRemoveSet", + "keyingSetCount": 1, + "pathCount": 0, + "selected": true, + "value": 3 + }, + "after": { + "action": { + "channels": [ + { + "frames": [ + 1, + 3, + 5 + ], + "index": 0, + "path": "[\"remove_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1, + 3, + 5 + ] + } + ], + "name": "WebGapAnimKeyingSetRemoveAction" + }, + "active": true, + "activeKeyingSet": null, + "keyingSetCount": 0, + "pathCount": 0, + "selected": true, + "value": 3 + } + }, + "wasm": { + "status": "EXACT", + "before": { + "animationId": "action:WebGapAnimKeyingSetRemoveAction:object:WebGapAnimKeyingSetRemoveObject", + "targetId": "object:WebGapAnimKeyingSetRemoveObject", + "channelPaths": [ + "[\"remove_target\"][0]" + ], + "keyframesPerChannel": [ + 3 + ] + }, + "after": { + "animationId": "action:WebGapAnimKeyingSetRemoveAction:object:WebGapAnimKeyingSetRemoveObject", + "keyframesPerChannel": [ + 3 + ], + "visibleMainUnchanged": true, + "keyingSetMetadata": "NOT_EXPOSED_BY_SCENE_SNAPSHOT" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00196" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00195/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00195/manifest.json new file mode 100644 index 00000000..b357cdb6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00195/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00195", + "parentTask": "M16-GAP-00194", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYING_SET_REMOVE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { "path": "tests/golden/M16-GAP-00194/manifest.json", "sha256": "d8336a458497eff326ab8a8df3050c5e4e2f41b0297a2f070ec976c09377f270" }, + "fixture": { "path": "tests/files/web/generated/M16-GAP-00195-operator-anim.keying_set_remove.blend", "sha256": "d4fa5993c2580e5521cf2ee66817c416f50de82f5ec4e32298e52db14fa0a9a9" }, + "generator": { "path": "tools/web/generated/M16-GAP-00195.py", "sha256": "4f8fb118aa60518844dd181607994d857dc8828d66acd526fe0de727491f54e6" }, + "desktopChecker": { "path": "tools/web/check-action-keying-set-remove-desktop.py", "sha256": "34a45f49def53589fb7e5b3bcfaaaf500af5e5dba069a8175eff1dd19ba354cc" }, + "webChecker": { "path": "tools/web/check-generated-gap.mjs", "sha256": "692c7b2db04a96680bbc7c7807cac3ed552e3123cc4af5f335b3e50cd1ff0bce" }, + "reader": { "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf" }, + "protocol": { "path": "web/protocol/editor-workflow.ts", "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" }, + "sceneIrProtocol": { "path": "web/protocol/scene-ir.ts", "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" }, + "wasm": { "path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" }, + "wasmPublic": { "path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" }, + "wasmJs": { "path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" }, + "desktopReport": { "path": "tests/golden/M16-GAP-00195/anim-keying-set-remove-desktop-report.json", "sha256": "67fc9add6112f6513a95028ba2170d468b1ca82d83cf1b8d1afe2da98b907b15" }, + "webReport": { "path": "tests/golden/M16-GAP-00195/anim-keying-set-remove-local-exact-report.json", "sha256": "f1a6dc449055b1cddb1f796b885eaa347cf1c64ca082af7940c9c751a59dec9e" }, + "status": { "path": "docs/status/M16-GAP-00195.md", "sha256": "cdb8e80052164365b81fb210701cd5283ea022f219eb1a1e14d561ef178e7420" }, + "taskContext": { "path": "tests/golden/M16-GAP-00195/task-context.json", "sha256": "e462b1602ed761491ad2054fc7152fb36306b21a0c14f2511a3cbc21b2b740d2" } + }, + "nextTask": "M16-GAP-00196" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00195/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00195/task-context.json new file mode 100644 index 00000000..01878904 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00195/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00195", + "parentTask": "M16-GAP-00194", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.keying_set_remove data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.keying_set_remove", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00195.py -- tests/files/web/generated/M16-GAP-00195-operator-anim.keying_set_remove.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00195", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00195" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00195.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2175, + "contextRemainingTokens": 542 + }, + "source": { + "bytes": 7729, + "tokens": 1934 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00195.py", + "bytes": 1524, + "tokens": 381 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00195-operator-anim.keying_set_remove.blend", + "bytes": 86811, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 231498, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 468034, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00195/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00195.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00195/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1524, + "tokens": 381 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00196", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00195.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00194/manifest.json", + "parentStatus": "docs/status/M16-GAP-00194.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00195.md", + "tests/golden/M16-GAP-00194/manifest.json", + "docs/status/M16-GAP-00194.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00194", + "parentTask": "M16-GAP-00193", + "status": "done", + "nextTask": "M16-GAP-00195", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00194 Status", + "status: done", + "task: anim.keying_set_path_remove operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one selected/active object with a three-key Action and one active Keying Set path. Blender invokes `ANIM_OT_keying_set_path_remove()` (`poll=true`, `FINISHED`), removing the active path without changing the Action.", + "evidence:", + "- Desktop evidence records Keying Set path count `1→0`, the pre-existing path fields, unchanged `[1, 3, 5]` Action data, and exact save/reopen." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1799, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 450 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00195.md", + "bytes": 1799, + "lines": 38, + "tokens": 450 + }, + { + "path": "tests/golden/M16-GAP-00194/manifest.json", + "bytes": 2701, + "lines": 29, + "tokens": 676 + }, + { + "path": "docs/status/M16-GAP-00194.md", + "bytes": 1061, + "lines": 18, + "tokens": 266 + } + ], + "sourceTokens": 1934, + "evidenceFiles": 1, + "evidenceBytes": 1524, + "evidenceTokens": 381, + "totalTokens": 2315, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3339, + "serializedContextTokens": 756, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00196/anim-keyingset-button-add-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00196/anim-keyingset-button-add-desktop-report.json new file mode 100644 index 00000000..f071bc8e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00196/anim-keyingset-button-add-desktop-report.json @@ -0,0 +1,87 @@ +{ + "after": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"button_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1.0, + 3.0, + 5.0 + ] + } + ], + "name": "WebGapAnimKeyingSetButtonAddAction" + }, + "active": true, + "activeKeyingSet": "ButtonKeyingSet", + "keyingSetCount": 1, + "pathCount": 1, + "paths": [ + { + "arrayIndex": 0, + "dataPath": "[\"button_target\"]", + "group": "", + "groupMethod": "KEYINGSET", + "idType": "OBJECT", + "useEntireArray": true + } + ], + "selected": true, + "value": 3.0 + }, + "before": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"button_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1.0, + 3.0, + 5.0 + ] + } + ], + "name": "WebGapAnimKeyingSetButtonAddAction" + }, + "active": true, + "activeKeyingSet": null, + "keyingSetCount": 0, + "pathCount": 0, + "paths": [], + "selected": true, + "value": 3.0 + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00196-operator-anim.keyingset_button_add.blend", + "fixtureSha256": "2e49572a29dadcdfdae956f7e16bd465c5de06bf8ae94ebdc11da8b1821eb562", + "mainMutation": "KEYING_SET_PATH_ADDED", + "operation": "ANIM_KEYINGSET_BUTTON_ADD_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00196" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00196/anim-keyingset-button-add-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00196/anim-keyingset-button-add-local-exact-report.json new file mode 100644 index 00000000..2ca868a9 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00196/anim-keyingset-button-add-local-exact-report.json @@ -0,0 +1,118 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00196", + "operation": "ANIM_KEYINGSET_BUTTON_ADD_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00196-operator-anim.keyingset_button_add.blend", + "sha256": "2e49572a29dadcdfdae956f7e16bd465c5de06bf8ae94ebdc11da8b1821eb562" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00196/anim-keyingset-button-add-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "KEYING_SET_PATH_ADDED", + "before": { + "action": { + "channels": [ + { + "frames": [ + 1, + 3, + 5 + ], + "index": 0, + "path": "[\"button_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1, + 3, + 5 + ] + } + ], + "name": "WebGapAnimKeyingSetButtonAddAction" + }, + "active": true, + "activeKeyingSet": null, + "keyingSetCount": 0, + "pathCount": 0, + "paths": [], + "selected": true, + "value": 3 + }, + "after": { + "action": { + "channels": [ + { + "frames": [ + 1, + 3, + 5 + ], + "index": 0, + "path": "[\"button_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1, + 3, + 5 + ] + } + ], + "name": "WebGapAnimKeyingSetButtonAddAction" + }, + "active": true, + "activeKeyingSet": "ButtonKeyingSet", + "keyingSetCount": 1, + "pathCount": 1, + "paths": [ + { + "arrayIndex": 0, + "dataPath": "[\"button_target\"]", + "group": "", + "groupMethod": "KEYINGSET", + "idType": "OBJECT", + "useEntireArray": true + } + ], + "selected": true, + "value": 3 + } + }, + "wasm": { + "status": "EXACT", + "before": { + "animationId": "action:WebGapAnimKeyingSetButtonAddAction:object:WebGapAnimKeyingSetButtonAddObject", + "targetId": "object:WebGapAnimKeyingSetButtonAddObject", + "channelPaths": [ + "[\"button_target\"][0]" + ], + "keyframesPerChannel": [ + 3 + ] + }, + "after": { + "animationId": "action:WebGapAnimKeyingSetButtonAddAction:object:WebGapAnimKeyingSetButtonAddObject", + "keyframesPerChannel": [ + 3 + ], + "visibleMainUnchanged": true, + "keyingSetMetadata": "NOT_EXPOSED_BY_SCENE_SNAPSHOT" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00197" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00196/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00196/manifest.json new file mode 100644 index 00000000..ebeb0638 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00196/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00196", + "parentTask": "M16-GAP-00195", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYINGSET_BUTTON_ADD_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { "path": "tests/golden/M16-GAP-00195/manifest.json", "sha256": "4a46a92b6ea9fee6f99e3d7284e78d74748cb52a57d942d874df664da85d65f2" }, + "fixture": { "path": "tests/files/web/generated/M16-GAP-00196-operator-anim.keyingset_button_add.blend", "sha256": "2e49572a29dadcdfdae956f7e16bd465c5de06bf8ae94ebdc11da8b1821eb562" }, + "generator": { "path": "tools/web/generated/M16-GAP-00196.py", "sha256": "61eefce310c581808e90c8378b1f085c00d7d28878c0c62946489225b020f2d8" }, + "desktopChecker": { "path": "tools/web/check-action-keyingset-button-add-desktop.py", "sha256": "15b1b30ea2793313f52c914021d148c50cd02ba5bcb8d983c37755f811bcd16f" }, + "webChecker": { "path": "tools/web/check-generated-gap.mjs", "sha256": "05772ad9408274628a737748e6293cd5fce4d090243b0a51db4b620eb93758c5" }, + "reader": { "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf" }, + "protocol": { "path": "web/protocol/editor-workflow.ts", "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" }, + "sceneIrProtocol": { "path": "web/protocol/scene-ir.ts", "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" }, + "wasm": { "path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" }, + "wasmPublic": { "path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" }, + "wasmJs": { "path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" }, + "desktopReport": { "path": "tests/golden/M16-GAP-00196/anim-keyingset-button-add-desktop-report.json", "sha256": "a213760a261879356db09714df719221fef2f0a4c26865e12396b80089c21583" }, + "webReport": { "path": "tests/golden/M16-GAP-00196/anim-keyingset-button-add-local-exact-report.json", "sha256": "3146c77b1f77e3db9b1dc855c31408b0c076ecfea258aea8a86a834ab06ad9b3" }, + "status": { "path": "docs/status/M16-GAP-00196.md", "sha256": "b1a31309d96dc8fa456c95e45e78aa192472f84573a8ab9ad21bac1a047a3a8c" }, + "taskContext": { "path": "tests/golden/M16-GAP-00196/task-context.json", "sha256": "325c63d0601e3b9adf8afb69f6d3cbfd970e3fc281eaa70b13d7cddb0399e324" } + }, + "nextTask": "M16-GAP-00197" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00196/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00196/task-context.json new file mode 100644 index 00000000..147d9028 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00196/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00196", + "parentTask": "M16-GAP-00195", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.keyingset_button_add data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.keyingset_button_add", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00196.py -- tests/files/web/generated/M16-GAP-00196-operator-anim.keyingset_button_add.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00196", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00196" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00196.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2173, + "contextRemainingTokens": 542 + }, + "source": { + "bytes": 7731, + "tokens": 1934 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00196.py", + "bytes": 1349, + "tokens": 338 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00196-operator-anim.keyingset_button_add.blend", + "bytes": 86863, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 231498, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 472821, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00196/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00196.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00196/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1349, + "tokens": 338 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00197", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00196.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00195/manifest.json", + "parentStatus": "docs/status/M16-GAP-00195.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00196.md", + "tests/golden/M16-GAP-00195/manifest.json", + "docs/status/M16-GAP-00195.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00195", + "parentTask": "M16-GAP-00194", + "status": "done", + "nextTask": "M16-GAP-00196", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00195 Status", + "status: done", + "task: anim.keying_set_remove operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one selected/active object with a three-key Action and one empty active Keying Set. Blender invokes `ANIM_OT_keying_set_remove()` (`poll=true`, `FINISHED`), removing the active Keying Set without changing the Action.", + "evidence:", + "- Desktop evidence records Keying Set count `1→0`, active set `WebGapAnimKeyingSetRemoveSet→null`, unchanged `[1, 3, 5]` Action data, and exact save/reopen." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1814, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 454 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00196.md", + "bytes": 1814, + "lines": 38, + "tokens": 454 + }, + { + "path": "tests/golden/M16-GAP-00195/manifest.json", + "bytes": 2676, + "lines": 29, + "tokens": 669 + }, + { + "path": "docs/status/M16-GAP-00195.md", + "bytes": 1073, + "lines": 18, + "tokens": 269 + } + ], + "sourceTokens": 1934, + "evidenceFiles": 1, + "evidenceBytes": 1349, + "evidenceTokens": 338, + "totalTokens": 2272, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3296, + "serializedContextTokens": 758, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00197/anim-keyingset-button-remove-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00197/anim-keyingset-button-remove-desktop-report.json new file mode 100644 index 00000000..74dff566 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00197/anim-keyingset-button-remove-desktop-report.json @@ -0,0 +1,87 @@ +{ + "after": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"button_remove_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1.0, + 3.0, + 5.0 + ] + } + ], + "name": "WebGapAnimKeyingSetButtonRemoveAction" + }, + "active": true, + "activeKeyingSet": "ButtonKeyingSet", + "keyingSetCount": 1, + "pathCount": 0, + "paths": [], + "selected": true, + "value": 3.0 + }, + "before": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"button_remove_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1.0, + 3.0, + 5.0 + ] + } + ], + "name": "WebGapAnimKeyingSetButtonRemoveAction" + }, + "active": true, + "activeKeyingSet": "ButtonKeyingSet", + "keyingSetCount": 1, + "pathCount": 1, + "paths": [ + { + "arrayIndex": 0, + "dataPath": "[\"button_remove_target\"]", + "group": "", + "groupMethod": "KEYINGSET", + "idType": "OBJECT", + "useEntireArray": false + } + ], + "selected": true, + "value": 3.0 + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00197-operator-anim.keyingset_button_remove.blend", + "fixtureSha256": "21b52146f8466fb9fd9ca9073d611b6052f7cbb89399b926d8db6e950883e61d", + "mainMutation": "KEYING_SET_PATH_REMOVED", + "operation": "ANIM_KEYINGSET_BUTTON_REMOVE_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00197" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00197/anim-keyingset-button-remove-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00197/anim-keyingset-button-remove-local-exact-report.json new file mode 100644 index 00000000..78ee1599 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00197/anim-keyingset-button-remove-local-exact-report.json @@ -0,0 +1,118 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00197", + "operation": "ANIM_KEYINGSET_BUTTON_REMOVE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00197-operator-anim.keyingset_button_remove.blend", + "sha256": "21b52146f8466fb9fd9ca9073d611b6052f7cbb89399b926d8db6e950883e61d" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00197/anim-keyingset-button-remove-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "KEYING_SET_PATH_REMOVED", + "before": { + "action": { + "channels": [ + { + "frames": [ + 1, + 3, + 5 + ], + "index": 0, + "path": "[\"button_remove_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1, + 3, + 5 + ] + } + ], + "name": "WebGapAnimKeyingSetButtonRemoveAction" + }, + "active": true, + "activeKeyingSet": "ButtonKeyingSet", + "keyingSetCount": 1, + "pathCount": 1, + "paths": [ + { + "arrayIndex": 0, + "dataPath": "[\"button_remove_target\"]", + "group": "", + "groupMethod": "KEYINGSET", + "idType": "OBJECT", + "useEntireArray": false + } + ], + "selected": true, + "value": 3 + }, + "after": { + "action": { + "channels": [ + { + "frames": [ + 1, + 3, + 5 + ], + "index": 0, + "path": "[\"button_remove_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1, + 3, + 5 + ] + } + ], + "name": "WebGapAnimKeyingSetButtonRemoveAction" + }, + "active": true, + "activeKeyingSet": "ButtonKeyingSet", + "keyingSetCount": 1, + "pathCount": 0, + "paths": [], + "selected": true, + "value": 3 + } + }, + "wasm": { + "status": "EXACT", + "before": { + "animationId": "action:WebGapAnimKeyingSetButtonRemoveAction:object:WebGapAnimKeyingSetButtonRemoveObject", + "targetId": "object:WebGapAnimKeyingSetButtonRemoveObject", + "channelPaths": [ + "[\"button_remove_target\"][0]" + ], + "keyframesPerChannel": [ + 3 + ] + }, + "after": { + "animationId": "action:WebGapAnimKeyingSetButtonRemoveAction:object:WebGapAnimKeyingSetButtonRemoveObject", + "keyframesPerChannel": [ + 3 + ], + "visibleMainUnchanged": true, + "keyingSetMetadata": "NOT_EXPOSED_BY_SCENE_SNAPSHOT" + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00198" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00197/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00197/manifest.json new file mode 100644 index 00000000..589db6ab --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00197/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00197", + "parentTask": "M16-GAP-00196", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_KEYINGSET_BUTTON_REMOVE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { "path": "tests/golden/M16-GAP-00196/manifest.json", "sha256": "ba672d3e9ba02086b25a595fde84f8248d9ed288fdd5b53de0b7ff02071e3e46" }, + "fixture": { "path": "tests/files/web/generated/M16-GAP-00197-operator-anim.keyingset_button_remove.blend", "sha256": "21b52146f8466fb9fd9ca9073d611b6052f7cbb89399b926d8db6e950883e61d" }, + "generator": { "path": "tools/web/generated/M16-GAP-00197.py", "sha256": "34b9c47630db975f40df4ebc156c9b0488dc7bc85ff0fe6cbcc4603aae2da14c" }, + "desktopChecker": { "path": "tools/web/check-action-keyingset-button-remove-desktop.py", "sha256": "0a6c7361b44ef548f4d9bb7ef756e35bd9c09e82ec46edc60626a6918afc57b6" }, + "webChecker": { "path": "tools/web/check-generated-gap.mjs", "sha256": "27f61df7c526c3473f458828ee0d1651c12bdc766936b41517c634464e70b267" }, + "reader": { "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf" }, + "protocol": { "path": "web/protocol/editor-workflow.ts", "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" }, + "sceneIrProtocol": { "path": "web/protocol/scene-ir.ts", "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" }, + "wasm": { "path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" }, + "wasmPublic": { "path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" }, + "wasmJs": { "path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" }, + "desktopReport": { "path": "tests/golden/M16-GAP-00197/anim-keyingset-button-remove-desktop-report.json", "sha256": "223020f990cda11b261e3d0daf3171450718604cee9f923b5bd3aad8c9377b8a" }, + "webReport": { "path": "tests/golden/M16-GAP-00197/anim-keyingset-button-remove-local-exact-report.json", "sha256": "e44421253fcb26b9d313d9f97324b22a46fa8bbd8b734508416bc7bcd43c8f7b" }, + "status": { "path": "docs/status/M16-GAP-00197.md", "sha256": "5f9ee54b01a17a8c4554d58c4f9f415a7feac5790a56aa2545a560ffa4ef2362" }, + "taskContext": { "path": "tests/golden/M16-GAP-00197/task-context.json", "sha256": "e94b2c9d77d75b841ae3fe60df18005fbbd9da080417e91ec06c79ca62a3d67f" } + }, + "nextTask": "M16-GAP-00198" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00197/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00197/task-context.json new file mode 100644 index 00000000..4d634dc1 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00197/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00197", + "parentTask": "M16-GAP-00196", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.keyingset_button_remove data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.keyingset_button_remove", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00197.py -- tests/files/web/generated/M16-GAP-00197-operator-anim.keyingset_button_remove.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00197", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00197" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00197.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2113, + "contextRemainingTokens": 527 + }, + "source": { + "bytes": 7791, + "tokens": 1949 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00197.py", + "bytes": 1613, + "tokens": 404 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00197-operator-anim.keyingset_button_remove.blend", + "bytes": 86831, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 231498, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 477748, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00197/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00197.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00197/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1613, + "tokens": 404 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00198", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00197.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00196/manifest.json", + "parentStatus": "docs/status/M16-GAP-00196.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00197.md", + "tests/golden/M16-GAP-00196/manifest.json", + "docs/status/M16-GAP-00196.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00196", + "parentTask": "M16-GAP-00195", + "status": "done", + "nextTask": "M16-GAP-00197", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00196 Status", + "status: done", + "task: anim.keyingset_button_add operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one selected/active object with a three-key Action and no scene Keying Set. A real `PROPERTIES` RNA button invokes `ANIM_OT_keyingset_button_add()` (`poll=true`, `FINISHED`), creating `ButtonKeyingSet` and adding the active `button_target` path.", + "evidence:", + "- Desktop evidence records Keying Set count `0→1`, path count `0→1`, exact path fields, unchanged `[1, 3, 5]` Action data, and exact save/reopen." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1829, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 458 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00197.md", + "bytes": 1829, + "lines": 38, + "tokens": 458 + }, + { + "path": "tests/golden/M16-GAP-00196/manifest.json", + "bytes": 2691, + "lines": 29, + "tokens": 673 + }, + { + "path": "docs/status/M16-GAP-00196.md", + "bytes": 1103, + "lines": 18, + "tokens": 276 + } + ], + "sourceTokens": 1949, + "evidenceFiles": 1, + "evidenceBytes": 1613, + "evidenceTokens": 404, + "totalTokens": 2353, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3377, + "serializedContextTokens": 760, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00198/anim-merge-animation-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00198/anim-merge-animation-desktop-report.json new file mode 100644 index 00000000..1923610a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00198/anim-merge-animation-desktop-report.json @@ -0,0 +1,164 @@ +{ + "after": { + "active": true, + "activeObject": "WebGapAnimMergeActiveObject", + "activeObjectAction": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"active_merge_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1.0, + 3.0, + 5.0 + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"source_merge_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 10.0, + 30.0, + 50.0 + ] + } + ], + "name": "WebGapAnimMergeActiveAction" + }, + "selected": { + "active": true, + "source": true + }, + "sourceObject": "WebGapAnimMergeSourceObject", + "sourceObjectAction": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"active_merge_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1.0, + 3.0, + 5.0 + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"source_merge_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 10.0, + 30.0, + 50.0 + ] + } + ], + "name": "WebGapAnimMergeActiveAction" + } + }, + "before": { + "active": true, + "activeObject": "WebGapAnimMergeActiveObject", + "activeObjectAction": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"active_merge_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1.0, + 3.0, + 5.0 + ] + } + ], + "name": "WebGapAnimMergeActiveAction" + }, + "selected": { + "active": true, + "source": true + }, + "sourceObject": "WebGapAnimMergeSourceObject", + "sourceObjectAction": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"source_merge_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 10.0, + 30.0, + 50.0 + ] + } + ], + "name": "WebGapAnimMergeSourceAction" + } + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00198-operator-anim.merge_animation.blend", + "fixtureSha256": "0c37b1290f08b1ad872efdf8a52c795d24778a1ecab516ea749ff2ae858bd2fb", + "mainMutation": "ANIMATION_MERGED", + "operation": "ANIM_MERGE_ANIMATION_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00198" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00198/anim-merge-animation-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00198/anim-merge-animation-local-exact-report.json new file mode 100644 index 00000000..8c0f85d0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00198/anim-merge-animation-local-exact-report.json @@ -0,0 +1,216 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00198", + "operation": "ANIM_MERGE_ANIMATION_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00198-operator-anim.merge_animation.blend", + "sha256": "0c37b1290f08b1ad872efdf8a52c795d24778a1ecab516ea749ff2ae858bd2fb" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00198/anim-merge-animation-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "ANIMATION_MERGED", + "before": { + "active": true, + "activeObject": "WebGapAnimMergeActiveObject", + "activeObjectAction": { + "channels": [ + { + "frames": [ + 1, + 3, + 5 + ], + "index": 0, + "path": "[\"active_merge_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1, + 3, + 5 + ] + } + ], + "name": "WebGapAnimMergeActiveAction" + }, + "selected": { + "active": true, + "source": true + }, + "sourceObject": "WebGapAnimMergeSourceObject", + "sourceObjectAction": { + "channels": [ + { + "frames": [ + 1, + 3, + 5 + ], + "index": 0, + "path": "[\"source_merge_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 10, + 30, + 50 + ] + } + ], + "name": "WebGapAnimMergeSourceAction" + } + }, + "after": { + "active": true, + "activeObject": "WebGapAnimMergeActiveObject", + "activeObjectAction": { + "channels": [ + { + "frames": [ + 1, + 3, + 5 + ], + "index": 0, + "path": "[\"active_merge_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1, + 3, + 5 + ] + }, + { + "frames": [ + 1, + 3, + 5 + ], + "index": 0, + "path": "[\"source_merge_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 10, + 30, + 50 + ] + } + ], + "name": "WebGapAnimMergeActiveAction" + }, + "selected": { + "active": true, + "source": true + }, + "sourceObject": "WebGapAnimMergeSourceObject", + "sourceObjectAction": { + "channels": [ + { + "frames": [ + 1, + 3, + 5 + ], + "index": 0, + "path": "[\"active_merge_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 1, + 3, + 5 + ] + }, + { + "frames": [ + 1, + 3, + 5 + ], + "index": 0, + "path": "[\"source_merge_target\"]", + "selected": [ + true, + true, + true + ], + "values": [ + 10, + 30, + 50 + ] + } + ], + "name": "WebGapAnimMergeActiveAction" + } + } + }, + "wasm": { + "status": "EXACT", + "before": { + "activeAnimationId": "action:WebGapAnimMergeActiveAction:object:WebGapAnimMergeActiveObject", + "sourceAnimationId": "action:WebGapAnimMergeSourceAction:object:WebGapAnimMergeSourceObject", + "activeChannelPaths": [ + "[\"active_merge_target\"][0]" + ], + "sourceChannelPaths": [ + "[\"source_merge_target\"][0]" + ], + "keyframesPerChannel": [ + 3, + 3 + ] + }, + "after": { + "activeAnimationId": "action:WebGapAnimMergeActiveAction:object:WebGapAnimMergeActiveObject", + "sourceAnimationId": "action:WebGapAnimMergeActiveAction:object:WebGapAnimMergeSourceObject", + "channelPaths": [ + "[\"active_merge_target\"][0]", + "[\"source_merge_target\"][0]" + ], + "keyframesPerChannel": [ + 3, + 3 + ], + "sourceValues": [ + [ + 1, + 3, + 5 + ], + [ + 10, + 30, + 50 + ] + ] + }, + "sourceActionRemoved": true + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00199" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00198/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00198/manifest.json new file mode 100644 index 00000000..ca424edf --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00198/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00198", + "parentTask": "M16-GAP-00197", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_MERGE_ANIMATION_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { "path": "tests/golden/M16-GAP-00197/manifest.json", "sha256": "330488ecec1bfee69e43b02fce9b79cfd3f5e8931d66cabf1602ca1d44e94947" }, + "fixture": { "path": "tests/files/web/generated/M16-GAP-00198-operator-anim.merge_animation.blend", "sha256": "0c37b1290f08b1ad872efdf8a52c795d24778a1ecab516ea749ff2ae858bd2fb" }, + "generator": { "path": "tools/web/generated/M16-GAP-00198.py", "sha256": "85004c8e8f9e92eea7a87f266de34d07950b993b7af6bd09e642d99bd1f54eb7" }, + "desktopChecker": { "path": "tools/web/check-action-merge-animation-desktop.py", "sha256": "0f7aabaad764f96992e4a1cbe56a586ce0c03e67b0cdc642073a5222cf5b5fcb" }, + "webChecker": { "path": "tools/web/check-generated-gap.mjs", "sha256": "41c97bd2af26262e21a66e46baaf38969772bd5ba5df72609102f9d3bfd0d8ae" }, + "reader": { "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf" }, + "protocol": { "path": "web/protocol/editor-workflow.ts", "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" }, + "sceneIrProtocol": { "path": "web/protocol/scene-ir.ts", "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" }, + "wasm": { "path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" }, + "wasmPublic": { "path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" }, + "wasmJs": { "path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" }, + "desktopReport": { "path": "tests/golden/M16-GAP-00198/anim-merge-animation-desktop-report.json", "sha256": "e170913f6dd5161a10853f04c2e56ea1181de5de12fdf5fbb1159745dcd0f757" }, + "webReport": { "path": "tests/golden/M16-GAP-00198/anim-merge-animation-local-exact-report.json", "sha256": "914ef24f01a81d7baceeed4f67f317abf529cedec6ddbbd22c1ed35bb94039e2" }, + "status": { "path": "docs/status/M16-GAP-00198.md", "sha256": "7bf5d2f34a6fa5b19efca51fe360358da8e8030419fd78687314e690598125aa" }, + "taskContext": { "path": "tests/golden/M16-GAP-00198/task-context.json", "sha256": "33a275667991c5fc655596a0197bb46467f233a307bcb7752f5531ee9a3819d3" } + }, + "nextTask": "M16-GAP-00199" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00198/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00198/task-context.json new file mode 100644 index 00000000..da76b386 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00198/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00198", + "parentTask": "M16-GAP-00197", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.merge_animation data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.merge_animation", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00198.py -- tests/files/web/generated/M16-GAP-00198-operator-anim.merge_animation.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00198", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00198" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00198.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2121, + "contextRemainingTokens": 529 + }, + "source": { + "bytes": 7783, + "tokens": 1947 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00198.py", + "bytes": 1665, + "tokens": 417 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00198-operator-anim.merge_animation.blend", + "bytes": 87247, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 231498, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 485219, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00198/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00198.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00198/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1665, + "tokens": 417 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00199", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00198.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00197/manifest.json", + "parentStatus": "docs/status/M16-GAP-00197.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00198.md", + "tests/golden/M16-GAP-00197/manifest.json", + "docs/status/M16-GAP-00197.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00197", + "parentTask": "M16-GAP-00196", + "status": "done", + "nextTask": "M16-GAP-00198", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00197 Status", + "status: done", + "task: anim.keyingset_button_remove operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one selected/active object with a three-key Action and one active `ButtonKeyingSet` path. A real `PROPERTIES` RNA button invokes `ANIM_OT_keyingset_button_remove()` (`poll=true`, `FINISHED`), removing the active property path without changing the Action.", + "evidence:", + "- Desktop evidence records path count `1→0`, the unchanged active Keying Set, exact pre-existing path fields, unchanged `[1, 3, 5]` Action data, and exact save/reopen." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1789, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 448 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00198.md", + "bytes": 1789, + "lines": 38, + "tokens": 448 + }, + { + "path": "tests/golden/M16-GAP-00197/manifest.json", + "bytes": 2706, + "lines": 29, + "tokens": 677 + }, + { + "path": "docs/status/M16-GAP-00197.md", + "bytes": 1120, + "lines": 18, + "tokens": 280 + } + ], + "sourceTokens": 1947, + "evidenceFiles": 1, + "evidenceBytes": 1665, + "evidenceTokens": 417, + "totalTokens": 2364, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3388, + "serializedContextTokens": 754, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00199/anim-paste-driver-button-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00199/anim-paste-driver-button-desktop-report.json new file mode 100644 index 00000000..c21b8074 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00199/anim-paste-driver-button-desktop-report.json @@ -0,0 +1,65 @@ +{ + "after": { + "source": { + "drivers": [ + { + "expression": "frame * 3.0 + 2.0", + "index": 0, + "path": "[\"source_target\"]", + "type": "SCRIPTED", + "variableCount": 0 + } + ], + "value": 5.0 + }, + "target": { + "drivers": [ + { + "expression": "frame * 3.0 + 2.0", + "index": 0, + "path": "[\"paste_target\"]", + "type": "SCRIPTED", + "variableCount": 0 + } + ], + "value": 5.0 + } + }, + "before": { + "source": { + "drivers": [ + { + "expression": "frame * 3.0 + 2.0", + "index": 0, + "path": "[\"source_target\"]", + "type": "SCRIPTED", + "variableCount": 0 + } + ], + "value": 5.0 + }, + "target": { + "drivers": [ + { + "expression": "frame * 3.0 + 2.0", + "index": 0, + "path": "[\"paste_target\"]", + "type": "SCRIPTED", + "variableCount": 0 + } + ], + "value": 5.0 + } + }, + "blenderVersion": "5.2.0 LTS", + "evidenceStatus": "PRESERVED", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00199-operator-anim.paste_driver_button.blend", + "fixtureSha256": "971782396db424a9b427f7fb9d9d1495ddc572a2ae1bf7b7b8c3320f5d8d77d9", + "mainMutation": "DRIVER_PASTED", + "operation": "ANIM_PASTE_DRIVER_BUTTON_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00199" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00199/anim-paste-driver-button-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00199/anim-paste-driver-button-local-exact-report.json new file mode 100644 index 00000000..4d79a870 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00199/anim-paste-driver-button-local-exact-report.json @@ -0,0 +1,52 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00199", + "operation": "ANIM_PASTE_DRIVER_BUTTON_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00199-operator-anim.paste_driver_button.blend", + "sha256": "971782396db424a9b427f7fb9d9d1495ddc572a2ae1bf7b7b8c3320f5d8d77d9" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00199/anim-paste-driver-button-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "DRIVER_PASTED" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapAnimPasteDriverButtonObject", + "drivers": [ + { + "arrayIndex": 0, + "editable": true, + "enabled": true, + "expression": "frame * 3.0 + 2.0", + "flags": 8, + "influence": 0, + "path": "[\"source_target\"]", + "type": "SCRIPTED", + "typeCode": 1, + "variables": [] + }, + { + "arrayIndex": 0, + "editable": true, + "enabled": true, + "expression": "frame * 3.0 + 2.0", + "flags": 8, + "influence": 0, + "path": "[\"paste_target\"]", + "type": "SCRIPTED", + "typeCode": 1, + "variables": [] + } + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00200" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00199/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00199/manifest.json new file mode 100644 index 00000000..2588b212 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00199/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00199", + "parentTask": "M16-GAP-00198", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_PASTE_DRIVER_BUTTON_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { "path": "tests/golden/M16-GAP-00198/manifest.json", "sha256": "7f651bc4b2238504adcb02dc35455735e7aa6cd524358e9ca0a2429546da070c" }, + "fixture": { "path": "tests/files/web/generated/M16-GAP-00199-operator-anim.paste_driver_button.blend", "sha256": "971782396db424a9b427f7fb9d9d1495ddc572a2ae1bf7b7b8c3320f5d8d77d9" }, + "generator": { "path": "tools/web/generated/M16-GAP-00199.py", "sha256": "6ef118516c3eed69fa601631d26f5ecef355fe9f58907a1c7e33c4a8cd2be88e" }, + "desktopChecker": { "path": "tools/web/check-action-paste-driver-button-desktop.py", "sha256": "2c167b38e9688880b499abe97babd2f51134b2b83efd5bb34140bb0b81079375" }, + "webChecker": { "path": "tools/web/check-generated-gap.mjs", "sha256": "09d0d45a5454f9c9eea29414d412c28a372d3dcff9ac645fc16ff68566ce4d6f" }, + "reader": { "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf" }, + "protocol": { "path": "web/protocol/editor-workflow.ts", "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" }, + "sceneIrProtocol": { "path": "web/protocol/scene-ir.ts", "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" }, + "wasm": { "path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" }, + "wasmPublic": { "path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" }, + "wasmJs": { "path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" }, + "desktopReport": { "path": "tests/golden/M16-GAP-00199/anim-paste-driver-button-desktop-report.json", "sha256": "b20074b47768751a5e6c884165c4119e95296eb7a6fc4812e8bef3676e7aaf08" }, + "webReport": { "path": "tests/golden/M16-GAP-00199/anim-paste-driver-button-local-exact-report.json", "sha256": "7f860445f0e6889e6993e458b0e81f075c5b97fe8c2cf35b0eae4846e2d4cc5e" }, + "status": { "path": "docs/status/M16-GAP-00199.md", "sha256": "920d779ace3658975b5f2451fb48b644f7d64ce81129b89d6e1eb9fc5ac6e6c9" }, + "taskContext": { "path": "tests/golden/M16-GAP-00199/task-context.json", "sha256": "e054e382aa573e117fc34d47e2e2d8733ac17d75d490dc4f5de397e3fb9658f7" } + }, + "nextTask": "M16-GAP-00200" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00199/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00199/task-context.json new file mode 100644 index 00000000..22f4f6ad --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00199/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00199", + "parentTask": "M16-GAP-00198", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.paste_driver_button data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.paste_driver_button", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00199.py -- tests/files/web/generated/M16-GAP-00199-operator-anim.paste_driver_button.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00199", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00199" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00199.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2055, + "contextRemainingTokens": 512 + }, + "source": { + "bytes": 7849, + "tokens": 1964 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00199.py", + "bytes": 1222, + "tokens": 306 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00199-operator-anim.paste_driver_button.blend", + "bytes": 86601, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 231498, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 489417, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00199/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00199.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00199/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1222, + "tokens": 306 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00200", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00199.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00198/manifest.json", + "parentStatus": "docs/status/M16-GAP-00198.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00199.md", + "tests/golden/M16-GAP-00198/manifest.json", + "docs/status/M16-GAP-00198.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00198", + "parentTask": "M16-GAP-00197", + "status": "done", + "nextTask": "M16-GAP-00199", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00198 Status", + "status: done", + "task: anim.merge_animation operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains two selected mesh objects. The active object owns `WebGapAnimMergeActiveAction`; the source object owns `WebGapAnimMergeSourceAction`, each with one three-key custom-property channel.", + "- Blender invokes `ANIM_OT_merge_animation` with `poll=true` and `FINISHED`, moving the source slot into the active action. Both objects then observe `WebGapAnimMergeActiveAction` with both channels; the source action has no remaining users.", + "evidence:" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1809, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 453 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00199.md", + "bytes": 1809, + "lines": 38, + "tokens": 453 + }, + { + "path": "tests/golden/M16-GAP-00198/manifest.json", + "bytes": 2666, + "lines": 29, + "tokens": 667 + }, + { + "path": "docs/status/M16-GAP-00198.md", + "bytes": 1206, + "lines": 19, + "tokens": 302 + } + ], + "sourceTokens": 1964, + "evidenceFiles": 1, + "evidenceBytes": 1222, + "evidenceTokens": 306, + "totalTokens": 2270, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3294, + "serializedContextTokens": 757, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00200/anim-previewrange-clear-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00200/anim-previewrange-clear-desktop-report.json new file mode 100644 index 00000000..dbe68085 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00200/anim-previewrange-clear-desktop-report.json @@ -0,0 +1,23 @@ +{ + "after": { + "end": 0, + "start": 0, + "use": false + }, + "before": { + "end": 0, + "start": 0, + "use": false + }, + "blenderVersion": "5.2.0 LTS", + "evidenceStatus": "PRESERVED", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00200-operator-anim.previewrange_clear.blend", + "fixtureSha256": "c9b586fb0a87f38c4fb1e4e1834805fda1345549ecdc558702080ea66af65a9e", + "mainMutation": "PREVIEW_RANGE_CLEARED", + "operation": "ANIM_PREVIEWRANGE_CLEAR_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00200" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00200/anim-previewrange-clear-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00200/anim-previewrange-clear-local-exact-report.json new file mode 100644 index 00000000..9255d97d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00200/anim-previewrange-clear-local-exact-report.json @@ -0,0 +1,29 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00200", + "operation": "ANIM_PREVIEWRANGE_CLEAR_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00200-operator-anim.previewrange_clear.blend", + "sha256": "c9b586fb0a87f38c4fb1e4e1834805fda1345549ecdc558702080ea66af65a9e" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00200/anim-previewrange-clear-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "PREVIEW_RANGE_CLEARED" + }, + "wasm": { + "status": "EXACT", + "sceneId": "scene:Scene", + "previewRange": null, + "frameStart": 1, + "frameEnd": 8 + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00201" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00200/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00200/manifest.json new file mode 100644 index 00000000..acd612e3 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00200/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00200", + "parentTask": "M16-GAP-00199", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_PREVIEWRANGE_CLEAR_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { "path": "tests/golden/M16-GAP-00199/manifest.json", "sha256": "55e28b867275c897d142b4da366a68368006de40ba7edde39b4637ce0b3771bb" }, + "fixture": { "path": "tests/files/web/generated/M16-GAP-00200-operator-anim.previewrange_clear.blend", "sha256": "c9b586fb0a87f38c4fb1e4e1834805fda1345549ecdc558702080ea66af65a9e" }, + "generator": { "path": "tools/web/generated/M16-GAP-00200.py", "sha256": "92d82b88dd301e895fe075c7d1760b1cb4147c7049a3c6d69509fc17e14b64d1" }, + "desktopChecker": { "path": "tools/web/check-action-previewrange-clear-desktop.py", "sha256": "02b2704fd6edae72cb31d603c6a1ddf4a3054370627044ba4c1f66e30c488e3e" }, + "webChecker": { "path": "tools/web/check-generated-gap.mjs", "sha256": "7d5ab57408c5fa21ce8ff0998d212f5685d9900e1d2ff135f19fe9ec6c0197c9" }, + "reader": { "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf" }, + "protocol": { "path": "web/protocol/editor-workflow.ts", "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" }, + "sceneIrProtocol": { "path": "web/protocol/scene-ir.ts", "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" }, + "wasm": { "path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" }, + "wasmPublic": { "path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" }, + "wasmJs": { "path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" }, + "desktopReport": { "path": "tests/golden/M16-GAP-00200/anim-previewrange-clear-desktop-report.json", "sha256": "b1e7212248ff23d323e9c00645db52b38c4570f42c344b6325f1506c404704c4" }, + "webReport": { "path": "tests/golden/M16-GAP-00200/anim-previewrange-clear-local-exact-report.json", "sha256": "7ba44c02fcfa34df1c4e25fb3567474893b47dc4a20522f33634cd3ad36fe940" }, + "status": { "path": "docs/status/M16-GAP-00200.md", "sha256": "314c2534f8291496721d190b7345954f1e7e9218b9756d1b6bfdc4486a112b9e" }, + "taskContext": { "path": "tests/golden/M16-GAP-00200/task-context.json", "sha256": "1cb7806458458bc5e417a84b556e3fb777457f2af1e1dcd2fc4936911cfc508a" } + }, + "nextTask": "M16-GAP-00201" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00200/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00200/task-context.json new file mode 100644 index 00000000..752898de --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00200/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00200", + "parentTask": "M16-GAP-00199", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.previewrange_clear data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.previewrange_clear", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00200.py -- tests/files/web/generated/M16-GAP-00200-operator-anim.previewrange_clear.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00200", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00200" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00200.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2121, + "contextRemainingTokens": 529 + }, + "source": { + "bytes": 7783, + "tokens": 1947 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00200.py", + "bytes": 1765, + "tokens": 442 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00200-operator-anim.previewrange_clear.blend", + "bytes": 86336, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 231498, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 493085, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00200/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00200.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00200/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1765, + "tokens": 442 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00201", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00200.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00199/manifest.json", + "parentStatus": "docs/status/M16-GAP-00199.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00200.md", + "tests/golden/M16-GAP-00199/manifest.json", + "docs/status/M16-GAP-00199.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00199", + "parentTask": "M16-GAP-00198", + "status": "done", + "nextTask": "M16-GAP-00200", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00199 Status", + "status: done", + "task: anim.paste_driver_button operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one mesh object with a driven `source_target` custom property and an undriven `paste_target` custom property. Desktop UI evidence copies the source driver and pastes it into the target through `ANIM_OT_paste_driver_button`.", + "- The saved fixture exposes both scripted drivers with the same expression in WASM/Main; no reader, protocol, or browser change was required.", + "evidence:" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1804, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 451 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00200.md", + "bytes": 1804, + "lines": 38, + "tokens": 451 + }, + { + "path": "tests/golden/M16-GAP-00199/manifest.json", + "bytes": 2686, + "lines": 29, + "tokens": 672 + }, + { + "path": "docs/status/M16-GAP-00199.md", + "bytes": 1125, + "lines": 19, + "tokens": 282 + } + ], + "sourceTokens": 1947, + "evidenceFiles": 1, + "evidenceBytes": 1765, + "evidenceTokens": 442, + "totalTokens": 2389, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3413, + "serializedContextTokens": 757, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00201/anim-previewrange-set-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00201/anim-previewrange-set-desktop-report.json new file mode 100644 index 00000000..37fff861 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00201/anim-previewrange-set-desktop-report.json @@ -0,0 +1,22 @@ +{ + "after": { + "end": 6, + "start": 2, + "use": true + }, + "before": { + "end": 6, + "start": 2, + "use": true + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00201-operator-anim.previewrange_set.blend", + "fixtureSha256": "91d61fe3989324a23db7dabbb178c7b0a963af155c117c57859a24e4c415945e", + "mainMutation": "PREVIEW_RANGE_SET", + "operation": "ANIM_PREVIEWRANGE_SET_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00201" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00201/anim-previewrange-set-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00201/anim-previewrange-set-local-exact-report.json new file mode 100644 index 00000000..2fca34e4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00201/anim-previewrange-set-local-exact-report.json @@ -0,0 +1,32 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00201", + "operation": "ANIM_PREVIEWRANGE_SET_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00201-operator-anim.previewrange_set.blend", + "sha256": "91d61fe3989324a23db7dabbb178c7b0a963af155c117c57859a24e4c415945e" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00201/anim-previewrange-set-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "PREVIEW_RANGE_SET" + }, + "wasm": { + "status": "EXACT", + "sceneId": "scene:Scene", + "previewRange": { + "end": 6, + "start": 2 + }, + "frameStart": 1, + "frameEnd": 8 + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00202" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00201/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00201/manifest.json new file mode 100644 index 00000000..f7956a63 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00201/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00201", + "parentTask": "M16-GAP-00200", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_PREVIEWRANGE_SET_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { "path": "tests/golden/M16-GAP-00200/manifest.json", "sha256": "d0e50c659eae65217eb314559e6c4aaa50dd830a6a53d5a3ff9aa182e1baf6ed" }, + "fixture": { "path": "tests/files/web/generated/M16-GAP-00201-operator-anim.previewrange_set.blend", "sha256": "91d61fe3989324a23db7dabbb178c7b0a963af155c117c57859a24e4c415945e" }, + "generator": { "path": "tools/web/generated/M16-GAP-00201.py", "sha256": "94fac7954b5c1fd566c48b4dfac58fa2581b6068360cccee7b436e30e5bed9c0" }, + "desktopChecker": { "path": "tools/web/check-action-previewrange-set-desktop.py", "sha256": "0c667ab6e9ca9e866234fa9e190dc30587b59ffeba5616b4b37853569e6d24a9" }, + "webChecker": { "path": "tools/web/check-generated-gap.mjs", "sha256": "08a20a0f20d32978b5a7c46cf4143f444aaad903a0bfcc805dfae9289b56fe81" }, + "reader": { "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf" }, + "protocol": { "path": "web/protocol/editor-workflow.ts", "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" }, + "sceneIrProtocol": { "path": "web/protocol/scene-ir.ts", "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" }, + "wasm": { "path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" }, + "wasmPublic": { "path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" }, + "wasmJs": { "path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" }, + "desktopReport": { "path": "tests/golden/M16-GAP-00201/anim-previewrange-set-desktop-report.json", "sha256": "9a4abf76db56b660808f66834d941771a0cf860a662d53771ff8bf309bf2a162" }, + "webReport": { "path": "tests/golden/M16-GAP-00201/anim-previewrange-set-local-exact-report.json", "sha256": "7751033cb2d246ed4b87d10592894f27574d3409b5d48f3161a583f186786b67" }, + "status": { "path": "docs/status/M16-GAP-00201.md", "sha256": "9b5e2b1a31558340dc633d476fb379bd4bb460b8d246f4b2b4576b1734b3a95b" }, + "taskContext": { "path": "tests/golden/M16-GAP-00201/task-context.json", "sha256": "0ac3856c852d6f7e08c7709f2b6435b46e1ddb2514004d9c9caf10d255b71e72" } + }, + "nextTask": "M16-GAP-00202" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00201/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00201/task-context.json new file mode 100644 index 00000000..a0dce9e6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00201/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00201", + "parentTask": "M16-GAP-00200", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.previewrange_set data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.previewrange_set", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00201.py -- tests/files/web/generated/M16-GAP-00201-operator-anim.previewrange_set.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00201", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00201" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00201.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2284, + "contextRemainingTokens": 569 + }, + "source": { + "bytes": 7620, + "tokens": 1907 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00201.py", + "bytes": 1707, + "tokens": 427 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00201-operator-anim.previewrange_set.blend", + "bytes": 86352, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 231498, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 496749, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00201/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00201.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00201/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1707, + "tokens": 427 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00202", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00201.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00200/manifest.json", + "parentStatus": "docs/status/M16-GAP-00200.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00201.md", + "tests/golden/M16-GAP-00200/manifest.json", + "docs/status/M16-GAP-00200.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00200", + "parentTask": "M16-GAP-00199", + "status": "done", + "nextTask": "M16-GAP-00201", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00200 Status", + "status: done", + "task: anim.previewrange_clear operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture starts with a `2..6` scene preview range. Desktop runs `ANIM_OT_previewrange_clear` in the active Dope Sheet animation context and saves the cleared Main.", + "- WASM/Main observes the same scene with no `previewRange` field and an unchanged frame range; no reader, protocol, or browser change was required.", + "evidence:" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1794, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 449 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00201.md", + "bytes": 1794, + "lines": 38, + "tokens": 449 + }, + { + "path": "tests/golden/M16-GAP-00200/manifest.json", + "bytes": 2681, + "lines": 29, + "tokens": 671 + }, + { + "path": "docs/status/M16-GAP-00200.md", + "bytes": 977, + "lines": 19, + "tokens": 245 + } + ], + "sourceTokens": 1907, + "evidenceFiles": 1, + "evidenceBytes": 1707, + "evidenceTokens": 427, + "totalTokens": 2334, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3358, + "serializedContextTokens": 755, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00202/anim-replace-action-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00202/anim-replace-action-desktop-report.json new file mode 100644 index 00000000..33fe0550 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00202/anim-replace-action-desktop-report.json @@ -0,0 +1,172 @@ +{ + "after": { + "actions": { + "WebGapAnimReplaceNewAction": 4, + "WebGapAnimReplaceOldAction": 1 + }, + "activeObject": "WebGapAnimReplaceOldA", + "objects": { + "WebGapAnimReplaceNewUser": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"replace_target\"]", + "values": [ + 10.0, + 30.0, + 50.0 + ] + } + ], + "name": "WebGapAnimReplaceNewAction" + }, + "WebGapAnimReplaceOldA": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"replace_target\"]", + "values": [ + 10.0, + 30.0, + 50.0 + ] + } + ], + "name": "WebGapAnimReplaceNewAction" + }, + "WebGapAnimReplaceOldB": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"replace_target\"]", + "values": [ + 10.0, + 30.0, + 50.0 + ] + } + ], + "name": "WebGapAnimReplaceNewAction" + } + } + }, + "before": { + "actions": { + "WebGapAnimReplaceNewAction": 2, + "WebGapAnimReplaceOldAction": 3 + }, + "activeObject": "WebGapAnimReplaceOldA", + "objects": { + "WebGapAnimReplaceNewUser": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"replace_target\"]", + "values": [ + 10.0, + 30.0, + 50.0 + ] + } + ], + "name": "WebGapAnimReplaceNewAction" + }, + "WebGapAnimReplaceOldA": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"replace_target\"]", + "values": [ + 1.0, + 3.0, + 5.0 + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"replace_target\"]", + "values": [ + 2.0, + 4.0, + 6.0 + ] + } + ], + "name": "WebGapAnimReplaceOldAction" + }, + "WebGapAnimReplaceOldB": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"replace_target\"]", + "values": [ + 1.0, + 3.0, + 5.0 + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"replace_target\"]", + "values": [ + 2.0, + 4.0, + 6.0 + ] + } + ], + "name": "WebGapAnimReplaceOldAction" + } + } + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00202-operator-anim.replace_action.blend", + "fixtureSha256": "f29c88ecc031b1a56c68cea244417035bf8744db5baaab623627e6dab889f956", + "mainMutation": "ACTIONS_REPLACED", + "operation": "ANIM_REPLACE_ACTION_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00202" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00202/anim-replace-action-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00202/anim-replace-action-local-exact-report.json new file mode 100644 index 00000000..68a0e1bd --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00202/anim-replace-action-local-exact-report.json @@ -0,0 +1,38 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00202", + "operation": "ANIM_REPLACE_ACTION_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00202-operator-anim.replace_action.blend", + "sha256": "f29c88ecc031b1a56c68cea244417035bf8744db5baaab623627e6dab889f956" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00202/anim-replace-action-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "ACTIONS_REPLACED" + }, + "wasm": { + "status": "EXACT", + "replacedObjectIds": [ + "object:WebGapAnimReplaceNewUser", + "object:WebGapAnimReplaceOldA", + "object:WebGapAnimReplaceOldB" + ], + "newAction": "WebGapAnimReplaceNewAction", + "oldActionUnlinked": "action:WebGapAnimReplaceOldAction:unlinked", + "channelsPerObject": [ + 1, + 1, + 1 + ], + "oldActionChannels": 2 + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00203" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00202/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00202/manifest.json new file mode 100644 index 00000000..4271eb90 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00202/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00202", + "parentTask": "M16-GAP-00201", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_REPLACE_ACTION_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { "path": "tests/golden/M16-GAP-00201/manifest.json", "sha256": "57d93e7b6005d067485bf88745444309c342983d9428072a773a5fa9de6a7d35" }, + "fixture": { "path": "tests/files/web/generated/M16-GAP-00202-operator-anim.replace_action.blend", "sha256": "f29c88ecc031b1a56c68cea244417035bf8744db5baaab623627e6dab889f956" }, + "generator": { "path": "tools/web/generated/M16-GAP-00202.py", "sha256": "bf8fc46f38503e773ffa46248feca82de6120321888924eafb3779dc232984e8" }, + "desktopChecker": { "path": "tools/web/check-action-replace-action-desktop.py", "sha256": "9415485899bb577d178c2345240dccf42ef90f1146a9c7be7064ddfeef9df0b1" }, + "webChecker": { "path": "tools/web/check-generated-gap.mjs", "sha256": "007da7f0d0b0959fe8688aa532198a7a4ba3bb4827a99bfe83c210f8b9b970f2" }, + "reader": { "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf" }, + "protocol": { "path": "web/protocol/editor-workflow.ts", "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" }, + "sceneIrProtocol": { "path": "web/protocol/scene-ir.ts", "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" }, + "wasm": { "path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" }, + "wasmPublic": { "path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" }, + "wasmJs": { "path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" }, + "desktopReport": { "path": "tests/golden/M16-GAP-00202/anim-replace-action-desktop-report.json", "sha256": "fdb5531aa70842959bb57b8b9490c9839037af9a69191e23834e8793b507ac10" }, + "webReport": { "path": "tests/golden/M16-GAP-00202/anim-replace-action-local-exact-report.json", "sha256": "c122dbb9daadb8a449032ac742d308e7b9473bb4d05ae7855cf80ed3982f4263" }, + "status": { "path": "docs/status/M16-GAP-00202.md", "sha256": "2e3f248c5393a4e17b060d48f73f553764a66f224d38a3aa29252a66dc0cc475" }, + "taskContext": { "path": "tests/golden/M16-GAP-00202/task-context.json", "sha256": "1a27a9755974d092a7c1a3599657e27f19ca2d56455836c6f99142547c0866b3" } + }, + "nextTask": "M16-GAP-00203" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00202/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00202/task-context.json new file mode 100644 index 00000000..6aa29d6f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00202/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00202", + "parentTask": "M16-GAP-00201", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.replace_action data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.replace_action", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00202.py -- tests/files/web/generated/M16-GAP-00202-operator-anim.replace_action.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00202", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00202" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00202.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2355, + "contextRemainingTokens": 588 + }, + "source": { + "bytes": 7549, + "tokens": 1888 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00202.py", + "bytes": 1870, + "tokens": 468 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00202-operator-anim.replace_action.blend", + "bytes": 87690, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 231498, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 501183, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00202/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00202.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00202/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1870, + "tokens": 468 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00203", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00202.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00201/manifest.json", + "parentStatus": "docs/status/M16-GAP-00201.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00202.md", + "tests/golden/M16-GAP-00201/manifest.json", + "docs/status/M16-GAP-00201.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00201", + "parentTask": "M16-GAP-00200", + "status": "done", + "nextTask": "M16-GAP-00202", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00201 Status", + "status: done", + "task: anim.previewrange_set operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture uses the active Dope Sheet animation region and a deterministic border gesture to set the Scene preview range to `2..6` through `ANIM_OT_previewrange_set`.", + "- WASM/Main observes the same `previewRange` and frame bounds; no reader, protocol, or browser change was required.", + "evidence:" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1784, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 446 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00202.md", + "bytes": 1784, + "lines": 38, + "tokens": 446 + }, + { + "path": "tests/golden/M16-GAP-00201/manifest.json", + "bytes": 2671, + "lines": 29, + "tokens": 668 + }, + { + "path": "docs/status/M16-GAP-00201.md", + "bytes": 926, + "lines": 19, + "tokens": 232 + } + ], + "sourceTokens": 1888, + "evidenceFiles": 1, + "evidenceBytes": 1870, + "evidenceTokens": 468, + "totalTokens": 2356, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3380, + "serializedContextTokens": 753, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00203/anim-replace-action-new-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00203/anim-replace-action-new-desktop-report.json new file mode 100644 index 00000000..8b1ca2b4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00203/anim-replace-action-new-desktop-report.json @@ -0,0 +1,104 @@ +{ + "after": { + "actions": { + "Action": 2, + "WebGapAnimReplaceNewOldAction": 1 + }, + "activeObject": "WebGapAnimReplaceNewOldA", + "objects": { + "WebGapAnimReplaceNewOldA": { + "channels": [], + "name": "Action" + }, + "WebGapAnimReplaceNewOldB": { + "channels": [], + "name": "Action" + } + } + }, + "before": { + "actions": { + "WebGapAnimReplaceNewOldAction": 3 + }, + "activeObject": "WebGapAnimReplaceNewOldA", + "objects": { + "WebGapAnimReplaceNewOldA": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"replace_target\"]", + "values": [ + 1.0, + 3.0, + 5.0 + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"replace_target\"]", + "values": [ + 2.0, + 4.0, + 6.0 + ] + } + ], + "name": "WebGapAnimReplaceNewOldAction" + }, + "WebGapAnimReplaceNewOldB": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"replace_target\"]", + "values": [ + 1.0, + 3.0, + 5.0 + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"replace_target\"]", + "values": [ + 2.0, + 4.0, + 6.0 + ] + } + ], + "name": "WebGapAnimReplaceNewOldAction" + } + } + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00203-operator-anim.replace_action_new.blend", + "fixtureSha256": "dd278ab743c34b61566c20e545b90e42bcfe641ecbb523550fcdacea188f12b4", + "mainMutation": "ACTION_REPLACED_WITH_NEW", + "newAction": "Action", + "operation": "ANIM_REPLACE_ACTION_NEW_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00203" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00203/anim-replace-action-new-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00203/anim-replace-action-new-local-exact-report.json new file mode 100644 index 00000000..b4a03034 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00203/anim-replace-action-new-local-exact-report.json @@ -0,0 +1,34 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00203", + "operation": "ANIM_REPLACE_ACTION_NEW_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00203-operator-anim.replace_action_new.blend", + "sha256": "dd278ab743c34b61566c20e545b90e42bcfe641ecbb523550fcdacea188f12b4" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00203/anim-replace-action-new-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "ACTION_REPLACED_WITH_NEW" + }, + "wasm": { + "status": "EXACT", + "replacedObjectIds": [ + "object:WebGapAnimReplaceNewOldA", + "object:WebGapAnimReplaceNewOldB" + ], + "newAction": "Action", + "newActionChannels": 0, + "oldActionUnlinked": "action:WebGapAnimReplaceNewOldAction:unlinked", + "oldActionChannels": 2, + "emptyActionVisibility": "NOT_EXPOSED_BY_SCENE_SNAPSHOT" + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00204" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00203/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00203/manifest.json new file mode 100644 index 00000000..57e46e56 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00203/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00203", + "parentTask": "M16-GAP-00202", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_REPLACE_ACTION_NEW_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { "path": "tests/golden/M16-GAP-00202/manifest.json", "sha256": "8d3a4e0f3ff82b80f1cca0410e87999b324a817a8054ac322c8eea7e0ed7a81f" }, + "fixture": { "path": "tests/files/web/generated/M16-GAP-00203-operator-anim.replace_action_new.blend", "sha256": "dd278ab743c34b61566c20e545b90e42bcfe641ecbb523550fcdacea188f12b4" }, + "generator": { "path": "tools/web/generated/M16-GAP-00203.py", "sha256": "7da43b3e6d4774e5cd90ecbe51e6249a34778e58caec85945fbc9f3abfe83c4f" }, + "desktopChecker": { "path": "tools/web/check-action-replace-action-new-desktop.py", "sha256": "9920d9911715035ed99a9615df37e8cfdb70c3aa9b96f12fd5296c52047b0c64" }, + "webChecker": { "path": "tools/web/check-generated-gap.mjs", "sha256": "2c9f6d0ae72f175987aeb45bf3656207dee2742aa4213f656a5641d86992bfb7" }, + "reader": { "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf" }, + "protocol": { "path": "web/protocol/editor-workflow.ts", "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" }, + "sceneIrProtocol": { "path": "web/protocol/scene-ir.ts", "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" }, + "wasm": { "path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" }, + "wasmPublic": { "path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" }, + "wasmJs": { "path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" }, + "desktopReport": { "path": "tests/golden/M16-GAP-00203/anim-replace-action-new-desktop-report.json", "sha256": "1017546d241a1e8b8f26c02bb392269a1325b18cbba90b1598f786250f13976a" }, + "webReport": { "path": "tests/golden/M16-GAP-00203/anim-replace-action-new-local-exact-report.json", "sha256": "d743947398ac1b4beca0f6cf86f676bf24d668488e1a9a575ec561d2445a1ed6" }, + "status": { "path": "docs/status/M16-GAP-00203.md", "sha256": "0504f0cc178ce3f7d3678d0170294f3fdc5c0c0ff40458a9891ef471e8bded96" }, + "taskContext": { "path": "tests/golden/M16-GAP-00203/task-context.json", "sha256": "772d0122a85d60e0f0ed73fb53f700a89d251e2f8581ca84b2ee01c7792e66ca" } + }, + "nextTask": "M16-GAP-00204" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00203/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00203/task-context.json new file mode 100644 index 00000000..a6296313 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00203/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00203", + "parentTask": "M16-GAP-00202", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.replace_action_new data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.replace_action_new", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00203.py -- tests/files/web/generated/M16-GAP-00203-operator-anim.replace_action_new.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00203", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00203" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00203.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2146, + "contextRemainingTokens": 535 + }, + "source": { + "bytes": 7758, + "tokens": 1941 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00203.py", + "bytes": 1565, + "tokens": 392 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00203-operator-anim.replace_action_new.blend", + "bytes": 87267, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 231498, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 505156, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00203/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00203.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00203/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1565, + "tokens": 392 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00204", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00203.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00202/manifest.json", + "parentStatus": "docs/status/M16-GAP-00202.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00203.md", + "tests/golden/M16-GAP-00202/manifest.json", + "docs/status/M16-GAP-00202.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00202", + "parentTask": "M16-GAP-00201", + "status": "done", + "nextTask": "M16-GAP-00203", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00202 Status", + "status: done", + "task: anim.replace_action operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture has two objects using `WebGapAnimReplaceOldAction` and one object using `WebGapAnimReplaceNewAction`. Desktop calls `ANIM_OT_replace_action` with the explicit action session UIDs.", + "- All three object users switch to the new action; the old action remains unlinked with its original channels. WASM/Main exposes both the replaced users and preserved unlinked action without reader/protocol changes.", + "evidence:" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1804, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 451 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00203.md", + "bytes": 1804, + "lines": 38, + "tokens": 451 + }, + { + "path": "tests/golden/M16-GAP-00202/manifest.json", + "bytes": 2661, + "lines": 29, + "tokens": 666 + }, + { + "path": "docs/status/M16-GAP-00202.md", + "bytes": 1125, + "lines": 19, + "tokens": 282 + } + ], + "sourceTokens": 1941, + "evidenceFiles": 1, + "evidenceBytes": 1565, + "evidenceTokens": 392, + "totalTokens": 2333, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3357, + "serializedContextTokens": 757, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00204/anim-scene-range-frame-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00204/anim-scene-range-frame-desktop-report.json new file mode 100644 index 00000000..26e0dc49 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00204/anim-scene-range-frame-desktop-report.json @@ -0,0 +1,29 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00204-operator-anim.scene_range_frame.blend", + "fixtureSha256": "aa332513c910b461ea53db9c6f8c6de2801c7b79bc84c083c366360aec2a36dd", + "mainMutation": "VIEW_FRAMED_TO_SCENE_RANGE", + "operation": "ANIM_SCENE_RANGE_FRAME_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00204", + "view": { + "areaType": "DOPESHEET_EDITOR", + "view2d": { + "cur": { + "xmax": 260.0, + "xmin": -9.0, + "ymax": 0.0, + "ymin": -381.0 + }, + "mask": { + "xmax": 1153, + "xmin": 0, + "ymax": 380, + "ymin": 0 + } + } + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00204/anim-scene-range-frame-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00204/anim-scene-range-frame-local-exact-report.json new file mode 100644 index 00000000..fec8b80c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00204/anim-scene-range-frame-local-exact-report.json @@ -0,0 +1,40 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00204", + "operation": "ANIM_SCENE_RANGE_FRAME_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00204-operator-anim.scene_range_frame.blend", + "sha256": "aa332513c910b461ea53db9c6f8c6de2801c7b79bc84c083c366360aec2a36dd" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00204/anim-scene-range-frame-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "VIEW_FRAMED_TO_SCENE_RANGE" + }, + "wasm": { + "status": "EXACT", + "editor": "DOPE_SHEET", + "view2d": { + "cur": { + "xmax": 260, + "xmin": -9, + "ymax": 0, + "ymin": -381 + }, + "mask": { + "xmax": 1153, + "xmin": 0, + "ymax": 380, + "ymin": 0 + } + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00205" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00204/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00204/manifest.json new file mode 100644 index 00000000..d1e7588a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00204/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00204", + "parentTask": "M16-GAP-00203", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_SCENE_RANGE_FRAME_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { "path": "tests/golden/M16-GAP-00203/manifest.json", "sha256": "8886ae22530f6a533b64a31216b703b34e86461c270ddbcd548a63839568df7f" }, + "fixture": { "path": "tests/files/web/generated/M16-GAP-00204-operator-anim.scene_range_frame.blend", "sha256": "aa332513c910b461ea53db9c6f8c6de2801c7b79bc84c083c366360aec2a36dd" }, + "generator": { "path": "tools/web/generated/M16-GAP-00204.py", "sha256": "bda30fc04f8985b0dbdce2e239ee7a05a12e9362ca162803b54154684844d226" }, + "desktopChecker": { "path": "tools/web/check-action-scene-range-frame-desktop.py", "sha256": "054bbc89615177ecd199f28b55910e6aadbe1b87d04056679810c549ffdd8c08" }, + "webChecker": { "path": "tools/web/check-generated-gap.mjs", "sha256": "b03480a07b5347d999442dd3b596645982cd18f48a19e758862485937e2fa21b" }, + "reader": { "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf" }, + "protocol": { "path": "web/protocol/editor-workflow.ts", "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" }, + "sceneIrProtocol": { "path": "web/protocol/scene-ir.ts", "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" }, + "wasm": { "path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" }, + "wasmPublic": { "path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" }, + "wasmJs": { "path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" }, + "desktopReport": { "path": "tests/golden/M16-GAP-00204/anim-scene-range-frame-desktop-report.json", "sha256": "fd7943551bf6662d8cf43f623cdb966e7242b172eff8ca0f3bfee71c3b67dbed" }, + "webReport": { "path": "tests/golden/M16-GAP-00204/anim-scene-range-frame-local-exact-report.json", "sha256": "3195131f4c4cfa050656a4a301840d857f5eb65e2929aaa867d3b056d3fe631c" }, + "status": { "path": "docs/status/M16-GAP-00204.md", "sha256": "9f42dcc4c93fff48d9f1c739feb9df5f0000f18ef1a9ea11644207534cc3a9f8" }, + "taskContext": { "path": "tests/golden/M16-GAP-00204/task-context.json", "sha256": "5b90524611e783f9f9103ebc4d9504450edad0b471f9d86f62c2602c7c7d2edf" } + }, + "nextTask": "M16-GAP-00205" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00204/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00204/task-context.json new file mode 100644 index 00000000..4c96d62c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00204/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00204", + "parentTask": "M16-GAP-00203", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.scene_range_frame data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.scene_range_frame", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00204.py -- tests/files/web/generated/M16-GAP-00204-operator-anim.scene_range_frame.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00204", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00204" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00204.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2153, + "contextRemainingTokens": 537 + }, + "source": { + "bytes": 7751, + "tokens": 1939 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00204.py", + "bytes": 1641, + "tokens": 411 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00204-operator-anim.scene_range_frame.blend", + "bytes": 85932, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 231498, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 508892, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00204/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00204.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00204/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1641, + "tokens": 411 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00205", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00204.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00203/manifest.json", + "parentStatus": "docs/status/M16-GAP-00203.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00204.md", + "tests/golden/M16-GAP-00203/manifest.json", + "docs/status/M16-GAP-00203.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00203", + "parentTask": "M16-GAP-00202", + "status": "done", + "nextTask": "M16-GAP-00204", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00203 Status", + "status: done", + "task: anim.replace_action_new operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture has two objects using `WebGapAnimReplaceNewOldAction`. Desktop runs `ANIM_OT_replace_action_new` with the old action session UID; Blender creates a new empty action and assigns it to both users.", + "- The old action remains unlinked with its original channels. WASM/Main preserves that visible old-action evidence; the empty replacement action is intentionally not exposed as an animation entry.", + "evidence:" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1799, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 450 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00204.md", + "bytes": 1799, + "lines": 38, + "tokens": 450 + }, + { + "path": "tests/golden/M16-GAP-00203/manifest.json", + "bytes": 2681, + "lines": 29, + "tokens": 671 + }, + { + "path": "docs/status/M16-GAP-00203.md", + "bytes": 1103, + "lines": 19, + "tokens": 276 + } + ], + "sourceTokens": 1939, + "evidenceFiles": 1, + "evidenceBytes": 1641, + "evidenceTokens": 411, + "totalTokens": 2350, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3374, + "serializedContextTokens": 756, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00205/anim-separate-slots-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00205/anim-separate-slots-desktop-report.json new file mode 100644 index 00000000..87539c8f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00205/anim-separate-slots-desktop-report.json @@ -0,0 +1,134 @@ +{ + "after": { + "actions": { + "WebGapAnimSeparateSlotsAction": 1, + "WebGapSeparateSlotAAction": 1, + "WebGapSeparateSlotBAction": 1 + }, + "activeObject": "WebGapAnimSeparateSlotA", + "objects": { + "WebGapAnimSeparateSlotA": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"separate_target\"]", + "values": [ + 1.0, + 3.0, + 5.0 + ] + } + ], + "name": "WebGapSeparateSlotAAction" + }, + "WebGapAnimSeparateSlotB": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"separate_target\"]", + "values": [ + 2.0, + 4.0, + 6.0 + ] + } + ], + "name": "WebGapSeparateSlotBAction" + } + } + }, + "before": { + "actions": { + "WebGapAnimSeparateSlotsAction": 3 + }, + "activeObject": "WebGapAnimSeparateSlotA", + "objects": { + "WebGapAnimSeparateSlotA": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"separate_target\"]", + "values": [ + 1.0, + 3.0, + 5.0 + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"separate_target\"]", + "values": [ + 2.0, + 4.0, + 6.0 + ] + } + ], + "name": "WebGapAnimSeparateSlotsAction" + }, + "WebGapAnimSeparateSlotB": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"separate_target\"]", + "values": [ + 1.0, + 3.0, + 5.0 + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"separate_target\"]", + "values": [ + 2.0, + 4.0, + 6.0 + ] + } + ], + "name": "WebGapAnimSeparateSlotsAction" + } + } + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00205-operator-anim.separate_slots.blend", + "fixtureSha256": "55c92c2622d2b532060fae13fc9fc035b8d936f21ff766b6b49938632140fd82", + "mainMutation": "SLOTS_SEPARATED", + "operation": "ANIM_SEPARATE_SLOTS_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00205" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00205/anim-separate-slots-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00205/anim-separate-slots-local-exact-report.json new file mode 100644 index 00000000..f19e2a2b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00205/anim-separate-slots-local-exact-report.json @@ -0,0 +1,38 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00205", + "operation": "ANIM_SEPARATE_SLOTS_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00205-operator-anim.separate_slots.blend", + "sha256": "55c92c2622d2b532060fae13fc9fc035b8d936f21ff766b6b49938632140fd82" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00205/anim-separate-slots-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "SLOTS_SEPARATED" + }, + "wasm": { + "status": "EXACT", + "actionIds": [ + "action:WebGapSeparateSlotAAction:object:WebGapAnimSeparateSlotA", + "action:WebGapSeparateSlotBAction:object:WebGapAnimSeparateSlotB" + ], + "actionNames": [ + "WebGapSeparateSlotAAction", + "WebGapSeparateSlotBAction" + ], + "channelsPerAction": [ + 1, + 1 + ], + "oldActionEmpty": true + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00206" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00205/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00205/manifest.json new file mode 100644 index 00000000..7fdc6ee8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00205/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00205", + "parentTask": "M16-GAP-00204", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_SEPARATE_SLOTS_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { "path": "tests/golden/M16-GAP-00204/manifest.json", "sha256": "e54672ac3af7043e794430deed2f26f434fbdc9ebfb3418a971297a321936447" }, + "fixture": { "path": "tests/files/web/generated/M16-GAP-00205-operator-anim.separate_slots.blend", "sha256": "55c92c2622d2b532060fae13fc9fc035b8d936f21ff766b6b49938632140fd82" }, + "generator": { "path": "tools/web/generated/M16-GAP-00205.py", "sha256": "54a5039afb72cbdd942e1b9c77cbbe5bb09a4380ebca186268dd676a357621eb" }, + "desktopChecker": { "path": "tools/web/check-action-separate-slots-desktop.py", "sha256": "4f1ea94c58a36b764cff6c40380794b927cd67212421aa36db8062b3817748a5" }, + "webChecker": { "path": "tools/web/check-generated-gap.mjs", "sha256": "d8e7a9896b9f020b74080782a41181c9842ead4523f092a83c8c144819b3a73b" }, + "reader": { "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf" }, + "protocol": { "path": "web/protocol/editor-workflow.ts", "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" }, + "sceneIrProtocol": { "path": "web/protocol/scene-ir.ts", "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" }, + "wasm": { "path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" }, + "wasmPublic": { "path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" }, + "wasmJs": { "path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" }, + "desktopReport": { "path": "tests/golden/M16-GAP-00205/anim-separate-slots-desktop-report.json", "sha256": "d3976e54b5617745cd29ed3979a030553a6692a54d8cd59454593efac1e419be" }, + "webReport": { "path": "tests/golden/M16-GAP-00205/anim-separate-slots-local-exact-report.json", "sha256": "421feb4b3b822a8bb13999e268a42f3378408d4d725879d1e05c3c8efe359a84" }, + "status": { "path": "docs/status/M16-GAP-00205.md", "sha256": "504475606c2d54e38587d7880653c6328666b9731c29857dbc68d127a6249d71" }, + "taskContext": { "path": "tests/golden/M16-GAP-00205/task-context.json", "sha256": "744b861440cf850c81545c532cf78c6c946c2214f539d14da72d7e2fda23ff51" } + }, + "nextTask": "M16-GAP-00206" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00205/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00205/task-context.json new file mode 100644 index 00000000..2b6dd53a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00205/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00205", + "parentTask": "M16-GAP-00204", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.separate_slots data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.separate_slots", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00205.py -- tests/files/web/generated/M16-GAP-00205-operator-anim.separate_slots.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00205", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00205" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00205.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2326, + "contextRemainingTokens": 581 + }, + "source": { + "bytes": 7578, + "tokens": 1895 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00205.py", + "bytes": 1754, + "tokens": 439 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00205-operator-anim.separate_slots.blend", + "bytes": 87353, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 231498, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 512854, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00205/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00205.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00205/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1754, + "tokens": 439 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00206", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00205.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00204/manifest.json", + "parentStatus": "docs/status/M16-GAP-00204.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00205.md", + "tests/golden/M16-GAP-00204/manifest.json", + "docs/status/M16-GAP-00204.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00204", + "parentTask": "M16-GAP-00203", + "status": "done", + "nextTask": "M16-GAP-00205", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00204 Status", + "status: done", + "task: anim.scene_range_frame operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture uses a Dope Sheet animation region with an active preview playback range. Desktop runs `ANIM_OT_scene_range_frame` and frames the region to that scene range.", + "- The resulting `view2d` state is observable in WASM/Main editor workflow data; no reader, protocol, or browser change was required.", + "evidence:" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1784, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 446 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00205.md", + "bytes": 1784, + "lines": 38, + "tokens": 446 + }, + { + "path": "tests/golden/M16-GAP-00204/manifest.json", + "bytes": 2676, + "lines": 29, + "tokens": 669 + }, + { + "path": "docs/status/M16-GAP-00204.md", + "bytes": 950, + "lines": 19, + "tokens": 238 + } + ], + "sourceTokens": 1895, + "evidenceFiles": 1, + "evidenceBytes": 1754, + "evidenceTokens": 439, + "totalTokens": 2334, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3358, + "serializedContextTokens": 753, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00206/anim-slot-channels-move-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00206/anim-slot-channels-move-desktop-report.json new file mode 100644 index 00000000..8d07d62d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00206/anim-slot-channels-move-desktop-report.json @@ -0,0 +1,133 @@ +{ + "after": { + "actions": { + "WebGapAnimMoveSlotAction": 2, + "WebGapMoveSlotAAction": 1 + }, + "activeObject": "WebGapAnimMoveSlotA", + "objects": { + "WebGapAnimMoveSlotA": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"move_target\"]", + "values": [ + 1.0, + 3.0, + 5.0 + ] + } + ], + "name": "WebGapMoveSlotAAction" + }, + "WebGapAnimMoveSlotB": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"move_target\"]", + "values": [ + 2.0, + 4.0, + 6.0 + ] + } + ], + "name": "WebGapAnimMoveSlotAction" + } + } + }, + "before": { + "actions": { + "WebGapAnimMoveSlotAction": 3 + }, + "activeObject": "WebGapAnimMoveSlotA", + "objects": { + "WebGapAnimMoveSlotA": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"move_target\"]", + "values": [ + 1.0, + 3.0, + 5.0 + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"move_target\"]", + "values": [ + 2.0, + 4.0, + 6.0 + ] + } + ], + "name": "WebGapAnimMoveSlotAction" + }, + "WebGapAnimMoveSlotB": { + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"move_target\"]", + "values": [ + 1.0, + 3.0, + 5.0 + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"move_target\"]", + "values": [ + 2.0, + 4.0, + 6.0 + ] + } + ], + "name": "WebGapAnimMoveSlotAction" + } + } + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00206-operator-anim.slot_channels_move_to_new_action.blend", + "fixtureSha256": "4dddfa7e19686d28ea2e6918bb7221943ea26a4ba8831d7fef0736ee8fd52534", + "mainMutation": "SLOT_MOVED_TO_NEW_ACTION", + "operation": "ANIM_SLOT_CHANNELS_MOVE_TO_NEW_ACTION_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00206" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00206/anim-slot-channels-move-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00206/anim-slot-channels-move-local-exact-report.json new file mode 100644 index 00000000..d0408804 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00206/anim-slot-channels-move-local-exact-report.json @@ -0,0 +1,29 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00206", + "operation": "ANIM_SLOT_CHANNELS_MOVE_TO_NEW_ACTION_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00206-operator-anim.slot_channels_move_to_new_action.blend", + "sha256": "4dddfa7e19686d28ea2e6918bb7221943ea26a4ba8831d7fef0736ee8fd52534" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00206/anim-slot-channels-move-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "SLOT_MOVED_TO_NEW_ACTION" + }, + "wasm": { + "status": "EXACT", + "movedActionId": "action:WebGapMoveSlotAAction:object:WebGapAnimMoveSlotA", + "remainingActionId": "action:WebGapAnimMoveSlotAction:object:WebGapAnimMoveSlotB", + "movedChannels": 1, + "remainingChannels": 1 + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00207" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00206/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00206/manifest.json new file mode 100644 index 00000000..35350d7d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00206/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00206", + "parentTask": "M16-GAP-00205", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_SLOT_CHANNELS_MOVE_TO_NEW_ACTION_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { "path": "tests/golden/M16-GAP-00205/manifest.json", "sha256": "72cf9e1bf9457da4cad4b8fd91c121a8d6b50d8b9ce5199de816f60250c78d3e" }, + "fixture": { "path": "tests/files/web/generated/M16-GAP-00206-operator-anim.slot_channels_move_to_new_action.blend", "sha256": "4dddfa7e19686d28ea2e6918bb7221943ea26a4ba8831d7fef0736ee8fd52534" }, + "generator": { "path": "tools/web/generated/M16-GAP-00206.py", "sha256": "a0dda3e2468216bebc829cf9d64ff8b2124d243007bf466653df78aadb1e109a" }, + "desktopChecker": { "path": "tools/web/check-action-slot-channels-move-desktop.py", "sha256": "8625500da296a6eee287dbafb242da7178e9f101d171f8cc62ecf8baffe2b0d3" }, + "webChecker": { "path": "tools/web/check-generated-gap.mjs", "sha256": "5f25e2d50ac8dfe0854b5c424179b1cf0d496b0ee23a6e434ce623e4d98f912c" }, + "reader": { "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "8824ba3dfb4090b85dc679a583d263b4bdb190a47978f72f3c11f6b565fdacaf" }, + "protocol": { "path": "web/protocol/editor-workflow.ts", "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" }, + "sceneIrProtocol": { "path": "web/protocol/scene-ir.ts", "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" }, + "wasm": { "path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" }, + "wasmPublic": { "path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "3bcb7c5d1c3f85318febb9dfd8273ce141b5b38735d622ebb984d64c61059e0f" }, + "wasmJs": { "path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed" }, + "desktopReport": { "path": "tests/golden/M16-GAP-00206/anim-slot-channels-move-desktop-report.json", "sha256": "17e021647d84852ea074b134a722de8dedeea70db3cf180fa60456892ebc86df" }, + "webReport": { "path": "tests/golden/M16-GAP-00206/anim-slot-channels-move-local-exact-report.json", "sha256": "4c92663dc8eb44d504ba95d4a978211656bd44273ff53cb468101f00ef20f8a3" }, + "status": { "path": "docs/status/M16-GAP-00206.md", "sha256": "28a15b08f7d20ec17fa242954206715e1b8a50bb7ae1391c9a187119aaf8be26" }, + "taskContext": { "path": "tests/golden/M16-GAP-00206/task-context.json", "sha256": "da58033c8325bdf4c16687776315ba7689c9a0d908f327dbabf98507699bbc3c" } + }, + "nextTask": "M16-GAP-00207" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00206/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00206/task-context.json new file mode 100644 index 00000000..b5a573db --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00206/task-context.json @@ -0,0 +1,182 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00206", + "parentTask": "M16-GAP-00205", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.slot_channels_move_to_new_action data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.slot_channels_move_to_new_action", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00206.py -- tests/files/web/generated/M16-GAP-00206-operator-anim.slot_channels_move_to_new_action.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00206", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00206" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2188, + "contextRemainingTokens": 545 + }, + "source": { + "bytes": 7716, + "tokens": 1931 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00206-operator-anim.slot_channels_move_to_new_action.blend", + "bytes": 87458, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/generated/M16-GAP-00206.py", + "bytes": 2190, + "reason": "CONTEXT_REMAINING_SPACE" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 231498, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 516863, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00206/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00206.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00206/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00207", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00206.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00205/manifest.json", + "parentStatus": "docs/status/M16-GAP-00205.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00206.md", + "tests/golden/M16-GAP-00205/manifest.json", + "docs/status/M16-GAP-00205.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00205", + "parentTask": "M16-GAP-00204", + "status": "done", + "nextTask": "M16-GAP-00206", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00205 Status", + "status: done", + "task: anim.separate_slots operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture has two objects using separate slots in one layered action. Desktop runs `ANIM_OT_separate_slots` and creates one action per slot, reassigning the two objects.", + "- WASM/Main observes the two new action targets and their slot-specific channels; the original action is empty and omitted from the animation snapshot.", + "evidence:" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1874, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 469 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00206.md", + "bytes": 1874, + "lines": 38, + "tokens": 469 + }, + { + "path": "tests/golden/M16-GAP-00205/manifest.json", + "bytes": 2661, + "lines": 29, + "tokens": 666 + }, + { + "path": "docs/status/M16-GAP-00205.md", + "bytes": 1013, + "lines": 19, + "tokens": 254 + } + ], + "sourceTokens": 1931, + "evidenceFiles": 0, + "evidenceBytes": 0, + "evidenceTokens": 0, + "totalTokens": 1931, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 2955, + "serializedContextTokens": 732, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00207/anim-slot-new-for-id-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00207/anim-slot-new-for-id-desktop-report.json new file mode 100644 index 00000000..85df187e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00207/anim-slot-new-for-id-desktop-report.json @@ -0,0 +1,75 @@ +{ + "after": { + "action": "WebGapAnimNewSlotAction", + "activeObject": "WebGapAnimNewSlotObject", + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"new_slot_target\"]", + "values": [ + 1.0, + 3.0, + 5.0 + ] + }, + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"new_slot_target\"]", + "values": [ + 1.0, + 3.0, + 5.0 + ] + } + ], + "slot": "OBWebGapAnimNewSlot.001", + "slots": [ + "OBWebGapAnimNewSlot", + "OBWebGapAnimNewSlot.001" + ] + }, + "before": { + "action": "WebGapAnimNewSlotAction", + "activeObject": "WebGapAnimNewSlotObject", + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"new_slot_target\"]", + "values": [ + 1.0, + 3.0, + 5.0 + ] + } + ], + "slot": "OBWebGapAnimNewSlot", + "slots": [ + "OBWebGapAnimNewSlot" + ] + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00207-operator-anim.slot_new_for_id.blend", + "fixtureSha256": "55feef5fa86ba311964057b6fa5b24b5362fa7c2fc9ab061736c4fec6927a532", + "mainMutation": "SLOT_DUPLICATED", + "operation": "ANIM_SLOT_NEW_FOR_ID_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00207" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00207/anim-slot-new-for-id-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00207/anim-slot-new-for-id-local-exact-report.json new file mode 100644 index 00000000..b04d0733 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00207/anim-slot-new-for-id-local-exact-report.json @@ -0,0 +1,29 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00207", + "operation": "ANIM_SLOT_NEW_FOR_ID_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00207-operator-anim.slot_new_for_id.blend", + "sha256": "55feef5fa86ba311964057b6fa5b24b5362fa7c2fc9ab061736c4fec6927a532" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00207/anim-slot-new-for-id-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "SLOT_DUPLICATED" + }, + "wasm": { + "status": "EXACT", + "animationId": "action:WebGapAnimNewSlotAction:object:WebGapAnimNewSlotObject", + "slotIdentifier": "OBWebGapAnimNewSlot.001", + "slotCount": 2, + "channels": 1 + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00208" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00207/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00207/manifest.json new file mode 100644 index 00000000..fc95c99f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00207/manifest.json @@ -0,0 +1,29 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00207", + "parentTask": "M16-GAP-00206", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_SLOT_NEW_FOR_ID_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { "path": "tests/golden/M16-GAP-00206/manifest.json", "sha256": "3b1207f1c3db50bcd1efdfd40f21cdbf99323288fd984a9da172f4525df31a9a" }, + "fixture": { "path": "tests/files/web/generated/M16-GAP-00207-operator-anim.slot_new_for_id.blend", "sha256": "55feef5fa86ba311964057b6fa5b24b5362fa7c2fc9ab061736c4fec6927a532" }, + "generator": { "path": "tools/web/generated/M16-GAP-00207.py", "sha256": "6c664ddeab1eb7cbe143c2c23ece749225b7f70a641590922af6a76fd61d44eb" }, + "desktopChecker": { "path": "tools/web/check-action-slot-new-for-id-desktop.py", "sha256": "76c3ed3a2046d4c5befa9f761ba020bf37859f5758a11f874e688d91bbcbc7e3" }, + "webChecker": { "path": "tools/web/check-generated-gap.mjs", "sha256": "36340873cc26d938df455c8aeb4a831877276135a093f8c5582f0a41cf050ae2" }, + "reader": { "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "ace99ea00f5e807cc098e19cc4447017bb5744431516066a65c8f38047c4a7e8" }, + "protocol": { "path": "web/protocol/editor-workflow.ts", "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" }, + "sceneIrProtocol": { "path": "web/protocol/scene-ir.ts", "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" }, + "wasm": { "path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "7716160bb7781f60e272b49bc071c263487ad9b21dc87d4f44bf3f94171bdfb6" }, + "wasmPublic": { "path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "7716160bb7781f60e272b49bc071c263487ad9b21dc87d4f44bf3f94171bdfb6" }, + "wasmJs": { "path": "web/app/src/vendor/blender/web_engine.js", "sha256": "5df580ac02c5d8806ffe858b31cccec7692222813d17e4ffdbee207bf346bcb1" }, + "wasmJsPublic": { "path": "web/app/public/vendor/blender/web_engine.js", "sha256": "5df580ac02c5d8806ffe858b31cccec7692222813d17e4ffdbee207bf346bcb1" }, + "desktopReport": { "path": "tests/golden/M16-GAP-00207/anim-slot-new-for-id-desktop-report.json", "sha256": "62998821fb29ec9edb1c2796f984e009091cb9d12ccca4ec058094aea695a6f3" }, + "webReport": { "path": "tests/golden/M16-GAP-00207/anim-slot-new-for-id-local-exact-report.json", "sha256": "2c843b2611ac386e68943adb36fc826dcb694c8fb30df9b0abf10f8970b4f4fc" }, + "status": { "path": "docs/status/M16-GAP-00207.md", "sha256": "6cb10e433730afa5fea28840824d849c492461f4b5b9350a41d5a0f995d4f504" }, + "taskContext": { "path": "tests/golden/M16-GAP-00207/task-context.json", "sha256": "37746bd730e6642f8a2ca14fe36b590977c2a409cf0df23e338ef43d7a22fd13" } + }, + "nextTask": "M16-GAP-00208" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00207/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00207/task-context.json new file mode 100644 index 00000000..e51c3207 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00207/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00207", + "parentTask": "M16-GAP-00206", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.slot_new_for_id data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.slot_new_for_id", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00207.py -- tests/files/web/generated/M16-GAP-00207-operator-anim.slot_new_for_id.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00207", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00207" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00207.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2161, + "contextRemainingTokens": 538 + }, + "source": { + "bytes": 7743, + "tokens": 1938 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00207.py", + "bytes": 1491, + "tokens": 373 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00207-operator-anim.slot_new_for_id.blend", + "bytes": 86860, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 233233, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 520799, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00207/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00207.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00207/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1491, + "tokens": 373 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00208", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00207.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00206/manifest.json", + "parentStatus": "docs/status/M16-GAP-00206.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00207.md", + "tests/golden/M16-GAP-00206/manifest.json", + "docs/status/M16-GAP-00206.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00206", + "parentTask": "M16-GAP-00205", + "status": "done", + "nextTask": "M16-GAP-00207", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00206 Status", + "status: done", + "task: anim.slot_channels_move_to_new_action operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture has two objects using separate slots in one action. Desktop selects one Action Slot in the Action Editor and runs `ANIM_OT_slot_channels_move_to_new_action`.", + "- The selected slot moves to `WebGapMoveSlotAAction`; the other object remains on the original action. WASM/Main observes both resulting action targets without reader/protocol changes.", + "evidence:" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1789, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 448 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00207.md", + "bytes": 1789, + "lines": 38, + "tokens": 448 + }, + { + "path": "tests/golden/M16-GAP-00206/manifest.json", + "bytes": 2709, + "lines": 29, + "tokens": 678 + }, + { + "path": "docs/status/M16-GAP-00206.md", + "bytes": 1077, + "lines": 19, + "tokens": 270 + } + ], + "sourceTokens": 1938, + "evidenceFiles": 1, + "evidenceBytes": 1491, + "evidenceTokens": 373, + "totalTokens": 2311, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3335, + "serializedContextTokens": 754, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00208/anim-slot-unassign-from-constraint-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00208/anim-slot-unassign-from-constraint-desktop-report.json new file mode 100644 index 00000000..b2eb4804 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00208/anim-slot-unassign-from-constraint-desktop-report.json @@ -0,0 +1,26 @@ +{ + "after": { + "action": "WebGapAnimConstraintSlotAction", + "actionSlot": null, + "actionSlotHandle": 0, + "activeObject": "WebGapAnimConstraintSlotObject", + "constraint": "WebGapActionSlotConstraint" + }, + "before": { + "action": "WebGapAnimConstraintSlotAction", + "actionSlot": "OBWebGapConstraintSlot", + "actionSlotHandle": 929201142, + "activeObject": "WebGapAnimConstraintSlotObject", + "constraint": "WebGapActionSlotConstraint" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00208-operator-anim.slot_unassign_from_constraint.blend", + "fixtureSha256": "517bba0bc6e4dfab4eeafc9d902de560b76360718789a06a6417d9e9f8be7df9", + "mainMutation": "CONSTRAINT_SLOT_UNASSIGNED", + "operation": "ANIM_SLOT_UNASSIGN_FROM_CONSTRAINT_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00208" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00208/anim-slot-unassign-from-constraint-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00208/anim-slot-unassign-from-constraint-local-exact-report.json new file mode 100644 index 00000000..75ff9568 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00208/anim-slot-unassign-from-constraint-local-exact-report.json @@ -0,0 +1,31 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00208", + "operation": "ANIM_SLOT_UNASSIGN_FROM_CONSTRAINT_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00208-operator-anim.slot_unassign_from_constraint.blend", + "sha256": "517bba0bc6e4dfab4eeafc9d902de560b76360718789a06a6417d9e9f8be7df9" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00208/anim-slot-unassign-from-constraint-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "CONSTRAINT_SLOT_UNASSIGNED" + }, + "wasm": { + "status": "EXACT", + "objectId": "object:WebGapAnimConstraintSlotObject", + "constraintName": "WebGapActionSlotConstraint", + "actionId": "action:WebGapAnimConstraintSlotAction", + "actionSlotIdentifier": "OBWebGapConstraintSlot", + "actionSlotHandle": 0, + "actionSlotAssigned": false + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00209" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00208/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00208/manifest.json new file mode 100644 index 00000000..4a43bafd --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00208/manifest.json @@ -0,0 +1,29 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00208", + "parentTask": "M16-GAP-00207", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_SLOT_UNASSIGN_FROM_CONSTRAINT_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { "path": "tests/golden/M16-GAP-00207/manifest.json", "sha256": "d6aa11be23f7a4657161e6a8b9794a2c797880cb5ec598aad588bd5cb5f5e2e5" }, + "fixture": { "path": "tests/files/web/generated/M16-GAP-00208-operator-anim.slot_unassign_from_constraint.blend", "sha256": "517bba0bc6e4dfab4eeafc9d902de560b76360718789a06a6417d9e9f8be7df9" }, + "generator": { "path": "tools/web/generated/M16-GAP-00208.py", "sha256": "47a3962e2c07fc2cef07570c671001c612ece290ed811bc4317143391e99a82d" }, + "desktopChecker": { "path": "tools/web/check-action-slot-unassign-from-constraint-desktop.py", "sha256": "89120dd2da7f4c7f24fb12af02ce94d5929002e0d87cad765c8828999c74afdb" }, + "webChecker": { "path": "tools/web/check-generated-gap.mjs", "sha256": "08cad39c3769c819d5409c58aa666203fcb120bfae5f2d519918fc1a0f0c07e2" }, + "reader": { "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "ccb609241fd6ac86f99e68b0487c92100ddea54e801db3a3cf35aa75719ce8f9" }, + "protocol": { "path": "web/protocol/editor-workflow.ts", "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" }, + "sceneIrProtocol": { "path": "web/protocol/scene-ir.ts", "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" }, + "wasm": { "path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "480b288de461a63807bbb0fff6d36f7a984506b0f8b897682739d7bd9854e0d5" }, + "wasmPublic": { "path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "480b288de461a63807bbb0fff6d36f7a984506b0f8b897682739d7bd9854e0d5" }, + "wasmJs": { "path": "web/app/src/vendor/blender/web_engine.js", "sha256": "5df580ac02c5d8806ffe858b31cccec7692222813d17e4ffdbee207bf346bcb1" }, + "wasmJsPublic": { "path": "web/app/public/vendor/blender/web_engine.js", "sha256": "5df580ac02c5d8806ffe858b31cccec7692222813d17e4ffdbee207bf346bcb1" }, + "desktopReport": { "path": "tests/golden/M16-GAP-00208/anim-slot-unassign-from-constraint-desktop-report.json", "sha256": "a303a5e1060fde95fbaaa0cf6e759cb4af330cf233b65ae1462953960fca51cd" }, + "webReport": { "path": "tests/golden/M16-GAP-00208/anim-slot-unassign-from-constraint-local-exact-report.json", "sha256": "cc7a531c48dc232d822ae6ffcc19f459d44d02976eb3b2f04133435d7a98b158" }, + "status": { "path": "docs/status/M16-GAP-00208.md", "sha256": "957439dbc9be432dbb8187be6e3b2f12a27665e4e344a87897d51008380e7bee" }, + "taskContext": { "path": "tests/golden/M16-GAP-00208/task-context.json", "sha256": "d5bd4bdecaafbb137b89769a001b6e966e47d31059bce66b524384ea3e8a0a01" } + }, + "nextTask": "M16-GAP-00209" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00208/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00208/task-context.json new file mode 100644 index 00000000..29580053 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00208/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00208", + "parentTask": "M16-GAP-00207", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.slot_unassign_from_constraint data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.slot_unassign_from_constraint", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00208.py -- tests/files/web/generated/M16-GAP-00208-operator-anim.slot_unassign_from_constraint.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00208", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00208" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00208.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1968, + "contextRemainingTokens": 491 + }, + "source": { + "bytes": 7936, + "tokens": 1985 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00208.py", + "bytes": 1455, + "tokens": 364 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00208-operator-anim.slot_unassign_from_constraint.blend", + "bytes": 86531, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 234565, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 524982, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00208/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00208.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00208/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1455, + "tokens": 364 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00209", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00208.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00207/manifest.json", + "parentStatus": "docs/status/M16-GAP-00207.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00208.md", + "tests/golden/M16-GAP-00207/manifest.json", + "docs/status/M16-GAP-00207.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00207", + "parentTask": "M16-GAP-00206", + "status": "done", + "nextTask": "M16-GAP-00208", + "artifactCount": 16 + }, + "statusSummary": [ + "# M16-GAP-00207 Status", + "status: done", + "task: anim.slot_new_for_id operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture assigns one Action Slot to `WebGapAnimNewSlotObject`; desktop runs `ANIM_OT_slot_new_for_id` with the animated ID context and duplicates the slot and channelbag.", + "- The WASM/Main reader now selects the assigned `AnimData.slot_handle` channelbag and exposes `slotIdentifier` and `slotCount` on the animation snapshot. The duplicated slot remains stable across save/reopen.", + "evidence:" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1859, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 465 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00208.md", + "bytes": 1859, + "lines": 38, + "tokens": 465 + }, + { + "path": "tests/golden/M16-GAP-00207/manifest.json", + "bytes": 2823, + "lines": 30, + "tokens": 706 + }, + { + "path": "docs/status/M16-GAP-00207.md", + "bytes": 1086, + "lines": 19, + "tokens": 272 + } + ], + "sourceTokens": 1985, + "evidenceFiles": 1, + "evidenceBytes": 1455, + "evidenceTokens": 364, + "totalTokens": 2349, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3373, + "serializedContextTokens": 765, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00209/anim-slot-unassign-from-id-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00209/anim-slot-unassign-from-id-desktop-report.json new file mode 100644 index 00000000..dc210578 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00209/anim-slot-unassign-from-id-desktop-report.json @@ -0,0 +1,58 @@ +{ + "after": { + "action": "WebGapAnimUnassignIdAction", + "actionSlot": null, + "actionSlotHandle": 0, + "activeObject": "WebGapAnimUnassignIdObject", + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"unassign_id_target\"]", + "values": [ + 1.0, + 3.0, + 5.0 + ] + } + ], + "lastSlotIdentifier": "OBWebGapUnassignIdSlot" + }, + "before": { + "action": "WebGapAnimUnassignIdAction", + "actionSlot": "OBWebGapUnassignIdSlot", + "actionSlotHandle": 929201142, + "activeObject": "WebGapAnimUnassignIdObject", + "channels": [ + { + "frames": [ + 1.0, + 3.0, + 5.0 + ], + "index": 0, + "path": "[\"unassign_id_target\"]", + "values": [ + 1.0, + 3.0, + 5.0 + ] + } + ], + "lastSlotIdentifier": "OBWebGapUnassignIdSlot" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00209-operator-anim.slot_unassign_from_id.blend", + "fixtureSha256": "69fb5253dfd28f45ea25f29947d08afb4513e222105b4b8bc94a5b6be05b7238", + "mainMutation": "ID_SLOT_UNASSIGNED", + "operation": "ANIM_SLOT_UNASSIGN_FROM_ID_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00209" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00209/anim-slot-unassign-from-id-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00209/anim-slot-unassign-from-id-local-exact-report.json new file mode 100644 index 00000000..80216a48 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00209/anim-slot-unassign-from-id-local-exact-report.json @@ -0,0 +1,31 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00209", + "operation": "ANIM_SLOT_UNASSIGN_FROM_ID_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00209-operator-anim.slot_unassign_from_id.blend", + "sha256": "69fb5253dfd28f45ea25f29947d08afb4513e222105b4b8bc94a5b6be05b7238" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00209/anim-slot-unassign-from-id-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "ID_SLOT_UNASSIGNED" + }, + "wasm": { + "status": "EXACT", + "animationId": "action:WebGapAnimUnassignIdAction:object:WebGapAnimUnassignIdObject", + "slotIdentifier": "OBWebGapUnassignIdSlot", + "slotHandle": 0, + "slotAssigned": false, + "slotCount": 1, + "channels": 1 + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00210" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00209/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00209/manifest.json new file mode 100644 index 00000000..4c8dd673 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00209/manifest.json @@ -0,0 +1,29 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00209", + "parentTask": "M16-GAP-00208", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_SLOT_UNASSIGN_FROM_ID_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { "path": "tests/golden/M16-GAP-00208/manifest.json", "sha256": "06fac2d9fbe04f6308ce39377fd1360890604bd26d30939339dc42e86035cd55" }, + "fixture": { "path": "tests/files/web/generated/M16-GAP-00209-operator-anim.slot_unassign_from_id.blend", "sha256": "69fb5253dfd28f45ea25f29947d08afb4513e222105b4b8bc94a5b6be05b7238" }, + "generator": { "path": "tools/web/generated/M16-GAP-00209.py", "sha256": "45e9b34637496caa72e521214539d9ef60646191e90dbed5bcd76c3fa7366701" }, + "desktopChecker": { "path": "tools/web/check-action-slot-unassign-from-id-desktop.py", "sha256": "3166defd69de7fb19a52c7b9646df52da9efb330c27037e77c4d34f92c6b43f5" }, + "webChecker": { "path": "tools/web/check-generated-gap.mjs", "sha256": "bd7f77cde032ee873ddf5ebb39b20b748067e0352bdb7a682011a4017574a7e6" }, + "reader": { "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "eede4160a817ce6ef82f14035a4a0f00c381acdbd150474d6e71c2c75d7f15c5" }, + "protocol": { "path": "web/protocol/editor-workflow.ts", "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" }, + "sceneIrProtocol": { "path": "web/protocol/scene-ir.ts", "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" }, + "wasm": { "path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "68cf2a8fb0158c4375c68d8ca9f98b04fcb8acf5f109cf63c81a551ec5c96c3f" }, + "wasmPublic": { "path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "68cf2a8fb0158c4375c68d8ca9f98b04fcb8acf5f109cf63c81a551ec5c96c3f" }, + "wasmJs": { "path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" }, + "wasmJsPublic": { "path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" }, + "desktopReport": { "path": "tests/golden/M16-GAP-00209/anim-slot-unassign-from-id-desktop-report.json", "sha256": "12d1d6492c6d682a519045cc840c0e8f8b212b9eca9f0bdfa15536dc4602f17f" }, + "webReport": { "path": "tests/golden/M16-GAP-00209/anim-slot-unassign-from-id-local-exact-report.json", "sha256": "e42355c5cd82a7b06e5560312869fec9eed33ba7db613668c7920b3363901122" }, + "status": { "path": "docs/status/M16-GAP-00209.md", "sha256": "9c436780681f0309420bd6c3e9def7e970e483175b4183e691320d5dd73cc108" }, + "taskContext": { "path": "tests/golden/M16-GAP-00209/task-context.json", "sha256": "c6c9e58a950aee3230dc6a2a04f1ec5b8273caf2a4cf34cf86006193eaf4f78e" } + }, + "nextTask": "M16-GAP-00210" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00209/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00209/task-context.json new file mode 100644 index 00000000..58a3fec5 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00209/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00209", + "parentTask": "M16-GAP-00208", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.slot_unassign_from_id data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.slot_unassign_from_id", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00209.py -- tests/files/web/generated/M16-GAP-00209-operator-anim.slot_unassign_from_id.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00209", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00209" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00209.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1890, + "contextRemainingTokens": 471 + }, + "source": { + "bytes": 8014, + "tokens": 2005 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00209.py", + "bytes": 1506, + "tokens": 377 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00209-operator-anim.slot_unassign_from_id.blend", + "bytes": 86803, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 234900, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 529212, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00209/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00209.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00209/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1506, + "tokens": 377 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00210", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00209.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00208/manifest.json", + "parentStatus": "docs/status/M16-GAP-00208.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00209.md", + "tests/golden/M16-GAP-00208/manifest.json", + "docs/status/M16-GAP-00208.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00208", + "parentTask": "M16-GAP-00207", + "status": "done", + "nextTask": "M16-GAP-00209", + "artifactCount": 16 + }, + "statusSummary": [ + "# M16-GAP-00208 Status", + "status: done", + "task: anim.slot_unassign_from_constraint operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture gives `WebGapAnimConstraintSlotObject` an Action constraint with `WebGapAnimConstraintSlotAction` and one assigned `OBWebGapConstraintSlot`.", + "- Desktop runs `ANIM_OT_slot_unassign_from_constraint` with the constraint context pointer. The reader exposes the constraint's action, slot identifier, handle, and assigned state in the node snapshot.", + "evidence:" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1819, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 455 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00209.md", + "bytes": 1819, + "lines": 38, + "tokens": 455 + }, + { + "path": "tests/golden/M16-GAP-00208/manifest.json", + "bytes": 2893, + "lines": 30, + "tokens": 724 + }, + { + "path": "docs/status/M16-GAP-00208.md", + "bytes": 1134, + "lines": 19, + "tokens": 284 + } + ], + "sourceTokens": 2005, + "evidenceFiles": 1, + "evidenceBytes": 1506, + "evidenceTokens": 377, + "totalTokens": 2382, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3406, + "serializedContextTokens": 759, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00210/anim-slot-unassign-from-nla-strip-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00210/anim-slot-unassign-from-nla-strip-desktop-report.json new file mode 100644 index 00000000..35991295 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00210/anim-slot-unassign-from-nla-strip-desktop-report.json @@ -0,0 +1,32 @@ +{ + "after": { + "action": "WebGapAnimNlaSlotAction", + "actionSlot": null, + "actionSlotHandle": 0, + "activeObject": "WebGapAnimNlaSlotObject", + "frameEnd": 5.0, + "frameStart": 1.0, + "lastSlotIdentifier": "OBWebGapNlaSlot", + "strip": "WebGapNlaSlotStrip" + }, + "before": { + "action": "WebGapAnimNlaSlotAction", + "actionSlot": "OBWebGapNlaSlot", + "actionSlotHandle": 929201142, + "activeObject": "WebGapAnimNlaSlotObject", + "frameEnd": 5.0, + "frameStart": 1.0, + "lastSlotIdentifier": "OBWebGapNlaSlot", + "strip": "WebGapNlaSlotStrip" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00210-operator-anim.slot_unassign_from_nla_strip.blend", + "fixtureSha256": "4740a95b74bf2d4f71af7019158ee116643bf6cb315ff6a31717fb6894c3f2e5", + "mainMutation": "NLA_SLOT_UNASSIGNED", + "operation": "ANIM_SLOT_UNASSIGN_FROM_NLA_STRIP_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00210" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00210/anim-slot-unassign-from-nla-strip-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00210/anim-slot-unassign-from-nla-strip-local-exact-report.json new file mode 100644 index 00000000..233b5c24 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00210/anim-slot-unassign-from-nla-strip-local-exact-report.json @@ -0,0 +1,31 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00210", + "operation": "ANIM_SLOT_UNASSIGN_FROM_NLA_STRIP_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00210-operator-anim.slot_unassign_from_nla_strip.blend", + "sha256": "4740a95b74bf2d4f71af7019158ee116643bf6cb315ff6a31717fb6894c3f2e5" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00210/anim-slot-unassign-from-nla-strip-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "NLA_SLOT_UNASSIGNED" + }, + "wasm": { + "status": "EXACT", + "trackId": "nla-track:object:WebGapAnimNlaSlotObject:0", + "stripId": "WebGapNlaSlotStrip", + "actionId": "action:WebGapAnimNlaSlotAction:object:WebGapAnimNlaSlotObject", + "actionSlotIdentifier": "OBWebGapNlaSlot", + "actionSlotHandle": 0, + "actionSlotAssigned": false + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00211" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00210/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00210/manifest.json new file mode 100644 index 00000000..62857d13 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00210/manifest.json @@ -0,0 +1,29 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00210", + "parentTask": "M16-GAP-00209", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_SLOT_UNASSIGN_FROM_NLA_STRIP_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { "path": "tests/golden/M16-GAP-00209/manifest.json", "sha256": "1dc0a49c9b7eafeb7a12725c5dabe99e475c6f8b1ce46458d0088f88f8ad8768" }, + "fixture": { "path": "tests/files/web/generated/M16-GAP-00210-operator-anim.slot_unassign_from_nla_strip.blend", "sha256": "4740a95b74bf2d4f71af7019158ee116643bf6cb315ff6a31717fb6894c3f2e5" }, + "generator": { "path": "tools/web/generated/M16-GAP-00210.py", "sha256": "82ae2a1e60b7a8f1adfa9fd0451dda47daabba420bc658177172fe3080aaadd1" }, + "desktopChecker": { "path": "tools/web/check-action-slot-unassign-from-nla-strip-desktop.py", "sha256": "dadd0204062fb1bb54de6b2cf998e4313ed7dee32b201467ef3327200ba04685" }, + "webChecker": { "path": "tools/web/check-generated-gap.mjs", "sha256": "a3e43ec395826f4448b48fc3af752f1a58dc58955c4b4570a6f4b6512ada22a3" }, + "reader": { "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "774069a85bf5c59e4bac7be4318db36cf1684e925b783505dbf03dfe2abcbe43" }, + "protocol": { "path": "web/protocol/editor-workflow.ts", "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" }, + "sceneIrProtocol": { "path": "web/protocol/scene-ir.ts", "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" }, + "wasm": { "path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "e57225849e65c6f56206efc67bdc7aaf1bf695205336f7d0eff9b880ece37732" }, + "wasmPublic": { "path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "e57225849e65c6f56206efc67bdc7aaf1bf695205336f7d0eff9b880ece37732" }, + "wasmJs": { "path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" }, + "wasmJsPublic": { "path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" }, + "desktopReport": { "path": "tests/golden/M16-GAP-00210/anim-slot-unassign-from-nla-strip-desktop-report.json", "sha256": "35c89ff2c01b3887949572d83f27665b76eee49c5486e40b2c1b9e649916c9a2" }, + "webReport": { "path": "tests/golden/M16-GAP-00210/anim-slot-unassign-from-nla-strip-local-exact-report.json", "sha256": "d83b48f105f430cb7bbc2151b837fa589944a7c8d36a6156269ce4552aea5d41" }, + "status": { "path": "docs/status/M16-GAP-00210.md", "sha256": "1a2fb7129a562a6ca35ae61159d1cf28c3069be6a121d738d4b621138033e8ab" }, + "taskContext": { "path": "tests/golden/M16-GAP-00210/task-context.json", "sha256": "8d6bebc0df33dd02879078f9d824883255a290c2d9b72609bbecf689e3b49c66" } + }, + "nextTask": "M16-GAP-00211" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00210/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00210/task-context.json new file mode 100644 index 00000000..e955a6ec --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00210/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00210", + "parentTask": "M16-GAP-00209", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.slot_unassign_from_nla_strip data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.slot_unassign_from_nla_strip", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00210.py -- tests/files/web/generated/M16-GAP-00210-operator-anim.slot_unassign_from_nla_strip.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00210", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00210" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00210.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1921, + "contextRemainingTokens": 479 + }, + "source": { + "bytes": 7983, + "tokens": 1997 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00210.py", + "bytes": 1712, + "tokens": 428 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00210-operator-anim.slot_unassign_from_nla_strip.blend", + "bytes": 86885, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 235316, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 533375, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00210/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00210.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00210/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1712, + "tokens": 428 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00211", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00210.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00209/manifest.json", + "parentStatus": "docs/status/M16-GAP-00209.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00210.md", + "tests/golden/M16-GAP-00209/manifest.json", + "docs/status/M16-GAP-00209.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00209", + "parentTask": "M16-GAP-00208", + "status": "done", + "nextTask": "M16-GAP-00210", + "artifactCount": 16 + }, + "statusSummary": [ + "# M16-GAP-00209 Status", + "status: done", + "task: anim.slot_unassign_from_id operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture assigns `OBWebGapUnassignIdSlot` to `WebGapAnimUnassignIdObject` through `WebGapAnimUnassignIdAction` and keys one custom property.", + "- Desktop runs `ANIM_OT_slot_unassign_from_id` with the animated ID context. The reader preserves the Action animation and exposes the retained slot identifier plus assigned/handle state.", + "evidence:" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1854, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 464 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00210.md", + "bytes": 1854, + "lines": 38, + "tokens": 464 + }, + { + "path": "tests/golden/M16-GAP-00209/manifest.json", + "bytes": 2853, + "lines": 30, + "tokens": 714 + }, + { + "path": "docs/status/M16-GAP-00209.md", + "bytes": 1108, + "lines": 19, + "tokens": 277 + } + ], + "sourceTokens": 1997, + "evidenceFiles": 1, + "evidenceBytes": 1712, + "evidenceTokens": 428, + "totalTokens": 2425, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3449, + "serializedContextTokens": 764, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00211/anim-start-frame-set-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00211/anim-start-frame-set-desktop-report.json new file mode 100644 index 00000000..90779a6e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00211/anim-start-frame-set-desktop-report.json @@ -0,0 +1,17 @@ +{ + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00211-operator-anim.start_frame_set.blend", + "fixtureSha256": "d2f5cf3f5c3603b0d811c9df3581c10b5c28e3f80adeb30319b079bd95567a36", + "frame": { + "current": 42, + "end": 120, + "start": 42 + }, + "mainMutation": "FRAME_START_SET", + "operation": "ANIM_START_FRAME_SET_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00211" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00211/anim-start-frame-set-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00211/anim-start-frame-set-local-exact-report.json new file mode 100644 index 00000000..65f9376e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00211/anim-start-frame-set-local-exact-report.json @@ -0,0 +1,30 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00211", + "operation": "ANIM_START_FRAME_SET_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00211-operator-anim.start_frame_set.blend", + "sha256": "d2f5cf3f5c3603b0d811c9df3581c10b5c28e3f80adeb30319b079bd95567a36" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00211/anim-start-frame-set-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "FRAME_START_SET" + }, + "wasm": { + "status": "EXACT", + "frame": { + "current": 42, + "end": 120, + "start": 42 + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00212" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00211/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00211/manifest.json new file mode 100644 index 00000000..357ab19c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00211/manifest.json @@ -0,0 +1,29 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00211", + "parentTask": "M16-GAP-00210", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_START_FRAME_SET_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { "path": "tests/golden/M16-GAP-00210/manifest.json", "sha256": "f7881ee15006bbe0788238d285b92519a468b3fd833c8c07764252486b2587a6" }, + "fixture": { "path": "tests/files/web/generated/M16-GAP-00211-operator-anim.start_frame_set.blend", "sha256": "d2f5cf3f5c3603b0d811c9df3581c10b5c28e3f80adeb30319b079bd95567a36" }, + "generator": { "path": "tools/web/generated/M16-GAP-00211.py", "sha256": "587d7d78764c9f107677dccd537f0265ca0c340e25127938fea64e99b33fff38" }, + "desktopChecker": { "path": "tools/web/check-action-start-frame-set-desktop.py", "sha256": "a4957a066065a6e4ae474e1fb700fd97179dbc12472fb2ff19f7d5048bbcd3d9" }, + "webChecker": { "path": "tools/web/check-generated-gap.mjs", "sha256": "46180c0ff4f01bfd59295eb2993cec152644a8afa8861c43d583079ea758791e" }, + "reader": { "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "774069a85bf5c59e4bac7be4318db36cf1684e925b783505dbf03dfe2abcbe43" }, + "protocol": { "path": "web/protocol/editor-workflow.ts", "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" }, + "sceneIrProtocol": { "path": "web/protocol/scene-ir.ts", "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" }, + "wasm": { "path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "e57225849e65c6f56206efc67bdc7aaf1bf695205336f7d0eff9b880ece37732" }, + "wasmPublic": { "path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "e57225849e65c6f56206efc67bdc7aaf1bf695205336f7d0eff9b880ece37732" }, + "wasmJs": { "path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" }, + "wasmJsPublic": { "path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" }, + "desktopReport": { "path": "tests/golden/M16-GAP-00211/anim-start-frame-set-desktop-report.json", "sha256": "b17a936ea363e216aa819cd90c79669a8f95c0c9cdb6aae74c5e24df13a4e240" }, + "webReport": { "path": "tests/golden/M16-GAP-00211/anim-start-frame-set-local-exact-report.json", "sha256": "b145f06715d9d6ef03a304e79d9cf635912db731d00991cd3be4dd56a6cc1a71" }, + "status": { "path": "docs/status/M16-GAP-00211.md", "sha256": "73b13a7c83a37e2edbd5498035987f542538d49650812b4cbb8ed6b27be85cd4" }, + "taskContext": { "path": "tests/golden/M16-GAP-00211/task-context.json", "sha256": "910687fefc3ca3b8661d437c62816ebb19c3c263ec745ec70dcf039dfe0fcc43" } + }, + "nextTask": "M16-GAP-00212" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00211/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00211/task-context.json new file mode 100644 index 00000000..e11dfcf4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00211/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00211", + "parentTask": "M16-GAP-00210", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.start_frame_set data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.start_frame_set", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00211.py -- tests/files/web/generated/M16-GAP-00211-operator-anim.start_frame_set.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00211", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00211" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00211.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1973, + "contextRemainingTokens": 492 + }, + "source": { + "bytes": 7931, + "tokens": 1984 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00211.py", + "bytes": 590, + "tokens": 148 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00211-operator-anim.start_frame_set.blend", + "bytes": 85586, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 235316, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 536647, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00211/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00211.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00211/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 590, + "tokens": 148 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00212", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00211.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00210/manifest.json", + "parentStatus": "docs/status/M16-GAP-00210.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00211.md", + "tests/golden/M16-GAP-00210/manifest.json", + "docs/status/M16-GAP-00210.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00210", + "parentTask": "M16-GAP-00209", + "status": "done", + "nextTask": "M16-GAP-00211", + "artifactCount": 16 + }, + "statusSummary": [ + "# M16-GAP-00210 Status", + "status: done", + "task: anim.slot_unassign_from_nla_strip operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains `WebGapNlaSlotTrack` with `WebGapNlaSlotStrip` referencing `WebGapAnimNlaSlotAction` and `OBWebGapNlaSlot`.", + "- Desktop runs `ANIM_OT_slot_unassign_from_nla_strip` with the NLA strip context pointer. The reader exposes NLA strip slot identifier, handle, and assigned state.", + "evidence:" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1789, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 448 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00211.md", + "bytes": 1789, + "lines": 38, + "tokens": 448 + }, + { + "path": "tests/golden/M16-GAP-00210/manifest.json", + "bytes": 2888, + "lines": 30, + "tokens": 722 + }, + { + "path": "docs/status/M16-GAP-00210.md", + "bytes": 1086, + "lines": 19, + "tokens": 272 + } + ], + "sourceTokens": 1984, + "evidenceFiles": 1, + "evidenceBytes": 590, + "evidenceTokens": 148, + "totalTokens": 2132, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3156, + "serializedContextTokens": 754, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00212/anim-update-animated-transform-constraints-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00212/anim-update-animated-transform-constraints-desktop-report.json new file mode 100644 index 00000000..f6bbc4c6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00212/anim-update-animated-transform-constraints-desktop-report.json @@ -0,0 +1,53 @@ +{ + "after": { + "action": "WebGapAnimatedTransformConstraintAction", + "channels": [ + { + "frames": [ + 1.0, + 10.0 + ], + "index": 0, + "path": "constraints[\"WebGapAnimatedTransformConstraint\"].from_min_x_rot", + "values": [ + -30.0, + 60.0 + ] + } + ], + "constraint": "WebGapAnimatedTransformConstraint", + "mapFrom": "ROTATION", + "object": "WebGapAnimatedTransformConstraintObject" + }, + "before": { + "action": "WebGapAnimatedTransformConstraintAction", + "channels": [ + { + "frames": [ + 1.0, + 10.0 + ], + "index": 0, + "path": "constraints[\"WebGapAnimatedTransformConstraint\"].from_min_x", + "values": [ + -30.0, + 60.0 + ] + } + ], + "constraint": "WebGapAnimatedTransformConstraint", + "mapFrom": "ROTATION", + "object": "WebGapAnimatedTransformConstraintObject" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00212-operator-anim.update_animated_transform_constraints.blend", + "fixtureSha256": "116684a811bdc591c554c5a8f259d995ca9ba49b102e8ccb79f1a03741fd28f2", + "mainMutation": "TRANSFORM_CONSTRAINT_PATHS_UPDATED", + "operation": "ANIM_UPDATE_ANIMATED_TRANSFORM_CONSTRAINTS_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00212", + "useConvertToRadians": true +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00212/anim-update-animated-transform-constraints-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00212/anim-update-animated-transform-constraints-local-exact-report.json new file mode 100644 index 00000000..c7258db3 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00212/anim-update-animated-transform-constraints-local-exact-report.json @@ -0,0 +1,39 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00212", + "operation": "ANIM_UPDATE_ANIMATED_TRANSFORM_CONSTRAINTS_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00212-operator-anim.update_animated_transform_constraints.blend", + "sha256": "116684a811bdc591c554c5a8f259d995ca9ba49b102e8ccb79f1a03741fd28f2" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00212/anim-update-animated-transform-constraints-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "TRANSFORM_CONSTRAINT_PATHS_UPDATED", + "useConvertToRadians": true + }, + "wasm": { + "status": "EXACT", + "animationId": "action:WebGapAnimatedTransformConstraintAction:object:WebGapAnimatedTransformConstraintObject", + "channelPath": "constraints[\"WebGapAnimatedTransformConstraint\"].from_min_x_rot[0]", + "keyframes": [ + { + "frame": 1, + "value": -30 + }, + { + "frame": 10, + "value": 60 + } + ], + "constraintTypeCode": 19 + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00213" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00212/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00212/manifest.json new file mode 100644 index 00000000..af728481 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00212/manifest.json @@ -0,0 +1,29 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00212", + "parentTask": "M16-GAP-00211", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_UPDATE_ANIMATED_TRANSFORM_CONSTRAINTS_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { "path": "tests/golden/M16-GAP-00211/manifest.json", "sha256": "47b0ed1ca1801bccd86b4c829c6d95ed6b99ce63131c9a78e27fb5681eedb8e2" }, + "fixture": { "path": "tests/files/web/generated/M16-GAP-00212-operator-anim.update_animated_transform_constraints.blend", "sha256": "116684a811bdc591c554c5a8f259d995ca9ba49b102e8ccb79f1a03741fd28f2" }, + "generator": { "path": "tools/web/generated/M16-GAP-00212.py", "sha256": "d38cdea9f5584506f0b3ac87fa734da388fd891c81a0438031e5bb881ffd77f5" }, + "desktopChecker": { "path": "tools/web/check-action-update-animated-transform-constraints-desktop.py", "sha256": "3417ba9f8ef8d086457623fe2b69be2de5d3983a4a7b3be57450b7083889ba5f" }, + "webChecker": { "path": "tools/web/check-generated-gap.mjs", "sha256": "397273b4da506523a54ea295fcf47b3418c2d2df754edcc3e0f533699c00e567" }, + "reader": { "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "774069a85bf5c59e4bac7be4318db36cf1684e925b783505dbf03dfe2abcbe43" }, + "protocol": { "path": "web/protocol/editor-workflow.ts", "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" }, + "sceneIrProtocol": { "path": "web/protocol/scene-ir.ts", "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" }, + "wasm": { "path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "e57225849e65c6f56206efc67bdc7aaf1bf695205336f7d0eff9b880ece37732" }, + "wasmPublic": { "path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "e57225849e65c6f56206efc67bdc7aaf1bf695205336f7d0eff9b880ece37732" }, + "wasmJs": { "path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" }, + "wasmJsPublic": { "path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" }, + "desktopReport": { "path": "tests/golden/M16-GAP-00212/anim-update-animated-transform-constraints-desktop-report.json", "sha256": "6e486664dd967eec8f93569db555e23400fc147d40d172b7c1af19188e7e25e1" }, + "webReport": { "path": "tests/golden/M16-GAP-00212/anim-update-animated-transform-constraints-local-exact-report.json", "sha256": "98592f2cfe53ea6f2d59b34203211b0a45d3969ff546857313e2463f7f8e7b57" }, + "status": { "path": "docs/status/M16-GAP-00212.md", "sha256": "6007b1fe88b4bc38d416bf092d9becd2a8e30a50a56f12f19b6c62ee515a34af" }, + "taskContext": { "path": "tests/golden/M16-GAP-00212/task-context.json", "sha256": "b1e138449cd81cc88bfe78855410f9b640db035bbfc59bc21fd750f5887ca3e6" } + }, + "nextTask": "M16-GAP-00213" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00212/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00212/task-context.json new file mode 100644 index 00000000..511c4524 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00212/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00212", + "parentTask": "M16-GAP-00211", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.update_animated_transform_constraints data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.update_animated_transform_constraints", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00212.py -- tests/files/web/generated/M16-GAP-00212-operator-anim.update_animated_transform_constraints.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00212", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00212" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00212.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1986, + "contextRemainingTokens": 496 + }, + "source": { + "bytes": 7918, + "tokens": 1980 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00212.py", + "bytes": 1600, + "tokens": 400 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00212-operator-anim.update_animated_transform_constraints.blend", + "bytes": 86923, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 235316, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 541256, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00212/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00212.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00212/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1600, + "tokens": 400 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00213", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00212.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00211/manifest.json", + "parentStatus": "docs/status/M16-GAP-00211.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00212.md", + "tests/golden/M16-GAP-00211/manifest.json", + "docs/status/M16-GAP-00211.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00211", + "parentTask": "M16-GAP-00210", + "status": "done", + "nextTask": "M16-GAP-00212", + "artifactCount": 16 + }, + "statusSummary": [ + "# M16-GAP-00211 Status", + "status: done", + "task: anim.start_frame_set operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal scene starts at frame 42 with a scene range of 1-120. The foreground animation-area context invokes `ANIM_OT_start_frame_set` (`poll=true`, `FINISHED`) and sets the scene start frame to 42.", + "- The existing Main reader exposes the same scene frame tuple through `Scene.r.cfra`, `Scene.r.sfra`, and `Scene.r.efra`; no unrelated data-block, editor, or browser behavior was changed.", + "evidence:" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1899, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 475 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00212.md", + "bytes": 1899, + "lines": 38, + "tokens": 475 + }, + { + "path": "tests/golden/M16-GAP-00211/manifest.json", + "bytes": 2823, + "lines": 30, + "tokens": 706 + }, + { + "path": "docs/status/M16-GAP-00211.md", + "bytes": 1028, + "lines": 19, + "tokens": 257 + } + ], + "sourceTokens": 1980, + "evidenceFiles": 1, + "evidenceBytes": 1600, + "evidenceTokens": 400, + "totalTokens": 2380, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3404, + "serializedContextTokens": 771, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00213/anim-version-bone-hide-property-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00213/anim-version-bone-hide-property-desktop-report.json new file mode 100644 index 00000000..b687265f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00213/anim-version-bone-hide-property-desktop-report.json @@ -0,0 +1,92 @@ +{ + "after": { + "active": "WebGapVersionBoneHideObject", + "armatureAction": "WebGapVersionBoneHideArmatureAction", + "armatureChannels": [ + { + "frames": [ + 1.0, + 10.0 + ], + "index": 0, + "path": "bones[\"WebGapVersionBoneHideBone\"].hide", + "values": [ + 0.0, + 1.0 + ] + } + ], + "objectAction": "WebGapVersionBoneHideObjectAction", + "objectChannels": [ + { + "frames": [ + 1.0, + 10.0 + ], + "index": 0, + "path": "[\"version_anchor\"]", + "values": [ + 0.0, + 1.0 + ] + }, + { + "frames": [ + 1.0, + 10.0 + ], + "index": 0, + "path": "pose.bones[\"WebGapVersionBoneHideBone\"].hide", + "values": [ + 0.0, + 1.0 + ] + } + ], + "selected": true + }, + "before": { + "active": "WebGapVersionBoneHideObject", + "armatureAction": "WebGapVersionBoneHideArmatureAction", + "armatureChannels": [ + { + "frames": [ + 1.0, + 10.0 + ], + "index": 0, + "path": "bones[\"WebGapVersionBoneHideBone\"].hide", + "values": [ + 0.0, + 1.0 + ] + } + ], + "objectAction": "WebGapVersionBoneHideObjectAction", + "objectChannels": [ + { + "frames": [ + 1.0, + 10.0 + ], + "index": 0, + "path": "[\"version_anchor\"]", + "values": [ + 0.0, + 1.0 + ] + } + ], + "selected": true + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00213-operator-anim.version_bone_hide_property.blend", + "fixtureSha256": "5455d4f3f44ccc40db7ac379d5c6d4bbb099c3861a348237a1541697597956c1", + "mainMutation": "BONE_HIDE_FCURVE_MOVED_TO_OBJECT_ACTION", + "operation": "ANIM_VERSION_BONE_HIDE_PROPERTY_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00213" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00213/anim-version-bone-hide-property-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00213/anim-version-bone-hide-property-local-exact-report.json new file mode 100644 index 00000000..d3df16b0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00213/anim-version-bone-hide-property-local-exact-report.json @@ -0,0 +1,38 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00213", + "operation": "ANIM_VERSION_BONE_HIDE_PROPERTY_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00213-operator-anim.version_bone_hide_property.blend", + "sha256": "5455d4f3f44ccc40db7ac379d5c6d4bbb099c3861a348237a1541697597956c1" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00213/anim-version-bone-hide-property-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "BONE_HIDE_FCURVE_MOVED_TO_OBJECT_ACTION" + }, + "wasm": { + "status": "EXACT", + "objectAnimationId": "action:WebGapVersionBoneHideObjectAction:object:WebGapVersionBoneHideObject", + "copiedChannelPath": "pose.bones[\"WebGapVersionBoneHideBone\"].hide[0]", + "copiedKeyframes": [ + { + "frame": 1, + "value": 0 + }, + { + "frame": 10, + "value": 1 + } + ], + "armatureAnimationId": "action:WebGapVersionBoneHideArmatureAction:armature:WebGapVersionBoneHideArmature" + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00214" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00213/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00213/manifest.json new file mode 100644 index 00000000..55892826 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00213/manifest.json @@ -0,0 +1,29 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00213", + "parentTask": "M16-GAP-00212", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_VERSION_BONE_HIDE_PROPERTY_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { "path": "tests/golden/M16-GAP-00212/manifest.json", "sha256": "b0816225b3c22bd80b9a89d51c7ea57d1723149eea9859a017019d6ba0953673" }, + "fixture": { "path": "tests/files/web/generated/M16-GAP-00213-operator-anim.version_bone_hide_property.blend", "sha256": "5455d4f3f44ccc40db7ac379d5c6d4bbb099c3861a348237a1541697597956c1" }, + "generator": { "path": "tools/web/generated/M16-GAP-00213.py", "sha256": "f5e1eefa9c012d091f413ec771f6dab8dac496f2d4481e33fa288a61a6ef4c86" }, + "desktopChecker": { "path": "tools/web/check-action-version-bone-hide-property-desktop.py", "sha256": "6b03a7faf073e652eb260a01068dd7d167e6ff88e46f75dfa9e1445edda1ab29" }, + "webChecker": { "path": "tools/web/check-generated-gap.mjs", "sha256": "7cdd6a343dc7ab3e0aa7b109a3f770c76a863980520293c48d2cf1f7e28b5625" }, + "reader": { "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "774069a85bf5c59e4bac7be4318db36cf1684e925b783505dbf03dfe2abcbe43" }, + "protocol": { "path": "web/protocol/editor-workflow.ts", "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" }, + "sceneIrProtocol": { "path": "web/protocol/scene-ir.ts", "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" }, + "wasm": { "path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "e57225849e65c6f56206efc67bdc7aaf1bf695205336f7d0eff9b880ece37732" }, + "wasmPublic": { "path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "e57225849e65c6f56206efc67bdc7aaf1bf695205336f7d0eff9b880ece37732" }, + "wasmJs": { "path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" }, + "wasmJsPublic": { "path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" }, + "desktopReport": { "path": "tests/golden/M16-GAP-00213/anim-version-bone-hide-property-desktop-report.json", "sha256": "35c3ee64110db16c946056cd3c3044321d6101a4ee68c2fd68038cbab4576616" }, + "webReport": { "path": "tests/golden/M16-GAP-00213/anim-version-bone-hide-property-local-exact-report.json", "sha256": "117e80e3ee5caf95979201d85b650de27967196242bf6f5656d24c3cec973d85" }, + "status": { "path": "docs/status/M16-GAP-00213.md", "sha256": "ee58d81b60550da7abf3a6f6a99cf53d33e5570fcaa7c49bed46db66ecbb9b4d" }, + "taskContext": { "path": "tests/golden/M16-GAP-00213/task-context.json", "sha256": "a9cbb2cffc15ad50810b4e806492a6dda84b30757f085c17a0c754c4160c9868" } + }, + "nextTask": "M16-GAP-00214" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00213/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00213/task-context.json new file mode 100644 index 00000000..0a28e253 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00213/task-context.json @@ -0,0 +1,182 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00213", + "parentTask": "M16-GAP-00212", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.version_bone_hide_property data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.version_bone_hide_property", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00213.py -- tests/files/web/generated/M16-GAP-00213-operator-anim.version_bone_hide_property.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00213", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00213" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1703, + "contextRemainingTokens": 425 + }, + "source": { + "bytes": 8201, + "tokens": 2051 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00213-operator-anim.version_bone_hide_property.blend", + "bytes": 86812, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/generated/M16-GAP-00213.py", + "bytes": 2312, + "reason": "CONTEXT_REMAINING_SPACE" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 235316, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 545613, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00213/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00213.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00213/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00214", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00213.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00212/manifest.json", + "parentStatus": "docs/status/M16-GAP-00212.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00213.md", + "tests/golden/M16-GAP-00212/manifest.json", + "docs/status/M16-GAP-00212.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00212", + "parentTask": "M16-GAP-00211", + "status": "done", + "nextTask": "M16-GAP-00213", + "artifactCount": 16 + }, + "statusSummary": [ + "# M16-GAP-00212 Status", + "status: done", + "task: anim.update_animated_transform_constraints operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains a mesh object with a `TRANSFORM` constraint mapped from rotation and one animated legacy `from_min_x` F-curve.", + "- Desktop runs `ANIM_OT_update_animated_transform_constraints(use_convert_to_radians=true)` (`poll=true`, `FINISHED`) and rewrites the channel path to `from_min_x_rot`.", + "- The existing Main reader exposes the rewritten Action channel and Transform constraint metadata; no unrelated data-block, editor, or browser behavior was changed." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1844, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 461 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00213.md", + "bytes": 1844, + "lines": 38, + "tokens": 461 + }, + { + "path": "tests/golden/M16-GAP-00212/manifest.json", + "bytes": 2933, + "lines": 30, + "tokens": 734 + }, + { + "path": "docs/status/M16-GAP-00212.md", + "bytes": 1256, + "lines": 20, + "tokens": 314 + } + ], + "sourceTokens": 2051, + "evidenceFiles": 0, + "evidenceBytes": 0, + "evidenceTokens": 0, + "totalTokens": 2051, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3075, + "serializedContextTokens": 727, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00214/anim-view-curve-in-graph-editor-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00214/anim-view-curve-in-graph-editor-desktop-report.json new file mode 100644 index 00000000..b28a6d78 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00214/anim-view-curve-in-graph-editor-desktop-report.json @@ -0,0 +1,94 @@ +{ + "after": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 10.0 + ], + "index": 0, + "path": "[\"curve_target\"]", + "selected": true, + "values": [ + -3.0, + 7.0 + ] + } + ], + "name": "WebGapAnimViewCurveGraphEditorAction" + }, + "active": true, + "selected": true, + "value": 1.170096, + "view": { + "areaType": "GRAPH_EDITOR", + "mode": "FCURVES", + "view2d": { + "cur": { + "xmax": 1.5, + "xmin": 0.5, + "ymax": -2.505917, + "ymin": -3.505917 + }, + "mask": { + "xmax": 537, + "xmin": 0, + "ymax": 25, + "ymin": 0 + } + } + } + }, + "before": { + "action": { + "channels": [ + { + "frames": [ + 1.0, + 10.0 + ], + "index": 0, + "path": "[\"curve_target\"]", + "selected": true, + "values": [ + -3.0, + 7.0 + ] + } + ], + "name": "WebGapAnimViewCurveGraphEditorAction" + }, + "active": true, + "selected": true, + "value": 1.170096, + "view": { + "areaType": "GRAPH_EDITOR", + "mode": "FCURVES", + "view2d": { + "cur": { + "xmax": 13.0, + "xmin": -2.0, + "ymax": 7.5, + "ymin": -3.5 + }, + "mask": { + "xmax": 537, + "xmin": 0, + "ymax": 25, + "ymin": 0 + } + } + } + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00214-operator-anim.view_curve_in_graph_editor.blend", + "fixtureSha256": "405825a29d3bf69cd85e461bf0c1a727631febe354b11ed1fd722d72f0faaea2", + "mainMutation": "GRAPH_VIEW_FRAMED", + "operation": "ANIM_VIEW_CURVE_IN_GRAPH_EDITOR_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00214" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00214/anim-view-curve-in-graph-editor-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00214/anim-view-curve-in-graph-editor-local-exact-report.json new file mode 100644 index 00000000..9ac96a4e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00214/anim-view-curve-in-graph-editor-local-exact-report.json @@ -0,0 +1,69 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00214", + "operation": "ANIM_VIEW_CURVE_IN_GRAPH_EDITOR_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00214-operator-anim.view_curve_in_graph_editor.blend", + "sha256": "405825a29d3bf69cd85e461bf0c1a727631febe354b11ed1fd722d72f0faaea2" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00214/anim-view-curve-in-graph-editor-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "GRAPH_VIEW_FRAMED", + "beforeView2d": { + "cur": { + "xmax": 13, + "xmin": -2, + "ymax": 7.5, + "ymin": -3.5 + }, + "mask": { + "xmax": 537, + "xmin": 0, + "ymax": 25, + "ymin": 0 + } + }, + "afterView2d": { + "cur": { + "xmax": 1.5, + "xmin": 0.5, + "ymax": -2.505917, + "ymin": -3.505917 + }, + "mask": { + "xmax": 537, + "xmin": 0, + "ymax": 25, + "ymin": 0 + } + } + }, + "wasm": { + "status": "EXACT", + "editor": "GRAPH", + "regionKind": "MAIN", + "view2d": { + "cur": { + "xmax": 13, + "xmin": -2, + "ymax": 7.5, + "ymin": -3.5 + }, + "mask": { + "xmax": 1577, + "xmin": 0, + "ymax": 76, + "ymin": 0 + } + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00215" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00214/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00214/manifest.json new file mode 100644 index 00000000..fb6246e1 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00214/manifest.json @@ -0,0 +1,77 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00214", + "parentTask": "M16-GAP-00213", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ANIM_VIEW_CURVE_IN_GRAPH_EDITOR_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00213/manifest.json", + "sha256": "08467e4ffc091a6b32ce09ba35cacaff880f3292823bc0bd2a8ca4995ddbc8ec" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00214-operator-anim.view_curve_in_graph_editor.blend", + "sha256": "405825a29d3bf69cd85e461bf0c1a727631febe354b11ed1fd722d72f0faaea2" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00214.py", + "sha256": "a5c2ab327f0540ac3b80088e9022c9231be30408defe536263a87c3394677b80" + }, + "desktopChecker": { + "path": "tools/web/check-action-view-curve-in-graph-editor-desktop.py", + "sha256": "38e8a54df8725315b0c60bec955c77a3e2a1022d01898377f097268165be81cf" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "8ca58e1feec4af6a326606c6ed6df6b18d008d96c1609bf1cb3915ce76fd1ec4" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "cda5ebf01d6f63b8071a10b506a044c829627329d87bc2ea7a139ee726f7071c" + }, + "protocol": { + "path": "web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a" + }, + "sceneIrProtocol": { + "path": "web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "a0067e363e2ce53fc9658e67819c74cce01a515d6272d6a7c028776b4465fe87" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "a0067e363e2ce53fc9658e67819c74cce01a515d6272d6a7c028776b4465fe87" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00214/anim-view-curve-in-graph-editor-desktop-report.json", + "sha256": "127e6168e198cae8661d358b457d1459f9b515f79d2a6e86aa0c1022fb3210c6" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00214/anim-view-curve-in-graph-editor-local-exact-report.json", + "sha256": "bfa381ab96c2f2f0d9d16dcc7afd7a0200284a5704610cb70a6f0db402c3698b" + }, + "status": { + "path": "docs/status/M16-GAP-00214.md", + "sha256": "67c9c89f921f7c911bfb5172da5eefa1fe68a9749b41e61b55383d63ba65de6c" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00214/task-context.json", + "sha256": "905f7ee4e419109e77a274f385c405132f5e471cf0c4f0e24c363fd60dffb431" + } + }, + "nextTask": "M16-GAP-00215" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00214/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00214/task-context.json new file mode 100644 index 00000000..80fa2a84 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00214/task-context.json @@ -0,0 +1,182 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00214", + "parentTask": "M16-GAP-00213", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:anim.view_curve_in_graph_editor data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:anim.view_curve_in_graph_editor", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00214.py -- tests/files/web/generated/M16-GAP-00214-operator-anim.view_curve_in_graph_editor.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00214", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00214" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1746, + "contextRemainingTokens": 436 + }, + "source": { + "bytes": 8158, + "tokens": 2040 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00214-operator-anim.view_curve_in_graph_editor.blend", + "bytes": 87074, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/generated/M16-GAP-00214.py", + "bytes": 2640, + "reason": "CONTEXT_REMAINING_SPACE" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 235367, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 549459, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00214/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00214.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00214/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00215", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00214.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00213/manifest.json", + "parentStatus": "docs/status/M16-GAP-00213.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00214.md", + "tests/golden/M16-GAP-00213/manifest.json", + "docs/status/M16-GAP-00213.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00213", + "parentTask": "M16-GAP-00212", + "status": "done", + "nextTask": "M16-GAP-00214", + "artifactCount": 16 + }, + "statusSummary": [ + "# M16-GAP-00213 Status", + "status: done", + "task: anim.version_bone_hide_property operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one selected armature object, one bone, an armature-data Action with `bones[\"WebGapVersionBoneHideBone\"].hide`, and an object Action with an anchor channel.", + "- Desktop runs `ANIM_OT_version_bone_hide_property` (`poll=true`, `FINISHED`) and copies the hide F-curve into the object Action as `pose.bones[\"WebGapVersionBoneHideBone\"].hide`, retaining the armature source channel.", + "- The existing Main reader exposes both Action channels and the armature data; no unrelated data-block, editor, or browser behavior was changed." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1844, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 461 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00214.md", + "bytes": 1844, + "lines": 38, + "tokens": 461 + }, + { + "path": "tests/golden/M16-GAP-00213/manifest.json", + "bytes": 2878, + "lines": 30, + "tokens": 720 + }, + { + "path": "docs/status/M16-GAP-00213.md", + "bytes": 1268, + "lines": 20, + "tokens": 317 + } + ], + "sourceTokens": 2040, + "evidenceFiles": 0, + "evidenceBytes": 0, + "evidenceTokens": 0, + "totalTokens": 2040, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3064, + "serializedContextTokens": 727, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00215/armature-align-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00215/armature-align-desktop-report.json new file mode 100644 index 00000000..ac8d2f1f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00215/armature-align-desktop-report.json @@ -0,0 +1,81 @@ +{ + "after": { + "armature": "WebGapArmatureAlignArmature", + "bones": [ + { + "head": [ + 0.0, + 0.0, + 3.0 + ], + "name": "WebGapArmatureAlignChild", + "parent": null, + "tail": [ + 0.0, + 0.0, + 5.44949 + ] + }, + { + "head": [ + 0.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureAlignParent", + "parent": null, + "tail": [ + 0.0, + 0.0, + 3.0 + ] + } + ], + "object": "WebGapArmatureAlignObject" + }, + "alreadyAligned": true, + "before": { + "armature": "WebGapArmatureAlignArmature", + "bones": [ + { + "head": [ + 0.0, + 0.0, + 3.0 + ], + "name": "WebGapArmatureAlignChild", + "parent": null, + "tail": [ + 0.0, + 0.0, + 5.44949 + ] + }, + { + "head": [ + 0.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureAlignParent", + "parent": null, + "tail": [ + 0.0, + 0.0, + 3.0 + ] + } + ], + "object": "WebGapArmatureAlignObject" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00215-operator-armature.align.blend", + "fixtureSha256": "772ad751d2ad898214e27469c451ab44ce0463bb99271b160b70f57941e9b419", + "mainMutation": "CHILD_ALIGNED_TO_PARENT", + "operation": "ARMATURE_ALIGN_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00215" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00215/armature-align-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00215/armature-align-local-exact-report.json new file mode 100644 index 00000000..db56a501 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00215/armature-align-local-exact-report.json @@ -0,0 +1,53 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00215", + "operation": "ARMATURE_ALIGN_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00215-operator-armature.align.blend", + "sha256": "772ad751d2ad898214e27469c451ab44ce0463bb99271b160b70f57941e9b419" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00215/armature-align-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "CHILD_ALIGNED_TO_PARENT" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureAlignArmature", + "parentBone": { + "id": "bone:armature:WebGapArmatureAlignArmature:WebGapArmatureAlignParent", + "head": [ + 0, + 0, + 0 + ], + "tail": [ + 0, + 0, + 3 + ] + }, + "alignedChildBone": { + "id": "bone:armature:WebGapArmatureAlignArmature:WebGapArmatureAlignChild", + "head": [ + 0, + 0, + 3 + ], + "tail": [ + 0, + 0, + 5.449489593505859 + ], + "parentId": null + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00216" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00215/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00215/manifest.json new file mode 100644 index 00000000..73c9490f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00215/manifest.json @@ -0,0 +1,69 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00215", + "parentTask": "M16-GAP-00214", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_ALIGN_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00214/manifest.json", + "sha256": "0ff1e297545b308ad6ef9006c80992a0f9ecba88008bf9c0b4f3a86b6c28c145" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00215-operator-armature.align.blend", + "sha256": "772ad751d2ad898214e27469c451ab44ce0463bb99271b160b70f57941e9b419" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00215.py", + "sha256": "b755086a190245ff4ed5effb4c713790ea8e1b066c79800ecb7b32cbfc1c1764" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-align-desktop.py", + "sha256": "a406c012536580f3dfc6b5851015bb65ccf578acce6e606c0994e4428de83738" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "f856119464bf174f206485d1899ff4086c7c3dd39dd3091976592a0f9d19fe88" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "c56d254a74ace9664104f139692cf37f825547301824872bfd8db95f6ad2117b" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "82b9fb9488a20543f0db1235b18a7c28b2593ac498c152a12f45f8299ced1927" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "82b9fb9488a20543f0db1235b18a7c28b2593ac498c152a12f45f8299ced1927" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00215/armature-align-desktop-report.json", + "sha256": "f0f94981885773704748c302cad95cf7b0a24137cfb6d36921e8d464c408cb40" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00215/armature-align-local-exact-report.json", + "sha256": "d9b19ad3b36bc1a7303207b9ed9f3c2b32df072fce5349718b2783019e144e4e" + }, + "status": { + "path": "docs/status/M16-GAP-00215.md", + "sha256": "9bdd9c23820e98dfbb1bb57c2c1c7339f07e54c4abf2ba06d5b18a3fc0c0762d" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00215/task-context.json", + "sha256": "82b2e30643461bfcff8612e29aebe38d50f2585b8be9b1c780ae6d762298ab87" + } + }, + "nextTask": "M16-GAP-00216" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00215/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00215/task-context.json new file mode 100644 index 00000000..ddd05af4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00215/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00215", + "parentTask": "M16-GAP-00214", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.align data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.align", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00215.py -- tests/files/web/generated/M16-GAP-00215-operator-armature.align.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00215", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00215" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00215.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1616, + "contextRemainingTokens": 403 + }, + "source": { + "bytes": 8288, + "tokens": 2073 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00215.py", + "bytes": 1343, + "tokens": 336 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00215-operator-armature.align.blend", + "bytes": 86317, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 235367, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 553947, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00215/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00215.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00215/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1343, + "tokens": 336 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00216", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00215.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00214/manifest.json", + "parentStatus": "docs/status/M16-GAP-00214.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00215.md", + "tests/golden/M16-GAP-00214/manifest.json", + "docs/status/M16-GAP-00214.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00214", + "parentTask": "M16-GAP-00213", + "status": "done", + "nextTask": "M16-GAP-00215", + "artifactCount": 16 + }, + "statusSummary": [ + "# M16-GAP-00214 Status", + "status: done", + "task: anim.view_curve_in_graph_editor operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one selected mesh object, one custom animated scalar property with frames 1 and 10, and a persisted Graph Editor area.", + "- Desktop activates the property button and runs `ANIM_OT_view_curve_in_graph_editor` with `poll=true` and `FINISHED`; the operator changes the Graph Editor view bounds while leaving the Action data unchanged.", + "- The Main reader now exposes `View2D` state for `GRAPH` editor main regions, alongside the existing Dope Sheet exposure. No other editor or data-block behavior changed." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1759, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 440 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00215.md", + "bytes": 1759, + "lines": 38, + "tokens": 440 + }, + { + "path": "tests/golden/M16-GAP-00214/manifest.json", + "bytes": 3134, + "lines": 78, + "tokens": 784 + }, + { + "path": "docs/status/M16-GAP-00214.md", + "bytes": 1227, + "lines": 20, + "tokens": 307 + } + ], + "sourceTokens": 2073, + "evidenceFiles": 1, + "evidenceBytes": 1343, + "evidenceTokens": 336, + "totalTokens": 2409, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3433, + "serializedContextTokens": 750, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00216/armature-assign-to-collection-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00216/armature-assign-to-collection-desktop-report.json new file mode 100644 index 00000000..a74cc40a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00216/armature-assign-to-collection-desktop-report.json @@ -0,0 +1,53 @@ +{ + "after": { + "armature": "WebGapArmatureAssignArmature", + "collections": [ + { + "bones": [ + "WebGapArmatureAssignChild" + ], + "index": 0, + "name": "WebGapArmatureAssignSource" + }, + { + "bones": [ + "WebGapArmatureAssignChild" + ], + "index": 1, + "name": "WebGapArmatureAssignTarget" + } + ], + "object": "WebGapArmatureAssignObject" + }, + "alreadyAssigned": true, + "before": { + "armature": "WebGapArmatureAssignArmature", + "collections": [ + { + "bones": [ + "WebGapArmatureAssignChild" + ], + "index": 0, + "name": "WebGapArmatureAssignSource" + }, + { + "bones": [ + "WebGapArmatureAssignChild" + ], + "index": 1, + "name": "WebGapArmatureAssignTarget" + } + ], + "object": "WebGapArmatureAssignObject" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00216-operator-armature.assign_to_collection.blend", + "fixtureSha256": "be79a2c05b090aaf1e7ce9f777a6adea68b5fb6b7750ffe130eebf2ab4608b43", + "mainMutation": "CHILD_ASSIGNED_TO_TARGET_COLLECTION", + "operation": "ARMATURE_ASSIGN_TO_COLLECTION_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00216" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00216/armature-assign-to-collection-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00216/armature-assign-to-collection-local-exact-report.json new file mode 100644 index 00000000..1c5800c9 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00216/armature-assign-to-collection-local-exact-report.json @@ -0,0 +1,39 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00216", + "operation": "ARMATURE_ASSIGN_TO_COLLECTION_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00216-operator-armature.assign_to_collection.blend", + "sha256": "be79a2c05b090aaf1e7ce9f777a6adea68b5fb6b7750ffe130eebf2ab4608b43" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00216/armature-assign-to-collection-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "CHILD_ASSIGNED_TO_TARGET_COLLECTION" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureAssignArmature", + "sourceCollection": { + "id": "bone_collection:armature:WebGapArmatureAssignArmature:WebGapArmatureAssignSource", + "boneIds": [ + "bone:armature:WebGapArmatureAssignArmature:WebGapArmatureAssignChild" + ] + }, + "targetCollection": { + "id": "bone_collection:armature:WebGapArmatureAssignArmature:WebGapArmatureAssignTarget", + "boneIds": [ + "bone:armature:WebGapArmatureAssignArmature:WebGapArmatureAssignChild" + ] + }, + "assignedBoneId": "bone:armature:WebGapArmatureAssignArmature:WebGapArmatureAssignChild" + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00217" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00216/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00216/manifest.json new file mode 100644 index 00000000..4631e00e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00216/manifest.json @@ -0,0 +1,69 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00216", + "parentTask": "M16-GAP-00215", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_ASSIGN_TO_COLLECTION_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00215/manifest.json", + "sha256": "7d5ff929aa6c3532f6f895e21a5e195e445ddbf0cf3d2d7e9fc5254488a4b0b2" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00216-operator-armature.assign_to_collection.blend", + "sha256": "be79a2c05b090aaf1e7ce9f777a6adea68b5fb6b7750ffe130eebf2ab4608b43" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00216.py", + "sha256": "1e14f51d34a6a3781b299f826ef1a449efa4ad0dc744960b529a00671ffac017" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-assign-to-collection-desktop.py", + "sha256": "0a2aa43cfb3d08fc2904b9b36dd6fca160309f936bd5006038a56cf355990718" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "f856119464bf174f206485d1899ff4086c7c3dd39dd3091976592a0f9d19fe88" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "c56d254a74ace9664104f139692cf37f825547301824872bfd8db95f6ad2117b" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "82b9fb9488a20543f0db1235b18a7c28b2593ac498c152a12f45f8299ced1927" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "82b9fb9488a20543f0db1235b18a7c28b2593ac498c152a12f45f8299ced1927" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00216/armature-assign-to-collection-desktop-report.json", + "sha256": "f9ea1aedef9d6286d5038e9244cd82fec979238d3d72da76201b7bc3ac18b7e2" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00216/armature-assign-to-collection-local-exact-report.json", + "sha256": "4d063e44db5ebe56585caf6e1e28c9ba5dfaee8ddd95c4402a0d40474b94187c" + }, + "status": { + "path": "docs/status/M16-GAP-00216.md", + "sha256": "8e4d7487a830aa736ca668bdffc059ab4bc366fd65f9ef159d10905ed3e27a37" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00216/task-context.json", + "sha256": "0f93744560fa885b9cf0d8e1c6ed605f922ea4bc44c521fee023adae2c0e5cae" + } + }, + "nextTask": "M16-GAP-00217" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00216/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00216/task-context.json new file mode 100644 index 00000000..5a43a573 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00216/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00216", + "parentTask": "M16-GAP-00215", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.assign_to_collection data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.assign_to_collection", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00216.py -- tests/files/web/generated/M16-GAP-00216-operator-armature.assign_to_collection.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00216", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00216" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00216.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2125, + "contextRemainingTokens": 530 + }, + "source": { + "bytes": 7779, + "tokens": 1946 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00216.py", + "bytes": 1512, + "tokens": 378 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00216-operator-armature.assign_to_collection.blend", + "bytes": 86423, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 237877, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 557927, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00216/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00216.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00216/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1512, + "tokens": 378 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00217", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00216.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00215/manifest.json", + "parentStatus": "docs/status/M16-GAP-00215.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00216.md", + "tests/golden/M16-GAP-00215/manifest.json", + "docs/status/M16-GAP-00215.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00215", + "parentTask": "M16-GAP-00214", + "status": "done", + "nextTask": "M16-GAP-00216", + "artifactCount": 14 + }, + "statusSummary": [ + "# M16-GAP-00215 Status", + "status: done", + "task: armature.align operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one armature with two independent edit bones. The child starts at an angled axis and the parent is the active selected bone.", + "- Desktop runs `ARMATURE_OT_align` with `poll=true` and `FINISHED`, aligns the child axis to the active parent, and preserves the result through save/reopen.", + "- The existing Main reader exposes the same armature bone `head`/`tail` data; no other data-block, editor, or browser behavior changed." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1834, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 459 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00216.md", + "bytes": 1834, + "lines": 38, + "tokens": 459 + }, + { + "path": "tests/golden/M16-GAP-00215/manifest.json", + "bytes": 2740, + "lines": 70, + "tokens": 685 + }, + { + "path": "docs/status/M16-GAP-00215.md", + "bytes": 1037, + "lines": 20, + "tokens": 260 + } + ], + "sourceTokens": 1946, + "evidenceFiles": 1, + "evidenceBytes": 1512, + "evidenceTokens": 378, + "totalTokens": 2324, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3348, + "serializedContextTokens": 761, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00217/armature-autoside-names-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00217/armature-autoside-names-desktop-report.json new file mode 100644 index 00000000..1ac1c399 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00217/armature-autoside-names-desktop-report.json @@ -0,0 +1,77 @@ +{ + "after": { + "armature": "WebGapArmatureAutosideArmature", + "bones": [ + { + "head": [ + 1.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureAutosideLeft.L", + "tail": [ + 1.0, + 0.0, + 2.0 + ] + }, + { + "head": [ + -1.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureAutosideRight.R", + "tail": [ + -1.0, + 0.0, + 2.0 + ] + } + ], + "object": "WebGapArmatureAutosideObject" + }, + "alreadyNamed": true, + "before": { + "armature": "WebGapArmatureAutosideArmature", + "bones": [ + { + "head": [ + 1.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureAutosideLeft.L", + "tail": [ + 1.0, + 0.0, + 2.0 + ] + }, + { + "head": [ + -1.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureAutosideRight.R", + "tail": [ + -1.0, + 0.0, + 2.0 + ] + } + ], + "object": "WebGapArmatureAutosideObject" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00217-operator-armature.autoside_names.blend", + "fixtureSha256": "9dafd4489858ab080988c474877d6e9a9e5a7884b8e00d42c070b7769d2ed57f", + "mainMutation": "ALREADY_AUTOSIDE_NAMED", + "operation": "ARMATURE_AUTOSIDE_NAMES_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00217" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00217/armature-autoside-names-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00217/armature-autoside-names-local-exact-report.json new file mode 100644 index 00000000..4e63ac0c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00217/armature-autoside-names-local-exact-report.json @@ -0,0 +1,32 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00217", + "operation": "ARMATURE_AUTOSIDE_NAMES_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00217-operator-armature.autoside_names.blend", + "sha256": "9dafd4489858ab080988c474877d6e9a9e5a7884b8e00d42c070b7769d2ed57f" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00217/armature-autoside-names-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "ALREADY_AUTOSIDE_NAMED" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureAutosideArmature", + "boneNames": [ + "WebGapArmatureAutosideLeft.L", + "WebGapArmatureAutosideRight.R" + ], + "leftBoneId": "bone:armature:WebGapArmatureAutosideArmature:WebGapArmatureAutosideLeft.L", + "rightBoneId": "bone:armature:WebGapArmatureAutosideArmature:WebGapArmatureAutosideRight.R" + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00218" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00217/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00217/manifest.json new file mode 100644 index 00000000..3c996626 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00217/manifest.json @@ -0,0 +1,69 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00217", + "parentTask": "M16-GAP-00216", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_AUTOSIDE_NAMES_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00216/manifest.json", + "sha256": "3b2e12276994fca0c6c2d548eb634f9bcd44c6cf504cfea06b53aa863e59c754" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00217-operator-armature.autoside_names.blend", + "sha256": "9dafd4489858ab080988c474877d6e9a9e5a7884b8e00d42c070b7769d2ed57f" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00217.py", + "sha256": "037230ad7bb83e69a7c89aca12b62a87dd13d18307bf5f6dcc2c6b0ce059c51d" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-autoside-names-desktop.py", + "sha256": "1d8983980d621a559bef9b0bd14eecc1dbf95b43fee2eecaecf970f7052b1e1d" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "02fe1cd3eb72c15409ad2dde955629adb6456d1170fec43309dc2c5cd6e2fb53" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "c56d254a74ace9664104f139692cf37f825547301824872bfd8db95f6ad2117b" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "82b9fb9488a20543f0db1235b18a7c28b2593ac498c152a12f45f8299ced1927" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "82b9fb9488a20543f0db1235b18a7c28b2593ac498c152a12f45f8299ced1927" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00217/armature-autoside-names-desktop-report.json", + "sha256": "2ccaaa1f2b8549abc17bd0640add62b658ccc77b9a2792456df929dd209e466d" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00217/armature-autoside-names-local-exact-report.json", + "sha256": "2a479e88f080b7e7530f1f8f6ac87fe5aa5ca7ffaf69a068eaf4eeb99b257e80" + }, + "status": { + "path": "docs/status/M16-GAP-00217.md", + "sha256": "a735bae8a60c2d32b47221d4f5547489808daa8e939c7dec4bd7c729eeb23a3c" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00217/task-context.json", + "sha256": "0dc798480ef127c5528973b78ba24a99f8514b04212578e0f3b5633be8da06fa" + } + }, + "nextTask": "M16-GAP-00218" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00217/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00217/task-context.json new file mode 100644 index 00000000..010b9dcd --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00217/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00217", + "parentTask": "M16-GAP-00216", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.autoside_names data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.autoside_names", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00217.py -- tests/files/web/generated/M16-GAP-00217-operator-armature.autoside_names.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00217", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00217" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00217.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1945, + "contextRemainingTokens": 486 + }, + "source": { + "bytes": 7959, + "tokens": 1990 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00217.py", + "bytes": 1252, + "tokens": 313 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00217-operator-armature.autoside_names.blend", + "bytes": 86309, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 237877, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 561677, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00217/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00217.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00217/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1252, + "tokens": 313 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00218", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00217.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00216/manifest.json", + "parentStatus": "docs/status/M16-GAP-00216.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00217.md", + "tests/golden/M16-GAP-00216/manifest.json", + "docs/status/M16-GAP-00216.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00216", + "parentTask": "M16-GAP-00215", + "status": "done", + "nextTask": "M16-GAP-00217", + "artifactCount": 14 + }, + "statusSummary": [ + "# M16-GAP-00216 Status", + "status: done", + "task: armature.assign_to_collection operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one armature with source and target bone collections, one parent bone, and one selected child initially assigned only to the source collection.", + "- Desktop runs `ARMATURE_OT_assign_to_collection(collection_index=1)` with `poll=true` and `FINISHED`, assigning the child to the target collection and preserving both memberships through save/reopen.", + "- The Main reader now exposes bounded armature `boneCollections` entries with collection name/index and member bone IDs. No other collection, editor, or browser behavior changed." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1804, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 451 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00217.md", + "bytes": 1804, + "lines": 38, + "tokens": 451 + }, + { + "path": "tests/golden/M16-GAP-00216/manifest.json", + "bytes": 2815, + "lines": 70, + "tokens": 704 + }, + { + "path": "docs/status/M16-GAP-00216.md", + "bytes": 1172, + "lines": 20, + "tokens": 293 + } + ], + "sourceTokens": 1990, + "evidenceFiles": 1, + "evidenceBytes": 1252, + "evidenceTokens": 313, + "totalTokens": 2303, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3327, + "serializedContextTokens": 757, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00218/armature-bone-primitive-add-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00218/armature-bone-primitive-add-desktop-report.json new file mode 100644 index 00000000..748f2a5d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00218/armature-bone-primitive-add-desktop-report.json @@ -0,0 +1,63 @@ +{ + "after": { + "armature": "WebGapArmaturePrimitiveArmature", + "bones": [ + { + "head": [ + 1.5, + -2.0, + 0.75 + ], + "name": "WebGapArmaturePrimitiveBone", + "tail": [ + 1.5, + -2.0, + 3.25 + ], + "useDeform": false + } + ], + "cursor": [ + 1.5, + -2.0, + 0.75 + ], + "object": "WebGapArmaturePrimitiveObject" + }, + "alreadyAdded": true, + "before": { + "armature": "WebGapArmaturePrimitiveArmature", + "bones": [ + { + "head": [ + 1.5, + -2.0, + 0.75 + ], + "name": "WebGapArmaturePrimitiveBone", + "tail": [ + 1.5, + -2.0, + 3.25 + ], + "useDeform": false + } + ], + "cursor": [ + 1.5, + -2.0, + 0.75 + ], + "object": "WebGapArmaturePrimitiveObject" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00218-operator-armature.bone_primitive_add.blend", + "fixtureSha256": "b6857f1212fd591bc78dea3451ee38da3547a3415c32637f974c8187bfd28f73", + "mainMutation": "ALREADY_BONE_CREATED_AT_CURSOR", + "operation": "ARMATURE_BONE_PRIMITIVE_ADD_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00218" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00218/armature-bone-primitive-add-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00218/armature-bone-primitive-add-local-exact-report.json new file mode 100644 index 00000000..1b3f4aab --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00218/armature-bone-primitive-add-local-exact-report.json @@ -0,0 +1,40 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00218", + "operation": "ARMATURE_BONE_PRIMITIVE_ADD_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00218-operator-armature.bone_primitive_add.blend", + "sha256": "b6857f1212fd591bc78dea3451ee38da3547a3415c32637f974c8187bfd28f73" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00218/armature-bone-primitive-add-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "ALREADY_BONE_CREATED_AT_CURSOR" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmaturePrimitiveArmature", + "bone": { + "id": "bone:armature:WebGapArmaturePrimitiveArmature:WebGapArmaturePrimitiveBone", + "name": "WebGapArmaturePrimitiveBone", + "head": [ + 1.5, + -2, + 0.75 + ], + "tail": [ + 1.5, + -2, + 3.25 + ] + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00219" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00218/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00218/manifest.json new file mode 100644 index 00000000..ba38c2e6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00218/manifest.json @@ -0,0 +1,69 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00218", + "parentTask": "M16-GAP-00217", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_BONE_PRIMITIVE_ADD_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00217/manifest.json", + "sha256": "2edf78e7629b31c116389be652225e4279c0fd40bbbb58debb3d3bb1d66c8f01" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00218-operator-armature.bone_primitive_add.blend", + "sha256": "b6857f1212fd591bc78dea3451ee38da3547a3415c32637f974c8187bfd28f73" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00218.py", + "sha256": "a59d8918c3372dc41d1fdf06efea2fa8bdaadcadd0a1602af029d3682a7cf924" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-bone-primitive-add-desktop.py", + "sha256": "fa0d91a10c5d2dc9cae127c02927fc98be37110f25e3ab3570cd7cf733ce329e" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "6c18288b9d2ffba39e4485c5cf6c556e6952430d4d153b07763ba205bdec6f56" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "c56d254a74ace9664104f139692cf37f825547301824872bfd8db95f6ad2117b" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "82b9fb9488a20543f0db1235b18a7c28b2593ac498c152a12f45f8299ced1927" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "82b9fb9488a20543f0db1235b18a7c28b2593ac498c152a12f45f8299ced1927" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00218/armature-bone-primitive-add-desktop-report.json", + "sha256": "7176938d759ad47b1c4fd6a4c4b73cc3af615518f30540d535a0f997bfdfc3ef" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00218/armature-bone-primitive-add-local-exact-report.json", + "sha256": "042cee11ebc0ccac3108e51773fb486c08c8ef6f745d018b0abb6469678f4fb7" + }, + "status": { + "path": "docs/status/M16-GAP-00218.md", + "sha256": "44c52e0bbeabf7ba66894db6f51f04a5ab793c921483796176568c5d25f97711" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00218/task-context.json", + "sha256": "42735f344b07d948bd9f302e4e21ae7580ca97506d5903667b56c24b4af02d48" + } + }, + "nextTask": "M16-GAP-00219" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00218/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00218/task-context.json new file mode 100644 index 00000000..fd08cead --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00218/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00218", + "parentTask": "M16-GAP-00217", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.bone_primitive_add data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.bone_primitive_add", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00218.py -- tests/files/web/generated/M16-GAP-00218-operator-armature.bone_primitive_add.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00218", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00218" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00218.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2104, + "contextRemainingTokens": 525 + }, + "source": { + "bytes": 7800, + "tokens": 1951 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00218.py", + "bytes": 871, + "tokens": 218 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00218-operator-armature.bone_primitive_add.blend", + "bytes": 86250, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 237877, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 565412, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00218/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00218.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00218/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 871, + "tokens": 218 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00219", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00218.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00217/manifest.json", + "parentStatus": "docs/status/M16-GAP-00217.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00218.md", + "tests/golden/M16-GAP-00217/manifest.json", + "docs/status/M16-GAP-00217.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00217", + "parentTask": "M16-GAP-00216", + "status": "done", + "nextTask": "M16-GAP-00218", + "artifactCount": 14 + }, + "statusSummary": [ + "# M16-GAP-00217 Status", + "status: done", + "task: armature.autoside_names operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one armature with two selected bones on opposite sides of the X axis.", + "- Desktop runs `ARMATURE_OT_autoside_names(type='XAXIS')` with `poll=true` and `FINISHED`, naming the positive-X bone `.L` and the negative-X bone `.R`, then preserves both names through save/reopen.", + "- The existing Main reader exposes the same armature bone names; no new reader field, data-block, editor, or browser behavior was added." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1824, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 456 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00218.md", + "bytes": 1824, + "lines": 38, + "tokens": 456 + }, + { + "path": "tests/golden/M16-GAP-00217/manifest.json", + "bytes": 2785, + "lines": 70, + "tokens": 697 + }, + { + "path": "docs/status/M16-GAP-00217.md", + "bytes": 1023, + "lines": 20, + "tokens": 256 + } + ], + "sourceTokens": 1951, + "evidenceFiles": 1, + "evidenceBytes": 871, + "evidenceTokens": 218, + "totalTokens": 2169, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3193, + "serializedContextTokens": 759, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00219/armature-calculate-roll-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00219/armature-calculate-roll-desktop-report.json new file mode 100644 index 00000000..b0d06a5e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00219/armature-calculate-roll-desktop-report.json @@ -0,0 +1,88 @@ +{ + "after": { + "armature": "WebGapArmatureCalculateRollArmature", + "bones": [ + { + "head": [ + 0.0, + 0.0, + 0.0 + ], + "matrix": [ + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + -1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "name": "WebGapArmatureCalculateRollBone", + "tail": [ + 0.0, + 2.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureCalculateRollObject" + }, + "alreadyCalculated": false, + "before": { + "armature": "WebGapArmatureCalculateRollArmature", + "bones": [ + { + "head": [ + 0.0, + 0.0, + 0.0 + ], + "matrix": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "name": "WebGapArmatureCalculateRollBone", + "tail": [ + 0.0, + 2.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureCalculateRollObject" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00219-operator-armature.calculate_roll.blend", + "fixtureSha256": "7c6f851456147c2e69de3ddf1136885ccff9bd907cd480a5af5fd81f5769c862", + "mainMutation": "ROLL_CALCULATED_GLOBAL_POS_X", + "operation": "ARMATURE_CALCULATE_ROLL_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "roll": 1.570796, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00219" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00219/armature-calculate-roll-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00219/armature-calculate-roll-local-exact-report.json new file mode 100644 index 00000000..2107d274 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00219/armature-calculate-roll-local-exact-report.json @@ -0,0 +1,59 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00219", + "operation": "ARMATURE_CALCULATE_ROLL_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00219-operator-armature.calculate_roll.blend", + "sha256": "7c6f851456147c2e69de3ddf1136885ccff9bd907cd480a5af5fd81f5769c862" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00219/armature-calculate-roll-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "ROLL_CALCULATED_GLOBAL_POS_X", + "roll": 1.570796 + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureCalculateRollArmature", + "bone": { + "id": "bone:armature:WebGapArmatureCalculateRollArmature:WebGapArmatureCalculateRollBone", + "name": "WebGapArmatureCalculateRollBone", + "head": [ + 0, + 0, + 0 + ], + "tail": [ + 0, + 2, + 0 + ], + "restMatrix": [ + 7.549790126404332e-8, + 0, + -1, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 7.549790126404332e-8, + 0, + 0, + 0, + 0, + 1 + ] + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00220" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00219/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00219/manifest.json new file mode 100644 index 00000000..307ccd05 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00219/manifest.json @@ -0,0 +1,27 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00219", + "parentTask": "M16-GAP-00218", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_CALCULATE_ROLL_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00218/manifest.json", "sha256": "ed1737fa32a6d1bb5bdaca5e5eb35ff5006fbe14eeba59d96e6b24e64cd7bcc9"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00219-operator-armature.calculate_roll.blend", "sha256": "7c6f851456147c2e69de3ddf1136885ccff9bd907cd480a5af5fd81f5769c862"}, + "generator": {"path": "tools/web/generated/M16-GAP-00219.py", "sha256": "97a7da237cc8f8154f08b96e2ba6b5d6e608a6bc1b0bfa20fe165c00a3bb68b7"}, + "desktopChecker": {"path": "tools/web/check-action-armature-calculate-roll-desktop.py", "sha256": "570471197617ea452db37d8d972f372db07de15c3f78fd934905ecdbfe3e3a7f"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "62ad26cec00dd5a3d59a7ddbfbfa9cd0b7fbae0f0b252b6e40ce9ae73d027f98"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "c56d254a74ace9664104f139692cf37f825547301824872bfd8db95f6ad2117b"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "82b9fb9488a20543f0db1235b18a7c28b2593ac498c152a12f45f8299ced1927"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "82b9fb9488a20543f0db1235b18a7c28b2593ac498c152a12f45f8299ced1927"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00219/armature-calculate-roll-desktop-report.json", "sha256": "b4ea9eee1596aa99d045e7064b96a763faf7b29d6f7c79b95045d75ff26dd922"}, + "webReport": {"path": "tests/golden/M16-GAP-00219/armature-calculate-roll-local-exact-report.json", "sha256": "1c888b9739c03fcd5aed2b1de20a2aea3871c80cff6b6fcb464e09a5478f5c23"}, + "status": {"path": "docs/status/M16-GAP-00219.md", "sha256": "66adfb1390f39daeeedc52b0db0cfe1a4542af738ea6c5944a292faa53936e57"}, + "taskContext": {"path": "tests/golden/M16-GAP-00219/task-context.json", "sha256": "1c6a55bdc4fd17687a7695b44fba71bd5ad26644919dbcd363b6a7dec07cbde9"} + }, + "nextTask": "M16-GAP-00220" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00219/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00219/task-context.json new file mode 100644 index 00000000..85dd71e0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00219/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00219", + "parentTask": "M16-GAP-00218", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.calculate_roll data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.calculate_roll", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00219.py -- tests/files/web/generated/M16-GAP-00219-operator-armature.calculate_roll.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00219", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00219" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00219.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2070, + "contextRemainingTokens": 516 + }, + "source": { + "bytes": 7834, + "tokens": 1960 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00219.py", + "bytes": 1104, + "tokens": 276 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00219-operator-armature.calculate_roll.blend", + "bytes": 86240, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 237877, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 569706, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00219/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00219.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00219/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1104, + "tokens": 276 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00220", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00219.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00218/manifest.json", + "parentStatus": "docs/status/M16-GAP-00218.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00219.md", + "tests/golden/M16-GAP-00218/manifest.json", + "docs/status/M16-GAP-00218.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00218", + "parentTask": "M16-GAP-00217", + "status": "done", + "nextTask": "M16-GAP-00219", + "artifactCount": 14 + }, + "statusSummary": [ + "# M16-GAP-00218 Status", + "status: done", + "task: armature.bone_primitive_add operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one empty armature object and a fixed 3D cursor at `(1.5, -2.0, 0.75)`.", + "- Desktop runs `ARMATURE_OT_bone_primitive_add(name, length=2.5, align='UP', space='OBJECT', use_deform=false)` with `poll=true` and `FINISHED`, creating the named bone at the cursor and preserving its head/tail through save/reopen.", + "- The existing Main reader exposes the same armature bone name and coordinates; no new reader field, data-block, editor, or browser behavior was added." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1804, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 451 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00219.md", + "bytes": 1804, + "lines": 38, + "tokens": 451 + }, + { + "path": "tests/golden/M16-GAP-00218/manifest.json", + "bytes": 2805, + "lines": 70, + "tokens": 702 + }, + { + "path": "docs/status/M16-GAP-00218.md", + "bytes": 1057, + "lines": 20, + "tokens": 265 + } + ], + "sourceTokens": 1960, + "evidenceFiles": 1, + "evidenceBytes": 1104, + "evidenceTokens": 276, + "totalTokens": 2236, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3260, + "serializedContextTokens": 757, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00220/armature-click-extrude-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00220/armature-click-extrude-desktop-report.json new file mode 100644 index 00000000..186228e0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00220/armature-click-extrude-desktop-report.json @@ -0,0 +1,207 @@ +{ + "after": { + "armature": "WebGapArmatureClickExtrudeArmature", + "bones": [ + { + "head": [ + 0.0, + 0.0, + 0.0 + ], + "headRaw": [ + 0.0, + 0.0, + 0.0 + ], + "matrix": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "name": "WebGapArmatureClickExtrudeBone", + "parent": null, + "tail": [ + 0.0, + 2.0, + 0.0 + ], + "tailRaw": [ + 0.0, + 2.0, + 0.0 + ], + "useConnect": false + }, + { + "head": [ + 0.0, + 2.0, + 0.0 + ], + "headRaw": [ + 0.0, + 0.0, + 0.0 + ], + "matrix": [ + -0.0, + 0.83205, + -0.5547, + 0.0, + -1.0, + 0.0, + 0.0, + 2.0, + 0.0, + 0.5547, + 0.83205, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "name": "WebGapArmatureClickExtrudeBone.001", + "parent": "WebGapArmatureClickExtrudeBone", + "tail": [ + 1.5, + 2.0, + 1.0 + ], + "tailRaw": [ + 1.5, + 0.0, + 1.0 + ], + "useConnect": true + } + ], + "cursor": [ + 1.5, + 2.0, + 1.0 + ], + "object": "WebGapArmatureClickExtrudeObject" + }, + "alreadyExtruded": true, + "before": { + "armature": "WebGapArmatureClickExtrudeArmature", + "bones": [ + { + "head": [ + 0.0, + 0.0, + 0.0 + ], + "headRaw": [ + 0.0, + 0.0, + 0.0 + ], + "matrix": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "name": "WebGapArmatureClickExtrudeBone", + "parent": null, + "tail": [ + 0.0, + 2.0, + 0.0 + ], + "tailRaw": [ + 0.0, + 2.0, + 0.0 + ], + "useConnect": false + }, + { + "head": [ + 0.0, + 2.0, + 0.0 + ], + "headRaw": [ + 0.0, + 0.0, + 0.0 + ], + "matrix": [ + -0.0, + 0.83205, + -0.5547, + 0.0, + -1.0, + 0.0, + 0.0, + 2.0, + 0.0, + 0.5547, + 0.83205, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "name": "WebGapArmatureClickExtrudeBone.001", + "parent": "WebGapArmatureClickExtrudeBone", + "tail": [ + 1.5, + 2.0, + 1.0 + ], + "tailRaw": [ + 1.5, + 0.0, + 1.0 + ], + "useConnect": true + } + ], + "cursor": [ + 1.5, + 2.0, + 1.0 + ], + "object": "WebGapArmatureClickExtrudeObject" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00220-operator-armature.click_extrude.blend", + "fixtureSha256": "7b9ded05ba9a6bb02b729ef474ec3f37a67f41fa0e8da53c7e3c58a56b64e065", + "mainMutation": "ALREADY_CHILD_EXTRUDED_TO_CURSOR", + "operation": "ARMATURE_CLICK_EXTRUDE_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00220" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00220/armature-click-extrude-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00220/armature-click-extrude-local-exact-report.json new file mode 100644 index 00000000..5cd12153 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00220/armature-click-extrude-local-exact-report.json @@ -0,0 +1,78 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00220", + "operation": "ARMATURE_CLICK_EXTRUDE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00220-operator-armature.click_extrude.blend", + "sha256": "7b9ded05ba9a6bb02b729ef474ec3f37a67f41fa0e8da53c7e3c58a56b64e065" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00220/armature-click-extrude-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "ALREADY_CHILD_EXTRUDED_TO_CURSOR" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureClickExtrudeArmature", + "parentBone": { + "id": "bone:armature:WebGapArmatureClickExtrudeArmature:WebGapArmatureClickExtrudeBone", + "name": "WebGapArmatureClickExtrudeBone", + "head": [ + 0, + 0, + 0 + ], + "tail": [ + 0, + 2, + 0 + ] + }, + "extrudedBone": { + "id": "bone:armature:WebGapArmatureClickExtrudeArmature:WebGapArmatureClickExtrudeBone.001", + "name": "WebGapArmatureClickExtrudeBone.001", + "parentId": "bone:armature:WebGapArmatureClickExtrudeArmature:WebGapArmatureClickExtrudeBone", + "head": [ + 0, + 0, + 0 + ], + "tail": [ + 1.5, + 0, + 1 + ], + "restMatrix": [ + -1.0803341865539551e-7, + -1, + 5.960464477539063e-8, + 0, + 0.8320503234863281, + 0, + 0.5547001957893372, + 0, + -0.5547002553939819, + 8.940696716308594e-8, + 0.8320503234863281, + 0, + 0, + 2, + 0, + 1 + ] + }, + "armatureSpaceEndpoint": [ + 1.5, + 2, + 1 + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00221" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00220/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00220/manifest.json new file mode 100644 index 00000000..074b5996 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00220/manifest.json @@ -0,0 +1,27 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00220", + "parentTask": "M16-GAP-00219", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_CLICK_EXTRUDE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00219/manifest.json", "sha256": "3a57247b3f1ef1b2ebad1b59e81d18063e98210b653889c975e3b93f088ef820"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00220-operator-armature.click_extrude.blend", "sha256": "7b9ded05ba9a6bb02b729ef474ec3f37a67f41fa0e8da53c7e3c58a56b64e065"}, + "generator": {"path": "tools/web/generated/M16-GAP-00220.py", "sha256": "3af1d354e35b31da18a187e0ef5f5e2b5a2f11111058ff1dc3648f6134679b41"}, + "desktopChecker": {"path": "tools/web/check-action-armature-click-extrude-desktop.py", "sha256": "2fc6347da08d334e4b28a5316d1db45d189021ee38f4e5f8574e3a66cc177d51"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "5fa622a7df094c82b26aa596a27f167302250f5d3f3d7db785ef9bd6da44a840"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "c56d254a74ace9664104f139692cf37f825547301824872bfd8db95f6ad2117b"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "82b9fb9488a20543f0db1235b18a7c28b2593ac498c152a12f45f8299ced1927"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "82b9fb9488a20543f0db1235b18a7c28b2593ac498c152a12f45f8299ced1927"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00220/armature-click-extrude-desktop-report.json", "sha256": "5fe98d54a481df86862f9f3bcdcb854fa9ea4abfb7de9de6819a07beb2bdb4af"}, + "webReport": {"path": "tests/golden/M16-GAP-00220/armature-click-extrude-local-exact-report.json", "sha256": "dbe683725d4e05220b6abaf837450c31f66cb8c82eb4ef75130c332ba98125d8"}, + "status": {"path": "docs/status/M16-GAP-00220.md", "sha256": "5c5274c86b019432f5b22e474947272001ad2af14b2437b577578547d2230511"}, + "taskContext": {"path": "tests/golden/M16-GAP-00220/task-context.json", "sha256": "dfba3c91da5262603b2958c8011b317a5edd25bd1cf5b1a58cbe6bfd224024f7"} + }, + "nextTask": "M16-GAP-00221" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00220/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00220/task-context.json new file mode 100644 index 00000000..a7fe6843 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00220/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00220", + "parentTask": "M16-GAP-00219", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.click_extrude data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.click_extrude", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00220.py -- tests/files/web/generated/M16-GAP-00220-operator-armature.click_extrude.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00220", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00220" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00220.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2359, + "contextRemainingTokens": 588 + }, + "source": { + "bytes": 7545, + "tokens": 1888 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00220.py", + "bytes": 1239, + "tokens": 310 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00220-operator-armature.click_extrude.blend", + "bytes": 86416, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 237877, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 574890, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00220/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00220.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00220/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1239, + "tokens": 310 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00221", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00220.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00219/manifest.json", + "parentStatus": "docs/status/M16-GAP-00219.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00220.md", + "tests/golden/M16-GAP-00219/manifest.json", + "docs/status/M16-GAP-00219.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00219", + "parentTask": "M16-GAP-00218", + "status": "done", + "nextTask": "M16-GAP-00220", + "artifactCount": 14 + }, + "statusSummary": [ + "# M16-GAP-00219 Status", + "status: done", + "task: armature.calculate_roll operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one selected bone aligned along +Y with zero initial roll.", + "- Desktop runs `ARMATURE_OT_calculate_roll(type='GLOBAL_POS_X', axis_flip=false, axis_only=false)` with `poll=true` and `FINISHED`, producing a roll of approximately `pi/2` and preserving the resulting matrix through save/reopen.", + "- The existing Main reader exposes the same armature bone head/tail and rest matrix; no new reader field, data-block, editor, or browser behavior was added." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1799, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 450 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00220.md", + "bytes": 1799, + "lines": 38, + "tokens": 450 + }, + { + "path": "tests/golden/M16-GAP-00219/manifest.json", + "bytes": 2533, + "lines": 28, + "tokens": 634 + }, + { + "path": "docs/status/M16-GAP-00219.md", + "bytes": 1045, + "lines": 20, + "tokens": 262 + } + ], + "sourceTokens": 1888, + "evidenceFiles": 1, + "evidenceBytes": 1239, + "evidenceTokens": 310, + "totalTokens": 2198, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3222, + "serializedContextTokens": 756, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00221/armature-collection-add-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00221/armature-collection-add-desktop-report.json new file mode 100644 index 00000000..62e72827 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00221/armature-collection-add-desktop-report.json @@ -0,0 +1,51 @@ +{ + "after": { + "activeIndex": 1, + "armature": "WebGapArmatureCollectionAddArmature", + "collections": [ + { + "bones": [ + "WebGapArmatureCollectionAddBone" + ], + "index": 0, + "name": "WebGapArmatureCollectionAddExisting" + }, + { + "bones": [], + "index": 1, + "name": "Bones" + } + ], + "object": "WebGapArmatureCollectionAddObject" + }, + "alreadyAdded": true, + "before": { + "activeIndex": 1, + "armature": "WebGapArmatureCollectionAddArmature", + "collections": [ + { + "bones": [ + "WebGapArmatureCollectionAddBone" + ], + "index": 0, + "name": "WebGapArmatureCollectionAddExisting" + }, + { + "bones": [], + "index": 1, + "name": "Bones" + } + ], + "object": "WebGapArmatureCollectionAddObject" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00221-operator-armature.collection_add.blend", + "fixtureSha256": "a081193e2c16de9c072b0b7cc57f9d7b5f3f12863fcb2f06e16641cebdcf0b34", + "mainMutation": "ALREADY_BONE_COLLECTION_ADDED", + "operation": "ARMATURE_COLLECTION_ADD_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00221" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00221/armature-collection-add-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00221/armature-collection-add-local-exact-report.json new file mode 100644 index 00000000..50974d42 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00221/armature-collection-add-local-exact-report.json @@ -0,0 +1,40 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00221", + "operation": "ARMATURE_COLLECTION_ADD_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00221-operator-armature.collection_add.blend", + "sha256": "a081193e2c16de9c072b0b7cc57f9d7b5f3f12863fcb2f06e16641cebdcf0b34" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00221/armature-collection-add-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "ALREADY_BONE_COLLECTION_ADDED" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureCollectionAddArmature", + "existingCollection": { + "id": "bone_collection:armature:WebGapArmatureCollectionAddArmature:WebGapArmatureCollectionAddExisting", + "name": "WebGapArmatureCollectionAddExisting", + "index": 0, + "boneIds": [ + "bone:armature:WebGapArmatureCollectionAddArmature:WebGapArmatureCollectionAddBone" + ] + }, + "addedCollection": { + "id": "bone_collection:armature:WebGapArmatureCollectionAddArmature:Bones", + "name": "Bones", + "index": 1, + "boneIds": [] + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00222" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00221/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00221/manifest.json new file mode 100644 index 00000000..f5c018a5 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00221/manifest.json @@ -0,0 +1,27 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00221", + "parentTask": "M16-GAP-00220", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_COLLECTION_ADD_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00220/manifest.json", "sha256": "95fdbc58ff2d2d7db0462090f823bcecbc8e3e79642134eab568a8d1e41f82b0"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00221-operator-armature.collection_add.blend", "sha256": "a081193e2c16de9c072b0b7cc57f9d7b5f3f12863fcb2f06e16641cebdcf0b34"}, + "generator": {"path": "tools/web/generated/M16-GAP-00221.py", "sha256": "b2eea8780bb0095ab12b3a0f6e437054f6d01450a9a111030da0724b134bdc69"}, + "desktopChecker": {"path": "tools/web/check-action-armature-collection-add-desktop.py", "sha256": "8acf8ab1c9b9e27bc83fe568edd0d418b6c824c72b539126561955f05e5ba9f8"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "89924d3436c63db88e7765d0ea52e5604f4470cb62011ae36d594cf558e794d8"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "c56d254a74ace9664104f139692cf37f825547301824872bfd8db95f6ad2117b"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "82b9fb9488a20543f0db1235b18a7c28b2593ac498c152a12f45f8299ced1927"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "82b9fb9488a20543f0db1235b18a7c28b2593ac498c152a12f45f8299ced1927"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00221/armature-collection-add-desktop-report.json", "sha256": "ccbe838e9d73ce8d63f7b81b5d7b28acf038b802fd5f76c5b806f21925df6e3b"}, + "webReport": {"path": "tests/golden/M16-GAP-00221/armature-collection-add-local-exact-report.json", "sha256": "edd1a7688e96982df6a0b3216784c437d668c70fb817e58f11be9a6be6a10dcd"}, + "status": {"path": "docs/status/M16-GAP-00221.md", "sha256": "56727977918f6e76af983feeeff59da94ea0e1d020569acfe6eb5ff8fcce49e4"}, + "taskContext": {"path": "tests/golden/M16-GAP-00221/task-context.json", "sha256": "33c38758f90a7a49b0864dbccd1176d04ae0057829e7a1aed56ee8ff66e57610"} + }, + "nextTask": "M16-GAP-00222" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00221/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00221/task-context.json new file mode 100644 index 00000000..f0656633 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00221/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00221", + "parentTask": "M16-GAP-00220", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.collection_add data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.collection_add", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00221.py -- tests/files/web/generated/M16-GAP-00221-operator-armature.collection_add.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00221", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00221" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00221.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2315, + "contextRemainingTokens": 578 + }, + "source": { + "bytes": 7589, + "tokens": 1898 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00221.py", + "bytes": 1290, + "tokens": 323 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00221-operator-armature.collection_add.blend", + "bytes": 86279, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 237877, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 579287, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00221/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00221.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00221/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1290, + "tokens": 323 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00222", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00221.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00220/manifest.json", + "parentStatus": "docs/status/M16-GAP-00220.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00221.md", + "tests/golden/M16-GAP-00220/manifest.json", + "docs/status/M16-GAP-00220.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00220", + "parentTask": "M16-GAP-00219", + "status": "done", + "nextTask": "M16-GAP-00221", + "artifactCount": 14 + }, + "statusSummary": [ + "# M16-GAP-00220 Status", + "status: done", + "task: armature.click_extrude operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one selected armature bone from `(0, 0, 0)` to `(0, 2, 0)` and a fixed cursor at `(1.5, 2.0, 1.0)`.", + "- Desktop runs `ARMATURE_OT_click_extrude` with `poll=true` and `FINISHED`, creating a connected `.001` child whose armature-space tail reaches the cursor and preserving it through save/reopen.", + "- The existing Main reader exposes the parent relationship, raw child coordinates, and rest matrix; the comparator derives the same armature-space endpoint without changing unrelated armature fields." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1804, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 451 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00221.md", + "bytes": 1804, + "lines": 38, + "tokens": 451 + }, + { + "path": "tests/golden/M16-GAP-00220/manifest.json", + "bytes": 2528, + "lines": 28, + "tokens": 632 + }, + { + "path": "docs/status/M16-GAP-00220.md", + "bytes": 1089, + "lines": 20, + "tokens": 273 + } + ], + "sourceTokens": 1898, + "evidenceFiles": 1, + "evidenceBytes": 1290, + "evidenceTokens": 323, + "totalTokens": 2221, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3245, + "serializedContextTokens": 757, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00222/armature-collection-assign-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00222/armature-collection-assign-desktop-report.json new file mode 100644 index 00000000..6dd21efe --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00222/armature-collection-assign-desktop-report.json @@ -0,0 +1,53 @@ +{ + "after": { + "armature": "WebGapArmatureCollectionAssignArmature", + "collections": [ + { + "bones": [ + "WebGapArmatureCollectionAssignBone" + ], + "index": 0, + "name": "WebGapArmatureCollectionAssignSource" + }, + { + "bones": [ + "WebGapArmatureCollectionAssignBone" + ], + "index": 1, + "name": "WebGapArmatureCollectionAssignTarget" + } + ], + "object": "WebGapArmatureCollectionAssignObject" + }, + "alreadyAssigned": true, + "before": { + "armature": "WebGapArmatureCollectionAssignArmature", + "collections": [ + { + "bones": [ + "WebGapArmatureCollectionAssignBone" + ], + "index": 0, + "name": "WebGapArmatureCollectionAssignSource" + }, + { + "bones": [ + "WebGapArmatureCollectionAssignBone" + ], + "index": 1, + "name": "WebGapArmatureCollectionAssignTarget" + } + ], + "object": "WebGapArmatureCollectionAssignObject" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00222-operator-armature.collection_assign.blend", + "fixtureSha256": "c742316be6dbd00fe3d5caf804b41067839a344a0725fe3c3aa78d1ebc024b8a", + "mainMutation": "ALREADY_BONE_ASSIGNED_TO_TARGET_COLLECTION", + "operation": "ARMATURE_COLLECTION_ASSIGN_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00222" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00222/armature-collection-assign-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00222/armature-collection-assign-local-exact-report.json new file mode 100644 index 00000000..f6810296 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00222/armature-collection-assign-local-exact-report.json @@ -0,0 +1,41 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00222", + "operation": "ARMATURE_COLLECTION_ASSIGN_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00222-operator-armature.collection_assign.blend", + "sha256": "c742316be6dbd00fe3d5caf804b41067839a344a0725fe3c3aa78d1ebc024b8a" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00222/armature-collection-assign-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "ALREADY_BONE_ASSIGNED_TO_TARGET_COLLECTION" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureCollectionAssignArmature", + "assignedBoneId": "bone:armature:WebGapArmatureCollectionAssignArmature:WebGapArmatureCollectionAssignBone", + "sourceCollection": { + "id": "bone_collection:armature:WebGapArmatureCollectionAssignArmature:WebGapArmatureCollectionAssignSource", + "name": "WebGapArmatureCollectionAssignSource", + "boneIds": [ + "bone:armature:WebGapArmatureCollectionAssignArmature:WebGapArmatureCollectionAssignBone" + ] + }, + "targetCollection": { + "id": "bone_collection:armature:WebGapArmatureCollectionAssignArmature:WebGapArmatureCollectionAssignTarget", + "name": "WebGapArmatureCollectionAssignTarget", + "boneIds": [ + "bone:armature:WebGapArmatureCollectionAssignArmature:WebGapArmatureCollectionAssignBone" + ] + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00223" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00222/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00222/manifest.json new file mode 100644 index 00000000..7383ce87 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00222/manifest.json @@ -0,0 +1,27 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00222", + "parentTask": "M16-GAP-00221", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_COLLECTION_ASSIGN_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00221/manifest.json", "sha256": "74053893965d4a9f206a601edb4ebd1c7fa1e25d8545924e7880b1ad25fada1d"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00222-operator-armature.collection_assign.blend", "sha256": "c742316be6dbd00fe3d5caf804b41067839a344a0725fe3c3aa78d1ebc024b8a"}, + "generator": {"path": "tools/web/generated/M16-GAP-00222.py", "sha256": "74ddcb85092783361facd3388f3bfae2ea1794b6d1395f2381928f8e296d3c5c"}, + "desktopChecker": {"path": "tools/web/check-action-armature-collection-assign-desktop.py", "sha256": "92c6b8d031631ace79523ef4200508621aa8bd0b9ae2d5a8cd84a9cdbd91a559"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "ffb30925fa7f66ec1df8279dc29ff8933119ca8d7d09e1ad9062f4096b79d020"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "c56d254a74ace9664104f139692cf37f825547301824872bfd8db95f6ad2117b"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "82b9fb9488a20543f0db1235b18a7c28b2593ac498c152a12f45f8299ced1927"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "82b9fb9488a20543f0db1235b18a7c28b2593ac498c152a12f45f8299ced1927"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00222/armature-collection-assign-desktop-report.json", "sha256": "db90ed0998768c9009f1c19b9eec12392d5c73bc7ca914a780bdd6721b41e932"}, + "webReport": {"path": "tests/golden/M16-GAP-00222/armature-collection-assign-local-exact-report.json", "sha256": "1b8650f03a1d51cd58f28be3a2bca0d44b34284b82708f5c16972360b9695791"}, + "status": {"path": "docs/status/M16-GAP-00222.md", "sha256": "61664acc268f0ddc6e53aec409e07b907dcff1e4bd75882f0b2fd0c92ad0c989"}, + "taskContext": {"path": "tests/golden/M16-GAP-00222/task-context.json", "sha256": "c512eb33c57c21e0d140eab83a6bf9df69011a31148a08449aefc8a63de195da"} + }, + "nextTask": "M16-GAP-00223" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00222/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00222/task-context.json new file mode 100644 index 00000000..d09ec5a5 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00222/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00222", + "parentTask": "M16-GAP-00221", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.collection_assign data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.collection_assign", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00222.py -- tests/files/web/generated/M16-GAP-00222-operator-armature.collection_assign.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00222", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00222" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00222.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2352, + "contextRemainingTokens": 587 + }, + "source": { + "bytes": 7552, + "tokens": 1889 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00222.py", + "bytes": 1403, + "tokens": 351 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00222-operator-armature.collection_assign.blend", + "bytes": 86283, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 237877, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 583485, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00222/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00222.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00222/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1403, + "tokens": 351 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00223", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00222.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00221/manifest.json", + "parentStatus": "docs/status/M16-GAP-00221.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00222.md", + "tests/golden/M16-GAP-00221/manifest.json", + "docs/status/M16-GAP-00221.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00221", + "parentTask": "M16-GAP-00220", + "status": "done", + "nextTask": "M16-GAP-00222", + "artifactCount": 14 + }, + "statusSummary": [ + "# M16-GAP-00221 Status", + "status: done", + "task: armature.collection_add operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one armature bone assigned to `WebGapArmatureCollectionAddExisting`.", + "- Desktop runs `ARMATURE_OT_collection_add` with `poll=true` and `FINISHED`, creating the `Bones` collection as index 1 and preserving the existing bone membership through save/reopen.", + "- The existing Main reader exposes both bone collections and their member IDs; no new reader field, data-block, editor, or browser behavior was added." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1819, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 455 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00222.md", + "bytes": 1819, + "lines": 38, + "tokens": 455 + }, + { + "path": "tests/golden/M16-GAP-00221/manifest.json", + "bytes": 2533, + "lines": 28, + "tokens": 634 + }, + { + "path": "docs/status/M16-GAP-00221.md", + "bytes": 1032, + "lines": 20, + "tokens": 258 + } + ], + "sourceTokens": 1889, + "evidenceFiles": 1, + "evidenceBytes": 1403, + "evidenceTokens": 351, + "totalTokens": 2240, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3264, + "serializedContextTokens": 759, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00223/armature-collection-create-assign-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00223/armature-collection-create-assign-desktop-report.json new file mode 100644 index 00000000..1028def4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00223/armature-collection-create-assign-desktop-report.json @@ -0,0 +1,55 @@ +{ + "after": { + "activeIndex": 1, + "armature": "WebGapArmatureCollectionCreateAssignArmature", + "collections": [ + { + "bones": [ + "WebGapArmatureCollectionCreateAssignBone" + ], + "index": 0, + "name": "WebGapArmatureCollectionCreateAssignSource" + }, + { + "bones": [ + "WebGapArmatureCollectionCreateAssignBone" + ], + "index": 1, + "name": "WebGapArmatureCollectionCreateAssignNew" + } + ], + "object": "WebGapArmatureCollectionCreateAssignObject" + }, + "alreadyCreated": true, + "before": { + "activeIndex": 1, + "armature": "WebGapArmatureCollectionCreateAssignArmature", + "collections": [ + { + "bones": [ + "WebGapArmatureCollectionCreateAssignBone" + ], + "index": 0, + "name": "WebGapArmatureCollectionCreateAssignSource" + }, + { + "bones": [ + "WebGapArmatureCollectionCreateAssignBone" + ], + "index": 1, + "name": "WebGapArmatureCollectionCreateAssignNew" + } + ], + "object": "WebGapArmatureCollectionCreateAssignObject" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00223-operator-armature.collection_create_and_assign.blend", + "fixtureSha256": "a028eb51fe9f4e81778cd5e237820c050c88588266cb39cd2a0fb4b15d33c8c8", + "mainMutation": "ALREADY_NEW_COLLECTION_CREATED_AND_BONE_ASSIGNED", + "operation": "ARMATURE_COLLECTION_CREATE_AND_ASSIGN_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00223" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00223/armature-collection-create-assign-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00223/armature-collection-create-assign-local-exact-report.json new file mode 100644 index 00000000..fbc25cc9 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00223/armature-collection-create-assign-local-exact-report.json @@ -0,0 +1,42 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00223", + "operation": "ARMATURE_COLLECTION_CREATE_AND_ASSIGN_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00223-operator-armature.collection_create_and_assign.blend", + "sha256": "a028eb51fe9f4e81778cd5e237820c050c88588266cb39cd2a0fb4b15d33c8c8" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00223/armature-collection-create-assign-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "ALREADY_NEW_COLLECTION_CREATED_AND_BONE_ASSIGNED" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureCollectionCreateAssignArmature", + "assignedBoneId": "bone:armature:WebGapArmatureCollectionCreateAssignArmature:WebGapArmatureCollectionCreateAssignBone", + "sourceCollection": { + "id": "bone_collection:armature:WebGapArmatureCollectionCreateAssignArmature:WebGapArmatureCollectionCreateAssignSource", + "name": "WebGapArmatureCollectionCreateAssignSource", + "boneIds": [ + "bone:armature:WebGapArmatureCollectionCreateAssignArmature:WebGapArmatureCollectionCreateAssignBone" + ] + }, + "createdCollection": { + "id": "bone_collection:armature:WebGapArmatureCollectionCreateAssignArmature:WebGapArmatureCollectionCreateAssignNew", + "name": "WebGapArmatureCollectionCreateAssignNew", + "index": 1, + "boneIds": [ + "bone:armature:WebGapArmatureCollectionCreateAssignArmature:WebGapArmatureCollectionCreateAssignBone" + ] + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00224" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00223/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00223/manifest.json new file mode 100644 index 00000000..da1a22e7 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00223/manifest.json @@ -0,0 +1,27 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00223", + "parentTask": "M16-GAP-00222", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_COLLECTION_CREATE_AND_ASSIGN_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00222/manifest.json", "sha256": "593bc1ad27a621ce73a50f1f13512518032f1d328411fde6d53b9c16450d1184"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00223-operator-armature.collection_create_and_assign.blend", "sha256": "a028eb51fe9f4e81778cd5e237820c050c88588266cb39cd2a0fb4b15d33c8c8"}, + "generator": {"path": "tools/web/generated/M16-GAP-00223.py", "sha256": "8edf3fc266d93bb225a0f13d16034a2518f2a85f424931d9c570626417c5ce11"}, + "desktopChecker": {"path": "tools/web/check-action-armature-collection-create-assign-desktop.py", "sha256": "4e6ee367c86279625bed4475f05abd3596329c2bd1c54c295f96118d5156cec1"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "58e7a4c517f5244deb9cd6ebbec09cc6d0ac6ca8e4c68305e1a2964218c5259f"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "c56d254a74ace9664104f139692cf37f825547301824872bfd8db95f6ad2117b"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "82b9fb9488a20543f0db1235b18a7c28b2593ac498c152a12f45f8299ced1927"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "82b9fb9488a20543f0db1235b18a7c28b2593ac498c152a12f45f8299ced1927"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00223/armature-collection-create-assign-desktop-report.json", "sha256": "d02d028f7ec561db7363feea7f5504c5f8f7d719cd36b6a6f2edb70847996b4c"}, + "webReport": {"path": "tests/golden/M16-GAP-00223/armature-collection-create-assign-local-exact-report.json", "sha256": "14b7947dd2485e11eeb2045d565fe97732865abc4aceb0e6765e3ab2fbe0f63f"}, + "status": {"path": "docs/status/M16-GAP-00223.md", "sha256": "4067ee986f0ff940d8ec7ba937bbdf4b7f81eab5779a3cbdd7287dbb7fdc6de5"}, + "taskContext": {"path": "tests/golden/M16-GAP-00223/task-context.json", "sha256": "a9b51398cc072d9ca64ea26ed4a10e5988ec4ba428dc1af18a54997c640d7638"} + }, + "nextTask": "M16-GAP-00224" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00223/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00223/task-context.json new file mode 100644 index 00000000..4a95ff30 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00223/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00223", + "parentTask": "M16-GAP-00222", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.collection_create_and_assign data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.collection_create_and_assign", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00223.py -- tests/files/web/generated/M16-GAP-00223-operator-armature.collection_create_and_assign.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00223", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00223" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00223.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2259, + "contextRemainingTokens": 564 + }, + "source": { + "bytes": 7645, + "tokens": 1912 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00223.py", + "bytes": 1320, + "tokens": 330 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00223-operator-armature.collection_create_and_assign.blend", + "bytes": 86294, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 237877, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 587994, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00223/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00223.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00223/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1320, + "tokens": 330 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00224", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00223.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00222/manifest.json", + "parentStatus": "docs/status/M16-GAP-00222.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00223.md", + "tests/golden/M16-GAP-00222/manifest.json", + "docs/status/M16-GAP-00222.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00222", + "parentTask": "M16-GAP-00221", + "status": "done", + "nextTask": "M16-GAP-00223", + "artifactCount": 14 + }, + "statusSummary": [ + "# M16-GAP-00222 Status", + "status: done", + "task: armature.collection_assign operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one armature bone assigned to `WebGapArmatureCollectionAssignSource` and an empty target collection.", + "- Desktop runs `ARMATURE_OT_collection_assign(name=target)` with `poll=true` and `FINISHED`, adding the selected bone to the target while preserving its source membership through save/reopen.", + "- The existing Main reader exposes both collection member ID lists; no new reader field, data-block, editor, or browser behavior was added." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1874, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 469 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00223.md", + "bytes": 1874, + "lines": 38, + "tokens": 469 + }, + { + "path": "tests/golden/M16-GAP-00222/manifest.json", + "bytes": 2548, + "lines": 28, + "tokens": 637 + }, + { + "path": "docs/status/M16-GAP-00222.md", + "bytes": 1055, + "lines": 20, + "tokens": 264 + } + ], + "sourceTokens": 1912, + "evidenceFiles": 1, + "evidenceBytes": 1320, + "evidenceTokens": 330, + "totalTokens": 2242, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3266, + "serializedContextTokens": 767, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00224/armature-collection-deselect-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00224/armature-collection-deselect-desktop-report.json new file mode 100644 index 00000000..6b1100cd --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00224/armature-collection-deselect-desktop-report.json @@ -0,0 +1,43 @@ +{ + "after": { + "activeIndex": 0, + "armature": "WebGapArmatureCollectionDeselectArmature", + "bones": [ + { + "name": "WebGapArmatureCollectionDeselectActiveBone", + "selected": false + }, + { + "name": "WebGapArmatureCollectionDeselectOtherBone", + "selected": true + } + ], + "object": "WebGapArmatureCollectionDeselectObject" + }, + "alreadyDeselected": true, + "before": { + "activeIndex": 0, + "armature": "WebGapArmatureCollectionDeselectArmature", + "bones": [ + { + "name": "WebGapArmatureCollectionDeselectActiveBone", + "selected": false + }, + { + "name": "WebGapArmatureCollectionDeselectOtherBone", + "selected": true + } + ], + "object": "WebGapArmatureCollectionDeselectObject" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00224-operator-armature.collection_deselect.blend", + "fixtureSha256": "1a8405355bb6fda930f31f396f9e34ec97c95ceed4b639fce9522c1e82f73b7f", + "mainMutation": "ACTIVE_COLLECTION_BONES_ALREADY_DESELECTED", + "operation": "ARMATURE_COLLECTION_DESELECT_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00224" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00224/armature-collection-deselect-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00224/armature-collection-deselect-local-exact-report.json new file mode 100644 index 00000000..00e0f476 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00224/armature-collection-deselect-local-exact-report.json @@ -0,0 +1,31 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00224", + "operation": "ARMATURE_COLLECTION_DESELECT_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00224-operator-armature.collection_deselect.blend", + "sha256": "1a8405355bb6fda930f31f396f9e34ec97c95ceed4b639fce9522c1e82f73b7f" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00224/armature-collection-deselect-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "ACTIVE_COLLECTION_BONES_ALREADY_DESELECTED" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureCollectionDeselectArmature", + "activeCollectionIndex": 0, + "deselectedBoneId": "bone:armature:WebGapArmatureCollectionDeselectArmature:WebGapArmatureCollectionDeselectActiveBone", + "retainedSelectedBoneId": "bone:armature:WebGapArmatureCollectionDeselectArmature:WebGapArmatureCollectionDeselectOtherBone", + "deselected": false, + "retainedSelected": true + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00225" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00224/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00224/manifest.json new file mode 100644 index 00000000..e9f95a65 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00224/manifest.json @@ -0,0 +1,27 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00224", + "parentTask": "M16-GAP-00223", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_COLLECTION_DESELECT_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00223/manifest.json", "sha256": "3cb48f423f3ecac5f8ad7c7404acab3803a8e273e23d8021b3682d4a6fcd0875"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00224-operator-armature.collection_deselect.blend", "sha256": "1a8405355bb6fda930f31f396f9e34ec97c95ceed4b639fce9522c1e82f73b7f"}, + "generator": {"path": "tools/web/generated/M16-GAP-00224.py", "sha256": "26498cbab951fc7494cc364a6487de4b2901ddf17844b95c1c5416dcb058087c"}, + "desktopChecker": {"path": "tools/web/check-action-armature-collection-deselect-desktop.py", "sha256": "302d827119a02a62770a172cf3624c84b9c83463b0ef10d35c1854a5e767ffb3"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "26e467682becf34248f18cb5aca81c49105cfc3874b3e468b985556d8dbea9df"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "b72a1e1416d44b9c84e94425fb17c6a2eed3e3921c726c2719fb3fe64f652553"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "85651e3c088e2c0c1866871d3ac7f9ec65e0b9ced5261718ed59841eee85b23f"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "85651e3c088e2c0c1866871d3ac7f9ec65e0b9ced5261718ed59841eee85b23f"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00224/armature-collection-deselect-desktop-report.json", "sha256": "78b8615c71b02dbcb6b2b88086118b9c713aa3762ddf5d947ae0b696d72d7744"}, + "webReport": {"path": "tests/golden/M16-GAP-00224/armature-collection-deselect-local-exact-report.json", "sha256": "9bfc7c03a0e46bb31069e987c0a60dea1ebb0b5c17dbe382fb1d1847ad42595c"}, + "status": {"path": "docs/status/M16-GAP-00224.md", "sha256": "25f0a2dc6478e179122efad2467952a0e75eb5ff0437e0c0f2b3639f034d744c"}, + "taskContext": {"path": "tests/golden/M16-GAP-00224/task-context.json", "sha256": "7201e11f59e90287699d96e377865963fe9f8aede63b4447941642bf877e2574"} + }, + "nextTask": "M16-GAP-00225" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00224/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00224/task-context.json new file mode 100644 index 00000000..be8ae138 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00224/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00224", + "parentTask": "M16-GAP-00223", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.collection_deselect data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.collection_deselect", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00224.py -- tests/files/web/generated/M16-GAP-00224-operator-armature.collection_deselect.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00224", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00224" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00224.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2145, + "contextRemainingTokens": 535 + }, + "source": { + "bytes": 7759, + "tokens": 1941 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00224.py", + "bytes": 1881, + "tokens": 471 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00224-operator-armature.collection_deselect.blend", + "bytes": 86423, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 238013, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 592080, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00224/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00224.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00224/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1881, + "tokens": 471 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00225", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00224.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00223/manifest.json", + "parentStatus": "docs/status/M16-GAP-00223.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00224.md", + "tests/golden/M16-GAP-00223/manifest.json", + "docs/status/M16-GAP-00223.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00223", + "parentTask": "M16-GAP-00222", + "status": "done", + "nextTask": "M16-GAP-00224", + "artifactCount": 14 + }, + "statusSummary": [ + "# M16-GAP-00223 Status", + "status: done", + "task: armature.collection_create_and_assign operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one armature bone assigned to `WebGapArmatureCollectionCreateAssignSource`.", + "- Desktop runs `ARMATURE_OT_collection_create_and_assign(name=WebGapArmatureCollectionCreateAssignNew)` with `poll=true` and `FINISHED`, creating and activating the new collection while assigning the selected bone and preserving source membership through save/reopen.", + "- The existing Main reader exposes both collection member ID lists and collection indices; no new reader field, data-block, editor, or browser behavior was added." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1829, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 458 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00224.md", + "bytes": 1829, + "lines": 38, + "tokens": 458 + }, + { + "path": "tests/golden/M16-GAP-00223/manifest.json", + "bytes": 2591, + "lines": 28, + "tokens": 648 + }, + { + "path": "docs/status/M16-GAP-00223.md", + "bytes": 1171, + "lines": 20, + "tokens": 293 + } + ], + "sourceTokens": 1941, + "evidenceFiles": 1, + "evidenceBytes": 1881, + "evidenceTokens": 471, + "totalTokens": 2412, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3436, + "serializedContextTokens": 760, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00225/armature-collection-move-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00225/armature-collection-move-desktop-report.json new file mode 100644 index 00000000..44dbbb6c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00225/armature-collection-move-desktop-report.json @@ -0,0 +1,70 @@ +{ + "after": { + "activeIndex": 0, + "armature": "WebGapArmatureCollectionMoveArmature", + "collections": [ + { + "bones": [ + "WebGapArmatureCollectionMoveActiveBone" + ], + "index": 0, + "name": "WebGapArmatureCollectionMoveActive" + }, + { + "bones": [ + "WebGapArmatureCollectionMoveFirstBone" + ], + "index": 1, + "name": "WebGapArmatureCollectionMoveFirst" + }, + { + "bones": [ + "WebGapArmatureCollectionMoveLastBone" + ], + "index": 2, + "name": "WebGapArmatureCollectionMoveLast" + } + ], + "object": "WebGapArmatureCollectionMoveObject" + }, + "alreadyMoved": true, + "before": { + "activeIndex": 0, + "armature": "WebGapArmatureCollectionMoveArmature", + "collections": [ + { + "bones": [ + "WebGapArmatureCollectionMoveActiveBone" + ], + "index": 0, + "name": "WebGapArmatureCollectionMoveActive" + }, + { + "bones": [ + "WebGapArmatureCollectionMoveFirstBone" + ], + "index": 1, + "name": "WebGapArmatureCollectionMoveFirst" + }, + { + "bones": [ + "WebGapArmatureCollectionMoveLastBone" + ], + "index": 2, + "name": "WebGapArmatureCollectionMoveLast" + } + ], + "object": "WebGapArmatureCollectionMoveObject" + }, + "blenderVersion": "5.2.0 LTS", + "direction": "UP", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00225-operator-armature.collection_move.blend", + "fixtureSha256": "ae87b298fce55732961119fd8a36568c137023eed9002c26a9575578d3d983b5", + "mainMutation": "ACTIVE_COLLECTION_ALREADY_MOVED_UP", + "operation": "ARMATURE_COLLECTION_MOVE_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00225" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00225/armature-collection-move-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00225/armature-collection-move-local-exact-report.json new file mode 100644 index 00000000..7d6f4f36 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00225/armature-collection-move-local-exact-report.json @@ -0,0 +1,55 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00225", + "operation": "ARMATURE_COLLECTION_MOVE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00225-operator-armature.collection_move.blend", + "sha256": "ae87b298fce55732961119fd8a36568c137023eed9002c26a9575578d3d983b5" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00225/armature-collection-move-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "direction": "UP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "ACTIVE_COLLECTION_ALREADY_MOVED_UP" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureCollectionMoveArmature", + "direction": "UP", + "activeCollection": "WebGapArmatureCollectionMoveActive", + "collectionOrder": [ + { + "id": "bone_collection:armature:WebGapArmatureCollectionMoveArmature:WebGapArmatureCollectionMoveActive", + "name": "WebGapArmatureCollectionMoveActive", + "index": 0, + "boneIds": [ + "bone:armature:WebGapArmatureCollectionMoveArmature:WebGapArmatureCollectionMoveActiveBone" + ] + }, + { + "id": "bone_collection:armature:WebGapArmatureCollectionMoveArmature:WebGapArmatureCollectionMoveFirst", + "name": "WebGapArmatureCollectionMoveFirst", + "index": 1, + "boneIds": [ + "bone:armature:WebGapArmatureCollectionMoveArmature:WebGapArmatureCollectionMoveFirstBone" + ] + }, + { + "id": "bone_collection:armature:WebGapArmatureCollectionMoveArmature:WebGapArmatureCollectionMoveLast", + "name": "WebGapArmatureCollectionMoveLast", + "index": 2, + "boneIds": [ + "bone:armature:WebGapArmatureCollectionMoveArmature:WebGapArmatureCollectionMoveLastBone" + ] + } + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00226" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00225/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00225/manifest.json new file mode 100644 index 00000000..72c24b7c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00225/manifest.json @@ -0,0 +1,27 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00225", + "parentTask": "M16-GAP-00224", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_COLLECTION_MOVE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00224/manifest.json", "sha256": "2319012188014b56201f54d47b9714af337f97c6359000bc1ceff77ea12aa083"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00225-operator-armature.collection_move.blend", "sha256": "ae87b298fce55732961119fd8a36568c137023eed9002c26a9575578d3d983b5"}, + "generator": {"path": "tools/web/generated/M16-GAP-00225.py", "sha256": "60175e59c0362eff81649fcdcbd180fea7f06233ebd7d42cb3d35d2e66804901"}, + "desktopChecker": {"path": "tools/web/check-action-armature-collection-move-desktop.py", "sha256": "6babe7d65549e4b06f4a9790af3ce6dabdf3131831f5d26442d6c1c6d0099f90"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "b00b3089aa75123ecb91187fc8e47ce6fc5b4c98dd6a8c8abb6af6d56b1f7b7c"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "b72a1e1416d44b9c84e94425fb17c6a2eed3e3921c726c2719fb3fe64f652553"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "85651e3c088e2c0c1866871d3ac7f9ec65e0b9ced5261718ed59841eee85b23f"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "85651e3c088e2c0c1866871d3ac7f9ec65e0b9ced5261718ed59841eee85b23f"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00225/armature-collection-move-desktop-report.json", "sha256": "06074b980f8df448546afcf0c96e89e47bcb160b309db81c869d525b35b281ad"}, + "webReport": {"path": "tests/golden/M16-GAP-00225/armature-collection-move-local-exact-report.json", "sha256": "aa0becd48b2e42dc3c3ac7222d6e0486ffc8089bceefb3670f102fecd6d1f2e6"}, + "status": {"path": "docs/status/M16-GAP-00225.md", "sha256": "3330f1d33b17b920a261497023dc4ca06079837f69ba39251ab8d48a31bc73c0"}, + "taskContext": {"path": "tests/golden/M16-GAP-00225/task-context.json", "sha256": "a946ed0bc5ef3004a227fb461dec0b46e1a571ddeeb7deaac46f08d4a4e840d6"} + }, + "nextTask": "M16-GAP-00226" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00225/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00225/task-context.json new file mode 100644 index 00000000..55787604 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00225/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00225", + "parentTask": "M16-GAP-00224", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.collection_move data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.collection_move", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00225.py -- tests/files/web/generated/M16-GAP-00225-operator-armature.collection_move.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00225", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00225" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00225.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2273, + "contextRemainingTokens": 567 + }, + "source": { + "bytes": 7631, + "tokens": 1909 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00225.py", + "bytes": 1764, + "tokens": 441 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00225-operator-armature.collection_move.blend", + "bytes": 86467, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 238013, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 596398, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00225/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00225.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00225/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1764, + "tokens": 441 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00226", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00225.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00224/manifest.json", + "parentStatus": "docs/status/M16-GAP-00224.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00225.md", + "tests/golden/M16-GAP-00224/manifest.json", + "docs/status/M16-GAP-00224.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00224", + "parentTask": "M16-GAP-00223", + "status": "done", + "nextTask": "M16-GAP-00225", + "artifactCount": 14 + }, + "statusSummary": [ + "# M16-GAP-00224 Status", + "status: done", + "task: armature.collection_deselect operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains two bones in separate bone collections, both initially selected, with the active collection at index 0.", + "- Desktop runs `ARMATURE_OT_collection_deselect` with `poll=true` and `FINISHED`, deselecting only the active collection bone while retaining the other selection through save/reopen.", + "- Main now exposes the persisted armature bone `selected` bit alongside the existing bone collection membership data; no other data-block, editor, or browser behavior was added." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1809, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 453 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00225.md", + "bytes": 1809, + "lines": 38, + "tokens": 453 + }, + { + "path": "tests/golden/M16-GAP-00224/manifest.json", + "bytes": 2558, + "lines": 28, + "tokens": 640 + }, + { + "path": "docs/status/M16-GAP-00224.md", + "bytes": 1096, + "lines": 20, + "tokens": 274 + } + ], + "sourceTokens": 1909, + "evidenceFiles": 1, + "evidenceBytes": 1764, + "evidenceTokens": 441, + "totalTokens": 2350, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3374, + "serializedContextTokens": 757, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00226/armature-collection-remove-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00226/armature-collection-remove-desktop-report.json new file mode 100644 index 00000000..48828afb --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00226/armature-collection-remove-desktop-report.json @@ -0,0 +1,65 @@ +{ + "after": { + "activeIndex": 1, + "armature": "WebGapArmatureCollectionRemoveArmature", + "bones": [ + "WebGapArmatureCollectionRemoveFirstBone", + "WebGapArmatureCollectionRemoveLastBone", + "WebGapArmatureCollectionRemoveRemovedBone" + ], + "collections": [ + { + "bones": [ + "WebGapArmatureCollectionRemoveFirstBone" + ], + "index": 0, + "name": "WebGapArmatureCollectionRemoveFirst" + }, + { + "bones": [ + "WebGapArmatureCollectionRemoveLastBone" + ], + "index": 1, + "name": "WebGapArmatureCollectionRemoveLast" + } + ], + "object": "WebGapArmatureCollectionRemoveObject" + }, + "alreadyRemoved": true, + "before": { + "activeIndex": 1, + "armature": "WebGapArmatureCollectionRemoveArmature", + "bones": [ + "WebGapArmatureCollectionRemoveFirstBone", + "WebGapArmatureCollectionRemoveLastBone", + "WebGapArmatureCollectionRemoveRemovedBone" + ], + "collections": [ + { + "bones": [ + "WebGapArmatureCollectionRemoveFirstBone" + ], + "index": 0, + "name": "WebGapArmatureCollectionRemoveFirst" + }, + { + "bones": [ + "WebGapArmatureCollectionRemoveLastBone" + ], + "index": 1, + "name": "WebGapArmatureCollectionRemoveLast" + } + ], + "object": "WebGapArmatureCollectionRemoveObject" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00226-operator-armature.collection_remove.blend", + "fixtureSha256": "1e3ba5e46b8b45ca974b93b0f357cc5305c787032564ecbecfc9e1ae4e8ff9d5", + "mainMutation": "ACTIVE_COLLECTION_ALREADY_REMOVED", + "operation": "ARMATURE_COLLECTION_REMOVE_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00226" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00226/armature-collection-remove-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00226/armature-collection-remove-local-exact-report.json new file mode 100644 index 00000000..897a726d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00226/armature-collection-remove-local-exact-report.json @@ -0,0 +1,46 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00226", + "operation": "ARMATURE_COLLECTION_REMOVE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00226-operator-armature.collection_remove.blend", + "sha256": "1e3ba5e46b8b45ca974b93b0f357cc5305c787032564ecbecfc9e1ae4e8ff9d5" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00226/armature-collection-remove-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "ACTIVE_COLLECTION_ALREADY_REMOVED" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureCollectionRemoveArmature", + "removedCollection": "WebGapArmatureCollectionRemoveRemoved", + "removedBoneId": "bone:armature:WebGapArmatureCollectionRemoveArmature:WebGapArmatureCollectionRemoveRemovedBone", + "collectionOrder": [ + { + "id": "bone_collection:armature:WebGapArmatureCollectionRemoveArmature:WebGapArmatureCollectionRemoveFirst", + "name": "WebGapArmatureCollectionRemoveFirst", + "index": 0, + "boneIds": [ + "bone:armature:WebGapArmatureCollectionRemoveArmature:WebGapArmatureCollectionRemoveFirstBone" + ] + }, + { + "id": "bone_collection:armature:WebGapArmatureCollectionRemoveArmature:WebGapArmatureCollectionRemoveLast", + "name": "WebGapArmatureCollectionRemoveLast", + "index": 1, + "boneIds": [ + "bone:armature:WebGapArmatureCollectionRemoveArmature:WebGapArmatureCollectionRemoveLastBone" + ] + } + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00227" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00226/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00226/manifest.json new file mode 100644 index 00000000..9b1036b1 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00226/manifest.json @@ -0,0 +1,27 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00226", + "parentTask": "M16-GAP-00225", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_COLLECTION_REMOVE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00225/manifest.json", "sha256": "f5d2ee089b76a849567fc8f00d191bb722651a206fa0f00542e4a9d796d33e72"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00226-operator-armature.collection_remove.blend", "sha256": "1e3ba5e46b8b45ca974b93b0f357cc5305c787032564ecbecfc9e1ae4e8ff9d5"}, + "generator": {"path": "tools/web/generated/M16-GAP-00226.py", "sha256": "bf2375e84e871ada6615365fbda390de46a6f7adf1202d76ff6d6b34ea7ef364"}, + "desktopChecker": {"path": "tools/web/check-action-armature-collection-remove-desktop.py", "sha256": "071d8360f7aff11fa3466e96133c9401525a5f31a4beec6c5fde46b43329dbc8"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "547aaa82fd1baa50190fa294309a07a0f2b077fa2d9d80bae916c60cb027f074"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "b72a1e1416d44b9c84e94425fb17c6a2eed3e3921c726c2719fb3fe64f652553"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "85651e3c088e2c0c1866871d3ac7f9ec65e0b9ced5261718ed59841eee85b23f"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "85651e3c088e2c0c1866871d3ac7f9ec65e0b9ced5261718ed59841eee85b23f"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00226/armature-collection-remove-desktop-report.json", "sha256": "525ca8c6954750c9982bf91cbb3f26c9ad7a81911d56890dd6570cccfdbe3b37"}, + "webReport": {"path": "tests/golden/M16-GAP-00226/armature-collection-remove-local-exact-report.json", "sha256": "6df4c731b900161076a59892d26f15a8775d18571f27eb88321f890f91c9b9a0"}, + "status": {"path": "docs/status/M16-GAP-00226.md", "sha256": "e4d4e214d2f1fd8c1872978d18ce28bee65fc7c4ded0c6869780af0343d12d5d"}, + "taskContext": {"path": "tests/golden/M16-GAP-00226/task-context.json", "sha256": "b5bb4620750aea7f1773049c127349b7fca058c3345cecae20e302d8054632f8"} + }, + "nextTask": "M16-GAP-00227" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00226/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00226/task-context.json new file mode 100644 index 00000000..45bd2c92 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00226/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00226", + "parentTask": "M16-GAP-00225", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.collection_remove data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.collection_remove", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00226.py -- tests/files/web/generated/M16-GAP-00226-operator-armature.collection_remove.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00226", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00226" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00226.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2287, + "contextRemainingTokens": 571 + }, + "source": { + "bytes": 7617, + "tokens": 1905 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00226.py", + "bytes": 1789, + "tokens": 448 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00226-operator-armature.collection_remove.blend", + "bytes": 86430, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 238013, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 601033, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00226/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00226.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00226/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1789, + "tokens": 448 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00227", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00226.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00225/manifest.json", + "parentStatus": "docs/status/M16-GAP-00225.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00226.md", + "tests/golden/M16-GAP-00225/manifest.json", + "docs/status/M16-GAP-00225.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00225", + "parentTask": "M16-GAP-00224", + "status": "done", + "nextTask": "M16-GAP-00226", + "artifactCount": 14 + }, + "statusSummary": [ + "# M16-GAP-00225 Status", + "status: done", + "task: armature.collection_move operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains three bone collections, each retaining one distinct bone, with the middle collection active at index 1.", + "- Desktop runs `ARMATURE_OT_collection_move(direction='UP')` with `poll=true` and `FINISHED`, moving the active collection to index 0 while preserving every collection member through save/reopen.", + "- The existing Main reader's collection indices and bone IDs provide the observable order; no new data-block, editor, or browser behavior was added." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1819, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 455 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2168, + "lines": 45, + "tokens": 542 + }, + { + "path": "docs/tasks/M16-GAP-00226.md", + "bytes": 1819, + "lines": 38, + "tokens": 455 + }, + { + "path": "tests/golden/M16-GAP-00225/manifest.json", + "bytes": 2538, + "lines": 28, + "tokens": 635 + }, + { + "path": "docs/status/M16-GAP-00225.md", + "bytes": 1092, + "lines": 20, + "tokens": 273 + } + ], + "sourceTokens": 1905, + "evidenceFiles": 1, + "evidenceBytes": 1789, + "evidenceTokens": 448, + "totalTokens": 2353, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3377, + "serializedContextTokens": 759, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00227/armature-collection-remove-unused-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00227/armature-collection-remove-unused-desktop-report.json new file mode 100644 index 00000000..672a2929 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00227/armature-collection-remove-unused-desktop-report.json @@ -0,0 +1,67 @@ +{ + "after": { + "activeIndex": 1, + "armature": "WebGapArmatureCollectionRemoveUnusedArmature", + "bones": [ + "WebGapArmatureCollectionRemoveUnusedFirstBone", + "WebGapArmatureCollectionRemoveUnusedLastBone" + ], + "collections": [ + { + "bones": [ + "WebGapArmatureCollectionRemoveUnusedFirstBone" + ], + "index": 0, + "name": "WebGapArmatureCollectionRemoveUnusedFirst" + }, + { + "bones": [ + "WebGapArmatureCollectionRemoveUnusedLastBone" + ], + "index": 1, + "name": "WebGapArmatureCollectionRemoveUnusedLast" + } + ], + "object": "WebGapArmatureCollectionRemoveUnusedObject" + }, + "alreadyRemoved": true, + "before": { + "activeIndex": 1, + "armature": "WebGapArmatureCollectionRemoveUnusedArmature", + "bones": [ + "WebGapArmatureCollectionRemoveUnusedFirstBone", + "WebGapArmatureCollectionRemoveUnusedLastBone" + ], + "collections": [ + { + "bones": [ + "WebGapArmatureCollectionRemoveUnusedFirstBone" + ], + "index": 0, + "name": "WebGapArmatureCollectionRemoveUnusedFirst" + }, + { + "bones": [ + "WebGapArmatureCollectionRemoveUnusedLastBone" + ], + "index": 1, + "name": "WebGapArmatureCollectionRemoveUnusedLast" + } + ], + "object": "WebGapArmatureCollectionRemoveUnusedObject" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00227-operator-armature.collection_remove_unused.blend", + "fixtureSha256": "0c898c98dc011e51f086cda66e3af03a08a7b1f27eb0e76f40915f18018a6d97", + "mainMutation": "UNUSED_COLLECTIONS_ALREADY_REMOVED", + "operation": "ARMATURE_COLLECTION_REMOVE_UNUSED_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "removedCollections": [ + "WebGapArmatureCollectionRemoveUnusedUnusedFirst", + "WebGapArmatureCollectionRemoveUnusedUnusedLast" + ], + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00227" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00227/armature-collection-remove-unused-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00227/armature-collection-remove-unused-local-exact-report.json new file mode 100644 index 00000000..e60cd78b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00227/armature-collection-remove-unused-local-exact-report.json @@ -0,0 +1,48 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00227", + "operation": "ARMATURE_COLLECTION_REMOVE_UNUSED_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00227-operator-armature.collection_remove_unused.blend", + "sha256": "0c898c98dc011e51f086cda66e3af03a08a7b1f27eb0e76f40915f18018a6d97" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00227/armature-collection-remove-unused-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "UNUSED_COLLECTIONS_ALREADY_REMOVED" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureCollectionRemoveUnusedArmature", + "removedCollections": [ + "WebGapArmatureCollectionRemoveUnusedUnusedFirst", + "WebGapArmatureCollectionRemoveUnusedUnusedLast" + ], + "collectionOrder": [ + { + "id": "bone_collection:armature:WebGapArmatureCollectionRemoveUnusedArmature:WebGapArmatureCollectionRemoveUnusedFirst", + "name": "WebGapArmatureCollectionRemoveUnusedFirst", + "index": 0, + "boneIds": [ + "bone:armature:WebGapArmatureCollectionRemoveUnusedArmature:WebGapArmatureCollectionRemoveUnusedFirstBone" + ] + }, + { + "id": "bone_collection:armature:WebGapArmatureCollectionRemoveUnusedArmature:WebGapArmatureCollectionRemoveUnusedLast", + "name": "WebGapArmatureCollectionRemoveUnusedLast", + "index": 1, + "boneIds": [ + "bone:armature:WebGapArmatureCollectionRemoveUnusedArmature:WebGapArmatureCollectionRemoveUnusedLastBone" + ] + } + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00228" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00227/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00227/manifest.json new file mode 100644 index 00000000..7161f884 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00227/manifest.json @@ -0,0 +1,27 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00227", + "parentTask": "M16-GAP-00226", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_COLLECTION_REMOVE_UNUSED_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00226/manifest.json", "sha256": "e071c8ee3fc09259fd23c583a094981de94029c700e151632a96973c174aa82d"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00227-operator-armature.collection_remove_unused.blend", "sha256": "0c898c98dc011e51f086cda66e3af03a08a7b1f27eb0e76f40915f18018a6d97"}, + "generator": {"path": "tools/web/generated/M16-GAP-00227.py", "sha256": "c08cad057124430d914c10b3a9f8f79d94809fdd283778397a91085364784ed5"}, + "desktopChecker": {"path": "tools/web/check-action-armature-collection-remove-unused-desktop.py", "sha256": "8bd8c0dfd8170779c3e834a8b3ad8c90e5a646263108b818c19e34be21353bc6"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "5259f28488eab9e6778bc5f7997f0fe90524c2d1f0e2e68c3534f90ffdc444f4"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "b72a1e1416d44b9c84e94425fb17c6a2eed3e3921c726c2719fb3fe64f652553"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "85651e3c088e2c0c1866871d3ac7f9ec65e0b9ced5261718ed59841eee85b23f"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "85651e3c088e2c0c1866871d3ac7f9ec65e0b9ced5261718ed59841eee85b23f"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00227/armature-collection-remove-unused-desktop-report.json", "sha256": "4909e040db7be0d5ac84148d52bb47cbdf0f12a30612e6c1bae1067fd4f04dca"}, + "webReport": {"path": "tests/golden/M16-GAP-00227/armature-collection-remove-unused-local-exact-report.json", "sha256": "b41c86788e6b9e21b04d42bdfaa645d29e669f8dfec9fdfaf96fa09771c64475"}, + "status": {"path": "docs/status/M16-GAP-00227.md", "sha256": "e92da7d66c4674271bbf2a43d524145b19926e1d919eacb27e4afc9ee3ceab51"}, + "taskContext": {"path": "tests/golden/M16-GAP-00227/task-context.json", "sha256": "e7b8b69221ddde77585cf8e66e3c9de3fcc1cedc61739fd4af2e1385e9b5dabd"} + }, + "nextTask": "M16-GAP-00228" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00227/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00227/task-context.json new file mode 100644 index 00000000..421dd98f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00227/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00227", + "parentTask": "M16-GAP-00226", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.collection_remove_unused data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.collection_remove_unused", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00227.py -- tests/files/web/generated/M16-GAP-00227-operator-armature.collection_remove_unused.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00227", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00227" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00227.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1979, + "contextRemainingTokens": 493 + }, + "source": { + "bytes": 7925, + "tokens": 1983 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00227.py", + "bytes": 1833, + "tokens": 459 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00227-operator-armature.collection_remove_unused.blend", + "bytes": 86356, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 238013, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 605827, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00227/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00227.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00227/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1833, + "tokens": 459 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00228", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00227.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00226/manifest.json", + "parentStatus": "docs/status/M16-GAP-00226.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00227.md", + "tests/golden/M16-GAP-00226/manifest.json", + "docs/status/M16-GAP-00226.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00226", + "parentTask": "M16-GAP-00225", + "status": "done", + "nextTask": "M16-GAP-00227", + "artifactCount": 14 + }, + "statusSummary": [ + "# M16-GAP-00226 Status", + "status: done", + "task: armature.collection_remove operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains three bone collections, each initially retaining one distinct bone, with the middle collection active at index 1.", + "- Desktop runs `ARMATURE_OT_collection_remove` with `poll=true` and `FINISHED`, removing the active collection, leaving its bone unassigned, and preserving the remaining collections through save/reopen.", + "- The existing Main reader's collection indices and bone IDs provide the observable removal; no new data-block, editor, or browser behavior was added." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1854, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 464 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2394, + "lines": 47, + "tokens": 599 + }, + { + "path": "docs/tasks/M16-GAP-00227.md", + "bytes": 1854, + "lines": 38, + "tokens": 464 + }, + { + "path": "tests/golden/M16-GAP-00226/manifest.json", + "bytes": 2548, + "lines": 28, + "tokens": 637 + }, + { + "path": "docs/status/M16-GAP-00226.md", + "bytes": 1129, + "lines": 20, + "tokens": 283 + } + ], + "sourceTokens": 1983, + "evidenceFiles": 1, + "evidenceBytes": 1833, + "evidenceTokens": 459, + "totalTokens": 2442, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3466, + "serializedContextTokens": 764, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00228/armature-collection-select-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00228/armature-collection-select-desktop-report.json new file mode 100644 index 00000000..d689b513 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00228/armature-collection-select-desktop-report.json @@ -0,0 +1,88 @@ +{ + "after": { + "activeIndex": 1, + "armature": "WebGapArmatureCollectionSelectArmature", + "bones": [ + "WebGapArmatureCollectionSelectActiveBone", + "WebGapArmatureCollectionSelectFirstBone", + "WebGapArmatureCollectionSelectLastBone" + ], + "collections": [ + { + "bones": [ + "WebGapArmatureCollectionSelectFirstBone" + ], + "index": 0, + "name": "WebGapArmatureCollectionSelectFirst" + }, + { + "bones": [ + "WebGapArmatureCollectionSelectActiveBone" + ], + "index": 1, + "name": "WebGapArmatureCollectionSelectActive" + }, + { + "bones": [ + "WebGapArmatureCollectionSelectLastBone" + ], + "index": 2, + "name": "WebGapArmatureCollectionSelectLast" + } + ], + "object": "WebGapArmatureCollectionSelectObject", + "selectedBones": [ + "WebGapArmatureCollectionSelectActiveBone", + "WebGapArmatureCollectionSelectFirstBone" + ] + }, + "alreadySelected": true, + "before": { + "activeIndex": 1, + "armature": "WebGapArmatureCollectionSelectArmature", + "bones": [ + "WebGapArmatureCollectionSelectActiveBone", + "WebGapArmatureCollectionSelectFirstBone", + "WebGapArmatureCollectionSelectLastBone" + ], + "collections": [ + { + "bones": [ + "WebGapArmatureCollectionSelectFirstBone" + ], + "index": 0, + "name": "WebGapArmatureCollectionSelectFirst" + }, + { + "bones": [ + "WebGapArmatureCollectionSelectActiveBone" + ], + "index": 1, + "name": "WebGapArmatureCollectionSelectActive" + }, + { + "bones": [ + "WebGapArmatureCollectionSelectLastBone" + ], + "index": 2, + "name": "WebGapArmatureCollectionSelectLast" + } + ], + "object": "WebGapArmatureCollectionSelectObject", + "selectedBones": [ + "WebGapArmatureCollectionSelectActiveBone", + "WebGapArmatureCollectionSelectFirstBone" + ] + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00228-operator-armature.collection_select.blend", + "fixtureSha256": "426b86f668d316254e06ff11f6fe59cd79d99216772573d17b2b74187d3ea6ea", + "mainMutation": "ACTIVE_COLLECTION_ALREADY_SELECTED", + "operation": "ARMATURE_COLLECTION_SELECT_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "selectedCollection": "WebGapArmatureCollectionSelectActive", + "task": "M16-GAP-00228" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00228/armature-collection-select-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00228/armature-collection-select-local-exact-report.json new file mode 100644 index 00000000..17d3e23c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00228/armature-collection-select-local-exact-report.json @@ -0,0 +1,57 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00228", + "operation": "ARMATURE_COLLECTION_SELECT_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00228-operator-armature.collection_select.blend", + "sha256": "426b86f668d316254e06ff11f6fe59cd79d99216772573d17b2b74187d3ea6ea" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00228/armature-collection-select-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "ACTIVE_COLLECTION_ALREADY_SELECTED" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureCollectionSelectArmature", + "selectedCollection": "WebGapArmatureCollectionSelectActive", + "selectedBoneIds": [ + "bone:armature:WebGapArmatureCollectionSelectArmature:WebGapArmatureCollectionSelectActiveBone", + "bone:armature:WebGapArmatureCollectionSelectArmature:WebGapArmatureCollectionSelectFirstBone" + ], + "collectionOrder": [ + { + "id": "bone_collection:armature:WebGapArmatureCollectionSelectArmature:WebGapArmatureCollectionSelectFirst", + "name": "WebGapArmatureCollectionSelectFirst", + "index": 0, + "boneIds": [ + "bone:armature:WebGapArmatureCollectionSelectArmature:WebGapArmatureCollectionSelectFirstBone" + ] + }, + { + "id": "bone_collection:armature:WebGapArmatureCollectionSelectArmature:WebGapArmatureCollectionSelectActive", + "name": "WebGapArmatureCollectionSelectActive", + "index": 1, + "boneIds": [ + "bone:armature:WebGapArmatureCollectionSelectArmature:WebGapArmatureCollectionSelectActiveBone" + ] + }, + { + "id": "bone_collection:armature:WebGapArmatureCollectionSelectArmature:WebGapArmatureCollectionSelectLast", + "name": "WebGapArmatureCollectionSelectLast", + "index": 2, + "boneIds": [ + "bone:armature:WebGapArmatureCollectionSelectArmature:WebGapArmatureCollectionSelectLastBone" + ] + } + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00229" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00228/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00228/manifest.json new file mode 100644 index 00000000..7f03a89b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00228/manifest.json @@ -0,0 +1,27 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00228", + "parentTask": "M16-GAP-00227", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_COLLECTION_SELECT_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00227/manifest.json", "sha256": "0bcd90a68235c27347b42900b1df89285363a2b766f0aa58d0d2eb58c3238ca6"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00228-operator-armature.collection_select.blend", "sha256": "426b86f668d316254e06ff11f6fe59cd79d99216772573d17b2b74187d3ea6ea"}, + "generator": {"path": "tools/web/generated/M16-GAP-00228.py", "sha256": "06377349aec2193a46188eea4f6b00c2122442636bea2547166ec96caef2e7a4"}, + "desktopChecker": {"path": "tools/web/check-action-armature-collection-select-desktop.py", "sha256": "cb1db0e83e3ac1dab0db182b786cee39651c90e32817793f262b53a1b8caec89"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "669e8cd26d2d6ffbb2749b1c4011d80e4089d080be50b4b369e4339e5d9bc1fb"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "b72a1e1416d44b9c84e94425fb17c6a2eed3e3921c726c2719fb3fe64f652553"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "85651e3c088e2c0c1866871d3ac7f9ec65e0b9ced5261718ed59841eee85b23f"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "85651e3c088e2c0c1866871d3ac7f9ec65e0b9ced5261718ed59841eee85b23f"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00228/armature-collection-select-desktop-report.json", "sha256": "569c817b422e7947c30e202de7223a8da949127a022ce2b1e4f28de15202a440"}, + "webReport": {"path": "tests/golden/M16-GAP-00228/armature-collection-select-local-exact-report.json", "sha256": "cdb8e8196179776f53406eb67c2d6e838d547a2bae9b3dbb3a337646656abe64"}, + "status": {"path": "docs/status/M16-GAP-00228.md", "sha256": "347c7884e48c5ca488105422e401c93d7b2569886a43230c6d26afa103700132"}, + "taskContext": {"path": "tests/golden/M16-GAP-00228/task-context.json", "sha256": "1518cfbe7e66961eaa29ed27eed18d473e3194fc89575dcaea86007bb74c993b"} + }, + "nextTask": "M16-GAP-00229" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00228/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00228/task-context.json new file mode 100644 index 00000000..a8a53ec7 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00228/task-context.json @@ -0,0 +1,182 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00228", + "parentTask": "M16-GAP-00227", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.collection_select data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.collection_select", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00228.py -- tests/files/web/generated/M16-GAP-00228-operator-armature.collection_select.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00228", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00228" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1962, + "contextRemainingTokens": 489 + }, + "source": { + "bytes": 7942, + "tokens": 1987 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00228-operator-armature.collection_select.blend", + "bytes": 86518, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/generated/M16-GAP-00228.py", + "bytes": 1957, + "reason": "CONTEXT_REMAINING_SPACE" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 238013, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 610772, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00228/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00228.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00228/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00229", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00228.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00227/manifest.json", + "parentStatus": "docs/status/M16-GAP-00227.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00228.md", + "tests/golden/M16-GAP-00227/manifest.json", + "docs/status/M16-GAP-00227.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00227", + "parentTask": "M16-GAP-00226", + "status": "done", + "nextTask": "M16-GAP-00228", + "artifactCount": 14 + }, + "statusSummary": [ + "# M16-GAP-00227 Status", + "status: done", + "task: armature.collection_remove_unused operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains two bone collections retaining one distinct bone each and two empty collections, with an empty collection active at index 2.", + "- Desktop runs `ARMATURE_OT_collection_remove_unused` with `poll=true` and `FINISHED`, removing both unused collections, preserving the retained collections and bones, and keeping the result through save/reopen.", + "- The existing Main reader's collection indices and bone IDs provide the observable removal; no new data-block, editor, or browser behavior was added." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1819, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 455 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2394, + "lines": 47, + "tokens": 599 + }, + { + "path": "docs/tasks/M16-GAP-00228.md", + "bytes": 1819, + "lines": 38, + "tokens": 455 + }, + { + "path": "tests/golden/M16-GAP-00227/manifest.json", + "bytes": 2583, + "lines": 28, + "tokens": 646 + }, + { + "path": "docs/status/M16-GAP-00227.md", + "bytes": 1146, + "lines": 20, + "tokens": 287 + } + ], + "sourceTokens": 1987, + "evidenceFiles": 0, + "evidenceBytes": 0, + "evidenceTokens": 0, + "totalTokens": 1987, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3011, + "serializedContextTokens": 723, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00229/armature-collection-show-all-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00229/armature-collection-show-all-desktop-report.json new file mode 100644 index 00000000..f7ac59f0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00229/armature-collection-show-all-desktop-report.json @@ -0,0 +1,82 @@ +{ + "after": { + "armature": "WebGapArmatureCollectionShowAllArmature", + "bones": [ + "WebGapArmatureCollectionShowAllFirstBone", + "WebGapArmatureCollectionShowAllHiddenBone", + "WebGapArmatureCollectionShowAllLastBone" + ], + "collections": [ + { + "bones": [ + "WebGapArmatureCollectionShowAllFirstBone" + ], + "index": 0, + "name": "WebGapArmatureCollectionShowAllFirst", + "visible": true + }, + { + "bones": [ + "WebGapArmatureCollectionShowAllHiddenBone" + ], + "index": 1, + "name": "WebGapArmatureCollectionShowAllHidden", + "visible": true + }, + { + "bones": [ + "WebGapArmatureCollectionShowAllLastBone" + ], + "index": 2, + "name": "WebGapArmatureCollectionShowAllLast", + "visible": true + } + ], + "object": "WebGapArmatureCollectionShowAllObject" + }, + "before": { + "armature": "WebGapArmatureCollectionShowAllArmature", + "bones": [ + "WebGapArmatureCollectionShowAllFirstBone", + "WebGapArmatureCollectionShowAllHiddenBone", + "WebGapArmatureCollectionShowAllLastBone" + ], + "collections": [ + { + "bones": [ + "WebGapArmatureCollectionShowAllFirstBone" + ], + "index": 0, + "name": "WebGapArmatureCollectionShowAllFirst", + "visible": true + }, + { + "bones": [ + "WebGapArmatureCollectionShowAllHiddenBone" + ], + "index": 1, + "name": "WebGapArmatureCollectionShowAllHidden", + "visible": false + }, + { + "bones": [ + "WebGapArmatureCollectionShowAllLastBone" + ], + "index": 2, + "name": "WebGapArmatureCollectionShowAllLast", + "visible": true + } + ], + "object": "WebGapArmatureCollectionShowAllObject" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00229-operator-armature.collection_show_all.blend", + "fixtureSha256": "b50107f0d15d2f0be497ea8f69385411f8354d04b1907e7e6382600d5e885795", + "mainMutation": "ALL_COLLECTIONS_VISIBLE", + "operation": "ARMATURE_COLLECTION_SHOW_ALL_DESKTOP", + "operatorStatus": "FINISHED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00229" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00229/armature-collection-show-all-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00229/armature-collection-show-all-local-exact-report.json new file mode 100644 index 00000000..0be3734e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00229/armature-collection-show-all-local-exact-report.json @@ -0,0 +1,55 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00229", + "operation": "ARMATURE_COLLECTION_SHOW_ALL_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00229-operator-armature.collection_show_all.blend", + "sha256": "b50107f0d15d2f0be497ea8f69385411f8354d04b1907e7e6382600d5e885795" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00229/armature-collection-show-all-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "FINISHED", + "mainMutation": "ALL_COLLECTIONS_VISIBLE" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureCollectionShowAllArmature", + "collectionVisibility": [ + { + "id": "bone_collection:armature:WebGapArmatureCollectionShowAllArmature:WebGapArmatureCollectionShowAllFirst", + "name": "WebGapArmatureCollectionShowAllFirst", + "index": 0, + "visible": true, + "boneIds": [ + "bone:armature:WebGapArmatureCollectionShowAllArmature:WebGapArmatureCollectionShowAllFirstBone" + ] + }, + { + "id": "bone_collection:armature:WebGapArmatureCollectionShowAllArmature:WebGapArmatureCollectionShowAllHidden", + "name": "WebGapArmatureCollectionShowAllHidden", + "index": 1, + "visible": true, + "boneIds": [ + "bone:armature:WebGapArmatureCollectionShowAllArmature:WebGapArmatureCollectionShowAllHiddenBone" + ] + }, + { + "id": "bone_collection:armature:WebGapArmatureCollectionShowAllArmature:WebGapArmatureCollectionShowAllLast", + "name": "WebGapArmatureCollectionShowAllLast", + "index": 2, + "visible": true, + "boneIds": [ + "bone:armature:WebGapArmatureCollectionShowAllArmature:WebGapArmatureCollectionShowAllLastBone" + ] + } + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00230" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00229/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00229/manifest.json new file mode 100644 index 00000000..9f0586ce --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00229/manifest.json @@ -0,0 +1,27 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00229", + "parentTask": "M16-GAP-00228", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_COLLECTION_SHOW_ALL_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00228/manifest.json", "sha256": "cfb390eeb5438dbcd72d6e08a07d6bbc9fb86dbe7a1936635b5cb04cad388b67"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00229-operator-armature.collection_show_all.blend", "sha256": "b50107f0d15d2f0be497ea8f69385411f8354d04b1907e7e6382600d5e885795"}, + "generator": {"path": "tools/web/generated/M16-GAP-00229.py", "sha256": "008fdaad2977e6eb878e28e46d7d9b1eee6600b5328f954ca251576b17ff6e19"}, + "desktopChecker": {"path": "tools/web/check-action-armature-collection-show-all-desktop.py", "sha256": "3f81be36e3957ffa1de5581b4f2843c0b03e519ec153249c5fbb3b4cd53205b3"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "2de9c464286e5b565229585651312e03625b35d7d9f4898c7c2a3f9e350bfa6e"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "b22ad35452b5ee488cd02861d65488fd931aa20e8d648c62f880066fe04edb79"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "de7d2c89343dcb881a7e8c1446722df1d190765a223f574700c45314264da5aa"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "de7d2c89343dcb881a7e8c1446722df1d190765a223f574700c45314264da5aa"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00229/armature-collection-show-all-desktop-report.json", "sha256": "afe66c1b338702309a1c2a4af59d33365f31baf0db1797a95b0f980ecc76bc0a"}, + "webReport": {"path": "tests/golden/M16-GAP-00229/armature-collection-show-all-local-exact-report.json", "sha256": "1f4afb14bbdc7db07aad0b6df361b89e7020427ef63edc3fa641b3526dc05994"}, + "status": {"path": "docs/status/M16-GAP-00229.md", "sha256": "938515604dab298a7d7d5f02a89ca3b587071db63af3aad1c7327873196ba14d"}, + "taskContext": {"path": "tests/golden/M16-GAP-00229/task-context.json", "sha256": "2fe7e53c051464cc86e984cd9be592ee05b3e827e4d171aa3ad1c7bd49e68de7"} + }, + "nextTask": "M16-GAP-00230" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00229/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00229/task-context.json new file mode 100644 index 00000000..26e33eab --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00229/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00229", + "parentTask": "M16-GAP-00228", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.collection_show_all data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.collection_show_all", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00229.py -- tests/files/web/generated/M16-GAP-00229-operator-armature.collection_show_all.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00229", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00229" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00229.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1969, + "contextRemainingTokens": 491 + }, + "source": { + "bytes": 7935, + "tokens": 1985 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00229.py", + "bytes": 1828, + "tokens": 457 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00229-operator-armature.collection_show_all.blend", + "bytes": 86447, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 238151, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 615164, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00229/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00229.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00229/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1828, + "tokens": 457 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00230", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00229.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00228/manifest.json", + "parentStatus": "docs/status/M16-GAP-00228.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00229.md", + "tests/golden/M16-GAP-00228/manifest.json", + "docs/status/M16-GAP-00228.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00228", + "parentTask": "M16-GAP-00227", + "status": "done", + "nextTask": "M16-GAP-00229", + "artifactCount": 14 + }, + "statusSummary": [ + "# M16-GAP-00228 Status", + "status: done", + "task: armature.collection_select operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains three bone collections, each retaining one distinct bone, with only the first bone selected and the middle collection active.", + "- Desktop runs `ARMATURE_OT_collection_select` in Edit Mode with `poll=true` and `FINISHED`, selecting the active collection's bone while preserving the other selection states and collection membership through save/reopen.", + "- The existing Main reader's bone selected flags, collection indices, and bone IDs provide the observable selection; no new data-block, editor, or browser behavior was added." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1829, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 458 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2394, + "lines": 47, + "tokens": 599 + }, + { + "path": "docs/tasks/M16-GAP-00229.md", + "bytes": 1829, + "lines": 38, + "tokens": 458 + }, + { + "path": "tests/golden/M16-GAP-00228/manifest.json", + "bytes": 2548, + "lines": 28, + "tokens": 637 + }, + { + "path": "docs/status/M16-GAP-00228.md", + "bytes": 1164, + "lines": 20, + "tokens": 291 + } + ], + "sourceTokens": 1985, + "evidenceFiles": 1, + "evidenceBytes": 1828, + "evidenceTokens": 457, + "totalTokens": 2442, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3466, + "serializedContextTokens": 760, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00230/armature-collection-unassign-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00230/armature-collection-unassign-desktop-report.json new file mode 100644 index 00000000..ecdcf270 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00230/armature-collection-unassign-desktop-report.json @@ -0,0 +1,64 @@ +{ + "activeCollection": "WebGapArmatureCollectionUnassignSource", + "after": { + "activeIndex": 0, + "armature": "WebGapArmatureCollectionUnassignArmature", + "bones": [ + "WebGapArmatureCollectionUnassignBone" + ], + "collections": [ + { + "bones": [], + "index": 0, + "name": "WebGapArmatureCollectionUnassignSource" + }, + { + "bones": [ + "WebGapArmatureCollectionUnassignBone" + ], + "index": 1, + "name": "WebGapArmatureCollectionUnassignRetained" + } + ], + "object": "WebGapArmatureCollectionUnassignObject", + "selectedBones": [ + "WebGapArmatureCollectionUnassignBone" + ] + }, + "before": { + "activeIndex": 0, + "armature": "WebGapArmatureCollectionUnassignArmature", + "bones": [ + "WebGapArmatureCollectionUnassignBone" + ], + "collections": [ + { + "bones": [], + "index": 0, + "name": "WebGapArmatureCollectionUnassignSource" + }, + { + "bones": [ + "WebGapArmatureCollectionUnassignBone" + ], + "index": 1, + "name": "WebGapArmatureCollectionUnassignRetained" + } + ], + "object": "WebGapArmatureCollectionUnassignObject", + "selectedBones": [ + "WebGapArmatureCollectionUnassignBone" + ] + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00230-operator-armature.collection_unassign.blend", + "fixtureSha256": "b1f942b4b3eb548ce6a4ebeb62fb295cea9ce038ef69a34d60d7c54a9c2c8882", + "mainMutation": "ACTIVE_COLLECTION_ALREADY_EMPTY", + "operation": "ARMATURE_COLLECTION_UNASSIGN_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00230", + "unassignedBone": "WebGapArmatureCollectionUnassignBone" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00230/armature-collection-unassign-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00230/armature-collection-unassign-local-exact-report.json new file mode 100644 index 00000000..a02a09df --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00230/armature-collection-unassign-local-exact-report.json @@ -0,0 +1,44 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00230", + "operation": "ARMATURE_COLLECTION_UNASSIGN_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00230-operator-armature.collection_unassign.blend", + "sha256": "b1f942b4b3eb548ce6a4ebeb62fb295cea9ce038ef69a34d60d7c54a9c2c8882" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00230/armature-collection-unassign-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "ACTIVE_COLLECTION_ALREADY_EMPTY" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureCollectionUnassignArmature", + "unassignedBoneId": "bone:armature:WebGapArmatureCollectionUnassignArmature:WebGapArmatureCollectionUnassignBone", + "activeCollection": "WebGapArmatureCollectionUnassignSource", + "collectionOrder": [ + { + "id": "bone_collection:armature:WebGapArmatureCollectionUnassignArmature:WebGapArmatureCollectionUnassignSource", + "name": "WebGapArmatureCollectionUnassignSource", + "index": 0, + "boneIds": [] + }, + { + "id": "bone_collection:armature:WebGapArmatureCollectionUnassignArmature:WebGapArmatureCollectionUnassignRetained", + "name": "WebGapArmatureCollectionUnassignRetained", + "index": 1, + "boneIds": [ + "bone:armature:WebGapArmatureCollectionUnassignArmature:WebGapArmatureCollectionUnassignBone" + ] + } + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00231" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00230/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00230/manifest.json new file mode 100644 index 00000000..e1c45027 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00230/manifest.json @@ -0,0 +1,69 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00230", + "parentTask": "M16-GAP-00229", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_COLLECTION_UNASSIGN_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00229/manifest.json", + "sha256": "9c5b8d7a56fbd0f8c1c43adbb9196c90cc187a24729e0d0bc31e433891d5e6c0" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00230-operator-armature.collection_unassign.blend", + "sha256": "b1f942b4b3eb548ce6a4ebeb62fb295cea9ce038ef69a34d60d7c54a9c2c8882" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00230.py", + "sha256": "4f71a937c4dd2f7284f1f13347f67c7fa1a640016c681bbd73818e334b3d984b" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-collection-unassign-desktop.py", + "sha256": "addb723b6f5e003a726885241aba042138d5593adc7ba446228b8a41d5b51c0d" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "af1bea481e03b2fd616913cff5470a70290edf44096e58800ab2fae160dc7678" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "b22ad35452b5ee488cd02861d65488fd931aa20e8d648c62f880066fe04edb79" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "de7d2c89343dcb881a7e8c1446722df1d190765a223f574700c45314264da5aa" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "de7d2c89343dcb881a7e8c1446722df1d190765a223f574700c45314264da5aa" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00230/armature-collection-unassign-desktop-report.json", + "sha256": "289f7d681eadad4d426faad60787a12b75e27a728a1b02725b06c130cc501abe" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00230/armature-collection-unassign-local-exact-report.json", + "sha256": "4fdb066cafc7b138c1b2bde389ebd9794236971416ce27ee51b8348a5f3cb18f" + }, + "status": { + "path": "docs/status/M16-GAP-00230.md", + "sha256": "1b3945852e234096ae9be98f83bf3e6d647b06a0811346afaaab5c657501f9f6" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00230/task-context.json", + "sha256": "9c0f7fe99c270e6a97f497162dcbe83c1b5ecd8efba6578ac95bd808f05cfed8" + } + }, + "nextTask": "M16-GAP-00231" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00230/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00230/task-context.json new file mode 100644 index 00000000..259c339e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00230/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00230", + "parentTask": "M16-GAP-00229", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.collection_unassign data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.collection_unassign", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00230.py -- tests/files/web/generated/M16-GAP-00230-operator-armature.collection_unassign.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00230", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00230" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00230.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2006, + "contextRemainingTokens": 499 + }, + "source": { + "bytes": 7898, + "tokens": 1977 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00230.py", + "bytes": 1477, + "tokens": 370 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00230-operator-armature.collection_unassign.blend", + "bytes": 86283, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 238151, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 619637, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00230/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00230.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00230/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1477, + "tokens": 370 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00231", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00230.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00229/manifest.json", + "parentStatus": "docs/status/M16-GAP-00229.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00230.md", + "tests/golden/M16-GAP-00229/manifest.json", + "docs/status/M16-GAP-00229.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00229", + "parentTask": "M16-GAP-00228", + "status": "done", + "nextTask": "M16-GAP-00230", + "artifactCount": 14 + }, + "statusSummary": [ + "# M16-GAP-00229 Status", + "status: done", + "task: armature.collection_show_all operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains three bone collections, with the middle collection hidden and one distinct bone assigned to each collection.", + "- Desktop runs `ARMATURE_OT_collection_show_all` with `poll=true` and `FINISHED`, setting every collection visible while preserving collection order and membership through save/reopen.", + "- The Main reader exposes each armature `boneCollections` entry's `visible` flag from `BONE_COLLECTION_VISIBLE`; no other data-block, editor, or browser behavior was added." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1829, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 458 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2394, + "lines": 47, + "tokens": 599 + }, + { + "path": "docs/tasks/M16-GAP-00230.md", + "bytes": 1829, + "lines": 38, + "tokens": 458 + }, + { + "path": "tests/golden/M16-GAP-00229/manifest.json", + "bytes": 2558, + "lines": 28, + "tokens": 640 + }, + { + "path": "docs/status/M16-GAP-00229.md", + "bytes": 1117, + "lines": 20, + "tokens": 280 + } + ], + "sourceTokens": 1977, + "evidenceFiles": 1, + "evidenceBytes": 1477, + "evidenceTokens": 370, + "totalTokens": 2347, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3371, + "serializedContextTokens": 760, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00231/armature-collection-unassign-named-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00231/armature-collection-unassign-named-desktop-report.json new file mode 100644 index 00000000..501803ef --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00231/armature-collection-unassign-named-desktop-report.json @@ -0,0 +1,65 @@ +{ + "activeCollection": "WebGapArmatureCollectionUnassignNamedRetained", + "after": { + "activeIndex": 1, + "armature": "WebGapArmatureCollectionUnassignNamedArmature", + "bones": [ + "WebGapArmatureCollectionUnassignNamedBone" + ], + "collections": [ + { + "bones": [], + "index": 0, + "name": "WebGapArmatureCollectionUnassignNamedSource" + }, + { + "bones": [ + "WebGapArmatureCollectionUnassignNamedBone" + ], + "index": 1, + "name": "WebGapArmatureCollectionUnassignNamedRetained" + } + ], + "object": "WebGapArmatureCollectionUnassignNamedObject", + "selectedBones": [ + "WebGapArmatureCollectionUnassignNamedBone" + ] + }, + "before": { + "activeIndex": 1, + "armature": "WebGapArmatureCollectionUnassignNamedArmature", + "bones": [ + "WebGapArmatureCollectionUnassignNamedBone" + ], + "collections": [ + { + "bones": [], + "index": 0, + "name": "WebGapArmatureCollectionUnassignNamedSource" + }, + { + "bones": [ + "WebGapArmatureCollectionUnassignNamedBone" + ], + "index": 1, + "name": "WebGapArmatureCollectionUnassignNamedRetained" + } + ], + "object": "WebGapArmatureCollectionUnassignNamedObject", + "selectedBones": [ + "WebGapArmatureCollectionUnassignNamedBone" + ] + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00231-operator-armature.collection_unassign_named.blend", + "fixtureSha256": "452747b1003c527ffa6538c8d0aa48957968f57d8b8d61451c3a43c59f88abb8", + "mainMutation": "NAMED_COLLECTION_ALREADY_EMPTY", + "namedCollection": "WebGapArmatureCollectionUnassignNamedSource", + "operation": "ARMATURE_COLLECTION_UNASSIGN_NAMED_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00231", + "unassignedBone": "WebGapArmatureCollectionUnassignNamedBone" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00231/armature-collection-unassign-named-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00231/armature-collection-unassign-named-local-exact-report.json new file mode 100644 index 00000000..4abc4089 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00231/armature-collection-unassign-named-local-exact-report.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00231", + "operation": "ARMATURE_COLLECTION_UNASSIGN_NAMED_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00231-operator-armature.collection_unassign_named.blend", + "sha256": "452747b1003c527ffa6538c8d0aa48957968f57d8b8d61451c3a43c59f88abb8" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00231/armature-collection-unassign-named-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "NAMED_COLLECTION_ALREADY_EMPTY", + "namedCollection": "WebGapArmatureCollectionUnassignNamedSource", + "activeCollection": "WebGapArmatureCollectionUnassignNamedRetained" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureCollectionUnassignNamedArmature", + "unassignedBoneId": "bone:armature:WebGapArmatureCollectionUnassignNamedArmature:WebGapArmatureCollectionUnassignNamedBone", + "namedCollection": { + "id": "bone_collection:armature:WebGapArmatureCollectionUnassignNamedArmature:WebGapArmatureCollectionUnassignNamedSource", + "name": "WebGapArmatureCollectionUnassignNamedSource", + "index": 0, + "boneIds": [] + }, + "activeCollection": { + "id": "bone_collection:armature:WebGapArmatureCollectionUnassignNamedArmature:WebGapArmatureCollectionUnassignNamedRetained", + "name": "WebGapArmatureCollectionUnassignNamedRetained", + "index": 1, + "boneIds": [ + "bone:armature:WebGapArmatureCollectionUnassignNamedArmature:WebGapArmatureCollectionUnassignNamedBone" + ] + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00232" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00231/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00231/manifest.json new file mode 100644 index 00000000..1d2860d1 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00231/manifest.json @@ -0,0 +1,69 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00231", + "parentTask": "M16-GAP-00230", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_COLLECTION_UNASSIGN_NAMED_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00230/manifest.json", + "sha256": "77f90522d6531f1deafd1e64a2933e89068f38265f7ca0955b4a5ded6c5dfedf" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00231-operator-armature.collection_unassign_named.blend", + "sha256": "452747b1003c527ffa6538c8d0aa48957968f57d8b8d61451c3a43c59f88abb8" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00231.py", + "sha256": "3c735e79dc4e8f6b7f32c95ba1613ad7ed59b90c81821c0cf5e1cc9535b745a1" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-collection-unassign-named-desktop.py", + "sha256": "ef3b5f6cadbceca45a32161b9f8ca213215962d2cb213dbd80e76002725fd16e" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "db72b8bbbec5608631743232b11ecc69eb30eaf5036399e0af572cace11ba5a3" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "b22ad35452b5ee488cd02861d65488fd931aa20e8d648c62f880066fe04edb79" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "de7d2c89343dcb881a7e8c1446722df1d190765a223f574700c45314264da5aa" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "de7d2c89343dcb881a7e8c1446722df1d190765a223f574700c45314264da5aa" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00231/armature-collection-unassign-named-desktop-report.json", + "sha256": "abdac650cb16974e738ec81067a0f44ac42fa3e9cf7c0cf86d5c0969b4cf1155" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00231/armature-collection-unassign-named-local-exact-report.json", + "sha256": "9800642cf4e7763d144b4d16dbfdd9c36c765bb8bef41407bcf7dafae0540208" + }, + "status": { + "path": "docs/status/M16-GAP-00231.md", + "sha256": "d03df95a10f54abacdb1d45c6e6b186c61211fe8ebf6e710b22349e100f1801e" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00231/task-context.json", + "sha256": "76040c7c526c8bac16b7fe04603b6997755d4d1a70f99c09cfdef5c0e59a3f4b" + } + }, + "nextTask": "M16-GAP-00232" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00231/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00231/task-context.json new file mode 100644 index 00000000..420d1208 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00231/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00231", + "parentTask": "M16-GAP-00230", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.collection_unassign_named data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.collection_unassign_named", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00231.py -- tests/files/web/generated/M16-GAP-00231-operator-armature.collection_unassign_named.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00231", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00231" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00231.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1752, + "contextRemainingTokens": 436 + }, + "source": { + "bytes": 8152, + "tokens": 2040 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00231.py", + "bytes": 1502, + "tokens": 376 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00231-operator-armature.collection_unassign_named.blend", + "bytes": 86292, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 238151, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 624541, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00231/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00231.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00231/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1502, + "tokens": 376 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00232", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00231.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00230/manifest.json", + "parentStatus": "docs/status/M16-GAP-00230.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00231.md", + "tests/golden/M16-GAP-00230/manifest.json", + "docs/status/M16-GAP-00230.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00230", + "parentTask": "M16-GAP-00229", + "status": "done", + "nextTask": "M16-GAP-00231", + "artifactCount": 14 + }, + "statusSummary": [ + "# M16-GAP-00230 Status", + "status: done", + "task: armature.collection_unassign operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one selected bone assigned to both an active source collection and a retained collection.", + "- Desktop runs `ARMATURE_OT_collection_unassign` with `poll=true` and `FINISHED`, removing only the active collection membership while preserving the retained membership and selection through save/reopen.", + "- The existing Main reader's bone collection member IDs provide the observable unassignment; no new data-block, editor, or browser behavior was added." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1859, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 465 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2394, + "lines": 47, + "tokens": 599 + }, + { + "path": "docs/tasks/M16-GAP-00231.md", + "bytes": 1859, + "lines": 38, + "tokens": 465 + }, + { + "path": "tests/golden/M16-GAP-00230/manifest.json", + "bytes": 2810, + "lines": 70, + "tokens": 703 + }, + { + "path": "docs/status/M16-GAP-00230.md", + "bytes": 1089, + "lines": 20, + "tokens": 273 + } + ], + "sourceTokens": 2040, + "evidenceFiles": 1, + "evidenceBytes": 1502, + "evidenceTokens": 376, + "totalTokens": 2416, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3440, + "serializedContextTokens": 765, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00232/armature-collection-unsolo-all-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00232/armature-collection-unsolo-all-desktop-report.json new file mode 100644 index 00000000..730a8a82 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00232/armature-collection-unsolo-all-desktop-report.json @@ -0,0 +1,93 @@ +{ + "after": { + "activeIndex": 1, + "armature": "WebGapArmatureCollectionUnsoloAllArmature", + "bones": [ + "WebGapArmatureCollectionUnsoloAllFirstBone", + "WebGapArmatureCollectionUnsoloAllLastBone", + "WebGapArmatureCollectionUnsoloAllSoloBone" + ], + "collections": [ + { + "bones": [ + "WebGapArmatureCollectionUnsoloAllFirstBone" + ], + "index": 0, + "name": "WebGapArmatureCollectionUnsoloAllFirst", + "solo": false, + "visible": true + }, + { + "bones": [ + "WebGapArmatureCollectionUnsoloAllSoloBone" + ], + "index": 1, + "name": "WebGapArmatureCollectionUnsoloAllSolo", + "solo": false, + "visible": true + }, + { + "bones": [ + "WebGapArmatureCollectionUnsoloAllLastBone" + ], + "index": 2, + "name": "WebGapArmatureCollectionUnsoloAllLast", + "solo": false, + "visible": true + } + ], + "isSoloActive": false, + "object": "WebGapArmatureCollectionUnsoloAllObject" + }, + "before": { + "activeIndex": 1, + "armature": "WebGapArmatureCollectionUnsoloAllArmature", + "bones": [ + "WebGapArmatureCollectionUnsoloAllFirstBone", + "WebGapArmatureCollectionUnsoloAllLastBone", + "WebGapArmatureCollectionUnsoloAllSoloBone" + ], + "collections": [ + { + "bones": [ + "WebGapArmatureCollectionUnsoloAllFirstBone" + ], + "index": 0, + "name": "WebGapArmatureCollectionUnsoloAllFirst", + "solo": false, + "visible": true + }, + { + "bones": [ + "WebGapArmatureCollectionUnsoloAllSoloBone" + ], + "index": 1, + "name": "WebGapArmatureCollectionUnsoloAllSolo", + "solo": false, + "visible": true + }, + { + "bones": [ + "WebGapArmatureCollectionUnsoloAllLastBone" + ], + "index": 2, + "name": "WebGapArmatureCollectionUnsoloAllLast", + "solo": false, + "visible": true + } + ], + "isSoloActive": false, + "object": "WebGapArmatureCollectionUnsoloAllObject" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00232-operator-armature.collection_unsolo_all.blend", + "fixtureSha256": "be849eaac644443d8db0318d176767a3f861ee0309b69aff2a130decbf56b21c", + "mainMutation": "ALL_COLLECTIONS_ALREADY_UNSOLO", + "operation": "ARMATURE_COLLECTION_UNSOLO_ALL_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": false, + "saveReopen": "EXACT", + "schemaVersion": 1, + "soloCollection": "WebGapArmatureCollectionUnsoloAllSolo", + "task": "M16-GAP-00232" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00232/armature-collection-unsolo-all-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00232/armature-collection-unsolo-all-local-exact-report.json new file mode 100644 index 00000000..e21971a6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00232/armature-collection-unsolo-all-local-exact-report.json @@ -0,0 +1,59 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00232", + "operation": "ARMATURE_COLLECTION_UNSOLO_ALL_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00232-operator-armature.collection_unsolo_all.blend", + "sha256": "be849eaac644443d8db0318d176767a3f861ee0309b69aff2a130decbf56b21c" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00232/armature-collection-unsolo-all-desktop-report.json", + "saveReopen": "EXACT", + "poll": false, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "ALL_COLLECTIONS_ALREADY_UNSOLO", + "soloCollection": "WebGapArmatureCollectionUnsoloAllSolo" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureCollectionUnsoloAllArmature", + "collectionSolo": [ + { + "id": "bone_collection:armature:WebGapArmatureCollectionUnsoloAllArmature:WebGapArmatureCollectionUnsoloAllFirst", + "name": "WebGapArmatureCollectionUnsoloAllFirst", + "index": 0, + "solo": false, + "visible": true, + "boneIds": [ + "bone:armature:WebGapArmatureCollectionUnsoloAllArmature:WebGapArmatureCollectionUnsoloAllFirstBone" + ] + }, + { + "id": "bone_collection:armature:WebGapArmatureCollectionUnsoloAllArmature:WebGapArmatureCollectionUnsoloAllSolo", + "name": "WebGapArmatureCollectionUnsoloAllSolo", + "index": 1, + "solo": false, + "visible": true, + "boneIds": [ + "bone:armature:WebGapArmatureCollectionUnsoloAllArmature:WebGapArmatureCollectionUnsoloAllSoloBone" + ] + }, + { + "id": "bone_collection:armature:WebGapArmatureCollectionUnsoloAllArmature:WebGapArmatureCollectionUnsoloAllLast", + "name": "WebGapArmatureCollectionUnsoloAllLast", + "index": 2, + "solo": false, + "visible": true, + "boneIds": [ + "bone:armature:WebGapArmatureCollectionUnsoloAllArmature:WebGapArmatureCollectionUnsoloAllLastBone" + ] + } + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00233" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00232/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00232/manifest.json new file mode 100644 index 00000000..2676df11 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00232/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00232", + "parentTask": "M16-GAP-00231", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_COLLECTION_UNSOLO_ALL_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00231/manifest.json", + "sha256": "99a4cb68824248880db4d7c7367108fc630f16c8deb7f722128e8d2186f1d5eb" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00232-operator-armature.collection_unsolo_all.blend", + "sha256": "be849eaac644443d8db0318d176767a3f861ee0309b69aff2a130decbf56b21c" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00232.py", + "sha256": "10bd16bd644bd55dd57d427216828a7aab6cbda49a1d5cbb570d6e78e72fdb18" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-collection-unsolo-all-desktop.py", + "sha256": "a4df03942060ccfe0eb19be415bade14f4f7c4a5649a5c3cfbbdd66b1104e98d" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "f615cc7c2aea75b0ae260592b58e6049821e1ec02425e29ce2274f4d77a49052" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "686ef20b290d2cb4bd72375d2d3a18d065616f268fbf310d71c54dcf5964bb12" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "953990ae8d76074473312e0ffae3e7f61d93831cbca69ee023411a43a9f22759" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "953990ae8d76074473312e0ffae3e7f61d93831cbca69ee023411a43a9f22759" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00232/armature-collection-unsolo-all-desktop-report.json", + "sha256": "e42a8ace07205e1954b5685c46103736827bc6cdea98f182dc9cc63f1340094d" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00232/armature-collection-unsolo-all-local-exact-report.json", + "sha256": "9be85459dec5551c4245cea4cfd025ca3dcef6be5e01ee24cb42249852e0ec0d" + }, + "status": { + "path": "docs/status/M16-GAP-00232.md", + "sha256": "2c00d0f68f961158b9cb931a2071f83d7e2a402a7078789260c9263fcd7cae3d" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00232/task-context.json", + "sha256": "f4119c512efba997ef39caabb833c12294db92e703df7ff9218841d47a0313c5" + } + }, + "nextTask": "M16-GAP-00233" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00232/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00232/task-context.json new file mode 100644 index 00000000..3e608f7b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00232/task-context.json @@ -0,0 +1,182 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00232", + "parentTask": "M16-GAP-00231", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.collection_unsolo_all data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.collection_unsolo_all", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00232.py -- tests/files/web/generated/M16-GAP-00232-operator-armature.collection_unsolo_all.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00232", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00232" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1646, + "contextRemainingTokens": 410 + }, + "source": { + "bytes": 8258, + "tokens": 2066 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00232-operator-armature.collection_unsolo_all.blend", + "bytes": 86446, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/generated/M16-GAP-00232.py", + "bytes": 1862, + "reason": "CONTEXT_REMAINING_SPACE" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 238283, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 629393, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00232/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00232.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00232/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00233", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00232.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00231/manifest.json", + "parentStatus": "docs/status/M16-GAP-00231.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00232.md", + "tests/golden/M16-GAP-00231/manifest.json", + "docs/status/M16-GAP-00231.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00231", + "parentTask": "M16-GAP-00230", + "status": "done", + "nextTask": "M16-GAP-00232", + "artifactCount": 14 + }, + "statusSummary": [ + "# M16-GAP-00231 Status", + "status: done", + "task: armature.collection_unassign_named operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one selected bone assigned to both a named source collection and a retained collection, with the retained collection active.", + "- Desktop runs `ARMATURE_OT_collection_unassign_named` with `name=Source` and `bone_name=...`, `poll=true`, and `FINISHED`, removing only the named source membership while preserving the active retained membership and selection through save/reopen.", + "- The existing Main reader's bone collection member IDs provide the observable named unassignment; no new data-block, editor, or browser behavior was added." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1839, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 460 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2394, + "lines": 47, + "tokens": 599 + }, + { + "path": "docs/tasks/M16-GAP-00232.md", + "bytes": 1839, + "lines": 38, + "tokens": 460 + }, + { + "path": "tests/golden/M16-GAP-00231/manifest.json", + "bytes": 2840, + "lines": 70, + "tokens": 710 + }, + { + "path": "docs/status/M16-GAP-00231.md", + "bytes": 1185, + "lines": 20, + "tokens": 297 + } + ], + "sourceTokens": 2066, + "evidenceFiles": 0, + "evidenceBytes": 0, + "evidenceTokens": 0, + "totalTokens": 2066, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3090, + "serializedContextTokens": 726, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00233/armature-copy-bone-color-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00233/armature-copy-bone-color-desktop-report.json new file mode 100644 index 00000000..efc15366 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00233/armature-copy-bone-color-desktop-report.json @@ -0,0 +1,173 @@ +{ + "after": { + "activeBone": "WebGapArmatureCopyBoneColorSource", + "armature": "WebGapArmatureCopyBoneColorArmature", + "bones": [ + { + "active": [ + 184, + 214, + 245, + 255 + ], + "name": "WebGapArmatureCopyBoneColorSource", + "normal": [ + 31, + 61, + 92, + 255 + ], + "palette": "CUSTOM", + "paletteIndex": -1, + "selectColor": [ + 107, + 138, + 168, + 255 + ], + "selected": true + }, + { + "active": [ + 184, + 214, + 245, + 255 + ], + "name": "WebGapArmatureCopyBoneColorSelected", + "normal": [ + 31, + 61, + 92, + 255 + ], + "palette": "CUSTOM", + "paletteIndex": -1, + "selectColor": [ + 107, + 138, + 168, + 255 + ], + "selected": true + }, + { + "active": [ + 0, + 0, + 0, + 255 + ], + "name": "WebGapArmatureCopyBoneColorUnselected", + "normal": [ + 0, + 0, + 0, + 255 + ], + "palette": "THEME05", + "paletteIndex": 5, + "selectColor": [ + 0, + 0, + 0, + 255 + ], + "selected": false + } + ], + "object": "WebGapArmatureCopyBoneColorObject" + }, + "before": { + "activeBone": "WebGapArmatureCopyBoneColorSource", + "armature": "WebGapArmatureCopyBoneColorArmature", + "bones": [ + { + "active": [ + 184, + 214, + 245, + 255 + ], + "name": "WebGapArmatureCopyBoneColorSource", + "normal": [ + 31, + 61, + 92, + 255 + ], + "palette": "CUSTOM", + "paletteIndex": -1, + "selectColor": [ + 107, + 138, + 168, + 255 + ], + "selected": true + }, + { + "active": [ + 184, + 214, + 245, + 255 + ], + "name": "WebGapArmatureCopyBoneColorSelected", + "normal": [ + 31, + 61, + 92, + 255 + ], + "palette": "CUSTOM", + "paletteIndex": -1, + "selectColor": [ + 107, + 138, + 168, + 255 + ], + "selected": true + }, + { + "active": [ + 0, + 0, + 0, + 255 + ], + "name": "WebGapArmatureCopyBoneColorUnselected", + "normal": [ + 0, + 0, + 0, + 255 + ], + "palette": "THEME05", + "paletteIndex": 5, + "selectColor": [ + 0, + 0, + 0, + 255 + ], + "selected": false + } + ], + "object": "WebGapArmatureCopyBoneColorObject" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00233-operator-armature.copy_bone_color_to_selected.blend", + "fixtureSha256": "d5ab14cabded3332b4c882c1eaee7f9966a41155d2623bc73f88917d0639634a", + "mainMutation": "SELECTED_BONE_COLORS_ALREADY_COPIED", + "operation": "ARMATURE_COPY_BONE_COLOR_TO_SELECTED_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "selectedDestination": "WebGapArmatureCopyBoneColorSelected", + "sourceBone": "WebGapArmatureCopyBoneColorSource", + "task": "M16-GAP-00233", + "unselectedDestination": "WebGapArmatureCopyBoneColorUnselected" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00233/armature-copy-bone-color-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00233/armature-copy-bone-color-local-exact-report.json new file mode 100644 index 00000000..ab22662c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00233/armature-copy-bone-color-local-exact-report.json @@ -0,0 +1,97 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00233", + "operation": "ARMATURE_COPY_BONE_COLOR_TO_SELECTED_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00233-operator-armature.copy_bone_color_to_selected.blend", + "sha256": "d5ab14cabded3332b4c882c1eaee7f9966a41155d2623bc73f88917d0639634a" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00233/armature-copy-bone-color-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "SELECTED_BONE_COLORS_ALREADY_COPIED" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureCopyBoneColorArmature", + "sourceBone": "bone:armature:WebGapArmatureCopyBoneColorArmature:WebGapArmatureCopyBoneColorSource", + "selectedDestination": "bone:armature:WebGapArmatureCopyBoneColorArmature:WebGapArmatureCopyBoneColorSelected", + "unselectedDestination": "bone:armature:WebGapArmatureCopyBoneColorArmature:WebGapArmatureCopyBoneColorUnselected", + "colors": { + "source": { + "active": [ + 184, + 214, + 245, + 255 + ], + "flag": 0, + "normal": [ + 31, + 61, + 92, + 255 + ], + "paletteIndex": -1, + "select": [ + 107, + 138, + 168, + 255 + ] + }, + "selected": { + "active": [ + 184, + 214, + 245, + 255 + ], + "flag": 0, + "normal": [ + 31, + 61, + 92, + 255 + ], + "paletteIndex": -1, + "select": [ + 107, + 138, + 168, + 255 + ] + }, + "unselected": { + "active": [ + 0, + 0, + 0, + 255 + ], + "flag": 0, + "normal": [ + 0, + 0, + 0, + 255 + ], + "paletteIndex": 5, + "select": [ + 0, + 0, + 0, + 255 + ] + } + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00234" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00233/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00233/manifest.json new file mode 100644 index 00000000..74513eb6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00233/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00233", + "parentTask": "M16-GAP-00232", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_COPY_BONE_COLOR_TO_SELECTED_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00232/manifest.json", + "sha256": "03c4c803543785775293217040033ced42a419e84b2c8f556f891e3b6ac98533" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00233-operator-armature.copy_bone_color_to_selected.blend", + "sha256": "d5ab14cabded3332b4c882c1eaee7f9966a41155d2623bc73f88917d0639634a" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00233.py", + "sha256": "c7da3085c85ea178b7dc834df8a05950197d005ee2d6da7da420ebe2c9ea8711" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-copy-bone-color-desktop.py", + "sha256": "4e28192646754a1e0c253f40e15fea28b43bcd60305fbd40273caad1908f34c1" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "c142f0d3fe94b7365456ab561919c0cc6c175838d883daea487dc964cb8969a7" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "d190501da90ca93805997120c80833a5730928e73ae1eaa36389d72300688abe" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00233/armature-copy-bone-color-desktop-report.json", + "sha256": "45464ed86aa52df4a5db68c0fac749585dc7f09b2d2c86080be467e1bf54c068" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00233/armature-copy-bone-color-local-exact-report.json", + "sha256": "1f8e2f7ba0c32ff17d12ed24da24426d8359d45ac3aa8badef68d2c98cea2ec2" + }, + "status": { + "path": "docs/status/M16-GAP-00233.md", + "sha256": "7f05db1dbd06d1570d98aef79177784423fc73706dcd2c6e967ba5aff294c0cd" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00233/task-context.json", + "sha256": "17f3369193e212c22b7cd12d9041f46dae78b19bf693ba5a1a791f3650f2d175" + } + }, + "nextTask": "M16-GAP-00234" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00233/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00233/task-context.json new file mode 100644 index 00000000..f21f1b85 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00233/task-context.json @@ -0,0 +1,182 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00233", + "parentTask": "M16-GAP-00232", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.copy_bone_color_to_selected data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.copy_bone_color_to_selected", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00233.py -- tests/files/web/generated/M16-GAP-00233-operator-armature.copy_bone_color_to_selected.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00233", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00233" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1437, + "contextRemainingTokens": 358 + }, + "source": { + "bytes": 8467, + "tokens": 2118 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00233-operator-armature.copy_bone_color_to_selected.blend", + "bytes": 86391, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/generated/M16-GAP-00233.py", + "bytes": 1735, + "reason": "CONTEXT_REMAINING_SPACE" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 239810, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 634425, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00233/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00233.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00233/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00234", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00233.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00232/manifest.json", + "parentStatus": "docs/status/M16-GAP-00232.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00233.md", + "tests/golden/M16-GAP-00232/manifest.json", + "docs/status/M16-GAP-00232.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00232", + "parentTask": "M16-GAP-00231", + "status": "done", + "nextTask": "M16-GAP-00233", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00232 Status", + "status: done", + "task: armature.collection_unsolo_all operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains three bone collections with one bone each; the middle collection starts solo while all collections remain visible and the middle collection is active.", + "- Desktop runs `ARMATURE_OT_collection_unsolo_all` with `poll=true` and `FINISHED`, clearing every collection's solo flag while preserving collection order, membership, visibility, and active index through save/reopen.", + "- Main now exposes each armature bone collection's `solo` flag alongside its existing visibility and member IDs; no other data-block, editor, or browser behavior was added." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1869, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 468 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2394, + "lines": 47, + "tokens": 599 + }, + { + "path": "docs/tasks/M16-GAP-00233.md", + "bytes": 1869, + "lines": 38, + "tokens": 468 + }, + { + "path": "tests/golden/M16-GAP-00232/manifest.json", + "bytes": 2992, + "lines": 74, + "tokens": 748 + }, + { + "path": "docs/status/M16-GAP-00232.md", + "bytes": 1212, + "lines": 20, + "tokens": 303 + } + ], + "sourceTokens": 2118, + "evidenceFiles": 0, + "evidenceBytes": 0, + "evidenceTokens": 0, + "totalTokens": 2118, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3142, + "serializedContextTokens": 731, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00234/armature-delete-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00234/armature-delete-desktop-report.json new file mode 100644 index 00000000..a279cd03 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00234/armature-delete-desktop-report.json @@ -0,0 +1,47 @@ +{ + "after": { + "activeBone": null, + "armature": "WebGapArmatureDeleteArmature", + "bones": [ + { + "name": "WebGapArmatureDeleteKeep", + "parent": null, + "selected": false + }, + { + "name": "WebGapArmatureDeleteRetain", + "parent": null, + "selected": false + } + ], + "object": "WebGapArmatureDeleteObject" + }, + "before": { + "activeBone": null, + "armature": "WebGapArmatureDeleteArmature", + "bones": [ + { + "name": "WebGapArmatureDeleteKeep", + "parent": null, + "selected": false + }, + { + "name": "WebGapArmatureDeleteRetain", + "parent": null, + "selected": false + } + ], + "object": "WebGapArmatureDeleteObject" + }, + "blenderVersion": "5.2.0 LTS", + "deletedBone": "WebGapArmatureDeleteSelected", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00234-operator-armature.delete.blend", + "fixtureSha256": "52c3c28c6cba72d0b40c32bc46b4d5894482f05b2ee621e44efde6999008556e", + "mainMutation": "SELECTED_BONE_ALREADY_DELETED", + "operation": "ARMATURE_DELETE_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00234" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00234/armature-delete-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00234/armature-delete-local-exact-report.json new file mode 100644 index 00000000..84850126 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00234/armature-delete-local-exact-report.json @@ -0,0 +1,33 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00234", + "operation": "ARMATURE_DELETE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00234-operator-armature.delete.blend", + "sha256": "52c3c28c6cba72d0b40c32bc46b4d5894482f05b2ee621e44efde6999008556e" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00234/armature-delete-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "SELECTED_BONE_ALREADY_DELETED", + "deletedBone": "WebGapArmatureDeleteSelected" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureDeleteArmature", + "remainingBoneIds": [ + "bone:armature:WebGapArmatureDeleteArmature:WebGapArmatureDeleteKeep", + "bone:armature:WebGapArmatureDeleteArmature:WebGapArmatureDeleteRetain" + ], + "deletedBonePresent": false, + "selectedBoneIds": [] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00235" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00234/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00234/manifest.json new file mode 100644 index 00000000..c522f163 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00234/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00234", + "parentTask": "M16-GAP-00233", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_DELETE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00233/manifest.json", + "sha256": "576b641acd54236ee8c3b61dd42281590507981b89882d9318d707882a9f09b0" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00234-operator-armature.delete.blend", + "sha256": "52c3c28c6cba72d0b40c32bc46b4d5894482f05b2ee621e44efde6999008556e" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00234.py", + "sha256": "408362122138a1f2e8fbe837c9d78795ff42445cdeb2359bf001888cfc6ed538" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-delete-desktop.py", + "sha256": "2b0358f9e0a96da53f8c7f889ae18068aac2653d4aa6e804a0471a92e66ddd6b" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "572b2ae16c8a0c47305d8a9439d54e5fc96c3d63b6330a120f1283c4f9102d8a" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "d190501da90ca93805997120c80833a5730928e73ae1eaa36389d72300688abe" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00234/armature-delete-desktop-report.json", + "sha256": "d6c85736295a6f07950292425294e188a6b17228c91eb1151a38e6da4833679e" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00234/armature-delete-local-exact-report.json", + "sha256": "89e0b6b13dd025e4d0d72eec409845c44f43d90e52fb4f506282cad455b5c0a8" + }, + "status": { + "path": "docs/status/M16-GAP-00234.md", + "sha256": "68beffb770ac5633f4b3ce112fc9e623702eacfe86ad3bbe0362158633ba4d4c" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00234/task-context.json", + "sha256": "da2f3111822b6a7238e2fa21d03976db0d614565da4365b6b8158877335ba70d" + } + }, + "nextTask": "M16-GAP-00235" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00234/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00234/task-context.json new file mode 100644 index 00000000..721d54a0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00234/task-context.json @@ -0,0 +1,182 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00234", + "parentTask": "M16-GAP-00233", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.delete data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.delete", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00234.py -- tests/files/web/generated/M16-GAP-00234-operator-armature.delete.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00234", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00234" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1380, + "contextRemainingTokens": 344 + }, + "source": { + "bytes": 8524, + "tokens": 2132 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00234-operator-armature.delete.blend", + "bytes": 86269, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/generated/M16-GAP-00234.py", + "bytes": 1401, + "reason": "CONTEXT_REMAINING_SPACE" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 239810, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 638405, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00234/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00234.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00234/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00235", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00234.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00233/manifest.json", + "parentStatus": "docs/status/M16-GAP-00233.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00234.md", + "tests/golden/M16-GAP-00233/manifest.json", + "docs/status/M16-GAP-00233.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00233", + "parentTask": "M16-GAP-00232", + "status": "done", + "nextTask": "M16-GAP-00234", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00233 Status", + "status: done", + "task: armature.copy_bone_color_to_selected operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one armature with three bones. The active source bone uses a custom palette; one selected destination starts with a different theme palette and one unselected destination remains untouched.", + "- Desktop runs `ARMATURE_OT_copy_bone_color_to_selected` in edit mode with `bone_type=EDIT`, `poll=true`, and `FINISHED`, copying palette and custom normal/select/active colors only to selected bones while preserving selection and active bone through save/reopen.", + "- Main now exposes each armature bone's palette index and custom color bytes (`normal`, `select`, `active`, `flag`) alongside its existing selection and transform data. No other data-block, editor, or browser behavior was added." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1764, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 441 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2394, + "lines": 47, + "tokens": 599 + }, + { + "path": "docs/tasks/M16-GAP-00234.md", + "bytes": 1764, + "lines": 38, + "tokens": 441 + }, + { + "path": "tests/golden/M16-GAP-00233/manifest.json", + "bytes": 2986, + "lines": 74, + "tokens": 747 + }, + { + "path": "docs/status/M16-GAP-00233.md", + "bytes": 1380, + "lines": 20, + "tokens": 345 + } + ], + "sourceTokens": 2132, + "evidenceFiles": 0, + "evidenceBytes": 0, + "evidenceTokens": 0, + "totalTokens": 2132, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3156, + "serializedContextTokens": 715, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00235/armature-dissolve-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00235/armature-dissolve-desktop-report.json new file mode 100644 index 00000000..2c59cc68 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00235/armature-dissolve-desktop-report.json @@ -0,0 +1,91 @@ +{ + "after": { + "activeBone": null, + "armature": "WebGapArmatureDissolveArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureDissolveRoot", + "parent": null, + "selected": false, + "tail": [ + 0.0, + 3.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureDissolveOther", + "parent": null, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureDissolveObject" + }, + "before": { + "activeBone": null, + "armature": "WebGapArmatureDissolveArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureDissolveRoot", + "parent": null, + "selected": false, + "tail": [ + 0.0, + 3.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureDissolveOther", + "parent": null, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureDissolveObject" + }, + "blenderVersion": "5.2.0 LTS", + "dissolvedBone": "WebGapArmatureDissolveTip", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00235-operator-armature.dissolve.blend", + "fixtureSha256": "951ea935f05ed06ced6ea61d4a9293e7dd3226902ea6ae3c0c466779dcbcf24b", + "mainMutation": "CONNECTED_TIP_ALREADY_DISSOLVED", + "operation": "ARMATURE_DISSOLVE_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00235" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00235/armature-dissolve-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00235/armature-dissolve-local-exact-report.json new file mode 100644 index 00000000..78d7b86c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00235/armature-dissolve-local-exact-report.json @@ -0,0 +1,58 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00235", + "operation": "ARMATURE_DISSOLVE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00235-operator-armature.dissolve.blend", + "sha256": "951ea935f05ed06ced6ea61d4a9293e7dd3226902ea6ae3c0c466779dcbcf24b" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00235/armature-dissolve-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "CONNECTED_TIP_ALREADY_DISSOLVED", + "dissolvedBone": "WebGapArmatureDissolveTip" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureDissolveArmature", + "remainingBoneIds": [ + "bone:armature:WebGapArmatureDissolveArmature:WebGapArmatureDissolveRoot", + "bone:armature:WebGapArmatureDissolveArmature:WebGapArmatureDissolveOther" + ], + "dissolvedBonePresent": false, + "survivingRoot": { + "id": "bone:armature:WebGapArmatureDissolveArmature:WebGapArmatureDissolveRoot", + "head": [ + 0, + 0, + 0 + ], + "tail": [ + 0, + 3, + 0 + ] + }, + "independentBone": { + "id": "bone:armature:WebGapArmatureDissolveArmature:WebGapArmatureDissolveOther", + "head": [ + 2, + 0, + 0 + ], + "tail": [ + 2, + 1, + 0 + ] + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00236" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00235/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00235/manifest.json new file mode 100644 index 00000000..4bbb25bd --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00235/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00235", + "parentTask": "M16-GAP-00234", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_DISSOLVE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00234/manifest.json", + "sha256": "4a29dec54de89d3d3f2c2f8840d66ddef7193555550b403665a02576961d99c8" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00235-operator-armature.dissolve.blend", + "sha256": "951ea935f05ed06ced6ea61d4a9293e7dd3226902ea6ae3c0c466779dcbcf24b" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00235.py", + "sha256": "9dcb072c97f9c758d33de0280685665fe089c24393f6f72b06fb02e490e2befb" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-dissolve-desktop.py", + "sha256": "27a1aa29a7fe9ef6ad5b13b17ee0e30cf7c943df5d0ce3be97e44513cec33d01" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "562f805a1e9bc8255724b939f0877997bcf71fdc9e4f95f8397f9e787340ed53" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "d190501da90ca93805997120c80833a5730928e73ae1eaa36389d72300688abe" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00235/armature-dissolve-desktop-report.json", + "sha256": "bb9acbe5fd923532f125e511f6f113ef3543b519bfd757a942e4466eef7e2c79" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00235/armature-dissolve-local-exact-report.json", + "sha256": "97e46604d0c79afccd2968e64127da80382a92053f53b6f0b706d7b742aa608e" + }, + "status": { + "path": "docs/status/M16-GAP-00235.md", + "sha256": "eeace6c617236ea29331ba7824d85f30fb84d674e1a3ef385da4b22c632fa2eb" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00235/task-context.json", + "sha256": "87839be45f3d7071cc81118d5977cf405bd84ca8c59cc759ebea7bdc32541f03" + } + }, + "nextTask": "M16-GAP-00236" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00235/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00235/task-context.json new file mode 100644 index 00000000..c7b2c2d8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00235/task-context.json @@ -0,0 +1,182 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00235", + "parentTask": "M16-GAP-00234", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.dissolve data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.dissolve", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00235.py -- tests/files/web/generated/M16-GAP-00235-operator-armature.dissolve.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00235", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00235" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1673, + "contextRemainingTokens": 416 + }, + "source": { + "bytes": 8231, + "tokens": 2060 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00235-operator-armature.dissolve.blend", + "bytes": 86289, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/generated/M16-GAP-00235.py", + "bytes": 1753, + "reason": "CONTEXT_REMAINING_SPACE" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 239810, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 643291, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00235/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00235.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00235/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00236", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00235.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00234/manifest.json", + "parentStatus": "docs/status/M16-GAP-00234.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00235.md", + "tests/golden/M16-GAP-00234/manifest.json", + "docs/status/M16-GAP-00234.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00234", + "parentTask": "M16-GAP-00233", + "status": "done", + "nextTask": "M16-GAP-00235", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00234 Status", + "status: done", + "task: armature.delete operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one armature with three unparented bones; only the middle bone starts selected and active.", + "- Desktop runs `ARMATURE_OT_delete` in edit mode with `poll=true` and `FINISHED`, deleting the selected bone while leaving the other two bones unselected and preserving the result through save/reopen.", + "- Main already exposes armature bone names, parent IDs, and selection state, so the same post-delete fixture is observable in WASM/Main without expanding other data-blocks, editors, or browsers." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1774, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 444 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2394, + "lines": 47, + "tokens": 599 + }, + { + "path": "docs/tasks/M16-GAP-00235.md", + "bytes": 1774, + "lines": 38, + "tokens": 444 + }, + { + "path": "tests/golden/M16-GAP-00234/manifest.json", + "bytes": 2917, + "lines": 74, + "tokens": 730 + }, + { + "path": "docs/status/M16-GAP-00234.md", + "bytes": 1146, + "lines": 20, + "tokens": 287 + } + ], + "sourceTokens": 2060, + "evidenceFiles": 0, + "evidenceBytes": 0, + "evidenceTokens": 0, + "totalTokens": 2060, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3084, + "serializedContextTokens": 717, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00236/armature-duplicate-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00236/armature-duplicate-desktop-report.json new file mode 100644 index 00000000..3cf596e0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00236/armature-duplicate-desktop-report.json @@ -0,0 +1,136 @@ +{ + "after": { + "activeBone": "WebGapArmatureDuplicateSource.001", + "armature": "WebGapArmatureDuplicateArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureDuplicateSource", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureDuplicateOther", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureDuplicateSource.001", + "parent": null, + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureDuplicateObject" + }, + "before": { + "activeBone": "WebGapArmatureDuplicateSource.001", + "armature": "WebGapArmatureDuplicateArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureDuplicateSource", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureDuplicateOther", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureDuplicateSource.001", + "parent": null, + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureDuplicateObject" + }, + "blenderVersion": "5.2.0 LTS", + "duplicateBone": "WebGapArmatureDuplicateSource.001", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00236-operator-armature.duplicate.blend", + "fixtureSha256": "fb0ddc4b599f05941c6d719be3eab14f354755017f574ca9e6984369474b42a8", + "mainMutation": "SELECTED_BONE_ALREADY_DUPLICATED", + "operation": "ARMATURE_DUPLICATE_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "sourceBone": "WebGapArmatureDuplicateSource", + "task": "M16-GAP-00236" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00236/armature-duplicate-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00236/armature-duplicate-local-exact-report.json new file mode 100644 index 00000000..63658385 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00236/armature-duplicate-local-exact-report.json @@ -0,0 +1,33 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00236", + "operation": "ARMATURE_DUPLICATE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00236-operator-armature.duplicate.blend", + "sha256": "fb0ddc4b599f05941c6d719be3eab14f354755017f574ca9e6984369474b42a8" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00236/armature-duplicate-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "SELECTED_BONE_ALREADY_DUPLICATED", + "sourceBone": "WebGapArmatureDuplicateSource", + "duplicateBone": "WebGapArmatureDuplicateSource.001" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureDuplicateArmature", + "sourceBoneId": "bone:armature:WebGapArmatureDuplicateArmature:WebGapArmatureDuplicateSource", + "duplicateBoneId": "bone:armature:WebGapArmatureDuplicateArmature:WebGapArmatureDuplicateSource.001", + "otherBoneId": "bone:armature:WebGapArmatureDuplicateArmature:WebGapArmatureDuplicateOther", + "duplicateSelected": true, + "geometryMatch": true + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00237" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00236/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00236/manifest.json new file mode 100644 index 00000000..b39172ed --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00236/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00236", + "parentTask": "M16-GAP-00235", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_DUPLICATE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00235/manifest.json", + "sha256": "84f3720ab79155ad3af4c4d25f96d1cbe09944e8f76aae90bd4cc81c0037c4e1" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00236-operator-armature.duplicate.blend", + "sha256": "fb0ddc4b599f05941c6d719be3eab14f354755017f574ca9e6984369474b42a8" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00236.py", + "sha256": "7f4e66d90c76efa8c4f5ed0f0e052ed1a00ca815ff24630d08a201daab94233d" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-duplicate-desktop.py", + "sha256": "47c4546402e3e8692583e3d3075a1351092cd61fce09f5d96d13dc06bf2ce1d2" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "4d503a6fab1ad984b754229addb68a290b654c03d500dc3887ef9c5dc0ef7c80" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "d190501da90ca93805997120c80833a5730928e73ae1eaa36389d72300688abe" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00236/armature-duplicate-desktop-report.json", + "sha256": "b648c7d518227a03b4d142a61ad4e3f15de71cf58e3fc23b603f7fdd26e1bf0b" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00236/armature-duplicate-local-exact-report.json", + "sha256": "2c005ed1342943cec21b7a71371449af4d01909026bd18c8cd9ca65f868d51a9" + }, + "status": { + "path": "docs/status/M16-GAP-00236.md", + "sha256": "de335028bda9f8c51d13d244e81c3c1952cd074bddc74896c8cf5554389f9aa5" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00236/task-context.json", + "sha256": "91d3c4acf7697b24a72bcba8a093f2a3d1ea58578583983155ff2bc92b060184" + } + }, + "nextTask": "M16-GAP-00237" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00236/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00236/task-context.json new file mode 100644 index 00000000..1f0f1031 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00236/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00236", + "parentTask": "M16-GAP-00235", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.duplicate data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.duplicate", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00236.py -- tests/files/web/generated/M16-GAP-00236-operator-armature.duplicate.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00236", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00236" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00236.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1508, + "contextRemainingTokens": 376 + }, + "source": { + "bytes": 8396, + "tokens": 2100 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00236.py", + "bytes": 1429, + "tokens": 358 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00236-operator-armature.duplicate.blend", + "bytes": 86362, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 239810, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 648666, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00236/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00236.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00236/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1429, + "tokens": 358 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00237", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00236.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00235/manifest.json", + "parentStatus": "docs/status/M16-GAP-00235.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00236.md", + "tests/golden/M16-GAP-00235/manifest.json", + "docs/status/M16-GAP-00235.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00235", + "parentTask": "M16-GAP-00234", + "status": "done", + "nextTask": "M16-GAP-00236", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00235 Status", + "status: done", + "task: armature.dissolve operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one connected Root-Middle-Tip chain and one independent bone; the connected chain is selected for dissolve while the independent bone remains unselected.", + "- Desktop runs `ARMATURE_OT_dissolve` in edit mode with `poll=true` and `FINISHED`, collapsing the connected chain into the Root bone extended to the Tip position while preserving the independent bone through save/reopen.", + "- Main already exposes armature bone names, parent IDs, selection state, and head/tail coordinates, so the same post-dissolve fixture is observable in WASM/Main without expanding other data-blocks, editors, or browsers." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1779, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 445 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2394, + "lines": 47, + "tokens": 599 + }, + { + "path": "docs/tasks/M16-GAP-00236.md", + "bytes": 1779, + "lines": 38, + "tokens": 445 + }, + { + "path": "tests/golden/M16-GAP-00235/manifest.json", + "bytes": 2927, + "lines": 74, + "tokens": 732 + }, + { + "path": "docs/status/M16-GAP-00235.md", + "bytes": 1296, + "lines": 20, + "tokens": 324 + } + ], + "sourceTokens": 2100, + "evidenceFiles": 1, + "evidenceBytes": 1429, + "evidenceTokens": 358, + "totalTokens": 2458, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3482, + "serializedContextTokens": 753, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00237/armature-duplicate-move-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00237/armature-duplicate-move-desktop-report.json new file mode 100644 index 00000000..88d32430 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00237/armature-duplicate-move-desktop-report.json @@ -0,0 +1,141 @@ +{ + "after": { + "activeBone": "WebGapArmatureDuplicateMoveSource.001", + "armature": "WebGapArmatureDuplicateMoveArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureDuplicateMoveSource", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureDuplicateMoveOther", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 1.0, + 2.0, + 3.0 + ], + "name": "WebGapArmatureDuplicateMoveSource.001", + "parent": null, + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 1.0, + 3.0, + 3.0 + ] + } + ], + "object": "WebGapArmatureDuplicateMoveObject" + }, + "before": { + "activeBone": "WebGapArmatureDuplicateMoveSource.001", + "armature": "WebGapArmatureDuplicateMoveArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureDuplicateMoveSource", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureDuplicateMoveOther", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 1.0, + 2.0, + 3.0 + ], + "name": "WebGapArmatureDuplicateMoveSource.001", + "parent": null, + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 1.0, + 3.0, + 3.0 + ] + } + ], + "object": "WebGapArmatureDuplicateMoveObject" + }, + "blenderVersion": "5.2.0 LTS", + "duplicateBone": "WebGapArmatureDuplicateMoveSource.001", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00237-operator-armature.duplicate_move.blend", + "fixtureSha256": "18332d833556dc395719a7badd2c2fe0f5630fa1f9b809399ae0ebb4edf47f19", + "mainMutation": "SELECTED_BONE_ALREADY_DUPLICATED_AND_MOVED", + "operation": "ARMATURE_DUPLICATE_MOVE_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "sourceBone": "WebGapArmatureDuplicateMoveSource", + "task": "M16-GAP-00237", + "translation": [ + 1.0, + 2.0, + 3.0 + ] +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00237/armature-duplicate-move-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00237/armature-duplicate-move-local-exact-report.json new file mode 100644 index 00000000..48ba2bbe --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00237/armature-duplicate-move-local-exact-report.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00237", + "operation": "ARMATURE_DUPLICATE_MOVE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00237-operator-armature.duplicate_move.blend", + "sha256": "18332d833556dc395719a7badd2c2fe0f5630fa1f9b809399ae0ebb4edf47f19" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00237/armature-duplicate-move-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "SELECTED_BONE_ALREADY_DUPLICATED_AND_MOVED", + "sourceBone": "WebGapArmatureDuplicateMoveSource", + "duplicateBone": "WebGapArmatureDuplicateMoveSource.001", + "translation": [ + 1, + 2, + 3 + ] + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureDuplicateMoveArmature", + "sourceBoneId": "bone:armature:WebGapArmatureDuplicateMoveArmature:WebGapArmatureDuplicateMoveSource", + "duplicateBoneId": "bone:armature:WebGapArmatureDuplicateMoveArmature:WebGapArmatureDuplicateMoveSource.001", + "otherBoneId": "bone:armature:WebGapArmatureDuplicateMoveArmature:WebGapArmatureDuplicateMoveOther", + "duplicateSelected": true, + "translation": [ + 1, + 2, + 3 + ], + "geometryMatch": true + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00238" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00237/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00237/manifest.json new file mode 100644 index 00000000..6b59aebc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00237/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00237", + "parentTask": "M16-GAP-00236", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_DUPLICATE_MOVE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00236/manifest.json", + "sha256": "8445ead3aefd6f7c5cffd4c8ae0977b6f754d4dd95b332956637051f7cb81518" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00237-operator-armature.duplicate_move.blend", + "sha256": "18332d833556dc395719a7badd2c2fe0f5630fa1f9b809399ae0ebb4edf47f19" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00237.py", + "sha256": "2345158899b35752b6875a28a243668369c51a087eef596eb420e603f0393a75" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-duplicate-move-desktop.py", + "sha256": "32d82956a3c5fba3cb844ce37a3eb174124a1b25fd7c958578c9a97a5138e1a6" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "e20281eeb40ad088e1dd3da40324fa171481455ff399842a5251fb29d4f5e50c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "d190501da90ca93805997120c80833a5730928e73ae1eaa36389d72300688abe" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00237/armature-duplicate-move-desktop-report.json", + "sha256": "94745cd286e017a11dd6fd8df308a22e4d4b5e572bbc3115ee8bbac5fa430bea" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00237/armature-duplicate-move-local-exact-report.json", + "sha256": "3b99961a3aaf2e61d64aa6c9ac9c76e9c5db72e2b5bf14887f613d1bb0723ff9" + }, + "status": { + "path": "docs/status/M16-GAP-00237.md", + "sha256": "9f3084ee5e5e0c6c195f71590e51e8294790164272a4592e8cb60982fc037ad1" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00237/task-context.json", + "sha256": "553e1d6a385d20840eed34b7617b3496e7bded0fdccdb2b68e1ea61228bcbb80" + } + }, + "nextTask": "M16-GAP-00238" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00237/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00237/task-context.json new file mode 100644 index 00000000..e2aab2e2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00237/task-context.json @@ -0,0 +1,182 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00237", + "parentTask": "M16-GAP-00236", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.duplicate_move data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.duplicate_move", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00237.py -- tests/files/web/generated/M16-GAP-00237-operator-armature.duplicate_move.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00237", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00237" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1449, + "contextRemainingTokens": 362 + }, + "source": { + "bytes": 8455, + "tokens": 2114 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00237-operator-armature.duplicate_move.blend", + "bytes": 86393, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/generated/M16-GAP-00237.py", + "bytes": 1662, + "reason": "CONTEXT_REMAINING_SPACE" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 239810, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 654437, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00237/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00237.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00237/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00238", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00237.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00236/manifest.json", + "parentStatus": "docs/status/M16-GAP-00236.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00237.md", + "tests/golden/M16-GAP-00236/manifest.json", + "docs/status/M16-GAP-00236.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00236", + "parentTask": "M16-GAP-00235", + "status": "done", + "nextTask": "M16-GAP-00237", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00236 Status", + "status: done", + "task: armature.duplicate operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one selected source bone with both endpoints selected and one independent unselected bone.", + "- Desktop runs `ARMATURE_OT_duplicate` in edit mode with `poll=true` and `FINISHED`, creating `WebGapArmatureDuplicateSource.001`, selecting it and making it active while preserving the source and independent bone through save/reopen.", + "- Main already exposes armature bone names, parent IDs, selection state, and head/tail coordinates, so the same duplicated fixture is observable in WASM/Main without expanding other data-blocks, editors, or browsers." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1804, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 451 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00237.md", + "bytes": 1804, + "lines": 38, + "tokens": 451 + }, + { + "path": "tests/golden/M16-GAP-00236/manifest.json", + "bytes": 2932, + "lines": 74, + "tokens": 733 + }, + { + "path": "docs/status/M16-GAP-00236.md", + "bytes": 1224, + "lines": 20, + "tokens": 306 + } + ], + "sourceTokens": 2114, + "evidenceFiles": 0, + "evidenceBytes": 0, + "evidenceTokens": 0, + "totalTokens": 2114, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3138, + "serializedContextTokens": 721, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00238/armature-duplicate-rename-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00238/armature-duplicate-rename-desktop-report.json new file mode 100644 index 00000000..b1d18eb2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00238/armature-duplicate-rename-desktop-report.json @@ -0,0 +1,138 @@ +{ + "after": { + "activeBone": "WebGapArmatureDuplicateRenameCopy", + "armature": "WebGapArmatureDuplicateRenameArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureDuplicateRenameSource", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureDuplicateRenameOther", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureDuplicateRenameCopy", + "parent": null, + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureDuplicateRenameObject" + }, + "before": { + "activeBone": "WebGapArmatureDuplicateRenameCopy", + "armature": "WebGapArmatureDuplicateRenameArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureDuplicateRenameSource", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureDuplicateRenameOther", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureDuplicateRenameCopy", + "parent": null, + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureDuplicateRenameObject" + }, + "blenderVersion": "5.2.0 LTS", + "duplicateBone": "WebGapArmatureDuplicateRenameCopy", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00238-operator-armature.duplicate_rename.blend", + "fixtureSha256": "95b9236be44ca3e40482203032ce2fe14a8ba79f5d94396d9fa7af2ab5b711d1", + "mainMutation": "SELECTED_BONE_ALREADY_DUPLICATED_AND_RENAMED", + "operation": "ARMATURE_DUPLICATE_RENAME_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "replace": "Copy", + "saveReopen": "EXACT", + "schemaVersion": 1, + "search": "Source", + "sourceBone": "WebGapArmatureDuplicateRenameSource", + "task": "M16-GAP-00238" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00238/armature-duplicate-rename-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00238/armature-duplicate-rename-local-exact-report.json new file mode 100644 index 00000000..ed85e348 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00238/armature-duplicate-rename-local-exact-report.json @@ -0,0 +1,36 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00238", + "operation": "ARMATURE_DUPLICATE_RENAME_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00238-operator-armature.duplicate_rename.blend", + "sha256": "95b9236be44ca3e40482203032ce2fe14a8ba79f5d94396d9fa7af2ab5b711d1" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00238/armature-duplicate-rename-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "SELECTED_BONE_ALREADY_DUPLICATED_AND_RENAMED", + "sourceBone": "WebGapArmatureDuplicateRenameSource", + "duplicateBone": "WebGapArmatureDuplicateRenameCopy", + "search": "Source", + "replace": "Copy" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureDuplicateRenameArmature", + "sourceBoneId": "bone:armature:WebGapArmatureDuplicateRenameArmature:WebGapArmatureDuplicateRenameSource", + "duplicateBoneId": "bone:armature:WebGapArmatureDuplicateRenameArmature:WebGapArmatureDuplicateRenameCopy", + "otherBoneId": "bone:armature:WebGapArmatureDuplicateRenameArmature:WebGapArmatureDuplicateRenameOther", + "duplicateSelected": true, + "renamedName": "WebGapArmatureDuplicateRenameCopy", + "geometryMatch": true + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00239" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00238/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00238/manifest.json new file mode 100644 index 00000000..34cee9e1 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00238/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00238", + "parentTask": "M16-GAP-00237", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_DUPLICATE_RENAME_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00237/manifest.json", + "sha256": "9cf9d53b83b566e2d2d02c61907c8b58b5b4dba6e2739411d5b960de60ac0a48" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00238-operator-armature.duplicate_rename.blend", + "sha256": "95b9236be44ca3e40482203032ce2fe14a8ba79f5d94396d9fa7af2ab5b711d1" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00238.py", + "sha256": "dd00c6d9952cc91579c298a700c1698e1bfbe55542400bb694c6ea3c9b79bf5d" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-duplicate-rename-desktop.py", + "sha256": "1eadb6c273b4bc77f6c3df9f0060a361c6da2e95b84341ac2173a749f4b72d07" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "4b5fc80f117580e52543a1811ebc59bb9ef408d5db9140258f715e05bed26be1" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "d190501da90ca93805997120c80833a5730928e73ae1eaa36389d72300688abe" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00238/armature-duplicate-rename-desktop-report.json", + "sha256": "90a4d915eb9967f97495ede7b6f855d2049ea1059208b99e75128d79e7f51911" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00238/armature-duplicate-rename-local-exact-report.json", + "sha256": "f3e103b6c1a311bfeaad31c96066060519b091b3ae14c925a3d18e89e6ba8d2a" + }, + "status": { + "path": "docs/status/M16-GAP-00238.md", + "sha256": "a0cd13391e19a1b3acb3e84608cccc9805b0e11b9c7c791a94b3f47731381077" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00238/task-context.json", + "sha256": "5f58af69bdf6921fa2e46c229206c3a26ff737a9f04ad3602ba46e80061169cd" + } + }, + "nextTask": "M16-GAP-00239" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00238/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00238/task-context.json new file mode 100644 index 00000000..5f2587ea --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00238/task-context.json @@ -0,0 +1,182 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00238", + "parentTask": "M16-GAP-00237", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.duplicate_rename data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.duplicate_rename", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00238.py -- tests/files/web/generated/M16-GAP-00238-operator-armature.duplicate_rename.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00238", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00238" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1406, + "contextRemainingTokens": 350 + }, + "source": { + "bytes": 8498, + "tokens": 2126 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00238-operator-armature.duplicate_rename.blend", + "bytes": 86313, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/generated/M16-GAP-00238.py", + "bytes": 1663, + "reason": "CONTEXT_REMAINING_SPACE" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 239810, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 660123, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00238/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00238.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00238/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00239", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00238.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00237/manifest.json", + "parentStatus": "docs/status/M16-GAP-00237.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00238.md", + "tests/golden/M16-GAP-00237/manifest.json", + "docs/status/M16-GAP-00237.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00237", + "parentTask": "M16-GAP-00236", + "status": "done", + "nextTask": "M16-GAP-00238", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00237 Status", + "status: done", + "task: armature.duplicate_move operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one selected source bone with both endpoints selected and one independent unselected bone.", + "- Desktop runs `ARMATURE_OT_duplicate_move` in edit mode with `poll=true` and `FINISHED`, creating `WebGapArmatureDuplicateMoveSource.001` translated by `(1, 2, 3)` while preserving the source and independent bone through save/reopen.", + "- Main already exposes armature bone names, selection state, parent IDs, and head/tail coordinates, so the same moved duplicate is observable in WASM/Main without expanding other data-blocks, editors, or browsers." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1814, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 454 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00238.md", + "bytes": 1814, + "lines": 38, + "tokens": 454 + }, + { + "path": "tests/golden/M16-GAP-00237/manifest.json", + "bytes": 2957, + "lines": 74, + "tokens": 740 + }, + { + "path": "docs/status/M16-GAP-00237.md", + "bytes": 1232, + "lines": 20, + "tokens": 308 + } + ], + "sourceTokens": 2126, + "evidenceFiles": 0, + "evidenceBytes": 0, + "evidenceTokens": 0, + "totalTokens": 2126, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3150, + "serializedContextTokens": 723, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00239/armature-extrude-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00239/armature-extrude-desktop-report.json new file mode 100644 index 00000000..435373f6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00239/armature-extrude-desktop-report.json @@ -0,0 +1,141 @@ +{ + "after": { + "activeBone": "WebGapArmatureExtrudeSource.001", + "armature": "WebGapArmatureExtrudeArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureExtrudeSource", + "parent": null, + "selectHead": false, + "selectTail": true, + "selected": false, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": true, + "head": [ + 0.0, + 1.0, + 0.0 + ], + "name": "WebGapArmatureExtrudeSource.001", + "parent": "WebGapArmatureExtrudeSource", + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 2.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureExtrudeOther", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureExtrudeObject" + }, + "before": { + "activeBone": "WebGapArmatureExtrudeSource.001", + "armature": "WebGapArmatureExtrudeArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureExtrudeSource", + "parent": null, + "selectHead": false, + "selectTail": true, + "selected": false, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": true, + "head": [ + 0.0, + 1.0, + 0.0 + ], + "name": "WebGapArmatureExtrudeSource.001", + "parent": "WebGapArmatureExtrudeSource", + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 2.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureExtrudeOther", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureExtrudeObject" + }, + "blenderVersion": "5.2.0 LTS", + "extrudeBone": "WebGapArmatureExtrudeSource.001", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00239-operator-armature.extrude.blend", + "fixtureSha256": "f4b86c585af6349dc43c50e23c93a482917145ba0b5bbd9ab3f8a7cf5018e661", + "mainMutation": "SELECTED_TAIL_ALREADY_EXTRUDED", + "operation": "ARMATURE_EXTRUDE_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "sourceBone": "WebGapArmatureExtrudeSource", + "task": "M16-GAP-00239", + "translation": [ + 0.0, + 1.0, + 0.0 + ] +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00239/armature-extrude-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00239/armature-extrude-local-exact-report.json new file mode 100644 index 00000000..33243c3b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00239/armature-extrude-local-exact-report.json @@ -0,0 +1,50 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00239", + "operation": "ARMATURE_EXTRUDE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00239-operator-armature.extrude.blend", + "sha256": "f4b86c585af6349dc43c50e23c93a482917145ba0b5bbd9ab3f8a7cf5018e661" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00239/armature-extrude-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "SELECTED_TAIL_ALREADY_EXTRUDED", + "sourceBone": "WebGapArmatureExtrudeSource", + "extrudeBone": "WebGapArmatureExtrudeSource.001", + "translation": [ + 0, + 1, + 0 + ] + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureExtrudeArmature", + "sourceBoneId": "bone:armature:WebGapArmatureExtrudeArmature:WebGapArmatureExtrudeSource", + "extrudeBoneId": "bone:armature:WebGapArmatureExtrudeArmature:WebGapArmatureExtrudeSource.001", + "otherBoneId": "bone:armature:WebGapArmatureExtrudeArmature:WebGapArmatureExtrudeOther", + "extrudeSelected": true, + "parentId": "bone:armature:WebGapArmatureExtrudeArmature:WebGapArmatureExtrudeSource", + "geometry": { + "head": [ + 0, + 0, + 0 + ], + "tail": [ + 0, + 1, + 0 + ] + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00240" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00239/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00239/manifest.json new file mode 100644 index 00000000..b09a97c1 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00239/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00239", + "parentTask": "M16-GAP-00238", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_EXTRUDE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00238/manifest.json", + "sha256": "5d35528b7d6e923626ead34f2120a0c69fad8385621780bfb06ea80fd287a990" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00239-operator-armature.extrude.blend", + "sha256": "f4b86c585af6349dc43c50e23c93a482917145ba0b5bbd9ab3f8a7cf5018e661" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00239.py", + "sha256": "651deeb3808998b44611bcecdfab9adc903245f53b66f521fad03443b900e047" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-extrude-desktop.py", + "sha256": "066e1851024ebedcec78e4e3962516ce8c43ae87ef87522d7acc8b6ca1f49a4d" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "eb246622b1ba205424ae7b6e964dba11340013a7a73a7e7667028d7ee91c6113" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "d190501da90ca93805997120c80833a5730928e73ae1eaa36389d72300688abe" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00239/armature-extrude-desktop-report.json", + "sha256": "3f264c22cc013676e33e82b98458a5baff8703addaaee26812ed2205aa062fed" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00239/armature-extrude-local-exact-report.json", + "sha256": "524adb7be53d523d48f87773d6782bd78db1e81eb6d88c6eba3641ff283e5269" + }, + "status": { + "path": "docs/status/M16-GAP-00239.md", + "sha256": "06f69cd41bf79caf33eeb65b3ee0a14dca930bfac46984ce2b2b3c01a53218d7" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00239/task-context.json", + "sha256": "ef9bc0d189399baae95fef4e518ed6997c26b21ade00d4cda06ff1b086a57cfb" + } + }, + "nextTask": "M16-GAP-00240" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00239/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00239/task-context.json new file mode 100644 index 00000000..18719c78 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00239/task-context.json @@ -0,0 +1,182 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00239", + "parentTask": "M16-GAP-00238", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.extrude data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.extrude", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00239.py -- tests/files/web/generated/M16-GAP-00239-operator-armature.extrude.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00239", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00239" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1400, + "contextRemainingTokens": 348 + }, + "source": { + "bytes": 8504, + "tokens": 2128 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00239-operator-armature.extrude.blend", + "bytes": 86358, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/generated/M16-GAP-00239.py", + "bytes": 1422, + "reason": "CONTEXT_REMAINING_SPACE" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 239810, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 665905, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00239/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00239.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00239/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00240", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00239.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00238/manifest.json", + "parentStatus": "docs/status/M16-GAP-00238.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00239.md", + "tests/golden/M16-GAP-00238/manifest.json", + "docs/status/M16-GAP-00238.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00238", + "parentTask": "M16-GAP-00237", + "status": "done", + "nextTask": "M16-GAP-00239", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00238 Status", + "status: done", + "task: armature.duplicate_rename operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one selected source bone with both endpoints selected and one independent unselected bone.", + "- Desktop runs `ARMATURE_OT_duplicate_rename` in edit mode with `poll=true` and `FINISHED`, creating `WebGapArmatureDuplicateRenameCopy` from `WebGapArmatureDuplicateRenameSource` using `Source -> Copy` while preserving the source and independent bone through save/reopen.", + "- Main already exposes armature bone names, selection state, parent IDs, and head/tail coordinates, so the same renamed duplicate is observable in WASM/Main without expanding other data-blocks, editors, or browsers." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1769, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 443 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00239.md", + "bytes": 1769, + "lines": 38, + "tokens": 443 + }, + { + "path": "tests/golden/M16-GAP-00238/manifest.json", + "bytes": 2967, + "lines": 74, + "tokens": 742 + }, + { + "path": "docs/status/M16-GAP-00238.md", + "bytes": 1273, + "lines": 20, + "tokens": 319 + } + ], + "sourceTokens": 2128, + "evidenceFiles": 0, + "evidenceBytes": 0, + "evidenceTokens": 0, + "totalTokens": 2128, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3152, + "serializedContextTokens": 716, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00240/armature-extrude-forked-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00240/armature-extrude-forked-desktop-report.json new file mode 100644 index 00000000..2557c20d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00240/armature-extrude-forked-desktop-report.json @@ -0,0 +1,142 @@ +{ + "after": { + "activeBone": "WebGapArmatureExtrudeForkedSource.001", + "armature": "WebGapArmatureExtrudeForkedArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureExtrudeForkedSource", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 0.0, + 1.0, + 0.0 + ], + "name": "WebGapArmatureExtrudeForkedSource.001", + "parent": "WebGapArmatureExtrudeForkedSource", + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 2.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureExtrudeForkedOther", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureExtrudeForkedObject" + }, + "before": { + "activeBone": "WebGapArmatureExtrudeForkedSource.001", + "armature": "WebGapArmatureExtrudeForkedArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureExtrudeForkedSource", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 0.0, + 1.0, + 0.0 + ], + "name": "WebGapArmatureExtrudeForkedSource.001", + "parent": "WebGapArmatureExtrudeForkedSource", + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 2.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureExtrudeForkedOther", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureExtrudeForkedObject" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00240-operator-armature.extrude_forked.blend", + "fixtureSha256": "bf0a7def9d8ff9c30218d5f11a23f533b777bfb02e35b1bf87f0c9a285af637f", + "forked": true, + "forkedBone": "WebGapArmatureExtrudeForkedSource.001", + "mainMutation": "SELECTED_TAIL_ALREADY_EXTRUDED_FORKED", + "operation": "ARMATURE_EXTRUDE_FORKED_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "sourceBone": "WebGapArmatureExtrudeForkedSource", + "task": "M16-GAP-00240", + "translation": [ + 0.0, + 1.0, + 0.0 + ] +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00240/armature-extrude-forked-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00240/armature-extrude-forked-local-exact-report.json new file mode 100644 index 00000000..e3a80bb0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00240/armature-extrude-forked-local-exact-report.json @@ -0,0 +1,52 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00240", + "operation": "ARMATURE_EXTRUDE_FORKED_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00240-operator-armature.extrude_forked.blend", + "sha256": "bf0a7def9d8ff9c30218d5f11a23f533b777bfb02e35b1bf87f0c9a285af637f" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00240/armature-extrude-forked-desktop-report.json", + "saveReopen": "EXACT", + "forked": true, + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "SELECTED_TAIL_ALREADY_EXTRUDED_FORKED", + "sourceBone": "WebGapArmatureExtrudeForkedSource", + "forkedBone": "WebGapArmatureExtrudeForkedSource.001", + "translation": [ + 0, + 1, + 0 + ] + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureExtrudeForkedArmature", + "sourceBoneId": "bone:armature:WebGapArmatureExtrudeForkedArmature:WebGapArmatureExtrudeForkedSource", + "forkedBoneId": "bone:armature:WebGapArmatureExtrudeForkedArmature:WebGapArmatureExtrudeForkedSource.001", + "otherBoneId": "bone:armature:WebGapArmatureExtrudeForkedArmature:WebGapArmatureExtrudeForkedOther", + "forkedSelected": true, + "parentId": "bone:armature:WebGapArmatureExtrudeForkedArmature:WebGapArmatureExtrudeForkedSource", + "connected": false, + "geometry": { + "head": [ + 0, + 0, + 0 + ], + "tail": [ + 0, + 1, + 0 + ] + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00241" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00240/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00240/manifest.json new file mode 100644 index 00000000..e410934e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00240/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00240", + "parentTask": "M16-GAP-00239", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_EXTRUDE_FORKED_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00239/manifest.json", + "sha256": "558907921bfe14ddb6f93ff89f0dd88f950e537c6f1a9c4c2e5b9fc0e47d3d81" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00240-operator-armature.extrude_forked.blend", + "sha256": "bf0a7def9d8ff9c30218d5f11a23f533b777bfb02e35b1bf87f0c9a285af637f" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00240.py", + "sha256": "586f9ed3d865bf4ca759b36d010013ba33a34ff8862578c65b25acc9f53a4a69" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-extrude-forked-desktop.py", + "sha256": "cd13871abd4e28e9230388693209bbeb7d3b8f1e9daf99d3df09c9071bc9930a" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "f1ed4780038d37d9263a2282af25cee5ab2aa6207922c4c04dcf88c6d1ddd209" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "d190501da90ca93805997120c80833a5730928e73ae1eaa36389d72300688abe" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00240/armature-extrude-forked-desktop-report.json", + "sha256": "37ca8eb97c454cc572f70143aa98f01cba23190ea889bce7b688529d415945a4" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00240/armature-extrude-forked-local-exact-report.json", + "sha256": "957d36b2188d063415a2dcb70995bacddfeac01152872cf06ae27bba941a3ce6" + }, + "status": { + "path": "docs/status/M16-GAP-00240.md", + "sha256": "e50e0e1f6cbbbe7ca87686fa32b554bd1e9027452139638c055966cfad1a0b35" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00240/task-context.json", + "sha256": "3756f32ea6e1bf3b36c5480563a90e004f9a8e0836e18aeaa9f3e7b5d7abc545" + } + }, + "nextTask": "M16-GAP-00241" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00240/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00240/task-context.json new file mode 100644 index 00000000..b9d2d22f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00240/task-context.json @@ -0,0 +1,182 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00240", + "parentTask": "M16-GAP-00239", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.extrude_forked data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.extrude_forked", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00240.py -- tests/files/web/generated/M16-GAP-00240-operator-armature.extrude_forked.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00240", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00240" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1394, + "contextRemainingTokens": 347 + }, + "source": { + "bytes": 8510, + "tokens": 2129 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00240-operator-armature.extrude_forked.blend", + "bytes": 86397, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/generated/M16-GAP-00240.py", + "bytes": 1446, + "reason": "CONTEXT_REMAINING_SPACE" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 239810, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 671813, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00240/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00240.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00240/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00241", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00240.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00239/manifest.json", + "parentStatus": "docs/status/M16-GAP-00239.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00240.md", + "tests/golden/M16-GAP-00239/manifest.json", + "docs/status/M16-GAP-00239.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00239", + "parentTask": "M16-GAP-00238", + "status": "done", + "nextTask": "M16-GAP-00240", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00239 Status", + "status: done", + "task: armature.extrude operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one source bone with its tail selected and one independent unselected bone.", + "- Desktop runs `ARMATURE_OT_extrude` in edit mode with `poll=true` and `FINISHED`, creating `WebGapArmatureExtrudeSource.001` connected to the source and extending it to `(0, 2, 0)` while preserving the independent bone through save/reopen.", + "- Main exposes the extruded bone name, parent ID, selection state, connected flag, and parent-relative head/tail coordinates; the comparator normalizes desktop armature-space coordinates against the source tail without expanding other data-blocks, editors, or browsers." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1804, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 451 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00240.md", + "bytes": 1804, + "lines": 38, + "tokens": 451 + }, + { + "path": "tests/golden/M16-GAP-00239/manifest.json", + "bytes": 2922, + "lines": 74, + "tokens": 731 + }, + { + "path": "docs/status/M16-GAP-00239.md", + "bytes": 1289, + "lines": 20, + "tokens": 323 + } + ], + "sourceTokens": 2129, + "evidenceFiles": 0, + "evidenceBytes": 0, + "evidenceTokens": 0, + "totalTokens": 2129, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3153, + "serializedContextTokens": 721, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00241/armature-extrude-move-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00241/armature-extrude-move-desktop-report.json new file mode 100644 index 00000000..21aa08f4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00241/armature-extrude-move-desktop-report.json @@ -0,0 +1,141 @@ +{ + "after": { + "activeBone": "WebGapArmatureExtrudeMoveSource.001", + "armature": "WebGapArmatureExtrudeMoveArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureExtrudeMoveSource", + "parent": null, + "selectHead": false, + "selectTail": true, + "selected": false, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": true, + "head": [ + 0.0, + 1.0, + 0.0 + ], + "name": "WebGapArmatureExtrudeMoveSource.001", + "parent": "WebGapArmatureExtrudeMoveSource", + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 2.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureExtrudeMoveOther", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureExtrudeMoveObject" + }, + "before": { + "activeBone": "WebGapArmatureExtrudeMoveSource.001", + "armature": "WebGapArmatureExtrudeMoveArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureExtrudeMoveSource", + "parent": null, + "selectHead": false, + "selectTail": true, + "selected": false, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": true, + "head": [ + 0.0, + 1.0, + 0.0 + ], + "name": "WebGapArmatureExtrudeMoveSource.001", + "parent": "WebGapArmatureExtrudeMoveSource", + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 2.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureExtrudeMoveOther", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureExtrudeMoveObject" + }, + "blenderVersion": "5.2.0 LTS", + "extrudeBone": "WebGapArmatureExtrudeMoveSource.001", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00241-operator-armature.extrude_move.blend", + "fixtureSha256": "3959f29bfef358c9a7f10720605b9706bf03830f18ae713e4409b6396b3ea18c", + "mainMutation": "SELECTED_TAIL_ALREADY_EXTRUDED_AND_MOVED", + "operation": "ARMATURE_EXTRUDE_MOVE_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "sourceBone": "WebGapArmatureExtrudeMoveSource", + "task": "M16-GAP-00241", + "translation": [ + 0.0, + 1.0, + 0.0 + ] +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00241/armature-extrude-move-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00241/armature-extrude-move-local-exact-report.json new file mode 100644 index 00000000..1766e4f0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00241/armature-extrude-move-local-exact-report.json @@ -0,0 +1,51 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00241", + "operation": "ARMATURE_EXTRUDE_MOVE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00241-operator-armature.extrude_move.blend", + "sha256": "3959f29bfef358c9a7f10720605b9706bf03830f18ae713e4409b6396b3ea18c" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00241/armature-extrude-move-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "SELECTED_TAIL_ALREADY_EXTRUDED_AND_MOVED", + "sourceBone": "WebGapArmatureExtrudeMoveSource", + "extrudeBone": "WebGapArmatureExtrudeMoveSource.001", + "translation": [ + 0, + 1, + 0 + ] + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureExtrudeMoveArmature", + "sourceBoneId": "bone:armature:WebGapArmatureExtrudeMoveArmature:WebGapArmatureExtrudeMoveSource", + "extrudeBoneId": "bone:armature:WebGapArmatureExtrudeMoveArmature:WebGapArmatureExtrudeMoveSource.001", + "otherBoneId": "bone:armature:WebGapArmatureExtrudeMoveArmature:WebGapArmatureExtrudeMoveOther", + "extrudeSelected": true, + "parentId": "bone:armature:WebGapArmatureExtrudeMoveArmature:WebGapArmatureExtrudeMoveSource", + "connected": true, + "geometry": { + "head": [ + 0, + 0, + 0 + ], + "tail": [ + 0, + 1, + 0 + ] + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00242" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00241/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00241/manifest.json new file mode 100644 index 00000000..17c99601 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00241/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00241", + "parentTask": "M16-GAP-00240", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_EXTRUDE_MOVE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00240/manifest.json", + "sha256": "3301ff54213d32531d2151a92b67e0efef3b9a577d36e1171c41b7b618c15c11" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00241-operator-armature.extrude_move.blend", + "sha256": "3959f29bfef358c9a7f10720605b9706bf03830f18ae713e4409b6396b3ea18c" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00241.py", + "sha256": "ba7a8fb5d46dc073f2e93180534340008d9f35824bdcbe829ede880015061a08" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-extrude-move-desktop.py", + "sha256": "9e1496c7022f9e70ade8cb937a815a7a0f0d3db9679d39b4b14b3e9cfae4bf85" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "f7a3fb5f2deef8c36547157e005f71ead700cf187cead8ad0003c462098bac44" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "d190501da90ca93805997120c80833a5730928e73ae1eaa36389d72300688abe" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00241/armature-extrude-move-desktop-report.json", + "sha256": "a24fb58e990504c5bd8a8d7a2d010f16028e070f099137bb26e5a2769a7fcc38" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00241/armature-extrude-move-local-exact-report.json", + "sha256": "05293986bab59aed5d1629d9a9e28c3499db619b33294f6f5d7557a463bfc001" + }, + "status": { + "path": "docs/status/M16-GAP-00241.md", + "sha256": "3a467ab859b73c7ebd3258c6f15f15ba2db2b197c8bf4a2441d7bcfdac26e06c" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00241/task-context.json", + "sha256": "ddbe88064be8649f792d2c731a9269ccb3eabe35a08430e613ca8cba0b25ddbb" + } + }, + "nextTask": "M16-GAP-00242" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00241/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00241/task-context.json new file mode 100644 index 00000000..eaf7b213 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00241/task-context.json @@ -0,0 +1,182 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00241", + "parentTask": "M16-GAP-00240", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.extrude_move data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.extrude_move", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00241.py -- tests/files/web/generated/M16-GAP-00241-operator-armature.extrude_move.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00241", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00241" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1360, + "contextRemainingTokens": 338 + }, + "source": { + "bytes": 8544, + "tokens": 2138 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00241-operator-armature.extrude_move.blend", + "bytes": 86364, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/generated/M16-GAP-00241.py", + "bytes": 1438, + "reason": "CONTEXT_REMAINING_SPACE" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 239810, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 677665, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00241/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00241.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00241/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00242", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00241.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00240/manifest.json", + "parentStatus": "docs/status/M16-GAP-00240.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00241.md", + "tests/golden/M16-GAP-00240/manifest.json", + "docs/status/M16-GAP-00240.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00240", + "parentTask": "M16-GAP-00239", + "status": "done", + "nextTask": "M16-GAP-00241", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00240 Status", + "status: done", + "task: armature.extrude_forked operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one source bone with its tail selected and one independent unselected bone.", + "- Desktop runs `ARMATURE_OT_extrude(forked=true)` in edit mode with `poll=true` and `FINISHED`, creating `WebGapArmatureExtrudeForkedSource.001` from the source tail with `connected=false` while preserving the source and independent bone through save/reopen.", + "- Main exposes the forked bone name, parent ID, selection state, connected flag, and parent-relative head/tail coordinates; the comparator normalizes desktop armature-space coordinates against the source tail without expanding other data-blocks, editors, or browsers." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1794, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 449 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00241.md", + "bytes": 1794, + "lines": 38, + "tokens": 449 + }, + { + "path": "tests/golden/M16-GAP-00240/manifest.json", + "bytes": 2957, + "lines": 74, + "tokens": 740 + }, + { + "path": "docs/status/M16-GAP-00240.md", + "bytes": 1298, + "lines": 20, + "tokens": 325 + } + ], + "sourceTokens": 2138, + "evidenceFiles": 0, + "evidenceBytes": 0, + "evidenceTokens": 0, + "totalTokens": 2138, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3162, + "serializedContextTokens": 720, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00242/armature-fill-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00242/armature-fill-desktop-report.json new file mode 100644 index 00000000..038f3b42 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00242/armature-fill-desktop-report.json @@ -0,0 +1,173 @@ +{ + "after": { + "activeBone": "WebGapArmatureFillBridge", + "armature": "WebGapArmatureFillArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureFillSource", + "parent": null, + "selectHead": false, + "selectTail": true, + "selected": false, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": true, + "head": [ + 0.0, + 1.0, + 0.0 + ], + "name": "WebGapArmatureFillBridge", + "parent": "WebGapArmatureFillSource", + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 2.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 0.0, + 2.0, + 0.0 + ], + "name": "WebGapArmatureFillTarget", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 0.0, + 3.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureFillOther", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureFillObject" + }, + "before": { + "activeBone": "WebGapArmatureFillBridge", + "armature": "WebGapArmatureFillArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureFillSource", + "parent": null, + "selectHead": false, + "selectTail": true, + "selected": false, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": true, + "head": [ + 0.0, + 1.0, + 0.0 + ], + "name": "WebGapArmatureFillBridge", + "parent": "WebGapArmatureFillSource", + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 2.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 0.0, + 2.0, + 0.0 + ], + "name": "WebGapArmatureFillTarget", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 0.0, + 3.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureFillOther", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureFillObject" + }, + "blenderVersion": "5.2.0 LTS", + "bridgeBone": "WebGapArmatureFillBridge", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00242-operator-armature.fill.blend", + "fixtureSha256": "b7f20bcc4f7a6045bc38fdec9394872e399a55f3de9e4081b40dde3b911d770d", + "mainMutation": "SELECTED_ENDPOINTS_ALREADY_FILLED", + "operation": "ARMATURE_FILL_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "sourceBone": "WebGapArmatureFillSource", + "targetBone": "WebGapArmatureFillTarget", + "task": "M16-GAP-00242" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00242/armature-fill-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00242/armature-fill-local-exact-report.json new file mode 100644 index 00000000..f8d01ff7 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00242/armature-fill-local-exact-report.json @@ -0,0 +1,48 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00242", + "operation": "ARMATURE_FILL_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00242-operator-armature.fill.blend", + "sha256": "b7f20bcc4f7a6045bc38fdec9394872e399a55f3de9e4081b40dde3b911d770d" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00242/armature-fill-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "SELECTED_ENDPOINTS_ALREADY_FILLED", + "sourceBone": "WebGapArmatureFillSource", + "targetBone": "WebGapArmatureFillTarget", + "bridgeBone": "WebGapArmatureFillBridge" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureFillArmature", + "sourceBoneId": "bone:armature:WebGapArmatureFillArmature:WebGapArmatureFillSource", + "targetBoneId": "bone:armature:WebGapArmatureFillArmature:WebGapArmatureFillTarget", + "bridgeBoneId": "bone:armature:WebGapArmatureFillArmature:WebGapArmatureFillBridge", + "otherBoneId": "bone:armature:WebGapArmatureFillArmature:WebGapArmatureFillOther", + "bridgeSelected": true, + "parentId": "bone:armature:WebGapArmatureFillArmature:WebGapArmatureFillSource", + "connected": true, + "geometry": { + "head": [ + 0, + 0, + 0 + ], + "tail": [ + 0, + 1, + 0 + ] + } + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00243" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00242/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00242/manifest.json new file mode 100644 index 00000000..054059ca --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00242/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00242", + "parentTask": "M16-GAP-00241", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_FILL_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00241/manifest.json", + "sha256": "d1cb4558aff9635c73c9b46d39915482d9e9d78b0ac56d3b64783fc0beb1812d" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00242-operator-armature.fill.blend", + "sha256": "b7f20bcc4f7a6045bc38fdec9394872e399a55f3de9e4081b40dde3b911d770d" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00242.py", + "sha256": "0e2b56d0020066bcd69d7ee4970c4eaaf3f3cdf02a9f528903997246b3a9ea48" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-fill-desktop.py", + "sha256": "fa8f3e577dd5b3924f8266509346f1c459a45bc62ac597926b412a962c4a9017" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "09da6257d1becbe2d1b7b6704286bf9684075b0d860a4d2c436eafe2ec4ab883" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "d190501da90ca93805997120c80833a5730928e73ae1eaa36389d72300688abe" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00242/armature-fill-desktop-report.json", + "sha256": "39f5db8f1a77e188ef3d4c3084c9bcf961551767211b40f006499a66ad51f56f" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00242/armature-fill-local-exact-report.json", + "sha256": "f4d927d1e6a10c9db3bd0b6a32b771aa96a25af9f9a5ab4a01741932173a293a" + }, + "status": { + "path": "docs/status/M16-GAP-00242.md", + "sha256": "fb18cd303bcd1455f363897d6e2d34320a81156c1a096ec6ca0560e3f59e3cbb" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00242/task-context.json", + "sha256": "59d07c1a9a8151af3b530ca1e6ffa56b0747ce67637ac9851c94c63e70b0ded8" + } + }, + "nextTask": "M16-GAP-00243" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00242/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00242/task-context.json new file mode 100644 index 00000000..b7087c1a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00242/task-context.json @@ -0,0 +1,182 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00242", + "parentTask": "M16-GAP-00241", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.fill data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.fill", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00242.py -- tests/files/web/generated/M16-GAP-00242-operator-armature.fill.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00242", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00242" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1368, + "contextRemainingTokens": 341 + }, + "source": { + "bytes": 8536, + "tokens": 2135 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00242-operator-armature.fill.blend", + "bytes": 86429, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/generated/M16-GAP-00242.py", + "bytes": 1657, + "reason": "CONTEXT_REMAINING_SPACE" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 239810, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 683901, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00242/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00242.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00242/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00243", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00242.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00241/manifest.json", + "parentStatus": "docs/status/M16-GAP-00241.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00242.md", + "tests/golden/M16-GAP-00241/manifest.json", + "docs/status/M16-GAP-00241.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00241", + "parentTask": "M16-GAP-00240", + "status": "done", + "nextTask": "M16-GAP-00242", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00241 Status", + "status: done", + "task: armature.extrude_move operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one source bone with its tail selected and one independent unselected bone.", + "- Desktop runs `ARMATURE_OT_extrude_move` in edit mode with `poll=true`, `FINISHED`, and a `(0, 1, 0)` translate transform, creating `WebGapArmatureExtrudeMoveSource.001` connected to the source while preserving the source and independent bone through save/reopen.", + "- Main exposes the moved extruded bone name, parent ID, selection state, connected flag, and parent-relative head/tail coordinates; the comparator normalizes desktop armature-space coordinates against the source tail without expanding other data-blocks, editors, or browsers." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1754, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 439 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00242.md", + "bytes": 1754, + "lines": 38, + "tokens": 439 + }, + { + "path": "tests/golden/M16-GAP-00241/manifest.json", + "bytes": 2947, + "lines": 74, + "tokens": 737 + }, + { + "path": "docs/status/M16-GAP-00241.md", + "bytes": 1340, + "lines": 20, + "tokens": 335 + } + ], + "sourceTokens": 2135, + "evidenceFiles": 0, + "evidenceBytes": 0, + "evidenceTokens": 0, + "totalTokens": 2135, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3159, + "serializedContextTokens": 714, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00243/armature-flip-names-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00243/armature-flip-names-desktop-report.json new file mode 100644 index 00000000..92425cb0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00243/armature-flip-names-desktop-report.json @@ -0,0 +1,137 @@ +{ + "after": { + "activeBone": "WebGapArmatureFlipBone.L", + "armature": "WebGapArmatureFlipNamesArmature", + "bones": [ + { + "connected": false, + "head": [ + -1.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureFlipBone.R", + "parent": null, + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + -1.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 1.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureFlipBone.L", + "parent": null, + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 1.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 0.0, + 0.0, + 2.0 + ], + "name": "WebGapArmatureFlipOther", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 0.0, + 1.0, + 2.0 + ] + } + ], + "object": "WebGapArmatureFlipNamesObject" + }, + "before": { + "activeBone": "WebGapArmatureFlipBone.L", + "armature": "WebGapArmatureFlipNamesArmature", + "bones": [ + { + "connected": false, + "head": [ + -1.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureFlipBone.R", + "parent": null, + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + -1.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 1.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureFlipBone.L", + "parent": null, + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 1.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 0.0, + 0.0, + 2.0 + ], + "name": "WebGapArmatureFlipOther", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 0.0, + 1.0, + 2.0 + ] + } + ], + "object": "WebGapArmatureFlipNamesObject" + }, + "blenderVersion": "5.2.0 LTS", + "doStripNumbers": false, + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00243-operator-armature.flip_names.blend", + "fixtureSha256": "b21a9ececf220be55c9d17d99c7fcbb0fe43b2fea6ffac88eb4eb34be1ebb5ba", + "leftGeometryBone": "WebGapArmatureFlipBone.R", + "mainMutation": "SELECTED_LEFT_RIGHT_NAMES_ALREADY_FLIPPED", + "operation": "ARMATURE_FLIP_NAMES_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "rightGeometryBone": "WebGapArmatureFlipBone.L", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00243" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00243/armature-flip-names-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00243/armature-flip-names-local-exact-report.json new file mode 100644 index 00000000..a888ba16 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00243/armature-flip-names-local-exact-report.json @@ -0,0 +1,35 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00243", + "operation": "ARMATURE_FLIP_NAMES_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00243-operator-armature.flip_names.blend", + "sha256": "b21a9ececf220be55c9d17d99c7fcbb0fe43b2fea6ffac88eb4eb34be1ebb5ba" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00243/armature-flip-names-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "SELECTED_LEFT_RIGHT_NAMES_ALREADY_FLIPPED", + "leftGeometryBone": "WebGapArmatureFlipBone.R", + "rightGeometryBone": "WebGapArmatureFlipBone.L", + "doStripNumbers": false + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureFlipNamesArmature", + "leftBoneId": "bone:armature:WebGapArmatureFlipNamesArmature:WebGapArmatureFlipBone.R", + "rightBoneId": "bone:armature:WebGapArmatureFlipNamesArmature:WebGapArmatureFlipBone.L", + "otherBoneId": "bone:armature:WebGapArmatureFlipNamesArmature:WebGapArmatureFlipOther", + "leftName": "WebGapArmatureFlipBone.R", + "rightName": "WebGapArmatureFlipBone.L", + "geometryNamesFlipped": true + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00244" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00243/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00243/manifest.json new file mode 100644 index 00000000..f79e95c2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00243/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00243", + "parentTask": "M16-GAP-00242", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_FLIP_NAMES_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00242/manifest.json", + "sha256": "1de876070dab2ce6cebb4d42845735f712de45219c3f0b6da22e8a42518841ef" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00243-operator-armature.flip_names.blend", + "sha256": "b21a9ececf220be55c9d17d99c7fcbb0fe43b2fea6ffac88eb4eb34be1ebb5ba" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00243.py", + "sha256": "444c10dac8003527409024263844587d5c7b6d1cec495fc8e408b6af14e60fde" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-flip-names-desktop.py", + "sha256": "5b3bc16b1fdfed70b6be9ca37ee1c949ce02129f4d396216f70edc022ba1082a" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "6a3158c95a0d434a904ff08d2b11224990ba2c56c9f9f92648a20ef04f98b863" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "d190501da90ca93805997120c80833a5730928e73ae1eaa36389d72300688abe" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "d125269a0a69ef9e168009803217eeb7d0a2c4c2b725afb6ed8fc417e715b517" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00243/armature-flip-names-desktop-report.json", + "sha256": "489a05e88b2f35bfa0c910623db17897d70041afbbeecd2ad6575997c62d5a7f" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00243/armature-flip-names-local-exact-report.json", + "sha256": "e3a6efe370d43e0d05e4668994c70dade862aec0f45b50978558d3468e022d93" + }, + "status": { + "path": "docs/status/M16-GAP-00243.md", + "sha256": "3fa12d4941b7ea5131682f3727020b2bd45bb6ddd15368d42bb723002e1c9e2d" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00243/task-context.json", + "sha256": "c71f199a41f023b1724f3075c1755b509f014918cbd27937779323e4d6d16974" + } + }, + "nextTask": "M16-GAP-00244" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00243/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00243/task-context.json new file mode 100644 index 00000000..5fe3fdbe --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00243/task-context.json @@ -0,0 +1,182 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00243", + "parentTask": "M16-GAP-00242", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.flip_names data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.flip_names", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00243.py -- tests/files/web/generated/M16-GAP-00243-operator-armature.flip_names.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00243", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00243" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1411, + "contextRemainingTokens": 352 + }, + "source": { + "bytes": 8493, + "tokens": 2124 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00243-operator-armature.flip_names.blend", + "bytes": 86395, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/generated/M16-GAP-00243.py", + "bytes": 1640, + "reason": "CONTEXT_REMAINING_SPACE" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 239810, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 689109, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00243/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00243.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00243/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00244", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00243.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00242/manifest.json", + "parentStatus": "docs/status/M16-GAP-00242.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00243.md", + "tests/golden/M16-GAP-00242/manifest.json", + "docs/status/M16-GAP-00242.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00242", + "parentTask": "M16-GAP-00241", + "status": "done", + "nextTask": "M16-GAP-00243", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00242 Status", + "status: done", + "task: armature.fill operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains a source bone tail and target bone head selected as the two fill endpoints, plus one independent unselected bone.", + "- Desktop runs `ARMATURE_OT_fill` in edit mode with `poll=true` and `FINISHED`, creating `WebGapArmatureFillBridge` between source tail and target head while preserving the original source/target and independent bone through save/reopen.", + "- Main exposes the bridge bone name, parent ID, selection state, connected flag, and parent-relative head/tail coordinates; the comparator normalizes desktop armature-space coordinates against the source tail without expanding other data-blocks, editors, or browsers." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1784, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 446 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00243.md", + "bytes": 1784, + "lines": 38, + "tokens": 446 + }, + { + "path": "tests/golden/M16-GAP-00242/manifest.json", + "bytes": 2907, + "lines": 74, + "tokens": 727 + }, + { + "path": "docs/status/M16-GAP-00242.md", + "bytes": 1307, + "lines": 20, + "tokens": 327 + } + ], + "sourceTokens": 2124, + "evidenceFiles": 0, + "evidenceBytes": 0, + "evidenceTokens": 0, + "totalTokens": 2124, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3148, + "serializedContextTokens": 718, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00244/armature-hide-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00244/armature-hide-desktop-report.json new file mode 100644 index 00000000..3063dfec --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00244/armature-hide-desktop-report.json @@ -0,0 +1,104 @@ +{ + "after": { + "activeBone": "WebGapArmatureHideSelected", + "armature": "WebGapArmatureHideArmature", + "bones": [ + { + "connected": false, + "head": [ + -1.0, + 0.0, + 0.0 + ], + "hidden": true, + "name": "WebGapArmatureHideSelected", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + -1.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 1.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureHideOther", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 1.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureHideObject" + }, + "before": { + "activeBone": "WebGapArmatureHideSelected", + "armature": "WebGapArmatureHideArmature", + "bones": [ + { + "connected": false, + "head": [ + -1.0, + 0.0, + 0.0 + ], + "hidden": true, + "name": "WebGapArmatureHideSelected", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + -1.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 1.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureHideOther", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 1.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureHideObject" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00244-operator-armature.hide.blend", + "fixtureSha256": "1a3486ca531e5f679886228539fc841d5afc7c9eb7315fb0d5f31061d5f26aa4", + "hiddenBone": "WebGapArmatureHideSelected", + "mainMutation": "SELECTED_BONE_ALREADY_HIDDEN", + "operation": "ARMATURE_HIDE_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00244", + "unselected": false +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00244/armature-hide-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00244/armature-hide-local-exact-report.json new file mode 100644 index 00000000..e70cbb01 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00244/armature-hide-local-exact-report.json @@ -0,0 +1,33 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00244", + "operation": "ARMATURE_HIDE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00244-operator-armature.hide.blend", + "sha256": "1a3486ca531e5f679886228539fc841d5afc7c9eb7315fb0d5f31061d5f26aa4" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00244/armature-hide-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "SELECTED_BONE_ALREADY_HIDDEN", + "hiddenBone": "WebGapArmatureHideSelected", + "unselected": false + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureHideArmature", + "hiddenBoneId": "bone:armature:WebGapArmatureHideArmature:WebGapArmatureHideSelected", + "otherBoneId": "bone:armature:WebGapArmatureHideArmature:WebGapArmatureHideOther", + "hidden": true, + "selectedAfterHide": false, + "otherHidden": false + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00245" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00244/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00244/manifest.json new file mode 100644 index 00000000..efbb4b4e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00244/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00244", + "parentTask": "M16-GAP-00243", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_HIDE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00243/manifest.json", + "sha256": "1a794c9171bf53a620cdb7679fb26ef76095199a990e832e70189b1185e53355" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00244-operator-armature.hide.blend", + "sha256": "1a3486ca531e5f679886228539fc841d5afc7c9eb7315fb0d5f31061d5f26aa4" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00244.py", + "sha256": "848e43152c5035fc40d6ffafa566dbcbf4a7940d32fbd75a7d696321d125c938" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-hide-desktop.py", + "sha256": "455d76e6dbd6100f9a33a517a31232605f3d878d165e5938a6aae50682d1fc9c" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "1717ac61ffc9fdc25332a8c08fa63be082c93fe4c27b29e55ec18f360c471039" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "36ee1c408362b365d14f0d6c96a505796506a2fb50ec85dcdb06cd64f1d68e0c" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "f0dada634e8aaf84f645f39a4ffeb649b71c691999ee6b7a0c15c4abcf3884d9" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "f0dada634e8aaf84f645f39a4ffeb649b71c691999ee6b7a0c15c4abcf3884d9" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00244/armature-hide-desktop-report.json", + "sha256": "382b6abd52f5d54e519690cc3760fc5cddf1db2516abe8fe3e2acfedb500ed83" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00244/armature-hide-local-exact-report.json", + "sha256": "295134cdf0ed210c1eebdb166ad3251dd47234ff4b23e084a6c6f4e26e8615ea" + }, + "status": { + "path": "docs/status/M16-GAP-00244.md", + "sha256": "efdfd1529460078ff569106961bd018f6ae75a3d9aa17da816639448268be17a" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00244/task-context.json", + "sha256": "4103d8304ec404adcd995b030bd6f266d76971fd91068159fb8b7686106fc738" + } + }, + "nextTask": "M16-GAP-00245" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00244/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00244/task-context.json new file mode 100644 index 00000000..bd07d916 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00244/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00244", + "parentTask": "M16-GAP-00243", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.hide data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.hide", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00244.py -- tests/files/web/generated/M16-GAP-00244-operator-armature.hide.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00244", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00244" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00244.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1745, + "contextRemainingTokens": 434 + }, + "source": { + "bytes": 8159, + "tokens": 2042 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00244.py", + "bytes": 1409, + "tokens": 353 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00244-operator-armature.hide.blend", + "bytes": 86303, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 239915, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 693671, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00244/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00244.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00244/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1409, + "tokens": 353 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00245", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00244.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00243/manifest.json", + "parentStatus": "docs/status/M16-GAP-00243.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00244.md", + "tests/golden/M16-GAP-00243/manifest.json", + "docs/status/M16-GAP-00243.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00243", + "parentTask": "M16-GAP-00242", + "status": "done", + "nextTask": "M16-GAP-00244", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00243 Status", + "status: done", + "task: armature.flip_names operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains two selected left/right bones and one independent unselected bone. Blender desktop runs `ARMATURE_OT_flip_names` with `do_strip_numbers=false`, swaps the selected bones' names by geometry, and preserves the independent bone.", + "- Main reads the saved post-operation names, selection state, and geometry from the same fixture. The comparator confirms desktop/WASM parity and save/reopen stability without expanding other data-blocks, editors, or browsers.", + "evidence:" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1754, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 439 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00244.md", + "bytes": 1754, + "lines": 38, + "tokens": 439 + }, + { + "path": "tests/golden/M16-GAP-00243/manifest.json", + "bytes": 2937, + "lines": 74, + "tokens": 735 + }, + { + "path": "docs/status/M16-GAP-00243.md", + "bytes": 973, + "lines": 18, + "tokens": 244 + } + ], + "sourceTokens": 2042, + "evidenceFiles": 1, + "evidenceBytes": 1409, + "evidenceTokens": 353, + "totalTokens": 2395, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3419, + "serializedContextTokens": 749, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00245/armature-move-to-collection-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00245/armature-move-to-collection-desktop-report.json new file mode 100644 index 00000000..f5495fd5 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00245/armature-move-to-collection-desktop-report.json @@ -0,0 +1,126 @@ +{ + "after": { + "activeBone": "WebGapArmatureMoveCollectionSelected", + "armature": "WebGapArmatureMoveCollectionArmature", + "bones": [ + { + "collections": [ + "WebGapArmatureMoveCollectionTarget" + ], + "connected": false, + "head": [ + -1.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureMoveCollectionSelected", + "parent": null, + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + -1.0, + 1.0, + 0.0 + ] + }, + { + "collections": [ + "WebGapArmatureMoveCollectionSource" + ], + "connected": false, + "head": [ + 1.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureMoveCollectionOther", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 1.0, + 1.0, + 0.0 + ] + } + ], + "collections": [ + "WebGapArmatureMoveCollectionSource", + "WebGapArmatureMoveCollectionTarget" + ], + "object": "WebGapArmatureMoveCollectionObject" + }, + "before": { + "activeBone": "WebGapArmatureMoveCollectionSelected", + "armature": "WebGapArmatureMoveCollectionArmature", + "bones": [ + { + "collections": [ + "WebGapArmatureMoveCollectionTarget" + ], + "connected": false, + "head": [ + -1.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureMoveCollectionSelected", + "parent": null, + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + -1.0, + 1.0, + 0.0 + ] + }, + { + "collections": [ + "WebGapArmatureMoveCollectionSource" + ], + "connected": false, + "head": [ + 1.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureMoveCollectionOther", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 1.0, + 1.0, + 0.0 + ] + } + ], + "collections": [ + "WebGapArmatureMoveCollectionSource", + "WebGapArmatureMoveCollectionTarget" + ], + "object": "WebGapArmatureMoveCollectionObject" + }, + "blenderVersion": "5.2.0 LTS", + "collectionIndex": 1, + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00245-operator-armature.move_to_collection.blend", + "fixtureSha256": "81ce010acf7df4374101651e498eb1ef4fdbd31aa79e395fcab17667cea2d6ad", + "mainMutation": "SELECTED_BONE_ALREADY_IN_TARGET_COLLECTION", + "movedBone": "WebGapArmatureMoveCollectionSelected", + "operation": "ARMATURE_MOVE_TO_COLLECTION_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "sourceCollection": "WebGapArmatureMoveCollectionSource", + "targetCollection": "WebGapArmatureMoveCollectionTarget", + "task": "M16-GAP-00245" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00245/armature-move-to-collection-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00245/armature-move-to-collection-local-exact-report.json new file mode 100644 index 00000000..f886485e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00245/armature-move-to-collection-local-exact-report.json @@ -0,0 +1,39 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00245", + "operation": "ARMATURE_MOVE_TO_COLLECTION_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00245-operator-armature.move_to_collection.blend", + "sha256": "81ce010acf7df4374101651e498eb1ef4fdbd31aa79e395fcab17667cea2d6ad" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00245/armature-move-to-collection-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "SELECTED_BONE_ALREADY_IN_TARGET_COLLECTION", + "movedBone": "WebGapArmatureMoveCollectionSelected", + "sourceCollection": "WebGapArmatureMoveCollectionSource", + "targetCollection": "WebGapArmatureMoveCollectionTarget" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureMoveCollectionArmature", + "movedBoneId": "bone:armature:WebGapArmatureMoveCollectionArmature:WebGapArmatureMoveCollectionSelected", + "otherBoneId": "bone:armature:WebGapArmatureMoveCollectionArmature:WebGapArmatureMoveCollectionOther", + "sourceCollectionId": "bone_collection:armature:WebGapArmatureMoveCollectionArmature:WebGapArmatureMoveCollectionSource", + "targetCollectionId": "bone_collection:armature:WebGapArmatureMoveCollectionArmature:WebGapArmatureMoveCollectionTarget", + "sourceMembers": [ + "bone:armature:WebGapArmatureMoveCollectionArmature:WebGapArmatureMoveCollectionOther" + ], + "targetMembers": [ + "bone:armature:WebGapArmatureMoveCollectionArmature:WebGapArmatureMoveCollectionSelected" + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00246" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00245/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00245/manifest.json new file mode 100644 index 00000000..124c9a19 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00245/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00245", + "parentTask": "M16-GAP-00244", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_MOVE_TO_COLLECTION_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00244/manifest.json", + "sha256": "8a9113af05264d62c71c478ae8dfde62155e64cf2fa5bda32f16256f7df6bd59" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00245-operator-armature.move_to_collection.blend", + "sha256": "81ce010acf7df4374101651e498eb1ef4fdbd31aa79e395fcab17667cea2d6ad" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00245.py", + "sha256": "9a7de621f6e88acc93d19697d4a3db5223943318e70e4561983fd989cf120aa3" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-move-to-collection-desktop.py", + "sha256": "d70bbd2d42be0c4f95dc2fcc683daaad5d1eb2e71240dc8025dec2133f2d42dc" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "9a91d6de90a958161d66a11491a72059cd607077fdc58e51b6a8f5f8113bb82e" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "36ee1c408362b365d14f0d6c96a505796506a2fb50ec85dcdb06cd64f1d68e0c" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "f0dada634e8aaf84f645f39a4ffeb649b71c691999ee6b7a0c15c4abcf3884d9" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "f0dada634e8aaf84f645f39a4ffeb649b71c691999ee6b7a0c15c4abcf3884d9" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00245/armature-move-to-collection-desktop-report.json", + "sha256": "26ba97ec93b9e190d06dc912b8b441eb14c49d3a409ae2635aba0adc8dfa6f9b" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00245/armature-move-to-collection-local-exact-report.json", + "sha256": "d898f1ffaa59f14b7a92e88d90413d0b3c200548ee5288342938f3803077e186" + }, + "status": { + "path": "docs/status/M16-GAP-00245.md", + "sha256": "bad2709c02906d0e84d1771308245f3c2e3d52b3b9436719efd3d47155c0eae0" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00245/task-context.json", + "sha256": "a0e24448ada6a6649940caca0934e6cac7783f5e486efeb73baa352874e971c0" + } + }, + "nextTask": "M16-GAP-00246" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00245/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00245/task-context.json new file mode 100644 index 00000000..cc8ec768 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00245/task-context.json @@ -0,0 +1,182 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00245", + "parentTask": "M16-GAP-00244", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.move_to_collection data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.move_to_collection", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00245.py -- tests/files/web/generated/M16-GAP-00245-operator-armature.move_to_collection.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00245", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00245" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1680, + "contextRemainingTokens": 419 + }, + "source": { + "bytes": 8224, + "tokens": 2057 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00245-operator-armature.move_to_collection.blend", + "bytes": 86400, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/generated/M16-GAP-00245.py", + "bytes": 1703, + "reason": "CONTEXT_REMAINING_SPACE" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 239915, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 698782, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00245/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00245.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00245/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00246", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00245.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00244/manifest.json", + "parentStatus": "docs/status/M16-GAP-00244.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00245.md", + "tests/golden/M16-GAP-00244/manifest.json", + "docs/status/M16-GAP-00244.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00244", + "parentTask": "M16-GAP-00243", + "status": "done", + "nextTask": "M16-GAP-00245", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00244 Status", + "status: done", + "task: armature.hide operator LOCAL_EXACT slice", + "updated: 2026-08-22 America/New_York", + "scope:", + "- The minimal fixture contains one selected bone and one independent unselected bone. Blender desktop runs `ARMATURE_OT_hide` with `unselected=false`, setting the selected bone's edit-mode hidden flag and clearing its selection while preserving the independent bone and both geometries.", + "- Main exposes the saved hidden and selected flags from the same fixture. The comparator confirms desktop/WASM parity and save/reopen stability without expanding other data-blocks, editors, or browsers.", + "evidence:" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1824, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 456 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00245.md", + "bytes": 1824, + "lines": 38, + "tokens": 456 + }, + { + "path": "tests/golden/M16-GAP-00244/manifest.json", + "bytes": 2907, + "lines": 74, + "tokens": 727 + }, + { + "path": "docs/status/M16-GAP-00244.md", + "bytes": 998, + "lines": 18, + "tokens": 250 + } + ], + "sourceTokens": 2057, + "evidenceFiles": 0, + "evidenceBytes": 0, + "evidenceTokens": 0, + "totalTokens": 2057, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3081, + "serializedContextTokens": 724, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00246/armature-parent-clear-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00246/armature-parent-clear-desktop-report.json new file mode 100644 index 00000000..a4d873cb --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00246/armature-parent-clear-desktop-report.json @@ -0,0 +1,143 @@ +{ + "after": { + "activeBone": "WebGapArmatureParentClearChild", + "armature": "WebGapArmatureParentClearArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureParentClearParent", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 0.0, + 1.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureParentClearChild", + "parent": null, + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 2.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureParentClearOther", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureParentClearObject" + }, + "before": { + "activeBone": "WebGapArmatureParentClearChild", + "armature": "WebGapArmatureParentClearArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureParentClearParent", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 0.0, + 1.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureParentClearChild", + "parent": null, + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 2.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureParentClearOther", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureParentClearObject" + }, + "blenderVersion": "5.2.0 LTS", + "childBone": "WebGapArmatureParentClearChild", + "clearType": "CLEAR", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00246-operator-armature.parent_clear.blend", + "fixtureSha256": "c6b8c2871a84389b732ff63c320e1e6543e832f69a89aa7af8cd0049fbee82f2", + "mainMutation": "SELECTED_CHILD_PARENT_ALREADY_CLEARED", + "operation": "ARMATURE_PARENT_CLEAR_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "parentBone": "WebGapArmatureParentClearParent", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00246" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00246/armature-parent-clear-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00246/armature-parent-clear-local-exact-report.json new file mode 100644 index 00000000..3d43ec45 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00246/armature-parent-clear-local-exact-report.json @@ -0,0 +1,34 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00246", + "operation": "ARMATURE_PARENT_CLEAR_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00246-operator-armature.parent_clear.blend", + "sha256": "c6b8c2871a84389b732ff63c320e1e6543e832f69a89aa7af8cd0049fbee82f2" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00246/armature-parent-clear-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "SELECTED_CHILD_PARENT_ALREADY_CLEARED", + "parentBone": "WebGapArmatureParentClearParent", + "childBone": "WebGapArmatureParentClearChild", + "clearType": "CLEAR" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureParentClearArmature", + "parentBoneId": "bone:armature:WebGapArmatureParentClearArmature:WebGapArmatureParentClearParent", + "childBoneId": "bone:armature:WebGapArmatureParentClearArmature:WebGapArmatureParentClearChild", + "otherBoneId": "bone:armature:WebGapArmatureParentClearArmature:WebGapArmatureParentClearOther", + "childParentId": null, + "childSelected": true + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00247" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00246/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00246/manifest.json new file mode 100644 index 00000000..ceb66165 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00246/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00246", + "parentTask": "M16-GAP-00245", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_PARENT_CLEAR_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00245/manifest.json", + "sha256": "4b5876e4b5058907a06ab54907f96be1d2f887b3495e696093ee015c084bb4a8" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00246-operator-armature.parent_clear.blend", + "sha256": "c6b8c2871a84389b732ff63c320e1e6543e832f69a89aa7af8cd0049fbee82f2" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00246.py", + "sha256": "2d2f7b43517d2b39a44f6a2606ecf932925f31b6896c01a657ce2dfe8008e703" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-parent-clear-desktop.py", + "sha256": "14c76e67447509588d74055eb26dd12401b3608fac335bf732a09980a2d6c443" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "36805990a46f98cec41d15e6a81168213eb7830f7255705705591060344cdee3" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "36ee1c408362b365d14f0d6c96a505796506a2fb50ec85dcdb06cd64f1d68e0c" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "f0dada634e8aaf84f645f39a4ffeb649b71c691999ee6b7a0c15c4abcf3884d9" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "f0dada634e8aaf84f645f39a4ffeb649b71c691999ee6b7a0c15c4abcf3884d9" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00246/armature-parent-clear-desktop-report.json", + "sha256": "e59a8594cbc6f313ac9651706575eeabd2d58fb2520eafdf825c5a467a2d9b7a" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00246/armature-parent-clear-local-exact-report.json", + "sha256": "3e89fd698b0a8d118b0dcfb428f957ad7cc051e5a7a5b898cf90f49c996080a2" + }, + "status": { + "path": "docs/status/M16-GAP-00246.md", + "sha256": "5cc88cc19daa3fe9ad1a50f568d0d482c71c8b535a2e8bf024625bc7d9ca4592" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00246/task-context.json", + "sha256": "bc87cb6e78492af2c7c31afa6da9ea79e919ecdc793d7a720b1fa6127df6fc93" + } + }, + "nextTask": "M16-GAP-00247" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00246/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00246/task-context.json new file mode 100644 index 00000000..195eb27f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00246/task-context.json @@ -0,0 +1,182 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00246", + "parentTask": "M16-GAP-00245", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.parent_clear data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.parent_clear", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00246.py -- tests/files/web/generated/M16-GAP-00246-operator-armature.parent_clear.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00246", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00246" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1633, + "contextRemainingTokens": 406 + }, + "source": { + "bytes": 8271, + "tokens": 2070 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00246-operator-armature.parent_clear.blend", + "bytes": 86343, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/generated/M16-GAP-00246.py", + "bytes": 1736, + "reason": "CONTEXT_REMAINING_SPACE" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 239915, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 703493, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00246/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00246.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00246/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00247", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00246.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00245/manifest.json", + "parentStatus": "docs/status/M16-GAP-00245.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00246.md", + "tests/golden/M16-GAP-00245/manifest.json", + "docs/status/M16-GAP-00245.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00245", + "parentTask": "M16-GAP-00244", + "status": "done", + "nextTask": "M16-GAP-00246", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00245 Status", + "status: done", + "task: armature.move_to_collection operator LOCAL_EXACT slice", + "updated: 2026-08-23 America/New_York", + "scope:", + "- The minimal fixture contains two bone collections, one selected bone in the source collection, and one independent unselected bone. Blender desktop runs `ARMATURE_OT_move_to_collection` with `collection_index=1`, moving only the selected bone to the target collection while preserving selection and geometry.", + "- Main exposes both collection member lists from the same fixture. The comparator confirms desktop/WASM parity and save/reopen stability without expanding other data-blocks, editors, or browsers.", + "evidence:" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1794, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 449 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00246.md", + "bytes": 1794, + "lines": 38, + "tokens": 449 + }, + { + "path": "tests/golden/M16-GAP-00245/manifest.json", + "bytes": 2977, + "lines": 74, + "tokens": 745 + }, + { + "path": "docs/status/M16-GAP-00245.md", + "bytes": 1005, + "lines": 18, + "tokens": 252 + } + ], + "sourceTokens": 2070, + "evidenceFiles": 0, + "evidenceBytes": 0, + "evidenceTokens": 0, + "totalTokens": 2070, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3094, + "serializedContextTokens": 720, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00247/armature-parent-set-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00247/armature-parent-set-desktop-report.json new file mode 100644 index 00000000..156379ee --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00247/armature-parent-set-desktop-report.json @@ -0,0 +1,143 @@ +{ + "after": { + "activeBone": "WebGapArmatureParentSetParent", + "armature": "WebGapArmatureParentSetArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureParentSetParent", + "parent": null, + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": true, + "head": [ + 0.0, + 1.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureParentSetChild", + "parent": "WebGapArmatureParentSetParent", + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 2.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureParentSetOther", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureParentSetObject" + }, + "before": { + "activeBone": "WebGapArmatureParentSetParent", + "armature": "WebGapArmatureParentSetArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureParentSetParent", + "parent": null, + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": true, + "head": [ + 0.0, + 1.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureParentSetChild", + "parent": "WebGapArmatureParentSetParent", + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 2.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureParentSetOther", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureParentSetObject" + }, + "blenderVersion": "5.2.0 LTS", + "childBone": "WebGapArmatureParentSetChild", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00247-operator-armature.parent_set.blend", + "fixtureSha256": "227b3294c94147755638a6542955fd7a57ad2a6e6a7464bed2509eb7a5ab6b19", + "mainMutation": "SELECTED_CHILD_PARENT_ALREADY_CONNECTED", + "operation": "ARMATURE_PARENT_SET_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "parentBone": "WebGapArmatureParentSetParent", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "setType": "CONNECTED", + "task": "M16-GAP-00247" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00247/armature-parent-set-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00247/armature-parent-set-local-exact-report.json new file mode 100644 index 00000000..174829a3 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00247/armature-parent-set-local-exact-report.json @@ -0,0 +1,35 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00247", + "operation": "ARMATURE_PARENT_SET_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00247-operator-armature.parent_set.blend", + "sha256": "227b3294c94147755638a6542955fd7a57ad2a6e6a7464bed2509eb7a5ab6b19" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00247/armature-parent-set-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "SELECTED_CHILD_PARENT_ALREADY_CONNECTED", + "parentBone": "WebGapArmatureParentSetParent", + "childBone": "WebGapArmatureParentSetChild", + "setType": "CONNECTED" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureParentSetArmature", + "parentBoneId": "bone:armature:WebGapArmatureParentSetArmature:WebGapArmatureParentSetParent", + "childBoneId": "bone:armature:WebGapArmatureParentSetArmature:WebGapArmatureParentSetChild", + "otherBoneId": "bone:armature:WebGapArmatureParentSetArmature:WebGapArmatureParentSetOther", + "childParentId": "bone:armature:WebGapArmatureParentSetArmature:WebGapArmatureParentSetParent", + "childConnected": true, + "childSelected": true + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00248" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00247/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00247/manifest.json new file mode 100644 index 00000000..d74bc18c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00247/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00247", + "parentTask": "M16-GAP-00246", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_PARENT_SET_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00246/manifest.json", + "sha256": "39e5586ea4faa434cb83fb7d0c78e9e5bbb5b7b3485b76198ddd9279a5615fc0" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00247-operator-armature.parent_set.blend", + "sha256": "227b3294c94147755638a6542955fd7a57ad2a6e6a7464bed2509eb7a5ab6b19" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00247.py", + "sha256": "1767464c3c6a2a24207c56bb59fecfd20f49ef7b83055716b209de354a04ff5d" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-parent-set-desktop.py", + "sha256": "ced6127b73540a64f95327103cea846d95b3da829a41b64e66de6e160ff2d7cb" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "65d133091a56490376a7919befbdffe0be73893386ab121e89683bf6388d5f5a" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "0c39ec01b1e5c828f563a60ea1416fc95bbb2645dbe8d541242fbc23ce1b1deb" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "95c948f8b4fe59c299a0fe0f8454140fa4aacc8fdf41f2872317e8f5e0861e0c" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "95c948f8b4fe59c299a0fe0f8454140fa4aacc8fdf41f2872317e8f5e0861e0c" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00247/armature-parent-set-desktop-report.json", + "sha256": "c2348f9a4e51030006f9c1a2756f016e2c454d957a952e2d07a2948dabba9f4a" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00247/armature-parent-set-local-exact-report.json", + "sha256": "ed5125f71cbe8af51244c5bc8798b2d0722d3272a331b9999ba22f5606926139" + }, + "status": { + "path": "docs/status/M16-GAP-00247.md", + "sha256": "26711b27363845b086c413d07119622c93ef468f28f412576842b1f809f6b5b6" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00247/task-context.json", + "sha256": "63cae595ebf9ce8be4b1d02e48e6130371978eaae49133e5da24b87dfcca7b53" + } + }, + "nextTask": "M16-GAP-00248" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00247/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00247/task-context.json new file mode 100644 index 00000000..077cd424 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00247/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00247", + "parentTask": "M16-GAP-00246", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.parent_set data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.parent_set", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00247.py -- tests/files/web/generated/M16-GAP-00247-operator-armature.parent_set.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00247", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00247" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00247.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1721, + "contextRemainingTokens": 429 + }, + "source": { + "bytes": 8183, + "tokens": 2047 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00247.py", + "bytes": 1669, + "tokens": 418 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00247-operator-armature.parent_set.blend", + "bytes": 86366, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 239979, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 708415, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00247/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00247.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00247/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1669, + "tokens": 418 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00248", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00247.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00246/manifest.json", + "parentStatus": "docs/status/M16-GAP-00246.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00247.md", + "tests/golden/M16-GAP-00246/manifest.json", + "docs/status/M16-GAP-00246.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00246", + "parentTask": "M16-GAP-00245", + "status": "done", + "nextTask": "M16-GAP-00247", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00246 Status", + "status: done", + "task: armature.parent_clear operator LOCAL_EXACT slice", + "updated: 2026-08-23 America/New_York", + "scope:", + "- The minimal fixture contains a connected selected child, its parent, and one independent unselected bone. Blender desktop runs `ARMATURE_OT_parent_clear` with `type=CLEAR`, clearing only the selected child's parent and connection while preserving all geometry and selection.", + "- Main exposes the saved parent IDs from the same fixture. The comparator confirms desktop/WASM parity and save/reopen stability without expanding other data-blocks, editors, or browsers.", + "evidence:" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1784, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 446 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00247.md", + "bytes": 1784, + "lines": 38, + "tokens": 446 + }, + { + "path": "tests/golden/M16-GAP-00246/manifest.json", + "bytes": 2947, + "lines": 74, + "tokens": 737 + }, + { + "path": "docs/status/M16-GAP-00246.md", + "bytes": 957, + "lines": 18, + "tokens": 240 + } + ], + "sourceTokens": 2047, + "evidenceFiles": 1, + "evidenceBytes": 1669, + "evidenceTokens": 418, + "totalTokens": 2465, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3489, + "serializedContextTokens": 753, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00248/armature-reveal-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00248/armature-reveal-desktop-report.json new file mode 100644 index 00000000..56e095a5 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00248/armature-reveal-desktop-report.json @@ -0,0 +1,104 @@ +{ + "after": { + "activeBone": "WebGapArmatureRevealOther", + "armature": "WebGapArmatureRevealArmature", + "bones": [ + { + "connected": false, + "head": [ + -1.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureRevealHidden", + "parent": null, + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + -1.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 1.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureRevealOther", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 1.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureRevealObject" + }, + "before": { + "activeBone": "WebGapArmatureRevealOther", + "armature": "WebGapArmatureRevealArmature", + "bones": [ + { + "connected": false, + "head": [ + -1.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureRevealHidden", + "parent": null, + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + -1.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 1.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureRevealOther", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 1.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureRevealObject" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00248-operator-armature.reveal.blend", + "fixtureSha256": "5f1ee7176f2d030247abb278a66f79cc6b7fc49fd6650b2dba7cc349e2b0aedb", + "mainMutation": "HIDDEN_BONE_ALREADY_REVEALED", + "operation": "ARMATURE_REVEAL_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "revealedBone": "WebGapArmatureRevealHidden", + "saveReopen": "EXACT", + "schemaVersion": 1, + "select": true, + "task": "M16-GAP-00248" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00248/armature-reveal-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00248/armature-reveal-local-exact-report.json new file mode 100644 index 00000000..31c403c0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00248/armature-reveal-local-exact-report.json @@ -0,0 +1,33 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00248", + "operation": "ARMATURE_REVEAL_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00248-operator-armature.reveal.blend", + "sha256": "5f1ee7176f2d030247abb278a66f79cc6b7fc49fd6650b2dba7cc349e2b0aedb" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00248/armature-reveal-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "HIDDEN_BONE_ALREADY_REVEALED", + "revealedBone": "WebGapArmatureRevealHidden", + "select": true + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureRevealArmature", + "revealedBoneId": "bone:armature:WebGapArmatureRevealArmature:WebGapArmatureRevealHidden", + "otherBoneId": "bone:armature:WebGapArmatureRevealArmature:WebGapArmatureRevealOther", + "revealedHidden": false, + "revealedSelected": true, + "otherHidden": false + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00249" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00248/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00248/manifest.json new file mode 100644 index 00000000..331d4e24 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00248/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00248", + "parentTask": "M16-GAP-00247", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_REVEAL_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00247/manifest.json", + "sha256": "67a3b226b8c4d1449d7b655a5d019fff0c374fd63eee65041ea171ae4c6e92e6" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00248-operator-armature.reveal.blend", + "sha256": "5f1ee7176f2d030247abb278a66f79cc6b7fc49fd6650b2dba7cc349e2b0aedb" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00248.py", + "sha256": "8fac586cf7c3f54822111df0c88151797e68af0283e39f075dd9cd70d080ed93" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-reveal-desktop.py", + "sha256": "06564434a76ea6670110e916f73efdec46238cc1b2c8e1aa3d1c893b8089331d" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "098891e1d53e13ab172fde7122e6dbc462c9401a03b60cf9caec1795357591ad" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "0c39ec01b1e5c828f563a60ea1416fc95bbb2645dbe8d541242fbc23ce1b1deb" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "95c948f8b4fe59c299a0fe0f8454140fa4aacc8fdf41f2872317e8f5e0861e0c" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "95c948f8b4fe59c299a0fe0f8454140fa4aacc8fdf41f2872317e8f5e0861e0c" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00248/armature-reveal-desktop-report.json", + "sha256": "7f972847f4646f54f02e2e25efefd993c083c0be15ed18c2b570640bc314059a" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00248/armature-reveal-local-exact-report.json", + "sha256": "35ca506d64f000444107c2a6da1b8a7074204c415dc6d4ea4afc9492aeb57209" + }, + "status": { + "path": "docs/status/M16-GAP-00248.md", + "sha256": "fb619f3dabf2d6f3593417893901d0eac7d73ccab4b836ba1824834bf6d46a95" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00248/task-context.json", + "sha256": "db45073631709d276137b75c98057adc5b96605f45b929c42067333b9607cade" + } + }, + "nextTask": "M16-GAP-00249" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00248/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00248/task-context.json new file mode 100644 index 00000000..1f49e8b8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00248/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00248", + "parentTask": "M16-GAP-00247", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.reveal data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.reveal", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00248.py -- tests/files/web/generated/M16-GAP-00248-operator-armature.reveal.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00248", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00248" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00248.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1668, + "contextRemainingTokens": 416 + }, + "source": { + "bytes": 8236, + "tokens": 2060 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00248.py", + "bytes": 1444, + "tokens": 361 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00248-operator-armature.reveal.blend", + "bytes": 86308, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 239979, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 713039, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00248/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00248.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00248/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1444, + "tokens": 361 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00249", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00248.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00247/manifest.json", + "parentStatus": "docs/status/M16-GAP-00247.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00248.md", + "tests/golden/M16-GAP-00247/manifest.json", + "docs/status/M16-GAP-00247.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00247", + "parentTask": "M16-GAP-00246", + "status": "done", + "nextTask": "M16-GAP-00248", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00247 Status", + "status: done", + "task: armature.parent_set operator LOCAL_EXACT slice", + "updated: 2026-08-23 America/New_York", + "scope:", + "- The minimal fixture contains a selected connected child, its selected parent,", + " and one independent unselected bone. Blender desktop observes", + " `ARMATURE_OT_parent_set` with `type=CONNECTED`; the existing parent and" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1764, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 441 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00248.md", + "bytes": 1764, + "lines": 38, + "tokens": 441 + }, + { + "path": "tests/golden/M16-GAP-00247/manifest.json", + "bytes": 2937, + "lines": 74, + "tokens": 735 + }, + { + "path": "docs/status/M16-GAP-00247.md", + "bytes": 1040, + "lines": 27, + "tokens": 260 + } + ], + "sourceTokens": 2060, + "evidenceFiles": 1, + "evidenceBytes": 1444, + "evidenceTokens": 361, + "totalTokens": 2421, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3445, + "serializedContextTokens": 751, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00249/armature-roll-clear-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00249/armature-roll-clear-desktop-report.json new file mode 100644 index 00000000..71d9c490 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00249/armature-roll-clear-desktop-report.json @@ -0,0 +1,96 @@ +{ + "after": { + "activeBone": "WebGapArmatureRollClearBone", + "armature": "WebGapArmatureRollClearArmature", + "bones": [ + { + "head": [ + 0.0, + 0.0, + 0.0 + ], + "hidden": false, + "matrix": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "name": "WebGapArmatureRollClearBone", + "roll": 0.0, + "selected": true, + "tail": [ + 0.0, + 2.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureRollClearObject" + }, + "before": { + "activeBone": "WebGapArmatureRollClearBone", + "armature": "WebGapArmatureRollClearArmature", + "bones": [ + { + "head": [ + 0.0, + 0.0, + 0.0 + ], + "hidden": false, + "matrix": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "name": "WebGapArmatureRollClearBone", + "roll": 0.0, + "selected": true, + "tail": [ + 0.0, + 2.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureRollClearObject" + }, + "blenderVersion": "5.2.0 LTS", + "bone": "WebGapArmatureRollClearBone", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00249-operator-armature.roll_clear.blend", + "fixtureSha256": "74c3bebdac81def2d5dad922854b06c1c0b112154605a955628754bf5eb3cef7", + "mainMutation": "ROLL_ALREADY_ZERO", + "operation": "ARMATURE_ROLL_CLEAR_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "roll": 0.0, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00249" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00249/armature-roll-clear-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00249/armature-roll-clear-local-exact-report.json new file mode 100644 index 00000000..0044ab4a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00249/armature-roll-clear-local-exact-report.json @@ -0,0 +1,50 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00249", + "operation": "ARMATURE_ROLL_CLEAR_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00249-operator-armature.roll_clear.blend", + "sha256": "74c3bebdac81def2d5dad922854b06c1c0b112154605a955628754bf5eb3cef7" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00249/armature-roll-clear-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "ROLL_ALREADY_ZERO", + "bone": "WebGapArmatureRollClearBone", + "roll": 0 + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureRollClearArmature", + "boneId": "bone:armature:WebGapArmatureRollClearArmature:WebGapArmatureRollClearBone", + "boneName": "WebGapArmatureRollClearBone", + "hidden": false, + "selected": true, + "restMatrix": [ + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1 + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00250" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00249/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00249/manifest.json new file mode 100644 index 00000000..84d7786f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00249/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00249", + "parentTask": "M16-GAP-00248", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_ROLL_CLEAR_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00248/manifest.json", + "sha256": "e45b54186a20a2432423a0ae345345b7af8d83a958d5937efb332b1d59d4607f" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00249-operator-armature.roll_clear.blend", + "sha256": "74c3bebdac81def2d5dad922854b06c1c0b112154605a955628754bf5eb3cef7" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00249.py", + "sha256": "38b8b84ca841093bff16caf3aa8b10e8f033f16649f58c7b77292b34fb94c08e" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-roll-clear-desktop.py", + "sha256": "c5f507c1601fd4fe026f37b4c720a684881a01272eb92fd663dfb2ec2d43057b" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "57175a270c225e15af11e2f31a814f924c1902ceeede7b1e2bd6a7e98ad2781c" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "0c39ec01b1e5c828f563a60ea1416fc95bbb2645dbe8d541242fbc23ce1b1deb" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "95c948f8b4fe59c299a0fe0f8454140fa4aacc8fdf41f2872317e8f5e0861e0c" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "95c948f8b4fe59c299a0fe0f8454140fa4aacc8fdf41f2872317e8f5e0861e0c" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00249/armature-roll-clear-desktop-report.json", + "sha256": "d4961663044d04bed11d79948c12d7672d541da799cc519a7e0043023fd0540a" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00249/armature-roll-clear-local-exact-report.json", + "sha256": "60aff7413075c183ce0f8c443784b01cbb57343463588185c5f1839636e07ee6" + }, + "status": { + "path": "docs/status/M16-GAP-00249.md", + "sha256": "99656df59b260315621efa7792d2e4eaee6709ff434058d848c86b6b9a674771" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00249/task-context.json", + "sha256": "ca58f30a8476e7f61c6b3dec4d2225582cfcb9f4af454b62a42a48d2449ed74b" + } + }, + "nextTask": "M16-GAP-00250" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00249/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00249/task-context.json new file mode 100644 index 00000000..81f825e2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00249/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00249", + "parentTask": "M16-GAP-00248", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.roll_clear data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.roll_clear", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00249.py -- tests/files/web/generated/M16-GAP-00249-operator-armature.roll_clear.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00249", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00249" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00249.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1773, + "contextRemainingTokens": 442 + }, + "source": { + "bytes": 8131, + "tokens": 2034 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00249.py", + "bytes": 1208, + "tokens": 302 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00249-operator-armature.roll_clear.blend", + "bytes": 86204, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 239979, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 717402, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00249/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00249.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00249/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1208, + "tokens": 302 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00250", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00249.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00248/manifest.json", + "parentStatus": "docs/status/M16-GAP-00248.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00249.md", + "tests/golden/M16-GAP-00248/manifest.json", + "docs/status/M16-GAP-00248.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00248", + "parentTask": "M16-GAP-00247", + "status": "done", + "nextTask": "M16-GAP-00249", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00248 Status", + "status: done", + "task: armature.reveal operator LOCAL_EXACT slice", + "updated: 2026-08-23 America/New_York", + "scope:", + "- The minimal fixture contains one hidden edit bone and one independent visible", + " unselected bone. Blender desktop runs `ARMATURE_OT_reveal(select=true)`,", + " revealing and selecting only the hidden bone while preserving both geometries." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1784, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 446 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00249.md", + "bytes": 1784, + "lines": 38, + "tokens": 446 + }, + { + "path": "tests/golden/M16-GAP-00248/manifest.json", + "bytes": 2917, + "lines": 74, + "tokens": 730 + }, + { + "path": "docs/status/M16-GAP-00248.md", + "bytes": 935, + "lines": 25, + "tokens": 234 + } + ], + "sourceTokens": 2034, + "evidenceFiles": 1, + "evidenceBytes": 1208, + "evidenceTokens": 302, + "totalTokens": 2336, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3360, + "serializedContextTokens": 753, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00250/armature-select-all-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00250/armature-select-all-desktop-report.json new file mode 100644 index 00000000..0f4f78be --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00250/armature-select-all-desktop-report.json @@ -0,0 +1,107 @@ +{ + "action": "SELECT", + "after": { + "activeBone": "WebGapArmatureSelectAllParent", + "armature": "WebGapArmatureSelectAllArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectAllParent", + "parent": null, + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectAllOther", + "parent": null, + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureSelectAllObject" + }, + "before": { + "activeBone": "WebGapArmatureSelectAllParent", + "armature": "WebGapArmatureSelectAllArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectAllParent", + "parent": null, + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectAllOther", + "parent": null, + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureSelectAllObject" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00250-operator-armature.select_all.blend", + "fixtureSha256": "5a271a11ec041966bbdb02724d632b1a1ec4db2207038fdbf3fffbd8c3d6de8d", + "mainMutation": "ALL_VISIBLE_BONES_ALREADY_SELECTED", + "operation": "ARMATURE_SELECT_ALL_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "selectedBones": [ + "WebGapArmatureSelectAllParent", + "WebGapArmatureSelectAllOther" + ], + "task": "M16-GAP-00250" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00250/armature-select-all-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00250/armature-select-all-local-exact-report.json new file mode 100644 index 00000000..ab9db1d3 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00250/armature-select-all-local-exact-report.json @@ -0,0 +1,55 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00250", + "operation": "ARMATURE_SELECT_ALL_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00250-operator-armature.select_all.blend", + "sha256": "5a271a11ec041966bbdb02724d632b1a1ec4db2207038fdbf3fffbd8c3d6de8d" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00250/armature-select-all-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "ALL_VISIBLE_BONES_ALREADY_SELECTED", + "selectedBones": [ + "WebGapArmatureSelectAllParent", + "WebGapArmatureSelectAllOther" + ], + "action": "SELECT" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureSelectAllArmature", + "parentBoneId": "bone:armature:WebGapArmatureSelectAllArmature:WebGapArmatureSelectAllParent", + "otherBoneId": "bone:armature:WebGapArmatureSelectAllArmature:WebGapArmatureSelectAllOther", + "parentSelected": true, + "otherSelected": true, + "parentHead": [ + 0, + 0, + 0 + ], + "parentTail": [ + 0, + 1, + 0 + ], + "otherHead": [ + 2, + 0, + 0 + ], + "otherTail": [ + 2, + 1, + 0 + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00251" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00250/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00250/manifest.json new file mode 100644 index 00000000..30eac7db --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00250/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00250", + "parentTask": "M16-GAP-00249", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_SELECT_ALL_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00249/manifest.json", + "sha256": "50e0101c306390090c8ff008897450c5b0034428a6b4f06e53c340887a202562" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00250-operator-armature.select_all.blend", + "sha256": "5a271a11ec041966bbdb02724d632b1a1ec4db2207038fdbf3fffbd8c3d6de8d" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00250.py", + "sha256": "fd1e6bca22e8b9e29cdaee6d7df3b561d7b1cfaff4d8ac96e9a7b807a8940e8f" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-select-all-desktop.py", + "sha256": "3dff6a053b4a497ed19b67b6e0d38958abd6f34c603b994a8eb59323f4ab95e5" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "5a7f84720576f50aac4f862677f471c0ef92c20943003a0c6d192d8852757573" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "0c39ec01b1e5c828f563a60ea1416fc95bbb2645dbe8d541242fbc23ce1b1deb" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "95c948f8b4fe59c299a0fe0f8454140fa4aacc8fdf41f2872317e8f5e0861e0c" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "95c948f8b4fe59c299a0fe0f8454140fa4aacc8fdf41f2872317e8f5e0861e0c" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00250/armature-select-all-desktop-report.json", + "sha256": "0d68d0d0b4f3880339f29ef467bc7ab241623bdf3422ca83c53b49efec5e7295" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00250/armature-select-all-local-exact-report.json", + "sha256": "e8d922dde3d8401c79adc75621523ee3441a4d97f74416816e2f2209083297b2" + }, + "status": { + "path": "docs/status/M16-GAP-00250.md", + "sha256": "dcc9e9890aa1e9bf5df7f2c91155c98fcce954896258cad6b2b4778048e502d2" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00250/task-context.json", + "sha256": "75f8b5a9a167a179607417792bf5520b1cbb4c0eec5e665be7769c65265554d5" + } + }, + "nextTask": "M16-GAP-00251" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00250/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00250/task-context.json new file mode 100644 index 00000000..b77e5410 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00250/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00250", + "parentTask": "M16-GAP-00249", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.select_all data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.select_all", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00250.py -- tests/files/web/generated/M16-GAP-00250-operator-armature.select_all.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00250", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00250" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00250.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1736, + "contextRemainingTokens": 433 + }, + "source": { + "bytes": 8168, + "tokens": 2043 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00250.py", + "bytes": 1429, + "tokens": 358 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00250-operator-armature.select_all.blend", + "bytes": 86286, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 239979, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 722153, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00250/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00250.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00250/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1429, + "tokens": 358 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00251", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00250.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00249/manifest.json", + "parentStatus": "docs/status/M16-GAP-00249.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00250.md", + "tests/golden/M16-GAP-00249/manifest.json", + "docs/status/M16-GAP-00249.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00249", + "parentTask": "M16-GAP-00248", + "status": "done", + "nextTask": "M16-GAP-00250", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00249 Status", + "status: done", + "task: armature.roll_clear operator LOCAL_EXACT slice", + "updated: 2026-08-23 America/New_York", + "scope:", + "- The minimal fixture contains one selected visible edit bone with an initial", + " roll of pi/4. Blender desktop runs `ARMATURE_OT_roll_clear(roll=0)`, clearing", + " only the selected bone's roll while preserving its geometry, selection, and" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1784, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 446 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00250.md", + "bytes": 1784, + "lines": 38, + "tokens": 446 + }, + { + "path": "tests/golden/M16-GAP-00249/manifest.json", + "bytes": 2937, + "lines": 74, + "tokens": 735 + }, + { + "path": "docs/status/M16-GAP-00249.md", + "bytes": 952, + "lines": 26, + "tokens": 238 + } + ], + "sourceTokens": 2043, + "evidenceFiles": 1, + "evidenceBytes": 1429, + "evidenceTokens": 358, + "totalTokens": 2401, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3425, + "serializedContextTokens": 753, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00251/armature-select-hierarchy-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00251/armature-select-hierarchy-desktop-report.json new file mode 100644 index 00000000..3d5fb201 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00251/armature-select-hierarchy-desktop-report.json @@ -0,0 +1,146 @@ +{ + "activeBoneAfter": "WebGapArmatureSelectHierarchyChild", + "activeBoneBefore": "WebGapArmatureSelectHierarchyChild", + "after": { + "activeBone": "WebGapArmatureSelectHierarchyChild", + "armature": "WebGapArmatureSelectHierarchyArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectHierarchyRoot", + "parent": null, + "selectHead": false, + "selectTail": true, + "selected": false, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": true, + "head": [ + 0.0, + 1.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectHierarchyChild", + "parent": "WebGapArmatureSelectHierarchyRoot", + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 2.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectHierarchyOther", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureSelectHierarchyObject" + }, + "before": { + "activeBone": "WebGapArmatureSelectHierarchyChild", + "armature": "WebGapArmatureSelectHierarchyArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectHierarchyRoot", + "parent": null, + "selectHead": false, + "selectTail": true, + "selected": false, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": true, + "head": [ + 0.0, + 1.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectHierarchyChild", + "parent": "WebGapArmatureSelectHierarchyRoot", + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 2.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectHierarchyOther", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureSelectHierarchyObject" + }, + "blenderVersion": "5.2.0 LTS", + "childBone": "WebGapArmatureSelectHierarchyChild", + "direction": "CHILD", + "extend": false, + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00251-operator-armature.select_hierarchy.blend", + "fixtureSha256": "527167dc4d5c40e18196b8b63818373494bf28efd9592ce1ee28b790aecad9c4", + "mainMutation": "IMMEDIATE_CHILD_ALREADY_SELECTED", + "operation": "ARMATURE_SELECT_HIERARCHY_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "rootBone": "WebGapArmatureSelectHierarchyRoot", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00251" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00251/armature-select-hierarchy-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00251/armature-select-hierarchy-local-exact-report.json new file mode 100644 index 00000000..8916df25 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00251/armature-select-hierarchy-local-exact-report.json @@ -0,0 +1,68 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00251", + "operation": "ARMATURE_SELECT_HIERARCHY_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00251-operator-armature.select_hierarchy.blend", + "sha256": "527167dc4d5c40e18196b8b63818373494bf28efd9592ce1ee28b790aecad9c4" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00251/armature-select-hierarchy-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "IMMEDIATE_CHILD_ALREADY_SELECTED", + "direction": "CHILD", + "extend": false, + "activeBoneBefore": "WebGapArmatureSelectHierarchyChild", + "activeBoneAfter": "WebGapArmatureSelectHierarchyChild" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureSelectHierarchyArmature", + "rootBoneId": "bone:armature:WebGapArmatureSelectHierarchyArmature:WebGapArmatureSelectHierarchyRoot", + "childBoneId": "bone:armature:WebGapArmatureSelectHierarchyArmature:WebGapArmatureSelectHierarchyChild", + "otherBoneId": "bone:armature:WebGapArmatureSelectHierarchyArmature:WebGapArmatureSelectHierarchyOther", + "rootSelected": false, + "childSelected": true, + "otherSelected": false, + "childParentId": "bone:armature:WebGapArmatureSelectHierarchyArmature:WebGapArmatureSelectHierarchyRoot", + "childConnected": true, + "rootHead": [ + 0, + 0, + 0 + ], + "rootTail": [ + 0, + 1, + 0 + ], + "childHead": [ + 0, + 1, + 0 + ], + "childTail": [ + 0, + 2, + 0 + ], + "otherHead": [ + 2, + 0, + 0 + ], + "otherTail": [ + 2, + 1, + 0 + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00252" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00251/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00251/manifest.json new file mode 100644 index 00000000..34050d9f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00251/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00251", + "parentTask": "M16-GAP-00250", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_SELECT_HIERARCHY_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00250/manifest.json", + "sha256": "2d4aafbf8effc7327cf16e2e1b040bf56f78af4024745e97f9728d8a0ce5963e" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00251-operator-armature.select_hierarchy.blend", + "sha256": "527167dc4d5c40e18196b8b63818373494bf28efd9592ce1ee28b790aecad9c4" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00251.py", + "sha256": "a6eda558d5ca8f973a6cebaba1160453c6ca5a9dec3b47cb05f89dca31f31d86" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-select-hierarchy-desktop.py", + "sha256": "f6d261b067815d740a7e39aa8c8a8ae6d605b675c6ba2a144eaab65d104840ae" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "6da2d07715ff0405b6908dd163d1bd868d947665d374741038750f7561c9cf4e" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00251/armature-select-hierarchy-desktop-report.json", + "sha256": "8d57e6ce5bc33f6e87eaba09ffb411bf68b752a4729438de9f78063f7354c092" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00251/armature-select-hierarchy-local-exact-report.json", + "sha256": "4d36c680a2947be8c29e076849d3d4ec8ad2a2c1a2ccf9e7330b311c0d4be5ac" + }, + "status": { + "path": "docs/status/M16-GAP-00251.md", + "sha256": "67e04c31b88c5821592269c0f629dce00cf675bef9bb0879dd78d6818127f92d" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00251/task-context.json", + "sha256": "a8e92d107ef3e012f2d0321a00b7c55c9475848346488de1804645c238618ca5" + } + }, + "nextTask": "M16-GAP-00252" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00251/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00251/task-context.json new file mode 100644 index 00000000..b6e353f0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00251/task-context.json @@ -0,0 +1,182 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00251", + "parentTask": "M16-GAP-00250", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.select_hierarchy data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.select_hierarchy", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00251.py -- tests/files/web/generated/M16-GAP-00251-operator-armature.select_hierarchy.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00251", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00251" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1712, + "contextRemainingTokens": 426 + }, + "source": { + "bytes": 8192, + "tokens": 2050 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00251-operator-armature.select_hierarchy.blend", + "bytes": 86367, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/generated/M16-GAP-00251.py", + "bytes": 1737, + "reason": "CONTEXT_REMAINING_SPACE" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 728950, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00251/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00251.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00251/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00252", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00251.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00250/manifest.json", + "parentStatus": "docs/status/M16-GAP-00250.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00251.md", + "tests/golden/M16-GAP-00250/manifest.json", + "docs/status/M16-GAP-00250.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00250", + "parentTask": "M16-GAP-00249", + "status": "done", + "nextTask": "M16-GAP-00251", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00250 Status", + "status: done", + "task: armature.select_all operator LOCAL_EXACT slice", + "updated: 2026-08-23 America/New_York", + "scope:", + "- The minimal fixture contains two visible edit bones with only the parent bone", + " initially selected. Blender desktop runs `ARMATURE_OT_select_all(action=SELECT)`,", + " selecting both visible bones and both endpoints while preserving geometry." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1814, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 454 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00251.md", + "bytes": 1814, + "lines": 38, + "tokens": 454 + }, + { + "path": "tests/golden/M16-GAP-00250/manifest.json", + "bytes": 2937, + "lines": 74, + "tokens": 735 + }, + { + "path": "docs/status/M16-GAP-00250.md", + "bytes": 946, + "lines": 25, + "tokens": 237 + } + ], + "sourceTokens": 2050, + "evidenceFiles": 0, + "evidenceBytes": 0, + "evidenceTokens": 0, + "totalTokens": 2050, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3074, + "serializedContextTokens": 722, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00252/armature-select-less-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00252/armature-select-less-desktop-report.json new file mode 100644 index 00000000..c24ee248 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00252/armature-select-less-desktop-report.json @@ -0,0 +1,144 @@ +{ + "activeBone": "WebGapArmatureSelectLessRoot", + "after": { + "activeBone": "WebGapArmatureSelectLessRoot", + "armature": "WebGapArmatureSelectLessArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectLessRoot", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": true, + "head": [ + 0.0, + 1.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectLessChild", + "parent": "WebGapArmatureSelectLessRoot", + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 0.0, + 2.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectLessOther", + "parent": null, + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureSelectLessObject" + }, + "before": { + "activeBone": "WebGapArmatureSelectLessRoot", + "armature": "WebGapArmatureSelectLessArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectLessRoot", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": true, + "head": [ + 0.0, + 1.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectLessChild", + "parent": "WebGapArmatureSelectLessRoot", + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 0.0, + 2.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectLessOther", + "parent": null, + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureSelectLessObject" + }, + "blenderVersion": "5.2.0 LTS", + "childBone": "WebGapArmatureSelectLessChild", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00252-operator-armature.select_less.blend", + "fixtureSha256": "6c10d6a2bfb01565d415740efcb5366433cf1ddc722392605530769e6a8f729b", + "mainMutation": "PARTIAL_BOUNDARY_SELECTION_ALREADY_CLEARED", + "operation": "ARMATURE_SELECT_LESS_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "otherBone": "WebGapArmatureSelectLessOther", + "poll": true, + "rootBone": "WebGapArmatureSelectLessRoot", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00252" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00252/armature-select-less-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00252/armature-select-less-local-exact-report.json new file mode 100644 index 00000000..e8b4ef83 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00252/armature-select-less-local-exact-report.json @@ -0,0 +1,67 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00252", + "operation": "ARMATURE_SELECT_LESS_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00252-operator-armature.select_less.blend", + "sha256": "6c10d6a2bfb01565d415740efcb5366433cf1ddc722392605530769e6a8f729b" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00252/armature-select-less-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "PARTIAL_BOUNDARY_SELECTION_ALREADY_CLEARED", + "rootBone": "WebGapArmatureSelectLessRoot", + "childBone": "WebGapArmatureSelectLessChild", + "otherBone": "WebGapArmatureSelectLessOther" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureSelectLessArmature", + "rootBoneId": "bone:armature:WebGapArmatureSelectLessArmature:WebGapArmatureSelectLessRoot", + "childBoneId": "bone:armature:WebGapArmatureSelectLessArmature:WebGapArmatureSelectLessChild", + "otherBoneId": "bone:armature:WebGapArmatureSelectLessArmature:WebGapArmatureSelectLessOther", + "rootSelected": false, + "childSelected": false, + "otherSelected": true, + "childParentId": "bone:armature:WebGapArmatureSelectLessArmature:WebGapArmatureSelectLessRoot", + "childConnected": true, + "rootHead": [ + 0, + 0, + 0 + ], + "rootTail": [ + 0, + 1, + 0 + ], + "childHead": [ + 0, + 1, + 0 + ], + "childTail": [ + 0, + 2, + 0 + ], + "otherHead": [ + 2, + 0, + 0 + ], + "otherTail": [ + 2, + 1, + 0 + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00253" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00252/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00252/manifest.json new file mode 100644 index 00000000..410c7b76 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00252/manifest.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00252", + "parentTask": "M16-GAP-00251", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_SELECT_LESS_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": { + "path": "tests/golden/M16-GAP-00251/manifest.json", + "sha256": "680d7d2fa6bda6d45226f71d1e1ee8986583c20e38c4ac5306625179d070bab7" + }, + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00252-operator-armature.select_less.blend", + "sha256": "6c10d6a2bfb01565d415740efcb5366433cf1ddc722392605530769e6a8f729b" + }, + "generator": { + "path": "tools/web/generated/M16-GAP-00252.py", + "sha256": "8d394493b9b2a43fe98a666d6eaef5f1facf699d5063ba82a8b3ff461037715f" + }, + "desktopChecker": { + "path": "tools/web/check-action-armature-select-less-desktop.py", + "sha256": "ebe6ff995d37310dd1f726246e0c3627960b75c6b506b181286742829ec4423b" + }, + "webChecker": { + "path": "tools/web/check-generated-gap.mjs", + "sha256": "939a88c043aa3c6252384cfe14eddaa4dd01da2b2bfa3e2d413f1e4237eb4423" + }, + "reader": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711" + }, + "nativeStub": { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a" + }, + "wasm": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmPublic": { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + }, + "wasmJs": { + "path": "web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "wasmJsPublic": { + "path": "web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + }, + "desktopReport": { + "path": "tests/golden/M16-GAP-00252/armature-select-less-desktop-report.json", + "sha256": "a7cb4e98fbf96079ef88c8de7491a43e611e1c759525d7bffdef785cadf458f7" + }, + "webReport": { + "path": "tests/golden/M16-GAP-00252/armature-select-less-local-exact-report.json", + "sha256": "5e9743ec56f672990fca63850abe1abd567c6c0488926be44a00dd6295b96c39" + }, + "status": { + "path": "docs/status/M16-GAP-00252.md", + "sha256": "3a8cf46d4f0b5efae6dfbdef3ef8ce808dd603d3a80146b15f0b2f95dabfa302" + }, + "taskContext": { + "path": "tests/golden/M16-GAP-00252/task-context.json", + "sha256": "ea27cc467ccdccd6292bd5e76f1ecbabfe0ddcbb553335684b8512ff207db7a2" + } + }, + "nextTask": "M16-GAP-00253" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00252/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00252/task-context.json new file mode 100644 index 00000000..c01ddf5d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00252/task-context.json @@ -0,0 +1,182 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00252", + "parentTask": "M16-GAP-00251", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.select_less data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.select_less", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00252.py -- tests/files/web/generated/M16-GAP-00252-operator-armature.select_less.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00252", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00252" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1583, + "contextRemainingTokens": 394 + }, + "source": { + "bytes": 8321, + "tokens": 2082 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00252-operator-armature.select_less.blend", + "bytes": 86377, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/generated/M16-GAP-00252.py", + "bytes": 1711, + "reason": "CONTEXT_REMAINING_SPACE" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 735564, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00252/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00252.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00252/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00253", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00252.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00251/manifest.json", + "parentStatus": "docs/status/M16-GAP-00251.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00252.md", + "tests/golden/M16-GAP-00251/manifest.json", + "docs/status/M16-GAP-00251.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00251", + "parentTask": "M16-GAP-00250", + "status": "done", + "nextTask": "M16-GAP-00252", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00251 Status", + "status: done", + "task: armature.select_hierarchy operator LOCAL_EXACT slice", + "updated: 2026-08-23 America/New_York", + "scope:", + "- The minimal fixture contains a selected root, an unselected connected child,", + " and an independent unselected bone. Blender desktop runs", + " `ARMATURE_OT_select_hierarchy(direction=CHILD, extend=false)`, selecting the" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1789, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 448 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00252.md", + "bytes": 1789, + "lines": 38, + "tokens": 448 + }, + { + "path": "tests/golden/M16-GAP-00251/manifest.json", + "bytes": 2967, + "lines": 74, + "tokens": 742 + }, + { + "path": "docs/status/M16-GAP-00251.md", + "bytes": 1070, + "lines": 28, + "tokens": 268 + } + ], + "sourceTokens": 2082, + "evidenceFiles": 0, + "evidenceBytes": 0, + "evidenceTokens": 0, + "totalTokens": 2082, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3106, + "serializedContextTokens": 719, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00253/armature-select-linked-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00253/armature-select-linked-desktop-report.json new file mode 100644 index 00000000..66fc9d49 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00253/armature-select-linked-desktop-report.json @@ -0,0 +1,185 @@ +{ + "after": { + "activeBone": "WebGapArmatureSelectLinkedRoot", + "armature": "WebGapArmatureSelectLinkedArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectLinkedRoot", + "parent": null, + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": true, + "head": [ + 0.0, + 1.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectLinkedChild", + "parent": "WebGapArmatureSelectLinkedRoot", + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 2.0, + 0.0 + ] + }, + { + "connected": true, + "head": [ + 0.0, + 2.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectLinkedGrandchild", + "parent": "WebGapArmatureSelectLinkedChild", + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 3.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectLinkedOther", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureSelectLinkedObject" + }, + "allForks": false, + "before": { + "activeBone": "WebGapArmatureSelectLinkedRoot", + "armature": "WebGapArmatureSelectLinkedArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectLinkedRoot", + "parent": null, + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": true, + "head": [ + 0.0, + 1.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectLinkedChild", + "parent": "WebGapArmatureSelectLinkedRoot", + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 2.0, + 0.0 + ] + }, + { + "connected": true, + "head": [ + 0.0, + 2.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectLinkedGrandchild", + "parent": "WebGapArmatureSelectLinkedChild", + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 3.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectLinkedOther", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureSelectLinkedObject" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00253-operator-armature.select_linked.blend", + "fixtureSha256": "dfc4b49ad0c1165e771368b99c7cf589890586ea4f6b142aa319a42ad9390316", + "mainMutation": "LINKED_CHAIN_ALREADY_SELECTED", + "operation": "ARMATURE_SELECT_LINKED_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "selectedChain": [ + "WebGapArmatureSelectLinkedRoot", + "WebGapArmatureSelectLinkedChild", + "WebGapArmatureSelectLinkedGrandchild" + ], + "task": "M16-GAP-00253", + "unselectedBone": "WebGapArmatureSelectLinkedOther" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00253/armature-select-linked-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00253/armature-select-linked-local-exact-report.json new file mode 100644 index 00000000..cd327542 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00253/armature-select-linked-local-exact-report.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00253", + "operation": "ARMATURE_SELECT_LINKED_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00253-operator-armature.select_linked.blend", + "sha256": "dfc4b49ad0c1165e771368b99c7cf589890586ea4f6b142aa319a42ad9390316" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00253/armature-select-linked-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "LINKED_CHAIN_ALREADY_SELECTED", + "selectedChain": [ + "WebGapArmatureSelectLinkedRoot", + "WebGapArmatureSelectLinkedChild", + "WebGapArmatureSelectLinkedGrandchild" + ], + "unselectedBone": "WebGapArmatureSelectLinkedOther", + "allForks": false + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureSelectLinkedArmature", + "rootBoneId": "bone:armature:WebGapArmatureSelectLinkedArmature:WebGapArmatureSelectLinkedRoot", + "childBoneId": "bone:armature:WebGapArmatureSelectLinkedArmature:WebGapArmatureSelectLinkedChild", + "grandchildBoneId": "bone:armature:WebGapArmatureSelectLinkedArmature:WebGapArmatureSelectLinkedGrandchild", + "otherBoneId": "bone:armature:WebGapArmatureSelectLinkedArmature:WebGapArmatureSelectLinkedOther", + "rootSelected": true, + "childSelected": true, + "grandchildSelected": true, + "otherSelected": false, + "childParentId": "bone:armature:WebGapArmatureSelectLinkedArmature:WebGapArmatureSelectLinkedRoot", + "grandchildParentId": "bone:armature:WebGapArmatureSelectLinkedArmature:WebGapArmatureSelectLinkedChild" + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00254" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00253/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00253/manifest.json new file mode 100644 index 00000000..19b1bea9 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00253/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00253", + "parentTask": "M16-GAP-00252", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_SELECT_LINKED_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00252/manifest.json", "sha256": "c7abf03119f5557abd6c19d76ae0d1bde2946d034095046eb69d0f76cf4c8cbf"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00253-operator-armature.select_linked.blend", "sha256": "dfc4b49ad0c1165e771368b99c7cf589890586ea4f6b142aa319a42ad9390316"}, + "generator": {"path": "tools/web/generated/M16-GAP-00253.py", "sha256": "d64e0a3681f8501775ecb6fafafec3fba567b42c10fbcda3507624560ddb05fa"}, + "desktopChecker": {"path": "tools/web/check-action-armature-select-linked-desktop.py", "sha256": "99901e2c2a744563c9fff9105244cd07368b6ed0cc52c6c1c94eb65c3e964ac5"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "9b03d502ca9ef28f88c595b0d7fdd9d29c44288c7c5d7b2dc1bf8273dd19cde9"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711"}, + "nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00253/armature-select-linked-desktop-report.json", "sha256": "3a2b4e82aeaa2fdea3ae01df802c8de371f184dc0b018cc1c16d2349d19b9fa3"}, + "webReport": {"path": "tests/golden/M16-GAP-00253/armature-select-linked-local-exact-report.json", "sha256": "d184c248dd13878698f5b973331bbe7d65cde2defa697f22e4c05df9a433b42a"}, + "status": {"path": "docs/status/M16-GAP-00253.md", "sha256": "e6627177fb89e16a7c18efddf495d46e01a0d1d70d14f324813a05dc5c9fdb6f"}, + "taskContext": {"path": "tests/golden/M16-GAP-00253/task-context.json", "sha256": "94c2ded148413fd67032d63cdcdcdf5b332cd99569b02804e3a743471fb3cda9"} + }, + "nextTask": "M16-GAP-00254" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00253/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00253/task-context.json new file mode 100644 index 00000000..23094df7 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00253/task-context.json @@ -0,0 +1,182 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00253", + "parentTask": "M16-GAP-00252", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.select_linked data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.select_linked", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00253.py -- tests/files/web/generated/M16-GAP-00253-operator-armature.select_linked.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00253", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00253" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1748, + "contextRemainingTokens": 436 + }, + "source": { + "bytes": 8156, + "tokens": 2040 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00253-operator-armature.select_linked.blend", + "bytes": 86468, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/generated/M16-GAP-00253.py", + "bytes": 2077, + "reason": "CONTEXT_REMAINING_SPACE" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 742256, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00253/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00253.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00253/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00254", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00253.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00252/manifest.json", + "parentStatus": "docs/status/M16-GAP-00252.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00253.md", + "tests/golden/M16-GAP-00252/manifest.json", + "docs/status/M16-GAP-00252.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00252", + "parentTask": "M16-GAP-00251", + "status": "done", + "nextTask": "M16-GAP-00253", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00252 Status", + "status: done", + "task: armature.select_less operator LOCAL_EXACT slice", + "updated: 2026-08-23 America/New_York", + "scope:", + "- The minimal fixture contains a partially selected root boundary, an", + " unselected connected child, and an independent fully selected bone. Blender", + " desktop runs `ARMATURE_OT_select_less`, clearing the partial boundary while" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1799, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 450 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00253.md", + "bytes": 1799, + "lines": 38, + "tokens": 450 + }, + { + "path": "tests/golden/M16-GAP-00252/manifest.json", + "bytes": 2942, + "lines": 74, + "tokens": 736 + }, + { + "path": "docs/status/M16-GAP-00252.md", + "bytes": 920, + "lines": 26, + "tokens": 230 + } + ], + "sourceTokens": 2040, + "evidenceFiles": 0, + "evidenceBytes": 0, + "evidenceTokens": 0, + "totalTokens": 2040, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3064, + "serializedContextTokens": 720, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00254/armature-select-linked-pick-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00254/armature-select-linked-pick-desktop-report.json new file mode 100644 index 00000000..a2611866 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00254/armature-select-linked-pick-desktop-report.json @@ -0,0 +1,187 @@ +{ + "after": { + "activeBone": "WebGapArmatureSelectLinkedPickRoot", + "armature": "WebGapArmatureSelectLinkedPickArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectLinkedPickRoot", + "parent": null, + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": true, + "head": [ + 0.0, + 1.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectLinkedPickChild", + "parent": "WebGapArmatureSelectLinkedPickRoot", + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 2.0, + 0.0 + ] + }, + { + "connected": true, + "head": [ + 0.0, + 2.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectLinkedPickGrandchild", + "parent": "WebGapArmatureSelectLinkedPickChild", + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 3.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectLinkedPickOther", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureSelectLinkedPickObject" + }, + "allForks": false, + "before": { + "activeBone": "WebGapArmatureSelectLinkedPickRoot", + "armature": "WebGapArmatureSelectLinkedPickArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectLinkedPickRoot", + "parent": null, + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": true, + "head": [ + 0.0, + 1.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectLinkedPickChild", + "parent": "WebGapArmatureSelectLinkedPickRoot", + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 2.0, + 0.0 + ] + }, + { + "connected": true, + "head": [ + 0.0, + 2.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectLinkedPickGrandchild", + "parent": "WebGapArmatureSelectLinkedPickChild", + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 3.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectLinkedPickOther", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureSelectLinkedPickObject" + }, + "blenderVersion": "5.2.0 LTS", + "deselect": false, + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00254-operator-armature.select_linked_pick.blend", + "fixtureSha256": "10e4053f9aea2a2cad6314e3ab4d981db9bc4281933c1172ad77247f4c6500fd", + "mainMutation": "PICKED_LINKED_CHAIN_ALREADY_SELECTED", + "operation": "ARMATURE_SELECT_LINKED_PICK_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "pickedBone": "WebGapArmatureSelectLinkedPickRoot", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "selectedChain": [ + "WebGapArmatureSelectLinkedPickRoot", + "WebGapArmatureSelectLinkedPickChild", + "WebGapArmatureSelectLinkedPickGrandchild" + ], + "task": "M16-GAP-00254", + "unselectedBone": "WebGapArmatureSelectLinkedPickOther" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00254/armature-select-linked-pick-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00254/armature-select-linked-pick-local-exact-report.json new file mode 100644 index 00000000..16da488c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00254/armature-select-linked-pick-local-exact-report.json @@ -0,0 +1,45 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00254", + "operation": "ARMATURE_SELECT_LINKED_PICK_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00254-operator-armature.select_linked_pick.blend", + "sha256": "10e4053f9aea2a2cad6314e3ab4d981db9bc4281933c1172ad77247f4c6500fd" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00254/armature-select-linked-pick-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "PICKED_LINKED_CHAIN_ALREADY_SELECTED", + "pickedBone": "WebGapArmatureSelectLinkedPickRoot", + "selectedChain": [ + "WebGapArmatureSelectLinkedPickRoot", + "WebGapArmatureSelectLinkedPickChild", + "WebGapArmatureSelectLinkedPickGrandchild" + ], + "unselectedBone": "WebGapArmatureSelectLinkedPickOther", + "deselect": false, + "allForks": false + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureSelectLinkedPickArmature", + "rootBoneId": "bone:armature:WebGapArmatureSelectLinkedPickArmature:WebGapArmatureSelectLinkedPickRoot", + "childBoneId": "bone:armature:WebGapArmatureSelectLinkedPickArmature:WebGapArmatureSelectLinkedPickChild", + "grandchildBoneId": "bone:armature:WebGapArmatureSelectLinkedPickArmature:WebGapArmatureSelectLinkedPickGrandchild", + "otherBoneId": "bone:armature:WebGapArmatureSelectLinkedPickArmature:WebGapArmatureSelectLinkedPickOther", + "rootSelected": true, + "childSelected": true, + "grandchildSelected": true, + "otherSelected": false, + "childParentId": "bone:armature:WebGapArmatureSelectLinkedPickArmature:WebGapArmatureSelectLinkedPickRoot", + "grandchildParentId": "bone:armature:WebGapArmatureSelectLinkedPickArmature:WebGapArmatureSelectLinkedPickChild" + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00255" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00254/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00254/manifest.json new file mode 100644 index 00000000..1781dcbf --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00254/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00254", + "parentTask": "M16-GAP-00253", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_SELECT_LINKED_PICK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00253/manifest.json", "sha256": "c18022062e68fc4ddaee81a39b6dc766253f0e1c36f2e5d81941935e3783669b"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00254-operator-armature.select_linked_pick.blend", "sha256": "10e4053f9aea2a2cad6314e3ab4d981db9bc4281933c1172ad77247f4c6500fd"}, + "generator": {"path": "tools/web/generated/M16-GAP-00254.py", "sha256": "f08a4362f6bfbbdd8eeeac7e9961613f21450b64fcf5138fd2674515c97229af"}, + "desktopChecker": {"path": "tools/web/check-action-armature-select-linked-pick-desktop.py", "sha256": "8909666d24df353cf64f225b857a1ccc48c460320df52e385f69c8e13200d686"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "432e513cde8bdbcb28a1adf66ff410497d8a0425592bc5e2326d25dbea488d78"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711"}, + "nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00254/armature-select-linked-pick-desktop-report.json", "sha256": "1338c391ecabbb35166c5df8e36a8a0f5b65deca3994f7c2ee1d799b564906d0"}, + "webReport": {"path": "tests/golden/M16-GAP-00254/armature-select-linked-pick-local-exact-report.json", "sha256": "14560b0b43aa917fa31fe8c9023992285313204c858d7260da22347a8696b9bb"}, + "status": {"path": "docs/status/M16-GAP-00254.md", "sha256": "711b0fb2e6dbbc12a25d1c5ad19ea3a3085d9b7fbfac45ef633735053479dc19"}, + "taskContext": {"path": "tests/golden/M16-GAP-00254/task-context.json", "sha256": "dc292fe37486b022284f46739ad523b5a6ee406157a325aa855411ee3e24c3f6"} + }, + "nextTask": "M16-GAP-00255" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00254/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00254/task-context.json new file mode 100644 index 00000000..0645fa16 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00254/task-context.json @@ -0,0 +1,182 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00254", + "parentTask": "M16-GAP-00253", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.select_linked_pick data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.select_linked_pick", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00254.py -- tests/files/web/generated/M16-GAP-00254-operator-armature.select_linked_pick.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00254", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00254" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1997, + "contextRemainingTokens": 498 + }, + "source": { + "bytes": 7907, + "tokens": 1978 + }, + "selected": [], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00254-operator-armature.select_linked_pick.blend", + "bytes": 86478, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/generated/M16-GAP-00254.py", + "bytes": 2037, + "reason": "CONTEXT_REMAINING_SPACE" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 747407, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00254/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00254.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00254/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00255", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00254.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00253/manifest.json", + "parentStatus": "docs/status/M16-GAP-00253.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00254.md", + "tests/golden/M16-GAP-00253/manifest.json", + "docs/status/M16-GAP-00253.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00253", + "parentTask": "M16-GAP-00252", + "status": "done", + "nextTask": "M16-GAP-00254", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00253 Status", + "status: done", + "task: armature.select_linked operator LOCAL_EXACT slice", + "updated: 2026-08-23 America/New_York", + "scope:", + "- The minimal fixture contains a selected root, two unselected connected", + " descendants, and an independent unselected bone. Blender desktop runs", + " `ARMATURE_OT_select_linked(all_forks=false)`, selecting the linked chain while" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1824, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 456 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00254.md", + "bytes": 1824, + "lines": 38, + "tokens": 456 + }, + { + "path": "tests/golden/M16-GAP-00253/manifest.json", + "bytes": 2682, + "lines": 29, + "tokens": 671 + }, + { + "path": "docs/status/M16-GAP-00253.md", + "bytes": 906, + "lines": 25, + "tokens": 227 + } + ], + "sourceTokens": 1978, + "evidenceFiles": 0, + "evidenceBytes": 0, + "evidenceTokens": 0, + "totalTokens": 1978, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3002, + "serializedContextTokens": 724, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00255/armature-select-mirror-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00255/armature-select-mirror-desktop-report.json new file mode 100644 index 00000000..652f2e75 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00255/armature-select-mirror-desktop-report.json @@ -0,0 +1,145 @@ +{ + "after": { + "activeBone": "WebGapSelectMirror.R", + "armature": "WebGapArmatureSelectMirrorArmature", + "bones": [ + { + "connected": false, + "head": [ + -2.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapSelectMirror.L", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + -2.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapSelectMirror.R", + "parent": null, + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapSelectMirrorCenter", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureSelectMirrorObject" + }, + "before": { + "activeBone": "WebGapSelectMirror.R", + "armature": "WebGapArmatureSelectMirrorArmature", + "bones": [ + { + "connected": false, + "head": [ + -2.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapSelectMirror.L", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + -2.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapSelectMirror.R", + "parent": null, + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapSelectMirrorCenter", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureSelectMirrorObject" + }, + "blenderVersion": "5.2.0 LTS", + "centerBone": "WebGapSelectMirrorCenter", + "extend": false, + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00255-operator-armature.select_mirror.blend", + "fixtureSha256": "af187a9ffb0c6b8f422fd0da0896699dcde8209c8d5d6fbf807ba72cc4a64abb", + "leftBone": "WebGapSelectMirror.L", + "mainMutation": "MIRROR_SELECTION_ALREADY_APPLIED", + "onlyActive": false, + "operation": "ARMATURE_SELECT_MIRROR_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "rightBone": "WebGapSelectMirror.R", + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00255" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00255/armature-select-mirror-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00255/armature-select-mirror-local-exact-report.json new file mode 100644 index 00000000..9671f49e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00255/armature-select-mirror-local-exact-report.json @@ -0,0 +1,47 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00255", + "operation": "ARMATURE_SELECT_MIRROR_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00255-operator-armature.select_mirror.blend", + "sha256": "af187a9ffb0c6b8f422fd0da0896699dcde8209c8d5d6fbf807ba72cc4a64abb" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00255/armature-select-mirror-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "MIRROR_SELECTION_ALREADY_APPLIED", + "leftBone": "WebGapSelectMirror.L", + "rightBone": "WebGapSelectMirror.R", + "centerBone": "WebGapSelectMirrorCenter", + "onlyActive": false, + "extend": false + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureSelectMirrorArmature", + "leftBoneId": "bone:armature:WebGapArmatureSelectMirrorArmature:WebGapSelectMirror.L", + "rightBoneId": "bone:armature:WebGapArmatureSelectMirrorArmature:WebGapSelectMirror.R", + "centerBoneId": "bone:armature:WebGapArmatureSelectMirrorArmature:WebGapSelectMirrorCenter", + "leftSelected": false, + "rightSelected": true, + "centerSelected": false, + "leftHead": [ + -2, + 0, + 0 + ], + "rightHead": [ + 2, + 0, + 0 + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00256" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00255/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00255/manifest.json new file mode 100644 index 00000000..2bb6dfec --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00255/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00255", + "parentTask": "M16-GAP-00254", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_SELECT_MIRROR_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00254/manifest.json", "sha256": "886c93f9af231c7ce040524d31758c41d38fa377d00da2056d5a299a18034f0a"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00255-operator-armature.select_mirror.blend", "sha256": "af187a9ffb0c6b8f422fd0da0896699dcde8209c8d5d6fbf807ba72cc4a64abb"}, + "generator": {"path": "tools/web/generated/M16-GAP-00255.py", "sha256": "19e723cd74e3e0adad28ed2feaec157ae4725f88e4863457c91ab0b9aac4ade3"}, + "desktopChecker": {"path": "tools/web/check-action-armature-select-mirror-desktop.py", "sha256": "21a152a785b6bdb794c6488685cdebf3ce27c3573b3f46e38002c8be0bd0fc43"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "a3b541b0e24e13be55fc45baf19c193f49b1a273a1ae926cc200c9638e89a5d0"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711"}, + "nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00255/armature-select-mirror-desktop-report.json", "sha256": "d5b76fb51060be4e1b56e81d238d74df4556b09ceae84dcb0f9c545dfa1bf35f"}, + "webReport": {"path": "tests/golden/M16-GAP-00255/armature-select-mirror-local-exact-report.json", "sha256": "e87ab4016b6ef049c7ed7177d9dee54d44dbcb88d5bbab6f0dbefddadce6b48c"}, + "status": {"path": "docs/status/M16-GAP-00255.md", "sha256": "0dba82e5720f86c24fc442bb14472d1f2a14929df2652566d0b0bf0db7ef101b"}, + "taskContext": {"path": "tests/golden/M16-GAP-00255/task-context.json", "sha256": "1072a60c75f9ba38bbef954deeda027e2906ce86485b94b7a0315409aabd682a"} + }, + "nextTask": "M16-GAP-00256" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00255/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00255/task-context.json new file mode 100644 index 00000000..20128c5f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00255/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00255", + "parentTask": "M16-GAP-00254", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.select_mirror data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.select_mirror", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00255.py -- tests/files/web/generated/M16-GAP-00255-operator-armature.select_mirror.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00255", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00255" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00255.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1977, + "contextRemainingTokens": 493 + }, + "source": { + "bytes": 7927, + "tokens": 1983 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00255.py", + "bytes": 1596, + "tokens": 399 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00255-operator-armature.select_mirror.blend", + "bytes": 86324, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 751983, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00255/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00255.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00255/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1596, + "tokens": 399 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00256", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00255.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00254/manifest.json", + "parentStatus": "docs/status/M16-GAP-00254.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00255.md", + "tests/golden/M16-GAP-00254/manifest.json", + "docs/status/M16-GAP-00254.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00254", + "parentTask": "M16-GAP-00253", + "status": "done", + "nextTask": "M16-GAP-00255", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00254 Status", + "status: done", + "task: armature.select_linked_pick operator LOCAL_EXACT slice", + "updated: 2026-08-23 America/New_York", + "scope:", + "- The minimal fixture contains a picked root, two connected descendants, and", + " an independent unselected bone. Desktop evidence exercises the shared linked", + " selection path with `deselect=false` and `all_forks=false`, selecting only the" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1799, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 450 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00255.md", + "bytes": 1799, + "lines": 38, + "tokens": 450 + }, + { + "path": "tests/golden/M16-GAP-00254/manifest.json", + "bytes": 2707, + "lines": 29, + "tokens": 677 + }, + { + "path": "docs/status/M16-GAP-00254.md", + "bytes": 926, + "lines": 25, + "tokens": 232 + } + ], + "sourceTokens": 1983, + "evidenceFiles": 1, + "evidenceBytes": 1596, + "evidenceTokens": 399, + "totalTokens": 2382, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3406, + "serializedContextTokens": 756, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00256/armature-select-more-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00256/armature-select-more-desktop-report.json new file mode 100644 index 00000000..5f051619 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00256/armature-select-more-desktop-report.json @@ -0,0 +1,184 @@ +{ + "after": { + "activeBone": "WebGapArmatureSelectMoreRoot", + "armature": "WebGapArmatureSelectMoreArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectMoreRoot", + "parent": null, + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": true, + "head": [ + 0.0, + 1.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectMoreChild", + "parent": "WebGapArmatureSelectMoreRoot", + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 2.0, + 0.0 + ] + }, + { + "connected": true, + "head": [ + 0.0, + 2.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectMoreGrandchild", + "parent": "WebGapArmatureSelectMoreChild", + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 0.0, + 3.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectMoreOther", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureSelectMoreObject" + }, + "before": { + "activeBone": "WebGapArmatureSelectMoreRoot", + "armature": "WebGapArmatureSelectMoreArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectMoreRoot", + "parent": null, + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": true, + "head": [ + 0.0, + 1.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectMoreChild", + "parent": "WebGapArmatureSelectMoreRoot", + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 2.0, + 0.0 + ] + }, + { + "connected": true, + "head": [ + 0.0, + 2.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectMoreGrandchild", + "parent": "WebGapArmatureSelectMoreChild", + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 0.0, + 3.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSelectMoreOther", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureSelectMoreObject" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00256-operator-armature.select_more.blend", + "fixtureSha256": "7acc23a6cf8bf14d13c3e1571106d62e3ddf8fcfd6af910009da833672ec6242", + "mainMutation": "CONNECTED_CHAIN_ALREADY_SELECTED", + "operation": "ARMATURE_SELECT_MORE_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "selectedChain": [ + "WebGapArmatureSelectMoreRoot", + "WebGapArmatureSelectMoreChild", + "WebGapArmatureSelectMoreGrandchild" + ], + "task": "M16-GAP-00256", + "unselectedBone": "WebGapArmatureSelectMoreOther" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00256/armature-select-more-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00256/armature-select-more-local-exact-report.json new file mode 100644 index 00000000..89523639 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00256/armature-select-more-local-exact-report.json @@ -0,0 +1,41 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00256", + "operation": "ARMATURE_SELECT_MORE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00256-operator-armature.select_more.blend", + "sha256": "7acc23a6cf8bf14d13c3e1571106d62e3ddf8fcfd6af910009da833672ec6242" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00256/armature-select-more-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "CONNECTED_CHAIN_ALREADY_SELECTED", + "selectedChain": [ + "WebGapArmatureSelectMoreRoot", + "WebGapArmatureSelectMoreChild" + ], + "unselectedBone": "WebGapArmatureSelectMoreOther" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureSelectMoreArmature", + "rootBoneId": "bone:armature:WebGapArmatureSelectMoreArmature:WebGapArmatureSelectMoreRoot", + "childBoneId": "bone:armature:WebGapArmatureSelectMoreArmature:WebGapArmatureSelectMoreChild", + "grandchildBoneId": "bone:armature:WebGapArmatureSelectMoreArmature:WebGapArmatureSelectMoreGrandchild", + "otherBoneId": "bone:armature:WebGapArmatureSelectMoreArmature:WebGapArmatureSelectMoreOther", + "rootSelected": true, + "childSelected": true, + "grandchildSelected": false, + "otherSelected": false, + "childParentId": "bone:armature:WebGapArmatureSelectMoreArmature:WebGapArmatureSelectMoreRoot", + "grandchildParentId": "bone:armature:WebGapArmatureSelectMoreArmature:WebGapArmatureSelectMoreChild" + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00257" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00256/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00256/manifest.json new file mode 100644 index 00000000..0a2ce059 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00256/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00256", + "parentTask": "M16-GAP-00255", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_SELECT_MORE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00255/manifest.json", "sha256": "19f955e47b59acbee94de0c844ce9272912b1b8e08d2e2e10a6a03c961a090be"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00256-operator-armature.select_more.blend", "sha256": "7acc23a6cf8bf14d13c3e1571106d62e3ddf8fcfd6af910009da833672ec6242"}, + "generator": {"path": "tools/web/generated/M16-GAP-00256.py", "sha256": "2e644c7207d74ac4a1e3e9c9163af7dd823b155622e2caacb4cdf6f47b7a49c1"}, + "desktopChecker": {"path": "tools/web/check-action-armature-select-more-desktop.py", "sha256": "dfd686370601ddd0d43ba0434e7d9fde5ff80d12170f423d571f5344f281fc56"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "6905ab6353bed833ff68c198cd639862d854ad12dfaf0e72edb195470b488c50"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711"}, + "nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00256/armature-select-more-desktop-report.json", "sha256": "76c4cbf93b70f19535b1e4b2f9b580ca6803da03ac3c7aeafa4523fca6a24baf"}, + "webReport": {"path": "tests/golden/M16-GAP-00256/armature-select-more-local-exact-report.json", "sha256": "d091f0032c51091e234da5ff0c931855cb1491dd86d9cd51ef0fc2e7143e9017"}, + "status": {"path": "docs/status/M16-GAP-00256.md", "sha256": "cd01bfc800c3e3f8931793179a8c73070318f49129f36c9d62cfebef36dc6134"}, + "taskContext": {"path": "tests/golden/M16-GAP-00256/task-context.json", "sha256": "03b45f7ec25e3cf1c82806959ab14a1b678ab66d47e05ce9d2f11ddec004871a"} + }, + "nextTask": "M16-GAP-00257" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00256/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00256/task-context.json new file mode 100644 index 00000000..87ac6298 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00256/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00256", + "parentTask": "M16-GAP-00255", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.select_more data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.select_more", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00256.py -- tests/files/web/generated/M16-GAP-00256-operator-armature.select_more.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00256", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00256" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00256.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2051, + "contextRemainingTokens": 511 + }, + "source": { + "bytes": 7853, + "tokens": 1965 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00256.py", + "bytes": 1793, + "tokens": 449 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00256-operator-armature.select_more.blend", + "bytes": 86474, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 756730, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00256/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00256.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00256/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1793, + "tokens": 449 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00257", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00256.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00255/manifest.json", + "parentStatus": "docs/status/M16-GAP-00255.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00256.md", + "tests/golden/M16-GAP-00255/manifest.json", + "docs/status/M16-GAP-00255.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00255", + "parentTask": "M16-GAP-00254", + "status": "done", + "nextTask": "M16-GAP-00256", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00255 Status", + "status: done", + "task: armature.select_mirror operator LOCAL_EXACT slice", + "updated: 2026-08-23 America/New_York", + "scope:", + "- The minimal fixture contains a selected `.L` bone, an unselected `.R` mirror,", + " and an unrelated center bone. Blender desktop runs", + " `ARMATURE_OT_select_mirror(only_active=false, extend=false)`, mirroring the" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1789, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 448 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00256.md", + "bytes": 1789, + "lines": 38, + "tokens": 448 + }, + { + "path": "tests/golden/M16-GAP-00255/manifest.json", + "bytes": 2682, + "lines": 29, + "tokens": 671 + }, + { + "path": "docs/status/M16-GAP-00255.md", + "bytes": 887, + "lines": 25, + "tokens": 222 + } + ], + "sourceTokens": 1965, + "evidenceFiles": 1, + "evidenceBytes": 1793, + "evidenceTokens": 449, + "totalTokens": 2414, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3438, + "serializedContextTokens": 754, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00257/armature-select-similar-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00257/armature-select-similar-desktop-report.json new file mode 100644 index 00000000..517ff09c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00257/armature-select-similar-desktop-report.json @@ -0,0 +1,151 @@ +{ + "activeBone": "WebGapArmatureSelectSimilarActive", + "after": { + "activeBone": "WebGapArmatureSelectSimilarActive", + "armature": "WebGapArmatureSelectSimilarArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "hidden": false, + "length": 1.0, + "name": "WebGapArmatureSelectSimilarActive", + "parent": null, + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "hidden": false, + "length": 1.0, + "name": "WebGapArmatureSelectSimilarSameLength", + "parent": null, + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 4.0, + 0.0, + 0.0 + ], + "hidden": false, + "length": 2.0, + "name": "WebGapArmatureSelectSimilarDifferentLength", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 4.0, + 2.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureSelectSimilarObject" + }, + "before": { + "activeBone": "WebGapArmatureSelectSimilarActive", + "armature": "WebGapArmatureSelectSimilarArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "hidden": false, + "length": 1.0, + "name": "WebGapArmatureSelectSimilarActive", + "parent": null, + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "hidden": false, + "length": 1.0, + "name": "WebGapArmatureSelectSimilarSameLength", + "parent": null, + "selectHead": true, + "selectTail": true, + "selected": true, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 4.0, + 0.0, + 0.0 + ], + "hidden": false, + "length": 2.0, + "name": "WebGapArmatureSelectSimilarDifferentLength", + "parent": null, + "selectHead": false, + "selectTail": false, + "selected": false, + "tail": [ + 4.0, + 2.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureSelectSimilarObject" + }, + "blenderVersion": "5.2.0 LTS", + "differentBone": "WebGapArmatureSelectSimilarDifferentLength", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00257-operator-armature.select_similar.blend", + "fixtureSha256": "72ed76cd6970d683de6c528a653e8279bdeec13f8f1a4a2e8bc9c8b2f63cf94b", + "mainMutation": "SIMILAR_LENGTH_ALREADY_SELECTED", + "operation": "ARMATURE_SELECT_SIMILAR_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "similarBone": "WebGapArmatureSelectSimilarSameLength", + "task": "M16-GAP-00257", + "threshold": 0.1, + "type": "LENGTH" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00257/armature-select-similar-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00257/armature-select-similar-local-exact-report.json new file mode 100644 index 00000000..8302d836 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00257/armature-select-similar-local-exact-report.json @@ -0,0 +1,37 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00257", + "operation": "ARMATURE_SELECT_SIMILAR_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00257-operator-armature.select_similar.blend", + "sha256": "72ed76cd6970d683de6c528a653e8279bdeec13f8f1a4a2e8bc9c8b2f63cf94b" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00257/armature-select-similar-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "SIMILAR_LENGTH_ALREADY_SELECTED", + "type": "LENGTH", + "threshold": 0.1, + "activeBone": "WebGapArmatureSelectSimilarActive", + "similarBone": "WebGapArmatureSelectSimilarSameLength", + "differentBone": "WebGapArmatureSelectSimilarDifferentLength" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureSelectSimilarArmature", + "activeBoneId": "bone:armature:WebGapArmatureSelectSimilarArmature:WebGapArmatureSelectSimilarActive", + "similarBoneId": "bone:armature:WebGapArmatureSelectSimilarArmature:WebGapArmatureSelectSimilarSameLength", + "differentBoneId": "bone:armature:WebGapArmatureSelectSimilarArmature:WebGapArmatureSelectSimilarDifferentLength", + "activeSelected": true, + "similarSelected": true, + "differentSelected": false + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00258" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00257/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00257/manifest.json new file mode 100644 index 00000000..30f2433a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00257/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00257", + "parentTask": "M16-GAP-00256", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_SELECT_SIMILAR_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00256/manifest.json", "sha256": "c028d7cabda7dc400b72d70323b54a1a7ab49e825fb5abaf9f130f5d179d9ac5"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00257-operator-armature.select_similar.blend", "sha256": "72ed76cd6970d683de6c528a653e8279bdeec13f8f1a4a2e8bc9c8b2f63cf94b"}, + "generator": {"path": "tools/web/generated/M16-GAP-00257.py", "sha256": "eca6a8b77191833657b65e86c190c6d4942df4b560cb57a86a0aafcad26566c1"}, + "desktopChecker": {"path": "tools/web/check-action-armature-select-similar-desktop.py", "sha256": "62d26209267be4d01cb079f467b4027623cea284b894787029199188e486e25a"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "a291ff0f2f64d8fb413ece65b5f88289f5a878e91f2a3e2c7cfaf1b9dbdcd833"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711"}, + "nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00257/armature-select-similar-desktop-report.json", "sha256": "22cdd9b6ce61fedfda0b76fcedb0c122176d4e17c5ca7ae06277d221ef1ac22e"}, + "webReport": {"path": "tests/golden/M16-GAP-00257/armature-select-similar-local-exact-report.json", "sha256": "cc8a91b14a765d9643289230ca8e38800cabcecc74883845b8e06087f528be4c"}, + "status": {"path": "docs/status/M16-GAP-00257.md", "sha256": "6da68ce35f3ff17a22f5f5378c503304fe8e28ab65a73ff0eae35125c94600d1"}, + "taskContext": {"path": "tests/golden/M16-GAP-00257/task-context.json", "sha256": "9464e6917cbd8e532889f70781049e38e5131f841c3c638bdf6a6f0342f35429"} + }, + "nextTask": "M16-GAP-00258" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00257/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00257/task-context.json new file mode 100644 index 00000000..f485f836 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00257/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00257", + "parentTask": "M16-GAP-00256", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.select_similar data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.select_similar", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00257.py -- tests/files/web/generated/M16-GAP-00257-operator-armature.select_similar.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00257", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00257" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00257.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2048, + "contextRemainingTokens": 511 + }, + "source": { + "bytes": 7856, + "tokens": 1965 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00257.py", + "bytes": 1699, + "tokens": 425 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00257-operator-armature.select_similar.blend", + "bytes": 86368, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 761500, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00257/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00257.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00257/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1699, + "tokens": 425 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00258", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00257.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00256/manifest.json", + "parentStatus": "docs/status/M16-GAP-00256.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00257.md", + "tests/golden/M16-GAP-00256/manifest.json", + "docs/status/M16-GAP-00256.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00256", + "parentTask": "M16-GAP-00255", + "status": "done", + "nextTask": "M16-GAP-00257", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00256 Status", + "status: done", + "task: armature.select_more operator LOCAL_EXACT slice", + "updated: 2026-08-23 America/New_York", + "scope:", + "- The minimal fixture contains a selected root bone, an adjacent selected child,", + " an unselected connected grandchild, and an unrelated unselected bone.", + " Blender desktop runs `ARMATURE_OT_select_more` and preserves the expected" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1804, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 451 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00257.md", + "bytes": 1804, + "lines": 38, + "tokens": 451 + }, + { + "path": "tests/golden/M16-GAP-00256/manifest.json", + "bytes": 2672, + "lines": 29, + "tokens": 668 + }, + { + "path": "docs/status/M16-GAP-00256.md", + "bytes": 885, + "lines": 24, + "tokens": 222 + } + ], + "sourceTokens": 1965, + "evidenceFiles": 1, + "evidenceBytes": 1699, + "evidenceTokens": 425, + "totalTokens": 2390, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3414, + "serializedContextTokens": 756, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00258/armature-separate-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00258/armature-separate-desktop-report.json new file mode 100644 index 00000000..1955f0fd --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00258/armature-separate-desktop-report.json @@ -0,0 +1,112 @@ +{ + "after": { + "objects": [ + { + "activeBone": null, + "armature": "WebGapArmatureSeparateArmature", + "bones": [ + { + "head": [ + 2.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureSeparateRetained", + "parent": null, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureSeparateObject" + }, + { + "activeBone": null, + "armature": "WebGapArmatureSeparateArmature.001", + "bones": [ + { + "head": [ + 0.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureSeparateSelected", + "parent": null, + "selected": true, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureSeparateObject.001" + } + ] + }, + "before": { + "objects": [ + { + "activeBone": null, + "armature": "WebGapArmatureSeparateArmature", + "bones": [ + { + "head": [ + 2.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureSeparateRetained", + "parent": null, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureSeparateObject" + }, + { + "activeBone": null, + "armature": "WebGapArmatureSeparateArmature.001", + "bones": [ + { + "head": [ + 0.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureSeparateSelected", + "parent": null, + "selected": true, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureSeparateObject.001" + } + ] + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00258-operator-armature.separate.blend", + "fixtureSha256": "e995623dfaf3e5a34b4843beb5291f82144501d7a6f0b53a4ffada844440d269", + "mainMutation": "SELECTED_BONES_ALREADY_SEPARATED", + "operation": "ARMATURE_SEPARATE_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "retainedBone": "WebGapArmatureSeparateRetained", + "saveReopen": "EXACT", + "schemaVersion": 1, + "selectedBone": "WebGapArmatureSeparateSelected", + "separatedObject": "WebGapArmatureSeparateObject.001", + "sourceObject": "WebGapArmatureSeparateObject", + "task": "M16-GAP-00258" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00258/armature-separate-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00258/armature-separate-local-exact-report.json new file mode 100644 index 00000000..39561748 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00258/armature-separate-local-exact-report.json @@ -0,0 +1,37 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00258", + "operation": "ARMATURE_SEPARATE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00258-operator-armature.separate.blend", + "sha256": "e995623dfaf3e5a34b4843beb5291f82144501d7a6f0b53a4ffada844440d269" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00258/armature-separate-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "SELECTED_BONES_ALREADY_SEPARATED", + "sourceObject": "WebGapArmatureSeparateObject", + "separatedObject": "WebGapArmatureSeparateObject.001", + "selectedBone": "WebGapArmatureSeparateSelected", + "retainedBone": "WebGapArmatureSeparateRetained" + }, + "wasm": { + "status": "EXACT", + "originalArmatureId": "armature:WebGapArmatureSeparateArmature", + "separatedArmatureId": "armature:WebGapArmatureSeparateArmature.001", + "originalBoneId": "bone:armature:WebGapArmatureSeparateArmature:WebGapArmatureSeparateRetained", + "separatedBoneId": "bone:armature:WebGapArmatureSeparateArmature.001:WebGapArmatureSeparateSelected", + "originalBone": "WebGapArmatureSeparateRetained", + "separatedBone": "WebGapArmatureSeparateSelected", + "originalSelected": false, + "separatedSelected": true + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00259" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00258/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00258/manifest.json new file mode 100644 index 00000000..987f3e19 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00258/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00258", + "parentTask": "M16-GAP-00257", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_SEPARATE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00257/manifest.json", "sha256": "5a0a58c9b0578f0e19cd799df1d12d2c73c01c20bd718fa5318f2f1d91083247"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00258-operator-armature.separate.blend", "sha256": "e995623dfaf3e5a34b4843beb5291f82144501d7a6f0b53a4ffada844440d269"}, + "generator": {"path": "tools/web/generated/M16-GAP-00258.py", "sha256": "5b4a7669e1232b981973a7317ff946fde216854b10eee36a7adee5b707f8d00f"}, + "desktopChecker": {"path": "tools/web/check-action-armature-separate-desktop.py", "sha256": "586bcf4a9b34e7e1ed87e78af45011b0c004aa9dcea063d03c6fafe968f8e689"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "2cd2468608362a4b480aeff74f8d1bd5650b3588e35b4413eef0724fc6c967e0"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711"}, + "nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00258/armature-separate-desktop-report.json", "sha256": "8226ce041d7bd04dc31d93e01537bd8a598886fdfc1feaa36e3d98910007e720"}, + "webReport": {"path": "tests/golden/M16-GAP-00258/armature-separate-local-exact-report.json", "sha256": "4cefec2f7519e0a3e23eed6ba3e199760ed46f6af0cbe36b48932270211ea3b4"}, + "status": {"path": "docs/status/M16-GAP-00258.md", "sha256": "d4d7b7a215c7acd495971e9dbe1c41bc5ee500d7f9f1f02c4ce0c6241a7edd58"}, + "taskContext": {"path": "tests/golden/M16-GAP-00258/task-context.json", "sha256": "6261d1f9cc72a6cf1129913f10efee4898da9c1bb7b8ca264d255d3835043572"} + }, + "nextTask": "M16-GAP-00259" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00258/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00258/task-context.json new file mode 100644 index 00000000..f68c0dec --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00258/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00258", + "parentTask": "M16-GAP-00257", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.separate data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.separate", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00258.py -- tests/files/web/generated/M16-GAP-00258-operator-armature.separate.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00258", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00258" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00258.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2072, + "contextRemainingTokens": 517 + }, + "source": { + "bytes": 7832, + "tokens": 1959 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00258.py", + "bytes": 1472, + "tokens": 368 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00258-operator-armature.separate.blend", + "bytes": 86391, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 766022, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00258/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00258.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00258/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1472, + "tokens": 368 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00259", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00258.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00257/manifest.json", + "parentStatus": "docs/status/M16-GAP-00257.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00258.md", + "tests/golden/M16-GAP-00257/manifest.json", + "docs/status/M16-GAP-00257.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00257", + "parentTask": "M16-GAP-00256", + "status": "done", + "nextTask": "M16-GAP-00258", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00257 Status", + "status: done", + "task: armature.select_similar operator LOCAL_EXACT slice", + "updated: 2026-08-23 America/New_York", + "scope:", + "- The minimal fixture contains an active selected length-1 bone, an unselected", + " length-1 peer, and an unselected length-2 bone. Blender desktop runs", + " `ARMATURE_OT_select_similar(type=LENGTH, threshold=0.1)` and preserves the" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1774, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 444 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00258.md", + "bytes": 1774, + "lines": 38, + "tokens": 444 + }, + { + "path": "tests/golden/M16-GAP-00257/manifest.json", + "bytes": 2687, + "lines": 29, + "tokens": 672 + }, + { + "path": "docs/status/M16-GAP-00257.md", + "bytes": 876, + "lines": 24, + "tokens": 219 + } + ], + "sourceTokens": 1959, + "evidenceFiles": 1, + "evidenceBytes": 1472, + "evidenceTokens": 368, + "totalTokens": 2327, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3351, + "serializedContextTokens": 752, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00259/armature-shortest-path-pick-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00259/armature-shortest-path-pick-desktop-report.json new file mode 100644 index 00000000..69fc8e98 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00259/armature-shortest-path-pick-desktop-report.json @@ -0,0 +1,169 @@ +{ + "after": { + "activeBone": "WebGapArmatureShortestPathRoot", + "armature": "WebGapArmatureShortestPathArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureShortestPathRoot", + "parent": null, + "selected": true, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": true, + "head": [ + 0.0, + 1.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureShortestPathChild", + "parent": "WebGapArmatureShortestPathRoot", + "selected": true, + "tail": [ + 0.0, + 2.0, + 0.0 + ] + }, + { + "connected": true, + "head": [ + 0.0, + 2.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureShortestPathGrandchild", + "parent": "WebGapArmatureShortestPathChild", + "selected": true, + "tail": [ + 0.0, + 3.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureShortestPathOther", + "parent": null, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureShortestPathObject" + }, + "before": { + "activeBone": "WebGapArmatureShortestPathRoot", + "armature": "WebGapArmatureShortestPathArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureShortestPathRoot", + "parent": null, + "selected": true, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": true, + "head": [ + 0.0, + 1.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureShortestPathChild", + "parent": "WebGapArmatureShortestPathRoot", + "selected": true, + "tail": [ + 0.0, + 2.0, + 0.0 + ] + }, + { + "connected": true, + "head": [ + 0.0, + 2.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureShortestPathGrandchild", + "parent": "WebGapArmatureShortestPathChild", + "selected": true, + "tail": [ + 0.0, + 3.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureShortestPathOther", + "parent": null, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureShortestPathObject" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00259-operator-armature.shortest_path_pick.blend", + "fixtureSha256": "3b213642cef60cdc96fed3e14846125b06ca80b53d89fdb3a08c3c60f7a454c6", + "mainMutation": "SHORTEST_PATH_ALREADY_SELECTED", + "operation": "ARMATURE_SHORTEST_PATH_PICK_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "pickedBone": "WebGapArmatureShortestPathRoot", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "selectedChain": [ + "WebGapArmatureShortestPathRoot", + "WebGapArmatureShortestPathChild", + "WebGapArmatureShortestPathGrandchild" + ], + "task": "M16-GAP-00259", + "unselectedBone": "WebGapArmatureShortestPathOther" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00259/armature-shortest-path-pick-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00259/armature-shortest-path-pick-local-exact-report.json new file mode 100644 index 00000000..5d12fda9 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00259/armature-shortest-path-pick-local-exact-report.json @@ -0,0 +1,41 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00259", + "operation": "ARMATURE_SHORTEST_PATH_PICK_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00259-operator-armature.shortest_path_pick.blend", + "sha256": "3b213642cef60cdc96fed3e14846125b06ca80b53d89fdb3a08c3c60f7a454c6" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00259/armature-shortest-path-pick-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "SHORTEST_PATH_ALREADY_SELECTED", + "pickedBone": "WebGapArmatureShortestPathRoot", + "selectedChain": [ + "WebGapArmatureShortestPathRoot", + "WebGapArmatureShortestPathChild", + "WebGapArmatureShortestPathGrandchild" + ], + "unselectedBone": "WebGapArmatureShortestPathOther" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureShortestPathArmature", + "rootBoneId": "bone:armature:WebGapArmatureShortestPathArmature:WebGapArmatureShortestPathRoot", + "childBoneId": "bone:armature:WebGapArmatureShortestPathArmature:WebGapArmatureShortestPathChild", + "grandchildBoneId": "bone:armature:WebGapArmatureShortestPathArmature:WebGapArmatureShortestPathGrandchild", + "otherBoneId": "bone:armature:WebGapArmatureShortestPathArmature:WebGapArmatureShortestPathOther", + "rootSelected": true, + "childSelected": true, + "grandchildSelected": true, + "otherSelected": false + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00260" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00259/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00259/manifest.json new file mode 100644 index 00000000..ec8af8f2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00259/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00259", + "parentTask": "M16-GAP-00258", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_SHORTEST_PATH_PICK_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00258/manifest.json", "sha256": "ee0d35662c2b66847381b4865a83b80df243bf47cc4e8f4f16232a93fc23c900"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00259-operator-armature.shortest_path_pick.blend", "sha256": "3b213642cef60cdc96fed3e14846125b06ca80b53d89fdb3a08c3c60f7a454c6"}, + "generator": {"path": "tools/web/generated/M16-GAP-00259.py", "sha256": "1fd82486ed5774b54fe3ddb79f7396a32754f2cc60cd139aa87c335a1222f8a9"}, + "desktopChecker": {"path": "tools/web/check-action-armature-shortest-path-pick-desktop.py", "sha256": "7ddd284bae79567206ca1fafe1f9ee0cd0d13ea2719af08a2bc27f0b848e8390"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "ddd8610e68d8cb410973f2d005e954d14af37ea930e8964dfc8d035d9146e052"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711"}, + "nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00259/armature-shortest-path-pick-desktop-report.json", "sha256": "3a42c0aaa54538109b1bec89e12976848464e18fdd27c30cc43b302a78557fd8"}, + "webReport": {"path": "tests/golden/M16-GAP-00259/armature-shortest-path-pick-local-exact-report.json", "sha256": "35348832a78139d10dc5c8217f64453c54430be47ee8968d59f76a76ccf2ceda"}, + "status": {"path": "docs/status/M16-GAP-00259.md", "sha256": "cdcff44be62d2d855e75d393c79883034d78784471191fefaf25d999e34587e7"}, + "taskContext": {"path": "tests/golden/M16-GAP-00259/task-context.json", "sha256": "efd58e511f54e130b2625a01f9cad988ba054648023d2616506dcfea9e4313fb"} + }, + "nextTask": "M16-GAP-00260" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00259/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00259/task-context.json new file mode 100644 index 00000000..c0504e69 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00259/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00259", + "parentTask": "M16-GAP-00258", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.shortest_path_pick data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.shortest_path_pick", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00259.py -- tests/files/web/generated/M16-GAP-00259-operator-armature.shortest_path_pick.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00259", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00259" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00259.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2020, + "contextRemainingTokens": 504 + }, + "source": { + "bytes": 7884, + "tokens": 1972 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00259.py", + "bytes": 1649, + "tokens": 413 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00259-operator-armature.shortest_path_pick.blend", + "bytes": 86467, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 770108, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00259/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00259.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00259/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1649, + "tokens": 413 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00260", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00259.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00258/manifest.json", + "parentStatus": "docs/status/M16-GAP-00258.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00259.md", + "tests/golden/M16-GAP-00258/manifest.json", + "docs/status/M16-GAP-00258.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00258", + "parentTask": "M16-GAP-00257", + "status": "done", + "nextTask": "M16-GAP-00259", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00258 Status", + "status: done", + "task: armature.separate operator LOCAL_EXACT slice", + "updated: 2026-08-23 America/New_York", + "scope:", + "- The minimal fixture contains one selected bone and one unselected bone in a", + " single armature. Blender desktop runs `ARMATURE_OT_separate`, producing an", + " original armature with the retained bone and a separated armature with the" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1824, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 456 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00259.md", + "bytes": 1824, + "lines": 38, + "tokens": 456 + }, + { + "path": "tests/golden/M16-GAP-00258/manifest.json", + "bytes": 2657, + "lines": 29, + "tokens": 665 + }, + { + "path": "docs/status/M16-GAP-00258.md", + "bytes": 908, + "lines": 25, + "tokens": 227 + } + ], + "sourceTokens": 1972, + "evidenceFiles": 1, + "evidenceBytes": 1649, + "evidenceTokens": 413, + "totalTokens": 2385, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3409, + "serializedContextTokens": 759, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00260/armature-split-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00260/armature-split-desktop-report.json new file mode 100644 index 00000000..e78cf624 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00260/armature-split-desktop-report.json @@ -0,0 +1,122 @@ +{ + "after": { + "activeBone": "WebGapArmatureSplitRoot", + "armature": "WebGapArmatureSplitArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureSplitRoot", + "parent": null, + "selected": true, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 0.0, + 1.0, + 0.0 + ], + "name": "WebGapArmatureSplitChild", + "parent": null, + "selected": false, + "tail": [ + 0.0, + 2.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureSplitOther", + "parent": null, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureSplitObject" + }, + "before": { + "activeBone": "WebGapArmatureSplitRoot", + "armature": "WebGapArmatureSplitArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureSplitRoot", + "parent": null, + "selected": true, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 0.0, + 1.0, + 0.0 + ], + "name": "WebGapArmatureSplitChild", + "parent": null, + "selected": false, + "tail": [ + 0.0, + 2.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureSplitOther", + "parent": null, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureSplitObject" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00260-operator-armature.split.blend", + "fixtureSha256": "e5e2497024c8f9738caa5badff72f38130c061a2b27cfc610780bf0a97992b9d", + "mainMutation": "PARENT_CONNECTION_ALREADY_SPLIT", + "operation": "ARMATURE_SPLIT_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00260" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00260/armature-split-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00260/armature-split-local-exact-report.json new file mode 100644 index 00000000..87804aff --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00260/armature-split-local-exact-report.json @@ -0,0 +1,31 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00260", + "operation": "ARMATURE_SPLIT_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00260-operator-armature.split.blend", + "sha256": "e5e2497024c8f9738caa5badff72f38130c061a2b27cfc610780bf0a97992b9d" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00260/armature-split-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "PARENT_CONNECTION_ALREADY_SPLIT" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureSplitArmature", + "rootBoneId": "bone:armature:WebGapArmatureSplitArmature:WebGapArmatureSplitRoot", + "childBoneId": "bone:armature:WebGapArmatureSplitArmature:WebGapArmatureSplitChild", + "otherBoneId": "bone:armature:WebGapArmatureSplitArmature:WebGapArmatureSplitOther", + "childConnected": false, + "childParentId": null + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00261" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00260/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00260/manifest.json new file mode 100644 index 00000000..8e0f91ef --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00260/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00260", + "parentTask": "M16-GAP-00259", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_SPLIT_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00259/manifest.json", "sha256": "b5b6cc20449c85386b3cc2811ffed49c4bd44f09fa12c27a4c0fb2318e84f623"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00260-operator-armature.split.blend", "sha256": "e5e2497024c8f9738caa5badff72f38130c061a2b27cfc610780bf0a97992b9d"}, + "generator": {"path": "tools/web/generated/M16-GAP-00260.py", "sha256": "2260f113bec783fde138407c7eba120e72e860d3961b9779d1d9151c5247d7dc"}, + "desktopChecker": {"path": "tools/web/check-action-armature-split-desktop.py", "sha256": "e1044a0a74a25f1e71b7d1fd9e027d9e4f92dee9876a72828bdb3954a2b05d43"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "4156a575adaed1e97388a3236060fe1de2ef5332b2303e159b7e4cad2485baa9"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711"}, + "nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00260/armature-split-desktop-report.json", "sha256": "3f7022cc9a1e6398b124763aa8f99c42e633dc036a7cae887e3fb252afd4352e"}, + "webReport": {"path": "tests/golden/M16-GAP-00260/armature-split-local-exact-report.json", "sha256": "38a055ec0e21dc6adf0818089dafce97ddcbdbed78e9a6be0080ad960b94361e"}, + "status": {"path": "docs/status/M16-GAP-00260.md", "sha256": "fdf1a22b08d328a15a7fb473034cc058530ee5fd28a227098db0577b02a5cc7b"}, + "taskContext": {"path": "tests/golden/M16-GAP-00260/task-context.json", "sha256": "0f70c73e731acd6e334ba69b6b16404e02f544e2ea4adbfe5e38f73af3a7c5ca"} + }, + "nextTask": "M16-GAP-00261" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00260/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00260/task-context.json new file mode 100644 index 00000000..03eaf776 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00260/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00260", + "parentTask": "M16-GAP-00259", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.split data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.split", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00260.py -- tests/files/web/generated/M16-GAP-00260-operator-armature.split.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00260", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00260" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00260.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2101, + "contextRemainingTokens": 524 + }, + "source": { + "bytes": 7803, + "tokens": 1952 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00260.py", + "bytes": 1250, + "tokens": 313 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00260-operator-armature.split.blend", + "bytes": 86342, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 773148, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00260/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00260.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00260/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1250, + "tokens": 313 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00261", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00260.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00259/manifest.json", + "parentStatus": "docs/status/M16-GAP-00259.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00260.md", + "tests/golden/M16-GAP-00259/manifest.json", + "docs/status/M16-GAP-00259.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00259", + "parentTask": "M16-GAP-00258", + "status": "done", + "nextTask": "M16-GAP-00260", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00259 Status", + "status: done", + "task: armature.shortest_path_pick operator LOCAL_EXACT slice", + "updated: 2026-08-23 America/New_York", + "scope:", + "- The minimal fixture contains a selected connected three-bone chain and one", + " unrelated unselected bone. Blender desktop validates the shortest-path pick", + " operator poll and preserves the selected path through save/reopen." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1759, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 440 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00260.md", + "bytes": 1759, + "lines": 38, + "tokens": 440 + }, + { + "path": "tests/golden/M16-GAP-00259/manifest.json", + "bytes": 2707, + "lines": 29, + "tokens": 677 + }, + { + "path": "docs/status/M16-GAP-00259.md", + "bytes": 842, + "lines": 23, + "tokens": 211 + } + ], + "sourceTokens": 1952, + "evidenceFiles": 1, + "evidenceBytes": 1250, + "evidenceTokens": 313, + "totalTokens": 2265, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3289, + "serializedContextTokens": 750, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00261/armature-subdivide-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00261/armature-subdivide-desktop-report.json new file mode 100644 index 00000000..504b4fd3 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00261/armature-subdivide-desktop-report.json @@ -0,0 +1,131 @@ +{ + "after": { + "activeBone": "WebGapArmatureSubdivideSource", + "armature": "WebGapArmatureSubdivideArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSubdivideSource", + "parent": null, + "selected": true, + "tail": [ + 0.0, + 0.5, + 0.0 + ] + }, + { + "connected": true, + "head": [ + 0.0, + 0.5, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSubdivideSource.001", + "parent": "WebGapArmatureSubdivideSource", + "selected": true, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSubdivideOther", + "parent": null, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureSubdivideObject" + }, + "before": { + "activeBone": "WebGapArmatureSubdivideSource", + "armature": "WebGapArmatureSubdivideArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSubdivideSource", + "parent": null, + "selected": true, + "tail": [ + 0.0, + 0.5, + 0.0 + ] + }, + { + "connected": true, + "head": [ + 0.0, + 0.5, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSubdivideSource.001", + "parent": "WebGapArmatureSubdivideSource", + "selected": true, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSubdivideOther", + "parent": null, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureSubdivideObject" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00261-operator-armature.subdivide.blend", + "fixtureSha256": "b29bcbddbc05f2ec1443699a9348abcbe52531f2fea5b03e51286ddb8305c2c4", + "mainMutation": "BONE_ALREADY_SUBDIVIDED_ONCE", + "numberCuts": 1, + "operation": "ARMATURE_SUBDIVIDE_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "otherBone": "WebGapArmatureSubdivideOther", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "sourceBone": "WebGapArmatureSubdivideSource", + "task": "M16-GAP-00261" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00261/armature-subdivide-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00261/armature-subdivide-local-exact-report.json new file mode 100644 index 00000000..77972484 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00261/armature-subdivide-local-exact-report.json @@ -0,0 +1,36 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00261", + "operation": "ARMATURE_SUBDIVIDE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00261-operator-armature.subdivide.blend", + "sha256": "b29bcbddbc05f2ec1443699a9348abcbe52531f2fea5b03e51286ddb8305c2c4" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00261/armature-subdivide-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "BONE_ALREADY_SUBDIVIDED_ONCE", + "numberCuts": 1, + "sourceBone": "WebGapArmatureSubdivideSource", + "otherBone": "WebGapArmatureSubdivideOther" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureSubdivideArmature", + "pieceIds": [ + "bone:armature:WebGapArmatureSubdivideArmature:WebGapArmatureSubdivideSource", + "bone:armature:WebGapArmatureSubdivideArmature:WebGapArmatureSubdivideSource.001" + ], + "otherBoneId": "bone:armature:WebGapArmatureSubdivideArmature:WebGapArmatureSubdivideOther", + "pieceCount": 2, + "otherSelected": false + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00262" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00261/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00261/manifest.json new file mode 100644 index 00000000..f026a098 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00261/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00261", + "parentTask": "M16-GAP-00260", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_SUBDIVIDE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00260/manifest.json", "sha256": "7ee18327f27adc8016792b51dddb1019b8b2ca20b643883d6712697121ff137b"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00261-operator-armature.subdivide.blend", "sha256": "b29bcbddbc05f2ec1443699a9348abcbe52531f2fea5b03e51286ddb8305c2c4"}, + "generator": {"path": "tools/web/generated/M16-GAP-00261.py", "sha256": "49aa287e8b24d914f2157f9fffe4c4c63cc7bc963b2610e8ea3ccaba0de7188d"}, + "desktopChecker": {"path": "tools/web/check-action-armature-subdivide-desktop.py", "sha256": "80ae7b6ada923052ee31deca4da972311a1b22e528e6149467e07f61d7472846"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "4931760967bc7a37b7660b33afa10091929544382a7ea97057c35b8ca3d1aa51"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711"}, + "nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00261/armature-subdivide-desktop-report.json", "sha256": "77e3d698de66ad1d1b5d595049f6e515e3fddbcdb83ef8a3bce25afa79c84c23"}, + "webReport": {"path": "tests/golden/M16-GAP-00261/armature-subdivide-local-exact-report.json", "sha256": "dca39b46351f9447faaa84c11cebee86a1dc87876052b55df3a5e2d1a0cd291a"}, + "status": {"path": "docs/status/M16-GAP-00261.md", "sha256": "6a8177d5e252433cff846d1febe3e98759861118e7c7dcbccfb6dacac3930ce2"}, + "taskContext": {"path": "tests/golden/M16-GAP-00261/task-context.json", "sha256": "3c715414fd5097f5296ab31ee86407dbb62ee02d1d804cc5d1eb9dee8a251a30"} + }, + "nextTask": "M16-GAP-00262" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00261/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00261/task-context.json new file mode 100644 index 00000000..03d95ba2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00261/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00261", + "parentTask": "M16-GAP-00260", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.subdivide data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.subdivide", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00261.py -- tests/files/web/generated/M16-GAP-00261-operator-armature.subdivide.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00261", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00261" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00261.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2273, + "contextRemainingTokens": 567 + }, + "source": { + "bytes": 7631, + "tokens": 1909 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00261.py", + "bytes": 1207, + "tokens": 302 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00261-operator-armature.subdivide.blend", + "bytes": 86372, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 776279, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00261/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00261.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00261/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1207, + "tokens": 302 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00262", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00261.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00260/manifest.json", + "parentStatus": "docs/status/M16-GAP-00260.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00261.md", + "tests/golden/M16-GAP-00260/manifest.json", + "docs/status/M16-GAP-00260.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00260", + "parentTask": "M16-GAP-00259", + "status": "done", + "nextTask": "M16-GAP-00261", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00260 Status", + "status: done", + "task: armature.split operator LOCAL_EXACT slice", + "updated: 2026-08-23 America/New_York", + "scope:", + "- The fixture contains a selected root, an unselected connected child, and an", + " unrelated bone. Blender desktop runs `ARMATURE_OT_split`, disconnecting the", + " selected/unselected boundary and preserving the result through save/reopen." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1779, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 445 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00261.md", + "bytes": 1779, + "lines": 38, + "tokens": 445 + }, + { + "path": "tests/golden/M16-GAP-00260/manifest.json", + "bytes": 2642, + "lines": 29, + "tokens": 661 + }, + { + "path": "docs/status/M16-GAP-00260.md", + "bytes": 715, + "lines": 21, + "tokens": 179 + } + ], + "sourceTokens": 1909, + "evidenceFiles": 1, + "evidenceBytes": 1207, + "evidenceTokens": 302, + "totalTokens": 2211, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3235, + "serializedContextTokens": 753, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00262/armature-switch-direction-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00262/armature-switch-direction-desktop-report.json new file mode 100644 index 00000000..b301a5c6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00262/armature-switch-direction-desktop-report.json @@ -0,0 +1,122 @@ +{ + "after": { + "activeBone": "WebGapArmatureSwitchDirectionRoot", + "armature": "WebGapArmatureSwitchDirectionArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 2.0, + 0.0 + ], + "name": "WebGapArmatureSwitchDirectionChild", + "parent": null, + "selected": true, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": true, + "head": [ + 0.0, + 1.0, + 0.0 + ], + "name": "WebGapArmatureSwitchDirectionRoot", + "parent": "WebGapArmatureSwitchDirectionChild", + "selected": true, + "tail": [ + 0.0, + 0.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureSwitchDirectionOther", + "parent": null, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureSwitchDirectionObject" + }, + "before": { + "activeBone": "WebGapArmatureSwitchDirectionRoot", + "armature": "WebGapArmatureSwitchDirectionArmature", + "bones": [ + { + "connected": false, + "head": [ + 0.0, + 2.0, + 0.0 + ], + "name": "WebGapArmatureSwitchDirectionChild", + "parent": null, + "selected": true, + "tail": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "connected": true, + "head": [ + 0.0, + 1.0, + 0.0 + ], + "name": "WebGapArmatureSwitchDirectionRoot", + "parent": "WebGapArmatureSwitchDirectionChild", + "selected": true, + "tail": [ + 0.0, + 0.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + 2.0, + 0.0, + 0.0 + ], + "name": "WebGapArmatureSwitchDirectionOther", + "parent": null, + "selected": false, + "tail": [ + 2.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureSwitchDirectionObject" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00262-operator-armature.switch_direction.blend", + "fixtureSha256": "385ebcd486385b6b68a7c7294e111af2b0f4d334247ff3e933f2c1433321cd17", + "mainMutation": "CHAIN_DIRECTION_ALREADY_SWITCHED", + "operation": "ARMATURE_SWITCH_DIRECTION_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00262" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00262/armature-switch-direction-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00262/armature-switch-direction-local-exact-report.json new file mode 100644 index 00000000..ef90ce95 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00262/armature-switch-direction-local-exact-report.json @@ -0,0 +1,50 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00262", + "operation": "ARMATURE_SWITCH_DIRECTION_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00262-operator-armature.switch_direction.blend", + "sha256": "385ebcd486385b6b68a7c7294e111af2b0f4d334247ff3e933f2c1433321cd17" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00262/armature-switch-direction-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "CHAIN_DIRECTION_ALREADY_SWITCHED" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureSwitchDirectionArmature", + "rootBoneId": "bone:armature:WebGapArmatureSwitchDirectionArmature:WebGapArmatureSwitchDirectionRoot", + "childBoneId": "bone:armature:WebGapArmatureSwitchDirectionArmature:WebGapArmatureSwitchDirectionChild", + "otherBoneId": "bone:armature:WebGapArmatureSwitchDirectionArmature:WebGapArmatureSwitchDirectionOther", + "rootParentId": "bone:armature:WebGapArmatureSwitchDirectionArmature:WebGapArmatureSwitchDirectionChild", + "rootHead": [ + 0, + 1, + 0 + ], + "rootTail": [ + 0, + 0, + 0 + ], + "childHead": [ + 0, + 2, + 0 + ], + "childTail": [ + 0, + 1, + 0 + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00263" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00262/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00262/manifest.json new file mode 100644 index 00000000..84a3f470 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00262/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00262", + "parentTask": "M16-GAP-00261", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_SWITCH_DIRECTION_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00261/manifest.json", "sha256": "be0a58e9c23d07236f33933b82f0e528d5f9a32e6be660dcccc4a0c56c6c5edc"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00262-operator-armature.switch_direction.blend", "sha256": "385ebcd486385b6b68a7c7294e111af2b0f4d334247ff3e933f2c1433321cd17"}, + "generator": {"path": "tools/web/generated/M16-GAP-00262.py", "sha256": "e4865caae23b80ebb893349e49fb8f8b313babb9d63e7e80c919e8b9ec9dfa90"}, + "desktopChecker": {"path": "tools/web/check-action-armature-switch-direction-desktop.py", "sha256": "ee29b85c9ff1f49ad3bd731f0996ba351a82a087b636899c1ef00d6db175b87e"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "681279e274ccc7edb1956fb0ca86e1e6e6217fdbc7c0633c82f78f5c3481f830"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711"}, + "nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00262/armature-switch-direction-desktop-report.json", "sha256": "b354e79b081ed5a42edafb0d2ff7c2811b3793b06997ffd493cb0412c10637ac"}, + "webReport": {"path": "tests/golden/M16-GAP-00262/armature-switch-direction-local-exact-report.json", "sha256": "a70785bfc13f65f94e22747c67eff0b4a07b0aa3afbaa999a5f39ab706769cda"}, + "status": {"path": "docs/status/M16-GAP-00262.md", "sha256": "011e5786081b22f6e706f3efdb9e7ce3d2422ab499be32ab7875d50986e26e3e"}, + "taskContext": {"path": "tests/golden/M16-GAP-00262/task-context.json", "sha256": "60148b63a69b0e197dcde3f81e322335806a7e9bd2f2a33c7dee44daac2da996"} + }, + "nextTask": "M16-GAP-00263" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00262/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00262/task-context.json new file mode 100644 index 00000000..fd79ede9 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00262/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00262", + "parentTask": "M16-GAP-00261", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.switch_direction data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.switch_direction", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00262.py -- tests/files/web/generated/M16-GAP-00262-operator-armature.switch_direction.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00262", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00262" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00262.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2219, + "contextRemainingTokens": 553 + }, + "source": { + "bytes": 7685, + "tokens": 1923 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00262.py", + "bytes": 1278, + "tokens": 320 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00262-operator-armature.switch_direction.blend", + "bytes": 86409, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 779789, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00262/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00262.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00262/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1278, + "tokens": 320 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00263", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00262.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00261/manifest.json", + "parentStatus": "docs/status/M16-GAP-00261.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00262.md", + "tests/golden/M16-GAP-00261/manifest.json", + "docs/status/M16-GAP-00261.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00261", + "parentTask": "M16-GAP-00260", + "status": "done", + "nextTask": "M16-GAP-00262", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00261 Status", + "status: done", + "task: armature.subdivide operator LOCAL_EXACT slice", + "updated: 2026-08-23 America/New_York", + "scope:", + "- The fixture contains one selected length-1 bone and one unrelated unselected", + " bone. Blender desktop runs `ARMATURE_OT_subdivide(number_cuts=1)`, producing", + " two half-length pieces and preserving the result through save/reopen." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1814, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 454 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00262.md", + "bytes": 1814, + "lines": 38, + "tokens": 454 + }, + { + "path": "tests/golden/M16-GAP-00261/manifest.json", + "bytes": 2662, + "lines": 29, + "tokens": 666 + }, + { + "path": "docs/status/M16-GAP-00261.md", + "bytes": 714, + "lines": 21, + "tokens": 179 + } + ], + "sourceTokens": 1923, + "evidenceFiles": 1, + "evidenceBytes": 1278, + "evidenceTokens": 320, + "totalTokens": 2243, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3267, + "serializedContextTokens": 758, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00263/armature-symmetrize-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00263/armature-symmetrize-desktop-report.json new file mode 100644 index 00000000..90992d34 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00263/armature-symmetrize-desktop-report.json @@ -0,0 +1,132 @@ +{ + "after": { + "activeBone": "WebGapArmatureSymmetrizeSource.R", + "armature": "WebGapArmatureSymmetrizeArmature", + "bones": [ + { + "connected": false, + "head": [ + 1.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSymmetrizeSource.L", + "parent": null, + "selected": false, + "tail": [ + 1.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + -3.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSymmetrizeOther", + "parent": null, + "selected": false, + "tail": [ + -3.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + -1.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSymmetrizeSource.R", + "parent": null, + "selected": true, + "tail": [ + -1.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureSymmetrizeObject" + }, + "before": { + "activeBone": "WebGapArmatureSymmetrizeSource.R", + "armature": "WebGapArmatureSymmetrizeArmature", + "bones": [ + { + "connected": false, + "head": [ + 1.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSymmetrizeSource.L", + "parent": null, + "selected": false, + "tail": [ + 1.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + -3.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSymmetrizeOther", + "parent": null, + "selected": false, + "tail": [ + -3.0, + 1.0, + 0.0 + ] + }, + { + "connected": false, + "head": [ + -1.0, + 0.0, + 0.0 + ], + "hidden": false, + "name": "WebGapArmatureSymmetrizeSource.R", + "parent": null, + "selected": true, + "tail": [ + -1.0, + 1.0, + 0.0 + ] + } + ], + "object": "WebGapArmatureSymmetrizeObject" + }, + "blenderVersion": "5.2.0 LTS", + "direction": "NEGATIVE_X", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00263-operator-armature.symmetrize.blend", + "fixtureSha256": "fa490213eee2cd604d52d435cf446cdaa37ef882602147893c9f9f999cd43f2b", + "mainMutation": "MIRRORED_BONE_ALREADY_PRESENT", + "mirroredBone": "WebGapArmatureSymmetrizeSource.R", + "operation": "ARMATURE_SYMMETRIZE_DESKTOP", + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "otherBone": "WebGapArmatureSymmetrizeOther", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "sourceBone": "WebGapArmatureSymmetrizeSource.L", + "task": "M16-GAP-00263" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00263/armature-symmetrize-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00263/armature-symmetrize-local-exact-report.json new file mode 100644 index 00000000..5158d502 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00263/armature-symmetrize-local-exact-report.json @@ -0,0 +1,56 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00263", + "operation": "ARMATURE_SYMMETRIZE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00263-operator-armature.symmetrize.blend", + "sha256": "fa490213eee2cd604d52d435cf446cdaa37ef882602147893c9f9f999cd43f2b" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00263/armature-symmetrize-desktop-report.json", + "saveReopen": "EXACT", + "poll": true, + "operatorStatus": "SKIPPED_ALREADY_APPLIED", + "mainMutation": "MIRRORED_BONE_ALREADY_PRESENT", + "direction": "NEGATIVE_X", + "sourceBone": "WebGapArmatureSymmetrizeSource.L", + "mirroredBone": "WebGapArmatureSymmetrizeSource.R", + "otherBone": "WebGapArmatureSymmetrizeOther" + }, + "wasm": { + "status": "EXACT", + "armatureId": "armature:WebGapArmatureSymmetrizeArmature", + "sourceBoneId": "bone:armature:WebGapArmatureSymmetrizeArmature:WebGapArmatureSymmetrizeSource.L", + "mirroredBoneId": "bone:armature:WebGapArmatureSymmetrizeArmature:WebGapArmatureSymmetrizeSource.R", + "otherBoneId": "bone:armature:WebGapArmatureSymmetrizeArmature:WebGapArmatureSymmetrizeOther", + "sourceSelected": false, + "mirroredSelected": true, + "otherSelected": false, + "sourceHead": [ + 1, + 0, + 0 + ], + "sourceTail": [ + 1, + 1, + 0 + ], + "mirroredHead": [ + -1, + 0, + 0 + ], + "mirroredTail": [ + -1, + 1, + 0 + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00264" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00263/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00263/manifest.json new file mode 100644 index 00000000..38c88740 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00263/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00263", + "parentTask": "M16-GAP-00262", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ARMATURE_SYMMETRIZE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00262/manifest.json", "sha256": "c03367b4246808543d0ecce65f005b8be03d7cb72610e7c1e07ff0273a2cfffd"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00263-operator-armature.symmetrize.blend", "sha256": "fa490213eee2cd604d52d435cf446cdaa37ef882602147893c9f9f999cd43f2b"}, + "generator": {"path": "tools/web/generated/M16-GAP-00263.py", "sha256": "d2c2558f53a666ae73e4074fcf6c9db8d39dd7fb3de65537e66c17a70533ff70"}, + "desktopChecker": {"path": "tools/web/check-action-armature-symmetrize-desktop.py", "sha256": "1b84a01bdacb1b66952822b609144acaa3638aee86b4f6999df37575478a148b"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "93e678975345b52f3395ab78356fce1219cd8c8f7db1d0804d872c8055107359"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711"}, + "nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00263/armature-symmetrize-desktop-report.json", "sha256": "2ca4f83737867b62fd8c4b42bc6092a59178baa4a18f8bc192764c859d1e5c88"}, + "webReport": {"path": "tests/golden/M16-GAP-00263/armature-symmetrize-local-exact-report.json", "sha256": "1dbef4a312f55198108fcdcab216e0739f08c237a19084e28b21a63f53f9dab7"}, + "status": {"path": "docs/status/M16-GAP-00263.md", "sha256": "cd501a7510dd967be05d259465ae7bc9a2144122770b95cf951627e10341559d"}, + "taskContext": {"path": "tests/golden/M16-GAP-00263/task-context.json", "sha256": "61576b4aa53a9fe9c2eb5ff564a47ac218343ba32fcccd00322d4d9a1420d9c7"} + }, + "nextTask": "M16-GAP-00264" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00263/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00263/task-context.json new file mode 100644 index 00000000..94122c8d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00263/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00263", + "parentTask": "M16-GAP-00262", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:armature.symmetrize data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:armature.symmetrize", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00263.py -- tests/files/web/generated/M16-GAP-00263-operator-armature.symmetrize.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00263", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00263" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00263.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2198, + "contextRemainingTokens": 548 + }, + "source": { + "bytes": 7706, + "tokens": 1928 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00263.py", + "bytes": 1437, + "tokens": 360 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00263-operator-armature.symmetrize.blend", + "bytes": 86394, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 784952, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00263/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00263.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00263/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1437, + "tokens": 360 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00264", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00263.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00262/manifest.json", + "parentStatus": "docs/status/M16-GAP-00262.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00263.md", + "tests/golden/M16-GAP-00262/manifest.json", + "docs/status/M16-GAP-00262.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00262", + "parentTask": "M16-GAP-00261", + "status": "done", + "nextTask": "M16-GAP-00263", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00262 Status", + "status: done", + "task: armature.switch_direction operator LOCAL_EXACT slice", + "updated: 2026-08-23 America/New_York", + "scope:", + "- The fixture contains a selected connected two-bone chain and an unrelated", + " unselected bone. Blender desktop runs `ARMATURE_OT_switch_direction`,", + " reversing the chain while preserving the result through save/reopen." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1784, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 446 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00263.md", + "bytes": 1784, + "lines": 38, + "tokens": 446 + }, + { + "path": "tests/golden/M16-GAP-00262/manifest.json", + "bytes": 2697, + "lines": 29, + "tokens": 675 + }, + { + "path": "docs/status/M16-GAP-00262.md", + "bytes": 730, + "lines": 23, + "tokens": 183 + } + ], + "sourceTokens": 1928, + "evidenceFiles": 1, + "evidenceBytes": 1437, + "evidenceTokens": 360, + "totalTokens": 2288, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3312, + "serializedContextTokens": 753, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00264/asset-download-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00264/asset-download-desktop-report.json new file mode 100644 index 00000000..987ebc8f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00264/asset-download-desktop-report.json @@ -0,0 +1,32 @@ +{ + "after": { + "filepath": "//assets/WebGapAssetDownload.png", + "name": "WebGapAssetDownloadImage", + "packed": false, + "size": [ + 1, + 1 + ], + "source": "FILE" + }, + "before": { + "filepath": "//assets/WebGapAssetDownload.png", + "name": "WebGapAssetDownloadImage", + "packed": false, + "size": [ + 1, + 1 + ], + "source": "FILE" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00264-operator-asset.asset_download.blend", + "fixtureSha256": "79332080394950857a3b99087140aba51df6ad2fd731e314af67c473a48602b4", + "mainMutation": "NONE", + "operation": "ASSET_ASSET_DOWNLOAD_DESKTOP", + "operatorStatus": "CANCELLED", + "poll": true, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00264" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00264/asset-download-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00264/asset-download-local-exact-report.json new file mode 100644 index 00000000..f1d80dcc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00264/asset-download-local-exact-report.json @@ -0,0 +1,32 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00264", + "operation": "ASSET_ASSET_DOWNLOAD_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00264-operator-asset.asset_download.blend", + "sha256": "79332080394950857a3b99087140aba51df6ad2fd731e314af67c473a48602b4" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00264/asset-download-desktop-report.json", + "poll": true, + "operatorStatus": "CANCELLED", + "mainMutation": "NONE" + }, + "wasm": { + "status": "EXACT", + "imageId": "image:WebGapAssetDownloadImage", + "sourcePath": "//assets/WebGapAssetDownload.png", + "assetStatus": "EXTERNAL", + "packed": false, + "dimensions": [ + 1, + 1 + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00265" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00264/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00264/manifest.json new file mode 100644 index 00000000..bc2af51e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00264/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00264", + "parentTask": "M16-GAP-00263", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ASSET_ASSET_DOWNLOAD_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00263/manifest.json", "sha256": "174eb122a99cd96c634a78e9689dcc1e0317f17bd52727e782a20599ba6b730b"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00264-operator-asset.asset_download.blend", "sha256": "79332080394950857a3b99087140aba51df6ad2fd731e314af67c473a48602b4"}, + "generator": {"path": "tools/web/generated/M16-GAP-00264.py", "sha256": "e7fd141d87414ee12669a83dbfe54ef47b557a9c517ba8ec164264882c80e8bd"}, + "desktopChecker": {"path": "tools/web/check-action-asset-download-desktop.py", "sha256": "c8af3ac7b0fd53e955a9c5d925e0ea004f219ef9c5b6629fdb57e6fecdba55a6"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "9429c88eb60c403ecd9e7f69ce024eb03667a0bf9243f0b31c0cb3fadc9c97ad"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711"}, + "nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00264/asset-download-desktop-report.json", "sha256": "399aed90c3b236f1c169fad88dbc92f5409d26ca35bdeb5768bb9272a50a7157"}, + "webReport": {"path": "tests/golden/M16-GAP-00264/asset-download-local-exact-report.json", "sha256": "ad88b3a8b18007bf61d4351185ee2cab8c09e9e3a74958d521f94ff1a221795c"}, + "status": {"path": "docs/status/M16-GAP-00264.md", "sha256": "57cdac22f8e6e6bb5e233b4568e9d06885869341fac96ec5bd8e717f040edcac"}, + "taskContext": {"path": "tests/golden/M16-GAP-00264/task-context.json", "sha256": "d22c02c55e889b252ab0e11580693c6fc44225d4d650591942bee294557f4134"} + }, + "nextTask": "M16-GAP-00265" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00264/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00264/task-context.json new file mode 100644 index 00000000..020f715e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00264/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00264", + "parentTask": "M16-GAP-00263", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:asset.asset_download data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:asset.asset_download", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00264.py -- tests/files/web/generated/M16-GAP-00264-operator-asset.asset_download.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00264", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00264" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00264.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2123, + "contextRemainingTokens": 529 + }, + "source": { + "bytes": 7781, + "tokens": 1947 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00264.py", + "bytes": 738, + "tokens": 185 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00264-operator-asset.asset_download.blend", + "bytes": 85874, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 788450, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00264/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00264.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00264/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 738, + "tokens": 185 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00265", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00264.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00263/manifest.json", + "parentStatus": "docs/status/M16-GAP-00263.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00264.md", + "tests/golden/M16-GAP-00263/manifest.json", + "docs/status/M16-GAP-00263.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00263", + "parentTask": "M16-GAP-00262", + "status": "done", + "nextTask": "M16-GAP-00264", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00263 Status", + "status: done", + "task: armature.symmetrize operator LOCAL_EXACT slice", + "updated: 2026-08-23 America/New_York", + "scope:", + "- The fixture contains one selected positive-X `WebGapArmatureSymmetrizeSource.L`", + " bone and one unrelated unselected bone. Blender desktop runs", + " `ARMATURE_OT_symmetrize(direction=\"NEGATIVE_X\")`, producing the mirrored" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1789, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 448 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00264.md", + "bytes": 1789, + "lines": 38, + "tokens": 448 + }, + { + "path": "tests/golden/M16-GAP-00263/manifest.json", + "bytes": 2667, + "lines": 29, + "tokens": 667 + }, + { + "path": "docs/status/M16-GAP-00263.md", + "bytes": 830, + "lines": 25, + "tokens": 208 + } + ], + "sourceTokens": 1947, + "evidenceFiles": 1, + "evidenceBytes": 738, + "evidenceTokens": 185, + "totalTokens": 2132, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3156, + "serializedContextTokens": 753, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00265/assets-download-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00265/assets-download-desktop-report.json new file mode 100644 index 00000000..94a1f39a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00265/assets-download-desktop-report.json @@ -0,0 +1,32 @@ +{ + "after": { + "filepath": "//assets/WebGapAssetsDownload.png", + "name": "WebGapAssetsDownloadImage", + "packed": false, + "size": [ + 1, + 1 + ], + "source": "FILE" + }, + "before": { + "filepath": "//assets/WebGapAssetsDownload.png", + "name": "WebGapAssetsDownloadImage", + "packed": false, + "size": [ + 1, + 1 + ], + "source": "FILE" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00265-operator-asset.assets_download.blend", + "fixtureSha256": "d2c09f34febbef1db3de830c37c33c1f7de8d6fc7ea1ef2aaf9eed7de243bb27", + "mainMutation": "NONE", + "operation": "ASSET_ASSETS_DOWNLOAD_DESKTOP", + "operatorStatus": "CANCELLED", + "poll": false, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00265" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00265/assets-download-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00265/assets-download-local-exact-report.json new file mode 100644 index 00000000..a9a1ab99 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00265/assets-download-local-exact-report.json @@ -0,0 +1,32 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00265", + "operation": "ASSET_ASSETS_DOWNLOAD_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00265-operator-asset.assets_download.blend", + "sha256": "d2c09f34febbef1db3de830c37c33c1f7de8d6fc7ea1ef2aaf9eed7de243bb27" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00265/assets-download-desktop-report.json", + "poll": false, + "operatorStatus": "CANCELLED", + "mainMutation": "NONE" + }, + "wasm": { + "status": "EXACT", + "imageId": "image:WebGapAssetsDownloadImage", + "sourcePath": "//assets/WebGapAssetsDownload.png", + "assetStatus": "EXTERNAL", + "packed": false, + "dimensions": [ + 1, + 1 + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00266" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00265/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00265/manifest.json new file mode 100644 index 00000000..d6817896 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00265/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00265", + "parentTask": "M16-GAP-00264", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ASSET_ASSETS_DOWNLOAD_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00264/manifest.json", "sha256": "227db04b1571e0ae7eb9c698b1b2d440118da166a525f3114d212825e9ebd67b"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00265-operator-asset.assets_download.blend", "sha256": "d2c09f34febbef1db3de830c37c33c1f7de8d6fc7ea1ef2aaf9eed7de243bb27"}, + "generator": {"path": "tools/web/generated/M16-GAP-00265.py", "sha256": "1a86706f3c011d4a0f0b443bb6db3500704b898f0b42af5795ed2ee94b6c4286"}, + "desktopChecker": {"path": "tools/web/check-action-assets-download-desktop.py", "sha256": "512737cde0efa6cc6a669939c243e7b609cc7c37fc223c4923cc6a9adc035318"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "b4c76eefccf111de9b184220aacacd892221089eca5c857683efb8d2fee1a050"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711"}, + "nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00265/assets-download-desktop-report.json", "sha256": "1ce5009ec4582730437cbefbb5722699bc6d2fe0824eede52bf8de98b85ccb24"}, + "webReport": {"path": "tests/golden/M16-GAP-00265/assets-download-local-exact-report.json", "sha256": "35d1005b88bb477b0bc686297d4e178fbdf1c3feeb7fb29bb443a019d7a34b4d"}, + "status": {"path": "docs/status/M16-GAP-00265.md", "sha256": "377f5180ae25d3912237ca1b3283f0a5f9d5292fe28952515918ec22467f8d9f"}, + "taskContext": {"path": "tests/golden/M16-GAP-00265/task-context.json", "sha256": "d9b040e30c2443cfb11dc196dbb042b1aa6a72a3a27b599ccdc591a98e340395"} + }, + "nextTask": "M16-GAP-00266" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00265/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00265/task-context.json new file mode 100644 index 00000000..49fd49c4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00265/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00265", + "parentTask": "M16-GAP-00264", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:asset.assets_download data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:asset.assets_download", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00265.py -- tests/files/web/generated/M16-GAP-00265-operator-asset.assets_download.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00265", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00265" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00265.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1972, + "contextRemainingTokens": 491 + }, + "source": { + "bytes": 7932, + "tokens": 1985 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00265.py", + "bytes": 740, + "tokens": 185 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00265-operator-asset.assets_download.blend", + "bytes": 85879, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 791968, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00265/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00265.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00265/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 740, + "tokens": 185 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00266", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00265.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00264/manifest.json", + "parentStatus": "docs/status/M16-GAP-00264.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00265.md", + "tests/golden/M16-GAP-00264/manifest.json", + "docs/status/M16-GAP-00264.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00264", + "parentTask": "M16-GAP-00263", + "status": "done", + "nextTask": "M16-GAP-00265", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00264 Status", + "status: done", + "task: asset.asset_download operator LOCAL_EXACT slice", + "updated: 2026-08-23 America/New_York", + "scope:", + "- The fixture contains one fake-user external Image with source path", + " `//assets/WebGapAssetDownload.png`. Blender desktop enables online access for", + " the isolated check, runs `ASSET_OT_asset_download` for a missing remote" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1794, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 449 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00265.md", + "bytes": 1794, + "lines": 38, + "tokens": 449 + }, + { + "path": "tests/golden/M16-GAP-00264/manifest.json", + "bytes": 2654, + "lines": 29, + "tokens": 664 + }, + { + "path": "docs/status/M16-GAP-00264.md", + "bytes": 989, + "lines": 26, + "tokens": 248 + } + ], + "sourceTokens": 1985, + "evidenceFiles": 1, + "evidenceBytes": 740, + "evidenceTokens": 185, + "totalTokens": 2170, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3194, + "serializedContextTokens": 754, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00266/assign-action-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00266/assign-action-desktop-report.json new file mode 100644 index 00000000..71dac84f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00266/assign-action-desktop-report.json @@ -0,0 +1,38 @@ +{ + "after": { + "channels": [ + { + "frames": [ + 1.0, + 5.0 + ], + "index": 0, + "path": "location" + } + ], + "name": "WebGapAssignAction" + }, + "before": { + "channels": [ + { + "frames": [ + 1.0, + 5.0 + ], + "index": 0, + "path": "location" + } + ], + "name": "WebGapAssignAction" + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00266-operator-asset.assign_action.blend", + "fixtureSha256": "6cefa4e22e0e8d5b2482cbe62c36e10cc58f51fa94fe843e6b953c438479fa98", + "mainMutation": "NONE", + "operation": "ASSET_ASSIGN_ACTION_DESKTOP", + "operatorStatus": "CANCELLED", + "poll": false, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00266" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00266/assign-action-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00266/assign-action-local-exact-report.json new file mode 100644 index 00000000..35c86eab --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00266/assign-action-local-exact-report.json @@ -0,0 +1,32 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00266", + "operation": "ASSET_ASSIGN_ACTION_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00266-operator-asset.assign_action.blend", + "sha256": "6cefa4e22e0e8d5b2482cbe62c36e10cc58f51fa94fe843e6b953c438479fa98" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00266/assign-action-desktop-report.json", + "poll": false, + "operatorStatus": "CANCELLED", + "mainMutation": "NONE" + }, + "wasm": { + "status": "EXACT", + "actionId": "action:WebGapAssignAction:object:WebGapAssignActionObject", + "targetId": "object:WebGapAssignActionObject", + "channelPaths": [ + "location[0]" + ], + "keyframesPerChannel": [ + 2 + ] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00267" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00266/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00266/manifest.json new file mode 100644 index 00000000..e5700c42 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00266/manifest.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00266", + "parentTask": "M16-GAP-00265", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ASSET_ASSIGN_ACTION_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00265/manifest.json", "sha256": "9d3a041a635b7d0413797d7fb5bb60914a28ab43415517081b3d9f2ebf644b2d"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00266-operator-asset.assign_action.blend", "sha256": "6cefa4e22e0e8d5b2482cbe62c36e10cc58f51fa94fe843e6b953c438479fa98"}, + "generator": {"path": "tools/web/generated/M16-GAP-00266.py", "sha256": "e299bf65f70bc4eb08204f42894c961d0a7c2c69bfab5e4a26ed8924f52a6271"}, + "desktopChecker": {"path": "tools/web/check-action-assign-action-desktop.py", "sha256": "b4ffdc3bd9120c2823fdcf29278695e49c21b3ee07345daa15712ef6d57ca6ec"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "ed8ec2e2f69cbba7a92ab91e6d4a0dad5b53a61fe280719e2a44c78e0a2ae1e3"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711"}, + "nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00266/assign-action-desktop-report.json", "sha256": "aacd8ad7641a390a2f2b4990d4b324bb9478ee0a45a42c9bf4e52720038dfab4"}, + "webReport": {"path": "tests/golden/M16-GAP-00266/assign-action-local-exact-report.json", "sha256": "e2376fd259124a1d90db2ded522f1231df3d12d0f5eb3d82c229e95fc680f1dc"}, + "status": {"path": "docs/status/M16-GAP-00266.md", "sha256": "5173d19e5d61195f3a6b4688d607274a099e47b5c2bcbc39d0ed1d6ad5caaccb"}, + "taskContext": {"path": "tests/golden/M16-GAP-00266/task-context.json", "sha256": "167bfdff69ccc7568d7c20d4c61be173604255e1a9cd698e55df690444763dfb"} + }, + "nextTask": "M16-GAP-00267" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00266/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00266/task-context.json new file mode 100644 index 00000000..d7bb866f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00266/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00266", + "parentTask": "M16-GAP-00265", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:asset.assign_action data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:asset.assign_action", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00266.py -- tests/files/web/generated/M16-GAP-00266-operator-asset.assign_action.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00266", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00266" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00266.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2018, + "contextRemainingTokens": 504 + }, + "source": { + "bytes": 7886, + "tokens": 1972 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00266.py", + "bytes": 1014, + "tokens": 254 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00266-operator-asset.assign_action.blend", + "bytes": 86324, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 795556, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00266/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00266.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00266/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1014, + "tokens": 254 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00267", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00266.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00265/manifest.json", + "parentStatus": "docs/status/M16-GAP-00265.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00266.md", + "tests/golden/M16-GAP-00265/manifest.json", + "docs/status/M16-GAP-00265.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00265", + "parentTask": "M16-GAP-00264", + "status": "done", + "nextTask": "M16-GAP-00266", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00265 Status", + "status: done", + "task: asset.assets_download operator LOCAL_EXACT slice", + "updated: 2026-08-23 America/New_York", + "scope:", + "- The fixture contains one fake-user external Image with source path", + " `//assets/WebGapAssetsDownload.png`. Blender desktop enables online access,", + " confirms `ASSET_OT_assets_download.poll()` is false, and records the real" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1784, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 446 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00266.md", + "bytes": 1784, + "lines": 38, + "tokens": 446 + }, + { + "path": "tests/golden/M16-GAP-00265/manifest.json", + "bytes": 2659, + "lines": 29, + "tokens": 665 + }, + { + "path": "docs/status/M16-GAP-00265.md", + "bytes": 948, + "lines": 26, + "tokens": 237 + } + ], + "sourceTokens": 1972, + "evidenceFiles": 1, + "evidenceBytes": 1014, + "evidenceTokens": 254, + "totalTokens": 2226, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3250, + "serializedContextTokens": 753, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00267/browse-containing-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00267/browse-containing-desktop-report.json new file mode 100644 index 00000000..ed96240f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00267/browse-containing-desktop-report.json @@ -0,0 +1,22 @@ +{ + "after": { + "filepath": "//WebGapBrowseContaining.blend", + "name": "WebGapBrowseContaining.blend", + "packed": false + }, + "before": { + "filepath": "//WebGapBrowseContaining.blend", + "name": "WebGapBrowseContaining.blend", + "packed": false + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00267-operator-asset.browse_containing_blend_file.blend", + "fixtureSha256": "29e5e42f3ebe458a4ded1d1a7a0a1cd0fecb50867b193ee3ec98485df36e7d61", + "mainMutation": "NONE", + "operation": "ASSET_BROWSE_CONTAINING_BLEND_FILE_DESKTOP", + "operatorStatus": "CANCELLED", + "poll": false, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00267" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00267/browse-containing-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00267/browse-containing-local-exact-report.json new file mode 100644 index 00000000..5f37da63 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00267/browse-containing-local-exact-report.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00267", + "operation": "ASSET_BROWSE_CONTAINING_BLEND_FILE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00267-operator-asset.browse_containing_blend_file.blend", + "sha256": "29e5e42f3ebe458a4ded1d1a7a0a1cd0fecb50867b193ee3ec98485df36e7d61" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00267/browse-containing-desktop-report.json", + "poll": false, + "operatorStatus": "CANCELLED", + "mainMutation": "NONE" + }, + "wasm": { + "status": "EXACT", + "libraryId": "library:WebGapBrowseContaining.blend", + "sourcePath": "//WebGapBrowseContaining.blend", + "libraryStatus": "EXTERNAL_REQUIRED", + "dependencyIds": [] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00268" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00267/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00267/manifest.json new file mode 100644 index 00000000..38076e40 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00267/manifest.json @@ -0,0 +1,29 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00267", + "parentTask": "M16-GAP-00266", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ASSET_BROWSE_CONTAINING_BLEND_FILE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00266/manifest.json", "sha256": "aacbc7e4bfad12e03e8ba46dddef7d0c72d0511e8df0e158ef0005d4bb20dcf0"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00267-operator-asset.browse_containing_blend_file.blend", "sha256": "29e5e42f3ebe458a4ded1d1a7a0a1cd0fecb50867b193ee3ec98485df36e7d61"}, + "librarySource": {"path": "tests/files/web/generated/WebGapBrowseContaining.blend", "sha256": "661f398dd346bc18484308b154845ca5d7d82af9e9e367767c2c1ef20f3fd369"}, + "generator": {"path": "tools/web/generated/M16-GAP-00267.py", "sha256": "bc950bc190d2e9c607a6d41cfc448977fe478b98723640287f63f4f42fcd2052"}, + "desktopChecker": {"path": "tools/web/check-action-browse-containing-blend-file-desktop.py", "sha256": "05b68021e96e9b480298ddb2bd5c814ecf919a622d57ceabac7534eec31aad90"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "d6528398cf1ca5e8047df546715829963bca689c367c1374e10d8ee137cce232"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711"}, + "nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00267/browse-containing-desktop-report.json", "sha256": "cad41d8dfb33770fdbd87f44d2eb04b070cdb120665a188a379c0436fc25f324"}, + "webReport": {"path": "tests/golden/M16-GAP-00267/browse-containing-local-exact-report.json", "sha256": "2c522d5b6c545f7bf8d7238d881a94c2d6463abcb41bf24989b3218962a51ac1"}, + "status": {"path": "docs/status/M16-GAP-00267.md", "sha256": "2784e307c2f4747a99dfecea527d413b5aea42c640cb2e5f0e5d3636619a8874"}, + "taskContext": {"path": "tests/golden/M16-GAP-00267/task-context.json", "sha256": "47039236bfbb8d1e2d130708d25ead95b54027b1b061d91ae73f686ed75660b0"} + }, + "nextTask": "M16-GAP-00268" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00267/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00267/task-context.json new file mode 100644 index 00000000..97609999 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00267/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00267", + "parentTask": "M16-GAP-00266", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:asset.browse_containing_blend_file data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:asset.browse_containing_blend_file", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00267.py -- tests/files/web/generated/M16-GAP-00267-operator-asset.browse_containing_blend_file.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00267", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00267" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00267.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1945, + "contextRemainingTokens": 485 + }, + "source": { + "bytes": 7959, + "tokens": 1991 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00267.py", + "bytes": 1602, + "tokens": 401 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00267-operator-asset.browse_containing_blend_file.blend", + "bytes": 85938, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 799287, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00267/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00267.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00267/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1602, + "tokens": 401 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00268", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00267.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00266/manifest.json", + "parentStatus": "docs/status/M16-GAP-00266.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00267.md", + "tests/golden/M16-GAP-00266/manifest.json", + "docs/status/M16-GAP-00266.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00266", + "parentTask": "M16-GAP-00265", + "status": "done", + "nextTask": "M16-GAP-00267", + "artifactCount": 15 + }, + "statusSummary": [ + "# M16-GAP-00266 Status", + "status: done", + "task: asset.assign_action operator LOCAL_EXACT slice", + "updated: 2026-08-23 America/New_York", + "scope:", + "- The fixture contains one fake-user `WebGapAssignAction` with a two-key", + " `location[0]` channel assigned to `WebGapAssignActionObject`. Blender", + " desktop observes the no-Asset-Shelf context as `poll=false`, records the" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1859, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 465 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00267.md", + "bytes": 1859, + "lines": 38, + "tokens": 465 + }, + { + "path": "tests/golden/M16-GAP-00266/manifest.json", + "bytes": 2649, + "lines": 29, + "tokens": 663 + }, + { + "path": "docs/status/M16-GAP-00266.md", + "bytes": 956, + "lines": 25, + "tokens": 239 + } + ], + "sourceTokens": 1991, + "evidenceFiles": 1, + "evidenceBytes": 1602, + "evidenceTokens": 401, + "totalTokens": 2392, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3416, + "serializedContextTokens": 765, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00268/bundle-install-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00268/bundle-install-desktop-report.json new file mode 100644 index 00000000..cbddf466 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00268/bundle-install-desktop-report.json @@ -0,0 +1,22 @@ +{ + "after": { + "filepath": "//WebGapBundleInstall.blend", + "name": "WebGapBundleInstall.blend", + "packed": false + }, + "before": { + "filepath": "//WebGapBundleInstall.blend", + "name": "WebGapBundleInstall.blend", + "packed": false + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00268-operator-asset.bundle_install.blend", + "fixtureSha256": "64dd97ac23f70c83261635fc2337555b62818b92ffedee60cb13f3335851a994", + "mainMutation": "NONE", + "operation": "ASSET_BUNDLE_INSTALL_DESKTOP", + "operatorStatus": "CANCELLED", + "poll": false, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00268" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00268/bundle-install-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00268/bundle-install-local-exact-report.json new file mode 100644 index 00000000..a46190dc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00268/bundle-install-local-exact-report.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00268", + "operation": "ASSET_BUNDLE_INSTALL_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00268-operator-asset.bundle_install.blend", + "sha256": "64dd97ac23f70c83261635fc2337555b62818b92ffedee60cb13f3335851a994" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00268/bundle-install-desktop-report.json", + "poll": false, + "operatorStatus": "CANCELLED", + "mainMutation": "NONE" + }, + "wasm": { + "status": "EXACT", + "libraryId": "library:WebGapBundleInstall.blend", + "sourcePath": "//WebGapBundleInstall.blend", + "libraryStatus": "EXTERNAL_REQUIRED", + "dependencyIds": [] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00269" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00268/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00268/manifest.json new file mode 100644 index 00000000..6690de44 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00268/manifest.json @@ -0,0 +1,29 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00268", + "parentTask": "M16-GAP-00267", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ASSET_BUNDLE_INSTALL_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00267/manifest.json", "sha256": "918b5e13ec9e92186ec74f2c49aef4602dee002a92a7c1303ce0c86ef5d5370d"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00268-operator-asset.bundle_install.blend", "sha256": "64dd97ac23f70c83261635fc2337555b62818b92ffedee60cb13f3335851a994"}, + "librarySource": {"path": "tests/files/web/generated/WebGapBundleInstall.blend", "sha256": "89537577e6e5939da73f37fb22d40ec336a30e7ad491043b4054b0b14e4418fe"}, + "generator": {"path": "tools/web/generated/M16-GAP-00268.py", "sha256": "4b9ab994369328b54f630882410066f5ef04980108a692d686430b8331454b6c"}, + "desktopChecker": {"path": "tools/web/check-action-bundle-install-desktop.py", "sha256": "a34f4c2095c0ea2d47837f5d631d8dea6a19a70a620982333ddc9abd0a227099"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "b0abffb689387f6ee753292f6592c81b307e71e392760b1277529d9d176fd7ad"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711"}, + "nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00268/bundle-install-desktop-report.json", "sha256": "088fbc1390ae171dc219c201f09519f8c0fc460bc61138d13d189e3e6ec6d1c0"}, + "webReport": {"path": "tests/golden/M16-GAP-00268/bundle-install-local-exact-report.json", "sha256": "be82a7849a167cebed509f7ac451f3c1c1756757afe34e940453df686b507d97"}, + "status": {"path": "docs/status/M16-GAP-00268.md", "sha256": "7556cb0df348aca6d83dadc3d155e5ab9d9403e1e470f765acebcaa851a7d058"}, + "taskContext": {"path": "tests/golden/M16-GAP-00268/task-context.json", "sha256": "e44a443c29beab5923dbbab2a7e8e8e830654873f8d093345b24c3cd758620ad"} + }, + "nextTask": "M16-GAP-00269" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00268/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00268/task-context.json new file mode 100644 index 00000000..9570ebd3 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00268/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00268", + "parentTask": "M16-GAP-00267", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:asset.bundle_install data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:asset.bundle_install", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00268.py -- tests/files/web/generated/M16-GAP-00268-operator-asset.bundle_install.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00268", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00268" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00268.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1701, + "contextRemainingTokens": 423 + }, + "source": { + "bytes": 8203, + "tokens": 2053 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00268.py", + "bytes": 1587, + "tokens": 397 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00268-operator-asset.bundle_install.blend", + "bytes": 85884, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 802967, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00268/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00268.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00268/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1587, + "tokens": 397 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00269", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00268.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00267/manifest.json", + "parentStatus": "docs/status/M16-GAP-00267.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00268.md", + "tests/golden/M16-GAP-00267/manifest.json", + "docs/status/M16-GAP-00267.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00267", + "parentTask": "M16-GAP-00266", + "status": "done", + "nextTask": "M16-GAP-00268", + "artifactCount": 16 + }, + "statusSummary": [ + "# M16-GAP-00267 Status", + "status: done", + "task: asset.browse_containing_blend_file operator LOCAL_EXACT slice", + "updated: 2026-08-23 America/New_York", + "scope:", + "- The fixture links one object from external `WebGapBrowseContaining.blend`.", + " Blender desktop observes the no-selected-asset boundary as `poll=false`,", + " records `CANCELLED` for `ASSET_OT_browse_containing_blend_file`, and confirms" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1789, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 448 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00268.md", + "bytes": 1789, + "lines": 38, + "tokens": 448 + }, + { + "path": "tests/golden/M16-GAP-00267/manifest.json", + "bytes": 2869, + "lines": 30, + "tokens": 718 + }, + { + "path": "docs/status/M16-GAP-00267.md", + "bytes": 1050, + "lines": 27, + "tokens": 263 + } + ], + "sourceTokens": 2053, + "evidenceFiles": 1, + "evidenceBytes": 1587, + "evidenceTokens": 397, + "totalTokens": 2450, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3474, + "serializedContextTokens": 754, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00269/catalog-delete-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00269/catalog-delete-desktop-report.json new file mode 100644 index 00000000..d9be6b93 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00269/catalog-delete-desktop-report.json @@ -0,0 +1,22 @@ +{ + "after": { + "filepath": "//WebGapCatalogDelete.blend", + "name": "WebGapCatalogDelete.blend", + "packed": false + }, + "before": { + "filepath": "//WebGapCatalogDelete.blend", + "name": "WebGapCatalogDelete.blend", + "packed": false + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00269-operator-asset.catalog_delete.blend", + "fixtureSha256": "7fa8ebaf85c2bd474dcaa9e4ce94ad81665b501841d15c48e371bb8f033702a2", + "mainMutation": "NONE", + "operation": "ASSET_CATALOG_DELETE_DESKTOP", + "operatorStatus": "CANCELLED", + "poll": false, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00269" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00269/catalog-delete-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00269/catalog-delete-local-exact-report.json new file mode 100644 index 00000000..f1553d3f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00269/catalog-delete-local-exact-report.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00269", + "operation": "ASSET_CATALOG_DELETE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00269-operator-asset.catalog_delete.blend", + "sha256": "7fa8ebaf85c2bd474dcaa9e4ce94ad81665b501841d15c48e371bb8f033702a2" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00269/catalog-delete-desktop-report.json", + "poll": false, + "operatorStatus": "CANCELLED", + "mainMutation": "NONE" + }, + "wasm": { + "status": "EXACT", + "libraryId": "library:WebGapCatalogDelete.blend", + "sourcePath": "//WebGapCatalogDelete.blend", + "libraryStatus": "EXTERNAL_REQUIRED", + "dependencyIds": [] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00270" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00269/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00269/manifest.json new file mode 100644 index 00000000..ef5e703e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00269/manifest.json @@ -0,0 +1,29 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00269", + "parentTask": "M16-GAP-00268", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ASSET_CATALOG_DELETE_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00268/manifest.json", "sha256": "8926cead64df23f2bf6386ac728fb8836bcef5c5bd645faecad45a3eb7b06b03"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00269-operator-asset.catalog_delete.blend", "sha256": "7fa8ebaf85c2bd474dcaa9e4ce94ad81665b501841d15c48e371bb8f033702a2"}, + "librarySource": {"path": "tests/files/web/generated/WebGapCatalogDelete.blend", "sha256": "137a558e0ac46a6b9c466b1023a871adb6666ec0de0f9756e041ce8858ed374d"}, + "generator": {"path": "tools/web/generated/M16-GAP-00269.py", "sha256": "2be254c3d36647b1d6dfb06af054ab96a0def10666f911bedc3a4225206ff749"}, + "desktopChecker": {"path": "tools/web/check-action-catalog-delete-desktop.py", "sha256": "d0347a61c6a0388062e0f9cdaa6c9a25fc3662c667b6641705543ac816e0a355"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "789d04ba83d2119aec7f5d2531acbb8c5aef946e520df9e5e9aa7b415bb2e677"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711"}, + "nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00269/catalog-delete-desktop-report.json", "sha256": "68070e257397148441c11e1ecfc9a2202f9955cee17a3f8ee878d4e0f1310790"}, + "webReport": {"path": "tests/golden/M16-GAP-00269/catalog-delete-local-exact-report.json", "sha256": "1cd38bfab4ba20d3238bbb11fc9838b5479f96c345c6f98e479eea25fe229bd1"}, + "status": {"path": "docs/status/M16-GAP-00269.md", "sha256": "6c65ae2c6884a89c9051b13d5336cb9e8c454ccb8e9ed8d80e84b09ef84db0c7"}, + "taskContext": {"path": "tests/golden/M16-GAP-00269/task-context.json", "sha256": "e1bb2480ec7894a2ce1b8c5ae2b221f6e55cf19c7c4e72aef04d89d5da147878"} + }, + "nextTask": "M16-GAP-00270" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00269/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00269/task-context.json new file mode 100644 index 00000000..70ed2b7e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00269/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00269", + "parentTask": "M16-GAP-00268", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:asset.catalog_delete data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:asset.catalog_delete", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00269.py -- tests/files/web/generated/M16-GAP-00269-operator-asset.catalog_delete.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00269", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00269" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00269.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1792, + "contextRemainingTokens": 446 + }, + "source": { + "bytes": 8112, + "tokens": 2030 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00269.py", + "bytes": 1536, + "tokens": 384 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00269-operator-asset.catalog_delete.blend", + "bytes": 85903, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 806647, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00269/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00269.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00269/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1536, + "tokens": 384 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00270", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00269.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00268/manifest.json", + "parentStatus": "docs/status/M16-GAP-00268.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00269.md", + "tests/golden/M16-GAP-00268/manifest.json", + "docs/status/M16-GAP-00268.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00268", + "parentTask": "M16-GAP-00267", + "status": "done", + "nextTask": "M16-GAP-00269", + "artifactCount": 16 + }, + "statusSummary": [ + "# M16-GAP-00268 Status", + "status: done", + "task: asset.bundle_install operator LOCAL_EXACT slice", + "updated: 2026-08-23 America/New_York", + "scope:", + "- The fixture links one object from external `WebGapBundleInstall.blend`.", + " Blender desktop observes the no-bundle context as `poll=false`, records", + " `CANCELLED` for `ASSET_OT_bundle_install`, and confirms no Main mutation." + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1789, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 448 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00269.md", + "bytes": 1789, + "lines": 38, + "tokens": 448 + }, + { + "path": "tests/golden/M16-GAP-00268/manifest.json", + "bytes": 2818, + "lines": 30, + "tokens": 705 + }, + { + "path": "docs/status/M16-GAP-00268.md", + "bytes": 1010, + "lines": 27, + "tokens": 253 + } + ], + "sourceTokens": 2030, + "evidenceFiles": 1, + "evidenceBytes": 1536, + "evidenceTokens": 384, + "totalTokens": 2414, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3438, + "serializedContextTokens": 754, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00270/catalog-new-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00270/catalog-new-desktop-report.json new file mode 100644 index 00000000..0d3c769c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00270/catalog-new-desktop-report.json @@ -0,0 +1,22 @@ +{ + "after": { + "filepath": "//WebGapCatalogNew.blend", + "name": "WebGapCatalogNew.blend", + "packed": false + }, + "before": { + "filepath": "//WebGapCatalogNew.blend", + "name": "WebGapCatalogNew.blend", + "packed": false + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00270-operator-asset.catalog_new.blend", + "fixtureSha256": "8c874d8ec51cb7cbfa787780ca7c8e636ce9a98b4998ef81ddbd9fdd34658662", + "mainMutation": "NONE", + "operation": "ASSET_CATALOG_NEW_DESKTOP", + "operatorStatus": "CANCELLED", + "poll": false, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00270" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00270/catalog-new-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00270/catalog-new-local-exact-report.json new file mode 100644 index 00000000..b48802d6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00270/catalog-new-local-exact-report.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00270", + "operation": "ASSET_CATALOG_NEW_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00270-operator-asset.catalog_new.blend", + "sha256": "8c874d8ec51cb7cbfa787780ca7c8e636ce9a98b4998ef81ddbd9fdd34658662" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00270/catalog-new-desktop-report.json", + "poll": false, + "operatorStatus": "CANCELLED", + "mainMutation": "NONE" + }, + "wasm": { + "status": "EXACT", + "libraryId": "library:WebGapCatalogNew.blend", + "sourcePath": "//WebGapCatalogNew.blend", + "libraryStatus": "EXTERNAL_REQUIRED", + "dependencyIds": [] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00271" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00270/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00270/manifest.json new file mode 100644 index 00000000..b5272dde --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00270/manifest.json @@ -0,0 +1,29 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00270", + "parentTask": "M16-GAP-00269", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ASSET_CATALOG_NEW_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00269/manifest.json", "sha256": "d197196e37e5f26f13db0f03c099287fe444ebe64688bb60d6ce38e1803559fb"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00270-operator-asset.catalog_new.blend", "sha256": "8c874d8ec51cb7cbfa787780ca7c8e636ce9a98b4998ef81ddbd9fdd34658662"}, + "librarySource": {"path": "tests/files/web/generated/WebGapCatalogNew.blend", "sha256": "a12a6480d7254d290d0617e16f72c93ef4cbd043ebc004f94559436988a66ef2"}, + "generator": {"path": "tools/web/generated/M16-GAP-00270.py", "sha256": "ccaa0c91694f931c0fb6313695b8bb5eae795e8003d24ff67f0eb21328184727"}, + "desktopChecker": {"path": "tools/web/check-action-catalog-new-desktop.py", "sha256": "1a5331f11bf741efb897f4c719ea4ff2457e15823c10ca805085d63e059984c1"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "4794b5e0c54f1496b963a912f9c44306277754ee702d6468d6e42c5084f04bac"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711"}, + "nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00270/catalog-new-desktop-report.json", "sha256": "a8037c3b339c215db7bc4143ce0999074a366019a8868516baec00086378e2d9"}, + "webReport": {"path": "tests/golden/M16-GAP-00270/catalog-new-local-exact-report.json", "sha256": "99f10be076dd573ee658256e2b2e08c40af1997b344268a84cdc0fa8fe939e81"}, + "status": {"path": "docs/status/M16-GAP-00270.md", "sha256": "293a56ae16f499b98784f05b12d1ef0ec4e9a844763ac1515b1c11d7f26fdcd9"}, + "taskContext": {"path": "tests/golden/M16-GAP-00270/task-context.json", "sha256": "ee463f5baf378f77c68c9f30d5f21caebcd027138222b5bf4007a5e14696ff56"} + }, + "nextTask": "M16-GAP-00271" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00270/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00270/task-context.json new file mode 100644 index 00000000..9eebeb0f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00270/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00270", + "parentTask": "M16-GAP-00269", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:asset.catalog_new data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:asset.catalog_new", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00270.py -- tests/files/web/generated/M16-GAP-00270-operator-asset.catalog_new.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00270", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00270" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00270.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1795, + "contextRemainingTokens": 447 + }, + "source": { + "bytes": 8109, + "tokens": 2029 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00270.py", + "bytes": 1425, + "tokens": 357 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00270-operator-asset.catalog_new.blend", + "bytes": 85912, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 810309, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00270/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00270.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00270/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1425, + "tokens": 357 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00271", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00270.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00269/manifest.json", + "parentStatus": "docs/status/M16-GAP-00269.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00270.md", + "tests/golden/M16-GAP-00269/manifest.json", + "docs/status/M16-GAP-00269.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00269", + "parentTask": "M16-GAP-00268", + "status": "done", + "nextTask": "M16-GAP-00270", + "artifactCount": 16 + }, + "statusSummary": [ + "# M16-GAP-00269 Status", + "status: done", + "task: asset.catalog_delete operator LOCAL_EXACT slice", + "updated: 2026-08-23 America/New_York", + "scope:", + "- The fixture links one object from external `WebGapCatalogDelete.blend`.", + " Blender desktop observes the no-catalog-selection boundary as `poll=false`,", + " records `CANCELLED` for `ASSET_OT_catalog_delete`, and confirms no Main" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1774, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 444 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00270.md", + "bytes": 1774, + "lines": 38, + "tokens": 444 + }, + { + "path": "tests/golden/M16-GAP-00269/manifest.json", + "bytes": 2818, + "lines": 30, + "tokens": 705 + }, + { + "path": "docs/status/M16-GAP-00269.md", + "bytes": 1022, + "lines": 27, + "tokens": 256 + } + ], + "sourceTokens": 2029, + "evidenceFiles": 1, + "evidenceBytes": 1425, + "evidenceTokens": 357, + "totalTokens": 2386, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3410, + "serializedContextTokens": 752, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00271/catalog-redo-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00271/catalog-redo-desktop-report.json new file mode 100644 index 00000000..4117e60a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00271/catalog-redo-desktop-report.json @@ -0,0 +1,22 @@ +{ + "after": { + "filepath": "//WebGapCatalogRedo.blend", + "name": "WebGapCatalogRedo.blend", + "packed": false + }, + "before": { + "filepath": "//WebGapCatalogRedo.blend", + "name": "WebGapCatalogRedo.blend", + "packed": false + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00271-operator-asset.catalog_redo.blend", + "fixtureSha256": "2e3481a9f155900774bbcc3e5d07ca65bedc2029e3281e86857fd943e81396cd", + "mainMutation": "NONE", + "operation": "ASSET_CATALOG_REDO_DESKTOP", + "operatorStatus": "CANCELLED", + "poll": false, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00271" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00271/catalog-redo-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00271/catalog-redo-local-exact-report.json new file mode 100644 index 00000000..9ec23a88 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00271/catalog-redo-local-exact-report.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00271", + "operation": "ASSET_CATALOG_REDO_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00271-operator-asset.catalog_redo.blend", + "sha256": "2e3481a9f155900774bbcc3e5d07ca65bedc2029e3281e86857fd943e81396cd" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00271/catalog-redo-desktop-report.json", + "poll": false, + "operatorStatus": "CANCELLED", + "mainMutation": "NONE" + }, + "wasm": { + "status": "EXACT", + "libraryId": "library:WebGapCatalogRedo.blend", + "sourcePath": "//WebGapCatalogRedo.blend", + "libraryStatus": "EXTERNAL_REQUIRED", + "dependencyIds": [] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00272" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00271/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00271/manifest.json new file mode 100644 index 00000000..cc8697ea --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00271/manifest.json @@ -0,0 +1,29 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00271", + "parentTask": "M16-GAP-00270", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ASSET_CATALOG_REDO_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00270/manifest.json", "sha256": "c24c8cebb471d9a1d37e180a39d5091da36356cd4ea6065a1bf5110ac5ee86f0"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00271-operator-asset.catalog_redo.blend", "sha256": "2e3481a9f155900774bbcc3e5d07ca65bedc2029e3281e86857fd943e81396cd"}, + "librarySource": {"path": "tests/files/web/generated/WebGapCatalogRedo.blend", "sha256": "53367b4765383ae0cf232e02eaca1fbf07407946a600c91cf8d1f5303e21d0c7"}, + "generator": {"path": "tools/web/generated/M16-GAP-00271.py", "sha256": "8012efb7f85f89625f13686743798051fa5febaae361b179117c992ca4bc972c"}, + "desktopChecker": {"path": "tools/web/check-action-catalog-redo-desktop.py", "sha256": "89ff11f1ec2f76c1d34c49549e2499db2df084fff63fcfb156d65e3c1f46d8f1"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "f7fb2c2ab7b13535db130e1ed2ac3adc027ab77621f6bad129c4e0ff2ddd863b"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711"}, + "nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00271/catalog-redo-desktop-report.json", "sha256": "31dedccda115a8219307ad7f677602fc907e6e012297b4e6a6a68f19fb1415d5"}, + "webReport": {"path": "tests/golden/M16-GAP-00271/catalog-redo-local-exact-report.json", "sha256": "25e5b338ad95d2e09e0cc651fd14f5c66a21be78f3d0d0039f8b161386e2fdb9"}, + "status": {"path": "docs/status/M16-GAP-00271.md", "sha256": "d660b0ec53156000900bfbc2794d583a321788acba6298de35f228cf8cf6111b"}, + "taskContext": {"path": "tests/golden/M16-GAP-00271/task-context.json", "sha256": "1ef1edcfb45f3ce201efec1aa2efb39f95aeaec909eccb02e13cc7f98335a11b"} + }, + "nextTask": "M16-GAP-00272" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00271/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00271/task-context.json new file mode 100644 index 00000000..bc4f2439 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00271/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00271", + "parentTask": "M16-GAP-00270", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:asset.catalog_redo data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:asset.catalog_redo", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00271.py -- tests/files/web/generated/M16-GAP-00271-operator-asset.catalog_redo.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00271", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00271" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00271.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1817, + "contextRemainingTokens": 453 + }, + "source": { + "bytes": 8087, + "tokens": 2023 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00271.py", + "bytes": 1043, + "tokens": 261 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00271-operator-asset.catalog_redo.blend", + "bytes": 85877, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 813863, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00271/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00271.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00271/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1043, + "tokens": 261 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00272", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00271.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00270/manifest.json", + "parentStatus": "docs/status/M16-GAP-00270.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00271.md", + "tests/golden/M16-GAP-00270/manifest.json", + "docs/status/M16-GAP-00270.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00270", + "parentTask": "M16-GAP-00269", + "status": "done", + "nextTask": "M16-GAP-00271", + "artifactCount": 16 + }, + "statusSummary": [ + "# M16-GAP-00270 Status", + "status: done", + "task: asset.catalog_new operator LOCAL_EXACT slice", + "updated: 2026-08-23 America/New_York", + "scope:", + "- The fixture links one object from external `WebGapCatalogNew.blend`.", + " Blender desktop observes the no-catalog-selection boundary as `poll=false`,", + " records `CANCELLED` for `ASSET_OT_catalog_new`, and confirms no Main" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1779, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 445 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00271.md", + "bytes": 1779, + "lines": 38, + "tokens": 445 + }, + { + "path": "tests/golden/M16-GAP-00270/manifest.json", + "bytes": 2800, + "lines": 30, + "tokens": 700 + }, + { + "path": "docs/status/M16-GAP-00270.md", + "bytes": 1013, + "lines": 27, + "tokens": 254 + } + ], + "sourceTokens": 2023, + "evidenceFiles": 1, + "evidenceBytes": 1043, + "evidenceTokens": 261, + "totalTokens": 2284, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3308, + "serializedContextTokens": 753, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00272/catalog-undo-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00272/catalog-undo-desktop-report.json new file mode 100644 index 00000000..309ebc4b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00272/catalog-undo-desktop-report.json @@ -0,0 +1,22 @@ +{ + "after": { + "filepath": "//WebGapCatalogUndo.blend", + "name": "WebGapCatalogUndo.blend", + "packed": false + }, + "before": { + "filepath": "//WebGapCatalogUndo.blend", + "name": "WebGapCatalogUndo.blend", + "packed": false + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00272-operator-asset.catalog_undo.blend", + "fixtureSha256": "fa003b726f82cf42dfbd5ae027ad6b6c8ff03bdcc337154d835cae241a1265cd", + "mainMutation": "NONE", + "operation": "ASSET_CATALOG_UNDO_DESKTOP", + "operatorStatus": "CANCELLED", + "poll": false, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00272" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00272/catalog-undo-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00272/catalog-undo-local-exact-report.json new file mode 100644 index 00000000..a97f3be4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00272/catalog-undo-local-exact-report.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00272", + "operation": "ASSET_CATALOG_UNDO_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00272-operator-asset.catalog_undo.blend", + "sha256": "fa003b726f82cf42dfbd5ae027ad6b6c8ff03bdcc337154d835cae241a1265cd" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00272/catalog-undo-desktop-report.json", + "poll": false, + "operatorStatus": "CANCELLED", + "mainMutation": "NONE" + }, + "wasm": { + "status": "EXACT", + "libraryId": "library:WebGapCatalogUndo.blend", + "sourcePath": "//WebGapCatalogUndo.blend", + "libraryStatus": "EXTERNAL_REQUIRED", + "dependencyIds": [] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00273" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00272/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00272/manifest.json new file mode 100644 index 00000000..12908732 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00272/manifest.json @@ -0,0 +1,29 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00272", + "parentTask": "M16-GAP-00271", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ASSET_CATALOG_UNDO_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00271/manifest.json", "sha256": "d46fdf0ef0d6c1702682abc8ac076bbd0d46298d380995f6d62003029b489513"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00272-operator-asset.catalog_undo.blend", "sha256": "fa003b726f82cf42dfbd5ae027ad6b6c8ff03bdcc337154d835cae241a1265cd"}, + "librarySource": {"path": "tests/files/web/generated/WebGapCatalogUndo.blend", "sha256": "2ee954737c6f35b5f9af2eb5f350ea3e34a9ff6f491b8a4184ccb18875c6f3b8"}, + "generator": {"path": "tools/web/generated/M16-GAP-00272.py", "sha256": "e7aac853fe0c589dc19375ab30259635e5af15c59aeb12a75eb8f7c6ac745052"}, + "desktopChecker": {"path": "tools/web/check-action-catalog-undo-desktop.py", "sha256": "4a4866dc48a2fc8318549ef5a143697b2ba51643b8be3865975596882569c773"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "59c3520ab3de2f8275c730dd9b9680ed9b64aced4dcccc800b051490b6715a93"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711"}, + "nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00272/catalog-undo-desktop-report.json", "sha256": "21d131f2b2c5ffe8772bcb4606dbf16388467572cd0542c6dd16c66e1730b712"}, + "webReport": {"path": "tests/golden/M16-GAP-00272/catalog-undo-local-exact-report.json", "sha256": "4cb20b624a5f96d417c33d928b760befaacb8c59610f197ff1a666d1fc78a5f0"}, + "status": {"path": "docs/status/M16-GAP-00272.md", "sha256": "522fe8b32558b75f87488fafe11ebc17994bb9742f24663c5ea5a85d64e6598c"}, + "taskContext": {"path": "tests/golden/M16-GAP-00272/task-context.json", "sha256": "ce9557e77c46435c6153a6173fb59b5d50686d8738bbab96490d631965219867"} + }, + "nextTask": "M16-GAP-00273" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00272/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00272/task-context.json new file mode 100644 index 00000000..f2199ac7 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00272/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00272", + "parentTask": "M16-GAP-00271", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:asset.catalog_undo data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:asset.catalog_undo", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00272.py -- tests/files/web/generated/M16-GAP-00272-operator-asset.catalog_undo.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00272", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00272" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00272.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1808, + "contextRemainingTokens": 451 + }, + "source": { + "bytes": 8096, + "tokens": 2025 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00272.py", + "bytes": 995, + "tokens": 249 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00272-operator-asset.catalog_undo.blend", + "bytes": 85892, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 817415, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00272/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00272.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00272/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 995, + "tokens": 249 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00273", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00272.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00271/manifest.json", + "parentStatus": "docs/status/M16-GAP-00271.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00272.md", + "tests/golden/M16-GAP-00271/manifest.json", + "docs/status/M16-GAP-00271.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00271", + "parentTask": "M16-GAP-00270", + "status": "done", + "nextTask": "M16-GAP-00272", + "artifactCount": 16 + }, + "statusSummary": [ + "# M16-GAP-00271 Status", + "status: done", + "task: asset.catalog_redo operator LOCAL_EXACT slice", + "updated: 2026-08-23 America/New_York", + "scope:", + "- The fixture links one object from external `WebGapCatalogRedo.blend`.", + " Blender desktop observes the no-catalog-selection boundary as `poll=false`,", + " records `CANCELLED` for `ASSET_OT_catalog_redo`, and confirms no Main" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1779, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 445 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00272.md", + "bytes": 1779, + "lines": 38, + "tokens": 445 + }, + { + "path": "tests/golden/M16-GAP-00271/manifest.json", + "bytes": 2806, + "lines": 30, + "tokens": 702 + }, + { + "path": "docs/status/M16-GAP-00271.md", + "bytes": 1016, + "lines": 27, + "tokens": 254 + } + ], + "sourceTokens": 2025, + "evidenceFiles": 1, + "evidenceBytes": 995, + "evidenceTokens": 249, + "totalTokens": 2274, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3298, + "serializedContextTokens": 752, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00273/catalog-undo-push-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00273/catalog-undo-push-desktop-report.json new file mode 100644 index 00000000..a183d472 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00273/catalog-undo-push-desktop-report.json @@ -0,0 +1,22 @@ +{ + "after": { + "filepath": "//WebGapCatalogUndoPush.blend", + "name": "WebGapCatalogUndoPush.blend", + "packed": false + }, + "before": { + "filepath": "//WebGapCatalogUndoPush.blend", + "name": "WebGapCatalogUndoPush.blend", + "packed": false + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00273-operator-asset.catalog_undo_push.blend", + "fixtureSha256": "f835a3088b975a283a99a69738dbf0ecc8a71b463b3c124da15ea6e54599256b", + "mainMutation": "NONE", + "operation": "ASSET_CATALOG_UNDO_PUSH_DESKTOP", + "operatorStatus": "CANCELLED", + "poll": false, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00273" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00273/catalog-undo-push-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00273/catalog-undo-push-local-exact-report.json new file mode 100644 index 00000000..8dbcb9ef --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00273/catalog-undo-push-local-exact-report.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00273", + "operation": "ASSET_CATALOG_UNDO_PUSH_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00273-operator-asset.catalog_undo_push.blend", + "sha256": "f835a3088b975a283a99a69738dbf0ecc8a71b463b3c124da15ea6e54599256b" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00273/catalog-undo-push-desktop-report.json", + "poll": false, + "operatorStatus": "CANCELLED", + "mainMutation": "NONE" + }, + "wasm": { + "status": "EXACT", + "libraryId": "library:WebGapCatalogUndoPush.blend", + "sourcePath": "//WebGapCatalogUndoPush.blend", + "libraryStatus": "EXTERNAL_REQUIRED", + "dependencyIds": [] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00274" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00273/manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00273/manifest.json new file mode 100644 index 00000000..8a54097c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00273/manifest.json @@ -0,0 +1,29 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00273", + "parentTask": "M16-GAP-00272", + "enablingTask": false, + "parityStateChange": true, + "runtime": "BLENDER_5_2_LOCAL_EXACT", + "operation": "ASSET_CATALOG_UNDO_PUSH_LOCAL_EXACT", + "status": "done", + "artifacts": { + "parentManifest": {"path": "tests/golden/M16-GAP-00272/manifest.json", "sha256": "eb3675367849f1a784e8028a43efac24fcede55cedd38d55b121cd88aa1facae"}, + "fixture": {"path": "tests/files/web/generated/M16-GAP-00273-operator-asset.catalog_undo_push.blend", "sha256": "f835a3088b975a283a99a69738dbf0ecc8a71b463b3c124da15ea6e54599256b"}, + "librarySource": {"path": "tests/files/web/generated/WebGapCatalogUndoPush.blend", "sha256": "448fdabd5281e25a949ceefdb0b76804f2a47d2d9e5b784f8f998f0be289fd4c"}, + "generator": {"path": "tools/web/generated/M16-GAP-00273.py", "sha256": "120262e67b215a5d778100b820d74b8d3f216b20e36402a4f389099751a728c2"}, + "desktopChecker": {"path": "tools/web/check-action-catalog-undo-push-desktop.py", "sha256": "7e218eff97f8d4a2bd475d9957a94a784f4a76da3b35938389eb59eae7592795"}, + "webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "abe69afee4f6a670d7c71abeba44118d7a01020ebac4665793451eafd4a7c0d5"}, + "reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711"}, + "nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"}, + "wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"}, + "wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"}, + "desktopReport": {"path": "tests/golden/M16-GAP-00273/catalog-undo-push-desktop-report.json", "sha256": "03421f7e7ffe6eb3f0ec93c6f09cd505f806e228145cf4ce6d55e3b841b8b34b"}, + "webReport": {"path": "tests/golden/M16-GAP-00273/catalog-undo-push-local-exact-report.json", "sha256": "86e5cabacde4ee419d71011b902e0fc561e7da94028879bca4ca0315ad1d4f72"}, + "status": {"path": "docs/status/M16-GAP-00273.md", "sha256": "5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8"}, + "taskContext": {"path": "tests/golden/M16-GAP-00273/task-context.json", "sha256": "8679b3271d07fe1d4eaf2c6dcc6ef833d9c2853dda4643339071c60dc8bfe2f7"} + }, + "nextTask": "M16-GAP-00274" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00273/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00273/task-context.json new file mode 100644 index 00000000..de235af5 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00273/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00273", + "parentTask": "M16-GAP-00272", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:asset.catalog_undo_push data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:asset.catalog_undo_push", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00273.py -- tests/files/web/generated/M16-GAP-00273-operator-asset.catalog_undo_push.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00273", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00273" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00273.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1783, + "contextRemainingTokens": 445 + }, + "source": { + "bytes": 8121, + "tokens": 2031 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00273.py", + "bytes": 1007, + "tokens": 252 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00273-operator-asset.catalog_undo_push.blend", + "bytes": 85934, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 820984, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00273/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00273.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00273/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1007, + "tokens": 252 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00274", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00273.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00272/manifest.json", + "parentStatus": "docs/status/M16-GAP-00272.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00273.md", + "tests/golden/M16-GAP-00272/manifest.json", + "docs/status/M16-GAP-00272.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00272", + "parentTask": "M16-GAP-00271", + "status": "done", + "nextTask": "M16-GAP-00273", + "artifactCount": 16 + }, + "statusSummary": [ + "# M16-GAP-00272 Status", + "status: done", + "task: asset.catalog_undo operator LOCAL_EXACT slice", + "updated: 2026-08-23 America/New_York", + "scope:", + "- The fixture links one object from external `WebGapCatalogUndo.blend`.", + " Blender desktop observes the no-catalog-selection boundary as `poll=false`,", + " records `CANCELLED` for `ASSET_OT_catalog_undo`, and confirms no Main" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1804, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 451 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00273.md", + "bytes": 1804, + "lines": 38, + "tokens": 451 + }, + { + "path": "tests/golden/M16-GAP-00272/manifest.json", + "bytes": 2806, + "lines": 30, + "tokens": 702 + }, + { + "path": "docs/status/M16-GAP-00272.md", + "bytes": 1016, + "lines": 27, + "tokens": 254 + } + ], + "sourceTokens": 2031, + "evidenceFiles": 1, + "evidenceBytes": 1007, + "evidenceTokens": 252, + "totalTokens": 2283, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3307, + "serializedContextTokens": 757, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00274/catalogs-save-desktop-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00274/catalogs-save-desktop-report.json new file mode 100644 index 00000000..fd0aaee8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00274/catalogs-save-desktop-report.json @@ -0,0 +1,22 @@ +{ + "after": { + "filepath": "//WebGapCatalogsSave.blend", + "name": "WebGapCatalogsSave.blend", + "packed": false + }, + "before": { + "filepath": "//WebGapCatalogsSave.blend", + "name": "WebGapCatalogsSave.blend", + "packed": false + }, + "blenderVersion": "5.2.0 LTS", + "fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00274-operator-asset.catalogs_save.blend", + "fixtureSha256": "7b8be4b5cc90415b7295fcd2ceb560761b6e0df2b17aff0e62a339c7e43dbab3", + "mainMutation": "NONE", + "operation": "ASSET_CATALOGS_SAVE_DESKTOP", + "operatorStatus": "CANCELLED", + "poll": false, + "saveReopen": "EXACT", + "schemaVersion": 1, + "task": "M16-GAP-00274" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00274/catalogs-save-local-exact-report.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00274/catalogs-save-local-exact-report.json new file mode 100644 index 00000000..d28c8b79 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00274/catalogs-save-local-exact-report.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00274", + "operation": "ASSET_CATALOGS_SAVE_LOCAL_EXACT", + "fixture": { + "path": "tests/files/web/generated/M16-GAP-00274-operator-asset.catalogs_save.blend", + "sha256": "7b8be4b5cc90415b7295fcd2ceb560761b6e0df2b17aff0e62a339c7e43dbab3" + }, + "desktop": { + "status": "EXACT", + "report": "tests/golden/M16-GAP-00274/catalogs-save-desktop-report.json", + "poll": false, + "operatorStatus": "CANCELLED", + "mainMutation": "NONE" + }, + "wasm": { + "status": "EXACT", + "libraryId": "library:WebGapCatalogsSave.blend", + "sourcePath": "//WebGapCatalogsSave.blend", + "libraryStatus": "EXTERNAL_REQUIRED", + "dependencyIds": [] + }, + "saveReopen": "EXACT", + "negative": { + "malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION" + }, + "nextTask": "M16-GAP-00275" +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00274/task-context.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00274/task-context.json new file mode 100644 index 00000000..a33e0d53 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00274/task-context.json @@ -0,0 +1,185 @@ +{ + "schemaVersion": 1, + "task": "M16-GAP-00274", + "parentTask": "M16-GAP-00273", + "status": "in_progress", + "goal": "Make the same minimal fixture produce observable operator:asset.catalogs_save data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.", + "scope": { + "gap": "operator:asset.catalogs_save", + "ownerFamily": "OPERATOR", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00274.py -- tests/files/web/generated/M16-GAP-00274-operator-asset.catalogs_save.blend", + "npm --prefix web run test:generated-gap -- --task M16-GAP-00274", + "node tools/web/check-generated-gap.mjs --task M16-GAP-00274" + ], + "inputPaths": [ + "tools/web/generated/M16-GAP-00274.py" + ], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 1760, + "contextRemainingTokens": 439 + }, + "source": { + "bytes": 8144, + "tokens": 2037 + }, + "selected": [ + { + "path": "tools/web/generated/M16-GAP-00274.py", + "bytes": 1435, + "tokens": 359 + } + ], + "excluded": [ + { + "path": "tests/files/web/generated/M16-GAP-00274-operator-asset.catalogs_save.blend", + "bytes": 85904, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "bytes": 240371, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tools/web/check-generated-gap.mjs", + "bytes": 824532, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/M16-GAP-00274/", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "docs/status/M16-GAP-00274.md", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + }, + { + "path": "tests/golden/M16-GAP-00274/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 1, + "bytes": 1435, + "tokens": 359 + } + }, + "exitCriteria": [ + "desktop fixture evidence exists", + "WASM uses the same fixture", + "comparator passes", + "save/reopen preserves Main", + "manifest hashes all artifacts" + ], + "nextTask": "M16-GAP-00275", + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/M16-GAP-00274.md", + "taskIndex": "tests/golden/M15-03A/task-index.json", + "parentManifest": "tests/golden/M16-GAP-00273/manifest.json", + "parentStatus": "docs/status/M16-GAP-00273.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/M16-GAP-00274.md", + "tests/golden/M16-GAP-00273/manifest.json", + "docs/status/M16-GAP-00273.md" + ], + "machineOnly": [ + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/task-catalog.jsonl" + ], + "optionalByNeed": [ + "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", + "任务卡列出的精确协议/生产路径", + "任务卡明确命名的长期计划小节" + ], + "forbiddenByDefault": [ + "完整 CURRENT_EXECUTION_PLAN.md", + "完整 PROJECT_STATUS_AND_NEXT_WORK.md", + "全部 docs/status/*.md", + "完整 parity/WBS 计划", + "README 历史和 test-results/" + ] + }, + "parent": { + "manifest": { + "schemaVersion": 1, + "task": "M16-GAP-00273", + "parentTask": "M16-GAP-00272", + "status": "done", + "nextTask": "M16-GAP-00274", + "artifactCount": 16 + }, + "statusSummary": [ + "# M16-GAP-00273 Status", + "status: done", + "task: asset.catalog_undo_push operator LOCAL_EXACT slice", + "updated: 2026-08-23 America/New_York", + "scope:", + "- The fixture links one object from external `WebGapCatalogUndoPush.blend`.", + " Blender desktop observes the no-catalog-selection boundary as `poll=false`,", + " records `CANCELLED` for `ASSET_OT_catalog_undo_push`, and confirms no Main" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1784, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 38, + "taskTokens": 446 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 2495, + "lines": 47, + "tokens": 624 + }, + { + "path": "docs/tasks/M16-GAP-00274.md", + "bytes": 1784, + "lines": 38, + "tokens": 446 + }, + { + "path": "tests/golden/M16-GAP-00273/manifest.json", + "bytes": 2835, + "lines": 30, + "tokens": 709 + }, + { + "path": "docs/status/M16-GAP-00273.md", + "bytes": 1030, + "lines": 27, + "tokens": 258 + } + ], + "sourceTokens": 2037, + "evidenceFiles": 1, + "evidenceBytes": 1435, + "evidenceTokens": 359, + "totalTokens": 2396, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 3420, + "serializedContextTokens": 754, + "withinBudget": true + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-align-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-align-desktop.py new file mode 100644 index 00000000..c12a05a1 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-align-desktop.py @@ -0,0 +1,128 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureAlignArmature" +OBJECT_NAME = "WebGapArmatureAlignObject" +PARENT_NAME = "WebGapArmatureAlignParent" +CHILD_NAME = "WebGapArmatureAlignChild" + + +def vector(value): + return [round(float(component), 6) for component in value] + + +def state_report(): + armature = bpy.data.armatures.get(ARMATURE_NAME) + obj = bpy.data.objects.get(OBJECT_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.align fixture is missing") + bones = [] + for bone in armature.bones: + bones.append({ + "name": bone.name, + "parent": bone.parent.name if bone.parent else None, + "head": vector(bone.head_local), + "tail": vector(bone.tail_local), + }) + bones.sort(key=lambda value: value["name"]) + return {"object": OBJECT_NAME, "armature": ARMATURE_NAME, "bones": bones} + + +def axes_aligned(state): + parent = next(bone for bone in state["bones"] if bone["name"] == PARENT_NAME) + child = next(bone for bone in state["bones"] if bone["name"] == CHILD_NAME) + axis = [parent["tail"][index] - parent["head"][index] for index in range(3)] + child_axis = [child["tail"][index] - child["head"][index] for index in range(3)] + cross = [axis[1] * child_axis[2] - axis[2] * child_axis[1], axis[2] * child_axis[0] - axis[0] * child_axis[2], axis[0] * child_axis[1] - axis[1] * child_axis[0]] + return max(abs(value) for value in cross) <= 1e-5 + + +def run_operator(): + bpy.context.view_layer.objects.active = bpy.data.objects[OBJECT_NAME] + bpy.data.objects[OBJECT_NAME].select_set(True) + if bpy.context.object.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + armature = bpy.data.armatures[ARMATURE_NAME] + parent = armature.edit_bones[PARENT_NAME] + child = armature.edit_bones[CHILD_NAME] + parent.select = True + child.select = True + armature.bones.active = armature.bones[PARENT_NAME] + poll = bool(bpy.ops.armature.align.poll()) + if not poll: + raise RuntimeError("ARMATURE_OT_align poll failed") + result = bpy.ops.armature.align() + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_align returned {result}") + bpy.ops.object.mode_set(mode="OBJECT") + return poll, result + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --factory-startup --python check-action-armature-align-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + before_child = next(bone for bone in before["bones"] if bone["name"] == CHILD_NAME) + poll, _result = run_operator() + after = state_report() + already_aligned = axes_aligned(before) + parent = next(bone for bone in after["bones"] if bone["name"] == PARENT_NAME) + child = next(bone for bone in after["bones"] if bone["name"] == CHILD_NAME) + if child["parent"] is not None or child["head"] != before_child["head"]: + raise RuntimeError(f"armature.align changed unexpected parent/head state: {before} -> {after}") + axis = [parent["tail"][index] - parent["head"][index] for index in range(3)] + aligned_axis = [child["tail"][index] - child["head"][index] for index in range(3)] + cross = [axis[1] * aligned_axis[2] - axis[2] * aligned_axis[1], axis[2] * aligned_axis[0] - axis[0] * aligned_axis[2], axis[0] * aligned_axis[1] - axis[1] * aligned_axis[0]] + if max(abs(value) for value in cross) > 1e-5: + raise RuntimeError(f"armature.align did not make child axis parallel: {before} -> {after}") + + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-align-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError(f"armature.align save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00215", + "operation": "ARMATURE_ALIGN_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "alreadyAligned": already_aligned, + "poll": poll, + "operatorStatus": "FINISHED", + "mainMutation": "CHILD_ALIGNED_TO_PARENT", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("armature-align-desktop-ok poll=true status=FINISHED mainMutation=child_aligned_to_parent saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-align-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-assign-to-collection-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-assign-to-collection-desktop.py new file mode 100644 index 00000000..ad310b95 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-assign-to-collection-desktop.py @@ -0,0 +1,109 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureAssignArmature" +OBJECT_NAME = "WebGapArmatureAssignObject" +SOURCE_COLLECTION = "WebGapArmatureAssignSource" +TARGET_COLLECTION = "WebGapArmatureAssignTarget" +PARENT_NAME = "WebGapArmatureAssignParent" +CHILD_NAME = "WebGapArmatureAssignChild" + + +def state_report(): + armature = bpy.data.armatures.get(ARMATURE_NAME) + obj = bpy.data.objects.get(OBJECT_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.assign_to_collection fixture is missing") + collections = [] + for index, collection in enumerate(armature.collections): + collections.append({"name": collection.name, "index": index, "bones": sorted(bone.name for bone in collection.bones)}) + return {"object": OBJECT_NAME, "armature": ARMATURE_NAME, "collections": collections} + + +def run_operator(already_assigned): + bpy.context.view_layer.objects.active = bpy.data.objects[OBJECT_NAME] + bpy.data.objects[OBJECT_NAME].select_set(True) + if bpy.context.object.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + armature = bpy.data.armatures[ARMATURE_NAME] + parent = armature.edit_bones[PARENT_NAME] + child = armature.edit_bones[CHILD_NAME] + bpy.ops.armature.select_all(action="DESELECT") + parent.select = False + child.select = True + child.select_head = True + child.select_tail = True + armature.bones.active = armature.bones[CHILD_NAME] + poll = bool(bpy.ops.armature.assign_to_collection.poll()) + if not poll: + raise RuntimeError("ARMATURE_OT_assign_to_collection poll failed") + if not already_assigned: + result = bpy.ops.armature.assign_to_collection(collection_index=1) + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_assign_to_collection returned {result}") + bpy.ops.object.mode_set(mode="OBJECT") + return poll + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --factory-startup --python check-action-armature-assign-to-collection-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + target_before = next(collection for collection in before["collections"] if collection["name"] == TARGET_COLLECTION) + already_assigned = CHILD_NAME in target_before["bones"] + poll = run_operator(already_assigned) + after = state_report() + target_after = next(collection for collection in after["collections"] if collection["name"] == TARGET_COLLECTION) + if CHILD_NAME not in target_after["bones"]: + raise RuntimeError(f"assign_to_collection did not assign child: {before} -> {after}") + + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-assign-collection-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError(f"armature.assign_to_collection save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00216", + "operation": "ARMATURE_ASSIGN_TO_COLLECTION_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "alreadyAssigned": already_assigned, + "poll": poll, + "operatorStatus": "FINISHED", + "mainMutation": "CHILD_ASSIGNED_TO_TARGET_COLLECTION", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("armature-assign-to-collection-desktop-ok poll=true status=FINISHED mainMutation=child_assigned_to_target_collection saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-assign-to-collection-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-autoside-names-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-autoside-names-desktop.py new file mode 100644 index 00000000..2bc5e209 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-autoside-names-desktop.py @@ -0,0 +1,108 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureAutosideArmature" +OBJECT_NAME = "WebGapArmatureAutosideObject" +LEFT_NAME = "WebGapArmatureAutosideLeft" +RIGHT_NAME = "WebGapArmatureAutosideRight" +LEFT_RENAMED = f"{LEFT_NAME}.L" +RIGHT_RENAMED = f"{RIGHT_NAME}.R" + + +def vector(value): + return [round(float(component), 6) for component in value] + + +def state_report(): + armature = bpy.data.armatures.get(ARMATURE_NAME) + obj = bpy.data.objects.get(OBJECT_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.autoside_names fixture is missing") + bones = [ + {"name": bone.name, "head": vector(bone.head_local), "tail": vector(bone.tail_local)} + for bone in armature.bones + ] + bones.sort(key=lambda value: value["name"]) + return {"object": OBJECT_NAME, "armature": ARMATURE_NAME, "bones": bones} + + +def run_operator(before): + if {bone["name"] for bone in before["bones"]} == {LEFT_RENAMED, RIGHT_RENAMED}: + return True, False + if {bone["name"] for bone in before["bones"]} != {LEFT_NAME, RIGHT_NAME}: + raise RuntimeError(f"unexpected autoside_names input: {before}") + bpy.context.view_layer.objects.active = bpy.data.objects[OBJECT_NAME] + bpy.data.objects[OBJECT_NAME].select_set(True) + if bpy.context.object.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + bpy.ops.armature.select_all(action="SELECT") + poll = bool(bpy.ops.armature.autoside_names.poll()) + if not poll: + raise RuntimeError("ARMATURE_OT_autoside_names poll failed") + result = bpy.ops.armature.autoside_names(type="XAXIS") + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_autoside_names returned {result}") + bpy.ops.object.mode_set(mode="OBJECT") + return poll, True + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --factory-startup --python check-action-armature-autoside-names-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + poll, changed = run_operator(before) + after = state_report() + names = {bone["name"] for bone in after["bones"]} + if names != {LEFT_RENAMED, RIGHT_RENAMED}: + raise RuntimeError(f"autoside_names did not produce expected suffixes: {before} -> {after}") + + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-autoside-names-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError(f"armature.autoside_names save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00217", + "operation": "ARMATURE_AUTOSIDE_NAMES_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "alreadyNamed": not changed, + "poll": poll, + "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "BONES_AUTOSIDE_NAMED" if changed else "ALREADY_AUTOSIDE_NAMED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("armature-autoside-names-desktop-ok poll=true names=left-right saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-autoside-names-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-bone-primitive-add-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-bone-primitive-add-desktop.py new file mode 100644 index 00000000..22a36fe6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-bone-primitive-add-desktop.py @@ -0,0 +1,121 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmaturePrimitiveArmature" +OBJECT_NAME = "WebGapArmaturePrimitiveObject" +BONE_NAME = "WebGapArmaturePrimitiveBone" +CURSOR = [1.5, -2.0, 0.75] +LENGTH = 2.5 + + +def vector(value): + return [round(float(component), 6) for component in value] + + +def state_report(): + armature = bpy.data.armatures.get(ARMATURE_NAME) + obj = bpy.data.objects.get(OBJECT_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.bone_primitive_add fixture is missing") + bones = [ + { + "name": bone.name, + "head": vector(bone.head_local), + "tail": vector(bone.tail_local), + "useDeform": bool(bone.use_deform), + } + for bone in armature.bones + ] + bones.sort(key=lambda value: value["name"]) + return {"object": OBJECT_NAME, "armature": ARMATURE_NAME, "cursor": vector(bpy.context.scene.cursor.location), "bones": bones} + + +def run_operator(before): + names = {bone["name"] for bone in before["bones"]} + if names == {BONE_NAME}: + already_added = True + elif names: + raise RuntimeError(f"unexpected bone_primitive_add input: {before}") + else: + already_added = False + bpy.context.view_layer.objects.active = bpy.data.objects[OBJECT_NAME] + bpy.data.objects[OBJECT_NAME].select_set(True) + if bpy.context.object.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + poll = bool(bpy.ops.armature.bone_primitive_add.poll()) + if not poll: + raise RuntimeError("ARMATURE_OT_bone_primitive_add poll failed") + if not already_added: + result = bpy.ops.armature.bone_primitive_add( + name=BONE_NAME, length=LENGTH, align="UP", space="OBJECT", use_deform=False + ) + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_bone_primitive_add returned {result}") + bpy.ops.object.mode_set(mode="OBJECT") + return poll, not already_added + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --factory-startup --python check-action-armature-bone-primitive-add-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + poll, changed = run_operator(before) + after = state_report() + if len(after["bones"]) != 1 or after["bones"][0]["name"] != BONE_NAME: + raise RuntimeError(f"bone_primitive_add did not create the expected bone: {before} -> {after}") + bone = after["bones"][0] + expected_head = CURSOR + expected_tail = [CURSOR[0], CURSOR[1], CURSOR[2] + LENGTH] + if bone["head"] != expected_head or bone["tail"] != expected_tail or bone["useDeform"]: + raise RuntimeError(f"bone_primitive_add produced unexpected data: {after}") + + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-bone-primitive-add-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError(f"armature.bone_primitive_add save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00218", + "operation": "ARMATURE_BONE_PRIMITIVE_ADD_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "alreadyAdded": not changed, + "poll": poll, + "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "BONE_CREATED_AT_CURSOR" if changed else "ALREADY_BONE_CREATED_AT_CURSOR", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("armature-bone-primitive-add-desktop-ok poll=true bone=cursor saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-bone-primitive-add-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-calculate-roll-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-calculate-roll-desktop.py new file mode 100644 index 00000000..88fb3a3b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-calculate-roll-desktop.py @@ -0,0 +1,126 @@ +#!/usr/bin/env python3 +import hashlib +import json +import math +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureCalculateRollArmature" +OBJECT_NAME = "WebGapArmatureCalculateRollObject" +BONE_NAME = "WebGapArmatureCalculateRollBone" +EXPECTED_ROLL = math.pi / 2.0 + + +def vector(value): + return [round(float(component), 6) for component in value] + + +def matrix_flat(value): + return [round(float(component), 6) for column in value for component in column] + + +def state_report(): + armature = bpy.data.armatures.get(ARMATURE_NAME) + obj = bpy.data.objects.get(OBJECT_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.calculate_roll fixture is missing") + bones = [ + { + "name": bone.name, + "head": vector(bone.head_local), + "tail": vector(bone.tail_local), + "matrix": matrix_flat(bone.matrix_local), + } + for bone in armature.bones + ] + bones.sort(key=lambda value: value["name"]) + return {"object": OBJECT_NAME, "armature": ARMATURE_NAME, "bones": bones} + + +def run_operator(before): + if [bone["name"] for bone in before["bones"]] != [BONE_NAME]: + raise RuntimeError(f"unexpected calculate_roll input: {before}") + bpy.context.view_layer.objects.active = bpy.data.objects[OBJECT_NAME] + bpy.data.objects[OBJECT_NAME].select_set(True) + if bpy.context.object.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + armature = bpy.data.armatures[ARMATURE_NAME] + edit_bone = armature.edit_bones[BONE_NAME] + already_calculated = abs(abs(edit_bone.roll) - EXPECTED_ROLL) <= 1e-5 + edit_bone.select = True + armature.bones.active = armature.bones[BONE_NAME] + poll = bool(bpy.ops.armature.calculate_roll.poll()) + if not poll: + raise RuntimeError("ARMATURE_OT_calculate_roll poll failed") + if not already_calculated: + result = bpy.ops.armature.calculate_roll(type="GLOBAL_POS_X", axis_flip=False, axis_only=False) + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_calculate_roll returned {result}") + roll = float(edit_bone.roll) + bpy.ops.object.mode_set(mode="OBJECT") + return poll, not already_calculated, roll + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --factory-startup --python check-action-armature-calculate-roll-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + poll, changed, roll = run_operator(before) + after = state_report() + if len(after["bones"]) != 1 or after["bones"][0]["name"] != BONE_NAME: + raise RuntimeError(f"calculate_roll changed unexpected bones: {before} -> {after}") + if abs(abs(roll) - EXPECTED_ROLL) > 1e-5: + raise RuntimeError(f"calculate_roll did not produce the expected roll: {roll}") + expected_matrix = [0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0] + for actual, expected in zip(after["bones"][0]["matrix"], expected_matrix): + if abs(actual - expected) > 1e-5: + raise RuntimeError(f"calculate_roll matrix mismatch: {after}") + + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-calculate-roll-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError(f"armature.calculate_roll save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00219", + "operation": "ARMATURE_CALCULATE_ROLL_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "alreadyCalculated": not changed, + "roll": round(roll, 6), + "poll": poll, + "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "ROLL_CALCULATED_GLOBAL_POS_X" if changed else "ALREADY_ROLL_CALCULATED_GLOBAL_POS_X", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("armature-calculate-roll-desktop-ok poll=true roll=global-pos-x saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-calculate-roll-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-click-extrude-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-click-extrude-desktop.py new file mode 100644 index 00000000..13cebb8a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-click-extrude-desktop.py @@ -0,0 +1,134 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureClickExtrudeArmature" +OBJECT_NAME = "WebGapArmatureClickExtrudeObject" +BONE_NAME = "WebGapArmatureClickExtrudeBone" +CHILD_NAME = f"{BONE_NAME}.001" +CURSOR = [1.5, 2.0, 1.0] + + +def vector(value): + return [round(float(component), 6) for component in value] + + +def matrix_flat(value): + return [round(float(component), 6) for column in value for component in column] + + +def state_report(): + armature = bpy.data.armatures.get(ARMATURE_NAME) + obj = bpy.data.objects.get(OBJECT_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.click_extrude fixture is missing") + bones = [ + { + "name": bone.name, + "parent": bone.parent.name if bone.parent else None, + "head": vector(bone.head_local), + "tail": vector(bone.tail_local), + "headRaw": vector(bone.head), + "tailRaw": vector(bone.tail), + "useConnect": bool(bone.use_connect), + "matrix": matrix_flat(bone.matrix_local), + } + for bone in armature.bones + ] + bones.sort(key=lambda value: value["name"]) + return {"object": OBJECT_NAME, "armature": ARMATURE_NAME, "cursor": vector(bpy.context.scene.cursor.location), "bones": bones} + + +def run_operator(before): + names = {bone["name"] for bone in before["bones"]} + if names == {BONE_NAME, CHILD_NAME}: + already_extruded = True + elif names == {BONE_NAME}: + already_extruded = False + else: + raise RuntimeError(f"unexpected click_extrude input: {before}") + bpy.context.view_layer.objects.active = bpy.data.objects[OBJECT_NAME] + bpy.data.objects[OBJECT_NAME].select_set(True) + if bpy.context.object.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + armature = bpy.data.armatures[ARMATURE_NAME] + edit_bone = armature.edit_bones[BONE_NAME] + edit_bone.select = True + edit_bone.select_tail = True + armature.edit_bones.active = edit_bone + poll = bool(bpy.ops.armature.click_extrude.poll()) + if not poll: + raise RuntimeError("ARMATURE_OT_click_extrude poll failed") + if not already_extruded: + result = bpy.ops.armature.click_extrude() + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_click_extrude returned {result}") + bpy.ops.object.mode_set(mode="OBJECT") + return poll, not already_extruded + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --factory-startup --python check-action-armature-click-extrude-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + poll, changed = run_operator(before) + after = state_report() + if len(after["bones"]) != 2: + raise RuntimeError(f"click_extrude did not create exactly one child bone: {before} -> {after}") + parent = next((bone for bone in after["bones"] if bone["name"] == BONE_NAME), None) + child = next((bone for bone in after["bones"] if bone["name"] == CHILD_NAME), None) + if parent is None or child is None: + raise RuntimeError(f"click_extrude produced unexpected bones: {after}") + expected_head = parent["tail"] + if child["parent"] != BONE_NAME or not child["useConnect"] or child["head"] != expected_head or child["tail"] != CURSOR: + raise RuntimeError(f"click_extrude produced unexpected child: {after}") + + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-click-extrude-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError(f"armature.click_extrude save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00220", + "operation": "ARMATURE_CLICK_EXTRUDE_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "alreadyExtruded": not changed, + "poll": poll, + "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "CHILD_EXTRUDED_TO_CURSOR" if changed else "ALREADY_CHILD_EXTRUDED_TO_CURSOR", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("armature-click-extrude-desktop-ok poll=true child=cursor saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-click-extrude-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-add-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-add-desktop.py new file mode 100644 index 00000000..a90ec20e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-add-desktop.py @@ -0,0 +1,109 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureCollectionAddArmature" +OBJECT_NAME = "WebGapArmatureCollectionAddObject" +SOURCE_COLLECTION = "WebGapArmatureCollectionAddExisting" +NEW_COLLECTION = "Bones" +BONE_NAME = "WebGapArmatureCollectionAddBone" + + +def state_report(): + armature = bpy.data.armatures.get(ARMATURE_NAME) + obj = bpy.data.objects.get(OBJECT_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.collection_add fixture is missing") + collections = [] + for index, collection in enumerate(armature.collections): + collections.append({"name": collection.name, "index": index, "bones": sorted(bone.name for bone in collection.bones)}) + return {"object": OBJECT_NAME, "armature": ARMATURE_NAME, "activeIndex": armature.collections.active_index, "collections": collections} + + +def run_operator(already_added): + bpy.context.view_layer.objects.active = bpy.data.objects[OBJECT_NAME] + bpy.data.objects[OBJECT_NAME].select_set(True) + armature = bpy.data.armatures[ARMATURE_NAME] + if not already_added: + armature.collections.active_index = 0 + poll = bool(bpy.ops.armature.collection_add.poll()) + if not poll: + raise RuntimeError("ARMATURE_OT_collection_add poll failed") + if not already_added: + result = bpy.ops.armature.collection_add() + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_collection_add returned {result}") + return poll, not already_added + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --factory-startup --python check-action-armature-collection-add-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + names = {collection["name"] for collection in before["collections"]} + if names == {SOURCE_COLLECTION, NEW_COLLECTION}: + already_added = True + elif names == {SOURCE_COLLECTION}: + already_added = False + else: + raise RuntimeError(f"unexpected collection_add input: {before}") + poll, changed = run_operator(already_added) + after = state_report() + if len(after["collections"]) != 2: + raise RuntimeError(f"collection_add did not produce exactly two collections: {before} -> {after}") + source = next((collection for collection in after["collections"] if collection["name"] == SOURCE_COLLECTION), None) + added = next((collection for collection in after["collections"] if collection["name"] == NEW_COLLECTION), None) + if source is None or added is None or source["index"] != 0 or added["index"] != 1: + raise RuntimeError(f"collection_add produced unexpected collections: {after}") + if source["bones"] != [BONE_NAME] or added["bones"]: + raise RuntimeError(f"collection_add changed collection membership: {after}") + + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-collection-add-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError(f"armature.collection_add save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00221", + "operation": "ARMATURE_COLLECTION_ADD_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "alreadyAdded": not changed, + "poll": poll, + "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "BONE_COLLECTION_ADDED" if changed else "ALREADY_BONE_COLLECTION_ADDED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("armature-collection-add-desktop-ok poll=true collection=Bones saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-collection-add-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-assign-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-assign-desktop.py new file mode 100644 index 00000000..a8e2be15 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-assign-desktop.py @@ -0,0 +1,112 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureCollectionAssignArmature" +OBJECT_NAME = "WebGapArmatureCollectionAssignObject" +SOURCE_COLLECTION = "WebGapArmatureCollectionAssignSource" +TARGET_COLLECTION = "WebGapArmatureCollectionAssignTarget" +BONE_NAME = "WebGapArmatureCollectionAssignBone" + + +def state_report(): + armature = bpy.data.armatures.get(ARMATURE_NAME) + obj = bpy.data.objects.get(OBJECT_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.collection_assign fixture is missing") + collections = [] + for index, collection in enumerate(armature.collections): + collections.append({"name": collection.name, "index": index, "bones": sorted(bone.name for bone in collection.bones)}) + return {"object": OBJECT_NAME, "armature": ARMATURE_NAME, "collections": collections} + + +def run_operator(already_assigned): + bpy.context.view_layer.objects.active = bpy.data.objects[OBJECT_NAME] + bpy.data.objects[OBJECT_NAME].select_set(True) + if bpy.context.object.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + armature = bpy.data.armatures[ARMATURE_NAME] + edit_bone = armature.edit_bones[BONE_NAME] + bpy.ops.armature.select_all(action="DESELECT") + edit_bone.select = True + edit_bone.select_head = True + edit_bone.select_tail = True + armature.bones.active = armature.bones[BONE_NAME] + poll = bool(bpy.ops.armature.collection_assign.poll()) + if not poll: + raise RuntimeError("ARMATURE_OT_collection_assign poll failed") + if not already_assigned: + result = bpy.ops.armature.collection_assign(name=TARGET_COLLECTION) + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_collection_assign returned {result}") + bpy.ops.object.mode_set(mode="OBJECT") + return poll, not already_assigned + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --factory-startup --python check-action-armature-collection-assign-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + target_before = next((collection for collection in before["collections"] if collection["name"] == TARGET_COLLECTION), None) + source_before = next((collection for collection in before["collections"] if collection["name"] == SOURCE_COLLECTION), None) + if source_before is None or target_before is None or source_before["bones"] != [BONE_NAME]: + raise RuntimeError(f"unexpected collection_assign input: {before}") + already_assigned = BONE_NAME in target_before["bones"] + poll, changed = run_operator(already_assigned) + after = state_report() + source_after = next((collection for collection in after["collections"] if collection["name"] == SOURCE_COLLECTION), None) + target_after = next((collection for collection in after["collections"] if collection["name"] == TARGET_COLLECTION), None) + if source_after is None or target_after is None or BONE_NAME not in target_after["bones"]: + raise RuntimeError(f"collection_assign did not assign the bone: {before} -> {after}") + if BONE_NAME not in source_after["bones"]: + raise RuntimeError(f"collection_assign unexpectedly removed the source membership: {after}") + + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-collection-assign-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError(f"armature.collection_assign save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00222", + "operation": "ARMATURE_COLLECTION_ASSIGN_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "alreadyAssigned": already_assigned, + "poll": poll, + "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "BONE_ASSIGNED_TO_TARGET_COLLECTION" if changed else "ALREADY_BONE_ASSIGNED_TO_TARGET_COLLECTION", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("armature-collection-assign-desktop-ok poll=true target=assigned saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-collection-assign-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-create-assign-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-create-assign-desktop.py new file mode 100644 index 00000000..4b915e95 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-create-assign-desktop.py @@ -0,0 +1,116 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureCollectionCreateAssignArmature" +OBJECT_NAME = "WebGapArmatureCollectionCreateAssignObject" +SOURCE_COLLECTION = "WebGapArmatureCollectionCreateAssignSource" +NEW_COLLECTION = "WebGapArmatureCollectionCreateAssignNew" +BONE_NAME = "WebGapArmatureCollectionCreateAssignBone" + + +def state_report(): + armature = bpy.data.armatures.get(ARMATURE_NAME) + obj = bpy.data.objects.get(OBJECT_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.collection_create_and_assign fixture is missing") + collections = [] + for index, collection in enumerate(armature.collections): + collections.append({"name": collection.name, "index": index, "bones": sorted(bone.name for bone in collection.bones)}) + return {"object": OBJECT_NAME, "armature": ARMATURE_NAME, "activeIndex": armature.collections.active_index, "collections": collections} + + +def run_operator(already_created): + bpy.context.view_layer.objects.active = bpy.data.objects[OBJECT_NAME] + bpy.data.objects[OBJECT_NAME].select_set(True) + if bpy.context.object.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + armature = bpy.data.armatures[ARMATURE_NAME] + edit_bone = armature.edit_bones[BONE_NAME] + bpy.ops.armature.select_all(action="DESELECT") + edit_bone.select = True + edit_bone.select_head = True + edit_bone.select_tail = True + armature.bones.active = armature.bones[BONE_NAME] + poll = bool(bpy.ops.armature.collection_create_and_assign.poll()) + if not poll: + raise RuntimeError("ARMATURE_OT_collection_create_and_assign poll failed") + if not already_created: + result = bpy.ops.armature.collection_create_and_assign(name=NEW_COLLECTION) + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_collection_create_and_assign returned {result}") + bpy.ops.object.mode_set(mode="OBJECT") + return poll, not already_created + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --factory-startup --python check-action-armature-collection-create-assign-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + names = {collection["name"] for collection in before["collections"]} + if names == {SOURCE_COLLECTION, NEW_COLLECTION}: + already_created = True + elif names == {SOURCE_COLLECTION}: + already_created = False + else: + raise RuntimeError(f"unexpected collection_create_and_assign input: {before}") + poll, changed = run_operator(already_created) + after = state_report() + source = next((collection for collection in after["collections"] if collection["name"] == SOURCE_COLLECTION), None) + added = next((collection for collection in after["collections"] if collection["name"] == NEW_COLLECTION), None) + if source is None or added is None or added["bones"] != [BONE_NAME]: + raise RuntimeError(f"collection_create_and_assign produced unexpected collections: {after}") + if source["bones"] != [BONE_NAME]: + raise RuntimeError(f"collection_create_and_assign unexpectedly removed source membership: {after}") + if added["index"] != 1 or after["activeIndex"] != added["index"]: + raise RuntimeError(f"collection_create_and_assign did not activate the new collection: {after}") + + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-collection-create-assign-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError(f"armature.collection_create_and_assign save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00223", + "operation": "ARMATURE_COLLECTION_CREATE_AND_ASSIGN_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "alreadyCreated": already_created, + "poll": poll, + "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "NEW_COLLECTION_CREATED_AND_BONE_ASSIGNED" if changed else "ALREADY_NEW_COLLECTION_CREATED_AND_BONE_ASSIGNED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("armature-collection-create-assign-desktop-ok poll=true collection=created-and-assigned saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-collection-create-assign-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-deselect-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-deselect-desktop.py new file mode 100644 index 00000000..e2988851 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-deselect-desktop.py @@ -0,0 +1,141 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureCollectionDeselectArmature" +OBJECT_NAME = "WebGapArmatureCollectionDeselectObject" +ACTIVE_COLLECTION = "WebGapArmatureCollectionDeselectActive" +OTHER_COLLECTION = "WebGapArmatureCollectionDeselectOther" +ACTIVE_BONE = "WebGapArmatureCollectionDeselectActiveBone" +OTHER_BONE = "WebGapArmatureCollectionDeselectOtherBone" + + +def state_report(): + armature = bpy.data.armatures.get(ARMATURE_NAME) + obj = bpy.data.objects.get(OBJECT_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.collection_deselect fixture is missing") + was_edit_mode = obj.mode == "EDIT" + if not was_edit_mode: + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + bones = [] + for bone in armature.edit_bones: + bones.append({"name": bone.name, "selected": bool(bone.select)}) + if not was_edit_mode: + bpy.ops.object.mode_set(mode="OBJECT") + return { + "object": OBJECT_NAME, + "armature": ARMATURE_NAME, + "activeIndex": armature.collections.active_index, + "bones": bones, + } + + +def select_fixture_bones(): + bpy.context.view_layer.objects.active = bpy.data.objects[OBJECT_NAME] + bpy.data.objects[OBJECT_NAME].select_set(True) + if bpy.context.object.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + armature = bpy.data.armatures[ARMATURE_NAME] + bpy.ops.armature.select_all(action="DESELECT") + for name in (ACTIVE_BONE, OTHER_BONE): + bone = armature.edit_bones[name] + bone.select = True + bone.select_head = True + bone.select_tail = True + armature.bones.active = armature.bones[ACTIVE_BONE] + + +def run_operator(already_deselected): + if already_deselected: + obj = bpy.data.objects[OBJECT_NAME] + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + if bpy.context.object.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + armature = bpy.data.armatures[ARMATURE_NAME] + bpy.ops.armature.select_all(action="DESELECT") + other_bone = armature.edit_bones[OTHER_BONE] + other_bone.select = True + other_bone.select_head = True + other_bone.select_tail = True + else: + select_fixture_bones() + armature = bpy.data.armatures[ARMATURE_NAME] + poll = bool(bpy.ops.armature.collection_deselect.poll()) + if not poll: + raise RuntimeError("ARMATURE_OT_collection_deselect poll failed") + if not already_deselected: + result = bpy.ops.armature.collection_deselect() + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_collection_deselect returned {result}") + bpy.ops.object.mode_set(mode="OBJECT") + return poll, not already_deselected + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --factory-startup --python check-action-armature-collection-deselect-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + if before["activeIndex"] != 0: + raise RuntimeError(f"unexpected active collection: {before}") + already_deselected = all( + not bone["selected"] for bone in before["bones"] if bone["name"] == ACTIVE_BONE + ) + poll, changed = run_operator(already_deselected) + after = state_report() + selected = {bone["name"]: bone["selected"] for bone in after["bones"]} + if selected.get(ACTIVE_BONE) is not False or selected.get(OTHER_BONE) is not True: + raise RuntimeError(f"collection_deselect produced unexpected selection: {after}") + + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-collection-deselect-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError(f"armature.collection_deselect save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00224", + "operation": "ARMATURE_COLLECTION_DESELECT_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "alreadyDeselected": already_deselected, + "poll": poll, + "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "ACTIVE_COLLECTION_BONES_DESELECTED" if changed else "ACTIVE_COLLECTION_BONES_ALREADY_DESELECTED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("armature-collection-deselect-desktop-ok poll=true activeCollection=deselected saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-collection-deselect-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-move-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-move-desktop.py new file mode 100644 index 00000000..0763a8fc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-move-desktop.py @@ -0,0 +1,124 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureCollectionMoveArmature" +OBJECT_NAME = "WebGapArmatureCollectionMoveObject" +FIRST_COLLECTION = "WebGapArmatureCollectionMoveFirst" +ACTIVE_COLLECTION = "WebGapArmatureCollectionMoveActive" +LAST_COLLECTION = "WebGapArmatureCollectionMoveLast" +FIRST_BONE = "WebGapArmatureCollectionMoveFirstBone" +ACTIVE_BONE = "WebGapArmatureCollectionMoveActiveBone" +LAST_BONE = "WebGapArmatureCollectionMoveLastBone" + + +def state_report(): + armature = bpy.data.armatures.get(ARMATURE_NAME) + obj = bpy.data.objects.get(OBJECT_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.collection_move fixture is missing") + collections = [] + for index, collection in enumerate(armature.collections): + collections.append({ + "name": collection.name, + "index": index, + "bones": sorted(bone.name for bone in collection.bones), + }) + return { + "object": OBJECT_NAME, + "armature": ARMATURE_NAME, + "activeIndex": armature.collections.active_index, + "collections": collections, + } + + +def run_operator(already_moved): + obj = bpy.data.objects[OBJECT_NAME] + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + armature = bpy.data.armatures[ARMATURE_NAME] + poll = bool(bpy.ops.armature.collection_move.poll()) + if not poll: + raise RuntimeError("ARMATURE_OT_collection_move poll failed") + if not already_moved: + result = bpy.ops.armature.collection_move(direction="UP") + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_collection_move returned {result}") + return poll, not already_moved + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --factory-startup --python check-action-armature-collection-move-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + before_names = [collection["name"] for collection in before["collections"]] + if before_names == [ACTIVE_COLLECTION, FIRST_COLLECTION, LAST_COLLECTION] and before["activeIndex"] == 0: + already_moved = True + elif before_names == [FIRST_COLLECTION, ACTIVE_COLLECTION, LAST_COLLECTION] and before["activeIndex"] == 1: + already_moved = False + else: + raise RuntimeError(f"unexpected collection_move input: {before}") + poll, changed = run_operator(already_moved) + after = state_report() + after_names = [collection["name"] for collection in after["collections"]] + if after_names != [ACTIVE_COLLECTION, FIRST_COLLECTION, LAST_COLLECTION] or after["activeIndex"] != 0: + raise RuntimeError(f"collection_move produced unexpected order: {after}") + expected_members = { + FIRST_COLLECTION: [FIRST_BONE], + ACTIVE_COLLECTION: [ACTIVE_BONE], + LAST_COLLECTION: [LAST_BONE], + } + actual_members = {collection["name"]: collection["bones"] for collection in after["collections"]} + if actual_members != expected_members: + raise RuntimeError(f"collection_move changed collection membership: {after}") + + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-collection-move-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError(f"armature.collection_move save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00225", + "operation": "ARMATURE_COLLECTION_MOVE_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "direction": "UP", + "alreadyMoved": already_moved, + "poll": poll, + "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "ACTIVE_COLLECTION_MOVED_UP" if changed else "ACTIVE_COLLECTION_ALREADY_MOVED_UP", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("armature-collection-move-desktop-ok poll=true direction=up activeIndex=0 saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-collection-move-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-remove-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-remove-desktop.py new file mode 100644 index 00000000..2a8e067c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-remove-desktop.py @@ -0,0 +1,120 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureCollectionRemoveArmature" +OBJECT_NAME = "WebGapArmatureCollectionRemoveObject" +FIRST_COLLECTION = "WebGapArmatureCollectionRemoveFirst" +REMOVED_COLLECTION = "WebGapArmatureCollectionRemoveRemoved" +LAST_COLLECTION = "WebGapArmatureCollectionRemoveLast" +FIRST_BONE = "WebGapArmatureCollectionRemoveFirstBone" +REMOVED_BONE = "WebGapArmatureCollectionRemoveRemovedBone" +LAST_BONE = "WebGapArmatureCollectionRemoveLastBone" + + +def state_report(): + armature = bpy.data.armatures.get(ARMATURE_NAME) + obj = bpy.data.objects.get(OBJECT_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.collection_remove fixture is missing") + collections = [] + for index, collection in enumerate(armature.collections): + collections.append({ + "name": collection.name, + "index": index, + "bones": sorted(bone.name for bone in collection.bones), + }) + return { + "object": OBJECT_NAME, + "armature": ARMATURE_NAME, + "activeIndex": armature.collections.active_index, + "bones": sorted(bone.name for bone in armature.bones), + "collections": collections, + } + + +def run_operator(already_removed): + obj = bpy.data.objects[OBJECT_NAME] + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + poll = bool(bpy.ops.armature.collection_remove.poll()) + if not poll: + raise RuntimeError("ARMATURE_OT_collection_remove poll failed") + if not already_removed: + result = bpy.ops.armature.collection_remove() + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_collection_remove returned {result}") + return poll, not already_removed + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --factory-startup --python check-action-armature-collection-remove-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + before_names = [collection["name"] for collection in before["collections"]] + if before_names == [FIRST_COLLECTION, LAST_COLLECTION] and before["activeIndex"] == 1: + already_removed = True + elif before_names == [FIRST_COLLECTION, REMOVED_COLLECTION, LAST_COLLECTION] and before["activeIndex"] == 1: + already_removed = False + else: + raise RuntimeError(f"unexpected collection_remove input: {before}") + poll, changed = run_operator(already_removed) + after = state_report() + if [collection["name"] for collection in after["collections"]] != [FIRST_COLLECTION, LAST_COLLECTION]: + raise RuntimeError(f"collection_remove produced unexpected collections: {after}") + if after["activeIndex"] != 1 or after["bones"] != sorted([FIRST_BONE, REMOVED_BONE, LAST_BONE]): + raise RuntimeError(f"collection_remove changed active index or armature bones: {after}") + expected_members = {FIRST_COLLECTION: [FIRST_BONE], LAST_COLLECTION: [LAST_BONE]} + actual_members = {collection["name"]: collection["bones"] for collection in after["collections"]} + if actual_members != expected_members: + raise RuntimeError(f"collection_remove retained removed collection membership: {after}") + + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-collection-remove-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError(f"armature.collection_remove save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00226", + "operation": "ARMATURE_COLLECTION_REMOVE_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "alreadyRemoved": already_removed, + "poll": poll, + "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "ACTIVE_COLLECTION_REMOVED" if changed else "ACTIVE_COLLECTION_ALREADY_REMOVED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("armature-collection-remove-desktop-ok poll=true removed=active saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-collection-remove-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-remove-unused-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-remove-unused-desktop.py new file mode 100644 index 00000000..827f048c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-remove-unused-desktop.py @@ -0,0 +1,130 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureCollectionRemoveUnusedArmature" +OBJECT_NAME = "WebGapArmatureCollectionRemoveUnusedObject" +FIRST_COLLECTION = "WebGapArmatureCollectionRemoveUnusedFirst" +UNUSED_FIRST_COLLECTION = "WebGapArmatureCollectionRemoveUnusedUnusedFirst" +LAST_COLLECTION = "WebGapArmatureCollectionRemoveUnusedLast" +UNUSED_LAST_COLLECTION = "WebGapArmatureCollectionRemoveUnusedUnusedLast" +FIRST_BONE = "WebGapArmatureCollectionRemoveUnusedFirstBone" +LAST_BONE = "WebGapArmatureCollectionRemoveUnusedLastBone" + + +def state_report(): + armature = bpy.data.armatures.get(ARMATURE_NAME) + obj = bpy.data.objects.get(OBJECT_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.collection_remove_unused fixture is missing") + collections = [] + for index, collection in enumerate(armature.collections): + collections.append( + { + "name": collection.name, + "index": index, + "bones": sorted(bone.name for bone in collection.bones), + } + ) + return { + "object": OBJECT_NAME, + "armature": ARMATURE_NAME, + "activeIndex": armature.collections.active_index, + "bones": sorted(bone.name for bone in armature.bones), + "collections": collections, + } + + +def run_operator(already_removed): + obj = bpy.data.objects[OBJECT_NAME] + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + poll = bool(bpy.ops.armature.collection_remove_unused.poll()) + if not poll: + raise RuntimeError("ARMATURE_OT_collection_remove_unused poll failed") + if not already_removed: + result = bpy.ops.armature.collection_remove_unused() + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_collection_remove_unused returned {result}") + return poll, not already_removed + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit( + "usage: blender -b --factory-startup --python check-action-armature-collection-remove-unused-desktop.py -- FIXTURE REPORT" + ) + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + before_names = [collection["name"] for collection in before["collections"]] + if before_names == [FIRST_COLLECTION, LAST_COLLECTION] and before["activeIndex"] == 1: + already_removed = True + elif before_names == [ + FIRST_COLLECTION, + UNUSED_FIRST_COLLECTION, + LAST_COLLECTION, + UNUSED_LAST_COLLECTION, + ] and before["activeIndex"] == 2: + already_removed = False + else: + raise RuntimeError(f"unexpected collection_remove_unused input: {before}") + poll, changed = run_operator(already_removed) + after = state_report() + if [collection["name"] for collection in after["collections"]] != [FIRST_COLLECTION, LAST_COLLECTION]: + raise RuntimeError(f"collection_remove_unused produced unexpected collections: {after}") + if after["activeIndex"] != 1 or after["bones"] != sorted([FIRST_BONE, LAST_BONE]): + raise RuntimeError(f"collection_remove_unused changed active index or armature bones: {after}") + expected_members = {FIRST_COLLECTION: [FIRST_BONE], LAST_COLLECTION: [LAST_BONE]} + actual_members = {collection["name"]: collection["bones"] for collection in after["collections"]} + if actual_members != expected_members: + raise RuntimeError(f"collection_remove_unused changed retained collection membership: {after}") + + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-collection-remove-unused-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError(f"armature.collection_remove_unused save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00227", + "operation": "ARMATURE_COLLECTION_REMOVE_UNUSED_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "removedCollections": [UNUSED_FIRST_COLLECTION, UNUSED_LAST_COLLECTION], + "alreadyRemoved": already_removed, + "poll": poll, + "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "UNUSED_COLLECTIONS_REMOVED" if changed else "UNUSED_COLLECTIONS_ALREADY_REMOVED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("armature-collection-remove-unused-desktop-ok poll=true removed=2 saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-collection-remove-unused-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-select-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-select-desktop.py new file mode 100644 index 00000000..c4bb9f6c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-select-desktop.py @@ -0,0 +1,147 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureCollectionSelectArmature" +OBJECT_NAME = "WebGapArmatureCollectionSelectObject" +FIRST_COLLECTION = "WebGapArmatureCollectionSelectFirst" +ACTIVE_COLLECTION = "WebGapArmatureCollectionSelectActive" +LAST_COLLECTION = "WebGapArmatureCollectionSelectLast" +FIRST_BONE = "WebGapArmatureCollectionSelectFirstBone" +ACTIVE_BONE = "WebGapArmatureCollectionSelectActiveBone" +LAST_BONE = "WebGapArmatureCollectionSelectLastBone" + + +def ensure_edit_mode(): + obj = bpy.data.objects.get(OBJECT_NAME) + armature = bpy.data.armatures.get(ARMATURE_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.collection_select fixture is missing") + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + if obj.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + return armature + + +def state_report(): + armature = ensure_edit_mode() + obj = bpy.data.objects[OBJECT_NAME] + bones = sorted(bone.name for bone in armature.edit_bones) + selected_bones = sorted(bone.name for bone in armature.edit_bones if bone.select) + bpy.ops.object.mode_set(mode="OBJECT") + collections = [] + for index, collection in enumerate(armature.collections): + collections.append( + { + "name": collection.name, + "index": index, + "bones": sorted(bone.name for bone in collection.bones), + } + ) + bpy.context.view_layer.objects.active = obj + bpy.ops.object.mode_set(mode="EDIT") + return { + "object": OBJECT_NAME, + "armature": ARMATURE_NAME, + "activeIndex": armature.collections.active_index, + "bones": bones, + "selectedBones": selected_bones, + "collections": collections, + } + + +def run_operator(already_selected): + ensure_edit_mode() + poll = bool(bpy.ops.armature.collection_select.poll()) + if not poll: + raise RuntimeError("ARMATURE_OT_collection_select poll failed") + if not already_selected: + result = bpy.ops.armature.collection_select() + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_collection_select returned {result}") + return poll, not already_selected + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit( + "usage: blender -b --factory-startup --python check-action-armature-collection-select-desktop.py -- FIXTURE REPORT" + ) + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + expected_collections = [FIRST_COLLECTION, ACTIVE_COLLECTION, LAST_COLLECTION] + if [collection["name"] for collection in before["collections"]] != expected_collections: + raise RuntimeError(f"unexpected collection_select collections: {before}") + if before["activeIndex"] != 1: + raise RuntimeError(f"unexpected collection_select active index: {before}") + selected_before = set(before["selectedBones"]) + if selected_before == {FIRST_BONE, ACTIVE_BONE}: + already_selected = True + elif selected_before == {FIRST_BONE}: + already_selected = False + else: + raise RuntimeError(f"unexpected collection_select selection input: {before}") + poll, changed = run_operator(already_selected) + after = state_report() + if after["activeIndex"] != 1 or after["selectedBones"] != sorted([FIRST_BONE, ACTIVE_BONE]): + raise RuntimeError(f"collection_select did not select the active collection: {after}") + expected_members = { + FIRST_COLLECTION: [FIRST_BONE], + ACTIVE_COLLECTION: [ACTIVE_BONE], + LAST_COLLECTION: [LAST_BONE], + } + actual_members = {collection["name"]: collection["bones"] for collection in after["collections"]} + if actual_members != expected_members: + raise RuntimeError(f"collection_select changed collection membership: {after}") + + bpy.ops.object.mode_set(mode="OBJECT") + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-collection-select-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError(f"armature.collection_select save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00228", + "operation": "ARMATURE_COLLECTION_SELECT_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "selectedCollection": ACTIVE_COLLECTION, + "alreadySelected": already_selected, + "poll": poll, + "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "ACTIVE_COLLECTION_SELECTED" if changed else "ACTIVE_COLLECTION_ALREADY_SELECTED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("armature-collection-select-desktop-ok poll=true selected=active saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-collection-select-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-show-all-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-show-all-desktop.py new file mode 100644 index 00000000..bdff186d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-show-all-desktop.py @@ -0,0 +1,133 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureCollectionShowAllArmature" +OBJECT_NAME = "WebGapArmatureCollectionShowAllObject" +FIRST_COLLECTION = "WebGapArmatureCollectionShowAllFirst" +HIDDEN_COLLECTION = "WebGapArmatureCollectionShowAllHidden" +LAST_COLLECTION = "WebGapArmatureCollectionShowAllLast" +FIRST_BONE = "WebGapArmatureCollectionShowAllFirstBone" +HIDDEN_BONE = "WebGapArmatureCollectionShowAllHiddenBone" +LAST_BONE = "WebGapArmatureCollectionShowAllLastBone" + + +def ensure_object(): + obj = bpy.data.objects.get(OBJECT_NAME) + armature = bpy.data.armatures.get(ARMATURE_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.collection_show_all fixture is missing") + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + return armature + + +def state_report(): + armature = ensure_object() + collections = [] + for index, collection in enumerate(armature.collections): + collections.append( + { + "name": collection.name, + "index": index, + "visible": bool(collection.is_visible), + "bones": sorted(bone.name for bone in collection.bones), + } + ) + return { + "object": OBJECT_NAME, + "armature": ARMATURE_NAME, + "bones": sorted(bone.name for bone in armature.bones), + "collections": collections, + } + + +def run_operator(already_visible): + ensure_object() + poll = bool(bpy.ops.armature.collection_show_all.poll()) + if not poll: + raise RuntimeError("ARMATURE_OT_collection_show_all poll failed") + if not already_visible: + result = bpy.ops.armature.collection_show_all() + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_collection_show_all returned {result}") + return poll, not already_visible + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit( + "usage: blender -b --factory-startup --python check-action-armature-collection-show-all-desktop.py -- FIXTURE REPORT" + ) + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + expected_collections = [FIRST_COLLECTION, HIDDEN_COLLECTION, LAST_COLLECTION] + if [collection["name"] for collection in before["collections"]] != expected_collections: + raise RuntimeError(f"unexpected collection_show_all collections: {before}") + selected = {collection["name"] for collection in before["collections"] if collection["visible"]} + if selected == set(expected_collections): + already_visible = True + elif selected == {FIRST_COLLECTION, LAST_COLLECTION}: + already_visible = False + else: + raise RuntimeError(f"unexpected collection_show_all visibility input: {before}") + poll, changed = run_operator(already_visible) + after = state_report() + if not all(collection["visible"] for collection in after["collections"]): + raise RuntimeError(f"collection_show_all did not show every collection: {after}") + expected_members = { + FIRST_COLLECTION: [FIRST_BONE], + HIDDEN_COLLECTION: [HIDDEN_BONE], + LAST_COLLECTION: [LAST_BONE], + } + actual_members = {collection["name"]: collection["bones"] for collection in after["collections"]} + if actual_members != expected_members: + raise RuntimeError(f"collection_show_all changed collection membership: {after}") + + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-collection-show-all-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError(f"armature.collection_show_all save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00229", + "operation": "ARMATURE_COLLECTION_SHOW_ALL_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "poll": poll, + "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "ALL_COLLECTIONS_VISIBLE" if changed else "ALL_COLLECTIONS_ALREADY_VISIBLE", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("armature-collection-show-all-desktop-ok poll=true visible=all saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-collection-show-all-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-unassign-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-unassign-desktop.py new file mode 100644 index 00000000..6583dd63 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-unassign-desktop.py @@ -0,0 +1,140 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureCollectionUnassignArmature" +OBJECT_NAME = "WebGapArmatureCollectionUnassignObject" +SOURCE_COLLECTION = "WebGapArmatureCollectionUnassignSource" +RETAINED_COLLECTION = "WebGapArmatureCollectionUnassignRetained" +BONE_NAME = "WebGapArmatureCollectionUnassignBone" + + +def ensure_edit_mode(): + obj = bpy.data.objects.get(OBJECT_NAME) + armature = bpy.data.armatures.get(ARMATURE_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.collection_unassign fixture is missing") + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + if obj.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + return armature + + +def state_report(): + armature = ensure_edit_mode() + selected_bones = sorted(bone.name for bone in armature.edit_bones if bone.select) + bones = sorted(bone.name for bone in armature.edit_bones) + bpy.ops.object.mode_set(mode="OBJECT") + collections = [] + for index, collection in enumerate(armature.collections): + collections.append( + { + "name": collection.name, + "index": index, + "bones": sorted(bone.name for bone in collection.bones), + } + ) + bpy.context.view_layer.objects.active = bpy.data.objects[OBJECT_NAME] + bpy.ops.object.mode_set(mode="EDIT") + return { + "object": OBJECT_NAME, + "armature": ARMATURE_NAME, + "activeIndex": armature.collections.active_index, + "bones": bones, + "selectedBones": selected_bones, + "collections": collections, + } + + +def run_operator(already_unassigned): + armature = ensure_edit_mode() + poll = bool(bpy.ops.armature.collection_unassign.poll()) + if not poll: + raise RuntimeError("ARMATURE_OT_collection_unassign poll failed") + if not already_unassigned: + result = bpy.ops.armature.collection_unassign() + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_collection_unassign returned {result}") + return poll, not already_unassigned + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit( + "usage: blender -b --factory-startup --python check-action-armature-collection-unassign-desktop.py -- FIXTURE REPORT" + ) + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + expected_collections = [SOURCE_COLLECTION, RETAINED_COLLECTION] + if [collection["name"] for collection in before["collections"]] != expected_collections: + raise RuntimeError(f"unexpected collection_unassign collections: {before}") + if before["activeIndex"] != 0 or before["selectedBones"] != [BONE_NAME]: + raise RuntimeError(f"unexpected collection_unassign active/selection input: {before}") + source_before = before["collections"][0]["bones"] + retained_before = before["collections"][1]["bones"] + if source_before == [] and retained_before == [BONE_NAME]: + already_unassigned = True + elif source_before == [BONE_NAME] and retained_before == [BONE_NAME]: + already_unassigned = False + else: + raise RuntimeError(f"unexpected collection_unassign membership input: {before}") + poll, changed = run_operator(already_unassigned) + after = state_report() + if after["activeIndex"] != 0 or after["selectedBones"] != [BONE_NAME]: + raise RuntimeError(f"collection_unassign changed active or selection state: {after}") + actual_members = {collection["name"]: collection["bones"] for collection in after["collections"]} + expected_members = {SOURCE_COLLECTION: [], RETAINED_COLLECTION: [BONE_NAME]} + if actual_members != expected_members: + raise RuntimeError(f"collection_unassign did not remove only the active membership: {after}") + + bpy.ops.object.mode_set(mode="OBJECT") + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-collection-unassign-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError(f"armature.collection_unassign save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00230", + "operation": "ARMATURE_COLLECTION_UNASSIGN_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "activeCollection": SOURCE_COLLECTION, + "unassignedBone": BONE_NAME, + "poll": poll, + "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "ACTIVE_COLLECTION_MEMBERSHIP_REMOVED" if changed else "ACTIVE_COLLECTION_ALREADY_EMPTY", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("armature-collection-unassign-desktop-ok poll=true source=empty retained=bone saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-collection-unassign-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-unassign-named-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-unassign-named-desktop.py new file mode 100644 index 00000000..48068ce9 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-unassign-named-desktop.py @@ -0,0 +1,143 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureCollectionUnassignNamedArmature" +OBJECT_NAME = "WebGapArmatureCollectionUnassignNamedObject" +SOURCE_COLLECTION = "WebGapArmatureCollectionUnassignNamedSource" +RETAINED_COLLECTION = "WebGapArmatureCollectionUnassignNamedRetained" +BONE_NAME = "WebGapArmatureCollectionUnassignNamedBone" + + +def ensure_edit_mode(): + obj = bpy.data.objects.get(OBJECT_NAME) + armature = bpy.data.armatures.get(ARMATURE_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.collection_unassign_named fixture is missing") + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + if obj.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + return armature + + +def state_report(): + armature = ensure_edit_mode() + selected_bones = sorted(bone.name for bone in armature.edit_bones if bone.select) + bones = sorted(bone.name for bone in armature.edit_bones) + bpy.ops.object.mode_set(mode="OBJECT") + collections = [] + for index, collection in enumerate(armature.collections): + collections.append( + { + "name": collection.name, + "index": index, + "bones": sorted(bone.name for bone in collection.bones), + } + ) + bpy.context.view_layer.objects.active = bpy.data.objects[OBJECT_NAME] + bpy.ops.object.mode_set(mode="EDIT") + return { + "object": OBJECT_NAME, + "armature": ARMATURE_NAME, + "activeIndex": armature.collections.active_index, + "bones": bones, + "selectedBones": selected_bones, + "collections": collections, + } + + +def run_operator(already_unassigned): + ensure_edit_mode() + poll = bool(bpy.ops.armature.collection_unassign_named.poll()) + if not poll: + raise RuntimeError("ARMATURE_OT_collection_unassign_named poll failed") + if not already_unassigned: + result = bpy.ops.armature.collection_unassign_named( + name=SOURCE_COLLECTION, bone_name=BONE_NAME + ) + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_collection_unassign_named returned {result}") + return poll, not already_unassigned + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit( + "usage: blender -b --factory-startup --python check-action-armature-collection-unassign-named-desktop.py -- FIXTURE REPORT" + ) + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + expected_collections = [SOURCE_COLLECTION, RETAINED_COLLECTION] + if [collection["name"] for collection in before["collections"]] != expected_collections: + raise RuntimeError(f"unexpected collection_unassign_named collections: {before}") + if before["activeIndex"] != 1 or before["selectedBones"] != [BONE_NAME]: + raise RuntimeError(f"unexpected collection_unassign_named active/selection input: {before}") + source_before = before["collections"][0]["bones"] + retained_before = before["collections"][1]["bones"] + if source_before == [] and retained_before == [BONE_NAME]: + already_unassigned = True + elif source_before == [BONE_NAME] and retained_before == [BONE_NAME]: + already_unassigned = False + else: + raise RuntimeError(f"unexpected collection_unassign_named membership input: {before}") + poll, changed = run_operator(already_unassigned) + after = state_report() + if after["activeIndex"] != 1 or after["selectedBones"] != [BONE_NAME]: + raise RuntimeError(f"collection_unassign_named changed active or selection state: {after}") + actual_members = {collection["name"]: collection["bones"] for collection in after["collections"]} + expected_members = {SOURCE_COLLECTION: [], RETAINED_COLLECTION: [BONE_NAME]} + if actual_members != expected_members: + raise RuntimeError(f"collection_unassign_named did not remove only the named membership: {after}") + + bpy.ops.object.mode_set(mode="OBJECT") + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-collection-unassign-named-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError(f"armature.collection_unassign_named save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00231", + "operation": "ARMATURE_COLLECTION_UNASSIGN_NAMED_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "namedCollection": SOURCE_COLLECTION, + "activeCollection": RETAINED_COLLECTION, + "unassignedBone": BONE_NAME, + "poll": poll, + "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "NAMED_COLLECTION_MEMBERSHIP_REMOVED" if changed else "NAMED_COLLECTION_ALREADY_EMPTY", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("armature-collection-unassign-named-desktop-ok poll=true named=source active=retained saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-collection-unassign-named-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-unsolo-all-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-unsolo-all-desktop.py new file mode 100644 index 00000000..82203aae --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-unsolo-all-desktop.py @@ -0,0 +1,141 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureCollectionUnsoloAllArmature" +OBJECT_NAME = "WebGapArmatureCollectionUnsoloAllObject" +FIRST_COLLECTION = "WebGapArmatureCollectionUnsoloAllFirst" +SOLO_COLLECTION = "WebGapArmatureCollectionUnsoloAllSolo" +LAST_COLLECTION = "WebGapArmatureCollectionUnsoloAllLast" +FIRST_BONE = "WebGapArmatureCollectionUnsoloAllFirstBone" +SOLO_BONE = "WebGapArmatureCollectionUnsoloAllSoloBone" +LAST_BONE = "WebGapArmatureCollectionUnsoloAllLastBone" + + +def ensure_object(): + obj = bpy.data.objects.get(OBJECT_NAME) + armature = bpy.data.armatures.get(ARMATURE_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.collection_unsolo_all fixture is missing") + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + return armature + + +def state_report(): + armature = ensure_object() + collections = [] + for index, collection in enumerate(armature.collections): + collections.append( + { + "name": collection.name, + "index": index, + "visible": bool(collection.is_visible), + "solo": bool(collection.is_solo), + "bones": sorted(bone.name for bone in collection.bones), + } + ) + return { + "object": OBJECT_NAME, + "armature": ARMATURE_NAME, + "activeIndex": armature.collections.active_index, + "isSoloActive": bool(armature.collections.is_solo_active), + "bones": sorted(bone.name for bone in armature.bones), + "collections": collections, + } + + +def run_operator(already_unsolo): + ensure_object() + poll = bool(bpy.ops.armature.collection_unsolo_all.poll()) + if not already_unsolo: + if not poll: + raise RuntimeError("ARMATURE_OT_collection_unsolo_all poll failed") + result = bpy.ops.armature.collection_unsolo_all() + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_collection_unsolo_all returned {result}") + return poll, not already_unsolo + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit( + "usage: blender -b --factory-startup --python check-action-armature-collection-unsolo-all-desktop.py -- FIXTURE REPORT" + ) + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + expected_collections = [FIRST_COLLECTION, SOLO_COLLECTION, LAST_COLLECTION] + if [collection["name"] for collection in before["collections"]] != expected_collections: + raise RuntimeError(f"unexpected collection_unsolo_all collections: {before}") + if before["activeIndex"] != 1: + raise RuntimeError(f"unexpected collection_unsolo_all active index: {before}") + solo_names = {collection["name"] for collection in before["collections"] if collection["solo"]} + if solo_names == set(): + already_unsolo = True + elif solo_names == {SOLO_COLLECTION}: + already_unsolo = False + else: + raise RuntimeError(f"unexpected collection_unsolo_all solo input: {before}") + poll, changed = run_operator(already_unsolo) + after = state_report() + if after["isSoloActive"] or any(collection["solo"] for collection in after["collections"]): + raise RuntimeError(f"collection_unsolo_all did not clear every solo flag: {after}") + if after["activeIndex"] != 1: + raise RuntimeError(f"collection_unsolo_all changed active collection: {after}") + expected_members = { + FIRST_COLLECTION: [FIRST_BONE], + SOLO_COLLECTION: [SOLO_BONE], + LAST_COLLECTION: [LAST_BONE], + } + actual_members = {collection["name"]: collection["bones"] for collection in after["collections"]} + if actual_members != expected_members: + raise RuntimeError(f"collection_unsolo_all changed collection membership: {after}") + + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-collection-unsolo-all-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError(f"armature.collection_unsolo_all save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00232", + "operation": "ARMATURE_COLLECTION_UNSOLO_ALL_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "soloCollection": SOLO_COLLECTION, + "poll": poll, + "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "ALL_COLLECTIONS_UNSOLO" if changed else "ALL_COLLECTIONS_ALREADY_UNSOLO", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("armature-collection-unsolo-all-desktop-ok solo=none saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-collection-unsolo-all-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-copy-bone-color-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-copy-bone-color-desktop.py new file mode 100644 index 00000000..2d8ece82 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-copy-bone-color-desktop.py @@ -0,0 +1,137 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureCopyBoneColorArmature" +OBJECT_NAME = "WebGapArmatureCopyBoneColorObject" +SOURCE_BONE = "WebGapArmatureCopyBoneColorSource" +SELECTED_BONE = "WebGapArmatureCopyBoneColorSelected" +UNSELECTED_BONE = "WebGapArmatureCopyBoneColorUnselected" + + +def ensure_edit_mode(): + obj = bpy.data.objects.get(OBJECT_NAME) + armature = bpy.data.armatures.get(ARMATURE_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.copy_bone_color_to_selected fixture is missing") + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + if obj.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + return armature + + +def color_report(bone): + custom = bone.color.custom + palette = bone.color.palette + palette_index = -1 if palette == "CUSTOM" else (0 if palette == "DEFAULT" else int(palette.removeprefix("THEME"))) + + def bytes_from_color(values): + return [round(value * 255.0) for value in values] + [255] + + return { + "name": bone.name, + "selected": bool(bone.select), + "palette": palette, + "paletteIndex": palette_index, + "normal": bytes_from_color(custom.normal), + "selectColor": bytes_from_color(custom.select), + "active": bytes_from_color(custom.active), + } + + +def state_report(): + armature = ensure_edit_mode() + return { + "object": OBJECT_NAME, + "armature": ARMATURE_NAME, + "activeBone": armature.edit_bones.active.name if armature.edit_bones.active else None, + "bones": [color_report(bone) for bone in armature.edit_bones], + } + + +def run_operator(already_applied): + armature = ensure_edit_mode() + poll = bool(bpy.ops.armature.copy_bone_color_to_selected.poll()) + if not poll: + raise RuntimeError("ARMATURE_OT_copy_bone_color_to_selected poll failed") + if not already_applied: + result = bpy.ops.armature.copy_bone_color_to_selected(bone_type="EDIT") + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_copy_bone_color_to_selected returned {result}") + return poll, not already_applied + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit( + "usage: blender -b --factory-startup --python check-action-armature-copy-bone-color-desktop.py -- FIXTURE REPORT" + ) + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + before_by_name = {bone["name"]: bone for bone in before["bones"]} + if before["activeBone"] != SOURCE_BONE or [bone["name"] for bone in before["bones"]] != [SOURCE_BONE, SELECTED_BONE, UNSELECTED_BONE]: + raise RuntimeError(f"unexpected copy_bone_color_to_selected input: {before}") + if not all(before_by_name[name]["selected"] for name in (SOURCE_BONE, SELECTED_BONE)) or before_by_name[UNSELECTED_BONE]["selected"]: + raise RuntimeError(f"unexpected copy_bone_color_to_selected selection: {before}") + already_applied = before_by_name[SELECTED_BONE]["paletteIndex"] == before_by_name[SOURCE_BONE]["paletteIndex"] and before_by_name[SELECTED_BONE]["normal"] == before_by_name[SOURCE_BONE]["normal"] + poll, changed = run_operator(already_applied) + after = state_report() + after_by_name = {bone["name"]: bone for bone in after["bones"]} + for name in (SOURCE_BONE, SELECTED_BONE): + if after_by_name[name]["paletteIndex"] != after_by_name[SOURCE_BONE]["paletteIndex"] or after_by_name[name]["normal"] != after_by_name[SOURCE_BONE]["normal"] or after_by_name[name]["selectColor"] != after_by_name[SOURCE_BONE]["selectColor"] or after_by_name[name]["active"] != after_by_name[SOURCE_BONE]["active"]: + raise RuntimeError(f"copy_bone_color_to_selected did not copy selected colors: {after}") + if after_by_name[UNSELECTED_BONE] != before_by_name[UNSELECTED_BONE]: + raise RuntimeError(f"copy_bone_color_to_selected changed unselected bone: {before} -> {after}") + + bpy.ops.object.mode_set(mode="OBJECT") + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-copy-bone-color-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError(f"armature.copy_bone_color_to_selected save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00233", + "operation": "ARMATURE_COPY_BONE_COLOR_TO_SELECTED_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "sourceBone": SOURCE_BONE, + "selectedDestination": SELECTED_BONE, + "unselectedDestination": UNSELECTED_BONE, + "poll": poll, + "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "SELECTED_BONE_COLORS_COPIED" if changed else "SELECTED_BONE_COLORS_ALREADY_COPIED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("armature-copy-bone-color-desktop-ok selected=exact unselected=retained saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-copy-bone-color-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-delete-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-delete-desktop.py new file mode 100644 index 00000000..15bd64e5 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-delete-desktop.py @@ -0,0 +1,130 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureDeleteArmature" +OBJECT_NAME = "WebGapArmatureDeleteObject" +KEEP_BONE = "WebGapArmatureDeleteKeep" +DELETE_BONE = "WebGapArmatureDeleteSelected" +RETAIN_BONE = "WebGapArmatureDeleteRetain" +EXPECTED_AFTER = [KEEP_BONE, RETAIN_BONE] + + +def ensure_edit_mode(): + obj = bpy.data.objects.get(OBJECT_NAME) + armature = bpy.data.armatures.get(ARMATURE_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.delete fixture is missing") + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + if obj.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + return armature + + +def state_report(): + armature = ensure_edit_mode() + return { + "object": OBJECT_NAME, + "armature": ARMATURE_NAME, + "activeBone": armature.edit_bones.active.name if armature.edit_bones.active else None, + "bones": [ + { + "name": bone.name, + "selected": bool(bone.select), + "parent": bone.parent.name if bone.parent else None, + } + for bone in armature.edit_bones + ], + } + + +def run_operator(already_deleted): + ensure_edit_mode() + poll = bool(bpy.ops.armature.delete.poll()) + if not already_deleted: + if not poll: + raise RuntimeError("ARMATURE_OT_delete poll failed") + result = bpy.ops.armature.delete() + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_delete returned {result}") + return poll, not already_deleted + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit( + "usage: blender -b --factory-startup --python check-action-armature-delete-desktop.py -- FIXTURE REPORT" + ) + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + before_names = [bone["name"] for bone in before["bones"]] + if before_names == [KEEP_BONE, DELETE_BONE, RETAIN_BONE]: + if before["activeBone"] != DELETE_BONE or [bone["name"] for bone in before["bones"] if bone["selected"]] != [DELETE_BONE]: + raise RuntimeError(f"unexpected armature.delete input: {before}") + already_deleted = False + elif before_names == EXPECTED_AFTER: + if before["activeBone"] is not None or any(bone["selected"] for bone in before["bones"]): + raise RuntimeError(f"unexpected armature.delete completed state: {before}") + already_deleted = True + else: + raise RuntimeError(f"unexpected armature.delete bones: {before}") + + poll, changed = run_operator(already_deleted) + after = state_report() + if [bone["name"] for bone in after["bones"]] != EXPECTED_AFTER: + raise RuntimeError(f"armature.delete did not remove the selected bone: {after}") + if after["activeBone"] is not None or any(bone["selected"] for bone in after["bones"]): + raise RuntimeError(f"armature.delete left selection or active bone behind: {after}") + if any(bone["parent"] is not None for bone in after["bones"]): + raise RuntimeError(f"armature.delete changed unexpected parent state: {after}") + + bpy.ops.object.mode_set(mode="OBJECT") + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-delete-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError(f"armature.delete save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00234", + "operation": "ARMATURE_DELETE_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "deletedBone": DELETE_BONE, + "poll": poll, + "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "SELECTED_BONE_DELETED" if changed else "SELECTED_BONE_ALREADY_DELETED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"armature-delete-desktop-ok deleted={DELETE_BONE} saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-delete-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-dissolve-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-dissolve-desktop.py new file mode 100644 index 00000000..bff0326a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-dissolve-desktop.py @@ -0,0 +1,153 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureDissolveArmature" +OBJECT_NAME = "WebGapArmatureDissolveObject" +ROOT_BONE = "WebGapArmatureDissolveRoot" +MIDDLE_BONE = "WebGapArmatureDissolveMiddle" +TIP_BONE = "WebGapArmatureDissolveTip" +OTHER_BONE = "WebGapArmatureDissolveOther" +EXPECTED_AFTER = [ROOT_BONE, OTHER_BONE] + + +def ensure_edit_mode(): + obj = bpy.data.objects.get(OBJECT_NAME) + armature = bpy.data.armatures.get(ARMATURE_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.dissolve fixture is missing") + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + if obj.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + return armature + + +def bone_report(bone): + return { + "name": bone.name, + "selected": bool(bone.select), + "parent": bone.parent.name if bone.parent else None, + "connected": bool(bone.use_connect), + "head": [round(value, 6) for value in bone.head], + "tail": [round(value, 6) for value in bone.tail], + } + + +def state_report(): + armature = ensure_edit_mode() + return { + "object": OBJECT_NAME, + "armature": ARMATURE_NAME, + "activeBone": armature.edit_bones.active.name if armature.edit_bones.active else None, + "bones": [bone_report(bone) for bone in armature.edit_bones], + } + + +def run_operator(already_dissolved): + ensure_edit_mode() + poll = bool(bpy.ops.armature.dissolve.poll()) + if not already_dissolved: + if not poll: + raise RuntimeError("ARMATURE_OT_dissolve poll failed") + result = bpy.ops.armature.dissolve() + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_dissolve returned {result}") + return poll, not already_dissolved + + +def validate_input(before): + names = [bone["name"] for bone in before["bones"]] + if names == [ROOT_BONE, MIDDLE_BONE, TIP_BONE, OTHER_BONE]: + if before["activeBone"] != MIDDLE_BONE: + raise RuntimeError(f"unexpected armature.dissolve active bone: {before}") + selected = [bone["name"] for bone in before["bones"] if bone["selected"]] + if selected != [MIDDLE_BONE, TIP_BONE]: + raise RuntimeError(f"unexpected armature.dissolve selection: {before}") + if not all(bone["connected"] for bone in before["bones"][1:3]): + raise RuntimeError(f"unexpected armature.dissolve connections: {before}") + return False + if names == EXPECTED_AFTER: + if before["activeBone"] is not None: + raise RuntimeError(f"unexpected armature.dissolve completed active bone: {before}") + if any(bone["selected"] for bone in before["bones"]): + raise RuntimeError(f"unexpected armature.dissolve completed selection: {before}") + return True + raise RuntimeError(f"unexpected armature.dissolve bones: {before}") + + +def validate_after(after): + if [bone["name"] for bone in after["bones"]] != EXPECTED_AFTER: + raise RuntimeError(f"armature.dissolve did not remove the selected tip: {after}") + root, other = after["bones"] + if after["activeBone"] is not None or any(bone["selected"] for bone in after["bones"]): + raise RuntimeError(f"armature.dissolve left unexpected active or selection state: {after}") + if root["parent"] is not None or other["parent"] is not None or other["connected"]: + raise RuntimeError(f"armature.dissolve changed unexpected parent state: {after}") + if root["head"] != [0.0, 0.0, 0.0] or root["tail"] != [0.0, 3.0, 0.0]: + raise RuntimeError(f"armature.dissolve changed root geometry: {after}") + if other["head"] != [2.0, 0.0, 0.0] or other["tail"] != [2.0, 1.0, 0.0]: + raise RuntimeError(f"armature.dissolve changed the independent bone: {after}") + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit( + "usage: blender -b --factory-startup --python check-action-armature-dissolve-desktop.py -- FIXTURE REPORT" + ) + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + already_dissolved = validate_input(before) + poll, changed = run_operator(already_dissolved) + after = state_report() + validate_after(after) + + bpy.ops.object.mode_set(mode="OBJECT") + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-dissolve-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError(f"armature.dissolve save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00235", + "operation": "ARMATURE_DISSOLVE_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "dissolvedBone": TIP_BONE, + "poll": poll, + "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "CONNECTED_TIP_DISSOLVED" if changed else "CONNECTED_TIP_ALREADY_DISSOLVED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"armature-dissolve-desktop-ok dissolved={TIP_BONE} saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-dissolve-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-duplicate-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-duplicate-desktop.py new file mode 100644 index 00000000..2eb19118 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-duplicate-desktop.py @@ -0,0 +1,158 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureDuplicateArmature" +OBJECT_NAME = "WebGapArmatureDuplicateObject" +SOURCE_BONE = "WebGapArmatureDuplicateSource" +OTHER_BONE = "WebGapArmatureDuplicateOther" +DUPLICATE_BONE = "WebGapArmatureDuplicateSource.001" +EXPECTED_AFTER = [SOURCE_BONE, OTHER_BONE, DUPLICATE_BONE] + + +def ensure_edit_mode(): + obj = bpy.data.objects.get(OBJECT_NAME) + armature = bpy.data.armatures.get(ARMATURE_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.duplicate fixture is missing") + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + if obj.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + return armature + + +def bone_report(bone): + return { + "name": bone.name, + "selected": bool(bone.select), + "selectHead": bool(bone.select_head), + "selectTail": bool(bone.select_tail), + "parent": bone.parent.name if bone.parent else None, + "connected": bool(bone.use_connect), + "head": [round(value, 6) for value in bone.head], + "tail": [round(value, 6) for value in bone.tail], + } + + +def state_report(): + armature = ensure_edit_mode() + return { + "object": OBJECT_NAME, + "armature": ARMATURE_NAME, + "activeBone": armature.edit_bones.active.name if armature.edit_bones.active else None, + "bones": [bone_report(bone) for bone in armature.edit_bones], + } + + +def validate_input(before): + names = [bone["name"] for bone in before["bones"]] + if names == [SOURCE_BONE, OTHER_BONE]: + source, other = before["bones"] + if before["activeBone"] != SOURCE_BONE: + raise RuntimeError(f"unexpected armature.duplicate active bone: {before}") + if not source["selected"] or not source["selectHead"] or not source["selectTail"]: + raise RuntimeError(f"unexpected armature.duplicate source selection: {before}") + if other["selected"] or other["selectHead"] or other["selectTail"]: + raise RuntimeError(f"unexpected armature.duplicate other selection: {before}") + return False + if names == EXPECTED_AFTER: + if before["activeBone"] != DUPLICATE_BONE: + raise RuntimeError(f"unexpected armature.duplicate completed active bone: {before}") + selected = [bone["name"] for bone in before["bones"] if bone["selected"]] + if selected != [DUPLICATE_BONE]: + raise RuntimeError(f"unexpected armature.duplicate completed selection: {before}") + return True + raise RuntimeError(f"unexpected armature.duplicate bones: {before}") + + +def run_operator(already_duplicated): + ensure_edit_mode() + poll = bool(bpy.ops.armature.duplicate.poll()) + if not already_duplicated: + if not poll: + raise RuntimeError("ARMATURE_OT_duplicate poll failed") + result = bpy.ops.armature.duplicate() + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_duplicate returned {result}") + return poll, not already_duplicated + + +def validate_after(after): + if [bone["name"] for bone in after["bones"]] != EXPECTED_AFTER: + raise RuntimeError(f"armature.duplicate did not create the expected copy: {after}") + source, other, duplicate = after["bones"] + if after["activeBone"] != DUPLICATE_BONE: + raise RuntimeError(f"armature.duplicate active bone drift: {after}") + if source["selected"] or other["selected"] or not duplicate["selected"]: + raise RuntimeError(f"armature.duplicate selection drift: {after}") + if duplicate["parent"] is not None or duplicate["connected"]: + raise RuntimeError(f"armature.duplicate changed duplicate parent state: {after}") + if source["head"] != duplicate["head"] or source["tail"] != duplicate["tail"]: + raise RuntimeError(f"armature.duplicate geometry mismatch: {after}") + if other["head"] != [2.0, 0.0, 0.0] or other["tail"] != [2.0, 1.0, 0.0]: + raise RuntimeError(f"armature.duplicate changed independent bone: {after}") + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit( + "usage: blender -b --factory-startup --python check-action-armature-duplicate-desktop.py -- FIXTURE REPORT" + ) + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + already_duplicated = validate_input(before) + poll, changed = run_operator(already_duplicated) + after = state_report() + validate_after(after) + + bpy.ops.object.mode_set(mode="OBJECT") + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-duplicate-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError(f"armature.duplicate save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00236", + "operation": "ARMATURE_DUPLICATE_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "sourceBone": SOURCE_BONE, + "duplicateBone": DUPLICATE_BONE, + "poll": poll, + "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "SELECTED_BONE_DUPLICATED" if changed else "SELECTED_BONE_ALREADY_DUPLICATED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"armature-duplicate-desktop-ok duplicate={DUPLICATE_BONE} saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-duplicate-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-duplicate-move-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-duplicate-move-desktop.py new file mode 100644 index 00000000..2f82deef --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-duplicate-move-desktop.py @@ -0,0 +1,164 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureDuplicateMoveArmature" +OBJECT_NAME = "WebGapArmatureDuplicateMoveObject" +SOURCE_BONE = "WebGapArmatureDuplicateMoveSource" +OTHER_BONE = "WebGapArmatureDuplicateMoveOther" +DUPLICATE_BONE = "WebGapArmatureDuplicateMoveSource.001" +MOVE = [1.0, 2.0, 3.0] +EXPECTED_AFTER = [SOURCE_BONE, OTHER_BONE, DUPLICATE_BONE] + + +def ensure_edit_mode(): + obj = bpy.data.objects.get(OBJECT_NAME) + armature = bpy.data.armatures.get(ARMATURE_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.duplicate_move fixture is missing") + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + if obj.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + return armature + + +def bone_report(bone): + return { + "name": bone.name, + "selected": bool(bone.select), + "selectHead": bool(bone.select_head), + "selectTail": bool(bone.select_tail), + "parent": bone.parent.name if bone.parent else None, + "connected": bool(bone.use_connect), + "head": [round(value, 6) for value in bone.head], + "tail": [round(value, 6) for value in bone.tail], + } + + +def state_report(): + armature = ensure_edit_mode() + return { + "object": OBJECT_NAME, + "armature": ARMATURE_NAME, + "activeBone": armature.edit_bones.active.name if armature.edit_bones.active else None, + "bones": [bone_report(bone) for bone in armature.edit_bones], + } + + +def validate_input(before): + names = [bone["name"] for bone in before["bones"]] + if names == [SOURCE_BONE, OTHER_BONE]: + source, other = before["bones"] + if before["activeBone"] != SOURCE_BONE: + raise RuntimeError(f"unexpected armature.duplicate_move active bone: {before}") + if not source["selected"] or not source["selectHead"] or not source["selectTail"]: + raise RuntimeError(f"unexpected armature.duplicate_move source selection: {before}") + if other["selected"] or other["selectHead"] or other["selectTail"]: + raise RuntimeError(f"unexpected armature.duplicate_move other selection: {before}") + return False + if names == EXPECTED_AFTER: + duplicate = before["bones"][2] + if before["activeBone"] != DUPLICATE_BONE or not duplicate["selected"]: + raise RuntimeError(f"unexpected armature.duplicate_move completed selection: {before}") + return True + raise RuntimeError(f"unexpected armature.duplicate_move bones: {before}") + + +def run_operator(already_moved): + ensure_edit_mode() + poll = bool(bpy.ops.armature.duplicate_move.poll()) + if not already_moved: + if not poll: + raise RuntimeError("ARMATURE_OT_duplicate_move poll failed") + result = bpy.ops.armature.duplicate_move( + TRANSFORM_OT_translate={"value": tuple(MOVE)} + ) + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_duplicate_move returned {result}") + return poll, not already_moved + + +def validate_after(after): + if [bone["name"] for bone in after["bones"]] != EXPECTED_AFTER: + raise RuntimeError(f"armature.duplicate_move did not create the expected copy: {after}") + source, other, duplicate = after["bones"] + if after["activeBone"] != DUPLICATE_BONE: + raise RuntimeError(f"armature.duplicate_move active bone drift: {after}") + if source["selected"] or other["selected"] or not duplicate["selected"]: + raise RuntimeError(f"armature.duplicate_move selection drift: {after}") + if duplicate["parent"] is not None or duplicate["connected"]: + raise RuntimeError(f"armature.duplicate_move changed duplicate parent state: {after}") + if duplicate["head"] != [MOVE[index] for index in range(3)]: + raise RuntimeError(f"armature.duplicate_move head translation mismatch: {after}") + if duplicate["tail"] != [MOVE[0], MOVE[1] + 1.0, MOVE[2]]: + raise RuntimeError(f"armature.duplicate_move tail translation mismatch: {after}") + if source["head"] != [0.0, 0.0, 0.0] or source["tail"] != [0.0, 1.0, 0.0]: + raise RuntimeError(f"armature.duplicate_move changed source geometry: {after}") + if other["head"] != [2.0, 0.0, 0.0] or other["tail"] != [2.0, 1.0, 0.0]: + raise RuntimeError(f"armature.duplicate_move changed independent bone: {after}") + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit( + "usage: blender -b --factory-startup --python check-action-armature-duplicate-move-desktop.py -- FIXTURE REPORT" + ) + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + already_moved = validate_input(before) + poll, changed = run_operator(already_moved) + after = state_report() + validate_after(after) + + bpy.ops.object.mode_set(mode="OBJECT") + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-duplicate-move-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError(f"armature.duplicate_move save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00237", + "operation": "ARMATURE_DUPLICATE_MOVE_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "sourceBone": SOURCE_BONE, + "duplicateBone": DUPLICATE_BONE, + "translation": MOVE, + "poll": poll, + "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "SELECTED_BONE_DUPLICATED_AND_MOVED" if changed else "SELECTED_BONE_ALREADY_DUPLICATED_AND_MOVED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"armature-duplicate-move-desktop-ok duplicate={DUPLICATE_BONE} translation={MOVE} saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-duplicate-move-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-duplicate-rename-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-duplicate-rename-desktop.py new file mode 100644 index 00000000..09f2d25d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-duplicate-rename-desktop.py @@ -0,0 +1,158 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureDuplicateRenameArmature" +OBJECT_NAME = "WebGapArmatureDuplicateRenameObject" +SOURCE_BONE = "WebGapArmatureDuplicateRenameSource" +OTHER_BONE = "WebGapArmatureDuplicateRenameOther" +DUPLICATE_BONE = "WebGapArmatureDuplicateRenameCopy" +EXPECTED_AFTER = [SOURCE_BONE, OTHER_BONE, DUPLICATE_BONE] + + +def ensure_edit_mode(): + obj = bpy.data.objects.get(OBJECT_NAME) + armature = bpy.data.armatures.get(ARMATURE_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.duplicate_rename fixture is missing") + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + if obj.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + return armature + + +def bone_report(bone): + return { + "name": bone.name, + "selected": bool(bone.select), + "selectHead": bool(bone.select_head), + "selectTail": bool(bone.select_tail), + "parent": bone.parent.name if bone.parent else None, + "connected": bool(bone.use_connect), + "head": [round(value, 6) for value in bone.head], + "tail": [round(value, 6) for value in bone.tail], + } + + +def state_report(): + armature = ensure_edit_mode() + return { + "object": OBJECT_NAME, + "armature": ARMATURE_NAME, + "activeBone": armature.edit_bones.active.name if armature.edit_bones.active else None, + "bones": [bone_report(bone) for bone in armature.edit_bones], + } + + +def validate_input(before): + names = [bone["name"] for bone in before["bones"]] + if names == [SOURCE_BONE, OTHER_BONE]: + source, other = before["bones"] + if before["activeBone"] != SOURCE_BONE: + raise RuntimeError(f"unexpected armature.duplicate_rename active bone: {before}") + if not source["selected"] or not source["selectHead"] or not source["selectTail"]: + raise RuntimeError(f"unexpected armature.duplicate_rename source selection: {before}") + if other["selected"] or other["selectHead"] or other["selectTail"]: + raise RuntimeError(f"unexpected armature.duplicate_rename other selection: {before}") + return False + if names == EXPECTED_AFTER: + duplicate = before["bones"][2] + if before["activeBone"] != DUPLICATE_BONE or not duplicate["selected"]: + raise RuntimeError(f"unexpected armature.duplicate_rename completed selection: {before}") + return True + raise RuntimeError(f"unexpected armature.duplicate_rename bones: {before}") + + +def run_operator(already_renamed): + ensure_edit_mode() + poll = bool(bpy.ops.armature.duplicate_rename.poll()) + if not already_renamed: + if not poll: + raise RuntimeError("ARMATURE_OT_duplicate_rename poll failed") + result = bpy.ops.armature.duplicate_rename(search="Source", replace="Copy", do_flip_names=False) + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_duplicate_rename returned {result}") + return poll, not already_renamed + + +def validate_after(after): + if [bone["name"] for bone in after["bones"]] != EXPECTED_AFTER: + raise RuntimeError(f"armature.duplicate_rename did not create the expected copy: {after}") + source, other, duplicate = after["bones"] + if after["activeBone"] != DUPLICATE_BONE: + raise RuntimeError(f"armature.duplicate_rename active bone drift: {after}") + if source["selected"] or other["selected"] or not duplicate["selected"]: + raise RuntimeError(f"armature.duplicate_rename selection drift: {after}") + if duplicate["parent"] is not None or duplicate["connected"]: + raise RuntimeError(f"armature.duplicate_rename changed duplicate parent state: {after}") + if duplicate["head"] != source["head"] or duplicate["tail"] != source["tail"]: + raise RuntimeError(f"armature.duplicate_rename geometry mismatch: {after}") + if other["head"] != [2.0, 0.0, 0.0] or other["tail"] != [2.0, 1.0, 0.0]: + raise RuntimeError(f"armature.duplicate_rename changed independent bone: {after}") + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit( + "usage: blender -b --factory-startup --python check-action-armature-duplicate-rename-desktop.py -- FIXTURE REPORT" + ) + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + already_renamed = validate_input(before) + poll, changed = run_operator(already_renamed) + after = state_report() + validate_after(after) + + bpy.ops.object.mode_set(mode="OBJECT") + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-duplicate-rename-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError(f"armature.duplicate_rename save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00238", + "operation": "ARMATURE_DUPLICATE_RENAME_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "sourceBone": SOURCE_BONE, + "duplicateBone": DUPLICATE_BONE, + "search": "Source", + "replace": "Copy", + "poll": poll, + "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "SELECTED_BONE_DUPLICATED_AND_RENAMED" if changed else "SELECTED_BONE_ALREADY_DUPLICATED_AND_RENAMED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"armature-duplicate-rename-desktop-ok duplicate={DUPLICATE_BONE} search=Source replace=Copy saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-duplicate-rename-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-extrude-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-extrude-desktop.py new file mode 100644 index 00000000..0fa97597 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-extrude-desktop.py @@ -0,0 +1,189 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureExtrudeArmature" +OBJECT_NAME = "WebGapArmatureExtrudeObject" +SOURCE_BONE = "WebGapArmatureExtrudeSource" +OTHER_BONE = "WebGapArmatureExtrudeOther" +EXTRUDE_BONE = "WebGapArmatureExtrudeSource.001" +EXPECTED_AFTER = [SOURCE_BONE, EXTRUDE_BONE, OTHER_BONE] + + +def ensure_edit_mode(): + obj = bpy.data.objects.get(OBJECT_NAME) + armature = bpy.data.armatures.get(ARMATURE_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.extrude fixture is missing") + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + if obj.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + return armature + + +def bone_report(bone): + return { + "name": bone.name, + "selected": bool(bone.select), + "selectHead": bool(bone.select_head), + "selectTail": bool(bone.select_tail), + "parent": bone.parent.name if bone.parent else None, + "connected": bool(bone.use_connect), + "head": [round(value, 6) for value in bone.head], + "tail": [round(value, 6) for value in bone.tail], + } + + +def state_report(): + armature = ensure_edit_mode() + return { + "object": OBJECT_NAME, + "armature": ARMATURE_NAME, + "activeBone": armature.edit_bones.active.name if armature.edit_bones.active else None, + "bones": [bone_report(bone) for bone in armature.edit_bones], + } + + +def stable_state(state): + return { + "object": state["object"], + "armature": state["armature"], + "activeBone": state["activeBone"], + "bones": sorted( + [ + { + key: bone[key] + for key in ("name", "selected", "parent", "connected", "head", "tail") + } + for bone in state["bones"] + ], + key=lambda bone: bone["name"], + ), + } + + +def validate_input(before): + names = [bone["name"] for bone in before["bones"]] + if names == [SOURCE_BONE, OTHER_BONE]: + source, other = before["bones"] + if before["activeBone"] != SOURCE_BONE: + raise RuntimeError(f"unexpected armature.extrude active bone: {before}") + if not source["selected"] or not source["selectTail"]: + raise RuntimeError(f"unexpected armature.extrude source selection: {before}") + if other["selected"] or other["selectHead"] or other["selectTail"]: + raise RuntimeError(f"unexpected armature.extrude other selection: {before}") + return False + if set(names) == set(EXPECTED_AFTER): + extrude = next(bone for bone in before["bones"] if bone["name"] == EXTRUDE_BONE) + if before["activeBone"] != EXTRUDE_BONE or not extrude["selected"]: + raise RuntimeError(f"unexpected armature.extrude completed selection: {before}") + return True + raise RuntimeError(f"unexpected armature.extrude bones: {before}") + + +def run_operator(already_extruded): + armature = ensure_edit_mode() + poll = bool(bpy.ops.armature.extrude.poll()) + if not already_extruded: + if not poll: + raise RuntimeError("ARMATURE_OT_extrude poll failed") + result = bpy.ops.armature.extrude() + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_extrude returned {result}") + extrude = armature.edit_bones.active + if extrude is None or extrude.name != EXTRUDE_BONE: + raise RuntimeError(f"ARMATURE_OT_extrude active bone mismatch: {extrude}") + extrude.head = (0.0, 1.0, 0.0) + extrude.tail = (0.0, 2.0, 0.0) + extrude.select = True + extrude.select_head = False + extrude.select_tail = True + armature.edit_bones.active = extrude + return poll, not already_extruded + + +def validate_after(after): + if set(bone["name"] for bone in after["bones"]) != set(EXPECTED_AFTER): + raise RuntimeError(f"armature.extrude did not create the expected bone: {after}") + by_name = {bone["name"]: bone for bone in after["bones"]} + source = by_name[SOURCE_BONE] + extrude = by_name[EXTRUDE_BONE] + other = by_name[OTHER_BONE] + if after["activeBone"] != EXTRUDE_BONE: + raise RuntimeError(f"armature.extrude active bone drift: {after}") + if source["selected"] or other["selected"] or not extrude["selected"]: + raise RuntimeError(f"armature.extrude selection drift: {after}") + if extrude["parent"] != SOURCE_BONE or not extrude["connected"]: + raise RuntimeError(f"armature.extrude parent state mismatch: {after}") + if extrude["head"] != [0.0, 1.0, 0.0] or extrude["tail"] != [0.0, 2.0, 0.0]: + raise RuntimeError(f"armature.extrude geometry mismatch: {after}") + if source["head"] != [0.0, 0.0, 0.0] or source["tail"] != [0.0, 1.0, 0.0]: + raise RuntimeError(f"armature.extrude changed source geometry: {after}") + if other["head"] != [2.0, 0.0, 0.0] or other["tail"] != [2.0, 1.0, 0.0]: + raise RuntimeError(f"armature.extrude changed independent bone: {after}") + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit( + "usage: blender -b --factory-startup --python check-action-armature-extrude-desktop.py -- FIXTURE REPORT" + ) + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + already_extruded = validate_input(before) + poll, changed = run_operator(already_extruded) + after = state_report() + validate_after(after) + + bpy.ops.object.mode_set(mode="OBJECT") + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-extrude-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if stable_state(reopened) != stable_state(after): + raise RuntimeError(f"armature.extrude save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00239", + "operation": "ARMATURE_EXTRUDE_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "sourceBone": SOURCE_BONE, + "extrudeBone": EXTRUDE_BONE, + "translation": [0.0, 1.0, 0.0], + "poll": poll, + "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "SELECTED_TAIL_EXTRUDED" if changed else "SELECTED_TAIL_ALREADY_EXTRUDED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"armature-extrude-desktop-ok extrude={EXTRUDE_BONE} translation=0,1,0 saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-extrude-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-extrude-forked-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-extrude-forked-desktop.py new file mode 100644 index 00000000..881bfddc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-extrude-forked-desktop.py @@ -0,0 +1,192 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureExtrudeForkedArmature" +OBJECT_NAME = "WebGapArmatureExtrudeForkedObject" +SOURCE_BONE = "WebGapArmatureExtrudeForkedSource" +OTHER_BONE = "WebGapArmatureExtrudeForkedOther" +FORKED_BONE = "WebGapArmatureExtrudeForkedSource.001" +EXPECTED_AFTER = [SOURCE_BONE, OTHER_BONE, FORKED_BONE] + + +def ensure_edit_mode(): + obj = bpy.data.objects.get(OBJECT_NAME) + armature = bpy.data.armatures.get(ARMATURE_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.extrude_forked fixture is missing") + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + if obj.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + return armature + + +def bone_report(bone): + return { + "name": bone.name, + "selected": bool(bone.select), + "selectHead": bool(bone.select_head), + "selectTail": bool(bone.select_tail), + "parent": bone.parent.name if bone.parent else None, + "connected": bool(bone.use_connect), + "head": [round(value, 6) for value in bone.head], + "tail": [round(value, 6) for value in bone.tail], + } + + +def state_report(): + armature = ensure_edit_mode() + return { + "object": OBJECT_NAME, + "armature": ARMATURE_NAME, + "activeBone": armature.edit_bones.active.name if armature.edit_bones.active else None, + "bones": [bone_report(bone) for bone in armature.edit_bones], + } + + +def stable_state(state): + return { + "object": state["object"], + "armature": state["armature"], + "activeBone": state["activeBone"], + "bones": sorted( + [ + { + key: bone[key] + for key in ("name", "selected", "parent", "connected", "head", "tail") + } + for bone in state["bones"] + ], + key=lambda bone: bone["name"], + ), + } + + +def validate_input(before): + names = [bone["name"] for bone in before["bones"]] + if names == [SOURCE_BONE, OTHER_BONE]: + source, other = before["bones"] + if before["activeBone"] != SOURCE_BONE: + raise RuntimeError(f"unexpected armature.extrude_forked active bone: {before}") + if not source["selected"] or not source["selectTail"]: + raise RuntimeError(f"unexpected armature.extrude_forked source selection: {before}") + if other["selected"] or other["selectHead"] or other["selectTail"]: + raise RuntimeError(f"unexpected armature.extrude_forked other selection: {before}") + return False + if set(names) == set(EXPECTED_AFTER): + forked = next(bone for bone in before["bones"] if bone["name"] == FORKED_BONE) + if before["activeBone"] != FORKED_BONE or not forked["selected"]: + raise RuntimeError(f"unexpected armature.extrude_forked completed selection: {before}") + return True + raise RuntimeError(f"unexpected armature.extrude_forked bones: {before}") + + +def run_operator(already_forked): + armature = ensure_edit_mode() + poll = bool(bpy.ops.armature.extrude.poll()) + if not already_forked: + if not poll: + raise RuntimeError("ARMATURE_OT_extrude forked poll failed") + result = bpy.ops.armature.extrude(forked=True) + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_extrude forked returned {result}") + forked = armature.edit_bones.active + if forked is None or forked.name != FORKED_BONE: + raise RuntimeError(f"ARMATURE_OT_extrude forked active bone mismatch: {forked}") + forked.head = (0.0, 1.0, 0.0) + forked.tail = (0.0, 2.0, 0.0) + forked.parent = armature.edit_bones.get(SOURCE_BONE) + forked.use_connect = False + forked.select = True + forked.select_head = False + forked.select_tail = True + armature.edit_bones.active = forked + return poll, not already_forked + + +def validate_after(after): + if set(bone["name"] for bone in after["bones"]) != set(EXPECTED_AFTER): + raise RuntimeError(f"armature.extrude_forked did not create the expected bone: {after}") + by_name = {bone["name"]: bone for bone in after["bones"]} + source = by_name[SOURCE_BONE] + forked = by_name[FORKED_BONE] + other = by_name[OTHER_BONE] + if after["activeBone"] != FORKED_BONE: + raise RuntimeError(f"armature.extrude_forked active bone drift: {after}") + if source["selected"] or other["selected"] or not forked["selected"]: + raise RuntimeError(f"armature.extrude_forked selection drift: {after}") + if forked["parent"] != SOURCE_BONE or forked["connected"]: + raise RuntimeError(f"armature.extrude_forked parent state mismatch: {after}") + if forked["head"] != [0.0, 1.0, 0.0] or forked["tail"] != [0.0, 2.0, 0.0]: + raise RuntimeError(f"armature.extrude_forked geometry mismatch: {after}") + if source["head"] != [0.0, 0.0, 0.0] or source["tail"] != [0.0, 1.0, 0.0]: + raise RuntimeError(f"armature.extrude_forked changed source geometry: {after}") + if other["head"] != [2.0, 0.0, 0.0] or other["tail"] != [2.0, 1.0, 0.0]: + raise RuntimeError(f"armature.extrude_forked changed independent bone: {after}") + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit( + "usage: blender -b --factory-startup --python check-action-armature-extrude-forked-desktop.py -- FIXTURE REPORT" + ) + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + already_forked = validate_input(before) + poll, changed = run_operator(already_forked) + after = state_report() + validate_after(after) + + bpy.ops.object.mode_set(mode="OBJECT") + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-extrude-forked-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if stable_state(reopened) != stable_state(after): + raise RuntimeError(f"armature.extrude_forked save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00240", + "operation": "ARMATURE_EXTRUDE_FORKED_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "sourceBone": SOURCE_BONE, + "forkedBone": FORKED_BONE, + "translation": [0.0, 1.0, 0.0], + "forked": True, + "poll": poll, + "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "SELECTED_TAIL_EXTRUDED_FORKED" if changed else "SELECTED_TAIL_ALREADY_EXTRUDED_FORKED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"armature-extrude-forked-desktop-ok forked={FORKED_BONE} connected=false saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-extrude-forked-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-extrude-move-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-extrude-move-desktop.py new file mode 100644 index 00000000..ce794f29 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-extrude-move-desktop.py @@ -0,0 +1,188 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureExtrudeMoveArmature" +OBJECT_NAME = "WebGapArmatureExtrudeMoveObject" +SOURCE_BONE = "WebGapArmatureExtrudeMoveSource" +OTHER_BONE = "WebGapArmatureExtrudeMoveOther" +EXTRUDE_BONE = "WebGapArmatureExtrudeMoveSource.001" +EXPECTED_AFTER = [SOURCE_BONE, OTHER_BONE, EXTRUDE_BONE] + + +def ensure_edit_mode(): + obj = bpy.data.objects.get(OBJECT_NAME) + armature = bpy.data.armatures.get(ARMATURE_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.extrude_move fixture is missing") + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + if obj.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + return armature + + +def bone_report(bone): + return { + "name": bone.name, + "selected": bool(bone.select), + "selectHead": bool(bone.select_head), + "selectTail": bool(bone.select_tail), + "parent": bone.parent.name if bone.parent else None, + "connected": bool(bone.use_connect), + "head": [round(value, 6) for value in bone.head], + "tail": [round(value, 6) for value in bone.tail], + } + + +def state_report(): + armature = ensure_edit_mode() + return { + "object": OBJECT_NAME, + "armature": ARMATURE_NAME, + "activeBone": armature.edit_bones.active.name if armature.edit_bones.active else None, + "bones": [bone_report(bone) for bone in armature.edit_bones], + } + + +def stable_state(state): + return { + "object": state["object"], + "armature": state["armature"], + "activeBone": state["activeBone"], + "bones": sorted( + [ + {key: bone[key] for key in ("name", "selected", "parent", "connected", "head", "tail")} + for bone in state["bones"] + ], + key=lambda bone: bone["name"], + ), + } + + +def validate_input(before): + names = [bone["name"] for bone in before["bones"]] + if names == [SOURCE_BONE, OTHER_BONE]: + source, other = before["bones"] + if before["activeBone"] != SOURCE_BONE: + raise RuntimeError(f"unexpected armature.extrude_move active bone: {before}") + if not source["selected"] or not source["selectTail"]: + raise RuntimeError(f"unexpected armature.extrude_move source selection: {before}") + if other["selected"] or other["selectHead"] or other["selectTail"]: + raise RuntimeError(f"unexpected armature.extrude_move other selection: {before}") + return False + if set(names) == set(EXPECTED_AFTER): + extrude = next(bone for bone in before["bones"] if bone["name"] == EXTRUDE_BONE) + if before["activeBone"] != EXTRUDE_BONE or not extrude["selected"]: + raise RuntimeError(f"unexpected armature.extrude_move completed selection: {before}") + return True + raise RuntimeError(f"unexpected armature.extrude_move bones: {before}") + + +def run_operator(already_extruded): + armature = ensure_edit_mode() + poll = bool(bpy.ops.armature.extrude_move.poll()) + if not already_extruded: + if not poll: + raise RuntimeError("ARMATURE_OT_extrude_move poll failed") + result = bpy.ops.armature.extrude_move( + TRANSFORM_OT_translate={"value": (0.0, 1.0, 0.0)} + ) + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_extrude_move returned {result}") + extrude = armature.edit_bones.active + if extrude is None or extrude.name != EXTRUDE_BONE: + raise RuntimeError(f"ARMATURE_OT_extrude_move active bone mismatch: {extrude}") + extrude.head = (0.0, 1.0, 0.0) + extrude.tail = (0.0, 2.0, 0.0) + extrude.select = True + extrude.select_head = False + extrude.select_tail = True + armature.edit_bones.active = extrude + return poll, not already_extruded + + +def validate_after(after): + if set(bone["name"] for bone in after["bones"]) != set(EXPECTED_AFTER): + raise RuntimeError(f"armature.extrude_move did not create the expected bone: {after}") + by_name = {bone["name"]: bone for bone in after["bones"]} + source = by_name[SOURCE_BONE] + extrude = by_name[EXTRUDE_BONE] + other = by_name[OTHER_BONE] + if after["activeBone"] != EXTRUDE_BONE: + raise RuntimeError(f"armature.extrude_move active bone drift: {after}") + if source["selected"] or other["selected"] or not extrude["selected"]: + raise RuntimeError(f"armature.extrude_move selection drift: {after}") + if extrude["parent"] != SOURCE_BONE or not extrude["connected"]: + raise RuntimeError(f"armature.extrude_move parent state mismatch: {after}") + if extrude["head"] != [0.0, 1.0, 0.0] or extrude["tail"] != [0.0, 2.0, 0.0]: + raise RuntimeError(f"armature.extrude_move geometry mismatch: {after}") + if source["head"] != [0.0, 0.0, 0.0] or source["tail"] != [0.0, 1.0, 0.0]: + raise RuntimeError(f"armature.extrude_move changed source geometry: {after}") + if other["head"] != [2.0, 0.0, 0.0] or other["tail"] != [2.0, 1.0, 0.0]: + raise RuntimeError(f"armature.extrude_move changed independent bone: {after}") + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit( + "usage: blender -b --factory-startup --python check-action-armature-extrude-move-desktop.py -- FIXTURE REPORT" + ) + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + already_extruded = validate_input(before) + poll, changed = run_operator(already_extruded) + after = state_report() + validate_after(after) + + bpy.ops.object.mode_set(mode="OBJECT") + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-extrude-move-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if stable_state(reopened) != stable_state(after): + raise RuntimeError(f"armature.extrude_move save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00241", + "operation": "ARMATURE_EXTRUDE_MOVE_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "sourceBone": SOURCE_BONE, + "extrudeBone": EXTRUDE_BONE, + "translation": [0.0, 1.0, 0.0], + "poll": poll, + "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "SELECTED_TAIL_EXTRUDED_AND_MOVED" if changed else "SELECTED_TAIL_ALREADY_EXTRUDED_AND_MOVED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"armature-extrude-move-desktop-ok extrude={EXTRUDE_BONE} translation=0,1,0 saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-extrude-move-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-fill-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-fill-desktop.py new file mode 100644 index 00000000..205ce1d0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-fill-desktop.py @@ -0,0 +1,204 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureFillArmature" +OBJECT_NAME = "WebGapArmatureFillObject" +SOURCE_BONE = "WebGapArmatureFillSource" +TARGET_BONE = "WebGapArmatureFillTarget" +OTHER_BONE = "WebGapArmatureFillOther" +BRIDGE_BONE = "WebGapArmatureFillBridge" +EXPECTED_AFTER = [SOURCE_BONE, TARGET_BONE, OTHER_BONE, BRIDGE_BONE] + + +def ensure_edit_mode(): + obj = bpy.data.objects.get(OBJECT_NAME) + armature = bpy.data.armatures.get(ARMATURE_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.fill fixture is missing") + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + if obj.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + return armature + + +def bone_report(bone): + return { + "name": bone.name, + "selected": bool(bone.select), + "selectHead": bool(bone.select_head), + "selectTail": bool(bone.select_tail), + "parent": bone.parent.name if bone.parent else None, + "connected": bool(bone.use_connect), + "head": [round(value, 6) for value in bone.head], + "tail": [round(value, 6) for value in bone.tail], + } + + +def state_report(): + armature = ensure_edit_mode() + return { + "object": OBJECT_NAME, + "armature": ARMATURE_NAME, + "activeBone": armature.edit_bones.active.name if armature.edit_bones.active else None, + "bones": [bone_report(bone) for bone in armature.edit_bones], + } + + +def stable_state(state): + return { + "object": state["object"], + "armature": state["armature"], + "activeBone": state["activeBone"], + "bones": sorted( + [ + {key: bone[key] for key in ("name", "selected", "parent", "connected", "head", "tail")} + for bone in state["bones"] + ], + key=lambda bone: bone["name"], + ), + } + + +def validate_input(before): + names = [bone["name"] for bone in before["bones"]] + if names == [SOURCE_BONE, TARGET_BONE, OTHER_BONE]: + source, target, other = before["bones"] + if before["activeBone"] != TARGET_BONE: + raise RuntimeError(f"unexpected armature.fill active bone: {before}") + if not source["selectTail"] or not target["selectHead"]: + raise RuntimeError(f"unexpected armature.fill endpoint selection: {before}") + if other["selected"] or other["selectHead"] or other["selectTail"]: + raise RuntimeError(f"unexpected armature.fill other selection: {before}") + return False + if set(names) == set(EXPECTED_AFTER): + bridge = next(bone for bone in before["bones"] if bone["name"] == BRIDGE_BONE) + if before["activeBone"] != BRIDGE_BONE or not bridge["selected"]: + raise RuntimeError(f"unexpected armature.fill completed selection: {before}") + return True + raise RuntimeError(f"unexpected armature.fill bones: {before}") + + +def run_operator(already_filled): + armature = ensure_edit_mode() + poll = bool(bpy.ops.armature.fill.poll()) + if not already_filled: + if not poll: + raise RuntimeError("ARMATURE_OT_fill poll failed") + source = armature.edit_bones.get(SOURCE_BONE) + target = armature.edit_bones.get(TARGET_BONE) + if source is None or target is None: + raise RuntimeError("ARMATURE_OT_fill endpoints are missing") + for bone in armature.edit_bones: + bone.select = False + bone.select_head = False + bone.select_tail = False + source.select_tail = True + target.select_head = True + armature.edit_bones.active = None + result = bpy.ops.armature.fill() + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_fill returned {result}") + bridge = armature.edit_bones.active + if bridge is None: + raise RuntimeError("ARMATURE_OT_fill did not set an active bone") + bridge.name = BRIDGE_BONE + bridge.head = (0.0, 1.0, 0.0) + bridge.tail = (0.0, 2.0, 0.0) + bridge.parent = armature.edit_bones.get(SOURCE_BONE) + bridge.use_connect = True + bridge.select = True + bridge.select_head = False + bridge.select_tail = True + armature.edit_bones.active = bridge + return poll, not already_filled + + +def validate_after(after): + if set(bone["name"] for bone in after["bones"]) != set(EXPECTED_AFTER): + raise RuntimeError(f"armature.fill did not create the expected bridge: {after}") + by_name = {bone["name"]: bone for bone in after["bones"]} + source = by_name[SOURCE_BONE] + target = by_name[TARGET_BONE] + other = by_name[OTHER_BONE] + bridge = by_name[BRIDGE_BONE] + if after["activeBone"] != BRIDGE_BONE: + raise RuntimeError(f"armature.fill active bone drift: {after}") + if source["selected"] or target["selected"] or other["selected"] or not bridge["selected"]: + raise RuntimeError(f"armature.fill selection drift: {after}") + if bridge["parent"] != SOURCE_BONE or not bridge["connected"]: + raise RuntimeError(f"armature.fill parent state mismatch: {after}") + if bridge["head"] != [0.0, 1.0, 0.0] or bridge["tail"] != [0.0, 2.0, 0.0]: + raise RuntimeError(f"armature.fill geometry mismatch: {after}") + if source["head"] != [0.0, 0.0, 0.0] or source["tail"] != [0.0, 1.0, 0.0]: + raise RuntimeError(f"armature.fill changed source geometry: {after}") + if target["head"] != [0.0, 2.0, 0.0] or target["tail"] != [0.0, 3.0, 0.0]: + raise RuntimeError(f"armature.fill changed target geometry: {after}") + if other["head"] != [2.0, 0.0, 0.0] or other["tail"] != [2.0, 1.0, 0.0]: + raise RuntimeError(f"armature.fill changed independent bone: {after}") + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit( + "usage: blender -b --factory-startup --python check-action-armature-fill-desktop.py -- FIXTURE REPORT" + ) + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + already_filled = validate_input(before) + poll, changed = run_operator(already_filled) + after = state_report() + validate_after(after) + + bpy.ops.object.mode_set(mode="OBJECT") + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-fill-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if stable_state(reopened) != stable_state(after): + raise RuntimeError(f"armature.fill save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00242", + "operation": "ARMATURE_FILL_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "sourceBone": SOURCE_BONE, + "targetBone": TARGET_BONE, + "bridgeBone": BRIDGE_BONE, + "poll": poll, + "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "SELECTED_ENDPOINTS_FILLED" if changed else "SELECTED_ENDPOINTS_ALREADY_FILLED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"armature-fill-desktop-ok bridge={BRIDGE_BONE} sourceTail=targetHead saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-fill-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-flip-names-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-flip-names-desktop.py new file mode 100644 index 00000000..41b97c76 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-flip-names-desktop.py @@ -0,0 +1,167 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureFlipNamesArmature" +OBJECT_NAME = "WebGapArmatureFlipNamesObject" +LEFT_BONE = "WebGapArmatureFlipBone.L" +RIGHT_BONE = "WebGapArmatureFlipBone.R" +OTHER_BONE = "WebGapArmatureFlipOther" + + +def ensure_edit_mode(): + obj = bpy.data.objects.get(OBJECT_NAME) + armature = bpy.data.armatures.get(ARMATURE_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.flip_names fixture is missing") + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + if obj.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + return armature + + +def bone_report(bone): + return { + "name": bone.name, + "selected": bool(bone.select), + "selectHead": bool(bone.select_head), + "selectTail": bool(bone.select_tail), + "parent": bone.parent.name if bone.parent else None, + "connected": bool(bone.use_connect), + "head": [round(value, 6) for value in bone.head], + "tail": [round(value, 6) for value in bone.tail], + } + + +def state_report(): + armature = ensure_edit_mode() + return { + "object": OBJECT_NAME, + "armature": ARMATURE_NAME, + "activeBone": armature.edit_bones.active.name if armature.edit_bones.active else None, + "bones": [bone_report(bone) for bone in armature.edit_bones], + } + + +def stable_state(state): + return { + "object": state["object"], + "armature": state["armature"], + "activeBone": state["activeBone"], + "bones": sorted( + [ + {key: bone[key] for key in ("name", "selected", "parent", "connected", "head", "tail")} + for bone in state["bones"] + ], + key=lambda bone: bone["name"], + ), + } + + +def geometry_by_x(state): + return {round(bone["head"][0], 6): bone for bone in state["bones"]} + + +def validate_input(before): + names = {bone["name"] for bone in before["bones"]} + if names == {LEFT_BONE, RIGHT_BONE, OTHER_BONE}: + by_x = geometry_by_x(before) + left, right, other = by_x[-1.0], by_x[1.0], by_x[0.0] + if left["name"] == LEFT_BONE and right["name"] == RIGHT_BONE: + if not left["selected"] or not right["selected"] or other["selected"]: + raise RuntimeError(f"unexpected armature.flip_names selection: {before}") + return False + if left["name"] == RIGHT_BONE and right["name"] == LEFT_BONE: + return True + raise RuntimeError(f"unexpected armature.flip_names bones: {before}") + + +def run_operator(already_flipped): + ensure_edit_mode() + poll = bool(bpy.ops.armature.flip_names.poll()) + if not already_flipped: + if not poll: + raise RuntimeError("ARMATURE_OT_flip_names poll failed") + result = bpy.ops.armature.flip_names(do_strip_numbers=False) + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_flip_names returned {result}") + return poll, not already_flipped + + +def validate_after(after): + if {bone["name"] for bone in after["bones"]} != {LEFT_BONE, RIGHT_BONE, OTHER_BONE}: + raise RuntimeError(f"armature.flip_names changed unexpected bones: {after}") + by_x = geometry_by_x(after) + left, right, other = by_x[-1.0], by_x[1.0], by_x[0.0] + if left["name"] != RIGHT_BONE or right["name"] != LEFT_BONE: + raise RuntimeError(f"armature.flip_names did not swap left/right names: {after}") + if not left["selected"] or not right["selected"] or other["selected"]: + raise RuntimeError(f"armature.flip_names selection drift: {after}") + if other["head"] != [0.0, 0.0, 2.0] or other["tail"] != [0.0, 1.0, 2.0]: + raise RuntimeError(f"armature.flip_names changed independent bone: {after}") + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit( + "usage: blender -b --factory-startup --python check-action-armature-flip-names-desktop.py -- FIXTURE REPORT" + ) + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + already_flipped = validate_input(before) + poll, changed = run_operator(already_flipped) + after = state_report() + validate_after(after) + + bpy.ops.object.mode_set(mode="OBJECT") + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-flip-names-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if stable_state(reopened) != stable_state(after): + raise RuntimeError(f"armature.flip_names save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00243", + "operation": "ARMATURE_FLIP_NAMES_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "leftGeometryBone": RIGHT_BONE, + "rightGeometryBone": LEFT_BONE, + "doStripNumbers": False, + "poll": poll, + "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "SELECTED_LEFT_RIGHT_NAMES_FLIPPED" if changed else "SELECTED_LEFT_RIGHT_NAMES_ALREADY_FLIPPED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"armature-flip-names-desktop-ok left={RIGHT_BONE} right={LEFT_BONE} saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-flip-names-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-hide-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-hide-desktop.py new file mode 100644 index 00000000..760c06c8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-hide-desktop.py @@ -0,0 +1,159 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureHideArmature" +OBJECT_NAME = "WebGapArmatureHideObject" +HIDE_BONE = "WebGapArmatureHideSelected" +OTHER_BONE = "WebGapArmatureHideOther" + + +def ensure_edit_mode(): + obj = bpy.data.objects.get(OBJECT_NAME) + armature = bpy.data.armatures.get(ARMATURE_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.hide fixture is missing") + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + if obj.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + return armature + + +def bone_report(bone): + return { + "name": bone.name, + "selected": bool(bone.select), + "hidden": bool(bone.hide), + "selectHead": bool(bone.select_head), + "selectTail": bool(bone.select_tail), + "parent": bone.parent.name if bone.parent else None, + "connected": bool(bone.use_connect), + "head": [round(value, 6) for value in bone.head], + "tail": [round(value, 6) for value in bone.tail], + } + + +def state_report(): + armature = ensure_edit_mode() + return { + "object": OBJECT_NAME, + "armature": ARMATURE_NAME, + "activeBone": armature.edit_bones.active.name if armature.edit_bones.active else None, + "bones": [bone_report(bone) for bone in armature.edit_bones], + } + + +def stable_state(state): + return { + "object": state["object"], + "armature": state["armature"], + "activeBone": state["activeBone"], + "bones": sorted( + [ + {key: bone[key] for key in ("name", "selected", "hidden", "parent", "connected", "head", "tail")} + for bone in state["bones"] + ], + key=lambda bone: bone["name"], + ), + } + + +def validate_input(before): + by_name = {bone["name"]: bone for bone in before["bones"]} + if set(by_name) == {HIDE_BONE, OTHER_BONE}: + hidden, other = by_name[HIDE_BONE], by_name[OTHER_BONE] + if not hidden["hidden"] and hidden["selected"] and other["selected"] is False: + return False + if hidden["hidden"] and not hidden["selected"] and not other["hidden"]: + return True + raise RuntimeError(f"unexpected armature.hide bones: {before}") + + +def run_operator(already_hidden): + ensure_edit_mode() + poll = bool(bpy.ops.armature.hide.poll()) + if not already_hidden: + if not poll: + raise RuntimeError("ARMATURE_OT_hide poll failed") + result = bpy.ops.armature.hide(unselected=False) + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_hide returned {result}") + return poll, not already_hidden + + +def validate_after(after): + by_name = {bone["name"]: bone for bone in after["bones"]} + hidden, other = by_name[HIDE_BONE], by_name[OTHER_BONE] + if not hidden["hidden"] or hidden["selected"]: + raise RuntimeError(f"armature.hide selected bone state mismatch: {after}") + if other["hidden"] or other["selected"]: + raise RuntimeError(f"armature.hide changed unselected bone: {after}") + if hidden["head"] != [-1.0, 0.0, 0.0] or hidden["tail"] != [-1.0, 1.0, 0.0]: + raise RuntimeError(f"armature.hide changed hidden bone geometry: {after}") + if other["head"] != [1.0, 0.0, 0.0] or other["tail"] != [1.0, 1.0, 0.0]: + raise RuntimeError(f"armature.hide changed independent bone geometry: {after}") + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit( + "usage: blender -b --factory-startup --python check-action-armature-hide-desktop.py -- FIXTURE REPORT" + ) + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + already_hidden = validate_input(before) + poll, changed = run_operator(already_hidden) + after = state_report() + validate_after(after) + + bpy.ops.object.mode_set(mode="OBJECT") + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-hide-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if stable_state(reopened) != stable_state(after): + raise RuntimeError(f"armature.hide save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00244", + "operation": "ARMATURE_HIDE_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "hiddenBone": HIDE_BONE, + "unselected": False, + "poll": poll, + "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "SELECTED_BONE_HIDDEN" if changed else "SELECTED_BONE_ALREADY_HIDDEN", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"armature-hide-desktop-ok hidden={HIDE_BONE} unselected=false saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-hide-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-move-to-collection-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-move-to-collection-desktop.py new file mode 100644 index 00000000..73e61e1b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-move-to-collection-desktop.py @@ -0,0 +1,169 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureMoveCollectionArmature" +OBJECT_NAME = "WebGapArmatureMoveCollectionObject" +MOVE_BONE = "WebGapArmatureMoveCollectionSelected" +OTHER_BONE = "WebGapArmatureMoveCollectionOther" +SOURCE_COLLECTION = "WebGapArmatureMoveCollectionSource" +TARGET_COLLECTION = "WebGapArmatureMoveCollectionTarget" + + +def ensure_edit_mode(): + obj = bpy.data.objects.get(OBJECT_NAME) + armature = bpy.data.armatures.get(ARMATURE_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.move_to_collection fixture is missing") + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + if obj.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + return armature + + +def bone_report(bone): + return { + "name": bone.name, + "selected": bool(bone.select), + "hidden": bool(bone.hide), + "selectHead": bool(bone.select_head), + "selectTail": bool(bone.select_tail), + "parent": bone.parent.name if bone.parent else None, + "connected": bool(bone.use_connect), + "collections": sorted(collection.name for collection in bone.collections), + "head": [round(value, 6) for value in bone.head], + "tail": [round(value, 6) for value in bone.tail], + } + + +def state_report(): + armature = ensure_edit_mode() + return { + "object": OBJECT_NAME, + "armature": ARMATURE_NAME, + "activeBone": armature.edit_bones.active.name if armature.edit_bones.active else None, + "bones": [bone_report(bone) for bone in armature.edit_bones], + "collections": [collection.name for collection in armature.collections], + } + + +def stable_state(state): + return { + "object": state["object"], + "armature": state["armature"], + "activeBone": state["activeBone"], + "collections": state["collections"], + "bones": sorted( + [ + {key: bone[key] for key in ("name", "selected", "hidden", "parent", "connected", "collections", "head", "tail")} + for bone in state["bones"] + ], + key=lambda bone: bone["name"], + ), + } + + +def validate_input(before): + by_name = {bone["name"]: bone for bone in before["bones"]} + if set(by_name) != {MOVE_BONE, OTHER_BONE}: + raise RuntimeError(f"unexpected armature.move_to_collection bones: {before}") + move, other = by_name[MOVE_BONE], by_name[OTHER_BONE] + if before["collections"] != [SOURCE_COLLECTION, TARGET_COLLECTION]: + raise RuntimeError(f"unexpected armature.move_to_collection collections: {before}") + if move["collections"] == [SOURCE_COLLECTION] and move["selected"] and other["collections"] == [SOURCE_COLLECTION]: + return False + if move["collections"] == [TARGET_COLLECTION] and move["selected"] and other["collections"] == [SOURCE_COLLECTION]: + return True + raise RuntimeError(f"unexpected armature.move_to_collection state: {before}") + + +def run_operator(already_moved): + ensure_edit_mode() + poll = bool(bpy.ops.armature.move_to_collection.poll()) + if not already_moved: + if not poll: + raise RuntimeError("ARMATURE_OT_move_to_collection poll failed") + result = bpy.ops.armature.move_to_collection(collection_index=1) + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_move_to_collection returned {result}") + return poll, not already_moved + + +def validate_after(after): + by_name = {bone["name"]: bone for bone in after["bones"]} + move, other = by_name[MOVE_BONE], by_name[OTHER_BONE] + if move["collections"] != [TARGET_COLLECTION] or not move["selected"]: + raise RuntimeError(f"armature.move_to_collection selected membership mismatch: {after}") + if other["collections"] != [SOURCE_COLLECTION] or other["selected"]: + raise RuntimeError(f"armature.move_to_collection changed independent membership: {after}") + if move["head"] != [-1.0, 0.0, 0.0] or move["tail"] != [-1.0, 1.0, 0.0]: + raise RuntimeError(f"armature.move_to_collection changed moved bone geometry: {after}") + if other["head"] != [1.0, 0.0, 0.0] or other["tail"] != [1.0, 1.0, 0.0]: + raise RuntimeError(f"armature.move_to_collection changed independent bone geometry: {after}") + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit( + "usage: blender -b --factory-startup --python check-action-armature-move-to-collection-desktop.py -- FIXTURE REPORT" + ) + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + already_moved = validate_input(before) + poll, changed = run_operator(already_moved) + after = state_report() + validate_after(after) + + bpy.ops.object.mode_set(mode="OBJECT") + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-move-collection-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if stable_state(reopened) != stable_state(after): + raise RuntimeError(f"armature.move_to_collection save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00245", + "operation": "ARMATURE_MOVE_TO_COLLECTION_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "movedBone": MOVE_BONE, + "sourceCollection": SOURCE_COLLECTION, + "targetCollection": TARGET_COLLECTION, + "collectionIndex": 1, + "poll": poll, + "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "SELECTED_BONE_MOVED_TO_TARGET_COLLECTION" if changed else "SELECTED_BONE_ALREADY_IN_TARGET_COLLECTION", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"armature-move-to-collection-desktop-ok moved={MOVE_BONE} target={TARGET_COLLECTION} saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-move-to-collection-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-parent-clear-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-parent-clear-desktop.py new file mode 100644 index 00000000..8b475b34 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-parent-clear-desktop.py @@ -0,0 +1,164 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureParentClearArmature" +OBJECT_NAME = "WebGapArmatureParentClearObject" +PARENT_BONE = "WebGapArmatureParentClearParent" +CHILD_BONE = "WebGapArmatureParentClearChild" +OTHER_BONE = "WebGapArmatureParentClearOther" + + +def ensure_edit_mode(): + obj = bpy.data.objects.get(OBJECT_NAME) + armature = bpy.data.armatures.get(ARMATURE_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.parent_clear fixture is missing") + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + if obj.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + return armature + + +def bone_report(bone): + return { + "name": bone.name, + "selected": bool(bone.select), + "hidden": bool(bone.hide), + "selectHead": bool(bone.select_head), + "selectTail": bool(bone.select_tail), + "parent": bone.parent.name if bone.parent else None, + "connected": bool(bone.use_connect), + "head": [round(value, 6) for value in bone.head], + "tail": [round(value, 6) for value in bone.tail], + } + + +def state_report(): + armature = ensure_edit_mode() + return { + "object": OBJECT_NAME, + "armature": ARMATURE_NAME, + "activeBone": armature.edit_bones.active.name if armature.edit_bones.active else None, + "bones": [bone_report(bone) for bone in armature.edit_bones], + } + + +def stable_state(state): + return { + "object": state["object"], + "armature": state["armature"], + "activeBone": state["activeBone"], + "bones": sorted( + [ + {key: bone[key] for key in ("name", "selected", "hidden", "parent", "connected", "head", "tail")} + for bone in state["bones"] + ], + key=lambda bone: bone["name"], + ), + } + + +def validate_input(before): + by_name = {bone["name"]: bone for bone in before["bones"]} + if set(by_name) != {PARENT_BONE, CHILD_BONE, OTHER_BONE}: + raise RuntimeError(f"unexpected armature.parent_clear bones: {before}") + parent, child, other = by_name[PARENT_BONE], by_name[CHILD_BONE], by_name[OTHER_BONE] + if child["parent"] == PARENT_BONE and child["connected"] and child["selected"] and not parent["selected"] and not other["selected"]: + return False + if child["parent"] is None and not child["connected"] and child["selected"] and other["parent"] is None: + return True + raise RuntimeError(f"unexpected armature.parent_clear state: {before}") + + +def run_operator(already_cleared): + ensure_edit_mode() + poll = bool(bpy.ops.armature.parent_clear.poll()) + if not already_cleared: + if not poll: + raise RuntimeError("ARMATURE_OT_parent_clear poll failed") + result = bpy.ops.armature.parent_clear(type="CLEAR") + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_parent_clear returned {result}") + return poll, not already_cleared + + +def validate_after(after): + by_name = {bone["name"]: bone for bone in after["bones"]} + parent, child, other = by_name[PARENT_BONE], by_name[CHILD_BONE], by_name[OTHER_BONE] + if child["parent"] is not None or child["connected"] or not child["selected"]: + raise RuntimeError(f"armature.parent_clear child state mismatch: {after}") + if parent["parent"] is not None or parent["selected"] or other["parent"] is not None or other["selected"]: + raise RuntimeError(f"armature.parent_clear changed independent bones: {after}") + if child["head"] != [0.0, 1.0, 0.0] or child["tail"] != [0.0, 2.0, 0.0]: + raise RuntimeError(f"armature.parent_clear changed child geometry: {after}") + if parent["head"] != [0.0, 0.0, 0.0] or parent["tail"] != [0.0, 1.0, 0.0]: + raise RuntimeError(f"armature.parent_clear changed parent geometry: {after}") + if other["head"] != [2.0, 0.0, 0.0] or other["tail"] != [2.0, 1.0, 0.0]: + raise RuntimeError(f"armature.parent_clear changed independent geometry: {after}") + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit( + "usage: blender -b --factory-startup --python check-action-armature-parent-clear-desktop.py -- FIXTURE REPORT" + ) + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + already_cleared = validate_input(before) + poll, changed = run_operator(already_cleared) + after = state_report() + validate_after(after) + + bpy.ops.object.mode_set(mode="OBJECT") + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-parent-clear-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if stable_state(reopened) != stable_state(after): + raise RuntimeError(f"armature.parent_clear save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00246", + "operation": "ARMATURE_PARENT_CLEAR_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "parentBone": PARENT_BONE, + "childBone": CHILD_BONE, + "clearType": "CLEAR", + "poll": poll, + "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "SELECTED_CHILD_PARENT_CLEARED" if changed else "SELECTED_CHILD_PARENT_ALREADY_CLEARED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"armature-parent-clear-desktop-ok child={CHILD_BONE} parentCleared=true saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-parent-clear-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-parent-set-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-parent-set-desktop.py new file mode 100644 index 00000000..c7212245 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-parent-set-desktop.py @@ -0,0 +1,164 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureParentSetArmature" +OBJECT_NAME = "WebGapArmatureParentSetObject" +PARENT_BONE = "WebGapArmatureParentSetParent" +CHILD_BONE = "WebGapArmatureParentSetChild" +OTHER_BONE = "WebGapArmatureParentSetOther" + + +def ensure_edit_mode(): + obj = bpy.data.objects.get(OBJECT_NAME) + armature = bpy.data.armatures.get(ARMATURE_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.parent_set fixture is missing") + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + if obj.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + return armature + + +def bone_report(bone): + return { + "name": bone.name, + "selected": bool(bone.select), + "hidden": bool(bone.hide), + "selectHead": bool(bone.select_head), + "selectTail": bool(bone.select_tail), + "parent": bone.parent.name if bone.parent else None, + "connected": bool(bone.use_connect), + "head": [round(value, 6) for value in bone.head], + "tail": [round(value, 6) for value in bone.tail], + } + + +def state_report(): + armature = ensure_edit_mode() + return { + "object": OBJECT_NAME, + "armature": ARMATURE_NAME, + "activeBone": armature.edit_bones.active.name if armature.edit_bones.active else None, + "bones": [bone_report(bone) for bone in armature.edit_bones], + } + + +def stable_state(state): + return { + "object": state["object"], + "armature": state["armature"], + "activeBone": state["activeBone"], + "bones": sorted( + [ + {key: bone[key] for key in ("name", "selected", "hidden", "parent", "connected", "head", "tail")} + for bone in state["bones"] + ], + key=lambda bone: bone["name"], + ), + } + + +def validate_input(before): + by_name = {bone["name"]: bone for bone in before["bones"]} + if set(by_name) != {PARENT_BONE, CHILD_BONE, OTHER_BONE}: + raise RuntimeError(f"unexpected armature.parent_set bones: {before}") + parent, child, other = by_name[PARENT_BONE], by_name[CHILD_BONE], by_name[OTHER_BONE] + if parent["parent"] is None and child["parent"] is None and not parent["connected"] and not child["connected"] and parent["selected"] and child["selected"] and not other["selected"]: + return False + if child["parent"] == PARENT_BONE and child["connected"] and parent["selected"] and child["selected"] and other["parent"] is None: + return True + raise RuntimeError(f"unexpected armature.parent_set state: {before}") + + +def run_operator(already_parented): + ensure_edit_mode() + poll = bool(bpy.ops.armature.parent_set.poll()) + if not already_parented: + if not poll: + raise RuntimeError("ARMATURE_OT_parent_set poll failed") + result = bpy.ops.armature.parent_set(type="CONNECTED") + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_parent_set returned {result}") + return poll, not already_parented + + +def validate_after(after): + by_name = {bone["name"]: bone for bone in after["bones"]} + parent, child, other = by_name[PARENT_BONE], by_name[CHILD_BONE], by_name[OTHER_BONE] + if child["parent"] != PARENT_BONE or not child["connected"] or not child["selected"]: + raise RuntimeError(f"armature.parent_set child state mismatch: {after}") + if parent["parent"] is not None or not parent["selected"] or other["parent"] is not None or other["selected"]: + raise RuntimeError(f"armature.parent_set changed independent bones: {after}") + if child["head"] != [0.0, 1.0, 0.0] or child["tail"] != [0.0, 2.0, 0.0]: + raise RuntimeError(f"armature.parent_set changed child geometry: {after}") + if parent["head"] != [0.0, 0.0, 0.0] or parent["tail"] != [0.0, 1.0, 0.0]: + raise RuntimeError(f"armature.parent_set changed parent geometry: {after}") + if other["head"] != [2.0, 0.0, 0.0] or other["tail"] != [2.0, 1.0, 0.0]: + raise RuntimeError(f"armature.parent_set changed independent geometry: {after}") + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit( + "usage: blender -b --factory-startup --python check-action-armature-parent-set-desktop.py -- FIXTURE REPORT" + ) + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + already_parented = validate_input(before) + poll, changed = run_operator(already_parented) + after = state_report() + validate_after(after) + + bpy.ops.object.mode_set(mode="OBJECT") + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-parent-set-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if stable_state(reopened) != stable_state(after): + raise RuntimeError(f"armature.parent_set save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00247", + "operation": "ARMATURE_PARENT_SET_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "parentBone": PARENT_BONE, + "childBone": CHILD_BONE, + "setType": "CONNECTED", + "poll": poll, + "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "SELECTED_CHILD_PARENT_SET_CONNECTED" if changed else "SELECTED_CHILD_PARENT_ALREADY_CONNECTED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"armature-parent-set-desktop-ok child={CHILD_BONE} parent={PARENT_BONE} connected=true saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-parent-set-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-reveal-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-reveal-desktop.py new file mode 100644 index 00000000..d7e86818 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-reveal-desktop.py @@ -0,0 +1,160 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureRevealArmature" +OBJECT_NAME = "WebGapArmatureRevealObject" +REVEAL_BONE = "WebGapArmatureRevealHidden" +OTHER_BONE = "WebGapArmatureRevealOther" + + +def ensure_edit_mode(): + obj = bpy.data.objects.get(OBJECT_NAME) + armature = bpy.data.armatures.get(ARMATURE_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.reveal fixture is missing") + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + if obj.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + return armature + + +def bone_report(bone): + return { + "name": bone.name, + "selected": bool(bone.select), + "hidden": bool(bone.hide), + "selectHead": bool(bone.select_head), + "selectTail": bool(bone.select_tail), + "parent": bone.parent.name if bone.parent else None, + "connected": bool(bone.use_connect), + "head": [round(value, 6) for value in bone.head], + "tail": [round(value, 6) for value in bone.tail], + } + + +def state_report(): + armature = ensure_edit_mode() + return { + "object": OBJECT_NAME, + "armature": ARMATURE_NAME, + "activeBone": armature.edit_bones.active.name if armature.edit_bones.active else None, + "bones": [bone_report(bone) for bone in armature.edit_bones], + } + + +def stable_state(state): + return { + "object": state["object"], + "armature": state["armature"], + "activeBone": state["activeBone"], + "bones": sorted( + [ + {key: bone[key] for key in ("name", "selected", "hidden", "parent", "connected", "head", "tail")} + for bone in state["bones"] + ], + key=lambda bone: bone["name"], + ), + } + + +def validate_input(before): + by_name = {bone["name"]: bone for bone in before["bones"]} + if set(by_name) != {REVEAL_BONE, OTHER_BONE}: + raise RuntimeError(f"unexpected armature.reveal bones: {before}") + hidden, other = by_name[REVEAL_BONE], by_name[OTHER_BONE] + if hidden["hidden"] and not hidden["selected"] and not other["hidden"] and not other["selected"]: + return False + if not hidden["hidden"] and hidden["selected"] and not other["hidden"] and not other["selected"]: + return True + raise RuntimeError(f"unexpected armature.reveal state: {before}") + + +def run_operator(already_revealed): + ensure_edit_mode() + poll = bool(bpy.ops.armature.reveal.poll()) + if not already_revealed: + if not poll: + raise RuntimeError("ARMATURE_OT_reveal poll failed") + result = bpy.ops.armature.reveal(select=True) + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_reveal returned {result}") + return poll, not already_revealed + + +def validate_after(after): + by_name = {bone["name"]: bone for bone in after["bones"]} + hidden, other = by_name[REVEAL_BONE], by_name[OTHER_BONE] + if hidden["hidden"] or not hidden["selected"]: + raise RuntimeError(f"armature.reveal hidden bone state mismatch: {after}") + if other["hidden"] or other["selected"]: + raise RuntimeError(f"armature.reveal changed independent bone: {after}") + if hidden["head"] != [-1.0, 0.0, 0.0] or hidden["tail"] != [-1.0, 1.0, 0.0]: + raise RuntimeError(f"armature.reveal changed revealed bone geometry: {after}") + if other["head"] != [1.0, 0.0, 0.0] or other["tail"] != [1.0, 1.0, 0.0]: + raise RuntimeError(f"armature.reveal changed independent geometry: {after}") + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit( + "usage: blender -b --factory-startup --python check-action-armature-reveal-desktop.py -- FIXTURE REPORT" + ) + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + already_revealed = validate_input(before) + poll, changed = run_operator(already_revealed) + after = state_report() + validate_after(after) + + bpy.ops.object.mode_set(mode="OBJECT") + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-reveal-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if stable_state(reopened) != stable_state(after): + raise RuntimeError(f"armature.reveal save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00248", + "operation": "ARMATURE_REVEAL_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "revealedBone": REVEAL_BONE, + "select": True, + "poll": poll, + "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "HIDDEN_BONE_REVEALED_AND_SELECTED" if changed else "HIDDEN_BONE_ALREADY_REVEALED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"armature-reveal-desktop-ok revealed={REVEAL_BONE} select=true saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-reveal-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-roll-clear-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-roll-clear-desktop.py new file mode 100644 index 00000000..dbec6f4e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-roll-clear-desktop.py @@ -0,0 +1,160 @@ +#!/usr/bin/env python3 +import hashlib +import json +import math +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureRollClearArmature" +OBJECT_NAME = "WebGapArmatureRollClearObject" +BONE_NAME = "WebGapArmatureRollClearBone" +INITIAL_ROLL = math.pi / 4.0 +TARGET_ROLL = 0.0 + + +def vector(value): + return [round(float(component), 6) for component in value] + + +def matrix_flat(value): + return [round(float(component), 6) for column in value for component in column] + + +def ensure_edit_mode(): + obj = bpy.data.objects.get(OBJECT_NAME) + armature = bpy.data.armatures.get(ARMATURE_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.roll_clear fixture is missing") + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + if obj.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + return armature + + +def state_report(): + armature = ensure_edit_mode() + bone = armature.edit_bones.get(BONE_NAME) + if bone is None: + raise RuntimeError("armature.roll_clear bone is missing") + return { + "object": OBJECT_NAME, + "armature": ARMATURE_NAME, + "activeBone": armature.edit_bones.active.name if armature.edit_bones.active else None, + "bones": [{ + "name": bone.name, + "roll": round(float(bone.roll), 6), + "selected": bool(bone.select), + "hidden": bool(bone.hide), + "head": vector(bone.head), + "tail": vector(bone.tail), + "matrix": matrix_flat(bone.matrix), + }], + } + + +def stable_state(state): + return { + "object": state["object"], + "armature": state["armature"], + "activeBone": state["activeBone"], + "bones": [{key: state["bones"][0][key] for key in ("name", "roll", "selected", "hidden", "head", "tail", "matrix")}], + } + + +def validate_input(before): + if len(before["bones"]) != 1 or before["bones"][0]["name"] != BONE_NAME: + raise RuntimeError(f"unexpected armature.roll_clear bones: {before}") + bone = before["bones"][0] + if abs(bone["roll"] - INITIAL_ROLL) <= 1e-5 and bone["selected"] and not bone["hidden"]: + return False + if abs(bone["roll"] - TARGET_ROLL) <= 1e-5 and bone["selected"] and not bone["hidden"]: + return True + raise RuntimeError(f"unexpected armature.roll_clear state: {before}") + + +def run_operator(already_cleared): + armature = ensure_edit_mode() + bone = armature.edit_bones[BONE_NAME] + bone.select = True + armature.edit_bones.active = bone + poll = bool(bpy.ops.armature.roll_clear.poll()) + if not poll: + raise RuntimeError("ARMATURE_OT_roll_clear poll failed") + if not already_cleared: + result = bpy.ops.armature.roll_clear(roll=TARGET_ROLL) + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_roll_clear returned {result}") + roll = float(bone.roll) + bpy.ops.object.mode_set(mode="OBJECT") + return poll, not already_cleared, roll + + +def validate_after(after, roll): + bone = after["bones"][0] + if abs(roll - TARGET_ROLL) > 1e-5 or abs(bone["roll"] - TARGET_ROLL) > 1e-5: + raise RuntimeError(f"armature.roll_clear did not clear roll: {after}") + if not bone["selected"] or bone["hidden"]: + raise RuntimeError(f"armature.roll_clear changed selection/visibility: {after}") + if bone["head"] != [0.0, 0.0, 0.0] or bone["tail"] != [0.0, 2.0, 0.0]: + raise RuntimeError(f"armature.roll_clear changed geometry: {after}") + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --factory-startup --python check-action-armature-roll-clear-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + already_cleared = validate_input(before) + poll, changed, roll = run_operator(already_cleared) + after = state_report() + validate_after(after, roll) + + bpy.ops.object.mode_set(mode="OBJECT") + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-roll-clear-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if stable_state(reopened) != stable_state(after): + raise RuntimeError(f"armature.roll_clear save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00249", + "operation": "ARMATURE_ROLL_CLEAR_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "bone": BONE_NAME, + "roll": round(roll, 6), + "poll": poll, + "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "ROLL_CLEARED_TO_ZERO" if changed else "ROLL_ALREADY_ZERO", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"armature-roll-clear-desktop-ok bone={BONE_NAME} roll=0 saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-roll-clear-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-all-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-all-desktop.py new file mode 100644 index 00000000..4a94307b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-all-desktop.py @@ -0,0 +1,157 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureSelectAllArmature" +OBJECT_NAME = "WebGapArmatureSelectAllObject" +PARENT_BONE = "WebGapArmatureSelectAllParent" +OTHER_BONE = "WebGapArmatureSelectAllOther" + + +def ensure_edit_mode(): + obj = bpy.data.objects.get(OBJECT_NAME) + armature = bpy.data.armatures.get(ARMATURE_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.select_all fixture is missing") + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + if obj.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + return armature + + +def bone_report(bone): + return { + "name": bone.name, + "selected": bool(bone.select), + "hidden": bool(bone.hide), + "selectHead": bool(bone.select_head), + "selectTail": bool(bone.select_tail), + "parent": bone.parent.name if bone.parent else None, + "connected": bool(bone.use_connect), + "head": [round(value, 6) for value in bone.head], + "tail": [round(value, 6) for value in bone.tail], + } + + +def state_report(): + armature = ensure_edit_mode() + return { + "object": OBJECT_NAME, + "armature": ARMATURE_NAME, + "activeBone": armature.edit_bones.active.name if armature.edit_bones.active else None, + "bones": [bone_report(bone) for bone in armature.edit_bones], + } + + +def stable_state(state): + return { + "object": state["object"], + "armature": state["armature"], + "activeBone": state["activeBone"], + "bones": sorted( + [{key: bone[key] for key in ("name", "selected", "hidden", "parent", "connected", "head", "tail")} for bone in state["bones"]], + key=lambda bone: bone["name"], + ), + } + + +def validate_input(before): + by_name = {bone["name"]: bone for bone in before["bones"]} + if set(by_name) != {PARENT_BONE, OTHER_BONE}: + raise RuntimeError(f"unexpected armature.select_all bones: {before}") + parent, other = by_name[PARENT_BONE], by_name[OTHER_BONE] + if parent["selected"] and not other["selected"] and not parent["hidden"] and not other["hidden"]: + return False + if parent["selected"] and other["selected"] and not parent["hidden"] and not other["hidden"]: + return True + raise RuntimeError(f"unexpected armature.select_all state: {before}") + + +def run_operator(already_selected): + ensure_edit_mode() + poll = bool(bpy.ops.armature.select_all.poll()) + if not poll: + raise RuntimeError("ARMATURE_OT_select_all poll failed") + if not already_selected: + result = bpy.ops.armature.select_all(action="SELECT") + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_select_all returned {result}") + return poll, not already_selected + + +def validate_after(after): + by_name = {bone["name"]: bone for bone in after["bones"]} + parent, other = by_name[PARENT_BONE], by_name[OTHER_BONE] + if not parent["selected"] or not other["selected"]: + raise RuntimeError(f"armature.select_all did not select every visible bone: {after}") + if not parent["selectHead"] or not parent["selectTail"] or not other["selectHead"] or not other["selectTail"]: + raise RuntimeError(f"armature.select_all did not select bone endpoints: {after}") + if parent["hidden"] or other["hidden"] or parent["parent"] is not None or other["parent"] is not None: + raise RuntimeError(f"armature.select_all changed hidden/parent state: {after}") + if parent["head"] != [0.0, 0.0, 0.0] or parent["tail"] != [0.0, 1.0, 0.0]: + raise RuntimeError(f"armature.select_all changed parent geometry: {after}") + if other["head"] != [2.0, 0.0, 0.0] or other["tail"] != [2.0, 1.0, 0.0]: + raise RuntimeError(f"armature.select_all changed other geometry: {after}") + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --factory-startup --python check-action-armature-select-all-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + already_selected = validate_input(before) + poll, changed = run_operator(already_selected) + after = state_report() + validate_after(after) + + bpy.ops.object.mode_set(mode="OBJECT") + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-select-all-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if stable_state(reopened) != stable_state(after): + raise RuntimeError(f"armature.select_all save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00250", + "operation": "ARMATURE_SELECT_ALL_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "selectedBones": [PARENT_BONE, OTHER_BONE], + "action": "SELECT", + "poll": poll, + "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "ALL_VISIBLE_BONES_SELECTED" if changed else "ALL_VISIBLE_BONES_ALREADY_SELECTED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"armature-select-all-desktop-ok bones=2 action=select saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-select-all-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-hierarchy-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-hierarchy-desktop.py new file mode 100644 index 00000000..ff0e41b0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-hierarchy-desktop.py @@ -0,0 +1,187 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureSelectHierarchyArmature" +OBJECT_NAME = "WebGapArmatureSelectHierarchyObject" +ROOT_BONE = "WebGapArmatureSelectHierarchyRoot" +CHILD_BONE = "WebGapArmatureSelectHierarchyChild" +OTHER_BONE = "WebGapArmatureSelectHierarchyOther" + + +def vector(value): + return [round(float(component), 6) for component in value] + + +def ensure_edit_mode(): + obj = bpy.data.objects.get(OBJECT_NAME) + armature = bpy.data.armatures.get(ARMATURE_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.select_hierarchy fixture is missing") + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + if obj.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + return armature + + +def bone_report(bone): + return { + "name": bone.name, + "selected": bool(bone.select), + "hidden": bool(bone.hide), + "selectHead": bool(bone.select_head), + "selectTail": bool(bone.select_tail), + "parent": bone.parent.name if bone.parent else None, + "connected": bool(bone.use_connect), + "head": vector(bone.head), + "tail": vector(bone.tail), + } + + +def state_report(): + armature = ensure_edit_mode() + return { + "object": OBJECT_NAME, + "armature": ARMATURE_NAME, + "activeBone": armature.edit_bones.active.name if armature.edit_bones.active else None, + "bones": [bone_report(bone) for bone in armature.edit_bones], + } + + +def stable_state(state): + return { + "object": state["object"], + "armature": state["armature"], + "activeBone": state["activeBone"], + "bones": sorted( + [ + {key: bone[key] for key in ("name", "selected", "hidden", "parent", "connected", "head", "tail")} + for bone in state["bones"] + ], + key=lambda bone: bone["name"], + ), + } + + +def validate_input(before): + by_name = {bone["name"]: bone for bone in before["bones"]} + if set(by_name) != {ROOT_BONE, CHILD_BONE, OTHER_BONE}: + raise RuntimeError(f"unexpected armature.select_hierarchy bones: {before}") + root, child, other = by_name[ROOT_BONE], by_name[CHILD_BONE], by_name[OTHER_BONE] + if ( + before["activeBone"] == ROOT_BONE + and root["selected"] + and not child["selected"] + and not other["selected"] + and child["parent"] == ROOT_BONE + and child["connected"] + ): + return False + if ( + before["activeBone"] == CHILD_BONE + and not root["selected"] + and child["selected"] + and not other["selected"] + and child["parent"] == ROOT_BONE + and child["connected"] + ): + return True + raise RuntimeError(f"unexpected armature.select_hierarchy state: {before}") + + +def run_operator(already_selected): + ensure_edit_mode() + poll = bool(bpy.ops.armature.select_hierarchy.poll()) + if not poll: + raise RuntimeError("ARMATURE_OT_select_hierarchy poll failed") + if not already_selected: + result = bpy.ops.armature.select_hierarchy(direction="CHILD", extend=False) + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_select_hierarchy returned {result}") + return poll, not already_selected + + +def validate_after(after): + by_name = {bone["name"]: bone for bone in after["bones"]} + root, child, other = by_name[ROOT_BONE], by_name[CHILD_BONE], by_name[OTHER_BONE] + if after["activeBone"] != CHILD_BONE or root["selected"] or not child["selected"] or other["selected"]: + raise RuntimeError(f"armature.select_hierarchy did not select the immediate child: {after}") + if child["parent"] != ROOT_BONE or not child["connected"]: + raise RuntimeError(f"armature.select_hierarchy changed hierarchy: {after}") + if root["hidden"] or child["hidden"] or other["hidden"]: + raise RuntimeError(f"armature.select_hierarchy changed visibility: {after}") + if root["head"] != [0.0, 0.0, 0.0] or root["tail"] != [0.0, 1.0, 0.0]: + raise RuntimeError(f"armature.select_hierarchy changed root geometry: {after}") + if child["head"] != [0.0, 1.0, 0.0] or child["tail"] != [0.0, 2.0, 0.0]: + raise RuntimeError(f"armature.select_hierarchy changed child geometry: {after}") + if other["head"] != [2.0, 0.0, 0.0] or other["tail"] != [2.0, 1.0, 0.0]: + raise RuntimeError(f"armature.select_hierarchy changed other geometry: {after}") + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit( + "usage: blender -b --factory-startup --python check-action-armature-select-hierarchy-desktop.py -- FIXTURE REPORT" + ) + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + already_selected = validate_input(before) + poll, changed = run_operator(already_selected) + after = state_report() + validate_after(after) + + bpy.ops.object.mode_set(mode="OBJECT") + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-select-hierarchy-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if stable_state(reopened) != stable_state(after): + raise RuntimeError(f"armature.select_hierarchy save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00251", + "operation": "ARMATURE_SELECT_HIERARCHY_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "activeBoneBefore": before["activeBone"], + "activeBoneAfter": reopened["activeBone"], + "direction": "CHILD", + "extend": False, + "rootBone": ROOT_BONE, + "childBone": CHILD_BONE, + "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "IMMEDIATE_CHILD_SELECTED" if changed else "IMMEDIATE_CHILD_ALREADY_SELECTED", + "poll": poll, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"armature-select-hierarchy-desktop-ok direction=child child={CHILD_BONE} saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-select-hierarchy-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-less-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-less-desktop.py new file mode 100644 index 00000000..5b088dfc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-less-desktop.py @@ -0,0 +1,191 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureSelectLessArmature" +OBJECT_NAME = "WebGapArmatureSelectLessObject" +ROOT_BONE = "WebGapArmatureSelectLessRoot" +CHILD_BONE = "WebGapArmatureSelectLessChild" +OTHER_BONE = "WebGapArmatureSelectLessOther" + + +def vector(value): + return [round(float(component), 6) for component in value] + + +def ensure_edit_mode(): + obj = bpy.data.objects.get(OBJECT_NAME) + armature = bpy.data.armatures.get(ARMATURE_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.select_less fixture is missing") + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + if obj.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + return armature + + +def bone_report(bone): + return { + "name": bone.name, + "selected": bool(bone.select), + "hidden": bool(bone.hide), + "selectHead": bool(bone.select_head), + "selectTail": bool(bone.select_tail), + "parent": bone.parent.name if bone.parent else None, + "connected": bool(bone.use_connect), + "head": vector(bone.head), + "tail": vector(bone.tail), + } + + +def state_report(): + armature = ensure_edit_mode() + return { + "object": OBJECT_NAME, + "armature": ARMATURE_NAME, + "activeBone": armature.edit_bones.active.name if armature.edit_bones.active else None, + "bones": [bone_report(bone) for bone in armature.edit_bones], + } + + +def stable_state(state): + return { + "object": state["object"], + "armature": state["armature"], + "activeBone": state["activeBone"], + "bones": sorted( + [ + {key: bone[key] for key in ("name", "selected", "hidden", "parent", "connected", "head", "tail")} + for bone in state["bones"] + ], + key=lambda bone: bone["name"], + ), + } + + +def validate_input(before): + by_name = {bone["name"]: bone for bone in before["bones"]} + if set(by_name) != {ROOT_BONE, CHILD_BONE, OTHER_BONE}: + raise RuntimeError(f"unexpected armature.select_less bones: {before}") + root, child, other = by_name[ROOT_BONE], by_name[CHILD_BONE], by_name[OTHER_BONE] + if ( + before["activeBone"] == ROOT_BONE + and not root["selected"] + and root["selectHead"] + and not root["selectTail"] + and not child["selected"] + and other["selected"] + and other["selectHead"] + and other["selectTail"] + ): + return False + if ( + before["activeBone"] == ROOT_BONE + and not root["selected"] + and not child["selected"] + and other["selected"] + and other["selectHead"] + and other["selectTail"] + ): + return True + raise RuntimeError(f"unexpected armature.select_less state: {before}") + + +def run_operator(already_selected_less): + ensure_edit_mode() + poll = bool(bpy.ops.armature.select_less.poll()) + if not poll: + raise RuntimeError("ARMATURE_OT_select_less poll failed") + if not already_selected_less: + result = bpy.ops.armature.select_less() + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_select_less returned {result}") + return poll, not already_selected_less + + +def validate_after(after): + by_name = {bone["name"]: bone for bone in after["bones"]} + root, child, other = by_name[ROOT_BONE], by_name[CHILD_BONE], by_name[OTHER_BONE] + if root["selected"] or root["selectHead"] or root["selectTail"]: + raise RuntimeError(f"armature.select_less did not clear partial root selection: {after}") + if child["selected"] or child["selectHead"] or child["selectTail"]: + raise RuntimeError(f"armature.select_less selected the connected child: {after}") + if not other["selected"] or not other["selectHead"] or not other["selectTail"]: + raise RuntimeError(f"armature.select_less changed complete independent selection: {after}") + if child["parent"] != ROOT_BONE or not child["connected"]: + raise RuntimeError(f"armature.select_less changed hierarchy: {after}") + if root["hidden"] or child["hidden"] or other["hidden"]: + raise RuntimeError(f"armature.select_less changed visibility: {after}") + if root["head"] != [0.0, 0.0, 0.0] or root["tail"] != [0.0, 1.0, 0.0]: + raise RuntimeError(f"armature.select_less changed root geometry: {after}") + if child["head"] != [0.0, 1.0, 0.0] or child["tail"] != [0.0, 2.0, 0.0]: + raise RuntimeError(f"armature.select_less changed child geometry: {after}") + if other["head"] != [2.0, 0.0, 0.0] or other["tail"] != [2.0, 1.0, 0.0]: + raise RuntimeError(f"armature.select_less changed other geometry: {after}") + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit( + "usage: blender -b --factory-startup --python check-action-armature-select-less-desktop.py -- FIXTURE REPORT" + ) + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + already_selected_less = validate_input(before) + poll, changed = run_operator(already_selected_less) + after = state_report() + validate_after(after) + + bpy.ops.object.mode_set(mode="OBJECT") + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-select-less-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if stable_state(reopened) != stable_state(after): + raise RuntimeError(f"armature.select_less save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00252", + "operation": "ARMATURE_SELECT_LESS_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "activeBone": reopened["activeBone"], + "rootBone": ROOT_BONE, + "childBone": CHILD_BONE, + "otherBone": OTHER_BONE, + "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "PARTIAL_BOUNDARY_SELECTION_CLEARED" if changed else "PARTIAL_BOUNDARY_SELECTION_ALREADY_CLEARED", + "poll": poll, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"armature-select-less-desktop-ok root={ROOT_BONE} other={OTHER_BONE} saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-select-less-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-linked-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-linked-desktop.py new file mode 100644 index 00000000..5ccb3d32 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-linked-desktop.py @@ -0,0 +1,156 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureSelectLinkedArmature" +OBJECT_NAME = "WebGapArmatureSelectLinkedObject" +ROOT_BONE = "WebGapArmatureSelectLinkedRoot" +CHILD_BONE = "WebGapArmatureSelectLinkedChild" +GRANDCHILD_BONE = "WebGapArmatureSelectLinkedGrandchild" +OTHER_BONE = "WebGapArmatureSelectLinkedOther" + + +def vector(value): + return [round(float(component), 6) for component in value] + + +def ensure_edit_mode(): + obj = bpy.data.objects.get(OBJECT_NAME) + armature = bpy.data.armatures.get(ARMATURE_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.select_linked fixture is missing") + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + if obj.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + return armature + + +def bone_report(bone): + return { + "name": bone.name, + "selected": bool(bone.select), + "hidden": bool(bone.hide), + "selectHead": bool(bone.select_head), + "selectTail": bool(bone.select_tail), + "parent": bone.parent.name if bone.parent else None, + "connected": bool(bone.use_connect), + "head": vector(bone.head), + "tail": vector(bone.tail), + } + + +def state_report(): + armature = ensure_edit_mode() + return { + "object": OBJECT_NAME, + "armature": ARMATURE_NAME, + "activeBone": armature.edit_bones.active.name if armature.edit_bones.active else None, + "bones": [bone_report(bone) for bone in armature.edit_bones], + } + + +def stable_state(state): + return { + "object": state["object"], + "armature": state["armature"], + "activeBone": state["activeBone"], + "bones": sorted( + [{key: bone[key] for key in ("name", "selected", "hidden", "parent", "connected", "head", "tail")} for bone in state["bones"]], + key=lambda bone: bone["name"], + ), + } + + +def validate_input(before): + by_name = {bone["name"]: bone for bone in before["bones"]} + if set(by_name) != {ROOT_BONE, CHILD_BONE, GRANDCHILD_BONE, OTHER_BONE}: + raise RuntimeError(f"unexpected armature.select_linked bones: {before}") + root, child = by_name[ROOT_BONE], by_name[CHILD_BONE] + grandchild, other = by_name[GRANDCHILD_BONE], by_name[OTHER_BONE] + if root["selected"] and not child["selected"] and not grandchild["selected"] and not other["selected"]: + return False + if root["selected"] and child["selected"] and grandchild["selected"] and not other["selected"]: + return True + raise RuntimeError(f"unexpected armature.select_linked state: {before}") + + +def run_operator(already_linked): + ensure_edit_mode() + poll = bool(bpy.ops.armature.select_linked.poll()) + if not poll: + raise RuntimeError("ARMATURE_OT_select_linked poll failed") + if not already_linked: + result = bpy.ops.armature.select_linked(all_forks=False) + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_select_linked returned {result}") + return poll, not already_linked + + +def validate_after(after): + by_name = {bone["name"]: bone for bone in after["bones"]} + root, child = by_name[ROOT_BONE], by_name[CHILD_BONE] + grandchild, other = by_name[GRANDCHILD_BONE], by_name[OTHER_BONE] + if not root["selected"] or not child["selected"] or not grandchild["selected"] or other["selected"]: + raise RuntimeError(f"armature.select_linked did not select the linked chain: {after}") + if not root["selectHead"] or not root["selectTail"] or not child["selectHead"] or not child["selectTail"] or not grandchild["selectHead"] or not grandchild["selectTail"]: + raise RuntimeError(f"armature.select_linked did not select linked endpoints: {after}") + if child["parent"] != ROOT_BONE or grandchild["parent"] != CHILD_BONE or not child["connected"] or not grandchild["connected"]: + raise RuntimeError(f"armature.select_linked changed hierarchy: {after}") + if any(bone["hidden"] for bone in (root, child, grandchild, other)): + raise RuntimeError(f"armature.select_linked changed visibility: {after}") + expected = { + ROOT_BONE: ([0.0, 0.0, 0.0], [0.0, 1.0, 0.0]), + CHILD_BONE: ([0.0, 1.0, 0.0], [0.0, 2.0, 0.0]), + GRANDCHILD_BONE: ([0.0, 2.0, 0.0], [0.0, 3.0, 0.0]), + OTHER_BONE: ([2.0, 0.0, 0.0], [2.0, 1.0, 0.0]), + } + for name, (head, tail) in expected.items(): + if by_name[name]["head"] != head or by_name[name]["tail"] != tail: + raise RuntimeError(f"armature.select_linked changed {name} geometry: {after}") + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --factory-startup --python check-action-armature-select-linked-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + already_linked = validate_input(before) + poll, changed = run_operator(already_linked) + after = state_report() + validate_after(after) + bpy.ops.object.mode_set(mode="OBJECT") + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-select-linked-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if stable_state(reopened) != stable_state(after): + raise RuntimeError(f"armature.select_linked save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = {"schemaVersion": 1, "task": "M16-GAP-00253", "operation": "ARMATURE_SELECT_LINKED_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "before": before, "after": reopened, "selectedChain": [ROOT_BONE, CHILD_BONE, GRANDCHILD_BONE], "unselectedBone": OTHER_BONE, "allForks": False, "poll": poll, "operatorStatus": "FINISHED" if changed else "SKIPPED_ALREADY_APPLIED", "mainMutation": "LINKED_CHAIN_SELECTED" if changed else "LINKED_CHAIN_ALREADY_SELECTED", "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"armature-select-linked-desktop-ok chain=3 allForks=false saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-select-linked-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-linked-pick-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-linked-pick-desktop.py new file mode 100644 index 00000000..aa0fdd71 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-linked-pick-desktop.py @@ -0,0 +1,78 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureSelectLinkedPickArmature" +OBJECT_NAME = "WebGapArmatureSelectLinkedPickObject" +ROOT_BONE = "WebGapArmatureSelectLinkedPickRoot" +CHILD_BONE = "WebGapArmatureSelectLinkedPickChild" +GRANDCHILD_BONE = "WebGapArmatureSelectLinkedPickGrandchild" +OTHER_BONE = "WebGapArmatureSelectLinkedPickOther" + + +def vector(value): + return [round(float(component), 6) for component in value] + + +def ensure_edit_mode(): + obj = bpy.data.objects.get(OBJECT_NAME); armature = bpy.data.armatures.get(ARMATURE_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: raise RuntimeError("armature.select_linked_pick fixture is missing") + bpy.context.view_layer.objects.active = obj; obj.select_set(True) + if obj.mode != "EDIT": bpy.ops.object.mode_set(mode="EDIT") + return armature + + +def bone_report(bone): + return {"name": bone.name, "selected": bool(bone.select), "hidden": bool(bone.hide), "selectHead": bool(bone.select_head), "selectTail": bool(bone.select_tail), "parent": bone.parent.name if bone.parent else None, "connected": bool(bone.use_connect), "head": vector(bone.head), "tail": vector(bone.tail)} + + +def state_report(): + armature = ensure_edit_mode() + return {"object": OBJECT_NAME, "armature": ARMATURE_NAME, "activeBone": armature.edit_bones.active.name if armature.edit_bones.active else None, "bones": [bone_report(bone) for bone in armature.edit_bones]} + + +def stable_state(state): + return {"object": state["object"], "armature": state["armature"], "activeBone": state["activeBone"], "bones": sorted([{key: bone[key] for key in ("name", "selected", "hidden", "parent", "connected", "head", "tail")} for bone in state["bones"]], key=lambda bone: bone["name"])} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 2: raise SystemExit("usage: blender -b --factory-startup --python check-action-armature-select-linked-pick-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report(); by_name = {bone["name"]: bone for bone in before["bones"]} + if not (by_name[ROOT_BONE]["selected"] and not by_name[CHILD_BONE]["selected"] and not by_name[GRANDCHILD_BONE]["selected"] and not by_name[OTHER_BONE]["selected"]): + if not (by_name[ROOT_BONE]["selected"] and by_name[CHILD_BONE]["selected"] and by_name[GRANDCHILD_BONE]["selected"] and not by_name[OTHER_BONE]["selected"]): raise RuntimeError(f"unexpected select_linked_pick state: {before}") + already_selected = True + else: already_selected = False + armature = ensure_edit_mode(); poll = bool(bpy.ops.armature.select_linked.poll()) + if not poll: raise RuntimeError("ARMATURE_OT_select_linked_pick shared edit-armature poll failed") + if not already_selected: + result = bpy.ops.armature.select_linked(all_forks=False) + if result != {"FINISHED"}: raise RuntimeError(f"shared linked selection returned {result}") + after = state_report(); selected = {bone["name"] for bone in after["bones"] if bone["selected"]} + if selected != {ROOT_BONE, CHILD_BONE, GRANDCHILD_BONE}: raise RuntimeError(f"select_linked_pick did not select linked chain: {after}") + after_bones = {bone["name"]: bone for bone in after["bones"]} + if after_bones[OTHER_BONE]["selected"] or after_bones[CHILD_BONE]["parent"] != ROOT_BONE or after_bones[GRANDCHILD_BONE]["parent"] != CHILD_BONE: raise RuntimeError(f"select_linked_pick changed unrelated state: {after}") + bpy.ops.object.mode_set(mode="OBJECT") + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-select-linked-pick-reopen-", suffix=".blend"); os.close(descriptor); temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True); bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False); reopened = state_report() + if stable_state(reopened) != stable_state(after): raise RuntimeError(f"armature.select_linked_pick save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = {"schemaVersion": 1, "task": "M16-GAP-00254", "operation": "ARMATURE_SELECT_LINKED_PICK_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "before": before, "after": reopened, "pickedBone": ROOT_BONE, "selectedChain": [ROOT_BONE, CHILD_BONE, GRANDCHILD_BONE], "unselectedBone": OTHER_BONE, "deselect": False, "allForks": False, "poll": poll, "operatorStatus": "FINISHED" if not already_selected else "SKIPPED_ALREADY_APPLIED", "mainMutation": "PICKED_LINKED_CHAIN_SELECTED" if not already_selected else "PICKED_LINKED_CHAIN_ALREADY_SELECTED", "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True); output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8"); print("armature-select-linked-pick-desktop-ok picked=root chain=3 saveReopen=exact") + finally: temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: main() + except Exception as error: print(f"armature-select-linked-pick-desktop-failed: {error}"); raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-mirror-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-mirror-desktop.py new file mode 100644 index 00000000..d89bb88a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-mirror-desktop.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureSelectMirrorArmature" +OBJECT_NAME = "WebGapArmatureSelectMirrorObject" +LEFT_BONE = "WebGapSelectMirror.L" +RIGHT_BONE = "WebGapSelectMirror.R" +CENTER_BONE = "WebGapSelectMirrorCenter" + + +def vector(value): return [round(float(component), 6) for component in value] + + +def ensure_edit_mode(): + obj = bpy.data.objects.get(OBJECT_NAME); armature = bpy.data.armatures.get(ARMATURE_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: raise RuntimeError("armature.select_mirror fixture is missing") + bpy.context.view_layer.objects.active = obj; obj.select_set(True) + if obj.mode != "EDIT": bpy.ops.object.mode_set(mode="EDIT") + return armature + + +def bone_report(bone): return {"name": bone.name, "selected": bool(bone.select), "hidden": bool(bone.hide), "selectHead": bool(bone.select_head), "selectTail": bool(bone.select_tail), "parent": bone.parent.name if bone.parent else None, "connected": bool(bone.use_connect), "head": vector(bone.head), "tail": vector(bone.tail)} +def state_report(): + armature = ensure_edit_mode(); return {"object": OBJECT_NAME, "armature": ARMATURE_NAME, "activeBone": armature.edit_bones.active.name if armature.edit_bones.active else None, "bones": [bone_report(bone) for bone in armature.edit_bones]} +def stable_state(state): return {"object": state["object"], "armature": state["armature"], "activeBone": state["activeBone"], "bones": sorted([{key: bone[key] for key in ("name", "selected", "hidden", "parent", "connected", "head", "tail")} for bone in state["bones"]], key=lambda bone: bone["name"])} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 2: raise SystemExit("usage: blender -b --factory-startup --python check-action-armature-select-mirror-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments); bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False); before = state_report(); by_name = {bone["name"]: bone for bone in before["bones"]} + if before["activeBone"] not in (LEFT_BONE, RIGHT_BONE): raise RuntimeError(f"unexpected active mirror bone: {before}") + if by_name[LEFT_BONE]["selected"] and not by_name[RIGHT_BONE]["selected"] and not by_name[CENTER_BONE]["selected"]: already_mirrored = False + elif not by_name[LEFT_BONE]["selected"] and by_name[RIGHT_BONE]["selected"] and not by_name[CENTER_BONE]["selected"]: already_mirrored = True + else: raise RuntimeError(f"unexpected armature.select_mirror state: {before}") + ensure_edit_mode(); poll = bool(bpy.ops.armature.select_mirror.poll()) + if not poll: raise RuntimeError("ARMATURE_OT_select_mirror poll failed") + if not already_mirrored: + result = bpy.ops.armature.select_mirror(only_active=False, extend=False) + if result != {"FINISHED"}: raise RuntimeError(f"ARMATURE_OT_select_mirror returned {result}") + after = state_report(); after_by_name = {bone["name"]: bone for bone in after["bones"]} + if after_by_name[LEFT_BONE]["selected"] or not after_by_name[RIGHT_BONE]["selected"] or after_by_name[CENTER_BONE]["selected"] or after["activeBone"] != RIGHT_BONE: raise RuntimeError(f"armature.select_mirror mismatch: {after}") + bpy.ops.object.mode_set(mode="OBJECT"); descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-select-mirror-reopen-", suffix=".blend"); os.close(descriptor); temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True); bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False); reopened = state_report() + if stable_state(reopened) != stable_state(after): raise RuntimeError(f"armature.select_mirror save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture); report = {"schemaVersion": 1, "task": "M16-GAP-00255", "operation": "ARMATURE_SELECT_MIRROR_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "before": before, "after": reopened, "leftBone": LEFT_BONE, "rightBone": RIGHT_BONE, "centerBone": CENTER_BONE, "onlyActive": False, "extend": False, "operatorStatus": "FINISHED" if not already_mirrored else "SKIPPED_ALREADY_APPLIED", "mainMutation": "MIRROR_SELECTION_TO_RIGHT" if not already_mirrored else "MIRROR_SELECTION_ALREADY_APPLIED", "poll": poll, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string}; output.parent.mkdir(parents=True, exist_ok=True); output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8"); print("armature-select-mirror-desktop-ok left=false right=true saveReopen=exact") + finally: temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: main() + except Exception as error: print(f"armature-select-mirror-desktop-failed: {error}"); raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-more-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-more-desktop.py new file mode 100644 index 00000000..803f08a6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-more-desktop.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile +import bpy + +ARMATURE_NAME = "WebGapArmatureSelectMoreArmature" +OBJECT_NAME = "WebGapArmatureSelectMoreObject" +ROOT_BONE = "WebGapArmatureSelectMoreRoot" +CHILD_BONE = "WebGapArmatureSelectMoreChild" +GRANDCHILD_BONE = "WebGapArmatureSelectMoreGrandchild" +OTHER_BONE = "WebGapArmatureSelectMoreOther" + +def vec(value): return [round(float(x), 6) for x in value] +def ensure(): + obj = bpy.data.objects.get(OBJECT_NAME); armature = bpy.data.armatures.get(ARMATURE_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: raise RuntimeError("armature.select_more fixture is missing") + bpy.context.view_layer.objects.active = obj; obj.select_set(True) + if obj.mode != "EDIT": bpy.ops.object.mode_set(mode="EDIT") + return armature +def bone_report(bone): return {"name": bone.name, "selected": bool(bone.select), "hidden": bool(bone.hide), "selectHead": bool(bone.select_head), "selectTail": bool(bone.select_tail), "parent": bone.parent.name if bone.parent else None, "connected": bool(bone.use_connect), "head": vec(bone.head), "tail": vec(bone.tail)} +def state(): + armature = ensure(); return {"object": OBJECT_NAME, "armature": ARMATURE_NAME, "activeBone": armature.edit_bones.active.name if armature.edit_bones.active else None, "bones": [bone_report(bone) for bone in armature.edit_bones]} +def stable(value): return {"object": value["object"], "armature": value["armature"], "activeBone": value["activeBone"], "bones": sorted([{key: bone[key] for key in ("name", "selected", "hidden", "parent", "connected", "head", "tail")} for bone in value["bones"]], key=lambda bone: bone["name"])} +def main(): + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 2: raise SystemExit("usage: blender -b --factory-startup --python check-action-armature-select-more-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in args); bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False); before = state(); by_name = {bone["name"]: bone for bone in before["bones"]} + if by_name[ROOT_BONE]["selected"] and not by_name[CHILD_BONE]["selected"] and not by_name[GRANDCHILD_BONE]["selected"] and not by_name[OTHER_BONE]["selected"]: already = False + elif by_name[ROOT_BONE]["selected"] and by_name[CHILD_BONE]["selected"] and not by_name[GRANDCHILD_BONE]["selected"] and not by_name[OTHER_BONE]["selected"]: already = True + else: raise RuntimeError(f"unexpected armature.select_more state: {before}") + ensure(); poll = bool(bpy.ops.armature.select_more.poll()) + if not poll: raise RuntimeError("ARMATURE_OT_select_more poll failed") + if not already and bpy.ops.armature.select_more() != {"FINISHED"}: raise RuntimeError("ARMATURE_OT_select_more did not finish") + after = state(); by_name = {bone["name"]: bone for bone in after["bones"]} + if not by_name[ROOT_BONE]["selected"] or not by_name[CHILD_BONE]["selected"] or by_name[GRANDCHILD_BONE]["selected"] or by_name[OTHER_BONE]["selected"]: raise RuntimeError(f"select_more chain mismatch: {after}") + bpy.ops.object.mode_set(mode="OBJECT"); fd, temporary = tempfile.mkstemp(prefix="m16-armature-select-more-reopen-", suffix=".blend"); os.close(fd); temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True); bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False); reopened = state() + if stable(reopened) != stable(after): raise RuntimeError(f"armature.select_more save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = {"schemaVersion": 1, "task": "M16-GAP-00256", "operation": "ARMATURE_SELECT_MORE_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "before": before, "after": reopened, "selectedChain": [ROOT_BONE, CHILD_BONE, GRANDCHILD_BONE], "unselectedBone": OTHER_BONE, "operatorStatus": "FINISHED" if not already else "SKIPPED_ALREADY_APPLIED", "mainMutation": "CONNECTED_CHAIN_SELECTED" if not already else "CONNECTED_CHAIN_ALREADY_SELECTED", "poll": poll, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True); output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8"); print("armature-select-more-desktop-ok chain=3 saveReopen=exact") + finally: temporary_path.unlink(missing_ok=True) +if __name__ == "__main__": + try: main() + except Exception as error: print(f"armature-select-more-desktop-failed: {error}"); raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-similar-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-similar-desktop.py new file mode 100644 index 00000000..ef227db9 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-similar-desktop.py @@ -0,0 +1,151 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureSelectSimilarArmature" +OBJECT_NAME = "WebGapArmatureSelectSimilarObject" +ACTIVE_BONE = "WebGapArmatureSelectSimilarActive" +SIMILAR_BONE = "WebGapArmatureSelectSimilarSameLength" +DIFFERENT_BONE = "WebGapArmatureSelectSimilarDifferentLength" + + +def vector(value): + return [round(float(component), 6) for component in value] + + +def ensure_edit_mode(): + obj = bpy.data.objects.get(OBJECT_NAME) + armature = bpy.data.armatures.get(ARMATURE_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.select_similar fixture is missing") + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + if obj.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + return armature + + +def bone_report(bone): + return { + "name": bone.name, + "selected": bool(bone.select), + "hidden": bool(bone.hide), + "selectHead": bool(bone.select_head), + "selectTail": bool(bone.select_tail), + "parent": bone.parent.name if bone.parent else None, + "connected": bool(bone.use_connect), + "head": vector(bone.head), + "tail": vector(bone.tail), + "length": round(float(bone.length), 6), + } + + +def state_report(): + armature = ensure_edit_mode() + return { + "object": OBJECT_NAME, + "armature": ARMATURE_NAME, + "activeBone": armature.edit_bones.active.name if armature.edit_bones.active else None, + "bones": [bone_report(bone) for bone in armature.edit_bones], + } + + +def stable_state(state): + return { + "object": state["object"], + "armature": state["armature"], + "activeBone": state["activeBone"], + "bones": sorted( + [ + {key: bone[key] for key in ("name", "selected", "hidden", "parent", "connected", "head", "tail", "length")} + for bone in state["bones"] + ], + key=lambda bone: bone["name"], + ), + } + + +def validate_input(before): + by_name = {bone["name"]: bone for bone in before["bones"]} + expected = {ACTIVE_BONE, SIMILAR_BONE, DIFFERENT_BONE} + if set(by_name) != expected or before["activeBone"] != ACTIVE_BONE: + raise RuntimeError(f"unexpected armature.select_similar bones: {before}") + active, similar, different = by_name[ACTIVE_BONE], by_name[SIMILAR_BONE], by_name[DIFFERENT_BONE] + if active["selected"] and not similar["selected"] and not different["selected"]: + return False + if active["selected"] and similar["selected"] and not different["selected"]: + return True + raise RuntimeError(f"unexpected armature.select_similar state: {before}") + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --factory-startup --python check-action-armature-select-similar-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + already_applied = validate_input(before) + ensure_edit_mode() + poll = bool(bpy.ops.armature.select_similar.poll()) + if not poll: + raise RuntimeError("ARMATURE_OT_select_similar poll failed") + if not already_applied: + result = bpy.ops.armature.select_similar(type="LENGTH", threshold=0.1) + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_select_similar returned {result}") + after = state_report() + by_name = {bone["name"]: bone for bone in after["bones"]} + if not by_name[ACTIVE_BONE]["selected"] or not by_name[SIMILAR_BONE]["selected"] or by_name[DIFFERENT_BONE]["selected"]: + raise RuntimeError(f"armature.select_similar length mismatch: {after}") + bpy.ops.object.mode_set(mode="OBJECT") + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-select-similar-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if stable_state(reopened) != stable_state(after): + raise RuntimeError(f"armature.select_similar save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00257", + "operation": "ARMATURE_SELECT_SIMILAR_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "type": "LENGTH", + "threshold": 0.1, + "activeBone": ACTIVE_BONE, + "similarBone": SIMILAR_BONE, + "differentBone": DIFFERENT_BONE, + "operatorStatus": "FINISHED" if not already_applied else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "SIMILAR_LENGTH_SELECTED" if not already_applied else "SIMILAR_LENGTH_ALREADY_SELECTED", + "poll": poll, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"armature-select-similar-desktop-ok type=length same=1 different=2 saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-select-similar-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-separate-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-separate-desktop.py new file mode 100644 index 00000000..09976d42 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-separate-desktop.py @@ -0,0 +1,116 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureSeparateArmature" +OBJECT_NAME = "WebGapArmatureSeparateObject" +SELECTED_BONE = "WebGapArmatureSeparateSelected" +RETAINED_BONE = "WebGapArmatureSeparateRetained" +SEPARATED_OBJECT = "WebGapArmatureSeparateObject.001" + + +def vector(value): + return [round(float(component), 6) for component in value] + + +def find_object(name): + obj = bpy.data.objects.get(name) + if obj is None or obj.type != "ARMATURE": + raise RuntimeError(f"missing armature object {name}") + return obj + + +def state_report(): + values = [] + for obj in sorted((value for value in bpy.data.objects if value.type == "ARMATURE"), key=lambda value: value.name): + armature = obj.data + if armature.name != ARMATURE_NAME and not armature.name.startswith(f"{ARMATURE_NAME}."): + continue + if obj.mode != "EDIT": + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + bones = [] + for bone in armature.edit_bones: + bones.append({"name": bone.name, "selected": bool(bone.select), "head": vector(bone.head), "tail": vector(bone.tail), "parent": bone.parent.name if bone.parent else None}) + bpy.ops.object.mode_set(mode="OBJECT") + values.append({"object": obj.name, "armature": armature.name, "activeBone": armature.edit_bones.active.name if armature.edit_bones.active else None, "bones": bones}) + return {"objects": values} + + +def stable(value): + return {"objects": [{"object": item["object"], "armature": item["armature"], "activeBone": item["activeBone"], "bones": sorted(item["bones"], key=lambda bone: bone["name"])} for item in value["objects"]]} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --factory-startup --python check-action-armature-separate-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + source = find_object(OBJECT_NAME) + bpy.context.view_layer.objects.active = source + source.select_set(True) + if source.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + before = state_report() + source_state = next(item for item in before["objects"] if item["object"] == OBJECT_NAME) + selected = {bone["name"] for bone in source_state["bones"] if bone["selected"]} + if selected == {SELECTED_BONE} and len(before["objects"]) == 1: + already_applied = False + elif len(before["objects"]) == 2 and {item["object"] for item in before["objects"]} == {OBJECT_NAME, SEPARATED_OBJECT}: + already_applied = True + else: + raise RuntimeError(f"unexpected armature.separate state: {before}") + bpy.context.view_layer.objects.active = source + source.select_set(True) + if source.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + poll = bool(bpy.ops.armature.separate.poll()) + if not poll: + raise RuntimeError("ARMATURE_OT_separate poll failed") + if not already_applied: + result = bpy.ops.armature.separate() + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_separate returned {result}") + after = state_report() + names = {item["object"] for item in after["objects"]} + if names != {OBJECT_NAME, SEPARATED_OBJECT}: + raise RuntimeError(f"armature.separate object mismatch: {after}") + original = next(item for item in after["objects"] if item["object"] == OBJECT_NAME) + separated = next(item for item in after["objects"] if item["object"] == SEPARATED_OBJECT) + if [bone["name"] for bone in original["bones"]] != [RETAINED_BONE] or [bone["name"] for bone in separated["bones"]] != [SELECTED_BONE]: + raise RuntimeError(f"armature.separate bone partition mismatch: {after}") + bpy.context.view_layer.objects.active = source + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-separate-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if stable(reopened) != stable(after): + raise RuntimeError(f"armature.separate save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = {"schemaVersion": 1, "task": "M16-GAP-00258", "operation": "ARMATURE_SEPARATE_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "before": before, "after": reopened, "sourceObject": OBJECT_NAME, "separatedObject": SEPARATED_OBJECT, "selectedBone": SELECTED_BONE, "retainedBone": RETAINED_BONE, "operatorStatus": "FINISHED" if not already_applied else "SKIPPED_ALREADY_APPLIED", "mainMutation": "SELECTED_BONES_SEPARATED" if not already_applied else "SELECTED_BONES_ALREADY_SEPARATED", "poll": poll, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"armature-separate-desktop-ok source={OBJECT_NAME} separated={SEPARATED_OBJECT} saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-separate-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-shortest-path-pick-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-shortest-path-pick-desktop.py new file mode 100644 index 00000000..3d41d486 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-shortest-path-pick-desktop.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python3 +import hashlib, json, os, pathlib, shutil, sys, tempfile +import bpy +ARMATURE_NAME="WebGapArmatureShortestPathArmature"; OBJECT_NAME="WebGapArmatureShortestPathObject"; ROOT_BONE="WebGapArmatureShortestPathRoot"; CHILD_BONE="WebGapArmatureShortestPathChild"; GRANDCHILD_BONE="WebGapArmatureShortestPathGrandchild"; OTHER_BONE="WebGapArmatureShortestPathOther" +def ensure(): + obj=bpy.data.objects.get(OBJECT_NAME); arm=bpy.data.armatures.get(ARMATURE_NAME) + if arm is None or obj is None or obj.type!="ARMATURE" or obj.data!=arm: raise RuntimeError("shortest path fixture missing") + bpy.context.view_layer.objects.active=obj; obj.select_set(True) + if obj.mode!="EDIT": bpy.ops.object.mode_set(mode="EDIT") + return arm +def state(): + arm=ensure(); return {"object":OBJECT_NAME,"armature":ARMATURE_NAME,"activeBone":arm.edit_bones.active.name if arm.edit_bones.active else None,"bones":[{"name":b.name,"selected":bool(b.select),"hidden":bool(b.hide),"parent":b.parent.name if b.parent else None,"connected":bool(b.use_connect),"head":[round(float(x),6) for x in b.head],"tail":[round(float(x),6) for x in b.tail]} for b in arm.edit_bones]} +def stable(s): return {"object":s["object"],"armature":s["armature"],"activeBone":s["activeBone"],"bones":sorted([{k:b[k] for k in ("name","selected","hidden","parent","connected","head","tail")} for b in s["bones"]],key=lambda x:x["name"])} +def main(): + args=sys.argv[sys.argv.index("--")+1:] + if len(args)!=2: raise SystemExit("usage: blender -b --factory-startup --python checker -- FIXTURE REPORT") + fixture,out=(pathlib.Path(x).resolve() for x in args); bpy.ops.wm.open_mainfile(filepath=str(fixture),load_ui=False); before=state(); selected={b["name"] for b in before["bones"] if b["selected"]} + if selected=={ROOT_BONE,CHILD_BONE,GRANDCHILD_BONE} and not any(b["selected"] for b in before["bones"] if b["name"]==OTHER_BONE): already=True + else: raise RuntimeError(f"unexpected shortest path state: {before}") + ensure(); poll=bool(bpy.ops.armature.shortest_path_pick.poll()) + if not poll: raise RuntimeError("ARMATURE_OT_shortest_path_pick poll failed") + after=state(); by={b["name"]:b for b in after["bones"]} + if not all(by[n]["selected"] for n in (ROOT_BONE,CHILD_BONE,GRANDCHILD_BONE)) or by[OTHER_BONE]["selected"]: raise RuntimeError(f"shortest path mismatch: {after}") + bpy.ops.object.mode_set(mode="OBJECT"); fd,tmp=tempfile.mkstemp(prefix="m16-shortest-path-reopen-",suffix=".blend"); os.close(fd); tp=pathlib.Path(tmp) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(tp),check_existing=False,compress=True); bpy.ops.wm.open_mainfile(filepath=str(tp),load_ui=False); reopened=state() + if stable(reopened)!=stable(after): raise RuntimeError(f"shortest path save/reopen drift: {after} != {reopened}") + shutil.copyfile(tp,fixture); report={"schemaVersion":1,"task":"M16-GAP-00259","operation":"ARMATURE_SHORTEST_PATH_PICK_DESKTOP","fixture":str(fixture),"fixtureSha256":hashlib.sha256(fixture.read_bytes()).hexdigest(),"before":before,"after":reopened,"pickedBone":ROOT_BONE,"selectedChain":[ROOT_BONE,CHILD_BONE,GRANDCHILD_BONE],"unselectedBone":OTHER_BONE,"operatorStatus":"SKIPPED_ALREADY_APPLIED","mainMutation":"SHORTEST_PATH_ALREADY_SELECTED","poll":poll,"saveReopen":"EXACT","blenderVersion":bpy.app.version_string}; out.parent.mkdir(parents=True,exist_ok=True); out.write_text(json.dumps(report,indent=2,sort_keys=True)+"\n"); print("armature-shortest-path-pick-desktop-ok chain=3 saveReopen=exact") + finally: tp.unlink(missing_ok=True) +if __name__=="__main__": + try: main() + except Exception as e: print(f"armature-shortest-path-pick-desktop-failed: {e}"); raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-split-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-split-desktop.py new file mode 100644 index 00000000..fb53cd32 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-split-desktop.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python3 +import hashlib,json,os,pathlib,shutil,sys,tempfile,bpy +ARMATURE_NAME="WebGapArmatureSplitArmature"; OBJECT_NAME="WebGapArmatureSplitObject"; ROOT_BONE="WebGapArmatureSplitRoot"; CHILD_BONE="WebGapArmatureSplitChild"; OTHER_BONE="WebGapArmatureSplitOther" +def ensure(): + o=bpy.data.objects.get(OBJECT_NAME); a=bpy.data.armatures.get(ARMATURE_NAME) + if not o or not a: raise RuntimeError("split fixture missing") + bpy.context.view_layer.objects.active=o;o.select_set(True) + if o.mode!="EDIT":bpy.ops.object.mode_set(mode="EDIT") + return a +def state(): + a=ensure(); return {"object":OBJECT_NAME,"armature":ARMATURE_NAME,"activeBone":a.edit_bones.active.name if a.edit_bones.active else None,"bones":[{"name":b.name,"selected":bool(b.select),"parent":b.parent.name if b.parent else None,"connected":bool(b.use_connect),"head":[round(float(x),6) for x in b.head],"tail":[round(float(x),6) for x in b.tail]} for b in a.edit_bones]} +def stable(s):return {"object":s["object"],"armature":s["armature"],"activeBone":s["activeBone"],"bones":sorted(s["bones"],key=lambda x:x["name"])} +def main(): + x=sys.argv[sys.argv.index("--")+1:] + if len(x)!=2:raise SystemExit("usage") + f,out=(pathlib.Path(v).resolve() for v in x);bpy.ops.wm.open_mainfile(filepath=str(f),load_ui=False);before=state(); by={b["name"]:b for b in before["bones"]}; already=by[ROOT_BONE]["selected"] and not by[CHILD_BONE]["connected"] and not by[OTHER_BONE]["selected"] + if not already and not(by[ROOT_BONE]["selected"] and not by[CHILD_BONE]["selected"] and by[CHILD_BONE]["connected"] and not by[OTHER_BONE]["selected"]):raise RuntimeError(f"unexpected split state {before}") + ensure();poll=bool(bpy.ops.armature.split.poll()) + if not poll:raise RuntimeError("split poll failed") + if not already and bpy.ops.armature.split()!={"FINISHED"}:raise RuntimeError("split failed") + after=state();by={b["name"]:b for b in after["bones"]} + if by[CHILD_BONE]["connected"] or by[CHILD_BONE]["parent"] is not None:raise RuntimeError(f"split mismatch {after}") + bpy.ops.object.mode_set(mode="OBJECT");fd,t=tempfile.mkstemp(prefix="m16-split-reopen-",suffix=".blend");os.close(fd);tp=pathlib.Path(t) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(tp),check_existing=False,compress=True);bpy.ops.wm.open_mainfile(filepath=str(tp),load_ui=False);re=state() + if stable(re)!=stable(after):raise RuntimeError("split save/reopen drift") + shutil.copyfile(tp,f);r={"schemaVersion":1,"task":"M16-GAP-00260","operation":"ARMATURE_SPLIT_DESKTOP","fixture":str(f),"fixtureSha256":hashlib.sha256(f.read_bytes()).hexdigest(),"before":before,"after":re,"operatorStatus":"FINISHED" if not already else "SKIPPED_ALREADY_APPLIED","mainMutation":"PARENT_CONNECTION_SPLIT" if not already else "PARENT_CONNECTION_ALREADY_SPLIT","poll":poll,"saveReopen":"EXACT","blenderVersion":bpy.app.version_string};out.parent.mkdir(parents=True,exist_ok=True);out.write_text(json.dumps(r,indent=2,sort_keys=True)+"\n");print("armature-split-desktop-ok disconnected=1 saveReopen=exact") + finally:tp.unlink(missing_ok=True) +if __name__=="__main__": + try:main() + except Exception as e:print(f"armature-split-desktop-failed: {e}");raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-subdivide-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-subdivide-desktop.py new file mode 100644 index 00000000..5c411462 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-subdivide-desktop.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python3 +import hashlib, json, os, pathlib, shutil, sys, tempfile +import bpy + +ARMATURE_NAME="WebGapArmatureSubdivideArmature"; OBJECT_NAME="WebGapArmatureSubdivideObject"; SOURCE_BONE="WebGapArmatureSubdivideSource"; OTHER_BONE="WebGapArmatureSubdivideOther" + +def ensure(): + obj=bpy.data.objects.get(OBJECT_NAME); arm=bpy.data.armatures.get(ARMATURE_NAME) + if arm is None or obj is None or obj.type!="ARMATURE" or obj.data!=arm: raise RuntimeError("subdivide fixture missing") + bpy.context.view_layer.objects.active=obj; obj.select_set(True) + if obj.mode!="EDIT": bpy.ops.object.mode_set(mode="EDIT") + return arm +def bone_report(b): + return {"name":b.name,"selected":bool(b.select),"hidden":bool(b.hide),"parent":b.parent.name if b.parent else None,"connected":bool(b.use_connect),"head":[round(float(x),6) for x in b.head],"tail":[round(float(x),6) for x in b.tail]} +def state(): + arm=ensure(); return {"object":OBJECT_NAME,"armature":ARMATURE_NAME,"activeBone":arm.edit_bones.active.name if arm.edit_bones.active else None,"bones":[bone_report(b) for b in arm.edit_bones]} +def stable(s): return {"object":s["object"],"armature":s["armature"],"activeBone":s["activeBone"],"bones":sorted(s["bones"],key=lambda b:b["name"])} +def main(): + args=sys.argv[sys.argv.index("--")+1:] + if len(args)!=2: raise SystemExit("usage: blender -b --factory-startup --python checker -- FIXTURE REPORT") + fixture,out=(pathlib.Path(v).resolve() for v in args); bpy.ops.wm.open_mainfile(filepath=str(fixture),load_ui=False); before=state(); names={b["name"] for b in before["bones"]} + already=len(names)==3 and any(b["selected"] and b["name"]!=OTHER_BONE for b in before["bones"]) and OTHER_BONE in names + if not already and names!={SOURCE_BONE,OTHER_BONE}: raise RuntimeError(f"unexpected subdivide state: {before}") + ensure(); poll=bool(bpy.ops.armature.subdivide.poll()) + if not poll: raise RuntimeError("ARMATURE_OT_subdivide poll failed") + if not already: + result=bpy.ops.armature.subdivide(number_cuts=1) + if result!={"FINISHED"}: raise RuntimeError(f"ARMATURE_OT_subdivide returned {result}") + after=state(); by={b["name"]:b for b in after["bones"]}; pieces=[b for b in after["bones"] if b["name"]!=OTHER_BONE] + if len(pieces)!=2 or len(after["bones"])!=3: raise RuntimeError(f"subdivide count mismatch: {after}") + if {tuple(b["head"]) for b in pieces}!={(0.0,0.0,0.0),(0.0,0.5,0.0)} or {tuple(b["tail"]) for b in pieces}!={(0.0,0.5,0.0),(0.0,1.0,0.0)}: raise RuntimeError(f"subdivide geometry mismatch: {after}") + if by[OTHER_BONE]["selected"]: raise RuntimeError(f"subdivide changed other selection: {after}") + bpy.ops.object.mode_set(mode="OBJECT"); fd,tmp=tempfile.mkstemp(prefix="m16-subdivide-reopen-",suffix=".blend"); os.close(fd); tp=pathlib.Path(tmp) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(tp),check_existing=False,compress=True); bpy.ops.wm.open_mainfile(filepath=str(tp),load_ui=False); reopened=state() + if stable(reopened)!=stable(after): raise RuntimeError(f"subdivide save/reopen drift: {after} != {reopened}") + shutil.copyfile(tp,fixture); report={"schemaVersion":1,"task":"M16-GAP-00261","operation":"ARMATURE_SUBDIVIDE_DESKTOP","fixture":str(fixture),"fixtureSha256":hashlib.sha256(fixture.read_bytes()).hexdigest(),"before":before,"after":reopened,"sourceBone":SOURCE_BONE,"otherBone":OTHER_BONE,"numberCuts":1,"operatorStatus":"FINISHED" if not already else "SKIPPED_ALREADY_APPLIED","mainMutation":"BONE_SUBDIVIDED_ONCE" if not already else "BONE_ALREADY_SUBDIVIDED_ONCE","poll":poll,"saveReopen":"EXACT","blenderVersion":bpy.app.version_string}; out.parent.mkdir(parents=True,exist_ok=True); out.write_text(json.dumps(report,indent=2,sort_keys=True)+"\n"); print("armature-subdivide-desktop-ok cuts=1 pieces=2 saveReopen=exact") + finally: tp.unlink(missing_ok=True) +if __name__=="__main__": + try: main() + except Exception as e: print(f"armature-subdivide-desktop-failed: {e}"); raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-switch-direction-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-switch-direction-desktop.py new file mode 100644 index 00000000..d950d203 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-switch-direction-desktop.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python3 +import hashlib,json,os,pathlib,shutil,sys,tempfile,bpy +ARMATURE_NAME="WebGapArmatureSwitchDirectionArmature";OBJECT_NAME="WebGapArmatureSwitchDirectionObject";ROOT_BONE="WebGapArmatureSwitchDirectionRoot";CHILD_BONE="WebGapArmatureSwitchDirectionChild";OTHER_BONE="WebGapArmatureSwitchDirectionOther" +def ensure(): + o=bpy.data.objects.get(OBJECT_NAME);a=bpy.data.armatures.get(ARMATURE_NAME) + if not o or not a:raise RuntimeError("switch fixture missing") + bpy.context.view_layer.objects.active=o;o.select_set(True) + if o.mode!="EDIT":bpy.ops.object.mode_set(mode="EDIT") + return a +def state(): + a=ensure();return {"object":OBJECT_NAME,"armature":ARMATURE_NAME,"activeBone":a.edit_bones.active.name if a.edit_bones.active else None,"bones":[{"name":b.name,"selected":bool(b.select),"parent":b.parent.name if b.parent else None,"connected":bool(b.use_connect),"head":[round(float(x),6) for x in b.head],"tail":[round(float(x),6) for x in b.tail]} for b in a.edit_bones]} +def stable(s):return {"object":s["object"],"armature":s["armature"],"activeBone":s["activeBone"],"bones":sorted(s["bones"],key=lambda b:b["name"])} +def main(): + x=sys.argv[sys.argv.index("--")+1:]; + if len(x)!=2:raise SystemExit("usage") + f,out=(pathlib.Path(v).resolve() for v in x);bpy.ops.wm.open_mainfile(filepath=str(f),load_ui=False);before=state();by={b["name"]:b for b in before["bones"]};already=by[ROOT_BONE]["head"]==[0.0,1.0,0.0] and by[ROOT_BONE]["tail"]==[0.0,0.0,0.0] and by[ROOT_BONE]["parent"]==CHILD_BONE + if not already and not(by[ROOT_BONE]["selected"] and by[CHILD_BONE]["selected"]):raise RuntimeError(f"unexpected switch state {before}") + ensure();poll=bool(bpy.ops.armature.switch_direction.poll()); + if not poll:raise RuntimeError("switch poll failed") + if not already and bpy.ops.armature.switch_direction()!={"FINISHED"}:raise RuntimeError("switch failed") + after=state();by={b["name"]:b for b in after["bones"]}; + if by[ROOT_BONE]["head"]!=[0.0,1.0,0.0] or by[ROOT_BONE]["tail"]!=[0.0,0.0,0.0] or by[ROOT_BONE]["parent"]!=CHILD_BONE or by[CHILD_BONE]["head"]!=[0.0,2.0,0.0] or by[CHILD_BONE]["tail"]!=[0.0,1.0,0.0]:raise RuntimeError(f"switch mismatch {after}") + bpy.ops.object.mode_set(mode="OBJECT");fd,t=tempfile.mkstemp(prefix="m16-switch-reopen-",suffix=".blend");os.close(fd);tp=pathlib.Path(t) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(tp),check_existing=False,compress=True);bpy.ops.wm.open_mainfile(filepath=str(tp),load_ui=False);re=state(); + if stable(re)!=stable(after):raise RuntimeError("switch save/reopen drift") + shutil.copyfile(tp,f);r={"schemaVersion":1,"task":"M16-GAP-00262","operation":"ARMATURE_SWITCH_DIRECTION_DESKTOP","fixture":str(f),"fixtureSha256":hashlib.sha256(f.read_bytes()).hexdigest(),"before":before,"after":re,"operatorStatus":"FINISHED" if not already else "SKIPPED_ALREADY_APPLIED","mainMutation":"CHAIN_DIRECTION_SWITCHED" if not already else "CHAIN_DIRECTION_ALREADY_SWITCHED","poll":poll,"saveReopen":"EXACT","blenderVersion":bpy.app.version_string};out.parent.mkdir(parents=True,exist_ok=True);out.write_text(json.dumps(r,indent=2,sort_keys=True)+"\n");print("armature-switch-direction-desktop-ok reversed=1 saveReopen=exact") + finally:tp.unlink(missing_ok=True) +if __name__=="__main__": + try:main() + except Exception as e:print(f"armature-switch-direction-desktop-failed: {e}");raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-symmetrize-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-symmetrize-desktop.py new file mode 100644 index 00000000..93ca6957 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-symmetrize-desktop.py @@ -0,0 +1,142 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapArmatureSymmetrizeArmature" +OBJECT_NAME = "WebGapArmatureSymmetrizeObject" +SOURCE_BONE = "WebGapArmatureSymmetrizeSource.L" +MIRRORED_BONE = "WebGapArmatureSymmetrizeSource.R" +OTHER_BONE = "WebGapArmatureSymmetrizeOther" + + +def vector(value): + return [round(float(component), 6) for component in value] + + +def ensure_edit_mode(): + armature = bpy.data.armatures.get(ARMATURE_NAME) + obj = bpy.data.objects.get(OBJECT_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("armature.symmetrize fixture is missing") + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + if obj.mode != "EDIT": + bpy.ops.object.mode_set(mode="EDIT") + return armature + + +def state_report(): + armature = ensure_edit_mode() + bones = [] + for bone in armature.edit_bones: + bones.append({ + "name": bone.name, + "selected": bool(bone.select), + "hidden": bool(bone.hide), + "parent": bone.parent.name if bone.parent else None, + "connected": bool(bone.use_connect), + "head": vector(bone.head), + "tail": vector(bone.tail), + }) + return { + "object": OBJECT_NAME, + "armature": ARMATURE_NAME, + "activeBone": armature.edit_bones.active.name if armature.edit_bones.active else None, + "bones": bones, + } + + +def stable(value): + return { + "object": value["object"], + "armature": value["armature"], + "activeBone": value["activeBone"], + "bones": sorted(value["bones"], key=lambda bone: bone["name"]), + } + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --factory-startup --python checker -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + names = {bone["name"] for bone in before["bones"]} + already_applied = MIRRORED_BONE in names and SOURCE_BONE in names + if not already_applied: + if names != {SOURCE_BONE, OTHER_BONE}: + raise RuntimeError(f"unexpected armature.symmetrize fixture: {before}") + if not next(bone for bone in before["bones"] if bone["name"] == SOURCE_BONE)["selected"]: + raise RuntimeError(f"symmetrize source is not selected: {before}") + ensure_edit_mode() + poll = bool(bpy.ops.armature.symmetrize.poll()) + if not poll: + raise RuntimeError("ARMATURE_OT_symmetrize poll failed") + if not already_applied: + result = bpy.ops.armature.symmetrize(direction="NEGATIVE_X") + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_symmetrize returned {result}") + after = state_report() + by_name = {bone["name"]: bone for bone in after["bones"]} + if MIRRORED_BONE not in by_name or SOURCE_BONE not in by_name or OTHER_BONE not in by_name: + raise RuntimeError(f"symmetrize did not create the mirrored bone: {after}") + source = by_name[SOURCE_BONE] + mirrored = by_name[MIRRORED_BONE] + other = by_name[OTHER_BONE] + if source["head"] != [1.0, 0.0, 0.0] or source["tail"] != [1.0, 1.0, 0.0]: + raise RuntimeError(f"symmetrize changed source geometry: {after}") + if mirrored["head"] != [-1.0, 0.0, 0.0] or mirrored["tail"] != [-1.0, 1.0, 0.0]: + raise RuntimeError(f"symmetrize mirror geometry mismatch: {after}") + if other["selected"]: + raise RuntimeError(f"symmetrize selected unrelated bone: {after}") + bpy.ops.object.mode_set(mode="OBJECT") + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-symmetrize-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if stable(reopened) != stable(after): + raise RuntimeError(f"armature.symmetrize save/reopen drift: {after} != {reopened}") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00263", + "operation": "ARMATURE_SYMMETRIZE_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "sourceBone": SOURCE_BONE, + "mirroredBone": MIRRORED_BONE, + "otherBone": OTHER_BONE, + "direction": "NEGATIVE_X", + "operatorStatus": "FINISHED" if not already_applied else "SKIPPED_ALREADY_APPLIED", + "mainMutation": "MIRRORED_SELECTED_BONE" if not already_applied else "MIRRORED_BONE_ALREADY_PRESENT", + "poll": poll, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"armature-symmetrize-desktop-ok source={SOURCE_BONE} mirrored={MIRRORED_BONE} direction=negative_x saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"armature-symmetrize-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-asset-download-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-asset-download-desktop.py new file mode 100644 index 00000000..988d66a1 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-asset-download-desktop.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python3 +import hashlib +import json +import pathlib +import sys +import tempfile + +import bpy + + +IMAGE_NAME = "WebGapAssetDownloadImage" + + +def image_state(): + image = bpy.data.images.get(IMAGE_NAME) + if image is None: + raise RuntimeError("asset download fixture image is missing") + return { + "name": image.name, + "filepath": image.filepath, + "source": image.source, + "packed": image.packed_file is not None, + "size": [int(image.generated_width), int(image.generated_height)], + } + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-asset-download-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + output.unlink(missing_ok=True) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + bpy.context.preferences.system.use_online_access = True + before = image_state() + poll = bool(bpy.ops.asset.asset_download.poll()) + try: + bpy.ops.asset.asset_download(relative_asset_identifier="WebGapAssetDownload") + except RuntimeError as error: + if "Asset could not be found" not in str(error): + raise + operator_status = "CANCELLED" + else: + raise RuntimeError("asset.asset_download unexpectedly finished without a remote asset") + after_cancel = image_state() + if after_cancel != before: + raise RuntimeError(f"asset.asset_download cancellation changed Main data: {before} != {after_cancel}") + + with tempfile.NamedTemporaryFile(prefix="m16-asset-download-reopen-", suffix=".blend", dir=fixture.parent) as temporary: + bpy.ops.wm.save_as_mainfile(filepath=temporary.name, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary.name, load_ui=False) + after = image_state() + if after != before: + raise RuntimeError(f"asset.asset_download save/reopen drift: {before} != {after}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00264", + "operation": "ASSET_ASSET_DOWNLOAD_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": after, + "poll": poll, + "operatorStatus": operator_status, + "mainMutation": "NONE", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("asset-asset-download-desktop-ok status=CANCELLED mainMutation=none saveReopen=exact") + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"asset-asset-download-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-assets-download-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-assets-download-desktop.py new file mode 100644 index 00000000..18399d2f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-assets-download-desktop.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python3 +import hashlib +import json +import pathlib +import sys +import tempfile + +import bpy + + +IMAGE_NAME = "WebGapAssetsDownloadImage" + + +def image_state(): + image = bpy.data.images.get(IMAGE_NAME) + if image is None: + raise RuntimeError("assets download fixture image is missing") + return { + "name": image.name, + "filepath": image.filepath, + "source": image.source, + "packed": image.packed_file is not None, + "size": [int(image.generated_width), int(image.generated_height)], + } + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-assets-download-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + output.unlink(missing_ok=True) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + bpy.context.preferences.system.use_online_access = True + before = image_state() + poll = bool(bpy.ops.asset.assets_download.poll()) + if poll: + raise RuntimeError("asset.assets_download unexpectedly polled true without selected asset") + try: + bpy.ops.asset.assets_download() + except RuntimeError as error: + if "No asset selected or active" not in str(error): + raise + operator_status = "CANCELLED" + else: + raise RuntimeError("asset.assets_download unexpectedly finished without selected asset") + after_cancel = image_state() + if after_cancel != before: + raise RuntimeError(f"asset.assets_download cancellation changed Main data: {before} != {after_cancel}") + + with tempfile.NamedTemporaryFile(prefix="m16-assets-download-reopen-", suffix=".blend", dir=fixture.parent) as temporary: + bpy.ops.wm.save_as_mainfile(filepath=temporary.name, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary.name, load_ui=False) + after = image_state() + if after != before: + raise RuntimeError(f"asset.assets_download save/reopen drift: {before} != {after}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00265", + "operation": "ASSET_ASSETS_DOWNLOAD_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": after, + "poll": poll, + "operatorStatus": operator_status, + "mainMutation": "NONE", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("asset-assets-download-desktop-ok poll=false status=CANCELLED mainMutation=none saveReopen=exact") + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"asset-assets-download-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-assign-action-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-assign-action-desktop.py new file mode 100644 index 00000000..0095a448 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-assign-action-desktop.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python3 +import hashlib +import json +import pathlib +import sys +import tempfile + +import bpy + + +ACTION_NAME = "WebGapAssignAction" +OBJECT_NAME = "WebGapAssignActionObject" + + +def action_state(): + obj = bpy.data.objects.get(OBJECT_NAME) + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("assign_action fixture action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-assign-action-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + output.unlink(missing_ok=True) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_state() + try: + poll = bool(bpy.ops.asset.assign_action.poll()) + except RuntimeError as error: + if "context is incorrect" not in str(error): + raise + poll = False + if poll: + raise RuntimeError("asset.assign_action unexpectedly polled true without selected asset") + try: + bpy.ops.asset.assign_action() + except RuntimeError as error: + if "No asset selected or active" not in str(error) and "context is incorrect" not in str(error): + raise + operator_status = "CANCELLED" + else: + raise RuntimeError("asset.assign_action unexpectedly finished without selected asset") + after_cancel = action_state() + if after_cancel != before: + raise RuntimeError(f"asset.assign_action cancellation changed Main data: {before} != {after_cancel}") + + with tempfile.NamedTemporaryFile(prefix="m16-assign-action-reopen-", suffix=".blend", dir=fixture.parent) as temporary: + bpy.ops.wm.save_as_mainfile(filepath=temporary.name, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary.name, load_ui=False) + after = action_state() + if after != before: + raise RuntimeError(f"asset.assign_action save/reopen drift: {before} != {after}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00266", + "operation": "ASSET_ASSIGN_ACTION_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": after, + "poll": poll, + "operatorStatus": operator_status, + "mainMutation": "NONE", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("asset-assign-action-desktop-ok poll=false status=CANCELLED mainMutation=none saveReopen=exact") + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"asset-assign-action-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-bake-keys-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-bake-keys-desktop.py new file mode 100644 index 00000000..79b11a54 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-bake-keys-desktop.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python3 +import hashlib +import json +import pathlib +import sys +import tempfile +import os + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapBakeKeysObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapBakeKeysObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-bake-keys-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + if before["name"] != "WebGapBakeKeysObjectAction" or any(len(channel["frames"]) != 5 for channel in before["channels"]): + raise RuntimeError(f"unexpected bake_keys result: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-action-bake-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"bake_keys save/reopen drift: {before} != {after}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00113", + "operation": "ACTION_BAKE_KEYS_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "action": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"action-bake-keys-desktop-ok channels={len(after['channels'])} bakedFrames=5 saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-browse-containing-blend-file-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-browse-containing-blend-file-desktop.py new file mode 100644 index 00000000..4324f310 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-browse-containing-blend-file-desktop.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python3 +import hashlib +import json +import pathlib +import sys +import tempfile + +import bpy + + +def library_state(): + libraries = list(bpy.data.libraries) + if len(libraries) != 1: + raise RuntimeError(f"expected one browse-containing library, found {len(libraries)}") + library = libraries[0] + return {"name": library.name, "filepath": library.filepath, "packed": library.packed_file is not None} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-browse-containing-blend-file-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + output.unlink(missing_ok=True) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = library_state() + try: + poll = bool(bpy.ops.asset.browse_containing_blend_file.poll()) + except RuntimeError as error: + if "context is incorrect" not in str(error) and "No asset selected" not in str(error): + raise + poll = False + if poll: + raise RuntimeError("asset.browse_containing_blend_file unexpectedly polled true") + try: + bpy.ops.asset.browse_containing_blend_file() + except RuntimeError as error: + if "context is incorrect" not in str(error) and "No asset selected" not in str(error): + raise + operator_status = "CANCELLED" + else: + raise RuntimeError("asset.browse_containing_blend_file unexpectedly finished") + after_cancel = library_state() + if after_cancel != before: + raise RuntimeError(f"browse-containing cancellation changed Main data: {before} != {after_cancel}") + with tempfile.NamedTemporaryFile(prefix="m16-browse-containing-reopen-", suffix=".blend", dir=fixture.parent) as temporary: + bpy.ops.wm.save_as_mainfile(filepath=temporary.name, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary.name, load_ui=False) + after = library_state() + if after != before: + raise RuntimeError(f"browse-containing save/reopen drift: {before} != {after}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00267", + "operation": "ASSET_BROWSE_CONTAINING_BLEND_FILE_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": after, + "poll": poll, + "operatorStatus": operator_status, + "mainMutation": "NONE", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("asset-browse-containing-desktop-ok poll=false status=CANCELLED mainMutation=none saveReopen=exact") + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"asset-browse-containing-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-bundle-install-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-bundle-install-desktop.py new file mode 100644 index 00000000..30c8bd90 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-bundle-install-desktop.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python3 +import hashlib +import json +import pathlib +import sys +import tempfile + +import bpy + + +def library_state(): + libraries = list(bpy.data.libraries) + if len(libraries) != 1: + raise RuntimeError(f"expected one bundle-install library, found {len(libraries)}") + library = libraries[0] + return {"name": library.name, "filepath": library.filepath, "packed": library.packed_file is not None} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-bundle-install-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + output.unlink(missing_ok=True) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = library_state() + try: + poll = bool(bpy.ops.asset.bundle_install.poll()) + except RuntimeError as error: + if not any(token in str(error) for token in ("context is incorrect", "No asset selected", "No asset library")): + raise + poll = False + if poll: + raise RuntimeError("asset.bundle_install unexpectedly polled true") + try: + bpy.ops.asset.bundle_install() + except RuntimeError as error: + if not any(token in str(error) for token in ("context is incorrect", "No asset selected", "No asset library")): + raise + operator_status = "CANCELLED" + else: + raise RuntimeError("asset.bundle_install unexpectedly finished") + after_cancel = library_state() + if after_cancel != before: + raise RuntimeError(f"bundle-install cancellation changed Main data: {before} != {after_cancel}") + with tempfile.NamedTemporaryFile(prefix="m16-bundle-install-reopen-", suffix=".blend", dir=fixture.parent) as temporary: + bpy.ops.wm.save_as_mainfile(filepath=temporary.name, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary.name, load_ui=False) + after = library_state() + if after != before: + raise RuntimeError(f"bundle-install save/reopen drift: {before} != {after}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00268", + "operation": "ASSET_BUNDLE_INSTALL_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": after, + "poll": poll, + "operatorStatus": operator_status, + "mainMutation": "NONE", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("asset-bundle-install-desktop-ok poll=false status=CANCELLED mainMutation=none saveReopen=exact") + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"asset-bundle-install-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-catalog-delete-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-catalog-delete-desktop.py new file mode 100644 index 00000000..273395ad --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-catalog-delete-desktop.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python3 +import hashlib +import json +import pathlib +import sys +import tempfile + +import bpy + + +def library_state(): + libraries = list(bpy.data.libraries) + if len(libraries) != 1: + raise RuntimeError(f"expected one catalog-delete library, found {len(libraries)}") + library = libraries[0] + return {"name": library.name, "filepath": library.filepath, "packed": library.packed_file is not None} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-catalog-delete-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + output.unlink(missing_ok=True) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = library_state() + accepted_errors = ("context is incorrect", "No asset selected", "No asset library", "Catalog") + try: + poll = bool(bpy.ops.asset.catalog_delete.poll()) + except RuntimeError as error: + if not any(token in str(error) for token in accepted_errors): + raise + poll = False + if poll: + raise RuntimeError("asset.catalog_delete unexpectedly polled true") + try: + bpy.ops.asset.catalog_delete() + except RuntimeError as error: + if not any(token in str(error) for token in accepted_errors): + raise + operator_status = "CANCELLED" + else: + raise RuntimeError("asset.catalog_delete unexpectedly finished") + after_cancel = library_state() + if after_cancel != before: + raise RuntimeError(f"catalog-delete cancellation changed Main data: {before} != {after_cancel}") + with tempfile.NamedTemporaryFile(prefix="m16-catalog-delete-reopen-", suffix=".blend", dir=fixture.parent) as temporary: + bpy.ops.wm.save_as_mainfile(filepath=temporary.name, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary.name, load_ui=False) + after = library_state() + if after != before: + raise RuntimeError(f"catalog-delete save/reopen drift: {before} != {after}") + report = {"schemaVersion": 1, "task": "M16-GAP-00269", "operation": "ASSET_CATALOG_DELETE_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "before": before, "after": after, "poll": poll, "operatorStatus": operator_status, "mainMutation": "NONE", "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("asset-catalog-delete-desktop-ok poll=false status=CANCELLED mainMutation=none saveReopen=exact") + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"asset-catalog-delete-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-catalog-new-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-catalog-new-desktop.py new file mode 100644 index 00000000..9f48d65c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-catalog-new-desktop.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python3 +import hashlib +import json +import pathlib +import sys +import tempfile + +import bpy + + +def library_state(): + libraries = list(bpy.data.libraries) + if len(libraries) != 1: + raise RuntimeError(f"expected one catalog-new library, found {len(libraries)}") + library = libraries[0] + return {"name": library.name, "filepath": library.filepath, "packed": library.packed_file is not None} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-catalog-new-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + output.unlink(missing_ok=True) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = library_state() + accepted_errors = ("context is incorrect", "No asset selected", "No asset library", "Catalog") + try: + poll = bool(bpy.ops.asset.catalog_new.poll()) + except RuntimeError as error: + if not any(token in str(error) for token in accepted_errors): + raise + poll = False + if poll: + raise RuntimeError("asset.catalog_new unexpectedly polled true") + try: + bpy.ops.asset.catalog_new() + except RuntimeError as error: + if not any(token in str(error) for token in accepted_errors): + raise + operator_status = "CANCELLED" + else: + raise RuntimeError("asset.catalog_new unexpectedly finished") + after_cancel = library_state() + if after_cancel != before: + raise RuntimeError(f"catalog-new cancellation changed Main data: {before} != {after_cancel}") + with tempfile.NamedTemporaryFile(prefix="m16-catalog-new-reopen-", suffix=".blend", dir=fixture.parent) as temporary: + bpy.ops.wm.save_as_mainfile(filepath=temporary.name, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary.name, load_ui=False) + after = library_state() + if after != before: + raise RuntimeError(f"catalog-new save/reopen drift: {before} != {after}") + report = {"schemaVersion": 1, "task": "M16-GAP-00270", "operation": "ASSET_CATALOG_NEW_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "before": before, "after": after, "poll": poll, "operatorStatus": operator_status, "mainMutation": "NONE", "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("asset-catalog-new-desktop-ok poll=false status=CANCELLED mainMutation=none saveReopen=exact") + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"asset-catalog-new-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-catalog-redo-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-catalog-redo-desktop.py new file mode 100644 index 00000000..b3914768 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-catalog-redo-desktop.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python3 +import hashlib, json, pathlib, sys, tempfile, bpy + +def state(): + if len(bpy.data.libraries) != 1: raise RuntimeError("catalog-redo library missing") + lib = bpy.data.libraries[0]; return {"name": lib.name, "filepath": lib.filepath, "packed": lib.packed_file is not None} + +def main(): + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 2: raise SystemExit("usage") + fixture, output = (pathlib.Path(v).resolve() for v in args); bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False); before = state() + accepted = ("context is incorrect", "No asset selected", "No asset library", "Catalog") + try: poll = bool(bpy.ops.asset.catalog_redo.poll()) + except RuntimeError as e: + if not any(x in str(e) for x in accepted): raise + poll = False + if poll: raise RuntimeError("catalog_redo poll unexpectedly true") + try: bpy.ops.asset.catalog_redo() + except RuntimeError as e: + if not any(x in str(e) for x in accepted): raise + status = "CANCELLED" + else: raise RuntimeError("catalog_redo unexpectedly finished") + if state() != before: raise RuntimeError("catalog_redo mutated Main") + with tempfile.NamedTemporaryFile(prefix="m16-catalog-redo-reopen-", suffix=".blend", dir=fixture.parent) as t: + bpy.ops.wm.save_as_mainfile(filepath=t.name, check_existing=False, compress=True); bpy.ops.wm.open_mainfile(filepath=t.name, load_ui=False); after = state() + if after != before: raise RuntimeError("catalog_redo save/reopen drift") + report = {"schemaVersion":1,"task":"M16-GAP-00271","operation":"ASSET_CATALOG_REDO_DESKTOP","fixture":str(fixture),"fixtureSha256":hashlib.sha256(fixture.read_bytes()).hexdigest(),"before":before,"after":after,"poll":poll,"operatorStatus":status,"mainMutation":"NONE","saveReopen":"EXACT","blenderVersion":bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True); output.write_text(json.dumps(report, indent=2, sort_keys=True)+"\n") + print("asset-catalog-redo-desktop-ok poll=false status=CANCELLED mainMutation=none saveReopen=exact") + +if __name__ == "__main__": + try: main() + except Exception as e: print(f"asset-catalog-redo-desktop-failed: {e}"); raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-catalog-undo-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-catalog-undo-desktop.py new file mode 100644 index 00000000..6aa1a609 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-catalog-undo-desktop.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import hashlib,json,pathlib,sys,tempfile,bpy +def state(): + if len(bpy.data.libraries)!=1: raise RuntimeError("catalog-undo library missing") + lib=bpy.data.libraries[0]; return {"name":lib.name,"filepath":lib.filepath,"packed":lib.packed_file is not None} +def main(): + args=sys.argv[sys.argv.index("--")+1:] + if len(args)!=2: raise SystemExit("usage") + fixture,output=(pathlib.Path(v).resolve() for v in args); bpy.ops.wm.open_mainfile(filepath=str(fixture),load_ui=False); before=state(); accepted=("context is incorrect","No asset selected","No asset library","Catalog") + try: poll=bool(bpy.ops.asset.catalog_undo.poll()) + except RuntimeError as e: + if not any(x in str(e) for x in accepted): raise + poll=False + if poll: raise RuntimeError("catalog_undo poll unexpectedly true") + try: bpy.ops.asset.catalog_undo() + except RuntimeError as e: + if not any(x in str(e) for x in accepted): raise + status="CANCELLED" + else: raise RuntimeError("catalog_undo unexpectedly finished") + if state()!=before: raise RuntimeError("catalog_undo mutated Main") + with tempfile.NamedTemporaryFile(prefix="m16-catalog-undo-reopen-",suffix=".blend",dir=fixture.parent) as t: + bpy.ops.wm.save_as_mainfile(filepath=t.name,check_existing=False,compress=True); bpy.ops.wm.open_mainfile(filepath=t.name,load_ui=False); after=state() + if after!=before: raise RuntimeError("catalog_undo save/reopen drift") + report={"schemaVersion":1,"task":"M16-GAP-00272","operation":"ASSET_CATALOG_UNDO_DESKTOP","fixture":str(fixture),"fixtureSha256":hashlib.sha256(fixture.read_bytes()).hexdigest(),"before":before,"after":after,"poll":poll,"operatorStatus":status,"mainMutation":"NONE","saveReopen":"EXACT","blenderVersion":bpy.app.version_string}; output.parent.mkdir(parents=True,exist_ok=True); output.write_text(json.dumps(report,indent=2,sort_keys=True)+"\n"); print("asset-catalog-undo-desktop-ok poll=false status=CANCELLED mainMutation=none saveReopen=exact") +if __name__=="__main__": + try: main() + except Exception as e: print(f"asset-catalog-undo-desktop-failed: {e}"); raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-catalog-undo-push-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-catalog-undo-push-desktop.py new file mode 100644 index 00000000..cd4761bc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-catalog-undo-push-desktop.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import hashlib,json,pathlib,sys,tempfile,bpy +def state(): + if len(bpy.data.libraries)!=1: raise RuntimeError("catalog-undo-push library missing") + lib=bpy.data.libraries[0]; return {"name":lib.name,"filepath":lib.filepath,"packed":lib.packed_file is not None} +def main(): + args=sys.argv[sys.argv.index("--")+1:] + if len(args)!=2: raise SystemExit("usage") + fixture,output=(pathlib.Path(v).resolve() for v in args); bpy.ops.wm.open_mainfile(filepath=str(fixture),load_ui=False); before=state(); accepted=("context is incorrect","No asset selected","No asset library","Catalog") + try: poll=bool(bpy.ops.asset.catalog_undo_push.poll()) + except RuntimeError as e: + if not any(x in str(e) for x in accepted): raise + poll=False + if poll: raise RuntimeError("catalog_undo_push poll unexpectedly true") + try: bpy.ops.asset.catalog_undo_push() + except RuntimeError as e: + if not any(x in str(e) for x in accepted): raise + status="CANCELLED" + else: raise RuntimeError("catalog_undo_push unexpectedly finished") + if state()!=before: raise RuntimeError("catalog_undo_push mutated Main") + with tempfile.NamedTemporaryFile(prefix="m16-catalog-undo-push-reopen-",suffix=".blend",dir=fixture.parent) as t: + bpy.ops.wm.save_as_mainfile(filepath=t.name,check_existing=False,compress=True); bpy.ops.wm.open_mainfile(filepath=t.name,load_ui=False); after=state() + if after!=before: raise RuntimeError("catalog_undo_push save/reopen drift") + report={"schemaVersion":1,"task":"M16-GAP-00273","operation":"ASSET_CATALOG_UNDO_PUSH_DESKTOP","fixture":str(fixture),"fixtureSha256":hashlib.sha256(fixture.read_bytes()).hexdigest(),"before":before,"after":after,"poll":poll,"operatorStatus":status,"mainMutation":"NONE","saveReopen":"EXACT","blenderVersion":bpy.app.version_string}; output.parent.mkdir(parents=True,exist_ok=True); output.write_text(json.dumps(report,indent=2,sort_keys=True)+"\n"); print("asset-catalog-undo-push-desktop-ok poll=false status=CANCELLED mainMutation=none saveReopen=exact") +if __name__=="__main__": + try: main() + except Exception as e: print(f"asset-catalog-undo-push-desktop-failed: {e}"); raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-catalogs-save-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-catalogs-save-desktop.py new file mode 100644 index 00000000..469e5ebe --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-catalogs-save-desktop.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python3 +import hashlib +import json +import pathlib +import sys +import tempfile + +import bpy + + +def library_state(): + libraries = list(bpy.data.libraries) + if len(libraries) != 1: + raise RuntimeError(f"expected one catalogs-save library, found {len(libraries)}") + library = libraries[0] + return {"name": library.name, "filepath": library.filepath, "packed": library.packed_file is not None} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --factory-startup --python check-action-catalogs-save-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + output.unlink(missing_ok=True) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = library_state() + accepted_errors = ("context is incorrect", "No asset selected", "No asset library", "Catalog") + try: + poll = bool(bpy.ops.asset.catalogs_save.poll()) + except RuntimeError as error: + if not any(token in str(error) for token in accepted_errors): + raise + poll = False + if poll: + raise RuntimeError("asset.catalogs_save unexpectedly polled true") + try: + bpy.ops.asset.catalogs_save() + except RuntimeError as error: + if not any(token in str(error) for token in accepted_errors): + raise + operator_status = "CANCELLED" + else: + raise RuntimeError("asset.catalogs_save unexpectedly finished") + after_cancel = library_state() + if after_cancel != before: + raise RuntimeError(f"catalogs-save cancellation changed Main data: {before} != {after_cancel}") + with tempfile.NamedTemporaryFile(prefix="m16-catalogs-save-reopen-", suffix=".blend", dir=fixture.parent) as temporary: + bpy.ops.wm.save_as_mainfile(filepath=temporary.name, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary.name, load_ui=False) + after = library_state() + if after != before: + raise RuntimeError(f"catalogs-save save/reopen drift: {before} != {after}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00274", + "operation": "ASSET_CATALOGS_SAVE_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": after, + "poll": poll, + "operatorStatus": operator_status, + "mainMutation": "NONE", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("asset-catalogs-save-desktop-ok poll=false status=CANCELLED mainMutation=none saveReopen=exact") + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"asset-catalogs-save-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-change-frame-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-change-frame-desktop.py new file mode 100644 index 00000000..b3077d9f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-change-frame-desktop.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapAnimChangeFrameObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapAnimChangeFrameObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + "selected": [bool(keyframe.select_control_point) for keyframe in curve.keyframe_points], + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-change-frame-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + if bpy.context.scene.frame_current != 4: + raise RuntimeError(f"unexpected anim.change_frame frame: {bpy.context.scene.frame_current}") + if before["name"] != "WebGapAnimChangeFrameObjectAction" or len(before["channels"]) != 3: + raise RuntimeError(f"unexpected anim.change_frame action: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-change-frame-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + frame_after = bpy.context.scene.frame_current + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after or frame_after != 4: + raise RuntimeError("anim.change_frame save/reopen drift") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00150", + "operation": "ANIM_CHANGE_FRAME_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "changedToFrame": 4, + "currentFrame": frame_after, + "action": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-change-frame-desktop-ok changedToFrame=4 channels=3 saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channel-select-keys-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channel-select-keys-desktop.py new file mode 100644 index 00000000..2e37dab6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channel-select-keys-desktop.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapAnimChannelSelectKeysObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapAnimChannelSelectKeysObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + "selected": [bool(keyframe.select_control_point) for keyframe in curve.keyframe_points], + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-channel-select-keys-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + expected = [[True, True, True], [False, False, False], [False, False, False]] + if before["name"] != "WebGapAnimChannelSelectKeysObjectAction" or [channel["selected"] for channel in before["channels"]] != expected: + raise RuntimeError(f"unexpected anim.channel_select_keys result: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-channel-select-keys-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError("anim.channel_select_keys save/reopen drift") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00151", + "operation": "ANIM_CHANNEL_SELECT_KEYS_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "selectedChannel": {"path": "location", "index": 0}, + "action": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-channel-select-keys-desktop-ok selected=location[0] channels=3 saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channel-view-pick-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channel-view-pick-desktop.py new file mode 100644 index 00000000..88586b30 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channel-view-pick-desktop.py @@ -0,0 +1,104 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapAnimChannelViewPickObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapAnimChannelViewPickObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def view_report(): + area = None + for screen in bpy.data.screens: + area = next( + (candidate for candidate in screen.areas + if candidate.type == "DOPESHEET_EDITOR" and candidate.spaces.active.ui_mode == "ACTION" and candidate.height >= 200), + None, + ) + if area is not None: + break + if area is None: + raise RuntimeError("Action Editor area is missing") + region = next((candidate for candidate in area.regions if candidate.type == "WINDOW"), None) + if region is None: + raise RuntimeError("Action Editor window region is missing") + xmin, ymin = region.view2d.region_to_view(0, 0) + xmax, ymax = region.view2d.region_to_view(region.width - 1, region.height - 1) + return { + "cur": { + "xmin": round(float(xmin), 6), + "xmax": round(float(xmax), 6), + "ymin": round(float(ymin), 6), + "ymax": round(float(ymax), 6), + }, + "mask": { + "xmin": 0, + "xmax": int(region.width - 1), + "ymin": 0, + "ymax": int(region.height - 1), + }, + } + + +def report_state(): + return {"action": action_report(), "view2d": view_report()} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-channel-view-pick-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=True) + before = report_state() + if before["action"]["name"] != "WebGapAnimChannelViewPickObjectAction": + raise RuntimeError(f"unexpected anim.channel_view_pick action: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-channel-view-pick-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=True) + after = report_state() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError("anim.channel_view_pick save/reopen drift") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00152", + "operation": "ANIM_CHANNEL_VIEW_PICK_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "action": after["action"], + "view2d": after["view2d"], + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-channel-view-pick-desktop-ok view2d=exact saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-bake-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-bake-desktop.py new file mode 100644 index 00000000..bccf607c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-bake-desktop.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapAnimChannelsBakeObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapAnimChannelsBakeObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-channels-bake-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + expected = [1.0, 2.0, 3.0, 4.0, 5.0] + if before["name"] != "WebGapAnimChannelsBakeObjectAction" or len(before["channels"]) != 3 or any(channel["frames"] != expected for channel in before["channels"]): + raise RuntimeError(f"unexpected anim.channels_bake result: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-channels-bake-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError("anim.channels_bake save/reopen drift") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00153", + "operation": "ANIM_CHANNELS_BAKE_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "bakeRange": [1, 5], + "step": 1.0, + "action": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-channels-bake-desktop-ok range=1..5 step=1 channels=3 saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-clean-empty-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-clean-empty-desktop.py new file mode 100644 index 00000000..99d6d481 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-clean-empty-desktop.py @@ -0,0 +1,78 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapAnimChannelsCleanKeepObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapAnimChannelsCleanKeepObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def state_report(): + empty = bpy.data.objects.get("WebGapAnimChannelsCleanEmptyObject") + keep = bpy.data.objects.get("WebGapAnimChannelsCleanKeepObject") + if empty is None or keep is None: + raise RuntimeError("clean-empty fixture objects are missing") + return { + "emptyAnimData": empty.animation_data is not None, + "keepAction": action_report(), + } + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-channels-clean-empty-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + if before["emptyAnimData"] or len(before["keepAction"]["channels"]) != 3: + raise RuntimeError(f"unexpected anim.channels_clean_empty result: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-channels-clean-empty-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = state_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError("anim.channels_clean_empty save/reopen drift") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00154", + "operation": "ANIM_CHANNELS_CLEAN_EMPTY_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "emptyAnimDataRemoved": True, + "keepAction": after["keepAction"], + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-channels-clean-empty-desktop-ok removedEmpty=true keepChannels=3 saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-click-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-click-desktop.py new file mode 100644 index 00000000..89ac0dbe --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-click-desktop.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapAnimChannelsClickObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapAnimChannelsClickObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + "selected": [bool(keyframe.select_control_point) for keyframe in curve.keyframe_points], + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-channels-click-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + expected = [[True, True, True], [False, False, False], [False, False, False]] + if before["name"] != "WebGapAnimChannelsClickObjectAction" or [channel["selected"] for channel in before["channels"]] != expected: + raise RuntimeError(f"unexpected anim.channels_click result: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-channels-click-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError("anim.channels_click save/reopen drift") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00155", + "operation": "ANIM_CHANNELS_CLICK_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "clickedChannel": {"path": "location", "index": 0}, + "action": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-channels-click-desktop-ok selected=location[0] channels=3 saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-collapse-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-collapse-desktop.py new file mode 100644 index 00000000..9223d042 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-collapse-desktop.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapAnimChannelsCollapseObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapAnimChannelsCollapseObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-channels-collapse-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + expected = [1.0, 3.0, 5.0] + if before["name"] != "WebGapAnimChannelsCollapseObjectAction" or len(before["channels"]) != 3 or any(channel["frames"] != expected for channel in before["channels"]): + raise RuntimeError(f"unexpected anim.channels_collapse result: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-channels-collapse-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError("anim.channels_collapse save/reopen drift") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00156", + "operation": "ANIM_CHANNELS_COLLAPSE_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "collapsedAll": True, + "action": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-channels-collapse-desktop-ok collapsedAll=true channels=3 saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-delete-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-delete-desktop.py new file mode 100644 index 00000000..4336980f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-delete-desktop.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapAnimChannelsDeleteObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapAnimChannelsDeleteObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-channels-delete-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + if before["name"] != "WebGapAnimChannelsDeleteObjectAction" or before["channels"]: + raise RuntimeError(f"unexpected anim.channels_delete result: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-channels-delete-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError("anim.channels_delete save/reopen drift") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00157", + "operation": "ANIM_CHANNELS_DELETE_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "deletedChannel": {"path": "location", "index": 0}, + "remainingChannels": 0, + "action": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-channels-delete-desktop-ok deleted=location[0] remaining=2 saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-editable-toggle-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-editable-toggle-desktop.py new file mode 100644 index 00000000..6b43e2d1 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-editable-toggle-desktop.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapAnimChannelsEditableToggleObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapAnimChannelsEditableToggleObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + "editable": not curve.lock, + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-channels-editable-toggle-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + expected = [1.0, 3.0, 5.0] + if before["name"] != "WebGapAnimChannelsEditableToggleObjectAction" or len(before["channels"]) != 3: + raise RuntimeError(f"unexpected anim.channels_editable_toggle result: {before}") + if any(channel["frames"] != expected or channel["editable"] for channel in before["channels"]): + raise RuntimeError(f"channels were not toggled non-editable: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-channels-editable-toggle-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError("anim.channels_editable_toggle save/reopen drift") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00158", + "operation": "ANIM_CHANNELS_EDITABLE_TOGGLE_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "toggledChannels": 3, + "action": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-channels-editable-toggle-desktop-ok toggled=3 editable=false saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-expand-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-expand-desktop.py new file mode 100644 index 00000000..07880fcc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-expand-desktop.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapAnimChannelsExpandObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapAnimChannelsExpandObject Action is missing") + action = obj.animation_data.action + groups = [] + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + groups.extend({"name": group.name, "expanded": group.show_expanded} for group in bag.groups) + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + "group": curve.group.name if curve.group else None, + }) + groups.sort(key=lambda value: value["name"]) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "groups": groups, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-channels-expand-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + expected = [1.0, 3.0, 5.0] + if before["name"] != "WebGapAnimChannelsExpandObjectAction" or before["groups"] != [{"name": "Object Transforms", "expanded": True}]: + raise RuntimeError(f"unexpected anim.channels_expand groups: {before}") + if len(before["channels"]) != 3 or any(channel["frames"] != expected or channel["group"] != "Object Transforms" for channel in before["channels"]): + raise RuntimeError(f"unexpected anim.channels_expand channels: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-channels-expand-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError("anim.channels_expand save/reopen drift") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00159", + "operation": "ANIM_CHANNELS_EXPAND_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "expandedGroups": 1, + "action": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-channels-expand-desktop-ok expanded=Object Transforms saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-fcurves-enable-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-fcurves-enable-desktop.py new file mode 100644 index 00000000..47d85c13 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-fcurves-enable-desktop.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapAnimChannelsFCurvesEnableObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapAnimChannelsFCurvesEnableObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + "enabled": curve.is_valid, + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-channels-fcurves-enable-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + expected = [1.0, 3.0, 5.0] + if before["name"] != "WebGapAnimChannelsFCurvesEnableObjectAction" or len(before["channels"]) != 3: + raise RuntimeError(f"unexpected anim.channels_fcurves_enable result: {before}") + if any(channel["frames"] != expected or not channel["enabled"] for channel in before["channels"]): + raise RuntimeError(f"F-Curves were not enabled: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-channels-fcurves-enable-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError("anim.channels_fcurves_enable save/reopen drift") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00160", + "operation": "ANIM_CHANNELS_FCURVES_ENABLE_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "enabledChannels": 3, + "action": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-channels-fcurves-enable-desktop-ok enabled=3 saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-group-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-group-desktop.py new file mode 100644 index 00000000..bcd60dbc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-group-desktop.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapAnimChannelsGroupObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapAnimChannelsGroupObject Action is missing") + action = obj.animation_data.action + groups = [] + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + groups.extend(group.name for group in bag.groups) + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + "group": curve.group.name if curve.group else None, + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "groups": sorted(groups), "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-channels-group-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + expected = [1.0, 3.0, 5.0] + if before["name"] != "WebGapAnimChannelsGroupObjectAction" or before["groups"] != ["WebGapTransforms"]: + raise RuntimeError(f"unexpected anim.channels_group groups: {before}") + if len(before["channels"]) != 3 or any(channel["frames"] != expected or channel["group"] != "WebGapTransforms" for channel in before["channels"]): + raise RuntimeError(f"unexpected anim.channels_group channels: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-channels-group-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError("anim.channels_group save/reopen drift") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00161", + "operation": "ANIM_CHANNELS_GROUP_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "groups": 1, + "action": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-channels-group-desktop-ok group=WebGapTransforms channels=3 saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-move-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-move-desktop.py new file mode 100644 index 00000000..960bece0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-move-desktop.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapAnimChannelsMoveObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapAnimChannelsMoveObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + }) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-channels-move-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + expected = [1.0, 3.0, 5.0] + if before["name"] != "WebGapAnimChannelsMoveObjectAction" or [channel["index"] for channel in before["channels"]] != [1, 0, 2]: + raise RuntimeError(f"unexpected anim.channels_move order: {before}") + if any(channel["frames"] != expected for channel in before["channels"]): + raise RuntimeError(f"unexpected anim.channels_move frames: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-channels-move-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError("anim.channels_move save/reopen drift") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00162", + "operation": "ANIM_CHANNELS_MOVE_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "direction": "DOWN", + "action": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-channels-move-desktop-ok direction=DOWN order=1,0,2 saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-rename-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-rename-desktop.py new file mode 100644 index 00000000..fbccdb1a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-rename-desktop.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapAnimChannelsRenameObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapAnimChannelsRenameObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + "enabled": curve.is_valid, + }) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-channels-rename-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + bpy.context.view_layer.update() + before = action_report() + expected = [1.0, 3.0, 5.0] + if before["name"] != "WebGapAnimChannelsRenameObjectAction": + raise RuntimeError(f"unexpected anim.channels_rename action: {before}") + if [channel["path"] for channel in before["channels"]] != [ + "rotation_euler", "location_missing", "location_missing" + ]: + raise RuntimeError(f"unexpected anim.channels_rename paths: {before}") + if [channel["index"] for channel in before["channels"]] != [0, 1, 2]: + raise RuntimeError(f"unexpected anim.channels_rename indices: {before}") + if any(channel["frames"] != expected for channel in before["channels"]): + raise RuntimeError(f"unexpected anim.channels_rename frames: {before}") + # Blender recomputes the transient F-Curve error flag while loading a + # file, so the persisted evidence is the renamed RNA path and keyframes. + + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-channels-rename-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + bpy.context.view_layer.update() + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError("anim.channels_rename save/reopen drift") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00163", + "operation": "ANIM_CHANNELS_RENAME_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "renamedChannel": {"from": "location_missing", "to": "rotation_euler", "index": 0}, + "action": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-channels-rename-desktop-ok path=rotation_euler index=0 saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-select-all-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-select-all-desktop.py new file mode 100644 index 00000000..d287d44c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-select-all-desktop.py @@ -0,0 +1,80 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapAnimChannelsSelectAllObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapAnimChannelsSelectAllObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + "selected": bool(curve.select), + "selectedKeyframes": [bool(keyframe.select_control_point) for keyframe in curve.keyframe_points], + }) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-channels-select-all-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + expected = [1.0, 3.0, 5.0] + if before["name"] != "WebGapAnimChannelsSelectAllObjectAction": + raise RuntimeError(f"unexpected anim.channels_select_all action: {before}") + if [channel["path"] for channel in before["channels"]] != ["location", "location", "location"]: + raise RuntimeError(f"unexpected anim.channels_select_all paths: {before}") + if [channel["index"] for channel in before["channels"]] != [0, 1, 2]: + raise RuntimeError(f"unexpected anim.channels_select_all indices: {before}") + if any(channel["frames"] != expected for channel in before["channels"]): + raise RuntimeError(f"unexpected anim.channels_select_all frames: {before}") + if not all(channel["selected"] for channel in before["channels"]): + raise RuntimeError(f"not all animation channels were selected: {before}") + if any(any(channel["selectedKeyframes"]) for channel in before["channels"]): + raise RuntimeError(f"channels_select_all changed keyframe selection: {before}") + + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-channels-select-all-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError("anim.channels_select_all save/reopen drift") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00164", + "operation": "ANIM_CHANNELS_SELECT_ALL_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "selection": "SELECT", + "action": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-channels-select-all-desktop-ok selected=3 saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-select-box-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-select-box-desktop.py new file mode 100644 index 00000000..62df3bf8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-select-box-desktop.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapAnimChannelsSelectBoxObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapAnimChannelsSelectBoxObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + "selected": bool(curve.select), + "selectedKeyframes": [bool(keyframe.select_control_point) for keyframe in curve.keyframe_points], + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-channels-select-box-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + expected_frames = [1.0, 3.0, 5.0] + if before["name"] != "WebGapAnimChannelsSelectBoxObjectAction": + raise RuntimeError(f"unexpected anim.channels_select_box action: {before}") + if [channel["path"] for channel in before["channels"]] != ["location", "location", "location"]: + raise RuntimeError(f"unexpected anim.channels_select_box paths: {before}") + if [channel["index"] for channel in before["channels"]] != [0, 1, 2]: + raise RuntimeError(f"unexpected anim.channels_select_box indices: {before}") + if any(channel["frames"] != expected_frames for channel in before["channels"]): + raise RuntimeError(f"unexpected anim.channels_select_box frames: {before}") + if not all(channel["selected"] for channel in before["channels"]): + raise RuntimeError(f"not all animation channels were selected: {before}") + if any(any(channel["selectedKeyframes"]) for channel in before["channels"]): + raise RuntimeError(f"channels_select_box changed keyframe selection: {before}") + + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-channels-select-box-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError("anim.channels_select_box save/reopen drift") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00165", + "operation": "ANIM_CHANNELS_SELECT_BOX_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "selection": "SELECT", + "selectedChannels": len(after["channels"]), + "action": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-channels-select-box-desktop-ok selected=3 saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-select-filter-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-select-filter-desktop.py new file mode 100644 index 00000000..e509d890 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-select-filter-desktop.py @@ -0,0 +1,84 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapAnimChannelsSelectFilterObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapAnimChannelsSelectFilterObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def filter_text(): + for screen in bpy.data.screens: + area = next( + (candidate for candidate in screen.areas + if candidate.type == "DOPESHEET_EDITOR" and candidate.spaces.active.ui_mode == "ACTION"), + None, + ) + if area is not None: + return area.spaces.active.dopesheet.filter_fcurve_name + raise RuntimeError("Action Editor area is missing") + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-channels-select-filter-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=True) + before = {"filterText": filter_text(), "action": action_report()} + if before["filterText"] != "Location": + raise RuntimeError(f"unexpected anim.channels_select_filter text: {before}") + if before["action"]["name"] != "WebGapAnimChannelsSelectFilterObjectAction": + raise RuntimeError(f"unexpected anim.channels_select_filter action: {before}") + if len(before["action"]["channels"]) != 3 or any(channel["frames"] != [1.0, 3.0, 5.0] for channel in before["action"]["channels"]): + raise RuntimeError(f"unexpected anim.channels_select_filter channels: {before}") + + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-channels-select-filter-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=True) + after = {"filterText": filter_text(), "action": action_report()} + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError("anim.channels_select_filter save/reopen drift") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00166", + "operation": "ANIM_CHANNELS_SELECT_FILTER_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "filterText": after["filterText"], + "action": after["action"], + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-channels-select-filter-desktop-ok filter=Location saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-setting-disable-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-setting-disable-desktop.py new file mode 100644 index 00000000..79316854 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-setting-disable-desktop.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapAnimChannelsSettingDisableObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapAnimChannelsSettingDisableObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + "editable": not curve.lock, + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-channels-setting-disable-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + expected = [1.0, 3.0, 5.0] + if before["name"] != "WebGapAnimChannelsSettingDisableObjectAction" or len(before["channels"]) != 3: + raise RuntimeError(f"unexpected anim.channels_setting_disable action: {before}") + if any(channel["frames"] != expected or channel["editable"] for channel in before["channels"]): + raise RuntimeError(f"channels were not disabled/protected: {before}") + + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-channels-setting-disable-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError("anim.channels_setting_disable save/reopen drift") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00167", + "operation": "ANIM_CHANNELS_SETTING_DISABLE_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "setting": "PROTECT", + "disabledChannels": len(after["channels"]), + "action": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-channels-setting-disable-desktop-ok setting=PROTECT disabled=3 saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-setting-enable-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-setting-enable-desktop.py new file mode 100644 index 00000000..c972aea0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-setting-enable-desktop.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapAnimChannelsSettingEnableObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapAnimChannelsSettingEnableObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + "editable": not curve.lock, + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-channels-setting-enable-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + expected = [1.0, 3.0, 5.0] + if before["name"] != "WebGapAnimChannelsSettingEnableObjectAction" or len(before["channels"]) != 3: + raise RuntimeError(f"unexpected anim.channels_setting_enable action: {before}") + if any(channel["frames"] != expected or channel["editable"] for channel in before["channels"]): + raise RuntimeError(f"channels were not enabled/protected: {before}") + + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-channels-setting-enable-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError("anim.channels_setting_enable save/reopen drift") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00168", + "operation": "ANIM_CHANNELS_SETTING_ENABLE_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "setting": "PROTECT", + "enabledChannels": len(after["channels"]), + "action": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-channels-setting-enable-desktop-ok setting=PROTECT enabled=3 saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-setting-toggle-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-setting-toggle-desktop.py new file mode 100644 index 00000000..8f79f34c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-setting-toggle-desktop.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapAnimChannelsSettingToggleObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapAnimChannelsSettingToggleObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + "editable": not curve.lock, + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-channels-setting-toggle-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + expected = [1.0, 3.0, 5.0] + if before["name"] != "WebGapAnimChannelsSettingToggleObjectAction" or len(before["channels"]) != 3: + raise RuntimeError(f"unexpected anim.channels_setting_toggle action: {before}") + if any(channel["frames"] != expected or channel["editable"] for channel in before["channels"]): + raise RuntimeError(f"channels were not toggled to protected: {before}") + + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-channels-setting-toggle-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError("anim.channels_setting_toggle save/reopen drift") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00169", + "operation": "ANIM_CHANNELS_SETTING_TOGGLE_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "setting": "PROTECT", + "toggledChannels": len(after["channels"]), + "action": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-channels-setting-toggle-desktop-ok setting=PROTECT toggled=3 saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-ungroup-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-ungroup-desktop.py new file mode 100644 index 00000000..5078fec4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-ungroup-desktop.py @@ -0,0 +1,75 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapAnimChannelsUngroupObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapAnimChannelsUngroupObject Action is missing") + action = obj.animation_data.action + groups = [] + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + groups.extend(group.name for group in bag.groups) + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + "group": curve.group.name if curve.group else None, + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "groups": sorted(groups), "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-channels-ungroup-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + expected = [1.0, 3.0, 5.0] + if before["name"] != "WebGapAnimChannelsUngroupObjectAction" or before["groups"]: + raise RuntimeError(f"unexpected anim.channels_ungroup groups: {before}") + if len(before["channels"]) != 3 or any(channel["frames"] != expected or channel["group"] is not None for channel in before["channels"]): + raise RuntimeError(f"channels were not ungrouped: {before}") + + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-channels-ungroup-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError("anim.channels_ungroup save/reopen drift") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00170", + "operation": "ANIM_CHANNELS_UNGROUP_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "groups": len(after["groups"]), + "ungroupedChannels": len(after["channels"]), + "action": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-channels-ungroup-desktop-ok groups=0 ungrouped=3 saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-view-selected-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-view-selected-desktop.py new file mode 100644 index 00000000..3ad5512e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-view-selected-desktop.py @@ -0,0 +1,111 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(action): + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + "selected": bool(curve.select), + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def view_report(): + area = None + for screen in bpy.data.screens: + area = next( + (candidate for candidate in screen.areas + if candidate.type == "DOPESHEET_EDITOR" and candidate.spaces.active.ui_mode == "ACTION"), + None, + ) + if area is not None: + break + if area is None: + raise RuntimeError("Action Editor area is missing") + region = next((candidate for candidate in area.regions if candidate.type == "WINDOW"), None) + if region is None: + raise RuntimeError("Action Editor window region is missing") + view = region.view2d + xmin, ymin = view.region_to_view(0, 0) + xmax, ymax = view.region_to_view(region.width - 1, region.height - 1) + return { + "areaType": area.type, + "uiMode": area.spaces.active.ui_mode, + "view2d": { + "cur": { + "xmin": round(float(xmin), 6), + "xmax": round(float(xmax), 6), + "ymin": round(float(ymin), 6), + "ymax": round(float(ymax), 6), + }, + "mask": { + "xmin": 0, + "xmax": int(region.width - 1), + "ymin": 0, + "ymax": int(region.height - 1), + }, + }, + } + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-channels-view-selected-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=True) + obj = bpy.data.objects.get("WebGapAnimChannelsViewSelectedObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapAnimChannelsViewSelectedObject Action is missing") + before = {"action": action_report(obj.animation_data.action), **view_report()} + expected = [1.0, 3.0, 5.0] + if before["action"]["name"] != "WebGapAnimChannelsViewSelectedObjectAction": + raise RuntimeError(f"unexpected anim.channels_view_selected action: {before}") + if len(before["action"]["channels"]) != 3 or any(channel["frames"] != expected or not channel["selected"] for channel in before["action"]["channels"]): + raise RuntimeError(f"channels were not selected: {before}") + + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-channels-view-selected-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=True) + reopened_obj = bpy.data.objects.get("WebGapAnimChannelsViewSelectedObject") + after = {"action": action_report(reopened_obj.animation_data.action), **view_report()} + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError("anim.channels_view_selected save/reopen drift") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00171", + "operation": "ANIM_CHANNELS_VIEW_SELECTED_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "selectedChannels": len(after["action"]["channels"]), + "action": after["action"], + "view2d": after["view2d"], + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-channels-view-selected-desktop-ok selected=3 view2d=exact saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-clean-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-clean-desktop.py new file mode 100644 index 00000000..de3fd664 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-clean-desktop.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python3 +import hashlib +import json +import pathlib +import sys +import tempfile +import os + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapCleanObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapCleanObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-clean-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + if before["name"] != "WebGapCleanObjectAction" or any(len(channel["frames"]) != 1 for channel in before["channels"]): + raise RuntimeError(f"unexpected action.clean result: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-action-clean-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"action.clean save/reopen drift: {before} != {after}") + report = {"schemaVersion": 1, "task": "M16-GAP-00114", "operation": "ACTION_CLEAN_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "threshold": 0.01, "action": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"action-clean-desktop-ok channels={len(after['channels'])} remainingFrames=1 saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-clear-useless-actions-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-clear-useless-actions-desktop.py new file mode 100644 index 00000000..be9a099c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-clear-useless-actions-desktop.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(action): + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return { + "name": action.name, + "users": action.users, + "fakeUser": bool(action.use_fake_user), + "channels": channels, + } + + +def state_report(): + actions = { + action.name: action_report(action) + for action in bpy.data.actions + if action.name.startswith("WebGapAnimClearUseless") + } + used = bpy.data.objects.get("WebGapAnimClearUselessUsedObject") + if used is None or used.animation_data is None or used.animation_data.action is None: + raise RuntimeError("used Action is missing") + return {"actions": actions, "usedAction": used.animation_data.action.name} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-clear-useless-actions-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + expected = { + "WebGapAnimClearUselessUsedAction", + "WebGapAnimClearUselessLibraryAction", + } + if set(before["actions"]) != expected: + raise RuntimeError(f"clear_useless_actions did not remove only the empty Action: {before}") + if before["usedAction"] != "WebGapAnimClearUselessUsedAction": + raise RuntimeError(f"used Action drifted: {before}") + if any(len(value["channels"]) != 3 for value in before["actions"].values()): + raise RuntimeError(f"preserved Actions have unexpected curves: {before}") + + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-clear-useless-actions-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = state_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError("anim.clear_useless_actions save/reopen drift") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00172", + "operation": "ANIM_CLEAR_USELESS_ACTIONS_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "removedEmptyAction": True, + "actions": after["actions"], + "usedAction": after["usedAction"], + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-clear-useless-actions-desktop-ok removedEmpty=true preserved=2 saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-clickselect-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-clickselect-desktop.py new file mode 100644 index 00000000..ade1c4e1 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-clickselect-desktop.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapClickSelectObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapClickSelectObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + "selected": [bool(keyframe.select_control_point) for keyframe in curve.keyframe_points], + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-clickselect-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + expected = [[False, True, False]] * 3 + if before["name"] != "WebGapClickSelectObjectAction" or [channel["selected"] for channel in before["channels"]] != expected: + raise RuntimeError(f"unexpected clickselect result: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-action-clickselect-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"action.clickselect save/reopen drift: {before} != {after}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00115", + "operation": "ACTION_CLICKSELECT_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "click": {"frame": 3.0, "column": True, "deselectAll": True}, + "action": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("action-clickselect-desktop-ok channels=3 selectedFrame=3 saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-copy-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-copy-desktop.py new file mode 100644 index 00000000..8181be5c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-copy-desktop.py @@ -0,0 +1,80 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapCopyObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapCopyObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + "selected": [bool(keyframe.select_control_point) for keyframe in curve.keyframe_points], + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-copy-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + expected = [[False, True, False]] * 3 + if before["name"] != "WebGapCopyObjectAction" or [channel["selected"] for channel in before["channels"]] != expected: + raise RuntimeError(f"unexpected action.copy source selection: {before}") + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR") + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if "FINISHED" not in bpy.ops.action.copy(): + raise RuntimeError("ACTION_OT_copy did not finish") + after_copy = action_report() + if after_copy != before: + raise RuntimeError(f"action.copy changed Main data: {before} != {after_copy}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-action-copy-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"action.copy save/reopen drift: {before} != {after}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00116", + "operation": "ACTION_COPY_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "copiedFrames": [3.0], + "action": after, + "saveReopen": "EXACT", + "mainMutation": "NONE", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("action-copy-desktop-ok channels=3 copiedFrame=3 mainMutation=none saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-copy-driver-button-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-copy-driver-button-desktop.py new file mode 100644 index 00000000..509de9e3 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-copy-driver-button-desktop.py @@ -0,0 +1,99 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def driver_report(obj): + if obj is None or obj.animation_data is None: + raise RuntimeError("copy-driver fixture animation data is missing") + drivers = [] + for curve in obj.animation_data.drivers: + driver = curve.driver + drivers.append({ + "path": curve.data_path, + "index": curve.array_index, + "expression": driver.expression if driver else "", + "type": driver.type if driver else "", + "variableCount": len(driver.variables) if driver else 0, + }) + drivers.sort(key=lambda value: (value["path"], value["index"])) + return drivers + + +def state_report(): + obj = bpy.data.objects.get("WebGapAnimCopyDriverButtonObject") + if obj is None: + raise RuntimeError("copy-driver fixture object is missing") + return {"drivers": driver_report(obj), "value": round(float(obj["drive_target"]), 6)} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-copy-driver-button-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + output.unlink(missing_ok=True) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + expected = [{ + "path": '["drive_target"]', + "index": 0, + "expression": "frame * 2.0 + 1.0", + "type": "SCRIPTED", + "variableCount": 0, + }] + if before["drivers"] != expected: + raise RuntimeError(f"unexpected copy_driver_button source driver: {before}") + + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "PROPERTIES") + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + result = bpy.ops.anim.copy_driver_button() + if result != {"CANCELLED"}: + raise RuntimeError(f"unexpected ANIM_OT_copy_driver_button result: {result}") + after_cancel = state_report() + if after_cancel != before: + raise RuntimeError(f"copy_driver_button cancellation changed Main data: {before} != {after_cancel}") + + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-copy-driver-button-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = state_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError("anim.copy_driver_button save/reopen drift") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00173", + "operation": "ANIM_COPY_DRIVER_BUTTON_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "drivers": after["drivers"], + "value": after["value"], + "operatorStatus": "CANCELLED", + "mainMutation": "NONE", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"anim-copy-driver-button-desktop-ok drivers=1 status={report['operatorStatus']} mainMutation=none saveReopen=exact") + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-copy-driver-button-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-delete-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-delete-desktop.py new file mode 100644 index 00000000..425c458f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-delete-desktop.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapDeleteObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapDeleteObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + "selected": [bool(keyframe.select_control_point) for keyframe in curve.keyframe_points], + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-delete-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + if before["name"] != "WebGapDeleteObjectAction" or any(channel["frames"] != [1.0, 5.0] for channel in before["channels"]): + raise RuntimeError(f"unexpected action.delete result: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-action-delete-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"action.delete save/reopen drift: {before} != {after}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00117", + "operation": "ACTION_DELETE_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "deletedFrames": [3.0], + "action": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("action-delete-desktop-ok channels=3 deletedFrame=3 remainingFrames=1,5 saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-desktop.py new file mode 100644 index 00000000..aacf1b74 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-desktop.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python3 +"""Read the Action gap fixture with Blender 5.2 and verify save/reopen stability.""" +import hashlib +import json +import pathlib +import sys +import tempfile +import os + +import bpy + + +def action_report(): + actions = [] + for action in sorted(bpy.data.actions, key=lambda value: value.name): + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + channels.extend((curve.data_path, curve.array_index, len(curve.keyframe_points)) for curve in bag.fcurves) + actions.append({"name": action.name, "frameRange": [round(float(value), 6) for value in action.frame_range], "channels": sorted(channels)}) + return actions + + +def main(): + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 2: + raise SystemExit("usage: blender -b --python check-action-desktop.py -- FIXTURE REPORT") + fixture, report_path = (pathlib.Path(value).resolve() for value in args) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + if len(before) != 1 or before[0]["name"] != "AnimatedObjectAction": + raise RuntimeError(f"unexpected Action inventory: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-action-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"Action save/reopen drift: before={before} after={after}") + report = {"schemaVersion": 1, "task": "M16-GAP-00001", "operation": "ACTION_DATABLOCK_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "actions": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + report_path.parent.mkdir(parents=True, exist_ok=True) + report_path.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"action-desktop-ok actions={len(after)} channels={len(after[0]['channels'])} saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-driver-button-add-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-driver-button-add-desktop.py new file mode 100644 index 00000000..b6fc8ce8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-driver-button-add-desktop.py @@ -0,0 +1,259 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import subprocess +import sys +import tempfile + +import bpy + + +class DriverButtonExperimentPanel(bpy.types.Panel): + bl_label = "Driver Button Experiment" + bl_idname = "WEBGAP_PT_driver_button_experiment" + bl_space_type = "PROPERTIES" + bl_region_type = "WINDOW" + bl_context = "object" + + def draw(self, context): + if context.object is not None: + self.layout.prop(context.object, '["drive_target"]', text="drive_target") + + +def driver_report(obj): + if obj is None or obj.animation_data is None: + return [] + drivers = [] + for curve in obj.animation_data.drivers: + driver = curve.driver + drivers.append( + { + "path": curve.data_path, + "index": curve.array_index, + "expression": driver.expression if driver else "", + "type": driver.type if driver else "", + "variableCount": len(driver.variables) if driver else 0, + } + ) + drivers.sort(key=lambda value: (value["path"], value["index"])) + return drivers + + +def state_report(obj): + if obj is None: + raise RuntimeError("driver-button-add fixture object is missing") + return {"drivers": driver_report(obj), "value": round(float(obj["drive_target"]), 6)} + + +def foreground_driver_button(fixture, output, obj, before): + bpy.utils.register_class(DriverButtonExperimentPanel) + state = {"started": False} + + def blender_window(): + windows = subprocess.check_output(["xdotool", "search", "--name", "Blender"], text=True).split() + if not windows: + raise RuntimeError("Blender window was not found") + return windows[0] + + def launch_ui_sequence(window_id): + sequence = ( + "sleep 2; " + f"xdotool mousemove --sync --window {window_id} 1170 746; " + "xdotool click --repeat 10 --delay 60 5; " + "sleep 0.5; " + f"xdotool mousemove --sync --window {window_id} 1185 645; " + "xdotool click 3; " + "sleep 0.5; " + f"xdotool mousemove --sync --window {window_id} 1080 537; " + "xdotool click 1; " + "xdotool key Return" + ) + subprocess.Popen(["sh", "-c", sequence], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + + def finish_failure(message): + print(f"anim-driver-button-add-desktop-failed: {message}") + bpy.ops.wm.quit_blender() + return None + + def poll_result(): + current_obj = bpy.data.objects.get("WebGapAnimDriverButtonAddObject") + after = state_report(current_obj) + if not after["drivers"]: + return 0.25 + + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-driver-button-add-ui-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report(bpy.data.objects.get("WebGapAnimDriverButtonAddObject")) + if reopened != after: + return finish_failure("anim.driver_button_add save/reopen drift") + shutil.copyfile(temporary_path, fixture) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00174", + "operation": "ANIM_DRIVER_BUTTON_ADD_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "drivers": reopened["drivers"], + "value": reopened["value"], + "poll": True, + "operatorStatus": "FINISHED", + "mainMutation": "DRIVER_ADDED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-driver-button-add-desktop-ok poll=true status=FINISHED mainMutation=driver_added saveReopen=exact") + bpy.ops.wm.quit_blender() + return None + except Exception as error: + return finish_failure(error) + finally: + temporary_path.unlink(missing_ok=True) + + def drive_button(): + if state["started"]: + return 0.25 + window = bpy.context.window + if window is None: + return 0.25 + area = next((candidate for candidate in window.screen.areas if candidate.type == "PROPERTIES"), None) + if area is None: + return 0.25 + area.spaces.active.context = "OBJECT" + state["started"] = True + try: + bpy.ops.wm.redraw_timer(type="DRAW_WIN_SWAP", iterations=1) + launch_ui_sequence(blender_window()) + except Exception as error: + return finish_failure(f"UI automation failed: {error}") + bpy.app.timers.register(poll_result, first_interval=0.5) + return None + + def timeout(): + current_obj = bpy.data.objects.get("WebGapAnimDriverButtonAddObject") + if current_obj is None or state_report(current_obj) == before: + return finish_failure("UI driver_button_add timed out without mutation") + return None + + bpy.app.timers.register(drive_button, first_interval=1.5) + bpy.app.timers.register(timeout, first_interval=30.0) + + +def preserved_driver_report(fixture, output, obj, current): + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-driver-button-add-preserved-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report(bpy.data.objects.get("WebGapAnimDriverButtonAddObject")) + if reopened != current: + raise RuntimeError("anim.driver_button_add preserved fixture save/reopen drift") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00174", + "operation": "ANIM_DRIVER_BUTTON_ADD_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "drivers": reopened["drivers"], + "value": reopened["value"], + "poll": True, + "operatorStatus": "FINISHED", + "mainMutation": "DRIVER_ADDED", + "evidenceStatus": "PRESERVED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-driver-button-add-desktop-ok preserved=exact status=FINISHED mainMutation=driver_added saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit( + "usage: blender -b --python check-action-driver-button-add-desktop.py -- FIXTURE REPORT" + ) + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + output.unlink(missing_ok=True) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + obj = bpy.data.objects.get("WebGapAnimDriverButtonAddObject") + before = state_report(obj) + expected_driver = [{ + "path": '["drive_target"]', + "index": 0, + "expression": "var + 4.5", + "type": "SCRIPTED", + "variableCount": 1, + }] + if before["value"] != 4.5 or before["drivers"] not in ([], expected_driver): + raise RuntimeError(f"unexpected driver_button_add source state: {before}") + + if before["drivers"] == expected_driver: + preserved_driver_report(fixture, output, obj, before) + bpy.ops.wm.quit_blender() + return + + if not bpy.app.background: + foreground_driver_button(fixture, output, obj, before) + return + + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "PROPERTIES") + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + poll = bool(bpy.ops.anim.driver_button_add.poll()) + if poll: + raise RuntimeError("ANIM_OT_driver_button_add unexpectedly polled true without an active RNA button") + after_cancel = state_report(obj) + if after_cancel != before: + raise RuntimeError(f"driver_button_add cancellation changed Main data: {before} != {after_cancel}") + + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-driver-button-add-reopen-", suffix=".blend") + os.close(descriptor) + pathlib.Path(temporary).unlink(missing_ok=True) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = state_report(bpy.data.objects.get("WebGapAnimDriverButtonAddObject")) + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError("anim.driver_button_add save/reopen drift") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00174", + "operation": "ANIM_DRIVER_BUTTON_ADD_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "drivers": after["drivers"], + "value": after["value"], + "poll": poll, + "operatorStatus": "CANCELLED", + "mainMutation": "NONE", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-driver-button-add-desktop-ok poll=false status=CANCELLED mainMutation=none saveReopen=exact") + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-driver-button-add-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-driver-button-edit-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-driver-button-edit-desktop.py new file mode 100644 index 00000000..daa30483 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-driver-button-edit-desktop.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python3 +import hashlib +import json +import pathlib +import sys +import tempfile + +import bpy + + +def driver_report(obj): + if obj is None or obj.animation_data is None: + raise RuntimeError("driver-edit fixture animation data is missing") + drivers = [] + for curve in obj.animation_data.drivers: + driver = curve.driver + drivers.append({ + "path": curve.data_path, + "index": curve.array_index, + "expression": driver.expression if driver else "", + "type": driver.type if driver else "", + "variableCount": len(driver.variables) if driver else 0, + }) + drivers.sort(key=lambda value: (value["path"], value["index"])) + return drivers + + +def state_report(): + obj = bpy.data.objects.get("WebGapAnimDriverButtonEditObject") + if obj is None: + raise RuntimeError("driver-edit fixture object is missing") + return {"drivers": driver_report(obj), "value": round(float(obj["drive_target"]), 6)} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-driver-button-edit-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + output.unlink(missing_ok=True) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + expected = [{ + "path": '["drive_target"]', + "index": 0, + "expression": "frame * 2.5 + 1.25", + "type": "SCRIPTED", + "variableCount": 0, + }] + if before["value"] != 3.75 or before["drivers"] != expected: + raise RuntimeError(f"unexpected driver_button_edit source state: {before}") + + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "PROPERTIES") + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + poll = bool(bpy.ops.anim.driver_button_edit.poll()) + result = bpy.ops.anim.driver_button_edit() + if not poll or result != {"INTERFACE"}: + raise RuntimeError(f"unexpected ANIM_OT_driver_button_edit result: poll={poll} result={result}") + after_operator = state_report() + if after_operator != before: + raise RuntimeError(f"driver_button_edit changed Main data: {before} != {after_operator}") + + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-driver-button-edit-reopen-", suffix=".blend") + pathlib.Path(temporary).unlink(missing_ok=True) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = state_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if after != before: + raise RuntimeError("anim.driver_button_edit save/reopen drift") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00175", + "operation": "ANIM_DRIVER_BUTTON_EDIT_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "drivers": after["drivers"], + "value": after["value"], + "poll": poll, + "operatorStatus": "INTERFACE", + "mainMutation": "NONE", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-driver-button-edit-desktop-ok poll=true status=INTERFACE mainMutation=none saveReopen=exact") + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-driver-button-edit-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-driver-button-remove-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-driver-button-remove-desktop.py new file mode 100644 index 00000000..59955b3d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-driver-button-remove-desktop.py @@ -0,0 +1,212 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import subprocess +import sys +import tempfile + +import bpy + + +class DriverButtonExperimentPanel(bpy.types.Panel): + bl_label = "Driver Button Experiment" + bl_idname = "WEBGAP_PT_driver_button_remove_experiment" + bl_space_type = "PROPERTIES" + bl_region_type = "WINDOW" + bl_context = "object" + + def draw(self, context): + if context.object is not None: + self.layout.prop(context.object, '["drive_target"]', text="drive_target") + + +def driver_report(obj): + if obj is None or obj.animation_data is None: + return [] + drivers = [] + for curve in obj.animation_data.drivers: + driver = curve.driver + drivers.append({ + "path": curve.data_path, + "index": curve.array_index, + "expression": driver.expression if driver else "", + "type": driver.type if driver else "", + "variableCount": len(driver.variables) if driver else 0, + }) + drivers.sort(key=lambda value: (value["path"], value["index"])) + return drivers + + +def state_report(obj): + if obj is None: + raise RuntimeError("driver-remove fixture object is missing") + return {"drivers": driver_report(obj), "value": round(float(obj["drive_target"]), 6)} + + +def write_report(fixture, output, state, *, evidence_status=None): + report = { + "schemaVersion": 1, + "task": "M16-GAP-00176", + "operation": "ANIM_DRIVER_BUTTON_REMOVE_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "drivers": state["drivers"], + "value": state["value"], + "poll": True, + "operatorStatus": "FINISHED", + "mainMutation": "DRIVER_REMOVED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + if evidence_status: + report["evidenceStatus"] = evidence_status + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + + +def preserved_driver_report(fixture, output, obj, current): + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-driver-button-remove-preserved-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report(bpy.data.objects.get("WebGapAnimDriverButtonRemoveObject")) + if reopened != current: + raise RuntimeError("anim.driver_button_remove preserved fixture save/reopen drift") + write_report(fixture, output, reopened, evidence_status="PRESERVED") + print("anim-driver-button-remove-desktop-ok preserved=exact status=FINISHED mainMutation=driver_removed saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +def foreground_driver_remove(fixture, output, obj, before): + bpy.utils.register_class(DriverButtonExperimentPanel) + state = {"started": False, "clicked": False} + + def blender_window(): + windows = subprocess.check_output(["xdotool", "search", "--name", "Blender"], text=True).split() + if not windows: + raise RuntimeError("Blender window was not found") + return windows[0] + + def launch_ui_sequence(window_id): + sequence = ( + "sleep 2; " + f"xdotool mousemove --sync --window {window_id} 1170 746; " + "xdotool click --repeat 10 --delay 60 5; " + "sleep 0.5; " + f"xdotool mousemove --sync --window {window_id} 1185 645; " + "xdotool click 1" + ) + subprocess.Popen(["sh", "-c", sequence], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + + def finish_failure(message): + print(f"anim-driver-button-remove-desktop-failed: {message}") + bpy.ops.wm.quit_blender() + return None + + def poll_result(): + window = bpy.context.window + if window is None: + return 0.25 + area = next((candidate for candidate in window.screen.areas if candidate.type == "PROPERTIES"), None) + if area is None: + return 0.25 + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + try: + with bpy.context.temp_override(window=window, screen=window.screen, area=area, region=region): + result = bpy.ops.anim.driver_button_remove(all=True) + except Exception as error: + return finish_failure(f"remove operator failed: {error}") + state["clicked"] = True + if result != {"FINISHED"}: + return 0.25 + after = state_report(bpy.data.objects.get("WebGapAnimDriverButtonRemoveObject")) + if after["drivers"]: + return finish_failure(f"driver_button_remove left drivers: {after}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-driver-button-remove-ui-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report(bpy.data.objects.get("WebGapAnimDriverButtonRemoveObject")) + if reopened != after: + return finish_failure("anim.driver_button_remove save/reopen drift") + shutil.copyfile(temporary_path, fixture) + write_report(fixture, output, reopened) + print("anim-driver-button-remove-desktop-ok poll=true status=FINISHED mainMutation=driver_removed saveReopen=exact") + bpy.ops.wm.quit_blender() + return None + except Exception as error: + return finish_failure(error) + finally: + temporary_path.unlink(missing_ok=True) + + def drive_button(): + if state["started"]: + return 0.25 + window = bpy.context.window + if window is None: + return 0.25 + area = next((candidate for candidate in window.screen.areas if candidate.type == "PROPERTIES"), None) + if area is None: + return 0.25 + area.spaces.active.context = "OBJECT" + state["started"] = True + try: + bpy.ops.wm.redraw_timer(type="DRAW_WIN_SWAP", iterations=1) + launch_ui_sequence(blender_window()) + except Exception as error: + return finish_failure(f"UI automation failed: {error}") + bpy.app.timers.register(poll_result, first_interval=3.0) + return None + + def timeout(): + current_obj = bpy.data.objects.get("WebGapAnimDriverButtonRemoveObject") + if current_obj is None or state_report(current_obj) == before: + return finish_failure("UI driver_button_remove timed out without mutation") + return None + + bpy.app.timers.register(drive_button, first_interval=1.5) + bpy.app.timers.register(timeout, first_interval=35.0) + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-driver-button-remove-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + output.unlink(missing_ok=True) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + obj = bpy.data.objects.get("WebGapAnimDriverButtonRemoveObject") + before = state_report(obj) + expected = [{ + "path": '["drive_target"]', + "index": 0, + "expression": "frame * 2.5 + 1.25", + "type": "SCRIPTED", + "variableCount": 0, + }] + if before["drivers"] == []: + preserved_driver_report(fixture, output, obj, before) + bpy.ops.wm.quit_blender() + return + if before["value"] != 3.75 or before["drivers"] != expected: + raise RuntimeError(f"unexpected driver_button_remove source state: {before}") + if not bpy.app.background: + foreground_driver_remove(fixture, output, obj, before) + return + raise RuntimeError("driver_button_remove requires a foreground Properties context") + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-driver-button-remove-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-duplicate-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-duplicate-desktop.py new file mode 100644 index 00000000..34b558f0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-duplicate-desktop.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapDuplicateObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapDuplicateObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + "selected": [bool(keyframe.select_control_point) for keyframe in curve.keyframe_points], + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-duplicate-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + expected_frames = [1.0, 3.0, 3.0, 5.0] + expected_selected = [False, False, True, False] + if before["name"] != "WebGapDuplicateObjectAction" or any(channel["frames"] != expected_frames or channel["selected"] != expected_selected for channel in before["channels"]): + raise RuntimeError(f"unexpected action.duplicate result: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-action-duplicate-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"action.duplicate save/reopen drift: {before} != {after}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00118", + "operation": "ACTION_DUPLICATE_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "duplicatedFrames": [3.0], + "action": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("action-duplicate-desktop-ok channels=3 duplicatedFrame=3 frames=1,3,3,5 saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-duplicate-move-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-duplicate-move-desktop.py new file mode 100644 index 00000000..0244e385 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-duplicate-move-desktop.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapDuplicateMoveObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapDuplicateMoveObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + "selected": [bool(keyframe.select_control_point) for keyframe in curve.keyframe_points], + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-duplicate-move-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + if before["name"] != "WebGapDuplicateMoveObjectAction" or any(channel["frames"] != [1.0, 3.0, 5.0] or channel["selected"] != [False, False, True] for channel in before["channels"]): + raise RuntimeError(f"unexpected action.duplicate_move result: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-action-duplicate-move-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"action.duplicate_move save/reopen drift: {before} != {after}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00119", + "operation": "ACTION_DUPLICATE_MOVE_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "duplicatedFrame": 3.0, + "timeOffset": 2.0, + "action": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("action-duplicate-move-desktop-ok channels=3 sourceFrame=3 movedFrame=5 offset=2 saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-easing-type-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-easing-type-desktop.py new file mode 100644 index 00000000..cc0b3a1d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-easing-type-desktop.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapEasingTypeObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapEasingTypeObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + "easing": [keyframe.easing for keyframe in curve.keyframe_points], + "selected": [bool(keyframe.select_control_point) for keyframe in curve.keyframe_points], + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-easing-type-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + expected = ["AUTO", "EASE_IN_OUT", "AUTO"] + if before["name"] != "WebGapEasingTypeObjectAction" or any(channel["easing"] != expected for channel in before["channels"]): + raise RuntimeError(f"unexpected action.easing_type result: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-action-easing-type-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"action.easing_type save/reopen drift: {before} != {after}") + report = {"schemaVersion": 1, "task": "M16-GAP-00120", "operation": "ACTION_EASING_TYPE_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "easingType": "EASE_IN_OUT", "action": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("action-easing-type-desktop-ok channels=3 frame=3 easing=EASE_IN_OUT saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-end-frame-set-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-end-frame-set-desktop.py new file mode 100644 index 00000000..3191cf79 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-end-frame-set-desktop.py @@ -0,0 +1,122 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +def state_report(scene): + return { + "current": int(scene.frame_current), + "start": int(scene.frame_start), + "end": int(scene.frame_end), + } + + +def write_report(fixture, output, state, *, evidence_status=None): + report = { + "schemaVersion": 1, + "task": "M16-GAP-00177", + "operation": "ANIM_END_FRAME_SET_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "frame": state, + "poll": True, + "operatorStatus": "FINISHED", + "mainMutation": "FRAME_END_SET", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + if evidence_status: + report["evidenceStatus"] = evidence_status + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + + +def foreground_end_frame_set(fixture, output): + state = {"started": False} + + def finish_failure(message): + print(f"anim-end-frame-set-desktop-failed: {message}") + bpy.ops.wm.quit_blender() + return None + + def execute(): + window = bpy.context.window + if window is None: + return 0.25 + scene = bpy.context.scene + before = state_report(scene) + if before["current"] != 42 or before["start"] != 1 or before["end"] not in (42, 120): + return finish_failure(f"unexpected end_frame_set source state: {before}") + area = next((candidate for candidate in window.screen.areas if candidate.type == "TIMELINE"), None) + if area is None: + area = next((candidate for candidate in window.screen.areas if candidate.type in {"DOPESHEET_EDITOR", "GRAPH_EDITOR", "NLA_EDITOR", "SEQUENCE_EDITOR", "CLIP_EDITOR"}), None) + if area is None: + return finish_failure("no animation area available for end_frame_set") + if area.type == "TIMELINE": + area.type = "DOPESHEET_EDITOR" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + try: + with bpy.context.temp_override(window=window, screen=window.screen, area=area, region=region): + poll = bool(bpy.ops.anim.end_frame_set.poll()) + result = bpy.ops.anim.end_frame_set() + except Exception as error: + return finish_failure(error) + if not poll or result != {"FINISHED"}: + return finish_failure(f"unexpected ANIM_OT_end_frame_set result: poll={poll} result={result}") + after_operator = state_report(scene) + if after_operator != {"current": 42, "start": 1, "end": 42}: + return finish_failure(f"end_frame_set produced unexpected state: {after_operator}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-end-frame-set-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report(bpy.context.scene) + if reopened != after_operator: + return finish_failure("anim.end_frame_set save/reopen drift") + shutil.copyfile(temporary_path, fixture) + write_report(fixture, output, reopened) + print("anim-end-frame-set-desktop-ok poll=true status=FINISHED mainMutation=frame_end_set saveReopen=exact") + bpy.ops.wm.quit_blender() + return None + except Exception as error: + return finish_failure(error) + finally: + temporary_path.unlink(missing_ok=True) + + def start(): + if state["started"]: + return 0.25 + state["started"] = True + bpy.app.timers.register(execute, first_interval=1.0) + return None + + bpy.app.timers.register(start, first_interval=1.5) + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-end-frame-set-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + output.unlink(missing_ok=True) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + if bpy.app.background: + raise RuntimeError("end_frame_set requires a foreground animation area") + foreground_end_frame_set(fixture, output) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-end-frame-set-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-extrapolation-type-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-extrapolation-type-desktop.py new file mode 100644 index 00000000..35e9f073 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-extrapolation-type-desktop.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapExtrapolationTypeObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapExtrapolationTypeObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({"path": curve.data_path, "index": curve.array_index, "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], "extrapolation": curve.extrapolation}) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-extrapolation-type-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + if before["name"] != "WebGapExtrapolationTypeObjectAction" or any(channel["extrapolation"] != "LINEAR" for channel in before["channels"]): + raise RuntimeError(f"unexpected action.extrapolation_type result: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-action-extrapolation-type-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"action.extrapolation_type save/reopen drift: {before} != {after}") + report = {"schemaVersion": 1, "task": "M16-GAP-00121", "operation": "ACTION_EXTRAPOLATION_TYPE_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "extrapolationType": "LINEAR", "action": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("action-extrapolation-type-desktop-ok channels=3 extrapolation=LINEAR saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-frame-jump-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-frame-jump-desktop.py new file mode 100644 index 00000000..b38368ec --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-frame-jump-desktop.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapFrameJumpObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapFrameJumpObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({"path": curve.data_path, "index": curve.array_index, "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], "selected": [bool(keyframe.select_control_point) for keyframe in curve.keyframe_points]}) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-frame-jump-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + if bpy.context.scene.frame_current != 5 or any(channel["selected"] != [False, False, True] for channel in before["channels"]): + raise RuntimeError(f"unexpected action.frame_jump result: frame={bpy.context.scene.frame_current} action={before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-action-frame-jump-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + frame_after = bpy.context.scene.frame_current + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after or frame_after != 5: + raise RuntimeError("action.frame_jump save/reopen drift") + report = {"schemaVersion": 1, "task": "M16-GAP-00122", "operation": "ACTION_FRAME_JUMP_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "jumpedToFrame": 5, "action": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("action-frame-jump-desktop-ok selectedFrame=5 currentFrame=5 saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-handle-type-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-handle-type-desktop.py new file mode 100644 index 00000000..c0c900ed --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-handle-type-desktop.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapHandleTypeObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapHandleTypeObject Action is missing") + channels = [] + for layer in obj.animation_data.action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({"path": curve.data_path, "index": curve.array_index, "frames": [round(float(k.co.x), 6) for k in curve.keyframe_points], "handleType": ["VECTOR" if k.handle_left_type == "VECTOR" else k.handle_left_type for k in curve.keyframe_points], "selected": [bool(k.select_control_point) for k in curve.keyframe_points]}) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": obj.animation_data.action.name, "channels": channels} + + +def main(): + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 2: raise SystemExit("usage: blender -b --python check-action-handle-type-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(v).resolve() for v in args) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + if before["name"] != "WebGapHandleTypeObjectAction" or any(c["handleType"] != ["VECTOR", "VECTOR", "VECTOR"] for c in before["channels"]): raise RuntimeError(f"unexpected action.handle_type result: {before}") + fd, temp = tempfile.mkstemp(prefix="m16-action-handle-type-reopen-", suffix=".blend"); os.close(fd) + try: + bpy.ops.wm.save_as_mainfile(filepath=temp, check_existing=False, compress=True); bpy.ops.wm.open_mainfile(filepath=temp, load_ui=False); after = action_report() + finally: pathlib.Path(temp).unlink(missing_ok=True) + if before != after: raise RuntimeError("action.handle_type save/reopen drift") + report = {"schemaVersion": 1, "task": "M16-GAP-00123", "operation": "ACTION_HANDLE_TYPE_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "handleType": "VECTOR", "action": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True); output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8"); print("action-handle-type-desktop-ok channels=3 frame=3 handle=VECTOR saveReopen=exact") + + +if __name__ == "__main__": main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-interpolation-type-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-interpolation-type-desktop.py new file mode 100644 index 00000000..03fbbec8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-interpolation-type-desktop.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapInterpolationTypeObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapInterpolationTypeObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + "interpolation": [keyframe.interpolation for keyframe in curve.keyframe_points], + "selected": [bool(keyframe.select_control_point) for keyframe in curve.keyframe_points], + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-interpolation-type-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + expected = ["BEZIER", "LINEAR", "BEZIER"] + if before["name"] != "WebGapInterpolationTypeObjectAction" or any(channel["interpolation"] != expected for channel in before["channels"]): + raise RuntimeError(f"unexpected action.interpolation_type result: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-action-interpolation-type-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"action.interpolation_type save/reopen drift: {before} != {after}") + report = {"schemaVersion": 1, "task": "M16-GAP-00124", "operation": "ACTION_INTERPOLATION_TYPE_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "interpolationType": "LINEAR", "action": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("action-interpolation-type-desktop-ok channels=3 frame=3 interpolation=LINEAR saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-clear-button-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-clear-button-desktop.py new file mode 100644 index 00000000..a4047c13 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-clear-button-desktop.py @@ -0,0 +1,232 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import subprocess +import sys +import tempfile + +import bpy + + +class KeyframeClearButtonPanel(bpy.types.Panel): + bl_label = "Keyframe Clear Button Experiment" + bl_idname = "WEBGAP_PT_keyframe_clear_button_experiment" + bl_space_type = "PROPERTIES" + bl_region_type = "WINDOW" + bl_context = "object" + + def draw(self, context): + if context.object is not None: + self.layout.prop(context.object, '["clear_target"]', text="clear_target") + + +def action_report(obj): + action = obj.animation_data.action if obj and obj.animation_data else None + if action is None: + return {"name": None, "channels": []} + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append( + { + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(key.co.x), 6) for key in curve.keyframe_points], + "values": [round(float(key.co.y), 6) for key in curve.keyframe_points], + "selected": [bool(key.select_control_point) for key in curve.keyframe_points], + } + ) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def state_report(): + obj = bpy.data.objects.get("WebGapAnimKeyframeClearButtonObject") + if obj is None: + raise RuntimeError("keyframe-clear-button fixture object is missing") + return { + "value": round(float(obj["clear_target"]), 6), + "action": action_report(obj), + } + + +def write_report(fixture, output, before, after, *, evidence_status=None): + report = { + "schemaVersion": 1, + "task": "M16-GAP-00178", + "operation": "ANIM_KEYFRAME_CLEAR_BUTTON_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": after, + "poll": True, + "operatorStatus": "FINISHED", + "mainMutation": "KEYFRAMES_CLEARED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + if evidence_status: + report["evidenceStatus"] = evidence_status + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + + +def foreground_clear(fixture, output, before): + bpy.utils.register_class(KeyframeClearButtonPanel) + state = {"started": False} + + def blender_window(): + windows = subprocess.check_output(["xdotool", "search", "--name", "Blender"], text=True).split() + if not windows: + raise RuntimeError("Blender window was not found") + return windows[0] + + def launch_ui_sequence(window_id): + sequence = ( + "sleep 2; " + f"xdotool mousemove --sync --window {window_id} 1170 746; " + "xdotool click --repeat 10 --delay 60 5; " + "sleep 0.5; " + f"xdotool mousemove --sync --window {window_id} 1185 645; " + "xdotool click 1" + ) + subprocess.Popen(["sh", "-c", sequence], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + + def finish_failure(message): + print(f"anim-keyframe-clear-button-desktop-failed: {message}") + bpy.ops.wm.quit_blender() + return None + + def poll_result(): + window = bpy.context.window + if window is None: + return 0.25 + area = next((candidate for candidate in window.screen.areas if candidate.type == "PROPERTIES"), None) + if area is None: + return 0.25 + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + try: + with bpy.context.temp_override(window=window, screen=window.screen, area=area, region=region): + poll = bool(bpy.ops.anim.keyframe_clear_button.poll()) + result = bpy.ops.anim.keyframe_clear_button(all=True) if poll else set() + except Exception as error: + return finish_failure(f"keyframe_clear_button failed: {error}") + if not poll or result != {"FINISHED"}: + return 0.25 + after = state_report() + if after["action"]["channels"]: + return finish_failure(f"keyframe_clear_button left channels: {after}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keyframe-clear-button-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + return finish_failure("anim.keyframe_clear_button save/reopen drift") + shutil.copyfile(temporary_path, fixture) + write_report(fixture, output, before, reopened) + print("anim-keyframe-clear-button-desktop-ok poll=true status=FINISHED mainMutation=keyframes_cleared saveReopen=exact") + bpy.ops.wm.quit_blender() + return None + except Exception as error: + return finish_failure(error) + finally: + temporary_path.unlink(missing_ok=True) + + def drive_button(): + if state["started"]: + return 0.25 + window = bpy.context.window + if window is None: + return 0.25 + area = next((candidate for candidate in window.screen.areas if candidate.type == "PROPERTIES"), None) + if area is None: + return 0.25 + area.spaces.active.context = "OBJECT" + state["started"] = True + try: + bpy.ops.wm.redraw_timer(type="DRAW_WIN_SWAP", iterations=1) + launch_ui_sequence(blender_window()) + except Exception as error: + return finish_failure(f"UI automation failed: {error}") + bpy.app.timers.register(poll_result, first_interval=3.0) + return None + + def timeout(): + current = state_report() + if current == before: + return finish_failure("UI keyframe_clear_button timed out without mutation") + return None + + bpy.app.timers.register(drive_button, first_interval=1.5) + bpy.app.timers.register(timeout, first_interval=35.0) + + +def preserved_clear(fixture, output, current): + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keyframe-clear-button-preserved-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != current: + raise RuntimeError("anim.keyframe_clear_button preserved fixture save/reopen drift") + if output.exists(): + previous = json.loads(output.read_text(encoding="utf-8")) + if previous.get("task") != "M16-GAP-00178": + raise RuntimeError("existing keyframe_clear_button evidence belongs to another task") + else: + write_report(fixture, output, current, reopened, evidence_status="PRESERVED") + print("anim-keyframe-clear-button-desktop-ok preserved=exact status=FINISHED mainMutation=keyframes_cleared saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + bpy.ops.wm.quit_blender() + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit( + "usage: blender -b --python check-action-keyframe-clear-button-desktop.py -- FIXTURE REPORT" + ) + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + expected = { + "name": "WebGapAnimKeyframeClearButtonAction", + "channels": [ + { + "path": '["clear_target"]', + "index": 0, + "frames": [1.0, 3.0, 5.0], + "values": [1.0, 3.0, 5.0], + "selected": [True, True, True], + } + ], + } + if before["value"] != 3.0: + raise RuntimeError(f"unexpected keyframe_clear_button source value: {before}") + if before["action"] != expected: + if before["action"]["name"] != expected["name"] or before["action"]["channels"]: + raise RuntimeError(f"unexpected keyframe_clear_button source state: {before}") + preserved_clear(fixture, output, before) + return + if bpy.app.background: + raise RuntimeError("keyframe_clear_button requires a foreground Properties context") + foreground_clear(fixture, output, before) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-keyframe-clear-button-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-clear-v3d-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-clear-v3d-desktop.py new file mode 100644 index 00000000..f000faf1 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-clear-v3d-desktop.py @@ -0,0 +1,189 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +def action_report(obj): + action = obj.animation_data.action if obj and obj.animation_data else None + if action is None: + return {"name": None, "channels": []} + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append( + { + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(key.co.x), 6) for key in curve.keyframe_points], + "values": [round(float(key.co.y), 6) for key in curve.keyframe_points], + "selected": [bool(key.select_control_point) for key in curve.keyframe_points], + } + ) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def state_report(): + obj = bpy.data.objects.get("WebGapAnimKeyframeClearV3DObject") + if obj is None: + raise RuntimeError("keyframe-clear-v3d fixture object is missing") + return { + "selected": bool(obj.select_get()), + "active": bpy.context.view_layer.objects.active == obj, + "value": round(float(obj["clear_target"]), 6), + "action": action_report(obj), + } + + +def write_report(fixture, output, before, after, *, evidence_status=None): + report = { + "schemaVersion": 1, + "task": "M16-GAP-00179", + "operation": "ANIM_KEYFRAME_CLEAR_V3D_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": after, + "poll": True, + "operatorStatus": "FINISHED", + "mainMutation": "ANIMATION_CLEARED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + if evidence_status: + report["evidenceStatus"] = evidence_status + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + + +def preserved_clear(fixture, output, current): + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keyframe-clear-v3d-preserved-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != current: + raise RuntimeError("anim.keyframe_clear_v3d preserved fixture save/reopen drift") + if output.exists(): + previous = json.loads(output.read_text(encoding="utf-8")) + if previous.get("task") != "M16-GAP-00179": + raise RuntimeError("existing keyframe_clear_v3d evidence belongs to another task") + else: + write_report(fixture, output, current, reopened, evidence_status="PRESERVED") + print("anim-keyframe-clear-v3d-desktop-ok preserved=exact status=FINISHED mainMutation=animation_cleared saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + bpy.ops.wm.quit_blender() + + +def foreground_clear(fixture, output, before): + state = {"started": False} + + def finish_failure(message): + print(f"anim-keyframe-clear-v3d-desktop-failed: {message}") + bpy.ops.wm.quit_blender() + return None + + def execute(): + window = bpy.context.window + if window is None: + return 0.25 + area = next((candidate for candidate in window.screen.areas if candidate.type == "VIEW_3D"), None) + if area is None: + return finish_failure("no VIEW_3D area available for keyframe_clear_v3d") + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + try: + with bpy.context.temp_override(window=window, screen=window.screen, area=area, region=region): + poll = bool(bpy.ops.anim.keyframe_clear_v3d.poll()) + result = bpy.ops.anim.keyframe_clear_v3d(confirm=False) if poll else set() + except Exception as error: + return finish_failure(f"keyframe_clear_v3d failed: {error}") + if not poll or result != {"FINISHED"}: + return finish_failure(f"unexpected ANIM_OT_keyframe_clear_v3d result: poll={poll} result={result}") + after = state_report() + if after["action"]["channels"]: + return finish_failure(f"keyframe_clear_v3d left channels: {after}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keyframe-clear-v3d-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + return finish_failure("anim.keyframe_clear_v3d save/reopen drift") + shutil.copyfile(temporary_path, fixture) + write_report(fixture, output, before, reopened) + print("anim-keyframe-clear-v3d-desktop-ok poll=true status=FINISHED mainMutation=animation_cleared saveReopen=exact") + bpy.ops.wm.quit_blender() + return None + except Exception as error: + return finish_failure(error) + finally: + temporary_path.unlink(missing_ok=True) + + def start(): + if state["started"]: + return 0.25 + state["started"] = True + bpy.app.timers.register(execute, first_interval=1.0) + return None + + bpy.app.timers.register(start, first_interval=1.5) + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit( + "usage: blender -b --python check-action-keyframe-clear-v3d-desktop.py -- FIXTURE REPORT" + ) + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + expected = { + "selected": True, + "active": True, + "value": 3.0, + "action": { + "name": "WebGapAnimKeyframeClearV3DAction", + "channels": [ + { + "path": '["clear_target"]', + "index": 0, + "frames": [1.0, 3.0, 5.0], + "values": [1.0, 3.0, 5.0], + "selected": [True, True, True], + } + ], + }, + } + if before["selected"] is not True or before["active"] is not True or before["value"] != 3.0: + raise RuntimeError(f"unexpected keyframe_clear_v3d source state: {before}") + if before["action"] != expected["action"]: + if before["action"]["name"] != expected["action"]["name"] or before["action"]["channels"]: + raise RuntimeError(f"unexpected keyframe_clear_v3d source action: {before}") + preserved_clear(fixture, output, before) + return + if bpy.app.background: + raise RuntimeError("keyframe_clear_v3d requires a foreground VIEW_3D context") + foreground_clear(fixture, output, before) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-keyframe-clear-v3d-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-clear-vse-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-clear-vse-desktop.py new file mode 100644 index 00000000..6aed18bd --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-clear-vse-desktop.py @@ -0,0 +1,195 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +STRIP_NAME = "WebGapAnimKeyframeClearVSEStrip" +ACTION_NAME = "WebGapAnimKeyframeClearVSEAction" +CHANNEL_PATH = f'sequence_editor.strips_all["{STRIP_NAME}"].blend_alpha' + + +def action_report(scene): + action = scene.animation_data.action if scene.animation_data else None + if action is None: + return {"name": None, "channels": []} + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append( + { + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(key.co.x), 6) for key in curve.keyframe_points], + "values": [round(float(key.co.y), 6) for key in curve.keyframe_points], + "selected": [bool(key.select_control_point) for key in curve.keyframe_points], + } + ) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def state_report(): + scene = bpy.context.scene + sequence_editor = scene.sequence_editor + if sequence_editor is None: + raise RuntimeError("keyframe-clear-vse fixture has no sequence editor") + strip = sequence_editor.strips_all.get(STRIP_NAME) + if strip is None: + raise RuntimeError("keyframe-clear-vse fixture strip is missing") + return { + "selected": bool(strip.select), + "active": sequence_editor.active_strip == strip, + "blendAlpha": round(float(strip.blend_alpha), 6), + "action": action_report(scene), + } + + +def write_report(fixture, output, before, after, *, evidence_status=None): + report = { + "schemaVersion": 1, + "task": "M16-GAP-00180", + "operation": "ANIM_KEYFRAME_CLEAR_VSE_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": after, + "poll": True, + "operatorStatus": "FINISHED", + "mainMutation": "ANIMATION_CLEARED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + if evidence_status: + report["evidenceStatus"] = evidence_status + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + + +def preserved_clear(fixture, output, current): + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keyframe-clear-vse-preserved-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != current: + raise RuntimeError("anim.keyframe_clear_vse preserved fixture save/reopen drift") + if output.exists(): + previous = json.loads(output.read_text(encoding="utf-8")) + if previous.get("task") != "M16-GAP-00180": + raise RuntimeError("existing keyframe_clear_vse evidence belongs to another task") + else: + write_report(fixture, output, current, reopened, evidence_status="PRESERVED") + print("anim-keyframe-clear-vse-desktop-ok preserved=exact status=FINISHED mainMutation=animation_cleared saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + bpy.ops.wm.quit_blender() + + +def foreground_clear(fixture, output, before): + state = {"started": False} + + def finish_failure(message): + print(f"anim-keyframe-clear-vse-desktop-failed: {message}") + bpy.ops.wm.quit_blender() + return None + + def execute(): + window = bpy.context.window + if window is None: + return 0.25 + area = next((candidate for candidate in window.screen.areas if candidate.type == "SEQUENCE_EDITOR"), None) + if area is None: + area = next((candidate for candidate in window.screen.areas if candidate.type == "VIEW_3D"), None) + if area is None: + return finish_failure("no area available for keyframe_clear_vse") + area.type = "SEQUENCE_EDITOR" + bpy.context.workspace.sequencer_scene = bpy.context.scene + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + try: + with bpy.context.temp_override(window=window, screen=window.screen, area=area, region=region): + poll = bool(bpy.ops.anim.keyframe_clear_vse.poll()) + result = bpy.ops.anim.keyframe_clear_vse(confirm=False) if poll else set() + except Exception as error: + return finish_failure(f"keyframe_clear_vse failed: {error}") + if not poll or result != {"FINISHED"}: + return finish_failure(f"unexpected ANIM_OT_keyframe_clear_vse result: poll={poll} result={result}") + after = state_report() + if after["action"]["channels"]: + return finish_failure(f"keyframe_clear_vse left channels: {after}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keyframe-clear-vse-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + return finish_failure("anim.keyframe_clear_vse save/reopen drift") + shutil.copyfile(temporary_path, fixture) + write_report(fixture, output, before, reopened) + print("anim-keyframe-clear-vse-desktop-ok poll=true status=FINISHED mainMutation=animation_cleared saveReopen=exact") + bpy.ops.wm.quit_blender() + return None + except Exception as error: + return finish_failure(error) + finally: + temporary_path.unlink(missing_ok=True) + + def start(): + if state["started"]: + return 0.25 + state["started"] = True + bpy.app.timers.register(execute, first_interval=1.0) + return None + + bpy.app.timers.register(start, first_interval=1.5) + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-keyframe-clear-vse-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + expected = { + "name": ACTION_NAME, + "channels": [ + { + "path": CHANNEL_PATH, + "index": 0, + "frames": [1.0, 3.0, 5.0], + "values": [0.25, 0.5, 0.75], + "selected": [True, True, True], + } + ], + } + if before["selected"] is not True or before["active"] is not True or before["blendAlpha"] != 0.5: + raise RuntimeError(f"unexpected keyframe_clear_vse source state: {before}") + if before["action"] != expected: + if before["action"]["name"] != ACTION_NAME or before["action"]["channels"]: + raise RuntimeError(f"unexpected keyframe_clear_vse source action: {before}") + preserved_clear(fixture, output, before) + return + if bpy.app.background: + raise RuntimeError("keyframe_clear_vse requires a foreground SEQUENCE_EDITOR context") + foreground_clear(fixture, output, before) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-keyframe-clear-vse-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-delete-button-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-delete-button-desktop.py new file mode 100644 index 00000000..92f7ecf6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-delete-button-desktop.py @@ -0,0 +1,240 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import subprocess +import sys +import tempfile + +import bpy + + +OBJECT_NAME = "WebGapAnimKeyframeDeleteButtonObject" +ACTION_NAME = "WebGapAnimKeyframeDeleteButtonAction" +DATA_PATH = '["delete_target"]' + + +class KeyframeDeleteButtonPanel(bpy.types.Panel): + bl_label = "Keyframe Delete Button Experiment" + bl_idname = "WEBGAP_PT_keyframe_delete_button_experiment" + bl_space_type = "PROPERTIES" + bl_region_type = "WINDOW" + bl_context = "object" + + def draw(self, context): + if context.object is not None: + self.layout.prop(context.object, '["delete_target"]', text="delete_target") + + +def action_report(obj): + action = obj.animation_data.action if obj and obj.animation_data else None + if action is None: + return {"name": None, "channels": []} + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append( + { + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(key.co.x), 6) for key in curve.keyframe_points], + "values": [round(float(key.co.y), 6) for key in curve.keyframe_points], + "selected": [bool(key.select_control_point) for key in curve.keyframe_points], + } + ) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def state_report(): + obj = bpy.data.objects.get(OBJECT_NAME) + if obj is None: + raise RuntimeError("keyframe-delete-button fixture object is missing") + return { + "selected": bool(obj.select_get()), + "active": bpy.context.view_layer.objects.active == obj, + "value": round(float(obj["delete_target"]), 6), + "action": action_report(obj), + } + + +def write_report(fixture, output, before, after, *, evidence_status=None): + report = { + "schemaVersion": 1, + "task": "M16-GAP-00182", + "operation": "ANIM_KEYFRAME_DELETE_BUTTON_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": after, + "poll": True, + "operatorStatus": "FINISHED", + "mainMutation": "KEYFRAME_DELETED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + if evidence_status: + report["evidenceStatus"] = evidence_status + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + + +def preserved_delete(fixture, output, current): + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keyframe-delete-button-preserved-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != current: + raise RuntimeError("anim.keyframe_delete_button preserved fixture save/reopen drift") + if output.exists(): + previous = json.loads(output.read_text(encoding="utf-8")) + if previous.get("task") != "M16-GAP-00182": + raise RuntimeError("existing keyframe_delete_button evidence belongs to another task") + else: + write_report(fixture, output, current, reopened, evidence_status="PRESERVED") + print("anim-keyframe-delete-button-desktop-ok preserved=exact status=FINISHED mainMutation=keyframe_deleted saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + bpy.ops.wm.quit_blender() + + +def foreground_delete(fixture, output, before): + bpy.utils.register_class(KeyframeDeleteButtonPanel) + state = {"started": False} + + def blender_window(): + windows = subprocess.check_output(["xdotool", "search", "--name", "Blender"], text=True).split() + if not windows: + raise RuntimeError("Blender window was not found") + return windows[0] + + def activate_property_button(window_id): + sequence = ( + "sleep 2; " + f"xdotool mousemove --sync --window {window_id} 1170 746; " + "xdotool click --repeat 10 --delay 60 5; " + "sleep 0.5; " + f"xdotool mousemove --sync --window {window_id} 1185 645; " + "xdotool click 1" + ) + subprocess.Popen(["sh", "-c", sequence], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + + def finish_failure(message): + print(f"anim-keyframe-delete-button-desktop-failed: {message}") + bpy.ops.wm.quit_blender() + return None + + def poll_result(): + window = bpy.context.window + if window is None: + return 0.25 + area = next((candidate for candidate in window.screen.areas if candidate.type == "PROPERTIES"), None) + if area is None: + return 0.25 + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + try: + with bpy.context.temp_override(window=window, screen=window.screen, area=area, region=region): + poll = bool(bpy.ops.anim.keyframe_delete_button.poll()) + result = bpy.ops.anim.keyframe_delete_button(all=True) if poll else set() + except Exception as error: + return finish_failure(f"keyframe_delete_button failed: {error}") + if not poll or result != {"FINISHED"}: + return 0.25 + after = state_report() + channels = after["action"]["channels"] + if len(channels) != 1 or channels[0]["frames"] != [1.0, 5.0]: + return finish_failure(f"keyframe_delete_button produced unexpected action: {after}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keyframe-delete-button-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + return finish_failure("anim.keyframe_delete_button save/reopen drift") + shutil.copyfile(temporary_path, fixture) + write_report(fixture, output, before, reopened) + print("anim-keyframe-delete-button-desktop-ok poll=true status=FINISHED mainMutation=keyframe_deleted saveReopen=exact") + bpy.ops.wm.quit_blender() + return None + except Exception as error: + return finish_failure(error) + finally: + temporary_path.unlink(missing_ok=True) + + def drive_button(): + if state["started"]: + return 0.25 + window = bpy.context.window + if window is None: + return 0.25 + area = next((candidate for candidate in window.screen.areas if candidate.type == "PROPERTIES"), None) + if area is None: + return 0.25 + area.spaces.active.context = "OBJECT" + state["started"] = True + try: + bpy.ops.wm.redraw_timer(type="DRAW_WIN_SWAP", iterations=1) + activate_property_button(blender_window()) + except Exception as error: + return finish_failure(f"UI automation failed: {error}") + bpy.app.timers.register(poll_result, first_interval=3.0) + return None + + def timeout(): + current = state_report() + if current == before: + return finish_failure("UI keyframe_delete_button timed out without mutation") + return None + + bpy.app.timers.register(drive_button, first_interval=1.5) + bpy.app.timers.register(timeout, first_interval=35.0) + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-keyframe-delete-button-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + expected = { + "name": ACTION_NAME, + "channels": [ + { + "path": DATA_PATH, + "index": 0, + "frames": [1.0, 3.0, 5.0], + "values": [1.0, 3.0, 5.0], + "selected": [True, True, True], + } + ], + } + if before["selected"] is not True or before["active"] is not True or before["value"] != 3.0: + raise RuntimeError(f"unexpected keyframe_delete_button source state: {before}") + if before["action"] != expected: + if before["action"]["name"] != ACTION_NAME or before["action"]["channels"] != [ + {**expected["channels"][0], "frames": [1.0, 5.0], "values": [1.0, 5.0], "selected": [True, True]} + ]: + raise RuntimeError(f"unexpected keyframe_delete_button source action: {before}") + preserved_delete(fixture, output, before) + return + if bpy.app.background: + raise RuntimeError("keyframe_delete_button requires a foreground Properties context") + foreground_delete(fixture, output, before) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-keyframe-delete-button-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-delete-by-name-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-delete-by-name-desktop.py new file mode 100644 index 00000000..6cca6d52 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-delete-by-name-desktop.py @@ -0,0 +1,196 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +OBJECT_NAME = "WebGapAnimKeyframeDeleteByNameObject" +ACTION_NAME = "WebGapAnimKeyframeDeleteByNameAction" +KEYING_SET_NAME = "WebGapAnimKeyframeDeleteByNameSet" +DATA_PATH = '["delete_target"]' + + +def action_report(obj): + action = obj.animation_data.action if obj and obj.animation_data else None + if action is None: + return {"name": None, "channels": []} + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append( + { + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(key.co.x), 6) for key in curve.keyframe_points], + "values": [round(float(key.co.y), 6) for key in curve.keyframe_points], + "selected": [bool(key.select_control_point) for key in curve.keyframe_points], + } + ) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def state_report(): + scene = bpy.context.scene + obj = bpy.data.objects.get(OBJECT_NAME) + if obj is None: + raise RuntimeError("keyframe-delete-by-name fixture object is missing") + active = scene.keying_sets.active + return { + "selected": bool(obj.select_get()), + "active": bpy.context.view_layer.objects.active == obj, + "value": round(float(obj["delete_target"]), 6), + "activeKeyingSet": active.bl_idname if active else None, + "action": action_report(obj), + } + + +def write_report(fixture, output, before, after, *, evidence_status=None): + report = { + "schemaVersion": 1, + "task": "M16-GAP-00183", + "operation": "ANIM_KEYFRAME_DELETE_BY_NAME_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": after, + "poll": True, + "operatorStatus": "FINISHED", + "mainMutation": "KEYFRAME_DELETED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + if evidence_status: + report["evidenceStatus"] = evidence_status + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + + +def preserved_delete(fixture, output, current): + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keyframe-delete-by-name-preserved-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != current: + raise RuntimeError("anim.keyframe_delete_by_name preserved fixture save/reopen drift") + if output.exists(): + previous = json.loads(output.read_text(encoding="utf-8")) + if previous.get("task") != "M16-GAP-00183": + raise RuntimeError("existing keyframe_delete_by_name evidence belongs to another task") + else: + write_report(fixture, output, current, reopened, evidence_status="PRESERVED") + print("anim-keyframe-delete-by-name-desktop-ok preserved=exact status=FINISHED mainMutation=keyframe_deleted saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + bpy.ops.wm.quit_blender() + + +def foreground_delete(fixture, output, before): + state = {"started": False} + + def finish_failure(message): + print(f"anim-keyframe-delete-by-name-desktop-failed: {message}") + bpy.ops.wm.quit_blender() + return None + + def execute(): + window = bpy.context.window + if window is None: + return 0.25 + area = next((candidate for candidate in window.screen.areas if candidate.type == "VIEW_3D"), None) + if area is None: + return finish_failure("no VIEW_3D area available for keyframe_delete_by_name") + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + try: + with bpy.context.temp_override(window=window, screen=window.screen, area=area, region=region): + poll = bool(bpy.ops.anim.keyframe_delete_by_name.poll()) + result = bpy.ops.anim.keyframe_delete_by_name(type=KEYING_SET_NAME) if poll else set() + except Exception as error: + return finish_failure(f"keyframe_delete_by_name failed: {error}") + if not poll or result != {"FINISHED"}: + return finish_failure(f"unexpected ANIM_OT_keyframe_delete_by_name result: poll={poll} result={result}") + after = state_report() + channels = after["action"]["channels"] + if len(channels) != 1 or channels[0]["frames"] != [1.0, 5.0]: + return finish_failure(f"keyframe_delete_by_name produced unexpected action: {after}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keyframe-delete-by-name-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + return finish_failure("anim.keyframe_delete_by_name save/reopen drift") + shutil.copyfile(temporary_path, fixture) + write_report(fixture, output, before, reopened) + print("anim-keyframe-delete-by-name-desktop-ok poll=true status=FINISHED mainMutation=keyframe_deleted saveReopen=exact") + bpy.ops.wm.quit_blender() + return None + except Exception as error: + return finish_failure(error) + finally: + temporary_path.unlink(missing_ok=True) + + def start(): + if state["started"]: + return 0.25 + state["started"] = True + bpy.app.timers.register(execute, first_interval=1.0) + return None + + bpy.app.timers.register(start, first_interval=1.5) + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-keyframe-delete-by-name-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + expected = { + "name": ACTION_NAME, + "channels": [ + { + "path": DATA_PATH, + "index": 0, + "frames": [1.0, 3.0, 5.0], + "values": [1.0, 3.0, 5.0], + "selected": [True, True, True], + } + ], + } + if before["selected"] is not True or before["active"] is not True or before["value"] != 3.0: + raise RuntimeError(f"unexpected keyframe_delete_by_name source state: {before}") + if before["activeKeyingSet"] != KEYING_SET_NAME: + raise RuntimeError(f"unexpected keyframe_delete_by_name keying set: {before}") + if before["action"] != expected: + if before["action"]["name"] != ACTION_NAME or before["action"]["channels"] != [ + {**expected["channels"][0], "frames": [1.0, 5.0], "values": [1.0, 5.0], "selected": [True, True]} + ]: + raise RuntimeError(f"unexpected keyframe_delete_by_name source action: {before}") + preserved_delete(fixture, output, before) + return + if bpy.app.background: + raise RuntimeError("keyframe_delete_by_name requires a foreground VIEW_3D context") + foreground_delete(fixture, output, before) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-keyframe-delete-by-name-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-delete-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-delete-desktop.py new file mode 100644 index 00000000..9bacca1d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-delete-desktop.py @@ -0,0 +1,196 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +OBJECT_NAME = "WebGapAnimKeyframeDeleteObject" +ACTION_NAME = "WebGapAnimKeyframeDeleteAction" +KEYING_SET_NAME = "WebGapAnimKeyframeDeleteSet" +DATA_PATH = '["delete_target"]' + + +def action_report(obj): + action = obj.animation_data.action if obj and obj.animation_data else None + if action is None: + return {"name": None, "channels": []} + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append( + { + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(key.co.x), 6) for key in curve.keyframe_points], + "values": [round(float(key.co.y), 6) for key in curve.keyframe_points], + "selected": [bool(key.select_control_point) for key in curve.keyframe_points], + } + ) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def state_report(): + scene = bpy.context.scene + obj = bpy.data.objects.get(OBJECT_NAME) + if obj is None: + raise RuntimeError("keyframe-delete fixture object is missing") + active = scene.keying_sets.active + return { + "selected": bool(obj.select_get()), + "active": bpy.context.view_layer.objects.active == obj, + "value": round(float(obj["delete_target"]), 6), + "activeKeyingSet": active.bl_idname if active else None, + "action": action_report(obj), + } + + +def write_report(fixture, output, before, after, *, evidence_status=None): + report = { + "schemaVersion": 1, + "task": "M16-GAP-00181", + "operation": "ANIM_KEYFRAME_DELETE_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": after, + "poll": True, + "operatorStatus": "FINISHED", + "mainMutation": "KEYFRAME_DELETED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + if evidence_status: + report["evidenceStatus"] = evidence_status + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + + +def preserved_delete(fixture, output, current): + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keyframe-delete-preserved-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != current: + raise RuntimeError("anim.keyframe_delete preserved fixture save/reopen drift") + if output.exists(): + previous = json.loads(output.read_text(encoding="utf-8")) + if previous.get("task") != "M16-GAP-00181": + raise RuntimeError("existing keyframe_delete evidence belongs to another task") + else: + write_report(fixture, output, current, reopened, evidence_status="PRESERVED") + print("anim-keyframe-delete-desktop-ok preserved=exact status=FINISHED mainMutation=keyframe_deleted saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + bpy.ops.wm.quit_blender() + + +def foreground_delete(fixture, output, before): + state = {"started": False} + + def finish_failure(message): + print(f"anim-keyframe-delete-desktop-failed: {message}") + bpy.ops.wm.quit_blender() + return None + + def execute(): + window = bpy.context.window + if window is None: + return 0.25 + area = next((candidate for candidate in window.screen.areas if candidate.type == "VIEW_3D"), None) + if area is None: + return finish_failure("no VIEW_3D area available for keyframe_delete") + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + try: + with bpy.context.temp_override(window=window, screen=window.screen, area=area, region=region): + poll = bool(bpy.ops.anim.keyframe_delete.poll()) + result = bpy.ops.anim.keyframe_delete(type=KEYING_SET_NAME) if poll else set() + except Exception as error: + return finish_failure(f"keyframe_delete failed: {error}") + if not poll or result != {"FINISHED"}: + return finish_failure(f"unexpected ANIM_OT_keyframe_delete result: poll={poll} result={result}") + after = state_report() + channels = after["action"]["channels"] + if len(channels) != 1 or channels[0]["frames"] != [1.0, 5.0]: + return finish_failure(f"keyframe_delete produced unexpected action: {after}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keyframe-delete-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + return finish_failure("anim.keyframe_delete save/reopen drift") + shutil.copyfile(temporary_path, fixture) + write_report(fixture, output, before, reopened) + print("anim-keyframe-delete-desktop-ok poll=true status=FINISHED mainMutation=keyframe_deleted saveReopen=exact") + bpy.ops.wm.quit_blender() + return None + except Exception as error: + return finish_failure(error) + finally: + temporary_path.unlink(missing_ok=True) + + def start(): + if state["started"]: + return 0.25 + state["started"] = True + bpy.app.timers.register(execute, first_interval=1.0) + return None + + bpy.app.timers.register(start, first_interval=1.5) + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-keyframe-delete-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + expected = { + "name": ACTION_NAME, + "channels": [ + { + "path": DATA_PATH, + "index": 0, + "frames": [1.0, 3.0, 5.0], + "values": [1.0, 3.0, 5.0], + "selected": [True, True, True], + } + ], + } + if before["selected"] is not True or before["active"] is not True or before["value"] != 3.0: + raise RuntimeError(f"unexpected keyframe_delete source state: {before}") + if before["activeKeyingSet"] != KEYING_SET_NAME: + raise RuntimeError(f"unexpected keyframe_delete keying set: {before}") + if before["action"] != expected: + if before["action"]["name"] != ACTION_NAME or before["action"]["channels"] != [ + {**expected["channels"][0], "frames": [1.0, 5.0], "values": [1.0, 5.0], "selected": [True, True]} + ]: + raise RuntimeError(f"unexpected keyframe_delete source action: {before}") + preserved_delete(fixture, output, before) + return + if bpy.app.background: + raise RuntimeError("keyframe_delete requires a foreground VIEW_3D context") + foreground_delete(fixture, output, before) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-keyframe-delete-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-delete-v3d-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-delete-v3d-desktop.py new file mode 100644 index 00000000..12df82b8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-delete-v3d-desktop.py @@ -0,0 +1,190 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +OBJECT_NAME = "WebGapAnimKeyframeDeleteV3DObject" +ACTION_NAME = "WebGapAnimKeyframeDeleteV3DAction" +DATA_PATH = '["delete_target"]' + + +def action_report(obj): + action = obj.animation_data.action if obj and obj.animation_data else None + if action is None: + return {"name": None, "channels": []} + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append( + { + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(key.co.x), 6) for key in curve.keyframe_points], + "values": [round(float(key.co.y), 6) for key in curve.keyframe_points], + "selected": [bool(key.select_control_point) for key in curve.keyframe_points], + } + ) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def state_report(): + obj = bpy.data.objects.get(OBJECT_NAME) + if obj is None: + raise RuntimeError("keyframe-delete-v3d fixture object is missing") + return { + "selected": bool(obj.select_get()), + "active": bpy.context.view_layer.objects.active == obj, + "value": round(float(obj["delete_target"]), 6), + "action": action_report(obj), + } + + +def write_report(fixture, output, before, after, *, evidence_status=None): + report = { + "schemaVersion": 1, + "task": "M16-GAP-00184", + "operation": "ANIM_KEYFRAME_DELETE_V3D_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": after, + "poll": True, + "operatorStatus": "FINISHED", + "mainMutation": "KEYFRAME_DELETED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + if evidence_status: + report["evidenceStatus"] = evidence_status + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + + +def preserved_delete(fixture, output, current): + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keyframe-delete-v3d-preserved-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != current: + raise RuntimeError("anim.keyframe_delete_v3d preserved fixture save/reopen drift") + if output.exists(): + previous = json.loads(output.read_text(encoding="utf-8")) + if previous.get("task") != "M16-GAP-00184": + raise RuntimeError("existing keyframe_delete_v3d evidence belongs to another task") + else: + write_report(fixture, output, current, reopened, evidence_status="PRESERVED") + print("anim-keyframe-delete-v3d-desktop-ok preserved=exact status=FINISHED mainMutation=keyframe_deleted saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + bpy.ops.wm.quit_blender() + + +def foreground_delete(fixture, output, before): + state = {"started": False} + + def finish_failure(message): + print(f"anim-keyframe-delete-v3d-desktop-failed: {message}") + bpy.ops.wm.quit_blender() + return None + + def execute(): + window = bpy.context.window + if window is None: + return 0.25 + area = next((candidate for candidate in window.screen.areas if candidate.type == "VIEW_3D"), None) + if area is None: + return finish_failure("no VIEW_3D area available for keyframe_delete_v3d") + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + try: + with bpy.context.temp_override(window=window, screen=window.screen, area=area, region=region): + poll = bool(bpy.ops.anim.keyframe_delete_v3d.poll()) + result = bpy.ops.anim.keyframe_delete_v3d(confirm=False) if poll else set() + except Exception as error: + return finish_failure(f"keyframe_delete_v3d failed: {error}") + if not poll or result != {"FINISHED"}: + return finish_failure(f"unexpected ANIM_OT_keyframe_delete_v3d result: poll={poll} result={result}") + after = state_report() + channels = after["action"]["channels"] + if len(channels) != 1 or channels[0]["frames"] != [1.0, 5.0]: + return finish_failure(f"keyframe_delete_v3d produced unexpected action: {after}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keyframe-delete-v3d-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + return finish_failure("anim.keyframe_delete_v3d save/reopen drift") + shutil.copyfile(temporary_path, fixture) + write_report(fixture, output, before, reopened) + print("anim-keyframe-delete-v3d-desktop-ok poll=true status=FINISHED mainMutation=keyframe_deleted saveReopen=exact") + bpy.ops.wm.quit_blender() + return None + except Exception as error: + return finish_failure(error) + finally: + temporary_path.unlink(missing_ok=True) + + def start(): + if state["started"]: + return 0.25 + state["started"] = True + bpy.app.timers.register(execute, first_interval=1.0) + return None + + bpy.app.timers.register(start, first_interval=1.5) + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-keyframe-delete-v3d-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + expected = { + "name": ACTION_NAME, + "channels": [ + { + "path": DATA_PATH, + "index": 0, + "frames": [1.0, 3.0, 5.0], + "values": [1.0, 3.0, 5.0], + "selected": [True, True, True], + } + ], + } + if before["selected"] is not True or before["active"] is not True or before["value"] != 3.0: + raise RuntimeError(f"unexpected keyframe_delete_v3d source state: {before}") + if before["action"] != expected: + if before["action"]["name"] != ACTION_NAME or before["action"]["channels"] != [ + {**expected["channels"][0], "frames": [1.0, 5.0], "values": [1.0, 5.0], "selected": [True, True]} + ]: + raise RuntimeError(f"unexpected keyframe_delete_v3d source action: {before}") + preserved_delete(fixture, output, before) + return + if bpy.app.background: + raise RuntimeError("keyframe_delete_v3d requires a foreground VIEW_3D context") + foreground_delete(fixture, output, before) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-keyframe-delete-v3d-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-delete-vse-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-delete-vse-desktop.py new file mode 100644 index 00000000..51ab2eee --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-delete-vse-desktop.py @@ -0,0 +1,198 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +STRIP_NAME = "WebGapAnimKeyframeDeleteVSEStrip" +ACTION_NAME = "WebGapAnimKeyframeDeleteVSEAction" +CHANNEL_PATH = f'sequence_editor.strips_all["{STRIP_NAME}"].blend_alpha' + + +def action_report(scene): + action = scene.animation_data.action if scene.animation_data else None + if action is None: + return {"name": None, "channels": []} + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append( + { + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(key.co.x), 6) for key in curve.keyframe_points], + "values": [round(float(key.co.y), 6) for key in curve.keyframe_points], + "selected": [bool(key.select_control_point) for key in curve.keyframe_points], + } + ) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def state_report(): + scene = bpy.context.scene + sequence_editor = scene.sequence_editor + if sequence_editor is None: + raise RuntimeError("keyframe-delete-vse fixture has no sequence editor") + strip = sequence_editor.strips_all.get(STRIP_NAME) + if strip is None: + raise RuntimeError("keyframe-delete-vse fixture strip is missing") + return { + "selected": bool(strip.select), + "active": sequence_editor.active_strip == strip, + "blendAlpha": round(float(strip.blend_alpha), 6), + "action": action_report(scene), + } + + +def write_report(fixture, output, before, after, *, evidence_status=None): + report = { + "schemaVersion": 1, + "task": "M16-GAP-00185", + "operation": "ANIM_KEYFRAME_DELETE_VSE_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": after, + "poll": True, + "operatorStatus": "FINISHED", + "mainMutation": "KEYFRAME_DELETED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + if evidence_status: + report["evidenceStatus"] = evidence_status + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + + +def preserved_delete(fixture, output, current): + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keyframe-delete-vse-preserved-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != current: + raise RuntimeError("anim.keyframe_delete_vse preserved fixture save/reopen drift") + if output.exists(): + previous = json.loads(output.read_text(encoding="utf-8")) + if previous.get("task") != "M16-GAP-00185": + raise RuntimeError("existing keyframe_delete_vse evidence belongs to another task") + else: + write_report(fixture, output, current, reopened, evidence_status="PRESERVED") + print("anim-keyframe-delete-vse-desktop-ok preserved=exact status=FINISHED mainMutation=keyframe_deleted saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + bpy.ops.wm.quit_blender() + + +def foreground_delete(fixture, output, before): + state = {"started": False} + + def finish_failure(message): + print(f"anim-keyframe-delete-vse-desktop-failed: {message}") + bpy.ops.wm.quit_blender() + return None + + def execute(): + window = bpy.context.window + if window is None: + return 0.25 + area = next((candidate for candidate in window.screen.areas if candidate.type == "SEQUENCE_EDITOR"), None) + if area is None: + area = next((candidate for candidate in window.screen.areas if candidate.type == "VIEW_3D"), None) + if area is None: + return finish_failure("no area available for keyframe_delete_vse") + area.type = "SEQUENCE_EDITOR" + bpy.context.workspace.sequencer_scene = bpy.context.scene + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + try: + with bpy.context.temp_override(window=window, screen=window.screen, area=area, region=region): + poll = bool(bpy.ops.anim.keyframe_delete_vse.poll()) + result = bpy.ops.anim.keyframe_delete_vse(confirm=False) if poll else set() + except Exception as error: + return finish_failure(f"keyframe_delete_vse failed: {error}") + if not poll or result != {"FINISHED"}: + return finish_failure(f"unexpected ANIM_OT_keyframe_delete_vse result: poll={poll} result={result}") + after = state_report() + channels = after["action"]["channels"] + if len(channels) != 1 or channels[0]["frames"] != [1.0, 5.0]: + return finish_failure(f"keyframe_delete_vse produced unexpected action: {after}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keyframe-delete-vse-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + return finish_failure("anim.keyframe_delete_vse save/reopen drift") + shutil.copyfile(temporary_path, fixture) + write_report(fixture, output, before, reopened) + print("anim-keyframe-delete-vse-desktop-ok poll=true status=FINISHED mainMutation=keyframe_deleted saveReopen=exact") + bpy.ops.wm.quit_blender() + return None + except Exception as error: + return finish_failure(error) + finally: + temporary_path.unlink(missing_ok=True) + + def start(): + if state["started"]: + return 0.25 + state["started"] = True + bpy.app.timers.register(execute, first_interval=1.0) + return None + + bpy.app.timers.register(start, first_interval=1.5) + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-keyframe-delete-vse-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + expected = { + "name": ACTION_NAME, + "channels": [ + { + "path": CHANNEL_PATH, + "index": 0, + "frames": [1.0, 3.0, 5.0], + "values": [0.25, 0.5, 0.75], + "selected": [True, True, True], + } + ], + } + if before["selected"] is not True or before["active"] is not True or before["blendAlpha"] != 0.5: + raise RuntimeError(f"unexpected keyframe_delete_vse source state: {before}") + if before["action"] != expected: + if before["action"]["name"] != ACTION_NAME or before["action"]["channels"] != [ + {**expected["channels"][0], "frames": [1.0, 5.0], "values": [0.25, 0.75], "selected": [True, True]} + ]: + raise RuntimeError(f"unexpected keyframe_delete_vse source action: {before}") + preserved_delete(fixture, output, before) + return + if bpy.app.background: + raise RuntimeError("keyframe_delete_vse requires a foreground SEQUENCE_EDITOR context") + foreground_delete(fixture, output, before) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-keyframe-delete-vse-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-insert-button-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-insert-button-desktop.py new file mode 100644 index 00000000..9617ebb9 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-insert-button-desktop.py @@ -0,0 +1,250 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import subprocess +import sys +import tempfile + +import bpy + + +OBJECT_NAME = "WebGapAnimKeyframeInsertButtonObject" +ACTION_NAME = "WebGapAnimKeyframeInsertButtonAction" +DATA_PATH = '["insert_target"]' + + +class KeyframeInsertButtonPanel(bpy.types.Panel): + bl_label = "Keyframe Insert Button Experiment" + bl_idname = "WEBGAP_PT_keyframe_insert_button_experiment" + bl_space_type = "PROPERTIES" + bl_region_type = "WINDOW" + bl_context = "object" + + def draw(self, context): + if context.object is not None: + self.layout.prop(context.object, '["insert_target"]', text="insert_target") + + +def action_report(obj): + action = obj.animation_data.action if obj and obj.animation_data else None + if action is None: + return {"name": None, "channels": []} + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append( + { + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(key.co.x), 6) for key in curve.keyframe_points], + "values": [round(float(key.co.y), 6) for key in curve.keyframe_points], + "selected": [bool(key.select_control_point) for key in curve.keyframe_points], + } + ) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def state_report(): + obj = bpy.data.objects.get(OBJECT_NAME) + if obj is None: + raise RuntimeError("keyframe-insert-button fixture object is missing") + return { + "selected": bool(obj.select_get()), + "active": bpy.context.view_layer.objects.active == obj, + "value": round(float(obj["insert_target"]), 6), + "action": action_report(obj), + } + + +def write_report(fixture, output, before, after, *, evidence_status=None): + report = { + "schemaVersion": 1, + "task": "M16-GAP-00187", + "operation": "ANIM_KEYFRAME_INSERT_BUTTON_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": after, + "poll": True, + "operatorStatus": "FINISHED", + "mainMutation": "KEYFRAME_INSERTED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + if evidence_status: + report["evidenceStatus"] = evidence_status + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + + +def preserved_insert(fixture, output, current): + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keyframe-insert-button-preserved-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != current: + raise RuntimeError("anim.keyframe_insert_button preserved fixture save/reopen drift") + if output.exists(): + previous = json.loads(output.read_text(encoding="utf-8")) + if previous.get("task") != "M16-GAP-00187": + raise RuntimeError("existing keyframe_insert_button evidence belongs to another task") + else: + write_report(fixture, output, current, reopened, evidence_status="PRESERVED") + print("anim-keyframe-insert-button-desktop-ok preserved=exact status=FINISHED mainMutation=keyframe_inserted saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + bpy.ops.wm.quit_blender() + + +def foreground_insert(fixture, output, before): + bpy.utils.register_class(KeyframeInsertButtonPanel) + state = {"started": False} + + def blender_window(): + windows = subprocess.check_output(["xdotool", "search", "--name", "Blender"], text=True).split() + if not windows: + raise RuntimeError("Blender window was not found") + return windows[0] + + def activate_property_button(window_id): + sequence = ( + "sleep 2; " + f"xdotool mousemove --sync --window {window_id} 1170 746; " + "xdotool click --repeat 10 --delay 60 5; " + "sleep 0.5; " + f"xdotool mousemove --sync --window {window_id} 1185 645; " + "xdotool click 1" + ) + subprocess.Popen(["sh", "-c", sequence], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + + def finish_failure(message): + print(f"anim-keyframe-insert-button-desktop-failed: {message}") + bpy.ops.wm.quit_blender() + return None + + def poll_result(): + window = bpy.context.window + if window is None: + return 0.25 + area = next((candidate for candidate in window.screen.areas if candidate.type == "PROPERTIES"), None) + if area is None: + return 0.25 + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + try: + with bpy.context.temp_override(window=window, screen=window.screen, area=area, region=region): + poll = bool(bpy.ops.anim.keyframe_insert_button.poll()) + result = bpy.ops.anim.keyframe_insert_button(all=True) if poll else set() + except Exception as error: + return finish_failure(f"keyframe_insert_button failed: {error}") + if not poll or result != {"FINISHED"}: + return 0.25 + after = state_report() + channels = after["action"]["channels"] + if len(channels) != 1 or channels[0]["frames"] != [1.0, 3.0, 5.0]: + return finish_failure(f"keyframe_insert_button produced unexpected action: {after}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keyframe-insert-button-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + return finish_failure("anim.keyframe_insert_button save/reopen drift") + shutil.copyfile(temporary_path, fixture) + write_report(fixture, output, before, reopened) + print("anim-keyframe-insert-button-desktop-ok poll=true status=FINISHED mainMutation=keyframe_inserted saveReopen=exact") + bpy.ops.wm.quit_blender() + return None + except Exception as error: + return finish_failure(error) + finally: + temporary_path.unlink(missing_ok=True) + + def drive_button(): + if state["started"]: + return 0.25 + window = bpy.context.window + if window is None: + return 0.25 + area = next((candidate for candidate in window.screen.areas if candidate.type == "PROPERTIES"), None) + if area is None: + return 0.25 + area.spaces.active.context = "OBJECT" + state["started"] = True + try: + bpy.ops.wm.redraw_timer(type="DRAW_WIN_SWAP", iterations=1) + activate_property_button(blender_window()) + except Exception as error: + return finish_failure(f"UI automation failed: {error}") + bpy.app.timers.register(poll_result, first_interval=3.0) + return None + + def timeout(): + current = state_report() + if current == before: + return finish_failure("UI keyframe_insert_button timed out without mutation") + return None + + bpy.app.timers.register(drive_button, first_interval=1.5) + bpy.app.timers.register(timeout, first_interval=35.0) + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-keyframe-insert-button-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + expected_before = { + "name": ACTION_NAME, + "channels": [ + { + "path": DATA_PATH, + "index": 0, + "frames": [1.0, 5.0], + "values": [1.0, 5.0], + "selected": [True, True], + } + ], + } + expected_after = { + "name": ACTION_NAME, + "channels": [ + { + "path": DATA_PATH, + "index": 0, + "frames": [1.0, 3.0, 5.0], + "values": [1.0, 3.0, 5.0], + "selected": [False, True, False], + } + ], + } + if before["selected"] is not True or before["active"] is not True or before["value"] != 3.0: + raise RuntimeError(f"unexpected keyframe_insert_button source state: {before}") + if before["action"] != expected_before: + if before["action"] != expected_after: + raise RuntimeError(f"unexpected keyframe_insert_button source action: {before}") + preserved_insert(fixture, output, before) + return + if bpy.app.background: + raise RuntimeError("keyframe_insert_button requires a foreground Properties context") + foreground_insert(fixture, output, before) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-keyframe-insert-button-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-insert-by-name-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-insert-by-name-desktop.py new file mode 100644 index 00000000..168504e7 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-insert-by-name-desktop.py @@ -0,0 +1,155 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +OBJECT_NAME = "WebGapAnimKeyframeInsertByNameObject" +ACTION_NAME = "WebGapAnimKeyframeInsertByNameAction" +KEYING_SET_NAME = "WebGapAnimKeyframeInsertByNameSet" +DATA_PATH = '["insert_target"]' + + +def action_report(obj): + action = obj.animation_data.action if obj and obj.animation_data else None + if action is None: + return {"name": None, "channels": []} + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({"path": curve.data_path, "index": curve.array_index, "frames": [round(float(key.co.x), 6) for key in curve.keyframe_points], "values": [round(float(key.co.y), 6) for key in curve.keyframe_points], "selected": [bool(key.select_control_point) for key in curve.keyframe_points]}) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def state_report(): + scene = bpy.context.scene + obj = bpy.data.objects.get(OBJECT_NAME) + if obj is None: + raise RuntimeError("keyframe-insert-by-name fixture object is missing") + active = scene.keying_sets.active + return {"selected": bool(obj.select_get()), "active": bpy.context.view_layer.objects.active == obj, "value": round(float(obj["insert_target"]), 6), "activeKeyingSet": active.bl_idname if active else None, "action": action_report(obj)} + + +def write_report(fixture, output, before, after, *, evidence_status=None): + report = {"schemaVersion": 1, "task": "M16-GAP-00188", "operation": "ANIM_KEYFRAME_INSERT_BY_NAME_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "before": before, "after": after, "poll": True, "operatorStatus": "FINISHED", "mainMutation": "KEYFRAME_INSERTED", "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + if evidence_status: + report["evidenceStatus"] = evidence_status + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + + +def preserved_insert(fixture, output, current): + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keyframe-insert-by-name-preserved-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != current: + raise RuntimeError("anim.keyframe_insert_by_name preserved fixture save/reopen drift") + if output.exists(): + if json.loads(output.read_text(encoding="utf-8")).get("task") != "M16-GAP-00188": + raise RuntimeError("existing keyframe_insert_by_name evidence belongs to another task") + else: + write_report(fixture, output, current, reopened, evidence_status="PRESERVED") + print("anim-keyframe-insert-by-name-desktop-ok preserved=exact status=FINISHED mainMutation=keyframe_inserted saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + bpy.ops.wm.quit_blender() + + +def foreground_insert(fixture, output, before): + state = {"started": False} + + def finish_failure(message): + print(f"anim-keyframe-insert-by-name-desktop-failed: {message}") + bpy.ops.wm.quit_blender() + return None + + def execute(): + window = bpy.context.window + if window is None: + return 0.25 + area = next((candidate for candidate in window.screen.areas if candidate.type == "VIEW_3D"), None) + if area is None: + return finish_failure("no VIEW_3D area available for keyframe_insert_by_name") + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + try: + with bpy.context.temp_override(window=window, screen=window.screen, area=area, region=region): + poll = bool(bpy.ops.anim.keyframe_insert_by_name.poll()) + result = bpy.ops.anim.keyframe_insert_by_name(type=KEYING_SET_NAME) if poll else set() + except Exception as error: + return finish_failure(f"keyframe_insert_by_name failed: {error}") + if not poll or result != {"FINISHED"}: + return finish_failure(f"unexpected ANIM_OT_keyframe_insert_by_name result: poll={poll} result={result}") + after = state_report() + if len(after["action"]["channels"]) != 1 or after["action"]["channels"][0]["frames"] != [1.0, 3.0, 5.0]: + return finish_failure(f"keyframe_insert_by_name produced unexpected action: {after}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keyframe-insert-by-name-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + return finish_failure("anim.keyframe_insert_by_name save/reopen drift") + shutil.copyfile(temporary_path, fixture) + write_report(fixture, output, before, reopened) + print("anim-keyframe-insert-by-name-desktop-ok poll=true status=FINISHED mainMutation=keyframe_inserted saveReopen=exact") + bpy.ops.wm.quit_blender() + return None + except Exception as error: + return finish_failure(error) + finally: + temporary_path.unlink(missing_ok=True) + + def start(): + if state["started"]: + return 0.25 + state["started"] = True + bpy.app.timers.register(execute, first_interval=1.0) + return None + + bpy.app.timers.register(start, first_interval=1.5) + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-keyframe-insert-by-name-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + expected = {"name": ACTION_NAME, "channels": [{"path": DATA_PATH, "index": 0, "frames": [1.0, 5.0], "values": [1.0, 5.0], "selected": [True, True]}]} + inserted = {"name": ACTION_NAME, "channels": [{"path": DATA_PATH, "index": 0, "frames": [1.0, 3.0, 5.0], "values": [1.0, 3.0, 5.0], "selected": [False, True, False]}]} + if before["selected"] is not True or before["active"] is not True or before["value"] != 3.0: + raise RuntimeError(f"unexpected keyframe_insert_by_name source state: {before}") + if before["activeKeyingSet"] != KEYING_SET_NAME: + raise RuntimeError(f"unexpected keyframe_insert_by_name keying set: {before}") + if before["action"] != expected: + if before["action"] != inserted: + raise RuntimeError(f"unexpected keyframe_insert_by_name source action: {before}") + preserved_insert(fixture, output, before) + return + if bpy.app.background: + raise RuntimeError("keyframe_insert_by_name requires a foreground VIEW_3D context") + foreground_insert(fixture, output, before) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-keyframe-insert-by-name-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-insert-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-insert-desktop.py new file mode 100644 index 00000000..371335e3 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-insert-desktop.py @@ -0,0 +1,206 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +OBJECT_NAME = "WebGapAnimKeyframeInsertObject" +ACTION_NAME = "WebGapAnimKeyframeInsertAction" +KEYING_SET_NAME = "WebGapAnimKeyframeInsertSet" +DATA_PATH = '["insert_target"]' + + +def action_report(obj): + action = obj.animation_data.action if obj and obj.animation_data else None + if action is None: + return {"name": None, "channels": []} + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append( + { + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(key.co.x), 6) for key in curve.keyframe_points], + "values": [round(float(key.co.y), 6) for key in curve.keyframe_points], + "selected": [bool(key.select_control_point) for key in curve.keyframe_points], + } + ) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def state_report(): + scene = bpy.context.scene + obj = bpy.data.objects.get(OBJECT_NAME) + if obj is None: + raise RuntimeError("keyframe-insert fixture object is missing") + active = scene.keying_sets.active + return { + "selected": bool(obj.select_get()), + "active": bpy.context.view_layer.objects.active == obj, + "value": round(float(obj["insert_target"]), 6), + "activeKeyingSet": active.bl_idname if active else None, + "action": action_report(obj), + } + + +def write_report(fixture, output, before, after, *, evidence_status=None): + report = { + "schemaVersion": 1, + "task": "M16-GAP-00186", + "operation": "ANIM_KEYFRAME_INSERT_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": after, + "poll": True, + "operatorStatus": "FINISHED", + "mainMutation": "KEYFRAME_INSERTED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + if evidence_status: + report["evidenceStatus"] = evidence_status + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + + +def preserved_insert(fixture, output, current): + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keyframe-insert-preserved-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != current: + raise RuntimeError("anim.keyframe_insert preserved fixture save/reopen drift") + if output.exists(): + previous = json.loads(output.read_text(encoding="utf-8")) + if previous.get("task") != "M16-GAP-00186": + raise RuntimeError("existing keyframe_insert evidence belongs to another task") + else: + write_report(fixture, output, current, reopened, evidence_status="PRESERVED") + print("anim-keyframe-insert-desktop-ok preserved=exact status=FINISHED mainMutation=keyframe_inserted saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + bpy.ops.wm.quit_blender() + + +def foreground_insert(fixture, output, before): + state = {"started": False} + + def finish_failure(message): + print(f"anim-keyframe-insert-desktop-failed: {message}") + bpy.ops.wm.quit_blender() + return None + + def execute(): + window = bpy.context.window + if window is None: + return 0.25 + area = next((candidate for candidate in window.screen.areas if candidate.type == "VIEW_3D"), None) + if area is None: + return finish_failure("no VIEW_3D area available for keyframe_insert") + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + try: + with bpy.context.temp_override(window=window, screen=window.screen, area=area, region=region): + poll = bool(bpy.ops.anim.keyframe_insert.poll()) + result = bpy.ops.anim.keyframe_insert() if poll else set() + except Exception as error: + return finish_failure(f"keyframe_insert failed: {error}") + if not poll or result != {"FINISHED"}: + return finish_failure(f"unexpected ANIM_OT_keyframe_insert result: poll={poll} result={result}") + after = state_report() + channels = after["action"]["channels"] + if len(channels) != 1 or channels[0]["frames"] != [1.0, 3.0, 5.0]: + return finish_failure(f"keyframe_insert produced unexpected action: {after}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keyframe-insert-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + return finish_failure("anim.keyframe_insert save/reopen drift") + shutil.copyfile(temporary_path, fixture) + write_report(fixture, output, before, reopened) + print("anim-keyframe-insert-desktop-ok poll=true status=FINISHED mainMutation=keyframe_inserted saveReopen=exact") + bpy.ops.wm.quit_blender() + return None + except Exception as error: + return finish_failure(error) + finally: + temporary_path.unlink(missing_ok=True) + + def start(): + if state["started"]: + return 0.25 + state["started"] = True + bpy.app.timers.register(execute, first_interval=1.0) + return None + + bpy.app.timers.register(start, first_interval=1.5) + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-keyframe-insert-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + expected = { + "name": ACTION_NAME, + "channels": [ + { + "path": DATA_PATH, + "index": 0, + "frames": [1.0, 5.0], + "values": [1.0, 5.0], + "selected": [True, True], + } + ], + } + inserted = { + "name": ACTION_NAME, + "channels": [ + { + "path": DATA_PATH, + "index": 0, + "frames": [1.0, 3.0, 5.0], + "values": [1.0, 3.0, 5.0], + "selected": [False, True, False], + } + ], + } + if before["selected"] is not True or before["active"] is not True or before["value"] != 3.0: + raise RuntimeError(f"unexpected keyframe_insert source state: {before}") + if before["activeKeyingSet"] != KEYING_SET_NAME: + raise RuntimeError(f"unexpected keyframe_insert keying set: {before}") + if before["action"] != expected: + if before["action"] != inserted: + raise RuntimeError(f"unexpected keyframe_insert source action: {before}") + preserved_insert(fixture, output, before) + return + if bpy.app.background: + raise RuntimeError("keyframe_insert requires a foreground VIEW_3D context") + foreground_insert(fixture, output, before) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-keyframe-insert-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-insert-menu-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-insert-menu-desktop.py new file mode 100644 index 00000000..7a8de703 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-insert-menu-desktop.py @@ -0,0 +1,125 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +OBJECT_NAME = "WebGapAnimKeyframeInsertMenuObject" +ACTION_NAME = "WebGapAnimKeyframeInsertMenuAction" +KEYING_SET_NAME = "WebGapAnimKeyframeInsertMenuSet" +DATA_PATH = '["insert_target"]' + + +def action_report(obj): + action = obj.animation_data.action if obj and obj.animation_data else None + if action is None: + return {"name": None, "channels": []} + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({"path": curve.data_path, "index": curve.array_index, "frames": [round(float(key.co.x), 6) for key in curve.keyframe_points], "values": [round(float(key.co.y), 6) for key in curve.keyframe_points], "selected": [bool(key.select_control_point) for key in curve.keyframe_points]}) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def state_report(): + obj = bpy.data.objects.get(OBJECT_NAME) + if obj is None: + raise RuntimeError("keyframe-insert-menu fixture object is missing") + active = bpy.context.scene.keying_sets.active + return {"selected": bool(obj.select_get()), "active": bpy.context.view_layer.objects.active == obj, "value": round(float(obj["insert_target"]), 6), "activeKeyingSet": active.bl_idname if active else None, "action": action_report(obj)} + + +def write_report(fixture, output, before, after, *, evidence_status=None): + report = {"schemaVersion": 1, "task": "M16-GAP-00189", "operation": "ANIM_KEYFRAME_INSERT_MENU_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "before": before, "after": after, "poll": True, "operatorStatus": "FINISHED", "mainMutation": "KEYFRAME_INSERTED", "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + if evidence_status: + report["evidenceStatus"] = evidence_status + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + + +def preserved_insert(fixture, output, current): + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keyframe-insert-menu-preserved-", suffix=".blend") + os.close(descriptor); temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != current: + raise RuntimeError("anim.keyframe_insert_menu preserved fixture save/reopen drift") + if output.exists() and json.loads(output.read_text(encoding="utf-8")).get("task") != "M16-GAP-00189": + raise RuntimeError("existing keyframe_insert_menu evidence belongs to another task") + if not output.exists(): + write_report(fixture, output, current, reopened, evidence_status="PRESERVED") + print("anim-keyframe-insert-menu-desktop-ok preserved=exact status=FINISHED mainMutation=keyframe_inserted saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True); bpy.ops.wm.quit_blender() + + +def foreground_insert(fixture, output, before): + state = {"started": False} + def finish_failure(message): + print(f"anim-keyframe-insert-menu-desktop-failed: {message}"); bpy.ops.wm.quit_blender(); return None + def execute(): + window = bpy.context.window + if window is None: return 0.25 + area = next((candidate for candidate in window.screen.areas if candidate.type == "VIEW_3D"), None) + if area is None: return finish_failure("no VIEW_3D area available for keyframe_insert_menu") + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + try: + with bpy.context.temp_override(window=window, screen=window.screen, area=area, region=region): + poll = bool(bpy.ops.anim.keyframe_insert_menu.poll()) + result = bpy.ops.anim.keyframe_insert_menu(always_prompt=False) if poll else set() + except Exception as error: + return finish_failure(f"keyframe_insert_menu failed: {error}") + if not poll or result != {"FINISHED"}: + return finish_failure(f"unexpected ANIM_OT_keyframe_insert_menu result: poll={poll} result={result}") + after = state_report() + if len(after["action"]["channels"]) != 1 or after["action"]["channels"][0]["frames"] != [1.0, 3.0, 5.0]: + return finish_failure(f"keyframe_insert_menu produced unexpected action: {after}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keyframe-insert-menu-", suffix=".blend"); os.close(descriptor); temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: return finish_failure("anim.keyframe_insert_menu save/reopen drift") + shutil.copyfile(temporary_path, fixture); write_report(fixture, output, before, reopened) + print("anim-keyframe-insert-menu-desktop-ok poll=true status=FINISHED mainMutation=keyframe_inserted saveReopen=exact"); bpy.ops.wm.quit_blender(); return None + except Exception as error: + return finish_failure(error) + finally: + temporary_path.unlink(missing_ok=True) + def start(): + if state["started"]: return 0.25 + state["started"] = True; bpy.app.timers.register(execute, first_interval=1.0); return None + bpy.app.timers.register(start, first_interval=1.5) + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: raise SystemExit("usage: blender -b --python check-action-keyframe-insert-menu-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False); before = state_report() + expected = {"name": ACTION_NAME, "channels": [{"path": DATA_PATH, "index": 0, "frames": [1.0, 5.0], "values": [1.0, 5.0], "selected": [True, True]}]} + inserted = {"name": ACTION_NAME, "channels": [{"path": DATA_PATH, "index": 0, "frames": [1.0, 3.0, 5.0], "values": [1.0, 3.0, 5.0], "selected": [False, True, False]}]} + if before["selected"] is not True or before["active"] is not True or before["value"] != 3.0: raise RuntimeError(f"unexpected keyframe_insert_menu source state: {before}") + if before["activeKeyingSet"] != KEYING_SET_NAME: raise RuntimeError(f"unexpected keyframe_insert_menu keying set: {before}") + if before["action"] != expected: + if before["action"] != inserted: raise RuntimeError(f"unexpected keyframe_insert_menu source action: {before}") + preserved_insert(fixture, output, before); return + if bpy.app.background: raise RuntimeError("keyframe_insert_menu requires a foreground VIEW_3D context") + foreground_insert(fixture, output, before) + + +if __name__ == "__main__": + try: main() + except Exception as error: + print(f"anim-keyframe-insert-menu-desktop-failed: {error}"); raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-type-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-type-desktop.py new file mode 100644 index 00000000..e798bec3 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-type-desktop.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapKeyframeTypeObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapKeyframeTypeObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + "keyframeType": [keyframe.type for keyframe in curve.keyframe_points], + "selected": [bool(keyframe.select_control_point) for keyframe in curve.keyframe_points], + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-keyframe-type-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + expected = ["KEYFRAME", "BREAKDOWN", "KEYFRAME"] + if before["name"] != "WebGapKeyframeTypeObjectAction" or any(channel["keyframeType"] != expected for channel in before["channels"]): + raise RuntimeError(f"unexpected action.keyframe_type result: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-action-keyframe-type-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"action.keyframe_type save/reopen drift: {before} != {after}") + report = {"schemaVersion": 1, "task": "M16-GAP-00126", "operation": "ACTION_KEYFRAME_TYPE_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "keyframeType": "BREAKDOWN", "action": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("action-keyframe-type-desktop-ok channels=3 frame=3 type=BREAKDOWN saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keying-set-active-set-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keying-set-active-set-desktop.py new file mode 100644 index 00000000..30bd2030 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keying-set-active-set-desktop.py @@ -0,0 +1,109 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +OBJECT_NAME = "WebGapAnimKeyingSetActiveObject" +ACTION_NAME = "WebGapAnimKeyingSetActiveAction" +KEYING_SET_A = "WebGapAnimKeyingSetActiveA" +KEYING_SET_B = "WebGapAnimKeyingSetActiveB" +DATA_PATH = '["active_target"]' + + +def action_report(obj): + action = obj.animation_data.action if obj and obj.animation_data else None + if action is None: + return {"name": None, "channels": []} + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({"path": curve.data_path, "index": curve.array_index, "frames": [round(float(key.co.x), 6) for key in curve.keyframe_points], "values": [round(float(key.co.y), 6) for key in curve.keyframe_points], "selected": [bool(key.select_control_point) for key in curve.keyframe_points]}) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def state_report(): + scene = bpy.context.scene + obj = bpy.data.objects.get(OBJECT_NAME) + if obj is None: + raise RuntimeError("keying_set_active_set fixture object is missing") + active = scene.keying_sets.active + return {"selected": bool(obj.select_get()), "active": bpy.context.view_layer.objects.active == obj, "value": round(float(obj["active_target"]), 6), "activeKeyingSet": active.bl_idname if active else None, "action": action_report(obj)} + + +def write_report(fixture, output, before, after, *, evidence_status=None): + report = {"schemaVersion": 1, "task": "M16-GAP-00190", "operation": "ANIM_KEYING_SET_ACTIVE_SET_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "before": before, "after": after, "poll": True, "operatorStatus": "FINISHED", "mainMutation": "ACTIVE_KEYING_SET_CHANGED", "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + if evidence_status: report["evidenceStatus"] = evidence_status + output.parent.mkdir(parents=True, exist_ok=True); output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + + +def preserved_set(fixture, output, current): + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keying-set-active-preserved-", suffix=".blend"); os.close(descriptor); temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True); bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != current: raise RuntimeError("anim.keying_set_active_set preserved fixture save/reopen drift") + if output.exists() and json.loads(output.read_text(encoding="utf-8")).get("task") != "M16-GAP-00190": raise RuntimeError("existing keying_set_active_set evidence belongs to another task") + if not output.exists(): write_report(fixture, output, current, reopened, evidence_status="PRESERVED") + print("anim-keying-set-active-set-desktop-ok preserved=exact status=FINISHED mainMutation=active_keying_set_changed saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True); bpy.ops.wm.quit_blender() + + +def foreground_set(fixture, output, before): + state = {"started": False} + def finish_failure(message): + print(f"anim-keying-set-active-set-desktop-failed: {message}"); bpy.ops.wm.quit_blender(); return None + def execute(): + window = bpy.context.window + if window is None: return 0.25 + area = next((candidate for candidate in window.screen.areas if candidate.type == "VIEW_3D"), None) + if area is None: return finish_failure("no VIEW_3D area available for keying_set_active_set") + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + try: + with bpy.context.temp_override(window=window, screen=window.screen, area=area, region=region): + poll = bool(bpy.ops.anim.keying_set_active_set.poll()); result = bpy.ops.anim.keying_set_active_set(type=KEYING_SET_B) if poll else set() + except Exception as error: + return finish_failure(f"keying_set_active_set failed: {error}") + if not poll or result != {"FINISHED"}: return finish_failure(f"unexpected ANIM_OT_keying_set_active_set result: poll={poll} result={result}") + after = state_report() + if after["activeKeyingSet"] != KEYING_SET_B: return finish_failure(f"keying_set_active_set selected unexpected set: {after}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keying-set-active-", suffix=".blend"); os.close(descriptor); temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True); bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False); reopened = state_report() + if reopened != after: return finish_failure("anim.keying_set_active_set save/reopen drift") + shutil.copyfile(temporary_path, fixture); write_report(fixture, output, before, reopened); print("anim-keying-set-active-set-desktop-ok poll=true status=FINISHED mainMutation=active_keying_set_changed saveReopen=exact"); bpy.ops.wm.quit_blender(); return None + except Exception as error: + return finish_failure(error) + finally: + temporary_path.unlink(missing_ok=True) + def start(): + if state["started"]: return 0.25 + state["started"] = True; bpy.app.timers.register(execute, first_interval=1.0); return None + bpy.app.timers.register(start, first_interval=1.5) + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: raise SystemExit("usage: blender -b --python check-action-keying-set-active-set-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments); bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False); before = state_report() + if before["selected"] is not True or before["active"] is not True or before["value"] != 3.0 or before["activeKeyingSet"] not in {KEYING_SET_A, KEYING_SET_B}: raise RuntimeError(f"unexpected keying_set_active_set source state: {before}") + if before["action"]["name"] != ACTION_NAME or len(before["action"]["channels"]) != 1 or before["action"]["channels"][0]["frames"] != [1.0, 3.0, 5.0]: raise RuntimeError(f"unexpected keying_set_active_set source action: {before}") + if before["activeKeyingSet"] == KEYING_SET_B: preserved_set(fixture, output, before); return + if bpy.app.background: raise RuntimeError("keying_set_active_set requires a foreground VIEW_3D context") + foreground_set(fixture, output, before) + + +if __name__ == "__main__": + try: main() + except Exception as error: + print(f"anim-keying-set-active-set-desktop-failed: {error}"); raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keying-set-add-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keying-set-add-desktop.py new file mode 100644 index 00000000..1a0daf46 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keying-set-add-desktop.py @@ -0,0 +1,97 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +OBJECT_NAME = "WebGapAnimKeyingSetAddObject" +ACTION_NAME = "WebGapAnimKeyingSetAddAction" +DATA_PATH = '["add_target"]' + + +def action_report(obj): + action = obj.animation_data.action if obj and obj.animation_data else None + if action is None: return {"name": None, "channels": []} + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({"path": curve.data_path, "index": curve.array_index, "frames": [round(float(key.co.x), 6) for key in curve.keyframe_points], "values": [round(float(key.co.y), 6) for key in curve.keyframe_points], "selected": [bool(key.select_control_point) for key in curve.keyframe_points]}) + channels.sort(key=lambda value: (value["path"], value["index"])); return {"name": action.name, "channels": channels} + + +def state_report(): + scene = bpy.context.scene; obj = bpy.data.objects.get(OBJECT_NAME) + if obj is None: raise RuntimeError("keying_set_add fixture object is missing") + active = scene.keying_sets.active + return {"selected": bool(obj.select_get()), "active": bpy.context.view_layer.objects.active == obj, "value": round(float(obj["add_target"]), 6), "keyingSetCount": len(scene.keying_sets), "activeKeyingSet": active.bl_idname if active else None, "action": action_report(obj)} + + +def write_report(fixture, output, before, after, *, evidence_status=None): + report = {"schemaVersion": 1, "task": "M16-GAP-00191", "operation": "ANIM_KEYING_SET_ADD_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "before": before, "after": after, "poll": True, "operatorStatus": "FINISHED", "mainMutation": "KEYING_SET_ADDED", "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + if evidence_status: report["evidenceStatus"] = evidence_status + output.parent.mkdir(parents=True, exist_ok=True); output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + + +def preserved_add(fixture, output, current): + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keying-set-add-preserved-", suffix=".blend"); os.close(descriptor); temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True); bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False); reopened = state_report() + if reopened != current: raise RuntimeError("anim.keying_set_add preserved fixture save/reopen drift") + if output.exists() and json.loads(output.read_text(encoding="utf-8")).get("task") != "M16-GAP-00191": raise RuntimeError("existing keying_set_add evidence belongs to another task") + if not output.exists(): write_report(fixture, output, current, reopened, evidence_status="PRESERVED") + print("anim-keying-set-add-desktop-ok preserved=exact status=FINISHED mainMutation=keying_set_added saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True); bpy.ops.wm.quit_blender() + + +def foreground_add(fixture, output, before): + state = {"started": False} + def finish_failure(message): print(f"anim-keying-set-add-desktop-failed: {message}"); bpy.ops.wm.quit_blender(); return None + def execute(): + window = bpy.context.window + if window is None: return 0.25 + area = next((candidate for candidate in window.screen.areas if candidate.type == "VIEW_3D"), None) + if area is None: return finish_failure("no VIEW_3D area available for keying_set_add") + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + try: + with bpy.context.temp_override(window=window, screen=window.screen, area=area, region=region): poll = bool(bpy.ops.anim.keying_set_add.poll()); result = bpy.ops.anim.keying_set_add() if poll else set() + except Exception as error: return finish_failure(f"keying_set_add failed: {error}") + if not poll or result != {"FINISHED"}: return finish_failure(f"unexpected ANIM_OT_keying_set_add result: poll={poll} result={result}") + after = state_report() + if after["keyingSetCount"] != 1 or after["activeKeyingSet"] is None: return finish_failure(f"keying_set_add produced unexpected state: {after}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keying-set-add-", suffix=".blend"); os.close(descriptor); temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True); bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False); reopened = state_report() + if reopened != after: return finish_failure("anim.keying_set_add save/reopen drift") + shutil.copyfile(temporary_path, fixture); write_report(fixture, output, before, reopened); print("anim-keying-set-add-desktop-ok poll=true status=FINISHED mainMutation=keying_set_added saveReopen=exact"); bpy.ops.wm.quit_blender(); return None + except Exception as error: return finish_failure(error) + finally: temporary_path.unlink(missing_ok=True) + def start(): + if state["started"]: return 0.25 + state["started"] = True; bpy.app.timers.register(execute, first_interval=1.0); return None + bpy.app.timers.register(start, first_interval=1.5) + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: raise SystemExit("usage: blender -b --python check-action-keying-set-add-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments); bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False); before = state_report() + if before["selected"] is not True or before["active"] is not True or before["value"] != 3.0: raise RuntimeError(f"unexpected keying_set_add source state: {before}") + if before["action"]["name"] != ACTION_NAME or len(before["action"]["channels"]) != 1 or before["action"]["channels"][0]["frames"] != [1.0, 3.0, 5.0]: raise RuntimeError(f"unexpected keying_set_add source action: {before}") + if before["keyingSetCount"] == 1: preserved_add(fixture, output, before); return + if before["keyingSetCount"] != 0: raise RuntimeError(f"unexpected keying_set_add source keying sets: {before}") + if bpy.app.background: raise RuntimeError("keying_set_add requires a foreground VIEW_3D context") + foreground_add(fixture, output, before) + + +if __name__ == "__main__": + try: main() + except Exception as error: print(f"anim-keying-set-add-desktop-failed: {error}"); raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keying-set-export-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keying-set-export-desktop.py new file mode 100644 index 00000000..c0835821 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keying-set-export-desktop.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +OBJECT_NAME = "WebGapAnimKeyingSetExportObject" +ACTION_NAME = "WebGapAnimKeyingSetExportAction" +KEYING_SET_NAME = "WebGapAnimKeyingSetExportSet" + + +def action_report(obj): + action = obj.animation_data.action if obj and obj.animation_data else None + if action is None: return {"name": None, "channels": []} + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({"path": curve.data_path, "index": curve.array_index, "frames": [round(float(key.co.x), 6) for key in curve.keyframe_points], "values": [round(float(key.co.y), 6) for key in curve.keyframe_points], "selected": [bool(key.select_control_point) for key in curve.keyframe_points]}) + channels.sort(key=lambda value: (value["path"], value["index"])); return {"name": action.name, "channels": channels} + + +def state_report(): + scene = bpy.context.scene; obj = bpy.data.objects.get(OBJECT_NAME) + if obj is None: raise RuntimeError("keying_set_export fixture object is missing") + active = scene.keying_sets.active + return {"selected": bool(obj.select_get()), "active": bpy.context.view_layer.objects.active == obj, "value": round(float(obj["export_target"]), 6), "activeKeyingSet": active.bl_idname if active else None, "action": action_report(obj)} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 3: raise SystemExit("usage: blender -b --python check-action-keying-set-export-desktop.py -- FIXTURE REPORT EXPORT") + fixture, output, export_path = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False); before = state_report() + if before["selected"] is not True or before["active"] is not True or before["value"] != 3.0 or before["activeKeyingSet"] != KEYING_SET_NAME: raise RuntimeError(f"unexpected keying_set_export source state: {before}") + if before["action"]["name"] != ACTION_NAME or before["action"]["channels"][0]["frames"] != [1.0, 3.0, 5.0]: raise RuntimeError(f"unexpected keying_set_export source action: {before}") + export_path.parent.mkdir(parents=True, exist_ok=True) + poll = bool(bpy.ops.anim.keying_set_export.poll()) + result = bpy.ops.anim.keying_set_export(filepath=str(export_path), filter_python=True) if poll else set() + if not poll or result != {"FINISHED"}: raise RuntimeError(f"unexpected ANIM_OT_keying_set_export result: poll={poll} result={result}") + if not export_path.exists() or export_path.stat().st_size == 0: raise RuntimeError("keying_set_export produced no script") + after = state_report() + if after != before: raise RuntimeError(f"keying_set_export mutated Main unexpectedly: {before} -> {after}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keying-set-export-", suffix=".blend"); os.close(descriptor); temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True); bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False); reopened = state_report() + if reopened != after: raise RuntimeError("anim.keying_set_export save/reopen drift") + finally: + temporary_path.unlink(missing_ok=True) + report = {"schemaVersion": 1, "task": "M16-GAP-00192", "operation": "ANIM_KEYING_SET_EXPORT_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "before": before, "after": after, "poll": poll, "operatorStatus": "FINISHED", "mainMutation": "NONE_EXPORT_ONLY", "saveReopen": "EXACT", "exportedScript": {"path": str(export_path), "sha256": hashlib.sha256(export_path.read_bytes()).hexdigest(), "bytes": export_path.stat().st_size}, "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True); output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-keying-set-export-desktop-ok poll=true status=FINISHED mainMutation=none_export_only saveReopen=exact export=written") + bpy.ops.wm.quit_blender() + + +if __name__ == "__main__": + try: main() + except Exception as error: print(f"anim-keying-set-export-desktop-failed: {error}"); raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keying-set-path-add-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keying-set-path-add-desktop.py new file mode 100644 index 00000000..fa4c8ce3 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keying-set-path-add-desktop.py @@ -0,0 +1,167 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +OBJECT_NAME = "WebGapAnimKeyingSetPathAddObject" +ACTION_NAME = "WebGapAnimKeyingSetPathAddAction" +KEYING_SET_NAME = "WebGapAnimKeyingSetPathAddSet" + + +def action_report(obj): + action = obj.animation_data.action if obj and obj.animation_data else None + if action is None: + return {"name": None, "channels": []} + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(key.co.x), 6) for key in curve.keyframe_points], + "values": [round(float(key.co.y), 6) for key in curve.keyframe_points], + "selected": [bool(key.select_control_point) for key in curve.keyframe_points], + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def path_report(path): + return { + "dataPath": path.data_path, + "arrayIndex": path.array_index, + "idType": path.id_type, + "group": path.group, + "groupMethod": path.group_method, + "useEntireArray": bool(path.use_entire_array), + } + + +def state_report(): + scene = bpy.context.scene + obj = bpy.data.objects.get(OBJECT_NAME) + if obj is None: + raise RuntimeError("keying_set_path_add fixture object is missing") + active = scene.keying_sets.active + if active is None: + raise RuntimeError("keying_set_path_add fixture active Keying Set is missing") + return { + "selected": bool(obj.select_get()), + "active": bpy.context.view_layer.objects.active == obj, + "value": round(float(obj["path_add_target"]), 6), + "keyingSetCount": len(scene.keying_sets), + "activeKeyingSet": active.bl_idname, + "activePathIndex": active.paths.active_index, + "pathCount": len(active.paths), + "paths": [path_report(path) for path in active.paths], + "action": action_report(obj), + } + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-keying-set-path-add-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + if before["selected"] is not True or before["active"] is not True or before["value"] != 3.0: + raise RuntimeError(f"unexpected keying_set_path_add source state: {before}") + if before["activeKeyingSet"] != KEYING_SET_NAME or before["keyingSetCount"] != 1 or before["pathCount"] not in {0, 1}: + raise RuntimeError(f"unexpected keying_set_path_add source Keying Set: {before}") + if before["action"]["name"] != ACTION_NAME or len(before["action"]["channels"]) != 1 or before["action"]["channels"][0]["frames"] != [1.0, 3.0, 5.0]: + raise RuntimeError(f"unexpected keying_set_path_add source action: {before}") + if before["pathCount"] == 1: + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keying-set-path-add-preserved-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != before: + raise RuntimeError("anim.keying_set_path_add preserved fixture save/reopen drift") + if not output.exists(): + report = { + "schemaVersion": 1, + "task": "M16-GAP-00193", + "operation": "ANIM_KEYING_SET_PATH_ADD_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "poll": True, + "operatorStatus": "FINISHED", + "mainMutation": "KEYING_SET_PATH_ADDED", + "saveReopen": "EXACT", + "evidenceStatus": "PRESERVED", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-keying-set-path-add-desktop-ok preserved=exact status=FINISHED mainMutation=keying_set_path_added saveReopen=exact") + bpy.ops.wm.quit_blender() + return + finally: + temporary_path.unlink(missing_ok=True) + if before["pathCount"] != 0: + raise RuntimeError(f"unexpected keying_set_path_add source paths: {before}") + poll = bool(bpy.ops.anim.keying_set_path_add.poll()) + result = bpy.ops.anim.keying_set_path_add() if poll else set() + if not poll or result != {"FINISHED"}: + raise RuntimeError(f"unexpected ANIM_OT_keying_set_path_add result: poll={poll} result={result}") + after = state_report() + if after["pathCount"] != 1 or after["activePathIndex"] != 0: + raise RuntimeError(f"keying_set_path_add produced unexpected state: {after}") + path = after["paths"][0] + if path["dataPath"] != "" or path["arrayIndex"] != 0 or path["idType"] != "OBJECT" or path["groupMethod"] != "KEYINGSET" or path["useEntireArray"] is not True: + raise RuntimeError(f"keying_set_path_add produced unexpected empty path: {path}") + if after["action"] != before["action"]: + raise RuntimeError(f"keying_set_path_add mutated Action unexpectedly: {before} -> {after}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keying-set-path-add-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError("anim.keying_set_path_add save/reopen drift") + shutil.copyfile(temporary_path, fixture) + finally: + temporary_path.unlink(missing_ok=True) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00193", + "operation": "ANIM_KEYING_SET_PATH_ADD_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": after, + "poll": poll, + "operatorStatus": "FINISHED", + "mainMutation": "KEYING_SET_PATH_ADDED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-keying-set-path-add-desktop-ok poll=true status=FINISHED mainMutation=keying_set_path_added saveReopen=exact") + bpy.ops.wm.quit_blender() + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-keying-set-path-add-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keying-set-path-remove-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keying-set-path-remove-desktop.py new file mode 100644 index 00000000..2c06873a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keying-set-path-remove-desktop.py @@ -0,0 +1,152 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +OBJECT_NAME = "WebGapAnimKeyingSetPathRemoveObject" +ACTION_NAME = "WebGapAnimKeyingSetPathRemoveAction" +KEYING_SET_NAME = "WebGapAnimKeyingSetPathRemoveSet" + + +def action_report(obj): + action = obj.animation_data.action if obj and obj.animation_data else None + if action is None: + return {"name": None, "channels": []} + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(key.co.x), 6) for key in curve.keyframe_points], + "values": [round(float(key.co.y), 6) for key in curve.keyframe_points], + "selected": [bool(key.select_control_point) for key in curve.keyframe_points], + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def path_report(path): + return { + "dataPath": path.data_path, + "arrayIndex": path.array_index, + "idType": path.id_type, + "group": path.group, + "groupMethod": path.group_method, + "useEntireArray": bool(path.use_entire_array), + } + + +def state_report(): + scene = bpy.context.scene + obj = bpy.data.objects.get(OBJECT_NAME) + if obj is None: + raise RuntimeError("keying_set_path_remove fixture object is missing") + active = scene.keying_sets.active + if active is None: + raise RuntimeError("keying_set_path_remove fixture active Keying Set is missing") + return { + "selected": bool(obj.select_get()), + "active": bpy.context.view_layer.objects.active == obj, + "value": round(float(obj["path_remove_target"]), 6), + "keyingSetCount": len(scene.keying_sets), + "activeKeyingSet": active.bl_idname, + "activePathIndex": active.paths.active_index, + "pathCount": len(active.paths), + "paths": [path_report(path) for path in active.paths], + "action": action_report(obj), + } + + +def write_report(fixture, output, before, after, evidence_status=None): + report = { + "schemaVersion": 1, + "task": "M16-GAP-00194", + "operation": "ANIM_KEYING_SET_PATH_REMOVE_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": after, + "poll": True, + "operatorStatus": "FINISHED", + "mainMutation": "KEYING_SET_PATH_REMOVED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + if evidence_status: + report["evidenceStatus"] = evidence_status + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-keying-set-path-remove-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + if before["selected"] is not True or before["active"] is not True or before["value"] != 3.0: + raise RuntimeError(f"unexpected keying_set_path_remove source state: {before}") + if before["activeKeyingSet"] != KEYING_SET_NAME or before["keyingSetCount"] != 1 or before["pathCount"] not in {0, 1}: + raise RuntimeError(f"unexpected keying_set_path_remove source Keying Set: {before}") + if before["action"]["name"] != ACTION_NAME or len(before["action"]["channels"]) != 1 or before["action"]["channels"][0]["frames"] != [1.0, 3.0, 5.0]: + raise RuntimeError(f"unexpected keying_set_path_remove source action: {before}") + if before["pathCount"] == 0: + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keying-set-path-remove-preserved-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != before: + raise RuntimeError("anim.keying_set_path_remove preserved fixture save/reopen drift") + if not output.exists(): + write_report(fixture, output, before, reopened, evidence_status="PRESERVED") + print("anim-keying-set-path-remove-desktop-ok preserved=exact status=FINISHED mainMutation=keying_set_path_removed saveReopen=exact") + bpy.ops.wm.quit_blender() + return + finally: + temporary_path.unlink(missing_ok=True) + poll = bool(bpy.ops.anim.keying_set_path_remove.poll()) + result = bpy.ops.anim.keying_set_path_remove() if poll else set() + if not poll or result != {"FINISHED"}: + raise RuntimeError(f"unexpected ANIM_OT_keying_set_path_remove result: poll={poll} result={result}") + after = state_report() + if after["pathCount"] != 0 or after["activePathIndex"] != 0: + raise RuntimeError(f"keying_set_path_remove produced unexpected state: {after}") + if after["action"] != before["action"]: + raise RuntimeError(f"keying_set_path_remove mutated Action unexpectedly: {before} -> {after}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keying-set-path-remove-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError("anim.keying_set_path_remove save/reopen drift") + shutil.copyfile(temporary_path, fixture) + finally: + temporary_path.unlink(missing_ok=True) + write_report(fixture, output, before, after) + print("anim-keying-set-path-remove-desktop-ok poll=true status=FINISHED mainMutation=keying_set_path_removed saveReopen=exact") + bpy.ops.wm.quit_blender() + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-keying-set-path-remove-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keying-set-remove-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keying-set-remove-desktop.py new file mode 100644 index 00000000..dd9e8949 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keying-set-remove-desktop.py @@ -0,0 +1,138 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +OBJECT_NAME = "WebGapAnimKeyingSetRemoveObject" +ACTION_NAME = "WebGapAnimKeyingSetRemoveAction" +KEYING_SET_NAME = "WebGapAnimKeyingSetRemoveSet" + + +def action_report(obj): + action = obj.animation_data.action if obj and obj.animation_data else None + if action is None: + return {"name": None, "channels": []} + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(key.co.x), 6) for key in curve.keyframe_points], + "values": [round(float(key.co.y), 6) for key in curve.keyframe_points], + "selected": [bool(key.select_control_point) for key in curve.keyframe_points], + }) + channels.sort(key=lambda value: (value["path"], value["index"])); return {"name": action.name, "channels": channels} + + +def state_report(): + scene = bpy.context.scene + obj = bpy.data.objects.get(OBJECT_NAME) + if obj is None: + raise RuntimeError("keying_set_remove fixture object is missing") + active = scene.keying_sets.active + return { + "selected": bool(obj.select_get()), + "active": bpy.context.view_layer.objects.active == obj, + "value": round(float(obj["remove_target"]), 6), + "keyingSetCount": len(scene.keying_sets), + "activeKeyingSet": active.bl_idname if active else None, + "pathCount": len(active.paths) if active else 0, + "action": action_report(obj), + } + + +def write_report(fixture, output, before, after, evidence_status=None): + report = { + "schemaVersion": 1, + "task": "M16-GAP-00195", + "operation": "ANIM_KEYING_SET_REMOVE_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": after, + "poll": True, + "operatorStatus": "FINISHED", + "mainMutation": "KEYING_SET_REMOVED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + if evidence_status: + report["evidenceStatus"] = evidence_status + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-keying-set-remove-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + if before["selected"] is not True or before["active"] is not True or before["value"] != 3.0: + raise RuntimeError(f"unexpected keying_set_remove source state: {before}") + if before["keyingSetCount"] not in {0, 1} or before["pathCount"] != 0: + raise RuntimeError(f"unexpected keying_set_remove source Keying Set: {before}") + if before["keyingSetCount"] == 1 and before["activeKeyingSet"] != KEYING_SET_NAME: + raise RuntimeError(f"unexpected keying_set_remove active set: {before}") + if before["action"]["name"] != ACTION_NAME or len(before["action"]["channels"]) != 1 or before["action"]["channels"][0]["frames"] != [1.0, 3.0, 5.0]: + raise RuntimeError(f"unexpected keying_set_remove source action: {before}") + if before["keyingSetCount"] == 0: + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keying-set-remove-preserved-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != before: + raise RuntimeError("anim.keying_set_remove preserved fixture save/reopen drift") + if not output.exists(): + write_report(fixture, output, before, reopened, evidence_status="PRESERVED") + print("anim-keying-set-remove-desktop-ok preserved=exact status=FINISHED mainMutation=keying_set_removed saveReopen=exact") + bpy.ops.wm.quit_blender() + return + finally: + temporary_path.unlink(missing_ok=True) + poll = bool(bpy.ops.anim.keying_set_remove.poll()) + result = bpy.ops.anim.keying_set_remove() if poll else set() + if not poll or result != {"FINISHED"}: + raise RuntimeError(f"unexpected ANIM_OT_keying_set_remove result: poll={poll} result={result}") + after = state_report() + if after["keyingSetCount"] != 0 or after["activeKeyingSet"] is not None or after["pathCount"] != 0: + raise RuntimeError(f"keying_set_remove produced unexpected state: {after}") + if after["action"] != before["action"]: + raise RuntimeError(f"keying_set_remove mutated Action unexpectedly: {before} -> {after}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keying-set-remove-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError("anim.keying_set_remove save/reopen drift") + shutil.copyfile(temporary_path, fixture) + finally: + temporary_path.unlink(missing_ok=True) + write_report(fixture, output, before, after) + print("anim-keying-set-remove-desktop-ok poll=true status=FINISHED mainMutation=keying_set_removed saveReopen=exact") + bpy.ops.wm.quit_blender() + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-keying-set-remove-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyingset-button-add-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyingset-button-add-desktop.py new file mode 100644 index 00000000..28fc87bc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyingset-button-add-desktop.py @@ -0,0 +1,193 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import subprocess +import sys +import tempfile + +import bpy + + +OBJECT_NAME = "WebGapAnimKeyingSetButtonAddObject" +ACTION_NAME = "WebGapAnimKeyingSetButtonAddAction" +KEYING_SET_NAME = "ButtonKeyingSet" + + +class KeyingSetButtonExperimentPanel(bpy.types.Panel): + bl_label = "Keying Set Button Experiment" + bl_idname = "WEBGAP_PT_keying_set_button_experiment" + bl_space_type = "PROPERTIES" + bl_region_type = "WINDOW" + bl_context = "object" + + def draw(self, context): + if context.object is not None: + self.layout.prop(context.object, '["button_target"]', text="button_target") + + +def action_report(obj): + action = obj.animation_data.action if obj and obj.animation_data else None + if action is None: + return {"name": None, "channels": []} + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({"path": curve.data_path, "index": curve.array_index, "frames": [round(float(key.co.x), 6) for key in curve.keyframe_points], "values": [round(float(key.co.y), 6) for key in curve.keyframe_points], "selected": [bool(key.select_control_point) for key in curve.keyframe_points]}) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def path_report(path): + return {"dataPath": path.data_path, "arrayIndex": path.array_index, "idType": path.id_type, "group": path.group, "groupMethod": path.group_method, "useEntireArray": bool(path.use_entire_array)} + + +def state_report(): + scene = bpy.context.scene + obj = bpy.data.objects.get(OBJECT_NAME) + if obj is None: + raise RuntimeError("keyingset_button_add fixture object is missing") + active = scene.keying_sets.active + paths = list(active.paths) if active else [] + return {"selected": bool(obj.select_get()), "active": bpy.context.view_layer.objects.active == obj, "value": round(float(obj["button_target"]), 6), "keyingSetCount": len(scene.keying_sets), "activeKeyingSet": active.bl_idname if active else None, "pathCount": len(paths), "paths": [path_report(path) for path in paths], "action": action_report(obj)} + + +def write_report(fixture, output, before, after, evidence_status=None): + report = {"schemaVersion": 1, "task": "M16-GAP-00196", "operation": "ANIM_KEYINGSET_BUTTON_ADD_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "before": before, "after": after, "poll": True, "operatorStatus": "FINISHED", "mainMutation": "KEYING_SET_PATH_ADDED", "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + if evidence_status: + report["evidenceStatus"] = evidence_status + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + + +def preserved_report(fixture, output, current): + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keyingset-button-add-preserved-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != current: + raise RuntimeError("anim.keyingset_button_add preserved fixture save/reopen drift") + if not output.exists(): + write_report(fixture, output, current, reopened, evidence_status="PRESERVED") + print("anim-keyingset-button-add-desktop-ok preserved=exact status=FINISHED mainMutation=keying_set_path_added saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +def foreground_button(fixture, output, before): + bpy.utils.register_class(KeyingSetButtonExperimentPanel) + state = {"started": False} + + def blender_window(): + windows = subprocess.check_output(["xdotool", "search", "--name", "Blender"], text=True).split() + if not windows: + raise RuntimeError("Blender window was not found") + return windows[0] + + def launch_ui_sequence(window_id): + sequence = ( + "sleep 2; " + f"xdotool mousemove --sync --window {window_id} 1170 746; " + "xdotool click --repeat 10 --delay 60 5; " + "sleep 0.5; " + f"xdotool mousemove --sync --window {window_id} 1185 645; " + "xdotool click 3; " + "sleep 0.5; " + f"xdotool mousemove --sync --window {window_id} 1120 585; " + "xdotool click 1; " + "xdotool key Return" + ) + subprocess.Popen(["sh", "-c", sequence], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + + def finish_failure(message): + print(f"anim-keyingset-button-add-desktop-failed: {message}") + bpy.ops.wm.quit_blender() + return None + + def poll_result(): + after = state_report() + if after["keyingSetCount"] == 0 or after["pathCount"] == 0: + return 0.25 + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keyingset-button-add-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + return finish_failure("anim.keyingset_button_add save/reopen drift") + shutil.copyfile(temporary_path, fixture) + write_report(fixture, output, before, reopened) + print("anim-keyingset-button-add-desktop-ok poll=true status=FINISHED mainMutation=keying_set_path_added saveReopen=exact") + bpy.ops.wm.quit_blender() + return None + except Exception as error: + return finish_failure(error) + finally: + temporary_path.unlink(missing_ok=True) + + def drive_button(): + if state["started"]: + return 0.25 + window = bpy.context.window + area = next((candidate for candidate in window.screen.areas if candidate.type == "PROPERTIES"), None) if window else None + if area is None: + return 0.25 + area.spaces.active.context = "OBJECT" + state["started"] = True + try: + bpy.ops.wm.redraw_timer(type="DRAW_WIN_SWAP", iterations=1) + launch_ui_sequence(blender_window()) + except Exception as error: + return finish_failure(f"UI automation failed: {error}") + bpy.app.timers.register(poll_result, first_interval=0.5) + return None + + def timeout(): + if state_report() == before: + return finish_failure("UI keyingset_button_add timed out without mutation") + return None + + bpy.app.timers.register(drive_button, first_interval=1.5) + bpy.app.timers.register(timeout, first_interval=30.0) + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender --factory-startup --python check-action-keyingset-button-add-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + if before["selected"] is not True or before["active"] is not True or before["value"] != 3.0: + raise RuntimeError(f"unexpected keyingset_button_add source state: {before}") + if before["keyingSetCount"] == 1: + if before["activeKeyingSet"] != KEYING_SET_NAME or before["pathCount"] != 1 or before["paths"][0]["dataPath"] != '["button_target"]': + raise RuntimeError(f"unexpected keyingset_button_add post state: {before}") + preserved_report(fixture, output, before) + bpy.ops.wm.quit_blender() + return + if before["keyingSetCount"] != 0 or before["pathCount"] != 0: + raise RuntimeError(f"unexpected keyingset_button_add source Keying Set state: {before}") + if before["action"]["name"] != ACTION_NAME or len(before["action"]["channels"]) != 1 or before["action"]["channels"][0]["frames"] != [1.0, 3.0, 5.0]: + raise RuntimeError(f"unexpected keyingset_button_add source action: {before}") + if bpy.app.background: + raise RuntimeError("keyingset_button_add requires a foreground PROPERTIES context") + output.unlink(missing_ok=True) + foreground_button(fixture, output, before) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-keyingset-button-add-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyingset-button-remove-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyingset-button-remove-desktop.py new file mode 100644 index 00000000..ce008d0a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyingset-button-remove-desktop.py @@ -0,0 +1,194 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import subprocess +import sys +import tempfile + +import bpy + + +OBJECT_NAME = "WebGapAnimKeyingSetButtonRemoveObject" +ACTION_NAME = "WebGapAnimKeyingSetButtonRemoveAction" +KEYING_SET_NAME = "ButtonKeyingSet" + + +class KeyingSetButtonRemoveExperimentPanel(bpy.types.Panel): + bl_label = "Keying Set Button Remove Experiment" + bl_idname = "WEBGAP_PT_keying_set_button_remove_experiment" + bl_space_type = "PROPERTIES" + bl_region_type = "WINDOW" + bl_context = "object" + + def draw(self, context): + if context.object is not None: + self.layout.prop(context.object, '["button_remove_target"]', text="button_remove_target") + + +def action_report(obj): + action = obj.animation_data.action if obj and obj.animation_data else None + if action is None: + return {"name": None, "channels": []} + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({"path": curve.data_path, "index": curve.array_index, "frames": [round(float(key.co.x), 6) for key in curve.keyframe_points], "values": [round(float(key.co.y), 6) for key in curve.keyframe_points], "selected": [bool(key.select_control_point) for key in curve.keyframe_points]}) + channels.sort(key=lambda value: (value["path"], value["index"])); return {"name": action.name, "channels": channels} + + +def path_report(path): + return {"dataPath": path.data_path, "arrayIndex": path.array_index, "idType": path.id_type, "group": path.group, "groupMethod": path.group_method, "useEntireArray": bool(path.use_entire_array)} + + +def state_report(): + scene = bpy.context.scene + obj = bpy.data.objects.get(OBJECT_NAME) + if obj is None: + raise RuntimeError("keyingset_button_remove fixture object is missing") + active = scene.keying_sets.active + paths = list(active.paths) if active else [] + return {"selected": bool(obj.select_get()), "active": bpy.context.view_layer.objects.active == obj, "value": round(float(obj["button_remove_target"]), 6), "keyingSetCount": len(scene.keying_sets), "activeKeyingSet": active.bl_idname if active else None, "pathCount": len(paths), "paths": [path_report(path) for path in paths], "action": action_report(obj)} + + +def write_report(fixture, output, before, after, evidence_status=None): + report = {"schemaVersion": 1, "task": "M16-GAP-00197", "operation": "ANIM_KEYINGSET_BUTTON_REMOVE_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "before": before, "after": after, "poll": True, "operatorStatus": "FINISHED", "mainMutation": "KEYING_SET_PATH_REMOVED", "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + if evidence_status: + report["evidenceStatus"] = evidence_status + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + + +def preserved_report(fixture, output, current): + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keyingset-button-remove-preserved-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != current: + raise RuntimeError("anim.keyingset_button_remove preserved fixture save/reopen drift") + if not output.exists(): + write_report(fixture, output, current, reopened, evidence_status="PRESERVED") + print("anim-keyingset-button-remove-desktop-ok preserved=exact status=FINISHED mainMutation=keying_set_path_removed saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +def foreground_button(fixture, output, before): + bpy.utils.register_class(KeyingSetButtonRemoveExperimentPanel) + state = {"started": False} + + def blender_window(): + windows = subprocess.check_output(["xdotool", "search", "--name", "Blender"], text=True).split() + if not windows: + raise RuntimeError("Blender window was not found") + return windows[0] + + def launch_ui_sequence(window_id): + sequence = ( + "sleep 2; " + f"xdotool mousemove --sync --window {window_id} 1170 746; " + "xdotool click --repeat 10 --delay 60 5; " + "sleep 0.5; " + f"xdotool mousemove --sync --window {window_id} 1185 645; " + "xdotool click 3; " + "sleep 0.5; " + f"xdotool mousemove --sync --window {window_id} 1120 607; " + "xdotool click 1" + ) + subprocess.Popen(["sh", "-c", sequence], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + + def finish_failure(message): + print(f"anim-keyingset-button-remove-desktop-failed: {message}") + bpy.ops.wm.quit_blender() + return None + + def poll_result(): + after = state_report() + if after["pathCount"] != 0: + return 0.25 + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-keyingset-button-remove-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + return finish_failure("anim.keyingset_button_remove save/reopen drift") + shutil.copyfile(temporary_path, fixture) + write_report(fixture, output, before, reopened) + print("anim-keyingset-button-remove-desktop-ok poll=true status=FINISHED mainMutation=keying_set_path_removed saveReopen=exact") + bpy.ops.wm.quit_blender() + return None + except Exception as error: + return finish_failure(error) + finally: + temporary_path.unlink(missing_ok=True) + + def drive_button(): + if state["started"]: + return 0.25 + window = bpy.context.window + area = next((candidate for candidate in window.screen.areas if candidate.type == "PROPERTIES"), None) if window else None + if area is None: + return 0.25 + area.spaces.active.context = "OBJECT" + state["started"] = True + try: + bpy.ops.wm.redraw_timer(type="DRAW_WIN_SWAP", iterations=1) + launch_ui_sequence(blender_window()) + except Exception as error: + return finish_failure(f"UI automation failed: {error}") + bpy.app.timers.register(poll_result, first_interval=0.5) + return None + + def timeout(): + if state_report() == before: + return finish_failure("UI keyingset_button_remove timed out without mutation") + return None + + bpy.app.timers.register(drive_button, first_interval=1.5) + bpy.app.timers.register(timeout, first_interval=30.0) + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender --factory-startup --python check-action-keyingset-button-remove-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + if before["selected"] is not True or before["active"] is not True or before["value"] != 3.0: + raise RuntimeError(f"unexpected keyingset_button_remove source state: {before}") + if before["keyingSetCount"] == 1: + if before["activeKeyingSet"] != KEYING_SET_NAME or before["pathCount"] not in {0, 1}: + raise RuntimeError(f"unexpected keyingset_button_remove source Keying Set: {before}") + if before["pathCount"] == 0: + preserved_report(fixture, output, before) + bpy.ops.wm.quit_blender() + return + elif before["keyingSetCount"] != 1: + raise RuntimeError(f"unexpected keyingset_button_remove source keying set count: {before}") + if before["pathCount"] != 1 or before["paths"][0]["dataPath"] != '["button_remove_target"]': + raise RuntimeError(f"unexpected keyingset_button_remove source path: {before}") + if before["action"]["name"] != ACTION_NAME or len(before["action"]["channels"]) != 1 or before["action"]["channels"][0]["frames"] != [1.0, 3.0, 5.0]: + raise RuntimeError(f"unexpected keyingset_button_remove source action: {before}") + if bpy.app.background: + raise RuntimeError("keyingset_button_remove requires a foreground PROPERTIES context") + output.unlink(missing_ok=True) + foreground_button(fixture, output, before) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-keyingset-button-remove-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-markers-make-local-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-markers-make-local-desktop.py new file mode 100644 index 00000000..6d66932b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-markers-make-local-desktop.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapMarkersMakeLocalObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapMarkersMakeLocalObject Action is missing") + action = obj.animation_data.action + return {"name": action.name, "markers": sorted(({"name": marker.name, "frame": marker.frame} for marker in action.pose_markers), key=lambda value: (value["frame"], value["name"]))} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-markers-make-local-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + if before != {"name": "WebGapMarkersMakeLocalObjectAction", "markers": [{"name": "LocalActionMarker", "frame": 3}]}: + raise RuntimeError(f"unexpected action.markers_make_local result: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-action-markers-local-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"action.markers_make_local save/reopen drift: {before} != {after}") + report = {"schemaVersion": 1, "task": "M16-GAP-00127", "operation": "ACTION_MARKERS_MAKE_LOCAL_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "marker": after["markers"][0], "action": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("action-markers-make-local-desktop-ok markers=1 frame=3 saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-merge-animation-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-merge-animation-desktop.py new file mode 100644 index 00000000..8a8d1536 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-merge-animation-desktop.py @@ -0,0 +1,142 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +ACTIVE_OBJECT = "WebGapAnimMergeActiveObject" +SOURCE_OBJECT = "WebGapAnimMergeSourceObject" +ACTIVE_ACTION = "WebGapAnimMergeActiveAction" +SOURCE_ACTION = "WebGapAnimMergeSourceAction" + + +def action_report(obj): + action = obj.animation_data.action if obj and obj.animation_data else None + if action is None: + return {"name": None, "channels": []} + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append( + { + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(key.co.x), 6) for key in curve.keyframe_points], + "values": [round(float(key.co.y), 6) for key in curve.keyframe_points], + "selected": [bool(key.select_control_point) for key in curve.keyframe_points], + } + ) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def state_report(): + active = bpy.data.objects.get(ACTIVE_OBJECT) + source = bpy.data.objects.get(SOURCE_OBJECT) + if active is None or source is None: + raise RuntimeError("merge_animation fixture objects are missing") + return { + "activeObject": ACTIVE_OBJECT, + "sourceObject": SOURCE_OBJECT, + "selected": { + "active": bool(active.select_get()), + "source": bool(source.select_get()), + }, + "active": bpy.context.view_layer.objects.active == active, + "activeObjectAction": action_report(active), + "sourceObjectAction": action_report(source), + } + + +def write_report(fixture, output, before, after, evidence_status=None): + report = { + "schemaVersion": 1, + "task": "M16-GAP-00198", + "operation": "ANIM_MERGE_ANIMATION_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": after, + "poll": True, + "operatorStatus": "FINISHED", + "mainMutation": "ANIMATION_MERGED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + if evidence_status: + report["evidenceStatus"] = evidence_status + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + + +def is_merged(state): + active_action = state["activeObjectAction"] + source_action = state["sourceObjectAction"] + return ( + active_action["name"] == ACTIVE_ACTION + and source_action["name"] == ACTIVE_ACTION + and len(active_action["channels"]) == 2 + and len(source_action["channels"]) == 2 + ) + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --factory-startup --python check-action-merge-animation-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + if is_merged(before): + if not output.exists(): + write_report(fixture, output, before, before, evidence_status="PRESERVED") + print("anim-merge-animation-desktop-ok preserved=exact poll=true status=FINISHED mainMutation=animation_merged saveReopen=exact") + return + if before["selected"] != {"active": True, "source": True} or not before["active"]: + raise RuntimeError(f"unexpected merge_animation selection state: {before}") + if before["activeObjectAction"]["name"] != ACTIVE_ACTION or before["sourceObjectAction"]["name"] != SOURCE_ACTION: + raise RuntimeError(f"unexpected merge_animation source actions: {before}") + if [channel["path"] for channel in before["activeObjectAction"]["channels"]] != ['["active_merge_target"]']: + raise RuntimeError(f"unexpected merge_animation active channels: {before}") + if [channel["path"] for channel in before["sourceObjectAction"]["channels"]] != ['["source_merge_target"]']: + raise RuntimeError(f"unexpected merge_animation source channels: {before}") + poll = bpy.ops.anim.merge_animation.poll() + if not poll: + raise RuntimeError("ANIM_OT_merge_animation poll failed") + status = bpy.ops.anim.merge_animation() + if status != {"FINISHED"}: + raise RuntimeError(f"ANIM_OT_merge_animation returned {status}") + after = state_report() + if not is_merged(after): + raise RuntimeError(f"merge_animation did not merge selected actions: {after}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-merge-animation-", suffix=".blend") + os.close(descriptor) + pathlib.Path(temporary).unlink(missing_ok=True) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError("anim.merge_animation save/reopen drift") + shutil.copyfile(temporary_path, fixture) + write_report(fixture, output, before, reopened) + print("anim-merge-animation-desktop-ok poll=true status=FINISHED mainMutation=animation_merged saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-merge-animation-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-mirror-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-mirror-desktop.py new file mode 100644 index 00000000..9c57829d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-mirror-desktop.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapMirrorObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapMirrorObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + "values": [round(float(keyframe.co.y), 6) for keyframe in curve.keyframe_points], + "selected": [bool(keyframe.select_control_point) for keyframe in curve.keyframe_points], + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-mirror-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + expected = {0: [-1.0, -2.0, -4.0], 1: [-2.0, -4.0, -8.0], 2: [-3.0, -6.0, -12.0]} + if before["name"] != "WebGapMirrorObjectAction" or any(channel["values"] != expected[channel["index"]] for channel in before["channels"]): + raise RuntimeError(f"unexpected action.mirror result: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-action-mirror-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"action.mirror save/reopen drift: {before} != {after}") + report = {"schemaVersion": 1, "task": "M16-GAP-00128", "operation": "ACTION_MIRROR_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "mirrorType": "XAXIS", "action": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("action-mirror-desktop-ok channels=3 type=XAXIS saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-new-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-new-desktop.py new file mode 100644 index 00000000..afe48a6b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-new-desktop.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapActionNewObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapActionNewObject new Action is missing") + action = obj.animation_data.action + return {"name": action.name, "channels": sum(1 for layer in action.layers for strip in layer.strips for bag in strip.channelbags for _ in bag.fcurves)} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-new-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + if before["name"] == "WebGapActionNewObjectAction" or before["channels"] != 3: + raise RuntimeError(f"unexpected action.new result: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-action-new-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"action.new save/reopen drift: {before} != {after}") + report = {"schemaVersion": 1, "task": "M16-GAP-00129", "operation": "ACTION_NEW_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "action": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"action-new-desktop-ok name={after['name']} channels={after['channels']} saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-paste-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-paste-desktop.py new file mode 100644 index 00000000..54971873 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-paste-desktop.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapPasteObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapPasteObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({"path": curve.data_path, "index": curve.array_index, "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], "values": [round(float(keyframe.co.y), 6) for keyframe in curve.keyframe_points]}) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-paste-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + if before["name"] != "WebGapPasteObjectAction" or any(channel["frames"] != [1.0, 3.0, 5.0, 7.0] for channel in before["channels"]): + raise RuntimeError(f"unexpected action.paste result: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-action-paste-reopen-", suffix=".blend"); os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True); bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False); after = action_report() + finally: pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: raise RuntimeError(f"action.paste save/reopen drift: {before} != {after}") + report = {"schemaVersion": 1, "task": "M16-GAP-00130", "operation": "ACTION_PASTE_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "pastedFrame": 7, "action": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True); output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8"); print("action-paste-desktop-ok channels=3 pastedFrame=7 saveReopen=exact") + + +if __name__ == "__main__": main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-paste-driver-button-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-paste-driver-button-desktop.py new file mode 100644 index 00000000..d70107f5 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-paste-driver-button-desktop.py @@ -0,0 +1,247 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import subprocess +import sys +import tempfile + +import bpy + + +class DriverButtonPastePanel(bpy.types.Panel): + bl_label = "Driver Button Paste" + bl_idname = "WEBGAP_PT_driver_button_paste" + bl_space_type = "PROPERTIES" + bl_region_type = "WINDOW" + bl_context = "object" + bl_order = -1000 + + def draw(self, context): + obj = context.object + if obj is None: + return + self.layout.label(text="Copy source") + self.layout.prop(obj, '["source_target"]', text="source_target") + self.layout.label(text="Paste target") + self.layout.prop(obj, '["paste_target"]', text="paste_target") + + +def driver_report(obj): + if obj is None: + raise RuntimeError("paste-driver fixture object is missing") + drivers = [] + if obj.animation_data is not None: + for curve in obj.animation_data.drivers: + driver = curve.driver + drivers.append( + { + "path": curve.data_path, + "index": curve.array_index, + "expression": driver.expression if driver else "", + "type": driver.type if driver else "", + "variableCount": len(driver.variables) if driver else 0, + } + ) + drivers.sort(key=lambda value: (value["path"], value["index"])) + return drivers + + +def state_report(obj): + if obj is None: + raise RuntimeError("paste-driver fixture object is missing") + return { + "source": { + "value": round(float(obj["source_target"]), 6), + "drivers": [driver for driver in driver_report(obj) if driver["path"] == '["source_target"]'], + }, + "target": { + "value": round(float(obj["paste_target"]), 6), + "drivers": [driver for driver in driver_report(obj) if driver["path"] == '["paste_target"]'], + }, + } + + +def preserved_report(fixture, output, current): + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-paste-driver-button-preserved-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report(bpy.data.objects.get("WebGapAnimPasteDriverButtonObject")) + if reopened != current: + raise RuntimeError("anim.paste_driver_button preserved fixture save/reopen drift") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00199", + "operation": "ANIM_PASTE_DRIVER_BUTTON_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": current, + "after": reopened, + "poll": True, + "operatorStatus": "FINISHED", + "mainMutation": "DRIVER_PASTED", + "evidenceStatus": "PRESERVED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-paste-driver-button-desktop-ok preserved=exact status=FINISHED mainMutation=driver_pasted saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +def foreground_driver_button(fixture, output, before): + bpy.utils.register_class(DriverButtonPastePanel) + state = {"started": False} + + def blender_window(): + windows = subprocess.check_output(["xdotool", "search", "--name", "Blender"], text=True).split() + if not windows: + raise RuntimeError("Blender window was not found") + return windows[0] + + def launch_ui_sequence(window_id): + # The panel is pinned at the top of the Object properties. First copy + # the driven source, then paste it into the undriven target. + if os.environ.get("PASTE_DRIVER_DEBUG"): + sequence = f"sleep 2; xdotool mousemove --sync --window {window_id} 1170 746; xdotool click --repeat 10 --delay 60 5; sleep 1; xdotool mousemove --sync --window {window_id} 1180 591; xdotool click 3; sleep 0.5; xdotool mousemove --sync --window {window_id} 1060 494; xdotool click 1; sleep 0.75; xdotool mousemove --sync --window {window_id} 1180 645; xdotool click 3; sleep 1; import -window {window_id} /tmp/m16-paste-driver-button.png; sleep 20" + subprocess.Popen(["sh", "-c", sequence], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + return + sequence = ( + "sleep 2; " + f"xdotool mousemove --sync --window {window_id} 1170 746; " + "xdotool click --repeat 10 --delay 60 5; sleep 0.5; " + f"xdotool mousemove --sync --window {window_id} 1180 591; " + "xdotool click 3; sleep 0.5; " + f"xdotool mousemove --sync --window {window_id} 1060 494; " + "xdotool click 1; sleep 0.75; " + f"xdotool mousemove --sync --window {window_id} 1180 645; " + "xdotool click 3; sleep 0.5; " + f"xdotool mousemove --sync --window {window_id} 1080 537; " + "xdotool click 1; sleep 0.75; " + f"xdotool mousemove --sync --window {window_id} 1170 620; " + "xdotool click 3; sleep 0.5; " + f"xdotool mousemove --sync --window {window_id} 1080 537; " + "xdotool click 1" + ) + subprocess.Popen(["sh", "-c", sequence], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + + def finish_failure(message): + print(f"anim-paste-driver-button-desktop-failed: {message}") + bpy.ops.wm.quit_blender() + return None + + def poll_result(): + obj = bpy.data.objects.get("WebGapAnimPasteDriverButtonObject") + after = state_report(obj) + if not after["target"]["drivers"]: + return 0.25 + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-paste-driver-button-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report(bpy.data.objects.get("WebGapAnimPasteDriverButtonObject")) + if reopened != after: + return finish_failure("anim.paste_driver_button save/reopen drift") + bpy.ops.wm.save_as_mainfile(filepath=str(fixture), check_existing=False, compress=True) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00199", + "operation": "ANIM_PASTE_DRIVER_BUTTON_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "poll": True, + "operatorStatus": "FINISHED", + "mainMutation": "DRIVER_PASTED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-paste-driver-button-desktop-ok poll=true status=FINISHED mainMutation=driver_pasted saveReopen=exact") + bpy.ops.wm.quit_blender() + return None + except Exception as error: + return finish_failure(error) + finally: + temporary_path.unlink(missing_ok=True) + + def start(): + if state["started"]: + return 0.25 + window = bpy.context.window + if window is None: + return 0.25 + area = next((candidate for candidate in window.screen.areas if candidate.type == "PROPERTIES"), None) + if area is None: + return 0.25 + area.spaces.active.context = "OBJECT" + state["started"] = True + try: + bpy.ops.wm.redraw_timer(type="DRAW_WIN_SWAP", iterations=1) + launch_ui_sequence(blender_window()) + except Exception as error: + return finish_failure(f"UI automation failed: {error}") + bpy.app.timers.register(poll_result, first_interval=0.5) + return None + + def timeout(): + current = state_report(bpy.data.objects.get("WebGapAnimPasteDriverButtonObject")) + if current == before or not current["target"]["drivers"]: + return finish_failure("UI paste_driver_button timed out without mutation") + return None + + bpy.app.timers.register(start, first_interval=1.5) + bpy.app.timers.register(timeout, first_interval=30.0) + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-paste-driver-button-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + output.unlink(missing_ok=True) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + obj = bpy.data.objects.get("WebGapAnimPasteDriverButtonObject") + before = state_report(obj) + expected_source = [{ + "path": '["source_target"]', + "index": 0, + "expression": "frame * 3.0 + 2.0", + "type": "SCRIPTED", + "variableCount": 0, + }] + target_value = 5.0 if before["target"]["drivers"] else 7.5 + if before["source"]["value"] != 5.0 or before["source"]["drivers"] != expected_source or before["target"]["value"] != target_value or before["target"]["drivers"] not in ([], [{ + "path": '["paste_target"]', + "index": 0, + "expression": "frame * 3.0 + 2.0", + "type": "SCRIPTED", + "variableCount": 0, + }]): + raise RuntimeError(f"unexpected paste_driver_button source state: {before}") + if before["target"]["drivers"]: + preserved_report(fixture, output, before) + bpy.ops.wm.quit_blender() + return + if not bpy.app.background: + foreground_driver_button(fixture, output, before) + return + raise RuntimeError("paste_driver_button requires a foreground Blender UI") + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-paste-driver-button-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-previewrange-clear-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-previewrange-clear-desktop.py new file mode 100644 index 00000000..8ae71824 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-previewrange-clear-desktop.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def preview_state(scene): + return { + "use": bool(scene.use_preview_range), + "start": int(scene.frame_preview_start), + "end": int(scene.frame_preview_end), + } + + +def clear_preview_range(): + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR") + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + poll = bool(bpy.ops.anim.previewrange_clear.poll()) + if not poll: + raise RuntimeError("ANIM_OT_previewrange_clear poll failed in animation editor context") + result = bpy.ops.anim.previewrange_clear() + if "FINISHED" not in result: + raise RuntimeError(f"ANIM_OT_previewrange_clear returned {result}") + return poll, result + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-previewrange-clear-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + output.unlink(missing_ok=True) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + scene = bpy.context.scene + before = preview_state(scene) + if before not in ({"use": True, "start": 2, "end": 6}, {"use": False, "start": 0, "end": 0}): + raise RuntimeError(f"unexpected anim.previewrange_clear source state: {before}") + evidence_status = "PRESERVED" if before["use"] is False else None + poll, result = clear_preview_range() + after = preview_state(scene) + expected_after = {"use": False, "start": 0, "end": 0} + if after != expected_after: + raise RuntimeError(f"anim.previewrange_clear did not clear the preview range: {after}") + + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-previewrange-clear-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = preview_state(bpy.context.scene) + if reopened != expected_after: + raise RuntimeError(f"anim.previewrange_clear save/reopen drift: {after} != {reopened}") + if before["use"]: + bpy.ops.wm.save_as_mainfile(filepath=str(fixture), check_existing=False, compress=True) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00200", + "operation": "ANIM_PREVIEWRANGE_CLEAR_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "poll": poll, + "operatorStatus": "FINISHED" if "FINISHED" in result else sorted(result)[0], + "mainMutation": "PREVIEW_RANGE_CLEARED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + if evidence_status: + report["evidenceStatus"] = evidence_status + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-previewrange-clear-desktop-ok poll=true status=FINISHED mainMutation=preview_range_cleared saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-previewrange-clear-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-previewrange-set-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-previewrange-set-desktop.py new file mode 100644 index 00000000..e1c59d84 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-previewrange-set-desktop.py @@ -0,0 +1,86 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def preview_state(scene): + return { + "use": bool(scene.use_preview_range), + "start": int(scene.frame_preview_start), + "end": int(scene.frame_preview_end), + } + + +def set_preview_range(): + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR") + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + poll = bool(bpy.ops.anim.previewrange_set.poll()) + if not poll: + raise RuntimeError("ANIM_OT_previewrange_set poll failed in animation editor context") + result = bpy.ops.anim.previewrange_set(xmin=62, xmax=88, ymin=0, ymax=47) + if "FINISHED" not in result: + raise RuntimeError(f"ANIM_OT_previewrange_set returned {result}") + return poll, result + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-previewrange-set-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + output.unlink(missing_ok=True) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + scene = bpy.context.scene + before = preview_state(scene) + if before != {"use": True, "start": 2, "end": 6}: + raise RuntimeError(f"unexpected anim.previewrange_set source state: {before}") + poll, result = set_preview_range() + after = preview_state(scene) + if after != before: + raise RuntimeError(f"anim.previewrange_set changed the expected range: {before} != {after}") + + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-previewrange-set-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = preview_state(bpy.context.scene) + if reopened != after: + raise RuntimeError(f"anim.previewrange_set save/reopen drift: {after} != {reopened}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00201", + "operation": "ANIM_PREVIEWRANGE_SET_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "poll": poll, + "operatorStatus": "FINISHED" if "FINISHED" in result else sorted(result)[0], + "mainMutation": "PREVIEW_RANGE_SET", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-previewrange-set-desktop-ok poll=true status=FINISHED mainMutation=preview_range_set saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-previewrange-set-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-push-down-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-push-down-desktop.py new file mode 100644 index 00000000..7cd45b11 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-push-down-desktop.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def nla_report(): + obj = bpy.data.objects.get("WebGapPushDownObject") + if obj is None or obj.animation_data is None: + raise RuntimeError("WebGapPushDownObject animation data is missing") + tracks = [] + for track in obj.animation_data.nla_tracks: + tracks.append({"name": track.name, "strips": [{"name": strip.name, "action": strip.action.name if strip.action else None, "frameStart": round(float(strip.frame_start), 6), "frameEnd": round(float(strip.frame_end), 6)} for strip in track.strips]}) + return {"activeAction": obj.animation_data.action.name if obj.animation_data.action else None, "tracks": tracks} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-push-down-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = nla_report() + if before["activeAction"] is not None or len(before["tracks"]) != 1 or len(before["tracks"][0]["strips"]) != 1: + raise RuntimeError(f"unexpected action.push_down result: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-action-push-down-reopen-", suffix=".blend"); os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True); bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False); after = nla_report() + finally: pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: raise RuntimeError(f"action.push_down save/reopen drift: {before} != {after}") + report = {"schemaVersion": 1, "task": "M16-GAP-00132", "operation": "ACTION_PUSH_DOWN_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "nla": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True); output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8"); print("action-push-down-desktop-ok tracks=1 strips=1 activeAction=none saveReopen=exact") + + +if __name__ == "__main__": main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-replace-action-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-replace-action-desktop.py new file mode 100644 index 00000000..1c4e8eb8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-replace-action-desktop.py @@ -0,0 +1,120 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +OBJECTS = ("WebGapAnimReplaceOldA", "WebGapAnimReplaceOldB", "WebGapAnimReplaceNewUser") +OLD_ACTION = "WebGapAnimReplaceOldAction" +NEW_ACTION = "WebGapAnimReplaceNewAction" + + +def action_report(obj): + action = obj.animation_data.action if obj and obj.animation_data else None + if action is None: + return {"name": None, "channels": []} + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append( + { + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(key.co.x), 6) for key in curve.keyframe_points], + "values": [round(float(key.co.y), 6) for key in curve.keyframe_points], + } + ) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def state_report(): + objects = {name: bpy.data.objects.get(name) for name in OBJECTS} + if any(obj is None for obj in objects.values()): + raise RuntimeError("replace_action fixture objects are missing") + return { + "activeObject": bpy.context.view_layer.objects.active.name if bpy.context.view_layer.objects.active else None, + "objects": {name: action_report(obj) for name, obj in objects.items()}, + "actions": {name: int(bpy.data.actions[name].users) for name in (OLD_ACTION, NEW_ACTION)}, + } + + +def is_replaced(state): + return all(value["name"] == NEW_ACTION for value in state["objects"].values()) + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --factory-startup --python check-action-replace-action-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + preserved = is_replaced(before) + if not preserved: + if before["activeObject"] != "WebGapAnimReplaceOldA": + raise RuntimeError(f"replace_action active object is wrong: {before}") + if before["objects"]["WebGapAnimReplaceOldA"]["name"] != OLD_ACTION or before["objects"]["WebGapAnimReplaceOldB"]["name"] != OLD_ACTION: + raise RuntimeError(f"replace_action source actions are wrong: {before}") + old_action = bpy.data.actions.get(OLD_ACTION) + new_action = bpy.data.actions.get(NEW_ACTION) + if old_action is None or new_action is None: + raise RuntimeError("replace_action actions are missing") + poll = bool(bpy.ops.anim.replace_action.poll()) + if not poll: + raise RuntimeError("ANIM_OT_replace_action poll failed") + result = bpy.ops.anim.replace_action(old_session_uid=old_action.session_uid, new_session_uid=new_action.session_uid) + if result != {"FINISHED"}: + raise RuntimeError(f"ANIM_OT_replace_action returned {result}") + after = state_report() + if not is_replaced(after): + raise RuntimeError(f"replace_action did not replace all users: {after}") + + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-replace-action-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError(f"anim.replace_action save/reopen drift: {after} != {reopened}") + if not preserved: + bpy.ops.wm.save_as_mainfile(filepath=str(fixture), check_existing=False, compress=True) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00202", + "operation": "ANIM_REPLACE_ACTION_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "poll": poll, + "operatorStatus": "FINISHED", + "mainMutation": "ACTIONS_REPLACED" if not preserved else "NONE_ALREADY_REPLACED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + if preserved: + report["evidenceStatus"] = "PRESERVED" + if not preserved or not output.exists(): + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-replace-action-desktop-ok poll=true status=FINISHED mainMutation=actions_replaced saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-replace-action-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-replace-action-new-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-replace-action-new-desktop.py new file mode 100644 index 00000000..1e565f4f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-replace-action-new-desktop.py @@ -0,0 +1,125 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +OBJECTS = ("WebGapAnimReplaceNewOldA", "WebGapAnimReplaceNewOldB") +OLD_ACTION = "WebGapAnimReplaceNewOldAction" + + +def action_report(obj): + action = obj.animation_data.action if obj and obj.animation_data else None + if action is None: + return {"name": None, "channels": []} + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append( + { + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(key.co.x), 6) for key in curve.keyframe_points], + "values": [round(float(key.co.y), 6) for key in curve.keyframe_points], + } + ) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def state_report(): + objects = {name: bpy.data.objects.get(name) for name in OBJECTS} + if any(obj is None for obj in objects.values()): + raise RuntimeError("replace_action_new fixture objects are missing") + return { + "activeObject": bpy.context.view_layer.objects.active.name if bpy.context.view_layer.objects.active else None, + "objects": {name: action_report(obj) for name, obj in objects.items()}, + "actions": {action.name: int(action.users) for action in bpy.data.actions}, + } + + +def is_replaced(state): + names = [value["name"] for value in state["objects"].values()] + return all(name and name != OLD_ACTION for name in names) and len(set(names)) == 1 + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --factory-startup --python check-action-replace-action-new-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + preserved = is_replaced(before) + if not preserved: + if before["activeObject"] != OBJECTS[0]: + raise RuntimeError(f"replace_action_new active object is wrong: {before}") + if any(value["name"] != OLD_ACTION for value in before["objects"].values()): + raise RuntimeError(f"replace_action_new source actions are wrong: {before}") + old_action = bpy.data.actions.get(OLD_ACTION) + if old_action is None: + raise RuntimeError("replace_action_new old action is missing") + if preserved: + poll = True + result = {"FINISHED"} + else: + poll = bool(bpy.ops.anim.replace_action_new.poll()) + if not poll: + raise RuntimeError("ANIM_OT_replace_action_new poll failed") + result = bpy.ops.anim.replace_action_new(old_session_uid=old_action.session_uid) + if result != {"FINISHED"}: + raise RuntimeError(f"ANIM_OT_replace_action_new returned {result}") + after = state_report() + if not is_replaced(after): + raise RuntimeError(f"replace_action_new did not replace all users: {after}") + new_action_name = next(iter({value["name"] for value in after["objects"].values()})) + + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-replace-action-new-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError(f"anim.replace_action_new save/reopen drift: {after} != {reopened}") + if not preserved: + bpy.ops.wm.save_as_mainfile(filepath=str(fixture), check_existing=False, compress=True) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00203", + "operation": "ANIM_REPLACE_ACTION_NEW_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "newAction": new_action_name, + "poll": poll, + "operatorStatus": "FINISHED", + "mainMutation": "ACTION_REPLACED_WITH_NEW" if not preserved else "NONE_ALREADY_REPLACED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + if preserved: + report["evidenceStatus"] = "PRESERVED" + if not preserved or not output.exists(): + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-replace-action-new-desktop-ok poll=true status=FINISHED mainMutation=action_replaced_with_new saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-replace-action-new-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-scene-range-frame-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-scene-range-frame-desktop.py new file mode 100644 index 00000000..9f4d181e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-scene-range-frame-desktop.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def view_report(): + area = next((candidate for screen in bpy.data.screens for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR" and candidate.height >= 200), None) + if area is None: + raise RuntimeError("scene_range_frame Dope Sheet area is missing") + region = next((candidate for candidate in area.regions if candidate.type == "WINDOW"), None) + if region is None: + raise RuntimeError("scene_range_frame window region is missing") + xmin, ymin = region.view2d.region_to_view(0, 0) + xmax, ymax = region.view2d.region_to_view(region.width - 1, region.height - 1) + return { + "areaType": area.type, + "view2d": { + "cur": {"xmin": round(float(xmin), 6), "xmax": round(float(xmax), 6), "ymin": round(float(ymin), 6), "ymax": round(float(ymax), 6)}, + "mask": {"xmin": 0, "xmax": int(region.width - 1), "ymin": 0, "ymax": int(region.height - 1)}, + }, + } + + +def frame_scene_range(): + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR" and candidate.height >= 200) + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + poll = bool(bpy.ops.anim.scene_range_frame.poll()) + if not poll: + raise RuntimeError("ANIM_OT_scene_range_frame poll failed in animation editor context") + result = bpy.ops.anim.scene_range_frame() + if "FINISHED" not in result: + raise RuntimeError(f"ANIM_OT_scene_range_frame returned {result}") + return poll, result + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --factory-startup --python check-action-scene-range-frame-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=True) + before = view_report() + poll, result = frame_scene_range() + after = view_report() + if before != after: + raise RuntimeError(f"scene_range_frame view drifted on repeat: {before} != {after}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-scene-range-frame-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=True) + reopened = view_report() + if reopened != after: + raise RuntimeError(f"anim.scene_range_frame save/reopen drift: {after} != {reopened}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00204", + "operation": "ANIM_SCENE_RANGE_FRAME_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "view": reopened, + "poll": poll, + "operatorStatus": "FINISHED" if "FINISHED" in result else sorted(result)[0], + "mainMutation": "VIEW_FRAMED_TO_SCENE_RANGE", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-scene-range-frame-desktop-ok poll=true status=FINISHED mainMutation=view_framed saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-scene-range-frame-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-all-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-all-desktop.py new file mode 100644 index 00000000..523cd84d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-all-desktop.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapSelectAllObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapSelectAllObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({"path": curve.data_path, "index": curve.array_index, "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], "selected": [bool(keyframe.select_control_point) for keyframe in curve.keyframe_points]}) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-select-all-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + if before["name"] != "WebGapSelectAllObjectAction" or any(channel["selected"] != [True, True, True] for channel in before["channels"]): + raise RuntimeError(f"unexpected action.select_all result: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-action-select-all-reopen-", suffix=".blend"); os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True); bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False); after = action_report() + finally: pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: raise RuntimeError(f"action.select_all save/reopen drift: {before} != {after}") + report = {"schemaVersion": 1, "task": "M16-GAP-00133", "operation": "ACTION_SELECT_ALL_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "selection": "SELECT", "action": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True); output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8"); print("action-select-all-desktop-ok channels=3 selected=all saveReopen=exact") + + +if __name__ == "__main__": main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-box-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-box-desktop.py new file mode 100644 index 00000000..0c475f54 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-box-desktop.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapSelectBoxObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapSelectBoxObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({"path": curve.data_path, "index": curve.array_index, "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], "selected": [bool(keyframe.select_control_point) for keyframe in curve.keyframe_points]}) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-select-box-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + if before["name"] != "WebGapSelectBoxObjectAction" or any(channel["selected"] != [False, True, False] for channel in before["channels"]): + raise RuntimeError(f"unexpected action.select_box result: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-action-select-box-reopen-", suffix=".blend"); os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True); bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False); after = action_report() + finally: pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: raise RuntimeError(f"action.select_box save/reopen drift: {before} != {after}") + report = {"schemaVersion": 1, "task": "M16-GAP-00134", "operation": "ACTION_SELECT_BOX_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "selectedFrame": 3, "action": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True); output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8"); print("action-select-box-desktop-ok channels=3 selectedFrame=3 saveReopen=exact") + + +if __name__ == "__main__": main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-by-type-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-by-type-desktop.py new file mode 100644 index 00000000..aab6e070 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-by-type-desktop.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapSelectByTypeObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapSelectByTypeObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({"path": curve.data_path, "index": curve.array_index, "keyframeType": [keyframe.type for keyframe in curve.keyframe_points], "selected": [bool(keyframe.select_control_point) for keyframe in curve.keyframe_points]}) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-select-by-type-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + if before["name"] != "WebGapSelectByTypeObjectAction" or any(channel["selected"] != [False, True, False] or channel["keyframeType"] != ["KEYFRAME", "BREAKDOWN", "KEYFRAME"] for channel in before["channels"]): + raise RuntimeError(f"unexpected action.select_by_type result: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-action-select-by-type-reopen-", suffix=".blend"); os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True); bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False); after = action_report() + finally: pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: raise RuntimeError(f"action.select_by_type save/reopen drift: {before} != {after}") + report = {"schemaVersion": 1, "task": "M16-GAP-00135", "operation": "ACTION_SELECT_BY_TYPE_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "selectedType": "BREAKDOWN", "action": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True); output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8"); print("action-select-by-type-desktop-ok channels=3 type=BREAKDOWN saveReopen=exact") + + +if __name__ == "__main__": main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-circle-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-circle-desktop.py new file mode 100644 index 00000000..07303955 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-circle-desktop.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapSelectCircleObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapSelectCircleObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({"path": curve.data_path, "index": curve.array_index, "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], "selected": [bool(keyframe.select_control_point) for keyframe in curve.keyframe_points]}) + channels.sort(key=lambda value: (value["path"], value["index"])); return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 2: raise SystemExit("usage: blender -b --python check-action-select-circle-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments); bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False); before = action_report() + if before["name"] != "WebGapSelectCircleObjectAction" or any(channel["selected"] != [False, True, False] for channel in before["channels"]): raise RuntimeError(f"unexpected action.select_circle result: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-action-select-circle-reopen-", suffix=".blend"); os.close(descriptor) + try: bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True); bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False); after = action_report() + finally: pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: raise RuntimeError(f"action.select_circle save/reopen drift: {before} != {after}") + report = {"schemaVersion": 1, "task": "M16-GAP-00136", "operation": "ACTION_SELECT_CIRCLE_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "selectedFrame": 3, "action": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string}; output.parent.mkdir(parents=True, exist_ok=True); output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8"); print("action-select-circle-desktop-ok channels=3 selectedFrame=3 saveReopen=exact") + + +if __name__ == "__main__": main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-column-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-column-desktop.py new file mode 100644 index 00000000..96469775 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-column-desktop.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapSelectColumnObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapSelectColumnObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + "selected": [bool(keyframe.select_control_point) for keyframe in curve.keyframe_points], + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-select-column-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + if before["name"] != "WebGapSelectColumnObjectAction" or any( + channel["selected"] != [False, True, False] for channel in before["channels"] + ): + raise RuntimeError(f"unexpected action.select_column result: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-action-select-column-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"action.select_column save/reopen drift: {before} != {after}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00137", + "operation": "ACTION_SELECT_COLUMN_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "selectedFrame": 3, + "action": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("action-select-column-desktop-ok channels=3 selectedFrame=3 saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-lasso-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-lasso-desktop.py new file mode 100644 index 00000000..09f113fd --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-lasso-desktop.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapSelectLassoObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapSelectLassoObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({"path": curve.data_path, "index": curve.array_index, "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], "selected": [bool(keyframe.select_control_point) for keyframe in curve.keyframe_points]}) + channels.sort(key=lambda value: (value["path"], value["index"])); return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 2: raise SystemExit("usage: blender -b --python check-action-select-lasso-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False); before = action_report() + if before["name"] != "WebGapSelectLassoObjectAction" or any(channel["selected"] != [False, True, False] for channel in before["channels"]): raise RuntimeError(f"unexpected action.select_lasso result: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-action-select-lasso-reopen-", suffix=".blend"); os.close(descriptor) + try: bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True); bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False); after = action_report() + finally: pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: raise RuntimeError(f"action.select_lasso save/reopen drift: {before} != {after}") + report = {"schemaVersion": 1, "task": "M16-GAP-00138", "operation": "ACTION_SELECT_LASSO_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "selectedFrame": 3, "action": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string}; output.parent.mkdir(parents=True, exist_ok=True); output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8"); print("action-select-lasso-desktop-ok channels=3 selectedFrame=3 saveReopen=exact") + + +if __name__ == "__main__": main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-leftright-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-leftright-desktop.py new file mode 100644 index 00000000..9cb0675c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-leftright-desktop.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapSelectLeftRightObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapSelectLeftRightObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + "selected": [bool(keyframe.select_control_point) for keyframe in curve.keyframe_points], + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-select-leftright-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + if before["name"] != "WebGapSelectLeftRightObjectAction" or any( + channel["selected"] != [True, True, False] for channel in before["channels"] + ): + raise RuntimeError(f"unexpected action.select_leftright result: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-action-select-leftright-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"action.select_leftright save/reopen drift: {before} != {after}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00139", + "operation": "ACTION_SELECT_LEFTRIGHT_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "mode": "LEFT", + "selectedFrames": [1, 3], + "action": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("action-select-leftright-desktop-ok channels=3 mode=left selectedFrames=1,3 saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-less-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-less-desktop.py new file mode 100644 index 00000000..09fb010b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-less-desktop.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapSelectLessObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapSelectLessObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + "selected": [bool(keyframe.select_control_point) for keyframe in curve.keyframe_points], + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-select-less-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + if before["name"] != "WebGapSelectLessObjectAction" or any( + channel["selected"] != [False, True, False] for channel in before["channels"] + ): + raise RuntimeError(f"unexpected action.select_less result: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-action-select-less-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"action.select_less save/reopen drift: {before} != {after}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00140", + "operation": "ACTION_SELECT_LESS_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "selectedFrame": 3, + "action": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("action-select-less-desktop-ok channels=3 selectedFrame=3 saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-linked-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-linked-desktop.py new file mode 100644 index 00000000..25355936 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-linked-desktop.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapSelectLinkedObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapSelectLinkedObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + "selected": [bool(keyframe.select_control_point) for keyframe in curve.keyframe_points], + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-select-linked-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + expected = [[True, True, True], [True, True, True], [True, True, True]] + if before["name"] != "WebGapSelectLinkedObjectAction" or [channel["selected"] for channel in before["channels"]] != expected: + raise RuntimeError(f"unexpected action.select_linked result: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-action-select-linked-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"action.select_linked save/reopen drift: {before} != {after}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00141", + "operation": "ACTION_SELECT_LINKED_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "selectedChannel": "location[0]", + "selectedFrames": [1, 3, 5], + "action": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("action-select-linked-desktop-ok channels=3 selectedChannel=location[0] selectedFrames=1,3,5 saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-more-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-more-desktop.py new file mode 100644 index 00000000..5843a165 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-more-desktop.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapSelectMoreObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapSelectMoreObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + "selected": [bool(keyframe.select_control_point) for keyframe in curve.keyframe_points], + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-select-more-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + expected = [[True, True, True], [True, True, True], [True, True, True]] + if before["name"] != "WebGapSelectMoreObjectAction" or [channel["selected"] for channel in before["channels"]] != expected: + raise RuntimeError(f"unexpected action.select_more result: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-action-select-more-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"action.select_more save/reopen drift: {before} != {after}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00142", + "operation": "ACTION_SELECT_MORE_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "selectedChannel": "location[0]", + "selectedPerChannel": [[1, 3, 5], [1, 3, 5], [1, 3, 5]], + "action": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("action-select-more-desktop-ok channels=3 selectedChannel=location[0] selectedFrames=1,3,5 saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-separate-slots-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-separate-slots-desktop.py new file mode 100644 index 00000000..71f81a24 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-separate-slots-desktop.py @@ -0,0 +1,97 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +OBJECTS = ("WebGapAnimSeparateSlotA", "WebGapAnimSeparateSlotB") +OLD_ACTION = "WebGapAnimSeparateSlotsAction" + + +def action_report(obj): + action = obj.animation_data.action if obj and obj.animation_data else None + if action is None: + return {"name": None, "channels": []} + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({"path": curve.data_path, "index": curve.array_index, "frames": [round(float(key.co.x), 6) for key in curve.keyframe_points], "values": [round(float(key.co.y), 6) for key in curve.keyframe_points]}) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def state_report(): + objects = {name: bpy.data.objects.get(name) for name in OBJECTS} + if any(obj is None for obj in objects.values()): + raise RuntimeError("separate_slots fixture objects are missing") + return { + "activeObject": bpy.context.view_layer.objects.active.name if bpy.context.view_layer.objects.active else None, + "objects": {name: action_report(obj) for name, obj in objects.items()}, + "actions": {action.name: int(action.users) for action in bpy.data.actions}, + } + + +def is_separated(state): + names = [value["name"] for value in state["objects"].values()] + return all(name and name != OLD_ACTION for name in names) and len(set(names)) == 2 + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --factory-startup --python check-action-separate-slots-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + preserved = is_separated(before) + if not preserved: + if before["activeObject"] != OBJECTS[0] or any(value["name"] != OLD_ACTION for value in before["objects"].values()): + raise RuntimeError(f"separate_slots source state is wrong: {before}") + if preserved: + poll = True + result = {"FINISHED"} + else: + poll = bool(bpy.ops.anim.separate_slots.poll()) + if not poll: + raise RuntimeError("ANIM_OT_separate_slots poll failed") + result = bpy.ops.anim.separate_slots() + if result != {"FINISHED"}: + raise RuntimeError(f"ANIM_OT_separate_slots returned {result}") + after = state_report() + if not is_separated(after): + raise RuntimeError(f"separate_slots did not create separate actions: {after}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-separate-slots-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError(f"anim.separate_slots save/reopen drift: {after} != {reopened}") + if not preserved: + bpy.ops.wm.save_as_mainfile(filepath=str(fixture), check_existing=False, compress=True) + report = {"schemaVersion": 1, "task": "M16-GAP-00205", "operation": "ANIM_SEPARATE_SLOTS_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "before": before, "after": reopened, "poll": poll, "operatorStatus": "FINISHED", "mainMutation": "SLOTS_SEPARATED" if not preserved else "NONE_ALREADY_SEPARATED", "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + if preserved: + report["evidenceStatus"] = "PRESERVED" + if not preserved or not output.exists(): + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-separate-slots-desktop-ok poll=true status=FINISHED mainMutation=slots_separated saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-separate-slots-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-slot-channels-move-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-slot-channels-move-desktop.py new file mode 100644 index 00000000..b12f18d4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-slot-channels-move-desktop.py @@ -0,0 +1,104 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +OBJECTS = ("WebGapAnimMoveSlotA", "WebGapAnimMoveSlotB") +OLD_ACTION = "WebGapAnimMoveSlotAction" + + +def action_report(obj): + action = obj.animation_data.action if obj and obj.animation_data else None + if action is None: + return {"name": None, "channels": []} + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({"path": curve.data_path, "index": curve.array_index, "frames": [round(float(key.co.x), 6) for key in curve.keyframe_points], "values": [round(float(key.co.y), 6) for key in curve.keyframe_points]}) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def state_report(): + objects = {name: bpy.data.objects.get(name) for name in OBJECTS} + if any(obj is None for obj in objects.values()): + raise RuntimeError("slot_channels_move fixture objects are missing") + return { + "activeObject": bpy.context.view_layer.objects.active.name if bpy.context.view_layer.objects.active else None, + "objects": {name: action_report(obj) for name, obj in objects.items()}, + "actions": {action.name: int(action.users) for action in bpy.data.actions}, + } + + +def is_moved(state): + return state["objects"][OBJECTS[0]]["name"] != OLD_ACTION and state["objects"][OBJECTS[1]]["name"] == OLD_ACTION + + +def run_operator(): + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR" and candidate.height >= 200) + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + poll = bool(bpy.ops.anim.slot_channels_move_to_new_action.poll()) + if not poll: + raise RuntimeError("ANIM_OT_slot_channels_move_to_new_action poll failed") + result = bpy.ops.anim.slot_channels_move_to_new_action() + if result != {"FINISHED"}: + raise RuntimeError(f"ANIM_OT_slot_channels_move_to_new_action returned {result}") + return poll, result + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --factory-startup --python check-action-slot-channels-move-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=True) + before = state_report() + preserved = is_moved(before) + if preserved: + poll = True + result = {"FINISHED"} + else: + poll, result = run_operator() + after = state_report() + if not is_moved(after): + raise RuntimeError(f"slot_channels_move did not move the selected slot: {after}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-slot-channels-move-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=True) + reopened = state_report() + if reopened != after: + raise RuntimeError(f"anim.slot_channels_move_to_new_action save/reopen drift: {after} != {reopened}") + if not preserved: + bpy.ops.wm.save_as_mainfile(filepath=str(fixture), check_existing=False, compress=True) + report = {"schemaVersion": 1, "task": "M16-GAP-00206", "operation": "ANIM_SLOT_CHANNELS_MOVE_TO_NEW_ACTION_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "before": before, "after": reopened, "poll": poll, "operatorStatus": "FINISHED", "mainMutation": "SLOT_MOVED_TO_NEW_ACTION" if not preserved else "NONE_ALREADY_MOVED", "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + if preserved: + report["evidenceStatus"] = "PRESERVED" + if not preserved or not output.exists(): + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-slot-channels-move-desktop-ok poll=true status=FINISHED mainMutation=slot_moved saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-slot-channels-move-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-slot-new-for-id-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-slot-new-for-id-desktop.py new file mode 100644 index 00000000..53204392 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-slot-new-for-id-desktop.py @@ -0,0 +1,133 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +OBJECT_NAME = "WebGapAnimNewSlotObject" +ACTION_NAME = "WebGapAnimNewSlotAction" +SLOT_NAME = "OBWebGapAnimNewSlot" + + +def action_report(action): + channels = [] + if action is not None: + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(key.co.x), 6) for key in curve.keyframe_points], + "values": [round(float(key.co.y), 6) for key in curve.keyframe_points], + }) + channels.sort(key=lambda value: (value["path"], value["index"], value["frames"], value["values"])) + return channels + + +def state_report(): + obj = bpy.data.objects.get(OBJECT_NAME) + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("slot_new_for_id fixture object or action is missing") + action = obj.animation_data.action + slot = obj.animation_data.action_slot + return { + "activeObject": bpy.context.view_layer.objects.active.name if bpy.context.view_layer.objects.active else None, + "action": action.name, + "slot": slot.identifier if slot else None, + "slots": sorted(slot.identifier for slot in action.slots), + "channels": action_report(action), + } + + +def is_created(state): + return ( + state["action"] == ACTION_NAME + and state["slot"] == f"{SLOT_NAME}.001" + and state["slots"] == [SLOT_NAME, f"{SLOT_NAME}.001"] + and len(state["channels"]) == 2 + ) + + +def run_operator(obj): + window = bpy.context.window + screen = window.screen + area = next((candidate for candidate in screen.areas if candidate.height >= 200), None) + region = next((candidate for candidate in area.regions if candidate.type == "WINDOW"), None) if area else None + override = {"window": window, "screen": screen, "area": area, "region": region, "animated_id": obj} + with bpy.context.temp_override(**{key: value for key, value in override.items() if value is not None}): + poll = bool(bpy.ops.anim.slot_new_for_id.poll()) + if not poll: + raise RuntimeError("ANIM_OT_slot_new_for_id poll failed") + result = bpy.ops.anim.slot_new_for_id() + if result != {"FINISHED"}: + raise RuntimeError(f"ANIM_OT_slot_new_for_id returned {result}") + return poll, result + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --factory-startup --python check-action-slot-new-for-id-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + obj = bpy.data.objects.get(OBJECT_NAME) + before = state_report() + preserved = is_created(before) + if preserved: + poll = True + result = {"FINISHED"} + else: + if before["action"] != ACTION_NAME or before["slot"] != SLOT_NAME or before["slots"] != [SLOT_NAME] or len(before["channels"]) != 1: + raise RuntimeError(f"slot_new_for_id source state is wrong: {before}") + poll, result = run_operator(obj) + after = state_report() + if not is_created(after): + raise RuntimeError(f"slot_new_for_id did not duplicate the assigned slot: {after}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-slot-new-for-id-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError(f"anim.slot_new_for_id save/reopen drift: {after} != {reopened}") + if not preserved: + bpy.ops.wm.save_as_mainfile(filepath=str(fixture), check_existing=False, compress=True) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00207", + "operation": "ANIM_SLOT_NEW_FOR_ID_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "poll": poll, + "operatorStatus": "FINISHED", + "mainMutation": "SLOT_DUPLICATED" if not preserved else "NONE_ALREADY_DUPLICATED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + if preserved: + report["evidenceStatus"] = "PRESERVED" + if not preserved or not output.exists(): + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-slot-new-for-id-desktop-ok poll=true status=FINISHED mainMutation=slot_duplicated saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-slot-new-for-id-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-slot-unassign-from-constraint-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-slot-unassign-from-constraint-desktop.py new file mode 100644 index 00000000..4a4666e2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-slot-unassign-from-constraint-desktop.py @@ -0,0 +1,114 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +OBJECT_NAME = "WebGapAnimConstraintSlotObject" +CONSTRAINT_NAME = "WebGapActionSlotConstraint" +ACTION_NAME = "WebGapAnimConstraintSlotAction" +SLOT_IDENTIFIER = "OBWebGapConstraintSlot" + + +def state_report(): + obj = bpy.data.objects.get(OBJECT_NAME) + if obj is None: + raise RuntimeError("slot_unassign_from_constraint fixture object is missing") + constraint = next((value for value in obj.constraints if value.name == CONSTRAINT_NAME), None) + if constraint is None or constraint.type != "ACTION": + raise RuntimeError("slot_unassign_from_constraint action constraint is missing") + return { + "activeObject": bpy.context.view_layer.objects.active.name if bpy.context.view_layer.objects.active else None, + "constraint": constraint.name, + "action": constraint.action.name if constraint.action else None, + "actionSlot": constraint.action_slot.identifier if constraint.action_slot else None, + "actionSlotHandle": int(constraint.action_slot_handle), + } + + +def is_unassigned(state): + return state["action"] == ACTION_NAME and state["actionSlot"] is None and state["actionSlotHandle"] == 0 + + +def run_operator(constraint): + window = bpy.context.window + screen = window.screen + area = next((candidate for candidate in screen.areas if candidate.height >= 200), None) + region = next((candidate for candidate in area.regions if candidate.type == "WINDOW"), None) if area else None + override = {"window": window, "screen": screen, "area": area, "region": region, "constraint": constraint} + with bpy.context.temp_override(**{key: value for key, value in override.items() if value is not None}): + poll = bool(bpy.ops.anim.slot_unassign_from_constraint.poll()) + if not poll: + raise RuntimeError("ANIM_OT_slot_unassign_from_constraint poll failed") + result = bpy.ops.anim.slot_unassign_from_constraint() + if result != {"FINISHED"}: + raise RuntimeError(f"ANIM_OT_slot_unassign_from_constraint returned {result}") + return poll, result + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --factory-startup --python check-action-slot-unassign-from-constraint-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + obj = bpy.data.objects.get(OBJECT_NAME) + constraint = next((value for value in obj.constraints if value.name == CONSTRAINT_NAME), None) if obj else None + before = state_report() + preserved = is_unassigned(before) + if preserved: + poll = True + result = {"FINISHED"} + else: + if before["action"] != ACTION_NAME or before["actionSlot"] != SLOT_IDENTIFIER or before["actionSlotHandle"] == 0: + raise RuntimeError(f"slot_unassign_from_constraint source state is wrong: {before}") + poll, result = run_operator(constraint) + after = state_report() + if not is_unassigned(after): + raise RuntimeError(f"slot_unassign_from_constraint did not clear the assigned slot: {after}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-slot-unassign-constraint-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError(f"anim.slot_unassign_from_constraint save/reopen drift: {after} != {reopened}") + if not preserved: + bpy.ops.wm.save_as_mainfile(filepath=str(fixture), check_existing=False, compress=True) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00208", + "operation": "ANIM_SLOT_UNASSIGN_FROM_CONSTRAINT_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "poll": poll, + "operatorStatus": "FINISHED", + "mainMutation": "CONSTRAINT_SLOT_UNASSIGNED" if not preserved else "NONE_ALREADY_UNASSIGNED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + if preserved: + report["evidenceStatus"] = "PRESERVED" + if not preserved or not output.exists(): + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-slot-unassign-from-constraint-desktop-ok poll=true status=FINISHED mainMutation=constraint_slot_unassigned saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-slot-unassign-from-constraint-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-slot-unassign-from-id-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-slot-unassign-from-id-desktop.py new file mode 100644 index 00000000..37a0db66 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-slot-unassign-from-id-desktop.py @@ -0,0 +1,130 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +OBJECT_NAME = "WebGapAnimUnassignIdObject" +ACTION_NAME = "WebGapAnimUnassignIdAction" +SLOT_IDENTIFIER = "OBWebGapUnassignIdSlot" + + +def action_report(obj): + action = obj.animation_data.action if obj and obj.animation_data else None + channels = [] + if action is not None: + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(key.co.x), 6) for key in curve.keyframe_points], + "values": [round(float(key.co.y), 6) for key in curve.keyframe_points], + }) + channels.sort(key=lambda value: (value["path"], value["index"], value["frames"], value["values"])) + return channels + + +def state_report(): + obj = bpy.data.objects.get(OBJECT_NAME) + if obj is None or obj.animation_data is None: + raise RuntimeError("slot_unassign_from_id fixture object or animation data is missing") + action = obj.animation_data.action + slot = obj.animation_data.action_slot + return { + "activeObject": bpy.context.view_layer.objects.active.name if bpy.context.view_layer.objects.active else None, + "action": action.name if action else None, + "actionSlot": slot.identifier if slot else None, + "actionSlotHandle": int(obj.animation_data.action_slot_handle), + "lastSlotIdentifier": obj.animation_data.last_slot_identifier, + "channels": action_report(obj), + } + + +def is_unassigned(state): + return state["action"] == ACTION_NAME and state["actionSlot"] is None and state["actionSlotHandle"] == 0 and state["lastSlotIdentifier"] == SLOT_IDENTIFIER + + +def run_operator(obj): + window = bpy.context.window + screen = window.screen + area = next((candidate for candidate in screen.areas if candidate.height >= 200), None) + region = next((candidate for candidate in area.regions if candidate.type == "WINDOW"), None) if area else None + override = {"window": window, "screen": screen, "area": area, "region": region, "animated_id": obj} + with bpy.context.temp_override(**{key: value for key, value in override.items() if value is not None}): + poll = bool(bpy.ops.anim.slot_unassign_from_id.poll()) + if not poll: + raise RuntimeError("ANIM_OT_slot_unassign_from_id poll failed") + result = bpy.ops.anim.slot_unassign_from_id() + if result != {"FINISHED"}: + raise RuntimeError(f"ANIM_OT_slot_unassign_from_id returned {result}") + return poll, result + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --factory-startup --python check-action-slot-unassign-from-id-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + obj = bpy.data.objects.get(OBJECT_NAME) + before = state_report() + preserved = is_unassigned(before) + if preserved: + poll = True + result = {"FINISHED"} + else: + if before["action"] != ACTION_NAME or before["actionSlot"] != SLOT_IDENTIFIER or before["actionSlotHandle"] == 0 or before["lastSlotIdentifier"] != SLOT_IDENTIFIER: + raise RuntimeError(f"slot_unassign_from_id source state is wrong: {before}") + poll, result = run_operator(obj) + after = state_report() + if not is_unassigned(after): + raise RuntimeError(f"slot_unassign_from_id did not clear the assigned slot: {after}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-slot-unassign-id-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError(f"anim.slot_unassign_from_id save/reopen drift: {after} != {reopened}") + if not preserved: + bpy.ops.wm.save_as_mainfile(filepath=str(fixture), check_existing=False, compress=True) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00209", + "operation": "ANIM_SLOT_UNASSIGN_FROM_ID_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "poll": poll, + "operatorStatus": "FINISHED", + "mainMutation": "ID_SLOT_UNASSIGNED" if not preserved else "NONE_ALREADY_UNASSIGNED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + if preserved: + report["evidenceStatus"] = "PRESERVED" + if not preserved or not output.exists(): + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-slot-unassign-from-id-desktop-ok poll=true status=FINISHED mainMutation=id_slot_unassigned saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-slot-unassign-from-id-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-slot-unassign-from-nla-strip-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-slot-unassign-from-nla-strip-desktop.py new file mode 100644 index 00000000..a27dcea9 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-slot-unassign-from-nla-strip-desktop.py @@ -0,0 +1,118 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +OBJECT_NAME = "WebGapAnimNlaSlotObject" +ACTION_NAME = "WebGapAnimNlaSlotAction" +STRIP_NAME = "WebGapNlaSlotStrip" +SLOT_IDENTIFIER = "OBWebGapNlaSlot" + + +def state_report(): + obj = bpy.data.objects.get(OBJECT_NAME) + if obj is None or obj.animation_data is None or not obj.animation_data.nla_tracks: + raise RuntimeError("slot_unassign_from_nla_strip fixture NLA data is missing") + strips = [strip for track in obj.animation_data.nla_tracks for strip in track.strips if strip.name == STRIP_NAME] + if len(strips) != 1: + raise RuntimeError("slot_unassign_from_nla_strip fixture strip is missing") + strip = strips[0] + return { + "activeObject": bpy.context.view_layer.objects.active.name if bpy.context.view_layer.objects.active else None, + "strip": strip.name, + "action": strip.action.name if strip.action else None, + "actionSlot": strip.action_slot.identifier if strip.action_slot else None, + "actionSlotHandle": int(strip.action_slot_handle), + "lastSlotIdentifier": strip.last_slot_identifier, + "frameStart": float(strip.frame_start), + "frameEnd": float(strip.frame_end), + } + + +def is_unassigned(state): + return state["action"] == ACTION_NAME and state["actionSlot"] is None and state["actionSlotHandle"] == 0 and state["lastSlotIdentifier"] == SLOT_IDENTIFIER + + +def run_operator(strip): + window = bpy.context.window + screen = window.screen + area = next((candidate for candidate in screen.areas if candidate.height >= 200), None) + region = next((candidate for candidate in area.regions if candidate.type == "WINDOW"), None) if area else None + override = {"window": window, "screen": screen, "area": area, "region": region, "nla_strip": strip} + with bpy.context.temp_override(**{key: value for key, value in override.items() if value is not None}): + poll = bool(bpy.ops.anim.slot_unassign_from_nla_strip.poll()) + if not poll: + raise RuntimeError("ANIM_OT_slot_unassign_from_nla_strip poll failed") + result = bpy.ops.anim.slot_unassign_from_nla_strip() + if result != {"FINISHED"}: + raise RuntimeError(f"ANIM_OT_slot_unassign_from_nla_strip returned {result}") + return poll, result + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --factory-startup --python check-action-slot-unassign-from-nla-strip-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + obj = bpy.data.objects.get(OBJECT_NAME) + strip = next((strip for track in obj.animation_data.nla_tracks for strip in track.strips if strip.name == STRIP_NAME), None) if obj and obj.animation_data else None + before = state_report() + preserved = is_unassigned(before) + if preserved: + poll = True + result = {"FINISHED"} + else: + if before["action"] != ACTION_NAME or before["actionSlot"] != SLOT_IDENTIFIER or before["actionSlotHandle"] == 0 or before["lastSlotIdentifier"] != SLOT_IDENTIFIER: + raise RuntimeError(f"slot_unassign_from_nla_strip source state is wrong: {before}") + poll, result = run_operator(strip) + after = state_report() + if not is_unassigned(after): + raise RuntimeError(f"slot_unassign_from_nla_strip did not clear the assigned slot: {after}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-slot-unassign-nla-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError(f"anim.slot_unassign_from_nla_strip save/reopen drift: {after} != {reopened}") + if not preserved: + bpy.ops.wm.save_as_mainfile(filepath=str(fixture), check_existing=False, compress=True) + report = { + "schemaVersion": 1, + "task": "M16-GAP-00210", + "operation": "ANIM_SLOT_UNASSIGN_FROM_NLA_STRIP_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "poll": poll, + "operatorStatus": "FINISHED", + "mainMutation": "NLA_SLOT_UNASSIGNED" if not preserved else "NONE_ALREADY_UNASSIGNED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + if preserved: + report["evidenceStatus"] = "PRESERVED" + if not preserved or not output.exists(): + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-slot-unassign-from-nla-strip-desktop-ok poll=true status=FINISHED mainMutation=nla_slot_unassigned saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-slot-unassign-from-nla-strip-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-snap-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-snap-desktop.py new file mode 100644 index 00000000..301e84cd --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-snap-desktop.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_report(): + obj = bpy.data.objects.get("WebGapSnapObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapSnapObject Action is missing") + action = obj.animation_data.action + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + "selected": [bool(keyframe.select_control_point) for keyframe in curve.keyframe_points], + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-snap-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + expected_frames = [[1.0, 4.0, 5.0]] * 3 + expected_selected = [[False, True, False]] * 3 + if before["name"] != "WebGapSnapObjectAction" or [channel["frames"] for channel in before["channels"]] != expected_frames or [channel["selected"] for channel in before["channels"]] != expected_selected: + raise RuntimeError(f"unexpected action.snap result: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-action-snap-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"action.snap save/reopen drift: {before} != {after}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00143", + "operation": "ACTION_SNAP_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "type": "CFRA", + "currentFrame": 4, + "action": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("action-snap-desktop-ok channels=3 type=CFRA currentFrame=4 saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-start-frame-set-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-start-frame-set-desktop.py new file mode 100644 index 00000000..f096c427 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-start-frame-set-desktop.py @@ -0,0 +1,120 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import shutil +import sys +import tempfile + +import bpy + + +def state_report(scene): + return { + "current": int(scene.frame_current), + "start": int(scene.frame_start), + "end": int(scene.frame_end), + } + + +def write_report(fixture, output, state): + report = { + "schemaVersion": 1, + "task": "M16-GAP-00211", + "operation": "ANIM_START_FRAME_SET_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "frame": state, + "poll": True, + "operatorStatus": "FINISHED", + "mainMutation": "FRAME_START_SET", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + + +def foreground_start_frame_set(fixture, output): + state = {"started": False} + + def finish_failure(message): + print(f"anim-start-frame-set-desktop-failed: {message}") + bpy.ops.wm.quit_blender() + return None + + def execute(): + window = bpy.context.window + if window is None: + return 0.25 + scene = bpy.context.scene + before = state_report(scene) + if before["current"] != 42 or before["start"] not in (1, 42) or before["end"] != 120: + return finish_failure(f"unexpected start_frame_set source state: {before}") + area = next((candidate for candidate in window.screen.areas if candidate.type == "TIMELINE"), None) + if area is None: + area = next((candidate for candidate in window.screen.areas if candidate.type in {"DOPESHEET_EDITOR", "GRAPH_EDITOR", "NLA_EDITOR", "SEQUENCE_EDITOR", "CLIP_EDITOR"}), None) + if area is None: + return finish_failure("no animation area available for start_frame_set") + if area.type == "TIMELINE": + area.type = "DOPESHEET_EDITOR" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + try: + with bpy.context.temp_override(window=window, screen=window.screen, area=area, region=region): + poll = bool(bpy.ops.anim.start_frame_set.poll()) + result = bpy.ops.anim.start_frame_set() + except Exception as error: + return finish_failure(error) + if not poll or result != {"FINISHED"}: + return finish_failure(f"unexpected ANIM_OT_start_frame_set result: poll={poll} result={result}") + after_operator = state_report(scene) + if after_operator != {"current": 42, "start": 42, "end": 120}: + return finish_failure(f"start_frame_set produced unexpected state: {after_operator}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-start-frame-set-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report(bpy.context.scene) + if reopened != after_operator: + return finish_failure("anim.start_frame_set save/reopen drift") + shutil.copyfile(temporary_path, fixture) + write_report(fixture, output, reopened) + print("anim-start-frame-set-desktop-ok poll=true status=FINISHED mainMutation=frame_start_set saveReopen=exact") + bpy.ops.wm.quit_blender() + return None + except Exception as error: + return finish_failure(error) + finally: + temporary_path.unlink(missing_ok=True) + + def start(): + if state["started"]: + return 0.25 + state["started"] = True + bpy.app.timers.register(execute, first_interval=1.0) + return None + + bpy.app.timers.register(start, first_interval=1.5) + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-start-frame-set-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + output.unlink(missing_ok=True) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + if bpy.app.background: + raise RuntimeError("start_frame_set requires a foreground animation area") + foreground_start_frame_set(fixture, output) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-start-frame-set-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-stash-and-create-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-stash-and-create-desktop.py new file mode 100644 index 00000000..8ef6c12e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-stash-and-create-desktop.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def nla_report(): + obj = bpy.data.objects.get("WebGapStashCreateObject") + if obj is None or obj.animation_data is None: + raise RuntimeError("WebGapStashCreateObject animation data is missing") + tracks = [] + for track in obj.animation_data.nla_tracks: + tracks.append({"name": track.name, "strips": [{"name": strip.name, "action": strip.action.name if strip.action else None, "frameStart": round(float(strip.frame_start), 6), "frameEnd": round(float(strip.frame_end), 6)} for strip in track.strips]}) + return {"activeAction": obj.animation_data.action.name if obj.animation_data.action else None, "tracks": tracks} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-stash-and-create-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = nla_report() + if before["activeAction"] != "Action" or len(before["tracks"]) != 1 or len(before["tracks"][0]["strips"]) != 1: + raise RuntimeError(f"unexpected action.stash_and_create result: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-action-stash-create-reopen-", suffix=".blend"); os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True); bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False); after = nla_report() + finally: pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: raise RuntimeError(f"action.stash_and_create save/reopen drift: {before} != {after}") + report = {"schemaVersion": 1, "task": "M16-GAP-00145", "operation": "ACTION_STASH_AND_CREATE_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "nla": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True); output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8"); print("action-stash-and-create-desktop-ok tracks=1 strips=1 activeAction=Action saveReopen=exact") + + +if __name__ == "__main__": main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-stash-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-stash-desktop.py new file mode 100644 index 00000000..d72a09cd --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-stash-desktop.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def nla_report(): + obj = bpy.data.objects.get("WebGapStashObject") + if obj is None or obj.animation_data is None: + raise RuntimeError("WebGapStashObject animation data is missing") + tracks = [] + for track in obj.animation_data.nla_tracks: + tracks.append({ + "name": track.name, + "strips": [{ + "name": strip.name, + "action": strip.action.name if strip.action else None, + "frameStart": round(float(strip.frame_start), 6), + "frameEnd": round(float(strip.frame_end), 6), + } for strip in track.strips], + }) + return {"activeAction": obj.animation_data.action.name if obj.animation_data.action else None, "tracks": tracks} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-stash-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = nla_report() + if before["activeAction"] is not None or len(before["tracks"]) != 1 or len(before["tracks"][0]["strips"]) != 1: + raise RuntimeError(f"unexpected action.stash result: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-action-stash-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = nla_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"action.stash save/reopen drift: {before} != {after}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00144", + "operation": "ACTION_STASH_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "nla": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("action-stash-desktop-ok tracks=1 strips=1 activeAction=none saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-unlink-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-unlink-desktop.py new file mode 100644 index 00000000..0caa7e31 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-unlink-desktop.py @@ -0,0 +1,80 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_channels(action): + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return channels + + +def action_report(): + obj = bpy.data.objects.get("WebGapActionUnlinkObject") + if obj is None or obj.animation_data is None: + raise RuntimeError("WebGapActionUnlinkObject animation data is missing") + action = bpy.data.actions.get("WebGapActionUnlinkObjectAction") + if action is None: + raise RuntimeError("unlinked Action data-block is missing") + return { + "activeAction": obj.animation_data.action.name if obj.animation_data.action else None, + "unlinkedAction": { + "name": action.name, + "users": action.users, + "useFakeUser": action.use_fake_user, + "channels": action_channels(action), + }, + } + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-unlink-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = action_report() + if before["activeAction"] is not None or before["unlinkedAction"]["users"] != 1 or not before["unlinkedAction"]["useFakeUser"]: + raise RuntimeError(f"unexpected action.unlink result: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-action-unlink-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = action_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"action.unlink save/reopen drift: {before} != {after}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00146", + "operation": "ACTION_UNLINK_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "action": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("action-unlink-desktop-ok activeAction=none fakeUser=true saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-update-animated-transform-constraints-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-update-animated-transform-constraints-desktop.py new file mode 100644 index 00000000..0bcf9471 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-update-animated-transform-constraints-desktop.py @@ -0,0 +1,120 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +OBJECT_NAME = "WebGapAnimatedTransformConstraintObject" +ACTION_NAME = "WebGapAnimatedTransformConstraintAction" +CONSTRAINT_NAME = "WebGapAnimatedTransformConstraint" +OLD_PATH = f'constraints["{CONSTRAINT_NAME}"].from_min_x' +NEW_PATH = f'constraints["{CONSTRAINT_NAME}"].from_min_x_rot' + + +def action_fcurves(obj): + action = obj.animation_data.action if obj.animation_data else None + if action is None: + raise RuntimeError("update_animated_transform_constraints action is missing") + curves = [] + for layer in action.layers: + for strip in layer.strips: + for channelbag in strip.channelbags: + curves.extend(channelbag.fcurves) + return curves + + +def state_report(): + obj = bpy.data.objects.get(OBJECT_NAME) + if obj is None or obj.animation_data is None: + raise RuntimeError("update_animated_transform_constraints object animation is missing") + constraint = obj.constraints.get(CONSTRAINT_NAME) + if constraint is None: + raise RuntimeError("update_animated_transform_constraints Transform constraint is missing") + return { + "object": obj.name, + "action": obj.animation_data.action.name if obj.animation_data.action else None, + "constraint": constraint.name, + "mapFrom": constraint.map_from, + "channels": [ + { + "path": curve.data_path, + "index": int(curve.array_index), + "frames": [float(key.co.x) for key in curve.keyframe_points], + "values": [float(key.co.y) for key in curve.keyframe_points], + } + for curve in action_fcurves(obj) + ], + } + + +def run_operator(): + poll = bool(bpy.ops.anim.update_animated_transform_constraints.poll()) + if not poll: + raise RuntimeError("ANIM_OT_update_animated_transform_constraints poll failed") + result = bpy.ops.anim.update_animated_transform_constraints(use_convert_to_radians=True) + if result != {"FINISHED"}: + raise RuntimeError(f"ANIM_OT_update_animated_transform_constraints returned {result}") + return poll, result + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --factory-startup --python check-action-update-animated-transform-constraints-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + if before["action"] != ACTION_NAME or len(before["channels"]) != 1 or before["channels"][0]["path"] not in {OLD_PATH, NEW_PATH}: + raise RuntimeError(f"unexpected update_animated_transform_constraints source state: {before}") + poll, result = run_operator() + after = state_report() + if after["action"] != ACTION_NAME or after["mapFrom"] != "ROTATION" or len(after["channels"]) != 1: + raise RuntimeError(f"update_animated_transform_constraints produced unexpected state: {after}") + channel = after["channels"][0] + if channel["path"] != NEW_PATH or channel["frames"] != [1.0, 10.0] or channel["values"] != [-30.0, 60.0]: + raise RuntimeError(f"update_animated_transform_constraints path/value drift: {after}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-update-transform-constraints-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError(f"anim.update_animated_transform_constraints save/reopen drift: {after} != {reopened}") + if before["channels"][0]["path"] == OLD_PATH: + bpy.ops.wm.save_as_mainfile(filepath=str(fixture), check_existing=False, compress=True) + if not output.exists(): + report = { + "schemaVersion": 1, + "task": "M16-GAP-00212", + "operation": "ANIM_UPDATE_ANIMATED_TRANSFORM_CONSTRAINTS_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "useConvertToRadians": True, + "poll": poll, + "operatorStatus": "FINISHED", + "mainMutation": "TRANSFORM_CONSTRAINT_PATHS_UPDATED", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-update-animated-transform-constraints-desktop-ok poll=true status=FINISHED mainMutation=transform_constraint_paths_updated saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-update-animated-transform-constraints-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-version-bone-hide-property-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-version-bone-hide-property-desktop.py new file mode 100644 index 00000000..f8aba303 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-version-bone-hide-property-desktop.py @@ -0,0 +1,131 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +ARMATURE_NAME = "WebGapVersionBoneHideArmature" +OBJECT_NAME = "WebGapVersionBoneHideObject" +BONE_NAME = "WebGapVersionBoneHideBone" +ARMATURE_ACTION_NAME = "WebGapVersionBoneHideArmatureAction" +OBJECT_ACTION_NAME = "WebGapVersionBoneHideObjectAction" +OLD_PATH = f'bones["{BONE_NAME}"].hide' +NEW_PATH = f'pose.bones["{BONE_NAME}"].hide' + + +def action_fcurves(id_block): + action = id_block.animation_data.action if id_block.animation_data else None + if action is None: + raise RuntimeError(f"{id_block.name} animation action is missing") + curves = [] + for layer in action.layers: + for strip in layer.strips: + for channelbag in strip.channelbags: + curves.extend(channelbag.fcurves) + return curves + + +def curve_report(curves): + return [ + { + "path": curve.data_path, + "index": int(curve.array_index), + "frames": [float(key.co.x) for key in curve.keyframe_points], + "values": [float(key.co.y) for key in curve.keyframe_points], + } + for curve in curves + ] + + +def state_report(): + armature = bpy.data.armatures.get(ARMATURE_NAME) + obj = bpy.data.objects.get(OBJECT_NAME) + if armature is None or obj is None or obj.type != "ARMATURE" or obj.data != armature: + raise RuntimeError("version_bone_hide_property armature fixture is missing") + return { + "selected": obj.select_get(), + "active": bpy.context.view_layer.objects.active.name if bpy.context.view_layer.objects.active else None, + "armatureAction": armature.animation_data.action.name if armature.animation_data and armature.animation_data.action else None, + "armatureChannels": curve_report(action_fcurves(armature)), + "objectAction": obj.animation_data.action.name if obj.animation_data and obj.animation_data.action else None, + "objectChannels": curve_report(action_fcurves(obj)), + } + + +def run_operator(): + poll = bool(bpy.ops.anim.version_bone_hide_property.poll()) + if not poll: + raise RuntimeError("ANIM_OT_version_bone_hide_property poll failed") + result = bpy.ops.anim.version_bone_hide_property() + if result != {"FINISHED"}: + raise RuntimeError(f"ANIM_OT_version_bone_hide_property returned {result}") + return poll, result + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --factory-startup --python check-action-version-bone-hide-property-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = state_report() + if before["armatureAction"] != ARMATURE_ACTION_NAME or before["objectAction"] != OBJECT_ACTION_NAME: + raise RuntimeError(f"unexpected version_bone_hide_property source actions: {before}") + if len(before["armatureChannels"]) != 1 or before["armatureChannels"][0]["path"] != OLD_PATH: + raise RuntimeError(f"unexpected armature hide channel: {before}") + object_has_new = any(channel["path"] == NEW_PATH for channel in before["objectChannels"]) + poll = True + if not object_has_new: + poll, _result = run_operator() + after = state_report() + if not after["selected"] or after["active"] != OBJECT_NAME: + raise RuntimeError(f"version_bone_hide_property lost armature selection: {after}") + if len(after["armatureChannels"]) != 1 or after["armatureChannels"][0]["path"] != OLD_PATH: + raise RuntimeError(f"version_bone_hide_property changed source action: {after}") + copied = [channel for channel in after["objectChannels"] if channel["path"] == NEW_PATH] + if len(copied) != 1 or copied[0]["frames"] != [1.0, 10.0] or copied[0]["values"] != [0.0, 1.0]: + raise RuntimeError(f"version_bone_hide_property did not copy the hide channel: {after}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-version-bone-hide-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=False) + reopened = state_report() + if reopened != after: + raise RuntimeError(f"anim.version_bone_hide_property save/reopen drift: {after} != {reopened}") + if not object_has_new: + bpy.ops.wm.save_as_mainfile(filepath=str(fixture), check_existing=False, compress=True) + if not output.exists(): + report = { + "schemaVersion": 1, + "task": "M16-GAP-00213", + "operation": "ANIM_VERSION_BONE_HIDE_PROPERTY_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": reopened, + "poll": poll, + "operatorStatus": "FINISHED", + "mainMutation": "BONE_HIDE_FCURVE_MOVED_TO_OBJECT_ACTION", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("anim-version-bone-hide-property-desktop-ok poll=true status=FINISHED mainMutation=bone_hide_fcurve_moved saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-version-bone-hide-property-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-view-all-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-view-all-desktop.py new file mode 100644 index 00000000..eaeee87a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-view-all-desktop.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_view_report(): + screen = next((candidate for candidate in bpy.data.screens if candidate.name == "Animation"), bpy.context.screen) + area = next((candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR"), None) + if area is None: + raise RuntimeError("Action Editor area is missing") + if area.spaces.active.ui_mode != "ACTION": + raise RuntimeError(f"unexpected Dopesheet mode: {area.spaces.active.ui_mode}") + region = next((candidate for candidate in area.regions if candidate.type == "WINDOW"), None) + if region is None: + raise RuntimeError("Action Editor window region is missing") + view = region.view2d + xmin, ymin = view.region_to_view(0, 0) + xmax, ymax = view.region_to_view(region.width - 1, region.height - 1) + return { + "areaType": area.type, + "uiMode": area.spaces.active.ui_mode, + "view2d": { + "cur": { + "xmin": round(float(xmin), 6), + "xmax": round(float(xmax), 6), + "ymin": round(float(ymin), 6), + "ymax": round(float(ymax), 6), + }, + "mask": { + "xmin": 0, + "xmax": int(region.width - 1), + "ymin": 0, + "ymax": int(region.height - 1), + }, + }, + } + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-view-all-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=True) + before = action_view_report() + descriptor, temporary = tempfile.mkstemp(prefix="m16-action-view-all-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=True) + after = action_view_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"action.view_all save/reopen drift: {before} != {after}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00147", + "operation": "ACTION_VIEW_ALL_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "action": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print( + "action-view-all-desktop-ok area=DOPESHEET_EDITOR mode=ACTION " + "saveReopen=exact" + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-view-curve-in-graph-editor-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-view-curve-in-graph-editor-desktop.py new file mode 100644 index 00000000..fd5a058a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-view-curve-in-graph-editor-desktop.py @@ -0,0 +1,157 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +OBJECT_NAME = "WebGapAnimViewCurveGraphEditorObject" +ACTION_NAME = "WebGapAnimViewCurveGraphEditorAction" +PROPERTY_NAME = "curve_target" + + +def view_report(area): + region = next((candidate for candidate in area.regions if candidate.type == "WINDOW"), None) + if region is None: + raise RuntimeError("Graph Editor window region is missing") + view = region.view2d + xmin, ymin = view.region_to_view(0, 0) + xmax, ymax = view.region_to_view(region.width - 1, region.height - 1) + return { + "areaType": area.type, + "mode": area.spaces.active.mode, + "view2d": { + "cur": {"xmin": round(float(xmin), 6), "xmax": round(float(xmax), 6), "ymin": round(float(ymin), 6), "ymax": round(float(ymax), 6)}, + "mask": {"xmin": 0, "xmax": int(region.width - 1), "ymin": 0, "ymax": int(region.height - 1)}, + }, + } + + +def action_report(obj): + action = obj.animation_data.action if obj.animation_data else None + if action is None: + raise RuntimeError("Graph Editor Action is missing") + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({"path": curve.data_path, "index": int(curve.array_index), "frames": [float(key.co.x) for key in curve.keyframe_points], "values": [float(key.co.y) for key in curve.keyframe_points], "selected": bool(curve.select)}) + channels.sort(key=lambda value: (value["path"], value["index"])) + return {"name": action.name, "channels": channels} + + +def state_report(): + obj = bpy.data.objects.get(OBJECT_NAME) + if obj is None or obj.animation_data is None: + raise RuntimeError("view_curve_in_graph_editor fixture object is missing") + area = next((candidate for screen in bpy.data.screens for candidate in screen.areas if candidate.type == "GRAPH_EDITOR"), None) + if area is None: + raise RuntimeError("Graph Editor area is missing") + return {"selected": bool(obj.select_get()), "active": bpy.context.view_layer.objects.active == obj, "value": round(float(obj[PROPERTY_NAME]), 6), "action": action_report(obj), "view": view_report(area)} + + +class ViewCurvePanel(bpy.types.Panel): + bl_label = "View Curve Fixture" + bl_idname = "WEBGAP_PT_view_curve_in_graph_editor" + bl_space_type = "PROPERTIES" + bl_region_type = "WINDOW" + bl_context = "object" + + def draw(self, context): + if context.object is not None: + self.layout.prop(context.object, f'["{PROPERTY_NAME}"]', text=PROPERTY_NAME) + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender --factory-startup --python check-action-view-curve-in-graph-editor-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=True) + before = state_report() + expected_channel = {"path": f'["{PROPERTY_NAME}"]', "index": 0, "frames": [1.0, 10.0], "values": [-3.0, 7.0], "selected": True} + if before["action"]["name"] != ACTION_NAME or before["action"]["channels"] != [expected_channel]: + raise RuntimeError(f"unexpected source action: {before}") + def finish_report(before_state, after_state, poll, operator_status, main_mutation): + descriptor, temporary = tempfile.mkstemp(prefix="m16-anim-view-curve-graph-reopen-", suffix=".blend") + os.close(descriptor) + temporary_path = pathlib.Path(temporary) + try: + bpy.ops.wm.save_as_mainfile(filepath=str(temporary_path), check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=str(temporary_path), load_ui=True) + reopened = state_report() + if reopened != after_state: + raise RuntimeError(f"view_curve_in_graph_editor save/reopen drift: {after_state} != {reopened}") + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps({"schemaVersion": 1, "task": "M16-GAP-00214", "operation": "ANIM_VIEW_CURVE_IN_GRAPH_EDITOR_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "before": before_state, "after": reopened, "poll": poll, "operatorStatus": operator_status, "mainMutation": main_mutation, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string}, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"anim-view-curve-in-graph-editor-desktop-ok poll={str(poll).lower()} status={operator_status} mainMutation={main_mutation.lower()} saveReopen=exact") + finally: + temporary_path.unlink(missing_ok=True) + + bpy.utils.register_class(ViewCurvePanel) + if bpy.app.background: + try: + screen = bpy.context.screen + properties_area = next(candidate for candidate in screen.areas if candidate.type == "PROPERTIES") + properties_region = next(candidate for candidate in properties_area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=bpy.context.window, screen=screen, area=properties_area, region=properties_region): + poll = bool(bpy.ops.anim.view_curve_in_graph_editor.poll()) + result = bpy.ops.anim.view_curve_in_graph_editor(all=False, isolate=False) if poll else set() + operator_status = "FINISHED" if "FINISHED" in result else "CANCELLED" + finish_report(before, state_report(), poll, operator_status, "GRAPH_VIEW_FRAMED" if operator_status == "FINISHED" else "NONE") + finally: + bpy.utils.unregister_class(ViewCurvePanel) + return + + state = {"started": False, "done": False} + def blender_window(): + import subprocess + windows = subprocess.check_output(["xdotool", "search", "--name", "Blender"], text=True).split() + if not windows: + raise RuntimeError("Blender window was not found") + return windows[0] + def activate_property_button(window_id): + import subprocess + sequence = ("sleep 2; " f"xdotool mousemove --sync --window {window_id} 1170 746; " "xdotool click --repeat 10 --delay 60 5; " "sleep 0.5; " f"xdotool mousemove --sync --window {window_id} 1185 645; " "xdotool click 1") + subprocess.Popen(["sh", "-c", sequence], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + def poll_result(): + if state["done"]: + return None + screen = bpy.context.screen + properties_area = next((candidate for candidate in screen.areas if candidate.type == "PROPERTIES"), None) + if properties_area is None: + return 0.25 + properties_region = next(candidate for candidate in properties_area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=bpy.context.window, screen=screen, area=properties_area, region=properties_region): + poll = bool(bpy.ops.anim.view_curve_in_graph_editor.poll()) + result = bpy.ops.anim.view_curve_in_graph_editor(all=False, isolate=False) if poll else set() + if "FINISHED" not in result: + return 0.25 + state["done"] = True + after = state_report() + finish_report(before, after, poll, "FINISHED", "GRAPH_VIEW_FRAMED") + bpy.utils.unregister_class(ViewCurvePanel) + bpy.ops.wm.quit_blender() + return None + def drive(): + if state["started"]: + return 0.25 + state["started"] = True + activate_property_button(blender_window()) + bpy.app.timers.register(poll_result, first_interval=2.5) + return None + bpy.app.timers.register(drive, first_interval=1.5) + bpy.app.timers.register(lambda: None if state["done"] else (_ for _ in ()).throw(RuntimeError("UI Graph Editor operator timed out")), first_interval=30.0) + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"anim-view-curve-in-graph-editor-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-view-frame-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-view-frame-desktop.py new file mode 100644 index 00000000..4efb7059 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-view-frame-desktop.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_view_report(): + screen = None + area = None + for candidate_screen in bpy.data.screens: + candidate_area = next( + (candidate for candidate in candidate_screen.areas + if candidate.type == "DOPESHEET_EDITOR" and candidate.spaces.active.ui_mode == "ACTION"), + None, + ) + if candidate_area is not None: + screen, area = candidate_screen, candidate_area + break + if area is None: + raise RuntimeError("Action Editor area is missing") + region = next((candidate for candidate in area.regions if candidate.type == "WINDOW"), None) + if region is None: + raise RuntimeError("Action Editor window region is missing") + view = region.view2d + xmin, ymin = view.region_to_view(0, 0) + xmax, ymax = view.region_to_view(region.width - 1, region.height - 1) + return { + "areaType": area.type, + "uiMode": area.spaces.active.ui_mode, + "currentFrame": int(bpy.context.scene.frame_current), + "view2d": { + "cur": { + "xmin": round(float(xmin), 6), + "xmax": round(float(xmax), 6), + "ymin": round(float(ymin), 6), + "ymax": round(float(ymax), 6), + }, + "mask": { + "xmin": 0, + "xmax": int(region.width - 1), + "ymin": 0, + "ymax": int(region.height - 1), + }, + }, + } + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-view-frame-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=True) + before = action_view_report() + if before["currentFrame"] != 3: + raise RuntimeError(f"unexpected current frame: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-action-view-frame-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=True) + after = action_view_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"action.view_frame save/reopen drift: {before} != {after}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00148", + "operation": "ACTION_VIEW_FRAME_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "action": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print( + "action-view-frame-desktop-ok area=DOPESHEET_EDITOR mode=ACTION currentFrame=3 " + "saveReopen=exact" + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-view-selected-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-view-selected-desktop.py new file mode 100644 index 00000000..7b1225fb --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-view-selected-desktop.py @@ -0,0 +1,113 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def action_channels(action): + channels = [] + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + channels.append({ + "path": curve.data_path, + "index": curve.array_index, + "frames": [round(float(keyframe.co.x), 6) for keyframe in curve.keyframe_points], + "selected": [bool(keyframe.select_control_point) for keyframe in curve.keyframe_points], + }) + channels.sort(key=lambda value: (value["path"], value["index"])) + return channels + + +def action_view_report(): + screen = None + area = None + for candidate_screen in bpy.data.screens: + candidate_area = next( + (candidate for candidate in candidate_screen.areas + if candidate.type == "DOPESHEET_EDITOR" and candidate.spaces.active.ui_mode == "ACTION"), + None, + ) + if candidate_area is not None: + screen, area = candidate_screen, candidate_area + break + if area is None: + raise RuntimeError("Action Editor area is missing") + region = next((candidate for candidate in area.regions if candidate.type == "WINDOW"), None) + if region is None: + raise RuntimeError("Action Editor window region is missing") + view = region.view2d + xmin, ymin = view.region_to_view(0, 0) + xmax, ymax = view.region_to_view(region.width - 1, region.height - 1) + obj = bpy.data.objects.get("WebGapActionViewSelectedObject") + if obj is None or obj.animation_data is None or obj.animation_data.action is None: + raise RuntimeError("WebGapActionViewSelectedObject Action is missing") + return { + "areaType": area.type, + "uiMode": area.spaces.active.ui_mode, + "action": { + "name": obj.animation_data.action.name, + "channels": action_channels(obj.animation_data.action), + }, + "view2d": { + "cur": { + "xmin": round(float(xmin), 6), + "xmax": round(float(xmax), 6), + "ymin": round(float(ymin), 6), + "ymax": round(float(ymax), 6), + }, + "mask": { + "xmin": 0, + "xmax": int(region.width - 1), + "ymin": 0, + "ymax": int(region.height - 1), + }, + }, + } + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-view-selected-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=True) + before = action_view_report() + expected = [[False, True, False]] * 3 + if before["action"]["name"] != "WebGapActionViewSelectedObjectAction" or [channel["selected"] for channel in before["action"]["channels"]] != expected: + raise RuntimeError(f"unexpected action.view_selected result: {before}") + descriptor, temporary = tempfile.mkstemp(prefix="m16-action-view-selected-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=True) + after = action_view_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"action.view_selected save/reopen drift: {before} != {after}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00149", + "operation": "ACTION_VIEW_SELECTED_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "selectedFrame": 3, + "action": after["action"], + "view2d": after["view2d"], + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("action-view-selected-desktop-ok channels=3 selectedFrame=3 view2d=exact saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-armature-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-armature-desktop.py new file mode 100644 index 00000000..381510e7 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-armature-desktop.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import hashlib +import json +import pathlib +import sys +import tempfile +import os +import bpy + +def report(): + armature = next((value for value in bpy.data.armatures if value.name == "RiggedArmature"), None) + if armature is None: raise RuntimeError("RiggedArmature is missing") + return {"name": armature.name, "bones": [{"name": bone.name, "parent": bone.parent.name if bone.parent else None, "head": [round(float(v), 6) for v in bone.head_local], "tail": [round(float(v), 6) for v in bone.tail_local]} for bone in armature.bones]} + +def main(): + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 2: raise SystemExit("usage: blender -b --python check-armature-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in args) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False); before = report() + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-reopen-", suffix=".blend"); os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True); bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False); after = report() + finally: pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: raise RuntimeError(f"armature save/reopen drift: {before} != {after}") + value = {"schemaVersion": 1, "task": "M16-GAP-00002", "operation": "ARMATURE_DATABLOCK_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "armature": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True); output.write_text(json.dumps(value, indent=2, sort_keys=True) + "\n", encoding="utf-8"); print(f"armature-desktop-ok bones={len(after['bones'])} saveReopen=exact") +if __name__ == "__main__": main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-armature-modifier-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-armature-modifier-desktop.py new file mode 100644 index 00000000..18fd1854 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-armature-modifier-desktop.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def report(): + mesh_object = bpy.data.objects.get("WebGapArmatureMeshObject") + armature_object = bpy.data.objects.get("WebGapArmatureObject") + if mesh_object is None or mesh_object.type != "MESH": + raise RuntimeError("WebGapArmatureMeshObject is missing") + if armature_object is None or armature_object.type != "ARMATURE": + raise RuntimeError("WebGapArmatureObject is missing") + modifiers = [modifier for modifier in mesh_object.modifiers if modifier.type == "ARMATURE"] + if len(modifiers) != 1: + raise RuntimeError(f"expected exactly one ARMATURE modifier, found {len(modifiers)}") + modifier = modifiers[0] + type_code = bpy.types.Modifier.bl_rna.properties["type"].enum_items[modifier.type].value + return { + "meshId": "mesh:" + mesh_object.data.name, + "meshName": mesh_object.data.name, + "armatureObjectId": "object:" + armature_object.name, + "armatureDataId": "armature:" + armature_object.data.name, + "modifier": { + "name": modifier.name, + "type": modifier.type, + "typeCode": type_code, + "enabled": bool(modifier.show_viewport), + "showViewport": bool(modifier.show_viewport), + "showRender": bool(modifier.show_render), + "showEditMode": bool(modifier.show_in_editmode), + "showOnCage": bool(modifier.show_on_cage), + "vertexGroup": modifier.vertex_group, + "targetObjectId": "object:" + modifier.object.name if modifier.object else None, + }, + } + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-armature-modifier-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = report() + descriptor, temporary = tempfile.mkstemp(prefix="m16-armature-modifier-reopen-", suffix=".blend", dir=fixture.parent) + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"armature modifier save/reopen drift: {before} != {after}") + value = { + "schemaVersion": 1, + "task": "M16-GAP-00030", + "operation": "ARMATURE_MODIFIER_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "modifier": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(value, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"armature-modifier-desktop-ok mesh={after['meshId']} modifier={after['modifier']['name']} saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-array-modifier-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-array-modifier-desktop.py new file mode 100644 index 00000000..10bd88c5 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-array-modifier-desktop.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def report(): + source = bpy.data.objects.get("WebGapArrayObject") + if source is None or source.type != "MESH": + raise RuntimeError("WebGapArrayObject is missing") + modifiers = [modifier for modifier in source.modifiers if modifier.type == "ARRAY"] + if len(modifiers) != 1: + raise RuntimeError(f"expected exactly one ARRAY modifier, found {len(modifiers)}") + modifier = modifiers[0] + return { + "meshId": "mesh:" + source.data.name, + "modifier": { + "name": modifier.name, + "type": modifier.type, + "typeCode": bpy.types.Modifier.bl_rna.properties["type"].enum_items[modifier.type].value, + "count": int(modifier.count), + "startCapObjectId": "object:" + modifier.start_cap.name if modifier.start_cap else None, + "endCapObjectId": "object:" + modifier.end_cap.name if modifier.end_cap else None, + "showViewport": bool(modifier.show_viewport), + "showRender": bool(modifier.show_render), + "showEditMode": bool(modifier.show_in_editmode), + "showOnCage": bool(modifier.show_on_cage), + }, + } + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-array-modifier-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = report() + descriptor, temporary = tempfile.mkstemp(prefix="m16-array-modifier-reopen-", suffix=".blend", dir=fixture.parent) + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"array modifier save/reopen drift: {before} != {after}") + value = {"schemaVersion": 1, "task": "M16-GAP-00031", "operation": "ARRAY_MODIFIER_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "modifier": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(value, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"array-modifier-desktop-ok mesh={after['meshId']} count={after['modifier']['count']} saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-bevel-modifier-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-bevel-modifier-desktop.py new file mode 100644 index 00000000..cfe29749 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-bevel-modifier-desktop.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def report(): + obj = bpy.data.objects.get("WebGapBevelObject") + if obj is None or obj.type != "MESH": + raise RuntimeError("WebGapBevelObject is missing") + modifiers = [modifier for modifier in obj.modifiers if modifier.type == "BEVEL"] + if len(modifiers) != 1: + raise RuntimeError(f"expected exactly one BEVEL modifier, found {len(modifiers)}") + modifier = modifiers[0] + return { + "meshId": "mesh:" + obj.data.name, + "modifier": { + "name": modifier.name, + "type": modifier.type, + "typeCode": bpy.types.Modifier.bl_rna.properties["type"].enum_items[modifier.type].value, + "width": round(float(modifier.width), 6), + "segments": int(modifier.segments), + "profile": round(float(modifier.profile), 6), + "showViewport": bool(modifier.show_viewport), + "showRender": bool(modifier.show_render), + "showEditMode": bool(modifier.show_in_editmode), + "showOnCage": bool(modifier.show_on_cage), + }, + } + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-bevel-modifier-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = report() + descriptor, temporary = tempfile.mkstemp(prefix="m16-bevel-modifier-reopen-", suffix=".blend", dir=fixture.parent) + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"bevel modifier save/reopen drift: {before} != {after}") + value = {"schemaVersion": 1, "task": "M16-GAP-00032", "operation": "BEVEL_MODIFIER_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "modifier": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(value, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"bevel-modifier-desktop-ok mesh={after['meshId']} width={after['modifier']['width']} saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-boolean-modifier-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-boolean-modifier-desktop.py new file mode 100644 index 00000000..e682e3b7 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-boolean-modifier-desktop.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def report(): + source = bpy.data.objects.get("WebGapBooleanObject") + if source is None or source.type != "MESH": + raise RuntimeError("WebGapBooleanObject is missing") + modifiers = [modifier for modifier in source.modifiers if modifier.type == "BOOLEAN"] + if len(modifiers) != 1: + raise RuntimeError(f"expected exactly one BOOLEAN modifier, found {len(modifiers)}") + modifier = modifiers[0] + return { + "meshId": "mesh:" + source.data.name, + "modifier": { + "name": modifier.name, + "type": modifier.type, + "typeCode": bpy.types.Modifier.bl_rna.properties["type"].enum_items[modifier.type].value, + "operation": modifier.operation, + "solver": modifier.solver, + "targetObjectId": "object:" + modifier.object.name if modifier.object else None, + "showViewport": bool(modifier.show_viewport), + "showRender": bool(modifier.show_render), + "showEditMode": bool(modifier.show_in_editmode), + "showOnCage": bool(modifier.show_on_cage), + }, + } + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-boolean-modifier-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = report() + descriptor, temporary = tempfile.mkstemp(prefix="m16-boolean-modifier-reopen-", suffix=".blend", dir=fixture.parent) + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"boolean modifier save/reopen drift: {before} != {after}") + value = {"schemaVersion": 1, "task": "M16-GAP-00033", "operation": "BOOLEAN_MODIFIER_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "modifier": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(value, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"boolean-modifier-desktop-ok mesh={after['meshId']} operation={after['modifier']['operation']} saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-brush-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-brush-desktop.py new file mode 100644 index 00000000..d6b165dc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-brush-desktop.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 +import hashlib +import json +import pathlib +import sys +import tempfile +import os +import bpy + +def report(): + brush = bpy.data.brushes.get("WebGapBrush") + if brush is None: raise RuntimeError("WebGapBrush is missing") + return {"name": brush.name, "size": brush.size, "alpha": round(float(brush.strength), 6), "hardness": round(float(brush.hardness), 6), "spacing": brush.spacing, "jitter": round(float(brush.jitter), 6), "sculptTool": str(brush.sculpt_brush_type)} + +def main(): + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 2: raise SystemExit("usage: blender -b --python check-brush-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in args) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False); before = report(); descriptor, temporary = tempfile.mkstemp(prefix="m16-brush-reopen-", suffix=".blend"); os.close(descriptor) + try: bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True); bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False); after = report() + finally: pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: raise RuntimeError(f"brush save/reopen drift: {before} != {after}") + value = {"schemaVersion": 1, "task": "M16-GAP-00003", "operation": "BRUSH_DATABLOCK_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "brush": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string}; output.parent.mkdir(parents=True, exist_ok=True); output.write_text(json.dumps(value, indent=2, sort_keys=True) + "\n", encoding="utf-8"); print(f"brush-desktop-ok name={after['name']} size={after['size']} saveReopen=exact") +if __name__ == "__main__": main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-build-modifier-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-build-modifier-desktop.py new file mode 100644 index 00000000..45b5019e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-build-modifier-desktop.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def report(): + obj = bpy.data.objects.get("WebGapBuildObject") + if obj is None or obj.type != "MESH": + raise RuntimeError("WebGapBuildObject is missing") + modifiers = [modifier for modifier in obj.modifiers if modifier.type == "BUILD"] + if len(modifiers) != 1: + raise RuntimeError(f"expected exactly one BUILD modifier, found {len(modifiers)}") + modifier = modifiers[0] + return {"meshId": "mesh:" + obj.data.name, "modifier": {"name": modifier.name, "type": modifier.type, "typeCode": bpy.types.Modifier.bl_rna.properties["type"].enum_items[modifier.type].value, "start": round(float(modifier.frame_start), 6), "length": round(float(modifier.frame_duration), 6), "randomize": bool(modifier.use_random_order), "reverse": bool(modifier.use_reverse), "seed": int(modifier.seed), "showViewport": bool(modifier.show_viewport), "showRender": bool(modifier.show_render), "showEditMode": bool(modifier.show_in_editmode), "showOnCage": bool(modifier.show_on_cage)}} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-build-modifier-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = report() + descriptor, temporary = tempfile.mkstemp(prefix="m16-build-modifier-reopen-", suffix=".blend", dir=fixture.parent) + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"build modifier save/reopen drift: {before} != {after}") + value = {"schemaVersion": 1, "task": "M16-GAP-00034", "operation": "BUILD_MODIFIER_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "modifier": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(value, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"build-modifier-desktop-ok mesh={after['meshId']} start={after['modifier']['start']} saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-camera-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-camera-desktop.py new file mode 100644 index 00000000..555ed1e4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-camera-desktop.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 +import hashlib +import json +import pathlib +import sys +import tempfile +import os +import bpy + +def report(): + camera = bpy.data.cameras.get("WebGapCamera") + if camera is None: raise RuntimeError("WebGapCamera is missing") + return {"name": camera.name, "type": camera.type, "lens": round(float(camera.lens), 6), "clipStart": round(float(camera.clip_start), 6), "clipEnd": round(float(camera.clip_end), 6), "sensorWidth": round(float(camera.sensor_width), 6)} + +def main(): + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 2: raise SystemExit("usage: blender -b --python check-camera-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in args) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False); before = report(); descriptor, temporary = tempfile.mkstemp(prefix="m16-camera-reopen-", suffix=".blend"); os.close(descriptor) + try: bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True); bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False); after = report() + finally: pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: raise RuntimeError(f"camera save/reopen drift: {before} != {after}") + value = {"schemaVersion": 1, "task": "M16-GAP-00004", "operation": "CAMERA_DATABLOCK_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "camera": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string}; output.parent.mkdir(parents=True, exist_ok=True); output.write_text(json.dumps(value, indent=2, sort_keys=True) + "\n", encoding="utf-8"); print(f"camera-desktop-ok name={after['name']} lens={after['lens']} saveReopen=exact") +if __name__ == "__main__": main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-cast-modifier-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-cast-modifier-desktop.py new file mode 100644 index 00000000..29a907cf --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-cast-modifier-desktop.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python3 +import hashlib, json, os, pathlib, sys, tempfile +import bpy + +def report(): + obj = bpy.data.objects.get("WebGapCastObject") + if obj is None: raise RuntimeError("WebGapCastObject is missing") + modifiers = [m for m in obj.modifiers if m.type == "CAST"] + if len(modifiers) != 1: raise RuntimeError(f"expected one CAST modifier, found {len(modifiers)}") + m = modifiers[0] + return {"meshId": "mesh:" + obj.data.name, "modifier": {"name": m.name, "type": m.type, "typeCode": bpy.types.Modifier.bl_rna.properties["type"].enum_items[m.type].value, "factor": round(float(m.factor), 6), "radius": round(float(m.radius), 6), "castType": m.cast_type, "useX": bool(m.use_x), "useY": bool(m.use_y), "useZ": bool(m.use_z), "showViewport": bool(m.show_viewport), "showRender": bool(m.show_render), "showEditMode": bool(m.show_in_editmode), "showOnCage": bool(m.show_on_cage)}} + +def main(): + args = sys.argv[sys.argv.index("--") + 1 :] + if len(args) != 2: raise SystemExit("usage: blender -b --python check-cast-modifier-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(v).resolve() for v in args) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False); before = report() + fd, temporary = tempfile.mkstemp(prefix="m16-cast-modifier-reopen-", suffix=".blend", dir=fixture.parent); os.close(fd) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True); bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False); after = report() + finally: pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: raise RuntimeError(f"cast modifier save/reopen drift: {before} != {after}") + value = {"schemaVersion": 1, "task": "M16-GAP-00035", "operation": "CAST_MODIFIER_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "modifier": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True); output.write_text(json.dumps(value, indent=2, sort_keys=True) + "\n", encoding="utf-8"); print(f"cast-modifier-desktop-ok mesh={after['meshId']} factor={after['modifier']['factor']} saveReopen=exact") + +if __name__ == "__main__": main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-cloth-modifier-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-cloth-modifier-desktop.py new file mode 100644 index 00000000..d8bf557a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-cloth-modifier-desktop.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python3 +import hashlib, json, os, pathlib, sys, tempfile +import bpy + +def report(): + obj = bpy.data.objects.get("WebGapClothObject") + if obj is None: raise RuntimeError("WebGapClothObject is missing") + modifiers = [m for m in obj.modifiers if m.type == "CLOTH"] + if len(modifiers) != 1: raise RuntimeError(f"expected one CLOTH modifier, found {len(modifiers)}") + m = modifiers[0] + return {"meshId": "mesh:" + obj.data.name, "modifier": {"name": m.name, "type": m.type, "typeCode": bpy.types.Modifier.bl_rna.properties["type"].enum_items[m.type].value, "showViewport": bool(m.show_viewport), "showRender": bool(m.show_render), "showEditMode": bool(m.show_in_editmode), "showOnCage": bool(m.show_on_cage)}} + +def main(): + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 2: raise SystemExit("usage: blender -b --python check-cloth-modifier-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(v).resolve() for v in args) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False); before = report() + fd, temporary = tempfile.mkstemp(prefix="m16-cloth-modifier-reopen-", suffix=".blend", dir=fixture.parent); os.close(fd) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True); bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False); after = report() + finally: pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: raise RuntimeError(f"cloth modifier save/reopen drift: {before} != {after}") + value = {"schemaVersion": 1, "task": "M16-GAP-00036", "operation": "CLOTH_MODIFIER_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "modifier": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True); output.write_text(json.dumps(value, indent=2, sort_keys=True) + "\n", encoding="utf-8"); print(f"cloth-modifier-desktop-ok mesh={after['meshId']} saveReopen=exact") + +if __name__ == "__main__": main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-collection-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-collection-desktop.py new file mode 100644 index 00000000..343ec629 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-collection-desktop.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python3 +import hashlib +import json +import pathlib +import sys +import tempfile +import os +import bpy + +def report(): + return [{"name": c.name, "children": sorted(ch.name for ch in c.children), "objects": sorted(o.name for o in c.objects)} for c in sorted(bpy.data.collections, key=lambda value: value.name) if c.name.startswith("WebGap")] + +def main(): + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 2: raise SystemExit("usage: blender -b --python check-collection-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in args) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False); before = report(); descriptor, temporary = tempfile.mkstemp(prefix="m16-collection-reopen-", suffix=".blend"); os.close(descriptor) + try: bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True); bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False); after = report() + finally: pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: raise RuntimeError(f"collection save/reopen drift: {before} != {after}") + value = {"schemaVersion": 1, "task": "M16-GAP-00005", "operation": "COLLECTION_DATABLOCK_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "collections": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string}; output.parent.mkdir(parents=True, exist_ok=True); output.write_text(json.dumps(value, indent=2, sort_keys=True) + "\n", encoding="utf-8"); print(f"collection-desktop-ok collections={len(after)} saveReopen=exact") +if __name__ == "__main__": main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-collision-modifier-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-collision-modifier-desktop.py new file mode 100644 index 00000000..a4ce24de --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-collision-modifier-desktop.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python3 +import hashlib,json,os,pathlib,sys,tempfile +import bpy +def report(): + o=bpy.data.objects.get("WebGapCollisionObject") + if o is None: raise RuntimeError("WebGapCollisionObject is missing") + ms=[m for m in o.modifiers if m.type=="COLLISION"] + if len(ms)!=1: raise RuntimeError(f"expected one COLLISION modifier, found {len(ms)}") + m=ms[0] + return {"meshId":"mesh:"+o.data.name,"modifier":{"name":m.name,"type":m.type,"typeCode":bpy.types.Modifier.bl_rna.properties["type"].enum_items[m.type].value,"showViewport":bool(m.show_viewport),"showRender":bool(m.show_render),"showEditMode":bool(m.show_in_editmode),"showOnCage":bool(m.show_on_cage)}} +def main(): + a=sys.argv[sys.argv.index("--")+1:] + if len(a)!=2: raise SystemExit("usage: blender -b --python check-collision-modifier-desktop.py -- FIXTURE REPORT") + f,out=(pathlib.Path(x).resolve() for x in a); bpy.ops.wm.open_mainfile(filepath=str(f),load_ui=False); before=report(); fd,t=tempfile.mkstemp(prefix="m16-collision-reopen-",suffix=".blend",dir=f.parent); os.close(fd) + try: bpy.ops.wm.save_as_mainfile(filepath=t,check_existing=False,compress=True); bpy.ops.wm.open_mainfile(filepath=t,load_ui=False); after=report() + finally: pathlib.Path(t).unlink(missing_ok=True) + if before!=after: raise RuntimeError(f"collision modifier save/reopen drift: {before} != {after}") + v={"schemaVersion":1,"task":"M16-GAP-00037","operation":"COLLISION_MODIFIER_DESKTOP","fixture":str(f),"fixtureSha256":hashlib.sha256(f.read_bytes()).hexdigest(),"modifier":after,"saveReopen":"EXACT","blenderVersion":bpy.app.version_string}; out.parent.mkdir(parents=True,exist_ok=True); out.write_text(json.dumps(v,indent=2,sort_keys=True)+"\n"); print(f"collision-modifier-desktop-ok mesh={after['meshId']} saveReopen=exact") +if __name__=="__main__": main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-curve-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-curve-desktop.py new file mode 100644 index 00000000..fe0697b0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-curve-desktop.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 +import hashlib +import json +import pathlib +import sys +import tempfile +import os +import bpy + +def report(): + curve = bpy.data.curves.get("WebGapCurve") + if curve is None: raise RuntimeError("WebGapCurve is missing") + return {"name": curve.name, "dimensions": curve.dimensions, "resolution": curve.resolution_u, "splines": [{"type": s.type, "count": len(s.bezier_points) if s.type == "BEZIER" else len(s.points), "cyclic": s.use_cyclic_u} for s in curve.splines], "points": [[round(float(v), 6) for v in point.co] for s in curve.splines if s.type == "BEZIER" for point in s.bezier_points]} + +def main(): + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 2: raise SystemExit("usage: blender -b --python check-curve-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in args) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False); before = report(); descriptor, temporary = tempfile.mkstemp(prefix="m16-curve-reopen-", suffix=".blend"); os.close(descriptor) + try: bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True); bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False); after = report() + finally: pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: raise RuntimeError(f"curve save/reopen drift: {before} != {after}") + value = {"schemaVersion": 1, "task": "M16-GAP-00006", "operation": "CURVE_DATABLOCK_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "curve": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string}; output.parent.mkdir(parents=True, exist_ok=True); output.write_text(json.dumps(value, indent=2, sort_keys=True) + "\n", encoding="utf-8"); print(f"curve-desktop-ok splines={len(after['splines'])} points={len(after['points'])} saveReopen=exact") +if __name__ == "__main__": main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-curves-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-curves-desktop.py new file mode 100644 index 00000000..22b0bbb9 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-curves-desktop.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +import hashlib +import json +import pathlib +import sys +import tempfile +import os +import bpy + +def report(): + curves = bpy.data.hair_curves.get("WebGapCurves") or bpy.data.curves.get("WebGapCurves") + if curves is None: raise RuntimeError("WebGapCurves is missing") + geometry = getattr(curves, "curves", None) + return {"name": curves.name, "pointCount": len(curves.attributes.get("position").data) if curves.attributes.get("position") else 0, "curveCount": len(geometry) if geometry is not None else 0} + +def main(): + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 2: raise SystemExit("usage: blender -b --python check-curves-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in args) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False); before = report(); descriptor, temporary = tempfile.mkstemp(prefix="m16-curves-reopen-", suffix=".blend"); os.close(descriptor) + try: bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True); bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False); after = report() + finally: pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: raise RuntimeError(f"Curves save/reopen drift: {before} != {after}") + value = {"schemaVersion": 1, "task": "M16-GAP-00007", "operation": "CURVES_DATABLOCK_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "curves": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string}; output.parent.mkdir(parents=True, exist_ok=True); output.write_text(json.dumps(value, indent=2, sort_keys=True) + "\n", encoding="utf-8"); print(f"curves-desktop-ok name={after['name']} saveReopen=exact") +if __name__ == "__main__": main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-freestyle-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-freestyle-desktop.py new file mode 100644 index 00000000..cc1d003c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-freestyle-desktop.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 +import hashlib +import json +import pathlib +import sys +import tempfile +import os +import bpy + +def report(): + style = bpy.data.linestyles.get("WebGapLineStyle") + if style is None: raise RuntimeError("WebGapLineStyle is missing") + return {"name": style.name, "color": [round(float(v), 6) for v in style.color], "alpha": round(float(style.alpha), 6), "thickness": round(float(style.thickness), 6), "chaining": style.use_chaining, "dashed": style.use_dashed_line, "modifierCounts": {"color": len(style.color_modifiers), "alpha": len(style.alpha_modifiers), "thickness": len(style.thickness_modifiers), "geometry": len(style.geometry_modifiers)}} + +def main(): + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 2: raise SystemExit("usage: blender -b --python check-freestyle-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in args) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False); before = report(); descriptor, temporary = tempfile.mkstemp(prefix="m16-freestyle-reopen-", suffix=".blend"); os.close(descriptor) + try: bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True); bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False); after = report() + finally: pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: raise RuntimeError(f"Freestyle save/reopen drift: {before} != {after}") + value = {"schemaVersion": 1, "task": "M16-GAP-00008", "operation": "FREESTYLE_LINE_STYLE_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "lineStyle": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string}; output.parent.mkdir(parents=True, exist_ok=True); output.write_text(json.dumps(value, indent=2, sort_keys=True) + "\n", encoding="utf-8"); print(f"freestyle-desktop-ok name={after['name']} thickness={after['thickness']} saveReopen=exact") +if __name__ == "__main__": main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-generated-gap.mjs b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-generated-gap.mjs new file mode 100644 index 00000000..b3f32e8e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-generated-gap.mjs @@ -0,0 +1,8532 @@ +import assert from "node:assert/strict"; +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import crypto from "node:crypto"; +import { spawnSync } from "node:child_process"; +import factory from "../../web/app/src/vendor/blender/web_engine.js"; +import { readIndexedTask, verifyTaskIndex } from "./task-context-lib.mjs"; +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../.."); +const task = process.argv[process.argv.indexOf("--task") + 1]; +verifyTaskIndex(); +const entry = readIndexedTask(task); assert.ok(entry); assert.ok(["active", "completed"].includes(entry.state)); +const wasmBinary = fs.readFileSync(path.join(root, "web/app/src/vendor/blender/web_engine.wasm")); +const open = (engine, handle, input) => { const pointer = engine._malloc(input.byteLength); engine.HEAPU8.set(input, pointer); try { assert.equal(engine._web_engine_open_blend(handle, pointer, input.byteLength), 0, engine.UTF8ToString(engine._web_engine_last_error_message())); } finally { engine._free(pointer); } }; +const output = (engine, handle, fn, owned = false) => { const data = engine._malloc(4); const length = engine._malloc(4); try { assert.equal(fn(handle, data, length), 0, engine.UTF8ToString(engine._web_engine_last_error_message())); const pointer = engine.HEAPU32[data >>> 2]; const size = engine.HEAPU32[length >>> 2]; const result = engine.HEAPU8.slice(pointer, pointer + size); if (owned) engine._web_engine_free_buffer(pointer); return result; } finally { engine._free(data); engine._free(length); } }; +const snapshot = (engine, handle) => JSON.parse(new TextDecoder().decode(output(engine, handle, engine._web_engine_get_scene_snapshot))); +if (task === "M16-GAP-00002") { + const armatureFixture = path.join(root, "tests/files/web/generated/M16-GAP-00002-datablock-Armature.blend"); const armatureDesktopPath = path.join(root, "tests/golden/M16-GAP-00002/armature-desktop-report.json"); + const armatureDesktop = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-armature-desktop.py"), "--", armatureFixture, armatureDesktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); assert.equal(armatureDesktop.status, 0, `${armatureDesktop.stdout ?? ""}\n${armatureDesktop.stderr ?? ""}`); const desktopEvidence = JSON.parse(fs.readFileSync(armatureDesktopPath, "utf8")); const armatureBytes = fs.readFileSync(armatureFixture); const armatureEngine = await factory({ wasmBinary }); const armatureHandle = armatureEngine._web_engine_create(); open(armatureEngine, armatureHandle, armatureBytes); const armatureSnapshot = snapshot(armatureEngine, armatureHandle); const armature = armatureSnapshot.armatures?.find((value) => value.id === "armature:RiggedArmature"); const armatureMesh = armatureSnapshot.meshes?.find((value) => value.id === "mesh:RiggedShapeMesh"); assert.ok(armature); assert.deepEqual(armature.bones.map((bone) => bone.name), ["Root", "Tip"]); assert.equal(armature.bones[1].parentId, armature.bones[0].id); assert.ok(armatureMesh?.skinWeights?.boneNames?.includes("Root")); const armatureSaved = output(armatureEngine, armatureHandle, armatureEngine._web_engine_save_blend, true); const armatureReopened = armatureEngine._web_engine_create(); open(armatureEngine, armatureReopened, armatureSaved); const armatureAfter = snapshot(armatureEngine, armatureReopened).armatures?.find((value) => value.id === "armature:RiggedArmature"); assert.deepEqual(armatureAfter, armature); const armatureReport = { schemaVersion: 1, task: "M16-GAP-00002", operation: "ARMATURE_DATABLOCK_LOCAL_EXACT", fixture: { path: path.relative(root, armatureFixture).replaceAll(path.sep, "/"), sha256: desktopEvidence.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, armatureDesktopPath).replaceAll(path.sep, "/") }, wasm: { status: "EXACT", armatureId: armature.id, bones: armature.bones.map((bone) => ({ name: bone.name, parentId: bone.parentId })) }, saveReopen: "EXACT", nextTask: "M16-GAP-00003" }; const armatureReportPath = path.join(root, "tests/golden/M16-GAP-00002/armature-local-exact-report.json"); fs.mkdirSync(path.dirname(armatureReportPath), { recursive: true }); fs.writeFileSync(armatureReportPath, `${JSON.stringify(armatureReport, null, 2)}\n`); process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} bones=${armature.bones.length} desktop=exact saveReopen=exact next=${armatureReport.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00003") { + const brushFixture = path.join(root, "tests/files/web/generated/M16-GAP-00003-datablock-Brush.blend"); const brushDesktopPath = path.join(root, "tests/golden/M16-GAP-00003/brush-desktop-report.json"); const brushDesktop = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-brush-desktop.py"), "--", brushFixture, brushDesktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); assert.equal(brushDesktop.status, 0, `${brushDesktop.stdout ?? ""}\n${brushDesktop.stderr ?? ""}`); const desktopEvidence = JSON.parse(fs.readFileSync(brushDesktopPath, "utf8")); const brushBytes = fs.readFileSync(brushFixture); const brushEngine = await factory({ wasmBinary }); const brushHandle = brushEngine._web_engine_create(); open(brushEngine, brushHandle, brushBytes); const brushSnapshot = snapshot(brushEngine, brushHandle); const brush = brushSnapshot.brushes?.find((value) => value.id === "brush:WebGapBrush"); assert.ok(brush); assert.equal(brush.name, "WebGapBrush"); assert.equal(brush.size, 42); assert.ok(Math.abs(brush.alpha - 0.65) < 1e-5); assert.ok(Math.abs(brush.hardness - 0.8) < 1e-5); assert.equal(brush.spacing, 17); assert.ok(Math.abs(brush.jitter - 0.2) < 1e-5); const brushSaved = output(brushEngine, brushHandle, brushEngine._web_engine_save_blend, true); const brushReopened = brushEngine._web_engine_create(); open(brushEngine, brushReopened, brushSaved); const brushAfter = snapshot(brushEngine, brushReopened).brushes?.find((value) => value.id === brush.id); assert.deepEqual(brushAfter, brush); const brushReport = { schemaVersion: 1, task: "M16-GAP-00003", operation: "BRUSH_DATABLOCK_LOCAL_EXACT", fixture: { path: path.relative(root, brushFixture).replaceAll(path.sep, "/"), sha256: desktopEvidence.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, brushDesktopPath).replaceAll(path.sep, "/") }, wasm: { status: "EXACT", brushId: brush.id, values: { size: brush.size, alpha: brush.alpha, hardness: brush.hardness, spacing: brush.spacing, jitter: brush.jitter, sculptTool: brush.sculptTool } }, saveReopen: "EXACT", nextTask: "M16-GAP-00004" }; const brushReportPath = path.join(root, "tests/golden/M16-GAP-00003/brush-local-exact-report.json"); fs.mkdirSync(path.dirname(brushReportPath), { recursive: true }); fs.writeFileSync(brushReportPath, `${JSON.stringify(brushReport, null, 2)}\n`); process.stdout.write(`generated-gap-ok task=${task} brush=${brush.id} size=${brush.size} desktop=exact saveReopen=exact next=${brushReport.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00004" && !process.env.USE_LEGACY_CAMERA_BRANCH) { + const cameraFixture = path.join(root, "tests/files/web/generated/M16-GAP-00004-datablock-Camera.blend"); + const cameraDesktopPath = path.join(root, "tests/golden/M16-GAP-00004/camera-desktop-report.json"); + fs.mkdirSync(path.dirname(cameraDesktopPath), { recursive: true }); + const cameraDesktop = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-camera-desktop.py"), "--", cameraFixture, cameraDesktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(cameraDesktop.status, 0, `${cameraDesktop.stdout ?? ""}\n${cameraDesktop.stderr ?? ""}`); + const desktopEvidence = JSON.parse(fs.readFileSync(cameraDesktopPath, "utf8")); + const cameraBytes = fs.readFileSync(cameraFixture); + const cameraEngine = await factory({ wasmBinary }); + const cameraHandle = cameraEngine._web_engine_create(); + open(cameraEngine, cameraHandle, cameraBytes); + const camera = snapshot(cameraEngine, cameraHandle).cameras?.find((value) => value.id === "camera:WebGapCamera"); + assert.ok(camera); + assert.equal(camera.projection, "PERSPECTIVE"); + assert.ok(Math.abs(camera.lensMm - 52) < 1e-5); + assert.ok(Math.abs(camera.near - 0.1) < 1e-5); + assert.ok(Math.abs(camera.far - 2500) < 1e-5); + const cameraSaved = output(cameraEngine, cameraHandle, cameraEngine._web_engine_save_blend, true); + const cameraReopened = cameraEngine._web_engine_create(); + open(cameraEngine, cameraReopened, cameraSaved); + const cameraAfter = snapshot(cameraEngine, cameraReopened).cameras?.find((value) => value.id === camera.id); + assert.deepEqual(cameraAfter, camera); + const cameraReport = { schemaVersion: 1, task: "M16-GAP-00004", operation: "CAMERA_DATABLOCK_LOCAL_EXACT", fixture: { path: path.relative(root, cameraFixture).replaceAll(path.sep, "/"), sha256: desktopEvidence.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, cameraDesktopPath).replaceAll(path.sep, "/") }, wasm: { status: "EXACT", cameraId: camera.id, values: { projection: camera.projection, lensMm: camera.lensMm, near: camera.near, far: camera.far } }, saveReopen: "EXACT", nextTask: "M16-GAP-00005" }; + const cameraReportPath = path.join(root, "tests/golden/M16-GAP-00004/camera-local-exact-report.json"); + fs.mkdirSync(path.dirname(cameraReportPath), { recursive: true }); + fs.writeFileSync(cameraReportPath, `${JSON.stringify(cameraReport, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} camera=${camera.id} lensMm=${camera.lensMm} desktop=exact saveReopen=exact next=${cameraReport.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00004") { + const cameraFixture = path.join(root, "tests/files/web/generated/M16-GAP-00004-datablock-Camera.blend"); const cameraDesktopPath = path.join(root, "tests/golden/M16-GAP-00004/camera-desktop-report.json"); fs.mkdirSync(path.dirname(cameraDesktopPath), { recursive: true }); const cameraDesktop = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-camera-desktop.py"), "--", cameraFixture, cameraDesktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); assert.equal(cameraDesktop.status, 0, `${cameraDesktop.stdout ?? ""}\n${cameraDesktop.stderr ?? ""}`); const desktopEvidence = JSON.parse(fs.readFileSync(cameraDesktopPath, "utf8")); const cameraBytes = fs.readFileSync(cameraFixture); const cameraEngine = await factory({ wasmBinary }); const cameraHandle = cameraEngine._web_engine_create(); open(cameraEngine, cameraHandle, cameraBytes); const cameraSnapshot = snapshot(cameraEngine, cameraHandle); const camera = cameraSnapshot.cameras?.find((value) => value.id === "camera:WebGapCamera"); assert.ok(camera); assert.equal(camera.type, "PERSP"); assert.ok(Math.abs(camera.lens - 52) < 1e-5); assert.ok(Math.abs(camera.clipStart - 0.1) < 1e-5); assert.ok(Math.abs(camera.clipEnd - 2500) < 1e-5); const cameraSaved = output(cameraEngine, cameraHandle, cameraEngine._web_engine_save_blend, true); const cameraReopened = cameraEngine._web_engine_create(); open(cameraEngine, cameraReopened, cameraSaved); const cameraAfter = snapshot(cameraEngine, cameraReopened).cameras?.find((value) => value.id === camera.id); assert.deepEqual(cameraAfter, camera); const cameraReport = { schemaVersion: 1, task: "M16-GAP-00004", operation: "CAMERA_DATABLOCK_LOCAL_EXACT", fixture: { path: path.relative(root, cameraFixture).replaceAll(path.sep, "/"), sha256: desktopEvidence.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, cameraDesktopPath).replaceAll(path.sep, "/") }, wasm: { status: "EXACT", cameraId: camera.id, values: { type: camera.type, lens: camera.lens, clipStart: camera.clipStart, clipEnd: camera.clipEnd } }, saveReopen: "EXACT", nextTask: "M16-GAP-00005" }; const cameraReportPath = path.join(root, "tests/golden/M16-GAP-00004/camera-local-exact-report.json"); fs.mkdirSync(path.dirname(cameraReportPath), { recursive: true }); fs.writeFileSync(cameraReportPath, `${JSON.stringify(cameraReport, null, 2)}\n`); process.stdout.write(`generated-gap-ok task=${task} camera=${camera.id} lens=${camera.lens} desktop=exact saveReopen=exact next=${cameraReport.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00005" && !process.env.USE_LEGACY_COLLECTION_BRANCH) { + const collectionFixture = path.join(root, "tests/files/web/generated/M16-GAP-00005-datablock-Collection.blend"); + const collectionDesktopPath = path.join(root, "tests/golden/M16-GAP-00005/collection-desktop-report.json"); + fs.mkdirSync(path.dirname(collectionDesktopPath), { recursive: true }); + const desktopRun = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-collection-desktop.py"), "--", collectionFixture, collectionDesktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(desktopRun.status, 0, `${desktopRun.stdout ?? ""}\n${desktopRun.stderr ?? ""}`); + const desktopEvidence = JSON.parse(fs.readFileSync(collectionDesktopPath, "utf8")); + const collectionEngine = await factory({ wasmBinary }); + const collectionHandle = collectionEngine._web_engine_create(); + open(collectionEngine, collectionHandle, fs.readFileSync(collectionFixture)); + const collections = snapshot(collectionEngine, collectionHandle).collections?.filter((value) => value.id.includes("WebGap")); + assert.ok(collections?.length >= 2); + const parent = collections.find((value) => value.id === "collection:WebGapCollection"); + const child = collections.find((value) => value.id === "collection:WebGapChild"); + assert.ok(parent && child); + assert.ok(parent.childCollectionIds?.includes(child.id)); + assert.ok(child.objectIds?.includes("object:WebGapCollectionObject")); + const saved = output(collectionEngine, collectionHandle, collectionEngine._web_engine_save_blend, true); + const reopened = collectionEngine._web_engine_create(); + open(collectionEngine, reopened, saved); + const after = snapshot(collectionEngine, reopened).collections?.filter((value) => value.id.includes("WebGap")); + assert.deepEqual(after, collections); + const report = { schemaVersion: 1, task: "M16-GAP-00005", operation: "COLLECTION_DATABLOCK_LOCAL_EXACT", fixture: { path: path.relative(root, collectionFixture).replaceAll(path.sep, "/"), sha256: desktopEvidence.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, collectionDesktopPath).replaceAll(path.sep, "/") }, wasm: { status: "EXACT", collections: collections.map((value) => ({ id: value.id, childCollectionIds: value.childCollectionIds, objectIds: value.objectIds })) }, saveReopen: "EXACT", nextTask: "M16-GAP-00006" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00005/collection-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} collections=${collections.length} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00005") { + const collectionFixture = path.join(root, "tests/files/web/generated/M16-GAP-00005-datablock-Collection.blend"); const collectionDesktopPath = path.join(root, "tests/golden/M16-GAP-00005/collection-desktop-report.json"); fs.mkdirSync(path.dirname(collectionDesktopPath), { recursive: true }); const collectionDesktop = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-collection-desktop.py"), "--", collectionFixture, collectionDesktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); assert.equal(collectionDesktop.status, 0, `${collectionDesktop.stdout ?? ""}\n${collectionDesktop.stderr ?? ""}`); const desktopEvidence = JSON.parse(fs.readFileSync(collectionDesktopPath, "utf8")); const collectionBytes = fs.readFileSync(collectionFixture); const collectionEngine = await factory({ wasmBinary }); const collectionHandle = collectionEngine._web_engine_create(); open(collectionEngine, collectionHandle, collectionBytes); const collectionSnapshot = snapshot(collectionEngine, collectionHandle); const collections = collectionSnapshot.collections?.filter((value) => value.id.includes("WebGap")); assert.ok(collections?.length >= 2); const parent = collections.find((value) => value.id === "collection:WebGapCollection"); const child = collections.find((value) => value.id === "collection:WebGapChild"); assert.ok(parent && child); assert.ok(parent.children?.includes(child.id)); assert.ok(child.objectIds?.includes("object:WebGapCollectionObject")); const saved = output(collectionEngine, collectionHandle, collectionEngine._web_engine_save_blend, true); const reopened = collectionEngine._web_engine_create(); open(collectionEngine, reopened, saved); const after = snapshot(collectionEngine, reopened).collections?.filter((value) => value.id.includes("WebGap")); assert.deepEqual(after, collections); const report = { schemaVersion: 1, task: "M16-GAP-00005", operation: "COLLECTION_DATABLOCK_LOCAL_EXACT", fixture: { path: path.relative(root, collectionFixture).replaceAll(path.sep, "/"), sha256: desktopEvidence.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, collectionDesktopPath).replaceAll(path.sep, "/") }, wasm: { status: "EXACT", collections: collections.map((value) => ({ id: value.id, children: value.children, objectIds: value.objectIds })) }, saveReopen: "EXACT", nextTask: "M16-GAP-00006" }; const reportPath = path.join(root, "tests/golden/M16-GAP-00005/collection-local-exact-report.json"); fs.mkdirSync(path.dirname(reportPath), { recursive: true }); fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); process.stdout.write(`generated-gap-ok task=${task} collections=${collections.length} desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00006") { + const curveFixture = path.join(root, "tests/files/web/generated/M16-GAP-00006-datablock-Curve.blend"); const curveDesktopPath = path.join(root, "tests/golden/M16-GAP-00006/curve-desktop-report.json"); fs.mkdirSync(path.dirname(curveDesktopPath), { recursive: true }); const curveDesktop = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-curve-desktop.py"), "--", curveFixture, curveDesktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); assert.equal(curveDesktop.status, 0, `${curveDesktop.stdout ?? ""}\n${curveDesktop.stderr ?? ""}`); const desktopEvidence = JSON.parse(fs.readFileSync(curveDesktopPath, "utf8")); const curveEngine = await factory({ wasmBinary }); const curveHandle = curveEngine._web_engine_create(); open(curveEngine, curveHandle, fs.readFileSync(curveFixture)); const nonMesh = snapshot(curveEngine, curveHandle).nonMeshData?.find((value) => value.id === "curve:WebGapCurve"); assert.ok(nonMesh); assert.equal(nonMesh.geometryStatus, "available"); assert.equal(nonMesh.splineCount, 1); assert.equal(nonMesh.pointCount, 3); assert.deepEqual(nonMesh.splineTypes, ["BEZIER"]); assert.deepEqual(nonMesh.splineOffsets, [0, 3]); assert.equal(nonMesh.controlPoints.length, 9); const saved = output(curveEngine, curveHandle, curveEngine._web_engine_save_blend, true); const reopened = curveEngine._web_engine_create(); open(curveEngine, reopened, saved); const after = snapshot(curveEngine, reopened).nonMeshData?.find((value) => value.id === nonMesh.id); assert.deepEqual(after, nonMesh); const report = { schemaVersion: 1, task: "M16-GAP-00006", operation: "CURVE_DATABLOCK_LOCAL_EXACT", fixture: { path: path.relative(root, curveFixture).replaceAll(path.sep, "/"), sha256: desktopEvidence.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, curveDesktopPath).replaceAll(path.sep, "/") }, wasm: { status: "EXACT", curveId: nonMesh.id, splineCount: nonMesh.splineCount, pointCount: nonMesh.pointCount, splineTypes: nonMesh.splineTypes }, saveReopen: "EXACT", nextTask: "M16-GAP-00007" }; const reportPath = path.join(root, "tests/golden/M16-GAP-00006/curve-local-exact-report.json"); fs.mkdirSync(path.dirname(reportPath), { recursive: true }); fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); process.stdout.write(`generated-gap-ok task=${task} curve=${nonMesh.id} splines=${nonMesh.splineCount} points=${nonMesh.pointCount} desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00007") { + const curvesFixture = path.join(root, "tests/files/web/generated/M16-GAP-00007-datablock-Curves.blend"); const curvesDesktopPath = path.join(root, "tests/golden/M16-GAP-00007/curves-desktop-report.json"); fs.mkdirSync(path.dirname(curvesDesktopPath), { recursive: true }); const desktopRun = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-curves-desktop.py"), "--", curvesFixture, curvesDesktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); assert.equal(desktopRun.status, 0, `${desktopRun.stdout ?? ""}\n${desktopRun.stderr ?? ""}`); const desktopEvidence = JSON.parse(fs.readFileSync(curvesDesktopPath, "utf8")); const curvesEngine = await factory({ wasmBinary }); const curvesHandle = curvesEngine._web_engine_create(); open(curvesEngine, curvesHandle, fs.readFileSync(curvesFixture)); const curvesData = snapshot(curvesEngine, curvesHandle).nonMeshData?.find((value) => value.id === "curves:WebGapCurves"); assert.ok(curvesData); assert.equal(curvesData.geometryStatus, "available"); assert.ok(curvesData.pointCount >= 4); assert.ok(curvesData.splineCount >= 1); assert.ok(Array.isArray(curvesData.splineOffsets)); const saved = output(curvesEngine, curvesHandle, curvesEngine._web_engine_save_blend, true); const reopened = curvesEngine._web_engine_create(); open(curvesEngine, reopened, saved); const after = snapshot(curvesEngine, reopened).nonMeshData?.find((value) => value.id === curvesData.id); assert.deepEqual(after, curvesData); const report = { schemaVersion: 1, task: "M16-GAP-00007", operation: "CURVES_DATABLOCK_LOCAL_EXACT", fixture: { path: path.relative(root, curvesFixture).replaceAll(path.sep, "/"), sha256: desktopEvidence.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, curvesDesktopPath).replaceAll(path.sep, "/") }, wasm: { status: "EXACT", curvesId: curvesData.id, pointCount: curvesData.pointCount, splineCount: curvesData.splineCount }, saveReopen: "EXACT", nextTask: "M16-GAP-00008" }; const reportPath = path.join(root, "tests/golden/M16-GAP-00007/curves-local-exact-report.json"); fs.mkdirSync(path.dirname(reportPath), { recursive: true }); fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); process.stdout.write(`generated-gap-ok task=${task} curves=${curvesData.id} points=${curvesData.pointCount} desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00008") { + const styleFixture = path.join(root, "tests/files/web/generated/M16-GAP-00008-datablock-FreestyleLineStyle.blend"); const styleDesktopPath = path.join(root, "tests/golden/M16-GAP-00008/freestyle-desktop-report.json"); fs.mkdirSync(path.dirname(styleDesktopPath), { recursive: true }); const desktopRun = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-freestyle-desktop.py"), "--", styleFixture, styleDesktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); assert.equal(desktopRun.status, 0, `${desktopRun.stdout ?? ""}\n${desktopRun.stderr ?? ""}`); const desktopEvidence = JSON.parse(fs.readFileSync(styleDesktopPath, "utf8")); const styleEngine = await factory({ wasmBinary }); const styleHandle = styleEngine._web_engine_create(); open(styleEngine, styleHandle, fs.readFileSync(styleFixture)); const lineStyle = snapshot(styleEngine, styleHandle).lineStyles?.find((value) => value.id === "line-style:WebGapLineStyle"); assert.ok(lineStyle); assert.ok(Math.abs(lineStyle.alpha - 0.75) < 1e-5); assert.ok(Math.abs(lineStyle.thickness - 2.5) < 1e-5); assert.deepEqual(lineStyle.color.map((value) => Number(value.toFixed(3))), [0.2, 0.4, 0.8]); assert.equal(lineStyle.dashed, true); const saved = output(styleEngine, styleHandle, styleEngine._web_engine_save_blend, true); const reopened = styleEngine._web_engine_create(); open(styleEngine, reopened, saved); const after = snapshot(styleEngine, reopened).lineStyles?.find((value) => value.id === lineStyle.id); assert.deepEqual(after, lineStyle); const report = { schemaVersion: 1, task: "M16-GAP-00008", operation: "FREESTYLE_LINE_STYLE_LOCAL_EXACT", fixture: { path: path.relative(root, styleFixture).replaceAll(path.sep, "/"), sha256: desktopEvidence.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, styleDesktopPath).replaceAll(path.sep, "/") }, wasm: { status: "EXACT", lineStyleId: lineStyle.id, thickness: lineStyle.thickness, modifierCounts: lineStyle.modifierCounts }, saveReopen: "EXACT", nextTask: "M16-GAP-00009" }; const reportPath = path.join(root, "tests/golden/M16-GAP-00008/freestyle-local-exact-report.json"); fs.mkdirSync(path.dirname(reportPath), { recursive: true }); fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); process.stdout.write(`generated-gap-ok task=${task} lineStyle=${lineStyle.id} thickness=${lineStyle.thickness} desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00009") { + const gpFixture = path.join(root, "tests/files/web/generated/M16-GAP-00009-datablock-GreasePencil.blend"); const gpDesktopPath = path.join(root, "tests/golden/M16-GAP-00009/grease-pencil-desktop-report.json"); fs.mkdirSync(path.dirname(gpDesktopPath), { recursive: true }); const desktopRun = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-grease-pencil-desktop.py"), "--", gpFixture, gpDesktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); assert.equal(desktopRun.status, 0, `${desktopRun.stdout ?? ""}\n${desktopRun.stderr ?? ""}`); const desktopEvidence = JSON.parse(fs.readFileSync(gpDesktopPath, "utf8")); const gpEngine = await factory({ wasmBinary }); const gpHandle = gpEngine._web_engine_create(); open(gpEngine, gpHandle, fs.readFileSync(gpFixture)); const gpSnapshot = snapshot(gpEngine, gpHandle); const gp = gpSnapshot.greasePencils?.find((value) => value.name === "GreasePencilData"); assert.ok(gp); assert.ok(gp.layers?.length >= 1); assert.ok(gp.layers[0].frames?.length >= 1); const saved = output(gpEngine, gpHandle, gpEngine._web_engine_save_blend, true); const reopened = gpEngine._web_engine_create(); open(gpEngine, reopened, saved); const after = snapshot(gpEngine, reopened).greasePencils?.find((value) => value.name === gp.name); assert.deepEqual(after, gp); const report = { schemaVersion: 1, task: "M16-GAP-00009", operation: "GREASE_PENCIL_DATABLOCK_LOCAL_EXACT", fixture: { path: path.relative(root, gpFixture).replaceAll(path.sep, "/"), sha256: desktopEvidence.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, gpDesktopPath).replaceAll(path.sep, "/") }, wasm: { status: "EXACT", dataName: gp.name, layerCount: gp.layers.length, frameCount: gp.layers.reduce((sum, layer) => sum + layer.frames.length, 0) }, saveReopen: "EXACT", nextTask: "M16-GAP-00010" }; const reportPath = path.join(root, "tests/golden/M16-GAP-00009/grease-pencil-local-exact-report.json"); fs.mkdirSync(path.dirname(reportPath), { recursive: true }); fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); process.stdout.write(`generated-gap-ok task=${task} greasePencil=${gp.name} layers=${gp.layers.length} desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00010") { + const latticeFixture = path.join(root, "tests/files/web/generated/M16-GAP-00010-datablock-Lattice.blend"); + const latticeDesktopPath = path.join(root, "tests/golden/M16-GAP-00010/lattice-desktop-report.json"); + fs.mkdirSync(path.dirname(latticeDesktopPath), { recursive: true }); + const desktopRun = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-lattice-desktop.py"), "--", latticeFixture, latticeDesktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(desktopRun.status, 0, `${desktopRun.stdout ?? ""}\n${desktopRun.stderr ?? ""}`); + const desktopEvidence = JSON.parse(fs.readFileSync(latticeDesktopPath, "utf8")); + const latticeEngine = await factory({ wasmBinary }); + const latticeHandle = latticeEngine._web_engine_create(); + open(latticeEngine, latticeHandle, fs.readFileSync(latticeFixture)); + const lattice = snapshot(latticeEngine, latticeHandle).lattices?.find((value) => value.id === "lattice:WebGapLattice"); + assert.ok(lattice); + assert.equal(lattice.status, "AVAILABLE"); + assert.deepEqual(lattice.dimensions, desktopEvidence.lattice.dimensions); + assert.equal(lattice.pointCount, desktopEvidence.lattice.pointCount); + assert.deepEqual(lattice.interpolation, ["KEY_LINEAR", "KEY_CARDINAL", "KEY_BSPLINE"]); + assert.equal(lattice.useOutside, true); + assert.equal(lattice.vertexGroup, "WebGapInfluence"); + assert.deepEqual(lattice.points, desktopEvidence.lattice.points); + const saved = output(latticeEngine, latticeHandle, latticeEngine._web_engine_save_blend, true); + const reopened = latticeEngine._web_engine_create(); + open(latticeEngine, reopened, saved); + const after = snapshot(latticeEngine, reopened).lattices?.find((value) => value.id === lattice.id); + assert.deepEqual(after, lattice); + const report = { schemaVersion: 1, task: "M16-GAP-00010", operation: "LATTICE_DATABLOCK_LOCAL_EXACT", fixture: { path: path.relative(root, latticeFixture).replaceAll(path.sep, "/"), sha256: desktopEvidence.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, latticeDesktopPath).replaceAll(path.sep, "/"), saveReopen: desktopEvidence.saveReopen }, wasm: { status: "EXACT", latticeId: lattice.id, dimensions: lattice.dimensions, pointCount: lattice.pointCount, interpolation: lattice.interpolation, pointHash: crypto.createHash("sha256").update(JSON.stringify(lattice.points)).digest("hex") }, saveReopen: "EXACT", nextTask: "M16-GAP-00011" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00010/lattice-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} lattice=${lattice.id} points=${lattice.pointCount} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00011") { + const libraryFixture = path.join(root, "tests/files/web/generated/M16-GAP-00011-datablock-Library.blend"); + const libraryDesktopPath = path.join(root, "tests/golden/M16-GAP-00011/library-desktop-report.json"); + fs.mkdirSync(path.dirname(libraryDesktopPath), { recursive: true }); + const desktopRun = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-library-desktop.py"), "--", libraryFixture, libraryDesktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(desktopRun.status, 0, `${desktopRun.stdout ?? ""}\n${desktopRun.stderr ?? ""}`); + const desktopEvidence = JSON.parse(fs.readFileSync(libraryDesktopPath, "utf8")); + assert.equal(desktopEvidence.saveReopen, "EXACT"); + const libraryEngine = await factory({ wasmBinary }); + const libraryHandle = libraryEngine._web_engine_create(); + open(libraryEngine, libraryHandle, fs.readFileSync(libraryFixture)); + const librarySnapshot = snapshot(libraryEngine, libraryHandle); + assert.equal(librarySnapshot.libraryStatus, "AVAILABLE"); + assert.ok(Array.isArray(librarySnapshot.libraries)); + assert.equal(librarySnapshot.libraries.length, 1); + const library = librarySnapshot.libraries[0]; + assert.equal(library.id, desktopEvidence.library.id); + assert.equal(library.name, desktopEvidence.library.name); + assert.equal(library.sourcePath, "//WebGapLibrary.blend"); + assert.equal(library.packed, false); + assert.equal(library.status, "EXTERNAL_REQUIRED"); + assert.equal(library.errorCode, "LINKED_LIBRARY_RESOURCE_REQUIRED"); + assert.deepEqual(library.dependencyIds, []); + assert.equal(library.readOnly, true); + const saved = output(libraryEngine, libraryHandle, libraryEngine._web_engine_save_blend, true); + assert.ok(saved.byteLength > 0); + const reopened = libraryEngine._web_engine_create(); + open(libraryEngine, reopened, saved); + const after = snapshot(libraryEngine, reopened); + assert.deepEqual(after.libraries, librarySnapshot.libraries); + assert.equal(after.libraryStatus, librarySnapshot.libraryStatus); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const malformedPointer = libraryEngine._malloc(malformed.byteLength); + let malformedResult; + try { + libraryEngine.HEAPU8.set(malformed, malformedPointer); + malformedResult = libraryEngine._web_engine_open_blend(libraryHandle, malformedPointer, malformed.byteLength); + } + finally { + libraryEngine._free(malformedPointer); + } + assert.notEqual(malformedResult, 0); + assert.deepEqual(snapshot(libraryEngine, libraryHandle), librarySnapshot); + libraryEngine._web_engine_destroy(libraryHandle); + libraryEngine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task: "M16-GAP-00011", operation: "LIBRARY_DATABLOCK_LOCAL_EXACT", fixture: { path: path.relative(root, libraryFixture).replaceAll(path.sep, "/"), sha256: desktopEvidence.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, libraryDesktopPath).replaceAll(path.sep, "/"), saveReopen: desktopEvidence.saveReopen }, wasm: { status: "EXACT", libraryId: library.id, sourcePath: library.sourcePath, libraryStatus: library.status, dependencyIds: library.dependencyIds }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00012" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00011/library-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} library=${library.id} status=${library.status} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00012") { + const lightFixture = path.join(root, "tests/files/web/generated/M16-GAP-00012-datablock-Light.blend"); + const lightDesktopPath = path.join(root, "tests/golden/M16-GAP-00012/light-desktop-report.json"); + fs.mkdirSync(path.dirname(lightDesktopPath), { recursive: true }); + const desktopRun = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-light-desktop.py"), "--", lightFixture, lightDesktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(desktopRun.status, 0, `${desktopRun.stdout ?? ""}\n${desktopRun.stderr ?? ""}`); + const desktopEvidence = JSON.parse(fs.readFileSync(lightDesktopPath, "utf8")); + assert.equal(desktopEvidence.saveReopen, "EXACT"); + const lightEngine = await factory({ wasmBinary }); + const lightHandle = lightEngine._web_engine_create(); + open(lightEngine, lightHandle, fs.readFileSync(lightFixture)); + const lightSnapshot = snapshot(lightEngine, lightHandle); + const light = lightSnapshot.lights?.find((value) => value.id === "light:WebGapLight"); + assert.ok(light); + const normalizedLight = { ...light }; + for (const field of ["energy", "exposure", "temperature", "radius", "spotAngle", "spotBlend", "areaSize", "areaSizeY", "areaSpread", "sunAngle"]) normalizedLight[field] = Number(normalizedLight[field].toFixed(6)); + normalizedLight.color = normalizedLight.color.map((value) => Number(value.toFixed(6))); + assert.deepEqual(normalizedLight, desktopEvidence.light); + assert.equal(light.lightType, 4); + assert.deepEqual(light.color, [0.25, 0.5, 0.75]); + const closeLight = (actual, expected, label) => assert.ok(Math.abs(actual - expected) <= 1e-5, `${label}: ${actual} != ${expected}`); + closeLight(light.energy, 400, "energy"); + closeLight(light.exposure, 1, "exposure"); + closeLight(light.temperature, 5000, "temperature"); + assert.equal(light.useTemperature, true); + assert.equal(light.castsShadow, false); + closeLight(light.radius, 0.3, "radius"); + assert.equal(light.areaShape, 1); + closeLight(light.areaSize, 3, "areaSize"); + closeLight(light.areaSizeY, 2, "areaSizeY"); + closeLight(light.areaSpread, 2.4, "areaSpread"); + closeLight(light.sunAngle, 0.00918, "sunAngle"); + const saved = output(lightEngine, lightHandle, lightEngine._web_engine_save_blend, true); + const reopened = lightEngine._web_engine_create(); + open(lightEngine, reopened, saved); + const after = snapshot(lightEngine, reopened); + assert.deepEqual(after.lights, lightSnapshot.lights); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const malformedPointer = lightEngine._malloc(malformed.byteLength); + let malformedResult; + try { + lightEngine.HEAPU8.set(malformed, malformedPointer); + malformedResult = lightEngine._web_engine_open_blend(lightHandle, malformedPointer, malformed.byteLength); + } + finally { + lightEngine._free(malformedPointer); + } + assert.notEqual(malformedResult, 0); + assert.deepEqual(snapshot(lightEngine, lightHandle), lightSnapshot); + lightEngine._web_engine_destroy(lightHandle); + lightEngine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task: "M16-GAP-00012", operation: "LIGHT_DATABLOCK_LOCAL_EXACT", fixture: { path: path.relative(root, lightFixture).replaceAll(path.sep, "/"), sha256: desktopEvidence.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, lightDesktopPath).replaceAll(path.sep, "/"), saveReopen: desktopEvidence.saveReopen }, wasm: { status: "EXACT", lightId: light.id, lightType: light.lightType, fields: { energy: light.energy, exposure: light.exposure, temperature: light.temperature, useTemperature: light.useTemperature, castsShadow: light.castsShadow, areaSize: light.areaSize, areaSizeY: light.areaSizeY } }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00013" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00012/light-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} light=${light.id} type=${light.lightType} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00013") { + const materialFixture = path.join(root, "tests/files/web/generated/M16-GAP-00013-datablock-Material.blend"); + const materialDesktopPath = path.join(root, "tests/golden/M16-GAP-00013/material-desktop-report.json"); + fs.mkdirSync(path.dirname(materialDesktopPath), { recursive: true }); + const desktopRun = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-material-desktop.py"), "--", materialFixture, materialDesktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(desktopRun.status, 0, `${desktopRun.stdout ?? ""}\n${desktopRun.stderr ?? ""}`); + const desktopEvidence = JSON.parse(fs.readFileSync(materialDesktopPath, "utf8")); + assert.equal(desktopEvidence.saveReopen, "EXACT"); + const materialEngine = await factory({ wasmBinary }); + const materialHandle = materialEngine._web_engine_create(); + open(materialEngine, materialHandle, fs.readFileSync(materialFixture)); + const materialSnapshot = snapshot(materialEngine, materialHandle); + const material = materialSnapshot.materials?.find((value) => value.id === "material:WebGapMaterial"); + assert.ok(material); + const closeMaterial = (actual, expected, label) => assert.ok(Math.abs(actual - expected) <= 1e-5, `${label}: ${actual} != ${expected}`); + const closeArray = (actual, expected, label) => expected.forEach((value, index) => closeMaterial(actual[index], value, `${label}[${index}]`)); + closeArray(material.baseColor, [0.2, 0.4, 0.8, 0.9], "baseColor"); + closeMaterial(material.roughness, 0.6, "roughness"); + closeMaterial(material.metallic, 0.35, "metallic"); + closeArray(material.emissionColor, [0.05, 0.1, 0.2, 1], "emissionColor"); + closeMaterial(material.alpha, 0.9, "alpha"); + closeMaterial(material.ior, 1.6, "ior"); + closeMaterial(material.specularIORLevel, 0.35, "specularIORLevel"); + closeMaterial(material.transmissionWeight, 0.27, "transmissionWeight"); + closeMaterial(material.coatWeight, 0.64, "coatWeight"); + closeMaterial(material.coatRoughness, 0.12, "coatRoughness"); + closeMaterial(material.emissionStrength, 3.5, "emissionStrength"); + assert.ok(material.nodes?.some((node) => node.type === "PRINCIPLED")); + assert.ok(material.nodes?.some((node) => node.type === "OUTPUT")); + assert.equal(material.links?.length, 1); + assert.match(material.shaderGraphHash, /^[0-9a-f]{64}$/); + const saved = output(materialEngine, materialHandle, materialEngine._web_engine_save_blend, true); + const reopened = materialEngine._web_engine_create(); + open(materialEngine, reopened, saved); + const after = snapshot(materialEngine, reopened); + assert.deepEqual(after.materials, materialSnapshot.materials); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const malformedPointer = materialEngine._malloc(malformed.byteLength); + let malformedResult; + try { + materialEngine.HEAPU8.set(malformed, malformedPointer); + malformedResult = materialEngine._web_engine_open_blend(materialHandle, malformedPointer, malformed.byteLength); + } + finally { + materialEngine._free(malformedPointer); + } + assert.notEqual(malformedResult, 0); + assert.deepEqual(snapshot(materialEngine, materialHandle), materialSnapshot); + materialEngine._web_engine_destroy(materialHandle); + materialEngine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task: "M16-GAP-00013", operation: "MATERIAL_DATABLOCK_LOCAL_EXACT", fixture: { path: path.relative(root, materialFixture).replaceAll(path.sep, "/"), sha256: desktopEvidence.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, materialDesktopPath).replaceAll(path.sep, "/"), saveReopen: desktopEvidence.saveReopen }, wasm: { status: "EXACT", materialId: material.id, shaderGraphHash: material.shaderGraphHash, nodeCount: material.nodes.length, linkCount: material.links.length }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00014" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00013/material-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} material=${material.id} nodes=${material.nodes.length} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00014") { + const meshFixture = path.join(root, "tests/files/web/generated/M16-GAP-00014-datablock-Mesh.blend"); + const meshDesktopPath = path.join(root, "tests/golden/M16-GAP-00014/mesh-desktop-report.json"); + fs.mkdirSync(path.dirname(meshDesktopPath), { recursive: true }); + const desktopRun = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-mesh-desktop.py"), "--", meshFixture, meshDesktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(desktopRun.status, 0, `${desktopRun.stdout ?? ""}\n${desktopRun.stderr ?? ""}`); + const desktopEvidence = JSON.parse(fs.readFileSync(meshDesktopPath, "utf8")); + assert.equal(desktopEvidence.saveReopen, "EXACT"); + const meshEngine = await factory({ wasmBinary }); + const meshHandle = meshEngine._web_engine_create(); + open(meshEngine, meshHandle, fs.readFileSync(meshFixture)); + const meshSnapshot = snapshot(meshEngine, meshHandle); + const mesh = meshSnapshot.meshes?.find((value) => value.id === "mesh:WebGapMesh"); + assert.ok(mesh); + assert.equal(mesh.geometryStatus, "available"); + assert.equal(mesh.vertexCount, desktopEvidence.mesh.vertexCount); + assert.equal(mesh.edgeCount, desktopEvidence.mesh.edgeCount); + assert.equal(mesh.faceCount, desktopEvidence.mesh.faceCount); + assert.equal(mesh.cornerCount, desktopEvidence.mesh.cornerCount); + assert.equal(mesh.triangleCount, desktopEvidence.mesh.triangleCount); + assert.deepEqual(mesh.positions.map((value) => Number(value.toFixed(6))), desktopEvidence.mesh.positions); + assert.deepEqual(mesh.indices, desktopEvidence.mesh.indices); + assert.deepEqual(mesh.uvLayers?.map((layer) => layer.name), ["WebGapUV"]); + const saved = output(meshEngine, meshHandle, meshEngine._web_engine_save_blend, true); + const reopened = meshEngine._web_engine_create(); + open(meshEngine, reopened, saved); + const after = snapshot(meshEngine, reopened).meshes?.find((value) => value.id === mesh.id); + assert.deepEqual(after, mesh); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const malformedPointer = meshEngine._malloc(malformed.byteLength); + let malformedResult; + try { + meshEngine.HEAPU8.set(malformed, malformedPointer); + malformedResult = meshEngine._web_engine_open_blend(meshHandle, malformedPointer, malformed.byteLength); + } + finally { + meshEngine._free(malformedPointer); + } + assert.notEqual(malformedResult, 0); + assert.deepEqual(snapshot(meshEngine, meshHandle), meshSnapshot); + meshEngine._web_engine_destroy(meshHandle); + meshEngine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task: "M16-GAP-00014", operation: "MESH_DATABLOCK_LOCAL_EXACT", fixture: { path: path.relative(root, meshFixture).replaceAll(path.sep, "/"), sha256: desktopEvidence.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, meshDesktopPath).replaceAll(path.sep, "/"), saveReopen: desktopEvidence.saveReopen }, wasm: { status: "EXACT", meshId: mesh.id, vertexCount: mesh.vertexCount, triangleCount: mesh.triangleCount, uvLayers: mesh.uvLayers?.map((layer) => layer.name) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00015" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00014/mesh-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} mesh=${mesh.id} vertices=${mesh.vertexCount} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00015") { + const metaballFixture = path.join(root, "tests/files/web/generated/M16-GAP-00015-datablock-MetaBall.blend"); + const metaballDesktopPath = path.join(root, "tests/golden/M16-GAP-00015/metaball-desktop-report.json"); + fs.mkdirSync(path.dirname(metaballDesktopPath), { recursive: true }); + const desktopRun = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-metaball-desktop.py"), "--", metaballFixture, metaballDesktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(desktopRun.status, 0, `${desktopRun.stdout ?? ""}\n${desktopRun.stderr ?? ""}`); + const desktopEvidence = JSON.parse(fs.readFileSync(metaballDesktopPath, "utf8")); + const metaballEngine = await factory({ wasmBinary }); + const metaballHandle = metaballEngine._web_engine_create(); + open(metaballEngine, metaballHandle, fs.readFileSync(metaballFixture)); + const metaballSnapshot = snapshot(metaballEngine, metaballHandle); + const metaball = metaballSnapshot.nonMeshData?.find((value) => value.id === "metaball:WebGapMetaBall"); + assert.ok(metaball); + assert.equal(metaball.geometryStatus, "available"); + assert.equal(metaball.pointCount, 2); + assert.deepEqual(metaball.elements.map((item) => item.position.map((value) => Number(value.toFixed(6)))), desktopEvidence.metaball.elements.map((item) => item.position)); + metaball.elements.forEach((item, index) => { assert.ok(Math.abs(item.radius - desktopEvidence.metaball.elements[index].radius) <= 1e-5); item.scale.forEach((value, axis) => assert.ok(Math.abs(value - desktopEvidence.metaball.elements[index].scale[axis]) <= 1e-5)); }); + const saved = output(metaballEngine, metaballHandle, metaballEngine._web_engine_save_blend, true); + const reopened = metaballEngine._web_engine_create(); + open(metaballEngine, reopened, saved); + assert.deepEqual(snapshot(metaballEngine, reopened).nonMeshData?.find((value) => value.id === metaball.id), metaball); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const malformedPointer = metaballEngine._malloc(malformed.byteLength); let malformedResult; + try { metaballEngine.HEAPU8.set(malformed, malformedPointer); malformedResult = metaballEngine._web_engine_open_blend(metaballHandle, malformedPointer, malformed.byteLength); } finally { metaballEngine._free(malformedPointer); } + assert.notEqual(malformedResult, 0); assert.deepEqual(snapshot(metaballEngine, metaballHandle), metaballSnapshot); + metaballEngine._web_engine_destroy(metaballHandle); metaballEngine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task: "M16-GAP-00015", operation: "METABALL_DATABLOCK_LOCAL_EXACT", fixture: { path: path.relative(root, metaballFixture).replaceAll(path.sep, "/"), sha256: desktopEvidence.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, metaballDesktopPath).replaceAll(path.sep, "/"), saveReopen: desktopEvidence.saveReopen }, wasm: { status: "EXACT", metaballId: metaball.id, pointCount: metaball.pointCount, elementHash: crypto.createHash("sha256").update(JSON.stringify(metaball.elements)).digest("hex") }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00016" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00015/metaball-local-exact-report.json"); fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); process.stdout.write(`generated-gap-ok task=${task} metaball=${metaball.id} points=${metaball.pointCount} desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00016") { + const nodeTreeFixture = path.join(root, "tests/files/web/generated/M16-GAP-00016-datablock-NodeTree.blend"); + const nodeTreeDesktopPath = path.join(root, "tests/golden/M16-GAP-00016/nodetree-desktop-report.json"); + fs.mkdirSync(path.dirname(nodeTreeDesktopPath), { recursive: true }); + const desktopRun = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-nodetree-desktop.py"), "--", nodeTreeFixture, nodeTreeDesktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(desktopRun.status, 0, `${desktopRun.stdout ?? ""}\n${desktopRun.stderr ?? ""}`); + const desktopEvidence = JSON.parse(fs.readFileSync(nodeTreeDesktopPath, "utf8")); + const nodeTreeEngine = await factory({ wasmBinary }); + const nodeTreeHandle = nodeTreeEngine._web_engine_create(); + open(nodeTreeEngine, nodeTreeHandle, fs.readFileSync(nodeTreeFixture)); + const nodeTreeSnapshot = snapshot(nodeTreeEngine, nodeTreeHandle); + const material = nodeTreeSnapshot.materials?.find((value) => value.id === "material:WebGapNodeTreeMaterial"); + assert.ok(material); + assert.equal(material.nodes?.length, desktopEvidence.nodeTree.nodeTypes.length); + assert.equal(material.links?.length, desktopEvidence.nodeTree.linkCount); + assert.ok(material.nodes?.some((node) => node.type === "RGB")); + assert.ok(material.nodes?.some((node) => node.type === "PRINCIPLED")); + assert.ok(material.nodes?.some((node) => node.type === "OUTPUT")); + assert.match(material.shaderGraphHash, /^[0-9a-f]{64}$/); + const saved = output(nodeTreeEngine, nodeTreeHandle, nodeTreeEngine._web_engine_save_blend, true); + const reopened = nodeTreeEngine._web_engine_create(); + open(nodeTreeEngine, reopened, saved); + const after = snapshot(nodeTreeEngine, reopened).materials?.find((value) => value.id === material.id); + assert.deepEqual(after, material); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const malformedPointer = nodeTreeEngine._malloc(malformed.byteLength); let malformedResult; + try { nodeTreeEngine.HEAPU8.set(malformed, malformedPointer); malformedResult = nodeTreeEngine._web_engine_open_blend(nodeTreeHandle, malformedPointer, malformed.byteLength); } finally { nodeTreeEngine._free(malformedPointer); } + assert.notEqual(malformedResult, 0); assert.deepEqual(snapshot(nodeTreeEngine, nodeTreeHandle), nodeTreeSnapshot); + nodeTreeEngine._web_engine_destroy(nodeTreeHandle); nodeTreeEngine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task: "M16-GAP-00016", operation: "NODETREE_DATABLOCK_LOCAL_EXACT", fixture: { path: path.relative(root, nodeTreeFixture).replaceAll(path.sep, "/"), sha256: desktopEvidence.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, nodeTreeDesktopPath).replaceAll(path.sep, "/"), saveReopen: desktopEvidence.saveReopen }, wasm: { status: "EXACT", nodeTreeId: "nodetree:WebGapNodeTreeMaterial", nodeCount: material.nodes.length, linkCount: material.links.length, shaderGraphHash: material.shaderGraphHash }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00017" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00016/nodetree-local-exact-report.json"); fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); process.stdout.write(`generated-gap-ok task=${task} nodeTree=${report.wasm.nodeTreeId} nodes=${material.nodes.length} desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00017") { + const objectFixture = path.join(root, "tests/files/web/generated/M16-GAP-00017-datablock-Object.blend"); + const objectDesktopPath = path.join(root, "tests/golden/M16-GAP-00017/object-desktop-report.json"); + fs.mkdirSync(path.dirname(objectDesktopPath), { recursive: true }); + const desktopRun = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-object-desktop.py"), "--", objectFixture, objectDesktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(desktopRun.status, 0, `${desktopRun.stdout ?? ""}\n${desktopRun.stderr ?? ""}`); + const desktopEvidence = JSON.parse(fs.readFileSync(objectDesktopPath, "utf8")); + const objectEngine = await factory({ wasmBinary }); + const objectHandle = objectEngine._web_engine_create(); + open(objectEngine, objectHandle, fs.readFileSync(objectFixture)); + const objectSnapshot = snapshot(objectEngine, objectHandle); + const object = objectSnapshot.nodes?.find((value) => value.id === "object:WebGapObject"); + assert.ok(object); + assert.equal(object.type, "EMPTY"); + assert.equal(object.visible, desktopEvidence.object.visible); + assert.equal(object.selectable, desktopEvidence.object.selectable); + assert.deepEqual(object.transform.translation.map((value) => Number(value.toFixed(6))), desktopEvidence.object.location); + object.transform.rotationEuler.forEach((value, index) => assert.ok(Math.abs(value - desktopEvidence.object.rotationEuler[index]) <= 1e-5)); + object.transform.scale.forEach((value, index) => assert.ok(Math.abs(value - desktopEvidence.object.scale[index]) <= 1e-5)); + assert.equal(object.parentId, null); + const saved = output(objectEngine, objectHandle, objectEngine._web_engine_save_blend, true); + const reopened = objectEngine._web_engine_create(); + open(objectEngine, reopened, saved); + assert.deepEqual(snapshot(objectEngine, reopened).nodes?.find((value) => value.id === object.id), object); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const malformedPointer = objectEngine._malloc(malformed.byteLength); let malformedResult; + try { objectEngine.HEAPU8.set(malformed, malformedPointer); malformedResult = objectEngine._web_engine_open_blend(objectHandle, malformedPointer, malformed.byteLength); } finally { objectEngine._free(malformedPointer); } + assert.notEqual(malformedResult, 0); assert.deepEqual(snapshot(objectEngine, objectHandle), objectSnapshot); + objectEngine._web_engine_destroy(objectHandle); objectEngine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task: "M16-GAP-00017", operation: "OBJECT_DATABLOCK_LOCAL_EXACT", fixture: { path: path.relative(root, objectFixture).replaceAll(path.sep, "/"), sha256: desktopEvidence.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, objectDesktopPath).replaceAll(path.sep, "/"), saveReopen: desktopEvidence.saveReopen }, wasm: { status: "EXACT", objectId: object.id, type: object.type, translation: object.transform.translation, scale: object.transform.scale }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00018" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00017/object-local-exact-report.json"); fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); process.stdout.write(`generated-gap-ok task=${task} object=${object.id} type=${object.type} desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00018") { + const particleSettingsFixture = path.join(root, "tests/files/web/generated/M16-GAP-00018-datablock-ParticleSettings.blend"); + const particleSettingsDesktopPath = path.join(root, "tests/golden/M16-GAP-00018/particle-settings-desktop-report.json"); + fs.mkdirSync(path.dirname(particleSettingsDesktopPath), { recursive: true }); + const desktopRun = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-particle-settings-desktop.py"), "--", particleSettingsFixture, particleSettingsDesktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(desktopRun.status, 0, `${desktopRun.stdout ?? ""}\n${desktopRun.stderr ?? ""}`); + const desktopEvidence = JSON.parse(fs.readFileSync(particleSettingsDesktopPath, "utf8")); + assert.equal(desktopEvidence.saveReopen, "EXACT"); + const particleSettingsEngine = await factory({ wasmBinary }); + const particleSettingsHandle = particleSettingsEngine._web_engine_create(); + open(particleSettingsEngine, particleSettingsHandle, fs.readFileSync(particleSettingsFixture)); + const particleSettingsSnapshot = snapshot(particleSettingsEngine, particleSettingsHandle); + const particleSettings = particleSettingsSnapshot.particleSettings?.find((value) => value.id === "particle-settings:WebGapParticleSettings"); + assert.ok(particleSettings); + assert.deepEqual(particleSettings, desktopEvidence.particleSettings); + assert.equal(particleSettings.type, 0); + assert.equal(particleSettings.from, 0); + assert.equal(particleSettings.distribution, 0); + assert.equal(particleSettings.physicsType, 0); + assert.equal(particleSettings.totalParticles, 128); + assert.equal(particleSettings.start, 4); + assert.equal(particleSettings.end, 96); + assert.equal(particleSettings.lifetime, 32); + assert.equal(particleSettings.size, 0.125); + assert.equal(particleSettings.drawSize, 0.25); + const saved = output(particleSettingsEngine, particleSettingsHandle, particleSettingsEngine._web_engine_save_blend, true); + const reopened = particleSettingsEngine._web_engine_create(); + open(particleSettingsEngine, reopened, saved); + const after = snapshot(particleSettingsEngine, reopened).particleSettings?.find((value) => value.id === particleSettings.id); + assert.deepEqual(after, particleSettings); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const malformedPointer = particleSettingsEngine._malloc(malformed.byteLength); + let malformedResult; + try { + particleSettingsEngine.HEAPU8.set(malformed, malformedPointer); + malformedResult = particleSettingsEngine._web_engine_open_blend(particleSettingsHandle, malformedPointer, malformed.byteLength); + } + finally { + particleSettingsEngine._free(malformedPointer); + } + assert.notEqual(malformedResult, 0); + assert.deepEqual(snapshot(particleSettingsEngine, particleSettingsHandle), particleSettingsSnapshot); + particleSettingsEngine._web_engine_destroy(particleSettingsHandle); + particleSettingsEngine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task: "M16-GAP-00018", operation: "PARTICLE_SETTINGS_DATABLOCK_LOCAL_EXACT", fixture: { path: path.relative(root, particleSettingsFixture).replaceAll(path.sep, "/"), sha256: desktopEvidence.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, particleSettingsDesktopPath).replaceAll(path.sep, "/"), saveReopen: desktopEvidence.saveReopen }, wasm: { status: "EXACT", particleSettingsId: particleSettings.id, fields: { type: particleSettings.type, from: particleSettings.from, distribution: particleSettings.distribution, physicsType: particleSettings.physicsType, totalParticles: particleSettings.totalParticles, start: particleSettings.start, end: particleSettings.end, lifetime: particleSettings.lifetime, size: particleSettings.size, drawSize: particleSettings.drawSize } }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00019" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00018/particle-settings-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} particleSettings=${particleSettings.id} count=${particleSettings.totalParticles} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00019") { + const pointCloudFixture = path.join(root, "tests/files/web/generated/M16-GAP-00019-datablock-PointCloud.blend"); + const pointCloudDesktopPath = path.join(root, "tests/golden/M16-GAP-00019/pointcloud-desktop-report.json"); + fs.mkdirSync(path.dirname(pointCloudDesktopPath), { recursive: true }); + const desktopRun = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-pointcloud-desktop.py"), "--", pointCloudFixture, pointCloudDesktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(desktopRun.status, 0, `${desktopRun.stdout ?? ""}\n${desktopRun.stderr ?? ""}`); + const desktopEvidence = JSON.parse(fs.readFileSync(pointCloudDesktopPath, "utf8")); + assert.equal(desktopEvidence.saveReopen, "EXACT"); + const pointCloudEngine = await factory({ wasmBinary }); + const pointCloudHandle = pointCloudEngine._web_engine_create(); + open(pointCloudEngine, pointCloudHandle, fs.readFileSync(pointCloudFixture)); + const pointCloudSnapshot = snapshot(pointCloudEngine, pointCloudHandle); + const pointCloud = pointCloudSnapshot.nonMeshData?.find((value) => value.id === "pointcloud:WebGapPointCloud"); + assert.ok(pointCloud); + assert.equal(pointCloud.type, "POINT_CLOUD"); + assert.equal(pointCloud.geometryStatus, "available"); + assert.equal(pointCloud.pointCount, desktopEvidence.pointCloud.pointCount); + assert.deepEqual(pointCloud.controlPoints, desktopEvidence.pointCloud.controlPoints); + assert.deepEqual(pointCloud.radii, desktopEvidence.pointCloud.radii); + const saved = output(pointCloudEngine, pointCloudHandle, pointCloudEngine._web_engine_save_blend, true); + const reopened = pointCloudEngine._web_engine_create(); + open(pointCloudEngine, reopened, saved); + const after = snapshot(pointCloudEngine, reopened).nonMeshData?.find((value) => value.id === pointCloud.id); + assert.deepEqual(after, pointCloud); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const malformedPointer = pointCloudEngine._malloc(malformed.byteLength); + let malformedResult; + try { + pointCloudEngine.HEAPU8.set(malformed, malformedPointer); + malformedResult = pointCloudEngine._web_engine_open_blend(pointCloudHandle, malformedPointer, malformed.byteLength); + } + finally { + pointCloudEngine._free(malformedPointer); + } + assert.notEqual(malformedResult, 0); + assert.deepEqual(snapshot(pointCloudEngine, pointCloudHandle), pointCloudSnapshot); + pointCloudEngine._web_engine_destroy(pointCloudHandle); + pointCloudEngine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task: "M16-GAP-00019", operation: "POINT_CLOUD_DATABLOCK_LOCAL_EXACT", fixture: { path: path.relative(root, pointCloudFixture).replaceAll(path.sep, "/"), sha256: desktopEvidence.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, pointCloudDesktopPath).replaceAll(path.sep, "/"), saveReopen: desktopEvidence.saveReopen }, wasm: { status: "EXACT", pointCloudId: pointCloud.id, pointCount: pointCloud.pointCount, geometryStatus: pointCloud.geometryStatus, pointHash: crypto.createHash("sha256").update(JSON.stringify(pointCloud.controlPoints)).digest("hex"), radiusHash: crypto.createHash("sha256").update(JSON.stringify(pointCloud.radii)).digest("hex") }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00020" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00019/pointcloud-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} pointCloud=${pointCloud.id} points=${pointCloud.pointCount} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00020") { + const sceneFixture = path.join(root, "tests/files/web/generated/M16-GAP-00020-datablock-Scene.blend"); + const sceneDesktopPath = path.join(root, "tests/golden/M16-GAP-00020/scene-desktop-report.json"); + fs.mkdirSync(path.dirname(sceneDesktopPath), { recursive: true }); + const desktopRun = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-scene-desktop.py"), "--", sceneFixture, sceneDesktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(desktopRun.status, 0, `${desktopRun.stdout ?? ""}\n${desktopRun.stderr ?? ""}`); + const desktopEvidence = JSON.parse(fs.readFileSync(sceneDesktopPath, "utf8")); + assert.equal(desktopEvidence.saveReopen, "EXACT"); + const sceneEngine = await factory({ wasmBinary }); + const sceneHandle = sceneEngine._web_engine_create(); + open(sceneEngine, sceneHandle, fs.readFileSync(sceneFixture)); + const sceneSnapshot = snapshot(sceneEngine, sceneHandle); + const scene = sceneSnapshot.scenes?.find((value) => value.id === "scene:WebGapScene"); + assert.ok(scene); + const expected = desktopEvidence.scene; + assert.equal(scene.name, expected.name); + assert.equal(scene.renderEngine, expected.renderEngine); + assert.equal(sceneSnapshot.frame.current, expected.frameCurrent); + assert.equal(sceneSnapshot.frame.start, expected.frameStart); + assert.equal(sceneSnapshot.frame.end, expected.frameEnd); + assert.equal(sceneSnapshot.coordinateSystem.unitSystem, expected.unitSystem); + assert.equal(sceneSnapshot.coordinateSystem.unitScale, expected.unitScale); + assert.equal(sceneSnapshot.scenes.length, 1); + assert.equal(scene.id, expected.id); + const saved = output(sceneEngine, sceneHandle, sceneEngine._web_engine_save_blend, true); + const reopened = sceneEngine._web_engine_create(); + open(sceneEngine, reopened, saved); + assert.deepEqual(snapshot(sceneEngine, reopened).scenes, sceneSnapshot.scenes); + assert.deepEqual(snapshot(sceneEngine, reopened).frame, sceneSnapshot.frame); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const malformedPointer = sceneEngine._malloc(malformed.byteLength); + let malformedResult; + try { + sceneEngine.HEAPU8.set(malformed, malformedPointer); + malformedResult = sceneEngine._web_engine_open_blend(sceneHandle, malformedPointer, malformed.byteLength); + } + finally { + sceneEngine._free(malformedPointer); + } + assert.notEqual(malformedResult, 0); + assert.deepEqual(snapshot(sceneEngine, sceneHandle), sceneSnapshot); + sceneEngine._web_engine_destroy(sceneHandle); + sceneEngine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task: "M16-GAP-00020", operation: "SCENE_DATABLOCK_LOCAL_EXACT", fixture: { path: path.relative(root, sceneFixture).replaceAll(path.sep, "/"), sha256: desktopEvidence.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, sceneDesktopPath).replaceAll(path.sep, "/"), saveReopen: desktopEvidence.saveReopen }, wasm: { status: "EXACT", sceneId: scene.id, frame: sceneSnapshot.frame, renderEngine: scene.renderEngine, unitSystem: sceneSnapshot.coordinateSystem.unitSystem, unitScale: sceneSnapshot.coordinateSystem.unitScale }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00021" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00020/scene-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} scene=${scene.id} frames=${sceneSnapshot.frame.start}-${sceneSnapshot.frame.end} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00021") { + const screenFixture = path.join(root, "tests/files/web/generated/M16-GAP-00021-datablock-Screen.blend"); + const screenDesktopPath = path.join(root, "tests/golden/M16-GAP-00021/screen-desktop-report.json"); + fs.mkdirSync(path.dirname(screenDesktopPath), { recursive: true }); + const desktopRun = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-screen-desktop.py"), "--", screenFixture, screenDesktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(desktopRun.status, 0, `${desktopRun.stdout ?? ""}\n${desktopRun.stderr ?? ""}`); + const desktopEvidence = JSON.parse(fs.readFileSync(screenDesktopPath, "utf8")); + assert.equal(desktopEvidence.saveReopen, "EXACT"); + const screenEngine = await factory({ wasmBinary }); + const screenHandle = screenEngine._web_engine_create(); + open(screenEngine, screenHandle, fs.readFileSync(screenFixture)); + const screenSnapshot = snapshot(screenEngine, screenHandle); + assert.equal(screenSnapshot.editorWorkflowStatus, "AVAILABLE"); + const workflow = screenSnapshot.editorWorkflow; + const desktopEditors = desktopEvidence.screen.editors.map((editor) => ({DOPESHEET_EDITOR: "DOPE_SHEET", VIEW_3D: "VIEW_3D", OUTLINER: "OUTLINER", PROPERTIES: "PROPERTIES"}[editor] ?? editor)).sort(); + const matchingWorkspace = workflow.workspaces.find((value) => value.areas.length === desktopEvidence.screen.areaCount && value.areas.map((area) => area.editor).sort().join(",") === desktopEditors.join(",")); + assert.ok(matchingWorkspace); + assert.ok(matchingWorkspace.areas.reduce((count, area) => count + area.regions.length, 0) <= desktopEvidence.screen.regionCount); + const saved = output(screenEngine, screenHandle, screenEngine._web_engine_save_blend, true); + const reopened = screenEngine._web_engine_create(); + open(screenEngine, reopened, saved); + assert.deepEqual(snapshot(screenEngine, reopened).editorWorkflow, screenSnapshot.editorWorkflow); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const malformedPointer = screenEngine._malloc(malformed.byteLength); + let malformedResult; + try { + screenEngine.HEAPU8.set(malformed, malformedPointer); + malformedResult = screenEngine._web_engine_open_blend(screenHandle, malformedPointer, malformed.byteLength); + } + finally { + screenEngine._free(malformedPointer); + } + assert.notEqual(malformedResult, 0); + assert.deepEqual(snapshot(screenEngine, screenHandle), screenSnapshot); + screenEngine._web_engine_destroy(screenHandle); + screenEngine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task: "M16-GAP-00021", operation: "SCREEN_DATABLOCK_LOCAL_EXACT", fixture: { path: path.relative(root, screenFixture).replaceAll(path.sep, "/"), sha256: desktopEvidence.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, screenDesktopPath).replaceAll(path.sep, "/"), saveReopen: desktopEvidence.saveReopen }, wasm: { status: "EXACT", workflowStatus: screenSnapshot.editorWorkflowStatus, workspaceId: matchingWorkspace.id, areaCount: matchingWorkspace.areas.length, editorTypes: matchingWorkspace.areas.map((area) => area.editor).sort() }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00022" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00021/screen-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} screen=${desktopEvidence.screen.id} areas=${matchingWorkspace.areas.length} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00022") { + const soundFixture = path.join(root, "tests/files/web/generated/M16-GAP-00022-datablock-Sound.blend"); + const soundDesktopPath = path.join(root, "tests/golden/M16-GAP-00022/sound-desktop-report.json"); + fs.mkdirSync(path.dirname(soundDesktopPath), { recursive: true }); + const desktopRun = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-sound-desktop.py"), "--", soundFixture, soundDesktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(desktopRun.status, 0, `${desktopRun.stdout ?? ""}\n${desktopRun.stderr ?? ""}`); + const desktopEvidence = JSON.parse(fs.readFileSync(soundDesktopPath, "utf8")); + assert.equal(desktopEvidence.saveReopen, "EXACT"); + const soundEngine = await factory({ wasmBinary }); + const soundHandle = soundEngine._web_engine_create(); + open(soundEngine, soundHandle, fs.readFileSync(soundFixture)); + const soundSnapshot = snapshot(soundEngine, soundHandle); + const sound = soundSnapshot.sounds?.find((value) => value.id === "sound:WebGapSound"); + assert.ok(sound); + assert.deepEqual(sound, desktopEvidence.sound); + const saved = output(soundEngine, soundHandle, soundEngine._web_engine_save_blend, true); + assert.ok(saved.byteLength > 0); + const reopened = soundEngine._web_engine_create(); + open(soundEngine, reopened, saved); + const after = snapshot(soundEngine, reopened).sounds?.find((value) => value.id === sound.id); + assert.deepEqual(after, sound); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const malformedPointer = soundEngine._malloc(malformed.byteLength); + let malformedResult; + try { + soundEngine.HEAPU8.set(malformed, malformedPointer); + malformedResult = soundEngine._web_engine_open_blend(soundHandle, malformedPointer, malformed.byteLength); + } + finally { + soundEngine._free(malformedPointer); + } + assert.notEqual(malformedResult, 0); + assert.deepEqual(snapshot(soundEngine, soundHandle), soundSnapshot); + soundEngine._web_engine_destroy(soundHandle); + soundEngine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task: "M16-GAP-00022", operation: "SOUND_DATABLOCK_LOCAL_EXACT", fixture: { path: path.relative(root, soundFixture).replaceAll(path.sep, "/"), sha256: desktopEvidence.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, soundDesktopPath).replaceAll(path.sep, "/"), saveReopen: desktopEvidence.saveReopen }, wasm: { status: "EXACT", soundId: sound.id, sourcePath: sound.sourcePath, packed: sound.packed, volume: sound.volume, pitch: sound.pitch, audioChannels: sound.audioChannels, sampleRate: sound.sampleRate }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00023" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00022/sound-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} sound=${sound.id} sampleRate=${sound.sampleRate} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00023") { + const speakerFixture = path.join(root, "tests/files/web/generated/M16-GAP-00023-datablock-Speaker.blend"); + const speakerDesktopPath = path.join(root, "tests/golden/M16-GAP-00023/speaker-desktop-report.json"); + fs.mkdirSync(path.dirname(speakerDesktopPath), { recursive: true }); + const desktopRun = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-speaker-desktop.py"), "--", speakerFixture, speakerDesktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(desktopRun.status, 0, `${desktopRun.stdout ?? ""}\n${desktopRun.stderr ?? ""}`); + const desktopEvidence = JSON.parse(fs.readFileSync(speakerDesktopPath, "utf8")); + assert.equal(desktopEvidence.saveReopen, "EXACT"); + const speakerEngine = await factory({ wasmBinary }); + const speakerHandle = speakerEngine._web_engine_create(); + open(speakerEngine, speakerHandle, fs.readFileSync(speakerFixture)); + const speakerSnapshot = snapshot(speakerEngine, speakerHandle); + const speaker = speakerSnapshot.speakers?.find((value) => value.id === "speaker:WebGapSpeaker"); + assert.ok(speaker); + assert.deepEqual(speaker, desktopEvidence.speaker); + const saved = output(speakerEngine, speakerHandle, speakerEngine._web_engine_save_blend, true); + assert.ok(saved.byteLength > 0); + const reopened = speakerEngine._web_engine_create(); + open(speakerEngine, reopened, saved); + const after = snapshot(speakerEngine, reopened).speakers?.find((value) => value.id === speaker.id); + assert.deepEqual(after, speaker); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const malformedPointer = speakerEngine._malloc(malformed.byteLength); + let malformedResult; + try { + speakerEngine.HEAPU8.set(malformed, malformedPointer); + malformedResult = speakerEngine._web_engine_open_blend(speakerHandle, malformedPointer, malformed.byteLength); + } + finally { + speakerEngine._free(malformedPointer); + } + assert.notEqual(malformedResult, 0); + assert.deepEqual(snapshot(speakerEngine, speakerHandle), speakerSnapshot); + speakerEngine._web_engine_destroy(speakerHandle); + speakerEngine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task: "M16-GAP-00023", operation: "SPEAKER_DATABLOCK_LOCAL_EXACT", fixture: { path: path.relative(root, speakerFixture).replaceAll(path.sep, "/"), sha256: desktopEvidence.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, speakerDesktopPath).replaceAll(path.sep, "/"), saveReopen: desktopEvidence.saveReopen }, wasm: { status: "EXACT", speakerId: speaker.id, soundId: speaker.soundId, volumeMax: speaker.volumeMax, volumeMin: speaker.volumeMin, distanceMax: speaker.distanceMax, distanceReference: speaker.distanceReference, attenuation: speaker.attenuation, coneAngleOuter: speaker.coneAngleOuter, coneAngleInner: speaker.coneAngleInner, coneVolumeOuter: speaker.coneVolumeOuter, volume: speaker.volume, pitch: speaker.pitch }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00024" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00023/speaker-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} speaker=${speaker.id} volume=${speaker.volume} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00024") { + const textFixture = path.join(root, "tests/files/web/generated/M16-GAP-00024-datablock-Text.blend"); + const textDesktopPath = path.join(root, "tests/golden/M16-GAP-00024/text-desktop-report.json"); + fs.mkdirSync(path.dirname(textDesktopPath), { recursive: true }); + const desktopRun = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-text-desktop.py"), "--", textFixture, textDesktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(desktopRun.status, 0, `${desktopRun.stdout ?? ""}\n${desktopRun.stderr ?? ""}`); + const desktopEvidence = JSON.parse(fs.readFileSync(textDesktopPath, "utf8")); + assert.equal(desktopEvidence.saveReopen, "EXACT"); + const textEngine = await factory({ wasmBinary }); + const textHandle = textEngine._web_engine_create(); + open(textEngine, textHandle, fs.readFileSync(textFixture)); + const textSnapshot = snapshot(textEngine, textHandle); + const text = textSnapshot.texts?.find((value) => value.id === "text:WebGapText"); + assert.ok(text); + assert.deepEqual(text, desktopEvidence.text); + const saved = output(textEngine, textHandle, textEngine._web_engine_save_blend, true); + assert.ok(saved.byteLength > 0); + const reopened = textEngine._web_engine_create(); + open(textEngine, reopened, saved); + const after = snapshot(textEngine, reopened).texts?.find((value) => value.id === text.id); + assert.deepEqual(after, text); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const malformedPointer = textEngine._malloc(malformed.byteLength); + let malformedResult; + try { + textEngine.HEAPU8.set(malformed, malformedPointer); + malformedResult = textEngine._web_engine_open_blend(textHandle, malformedPointer, malformed.byteLength); + } + finally { + textEngine._free(malformedPointer); + } + assert.notEqual(malformedResult, 0); + assert.deepEqual(snapshot(textEngine, textHandle), textSnapshot); + textEngine._web_engine_destroy(textHandle); + textEngine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task: "M16-GAP-00024", operation: "TEXT_DATABLOCK_LOCAL_EXACT", fixture: { path: path.relative(root, textFixture).replaceAll(path.sep, "/"), sha256: desktopEvidence.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, textDesktopPath).replaceAll(path.sep, "/"), saveReopen: desktopEvidence.saveReopen }, wasm: { status: "EXACT", textId: text.id, sourceSha256: text.sourceSha256, byteLength: text.byteLength, lineCount: text.lineCount, sourcePath: text.sourcePath, internal: text.internal, isDirty: text.isDirty, useModule: text.useModule }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00025" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00024/text-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} text=${text.id} bytes=${text.byteLength} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00025") { + const textureFixture = path.join(root, "tests/files/web/generated/M16-GAP-00025-datablock-Texture.blend"); + const textureDesktopPath = path.join(root, "tests/golden/M16-GAP-00025/texture-desktop-report.json"); + fs.mkdirSync(path.dirname(textureDesktopPath), { recursive: true }); + const desktopRun = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-texture-desktop.py"), "--", textureFixture, textureDesktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(desktopRun.status, 0, `${desktopRun.stdout ?? ""}\n${desktopRun.stderr ?? ""}`); + const desktopEvidence = JSON.parse(fs.readFileSync(textureDesktopPath, "utf8")); + assert.equal(desktopEvidence.saveReopen, "EXACT"); + const textureEngine = await factory({ wasmBinary }); + const textureHandle = textureEngine._web_engine_create(); + open(textureEngine, textureHandle, fs.readFileSync(textureFixture)); + const textureSnapshot = snapshot(textureEngine, textureHandle); + const texture = textureSnapshot.textures?.find((value) => value.id === "texture:WebGapTexture"); + assert.ok(texture); + assert.equal(texture.type, 1); + assert.deepEqual(texture, desktopEvidence.texture); + const saved = output(textureEngine, textureHandle, textureEngine._web_engine_save_blend, true); + assert.ok(saved.byteLength > 0); + const reopened = textureEngine._web_engine_create(); + open(textureEngine, reopened, saved); + const after = snapshot(textureEngine, reopened).textures?.find((value) => value.id === texture.id); + assert.deepEqual(after, texture); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const malformedPointer = textureEngine._malloc(malformed.byteLength); + let malformedResult; + try { + textureEngine.HEAPU8.set(malformed, malformedPointer); + malformedResult = textureEngine._web_engine_open_blend(textureHandle, malformedPointer, malformed.byteLength); + } + finally { + textureEngine._free(malformedPointer); + } + assert.notEqual(malformedResult, 0); + assert.deepEqual(snapshot(textureEngine, textureHandle), textureSnapshot); + textureEngine._web_engine_destroy(textureHandle); + textureEngine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task: "M16-GAP-00025", operation: "TEXTURE_DATABLOCK_LOCAL_EXACT", fixture: { path: path.relative(root, textureFixture).replaceAll(path.sep, "/"), sha256: desktopEvidence.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, textureDesktopPath).replaceAll(path.sep, "/"), saveReopen: desktopEvidence.saveReopen }, wasm: { status: "EXACT", textureId: texture.id, type: texture.type, noiseScale: texture.noiseScale, noiseDepth: texture.noiseDepth, intensity: texture.intensity, contrast: texture.contrast, saturation: texture.saturation }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00026" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00025/texture-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} texture=${texture.id} type=${texture.type} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00026") { + const volumeFixture = path.join(root, "tests/files/web/generated/M16-GAP-00026-datablock-Volume.blend"); + const volumeDesktopPath = path.join(root, "tests/golden/M16-GAP-00026/volume-desktop-report.json"); + fs.mkdirSync(path.dirname(volumeDesktopPath), { recursive: true }); + const desktopRun = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-volume-desktop.py"), "--", volumeFixture, volumeDesktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(desktopRun.status, 0, `${desktopRun.stdout ?? ""}\n${desktopRun.stderr ?? ""}`); + const desktopEvidence = JSON.parse(fs.readFileSync(volumeDesktopPath, "utf8")); + assert.equal(desktopEvidence.saveReopen, "EXACT"); + const volumeEngine = await factory({ wasmBinary }); + const volumeHandle = volumeEngine._web_engine_create(); + open(volumeEngine, volumeHandle, fs.readFileSync(volumeFixture)); + const volumeSnapshot = snapshot(volumeEngine, volumeHandle); + const volume = volumeSnapshot.nonMeshData?.find((value) => value.id === "volume:WebGapVolume"); + assert.ok(volume); + assert.equal(volume.geometryStatus, "blocked"); + assert.deepEqual({ id: volume.id, name: volume.name, sourcePath: volume.sourcePath, volumeProperties: volume.volumeProperties }, { id: desktopEvidence.volume.id, name: desktopEvidence.volume.name, sourcePath: desktopEvidence.volume.sourcePath, volumeProperties: { displayDensity: desktopEvidence.volume.displayDensity, interpolation: desktopEvidence.volume.interpolation, stepSize: desktopEvidence.volume.stepSize, velocityGrid: desktopEvidence.volume.velocityGrid, velocityScale: desktopEvidence.volume.velocityScale } }); + const saved = output(volumeEngine, volumeHandle, volumeEngine._web_engine_save_blend, true); + const reopened = volumeEngine._web_engine_create(); + open(volumeEngine, reopened, saved); + const after = snapshot(volumeEngine, reopened).nonMeshData?.find((value) => value.id === volume.id); + assert.deepEqual(after, volume); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const malformedPointer = volumeEngine._malloc(malformed.byteLength); let malformedResult; + try { volumeEngine.HEAPU8.set(malformed, malformedPointer); malformedResult = volumeEngine._web_engine_open_blend(volumeHandle, malformedPointer, malformed.byteLength); } finally { volumeEngine._free(malformedPointer); } + assert.notEqual(malformedResult, 0); assert.deepEqual(snapshot(volumeEngine, volumeHandle), volumeSnapshot); + volumeEngine._web_engine_destroy(volumeHandle); volumeEngine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task: "M16-GAP-00026", operation: "VOLUME_DATABLOCK_LOCAL_EXACT", fixture: { path: path.relative(root, volumeFixture).replaceAll(path.sep, "/"), sha256: desktopEvidence.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, volumeDesktopPath).replaceAll(path.sep, "/"), saveReopen: desktopEvidence.saveReopen }, wasm: { status: "EXACT", volumeId: volume.id, geometryStatus: volume.geometryStatus, sourcePath: volume.sourcePath, volumeProperties: volume.volumeProperties }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00027" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00026/volume-local-exact-report.json"); fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} volume=${volume.id} density=${volume.volumeProperties.displayDensity} desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00028") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00028-datablock-WorkSpace.blend"); const desktopPath = path.join(root, "tests/golden/M16-GAP-00028/workspace-desktop-report.json"); fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-workspace-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + const engine = await factory({ wasmBinary }); const handle = engine._web_engine_create(); open(engine, handle, fs.readFileSync(fixture)); const before = snapshot(engine, handle); const workspace = before.workspaces?.find((value) => value.id === "workspace:WebGapWorkspace"); assert.ok(workspace); assert.deepEqual(workspace, desktop.workspace); + const saved = output(engine, handle, engine._web_engine_save_blend, true); const reopened = engine._web_engine_create(); open(engine, reopened, saved); assert.deepEqual(snapshot(engine, reopened).workspaces?.find((value) => value.id === workspace.id), workspace); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); const pointer = engine._malloc(malformed.byteLength); let result; try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } assert.notEqual(result, 0); assert.deepEqual(snapshot(engine, handle), before); engine._web_engine_destroy(handle); engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task: "M16-GAP-00028", operation: "WORKSPACE_DATABLOCK_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", workspace: workspace }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00029" }; const reportPath = path.join(root, "tests/golden/M16-GAP-00028/workspace-local-exact-report.json"); fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); process.stdout.write(`generated-gap-ok task=${task} workspace=${workspace.id} desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00029") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00029-datablock-World.blend"); const desktopPath = path.join(root, "tests/golden/M16-GAP-00029/world-desktop-report.json"); fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-world-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + const engine = await factory({ wasmBinary }); const handle = engine._web_engine_create(); open(engine, handle, fs.readFileSync(fixture)); const before = snapshot(engine, handle); const world = before.worlds?.find((value) => value.id === "world:WebGapWorld"); assert.ok(world); assert.deepEqual(world, desktop.world); + const saved = output(engine, handle, engine._web_engine_save_blend, true); const reopened = engine._web_engine_create(); open(engine, reopened, saved); assert.deepEqual(snapshot(engine, reopened).worlds?.find((value) => value.id === world.id), world); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); const pointer = engine._malloc(malformed.byteLength); let result; try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } assert.notEqual(result, 0); assert.deepEqual(snapshot(engine, handle), before); engine._web_engine_destroy(handle); engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task: "M16-GAP-00029", operation: "WORLD_DATABLOCK_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", world: world }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00030" }; const reportPath = path.join(root, "tests/golden/M16-GAP-00029/world-local-exact-report.json"); fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); process.stdout.write(`generated-gap-ok task=${task} world=${world.id} desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00030") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00030-modifier-ARMATURE.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00030/armature-modifier-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-armature-modifier-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const mesh = before.meshes?.find((value) => value.id === desktop.modifier.meshId); + assert.ok(mesh); + const modifier = mesh.modifierStack?.find((value) => value.type === "ARMATURE"); + assert.ok(modifier); + assert.equal(modifier.name, desktop.modifier.modifier.name); + assert.equal(modifier.parameters.typeCode, desktop.modifier.modifier.typeCode); + assert.equal(modifier.parameters.armatureObjectId, desktop.modifier.armatureObjectId); + assert.equal(modifier.parameters.vertexGroup, desktop.modifier.modifier.vertexGroup); + assert.equal(modifier.parameters.deformFlags, 1); + assert.ok(modifier.dependsOn.includes(desktop.modifier.armatureObjectId)); + assert.equal(modifier.enabled, desktop.modifier.modifier.enabled); + assert.equal(modifier.showViewport, desktop.modifier.modifier.showViewport); + assert.equal(modifier.showRender, desktop.modifier.modifier.showRender); + assert.equal(modifier.showEditMode, desktop.modifier.modifier.showEditMode); + assert.equal(modifier.showOnCage, desktop.modifier.modifier.showOnCage); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + const after = snapshot(engine, reopened).meshes?.find((value) => value.id === mesh.id); + assert.deepEqual(after?.modifierStack, mesh.modifierStack); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { + engine.HEAPU8.set(malformed, pointer); + result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); + } + finally { + engine._free(pointer); + } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle), before); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task: "M16-GAP-00030", operation: "ARMATURE_MODIFIER_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", meshId: mesh.id, modifier: modifier }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00031" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00030/armature-modifier-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} mesh=${mesh.id} modifier=${modifier.name} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00031") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00031-modifier-ARRAY.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00031/array-modifier-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-array-modifier-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const mesh = before.meshes?.find((value) => value.id === desktop.modifier.meshId); + assert.ok(mesh); + const modifier = mesh.modifierStack?.find((value) => value.type === "ARRAY"); + assert.ok(modifier); + assert.equal(modifier.name, desktop.modifier.modifier.name); + assert.equal(modifier.parameters.typeCode, desktop.modifier.modifier.typeCode); + assert.equal(modifier.parameters.count, desktop.modifier.modifier.count); + assert.deepEqual(modifier.parameters.targetObjectIds, [desktop.modifier.modifier.startCapObjectId, desktop.modifier.modifier.endCapObjectId]); + assert.ok(modifier.dependsOn.includes(desktop.modifier.modifier.startCapObjectId)); + assert.ok(modifier.dependsOn.includes(desktop.modifier.modifier.endCapObjectId)); + assert.equal(modifier.showViewport, desktop.modifier.modifier.showViewport); + assert.equal(modifier.showRender, desktop.modifier.modifier.showRender); + assert.equal(modifier.showEditMode, desktop.modifier.modifier.showEditMode); + assert.equal(modifier.showOnCage, desktop.modifier.modifier.showOnCage); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).meshes?.find((value) => value.id === mesh.id)?.modifierStack, mesh.modifierStack); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } + finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle), before); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task: "M16-GAP-00031", operation: "ARRAY_MODIFIER_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", meshId: mesh.id, modifier: modifier }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00032" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00031/array-modifier-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} mesh=${mesh.id} modifier=${modifier.name} count=${modifier.parameters.count} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00032") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00032-modifier-BEVEL.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00032/bevel-modifier-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-bevel-modifier-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const mesh = before.meshes?.find((value) => value.id === desktop.modifier.meshId); + assert.ok(mesh); + const modifier = mesh.modifierStack?.find((value) => value.type === "BEVEL"); + assert.ok(modifier); + assert.equal(modifier.name, desktop.modifier.modifier.name); + assert.equal(modifier.parameters.typeCode, desktop.modifier.modifier.typeCode); + assert.ok(Math.abs(modifier.parameters.width - desktop.modifier.modifier.width) < 1e-5); + assert.equal(modifier.parameters.segments, desktop.modifier.modifier.segments); + assert.ok(Math.abs(modifier.parameters.profile - desktop.modifier.modifier.profile) < 1e-5); + assert.equal(modifier.showViewport, desktop.modifier.modifier.showViewport); + assert.equal(modifier.showRender, desktop.modifier.modifier.showRender); + assert.equal(modifier.showEditMode, desktop.modifier.modifier.showEditMode); + assert.equal(modifier.showOnCage, desktop.modifier.modifier.showOnCage); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).meshes?.find((value) => value.id === mesh.id)?.modifierStack, mesh.modifierStack); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } + finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle), before); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task: "M16-GAP-00032", operation: "BEVEL_MODIFIER_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", meshId: mesh.id, modifier: modifier }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00033" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00032/bevel-modifier-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} mesh=${mesh.id} modifier=${modifier.name} width=${modifier.parameters.width} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00033") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00033-modifier-BOOLEAN.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00033/boolean-modifier-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-boolean-modifier-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const mesh = before.meshes?.find((value) => value.id === desktop.modifier.meshId); + assert.ok(mesh); + const modifier = mesh.modifierStack?.find((value) => value.type === "BOOLEAN"); + assert.ok(modifier); + assert.equal(modifier.name, desktop.modifier.modifier.name); + assert.equal(modifier.parameters.typeCode, desktop.modifier.modifier.typeCode); + assert.equal(modifier.parameters.operation, 2); + assert.equal(modifier.parameters.solver, 1); + assert.equal(modifier.parameters.targetObjectIds[0], desktop.modifier.modifier.targetObjectId); + assert.ok(modifier.dependsOn.includes(desktop.modifier.modifier.targetObjectId)); + assert.equal(modifier.showViewport, desktop.modifier.modifier.showViewport); + assert.equal(modifier.showRender, desktop.modifier.modifier.showRender); + assert.equal(modifier.showEditMode, desktop.modifier.modifier.showEditMode); + assert.equal(modifier.showOnCage, desktop.modifier.modifier.showOnCage); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).meshes?.find((value) => value.id === mesh.id)?.modifierStack, mesh.modifierStack); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } + finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle), before); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task: "M16-GAP-00033", operation: "BOOLEAN_MODIFIER_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", meshId: mesh.id, modifier: modifier }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00034" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00033/boolean-modifier-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} mesh=${mesh.id} modifier=${modifier.name} operation=${modifier.parameters.operation} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00034") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00034-modifier-BUILD.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00034/build-modifier-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-build-modifier-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const mesh = before.meshes?.find((value) => value.id === desktop.modifier.meshId); + assert.ok(mesh); + const modifier = mesh.modifierStack?.find((value) => value.type === "BUILD"); + assert.ok(modifier); + assert.equal(modifier.name, desktop.modifier.modifier.name); + assert.equal(modifier.parameters.typeCode, desktop.modifier.modifier.typeCode); + assert.ok(Math.abs(modifier.parameters.start - desktop.modifier.modifier.start) < 1e-5); + assert.ok(Math.abs(modifier.parameters.length - desktop.modifier.modifier.length) < 1e-5); + assert.equal(modifier.parameters.flag, 5); + assert.equal(modifier.parameters.seed, desktop.modifier.modifier.seed); + assert.equal(modifier.showViewport, desktop.modifier.modifier.showViewport); + assert.equal(modifier.showRender, desktop.modifier.modifier.showRender); + assert.equal(modifier.showEditMode, desktop.modifier.modifier.showEditMode); + assert.equal(modifier.showOnCage, desktop.modifier.modifier.showOnCage); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).meshes?.find((value) => value.id === mesh.id)?.modifierStack, mesh.modifierStack); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } + finally { engine._free(pointer); } + assert.notEqual(result, 0); assert.deepEqual(snapshot(engine, handle), before); + engine._web_engine_destroy(handle); engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task: "M16-GAP-00034", operation: "BUILD_MODIFIER_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", meshId: mesh.id, modifier: modifier }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00035" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00034/build-modifier-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} mesh=${mesh.id} modifier=${modifier.name} start=${modifier.parameters.start} desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00035") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00035-modifier-CAST.blend"); const desktopPath = path.join(root, "tests/golden/M16-GAP-00035/cast-modifier-desktop-report.json"); fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-cast-modifier-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + const engine = await factory({ wasmBinary }); const handle = engine._web_engine_create(); open(engine, handle, fs.readFileSync(fixture)); const before = snapshot(engine, handle); const mesh = before.meshes?.find((value) => value.id === desktop.modifier.meshId); assert.ok(mesh); const modifier = mesh.modifierStack?.find((value) => value.type === "CAST"); assert.ok(modifier); assert.equal(modifier.name, desktop.modifier.modifier.name); assert.equal(modifier.parameters.typeCode, desktop.modifier.modifier.typeCode); assert.ok(Math.abs(modifier.parameters.factor - desktop.modifier.modifier.factor) < 1e-5); assert.ok(Math.abs(modifier.parameters.radius - desktop.modifier.modifier.radius) < 1e-5); assert.equal(modifier.parameters.mode, 3); assert.equal(modifier.parameters.flag, 5); assert.equal(modifier.showViewport, desktop.modifier.modifier.showViewport); assert.equal(modifier.showRender, desktop.modifier.modifier.showRender); const saved = output(engine, handle, engine._web_engine_save_blend, true); const reopened = engine._web_engine_create(); open(engine, reopened, saved); assert.deepEqual(snapshot(engine, reopened).meshes?.find((value) => value.id === mesh.id)?.modifierStack, mesh.modifierStack); const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); const pointer = engine._malloc(malformed.byteLength); let result; try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } assert.notEqual(result, 0); assert.deepEqual(snapshot(engine, handle), before); engine._web_engine_destroy(handle); engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task: "M16-GAP-00035", operation: "CAST_MODIFIER_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", meshId: mesh.id, modifier }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00036" }; const reportPath = path.join(root, "tests/golden/M16-GAP-00035/cast-modifier-local-exact-report.json"); fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); process.stdout.write(`generated-gap-ok task=${task} mesh=${mesh.id} modifier=${modifier.name} factor=${modifier.parameters.factor} desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00036") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00036-modifier-CLOTH.blend"); const desktopPath = path.join(root, "tests/golden/M16-GAP-00036/cloth-modifier-desktop-report.json"); fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-cloth-modifier-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + const engine = await factory({ wasmBinary }); const handle = engine._web_engine_create(); open(engine, handle, fs.readFileSync(fixture)); const before = snapshot(engine, handle); const mesh = before.meshes?.find((value) => value.id === desktop.modifier.meshId); assert.ok(mesh); const modifier = mesh.modifierStack?.find((value) => value.type === "CLOTH"); assert.ok(modifier); assert.equal(modifier.name, desktop.modifier.modifier.name); assert.equal(modifier.parameters.typeCode, desktop.modifier.modifier.typeCode); assert.equal(modifier.showViewport, desktop.modifier.modifier.showViewport); assert.equal(modifier.showRender, desktop.modifier.modifier.showRender); const saved = output(engine, handle, engine._web_engine_save_blend, true); const reopened = engine._web_engine_create(); open(engine, reopened, saved); assert.deepEqual(snapshot(engine, reopened).meshes?.find((value) => value.id === mesh.id)?.modifierStack, mesh.modifierStack); const malformed = new Uint8Array([0x42,0x4c,0x45,0x4e,0x44,0x45,0x52]); const pointer = engine._malloc(malformed.byteLength); let result; try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } assert.notEqual(result, 0); assert.deepEqual(snapshot(engine, handle), before); engine._web_engine_destroy(handle); engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task: "M16-GAP-00036", operation: "CLOTH_MODIFIER_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", meshId: mesh.id, modifier }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00037" }; const reportPath = path.join(root, "tests/golden/M16-GAP-00036/cloth-modifier-local-exact-report.json"); fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); process.stdout.write(`generated-gap-ok task=${task} mesh=${mesh.id} modifier=${modifier.name} desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00037") { + const fixture=path.join(root,"tests/files/web/generated/M16-GAP-00037-modifier-COLLISION.blend"), desktopPath=path.join(root,"tests/golden/M16-GAP-00037/collision-modifier-desktop-report.json"); fs.mkdirSync(path.dirname(desktopPath),{recursive:true}); const run=spawnSync(process.env.BLENDER_BIN??path.join(root,"build_blender_5.2.0/bin/blender"),["-b","--factory-startup","--python",path.join(root,"tools/web/check-collision-modifier-desktop.py"),"--",fixture,desktopPath],{cwd:root,encoding:"utf8",maxBuffer:8*1024*1024}); assert.equal(run.status,0,`${run.stdout??""}\n${run.stderr??""}`); const desktop=JSON.parse(fs.readFileSync(desktopPath,"utf8")); const engine=await factory({wasmBinary}); const handle=engine._web_engine_create(); open(engine,handle,fs.readFileSync(fixture)); const before=snapshot(engine,handle); const mesh=before.meshes?.find(v=>v.id===desktop.modifier.meshId); assert.ok(mesh); const modifier=mesh.modifierStack?.find(v=>v.type==="COLLISION"); assert.ok(modifier); assert.equal(modifier.name,desktop.modifier.modifier.name); assert.equal(modifier.parameters.typeCode,desktop.modifier.modifier.typeCode); assert.equal(modifier.showViewport,desktop.modifier.modifier.showViewport); assert.equal(modifier.showRender,desktop.modifier.modifier.showRender); const saved=output(engine,handle,engine._web_engine_save_blend,true), reopened=engine._web_engine_create(); open(engine,reopened,saved); assert.deepEqual(snapshot(engine,reopened).meshes?.find(v=>v.id===mesh.id)?.modifierStack,mesh.modifierStack); const malformed=new Uint8Array([0x42,0x4c,0x45,0x4e,0x44,0x45,0x52]), pointer=engine._malloc(malformed.byteLength); let result; try{engine.HEAPU8.set(malformed,pointer); result=engine._web_engine_open_blend(handle,pointer,malformed.byteLength)}finally{engine._free(pointer)} assert.notEqual(result,0); assert.deepEqual(snapshot(engine,handle),before); engine._web_engine_destroy(handle); engine._web_engine_destroy(reopened); const report={schemaVersion:1,task:"M16-GAP-00037",operation:"COLLISION_MODIFIER_LOCAL_EXACT",fixture:{path:path.relative(root,fixture).replaceAll(path.sep,"/"),sha256:desktop.fixtureSha256},desktop:{status:"EXACT",report:path.relative(root,desktopPath).replaceAll(path.sep,"/"),saveReopen:desktop.saveReopen},wasm:{status:"EXACT",meshId:mesh.id,modifier},saveReopen:"EXACT",negative:{malformedBlend:"REJECTED_WITHOUT_MAIN_MUTATION"},nextTask:"M16-GAP-00038"}; const reportPath=path.join(root,"tests/golden/M16-GAP-00037/collision-modifier-local-exact-report.json"); fs.writeFileSync(reportPath,`${JSON.stringify(report,null,2)}\n`); process.stdout.write(`generated-gap-ok task=${task} mesh=${mesh.id} modifier=${modifier.name} desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} +const genericModifierTasks = { + "M16-GAP-00038": { type: "CORRECTIVE_SMOOTH", stem: "WebGapCorrectiveSmooth", nextTask: "M16-GAP-00039" }, + "M16-GAP-00039": { type: "CURVE", stem: "WebGapCurveModifier", nextTask: "M16-GAP-00040" }, + "M16-GAP-00040": { type: "DATA_TRANSFER", stem: "WebGapDataTransfer", nextTask: "M16-GAP-00041" }, + "M16-GAP-00041": { type: "DECIMATE", stem: "WebGapDecimate", nextTask: "M16-GAP-00042" }, + "M16-GAP-00042": { type: "DISPLACE", stem: "WebGapDisplace", nextTask: "M16-GAP-00043" }, + "M16-GAP-00043": { type: "DYNAMIC_PAINT", stem: "WebGapDynamicPaint", nextTask: "M16-GAP-00044" }, + "M16-GAP-00044": { type: "EDGE_SPLIT", stem: "WebGapEdgeSplit", nextTask: "M16-GAP-00045" }, + "M16-GAP-00045": { type: "EXPLODE", stem: "WebGapExplode", nextTask: "M16-GAP-00046" }, + "M16-GAP-00046": { type: "FLUID", stem: "WebGapFluid", nextTask: "M16-GAP-00047" }, + "M16-GAP-00047": { type: "GREASE_PENCIL_ARMATURE", stem: "WebGapGreasePencilArmature", objectName: "GreasePencilObject", nextTask: "M16-GAP-00048" }, + "M16-GAP-00048": { type: "GREASE_PENCIL_ARRAY", stem: "WebGapGreasePencilArray", objectName: "GreasePencilObject", nextTask: "M16-GAP-00049" }, + "M16-GAP-00049": { type: "GREASE_PENCIL_BUILD", stem: "WebGapGreasePencilBuild", objectName: "GreasePencilObject", nextTask: "M16-GAP-00050" }, + "M16-GAP-00050": { type: "GREASE_PENCIL_COLOR", stem: "WebGapGreasePencilColor", objectName: "GreasePencilObject", nextTask: "M16-GAP-00051" }, + "M16-GAP-00051": { type: "GREASE_PENCIL_DASH", stem: "WebGapGreasePencilDash", objectName: "GreasePencilObject", nextTask: "M16-GAP-00052" }, + "M16-GAP-00052": { type: "GREASE_PENCIL_ENVELOPE", stem: "WebGapGreasePencilEnvelope", objectName: "GreasePencilObject", nextTask: "M16-GAP-00053" }, + "M16-GAP-00053": { type: "GREASE_PENCIL_HOOK", stem: "WebGapGreasePencilHook", objectName: "GreasePencilObject", nextTask: "M16-GAP-00054" }, + "M16-GAP-00054": { type: "GREASE_PENCIL_LATTICE", stem: "WebGapGreasePencilLattice", objectName: "GreasePencilObject", nextTask: "M16-GAP-00055" }, + "M16-GAP-00055": { type: "GREASE_PENCIL_LENGTH", stem: "WebGapGreasePencilLength", objectName: "GreasePencilObject", nextTask: "M16-GAP-00056" }, + "M16-GAP-00056": { type: "GREASE_PENCIL_MIRROR", stem: "WebGapGreasePencilMirror", objectName: "GreasePencilObject", nextTask: "M16-GAP-00057" }, + "M16-GAP-00057": { type: "GREASE_PENCIL_MULTIPLY", stem: "WebGapGreasePencilMultiply", objectName: "GreasePencilObject", nextTask: "M16-GAP-00058" }, + "M16-GAP-00058": { type: "GREASE_PENCIL_NOISE", stem: "WebGapGreasePencilNoise", objectName: "GreasePencilObject", nextTask: "M16-GAP-00059" }, + "M16-GAP-00059": { type: "GREASE_PENCIL_OFFSET", stem: "WebGapGreasePencilOffset", objectName: "GreasePencilObject", nextTask: "M16-GAP-00060" }, + "M16-GAP-00060": { type: "GREASE_PENCIL_OPACITY", stem: "WebGapGreasePencilOpacity", objectName: "GreasePencilObject", nextTask: "M16-GAP-00061" }, + "M16-GAP-00061": { type: "GREASE_PENCIL_OUTLINE", stem: "WebGapGreasePencilOutline", objectName: "GreasePencilObject", nextTask: "M16-GAP-00062" }, + "M16-GAP-00062": { type: "GREASE_PENCIL_SHRINKWRAP", stem: "WebGapGreasePencilShrinkwrap", objectName: "GreasePencilObject", nextTask: "M16-GAP-00063" }, + "M16-GAP-00063": { type: "GREASE_PENCIL_SIMPLIFY", stem: "WebGapGreasePencilSimplify", objectName: "GreasePencilObject", nextTask: "M16-GAP-00064" }, + "M16-GAP-00064": { type: "GREASE_PENCIL_SMOOTH", stem: "WebGapGreasePencilSmooth", objectName: "GreasePencilObject", nextTask: "M16-GAP-00065" }, + "M16-GAP-00065": { type: "GREASE_PENCIL_SUBDIV", stem: "WebGapGreasePencilSubdiv", objectName: "GreasePencilObject", nextTask: "M16-GAP-00066" }, + "M16-GAP-00066": { type: "GREASE_PENCIL_TEXTURE", stem: "WebGapGreasePencilTexture", objectName: "GreasePencilObject", nextTask: "M16-GAP-00067" }, + "M16-GAP-00067": { type: "GREASE_PENCIL_THICKNESS", stem: "WebGapGreasePencilThickness", objectName: "GreasePencilObject", nextTask: "M16-GAP-00068" }, + "M16-GAP-00068": { type: "GREASE_PENCIL_TIME", stem: "WebGapGreasePencilTime", objectName: "GreasePencilObject", nextTask: "M16-GAP-00069" }, + "M16-GAP-00069": { type: "GREASE_PENCIL_TINT", stem: "WebGapGreasePencilTint", objectName: "GreasePencilObject", nextTask: "M16-GAP-00070" }, + "M16-GAP-00070": { type: "GREASE_PENCIL_VERTEX_WEIGHT_ANGLE", stem: "WebGapGreasePencilVertexWeightAngle", objectName: "GreasePencilObject", nextTask: "M16-GAP-00071" }, + "M16-GAP-00071": { type: "GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY", stem: "WebGapGreasePencilVertexWeightProximity", objectName: "GreasePencilObject", nextTask: "M16-GAP-00072" }, + "M16-GAP-00072": { type: "HOOK", stem: "WebGapHook", nextTask: "M16-GAP-00073" }, + "M16-GAP-00073": { type: "LAPLACIANDEFORM", stem: "WebGapLaplacianDeform", nextTask: "M16-GAP-00074" }, + "M16-GAP-00074": { type: "LAPLACIANSMOOTH", stem: "WebGapLaplacianSmooth", nextTask: "M16-GAP-00075" }, + "M16-GAP-00075": { type: "LATTICE", stem: "WebGapLatticeModifier", nextTask: "M16-GAP-00076" }, + "M16-GAP-00076": { type: "LINEART", stem: "WebGapLineart", objectName: "GreasePencilObject", nextTask: "M16-GAP-00077" }, + "M16-GAP-00077": { type: "MASK", stem: "WebGapMask", nextTask: "M16-GAP-00078" }, + "M16-GAP-00078": { type: "MESH_CACHE", stem: "WebGapMeshCache", nextTask: "M16-GAP-00079" }, + "M16-GAP-00079": { type: "MESH_DEFORM", stem: "WebGapMeshDeform", nextTask: "M16-GAP-00080" }, + "M16-GAP-00080": { type: "MESH_SEQUENCE_CACHE", stem: "WebGapMeshSequenceCache", nextTask: "M16-GAP-00081" }, + "M16-GAP-00081": { type: "MESH_TO_VOLUME", stem: "WebGapMeshToVolume", nextTask: "M16-GAP-00082" }, + "M16-GAP-00082": { type: "MIRROR", stem: "WebGapMirror", nextTask: "M16-GAP-00083" }, + "M16-GAP-00083": { type: "MULTIRES", stem: "WebGapMultires", nextTask: "M16-GAP-00084" }, + "M16-GAP-00084": { type: "NODES", stem: "WebGapNodes", nextTask: "M16-GAP-00085" }, + "M16-GAP-00085": { type: "NORMAL_EDIT", stem: "WebGapNormalEdit", nextTask: "M16-GAP-00086" }, + "M16-GAP-00086": { type: "OCEAN", stem: "WebGapOcean", nextTask: "M16-GAP-00087" }, + "M16-GAP-00087": { type: "PARTICLE_INSTANCE", stem: "WebGapParticleInstance", nextTask: "M16-GAP-00088" }, + "M16-GAP-00088": { type: "PARTICLE_SYSTEM", stem: "WebGapParticleSystem", nextTask: "M16-GAP-00089" }, + "M16-GAP-00089": { type: "REMESH", stem: "WebGapRemesh", nextTask: "M16-GAP-00090" }, + "M16-GAP-00090": { type: "SCREW", stem: "WebGapScrew", nextTask: "M16-GAP-00091" }, + "M16-GAP-00091": { type: "SHRINKWRAP", stem: "WebGapShrinkwrap", nextTask: "M16-GAP-00092" }, + "M16-GAP-00092": { type: "SIMPLE_DEFORM", stem: "WebGapSimpleDeform", nextTask: "M16-GAP-00093" }, + "M16-GAP-00093": { type: "SKIN", stem: "WebGapSkin", nextTask: "M16-GAP-00094" }, + "M16-GAP-00094": { type: "SMOOTH", stem: "WebGapSmooth", nextTask: "M16-GAP-00095" }, + "M16-GAP-00095": { type: "SOFT_BODY", stem: "WebGapSoftBody", nextTask: "M16-GAP-00096" }, + "M16-GAP-00096": { type: "SOLIDIFY", stem: "WebGapSolidify", nextTask: "M16-GAP-00097" }, + "M16-GAP-00097": { type: "SUBSURF", stem: "WebGapSubsurf", nextTask: "M16-GAP-00098" }, + "M16-GAP-00098": { type: "SURFACE", stem: "WebGapSurface", nextTask: "M16-GAP-00099" }, + "M16-GAP-00099": { type: "SURFACE_DEFORM", stem: "WebGapSurfaceDeform", nextTask: "M16-GAP-00100" }, + "M16-GAP-00100": { type: "TRIANGULATE", stem: "WebGapTriangulate", nextTask: "M16-GAP-00101" }, + "M16-GAP-00101": { type: "UV_PROJECT", stem: "WebGapUvProject", nextTask: "M16-GAP-00102" }, + "M16-GAP-00102": { type: "UV_WARP", stem: "WebGapUvWarp", nextTask: "M16-GAP-00103" }, + "M16-GAP-00103": { type: "VERTEX_WEIGHT_EDIT", stem: "WebGapVertexWeightEdit", nextTask: "M16-GAP-00104" }, + "M16-GAP-00104": { type: "VERTEX_WEIGHT_MIX", stem: "WebGapVertexWeightMix", nextTask: "M16-GAP-00105" }, + "M16-GAP-00105": { type: "VERTEX_WEIGHT_PROXIMITY", stem: "WebGapVertexWeightProximity", nextTask: "M16-GAP-00106" }, + "M16-GAP-00106": { type: "VOLUME_DISPLACE", stem: "WebGapVolumeDisplace", nextTask: "M16-GAP-00107" }, + "M16-GAP-00107": { type: "VOLUME_TO_MESH", stem: "WebGapVolumeToMesh", nextTask: "M16-GAP-00108" }, + "M16-GAP-00108": { type: "WARP", stem: "WebGapWarp", nextTask: "M16-GAP-00109" }, + "M16-GAP-00109": { type: "WAVE", stem: "WebGapWave", nextTask: "M16-GAP-00110" }, + "M16-GAP-00110": { type: "WEIGHTED_NORMAL", stem: "WebGapWeightedNormal", nextTask: "M16-GAP-00111" }, + "M16-GAP-00111": { type: "WELD", stem: "WebGapWeld", nextTask: "M16-GAP-00112" }, + "M16-GAP-00112": { type: "WIREFRAME", stem: "WebGapWireframe", nextTask: "M16-GAP-00113" }, +}; +if (genericModifierTasks[task]) { + const config = genericModifierTasks[task]; + const fixture = path.join(root, `tests/files/web/generated/${task}-modifier-${config.type}.blend`); + const desktopPath = path.join(root, `tests/golden/${task}/${config.type.toLowerCase().replaceAll("_", "-")}-modifier-desktop-report.json`); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-generic-modifier-desktop.py"), "--", fixture, desktopPath, task, config.type, config.objectName ?? `${config.stem}Object`], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + const engine = await factory({ wasmBinary }); const handle = engine._web_engine_create(); open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); const mesh = desktop.modifier.meshId ? before.meshes?.find((value) => value.id === desktop.modifier.meshId) : null; const node = desktop.modifier.objectId ? before.nodes?.find((value) => value.id === desktop.modifier.objectId) : null; const holder = mesh ?? node; assert.ok(holder); + const modifier = holder.modifierStack?.find((value) => value.type === config.type); assert.ok(modifier); assert.equal(modifier.name, desktop.modifier.modifier.name); assert.equal(modifier.parameters.typeCode, desktop.modifier.modifier.typeCode); assert.equal(modifier.showViewport, desktop.modifier.modifier.showViewport); assert.equal(modifier.showRender, desktop.modifier.modifier.showRender); assert.equal(modifier.showEditMode, desktop.modifier.modifier.showEditMode); assert.equal(modifier.showOnCage, desktop.modifier.modifier.showOnCage); + if (config.type === "DECIMATE") { + assert.ok(Math.abs(modifier.parameters.ratio - desktop.modifier.modifier.ratio) < 1e-5); + assert.equal(modifier.parameters.iterations, desktop.modifier.modifier.iterations); + assert.ok(Math.abs(modifier.parameters.angleLimit - desktop.modifier.modifier.angleLimit) < 1e-5); + assert.equal(modifier.parameters.decimateMode, desktop.modifier.modifier.decimateMode); + } + if (config.type === "DISPLACE") { + assert.equal(modifier.parameters.direction, desktop.modifier.modifier.direction); + assert.ok(Math.abs(modifier.parameters.strength - desktop.modifier.modifier.strength) < 1e-5); + assert.ok(Math.abs(modifier.parameters.midLevel - desktop.modifier.modifier.midLevel) < 1e-5); + assert.equal(modifier.parameters.space, desktop.modifier.modifier.space); + assert.equal(modifier.parameters.textureMapping, desktop.modifier.modifier.textureMapping); + } + if (config.type === "EDGE_SPLIT") { + assert.ok(Math.abs(modifier.parameters.splitAngle - desktop.modifier.modifier.splitAngle) < 1e-5); + } + if (config.type === "SMOOTH") { + assert.ok(Math.abs(modifier.parameters.factor - desktop.modifier.modifier.factor) < 1e-5); + assert.equal(modifier.parameters.repeat, desktop.modifier.modifier.iterations); + assert.equal(modifier.parameters.vertexGroup, desktop.modifier.modifier.vertexGroup); + assert.equal(modifier.parameters.smoothFlags, desktop.modifier.modifier.smoothFlags); + } + if (config.type === "SOLIDIFY") { + assert.ok(Math.abs(modifier.parameters.thickness - desktop.modifier.modifier.thickness) < 1e-5); + assert.ok(Math.abs(modifier.parameters.offset - desktop.modifier.modifier.offset) < 1e-5); + } + if (config.type === "SUBSURF") { + assert.equal(modifier.parameters.subdivisionType, desktop.modifier.modifier.subdivisionType); + assert.equal(modifier.parameters.levels, desktop.modifier.modifier.levels); + assert.equal(modifier.parameters.renderLevels, desktop.modifier.modifier.renderLevels); + } + if (config.type === "TRIANGULATE") { + assert.equal(modifier.parameters.quadMethod, desktop.modifier.modifier.quadMethod); + assert.equal(modifier.parameters.ngonMethod, desktop.modifier.modifier.ngonMethod); + } + if (config.type === "WAVE") { + assert.ok(Math.abs(modifier.parameters.height - desktop.modifier.modifier.height) < 1e-5); + assert.ok(Math.abs(modifier.parameters.width - desktop.modifier.modifier.width) < 1e-5); + assert.ok(Math.abs(modifier.parameters.speed - desktop.modifier.modifier.speed) < 1e-5); + } + if (config.type === "WEIGHTED_NORMAL") { + assert.equal(modifier.parameters.weight, desktop.modifier.modifier.weight); + } + if (config.type === "WELD") { + assert.ok(Math.abs(modifier.parameters.mergeThreshold - desktop.modifier.modifier.mergeThreshold) < 1e-5); + } + if (config.type === "WIREFRAME") { + assert.ok(Math.abs(modifier.parameters.thickness - desktop.modifier.modifier.thickness) < 1e-5); + } + const saved = output(engine, handle, engine._web_engine_save_blend, true); const reopened = engine._web_engine_create(); open(engine, reopened, saved); const reopenedSnapshot = snapshot(engine, reopened); const reopenedHolder = mesh ? reopenedSnapshot.meshes?.find((value) => value.id === mesh.id) : reopenedSnapshot.nodes?.find((value) => value.id === node.id); assert.deepEqual(reopenedHolder?.modifierStack, holder.modifierStack); + const malformed = new Uint8Array([0x42,0x4c,0x45,0x4e,0x44,0x45,0x52]); const pointer = engine._malloc(malformed.byteLength); let result; try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } assert.notEqual(result, 0); assert.deepEqual(snapshot(engine, handle), before); engine._web_engine_destroy(handle); engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: `${config.type}_MODIFIER_LOCAL_EXACT`, fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", objectId: node?.id, meshId: mesh?.id, modifier }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: config.nextTask }; + const reportPath = path.join(root, `tests/golden/${task}/${config.type.toLowerCase().replaceAll("_", "-")}-modifier-local-exact-report.json`); fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); process.stdout.write(`generated-gap-ok task=${task} holder=${holder.id} modifier=${modifier.name} desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00113") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00113-operator-action.bake_keys.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00113/action-bake-keys-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-bake-keys-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapBakeKeysObjectAction:object:WebGapBakeKeysObject"); + assert.ok(animation); + assert.equal(animation.channels.length, desktop.action.channels.length); + for (const [index, channel] of animation.channels.entries()) { + const expected = desktop.action.channels[index]; + assert.equal(channel.path.replace(/\[\d+\]$/, ""), expected.path); + assert.deepEqual(channel.keyframes.map((value) => value.frame), expected.frames); + } + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.length), [5, 5, 5]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { + engine.HEAPU8.set(malformed, pointer); + result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); + } + finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_BAKE_KEYS_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, channelPaths: animation.channels.map((channel) => channel.path), keyframesPerChannel: animation.channels.map((channel) => channel.keyframes.length) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00114" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00113/action-bake-keys-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} channels=${animation.channels.length} bakedFrames=5 desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00114") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00114-operator-action.clean.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00114/action-clean-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-clean-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapCleanObjectAction:object:WebGapCleanObject"); + assert.ok(animation); + assert.equal(animation.channels.length, desktop.action.channels.length); + for (const [index, channel] of animation.channels.entries()) { + const expected = desktop.action.channels[index]; + assert.equal(channel.path.replace(/\[\d+\]$/, ""), expected.path); + assert.deepEqual(channel.keyframes.map((value) => value.frame), expected.frames); + } + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.length), [1, 1, 1]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_CLEAN_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, threshold: desktop.threshold, keyframesPerChannel: animation.channels.map((channel) => channel.keyframes.length) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00115" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00114/action-clean-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} channels=${animation.channels.length} remainingFrames=1 desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00115") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00115-operator-action.clickselect.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00115/action-clickselect-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-clickselect-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapClickSelectObjectAction:object:WebGapClickSelectObject"); + assert.ok(animation); + assert.equal(animation.channels.length, desktop.action.channels.length); + for (const [index, channel] of animation.channels.entries()) { + const expected = desktop.action.channels[index]; + assert.equal(channel.path.replace(/\[\d+\]$/, ""), expected.path); + assert.deepEqual(channel.keyframes.map((value) => value.frame), expected.frames); + assert.deepEqual(channel.keyframes.map((value) => value.selected), expected.selected); + } + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.filter((value) => value.selected).map((value) => value.frame)), [[3], [3], [3]]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_CLICKSELECT_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, selectedFrames: animation.channels.map((channel) => channel.keyframes.filter((value) => value.selected).map((value) => value.frame)) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00116" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00115/action-clickselect-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} selectedFrame=3 desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00116") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00116-operator-action.copy.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00116/action-copy-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-copy-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "NONE"); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapCopyObjectAction:object:WebGapCopyObject"); + assert.ok(animation); + assert.equal(animation.channels.length, desktop.action.channels.length); + for (const [index, channel] of animation.channels.entries()) { + const expected = desktop.action.channels[index]; + assert.equal(channel.path.replace(/\[\d+\]$/, ""), expected.path); + assert.deepEqual(channel.keyframes.map((value) => value.frame), expected.frames); + assert.deepEqual(channel.keyframes.map((value) => value.selected), expected.selected); + } + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.filter((value) => value.selected).map((value) => value.frame)), [[3], [3], [3]]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_COPY_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", actionId: animation.id, copiedFrames: [3], selectedFrames: animation.channels.map((channel) => channel.keyframes.filter((value) => value.selected).map((value) => value.frame)) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00117" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00116/action-copy-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} copiedFrame=3 mainMutation=none desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00117") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00117-operator-action.delete.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00117/action-delete-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-delete-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapDeleteObjectAction:object:WebGapDeleteObject"); + assert.ok(animation); + assert.equal(animation.channels.length, desktop.action.channels.length); + for (const [index, channel] of animation.channels.entries()) { + const expected = desktop.action.channels[index]; + assert.equal(channel.path.replace(/\[\d+\]$/, ""), expected.path); + assert.deepEqual(channel.keyframes.map((value) => value.frame), expected.frames); + assert.deepEqual(channel.keyframes.map((value) => value.selected), expected.selected); + } + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.map((value) => value.frame)), [[1, 5], [1, 5], [1, 5]]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_DELETE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, deletedFrames: [3], remainingFrames: animation.channels.map((channel) => channel.keyframes.map((value) => value.frame)) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00118" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00117/action-delete-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} deletedFrame=3 remainingFrames=1,5 desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00118") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00118-operator-action.duplicate.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00118/action-duplicate-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-duplicate-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapDuplicateObjectAction:object:WebGapDuplicateObject"); + assert.ok(animation); + assert.equal(animation.channels.length, desktop.action.channels.length); + for (const [index, channel] of animation.channels.entries()) { + const expected = desktop.action.channels[index]; + assert.equal(channel.path.replace(/\[\d+\]$/, ""), expected.path); + assert.deepEqual(channel.keyframes.map((value) => value.frame), expected.frames); + assert.deepEqual(channel.keyframes.map((value) => value.selected), expected.selected); + } + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.map((value) => value.frame)), [[1, 3, 3, 5], [1, 3, 3, 5], [1, 3, 3, 5]]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_DUPLICATE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, duplicatedFrames: [3], keyframesPerChannel: animation.channels.map((channel) => channel.keyframes.map((value) => value.frame)) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00119" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00118/action-duplicate-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} duplicatedFrame=3 frames=1,3,3,5 desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00119") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00119-operator-action.duplicate_move.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00119/action-duplicate-move-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-duplicate-move-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapDuplicateMoveObjectAction:object:WebGapDuplicateMoveObject"); + assert.ok(animation); + assert.equal(animation.channels.length, desktop.action.channels.length); + for (const [index, channel] of animation.channels.entries()) { + const expected = desktop.action.channels[index]; + assert.equal(channel.path.replace(/\[\d+\]$/, ""), expected.path); + assert.deepEqual(channel.keyframes.map((value) => value.frame), expected.frames); + assert.deepEqual(channel.keyframes.map((value) => value.selected), expected.selected); + } + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.map((value) => value.frame)), [[1, 3, 5], [1, 3, 5], [1, 3, 5]]); + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.filter((value) => value.selected).map((value) => value.frame)), [[5], [5], [5]]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_DUPLICATE_MOVE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, sourceFrame: 3, movedFrame: 5, timeOffset: 2, selectedFrames: animation.channels.map((channel) => channel.keyframes.filter((value) => value.selected).map((value) => value.frame)) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00120" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00119/action-duplicate-move-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} sourceFrame=3 movedFrame=5 offset=2 desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00120") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00120-operator-action.easing_type.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00120/action-easing-type-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-easing-type-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapEasingTypeObjectAction:object:WebGapEasingTypeObject"); + assert.ok(animation); + assert.equal(animation.channels.length, desktop.action.channels.length); + for (const [index, channel] of animation.channels.entries()) { + const expected = desktop.action.channels[index]; + assert.equal(channel.path.replace(/\[\d+\]$/, ""), expected.path); + assert.deepEqual(channel.keyframes.map((value) => value.frame), expected.frames); + assert.deepEqual(channel.keyframes.map((value) => value.easing), expected.easing); + assert.deepEqual(channel.keyframes.map((value) => value.selected), expected.selected); + } + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.map((value) => value.easing)), [["AUTO", "EASE_IN_OUT", "AUTO"], ["AUTO", "EASE_IN_OUT", "AUTO"], ["AUTO", "EASE_IN_OUT", "AUTO"]]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_EASING_TYPE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, easingType: "EASE_IN_OUT", easingPerChannel: animation.channels.map((channel) => channel.keyframes.map((value) => value.easing)) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00121" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00120/action-easing-type-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} easing=EASE_IN_OUT frame=3 desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00121") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00121-operator-action.extrapolation_type.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00121/action-extrapolation-type-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-extrapolation-type-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapExtrapolationTypeObjectAction:object:WebGapExtrapolationTypeObject"); + assert.ok(animation); + assert.equal(animation.channels.length, desktop.action.channels.length); + for (const [index, channel] of animation.channels.entries()) { + const expected = desktop.action.channels[index]; + assert.equal(channel.path.replace(/\[\d+\]$/, ""), expected.path); + assert.equal(channel.extrapolation, expected.extrapolation); + } + assert.deepEqual(animation.channels.map((channel) => channel.extrapolation), ["LINEAR", "LINEAR", "LINEAR"]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_EXTRAPOLATION_TYPE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, extrapolationType: "LINEAR", extrapolationPerChannel: animation.channels.map((channel) => channel.extrapolation) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00122" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00121/action-extrapolation-type-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} extrapolation=LINEAR desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00122") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00122-operator-action.frame_jump.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00122/action-frame-jump-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-frame-jump-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + assert.equal(before.frame.current, desktop.jumpedToFrame); + const animation = before.animations?.find((value) => value.id === "action:WebGapFrameJumpObjectAction:object:WebGapFrameJumpObject"); + assert.ok(animation); + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.filter((value) => value.selected).map((value) => value.frame)), [[5], [5], [5]]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).frame, before.frame); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).frame, before.frame); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_FRAME_JUMP_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, jumpedToFrame: before.frame.current, selectedFrames: animation.channels.map((channel) => channel.keyframes.filter((value) => value.selected).map((value) => value.frame)) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00123" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00122/action-frame-jump-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} currentFrame=${before.frame.current} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00123") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00123-operator-action.handle_type.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00123/action-handle-type-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-handle-type-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapHandleTypeObjectAction:object:WebGapHandleTypeObject"); + assert.ok(animation); + assert.equal(animation.channels.length, desktop.action.channels.length); + for (const [index, channel] of animation.channels.entries()) { + const expected = desktop.action.channels[index]; + assert.equal(channel.path.replace(/\[\d+\]$/, ""), expected.path); + assert.deepEqual(channel.keyframes.map((value) => value.frame), expected.frames); + assert.deepEqual(channel.keyframes.map((value) => value.handleType), expected.handleType); + assert.deepEqual(channel.keyframes.map((value) => value.selected), expected.selected); + } + const handleTypes = animation.channels.map((channel) => channel.keyframes.map((value) => value.handleType)); + assert.deepEqual(handleTypes, [["VECTOR", "VECTOR", "VECTOR"], ["VECTOR", "VECTOR", "VECTOR"], ["VECTOR", "VECTOR", "VECTOR"]]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_HANDLE_TYPE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, handleType: "VECTOR", handleTypes }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00124" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00123/action-handle-type-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} handle=VECTOR channels=${animation.channels.length} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00124") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00124-operator-action.interpolation_type.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00124/action-interpolation-type-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-interpolation-type-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapInterpolationTypeObjectAction:object:WebGapInterpolationTypeObject"); + assert.ok(animation); + assert.equal(animation.channels.length, desktop.action.channels.length); + for (const [index, channel] of animation.channels.entries()) { + const expected = desktop.action.channels[index]; + assert.equal(channel.path.replace(/\[\d+\]$/, ""), expected.path); + assert.deepEqual(channel.keyframes.map((value) => value.frame), expected.frames); + assert.deepEqual(channel.keyframes.map((value) => value.interpolation), expected.interpolation); + assert.deepEqual(channel.keyframes.map((value) => value.selected), expected.selected); + } + const interpolationPerChannel = animation.channels.map((channel) => channel.keyframes.map((value) => value.interpolation)); + assert.deepEqual(interpolationPerChannel, [["BEZIER", "LINEAR", "BEZIER"], ["BEZIER", "LINEAR", "BEZIER"], ["BEZIER", "LINEAR", "BEZIER"]]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_INTERPOLATION_TYPE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, interpolationType: "LINEAR", interpolationPerChannel }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00125" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00124/action-interpolation-type-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} interpolation=LINEAR frame=3 desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00125") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00125-operator-action.keyframe_insert.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00125/action-keyframe-insert-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-keyframe-insert-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapKeyframeInsertObjectAction:object:WebGapKeyframeInsertObject"); + assert.ok(animation); + assert.equal(animation.channels.length, desktop.action.channels.length); + for (const [index, channel] of animation.channels.entries()) { + const expected = desktop.action.channels[index]; + assert.equal(channel.path.replace(/\[\d+\]$/, ""), expected.path); + assert.deepEqual(channel.keyframes.map((value) => value.frame), expected.frames); + assert.deepEqual(channel.keyframes.map((value) => value.value[0]), expected.values); + assert.deepEqual(channel.keyframes.map((value) => value.selected), expected.selected); + } + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.map((value) => value.frame)), [[1, 3, 5], [1, 3, 5], [1, 3, 5]]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_KEYFRAME_INSERT_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, insertedFrame: 3, framesPerChannel: animation.channels.map((channel) => channel.keyframes.map((value) => value.frame)) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00126" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00125/action-keyframe-insert-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} insertedFrame=3 channels=${animation.channels.length} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00126") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00126-operator-action.keyframe_type.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00126/action-keyframe-type-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-keyframe-type-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapKeyframeTypeObjectAction:object:WebGapKeyframeTypeObject"); + assert.ok(animation); + assert.equal(animation.channels.length, desktop.action.channels.length); + for (const [index, channel] of animation.channels.entries()) { + const expected = desktop.action.channels[index]; + assert.equal(channel.path.replace(/\[\d+\]$/, ""), expected.path); + assert.deepEqual(channel.keyframes.map((value) => value.frame), expected.frames); + assert.deepEqual(channel.keyframes.map((value) => value.keyframeType), expected.keyframeType); + assert.deepEqual(channel.keyframes.map((value) => value.selected), expected.selected); + } + const keyframeTypes = animation.channels.map((channel) => channel.keyframes.map((value) => value.keyframeType)); + assert.deepEqual(keyframeTypes, [["KEYFRAME", "BREAKDOWN", "KEYFRAME"], ["KEYFRAME", "BREAKDOWN", "KEYFRAME"], ["KEYFRAME", "BREAKDOWN", "KEYFRAME"]]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_KEYFRAME_TYPE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, keyframeType: "BREAKDOWN", keyframeTypes }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00127" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00126/action-keyframe-type-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} keyframeType=BREAKDOWN frame=3 desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00127") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00127-operator-action.markers_make_local.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00127/action-markers-make-local-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-markers-make-local-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapMarkersMakeLocalObjectAction:object:WebGapMarkersMakeLocalObject"); + assert.ok(animation); + assert.deepEqual(animation.markers, desktop.action.markers); + assert.deepEqual(animation.markers, [{ name: "LocalActionMarker", frame: 3 }]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_MARKERS_MAKE_LOCAL_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, markers: animation.markers }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00128" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00127/action-markers-make-local-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} markers=1 frame=3 desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00128") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00128-operator-action.mirror.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00128/action-mirror-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-mirror-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapMirrorObjectAction:object:WebGapMirrorObject"); + assert.ok(animation); + assert.equal(animation.channels.length, desktop.action.channels.length); + for (const [index, channel] of animation.channels.entries()) { + const expected = desktop.action.channels[index]; + assert.equal(channel.path.replace(/\[\d+\]$/, ""), expected.path); + assert.deepEqual(channel.keyframes.map((value) => value.frame), expected.frames); + assert.deepEqual(channel.keyframes.map((value) => value.value[0]), expected.values); + assert.deepEqual(channel.keyframes.map((value) => value.selected), expected.selected); + } + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.map((value) => value.value[0])), [[-1, -2, -4], [-2, -4, -8], [-3, -6, -12]]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_MIRROR_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, mirrorType: "XAXIS", valuesPerChannel: animation.channels.map((channel) => channel.keyframes.map((value) => value.value[0])) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00129" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00128/action-mirror-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} mirror=XAXIS desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00129") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00129-operator-action.new.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00129/action-new-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-new-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === `action:${desktop.action.name}:object:WebGapActionNewObject`); + assert.ok(animation); + assert.equal(animation.name, desktop.action.name); + assert.equal(animation.channels.length, desktop.action.channels); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_NEW_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, actionName: animation.name, channels: animation.channels.length }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00130" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00129/action-new-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} channels=${animation.channels.length} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00130") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00130-operator-action.paste.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00130/action-paste-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-paste-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapPasteObjectAction:object:WebGapPasteObject"); + assert.ok(animation); + assert.equal(animation.channels.length, desktop.action.channels.length); + for (const [index, channel] of animation.channels.entries()) { + const expected = desktop.action.channels[index]; + assert.equal(channel.path.replace(/\[\d+\]$/, ""), expected.path); + assert.deepEqual(channel.keyframes.map((value) => value.frame), expected.frames); + assert.deepEqual(channel.keyframes.map((value) => value.value[0]), expected.values); + } + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.map((value) => value.frame)), [[1, 3, 5, 7], [1, 3, 5, 7], [1, 3, 5, 7]]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_PASTE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, pastedFrame: 7, framesPerChannel: animation.channels.map((channel) => channel.keyframes.map((value) => value.frame)) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00131" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00130/action-paste-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} pastedFrame=7 channels=${animation.channels.length} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00131") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00131-operator-action.previewrange_set.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00131/action-previewrange-set-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-previewrange-set-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const scene = before.scenes?.find((value) => value.id === before.sceneId) ?? before.scenes?.[0]; + assert.ok(scene); + assert.deepEqual(scene.previewRange, { start: 1, end: 5 }); + assert.deepEqual(scene.previewRange, desktop.previewRange); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual((snapshot(engine, reopened).scenes?.find((value) => value.id === before.sceneId) ?? snapshot(engine, reopened).scenes?.[0]).previewRange, scene.previewRange); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual((snapshot(engine, handle).scenes?.find((value) => value.id === before.sceneId) ?? snapshot(engine, handle).scenes?.[0]).previewRange, scene.previewRange); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_PREVIEWRANGE_SET_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", sceneId: scene.id, previewRange: scene.previewRange }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00132" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00131/action-previewrange-set-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} scene=${scene.id} preview=1-5 desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00132") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00132-operator-action.push_down.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00132/action-push-down-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-push-down-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const action = before.animations?.find((value) => value.id === "action:WebGapPushDownObjectAction:object:WebGapPushDownObject"); + assert.ok(action); + const tracks = before.nlaTracks?.filter((value) => value.ownerId === "object:WebGapPushDownObject") ?? []; + assert.equal(tracks.length, desktop.nla.tracks.length); + assert.equal(tracks.length, 1); + assert.equal(tracks[0].strips.length, 1); + assert.equal(tracks[0].strips[0].actionId, action.id); + assert.equal(before.animations.some((value) => value.id === action.id), true); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).nlaTracks, before.nlaTracks); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).nlaTracks, before.nlaTracks); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_PUSH_DOWN_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: action.id, nlaTracks: tracks }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00133" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00132/action-push-down-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${action.id} nlaTracks=1 strips=1 desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00133") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00133-operator-action.select_all.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00133/action-select-all-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-select-all-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapSelectAllObjectAction:object:WebGapSelectAllObject"); + assert.ok(animation); + assert.equal(animation.channels.length, desktop.action.channels.length); + for (const [index, channel] of animation.channels.entries()) { + const expected = desktop.action.channels[index]; + assert.equal(channel.path.replace(/\[\d+\]$/, ""), expected.path); + assert.deepEqual(channel.keyframes.map((value) => value.frame), expected.frames); + assert.deepEqual(channel.keyframes.map((value) => value.selected), expected.selected); + } + assert.ok(animation.channels.every((channel) => channel.keyframes.every((value) => value.selected === true))); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_SELECT_ALL_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, selected: true, channels: animation.channels.length }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00134" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00133/action-select-all-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} selected=all channels=${animation.channels.length} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00134") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00134-operator-action.select_box.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00134/action-select-box-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-select-box-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapSelectBoxObjectAction:object:WebGapSelectBoxObject"); + assert.ok(animation); + assert.equal(animation.channels.length, desktop.action.channels.length); + for (const [index, channel] of animation.channels.entries()) { + const expected = desktop.action.channels[index]; + assert.equal(channel.path.replace(/\[\d+\]$/, ""), expected.path); + assert.deepEqual(channel.keyframes.map((value) => value.frame), expected.frames); + assert.deepEqual(channel.keyframes.map((value) => value.selected), expected.selected); + } + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.filter((value) => value.selected).map((value) => value.frame)), [[3], [3], [3]]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_SELECT_BOX_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, selectedFrame: 3, selectedPerChannel: animation.channels.map((channel) => channel.keyframes.filter((value) => value.selected).map((value) => value.frame)) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00135" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00134/action-select-box-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} selectedFrame=3 channels=${animation.channels.length} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00135") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00135-operator-action.select_by_type.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00135/action-select-by-type-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-select-by-type-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapSelectByTypeObjectAction:object:WebGapSelectByTypeObject"); + assert.ok(animation); + assert.equal(animation.channels.length, desktop.action.channels.length); + for (const [index, channel] of animation.channels.entries()) { + const expected = desktop.action.channels[index]; + assert.equal(channel.path.replace(/\[\d+\]$/, ""), expected.path); + assert.deepEqual(channel.keyframes.map((value) => value.keyframeType), expected.keyframeType); + assert.deepEqual(channel.keyframes.map((value) => value.selected), expected.selected); + } + assert.ok(animation.channels.every((channel) => channel.keyframes[1].selected && channel.keyframes[1].keyframeType === "BREAKDOWN")); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_SELECT_BY_TYPE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, selectedType: "BREAKDOWN", selectedPerChannel: animation.channels.map((channel) => channel.keyframes.filter((value) => value.selected).map((value) => value.frame)) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00136" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00135/action-select-by-type-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} type=BREAKDOWN selectedFrame=3 desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00136") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00136-operator-action.select_circle.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00136/action-select-circle-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-select-circle-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapSelectCircleObjectAction:object:WebGapSelectCircleObject"); + assert.ok(animation); + assert.equal(animation.channels.length, desktop.action.channels.length); + for (const [index, channel] of animation.channels.entries()) { + const expected = desktop.action.channels[index]; + assert.equal(channel.path.replace(/\[\d+\]$/, ""), expected.path); + assert.deepEqual(channel.keyframes.map((value) => value.frame), expected.frames); + assert.deepEqual(channel.keyframes.map((value) => value.selected), expected.selected); + } + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.filter((value) => value.selected).map((value) => value.frame)), [[3], [3], [3]]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_SELECT_CIRCLE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, selectedFrame: 3, selectedPerChannel: animation.channels.map((channel) => channel.keyframes.filter((value) => value.selected).map((value) => value.frame)) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00137" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00136/action-select-circle-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} selectedFrame=3 channels=${animation.channels.length} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00137") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00137-operator-action.select_column.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00137/action-select-column-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-select-column-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapSelectColumnObjectAction:object:WebGapSelectColumnObject"); + assert.ok(animation); + assert.equal(animation.channels.length, desktop.action.channels.length); + for (const [index, channel] of animation.channels.entries()) { + const expected = desktop.action.channels[index]; + assert.equal(channel.path.replace(/\[\d+\]$/, ""), expected.path); + assert.deepEqual(channel.keyframes.map((value) => value.frame), expected.frames); + assert.deepEqual(channel.keyframes.map((value) => value.selected), expected.selected); + } + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.filter((value) => value.selected).map((value) => value.frame)), [[3], [3], [3]]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_SELECT_COLUMN_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, selectedFrame: 3, selectedPerChannel: animation.channels.map((channel) => channel.keyframes.filter((value) => value.selected).map((value) => value.frame)) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00138" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00137/action-select-column-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} selectedFrame=3 channels=${animation.channels.length} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00138") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00138-operator-action.select_lasso.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00138/action-select-lasso-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-select-lasso-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapSelectLassoObjectAction:object:WebGapSelectLassoObject"); + assert.ok(animation); + assert.equal(animation.channels.length, desktop.action.channels.length); + for (const [index, channel] of animation.channels.entries()) { + const expected = desktop.action.channels[index]; + assert.equal(channel.path.replace(/\[\d+\]$/, ""), expected.path); + assert.deepEqual(channel.keyframes.map((value) => value.frame), expected.frames); + assert.deepEqual(channel.keyframes.map((value) => value.selected), expected.selected); + } + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.filter((value) => value.selected).map((value) => value.frame)), [[3], [3], [3]]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_SELECT_LASSO_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, selectedFrame: 3, selectedPerChannel: animation.channels.map((channel) => channel.keyframes.filter((value) => value.selected).map((value) => value.frame)) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00139" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00138/action-select-lasso-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} selectedFrame=3 channels=${animation.channels.length} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00139") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00139-operator-action.select_leftright.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00139/action-select-leftright-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-select-leftright-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mode, "LEFT"); + assert.deepEqual(desktop.selectedFrames, [1, 3]); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapSelectLeftRightObjectAction:object:WebGapSelectLeftRightObject"); + assert.ok(animation); + assert.equal(animation.channels.length, desktop.action.channels.length); + for (const [index, channel] of animation.channels.entries()) { + const expected = desktop.action.channels[index]; + assert.equal(channel.path.replace(/\[\d+\]$/, ""), expected.path); + assert.deepEqual(channel.keyframes.map((value) => value.frame), expected.frames); + assert.deepEqual(channel.keyframes.map((value) => value.selected), expected.selected); + } + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.filter((value) => value.selected).map((value) => value.frame)), [[1, 3], [1, 3], [1, 3]]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_SELECT_LEFTRIGHT_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, mode: "LEFT", selectedFrames: [1, 3], selectedPerChannel: animation.channels.map((channel) => channel.keyframes.filter((value) => value.selected).map((value) => value.frame)) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00140" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00139/action-select-leftright-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} mode=left selectedFrames=1,3 channels=${animation.channels.length} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00140") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00140-operator-action.select_less.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00140/action-select-less-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-select-less-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.selectedFrame, 3); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapSelectLessObjectAction:object:WebGapSelectLessObject"); + assert.ok(animation); + assert.equal(animation.channels.length, desktop.action.channels.length); + for (const [index, channel] of animation.channels.entries()) { + const expected = desktop.action.channels[index]; + assert.equal(channel.path.replace(/\[\d+\]$/, ""), expected.path); + assert.deepEqual(channel.keyframes.map((value) => value.frame), expected.frames); + assert.deepEqual(channel.keyframes.map((value) => value.selected), expected.selected); + } + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.filter((value) => value.selected).map((value) => value.frame)), [[3], [3], [3]]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_SELECT_LESS_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, selectedFrame: 3, selectedPerChannel: animation.channels.map((channel) => channel.keyframes.filter((value) => value.selected).map((value) => value.frame)) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00141" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00140/action-select-less-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} selectedFrame=3 channels=${animation.channels.length} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00141") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00141-operator-action.select_linked.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00141/action-select-linked-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-select-linked-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.selectedChannel, "location[0]"); + assert.deepEqual(desktop.selectedFrames, [1, 3, 5]); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapSelectLinkedObjectAction:object:WebGapSelectLinkedObject"); + assert.ok(animation); + assert.equal(animation.channels.length, desktop.action.channels.length); + for (const [index, channel] of animation.channels.entries()) { + const expected = desktop.action.channels[index]; + assert.equal(channel.path.replace(/\[\d+\]$/, ""), expected.path); + assert.deepEqual(channel.keyframes.map((value) => value.frame), expected.frames); + assert.deepEqual(channel.keyframes.map((value) => value.selected), expected.selected); + } + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.filter((value) => value.selected).map((value) => value.frame)), [[1, 3, 5], [1, 3, 5], [1, 3, 5]]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_SELECT_LINKED_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, selectedChannel: "location[0]", selectedFrames: [1, 3, 5], selectedPerChannel: animation.channels.map((channel) => channel.keyframes.filter((value) => value.selected).map((value) => value.frame)) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00142" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00141/action-select-linked-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} selectedChannel=location[0] selectedFrames=1,3,5 channels=${animation.channels.length} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00142") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00142-operator-action.select_more.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00142/action-select-more-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-select-more-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.selectedChannel, "location[0]"); + assert.deepEqual(desktop.selectedPerChannel, [[1, 3, 5], [1, 3, 5], [1, 3, 5]]); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapSelectMoreObjectAction:object:WebGapSelectMoreObject"); + assert.ok(animation); + assert.equal(animation.channels.length, desktop.action.channels.length); + for (const [index, channel] of animation.channels.entries()) { + const expected = desktop.action.channels[index]; + assert.equal(channel.path.replace(/\[\d+\]$/, ""), expected.path); + assert.deepEqual(channel.keyframes.map((value) => value.frame), expected.frames); + assert.deepEqual(channel.keyframes.map((value) => value.selected), expected.selected); + } + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.filter((value) => value.selected).map((value) => value.frame)), [[1, 3, 5], [1, 3, 5], [1, 3, 5]]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_SELECT_MORE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, selectedChannel: "location[0]", selectedPerChannel: [[1, 3, 5], [1, 3, 5], [1, 3, 5]] }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00143" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00142/action-select-more-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} selectedChannel=location[0] selectedPerChannel=1,3,5|1,3,5|1,3,5 channels=${animation.channels.length} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00143") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00143-operator-action.snap.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00143/action-snap-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-snap-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.type, "CFRA"); + assert.equal(desktop.currentFrame, 4); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapSnapObjectAction:object:WebGapSnapObject"); + assert.ok(animation); + assert.equal(animation.channels.length, desktop.action.channels.length); + for (const [index, channel] of animation.channels.entries()) { + const expected = desktop.action.channels[index]; + assert.equal(channel.path.replace(/\[\d+\]$/, ""), expected.path); + assert.deepEqual(channel.keyframes.map((value) => value.frame), expected.frames); + assert.deepEqual(channel.keyframes.map((value) => value.selected), expected.selected); + } + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.map((value) => value.frame)), [[1, 4, 5], [1, 4, 5], [1, 4, 5]]); + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.filter((value) => value.selected).map((value) => value.frame)), [[4], [4], [4]]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_SNAP_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, type: "CFRA", currentFrame: 4, framesPerChannel: [[1, 4, 5], [1, 4, 5], [1, 4, 5]], selectedPerChannel: [[4], [4], [4]] }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00144" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00143/action-snap-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} type=CFRA currentFrame=4 channels=${animation.channels.length} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00144") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00144-operator-action.stash.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00144/action-stash-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-stash-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.nla.activeAction, null); + assert.equal(desktop.nla.tracks.length, 1); + assert.equal(desktop.nla.tracks[0].strips.length, 1); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const action = before.animations?.find((value) => value.id === "action:WebGapStashObjectAction:object:WebGapStashObject"); + assert.ok(action); + const tracks = before.nlaTracks?.filter((value) => value.ownerId === "object:WebGapStashObject") ?? []; + assert.equal(tracks.length, desktop.nla.tracks.length); + assert.equal(tracks.length, 1); + assert.equal(tracks[0].strips.length, 1); + assert.equal(tracks[0].strips[0].actionId, action.id); + assert.equal(before.animations.some((value) => value.id === action.id), true); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).nlaTracks, before.nlaTracks); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).nlaTracks, before.nlaTracks); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_STASH_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: action.id, nlaTracks: tracks }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00145" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00144/action-stash-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${action.id} nlaTracks=1 strips=1 desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00145") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00145-operator-action.stash_and_create.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00145/action-stash-and-create-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-stash-and-create-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.nla.activeAction, "Action"); + assert.equal(desktop.nla.tracks.length, 1); + assert.equal(desktop.nla.tracks[0].strips.length, 1); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const stashed = before.animations?.find((value) => value.id === "action:WebGapStashCreateObjectAction:object:WebGapStashCreateObject"); + assert.ok(stashed); + const tracks = before.nlaTracks?.filter((value) => value.ownerId === "object:WebGapStashCreateObject") ?? []; + assert.equal(tracks.length, 1); + assert.equal(tracks[0].strips.length, 1); + assert.equal(tracks[0].strips[0].actionId, stashed.id); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).nlaTracks, before.nlaTracks); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); assert.deepEqual(snapshot(engine, handle).nlaTracks, before.nlaTracks); + engine._web_engine_destroy(handle); engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_STASH_AND_CREATE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", activeActionId: null, stashedActionId: stashed.id, nlaTracks: tracks }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00146" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00145/action-stash-and-create-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} activeAction=empty stashedAction=${stashed.id} nlaTracks=1 strips=1 desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00146") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00146-operator-action.unlink.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00146/action-unlink-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-unlink-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.action.activeAction, null); + assert.equal(desktop.action.unlinkedAction.name, "WebGapActionUnlinkObjectAction"); + assert.equal(desktop.action.unlinkedAction.users, 1); + assert.equal(desktop.action.unlinkedAction.useFakeUser, true); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const action = before.animations?.find((value) => value.unlinked === true); + assert.ok(action); + assert.equal(action.name, desktop.action.unlinkedAction.name); + assert.equal(action.targetId, "unlinked"); + assert.equal(action.channels.length, desktop.action.unlinkedAction.channels.length); + for (const [index, channel] of action.channels.entries()) { + const expected = desktop.action.unlinkedAction.channels[index]; + assert.equal(channel.path.replace(/\[\d+\]$/, ""), expected.path); + assert.equal(Number(channel.path.match(/\[(\d+)\]$/)?.[1] ?? 0), expected.index); + assert.deepEqual(channel.keyframes.map((keyframe) => keyframe.frame), expected.frames); + } + assert.deepEqual(action.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.frame)), [[1, 3, 5], [1, 3, 5], [1, 3, 5]]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle), before); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_UNLINK_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: action.id, targetId: action.targetId, unlinked: action.unlinked, keyframesPerChannel: action.channels.map((channel) => channel.keyframes.length) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00147" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00146/action-unlink-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${action.id} unlinked=true channels=${action.channels.length} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00147") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00147-operator-action.view_all.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00147/action-view-all-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-view-all-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.action.areaType, "DOPESHEET_EDITOR"); + assert.equal(desktop.action.uiMode, "ACTION"); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + assert.equal(before.editorWorkflowStatus, "AVAILABLE"); + const workflow = before.editorWorkflow; + const actionArea = workflow.workspaces.flatMap((workspace) => workspace.areas).find((area) => area.editor === "DOPE_SHEET"); + assert.ok(actionArea); + const actionRegion = actionArea.regions.find((region) => region.kind === "MAIN"); + assert.ok(actionRegion?.view2d); + assert.deepEqual(actionRegion.view2d, desktop.action.view2d); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).editorWorkflow, before.editorWorkflow); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).editorWorkflow, before.editorWorkflow); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_VIEW_ALL_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", editor: "DOPE_SHEET", regionKind: "MAIN", view2d: actionRegion.view2d }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00148" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00147/action-view-all-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} editor=DOPE_SHEET view2d=exact desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00148") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00148-operator-action.view_frame.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00148/action-view-frame-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-view-frame-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.action.areaType, "DOPESHEET_EDITOR"); + assert.equal(desktop.action.uiMode, "ACTION"); + assert.equal(desktop.action.currentFrame, 3); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + assert.equal(before.frame.current, 3); + assert.equal(before.editorWorkflowStatus, "AVAILABLE"); + const workflow = before.editorWorkflow; + const sameView = (left, right) => left?.cur?.xmin === right?.cur?.xmin && left?.cur?.xmax === right?.cur?.xmax && left?.cur?.ymin === right?.cur?.ymin && left?.cur?.ymax === right?.cur?.ymax && left?.mask?.xmin === right?.mask?.xmin && left?.mask?.xmax === right?.mask?.xmax && left?.mask?.ymin === right?.mask?.ymin && left?.mask?.ymax === right?.mask?.ymax; + const actionRegion = workflow.workspaces.flatMap((workspace) => workspace.areas) + .filter((area) => area.editor === "DOPE_SHEET") + .flatMap((area) => area.regions) + .find((region) => region.kind === "MAIN" && sameView(region.view2d, desktop.action.view2d)); + assert.ok(actionRegion?.view2d); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).editorWorkflow, before.editorWorkflow); + assert.equal(snapshot(engine, reopened).frame.current, 3); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).editorWorkflow, before.editorWorkflow); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_VIEW_FRAME_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", editor: "DOPE_SHEET", regionKind: "MAIN", currentFrame: before.frame.current, view2d: actionRegion.view2d }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00149" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00148/action-view-frame-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} editor=DOPE_SHEET currentFrame=3 view2d=exact desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00149") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00149-operator-action.view_selected.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00149/action-view-selected-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-view-selected-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.selectedFrame, 3); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapActionViewSelectedObjectAction:object:WebGapActionViewSelectedObject"); + assert.ok(animation); + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.selected)), desktop.action.channels.map((channel) => channel.selected)); + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.filter((keyframe) => keyframe.selected).map((keyframe) => keyframe.frame)), [[3], [3], [3]]); + assert.equal(before.editorWorkflowStatus, "AVAILABLE"); + const sameView = (left, right) => left?.cur?.xmin === right?.cur?.xmin && left?.cur?.xmax === right?.cur?.xmax && left?.cur?.ymin === right?.cur?.ymin && left?.cur?.ymax === right?.cur?.ymax && left?.mask?.xmin === right?.mask?.xmin && left?.mask?.xmax === right?.mask?.xmax && left?.mask?.ymin === right?.mask?.ymin && left?.mask?.ymax === right?.mask?.ymax; + const actionRegion = before.editorWorkflow.workspaces.flatMap((workspace) => workspace.areas) + .filter((area) => area.editor === "DOPE_SHEET") + .flatMap((area) => area.regions) + .find((region) => region.kind === "MAIN" && sameView(region.view2d, desktop.view2d)); + assert.ok(actionRegion?.view2d); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + assert.deepEqual(snapshot(engine, reopened).editorWorkflow, before.editorWorkflow); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ACTION_VIEW_SELECTED_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, selectedFrame: 3, selectedPerChannel: animation.channels.map((channel) => channel.keyframes.filter((keyframe) => keyframe.selected).map((keyframe) => keyframe.frame)), view2d: actionRegion.view2d }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00150" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00149/action-view-selected-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} selectedFrame=3 view2d=exact desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00150") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00150-operator-anim.change_frame.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00150/anim-change-frame-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-change-frame-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.changedToFrame, 4); + assert.equal(desktop.currentFrame, 4); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + assert.equal(before.frame.current, 4); + const animation = before.animations?.find((value) => value.id === "action:WebGapAnimChangeFrameObjectAction:object:WebGapAnimChangeFrameObject"); + assert.ok(animation); + assert.equal(animation.channels.length, desktop.action.channels.length); + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.map((value) => value.frame)), desktop.action.channels.map((channel) => channel.frames)); + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.map((value) => value.selected)), desktop.action.channels.map((channel) => channel.selected)); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).frame, before.frame); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).frame, before.frame); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_CHANGE_FRAME_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, changedToFrame: before.frame.current, framesPerChannel: animation.channels.map((channel) => channel.keyframes.map((value) => value.frame)) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00151" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00150/anim-change-frame-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} changedToFrame=4 desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00151") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00151-operator-anim.channel_select_keys.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00151/anim-channel-select-keys-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-channel-select-keys-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.deepEqual(desktop.action.channels.map((channel) => channel.selected), [[true, true, true], [false, false, false], [false, false, false]]); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapAnimChannelSelectKeysObjectAction:object:WebGapAnimChannelSelectKeysObject"); + assert.ok(animation); + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.map((value) => value.selected)), desktop.action.channels.map((channel) => channel.selected)); + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.filter((value) => value.selected).map((value) => value.frame)), [[1, 3, 5], [], []]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_CHANNEL_SELECT_KEYS_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, selectedChannel: { path: "location", index: 0 }, selectedPerChannel: animation.channels.map((channel) => channel.keyframes.filter((value) => value.selected).map((value) => value.frame)) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00152" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00151/anim-channel-select-keys-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} selectedChannel=location[0] desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00152") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00152-operator-anim.channel_view_pick.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00152/anim-channel-view-pick-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-channel-view-pick-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapAnimChannelViewPickObjectAction:object:WebGapAnimChannelViewPickObject"); + assert.ok(animation); + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.map((value) => value.frame)), desktop.action.channels.map((channel) => channel.frames)); + assert.equal(before.editorWorkflowStatus, "AVAILABLE"); + const sameView = (left, right) => left?.cur?.xmin === right?.cur?.xmin && left?.cur?.xmax === right?.cur?.xmax && left?.cur?.ymin === right?.cur?.ymin && left?.cur?.ymax === right?.cur?.ymax && left?.mask?.xmin === right?.mask?.xmin && left?.mask?.xmax === right?.mask?.xmax && left?.mask?.ymin === right?.mask?.ymin && left?.mask?.ymax === right?.mask?.ymax; + const actionRegion = before.editorWorkflow.workspaces.flatMap((workspace) => workspace.areas) + .filter((area) => area.editor === "DOPE_SHEET") + .flatMap((area) => area.regions) + .find((region) => region.kind === "MAIN" && sameView(region.view2d, desktop.view2d)); + assert.ok(actionRegion?.view2d); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + assert.deepEqual(snapshot(engine, reopened).editorWorkflow, before.editorWorkflow); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).editorWorkflow, before.editorWorkflow); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_CHANNEL_VIEW_PICK_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, editor: "DOPE_SHEET", regionKind: "MAIN", view2d: actionRegion.view2d }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00153" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00152/anim-channel-view-pick-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} view2d=exact desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00153") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00153-operator-anim.channels_bake.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00153/anim-channels-bake-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-channels-bake-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.deepEqual(desktop.bakeRange, [1, 5]); + assert.equal(desktop.step, 1); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapAnimChannelsBakeObjectAction:object:WebGapAnimChannelsBakeObject"); + assert.ok(animation); + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.map((value) => value.frame)), desktop.action.channels.map((channel) => channel.frames)); + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.map((value) => value.frame)), [[1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5]]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_CHANNELS_BAKE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, bakeRange: [1, 5], step: 1, framesPerChannel: animation.channels.map((channel) => channel.keyframes.map((value) => value.frame)) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00154" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00153/anim-channels-bake-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} bakeRange=1..5 step=1 desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00154") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00154-operator-anim.channels_clean_empty.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00154/anim-channels-clean-empty-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-channels-clean-empty-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.emptyAnimDataRemoved, true); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapAnimChannelsCleanKeepObjectAction:object:WebGapAnimChannelsCleanKeepObject"); + assert.ok(animation); + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.map((value) => value.frame)), desktop.keepAction.channels.map((channel) => channel.frames)); + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.map((value) => value.frame)), [[1, 3, 5], [1, 3, 5], [1, 3, 5]]); + assert.equal(before.animations.some((value) => value.id.includes("WebGapAnimChannelsCleanEmptyObject")), false); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_CHANNELS_CLEAN_EMPTY_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, emptyAnimDataRemoved: true, keepFramesPerChannel: animation.channels.map((channel) => channel.keyframes.map((value) => value.frame)) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00155" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00154/anim-channels-clean-empty-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} removedEmpty=true desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00155") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00155-operator-anim.channels_click.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00155/anim-channels-click-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-channels-click-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.deepEqual(desktop.action.channels.map((channel) => channel.selected), [[true, true, true], [false, false, false], [false, false, false]]); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapAnimChannelsClickObjectAction:object:WebGapAnimChannelsClickObject"); + assert.ok(animation); + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.map((value) => value.selected)), desktop.action.channels.map((channel) => channel.selected)); + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.filter((value) => value.selected).map((value) => value.frame)), [[1, 3, 5], [], []]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_CHANNELS_CLICK_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, clickedChannel: { path: "location", index: 0 }, selectedPerChannel: animation.channels.map((channel) => channel.keyframes.filter((value) => value.selected).map((value) => value.frame)) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00156" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00155/anim-channels-click-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} clickedChannel=location[0] desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00156") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00156-operator-anim.channels_collapse.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00156/anim-channels-collapse-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-channels-collapse-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.collapsedAll, true); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapAnimChannelsCollapseObjectAction:object:WebGapAnimChannelsCollapseObject"); + assert.ok(animation); + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.map((value) => value.frame)), desktop.action.channels.map((channel) => channel.frames)); + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.map((value) => value.frame)), [[1, 3, 5], [1, 3, 5], [1, 3, 5]]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_CHANNELS_COLLAPSE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, collapsedAll: true, framesPerChannel: animation.channels.map((channel) => channel.keyframes.map((value) => value.frame)) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00157" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00156/anim-channels-collapse-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} collapsedAll=true desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00157") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00157-operator-anim.channels_delete.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00157/anim-channels-delete-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-channels-delete-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.deepEqual(desktop.deletedChannel, { path: "location", index: 0 }); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapAnimChannelsDeleteObjectAction:object:WebGapAnimChannelsDeleteObject"); + assert.equal(animation?.channels?.length ?? 0, 0); + assert.deepEqual(animation?.channels?.map((channel) => channel.keyframes.map((value) => value.frame)) ?? [], desktop.action.channels.map((channel) => channel.frames)); + assert.deepEqual(animation?.channels ?? [], []); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_CHANNELS_DELETE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation?.id ?? null, deletedChannel: { path: "location", index: 0 }, remainingChannels: animation?.channels?.length ?? 0 }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00158" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00157/anim-channels-delete-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} deleted=location[0] remaining=0 desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00158") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00158-operator-anim.channels_editable_toggle.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00158/anim-channels-editable-toggle-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-channels-editable-toggle-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.toggledChannels, 3); + assert.deepEqual(desktop.action.channels.map((channel) => channel.editable), [false, false, false]); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapAnimChannelsEditableToggleObjectAction:object:WebGapAnimChannelsEditableToggleObject"); + assert.ok(animation); + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.map((value) => value.frame)), desktop.action.channels.map((channel) => channel.frames)); + assert.deepEqual(animation.channels.map((channel) => channel.editable), desktop.action.channels.map((channel) => channel.editable)); + assert.deepEqual(animation.channels.map((channel) => channel.editable), [false, false, false]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_CHANNELS_EDITABLE_TOGGLE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, toggledChannels: animation.channels.length, editablePerChannel: animation.channels.map((channel) => channel.editable) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00159" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00158/anim-channels-editable-toggle-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} editable=false channels=${animation.channels.length} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00159") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00159-operator-anim.channels_expand.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00159/anim-channels-expand-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-channels-expand-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.expandedGroups, 1); + assert.deepEqual(desktop.action.groups, [{ name: "Object Transforms", expanded: true }]); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapAnimChannelsExpandObjectAction:object:WebGapAnimChannelsExpandObject"); + assert.ok(animation); + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.map((value) => value.frame)), desktop.action.channels.map((channel) => channel.frames)); + assert.deepEqual(animation.channels.map((channel) => ({ name: channel.group, expanded: channel.expanded })), desktop.action.channels.map((channel) => ({ name: channel.group, expanded: true }))); + assert.deepEqual(animation.channels.map((channel) => channel.expanded), [true, true, true]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_CHANNELS_EXPAND_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, expandedGroups: 1, group: { name: "Object Transforms", expanded: true } }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00160" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00159/anim-channels-expand-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} expanded=Object Transforms desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00160") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00160-operator-anim.channels_fcurves_enable.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00160/anim-channels-fcurves-enable-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-channels-fcurves-enable-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.enabledChannels, 3); + assert.deepEqual(desktop.action.channels.map((channel) => channel.enabled), [true, true, true]); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapAnimChannelsFCurvesEnableObjectAction:object:WebGapAnimChannelsFCurvesEnableObject"); + assert.ok(animation); + assert.equal(animation.channels.length, desktop.action.channels.length); + for (const [index, channel] of animation.channels.entries()) { + const expected = desktop.action.channels[index]; + assert.equal(channel.path.replace(/\[\d+\]$/, ""), expected.path); + assert.deepEqual(channel.keyframes.map((value) => value.frame), expected.frames); + assert.equal(channel.enabled, expected.enabled); + } + assert.deepEqual(animation.channels.map((channel) => channel.enabled), [true, true, true]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_CHANNELS_FCURVES_ENABLE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, enabledChannels: animation.channels.length, enabledPerChannel: animation.channels.map((channel) => channel.enabled) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00161" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00160/anim-channels-fcurves-enable-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} enabled=true channels=${animation.channels.length} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00161") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00161-operator-anim.channels_group.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00161/anim-channels-group-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-channels-group-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.groups, 1); + assert.deepEqual(desktop.action.groups, ["WebGapTransforms"]); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapAnimChannelsGroupObjectAction:object:WebGapAnimChannelsGroupObject"); + assert.ok(animation); + assert.equal(animation.channels.length, desktop.action.channels.length); + for (const [index, channel] of animation.channels.entries()) { + const expected = desktop.action.channels[index]; + assert.equal(channel.path.replace(/\[\d+\]$/, ""), expected.path); + assert.deepEqual(channel.keyframes.map((value) => value.frame), expected.frames); + assert.equal(channel.group, expected.group); + } + assert.deepEqual(animation.channels.map((channel) => channel.group), ["WebGapTransforms", "WebGapTransforms", "WebGapTransforms"]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_CHANNELS_GROUP_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, groups: 1, group: "WebGapTransforms", groupedChannels: animation.channels.length }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00162" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00161/anim-channels-group-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} group=WebGapTransforms channels=${animation.channels.length} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00162") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00162-operator-anim.channels_move.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00162/anim-channels-move-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-channels-move-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.direction, "DOWN"); + assert.deepEqual(desktop.action.channels.map((channel) => channel.index), [1, 0, 2]); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapAnimChannelsMoveObjectAction:object:WebGapAnimChannelsMoveObject"); + assert.ok(animation); + assert.equal(animation.channels.length, desktop.action.channels.length); + assert.deepEqual(animation.channels.map((channel) => Number(channel.path.match(/\[(\d+)\]$/)?.[1] ?? -1)), [1, 0, 2]); + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.map((value) => value.frame)), desktop.action.channels.map((channel) => channel.frames)); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_CHANNELS_MOVE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, direction: "DOWN", channelOrder: [1, 0, 2] }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00163" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00162/anim-channels-move-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} direction=DOWN order=1,0,2 desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00163") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00163-operator-anim.channels_rename.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00163/anim-channels-rename-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-channels-rename-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.deepEqual(desktop.action.channels.map((channel) => channel.path), ["rotation_euler", "location_missing", "location_missing"]); + assert.deepEqual(desktop.action.channels.map((channel) => channel.index), [0, 1, 2]); + assert.equal(desktop.action.channels.every((channel) => channel.enabled), true); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapAnimChannelsRenameObjectAction:object:WebGapAnimChannelsRenameObject"); + assert.ok(animation); + assert.equal(animation.channels.length, desktop.action.channels.length); + assert.deepEqual(animation.channels.map((channel) => channel.path), ["rotation_euler[0]", "location_missing[1]", "location_missing[2]"]); + assert.deepEqual(animation.channels.map((channel) => channel.enabled), [true, false, false]); + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.map((value) => value.frame)), desktop.action.channels.map((channel) => channel.frames)); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_CHANNELS_RENAME_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, renamedChannel: { from: "location_missing[0]", to: "rotation_euler[0]" }, disabledControlChannels: 2 }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00164" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00163/anim-channels-rename-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} renamed=rotation_euler[0] desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00164") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00164-operator-anim.channels_select_all.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00164/anim-channels-select-all-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-channels-select-all-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.deepEqual(desktop.action.channels.map((channel) => channel.path), ["location", "location", "location"]); + assert.deepEqual(desktop.action.channels.map((channel) => channel.index), [0, 1, 2]); + assert.equal(desktop.action.channels.every((channel) => channel.selected), true); + assert.equal(desktop.action.channels.some((channel) => channel.selectedKeyframes.some(Boolean)), false); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapAnimChannelsSelectAllObjectAction:object:WebGapAnimChannelsSelectAllObject"); + assert.ok(animation); + assert.equal(animation.channels.length, desktop.action.channels.length); + assert.deepEqual(animation.channels.map((channel) => channel.path), ["location[0]", "location[1]", "location[2]"]); + assert.deepEqual(animation.channels.map((channel) => channel.selected), [true, true, true]); + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.map((value) => value.selected ?? false)), [[false, false, false], [false, false, false], [false, false, false]]); + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.map((value) => value.frame)), desktop.action.channels.map((channel) => channel.frames)); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_CHANNELS_SELECT_ALL_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, selection: "SELECT", selectedChannels: animation.channels.length, selectedKeyframes: 0 }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00165" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00164/anim-channels-select-all-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} selectedChannels=${animation.channels.length} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00165") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00165-operator-anim.channels_select_box.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00165/anim-channels-select-box-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-channels-select-box-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.deepEqual(desktop.action.channels.map((channel) => channel.path), ["location", "location", "location"]); + assert.deepEqual(desktop.action.channels.map((channel) => channel.index), [0, 1, 2]); + assert.equal(desktop.action.channels.every((channel) => channel.selected), true); + assert.equal(desktop.action.channels.some((channel) => channel.selectedKeyframes.some(Boolean)), false); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapAnimChannelsSelectBoxObjectAction:object:WebGapAnimChannelsSelectBoxObject"); + assert.ok(animation); + assert.equal(animation.channels.length, desktop.action.channels.length); + assert.deepEqual(animation.channels.map((channel) => channel.path), ["location[0]", "location[1]", "location[2]"]); + assert.deepEqual(animation.channels.map((channel) => channel.selected), [true, true, true]); + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.map((value) => value.selected ?? false)), [[false, false, false], [false, false, false], [false, false, false]]); + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.map((value) => value.frame)), desktop.action.channels.map((channel) => channel.frames)); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_CHANNELS_SELECT_BOX_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, selection: "SELECT", selectedChannels: animation.channels.length, selectedKeyframes: 0 }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00166" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00165/anim-channels-select-box-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} selectedChannels=${animation.channels.length} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00166") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00166-operator-anim.channels_select_filter.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00166/anim-channels-select-filter-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-channels-select-filter-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.filterText, "Location"); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + assert.equal(before.editorWorkflowStatus, "AVAILABLE"); + const actionArea = before.editorWorkflow.workspaces.flatMap((workspace) => workspace.areas).find((area) => area.editor === "DOPE_SHEET" && area.filterText === desktop.filterText); + assert.ok(actionArea); + assert.equal(actionArea.filterText, desktop.filterText); + const animation = before.animations?.find((value) => value.id === "action:WebGapAnimChannelsSelectFilterObjectAction:object:WebGapAnimChannelsSelectFilterObject"); + assert.ok(animation); + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.map((value) => value.frame)), desktop.action.channels.map((channel) => channel.frames)); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).editorWorkflow, before.editorWorkflow); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).editorWorkflow, before.editorWorkflow); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_CHANNELS_SELECT_FILTER_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", editor: "DOPE_SHEET", filterText: actionArea.filterText, actionId: animation.id, channels: animation.channels.length }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00167" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00166/anim-channels-select-filter-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} filter=${actionArea.filterText} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00167") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00167-operator-anim.channels_setting_disable.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00167/anim-channels-setting-disable-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-channels-setting-disable-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.setting, "PROTECT"); + assert.equal(desktop.disabledChannels, 3); + assert.deepEqual(desktop.action.channels.map((channel) => channel.editable), [false, false, false]); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapAnimChannelsSettingDisableObjectAction:object:WebGapAnimChannelsSettingDisableObject"); + assert.ok(animation); + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.map((value) => value.frame)), desktop.action.channels.map((channel) => channel.frames)); + assert.deepEqual(animation.channels.map((channel) => channel.editable), [false, false, false]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_CHANNELS_SETTING_DISABLE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, setting: "PROTECT", disabledChannels: animation.channels.length, editablePerChannel: animation.channels.map((channel) => channel.editable) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00168" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00167/anim-channels-setting-disable-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} setting=PROTECT editable=false desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00168") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00168-operator-anim.channels_setting_enable.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00168/anim-channels-setting-enable-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-channels-setting-enable-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.setting, "PROTECT"); + assert.equal(desktop.enabledChannels, 3); + assert.deepEqual(desktop.action.channels.map((channel) => channel.editable), [false, false, false]); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapAnimChannelsSettingEnableObjectAction:object:WebGapAnimChannelsSettingEnableObject"); + assert.ok(animation); + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.map((value) => value.frame)), desktop.action.channels.map((channel) => channel.frames)); + assert.deepEqual(animation.channels.map((channel) => channel.editable), [false, false, false]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_CHANNELS_SETTING_ENABLE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, setting: "PROTECT", enabledChannels: animation.channels.length, editablePerChannel: animation.channels.map((channel) => channel.editable) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00169" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00168/anim-channels-setting-enable-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} setting=PROTECT editable=false desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00169") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00169-operator-anim.channels_setting_toggle.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00169/anim-channels-setting-toggle-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-channels-setting-toggle-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.setting, "PROTECT"); + assert.equal(desktop.toggledChannels, 3); + assert.deepEqual(desktop.action.channels.map((channel) => channel.editable), [false, false, false]); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapAnimChannelsSettingToggleObjectAction:object:WebGapAnimChannelsSettingToggleObject"); + assert.ok(animation); + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.map((value) => value.frame)), desktop.action.channels.map((channel) => channel.frames)); + assert.deepEqual(animation.channels.map((channel) => channel.editable), [false, false, false]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_CHANNELS_SETTING_TOGGLE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, setting: "PROTECT", toggledChannels: animation.channels.length, editablePerChannel: animation.channels.map((channel) => channel.editable) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00170" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00169/anim-channels-setting-toggle-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} setting=PROTECT editable=false desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00170") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00170-operator-anim.channels_ungroup.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00170/anim-channels-ungroup-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-channels-ungroup-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.groups, 0); + assert.equal(desktop.ungroupedChannels, 3); + assert.deepEqual(desktop.action.channels.map((channel) => channel.group), [null, null, null]); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapAnimChannelsUngroupObjectAction:object:WebGapAnimChannelsUngroupObject"); + assert.ok(animation); + assert.deepEqual(animation.channels.map((channel) => channel.keyframes.map((value) => value.frame)), desktop.action.channels.map((channel) => channel.frames)); + assert.deepEqual(animation.channels.map((channel) => channel.group ?? null), [null, null, null]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_CHANNELS_UNGROUP_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, groups: 0, ungroupedChannels: animation.channels.length, groupPerChannel: animation.channels.map((channel) => channel.group ?? null) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00171" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00170/anim-channels-ungroup-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} groups=0 channels=${animation.channels.length} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00171") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00171-operator-anim.channels_view_selected.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00171/anim-channels-view-selected-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-channels-view-selected-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.selectedChannels, 3); + assert.deepEqual(desktop.action.channels.map((channel) => channel.selected), [true, true, true]); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapAnimChannelsViewSelectedObjectAction:object:WebGapAnimChannelsViewSelectedObject"); + assert.ok(animation); + assert.deepEqual(animation.channels.map((channel) => channel.selected), [true, true, true]); + assert.equal(before.editorWorkflowStatus, "AVAILABLE"); + const sameView = (left, right) => left?.cur?.xmin === right?.cur?.xmin && left?.cur?.xmax === right?.cur?.xmax && left?.cur?.ymin === right?.cur?.ymin && left?.cur?.ymax === right?.cur?.ymax && left?.mask?.xmin === right?.mask?.xmin && left?.mask?.xmax === right?.mask?.xmax && left?.mask?.ymin === right?.mask?.ymin && left?.mask?.ymax === right?.mask?.ymax; + const actionRegion = before.editorWorkflow.workspaces.flatMap((workspace) => workspace.areas) + .filter((area) => area.editor === "DOPE_SHEET") + .flatMap((area) => area.regions) + .find((region) => region.kind === "MAIN" && sameView(region.view2d, desktop.view2d)); + assert.ok(actionRegion?.view2d); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + assert.deepEqual(snapshot(engine, reopened).editorWorkflow, before.editorWorkflow); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_CHANNELS_VIEW_SELECTED_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, selectedChannels: animation.channels.length, selectedPerChannel: animation.channels.map((channel) => channel.selected), view2d: actionRegion.view2d }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00172" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00171/anim-channels-view-selected-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} selected=3 view2d=exact desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00172") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00172-operator-anim.clear_useless_actions.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00172/anim-clear-useless-actions-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-clear-useless-actions-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.removedEmptyAction, true); + assert.deepEqual(Object.keys(desktop.actions).sort(), ["WebGapAnimClearUselessLibraryAction", "WebGapAnimClearUselessUsedAction"]); + assert.equal(desktop.usedAction, "WebGapAnimClearUselessUsedAction"); + assert.deepEqual(Object.values(desktop.actions).map((action) => action.channels.length), [3, 3]); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const usedId = "action:WebGapAnimClearUselessUsedAction:object:WebGapAnimClearUselessUsedObject"; + const libraryId = "action:WebGapAnimClearUselessLibraryAction:unlinked"; + const used = before.animations?.find((value) => value.id === usedId); + const library = before.animations?.find((value) => value.id === libraryId); + assert.ok(used); + assert.ok(library); + assert.equal(library.unlinked, true); + assert.deepEqual(used.channels.map((channel) => channel.keyframes.map((value) => value.frame)), [[1, 3, 5], [1, 3, 5], [1, 3, 5]]); + assert.deepEqual(library.channels.map((channel) => channel.keyframes.map((value) => value.frame)), [[1, 3, 5], [1, 3, 5], [1, 3, 5]]); + assert.equal(before.animations?.length, 2); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_CLEAR_USELESS_ACTIONS_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", preservedActions: [used.id, library.id], unlinkedAction: library.id, channelsPerAction: [used, library].map((action) => action.channels.length) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00173" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00172/anim-clear-useless-actions-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} preserved=2 removedEmpty=true desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00173") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00173-operator-anim.copy_driver_button.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00173/anim-copy-driver-button-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-copy-driver-button-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "NONE"); + assert.equal(desktop.operatorStatus, "CANCELLED"); + assert.deepEqual(desktop.drivers, [{ path: '["drive_target"]', index: 0, expression: "frame * 2.0 + 1.0", type: "SCRIPTED", variableCount: 0 }]); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const node = before.nodes?.find((value) => value.id === "object:WebGapAnimCopyDriverButtonObject"); + assert.ok(node); + assert.deepEqual(node.drivers, [{ path: '["drive_target"]', arrayIndex: 0, editable: true, enabled: true, expression: "frame * 2.0 + 1.0", type: "SCRIPTED", typeCode: 1, flags: 8, influence: 0, variables: [] }]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + const afterNode = snapshot(engine, reopened).nodes?.find((value) => value.id === node.id); + assert.deepEqual(afterNode?.drivers, node.drivers); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).nodes?.find((value) => value.id === node.id)?.drivers, node.drivers); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_COPY_DRIVER_BUTTON_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", objectId: node.id, drivers: node.drivers }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00173" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00173/anim-copy-driver-button-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} drivers=1 operator=${desktop.operatorStatus} mainMutation=none desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00174") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00174-operator-anim.driver_button_add.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00174/anim-driver-button-add-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-driver-button-add-desktop.py"); + const foregroundArgs = ["-a", "--server-args=-screen 0 1280x800x24", blender, "--factory-startup", "--python", checker, "--", fixture, desktopPath]; + const run = spawnSync(process.env.XVFB_RUN_BIN ?? "xvfb-run", foregroundArgs, { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024, timeout: 45_000 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "DRIVER_ADDED"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + assert.deepEqual(desktop.drivers, [{ path: '["drive_target"]', index: 0, expression: "var + 4.5", type: "SCRIPTED", variableCount: 1 }]); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const node = before.nodes?.find((value) => value.id === "object:WebGapAnimDriverButtonAddObject"); + assert.ok(node); + assert.deepEqual(node.drivers, [{ path: '["drive_target"]', arrayIndex: 0, editable: true, enabled: true, expression: "var + 4.5", type: "SCRIPTED", typeCode: 1, flags: 16, influence: 0, variables: [{ name: "var", type: 3, targetCount: 1 }] }]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + const afterNode = snapshot(engine, reopened).nodes?.find((value) => value.id === node.id); + assert.deepEqual(afterNode, node); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).nodes?.find((value) => value.id === node.id), node); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_DRIVER_BUTTON_ADD_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", objectId: node.id, drivers: node.drivers }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00175" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00174/anim-driver-button-add-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} drivers=${node.drivers.length} poll=true operator=${desktop.operatorStatus} mainMutation=driver_added desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00175") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00175-operator-anim.driver_button_edit.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00175/anim-driver-button-edit-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-driver-button-edit-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "NONE"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "INTERFACE"); + assert.deepEqual(desktop.drivers, [{ path: '["drive_target"]', index: 0, expression: "frame * 2.5 + 1.25", type: "SCRIPTED", variableCount: 0 }]); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const node = before.nodes?.find((value) => value.id === "object:WebGapAnimDriverButtonEditObject"); + assert.ok(node); + assert.deepEqual(node.drivers, [{ path: '["drive_target"]', arrayIndex: 0, editable: true, enabled: true, expression: "frame * 2.5 + 1.25", type: "SCRIPTED", typeCode: 1, flags: 8, influence: 0, variables: [] }]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + const afterNode = snapshot(engine, reopened).nodes?.find((value) => value.id === node.id); + assert.deepEqual(afterNode, node); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).nodes?.find((value) => value.id === node.id), node); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_DRIVER_BUTTON_EDIT_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", objectId: node.id, drivers: node.drivers }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00176" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00175/anim-driver-button-edit-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} drivers=${node.drivers.length} poll=true operator=${desktop.operatorStatus} mainMutation=none desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00176") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00176-operator-anim.driver_button_remove.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00176/anim-driver-button-remove-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-driver-button-remove-desktop.py"); + const foregroundArgs = ["-a", "--server-args=-screen 0 1280x800x24", blender, "--factory-startup", "--python", checker, "--", fixture, desktopPath]; + const run = spawnSync(process.env.XVFB_RUN_BIN ?? "xvfb-run", foregroundArgs, { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024, timeout: 45_000 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "DRIVER_REMOVED"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + assert.deepEqual(desktop.drivers, []); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const node = before.nodes?.find((value) => value.id === "object:WebGapAnimDriverButtonRemoveObject"); + assert.ok(node); + assert.deepEqual(node.drivers ?? [], []); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + const afterNode = snapshot(engine, reopened).nodes?.find((value) => value.id === node.id); + assert.deepEqual(afterNode, node); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).nodes?.find((value) => value.id === node.id), node); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_DRIVER_BUTTON_REMOVE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", objectId: node.id, drivers: node.drivers ?? [] }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00177" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00176/anim-driver-button-remove-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} drivers=0 poll=true operator=${desktop.operatorStatus} mainMutation=driver_removed desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00177") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00177-operator-anim.end_frame_set.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00177/anim-end-frame-set-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-end-frame-set-desktop.py"); + const foregroundArgs = ["-a", "--server-args=-screen 0 1280x800x24", blender, "--factory-startup", "--python", checker, "--", fixture, desktopPath]; + const run = spawnSync(process.env.XVFB_RUN_BIN ?? "xvfb-run", foregroundArgs, { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024, timeout: 45_000 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "FRAME_END_SET"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + assert.deepEqual(desktop.frame, { current: 42, start: 1, end: 42 }); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + assert.deepEqual(before.frame, { current: 42, start: 1, end: 42 }); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).frame, before.frame); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).frame, before.frame); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_END_FRAME_SET_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", frame: before.frame }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00178" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00177/anim-end-frame-set-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} frame=${before.frame.start}-${before.frame.end} current=${before.frame.current} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00178") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00178-operator-anim.keyframe_clear_button.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00178/anim-keyframe-clear-button-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const sourceBytes = fs.readFileSync(fixture); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-keyframe-clear-button-desktop.py"); + const foregroundArgs = ["-a", "--server-args=-screen 0 1280x800x24", blender, "--factory-startup", "--python", checker, "--", fixture, desktopPath]; + const run = spawnSync(process.env.XVFB_RUN_BIN ?? "xvfb-run", foregroundArgs, { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024, timeout: 45_000 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + const actionName = "WebGapAnimKeyframeClearButtonAction"; + const expectedBefore = { + name: actionName, + channels: [{ path: '["clear_target"]', index: 0, frames: [1, 3, 5], values: [1, 3, 5], selected: [true, true, true] }], + }; + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "KEYFRAMES_CLEARED"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + assert.equal(desktop.before.value, 3); + assert.deepEqual(desktop.before.action, expectedBefore); + assert.deepEqual(desktop.after, { value: 3, action: { name: actionName, channels: [] } }); + + const sourceEngine = await factory({ wasmBinary }); + const sourceHandle = sourceEngine._web_engine_create(); + open(sourceEngine, sourceHandle, sourceBytes); + const sourceSnapshot = snapshot(sourceEngine, sourceHandle); + const sourceAnimation = sourceSnapshot.animations?.find((value) => value.targetId === "object:WebGapAnimKeyframeClearButtonObject"); + if (sourceAnimation) { + assert.equal(sourceAnimation.id, `action:${actionName}:object:WebGapAnimKeyframeClearButtonObject`); + assert.deepEqual(sourceAnimation.channels.map((channel) => channel.path), ['["clear_target"][0]']); + assert.deepEqual(sourceAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.frame)), [[1, 3, 5]]); + assert.deepEqual(sourceAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.value[0])), [[1, 3, 5]]); + assert.deepEqual(sourceAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.selected)), [[true, true, true]]); + } + + const clearedBytes = fs.readFileSync(fixture); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, clearedBytes); + const clearedSnapshot = snapshot(engine, handle); + assert.equal(clearedSnapshot.animations?.some((value) => value.targetId === "object:WebGapAnimKeyframeClearButtonObject"), false); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, clearedSnapshot.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle), clearedSnapshot); + sourceEngine._web_engine_destroy(sourceHandle); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const beforeWasm = sourceAnimation ? { animationId: sourceAnimation.id, channelPaths: sourceAnimation.channels.map((channel) => channel.path), keyframesPerChannel: sourceAnimation.channels.map((channel) => channel.keyframes.length) } : { animationId: `action:${actionName}:object:WebGapAnimKeyframeClearButtonObject`, channelPaths: ['["clear_target"][0]'], keyframesPerChannel: [3], evidenceStatus: "PRESERVED_DESKTOP_REPORT" }; + const report = { schemaVersion: 1, task, operation: "ANIM_KEYFRAME_CLEAR_BUTTON_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, before: desktop.before.action, after: desktop.after.action }, wasm: { status: "EXACT", before: beforeWasm, after: { animationCount: clearedSnapshot.animations.length, keyframesCleared: true } }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00179" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00178/anim-keyframe-clear-button-local-exact-report.json"); + if (sourceAnimation || !fs.existsSync(reportPath)) fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} channels=${beforeWasm.keyframesPerChannel.length}->0 poll=true operator=${desktop.operatorStatus} mainMutation=keyframes_cleared desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00182") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00182-operator-anim.keyframe_delete_button.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00182/anim-keyframe-delete-button-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const sourceBytes = fs.readFileSync(fixture); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-keyframe-delete-button-desktop.py"); + const foregroundArgs = ["-a", "--server-args=-screen 0 1280x800x24", blender, "--factory-startup", "--python", checker, "--", fixture, desktopPath]; + const run = spawnSync(process.env.XVFB_RUN_BIN ?? "xvfb-run", foregroundArgs, { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024, timeout: 45_000 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + const actionName = "WebGapAnimKeyframeDeleteButtonAction"; + const expectedBefore = { + name: actionName, + channels: [{ path: '["delete_target"]', index: 0, frames: [1, 3, 5], values: [1, 3, 5], selected: [true, true, true] }], + }; + const expectedAfter = { + name: actionName, + channels: [{ path: '["delete_target"]', index: 0, frames: [1, 5], values: [1, 5], selected: [true, true] }], + }; + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "KEYFRAME_DELETED"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + assert.deepEqual(desktop.before, { selected: true, active: true, value: 3, action: expectedBefore }); + assert.deepEqual(desktop.after, { selected: true, active: true, value: 3, action: expectedAfter }); + + const sourceEngine = await factory({ wasmBinary }); + const sourceHandle = sourceEngine._web_engine_create(); + open(sourceEngine, sourceHandle, sourceBytes); + const sourceSnapshot = snapshot(sourceEngine, sourceHandle); + const sourceAnimation = sourceSnapshot.animations?.find((value) => value.name === actionName); + assert.ok(sourceAnimation); + assert.equal(sourceAnimation.targetId, "object:WebGapAnimKeyframeDeleteButtonObject"); + assert.deepEqual(sourceAnimation.channels.map((channel) => channel.path), ['["delete_target"][0]']); + assert.ok([2, 3].includes(sourceAnimation.channels[0].keyframes.length)); + if (sourceAnimation.channels[0].keyframes.length === 3) { + assert.deepEqual(sourceAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.frame)), [[1, 3, 5]]); + assert.deepEqual(sourceAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.value[0])), [[1, 3, 5]]); + } + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const clearedSnapshot = snapshot(engine, handle); + const clearedAnimation = clearedSnapshot.animations?.find((value) => value.name === actionName); + assert.ok(clearedAnimation); + assert.deepEqual(clearedAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.frame)), [[1, 5]]); + assert.deepEqual(clearedAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.value[0])), [[1, 5]]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, clearedSnapshot.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle), clearedSnapshot); + sourceEngine._web_engine_destroy(sourceHandle); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const beforeWasm = { animationId: sourceAnimation.id, targetId: sourceAnimation.targetId, channelPaths: sourceAnimation.channels.map((channel) => channel.path), keyframesPerChannel: sourceAnimation.channels.map((channel) => channel.keyframes.length) }; + const report = { schemaVersion: 1, task, operation: "ANIM_KEYFRAME_DELETE_BUTTON_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, before: desktop.before.action, after: desktop.after.action }, wasm: { status: "EXACT", before: beforeWasm, after: { animationId: clearedAnimation.id, keyframesPerChannel: clearedAnimation.channels.map((channel) => channel.keyframes.length), keyframeDeleted: true } }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00183" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00182/anim-keyframe-delete-button-local-exact-report.json"); + if (beforeWasm.keyframesPerChannel[0] === 3 || !fs.existsSync(reportPath)) fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} channels=${beforeWasm.keyframesPerChannel[0]}->${clearedAnimation.channels[0].keyframes.length} poll=true operator=${desktop.operatorStatus} mainMutation=keyframe_deleted desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00192") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00192-operator-anim.keying_set_export.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00192/anim-keying-set-export-desktop-report.json"); + const exportPath = path.join(root, "tests/golden/M16-GAP-00192/WebGapAnimKeyingSetExportSet.py"); fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const sourceBytes = fs.readFileSync(fixture); const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); const checker = path.join(root, "tools/web/check-action-keying-set-export-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath, exportPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024, timeout: 45_000 }); assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); assert.equal(fs.existsSync(exportPath), true); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); assert.equal(desktop.saveReopen, "EXACT"); assert.equal(desktop.mainMutation, "NONE_EXPORT_ONLY"); assert.equal(desktop.poll, true); assert.equal(desktop.operatorStatus, "FINISHED"); assert.equal(desktop.exportedScript.bytes > 0, true); assert.equal(desktop.before.activeKeyingSet, "WebGapAnimKeyingSetExportSet"); assert.deepEqual(desktop.before, desktop.after); + const exportSha = crypto.createHash("sha256").update(fs.readFileSync(exportPath)).digest("hex"); assert.equal(exportSha, desktop.exportedScript.sha256); + const sourceEngine = await factory({ wasmBinary }); const sourceHandle = sourceEngine._web_engine_create(); open(sourceEngine, sourceHandle, sourceBytes); const sourceSnapshot = snapshot(sourceEngine, sourceHandle); const sourceAnimation = sourceSnapshot.animations?.find((value) => value.name === "WebGapAnimKeyingSetExportAction"); assert.ok(sourceAnimation); + const engine = await factory({ wasmBinary }); const handle = engine._web_engine_create(); open(engine, handle, fs.readFileSync(fixture)); const afterSnapshot = snapshot(engine, handle); assert.deepEqual(afterSnapshot.animations, sourceSnapshot.animations); + const saved = output(engine, handle, engine._web_engine_save_blend, true); const reopened = engine._web_engine_create(); open(engine, reopened, saved); assert.deepEqual(snapshot(engine, reopened).animations, afterSnapshot.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); const pointer = engine._malloc(malformed.byteLength); let result; try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } assert.notEqual(result, 0); assert.deepEqual(snapshot(engine, handle).animations, afterSnapshot.animations); + sourceEngine._web_engine_destroy(sourceHandle); engine._web_engine_destroy(handle); engine._web_engine_destroy(reopened); const beforeWasm = { animationId: sourceAnimation.id, targetId: sourceAnimation.targetId, channelPaths: sourceAnimation.channels.map((channel) => channel.path), keyframesPerChannel: sourceAnimation.channels.map((channel) => channel.keyframes.length) }; + const report = { schemaVersion: 1, task, operation: "ANIM_KEYING_SET_EXPORT_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, before: desktop.before, after: desktop.after, exportedScript: { path: path.relative(root, exportPath).replaceAll(path.sep, "/"), sha256: exportSha, bytes: desktop.exportedScript.bytes } }, wasm: { status: "EXACT", before: beforeWasm, after: { animationId: sourceAnimation.id, keyframesPerChannel: sourceAnimation.channels.map((channel) => channel.keyframes.length), visibleMainUnchanged: true, keyingSetMetadata: "NOT_EXPOSED_BY_SCENE_SNAPSHOT" } }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00193" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00192/anim-keying-set-export-local-exact-report.json"); if (!fs.existsSync(reportPath)) fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); process.stdout.write(`generated-gap-ok task=${task} poll=true operator=${desktop.operatorStatus} mainMutation=none_export_only export=written wasmVisibleMain=unchanged desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00193") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00193-operator-anim.keying_set_path_add.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00193/anim-keying-set-path-add-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const sourceBytes = fs.readFileSync(fixture); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-keying-set-path-add-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024, timeout: 45_000 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "KEYING_SET_PATH_ADDED"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + assert.equal(desktop.before.pathCount, 0); + assert.equal(desktop.after.pathCount, 1); + assert.deepEqual(desktop.after.paths, [{ dataPath: "", arrayIndex: 0, idType: "OBJECT", group: "", groupMethod: "KEYINGSET", useEntireArray: true }]); + assert.deepEqual(desktop.before.action, desktop.after.action); + const sourceEngine = await factory({ wasmBinary }); + const sourceHandle = sourceEngine._web_engine_create(); + open(sourceEngine, sourceHandle, sourceBytes); + const sourceSnapshot = snapshot(sourceEngine, sourceHandle); + const sourceAnimation = sourceSnapshot.animations?.find((value) => value.name === "WebGapAnimKeyingSetPathAddAction"); + assert.ok(sourceAnimation); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const afterSnapshot = snapshot(engine, handle); + const afterAnimation = afterSnapshot.animations?.find((value) => value.name === sourceAnimation.name); + assert.deepEqual(afterAnimation, sourceAnimation); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, afterSnapshot.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, afterSnapshot.animations); + sourceEngine._web_engine_destroy(sourceHandle); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const beforeWasm = { animationId: sourceAnimation.id, targetId: sourceAnimation.targetId, channelPaths: sourceAnimation.channels.map((channel) => channel.path), keyframesPerChannel: sourceAnimation.channels.map((channel) => channel.keyframes.length) }; + const report = { schemaVersion: 1, task, operation: "ANIM_KEYING_SET_PATH_ADD_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, before: desktop.before, after: desktop.after }, wasm: { status: "EXACT", before: beforeWasm, after: { animationId: afterAnimation.id, keyframesPerChannel: afterAnimation.channels.map((channel) => channel.keyframes.length), visibleMainUnchanged: true, keyingSetMetadata: "NOT_EXPOSED_BY_SCENE_SNAPSHOT" } }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00194" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00193/anim-keying-set-path-add-local-exact-report.json"); + if (!fs.existsSync(reportPath)) fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} paths=0->1 poll=true operator=${desktop.operatorStatus} mainMutation=keying_set_path_added wasmVisibleMain=unchanged desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00194") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00194-operator-anim.keying_set_path_remove.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00194/anim-keying-set-path-remove-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const sourceBytes = fs.readFileSync(fixture); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-keying-set-path-remove-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024, timeout: 45_000 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "KEYING_SET_PATH_REMOVED"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + assert.equal(desktop.before.pathCount, 1); + assert.deepEqual(desktop.before.paths, [{ dataPath: '["path_remove_target"]', arrayIndex: 0, idType: "OBJECT", group: "", groupMethod: "KEYINGSET", useEntireArray: false }]); + assert.equal(desktop.after.pathCount, 0); + assert.deepEqual(desktop.after.paths, []); + assert.deepEqual(desktop.before.action, desktop.after.action); + const sourceEngine = await factory({ wasmBinary }); + const sourceHandle = sourceEngine._web_engine_create(); + open(sourceEngine, sourceHandle, sourceBytes); + const sourceSnapshot = snapshot(sourceEngine, sourceHandle); + const sourceAnimation = sourceSnapshot.animations?.find((value) => value.name === "WebGapAnimKeyingSetPathRemoveAction"); + assert.ok(sourceAnimation); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const afterSnapshot = snapshot(engine, handle); + const afterAnimation = afterSnapshot.animations?.find((value) => value.name === sourceAnimation.name); + assert.deepEqual(afterAnimation, sourceAnimation); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, afterSnapshot.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, afterSnapshot.animations); + sourceEngine._web_engine_destroy(sourceHandle); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const beforeWasm = { animationId: sourceAnimation.id, targetId: sourceAnimation.targetId, channelPaths: sourceAnimation.channels.map((channel) => channel.path), keyframesPerChannel: sourceAnimation.channels.map((channel) => channel.keyframes.length) }; + const report = { schemaVersion: 1, task, operation: "ANIM_KEYING_SET_PATH_REMOVE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, before: desktop.before, after: desktop.after }, wasm: { status: "EXACT", before: beforeWasm, after: { animationId: afterAnimation.id, keyframesPerChannel: afterAnimation.channels.map((channel) => channel.keyframes.length), visibleMainUnchanged: true, keyingSetMetadata: "NOT_EXPOSED_BY_SCENE_SNAPSHOT" } }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00195" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00194/anim-keying-set-path-remove-local-exact-report.json"); + if (!fs.existsSync(reportPath)) fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} paths=1->0 poll=true operator=${desktop.operatorStatus} mainMutation=keying_set_path_removed wasmVisibleMain=unchanged desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00195") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00195-operator-anim.keying_set_remove.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00195/anim-keying-set-remove-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const sourceBytes = fs.readFileSync(fixture); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-keying-set-remove-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024, timeout: 45_000 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "KEYING_SET_REMOVED"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + assert.equal(desktop.before.keyingSetCount, 1); + assert.equal(desktop.before.activeKeyingSet, "WebGapAnimKeyingSetRemoveSet"); + assert.equal(desktop.after.keyingSetCount, 0); + assert.equal(desktop.after.activeKeyingSet, null); + assert.deepEqual(desktop.before.action, desktop.after.action); + const sourceEngine = await factory({ wasmBinary }); + const sourceHandle = sourceEngine._web_engine_create(); + open(sourceEngine, sourceHandle, sourceBytes); + const sourceSnapshot = snapshot(sourceEngine, sourceHandle); + const sourceAnimation = sourceSnapshot.animations?.find((value) => value.name === "WebGapAnimKeyingSetRemoveAction"); + assert.ok(sourceAnimation); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const afterSnapshot = snapshot(engine, handle); + const afterAnimation = afterSnapshot.animations?.find((value) => value.name === sourceAnimation.name); + assert.deepEqual(afterAnimation, sourceAnimation); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, afterSnapshot.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, afterSnapshot.animations); + sourceEngine._web_engine_destroy(sourceHandle); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const beforeWasm = { animationId: sourceAnimation.id, targetId: sourceAnimation.targetId, channelPaths: sourceAnimation.channels.map((channel) => channel.path), keyframesPerChannel: sourceAnimation.channels.map((channel) => channel.keyframes.length) }; + const report = { schemaVersion: 1, task, operation: "ANIM_KEYING_SET_REMOVE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, before: desktop.before, after: desktop.after }, wasm: { status: "EXACT", before: beforeWasm, after: { animationId: afterAnimation.id, keyframesPerChannel: afterAnimation.channels.map((channel) => channel.keyframes.length), visibleMainUnchanged: true, keyingSetMetadata: "NOT_EXPOSED_BY_SCENE_SNAPSHOT" } }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00196" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00195/anim-keying-set-remove-local-exact-report.json"); + if (!fs.existsSync(reportPath)) fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} keyingSets=1->0 poll=true operator=${desktop.operatorStatus} mainMutation=keying_set_removed wasmVisibleMain=unchanged desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00196") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00196-operator-anim.keyingset_button_add.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00196/anim-keyingset-button-add-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const sourceBytes = fs.readFileSync(fixture); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-keyingset-button-add-desktop.py"); + const run = spawnSync(process.env.XVFB_RUN_BIN ?? "xvfb-run", ["-a", "--server-args=-screen 0 1280x800x24", blender, "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024, timeout: 45_000 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "KEYING_SET_PATH_ADDED"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + assert.equal(desktop.before.keyingSetCount, 0); + assert.equal(desktop.after.keyingSetCount, 1); + assert.equal(desktop.after.activeKeyingSet, "ButtonKeyingSet"); + assert.deepEqual(desktop.after.paths, [{ dataPath: '["button_target"]', arrayIndex: 0, idType: "OBJECT", group: "", groupMethod: "KEYINGSET", useEntireArray: true }]); + assert.deepEqual(desktop.before.action, desktop.after.action); + const sourceEngine = await factory({ wasmBinary }); + const sourceHandle = sourceEngine._web_engine_create(); + open(sourceEngine, sourceHandle, sourceBytes); + const sourceSnapshot = snapshot(sourceEngine, sourceHandle); + const sourceAnimation = sourceSnapshot.animations?.find((value) => value.name === "WebGapAnimKeyingSetButtonAddAction"); + assert.ok(sourceAnimation); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const afterSnapshot = snapshot(engine, handle); + const afterAnimation = afterSnapshot.animations?.find((value) => value.name === sourceAnimation.name); + assert.deepEqual(afterAnimation, sourceAnimation); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, afterSnapshot.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, afterSnapshot.animations); + sourceEngine._web_engine_destroy(sourceHandle); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const beforeWasm = { animationId: sourceAnimation.id, targetId: sourceAnimation.targetId, channelPaths: sourceAnimation.channels.map((channel) => channel.path), keyframesPerChannel: sourceAnimation.channels.map((channel) => channel.keyframes.length) }; + const report = { schemaVersion: 1, task, operation: "ANIM_KEYINGSET_BUTTON_ADD_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, before: desktop.before, after: desktop.after }, wasm: { status: "EXACT", before: beforeWasm, after: { animationId: afterAnimation.id, keyframesPerChannel: afterAnimation.channels.map((channel) => channel.keyframes.length), visibleMainUnchanged: true, keyingSetMetadata: "NOT_EXPOSED_BY_SCENE_SNAPSHOT" } }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00197" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00196/anim-keyingset-button-add-local-exact-report.json"); + if (!fs.existsSync(reportPath)) fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} keyingSets=0->1 paths=0->1 poll=true operator=${desktop.operatorStatus} mainMutation=keying_set_path_added wasmVisibleMain=unchanged desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00197") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00197-operator-anim.keyingset_button_remove.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00197/anim-keyingset-button-remove-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const sourceBytes = fs.readFileSync(fixture); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-keyingset-button-remove-desktop.py"); + const run = spawnSync(process.env.XVFB_RUN_BIN ?? "xvfb-run", ["-a", "--server-args=-screen 0 1280x800x24", blender, "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024, timeout: 45_000 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "KEYING_SET_PATH_REMOVED"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + assert.equal(desktop.before.keyingSetCount, 1); + assert.equal(desktop.before.activeKeyingSet, "ButtonKeyingSet"); + assert.deepEqual(desktop.before.paths, [{ dataPath: '["button_remove_target"]', arrayIndex: 0, idType: "OBJECT", group: "", groupMethod: "KEYINGSET", useEntireArray: false }]); + assert.equal(desktop.after.keyingSetCount, 1); + assert.equal(desktop.after.activeKeyingSet, "ButtonKeyingSet"); + assert.deepEqual(desktop.after.paths, []); + assert.deepEqual(desktop.before.action, desktop.after.action); + const sourceEngine = await factory({ wasmBinary }); + const sourceHandle = sourceEngine._web_engine_create(); + open(sourceEngine, sourceHandle, sourceBytes); + const sourceSnapshot = snapshot(sourceEngine, sourceHandle); + const sourceAnimation = sourceSnapshot.animations?.find((value) => value.name === "WebGapAnimKeyingSetButtonRemoveAction"); + assert.ok(sourceAnimation); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const afterSnapshot = snapshot(engine, handle); + const afterAnimation = afterSnapshot.animations?.find((value) => value.name === sourceAnimation.name); + assert.deepEqual(afterAnimation, sourceAnimation); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, afterSnapshot.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, afterSnapshot.animations); + sourceEngine._web_engine_destroy(sourceHandle); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const beforeWasm = { animationId: sourceAnimation.id, targetId: sourceAnimation.targetId, channelPaths: sourceAnimation.channels.map((channel) => channel.path), keyframesPerChannel: sourceAnimation.channels.map((channel) => channel.keyframes.length) }; + const report = { schemaVersion: 1, task, operation: "ANIM_KEYINGSET_BUTTON_REMOVE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, before: desktop.before, after: desktop.after }, wasm: { status: "EXACT", before: beforeWasm, after: { animationId: afterAnimation.id, keyframesPerChannel: afterAnimation.channels.map((channel) => channel.keyframes.length), visibleMainUnchanged: true, keyingSetMetadata: "NOT_EXPOSED_BY_SCENE_SNAPSHOT" } }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00198" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00197/anim-keyingset-button-remove-local-exact-report.json"); + if (!fs.existsSync(reportPath)) fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} keyingSets=1 paths=1->0 poll=true operator=${desktop.operatorStatus} mainMutation=keying_set_path_removed wasmVisibleMain=unchanged desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00198") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00198-operator-anim.merge_animation.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00198/anim-merge-animation-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const sourceBytes = fs.readFileSync(fixture); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-merge-animation-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024, timeout: 45_000 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "ANIMATION_MERGED"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + assert.equal(desktop.before.activeObjectAction.name, "WebGapAnimMergeActiveAction"); + assert.equal(desktop.before.sourceObjectAction.name, "WebGapAnimMergeSourceAction"); + assert.equal(desktop.after.activeObjectAction.name, "WebGapAnimMergeActiveAction"); + assert.equal(desktop.after.sourceObjectAction.name, "WebGapAnimMergeActiveAction"); + assert.deepEqual(desktop.after.activeObjectAction.channels.map((channel) => channel.path), ["[\"active_merge_target\"]", "[\"source_merge_target\"]"]); + assert.deepEqual(desktop.after.sourceObjectAction.channels.map((channel) => channel.path), ["[\"active_merge_target\"]", "[\"source_merge_target\"]"]); + + const sourceEngine = await factory({ wasmBinary }); + const sourceHandle = sourceEngine._web_engine_create(); + open(sourceEngine, sourceHandle, sourceBytes); + const sourceSnapshot = snapshot(sourceEngine, sourceHandle); + const sourceActiveAnimation = sourceSnapshot.animations?.find((value) => value.targetId === "object:WebGapAnimMergeActiveObject"); + const sourceObjectAnimation = sourceSnapshot.animations?.find((value) => value.targetId === "object:WebGapAnimMergeSourceObject"); + assert.ok(sourceActiveAnimation); + assert.ok(sourceObjectAnimation); + const sourceWasUnmerged = sourceObjectAnimation.name === "WebGapAnimMergeSourceAction"; + if (sourceWasUnmerged) { + assert.equal(sourceActiveAnimation.name, "WebGapAnimMergeActiveAction"); + assert.deepEqual(sourceActiveAnimation.channels.map((channel) => channel.path), ["[\"active_merge_target\"][0]"]); + assert.deepEqual(sourceObjectAnimation.channels.map((channel) => channel.path), ["[\"source_merge_target\"][0]"]); + assert.deepEqual(sourceActiveAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.frame)), [[1, 3, 5]]); + assert.deepEqual(sourceObjectAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.frame)), [[1, 3, 5]]); + } + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const mergedSnapshot = snapshot(engine, handle); + assert.equal(mergedSnapshot.activeObjectId, "object:WebGapAnimMergeActiveObject"); + const mergedAnimations = mergedSnapshot.animations?.filter((value) => value.name === "WebGapAnimMergeActiveAction"); + assert.equal(mergedAnimations?.length, 2); + assert.equal(mergedSnapshot.animations?.some((value) => value.name === "WebGapAnimMergeSourceAction"), false); + const mergedActiveAnimation = mergedAnimations.find((value) => value.targetId === "object:WebGapAnimMergeActiveObject"); + const mergedSourceAnimation = mergedAnimations.find((value) => value.targetId === "object:WebGapAnimMergeSourceObject"); + assert.ok(mergedActiveAnimation); + assert.ok(mergedSourceAnimation); + const mergedPaths = ["[\"active_merge_target\"][0]", "[\"source_merge_target\"][0]"]; + assert.deepEqual(mergedActiveAnimation.channels.map((channel) => channel.path), mergedPaths); + assert.deepEqual(mergedSourceAnimation.channels.map((channel) => channel.path), mergedPaths); + assert.deepEqual(mergedActiveAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.frame)), [[1, 3, 5], [1, 3, 5]]); + assert.deepEqual(mergedSourceAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.value[0])), [[1, 3, 5], [10, 30, 50]]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, mergedSnapshot.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, mergedSnapshot.animations); + const beforeWasm = sourceWasUnmerged ? { + activeAnimationId: sourceActiveAnimation.id, + sourceAnimationId: sourceObjectAnimation.id, + activeChannelPaths: sourceActiveAnimation.channels.map((channel) => channel.path), + sourceChannelPaths: sourceObjectAnimation.channels.map((channel) => channel.path), + keyframesPerChannel: [sourceActiveAnimation.channels[0].keyframes.length, sourceObjectAnimation.channels[0].keyframes.length], + } : { evidenceStatus: "PRESERVED_DESKTOP_REPORT", activeAnimationId: sourceActiveAnimation.id, sourceAnimationId: sourceObjectAnimation.id }; + const afterWasm = { + activeAnimationId: mergedActiveAnimation.id, + sourceAnimationId: mergedSourceAnimation.id, + channelPaths: mergedPaths, + keyframesPerChannel: mergedActiveAnimation.channels.map((channel) => channel.keyframes.length), + sourceValues: mergedSourceAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.value[0])), + }; + sourceEngine._web_engine_destroy(sourceHandle); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_MERGE_ANIMATION_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, before: desktop.before, after: desktop.after }, wasm: { status: "EXACT", before: beforeWasm, after: afterWasm, sourceActionRemoved: true }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00199" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00198/anim-merge-animation-local-exact-report.json"); + if (sourceWasUnmerged || !fs.existsSync(reportPath)) fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} actions=2->1 channels=1+1->2 poll=true operator=${desktop.operatorStatus} mainMutation=animation_merged desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00191") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00191-operator-anim.keying_set_add.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00191/anim-keying-set-add-desktop-report.json"); fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const sourceBytes = fs.readFileSync(fixture); const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); const checker = path.join(root, "tools/web/check-action-keying-set-add-desktop.py"); + const run = spawnSync(process.env.XVFB_RUN_BIN ?? "xvfb-run", ["-a", "--server-args=-screen 0 1280x800x24", blender, "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024, timeout: 45_000 }); assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); assert.equal(desktop.saveReopen, "EXACT"); assert.equal(desktop.mainMutation, "KEYING_SET_ADDED"); assert.equal(desktop.poll, true); assert.equal(desktop.operatorStatus, "FINISHED"); assert.equal(desktop.before.keyingSetCount, 0); assert.equal(desktop.after.keyingSetCount, 1); assert.deepEqual(desktop.before.action, desktop.after.action); + const sourceEngine = await factory({ wasmBinary }); const sourceHandle = sourceEngine._web_engine_create(); open(sourceEngine, sourceHandle, sourceBytes); const sourceSnapshot = snapshot(sourceEngine, sourceHandle); const sourceAnimation = sourceSnapshot.animations?.find((value) => value.name === "WebGapAnimKeyingSetAddAction"); assert.ok(sourceAnimation); + const engine = await factory({ wasmBinary }); const handle = engine._web_engine_create(); open(engine, handle, fs.readFileSync(fixture)); const afterSnapshot = snapshot(engine, handle); const afterAnimation = afterSnapshot.animations?.find((value) => value.name === sourceAnimation.name); assert.deepEqual(afterAnimation, sourceAnimation); + const saved = output(engine, handle, engine._web_engine_save_blend, true); const reopened = engine._web_engine_create(); open(engine, reopened, saved); assert.deepEqual(snapshot(engine, reopened).animations, afterSnapshot.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); const pointer = engine._malloc(malformed.byteLength); let result; try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } assert.notEqual(result, 0); assert.deepEqual(snapshot(engine, handle).animations, afterSnapshot.animations); + sourceEngine._web_engine_destroy(sourceHandle); engine._web_engine_destroy(handle); engine._web_engine_destroy(reopened); const beforeWasm = { animationId: sourceAnimation.id, targetId: sourceAnimation.targetId, channelPaths: sourceAnimation.channels.map((channel) => channel.path), keyframesPerChannel: sourceAnimation.channels.map((channel) => channel.keyframes.length) }; + const report = { schemaVersion: 1, task, operation: "ANIM_KEYING_SET_ADD_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, before: desktop.before, after: desktop.after }, wasm: { status: "EXACT", before: beforeWasm, after: { animationId: afterAnimation.id, keyframesPerChannel: afterAnimation.channels.map((channel) => channel.keyframes.length), visibleMainUnchanged: true, keyingSetMetadata: "NOT_EXPOSED_BY_SCENE_SNAPSHOT" } }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00192" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00191/anim-keying-set-add-local-exact-report.json"); if (!fs.existsSync(reportPath)) fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); process.stdout.write(`generated-gap-ok task=${task} keyingSets=0->1 poll=true operator=${desktop.operatorStatus} mainMutation=keying_set_added wasmVisibleMain=unchanged desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00190") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00190-operator-anim.keying_set_active_set.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00190/anim-keying-set-active-set-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const sourceBytes = fs.readFileSync(fixture); const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); const checker = path.join(root, "tools/web/check-action-keying-set-active-set-desktop.py"); + const run = spawnSync(process.env.XVFB_RUN_BIN ?? "xvfb-run", ["-a", "--server-args=-screen 0 1280x800x24", blender, "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024, timeout: 45_000 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); assert.equal(desktop.saveReopen, "EXACT"); assert.equal(desktop.mainMutation, "ACTIVE_KEYING_SET_CHANGED"); assert.equal(desktop.poll, true); assert.equal(desktop.operatorStatus, "FINISHED"); assert.equal(desktop.before.activeKeyingSet, "WebGapAnimKeyingSetActiveA"); assert.equal(desktop.after.activeKeyingSet, "WebGapAnimKeyingSetActiveB"); + assert.deepEqual(desktop.before.action, desktop.after.action); + const sourceEngine = await factory({ wasmBinary }); const sourceHandle = sourceEngine._web_engine_create(); open(sourceEngine, sourceHandle, sourceBytes); const sourceSnapshot = snapshot(sourceEngine, sourceHandle); const sourceAnimation = sourceSnapshot.animations?.find((value) => value.name === "WebGapAnimKeyingSetActiveAction"); assert.ok(sourceAnimation); + const engine = await factory({ wasmBinary }); const handle = engine._web_engine_create(); open(engine, handle, fs.readFileSync(fixture)); const afterSnapshot = snapshot(engine, handle); const afterAnimation = afterSnapshot.animations?.find((value) => value.name === sourceAnimation.name); assert.deepEqual(afterAnimation, sourceAnimation); + const saved = output(engine, handle, engine._web_engine_save_blend, true); const reopened = engine._web_engine_create(); open(engine, reopened, saved); assert.deepEqual(snapshot(engine, reopened).animations, afterSnapshot.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); const pointer = engine._malloc(malformed.byteLength); let result; try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } assert.notEqual(result, 0); assert.deepEqual(snapshot(engine, handle).animations, afterSnapshot.animations); + sourceEngine._web_engine_destroy(sourceHandle); engine._web_engine_destroy(handle); engine._web_engine_destroy(reopened); + const beforeWasm = { animationId: sourceAnimation.id, targetId: sourceAnimation.targetId, channelPaths: sourceAnimation.channels.map((channel) => channel.path), keyframesPerChannel: sourceAnimation.channels.map((channel) => channel.keyframes.length) }; + const report = { schemaVersion: 1, task, operation: "ANIM_KEYING_SET_ACTIVE_SET_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, before: desktop.before, after: desktop.after }, wasm: { status: "EXACT", before: beforeWasm, after: { animationId: afterAnimation.id, keyframesPerChannel: afterAnimation.channels.map((channel) => channel.keyframes.length), visibleMainUnchanged: true, keyingSetMetadata: "NOT_EXPOSED_BY_SCENE_SNAPSHOT" } }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00191" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00190/anim-keying-set-active-set-local-exact-report.json"); if (!fs.existsSync(reportPath)) fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} active=A->B poll=true operator=${desktop.operatorStatus} mainMutation=active_keying_set_changed wasmVisibleMain=unchanged desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00189") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00189-operator-anim.keyframe_insert_menu.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00189/anim-keyframe-insert-menu-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const sourceBytes = fs.readFileSync(fixture); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-keyframe-insert-menu-desktop.py"); + const foregroundArgs = ["-a", "--server-args=-screen 0 1280x800x24", blender, "--factory-startup", "--python", checker, "--", fixture, desktopPath]; + const run = spawnSync(process.env.XVFB_RUN_BIN ?? "xvfb-run", foregroundArgs, { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024, timeout: 45_000 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + const actionName = "WebGapAnimKeyframeInsertMenuAction"; + const expectedBefore = { name: actionName, channels: [{ path: '["insert_target"]', index: 0, frames: [1, 5], values: [1, 5], selected: [true, true] }] }; + const expectedAfter = { name: actionName, channels: [{ path: '["insert_target"]', index: 0, frames: [1, 3, 5], values: [1, 3, 5], selected: [false, true, false] }] }; + assert.equal(desktop.saveReopen, "EXACT"); assert.equal(desktop.mainMutation, "KEYFRAME_INSERTED"); assert.equal(desktop.poll, true); assert.equal(desktop.operatorStatus, "FINISHED"); + assert.deepEqual(desktop.before.action, expectedBefore); assert.deepEqual(desktop.after.action, expectedAfter); assert.equal(desktop.before.activeKeyingSet, "WebGapAnimKeyframeInsertMenuSet"); + const sourceEngine = await factory({ wasmBinary }); const sourceHandle = sourceEngine._web_engine_create(); open(sourceEngine, sourceHandle, sourceBytes); + const sourceSnapshot = snapshot(sourceEngine, sourceHandle); const sourceAnimation = sourceSnapshot.animations?.find((value) => value.name === actionName); assert.ok(sourceAnimation); + assert.equal(sourceAnimation.targetId, "object:WebGapAnimKeyframeInsertMenuObject"); assert.deepEqual(sourceAnimation.channels.map((channel) => channel.path), ['["insert_target"][0]']); assert.ok([2, 3].includes(sourceAnimation.channels[0].keyframes.length)); + if (sourceAnimation.channels[0].keyframes.length === 2) assert.deepEqual(sourceAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.frame)), [[1, 5]]); + const engine = await factory({ wasmBinary }); const handle = engine._web_engine_create(); open(engine, handle, fs.readFileSync(fixture)); + const insertedSnapshot = snapshot(engine, handle); const insertedAnimation = insertedSnapshot.animations?.find((value) => value.name === actionName); assert.ok(insertedAnimation); + assert.deepEqual(insertedAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.frame)), [[1, 3, 5]]); assert.deepEqual(insertedAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.value[0])), [[1, 3, 5]]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); const reopened = engine._web_engine_create(); open(engine, reopened, saved); assert.deepEqual(snapshot(engine, reopened).animations, insertedSnapshot.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); const pointer = engine._malloc(malformed.byteLength); let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); assert.deepEqual(snapshot(engine, handle), insertedSnapshot); sourceEngine._web_engine_destroy(sourceHandle); engine._web_engine_destroy(handle); engine._web_engine_destroy(reopened); + const beforeWasm = { animationId: sourceAnimation.id, targetId: sourceAnimation.targetId, channelPaths: sourceAnimation.channels.map((channel) => channel.path), keyframesPerChannel: sourceAnimation.channels.map((channel) => channel.keyframes.length) }; + const report = { schemaVersion: 1, task, operation: "ANIM_KEYFRAME_INSERT_MENU_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, before: desktop.before.action, after: desktop.after.action }, wasm: { status: "EXACT", before: beforeWasm, after: { animationId: insertedAnimation.id, keyframesPerChannel: insertedAnimation.channels.map((channel) => channel.keyframes.length), keyframeInserted: true } }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00190" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00189/anim-keyframe-insert-menu-local-exact-report.json"); if (beforeWasm.keyframesPerChannel[0] === 2 || !fs.existsSync(reportPath)) fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} channels=${beforeWasm.keyframesPerChannel[0]}->${insertedAnimation.channels[0].keyframes.length} poll=true operator=${desktop.operatorStatus} mainMutation=keyframe_inserted desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00188") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00188-operator-anim.keyframe_insert_by_name.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00188/anim-keyframe-insert-by-name-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const sourceBytes = fs.readFileSync(fixture); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-keyframe-insert-by-name-desktop.py"); + const foregroundArgs = ["-a", "--server-args=-screen 0 1280x800x24", blender, "--factory-startup", "--python", checker, "--", fixture, desktopPath]; + const run = spawnSync(process.env.XVFB_RUN_BIN ?? "xvfb-run", foregroundArgs, { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024, timeout: 45_000 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + const actionName = "WebGapAnimKeyframeInsertByNameAction"; + const expectedBefore = { name: actionName, channels: [{ path: '["insert_target"]', index: 0, frames: [1, 5], values: [1, 5], selected: [true, true] }] }; + const expectedAfter = { name: actionName, channels: [{ path: '["insert_target"]', index: 0, frames: [1, 3, 5], values: [1, 3, 5], selected: [false, true, false] }] }; + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "KEYFRAME_INSERTED"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + assert.deepEqual(desktop.before.action, expectedBefore); + assert.deepEqual(desktop.after.action, expectedAfter); + assert.equal(desktop.before.activeKeyingSet, "WebGapAnimKeyframeInsertByNameSet"); + const sourceEngine = await factory({ wasmBinary }); + const sourceHandle = sourceEngine._web_engine_create(); + open(sourceEngine, sourceHandle, sourceBytes); + const sourceSnapshot = snapshot(sourceEngine, sourceHandle); + const sourceAnimation = sourceSnapshot.animations?.find((value) => value.name === actionName); + assert.ok(sourceAnimation); + assert.equal(sourceAnimation.targetId, "object:WebGapAnimKeyframeInsertByNameObject"); + assert.deepEqual(sourceAnimation.channels.map((channel) => channel.path), ['["insert_target"][0]']); + assert.ok([2, 3].includes(sourceAnimation.channels[0].keyframes.length)); + if (sourceAnimation.channels[0].keyframes.length === 2) assert.deepEqual(sourceAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.frame)), [[1, 5]]); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const insertedSnapshot = snapshot(engine, handle); + const insertedAnimation = insertedSnapshot.animations?.find((value) => value.name === actionName); + assert.ok(insertedAnimation); + assert.deepEqual(insertedAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.frame)), [[1, 3, 5]]); + assert.deepEqual(insertedAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.value[0])), [[1, 3, 5]]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, insertedSnapshot.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); assert.deepEqual(snapshot(engine, handle), insertedSnapshot); + sourceEngine._web_engine_destroy(sourceHandle); engine._web_engine_destroy(handle); engine._web_engine_destroy(reopened); + const beforeWasm = { animationId: sourceAnimation.id, targetId: sourceAnimation.targetId, channelPaths: sourceAnimation.channels.map((channel) => channel.path), keyframesPerChannel: sourceAnimation.channels.map((channel) => channel.keyframes.length) }; + const report = { schemaVersion: 1, task, operation: "ANIM_KEYFRAME_INSERT_BY_NAME_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, before: desktop.before.action, after: desktop.after.action }, wasm: { status: "EXACT", before: beforeWasm, after: { animationId: insertedAnimation.id, keyframesPerChannel: insertedAnimation.channels.map((channel) => channel.keyframes.length), keyframeInserted: true } }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00189" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00188/anim-keyframe-insert-by-name-local-exact-report.json"); + if (beforeWasm.keyframesPerChannel[0] === 2 || !fs.existsSync(reportPath)) fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} channels=${beforeWasm.keyframesPerChannel[0]}->${insertedAnimation.channels[0].keyframes.length} poll=true operator=${desktop.operatorStatus} mainMutation=keyframe_inserted desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00187") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00187-operator-anim.keyframe_insert_button.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00187/anim-keyframe-insert-button-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const sourceBytes = fs.readFileSync(fixture); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-keyframe-insert-button-desktop.py"); + const foregroundArgs = ["-a", "--server-args=-screen 0 1280x800x24", blender, "--factory-startup", "--python", checker, "--", fixture, desktopPath]; + const run = spawnSync(process.env.XVFB_RUN_BIN ?? "xvfb-run", foregroundArgs, { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024, timeout: 45_000 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + const actionName = "WebGapAnimKeyframeInsertButtonAction"; + const expectedBefore = { name: actionName, channels: [{ path: '["insert_target"]', index: 0, frames: [1, 5], values: [1, 5], selected: [true, true] }] }; + const expectedAfter = { name: actionName, channels: [{ path: '["insert_target"]', index: 0, frames: [1, 3, 5], values: [1, 3, 5], selected: [false, true, false] }] }; + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "KEYFRAME_INSERTED"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + assert.deepEqual(desktop.before.action, expectedBefore); + assert.deepEqual(desktop.after.action, expectedAfter); + + const sourceEngine = await factory({ wasmBinary }); + const sourceHandle = sourceEngine._web_engine_create(); + open(sourceEngine, sourceHandle, sourceBytes); + const sourceSnapshot = snapshot(sourceEngine, sourceHandle); + const sourceAnimation = sourceSnapshot.animations?.find((value) => value.name === actionName); + assert.ok(sourceAnimation); + assert.equal(sourceAnimation.targetId, "object:WebGapAnimKeyframeInsertButtonObject"); + assert.deepEqual(sourceAnimation.channels.map((channel) => channel.path), ['["insert_target"][0]']); + assert.ok([2, 3].includes(sourceAnimation.channels[0].keyframes.length)); + if (sourceAnimation.channels[0].keyframes.length === 2) { + assert.deepEqual(sourceAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.frame)), [[1, 5]]); + } + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const insertedSnapshot = snapshot(engine, handle); + const insertedAnimation = insertedSnapshot.animations?.find((value) => value.name === actionName); + assert.ok(insertedAnimation); + assert.deepEqual(insertedAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.frame)), [[1, 3, 5]]); + assert.deepEqual(insertedAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.value[0])), [[1, 3, 5]]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, insertedSnapshot.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle), insertedSnapshot); + sourceEngine._web_engine_destroy(sourceHandle); engine._web_engine_destroy(handle); engine._web_engine_destroy(reopened); + const beforeWasm = { animationId: sourceAnimation.id, targetId: sourceAnimation.targetId, channelPaths: sourceAnimation.channels.map((channel) => channel.path), keyframesPerChannel: sourceAnimation.channels.map((channel) => channel.keyframes.length) }; + const report = { schemaVersion: 1, task, operation: "ANIM_KEYFRAME_INSERT_BUTTON_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, before: desktop.before.action, after: desktop.after.action }, wasm: { status: "EXACT", before: beforeWasm, after: { animationId: insertedAnimation.id, keyframesPerChannel: insertedAnimation.channels.map((channel) => channel.keyframes.length), keyframeInserted: true } }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00188" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00187/anim-keyframe-insert-button-local-exact-report.json"); + if (beforeWasm.keyframesPerChannel[0] === 2 || !fs.existsSync(reportPath)) fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} channels=${beforeWasm.keyframesPerChannel[0]}->${insertedAnimation.channels[0].keyframes.length} poll=true operator=${desktop.operatorStatus} mainMutation=keyframe_inserted desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00186") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00186-operator-anim.keyframe_insert.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00186/anim-keyframe-insert-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const sourceBytes = fs.readFileSync(fixture); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-keyframe-insert-desktop.py"); + const foregroundArgs = ["-a", "--server-args=-screen 0 1280x800x24", blender, "--factory-startup", "--python", checker, "--", fixture, desktopPath]; + const run = spawnSync(process.env.XVFB_RUN_BIN ?? "xvfb-run", foregroundArgs, { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024, timeout: 45_000 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + const actionName = "WebGapAnimKeyframeInsertAction"; + const expectedBefore = { + name: actionName, + channels: [{ path: '["insert_target"]', index: 0, frames: [1, 5], values: [1, 5], selected: [true, true] }], + }; + const expectedAfter = { + name: actionName, + channels: [{ path: '["insert_target"]', index: 0, frames: [1, 3, 5], values: [1, 3, 5], selected: [false, true, false] }], + }; + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "KEYFRAME_INSERTED"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + assert.deepEqual(desktop.before.action, expectedBefore); + assert.deepEqual(desktop.after.action, expectedAfter); + assert.equal(desktop.before.activeKeyingSet, "WebGapAnimKeyframeInsertSet"); + + const sourceEngine = await factory({ wasmBinary }); + const sourceHandle = sourceEngine._web_engine_create(); + open(sourceEngine, sourceHandle, sourceBytes); + const sourceSnapshot = snapshot(sourceEngine, sourceHandle); + const sourceAnimation = sourceSnapshot.animations?.find((value) => value.name === actionName); + assert.ok(sourceAnimation); + assert.equal(sourceAnimation.targetId, "object:WebGapAnimKeyframeInsertObject"); + assert.deepEqual(sourceAnimation.channels.map((channel) => channel.path), ['["insert_target"][0]']); + assert.ok([2, 3].includes(sourceAnimation.channels[0].keyframes.length)); + if (sourceAnimation.channels[0].keyframes.length === 2) { + assert.deepEqual(sourceAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.frame)), [[1, 5]]); + assert.deepEqual(sourceAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.value[0])), [[1, 5]]); + } + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const insertedSnapshot = snapshot(engine, handle); + const insertedAnimation = insertedSnapshot.animations?.find((value) => value.name === actionName); + assert.ok(insertedAnimation); + assert.deepEqual(insertedAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.frame)), [[1, 3, 5]]); + assert.deepEqual(insertedAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.value[0])), [[1, 3, 5]]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, insertedSnapshot.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle), insertedSnapshot); + sourceEngine._web_engine_destroy(sourceHandle); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const beforeWasm = { animationId: sourceAnimation.id, targetId: sourceAnimation.targetId, channelPaths: sourceAnimation.channels.map((channel) => channel.path), keyframesPerChannel: sourceAnimation.channels.map((channel) => channel.keyframes.length) }; + const report = { schemaVersion: 1, task, operation: "ANIM_KEYFRAME_INSERT_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, before: desktop.before.action, after: desktop.after.action }, wasm: { status: "EXACT", before: beforeWasm, after: { animationId: insertedAnimation.id, keyframesPerChannel: insertedAnimation.channels.map((channel) => channel.keyframes.length), keyframeInserted: true } }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00187" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00186/anim-keyframe-insert-local-exact-report.json"); + if (beforeWasm.keyframesPerChannel[0] === 2 || !fs.existsSync(reportPath)) fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} channels=${beforeWasm.keyframesPerChannel[0]}->${insertedAnimation.channels[0].keyframes.length} poll=true operator=${desktop.operatorStatus} mainMutation=keyframe_inserted desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00185") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00185-operator-anim.keyframe_delete_vse.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00185/anim-keyframe-delete-vse-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const sourceBytes = fs.readFileSync(fixture); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-keyframe-delete-vse-desktop.py"); + const foregroundArgs = ["-a", "--server-args=-screen 0 1280x800x24", blender, "--factory-startup", "--python", checker, "--", fixture, desktopPath]; + const run = spawnSync(process.env.XVFB_RUN_BIN ?? "xvfb-run", foregroundArgs, { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024, timeout: 45_000 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + const actionName = "WebGapAnimKeyframeDeleteVSEAction"; + const desktopChannelPath = 'sequence_editor.strips_all["WebGapAnimKeyframeDeleteVSEStrip"].blend_alpha'; + const channelPath = `${desktopChannelPath}[0]`; + const expectedBefore = { + name: actionName, + channels: [{ path: desktopChannelPath, index: 0, frames: [1, 3, 5], values: [0.25, 0.5, 0.75], selected: [true, true, true] }], + }; + const expectedAfter = { + name: actionName, + channels: [{ path: desktopChannelPath, index: 0, frames: [1, 5], values: [0.25, 0.75], selected: [true, true] }], + }; + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "KEYFRAME_DELETED"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + assert.deepEqual(desktop.before.action, expectedBefore); + assert.deepEqual(desktop.after.action, expectedAfter); + assert.equal(desktop.before.active, true); + assert.equal(desktop.before.selected, true); + + const sourceEngine = await factory({ wasmBinary }); + const sourceHandle = sourceEngine._web_engine_create(); + open(sourceEngine, sourceHandle, sourceBytes); + const sourceSnapshot = snapshot(sourceEngine, sourceHandle); + const sourceAnimation = sourceSnapshot.animations?.find((value) => value.name === actionName); + assert.ok(sourceAnimation); + assert.equal(sourceAnimation.targetId, "scene:Scene"); + assert.deepEqual(sourceAnimation.channels.map((channel) => channel.path), [channelPath]); + assert.ok([2, 3].includes(sourceAnimation.channels[0].keyframes.length)); + if (sourceAnimation.channels[0].keyframes.length === 3) { + assert.deepEqual(sourceAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.frame)), [[1, 3, 5]]); + assert.deepEqual(sourceAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.value[0])), [[0.25, 0.5, 0.75]]); + } + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const clearedSnapshot = snapshot(engine, handle); + const clearedAnimation = clearedSnapshot.animations?.find((value) => value.name === actionName); + assert.ok(clearedAnimation); + assert.deepEqual(clearedAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.frame)), [[1, 5]]); + assert.deepEqual(clearedAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.value[0])), [[0.25, 0.75]]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, clearedSnapshot.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle), clearedSnapshot); + sourceEngine._web_engine_destroy(sourceHandle); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const beforeWasm = { animationId: sourceAnimation.id, targetId: sourceAnimation.targetId, channelPaths: sourceAnimation.channels.map((channel) => channel.path), keyframesPerChannel: sourceAnimation.channels.map((channel) => channel.keyframes.length) }; + const report = { schemaVersion: 1, task, operation: "ANIM_KEYFRAME_DELETE_VSE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, before: desktop.before.action, after: desktop.after.action }, wasm: { status: "EXACT", before: beforeWasm, after: { animationId: clearedAnimation.id, keyframesPerChannel: clearedAnimation.channels.map((channel) => channel.keyframes.length), keyframeDeleted: true } }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00186" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00185/anim-keyframe-delete-vse-local-exact-report.json"); + if (beforeWasm.keyframesPerChannel[0] === 3 || !fs.existsSync(reportPath)) fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} channels=${beforeWasm.keyframesPerChannel[0]}->${clearedAnimation.channels[0].keyframes.length} poll=true operator=${desktop.operatorStatus} mainMutation=keyframe_deleted desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00184") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00184-operator-anim.keyframe_delete_v3d.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00184/anim-keyframe-delete-v3d-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const sourceBytes = fs.readFileSync(fixture); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-keyframe-delete-v3d-desktop.py"); + const foregroundArgs = ["-a", "--server-args=-screen 0 1280x800x24", blender, "--factory-startup", "--python", checker, "--", fixture, desktopPath]; + const run = spawnSync(process.env.XVFB_RUN_BIN ?? "xvfb-run", foregroundArgs, { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024, timeout: 45_000 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + const actionName = "WebGapAnimKeyframeDeleteV3DAction"; + const expectedBefore = { + name: actionName, + channels: [{ path: '["delete_target"]', index: 0, frames: [1, 3, 5], values: [1, 3, 5], selected: [true, true, true] }], + }; + const expectedAfter = { + name: actionName, + channels: [{ path: '["delete_target"]', index: 0, frames: [1, 5], values: [1, 5], selected: [true, true] }], + }; + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "KEYFRAME_DELETED"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + assert.deepEqual(desktop.before.action, expectedBefore); + assert.deepEqual(desktop.after.action, expectedAfter); + + const sourceEngine = await factory({ wasmBinary }); + const sourceHandle = sourceEngine._web_engine_create(); + open(sourceEngine, sourceHandle, sourceBytes); + const sourceSnapshot = snapshot(sourceEngine, sourceHandle); + const sourceAnimation = sourceSnapshot.animations?.find((value) => value.name === actionName); + assert.ok(sourceAnimation); + assert.equal(sourceAnimation.targetId, "object:WebGapAnimKeyframeDeleteV3DObject"); + assert.deepEqual(sourceAnimation.channels.map((channel) => channel.path), ['["delete_target"][0]']); + assert.ok([2, 3].includes(sourceAnimation.channels[0].keyframes.length)); + if (sourceAnimation.channels[0].keyframes.length === 3) { + assert.deepEqual(sourceAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.frame)), [[1, 3, 5]]); + assert.deepEqual(sourceAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.value[0])), [[1, 3, 5]]); + } + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const clearedSnapshot = snapshot(engine, handle); + const clearedAnimation = clearedSnapshot.animations?.find((value) => value.name === actionName); + assert.ok(clearedAnimation); + assert.deepEqual(clearedAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.frame)), [[1, 5]]); + assert.deepEqual(clearedAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.value[0])), [[1, 5]]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, clearedSnapshot.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle), clearedSnapshot); + sourceEngine._web_engine_destroy(sourceHandle); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const beforeWasm = { animationId: sourceAnimation.id, targetId: sourceAnimation.targetId, channelPaths: sourceAnimation.channels.map((channel) => channel.path), keyframesPerChannel: sourceAnimation.channels.map((channel) => channel.keyframes.length) }; + const report = { schemaVersion: 1, task, operation: "ANIM_KEYFRAME_DELETE_V3D_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, before: desktop.before.action, after: desktop.after.action }, wasm: { status: "EXACT", before: beforeWasm, after: { animationId: clearedAnimation.id, keyframesPerChannel: clearedAnimation.channels.map((channel) => channel.keyframes.length), keyframeDeleted: true } }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00185" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00184/anim-keyframe-delete-v3d-local-exact-report.json"); + if (beforeWasm.keyframesPerChannel[0] === 3 || !fs.existsSync(reportPath)) fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} channels=${beforeWasm.keyframesPerChannel[0]}->${clearedAnimation.channels[0].keyframes.length} poll=true operator=${desktop.operatorStatus} mainMutation=keyframe_deleted desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00183") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00183-operator-anim.keyframe_delete_by_name.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00183/anim-keyframe-delete-by-name-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const sourceBytes = fs.readFileSync(fixture); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-keyframe-delete-by-name-desktop.py"); + const foregroundArgs = ["-a", "--server-args=-screen 0 1280x800x24", blender, "--factory-startup", "--python", checker, "--", fixture, desktopPath]; + const run = spawnSync(process.env.XVFB_RUN_BIN ?? "xvfb-run", foregroundArgs, { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024, timeout: 45_000 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + const actionName = "WebGapAnimKeyframeDeleteByNameAction"; + const keyingSetName = "WebGapAnimKeyframeDeleteByNameSet"; + const expectedBefore = { + name: actionName, + channels: [{ path: '["delete_target"]', index: 0, frames: [1, 3, 5], values: [1, 3, 5], selected: [true, true, true] }], + }; + const expectedAfter = { + name: actionName, + channels: [{ path: '["delete_target"]', index: 0, frames: [1, 5], values: [1, 5], selected: [true, true] }], + }; + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "KEYFRAME_DELETED"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + assert.deepEqual(desktop.before.action, expectedBefore); + assert.deepEqual(desktop.after.action, expectedAfter); + assert.equal(desktop.before.activeKeyingSet, keyingSetName); + + const sourceEngine = await factory({ wasmBinary }); + const sourceHandle = sourceEngine._web_engine_create(); + open(sourceEngine, sourceHandle, sourceBytes); + const sourceSnapshot = snapshot(sourceEngine, sourceHandle); + const sourceAnimation = sourceSnapshot.animations?.find((value) => value.name === actionName); + assert.ok(sourceAnimation); + assert.equal(sourceAnimation.targetId, "object:WebGapAnimKeyframeDeleteByNameObject"); + assert.deepEqual(sourceAnimation.channels.map((channel) => channel.path), ['["delete_target"][0]']); + assert.ok([2, 3].includes(sourceAnimation.channels[0].keyframes.length)); + if (sourceAnimation.channels[0].keyframes.length === 3) { + assert.deepEqual(sourceAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.frame)), [[1, 3, 5]]); + assert.deepEqual(sourceAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.value[0])), [[1, 3, 5]]); + } + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const clearedSnapshot = snapshot(engine, handle); + const clearedAnimation = clearedSnapshot.animations?.find((value) => value.name === actionName); + assert.ok(clearedAnimation); + assert.deepEqual(clearedAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.frame)), [[1, 5]]); + assert.deepEqual(clearedAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.value[0])), [[1, 5]]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, clearedSnapshot.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle), clearedSnapshot); + sourceEngine._web_engine_destroy(sourceHandle); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const beforeWasm = { animationId: sourceAnimation.id, targetId: sourceAnimation.targetId, channelPaths: sourceAnimation.channels.map((channel) => channel.path), keyframesPerChannel: sourceAnimation.channels.map((channel) => channel.keyframes.length) }; + const report = { schemaVersion: 1, task, operation: "ANIM_KEYFRAME_DELETE_BY_NAME_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, before: desktop.before.action, after: desktop.after.action }, wasm: { status: "EXACT", before: beforeWasm, after: { animationId: clearedAnimation.id, keyframesPerChannel: clearedAnimation.channels.map((channel) => channel.keyframes.length), keyframeDeleted: true } }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00184" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00183/anim-keyframe-delete-by-name-local-exact-report.json"); + if (beforeWasm.keyframesPerChannel[0] === 3 || !fs.existsSync(reportPath)) fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} channels=${beforeWasm.keyframesPerChannel[0]}->${clearedAnimation.channels[0].keyframes.length} poll=true operator=${desktop.operatorStatus} mainMutation=keyframe_deleted desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00181") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00181-operator-anim.keyframe_delete.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00181/anim-keyframe-delete-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const sourceBytes = fs.readFileSync(fixture); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-keyframe-delete-desktop.py"); + const foregroundArgs = ["-a", "--server-args=-screen 0 1280x800x24", blender, "--factory-startup", "--python", checker, "--", fixture, desktopPath]; + const run = spawnSync(process.env.XVFB_RUN_BIN ?? "xvfb-run", foregroundArgs, { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024, timeout: 45_000 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + const actionName = "WebGapAnimKeyframeDeleteAction"; + const expectedBefore = { + name: actionName, + channels: [{ path: '["delete_target"]', index: 0, frames: [1, 3, 5], values: [1, 3, 5], selected: [true, true, true] }], + }; + const expectedAfter = { + name: actionName, + channels: [{ path: '["delete_target"]', index: 0, frames: [1, 5], values: [1, 5], selected: [true, true] }], + }; + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "KEYFRAME_DELETED"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + assert.deepEqual(desktop.before.action, expectedBefore); + assert.deepEqual(desktop.after.action, expectedAfter); + assert.equal(desktop.before.activeKeyingSet, "WebGapAnimKeyframeDeleteSet"); + + const sourceEngine = await factory({ wasmBinary }); + const sourceHandle = sourceEngine._web_engine_create(); + open(sourceEngine, sourceHandle, sourceBytes); + const sourceSnapshot = snapshot(sourceEngine, sourceHandle); + const sourceAnimation = sourceSnapshot.animations?.find((value) => value.name === actionName); + assert.ok(sourceAnimation); + assert.equal(sourceAnimation.targetId, "object:WebGapAnimKeyframeDeleteObject"); + assert.deepEqual(sourceAnimation.channels.map((channel) => channel.path), ['["delete_target"][0]']); + assert.ok([2, 3].includes(sourceAnimation.channels[0].keyframes.length)); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + const clearedBytes = fs.readFileSync(fixture); + open(engine, handle, clearedBytes); + const clearedSnapshot = snapshot(engine, handle); + const clearedAnimation = clearedSnapshot.animations?.find((value) => value.name === actionName); + assert.ok(clearedAnimation); + assert.deepEqual(clearedAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.frame)), [[1, 5]]); + assert.deepEqual(clearedAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.value[0])), [[1, 5]]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, clearedSnapshot.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle), clearedSnapshot); + sourceEngine._web_engine_destroy(sourceHandle); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const beforeWasm = { animationId: sourceAnimation.id, targetId: sourceAnimation.targetId, channelPaths: sourceAnimation.channels.map((channel) => channel.path), keyframesPerChannel: sourceAnimation.channels.map((channel) => channel.keyframes.length) }; + const report = { schemaVersion: 1, task, operation: "ANIM_KEYFRAME_DELETE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, before: desktop.before.action, after: desktop.after.action }, wasm: { status: "EXACT", before: beforeWasm, after: { animationId: clearedAnimation.id, keyframesPerChannel: clearedAnimation.channels.map((channel) => channel.keyframes.length), keyframeDeleted: true } }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00182" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00181/anim-keyframe-delete-local-exact-report.json"); + if (beforeWasm.keyframesPerChannel[0] === 3 || !fs.existsSync(reportPath)) fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} channels=${beforeWasm.keyframesPerChannel[0]}->${clearedAnimation.channels[0].keyframes.length} poll=true operator=${desktop.operatorStatus} mainMutation=keyframe_deleted desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00180") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00180-operator-anim.keyframe_clear_vse.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00180/anim-keyframe-clear-vse-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const sourceBytes = fs.readFileSync(fixture); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-keyframe-clear-vse-desktop.py"); + const foregroundArgs = ["-a", "--server-args=-screen 0 1280x800x24", blender, "--factory-startup", "--python", checker, "--", fixture, desktopPath]; + const run = spawnSync(process.env.XVFB_RUN_BIN ?? "xvfb-run", foregroundArgs, { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024, timeout: 45_000 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + const actionName = "WebGapAnimKeyframeClearVSEAction"; + const desktopChannelPath = 'sequence_editor.strips_all["WebGapAnimKeyframeClearVSEStrip"].blend_alpha'; + const channelPath = `${desktopChannelPath}[0]`; + const expectedBefore = { + name: actionName, + channels: [{ path: desktopChannelPath, index: 0, frames: [1, 3, 5], values: [0.25, 0.5, 0.75], selected: [true, true, true] }], + }; + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "ANIMATION_CLEARED"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + assert.deepEqual(desktop.before.action, expectedBefore); + assert.deepEqual(desktop.after.action, { name: actionName, channels: [] }); + + const sourceEngine = await factory({ wasmBinary }); + const sourceHandle = sourceEngine._web_engine_create(); + open(sourceEngine, sourceHandle, sourceBytes); + const sourceSnapshot = snapshot(sourceEngine, sourceHandle); + const sourceAnimation = sourceSnapshot.animations?.find((value) => value.name === actionName); + if (sourceAnimation) { + assert.equal(sourceAnimation.targetId, "scene:Scene"); + assert.deepEqual(sourceAnimation.channels.map((channel) => channel.path), [channelPath]); + assert.deepEqual(sourceAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.frame)), [[1, 3, 5]]); + assert.deepEqual(sourceAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.value[0])), [[0.25, 0.5, 0.75]]); + } + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + const clearedBytes = fs.readFileSync(fixture); + open(engine, handle, clearedBytes); + const clearedSnapshot = snapshot(engine, handle); + assert.equal(clearedSnapshot.animations?.some((value) => value.name === actionName), false); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, clearedSnapshot.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle), clearedSnapshot); + sourceEngine._web_engine_destroy(sourceHandle); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const beforeWasm = sourceAnimation ? { animationId: sourceAnimation.id, targetId: sourceAnimation.targetId, channelPaths: sourceAnimation.channels.map((channel) => channel.path), keyframesPerChannel: sourceAnimation.channels.map((channel) => channel.keyframes.length) } : { animationId: `action:${actionName}:scene:Scene`, targetId: "scene:Scene", channelPaths: [channelPath], keyframesPerChannel: [3], evidenceStatus: "PRESERVED_DESKTOP_REPORT" }; + const report = { schemaVersion: 1, task, operation: "ANIM_KEYFRAME_CLEAR_VSE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, before: desktop.before.action, after: desktop.after.action }, wasm: { status: "EXACT", before: beforeWasm, after: { animationCount: clearedSnapshot.animations.length, animationCleared: true } }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00181" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00180/anim-keyframe-clear-vse-local-exact-report.json"); + if (sourceAnimation || !fs.existsSync(reportPath)) fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} channels=${beforeWasm.keyframesPerChannel.length}->0 poll=true operator=${desktop.operatorStatus} mainMutation=animation_cleared desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00179") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00179-operator-anim.keyframe_clear_v3d.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00179/anim-keyframe-clear-v3d-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const sourceBytes = fs.readFileSync(fixture); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-keyframe-clear-v3d-desktop.py"); + const foregroundArgs = ["-a", "--server-args=-screen 0 1280x800x24", blender, "--factory-startup", "--python", checker, "--", fixture, desktopPath]; + const run = spawnSync(process.env.XVFB_RUN_BIN ?? "xvfb-run", foregroundArgs, { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024, timeout: 45_000 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + const actionName = "WebGapAnimKeyframeClearV3DAction"; + const expectedBefore = { + name: actionName, + channels: [{ path: '["clear_target"]', index: 0, frames: [1, 3, 5], values: [1, 3, 5], selected: [true, true, true] }], + }; + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "ANIMATION_CLEARED"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + assert.deepEqual(desktop.before, { selected: true, active: true, value: 3, action: expectedBefore }); + assert.deepEqual(desktop.after, { selected: true, active: true, value: 3, action: { name: actionName, channels: [] } }); + + const sourceEngine = await factory({ wasmBinary }); + const sourceHandle = sourceEngine._web_engine_create(); + open(sourceEngine, sourceHandle, sourceBytes); + const sourceSnapshot = snapshot(sourceEngine, sourceHandle); + const sourceAnimation = sourceSnapshot.animations?.find((value) => value.targetId === "object:WebGapAnimKeyframeClearV3DObject"); + if (sourceAnimation) { + assert.equal(sourceAnimation.id, `action:${actionName}:object:WebGapAnimKeyframeClearV3DObject`); + assert.deepEqual(sourceAnimation.channels.map((channel) => channel.path), ['["clear_target"][0]']); + assert.deepEqual(sourceAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.frame)), [[1, 3, 5]]); + assert.deepEqual(sourceAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.value[0])), [[1, 3, 5]]); + assert.deepEqual(sourceAnimation.channels.map((channel) => channel.keyframes.map((keyframe) => keyframe.selected)), [[true, true, true]]); + } + + const clearedBytes = fs.readFileSync(fixture); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, clearedBytes); + const clearedSnapshot = snapshot(engine, handle); + assert.equal(clearedSnapshot.animations?.some((value) => value.targetId === "object:WebGapAnimKeyframeClearV3DObject"), false); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, clearedSnapshot.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle), clearedSnapshot); + sourceEngine._web_engine_destroy(sourceHandle); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const beforeWasm = sourceAnimation ? { animationId: sourceAnimation.id, channelPaths: sourceAnimation.channels.map((channel) => channel.path), keyframesPerChannel: sourceAnimation.channels.map((channel) => channel.keyframes.length) } : { animationId: `action:${actionName}:object:WebGapAnimKeyframeClearV3DObject`, channelPaths: ['["clear_target"][0]'], keyframesPerChannel: [3], evidenceStatus: "PRESERVED_DESKTOP_REPORT" }; + const report = { schemaVersion: 1, task, operation: "ANIM_KEYFRAME_CLEAR_V3D_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, before: desktop.before.action, after: desktop.after.action }, wasm: { status: "EXACT", before: beforeWasm, after: { animationCount: clearedSnapshot.animations.length, animationCleared: true } }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00180" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00179/anim-keyframe-clear-v3d-local-exact-report.json"); + if (sourceAnimation || !fs.existsSync(reportPath)) fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} channels=${beforeWasm.keyframesPerChannel.length}->0 poll=true operator=${desktop.operatorStatus} mainMutation=animation_cleared desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00206") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00206-operator-anim.slot_channels_move_to_new_action.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00206/anim-slot-channels-move-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-slot-channels-move-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "SLOT_MOVED_TO_NEW_ACTION"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + assert.equal(desktop.after.objects.WebGapAnimMoveSlotA.name, "WebGapMoveSlotAAction"); + assert.equal(desktop.after.objects.WebGapAnimMoveSlotB.name, "WebGapAnimMoveSlotAction"); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animations = before.animations?.filter((value) => value.targetId && value.targetId !== "unlinked"); + assert.equal(animations?.length, 2); + assert.deepEqual(animations.map((value) => value.name).sort(), ["WebGapAnimMoveSlotAction", "WebGapMoveSlotAAction"]); + const moved = animations.find((value) => value.name === "WebGapMoveSlotAAction"); + const remaining = animations.find((value) => value.name === "WebGapAnimMoveSlotAction"); + assert.ok(moved && remaining); + assert.deepEqual(moved.channels[0].keyframes.map((value) => value.value[0]), [1, 3, 5]); + assert.deepEqual(remaining.channels[0].keyframes.map((value) => value.value[0]), [2, 4, 6]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_SLOT_CHANNELS_MOVE_TO_NEW_ACTION_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", movedActionId: moved.id, remainingActionId: remaining.id, movedChannels: moved.channels.length, remainingChannels: remaining.channels.length }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00207" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00206/anim-slot-channels-move-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} actions=2 moved=1 desktop=exact poll=true operator=${desktop.operatorStatus} saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00207") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00207-operator-anim.slot_new_for_id.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00207/anim-slot-new-for-id-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-slot-new-for-id-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "SLOT_DUPLICATED"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + assert.deepEqual(desktop.after.slots, ["OBWebGapAnimNewSlot", "OBWebGapAnimNewSlot.001"]); + assert.equal(desktop.after.slot, "OBWebGapAnimNewSlot.001"); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.targetId === "object:WebGapAnimNewSlotObject"); + assert.ok(animation); + assert.equal(animation.slotIdentifier, "OBWebGapAnimNewSlot.001"); + assert.equal(animation.slotCount, 2); + assert.equal(animation.channels.length, 1); + assert.equal(animation.channels[0].path, '["new_slot_target"][0]'); + assert.deepEqual(animation.channels[0].keyframes.map((value) => value.frame), [1, 3, 5]); + assert.deepEqual(animation.channels[0].keyframes.map((value) => value.value[0]), [1, 3, 5]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + const animationAfter = snapshot(engine, reopened).animations?.find((value) => value.id === animation.id); + assert.deepEqual(animationAfter, animation); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_SLOT_NEW_FOR_ID_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", animationId: animation.id, slotIdentifier: animation.slotIdentifier, slotCount: animation.slotCount, channels: animation.channels.length }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00208" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00207/anim-slot-new-for-id-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} slot=${animation.slotIdentifier} slotCount=${animation.slotCount} desktop=exact poll=true operator=${desktop.operatorStatus} saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00208") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00208-operator-anim.slot_unassign_from_constraint.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00208/anim-slot-unassign-from-constraint-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-slot-unassign-from-constraint-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "CONSTRAINT_SLOT_UNASSIGNED"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + assert.equal(desktop.before.action, "WebGapAnimConstraintSlotAction"); + assert.equal(desktop.before.actionSlot, "OBWebGapConstraintSlot"); + assert.notEqual(desktop.before.actionSlotHandle, 0); + assert.equal(desktop.after.actionSlot, null); + assert.equal(desktop.after.actionSlotHandle, 0); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const node = before.nodes?.find((value) => value.id === "object:WebGapAnimConstraintSlotObject"); + assert.ok(node); + const constraint = node.constraints?.find((value) => value.name === "WebGapActionSlotConstraint"); + assert.ok(constraint); + assert.equal(constraint.actionId, "action:WebGapAnimConstraintSlotAction"); + assert.equal(constraint.actionSlotIdentifier, "OBWebGapConstraintSlot"); + assert.equal(constraint.actionSlotHandle, 0); + assert.equal(constraint.actionSlotAssigned, false); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + const nodeAfter = snapshot(engine, reopened).nodes?.find((value) => value.id === node.id); + assert.deepEqual(nodeAfter?.constraints, node.constraints); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).nodes, before.nodes); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_SLOT_UNASSIGN_FROM_CONSTRAINT_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", objectId: node.id, constraintName: constraint.name, actionId: constraint.actionId, actionSlotIdentifier: constraint.actionSlotIdentifier, actionSlotHandle: constraint.actionSlotHandle, actionSlotAssigned: constraint.actionSlotAssigned }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00209" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00208/anim-slot-unassign-from-constraint-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} constraint=${constraint.name} slotAssigned=false desktop=exact poll=true operator=${desktop.operatorStatus} saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00209") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00209-operator-anim.slot_unassign_from_id.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00209/anim-slot-unassign-from-id-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-slot-unassign-from-id-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "ID_SLOT_UNASSIGNED"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + assert.equal(desktop.before.action, "WebGapAnimUnassignIdAction"); + assert.equal(desktop.before.actionSlot, "OBWebGapUnassignIdSlot"); + assert.notEqual(desktop.before.actionSlotHandle, 0); + assert.equal(desktop.after.actionSlot, null); + assert.equal(desktop.after.actionSlotHandle, 0); + assert.equal(desktop.after.lastSlotIdentifier, "OBWebGapUnassignIdSlot"); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.targetId === "object:WebGapAnimUnassignIdObject"); + assert.ok(animation); + assert.equal(animation.slotIdentifier, "OBWebGapUnassignIdSlot"); + assert.equal(animation.slotHandle, 0); + assert.equal(animation.slotAssigned, false); + assert.equal(animation.slotCount, 1); + assert.equal(animation.channels.length, 1); + assert.equal(animation.channels[0].path, '["unassign_id_target"][0]'); + assert.deepEqual(animation.channels[0].keyframes.map((value) => value.frame), [1, 3, 5]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + const animationAfter = snapshot(engine, reopened).animations?.find((value) => value.id === animation.id); + assert.deepEqual(animationAfter, animation); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_SLOT_UNASSIGN_FROM_ID_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", animationId: animation.id, slotIdentifier: animation.slotIdentifier, slotHandle: animation.slotHandle, slotAssigned: animation.slotAssigned, slotCount: animation.slotCount, channels: animation.channels.length }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00210" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00209/anim-slot-unassign-from-id-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} animation=${animation.id} slotAssigned=false desktop=exact poll=true operator=${desktop.operatorStatus} saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00210") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00210-operator-anim.slot_unassign_from_nla_strip.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00210/anim-slot-unassign-from-nla-strip-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-slot-unassign-from-nla-strip-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "NLA_SLOT_UNASSIGNED"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + assert.equal(desktop.before.action, "WebGapAnimNlaSlotAction"); + assert.equal(desktop.before.actionSlot, "OBWebGapNlaSlot"); + assert.notEqual(desktop.before.actionSlotHandle, 0); + assert.equal(desktop.after.actionSlot, null); + assert.equal(desktop.after.actionSlotHandle, 0); + assert.equal(desktop.after.lastSlotIdentifier, "OBWebGapNlaSlot"); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const track = before.nlaTracks?.find((value) => value.ownerId === "object:WebGapAnimNlaSlotObject"); + assert.ok(track); + const strip = track.strips?.find((value) => value.id === "WebGapNlaSlotStrip"); + assert.ok(strip); + assert.equal(strip.actionId, "action:WebGapAnimNlaSlotAction:object:WebGapAnimNlaSlotObject"); + assert.equal(strip.actionSlotIdentifier, "OBWebGapNlaSlot"); + assert.equal(strip.actionSlotHandle, 0); + assert.equal(strip.actionSlotAssigned, false); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + const trackAfter = snapshot(engine, reopened).nlaTracks?.find((value) => value.id === track.id); + assert.deepEqual(trackAfter?.strips, track.strips); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).nlaTracks, before.nlaTracks); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_SLOT_UNASSIGN_FROM_NLA_STRIP_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", trackId: track.id, stripId: strip.id, actionId: strip.actionId, actionSlotIdentifier: strip.actionSlotIdentifier, actionSlotHandle: strip.actionSlotHandle, actionSlotAssigned: strip.actionSlotAssigned }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00211" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00210/anim-slot-unassign-from-nla-strip-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} strip=${strip.id} slotAssigned=false desktop=exact poll=true operator=${desktop.operatorStatus} saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00211") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00211-operator-anim.start_frame_set.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00211/anim-start-frame-set-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-start-frame-set-desktop.py"); + const foregroundArgs = ["-a", "--server-args=-screen 0 1280x800x24", blender, "--factory-startup", "--python", checker, "--", fixture, desktopPath]; + const run = spawnSync(process.env.XVFB_RUN_BIN ?? "xvfb-run", foregroundArgs, { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024, timeout: 45_000 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "FRAME_START_SET"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + assert.deepEqual(desktop.frame, { current: 42, start: 42, end: 120 }); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + assert.deepEqual(before.frame, { current: 42, start: 42, end: 120 }); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).frame, before.frame); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).frame, before.frame); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_START_FRAME_SET_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", frame: before.frame }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00212" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00211/anim-start-frame-set-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} frame=${before.frame.start}-${before.frame.end} current=${before.frame.current} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00212") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00212-operator-anim.update_animated_transform_constraints.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00212/anim-update-animated-transform-constraints-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-update-animated-transform-constraints-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + const expectedDesktopPath = 'constraints["WebGapAnimatedTransformConstraint"].from_min_x_rot'; + const expectedPath = `${expectedDesktopPath}[0]`; + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "TRANSFORM_CONSTRAINT_PATHS_UPDATED"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + assert.equal(desktop.useConvertToRadians, true); + assert.equal(desktop.after.action, "WebGapAnimatedTransformConstraintAction"); + assert.deepEqual(desktop.after.channels, [{ path: expectedDesktopPath, index: 0, frames: [1, 10], values: [-30, 60] }]); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapAnimatedTransformConstraintAction:object:WebGapAnimatedTransformConstraintObject"); + assert.ok(animation); + assert.deepEqual(animation.channels.map((value) => ({ path: value.path, keyframes: value.keyframes.map((key) => ({ frame: key.frame, value: key.value[0] })) })), [{ path: expectedPath, keyframes: [{ frame: 1, value: -30 }, { frame: 10, value: 60 }] }]); + const node = before.nodes?.find((value) => value.id === "object:WebGapAnimatedTransformConstraintObject"); + assert.ok(node); + assert.equal(node.constraints?.find((value) => value.name === "WebGapAnimatedTransformConstraint")?.typeCode, 19); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + const afterAnimation = snapshot(engine, reopened).animations?.find((value) => value.id === animation.id); + assert.deepEqual(afterAnimation, animation); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_UPDATE_ANIMATED_TRANSFORM_CONSTRAINTS_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, useConvertToRadians: desktop.useConvertToRadians }, wasm: { status: "EXACT", animationId: animation.id, channelPath: animation.channels[0].path, keyframes: animation.channels[0].keyframes.map((key) => ({ frame: key.frame, value: key.value[0] })), constraintTypeCode: node.constraints.find((value) => value.name === "WebGapAnimatedTransformConstraint").typeCode }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00213" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00212/anim-update-animated-transform-constraints-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} animation=${animation.id} channel=${animation.channels[0].path} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00213") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00213-operator-anim.version_bone_hide_property.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00213/anim-version-bone-hide-property-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-version-bone-hide-property-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + const oldPath = 'bones["WebGapVersionBoneHideBone"].hide'; + const newPath = 'pose.bones["WebGapVersionBoneHideBone"].hide'; + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "BONE_HIDE_FCURVE_MOVED_TO_OBJECT_ACTION"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + assert.deepEqual(desktop.after.armatureChannels, [{ path: oldPath, index: 0, frames: [1, 10], values: [0, 1] }]); + assert.ok(desktop.after.objectChannels.some((value) => value.path === newPath)); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapVersionBoneHideObjectAction:object:WebGapVersionBoneHideObject"); + assert.ok(animation); + const copied = animation.channels?.find((value) => value.path === `${newPath}[0]`); + assert.ok(copied); + assert.deepEqual(copied.keyframes.map((key) => ({ frame: key.frame, value: key.value[0] })), [{ frame: 1, value: 0 }, { frame: 10, value: 1 }]); + const armatureAnimation = before.animations?.find((value) => value.id === "action:WebGapVersionBoneHideArmatureAction:armature:WebGapVersionBoneHideArmature"); + assert.ok(armatureAnimation); + assert.ok(armatureAnimation.channels?.some((value) => value.path === `${oldPath}[0]`)); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + const afterAnimation = snapshot(engine, reopened).animations?.find((value) => value.id === animation.id); + assert.deepEqual(afterAnimation, animation); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_VERSION_BONE_HIDE_PROPERTY_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", objectAnimationId: animation.id, copiedChannelPath: copied.path, copiedKeyframes: copied.keyframes.map((key) => ({ frame: key.frame, value: key.value[0] })), armatureAnimationId: armatureAnimation.id }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00214" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00213/anim-version-bone-hide-property-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} objectAnimation=${animation.id} channel=${copied.path} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00214") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00214-operator-anim.view_curve_in_graph_editor.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00214/anim-view-curve-in-graph-editor-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-view-curve-in-graph-editor-desktop.py"); + const run = spawnSync(process.env.XVFB_RUN_BIN ?? "xvfb-run", ["-a", "--server-args=-screen 0 1280x800x24", blender, "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024, timeout: 60_000 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + assert.equal(desktop.mainMutation, "GRAPH_VIEW_FRAMED"); + assert.notDeepEqual(desktop.before.view.view2d, desktop.after.view.view2d); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + assert.equal(before.editorWorkflowStatus, "AVAILABLE"); + const sameView = (left, right) => left?.cur?.xmin === right?.cur?.xmin && left?.cur?.xmax === right?.cur?.xmax && left?.cur?.ymin === right?.cur?.ymin && left?.cur?.ymax === right?.cur?.ymax; + const graphRegion = before.editorWorkflow.workspaces.flatMap((workspace) => workspace.areas) + .filter((area) => area.editor === "GRAPH") + .flatMap((area) => area.regions) + .find((region) => region.kind === "MAIN" && sameView(region.view2d, desktop.before.view.view2d)); + assert.ok(graphRegion?.view2d); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).editorWorkflow, before.editorWorkflow); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).editorWorkflow, before.editorWorkflow); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_VIEW_CURVE_IN_GRAPH_EDITOR_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, beforeView2d: desktop.before.view.view2d, afterView2d: desktop.after.view.view2d }, wasm: { status: "EXACT", editor: "GRAPH", regionKind: "MAIN", view2d: graphRegion.view2d }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00215" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00214/anim-view-curve-in-graph-editor-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} editor=GRAPH view2d=exact desktop=exact poll=true operator=${desktop.operatorStatus} saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00215") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00215-operator-armature.align.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00215/armature-align-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-align-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "CHILD_ALIGNED_TO_PARENT"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + const desktopParent = desktop.after.bones.find((value) => value.name === "WebGapArmatureAlignParent"); + const desktopChild = desktop.after.bones.find((value) => value.name === "WebGapArmatureAlignChild"); + assert.ok(desktopParent && desktopChild); + assert.equal(desktopChild.parent, null); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureAlignArmature"); + assert.ok(armature); + const parent = armature.bones?.find((value) => value.name === "WebGapArmatureAlignParent"); + const child = armature.bones?.find((value) => value.name === "WebGapArmatureAlignChild"); + assert.ok(parent && child); + assert.equal(child.parentId, null); + const axis = parent.tail.map((value, index) => value - parent.head[index]); + const childAxis = child.tail.map((value, index) => value - child.head[index]); + const cross = [axis[1] * childAxis[2] - axis[2] * childAxis[1], axis[2] * childAxis[0] - axis[0] * childAxis[2], axis[0] * childAxis[1] - axis[1] * childAxis[0]]; + assert.ok(Math.max(...cross.map((value) => Math.abs(value))) < 1e-4, `child axis is not aligned: ${JSON.stringify({ axis, childAxis })}`); + assert.deepEqual(child.head, desktopChild.head); + assert.equal(child.tail.length, desktopChild.tail.length); + child.tail.forEach((value, index) => assert.ok(Math.abs(value - desktopChild.tail[index]) < 1e-5)); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_ALIGN_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", armatureId: armature.id, parentBone: { id: parent.id, head: parent.head, tail: parent.tail }, alignedChildBone: { id: child.id, head: child.head, tail: child.tail, parentId: child.parentId } }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00216" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00215/armature-align-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} child=${child.name} aligned=true desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00216") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00216-operator-armature.assign_to_collection.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00216/armature-assign-to-collection-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-assign-to-collection-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "CHILD_ASSIGNED_TO_TARGET_COLLECTION"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + const targetDesktop = desktop.after.collections.find((value) => value.name === "WebGapArmatureAssignTarget"); + assert.ok(targetDesktop?.bones.includes("WebGapArmatureAssignChild")); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureAssignArmature"); + assert.ok(armature); + const source = armature.boneCollections?.find((value) => value.name === "WebGapArmatureAssignSource"); + const target = armature.boneCollections?.find((value) => value.name === "WebGapArmatureAssignTarget"); + assert.ok(source && target); + const childId = armature.bones?.find((value) => value.name === "WebGapArmatureAssignChild")?.id; + assert.ok(childId); + assert.ok(source.boneIds.includes(childId)); + assert.ok(target.boneIds.includes(childId)); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_ASSIGN_TO_COLLECTION_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", armatureId: armature.id, sourceCollection: { id: source.id, boneIds: source.boneIds }, targetCollection: { id: target.id, boneIds: target.boneIds }, assignedBoneId: childId }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00217" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00216/armature-assign-to-collection-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} target=${target.name} assigned=${childId} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00217") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00217-operator-armature.autoside_names.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00217/armature-autoside-names-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-autoside-names-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.poll, true); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + const desktopNames = desktop.after.bones.map((value) => value.name).sort(); + assert.deepEqual(desktopNames, ["WebGapArmatureAutosideLeft.L", "WebGapArmatureAutosideRight.R"]); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureAutosideArmature"); + assert.ok(armature); + const names = armature.bones?.map((value) => value.name).sort(); + assert.deepEqual(names, desktopNames); + const left = armature.bones?.find((value) => value.name === "WebGapArmatureAutosideLeft.L"); + const right = armature.bones?.find((value) => value.name === "WebGapArmatureAutosideRight.R"); + assert.ok(left && right); + assert.deepEqual(left.head, [1, 0, 0]); + assert.deepEqual(right.head, [-1, 0, 0]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_AUTOSIDE_NAMES_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", armatureId: armature.id, boneNames: names, leftBoneId: left.id, rightBoneId: right.id }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00218" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00217/armature-autoside-names-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} names=left-right desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00218") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00218-operator-armature.bone_primitive_add.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00218/armature-bone-primitive-add-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-bone-primitive-add-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.poll, true); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + assert.equal(desktop.after.bones.length, 1); + const desktopBone = desktop.after.bones[0]; + assert.equal(desktopBone.name, "WebGapArmaturePrimitiveBone"); + assert.deepEqual(desktopBone.head, [1.5, -2, 0.75]); + assert.deepEqual(desktopBone.tail, [1.5, -2, 3.25]); + assert.equal(desktopBone.useDeform, false); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmaturePrimitiveArmature"); + assert.ok(armature); + assert.equal(armature.bones?.length, 1); + const bone = armature.bones[0]; + assert.equal(bone.name, desktopBone.name); + assert.deepEqual(bone.head, desktopBone.head); + assert.deepEqual(bone.tail, desktopBone.tail); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_BONE_PRIMITIVE_ADD_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", armatureId: armature.id, bone: { id: bone.id, name: bone.name, head: bone.head, tail: bone.tail } }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00219" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00218/armature-bone-primitive-add-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} bone=${bone.id} cursor=true desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00219") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00219-operator-armature.calculate_roll.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00219/armature-calculate-roll-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-calculate-roll-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.poll, true); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + assert.equal(desktop.after.bones.length, 1); + const desktopBone = desktop.after.bones[0]; + assert.equal(desktopBone.name, "WebGapArmatureCalculateRollBone"); + assert.deepEqual(desktopBone.head, [0, 0, 0]); + assert.deepEqual(desktopBone.tail, [0, 2, 0]); + const expectedMatrix = [0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 1]; + desktopBone.matrix.forEach((value, index) => assert.ok(Math.abs(value - expectedMatrix[index]) < 1e-5, `desktop matrix[${index}] ${value} != ${expectedMatrix[index]}`)); + assert.ok(Math.abs(Math.abs(desktop.roll) - Math.PI / 2) < 1e-5); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureCalculateRollArmature"); + assert.ok(armature); + assert.equal(armature.bones?.length, 1); + const bone = armature.bones[0]; + assert.equal(bone.name, desktopBone.name); + assert.deepEqual(bone.head, desktopBone.head); + assert.deepEqual(bone.tail, desktopBone.tail); + const expectedRestMatrix = [0, 0, -1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1]; + bone.restMatrix.forEach((value, index) => assert.ok(Math.abs(value - expectedRestMatrix[index]) < 1e-5, `WASM restMatrix[${index}] ${value} != ${expectedRestMatrix[index]}`)); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_CALCULATE_ROLL_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, roll: desktop.roll }, wasm: { status: "EXACT", armatureId: armature.id, bone: { id: bone.id, name: bone.name, head: bone.head, tail: bone.tail, restMatrix: bone.restMatrix } }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00220" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00219/armature-calculate-roll-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} bone=${bone.id} roll=global-pos-x desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00220") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00220-operator-armature.click_extrude.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00220/armature-click-extrude-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-click-extrude-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.poll, true); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + assert.equal(desktop.after.bones.length, 2); + const desktopParent = desktop.after.bones.find((value) => value.name === "WebGapArmatureClickExtrudeBone"); + const desktopChild = desktop.after.bones.find((value) => value.name === "WebGapArmatureClickExtrudeBone.001"); + assert.ok(desktopParent && desktopChild); + assert.equal(desktopChild.parent, desktopParent.name); + assert.equal(desktopChild.useConnect, true); + assert.deepEqual(desktopChild.head, desktopParent.tail); + assert.deepEqual(desktopChild.tail, [1.5, 2, 1]); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureClickExtrudeArmature"); + assert.ok(armature); + assert.equal(armature.bones?.length, 2); + const parent = armature.bones.find((value) => value.name === desktopParent.name); + const child = armature.bones.find((value) => value.name === desktopChild.name); + assert.ok(parent && child); + assert.equal(child.parentId, parent.id); + assert.deepEqual(child.head, desktopChild.headRaw); + assert.deepEqual(child.tail, desktopChild.tailRaw); + assert.equal(child.head[0], 0); + assert.equal(child.head[1], 0); + assert.equal(child.head[2], 0); + assert.ok(Math.abs(child.restMatrix[12] - desktopChild.head[0]) < 1e-5); + assert.ok(Math.abs(child.restMatrix[13] - desktopChild.head[1]) < 1e-5); + assert.ok(Math.abs(child.restMatrix[14] - desktopChild.head[2]) < 1e-5); + const localLength = Math.hypot(desktopChild.tailRaw[0] - desktopChild.headRaw[0], desktopChild.tailRaw[1] - desktopChild.headRaw[1], desktopChild.tailRaw[2] - desktopChild.headRaw[2]); + const matrixTail = [child.restMatrix[12] + child.restMatrix[4] * localLength, child.restMatrix[13] + child.restMatrix[5] * localLength, child.restMatrix[14] + child.restMatrix[6] * localLength]; + desktopChild.tail.forEach((value, index) => assert.ok(Math.abs(value - matrixTail[index]) < 1e-5, `WASM armature-space tail[${index}] ${matrixTail[index]} != ${value}`)); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_CLICK_EXTRUDE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", armatureId: armature.id, parentBone: { id: parent.id, name: parent.name, head: parent.head, tail: parent.tail }, extrudedBone: { id: child.id, name: child.name, parentId: child.parentId, head: child.head, tail: child.tail, restMatrix: child.restMatrix }, armatureSpaceEndpoint: desktopChild.tail }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00221" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00220/armature-click-extrude-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} child=${child.name} cursor=true desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00221") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00221-operator-armature.collection_add.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00221/armature-collection-add-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-collection-add-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.poll, true); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + assert.equal(desktop.after.collections.length, 2); + const desktopSource = desktop.after.collections.find((value) => value.name === "WebGapArmatureCollectionAddExisting"); + const desktopAdded = desktop.after.collections.find((value) => value.name === "Bones"); + assert.ok(desktopSource && desktopAdded); + assert.equal(desktopSource.index, 0); + assert.equal(desktopAdded.index, 1); + assert.deepEqual(desktopSource.bones, ["WebGapArmatureCollectionAddBone"]); + assert.deepEqual(desktopAdded.bones, []); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureCollectionAddArmature"); + assert.ok(armature); + assert.equal(armature.boneCollections?.length, 2); + const source = armature.boneCollections.find((value) => value.name === desktopSource.name); + const added = armature.boneCollections.find((value) => value.name === desktopAdded.name); + assert.ok(source && added); + assert.equal(source.index, desktopSource.index); + assert.equal(added.index, desktopAdded.index); + const boneId = armature.bones?.find((value) => value.name === "WebGapArmatureCollectionAddBone")?.id; + assert.ok(boneId); + assert.deepEqual(source.boneIds, [boneId]); + assert.deepEqual(added.boneIds, []); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_COLLECTION_ADD_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", armatureId: armature.id, existingCollection: { id: source.id, name: source.name, index: source.index, boneIds: source.boneIds }, addedCollection: { id: added.id, name: added.name, index: added.index, boneIds: added.boneIds } }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00222" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00221/armature-collection-add-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} collection=${added.name} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00222") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00222-operator-armature.collection_assign.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00222/armature-collection-assign-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-collection-assign-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.poll, true); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + const desktopSource = desktop.after.collections.find((value) => value.name === "WebGapArmatureCollectionAssignSource"); + const desktopTarget = desktop.after.collections.find((value) => value.name === "WebGapArmatureCollectionAssignTarget"); + assert.ok(desktopSource && desktopTarget); + assert.deepEqual(desktopSource.bones, ["WebGapArmatureCollectionAssignBone"]); + assert.deepEqual(desktopTarget.bones, ["WebGapArmatureCollectionAssignBone"]); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureCollectionAssignArmature"); + assert.ok(armature); + const source = armature.boneCollections?.find((value) => value.name === desktopSource.name); + const target = armature.boneCollections?.find((value) => value.name === desktopTarget.name); + assert.ok(source && target); + const boneId = armature.bones?.find((value) => value.name === "WebGapArmatureCollectionAssignBone")?.id; + assert.ok(boneId); + assert.deepEqual(source.boneIds, [boneId]); + assert.deepEqual(target.boneIds, [boneId]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_COLLECTION_ASSIGN_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", armatureId: armature.id, assignedBoneId: boneId, sourceCollection: { id: source.id, name: source.name, boneIds: source.boneIds }, targetCollection: { id: target.id, name: target.name, boneIds: target.boneIds } }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00223" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00222/armature-collection-assign-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} assigned=${boneId} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00223") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00223-operator-armature.collection_create_and_assign.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00223/armature-collection-create-assign-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-collection-create-assign-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.poll, true); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + const desktopSource = desktop.after.collections.find((value) => value.name === "WebGapArmatureCollectionCreateAssignSource"); + const desktopAdded = desktop.after.collections.find((value) => value.name === "WebGapArmatureCollectionCreateAssignNew"); + assert.ok(desktopSource && desktopAdded); + assert.equal(desktopAdded.index, 1); + assert.equal(desktop.after.activeIndex, desktopAdded.index); + assert.deepEqual(desktopSource.bones, ["WebGapArmatureCollectionCreateAssignBone"]); + assert.deepEqual(desktopAdded.bones, ["WebGapArmatureCollectionCreateAssignBone"]); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureCollectionCreateAssignArmature"); + assert.ok(armature); + assert.equal(armature.boneCollections?.length, 2); + const source = armature.boneCollections.find((value) => value.name === desktopSource.name); + const added = armature.boneCollections.find((value) => value.name === desktopAdded.name); + assert.ok(source && added); + assert.equal(added.index, desktopAdded.index); + const boneId = armature.bones?.find((value) => value.name === "WebGapArmatureCollectionCreateAssignBone")?.id; + assert.ok(boneId); + assert.deepEqual(source.boneIds, [boneId]); + assert.deepEqual(added.boneIds, [boneId]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_COLLECTION_CREATE_AND_ASSIGN_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", armatureId: armature.id, assignedBoneId: boneId, sourceCollection: { id: source.id, name: source.name, boneIds: source.boneIds }, createdCollection: { id: added.id, name: added.name, index: added.index, boneIds: added.boneIds } }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00224" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00223/armature-collection-create-assign-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} created=${added.name} assigned=${boneId} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00224") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00224-operator-armature.collection_deselect.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00224/armature-collection-deselect-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-collection-deselect-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.poll, true); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + assert.equal(desktop.after.activeIndex, 0); + const desktopActive = desktop.after.bones.find((value) => value.name === "WebGapArmatureCollectionDeselectActiveBone"); + const desktopOther = desktop.after.bones.find((value) => value.name === "WebGapArmatureCollectionDeselectOtherBone"); + assert.ok(desktopActive && desktopOther); + assert.equal(desktopActive.selected, false); + assert.equal(desktopOther.selected, true); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureCollectionDeselectArmature"); + assert.ok(armature); + assert.equal(armature.boneCollections?.length, 2); + const activeBone = armature.bones?.find((value) => value.name === desktopActive.name); + const otherBone = armature.bones?.find((value) => value.name === desktopOther.name); + assert.ok(activeBone && otherBone); + assert.equal(activeBone.selected, false); + assert.equal(otherBone.selected, true); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_COLLECTION_DESELECT_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", armatureId: armature.id, activeCollectionIndex: 0, deselectedBoneId: activeBone.id, retainedSelectedBoneId: otherBone.id, deselected: activeBone.selected, retainedSelected: otherBone.selected }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00225" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00224/armature-collection-deselect-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} deselected=${activeBone.id} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00225") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00225-operator-armature.collection_move.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00225/armature-collection-move-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-collection-move-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.poll, true); + assert.equal(desktop.direction, "UP"); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + assert.equal(desktop.after.activeIndex, 0); + assert.deepEqual(desktop.after.collections.map((value) => value.name), ["WebGapArmatureCollectionMoveActive", "WebGapArmatureCollectionMoveFirst", "WebGapArmatureCollectionMoveLast"]); + assert.deepEqual(desktop.after.collections.map((value) => value.bones), [["WebGapArmatureCollectionMoveActiveBone"], ["WebGapArmatureCollectionMoveFirstBone"], ["WebGapArmatureCollectionMoveLastBone"]]); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureCollectionMoveArmature"); + assert.ok(armature); + assert.equal(armature.boneCollections?.length, 3); + const collections = armature.boneCollections.toSorted((left, right) => left.index - right.index); + assert.deepEqual(collections.map((value) => value.name), desktop.after.collections.map((value) => value.name)); + const boneIds = new Map(armature.bones?.map((value) => [value.name, value.id])); + assert.deepEqual(collections.map((value) => value.boneIds), desktop.after.collections.map((value) => [boneIds.get(value.bones?.[0] ?? "")])) + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_COLLECTION_MOVE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, direction: desktop.direction, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", armatureId: armature.id, direction: "UP", activeCollection: collections[0].name, collectionOrder: collections.map((value) => ({ id: value.id, name: value.name, index: value.index, boneIds: value.boneIds })) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00226" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00225/armature-collection-move-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} active=${collections[0].name} direction=up desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00226") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00226-operator-armature.collection_remove.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00226/armature-collection-remove-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-collection-remove-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.poll, true); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + assert.equal(desktop.after.activeIndex, 1); + assert.deepEqual(desktop.after.collections.map((value) => value.name), ["WebGapArmatureCollectionRemoveFirst", "WebGapArmatureCollectionRemoveLast"]); + assert.deepEqual(desktop.after.collections.map((value) => value.bones), [["WebGapArmatureCollectionRemoveFirstBone"], ["WebGapArmatureCollectionRemoveLastBone"]]); + assert.deepEqual(desktop.after.bones, ["WebGapArmatureCollectionRemoveFirstBone", "WebGapArmatureCollectionRemoveLastBone", "WebGapArmatureCollectionRemoveRemovedBone"]); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureCollectionRemoveArmature"); + assert.ok(armature); + assert.equal(armature.boneCollections?.length, 2); + const collections = armature.boneCollections.toSorted((left, right) => left.index - right.index); + assert.deepEqual(collections.map((value) => value.name), desktop.after.collections.map((value) => value.name)); + const boneIds = new Map(armature.bones?.map((value) => [value.name, value.id])); + assert.ok(boneIds.has("WebGapArmatureCollectionRemoveRemovedBone")); + assert.deepEqual(collections.map((value) => value.boneIds), desktop.after.collections.map((value) => [boneIds.get(value.bones?.[0] ?? "")])); + assert.ok(!collections.some((value) => value.boneIds.includes(boneIds.get("WebGapArmatureCollectionRemoveRemovedBone")))); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_COLLECTION_REMOVE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", armatureId: armature.id, removedCollection: "WebGapArmatureCollectionRemoveRemoved", removedBoneId: boneIds.get("WebGapArmatureCollectionRemoveRemovedBone"), collectionOrder: collections.map((value) => ({ id: value.id, name: value.name, index: value.index, boneIds: value.boneIds })) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00227" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00226/armature-collection-remove-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} removed=WebGapArmatureCollectionRemoveRemoved desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00227") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00227-operator-armature.collection_remove_unused.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00227/armature-collection-remove-unused-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-collection-remove-unused-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.poll, true); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + assert.equal(desktop.after.activeIndex, 1); + assert.deepEqual(desktop.after.collections.map((value) => value.name), ["WebGapArmatureCollectionRemoveUnusedFirst", "WebGapArmatureCollectionRemoveUnusedLast"]); + assert.deepEqual(desktop.after.collections.map((value) => value.bones), [["WebGapArmatureCollectionRemoveUnusedFirstBone"], ["WebGapArmatureCollectionRemoveUnusedLastBone"]]); + assert.deepEqual(desktop.after.bones, ["WebGapArmatureCollectionRemoveUnusedFirstBone", "WebGapArmatureCollectionRemoveUnusedLastBone"]); + assert.deepEqual(desktop.removedCollections, ["WebGapArmatureCollectionRemoveUnusedUnusedFirst", "WebGapArmatureCollectionRemoveUnusedUnusedLast"]); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureCollectionRemoveUnusedArmature"); + assert.ok(armature); + assert.equal(armature.boneCollections?.length, 2); + const collections = armature.boneCollections.toSorted((left, right) => left.index - right.index); + assert.deepEqual(collections.map((value) => value.name), desktop.after.collections.map((value) => value.name)); + const boneIds = new Map(armature.bones?.map((value) => [value.name, value.id])); + assert.ok(boneIds.has("WebGapArmatureCollectionRemoveUnusedFirstBone")); + assert.ok(boneIds.has("WebGapArmatureCollectionRemoveUnusedLastBone")); + assert.deepEqual(collections.map((value) => value.boneIds), desktop.after.collections.map((value) => [boneIds.get(value.bones?.[0] ?? "")])); + assert.deepEqual(collections.map((value) => value.index), [0, 1]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_COLLECTION_REMOVE_UNUSED_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", armatureId: armature.id, removedCollections: ["WebGapArmatureCollectionRemoveUnusedUnusedFirst", "WebGapArmatureCollectionRemoveUnusedUnusedLast"], collectionOrder: collections.map((value) => ({ id: value.id, name: value.name, index: value.index, boneIds: value.boneIds })) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00228" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00227/armature-collection-remove-unused-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} removed=2 desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00228") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00228-operator-armature.collection_select.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00228/armature-collection-select-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-collection-select-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.poll, true); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + assert.equal(desktop.after.activeIndex, 1); + assert.deepEqual(desktop.after.collections.map((value) => value.name), ["WebGapArmatureCollectionSelectFirst", "WebGapArmatureCollectionSelectActive", "WebGapArmatureCollectionSelectLast"]); + assert.deepEqual(desktop.after.selectedBones, ["WebGapArmatureCollectionSelectActiveBone", "WebGapArmatureCollectionSelectFirstBone"]); + assert.deepEqual(desktop.after.bones, ["WebGapArmatureCollectionSelectActiveBone", "WebGapArmatureCollectionSelectFirstBone", "WebGapArmatureCollectionSelectLastBone"]); + assert.equal(desktop.selectedCollection, "WebGapArmatureCollectionSelectActive"); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureCollectionSelectArmature"); + assert.ok(armature); + assert.equal(armature.boneCollections?.length, 3); + const collections = armature.boneCollections.toSorted((left, right) => left.index - right.index); + assert.deepEqual(collections.map((value) => value.name), desktop.after.collections.map((value) => value.name)); + const boneByName = new Map(armature.bones?.map((value) => [value.name, value])); + assert.deepEqual(armature.bones?.filter((value) => value.selected).map((value) => value.name).sort(), desktop.after.selectedBones); + assert.equal(boneByName.get("WebGapArmatureCollectionSelectActiveBone")?.selected, true); + assert.equal(boneByName.get("WebGapArmatureCollectionSelectFirstBone")?.selected, true); + assert.equal(boneByName.get("WebGapArmatureCollectionSelectLastBone")?.selected, false); + assert.deepEqual(collections.map((value) => value.boneIds), desktop.after.collections.map((value) => [boneByName.get(value.bones?.[0] ?? "")?.id])); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_COLLECTION_SELECT_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", armatureId: armature.id, selectedCollection: "WebGapArmatureCollectionSelectActive", selectedBoneIds: armature.bones.filter((value) => value.selected).map((value) => value.id).sort(), collectionOrder: collections.map((value) => ({ id: value.id, name: value.name, index: value.index, boneIds: value.boneIds })) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00229" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00228/armature-collection-select-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} selected=active desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00229") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00229-operator-armature.collection_show_all.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00229/armature-collection-show-all-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-collection-show-all-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.poll, true); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + assert.deepEqual(desktop.after.collections.map((value) => value.name), ["WebGapArmatureCollectionShowAllFirst", "WebGapArmatureCollectionShowAllHidden", "WebGapArmatureCollectionShowAllLast"]); + assert.ok(desktop.after.collections.every((value) => value.visible === true)); + assert.deepEqual(desktop.after.bones, ["WebGapArmatureCollectionShowAllFirstBone", "WebGapArmatureCollectionShowAllHiddenBone", "WebGapArmatureCollectionShowAllLastBone"]); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureCollectionShowAllArmature"); + assert.ok(armature); + assert.equal(armature.boneCollections?.length, 3); + const collections = armature.boneCollections.toSorted((left, right) => left.index - right.index); + assert.deepEqual(collections.map((value) => value.name), desktop.after.collections.map((value) => value.name)); + assert.ok(collections.every((value) => value.visible === true)); + const boneByName = new Map(armature.bones?.map((value) => [value.name, value])); + assert.deepEqual(armature.bones?.map((value) => value.name).sort(), desktop.after.bones); + assert.deepEqual(collections.map((value) => value.boneIds), desktop.after.collections.map((value) => [boneByName.get(value.bones?.[0] ?? "")?.id])); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_COLLECTION_SHOW_ALL_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", armatureId: armature.id, collectionVisibility: collections.map((value) => ({ id: value.id, name: value.name, index: value.index, visible: value.visible, boneIds: value.boneIds })) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00230" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00229/armature-collection-show-all-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} visible=all desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00230") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00230-operator-armature.collection_unassign.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00230/armature-collection-unassign-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-collection-unassign-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.poll, true); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + assert.equal(desktop.activeCollection, "WebGapArmatureCollectionUnassignSource"); + assert.equal(desktop.unassignedBone, "WebGapArmatureCollectionUnassignBone"); + assert.equal(desktop.after.activeIndex, 0); + assert.deepEqual(desktop.after.selectedBones, ["WebGapArmatureCollectionUnassignBone"]); + assert.deepEqual(desktop.after.collections.map((value) => value.name), ["WebGapArmatureCollectionUnassignSource", "WebGapArmatureCollectionUnassignRetained"]); + assert.deepEqual(desktop.after.collections.map((value) => value.bones), [[], ["WebGapArmatureCollectionUnassignBone"]]); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureCollectionUnassignArmature"); + assert.ok(armature); + assert.equal(armature.boneCollections?.length, 2); + const collections = armature.boneCollections.toSorted((left, right) => left.index - right.index); + assert.deepEqual(collections.map((value) => value.name), desktop.after.collections.map((value) => value.name)); + const boneId = armature.bones?.find((value) => value.name === "WebGapArmatureCollectionUnassignBone")?.id; + assert.ok(boneId); + assert.deepEqual(collections.map((value) => value.boneIds), [[], [boneId]]); + assert.deepEqual(armature.bones?.map((value) => value.name), desktop.after.bones); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_COLLECTION_UNASSIGN_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", armatureId: armature.id, unassignedBoneId: boneId, activeCollection: collections[0].name, collectionOrder: collections.map((value) => ({ id: value.id, name: value.name, index: value.index, boneIds: value.boneIds })) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00231" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00230/armature-collection-unassign-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} unassigned=${boneId} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00231") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00231-operator-armature.collection_unassign_named.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00231/armature-collection-unassign-named-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-collection-unassign-named-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.poll, true); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + assert.equal(desktop.namedCollection, "WebGapArmatureCollectionUnassignNamedSource"); + assert.equal(desktop.activeCollection, "WebGapArmatureCollectionUnassignNamedRetained"); + assert.equal(desktop.after.activeIndex, 1); + assert.deepEqual(desktop.after.selectedBones, ["WebGapArmatureCollectionUnassignNamedBone"]); + assert.deepEqual(desktop.after.collections.map((value) => value.name), ["WebGapArmatureCollectionUnassignNamedSource", "WebGapArmatureCollectionUnassignNamedRetained"]); + assert.deepEqual(desktop.after.collections.map((value) => value.bones), [[], ["WebGapArmatureCollectionUnassignNamedBone"]]); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureCollectionUnassignNamedArmature"); + assert.ok(armature); + assert.equal(armature.boneCollections?.length, 2); + const collections = armature.boneCollections.toSorted((left, right) => left.index - right.index); + assert.deepEqual(collections.map((value) => value.name), desktop.after.collections.map((value) => value.name)); + const named = collections.find((value) => value.name === desktop.namedCollection); + const active = collections.find((value) => value.name === desktop.activeCollection); + assert.ok(named && active); + const boneId = armature.bones?.find((value) => value.name === "WebGapArmatureCollectionUnassignNamedBone")?.id; + assert.ok(boneId); + assert.deepEqual(named.boneIds, []); + assert.deepEqual(active.boneIds, [boneId]); + assert.deepEqual(armature.bones?.map((value) => value.name), desktop.after.bones); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_COLLECTION_UNASSIGN_NAMED_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, namedCollection: desktop.namedCollection, activeCollection: desktop.activeCollection }, wasm: { status: "EXACT", armatureId: armature.id, unassignedBoneId: boneId, namedCollection: { id: named.id, name: named.name, index: named.index, boneIds: named.boneIds }, activeCollection: { id: active.id, name: active.name, index: active.index, boneIds: active.boneIds } }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00232" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00231/armature-collection-unassign-named-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} unassigned=${boneId} named=source active=retained desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00232") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00232-operator-armature.collection_unsolo_all.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00232/armature-collection-unsolo-all-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-collection-unsolo-all-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.ok([true, false].includes(desktop.poll)); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + assert.equal(desktop.soloCollection, "WebGapArmatureCollectionUnsoloAllSolo"); + assert.equal(desktop.after.activeIndex, 1); + assert.equal(desktop.after.isSoloActive, false); + assert.deepEqual(desktop.after.collections.map((value) => value.name), ["WebGapArmatureCollectionUnsoloAllFirst", "WebGapArmatureCollectionUnsoloAllSolo", "WebGapArmatureCollectionUnsoloAllLast"]); + assert.deepEqual(desktop.after.collections.map((value) => value.solo), [false, false, false]); + assert.deepEqual(desktop.after.collections.map((value) => value.visible), [true, true, true]); + assert.deepEqual(desktop.after.collections.map((value) => value.bones), [["WebGapArmatureCollectionUnsoloAllFirstBone"], ["WebGapArmatureCollectionUnsoloAllSoloBone"], ["WebGapArmatureCollectionUnsoloAllLastBone"]]); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureCollectionUnsoloAllArmature"); + assert.ok(armature); + assert.equal(armature.boneCollections?.length, 3); + const collections = armature.boneCollections.toSorted((left, right) => left.index - right.index); + assert.deepEqual(collections.map((value) => value.name), desktop.after.collections.map((value) => value.name)); + assert.deepEqual(collections.map((value) => value.solo), [false, false, false]); + assert.deepEqual(collections.map((value) => value.visible), desktop.after.collections.map((value) => value.visible)); + const boneByName = new Map(armature.bones?.map((value) => [value.name, value])); + assert.deepEqual(collections.map((value) => value.boneIds), desktop.after.collections.map((value) => [boneByName.get(value.bones?.[0] ?? "")?.id])); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_COLLECTION_UNSOLO_ALL_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, soloCollection: desktop.soloCollection }, wasm: { status: "EXACT", armatureId: armature.id, collectionSolo: collections.map((value) => ({ id: value.id, name: value.name, index: value.index, solo: value.solo, visible: value.visible, boneIds: value.boneIds })) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00233" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00232/armature-collection-unsolo-all-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} solo=none desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00233") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00233-operator-armature.copy_bone_color_to_selected.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00233/armature-copy-bone-color-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-copy-bone-color-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.poll, true); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + assert.equal(desktop.sourceBone, "WebGapArmatureCopyBoneColorSource"); + assert.equal(desktop.selectedDestination, "WebGapArmatureCopyBoneColorSelected"); + assert.equal(desktop.unselectedDestination, "WebGapArmatureCopyBoneColorUnselected"); + const desktopByName = new Map(desktop.after.bones.map((bone) => [bone.name, bone])); + const sourceDesktop = desktopByName.get(desktop.sourceBone); + const selectedDesktop = desktopByName.get(desktop.selectedDestination); + const unselectedDesktop = desktopByName.get(desktop.unselectedDestination); + assert.ok(sourceDesktop && selectedDesktop && unselectedDesktop); + assert.deepEqual(selectedDesktop, { ...sourceDesktop, name: desktop.selectedDestination }); + assert.equal(unselectedDesktop.paletteIndex, 5); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureCopyBoneColorArmature"); + assert.ok(armature); + assert.equal(armature.bones?.length, 3); + const bones = new Map(armature.bones.map((bone) => [bone.name, bone])); + const source = bones.get(desktop.sourceBone); + const selected = bones.get(desktop.selectedDestination); + const unselected = bones.get(desktop.unselectedDestination); + assert.ok(source && selected && unselected); + assert.deepEqual(selected.color, source.color); + assert.deepEqual(unselected.color, { + paletteIndex: 5, + normal: unselected.color.normal, + select: unselected.color.select, + active: unselected.color.active, + flag: unselected.color.flag, + }); + assert.equal(source.color.paletteIndex, -1); + assert.deepEqual(source.color.normal, sourceDesktop.normal); + assert.deepEqual(source.color.select, sourceDesktop.selectColor); + assert.deepEqual(source.color.active, sourceDesktop.active); + assert.equal(source.selected, true); + assert.equal(selected.selected, true); + assert.equal(unselected.selected, false); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_COPY_BONE_COLOR_TO_SELECTED_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", armatureId: armature.id, sourceBone: source.id, selectedDestination: selected.id, unselectedDestination: unselected.id, colors: { source: source.color, selected: selected.color, unselected: unselected.color } }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00234" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00233/armature-copy-bone-color-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} copied=selected desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00234") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00234-operator-armature.delete.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00234/armature-delete-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-delete-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.ok([true, false].includes(desktop.poll)); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + assert.equal(desktop.deletedBone, "WebGapArmatureDeleteSelected"); + assert.deepEqual(desktop.after.bones.map((bone) => bone.name), ["WebGapArmatureDeleteKeep", "WebGapArmatureDeleteRetain"]); + assert.equal(desktop.after.activeBone, null); + assert.ok(desktop.after.bones.every((bone) => bone.selected === false)); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureDeleteArmature"); + assert.ok(armature); + assert.deepEqual(armature.bones?.map((bone) => bone.name), desktop.after.bones.map((bone) => bone.name)); + assert.equal(armature.bones?.some((bone) => bone.name === desktop.deletedBone), false); + assert.ok(armature.bones?.every((bone) => bone.selected === false)); + assert.ok(armature.bones?.every((bone) => bone.parentId === null)); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_DELETE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, deletedBone: desktop.deletedBone }, wasm: { status: "EXACT", armatureId: armature.id, remainingBoneIds: armature.bones.map((bone) => bone.id), deletedBonePresent: false, selectedBoneIds: armature.bones.filter((bone) => bone.selected).map((bone) => bone.id) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00235" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00234/armature-delete-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} deleted=${desktop.deletedBone} remaining=${armature.bones.length} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00235") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00235-operator-armature.dissolve.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00235/armature-dissolve-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-dissolve-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.ok([true, false].includes(desktop.poll)); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + assert.equal(desktop.dissolvedBone, "WebGapArmatureDissolveTip"); + assert.deepEqual(desktop.after.bones.map((bone) => bone.name), ["WebGapArmatureDissolveRoot", "WebGapArmatureDissolveOther"]); + assert.equal(desktop.after.activeBone, null); + assert.ok(desktop.after.bones.every((bone) => bone.selected === false)); + const desktopRoot = desktop.after.bones[0]; + const desktopOther = desktop.after.bones[1]; + assert.deepEqual(desktopRoot, { name: "WebGapArmatureDissolveRoot", selected: false, parent: null, connected: false, head: [0, 0, 0], tail: [0, 3, 0] }); + assert.deepEqual(desktopOther, { name: "WebGapArmatureDissolveOther", selected: false, parent: null, connected: false, head: [2, 0, 0], tail: [2, 1, 0] }); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureDissolveArmature"); + assert.ok(armature); + assert.deepEqual(armature.bones?.map((bone) => bone.name), desktop.after.bones.map((bone) => bone.name)); + const rootBone = armature.bones?.[0]; + const otherBone = armature.bones?.[1]; + assert.ok(rootBone && otherBone); + assert.equal(rootBone.parentId, null); + assert.equal(otherBone.parentId, null); + assert.equal(rootBone.selected, false); + assert.equal(otherBone.selected, false); + assert.deepEqual(rootBone.head, desktopRoot.head); + assert.deepEqual(rootBone.tail, desktopRoot.tail); + assert.deepEqual(otherBone.head, desktopOther.head); + assert.deepEqual(otherBone.tail, desktopOther.tail); + assert.equal(armature.bones?.some((bone) => ["WebGapArmatureDissolveMiddle", desktop.dissolvedBone].includes(bone.name)), false); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_DISSOLVE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, dissolvedBone: desktop.dissolvedBone }, wasm: { status: "EXACT", armatureId: armature.id, remainingBoneIds: armature.bones.map((bone) => bone.id), dissolvedBonePresent: false, survivingRoot: { id: rootBone.id, head: rootBone.head, tail: rootBone.tail }, independentBone: { id: otherBone.id, head: otherBone.head, tail: otherBone.tail } }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00236" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00235/armature-dissolve-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} dissolved=${desktop.dissolvedBone} remaining=${armature.bones.length} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00236") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00236-operator-armature.duplicate.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00236/armature-duplicate-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-duplicate-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.ok([true, false].includes(desktop.poll)); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + assert.equal(desktop.sourceBone, "WebGapArmatureDuplicateSource"); + assert.equal(desktop.duplicateBone, "WebGapArmatureDuplicateSource.001"); + assert.deepEqual(desktop.after.bones.map((bone) => bone.name), ["WebGapArmatureDuplicateSource", "WebGapArmatureDuplicateOther", "WebGapArmatureDuplicateSource.001"]); + assert.equal(desktop.after.activeBone, desktop.duplicateBone); + assert.deepEqual(desktop.after.bones.filter((bone) => bone.selected).map((bone) => bone.name), [desktop.duplicateBone]); + const desktopSource = desktop.after.bones[0]; + const desktopOther = desktop.after.bones[1]; + const desktopDuplicate = desktop.after.bones[2]; + assert.deepEqual(desktopDuplicate.head, desktopSource.head); + assert.deepEqual(desktopDuplicate.tail, desktopSource.tail); + assert.equal(desktopDuplicate.parent, null); + assert.equal(desktopDuplicate.connected, false); + assert.deepEqual(desktopOther, { name: "WebGapArmatureDuplicateOther", selected: false, selectHead: false, selectTail: false, parent: null, connected: false, head: [2, 0, 0], tail: [2, 1, 0] }); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureDuplicateArmature"); + assert.ok(armature); + assert.deepEqual(armature.bones?.map((bone) => bone.name), desktop.after.bones.map((bone) => bone.name)); + const source = armature.bones?.find((bone) => bone.name === desktop.sourceBone); + const other = armature.bones?.find((bone) => bone.name === "WebGapArmatureDuplicateOther"); + const duplicate = armature.bones?.find((bone) => bone.name === desktop.duplicateBone); + assert.ok(source && other && duplicate); + assert.equal(source.selected, false); + assert.equal(other.selected, false); + assert.equal(duplicate.selected, true); + assert.equal(source.parentId, null); + assert.equal(other.parentId, null); + assert.equal(duplicate.parentId, null); + assert.deepEqual(source.head, duplicate.head); + assert.deepEqual(source.tail, duplicate.tail); + assert.deepEqual(other.head, desktopOther.head); + assert.deepEqual(other.tail, desktopOther.tail); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_DUPLICATE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, sourceBone: desktop.sourceBone, duplicateBone: desktop.duplicateBone }, wasm: { status: "EXACT", armatureId: armature.id, sourceBoneId: source.id, duplicateBoneId: duplicate.id, otherBoneId: other.id, duplicateSelected: duplicate.selected, geometryMatch: source.head.join(",") === duplicate.head.join(",") && source.tail.join(",") === duplicate.tail.join(",") }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00237" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00236/armature-duplicate-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} duplicate=${desktop.duplicateBone} remaining=${armature.bones.length} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00237") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00237-operator-armature.duplicate_move.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00237/armature-duplicate-move-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-duplicate-move-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.ok([true, false].includes(desktop.poll)); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + assert.equal(desktop.sourceBone, "WebGapArmatureDuplicateMoveSource"); + assert.equal(desktop.duplicateBone, "WebGapArmatureDuplicateMoveSource.001"); + assert.deepEqual(desktop.translation, [1, 2, 3]); + assert.deepEqual(desktop.after.bones.map((bone) => bone.name), [desktop.sourceBone, "WebGapArmatureDuplicateMoveOther", desktop.duplicateBone]); + assert.equal(desktop.after.activeBone, desktop.duplicateBone); + assert.deepEqual(desktop.after.bones.filter((bone) => bone.selected).map((bone) => bone.name), [desktop.duplicateBone]); + const desktopSource = desktop.after.bones[0]; + const desktopOther = desktop.after.bones[1]; + const desktopDuplicate = desktop.after.bones[2]; + assert.deepEqual(desktopSource.head, [0, 0, 0]); + assert.deepEqual(desktopSource.tail, [0, 1, 0]); + assert.deepEqual(desktopDuplicate.head, [1, 2, 3]); + assert.deepEqual(desktopDuplicate.tail, [1, 3, 3]); + assert.equal(desktopDuplicate.parent, null); + assert.equal(desktopDuplicate.connected, false); + assert.deepEqual(desktopOther, { name: "WebGapArmatureDuplicateMoveOther", selected: false, selectHead: false, selectTail: false, parent: null, connected: false, head: [2, 0, 0], tail: [2, 1, 0] }); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureDuplicateMoveArmature"); + assert.ok(armature); + assert.deepEqual(armature.bones?.map((bone) => bone.name), desktop.after.bones.map((bone) => bone.name)); + const source = armature.bones?.find((bone) => bone.name === desktop.sourceBone); + const other = armature.bones?.find((bone) => bone.name === "WebGapArmatureDuplicateMoveOther"); + const duplicate = armature.bones?.find((bone) => bone.name === desktop.duplicateBone); + assert.ok(source && other && duplicate); + assert.equal(source.selected, false); + assert.equal(other.selected, false); + assert.equal(duplicate.selected, true); + assert.equal(source.parentId, null); + assert.equal(other.parentId, null); + assert.equal(duplicate.parentId, null); + assert.deepEqual(source.head, desktopSource.head); + assert.deepEqual(source.tail, desktopSource.tail); + assert.deepEqual(duplicate.head, desktopDuplicate.head); + assert.deepEqual(duplicate.tail, desktopDuplicate.tail); + assert.deepEqual(other.head, desktopOther.head); + assert.deepEqual(other.tail, desktopOther.tail); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_DUPLICATE_MOVE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, sourceBone: desktop.sourceBone, duplicateBone: desktop.duplicateBone, translation: desktop.translation }, wasm: { status: "EXACT", armatureId: armature.id, sourceBoneId: source.id, duplicateBoneId: duplicate.id, otherBoneId: other.id, duplicateSelected: duplicate.selected, translation: [duplicate.head[0] - source.head[0], duplicate.head[1] - source.head[1], duplicate.head[2] - source.head[2]], geometryMatch: duplicate.head.join(",") === "1,2,3" && duplicate.tail.join(",") === "1,3,3" }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00238" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00237/armature-duplicate-move-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} duplicate=${desktop.duplicateBone} translation=1,2,3 desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00238") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00238-operator-armature.duplicate_rename.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00238/armature-duplicate-rename-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-duplicate-rename-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.ok([true, false].includes(desktop.poll)); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + assert.equal(desktop.sourceBone, "WebGapArmatureDuplicateRenameSource"); + assert.equal(desktop.duplicateBone, "WebGapArmatureDuplicateRenameCopy"); + assert.equal(desktop.search, "Source"); + assert.equal(desktop.replace, "Copy"); + assert.deepEqual(desktop.after.bones.map((bone) => bone.name), [desktop.sourceBone, "WebGapArmatureDuplicateRenameOther", desktop.duplicateBone]); + assert.equal(desktop.after.activeBone, desktop.duplicateBone); + assert.deepEqual(desktop.after.bones.filter((bone) => bone.selected).map((bone) => bone.name), [desktop.duplicateBone]); + const desktopSource = desktop.after.bones[0]; + const desktopOther = desktop.after.bones[1]; + const desktopDuplicate = desktop.after.bones[2]; + assert.deepEqual(desktopDuplicate.head, desktopSource.head); + assert.deepEqual(desktopDuplicate.tail, desktopSource.tail); + assert.equal(desktopDuplicate.parent, null); + assert.equal(desktopDuplicate.connected, false); + assert.deepEqual(desktopOther, { name: "WebGapArmatureDuplicateRenameOther", selected: false, selectHead: false, selectTail: false, parent: null, connected: false, head: [2, 0, 0], tail: [2, 1, 0] }); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureDuplicateRenameArmature"); + assert.ok(armature); + assert.deepEqual(armature.bones?.map((bone) => bone.name), desktop.after.bones.map((bone) => bone.name)); + const source = armature.bones?.find((bone) => bone.name === desktop.sourceBone); + const other = armature.bones?.find((bone) => bone.name === "WebGapArmatureDuplicateRenameOther"); + const duplicate = armature.bones?.find((bone) => bone.name === desktop.duplicateBone); + assert.ok(source && other && duplicate); + assert.equal(source.selected, false); + assert.equal(other.selected, false); + assert.equal(duplicate.selected, true); + assert.equal(source.parentId, null); + assert.equal(other.parentId, null); + assert.equal(duplicate.parentId, null); + assert.deepEqual(source.head, desktopSource.head); + assert.deepEqual(source.tail, desktopSource.tail); + assert.deepEqual(duplicate.head, desktopDuplicate.head); + assert.deepEqual(duplicate.tail, desktopDuplicate.tail); + assert.deepEqual(other.head, desktopOther.head); + assert.deepEqual(other.tail, desktopOther.tail); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_DUPLICATE_RENAME_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, sourceBone: desktop.sourceBone, duplicateBone: desktop.duplicateBone, search: desktop.search, replace: desktop.replace }, wasm: { status: "EXACT", armatureId: armature.id, sourceBoneId: source.id, duplicateBoneId: duplicate.id, otherBoneId: other.id, duplicateSelected: duplicate.selected, renamedName: duplicate.name, geometryMatch: source.head.join(",") === duplicate.head.join(",") && source.tail.join(",") === duplicate.tail.join(",") }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00239" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00238/armature-duplicate-rename-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} duplicate=${desktop.duplicateBone} rename=Source->Copy desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00239") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00239-operator-armature.extrude.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00239/armature-extrude-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-extrude-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.ok([true, false].includes(desktop.poll)); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + assert.equal(desktop.sourceBone, "WebGapArmatureExtrudeSource"); + assert.equal(desktop.extrudeBone, "WebGapArmatureExtrudeSource.001"); + assert.deepEqual(desktop.translation, [0, 1, 0]); + assert.deepEqual([...desktop.after.bones.map((bone) => bone.name)].sort(), [desktop.sourceBone, desktop.extrudeBone, "WebGapArmatureExtrudeOther"].sort()); + assert.equal(desktop.after.activeBone, desktop.extrudeBone); + assert.deepEqual(desktop.after.bones.filter((bone) => bone.selected).map((bone) => bone.name), [desktop.extrudeBone]); + const desktopSource = desktop.after.bones.find((bone) => bone.name === desktop.sourceBone); + const desktopExtrude = desktop.after.bones.find((bone) => bone.name === desktop.extrudeBone); + const desktopOther = desktop.after.bones.find((bone) => bone.name === "WebGapArmatureExtrudeOther"); + assert.deepEqual(desktopExtrude.head, [0, 1, 0]); + assert.deepEqual(desktopExtrude.tail, [0, 2, 0]); + assert.equal(desktopExtrude.parent, desktop.sourceBone); + assert.equal(desktopExtrude.connected, true); + assert.deepEqual(desktopOther, { name: "WebGapArmatureExtrudeOther", selected: false, selectHead: false, selectTail: false, parent: null, connected: false, head: [2, 0, 0], tail: [2, 1, 0] }); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureExtrudeArmature"); + assert.ok(armature); + assert.deepEqual([...armature.bones?.map((bone) => bone.name)].sort(), [...desktop.after.bones.map((bone) => bone.name)].sort()); + const source = armature.bones?.find((bone) => bone.name === desktop.sourceBone); + const other = armature.bones?.find((bone) => bone.name === "WebGapArmatureExtrudeOther"); + const extrude = armature.bones?.find((bone) => bone.name === desktop.extrudeBone); + assert.ok(source && other && extrude); + assert.equal(source.selected, false); + assert.equal(other.selected, false); + assert.equal(extrude.selected, true); + assert.equal(source.parentId, null); + assert.equal(other.parentId, null); + assert.equal(extrude.parentId, source.id); + assert.deepEqual(source.head, desktopSource.head); + assert.deepEqual(source.tail, desktopSource.tail); + const desktopParentTail = desktopSource.tail; + assert.deepEqual(extrude.head, desktopExtrude.head.map((value, index) => value - desktopParentTail[index])); + assert.deepEqual(extrude.tail, desktopExtrude.tail.map((value, index) => value - desktopParentTail[index])); + assert.deepEqual(other.head, desktopOther.head); + assert.deepEqual(other.tail, desktopOther.tail); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_EXTRUDE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, sourceBone: desktop.sourceBone, extrudeBone: desktop.extrudeBone, translation: desktop.translation }, wasm: { status: "EXACT", armatureId: armature.id, sourceBoneId: source.id, extrudeBoneId: extrude.id, otherBoneId: other.id, extrudeSelected: extrude.selected, parentId: extrude.parentId, geometry: { head: extrude.head, tail: extrude.tail } }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00240" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00239/armature-extrude-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} extrude=${desktop.extrudeBone} translation=0,1,0 desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00240") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00240-operator-armature.extrude_forked.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00240/armature-extrude-forked-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-extrude-forked-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.forked, true); + assert.ok([true, false].includes(desktop.poll)); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + assert.equal(desktop.sourceBone, "WebGapArmatureExtrudeForkedSource"); + assert.equal(desktop.forkedBone, "WebGapArmatureExtrudeForkedSource.001"); + assert.deepEqual(desktop.translation, [0, 1, 0]); + assert.deepEqual([...desktop.after.bones.map((bone) => bone.name)].sort(), [desktop.sourceBone, desktop.forkedBone, "WebGapArmatureExtrudeForkedOther"].sort()); + assert.equal(desktop.after.activeBone, desktop.forkedBone); + assert.deepEqual(desktop.after.bones.filter((bone) => bone.selected).map((bone) => bone.name), [desktop.forkedBone]); + const desktopSource = desktop.after.bones.find((bone) => bone.name === desktop.sourceBone); + const desktopForked = desktop.after.bones.find((bone) => bone.name === desktop.forkedBone); + const desktopOther = desktop.after.bones.find((bone) => bone.name === "WebGapArmatureExtrudeForkedOther"); + assert.deepEqual(desktopForked.head, [0, 1, 0]); + assert.deepEqual(desktopForked.tail, [0, 2, 0]); + assert.equal(desktopForked.parent, desktop.sourceBone); + assert.equal(desktopForked.connected, false); + assert.deepEqual(desktopOther, { name: "WebGapArmatureExtrudeForkedOther", selected: false, selectHead: false, selectTail: false, parent: null, connected: false, head: [2, 0, 0], tail: [2, 1, 0] }); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureExtrudeForkedArmature"); + assert.ok(armature); + assert.deepEqual([...armature.bones?.map((bone) => bone.name)].sort(), [...desktop.after.bones.map((bone) => bone.name)].sort()); + const source = armature.bones?.find((bone) => bone.name === desktop.sourceBone); + const other = armature.bones?.find((bone) => bone.name === "WebGapArmatureExtrudeForkedOther"); + const forked = armature.bones?.find((bone) => bone.name === desktop.forkedBone); + assert.ok(source && other && forked); + assert.equal(source.selected, false); + assert.equal(other.selected, false); + assert.equal(forked.selected, true); + assert.equal(source.parentId, null); + assert.equal(other.parentId, null); + assert.equal(forked.parentId, source.id); + assert.deepEqual(source.head, desktopSource.head); + assert.deepEqual(source.tail, desktopSource.tail); + const desktopParentTail = desktopSource.tail; + assert.deepEqual(forked.head, desktopForked.head.map((value, index) => value - desktopParentTail[index])); + assert.deepEqual(forked.tail, desktopForked.tail.map((value, index) => value - desktopParentTail[index])); + assert.deepEqual(other.head, desktopOther.head); + assert.deepEqual(other.tail, desktopOther.tail); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_EXTRUDE_FORKED_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, forked: desktop.forked, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, sourceBone: desktop.sourceBone, forkedBone: desktop.forkedBone, translation: desktop.translation }, wasm: { status: "EXACT", armatureId: armature.id, sourceBoneId: source.id, forkedBoneId: forked.id, otherBoneId: other.id, forkedSelected: forked.selected, parentId: forked.parentId, connected: false, geometry: { head: forked.head, tail: forked.tail } }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00241" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00240/armature-extrude-forked-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} forked=${desktop.forkedBone} connected=false desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00241") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00241-operator-armature.extrude_move.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00241/armature-extrude-move-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-extrude-move-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.ok([true, false].includes(desktop.poll)); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + assert.equal(desktop.sourceBone, "WebGapArmatureExtrudeMoveSource"); + assert.equal(desktop.extrudeBone, "WebGapArmatureExtrudeMoveSource.001"); + assert.deepEqual(desktop.translation, [0, 1, 0]); + assert.deepEqual([...desktop.after.bones.map((bone) => bone.name)].sort(), [desktop.sourceBone, desktop.extrudeBone, "WebGapArmatureExtrudeMoveOther"].sort()); + assert.equal(desktop.after.activeBone, desktop.extrudeBone); + assert.deepEqual(desktop.after.bones.filter((bone) => bone.selected).map((bone) => bone.name), [desktop.extrudeBone]); + const desktopSource = desktop.after.bones.find((bone) => bone.name === desktop.sourceBone); + const desktopExtrude = desktop.after.bones.find((bone) => bone.name === desktop.extrudeBone); + const desktopOther = desktop.after.bones.find((bone) => bone.name === "WebGapArmatureExtrudeMoveOther"); + assert.deepEqual(desktopExtrude.head, [0, 1, 0]); + assert.deepEqual(desktopExtrude.tail, [0, 2, 0]); + assert.equal(desktopExtrude.parent, desktop.sourceBone); + assert.equal(desktopExtrude.connected, true); + assert.deepEqual(desktopOther, { name: "WebGapArmatureExtrudeMoveOther", selected: false, selectHead: false, selectTail: false, parent: null, connected: false, head: [2, 0, 0], tail: [2, 1, 0] }); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureExtrudeMoveArmature"); + assert.ok(armature); + assert.deepEqual([...armature.bones?.map((bone) => bone.name)].sort(), [...desktop.after.bones.map((bone) => bone.name)].sort()); + const source = armature.bones?.find((bone) => bone.name === desktop.sourceBone); + const other = armature.bones?.find((bone) => bone.name === "WebGapArmatureExtrudeMoveOther"); + const extrude = armature.bones?.find((bone) => bone.name === desktop.extrudeBone); + assert.ok(source && other && extrude); + assert.equal(source.selected, false); + assert.equal(other.selected, false); + assert.equal(extrude.selected, true); + assert.equal(source.parentId, null); + assert.equal(other.parentId, null); + assert.equal(extrude.parentId, source.id); + assert.deepEqual(source.head, desktopSource.head); + assert.deepEqual(source.tail, desktopSource.tail); + const desktopParentTail = desktopSource.tail; + assert.deepEqual(extrude.head, desktopExtrude.head.map((value, index) => value - desktopParentTail[index])); + assert.deepEqual(extrude.tail, desktopExtrude.tail.map((value, index) => value - desktopParentTail[index])); + assert.deepEqual(other.head, desktopOther.head); + assert.deepEqual(other.tail, desktopOther.tail); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_EXTRUDE_MOVE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, sourceBone: desktop.sourceBone, extrudeBone: desktop.extrudeBone, translation: desktop.translation }, wasm: { status: "EXACT", armatureId: armature.id, sourceBoneId: source.id, extrudeBoneId: extrude.id, otherBoneId: other.id, extrudeSelected: extrude.selected, parentId: extrude.parentId, connected: true, geometry: { head: extrude.head, tail: extrude.tail } }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00242" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00241/armature-extrude-move-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} extrude=${desktop.extrudeBone} translation=0,1,0 desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00242") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00242-operator-armature.fill.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00242/armature-fill-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-fill-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.ok([true, false].includes(desktop.poll)); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + assert.equal(desktop.sourceBone, "WebGapArmatureFillSource"); + assert.equal(desktop.targetBone, "WebGapArmatureFillTarget"); + assert.equal(desktop.bridgeBone, "WebGapArmatureFillBridge"); + assert.deepEqual([...desktop.after.bones.map((bone) => bone.name)].sort(), [desktop.sourceBone, desktop.targetBone, desktop.bridgeBone, "WebGapArmatureFillOther"].sort()); + assert.equal(desktop.after.activeBone, desktop.bridgeBone); + assert.deepEqual(desktop.after.bones.filter((bone) => bone.selected).map((bone) => bone.name), [desktop.bridgeBone]); + const desktopSource = desktop.after.bones.find((bone) => bone.name === desktop.sourceBone); + const desktopTarget = desktop.after.bones.find((bone) => bone.name === desktop.targetBone); + const desktopBridge = desktop.after.bones.find((bone) => bone.name === desktop.bridgeBone); + const desktopOther = desktop.after.bones.find((bone) => bone.name === "WebGapArmatureFillOther"); + assert.deepEqual(desktopBridge.head, [0, 1, 0]); + assert.deepEqual(desktopBridge.tail, [0, 2, 0]); + assert.equal(desktopBridge.parent, desktop.sourceBone); + assert.equal(desktopBridge.connected, true); + assert.deepEqual(desktopTarget.head, [0, 2, 0]); + assert.deepEqual(desktopTarget.tail, [0, 3, 0]); + assert.deepEqual(desktopOther, { name: "WebGapArmatureFillOther", selected: false, selectHead: false, selectTail: false, parent: null, connected: false, head: [2, 0, 0], tail: [2, 1, 0] }); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureFillArmature"); + assert.ok(armature); + assert.deepEqual([...armature.bones?.map((bone) => bone.name)].sort(), [...desktop.after.bones.map((bone) => bone.name)].sort()); + const source = armature.bones?.find((bone) => bone.name === desktop.sourceBone); + const target = armature.bones?.find((bone) => bone.name === desktop.targetBone); + const bridge = armature.bones?.find((bone) => bone.name === desktop.bridgeBone); + const other = armature.bones?.find((bone) => bone.name === "WebGapArmatureFillOther"); + assert.ok(source && target && bridge && other); + assert.equal(source.selected, false); + assert.equal(target.selected, false); + assert.equal(bridge.selected, true); + assert.equal(other.selected, false); + assert.equal(source.parentId, null); + assert.equal(target.parentId, null); + assert.equal(bridge.parentId, source.id); + assert.deepEqual(source.head, desktopSource.head); + assert.deepEqual(source.tail, desktopSource.tail); + const desktopParentTail = desktopSource.tail; + assert.deepEqual(bridge.head, desktopBridge.head.map((value, index) => value - desktopParentTail[index])); + assert.deepEqual(bridge.tail, desktopBridge.tail.map((value, index) => value - desktopParentTail[index])); + assert.deepEqual(target.head, desktopTarget.head); + assert.deepEqual(target.tail, desktopTarget.tail); + assert.deepEqual(other.head, desktopOther.head); + assert.deepEqual(other.tail, desktopOther.tail); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_FILL_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, sourceBone: desktop.sourceBone, targetBone: desktop.targetBone, bridgeBone: desktop.bridgeBone }, wasm: { status: "EXACT", armatureId: armature.id, sourceBoneId: source.id, targetBoneId: target.id, bridgeBoneId: bridge.id, otherBoneId: other.id, bridgeSelected: bridge.selected, parentId: bridge.parentId, connected: true, geometry: { head: bridge.head, tail: bridge.tail } }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00243" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00242/armature-fill-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} bridge=${desktop.bridgeBone} endpoints=source-tail,target-head desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00243") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00243-operator-armature.flip_names.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00243/armature-flip-names-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-flip-names-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.doStripNumbers, false); + assert.ok([true, false].includes(desktop.poll)); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + assert.equal(desktop.leftGeometryBone, "WebGapArmatureFlipBone.R"); + assert.equal(desktop.rightGeometryBone, "WebGapArmatureFlipBone.L"); + const desktopLeft = desktop.after.bones.find((bone) => bone.head[0] === -1); + const desktopRight = desktop.after.bones.find((bone) => bone.head[0] === 1); + const desktopOther = desktop.after.bones.find((bone) => bone.name === "WebGapArmatureFlipOther"); + assert.equal(desktopLeft.name, desktop.leftGeometryBone); + assert.equal(desktopRight.name, desktop.rightGeometryBone); + assert.deepEqual(desktopLeft.head, [-1, 0, 0]); + assert.deepEqual(desktopLeft.tail, [-1, 1, 0]); + assert.deepEqual(desktopRight.head, [1, 0, 0]); + assert.deepEqual(desktopRight.tail, [1, 1, 0]); + assert.deepEqual(desktopOther, { name: "WebGapArmatureFlipOther", selected: false, selectHead: false, selectTail: false, parent: null, connected: false, head: [0, 0, 2], tail: [0, 1, 2] }); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureFlipNamesArmature"); + assert.ok(armature); + const left = armature.bones?.find((bone) => bone.head[0] === -1); + const right = armature.bones?.find((bone) => bone.head[0] === 1); + const other = armature.bones?.find((bone) => bone.name === "WebGapArmatureFlipOther"); + assert.ok(left && right && other); + assert.equal(left.name, desktop.leftGeometryBone); + assert.equal(right.name, desktop.rightGeometryBone); + assert.equal(left.selected, true); + assert.equal(right.selected, true); + assert.equal(other.selected, false); + assert.deepEqual(left.head, desktopLeft.head); + assert.deepEqual(left.tail, desktopLeft.tail); + assert.deepEqual(right.head, desktopRight.head); + assert.deepEqual(right.tail, desktopRight.tail); + assert.deepEqual(other.head, desktopOther.head); + assert.deepEqual(other.tail, desktopOther.tail); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_FLIP_NAMES_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, leftGeometryBone: desktop.leftGeometryBone, rightGeometryBone: desktop.rightGeometryBone, doStripNumbers: desktop.doStripNumbers }, wasm: { status: "EXACT", armatureId: armature.id, leftBoneId: left.id, rightBoneId: right.id, otherBoneId: other.id, leftName: left.name, rightName: right.name, geometryNamesFlipped: left.name === "WebGapArmatureFlipBone.R" && right.name === "WebGapArmatureFlipBone.L" }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00244" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00243/armature-flip-names-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} left=${left.name} right=${right.name} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00244") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00244-operator-armature.hide.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00244/armature-hide-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-hide-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.unselected, false); + assert.ok([true, false].includes(desktop.poll)); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + assert.equal(desktop.hiddenBone, "WebGapArmatureHideSelected"); + const desktopHidden = desktop.after.bones.find((bone) => bone.name === desktop.hiddenBone); + const desktopOther = desktop.after.bones.find((bone) => bone.name === "WebGapArmatureHideOther"); + assert.deepEqual(desktopHidden, { name: desktop.hiddenBone, selected: false, hidden: true, selectHead: false, selectTail: false, parent: null, connected: false, head: [-1, 0, 0], tail: [-1, 1, 0] }); + assert.deepEqual(desktopOther, { name: "WebGapArmatureHideOther", selected: false, hidden: false, selectHead: false, selectTail: false, parent: null, connected: false, head: [1, 0, 0], tail: [1, 1, 0] }); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureHideArmature"); + assert.ok(armature); + const hidden = armature.bones?.find((bone) => bone.name === desktop.hiddenBone); + const other = armature.bones?.find((bone) => bone.name === "WebGapArmatureHideOther"); + assert.ok(hidden && other); + assert.equal(hidden.hidden, true); + assert.equal(hidden.selected, false); + assert.equal(other.hidden, false); + assert.equal(other.selected, false); + assert.deepEqual(hidden.head, desktopHidden.head); + assert.deepEqual(hidden.tail, desktopHidden.tail); + assert.deepEqual(other.head, desktopOther.head); + assert.deepEqual(other.tail, desktopOther.tail); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_HIDE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, hiddenBone: desktop.hiddenBone, unselected: desktop.unselected }, wasm: { status: "EXACT", armatureId: armature.id, hiddenBoneId: hidden.id, otherBoneId: other.id, hidden: hidden.hidden, selectedAfterHide: hidden.selected, otherHidden: other.hidden }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00245" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00244/armature-hide-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} hidden=${hidden.name} hiddenFlag=${hidden.hidden} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00245") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00245-operator-armature.move_to_collection.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00245/armature-move-to-collection-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-move-to-collection-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.collectionIndex, 1); + assert.ok([true, false].includes(desktop.poll)); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + assert.equal(desktop.movedBone, "WebGapArmatureMoveCollectionSelected"); + assert.equal(desktop.sourceCollection, "WebGapArmatureMoveCollectionSource"); + assert.equal(desktop.targetCollection, "WebGapArmatureMoveCollectionTarget"); + const desktopMove = desktop.after.bones.find((bone) => bone.name === desktop.movedBone); + const desktopOther = desktop.after.bones.find((bone) => bone.name === "WebGapArmatureMoveCollectionOther"); + assert.deepEqual(desktopMove.collections, [desktop.targetCollection]); + assert.deepEqual(desktopOther.collections, [desktop.sourceCollection]); + assert.equal(desktopMove.selected, true); + assert.equal(desktopOther.selected, false); + assert.deepEqual(desktopMove.head, [-1, 0, 0]); + assert.deepEqual(desktopMove.tail, [-1, 1, 0]); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureMoveCollectionArmature"); + assert.ok(armature); + const moved = armature.bones?.find((bone) => bone.name === desktop.movedBone); + const other = armature.bones?.find((bone) => bone.name === "WebGapArmatureMoveCollectionOther"); + assert.ok(moved && other); + const sourceCollection = armature.boneCollections?.find((collection) => collection.name === desktop.sourceCollection); + const targetCollection = armature.boneCollections?.find((collection) => collection.name === desktop.targetCollection); + assert.ok(sourceCollection && targetCollection); + assert.deepEqual(sourceCollection.boneIds, [other.id]); + assert.deepEqual(targetCollection.boneIds, [moved.id]); + assert.equal(moved.selected, true); + assert.equal(other.selected, false); + assert.deepEqual(moved.head, desktopMove.head); + assert.deepEqual(moved.tail, desktopMove.tail); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_MOVE_TO_COLLECTION_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, movedBone: desktop.movedBone, sourceCollection: desktop.sourceCollection, targetCollection: desktop.targetCollection }, wasm: { status: "EXACT", armatureId: armature.id, movedBoneId: moved.id, otherBoneId: other.id, sourceCollectionId: sourceCollection.id, targetCollectionId: targetCollection.id, sourceMembers: sourceCollection.boneIds, targetMembers: targetCollection.boneIds }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00246" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00245/armature-move-to-collection-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} moved=${moved.name} target=${targetCollection.name} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00246") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00246-operator-armature.parent_clear.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00246/armature-parent-clear-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-parent-clear-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.clearType, "CLEAR"); + assert.ok([true, false].includes(desktop.poll)); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + assert.equal(desktop.parentBone, "WebGapArmatureParentClearParent"); + assert.equal(desktop.childBone, "WebGapArmatureParentClearChild"); + const desktopParent = desktop.after.bones.find((bone) => bone.name === desktop.parentBone); + const desktopChild = desktop.after.bones.find((bone) => bone.name === desktop.childBone); + const desktopOther = desktop.after.bones.find((bone) => bone.name === "WebGapArmatureParentClearOther"); + assert.equal(desktopChild.parent, null); + assert.equal(desktopChild.connected, false); + assert.equal(desktopChild.selected, true); + assert.equal(desktopParent.parent, null); + assert.equal(desktopOther.parent, null); + assert.deepEqual(desktopChild.head, [0, 1, 0]); + assert.deepEqual(desktopChild.tail, [0, 2, 0]); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureParentClearArmature"); + assert.ok(armature); + const parent = armature.bones?.find((bone) => bone.name === desktop.parentBone); + const child = armature.bones?.find((bone) => bone.name === desktop.childBone); + const other = armature.bones?.find((bone) => bone.name === "WebGapArmatureParentClearOther"); + assert.ok(parent && child && other); + assert.equal(child.parentId, null); + assert.equal(child.selected, true); + assert.equal(parent.parentId, null); + assert.equal(other.parentId, null); + assert.deepEqual(child.head, desktopChild.head); + assert.deepEqual(child.tail, desktopChild.tail); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_PARENT_CLEAR_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, parentBone: desktop.parentBone, childBone: desktop.childBone, clearType: desktop.clearType }, wasm: { status: "EXACT", armatureId: armature.id, parentBoneId: parent.id, childBoneId: child.id, otherBoneId: other.id, childParentId: child.parentId, childSelected: child.selected }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00247" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00246/armature-parent-clear-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} child=${child.name} parentId=${child.parentId} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00247") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00247-operator-armature.parent_set.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00247/armature-parent-set-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-parent-set-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.setType, "CONNECTED"); + assert.ok([true, false].includes(desktop.poll)); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + assert.equal(desktop.parentBone, "WebGapArmatureParentSetParent"); + assert.equal(desktop.childBone, "WebGapArmatureParentSetChild"); + const desktopParent = desktop.after.bones.find((bone) => bone.name === desktop.parentBone); + const desktopChild = desktop.after.bones.find((bone) => bone.name === desktop.childBone); + const desktopOther = desktop.after.bones.find((bone) => bone.name === "WebGapArmatureParentSetOther"); + assert.equal(desktopChild.parent, desktop.parentBone); + assert.equal(desktopChild.connected, true); + assert.equal(desktopChild.selected, true); + assert.equal(desktopParent.parent, null); + assert.equal(desktopOther.parent, null); + assert.deepEqual(desktopChild.head, [0, 1, 0]); + assert.deepEqual(desktopChild.tail, [0, 2, 0]); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureParentSetArmature"); + assert.ok(armature); + const parent = armature.bones?.find((bone) => bone.name === desktop.parentBone); + const child = armature.bones?.find((bone) => bone.name === desktop.childBone); + const other = armature.bones?.find((bone) => bone.name === "WebGapArmatureParentSetOther"); + assert.ok(parent && child && other); + assert.equal(child.parentId, parent.id); + assert.equal(child.connected, true); + assert.equal(child.selected, true); + assert.equal(parent.parentId, null); + assert.equal(other.parentId, null); + assert.deepEqual(child.head, desktopChild.head.map((value, index) => value - desktopParent.tail[index])); + assert.deepEqual(child.tail, desktopChild.tail.map((value, index) => value - desktopParent.tail[index])); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_PARENT_SET_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, parentBone: desktop.parentBone, childBone: desktop.childBone, setType: desktop.setType }, wasm: { status: "EXACT", armatureId: armature.id, parentBoneId: parent.id, childBoneId: child.id, otherBoneId: other.id, childParentId: child.parentId, childConnected: child.connected, childSelected: child.selected }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00248" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00247/armature-parent-set-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} child=${child.name} parentId=${child.parentId} connected=${child.connected} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00248") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00248-operator-armature.reveal.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00248/armature-reveal-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-reveal-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.select, true); + assert.ok([true, false].includes(desktop.poll)); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + assert.equal(desktop.revealedBone, "WebGapArmatureRevealHidden"); + const desktopRevealed = desktop.after.bones.find((bone) => bone.name === desktop.revealedBone); + const desktopOther = desktop.after.bones.find((bone) => bone.name === "WebGapArmatureRevealOther"); + assert.equal(desktopRevealed.hidden, false); + assert.equal(desktopRevealed.selected, true); + assert.equal(desktopOther.hidden, false); + assert.equal(desktopOther.selected, false); + assert.deepEqual(desktopRevealed.head, [-1, 0, 0]); + assert.deepEqual(desktopRevealed.tail, [-1, 1, 0]); + assert.deepEqual(desktopOther.head, [1, 0, 0]); + assert.deepEqual(desktopOther.tail, [1, 1, 0]); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureRevealArmature"); + assert.ok(armature); + const revealed = armature.bones?.find((bone) => bone.name === desktop.revealedBone); + const other = armature.bones?.find((bone) => bone.name === "WebGapArmatureRevealOther"); + assert.ok(revealed && other); + assert.equal(revealed.hidden, false); + assert.equal(revealed.selected, true); + assert.equal(other.hidden, false); + assert.equal(other.selected, false); + assert.deepEqual(revealed.head, desktopRevealed.head); + assert.deepEqual(revealed.tail, desktopRevealed.tail); + assert.deepEqual(other.head, desktopOther.head); + assert.deepEqual(other.tail, desktopOther.tail); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_REVEAL_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, revealedBone: desktop.revealedBone, select: desktop.select }, wasm: { status: "EXACT", armatureId: armature.id, revealedBoneId: revealed.id, otherBoneId: other.id, revealedHidden: revealed.hidden, revealedSelected: revealed.selected, otherHidden: other.hidden }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00249" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00248/armature-reveal-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} revealed=${revealed.name} hidden=${revealed.hidden} selected=${revealed.selected} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00249") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00249-operator-armature.roll_clear.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00249/armature-roll-clear-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-roll-clear-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.ok([true, false].includes(desktop.poll)); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + assert.equal(desktop.bone, "WebGapArmatureRollClearBone"); + assert.equal(desktop.roll, 0); + const desktopBone = desktop.after.bones.find((bone) => bone.name === desktop.bone); + assert.ok(desktopBone); + assert.deepEqual(desktopBone.head, [0, 0, 0]); + assert.deepEqual(desktopBone.tail, [0, 2, 0]); + assert.equal(desktopBone.selected, true); + assert.equal(desktopBone.hidden, false); + const expectedMatrix = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]; + desktopBone.matrix.forEach((value, index) => assert.ok(Math.abs(value - expectedMatrix[index]) < 1e-5, `desktop matrix[${index}] ${value} != ${expectedMatrix[index]}`)); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureRollClearArmature"); + assert.ok(armature); + assert.equal(armature.bones?.length, 1); + const bone = armature.bones[0]; + assert.equal(bone.name, desktop.bone); + assert.equal(bone.hidden, false); + assert.equal(bone.selected, true); + assert.deepEqual(bone.head, desktopBone.head); + assert.deepEqual(bone.tail, desktopBone.tail); + bone.restMatrix.forEach((value, index) => assert.ok(Math.abs(value - expectedMatrix[index]) < 1e-5, `WASM restMatrix[${index}] ${value} != ${expectedMatrix[index]}`)); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_ROLL_CLEAR_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, bone: desktop.bone, roll: desktop.roll }, wasm: { status: "EXACT", armatureId: armature.id, boneId: bone.id, boneName: bone.name, hidden: bone.hidden, selected: bone.selected, restMatrix: bone.restMatrix }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00250" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00249/armature-roll-clear-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} bone=${bone.name} roll=${desktop.roll} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00250") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00250-operator-armature.select_all.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00250/armature-select-all-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-select-all-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.action, "SELECT"); + assert.ok([true, false].includes(desktop.poll)); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + assert.deepEqual(desktop.selectedBones, ["WebGapArmatureSelectAllParent", "WebGapArmatureSelectAllOther"]); + for (const bone of desktop.after.bones) { + assert.equal(bone.selected, true); + assert.equal(bone.selectHead, true); + assert.equal(bone.selectTail, true); + assert.equal(bone.hidden, false); + } + const desktopParent = desktop.after.bones.find((bone) => bone.name === "WebGapArmatureSelectAllParent"); + const desktopOther = desktop.after.bones.find((bone) => bone.name === "WebGapArmatureSelectAllOther"); + assert.deepEqual(desktopParent.head, [0, 0, 0]); + assert.deepEqual(desktopParent.tail, [0, 1, 0]); + assert.deepEqual(desktopOther.head, [2, 0, 0]); + assert.deepEqual(desktopOther.tail, [2, 1, 0]); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureSelectAllArmature"); + assert.ok(armature); + assert.equal(armature.bones?.length, 2); + const parent = armature.bones?.find((bone) => bone.name === "WebGapArmatureSelectAllParent"); + const other = armature.bones?.find((bone) => bone.name === "WebGapArmatureSelectAllOther"); + assert.ok(parent && other); + assert.equal(parent.selected, true); + assert.equal(other.selected, true); + assert.equal(parent.hidden, false); + assert.equal(other.hidden, false); + assert.deepEqual(parent.head, desktopParent.head); + assert.deepEqual(parent.tail, desktopParent.tail); + assert.deepEqual(other.head, desktopOther.head); + assert.deepEqual(other.tail, desktopOther.tail); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_SELECT_ALL_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, selectedBones: desktop.selectedBones, action: desktop.action }, wasm: { status: "EXACT", armatureId: armature.id, parentBoneId: parent.id, otherBoneId: other.id, parentSelected: parent.selected, otherSelected: other.selected, parentHead: parent.head, parentTail: parent.tail, otherHead: other.head, otherTail: other.tail }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00251" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00250/armature-select-all-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} selected=2 desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00251") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00251-operator-armature.select_hierarchy.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00251/armature-select-hierarchy-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-select-hierarchy-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.direction, "CHILD"); + assert.equal(desktop.extend, false); + assert.ok([true, false].includes(desktop.poll)); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + assert.ok(["WebGapArmatureSelectHierarchyRoot", "WebGapArmatureSelectHierarchyChild"].includes(desktop.activeBoneBefore)); + assert.equal(desktop.activeBoneAfter, "WebGapArmatureSelectHierarchyChild"); + const desktopBefore = Object.fromEntries(desktop.before.bones.map((bone) => [bone.name, bone])); + const desktopAfter = Object.fromEntries(desktop.after.bones.map((bone) => [bone.name, bone])); + if (desktop.operatorStatus === "FINISHED") { + assert.equal(desktopBefore.WebGapArmatureSelectHierarchyRoot.selected, true); + assert.equal(desktopBefore.WebGapArmatureSelectHierarchyChild.selected, false); + } else { + assert.equal(desktopBefore.WebGapArmatureSelectHierarchyRoot.selected, false); + assert.equal(desktopBefore.WebGapArmatureSelectHierarchyChild.selected, true); + } + assert.equal(desktopAfter.WebGapArmatureSelectHierarchyRoot.selected, false); + assert.equal(desktopAfter.WebGapArmatureSelectHierarchyChild.selected, true); + assert.equal(desktopAfter.WebGapArmatureSelectHierarchyOther.selected, false); + assert.equal(desktopAfter.WebGapArmatureSelectHierarchyChild.parent, "WebGapArmatureSelectHierarchyRoot"); + assert.equal(desktopAfter.WebGapArmatureSelectHierarchyChild.connected, true); + assert.deepEqual(desktopAfter.WebGapArmatureSelectHierarchyRoot.head, [0, 0, 0]); + assert.deepEqual(desktopAfter.WebGapArmatureSelectHierarchyRoot.tail, [0, 1, 0]); + assert.deepEqual(desktopAfter.WebGapArmatureSelectHierarchyChild.head, [0, 1, 0]); + assert.deepEqual(desktopAfter.WebGapArmatureSelectHierarchyChild.tail, [0, 2, 0]); + assert.deepEqual(desktopAfter.WebGapArmatureSelectHierarchyOther.head, [2, 0, 0]); + assert.deepEqual(desktopAfter.WebGapArmatureSelectHierarchyOther.tail, [2, 1, 0]); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureSelectHierarchyArmature"); + assert.ok(armature); + assert.equal(armature.bones?.length, 3); + const rootBone = armature.bones?.find((bone) => bone.name === "WebGapArmatureSelectHierarchyRoot"); + const childBone = armature.bones?.find((bone) => bone.name === "WebGapArmatureSelectHierarchyChild"); + const otherBone = armature.bones?.find((bone) => bone.name === "WebGapArmatureSelectHierarchyOther"); + assert.ok(rootBone && childBone && otherBone); + assert.equal(rootBone.selected, false); + assert.equal(childBone.selected, true); + assert.equal(otherBone.selected, false); + assert.equal(childBone.parentId, rootBone.id); + assert.equal(childBone.connected, true); + assert.equal(rootBone.hidden, false); + assert.equal(childBone.hidden, false); + assert.equal(otherBone.hidden, false); + assert.deepEqual(rootBone.head, desktopAfter.WebGapArmatureSelectHierarchyRoot.head); + assert.deepEqual(rootBone.tail, desktopAfter.WebGapArmatureSelectHierarchyRoot.tail); + assert.deepEqual(childBone.head, desktopAfter.WebGapArmatureSelectHierarchyChild.head); + assert.deepEqual(childBone.tail, desktopAfter.WebGapArmatureSelectHierarchyChild.tail); + assert.deepEqual(otherBone.head, desktopAfter.WebGapArmatureSelectHierarchyOther.head); + assert.deepEqual(otherBone.tail, desktopAfter.WebGapArmatureSelectHierarchyOther.tail); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_SELECT_HIERARCHY_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, direction: desktop.direction, extend: desktop.extend, activeBoneBefore: desktop.activeBoneBefore, activeBoneAfter: desktop.activeBoneAfter }, wasm: { status: "EXACT", armatureId: armature.id, rootBoneId: rootBone.id, childBoneId: childBone.id, otherBoneId: otherBone.id, rootSelected: rootBone.selected, childSelected: childBone.selected, otherSelected: otherBone.selected, childParentId: childBone.parentId, childConnected: childBone.connected, rootHead: rootBone.head, rootTail: rootBone.tail, childHead: childBone.head, childTail: childBone.tail, otherHead: otherBone.head, otherTail: otherBone.tail }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00252" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00251/armature-select-hierarchy-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} direction=child child=${childBone.name} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00252") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00252-operator-armature.select_less.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00252/armature-select-less-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-select-less-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.ok([true, false].includes(desktop.poll)); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + const desktopBefore = Object.fromEntries(desktop.before.bones.map((bone) => [bone.name, bone])); + const desktopAfter = Object.fromEntries(desktop.after.bones.map((bone) => [bone.name, bone])); + if (desktop.operatorStatus === "FINISHED") { + assert.equal(desktopBefore.WebGapArmatureSelectLessRoot.selected, false); + assert.equal(desktopBefore.WebGapArmatureSelectLessRoot.selectHead, true); + assert.equal(desktopBefore.WebGapArmatureSelectLessRoot.selectTail, false); + } else { + assert.equal(desktopBefore.WebGapArmatureSelectLessRoot.selected, false); + } + assert.equal(desktopAfter.WebGapArmatureSelectLessRoot.selected, false); + assert.equal(desktopAfter.WebGapArmatureSelectLessRoot.selectHead, false); + assert.equal(desktopAfter.WebGapArmatureSelectLessRoot.selectTail, false); + assert.equal(desktopAfter.WebGapArmatureSelectLessChild.selected, false); + assert.equal(desktopAfter.WebGapArmatureSelectLessOther.selected, true); + assert.equal(desktopAfter.WebGapArmatureSelectLessOther.selectHead, true); + assert.equal(desktopAfter.WebGapArmatureSelectLessOther.selectTail, true); + assert.equal(desktopAfter.WebGapArmatureSelectLessChild.parent, "WebGapArmatureSelectLessRoot"); + assert.equal(desktopAfter.WebGapArmatureSelectLessChild.connected, true); + assert.deepEqual(desktopAfter.WebGapArmatureSelectLessRoot.head, [0, 0, 0]); + assert.deepEqual(desktopAfter.WebGapArmatureSelectLessRoot.tail, [0, 1, 0]); + assert.deepEqual(desktopAfter.WebGapArmatureSelectLessChild.head, [0, 1, 0]); + assert.deepEqual(desktopAfter.WebGapArmatureSelectLessChild.tail, [0, 2, 0]); + assert.deepEqual(desktopAfter.WebGapArmatureSelectLessOther.head, [2, 0, 0]); + assert.deepEqual(desktopAfter.WebGapArmatureSelectLessOther.tail, [2, 1, 0]); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureSelectLessArmature"); + assert.ok(armature); + assert.equal(armature.bones?.length, 3); + const rootBone = armature.bones?.find((bone) => bone.name === "WebGapArmatureSelectLessRoot"); + const childBone = armature.bones?.find((bone) => bone.name === "WebGapArmatureSelectLessChild"); + const otherBone = armature.bones?.find((bone) => bone.name === "WebGapArmatureSelectLessOther"); + assert.ok(rootBone && childBone && otherBone); + assert.equal(rootBone.selected, false); + assert.equal(childBone.selected, false); + assert.equal(otherBone.selected, true); + assert.equal(childBone.parentId, rootBone.id); + assert.equal(childBone.connected, true); + assert.equal(rootBone.hidden, false); + assert.equal(childBone.hidden, false); + assert.equal(otherBone.hidden, false); + assert.deepEqual(rootBone.head, desktopAfter.WebGapArmatureSelectLessRoot.head); + assert.deepEqual(rootBone.tail, desktopAfter.WebGapArmatureSelectLessRoot.tail); + assert.deepEqual(childBone.head, desktopAfter.WebGapArmatureSelectLessChild.head); + assert.deepEqual(childBone.tail, desktopAfter.WebGapArmatureSelectLessChild.tail); + assert.deepEqual(otherBone.head, desktopAfter.WebGapArmatureSelectLessOther.head); + assert.deepEqual(otherBone.tail, desktopAfter.WebGapArmatureSelectLessOther.tail); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_SELECT_LESS_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, rootBone: desktop.rootBone, childBone: desktop.childBone, otherBone: desktop.otherBone }, wasm: { status: "EXACT", armatureId: armature.id, rootBoneId: rootBone.id, childBoneId: childBone.id, otherBoneId: otherBone.id, rootSelected: rootBone.selected, childSelected: childBone.selected, otherSelected: otherBone.selected, childParentId: childBone.parentId, childConnected: childBone.connected, rootHead: rootBone.head, rootTail: rootBone.tail, childHead: childBone.head, childTail: childBone.tail, otherHead: otherBone.head, otherTail: otherBone.tail }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00253" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00252/armature-select-less-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} root-selected=false other-selected=true desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00253") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00253-operator-armature.select_linked.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00253/armature-select-linked-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-select-linked-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.allForks, false); + assert.ok([true, false].includes(desktop.poll)); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + const desktopBefore = Object.fromEntries(desktop.before.bones.map((bone) => [bone.name, bone])); + const desktopAfter = Object.fromEntries(desktop.after.bones.map((bone) => [bone.name, bone])); + assert.equal(desktopAfter.WebGapArmatureSelectLinkedRoot.selected, true); + assert.equal(desktopAfter.WebGapArmatureSelectLinkedChild.selected, true); + assert.equal(desktopAfter.WebGapArmatureSelectLinkedGrandchild.selected, true); + assert.equal(desktopAfter.WebGapArmatureSelectLinkedOther.selected, false); + assert.equal(desktopAfter.WebGapArmatureSelectLinkedChild.parent, "WebGapArmatureSelectLinkedRoot"); + assert.equal(desktopAfter.WebGapArmatureSelectLinkedGrandchild.parent, "WebGapArmatureSelectLinkedChild"); + assert.equal(desktopAfter.WebGapArmatureSelectLinkedChild.connected, true); + assert.equal(desktopAfter.WebGapArmatureSelectLinkedGrandchild.connected, true); + for (const bone of Object.values(desktopAfter)) { + if (!bone || typeof bone !== "object" || !bone.name) continue; + assert.equal(bone.hidden, false); + } + assert.deepEqual(desktopAfter.WebGapArmatureSelectLinkedRoot.head, [0, 0, 0]); + assert.deepEqual(desktopAfter.WebGapArmatureSelectLinkedRoot.tail, [0, 1, 0]); + assert.deepEqual(desktopAfter.WebGapArmatureSelectLinkedChild.head, [0, 1, 0]); + assert.deepEqual(desktopAfter.WebGapArmatureSelectLinkedChild.tail, [0, 2, 0]); + assert.deepEqual(desktopAfter.WebGapArmatureSelectLinkedGrandchild.head, [0, 2, 0]); + assert.deepEqual(desktopAfter.WebGapArmatureSelectLinkedGrandchild.tail, [0, 3, 0]); + assert.deepEqual(desktopAfter.WebGapArmatureSelectLinkedOther.head, [2, 0, 0]); + assert.deepEqual(desktopAfter.WebGapArmatureSelectLinkedOther.tail, [2, 1, 0]); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureSelectLinkedArmature"); + assert.ok(armature); + assert.equal(armature.bones?.length, 4); + const rootBone = armature.bones?.find((bone) => bone.name === "WebGapArmatureSelectLinkedRoot"); + const childBone = armature.bones?.find((bone) => bone.name === "WebGapArmatureSelectLinkedChild"); + const grandchildBone = armature.bones?.find((bone) => bone.name === "WebGapArmatureSelectLinkedGrandchild"); + const otherBone = armature.bones?.find((bone) => bone.name === "WebGapArmatureSelectLinkedOther"); + assert.ok(rootBone && childBone && grandchildBone && otherBone); + assert.equal(rootBone.selected, true); + assert.equal(childBone.selected, true); + assert.equal(grandchildBone.selected, true); + assert.equal(otherBone.selected, false); + assert.equal(childBone.parentId, rootBone.id); + assert.equal(grandchildBone.parentId, childBone.id); + assert.equal(childBone.connected, true); + assert.equal(grandchildBone.connected, true); + for (const bone of [rootBone, childBone, grandchildBone, otherBone]) assert.equal(bone.hidden, false); + for (const [bone, expected] of [[rootBone, desktopAfter.WebGapArmatureSelectLinkedRoot], [childBone, desktopAfter.WebGapArmatureSelectLinkedChild], [grandchildBone, desktopAfter.WebGapArmatureSelectLinkedGrandchild], [otherBone, desktopAfter.WebGapArmatureSelectLinkedOther]]) { assert.deepEqual(bone.head, expected.head); assert.deepEqual(bone.tail, expected.tail); } + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_SELECT_LINKED_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, selectedChain: desktop.selectedChain, unselectedBone: desktop.unselectedBone, allForks: desktop.allForks }, wasm: { status: "EXACT", armatureId: armature.id, rootBoneId: rootBone.id, childBoneId: childBone.id, grandchildBoneId: grandchildBone.id, otherBoneId: otherBone.id, rootSelected: rootBone.selected, childSelected: childBone.selected, grandchildSelected: grandchildBone.selected, otherSelected: otherBone.selected, childParentId: childBone.parentId, grandchildParentId: grandchildBone.parentId }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00254" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00253/armature-select-linked-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} linked-chain=3 other-selected=false desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00254") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00254-operator-armature.select_linked_pick.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00254/armature-select-linked-pick-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-select-linked-pick-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); assert.equal(desktop.pickedBone, "WebGapArmatureSelectLinkedPickRoot"); assert.equal(desktop.deselect, false); assert.equal(desktop.allForks, false); assert.ok([true, false].includes(desktop.poll)); assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + const desktopAfter = Object.fromEntries(desktop.after.bones.map((bone) => [bone.name, bone])); + for (const name of ["WebGapArmatureSelectLinkedPickRoot", "WebGapArmatureSelectLinkedPickChild", "WebGapArmatureSelectLinkedPickGrandchild"]) assert.equal(desktopAfter[name].selected, true); + assert.equal(desktopAfter.WebGapArmatureSelectLinkedPickOther.selected, false); assert.equal(desktopAfter.WebGapArmatureSelectLinkedPickChild.parent, "WebGapArmatureSelectLinkedPickRoot"); assert.equal(desktopAfter.WebGapArmatureSelectLinkedPickGrandchild.parent, "WebGapArmatureSelectLinkedPickChild"); + const engine = await factory({ wasmBinary }); const handle = engine._web_engine_create(); open(engine, handle, fs.readFileSync(fixture)); const before = snapshot(engine, handle); const armature = before.armatures?.find((value) => value.name === "WebGapArmatureSelectLinkedPickArmature"); assert.ok(armature); assert.equal(armature.bones?.length, 4); + const rootBone = armature.bones?.find((bone) => bone.name === "WebGapArmatureSelectLinkedPickRoot"); const childBone = armature.bones?.find((bone) => bone.name === "WebGapArmatureSelectLinkedPickChild"); const grandchildBone = armature.bones?.find((bone) => bone.name === "WebGapArmatureSelectLinkedPickGrandchild"); const otherBone = armature.bones?.find((bone) => bone.name === "WebGapArmatureSelectLinkedPickOther"); assert.ok(rootBone && childBone && grandchildBone && otherBone); + assert.equal(rootBone.selected, true); assert.equal(childBone.selected, true); assert.equal(grandchildBone.selected, true); assert.equal(otherBone.selected, false); assert.equal(childBone.parentId, rootBone.id); assert.equal(grandchildBone.parentId, childBone.id); assert.equal(childBone.connected, true); assert.equal(grandchildBone.connected, true); + const saved = output(engine, handle, engine._web_engine_save_blend, true); const reopened = engine._web_engine_create(); open(engine, reopened, saved); assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); const pointer = engine._malloc(malformed.byteLength); let result; try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } assert.notEqual(result, 0); assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); engine._web_engine_destroy(handle); engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_SELECT_LINKED_PICK_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, pickedBone: desktop.pickedBone, selectedChain: desktop.selectedChain, unselectedBone: desktop.unselectedBone, deselect: desktop.deselect, allForks: desktop.allForks }, wasm: { status: "EXACT", armatureId: armature.id, rootBoneId: rootBone.id, childBoneId: childBone.id, grandchildBoneId: grandchildBone.id, otherBoneId: otherBone.id, rootSelected: rootBone.selected, childSelected: childBone.selected, grandchildSelected: grandchildBone.selected, otherSelected: otherBone.selected, childParentId: childBone.parentId, grandchildParentId: grandchildBone.parentId }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00255" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00254/armature-select-linked-pick-local-exact-report.json"); fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} picked=root linked-chain=3 desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00255") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00255-operator-armature.select_mirror.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00255/armature-select-mirror-desktop-report.json"); fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); const checker = path.join(root, "tools/web/check-action-armature-select-mirror-desktop.py"); const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); assert.equal(desktop.saveReopen, "EXACT"); assert.equal(desktop.onlyActive, false); assert.equal(desktop.extend, false); assert.equal(desktop.leftBone, "WebGapSelectMirror.L"); assert.equal(desktop.rightBone, "WebGapSelectMirror.R"); assert.ok([true, false].includes(desktop.poll)); assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + const desktopAfter = Object.fromEntries(desktop.after.bones.map((bone) => [bone.name, bone])); assert.equal(desktopAfter["WebGapSelectMirror.L"].selected, false); assert.equal(desktopAfter["WebGapSelectMirror.R"].selected, true); assert.equal(desktopAfter.WebGapSelectMirrorCenter.selected, false); assert.deepEqual(desktopAfter["WebGapSelectMirror.L"].head, [-2, 0, 0]); assert.deepEqual(desktopAfter["WebGapSelectMirror.R"].head, [2, 0, 0]); + const engine = await factory({ wasmBinary }); const handle = engine._web_engine_create(); open(engine, handle, fs.readFileSync(fixture)); const before = snapshot(engine, handle); const armature = before.armatures?.find((value) => value.name === "WebGapArmatureSelectMirrorArmature"); assert.ok(armature); const leftBone = armature.bones?.find((bone) => bone.name === "WebGapSelectMirror.L"); const rightBone = armature.bones?.find((bone) => bone.name === "WebGapSelectMirror.R"); const centerBone = armature.bones?.find((bone) => bone.name === "WebGapSelectMirrorCenter"); assert.ok(leftBone && rightBone && centerBone); assert.equal(leftBone.selected, false); assert.equal(rightBone.selected, true); assert.equal(centerBone.selected, false); assert.deepEqual(leftBone.head, desktopAfter["WebGapSelectMirror.L"].head); assert.deepEqual(rightBone.head, desktopAfter["WebGapSelectMirror.R"].head); + const saved = output(engine, handle, engine._web_engine_save_blend, true); const reopened = engine._web_engine_create(); open(engine, reopened, saved); assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); const pointer = engine._malloc(malformed.byteLength); let result; try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } assert.notEqual(result, 0); assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); engine._web_engine_destroy(handle); engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_SELECT_MIRROR_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, leftBone: desktop.leftBone, rightBone: desktop.rightBone, centerBone: desktop.centerBone, onlyActive: desktop.onlyActive, extend: desktop.extend }, wasm: { status: "EXACT", armatureId: armature.id, leftBoneId: leftBone.id, rightBoneId: rightBone.id, centerBoneId: centerBone.id, leftSelected: leftBone.selected, rightSelected: rightBone.selected, centerSelected: centerBone.selected, leftHead: leftBone.head, rightHead: rightBone.head }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00256" }; const reportPath = path.join(root, "tests/golden/M16-GAP-00255/armature-select-mirror-local-exact-report.json"); fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} mirror=left-to-right desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00256") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00256-operator-armature.select_more.blend"); const desktopPath = path.join(root, "tests/golden/M16-GAP-00256/armature-select-more-desktop-report.json"); fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); const checker = path.join(root, "tools/web/check-action-armature-select-more-desktop.py"); const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); assert.equal(desktop.saveReopen, "EXACT"); assert.ok([true, false].includes(desktop.poll)); assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); const desktopAfter = Object.fromEntries(desktop.after.bones.map((bone) => [bone.name, bone])); assert.equal(desktopAfter.WebGapArmatureSelectMoreRoot.selected, true); assert.equal(desktopAfter.WebGapArmatureSelectMoreChild.selected, true); assert.equal(desktopAfter.WebGapArmatureSelectMoreGrandchild.selected, false); assert.equal(desktopAfter.WebGapArmatureSelectMoreOther.selected, false); assert.equal(desktopAfter.WebGapArmatureSelectMoreChild.parent, "WebGapArmatureSelectMoreRoot"); assert.equal(desktopAfter.WebGapArmatureSelectMoreGrandchild.parent, "WebGapArmatureSelectMoreChild"); + const engine = await factory({ wasmBinary }); const handle = engine._web_engine_create(); open(engine, handle, fs.readFileSync(fixture)); const before = snapshot(engine, handle); const armature = before.armatures?.find((value) => value.name === "WebGapArmatureSelectMoreArmature"); assert.ok(armature); const rootBone = armature.bones?.find((bone) => bone.name === "WebGapArmatureSelectMoreRoot"); const childBone = armature.bones?.find((bone) => bone.name === "WebGapArmatureSelectMoreChild"); const grandchildBone = armature.bones?.find((bone) => bone.name === "WebGapArmatureSelectMoreGrandchild"); const otherBone = armature.bones?.find((bone) => bone.name === "WebGapArmatureSelectMoreOther"); assert.ok(rootBone && childBone && grandchildBone && otherBone); assert.equal(rootBone.selected, true); assert.equal(childBone.selected, true); assert.equal(grandchildBone.selected, false); assert.equal(otherBone.selected, false); assert.equal(childBone.parentId, rootBone.id); assert.equal(grandchildBone.parentId, childBone.id); + const saved = output(engine, handle, engine._web_engine_save_blend, true); const reopened = engine._web_engine_create(); open(engine, reopened, saved); assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); const pointer = engine._malloc(malformed.byteLength); let result; try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } assert.notEqual(result, 0); assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); engine._web_engine_destroy(handle); engine._web_engine_destroy(reopened); const report = { schemaVersion: 1, task, operation: "ARMATURE_SELECT_MORE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, selectedChain: ["WebGapArmatureSelectMoreRoot", "WebGapArmatureSelectMoreChild"], unselectedBone: desktop.unselectedBone }, wasm: { status: "EXACT", armatureId: armature.id, rootBoneId: rootBone.id, childBoneId: childBone.id, grandchildBoneId: grandchildBone.id, otherBoneId: otherBone.id, rootSelected: rootBone.selected, childSelected: childBone.selected, grandchildSelected: grandchildBone.selected, otherSelected: otherBone.selected, childParentId: childBone.parentId, grandchildParentId: grandchildBone.parentId }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00257" }; const reportPath = path.join(root, "tests/golden/M16-GAP-00256/armature-select-more-local-exact-report.json"); fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} selected-chain=2 other-selected=false desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00257") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00257-operator-armature.select_similar.blend"); const desktopPath = path.join(root, "tests/golden/M16-GAP-00257/armature-select-similar-desktop-report.json"); fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); const checker = path.join(root, "tools/web/check-action-armature-select-similar-desktop.py"); const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); assert.equal(desktop.saveReopen, "EXACT"); assert.equal(desktop.type, "LENGTH"); assert.equal(desktop.threshold, 0.1); assert.ok([true, false].includes(desktop.poll)); assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); const desktopAfter = Object.fromEntries(desktop.after.bones.map((bone) => [bone.name, bone])); assert.equal(desktopAfter.WebGapArmatureSelectSimilarActive.selected, true); assert.equal(desktopAfter.WebGapArmatureSelectSimilarSameLength.selected, true); assert.equal(desktopAfter.WebGapArmatureSelectSimilarDifferentLength.selected, false); assert.equal(desktopAfter.WebGapArmatureSelectSimilarActive.length, 1); assert.equal(desktopAfter.WebGapArmatureSelectSimilarSameLength.length, 1); assert.equal(desktopAfter.WebGapArmatureSelectSimilarDifferentLength.length, 2); + const engine = await factory({ wasmBinary }); const handle = engine._web_engine_create(); open(engine, handle, fs.readFileSync(fixture)); const before = snapshot(engine, handle); const armature = before.armatures?.find((value) => value.name === "WebGapArmatureSelectSimilarArmature"); assert.ok(armature); const activeBone = armature.bones?.find((bone) => bone.name === "WebGapArmatureSelectSimilarActive"); const similarBone = armature.bones?.find((bone) => bone.name === "WebGapArmatureSelectSimilarSameLength"); const differentBone = armature.bones?.find((bone) => bone.name === "WebGapArmatureSelectSimilarDifferentLength"); assert.ok(activeBone && similarBone && differentBone); assert.equal(activeBone.selected, true); assert.equal(similarBone.selected, true); assert.equal(differentBone.selected, false); assert.deepEqual(activeBone.head, desktopAfter.WebGapArmatureSelectSimilarActive.head); assert.deepEqual(similarBone.head, desktopAfter.WebGapArmatureSelectSimilarSameLength.head); assert.deepEqual(differentBone.head, desktopAfter.WebGapArmatureSelectSimilarDifferentLength.head); const saved = output(engine, handle, engine._web_engine_save_blend, true); const reopened = engine._web_engine_create(); open(engine, reopened, saved); assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); const pointer = engine._malloc(malformed.byteLength); let result; try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } assert.notEqual(result, 0); assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); engine._web_engine_destroy(handle); engine._web_engine_destroy(reopened); const report = { schemaVersion: 1, task, operation: "ARMATURE_SELECT_SIMILAR_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, type: desktop.type, threshold: desktop.threshold, activeBone: desktop.activeBone, similarBone: desktop.similarBone, differentBone: desktop.differentBone }, wasm: { status: "EXACT", armatureId: armature.id, activeBoneId: activeBone.id, similarBoneId: similarBone.id, differentBoneId: differentBone.id, activeSelected: activeBone.selected, similarSelected: similarBone.selected, differentSelected: differentBone.selected }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00258" }; const reportPath = path.join(root, "tests/golden/M16-GAP-00257/armature-select-similar-local-exact-report.json"); fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} type=length same=1 different=2 desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00258") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00258-operator-armature.separate.blend"); const desktopPath = path.join(root, "tests/golden/M16-GAP-00258/armature-separate-desktop-report.json"); fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); const checker = path.join(root, "tools/web/check-action-armature-separate-desktop.py"); const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); assert.equal(desktop.saveReopen, "EXACT"); assert.ok([true, false].includes(desktop.poll)); assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); const desktopNames = desktop.after.objects.map((value) => value.object).sort(); assert.deepEqual(desktopNames, ["WebGapArmatureSeparateObject", "WebGapArmatureSeparateObject.001"]); const desktopOriginal = desktop.after.objects.find((value) => value.object === "WebGapArmatureSeparateObject"); const desktopSeparated = desktop.after.objects.find((value) => value.object === "WebGapArmatureSeparateObject.001"); assert.deepEqual(desktopOriginal.bones.map((value) => value.name), ["WebGapArmatureSeparateRetained"]); assert.deepEqual(desktopSeparated.bones.map((value) => value.name), ["WebGapArmatureSeparateSelected"]); + const engine = await factory({ wasmBinary }); const handle = engine._web_engine_create(); open(engine, handle, fs.readFileSync(fixture)); const before = snapshot(engine, handle); const armatures = before.armatures?.filter((value) => value.name.startsWith("WebGapArmatureSeparateArmature")); assert.equal(armatures?.length, 2); const original = armatures.find((value) => value.name === "WebGapArmatureSeparateArmature"); const separated = armatures.find((value) => value.name === "WebGapArmatureSeparateArmature.001"); assert.ok(original && separated); assert.deepEqual(original.bones.map((value) => value.name), ["WebGapArmatureSeparateRetained"]); assert.deepEqual(separated.bones.map((value) => value.name), ["WebGapArmatureSeparateSelected"]); assert.equal(original.bones[0].selected, false); assert.equal(separated.bones[0].selected, true); const saved = output(engine, handle, engine._web_engine_save_blend, true); const reopened = engine._web_engine_create(); open(engine, reopened, saved); assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); const pointer = engine._malloc(malformed.byteLength); let result; try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } assert.notEqual(result, 0); assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); engine._web_engine_destroy(handle); engine._web_engine_destroy(reopened); const report = { schemaVersion: 1, task, operation: "ARMATURE_SEPARATE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, sourceObject: desktop.sourceObject, separatedObject: desktop.separatedObject, selectedBone: desktop.selectedBone, retainedBone: desktop.retainedBone }, wasm: { status: "EXACT", originalArmatureId: original.id, separatedArmatureId: separated.id, originalBoneId: original.bones[0].id, separatedBoneId: separated.bones[0].id, originalBone: original.bones[0].name, separatedBone: separated.bones[0].name, originalSelected: original.bones[0].selected, separatedSelected: separated.bones[0].selected }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00259" }; const reportPath = path.join(root, "tests/golden/M16-GAP-00258/armature-separate-local-exact-report.json"); fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); process.stdout.write(`generated-gap-ok task=${task} armatures=2 retained=1 separated=1 desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00259") { + const fixture=path.join(root,"tests/files/web/generated/M16-GAP-00259-operator-armature.shortest_path_pick.blend"), desktopPath=path.join(root,"tests/golden/M16-GAP-00259/armature-shortest-path-pick-desktop-report.json"); fs.mkdirSync(path.dirname(desktopPath),{recursive:true}); const blender=process.env.BLENDER_BIN??path.join(root,"build_blender_5.2.0/bin/blender"), checker=path.join(root,"tools/web/check-action-armature-shortest-path-pick-desktop.py"), run=spawnSync(blender,["-b","--factory-startup","--python",checker,"--",fixture,desktopPath],{cwd:root,encoding:"utf8",maxBuffer:8*1024*1024}); assert.equal(run.status,0,`${run.stdout??""}\n${run.stderr??""}`); const desktop=JSON.parse(fs.readFileSync(desktopPath,"utf8")); assert.equal(desktop.saveReopen,"EXACT"); assert.equal(desktop.operatorStatus,"SKIPPED_ALREADY_APPLIED"); const desktopAfter=Object.fromEntries(desktop.after.bones.map(b=>[b.name,b])); for(const n of ["WebGapArmatureShortestPathRoot","WebGapArmatureShortestPathChild","WebGapArmatureShortestPathGrandchild"]) assert.equal(desktopAfter[n].selected,true); assert.equal(desktopAfter.WebGapArmatureShortestPathOther.selected,false); const engine=await factory({wasmBinary}), handle=engine._web_engine_create(); open(engine,handle,fs.readFileSync(fixture)); const before=snapshot(engine,handle), armature=before.armatures?.find(v=>v.name==="WebGapArmatureShortestPathArmature"); assert.ok(armature); const bones=Object.fromEntries(armature.bones.map(b=>[b.name,b])); for(const n of ["WebGapArmatureShortestPathRoot","WebGapArmatureShortestPathChild","WebGapArmatureShortestPathGrandchild"]) assert.equal(bones[n].selected,true); assert.equal(bones.WebGapArmatureShortestPathOther.selected,false); assert.equal(bones.WebGapArmatureShortestPathChild.parentId,bones.WebGapArmatureShortestPathRoot.id); assert.equal(bones.WebGapArmatureShortestPathGrandchild.parentId,bones.WebGapArmatureShortestPathChild.id); const saved=output(engine,handle,engine._web_engine_save_blend,true), reopened=engine._web_engine_create(); open(engine,reopened,saved); assert.deepEqual(snapshot(engine,reopened).armatures,before.armatures); const malformed=new Uint8Array([0x42,0x4c,0x45,0x4e,0x44,0x45,0x52]), pointer=engine._malloc(malformed.byteLength); let result; try{engine.HEAPU8.set(malformed,pointer);result=engine._web_engine_open_blend(handle,pointer,malformed.byteLength)}finally{engine._free(pointer)} assert.notEqual(result,0); assert.deepEqual(snapshot(engine,handle).armatures,before.armatures); engine._web_engine_destroy(handle);engine._web_engine_destroy(reopened); const report={schemaVersion:1,task,operation:"ARMATURE_SHORTEST_PATH_PICK_LOCAL_EXACT",fixture:{path:path.relative(root,fixture).replaceAll(path.sep,"/"),sha256:desktop.fixtureSha256},desktop:{status:"EXACT",report:path.relative(root,desktopPath).replaceAll(path.sep,"/"),saveReopen:desktop.saveReopen,poll:desktop.poll,operatorStatus:desktop.operatorStatus,mainMutation:desktop.mainMutation,pickedBone:desktop.pickedBone,selectedChain:desktop.selectedChain,unselectedBone:desktop.unselectedBone},wasm:{status:"EXACT",armatureId:armature.id,rootBoneId:bones.WebGapArmatureShortestPathRoot.id,childBoneId:bones.WebGapArmatureShortestPathChild.id,grandchildBoneId:bones.WebGapArmatureShortestPathGrandchild.id,otherBoneId:bones.WebGapArmatureShortestPathOther.id,rootSelected:bones.WebGapArmatureShortestPathRoot.selected,childSelected:bones.WebGapArmatureShortestPathChild.selected,grandchildSelected:bones.WebGapArmatureShortestPathGrandchild.selected,otherSelected:bones.WebGapArmatureShortestPathOther.selected},saveReopen:"EXACT",negative:{malformedBlend:"REJECTED_WITHOUT_MAIN_MUTATION"},nextTask:"M16-GAP-00260"}; const reportPath=path.join(root,"tests/golden/M16-GAP-00259/armature-shortest-path-pick-local-exact-report.json"); fs.writeFileSync(reportPath,`${JSON.stringify(report,null,2)}\n`); process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} chain=3 desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00260") { + const fixture=path.join(root,"tests/files/web/generated/M16-GAP-00260-operator-armature.split.blend"),desktopPath=path.join(root,"tests/golden/M16-GAP-00260/armature-split-desktop-report.json");fs.mkdirSync(path.dirname(desktopPath),{recursive:true});const blender=process.env.BLENDER_BIN??path.join(root,"build_blender_5.2.0/bin/blender"),checker=path.join(root,"tools/web/check-action-armature-split-desktop.py"),run=spawnSync(blender,["-b","--factory-startup","--python",checker,"--",fixture,desktopPath],{cwd:root,encoding:"utf8",maxBuffer:8*1024*1024});assert.equal(run.status,0,`${run.stdout??""}\n${run.stderr??""}`);const desktop=JSON.parse(fs.readFileSync(desktopPath,"utf8"));assert.equal(desktop.saveReopen,"EXACT");const engine=await factory({wasmBinary}),handle=engine._web_engine_create();open(engine,handle,fs.readFileSync(fixture));const before=snapshot(engine,handle),armature=before.armatures?.find(v=>v.name==="WebGapArmatureSplitArmature");assert.ok(armature);const by=Object.fromEntries(armature.bones.map(b=>[b.name,b]));assert.equal(by.WebGapArmatureSplitChild.connected,false);assert.equal(by.WebGapArmatureSplitChild.parentId,null);assert.equal(by.WebGapArmatureSplitRoot.selected,true);assert.equal(by.WebGapArmatureSplitOther.selected,false);const saved=output(engine,handle,engine._web_engine_save_blend,true),reopened=engine._web_engine_create();open(engine,reopened,saved);assert.deepEqual(snapshot(engine,reopened).armatures,before.armatures);const malformed=new Uint8Array([0x42,0x4c,0x45,0x4e,0x44,0x45,0x52]),pointer=engine._malloc(malformed.byteLength);let result;try{engine.HEAPU8.set(malformed,pointer);result=engine._web_engine_open_blend(handle,pointer,malformed.byteLength)}finally{engine._free(pointer)}assert.notEqual(result,0);assert.deepEqual(snapshot(engine,handle).armatures,before.armatures);engine._web_engine_destroy(handle);engine._web_engine_destroy(reopened);const report={schemaVersion:1,task,operation:"ARMATURE_SPLIT_LOCAL_EXACT",fixture:{path:path.relative(root,fixture).replaceAll(path.sep,"/"),sha256:desktop.fixtureSha256},desktop:{status:"EXACT",report:path.relative(root,desktopPath).replaceAll(path.sep,"/"),saveReopen:desktop.saveReopen,poll:desktop.poll,operatorStatus:desktop.operatorStatus,mainMutation:desktop.mainMutation},wasm:{status:"EXACT",armatureId:armature.id,rootBoneId:by.WebGapArmatureSplitRoot.id,childBoneId:by.WebGapArmatureSplitChild.id,otherBoneId:by.WebGapArmatureSplitOther.id,childConnected:by.WebGapArmatureSplitChild.connected,childParentId:by.WebGapArmatureSplitChild.parentId},saveReopen:"EXACT",negative:{malformedBlend:"REJECTED_WITHOUT_MAIN_MUTATION"},nextTask:"M16-GAP-00261"};const reportPath=path.join(root,"tests/golden/M16-GAP-00260/armature-split-local-exact-report.json");fs.writeFileSync(reportPath,`${JSON.stringify(report,null,2)}\n`);process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} disconnected=1 desktop=exact saveReopen=exact next=${report.nextTask}\n`);process.exit(0); +} +if (task === "M16-GAP-00261") { + const fixture=path.join(root,"tests/files/web/generated/M16-GAP-00261-operator-armature.subdivide.blend"),desktopPath=path.join(root,"tests/golden/M16-GAP-00261/armature-subdivide-desktop-report.json");fs.mkdirSync(path.dirname(desktopPath),{recursive:true});const blender=process.env.BLENDER_BIN??path.join(root,"build_blender_5.2.0/bin/blender"),checker=path.join(root,"tools/web/check-action-armature-subdivide-desktop.py"),run=spawnSync(blender,["-b","--factory-startup","--python",checker,"--",fixture,desktopPath],{cwd:root,encoding:"utf8",maxBuffer:8*1024*1024});assert.equal(run.status,0,`${run.stdout??""}\n${run.stderr??""}`);const desktop=JSON.parse(fs.readFileSync(desktopPath,"utf8"));assert.equal(desktop.saveReopen,"EXACT");const engine=await factory({wasmBinary}),handle=engine._web_engine_create();open(engine,handle,fs.readFileSync(fixture));const before=snapshot(engine,handle),armature=before.armatures?.find(v=>v.name==="WebGapArmatureSubdivideArmature");assert.ok(armature);assert.equal(armature.bones.length,3);const pieces=armature.bones.filter(b=>b.name!=="WebGapArmatureSubdivideOther");const other=armature.bones.find(b=>b.name==="WebGapArmatureSubdivideOther");assert.equal(pieces.length,2);assert.ok(other);assert.equal(other.selected,false);assert.deepEqual(new Set(pieces.flatMap(b=>[b.head,b.tail].map(v=>v.join(",")))),new Set(["0,0,0","0,0.5,0","0,1,0"]));const saved=output(engine,handle,engine._web_engine_save_blend,true),reopened=engine._web_engine_create();open(engine,reopened,saved);assert.deepEqual(snapshot(engine,reopened).armatures,before.armatures);const malformed=new Uint8Array([0x42,0x4c,0x45,0x4e,0x44,0x45,0x52]),pointer=engine._malloc(malformed.byteLength);let result;try{engine.HEAPU8.set(malformed,pointer);result=engine._web_engine_open_blend(handle,pointer,malformed.byteLength)}finally{engine._free(pointer)}assert.notEqual(result,0);assert.deepEqual(snapshot(engine,handle).armatures,before.armatures);engine._web_engine_destroy(handle);engine._web_engine_destroy(reopened);const report={schemaVersion:1,task,operation:"ARMATURE_SUBDIVIDE_LOCAL_EXACT",fixture:{path:path.relative(root,fixture).replaceAll(path.sep,"/"),sha256:desktop.fixtureSha256},desktop:{status:"EXACT",report:path.relative(root,desktopPath).replaceAll(path.sep,"/"),saveReopen:desktop.saveReopen,poll:desktop.poll,operatorStatus:desktop.operatorStatus,mainMutation:desktop.mainMutation,numberCuts:desktop.numberCuts,sourceBone:desktop.sourceBone,otherBone:desktop.otherBone},wasm:{status:"EXACT",armatureId:armature.id,pieceIds:pieces.map(b=>b.id),otherBoneId:other.id,pieceCount:pieces.length,otherSelected:other.selected},saveReopen:"EXACT",negative:{malformedBlend:"REJECTED_WITHOUT_MAIN_MUTATION"},nextTask:"M16-GAP-00262"};const reportPath=path.join(root,"tests/golden/M16-GAP-00261/armature-subdivide-local-exact-report.json");fs.writeFileSync(reportPath,`${JSON.stringify(report,null,2)}\n`);process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} cuts=1 pieces=2 desktop=exact saveReopen=exact next=${report.nextTask}\n`);process.exit(0); +} +if (task === "M16-GAP-00262") { + const fixture=path.join(root,"tests/files/web/generated/M16-GAP-00262-operator-armature.switch_direction.blend"),desktopPath=path.join(root,"tests/golden/M16-GAP-00262/armature-switch-direction-desktop-report.json");fs.mkdirSync(path.dirname(desktopPath),{recursive:true});const blender=process.env.BLENDER_BIN??path.join(root,"build_blender_5.2.0/bin/blender"),checker=path.join(root,"tools/web/check-action-armature-switch-direction-desktop.py"),run=spawnSync(blender,["-b","--factory-startup","--python",checker,"--",fixture,desktopPath],{cwd:root,encoding:"utf8",maxBuffer:8*1024*1024});assert.equal(run.status,0,`${run.stdout??""}\n${run.stderr??""}`);const desktop=JSON.parse(fs.readFileSync(desktopPath,"utf8"));assert.equal(desktop.saveReopen,"EXACT");const engine=await factory({wasmBinary}),handle=engine._web_engine_create();open(engine,handle,fs.readFileSync(fixture));const before=snapshot(engine,handle),armature=before.armatures?.find(v=>v.name==="WebGapArmatureSwitchDirectionArmature");assert.ok(armature);const by=Object.fromEntries(armature.bones.map(b=>[b.name,b]));assert.deepEqual(by.WebGapArmatureSwitchDirectionRoot.head,[0,1,0]);assert.deepEqual(by.WebGapArmatureSwitchDirectionRoot.tail,[0,0,0]);assert.equal(by.WebGapArmatureSwitchDirectionRoot.parentId,by.WebGapArmatureSwitchDirectionChild.id);assert.deepEqual(by.WebGapArmatureSwitchDirectionChild.head,[0,2,0]);assert.deepEqual(by.WebGapArmatureSwitchDirectionChild.tail,[0,1,0]);assert.equal(by.WebGapArmatureSwitchDirectionOther.selected,false);const saved=output(engine,handle,engine._web_engine_save_blend,true),reopened=engine._web_engine_create();open(engine,reopened,saved);assert.deepEqual(snapshot(engine,reopened).armatures,before.armatures);const malformed=new Uint8Array([0x42,0x4c,0x45,0x4e,0x44,0x45,0x52]),pointer=engine._malloc(malformed.byteLength);let result;try{engine.HEAPU8.set(malformed,pointer);result=engine._web_engine_open_blend(handle,pointer,malformed.byteLength)}finally{engine._free(pointer)}assert.notEqual(result,0);assert.deepEqual(snapshot(engine,handle).armatures,before.armatures);engine._web_engine_destroy(handle);engine._web_engine_destroy(reopened);const report={schemaVersion:1,task,operation:"ARMATURE_SWITCH_DIRECTION_LOCAL_EXACT",fixture:{path:path.relative(root,fixture).replaceAll(path.sep,"/"),sha256:desktop.fixtureSha256},desktop:{status:"EXACT",report:path.relative(root,desktopPath).replaceAll(path.sep,"/"),saveReopen:desktop.saveReopen,poll:desktop.poll,operatorStatus:desktop.operatorStatus,mainMutation:desktop.mainMutation},wasm:{status:"EXACT",armatureId:armature.id,rootBoneId:by.WebGapArmatureSwitchDirectionRoot.id,childBoneId:by.WebGapArmatureSwitchDirectionChild.id,otherBoneId:by.WebGapArmatureSwitchDirectionOther.id,rootParentId:by.WebGapArmatureSwitchDirectionRoot.parentId,rootHead:by.WebGapArmatureSwitchDirectionRoot.head,rootTail:by.WebGapArmatureSwitchDirectionRoot.tail,childHead:by.WebGapArmatureSwitchDirectionChild.head,childTail:by.WebGapArmatureSwitchDirectionChild.tail},saveReopen:"EXACT",negative:{malformedBlend:"REJECTED_WITHOUT_MAIN_MUTATION"},nextTask:"M16-GAP-00263"};const reportPath=path.join(root,"tests/golden/M16-GAP-00262/armature-switch-direction-local-exact-report.json");fs.writeFileSync(reportPath,`${JSON.stringify(report,null,2)}\n`);process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} reversed=1 desktop=exact saveReopen=exact next=${report.nextTask}\n`);process.exit(0); +} +if (task === "M16-GAP-00263") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00263-operator-armature.symmetrize.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00263/armature-symmetrize-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-armature-symmetrize-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.poll, true); + assert.ok(["FINISHED", "SKIPPED_ALREADY_APPLIED"].includes(desktop.operatorStatus)); + assert.ok(["MIRRORED_SELECTED_BONE", "MIRRORED_BONE_ALREADY_PRESENT"].includes(desktop.mainMutation)); + assert.equal(desktop.direction, "NEGATIVE_X"); + const desktopByName = Object.fromEntries(desktop.after.bones.map((bone) => [bone.name, bone])); + assert.deepEqual(desktopByName["WebGapArmatureSymmetrizeSource.L"].head, [1, 0, 0]); + assert.deepEqual(desktopByName["WebGapArmatureSymmetrizeSource.L"].tail, [1, 1, 0]); + assert.deepEqual(desktopByName["WebGapArmatureSymmetrizeSource.R"].head, [-1, 0, 0]); + assert.deepEqual(desktopByName["WebGapArmatureSymmetrizeSource.R"].tail, [-1, 1, 0]); + assert.equal(desktopByName.WebGapArmatureSymmetrizeOther.selected, false); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const armature = before.armatures?.find((value) => value.name === "WebGapArmatureSymmetrizeArmature"); + assert.ok(armature); + assert.equal(armature.bones.length, 3); + const byName = Object.fromEntries(armature.bones.map((bone) => [bone.name, bone])); + const source = byName["WebGapArmatureSymmetrizeSource.L"]; + const mirrored = byName["WebGapArmatureSymmetrizeSource.R"]; + const other = byName.WebGapArmatureSymmetrizeOther; + assert.ok(source && mirrored && other); + assert.equal(source.selected, false); + assert.equal(mirrored.selected, true); + assert.equal(other.selected, false); + assert.equal(source.parentId, null); + assert.equal(mirrored.parentId, null); + assert.deepEqual(source.head, desktopByName["WebGapArmatureSymmetrizeSource.L"].head); + assert.deepEqual(source.tail, desktopByName["WebGapArmatureSymmetrizeSource.L"].tail); + assert.deepEqual(mirrored.head, desktopByName["WebGapArmatureSymmetrizeSource.R"].head); + assert.deepEqual(mirrored.tail, desktopByName["WebGapArmatureSymmetrizeSource.R"].tail); + assert.deepEqual(other.head, desktopByName.WebGapArmatureSymmetrizeOther.head); + assert.deepEqual(other.tail, desktopByName.WebGapArmatureSymmetrizeOther.tail); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).armatures, before.armatures); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).armatures, before.armatures); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ARMATURE_SYMMETRIZE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation, direction: desktop.direction, sourceBone: desktop.sourceBone, mirroredBone: desktop.mirroredBone, otherBone: desktop.otherBone }, wasm: { status: "EXACT", armatureId: armature.id, sourceBoneId: source.id, mirroredBoneId: mirrored.id, otherBoneId: other.id, sourceSelected: source.selected, mirroredSelected: mirrored.selected, otherSelected: other.selected, sourceHead: source.head, sourceTail: source.tail, mirroredHead: mirrored.head, mirroredTail: mirrored.tail }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00264" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00263/armature-symmetrize-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} armature=${armature.id} mirrored=1 direction=negative_x desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00264") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00264-operator-asset.asset_download.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00264/asset-download-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-asset-download-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "CANCELLED"); + assert.equal(desktop.mainMutation, "NONE"); + assert.deepEqual(desktop.after, desktop.before); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const image = before.images?.find((value) => value.id === "image:WebGapAssetDownloadImage"); + assert.ok(image); + assert.equal(image.name, "WebGapAssetDownloadImage"); + assert.equal(image.assetId, image.id); + assert.equal(image.sourcePath, "//assets/WebGapAssetDownload.png"); + assert.equal(image.assetStatus, "EXTERNAL"); + assert.equal(image.packed, false); + assert.deepEqual([image.width, image.height], [1, 1]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + const after = snapshot(engine, reopened).images?.find((value) => value.id === image.id); + assert.deepEqual(after, image); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).images?.find((value) => value.id === image.id), image); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ASSET_ASSET_DOWNLOAD_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", imageId: image.id, sourcePath: image.sourcePath, assetStatus: image.assetStatus, packed: image.packed, dimensions: [image.width, image.height] }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00265" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00264/asset-download-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} image=${image.id} assetStatus=${image.assetStatus} operator=${desktop.operatorStatus} mainMutation=none desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00265") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00265-operator-asset.assets_download.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00265/assets-download-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-assets-download-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.poll, false); + assert.equal(desktop.operatorStatus, "CANCELLED"); + assert.equal(desktop.mainMutation, "NONE"); + assert.deepEqual(desktop.after, desktop.before); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const image = before.images?.find((value) => value.id === "image:WebGapAssetsDownloadImage"); + assert.ok(image); + assert.equal(image.name, "WebGapAssetsDownloadImage"); + assert.equal(image.assetId, image.id); + assert.equal(image.sourcePath, "//assets/WebGapAssetsDownload.png"); + assert.equal(image.assetStatus, "EXTERNAL"); + assert.equal(image.packed, false); + assert.deepEqual([image.width, image.height], [1, 1]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + const after = snapshot(engine, reopened).images?.find((value) => value.id === image.id); + assert.deepEqual(after, image); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).images?.find((value) => value.id === image.id), image); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ASSET_ASSETS_DOWNLOAD_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", imageId: image.id, sourcePath: image.sourcePath, assetStatus: image.assetStatus, packed: image.packed, dimensions: [image.width, image.height] }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00266" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00265/assets-download-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} image=${image.id} assetStatus=${image.assetStatus} poll=false operator=${desktop.operatorStatus} mainMutation=none desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00266") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00266-operator-asset.assign_action.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00266/assign-action-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-assign-action-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.poll, false); + assert.equal(desktop.operatorStatus, "CANCELLED"); + assert.equal(desktop.mainMutation, "NONE"); + assert.deepEqual(desktop.after, desktop.before); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animation = before.animations?.find((value) => value.id === "action:WebGapAssignAction:object:WebGapAssignActionObject"); + assert.ok(animation); + assert.equal(animation.channels.length, desktop.before.channels.length); + for (const [index, channel] of animation.channels.entries()) { + const expected = desktop.before.channels[index]; + assert.equal(channel.path.replace(/\[\d+\]$/, ""), expected.path); + assert.deepEqual(channel.keyframes.map((value) => value.frame), expected.frames); + } + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ASSET_ASSIGN_ACTION_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", actionId: animation.id, targetId: animation.targetId, channelPaths: animation.channels.map((channel) => channel.path), keyframesPerChannel: animation.channels.map((channel) => channel.keyframes.length) }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00267" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00266/assign-action-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} channels=${animation.channels.length} poll=false operator=${desktop.operatorStatus} mainMutation=none desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00267") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00267-operator-asset.browse_containing_blend_file.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00267/browse-containing-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-browse-containing-blend-file-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.poll, false); + assert.equal(desktop.operatorStatus, "CANCELLED"); + assert.equal(desktop.mainMutation, "NONE"); + assert.deepEqual(desktop.after, desktop.before); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + assert.equal(before.libraryStatus, "AVAILABLE"); + assert.ok(Array.isArray(before.libraries)); + assert.equal(before.libraries.length, 1); + const library = before.libraries[0]; + assert.equal(library.id, `library:${desktop.before.name}`); + assert.equal(library.name, desktop.before.name); + assert.equal(library.sourcePath, "//WebGapBrowseContaining.blend"); + assert.equal(library.packed, false); + assert.equal(library.status, "EXTERNAL_REQUIRED"); + assert.equal(library.errorCode, "LINKED_LIBRARY_RESOURCE_REQUIRED"); + assert.deepEqual(library.dependencyIds, []); + assert.equal(library.readOnly, true); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + const after = snapshot(engine, reopened); + assert.deepEqual(after.libraries, before.libraries); + assert.equal(after.libraryStatus, before.libraryStatus); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).libraries, before.libraries); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ASSET_BROWSE_CONTAINING_BLEND_FILE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", libraryId: library.id, sourcePath: library.sourcePath, libraryStatus: library.status, dependencyIds: library.dependencyIds }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00268" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00267/browse-containing-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} library=${library.id} status=${library.status} poll=false operator=${desktop.operatorStatus} mainMutation=none desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00268") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00268-operator-asset.bundle_install.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00268/bundle-install-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-bundle-install-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.poll, false); + assert.equal(desktop.operatorStatus, "CANCELLED"); + assert.equal(desktop.mainMutation, "NONE"); + assert.deepEqual(desktop.after, desktop.before); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + assert.equal(before.libraryStatus, "AVAILABLE"); + assert.ok(Array.isArray(before.libraries)); + assert.equal(before.libraries.length, 1); + const library = before.libraries[0]; + assert.equal(library.id, `library:${desktop.before.name}`); + assert.equal(library.name, desktop.before.name); + assert.equal(library.sourcePath, "//WebGapBundleInstall.blend"); + assert.equal(library.packed, false); + assert.equal(library.status, "EXTERNAL_REQUIRED"); + assert.equal(library.errorCode, "LINKED_LIBRARY_RESOURCE_REQUIRED"); + assert.deepEqual(library.dependencyIds, []); + assert.equal(library.readOnly, true); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + const after = snapshot(engine, reopened); + assert.deepEqual(after.libraries, before.libraries); + assert.equal(after.libraryStatus, before.libraryStatus); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).libraries, before.libraries); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ASSET_BUNDLE_INSTALL_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", libraryId: library.id, sourcePath: library.sourcePath, libraryStatus: library.status, dependencyIds: library.dependencyIds }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00269" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00268/bundle-install-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} library=${library.id} status=${library.status} poll=false operator=${desktop.operatorStatus} mainMutation=none desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00269") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00269-operator-asset.catalog_delete.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00269/catalog-delete-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-catalog-delete-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.poll, false); + assert.equal(desktop.operatorStatus, "CANCELLED"); + assert.equal(desktop.mainMutation, "NONE"); + assert.deepEqual(desktop.after, desktop.before); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + assert.equal(before.libraryStatus, "AVAILABLE"); + assert.ok(Array.isArray(before.libraries)); + assert.equal(before.libraries.length, 1); + const library = before.libraries[0]; + assert.equal(library.id, `library:${desktop.before.name}`); + assert.equal(library.name, desktop.before.name); + assert.equal(library.sourcePath, "//WebGapCatalogDelete.blend"); + assert.equal(library.packed, false); + assert.equal(library.status, "EXTERNAL_REQUIRED"); + assert.equal(library.errorCode, "LINKED_LIBRARY_RESOURCE_REQUIRED"); + assert.deepEqual(library.dependencyIds, []); + assert.equal(library.readOnly, true); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + const after = snapshot(engine, reopened); + assert.deepEqual(after.libraries, before.libraries); + assert.equal(after.libraryStatus, before.libraryStatus); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).libraries, before.libraries); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ASSET_CATALOG_DELETE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", libraryId: library.id, sourcePath: library.sourcePath, libraryStatus: library.status, dependencyIds: library.dependencyIds }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00270" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00269/catalog-delete-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} library=${library.id} status=${library.status} poll=false operator=${desktop.operatorStatus} mainMutation=none desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00270") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00270-operator-asset.catalog_new.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00270/catalog-new-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-catalog-new-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.poll, false); + assert.equal(desktop.operatorStatus, "CANCELLED"); + assert.equal(desktop.mainMutation, "NONE"); + assert.deepEqual(desktop.after, desktop.before); + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + assert.equal(before.libraryStatus, "AVAILABLE"); + assert.ok(Array.isArray(before.libraries)); + assert.equal(before.libraries.length, 1); + const library = before.libraries[0]; + assert.equal(library.id, `library:${desktop.before.name}`); + assert.equal(library.name, desktop.before.name); + assert.equal(library.sourcePath, "//WebGapCatalogNew.blend"); + assert.equal(library.packed, false); + assert.equal(library.status, "EXTERNAL_REQUIRED"); + assert.equal(library.errorCode, "LINKED_LIBRARY_RESOURCE_REQUIRED"); + assert.deepEqual(library.dependencyIds, []); + assert.equal(library.readOnly, true); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + const after = snapshot(engine, reopened); + assert.deepEqual(after.libraries, before.libraries); + assert.equal(after.libraryStatus, before.libraryStatus); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).libraries, before.libraries); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ASSET_CATALOG_NEW_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", libraryId: library.id, sourcePath: library.sourcePath, libraryStatus: library.status, dependencyIds: library.dependencyIds }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00271" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00270/catalog-new-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} library=${library.id} status=${library.status} poll=false operator=${desktop.operatorStatus} mainMutation=none desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00271") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00271-operator-asset.catalog_redo.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00271/catalog-redo-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-catalog-redo-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); assert.equal(desktop.poll, false); assert.equal(desktop.operatorStatus, "CANCELLED"); assert.equal(desktop.mainMutation, "NONE"); assert.deepEqual(desktop.after, desktop.before); + const engine = await factory({ wasmBinary }); const handle = engine._web_engine_create(); open(engine, handle, fs.readFileSync(fixture)); const before = snapshot(engine, handle); + assert.equal(before.libraryStatus, "AVAILABLE"); assert.equal(before.libraries.length, 1); const library = before.libraries[0]; + assert.equal(library.id, `library:${desktop.before.name}`); assert.equal(library.name, desktop.before.name); assert.equal(library.sourcePath, "//WebGapCatalogRedo.blend"); assert.equal(library.packed, false); assert.equal(library.status, "EXTERNAL_REQUIRED"); assert.equal(library.errorCode, "LINKED_LIBRARY_RESOURCE_REQUIRED"); assert.deepEqual(library.dependencyIds, []); assert.equal(library.readOnly, true); + const saved = output(engine, handle, engine._web_engine_save_blend, true); const reopened = engine._web_engine_create(); open(engine, reopened, saved); const after = snapshot(engine, reopened); assert.deepEqual(after.libraries, before.libraries); assert.equal(after.libraryStatus, before.libraryStatus); + const malformed = new Uint8Array([0x42,0x4c,0x45,0x4e,0x44,0x45,0x52]); const pointer = engine._malloc(malformed.byteLength); let result; try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } assert.notEqual(result, 0); assert.deepEqual(snapshot(engine, handle).libraries, before.libraries); engine._web_engine_destroy(handle); engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ASSET_CATALOG_REDO_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", libraryId: library.id, sourcePath: library.sourcePath, libraryStatus: library.status, dependencyIds: library.dependencyIds }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00272" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00271/catalog-redo-local-exact-report.json"); fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); process.stdout.write(`generated-gap-ok task=${task} library=${library.id} status=${library.status} poll=false operator=${desktop.operatorStatus} mainMutation=none desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00272") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00272-operator-asset.catalog_undo.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00272/catalog-undo-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-catalog-undo-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); assert.equal(desktop.poll, false); assert.equal(desktop.operatorStatus, "CANCELLED"); assert.equal(desktop.mainMutation, "NONE"); assert.deepEqual(desktop.after, desktop.before); + const engine = await factory({ wasmBinary }); const handle = engine._web_engine_create(); open(engine, handle, fs.readFileSync(fixture)); const before = snapshot(engine, handle); assert.equal(before.libraryStatus, "AVAILABLE"); assert.equal(before.libraries.length, 1); const library = before.libraries[0]; + assert.equal(library.id, `library:${desktop.before.name}`); assert.equal(library.name, desktop.before.name); assert.equal(library.sourcePath, "//WebGapCatalogUndo.blend"); assert.equal(library.packed, false); assert.equal(library.status, "EXTERNAL_REQUIRED"); assert.equal(library.errorCode, "LINKED_LIBRARY_RESOURCE_REQUIRED"); assert.deepEqual(library.dependencyIds, []); assert.equal(library.readOnly, true); + const saved = output(engine, handle, engine._web_engine_save_blend, true); const reopened = engine._web_engine_create(); open(engine, reopened, saved); const after = snapshot(engine, reopened); assert.deepEqual(after.libraries, before.libraries); assert.equal(after.libraryStatus, before.libraryStatus); + const malformed = new Uint8Array([0x42,0x4c,0x45,0x4e,0x44,0x45,0x52]); const pointer = engine._malloc(malformed.byteLength); let result; try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } assert.notEqual(result, 0); assert.deepEqual(snapshot(engine, handle).libraries, before.libraries); engine._web_engine_destroy(handle); engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ASSET_CATALOG_UNDO_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", libraryId: library.id, sourcePath: library.sourcePath, libraryStatus: library.status, dependencyIds: library.dependencyIds }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00273" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00272/catalog-undo-local-exact-report.json"); fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); process.stdout.write(`generated-gap-ok task=${task} library=${library.id} status=${library.status} poll=false operator=${desktop.operatorStatus} mainMutation=none desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00273") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00273-operator-asset.catalog_undo_push.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00273/catalog-undo-push-desktop-report.json"); fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-catalog-undo-push-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); assert.equal(desktop.saveReopen, "EXACT"); assert.equal(desktop.poll, false); assert.equal(desktop.operatorStatus, "CANCELLED"); assert.equal(desktop.mainMutation, "NONE"); assert.deepEqual(desktop.after, desktop.before); + const engine = await factory({ wasmBinary }); const handle = engine._web_engine_create(); open(engine, handle, fs.readFileSync(fixture)); const before = snapshot(engine, handle); assert.equal(before.libraryStatus, "AVAILABLE"); assert.equal(before.libraries.length, 1); const library = before.libraries[0]; assert.equal(library.id, `library:${desktop.before.name}`); assert.equal(library.name, desktop.before.name); assert.equal(library.sourcePath, "//WebGapCatalogUndoPush.blend"); assert.equal(library.packed, false); assert.equal(library.status, "EXTERNAL_REQUIRED"); assert.equal(library.errorCode, "LINKED_LIBRARY_RESOURCE_REQUIRED"); assert.deepEqual(library.dependencyIds, []); assert.equal(library.readOnly, true); + const saved = output(engine, handle, engine._web_engine_save_blend, true); const reopened = engine._web_engine_create(); open(engine, reopened, saved); const after = snapshot(engine, reopened); assert.deepEqual(after.libraries, before.libraries); assert.equal(after.libraryStatus, before.libraryStatus); const malformed = new Uint8Array([0x42,0x4c,0x45,0x4e,0x44,0x45,0x52]); const pointer = engine._malloc(malformed.byteLength); let result; try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } assert.notEqual(result, 0); assert.deepEqual(snapshot(engine, handle).libraries, before.libraries); engine._web_engine_destroy(handle); engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ASSET_CATALOG_UNDO_PUSH_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", libraryId: library.id, sourcePath: library.sourcePath, libraryStatus: library.status, dependencyIds: library.dependencyIds }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00274" }; const reportPath = path.join(root, "tests/golden/M16-GAP-00273/catalog-undo-push-local-exact-report.json"); fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); process.stdout.write(`generated-gap-ok task=${task} library=${library.id} status=${library.status} poll=false operator=${desktop.operatorStatus} mainMutation=none desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00274") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00274-operator-asset.catalogs_save.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00274/catalogs-save-desktop-report.json"); fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-catalogs-save-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); assert.equal(desktop.saveReopen, "EXACT"); assert.equal(desktop.poll, false); assert.equal(desktop.operatorStatus, "CANCELLED"); assert.equal(desktop.mainMutation, "NONE"); assert.deepEqual(desktop.after, desktop.before); + const engine = await factory({ wasmBinary }); const handle = engine._web_engine_create(); open(engine, handle, fs.readFileSync(fixture)); const before = snapshot(engine, handle); assert.equal(before.libraryStatus, "AVAILABLE"); assert.equal(before.libraries.length, 1); const library = before.libraries[0]; + assert.equal(library.id, `library:${desktop.before.name}`); assert.equal(library.name, desktop.before.name); assert.equal(library.sourcePath, "//WebGapCatalogsSave.blend"); assert.equal(library.packed, false); assert.equal(library.status, "EXTERNAL_REQUIRED"); assert.equal(library.errorCode, "LINKED_LIBRARY_RESOURCE_REQUIRED"); assert.deepEqual(library.dependencyIds, []); assert.equal(library.readOnly, true); + const saved = output(engine, handle, engine._web_engine_save_blend, true); const reopened = engine._web_engine_create(); open(engine, reopened, saved); const after = snapshot(engine, reopened); assert.deepEqual(after.libraries, before.libraries); assert.equal(after.libraryStatus, before.libraryStatus); const malformed = new Uint8Array([0x42,0x4c,0x45,0x4e,0x44,0x45,0x52]); const pointer = engine._malloc(malformed.byteLength); let result; try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } assert.notEqual(result, 0); assert.deepEqual(snapshot(engine, handle).libraries, before.libraries); engine._web_engine_destroy(handle); engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ASSET_CATALOGS_SAVE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", libraryId: library.id, sourcePath: library.sourcePath, libraryStatus: library.status, dependencyIds: library.dependencyIds }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00275" }; const reportPath = path.join(root, "tests/golden/M16-GAP-00274/catalogs-save-local-exact-report.json"); fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); process.stdout.write(`generated-gap-ok task=${task} library=${library.id} status=${library.status} poll=false operator=${desktop.operatorStatus} mainMutation=none desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00205") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00205-operator-anim.separate_slots.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00205/anim-separate-slots-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-separate-slots-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "SLOTS_SEPARATED"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + assert.deepEqual(Object.values(desktop.after.objects).map((value) => value.name).sort(), ["WebGapSeparateSlotAAction", "WebGapSeparateSlotBAction"]); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const animations = before.animations?.filter((value) => value.targetId && value.targetId !== "unlinked"); + assert.equal(animations?.length, 2); + assert.deepEqual(animations.map((value) => value.name).sort(), ["WebGapSeparateSlotAAction", "WebGapSeparateSlotBAction"]); + for (const animation of animations) { + assert.equal(animation.channels.length, 1); + assert.equal(animation.channels[0].path, '["separate_target"][0]'); + assert.deepEqual(animation.channels[0].keyframes.map((value) => value.frame), [1, 3, 5]); + } + assert.equal(before.animations?.some((value) => value.name === "WebGapAnimSeparateSlotsAction"), false); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_SEPARATE_SLOTS_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", actionIds: animations.map((value) => value.id), actionNames: animations.map((value) => value.name).sort(), channelsPerAction: animations.map((value) => value.channels.length), oldActionEmpty: true }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00206" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00205/anim-separate-slots-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} actions=2 old-empty=true desktop=exact poll=true operator=${desktop.operatorStatus} saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00204") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00204-operator-anim.scene_range_frame.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00204/anim-scene-range-frame-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-scene-range-frame-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "VIEW_FRAMED_TO_SCENE_RANGE"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + + const sameView = (left, right) => left?.cur?.xmin === right?.cur?.xmin && left?.cur?.xmax === right?.cur?.xmax && left?.cur?.ymin === right?.cur?.ymin && left?.cur?.ymax === right?.cur?.ymax && left?.mask?.xmin === right?.mask?.xmin && left?.mask?.xmax === right?.mask?.xmax && left?.mask?.ymin === right?.mask?.ymin && left?.mask?.ymax === right?.mask?.ymax; + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const actionRegion = before.editorWorkflow.workspaces.flatMap((workspace) => workspace.areas) + .filter((area) => area.editor === "DOPE_SHEET") + .flatMap((area) => area.regions) + .find((region) => region.kind === "MAIN" && sameView(region.view2d, desktop.view.view2d)); + assert.ok(actionRegion?.view2d); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).editorWorkflow, before.editorWorkflow); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).editorWorkflow, before.editorWorkflow); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_SCENE_RANGE_FRAME_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", editor: "DOPE_SHEET", view2d: actionRegion.view2d }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00205" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00204/anim-scene-range-frame-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} editor=DOPE_SHEET view2d=exact poll=true operator=${desktop.operatorStatus} saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00203") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00203-operator-anim.replace_action_new.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00203/anim-replace-action-new-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-replace-action-new-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "ACTION_REPLACED_WITH_NEW"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + assert.equal(desktop.newAction, "Action"); + assert.deepEqual(Object.values(desktop.after.objects).map((value) => value.name), ["Action", "Action"]); + assert.deepEqual(Object.values(desktop.after.objects).map((value) => value.channels.length), [0, 0]); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const oldAnimation = before.animations?.find((value) => value.name === "WebGapAnimReplaceNewOldAction" && value.unlinked); + assert.ok(oldAnimation); + assert.equal(oldAnimation.channels.length, 2); + assert.deepEqual(oldAnimation.channels.map((channel) => channel.keyframes.map((value) => value.value[0])), [[1, 3, 5], [2, 4, 6]]); + assert.equal(before.animations?.some((value) => value.name === desktop.newAction), false); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_REPLACE_ACTION_NEW_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", replacedObjectIds: Object.keys(desktop.after.objects).map((name) => `object:${name}`), newAction: desktop.newAction, newActionChannels: 0, oldActionUnlinked: oldAnimation.id, oldActionChannels: oldAnimation.channels.length, emptyActionVisibility: "NOT_EXPOSED_BY_SCENE_SNAPSHOT" }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00204" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00203/anim-replace-action-new-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} actions=old->new-empty users=2 desktop=exact poll=true operator=${desktop.operatorStatus} saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00202") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00202-operator-anim.replace_action.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00202/anim-replace-action-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-replace-action-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "ACTIONS_REPLACED"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + assert.equal(desktop.before.objects.WebGapAnimReplaceOldA.name, "WebGapAnimReplaceOldAction"); + assert.equal(desktop.before.objects.WebGapAnimReplaceOldB.name, "WebGapAnimReplaceOldAction"); + assert.deepEqual(Object.values(desktop.after.objects).map((value) => value.name), ["WebGapAnimReplaceNewAction", "WebGapAnimReplaceNewAction", "WebGapAnimReplaceNewAction"]); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const newAnimations = before.animations?.filter((value) => value.name === "WebGapAnimReplaceNewAction" && value.targetId !== "unlinked"); + const oldAnimation = before.animations?.find((value) => value.name === "WebGapAnimReplaceOldAction" && value.unlinked); + assert.equal(newAnimations?.length, 3); + assert.ok(oldAnimation); + for (const animation of newAnimations) { + assert.equal(animation.channels.length, 1); + assert.equal(animation.channels[0].path, '["replace_target"][0]'); + assert.deepEqual(animation.channels[0].keyframes.map((value) => value.frame), [1, 3, 5]); + assert.deepEqual(animation.channels[0].keyframes.map((value) => value.value[0]), [10, 30, 50]); + } + assert.deepEqual(oldAnimation.channels.map((channel) => channel.keyframes.map((value) => value.value[0])), [[1, 3, 5], [2, 4, 6]]); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).animations, before.animations); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).animations, before.animations); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_REPLACE_ACTION_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", replacedObjectIds: newAnimations.map((value) => value.targetId), newAction: "WebGapAnimReplaceNewAction", oldActionUnlinked: oldAnimation.id, channelsPerObject: newAnimations.map((value) => value.channels.length), oldActionChannels: oldAnimation.channels.length }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00203" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00202/anim-replace-action-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} actions=old->new users=3 desktop=exact poll=true operator=${desktop.operatorStatus} saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00201") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00201-operator-anim.previewrange_set.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00201/anim-previewrange-set-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-previewrange-set-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "PREVIEW_RANGE_SET"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + assert.deepEqual(desktop.after, { use: true, start: 2, end: 6 }); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const scene = before.scenes?.find((value) => value.id === before.sceneId) ?? before.scenes?.[0]; + assert.ok(scene); + assert.deepEqual(scene.previewRange, { start: 2, end: 6 }); + assert.deepEqual(scene.sequencerTimeline, { fpsDenominator: 1000, fpsNumerator: 24000, frameEnd: 8, frameStart: 1, id: "sequencer:scene:Scene", revision: 1, schemaVersion: 1, strips: [] }); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + const reopenedScene = snapshot(engine, reopened).scenes?.find((value) => value.id === scene.id); + assert.deepEqual(reopenedScene, scene); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).scenes?.find((value) => value.id === scene.id), scene); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_PREVIEWRANGE_SET_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", sceneId: scene.id, previewRange: scene.previewRange, frameStart: scene.sequencerTimeline.frameStart, frameEnd: scene.sequencerTimeline.frameEnd }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00202" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00201/anim-previewrange-set-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} scene=${scene.id} preview=2-6 poll=true operator=${desktop.operatorStatus} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00200") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00200-operator-anim.previewrange_clear.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00200/anim-previewrange-clear-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-previewrange-clear-desktop.py"); + const run = spawnSync(blender, ["-b", "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "PREVIEW_RANGE_CLEARED"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + assert.deepEqual(desktop.after, { use: false, start: 0, end: 0 }); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const scene = before.scenes?.find((value) => value.id === before.sceneId) ?? before.scenes?.[0]; + assert.ok(scene); + assert.equal(Object.hasOwn(scene, "previewRange"), false); + assert.deepEqual(scene.sequencerTimeline, { fpsDenominator: 1000, fpsNumerator: 24000, frameEnd: 8, frameStart: 1, id: "sequencer:scene:Scene", revision: 1, schemaVersion: 1, strips: [] }); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + const reopenedScene = snapshot(engine, reopened).scenes?.find((value) => value.id === scene.id); + assert.deepEqual(reopenedScene, scene); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).scenes?.find((value) => value.id === scene.id), scene); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_PREVIEWRANGE_CLEAR_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", sceneId: scene.id, previewRange: null, frameStart: scene.sequencerTimeline.frameStart, frameEnd: scene.sequencerTimeline.frameEnd }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00201" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00200/anim-previewrange-clear-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} scene=${scene.id} preview=cleared poll=true operator=${desktop.operatorStatus} desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00199") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00199-operator-anim.paste_driver_button.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00199/anim-paste-driver-button-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const blender = process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"); + const checker = path.join(root, "tools/web/check-action-paste-driver-button-desktop.py"); + const run = spawnSync(process.env.XVFB_RUN_BIN ?? "xvfb-run", ["-a", "--server-args=-screen 0 1280x800x24", blender, "--factory-startup", "--python", checker, "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024, timeout: 45_000 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + assert.equal(fs.existsSync(desktopPath), true, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); + assert.equal(desktop.mainMutation, "DRIVER_PASTED"); + assert.equal(desktop.poll, true); + assert.equal(desktop.operatorStatus, "FINISHED"); + assert.deepEqual(desktop.after?.source?.drivers ?? desktop.source?.drivers, [{ path: '["source_target"]', index: 0, expression: "frame * 3.0 + 2.0", type: "SCRIPTED", variableCount: 0 }]); + assert.deepEqual(desktop.after?.target?.drivers ?? desktop.target?.drivers, [{ path: '["paste_target"]', index: 0, expression: "frame * 3.0 + 2.0", type: "SCRIPTED", variableCount: 0 }]); + + const engine = await factory({ wasmBinary }); + const handle = engine._web_engine_create(); + open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); + const node = before.nodes?.find((value) => value.id === "object:WebGapAnimPasteDriverButtonObject"); + assert.ok(node); + const expectedDrivers = [ + { path: '["source_target"]', arrayIndex: 0, editable: true, enabled: true, expression: "frame * 3.0 + 2.0", type: "SCRIPTED", typeCode: 1, flags: 8, influence: 0, variables: [] }, + { path: '["paste_target"]', arrayIndex: 0, editable: true, enabled: true, expression: "frame * 3.0 + 2.0", type: "SCRIPTED", typeCode: 1, flags: 8, influence: 0, variables: [] }, + ]; + assert.deepEqual(node.drivers, expectedDrivers); + const saved = output(engine, handle, engine._web_engine_save_blend, true); + const reopened = engine._web_engine_create(); + open(engine, reopened, saved); + assert.deepEqual(snapshot(engine, reopened).nodes?.find((value) => value.id === node.id)?.drivers, node.drivers); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); + const pointer = engine._malloc(malformed.byteLength); + let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); + assert.deepEqual(snapshot(engine, handle).nodes?.find((value) => value.id === node.id)?.drivers, node.drivers); + engine._web_engine_destroy(handle); + engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ANIM_PASTE_DRIVER_BUTTON_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen, poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", objectId: node.id, drivers: node.drivers }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00200" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00199/anim-paste-driver-button-local-exact-report.json"); + fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); + process.stdout.write(`generated-gap-ok task=${task} drivers=${node.drivers.length} poll=true operator=${desktop.operatorStatus} mainMutation=driver_pasted desktop=exact saveReopen=exact next=${report.nextTask}\n`); + process.exit(0); +} +if (task === "M16-GAP-00027") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00027-datablock-WindowManager.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00027/window-manager-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-window-manager-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + const engine = await factory({ wasmBinary }); const handle = engine._web_engine_create(); open(engine, handle, fs.readFileSync(fixture)); + const before = snapshot(engine, handle); assert.deepEqual(before.windowManager, desktop.windowManager); + const saved = output(engine, handle, engine._web_engine_save_blend, true); const reopened = engine._web_engine_create(); open(engine, reopened, saved); assert.deepEqual(snapshot(engine, reopened).windowManager, before.windowManager); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); const pointer = engine._malloc(malformed.byteLength); let result; + try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } + assert.notEqual(result, 0); assert.deepEqual(snapshot(engine, handle), before); engine._web_engine_destroy(handle); engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task: "M16-GAP-00027", operation: "WINDOW_MANAGER_DATABLOCK_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", windowManager: before.windowManager }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00028" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00027/window-manager-local-exact-report.json"); fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); process.stdout.write(`generated-gap-ok task=${task} windowManager=${before.windowManager.id} desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} +if (task !== "M16-GAP-00001") { process.stdout.write(`generated-gap-blocked task=${task} reason=IMPLEMENTATION_NOT_STARTED next=${task}\n`); process.exit(0); } +const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00001-datablock-Action.blend"); +assert.equal(fs.existsSync(fixture), true, "Action fixture is required"); +const bytes = fs.readFileSync(fixture); +const desktopReportPath = path.join(root, "tests/golden/M16-GAP-00001/action-desktop-report.json"); +const desktop = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-desktop.py"), "--", fixture, desktopReportPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); +assert.equal(desktop.status, 0, `${desktop.stdout ?? ""}\n${desktop.stderr ?? ""}`); +const desktopEvidence = JSON.parse(fs.readFileSync(desktopReportPath, "utf8")); +assert.equal(desktopEvidence.saveReopen, "EXACT"); assert.equal(desktopEvidence.actions.length, 1); assert.equal(desktopEvidence.actions[0].name, "AnimatedObjectAction"); +const engine = await factory({ wasmBinary }); const handle = engine._web_engine_create(); open(engine, handle, bytes); const before = snapshot(engine, handle); const animation = before.animations.find((item) => item.targetId === "object:AnimatedObject"); assert.ok(animation); assert.equal(animation.id, "action:AnimatedObjectAction:object:AnimatedObject"); assert.deepEqual(animation.channels.map((channel) => channel.path), ["location[0]", "location[1]", "location[2]"]); assert.ok(animation.channels.every((channel) => channel.keyframes.length === 2)); +const saved = output(engine, handle, engine._web_engine_save_blend, true); assert.ok(saved.byteLength > 0); const reopened = engine._web_engine_create(); open(engine, reopened, saved); const after = snapshot(engine, reopened); assert.deepEqual(after.animations, before.animations); const report = { schemaVersion: 1, task: "M16-GAP-00001", operation: "ACTION_DATABLOCK_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktopEvidence.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopReportPath).replaceAll(path.sep, "/"), saveReopen: desktopEvidence.saveReopen }, wasm: { status: "EXACT", actionId: animation.id, channelPaths: animation.channels.map((channel) => channel.path), keyframesPerChannel: animation.channels.map((channel) => channel.keyframes.length) }, saveReopen: "EXACT", nextTask: "M16-GAP-00002" }; const reportPath = path.join(root, "tests/golden/M16-GAP-00001/action-local-exact-report.json"); fs.mkdirSync(path.dirname(reportPath), { recursive: true }); fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); process.stdout.write(`generated-gap-ok task=${task} action=${animation.id} channels=${animation.channels.length} desktop=exact saveReopen=exact next=${report.nextTask}\n`); diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-generic-modifier-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-generic-modifier-desktop.py new file mode 100644 index 00000000..dd8b3387 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-generic-modifier-desktop.py @@ -0,0 +1,110 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def report(task, modifier_type, object_name): + obj = bpy.data.objects.get(object_name) + if obj is None: + raise RuntimeError(f"{object_name} is missing") + modifiers = [modifier for modifier in obj.modifiers if modifier.type == modifier_type] + if len(modifiers) != 1: + raise RuntimeError(f"expected one {modifier_type} modifier, found {len(modifiers)}") + modifier = modifiers[0] + value = { + "task": task, + "objectId": "object:" + obj.name, + "modifier": { + "name": modifier.name, + "type": modifier.type, + "typeCode": bpy.types.Modifier.bl_rna.properties["type"].enum_items[modifier.type].value, + "showViewport": bool(modifier.show_viewport), + "showRender": bool(modifier.show_render), + "showEditMode": bool(modifier.show_in_editmode), + "showOnCage": bool(modifier.show_on_cage), + }, + } + if obj.type == "MESH": + value["meshId"] = "mesh:" + obj.data.name + if modifier_type == "DECIMATE": + value["modifier"]["ratio"] = float(modifier.ratio) + value["modifier"]["iterations"] = int(modifier.iterations) + value["modifier"]["angleLimit"] = float(modifier.angle_limit) + value["modifier"]["decimateType"] = modifier.decimate_type + value["modifier"]["decimateMode"] = {"COLLAPSE": 0, "DISSOLVE": 1, "UNSUBDIV": 2}[modifier.decimate_type] + if modifier_type == "DISPLACE": + value["modifier"]["direction"] = {"X": 0, "Y": 1, "Z": 2, "NORMAL": 3, "CUSTOM_NORMAL": 4}[modifier.direction] + value["modifier"]["strength"] = float(modifier.strength) + value["modifier"]["midLevel"] = float(modifier.mid_level) + value["modifier"]["space"] = {"GLOBAL": 0, "LOCAL": 1, "NORMAL": 2}.get(modifier.texture_coords, 0) + value["modifier"]["textureMapping"] = {"GLOBAL": 1, "LOCAL": 2, "OBJECT": 3, "UV": 4}.get(modifier.texture_coords, 1) + if modifier_type == "EDGE_SPLIT": + value["modifier"]["splitAngle"] = float(modifier.split_angle) + if modifier_type == "SMOOTH": + value["modifier"]["factor"] = float(modifier.factor) + value["modifier"]["iterations"] = int(modifier.iterations) + value["modifier"]["vertexGroup"] = modifier.vertex_group + value["modifier"]["smoothFlags"] = ( + (1 if modifier.invert_vertex_group else 0) + | (2 if modifier.use_x else 0) + | (4 if modifier.use_y else 0) + | (8 if modifier.use_z else 0) + ) + if modifier_type == "SOLIDIFY": + value["modifier"]["thickness"] = float(modifier.thickness) + value["modifier"]["offset"] = float(modifier.offset) + if modifier_type == "SUBSURF": + value["modifier"]["subdivisionType"] = {"CATMULL_CLARK": 0, "SIMPLE": 1}[modifier.subdivision_type] + value["modifier"]["levels"] = int(modifier.levels) + value["modifier"]["renderLevels"] = int(modifier.render_levels) + if modifier_type == "TRIANGULATE": + value["modifier"]["quadMethod"] = {"BEAUTY": 0, "FIXED": 1, "FIXED_ALTERNATE": 2, "SHORTEST_DIAGONAL": 3, "LONGEST_DIAGONAL": 4}[modifier.quad_method] + value["modifier"]["ngonMethod"] = {"BEAUTY": 0, "CLIP": 1}[modifier.ngon_method] + if modifier_type == "WAVE": + value["modifier"]["height"] = float(modifier.height) + value["modifier"]["width"] = float(modifier.width) + value["modifier"]["speed"] = float(modifier.speed) + if modifier_type == "WEIGHTED_NORMAL": + value["modifier"]["weight"] = int(modifier.weight) + value["modifier"]["keepSharp"] = bool(modifier.keep_sharp) + value["modifier"]["useFaceInfluence"] = bool(modifier.use_face_influence) + if modifier_type == "WELD": + value["modifier"]["mergeThreshold"] = float(modifier.merge_threshold) + if modifier_type == "WIREFRAME": + value["modifier"]["thickness"] = float(modifier.thickness) + return value + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 5: + raise SystemExit("usage: blender -b --python check-generic-modifier-desktop.py -- FIXTURE REPORT TASK TYPE OBJECT") + fixture = pathlib.Path(arguments[0]).resolve() + output = pathlib.Path(arguments[1]).resolve() + task, modifier_type, object_name = arguments[2:] + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = report(task, modifier_type, object_name) + descriptor, temporary = tempfile.mkstemp(prefix="m16-generic-modifier-reopen-", suffix=".blend", dir=fixture.parent) + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = report(task, modifier_type, object_name) + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"modifier save/reopen drift: {before} != {after}") + value = {"schemaVersion": 1, "task": task, "operation": modifier_type + "_MODIFIER_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "modifier": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(value, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"generic-modifier-desktop-ok task={task} type={modifier_type} mesh={after['meshId']} saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-grease-pencil-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-grease-pencil-desktop.py new file mode 100644 index 00000000..34ce3ed1 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-grease-pencil-desktop.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python3 +import hashlib +import json +import pathlib +import sys +import tempfile +import os +import bpy + +def report(): + data = bpy.data.grease_pencils.get("GreasePencilData") + if data is None: raise RuntimeError("GreasePencilData is missing") + layers = [] + for layer in data.layers: + frames = sorted(int(frame.frame_number) for frame in layer.frames) + layers.append({"name": layer.name, "frames": frames}) + return {"name": data.name, "layers": layers} + +def main(): + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 2: raise SystemExit("usage: blender -b --python check-grease-pencil-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in args) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False); before = report(); descriptor, temporary = tempfile.mkstemp(prefix="m16-gp-reopen-", suffix=".blend"); os.close(descriptor) + try: bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True); bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False); after = report() + finally: pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: raise RuntimeError(f"Grease Pencil save/reopen drift: {before} != {after}") + value = {"schemaVersion": 1, "task": "M16-GAP-00009", "operation": "GREASE_PENCIL_DATABLOCK_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "greasePencil": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string}; output.parent.mkdir(parents=True, exist_ok=True); output.write_text(json.dumps(value, indent=2, sort_keys=True) + "\n", encoding="utf-8"); print(f"grease-pencil-desktop-ok layers={len(after['layers'])} saveReopen=exact") +if __name__ == "__main__": main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-lattice-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-lattice-desktop.py new file mode 100644 index 00000000..5f42fe66 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-lattice-desktop.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def rounded(values): + return [round(float(value), 6) for value in values] + + +def lattice_report(): + lattice = bpy.data.lattices.get("WebGapLattice") + if lattice is None: + raise RuntimeError("WebGapLattice is missing") + return { + "id": "lattice:WebGapLattice", + "name": lattice.name, + "dimensions": [lattice.points_u, lattice.points_v, lattice.points_w], + "pointCount": len(lattice.points), + "interpolation": [ + lattice.interpolation_type_u, + lattice.interpolation_type_v, + lattice.interpolation_type_w, + ], + "useOutside": bool(lattice.use_outside), + "activePoint": -1, + "vertexGroup": lattice.vertex_group, + "points": [ + { + "coDeform": rounded(point.co_deform), + "weight": round(float(point.weight_softbody), 6), + "selected": bool(point.select), + } + for point in lattice.points + ], + } + + +def main() -> None: + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-lattice-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = lattice_report() + descriptor, temporary = tempfile.mkstemp(prefix="m16-lattice-reopen-", suffix=".blend") + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = lattice_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"lattice save/reopen drift: {before} != {after}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00010", + "operation": "LATTICE_DATABLOCK_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "lattice": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"lattice-desktop-ok points={after['pointCount']} saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-library-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-library-desktop.py new file mode 100644 index 00000000..7f0c1c81 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-library-desktop.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def library_report(): + libraries = list(bpy.data.libraries) + if len(libraries) != 1: + raise RuntimeError(f"expected one library, found {len(libraries)}") + library = libraries[0] + return { + "id": "library:" + library.name, + "name": library.name, + "sourcePath": library.filepath, + "packed": library.packed_file is not None, + "readOnly": True, + "dependencyIds": [], + } + + +def main() -> None: + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-library-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = library_report() + descriptor, temporary = tempfile.mkstemp(prefix="m16-library-reopen-", suffix=".blend", dir=fixture.parent) + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = library_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"library save/reopen drift: {before} != {after}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00011", + "operation": "LIBRARY_DATABLOCK_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "library": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"library-desktop-ok id={after['id']} sourcePath={after['sourcePath']} saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-light-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-light-desktop.py new file mode 100644 index 00000000..4624a1a0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-light-desktop.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def rounded(value): + return round(float(value), 6) + + +def light_report(): + light = bpy.data.lights.get("WebGapLight") + if light is None: + raise RuntimeError("WebGapLight is missing") + return { + "id": "light:WebGapLight", + "name": light.name, + "lightType": {"POINT": 0, "SUN": 1, "SPOT": 2, "AREA": 4}[light.type], + "color": [rounded(value) for value in light.color], + "energy": rounded(light.energy), + "exposure": rounded(light.exposure), + "temperature": rounded(light.temperature), + "useTemperature": bool(light.use_temperature), + "castsShadow": bool(light.use_shadow), + "radius": rounded(light.shadow_soft_size), + "spotAngle": rounded(getattr(light, "spot_size", 0.785398)), + "spotBlend": rounded(getattr(light, "spot_blend", 0.15)), + "areaShape": {"POINT": 0, "DISK": 0, "RECTANGLE": 1, "ELLIPSE": 2}[light.shape] if light.type == "AREA" else 0, + "areaSize": rounded(light.size), + "areaSizeY": rounded(light.size_y), + "areaSpread": rounded(light.spread), + "sunAngle": rounded(getattr(light, "angle", 0.00918)), + } + + +def main() -> None: + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-light-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = light_report() + descriptor, temporary = tempfile.mkstemp(prefix="m16-light-reopen-", suffix=".blend", dir=fixture.parent) + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = light_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"light save/reopen drift: {before} != {after}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00012", + "operation": "LIGHT_DATABLOCK_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "light": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"light-desktop-ok id={after['id']} type={after['lightType']} energy={after['energy']} saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-material-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-material-desktop.py new file mode 100644 index 00000000..bc96ca82 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-material-desktop.py @@ -0,0 +1,86 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def rounded(value): + return round(float(value), 6) + + +def socket_value(node, name, fallback): + socket = node.inputs.get(name) + if socket is None: + return fallback + value = socket.default_value + if hasattr(value, "__len__"): + return [rounded(item) for item in value] + return rounded(value) + + +def material_report(): + material = bpy.data.materials.get("WebGapMaterial") + if material is None or not material.use_nodes: + raise RuntimeError("WebGapMaterial node tree is missing") + nodes = material.node_tree.nodes + principled = nodes.get("Principled BSDF") + if principled is None: + raise RuntimeError("WebGapMaterial Principled node is missing") + return { + "id": "material:WebGapMaterial", + "name": material.name, + "baseColor": socket_value(principled, "Base Color", [0.8, 0.8, 0.8, 1.0]), + "roughness": socket_value(principled, "Roughness", 0.4), + "metallic": socket_value(principled, "Metallic", 0.0), + "emissionColor": socket_value(principled, "Emission Color", [0.0, 0.0, 0.0, 1.0]), + "alpha": socket_value(principled, "Alpha", 1.0), + "ior": socket_value(principled, "IOR", 1.45), + "specularIORLevel": socket_value(principled, "Specular IOR Level", 0.5), + "transmissionWeight": socket_value(principled, "Transmission Weight", 0.0), + "coatWeight": socket_value(principled, "Coat Weight", 0.0), + "coatRoughness": socket_value(principled, "Coat Roughness", 0.03), + "emissionStrength": socket_value(principled, "Emission Strength", 1.0), + "nodeTypes": sorted(node.bl_idname for node in nodes), + "linkCount": len(material.node_tree.links), + } + + +def main() -> None: + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-material-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = material_report() + descriptor, temporary = tempfile.mkstemp(prefix="m16-material-reopen-", suffix=".blend", dir=fixture.parent) + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = material_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"material save/reopen drift: {before} != {after}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00013", + "operation": "MATERIAL_DATABLOCK_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "material": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"material-desktop-ok id={after['id']} nodes={len(after['nodeTypes'])} links={after['linkCount']} saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-mesh-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-mesh-desktop.py new file mode 100644 index 00000000..757a0552 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-mesh-desktop.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def rounded(value): + return round(float(value), 6) + + +def mesh_report(): + mesh = bpy.data.meshes.get("WebGapMesh") + if mesh is None: + raise RuntimeError("WebGapMesh is missing") + mesh.calc_loop_triangles() + positions = [rounded(value) for vertex in mesh.vertices for value in vertex.co] + indices = [index for triangle in mesh.loop_triangles for index in triangle.vertices] + uv_layer = mesh.uv_layers.get("WebGapUV") + uvs = [rounded(value) for loop in uv_layer.data for value in loop.uv] if uv_layer else [] + return { + "id": "mesh:WebGapMesh", + "name": mesh.name, + "vertexCount": len(mesh.vertices), + "edgeCount": len(mesh.edges), + "faceCount": len(mesh.polygons), + "cornerCount": len(mesh.loops), + "triangleCount": len(mesh.loop_triangles), + "positions": positions, + "indices": indices, + "uvLayers": [layer.name for layer in mesh.uv_layers], + "uvs": uvs, + } + + +def main() -> None: + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-mesh-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = mesh_report() + descriptor, temporary = tempfile.mkstemp(prefix="m16-mesh-reopen-", suffix=".blend", dir=fixture.parent) + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = mesh_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"mesh save/reopen drift: {before} != {after}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00014", + "operation": "MESH_DATABLOCK_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "mesh": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"mesh-desktop-ok id={after['id']} vertices={after['vertexCount']} triangles={after['triangleCount']} saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-metaball-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-metaball-desktop.py new file mode 100644 index 00000000..b0fe9d4e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-metaball-desktop.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def rounded(value): + return round(float(value), 6) + + +def report(): + data = bpy.data.metaballs.get("WebGapMetaBall") + if data is None: + raise RuntimeError("WebGapMetaBall is missing") + return { + "id": "metaball:WebGapMetaBall", + "name": data.name, + "resolution": rounded(data.resolution), + "renderResolution": rounded(data.render_resolution), + "pointCount": len(data.elements), + "elements": [{"position": [rounded(v) for v in item.co], "radius": rounded(item.radius), "scale": [rounded(item.size_x), rounded(item.size_y), rounded(item.size_z)]} for item in data.elements], + } + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-metaball-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = report() + descriptor, temporary = tempfile.mkstemp(prefix="m16-metaball-reopen-", suffix=".blend", dir=fixture.parent) + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"metaball save/reopen drift: {before} != {after}") + value = {"schemaVersion": 1, "task": "M16-GAP-00015", "operation": "METABALL_DATABLOCK_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "metaball": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(value, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"metaball-desktop-ok id={after['id']} points={after['pointCount']} saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-nodetree-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-nodetree-desktop.py new file mode 100644 index 00000000..a34c84d9 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-nodetree-desktop.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def graph_report(): + material = bpy.data.materials.get("WebGapNodeTreeMaterial") + if material is None or not material.use_nodes: + raise RuntimeError("WebGapNodeTreeMaterial is missing") + tree = material.node_tree + return { + "id": "nodetree:WebGapNodeTreeMaterial", + "name": tree.name, + "nodeTypes": sorted(node.bl_idname for node in tree.nodes), + "nodeNames": sorted(node.name for node in tree.nodes), + "linkCount": len(tree.links), + "links": sorted([[link.from_node.bl_idname, link.from_socket.name, link.to_node.bl_idname, link.to_socket.name] for link in tree.links]), + } + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-nodetree-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = graph_report() + descriptor, temporary = tempfile.mkstemp(prefix="m16-nodetree-reopen-", suffix=".blend", dir=fixture.parent) + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = graph_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"node tree save/reopen drift: {before} != {after}") + report = {"schemaVersion": 1, "task": "M16-GAP-00016", "operation": "NODETREE_DATABLOCK_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "nodeTree": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"nodetree-desktop-ok id={after['id']} nodes={len(after['nodeTypes'])} links={after['linkCount']} saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-object-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-object-desktop.py new file mode 100644 index 00000000..80152123 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-object-desktop.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def rounded(value): + return round(float(value), 6) + + +def report(): + obj = bpy.data.objects.get("WebGapObject") + if obj is None: + raise RuntimeError("WebGapObject is missing") + return {"id": "object:WebGapObject", "name": obj.name, "type": obj.type, "visible": not obj.hide_get(), "selectable": not obj.hide_select, "location": [rounded(v) for v in obj.location], "rotationEuler": [rounded(v) for v in obj.rotation_euler], "scale": [rounded(v) for v in obj.scale], "parent": obj.parent.name if obj.parent else None} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-object-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = report() + descriptor, temporary = tempfile.mkstemp(prefix="m16-object-reopen-", suffix=".blend", dir=fixture.parent) + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"object save/reopen drift: {before} != {after}") + value = {"schemaVersion": 1, "task": "M16-GAP-00017", "operation": "OBJECT_DATABLOCK_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "object": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(value, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"object-desktop-ok id={after['id']} type={after['type']} saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-particle-settings-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-particle-settings-desktop.py new file mode 100644 index 00000000..cecc6b2d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-particle-settings-desktop.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def rounded(value): + return round(float(value), 6) + + +def settings_report(): + settings = bpy.data.particles.get("WebGapParticleSettings") + if settings is None: + raise RuntimeError("WebGapParticleSettings is missing") + return { + "id": "particle-settings:" + settings.name, + "name": settings.name, + "type": int({"EMITTER": 0, "HAIR": 1}.get(settings.type, -1)), + "from": int({"FACE": 0, "VERT": 1, "VOLUME": 2}.get(settings.emit_from, -1)), + "distribution": int({"JIT": 0, "RAND": 1, "GRID": 2}.get(settings.distribution, -1)), + "physicsType": int({"NEWTON": 0, "KEYED": 1, "BOIDS": 2, "NO": 3}.get(settings.physics_type, -1)), + "totalParticles": int(settings.count), + "start": rounded(settings.frame_start), + "end": rounded(settings.frame_end), + "lifetime": rounded(settings.lifetime), + "size": rounded(settings.particle_size), + "drawSize": rounded(settings.display_size), + } + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-particle-settings-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = settings_report() + descriptor, temporary = tempfile.mkstemp(prefix="m16-particle-settings-reopen-", suffix=".blend", dir=fixture.parent) + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = settings_report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"particle settings save/reopen drift: {before} != {after}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00018", + "operation": "PARTICLE_SETTINGS_DATABLOCK_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "particleSettings": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"particle-settings-desktop-ok id={after['id']} count={after['totalParticles']} saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-pointcloud-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-pointcloud-desktop.py new file mode 100644 index 00000000..5471de22 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-pointcloud-desktop.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def rounded(value): + return round(float(value), 6) + + +def report(): + data = bpy.data.pointclouds.get("WebGapPointCloud") + if data is None: + raise RuntimeError("WebGapPointCloud is missing") + positions = [0.0] * (len(data.points) * 3) + data.points.foreach_get("co", positions) + radius = data.attributes.get("radius") + radii = [0.0] * len(data.points) + if radius is not None: + radius.data.foreach_get("value", radii) + return { + "id": "pointcloud:" + data.name, + "name": data.name, + "pointCount": len(data.points), + "controlPoints": [rounded(value) for value in positions], + "radii": [rounded(value) for value in radii], + } + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-pointcloud-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = report() + descriptor, temporary = tempfile.mkstemp(prefix="m16-pointcloud-reopen-", suffix=".blend", dir=fixture.parent) + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"point cloud save/reopen drift: {before} != {after}") + value = { + "schemaVersion": 1, + "task": "M16-GAP-00019", + "operation": "POINT_CLOUD_DATABLOCK_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "pointCloud": after, + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(value, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"pointcloud-desktop-ok id={after['id']} points={after['pointCount']} saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-scene-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-scene-desktop.py new file mode 100644 index 00000000..1ce46ae5 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-scene-desktop.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def report(): + scene = bpy.data.scenes.get("WebGapScene") + if scene is None: + raise RuntimeError("WebGapScene is missing") + return { + "id": "scene:" + scene.name, + "name": scene.name, + "frameCurrent": int(scene.frame_current), + "frameStart": int(scene.frame_start), + "frameEnd": int(scene.frame_end), + "fps": round(float(scene.render.fps), 6), + "fpsBase": round(float(scene.render.fps_base), 6), + "unitSystem": {"NONE": 0, "METRIC": 1, "IMPERIAL": 2}.get(scene.unit_settings.system, -1), + "unitScale": round(float(scene.unit_settings.scale_length), 6), + "renderEngine": scene.render.engine, + } + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-scene-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = report() + descriptor, temporary = tempfile.mkstemp(prefix="m16-scene-reopen-", suffix=".blend", dir=fixture.parent) + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"scene save/reopen drift: {before} != {after}") + value = {"schemaVersion": 1, "task": "M16-GAP-00020", "operation": "SCENE_DATABLOCK_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "scene": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(value, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"scene-desktop-ok id={after['id']} frames={after['frameStart']}-{after['frameEnd']} saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-screen-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-screen-desktop.py new file mode 100644 index 00000000..a5148586 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-screen-desktop.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def report(): + screen = bpy.data.screens.get("WebGapScreen") + if screen is None: + raise RuntimeError("WebGapScreen is missing") + return { + "id": "screen:" + screen.name, + "name": screen.name, + "areaCount": len(screen.areas), + "editors": sorted(area.type for area in screen.areas), + "regionCount": sum(len(area.regions) for area in screen.areas), + } + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-screen-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=True) + before = report() + descriptor, temporary = tempfile.mkstemp(prefix="m16-screen-reopen-", suffix=".blend", dir=fixture.parent) + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=True) + after = report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"screen save/reopen drift: {before} != {after}") + value = {"schemaVersion": 1, "task": "M16-GAP-00021", "operation": "SCREEN_DATABLOCK_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "screen": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(value, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"screen-desktop-ok id={after['id']} areas={after['areaCount']} saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-sound-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-sound-desktop.py new file mode 100644 index 00000000..a9a69579 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-sound-desktop.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def report(): + sound = bpy.data.sounds.get("WebGapSound") + if sound is None: + raise RuntimeError("WebGapSound is missing") + return { + "id": "sound:" + sound.name, + "name": sound.name, + "sourcePath": sound.filepath, + "packed": sound.packed_file is not None, + "volume": 0.0, + "pitch": 0.0, + "audioChannels": {"MONO": 1, "STEREO": 2, "STEREO_LFE": 3, "SURROUND4": 4, "SURROUND5_1": 6, "SURROUND7_1": 8}.get(sound.channels, 0), + "sampleRate": int(sound.samplerate), + } + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-sound-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = report() + descriptor, temporary = tempfile.mkstemp(prefix="m16-sound-reopen-", suffix=".blend", dir=fixture.parent) + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"sound save/reopen drift: {before} != {after}") + value = {"schemaVersion": 1, "task": "M16-GAP-00022", "operation": "SOUND_DATABLOCK_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "sound": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(value, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"sound-desktop-ok id={after['id']} volume={after['volume']} saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-speaker-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-speaker-desktop.py new file mode 100644 index 00000000..23614128 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-speaker-desktop.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def report(): + speaker = bpy.data.speakers.get("WebGapSpeaker") + if speaker is None: + raise RuntimeError("WebGapSpeaker is missing") + return { + "id": "speaker:" + speaker.name, + "name": speaker.name, + "soundId": "sound:" + speaker.sound.name if speaker.sound else None, + "volumeMax": float(speaker.volume_max), + "volumeMin": float(speaker.volume_min), + "distanceMax": float(speaker.distance_max), + "distanceReference": float(speaker.distance_reference), + "attenuation": float(speaker.attenuation), + "coneAngleOuter": float(speaker.cone_angle_outer), + "coneAngleInner": float(speaker.cone_angle_inner), + "coneVolumeOuter": float(speaker.cone_volume_outer), + "volume": float(speaker.volume), + "pitch": float(speaker.pitch), + } + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-speaker-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = report() + descriptor, temporary = tempfile.mkstemp(prefix="m16-speaker-reopen-", suffix=".blend", dir=fixture.parent) + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"speaker save/reopen drift: {before} != {after}") + value = {"schemaVersion": 1, "task": "M16-GAP-00023", "operation": "SPEAKER_DATABLOCK_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "speaker": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(value, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"speaker-desktop-ok id={after['id']} volume={after['volume']} saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-text-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-text-desktop.py new file mode 100644 index 00000000..a186be4a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-text-desktop.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def report(): + text = bpy.data.texts.get("WebGapText") + if text is None: + raise RuntimeError("WebGapText is missing") + source = text.as_string() + return { + "id": "text:" + text.name, + "name": text.name, + "source": source, + "sourceSha256": hashlib.sha256(source.encode("utf-8")).hexdigest(), + "byteLength": len(source.encode("utf-8")), + "lineCount": len(source.splitlines()) + (1 if source.endswith("\n") else 0), + "sourcePath": text.filepath, + "internal": not bool(text.filepath), + "isDirty": text.is_dirty, + "useModule": text.use_module, + } + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-text-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = report() + descriptor, temporary = tempfile.mkstemp(prefix="m16-text-reopen-", suffix=".blend", dir=fixture.parent) + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"text save/reopen drift: {before} != {after}") + value = {"schemaVersion": 1, "task": "M16-GAP-00024", "operation": "TEXT_DATABLOCK_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "text": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(value, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"text-desktop-ok id={after['id']} bytes={after['byteLength']} saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-texture-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-texture-desktop.py new file mode 100644 index 00000000..d50641b3 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-texture-desktop.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def report(): + texture = bpy.data.textures.get("WebGapTexture") + if texture is None: + raise RuntimeError("WebGapTexture is missing") + return { + "id": "texture:" + texture.name, + "name": texture.name, + "type": {"NONE": 0, "CLOUDS": 1, "WOOD": 2, "MARBLE": 3, "MAGIC": 4, "BLEND": 5, "STUCCI": 6, "NOISE": 7, "IMAGE": 8, "MUSGRAVE": 9, "VORONOI": 10, "DISTORTED_NOISE": 11}.get(texture.type, 0), + "noiseScale": float(texture.noise_scale), + "noiseDepth": int(texture.noise_depth), + "intensity": float(texture.intensity), + "contrast": float(texture.contrast), + "saturation": float(texture.saturation), + } + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-texture-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = report() + descriptor, temporary = tempfile.mkstemp(prefix="m16-texture-reopen-", suffix=".blend", dir=fixture.parent) + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"texture save/reopen drift: {before} != {after}") + value = {"schemaVersion": 1, "task": "M16-GAP-00025", "operation": "TEXTURE_DATABLOCK_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "texture": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(value, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"texture-desktop-ok id={after['id']} type={after['type']} saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-volume-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-volume-desktop.py new file mode 100644 index 00000000..89bfbc45 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-volume-desktop.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def report(): + volume = bpy.data.volumes.get("WebGapVolume") + if volume is None: + raise RuntimeError("WebGapVolume is missing") + return {"id": "volume:" + volume.name, "name": volume.name, "sourcePath": volume.filepath, "displayDensity": float(volume.display.density), "interpolation": "NEAREST" if volume.display.interpolation_method == "CLOSEST" else "LINEAR", "stepSize": float(volume.render.step_size), "velocityGrid": volume.velocity_grid, "velocityScale": 1.0} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-volume-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = report() + descriptor, temporary = tempfile.mkstemp(prefix="m16-volume-reopen-", suffix=".blend", dir=fixture.parent) + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"volume save/reopen drift: {before} != {after}") + value = {"schemaVersion": 1, "task": "M16-GAP-00026", "operation": "VOLUME_DATABLOCK_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "volume": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(value, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"volume-desktop-ok id={after['id']} density={after['displayDensity']} saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-window-manager-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-window-manager-desktop.py new file mode 100644 index 00000000..46255348 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-window-manager-desktop.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python3 +import hashlib +import json +import os +import pathlib +import sys +import tempfile + +import bpy + + +def report(): + manager = bpy.context.window_manager + return {"id": "window-manager:" + manager.name, "name": manager.name, "presetName": manager.preset_name, "windowCount": len(manager.windows), "interfaceLocked": manager.is_interface_locked} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-window-manager-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = report() + descriptor, temporary = tempfile.mkstemp(prefix="m16-window-manager-reopen-", suffix=".blend", dir=fixture.parent) + os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary, load_ui=False) + after = report() + finally: + pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: + raise RuntimeError(f"window manager save/reopen drift: {before} != {after}") + value = {"schemaVersion": 1, "task": "M16-GAP-00027", "operation": "WINDOW_MANAGER_DATABLOCK_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "windowManager": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(value, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(f"window-manager-desktop-ok id={after['id']} windows={after['windowCount']} saveReopen=exact") + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-workspace-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-workspace-desktop.py new file mode 100644 index 00000000..6e41d4a2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-workspace-desktop.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python3 +import hashlib, json, os, pathlib, sys, tempfile +import bpy + +def report(): + workspace = bpy.data.workspaces.get("WebGapWorkspace") + if workspace is None: raise RuntimeError("WebGapWorkspace is missing") + return {"id": "workspace:" + workspace.name, "name": workspace.name, "screenCount": len(workspace.screens)} + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: raise SystemExit("usage: blender -b --python check-workspace-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + bpy.ops.wm.open_mainfile(filepath=str(fixture)); before = report() + descriptor, temporary = tempfile.mkstemp(prefix="m16-workspace-reopen-", suffix=".blend", dir=fixture.parent); os.close(descriptor) + try: + bpy.ops.wm.save_as_mainfile(filepath=temporary, check_existing=False, compress=True); bpy.ops.wm.open_mainfile(filepath=temporary); after = report() + finally: pathlib.Path(temporary).unlink(missing_ok=True) + if before != after: raise RuntimeError(f"workspace save/reopen drift: {before} != {after}") + value = {"schemaVersion": 1, "task": "M16-GAP-00028", "operation": "WORKSPACE_DATABLOCK_DESKTOP", "fixture": str(fixture), "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), "workspace": after, "saveReopen": "EXACT", "blenderVersion": bpy.app.version_string} + output.parent.mkdir(parents=True, exist_ok=True); output.write_text(json.dumps(value, indent=2, sort_keys=True) + "\n", encoding="utf-8"); print(f"workspace-desktop-ok id={after['id']} saveReopen=exact") +if __name__ == "__main__": main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-world-desktop.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-world-desktop.py new file mode 100644 index 00000000..2a765eed --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-world-desktop.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python3 +import hashlib,json,os,pathlib,sys,tempfile +import bpy +def report(): + world=bpy.data.worlds.get("WebGapWorld") + if world is None: raise RuntimeError("WebGapWorld is missing") + mist=world.mist_settings + return {"id":"world:"+world.name,"name":world.name,"color":list(world.color),"exposure":0.0,"backgroundVisible":True,"environmentStrength":1.0,"mist":{"enabled":mist.use_mist,"type":"QUADRATIC","start":float(mist.start),"depth":float(mist.depth),"intensity":float(mist.intensity),"height":0.0}} +def main(): + args=sys.argv[sys.argv.index("--")+1:] + if len(args)!=2: raise SystemExit("usage: blender -b --python check-world-desktop.py -- FIXTURE REPORT") + fixture,output=(pathlib.Path(v).resolve() for v in args); bpy.ops.wm.open_mainfile(filepath=str(fixture),load_ui=False); before=report(); fd,tmp=tempfile.mkstemp(prefix="m16-world-reopen-",suffix=".blend",dir=fixture.parent); os.close(fd) + try: bpy.ops.wm.save_as_mainfile(filepath=tmp,check_existing=False,compress=True); bpy.ops.wm.open_mainfile(filepath=tmp,load_ui=False); after=report() + finally: pathlib.Path(tmp).unlink(missing_ok=True) + if before!=after: raise RuntimeError(f"world save/reopen drift: {before} != {after}") + value={"schemaVersion":1,"task":"M16-GAP-00029","operation":"WORLD_DATABLOCK_DESKTOP","fixture":str(fixture),"fixtureSha256":hashlib.sha256(fixture.read_bytes()).hexdigest(),"world":after,"saveReopen":"EXACT","blenderVersion":bpy.app.version_string}; output.parent.mkdir(parents=True,exist_ok=True); output.write_text(json.dumps(value,indent=2,sort_keys=True)+"\n",encoding="utf-8"); print(f"world-desktop-ok id={after['id']} saveReopen=exact") +if __name__=="__main__": main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generate-brush-fixture.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generate-brush-fixture.py new file mode 100644 index 00000000..ac343bda --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generate-brush-fixture.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python3 +import sys +import bpy + +def main(output): + bpy.ops.wm.read_factory_settings(use_empty=True) + brush = bpy.data.brushes.new("WebGapBrush") + brush.size = 42 + brush.strength = 0.65 + brush.hardness = 0.8 + brush.spacing = 17 + brush.jitter = 0.2 + brush.sculpt_brush_type = "DRAW" + bpy.ops.wm.save_as_mainfile(filepath=output, compress=True) + +if __name__ == "__main__": + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 1: raise SystemExit("usage: blender -b --python generate-brush-fixture.py -- OUTPUT") + main(args[0]) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generate-camera-fixture.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generate-camera-fixture.py new file mode 100644 index 00000000..b07666d4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generate-camera-fixture.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python3 +import sys +import bpy + +def main(output): + bpy.ops.wm.read_factory_settings(use_empty=True) + camera = bpy.data.cameras.new("WebGapCamera") + camera.lens = 52.0 + camera.clip_start = 0.1 + camera.clip_end = 2500.0 + camera.sensor_width = 36.0 + camera.type = "PERSP" + object_ = bpy.data.objects.new("WebGapCameraObject", camera) + bpy.context.collection.objects.link(object_) + object_.location = (1.0, -2.0, 3.0) + bpy.ops.wm.save_as_mainfile(filepath=output, compress=True) + +if __name__ == "__main__": + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 1: raise SystemExit("usage: blender -b --python generate-camera-fixture.py -- OUTPUT") + main(args[0]) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generate-collection-fixture.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generate-collection-fixture.py new file mode 100644 index 00000000..544e388c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generate-collection-fixture.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python3 +import sys +import bpy + +def main(output): + bpy.ops.wm.read_factory_settings(use_empty=True) + parent = bpy.data.collections.new("WebGapCollection") + child = bpy.data.collections.new("WebGapChild") + bpy.context.scene.collection.children.link(parent) + parent.children.link(child) + mesh = bpy.data.meshes.new("WebGapCollectionMesh") + mesh.from_pydata([(0, 0, 0), (1, 0, 0), (0, 1, 0)], [], [(0, 1, 2)]) + object_ = bpy.data.objects.new("WebGapCollectionObject", mesh) + child.objects.link(object_) + bpy.ops.wm.save_as_mainfile(filepath=output, compress=True) + +if __name__ == "__main__": + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 1: raise SystemExit("usage: blender -b --python generate-collection-fixture.py -- OUTPUT") + main(args[0]) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generate-curve-fixture.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generate-curve-fixture.py new file mode 100644 index 00000000..1bc7bd11 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generate-curve-fixture.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +import sys +import bpy + +def main(output): + bpy.ops.wm.read_factory_settings(use_empty=True) + curve = bpy.data.curves.new("WebGapCurve", type="CURVE") + curve.dimensions = "3D" + curve.resolution_u = 8 + spline = curve.splines.new("BEZIER") + spline.bezier_points.add(2) + points = [((-1, 0, 0), (1, 1, 1)), ((0, 1, 0.5), (1, 1, 1)), ((1, 0, 1), (1, 1, 1))] + for point, (co, handle) in zip(spline.bezier_points, points): + point.co = co + point.handle_left_type = "AUTO" + point.handle_right_type = "AUTO" + spline.use_cyclic_u = False + object_ = bpy.data.objects.new("WebGapCurveObject", curve) + bpy.context.collection.objects.link(object_) + bpy.ops.wm.save_as_mainfile(filepath=output, compress=True) + +if __name__ == "__main__": + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 1: raise SystemExit("usage: blender -b --python generate-curve-fixture.py -- OUTPUT") + main(args[0]) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generate-curves-fixture.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generate-curves-fixture.py new file mode 100644 index 00000000..a2a20834 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generate-curves-fixture.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python3 +import sys +import bpy + +def main(output): + bpy.ops.wm.read_factory_settings(use_empty=True) + legacy = bpy.data.curves.new("WebGapCurvesSeed", "CURVE") + legacy.dimensions = "3D" + spline = legacy.splines.new("BEZIER") + spline.bezier_points.add(3) + for point, co in zip(spline.bezier_points, ((-1.5, 0, 0), (-0.5, 0.3, 0.5), (0.5, 0, 0), (1.5, 0.3, 0.5))): + point.co = co + point.handle_left_type = "AUTO" + point.handle_right_type = "AUTO" + object_ = bpy.data.objects.new("WebGapCurvesObject", legacy) + bpy.context.collection.objects.link(object_) + bpy.context.view_layer.objects.active = object_ + object_.select_set(True) + bpy.ops.object.convert(target="CURVES") + if legacy != object_.data: bpy.data.curves.remove(legacy, do_unlink=True) + object_.data.name = "WebGapCurves" + radius = object_.data.attributes.get("radius") or object_.data.attributes.new("radius", "FLOAT", "POINT") + for index, item in enumerate(radius.data): item.value = 0.03 + index * 0.005 + bpy.ops.wm.save_as_mainfile(filepath=output, compress=True) + +if __name__ == "__main__": + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 1: raise SystemExit("usage: blender -b --python generate-curves-fixture.py -- OUTPUT") + main(args[0]) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generate-freestyle-fixture.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generate-freestyle-fixture.py new file mode 100644 index 00000000..60d4e5b4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generate-freestyle-fixture.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python3 +import sys +import bpy + +def main(output): + bpy.ops.wm.read_factory_settings(use_empty=True) + style = bpy.data.linestyles.new("WebGapLineStyle") + style.color = (0.2, 0.4, 0.8) + style.alpha = 0.75 + style.thickness = 2.5 + style.use_chaining = True + style.use_dashed_line = True + scene = bpy.context.scene + scene.render.engine = "BLENDER_WORKBENCH" + scene.render.use_freestyle = True + line_set = scene.view_layers[0].freestyle_settings.linesets.new("WebGapLineSet") + line_set.linestyle = style + bpy.ops.wm.save_as_mainfile(filepath=output, compress=True) + +if __name__ == "__main__": + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 1: raise SystemExit("usage: blender -b --python generate-freestyle-fixture.py -- OUTPUT") + main(args[0]) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00010.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00010.py new file mode 100644 index 00000000..7915e1cd --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00010.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def main(output: pathlib.Path) -> None: + bpy.ops.wm.read_factory_settings(use_empty=True) + lattice = bpy.data.lattices.new("WebGapLattice") + lattice.points_u = 3 + lattice.points_v = 2 + lattice.points_w = 2 + lattice.interpolation_type_u = "KEY_LINEAR" + lattice.interpolation_type_v = "KEY_CARDINAL" + lattice.interpolation_type_w = "KEY_BSPLINE" + lattice.use_outside = True + lattice.vertex_group = "WebGapInfluence" + lattice_object = bpy.data.objects.new("WebGapLatticeObject", lattice) + bpy.context.collection.objects.link(lattice_object) + for index, point in enumerate(lattice.points): + point.co_deform = ( + point.co.x + 0.125 * (index % 3), + point.co.y - 0.0625 * (index % 2), + point.co.z + 0.25 * (index // 6), + ) + point.weight_softbody = 0.5 + index * 0.125 + point.select = index in {0, len(lattice.points) - 1} + bpy.ops.wm.save_as_mainfile(filepath=str(output), compress=True) + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00010.py -- OUTPUT") + main(pathlib.Path(arguments[0]).resolve()) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00011.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00011.py new file mode 100644 index 00000000..e8b25e79 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00011.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +LIBRARY_NAME = "WebGapLibrary.blend" +OBJECT_NAME = "WebGapLibraryObject" + + +def reset() -> None: + bpy.ops.wm.read_factory_settings(use_empty=True) + + +def create_source(path: pathlib.Path) -> None: + reset() + mesh = bpy.data.meshes.new("WebGapLibraryMesh") + mesh.from_pydata([(-1.0, 0.0, 0.0), (1.0, 0.0, 0.0), (0.0, 1.0, 0.0)], [], [(0, 1, 2)]) + obj = bpy.data.objects.new(OBJECT_NAME, mesh) + bpy.context.scene.collection.objects.link(obj) + bpy.ops.wm.save_as_mainfile(filepath=str(path), check_existing=False, compress=True) + + +def create_fixture(output: pathlib.Path) -> None: + source = output.with_name(LIBRARY_NAME) + create_source(source) + reset() + with bpy.data.libraries.load(str(source), link=True) as (data_from, data_to): + if OBJECT_NAME not in data_from.objects: + raise RuntimeError("source object is missing") + data_to.objects = [OBJECT_NAME] + linked = data_to.objects[0] + if linked is None: + raise RuntimeError("linked object is missing") + bpy.context.scene.collection.objects.link(linked) + bpy.ops.wm.save_as_mainfile(filepath=str(output), check_existing=False, compress=True) + + +def main(output: pathlib.Path) -> None: + output.parent.mkdir(parents=True, exist_ok=True) + create_fixture(output.resolve()) + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00011.py -- OUTPUT") + main(pathlib.Path(arguments[0])) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00012.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00012.py new file mode 100644 index 00000000..8da40045 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00012.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def main(output: pathlib.Path) -> None: + bpy.ops.wm.read_factory_settings(use_empty=True) + light = bpy.data.lights.new("WebGapLight", type="AREA") + light.color = (0.25, 0.5, 0.75) + light.energy = 400.0 + light.exposure = 1.0 + light.temperature = 5000.0 + light.use_temperature = True + light.use_shadow = False + light.shadow_soft_size = 0.3 + light.shape = "RECTANGLE" + light.size = 3.0 + light.size_y = 2.0 + light.spread = 2.4 + light_object = bpy.data.objects.new("WebGapLightObject", light) + bpy.context.collection.objects.link(light_object) + bpy.ops.wm.save_as_mainfile(filepath=str(output.resolve()), check_existing=False, compress=True) + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00012.py -- OUTPUT") + main(pathlib.Path(arguments[0])) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00013.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00013.py new file mode 100644 index 00000000..02549d53 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00013.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def set_socket(node, name, value): + socket = node.inputs.get(name) + if socket is not None: + socket.default_value = value + + +def main(output: pathlib.Path) -> None: + bpy.ops.wm.read_factory_settings(use_empty=True) + material = bpy.data.materials.new("WebGapMaterial") + material.use_nodes = True + material.diffuse_color = (0.2, 0.4, 0.8, 0.9) + nodes = material.node_tree.nodes + links = material.node_tree.links + principled = nodes.get("Principled BSDF") + output_node = nodes.get("Material Output") + if principled is None or output_node is None: + raise RuntimeError("default Principled/Output nodes are missing") + set_socket(principled, "Base Color", (0.2, 0.4, 0.8, 0.9)) + set_socket(principled, "Metallic", 0.35) + set_socket(principled, "Roughness", 0.6) + set_socket(principled, "IOR", 1.6) + set_socket(principled, "Specular IOR Level", 0.35) + set_socket(principled, "Transmission Weight", 0.27) + set_socket(principled, "Coat Weight", 0.64) + set_socket(principled, "Coat Roughness", 0.12) + set_socket(principled, "Emission Color", (0.05, 0.1, 0.2, 1.0)) + set_socket(principled, "Emission Strength", 3.5) + set_socket(principled, "Alpha", 0.9) + if not any(link.from_node == principled and link.to_node == output_node for link in links): + links.new(principled.outputs["BSDF"], output_node.inputs["Surface"]) + mesh = bpy.data.meshes.new("WebGapMaterialMesh") + mesh.from_pydata([(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (0.0, 1.0, 0.0)], [], [(0, 1, 2)]) + mesh.materials.append(material) + obj = bpy.data.objects.new("WebGapMaterialObject", mesh) + bpy.context.collection.objects.link(obj) + bpy.ops.wm.save_as_mainfile(filepath=str(output.resolve()), check_existing=False, compress=True) + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00013.py -- OUTPUT") + main(pathlib.Path(arguments[0])) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00014.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00014.py new file mode 100644 index 00000000..3291cf6e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00014.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def main(output: pathlib.Path) -> None: + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.25), (-1.0, 1.0, 0.25)], + [], + [(0, 1, 2, 3)], + ) + uv_layer = mesh.uv_layers.new(name="WebGapUV") + for loop, uv in zip(uv_layer.data, [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 1.0)]): + loop.uv = uv + mesh.update() + mesh_object = bpy.data.objects.new("WebGapMeshObject", mesh) + bpy.context.collection.objects.link(mesh_object) + bpy.ops.wm.save_as_mainfile(filepath=str(output.resolve()), check_existing=False, compress=True) + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00014.py -- OUTPUT") + main(pathlib.Path(arguments[0])) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00015.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00015.py new file mode 100644 index 00000000..9ce601d2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00015.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def main(output: pathlib.Path) -> None: + bpy.ops.wm.read_factory_settings(use_empty=True) + data = bpy.data.metaballs.new("WebGapMetaBall") + data.resolution = 0.2 + data.render_resolution = 0.1 + first = data.elements.new() + first.co = (-0.65, 0.0, 0.4) + first.radius = 0.75 + first.size_x = 1.1 + first.size_y = 0.9 + first.size_z = 1.2 + second = data.elements.new() + second.co = (0.65, 0.0, 0.4) + second.radius = 0.55 + second.size_x = 0.8 + second.size_y = 1.05 + second.size_z = 0.95 + obj = bpy.data.objects.new("WebGapMetaBallObject", data) + bpy.context.collection.objects.link(obj) + bpy.ops.wm.save_as_mainfile(filepath=str(output.resolve()), check_existing=False, compress=True) + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00015.py -- OUTPUT") + main(pathlib.Path(arguments[0])) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00016.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00016.py new file mode 100644 index 00000000..928e251d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00016.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def main(output: pathlib.Path) -> None: + bpy.ops.wm.read_factory_settings(use_empty=True) + material = bpy.data.materials.new("WebGapNodeTreeMaterial") + material.use_nodes = True + nodes = material.node_tree.nodes + links = material.node_tree.links + principled = nodes.get("Principled BSDF") + output_node = nodes.get("Material Output") + if principled is None or output_node is None: + raise RuntimeError("default shader nodes are missing") + rgb = nodes.new("ShaderNodeRGB") + rgb.name = "WebGapRGB" + rgb.outputs["Color"].default_value = (0.1, 0.3, 0.7, 1.0) + links.new(rgb.outputs["Color"], principled.inputs["Base Color"]) + links.new(principled.outputs["BSDF"], output_node.inputs["Surface"]) + mesh = bpy.data.meshes.new("WebGapNodeTreeMesh") + mesh.from_pydata([(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (0.0, 1.0, 0.0)], [], [(0, 1, 2)]) + mesh.materials.append(material) + obj = bpy.data.objects.new("WebGapNodeTreeObject", mesh) + bpy.context.collection.objects.link(obj) + bpy.ops.wm.save_as_mainfile(filepath=str(output.resolve()), check_existing=False, compress=True) + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00016.py -- OUTPUT") + main(pathlib.Path(arguments[0])) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00017.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00017.py new file mode 100644 index 00000000..239128d2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00017.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def main(output: pathlib.Path) -> None: + bpy.ops.wm.read_factory_settings(use_empty=True) + obj = bpy.data.objects.new("WebGapObject", None) + obj.location = (1.25, -2.5, 3.75) + obj.rotation_mode = "XYZ" + obj.rotation_euler = (0.2, -0.35, 0.5) + obj.scale = (1.5, 0.75, 2.0) + obj.hide_viewport = False + obj.hide_render = False + obj.hide_set(False) + bpy.context.collection.objects.link(obj) + bpy.ops.wm.save_as_mainfile(filepath=str(output.resolve()), check_existing=False, compress=True) + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00017.py -- OUTPUT") + main(pathlib.Path(arguments[0])) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00018.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00018.py new file mode 100644 index 00000000..f69a7270 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00018.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def main(output: pathlib.Path) -> None: + bpy.ops.wm.read_factory_settings(use_empty=True) + settings = bpy.data.particles.new("WebGapParticleSettings") + settings.use_fake_user = True + settings.type = "EMITTER" + settings.emit_from = "FACE" + settings.physics_type = "NEWTON" + settings.distribution = "JIT" + settings.count = 128 + settings.frame_start = 4.0 + settings.frame_end = 96.0 + settings.lifetime = 32.0 + settings.particle_size = 0.125 + settings.display_size = 0.25 + bpy.ops.wm.save_as_mainfile(filepath=str(output.resolve()), check_existing=False, compress=True) + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00018.py -- OUTPUT") + main(pathlib.Path(arguments[0])) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00019.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00019.py new file mode 100644 index 00000000..2a8f9422 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00019.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def main(output: pathlib.Path) -> None: + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapPointCloudSeed") + mesh.from_pydata([(-1.0, 0.0, 0.0), (0.0, 1.0, 0.5), (1.0, 0.0, 1.0), (0.0, -1.0, 1.5)], [], []) + obj = bpy.data.objects.new("WebGapPointCloudObject", mesh) + bpy.context.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.convert(target="POINTCLOUD") + data = obj.data + data.name = "WebGapPointCloud" + radius = data.attributes.new("radius", "FLOAT", "POINT") + radius.data.foreach_set("value", [0.25, 0.5, 0.75, 1.0]) + bpy.ops.wm.save_as_mainfile(filepath=str(output.resolve()), check_existing=False, compress=True) + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00019.py -- OUTPUT") + main(pathlib.Path(arguments[0])) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00020.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00020.py new file mode 100644 index 00000000..8eb226ba --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00020.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def main(output: pathlib.Path) -> None: + bpy.ops.wm.read_factory_settings(use_empty=True) + scene = bpy.context.scene + scene.name = "WebGapScene" + scene.frame_start = 12 + scene.frame_end = 180 + scene.frame_set(48) + scene.render.fps = 30 + scene.render.fps_base = 1.0 + scene.unit_settings.system = "METRIC" + scene.unit_settings.scale_length = 0.25 + scene.render.engine = "BLENDER_EEVEE" + scene.view_settings.look = "AgX - Medium High Contrast" + bpy.ops.wm.save_as_mainfile(filepath=str(output.resolve()), check_existing=False, compress=True) + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00020.py -- OUTPUT") + main(pathlib.Path(arguments[0])) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00021.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00021.py new file mode 100644 index 00000000..1d5a84c2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00021.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def main(output: pathlib.Path) -> None: + bpy.ops.wm.read_factory_settings(use_empty=True) + screen = bpy.context.screen + if screen is None: + raise RuntimeError("factory startup did not create a screen") + screen.name = "WebGapScreen" + bpy.ops.wm.save_as_mainfile(filepath=str(output.resolve()), check_existing=False, compress=True) + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00021.py -- OUTPUT") + main(pathlib.Path(arguments[0])) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00022.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00022.py new file mode 100644 index 00000000..dc1a88f6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00022.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def main(output: pathlib.Path) -> None: + bpy.ops.wm.read_factory_settings(use_empty=True) + source = pathlib.Path(__file__).resolve().parents[3] / "tests/files/web/media/sequencer-silence.wav" + sound = bpy.data.sounds.load(str(source), check_existing=False) + sound.name = "WebGapSound" + sound.filepath = "//WebGapSound.wav" + sound.use_fake_user = True + bpy.ops.wm.save_as_mainfile(filepath=str(output.resolve()), check_existing=False, compress=True) + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00022.py -- OUTPUT") + main(pathlib.Path(arguments[0])) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00023.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00023.py new file mode 100644 index 00000000..dc3c7f93 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00023.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def main(output: pathlib.Path) -> None: + bpy.ops.wm.read_factory_settings(use_empty=True) + source = pathlib.Path(__file__).resolve().parents[3] / "tests/files/web/media/sequencer-silence.wav" + sound = bpy.data.sounds.load(str(source), check_existing=False) + sound.name = "WebGapSpeakerSound" + sound.use_fake_user = True + speaker = bpy.data.speakers.new("WebGapSpeaker") + speaker.sound = sound + speaker.volume_max = 0.85 + speaker.volume_min = 0.15 + speaker.distance_max = 12.5 + speaker.distance_reference = 2.25 + speaker.attenuation = 0.75 + speaker.cone_angle_outer = 270.0 + speaker.cone_angle_inner = 120.0 + speaker.cone_volume_outer = 0.35 + speaker.volume = 0.65 + speaker.pitch = 1.1 + speaker.use_fake_user = True + bpy.ops.wm.save_as_mainfile(filepath=str(output.resolve()), check_existing=False, compress=True) + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00023.py -- OUTPUT") + main(pathlib.Path(arguments[0])) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00024.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00024.py new file mode 100644 index 00000000..bcc2782d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00024.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def main(output: pathlib.Path) -> None: + bpy.ops.wm.read_factory_settings(use_empty=True) + text = bpy.data.texts.new("WebGapText") + text.write("Web Blender text datablock\nSecond line\n") + text.filepath = "//WebGapText.txt" + text.use_fake_user = True + bpy.ops.wm.save_as_mainfile(filepath=str(output.resolve()), check_existing=False, compress=True) + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00024.py -- OUTPUT") + main(pathlib.Path(arguments[0])) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00025.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00025.py new file mode 100644 index 00000000..dfbddb76 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00025.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def main(output: pathlib.Path) -> None: + bpy.ops.wm.read_factory_settings(use_empty=True) + texture = bpy.data.textures.new("WebGapTexture", type="CLOUDS") + texture.noise_scale = 0.42 + texture.noise_depth = 4 + texture.intensity = 0.72 + texture.contrast = 1.25 + texture.saturation = 0.8 + texture.use_fake_user = True + bpy.ops.wm.save_as_mainfile(filepath=str(output.resolve()), check_existing=False, compress=True) + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00025.py -- OUTPUT") + main(pathlib.Path(arguments[0])) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00026.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00026.py new file mode 100644 index 00000000..49565e14 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00026.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def main(output: pathlib.Path) -> None: + bpy.ops.wm.read_factory_settings(use_empty=True) + volume = bpy.data.volumes.new("WebGapVolume") + volume.filepath = "//WebGapVolume.vdb" + volume.display.density = 2.5 + volume.display.interpolation_method = "CLOSEST" + volume.render.step_size = 0.125 + volume.use_fake_user = True + bpy.ops.wm.save_as_mainfile(filepath=str(output.resolve()), check_existing=False, compress=True) + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00026.py -- OUTPUT") + main(pathlib.Path(arguments[0])) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00027.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00027.py new file mode 100644 index 00000000..e5fe1540 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00027.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def main(output: pathlib.Path) -> None: + bpy.ops.wm.read_factory_settings(use_empty=True) + bpy.context.window_manager.preset_name = "WebGapWindowManager" + bpy.ops.wm.save_as_mainfile(filepath=str(output.resolve()), check_existing=False, compress=True) + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00027.py -- OUTPUT") + main(pathlib.Path(arguments[0])) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00028.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00028.py new file mode 100644 index 00000000..d09df157 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00028.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def main(output: pathlib.Path) -> None: + bpy.ops.wm.read_factory_settings(use_empty=True) + workspace = bpy.data.workspaces.get("Layout") + if workspace is not None: + workspace.name = "WebGapWorkspace" + bpy.ops.wm.save_as_mainfile(filepath=str(output.resolve()), check_existing=False, compress=True) + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00028.py -- OUTPUT") + main(pathlib.Path(arguments[0])) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00029.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00029.py new file mode 100644 index 00000000..1ec95b13 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00029.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + +def main(output: pathlib.Path) -> None: + bpy.ops.wm.read_factory_settings(use_empty=True) + world = bpy.data.worlds.new("WebGapWorld") + world.color = (0.12, 0.2, 0.35) + world.use_fake_user = True + world.mist_settings.use_mist = True + world.mist_settings.start = 3.0 + world.mist_settings.depth = 18.0 + world.mist_settings.intensity = 0.4 + bpy.ops.wm.save_as_mainfile(filepath=str(output.resolve()), check_existing=False, compress=True) + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: raise SystemExit("usage: blender -b --python M16-GAP-00029.py -- OUTPUT") + main(pathlib.Path(arguments[0])) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00030.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00030.py new file mode 100644 index 00000000..2f77bffc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00030.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def main(output: pathlib.Path) -> None: + bpy.ops.wm.read_factory_settings(use_empty=True) + + mesh = bpy.data.meshes.new("WebGapArmatureMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2), (0, 2, 3)], + ) + mesh.update() + mesh_object = bpy.data.objects.new("WebGapArmatureMeshObject", mesh) + bpy.context.collection.objects.link(mesh_object) + + armature = bpy.data.armatures.new("WebGapArmature") + armature_object = bpy.data.objects.new("WebGapArmatureObject", armature) + bpy.context.collection.objects.link(armature_object) + bpy.context.view_layer.objects.active = armature_object + armature_object.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + root = armature.edit_bones.new("Root") + root.head = (0.0, 0.0, 0.0) + root.tail = (0.0, 0.0, 1.0) + bpy.ops.object.mode_set(mode="OBJECT") + armature_object.select_set(False) + + vertex_group = mesh_object.vertex_groups.new(name="Root") + vertex_group.add([0, 1, 2, 3], 1.0, "REPLACE") + modifier = mesh_object.modifiers.new(name="WebGapArmature", type="ARMATURE") + modifier.object = armature_object + modifier.vertex_group = "Root" + modifier.show_viewport = True + modifier.show_render = True + modifier.show_in_editmode = True + modifier.show_on_cage = False + + bpy.context.view_layer.objects.active = mesh_object + mesh_object.select_set(True) + bpy.ops.wm.save_as_mainfile(filepath=str(output.resolve()), check_existing=False, compress=True) + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00030.py -- OUTPUT") + main(pathlib.Path(arguments[0])) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00031.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00031.py new file mode 100644 index 00000000..c66c4388 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00031.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def mesh_object(name: str, vertices, faces): + mesh = bpy.data.meshes.new(name + "Mesh") + mesh.from_pydata(vertices, [], faces) + mesh.update() + obj = bpy.data.objects.new(name, mesh) + bpy.context.collection.objects.link(obj) + return obj + + +def main(output: pathlib.Path) -> None: + bpy.ops.wm.read_factory_settings(use_empty=True) + source = mesh_object( + "WebGapArrayObject", + [(-0.5, -0.5, 0.0), (0.5, -0.5, 0.0), (0.5, 0.5, 0.0), (-0.5, 0.5, 0.0)], + [(0, 1, 2, 3)], + ) + start_cap = mesh_object( + "WebGapArrayStartCap", + [(-0.4, -0.4, 0.0), (0.4, -0.4, 0.0), (0.0, 0.4, 0.0)], + [(0, 1, 2)], + ) + end_cap = mesh_object( + "WebGapArrayEndCap", + [(-0.4, -0.4, 0.0), (0.4, -0.4, 0.0), (0.0, 0.4, 0.0)], + [(0, 1, 2)], + ) + start_cap.location.x = -2.0 + end_cap.location.x = 5.0 + modifier = source.modifiers.new(name="WebGapArray", type="ARRAY") + modifier.count = 4 + modifier.relative_offset_displace = (1.25, 0.0, 0.0) + modifier.start_cap = start_cap + modifier.end_cap = end_cap + modifier.show_viewport = True + modifier.show_render = False + modifier.show_in_editmode = True + modifier.show_on_cage = False + bpy.context.view_layer.objects.active = source + source.select_set(True) + bpy.ops.wm.save_as_mainfile(filepath=str(output.resolve()), check_existing=False, compress=True) + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00031.py -- OUTPUT") + main(pathlib.Path(arguments[0])) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00032.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00032.py new file mode 100644 index 00000000..1f584bcc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00032.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def main(output: pathlib.Path) -> None: + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapBevelMesh") + mesh.from_pydata( + [(-1.0, -1.0, -1.0), (1.0, -1.0, -1.0), (1.0, 1.0, -1.0), (-1.0, 1.0, -1.0), + (-1.0, -1.0, 1.0), (1.0, -1.0, 1.0), (1.0, 1.0, 1.0), (-1.0, 1.0, 1.0)], + [], + [(0, 1, 2, 3), (4, 7, 6, 5), (0, 4, 5, 1), (1, 5, 6, 2), (2, 6, 7, 3), (4, 0, 3, 7)], + ) + mesh.update() + obj = bpy.data.objects.new("WebGapBevelObject", mesh) + bpy.context.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapBevel", type="BEVEL") + modifier.width = 0.2 + modifier.segments = 3 + modifier.profile = 0.35 + modifier.limit_method = "ANGLE" + modifier.angle_limit = 0.5 + modifier.show_viewport = True + modifier.show_render = True + modifier.show_in_editmode = False + modifier.show_on_cage = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile(filepath=str(output.resolve()), check_existing=False, compress=True) + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00032.py -- OUTPUT") + main(pathlib.Path(arguments[0])) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00033.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00033.py new file mode 100644 index 00000000..8e583ccf --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00033.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def cube(name: str, location, scale=1.0): + mesh = bpy.data.meshes.new(name + "Mesh") + vertices = [(-1, -1, -1), (1, -1, -1), (1, 1, -1), (-1, 1, -1), (-1, -1, 1), (1, -1, 1), (1, 1, 1), (-1, 1, 1)] + faces = [(0, 1, 2, 3), (4, 7, 6, 5), (0, 4, 5, 1), (1, 5, 6, 2), (2, 6, 7, 3), (4, 0, 3, 7)] + mesh.from_pydata(vertices, [], faces) + mesh.update() + obj = bpy.data.objects.new(name, mesh) + bpy.context.collection.objects.link(obj) + obj.location = location + obj.scale = (scale, scale, scale) + return obj + + +def main(output: pathlib.Path) -> None: + bpy.ops.wm.read_factory_settings(use_empty=True) + source = cube("WebGapBooleanObject", (0.0, 0.0, 0.0), 1.0) + cutter = cube("WebGapBooleanCutter", (0.75, 0.0, 0.0), 0.65) + cutter.display_type = "WIRE" + modifier = source.modifiers.new(name="WebGapBoolean", type="BOOLEAN") + modifier.operation = "DIFFERENCE" + modifier.solver = "EXACT" + modifier.object = cutter + modifier.show_viewport = True + modifier.show_render = True + modifier.show_in_editmode = False + modifier.show_on_cage = False + bpy.context.view_layer.objects.active = source + source.select_set(True) + bpy.ops.wm.save_as_mainfile(filepath=str(output.resolve()), check_existing=False, compress=True) + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00033.py -- OUTPUT") + main(pathlib.Path(arguments[0])) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00034.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00034.py new file mode 100644 index 00000000..a7c50b78 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00034.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def main(output: pathlib.Path) -> None: + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapBuildMesh") + mesh.from_pydata([(-1, -1, 0), (1, -1, 0), (1, 1, 0), (-1, 1, 0)], [], [(0, 1, 2, 3)]) + mesh.update() + obj = bpy.data.objects.new("WebGapBuildObject", mesh) + bpy.context.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapBuild", type="BUILD") + modifier.frame_start = 3 + modifier.frame_duration = 12 + modifier.use_reverse = True + modifier.use_random_order = True + modifier.seed = 17 + modifier.show_viewport = True + modifier.show_render = False + modifier.show_in_editmode = True + modifier.show_on_cage = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile(filepath=str(output.resolve()), check_existing=False, compress=True) + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00034.py -- OUTPUT") + main(pathlib.Path(arguments[0])) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00035.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00035.py new file mode 100644 index 00000000..9643368d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00035.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def main(output: pathlib.Path) -> None: + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapCastMesh") + mesh.from_pydata([(-1, -1, -1), (1, -1, -1), (1, 1, -1), (-1, 1, -1), (-1, -1, 1), (1, -1, 1), (1, 1, 1), (-1, 1, 1)], [], [(0, 1, 2, 3), (4, 7, 6, 5), (0, 4, 5, 1), (1, 5, 6, 2), (2, 6, 7, 3), (4, 0, 3, 7)]) + mesh.update() + obj = bpy.data.objects.new("WebGapCastObject", mesh) + bpy.context.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapCast", type="CAST") + modifier.cast_type = "CUBOID" + modifier.factor = 0.65 + modifier.radius = 2.5 + modifier.use_x = True + modifier.use_y = False + modifier.use_z = True + modifier.show_viewport = True + modifier.show_render = True + modifier.show_in_editmode = False + modifier.show_on_cage = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile(filepath=str(output.resolve()), check_existing=False, compress=True) + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: raise SystemExit("usage: blender -b --python M16-GAP-00035.py -- OUTPUT") + main(pathlib.Path(arguments[0])) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00036.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00036.py new file mode 100644 index 00000000..e2b2578b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00036.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 +import pathlib, sys +import bpy + +def main(output: pathlib.Path) -> None: + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapClothMesh") + mesh.from_pydata([(-1, -1, 0), (1, -1, 0), (1, 1, 0), (-1, 1, 0)], [], [(0, 1, 2, 3)]) + mesh.update() + obj = bpy.data.objects.new("WebGapClothObject", mesh) + bpy.context.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapCloth", type="CLOTH") + modifier.show_viewport = True + modifier.show_render = True + modifier.show_in_editmode = False + modifier.show_on_cage = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile(filepath=str(output.resolve()), check_existing=False, compress=True) + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: raise SystemExit("usage: blender -b --python M16-GAP-00036.py -- OUTPUT") + main(pathlib.Path(arguments[0])) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00037.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00037.py new file mode 100644 index 00000000..0f01439d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00037.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python3 +import pathlib, sys +import bpy + +def main(output: pathlib.Path) -> None: + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapCollisionMesh") + mesh.from_pydata([(-1,-1,0),(1,-1,0),(1,1,0),(-1,1,0)], [], [(0,1,2,3)]); mesh.update() + obj = bpy.data.objects.new("WebGapCollisionObject", mesh); bpy.context.collection.objects.link(obj) + m = obj.modifiers.new(name="WebGapCollision", type="COLLISION") + m.show_viewport = True; m.show_render = True; m.show_in_editmode = False; m.show_on_cage = False + bpy.context.view_layer.objects.active = obj; obj.select_set(True) + bpy.ops.wm.save_as_mainfile(filepath=str(output.resolve()), check_existing=False, compress=True) + +if __name__ == "__main__": + args=sys.argv[sys.argv.index("--")+1:] + if len(args)!=1: raise SystemExit("usage: blender -b --python M16-GAP-00037.py -- OUTPUT") + main(pathlib.Path(args[0])) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00038.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00038.py new file mode 100644 index 00000000..37bbaa42 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00038.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent)) + +from modifier_gap_fixture import generate + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00038.py -- OUTPUT") + generate(pathlib.Path(arguments[0]), "CORRECTIVE_SMOOTH", "WebGapCorrectiveSmooth") diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00039.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00039.py new file mode 100644 index 00000000..0a019d79 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00039.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent)) +from modifier_gap_fixture import generate + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: raise SystemExit("usage: blender -b --python M16-GAP-00039.py -- OUTPUT") + generate(pathlib.Path(arguments[0]), "CURVE", "WebGapCurveModifier") diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00040.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00040.py new file mode 100644 index 00000000..8855f70f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00040.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent)) +from modifier_gap_fixture import generate + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00040.py -- OUTPUT") + generate(pathlib.Path(arguments[0]), "DATA_TRANSFER", "WebGapDataTransfer") diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00041.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00041.py new file mode 100644 index 00000000..08a7b57f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00041.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent)) +from modifier_gap_fixture import create_mesh_object + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00041.py -- OUTPUT") + output = pathlib.Path(arguments[0]) + bpy.ops.wm.read_factory_settings(use_empty=True) + obj = create_mesh_object("WebGapDecimateObject") + modifier = obj.modifiers.new(name="WebGapDecimate", type="DECIMATE") + modifier.ratio = 0.65 + modifier.iterations = 2 + modifier.decimate_type = "COLLAPSE" + modifier.angle_limit = 0.4 + modifier.show_viewport = True + modifier.show_render = True + modifier.show_in_editmode = False + modifier.show_on_cage = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile(filepath=str(output.resolve()), check_existing=False, compress=True) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00042.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00042.py new file mode 100644 index 00000000..238d3f83 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00042.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent)) +from modifier_gap_fixture import create_mesh_object + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00042.py -- OUTPUT") + output = pathlib.Path(arguments[0]) + bpy.ops.wm.read_factory_settings(use_empty=True) + obj = create_mesh_object("WebGapDisplaceObject") + modifier = obj.modifiers.new(name="WebGapDisplace", type="DISPLACE") + modifier.direction = "Z" + modifier.strength = 0.75 + modifier.mid_level = 0.25 + modifier.texture_coords = "GLOBAL" + modifier.show_viewport = True + modifier.show_render = True + modifier.show_in_editmode = False + modifier.show_on_cage = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile(filepath=str(output.resolve()), check_existing=False, compress=True) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00043.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00043.py new file mode 100644 index 00000000..e819da25 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00043.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent)) +from modifier_gap_fixture import generate + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00043.py -- OUTPUT") + generate(pathlib.Path(arguments[0]), "DYNAMIC_PAINT", "WebGapDynamicPaint") diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00044.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00044.py new file mode 100644 index 00000000..83c867d4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00044.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent)) +from modifier_gap_fixture import create_mesh_object + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00044.py -- OUTPUT") + output = pathlib.Path(arguments[0]) + bpy.ops.wm.read_factory_settings(use_empty=True) + obj = create_mesh_object("WebGapEdgeSplitObject") + modifier = obj.modifiers.new(name="WebGapEdgeSplit", type="EDGE_SPLIT") + modifier.split_angle = 0.35 + modifier.use_edge_angle = True + modifier.use_edge_sharp = False + modifier.show_viewport = True + modifier.show_render = True + modifier.show_in_editmode = False + modifier.show_on_cage = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile(filepath=str(output.resolve()), check_existing=False, compress=True) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00045.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00045.py new file mode 100644 index 00000000..5a9ae8f3 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00045.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent)) +from modifier_gap_fixture import generate + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00045.py -- OUTPUT") + generate(pathlib.Path(arguments[0]), "EXPLODE", "WebGapExplode") diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00046.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00046.py new file mode 100644 index 00000000..9f1dac58 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00046.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent)) +from modifier_gap_fixture import generate + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00046.py -- OUTPUT") + generate(pathlib.Path(arguments[0]), "FLUID", "WebGapFluid") diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00047.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00047.py new file mode 100644 index 00000000..28bce040 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00047.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00047.py -- OUTPUT") + output = pathlib.Path(arguments[0]) + bpy.ops.wm.open_mainfile(filepath=str(pathlib.Path(__file__).resolve().parents[3] / "tests/files/web/modifier_grease_pencil_scene.blend"), load_ui=False) + bpy.ops.wm.save_as_mainfile(filepath=str(output.resolve()), check_existing=False, compress=True) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00048.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00048.py new file mode 100644 index 00000000..5fe08762 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00048.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +import pathlib +import bpy + + +if __name__ == "__main__": + arguments = bpy.app.driver_namespace.get("_unused") + args = __import__("sys").argv[__import__("sys").argv.index("--") + 1:] + if len(args) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00048.py -- OUTPUT") + source = pathlib.Path(__file__).resolve().parents[3] / "tests/files/web/modifier_grease_pencil_scene.blend" + bpy.ops.wm.open_mainfile(filepath=str(source), load_ui=False) + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(args[0]).resolve()), check_existing=False, compress=True) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00049.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00049.py new file mode 100644 index 00000000..e8482045 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00049.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00049.py -- OUTPUT") + source = pathlib.Path(__file__).resolve().parents[3] / "tests/files/web/modifier_grease_pencil_scene.blend" + bpy.ops.wm.open_mainfile(filepath=str(source), load_ui=False) + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(args[0]).resolve()), check_existing=False, compress=True) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00050.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00050.py new file mode 100644 index 00000000..87e0cd5b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00050.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00050.py -- OUTPUT") + source = pathlib.Path(__file__).resolve().parents[3] / "tests/files/web/modifier_grease_pencil_scene.blend" + bpy.ops.wm.open_mainfile(filepath=str(source), load_ui=False) + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(args[0]).resolve()), check_existing=False, compress=True) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00051.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00051.py new file mode 100644 index 00000000..9a6fc42a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00051.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00051.py -- OUTPUT") + source = pathlib.Path(__file__).resolve().parents[3] / "tests/files/web/modifier_grease_pencil_scene.blend" + bpy.ops.wm.open_mainfile(filepath=str(source), load_ui=False) + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(args[0]).resolve()), check_existing=False, compress=True) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00052.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00052.py new file mode 100644 index 00000000..5019e87d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00052.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00052.py -- OUTPUT") + source = pathlib.Path(__file__).resolve().parents[3] / "tests/files/web/modifier_grease_pencil_scene.blend" + bpy.ops.wm.open_mainfile(filepath=str(source), load_ui=False) + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(args[0]).resolve()), check_existing=False, compress=True) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00053.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00053.py new file mode 100644 index 00000000..d4a2a0c0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00053.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00053.py -- OUTPUT") + source = pathlib.Path(__file__).resolve().parents[3] / "tests/files/web/modifier_grease_pencil_scene.blend" + bpy.ops.wm.open_mainfile(filepath=str(source), load_ui=False) + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(args[0]).resolve()), check_existing=False, compress=True) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00054.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00054.py new file mode 100644 index 00000000..8115df93 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00054.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00054.py -- OUTPUT") + source = pathlib.Path(__file__).resolve().parents[3] / "tests/files/web/modifier_grease_pencil_scene.blend" + bpy.ops.wm.open_mainfile(filepath=str(source), load_ui=False) + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(args[0]).resolve()), check_existing=False, compress=True) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00055.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00055.py new file mode 100644 index 00000000..1e8550ff --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00055.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00055.py -- OUTPUT") + source = pathlib.Path(__file__).resolve().parents[3] / "tests/files/web/modifier_grease_pencil_scene.blend" + bpy.ops.wm.open_mainfile(filepath=str(source), load_ui=False) + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(args[0]).resolve()), check_existing=False, compress=True) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00056.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00056.py new file mode 100644 index 00000000..a836e2ec --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00056.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00056.py -- OUTPUT") + source = pathlib.Path(__file__).resolve().parents[3] / "tests/files/web/modifier_grease_pencil_scene.blend" + bpy.ops.wm.open_mainfile(filepath=str(source), load_ui=False) + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(args[0]).resolve()), check_existing=False, compress=True) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00057.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00057.py new file mode 100644 index 00000000..c081778a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00057.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00057.py -- OUTPUT") + source = pathlib.Path(__file__).resolve().parents[3] / "tests/files/web/modifier_grease_pencil_scene.blend" + bpy.ops.wm.open_mainfile(filepath=str(source), load_ui=False) + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(args[0]).resolve()), check_existing=False, compress=True) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00058.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00058.py new file mode 100644 index 00000000..b6f63ea0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00058.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00058.py -- OUTPUT") + source = pathlib.Path(__file__).resolve().parents[3] / "tests/files/web/modifier_grease_pencil_scene.blend" + bpy.ops.wm.open_mainfile(filepath=str(source), load_ui=False) + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(args[0]).resolve()), check_existing=False, compress=True) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00059.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00059.py new file mode 100644 index 00000000..cf72d410 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00059.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00059.py -- OUTPUT") + source = pathlib.Path(__file__).resolve().parents[3] / "tests/files/web/modifier_grease_pencil_scene.blend" + bpy.ops.wm.open_mainfile(filepath=str(source), load_ui=False) + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(args[0]).resolve()), check_existing=False, compress=True) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00060.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00060.py new file mode 100644 index 00000000..1f201920 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00060.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00060.py -- OUTPUT") + source = pathlib.Path(__file__).resolve().parents[3] / "tests/files/web/modifier_grease_pencil_scene.blend" + bpy.ops.wm.open_mainfile(filepath=str(source), load_ui=False) + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(args[0]).resolve()), check_existing=False, compress=True) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00061.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00061.py new file mode 100644 index 00000000..e43813c9 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00061.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00061.py -- OUTPUT") + source = pathlib.Path(__file__).resolve().parents[3] / "tests/files/web/modifier_grease_pencil_scene.blend" + bpy.ops.wm.open_mainfile(filepath=str(source), load_ui=False) + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(args[0]).resolve()), check_existing=False, compress=True) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00062.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00062.py new file mode 100644 index 00000000..77a72fe9 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00062.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00062.py -- OUTPUT") + source = pathlib.Path(__file__).resolve().parents[3] / "tests/files/web/modifier_grease_pencil_scene.blend" + bpy.ops.wm.open_mainfile(filepath=str(source), load_ui=False) + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(args[0]).resolve()), check_existing=False, compress=True) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00063.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00063.py new file mode 100644 index 00000000..3e9121a5 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00063.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00063.py -- OUTPUT") + source = pathlib.Path(__file__).resolve().parents[3] / "tests/files/web/modifier_grease_pencil_scene.blend" + bpy.ops.wm.open_mainfile(filepath=str(source), load_ui=False) + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(args[0]).resolve()), check_existing=False, compress=True) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00064.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00064.py new file mode 100644 index 00000000..407cc320 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00064.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00064.py -- OUTPUT") + source = pathlib.Path(__file__).resolve().parents[3] / "tests/files/web/modifier_grease_pencil_scene.blend" + bpy.ops.wm.open_mainfile(filepath=str(source), load_ui=False) + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(args[0]).resolve()), check_existing=False, compress=True) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00065.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00065.py new file mode 100644 index 00000000..6a9e0a87 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00065.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00065.py -- OUTPUT") + source = pathlib.Path(__file__).resolve().parents[3] / "tests/files/web/modifier_grease_pencil_scene.blend" + bpy.ops.wm.open_mainfile(filepath=str(source), load_ui=False) + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(args[0]).resolve()), check_existing=False, compress=True) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00066.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00066.py new file mode 100644 index 00000000..00637d69 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00066.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00066.py -- OUTPUT") + source = pathlib.Path(__file__).resolve().parents[3] / "tests/files/web/modifier_grease_pencil_scene.blend" + bpy.ops.wm.open_mainfile(filepath=str(source), load_ui=False) + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(args[0]).resolve()), check_existing=False, compress=True) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00067.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00067.py new file mode 100644 index 00000000..f192a651 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00067.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00067.py -- OUTPUT") + source = pathlib.Path(__file__).resolve().parents[3] / "tests/files/web/modifier_grease_pencil_scene.blend" + bpy.ops.wm.open_mainfile(filepath=str(source), load_ui=False) + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(args[0]).resolve()), check_existing=False, compress=True) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00068.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00068.py new file mode 100644 index 00000000..bbdd7c6c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00068.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00068.py -- OUTPUT") + source = pathlib.Path(__file__).resolve().parents[3] / "tests/files/web/modifier_grease_pencil_scene.blend" + bpy.ops.wm.open_mainfile(filepath=str(source), load_ui=False) + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(args[0]).resolve()), check_existing=False, compress=True) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00069.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00069.py new file mode 100644 index 00000000..50950392 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00069.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00069.py -- OUTPUT") + source = pathlib.Path(__file__).resolve().parents[3] / "tests/files/web/modifier_grease_pencil_scene.blend" + bpy.ops.wm.open_mainfile(filepath=str(source), load_ui=False) + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(args[0]).resolve()), check_existing=False, compress=True) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00070.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00070.py new file mode 100644 index 00000000..67a6cb74 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00070.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00070.py -- OUTPUT") + source = pathlib.Path(__file__).resolve().parents[3] / "tests/files/web/modifier_grease_pencil_scene.blend" + bpy.ops.wm.open_mainfile(filepath=str(source), load_ui=False) + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(args[0]).resolve()), check_existing=False, compress=True) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00071.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00071.py new file mode 100644 index 00000000..73241fb9 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00071.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00071.py -- OUTPUT") + source = pathlib.Path(__file__).resolve().parents[3] / "tests/files/web/modifier_grease_pencil_scene.blend" + bpy.ops.wm.open_mainfile(filepath=str(source), load_ui=False) + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(args[0]).resolve()), check_existing=False, compress=True) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00072.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00072.py new file mode 100644 index 00000000..c9a92493 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00072.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent)) +from modifier_gap_fixture import generate + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00072.py -- OUTPUT") + generate(pathlib.Path(arguments[0]), "HOOK", "WebGapHook") diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00073.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00073.py new file mode 100644 index 00000000..e3fb6889 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00073.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent)) +from modifier_gap_fixture import generate + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00073.py -- OUTPUT") + generate(pathlib.Path(arguments[0]), "LAPLACIANDEFORM", "WebGapLaplacianDeform") diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00074.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00074.py new file mode 100644 index 00000000..3d466d1b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00074.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent)) +from modifier_gap_fixture import generate + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00074.py -- OUTPUT") + generate(pathlib.Path(arguments[0]), "LAPLACIANSMOOTH", "WebGapLaplacianSmooth") diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00075.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00075.py new file mode 100644 index 00000000..bf58303d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00075.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent)) +from modifier_gap_fixture import generate + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00075.py -- OUTPUT") + generate(pathlib.Path(arguments[0]), "LATTICE", "WebGapLatticeModifier") diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00076.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00076.py new file mode 100644 index 00000000..dfb22115 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00076.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00076.py -- OUTPUT") + source = pathlib.Path(__file__).resolve().parents[3] / "tests/files/web/modifier_grease_pencil_scene.blend" + bpy.ops.wm.open_mainfile(filepath=str(source), load_ui=False) + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00077.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00077.py new file mode 100644 index 00000000..12fa5d87 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00077.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00077.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapMaskMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapMaskObject", mesh) + bpy.context.scene.collection.objects.link(obj) + group = obj.vertex_groups.new(name="WebGapMaskGroup") + group.add([0, 1], 1.0, "REPLACE") + modifier = obj.modifiers.new(name="WebGapMask", type="MASK") + modifier.vertex_group = group.name + modifier.show_viewport = True + modifier.show_render = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00078.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00078.py new file mode 100644 index 00000000..401263b2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00078.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00078.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapMeshCacheMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapMeshCacheObject", mesh) + bpy.context.scene.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapMeshCache", type="MESH_CACHE") + modifier.show_viewport = True + modifier.show_render = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00079.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00079.py new file mode 100644 index 00000000..bf904216 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00079.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00079.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapMeshDeformMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapMeshDeformObject", mesh) + bpy.context.scene.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapMeshDeform", type="MESH_DEFORM") + modifier.show_viewport = True + modifier.show_render = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00080.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00080.py new file mode 100644 index 00000000..886cc220 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00080.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00080.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapMeshSequenceCacheMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapMeshSequenceCacheObject", mesh) + bpy.context.scene.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapMeshSequenceCache", type="MESH_SEQUENCE_CACHE") + modifier.show_viewport = True + modifier.show_render = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00081.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00081.py new file mode 100644 index 00000000..b5411633 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00081.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00081.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + volume = bpy.data.volumes.new("WebGapMeshToVolumeData") + obj = bpy.data.objects.new("WebGapMeshToVolumeObject", volume) + bpy.context.scene.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapMeshToVolume", type="MESH_TO_VOLUME") + modifier.show_viewport = True + modifier.show_render = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00082.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00082.py new file mode 100644 index 00000000..471f95c0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00082.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00082.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapMirrorMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapMirrorObject", mesh) + bpy.context.scene.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapMirror", type="MIRROR") + modifier.use_axis[0] = True + modifier.use_axis[1] = False + modifier.show_viewport = True + modifier.show_render = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00083.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00083.py new file mode 100644 index 00000000..499b23e5 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00083.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00083.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapMultiresMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapMultiresObject", mesh) + bpy.context.scene.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapMultires", type="MULTIRES") + modifier.show_viewport = True + modifier.show_render = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00084.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00084.py new file mode 100644 index 00000000..4bafffef --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00084.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00084.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapNodesMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapNodesObject", mesh) + bpy.context.scene.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapNodes", type="NODES") + modifier.show_viewport = True + modifier.show_render = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00085.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00085.py new file mode 100644 index 00000000..b02fdc87 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00085.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00085.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapNormalEditMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapNormalEditObject", mesh) + bpy.context.scene.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapNormalEdit", type="NORMAL_EDIT") + modifier.show_viewport = True + modifier.show_render = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00086.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00086.py new file mode 100644 index 00000000..3ea9a5a6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00086.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00086.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapOceanMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapOceanObject", mesh) + bpy.context.scene.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapOcean", type="OCEAN") + modifier.show_viewport = True + modifier.show_render = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00087.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00087.py new file mode 100644 index 00000000..010432ed --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00087.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00087.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapParticleInstanceMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapParticleInstanceObject", mesh) + bpy.context.scene.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapParticleInstance", type="PARTICLE_INSTANCE") + modifier.show_viewport = True + modifier.show_render = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00088.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00088.py new file mode 100644 index 00000000..1ed4b764 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00088.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00088.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapParticleSystemMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapParticleSystemObject", mesh) + bpy.context.scene.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapParticleSystem", type="PARTICLE_SYSTEM") + modifier.show_viewport = True + modifier.show_render = False + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00089.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00089.py new file mode 100644 index 00000000..e15d369e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00089.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00089.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapRemeshMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapRemeshObject", mesh) + bpy.context.scene.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapRemesh", type="REMESH") + modifier.show_viewport = True + modifier.show_render = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00090.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00090.py new file mode 100644 index 00000000..f93e356c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00090.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00090.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapScrewMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapScrewObject", mesh) + bpy.context.scene.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapScrew", type="SCREW") + modifier.show_viewport = True + modifier.show_render = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00091.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00091.py new file mode 100644 index 00000000..4726a153 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00091.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00091.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapShrinkwrapMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapShrinkwrapObject", mesh) + bpy.context.scene.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapShrinkwrap", type="SHRINKWRAP") + modifier.show_viewport = True + modifier.show_render = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00092.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00092.py new file mode 100644 index 00000000..92822b83 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00092.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00092.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapSimpleDeformMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapSimpleDeformObject", mesh) + bpy.context.scene.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapSimpleDeform", type="SIMPLE_DEFORM") + modifier.show_viewport = True + modifier.show_render = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00093.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00093.py new file mode 100644 index 00000000..4608fed6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00093.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00093.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapSkinMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapSkinObject", mesh) + bpy.context.scene.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapSkin", type="SKIN") + modifier.show_viewport = True + modifier.show_render = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00094.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00094.py new file mode 100644 index 00000000..bf162929 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00094.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00094.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapSmoothMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapSmoothObject", mesh) + bpy.context.scene.collection.objects.link(obj) + group = obj.vertex_groups.new(name="WebGapSmoothWeights") + group.add([0, 1], 1.0, "REPLACE") + modifier = obj.modifiers.new(name="WebGapSmooth", type="SMOOTH") + modifier.factor = 0.375 + modifier.iterations = 3 + modifier.vertex_group = group.name + modifier.invert_vertex_group = True + modifier.use_x = True + modifier.use_y = False + modifier.use_z = True + modifier.show_viewport = True + modifier.show_render = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00095.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00095.py new file mode 100644 index 00000000..9f7e41c3 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00095.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00095.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapSoftBodyMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapSoftBodyObject", mesh) + bpy.context.scene.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapSoftBody", type="SOFT_BODY") + modifier.show_viewport = True + modifier.show_render = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00096.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00096.py new file mode 100644 index 00000000..8830b8c2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00096.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --python M16-GAP-00096.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapSolidifyMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapSolidifyObject", mesh) + bpy.context.scene.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapSolidify", type="SOLIDIFY") + modifier.thickness = 0.275 + modifier.offset = 0.35 + modifier.show_viewport = True + modifier.show_render = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00097.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00097.py new file mode 100644 index 00000000..a9be3172 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00097.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00097.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapSubsurfMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapSubsurfObject", mesh) + bpy.context.scene.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapSubsurf", type="SUBSURF") + modifier.subdivision_type = "SIMPLE" + modifier.levels = 2 + modifier.render_levels = 3 + modifier.show_viewport = True + modifier.show_render = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00098.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00098.py new file mode 100644 index 00000000..3bf3ac61 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00098.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00098.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapSurfaceMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapSurfaceObject", mesh) + bpy.context.scene.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapSurface", type="SURFACE") + modifier.show_viewport = True + modifier.show_render = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00099.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00099.py new file mode 100644 index 00000000..c03fc3d8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00099.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00099.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapSurfaceDeformMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapSurfaceDeformObject", mesh) + bpy.context.scene.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapSurfaceDeform", type="SURFACE_DEFORM") + modifier.show_viewport = True + modifier.show_render = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00100.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00100.py new file mode 100644 index 00000000..2338f013 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00100.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00100.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapTriangulateMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapTriangulateObject", mesh) + bpy.context.scene.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapTriangulate", type="TRIANGULATE") + modifier.quad_method = "FIXED" + modifier.ngon_method = "CLIP" + modifier.show_viewport = True + modifier.show_render = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00101.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00101.py new file mode 100644 index 00000000..8f6a3492 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00101.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00101.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapUvProjectMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapUvProjectObject", mesh) + bpy.context.scene.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapUvProject", type="UV_PROJECT") + modifier.show_viewport = True + modifier.show_render = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00102.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00102.py new file mode 100644 index 00000000..ae2c091c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00102.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00102.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapUvWarpMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapUvWarpObject", mesh) + bpy.context.scene.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapUvWarp", type="UV_WARP") + modifier.show_viewport = True + modifier.show_render = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00103.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00103.py new file mode 100644 index 00000000..f9c8975b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00103.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00103.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapVertexWeightEditMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapVertexWeightEditObject", mesh) + bpy.context.scene.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapVertexWeightEdit", type="VERTEX_WEIGHT_EDIT") + modifier.show_viewport = True + modifier.show_render = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00104.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00104.py new file mode 100644 index 00000000..04f1ea51 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00104.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00104.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapVertexWeightMixMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapVertexWeightMixObject", mesh) + bpy.context.scene.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapVertexWeightMix", type="VERTEX_WEIGHT_MIX") + modifier.show_viewport = True + modifier.show_render = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00105.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00105.py new file mode 100644 index 00000000..efb2bc96 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00105.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00105.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapVertexWeightProximityMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapVertexWeightProximityObject", mesh) + bpy.context.scene.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapVertexWeightProximity", type="VERTEX_WEIGHT_PROXIMITY") + modifier.show_viewport = True + modifier.show_render = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00106.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00106.py new file mode 100644 index 00000000..7024011f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00106.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00106.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + volume = bpy.data.volumes.new("WebGapVolumeDisplaceVolume") + volume.filepath = "//WebGapVolumeDisplace.vdb" + obj = bpy.data.objects.new("WebGapVolumeDisplaceObject", volume) + bpy.context.scene.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapVolumeDisplace", type="VOLUME_DISPLACE") + modifier.show_viewport = True + modifier.show_render = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00107.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00107.py new file mode 100644 index 00000000..7eb3e2fc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00107.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00107.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapVolumeToMeshMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapVolumeToMeshObject", mesh) + bpy.context.scene.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapVolumeToMesh", type="VOLUME_TO_MESH") + modifier.show_viewport = True + modifier.show_render = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00108.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00108.py new file mode 100644 index 00000000..a67f7d28 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00108.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00108.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapWarpMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapWarpObject", mesh) + bpy.context.scene.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapWarp", type="WARP") + modifier.show_viewport = True + modifier.show_render = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00109.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00109.py new file mode 100644 index 00000000..576a9f76 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00109.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00109.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapWaveMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapWaveObject", mesh) + bpy.context.scene.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapWave", type="WAVE") + modifier.height = 0.65 + modifier.width = 1.75 + modifier.speed = 0.42 + modifier.show_viewport = True + modifier.show_render = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00110.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00110.py new file mode 100644 index 00000000..f6b59326 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00110.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00110.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapWeightedNormalMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapWeightedNormalObject", mesh) + bpy.context.scene.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapWeightedNormal", type="WEIGHTED_NORMAL") + modifier.weight = 70 + modifier.keep_sharp = True + modifier.use_face_influence = True + modifier.show_viewport = True + modifier.show_render = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00111.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00111.py new file mode 100644 index 00000000..8384def0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00111.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00111.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapWeldMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapWeldObject", mesh) + bpy.context.scene.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapWeld", type="WELD") + modifier.merge_threshold = 0.125 + modifier.show_viewport = True + modifier.show_render = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00112.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00112.py new file mode 100644 index 00000000..6bd39ae8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00112.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00112.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapWireframeMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapWireframeObject", mesh) + bpy.context.scene.collection.objects.link(obj) + modifier = obj.modifiers.new(name="WebGapWireframe", type="WIREFRAME") + modifier.thickness = 0.08 + modifier.offset = -0.25 + modifier.show_viewport = True + modifier.show_render = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00113.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00113.py new file mode 100644 index 00000000..fba08ca6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00113.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +def bake_action_in_editor(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + window = bpy.context.window + screen = window.screen + area = next((candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR"), None) + if area is None: + area = next(candidate for candidate in screen.areas if candidate.type == "VIEW_3D") + area.type = "DOPESHEET_EDITOR" + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.action.bake_keys.poll(): + raise RuntimeError("ACTION_OT_bake_keys poll failed in Action editor context") + result = bpy.ops.action.bake_keys() + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_bake_keys returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00113.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapBakeKeysMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapBakeKeysObject", mesh) + bpy.context.scene.collection.objects.link(obj) + obj.location = (0.0, 0.0, 0.0) + obj.keyframe_insert(data_path="location", frame=1, index=-1) + obj.location = (2.0, 3.0, 4.0) + obj.keyframe_insert(data_path="location", frame=5, index=-1) + for layer in obj.animation_data.action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for fcurve in bag.fcurves: + for keyframe in fcurve.keyframe_points: + keyframe.select_control_point = True + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + bake_action_in_editor(obj) + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00114.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00114.py new file mode 100644 index 00000000..ec1a3509 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00114.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + + +def run_action_clean(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + window = bpy.context.window + screen = window.screen + area = next((candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR"), None) + if area is None: + area = next(candidate for candidate in screen.areas if candidate.type == "VIEW_3D") + area.type = "DOPESHEET_EDITOR" + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.action.clean.poll(): + raise RuntimeError("ACTION_OT_clean poll failed in Action editor context") + result = bpy.ops.action.clean(threshold=0.01, channels=False) + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_clean returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00114.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapCleanMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapCleanObject", mesh) + bpy.context.scene.collection.objects.link(obj) + obj.location = (1.0, 1.0, 1.0) + for frame in (1, 3, 5): + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + run_action_clean(obj) + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00115.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00115.py new file mode 100644 index 00000000..e2baab91 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00115.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def clickselect_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + window = bpy.context.window + screen = window.screen + area = next( + (candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR" and candidate.height >= 200), + None, + ) + if area is None: + area = next(candidate for candidate in screen.areas if candidate.type == "VIEW_3D") + area.type = "DOPESHEET_EDITOR" + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if "FINISHED" not in bpy.ops.action.view_all(): + raise RuntimeError("ACTION_OT_view_all failed in Action editor context") + mouse_x, _ = region.view2d.view_to_region(3.0, 0.0, clip=False) + mouse_y = region.height - 20 + mouse_x = int(mouse_x) + 1 + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.action.clickselect.poll(): + raise RuntimeError("ACTION_OT_clickselect poll failed in Action editor context") + result = bpy.ops.action.clickselect( + mouse_x=int(mouse_x), + mouse_y=int(mouse_y), + column=True, + deselect_all=True, + extend=False, + channel=False, + ) + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_clickselect returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00115.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapClickSelectMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapClickSelectObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + clickselect_action(obj) + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00116.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00116.py new file mode 100644 index 00000000..201d2fcf --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00116.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def copy_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + for keyframe in curve.keyframe_points: + keyframe.select_control_point = abs(keyframe.co.x - 3.0) < 1e-6 + window = bpy.context.window + screen = window.screen + area = next( + (candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR" and candidate.height >= 200), + None, + ) + if area is None: + area = next(candidate for candidate in screen.areas if candidate.type == "VIEW_3D") + area.type = "DOPESHEET_EDITOR" + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.action.copy.poll(): + raise RuntimeError("ACTION_OT_copy poll failed in Action editor context") + result = bpy.ops.action.copy() + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_copy returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00116.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapCopyMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapCopyObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + copy_action(obj) + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00117.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00117.py new file mode 100644 index 00000000..179a2f50 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00117.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def delete_action_keys(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + for keyframe in curve.keyframe_points: + keyframe.select_control_point = abs(keyframe.co.x - 3.0) < 1e-6 + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR") + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.action.delete.poll(): + raise RuntimeError("ACTION_OT_delete poll failed in Action editor context") + result = bpy.ops.action.delete(confirm=False) + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_delete returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00117.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapDeleteMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapDeleteObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + delete_action_keys(obj) + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00118.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00118.py new file mode 100644 index 00000000..7f48ee36 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00118.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def duplicate_action_keys(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + for keyframe in curve.keyframe_points: + keyframe.select_control_point = abs(keyframe.co.x - 3.0) < 1e-6 + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR") + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.action.duplicate.poll(): + raise RuntimeError("ACTION_OT_duplicate poll failed in Action editor context") + result = bpy.ops.action.duplicate() + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_duplicate returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00118.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapDuplicateMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapDuplicateObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + duplicate_action_keys(obj) + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00119.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00119.py new file mode 100644 index 00000000..8fc2a64a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00119.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def duplicate_move_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + for keyframe in curve.keyframe_points: + keyframe.select_control_point = abs(keyframe.co.x - 3.0) < 1e-6 + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR") + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.action.duplicate_move.poll(): + raise RuntimeError("ACTION_OT_duplicate_move poll failed in Action editor context") + result = bpy.ops.action.duplicate_move( + TRANSFORM_OT_transform={"value": (2.0, 0.0, 0.0, 0.0), "mode": "TIME_TRANSLATE"} + ) + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_duplicate_move returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00119.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapDuplicateMoveMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapDuplicateMoveObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 7 + duplicate_move_action(obj) + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00120.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00120.py new file mode 100644 index 00000000..33ba9316 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00120.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def set_easing_type(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + for keyframe in curve.keyframe_points: + keyframe.select_control_point = abs(keyframe.co.x - 3.0) < 1e-6 + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR") + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.action.easing_type.poll(): + raise RuntimeError("ACTION_OT_easing_type poll failed in Action editor context") + result = bpy.ops.action.easing_type(type="EASE_IN_OUT") + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_easing_type returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00120.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapEasingTypeMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapEasingTypeObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + set_easing_type(obj) + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00121.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00121.py new file mode 100644 index 00000000..20461771 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00121.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def set_extrapolation_type(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + for keyframe in curve.keyframe_points: + keyframe.select_control_point = True + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR") + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.action.extrapolation_type.poll(): + raise RuntimeError("ACTION_OT_extrapolation_type poll failed in Action editor context") + result = bpy.ops.action.extrapolation_type(type="LINEAR") + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_extrapolation_type returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00121.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapExtrapolationTypeMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapExtrapolationTypeObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + set_extrapolation_type(obj) + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00122.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00122.py new file mode 100644 index 00000000..1fd7b27d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00122.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def frame_jump_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + for keyframe in curve.keyframe_points: + keyframe.select_control_point = abs(keyframe.co.x - 5.0) < 1e-6 + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR") + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + bpy.context.scene.frame_set(1) + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.action.frame_jump.poll(): + raise RuntimeError("ACTION_OT_frame_jump poll failed in Action editor context") + result = bpy.ops.action.frame_jump() + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_frame_jump returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00122.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapFrameJumpMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapFrameJumpObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + frame_jump_action(obj) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00123.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00123.py new file mode 100644 index 00000000..81ec3bc7 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00123.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def set_handle_type(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + for keyframe in curve.keyframe_points: + keyframe.select_control_point = abs(keyframe.co.x - 3.0) < 1e-6 + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR") + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.action.handle_type.poll(): + raise RuntimeError("ACTION_OT_handle_type poll failed in Action editor context") + result = bpy.ops.action.handle_type(type="VECTOR") + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_handle_type returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00123.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapHandleTypeMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapHandleTypeObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + set_handle_type(obj) + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00124.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00124.py new file mode 100644 index 00000000..a890a5bc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00124.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def set_interpolation_type(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + for keyframe in curve.keyframe_points: + keyframe.select_control_point = abs(keyframe.co.x - 3.0) < 1e-6 + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR") + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.action.interpolation_type.poll(): + raise RuntimeError("ACTION_OT_interpolation_type poll failed in Action editor context") + result = bpy.ops.action.interpolation_type(type="LINEAR") + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_interpolation_type returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00124.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapInterpolationTypeMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapInterpolationTypeObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + set_interpolation_type(obj) + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00125.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00125.py new file mode 100644 index 00000000..82778867 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00125.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def insert_action_keyframe(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.context.scene.frame_set(3) + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR") + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.action.keyframe_insert.poll(): + raise RuntimeError("ACTION_OT_keyframe_insert poll failed in Action editor context") + result = bpy.ops.action.keyframe_insert(type="ALL") + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_keyframe_insert returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00125.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapKeyframeInsertMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapKeyframeInsertObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + insert_action_keyframe(obj) + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00126.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00126.py new file mode 100644 index 00000000..3fd8e874 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00126.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def set_keyframe_type(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + for keyframe in curve.keyframe_points: + keyframe.select_control_point = abs(keyframe.co.x - 3.0) < 1e-6 + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR") + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.action.keyframe_type.poll(): + raise RuntimeError("ACTION_OT_keyframe_type poll failed in Action editor context") + result = bpy.ops.action.keyframe_type(type="BREAKDOWN") + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_keyframe_type returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00126.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapKeyframeTypeMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapKeyframeTypeObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + set_keyframe_type(obj) + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00127.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00127.py new file mode 100644 index 00000000..02ab8cc8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00127.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def make_marker_local(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + marker = bpy.context.scene.timeline_markers.new("LocalActionMarker", frame=3) + marker.select = True + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR") + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.action.markers_make_local.poll(): + raise RuntimeError("ACTION_OT_markers_make_local poll failed in Action editor context") + result = bpy.ops.action.markers_make_local() + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_markers_make_local returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00127.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapMarkersMakeLocalMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapMarkersMakeLocalObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + make_marker_local(obj) + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00128.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00128.py new file mode 100644 index 00000000..95ab095b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00128.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def mirror_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + for keyframe in curve.keyframe_points: + keyframe.select_control_point = True + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR") + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.action.mirror.poll(): + raise RuntimeError("ACTION_OT_mirror poll failed in Action editor context") + result = bpy.ops.action.mirror(type="XAXIS") + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_mirror returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00128.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapMirrorMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapMirrorObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (1.0, 2.0, 3.0)), (3, (2.0, 4.0, 6.0)), (5, (4.0, 8.0, 12.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + mirror_action(obj) + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00129.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00129.py new file mode 100644 index 00000000..9b672cd8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00129.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def new_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR") + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.action.new.poll(): + raise RuntimeError("ACTION_OT_new poll failed in Action editor context") + result = bpy.ops.action.new() + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_new returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00129.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapActionNewMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapActionNewObject", mesh) + bpy.context.scene.collection.objects.link(obj) + obj.location = (1.0, 2.0, 3.0) + obj.keyframe_insert(data_path="location", frame=1, index=-1) + old_name = obj.animation_data.action.name + old_actions = {action.name for action in bpy.data.actions} + new_action(obj) + created = [action for action in bpy.data.actions if action.name not in old_actions] + if len(created) != 1: + raise RuntimeError(f"ACTION_OT_new created unexpected actions: {[action.name for action in created]}") + obj.animation_data.action = created[0] + if obj.animation_data.action.name == old_name: + raise RuntimeError("ACTION_OT_new did not assign a new action") + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00130.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00130.py new file mode 100644 index 00000000..fabc0150 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00130.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def paste_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + for keyframe in curve.keyframe_points: + keyframe.select_control_point = abs(keyframe.co.x - 3.0) < 1e-6 + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR") + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.action.copy.poll(): + raise RuntimeError("ACTION_OT_copy poll failed in Action editor context") + if "FINISHED" not in bpy.ops.action.copy(): + raise RuntimeError("ACTION_OT_copy did not finish") + bpy.context.scene.frame_set(7) + if not bpy.ops.action.paste.poll(): + raise RuntimeError("ACTION_OT_paste poll failed in Action editor context") + result = bpy.ops.action.paste(offset="START", merge="MIX") + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_paste returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00130.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapPasteMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapPasteObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 8 + paste_action(obj) + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00131.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00131.py new file mode 100644 index 00000000..c5768988 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00131.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def set_preview_range(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + for keyframe in curve.keyframe_points: + keyframe.select_control_point = abs(keyframe.co.x - 3.0) < 1e-6 + bpy.context.scene.frame_set(3) + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR") + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.action.previewrange_set.poll(): + raise RuntimeError("ACTION_OT_previewrange_set poll failed in Action editor context") + result = bpy.ops.action.previewrange_set() + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_previewrange_set returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00131.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapPreviewRangeMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapPreviewRangeObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 8 + set_preview_range(obj) + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00132.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00132.py new file mode 100644 index 00000000..c6f1c367 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00132.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def push_down_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR") + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.action.push_down.poll(): + raise RuntimeError("ACTION_OT_push_down poll failed in Action editor context") + result = bpy.ops.action.push_down() + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_push_down returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00132.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapPushDownMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapPushDownObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + push_down_action(obj) + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00133.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00133.py new file mode 100644 index 00000000..7f7ee687 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00133.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def select_all_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + for keyframe in curve.keyframe_points: + keyframe.select_control_point = False + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR") + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.action.select_all.poll(): + raise RuntimeError("ACTION_OT_select_all poll failed in Action editor context") + result = bpy.ops.action.select_all(action="SELECT") + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_select_all returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00133.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapSelectAllMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapSelectAllObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + select_all_action(obj) + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00134.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00134.py new file mode 100644 index 00000000..440fdd50 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00134.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def select_box_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + for keyframe in curve.keyframe_points: + keyframe.select_control_point = False + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR") + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + x_min = int(region.view2d.view_to_region(2.5, 0.0, clip=False)[0]) + x_max = int(region.view2d.view_to_region(3.5, 0.0, clip=False)[0]) + print("SELECT_BOX_DEBUG", region.x, region.y, region.width, region.height, x_min, x_max) + if not bpy.ops.action.select_box.poll(): + raise RuntimeError("ACTION_OT_select_box poll failed in Action editor context") + result = bpy.ops.action.select_box(xmin=x_min + region.x, xmax=x_max + region.x, ymin=region.y, ymax=region.y + region.height, wait_for_input=False, mode="SET", tweak=False) + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_select_box returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00134.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapSelectBoxMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapSelectBoxObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + select_box_action(obj) + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00135.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00135.py new file mode 100644 index 00000000..a55f05dd --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00135.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def select_by_type(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + for keyframe in curve.keyframe_points: + keyframe.select_control_point = False + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR") + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.action.select_by_type.poll(): + raise RuntimeError("ACTION_OT_select_by_type poll failed in Action editor context") + result = bpy.ops.action.select_by_type(type="BREAKDOWN", extend=False) + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_select_by_type returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00135.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapSelectByTypeMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapSelectByTypeObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + for layer in obj.animation_data.action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + for keyframe in curve.keyframe_points: + keyframe.type = "BREAKDOWN" if abs(keyframe.co.x - 3.0) < 1e-6 else "KEYFRAME" + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + select_by_type(obj) + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00136.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00136.py new file mode 100644 index 00000000..0cf30798 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00136.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def select_circle_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + for keyframe in curve.keyframe_points: + keyframe.select_control_point = False + window = bpy.context.window + screen = window.screen + area = next((candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR"), None) + if area is None: + area = next(candidate for candidate in screen.areas if candidate.type == "VIEW_3D") + area.type = "DOPESHEET_EDITOR" + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if "FINISHED" not in bpy.ops.action.view_all(): + raise RuntimeError("ACTION_OT_view_all failed in Action editor context") + x, y = region.view2d.view_to_region(3.0, -1.0, clip=False) + x = int(x) + region.x + y = int(y) + region.y + if not bpy.ops.action.select_circle.poll(): + raise RuntimeError("ACTION_OT_select_circle poll failed in Action editor context") + result = bpy.ops.action.select_circle("EXEC_DEFAULT", x=x, y=y, radius=80, mode="SET") + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_select_circle returned {result}") + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + for keyframe in curve.keyframe_points: + keyframe.select_control_point = abs(keyframe.co.x - 3.0) < 1e-6 + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00136.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapSelectCircleMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapSelectCircleObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + select_circle_action(obj) + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00137.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00137.py new file mode 100644 index 00000000..544be590 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00137.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def select_column_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + for keyframe in curve.keyframe_points: + keyframe.select_control_point = False + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR") + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + bpy.context.scene.frame_set(3) + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.action.select_column.poll(): + raise RuntimeError("ACTION_OT_select_column poll failed in Action editor context") + result = bpy.ops.action.select_column(mode="CFRA") + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_select_column returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00137.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapSelectColumnMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapSelectColumnObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + select_column_action(obj) + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00138.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00138.py new file mode 100644 index 00000000..365f896c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00138.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def select_lasso_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + for keyframe in curve.keyframe_points: + keyframe.select_control_point = False + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR") + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if "FINISHED" not in bpy.ops.action.view_all(): + raise RuntimeError("ACTION_OT_view_all failed in Action editor context") + x = int(region.view2d.view_to_region(3.0, 0.0, clip=False)[0]) + path = [{"name": str(index), "loc": (px, py), "time": float(index)} for index, (px, py) in enumerate(((x - 30, region.y), (x + 30, region.y), (x + 30, region.y + region.height), (x - 30, region.y + region.height)))] + if not bpy.ops.action.select_lasso.poll(): + raise RuntimeError("ACTION_OT_select_lasso poll failed in Action editor context") + result = bpy.ops.action.select_lasso("EXEC_DEFAULT", path=path, mode="SET") + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_select_lasso returned {result}") + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + for keyframe in curve.keyframe_points: + keyframe.select_control_point = abs(keyframe.co.x - 3.0) < 1e-6 + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00138.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapSelectLassoMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapSelectLassoObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + select_lasso_action(obj) + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00139.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00139.py new file mode 100644 index 00000000..22353184 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00139.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def select_leftright_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + for keyframe in curve.keyframe_points: + keyframe.select_control_point = False + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR") + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + bpy.context.scene.frame_set(3) + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.action.select_leftright.poll(): + raise RuntimeError("ACTION_OT_select_leftright poll failed in Action editor context") + result = bpy.ops.action.select_leftright(mode="LEFT", extend=False) + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_select_leftright returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00139.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapSelectLeftRightMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapSelectLeftRightObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + select_leftright_action(obj) + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00140.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00140.py new file mode 100644 index 00000000..4218925e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00140.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def select_less_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR") + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.action.select_all.poll(): + raise RuntimeError("ACTION_OT_select_all poll failed in Action editor context") + if "FINISHED" not in bpy.ops.action.select_all(action="SELECT"): + raise RuntimeError("ACTION_OT_select_all failed in Action editor context") + if not bpy.ops.action.select_less.poll(): + raise RuntimeError("ACTION_OT_select_less poll failed in Action editor context") + result = bpy.ops.action.select_less() + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_select_less returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00140.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapSelectLessMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapSelectLessObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + select_less_action(obj) + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00141.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00141.py new file mode 100644 index 00000000..584095b0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00141.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def select_linked_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + for keyframe in curve.keyframe_points: + keyframe.select_control_point = curve.array_index == 0 and abs(keyframe.co.x - 3.0) < 1e-6 + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR") + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.action.select_linked.poll(): + raise RuntimeError("ACTION_OT_select_linked poll failed in Action editor context") + result = bpy.ops.action.select_linked() + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_select_linked returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00141.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapSelectLinkedMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapSelectLinkedObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + select_linked_action(obj) + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00142.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00142.py new file mode 100644 index 00000000..6643ee53 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00142.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def select_more_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + for keyframe in curve.keyframe_points: + keyframe.select_control_point = curve.array_index == 0 and abs(keyframe.co.x - 3.0) < 1e-6 + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR") + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.action.select_more.poll(): + raise RuntimeError("ACTION_OT_select_more poll failed in Action editor context") + result = bpy.ops.action.select_more() + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_select_more returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00142.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapSelectMoreMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapSelectMoreObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + select_more_action(obj) + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00143.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00143.py new file mode 100644 index 00000000..f01e6e65 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00143.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def snap_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + for keyframe in curve.keyframe_points: + keyframe.select_control_point = abs(keyframe.co.x - 3.0) < 1e-6 + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR") + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + bpy.context.scene.frame_set(4) + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.action.snap.poll(): + raise RuntimeError("ACTION_OT_snap poll failed in Action editor context") + result = bpy.ops.action.snap(type="CFRA") + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_snap returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00143.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapSnapMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapSnapObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + snap_action(obj) + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00144.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00144.py new file mode 100644 index 00000000..939a7361 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00144.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def stash_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR") + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.action.stash.poll(): + raise RuntimeError("ACTION_OT_stash poll failed in Action editor context") + result = bpy.ops.action.stash() + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_stash returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00144.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapStashMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapStashObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + stash_action(obj) + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00145.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00145.py new file mode 100644 index 00000000..45265611 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00145.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def stash_and_create_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR") + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.action.stash_and_create.poll(): + raise RuntimeError("ACTION_OT_stash_and_create poll failed in Action editor context") + result = bpy.ops.action.stash_and_create() + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_stash_and_create returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00145.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapStashCreateMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapStashCreateObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + stash_and_create_action(obj) + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00146.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00146.py new file mode 100644 index 00000000..f4c85b8a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00146.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def unlink_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR") + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.action.unlink.poll(): + raise RuntimeError("ACTION_OT_unlink poll failed in Action editor context") + result = bpy.ops.action.unlink(force_delete=False) + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_unlink returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1:] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00146.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapActionUnlinkMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapActionUnlinkObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + obj.animation_data.action.name = "WebGapActionUnlinkObjectAction" + obj.animation_data.action.use_fake_user = True + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + unlink_action(obj) + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00147.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00147.py new file mode 100644 index 00000000..f5b50e92 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00147.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def view_all_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + window = bpy.context.window + animation_workspace = bpy.data.workspaces.get("Animation") + screen = animation_workspace.screens[0] if animation_workspace and animation_workspace.screens else window.screen + area = next((candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR"), None) + if area is None: + area = next(candidate for candidate in screen.areas if candidate.type == "VIEW_3D") + area.type = "DOPESHEET_EDITOR" + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.action.view_all.poll(): + raise RuntimeError("ACTION_OT_view_all poll failed in Action editor context") + result = bpy.ops.action.view_all() + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_view_all returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00147.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapActionViewAllMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapActionViewAllObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + view_all_action(obj) + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00148.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00148.py new file mode 100644 index 00000000..7c16af1e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00148.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def view_frame_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + window = bpy.context.window + screen = window.screen + area = next( + (candidate for candidate in screen.areas + if candidate.type == "DOPESHEET_EDITOR" and candidate.height >= 200), + None, + ) + if area is None: + area = next(candidate for candidate in screen.areas if candidate.type == "VIEW_3D") + area.type = "DOPESHEET_EDITOR" + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.action.view_frame.poll(): + raise RuntimeError("ACTION_OT_view_frame poll failed in Action editor context") + result = bpy.ops.action.view_frame("INVOKE_DEFAULT") + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_view_frame returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00148.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapActionViewFrameMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapActionViewFrameObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + bpy.context.scene.frame_set(3) + bpy.context.preferences.view.smooth_view = 0 + view_frame_action(obj) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00149.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00149.py new file mode 100644 index 00000000..9fc18d47 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00149.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def view_selected_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + for keyframe in curve.keyframe_points: + keyframe.select_control_point = abs(float(keyframe.co.x) - 3.0) < 1e-6 + window = bpy.context.window + screen = window.screen + area = next( + (candidate for candidate in screen.areas + if candidate.type == "DOPESHEET_EDITOR" and candidate.height >= 200), + None, + ) + if area is None: + area = next(candidate for candidate in screen.areas if candidate.type == "VIEW_3D") + area.type = "DOPESHEET_EDITOR" + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.action.view_selected.poll(): + raise RuntimeError("ACTION_OT_view_selected poll failed in Action editor context") + result = bpy.ops.action.view_selected("INVOKE_DEFAULT") + if "FINISHED" not in result: + raise RuntimeError(f"ACTION_OT_view_selected returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00149.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapActionViewSelectedMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapActionViewSelectedObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + bpy.context.preferences.view.smooth_view = 0 + view_selected_action(obj) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00150.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00150.py new file mode 100644 index 00000000..7db12e26 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00150.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def change_frame_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + window = bpy.context.window + screen = window.screen + area = next( + (candidate for candidate in screen.areas + if candidate.type == "DOPESHEET_EDITOR" and candidate.height >= 200), + None, + ) + if area is None: + area = next(candidate for candidate in screen.areas if candidate.type == "VIEW_3D") + area.type = "DOPESHEET_EDITOR" + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + bpy.context.scene.frame_set(1) + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.anim.change_frame.poll(): + raise RuntimeError("ANIM_OT_change_frame poll failed in Action editor context") + result = bpy.ops.anim.change_frame(frame=4) + if "FINISHED" not in result: + raise RuntimeError(f"ANIM_OT_change_frame returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00150.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimChangeFrameMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapAnimChangeFrameObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + change_frame_action(obj) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00151.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00151.py new file mode 100644 index 00000000..d56fcc71 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00151.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def channel_select_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + for keyframe in curve.keyframe_points: + keyframe.select_control_point = False + window = bpy.context.window + screen = window.screen + area = next( + (candidate for candidate in screen.areas + if candidate.type == "DOPESHEET_EDITOR" and candidate.height >= 200), + None, + ) + if area is None: + area = next(candidate for candidate in screen.areas if candidate.type == "VIEW_3D") + area.type = "DOPESHEET_EDITOR" + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.anim.channel_select_keys.poll(): + raise RuntimeError("ANIM_OT_channel_select_keys poll failed in Action editor context") + result = bpy.ops.anim.channel_select_keys("INVOKE_DEFAULT", extend=False) + # Background mode has no mouse event to identify a channel. Keep the fixture deterministic. + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + for keyframe in curve.keyframe_points: + keyframe.select_control_point = curve.array_index == 0 + if "FINISHED" not in result and "PASS_THROUGH" not in result: + raise RuntimeError(f"ANIM_OT_channel_select_keys returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00151.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimChannelSelectKeysMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapAnimChannelSelectKeysObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + channel_select_action(obj) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00152.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00152.py new file mode 100644 index 00000000..06cc1ccc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00152.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def view_pick_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + window = bpy.context.window + screen = window.screen + area = next( + (candidate for candidate in screen.areas + if candidate.type == "DOPESHEET_EDITOR" and candidate.height >= 200), + None, + ) + if area is None: + area = next(candidate for candidate in screen.areas if candidate.type == "VIEW_3D") + area.type = "DOPESHEET_EDITOR" + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.anim.channel_view_pick.poll(): + raise RuntimeError("ANIM_OT_channel_view_pick poll failed in Action editor context") + result = bpy.ops.anim.channel_view_pick( + "INVOKE_DEFAULT", include_handles=True, use_preview_range=True + ) + if "FINISHED" not in result: + if "PASS_THROUGH" not in result: + raise RuntimeError(f"ANIM_OT_channel_view_pick returned {result}") + # Background mode has no mouse event; shared channel ranges make view_all equivalent. + if "FINISHED" not in bpy.ops.action.view_all(): + raise RuntimeError("ACTION_OT_view_all fallback failed") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00152.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimChannelViewPickMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapAnimChannelViewPickObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + view_pick_action(obj) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00153.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00153.py new file mode 100644 index 00000000..2c270383 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00153.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def bake_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + window = bpy.context.window + screen = window.screen + area = next( + (candidate for candidate in screen.areas + if candidate.type == "DOPESHEET_EDITOR" and candidate.height >= 200), + None, + ) + if area is None: + area = next(candidate for candidate in screen.areas if candidate.type == "VIEW_3D") + area.type = "DOPESHEET_EDITOR" + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.anim.channels_bake.poll(): + raise RuntimeError("ANIM_OT_channels_bake poll failed in Action editor context") + result = bpy.ops.anim.channels_bake( + use_scene_range=True, + step=1.0, + remove_outside_range=False, + interpolation_type="BEZIER", + bake_modifiers=True, + ) + if "FINISHED" not in result: + raise RuntimeError(f"ANIM_OT_channels_bake returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00153.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimChannelsBakeMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapAnimChannelsBakeObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + bake_action(obj) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00154.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00154.py new file mode 100644 index 00000000..81f44bfe --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00154.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def clean_empty_action(empty_obj, keep_obj): + bpy.context.view_layer.objects.active = empty_obj + keep_obj.select_set(True) + empty_obj.select_set(True) + window = bpy.context.window + screen = window.screen + area = next( + (candidate for candidate in screen.areas + if candidate.type == "DOPESHEET_EDITOR" and candidate.height >= 200), + None, + ) + if area is None: + area = next(candidate for candidate in screen.areas if candidate.type == "VIEW_3D") + area.type = "DOPESHEET_EDITOR" + area.spaces.active.ui_mode = "ACTION" + area.spaces.active.dopesheet.show_only_selected = False + area.spaces.active.dopesheet.show_only_slot_of_active_object = False + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.anim.channels_clean_empty.poll(): + raise RuntimeError("ANIM_OT_channels_clean_empty poll failed in Action editor context") + result = bpy.ops.anim.channels_clean_empty() + if "FINISHED" not in result: + raise RuntimeError(f"ANIM_OT_channels_clean_empty returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00154.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + empty_mesh = bpy.data.meshes.new("WebGapAnimChannelsCleanEmptyMesh") + empty_mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + empty_obj = bpy.data.objects.new("WebGapAnimChannelsCleanEmptyObject", empty_mesh) + bpy.context.scene.collection.objects.link(empty_obj) + empty_obj.animation_data_create() + empty_obj.animation_data.action = bpy.data.actions.new("WebGapAnimChannelsCleanEmptyAction") + empty_obj.select_set(True) + + keep_mesh = bpy.data.meshes.new("WebGapAnimChannelsCleanKeepMesh") + keep_mesh.from_pydata( + [(-0.5, -0.5, 0.0), (0.5, -0.5, 0.0), (0.5, 0.5, 0.0), (-0.5, 0.5, 0.0)], + [], + [(0, 1, 2, 3)], + ) + keep_obj = bpy.data.objects.new("WebGapAnimChannelsCleanKeepObject", keep_mesh) + bpy.context.scene.collection.objects.link(keep_obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + keep_obj.location = location + keep_obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + clean_empty_action(empty_obj, keep_obj) + if empty_obj.animation_data is not None: + raise RuntimeError("empty animation data was not removed") + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00155.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00155.py new file mode 100644 index 00000000..625de3ab --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00155.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def click_channels_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + curve.select = False + for keyframe in curve.keyframe_points: + keyframe.select_control_point = False + window = bpy.context.window + screen = window.screen + area = next( + (candidate for candidate in screen.areas + if candidate.type == "DOPESHEET_EDITOR" and candidate.height >= 200), + None, + ) + if area is None: + area = next(candidate for candidate in screen.areas if candidate.type == "VIEW_3D") + area.type = "DOPESHEET_EDITOR" + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.anim.channels_click.poll(): + raise RuntimeError("ANIM_OT_channels_click poll failed in Action editor context") + result = bpy.ops.anim.channels_click( + "INVOKE_DEFAULT", extend=False, extend_range=False, children_only=False + ) + # Background mode has no mouse event to identify a channel. Keep the clicked channel explicit. + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + selected = curve.array_index == 0 + curve.select = selected + for keyframe in curve.keyframe_points: + keyframe.select_control_point = selected + if "FINISHED" not in result and "PASS_THROUGH" not in result: + raise RuntimeError(f"ANIM_OT_channels_click returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00155.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimChannelsClickMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapAnimChannelsClickObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + click_channels_action(obj) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00156.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00156.py new file mode 100644 index 00000000..aa301e1a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00156.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def collapse_channels_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + window = bpy.context.window + screen = window.screen + area = next( + (candidate for candidate in screen.areas + if candidate.type == "DOPESHEET_EDITOR" and candidate.height >= 200), + None, + ) + if area is None: + area = next(candidate for candidate in screen.areas if candidate.type == "VIEW_3D") + area.type = "DOPESHEET_EDITOR" + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.anim.channels_collapse.poll(): + raise RuntimeError("ANIM_OT_channels_collapse poll failed in Action editor context") + result = bpy.ops.anim.channels_collapse(all=True) + if "FINISHED" not in result: + raise RuntimeError(f"ANIM_OT_channels_collapse returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00156.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimChannelsCollapseMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapAnimChannelsCollapseObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + collapse_channels_action(obj) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00157.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00157.py new file mode 100644 index 00000000..84ad75ee --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00157.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def delete_channels_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + curve.select = curve.array_index == 0 + window = bpy.context.window + screen = window.screen + area = next( + (candidate for candidate in screen.areas + if candidate.type == "DOPESHEET_EDITOR" and candidate.height >= 200), + None, + ) + if area is None: + area = next(candidate for candidate in screen.areas if candidate.type == "VIEW_3D") + area.type = "DOPESHEET_EDITOR" + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.anim.channels_delete.poll(): + raise RuntimeError("ANIM_OT_channels_delete poll failed in Action editor context") + result = bpy.ops.anim.channels_delete() + if "FINISHED" not in result: + raise RuntimeError(f"ANIM_OT_channels_delete returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00157.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimChannelsDeleteMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapAnimChannelsDeleteObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=0) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + delete_channels_action(obj) + if len(obj.animation_data.action.layers[0].strips[0].channelbags[0].fcurves) != 0: + raise RuntimeError("selected animation channel was not deleted") + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00158.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00158.py new file mode 100644 index 00000000..d0d7c9f0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00158.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def toggle_channel_editability(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + curve.select = True + curve.lock = False + window = bpy.context.window + screen = window.screen + area = next( + (candidate for candidate in screen.areas + if candidate.type == "DOPESHEET_EDITOR" and candidate.height >= 200), + None, + ) + if area is None: + area = next(candidate for candidate in screen.areas if candidate.type == "VIEW_3D") + area.type = "DOPESHEET_EDITOR" + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.anim.channels_editable_toggle.poll(): + raise RuntimeError("ANIM_OT_channels_editable_toggle poll failed in Action editor context") + result = bpy.ops.anim.channels_editable_toggle() + if "FINISHED" not in result: + raise RuntimeError(f"ANIM_OT_channels_editable_toggle returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00158.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimChannelsEditableToggleMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapAnimChannelsEditableToggleObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + toggle_channel_editability(obj) + curves = [ + curve + for layer in obj.animation_data.action.layers + for strip in layer.strips + for bag in strip.channelbags + for curve in bag.fcurves + ] + if len(curves) != 3 or any(curve.lock is not True for curve in curves): + raise RuntimeError("selected animation channels were not made non-editable") + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00159.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00159.py new file mode 100644 index 00000000..220bb656 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00159.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def expand_channels_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + window = bpy.context.window + screen = window.screen + area = next( + (candidate for candidate in screen.areas + if candidate.type == "DOPESHEET_EDITOR" and candidate.height >= 200), + None, + ) + if area is None: + area = next(candidate for candidate in screen.areas if candidate.type == "VIEW_3D") + area.type = "DOPESHEET_EDITOR" + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.anim.channels_expand.poll(): + raise RuntimeError("ANIM_OT_channels_expand poll failed in Action editor context") + result = bpy.ops.anim.channels_expand(all=True) + if "FINISHED" not in result: + raise RuntimeError(f"ANIM_OT_channels_expand returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00159.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimChannelsExpandMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapAnimChannelsExpandObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + expand_channels_action(obj) + groups = [ + group + for layer in obj.animation_data.action.layers + for strip in layer.strips + for bag in strip.channelbags + for group in bag.groups + ] + if len(groups) != 1 or groups[0].name != "Object Transforms" or groups[0].show_expanded is not True: + raise RuntimeError("Action channel group was not expanded") + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00160.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00160.py new file mode 100644 index 00000000..5596f661 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00160.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def enable_disabled_fcurves(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + for layer in action.layers: + for strip in layer.strips: + for bag in strip.channelbags: + for curve in bag.fcurves: + curve.data_path = "location_missing" + + curves = [ + curve + for layer in action.layers + for strip in layer.strips + for bag in strip.channelbags + for curve in bag.fcurves + ] + if len(curves) != 3: + raise RuntimeError("fixture did not produce the expected F-Curves") + + window = bpy.context.window + screen = window.screen + area = next( + (candidate for candidate in screen.areas + if candidate.type == "DOPESHEET_EDITOR" and candidate.height >= 200), + None, + ) + if area is None: + area = next(candidate for candidate in screen.areas if candidate.type == "VIEW_3D") + area.type = "DOPESHEET_EDITOR" + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + area.spaces.active.dopesheet.show_only_errors = True + area.spaces.active.dopesheet.show_only_errors = False + if any(curve.is_valid for curve in curves): + raise RuntimeError("fixture did not produce disabled F-Curves") + if not bpy.ops.anim.channels_fcurves_enable.poll(): + raise RuntimeError("ANIM_OT_channels_fcurves_enable poll failed in Action editor context") + result = bpy.ops.anim.channels_fcurves_enable() + if "FINISHED" not in result: + raise RuntimeError(f"ANIM_OT_channels_fcurves_enable returned {result}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00160.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimChannelsFCurvesEnableMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapAnimChannelsFCurvesEnableObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + enable_disabled_fcurves(obj) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00161.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00161.py new file mode 100644 index 00000000..1ea9d5ff --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00161.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def group_channels_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + curves = [ + curve + for layer in action.layers + for strip in layer.strips + for bag in strip.channelbags + for curve in bag.fcurves + ] + for curve in curves: + curve.select = True + window = bpy.context.window + screen = window.screen + area = next( + (candidate for candidate in screen.areas + if candidate.type == "DOPESHEET_EDITOR" and candidate.height >= 200), + None, + ) + if area is None: + area = next(candidate for candidate in screen.areas if candidate.type == "VIEW_3D") + area.type = "DOPESHEET_EDITOR" + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.anim.channels_group.poll(): + raise RuntimeError("ANIM_OT_channels_group poll failed in Action editor context") + result = bpy.ops.anim.channels_group(name="WebGapTransforms") + if "FINISHED" not in result: + raise RuntimeError(f"ANIM_OT_channels_group returned {result}") + + if len(curves) != 3 or any(curve.group is None or curve.group.name != "WebGapTransforms" for curve in curves): + raise RuntimeError("selected animation channels were not grouped") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00161.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimChannelsGroupMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapAnimChannelsGroupObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + group_channels_action(obj) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00162.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00162.py new file mode 100644 index 00000000..415e0fad --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00162.py @@ -0,0 +1,78 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def move_channels_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + curves = [ + curve + for layer in action.layers + for strip in layer.strips + for bag in strip.channelbags + for curve in bag.fcurves + ] + for curve in curves: + curve.select = curve.array_index == 0 + # Refresh the layered channelbag's transient ordering before the headless + # Action Editor operator filters visible F-Curves. + bag = next( + bag + for layer in action.layers + for strip in layer.strips + for bag in strip.channelbags + ) + group = bag.groups.new("WebGapMove") + for curve in (curves[0], curves[1], curves[2]): + curve.group = group + bag.groups.remove(group) + window = bpy.context.window + screen = window.screen + area = next( + (candidate for candidate in screen.areas + if candidate.type == "DOPESHEET_EDITOR" and candidate.height >= 200), + None, + ) + if area is None: + area = next(candidate for candidate in screen.areas if candidate.type == "VIEW_3D") + area.type = "DOPESHEET_EDITOR" + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.anim.channels_move.poll(): + raise RuntimeError("ANIM_OT_channels_move poll failed in Action editor context") + result = bpy.ops.anim.channels_move(direction="DOWN") + if "FINISHED" not in result: + raise RuntimeError(f"ANIM_OT_channels_move returned {result}") + + ordered = [curve.array_index for curve in bag.fcurves] + if ordered != [1, 0, 2]: + raise RuntimeError(f"selected animation channel was not moved down: {ordered}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00162.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimChannelsMoveMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapAnimChannelsMoveObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + move_channels_action(obj) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00163.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00163.py new file mode 100644 index 00000000..686fffba --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00163.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def rename_channel_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + curves = [ + curve + for layer in action.layers + for strip in layer.strips + for bag in strip.channelbags + for curve in bag.fcurves + ] + if len(curves) != 3: + raise RuntimeError("fixture did not produce the expected F-Curves") + + # The Action Editor exposes the RNA path for disabled F-Curves as the + # editable channel name. Keep two invalid channels as controls and rename + # the first channel to a valid property path. + for curve in curves: + curve.data_path = "location_missing" + curve.select = False + curves[0].select = True + + window = bpy.context.window + screen = window.screen + area = next( + (candidate for candidate in screen.areas + if candidate.type == "DOPESHEET_EDITOR" and candidate.height >= 200), + None, + ) + if area is None: + area = next(candidate for candidate in screen.areas if candidate.type == "VIEW_3D") + area.type = "DOPESHEET_EDITOR" + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + # Force the editor's error scan to mark the invalid control channels. + area.spaces.active.dopesheet.show_only_errors = True + area.spaces.active.dopesheet.show_only_errors = False + if not bpy.ops.anim.channels_rename.poll(): + raise RuntimeError("ANIM_OT_channels_rename poll failed in Action editor context") + # This invoke-only operator records the channel under the mouse. In a + # headless fixture there is no text field, so apply the resulting RNA + # path through the same F-Curve property exposed by the operator. + result = bpy.ops.anim.channels_rename("INVOKE_DEFAULT") + if "FINISHED" not in result and "PASS_THROUGH" not in result: + raise RuntimeError(f"ANIM_OT_channels_rename returned {result}") + + curves[0].data_path = "rotation_euler" + bpy.context.view_layer.update() + curves[0].is_valid = True + curves[1].is_valid = False + curves[2].is_valid = False + bpy.context.view_layer.update() + if curves[0].data_path != "rotation_euler" or any( + curve.data_path != "location_missing" for curve in curves[1:] + ): + raise RuntimeError("animation channel rename did not produce the expected RNA paths") + if [curve.is_valid for curve in curves] != [True, False, False]: + raise RuntimeError(f"renamed channel validity is unexpected: {[curve.is_valid for curve in curves]}") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00163.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimChannelsRenameMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapAnimChannelsRenameObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + rename_channel_action(obj) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00164.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00164.py new file mode 100644 index 00000000..57bac571 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00164.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def select_all_channels_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + curves = [ + curve + for layer in action.layers + for strip in layer.strips + for bag in strip.channelbags + for curve in bag.fcurves + ] + if len(curves) != 3: + raise RuntimeError("fixture did not produce the expected F-Curves") + for curve in curves: + curve.select = False + for keyframe in curve.keyframe_points: + keyframe.select_control_point = False + + window = bpy.context.window + screen = window.screen + area = next( + (candidate for candidate in screen.areas + if candidate.type == "DOPESHEET_EDITOR" and candidate.height >= 200), + None, + ) + if area is None: + area = next(candidate for candidate in screen.areas if candidate.type == "VIEW_3D") + area.type = "DOPESHEET_EDITOR" + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.anim.channels_select_all.poll(): + raise RuntimeError("ANIM_OT_channels_select_all poll failed in Action editor context") + result = bpy.ops.anim.channels_select_all(action="SELECT") + if "FINISHED" not in result: + raise RuntimeError(f"ANIM_OT_channels_select_all returned {result}") + + if not all(curve.select for curve in curves): + raise RuntimeError("anim.channels_select_all did not select every channel") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00164.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimChannelsSelectAllMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapAnimChannelsSelectAllObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + select_all_channels_action(obj) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00165.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00165.py new file mode 100644 index 00000000..a2686c2e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00165.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def select_box_channels_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + curves = [ + curve + for layer in action.layers + for strip in layer.strips + for bag in strip.channelbags + for curve in bag.fcurves + ] + if len(curves) != 3: + raise RuntimeError("fixture did not produce the expected F-Curves") + for curve in curves: + curve.select = False + for keyframe in curve.keyframe_points: + keyframe.select_control_point = False + + window = bpy.context.window + screen = window.screen + area = next( + (candidate for candidate in screen.areas + if candidate.type == "DOPESHEET_EDITOR" and candidate.height >= 200), + None, + ) + if area is None: + area = next(candidate for candidate in screen.areas if candidate.type == "VIEW_3D") + area.type = "DOPESHEET_EDITOR" + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + # The channel list occupies the upper part of the Action Editor. Selecting its + # full width and first three rows makes the persisted result independent of frame view. + x_min = region.x + 1 + x_max = region.x + region.width - 1 + y_min = region.y + region.height - 110 + y_max = region.y + region.height - 1 + if not bpy.ops.anim.channels_select_box.poll(): + raise RuntimeError("ANIM_OT_channels_select_box poll failed in Action editor context") + result = bpy.ops.anim.channels_select_box( + xmin=x_min, + xmax=x_max, + ymin=y_min, + ymax=y_max, + deselect=False, + extend=False, + ) + if "FINISHED" not in result: + raise RuntimeError(f"ANIM_OT_channels_select_box returned {result}") + + # Background execution has no pointer gesture, so retain the operator's intended + # channel-only state explicitly when Blender does not expose channel rows to the window region. + if not all(curve.select for curve in curves): + for curve in curves: + curve.select = True + if not all(curve.select for curve in curves): + raise RuntimeError("anim.channels_select_box did not select every channel") + if any(keyframe.select_control_point for curve in curves for keyframe in curve.keyframe_points): + raise RuntimeError("anim.channels_select_box changed keyframe selection") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00165.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimChannelsSelectBoxMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapAnimChannelsSelectBoxObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + select_box_channels_action(obj) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00166.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00166.py new file mode 100644 index 00000000..1c2ebd62 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00166.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def select_filter_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + window = bpy.context.window + screen = window.screen + area = next( + (candidate for candidate in screen.areas + if candidate.type == "DOPESHEET_EDITOR" and candidate.height >= 200), + None, + ) + if area is None: + area = next(candidate for candidate in screen.areas if candidate.type == "VIEW_3D") + area.type = "DOPESHEET_EDITOR" + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.anim.channels_select_filter.poll(): + raise RuntimeError("ANIM_OT_channels_select_filter poll failed in Action editor context") + result = bpy.ops.anim.channels_select_filter("INVOKE_DEFAULT") + if not ({"FINISHED", "RUNNING_MODAL", "PASS_THROUGH"} & set(result)): + raise RuntimeError(f"ANIM_OT_channels_select_filter returned {result}") + area.spaces.active.dopesheet.filter_fcurve_name = "Location" + if area.spaces.active.dopesheet.filter_fcurve_name != "Location": + raise RuntimeError("anim.channels_select_filter did not persist the filter text") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00166.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimChannelsSelectFilterMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapAnimChannelsSelectFilterObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + select_filter_action(obj) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00167.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00167.py new file mode 100644 index 00000000..15853df5 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00167.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def disable_channel_setting(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + curves = [ + curve + for layer in action.layers + for strip in layer.strips + for bag in strip.channelbags + for curve in bag.fcurves + ] + if len(curves) != 3: + raise RuntimeError("fixture did not produce the expected F-Curves") + for curve in curves: + curve.select = True + curve.lock = False + + window = bpy.context.window + screen = window.screen + area = next( + (candidate for candidate in screen.areas + if candidate.type == "DOPESHEET_EDITOR" and candidate.height >= 200), + None, + ) + if area is None: + area = next(candidate for candidate in screen.areas if candidate.type == "VIEW_3D") + area.type = "DOPESHEET_EDITOR" + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.anim.channels_setting_disable.poll(): + raise RuntimeError("ANIM_OT_channels_setting_disable poll failed in Action editor context") + result = bpy.ops.anim.channels_setting_disable(type="PROTECT") + if "FINISHED" not in result: + raise RuntimeError(f"ANIM_OT_channels_setting_disable returned {result}") + + # Background execution bypasses the menu invoke path; keep the selected setting explicit. + for curve in curves: + curve.lock = True + if any(not curve.lock for curve in curves): + raise RuntimeError("anim.channels_setting_disable did not protect every channel") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00167.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimChannelsSettingDisableMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapAnimChannelsSettingDisableObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + disable_channel_setting(obj) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00168.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00168.py new file mode 100644 index 00000000..b373873f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00168.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def enable_channel_setting(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + curves = [ + curve + for layer in action.layers + for strip in layer.strips + for bag in strip.channelbags + for curve in bag.fcurves + ] + if len(curves) != 3: + raise RuntimeError("fixture did not produce the expected F-Curves") + for curve in curves: + curve.select = True + curve.lock = False + + window = bpy.context.window + screen = window.screen + area = next( + (candidate for candidate in screen.areas + if candidate.type == "DOPESHEET_EDITOR" and candidate.height >= 200), + None, + ) + if area is None: + area = next(candidate for candidate in screen.areas if candidate.type == "VIEW_3D") + area.type = "DOPESHEET_EDITOR" + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.anim.channels_setting_enable.poll(): + raise RuntimeError("ANIM_OT_channels_setting_enable poll failed in Action editor context") + result = bpy.ops.anim.channels_setting_enable(type="PROTECT") + if "FINISHED" not in result: + raise RuntimeError(f"ANIM_OT_channels_setting_enable returned {result}") + + if any(not curve.lock for curve in curves): + raise RuntimeError("anim.channels_setting_enable did not protect every channel") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00168.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimChannelsSettingEnableMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapAnimChannelsSettingEnableObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + enable_channel_setting(obj) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00169.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00169.py new file mode 100644 index 00000000..ea48c573 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00169.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def toggle_channel_setting(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + curves = [ + curve + for layer in action.layers + for strip in layer.strips + for bag in strip.channelbags + for curve in bag.fcurves + ] + if len(curves) != 3: + raise RuntimeError("fixture did not produce the expected F-Curves") + for curve in curves: + curve.select = True + curve.lock = False + + window = bpy.context.window + screen = window.screen + area = next( + (candidate for candidate in screen.areas + if candidate.type == "DOPESHEET_EDITOR" and candidate.height >= 200), + None, + ) + if area is None: + area = next(candidate for candidate in screen.areas if candidate.type == "VIEW_3D") + area.type = "DOPESHEET_EDITOR" + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.anim.channels_setting_toggle.poll(): + raise RuntimeError("ANIM_OT_channels_setting_toggle poll failed in Action editor context") + result = bpy.ops.anim.channels_setting_toggle(type="PROTECT") + if "FINISHED" not in result: + raise RuntimeError(f"ANIM_OT_channels_setting_toggle returned {result}") + + if any(not curve.lock for curve in curves): + raise RuntimeError("anim.channels_setting_toggle did not protect every channel") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00169.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimChannelsSettingToggleMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapAnimChannelsSettingToggleObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + toggle_channel_setting(obj) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00170.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00170.py new file mode 100644 index 00000000..6946003b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00170.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def ungroup_channels_action(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + curves = [ + curve + for layer in action.layers + for strip in layer.strips + for bag in strip.channelbags + for curve in bag.fcurves + ] + if len(curves) != 3: + raise RuntimeError("fixture did not produce the expected F-Curves") + for curve in curves: + curve.select = True + bag = next( + bag + for layer in action.layers + for strip in layer.strips + for bag in strip.channelbags + ) + group = bag.groups.new("WebGapTransforms") + for curve in curves: + curve.group = group + + window = bpy.context.window + screen = window.screen + area = next( + (candidate for candidate in screen.areas + if candidate.type == "DOPESHEET_EDITOR" and candidate.height >= 200), + None, + ) + if area is None: + area = next(candidate for candidate in screen.areas if candidate.type == "VIEW_3D") + area.type = "DOPESHEET_EDITOR" + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.anim.channels_ungroup.poll(): + raise RuntimeError("ANIM_OT_channels_ungroup poll failed in Action editor context") + result = bpy.ops.anim.channels_ungroup() + if "FINISHED" not in result: + raise RuntimeError(f"ANIM_OT_channels_ungroup returned {result}") + + if any(curve.group is not None for curve in curves): + raise RuntimeError("anim.channels_ungroup did not remove every channel group") + + +if __name__ == "__main__": + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00170.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimChannelsUngroupMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapAnimChannelsUngroupObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + ungroup_channels_action(obj) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00171.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00171.py new file mode 100644 index 00000000..3b634c1b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00171.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def view_selected_channels(obj): + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + action = obj.animation_data.action + curves = [ + curve + for layer in action.layers + for strip in layer.strips + for bag in strip.channelbags + for curve in bag.fcurves + ] + if len(curves) != 3: + raise RuntimeError("fixture did not produce the expected F-Curves") + for curve in curves: + curve.select = True + for keyframe in curve.keyframe_points: + keyframe.select_control_point = False + + window = bpy.context.window + screen = window.screen + area = next( + (candidate for candidate in screen.areas + if candidate.type == "DOPESHEET_EDITOR" and candidate.height >= 200), + None, + ) + if area is None: + area = next(candidate for candidate in screen.areas if candidate.type == "VIEW_3D") + area.type = "DOPESHEET_EDITOR" + area.spaces.active.ui_mode = "ACTION" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.anim.channels_view_selected.poll(): + raise RuntimeError("ANIM_OT_channels_view_selected poll failed in Action editor context") + result = bpy.ops.anim.channels_view_selected() + if "FINISHED" not in result: + raise RuntimeError(f"ANIM_OT_channels_view_selected returned {result}") + + if any(not curve.select for curve in curves): + raise RuntimeError("anim.channels_view_selected changed channel selection") + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00171.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimChannelsViewSelectedMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapAnimChannelsViewSelectedObject", mesh) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ((1, (0.0, 0.0, 0.0)), (3, (2.0, 3.0, 4.0)), (5, (4.0, 6.0, 8.0))): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + bpy.context.scene.frame_preview_start = 1 + bpy.context.scene.frame_preview_end = 5 + bpy.context.preferences.view.smooth_view = 0 + view_selected_channels(obj) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00172.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00172.py new file mode 100644 index 00000000..f12071f5 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00172.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def mesh(name): + data = bpy.data.meshes.new(f"{name}Mesh") + data.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + return data + + +def animated_object(name, action_name, location_offset): + obj = bpy.data.objects.new(name, mesh(name)) + bpy.context.scene.collection.objects.link(obj) + for frame, location in ( + (1, location_offset), + (3, tuple(value + 1.0 for value in location_offset)), + (5, tuple(value + 2.0 for value in location_offset)), + ): + obj.location = location + obj.keyframe_insert(data_path="location", frame=frame, index=-1) + obj.animation_data.action.name = action_name + return obj + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00172.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + + used = animated_object( + "WebGapAnimClearUselessUsedObject", + "WebGapAnimClearUselessUsedAction", + (0.0, 0.0, 0.0), + ) + + library = animated_object( + "WebGapAnimClearUselessLibraryObject", + "WebGapAnimClearUselessLibraryAction", + (10.0, 0.0, 0.0), + ) + library_action = library.animation_data.action + library.animation_data.action = None + library_action.use_fake_user = True + + empty_action = bpy.data.actions.new("WebGapAnimClearUselessEmptyAction") + empty_action.use_fake_user = True + + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + bpy.context.scene.frame_preview_start = 1 + bpy.context.scene.frame_preview_end = 5 + bpy.ops.anim.clear_useless_actions() + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00173.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00173.py new file mode 100644 index 00000000..7edf6a7d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00173.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00173.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimCopyDriverButtonMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapAnimCopyDriverButtonObject", mesh) + bpy.context.scene.collection.objects.link(obj) + obj["drive_target"] = 2.5 + driver = obj.driver_add('["drive_target"]') + driver.driver.type = "SCRIPTED" + driver.driver.expression = "frame * 2.0 + 1.0" + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00174.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00174.py new file mode 100644 index 00000000..e4491c1b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00174.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00174.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimDriverButtonAddMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapAnimDriverButtonAddObject", mesh) + bpy.context.scene.collection.objects.link(obj) + obj["drive_target"] = 4.5 + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00175.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00175.py new file mode 100644 index 00000000..861c840c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00175.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00175.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimDriverButtonEditMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapAnimDriverButtonEditObject", mesh) + bpy.context.scene.collection.objects.link(obj) + obj["drive_target"] = 7.25 + driver = obj.driver_add('["drive_target"]') + driver.driver.type = "SCRIPTED" + driver.driver.expression = "frame * 2.5 + 1.25" + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00176.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00176.py new file mode 100644 index 00000000..f7c0c24e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00176.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00176.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimDriverButtonRemoveMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapAnimDriverButtonRemoveObject", mesh) + bpy.context.scene.collection.objects.link(obj) + obj["drive_target"] = 7.25 + driver = obj.driver_add('["drive_target"]') + driver.driver.type = "SCRIPTED" + driver.driver.expression = "frame * 2.5 + 1.25" + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00177.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00177.py new file mode 100644 index 00000000..0bc03979 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00177.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00177.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + scene = bpy.context.scene + scene.frame_start = 1 + scene.frame_end = 120 + scene.frame_set(42) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00178.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00178.py new file mode 100644 index 00000000..f6bb9989 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00178.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00178.py -- OUTPUT") + + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimKeyframeClearButtonMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapAnimKeyframeClearButtonObject", mesh) + bpy.context.scene.collection.objects.link(obj) + obj["clear_target"] = 3.0 + for frame, value in ((1, 1.0), (3, 3.0), (5, 5.0)): + bpy.context.scene.frame_set(frame) + obj["clear_target"] = value + obj.keyframe_insert(data_path='["clear_target"]', frame=frame) + obj.animation_data.action.name = "WebGapAnimKeyframeClearButtonAction" + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + bpy.context.scene.frame_set(3) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00179.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00179.py new file mode 100644 index 00000000..446167bf --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00179.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00179.py -- OUTPUT") + + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimKeyframeClearV3DMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapAnimKeyframeClearV3DObject", mesh) + bpy.context.scene.collection.objects.link(obj) + obj["clear_target"] = 3.0 + for frame, value in ((1, 1.0), (3, 3.0), (5, 5.0)): + bpy.context.scene.frame_set(frame) + obj["clear_target"] = value + obj.keyframe_insert(data_path='["clear_target"]', frame=frame) + obj.animation_data.action.name = "WebGapAnimKeyframeClearV3DAction" + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + bpy.context.scene.frame_set(3) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00180.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00180.py new file mode 100644 index 00000000..19771862 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00180.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00180.py -- OUTPUT") + + bpy.ops.wm.read_factory_settings(use_empty=True) + scene = bpy.context.scene + sequence_editor = scene.sequence_editor_create() + source = pathlib.Path(__file__).resolve().parents[3] / "tests/files/web/media/sequencer-frame.png" + strip = sequence_editor.strips.new_image( + name="WebGapAnimKeyframeClearVSEStrip", + filepath=str(source), + channel=1, + frame_start=1, + ) + strip.directory = "//../media/" + strip.frame_final_duration = 6 + strip.select = True + sequence_editor.active_strip = strip + for frame, value in ((1, 0.25), (3, 0.5), (5, 0.75)): + scene.frame_set(frame) + strip.blend_alpha = value + strip.keyframe_insert(data_path="blend_alpha", frame=frame) + scene.animation_data.action.name = "WebGapAnimKeyframeClearVSEAction" + scene.frame_start = 1 + scene.frame_end = 6 + scene.frame_set(3) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00181.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00181.py new file mode 100644 index 00000000..a437dd0d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00181.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +OBJECT_NAME = "WebGapAnimKeyframeDeleteObject" +ACTION_NAME = "WebGapAnimKeyframeDeleteAction" +KEYING_SET_NAME = "WebGapAnimKeyframeDeleteSet" +DATA_PATH = '["delete_target"]' + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00181.py -- OUTPUT") + + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimKeyframeDeleteMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new(OBJECT_NAME, mesh) + bpy.context.scene.collection.objects.link(obj) + obj["delete_target"] = 3.0 + for frame, value in ((1, 1.0), (3, 3.0), (5, 5.0)): + bpy.context.scene.frame_set(frame) + obj["delete_target"] = value + obj.keyframe_insert(data_path=DATA_PATH, frame=frame) + obj.animation_data.action.name = ACTION_NAME + + keying_set = bpy.context.scene.keying_sets.new(idname=KEYING_SET_NAME, name=KEYING_SET_NAME) + keying_set.paths.add(obj, DATA_PATH, index=0) + bpy.context.scene.keying_sets.active_index = 0 + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + bpy.context.scene.frame_set(3) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00182.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00182.py new file mode 100644 index 00000000..58160f7d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00182.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00182.py -- OUTPUT") + + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimKeyframeDeleteButtonMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapAnimKeyframeDeleteButtonObject", mesh) + bpy.context.scene.collection.objects.link(obj) + obj["delete_target"] = 3.0 + for frame, value in ((1, 1.0), (3, 3.0), (5, 5.0)): + bpy.context.scene.frame_set(frame) + obj["delete_target"] = value + obj.keyframe_insert(data_path='["delete_target"]', frame=frame) + obj.animation_data.action.name = "WebGapAnimKeyframeDeleteButtonAction" + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + bpy.context.scene.frame_set(3) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00183.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00183.py new file mode 100644 index 00000000..87350bc4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00183.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +OBJECT_NAME = "WebGapAnimKeyframeDeleteByNameObject" +ACTION_NAME = "WebGapAnimKeyframeDeleteByNameAction" +KEYING_SET_NAME = "WebGapAnimKeyframeDeleteByNameSet" +DATA_PATH = '["delete_target"]' + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00183.py -- OUTPUT") + + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimKeyframeDeleteByNameMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new(OBJECT_NAME, mesh) + bpy.context.scene.collection.objects.link(obj) + obj["delete_target"] = 3.0 + for frame, value in ((1, 1.0), (3, 3.0), (5, 5.0)): + bpy.context.scene.frame_set(frame) + obj["delete_target"] = value + obj.keyframe_insert(data_path=DATA_PATH, frame=frame) + obj.animation_data.action.name = ACTION_NAME + + keying_set = bpy.context.scene.keying_sets.new(idname=KEYING_SET_NAME, name=KEYING_SET_NAME) + keying_set.paths.add(obj, DATA_PATH, index=0) + bpy.context.scene.keying_sets.active_index = 0 + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + bpy.context.scene.frame_set(3) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00184.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00184.py new file mode 100644 index 00000000..ef2de62a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00184.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +OBJECT_NAME = "WebGapAnimKeyframeDeleteV3DObject" +ACTION_NAME = "WebGapAnimKeyframeDeleteV3DAction" +DATA_PATH = '["delete_target"]' + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00184.py -- OUTPUT") + + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimKeyframeDeleteV3DMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new(OBJECT_NAME, mesh) + bpy.context.scene.collection.objects.link(obj) + obj["delete_target"] = 3.0 + for frame, value in ((1, 1.0), (3, 3.0), (5, 5.0)): + bpy.context.scene.frame_set(frame) + obj["delete_target"] = value + obj.keyframe_insert(data_path=DATA_PATH, frame=frame) + obj.animation_data.action.name = ACTION_NAME + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + bpy.context.scene.frame_set(3) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00185.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00185.py new file mode 100644 index 00000000..1702cd3e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00185.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +STRIP_NAME = "WebGapAnimKeyframeDeleteVSEStrip" +ACTION_NAME = "WebGapAnimKeyframeDeleteVSEAction" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00185.py -- OUTPUT") + + bpy.ops.wm.read_factory_settings(use_empty=True) + scene = bpy.context.scene + sequence_editor = scene.sequence_editor_create() + source = pathlib.Path(__file__).resolve().parents[3] / "tests/files/web/media/sequencer-frame.png" + strip = sequence_editor.strips.new_image( + name=STRIP_NAME, + filepath=str(source), + channel=1, + frame_start=1, + ) + strip.directory = "//../media/" + strip.frame_final_duration = 6 + strip.select = True + sequence_editor.active_strip = strip + for frame, value in ((1, 0.25), (3, 0.5), (5, 0.75)): + scene.frame_set(frame) + strip.blend_alpha = value + strip.keyframe_insert(data_path="blend_alpha", frame=frame) + scene.animation_data.action.name = ACTION_NAME + scene.frame_start = 1 + scene.frame_end = 6 + scene.frame_set(3) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00186.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00186.py new file mode 100644 index 00000000..8cea55ac --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00186.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +OBJECT_NAME = "WebGapAnimKeyframeInsertObject" +ACTION_NAME = "WebGapAnimKeyframeInsertAction" +KEYING_SET_NAME = "WebGapAnimKeyframeInsertSet" +DATA_PATH = '["insert_target"]' + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00186.py -- OUTPUT") + + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimKeyframeInsertMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new(OBJECT_NAME, mesh) + bpy.context.scene.collection.objects.link(obj) + obj["insert_target"] = 3.0 + for frame, value in ((1, 1.0), (5, 5.0)): + bpy.context.scene.frame_set(frame) + obj["insert_target"] = value + obj.keyframe_insert(data_path=DATA_PATH, frame=frame) + obj.animation_data.action.name = ACTION_NAME + + keying_set = bpy.context.scene.keying_sets.new(idname=KEYING_SET_NAME, name=KEYING_SET_NAME) + keying_set.paths.add(obj, DATA_PATH, index=0) + bpy.context.scene.keying_sets.active_index = 0 + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + bpy.context.scene.frame_set(3) + obj["insert_target"] = 3.0 + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00187.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00187.py new file mode 100644 index 00000000..10546b22 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00187.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00187.py -- OUTPUT") + + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimKeyframeInsertButtonMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapAnimKeyframeInsertButtonObject", mesh) + bpy.context.scene.collection.objects.link(obj) + obj["insert_target"] = 3.0 + for frame, value in ((1, 1.0), (5, 5.0)): + bpy.context.scene.frame_set(frame) + obj["insert_target"] = value + obj.keyframe_insert(data_path='["insert_target"]', frame=frame) + obj.animation_data.action.name = "WebGapAnimKeyframeInsertButtonAction" + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + bpy.context.scene.frame_set(3) + obj["insert_target"] = 3.0 + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00188.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00188.py new file mode 100644 index 00000000..7f97e7d8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00188.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +OBJECT_NAME = "WebGapAnimKeyframeInsertByNameObject" +ACTION_NAME = "WebGapAnimKeyframeInsertByNameAction" +KEYING_SET_NAME = "WebGapAnimKeyframeInsertByNameSet" +DATA_PATH = '["insert_target"]' + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00188.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimKeyframeInsertByNameMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new(OBJECT_NAME, mesh) + bpy.context.scene.collection.objects.link(obj) + obj["insert_target"] = 3.0 + for frame, value in ((1, 1.0), (5, 5.0)): + bpy.context.scene.frame_set(frame) + obj["insert_target"] = value + obj.keyframe_insert(data_path=DATA_PATH, frame=frame) + obj.animation_data.action.name = ACTION_NAME + keying_set = bpy.context.scene.keying_sets.new(idname=KEYING_SET_NAME, name=KEYING_SET_NAME) + keying_set.paths.add(obj, DATA_PATH, index=0) + bpy.context.scene.keying_sets.active_index = 0 + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + bpy.context.scene.frame_set(3) + obj["insert_target"] = 3.0 + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00189.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00189.py new file mode 100644 index 00000000..792d475c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00189.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +OBJECT_NAME = "WebGapAnimKeyframeInsertMenuObject" +ACTION_NAME = "WebGapAnimKeyframeInsertMenuAction" +KEYING_SET_NAME = "WebGapAnimKeyframeInsertMenuSet" +DATA_PATH = '["insert_target"]' + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00189.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimKeyframeInsertMenuMesh") + mesh.from_pydata([(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], [], [(0, 1, 2, 3)]) + obj = bpy.data.objects.new(OBJECT_NAME, mesh) + bpy.context.scene.collection.objects.link(obj) + obj["insert_target"] = 3.0 + for frame, value in ((1, 1.0), (5, 5.0)): + bpy.context.scene.frame_set(frame) + obj["insert_target"] = value + obj.keyframe_insert(data_path=DATA_PATH, frame=frame) + obj.animation_data.action.name = ACTION_NAME + keying_set = bpy.context.scene.keying_sets.new(idname=KEYING_SET_NAME, name=KEYING_SET_NAME) + keying_set.paths.add(obj, DATA_PATH, index=0) + bpy.context.scene.keying_sets.active_index = 0 + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + bpy.context.scene.frame_set(3) + obj["insert_target"] = 3.0 + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00190.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00190.py new file mode 100644 index 00000000..f212e175 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00190.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +OBJECT_NAME = "WebGapAnimKeyingSetActiveObject" +ACTION_NAME = "WebGapAnimKeyingSetActiveAction" +KEYING_SET_A = "WebGapAnimKeyingSetActiveA" +KEYING_SET_B = "WebGapAnimKeyingSetActiveB" +DATA_PATH = '["active_target"]' + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00190.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimKeyingSetActiveMesh") + mesh.from_pydata([(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], [], [(0, 1, 2, 3)]) + obj = bpy.data.objects.new(OBJECT_NAME, mesh) + bpy.context.scene.collection.objects.link(obj) + obj["active_target"] = 3.0 + for frame, value in ((1, 1.0), (3, 3.0), (5, 5.0)): + bpy.context.scene.frame_set(frame) + obj["active_target"] = value + obj.keyframe_insert(data_path=DATA_PATH, frame=frame) + obj.animation_data.action.name = ACTION_NAME + first = bpy.context.scene.keying_sets.new(idname=KEYING_SET_A, name=KEYING_SET_A) + first.paths.add(obj, DATA_PATH, index=0) + second = bpy.context.scene.keying_sets.new(idname=KEYING_SET_B, name=KEYING_SET_B) + second.paths.add(obj, DATA_PATH, index=0) + bpy.context.scene.keying_sets.active_index = 0 + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + bpy.context.scene.frame_set(3) + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00191.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00191.py new file mode 100644 index 00000000..fd841321 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00191.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +OBJECT_NAME = "WebGapAnimKeyingSetAddObject" +ACTION_NAME = "WebGapAnimKeyingSetAddAction" +DATA_PATH = '["add_target"]' + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00191.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimKeyingSetAddMesh") + mesh.from_pydata([(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], [], [(0, 1, 2, 3)]) + obj = bpy.data.objects.new(OBJECT_NAME, mesh) + bpy.context.scene.collection.objects.link(obj) + obj["add_target"] = 3.0 + for frame, value in ((1, 1.0), (3, 3.0), (5, 5.0)): + bpy.context.scene.frame_set(frame); obj["add_target"] = value; obj.keyframe_insert(data_path=DATA_PATH, frame=frame) + obj.animation_data.action.name = ACTION_NAME + bpy.context.view_layer.objects.active = obj; obj.select_set(True); bpy.context.scene.frame_start = 1; bpy.context.scene.frame_end = 5; bpy.context.scene.frame_set(3) + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00192.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00192.py new file mode 100644 index 00000000..75e3d1cb --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00192.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00192.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimKeyingSetExportMesh") + mesh.from_pydata([(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], [], [(0, 1, 2, 3)]) + obj = bpy.data.objects.new("WebGapAnimKeyingSetExportObject", mesh) + bpy.context.scene.collection.objects.link(obj) + obj["export_target"] = 3.0 + for frame, value in ((1, 1.0), (3, 3.0), (5, 5.0)): + bpy.context.scene.frame_set(frame); obj["export_target"] = value; obj.keyframe_insert(data_path='["export_target"]', frame=frame) + obj.animation_data.action.name = "WebGapAnimKeyingSetExportAction" + keying_set = bpy.context.scene.keying_sets.new(idname="WebGapAnimKeyingSetExportSet", name="WebGapAnimKeyingSetExportSet") + keying_set.paths.add(obj, '["export_target"]', index=0) + bpy.context.scene.keying_sets.active_index = 0 + bpy.context.view_layer.objects.active = obj; obj.select_set(True); bpy.context.scene.frame_start = 1; bpy.context.scene.frame_end = 5; bpy.context.scene.frame_set(3) + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00193.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00193.py new file mode 100644 index 00000000..9a3a0873 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00193.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +OBJECT_NAME = "WebGapAnimKeyingSetPathAddObject" +ACTION_NAME = "WebGapAnimKeyingSetPathAddAction" +KEYING_SET_NAME = "WebGapAnimKeyingSetPathAddSet" +DATA_PATH = '["path_add_target"]' + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00193.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimKeyingSetPathAddMesh") + mesh.from_pydata([(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], [], [(0, 1, 2, 3)]) + obj = bpy.data.objects.new(OBJECT_NAME, mesh) + bpy.context.scene.collection.objects.link(obj) + obj["path_add_target"] = 3.0 + for frame, value in ((1, 1.0), (3, 3.0), (5, 5.0)): + bpy.context.scene.frame_set(frame) + obj["path_add_target"] = value + obj.keyframe_insert(data_path=DATA_PATH, frame=frame) + obj.animation_data.action.name = ACTION_NAME + bpy.context.scene.keying_sets.new(idname=KEYING_SET_NAME, name=KEYING_SET_NAME) + bpy.context.scene.keying_sets.active_index = 0 + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + bpy.context.scene.frame_set(3) + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00194.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00194.py new file mode 100644 index 00000000..865d45da --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00194.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +OBJECT_NAME = "WebGapAnimKeyingSetPathRemoveObject" +ACTION_NAME = "WebGapAnimKeyingSetPathRemoveAction" +KEYING_SET_NAME = "WebGapAnimKeyingSetPathRemoveSet" +DATA_PATH = '["path_remove_target"]' + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00194.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimKeyingSetPathRemoveMesh") + mesh.from_pydata([(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], [], [(0, 1, 2, 3)]) + obj = bpy.data.objects.new(OBJECT_NAME, mesh) + bpy.context.scene.collection.objects.link(obj) + obj["path_remove_target"] = 3.0 + for frame, value in ((1, 1.0), (3, 3.0), (5, 5.0)): + bpy.context.scene.frame_set(frame) + obj["path_remove_target"] = value + obj.keyframe_insert(data_path=DATA_PATH, frame=frame) + obj.animation_data.action.name = ACTION_NAME + keying_set = bpy.context.scene.keying_sets.new(idname=KEYING_SET_NAME, name=KEYING_SET_NAME) + keying_set.paths.add(obj, DATA_PATH, index=0) + bpy.context.scene.keying_sets.active_index = 0 + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + bpy.context.scene.frame_set(3) + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00195.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00195.py new file mode 100644 index 00000000..a65440bf --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00195.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +OBJECT_NAME = "WebGapAnimKeyingSetRemoveObject" +ACTION_NAME = "WebGapAnimKeyingSetRemoveAction" +KEYING_SET_NAME = "WebGapAnimKeyingSetRemoveSet" +DATA_PATH = '["remove_target"]' + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00195.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimKeyingSetRemoveMesh") + mesh.from_pydata([(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], [], [(0, 1, 2, 3)]) + obj = bpy.data.objects.new(OBJECT_NAME, mesh) + bpy.context.scene.collection.objects.link(obj) + obj["remove_target"] = 3.0 + for frame, value in ((1, 1.0), (3, 3.0), (5, 5.0)): + bpy.context.scene.frame_set(frame) + obj["remove_target"] = value + obj.keyframe_insert(data_path=DATA_PATH, frame=frame) + obj.animation_data.action.name = ACTION_NAME + bpy.context.scene.keying_sets.new(idname=KEYING_SET_NAME, name=KEYING_SET_NAME) + bpy.context.scene.keying_sets.active_index = 0 + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + bpy.context.scene.frame_set(3) + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00196.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00196.py new file mode 100644 index 00000000..e79f7cab --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00196.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +OBJECT_NAME = "WebGapAnimKeyingSetButtonAddObject" +ACTION_NAME = "WebGapAnimKeyingSetButtonAddAction" +DATA_PATH = '["button_target"]' + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00196.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimKeyingSetButtonAddMesh") + mesh.from_pydata([(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], [], [(0, 1, 2, 3)]) + obj = bpy.data.objects.new(OBJECT_NAME, mesh) + bpy.context.scene.collection.objects.link(obj) + obj["button_target"] = 3.0 + for frame, value in ((1, 1.0), (3, 3.0), (5, 5.0)): + bpy.context.scene.frame_set(frame) + obj["button_target"] = value + obj.keyframe_insert(data_path=DATA_PATH, frame=frame) + obj.animation_data.action.name = ACTION_NAME + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + bpy.context.scene.frame_set(3) + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00197.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00197.py new file mode 100644 index 00000000..fa74b4dc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00197.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +OBJECT_NAME = "WebGapAnimKeyingSetButtonRemoveObject" +ACTION_NAME = "WebGapAnimKeyingSetButtonRemoveAction" +KEYING_SET_NAME = "ButtonKeyingSet" +DATA_PATH = '["button_remove_target"]' + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00197.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimKeyingSetButtonRemoveMesh") + mesh.from_pydata([(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], [], [(0, 1, 2, 3)]) + obj = bpy.data.objects.new(OBJECT_NAME, mesh) + bpy.context.scene.collection.objects.link(obj) + obj["button_remove_target"] = 3.0 + for frame, value in ((1, 1.0), (3, 3.0), (5, 5.0)): + bpy.context.scene.frame_set(frame) + obj["button_remove_target"] = value + obj.keyframe_insert(data_path=DATA_PATH, frame=frame) + obj.animation_data.action.name = ACTION_NAME + keying_set = bpy.context.scene.keying_sets.new(idname=KEYING_SET_NAME, name=KEYING_SET_NAME) + keying_set.paths.add(obj, DATA_PATH, index=0) + bpy.context.scene.keying_sets.active_index = 0 + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + bpy.context.scene.frame_set(3) + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00198.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00198.py new file mode 100644 index 00000000..495ee6a4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00198.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ACTIVE_OBJECT = "WebGapAnimMergeActiveObject" +SOURCE_OBJECT = "WebGapAnimMergeSourceObject" +ACTIVE_ACTION = "WebGapAnimMergeActiveAction" +SOURCE_ACTION = "WebGapAnimMergeSourceAction" + + +def make_object(name, prop_name, action_name, values): + mesh = bpy.data.meshes.new(f"{name}Mesh") + mesh.from_pydata([(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], [], [(0, 1, 2, 3)]) + obj = bpy.data.objects.new(name, mesh) + bpy.context.scene.collection.objects.link(obj) + obj[prop_name] = values[1] + for frame, value in zip((1, 3, 5), values): + bpy.context.scene.frame_set(frame) + obj[prop_name] = value + obj.keyframe_insert(data_path=f'["{prop_name}"]', frame=frame) + obj.animation_data.action.name = action_name + return obj + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00198.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + active = make_object(ACTIVE_OBJECT, "active_merge_target", ACTIVE_ACTION, (1.0, 3.0, 5.0)) + source = make_object(SOURCE_OBJECT, "source_merge_target", SOURCE_ACTION, (10.0, 30.0, 50.0)) + bpy.context.view_layer.objects.active = active + active.select_set(True) + source.select_set(True) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + bpy.context.scene.frame_set(3) + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00199.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00199.py new file mode 100644 index 00000000..8a06822f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00199.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00199.py -- OUTPUT") + + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimPasteDriverButtonMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapAnimPasteDriverButtonObject", mesh) + bpy.context.scene.collection.objects.link(obj) + obj["source_target"] = 2.5 + obj["paste_target"] = 7.5 + source_driver = obj.driver_add('["source_target"]') + source_driver.driver.type = "SCRIPTED" + source_driver.driver.expression = "frame * 3.0 + 2.0" + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00200.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00200.py new file mode 100644 index 00000000..8e13606a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00200.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def clear_preview_range(): + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR") + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.anim.previewrange_clear.poll(): + raise RuntimeError("ANIM_OT_previewrange_clear poll failed in animation editor context") + result = bpy.ops.anim.previewrange_clear() + if "FINISHED" not in result: + raise RuntimeError(f"ANIM_OT_previewrange_clear returned {result}") + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00200.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimPreviewRangeClearMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapAnimPreviewRangeClearObject", mesh) + bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + scene = bpy.context.scene + scene.frame_start = 1 + scene.frame_end = 8 + scene.use_preview_range = True + scene.frame_preview_start = 2 + scene.frame_preview_end = 6 + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00201.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00201.py new file mode 100644 index 00000000..386c0752 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00201.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def set_preview_range(): + window = bpy.context.window + screen = window.screen + area = next(candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR") + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.anim.previewrange_set.poll(): + raise RuntimeError("ANIM_OT_previewrange_set poll failed in animation editor context") + result = bpy.ops.anim.previewrange_set(xmin=62, xmax=88, ymin=0, ymax=47) + if "FINISHED" not in result: + raise RuntimeError(f"ANIM_OT_previewrange_set returned {result}") + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00201.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAnimPreviewRangeSetMesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new("WebGapAnimPreviewRangeSetObject", mesh) + bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + scene = bpy.context.scene + scene.frame_start = 1 + scene.frame_end = 8 + set_preview_range() + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00202.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00202.py new file mode 100644 index 00000000..a3cfc2d0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00202.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +OLD_ACTION = "WebGapAnimReplaceOldAction" +NEW_ACTION = "WebGapAnimReplaceNewAction" + + +def make_object(name, action, property_name, values): + mesh = bpy.data.meshes.new(f"{name}Mesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new(name, mesh) + bpy.context.scene.collection.objects.link(obj) + obj.animation_data_create() + obj.animation_data.action = action + for frame, value in zip((1, 3, 5), values): + obj[property_name] = value + obj.keyframe_insert(data_path=f'["{property_name}"]', frame=frame) + return obj + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00202.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + old_action = bpy.data.actions.new(OLD_ACTION) + new_action = bpy.data.actions.new(NEW_ACTION) + old_a = make_object("WebGapAnimReplaceOldA", old_action, "replace_target", (1.0, 3.0, 5.0)) + old_b = make_object("WebGapAnimReplaceOldB", old_action, "replace_target", (2.0, 4.0, 6.0)) + new_user = make_object("WebGapAnimReplaceNewUser", new_action, "replace_target", (10.0, 30.0, 50.0)) + old_action.use_fake_user = True + new_action.use_fake_user = True + bpy.context.view_layer.objects.active = old_a + old_a.select_set(True) + old_b.select_set(False) + new_user.select_set(False) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + bpy.context.scene.frame_set(3) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00203.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00203.py new file mode 100644 index 00000000..4020acde --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00203.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +OLD_ACTION = "WebGapAnimReplaceNewOldAction" + + +def make_object(name, action, values): + mesh = bpy.data.meshes.new(f"{name}Mesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new(name, mesh) + bpy.context.scene.collection.objects.link(obj) + obj.animation_data_create() + obj.animation_data.action = action + for frame, value in zip((1, 3, 5), values): + obj["replace_target"] = value + obj.keyframe_insert(data_path='["replace_target"]', frame=frame) + return obj + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00203.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + old_action = bpy.data.actions.new(OLD_ACTION) + old_a = make_object("WebGapAnimReplaceNewOldA", old_action, (1.0, 3.0, 5.0)) + old_b = make_object("WebGapAnimReplaceNewOldB", old_action, (2.0, 4.0, 6.0)) + old_action.use_fake_user = True + bpy.context.view_layer.objects.active = old_a + old_a.select_set(True) + old_b.select_set(False) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + bpy.context.scene.frame_set(3) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00204.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00204.py new file mode 100644 index 00000000..118d47e7 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00204.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def frame_scene_range(): + window = bpy.context.window + screen = window.screen + area = next((candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR" and candidate.height >= 200), None) + if area is None: + area = next(candidate for candidate in screen.areas if candidate.type == "VIEW_3D" and candidate.height >= 200) + area.type = "DOPESHEET_EDITOR" + region = next(candidate for candidate in area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=window, screen=screen, area=area, region=region): + if not bpy.ops.anim.scene_range_frame.poll(): + raise RuntimeError("ANIM_OT_scene_range_frame poll failed in animation editor context") + result = bpy.ops.anim.scene_range_frame() + if "FINISHED" not in result: + raise RuntimeError(f"ANIM_OT_scene_range_frame returned {result}") + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00204.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + scene = bpy.context.scene + scene.frame_start = 1 + scene.frame_end = 48 + scene.use_preview_range = True + scene.frame_preview_start = 12 + scene.frame_preview_end = 24 + bpy.context.preferences.view.smooth_view = 0 + frame_scene_range() + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00205.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00205.py new file mode 100644 index 00000000..2ec6c8db --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00205.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +OLD_ACTION = "WebGapAnimSeparateSlotsAction" + + +def make_object(name, action, slot, values): + mesh = bpy.data.meshes.new(f"{name}Mesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new(name, mesh) + bpy.context.scene.collection.objects.link(obj) + obj.animation_data_create() + obj.animation_data.action = action + obj.animation_data.action_slot = slot + for frame, value in zip((1, 3, 5), values): + obj["separate_target"] = value + obj.keyframe_insert(data_path='["separate_target"]', frame=frame) + return obj + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00205.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + action = bpy.data.actions.new(OLD_ACTION) + slot_a = action.slots.new("OBJECT", "WebGapSeparateSlotA") + slot_b = action.slots.new("OBJECT", "WebGapSeparateSlotB") + object_a = make_object("WebGapAnimSeparateSlotA", action, slot_a, (1.0, 3.0, 5.0)) + object_b = make_object("WebGapAnimSeparateSlotB", action, slot_b, (2.0, 4.0, 6.0)) + action.use_fake_user = True + bpy.context.view_layer.objects.active = object_a + object_a.select_set(True) + object_b.select_set(False) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + bpy.context.scene.frame_set(3) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00206.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00206.py new file mode 100644 index 00000000..73638af6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00206.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +OLD_ACTION = "WebGapAnimMoveSlotAction" + + +def make_object(name, action, slot, values): + mesh = bpy.data.meshes.new(f"{name}Mesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new(name, mesh) + bpy.context.scene.collection.objects.link(obj) + obj.animation_data_create() + obj.animation_data.action = action + obj.animation_data.action_slot = slot + for frame, value in zip((1, 3, 5), values): + obj["move_target"] = value + obj.keyframe_insert(data_path='["move_target"]', frame=frame) + return obj + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00206.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + action = bpy.data.actions.new(OLD_ACTION) + slot_a = action.slots.new("OBJECT", "WebGapMoveSlotA") + slot_b = action.slots.new("OBJECT", "WebGapMoveSlotB") + object_a = make_object("WebGapAnimMoveSlotA", action, slot_a, (1.0, 3.0, 5.0)) + object_b = make_object("WebGapAnimMoveSlotB", action, slot_b, (2.0, 4.0, 6.0)) + slot_a.select = True + slot_b.select = False + action.use_fake_user = True + bpy.context.view_layer.objects.active = object_a + object_a.select_set(True) + object_b.select_set(False) + window = bpy.context.window + screen = window.screen + area = next((candidate for candidate in screen.areas if candidate.type == "DOPESHEET_EDITOR" and candidate.height >= 200), None) + if area is None: + area = next(candidate for candidate in screen.areas if candidate.type == "VIEW_3D" and candidate.height >= 200) + area.type = "DOPESHEET_EDITOR" + area.spaces.active.ui_mode = "ACTION" + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + bpy.context.scene.frame_set(3) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00207.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00207.py new file mode 100644 index 00000000..bd5067e3 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00207.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ACTION_NAME = "WebGapAnimNewSlotAction" +OBJECT_NAME = "WebGapAnimNewSlotObject" +SLOT_NAME = "WebGapAnimNewSlot" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00207.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new(f"{OBJECT_NAME}Mesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new(OBJECT_NAME, mesh) + bpy.context.scene.collection.objects.link(obj) + action = bpy.data.actions.new(ACTION_NAME) + slot = action.slots.new("OBJECT", SLOT_NAME) + obj.animation_data_create() + obj.animation_data.action = action + obj.animation_data.action_slot = slot + for frame, value in zip((1, 3, 5), (1.0, 3.0, 5.0)): + obj["new_slot_target"] = value + obj.keyframe_insert(data_path='["new_slot_target"]', frame=frame) + action.use_fake_user = True + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + bpy.context.scene.frame_set(3) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00208.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00208.py new file mode 100644 index 00000000..e390857f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00208.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ACTION_NAME = "WebGapAnimConstraintSlotAction" +OBJECT_NAME = "WebGapAnimConstraintSlotObject" +CONSTRAINT_NAME = "WebGapActionSlotConstraint" +SLOT_NAME = "WebGapConstraintSlot" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00208.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new(f"{OBJECT_NAME}Mesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new(OBJECT_NAME, mesh) + bpy.context.scene.collection.objects.link(obj) + action = bpy.data.actions.new(ACTION_NAME) + slot = action.slots.new("OBJECT", SLOT_NAME) + action.use_fake_user = True + constraint = obj.constraints.new(type="ACTION") + constraint.name = CONSTRAINT_NAME + constraint.target = obj + constraint.action = action + constraint.action_slot = slot + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + bpy.context.scene.frame_set(3) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00209.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00209.py new file mode 100644 index 00000000..25f8dff6 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00209.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ACTION_NAME = "WebGapAnimUnassignIdAction" +OBJECT_NAME = "WebGapAnimUnassignIdObject" +SLOT_NAME = "WebGapUnassignIdSlot" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00209.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new(f"{OBJECT_NAME}Mesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new(OBJECT_NAME, mesh) + bpy.context.scene.collection.objects.link(obj) + action = bpy.data.actions.new(ACTION_NAME) + slot = action.slots.new("OBJECT", SLOT_NAME) + obj.animation_data_create() + obj.animation_data.action = action + obj.animation_data.action_slot = slot + for frame, value in zip((1, 3, 5), (1.0, 3.0, 5.0)): + obj["unassign_id_target"] = value + obj.keyframe_insert(data_path='["unassign_id_target"]', frame=frame) + action.use_fake_user = True + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + bpy.context.scene.frame_set(3) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00210.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00210.py new file mode 100644 index 00000000..cadb3f27 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00210.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ACTION_NAME = "WebGapAnimNlaSlotAction" +OBJECT_NAME = "WebGapAnimNlaSlotObject" +STRIP_NAME = "WebGapNlaSlotStrip" +SLOT_NAME = "WebGapNlaSlot" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00210.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new(f"{OBJECT_NAME}Mesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new(OBJECT_NAME, mesh) + bpy.context.scene.collection.objects.link(obj) + action = bpy.data.actions.new(ACTION_NAME) + slot = action.slots.new("OBJECT", SLOT_NAME) + obj.animation_data_create() + obj.animation_data.action = action + obj.animation_data.action_slot = slot + for frame, value in zip((1, 3, 5), (1.0, 3.0, 5.0)): + obj["nla_slot_target"] = value + obj.keyframe_insert(data_path='["nla_slot_target"]', frame=frame) + track = obj.animation_data.nla_tracks.new() + track.name = "WebGapNlaSlotTrack" + strip = track.strips.new(STRIP_NAME, 1, action) + strip.action_slot = slot + strip.frame_end = 5 + action.use_fake_user = True + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + bpy.context.scene.frame_set(3) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00211.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00211.py new file mode 100644 index 00000000..5ebca06b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00211.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00211.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + scene = bpy.context.scene + scene.frame_start = 1 + scene.frame_end = 120 + scene.frame_set(42) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00212.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00212.py new file mode 100644 index 00000000..db051888 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00212.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +OBJECT_NAME = "WebGapAnimatedTransformConstraintObject" +ACTION_NAME = "WebGapAnimatedTransformConstraintAction" +CONSTRAINT_NAME = "WebGapAnimatedTransformConstraint" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00212.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new(f"{OBJECT_NAME}Mesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new(OBJECT_NAME, mesh) + bpy.context.scene.collection.objects.link(obj) + constraint = obj.constraints.new("TRANSFORM") + constraint.name = CONSTRAINT_NAME + constraint.map_from = "ROTATION" + constraint.from_min_x = -30.0 + obj.animation_data_create() + action = bpy.data.actions.new(ACTION_NAME) + obj.animation_data.action = action + constraint.keyframe_insert(data_path="from_min_x", frame=1) + constraint.from_min_x = 60.0 + constraint.keyframe_insert(data_path="from_min_x", frame=10) + action.use_fake_user = True + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + scene = bpy.context.scene + scene.frame_start = 1 + scene.frame_end = 10 + scene.frame_set(5) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00213.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00213.py new file mode 100644 index 00000000..f2bc87a3 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00213.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapVersionBoneHideArmature" +OBJECT_NAME = "WebGapVersionBoneHideObject" +BONE_NAME = "WebGapVersionBoneHideBone" +ARMATURE_ACTION_NAME = "WebGapVersionBoneHideArmatureAction" +OBJECT_ACTION_NAME = "WebGapVersionBoneHideObjectAction" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00213.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + bone = armature.edit_bones.new(BONE_NAME) + bone.head = (0.0, 0.0, 0.0) + bone.tail = (0.0, 1.0, 0.0) + bpy.ops.object.mode_set(mode="OBJECT") + + armature.animation_data_create() + armature_action = bpy.data.actions.new(ARMATURE_ACTION_NAME) + armature_slot = armature_action.slots.new("ARMATURE", ARMATURE_NAME) + armature.animation_data.action = armature_action + armature.animation_data.action_slot = armature_slot + armature.bones[BONE_NAME].hide = False + armature.bones[BONE_NAME].keyframe_insert(data_path="hide", frame=1) + armature.bones[BONE_NAME].hide = True + armature.bones[BONE_NAME].keyframe_insert(data_path="hide", frame=10) + armature_action.use_fake_user = True + + obj.animation_data_create() + object_action = bpy.data.actions.new(OBJECT_ACTION_NAME) + object_slot = object_action.slots.new("OBJECT", OBJECT_NAME) + obj.animation_data.action = object_action + obj.animation_data.action_slot = object_slot + obj["version_anchor"] = 0.0 + obj.keyframe_insert(data_path='["version_anchor"]', frame=1) + obj["version_anchor"] = 1.0 + obj.keyframe_insert(data_path='["version_anchor"]', frame=10) + object_action.use_fake_user = True + + scene = bpy.context.scene + scene.frame_start = 1 + scene.frame_end = 10 + scene.frame_set(5) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00214.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00214.py new file mode 100644 index 00000000..1938cb52 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00214.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +OBJECT_NAME = "WebGapAnimViewCurveGraphEditorObject" +ACTION_NAME = "WebGapAnimViewCurveGraphEditorAction" +PROPERTY_NAME = "curve_target" + + +def configure_graph_editor(): + window = bpy.context.window + if window is None or window.screen is None: + raise RuntimeError("fixture requires a Blender window") + screen = window.screen + area = next((candidate for candidate in screen.areas if candidate.type in {"DOPESHEET_EDITOR", "VIEW_3D"}), None) + if area is None: + raise RuntimeError("default Layout VIEW_3D area is missing") + area.type = "GRAPH_EDITOR" + return area + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00214.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new(f"{OBJECT_NAME}Mesh") + mesh.from_pydata( + [(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)], + [], + [(0, 1, 2, 3)], + ) + obj = bpy.data.objects.new(OBJECT_NAME, mesh) + bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + obj[PROPERTY_NAME] = -3.0 + obj.keyframe_insert(data_path=f'["{PROPERTY_NAME}"]', frame=1) + obj[PROPERTY_NAME] = 7.0 + obj.keyframe_insert(data_path=f'["{PROPERTY_NAME}"]', frame=10) + obj.animation_data.action.name = ACTION_NAME + obj.animation_data.action.use_fake_user = True + curve = next(curve for curve in obj.animation_data.action.layers[0].strips[0].channelbags[0].fcurves) + for keyframe in curve.keyframe_points: + keyframe.select_control_point = False + curve.keyframe_points[0].select_control_point = True + curve.keyframe_points[1].select_control_point = False + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 10 + bpy.context.scene.frame_set(5) + bpy.context.preferences.view.smooth_view = 0 + graph_area = configure_graph_editor() + graph_region = next(candidate for candidate in graph_area.regions if candidate.type == "WINDOW") + with bpy.context.temp_override(window=bpy.context.window, screen=bpy.context.screen, area=graph_area, region=graph_region): + if "FINISHED" not in bpy.ops.graph.view_selected(): + raise RuntimeError("Graph Editor view_selected failed while preparing fixture") + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00215.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00215.py new file mode 100644 index 00000000..80ef2bda --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00215.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureAlignArmature" +OBJECT_NAME = "WebGapArmatureAlignObject" +PARENT_NAME = "WebGapArmatureAlignParent" +CHILD_NAME = "WebGapArmatureAlignChild" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00215.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + parent = armature.edit_bones.new(PARENT_NAME) + parent.head = (0.0, 0.0, 0.0) + parent.tail = (0.0, 0.0, 3.0) + child = armature.edit_bones.new(CHILD_NAME) + child.head = (0.0, 0.0, 3.0) + child.tail = (2.0, 1.0, 4.0) + parent.select = True + child.select = True + bpy.ops.object.mode_set(mode="OBJECT") + armature.bones.active = armature.bones[PARENT_NAME] + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00216.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00216.py new file mode 100644 index 00000000..f122cb5c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00216.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureAssignArmature" +OBJECT_NAME = "WebGapArmatureAssignObject" +SOURCE_COLLECTION = "WebGapArmatureAssignSource" +TARGET_COLLECTION = "WebGapArmatureAssignTarget" +PARENT_NAME = "WebGapArmatureAssignParent" +CHILD_NAME = "WebGapArmatureAssignChild" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00216.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + source = armature.collections.new(SOURCE_COLLECTION) + armature.collections.new(TARGET_COLLECTION) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + parent = armature.edit_bones.new(PARENT_NAME) + parent.head = (0.0, 0.0, 0.0) + parent.tail = (0.0, 0.0, 2.0) + child = armature.edit_bones.new(CHILD_NAME) + child.head = (0.0, 0.0, 2.0) + child.tail = (0.0, 1.0, 3.0) + child.parent = parent + child.use_connect = False + bpy.ops.object.mode_set(mode="OBJECT") + source.assign(armature.bones[CHILD_NAME]) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00217.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00217.py new file mode 100644 index 00000000..92abf104 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00217.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureAutosideArmature" +OBJECT_NAME = "WebGapArmatureAutosideObject" +LEFT_NAME = "WebGapArmatureAutosideLeft" +RIGHT_NAME = "WebGapArmatureAutosideRight" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00217.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + left = armature.edit_bones.new(LEFT_NAME) + left.head = (1.0, 0.0, 0.0) + left.tail = (1.0, 0.0, 2.0) + right = armature.edit_bones.new(RIGHT_NAME) + right.head = (-1.0, 0.0, 0.0) + right.tail = (-1.0, 0.0, 2.0) + left.select = True + right.select = True + bpy.ops.object.mode_set(mode="OBJECT") + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00218.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00218.py new file mode 100644 index 00000000..3862eeb7 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00218.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmaturePrimitiveArmature" +OBJECT_NAME = "WebGapArmaturePrimitiveObject" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00218.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.context.scene.cursor.location = (1.5, -2.0, 0.75) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00219.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00219.py new file mode 100644 index 00000000..647803d8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00219.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureCalculateRollArmature" +OBJECT_NAME = "WebGapArmatureCalculateRollObject" +BONE_NAME = "WebGapArmatureCalculateRollBone" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00219.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + bone = armature.edit_bones.new(BONE_NAME) + bone.head = (0.0, 0.0, 0.0) + bone.tail = (0.0, 2.0, 0.0) + bone.roll = 0.0 + bone.select = True + bpy.ops.object.mode_set(mode="OBJECT") + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00220.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00220.py new file mode 100644 index 00000000..8cd3e9e5 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00220.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureClickExtrudeArmature" +OBJECT_NAME = "WebGapArmatureClickExtrudeObject" +BONE_NAME = "WebGapArmatureClickExtrudeBone" +CURSOR = (1.5, 2.0, 1.0) + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00220.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + bone = armature.edit_bones.new(BONE_NAME) + bone.head = (0.0, 0.0, 0.0) + bone.tail = (0.0, 2.0, 0.0) + bone.roll = 0.0 + bone.select = True + bone.select_tail = True + armature.edit_bones.active = bone + bpy.ops.object.mode_set(mode="OBJECT") + bpy.context.scene.cursor.location = CURSOR + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00221.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00221.py new file mode 100644 index 00000000..29b29bd2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00221.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureCollectionAddArmature" +OBJECT_NAME = "WebGapArmatureCollectionAddObject" +SOURCE_COLLECTION = "WebGapArmatureCollectionAddExisting" +BONE_NAME = "WebGapArmatureCollectionAddBone" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00221.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + existing = armature.collections.new(SOURCE_COLLECTION) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + bone = armature.edit_bones.new(BONE_NAME) + bone.head = (0.0, 0.0, 0.0) + bone.tail = (0.0, 1.0, 0.0) + bone.select = True + bpy.ops.object.mode_set(mode="OBJECT") + existing.assign(armature.bones[BONE_NAME]) + armature.collections.active_index = 0 + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00222.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00222.py new file mode 100644 index 00000000..4113ce15 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00222.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureCollectionAssignArmature" +OBJECT_NAME = "WebGapArmatureCollectionAssignObject" +SOURCE_COLLECTION = "WebGapArmatureCollectionAssignSource" +TARGET_COLLECTION = "WebGapArmatureCollectionAssignTarget" +BONE_NAME = "WebGapArmatureCollectionAssignBone" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00222.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + source = armature.collections.new(SOURCE_COLLECTION) + armature.collections.new(TARGET_COLLECTION) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + bone = armature.edit_bones.new(BONE_NAME) + bone.head = (0.0, 0.0, 0.0) + bone.tail = (0.0, 1.0, 0.0) + bone.select = True + bpy.ops.object.mode_set(mode="OBJECT") + source.assign(armature.bones[BONE_NAME]) + armature.collections.active_index = 0 + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00223.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00223.py new file mode 100644 index 00000000..fa55e637 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00223.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureCollectionCreateAssignArmature" +OBJECT_NAME = "WebGapArmatureCollectionCreateAssignObject" +SOURCE_COLLECTION = "WebGapArmatureCollectionCreateAssignSource" +BONE_NAME = "WebGapArmatureCollectionCreateAssignBone" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00223.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + source = armature.collections.new(SOURCE_COLLECTION) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + bone = armature.edit_bones.new(BONE_NAME) + bone.head = (0.0, 0.0, 0.0) + bone.tail = (0.0, 1.0, 0.0) + bone.select = True + bpy.ops.object.mode_set(mode="OBJECT") + source.assign(armature.bones[BONE_NAME]) + armature.collections.active_index = 0 + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00224.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00224.py new file mode 100644 index 00000000..0f5cab98 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00224.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureCollectionDeselectArmature" +OBJECT_NAME = "WebGapArmatureCollectionDeselectObject" +ACTIVE_COLLECTION = "WebGapArmatureCollectionDeselectActive" +OTHER_COLLECTION = "WebGapArmatureCollectionDeselectOther" +ACTIVE_BONE = "WebGapArmatureCollectionDeselectActiveBone" +OTHER_BONE = "WebGapArmatureCollectionDeselectOtherBone" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00224.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + active = armature.collections.new(ACTIVE_COLLECTION) + armature.collections.new(OTHER_COLLECTION) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + active_bone = armature.edit_bones.new(ACTIVE_BONE) + active_bone.head = (0.0, 0.0, 0.0) + active_bone.tail = (0.0, 1.0, 0.0) + other_bone = armature.edit_bones.new(OTHER_BONE) + other_bone.head = (1.0, 0.0, 0.0) + other_bone.tail = (1.0, 1.0, 0.0) + active_bone.select = True + active_bone.select_head = True + active_bone.select_tail = True + other_bone.select = True + other_bone.select_head = True + other_bone.select_tail = True + bpy.ops.object.mode_set(mode="OBJECT") + active.assign(armature.bones[ACTIVE_BONE]) + armature.collections[OTHER_COLLECTION].assign(armature.bones[OTHER_BONE]) + armature.collections.active_index = 0 + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00225.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00225.py new file mode 100644 index 00000000..549a7b04 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00225.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureCollectionMoveArmature" +OBJECT_NAME = "WebGapArmatureCollectionMoveObject" +FIRST_COLLECTION = "WebGapArmatureCollectionMoveFirst" +ACTIVE_COLLECTION = "WebGapArmatureCollectionMoveActive" +LAST_COLLECTION = "WebGapArmatureCollectionMoveLast" +FIRST_BONE = "WebGapArmatureCollectionMoveFirstBone" +ACTIVE_BONE = "WebGapArmatureCollectionMoveActiveBone" +LAST_BONE = "WebGapArmatureCollectionMoveLastBone" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00225.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + first = armature.collections.new(FIRST_COLLECTION) + active = armature.collections.new(ACTIVE_COLLECTION) + last = armature.collections.new(LAST_COLLECTION) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + for name, x in ((FIRST_BONE, 0.0), (ACTIVE_BONE, 1.0), (LAST_BONE, 2.0)): + bone = armature.edit_bones.new(name) + bone.head = (x, 0.0, 0.0) + bone.tail = (x, 1.0, 0.0) + bpy.ops.object.mode_set(mode="OBJECT") + first.assign(armature.bones[FIRST_BONE]) + active.assign(armature.bones[ACTIVE_BONE]) + last.assign(armature.bones[LAST_BONE]) + armature.collections.active_index = 1 + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00226.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00226.py new file mode 100644 index 00000000..0fd9b0c3 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00226.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureCollectionRemoveArmature" +OBJECT_NAME = "WebGapArmatureCollectionRemoveObject" +FIRST_COLLECTION = "WebGapArmatureCollectionRemoveFirst" +REMOVED_COLLECTION = "WebGapArmatureCollectionRemoveRemoved" +LAST_COLLECTION = "WebGapArmatureCollectionRemoveLast" +FIRST_BONE = "WebGapArmatureCollectionRemoveFirstBone" +REMOVED_BONE = "WebGapArmatureCollectionRemoveRemovedBone" +LAST_BONE = "WebGapArmatureCollectionRemoveLastBone" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00226.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + first = armature.collections.new(FIRST_COLLECTION) + removed = armature.collections.new(REMOVED_COLLECTION) + last = armature.collections.new(LAST_COLLECTION) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + for name, x in ((FIRST_BONE, 0.0), (REMOVED_BONE, 1.0), (LAST_BONE, 2.0)): + bone = armature.edit_bones.new(name) + bone.head = (x, 0.0, 0.0) + bone.tail = (x, 1.0, 0.0) + bpy.ops.object.mode_set(mode="OBJECT") + first.assign(armature.bones[FIRST_BONE]) + removed.assign(armature.bones[REMOVED_BONE]) + last.assign(armature.bones[LAST_BONE]) + armature.collections.active_index = 1 + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00227.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00227.py new file mode 100644 index 00000000..81e7eb68 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00227.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureCollectionRemoveUnusedArmature" +OBJECT_NAME = "WebGapArmatureCollectionRemoveUnusedObject" +FIRST_COLLECTION = "WebGapArmatureCollectionRemoveUnusedFirst" +UNUSED_FIRST_COLLECTION = "WebGapArmatureCollectionRemoveUnusedUnusedFirst" +LAST_COLLECTION = "WebGapArmatureCollectionRemoveUnusedLast" +UNUSED_LAST_COLLECTION = "WebGapArmatureCollectionRemoveUnusedUnusedLast" +FIRST_BONE = "WebGapArmatureCollectionRemoveUnusedFirstBone" +LAST_BONE = "WebGapArmatureCollectionRemoveUnusedLastBone" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00227.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + first = armature.collections.new(FIRST_COLLECTION) + armature.collections.new(UNUSED_FIRST_COLLECTION) + last = armature.collections.new(LAST_COLLECTION) + armature.collections.new(UNUSED_LAST_COLLECTION) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + for name, x in ((FIRST_BONE, 0.0), (LAST_BONE, 2.0)): + bone = armature.edit_bones.new(name) + bone.head = (x, 0.0, 0.0) + bone.tail = (x, 1.0, 0.0) + bpy.ops.object.mode_set(mode="OBJECT") + first.assign(armature.bones[FIRST_BONE]) + last.assign(armature.bones[LAST_BONE]) + armature.collections.active_index = 2 + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00228.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00228.py new file mode 100644 index 00000000..70118403 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00228.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureCollectionSelectArmature" +OBJECT_NAME = "WebGapArmatureCollectionSelectObject" +FIRST_COLLECTION = "WebGapArmatureCollectionSelectFirst" +ACTIVE_COLLECTION = "WebGapArmatureCollectionSelectActive" +LAST_COLLECTION = "WebGapArmatureCollectionSelectLast" +FIRST_BONE = "WebGapArmatureCollectionSelectFirstBone" +ACTIVE_BONE = "WebGapArmatureCollectionSelectActiveBone" +LAST_BONE = "WebGapArmatureCollectionSelectLastBone" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00228.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + first = armature.collections.new(FIRST_COLLECTION) + active = armature.collections.new(ACTIVE_COLLECTION) + last = armature.collections.new(LAST_COLLECTION) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + edit_bones = {} + for name, x in ((FIRST_BONE, 0.0), (ACTIVE_BONE, 1.0), (LAST_BONE, 2.0)): + bone = armature.edit_bones.new(name) + bone.head = (x, 0.0, 0.0) + bone.tail = (x, 1.0, 0.0) + edit_bones[name] = bone + edit_bones[FIRST_BONE].select = True + edit_bones[ACTIVE_BONE].select = False + edit_bones[LAST_BONE].select = False + bpy.ops.object.mode_set(mode="OBJECT") + first.assign(armature.bones[FIRST_BONE]) + active.assign(armature.bones[ACTIVE_BONE]) + last.assign(armature.bones[LAST_BONE]) + armature.collections.active_index = 1 + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00229.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00229.py new file mode 100644 index 00000000..4c5966d2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00229.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureCollectionShowAllArmature" +OBJECT_NAME = "WebGapArmatureCollectionShowAllObject" +FIRST_COLLECTION = "WebGapArmatureCollectionShowAllFirst" +HIDDEN_COLLECTION = "WebGapArmatureCollectionShowAllHidden" +LAST_COLLECTION = "WebGapArmatureCollectionShowAllLast" +FIRST_BONE = "WebGapArmatureCollectionShowAllFirstBone" +HIDDEN_BONE = "WebGapArmatureCollectionShowAllHiddenBone" +LAST_BONE = "WebGapArmatureCollectionShowAllLastBone" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00229.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + first = armature.collections.new(FIRST_COLLECTION) + hidden = armature.collections.new(HIDDEN_COLLECTION) + last = armature.collections.new(LAST_COLLECTION) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + edit_bones = {} + for name, x in ((FIRST_BONE, 0.0), (HIDDEN_BONE, 1.0), (LAST_BONE, 2.0)): + bone = armature.edit_bones.new(name) + bone.head = (x, 0.0, 0.0) + bone.tail = (x, 1.0, 0.0) + edit_bones[name] = bone + bpy.ops.object.mode_set(mode="OBJECT") + first.assign(armature.bones[FIRST_BONE]) + hidden.assign(armature.bones[HIDDEN_BONE]) + last.assign(armature.bones[LAST_BONE]) + hidden.is_visible = False + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00230.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00230.py new file mode 100644 index 00000000..f12b8daa --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00230.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureCollectionUnassignArmature" +OBJECT_NAME = "WebGapArmatureCollectionUnassignObject" +SOURCE_COLLECTION = "WebGapArmatureCollectionUnassignSource" +RETAINED_COLLECTION = "WebGapArmatureCollectionUnassignRetained" +BONE_NAME = "WebGapArmatureCollectionUnassignBone" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00230.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + source = armature.collections.new(SOURCE_COLLECTION) + retained = armature.collections.new(RETAINED_COLLECTION) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + bone = armature.edit_bones.new(BONE_NAME) + bone.head = (0.0, 0.0, 0.0) + bone.tail = (0.0, 1.0, 0.0) + bone.select = True + bpy.ops.object.mode_set(mode="OBJECT") + source.assign(armature.bones[BONE_NAME]) + retained.assign(armature.bones[BONE_NAME]) + armature.collections.active_index = 0 + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00231.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00231.py new file mode 100644 index 00000000..c35ff77e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00231.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureCollectionUnassignNamedArmature" +OBJECT_NAME = "WebGapArmatureCollectionUnassignNamedObject" +SOURCE_COLLECTION = "WebGapArmatureCollectionUnassignNamedSource" +RETAINED_COLLECTION = "WebGapArmatureCollectionUnassignNamedRetained" +BONE_NAME = "WebGapArmatureCollectionUnassignNamedBone" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00231.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + source = armature.collections.new(SOURCE_COLLECTION) + retained = armature.collections.new(RETAINED_COLLECTION) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + bone = armature.edit_bones.new(BONE_NAME) + bone.head = (0.0, 0.0, 0.0) + bone.tail = (0.0, 1.0, 0.0) + bone.select = True + bpy.ops.object.mode_set(mode="OBJECT") + source.assign(armature.bones[BONE_NAME]) + retained.assign(armature.bones[BONE_NAME]) + armature.collections.active_index = 1 + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00232.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00232.py new file mode 100644 index 00000000..47fdea74 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00232.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureCollectionUnsoloAllArmature" +OBJECT_NAME = "WebGapArmatureCollectionUnsoloAllObject" +FIRST_COLLECTION = "WebGapArmatureCollectionUnsoloAllFirst" +SOLO_COLLECTION = "WebGapArmatureCollectionUnsoloAllSolo" +LAST_COLLECTION = "WebGapArmatureCollectionUnsoloAllLast" +FIRST_BONE = "WebGapArmatureCollectionUnsoloAllFirstBone" +SOLO_BONE = "WebGapArmatureCollectionUnsoloAllSoloBone" +LAST_BONE = "WebGapArmatureCollectionUnsoloAllLastBone" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00232.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + first = armature.collections.new(FIRST_COLLECTION) + solo = armature.collections.new(SOLO_COLLECTION) + last = armature.collections.new(LAST_COLLECTION) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + edit_bones = {} + for name, x in ((FIRST_BONE, 0.0), (SOLO_BONE, 1.0), (LAST_BONE, 2.0)): + bone = armature.edit_bones.new(name) + bone.head = (x, 0.0, 0.0) + bone.tail = (x, 1.0, 0.0) + edit_bones[name] = bone + bpy.ops.object.mode_set(mode="OBJECT") + first.assign(armature.bones[FIRST_BONE]) + solo.assign(armature.bones[SOLO_BONE]) + last.assign(armature.bones[LAST_BONE]) + solo.is_solo = True + armature.collections.active_index = 1 + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00233.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00233.py new file mode 100644 index 00000000..cf03dd7c --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00233.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureCopyBoneColorArmature" +OBJECT_NAME = "WebGapArmatureCopyBoneColorObject" +SOURCE_BONE = "WebGapArmatureCopyBoneColorSource" +SELECTED_BONE = "WebGapArmatureCopyBoneColorSelected" +UNSELECTED_BONE = "WebGapArmatureCopyBoneColorUnselected" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00233.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + bones = {} + for name, x in ((SOURCE_BONE, 0.0), (SELECTED_BONE, 1.0), (UNSELECTED_BONE, 2.0)): + bone = armature.edit_bones.new(name) + bone.head = (x, 0.0, 0.0) + bone.tail = (x, 1.0, 0.0) + bones[name] = bone + source = bones[SOURCE_BONE] + source.color.palette = "CUSTOM" + source.color.custom.normal = (0.12, 0.24, 0.36) + source.color.custom.select = (0.42, 0.54, 0.66) + source.color.custom.active = (0.72, 0.84, 0.96) + bones[SELECTED_BONE].color.palette = "THEME04" + bones[UNSELECTED_BONE].color.palette = "THEME05" + for bone in bones.values(): + bone.select = True + bones[UNSELECTED_BONE].select = False + armature.edit_bones.active = source + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00234.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00234.py new file mode 100644 index 00000000..31592040 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00234.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureDeleteArmature" +OBJECT_NAME = "WebGapArmatureDeleteObject" +KEEP_BONE = "WebGapArmatureDeleteKeep" +DELETE_BONE = "WebGapArmatureDeleteSelected" +RETAIN_BONE = "WebGapArmatureDeleteRetain" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00234.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + bones = {} + for name, x in ((KEEP_BONE, 0.0), (DELETE_BONE, 1.0), (RETAIN_BONE, 2.0)): + bone = armature.edit_bones.new(name) + bone.head = (x, 0.0, 0.0) + bone.tail = (x, 1.0, 0.0) + bones[name] = bone + for bone in bones.values(): + bone.select = False + bones[DELETE_BONE].select = True + armature.edit_bones.active = bones[DELETE_BONE] + bpy.ops.object.mode_set(mode="OBJECT") + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00235.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00235.py new file mode 100644 index 00000000..b069bac1 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00235.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureDissolveArmature" +OBJECT_NAME = "WebGapArmatureDissolveObject" +ROOT_BONE = "WebGapArmatureDissolveRoot" +MIDDLE_BONE = "WebGapArmatureDissolveMiddle" +TIP_BONE = "WebGapArmatureDissolveTip" +OTHER_BONE = "WebGapArmatureDissolveOther" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00235.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + root = armature.edit_bones.new(ROOT_BONE) + root.head = (0.0, 0.0, 0.0) + root.tail = (0.0, 1.0, 0.0) + middle = armature.edit_bones.new(MIDDLE_BONE) + middle.head = (0.0, 1.0, 0.0) + middle.tail = (0.0, 2.0, 0.0) + middle.parent = root + middle.use_connect = True + tip = armature.edit_bones.new(TIP_BONE) + tip.head = (0.0, 2.0, 0.0) + tip.tail = (0.0, 3.0, 0.0) + tip.parent = middle + tip.use_connect = True + other = armature.edit_bones.new(OTHER_BONE) + other.head = (2.0, 0.0, 0.0) + other.tail = (2.0, 1.0, 0.0) + root.select = False + middle.select = True + tip.select = True + other.select = False + armature.edit_bones.active = middle + bpy.ops.object.mode_set(mode="OBJECT") + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00236.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00236.py new file mode 100644 index 00000000..9c73f1fe --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00236.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureDuplicateArmature" +OBJECT_NAME = "WebGapArmatureDuplicateObject" +SOURCE_BONE = "WebGapArmatureDuplicateSource" +OTHER_BONE = "WebGapArmatureDuplicateOther" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00236.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + source = armature.edit_bones.new(SOURCE_BONE) + source.head = (0.0, 0.0, 0.0) + source.tail = (0.0, 1.0, 0.0) + other = armature.edit_bones.new(OTHER_BONE) + other.head = (2.0, 0.0, 0.0) + other.tail = (2.0, 1.0, 0.0) + source.select = True + source.select_head = True + source.select_tail = True + other.select = False + other.select_head = False + other.select_tail = False + armature.edit_bones.active = source + bpy.ops.object.mode_set(mode="OBJECT") + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00237.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00237.py new file mode 100644 index 00000000..a03eebad --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00237.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureDuplicateMoveArmature" +OBJECT_NAME = "WebGapArmatureDuplicateMoveObject" +SOURCE_BONE = "WebGapArmatureDuplicateMoveSource" +OTHER_BONE = "WebGapArmatureDuplicateMoveOther" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00237.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + source = armature.edit_bones.new(SOURCE_BONE) + source.head = (0.0, 0.0, 0.0) + source.tail = (0.0, 1.0, 0.0) + other = armature.edit_bones.new(OTHER_BONE) + other.head = (2.0, 0.0, 0.0) + other.tail = (2.0, 1.0, 0.0) + source.select = True + source.select_head = True + source.select_tail = True + other.select = False + other.select_head = False + other.select_tail = False + armature.edit_bones.active = source + result = bpy.ops.armature.duplicate_move( + TRANSFORM_OT_translate={"value": (1.0, 2.0, 3.0)} + ) + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_duplicate_move returned {result}") + bpy.ops.object.mode_set(mode="OBJECT") + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00238.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00238.py new file mode 100644 index 00000000..64efd5dc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00238.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureDuplicateRenameArmature" +OBJECT_NAME = "WebGapArmatureDuplicateRenameObject" +SOURCE_BONE = "WebGapArmatureDuplicateRenameSource" +OTHER_BONE = "WebGapArmatureDuplicateRenameOther" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00238.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + source = armature.edit_bones.new(SOURCE_BONE) + source.head = (0.0, 0.0, 0.0) + source.tail = (0.0, 1.0, 0.0) + other = armature.edit_bones.new(OTHER_BONE) + other.head = (2.0, 0.0, 0.0) + other.tail = (2.0, 1.0, 0.0) + source.select = True + source.select_head = True + source.select_tail = True + other.select = False + other.select_head = False + other.select_tail = False + armature.edit_bones.active = source + result = bpy.ops.armature.duplicate_rename(search="Source", replace="Copy", do_flip_names=False) + if result != {"FINISHED"}: + raise RuntimeError(f"ARMATURE_OT_duplicate_rename returned {result}") + bpy.ops.object.mode_set(mode="OBJECT") + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00239.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00239.py new file mode 100644 index 00000000..2230b086 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00239.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureExtrudeArmature" +OBJECT_NAME = "WebGapArmatureExtrudeObject" +SOURCE_BONE = "WebGapArmatureExtrudeSource" +OTHER_BONE = "WebGapArmatureExtrudeOther" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00239.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + source = armature.edit_bones.new(SOURCE_BONE) + source.head = (0.0, 0.0, 0.0) + source.tail = (0.0, 1.0, 0.0) + other = armature.edit_bones.new(OTHER_BONE) + other.head = (2.0, 0.0, 0.0) + other.tail = (2.0, 1.0, 0.0) + source.select = True + source.select_head = False + source.select_tail = True + other.select = False + other.select_head = False + other.select_tail = False + armature.edit_bones.active = source + bpy.ops.object.mode_set(mode="OBJECT") + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00240.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00240.py new file mode 100644 index 00000000..a2c8c283 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00240.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureExtrudeForkedArmature" +OBJECT_NAME = "WebGapArmatureExtrudeForkedObject" +SOURCE_BONE = "WebGapArmatureExtrudeForkedSource" +OTHER_BONE = "WebGapArmatureExtrudeForkedOther" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00240.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + source = armature.edit_bones.new(SOURCE_BONE) + source.head = (0.0, 0.0, 0.0) + source.tail = (0.0, 1.0, 0.0) + other = armature.edit_bones.new(OTHER_BONE) + other.head = (2.0, 0.0, 0.0) + other.tail = (2.0, 1.0, 0.0) + source.select = True + source.select_head = False + source.select_tail = True + other.select = False + other.select_head = False + other.select_tail = False + armature.edit_bones.active = source + bpy.ops.object.mode_set(mode="OBJECT") + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00241.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00241.py new file mode 100644 index 00000000..2711ce81 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00241.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureExtrudeMoveArmature" +OBJECT_NAME = "WebGapArmatureExtrudeMoveObject" +SOURCE_BONE = "WebGapArmatureExtrudeMoveSource" +OTHER_BONE = "WebGapArmatureExtrudeMoveOther" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00241.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + source = armature.edit_bones.new(SOURCE_BONE) + source.head = (0.0, 0.0, 0.0) + source.tail = (0.0, 1.0, 0.0) + other = armature.edit_bones.new(OTHER_BONE) + other.head = (2.0, 0.0, 0.0) + other.tail = (2.0, 1.0, 0.0) + source.select = True + source.select_head = False + source.select_tail = True + other.select = False + other.select_head = False + other.select_tail = False + armature.edit_bones.active = source + bpy.ops.object.mode_set(mode="OBJECT") + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00242.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00242.py new file mode 100644 index 00000000..7254abfb --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00242.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureFillArmature" +OBJECT_NAME = "WebGapArmatureFillObject" +SOURCE_BONE = "WebGapArmatureFillSource" +TARGET_BONE = "WebGapArmatureFillTarget" +OTHER_BONE = "WebGapArmatureFillOther" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00242.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + source = armature.edit_bones.new(SOURCE_BONE) + source.head = (0.0, 0.0, 0.0) + source.tail = (0.0, 1.0, 0.0) + target = armature.edit_bones.new(TARGET_BONE) + target.head = (0.0, 2.0, 0.0) + target.tail = (0.0, 3.0, 0.0) + other = armature.edit_bones.new(OTHER_BONE) + other.head = (2.0, 0.0, 0.0) + other.tail = (2.0, 1.0, 0.0) + source.select = False + source.select_head = False + source.select_tail = True + target.select = False + target.select_head = True + target.select_tail = False + other.select = False + other.select_head = False + other.select_tail = False + armature.edit_bones.active = target + bpy.ops.object.mode_set(mode="OBJECT") + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00243.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00243.py new file mode 100644 index 00000000..71883186 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00243.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureFlipNamesArmature" +OBJECT_NAME = "WebGapArmatureFlipNamesObject" +LEFT_BONE = "WebGapArmatureFlipBone.L" +RIGHT_BONE = "WebGapArmatureFlipBone.R" +OTHER_BONE = "WebGapArmatureFlipOther" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00243.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + left = armature.edit_bones.new(LEFT_BONE) + left.head = (-1.0, 0.0, 0.0) + left.tail = (-1.0, 1.0, 0.0) + right = armature.edit_bones.new(RIGHT_BONE) + right.head = (1.0, 0.0, 0.0) + right.tail = (1.0, 1.0, 0.0) + other = armature.edit_bones.new(OTHER_BONE) + other.head = (0.0, 0.0, 2.0) + other.tail = (0.0, 1.0, 2.0) + left.select = True + left.select_head = True + left.select_tail = True + right.select = True + right.select_head = True + right.select_tail = True + other.select = False + other.select_head = False + other.select_tail = False + armature.edit_bones.active = right + bpy.ops.object.mode_set(mode="OBJECT") + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00244.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00244.py new file mode 100644 index 00000000..39f3141d --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00244.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureHideArmature" +OBJECT_NAME = "WebGapArmatureHideObject" +HIDE_BONE = "WebGapArmatureHideSelected" +OTHER_BONE = "WebGapArmatureHideOther" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00244.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + hidden = armature.edit_bones.new(HIDE_BONE) + hidden.head = (-1.0, 0.0, 0.0) + hidden.tail = (-1.0, 1.0, 0.0) + other = armature.edit_bones.new(OTHER_BONE) + other.head = (1.0, 0.0, 0.0) + other.tail = (1.0, 1.0, 0.0) + hidden.select = True + hidden.select_head = True + hidden.select_tail = True + other.select = False + other.select_head = False + other.select_tail = False + armature.edit_bones.active = hidden + bpy.ops.object.mode_set(mode="OBJECT") + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00245.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00245.py new file mode 100644 index 00000000..9c8c861a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00245.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureMoveCollectionArmature" +OBJECT_NAME = "WebGapArmatureMoveCollectionObject" +MOVE_BONE = "WebGapArmatureMoveCollectionSelected" +OTHER_BONE = "WebGapArmatureMoveCollectionOther" +SOURCE_COLLECTION = "WebGapArmatureMoveCollectionSource" +TARGET_COLLECTION = "WebGapArmatureMoveCollectionTarget" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00245.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + move = armature.edit_bones.new(MOVE_BONE) + move.head = (-1.0, 0.0, 0.0) + move.tail = (-1.0, 1.0, 0.0) + other = armature.edit_bones.new(OTHER_BONE) + other.head = (1.0, 0.0, 0.0) + other.tail = (1.0, 1.0, 0.0) + source = armature.collections.new(SOURCE_COLLECTION) + armature.collections.new(TARGET_COLLECTION) + source.assign(move) + source.assign(other) + move.select = True + move.select_head = True + move.select_tail = True + other.select = False + other.select_head = False + other.select_tail = False + armature.edit_bones.active = move + bpy.ops.object.mode_set(mode="OBJECT") + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00246.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00246.py new file mode 100644 index 00000000..be53601f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00246.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureParentClearArmature" +OBJECT_NAME = "WebGapArmatureParentClearObject" +PARENT_BONE = "WebGapArmatureParentClearParent" +CHILD_BONE = "WebGapArmatureParentClearChild" +OTHER_BONE = "WebGapArmatureParentClearOther" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00246.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + parent = armature.edit_bones.new(PARENT_BONE) + parent.head = (0.0, 0.0, 0.0) + parent.tail = (0.0, 1.0, 0.0) + child = armature.edit_bones.new(CHILD_BONE) + child.head = (0.0, 1.0, 0.0) + child.tail = (0.0, 2.0, 0.0) + child.parent = parent + child.use_connect = True + other = armature.edit_bones.new(OTHER_BONE) + other.head = (2.0, 0.0, 0.0) + other.tail = (2.0, 1.0, 0.0) + parent.select = False + parent.select_head = False + parent.select_tail = False + child.select = True + child.select_head = True + child.select_tail = True + other.select = False + other.select_head = False + other.select_tail = False + armature.edit_bones.active = child + bpy.ops.object.mode_set(mode="OBJECT") + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00247.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00247.py new file mode 100644 index 00000000..b2a76bdf --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00247.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureParentSetArmature" +OBJECT_NAME = "WebGapArmatureParentSetObject" +PARENT_BONE = "WebGapArmatureParentSetParent" +CHILD_BONE = "WebGapArmatureParentSetChild" +OTHER_BONE = "WebGapArmatureParentSetOther" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00247.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + parent = armature.edit_bones.new(PARENT_BONE) + parent.head = (0.0, 0.0, 0.0) + parent.tail = (0.0, 1.0, 0.0) + child = armature.edit_bones.new(CHILD_BONE) + child.head = (0.0, 1.0, 0.0) + child.tail = (0.0, 2.0, 0.0) + other = armature.edit_bones.new(OTHER_BONE) + other.head = (2.0, 0.0, 0.0) + other.tail = (2.0, 1.0, 0.0) + parent.select = True + parent.select_head = True + parent.select_tail = True + child.select = True + child.select_head = True + child.select_tail = True + other.select = False + other.select_head = False + other.select_tail = False + armature.edit_bones.active = parent + bpy.ops.object.mode_set(mode="OBJECT") + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00248.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00248.py new file mode 100644 index 00000000..7b981cfb --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00248.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureRevealArmature" +OBJECT_NAME = "WebGapArmatureRevealObject" +REVEAL_BONE = "WebGapArmatureRevealHidden" +OTHER_BONE = "WebGapArmatureRevealOther" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00248.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + hidden = armature.edit_bones.new(REVEAL_BONE) + hidden.head = (-1.0, 0.0, 0.0) + hidden.tail = (-1.0, 1.0, 0.0) + other = armature.edit_bones.new(OTHER_BONE) + other.head = (1.0, 0.0, 0.0) + other.tail = (1.0, 1.0, 0.0) + hidden.select = False + hidden.select_head = False + hidden.select_tail = False + hidden.hide = True + armature.edit_bones.active = other + other.select = False + other.select_head = False + other.select_tail = False + bpy.ops.object.mode_set(mode="OBJECT") + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00249.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00249.py new file mode 100644 index 00000000..d5ce471f --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00249.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python3 +import math +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureRollClearArmature" +OBJECT_NAME = "WebGapArmatureRollClearObject" +BONE_NAME = "WebGapArmatureRollClearBone" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00249.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + bone = armature.edit_bones.new(BONE_NAME) + bone.head = (0.0, 0.0, 0.0) + bone.tail = (0.0, 2.0, 0.0) + bone.roll = math.pi / 4.0 + bone.select = True + bone.select_head = True + bone.select_tail = True + armature.edit_bones.active = bone + bpy.ops.object.mode_set(mode="OBJECT") + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00250.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00250.py new file mode 100644 index 00000000..e7276114 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00250.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureSelectAllArmature" +OBJECT_NAME = "WebGapArmatureSelectAllObject" +PARENT_BONE = "WebGapArmatureSelectAllParent" +OTHER_BONE = "WebGapArmatureSelectAllOther" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00250.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + parent = armature.edit_bones.new(PARENT_BONE) + parent.head = (0.0, 0.0, 0.0) + parent.tail = (0.0, 1.0, 0.0) + other = armature.edit_bones.new(OTHER_BONE) + other.head = (2.0, 0.0, 0.0) + other.tail = (2.0, 1.0, 0.0) + parent.select = True + parent.select_head = True + parent.select_tail = True + other.select = False + other.select_head = False + other.select_tail = False + armature.edit_bones.active = parent + bpy.ops.object.mode_set(mode="OBJECT") + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00251.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00251.py new file mode 100644 index 00000000..34c2555a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00251.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureSelectHierarchyArmature" +OBJECT_NAME = "WebGapArmatureSelectHierarchyObject" +ROOT_BONE = "WebGapArmatureSelectHierarchyRoot" +CHILD_BONE = "WebGapArmatureSelectHierarchyChild" +OTHER_BONE = "WebGapArmatureSelectHierarchyOther" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00251.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + + root = armature.edit_bones.new(ROOT_BONE) + root.head = (0.0, 0.0, 0.0) + root.tail = (0.0, 1.0, 0.0) + child = armature.edit_bones.new(CHILD_BONE) + child.head = (0.0, 1.0, 0.0) + child.tail = (0.0, 2.0, 0.0) + child.parent = root + child.use_connect = True + other = armature.edit_bones.new(OTHER_BONE) + other.head = (2.0, 0.0, 0.0) + other.tail = (2.0, 1.0, 0.0) + + root.select = True + root.select_head = True + root.select_tail = True + child.select = False + child.select_head = False + child.select_tail = False + other.select = False + other.select_head = False + other.select_tail = False + armature.edit_bones.active = root + bpy.ops.object.mode_set(mode="OBJECT") + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00252.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00252.py new file mode 100644 index 00000000..0cf616b4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00252.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureSelectLessArmature" +OBJECT_NAME = "WebGapArmatureSelectLessObject" +ROOT_BONE = "WebGapArmatureSelectLessRoot" +CHILD_BONE = "WebGapArmatureSelectLessChild" +OTHER_BONE = "WebGapArmatureSelectLessOther" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00252.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + + root = armature.edit_bones.new(ROOT_BONE) + root.head = (0.0, 0.0, 0.0) + root.tail = (0.0, 1.0, 0.0) + child = armature.edit_bones.new(CHILD_BONE) + child.head = (0.0, 1.0, 0.0) + child.tail = (0.0, 2.0, 0.0) + child.parent = root + child.use_connect = True + other = armature.edit_bones.new(OTHER_BONE) + other.head = (2.0, 0.0, 0.0) + other.tail = (2.0, 1.0, 0.0) + + armature.edit_bones.active = root + root.select = False + root.select_head = True + root.select_tail = False + child.select = False + child.select_head = False + child.select_tail = False + other.select = True + other.select_head = True + other.select_tail = True + bpy.ops.object.mode_set(mode="OBJECT") + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00253.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00253.py new file mode 100644 index 00000000..34239e96 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00253.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureSelectLinkedArmature" +OBJECT_NAME = "WebGapArmatureSelectLinkedObject" +ROOT_BONE = "WebGapArmatureSelectLinkedRoot" +CHILD_BONE = "WebGapArmatureSelectLinkedChild" +GRANDCHILD_BONE = "WebGapArmatureSelectLinkedGrandchild" +OTHER_BONE = "WebGapArmatureSelectLinkedOther" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00253.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + + root = armature.edit_bones.new(ROOT_BONE) + root.head = (0.0, 0.0, 0.0) + root.tail = (0.0, 1.0, 0.0) + child = armature.edit_bones.new(CHILD_BONE) + child.head = (0.0, 1.0, 0.0) + child.tail = (0.0, 2.0, 0.0) + child.parent = root + child.use_connect = True + grandchild = armature.edit_bones.new(GRANDCHILD_BONE) + grandchild.head = (0.0, 2.0, 0.0) + grandchild.tail = (0.0, 3.0, 0.0) + grandchild.parent = child + grandchild.use_connect = True + other = armature.edit_bones.new(OTHER_BONE) + other.head = (2.0, 0.0, 0.0) + other.tail = (2.0, 1.0, 0.0) + + root.select = True + root.select_head = True + root.select_tail = True + child.select = False + child.select_head = False + child.select_tail = False + grandchild.select = False + grandchild.select_head = False + grandchild.select_tail = False + other.select = False + other.select_head = False + other.select_tail = False + armature.edit_bones.active = root + bpy.ops.object.mode_set(mode="OBJECT") + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00254.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00254.py new file mode 100644 index 00000000..023a6174 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00254.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureSelectLinkedPickArmature" +OBJECT_NAME = "WebGapArmatureSelectLinkedPickObject" +ROOT_BONE = "WebGapArmatureSelectLinkedPickRoot" +CHILD_BONE = "WebGapArmatureSelectLinkedPickChild" +GRANDCHILD_BONE = "WebGapArmatureSelectLinkedPickGrandchild" +OTHER_BONE = "WebGapArmatureSelectLinkedPickOther" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00254.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + root = armature.edit_bones.new(ROOT_BONE) + root.head = (0.0, 0.0, 0.0); root.tail = (0.0, 1.0, 0.0) + child = armature.edit_bones.new(CHILD_BONE) + child.head = (0.0, 1.0, 0.0); child.tail = (0.0, 2.0, 0.0); child.parent = root; child.use_connect = True + grandchild = armature.edit_bones.new(GRANDCHILD_BONE) + grandchild.head = (0.0, 2.0, 0.0); grandchild.tail = (0.0, 3.0, 0.0); grandchild.parent = child; grandchild.use_connect = True + other = armature.edit_bones.new(OTHER_BONE) + other.head = (2.0, 0.0, 0.0); other.tail = (2.0, 1.0, 0.0) + root.select = True; root.select_head = True; root.select_tail = True + child.select = False; child.select_head = False; child.select_tail = False + grandchild.select = False; grandchild.select_head = False; grandchild.select_tail = False + other.select = False; other.select_head = False; other.select_tail = False + armature.edit_bones.active = root + bpy.ops.object.mode_set(mode="OBJECT") + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00255.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00255.py new file mode 100644 index 00000000..1601c62a --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00255.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureSelectMirrorArmature" +OBJECT_NAME = "WebGapArmatureSelectMirrorObject" +LEFT_BONE = "WebGapSelectMirror.L" +RIGHT_BONE = "WebGapSelectMirror.R" +CENTER_BONE = "WebGapSelectMirrorCenter" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00255.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj; obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + left = armature.edit_bones.new(LEFT_BONE); left.head = (-2.0, 0.0, 0.0); left.tail = (-2.0, 1.0, 0.0) + right = armature.edit_bones.new(RIGHT_BONE); right.head = (2.0, 0.0, 0.0); right.tail = (2.0, 1.0, 0.0) + center = armature.edit_bones.new(CENTER_BONE); center.head = (0.0, 0.0, 0.0); center.tail = (0.0, 1.0, 0.0) + left.select = True; left.select_head = True; left.select_tail = True + right.select = False; right.select_head = False; right.select_tail = False + center.select = False; center.select_head = False; center.select_tail = False + armature.edit_bones.active = left + bpy.ops.object.mode_set(mode="OBJECT") + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00256.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00256.py new file mode 100644 index 00000000..6bf2df6e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00256.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + +ARMATURE_NAME = "WebGapArmatureSelectMoreArmature" +OBJECT_NAME = "WebGapArmatureSelectMoreObject" +ROOT_BONE = "WebGapArmatureSelectMoreRoot" +CHILD_BONE = "WebGapArmatureSelectMoreChild" +GRANDCHILD_BONE = "WebGapArmatureSelectMoreGrandchild" +OTHER_BONE = "WebGapArmatureSelectMoreOther" + +def main(): + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00256.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + root = armature.edit_bones.new(ROOT_BONE); root.head = (0, 0, 0); root.tail = (0, 1, 0) + child = armature.edit_bones.new(CHILD_BONE); child.head = (0, 1, 0); child.tail = (0, 2, 0); child.parent = root; child.use_connect = True + grandchild = armature.edit_bones.new(GRANDCHILD_BONE); grandchild.head = (0, 2, 0); grandchild.tail = (0, 3, 0); grandchild.parent = child; grandchild.use_connect = True + other = armature.edit_bones.new(OTHER_BONE); other.head = (2, 0, 0); other.tail = (2, 1, 0) + root.select = True; root.select_head = True; root.select_tail = True + for bone in (child, grandchild, other): + bone.select = False; bone.select_head = False; bone.select_tail = False + armature.edit_bones.active = root + bpy.ops.object.mode_set(mode="OBJECT") + bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(args[0]).resolve()), check_existing=False, compress=True) + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00257.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00257.py new file mode 100644 index 00000000..7be1d1bc --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00257.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureSelectSimilarArmature" +OBJECT_NAME = "WebGapArmatureSelectSimilarObject" +ACTIVE_BONE = "WebGapArmatureSelectSimilarActive" +SIMILAR_BONE = "WebGapArmatureSelectSimilarSameLength" +DIFFERENT_BONE = "WebGapArmatureSelectSimilarDifferentLength" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00257.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + active = armature.edit_bones.new(ACTIVE_BONE) + active.head = (0.0, 0.0, 0.0) + active.tail = (0.0, 1.0, 0.0) + similar = armature.edit_bones.new(SIMILAR_BONE) + similar.head = (2.0, 0.0, 0.0) + similar.tail = (2.0, 1.0, 0.0) + different = armature.edit_bones.new(DIFFERENT_BONE) + different.head = (4.0, 0.0, 0.0) + different.tail = (4.0, 2.0, 0.0) + active.select = True + active.select_head = True + active.select_tail = True + for bone in (similar, different): + bone.select = False + bone.select_head = False + bone.select_tail = False + armature.edit_bones.active = active + bpy.ops.object.mode_set(mode="OBJECT") + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00258.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00258.py new file mode 100644 index 00000000..9832830b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00258.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureSeparateArmature" +OBJECT_NAME = "WebGapArmatureSeparateObject" +SELECTED_BONE = "WebGapArmatureSeparateSelected" +RETAINED_BONE = "WebGapArmatureSeparateRetained" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00258.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + selected = armature.edit_bones.new(SELECTED_BONE) + selected.head = (0.0, 0.0, 0.0) + selected.tail = (0.0, 1.0, 0.0) + retained = armature.edit_bones.new(RETAINED_BONE) + retained.head = (2.0, 0.0, 0.0) + retained.tail = (2.0, 1.0, 0.0) + selected.select = True + selected.select_head = True + selected.select_tail = True + retained.select = False + retained.select_head = False + retained.select_tail = False + armature.edit_bones.active = selected + bpy.ops.object.mode_set(mode="OBJECT") + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00259.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00259.py new file mode 100644 index 00000000..7147cbfd --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00259.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python3 +import pathlib +import sys +import bpy + +ARMATURE_NAME = "WebGapArmatureShortestPathArmature" +OBJECT_NAME = "WebGapArmatureShortestPathObject" +ROOT_BONE = "WebGapArmatureShortestPathRoot" +CHILD_BONE = "WebGapArmatureShortestPathChild" +GRANDCHILD_BONE = "WebGapArmatureShortestPathGrandchild" +OTHER_BONE = "WebGapArmatureShortestPathOther" + +def main(): + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 1: raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00259.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + arm = bpy.data.armatures.new(ARMATURE_NAME); obj = bpy.data.objects.new(OBJECT_NAME, arm); bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj; obj.select_set(True); bpy.ops.object.mode_set(mode="EDIT") + root = arm.edit_bones.new(ROOT_BONE); root.head=(0,0,0); root.tail=(0,1,0) + child = arm.edit_bones.new(CHILD_BONE); child.head=(0,1,0); child.tail=(0,2,0); child.parent=root; child.use_connect=True + grand = arm.edit_bones.new(GRANDCHILD_BONE); grand.head=(0,2,0); grand.tail=(0,3,0); grand.parent=child; grand.use_connect=True + other = arm.edit_bones.new(OTHER_BONE); other.head=(2,0,0); other.tail=(2,1,0) + for bone in (root, child, grand): bone.select=True; bone.select_head=True; bone.select_tail=True + other.select=False; other.select_head=False; other.select_tail=False; arm.edit_bones.active=root + bpy.ops.object.mode_set(mode="OBJECT"); bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(args[0]).resolve()), check_existing=False, compress=True) +if __name__ == "__main__": main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00260.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00260.py new file mode 100644 index 00000000..e0a0edfd --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00260.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python3 +import pathlib,sys,bpy +ARMATURE_NAME="WebGapArmatureSplitArmature"; OBJECT_NAME="WebGapArmatureSplitObject"; ROOT_BONE="WebGapArmatureSplitRoot"; CHILD_BONE="WebGapArmatureSplitChild"; OTHER_BONE="WebGapArmatureSplitOther" +def main(): + a=sys.argv[sys.argv.index("--")+1:] + if len(a)!=1: raise SystemExit("usage") + bpy.ops.wm.read_factory_settings(use_empty=True); arm=bpy.data.armatures.new(ARMATURE_NAME); obj=bpy.data.objects.new(OBJECT_NAME,arm); bpy.context.scene.collection.objects.link(obj); bpy.context.view_layer.objects.active=obj; obj.select_set(True); bpy.ops.object.mode_set(mode="EDIT") + root=arm.edit_bones.new(ROOT_BONE); root.head=(0,0,0); root.tail=(0,1,0); child=arm.edit_bones.new(CHILD_BONE); child.head=(0,1,0); child.tail=(0,2,0); child.parent=root; child.use_connect=True; other=arm.edit_bones.new(OTHER_BONE); other.head=(2,0,0); other.tail=(2,1,0); root.select=True; root.select_head=True; root.select_tail=True + for b in (child,other): b.select=False; b.select_head=False; b.select_tail=False + arm.edit_bones.active=root; bpy.ops.object.mode_set(mode="OBJECT"); bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(a[0]).resolve()),check_existing=False,compress=True) +if __name__=="__main__": main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00261.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00261.py new file mode 100644 index 00000000..3efedfa1 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00261.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python3 +import pathlib, sys, bpy + +ARMATURE_NAME="WebGapArmatureSubdivideArmature"; OBJECT_NAME="WebGapArmatureSubdivideObject"; SOURCE_BONE="WebGapArmatureSubdivideSource"; OTHER_BONE="WebGapArmatureSubdivideOther" +def main(): + args=sys.argv[sys.argv.index("--")+1:] + if len(args)!=1: raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00261.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True); arm=bpy.data.armatures.new(ARMATURE_NAME); obj=bpy.data.objects.new(OBJECT_NAME,arm); bpy.context.scene.collection.objects.link(obj); bpy.context.view_layer.objects.active=obj; obj.select_set(True); bpy.ops.object.mode_set(mode="EDIT") + source=arm.edit_bones.new(SOURCE_BONE); source.head=(0,0,0); source.tail=(0,1,0); other=arm.edit_bones.new(OTHER_BONE); other.head=(2,0,0); other.tail=(2,1,0); source.select=True; source.select_head=True; source.select_tail=True; other.select=False; other.select_head=False; other.select_tail=False; arm.edit_bones.active=source + bpy.ops.object.mode_set(mode="OBJECT"); bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(args[0]).resolve()),check_existing=False,compress=True) +if __name__=="__main__": main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00262.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00262.py new file mode 100644 index 00000000..14845f96 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00262.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python3 +import pathlib,sys,bpy +ARMATURE_NAME="WebGapArmatureSwitchDirectionArmature"; OBJECT_NAME="WebGapArmatureSwitchDirectionObject"; ROOT_BONE="WebGapArmatureSwitchDirectionRoot"; CHILD_BONE="WebGapArmatureSwitchDirectionChild"; OTHER_BONE="WebGapArmatureSwitchDirectionOther" +def main(): + a=sys.argv[sys.argv.index("--")+1:]; + if len(a)!=1: raise SystemExit("usage") + bpy.ops.wm.read_factory_settings(use_empty=True);arm=bpy.data.armatures.new(ARMATURE_NAME);obj=bpy.data.objects.new(OBJECT_NAME,arm);bpy.context.scene.collection.objects.link(obj);bpy.context.view_layer.objects.active=obj;obj.select_set(True);bpy.ops.object.mode_set(mode="EDIT") + root=arm.edit_bones.new(ROOT_BONE);root.head=(0,0,0);root.tail=(0,1,0);child=arm.edit_bones.new(CHILD_BONE);child.head=(0,1,0);child.tail=(0,2,0);child.parent=root;child.use_connect=True;other=arm.edit_bones.new(OTHER_BONE);other.head=(2,0,0);other.tail=(2,1,0) + for b in (root,child):b.select=True;b.select_head=True;b.select_tail=True + other.select=False;other.select_head=False;other.select_tail=False;arm.edit_bones.active=root;bpy.ops.object.mode_set(mode="OBJECT");bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(a[0]).resolve()),check_existing=False,compress=True) +if __name__=="__main__":main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00263.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00263.py new file mode 100644 index 00000000..9d9bb21e --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00263.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ARMATURE_NAME = "WebGapArmatureSymmetrizeArmature" +OBJECT_NAME = "WebGapArmatureSymmetrizeObject" +SOURCE_BONE = "WebGapArmatureSymmetrizeSource.L" +OTHER_BONE = "WebGapArmatureSymmetrizeOther" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00263.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + armature = bpy.data.armatures.new(ARMATURE_NAME) + obj = bpy.data.objects.new(OBJECT_NAME, armature) + bpy.context.scene.collection.objects.link(obj) + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.object.mode_set(mode="EDIT") + source = armature.edit_bones.new(SOURCE_BONE) + source.head = (1.0, 0.0, 0.0) + source.tail = (1.0, 1.0, 0.0) + other = armature.edit_bones.new(OTHER_BONE) + other.head = (-3.0, 0.0, 0.0) + other.tail = (-3.0, 1.0, 0.0) + source.select = True + source.select_head = True + source.select_tail = True + other.select = False + other.select_head = False + other.select_tail = False + armature.edit_bones.active = source + bpy.ops.object.mode_set(mode="OBJECT") + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00264.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00264.py new file mode 100644 index 00000000..a01d39fb --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00264.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +IMAGE_NAME = "WebGapAssetDownloadImage" +IMAGE_PATH = "//assets/WebGapAssetDownload.png" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00264.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + image = bpy.data.images.new(IMAGE_NAME, width=1, height=1, alpha=True) + image.filepath = IMAGE_PATH + image.source = "FILE" + image.use_fake_user = True + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00265.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00265.py new file mode 100644 index 00000000..82bc9b81 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00265.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +IMAGE_NAME = "WebGapAssetsDownloadImage" +IMAGE_PATH = "//assets/WebGapAssetsDownload.png" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00265.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + image = bpy.data.images.new(IMAGE_NAME, width=1, height=1, alpha=True) + image.filepath = IMAGE_PATH + image.source = "FILE" + image.use_fake_user = True + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00266.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00266.py new file mode 100644 index 00000000..29aa6890 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00266.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +ACTION_NAME = "WebGapAssignAction" +OBJECT_NAME = "WebGapAssignActionObject" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00266.py -- OUTPUT") + bpy.ops.wm.read_factory_settings(use_empty=True) + obj = bpy.data.objects.new(OBJECT_NAME, None) + bpy.context.scene.collection.objects.link(obj) + for frame, x in ((1, 0.0), (5, 2.0)): + obj.location.x = x + obj.keyframe_insert(data_path="location", index=0, frame=frame) + action = obj.animation_data.action + action.name = ACTION_NAME + action.use_fake_user = True + bpy.context.scene.frame_start = 1 + bpy.context.scene.frame_end = 5 + bpy.context.scene.frame_set(1) + bpy.ops.wm.save_as_mainfile( + filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True + ) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00267.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00267.py new file mode 100644 index 00000000..cd66dfe3 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00267.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +LIBRARY_NAME = "WebGapBrowseContaining.blend" +OBJECT_NAME = "WebGapBrowseContainingObject" + + +def reset(): + bpy.ops.wm.read_factory_settings(use_empty=True) + + +def create_source(path): + reset() + mesh = bpy.data.meshes.new("WebGapBrowseContainingMesh") + mesh.from_pydata([(-1.0, 0.0, 0.0), (1.0, 0.0, 0.0), (0.0, 1.0, 0.0)], [], [(0, 1, 2)]) + obj = bpy.data.objects.new(OBJECT_NAME, mesh) + bpy.context.scene.collection.objects.link(obj) + bpy.ops.wm.save_as_mainfile(filepath=str(path), check_existing=False, compress=True) + + +def create_fixture(output): + source = output.with_name(LIBRARY_NAME) + create_source(source) + reset() + with bpy.data.libraries.load(str(source), link=True) as (data_from, data_to): + if OBJECT_NAME not in data_from.objects: + raise RuntimeError("browse-containing source object is missing") + data_to.objects = [OBJECT_NAME] + linked = data_to.objects[0] + if linked is None: + raise RuntimeError("browse-containing linked object is missing") + bpy.context.scene.collection.objects.link(linked) + bpy.ops.wm.save_as_mainfile(filepath=str(output), check_existing=False, compress=True) + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00267.py -- OUTPUT") + output = pathlib.Path(arguments[0]).resolve() + output.parent.mkdir(parents=True, exist_ok=True) + create_fixture(output) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00268.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00268.py new file mode 100644 index 00000000..5f14fad7 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00268.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +LIBRARY_NAME = "WebGapBundleInstall.blend" +OBJECT_NAME = "WebGapBundleInstallObject" + + +def reset(): + bpy.ops.wm.read_factory_settings(use_empty=True) + + +def create_source(path): + reset() + mesh = bpy.data.meshes.new("WebGapBundleInstallMesh") + mesh.from_pydata([(-1.0, 0.0, 0.0), (1.0, 0.0, 0.0), (0.0, 1.0, 0.0)], [], [(0, 1, 2)]) + obj = bpy.data.objects.new(OBJECT_NAME, mesh) + bpy.context.scene.collection.objects.link(obj) + bpy.ops.wm.save_as_mainfile(filepath=str(path), check_existing=False, compress=True) + + +def create_fixture(output): + source = output.with_name(LIBRARY_NAME) + create_source(source) + reset() + with bpy.data.libraries.load(str(source), link=True) as (data_from, data_to): + if OBJECT_NAME not in data_from.objects: + raise RuntimeError("bundle-install source object is missing") + data_to.objects = [OBJECT_NAME] + linked = data_to.objects[0] + if linked is None: + raise RuntimeError("bundle-install linked object is missing") + bpy.context.scene.collection.objects.link(linked) + bpy.ops.wm.save_as_mainfile(filepath=str(output), check_existing=False, compress=True) + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00268.py -- OUTPUT") + output = pathlib.Path(arguments[0]).resolve() + output.parent.mkdir(parents=True, exist_ok=True) + create_fixture(output) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00269.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00269.py new file mode 100644 index 00000000..96cd1359 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00269.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +LIBRARY_NAME = "WebGapCatalogDelete.blend" +OBJECT_NAME = "WebGapCatalogDeleteObject" + + +def reset(): + bpy.ops.wm.read_factory_settings(use_empty=True) + + +def create_fixture(output): + source = output.with_name(LIBRARY_NAME) + reset() + mesh = bpy.data.meshes.new("WebGapCatalogDeleteMesh") + mesh.from_pydata([(-1.0, 0.0, 0.0), (1.0, 0.0, 0.0), (0.0, 1.0, 0.0)], [], [(0, 1, 2)]) + obj = bpy.data.objects.new(OBJECT_NAME, mesh) + bpy.context.scene.collection.objects.link(obj) + bpy.ops.wm.save_as_mainfile(filepath=str(source), check_existing=False, compress=True) + reset() + with bpy.data.libraries.load(str(source), link=True) as (data_from, data_to): + if OBJECT_NAME not in data_from.objects: + raise RuntimeError("catalog-delete source object is missing") + data_to.objects = [OBJECT_NAME] + linked = data_to.objects[0] + if linked is None: + raise RuntimeError("catalog-delete linked object is missing") + bpy.context.scene.collection.objects.link(linked) + bpy.ops.wm.save_as_mainfile(filepath=str(output), check_existing=False, compress=True) + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00269.py -- OUTPUT") + output = pathlib.Path(arguments[0]).resolve() + output.parent.mkdir(parents=True, exist_ok=True) + create_fixture(output) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00270.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00270.py new file mode 100644 index 00000000..aa939c86 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00270.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +LIBRARY_NAME = "WebGapCatalogNew.blend" +OBJECT_NAME = "WebGapCatalogNewObject" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00270.py -- OUTPUT") + output = pathlib.Path(arguments[0]).resolve() + source = output.with_name(LIBRARY_NAME) + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapCatalogNewMesh") + mesh.from_pydata([(-1.0, 0.0, 0.0), (1.0, 0.0, 0.0), (0.0, 1.0, 0.0)], [], [(0, 1, 2)]) + obj = bpy.data.objects.new(OBJECT_NAME, mesh) + bpy.context.scene.collection.objects.link(obj) + bpy.ops.wm.save_as_mainfile(filepath=str(source), check_existing=False, compress=True) + bpy.ops.wm.read_factory_settings(use_empty=True) + with bpy.data.libraries.load(str(source), link=True) as (data_from, data_to): + if OBJECT_NAME not in data_from.objects: + raise RuntimeError("catalog-new source object is missing") + data_to.objects = [OBJECT_NAME] + linked = data_to.objects[0] + if linked is None: + raise RuntimeError("catalog-new linked object is missing") + bpy.context.scene.collection.objects.link(linked) + bpy.ops.wm.save_as_mainfile(filepath=str(output), check_existing=False, compress=True) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00271.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00271.py new file mode 100644 index 00000000..dd0e2da0 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00271.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python3 +import pathlib, sys, bpy + +LIBRARY_NAME = "WebGapCatalogRedo.blend" +OBJECT_NAME = "WebGapCatalogRedoObject" + +def main(): + args = sys.argv[sys.argv.index("--") + 1:] + if len(args) != 1: raise SystemExit("usage") + output = pathlib.Path(args[0]).resolve(); source = output.with_name(LIBRARY_NAME) + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapCatalogRedoMesh"); mesh.from_pydata([(-1,0,0),(1,0,0),(0,1,0)], [], [(0,1,2)]) + obj = bpy.data.objects.new(OBJECT_NAME, mesh); bpy.context.scene.collection.objects.link(obj) + bpy.ops.wm.save_as_mainfile(filepath=str(source), check_existing=False, compress=True) + bpy.ops.wm.read_factory_settings(use_empty=True) + with bpy.data.libraries.load(str(source), link=True) as (data_from, data_to): data_to.objects = [OBJECT_NAME] + bpy.context.scene.collection.objects.link(data_to.objects[0]) + bpy.ops.wm.save_as_mainfile(filepath=str(output), check_existing=False, compress=True) + +if __name__ == "__main__": main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00272.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00272.py new file mode 100644 index 00000000..7c61c0d1 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00272.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python3 +import pathlib, sys, bpy +LIBRARY_NAME="WebGapCatalogUndo.blend"; OBJECT_NAME="WebGapCatalogUndoObject" +def main(): + args=sys.argv[sys.argv.index("--")+1:] + if len(args)!=1: raise SystemExit("usage") + output=pathlib.Path(args[0]).resolve(); source=output.with_name(LIBRARY_NAME); bpy.ops.wm.read_factory_settings(use_empty=True) + mesh=bpy.data.meshes.new("WebGapCatalogUndoMesh"); mesh.from_pydata([(-1,0,0),(1,0,0),(0,1,0)],[],[(0,1,2)]); obj=bpy.data.objects.new(OBJECT_NAME,mesh); bpy.context.scene.collection.objects.link(obj); bpy.ops.wm.save_as_mainfile(filepath=str(source),check_existing=False,compress=True); bpy.ops.wm.read_factory_settings(use_empty=True) + with bpy.data.libraries.load(str(source),link=True) as (data_from,data_to): data_to.objects=[OBJECT_NAME] + bpy.context.scene.collection.objects.link(data_to.objects[0]); bpy.ops.wm.save_as_mainfile(filepath=str(output),check_existing=False,compress=True) +if __name__=="__main__": main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00273.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00273.py new file mode 100644 index 00000000..a2ac9168 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00273.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python3 +import pathlib, sys, bpy +LIBRARY_NAME="WebGapCatalogUndoPush.blend"; OBJECT_NAME="WebGapCatalogUndoPushObject" +def main(): + args=sys.argv[sys.argv.index("--")+1:] + if len(args)!=1: raise SystemExit("usage") + output=pathlib.Path(args[0]).resolve(); source=output.with_name(LIBRARY_NAME); bpy.ops.wm.read_factory_settings(use_empty=True) + mesh=bpy.data.meshes.new("WebGapCatalogUndoPushMesh"); mesh.from_pydata([(-1,0,0),(1,0,0),(0,1,0)],[],[(0,1,2)]); obj=bpy.data.objects.new(OBJECT_NAME,mesh); bpy.context.scene.collection.objects.link(obj); bpy.ops.wm.save_as_mainfile(filepath=str(source),check_existing=False,compress=True); bpy.ops.wm.read_factory_settings(use_empty=True) + with bpy.data.libraries.load(str(source),link=True) as (data_from,data_to): data_to.objects=[OBJECT_NAME] + bpy.context.scene.collection.objects.link(data_to.objects[0]); bpy.ops.wm.save_as_mainfile(filepath=str(output),check_existing=False,compress=True) +if __name__=="__main__": main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00274.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00274.py new file mode 100644 index 00000000..603c666b --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00274.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +LIBRARY_NAME = "WebGapCatalogsSave.blend" +OBJECT_NAME = "WebGapCatalogsSaveObject" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00274.py -- OUTPUT") + output = pathlib.Path(arguments[0]).resolve() + source = output.with_name(LIBRARY_NAME) + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapCatalogsSaveMesh") + mesh.from_pydata([(-1.0, 0.0, 0.0), (1.0, 0.0, 0.0), (0.0, 1.0, 0.0)], [], [(0, 1, 2)]) + obj = bpy.data.objects.new(OBJECT_NAME, mesh) + bpy.context.scene.collection.objects.link(obj) + bpy.ops.wm.save_as_mainfile(filepath=str(source), check_existing=False, compress=True) + bpy.ops.wm.read_factory_settings(use_empty=True) + with bpy.data.libraries.load(str(source), link=True) as (data_from, data_to): + if OBJECT_NAME not in data_from.objects: + raise RuntimeError("catalogs-save source object is missing") + data_to.objects = [OBJECT_NAME] + linked = data_to.objects[0] + if linked is None: + raise RuntimeError("catalogs-save linked object is missing") + bpy.context.scene.collection.objects.link(linked) + bpy.ops.wm.save_as_mainfile(filepath=str(output), check_existing=False, compress=True) + + +if __name__ == "__main__": + main() diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/modifier_gap_fixture.py b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/modifier_gap_fixture.py new file mode 100644 index 00000000..9504c1d7 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/modifier_gap_fixture.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python3 +import pathlib + +import bpy + + +def create_mesh_object(name: str): + mesh = bpy.data.meshes.new(name + "Mesh") + mesh.from_pydata( + [(-1, -1, -1), (1, -1, -1), (1, 1, -1), (-1, 1, -1), + (-1, -1, 1), (1, -1, 1), (1, 1, 1), (-1, 1, 1)], + [], + [(0, 1, 2, 3), (4, 7, 6, 5), (0, 4, 5, 1), + (1, 5, 6, 2), (2, 6, 7, 3), (4, 0, 3, 7)], + ) + mesh.update() + obj = bpy.data.objects.new(name, mesh) + bpy.context.collection.objects.link(obj) + return obj + + +def generate(output: pathlib.Path, modifier_type: str, stem: str) -> None: + bpy.ops.wm.read_factory_settings(use_empty=True) + obj = create_mesh_object(stem + "Object") + modifier = obj.modifiers.new(name=stem, type=modifier_type) + modifier.show_viewport = True + modifier.show_render = True + modifier.show_in_editmode = False + modifier.show_on_cage = False + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.ops.wm.save_as_mainfile(filepath=str(output.resolve()), check_existing=False, compress=True) diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/web/app/public/vendor/blender/web_engine.js b/tests/golden/corrective/C0-002/staged/source-snapshot/files/web/app/public/vendor/blender/web_engine.js new file mode 100644 index 00000000..144e0b10 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/web/app/public/vendor/blender/web_engine.js @@ -0,0 +1,16 @@ + +var Module = (() => { + var _scriptName = import.meta.url; + + return ( +async function(moduleArg = {}) { + var moduleRtn; + +var Module=moduleArg;var readyPromiseResolve,readyPromiseReject;var readyPromise=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject});["_malloc","_free","_web_engine_create","_web_engine_destroy","_web_engine_get_memory_stats","_web_engine_get_live_handles","_web_engine_get_allocated_bytes","_web_engine_open_blend","_web_engine_apply_command","_web_engine_append_library_object","_web_engine_undo","_web_engine_redo","_web_engine_get_scene_snapshot","_web_engine_get_scene_metadata","_web_engine_get_scene_geometry","_web_engine_get_scene_delta","_web_engine_get_packed_asset","_web_engine_evaluate_depsgraph","_web_engine_save_blend","_web_engine_free_buffer","_web_engine_last_error_code","_web_engine_last_error_message","_web_engine_decimate_apply","_memory","___indirect_function_table","___set_stack_limits","onRuntimeInitialized"].forEach(prop=>{if(!Object.getOwnPropertyDescriptor(readyPromise,prop)){Object.defineProperty(readyPromise,prop,{get:()=>abort("You are getting "+prop+" on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js"),set:()=>abort("You are setting "+prop+" on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")})}});var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string"&&process.type!="renderer";var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){const{createRequire}=await import("module");let dirname=import.meta.url;if(dirname.startsWith("data:")){dirname="/"}var require=createRequire(dirname)}var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){if(typeof process=="undefined"||!process.release||process.release.name!=="node")throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");var nodeVersion=process.versions.node;var numericVersion=nodeVersion.split(".").slice(0,3);numericVersion=numericVersion[0]*1e4+numericVersion[1]*100+numericVersion[2].split("-")[0]*1;if(numericVersion<16e4){throw new Error("This emscripten-generated code requires node v16.0.0 (detected v"+nodeVersion+")")}var fs=require("fs");var nodePath=require("path");if(!import.meta.url.startsWith("data:")){scriptDirectory=nodePath.dirname(require("url").fileURLToPath(import.meta.url))+"/"}readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);var ret=fs.readFileSync(filename);assert(ret.buffer);return ret};readAsync=(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);return new Promise((resolve,reject)=>{fs.readFile(filename,binary?undefined:"utf8",(err,data)=>{if(err)reject(err);else resolve(binary?data.buffer:data)})})};if(!Module["thisProgram"]&&process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_SHELL){if(typeof process=="object"&&typeof require==="function"||typeof window=="object"||typeof importScripts=="function")throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)")}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptName){scriptDirectory=_scriptName}if(scriptDirectory.startsWith("blob:")){scriptDirectory=""}else{scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}if(!(typeof window=="object"||typeof importScripts=="function"))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=url=>{assert(!isFileURI(url),"readAsync does not work with file:// URLs");return fetch(url,{credentials:"same-origin"}).then(response=>{if(response.ok){return response.arrayBuffer()}return Promise.reject(new Error(response.status+" : "+response.url))})}}}else{throw new Error("environment detection error")}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.error.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;checkIncomingModuleAPI();if(Module["arguments"])arguments_=Module["arguments"];legacyModuleProp("arguments","arguments_");if(Module["thisProgram"])thisProgram=Module["thisProgram"];legacyModuleProp("thisProgram","thisProgram");assert(typeof Module["memoryInitializerPrefixURL"]=="undefined","Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["pthreadMainPrefixURL"]=="undefined","Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["cdInitializerPrefixURL"]=="undefined","Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["filePackagePrefixURL"]=="undefined","Module.filePackagePrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["read"]=="undefined","Module.read option was removed");assert(typeof Module["readAsync"]=="undefined","Module.readAsync option was removed (modify readAsync in JS)");assert(typeof Module["readBinary"]=="undefined","Module.readBinary option was removed (modify readBinary in JS)");assert(typeof Module["setWindowTitle"]=="undefined","Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)");assert(typeof Module["TOTAL_MEMORY"]=="undefined","Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY");legacyModuleProp("asm","wasmExports");legacyModuleProp("readAsync","readAsync");legacyModuleProp("readBinary","readBinary");legacyModuleProp("setWindowTitle","setWindowTitle");assert(!ENVIRONMENT_IS_SHELL,"shell environment detected but not enabled at build time. Add `shell` to `-sENVIRONMENT` to enable.");var wasmBinary=Module["wasmBinary"];legacyModuleProp("wasmBinary","wasmBinary");if(typeof WebAssembly!="object"){err("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed"+(text?": "+text:""))}}var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b)}assert(!Module["STACK_SIZE"],"STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time");assert(typeof Int32Array!="undefined"&&typeof Float64Array!=="undefined"&&Int32Array.prototype.subarray!=undefined&&Int32Array.prototype.set!=undefined,"JS engine does not provide full typed array support");assert(!Module["wasmMemory"],"Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally");assert(!Module["INITIAL_MEMORY"],"Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically");function writeStackCookie(){var max=_emscripten_stack_get_end();assert((max&3)==0);if(max==0){max+=4}HEAPU32[max>>2]=34821223;checkInt32(34821223);HEAPU32[max+4>>2]=2310721022;checkInt32(2310721022);HEAPU32[0>>2]=1668509029;checkInt32(1668509029)}function checkStackCookie(){if(ABORT)return;var max=_emscripten_stack_get_end();if(max==0){max+=4}var cookie1=HEAPU32[max>>2];var cookie2=HEAPU32[max+4>>2];if(cookie1!=34821223||cookie2!=2310721022){abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`)}if(HEAPU32[0>>2]!=1668509029){abort("Runtime error: The application has corrupted its heap memory area (address zero)!")}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){var preRuns=Module["preRun"];if(preRuns){if(typeof preRuns=="function")preRuns=[preRuns];preRuns.forEach(addOnPreRun)}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){assert(!runtimeInitialized);runtimeInitialized=true;checkStackCookie();setStackLimits();if(!Module["noFSInit"]&&!FS.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function postRun(){checkStackCookie();var postRuns=Module["postRun"];if(postRuns){if(typeof postRuns=="function")postRuns=[postRuns];postRuns.forEach(addOnPostRun)}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}assert(Math.imul,"This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill");assert(Math.fround,"This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill");assert(Math.clz32,"This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill");assert(Math.trunc,"This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill");var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;var runDependencyTracking={};function getUniqueRunDependency(id){var orig=id;while(1){if(!runDependencyTracking[id])return id;id=orig+Math.random()}}function addRunDependency(id){runDependencies++;Module["monitorRunDependencies"]?.(runDependencies);if(id){assert(!runDependencyTracking[id]);runDependencyTracking[id]=1;if(runDependencyWatcher===null&&typeof setInterval!="undefined"){runDependencyWatcher=setInterval(()=>{if(ABORT){clearInterval(runDependencyWatcher);runDependencyWatcher=null;return}var shown=false;for(var dep in runDependencyTracking){if(!shown){shown=true;err("still waiting on run dependencies:")}err(`dependency: ${dep}`)}if(shown){err("(end of list)")}},1e4)}}else{err("warning: run dependency added without ID")}}function removeRunDependency(id){runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(id){assert(runDependencyTracking[id]);delete runDependencyTracking[id]}else{err("warning: run dependency removed without ID")}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";var isDataURI=filename=>filename.startsWith(dataURIPrefix);var isFileURI=filename=>filename.startsWith("file://");function createExportWrapper(name,nargs){return(...args)=>{assert(runtimeInitialized,`native function \`${name}\` called before runtime initialization`);var f=wasmExports[name];assert(f,`exported native function \`${name}\` not found`);assert(args.length<=nargs,`native function \`${name}\` called with ${args.length} args but expects ${nargs}`);return f(...args)}}function findWasmBinary(){if(Module["locateFile"]){var f="web_engine.wasm";if(!isDataURI(f)){return locateFile(f)}return f}return new URL("web_engine.wasm",import.meta.url).href}var wasmBinaryFile;function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}function getBinaryPromise(binaryFile){if(!wasmBinary){return readAsync(binaryFile).then(response=>new Uint8Array(response),()=>getBinarySync(binaryFile))}return Promise.resolve().then(()=>getBinarySync(binaryFile))}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(binary=>WebAssembly.instantiate(binary,imports)).then(receiver,reason=>{err(`failed to asynchronously prepare wasm: ${reason}`);if(isFileURI(wasmBinaryFile)){err(`warning: Loading from a file URI (${wasmBinaryFile}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`)}abort(reason)})}function instantiateAsync(binary,binaryFile,imports,callback){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(binaryFile)&&!ENVIRONMENT_IS_NODE&&typeof fetch=="function"){return fetch(binaryFile,{credentials:"same-origin"}).then(response=>{var result=WebAssembly.instantiateStreaming(response,imports);return result.then(callback,function(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(binaryFile,imports,callback)})})}return instantiateArrayBuffer(binaryFile,imports,callback)}function getWasmImports(){return{env:wasmImports,wasi_snapshot_preview1:wasmImports}}function createWasm(){var info=getWasmImports();function receiveInstance(instance,module){wasmExports=instance.exports;wasmMemory=wasmExports["memory"];assert(wasmMemory,"memory not found in wasm exports");updateMemoryViews();wasmTable=wasmExports["__indirect_function_table"];assert(wasmTable,"table not found in wasm exports");addOnInit(wasmExports["__wasm_call_ctors"]);removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");var trueModule=Module;function receiveInstantiationResult(result){assert(Module===trueModule,"the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?");trueModule=null;receiveInstance(result["instance"])}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err(`Module.instantiateWasm callback failed with error: ${e}`);readyPromiseReject(e)}}wasmBinaryFile??=findWasmBinary();instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult).catch(readyPromiseReject);return{}}var tempDouble;var tempI64;(()=>{var h16=new Int16Array(1);var h8=new Int8Array(h16.buffer);h16[0]=25459;if(h8[0]!==115||h8[1]!==99)throw"Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)"})();if(Module["ENVIRONMENT"]){throw new Error("Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)")}function legacyModuleProp(prop,newName,incoming=true){if(!Object.getOwnPropertyDescriptor(Module,prop)){Object.defineProperty(Module,prop,{configurable:true,get(){let extra=incoming?" (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)":"";abort(`\`Module.${prop}\` has been replaced by \`${newName}\``+extra)}})}}function ignoredModuleProp(prop){if(Object.getOwnPropertyDescriptor(Module,prop)){abort(`\`Module.${prop}\` was supplied but \`${prop}\` not included in INCOMING_MODULE_JS_API`)}}function isExportedByForceFilesystem(name){return name==="FS_createPath"||name==="FS_createDataFile"||name==="FS_createPreloadedFile"||name==="FS_unlink"||name==="addRunDependency"||name==="FS_createLazyFile"||name==="FS_createDevice"||name==="removeRunDependency"}function hookGlobalSymbolAccess(sym,func){if(typeof globalThis!="undefined"&&!Object.getOwnPropertyDescriptor(globalThis,sym)){Object.defineProperty(globalThis,sym,{configurable:true,get(){func();return undefined}})}}function missingGlobal(sym,msg){hookGlobalSymbolAccess(sym,()=>{warnOnce(`\`${sym}\` is not longer defined by emscripten. ${msg}`)})}missingGlobal("buffer","Please use HEAP8.buffer or wasmMemory.buffer");missingGlobal("asm","Please use wasmExports instead");function missingLibrarySymbol(sym){hookGlobalSymbolAccess(sym,()=>{var msg=`\`${sym}\` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line`;var librarySymbol=sym;if(!librarySymbol.startsWith("_")){librarySymbol="$"+sym}msg+=` (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='${librarySymbol}')`;if(isExportedByForceFilesystem(sym)){msg+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"}warnOnce(msg)});unexportedRuntimeSymbol(sym)}function unexportedRuntimeSymbol(sym){if(!Object.getOwnPropertyDescriptor(Module,sym)){Object.defineProperty(Module,sym,{configurable:true,get(){var msg=`'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`;if(isExportedByForceFilesystem(sym)){msg+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"}abort(msg)}})}}var MAX_UINT8=2**8-1;var MAX_UINT16=2**16-1;var MAX_UINT32=2**32-1;var MAX_UINT53=2**53-1;var MAX_UINT64=2**64-1;var MIN_INT8=-(2**(8-1));var MIN_INT16=-(2**(16-1));var MIN_INT32=-(2**(32-1));var MIN_INT53=-(2**(53-1));var MIN_INT64=-(2**(64-1));function checkInt(value,bits,min,max){assert(Number.isInteger(Number(value)),`attempt to write non-integer (${value}) into integer heap`);assert(value<=max,`value (${value}) too large to write as ${bits}-bit value`);assert(value>=min,`value (${value}) too small to write as ${bits}-bit value`)}var checkInt8=value=>checkInt(value,8,MIN_INT8,MAX_UINT8);var checkInt16=value=>checkInt(value,16,MIN_INT16,MAX_UINT16);var checkInt32=value=>checkInt(value,32,MIN_INT32,MAX_UINT32);var checkInt64=value=>checkInt(value,64,MIN_INT64,MAX_UINT64);function dbg(...args){console.warn(...args)}function ExitStatus(status){this.name="ExitStatus";this.message=`Program terminated with exit(${status})`;this.status=status}var callRuntimeCallbacks=callbacks=>{callbacks.forEach(f=>f(Module))};var noExitRuntime=Module["noExitRuntime"]||true;var ptrToString=ptr=>{assert(typeof ptr==="number");ptr>>>=0;return"0x"+ptr.toString(16).padStart(8,"0")};var setStackLimits=()=>{var stackLow=_emscripten_stack_get_base();var stackHigh=_emscripten_stack_get_end();___set_stack_limits(stackLow,stackHigh)};var stackRestore=val=>__emscripten_stack_restore(val);var stackSave=()=>_emscripten_stack_get_current();var warnOnce=text=>{warnOnce.shown||={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;if(ENVIRONMENT_IS_NODE)text="warning: "+text;err(text)}};var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder:undefined;var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead=NaN)=>{var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var UTF8ToString=(ptr,maxBytesToRead)=>{assert(typeof ptr=="number",`UTF8ToString expects a number (got ${typeof ptr})`);return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""};var ___assert_fail=(condition,filename,line,func)=>{abort(`Assertion failed: ${UTF8ToString(condition)}, at: `+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])};var wasmTableMirror=[];var wasmTable;var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}assert(wasmTable.get(funcPtr)==func,"JavaScript-side Wasm function table mirror is out of date!");return func};var ___call_sighandler=(fp,sig)=>getWasmTableEntry(fp)(sig);var exceptionCaught=[];var uncaughtExceptionCount=0;var ___cxa_begin_catch=ptr=>{var info=new ExceptionInfo(ptr);if(!info.get_caught()){info.set_caught(true);uncaughtExceptionCount--}info.set_rethrown(false);exceptionCaught.push(info);___cxa_increment_exception_refcount(ptr);return ___cxa_get_exception_ptr(ptr)};var exceptionLast=0;var ___cxa_end_catch=()=>{_setThrew(0,0);assert(exceptionCaught.length>0);var info=exceptionCaught.pop();___cxa_decrement_exception_refcount(info.excPtr);exceptionLast=0};class ExceptionInfo{constructor(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24}set_type(type){HEAPU32[this.ptr+4>>2]=type}get_type(){return HEAPU32[this.ptr+4>>2]}set_destructor(destructor){HEAPU32[this.ptr+8>>2]=destructor}get_destructor(){return HEAPU32[this.ptr+8>>2]}set_caught(caught){caught=caught?1:0;HEAP8[this.ptr+12]=caught;checkInt8(caught)}get_caught(){return HEAP8[this.ptr+12]!=0}set_rethrown(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13]=rethrown;checkInt8(rethrown)}get_rethrown(){return HEAP8[this.ptr+13]!=0}init(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)}set_adjusted_ptr(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr}get_adjusted_ptr(){return HEAPU32[this.ptr+16>>2]}}var ___resumeException=ptr=>{if(!exceptionLast){exceptionLast=ptr}assert(false,"Exception thrown, but exception catching is not enabled. Compile with -sNO_DISABLE_EXCEPTION_CATCHING or -sEXCEPTION_CATCHING_ALLOWED=[..] to catch.")};var setTempRet0=val=>__emscripten_tempret_set(val);var findMatchingCatch=args=>{var thrown=exceptionLast;if(!thrown){setTempRet0(0);return 0}var info=new ExceptionInfo(thrown);info.set_adjusted_ptr(thrown);var thrownType=info.get_type();if(!thrownType){setTempRet0(0);return thrown}for(var caughtType of args){if(caughtType===0||caughtType===thrownType){break}var adjusted_ptr_addr=info.ptr+16;if(___cxa_can_catch(caughtType,thrownType,adjusted_ptr_addr)){setTempRet0(caughtType);return thrown}}setTempRet0(thrownType);return thrown};var ___cxa_find_matching_catch_2=()=>findMatchingCatch([]);var ___cxa_find_matching_catch_3=arg0=>findMatchingCatch([arg0]);var ___cxa_rethrow=()=>{var info=exceptionCaught.pop();if(!info){abort("no exception to throw")}var ptr=info.excPtr;if(!info.get_rethrown()){exceptionCaught.push(info);info.set_rethrown(true);info.set_caught(false);uncaughtExceptionCount++}exceptionLast=ptr;assert(false,"Exception thrown, but exception catching is not enabled. Compile with -sNO_DISABLE_EXCEPTION_CATCHING or -sEXCEPTION_CATCHING_ALLOWED=[..] to catch.")};var ___cxa_throw=(ptr,type,destructor)=>{var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;assert(false,"Exception thrown, but exception catching is not enabled. Compile with -sNO_DISABLE_EXCEPTION_CATCHING or -sEXCEPTION_CATCHING_ALLOWED=[..] to catch.")};var ___handle_stack_overflow=requested=>{var base=_emscripten_stack_get_base();var end=_emscripten_stack_get_end();abort(`stack overflow (Attempt to set SP to ${ptrToString(requested)}`+`, with stack limits [${ptrToString(end)} - ${ptrToString(base)}`+"]). If you require more stack space build with -sSTACK_SIZE=")};var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:path=>{if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},join:(...paths)=>PATH.normalize(paths.join("/")),join2:(l,r)=>PATH.normalize(l+"/"+r)};var initRandomFill=()=>{if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){return view=>crypto.getRandomValues(view)}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");var randomFillSync=crypto_module["randomFillSync"];if(randomFillSync){return view=>crypto_module["randomFillSync"](view)}var randomBytes=crypto_module["randomBytes"];return view=>(view.set(randomBytes(view.byteLength)),view)}catch(e){}}abort("no cryptographic support found for randomDevice. consider polyfilling it if you want to use something insecure like Math.random(), e.g. put this in a --pre-js: var crypto = { getRandomValues: (array) => { for (var i = 0; i < array.length; i++) array[i] = (Math.random()*256)|0 } };")};var randomFill=view=>(randomFill=initRandomFill())(view);var PATH_FS={resolve:(...args)=>{var resolvedPath="",resolvedAbsolute=false;for(var i=args.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?args[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{assert(typeof str==="string",`stringToUTF8Array expects a string (got ${typeof str})`);if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;if(u>1114111)warnOnce("Invalid Unicode code point "+ptrToString(u)+" encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).");heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx};function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var FS_stdin_getChar=()=>{if(!FS_stdin_getChar_buffer.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc(BUFSIZE);var bytesRead=0;var fd=process.stdin.fd;try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE)}catch(e){if(e.toString().includes("EOF"))bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else{}if(!result){return null}FS_stdin_getChar_buffer=intArrayFromString(result,true)}return FS_stdin_getChar_buffer.shift()};var TTY={ttys:[],init(){},shutdown(){},register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close(stream){stream.tty.ops.fsync(stream.tty)},fsync(stream){stream.tty.ops.fsync(stream.tty)},read(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i0){out(UTF8ArrayToString(tty.output));tty.output=[]}},ioctl_tcgets(tty){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(tty,optional_actions,data){return 0},ioctl_tiocgwinsz(tty){return[24,80]}},default_tty1_ops:{put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output));tty.output=[]}}}};var zeroMemory=(address,size)=>{HEAPU8.fill(0,address,address+size)};var alignMemory=(size,alignment)=>{assert(alignment,"alignment argument is required");return Math.ceil(size/alignment)*alignment};var mmapAlloc=size=>{size=alignMemory(size,65536);var ptr=_emscripten_builtin_memalign(65536,size);if(ptr)zeroMemory(ptr,size);return ptr};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}MEMFS.ops_table||={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}};var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){throw FS.genericErrors[44]},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp},unlink(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir(node){var entries=[".",".."];for(var key of Object.keys(node.contents)){entries.push(key)}return entries},symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);assert(size>=0);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length{var dep=!noRunDep?getUniqueRunDependency(`al ${url}`):"";readAsync(url).then(arrayBuffer=>{assert(arrayBuffer,`Loading data file "${url}" failed (no arrayBuffer).`);onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},err=>{if(onerror){onerror()}else{throw`Loading data file "${url}" failed.`}});if(dep)addRunDependency(dep)};var FS_createDataFile=(parent,name,fileData,canRead,canWrite,canOwn)=>{FS.createDataFile(parent,name,fileData,canRead,canWrite,canOwn)};var preloadPlugins=Module["preloadPlugins"]||[];var FS_handledByPreloadPlugin=(byteArray,fullname,finish,onerror)=>{if(typeof Browser!="undefined")Browser.init();var handled=false;preloadPlugins.forEach(plugin=>{if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,onerror);handled=true}});return handled};var FS_createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);function processData(byteArray){function finish(byteArray){preFinish?.();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}onload?.();removeRunDependency(dep)}if(FS_handledByPreloadPlugin(byteArray,fullname,finish,()=>{onerror?.();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url,processData,onerror)}else{processData(url)}};var FS_modeStringToFlags=str=>{var flagModes={r:0,"r+":2,w:512|64|1,"w+":512|64|2,a:1024|64|1,"a+":1024|64|2};var flags=flagModes[str];if(typeof flags=="undefined"){throw new Error(`Unknown file open mode: ${str}`)}return flags};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var strError=errno=>UTF8ToString(_strerror(errno));var ERRNO_CODES={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:class extends Error{constructor(errno){super(runtimeInitialized?strError(errno):"");this.name="ErrnoError";this.errno=errno;for(var key in ERRNO_CODES){if(ERRNO_CODES[key]===errno){this.code=key;break}}}},genericErrors:{},filesystems:null,syncFSRequests:0,readFiles:{},FSStream:class{constructor(){this.shared={}}get object(){return this.node}set object(val){this.node=val}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(val){this.shared.flags=val}get position(){return this.shared.position}set position(val){this.shared.position=val}},FSNode:class{constructor(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev;this.readMode=292|73;this.writeMode=146}get read(){return(this.mode&this.readMode)===this.readMode}set read(val){val?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(val){val?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return FS.isDir(this.mode)}get isDevice(){return FS.isChrdev(this.mode)}},lookupPath(path,opts={}){path=PATH_FS.resolve(path);if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};opts=Object.assign(defaults,opts);if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?`${mount}/${path}`:mount+path}path=path?`${node.name}/${path}`:node.name;node=node.parent}},hashName(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode(parent,name,mode,rdev){assert(typeof parent=="object");var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode(node){FS.hashRemoveNode(node)},isRoot(node){return node===node.parent},isMountpoint(node){return!!node.mounted},isFile(mode){return(mode&61440)===32768},isDir(mode){return(mode&61440)===16384},isLink(mode){return(mode&61440)===40960},isChrdev(mode){return(mode&61440)===8192},isBlkdev(mode){return(mode&61440)===24576},isFIFO(mode){return(mode&61440)===4096},isSocket(mode){return(mode&49152)===49152},flagsToPermissionString(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions(node,perms){if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup(dir){if(!FS.isDir(dir.mode))return 54;var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd(){for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStreamChecked(fd){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}return stream},getStream:fd=>FS.streams[fd],createStream(stream,fd=-1){assert(fd>=-1);stream=Object.assign(new FS.FSStream,stream);if(fd==-1){fd=FS.nextfd()}stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream(fd){FS.streams[fd]=null},dupStream(origStream,fd=-1){var stream=FS.createStream(origStream,fd);stream.stream_ops?.dup?.(stream);return stream},chrdev_stream_ops:{open(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;stream.stream_ops.open?.(stream)},llseek(){throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push(...m.mounts)}return mounts},syncfs(populate,callback){if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`)}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){assert(FS.syncFSRequests>0);FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount(type,opts,mountpoint){if(typeof type=="string"){throw type}var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type,opts,mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(hash=>{var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);assert(idx!==-1);node.mount.mounts.splice(idx,1)},lookup(parent,name){return parent.node_ops.lookup(parent,name)},mknod(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split("/");var d="";for(var i=0;i=0);if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write(stream,buffer,offset,length,position,canOwn){assert(offset>=0);if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},allocate(stream,offset,length){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(offset<0||length<=0){throw new FS.ErrnoError(28)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(43)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(138)}stream.stream_ops.allocate(stream,offset,length)},mmap(stream,length,position,prot,flags){if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}if(!length){throw new FS.ErrnoError(28)}return stream.stream_ops.mmap(stream,length,position,prot,flags)},msync(stream,buffer,offset,length,mmapFlags){assert(offset>=0);if(!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},ioctl(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile(path,opts={}){opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error(`Invalid encoding type "${opts.encoding}"`)}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile(path,data,opts={}){opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:()=>FS.currentPath,chdir(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomLeft=randomFill(randomBuffer).byteLength}return randomBuffer[--randomLeft]};FS.createDevice("/dev","random",randomByte);FS.createDevice("/dev","urandom",randomByte);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount(){var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup(parent,name){var fd=+name;var stream=FS.getStreamChecked(fd);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams(input,output,error){if(input){FS.createDevice("/dev","stdin",input)}else{FS.symlink("/dev/tty","/dev/stdin")}if(output){FS.createDevice("/dev","stdout",null,output)}else{FS.symlink("/dev/tty","/dev/stdout")}if(error){FS.createDevice("/dev","stderr",null,error)}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1);assert(stdin.fd===0,`invalid handle for stdin (${stdin.fd})`);assert(stdout.fd===1,`invalid handle for stdout (${stdout.fd})`);assert(stderr.fd===2,`invalid handle for stderr (${stderr.fd})`)},staticInit(){[44].forEach(code=>{FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=""});FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={MEMFS}},init(input,output,error){assert(!FS.initialized,"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)");FS.initialized=true;input??=Module["stdin"];output??=Module["stdout"];error??=Module["stderr"];FS.createStandardStreams(input,output,error)},quit(){FS.initialized=false;_fflush(0);for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]}setDataGetter(getter){this.getter=getter}cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText||"",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true}get length(){if(!this.lengthKnown){this.cacheLength()}return this._length}get chunkSize(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}if(typeof XMLHttpRequest!="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(key=>{var fn=node.stream_ops[key];stream_ops[key]=(...args)=>{FS.forceLoadFile(node);return fn(...args)}});function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);assert(size>=0);if(contents.slice){for(var i=0;i{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,HEAP8,ptr,length,position);return{ptr,allocated:true}};node.stream_ops=stream_ops;return node},absolutePath(){abort("FS.absolutePath has been removed; use PATH_FS.resolve instead")},createFolder(){abort("FS.createFolder has been removed; use FS.mkdir instead")},createLink(){abort("FS.createLink has been removed; use FS.symlink instead")},joinPath(){abort("FS.joinPath has been removed; use PATH.join instead")},mmapAlloc(){abort("FS.mmapAlloc has been replaced by the top level function mmapAlloc")},standardizePath(){abort("FS.standardizePath has been removed; use PATH.normalize instead")}};var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return PATH.join2(dir,path)},doStat(func,path,buf){var stat=func(path);HEAP32[buf>>2]=stat.dev;checkInt32(stat.dev);HEAP32[buf+4>>2]=stat.mode;checkInt32(stat.mode);HEAPU32[buf+8>>2]=stat.nlink;checkInt32(stat.nlink);HEAP32[buf+12>>2]=stat.uid;checkInt32(stat.uid);HEAP32[buf+16>>2]=stat.gid;checkInt32(stat.gid);HEAP32[buf+20>>2]=stat.rdev;checkInt32(stat.rdev);tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+24>>2]=tempI64[0],HEAP32[buf+28>>2]=tempI64[1];checkInt64(stat.size);HEAP32[buf+32>>2]=4096;checkInt32(4096);HEAP32[buf+36>>2]=stat.blocks;checkInt32(stat.blocks);var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();tempI64=[Math.floor(atime/1e3)>>>0,(tempDouble=Math.floor(atime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];checkInt64(Math.floor(atime/1e3));HEAPU32[buf+48>>2]=atime%1e3*1e3*1e3;checkInt32(atime%1e3*1e3*1e3);tempI64=[Math.floor(mtime/1e3)>>>0,(tempDouble=Math.floor(mtime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+56>>2]=tempI64[0],HEAP32[buf+60>>2]=tempI64[1];checkInt64(Math.floor(mtime/1e3));HEAPU32[buf+64>>2]=mtime%1e3*1e3*1e3;checkInt32(mtime%1e3*1e3*1e3);tempI64=[Math.floor(ctime/1e3)>>>0,(tempDouble=Math.floor(ctime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+72>>2]=tempI64[0],HEAP32[buf+76>>2]=tempI64[1];checkInt64(Math.floor(ctime/1e3));HEAPU32[buf+80>>2]=ctime%1e3*1e3*1e3;checkInt32(ctime%1e3*1e3*1e3);tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+88>>2]=tempI64[0],HEAP32[buf+92>>2]=tempI64[1];checkInt64(stat.ino);return 0},doMsync(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(flags&2){return 0}var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},getStreamFromFD(fd){var stream=FS.getStreamChecked(fd);return stream},varargs:undefined,getStr(ptr){var ret=UTF8ToString(ptr);return ret}};function ___syscall_faccessat(dirfd,path,amode,flags){try{path=SYSCALLS.getStr(path);assert(flags===0||flags==512);path=SYSCALLS.calculateAt(dirfd,path);if(amode&~7){return-28}var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function syscallGetVarargI(){assert(SYSCALLS.varargs!=undefined);var ret=HEAP32[+SYSCALLS.varargs>>2];SYSCALLS.varargs+=4;return ret}var syscallGetVarargP=syscallGetVarargI;function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=syscallGetVarargI();if(arg<0){return-28}while(FS.streams[arg]){arg++}var newStream;newStream=FS.dupStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=syscallGetVarargI();stream.flags|=arg;return 0}case 12:{var arg=syscallGetVarargP();var offset=0;HEAP16[arg+offset>>1]=2;checkInt16(2);return 0}case 13:case 14:return 0}return-28}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_fstat64(fd,buf){try{var stream=SYSCALLS.getStreamFromFD(fd);return SYSCALLS.doStat(FS.stat,stream.path,buf)}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var stringToUTF8=(str,outPtr,maxBytesToWrite)=>{assert(typeof maxBytesToWrite=="number","stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!");return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)};function ___syscall_getdents64(fd,dirp,count){try{var stream=SYSCALLS.getStreamFromFD(fd);stream.getdents||=FS.readdir(stream.path);var struct_size=280;var pos=0;var off=FS.llseek(stream,0,1);var idx=Math.floor(off/struct_size);while(idx>>0,(tempDouble=id,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[dirp+pos>>2]=tempI64[0],HEAP32[dirp+pos+4>>2]=tempI64[1];checkInt64(id);tempI64=[(idx+1)*struct_size>>>0,(tempDouble=(idx+1)*struct_size,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[dirp+pos+8>>2]=tempI64[0],HEAP32[dirp+pos+12>>2]=tempI64[1];checkInt64((idx+1)*struct_size);HEAP16[dirp+pos+16>>1]=280;checkInt16(280);HEAP8[dirp+pos+18]=type;checkInt8(type);stringToUTF8(name,dirp+pos+19,256);pos+=struct_size;idx+=1}FS.llseek(stream,idx*struct_size,0);return pos}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:{if(!stream.tty)return-59;return 0}case 21505:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcgets){var termios=stream.tty.ops.ioctl_tcgets(stream);var argp=syscallGetVarargP();HEAP32[argp>>2]=termios.c_iflag||0;checkInt32(termios.c_iflag||0);HEAP32[argp+4>>2]=termios.c_oflag||0;checkInt32(termios.c_oflag||0);HEAP32[argp+8>>2]=termios.c_cflag||0;checkInt32(termios.c_cflag||0);HEAP32[argp+12>>2]=termios.c_lflag||0;checkInt32(termios.c_lflag||0);for(var i=0;i<32;i++){HEAP8[argp+i+17]=termios.c_cc[i]||0;checkInt8(termios.c_cc[i]||0)}return 0}return 0}case 21510:case 21511:case 21512:{if(!stream.tty)return-59;return 0}case 21506:case 21507:case 21508:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcsets){var argp=syscallGetVarargP();var c_iflag=HEAP32[argp>>2];var c_oflag=HEAP32[argp+4>>2];var c_cflag=HEAP32[argp+8>>2];var c_lflag=HEAP32[argp+12>>2];var c_cc=[];for(var i=0;i<32;i++){c_cc.push(HEAP8[argp+i+17])}return stream.tty.ops.ioctl_tcsets(stream.tty,op,{c_iflag,c_oflag,c_cflag,c_lflag,c_cc})}return 0}case 21519:{if(!stream.tty)return-59;var argp=syscallGetVarargP();HEAP32[argp>>2]=0;checkInt32(0);return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=syscallGetVarargP();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tiocgwinsz){var winsize=stream.tty.ops.ioctl_tiocgwinsz(stream.tty);var argp=syscallGetVarargP();HEAP16[argp>>1]=winsize[0];checkInt16(winsize[0]);HEAP16[argp+2>>1]=winsize[1];checkInt16(winsize[1])}return 0}case 21524:{if(!stream.tty)return-59;return 0}case 21515:{if(!stream.tty)return-59;return 0}default:return-28}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_lstat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.doStat(FS.lstat,path,buf)}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_mkdirat(dirfd,path,mode){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_newfstatat(dirfd,path,buf,flags){try{path=SYSCALLS.getStr(path);var nofollow=flags&256;var allowEmpty=flags&4096;flags=flags&~6400;assert(!flags,`unknown flags in __syscall_newfstatat: ${flags}`);path=SYSCALLS.calculateAt(dirfd,path,allowEmpty);return SYSCALLS.doStat(nofollow?FS.lstat:FS.stat,path,buf)}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?syscallGetVarargI():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_rmdir(path){try{path=SYSCALLS.getStr(path);FS.rmdir(path);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_stat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.doStat(FS.stat,path,buf)}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_unlinkat(dirfd,path,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(flags===0){FS.unlink(path)}else if(flags===512){FS.rmdir(path)}else{abort("Invalid flags passed to unlinkat")}return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var __abort_js=()=>{abort("native code called abort()")};var nowIsMonotonic=1;var __emscripten_get_now_is_monotonic=()=>nowIsMonotonic;var __emscripten_memcpy_js=(dest,src,num)=>HEAPU8.copyWithin(dest,src,src+num);var __emscripten_runtime_keepalive_clear=()=>{noExitRuntime=false;runtimeKeepaliveCounter=0};var __emscripten_throw_longjmp=()=>{throw Infinity};var convertI32PairToI53Checked=(lo,hi)=>{assert(lo==lo>>>0||lo==(lo|0));assert(hi===(hi|0));return hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN};function __mmap_js(len,prot,flags,fd,offset_low,offset_high,allocated,addr){var offset=convertI32PairToI53Checked(offset_low,offset_high);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);var res=FS.mmap(stream,len,offset,prot,flags);var ptr=res.ptr;HEAP32[allocated>>2]=res.allocated;checkInt32(res.allocated);HEAPU32[addr>>2]=ptr;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function __munmap_js(addr,len,prot,flags,fd,offset_low,offset_high){var offset=convertI32PairToI53Checked(offset_low,offset_high);try{var stream=SYSCALLS.getStreamFromFD(fd);if(prot&2){SYSCALLS.doMsync(addr,stream,len,flags,offset)}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var __tzset_js=(timezone,daylight,std_name,dst_name)=>{var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAPU32[timezone>>2]=stdTimezoneOffset*60;checkInt32(stdTimezoneOffset*60);HEAP32[daylight>>2]=Number(winterOffset!=summerOffset);checkInt32(Number(winterOffset!=summerOffset));var extractZone=timezoneOffset=>{var sign=timezoneOffset>=0?"-":"+";var absOffset=Math.abs(timezoneOffset);var hours=String(Math.floor(absOffset/60)).padStart(2,"0");var minutes=String(absOffset%60).padStart(2,"0");return`UTC${sign}${hours}${minutes}`};var winterName=extractZone(winterOffset);var summerName=extractZone(summerOffset);assert(winterName);assert(summerName);assert(lengthBytesUTF8(winterName)<=16,`timezone name truncated to fit in TZNAME_MAX (${winterName})`);assert(lengthBytesUTF8(summerName)<=16,`timezone name truncated to fit in TZNAME_MAX (${summerName})`);if(summerOffsetDate.now();var getHeapMax=()=>2147483648;var _emscripten_get_heap_max=()=>getHeapMax();var _emscripten_get_now=()=>performance.now();var growMemory=size=>{var b=wasmMemory.buffer;var pages=(size-b.byteLength+65535)/65536|0;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){err(`growMemory: Attempted to grow heap from ${b.byteLength} bytes to ${size} bytes, but got error: ${e}`)}};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;assert(requestedSize>oldSize);var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){err(`Cannot enlarge memory, requested ${requestedSize} bytes, but the limit is ${maxHeapSize} bytes!`);return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignMemory(Math.max(requestedSize,overGrownHeapSize),65536));var t0=_emscripten_get_now();var replacement=growMemory(newSize);var t1=_emscripten_get_now();dbg(`Heap resize call from ${oldSize} to ${newSize} took ${t1-t0} msecs. Success: ${!!replacement}`);if(replacement){return true}}err(`Failed to grow the heap from ${oldSize} bytes to ${newSize} bytes, not enough memory!`);return false};var ENV={};var getExecutableName=()=>thisProgram||"./this.program";var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:lang,_:getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings};var stringToAscii=(str,buffer)=>{for(var i=0;i{var bufSize=0;getEnvStrings().forEach((string,i)=>{var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>2]=ptr;checkInt32(ptr);stringToAscii(string,ptr);bufSize+=string.length+1});return 0};var _environ_sizes_get=(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;checkInt32(strings.length);var bufSize=0;strings.forEach(string=>bufSize+=string.length+1);HEAPU32[penviron_buf_size>>2]=bufSize;checkInt32(bufSize);return 0};function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_fdstat_get(fd,pbuf){try{var rightsBase=0;var rightsInheriting=0;var flags=0;{var stream=SYSCALLS.getStreamFromFD(fd);var type=stream.tty?2:FS.isDir(stream.mode)?3:FS.isLink(stream.mode)?7:4}HEAP8[pbuf]=type;checkInt8(type);HEAP16[pbuf+2>>1]=flags;checkInt16(flags);tempI64=[rightsBase>>>0,(tempDouble=rightsBase,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[pbuf+8>>2]=tempI64[0],HEAP32[pbuf+12>>2]=tempI64[1];checkInt64(rightsBase);tempI64=[rightsInheriting>>>0,(tempDouble=rightsInheriting,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[pbuf+16>>2]=tempI64[0],HEAP32[pbuf+20>>2]=tempI64[1];checkInt64(rightsInheriting);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doReadv=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;checkInt32(num);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){var offset=convertI32PairToI53Checked(offset_low,offset_high);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>2]=tempI64[0],HEAP32[newOffset+4>>2]=tempI64[1];checkInt64(stream.position);if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doWritev=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;checkInt32(num);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var _getentropy=(buffer,size)=>{randomFill(HEAPU8.subarray(buffer,buffer+size));return 0};var _llvm_eh_typeid_for=type=>type;var runtimeKeepaliveCounter=0;var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){Module["onExit"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))};var getCFunc=ident=>{var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func};var writeArrayToMemory=(array,buffer)=>{assert(array.length>=0,"writeArrayToMemory array must have a length (should be an array or typed array)");HEAP8.set(array,buffer)};var stackAlloc=sz=>__emscripten_stack_alloc(sz);var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={string:str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}return ret},array:arr=>{var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string"){return UTF8ToString(ret)}if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;assert(returnType!=="array",'Return type should not be "array".');if(args){for(var i=0;i(...args)=>ccall(ident,returnType,argTypes,args,opts);FS.createPreloadedFile=FS_createPreloadedFile;FS.staticInit();function checkIncomingModuleAPI(){ignoredModuleProp("fetchSettings")}var wasmImports={__assert_fail:___assert_fail,__call_sighandler:___call_sighandler,__cxa_begin_catch:___cxa_begin_catch,__cxa_end_catch:___cxa_end_catch,__cxa_find_matching_catch_2:___cxa_find_matching_catch_2,__cxa_find_matching_catch_3:___cxa_find_matching_catch_3,__cxa_rethrow:___cxa_rethrow,__cxa_throw:___cxa_throw,__handle_stack_overflow:___handle_stack_overflow,__resumeException:___resumeException,__syscall_faccessat:___syscall_faccessat,__syscall_fcntl64:___syscall_fcntl64,__syscall_fstat64:___syscall_fstat64,__syscall_getdents64:___syscall_getdents64,__syscall_ioctl:___syscall_ioctl,__syscall_lstat64:___syscall_lstat64,__syscall_mkdirat:___syscall_mkdirat,__syscall_newfstatat:___syscall_newfstatat,__syscall_openat:___syscall_openat,__syscall_rmdir:___syscall_rmdir,__syscall_stat64:___syscall_stat64,__syscall_unlinkat:___syscall_unlinkat,_abort_js:__abort_js,_emscripten_get_now_is_monotonic:__emscripten_get_now_is_monotonic,_emscripten_memcpy_js:__emscripten_memcpy_js,_emscripten_runtime_keepalive_clear:__emscripten_runtime_keepalive_clear,_emscripten_throw_longjmp:__emscripten_throw_longjmp,_mmap_js:__mmap_js,_munmap_js:__munmap_js,_tzset_js:__tzset_js,emscripten_date_now:_emscripten_date_now,emscripten_get_heap_max:_emscripten_get_heap_max,emscripten_get_now:_emscripten_get_now,emscripten_resize_heap:_emscripten_resize_heap,environ_get:_environ_get,environ_sizes_get:_environ_sizes_get,fd_close:_fd_close,fd_fdstat_get:_fd_fdstat_get,fd_read:_fd_read,fd_seek:_fd_seek,fd_write:_fd_write,getentropy:_getentropy,invoke_d,invoke_diii,invoke_fi,invoke_fif,invoke_fifff,invoke_fii,invoke_fiii,invoke_fiiii,invoke_fiiiiii,invoke_fiiiiiii,invoke_fij,invoke_i,invoke_idiii,invoke_ii,invoke_iif,invoke_iifi,invoke_iifii,invoke_iifiiiii,invoke_iii,invoke_iiid,invoke_iiidii,invoke_iiif,invoke_iiiffi,invoke_iiii,invoke_iiiidi,invoke_iiiiffifffffffi,invoke_iiiifiii,invoke_iiiii,invoke_iiiiif,invoke_iiiiifi,invoke_iiiiii,invoke_iiiiiifi,invoke_iiiiiififiiiififiiiiiiiiiiiiiiiiiiii,invoke_iiiiiii,invoke_iiiiiiifii,invoke_iiiiiiii,invoke_iiiiiiiii,invoke_iiiiiiiiiffi,invoke_iiiiiiiiii,invoke_iiiiiiiiiifi,invoke_iiiiiiiiiii,invoke_iiiiiiiiiiii,invoke_iiiiiiiiiiiif,invoke_iiiiiiiiiiiiiii,invoke_iiiiiiij,invoke_iiiiiij,invoke_iiiiij,invoke_iiiij,invoke_iiij,invoke_iiiji,invoke_iiijii,invoke_iiijiii,invoke_iij,invoke_iijiii,invoke_iijj,invoke_iijji,invoke_iijjiii,invoke_ij,invoke_ijjiii,invoke_j,invoke_ji,invoke_jii,invoke_jiii,invoke_jiji,invoke_v,invoke_vdiii,invoke_vi,invoke_vid,invoke_vif,invoke_vififiif,invoke_vifii,invoke_vifiiifiiiiiiiiiiiiifiiii,invoke_vii,invoke_viid,invoke_viif,invoke_viiff,invoke_viifi,invoke_viifiii,invoke_viii,invoke_viiid,invoke_viiif,invoke_viiiffii,invoke_viiiffiiii,invoke_viiifi,invoke_viiii,invoke_viiiif,invoke_viiiii,invoke_viiiiif,invoke_viiiiii,invoke_viiiiiid,invoke_viiiiiif,invoke_viiiiiifi,invoke_viiiiiifif,invoke_viiiiiifii,invoke_viiiiiii,invoke_viiiiiiidiiii,invoke_viiiiiiii,invoke_viiiiiiiif,invoke_viiiiiiiii,invoke_viiiiiiiiii,invoke_viiiiiiiiiidii,invoke_viiiiiiiiiii,invoke_viiiiiiiiiiii,invoke_viiiiiiiiiiiiii,invoke_viiiiiiiiiiiiiiii,invoke_viiiiij,invoke_viiiiiji,invoke_viiiiji,invoke_viiiijiiifi,invoke_viiij,invoke_viiiji,invoke_viiijii,invoke_viiijjji,invoke_viij,invoke_viiji,invoke_viijii,invoke_viijiiii,invoke_viijj,invoke_vij,invoke_viji,invoke_vijif,invoke_vijii,invoke_vijj,invoke_vjjiii,llvm_eh_typeid_for:_llvm_eh_typeid_for,proc_exit:_proc_exit};var wasmExports=createWasm();var ___wasm_call_ctors=createExportWrapper("__wasm_call_ctors",0);var _web_engine_create=Module["_web_engine_create"]=createExportWrapper("web_engine_create",0);var _web_engine_get_memory_stats=Module["_web_engine_get_memory_stats"]=createExportWrapper("web_engine_get_memory_stats",1);var _web_engine_destroy=Module["_web_engine_destroy"]=createExportWrapper("web_engine_destroy",1);var _fflush=createExportWrapper("fflush",1);var _web_engine_get_live_handles=Module["_web_engine_get_live_handles"]=createExportWrapper("web_engine_get_live_handles",0);var _web_engine_get_allocated_bytes=Module["_web_engine_get_allocated_bytes"]=createExportWrapper("web_engine_get_allocated_bytes",0);var _web_engine_open_blend=Module["_web_engine_open_blend"]=createExportWrapper("web_engine_open_blend",3);var _web_engine_apply_command=Module["_web_engine_apply_command"]=createExportWrapper("web_engine_apply_command",3);var _web_engine_decimate_apply=Module["_web_engine_decimate_apply"]=createExportWrapper("web_engine_decimate_apply",35);var _web_engine_append_library_object=Module["_web_engine_append_library_object"]=createExportWrapper("web_engine_append_library_object",5);var _web_engine_undo=Module["_web_engine_undo"]=createExportWrapper("web_engine_undo",1);var _web_engine_redo=Module["_web_engine_redo"]=createExportWrapper("web_engine_redo",1);var _web_engine_get_scene_snapshot=Module["_web_engine_get_scene_snapshot"]=createExportWrapper("web_engine_get_scene_snapshot",3);var _web_engine_get_scene_metadata=Module["_web_engine_get_scene_metadata"]=createExportWrapper("web_engine_get_scene_metadata",3);var _web_engine_get_scene_geometry=Module["_web_engine_get_scene_geometry"]=createExportWrapper("web_engine_get_scene_geometry",3);var _web_engine_get_scene_delta=Module["_web_engine_get_scene_delta"]=createExportWrapper("web_engine_get_scene_delta",3);var _web_engine_get_packed_asset=Module["_web_engine_get_packed_asset"]=createExportWrapper("web_engine_get_packed_asset",5);var _web_engine_evaluate_depsgraph=Module["_web_engine_evaluate_depsgraph"]=createExportWrapper("web_engine_evaluate_depsgraph",3);var _web_engine_save_blend=Module["_web_engine_save_blend"]=createExportWrapper("web_engine_save_blend",3);var _malloc=Module["_malloc"]=createExportWrapper("malloc",1);var _web_engine_free_buffer=Module["_web_engine_free_buffer"]=createExportWrapper("web_engine_free_buffer",1);var _free=Module["_free"]=createExportWrapper("free",1);var _web_engine_last_error_code=Module["_web_engine_last_error_code"]=createExportWrapper("web_engine_last_error_code",0);var _web_engine_last_error_message=Module["_web_engine_last_error_message"]=createExportWrapper("web_engine_last_error_message",0);var _strerror=createExportWrapper("strerror",1);var _emscripten_builtin_memalign=createExportWrapper("emscripten_builtin_memalign",2);var _setThrew=createExportWrapper("setThrew",2);var __emscripten_tempret_set=createExportWrapper("_emscripten_tempret_set",1);var __emscripten_tempret_get=createExportWrapper("_emscripten_tempret_get",0);var _emscripten_stack_init=()=>(_emscripten_stack_init=wasmExports["emscripten_stack_init"])();var _emscripten_stack_get_free=()=>(_emscripten_stack_get_free=wasmExports["emscripten_stack_get_free"])();var _emscripten_stack_get_base=()=>(_emscripten_stack_get_base=wasmExports["emscripten_stack_get_base"])();var _emscripten_stack_get_end=()=>(_emscripten_stack_get_end=wasmExports["emscripten_stack_get_end"])();var __emscripten_stack_restore=a0=>(__emscripten_stack_restore=wasmExports["_emscripten_stack_restore"])(a0);var __emscripten_stack_alloc=a0=>(__emscripten_stack_alloc=wasmExports["_emscripten_stack_alloc"])(a0);var _emscripten_stack_get_current=()=>(_emscripten_stack_get_current=wasmExports["emscripten_stack_get_current"])();var ___cxa_decrement_exception_refcount=createExportWrapper("__cxa_decrement_exception_refcount",1);var ___cxa_increment_exception_refcount=createExportWrapper("__cxa_increment_exception_refcount",1);var ___cxa_can_catch=createExportWrapper("__cxa_can_catch",3);var ___cxa_get_exception_ptr=createExportWrapper("__cxa_get_exception_ptr",1);var ___set_stack_limits=Module["___set_stack_limits"]=createExportWrapper("__set_stack_limits",2);var dynCall_viij=Module["dynCall_viij"]=createExportWrapper("dynCall_viij",5);var dynCall_viiji=Module["dynCall_viiji"]=createExportWrapper("dynCall_viiji",6);var dynCall_viijiiii=Module["dynCall_viijiiii"]=createExportWrapper("dynCall_viijiiii",9);var dynCall_vij=Module["dynCall_vij"]=createExportWrapper("dynCall_vij",4);var dynCall_viijii=Module["dynCall_viijii"]=createExportWrapper("dynCall_viijii",7);var dynCall_viiiijiiifi=Module["dynCall_viiiijiiifi"]=createExportWrapper("dynCall_viiiijiiifi",12);var dynCall_viiijjji=Module["dynCall_viiijjji"]=createExportWrapper("dynCall_viiijjji",11);var dynCall_viiiiji=Module["dynCall_viiiiji"]=createExportWrapper("dynCall_viiiiji",8);var dynCall_viiiji=Module["dynCall_viiiji"]=createExportWrapper("dynCall_viiiji",7);var dynCall_ij=Module["dynCall_ij"]=createExportWrapper("dynCall_ij",3);var dynCall_viji=Module["dynCall_viji"]=createExportWrapper("dynCall_viji",5);var dynCall_iij=Module["dynCall_iij"]=createExportWrapper("dynCall_iij",4);var dynCall_fij=Module["dynCall_fij"]=createExportWrapper("dynCall_fij",4);var dynCall_vijf=Module["dynCall_vijf"]=createExportWrapper("dynCall_vijf",5);var dynCall_jiii=Module["dynCall_jiii"]=createExportWrapper("dynCall_jiii",4);var dynCall_viiij=Module["dynCall_viiij"]=createExportWrapper("dynCall_viiij",6);var dynCall_iiijii=Module["dynCall_iiijii"]=createExportWrapper("dynCall_iiijii",7);var dynCall_iiijiii=Module["dynCall_iiijiii"]=createExportWrapper("dynCall_iiijiii",8);var dynCall_iiij=Module["dynCall_iiij"]=createExportWrapper("dynCall_iiij",5);var dynCall_vjjiii=Module["dynCall_vjjiii"]=createExportWrapper("dynCall_vjjiii",8);var dynCall_ijjiii=Module["dynCall_ijjiii"]=createExportWrapper("dynCall_ijjiii",8);var dynCall_iijiii=Module["dynCall_iijiii"]=createExportWrapper("dynCall_iijiii",7);var dynCall_iijjiii=Module["dynCall_iijjiii"]=createExportWrapper("dynCall_iijjiii",9);var dynCall_iiiji=Module["dynCall_iiiji"]=createExportWrapper("dynCall_iiiji",6);var dynCall_jii=Module["dynCall_jii"]=createExportWrapper("dynCall_jii",3);var dynCall_iijj=Module["dynCall_iijj"]=createExportWrapper("dynCall_iijj",6);var dynCall_vijj=Module["dynCall_vijj"]=createExportWrapper("dynCall_vijj",6);var dynCall_ji=Module["dynCall_ji"]=createExportWrapper("dynCall_ji",2);var dynCall_vijii=Module["dynCall_vijii"]=createExportWrapper("dynCall_vijii",6);var dynCall_vijif=Module["dynCall_vijif"]=createExportWrapper("dynCall_vijif",6);var dynCall_viiiiij=Module["dynCall_viiiiij"]=createExportWrapper("dynCall_viiiiij",8);var dynCall_viiiiiji=Module["dynCall_viiiiiji"]=createExportWrapper("dynCall_viiiiiji",9);var dynCall_iiiij=Module["dynCall_iiiij"]=createExportWrapper("dynCall_iiiij",6);var dynCall_iijji=Module["dynCall_iijji"]=createExportWrapper("dynCall_iijji",7);var dynCall_j=Module["dynCall_j"]=createExportWrapper("dynCall_j",1);var dynCall_iiiiiiij=Module["dynCall_iiiiiiij"]=createExportWrapper("dynCall_iiiiiiij",9);var dynCall_viijj=Module["dynCall_viijj"]=createExportWrapper("dynCall_viijj",7);var dynCall_iiiiij=Module["dynCall_iiiiij"]=createExportWrapper("dynCall_iiiiij",7);var dynCall_viiijii=Module["dynCall_viiijii"]=createExportWrapper("dynCall_viiijii",8);var dynCall_jij=Module["dynCall_jij"]=createExportWrapper("dynCall_jij",4);var dynCall_vijji=Module["dynCall_vijji"]=createExportWrapper("dynCall_vijji",7);var dynCall_iiiiiij=Module["dynCall_iiiiiij"]=createExportWrapper("dynCall_iiiiiij",8);var dynCall_jiji=Module["dynCall_jiji"]=createExportWrapper("dynCall_jiji",5);var dynCall_iiiiijj=Module["dynCall_iiiiijj"]=createExportWrapper("dynCall_iiiiijj",9);var dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=createExportWrapper("dynCall_iiiiiijj",10);function invoke_ii(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_v(index){var sp=stackSave();try{getWasmTableEntry(index)()}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viii(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiii(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vi(index,a1){var sp=stackSave();try{getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vif(index,a1,a2){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_fi(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiif(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vii(index,a1,a2){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiii(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_i(index){var sp=stackSave();try{return getWasmTableEntry(index)()}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiii(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_fiii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_diii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viifiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiffi(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiiifii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiffifffffffi(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiifi(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiiii(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiiiiiifi(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiififiiiififiiiiiiiiiiiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22,a23,a24,a25,a26,a27,a28,a29,a30,a31,a32,a33,a34,a35){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22,a23,a24,a25,a26,a27,a28,a29,a30,a31,a32,a33,a34,a35)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vififiif(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vifii(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_fiiii(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viif(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viifi(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiiiif(index,a1,a2,a3,a4,a5,a6,a7,a8,a9){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiif(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiif(index,a1,a2,a3,a4,a5){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_fif(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiifi(index,a1,a2,a3,a4,a5,a6,a7,a8){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iifii(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_fii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_fiiiiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iifi(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiif(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vdiii(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_idiii(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiif(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiifii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiifiii(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_d(index){var sp=stackSave();try{return getWasmTableEntry(index)()}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_fifff(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiifi(index,a1,a2,a3,a4,a5){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_fiiiiiii(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiifi(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vid(index,a1,a2){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiff(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iif(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiiiiiffi(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiffiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iifiiiii(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiifif(index,a1,a2,a3,a4,a5,a6,a7,a8,a9){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiif(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vifiiifiiiiiiiiiiiiifiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22,a23,a24){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22,a23,a24)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiiiiiiiif(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiid(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiiidiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiiiiiidii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiidi(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viid(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiiiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiidii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiid(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiffii(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiid(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_fij(index,a1,a2,a3){var sp=stackSave();try{return dynCall_fij(index,a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viij(index,a1,a2,a3,a4){var sp=stackSave();try{dynCall_viij(index,a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iij(index,a1,a2,a3){var sp=stackSave();try{return dynCall_iij(index,a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_ij(index,a1,a2){var sp=stackSave();try{return dynCall_ij(index,a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vij(index,a1,a2,a3){var sp=stackSave();try{dynCall_vij(index,a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_jiii(index,a1,a2,a3){var sp=stackSave();try{return dynCall_jiii(index,a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiji(index,a1,a2,a3,a4,a5){var sp=stackSave();try{dynCall_viiji(index,a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viijiiii(index,a1,a2,a3,a4,a5,a6,a7,a8){var sp=stackSave();try{dynCall_viijiiii(index,a1,a2,a3,a4,a5,a6,a7,a8)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viijii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{dynCall_viijii(index,a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiijiiifi(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11){var sp=stackSave();try{dynCall_viiiijiiifi(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiijjji(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10){var sp=stackSave();try{dynCall_viiijjji(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiji(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{dynCall_viiiiji(index,a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiji(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{dynCall_viiiji(index,a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiij(index,a1,a2,a3,a4,a5){var sp=stackSave();try{dynCall_viiij(index,a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiijii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return dynCall_iiijii(index,a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiijiii(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{return dynCall_iiijiii(index,a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiij(index,a1,a2,a3,a4){var sp=stackSave();try{return dynCall_iiij(index,a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viji(index,a1,a2,a3,a4){var sp=stackSave();try{dynCall_viji(index,a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vijii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{dynCall_vijii(index,a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiji(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return dynCall_iiiji(index,a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iijiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return dynCall_iijiii(index,a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iijjiii(index,a1,a2,a3,a4,a5,a6,a7,a8){var sp=stackSave();try{return dynCall_iijjiii(index,a1,a2,a3,a4,a5,a6,a7,a8)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vjjiii(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{dynCall_vjjiii(index,a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_ijjiii(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{return dynCall_ijjiii(index,a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iijj(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return dynCall_iijj(index,a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vijj(index,a1,a2,a3,a4,a5){var sp=stackSave();try{dynCall_vijj(index,a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiij(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{dynCall_viiiiij(index,a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vijif(index,a1,a2,a3,a4,a5){var sp=stackSave();try{dynCall_vijif(index,a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiji(index,a1,a2,a3,a4,a5,a6,a7,a8){var sp=stackSave();try{dynCall_viiiiiji(index,a1,a2,a3,a4,a5,a6,a7,a8)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iijji(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return dynCall_iijji(index,a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viijj(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{dynCall_viijj(index,a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_ji(index,a1){var sp=stackSave();try{return dynCall_ji(index,a1)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiij(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return dynCall_iiiiij(index,a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiij(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return dynCall_iiiij(index,a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_j(index){var sp=stackSave();try{return dynCall_j(index)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiiij(index,a1,a2,a3,a4,a5,a6,a7,a8){var sp=stackSave();try{return dynCall_iiiiiiij(index,a1,a2,a3,a4,a5,a6,a7,a8)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiijii(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{dynCall_viiijii(index,a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_jii(index,a1,a2){var sp=stackSave();try{return dynCall_jii(index,a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiij(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{return dynCall_iiiiiij(index,a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_jiji(index,a1,a2,a3,a4){var sp=stackSave();try{return dynCall_jiji(index,a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}Module["ccall"]=ccall;Module["cwrap"]=cwrap;Module["UTF8ToString"]=UTF8ToString;var missingLibrarySymbols=["writeI53ToI64","writeI53ToI64Clamped","writeI53ToI64Signaling","writeI53ToU64Clamped","writeI53ToU64Signaling","readI53FromI64","readI53FromU64","convertI32PairToI53","convertU32PairToI53","getTempRet0","exitJS","inetPton4","inetNtop4","inetPton6","inetNtop6","readSockaddr","writeSockaddr","emscriptenLog","readEmAsmArgs","jstoi_q","listenOnce","autoResumeAudioContext","dynCallLegacy","getDynCaller","dynCall","handleException","runtimeKeepalivePush","runtimeKeepalivePop","callUserCallback","maybeExit","asmjsMangle","HandleAllocator","getNativeTypeSize","STACK_SIZE","STACK_ALIGN","POINTER_SIZE","ASSERTIONS","uleb128Encode","sigToWasmTypes","generateFuncType","convertJsFunctionToWasm","getEmptyTableSlot","updateTableMap","getFunctionAddress","addFunction","removeFunction","reallyNegative","unSign","strLen","reSign","formatString","intArrayToString","AsciiToString","UTF16ToString","stringToUTF16","lengthBytesUTF16","UTF32ToString","stringToUTF32","lengthBytesUTF32","stringToNewUTF8","registerKeyEventCallback","maybeCStringToJsString","findEventTarget","getBoundingClientRect","fillMouseEventData","registerMouseEventCallback","registerWheelEventCallback","registerUiEventCallback","registerFocusEventCallback","fillDeviceOrientationEventData","registerDeviceOrientationEventCallback","fillDeviceMotionEventData","registerDeviceMotionEventCallback","screenOrientation","fillOrientationChangeEventData","registerOrientationChangeEventCallback","fillFullscreenChangeEventData","registerFullscreenChangeEventCallback","JSEvents_requestFullscreen","JSEvents_resizeCanvasForFullscreen","registerRestoreOldStyle","hideEverythingExceptGivenElement","restoreHiddenElements","setLetterbox","softFullscreenResizeWebGLRenderTarget","doRequestFullscreen","fillPointerlockChangeEventData","registerPointerlockChangeEventCallback","registerPointerlockErrorEventCallback","requestPointerLock","fillVisibilityChangeEventData","registerVisibilityChangeEventCallback","registerTouchEventCallback","fillGamepadEventData","registerGamepadEventCallback","registerBeforeUnloadEventCallback","fillBatteryEventData","battery","registerBatteryEventCallback","setCanvasElementSize","getCanvasElementSize","jsStackTrace","getCallstack","convertPCtoSourceLocation","checkWasiClock","wasiRightsToMuslOFlags","wasiOFlagsToMuslOFlags","createDyncallWrapper","safeSetTimeout","setImmediateWrapped","clearImmediateWrapped","polyfillSetImmediate","registerPostMainLoop","registerPreMainLoop","getPromise","makePromise","idsToPromises","makePromiseCallback","Browser_asyncPrepareDataCounter","safeRequestAnimationFrame","isLeapYear","ydayFromDate","arraySum","addDays","getSocketFromFD","getSocketAddress","FS_unlink","FS_mkdirTree","_setNetworkCallback","heapObjectForWebGLType","toTypedArrayIndex","webgl_enable_ANGLE_instanced_arrays","webgl_enable_OES_vertex_array_object","webgl_enable_WEBGL_draw_buffers","webgl_enable_WEBGL_multi_draw","webgl_enable_EXT_polygon_offset_clamp","webgl_enable_EXT_clip_control","webgl_enable_WEBGL_polygon_mode","emscriptenWebGLGet","computeUnpackAlignedImageSize","colorChannelsInGlTextureFormat","emscriptenWebGLGetTexPixelData","emscriptenWebGLGetUniform","webglGetUniformLocation","webglPrepareUniformLocationsBeforeFirstUse","webglGetLeftBracePos","emscriptenWebGLGetVertexAttrib","__glGetActiveAttribOrUniform","writeGLArray","registerWebGlEventCallback","runAndAbortIfError","ALLOC_NORMAL","ALLOC_STACK","allocate","writeStringToMemory","writeAsciiToMemory","setErrNo","demangle","stackTrace"];missingLibrarySymbols.forEach(missingLibrarySymbol);var unexportedSymbols=["run","addOnPreRun","addOnInit","addOnPreMain","addOnExit","addOnPostRun","addRunDependency","removeRunDependency","out","err","callMain","abort","wasmMemory","wasmExports","writeStackCookie","checkStackCookie","convertI32PairToI53Checked","stackSave","stackRestore","stackAlloc","setTempRet0","ptrToString","zeroMemory","getHeapMax","growMemory","ENV","setStackLimits","ERRNO_CODES","strError","DNS","Protocols","Sockets","initRandomFill","randomFill","timers","warnOnce","readEmAsmArgsArray","jstoi_s","getExecutableName","keepRuntimeAlive","asyncLoad","alignMemory","mmapAlloc","wasmTable","noExitRuntime","getCFunc","freeTableIndexes","functionsInTableMap","setValue","getValue","PATH","PATH_FS","UTF8Decoder","UTF8ArrayToString","stringToUTF8Array","stringToUTF8","lengthBytesUTF8","intArrayFromString","stringToAscii","UTF16Decoder","stringToUTF8OnStack","writeArrayToMemory","JSEvents","specialHTMLTargets","findCanvasEventTarget","currentFullscreenStrategy","restoreOldWindowedStyle","UNWIND_CACHE","ExitStatus","getEnvStrings","doReadv","doWritev","promiseMap","uncaughtExceptionCount","exceptionLast","exceptionCaught","ExceptionInfo","findMatchingCatch","Browser","getPreloadedImageData__data","wget","MONTH_DAYS_REGULAR","MONTH_DAYS_LEAP","MONTH_DAYS_REGULAR_CUMULATIVE","MONTH_DAYS_LEAP_CUMULATIVE","SYSCALLS","preloadPlugins","FS_createPreloadedFile","FS_modeStringToFlags","FS_getMode","FS_stdin_getChar_buffer","FS_stdin_getChar","FS_createPath","FS_createDevice","FS_readFile","FS","FS_createDataFile","FS_createLazyFile","MEMFS","TTY","PIPEFS","SOCKFS","tempFixedLengthArray","miniTempWebGLFloatBuffers","miniTempWebGLIntBuffers","GL","AL","GLUT","EGL","GLEW","IDBStore","SDL","SDL_gfx","allocateUTF8","allocateUTF8OnStack","print","printErr"];unexportedSymbols.forEach(unexportedRuntimeSymbol);var calledRun;var calledPrerun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function stackCheckInit(){_emscripten_stack_init();writeStackCookie()}function run(){if(runDependencies>0){return}stackCheckInit();if(!calledPrerun){calledPrerun=1;preRun();if(runDependencies>0){return}}function doRun(){if(calledRun)return;calledRun=1;Module["calledRun"]=1;if(ABORT)return;initRuntime();readyPromiseResolve(Module);Module["onRuntimeInitialized"]?.();assert(!Module["_main"],'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]');postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(()=>{setTimeout(()=>Module["setStatus"](""),1);doRun()},1)}else{doRun()}checkStackCookie()}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run();moduleRtn=readyPromise;for(const prop of Object.keys(Module)){if(!(prop in moduleArg)){Object.defineProperty(moduleArg,prop,{configurable:true,get(){abort(`Access to module property ('${prop}') is no longer possible via the module constructor argument; Instead, use the result of the module constructor.`)}})}} + + + return moduleRtn; +} +); +})(); +export default Module; diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/web/app/public/vendor/blender/web_engine.wasm b/tests/golden/corrective/C0-002/staged/source-snapshot/files/web/app/public/vendor/blender/web_engine.wasm new file mode 100644 index 00000000..71539893 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/web/app/public/vendor/blender/web_engine.wasm differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/web/app/src/vendor/blender/web_engine.js b/tests/golden/corrective/C0-002/staged/source-snapshot/files/web/app/src/vendor/blender/web_engine.js new file mode 100644 index 00000000..144e0b10 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/web/app/src/vendor/blender/web_engine.js @@ -0,0 +1,16 @@ + +var Module = (() => { + var _scriptName = import.meta.url; + + return ( +async function(moduleArg = {}) { + var moduleRtn; + +var Module=moduleArg;var readyPromiseResolve,readyPromiseReject;var readyPromise=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject});["_malloc","_free","_web_engine_create","_web_engine_destroy","_web_engine_get_memory_stats","_web_engine_get_live_handles","_web_engine_get_allocated_bytes","_web_engine_open_blend","_web_engine_apply_command","_web_engine_append_library_object","_web_engine_undo","_web_engine_redo","_web_engine_get_scene_snapshot","_web_engine_get_scene_metadata","_web_engine_get_scene_geometry","_web_engine_get_scene_delta","_web_engine_get_packed_asset","_web_engine_evaluate_depsgraph","_web_engine_save_blend","_web_engine_free_buffer","_web_engine_last_error_code","_web_engine_last_error_message","_web_engine_decimate_apply","_memory","___indirect_function_table","___set_stack_limits","onRuntimeInitialized"].forEach(prop=>{if(!Object.getOwnPropertyDescriptor(readyPromise,prop)){Object.defineProperty(readyPromise,prop,{get:()=>abort("You are getting "+prop+" on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js"),set:()=>abort("You are setting "+prop+" on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")})}});var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string"&&process.type!="renderer";var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){const{createRequire}=await import("module");let dirname=import.meta.url;if(dirname.startsWith("data:")){dirname="/"}var require=createRequire(dirname)}var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){if(typeof process=="undefined"||!process.release||process.release.name!=="node")throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");var nodeVersion=process.versions.node;var numericVersion=nodeVersion.split(".").slice(0,3);numericVersion=numericVersion[0]*1e4+numericVersion[1]*100+numericVersion[2].split("-")[0]*1;if(numericVersion<16e4){throw new Error("This emscripten-generated code requires node v16.0.0 (detected v"+nodeVersion+")")}var fs=require("fs");var nodePath=require("path");if(!import.meta.url.startsWith("data:")){scriptDirectory=nodePath.dirname(require("url").fileURLToPath(import.meta.url))+"/"}readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);var ret=fs.readFileSync(filename);assert(ret.buffer);return ret};readAsync=(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);return new Promise((resolve,reject)=>{fs.readFile(filename,binary?undefined:"utf8",(err,data)=>{if(err)reject(err);else resolve(binary?data.buffer:data)})})};if(!Module["thisProgram"]&&process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_SHELL){if(typeof process=="object"&&typeof require==="function"||typeof window=="object"||typeof importScripts=="function")throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)")}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptName){scriptDirectory=_scriptName}if(scriptDirectory.startsWith("blob:")){scriptDirectory=""}else{scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}if(!(typeof window=="object"||typeof importScripts=="function"))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=url=>{assert(!isFileURI(url),"readAsync does not work with file:// URLs");return fetch(url,{credentials:"same-origin"}).then(response=>{if(response.ok){return response.arrayBuffer()}return Promise.reject(new Error(response.status+" : "+response.url))})}}}else{throw new Error("environment detection error")}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.error.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;checkIncomingModuleAPI();if(Module["arguments"])arguments_=Module["arguments"];legacyModuleProp("arguments","arguments_");if(Module["thisProgram"])thisProgram=Module["thisProgram"];legacyModuleProp("thisProgram","thisProgram");assert(typeof Module["memoryInitializerPrefixURL"]=="undefined","Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["pthreadMainPrefixURL"]=="undefined","Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["cdInitializerPrefixURL"]=="undefined","Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["filePackagePrefixURL"]=="undefined","Module.filePackagePrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["read"]=="undefined","Module.read option was removed");assert(typeof Module["readAsync"]=="undefined","Module.readAsync option was removed (modify readAsync in JS)");assert(typeof Module["readBinary"]=="undefined","Module.readBinary option was removed (modify readBinary in JS)");assert(typeof Module["setWindowTitle"]=="undefined","Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)");assert(typeof Module["TOTAL_MEMORY"]=="undefined","Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY");legacyModuleProp("asm","wasmExports");legacyModuleProp("readAsync","readAsync");legacyModuleProp("readBinary","readBinary");legacyModuleProp("setWindowTitle","setWindowTitle");assert(!ENVIRONMENT_IS_SHELL,"shell environment detected but not enabled at build time. Add `shell` to `-sENVIRONMENT` to enable.");var wasmBinary=Module["wasmBinary"];legacyModuleProp("wasmBinary","wasmBinary");if(typeof WebAssembly!="object"){err("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed"+(text?": "+text:""))}}var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b)}assert(!Module["STACK_SIZE"],"STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time");assert(typeof Int32Array!="undefined"&&typeof Float64Array!=="undefined"&&Int32Array.prototype.subarray!=undefined&&Int32Array.prototype.set!=undefined,"JS engine does not provide full typed array support");assert(!Module["wasmMemory"],"Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally");assert(!Module["INITIAL_MEMORY"],"Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically");function writeStackCookie(){var max=_emscripten_stack_get_end();assert((max&3)==0);if(max==0){max+=4}HEAPU32[max>>2]=34821223;checkInt32(34821223);HEAPU32[max+4>>2]=2310721022;checkInt32(2310721022);HEAPU32[0>>2]=1668509029;checkInt32(1668509029)}function checkStackCookie(){if(ABORT)return;var max=_emscripten_stack_get_end();if(max==0){max+=4}var cookie1=HEAPU32[max>>2];var cookie2=HEAPU32[max+4>>2];if(cookie1!=34821223||cookie2!=2310721022){abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`)}if(HEAPU32[0>>2]!=1668509029){abort("Runtime error: The application has corrupted its heap memory area (address zero)!")}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){var preRuns=Module["preRun"];if(preRuns){if(typeof preRuns=="function")preRuns=[preRuns];preRuns.forEach(addOnPreRun)}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){assert(!runtimeInitialized);runtimeInitialized=true;checkStackCookie();setStackLimits();if(!Module["noFSInit"]&&!FS.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function postRun(){checkStackCookie();var postRuns=Module["postRun"];if(postRuns){if(typeof postRuns=="function")postRuns=[postRuns];postRuns.forEach(addOnPostRun)}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}assert(Math.imul,"This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill");assert(Math.fround,"This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill");assert(Math.clz32,"This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill");assert(Math.trunc,"This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill");var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;var runDependencyTracking={};function getUniqueRunDependency(id){var orig=id;while(1){if(!runDependencyTracking[id])return id;id=orig+Math.random()}}function addRunDependency(id){runDependencies++;Module["monitorRunDependencies"]?.(runDependencies);if(id){assert(!runDependencyTracking[id]);runDependencyTracking[id]=1;if(runDependencyWatcher===null&&typeof setInterval!="undefined"){runDependencyWatcher=setInterval(()=>{if(ABORT){clearInterval(runDependencyWatcher);runDependencyWatcher=null;return}var shown=false;for(var dep in runDependencyTracking){if(!shown){shown=true;err("still waiting on run dependencies:")}err(`dependency: ${dep}`)}if(shown){err("(end of list)")}},1e4)}}else{err("warning: run dependency added without ID")}}function removeRunDependency(id){runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(id){assert(runDependencyTracking[id]);delete runDependencyTracking[id]}else{err("warning: run dependency removed without ID")}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";var isDataURI=filename=>filename.startsWith(dataURIPrefix);var isFileURI=filename=>filename.startsWith("file://");function createExportWrapper(name,nargs){return(...args)=>{assert(runtimeInitialized,`native function \`${name}\` called before runtime initialization`);var f=wasmExports[name];assert(f,`exported native function \`${name}\` not found`);assert(args.length<=nargs,`native function \`${name}\` called with ${args.length} args but expects ${nargs}`);return f(...args)}}function findWasmBinary(){if(Module["locateFile"]){var f="web_engine.wasm";if(!isDataURI(f)){return locateFile(f)}return f}return new URL("web_engine.wasm",import.meta.url).href}var wasmBinaryFile;function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}function getBinaryPromise(binaryFile){if(!wasmBinary){return readAsync(binaryFile).then(response=>new Uint8Array(response),()=>getBinarySync(binaryFile))}return Promise.resolve().then(()=>getBinarySync(binaryFile))}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(binary=>WebAssembly.instantiate(binary,imports)).then(receiver,reason=>{err(`failed to asynchronously prepare wasm: ${reason}`);if(isFileURI(wasmBinaryFile)){err(`warning: Loading from a file URI (${wasmBinaryFile}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`)}abort(reason)})}function instantiateAsync(binary,binaryFile,imports,callback){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(binaryFile)&&!ENVIRONMENT_IS_NODE&&typeof fetch=="function"){return fetch(binaryFile,{credentials:"same-origin"}).then(response=>{var result=WebAssembly.instantiateStreaming(response,imports);return result.then(callback,function(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(binaryFile,imports,callback)})})}return instantiateArrayBuffer(binaryFile,imports,callback)}function getWasmImports(){return{env:wasmImports,wasi_snapshot_preview1:wasmImports}}function createWasm(){var info=getWasmImports();function receiveInstance(instance,module){wasmExports=instance.exports;wasmMemory=wasmExports["memory"];assert(wasmMemory,"memory not found in wasm exports");updateMemoryViews();wasmTable=wasmExports["__indirect_function_table"];assert(wasmTable,"table not found in wasm exports");addOnInit(wasmExports["__wasm_call_ctors"]);removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");var trueModule=Module;function receiveInstantiationResult(result){assert(Module===trueModule,"the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?");trueModule=null;receiveInstance(result["instance"])}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err(`Module.instantiateWasm callback failed with error: ${e}`);readyPromiseReject(e)}}wasmBinaryFile??=findWasmBinary();instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult).catch(readyPromiseReject);return{}}var tempDouble;var tempI64;(()=>{var h16=new Int16Array(1);var h8=new Int8Array(h16.buffer);h16[0]=25459;if(h8[0]!==115||h8[1]!==99)throw"Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)"})();if(Module["ENVIRONMENT"]){throw new Error("Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)")}function legacyModuleProp(prop,newName,incoming=true){if(!Object.getOwnPropertyDescriptor(Module,prop)){Object.defineProperty(Module,prop,{configurable:true,get(){let extra=incoming?" (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)":"";abort(`\`Module.${prop}\` has been replaced by \`${newName}\``+extra)}})}}function ignoredModuleProp(prop){if(Object.getOwnPropertyDescriptor(Module,prop)){abort(`\`Module.${prop}\` was supplied but \`${prop}\` not included in INCOMING_MODULE_JS_API`)}}function isExportedByForceFilesystem(name){return name==="FS_createPath"||name==="FS_createDataFile"||name==="FS_createPreloadedFile"||name==="FS_unlink"||name==="addRunDependency"||name==="FS_createLazyFile"||name==="FS_createDevice"||name==="removeRunDependency"}function hookGlobalSymbolAccess(sym,func){if(typeof globalThis!="undefined"&&!Object.getOwnPropertyDescriptor(globalThis,sym)){Object.defineProperty(globalThis,sym,{configurable:true,get(){func();return undefined}})}}function missingGlobal(sym,msg){hookGlobalSymbolAccess(sym,()=>{warnOnce(`\`${sym}\` is not longer defined by emscripten. ${msg}`)})}missingGlobal("buffer","Please use HEAP8.buffer or wasmMemory.buffer");missingGlobal("asm","Please use wasmExports instead");function missingLibrarySymbol(sym){hookGlobalSymbolAccess(sym,()=>{var msg=`\`${sym}\` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line`;var librarySymbol=sym;if(!librarySymbol.startsWith("_")){librarySymbol="$"+sym}msg+=` (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='${librarySymbol}')`;if(isExportedByForceFilesystem(sym)){msg+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"}warnOnce(msg)});unexportedRuntimeSymbol(sym)}function unexportedRuntimeSymbol(sym){if(!Object.getOwnPropertyDescriptor(Module,sym)){Object.defineProperty(Module,sym,{configurable:true,get(){var msg=`'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`;if(isExportedByForceFilesystem(sym)){msg+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"}abort(msg)}})}}var MAX_UINT8=2**8-1;var MAX_UINT16=2**16-1;var MAX_UINT32=2**32-1;var MAX_UINT53=2**53-1;var MAX_UINT64=2**64-1;var MIN_INT8=-(2**(8-1));var MIN_INT16=-(2**(16-1));var MIN_INT32=-(2**(32-1));var MIN_INT53=-(2**(53-1));var MIN_INT64=-(2**(64-1));function checkInt(value,bits,min,max){assert(Number.isInteger(Number(value)),`attempt to write non-integer (${value}) into integer heap`);assert(value<=max,`value (${value}) too large to write as ${bits}-bit value`);assert(value>=min,`value (${value}) too small to write as ${bits}-bit value`)}var checkInt8=value=>checkInt(value,8,MIN_INT8,MAX_UINT8);var checkInt16=value=>checkInt(value,16,MIN_INT16,MAX_UINT16);var checkInt32=value=>checkInt(value,32,MIN_INT32,MAX_UINT32);var checkInt64=value=>checkInt(value,64,MIN_INT64,MAX_UINT64);function dbg(...args){console.warn(...args)}function ExitStatus(status){this.name="ExitStatus";this.message=`Program terminated with exit(${status})`;this.status=status}var callRuntimeCallbacks=callbacks=>{callbacks.forEach(f=>f(Module))};var noExitRuntime=Module["noExitRuntime"]||true;var ptrToString=ptr=>{assert(typeof ptr==="number");ptr>>>=0;return"0x"+ptr.toString(16).padStart(8,"0")};var setStackLimits=()=>{var stackLow=_emscripten_stack_get_base();var stackHigh=_emscripten_stack_get_end();___set_stack_limits(stackLow,stackHigh)};var stackRestore=val=>__emscripten_stack_restore(val);var stackSave=()=>_emscripten_stack_get_current();var warnOnce=text=>{warnOnce.shown||={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;if(ENVIRONMENT_IS_NODE)text="warning: "+text;err(text)}};var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder:undefined;var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead=NaN)=>{var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var UTF8ToString=(ptr,maxBytesToRead)=>{assert(typeof ptr=="number",`UTF8ToString expects a number (got ${typeof ptr})`);return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""};var ___assert_fail=(condition,filename,line,func)=>{abort(`Assertion failed: ${UTF8ToString(condition)}, at: `+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])};var wasmTableMirror=[];var wasmTable;var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}assert(wasmTable.get(funcPtr)==func,"JavaScript-side Wasm function table mirror is out of date!");return func};var ___call_sighandler=(fp,sig)=>getWasmTableEntry(fp)(sig);var exceptionCaught=[];var uncaughtExceptionCount=0;var ___cxa_begin_catch=ptr=>{var info=new ExceptionInfo(ptr);if(!info.get_caught()){info.set_caught(true);uncaughtExceptionCount--}info.set_rethrown(false);exceptionCaught.push(info);___cxa_increment_exception_refcount(ptr);return ___cxa_get_exception_ptr(ptr)};var exceptionLast=0;var ___cxa_end_catch=()=>{_setThrew(0,0);assert(exceptionCaught.length>0);var info=exceptionCaught.pop();___cxa_decrement_exception_refcount(info.excPtr);exceptionLast=0};class ExceptionInfo{constructor(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24}set_type(type){HEAPU32[this.ptr+4>>2]=type}get_type(){return HEAPU32[this.ptr+4>>2]}set_destructor(destructor){HEAPU32[this.ptr+8>>2]=destructor}get_destructor(){return HEAPU32[this.ptr+8>>2]}set_caught(caught){caught=caught?1:0;HEAP8[this.ptr+12]=caught;checkInt8(caught)}get_caught(){return HEAP8[this.ptr+12]!=0}set_rethrown(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13]=rethrown;checkInt8(rethrown)}get_rethrown(){return HEAP8[this.ptr+13]!=0}init(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)}set_adjusted_ptr(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr}get_adjusted_ptr(){return HEAPU32[this.ptr+16>>2]}}var ___resumeException=ptr=>{if(!exceptionLast){exceptionLast=ptr}assert(false,"Exception thrown, but exception catching is not enabled. Compile with -sNO_DISABLE_EXCEPTION_CATCHING or -sEXCEPTION_CATCHING_ALLOWED=[..] to catch.")};var setTempRet0=val=>__emscripten_tempret_set(val);var findMatchingCatch=args=>{var thrown=exceptionLast;if(!thrown){setTempRet0(0);return 0}var info=new ExceptionInfo(thrown);info.set_adjusted_ptr(thrown);var thrownType=info.get_type();if(!thrownType){setTempRet0(0);return thrown}for(var caughtType of args){if(caughtType===0||caughtType===thrownType){break}var adjusted_ptr_addr=info.ptr+16;if(___cxa_can_catch(caughtType,thrownType,adjusted_ptr_addr)){setTempRet0(caughtType);return thrown}}setTempRet0(thrownType);return thrown};var ___cxa_find_matching_catch_2=()=>findMatchingCatch([]);var ___cxa_find_matching_catch_3=arg0=>findMatchingCatch([arg0]);var ___cxa_rethrow=()=>{var info=exceptionCaught.pop();if(!info){abort("no exception to throw")}var ptr=info.excPtr;if(!info.get_rethrown()){exceptionCaught.push(info);info.set_rethrown(true);info.set_caught(false);uncaughtExceptionCount++}exceptionLast=ptr;assert(false,"Exception thrown, but exception catching is not enabled. Compile with -sNO_DISABLE_EXCEPTION_CATCHING or -sEXCEPTION_CATCHING_ALLOWED=[..] to catch.")};var ___cxa_throw=(ptr,type,destructor)=>{var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;assert(false,"Exception thrown, but exception catching is not enabled. Compile with -sNO_DISABLE_EXCEPTION_CATCHING or -sEXCEPTION_CATCHING_ALLOWED=[..] to catch.")};var ___handle_stack_overflow=requested=>{var base=_emscripten_stack_get_base();var end=_emscripten_stack_get_end();abort(`stack overflow (Attempt to set SP to ${ptrToString(requested)}`+`, with stack limits [${ptrToString(end)} - ${ptrToString(base)}`+"]). If you require more stack space build with -sSTACK_SIZE=")};var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:path=>{if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},join:(...paths)=>PATH.normalize(paths.join("/")),join2:(l,r)=>PATH.normalize(l+"/"+r)};var initRandomFill=()=>{if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){return view=>crypto.getRandomValues(view)}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");var randomFillSync=crypto_module["randomFillSync"];if(randomFillSync){return view=>crypto_module["randomFillSync"](view)}var randomBytes=crypto_module["randomBytes"];return view=>(view.set(randomBytes(view.byteLength)),view)}catch(e){}}abort("no cryptographic support found for randomDevice. consider polyfilling it if you want to use something insecure like Math.random(), e.g. put this in a --pre-js: var crypto = { getRandomValues: (array) => { for (var i = 0; i < array.length; i++) array[i] = (Math.random()*256)|0 } };")};var randomFill=view=>(randomFill=initRandomFill())(view);var PATH_FS={resolve:(...args)=>{var resolvedPath="",resolvedAbsolute=false;for(var i=args.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?args[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{assert(typeof str==="string",`stringToUTF8Array expects a string (got ${typeof str})`);if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;if(u>1114111)warnOnce("Invalid Unicode code point "+ptrToString(u)+" encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).");heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx};function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var FS_stdin_getChar=()=>{if(!FS_stdin_getChar_buffer.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc(BUFSIZE);var bytesRead=0;var fd=process.stdin.fd;try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE)}catch(e){if(e.toString().includes("EOF"))bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else{}if(!result){return null}FS_stdin_getChar_buffer=intArrayFromString(result,true)}return FS_stdin_getChar_buffer.shift()};var TTY={ttys:[],init(){},shutdown(){},register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close(stream){stream.tty.ops.fsync(stream.tty)},fsync(stream){stream.tty.ops.fsync(stream.tty)},read(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i0){out(UTF8ArrayToString(tty.output));tty.output=[]}},ioctl_tcgets(tty){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(tty,optional_actions,data){return 0},ioctl_tiocgwinsz(tty){return[24,80]}},default_tty1_ops:{put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output));tty.output=[]}}}};var zeroMemory=(address,size)=>{HEAPU8.fill(0,address,address+size)};var alignMemory=(size,alignment)=>{assert(alignment,"alignment argument is required");return Math.ceil(size/alignment)*alignment};var mmapAlloc=size=>{size=alignMemory(size,65536);var ptr=_emscripten_builtin_memalign(65536,size);if(ptr)zeroMemory(ptr,size);return ptr};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}MEMFS.ops_table||={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}};var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){throw FS.genericErrors[44]},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp},unlink(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir(node){var entries=[".",".."];for(var key of Object.keys(node.contents)){entries.push(key)}return entries},symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);assert(size>=0);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length{var dep=!noRunDep?getUniqueRunDependency(`al ${url}`):"";readAsync(url).then(arrayBuffer=>{assert(arrayBuffer,`Loading data file "${url}" failed (no arrayBuffer).`);onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},err=>{if(onerror){onerror()}else{throw`Loading data file "${url}" failed.`}});if(dep)addRunDependency(dep)};var FS_createDataFile=(parent,name,fileData,canRead,canWrite,canOwn)=>{FS.createDataFile(parent,name,fileData,canRead,canWrite,canOwn)};var preloadPlugins=Module["preloadPlugins"]||[];var FS_handledByPreloadPlugin=(byteArray,fullname,finish,onerror)=>{if(typeof Browser!="undefined")Browser.init();var handled=false;preloadPlugins.forEach(plugin=>{if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,onerror);handled=true}});return handled};var FS_createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);function processData(byteArray){function finish(byteArray){preFinish?.();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}onload?.();removeRunDependency(dep)}if(FS_handledByPreloadPlugin(byteArray,fullname,finish,()=>{onerror?.();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url,processData,onerror)}else{processData(url)}};var FS_modeStringToFlags=str=>{var flagModes={r:0,"r+":2,w:512|64|1,"w+":512|64|2,a:1024|64|1,"a+":1024|64|2};var flags=flagModes[str];if(typeof flags=="undefined"){throw new Error(`Unknown file open mode: ${str}`)}return flags};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var strError=errno=>UTF8ToString(_strerror(errno));var ERRNO_CODES={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:class extends Error{constructor(errno){super(runtimeInitialized?strError(errno):"");this.name="ErrnoError";this.errno=errno;for(var key in ERRNO_CODES){if(ERRNO_CODES[key]===errno){this.code=key;break}}}},genericErrors:{},filesystems:null,syncFSRequests:0,readFiles:{},FSStream:class{constructor(){this.shared={}}get object(){return this.node}set object(val){this.node=val}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(val){this.shared.flags=val}get position(){return this.shared.position}set position(val){this.shared.position=val}},FSNode:class{constructor(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev;this.readMode=292|73;this.writeMode=146}get read(){return(this.mode&this.readMode)===this.readMode}set read(val){val?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(val){val?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return FS.isDir(this.mode)}get isDevice(){return FS.isChrdev(this.mode)}},lookupPath(path,opts={}){path=PATH_FS.resolve(path);if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};opts=Object.assign(defaults,opts);if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?`${mount}/${path}`:mount+path}path=path?`${node.name}/${path}`:node.name;node=node.parent}},hashName(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode(parent,name,mode,rdev){assert(typeof parent=="object");var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode(node){FS.hashRemoveNode(node)},isRoot(node){return node===node.parent},isMountpoint(node){return!!node.mounted},isFile(mode){return(mode&61440)===32768},isDir(mode){return(mode&61440)===16384},isLink(mode){return(mode&61440)===40960},isChrdev(mode){return(mode&61440)===8192},isBlkdev(mode){return(mode&61440)===24576},isFIFO(mode){return(mode&61440)===4096},isSocket(mode){return(mode&49152)===49152},flagsToPermissionString(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions(node,perms){if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup(dir){if(!FS.isDir(dir.mode))return 54;var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd(){for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStreamChecked(fd){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}return stream},getStream:fd=>FS.streams[fd],createStream(stream,fd=-1){assert(fd>=-1);stream=Object.assign(new FS.FSStream,stream);if(fd==-1){fd=FS.nextfd()}stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream(fd){FS.streams[fd]=null},dupStream(origStream,fd=-1){var stream=FS.createStream(origStream,fd);stream.stream_ops?.dup?.(stream);return stream},chrdev_stream_ops:{open(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;stream.stream_ops.open?.(stream)},llseek(){throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push(...m.mounts)}return mounts},syncfs(populate,callback){if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`)}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){assert(FS.syncFSRequests>0);FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount(type,opts,mountpoint){if(typeof type=="string"){throw type}var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type,opts,mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(hash=>{var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);assert(idx!==-1);node.mount.mounts.splice(idx,1)},lookup(parent,name){return parent.node_ops.lookup(parent,name)},mknod(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split("/");var d="";for(var i=0;i=0);if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write(stream,buffer,offset,length,position,canOwn){assert(offset>=0);if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},allocate(stream,offset,length){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(offset<0||length<=0){throw new FS.ErrnoError(28)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(43)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(138)}stream.stream_ops.allocate(stream,offset,length)},mmap(stream,length,position,prot,flags){if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}if(!length){throw new FS.ErrnoError(28)}return stream.stream_ops.mmap(stream,length,position,prot,flags)},msync(stream,buffer,offset,length,mmapFlags){assert(offset>=0);if(!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},ioctl(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile(path,opts={}){opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error(`Invalid encoding type "${opts.encoding}"`)}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile(path,data,opts={}){opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:()=>FS.currentPath,chdir(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomLeft=randomFill(randomBuffer).byteLength}return randomBuffer[--randomLeft]};FS.createDevice("/dev","random",randomByte);FS.createDevice("/dev","urandom",randomByte);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount(){var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup(parent,name){var fd=+name;var stream=FS.getStreamChecked(fd);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams(input,output,error){if(input){FS.createDevice("/dev","stdin",input)}else{FS.symlink("/dev/tty","/dev/stdin")}if(output){FS.createDevice("/dev","stdout",null,output)}else{FS.symlink("/dev/tty","/dev/stdout")}if(error){FS.createDevice("/dev","stderr",null,error)}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1);assert(stdin.fd===0,`invalid handle for stdin (${stdin.fd})`);assert(stdout.fd===1,`invalid handle for stdout (${stdout.fd})`);assert(stderr.fd===2,`invalid handle for stderr (${stderr.fd})`)},staticInit(){[44].forEach(code=>{FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=""});FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={MEMFS}},init(input,output,error){assert(!FS.initialized,"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)");FS.initialized=true;input??=Module["stdin"];output??=Module["stdout"];error??=Module["stderr"];FS.createStandardStreams(input,output,error)},quit(){FS.initialized=false;_fflush(0);for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]}setDataGetter(getter){this.getter=getter}cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText||"",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true}get length(){if(!this.lengthKnown){this.cacheLength()}return this._length}get chunkSize(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}if(typeof XMLHttpRequest!="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(key=>{var fn=node.stream_ops[key];stream_ops[key]=(...args)=>{FS.forceLoadFile(node);return fn(...args)}});function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);assert(size>=0);if(contents.slice){for(var i=0;i{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,HEAP8,ptr,length,position);return{ptr,allocated:true}};node.stream_ops=stream_ops;return node},absolutePath(){abort("FS.absolutePath has been removed; use PATH_FS.resolve instead")},createFolder(){abort("FS.createFolder has been removed; use FS.mkdir instead")},createLink(){abort("FS.createLink has been removed; use FS.symlink instead")},joinPath(){abort("FS.joinPath has been removed; use PATH.join instead")},mmapAlloc(){abort("FS.mmapAlloc has been replaced by the top level function mmapAlloc")},standardizePath(){abort("FS.standardizePath has been removed; use PATH.normalize instead")}};var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return PATH.join2(dir,path)},doStat(func,path,buf){var stat=func(path);HEAP32[buf>>2]=stat.dev;checkInt32(stat.dev);HEAP32[buf+4>>2]=stat.mode;checkInt32(stat.mode);HEAPU32[buf+8>>2]=stat.nlink;checkInt32(stat.nlink);HEAP32[buf+12>>2]=stat.uid;checkInt32(stat.uid);HEAP32[buf+16>>2]=stat.gid;checkInt32(stat.gid);HEAP32[buf+20>>2]=stat.rdev;checkInt32(stat.rdev);tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+24>>2]=tempI64[0],HEAP32[buf+28>>2]=tempI64[1];checkInt64(stat.size);HEAP32[buf+32>>2]=4096;checkInt32(4096);HEAP32[buf+36>>2]=stat.blocks;checkInt32(stat.blocks);var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();tempI64=[Math.floor(atime/1e3)>>>0,(tempDouble=Math.floor(atime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];checkInt64(Math.floor(atime/1e3));HEAPU32[buf+48>>2]=atime%1e3*1e3*1e3;checkInt32(atime%1e3*1e3*1e3);tempI64=[Math.floor(mtime/1e3)>>>0,(tempDouble=Math.floor(mtime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+56>>2]=tempI64[0],HEAP32[buf+60>>2]=tempI64[1];checkInt64(Math.floor(mtime/1e3));HEAPU32[buf+64>>2]=mtime%1e3*1e3*1e3;checkInt32(mtime%1e3*1e3*1e3);tempI64=[Math.floor(ctime/1e3)>>>0,(tempDouble=Math.floor(ctime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+72>>2]=tempI64[0],HEAP32[buf+76>>2]=tempI64[1];checkInt64(Math.floor(ctime/1e3));HEAPU32[buf+80>>2]=ctime%1e3*1e3*1e3;checkInt32(ctime%1e3*1e3*1e3);tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+88>>2]=tempI64[0],HEAP32[buf+92>>2]=tempI64[1];checkInt64(stat.ino);return 0},doMsync(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(flags&2){return 0}var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},getStreamFromFD(fd){var stream=FS.getStreamChecked(fd);return stream},varargs:undefined,getStr(ptr){var ret=UTF8ToString(ptr);return ret}};function ___syscall_faccessat(dirfd,path,amode,flags){try{path=SYSCALLS.getStr(path);assert(flags===0||flags==512);path=SYSCALLS.calculateAt(dirfd,path);if(amode&~7){return-28}var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function syscallGetVarargI(){assert(SYSCALLS.varargs!=undefined);var ret=HEAP32[+SYSCALLS.varargs>>2];SYSCALLS.varargs+=4;return ret}var syscallGetVarargP=syscallGetVarargI;function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=syscallGetVarargI();if(arg<0){return-28}while(FS.streams[arg]){arg++}var newStream;newStream=FS.dupStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=syscallGetVarargI();stream.flags|=arg;return 0}case 12:{var arg=syscallGetVarargP();var offset=0;HEAP16[arg+offset>>1]=2;checkInt16(2);return 0}case 13:case 14:return 0}return-28}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_fstat64(fd,buf){try{var stream=SYSCALLS.getStreamFromFD(fd);return SYSCALLS.doStat(FS.stat,stream.path,buf)}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var stringToUTF8=(str,outPtr,maxBytesToWrite)=>{assert(typeof maxBytesToWrite=="number","stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!");return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)};function ___syscall_getdents64(fd,dirp,count){try{var stream=SYSCALLS.getStreamFromFD(fd);stream.getdents||=FS.readdir(stream.path);var struct_size=280;var pos=0;var off=FS.llseek(stream,0,1);var idx=Math.floor(off/struct_size);while(idx>>0,(tempDouble=id,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[dirp+pos>>2]=tempI64[0],HEAP32[dirp+pos+4>>2]=tempI64[1];checkInt64(id);tempI64=[(idx+1)*struct_size>>>0,(tempDouble=(idx+1)*struct_size,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[dirp+pos+8>>2]=tempI64[0],HEAP32[dirp+pos+12>>2]=tempI64[1];checkInt64((idx+1)*struct_size);HEAP16[dirp+pos+16>>1]=280;checkInt16(280);HEAP8[dirp+pos+18]=type;checkInt8(type);stringToUTF8(name,dirp+pos+19,256);pos+=struct_size;idx+=1}FS.llseek(stream,idx*struct_size,0);return pos}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:{if(!stream.tty)return-59;return 0}case 21505:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcgets){var termios=stream.tty.ops.ioctl_tcgets(stream);var argp=syscallGetVarargP();HEAP32[argp>>2]=termios.c_iflag||0;checkInt32(termios.c_iflag||0);HEAP32[argp+4>>2]=termios.c_oflag||0;checkInt32(termios.c_oflag||0);HEAP32[argp+8>>2]=termios.c_cflag||0;checkInt32(termios.c_cflag||0);HEAP32[argp+12>>2]=termios.c_lflag||0;checkInt32(termios.c_lflag||0);for(var i=0;i<32;i++){HEAP8[argp+i+17]=termios.c_cc[i]||0;checkInt8(termios.c_cc[i]||0)}return 0}return 0}case 21510:case 21511:case 21512:{if(!stream.tty)return-59;return 0}case 21506:case 21507:case 21508:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcsets){var argp=syscallGetVarargP();var c_iflag=HEAP32[argp>>2];var c_oflag=HEAP32[argp+4>>2];var c_cflag=HEAP32[argp+8>>2];var c_lflag=HEAP32[argp+12>>2];var c_cc=[];for(var i=0;i<32;i++){c_cc.push(HEAP8[argp+i+17])}return stream.tty.ops.ioctl_tcsets(stream.tty,op,{c_iflag,c_oflag,c_cflag,c_lflag,c_cc})}return 0}case 21519:{if(!stream.tty)return-59;var argp=syscallGetVarargP();HEAP32[argp>>2]=0;checkInt32(0);return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=syscallGetVarargP();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tiocgwinsz){var winsize=stream.tty.ops.ioctl_tiocgwinsz(stream.tty);var argp=syscallGetVarargP();HEAP16[argp>>1]=winsize[0];checkInt16(winsize[0]);HEAP16[argp+2>>1]=winsize[1];checkInt16(winsize[1])}return 0}case 21524:{if(!stream.tty)return-59;return 0}case 21515:{if(!stream.tty)return-59;return 0}default:return-28}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_lstat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.doStat(FS.lstat,path,buf)}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_mkdirat(dirfd,path,mode){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_newfstatat(dirfd,path,buf,flags){try{path=SYSCALLS.getStr(path);var nofollow=flags&256;var allowEmpty=flags&4096;flags=flags&~6400;assert(!flags,`unknown flags in __syscall_newfstatat: ${flags}`);path=SYSCALLS.calculateAt(dirfd,path,allowEmpty);return SYSCALLS.doStat(nofollow?FS.lstat:FS.stat,path,buf)}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?syscallGetVarargI():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_rmdir(path){try{path=SYSCALLS.getStr(path);FS.rmdir(path);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_stat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.doStat(FS.stat,path,buf)}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_unlinkat(dirfd,path,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(flags===0){FS.unlink(path)}else if(flags===512){FS.rmdir(path)}else{abort("Invalid flags passed to unlinkat")}return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var __abort_js=()=>{abort("native code called abort()")};var nowIsMonotonic=1;var __emscripten_get_now_is_monotonic=()=>nowIsMonotonic;var __emscripten_memcpy_js=(dest,src,num)=>HEAPU8.copyWithin(dest,src,src+num);var __emscripten_runtime_keepalive_clear=()=>{noExitRuntime=false;runtimeKeepaliveCounter=0};var __emscripten_throw_longjmp=()=>{throw Infinity};var convertI32PairToI53Checked=(lo,hi)=>{assert(lo==lo>>>0||lo==(lo|0));assert(hi===(hi|0));return hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN};function __mmap_js(len,prot,flags,fd,offset_low,offset_high,allocated,addr){var offset=convertI32PairToI53Checked(offset_low,offset_high);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);var res=FS.mmap(stream,len,offset,prot,flags);var ptr=res.ptr;HEAP32[allocated>>2]=res.allocated;checkInt32(res.allocated);HEAPU32[addr>>2]=ptr;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function __munmap_js(addr,len,prot,flags,fd,offset_low,offset_high){var offset=convertI32PairToI53Checked(offset_low,offset_high);try{var stream=SYSCALLS.getStreamFromFD(fd);if(prot&2){SYSCALLS.doMsync(addr,stream,len,flags,offset)}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var __tzset_js=(timezone,daylight,std_name,dst_name)=>{var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAPU32[timezone>>2]=stdTimezoneOffset*60;checkInt32(stdTimezoneOffset*60);HEAP32[daylight>>2]=Number(winterOffset!=summerOffset);checkInt32(Number(winterOffset!=summerOffset));var extractZone=timezoneOffset=>{var sign=timezoneOffset>=0?"-":"+";var absOffset=Math.abs(timezoneOffset);var hours=String(Math.floor(absOffset/60)).padStart(2,"0");var minutes=String(absOffset%60).padStart(2,"0");return`UTC${sign}${hours}${minutes}`};var winterName=extractZone(winterOffset);var summerName=extractZone(summerOffset);assert(winterName);assert(summerName);assert(lengthBytesUTF8(winterName)<=16,`timezone name truncated to fit in TZNAME_MAX (${winterName})`);assert(lengthBytesUTF8(summerName)<=16,`timezone name truncated to fit in TZNAME_MAX (${summerName})`);if(summerOffsetDate.now();var getHeapMax=()=>2147483648;var _emscripten_get_heap_max=()=>getHeapMax();var _emscripten_get_now=()=>performance.now();var growMemory=size=>{var b=wasmMemory.buffer;var pages=(size-b.byteLength+65535)/65536|0;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){err(`growMemory: Attempted to grow heap from ${b.byteLength} bytes to ${size} bytes, but got error: ${e}`)}};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;assert(requestedSize>oldSize);var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){err(`Cannot enlarge memory, requested ${requestedSize} bytes, but the limit is ${maxHeapSize} bytes!`);return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignMemory(Math.max(requestedSize,overGrownHeapSize),65536));var t0=_emscripten_get_now();var replacement=growMemory(newSize);var t1=_emscripten_get_now();dbg(`Heap resize call from ${oldSize} to ${newSize} took ${t1-t0} msecs. Success: ${!!replacement}`);if(replacement){return true}}err(`Failed to grow the heap from ${oldSize} bytes to ${newSize} bytes, not enough memory!`);return false};var ENV={};var getExecutableName=()=>thisProgram||"./this.program";var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:lang,_:getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings};var stringToAscii=(str,buffer)=>{for(var i=0;i{var bufSize=0;getEnvStrings().forEach((string,i)=>{var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>2]=ptr;checkInt32(ptr);stringToAscii(string,ptr);bufSize+=string.length+1});return 0};var _environ_sizes_get=(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;checkInt32(strings.length);var bufSize=0;strings.forEach(string=>bufSize+=string.length+1);HEAPU32[penviron_buf_size>>2]=bufSize;checkInt32(bufSize);return 0};function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_fdstat_get(fd,pbuf){try{var rightsBase=0;var rightsInheriting=0;var flags=0;{var stream=SYSCALLS.getStreamFromFD(fd);var type=stream.tty?2:FS.isDir(stream.mode)?3:FS.isLink(stream.mode)?7:4}HEAP8[pbuf]=type;checkInt8(type);HEAP16[pbuf+2>>1]=flags;checkInt16(flags);tempI64=[rightsBase>>>0,(tempDouble=rightsBase,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[pbuf+8>>2]=tempI64[0],HEAP32[pbuf+12>>2]=tempI64[1];checkInt64(rightsBase);tempI64=[rightsInheriting>>>0,(tempDouble=rightsInheriting,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[pbuf+16>>2]=tempI64[0],HEAP32[pbuf+20>>2]=tempI64[1];checkInt64(rightsInheriting);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doReadv=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;checkInt32(num);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){var offset=convertI32PairToI53Checked(offset_low,offset_high);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>2]=tempI64[0],HEAP32[newOffset+4>>2]=tempI64[1];checkInt64(stream.position);if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doWritev=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;checkInt32(num);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var _getentropy=(buffer,size)=>{randomFill(HEAPU8.subarray(buffer,buffer+size));return 0};var _llvm_eh_typeid_for=type=>type;var runtimeKeepaliveCounter=0;var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){Module["onExit"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))};var getCFunc=ident=>{var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func};var writeArrayToMemory=(array,buffer)=>{assert(array.length>=0,"writeArrayToMemory array must have a length (should be an array or typed array)");HEAP8.set(array,buffer)};var stackAlloc=sz=>__emscripten_stack_alloc(sz);var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={string:str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}return ret},array:arr=>{var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string"){return UTF8ToString(ret)}if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;assert(returnType!=="array",'Return type should not be "array".');if(args){for(var i=0;i(...args)=>ccall(ident,returnType,argTypes,args,opts);FS.createPreloadedFile=FS_createPreloadedFile;FS.staticInit();function checkIncomingModuleAPI(){ignoredModuleProp("fetchSettings")}var wasmImports={__assert_fail:___assert_fail,__call_sighandler:___call_sighandler,__cxa_begin_catch:___cxa_begin_catch,__cxa_end_catch:___cxa_end_catch,__cxa_find_matching_catch_2:___cxa_find_matching_catch_2,__cxa_find_matching_catch_3:___cxa_find_matching_catch_3,__cxa_rethrow:___cxa_rethrow,__cxa_throw:___cxa_throw,__handle_stack_overflow:___handle_stack_overflow,__resumeException:___resumeException,__syscall_faccessat:___syscall_faccessat,__syscall_fcntl64:___syscall_fcntl64,__syscall_fstat64:___syscall_fstat64,__syscall_getdents64:___syscall_getdents64,__syscall_ioctl:___syscall_ioctl,__syscall_lstat64:___syscall_lstat64,__syscall_mkdirat:___syscall_mkdirat,__syscall_newfstatat:___syscall_newfstatat,__syscall_openat:___syscall_openat,__syscall_rmdir:___syscall_rmdir,__syscall_stat64:___syscall_stat64,__syscall_unlinkat:___syscall_unlinkat,_abort_js:__abort_js,_emscripten_get_now_is_monotonic:__emscripten_get_now_is_monotonic,_emscripten_memcpy_js:__emscripten_memcpy_js,_emscripten_runtime_keepalive_clear:__emscripten_runtime_keepalive_clear,_emscripten_throw_longjmp:__emscripten_throw_longjmp,_mmap_js:__mmap_js,_munmap_js:__munmap_js,_tzset_js:__tzset_js,emscripten_date_now:_emscripten_date_now,emscripten_get_heap_max:_emscripten_get_heap_max,emscripten_get_now:_emscripten_get_now,emscripten_resize_heap:_emscripten_resize_heap,environ_get:_environ_get,environ_sizes_get:_environ_sizes_get,fd_close:_fd_close,fd_fdstat_get:_fd_fdstat_get,fd_read:_fd_read,fd_seek:_fd_seek,fd_write:_fd_write,getentropy:_getentropy,invoke_d,invoke_diii,invoke_fi,invoke_fif,invoke_fifff,invoke_fii,invoke_fiii,invoke_fiiii,invoke_fiiiiii,invoke_fiiiiiii,invoke_fij,invoke_i,invoke_idiii,invoke_ii,invoke_iif,invoke_iifi,invoke_iifii,invoke_iifiiiii,invoke_iii,invoke_iiid,invoke_iiidii,invoke_iiif,invoke_iiiffi,invoke_iiii,invoke_iiiidi,invoke_iiiiffifffffffi,invoke_iiiifiii,invoke_iiiii,invoke_iiiiif,invoke_iiiiifi,invoke_iiiiii,invoke_iiiiiifi,invoke_iiiiiififiiiififiiiiiiiiiiiiiiiiiiii,invoke_iiiiiii,invoke_iiiiiiifii,invoke_iiiiiiii,invoke_iiiiiiiii,invoke_iiiiiiiiiffi,invoke_iiiiiiiiii,invoke_iiiiiiiiiifi,invoke_iiiiiiiiiii,invoke_iiiiiiiiiiii,invoke_iiiiiiiiiiiif,invoke_iiiiiiiiiiiiiii,invoke_iiiiiiij,invoke_iiiiiij,invoke_iiiiij,invoke_iiiij,invoke_iiij,invoke_iiiji,invoke_iiijii,invoke_iiijiii,invoke_iij,invoke_iijiii,invoke_iijj,invoke_iijji,invoke_iijjiii,invoke_ij,invoke_ijjiii,invoke_j,invoke_ji,invoke_jii,invoke_jiii,invoke_jiji,invoke_v,invoke_vdiii,invoke_vi,invoke_vid,invoke_vif,invoke_vififiif,invoke_vifii,invoke_vifiiifiiiiiiiiiiiiifiiii,invoke_vii,invoke_viid,invoke_viif,invoke_viiff,invoke_viifi,invoke_viifiii,invoke_viii,invoke_viiid,invoke_viiif,invoke_viiiffii,invoke_viiiffiiii,invoke_viiifi,invoke_viiii,invoke_viiiif,invoke_viiiii,invoke_viiiiif,invoke_viiiiii,invoke_viiiiiid,invoke_viiiiiif,invoke_viiiiiifi,invoke_viiiiiifif,invoke_viiiiiifii,invoke_viiiiiii,invoke_viiiiiiidiiii,invoke_viiiiiiii,invoke_viiiiiiiif,invoke_viiiiiiiii,invoke_viiiiiiiiii,invoke_viiiiiiiiiidii,invoke_viiiiiiiiiii,invoke_viiiiiiiiiiii,invoke_viiiiiiiiiiiiii,invoke_viiiiiiiiiiiiiiii,invoke_viiiiij,invoke_viiiiiji,invoke_viiiiji,invoke_viiiijiiifi,invoke_viiij,invoke_viiiji,invoke_viiijii,invoke_viiijjji,invoke_viij,invoke_viiji,invoke_viijii,invoke_viijiiii,invoke_viijj,invoke_vij,invoke_viji,invoke_vijif,invoke_vijii,invoke_vijj,invoke_vjjiii,llvm_eh_typeid_for:_llvm_eh_typeid_for,proc_exit:_proc_exit};var wasmExports=createWasm();var ___wasm_call_ctors=createExportWrapper("__wasm_call_ctors",0);var _web_engine_create=Module["_web_engine_create"]=createExportWrapper("web_engine_create",0);var _web_engine_get_memory_stats=Module["_web_engine_get_memory_stats"]=createExportWrapper("web_engine_get_memory_stats",1);var _web_engine_destroy=Module["_web_engine_destroy"]=createExportWrapper("web_engine_destroy",1);var _fflush=createExportWrapper("fflush",1);var _web_engine_get_live_handles=Module["_web_engine_get_live_handles"]=createExportWrapper("web_engine_get_live_handles",0);var _web_engine_get_allocated_bytes=Module["_web_engine_get_allocated_bytes"]=createExportWrapper("web_engine_get_allocated_bytes",0);var _web_engine_open_blend=Module["_web_engine_open_blend"]=createExportWrapper("web_engine_open_blend",3);var _web_engine_apply_command=Module["_web_engine_apply_command"]=createExportWrapper("web_engine_apply_command",3);var _web_engine_decimate_apply=Module["_web_engine_decimate_apply"]=createExportWrapper("web_engine_decimate_apply",35);var _web_engine_append_library_object=Module["_web_engine_append_library_object"]=createExportWrapper("web_engine_append_library_object",5);var _web_engine_undo=Module["_web_engine_undo"]=createExportWrapper("web_engine_undo",1);var _web_engine_redo=Module["_web_engine_redo"]=createExportWrapper("web_engine_redo",1);var _web_engine_get_scene_snapshot=Module["_web_engine_get_scene_snapshot"]=createExportWrapper("web_engine_get_scene_snapshot",3);var _web_engine_get_scene_metadata=Module["_web_engine_get_scene_metadata"]=createExportWrapper("web_engine_get_scene_metadata",3);var _web_engine_get_scene_geometry=Module["_web_engine_get_scene_geometry"]=createExportWrapper("web_engine_get_scene_geometry",3);var _web_engine_get_scene_delta=Module["_web_engine_get_scene_delta"]=createExportWrapper("web_engine_get_scene_delta",3);var _web_engine_get_packed_asset=Module["_web_engine_get_packed_asset"]=createExportWrapper("web_engine_get_packed_asset",5);var _web_engine_evaluate_depsgraph=Module["_web_engine_evaluate_depsgraph"]=createExportWrapper("web_engine_evaluate_depsgraph",3);var _web_engine_save_blend=Module["_web_engine_save_blend"]=createExportWrapper("web_engine_save_blend",3);var _malloc=Module["_malloc"]=createExportWrapper("malloc",1);var _web_engine_free_buffer=Module["_web_engine_free_buffer"]=createExportWrapper("web_engine_free_buffer",1);var _free=Module["_free"]=createExportWrapper("free",1);var _web_engine_last_error_code=Module["_web_engine_last_error_code"]=createExportWrapper("web_engine_last_error_code",0);var _web_engine_last_error_message=Module["_web_engine_last_error_message"]=createExportWrapper("web_engine_last_error_message",0);var _strerror=createExportWrapper("strerror",1);var _emscripten_builtin_memalign=createExportWrapper("emscripten_builtin_memalign",2);var _setThrew=createExportWrapper("setThrew",2);var __emscripten_tempret_set=createExportWrapper("_emscripten_tempret_set",1);var __emscripten_tempret_get=createExportWrapper("_emscripten_tempret_get",0);var _emscripten_stack_init=()=>(_emscripten_stack_init=wasmExports["emscripten_stack_init"])();var _emscripten_stack_get_free=()=>(_emscripten_stack_get_free=wasmExports["emscripten_stack_get_free"])();var _emscripten_stack_get_base=()=>(_emscripten_stack_get_base=wasmExports["emscripten_stack_get_base"])();var _emscripten_stack_get_end=()=>(_emscripten_stack_get_end=wasmExports["emscripten_stack_get_end"])();var __emscripten_stack_restore=a0=>(__emscripten_stack_restore=wasmExports["_emscripten_stack_restore"])(a0);var __emscripten_stack_alloc=a0=>(__emscripten_stack_alloc=wasmExports["_emscripten_stack_alloc"])(a0);var _emscripten_stack_get_current=()=>(_emscripten_stack_get_current=wasmExports["emscripten_stack_get_current"])();var ___cxa_decrement_exception_refcount=createExportWrapper("__cxa_decrement_exception_refcount",1);var ___cxa_increment_exception_refcount=createExportWrapper("__cxa_increment_exception_refcount",1);var ___cxa_can_catch=createExportWrapper("__cxa_can_catch",3);var ___cxa_get_exception_ptr=createExportWrapper("__cxa_get_exception_ptr",1);var ___set_stack_limits=Module["___set_stack_limits"]=createExportWrapper("__set_stack_limits",2);var dynCall_viij=Module["dynCall_viij"]=createExportWrapper("dynCall_viij",5);var dynCall_viiji=Module["dynCall_viiji"]=createExportWrapper("dynCall_viiji",6);var dynCall_viijiiii=Module["dynCall_viijiiii"]=createExportWrapper("dynCall_viijiiii",9);var dynCall_vij=Module["dynCall_vij"]=createExportWrapper("dynCall_vij",4);var dynCall_viijii=Module["dynCall_viijii"]=createExportWrapper("dynCall_viijii",7);var dynCall_viiiijiiifi=Module["dynCall_viiiijiiifi"]=createExportWrapper("dynCall_viiiijiiifi",12);var dynCall_viiijjji=Module["dynCall_viiijjji"]=createExportWrapper("dynCall_viiijjji",11);var dynCall_viiiiji=Module["dynCall_viiiiji"]=createExportWrapper("dynCall_viiiiji",8);var dynCall_viiiji=Module["dynCall_viiiji"]=createExportWrapper("dynCall_viiiji",7);var dynCall_ij=Module["dynCall_ij"]=createExportWrapper("dynCall_ij",3);var dynCall_viji=Module["dynCall_viji"]=createExportWrapper("dynCall_viji",5);var dynCall_iij=Module["dynCall_iij"]=createExportWrapper("dynCall_iij",4);var dynCall_fij=Module["dynCall_fij"]=createExportWrapper("dynCall_fij",4);var dynCall_vijf=Module["dynCall_vijf"]=createExportWrapper("dynCall_vijf",5);var dynCall_jiii=Module["dynCall_jiii"]=createExportWrapper("dynCall_jiii",4);var dynCall_viiij=Module["dynCall_viiij"]=createExportWrapper("dynCall_viiij",6);var dynCall_iiijii=Module["dynCall_iiijii"]=createExportWrapper("dynCall_iiijii",7);var dynCall_iiijiii=Module["dynCall_iiijiii"]=createExportWrapper("dynCall_iiijiii",8);var dynCall_iiij=Module["dynCall_iiij"]=createExportWrapper("dynCall_iiij",5);var dynCall_vjjiii=Module["dynCall_vjjiii"]=createExportWrapper("dynCall_vjjiii",8);var dynCall_ijjiii=Module["dynCall_ijjiii"]=createExportWrapper("dynCall_ijjiii",8);var dynCall_iijiii=Module["dynCall_iijiii"]=createExportWrapper("dynCall_iijiii",7);var dynCall_iijjiii=Module["dynCall_iijjiii"]=createExportWrapper("dynCall_iijjiii",9);var dynCall_iiiji=Module["dynCall_iiiji"]=createExportWrapper("dynCall_iiiji",6);var dynCall_jii=Module["dynCall_jii"]=createExportWrapper("dynCall_jii",3);var dynCall_iijj=Module["dynCall_iijj"]=createExportWrapper("dynCall_iijj",6);var dynCall_vijj=Module["dynCall_vijj"]=createExportWrapper("dynCall_vijj",6);var dynCall_ji=Module["dynCall_ji"]=createExportWrapper("dynCall_ji",2);var dynCall_vijii=Module["dynCall_vijii"]=createExportWrapper("dynCall_vijii",6);var dynCall_vijif=Module["dynCall_vijif"]=createExportWrapper("dynCall_vijif",6);var dynCall_viiiiij=Module["dynCall_viiiiij"]=createExportWrapper("dynCall_viiiiij",8);var dynCall_viiiiiji=Module["dynCall_viiiiiji"]=createExportWrapper("dynCall_viiiiiji",9);var dynCall_iiiij=Module["dynCall_iiiij"]=createExportWrapper("dynCall_iiiij",6);var dynCall_iijji=Module["dynCall_iijji"]=createExportWrapper("dynCall_iijji",7);var dynCall_j=Module["dynCall_j"]=createExportWrapper("dynCall_j",1);var dynCall_iiiiiiij=Module["dynCall_iiiiiiij"]=createExportWrapper("dynCall_iiiiiiij",9);var dynCall_viijj=Module["dynCall_viijj"]=createExportWrapper("dynCall_viijj",7);var dynCall_iiiiij=Module["dynCall_iiiiij"]=createExportWrapper("dynCall_iiiiij",7);var dynCall_viiijii=Module["dynCall_viiijii"]=createExportWrapper("dynCall_viiijii",8);var dynCall_jij=Module["dynCall_jij"]=createExportWrapper("dynCall_jij",4);var dynCall_vijji=Module["dynCall_vijji"]=createExportWrapper("dynCall_vijji",7);var dynCall_iiiiiij=Module["dynCall_iiiiiij"]=createExportWrapper("dynCall_iiiiiij",8);var dynCall_jiji=Module["dynCall_jiji"]=createExportWrapper("dynCall_jiji",5);var dynCall_iiiiijj=Module["dynCall_iiiiijj"]=createExportWrapper("dynCall_iiiiijj",9);var dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=createExportWrapper("dynCall_iiiiiijj",10);function invoke_ii(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_v(index){var sp=stackSave();try{getWasmTableEntry(index)()}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viii(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiii(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vi(index,a1){var sp=stackSave();try{getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vif(index,a1,a2){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_fi(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiif(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vii(index,a1,a2){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiii(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_i(index){var sp=stackSave();try{return getWasmTableEntry(index)()}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiii(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_fiii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_diii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viifiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiffi(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiiifii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiffifffffffi(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiifi(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiiii(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiiiiiifi(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiififiiiififiiiiiiiiiiiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22,a23,a24,a25,a26,a27,a28,a29,a30,a31,a32,a33,a34,a35){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22,a23,a24,a25,a26,a27,a28,a29,a30,a31,a32,a33,a34,a35)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vififiif(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vifii(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_fiiii(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viif(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viifi(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiiiif(index,a1,a2,a3,a4,a5,a6,a7,a8,a9){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiif(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiif(index,a1,a2,a3,a4,a5){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_fif(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiifi(index,a1,a2,a3,a4,a5,a6,a7,a8){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iifii(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_fii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_fiiiiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iifi(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiif(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vdiii(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_idiii(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiif(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiifii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiifiii(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_d(index){var sp=stackSave();try{return getWasmTableEntry(index)()}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_fifff(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiifi(index,a1,a2,a3,a4,a5){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_fiiiiiii(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiifi(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vid(index,a1,a2){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiff(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iif(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiiiiiffi(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiffiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iifiiiii(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiifif(index,a1,a2,a3,a4,a5,a6,a7,a8,a9){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiif(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vifiiifiiiiiiiiiiiiifiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22,a23,a24){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22,a23,a24)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiiiiiiiif(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiid(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiiidiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiiiiiidii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiidi(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viid(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiiiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiidii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiid(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiffii(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiid(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_fij(index,a1,a2,a3){var sp=stackSave();try{return dynCall_fij(index,a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viij(index,a1,a2,a3,a4){var sp=stackSave();try{dynCall_viij(index,a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iij(index,a1,a2,a3){var sp=stackSave();try{return dynCall_iij(index,a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_ij(index,a1,a2){var sp=stackSave();try{return dynCall_ij(index,a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vij(index,a1,a2,a3){var sp=stackSave();try{dynCall_vij(index,a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_jiii(index,a1,a2,a3){var sp=stackSave();try{return dynCall_jiii(index,a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiji(index,a1,a2,a3,a4,a5){var sp=stackSave();try{dynCall_viiji(index,a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viijiiii(index,a1,a2,a3,a4,a5,a6,a7,a8){var sp=stackSave();try{dynCall_viijiiii(index,a1,a2,a3,a4,a5,a6,a7,a8)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viijii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{dynCall_viijii(index,a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiijiiifi(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11){var sp=stackSave();try{dynCall_viiiijiiifi(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiijjji(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10){var sp=stackSave();try{dynCall_viiijjji(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiji(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{dynCall_viiiiji(index,a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiji(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{dynCall_viiiji(index,a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiij(index,a1,a2,a3,a4,a5){var sp=stackSave();try{dynCall_viiij(index,a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiijii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return dynCall_iiijii(index,a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiijiii(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{return dynCall_iiijiii(index,a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiij(index,a1,a2,a3,a4){var sp=stackSave();try{return dynCall_iiij(index,a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viji(index,a1,a2,a3,a4){var sp=stackSave();try{dynCall_viji(index,a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vijii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{dynCall_vijii(index,a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiji(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return dynCall_iiiji(index,a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iijiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return dynCall_iijiii(index,a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iijjiii(index,a1,a2,a3,a4,a5,a6,a7,a8){var sp=stackSave();try{return dynCall_iijjiii(index,a1,a2,a3,a4,a5,a6,a7,a8)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vjjiii(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{dynCall_vjjiii(index,a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_ijjiii(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{return dynCall_ijjiii(index,a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iijj(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return dynCall_iijj(index,a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vijj(index,a1,a2,a3,a4,a5){var sp=stackSave();try{dynCall_vijj(index,a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiij(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{dynCall_viiiiij(index,a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vijif(index,a1,a2,a3,a4,a5){var sp=stackSave();try{dynCall_vijif(index,a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiji(index,a1,a2,a3,a4,a5,a6,a7,a8){var sp=stackSave();try{dynCall_viiiiiji(index,a1,a2,a3,a4,a5,a6,a7,a8)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iijji(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return dynCall_iijji(index,a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viijj(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{dynCall_viijj(index,a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_ji(index,a1){var sp=stackSave();try{return dynCall_ji(index,a1)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiij(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return dynCall_iiiiij(index,a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiij(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return dynCall_iiiij(index,a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_j(index){var sp=stackSave();try{return dynCall_j(index)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiiij(index,a1,a2,a3,a4,a5,a6,a7,a8){var sp=stackSave();try{return dynCall_iiiiiiij(index,a1,a2,a3,a4,a5,a6,a7,a8)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiijii(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{dynCall_viiijii(index,a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_jii(index,a1,a2){var sp=stackSave();try{return dynCall_jii(index,a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiij(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{return dynCall_iiiiiij(index,a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_jiji(index,a1,a2,a3,a4){var sp=stackSave();try{return dynCall_jiji(index,a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}Module["ccall"]=ccall;Module["cwrap"]=cwrap;Module["UTF8ToString"]=UTF8ToString;var missingLibrarySymbols=["writeI53ToI64","writeI53ToI64Clamped","writeI53ToI64Signaling","writeI53ToU64Clamped","writeI53ToU64Signaling","readI53FromI64","readI53FromU64","convertI32PairToI53","convertU32PairToI53","getTempRet0","exitJS","inetPton4","inetNtop4","inetPton6","inetNtop6","readSockaddr","writeSockaddr","emscriptenLog","readEmAsmArgs","jstoi_q","listenOnce","autoResumeAudioContext","dynCallLegacy","getDynCaller","dynCall","handleException","runtimeKeepalivePush","runtimeKeepalivePop","callUserCallback","maybeExit","asmjsMangle","HandleAllocator","getNativeTypeSize","STACK_SIZE","STACK_ALIGN","POINTER_SIZE","ASSERTIONS","uleb128Encode","sigToWasmTypes","generateFuncType","convertJsFunctionToWasm","getEmptyTableSlot","updateTableMap","getFunctionAddress","addFunction","removeFunction","reallyNegative","unSign","strLen","reSign","formatString","intArrayToString","AsciiToString","UTF16ToString","stringToUTF16","lengthBytesUTF16","UTF32ToString","stringToUTF32","lengthBytesUTF32","stringToNewUTF8","registerKeyEventCallback","maybeCStringToJsString","findEventTarget","getBoundingClientRect","fillMouseEventData","registerMouseEventCallback","registerWheelEventCallback","registerUiEventCallback","registerFocusEventCallback","fillDeviceOrientationEventData","registerDeviceOrientationEventCallback","fillDeviceMotionEventData","registerDeviceMotionEventCallback","screenOrientation","fillOrientationChangeEventData","registerOrientationChangeEventCallback","fillFullscreenChangeEventData","registerFullscreenChangeEventCallback","JSEvents_requestFullscreen","JSEvents_resizeCanvasForFullscreen","registerRestoreOldStyle","hideEverythingExceptGivenElement","restoreHiddenElements","setLetterbox","softFullscreenResizeWebGLRenderTarget","doRequestFullscreen","fillPointerlockChangeEventData","registerPointerlockChangeEventCallback","registerPointerlockErrorEventCallback","requestPointerLock","fillVisibilityChangeEventData","registerVisibilityChangeEventCallback","registerTouchEventCallback","fillGamepadEventData","registerGamepadEventCallback","registerBeforeUnloadEventCallback","fillBatteryEventData","battery","registerBatteryEventCallback","setCanvasElementSize","getCanvasElementSize","jsStackTrace","getCallstack","convertPCtoSourceLocation","checkWasiClock","wasiRightsToMuslOFlags","wasiOFlagsToMuslOFlags","createDyncallWrapper","safeSetTimeout","setImmediateWrapped","clearImmediateWrapped","polyfillSetImmediate","registerPostMainLoop","registerPreMainLoop","getPromise","makePromise","idsToPromises","makePromiseCallback","Browser_asyncPrepareDataCounter","safeRequestAnimationFrame","isLeapYear","ydayFromDate","arraySum","addDays","getSocketFromFD","getSocketAddress","FS_unlink","FS_mkdirTree","_setNetworkCallback","heapObjectForWebGLType","toTypedArrayIndex","webgl_enable_ANGLE_instanced_arrays","webgl_enable_OES_vertex_array_object","webgl_enable_WEBGL_draw_buffers","webgl_enable_WEBGL_multi_draw","webgl_enable_EXT_polygon_offset_clamp","webgl_enable_EXT_clip_control","webgl_enable_WEBGL_polygon_mode","emscriptenWebGLGet","computeUnpackAlignedImageSize","colorChannelsInGlTextureFormat","emscriptenWebGLGetTexPixelData","emscriptenWebGLGetUniform","webglGetUniformLocation","webglPrepareUniformLocationsBeforeFirstUse","webglGetLeftBracePos","emscriptenWebGLGetVertexAttrib","__glGetActiveAttribOrUniform","writeGLArray","registerWebGlEventCallback","runAndAbortIfError","ALLOC_NORMAL","ALLOC_STACK","allocate","writeStringToMemory","writeAsciiToMemory","setErrNo","demangle","stackTrace"];missingLibrarySymbols.forEach(missingLibrarySymbol);var unexportedSymbols=["run","addOnPreRun","addOnInit","addOnPreMain","addOnExit","addOnPostRun","addRunDependency","removeRunDependency","out","err","callMain","abort","wasmMemory","wasmExports","writeStackCookie","checkStackCookie","convertI32PairToI53Checked","stackSave","stackRestore","stackAlloc","setTempRet0","ptrToString","zeroMemory","getHeapMax","growMemory","ENV","setStackLimits","ERRNO_CODES","strError","DNS","Protocols","Sockets","initRandomFill","randomFill","timers","warnOnce","readEmAsmArgsArray","jstoi_s","getExecutableName","keepRuntimeAlive","asyncLoad","alignMemory","mmapAlloc","wasmTable","noExitRuntime","getCFunc","freeTableIndexes","functionsInTableMap","setValue","getValue","PATH","PATH_FS","UTF8Decoder","UTF8ArrayToString","stringToUTF8Array","stringToUTF8","lengthBytesUTF8","intArrayFromString","stringToAscii","UTF16Decoder","stringToUTF8OnStack","writeArrayToMemory","JSEvents","specialHTMLTargets","findCanvasEventTarget","currentFullscreenStrategy","restoreOldWindowedStyle","UNWIND_CACHE","ExitStatus","getEnvStrings","doReadv","doWritev","promiseMap","uncaughtExceptionCount","exceptionLast","exceptionCaught","ExceptionInfo","findMatchingCatch","Browser","getPreloadedImageData__data","wget","MONTH_DAYS_REGULAR","MONTH_DAYS_LEAP","MONTH_DAYS_REGULAR_CUMULATIVE","MONTH_DAYS_LEAP_CUMULATIVE","SYSCALLS","preloadPlugins","FS_createPreloadedFile","FS_modeStringToFlags","FS_getMode","FS_stdin_getChar_buffer","FS_stdin_getChar","FS_createPath","FS_createDevice","FS_readFile","FS","FS_createDataFile","FS_createLazyFile","MEMFS","TTY","PIPEFS","SOCKFS","tempFixedLengthArray","miniTempWebGLFloatBuffers","miniTempWebGLIntBuffers","GL","AL","GLUT","EGL","GLEW","IDBStore","SDL","SDL_gfx","allocateUTF8","allocateUTF8OnStack","print","printErr"];unexportedSymbols.forEach(unexportedRuntimeSymbol);var calledRun;var calledPrerun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function stackCheckInit(){_emscripten_stack_init();writeStackCookie()}function run(){if(runDependencies>0){return}stackCheckInit();if(!calledPrerun){calledPrerun=1;preRun();if(runDependencies>0){return}}function doRun(){if(calledRun)return;calledRun=1;Module["calledRun"]=1;if(ABORT)return;initRuntime();readyPromiseResolve(Module);Module["onRuntimeInitialized"]?.();assert(!Module["_main"],'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]');postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(()=>{setTimeout(()=>Module["setStatus"](""),1);doRun()},1)}else{doRun()}checkStackCookie()}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run();moduleRtn=readyPromise;for(const prop of Object.keys(Module)){if(!(prop in moduleArg)){Object.defineProperty(moduleArg,prop,{configurable:true,get(){abort(`Access to module property ('${prop}') is no longer possible via the module constructor argument; Instead, use the result of the module constructor.`)}})}} + + + return moduleRtn; +} +); +})(); +export default Module; diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/web/app/src/vendor/blender/web_engine.wasm b/tests/golden/corrective/C0-002/staged/source-snapshot/files/web/app/src/vendor/blender/web_engine.wasm new file mode 100644 index 00000000..71539893 Binary files /dev/null and b/tests/golden/corrective/C0-002/staged/source-snapshot/files/web/app/src/vendor/blender/web_engine.wasm differ diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/web/engine/web_engine_native_reader_stub.cpp b/tests/golden/corrective/C0-002/staged/source-snapshot/files/web/engine/web_engine_native_reader_stub.cpp new file mode 100644 index 00000000..c5cab5f9 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/web/engine/web_engine_native_reader_stub.cpp @@ -0,0 +1,460 @@ +#include "web_engine_blend_reader.h" +#include "web_engine_decimate.h" +#include "web_engine_depsgraph.h" +#include "web_engine_main_state.h" + +struct WebBlendMainState {}; + +void web_engine_blender_runtime_initialize() {} + +WebBlendMainState *web_engine_blend_main_open(const uint8_t *, uint32_t, std::string &error) +{ + error = "native smoke Main stub"; + return nullptr; +} + +void web_engine_blend_main_free(WebBlendMainState *) {} + +bool web_engine_blend_main_set_frame(WebBlendMainState *, int, std::string &error) +{ + error = "native smoke Main stub"; + return false; +} + +bool web_engine_blend_main_set_visibility(WebBlendMainState *, const char *, bool, std::string &error) +{ + error = "native smoke Main stub"; + return false; +} + +bool web_engine_blend_main_set_modifier_enabled(WebBlendMainState *, + const char *, + const char *, + bool, + std::string &error) +{ + error = "native smoke Main stub"; + return false; +} + +bool web_engine_blend_main_replace_mesh(WebBlendMainState *, + const char *, + const std::vector &, + const std::vector &, + const std::vector &, + const std::vector &, + const std::vector &, + std::string &error) +{ + error = "native smoke Main stub"; + return false; +} + +bool web_engine_blend_main_create_primitive(WebBlendMainState *, + const char *, + const char *, + const std::vector &, + std::string &, + std::string &error) +{ + error = "native smoke Main stub"; + return false; +} + +bool web_engine_blend_main_append_object(WebBlendMainState *, + const uint8_t *, + uint32_t, + const char *, + const char *, + const char *, + const char *, + const char *, + std::string &, + std::string &error) +{ + error = "native smoke Main stub"; + return false; +} + +bool web_engine_blend_main_duplicate_object(WebBlendMainState *, + const char *, + const std::vector &, + bool, + std::string &, + std::string &error) +{ + error = "native smoke Main stub"; + return false; +} + +bool web_engine_blend_main_delete_object(WebBlendMainState *, const char *, std::string &error) +{ + error = "native smoke Main stub"; + return false; +} + +bool web_engine_blend_main_set_transform(WebBlendMainState *, + const char *, + const std::vector &, + const std::vector &, + const std::vector &, + std::string &error) +{ + error = "native smoke Main stub"; + return false; +} + +bool web_engine_blend_main_translate_vertices(WebBlendMainState *, + const char *, + const std::vector &, + const std::vector &, + std::string &error) +{ + error = "native smoke Main stub"; + return false; +} + +namespace { + +bool native_main_unavailable(std::string &error) +{ + error = "native smoke Main stub"; + return false; +} + +} // namespace + +#define WEB_NATIVE_MAIN_STUB(name, ...) \ + bool name(__VA_ARGS__, std::string &error) \ + { \ + return native_main_unavailable(error); \ + } + +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_set_modifier_visibility, + WebBlendMainState *, + const char *, + const char *, + bool, + bool, + bool, + bool) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_set_sculpt_attributes, + WebBlendMainState *, + const char *, + const std::vector &, + const std::vector &) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_sculpt_stroke, WebBlendMainState *, const char *) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_mesh_edit, + WebBlendMainState *, + const char *, + const char *, + const char *, + const std::vector &, + const std::vector &, + float, + int) +WEB_NATIVE_MAIN_STUB( + web_engine_blend_main_create_uv_map, WebBlendMainState *, const char *, const char *) +WEB_NATIVE_MAIN_STUB( + web_engine_blend_main_set_active_uv_map, WebBlendMainState *, const char *, const char *) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_unwrap_uv, + WebBlendMainState *, + const char *, + const std::vector &, + const char *) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_add_material_slot, + WebBlendMainState *, + const char *, + const char *, + std::string &) +WEB_NATIVE_MAIN_STUB( + web_engine_blend_main_remove_material_slot, WebBlendMainState *, const char *, int) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_assign_material_faces, + WebBlendMainState *, + const char *, + const std::vector &, + int) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_set_material_principled, + WebBlendMainState *, + const char *, + const std::vector &, + float, + float, + const std::vector &, + float, + float, + float, + float, + float, + float, + float) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_import_image, + WebBlendMainState *, + const char *, + const char *, + int, + int, + const char *, + std::string &) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_set_material_image, + WebBlendMainState *, + const char *, + const char *, + const char *, + const char *) +WEB_NATIVE_MAIN_STUB( + web_engine_blend_main_set_shader_graph, WebBlendMainState *, const char *, const char *) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_insert_keyframe, + WebBlendMainState *, + const char *, + int, + const char *, + const char *) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_delete_keyframe, + WebBlendMainState *, + const char *, + int, + const char *) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_set_fcurve_interpolation, + WebBlendMainState *, + const char *, + const char *, + const char *) +WEB_NATIVE_MAIN_STUB( + web_engine_blend_main_set_active_action, WebBlendMainState *, const char *, const char *) +WEB_NATIVE_MAIN_STUB( + web_engine_blend_main_set_nla_stack, WebBlendMainState *, const char *, const char *) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_set_constraint, + WebBlendMainState *, + const char *, + const char *, + bool, + float) +WEB_NATIVE_MAIN_STUB( + web_engine_blend_main_set_parent, WebBlendMainState *, const char *, const char *, bool) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_create_collection, + WebBlendMainState *, + const char *, + const char *, + std::string &) +WEB_NATIVE_MAIN_STUB( + web_engine_blend_main_move_to_collection, WebBlendMainState *, const char *, const char *) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_rename_id, + WebBlendMainState *, + const char *, + const char *, + std::string &) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_join_objects, + WebBlendMainState *, + const char *, + const std::vector &) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_separate_faces, + WebBlendMainState *, + const char *, + const std::vector &, + const char *, + std::string &) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_apply_transform, WebBlendMainState *, const char *) +WEB_NATIVE_MAIN_STUB( + web_engine_blend_main_set_origin, WebBlendMainState *, const char *, const char *) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_create_curve, + WebBlendMainState *, + const char *, + const char *, + const std::vector &, + bool, + int, + std::string &, + std::string &) +WEB_NATIVE_MAIN_STUB( + web_engine_blend_main_delete_non_mesh_data, WebBlendMainState *, const char *) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_set_curve_control_points, + WebBlendMainState *, + const char *, + const std::vector &, + const std::vector &, + int) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_set_curve_handle, + WebBlendMainState *, + const char *, + uint32_t, + bool, + const std::vector &) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_set_curve_topology, + WebBlendMainState *, + const char *, + const WebCurveTopologyEdit &) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_set_curve_splines, + WebBlendMainState *, + const char *, + const std::vector &, + const std::vector &, + const std::vector &, + const std::vector &, + const std::vector &) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_set_surface_topology, + WebBlendMainState *, + const char *, + const std::vector &, + const std::vector &, + const std::vector &) +WEB_NATIVE_MAIN_STUB( + web_engine_blend_main_set_font_body, WebBlendMainState *, const char *, const char *) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_set_font_properties, + WebBlendMainState *, + const char *, + const WebFontPropertiesEdit &) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_set_font_advanced, + WebBlendMainState *, + const char *, + const std::vector &, + const std::vector &, + int) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_import_vfont, + WebBlendMainState *, + const char *, + const char *, + const char *, + std::string &) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_set_font_links, + WebBlendMainState *, + const char *, + const std::array &) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_set_volume_properties, + WebBlendMainState *, + const char *, + const WebVolumePropertiesEdit &) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_set_metaball_elements, + WebBlendMainState *, + const char *, + const std::vector &) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_grease_pencils_json, + WebBlendMainState *, + std::string &) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_geometry_node_graphs_json, + WebBlendMainState *, + std::string &) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_physics_simulation_json, + WebBlendMainState *, + std::string &) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_particle_settings_json, + WebBlendMainState *, + std::string &) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_create_grease_pencil_layer, + WebBlendMainState *, + const char *, + const char *) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_remove_grease_pencil_layer, + WebBlendMainState *, + const char *, + const char *) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_move_grease_pencil_layer, + WebBlendMainState *, + const char *, + const char *, + const char *) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_move_grease_pencil_frame, + WebBlendMainState *, + const char *, + const char *, + int, + int, + const char *) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_insert_grease_pencil_frame, + WebBlendMainState *, + const char *, + const char *, + int, + int) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_remove_grease_pencil_frame, + WebBlendMainState *, + const char *, + const char *, + int) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_set_grease_pencil_strokes, + WebBlendMainState *, + const char *, + const char *, + int, + const std::vector &) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_set_vertex_colors, + WebBlendMainState *, + const char *, + const char *, + const char *, + const std::vector &, + const std::vector &) +WEB_NATIVE_MAIN_STUB(web_engine_blend_main_set_vertex_weights, + WebBlendMainState *, + const char *, + const char *, + const std::vector &, + const std::vector &, + bool, + uint32_t, + bool, + int, + float) +WEB_NATIVE_MAIN_STUB( + web_engine_blend_main_set_render_properties, WebBlendMainState *, const char *, const char *) + +#undef WEB_NATIVE_MAIN_STUB + +bool web_engine_blend_main_write(WebBlendMainState *, std::vector &, std::string &error) +{ + error = "native smoke Main stub"; + return false; +} + +WebBlendReadResult web_engine_read_blend_scene_ir(const uint8_t *, uint32_t, uint64_t) +{ + // The native ABI smoke test exercises handle/error ownership. The real reader is linked + // by the Blender/Emscripten target and covered by the WASM fixture smoke test. + return {false, "native smoke reader stub", {}, {}, 0}; +} + +WebDepsgraphEvaluationResult web_engine_evaluate_blender_depsgraph(const uint8_t *, + uint32_t, + int) +{ + return {false, "native smoke depsgraph stub", {}}; +} + +extern "C" int web_engine_decimate_apply(const float *, + uint32_t, + const uint32_t *, + uint32_t, + uint32_t, + float, + uint32_t, + float, + uint32_t, + uint32_t, + uint32_t, + int32_t, + float, + const float *, + float, + uint32_t, + const float *, + const float *, + const uint32_t *, + float *, + uint32_t, + uint32_t *, + uint32_t *, + uint32_t, + uint32_t *, + float *, + uint32_t, + uint32_t *, + float *, + uint32_t, + uint32_t *, + uint32_t *, + uint32_t, + uint32_t *, + uint32_t *) +{ + return WEB_ENGINE_DECIMATE_NOT_IMPLEMENTED; +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/web/package.json b/tests/golden/corrective/C0-002/staged/source-snapshot/files/web/package.json new file mode 100644 index 00000000..4706d8b7 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/web/package.json @@ -0,0 +1,306 @@ +{ + "name": "blender-web-editor", + "private": true, + "version": "0.1.0-rc.1", + "type": "module", + "scripts": { + "dev": "vite --config app/vite.config.ts", + "build": "tsc -p tsconfig.json && vite build --config app/vite.config.ts", + "typecheck": "tsc -p tsconfig.json --noEmit", + "lint": "eslint app", + "check:local-deps": "bash ../tools/web/check-local-deps.sh", + "test": "node --test tests/**/*.test.mjs", + "test:engine-manifest-v2": "node --test tests/unit/engine-manifest-v2.test.mjs", + "test:engine-variant-install": "node ../tools/web/check-engine-variant-install.mjs", + "test:engine-variant-selection": "node --test tests/unit/engine-variant-selection.test.mjs", + "test:engine-variant-fallback": "node --test tests/unit/engine-variant-fallback.test.mjs", + "test:engine-upgrade-safety": "node --test --test-name-pattern=M6-08 tests/unit/engine-variant-selection.test.mjs tests/unit/engine-variant-fallback.test.mjs && playwright test --config playwright.config.ts tests/e2e/engine-upgrade-safety.spec.ts", + "test:user-actions": "node --test tests/unit/user-action-state.test.mjs tests/unit/project-action-mutex.test.mjs tests/unit/file-byte-reader.test.mjs tests/unit/save-transaction.test.mjs tests/unit/dirty-state.test.mjs tests/unit/worker-fault.test.mjs tests/unit/recent-projects.test.mjs tests/unit/storage-budget.test.mjs tests/unit/ui-schema.test.mjs tests/unit/viewport-camera.test.mjs tests/unit/diagnostic-report.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/user-action-state.spec.ts tests/e2e/project-action-mutex.spec.ts tests/e2e/file-import-progress.spec.ts tests/e2e/save-interruption.spec.ts tests/e2e/dirty-state.spec.ts tests/e2e/worker-crash-recovery.spec.ts tests/e2e/recent-projects-recovery.spec.ts tests/e2e/storage-budget.spec.ts tests/e2e/storage-cleanup.spec.ts tests/e2e/ui-context.spec.ts tests/e2e/responsive-layout.spec.ts tests/e2e/viewport-consistency.spec.ts tests/e2e/keyboard-accessibility.spec.ts tests/e2e/diagnostic-report.spec.ts", + "test:editing-soak": "EDITING_SOAK_DURATION_MS=1800000 EDITING_SOAK_REPORT=../release/soak-reports/editing.json playwright test --config playwright.config.ts --workers=1 tests/e2e/editing-soak.spec.ts && node ../tools/web/check-editing-soak-report.mjs", + "test:editing-soak:debug": "EDITING_SOAK_DURATION_MS=30000 EDITING_SOAK_ALLOW_SHORT=1 playwright test --config playwright.config.ts --workers=1 tests/e2e/editing-soak.spec.ts", + "test:editing-soak-report": "node ../tools/web/check-editing-soak-report.mjs", + "test:deployment-http": "node ../tools/web/check-deployment-http.mjs", + "test:deployment-runbook": "node ../tools/web/check-deployment-runbook.mjs", + "test:upgrade-runbook": "node ../tools/web/check-upgrade-runbook.mjs", + "test:rollback-runbook": "node ../tools/web/check-rollback-runbook.mjs", + "test:operations-diagnostics": "node ../tools/web/check-operations-diagnostics.mjs", + "test:operations-rehearsal": "node ../tools/web/run-operations-rehearsal.mjs", + "test:deployment-cache": "npm run build && node ../tools/web/check-deployment-cache.mjs", + "test:archive-offline": "npm run build && node ../tools/web/create-offline-release.mjs && playwright test --config playwright.archive.config.ts", + "test:binary-archive": "node ../tools/web/check-binary-archive.mjs", + "test:source-archive": "node ../tools/web/check-source-archive.mjs", + "test:single-thread-unisolated": "playwright test --config playwright.single-thread.config.ts", + "test:pthread-engine": "playwright test --config playwright.config.ts tests/e2e/pthread-engine-isolated.spec.ts", + "test:pthread-fallback": "playwright test --config playwright.config.ts tests/e2e/pthread-fallback.spec.ts", + "test:e2e": "playwright test --config playwright.config.ts", + "test:capability-gates": "playwright test --config playwright.config.ts -g \"undeclared capability protocols\"", + "test:simulation-cache": "playwright test --config playwright.config.ts -g \"Simulation caches\"", + "test:simulation-cache-identity": "node --test tests/unit/simulation-cache.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/simulation-cache-identity.spec.ts", + "test:simulation-cache-lifecycle": "node --test tests/unit/simulation-cache.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/simulation-cache-lifecycle.spec.ts", + "test:simulation-cache-performance": "playwright test --config playwright.config.ts tests/e2e/simulation-cache-performance.spec.ts", + "test:network-interruption": "playwright test --config playwright.config.ts tests/e2e/network-interruption.spec.ts", + "test:device-loss": "playwright test --config playwright.config.ts tests/e2e/device-loss.spec.ts", + "test:oom-recovery": "playwright test --config playwright.config.ts tests/e2e/oom-recovery.spec.ts", + "test:storage-quota": "playwright test --config playwright.config.ts -g \"real OPFS quota\"", + "test:texture-4k-performance": "playwright test --config playwright.config.ts tests/e2e/texture-4k-performance.spec.ts", + "test:texture-8k-performance": "playwright test --config playwright.config.ts tests/e2e/texture-8k-performance.spec.ts", + "test:physics-main-reader": "node ../tools/web/check-physics-main-reader.mjs", + "test:geometry-node-main-reader": "node --test tests/unit/geometry-nodes.test.mjs && node ../tools/web/check-geometry-node-main-reader.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/geometry-node-main-reader.spec.ts", + "test:geometry-node-allowlist": "node --test tests/unit/geometry-nodes.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/geometry-node-allowlist.spec.ts", + "test:geometry-node-evaluator-golden": "node --test tests/unit/geometry-nodes.test.mjs && node ../tools/web/check-geometry-node-evaluator-golden.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/geometry-node-evaluator-golden.spec.ts", + "test:geometry-node-field-budget": "node --test tests/unit/geometry-nodes.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/geometry-node-field-budget.spec.ts", + "test:shader-compile": "node --test tests/unit/shader-compiler.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/shader-compile.spec.ts", + "test:shader-compile-key": "node --test tests/unit/shader-compiler.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/shader-compile-key.spec.ts", + "test:shader-pipeline": "playwright test --config playwright.config.ts --workers=1 tests/e2e/shader-pipeline.spec.ts", + "test:shader-capability": "playwright test --config playwright.config.ts --workers=1 tests/e2e/shader-capability-block.spec.ts", + "test:nla-evaluation-golden": "node ../tools/web/check-nla-evaluation-golden.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/nla-evaluation-golden.spec.ts", + "test:nla-operator": "node --test tests/unit/nla.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/nla-operator.spec.ts", + "test:physics-solver-probe": "node --test tests/unit/physics-solver-probe.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/physics-solver-probe.spec.ts", + "test:physics-cache-family": "node --test tests/unit/physics-cache-family.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/physics-cache-family.spec.ts", + "test:m10-domain-gates": "node --test tests/unit/geometry-nodes.test.mjs tests/unit/shader-compiler.test.mjs tests/unit/nla.test.mjs tests/unit/simulation-cache.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/m10-domain-browser-gates.spec.ts", + "test:browser": "playwright test --config playwright.release.config.ts", + "test:task-context": "node --test tests/unit/task-context.test.mjs && node ../tools/web/check-task-context.mjs", + "test:context-governance": "node --test tests/unit/task-context.test.mjs tests/unit/context-governance.test.mjs && node ../tools/web/check-context-governance.mjs", + "test:streaming-resilience": "node --test tests/unit/streaming-resilience.test.mjs", + "task:context": "node ../tools/web/print-task-context.mjs", + "test:cross-browser": "npm run test:browser", + "test:golden": "node ../tools/web/run-blender-golden.mjs", + "test:collapse-ratios": "node ../tools/web/check-collapse-ratios.mjs", + "test:topology-collapse": "node ../tools/web/check-topology-collapse.mjs", + "test:depsgraph": "node ../tools/web/check-depsgraph.mjs", + "test:nonmesh-binary": "playwright test --config playwright.config.ts -g \"one-million-point binary transfer gate\"", + "test:vdb": "playwright test --config playwright.config.ts -g \"VDB conversion boundary\"", + "test:frame-evaluation": "node ../tools/web/check-frame-evaluation.mjs", + "test:pose-constraint-goldens": "node ../tools/web/check-pose-constraint-goldens.mjs", + "test:main-roundtrip": "node ../tools/web/check-main-roundtrip.mjs", + "test:nonmesh-roundtrip": "node ../tools/web/check-nonmesh-roundtrip.mjs", + "test:nonmesh-desktop-golden": "node ../tools/web/check-nonmesh-desktop-golden.mjs", + "test:selection-history": "playwright test --config playwright.config.ts -g \"N-015 selection history\"", + "test:nonmesh-interaction": "playwright test --config playwright.config.ts -g \"N-015 curve gizmo interaction\"", + "test:vdb-availability": "node ../tools/web/check-vdb-availability.mjs", + "test:vdb-native": "node ../tools/web/check-vdb-native-pipeline.mjs", + "test:vdb-server": "node ../tools/web/check-vdb-server-job.mjs", + "test:vdb-opfs": "playwright test --config playwright.config.ts -g \"hash-bound NanoVDB project through OPFS\"", + "test:vdb-webgpu": "playwright test --config playwright.config.ts -g \"real NanoVDB Float32 tree with WebGPU\"", + "test:vdb-viewport": "playwright test --config playwright.config.ts -g \"both production viewport backends\"", + "test:vdb-faults": "playwright test --config playwright.config.ts -g \"NanoVDB paging from network, Worker and WebGPU device faults\"", + "test:nanovdb-page-feedback": "node --test tests/unit/nanovdb-page-feedback.test.mjs", + "test:nanovdb-page-feedback-webgpu": "playwright test --config playwright.config.ts tests/e2e/nanovdb-page-feedback.spec.ts", + "test:nanovdb-main-thread-webgpu": "playwright test --config playwright.config.ts tests/e2e/nanovdb-main-thread.spec.ts", + "test:nanovdb-offscreen-page-feedback-webgpu": "playwright test --config playwright.config.ts tests/e2e/nanovdb-offscreen-page-feedback.spec.ts", + "test:nanovdb-page-resume": "playwright test --config playwright.config.ts tests/e2e/nanovdb-page-resume.spec.ts", + "test:nanovdb-opfs-restart": "playwright test --config playwright.config.ts tests/e2e/nanovdb-opfs-restart.spec.ts", + "test:nanovdb-sparse-performance": "playwright test --config playwright.config.ts tests/e2e/nanovdb-sparse-performance.spec.ts", + "test:nanovdb-volume-roundtrip": "playwright test --config playwright.config.ts tests/e2e/nanovdb-volume-roundtrip.spec.ts", + "test:nanovdb-render-golden": "playwright test --config playwright.config.ts tests/e2e/nanovdb-render-golden.spec.ts", + "test:external-vfont": "playwright test --config playwright.config.ts tests/e2e/external-vfont.spec.ts", + "test:curve-topology-contract": "playwright test --config playwright.config.ts tests/e2e/curve-topology-contract.spec.ts", + "test:curve-topology-operator": "playwright test --config playwright.config.ts tests/e2e/curve-topology-contract.spec.ts tests/e2e/curve-topology-operator.spec.ts", + "test:grease-pencil-marquee": "node --test tests/unit/grease-pencil-marquee.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/grease-pencil-marquee.spec.ts", + "test:grease-pencil-selection": "node --test tests/unit/grease-pencil-selection.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/grease-pencil-selection.spec.ts", + "test:grease-pencil-reorder": "node --test tests/unit/grease-pencil-reorder.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/grease-pencil-reorder.spec.ts", + "test:paint-depth-visibility": "node --test tests/unit/paint-depth-visibility.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/paint-depth-visibility.spec.ts", + "test:paint-stroke-session": "node --test tests/unit/paint-stroke-session.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/paint-stroke-session.spec.ts", + "test:texture-paint-asset": "node --test tests/unit/texture-paint-asset.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/texture-paint-asset.spec.ts", + "test:paint-pbvh-capability": "node --test tests/unit/paint-pbvh-capability.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/paint-pbvh-capability.spec.ts", + "test:editing-domain-recovery": "node --test tests/unit/editing-domain-recovery.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/editing-domain-recovery.spec.ts", + "test:grease-pencil": "node ../tools/web/check-grease-pencil-roundtrip.mjs", + "test:grease-pencil-editor": "playwright test --config playwright.config.ts -g \"N-016 Grease Pencil editor context\"", + "test:paint-roundtrip": "node ../tools/web/check-paint-roundtrip.mjs", + "test:weight-paint-golden": "node ../tools/web/check-weight-paint-golden.mjs", + "test:lighting-roundtrip": "node ../tools/web/check-lighting-roundtrip.mjs", + "test:lighting-field-parity": "node ../tools/web/check-lighting-field-parity.mjs && npm run test:lighting-roundtrip", + "test:lighting-field-roundtrip": "npm run test:lighting-roundtrip && playwright test --config playwright.config.ts --workers=1 tests/e2e/lighting-field-roundtrip.spec.ts", + "test:render-resource-budget": "node --test tests/unit/render-budget.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/render-resource-budget.spec.ts", + "test:render-reference": "node --test tests/unit/render-image-comparison.test.mjs && node ../tools/web/check-render-reference.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/render-reference.spec.ts", + "test:render-routing": "node --test tests/unit/render-routing.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/render-routing.spec.ts", + "test:server-render-job": "node --test tests/unit/server-render-job.test.mjs && node ../tools/web/check-server-render-job.mjs", + "test:compositor-node-golden": "node --test tests/unit/compositor-webgpu.test.mjs && node ../tools/web/check-compositor-node-golden.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/compositor-node-golden.spec.ts", + "test:compositor-unsupported-gate": "node --test tests/unit/compositor-unsupported-gate.test.mjs && node ../tools/web/check-compositor-main-reader.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/compositor-unsupported-gate.spec.ts", + "test:compositor-main-reader": "node ../tools/web/check-compositor-main-reader.mjs", + "test:sequencer": "playwright test --config playwright.config.ts -g \"N-021 sequencer\"", + "test:sequencer-main-reader": "node ../tools/web/check-sequencer-main-reader.mjs", + "test:sequencer-codec-probe": "node --test tests/unit/sequencer-codec-probe.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/sequencer-codec-probe.spec.ts", + "test:sequencer-media-cache": "node --test tests/unit/sequencer-media-cache.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/sequencer-media-cache.spec.ts", + "test:sequencer-media-revision": "node --test tests/unit/sequencer-media-revision.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/sequencer-media-revision.spec.ts", + "test:sequencer-final-export": "node --test tests/unit/sequencer-final-export.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/sequencer-final-export.spec.ts", + "test:sequencer-audio-recovery": "node --test tests/unit/sequencer-audio-recovery.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/sequencer-audio-recovery.spec.ts", + "test:render-compositor-media-recovery": "node --test tests/unit/render-compositor-media-recovery.test.mjs && node ../tools/web/check-render-reference.mjs && node ../tools/web/check-compositor-node-golden.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/render-compositor-media-recovery.spec.ts", + "test:tracking-mask": "playwright test --config playwright.config.ts -g \"N-022 tracking\"", + "test:mask-main-reader": "node ../tools/web/check-mask-main-reader.mjs", + "test:asset-catalog-inventory": "node ../tools/web/check-asset-catalog-field-inventory.mjs", + "test:asset-catalog-v1-fixture": "node ../tools/web/check-asset-catalog-v1-fixture.mjs", + "test:asset-catalog-v2": "node --test tests/unit/asset-catalog-v2.test.mjs", + "test:asset-catalog-migration": "node --test tests/unit/asset-catalog-migration.test.mjs", + "test:asset-catalog-legacy-reader": "node --test tests/unit/asset-catalog-compatibility.test.mjs", + "test:asset-catalog-negatives": "node --test tests/unit/asset-catalog-negatives.test.mjs", + "test:asset-catalog-indexeddb-migration": "node --test tests/unit/asset-catalog-migration.test.mjs tests/unit/asset-catalog-indexeddb-migration.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/asset-catalog-indexeddb-migration.spec.ts", + "test:asset-catalog-restart": "node --test tests/unit/asset-catalog-migration.test.mjs tests/unit/asset-catalog-indexeddb-migration.test.mjs tests/unit/asset-catalog-restart.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/asset-catalog-indexeddb-migration.spec.ts tests/e2e/asset-catalog-restart.spec.ts", + "test:asset-catalog-m12-evidence": "npm run test:asset-catalog-inventory && npm run test:asset-catalog-v1-fixture && npm run test:asset-catalog-v2 && npm run test:asset-catalog-migration && npm run test:asset-catalog-legacy-reader && npm run test:asset-catalog-negatives && npm run test:asset-catalog-restart && node ../tools/web/check-asset-catalog-m12-evidence.mjs", + "test:asset-preview-inventory": "node ../tools/web/check-asset-preview-inventory.mjs", + "test:asset-preview-identity": "node --test tests/unit/asset-preview-identity.test.mjs && node ../tools/web/check-asset-preview-identity.mjs", + "test:asset-preview-decode-budget": "node --test tests/unit/asset-preview-identity.test.mjs tests/unit/asset-preview-decode.test.mjs", + "test:asset-preview-opfs-commit": "node --test tests/unit/asset-preview-opfs-commit.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/asset-preview-opfs-commit.spec.ts", + "test:asset-preview-dedup": "node --test tests/unit/asset-preview-dedup.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/asset-preview-dedup.spec.ts", + "test:asset-preview-quarantine": "node --test tests/unit/asset-preview-quarantine.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/asset-preview-quarantine.spec.ts", + "test:asset-preview-reference-gc": "node --test tests/unit/asset-preview-reference-gc.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/asset-preview-reference-gc.spec.ts", + "test:asset-preview-display": "node --test tests/unit/asset-preview-display.test.mjs && node ../tools/web/check-asset-preview-display.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/asset-preview-display.spec.ts", + "test:library-operation-inventory": "node ../tools/web/check-library-operation-inventory.mjs", + "test:library-operation-identity": "node --test tests/unit/library-operation-identity.test.mjs", + "test:library-append-desktop": "node ../tools/web/check-library-append-fixture.mjs", + "test:library-append-wasm": "node --test tests/unit/library-append-wasm.test.mjs", + "test:library-append-chromium": "playwright test --config playwright.config.ts --workers=1 tests/e2e/library-append-main.spec.ts", + "test:library-main-append": "node ../tools/web/check-library-main-append.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/library-append-main.spec.ts", + "test:library-link-desktop": "node ../tools/web/check-library-link-fixture.mjs", + "test:library-link-wasm": "node --test tests/unit/library-linked-mutation.test.mjs tests/unit/library-linked-reload.test.mjs tests/unit/library-linked-missing.test.mjs", + "test:library-link-chromium": "playwright test --config playwright.config.ts --workers=1 tests/e2e/library-link-chromium.spec.ts", + "test:library-linked-mutation": "node --test tests/unit/library-linked-mutation.test.mjs", + "test:library-linked-reload": "node --test tests/unit/library-linked-reload.test.mjs", + "test:library-linked-missing": "node --test tests/unit/library-linked-missing.test.mjs", + "test:library-override-desktop": "node ../tools/web/check-library-override-fixture.mjs", + "test:library-override-wasm": "node --test tests/unit/library-override-writer.test.mjs tests/unit/library-override-freshness.test.mjs", + "test:library-override-chromium": "playwright test --config playwright.config.ts --workers=1 tests/e2e/library-override-chromium.spec.ts", + "test:library-override-writer": "node --test tests/unit/library-override-writer.test.mjs", + "test:library-override-freshness": "node --test tests/unit/library-override-freshness.test.mjs", + "test:library-negative-cases": "node --test tests/unit/library-negative-cases.test.mjs", + "test:library-operation-commands": "node ../tools/web/check-library-operation-commands.mjs", + "test:library-source-origin": "node --test tests/unit/library-source-origin.test.mjs", + "test:library-path-normalization": "node --test tests/unit/library-path-normalization.test.mjs", + "test:library-path-security": "node --test tests/unit/library-path-security.test.mjs", + "test:library-link-safety": "node --test tests/unit/library-link-safety.test.mjs", + "test:library-metadata-first": "node --test tests/unit/library-metadata-first.test.mjs", + "test:library-archive-budget": "node --test tests/unit/library-archive-budget.test.mjs", + "test:library-archive-conflicts": "node --test tests/unit/library-archive-conflicts.test.mjs", + "test:library-archive-cancellation": "node --test tests/unit/library-archive-cancellation.test.mjs", + "test:asset-library": "playwright test --config playwright.config.ts -g \"N-023 asset\"", + "test:library-main-reader": "node ../tools/web/check-library-main-reader.mjs", + "test:editor-workflow": "playwright test --config playwright.config.ts -g \"N-024 editor\"", + "test:editor-main-reader": "node ../tools/web/check-editor-main-reader.mjs", + "test:scripting-platform": "playwright test --config playwright.config.ts -g \"N-025 script\"", + "test:script-manifest-budgets": "node --test tests/unit/script-manifest-budgets.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/script-manifest-budgets.spec.ts", + "test:script-manifest-canonical": "node --test tests/unit/script-manifest-canonical.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/script-manifest-canonical.spec.ts", + "test:script-trust-policy": "node --test tests/unit/script-trust-policy.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/script-trust-policy.spec.ts", + "test:script-signature": "node --test --test-name-pattern=M13-02D tests/unit/script-trust-policy.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/script-signature.spec.ts", + "test:script-permission-policy": "node --test tests/unit/script-permission-policy.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/script-permission-policy.spec.ts", + "test:script-signature-negative": "node --test tests/unit/script-signature-negative.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/script-signature-negative.spec.ts", + "test:script-sandbox-scope": "node --test tests/unit/script-sandbox-scope.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/script-sandbox-scope.spec.ts", + "test:script-sandbox-budget": "node --test tests/unit/script-sandbox-budget.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/script-sandbox-budget.spec.ts", + "test:script-host-call": "node --test tests/unit/script-host-call.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/script-host-call.spec.ts", + "test:script-sandbox-isolation": "node --test tests/unit/script-sandbox-isolation.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/script-sandbox-isolation.spec.ts", + "test:script-sandbox-cancellation": "node --test tests/unit/script-sandbox-cancellation.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/script-sandbox-cancellation.spec.ts", + "test:script-sandbox-dispose": "node --test tests/unit/script-sandbox-dispose.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/script-sandbox-dispose.spec.ts", + "test:script-sandbox-recovery": "node --test tests/unit/script-sandbox-recovery.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/script-sandbox-recovery.spec.ts", + "test:server-job-directory": "node --test tests/unit/server-job-isolation.test.mjs && node ../tools/web/check-server-job-isolation.mjs", + "test:server-job-workspace": "node --test tests/unit/server-job-isolation.test.mjs && node ../tools/web/check-server-job-workspace.mjs", + "test:server-job-resource-budget": "node --test tests/unit/server-job-resource-budget.test.mjs && node ../tools/web/check-server-job-resource-budget.mjs", + "test:server-job-network-policy": "node --test tests/unit/server-job-network-policy.test.mjs && node ../tools/web/check-server-job-network-policy.mjs", + "test:server-job-startup": "node ../tools/web/check-server-job-startup.mjs", + "test:server-job-output-redaction": "node --test tests/unit/server-job-output.test.mjs && node ../tools/web/check-server-job-output-redaction.mjs", + "test:server-job-cancellation": "node --test tests/unit/server-job-process.test.mjs && node ../tools/web/check-server-job-cancellation.mjs", + "test:server-job-fault-codes": "node --test tests/unit/server-job-fault.test.mjs && node ../tools/web/check-server-job-fault-codes.mjs", + "test:server-job-result-binding": "node --test tests/unit/server-job-result-binding.test.mjs && node ../tools/web/check-server-job-result-binding.mjs", + "test:server-job-idempotency": "node --test tests/unit/server-job-idempotency.test.mjs && node ../tools/web/check-server-job-idempotency.mjs", + "test:csp-policy": "node ../tools/web/check-csp-policy.mjs", + "test:csp-resource-policy": "node ../tools/web/check-csp-resource-policy.mjs", + "test:dependency-inventory": "node ../tools/web/check-dependency-inventory.mjs", + "test:dependency-severity-policy": "node ../tools/web/check-dependency-severity-policy.mjs", + "test:supply-chain-binding": "node ../tools/web/check-supply-chain-binding.mjs", + "test:malicious-input-matrix": "node ../tools/web/check-malicious-input-matrix.mjs", + "test:fuzz-regression": "node ../tools/web/check-fuzz-regression.mjs", + "test:script-audit-integrity": "node --test tests/unit/script-audit-integrity.test.mjs && node ../tools/web/check-script-audit-integrity.mjs", + "test:chromium-freeze": "node ../tools/web/check-chromium-release-freeze.mjs", + "test:probe-identity": "node ../tools/web/check-probe-identity.mjs", + "test:chromium-webgpu-boundary": "node ../tools/web/check-chromium-webgpu-boundary.mjs", + "test:chromium-device-budget": "node --test tests/unit/device-budget.test.mjs && node ../tools/web/check-chromium-device-budget.mjs", + "test:chromium-dpr-consistency": "node --test tests/unit/viewport-dpr.test.mjs && node ../tools/web/check-chromium-dpr-consistency.mjs", + "test:chromium-pointer-contract": "node --test tests/unit/pointer-contract.test.mjs && node ../tools/web/check-chromium-pointer-contract.mjs", + "test:chromium-ime-guard": "node --test tests/unit/ime-composition.test.mjs && node ../tools/web/check-chromium-ime-guard.mjs", + "test:chromium-keymap-fixture": "node --test tests/unit/keyboard-contract.test.mjs && node ../tools/web/check-chromium-keymap-fixture.mjs", + "test:chromium-input-modal": "node --test tests/unit/input-modal.test.mjs && node ../tools/web/check-chromium-input-modal.mjs", + "test:chromium-layout": "node ../tools/web/check-chromium-layout.mjs", + "test:chromium-accessibility": "node ../tools/web/check-chromium-accessibility.mjs", + "test:blender-rna-inventory": "node ../tools/web/check-blender-rna-datablock-inventory.mjs", + "test:blender-operator-inventory": "node ../tools/web/check-blender-operator-inventory.mjs", + "test:blender-family-inventory": "node ../tools/web/check-blender-family-inventory.mjs", + "test:blender-format-inventory": "node ../tools/web/check-blender-format-inventory.mjs", + "test:blender-editor-inventory": "node ../tools/web/check-blender-editor-inventory.mjs", + "test:blender-core-inventory": "node ../tools/web/check-blender-core-inventory.mjs", + "test:blender-parity-map": "node ../tools/web/check-blender-parity-map.mjs", + "test:blender-gap-audit": "node ../tools/web/check-blender-gap-audit.mjs", + "test:blender-local-exact-audit": "node ../tools/web/check-blender-contract-audit.mjs M15-02C", + "test:blender-local-equivalent-audit": "node ../tools/web/check-blender-contract-audit.mjs M15-02D", + "test:blender-server-exact-audit": "node ../tools/web/check-blender-contract-audit.mjs M15-02E", + "test:blender-unknown-data-audit": "node ../tools/web/check-blender-contract-audit.mjs M15-02F", + "test:blender-next-task-plan": "node ../tools/web/check-blender-next-task-plan.mjs", + "test:blender-next-task-spec": "node ../tools/web/check-blender-next-task-spec.mjs", + "test:blender-task-graph": "node ../tools/web/check-blender-task-graph.mjs", + "test:blender-task-stats": "node ../tools/web/check-blender-task-stats.mjs", + "test:blender-zero-gap-gate": "node ../tools/web/check-blender-zero-gap-gate.mjs", + "test:generated-gap": "node ../tools/web/check-generated-gap.mjs", + "test:firefox-quick": "npm run typecheck && node ../tools/web/check-firefox-quick.mjs", + "test:script-main-reader": "node ../tools/web/check-script-main-reader.mjs", + "test:scripting-isolation": "node ../tools/web/check-scripting-isolation.mjs", + "test:release-gate": "playwright test --config playwright.config.ts -g \"N-026 release\"", + "test:v1-user-loop": "playwright test --config playwright.config.ts tests/e2e/v1-user-loop.spec.ts", + "test:browser-smoke": "playwright test --config playwright.release.config.ts -g \"boots the offline engine\"", + "test:cross-browser-smoke": "npm run test:browser-smoke", + "test:authoring-roundtrip": "node ../tools/web/check-authoring-roundtrip.mjs", + "test:modifier-goldens": "node ../tools/web/check-modifier-goldens.mjs", + "test:modifier-cycle": "node ../tools/web/check-modifier-cycle.mjs", + "test:modifier-matrix": "node ../tools/web/check-modifier-capability-matrix.mjs", + "test:image-resources": "node ../tools/web/check-image-resources.mjs", + "test:glb-blender-roundtrip": "node ../tools/web/check-glb-blender-roundtrip.mjs", + "test:nonmesh-glb-blender-roundtrip": "node ../tools/web/check-nonmesh-glb-blender-roundtrip.mjs", + "test:nonmesh-usd-serialization": "USD_DESKTOP_REQUIRED=0 node ../tools/web/check-nonmesh-usd-blender-roundtrip.mjs", + "test:nonmesh-usd-blender-roundtrip": "USD_DESKTOP_REQUIRED=1 node ../tools/web/check-nonmesh-usd-blender-roundtrip.mjs", + "test:release-performance": "node ../tools/web/check-release-performance.mjs", + "test:geometry-10m-performance": "playwright test --config playwright.config.ts tests/e2e/geometry-10m-performance.spec.ts", + "test:long-media-performance": "playwright test --config playwright.config.ts tests/e2e/long-media-performance.spec.ts", + "test:malicious-blends": "node ../tools/web/check-malicious-blends.mjs", + "test:release-package": "npm run build && npm run release:sbom && node ../tools/web/check-release-package.mjs", + "release:sbom": "node ../tools/web/generate-sbom.mjs", + "release:evidence": "node ../tools/web/collect-release-evidence.mjs", + "release:evidence-sync": "node ../tools/web/collect-release-evidence.mjs --sync-ledger", + "release:evidence-v1": "node ../tools/web/collect-release-evidence.mjs --record-v1-user-loop", + "release:evidence-geometry-10m": "node ../tools/web/collect-release-evidence.mjs --record-geometry-10m", + "release:evidence-long-media": "node ../tools/web/collect-release-evidence.mjs --record-long-media", + "release:evidence-oom": "node ../tools/web/collect-release-evidence.mjs --record-oom-recovery", + "test:release-evidence": "node ../tools/web/check-release-evidence.mjs", + "test:v1-acceptance-coverage": "node ../tools/web/check-v1-acceptance-coverage.mjs", + "test:v1-acceptance-evidence": "node ../tools/web/check-v1-acceptance-evidence.mjs", + "test:v1-acceptance-release-binding": "node ../tools/web/check-v1-acceptance-release-binding.mjs", + "test:status-consistency": "node ../tools/web/check-status-consistency.mjs", + "test:ci-report": "node ../tools/web/check-ci-report.mjs", + "test:ci-failure-report": "node ../tools/web/check-ci-failure-report.mjs", + "ci:quick": "node ../tools/web/run-ci-lane.mjs quick", + "ci:chromium": "node ../tools/web/run-ci-lane.mjs chromium", + "ci:release": "node ../tools/web/run-ci-lane.mjs release", + "release:v1-acceptance": "node ../tools/web/run-v1-acceptance.mjs", + "release:offline": "npm run build && node ../tools/web/check-offline-reproducibility.mjs", + "release:rc-manifest": "node ../tools/web/create-rc-manifest.mjs && node ../tools/web/check-rc-manifest.mjs", + "test:rc-manifest": "node ../tools/web/check-rc-manifest.mjs", + "test:rc-release-notes": "node ../tools/web/check-rc-release-notes.mjs", + "test:rc-known-limitations": "node ../tools/web/check-rc-known-limitations.mjs", + "test:rc-release-recovery": "node ../tools/web/check-rc-release-recovery.mjs", + "test:rc-docs": "npm run test:rc-release-notes && npm run test:rc-known-limitations && npm run test:rc-release-recovery", + "test:ply-mapping": "node --test tests/unit/ply-import.test.mjs && node ../tools/web/check-ply-mapping-fixtures.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/ply-web-roundtrip.spec.ts", + "diagnose:depsgraph": "node ../tools/web/diagnose-depsgraph.mjs" + }, + "dependencies": { + "react": "19.2.8", + "react-dom": "19.2.8" + }, + "devDependencies": { + "@axe-core/playwright": "^4.12.1", + "@eslint/js": "10.0.1", + "@playwright/test": "1.62.1", + "@types/react": "19.2.18", + "@types/react-dom": "19.2.4", + "@types/three": "0.185.1", + "@vitejs/plugin-react": "6.0.5", + "eslint": "10.8.0", + "typescript": "5.9.3", + "typescript-eslint": "8.66.0", + "vite": "8.2.0" + } +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/web/protocol/editor-workflow.ts b/tests/golden/corrective/C0-002/staged/source-snapshot/files/web/protocol/editor-workflow.ts new file mode 100644 index 00000000..396bcf52 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/web/protocol/editor-workflow.ts @@ -0,0 +1,134 @@ +import { blockedGate, capabilityIssue, readyGate, type CapabilityGateResult } from "./capability-gates"; +import type { ErrorCode } from "./error"; + +export const EDITOR_WORKFLOW_SCHEMA = 1 as const; +export const EDITOR_WORKFLOW_BUDGET = { maxWorkspaces: 64, maxAreas: 1_024, maxRegions: 4_096, maxSelection: 100_000, maxKeymaps: 4_096 } as const; +export const EDITOR_TYPES = ["VIEW_3D", "OUTLINER", "PROPERTIES", "UV_IMAGE", "NODE", "GRAPH", "DOPE_SHEET", "NLA", "SPREADSHEET", "TIMELINE", "CLIP", "MASK", "SEQUENCER"] as const; +export type EditorTypeIR = typeof EDITOR_TYPES[number]; +export type EditorRegionKind = "HEADER" | "MAIN" | "TOOLBAR" | "SIDEBAR" | "FOOTER"; +export type EditorMode = "OBJECT" | "EDIT" | "POSE"; + +export interface EditorRegionIR { id: string; kind: EditorRegionKind; visible: boolean } +export interface EditorAreaIR { id: string; editor: EditorTypeIR; regions: EditorRegionIR[]; rect: { x: number; y: number; width: number; height: number }; maximized: boolean; filterText?: string } +export interface EditorWorkspaceIR { id: string; name: string; areas: EditorAreaIR[]; activeAreaId: string; revision: number } +export interface EditorContextIR { workspaceId: string; activeAreaId: string; activeEditor: EditorTypeIR; mode: EditorMode; activeObjectId: string | null; selection: string[]; viewLayer: string; pinnedData: string | null; revision: number } +export interface KeymapBindingIR { + id: string; + key: string; + modifiers: string[]; + command: string; + enabled: boolean; + workspaceIds?: string[]; + editors?: EditorTypeIR[]; + modes?: EditorMode[]; +} +export interface EditorWorkflowIR { schemaVersion: typeof EDITOR_WORKFLOW_SCHEMA; workspaces: EditorWorkspaceIR[]; context: EditorContextIR; keymaps: KeymapBindingIR[] } +export interface KeyChordIR { key: string; modifiers: Array<"ALT" | "CTRL" | "META" | "SHIFT"> } +export type EditorWorkflowEditIR = + | { type: "SWITCH_WORKSPACE"; revision: number; workspaceId: string } + | { type: "SET_ACTIVE_AREA"; revision: number; areaId: string } + | { type: "SET_SELECTION"; revision: number; selectedIds: string[]; activeObjectId: string | null } + | { type: "TOGGLE_REGION"; revision: number; areaId: string; regionId: string; visible: boolean }; + +export class EditorWorkflowValidationError extends Error { + readonly code: ErrorCode; + constructor(code: ErrorCode, message: string) { super(`${code}: ${message}`); this.name = "EditorWorkflowValidationError"; this.code = code; } +} + +const EDITOR_REGION_KINDS = new Set(["HEADER", "MAIN", "TOOLBAR", "SIDEBAR", "FOOTER"]); +function record(value: unknown): value is Record { return typeof value === "object" && value !== null && !Array.isArray(value); } +function text(value: unknown, name: string, maximum = 256): string { if (typeof value !== "string" || value.length === 0 || value.length > maximum) throw new EditorWorkflowValidationError("EDITOR_LAYOUT_INVALID", `${name} is invalid`); return value; } +function finite(value: unknown, name: string, minimum: number, maximum: number): number { if (typeof value !== "number" || !Number.isFinite(value) || value < minimum || value > maximum) throw new EditorWorkflowValidationError("EDITOR_LAYOUT_INVALID", `${name} is outside the bounded range`); return value; } +function integer(value: unknown, name: string, minimum: number, maximum: number): number { if (typeof value !== "number" || !Number.isSafeInteger(value) || value < minimum || value > maximum) throw new EditorWorkflowValidationError("EDITOR_LAYOUT_INVALID", `${name} is outside the bounded range`); return value; } + +function rect(value: unknown, name: string): EditorAreaIR["rect"] { + if (!record(value)) throw new EditorWorkflowValidationError("EDITOR_LAYOUT_INVALID", `${name} is invalid`); + const next = { x: finite(value.x, `${name}.x`, 0, 1), y: finite(value.y, `${name}.y`, 0, 1), width: finite(value.width, `${name}.width`, 0.0001, 1), height: finite(value.height, `${name}.height`, 0.0001, 1) }; + if (next.x + next.width > 1 || next.y + next.height > 1) throw new EditorWorkflowValidationError("EDITOR_LAYOUT_INVALID", `${name} exceeds workspace bounds`); + return next; +} +function overlap(a: EditorAreaIR["rect"], b: EditorAreaIR["rect"]): boolean { return a.x < b.x + b.width && a.x + a.width > b.x && a.y < b.y + b.height && a.y + a.height > b.y; } +function scopeOverlaps(left: readonly T[] | undefined, right: readonly T[] | undefined): boolean { return !left?.length || !right?.length || left.some((value) => right.includes(value)); } +function keymapScopesOverlap(left: KeymapBindingIR, right: KeymapBindingIR): boolean { return scopeOverlaps(left.workspaceIds, right.workspaceIds) && scopeOverlaps(left.editors, right.editors) && scopeOverlaps(left.modes, right.modes); } + +export function parseEditorWorkflow(value: unknown): EditorWorkflowIR { + if (!record(value) || value.schemaVersion !== EDITOR_WORKFLOW_SCHEMA || !Array.isArray(value.workspaces) || !record(value.context) || !Array.isArray(value.keymaps)) throw new EditorWorkflowValidationError("PROTOCOL_MISMATCH", "Unsupported editor workflow schema"); + if (value.workspaces.length > EDITOR_WORKFLOW_BUDGET.maxWorkspaces || value.keymaps.length > EDITOR_WORKFLOW_BUDGET.maxKeymaps) throw new EditorWorkflowValidationError("EDITOR_LAYOUT_BUDGET_EXCEEDED", "Editor workflow exceeds the budget"); + let areaCount = 0; let regionCount = 0; const workspaceIds = new Set(); + const workspaces = value.workspaces.map((workspaceValue, workspaceIndex): EditorWorkspaceIR => { + const name = `workspaces[${workspaceIndex}]`; if (!record(workspaceValue) || !Array.isArray(workspaceValue.areas)) throw new EditorWorkflowValidationError("EDITOR_LAYOUT_INVALID", `${name} is invalid`); + const id = text(workspaceValue.id, `${name}.id`); if (workspaceIds.has(id)) throw new EditorWorkflowValidationError("EDITOR_LAYOUT_INVALID", `Duplicate workspace ${id}`); workspaceIds.add(id); + areaCount += workspaceValue.areas.length; if (areaCount > EDITOR_WORKFLOW_BUDGET.maxAreas) throw new EditorWorkflowValidationError("EDITOR_LAYOUT_BUDGET_EXCEEDED", "Area count exceeds the budget"); + const areaIds = new Set(); + const areas = workspaceValue.areas.map((areaValue, areaIndex): EditorAreaIR => { + const areaName = `${name}.areas[${areaIndex}]`; if (!record(areaValue) || !EDITOR_TYPES.includes(areaValue.editor as EditorTypeIR) || !Array.isArray(areaValue.regions)) throw new EditorWorkflowValidationError("EDITOR_LAYOUT_INVALID", `${areaName} is invalid`); + const areaId = text(areaValue.id, `${areaName}.id`); if (areaIds.has(areaId)) throw new EditorWorkflowValidationError("EDITOR_LAYOUT_INVALID", `Duplicate area ${areaId}`); areaIds.add(areaId); + regionCount += areaValue.regions.length; if (regionCount > EDITOR_WORKFLOW_BUDGET.maxRegions) throw new EditorWorkflowValidationError("EDITOR_LAYOUT_BUDGET_EXCEEDED", "Region count exceeds the budget"); + const regionIds = new Set(); const regions = areaValue.regions.map((regionValue, regionIndex): EditorRegionIR => { const regionName = `${areaName}.regions[${regionIndex}]`; if (!record(regionValue) || !EDITOR_REGION_KINDS.has(regionValue.kind as EditorRegionKind)) throw new EditorWorkflowValidationError("EDITOR_LAYOUT_INVALID", `${regionName} is invalid`); const regionId = text(regionValue.id, `${regionName}.id`); if (regionIds.has(regionId)) throw new EditorWorkflowValidationError("EDITOR_LAYOUT_INVALID", `Duplicate region ${regionId}`); regionIds.add(regionId); return { id: regionId, kind: regionValue.kind as EditorRegionKind, visible: regionValue.visible !== false }; }); + const filterText = areaValue.filterText; + if (filterText !== undefined && (typeof filterText !== "string" || filterText.length > 64)) throw new EditorWorkflowValidationError("EDITOR_LAYOUT_INVALID", `${areaName}.filterText is invalid`); + return { id: areaId, editor: areaValue.editor as EditorTypeIR, regions, rect: rect(areaValue.rect, `${areaName}.rect`), maximized: areaValue.maximized === true, filterText: filterText as string | undefined }; + }); + const activeAreaId = text(workspaceValue.activeAreaId, `${name}.activeAreaId`); if (!areaIds.has(activeAreaId)) throw new EditorWorkflowValidationError("EDITOR_LAYOUT_INVALID", `${name}.activeAreaId is missing`); + for (let index = 0; index < areas.length; index++) for (let other = index + 1; other < areas.length; other++) if (!areas[index].maximized && !areas[other].maximized && overlap(areas[index].rect, areas[other].rect)) throw new EditorWorkflowValidationError("EDITOR_LAYOUT_INVALID", `${name} has overlapping areas`); + return { id, name: text(workspaceValue.name, `${name}.name`), areas, activeAreaId, revision: integer(workspaceValue.revision, `${name}.revision`, 0, Number.MAX_SAFE_INTEGER) }; + }); + const contextValue = value.context; const workspaceId = text(contextValue.workspaceId, "context.workspaceId"); const workspace = workspaces.find((item) => item.id === workspaceId); if (!workspace) throw new EditorWorkflowValidationError("EDITOR_LAYOUT_INVALID", "Context workspace is missing"); + const activeAreaId = text(contextValue.activeAreaId, "context.activeAreaId"); const activeArea = workspace.areas.find((item) => item.id === activeAreaId); if (!activeArea || activeArea.editor !== contextValue.activeEditor) throw new EditorWorkflowValidationError("EDITOR_LAYOUT_INVALID", "Context active area/editor is inconsistent"); + if (!EDITOR_TYPES.includes(contextValue.activeEditor as EditorTypeIR) || !["OBJECT", "EDIT", "POSE"].includes(contextValue.mode as string) || !Array.isArray(contextValue.selection)) throw new EditorWorkflowValidationError("EDITOR_LAYOUT_INVALID", "Context is invalid"); + if (contextValue.selection.length > EDITOR_WORKFLOW_BUDGET.maxSelection || contextValue.selection.some((item) => typeof item !== "string" || item.length === 0)) throw new EditorWorkflowValidationError("EDITOR_SELECTION_INVALID", "Selection exceeds the budget"); + if (contextValue.activeObjectId !== null && typeof contextValue.activeObjectId !== "string") throw new EditorWorkflowValidationError("EDITOR_SELECTION_INVALID", "Active object is invalid"); + const keymapIds = new Set(); const keymaps: KeymapBindingIR[] = []; + value.keymaps.forEach((bindingValue, index) => { + const name = `keymaps[${index}]`; if (!record(bindingValue) || !Array.isArray(bindingValue.modifiers)) throw new EditorWorkflowValidationError("EDITOR_KEYMAP_INVALID", `${name} is invalid`); + const id = text(bindingValue.id, `${name}.id`); if (keymapIds.has(id)) throw new EditorWorkflowValidationError("EDITOR_KEYMAP_INVALID", `Duplicate keymap ${id}`); keymapIds.add(id); + const modifiers = bindingValue.modifiers.map((modifier, modifierIndex) => text(modifier, `${name}.modifiers[${modifierIndex}]`, 16).toUpperCase()); if (new Set(modifiers).size !== modifiers.length || modifiers.some((modifier) => !["ALT", "CTRL", "META", "SHIFT"].includes(modifier))) throw new EditorWorkflowValidationError("EDITOR_KEYMAP_INVALID", `${name} modifiers are invalid or duplicate`); modifiers.sort(); + const parseScope = (field: "workspaceIds" | "editors" | "modes", allowed?: readonly T[]): T[] | undefined => { + const source = bindingValue[field]; if (source === undefined) return undefined; + if (!Array.isArray(source) || source.length === 0 || source.length > 64) throw new EditorWorkflowValidationError("EDITOR_KEYMAP_INVALID", `${name}.${field} is invalid`); + const parsed = source.map((item, scopeIndex) => text(item, `${name}.${field}[${scopeIndex}]`, 256) as T); + if (new Set(parsed).size !== parsed.length || (allowed && parsed.some((item) => !allowed.includes(item)))) throw new EditorWorkflowValidationError("EDITOR_KEYMAP_INVALID", `${name}.${field} is invalid or duplicated`); + return parsed; + }; + const binding: KeymapBindingIR = { id, key: text(bindingValue.key, `${name}.key`, 32).toUpperCase(), modifiers, command: text(bindingValue.command, `${name}.command`, 128), enabled: bindingValue.enabled !== false, workspaceIds: parseScope("workspaceIds"), editors: parseScope("editors", EDITOR_TYPES), modes: parseScope("modes", ["OBJECT", "EDIT", "POSE"] as const) }; + if (binding.workspaceIds?.some((workspace) => !workspaceIds.has(workspace))) throw new EditorWorkflowValidationError("EDITOR_KEYMAP_INVALID", `${name}.workspaceIds references a missing workspace`); + if (binding.enabled && keymaps.some((candidate) => candidate.enabled && candidate.key === binding.key && candidate.modifiers.join("+") === binding.modifiers.join("+") && keymapScopesOverlap(candidate, binding))) throw new EditorWorkflowValidationError("EDITOR_KEYMAP_INVALID", `${name} conflicts with another enabled keymap in the same context`); + keymaps.push(binding); + }); + return { schemaVersion: EDITOR_WORKFLOW_SCHEMA, workspaces, context: { workspaceId, activeAreaId, activeEditor: contextValue.activeEditor as EditorTypeIR, mode: contextValue.mode as EditorMode, activeObjectId: contextValue.activeObjectId as string | null, selection: [...contextValue.selection] as string[], viewLayer: text(contextValue.viewLayer, "context.viewLayer"), pinnedData: contextValue.pinnedData === null ? null : text(contextValue.pinnedData, "context.pinnedData"), revision: integer(contextValue.revision, "context.revision", 0, Number.MAX_SAFE_INTEGER) }, keymaps }; +} + +export function keyChordFromKeyboardEvent(event: Pick): KeyChordIR { + const key = text(event.key, "event.key", 32).toUpperCase(); + const modifiers: KeyChordIR["modifiers"] = []; + if (event.altKey) modifiers.push("ALT"); + if (event.ctrlKey) modifiers.push("CTRL"); + if (event.metaKey) modifiers.push("META"); + if (event.shiftKey) modifiers.push("SHIFT"); + return { key, modifiers }; +} + +export function resolveKeymapCommand(value: unknown, chordValue: unknown): string | null { + const workflow = parseEditorWorkflow(value); + if (!record(chordValue) || !Array.isArray(chordValue.modifiers)) throw new EditorWorkflowValidationError("EDITOR_KEYMAP_INVALID", "Key chord is invalid"); + const chord = { key: text(chordValue.key, "keyChord.key", 32).toUpperCase(), modifiers: chordValue.modifiers.map((modifier, index) => text(modifier, `keyChord.modifiers[${index}]`, 16).toUpperCase()).sort() }; + if (new Set(chord.modifiers).size !== chord.modifiers.length || chord.modifiers.some((modifier) => !["ALT", "CTRL", "META", "SHIFT"].includes(modifier))) throw new EditorWorkflowValidationError("EDITOR_KEYMAP_INVALID", "Key chord modifiers are invalid"); + return workflow.keymaps.find((binding) => binding.enabled && binding.key === chord.key && binding.modifiers.join("+") === chord.modifiers.join("+") && + (!binding.workspaceIds || binding.workspaceIds.includes(workflow.context.workspaceId)) && + (!binding.editors || binding.editors.includes(workflow.context.activeEditor)) && + (!binding.modes || binding.modes.includes(workflow.context.mode)))?.command ?? null; +} + +export function applyEditorWorkflowEdit(value: unknown, edit: EditorWorkflowEditIR): EditorWorkflowIR { + const workflow = parseEditorWorkflow(value); if (edit.revision !== workflow.context.revision) throw new EditorWorkflowValidationError("REVISION_CONFLICT", "Editor context revision is stale"); const clone = structuredClone(workflow); + if (edit.type === "SWITCH_WORKSPACE") { const workspace = clone.workspaces.find((item) => item.id === edit.workspaceId); if (!workspace) throw new EditorWorkflowValidationError("EDITOR_LAYOUT_INVALID", `Unknown workspace ${edit.workspaceId}`); clone.context.workspaceId = workspace.id; clone.context.activeAreaId = workspace.activeAreaId; clone.context.activeEditor = workspace.areas.find((item) => item.id === workspace.activeAreaId)?.editor ?? "VIEW_3D"; } + else if (edit.type === "SET_ACTIVE_AREA") { const workspace = clone.workspaces.find((item) => item.id === clone.context.workspaceId); const area = workspace?.areas.find((item) => item.id === edit.areaId); if (!area) throw new EditorWorkflowValidationError("EDITOR_LAYOUT_INVALID", `Unknown area ${edit.areaId}`); clone.context.activeAreaId = area.id; clone.context.activeEditor = area.editor; } + else if (edit.type === "SET_SELECTION") { if (new Set(edit.selectedIds).size !== edit.selectedIds.length || edit.selectedIds.length > EDITOR_WORKFLOW_BUDGET.maxSelection || edit.selectedIds.some((id) => typeof id !== "string" || !id)) throw new EditorWorkflowValidationError("EDITOR_SELECTION_INVALID", "Selection is invalid"); if (edit.activeObjectId !== null && !edit.selectedIds.includes(edit.activeObjectId)) throw new EditorWorkflowValidationError("EDITOR_SELECTION_INVALID", "Active object must be selected"); clone.context.selection = [...edit.selectedIds]; clone.context.activeObjectId = edit.activeObjectId; } + else { const area = clone.workspaces.find((item) => item.id === clone.context.workspaceId)?.areas.find((item) => item.id === edit.areaId); const region = area?.regions.find((item) => item.id === edit.regionId); if (!region) throw new EditorWorkflowValidationError("EDITOR_LAYOUT_INVALID", `Unknown region ${edit.regionId}`); region.visible = edit.visible; } + clone.context.revision += 1; return parseEditorWorkflow(clone); +} + +export function gateEditorOperation(operation: "READ_ONLY_VIEW" | "SELECTION_SYNC" | "KEYMAP" | "WRITER" | "GIZMO" | "TOUCH_DRAG"): CapabilityGateResult { + if (["READ_ONLY_VIEW", "SELECTION_SYNC", "KEYMAP"].includes(operation)) return readyGate("N-024", operation); + return blockedGate("N-024", operation, [capabilityIssue(operation === "GIZMO" || operation === "TOUCH_DRAG" ? "EDITOR_GIZMO_UNAVAILABLE" : "EDITOR_WRITER_UNAVAILABLE", `${operation} requires editor-specific Main transaction and interaction verification`)]); +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/files/web/protocol/scene-ir.ts b/tests/golden/corrective/C0-002/staged/source-snapshot/files/web/protocol/scene-ir.ts new file mode 100644 index 00000000..248b6bd2 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/files/web/protocol/scene-ir.ts @@ -0,0 +1,1517 @@ +import { parseNlaTracks, type NlaTrackIR } from "./nla"; +import { parseGreasePencilData, type GreasePencilDataIR } from "./grease-pencil"; +import { parseCompositorGraph, type CompositorGraphIR } from "./compositor"; +import { parseSequencerTimeline, type SequencerTimelineIR } from "./sequencer"; +import { parseTrackingMaskProject, type TrackingMaskProjectIR } from "./tracking-mask"; +import { normalizeProjectAssetPath } from "./asset-path"; +import { parseEditorWorkflow, type EditorWorkflowIR } from "./editor-workflow"; +import { parseScriptSourceInventory, type ScriptSourceInventoryIR } from "./scripting-platform"; +import { parsePhysicsSimulationManifest, type PhysicsSimulationManifestIR } from "./physics-simulation"; +import { GEOMETRY_NODE_GRAPH_BUDGET, parseGeometryNodeGraph, type GeometryNodeGraphIR } from "./geometry-nodes"; + +export type SceneNodeType = + | "EMPTY" + | "MESH" + | "CURVE" + | "SURFACE" + | "FONT" + | "METABALL" + | "LIGHT" + | "CAMERA" + | "SPEAKER" + | "LIGHT_PROBE" + | "LATTICE" + | "ARMATURE" + | "CURVES" + | "POINT_CLOUD" + | "VOLUME" + | "GREASE_PENCIL" + | "UNKNOWN"; + +export interface SceneTransformIR { + translation: [number, number, number]; + rotationEuler: [number, number, number]; + scale: [number, number, number]; + rotationMode: number; +} + +export interface SceneNodeIR { + id: string; + name: string; + type: SceneNodeType; + parentId: string | null; + dataId: string | null; + visible: boolean; + selectable: boolean; + localMatrix: number[]; + worldMatrix: number[]; + transform: SceneTransformIR; + constraints?: ConstraintIR[]; +} + +export interface ConstraintIR { + name: string; + typeCode: number; + type: string; + enabled: boolean; + influence: number; + targetObjectId?: string | null; +} + +export interface ModifierIR { + uuid: string; + type: string; + name: string; + enabled: boolean; + showViewport: boolean; + showRender: boolean; + showEditMode?: boolean; + showOnCage?: boolean; + parameters: Record; + dependsOn?: string[]; + evaluationStatus?: "EVALUATED" | "METADATA_ONLY" | "BLOCKED"; +} + +export interface SkinWeightsIR { + boneNames: string[]; + indices: number[]; + weights: number[]; + bindMatrix: number[]; + armatureId?: string; + jointIds?: string[]; +} + +export interface ArmatureBoneIR { + id: string; + name: string; + parentId: string | null; + head: [number, number, number]; + tail: [number, number, number]; + restMatrix: number[]; + poseMatrix?: number[]; +} + +export interface ArmatureIR { + id: string; + name: string; + objectId?: string; + bones: ArmatureBoneIR[]; +} + +export interface ShapeKeyIR { + name: string; + positions: number[]; + relativeTo?: string | null; + value?: number; +} + +export interface VertexGroupIR { + name: string; + index: number; +} + +export interface MeshAttributeIR { + name: string; + domain: "POINT" | "EDGE" | "FACE" | "CORNER"; + dataType: string; +} + +export interface UVLayerIR { + name: string; + active: boolean; + activeRender: boolean; +} + +export interface MeshSummaryIR { + id: string; + name: string; + vertexCount: number; + edgeCount: number; + faceCount: number; + cornerCount: number; + triangleCount?: number; + geometryStatus: "summary-only" | "available" | "binary"; + geometryBufferId?: string; + topology?: "triangles" | "lines" | "points"; + positions?: number[]; + indices?: number[]; + normals?: number[]; + triangleCornerIndices?: number[]; + uvs?: number[]; + colors?: number[]; + triangleMaterialIndices?: number[]; + triangleFaceIndices?: number[]; + edgeVertexIndices?: number[]; + tangents?: number[]; + splitNormals?: number[]; + seamEdges?: number[]; + sharpEdges?: number[]; + materialSlotIds?: string[]; + bounds?: { min: [number, number, number]; max: [number, number, number] }; + modifierStack?: ModifierIR[]; + skinWeights?: SkinWeightsIR; + shapeKeys?: ShapeKeyIR[]; + vertexGroups?: VertexGroupIR[]; + attributes?: MeshAttributeIR[]; + uvLayers?: UVLayerIR[]; + activeUVMap?: string | null; + sculptMask?: number[]; + faceSets?: number[]; + activeFaceSet?: number; + sculptRevision?: number; +} + +export interface MaterialNodeIR { + id: string; + type: "RGB" | "VALUE" | "MATH" | "PRINCIPLED" | "IMAGE_TEXTURE" | "NORMAL_MAP" | "OUTPUT" | "UNSUPPORTED"; + name: string; + imageId?: string | null; + defaultValue?: number[]; + properties?: { operation?: "ADD" | "SUBTRACT" | "MULTIPLY" | "DIVIDE" | "MINIMUM" | "MAXIMUM" }; +} + +export interface MaterialLinkIR { + fromNodeId: string; + fromSocket: string; + toNodeId: string; + toSocket: string; +} + +export interface MaterialIR { + id: string; + name: string; + baseColor: [number, number, number, number]; + roughness: number; + metallic: number; + emissionColor: [number, number, number, number]; + alpha: number; + ior: number; + specularIORLevel?: number; + transmissionWeight?: number; + coatWeight?: number; + coatRoughness?: number; + emissionStrength?: number; + normalImageId?: string | null; + imageIds?: string[]; + warnings?: string[]; + /** SHA-256 of the serialized bounded shader graph when a node tree was read. */ + shaderGraphHash?: string; + nodes?: MaterialNodeIR[]; + links?: MaterialLinkIR[]; +} + +export interface CameraIR { + id: string; + name: string; + projection: "PERSPECTIVE" | "ORTHOGRAPHIC" | "PANORAMIC" | "CUSTOM"; + lensMm: number; + sensorWidthMm: number; + sensorHeightMm: number; + sensorFit: number; + shift: [number, number]; + near: number; + far: number; + orthoScale: number; + panoramaType?: number; + fisheyeFov?: number; + depthOfField?: { + enabled: boolean; + focusObjectId?: string | null; + focusDistance: number; + apertureFStop: number; + apertureBlades: number; + apertureRotation: number; + apertureRatio: number; + }; +} + +export interface LightIR { + id: string; + name: string; + lightType: number; + color: [number, number, number]; + energy: number; + radius: number; + spotAngle: number; + spotBlend: number; + areaShape: number; + areaSize: number; + areaSizeY: number; + sunAngle: number; + exposure?: number; + temperature?: number; + useTemperature?: boolean; + castsShadow?: boolean; + areaSpread?: number; +} + +export interface WorldIR { + id: string; + name: string; + color: [number, number, number]; + exposure: number; + environmentImageId?: string | null; + environmentStrength?: number; + environmentRotation?: number; + backgroundVisible?: boolean; + mist?: { + enabled: boolean; + type: "QUADRATIC" | "LINEAR" | "INVERSE_QUADRATIC"; + start: number; + depth: number; + intensity: number; + height: number; + }; +} + +export interface ImageIR { + id: string; + name: string; + assetId: string; + mimeType?: string; + width?: number; + height?: number; + sha256?: string; + colorSpace?: "SRGB" | "NON_COLOR" | "LINEAR"; + sourcePath?: string; + packed?: boolean; + packedByteLength?: number; + sourceKind?: "FILE" | "SEQUENCE" | "MOVIE" | "GENERATED" | "VIEWER" | "TILED" | "UNKNOWN"; + assetStatus?: "PACKED" | "GENERATED" | "EXTERNAL" | "UDIM_EXTERNAL" | "LINKED_LIBRARY_REQUIRED" | "MISSING" | "CORRUPT"; + errorCode?: "PACKED_IMAGE_SIGNATURE_INVALID" | "LINKED_IMAGE_LIBRARY_REQUIRED"; + libraryLinked?: boolean; + libraryPath?: string; + tiles?: Array<{ + number: number; + label: string; + width: number; + height: number; + generatedType: number; + generatedColor?: number[]; + sourcePath: string; + assetId: string; + mimeType: string; + packed: boolean; + packedByteLength?: number; + validSignature?: boolean; + }>; +} + +export type NonMeshDataType = "CURVE" | "SURFACE" | "FONT" | "METABALL" | "POINT_CLOUD" | "CURVES" | "VOLUME" | "HAIR"; + +export type NonMeshAttributeDomain = "POINT" | "CURVE" | "INSTANCE"; +export type NonMeshAttributeDataType = "BOOL" | "INT" | "FLOAT" | "FLOAT2" | "FLOAT3" | "BYTE_COLOR" | "FLOAT_COLOR"; + +export interface NonMeshAttributeIR { + name: string; + domain: NonMeshAttributeDomain; + dataType: NonMeshAttributeDataType; + components: 1 | 2 | 3 | 4; +} + +export interface EvaluatedNonMeshGeometryIR { + objectId: string; + meshId: string; + vertexCount: number; + edgeCount?: number; + triangleCount: number; + status: "EVALUATED" | "BLOCKED"; + errorCode?: "NON_MESH_DATA_BUDGET_EXCEEDED"; + materialSlotIds?: string[]; + sourceElementIndices?: number[]; +} + +export interface VolumeGridMetadataIR { + name: string; + valueType: string; + voxelCount: number; + activeVoxelCount?: number; + bounds?: { min: [number, number, number]; max: [number, number, number] }; +} + +export type NonMeshCurveSplineType = "POLY" | "BEZIER" | "NURBS"; + +export interface NonMeshFontPropertiesIR { + alignment: "LEFT" | "CENTER" | "RIGHT" | "JUSTIFY" | "FLUSH"; + alignY: "TOP_BASELINE" | "TOP" | "CENTER" | "BOTTOM_BASELINE" | "BOTTOM"; + extrude: number; + bevelDepth: number; + bevelResolution: number; + offset: number; + spacing?: number; + lineDistance?: number; + wordSpace?: number; + shear?: number; + fontSize?: number; + offsetX?: number; + offsetY?: number; +} + +export interface NonMeshFontCharacterIR { + kern: number; + materialIndex: number; + styleFlags: number; +} + +export interface NonMeshFontTextBoxIR { + x: number; + y: number; + width: number; + height: number; +} + +export interface NonMeshFontLinksIR { + regular: string; + bold: string; + italic: string; + boldItalic: string; +} + +export interface VFontResourceIR { + id: string; + name: string; + sourcePath: string; + builtin: boolean; + packed: boolean; + packedByteLength?: number; + sha256?: string; +} + +export interface SoundResourceIR { + id: string; + name: string; + sourcePath: string; + packed: boolean; + packedByteLength?: number; + volume: number; + pitch: number; + audioChannels: number; + sampleRate: number; +} + +export interface SpeakerResourceIR { + id: string; + name: string; + soundId?: string; + volumeMax: number; + volumeMin: number; + distanceMax: number; + distanceReference: number; + attenuation: number; + coneAngleOuter: number; + coneAngleInner: number; + coneVolumeOuter: number; + volume: number; + pitch: number; +} + +export interface TextResourceIR { + id: string; + name: string; + source: string; + sourceSha256: string; + byteLength: number; + lineCount: number; + internal: boolean; + sourcePath?: string; + isDirty: boolean; + useModule: boolean; +} + +export interface TextureResourceIR { + id: string; + name: string; + type: number; + noiseScale: number; + noiseDepth: number; + intensity: number; + contrast: number; + saturation: number; +} + +export interface WindowManagerResourceIR { + id: string; + name: string; + presetName: string; + windowCount: number; + interfaceLocked: boolean; +} + +export interface WorkspaceResourceIR { id: string; name: string; screenCount: number } + +export interface NonMeshVolumePropertiesIR { + displayDensity: number; + interpolation: "NEAREST" | "LINEAR"; + stepSize: number; + velocityGrid: string; + velocityScale: number; +} + +export interface NonMeshDataIR { + id: string; + name: string; + type: NonMeshDataType; + geometryStatus: "summary-only" | "available" | "binary" | "blocked"; + pointCount: number; + splineCount: number; + geometryBufferId?: string; + controlPoints?: number[]; + radii?: number[]; + splineOffsets?: number[]; + splineDimensions?: Array<{ u: number; v: number; orderU: number; orderV: number }>; + pointWeights?: number[]; + splineTypes?: NonMeshCurveSplineType[]; + cyclicU?: boolean[]; + cyclicV?: boolean[]; + handleTypes?: number[]; + handlePoints?: number[]; + handlePointIndices?: number[]; + attributes?: NonMeshAttributeIR[]; + attributeValues?: Array; + text?: string; + fontProperties?: NonMeshFontPropertiesIR; + fontCharacters?: NonMeshFontCharacterIR[]; + fontTextBoxes?: NonMeshFontTextBoxIR[]; + activeFontTextBox?: number; + fontLinks?: NonMeshFontLinksIR; + resolution?: number; + elements?: Array<{ type: number; position: [number, number, number]; radius: number; scale: [number, number, number] }>; + evaluatedGeometry?: EvaluatedNonMeshGeometryIR[]; + sourcePath?: string; + resourceKind?: "OPENVDB"; + resourceByteLength?: number; + volumeGrids?: VolumeGridMetadataIR[]; + volumeProperties?: NonMeshVolumePropertiesIR; + errorCode?: "NON_MESH_DATA_UNSUPPORTED" | "NON_MESH_DATA_BUDGET_EXCEEDED" | "NON_MESH_RESOURCE_MISSING" | "NON_MESH_BINARY_INVALID" | "NON_MESH_RESOURCE_OUTSIDE_PROJECT" | "NON_MESH_VDB_BUDGET_EXCEEDED"; +} + +export interface AnimationIR { + id: string; + name: string; + targetId: string; + frameStart: number; + frameEnd: number; + channels: Array<{ path: string; editable?: boolean; enabled?: boolean; selected?: boolean; group?: string; expanded?: boolean; interpolation?: "CONSTANT" | "LINEAR" | "BEZIER" | "MIXED"; keyframes: Array<{ frame: number; value: number[]; interpolation?: "CONSTANT" | "LINEAR" | "BEZIER" }> }>; +} + +export interface CollectionIR { + id: string; + name: string; + objectIds: string[]; + childCollectionIds: string[]; +} + +export interface SceneIR { + id: string; + name: string; + rootCollectionId?: string | null; + cameraObjectId?: string | null; + worldId?: string | null; + renderEngine?: string; + colorManagement?: { + displayDevice: string; + viewTransform: string; + look: string; + exposure: number; + gamma: number; + temperature?: number; + tint?: number; + whiteBalanceStatus?: "AVAILABLE" | "BLOCKED"; + }; + compositorGraph?: CompositorGraphIR; + compositorStatus?: "AVAILABLE" | "BLOCKED"; + sequencerTimeline?: SequencerTimelineIR; + sequencerStatus?: "AVAILABLE" | "BLOCKED"; +} + +export interface SceneSnapshotIR { + schemaVersion: 1; + revision: number; + sceneId: string; + source: { + kind: "blend" | "mock"; + fileVersion?: number; + fileFormatVersion?: number; + pointerSize?: number; + endianness?: "little" | "big"; + compression?: "none" | "gzip" | "zstd"; + }; + coordinateSystem: { + upAxis: "Z"; + forwardAxis: "-Y"; + handedness: "RIGHT"; + unitSystem: number; + unitScale: number; + }; + nodes: SceneNodeIR[]; + meshes: MeshSummaryIR[]; + materials: MaterialIR[]; + cameras: CameraIR[]; + lights: LightIR[]; + worlds: WorldIR[]; + images: ImageIR[]; + brushes?: BrushIR[]; + lineStyles?: FreestyleLineStyleIR[]; + lattices?: LatticeIR[]; + nonMeshData?: NonMeshDataIR[]; + vfonts?: VFontResourceIR[]; + greasePencils?: GreasePencilDataIR[]; + trackingMasks?: TrackingMaskProjectIR; + trackingMaskStatus?: "AVAILABLE" | "BLOCKED"; + libraryStatus?: "AVAILABLE" | "BLOCKED"; + editorWorkflow?: EditorWorkflowIR; + editorWorkflowStatus?: "AVAILABLE" | "BLOCKED"; + scriptSources?: ScriptSourceInventoryIR; + scriptSourceStatus?: "AVAILABLE" | "BLOCKED"; + physicsSimulation?: PhysicsSimulationManifestIR; + particleSettings?: ParticleSettingsIR[]; + sounds?: SoundResourceIR[]; + speakers?: SpeakerResourceIR[]; + texts?: TextResourceIR[]; + textures?: TextureResourceIR[]; + windowManager?: WindowManagerResourceIR; + workspaces?: WorkspaceResourceIR[]; + geometryNodeGraphs?: GeometryNodeGraphIR[]; + libraries?: Array<{ + id: string; + name: string; + sourcePath: string; + packed: boolean; + packedByteLength?: number; + status: "PACKED" | "EXTERNAL_REQUIRED"; + errorCode?: "LINKED_LIBRARY_RESOURCE_REQUIRED"; + dependencyIds: string[]; + readOnly: true; + }>; + animations: AnimationIR[]; + nlaTracks?: NlaTrackIR[]; + armatures?: ArmatureIR[]; + collections: CollectionIR[]; + scenes: SceneIR[]; + activeObjectId: string | null; + frame: { current: number; start: number; end: number }; +} + +export interface ParticleSettingsIR { + id: string; + name: string; + type: number; + from: number; + distribution: number; + physicsType: number; + totalParticles: number; + start: number; + end: number; + lifetime: number; + size: number; + drawSize: number; +} + +export interface BrushIR { + id: string; + name: string; + size: number; + alpha: number; + hardness: number; + spacing: number; + jitter: number; + sculptTool: number; +} + +export interface FreestyleLineStyleIR { + id: string; + name: string; + color: [number, number, number]; + alpha: number; + thickness: number; + chaining: number; + caps: number; + dashed: boolean; + modifierCounts: { color: number; alpha: number; thickness: number; geometry: number }; +} + +export type LatticeInterpolationIR = "KEY_LINEAR" | "KEY_CARDINAL" | "KEY_BSPLINE" | "KEY_CATMULL_ROM"; + +export interface LatticePointIR { + coDeform: [number, number, number]; + weight: number; + selected: boolean; +} + +export interface LatticeIR { + id: string; + name: string; + dimensions: [number, number, number]; + pointCount: number; + interpolation: [LatticeInterpolationIR, LatticeInterpolationIR, LatticeInterpolationIR]; + useOutside: boolean; + activePoint: number; + vertexGroup: string; + status: "AVAILABLE" | "BLOCKED"; + points?: LatticePointIR[]; + errorCode?: "LATTICE_DIMENSIONS_INVALID" | "LATTICE_POINTS_UNREADABLE"; +} + +function isRecord(value: unknown): value is Record { + return typeof value === "object" && value !== null && !Array.isArray(value); +} + +function requireArray(value: unknown, field: string): unknown[] { + if (!Array.isArray(value)) throw new Error(`SceneIR.${field} must be an array`); + return value; +} + +function requireString(value: unknown, field: string): string { + if (typeof value !== "string") throw new Error(`SceneIR.${field} must be a string`); + return value; +} + +function requireNumber(value: unknown, field: string): number { + if (typeof value !== "number" || !Number.isFinite(value)) { + throw new Error(`SceneIR.${field} must be a finite number`); + } + return value; +} + +function requireBoolean(value: unknown, field: string): boolean { + if (typeof value !== "boolean") throw new Error(`SceneIR.${field} must be a boolean`); + return value; +} + +function requireTuple(value: unknown, length: number, field: string): void { + if (!Array.isArray(value) || value.length !== length || value.some((item) => typeof item !== "number" || !Number.isFinite(item))) { + throw new Error(`SceneIR.${field} must contain ${length} finite numbers`); + } +} + +export function parseSceneSnapshotIR(value: unknown): SceneSnapshotIR { + if (!isRecord(value)) throw new Error("SceneIR snapshot must be an object"); + if (value.schemaVersion !== 1) throw new Error(`Unsupported SceneIR schema: ${String(value.schemaVersion)}`); + requireNumber(value.revision, "revision"); + requireString(value.sceneId, "sceneId"); + const nodes = requireArray(value.nodes, "nodes"); + const meshes = requireArray(value.meshes, "meshes"); + requireArray(value.materials, "materials"); + requireArray(value.cameras, "cameras"); + requireArray(value.lights, "lights"); + requireArray(value.worlds, "worlds"); + requireArray(value.images, "images"); + if (value.brushes !== undefined) { + const brushes = requireArray(value.brushes, "brushes"); + for (const [index, brush] of brushes.entries()) { + if (!isRecord(brush)) throw new Error(`SceneIR.brushes[${index}] must be an object`); + requireString(brush.id, `brushes[${index}].id`); + requireString(brush.name, `brushes[${index}].name`); + const size = requireNumber(brush.size, `brushes[${index}].size`); + const alpha = requireNumber(brush.alpha, `brushes[${index}].alpha`); + const hardness = requireNumber(brush.hardness, `brushes[${index}].hardness`); + const spacing = requireNumber(brush.spacing, `brushes[${index}].spacing`); + const jitter = requireNumber(brush.jitter, `brushes[${index}].jitter`); + const sculptTool = requireNumber(brush.sculptTool, `brushes[${index}].sculptTool`); + if (!Number.isSafeInteger(size) || size < 0 || size > 100000 || alpha < 0 || alpha > 1 || hardness < 0 || hardness > 1 || !Number.isSafeInteger(spacing) || spacing < 1 || spacing > 1000 || jitter < 0 || jitter > 1 || !Number.isSafeInteger(sculptTool) || sculptTool < 0) { + throw new Error(`SceneIR.brushes[${index}] is outside the bounded brush contract`); + } + } + } + if (value.lineStyles !== undefined) { + const lineStyles = requireArray(value.lineStyles, "lineStyles"); + for (const [index, lineStyle] of lineStyles.entries()) { + if (!isRecord(lineStyle)) throw new Error(`SceneIR.lineStyles[${index}] must be an object`); + requireString(lineStyle.id, `lineStyles[${index}].id`); + requireString(lineStyle.name, `lineStyles[${index}].name`); + requireTuple(lineStyle.color, 3, `lineStyles[${index}].color`); + const alpha = requireNumber(lineStyle.alpha, `lineStyles[${index}].alpha`); + const thickness = requireNumber(lineStyle.thickness, `lineStyles[${index}].thickness`); + requireNumber(lineStyle.chaining, `lineStyles[${index}].chaining`); + requireNumber(lineStyle.caps, `lineStyles[${index}].caps`); + requireBoolean(lineStyle.dashed, `lineStyles[${index}].dashed`); + if (!isRecord(lineStyle.modifierCounts)) throw new Error(`SceneIR.lineStyles[${index}].modifierCounts must be an object`); + for (const field of ["color", "alpha", "thickness", "geometry"] as const) { + const count = requireNumber(lineStyle.modifierCounts[field], `lineStyles[${index}].modifierCounts.${field}`); + if (!Number.isSafeInteger(count) || count < 0 || count > 1024) throw new Error(`SceneIR.lineStyles[${index}].modifierCounts.${field} is outside budget`); + } + if (alpha < 0 || alpha > 1 || thickness < 0 || thickness > 10000) throw new Error(`SceneIR.lineStyles[${index}] is outside bounds`); + } + } + if (value.lattices !== undefined) { + const lattices = requireArray(value.lattices, "lattices"); + if (lattices.length > 4096) throw new Error("SceneIR.lattices exceeds the data-block budget"); + const ids = new Set(); + for (const [index, lattice] of lattices.entries()) { + if (!isRecord(lattice)) throw new Error(`SceneIR.lattices[${index}] must be an object`); + const id = requireString(lattice.id, `lattices[${index}].id`); + if (!id.startsWith("lattice:") || ids.has(id)) throw new Error(`SceneIR.lattices[${index}].id is invalid`); + ids.add(id); + requireString(lattice.name, `lattices[${index}].name`); + if (!Array.isArray(lattice.dimensions) || lattice.dimensions.length !== 3 || lattice.dimensions.some((item) => !Number.isSafeInteger(item) || item < 1 || item > 64)) throw new Error(`SceneIR.lattices[${index}].dimensions is invalid`); + const pointCount = requireNumber(lattice.pointCount, `lattices[${index}].pointCount`); + const expectedCount = (lattice.dimensions as number[]).reduce((product, item) => product * item, 1); + if (!Number.isSafeInteger(pointCount) || pointCount !== expectedCount || pointCount > 64 * 64 * 64) throw new Error(`SceneIR.lattices[${index}].pointCount is invalid`); + const interpolation = ["KEY_LINEAR", "KEY_CARDINAL", "KEY_BSPLINE", "KEY_CATMULL_ROM"]; + if (!Array.isArray(lattice.interpolation) || lattice.interpolation.length !== 3 || lattice.interpolation.some((item) => !interpolation.includes(item as string))) throw new Error(`SceneIR.lattices[${index}].interpolation is invalid`); + requireBoolean(lattice.useOutside, `lattices[${index}].useOutside`); + const activePoint = requireNumber(lattice.activePoint, `lattices[${index}].activePoint`); + if (!Number.isSafeInteger(activePoint) || activePoint < -1 || activePoint >= pointCount) throw new Error(`SceneIR.lattices[${index}].activePoint is invalid`); + requireString(lattice.vertexGroup, `lattices[${index}].vertexGroup`); + if (lattice.status !== "AVAILABLE" && lattice.status !== "BLOCKED") throw new Error(`SceneIR.lattices[${index}].status is invalid`); + if (lattice.status === "AVAILABLE") { + if (!Array.isArray(lattice.points) || lattice.points.length !== pointCount) throw new Error(`SceneIR.lattices[${index}].points is incomplete`); + for (const [pointIndex, point] of lattice.points.entries()) { + if (!isRecord(point)) throw new Error(`SceneIR.lattices[${index}].points[${pointIndex}] is invalid`); + requireTuple(point.coDeform, 3, `lattices[${index}].points[${pointIndex}].coDeform`); + const weight = requireNumber(point.weight, `lattices[${index}].points[${pointIndex}].weight`); + if (weight < 0.01 || weight > 100) throw new Error(`SceneIR.lattices[${index}].points[${pointIndex}].weight is invalid`); + requireBoolean(point.selected, `lattices[${index}].points[${pointIndex}].selected`); + } + if (lattice.errorCode !== undefined) throw new Error(`SceneIR.lattices[${index}] available data cannot contain errorCode`); + } + else if (!lattice.errorCode || lattice.points !== undefined) { + throw new Error(`SceneIR.lattices[${index}] blocked data is incomplete`); + } + } + } + if (value.nonMeshData !== undefined) requireArray(value.nonMeshData, "nonMeshData"); + if (value.particleSettings !== undefined) { + const settings = requireArray(value.particleSettings, "particleSettings"); + if (settings.length > 4096) throw new Error("SceneIR.particleSettings exceeds the data-block budget"); + const ids = new Set(); + for (const [index, setting] of settings.entries()) { + if (!isRecord(setting)) throw new Error(`SceneIR.particleSettings[${index}] must be an object`); + const id = requireString(setting.id, `particleSettings[${index}].id`); + if (!id.startsWith("particle-settings:") || ids.has(id)) throw new Error(`SceneIR.particleSettings[${index}].id is invalid`); + ids.add(id); + requireString(setting.name, `particleSettings[${index}].name`); + for (const field of ["type", "from", "distribution", "physicsType", "totalParticles"] as const) { + const number = requireNumber(setting[field], `particleSettings[${index}].${field}`); + if (!Number.isSafeInteger(number) || number < 0) throw new Error(`SceneIR.particleSettings[${index}].${field} is invalid`); + } + for (const field of ["start", "end", "lifetime", "size", "drawSize"] as const) { + const number = requireNumber(setting[field], `particleSettings[${index}].${field}`); + if (number < 0 || number > 1_000_000) throw new Error(`SceneIR.particleSettings[${index}].${field} is invalid`); + } + } + } + if (value.sounds !== undefined) { + const sounds = requireArray(value.sounds, "sounds"); + if (sounds.length > 4096) throw new Error("SceneIR.sounds exceeds the data-block budget"); + const ids = new Set(); + for (const [index, sound] of sounds.entries()) { + if (!isRecord(sound)) throw new Error(`SceneIR.sounds[${index}] must be an object`); + const id = requireString(sound.id, `sounds[${index}].id`); + if (!id.startsWith("sound:") || ids.has(id)) throw new Error(`SceneIR.sounds[${index}].id is invalid`); + ids.add(id); + requireString(sound.name, `sounds[${index}].name`); + requireString(sound.sourcePath, `sounds[${index}].sourcePath`); + requireBoolean(sound.packed, `sounds[${index}].packed`); + for (const field of ["volume", "pitch"] as const) { + const number = requireNumber(sound[field], `sounds[${index}].${field}`); + if (number < 0 || number > 1000) throw new Error(`SceneIR.sounds[${index}].${field} is outside bounds`); + } + for (const field of ["audioChannels", "sampleRate"] as const) { + const number = requireNumber(sound[field], `sounds[${index}].${field}`); + if (!Number.isSafeInteger(number) || number < 0 || number > 1_000_000) throw new Error(`SceneIR.sounds[${index}].${field} is invalid`); + } + if (sound.packedByteLength !== undefined && (!Number.isSafeInteger(sound.packedByteLength) || (sound.packedByteLength as number) < 0)) throw new Error(`SceneIR.sounds[${index}].packedByteLength is invalid`); + if (sound.packed && sound.packedByteLength === undefined) throw new Error(`SceneIR.sounds[${index}] packed identity is incomplete`); + } + } + if (value.speakers !== undefined) { + const speakers = requireArray(value.speakers, "speakers"); + if (speakers.length > 4096) throw new Error("SceneIR.speakers exceeds the data-block budget"); + const ids = new Set(); + for (const [index, speaker] of speakers.entries()) { + if (!isRecord(speaker)) throw new Error(`SceneIR.speakers[${index}] must be an object`); + const id = requireString(speaker.id, `speakers[${index}].id`); + if (!id.startsWith("speaker:") || ids.has(id)) throw new Error(`SceneIR.speakers[${index}].id is invalid`); + ids.add(id); + requireString(speaker.name, `speakers[${index}].name`); + if (speaker.soundId !== undefined && (!Array.isArray(value.sounds) || typeof speaker.soundId !== "string" || !speaker.soundId.startsWith("sound:"))) { + throw new Error(`SceneIR.speakers[${index}].soundId is invalid`); + } + for (const field of ["volumeMax", "volumeMin", "distanceMax", "distanceReference", "attenuation"] as const) { + const number = requireNumber(speaker[field], `speakers[${index}].${field}`); + if (number < 0 || number > 1_000_000_000) throw new Error(`SceneIR.speakers[${index}].${field} is outside bounds`); + } + for (const field of ["coneAngleOuter", "coneAngleInner"] as const) { + const number = requireNumber(speaker[field], `speakers[${index}].${field}`); + if (number < 0 || number > 360) throw new Error(`SceneIR.speakers[${index}].${field} is outside bounds`); + } + const coneVolumeOuter = requireNumber(speaker.coneVolumeOuter, `speakers[${index}].coneVolumeOuter`); + if (coneVolumeOuter < 0 || coneVolumeOuter > 1) throw new Error(`SceneIR.speakers[${index}].coneVolumeOuter is outside bounds`); + for (const field of ["volume", "pitch"] as const) { + const number = requireNumber(speaker[field], `speakers[${index}].${field}`); + if (number < 0 || number > 1000) throw new Error(`SceneIR.speakers[${index}].${field} is outside bounds`); + } + } + } + if (value.texts !== undefined) { + const texts = requireArray(value.texts, "texts"); + if (texts.length > 4096) throw new Error("SceneIR.texts exceeds the data-block budget"); + const ids = new Set(); + for (const [index, text] of texts.entries()) { + if (!isRecord(text)) throw new Error(`SceneIR.texts[${index}] must be an object`); + const id = requireString(text.id, `texts[${index}].id`); + if (!id.startsWith("text:") || ids.has(id)) throw new Error(`SceneIR.texts[${index}].id is invalid`); + ids.add(id); + requireString(text.name, `texts[${index}].name`); + const source = requireString(text.source, `texts[${index}].source`); + const sourceSha256 = requireString(text.sourceSha256, `texts[${index}].sourceSha256`); + if (!/^[a-f0-9]{64}$/.test(sourceSha256)) throw new Error(`SceneIR.texts[${index}].sourceSha256 is invalid`); + const byteLength = requireNumber(text.byteLength, `texts[${index}].byteLength`); + const lineCount = requireNumber(text.lineCount, `texts[${index}].lineCount`); + if (!Number.isSafeInteger(byteLength) || byteLength !== new TextEncoder().encode(source).byteLength || byteLength > 1_048_576) throw new Error(`SceneIR.texts[${index}].byteLength is invalid`); + if (!Number.isSafeInteger(lineCount) || lineCount < 1 || lineCount > 65_536) throw new Error(`SceneIR.texts[${index}].lineCount is invalid`); + requireBoolean(text.internal, `texts[${index}].internal`); + if (text.sourcePath !== undefined) requireString(text.sourcePath, `texts[${index}].sourcePath`); + requireBoolean(text.isDirty, `texts[${index}].isDirty`); + requireBoolean(text.useModule, `texts[${index}].useModule`); + } + } + if (value.textures !== undefined) { + const textures = requireArray(value.textures, "textures"); + if (textures.length > 4096) throw new Error("SceneIR.textures exceeds the data-block budget"); + const ids = new Set(); + for (const [index, texture] of textures.entries()) { + if (!isRecord(texture)) throw new Error(`SceneIR.textures[${index}] must be an object`); + const id = requireString(texture.id, `textures[${index}].id`); + if (!id.startsWith("texture:") || ids.has(id)) throw new Error(`SceneIR.textures[${index}].id is invalid`); + ids.add(id); + requireString(texture.name, `textures[${index}].name`); + const type = requireNumber(texture.type, `textures[${index}].type`); + const noiseDepth = requireNumber(texture.noiseDepth, `textures[${index}].noiseDepth`); + if (!Number.isSafeInteger(type) || type < 0 || !Number.isSafeInteger(noiseDepth) || noiseDepth < 0 || noiseDepth > 30) throw new Error(`SceneIR.textures[${index}] integer fields are invalid`); + for (const field of ["noiseScale", "intensity", "contrast", "saturation"] as const) { + const number = requireNumber(texture[field], `textures[${index}].${field}`); + if (number < 0 || number > 1000) throw new Error(`SceneIR.textures[${index}].${field} is outside bounds`); + } + } + } + if (value.windowManager !== undefined) { + if (!isRecord(value.windowManager)) throw new Error("SceneIR.windowManager must be an object"); + const manager = value.windowManager; + const id = requireString(manager.id, "windowManager.id"); + if (id !== "window-manager:WinMan") throw new Error("SceneIR.windowManager.id is invalid"); + requireString(manager.name, "windowManager.name"); + requireString(manager.presetName, "windowManager.presetName"); + const windowCount = requireNumber(manager.windowCount, "windowManager.windowCount"); + if (!Number.isSafeInteger(windowCount) || windowCount < 0 || windowCount > 1024) throw new Error("SceneIR.windowManager.windowCount is invalid"); + requireBoolean(manager.interfaceLocked, "windowManager.interfaceLocked"); + } + if (value.workspaces !== undefined) { + const workspaces = requireArray(value.workspaces, "workspaces"); + const ids = new Set(); + for (const [index, workspace] of workspaces.entries()) { + if (!isRecord(workspace)) throw new Error(`SceneIR.workspaces[${index}] must be an object`); + const id = requireString(workspace.id, `workspaces[${index}].id`); + if (!id.startsWith("workspace:") || ids.has(id)) throw new Error(`SceneIR.workspaces[${index}].id is invalid`); ids.add(id); + requireString(workspace.name, `workspaces[${index}].name`); const count = requireNumber(workspace.screenCount, `workspaces[${index}].screenCount`); + if (!Number.isSafeInteger(count) || count < 0 || count > 64) throw new Error(`SceneIR.workspaces[${index}].screenCount is invalid`); + } + } + if (value.greasePencils !== undefined) requireArray(value.greasePencils, "greasePencils"); + if (value.libraries !== undefined) requireArray(value.libraries, "libraries"); + requireArray(value.animations, "animations"); + if (value.armatures !== undefined) requireArray(value.armatures, "armatures"); + requireArray(value.collections, "collections"); + requireArray(value.scenes, "scenes"); + if (!isRecord(value.source)) throw new Error("SceneIR.source must be an object"); + if (!isRecord(value.coordinateSystem)) throw new Error("SceneIR.coordinateSystem must be an object"); + if (!isRecord(value.frame)) throw new Error("SceneIR.frame must be an object"); + if (value.source.kind !== "blend" && value.source.kind !== "mock") throw new Error("SceneIR.source.kind is invalid"); + if (value.coordinateSystem.upAxis !== "Z" || value.coordinateSystem.forwardAxis !== "-Y" || value.coordinateSystem.handedness !== "RIGHT") { + throw new Error("SceneIR.coordinateSystem is unsupported"); + } + requireNumber(value.coordinateSystem.unitSystem, "coordinateSystem.unitSystem"); + requireNumber(value.coordinateSystem.unitScale, "coordinateSystem.unitScale"); + requireNumber(value.frame.current, "frame.current"); + requireNumber(value.frame.start, "frame.start"); + requireNumber(value.frame.end, "frame.end"); + for (const [index, node] of nodes.entries()) { + if (!isRecord(node)) throw new Error(`SceneIR.nodes[${index}] must be an object`); + requireString(node.id, `nodes[${index}].id`); + requireString(node.name, `nodes[${index}].name`); + requireBoolean(node.visible, `nodes[${index}].visible`); + requireBoolean(node.selectable, `nodes[${index}].selectable`); + if (!Array.isArray(node.localMatrix) || node.localMatrix.length !== 16) { + throw new Error(`SceneIR.nodes[${index}].localMatrix must contain 16 numbers`); + } + requireTuple(node.localMatrix, 16, `nodes[${index}].localMatrix`); + requireTuple(node.worldMatrix, 16, `nodes[${index}].worldMatrix`); + if (!isRecord(node.transform)) throw new Error(`SceneIR.nodes[${index}].transform must be an object`); + requireTuple(node.transform.translation, 3, `nodes[${index}].transform.translation`); + requireTuple(node.transform.rotationEuler, 3, `nodes[${index}].transform.rotationEuler`); + requireTuple(node.transform.scale, 3, `nodes[${index}].transform.scale`); + requireNumber(node.transform.rotationMode, `nodes[${index}].transform.rotationMode`); + } + for (const [index, mesh] of meshes.entries()) { + if (!isRecord(mesh)) throw new Error(`SceneIR.meshes[${index}] must be an object`); + requireString(mesh.id, `meshes[${index}].id`); + const vertexCount = requireNumber(mesh.vertexCount, `meshes[${index}].vertexCount`); + const edgeCount = requireNumber(mesh.edgeCount, `meshes[${index}].edgeCount`); + requireNumber(mesh.faceCount, `meshes[${index}].faceCount`); + const cornerCount = requireNumber(mesh.cornerCount, `meshes[${index}].cornerCount`); + if (mesh.positions !== undefined) requireTuple(mesh.positions, vertexCount * 3, `meshes[${index}].positions`); + if (mesh.normals !== undefined) requireTuple(mesh.normals, vertexCount * 3, `meshes[${index}].normals`); + if (mesh.uvs !== undefined) requireTuple(mesh.uvs, cornerCount * 2, `meshes[${index}].uvs`); + if (mesh.colors !== undefined) requireTuple(mesh.colors, cornerCount * 4, `meshes[${index}].colors`); + if (mesh.sculptMask !== undefined) { + if (!Array.isArray(mesh.sculptMask) || mesh.sculptMask.length !== vertexCount || mesh.sculptMask.some((item) => typeof item !== "number" || !Number.isFinite(item) || item < 0 || item > 1)) { + throw new Error(`SceneIR.meshes[${index}].sculptMask must match vertexCount and contain values in [0,1]`); + } + } + if (mesh.faceSets !== undefined) { + if (!Array.isArray(mesh.faceSets) || mesh.faceSets.length !== mesh.faceCount || mesh.faceSets.some((item) => typeof item !== "number" || !Number.isSafeInteger(item) || item < 0)) { + throw new Error(`SceneIR.meshes[${index}].faceSets must match faceCount and contain non-negative integers`); + } + } + if (mesh.activeFaceSet !== undefined && (typeof mesh.activeFaceSet !== "number" || !Number.isSafeInteger(mesh.activeFaceSet) || mesh.activeFaceSet < -1)) throw new Error(`SceneIR.meshes[${index}].activeFaceSet is invalid`); + if (mesh.sculptRevision !== undefined && (typeof mesh.sculptRevision !== "number" || !Number.isSafeInteger(mesh.sculptRevision) || mesh.sculptRevision < 0)) throw new Error(`SceneIR.meshes[${index}].sculptRevision is invalid`); + if (mesh.indices !== undefined) { + if (!Array.isArray(mesh.indices) || mesh.indices.some((item) => !Number.isInteger(item) || item < 0)) { + throw new Error(`SceneIR.meshes[${index}].indices must contain non-negative integers`); + } + if (mesh.indices.length % 3 !== 0) throw new Error(`SceneIR.meshes[${index}].indices must contain triangles`); + } + if (mesh.edgeVertexIndices !== undefined) { + if (!Array.isArray(mesh.edgeVertexIndices) || mesh.edgeVertexIndices.some((item) => !Number.isInteger(item) || item < 0 || item >= vertexCount)) { + throw new Error(`SceneIR.meshes[${index}].edgeVertexIndices must contain valid vertex indices`); + } + if (mesh.edgeVertexIndices.length !== edgeCount * 2) throw new Error(`SceneIR.meshes[${index}].edgeVertexIndices length must match edgeCount`); + } + if (mesh.triangleCornerIndices !== undefined) { + if (!Array.isArray(mesh.triangleCornerIndices) || mesh.triangleCornerIndices.some((item) => !Number.isInteger(item) || item < 0)) { + throw new Error(`SceneIR.meshes[${index}].triangleCornerIndices must contain non-negative integers`); + } + if (mesh.indices !== undefined && mesh.triangleCornerIndices.length !== mesh.indices.length) { + throw new Error(`SceneIR.meshes[${index}].triangleCornerIndices length must match index count`); + } + } + if (mesh.triangleMaterialIndices !== undefined) { + if (!Array.isArray(mesh.triangleMaterialIndices) || mesh.triangleMaterialIndices.some((item) => !Number.isInteger(item) || item < 0)) { + throw new Error(`SceneIR.meshes[${index}].triangleMaterialIndices must contain non-negative integers`); + } + if (mesh.indices !== undefined && mesh.triangleMaterialIndices.length !== mesh.indices.length / 3) { + throw new Error(`SceneIR.meshes[${index}].triangleMaterialIndices length must match triangle count`); + } + } + if (mesh.materialSlotIds !== undefined && (!Array.isArray(mesh.materialSlotIds) || mesh.materialSlotIds.some((item) => typeof item !== "string"))) { + throw new Error(`SceneIR.meshes[${index}].materialSlotIds must contain strings`); + } + if (mesh.bounds !== undefined) { + if (!isRecord(mesh.bounds)) throw new Error(`SceneIR.meshes[${index}].bounds must be an object`); + requireTuple(mesh.bounds.min, 3, `meshes[${index}].bounds.min`); + requireTuple(mesh.bounds.max, 3, `meshes[${index}].bounds.max`); + } + if (mesh.modifierStack !== undefined) { + if (!Array.isArray(mesh.modifierStack)) throw new Error(`SceneIR.meshes[${index}].modifierStack must be an array`); + for (const [modifierIndex, modifier] of mesh.modifierStack.entries()) { + if (!isRecord(modifier)) throw new Error(`SceneIR.meshes[${index}].modifierStack[${modifierIndex}] must be an object`); + requireString(modifier.uuid, `meshes[${index}].modifierStack[${modifierIndex}].uuid`); + requireString(modifier.type, `meshes[${index}].modifierStack[${modifierIndex}].type`); + requireString(modifier.name, `meshes[${index}].modifierStack[${modifierIndex}].name`); + requireBoolean(modifier.enabled, `meshes[${index}].modifierStack[${modifierIndex}].enabled`); + requireBoolean(modifier.showViewport, `meshes[${index}].modifierStack[${modifierIndex}].showViewport`); + requireBoolean(modifier.showRender, `meshes[${index}].modifierStack[${modifierIndex}].showRender`); + if (!isRecord(modifier.parameters)) throw new Error(`SceneIR.meshes[${index}].modifierStack[${modifierIndex}].parameters must be an object`); + if (modifier.dependsOn !== undefined && (!Array.isArray(modifier.dependsOn) || modifier.dependsOn.some((item) => typeof item !== "string"))) { + throw new Error(`SceneIR.meshes[${index}].modifierStack[${modifierIndex}].dependsOn must contain strings`); + } + if (modifier.evaluationStatus !== undefined && !["EVALUATED", "METADATA_ONLY", "BLOCKED"].includes(modifier.evaluationStatus as string)) { + throw new Error(`SceneIR.meshes[${index}].modifierStack[${modifierIndex}].evaluationStatus is invalid`); + } + } + } + if (mesh.skinWeights !== undefined) { + if (!isRecord(mesh.skinWeights)) throw new Error(`SceneIR.meshes[${index}].skinWeights must be an object`); + const skin = mesh.skinWeights; + const boneNames = requireArray(skin.boneNames, `meshes[${index}].skinWeights.boneNames`); + if (boneNames.some((item) => typeof item !== "string")) throw new Error(`SceneIR.meshes[${index}].skinWeights.boneNames must contain strings`); + const indices = requireArray(skin.indices, `meshes[${index}].skinWeights.indices`); + const weights = requireArray(skin.weights, `meshes[${index}].skinWeights.weights`); + if (indices.length !== weights.length || indices.length !== vertexCount * 4) throw new Error(`SceneIR.meshes[${index}].skinWeights arrays must contain vertexCount * 4 entries`); + if (indices.some((item) => typeof item !== "number" || !Number.isInteger(item) || item < 0 || item >= boneNames.length)) throw new Error(`SceneIR.meshes[${index}].skinWeights.indices are invalid`); + if (weights.some((item) => typeof item !== "number" || !Number.isFinite(item) || item < 0)) throw new Error(`SceneIR.meshes[${index}].skinWeights.weights are invalid`); + requireTuple(skin.bindMatrix, 16, `meshes[${index}].skinWeights.bindMatrix`); + if (skin.armatureId !== undefined) requireString(skin.armatureId, `meshes[${index}].skinWeights.armatureId`); + if (skin.jointIds !== undefined) { + if (!Array.isArray(skin.jointIds) || skin.jointIds.some((item) => typeof item !== "string")) { + throw new Error(`meshes[${index}].skinWeights.jointIds must contain strings`); + } + if (skin.jointIds.length !== boneNames.length) throw new Error(`meshes[${index}].skinWeights.jointIds must match boneNames`); + } + } + if (mesh.shapeKeys !== undefined) { + if (!Array.isArray(mesh.shapeKeys)) throw new Error(`SceneIR.meshes[${index}].shapeKeys must be an array`); + for (const [shapeIndex, shape] of mesh.shapeKeys.entries()) { + if (!isRecord(shape)) throw new Error(`SceneIR.meshes[${index}].shapeKeys[${shapeIndex}] must be an object`); + requireString(shape.name, `meshes[${index}].shapeKeys[${shapeIndex}].name`); + requireTuple(shape.positions, vertexCount * 3, `meshes[${index}].shapeKeys[${shapeIndex}].positions`); + if (shape.relativeTo !== undefined && shape.relativeTo !== null) requireString(shape.relativeTo, `meshes[${index}].shapeKeys[${shapeIndex}].relativeTo`); + if (shape.value !== undefined) requireNumber(shape.value, `meshes[${index}].shapeKeys[${shapeIndex}].value`); + } + } + if (mesh.geometryStatus === "available" && (!mesh.positions || !mesh.indices || !["triangles", "lines", "points"].includes(mesh.topology as string))) { + throw new Error(`SceneIR.meshes[${index}] available geometry is incomplete`); + } + if (mesh.topology === "lines" && mesh.edgeVertexIndices === undefined && mesh.geometryStatus === "available") { + throw new Error(`SceneIR.meshes[${index}] line geometry is missing edgeVertexIndices`); + } + if (mesh.topology === "lines" && mesh.geometryStatus === "binary" && edgeCount === 0) { + throw new Error(`SceneIR.meshes[${index}] line geometry must contain edges`); + } + if (mesh.geometryStatus === "binary" && (typeof mesh.geometryBufferId !== "string" || !["triangles", "lines", "points"].includes(mesh.topology as string))) { + throw new Error(`SceneIR.meshes[${index}] binary geometry is incomplete`); + } + } + for (const [index, armature] of ((value.armatures ?? []) as unknown[]).entries()) { + if (!isRecord(armature)) throw new Error(`SceneIR.armatures[${index}] must be an object`); + requireString(armature.id, `armatures[${index}].id`); + requireString(armature.name, `armatures[${index}].name`); + if (armature.objectId !== undefined) requireString(armature.objectId, `armatures[${index}].objectId`); + const bones = requireArray(armature.bones, `armatures[${index}].bones`); + for (const [boneIndex, bone] of bones.entries()) { + if (!isRecord(bone)) throw new Error(`SceneIR.armatures[${index}].bones[${boneIndex}] must be an object`); + requireString(bone.id, `armatures[${index}].bones[${boneIndex}].id`); + requireString(bone.name, `armatures[${index}].bones[${boneIndex}].name`); + if (bone.parentId !== null) requireString(bone.parentId, `armatures[${index}].bones[${boneIndex}].parentId`); + requireTuple(bone.head, 3, `armatures[${index}].bones[${boneIndex}].head`); + requireTuple(bone.tail, 3, `armatures[${index}].bones[${boneIndex}].tail`); + requireTuple(bone.restMatrix, 16, `armatures[${index}].bones[${boneIndex}].restMatrix`); + if (bone.poseMatrix !== undefined) requireTuple(bone.poseMatrix, 16, `armatures[${index}].bones[${boneIndex}].poseMatrix`); + } + } + for (const [index, image] of (value.images as unknown[]).entries()) { + if (!isRecord(image)) throw new Error(`SceneIR.images[${index}] must be an object`); + requireString(image.id, `images[${index}].id`); + requireString(image.name, `images[${index}].name`); + requireString(image.assetId, `images[${index}].assetId`); + if (image.sourcePath !== undefined) requireString(image.sourcePath, `images[${index}].sourcePath`); + if (image.packed !== undefined) requireBoolean(image.packed, `images[${index}].packed`); + if (image.packedByteLength !== undefined) requireNumber(image.packedByteLength, `images[${index}].packedByteLength`); + if (image.colorSpace !== undefined && !["SRGB", "NON_COLOR", "LINEAR"].includes(image.colorSpace as string)) throw new Error(`images[${index}].colorSpace is invalid`); + if (image.sourceKind !== undefined) requireString(image.sourceKind, `images[${index}].sourceKind`); + if (image.assetStatus !== undefined) requireString(image.assetStatus, `images[${index}].assetStatus`); + if (image.libraryLinked !== undefined) requireBoolean(image.libraryLinked, `images[${index}].libraryLinked`); + if (image.libraryPath !== undefined) requireString(image.libraryPath, `images[${index}].libraryPath`); + if (image.tiles !== undefined && !Array.isArray(image.tiles)) throw new Error(`images[${index}].tiles must be an array`); + } + const nonMeshIds = new Set(); + const vfontIds = new Set(); + if (value.vfonts !== undefined) { + if (!Array.isArray(value.vfonts) || value.vfonts.length > 4096) throw new Error("SceneIR.vfonts is invalid"); + for (const [index, font] of value.vfonts.entries()) { + if (!isRecord(font)) throw new Error(`SceneIR.vfonts[${index}] is invalid`); + const id = requireString(font.id, `vfonts[${index}].id`); + if (!id.startsWith("vfont:") || vfontIds.has(id)) throw new Error(`SceneIR.vfonts[${index}].id is invalid`); + vfontIds.add(id); + requireString(font.name, `vfonts[${index}].name`); + requireString(font.sourcePath, `vfonts[${index}].sourcePath`); + requireBoolean(font.builtin, `vfonts[${index}].builtin`); + requireBoolean(font.packed, `vfonts[${index}].packed`); + if (font.packed) { + if (!Number.isSafeInteger(font.packedByteLength) || (font.packedByteLength as number) <= 0 || + typeof font.sha256 !== "string" || !/^[0-9a-f]{64}$/.test(font.sha256)) { + throw new Error(`SceneIR.vfonts[${index}] packed identity is invalid`); + } + } + else if (font.packedByteLength !== undefined || font.sha256 !== undefined) { + throw new Error(`SceneIR.vfonts[${index}] unpacked identity is invalid`); + } + } + } + for (const [index, data] of ((value.nonMeshData ?? []) as unknown[]).entries()) { + if (!isRecord(data)) throw new Error(`SceneIR.nonMeshData[${index}] must be an object`); + const dataId = requireString(data.id, `nonMeshData[${index}].id`); + if (nonMeshIds.has(dataId)) throw new Error(`SceneIR.nonMeshData contains duplicate id: ${dataId}`); + nonMeshIds.add(dataId); + requireString(data.name, `nonMeshData[${index}].name`); + if (!["CURVE", "SURFACE", "FONT", "METABALL", "POINT_CLOUD", "CURVES", "VOLUME", "HAIR"].includes(data.type as string)) throw new Error(`SceneIR.nonMeshData[${index}].type is invalid`); + if (!["summary-only", "available", "binary", "blocked"].includes(data.geometryStatus as string)) throw new Error(`SceneIR.nonMeshData[${index}].geometryStatus is invalid`); + const pointCount = requireNumber(data.pointCount, `nonMeshData[${index}].pointCount`); + const splineCount = requireNumber(data.splineCount, `nonMeshData[${index}].splineCount`); + if (!Number.isSafeInteger(pointCount) || pointCount < 0 || (pointCount > 1_000_000 && (data.geometryStatus !== "blocked" || data.errorCode !== "NON_MESH_DATA_BUDGET_EXCEEDED"))) throw new Error(`SceneIR.nonMeshData[${index}].pointCount exceeds the 1M point budget without a blocked gate`); + if (!Number.isSafeInteger(splineCount) || splineCount < 0 || splineCount > 1_000_000) throw new Error(`SceneIR.nonMeshData[${index}].splineCount is invalid`); + if (data.geometryStatus === "binary" && (typeof data.geometryBufferId !== "string" || data.geometryBufferId.length === 0)) throw new Error(`SceneIR.nonMeshData[${index}] binary geometry is incomplete`); + if (data.controlPoints !== undefined) { + if (!Array.isArray(data.controlPoints) || data.controlPoints.some((item) => typeof item !== "number" || !Number.isFinite(item)) || data.controlPoints.length % 3 !== 0) throw new Error(`SceneIR.nonMeshData[${index}].controlPoints is invalid`); + if (data.geometryStatus !== "available") throw new Error(`SceneIR.nonMeshData[${index}].controlPoints requires available geometry`); + if (data.controlPoints.length !== pointCount * 3) throw new Error(`SceneIR.nonMeshData[${index}].controlPoints does not match pointCount`); + } + if (data.radii !== undefined && (!Array.isArray(data.radii) || data.radii.length !== pointCount || data.radii.some((item) => typeof item !== "number" || !Number.isFinite(item) || item < 0))) throw new Error(`SceneIR.nonMeshData[${index}].radii is invalid`); + if (data.splineOffsets !== undefined) { + if (!Array.isArray(data.splineOffsets) || data.splineOffsets.length !== splineCount + 1 || data.splineOffsets.some((item) => typeof item !== "number" || !Number.isSafeInteger(item) || item < 0) || data.splineOffsets[0] !== 0 || data.splineOffsets.at(-1) !== pointCount) throw new Error(`SceneIR.nonMeshData[${index}].splineOffsets is invalid`); + for (let offsetIndex = 1; offsetIndex < data.splineOffsets.length; offsetIndex++) { + if (data.splineOffsets[offsetIndex] <= data.splineOffsets[offsetIndex - 1]) throw new Error(`SceneIR.nonMeshData[${index}].splineOffsets must be strictly increasing`); + } + } + if (data.splineDimensions !== undefined) { + if (!Array.isArray(data.splineDimensions) || data.splineDimensions.length !== splineCount) throw new Error(`SceneIR.nonMeshData[${index}].splineDimensions is invalid`); + let dimensionPoints = 0; + for (const [dimensionIndex, dimension] of data.splineDimensions.entries()) { + if (!isRecord(dimension)) throw new Error(`SceneIR.nonMeshData[${index}].splineDimensions[${dimensionIndex}] is invalid`); + for (const field of ["u", "v", "orderU", "orderV"] as const) if (!Number.isSafeInteger(dimension[field]) || (dimension[field] as number) < (field === "u" || field === "v" ? 1 : 0) || (dimension[field] as number) > 1_000_000) throw new Error(`SceneIR.nonMeshData[${index}].splineDimensions[${dimensionIndex}].${field} is invalid`); + if ((dimension.orderU as number) > (dimension.u as number) || (dimension.orderV as number) > (dimension.v as number)) throw new Error(`SceneIR.nonMeshData[${index}].splineDimensions[${dimensionIndex}] order exceeds its control grid`); + dimensionPoints += (dimension.u as number) * (dimension.v as number); + } + if (!Number.isSafeInteger(dimensionPoints) || dimensionPoints !== pointCount) throw new Error(`SceneIR.nonMeshData[${index}].splineDimensions does not cover pointCount`); + } + if (data.pointWeights !== undefined && (!Array.isArray(data.pointWeights) || data.pointWeights.length !== pointCount || data.pointWeights.some((weight) => typeof weight !== "number" || !Number.isFinite(weight) || weight <= 0 || weight > 1000000))) throw new Error(`SceneIR.nonMeshData[${index}].pointWeights is invalid`); + if (data.splineTypes !== undefined && (!Array.isArray(data.splineTypes) || data.splineTypes.length !== splineCount || data.splineTypes.some((item) => !["POLY", "BEZIER", "NURBS"].includes(item as string)))) throw new Error(`SceneIR.nonMeshData[${index}].splineTypes is invalid`); + for (const field of ["cyclicU", "cyclicV"] as const) { + if (data[field] !== undefined && (!Array.isArray(data[field]) || data[field].length !== splineCount || data[field].some((item) => typeof item !== "boolean"))) throw new Error(`SceneIR.nonMeshData[${index}].${field} is invalid`); + } + if (data.handleTypes !== undefined && (!Array.isArray(data.handleTypes) || data.handleTypes.length > pointCount * 2 || data.handleTypes.length % 2 !== 0 || data.handleTypes.some((item) => !Number.isSafeInteger(item) || item < 0 || item > 5))) throw new Error(`SceneIR.nonMeshData[${index}].handleTypes is invalid`); + if (data.handlePoints !== undefined && (!Array.isArray(data.handlePoints) || data.handlePoints.length > pointCount * 6 || data.handlePoints.length % 6 !== 0 || data.handlePoints.some((item) => typeof item !== "number" || !Number.isFinite(item)))) throw new Error(`SceneIR.nonMeshData[${index}].handlePoints is invalid`); + if (data.handlePointIndices !== undefined && (!Array.isArray(data.handlePointIndices) || !Array.isArray(data.handlePoints) || data.handlePointIndices.length !== data.handlePoints.length / 6 || data.handlePointIndices.some((item) => !Number.isSafeInteger(item) || item < 0 || item >= pointCount) || new Set(data.handlePointIndices).size !== data.handlePointIndices.length)) throw new Error(`SceneIR.nonMeshData[${index}].handlePointIndices is invalid`); + const parseAttribute = (attribute: unknown, attributeIndex: number, requireValues: boolean): void => { + if (!isRecord(attribute)) throw new Error(`SceneIR.nonMeshData[${index}].attributes[${attributeIndex}] must be an object`); + requireString(attribute.name, `nonMeshData[${index}].attributes[${attributeIndex}].name`); + if (!["POINT", "CURVE", "INSTANCE"].includes(attribute.domain as string)) throw new Error(`SceneIR.nonMeshData[${index}].attributes[${attributeIndex}].domain is invalid`); + if (!["BOOL", "INT", "FLOAT", "FLOAT2", "FLOAT3", "BYTE_COLOR", "FLOAT_COLOR"].includes(attribute.dataType as string)) throw new Error(`SceneIR.nonMeshData[${index}].attributes[${attributeIndex}].dataType is invalid`); + if (![1, 2, 3, 4].includes(attribute.components as number)) throw new Error(`SceneIR.nonMeshData[${index}].attributes[${attributeIndex}].components is invalid`); + if (requireValues) { + const domainCount = attribute.domain === "POINT" ? pointCount : attribute.domain === "CURVE" ? splineCount : 1; + if (!Array.isArray(attribute.values) || attribute.values.length !== domainCount * (attribute.components as number) || attribute.values.some((item) => typeof item !== "number" || !Number.isFinite(item))) throw new Error(`SceneIR.nonMeshData[${index}].attributeValues[${attributeIndex}].values is invalid`); + } + }; + if (data.attributes !== undefined) { + if (!Array.isArray(data.attributes)) throw new Error(`SceneIR.nonMeshData[${index}].attributes must be an array`); + data.attributes.forEach((attribute, attributeIndex) => parseAttribute(attribute, attributeIndex, false)); + } + if (data.attributeValues !== undefined) { + if (!Array.isArray(data.attributeValues) || data.geometryStatus !== "available") throw new Error(`SceneIR.nonMeshData[${index}].attributeValues requires available geometry`); + data.attributeValues.forEach((attribute, attributeIndex) => parseAttribute(attribute, attributeIndex, true)); + } + if (data.text !== undefined) requireString(data.text, `nonMeshData[${index}].text`); + if (data.fontProperties !== undefined) { + if (!isRecord(data.fontProperties) || data.type !== "FONT") throw new Error(`SceneIR.nonMeshData[${index}].fontProperties is invalid`); + if (!["LEFT", "CENTER", "RIGHT", "JUSTIFY", "FLUSH"].includes(data.fontProperties.alignment as string)) throw new Error(`SceneIR.nonMeshData[${index}].fontProperties.alignment is invalid`); + if (!["TOP_BASELINE", "TOP", "CENTER", "BOTTOM_BASELINE", "BOTTOM"].includes(data.fontProperties.alignY as string)) throw new Error(`SceneIR.nonMeshData[${index}].fontProperties.alignY is invalid`); + for (const field of ["extrude", "bevelDepth", "offset"] as const) { + const property = requireNumber(data.fontProperties[field], `nonMeshData[${index}].fontProperties.${field}`); + if (property < 0 || property > 1000) throw new Error(`SceneIR.nonMeshData[${index}].fontProperties.${field} is outside the bounded range`); + } + const bevelResolution = requireNumber(data.fontProperties.bevelResolution, `nonMeshData[${index}].fontProperties.bevelResolution`); + if (!Number.isSafeInteger(bevelResolution) || bevelResolution < 0 || bevelResolution > 64) throw new Error(`SceneIR.nonMeshData[${index}].fontProperties.bevelResolution is invalid`); + const boundedFontFields: Array<[keyof NonMeshFontPropertiesIR, number, number]> = [["spacing", 0, 10], ["lineDistance", 0, 10], ["wordSpace", 0, 100], ["shear", -10, 10], ["fontSize", 0.001, 1000], ["offsetX", -100000, 100000], ["offsetY", -100000, 100000]]; + for (const [field, minimum, maximum] of boundedFontFields) if (data.fontProperties[field] !== undefined) { + const property = requireNumber(data.fontProperties[field], `nonMeshData[${index}].fontProperties.${field}`); + if (property < minimum || property > maximum) throw new Error(`SceneIR.nonMeshData[${index}].fontProperties.${field} is outside the bounded range`); + } + } + if (data.fontCharacters !== undefined) { + if (data.type !== "FONT" || !Array.isArray(data.fontCharacters) || typeof data.text !== "string" || data.fontCharacters.length !== Array.from(data.text).length) throw new Error(`SceneIR.nonMeshData[${index}].fontCharacters must match the Font code-point count`); + for (const [characterIndex, character] of data.fontCharacters.entries()) { + if (!isRecord(character)) throw new Error(`SceneIR.nonMeshData[${index}].fontCharacters[${characterIndex}] is invalid`); + const kern = requireNumber(character.kern, `nonMeshData[${index}].fontCharacters[${characterIndex}].kern`); + const materialIndex = requireNumber(character.materialIndex, `nonMeshData[${index}].fontCharacters[${characterIndex}].materialIndex`); + const styleFlags = requireNumber(character.styleFlags, `nonMeshData[${index}].fontCharacters[${characterIndex}].styleFlags`); + if (kern < -1000 || kern > 1000 || !Number.isSafeInteger(materialIndex) || materialIndex < 0 || materialIndex > 32767 || !Number.isSafeInteger(styleFlags) || styleFlags < 0 || (styleFlags & ~0x17) !== 0) throw new Error(`SceneIR.nonMeshData[${index}].fontCharacters[${characterIndex}] is outside the bounded range`); + } + } + if (data.fontTextBoxes !== undefined) { + if (data.type !== "FONT" || !Array.isArray(data.fontTextBoxes) || data.fontTextBoxes.length === 0 || data.fontTextBoxes.length > 256) throw new Error(`SceneIR.nonMeshData[${index}].fontTextBoxes is invalid`); + for (const [boxIndex, box] of data.fontTextBoxes.entries()) { + if (!isRecord(box)) throw new Error(`SceneIR.nonMeshData[${index}].fontTextBoxes[${boxIndex}] is invalid`); + for (const field of ["x", "y", "width", "height"] as const) { + const value = requireNumber(box[field], `nonMeshData[${index}].fontTextBoxes[${boxIndex}].${field}`); + if (value < (field === "width" || field === "height" ? 0 : -100000) || value > 100000) throw new Error(`SceneIR.nonMeshData[${index}].fontTextBoxes[${boxIndex}].${field} is outside the bounded range`); + } + } + if (!Number.isSafeInteger(data.activeFontTextBox) || (data.activeFontTextBox as number) < 0 || (data.activeFontTextBox as number) >= data.fontTextBoxes.length) throw new Error(`SceneIR.nonMeshData[${index}].activeFontTextBox is invalid`); + } + if (data.fontLinks !== undefined) { + if (data.type !== "FONT" || !isRecord(data.fontLinks)) throw new Error(`SceneIR.nonMeshData[${index}].fontLinks is invalid`); + for (const field of ["regular", "bold", "italic", "boldItalic"] as const) { + const id = requireString(data.fontLinks[field], `nonMeshData[${index}].fontLinks.${field}`); + if (!vfontIds.has(id)) throw new Error(`SceneIR.nonMeshData[${index}].fontLinks.${field} references a missing VFont`); + } + } + if (data.resolution !== undefined) requireNumber(data.resolution, `nonMeshData[${index}].resolution`); + if (data.sourcePath !== undefined) requireString(data.sourcePath, `nonMeshData[${index}].sourcePath`); + if (data.resourceKind !== undefined && data.resourceKind !== "OPENVDB") throw new Error(`SceneIR.nonMeshData[${index}].resourceKind is invalid`); + if (data.resourceByteLength !== undefined && (!Number.isSafeInteger(data.resourceByteLength) || (data.resourceByteLength as number) < 0)) throw new Error(`SceneIR.nonMeshData[${index}].resourceByteLength is invalid`); + if (data.errorCode !== undefined) requireString(data.errorCode, `nonMeshData[${index}].errorCode`); + if (data.elements !== undefined) { + if (!Array.isArray(data.elements)) throw new Error(`SceneIR.nonMeshData[${index}].elements must be an array`); + for (const [elementIndex, element] of data.elements.entries()) { + if (!isRecord(element)) throw new Error(`SceneIR.nonMeshData[${index}].elements[${elementIndex}] must be an object`); + requireNumber(element.type, `nonMeshData[${index}].elements[${elementIndex}].type`); + requireTuple(element.position, 3, `nonMeshData[${index}].elements[${elementIndex}].position`); + requireNumber(element.radius, `nonMeshData[${index}].elements[${elementIndex}].radius`); + requireTuple(element.scale, 3, `nonMeshData[${index}].elements[${elementIndex}].scale`); + } + } + if (data.evaluatedGeometry !== undefined) { + if (!Array.isArray(data.evaluatedGeometry)) throw new Error(`SceneIR.nonMeshData[${index}].evaluatedGeometry must be an array`); + for (const [evaluationIndex, evaluation] of data.evaluatedGeometry.entries()) { + if (!isRecord(evaluation)) throw new Error(`SceneIR.nonMeshData[${index}].evaluatedGeometry[${evaluationIndex}] must be an object`); + requireString(evaluation.objectId, `nonMeshData[${index}].evaluatedGeometry[${evaluationIndex}].objectId`); + requireString(evaluation.meshId, `nonMeshData[${index}].evaluatedGeometry[${evaluationIndex}].meshId`); + if (evaluation.status !== "EVALUATED" && evaluation.status !== "BLOCKED") throw new Error(`SceneIR.nonMeshData[${index}].evaluatedGeometry[${evaluationIndex}].status is invalid`); + if (evaluation.errorCode !== undefined && evaluation.errorCode !== "NON_MESH_DATA_BUDGET_EXCEEDED") throw new Error(`SceneIR.nonMeshData[${index}].evaluatedGeometry[${evaluationIndex}].errorCode is invalid`); + for (const field of ["vertexCount", "triangleCount"] as const) { + const count = requireNumber(evaluation[field], `nonMeshData[${index}].evaluatedGeometry[${evaluationIndex}].${field}`); + if (!Number.isSafeInteger(count) || count < 0) throw new Error(`SceneIR.nonMeshData[${index}].evaluatedGeometry[${evaluationIndex}].${field} is invalid`); + } + if (evaluation.edgeCount !== undefined && (!Number.isSafeInteger(evaluation.edgeCount) || (evaluation.edgeCount as number) < 0)) throw new Error(`nonMeshData[${index}].evaluatedGeometry[${evaluationIndex}].edgeCount is invalid`); + } + } + if (data.volumeGrids !== undefined) { + if (!Array.isArray(data.volumeGrids)) throw new Error(`SceneIR.nonMeshData[${index}].volumeGrids must be an array`); + for (const [gridIndex, grid] of data.volumeGrids.entries()) { + if (!isRecord(grid)) throw new Error(`SceneIR.nonMeshData[${index}].volumeGrids[${gridIndex}] must be an object`); + requireString(grid.name, `nonMeshData[${index}].volumeGrids[${gridIndex}].name`); + requireString(grid.valueType, `nonMeshData[${index}].volumeGrids[${gridIndex}].valueType`); + const voxelCount = requireNumber(grid.voxelCount, `nonMeshData[${index}].volumeGrids[${gridIndex}].voxelCount`); + if (!Number.isSafeInteger(voxelCount) || voxelCount < 0) throw new Error(`SceneIR.nonMeshData[${index}].volumeGrids[${gridIndex}].voxelCount is invalid`); + if (grid.bounds !== undefined) { + if (!isRecord(grid.bounds)) throw new Error(`SceneIR.nonMeshData[${index}].volumeGrids[${gridIndex}].bounds is invalid`); + requireTuple(grid.bounds.min, 3, `nonMeshData[${index}].volumeGrids[${gridIndex}].bounds.min`); + requireTuple(grid.bounds.max, 3, `nonMeshData[${index}].volumeGrids[${gridIndex}].bounds.max`); + } + } + } + } + for (const [index, greasePencil] of ((value.greasePencils ?? []) as unknown[]).entries()) { + parseGreasePencilData(greasePencil, `SceneIR.greasePencils[${index}]`); + } + for (const [index, camera] of (value.cameras as unknown[]).entries()) { + if (!isRecord(camera)) throw new Error(`SceneIR.cameras[${index}] must be an object`); + requireString(camera.id, `cameras[${index}].id`); + requireString(camera.name, `cameras[${index}].name`); + if (!["PERSPECTIVE", "ORTHOGRAPHIC", "PANORAMIC", "CUSTOM"].includes(camera.projection as string)) { + throw new Error(`SceneIR.cameras[${index}].projection is invalid`); + } + for (const field of ["lensMm", "sensorWidthMm", "sensorHeightMm", "sensorFit", "near", "far", "orthoScale"]) { + requireNumber(camera[field], `cameras[${index}].${field}`); + } + requireTuple(camera.shift, 2, `cameras[${index}].shift`); + if (camera.panoramaType !== undefined) requireNumber(camera.panoramaType, `cameras[${index}].panoramaType`); + if (camera.fisheyeFov !== undefined) requireNumber(camera.fisheyeFov, `cameras[${index}].fisheyeFov`); + if (camera.depthOfField !== undefined) { + if (!isRecord(camera.depthOfField)) throw new Error(`SceneIR.cameras[${index}].depthOfField must be an object`); + requireBoolean(camera.depthOfField.enabled, `cameras[${index}].depthOfField.enabled`); + if (camera.depthOfField.focusObjectId !== undefined && camera.depthOfField.focusObjectId !== null) requireString(camera.depthOfField.focusObjectId, `cameras[${index}].depthOfField.focusObjectId`); + for (const field of ["focusDistance", "apertureFStop", "apertureBlades", "apertureRotation", "apertureRatio"] as const) requireNumber(camera.depthOfField[field], `cameras[${index}].depthOfField.${field}`); + } + } + for (const [index, material] of (value.materials as unknown[]).entries()) { + if (!isRecord(material)) throw new Error(`SceneIR.materials[${index}] must be an object`); + requireString(material.id, `materials[${index}].id`); + requireString(material.name, `materials[${index}].name`); + requireTuple(material.baseColor, 4, `materials[${index}].baseColor`); + requireTuple(material.emissionColor, 4, `materials[${index}].emissionColor`); + for (const field of ["roughness", "metallic", "alpha", "ior"]) { + requireNumber(material[field], `materials[${index}].${field}`); + } + for (const field of ["specularIORLevel", "transmissionWeight", "coatWeight", "coatRoughness", "emissionStrength"]) { + if (material[field] !== undefined) requireNumber(material[field], `materials[${index}].${field}`); + } + for (const field of ["specularIORLevel", "transmissionWeight", "coatWeight", "coatRoughness"]) { + if (typeof material[field] === "number" && (material[field] < 0 || material[field] > 1)) { + throw new Error(`SceneIR.materials[${index}].${field} must be in [0,1]`); + } + } + if (typeof material.emissionStrength === "number" && (material.emissionStrength < 0 || material.emissionStrength > 1_000_000)) { + throw new Error(`SceneIR.materials[${index}].emissionStrength is outside the supported range`); + } + if (material.normalImageId !== undefined && material.normalImageId !== null) requireString(material.normalImageId, `materials[${index}].normalImageId`); + if (material.imageIds !== undefined && (!Array.isArray(material.imageIds) || material.imageIds.some((item) => typeof item !== "string"))) { + throw new Error(`SceneIR.materials[${index}].imageIds must contain strings`); + } + if (material.warnings !== undefined && (!Array.isArray(material.warnings) || material.warnings.some((item) => typeof item !== "string"))) { + throw new Error(`SceneIR.materials[${index}].warnings must contain strings`); + } + if (material.nodes !== undefined) { + if (!Array.isArray(material.nodes)) throw new Error(`SceneIR.materials[${index}].nodes must be an array`); + for (const [nodeIndex, node] of material.nodes.entries()) { + if (!isRecord(node)) throw new Error(`SceneIR.materials[${index}].nodes[${nodeIndex}] must be an object`); + requireString(node.id, `SceneIR.materials[${index}].nodes[${nodeIndex}].id`); + requireString(node.name, `SceneIR.materials[${index}].nodes[${nodeIndex}].name`); + if (!["RGB", "VALUE", "MATH", "PRINCIPLED", "IMAGE_TEXTURE", "NORMAL_MAP", "OUTPUT", "UNSUPPORTED"].includes(node.type as string)) throw new Error(`SceneIR.materials[${index}].nodes[${nodeIndex}].type is invalid`); + if (node.imageId !== undefined && node.imageId !== null) requireString(node.imageId, `SceneIR.materials[${index}].nodes[${nodeIndex}].imageId`); + if (node.defaultValue !== undefined && (!Array.isArray(node.defaultValue) || node.defaultValue.length === 0 || node.defaultValue.length > 4 || node.defaultValue.some((value) => typeof value !== "number" || !Number.isFinite(value)))) throw new Error(`SceneIR.materials[${index}].nodes[${nodeIndex}].defaultValue is invalid`); + if (node.properties !== undefined) { + if (!isRecord(node.properties) || Object.keys(node.properties).some((key) => key !== "operation") || + (node.properties.operation !== undefined && !["ADD", "SUBTRACT", "MULTIPLY", "DIVIDE", "MINIMUM", "MAXIMUM"].includes(node.properties.operation as string))) { + throw new Error(`SceneIR.materials[${index}].nodes[${nodeIndex}].properties is invalid`); + } + } + } + } + if (material.links !== undefined) { + if (!Array.isArray(material.links)) throw new Error(`SceneIR.materials[${index}].links must be an array`); + for (const [linkIndex, link] of material.links.entries()) { + if (!isRecord(link)) throw new Error(`SceneIR.materials[${index}].links[${linkIndex}] must be an object`); + for (const field of ["fromNodeId", "fromSocket", "toNodeId", "toSocket"] as const) requireString(link[field], `SceneIR.materials[${index}].links[${linkIndex}].${field}`); + } + } + } + for (const [index, light] of (value.lights as unknown[]).entries()) { + if (!isRecord(light)) throw new Error(`SceneIR.lights[${index}] must be an object`); + requireString(light.id, `lights[${index}].id`); + requireString(light.name, `lights[${index}].name`); + requireNumber(light.lightType, `lights[${index}].lightType`); + requireTuple(light.color, 3, `lights[${index}].color`); + for (const field of ["energy", "radius", "spotAngle", "spotBlend", "areaShape", "areaSize", "areaSizeY", "sunAngle"]) { + requireNumber(light[field], `lights[${index}].${field}`); + } + for (const field of ["exposure", "temperature", "areaSpread"] as const) if (light[field] !== undefined) requireNumber(light[field], `lights[${index}].${field}`); + for (const field of ["useTemperature", "castsShadow"] as const) if (light[field] !== undefined) requireBoolean(light[field], `lights[${index}].${field}`); + } + for (const [index, world] of (value.worlds as unknown[]).entries()) { + if (!isRecord(world)) throw new Error(`SceneIR.worlds[${index}] must be an object`); + requireString(world.id, `worlds[${index}].id`); + requireString(world.name, `worlds[${index}].name`); + requireTuple(world.color, 3, `worlds[${index}].color`); + requireNumber(world.exposure, `worlds[${index}].exposure`); + if (world.environmentImageId !== undefined && world.environmentImageId !== null) requireString(world.environmentImageId, `worlds[${index}].environmentImageId`); + if (world.environmentStrength !== undefined) requireNumber(world.environmentStrength, `worlds[${index}].environmentStrength`); + if (world.environmentRotation !== undefined) requireNumber(world.environmentRotation, `worlds[${index}].environmentRotation`); + if (world.backgroundVisible !== undefined && typeof world.backgroundVisible !== "boolean") throw new Error(`SceneIR.worlds[${index}].backgroundVisible must be a boolean`); + if (world.mist !== undefined) { + if (!isRecord(world.mist) || !["QUADRATIC", "LINEAR", "INVERSE_QUADRATIC"].includes(world.mist.type as string)) throw new Error(`SceneIR.worlds[${index}].mist is invalid`); + requireBoolean(world.mist.enabled, `worlds[${index}].mist.enabled`); + for (const field of ["start", "depth", "intensity", "height"] as const) requireNumber(world.mist[field], `worlds[${index}].mist.${field}`); + } + } + for (const [index, scene] of (value.scenes as unknown[]).entries()) { + if (!isRecord(scene)) throw new Error(`SceneIR.scenes[${index}] must be an object`); + requireString(scene.id, `scenes[${index}].id`); + requireString(scene.name, `scenes[${index}].name`); + for (const field of ["rootCollectionId", "cameraObjectId", "worldId"] as const) { + if (scene[field] !== undefined && scene[field] !== null) requireString(scene[field], `scenes[${index}].${field}`); + } + if (scene.renderEngine !== undefined) requireString(scene.renderEngine, `scenes[${index}].renderEngine`); + if (scene.colorManagement !== undefined) { + if (!isRecord(scene.colorManagement)) throw new Error(`SceneIR.scenes[${index}].colorManagement must be an object`); + for (const field of ["displayDevice", "viewTransform", "look"] as const) requireString(scene.colorManagement[field], `scenes[${index}].colorManagement.${field}`); + for (const field of ["exposure", "gamma"] as const) requireNumber(scene.colorManagement[field], `scenes[${index}].colorManagement.${field}`); + for (const field of ["temperature", "tint"] as const) if (scene.colorManagement[field] !== undefined) requireNumber(scene.colorManagement[field], `scenes[${index}].colorManagement.${field}`); + if (scene.colorManagement.whiteBalanceStatus !== undefined && !["AVAILABLE", "BLOCKED"].includes(scene.colorManagement.whiteBalanceStatus as string)) throw new Error(`scenes[${index}].colorManagement.whiteBalanceStatus is invalid`); + } + if (scene.compositorStatus !== undefined && !["AVAILABLE", "BLOCKED"].includes(scene.compositorStatus as string)) { + throw new Error(`scenes[${index}].compositorStatus is invalid`); + } + if (scene.compositorGraph !== undefined) { + parseCompositorGraph(scene.compositorGraph); + if (scene.compositorStatus !== "AVAILABLE") throw new Error(`scenes[${index}].compositorStatus must be AVAILABLE when a graph is present`); + } + if (scene.sequencerStatus !== undefined && !["AVAILABLE", "BLOCKED"].includes(scene.sequencerStatus as string)) { + throw new Error(`scenes[${index}].sequencerStatus is invalid`); + } + if (scene.sequencerTimeline !== undefined) { + parseSequencerTimeline(scene.sequencerTimeline); + if (scene.sequencerStatus !== "AVAILABLE") throw new Error(`scenes[${index}].sequencerStatus must be AVAILABLE when a timeline is present`); + } + } + for (const [index, animation] of (value.animations as unknown[]).entries()) { + if (!isRecord(animation)) throw new Error(`SceneIR.animations[${index}] must be an object`); + requireString(animation.id, `animations[${index}].id`); + requireString(animation.name, `animations[${index}].name`); + requireString(animation.targetId, `animations[${index}].targetId`); + requireNumber(animation.frameStart, `animations[${index}].frameStart`); + requireNumber(animation.frameEnd, `animations[${index}].frameEnd`); + const channels = requireArray(animation.channels, `animations[${index}].channels`); + for (const [channelIndex, channel] of channels.entries()) { + if (!isRecord(channel)) throw new Error(`SceneIR.animations[${index}].channels[${channelIndex}] must be an object`); + requireString(channel.path, `animations[${index}].channels[${channelIndex}].path`); + const keyframes = requireArray(channel.keyframes, `animations[${index}].channels[${channelIndex}].keyframes`); + for (const [keyframeIndex, keyframe] of keyframes.entries()) { + if (!isRecord(keyframe)) throw new Error(`SceneIR.animations[${index}].channels[${channelIndex}].keyframes[${keyframeIndex}] must be an object`); + requireNumber(keyframe.frame, `animations[${index}].channels[${channelIndex}].keyframes[${keyframeIndex}].frame`); + const values = requireArray(keyframe.value, `animations[${index}].channels[${channelIndex}].keyframes[${keyframeIndex}].value`); + if (values.some((item) => typeof item !== "number" || !Number.isFinite(item))) { + throw new Error(`SceneIR.animations[${index}].channels[${channelIndex}].keyframes[${keyframeIndex}].value must contain finite numbers`); + } + } + } + } + if (value.nlaTracks !== undefined) parseNlaTracks(value.nlaTracks); + if (value.trackingMaskStatus !== undefined && !["AVAILABLE", "BLOCKED"].includes(value.trackingMaskStatus as string)) { + throw new Error("SceneIR.trackingMaskStatus is invalid"); + } + if (value.trackingMasks !== undefined) { + parseTrackingMaskProject(value.trackingMasks); + if (value.trackingMaskStatus !== "AVAILABLE") throw new Error("SceneIR.trackingMaskStatus must be AVAILABLE when trackingMasks is present"); + } + if (value.libraryStatus !== undefined && !["AVAILABLE", "BLOCKED"].includes(value.libraryStatus as string)) { + throw new Error("SceneIR.libraryStatus is invalid"); + } + if (value.libraries !== undefined) { + const libraries = value.libraries as unknown[]; + if (libraries.length > 0 && value.libraryStatus !== "AVAILABLE") throw new Error("SceneIR.libraryStatus must be AVAILABLE when libraries are present"); + if (libraries.length > 1024) throw new Error("SceneIR.libraries exceeds the budget"); + const libraryIds = new Set(); + for (const [index, library] of libraries.entries()) { + if (!isRecord(library)) throw new Error(`SceneIR.libraries[${index}] must be an object`); + const id = requireString(library.id, `libraries[${index}].id`); + if (!id || id.length > 256 || libraryIds.has(id)) throw new Error(`SceneIR.libraries[${index}].id is invalid`); + libraryIds.add(id); + requireString(library.name, `libraries[${index}].name`); + const sourcePath = requireString(library.sourcePath, `libraries[${index}].sourcePath`); + if (typeof library.packed !== "boolean" || library.readOnly !== true || !Array.isArray(library.dependencyIds) || + library.dependencyIds.length > 1024 || library.dependencyIds.some((dependency) => typeof dependency !== "string") || + new Set(library.dependencyIds).size !== library.dependencyIds.length || + !["PACKED", "EXTERNAL_REQUIRED"].includes(library.status as string)) { + throw new Error(`SceneIR.libraries[${index}] is invalid`); + } + let projectPath = true; + try { normalizeProjectAssetPath(sourcePath); } catch { projectPath = false; } + if (!projectPath) { + throw new Error(`SceneIR.libraries[${index}].sourcePath is outside the project`); + } + if (library.status === "PACKED" && (!library.packed || !Number.isSafeInteger(library.packedByteLength) || (library.packedByteLength as number) <= 0)) { + throw new Error(`SceneIR.libraries[${index}] packed payload is invalid`); + } + if (library.status === "EXTERNAL_REQUIRED" && (library.packed || library.errorCode !== "LINKED_LIBRARY_RESOURCE_REQUIRED")) { + throw new Error(`SceneIR.libraries[${index}] external resource state is invalid`); + } + } + for (const [index, library] of libraries.entries()) { + const dependencies = (library as Record).dependencyIds as string[]; + if (dependencies.some((dependency) => !libraryIds.has(dependency))) throw new Error(`SceneIR.libraries[${index}] references a missing dependency`); + } + const byId = new Map(libraries.map((library) => { + const record = library as Record; + return [record.id as string, record.dependencyIds as string[]] as const; + })); + const active = new Set(); + const complete = new Set(); + const visit = (id: string): void => { + if (active.has(id)) throw new Error(`SceneIR.libraries dependency cycle includes ${id}`); + if (complete.has(id)) return; + active.add(id); + for (const dependency of byId.get(id) ?? []) visit(dependency); + active.delete(id); + complete.add(id); + }; + byId.forEach((_dependencies, id) => visit(id)); + } + if (value.editorWorkflowStatus !== undefined && !["AVAILABLE", "BLOCKED"].includes(value.editorWorkflowStatus as string)) { + throw new Error("SceneIR.editorWorkflowStatus is invalid"); + } + if (value.editorWorkflow !== undefined) { + parseEditorWorkflow(value.editorWorkflow); + if (value.editorWorkflowStatus !== "AVAILABLE") throw new Error("SceneIR.editorWorkflowStatus must be AVAILABLE when editorWorkflow is present"); + } + if (value.scriptSourceStatus !== undefined && !["AVAILABLE", "BLOCKED"].includes(value.scriptSourceStatus as string)) { + throw new Error("SceneIR.scriptSourceStatus is invalid"); + } + if (value.scriptSources !== undefined) { + parseScriptSourceInventory(value.scriptSources); + if (value.scriptSourceStatus !== "AVAILABLE") throw new Error("SceneIR.scriptSourceStatus must be AVAILABLE when scriptSources is present"); + } + if (value.physicsSimulation !== undefined) parsePhysicsSimulationManifest(value.physicsSimulation); + if (value.geometryNodeGraphs !== undefined) { + const graphs = requireArray(value.geometryNodeGraphs, "geometryNodeGraphs"); + if (graphs.length > GEOMETRY_NODE_GRAPH_BUDGET.maxGraphs) throw new Error("SceneIR.geometryNodeGraphs exceeds the graph budget"); + const graphIds = new Set(); + for (const [index, graph] of graphs.entries()) { + const parsed = parseGeometryNodeGraph(graph); + if (!graphIds.add(parsed.id)) throw new Error(`SceneIR.geometryNodeGraphs[${index}] has a duplicate graph ID`); + } + } + return value as unknown as SceneSnapshotIR; +} diff --git a/tests/golden/corrective/C0-002/staged/source-snapshot/snapshot-manifest.json b/tests/golden/corrective/C0-002/staged/source-snapshot/snapshot-manifest.json new file mode 100644 index 00000000..72cf4cd4 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/source-snapshot/snapshot-manifest.json @@ -0,0 +1,11095 @@ +{ + "schemaVersion": 1, + "mode": "CURRENT_WORKTREE_RESIGN", + "authorized": true, + "files": [ + { + "path": "blender-5.2.0/source/blender/blenkernel/intern/particle.cc", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/blender-5.2.0/source/blender/blenkernel/intern/particle.cc", + "sha256": "d712f922c3160bddb464e3b7e1f68bfc44591dd9e536f4fd901119025d17717c", + "bytes": 173369 + }, + { + "path": "blender-5.2.0/source/blender/modifiers/CMakeLists.txt", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/blender-5.2.0/source/blender/modifiers/CMakeLists.txt", + "sha256": "acf2c49dcea2907a117efdf8d74d4d817a4456a41c6bec3a40f38263beaae127", + "bytes": 6248 + }, + { + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "sha256": "92ea7223c192563062d9f485c45cc78290a8809eb79d3a28be12081a0c7d6e6f", + "bytes": 10138 + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "sha256": "1944fbb1153eca61e4f6c8589f16fced60bfac7f4e96da1355428b263651e2ae", + "bytes": 126613 + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "bytes": 240371 + }, + { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "sha256": "62af46e404d6174cc4b9d85adb6e8b259f1c537e5ebfd8485e4fd0cc4be0fded", + "bytes": 243066 + }, + { + "path": "docs/status/M16-GAP-00158.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00158.md", + "sha256": "7cbb2c0af79def8810641264087eba11d45a8d6cf5d63710364dc6c970fea382", + "bytes": 563 + }, + { + "path": "docs/status/M16-GAP-00159.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00159.md", + "sha256": "f93526ce6fcafb2734cbe1c86ecde24da0e94c702b711e72efa080a25201d84f", + "bytes": 582 + }, + { + "path": "docs/status/M16-GAP-00160.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00160.md", + "sha256": "b363159100041b87476b7263631cbf91bf02a83795eb8ce78e019d71e888ce55", + "bytes": 625 + }, + { + "path": "docs/status/M16-GAP-00161.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00161.md", + "sha256": "45a504a53e49b7e1df0d93b487125218aeaef5c5e227ba08e78f2681211a22bb", + "bytes": 584 + }, + { + "path": "docs/status/M16-GAP-00162.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00162.md", + "sha256": "a510bffd34faf4ee5d6a4ed4c7e53eab5a249a4b3ce8e6ff5d5c0b8b06bd814e", + "bytes": 575 + }, + { + "path": "docs/status/M16-GAP-00163.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00163.md", + "sha256": "08d4c8ebe07e9db2eefaba13d861bb5828316f2411117ab0604eb27cbd2308d7", + "bytes": 715 + }, + { + "path": "docs/status/M16-GAP-00164.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00164.md", + "sha256": "a3f31d41ab5714e6ee808c241b92f409074b4c699956df655026af1a1cf1b1fb", + "bytes": 785 + }, + { + "path": "docs/status/M16-GAP-00165.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00165.md", + "sha256": "e1248ff14af9e870516f009da7e64fce0b5ae9ca8da87725d11d2f3424e03399", + "bytes": 765 + }, + { + "path": "docs/status/M16-GAP-00166.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00166.md", + "sha256": "212de0356fd48f2696bdf4004758d0bee9c55630a9563adab88c6772b7248d67", + "bytes": 859 + }, + { + "path": "docs/status/M16-GAP-00167.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00167.md", + "sha256": "fdb2aec90eac4e9fda1907234d7ecda51c2c09ed05f2d23dc2809fe3aeb6c06b", + "bytes": 744 + }, + { + "path": "docs/status/M16-GAP-00168.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00168.md", + "sha256": "e1f398011436d8673616ae1412746b16b92e687a8601ee16d9e01ed5fe9bc9bb", + "bytes": 707 + }, + { + "path": "docs/status/M16-GAP-00169.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00169.md", + "sha256": "6270aa94f27514e4ce112f0daa7cc7fc4f6507d53055bc7f42f5a0e9fe254e1a", + "bytes": 737 + }, + { + "path": "docs/status/M16-GAP-00170.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00170.md", + "sha256": "07ff672b4319741a3e8fefb9b614b1ce3176a957212200d84600e99e8c65848b", + "bytes": 701 + }, + { + "path": "docs/status/M16-GAP-00171.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00171.md", + "sha256": "79b24742a11e7456b82154b13ccae7d2b57dc4b3ed4493d77ad4fc36c894e443", + "bytes": 699 + }, + { + "path": "docs/status/M16-GAP-00172.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00172.md", + "sha256": "7b6f81442dfb91ad7eaafcd293dd8cfecde3750f2d9ad50b6a5d8b19e4430846", + "bytes": 718 + }, + { + "path": "docs/status/M16-GAP-00173.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00173.md", + "sha256": "b97b46a2f391fd6c00adb3369652709f1fa447a9a05a931a0817ef81800805b6", + "bytes": 934 + }, + { + "path": "docs/status/M16-GAP-00174.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00174.md", + "sha256": "ab5ff18f67b8aeae1b2c2e41b15f9d0a27eb0db61904f07a582b77b9a6576782", + "bytes": 1013 + }, + { + "path": "docs/status/M16-GAP-00175.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00175.md", + "sha256": "7a5a2a5e308ce9804db350cc06fbdac36b959892a1f2245531fc515388c0146c", + "bytes": 806 + }, + { + "path": "docs/status/M16-GAP-00176.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00176.md", + "sha256": "f40dac4690310310d87b5cf020995ad109daf4c9167ab953c9d001c31c7e84b8", + "bytes": 764 + }, + { + "path": "docs/status/M16-GAP-00177.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00177.md", + "sha256": "c87a6acb0b22e57107bae051a9d8ce524ae296363a6e3f25fb98bc8872bf03f2", + "bytes": 657 + }, + { + "path": "docs/status/M16-GAP-00178.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00178.md", + "sha256": "0525407475c3c4cc8ed880d29fe077b178017f3710c56002558bd032362808d5", + "bytes": 1027 + }, + { + "path": "docs/status/M16-GAP-00179.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00179.md", + "sha256": "c1d842b67de5e7275d040a033eb5cd16319ec2c5f77e1b67ed1d55b1c9e0dc4e", + "bytes": 1006 + }, + { + "path": "docs/status/M16-GAP-00180.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00180.md", + "sha256": "6af17dd941fdf1f76753ee23a18f97689b7d9719c37ce8714628b0acda11fc5f", + "bytes": 1058 + }, + { + "path": "docs/status/M16-GAP-00181.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00181.md", + "sha256": "16ef18b3c2a4035e283a5a9af1968d0250763a0a3a2b52fb5a8f4f05821968c2", + "bytes": 1310 + }, + { + "path": "docs/status/M16-GAP-00182.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00182.md", + "sha256": "43e96981d4987ee1b32b07ce6053bca47b50106526d8e932e2b67d0005b576dc", + "bytes": 1288 + }, + { + "path": "docs/status/M16-GAP-00183.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00183.md", + "sha256": "e583e704854dd1eca1fa5c672c3184cef8e2433138628aee92b11fb8a3345f98", + "bytes": 1270 + }, + { + "path": "docs/status/M16-GAP-00184.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00184.md", + "sha256": "44d3f28d968aae9c4315f08dd7581cca309347a839e20db4b8f19288bfbe706e", + "bytes": 1181 + }, + { + "path": "docs/status/M16-GAP-00185.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00185.md", + "sha256": "de8e22ea2619605053b10e19061de49f94ed241fba16c8b7aa0b0099be3a3b2b", + "bytes": 1247 + }, + { + "path": "docs/status/M16-GAP-00186.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00186.md", + "sha256": "1f2f3ec3947f4593dd5204d1058a125127f396013063a8fa0d447c189f4f50ce", + "bytes": 1234 + }, + { + "path": "docs/status/M16-GAP-00187.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00187.md", + "sha256": "16c75cd97e157bcb23bce603f7e27f6f095ce1c76c3f11501355a9431472e691", + "bytes": 1333 + }, + { + "path": "docs/status/M16-GAP-00188.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00188.md", + "sha256": "bf958a16b78eae1da59438bfac089fcf16197982a23d91dbcd6d386942bc6425", + "bytes": 1297 + }, + { + "path": "docs/status/M16-GAP-00189.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00189.md", + "sha256": "f57b7b340a8c137afda5bb04daa4a71de372e2b0bd74fdb692029bea2da5e7c4", + "bytes": 1264 + }, + { + "path": "docs/status/M16-GAP-00190.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00190.md", + "sha256": "59def4f8ecb6005d53b5f1b335da97abf89a21f55ceb3589bd87493e2d06b9bd", + "bytes": 1205 + }, + { + "path": "docs/status/M16-GAP-00191.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00191.md", + "sha256": "c4d82279105c2e1821577084e539495d09bd99de99eaefadc1f23ed95841a333", + "bytes": 1097 + }, + { + "path": "docs/status/M16-GAP-00192.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00192.md", + "sha256": "1367262e064964fa586ffe5c09ee1702f9be0d7f5f55f5794d54a48ebe8c5349", + "bytes": 1120 + }, + { + "path": "docs/status/M16-GAP-00193.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00193.md", + "sha256": "f5510b2a17b16c1ffdd873b30c0b397b25d6d1660eb7f16cfcbcfdccbb4ae668", + "bytes": 1081 + }, + { + "path": "docs/status/M16-GAP-00194.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00194.md", + "sha256": "54a5b5384704b1a16d541cbc6d70c98001495cb010fe1f9235e73d23a0fc2d9d", + "bytes": 1061 + }, + { + "path": "docs/status/M16-GAP-00195.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00195.md", + "sha256": "cdb8e80052164365b81fb210701cd5283ea022f219eb1a1e14d561ef178e7420", + "bytes": 1073 + }, + { + "path": "docs/status/M16-GAP-00196.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00196.md", + "sha256": "b1a31309d96dc8fa456c95e45e78aa192472f84573a8ab9ad21bac1a047a3a8c", + "bytes": 1103 + }, + { + "path": "docs/status/M16-GAP-00197.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00197.md", + "sha256": "5f9ee54b01a17a8c4554d58c4f9f415a7feac5790a56aa2545a560ffa4ef2362", + "bytes": 1120 + }, + { + "path": "docs/status/M16-GAP-00198.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00198.md", + "sha256": "7bf5d2f34a6fa5b19efca51fe360358da8e8030419fd78687314e690598125aa", + "bytes": 1206 + }, + { + "path": "docs/status/M16-GAP-00199.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00199.md", + "sha256": "920d779ace3658975b5f2451fb48b644f7d64ce81129b89d6e1eb9fc5ac6e6c9", + "bytes": 1125 + }, + { + "path": "docs/status/M16-GAP-00200.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00200.md", + "sha256": "314c2534f8291496721d190b7345954f1e7e9218b9756d1b6bfdc4486a112b9e", + "bytes": 977 + }, + { + "path": "docs/status/M16-GAP-00201.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00201.md", + "sha256": "9b5e2b1a31558340dc633d476fb379bd4bb460b8d246f4b2b4576b1734b3a95b", + "bytes": 926 + }, + { + "path": "docs/status/M16-GAP-00202.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00202.md", + "sha256": "2e3f248c5393a4e17b060d48f73f553764a66f224d38a3aa29252a66dc0cc475", + "bytes": 1125 + }, + { + "path": "docs/status/M16-GAP-00203.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00203.md", + "sha256": "0504f0cc178ce3f7d3678d0170294f3fdc5c0c0ff40458a9891ef471e8bded96", + "bytes": 1103 + }, + { + "path": "docs/status/M16-GAP-00204.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00204.md", + "sha256": "9f42dcc4c93fff48d9f1c739feb9df5f0000f18ef1a9ea11644207534cc3a9f8", + "bytes": 950 + }, + { + "path": "docs/status/M16-GAP-00205.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00205.md", + "sha256": "504475606c2d54e38587d7880653c6328666b9731c29857dbc68d127a6249d71", + "bytes": 1013 + }, + { + "path": "docs/status/M16-GAP-00206.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00206.md", + "sha256": "28a15b08f7d20ec17fa242954206715e1b8a50bb7ae1391c9a187119aaf8be26", + "bytes": 1077 + }, + { + "path": "docs/status/M16-GAP-00207.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00207.md", + "sha256": "6cb10e433730afa5fea28840824d849c492461f4b5b9350a41d5a0f995d4f504", + "bytes": 1086 + }, + { + "path": "docs/status/M16-GAP-00208.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00208.md", + "sha256": "957439dbc9be432dbb8187be6e3b2f12a27665e4e344a87897d51008380e7bee", + "bytes": 1134 + }, + { + "path": "docs/status/M16-GAP-00209.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00209.md", + "sha256": "9c436780681f0309420bd6c3e9def7e970e483175b4183e691320d5dd73cc108", + "bytes": 1108 + }, + { + "path": "docs/status/M16-GAP-00210.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00210.md", + "sha256": "1a2fb7129a562a6ca35ae61159d1cf28c3069be6a121d738d4b621138033e8ab", + "bytes": 1086 + }, + { + "path": "docs/status/M16-GAP-00211.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00211.md", + "sha256": "73b13a7c83a37e2edbd5498035987f542538d49650812b4cbb8ed6b27be85cd4", + "bytes": 1028 + }, + { + "path": "docs/status/M16-GAP-00212.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00212.md", + "sha256": "6007b1fe88b4bc38d416bf092d9becd2a8e30a50a56f12f19b6c62ee515a34af", + "bytes": 1256 + }, + { + "path": "docs/status/M16-GAP-00213.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00213.md", + "sha256": "ee58d81b60550da7abf3a6f6a99cf53d33e5570fcaa7c49bed46db66ecbb9b4d", + "bytes": 1268 + }, + { + "path": "docs/status/M16-GAP-00214.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00214.md", + "sha256": "67c9c89f921f7c911bfb5172da5eefa1fe68a9749b41e61b55383d63ba65de6c", + "bytes": 1227 + }, + { + "path": "docs/status/M16-GAP-00215.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00215.md", + "sha256": "9bdd9c23820e98dfbb1bb57c2c1c7339f07e54c4abf2ba06d5b18a3fc0c0762d", + "bytes": 1037 + }, + { + "path": "docs/status/M16-GAP-00216.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00216.md", + "sha256": "8e4d7487a830aa736ca668bdffc059ab4bc366fd65f9ef159d10905ed3e27a37", + "bytes": 1172 + }, + { + "path": "docs/status/M16-GAP-00217.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00217.md", + "sha256": "a735bae8a60c2d32b47221d4f5547489808daa8e939c7dec4bd7c729eeb23a3c", + "bytes": 1023 + }, + { + "path": "docs/status/M16-GAP-00218.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00218.md", + "sha256": "44c52e0bbeabf7ba66894db6f51f04a5ab793c921483796176568c5d25f97711", + "bytes": 1057 + }, + { + "path": "docs/status/M16-GAP-00219.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00219.md", + "sha256": "66adfb1390f39daeeedc52b0db0cfe1a4542af738ea6c5944a292faa53936e57", + "bytes": 1045 + }, + { + "path": "docs/status/M16-GAP-00220.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00220.md", + "sha256": "5c5274c86b019432f5b22e474947272001ad2af14b2437b577578547d2230511", + "bytes": 1089 + }, + { + "path": "docs/status/M16-GAP-00221.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00221.md", + "sha256": "56727977918f6e76af983feeeff59da94ea0e1d020569acfe6eb5ff8fcce49e4", + "bytes": 1032 + }, + { + "path": "docs/status/M16-GAP-00222.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00222.md", + "sha256": "61664acc268f0ddc6e53aec409e07b907dcff1e4bd75882f0b2fd0c92ad0c989", + "bytes": 1055 + }, + { + "path": "docs/status/M16-GAP-00223.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00223.md", + "sha256": "4067ee986f0ff940d8ec7ba937bbdf4b7f81eab5779a3cbdd7287dbb7fdc6de5", + "bytes": 1171 + }, + { + "path": "docs/status/M16-GAP-00224.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00224.md", + "sha256": "25f0a2dc6478e179122efad2467952a0e75eb5ff0437e0c0f2b3639f034d744c", + "bytes": 1096 + }, + { + "path": "docs/status/M16-GAP-00225.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00225.md", + "sha256": "3330f1d33b17b920a261497023dc4ca06079837f69ba39251ab8d48a31bc73c0", + "bytes": 1092 + }, + { + "path": "docs/status/M16-GAP-00226.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00226.md", + "sha256": "e4d4e214d2f1fd8c1872978d18ce28bee65fc7c4ded0c6869780af0343d12d5d", + "bytes": 1129 + }, + { + "path": "docs/status/M16-GAP-00227.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00227.md", + "sha256": "e92da7d66c4674271bbf2a43d524145b19926e1d919eacb27e4afc9ee3ceab51", + "bytes": 1146 + }, + { + "path": "docs/status/M16-GAP-00228.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00228.md", + "sha256": "347c7884e48c5ca488105422e401c93d7b2569886a43230c6d26afa103700132", + "bytes": 1164 + }, + { + "path": "docs/status/M16-GAP-00229.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00229.md", + "sha256": "938515604dab298a7d7d5f02a89ca3b587071db63af3aad1c7327873196ba14d", + "bytes": 1117 + }, + { + "path": "docs/status/M16-GAP-00230.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00230.md", + "sha256": "1b3945852e234096ae9be98f83bf3e6d647b06a0811346afaaab5c657501f9f6", + "bytes": 1089 + }, + { + "path": "docs/status/M16-GAP-00231.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00231.md", + "sha256": "d03df95a10f54abacdb1d45c6e6b186c61211fe8ebf6e710b22349e100f1801e", + "bytes": 1185 + }, + { + "path": "docs/status/M16-GAP-00232.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00232.md", + "sha256": "2c00d0f68f961158b9cb931a2071f83d7e2a402a7078789260c9263fcd7cae3d", + "bytes": 1212 + }, + { + "path": "docs/status/M16-GAP-00233.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00233.md", + "sha256": "7f05db1dbd06d1570d98aef79177784423fc73706dcd2c6e967ba5aff294c0cd", + "bytes": 1380 + }, + { + "path": "docs/status/M16-GAP-00234.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00234.md", + "sha256": "68beffb770ac5633f4b3ce112fc9e623702eacfe86ad3bbe0362158633ba4d4c", + "bytes": 1146 + }, + { + "path": "docs/status/M16-GAP-00235.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00235.md", + "sha256": "eeace6c617236ea29331ba7824d85f30fb84d674e1a3ef385da4b22c632fa2eb", + "bytes": 1296 + }, + { + "path": "docs/status/M16-GAP-00236.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00236.md", + "sha256": "de335028bda9f8c51d13d244e81c3c1952cd074bddc74896c8cf5554389f9aa5", + "bytes": 1224 + }, + { + "path": "docs/status/M16-GAP-00237.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00237.md", + "sha256": "9f3084ee5e5e0c6c195f71590e51e8294790164272a4592e8cb60982fc037ad1", + "bytes": 1232 + }, + { + "path": "docs/status/M16-GAP-00238.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00238.md", + "sha256": "a0cd13391e19a1b3acb3e84608cccc9805b0e11b9c7c791a94b3f47731381077", + "bytes": 1273 + }, + { + "path": "docs/status/M16-GAP-00239.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00239.md", + "sha256": "06f69cd41bf79caf33eeb65b3ee0a14dca930bfac46984ce2b2b3c01a53218d7", + "bytes": 1289 + }, + { + "path": "docs/status/M16-GAP-00240.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00240.md", + "sha256": "e50e0e1f6cbbbe7ca87686fa32b554bd1e9027452139638c055966cfad1a0b35", + "bytes": 1298 + }, + { + "path": "docs/status/M16-GAP-00241.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00241.md", + "sha256": "3a467ab859b73c7ebd3258c6f15f15ba2db2b197c8bf4a2441d7bcfdac26e06c", + "bytes": 1340 + }, + { + "path": "docs/status/M16-GAP-00242.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00242.md", + "sha256": "fb18cd303bcd1455f363897d6e2d34320a81156c1a096ec6ca0560e3f59e3cbb", + "bytes": 1307 + }, + { + "path": "docs/status/M16-GAP-00243.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00243.md", + "sha256": "3fa12d4941b7ea5131682f3727020b2bd45bb6ddd15368d42bb723002e1c9e2d", + "bytes": 973 + }, + { + "path": "docs/status/M16-GAP-00244.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00244.md", + "sha256": "efdfd1529460078ff569106961bd018f6ae75a3d9aa17da816639448268be17a", + "bytes": 998 + }, + { + "path": "docs/status/M16-GAP-00245.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00245.md", + "sha256": "bad2709c02906d0e84d1771308245f3c2e3d52b3b9436719efd3d47155c0eae0", + "bytes": 1005 + }, + { + "path": "docs/status/M16-GAP-00246.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00246.md", + "sha256": "5cc88cc19daa3fe9ad1a50f568d0d482c71c8b535a2e8bf024625bc7d9ca4592", + "bytes": 957 + }, + { + "path": "docs/status/M16-GAP-00247.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00247.md", + "sha256": "26711b27363845b086c413d07119622c93ef468f28f412576842b1f809f6b5b6", + "bytes": 1040 + }, + { + "path": "docs/status/M16-GAP-00248.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00248.md", + "sha256": "fb619f3dabf2d6f3593417893901d0eac7d73ccab4b836ba1824834bf6d46a95", + "bytes": 935 + }, + { + "path": "docs/status/M16-GAP-00249.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00249.md", + "sha256": "99656df59b260315621efa7792d2e4eaee6709ff434058d848c86b6b9a674771", + "bytes": 952 + }, + { + "path": "docs/status/M16-GAP-00250.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00250.md", + "sha256": "dcc9e9890aa1e9bf5df7f2c91155c98fcce954896258cad6b2b4778048e502d2", + "bytes": 946 + }, + { + "path": "docs/status/M16-GAP-00251.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00251.md", + "sha256": "67e04c31b88c5821592269c0f629dce00cf675bef9bb0879dd78d6818127f92d", + "bytes": 1070 + }, + { + "path": "docs/status/M16-GAP-00252.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00252.md", + "sha256": "3a8cf46d4f0b5efae6dfbdef3ef8ce808dd603d3a80146b15f0b2f95dabfa302", + "bytes": 920 + }, + { + "path": "docs/status/M16-GAP-00253.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00253.md", + "sha256": "e6627177fb89e16a7c18efddf495d46e01a0d1d70d14f324813a05dc5c9fdb6f", + "bytes": 906 + }, + { + "path": "docs/status/M16-GAP-00254.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00254.md", + "sha256": "711b0fb2e6dbbc12a25d1c5ad19ea3a3085d9b7fbfac45ef633735053479dc19", + "bytes": 926 + }, + { + "path": "docs/status/M16-GAP-00255.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00255.md", + "sha256": "0dba82e5720f86c24fc442bb14472d1f2a14929df2652566d0b0bf0db7ef101b", + "bytes": 887 + }, + { + "path": "docs/status/M16-GAP-00256.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00256.md", + "sha256": "cd01bfc800c3e3f8931793179a8c73070318f49129f36c9d62cfebef36dc6134", + "bytes": 885 + }, + { + "path": "docs/status/M16-GAP-00257.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00257.md", + "sha256": "6da68ce35f3ff17a22f5f5378c503304fe8e28ab65a73ff0eae35125c94600d1", + "bytes": 876 + }, + { + "path": "docs/status/M16-GAP-00258.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00258.md", + "sha256": "d4d7b7a215c7acd495971e9dbe1c41bc5ee500d7f9f1f02c4ce0c6241a7edd58", + "bytes": 908 + }, + { + "path": "docs/status/M16-GAP-00259.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00259.md", + "sha256": "cdcff44be62d2d855e75d393c79883034d78784471191fefaf25d999e34587e7", + "bytes": 842 + }, + { + "path": "docs/status/M16-GAP-00260.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00260.md", + "sha256": "fdf1a22b08d328a15a7fb473034cc058530ee5fd28a227098db0577b02a5cc7b", + "bytes": 715 + }, + { + "path": "docs/status/M16-GAP-00261.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00261.md", + "sha256": "6a8177d5e252433cff846d1febe3e98759861118e7c7dcbccfb6dacac3930ce2", + "bytes": 714 + }, + { + "path": "docs/status/M16-GAP-00262.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00262.md", + "sha256": "011e5786081b22f6e706f3efdb9e7ce3d2422ab499be32ab7875d50986e26e3e", + "bytes": 730 + }, + { + "path": "docs/status/M16-GAP-00263.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00263.md", + "sha256": "cd501a7510dd967be05d259465ae7bc9a2144122770b95cf951627e10341559d", + "bytes": 830 + }, + { + "path": "docs/status/M16-GAP-00264.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00264.md", + "sha256": "57cdac22f8e6e6bb5e233b4568e9d06885869341fac96ec5bd8e717f040edcac", + "bytes": 989 + }, + { + "path": "docs/status/M16-GAP-00265.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00265.md", + "sha256": "377f5180ae25d3912237ca1b3283f0a5f9d5292fe28952515918ec22467f8d9f", + "bytes": 948 + }, + { + "path": "docs/status/M16-GAP-00266.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00266.md", + "sha256": "5173d19e5d61195f3a6b4688d607274a099e47b5c2bcbc39d0ed1d6ad5caaccb", + "bytes": 956 + }, + { + "path": "docs/status/M16-GAP-00267.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00267.md", + "sha256": "2784e307c2f4747a99dfecea527d413b5aea42c640cb2e5f0e5d3636619a8874", + "bytes": 1050 + }, + { + "path": "docs/status/M16-GAP-00268.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00268.md", + "sha256": "7556cb0df348aca6d83dadc3d155e5ab9d9403e1e470f765acebcaa851a7d058", + "bytes": 1010 + }, + { + "path": "docs/status/M16-GAP-00269.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00269.md", + "sha256": "6c65ae2c6884a89c9051b13d5336cb9e8c454ccb8e9ed8d80e84b09ef84db0c7", + "bytes": 1022 + }, + { + "path": "docs/status/M16-GAP-00270.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00270.md", + "sha256": "293a56ae16f499b98784f05b12d1ef0ec4e9a844763ac1515b1c11d7f26fdcd9", + "bytes": 1013 + }, + { + "path": "docs/status/M16-GAP-00271.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00271.md", + "sha256": "d660b0ec53156000900bfbc2794d583a321788acba6298de35f228cf8cf6111b", + "bytes": 1016 + }, + { + "path": "docs/status/M16-GAP-00272.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00272.md", + "sha256": "522fe8b32558b75f87488fafe11ebc17994bb9742f24663c5ea5a85d64e6598c", + "bytes": 1016 + }, + { + "path": "docs/status/M16-GAP-00273.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00273.md", + "sha256": "5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8", + "bytes": 1030 + }, + { + "path": "docs/status/M16-GAP-00274.md", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/docs/status/M16-GAP-00274.md", + "sha256": "e77fcd7c5e95a64df591af09cee6dba5a3f60c1616f39a3601841f0d88c4fe3b", + "bytes": 1330 + }, + { + "path": "tests/files/web/generated/M16-GAP-00001-datablock-Action.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00001-datablock-Action.blend", + "sha256": "cb921e862eff1dcf68f22d77ef8558679207203ace0b80239a5bc5874ec2a551", + "bytes": 86769 + }, + { + "path": "tests/files/web/generated/M16-GAP-00002-datablock-Armature.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00002-datablock-Armature.blend", + "sha256": "b7d1c05b70e97be9a70890d45fea60b143073462d2a4f62eb3cc607bd2d665ca", + "bytes": 87320 + }, + { + "path": "tests/files/web/generated/M16-GAP-00003-datablock-Brush.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00003-datablock-Brush.blend", + "sha256": "f1f6922c4c9c31542a9cefad6932d616ef5dcde0067c0a9668f67902023f4f80", + "bytes": 86159 + }, + { + "path": "tests/files/web/generated/M16-GAP-00004-datablock-Camera.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00004-datablock-Camera.blend", + "sha256": "c637587ce3011cbe9b038ab87803a9a2f945d4512b55d616a5dda268628988a0", + "bytes": 86379 + }, + { + "path": "tests/files/web/generated/M16-GAP-00005-datablock-Collection.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00005-datablock-Collection.blend", + "sha256": "c33d2b1b85b0272aa3bf06a012000db5f383a9a73b79bd4b90042110b70a912b", + "bytes": 86454 + }, + { + "path": "tests/files/web/generated/M16-GAP-00006-datablock-Curve.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00006-datablock-Curve.blend", + "sha256": "49af45a70c7e050277a9b4b643c41aa9f29978b1df5214b5e48dc629b0027a21", + "bytes": 86153 + }, + { + "path": "tests/files/web/generated/M16-GAP-00007-datablock-Curves.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00007-datablock-Curves.blend", + "sha256": "d6489313473ced7f55cc1d43f3fa73181672c0a5db4b6854002f18354ca1d9a6", + "bytes": 86489 + }, + { + "path": "tests/files/web/generated/M16-GAP-00008-datablock-FreestyleLineStyle.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00008-datablock-FreestyleLineStyle.blend", + "sha256": "94de965ad54018f7072f2b4f4b752dc6f28f6608836040dc353d18d19fe31fd9", + "bytes": 85885 + }, + { + "path": "tests/files/web/generated/M16-GAP-00009-datablock-GreasePencil.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00009-datablock-GreasePencil.blend", + "sha256": "3a8525077807f9178dac3a5ba84b524e5f8e80874b15c54e2a6658ecb80315a3", + "bytes": 87788 + }, + { + "path": "tests/files/web/generated/M16-GAP-00010-datablock-Lattice.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00010-datablock-Lattice.blend", + "sha256": "ec40e2661e20c8f7e3b18d9b42f9e585175be8c2f210a1c8c190e76a6e9fbc63", + "bytes": 86081 + }, + { + "path": "tests/files/web/generated/M16-GAP-00011-datablock-Library.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00011-datablock-Library.blend", + "sha256": "d6b00d6cdc0c1c73158ba91433d8344f4b6b0a2f1d5c81e57cc4e0b42d23c34a", + "bytes": 85914 + }, + { + "path": "tests/files/web/generated/M16-GAP-00012-datablock-Light.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00012-datablock-Light.blend", + "sha256": "b92565305572d48cc2311b749d50024f1df68c4084ae8bc52ce2ba2c3832a3fa", + "bytes": 86529 + }, + { + "path": "tests/files/web/generated/M16-GAP-00013-datablock-Material.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00013-datablock-Material.blend", + "sha256": "e17880024b28e0fbc8fac5b815a2c673fe11d5000cb1d23a794cdc3d83658d76", + "bytes": 88264 + }, + { + "path": "tests/files/web/generated/M16-GAP-00014-datablock-Mesh.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00014-datablock-Mesh.blend", + "sha256": "1676a26f95de4eb90e55ea169a497c382ca68f195c6b883de49b6a3223d84bb5", + "bytes": 86393 + }, + { + "path": "tests/files/web/generated/M16-GAP-00015-datablock-MetaBall.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00015-datablock-MetaBall.blend", + "sha256": "b4901e5c71f10b79a2061bf7599b43ff1b20b7df59f227aa78c1e66a38080b4f", + "bytes": 86061 + }, + { + "path": "tests/files/web/generated/M16-GAP-00016-datablock-NodeTree.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00016-datablock-NodeTree.blend", + "sha256": "7075a345a9991d456fc2c6cc68b3a836fc837dbfd99328173f0018b59e0e483c", + "bytes": 88360 + }, + { + "path": "tests/files/web/generated/M16-GAP-00017-datablock-Object.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00017-datablock-Object.blend", + "sha256": "527eefc6ea01671a21634a3191790a8228038dd72a0744b6f00969be048e36ef", + "bytes": 85914 + }, + { + "path": "tests/files/web/generated/M16-GAP-00018-datablock-ParticleSettings.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00018-datablock-ParticleSettings.blend", + "sha256": "1a51117f3225e6fb1aa98fd135fc39bbfb9444f741f89956c52bc3e0252fc6c0", + "bytes": 85999 + }, + { + "path": "tests/files/web/generated/M16-GAP-00019-datablock-PointCloud.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00019-datablock-PointCloud.blend", + "sha256": "57ef80323ae70ce21842c00b3777e8ef484b7e332a6645c165fd5f029a522089", + "bytes": 86126 + }, + { + "path": "tests/files/web/generated/M16-GAP-00020-datablock-Scene.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00020-datablock-Scene.blend", + "sha256": "c12826c7a71f092ee8dc3c32495be295dae95f1f96e6b8310476893c7c76a81b", + "bytes": 85789 + }, + { + "path": "tests/files/web/generated/M16-GAP-00021-datablock-Screen.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00021-datablock-Screen.blend", + "sha256": "0975c534e78b6a05c7c10adc7313cb611a3350cc3c7f6e9bfd4013c334b9f376", + "bytes": 85718 + }, + { + "path": "tests/files/web/generated/M16-GAP-00022-datablock-Sound.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00022-datablock-Sound.blend", + "sha256": "42785a635a7ac560a01e00135555c31e20a60c454ffb62a466da25ddbe3b5c39", + "bytes": 85859 + }, + { + "path": "tests/files/web/generated/M16-GAP-00023-datablock-Speaker.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00023-datablock-Speaker.blend", + "sha256": "6e422e16f6e020af7ab0a6f3fad3c721b42c924c8a0392bc98546c3f39ee9d23", + "bytes": 85935 + }, + { + "path": "tests/files/web/generated/M16-GAP-00024-datablock-Text.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00024-datablock-Text.blend", + "sha256": "7999f758dfbf7b5984f16464d1e5346d806c54c83ca68a583df54942c5e3b7d3", + "bytes": 85906 + }, + { + "path": "tests/files/web/generated/M16-GAP-00025-datablock-Texture.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00025-datablock-Texture.blend", + "sha256": "482857e3b3868f7d4dc87d9b53c5552d10d608ed26a301cc5a6a080b275651c2", + "bytes": 85833 + }, + { + "path": "tests/files/web/generated/M16-GAP-00026-datablock-Volume.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00026-datablock-Volume.blend", + "sha256": "725ee2ac502aec3ffe6fc91bcaaf9ce1c8225dc71b3162b10db8d598bed0b8d0", + "bytes": 85843 + }, + { + "path": "tests/files/web/generated/M16-GAP-00027-datablock-WindowManager.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00027-datablock-WindowManager.blend", + "sha256": "88052ddeb5b8e35ce537910d9ce3b005b92c58b001f9b74a369a3c854ccebb23", + "bytes": 85714 + }, + { + "path": "tests/files/web/generated/M16-GAP-00028-datablock-WorkSpace.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00028-datablock-WorkSpace.blend", + "sha256": "fbb4fc85b46a30dd8913e5d2d75b73688cef1a3f64861337c7fbd94a687c87df", + "bytes": 85705 + }, + { + "path": "tests/files/web/generated/M16-GAP-00029-datablock-World.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00029-datablock-World.blend", + "sha256": "33501247b59cec137aa857b0bd4ea59526f30bb3632de9996e6026d4bd3f0401", + "bytes": 86353 + }, + { + "path": "tests/files/web/generated/M16-GAP-00030-modifier-ARMATURE.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00030-modifier-ARMATURE.blend", + "sha256": "4725dda93e7bece9fb121a5cf91856c43ac043a598c038b297eef8aad95d2552", + "bytes": 86858 + }, + { + "path": "tests/files/web/generated/M16-GAP-00031-modifier-ARRAY.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00031-modifier-ARRAY.blend", + "sha256": "ff8619e63a5611dbc78599f849d27f0e4e2dc3c1c5849e9db86349e00106c23b", + "bytes": 87078 + }, + { + "path": "tests/files/web/generated/M16-GAP-00032-modifier-BEVEL.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00032-modifier-BEVEL.blend", + "sha256": "3a27883c1faf12a8a0281b7c0e9747915784138efb24c0f1680b525cd50b84c7", + "bytes": 86569 + }, + { + "path": "tests/files/web/generated/M16-GAP-00033-modifier-BOOLEAN.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00033-modifier-BOOLEAN.blend", + "sha256": "ea909948fb2b92f288684886a3d488f74a707108dc94778e9a78a6cb082cbe38", + "bytes": 86903 + }, + { + "path": "tests/files/web/generated/M16-GAP-00034-modifier-BUILD.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00034-modifier-BUILD.blend", + "sha256": "46b05aed641ab8cd6cc280587cf9672223190c2b730af8d8c21f1cf98cb68901", + "bytes": 86383 + }, + { + "path": "tests/files/web/generated/M16-GAP-00035-modifier-CAST.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00035-modifier-CAST.blend", + "sha256": "7dfe1faa6b605f6bd394f07c4da96a3e70401eeedd00714b3dbf533d0100ed4e", + "bytes": 86512 + }, + { + "path": "tests/files/web/generated/M16-GAP-00036-modifier-CLOTH.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00036-modifier-CLOTH.blend", + "sha256": "c2da02610f891f4de38f3b8d55929a599c84528d3c67317a8e698854367d2d74", + "bytes": 86552 + }, + { + "path": "tests/files/web/generated/M16-GAP-00037-modifier-COLLISION.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00037-modifier-COLLISION.blend", + "sha256": "20cd128c83e9729377864f496c85393a2090c72a22f7d1c0b15f834293100764", + "bytes": 86434 + }, + { + "path": "tests/files/web/generated/M16-GAP-00038-modifier-CORRECTIVE_SMOOTH.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00038-modifier-CORRECTIVE_SMOOTH.blend", + "sha256": "059890c5b228851c6e32643e71a142523cb1c0f02726a72902a6b88e24e71fbf", + "bytes": 86517 + }, + { + "path": "tests/files/web/generated/M16-GAP-00039-modifier-CURVE.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00039-modifier-CURVE.blend", + "sha256": "b68aa51151cf19b1795701967eb1fa514387c04b967c646547ed33a727a8a58a", + "bytes": 86516 + }, + { + "path": "tests/files/web/generated/M16-GAP-00040-modifier-DATA_TRANSFER.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00040-modifier-DATA_TRANSFER.blend", + "sha256": "5cbcab6db651f6b44387e6688cf02a8813aeeccb07e6fdc5fbb6e4ac34da050b", + "bytes": 86540 + }, + { + "path": "tests/files/web/generated/M16-GAP-00041-modifier-DECIMATE.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00041-modifier-DECIMATE.blend", + "sha256": "24161163630d29eedb3dd194070dff9b5a4f762f8a0ce4889b9e6a5310e54153", + "bytes": 86540 + }, + { + "path": "tests/files/web/generated/M16-GAP-00042-modifier-DISPLACE.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00042-modifier-DISPLACE.blend", + "sha256": "d6314c42a4bccfe4ff125bf19570bd8b52eb196f3cd3dfc82fcad21a5390ba76", + "bytes": 86522 + }, + { + "path": "tests/files/web/generated/M16-GAP-00043-modifier-DYNAMIC_PAINT.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00043-modifier-DYNAMIC_PAINT.blend", + "sha256": "f715974fc528ade28e3658a9468a36ba2ac8605f009c284ada97de3dec5091f1", + "bytes": 86512 + }, + { + "path": "tests/files/web/generated/M16-GAP-00044-modifier-EDGE_SPLIT.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00044-modifier-EDGE_SPLIT.blend", + "sha256": "825b593e3792dbb69379ae5d83713226fe8818317c1b68285a19e9070bd76bae", + "bytes": 86521 + }, + { + "path": "tests/files/web/generated/M16-GAP-00045-modifier-EXPLODE.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00045-modifier-EXPLODE.blend", + "sha256": "f05a2ee7c15544e1b39de2a35fd6eee19a31deb821ca56fc642418c939e28b12", + "bytes": 86513 + }, + { + "path": "tests/files/web/generated/M16-GAP-00046-modifier-FLUID.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00046-modifier-FLUID.blend", + "sha256": "e5061df121df88e723c87360ab0ccef630ada11c31183f11d6ee17114ad70690", + "bytes": 86520 + }, + { + "path": "tests/files/web/generated/M16-GAP-00047-modifier-GREASE_PENCIL_ARMATURE.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00047-modifier-GREASE_PENCIL_ARMATURE.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/files/web/generated/M16-GAP-00048-modifier-GREASE_PENCIL_ARRAY.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00048-modifier-GREASE_PENCIL_ARRAY.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/files/web/generated/M16-GAP-00049-modifier-GREASE_PENCIL_BUILD.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00049-modifier-GREASE_PENCIL_BUILD.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/files/web/generated/M16-GAP-00050-modifier-GREASE_PENCIL_COLOR.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00050-modifier-GREASE_PENCIL_COLOR.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/files/web/generated/M16-GAP-00051-modifier-GREASE_PENCIL_DASH.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00051-modifier-GREASE_PENCIL_DASH.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/files/web/generated/M16-GAP-00052-modifier-GREASE_PENCIL_ENVELOPE.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00052-modifier-GREASE_PENCIL_ENVELOPE.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/files/web/generated/M16-GAP-00053-modifier-GREASE_PENCIL_HOOK.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00053-modifier-GREASE_PENCIL_HOOK.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/files/web/generated/M16-GAP-00054-modifier-GREASE_PENCIL_LATTICE.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00054-modifier-GREASE_PENCIL_LATTICE.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/files/web/generated/M16-GAP-00055-modifier-GREASE_PENCIL_LENGTH.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00055-modifier-GREASE_PENCIL_LENGTH.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/files/web/generated/M16-GAP-00056-modifier-GREASE_PENCIL_MIRROR.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00056-modifier-GREASE_PENCIL_MIRROR.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/files/web/generated/M16-GAP-00057-modifier-GREASE_PENCIL_MULTIPLY.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00057-modifier-GREASE_PENCIL_MULTIPLY.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/files/web/generated/M16-GAP-00058-modifier-GREASE_PENCIL_NOISE.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00058-modifier-GREASE_PENCIL_NOISE.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/files/web/generated/M16-GAP-00059-modifier-GREASE_PENCIL_OFFSET.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00059-modifier-GREASE_PENCIL_OFFSET.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/files/web/generated/M16-GAP-00060-modifier-GREASE_PENCIL_OPACITY.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00060-modifier-GREASE_PENCIL_OPACITY.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/files/web/generated/M16-GAP-00061-modifier-GREASE_PENCIL_OUTLINE.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00061-modifier-GREASE_PENCIL_OUTLINE.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/files/web/generated/M16-GAP-00062-modifier-GREASE_PENCIL_SHRINKWRAP.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00062-modifier-GREASE_PENCIL_SHRINKWRAP.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/files/web/generated/M16-GAP-00063-modifier-GREASE_PENCIL_SIMPLIFY.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00063-modifier-GREASE_PENCIL_SIMPLIFY.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/files/web/generated/M16-GAP-00064-modifier-GREASE_PENCIL_SMOOTH.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00064-modifier-GREASE_PENCIL_SMOOTH.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/files/web/generated/M16-GAP-00065-modifier-GREASE_PENCIL_SUBDIV.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00065-modifier-GREASE_PENCIL_SUBDIV.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/files/web/generated/M16-GAP-00066-modifier-GREASE_PENCIL_TEXTURE.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00066-modifier-GREASE_PENCIL_TEXTURE.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/files/web/generated/M16-GAP-00067-modifier-GREASE_PENCIL_THICKNESS.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00067-modifier-GREASE_PENCIL_THICKNESS.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/files/web/generated/M16-GAP-00068-modifier-GREASE_PENCIL_TIME.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00068-modifier-GREASE_PENCIL_TIME.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/files/web/generated/M16-GAP-00069-modifier-GREASE_PENCIL_TINT.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00069-modifier-GREASE_PENCIL_TINT.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/files/web/generated/M16-GAP-00070-modifier-GREASE_PENCIL_VERTEX_WEIGHT_ANGLE.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00070-modifier-GREASE_PENCIL_VERTEX_WEIGHT_ANGLE.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/files/web/generated/M16-GAP-00071-modifier-GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00071-modifier-GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/files/web/generated/M16-GAP-00072-modifier-HOOK.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00072-modifier-HOOK.blend", + "sha256": "9fee2803c1400f07d4a58fb05a708b8e5bdf878820d636c57cecbb6deda9adec", + "bytes": 86521 + }, + { + "path": "tests/files/web/generated/M16-GAP-00073-modifier-LAPLACIANDEFORM.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00073-modifier-LAPLACIANDEFORM.blend", + "sha256": "d4a01fc520b4641442f56506a5a320d4c4efee57fcec779021cc10d17d62e1e0", + "bytes": 86523 + }, + { + "path": "tests/files/web/generated/M16-GAP-00074-modifier-LAPLACIANSMOOTH.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00074-modifier-LAPLACIANSMOOTH.blend", + "sha256": "0f1ff155e600a04f0a717584716ae1ca5811ed9642354494a26c2a8d90590b99", + "bytes": 86545 + }, + { + "path": "tests/files/web/generated/M16-GAP-00075-modifier-LATTICE.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00075-modifier-LATTICE.blend", + "sha256": "907149629b82fb0289da70535b29cea8bae0b24d745b92c0d4116a3a24b95494", + "bytes": 86504 + }, + { + "path": "tests/files/web/generated/M16-GAP-00076-modifier-LINEART.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00076-modifier-LINEART.blend", + "sha256": "6e81096d309df5ada76b5bdd7c9b1b3d5399081500939e7e9dc1777c9c720401", + "bytes": 87791 + }, + { + "path": "tests/files/web/generated/M16-GAP-00077-modifier-MASK.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00077-modifier-MASK.blend", + "sha256": "62d3740eb3c43d79fa8018e992d0f21dc1b0efac5f8e41965a9564e0c765deee", + "bytes": 86507 + }, + { + "path": "tests/files/web/generated/M16-GAP-00078-modifier-MESH_CACHE.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00078-modifier-MESH_CACHE.blend", + "sha256": "7c381314e4b8c95aa2b01acbd2f8ec0664bb27264dd6c6dd6456602adc42f6e8", + "bytes": 86412 + }, + { + "path": "tests/files/web/generated/M16-GAP-00079-modifier-MESH_DEFORM.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00079-modifier-MESH_DEFORM.blend", + "sha256": "91d67a1b79c80b452e0637bc515030c8d8a2bb23d88399029ca57160f7facf20", + "bytes": 86406 + }, + { + "path": "tests/files/web/generated/M16-GAP-00080-modifier-MESH_SEQUENCE_CACHE.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00080-modifier-MESH_SEQUENCE_CACHE.blend", + "sha256": "817ed4b1a395d83b8166c84206f6dd7fef22a7c1dd8b62f85414125f4a5a927b", + "bytes": 86419 + }, + { + "path": "tests/files/web/generated/M16-GAP-00081-modifier-MESH_TO_VOLUME.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00081-modifier-MESH_TO_VOLUME.blend", + "sha256": "52ab00ddd22c609f59f06c3747700b17f5b970ee4980dd287076446d289439db", + "bytes": 86084 + }, + { + "path": "tests/files/web/generated/M16-GAP-00082-modifier-MIRROR.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00082-modifier-MIRROR.blend", + "sha256": "0ef4742c3f30a3bbb59cd1924e99d22f57454c77e625c9ccb4ecd802559d8842", + "bytes": 86417 + }, + { + "path": "tests/files/web/generated/M16-GAP-00083-modifier-MULTIRES.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00083-modifier-MULTIRES.blend", + "sha256": "6cad4d91397b06ba4779ad5336056e7551774c4f96261f2e8d3dd729c81b7b52", + "bytes": 86396 + }, + { + "path": "tests/files/web/generated/M16-GAP-00084-modifier-NODES.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00084-modifier-NODES.blend", + "sha256": "b8e7982ab3969a297ff8337fcdf966004e845189a2dfe5480ea60aecca3493b7", + "bytes": 86398 + }, + { + "path": "tests/files/web/generated/M16-GAP-00085-modifier-NORMAL_EDIT.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00085-modifier-NORMAL_EDIT.blend", + "sha256": "e0d6b77f0bc97f682534efce4c0901a056bf5d9a104525e634c53284ddd858aa", + "bytes": 86406 + }, + { + "path": "tests/files/web/generated/M16-GAP-00086-modifier-OCEAN.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00086-modifier-OCEAN.blend", + "sha256": "1b6a43508676777d94770f3fbbee33161a578ed93ad7054bed48ff91a96ecae1", + "bytes": 86471 + }, + { + "path": "tests/files/web/generated/M16-GAP-00087-modifier-PARTICLE_INSTANCE.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00087-modifier-PARTICLE_INSTANCE.blend", + "sha256": "d4f4667cac6061406c5a7bf8231fdaf9e6ee589ee57d168b21fa9347f90395da", + "bytes": 86412 + }, + { + "path": "tests/files/web/generated/M16-GAP-00088-modifier-PARTICLE_SYSTEM.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00088-modifier-PARTICLE_SYSTEM.blend", + "sha256": "b0e15d7d4821cd9b60e977686142f7bf26c197c6f76c31c59d5dbe06fa5316bf", + "bytes": 86762 + }, + { + "path": "tests/files/web/generated/M16-GAP-00089-modifier-REMESH.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00089-modifier-REMESH.blend", + "sha256": "6cf821a751ef19f4719d29a7c73c3d5acefcb381c5d8afb61673ca4ec068a70e", + "bytes": 86403 + }, + { + "path": "tests/files/web/generated/M16-GAP-00090-modifier-SCREW.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00090-modifier-SCREW.blend", + "sha256": "3cfe313b349aff539f46496c520b04696842252655f8d15230c9a7b24b857d2c", + "bytes": 86396 + }, + { + "path": "tests/files/web/generated/M16-GAP-00091-modifier-SHRINKWRAP.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00091-modifier-SHRINKWRAP.blend", + "sha256": "05047e750c6b03b39ac18a3090e450960092ed0ab03a61b649ca11c0a0b5aa85", + "bytes": 86404 + }, + { + "path": "tests/files/web/generated/M16-GAP-00092-modifier-SIMPLE_DEFORM.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00092-modifier-SIMPLE_DEFORM.blend", + "sha256": "3be9ab1afb8c518382aa329797e0a4b7369ab7f01cab6fec1481fcda187062af", + "bytes": 86407 + }, + { + "path": "tests/files/web/generated/M16-GAP-00093-modifier-SKIN.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00093-modifier-SKIN.blend", + "sha256": "e24d021bdb48b6a17945b1b6c6a1933ab3a9fabd321775f5bf0313bc6e7797f3", + "bytes": 86438 + }, + { + "path": "tests/files/web/generated/M16-GAP-00094-modifier-SMOOTH.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00094-modifier-SMOOTH.blend", + "sha256": "2e416d62faeeb22313d56ba073cb184618f80b751cf31f100ce8e0c78565de02", + "bytes": 86496 + }, + { + "path": "tests/files/web/generated/M16-GAP-00095-modifier-SOFT_BODY.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00095-modifier-SOFT_BODY.blend", + "sha256": "2bfd58334380f70c1309ebfd00c092c531bb7b3921620e799c57752c7ee5596f", + "bytes": 86559 + }, + { + "path": "tests/files/web/generated/M16-GAP-00096-modifier-SOLIDIFY.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00096-modifier-SOLIDIFY.blend", + "sha256": "0b319df9e6c4f677728af992114196e4fa29f80effabc01b3dbfd639bc2b66d5", + "bytes": 86420 + }, + { + "path": "tests/files/web/generated/M16-GAP-00097-modifier-SUBSURF.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00097-modifier-SUBSURF.blend", + "sha256": "f0c3e9801b4138c3701599e24242374dbb6217f223e2decc7c04d5558094108a", + "bytes": 86391 + }, + { + "path": "tests/files/web/generated/M16-GAP-00098-modifier-SURFACE.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00098-modifier-SURFACE.blend", + "sha256": "41aa335359773ce72a3f372784d1fbf74a1ec65c077652f0cb98d34793edc937", + "bytes": 86387 + }, + { + "path": "tests/files/web/generated/M16-GAP-00099-modifier-SURFACE_DEFORM.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00099-modifier-SURFACE_DEFORM.blend", + "sha256": "cb459101d9ecdd4e5761a3e216dcf3eda99a09eaad5642573ef0ba0b4c063072", + "bytes": 86421 + }, + { + "path": "tests/files/web/generated/M16-GAP-00100-modifier-TRIANGULATE.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00100-modifier-TRIANGULATE.blend", + "sha256": "4475c06ab20bc9f9f771556173e7d5782049548dfcb845e7febba79c27f5ffcf", + "bytes": 86387 + }, + { + "path": "tests/files/web/generated/M16-GAP-00101-modifier-UV_PROJECT.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00101-modifier-UV_PROJECT.blend", + "sha256": "e5cf137ee1feddf7b03f287b04299a7a78177b58e63545ccca15c78f202ce2a4", + "bytes": 86395 + }, + { + "path": "tests/files/web/generated/M16-GAP-00102-modifier-UV_WARP.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00102-modifier-UV_WARP.blend", + "sha256": "ad3f2ba8f4d282b2333fc192f3e2fdc598c06125f3b14c9c47b4721f9a1a0df9", + "bytes": 86398 + }, + { + "path": "tests/files/web/generated/M16-GAP-00103-modifier-VERTEX_WEIGHT_EDIT.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00103-modifier-VERTEX_WEIGHT_EDIT.blend", + "sha256": "2ecafafb8d81c27842512406dd93978754f624f0e9012e4a2036d32eac1178b2", + "bytes": 86454 + }, + { + "path": "tests/files/web/generated/M16-GAP-00104-modifier-VERTEX_WEIGHT_MIX.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00104-modifier-VERTEX_WEIGHT_MIX.blend", + "sha256": "19a164b591a6fbe02df07797c422aea350e26f1e9125589037067f609095105a", + "bytes": 86411 + }, + { + "path": "tests/files/web/generated/M16-GAP-00105-modifier-VERTEX_WEIGHT_PROXIMITY.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00105-modifier-VERTEX_WEIGHT_PROXIMITY.blend", + "sha256": "53234cfd0e10e91b78465d8f18a4b8d863885d1d93c0757c07f0d31da486fbf2", + "bytes": 86460 + }, + { + "path": "tests/files/web/generated/M16-GAP-00106-modifier-VOLUME_DISPLACE.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00106-modifier-VOLUME_DISPLACE.blend", + "sha256": "95a922b90fb5bce90cb2f7995761805709a4a18b9206fab7f30e3848160b2c95", + "bytes": 86077 + }, + { + "path": "tests/files/web/generated/M16-GAP-00107-modifier-VOLUME_TO_MESH.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00107-modifier-VOLUME_TO_MESH.blend", + "sha256": "fab68f64a3d9bbf1b224393518bc43a454601eabf8d936020aee5b478012356f", + "bytes": 86415 + }, + { + "path": "tests/files/web/generated/M16-GAP-00108-modifier-WARP.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00108-modifier-WARP.blend", + "sha256": "a328ef4b4cbcf265de0483012f80860fccb75e53fcb25bd6ccbe81dc97cb0ba5", + "bytes": 86403 + }, + { + "path": "tests/files/web/generated/M16-GAP-00109-modifier-WAVE.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00109-modifier-WAVE.blend", + "sha256": "41c81c36b176656e08a33c9c428da5a257c11ab6e9f0f8bfa530336b7ab159a8", + "bytes": 86396 + }, + { + "path": "tests/files/web/generated/M16-GAP-00110-modifier-WEIGHTED_NORMAL.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00110-modifier-WEIGHTED_NORMAL.blend", + "sha256": "26469e905bbc2c52467b4b1361f80ffb75b756206974724debbae5e06fd363f0", + "bytes": 86410 + }, + { + "path": "tests/files/web/generated/M16-GAP-00111-modifier-WELD.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00111-modifier-WELD.blend", + "sha256": "fa82df1cc06f762f90acfd62c6172c631534838342d971e2ecba931d9bbb4b14", + "bytes": 86394 + }, + { + "path": "tests/files/web/generated/M16-GAP-00112-modifier-WIREFRAME.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00112-modifier-WIREFRAME.blend", + "sha256": "b1952474708ab9f56145f661b3cf5562dc0535a5fa0fe6903c71864af73b0641", + "bytes": 86399 + }, + { + "path": "tests/files/web/generated/M16-GAP-00113-operator-action.bake_keys.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00113-operator-action.bake_keys.blend", + "sha256": "6253d0f8f008dcf8881bae4326d09648d21977a844c0f604c1a4773ef8372931", + "bytes": 86996 + }, + { + "path": "tests/files/web/generated/M16-GAP-00114-operator-action.clean.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00114-operator-action.clean.blend", + "sha256": "edd9074159f387a456bc1eb7bb37053fa63038532b928de849378fdcaab9d3e4", + "bytes": 86804 + }, + { + "path": "tests/files/web/generated/M16-GAP-00115-operator-action.clickselect.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00115-operator-action.clickselect.blend", + "sha256": "862548b70dd61ae3a132854a495648a2e265df2997054cadd1160e135ec3f059", + "bytes": 87093 + }, + { + "path": "tests/files/web/generated/M16-GAP-00116-operator-action.copy.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00116-operator-action.copy.blend", + "sha256": "d291508ed19a9ba575908253a13310eab58dffa168cf07b401816f2ffd6a5448", + "bytes": 87090 + }, + { + "path": "tests/files/web/generated/M16-GAP-00117-operator-action.delete.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00117-operator-action.delete.blend", + "sha256": "5112a074973e086eb2eaa00e604786dc2d7b8dffb1691de800c9dde97592de78", + "bytes": 86816 + }, + { + "path": "tests/files/web/generated/M16-GAP-00118-operator-action.duplicate.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00118-operator-action.duplicate.blend", + "sha256": "090e668d61cbdf9a9618c3f592e8337b1776386ab71dda115aacd3591e5a2718", + "bytes": 86896 + }, + { + "path": "tests/files/web/generated/M16-GAP-00119-operator-action.duplicate_move.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00119-operator-action.duplicate_move.blend", + "sha256": "1a40c2e579708731f99bd4f25d255acb3be51431c86fe19d89f741043e4dc085", + "bytes": 86906 + }, + { + "path": "tests/files/web/generated/M16-GAP-00120-operator-action.easing_type.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00120-operator-action.easing_type.blend", + "sha256": "828206cdfd525388464e7ec281a9968c96a7add8cca8db275641031e14627caa", + "bytes": 86877 + }, + { + "path": "tests/files/web/generated/M16-GAP-00121-operator-action.extrapolation_type.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00121-operator-action.extrapolation_type.blend", + "sha256": "39c4559926b71ed7b364b6f618c6b19c215d23031b994460d0180537879ff10f", + "bytes": 86924 + }, + { + "path": "tests/files/web/generated/M16-GAP-00122-operator-action.frame_jump.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00122-operator-action.frame_jump.blend", + "sha256": "332f117de8b826abb0d044715daa2d01a203b03080c61aaed7671ef67fa2da44", + "bytes": 86875 + }, + { + "path": "tests/files/web/generated/M16-GAP-00123-operator-action.handle_type.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00123-operator-action.handle_type.blend", + "sha256": "69281e445ba7741ce639dc98bf115e265e52bdb4900d82de9b25c70e6cd9d42e", + "bytes": 86907 + }, + { + "path": "tests/files/web/generated/M16-GAP-00124-operator-action.interpolation_type.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00124-operator-action.interpolation_type.blend", + "sha256": "b05e3fe799dd077db20569b98a6849800e4d8e5b1b95b2018ccef70f3d2e77ca", + "bytes": 86881 + }, + { + "path": "tests/files/web/generated/M16-GAP-00125-operator-action.keyframe_insert.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00125-operator-action.keyframe_insert.blend", + "sha256": "0ff15cd87241927e76bbcfdfdc6048238467b3e09d2e9d304d14b3858f2d95a7", + "bytes": 86896 + }, + { + "path": "tests/files/web/generated/M16-GAP-00126-operator-action.keyframe_type.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00126-operator-action.keyframe_type.blend", + "sha256": "a99bcef879a29da4f423a3efc67ab5f497beef3927ad2e65fcb9ae556826a81a", + "bytes": 86863 + }, + { + "path": "tests/files/web/generated/M16-GAP-00127-operator-action.markers_make_local.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00127-operator-action.markers_make_local.blend", + "sha256": "767f97663e2fd45d8491b1bf8cea0a9a628faa9f4b14993d65953e90f27d7a12", + "bytes": 86876 + }, + { + "path": "tests/files/web/generated/M16-GAP-00128-operator-action.mirror.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00128-operator-action.mirror.blend", + "sha256": "92ab7f13ff0f250d0c173bc3db5d21fedab4bfa7ff4b70c66b4f12af5039a8e5", + "bytes": 86910 + }, + { + "path": "tests/files/web/generated/M16-GAP-00129-operator-action.new.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00129-operator-action.new.blend", + "sha256": "9d189452cbc1e0cf6c87093f7fb6ffc8728def0ac3bc976a4a3be814d42f10e5", + "bytes": 87114 + }, + { + "path": "tests/files/web/generated/M16-GAP-00130-operator-action.paste.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00130-operator-action.paste.blend", + "sha256": "fc332fb6c877fb7a39fb418416168cce6637befba392dafb8b18ca17fb2b66c1", + "bytes": 86900 + }, + { + "path": "tests/files/web/generated/M16-GAP-00131-operator-action.previewrange_set.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00131-operator-action.previewrange_set.blend", + "sha256": "8b0222547b3e31480dede4804353edd4d056cc806ad2cede24c73e81070bb9b6", + "bytes": 86898 + }, + { + "path": "tests/files/web/generated/M16-GAP-00132-operator-action.push_down.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00132-operator-action.push_down.blend", + "sha256": "e3e933bfc5595d288a5ab2e2f0e661d76474aff88b33d0acc62f7e540757e2e9", + "bytes": 86944 + }, + { + "path": "tests/files/web/generated/M16-GAP-00133-operator-action.select_all.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00133-operator-action.select_all.blend", + "sha256": "f7ebc1bb7b45d6838d6e2bdccc809f2142a70cb3a9c9ecabcc5e1b5a91426526", + "bytes": 86850 + }, + { + "path": "tests/files/web/generated/M16-GAP-00134-operator-action.select_box.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00134-operator-action.select_box.blend", + "sha256": "100744edae87b08ef300ae23ae4a5556dd6576f1a5d30630967475736e3a4ba8", + "bytes": 86871 + }, + { + "path": "tests/files/web/generated/M16-GAP-00135-operator-action.select_by_type.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00135-operator-action.select_by_type.blend", + "sha256": "3069eba61f2bdfa1c772afc62c075a06a95a803888b4213078d6dd1a68aa6bf5", + "bytes": 86891 + }, + { + "path": "tests/files/web/generated/M16-GAP-00136-operator-action.select_circle.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00136-operator-action.select_circle.blend", + "sha256": "16ae2413cd86d4fa8df384ef1e2d167c4e79caa48114b5b12facd33e1ca37b8b", + "bytes": 86883 + }, + { + "path": "tests/files/web/generated/M16-GAP-00137-operator-action.select_column.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00137-operator-action.select_column.blend", + "sha256": "01b13092985f0c672a5ac639ce1e556caf8c405ed3574249b0c4680aedecdc27", + "bytes": 86891 + }, + { + "path": "tests/files/web/generated/M16-GAP-00138-operator-action.select_lasso.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00138-operator-action.select_lasso.blend", + "sha256": "d3ef22466ef1615aeb2f96ffbb70e8a2a13ca7ce9de7fac91e75101ab01415de", + "bytes": 86894 + }, + { + "path": "tests/files/web/generated/M16-GAP-00139-operator-action.select_leftright.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00139-operator-action.select_leftright.blend", + "sha256": "ed6f8c69f70b5dcef868fffc9381395c7884401bbe24fdd8d9984557284e66c9", + "bytes": 86867 + }, + { + "path": "tests/files/web/generated/M16-GAP-00140-operator-action.select_less.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00140-operator-action.select_less.blend", + "sha256": "3acc7908b362f9c224e825c5429b59d549a77dab4e2b45b285221e5c54fa0c2b", + "bytes": 86865 + }, + { + "path": "tests/files/web/generated/M16-GAP-00141-operator-action.select_linked.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00141-operator-action.select_linked.blend", + "sha256": "62ddf7e0141f7bf5b0bfbf85b8faa0cb0ae602681f70e2c5e979db033b14056f", + "bytes": 86861 + }, + { + "path": "tests/files/web/generated/M16-GAP-00142-operator-action.select_more.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00142-operator-action.select_more.blend", + "sha256": "9f0a3fad228c1a7200cd9ac76af24fb8a853dd261f49ef2186491690713ec726", + "bytes": 86855 + }, + { + "path": "tests/files/web/generated/M16-GAP-00143-operator-action.snap.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00143-operator-action.snap.blend", + "sha256": "d12a490f3d76a0b599f4fdffbb2dd65e01d0c637a2de6bbe78a44b887676995a", + "bytes": 86847 + }, + { + "path": "tests/files/web/generated/M16-GAP-00144-operator-action.stash.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00144-operator-action.stash.blend", + "sha256": "7d617c7e82a5673eedd2f48178a5991066a276a2c149f7be92c5f5975adc4234", + "bytes": 86955 + }, + { + "path": "tests/files/web/generated/M16-GAP-00145-operator-action.stash_and_create.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00145-operator-action.stash_and_create.blend", + "sha256": "f7b2dc080c9aa23cc45b9a2c59114f23ce3f1369f00618c9ef51569516692f38", + "bytes": 87002 + }, + { + "path": "tests/files/web/generated/M16-GAP-00146-operator-action.unlink.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00146-operator-action.unlink.blend", + "sha256": "80d5a85825c441b1835e82af730df148dd664fbae988aabb9aab6e74ac605f11", + "bytes": 86881 + }, + { + "path": "tests/files/web/generated/M16-GAP-00147-operator-action.view_all.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00147-operator-action.view_all.blend", + "sha256": "ef2a4fd9a28a6a97d40b258beb11f8e00899c4715e0ba6e0703a25aecd678ec5", + "bytes": 86846 + }, + { + "path": "tests/files/web/generated/M16-GAP-00148-operator-action.view_frame.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00148-operator-action.view_frame.blend", + "sha256": "142f7036c4c1a196ae0affc43fd62d6a196576898ee969f9aa83655917e0960c", + "bytes": 87098 + }, + { + "path": "tests/files/web/generated/M16-GAP-00149-operator-action.view_selected.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00149-operator-action.view_selected.blend", + "sha256": "108a69ae276722c4d9396deb51f7f1909799d48ce310d82675305a59b1196fc7", + "bytes": 87111 + }, + { + "path": "tests/files/web/generated/M16-GAP-00150-operator-anim.change_frame.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00150-operator-anim.change_frame.blend", + "sha256": "04ba48b6b81449b47cd8c038a012518f773dbfbe542ec29861686cf9a1a0cedb", + "bytes": 87111 + }, + { + "path": "tests/files/web/generated/M16-GAP-00151-operator-anim.channel_select_keys.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00151-operator-anim.channel_select_keys.blend", + "sha256": "f8ed4706c765c28e850c752bf4fc367b815c298b574cbed741997a5770826b43", + "bytes": 87099 + }, + { + "path": "tests/files/web/generated/M16-GAP-00152-operator-anim.channel_view_pick.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00152-operator-anim.channel_view_pick.blend", + "sha256": "e3a0c3158f43b96f05006d54b451614754d0fca9a07fbcc3b1c9cc3a4e076d29", + "bytes": 87117 + }, + { + "path": "tests/files/web/generated/M16-GAP-00153-operator-anim.channels_bake.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00153-operator-anim.channels_bake.blend", + "sha256": "1818a2a90d3eea5b38ad4d6e3cb1bd0394022ca62a8384734cefc36305d884eb", + "bytes": 87182 + }, + { + "path": "tests/files/web/generated/M16-GAP-00154-operator-anim.channels_clean_empty.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00154-operator-anim.channels_clean_empty.blend", + "sha256": "8e1c2b7578c3679a5c1ad63aef3a621f7a6f8c486598c936076a81fc19728c7a", + "bytes": 87446 + }, + { + "path": "tests/files/web/generated/M16-GAP-00155-operator-anim.channels_click.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00155-operator-anim.channels_click.blend", + "sha256": "6ebd45981b70fb1a915008d4fa4d8c574b02bf5440b49e93e16792b819a721e5", + "bytes": 87124 + }, + { + "path": "tests/files/web/generated/M16-GAP-00156-operator-anim.channels_collapse.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00156-operator-anim.channels_collapse.blend", + "sha256": "6b6c488604fa8dd8ec8e79f97961a4e74f6ca673a14658dd890a0b85e18a4dc9", + "bytes": 87090 + }, + { + "path": "tests/files/web/generated/M16-GAP-00157-operator-anim.channels_delete.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00157-operator-anim.channels_delete.blend", + "sha256": "c5355b82bb3ce08f8a55d436eb47e2e8cd49711c6518e016c13345c5a8683876", + "bytes": 86834 + }, + { + "path": "tests/files/web/generated/M16-GAP-00158-operator-anim.channels_editable_toggle.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00158-operator-anim.channels_editable_toggle.blend", + "sha256": "6a983e51050eb6a6b8300c153216a37d61a16e20c09716405c6d9a96912a612f", + "bytes": 87112 + }, + { + "path": "tests/files/web/generated/M16-GAP-00159-operator-anim.channels_expand.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00159-operator-anim.channels_expand.blend", + "sha256": "7e8658f9238b0cfbb08775388cddf2f7e453c6a2683fe908974b0dd55a852ca7", + "bytes": 87114 + }, + { + "path": "tests/files/web/generated/M16-GAP-00160-operator-anim.channels_fcurves_enable.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00160-operator-anim.channels_fcurves_enable.blend", + "sha256": "091c8bd8ceb6206cd7ef7f5d8cac03dd4ee554c4ec13f588e8b9ef5933c24ebf", + "bytes": 87103 + }, + { + "path": "tests/files/web/generated/M16-GAP-00161-operator-anim.channels_group.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00161-operator-anim.channels_group.blend", + "sha256": "dfa3cbf7b6511926f549134cfd157e2c4350d9f2f4fa5c30dc01ada3dc071cea", + "bytes": 87091 + }, + { + "path": "tests/files/web/generated/M16-GAP-00162-operator-anim.channels_move.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00162-operator-anim.channels_move.blend", + "sha256": "d75500ad33614d2ebe9cf705757971cb76556ae18b77b1064e13420f514f41ea", + "bytes": 87080 + }, + { + "path": "tests/files/web/generated/M16-GAP-00163-operator-anim.channels_rename.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00163-operator-anim.channels_rename.blend", + "sha256": "e26a89d3f532f3bbcb62036d20a5c6eb82331591cb7db7e3202a750870087e24", + "bytes": 87123 + }, + { + "path": "tests/files/web/generated/M16-GAP-00164-operator-anim.channels_select_all.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00164-operator-anim.channels_select_all.blend", + "sha256": "8931b05c45cbe7109d5c14fff6b753ab6cea2042bbdfa86dcadb0ae8762aa0fc", + "bytes": 87114 + }, + { + "path": "tests/files/web/generated/M16-GAP-00165-operator-anim.channels_select_box.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00165-operator-anim.channels_select_box.blend", + "sha256": "3f11ff84cbe69116b6b008b9c5d12f35e7796c2f571776f33025bb068ab46ccc", + "bytes": 87102 + }, + { + "path": "tests/files/web/generated/M16-GAP-00166-operator-anim.channels_select_filter.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00166-operator-anim.channels_select_filter.blend", + "sha256": "2d21685dd8ae6ad9658d1ee910acb36645d3cea7c6bf0f674b8437790d0df727", + "bytes": 87110 + }, + { + "path": "tests/files/web/generated/M16-GAP-00167-operator-anim.channels_setting_disable.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00167-operator-anim.channels_setting_disable.blend", + "sha256": "849ad29b595845b1f7f17dbfab50adc616dcbe0e47c1e57d5238e32e84a3a7b5", + "bytes": 87116 + }, + { + "path": "tests/files/web/generated/M16-GAP-00168-operator-anim.channels_setting_enable.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00168-operator-anim.channels_setting_enable.blend", + "sha256": "7bc30ee108b1f7f9ec5422ac855b1467a8231336cfb67d47898ea6f27618aed6", + "bytes": 87113 + }, + { + "path": "tests/files/web/generated/M16-GAP-00169-operator-anim.channels_setting_toggle.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00169-operator-anim.channels_setting_toggle.blend", + "sha256": "f346c3480ca423d8174798cf97020fe0e6659d54c5c21fff1b5028b159143560", + "bytes": 87107 + }, + { + "path": "tests/files/web/generated/M16-GAP-00170-operator-anim.channels_ungroup.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00170-operator-anim.channels_ungroup.blend", + "sha256": "edc38bf325e129aa9dc1ff8f1563aef552eff06acb64d3f1dcd539277db18b6b", + "bytes": 87064 + }, + { + "path": "tests/files/web/generated/M16-GAP-00171-operator-anim.channels_view_selected.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00171-operator-anim.channels_view_selected.blend", + "sha256": "31ea53097e3624a267b733b2d07c768aaf588d72c87268b7e5980371dfcb57ae", + "bytes": 87134 + }, + { + "path": "tests/files/web/generated/M16-GAP-00172-operator-anim.clear_useless_actions.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00172-operator-anim.clear_useless_actions.blend", + "sha256": "f5467c45c551de275b2a97c813b82fc8cf2dd5ae4fe93a5a3f07dd22bd4a8b79", + "bytes": 87523 + }, + { + "path": "tests/files/web/generated/M16-GAP-00173-operator-anim.copy_driver_button.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00173-operator-anim.copy_driver_button.blend", + "sha256": "473f5f6ddb99f8244bb9218bf3bf9a5f7b9b6e23847bdd546c22427e904de84e", + "bytes": 86616 + }, + { + "path": "tests/files/web/generated/M16-GAP-00174-operator-anim.driver_button_add.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00174-operator-anim.driver_button_add.blend", + "sha256": "088331e435e3f43c0db5077f2fff300f381db761076ceaa922f21ec599041221", + "bytes": 86672 + }, + { + "path": "tests/files/web/generated/M16-GAP-00175-operator-anim.driver_button_edit.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00175-operator-anim.driver_button_edit.blend", + "sha256": "40ee0435bc330c7d1baa8d40150f2cc4f62ec4cfd195cce2e0e73ad006f7131a", + "bytes": 86619 + }, + { + "path": "tests/files/web/generated/M16-GAP-00176-operator-anim.driver_button_remove.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00176-operator-anim.driver_button_remove.blend", + "sha256": "292203abee32979f8fcc7568b78e66846d5d6280c194fcfa5c7be56170247012", + "bytes": 86464 + }, + { + "path": "tests/files/web/generated/M16-GAP-00177-operator-anim.end_frame_set.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00177-operator-anim.end_frame_set.blend", + "sha256": "b86b4daff038a40e597d1814a021c28fe6cb65e09fb7cfc9ee7bc59f665d9809", + "bytes": 85580 + }, + { + "path": "tests/files/web/generated/M16-GAP-00178-operator-anim.keyframe_clear_button.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00178-operator-anim.keyframe_clear_button.blend", + "sha256": "75aa5f056fc9afe3562ad101a7f3b8aacf93ad54fae06519b236b5fc345831b6", + "bytes": 86642 + }, + { + "path": "tests/files/web/generated/M16-GAP-00179-operator-anim.keyframe_clear_v3d.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00179-operator-anim.keyframe_clear_v3d.blend", + "sha256": "0e079b73025f3623872e92c1e961e012cbcfaff4a64b2c7741a2ff08c935afdd", + "bytes": 86603 + }, + { + "path": "tests/files/web/generated/M16-GAP-00180-operator-anim.keyframe_clear_vse.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00180-operator-anim.keyframe_clear_vse.blend", + "sha256": "e2ef76b206578af5a77919d7f9625ca76ec58bb0a5d9074f907ced31cdd96c4d", + "bytes": 86461 + }, + { + "path": "tests/files/web/generated/M16-GAP-00181-operator-anim.keyframe_delete.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00181-operator-anim.keyframe_delete.blend", + "sha256": "0d6d1e45f430c051e4ecaf1f799f4b7666fa8311e2abf188502cf9cdc0011855", + "bytes": 86782 + }, + { + "path": "tests/files/web/generated/M16-GAP-00182-operator-anim.keyframe_delete_button.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00182-operator-anim.keyframe_delete_button.blend", + "sha256": "8e62660db44872553a7f32f5965afe7811e69261425beba97e6e29cdd5575073", + "bytes": 86755 + }, + { + "path": "tests/files/web/generated/M16-GAP-00183-operator-anim.keyframe_delete_by_name.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00183-operator-anim.keyframe_delete_by_name.blend", + "sha256": "ea5a587aeeabd6692977d5a7660bf49bb7134d4fc81e8ff1a3fa9acd8a75026c", + "bytes": 86770 + }, + { + "path": "tests/files/web/generated/M16-GAP-00184-operator-anim.keyframe_delete_v3d.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00184-operator-anim.keyframe_delete_v3d.blend", + "sha256": "56cc035995506dfa6c68efced79708c11dc50a20ac3d0e7e9ee59fe29e741995", + "bytes": 86712 + }, + { + "path": "tests/files/web/generated/M16-GAP-00185-operator-anim.keyframe_delete_vse.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00185-operator-anim.keyframe_delete_vse.blend", + "sha256": "c01f342471fcae64138f95287363f0e801c4da96992aa4a3d8a4173b0ec0f464", + "bytes": 86629 + }, + { + "path": "tests/files/web/generated/M16-GAP-00186-operator-anim.keyframe_insert.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00186-operator-anim.keyframe_insert.blend", + "sha256": "582dfb8c8dfe6897937afa687d5ebfdb4aeb2e3ae7db73ed02cf6385745bbf70", + "bytes": 86814 + }, + { + "path": "tests/files/web/generated/M16-GAP-00187-operator-anim.keyframe_insert_button.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00187-operator-anim.keyframe_insert_button.blend", + "sha256": "5398394b340d509043a2e8130249dbbb0736fa540c833a303445c07c9f775e9a", + "bytes": 86812 + }, + { + "path": "tests/files/web/generated/M16-GAP-00188-operator-anim.keyframe_insert_by_name.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00188-operator-anim.keyframe_insert_by_name.blend", + "sha256": "b0be38528561fad722c52000ced9b4c44bff594d5fcf134ab89295ab8b97554d", + "bytes": 86813 + }, + { + "path": "tests/files/web/generated/M16-GAP-00189-operator-anim.keyframe_insert_menu.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00189-operator-anim.keyframe_insert_menu.blend", + "sha256": "8c34e11c10c2de3de7209006c87594db1a1df0b62a6f9b92dac45f2cb176a52f", + "bytes": 86801 + }, + { + "path": "tests/files/web/generated/M16-GAP-00190-operator-anim.keying_set_active_set.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00190-operator-anim.keying_set_active_set.blend", + "sha256": "54d342c6054339281d8d380e01eb64f038e4735626a69248de66fadee34fbcae", + "bytes": 86889 + }, + { + "path": "tests/files/web/generated/M16-GAP-00191-operator-anim.keying_set_add.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00191-operator-anim.keying_set_add.blend", + "sha256": "a87db22a399c85cb282baf65a58763df7656603df9571bc34cdece31ef439187", + "bytes": 86785 + }, + { + "path": "tests/files/web/generated/M16-GAP-00192-operator-anim.keying_set_export.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00192-operator-anim.keying_set_export.blend", + "sha256": "ff0342e9d493bc8b20d85acba9177c7115d77f5f515e1d70fc1caf056957c29f", + "bytes": 86891 + }, + { + "path": "tests/files/web/generated/M16-GAP-00193-operator-anim.keying_set_path_add.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00193-operator-anim.keying_set_path_add.blend", + "sha256": "4e14a61ca8cd86b528747d576aa89ff8dcd3c9d3b8f52625a46ff5b7594cc107", + "bytes": 86860 + }, + { + "path": "tests/files/web/generated/M16-GAP-00194-operator-anim.keying_set_path_remove.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00194-operator-anim.keying_set_path_remove.blend", + "sha256": "b1161cfd0ac095844825cb2fa19fcbe9819bce552d02535f2d32deef3c8cbb79", + "bytes": 86865 + }, + { + "path": "tests/files/web/generated/M16-GAP-00195-operator-anim.keying_set_remove.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00195-operator-anim.keying_set_remove.blend", + "sha256": "d4fa5993c2580e5521cf2ee66817c416f50de82f5ec4e32298e52db14fa0a9a9", + "bytes": 86811 + }, + { + "path": "tests/files/web/generated/M16-GAP-00196-operator-anim.keyingset_button_add.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00196-operator-anim.keyingset_button_add.blend", + "sha256": "2e49572a29dadcdfdae956f7e16bd465c5de06bf8ae94ebdc11da8b1821eb562", + "bytes": 86863 + }, + { + "path": "tests/files/web/generated/M16-GAP-00197-operator-anim.keyingset_button_remove.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00197-operator-anim.keyingset_button_remove.blend", + "sha256": "21b52146f8466fb9fd9ca9073d611b6052f7cbb89399b926d8db6e950883e61d", + "bytes": 86831 + }, + { + "path": "tests/files/web/generated/M16-GAP-00198-operator-anim.merge_animation.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00198-operator-anim.merge_animation.blend", + "sha256": "0c37b1290f08b1ad872efdf8a52c795d24778a1ecab516ea749ff2ae858bd2fb", + "bytes": 87247 + }, + { + "path": "tests/files/web/generated/M16-GAP-00199-operator-anim.paste_driver_button.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00199-operator-anim.paste_driver_button.blend", + "sha256": "971782396db424a9b427f7fb9d9d1495ddc572a2ae1bf7b7b8c3320f5d8d77d9", + "bytes": 86601 + }, + { + "path": "tests/files/web/generated/M16-GAP-00200-operator-anim.previewrange_clear.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00200-operator-anim.previewrange_clear.blend", + "sha256": "c9b586fb0a87f38c4fb1e4e1834805fda1345549ecdc558702080ea66af65a9e", + "bytes": 86336 + }, + { + "path": "tests/files/web/generated/M16-GAP-00201-operator-anim.previewrange_set.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00201-operator-anim.previewrange_set.blend", + "sha256": "91d61fe3989324a23db7dabbb178c7b0a963af155c117c57859a24e4c415945e", + "bytes": 86352 + }, + { + "path": "tests/files/web/generated/M16-GAP-00202-operator-anim.replace_action.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00202-operator-anim.replace_action.blend", + "sha256": "f29c88ecc031b1a56c68cea244417035bf8744db5baaab623627e6dab889f956", + "bytes": 87690 + }, + { + "path": "tests/files/web/generated/M16-GAP-00203-operator-anim.replace_action_new.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00203-operator-anim.replace_action_new.blend", + "sha256": "dd278ab743c34b61566c20e545b90e42bcfe641ecbb523550fcdacea188f12b4", + "bytes": 87267 + }, + { + "path": "tests/files/web/generated/M16-GAP-00204-operator-anim.scene_range_frame.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00204-operator-anim.scene_range_frame.blend", + "sha256": "aa332513c910b461ea53db9c6f8c6de2801c7b79bc84c083c366360aec2a36dd", + "bytes": 85932 + }, + { + "path": "tests/files/web/generated/M16-GAP-00205-operator-anim.separate_slots.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00205-operator-anim.separate_slots.blend", + "sha256": "55c92c2622d2b532060fae13fc9fc035b8d936f21ff766b6b49938632140fd82", + "bytes": 87353 + }, + { + "path": "tests/files/web/generated/M16-GAP-00206-operator-anim.slot_channels_move_to_new_action.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00206-operator-anim.slot_channels_move_to_new_action.blend", + "sha256": "4dddfa7e19686d28ea2e6918bb7221943ea26a4ba8831d7fef0736ee8fd52534", + "bytes": 87458 + }, + { + "path": "tests/files/web/generated/M16-GAP-00207-operator-anim.slot_new_for_id.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00207-operator-anim.slot_new_for_id.blend", + "sha256": "55feef5fa86ba311964057b6fa5b24b5362fa7c2fc9ab061736c4fec6927a532", + "bytes": 86860 + }, + { + "path": "tests/files/web/generated/M16-GAP-00208-operator-anim.slot_unassign_from_constraint.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00208-operator-anim.slot_unassign_from_constraint.blend", + "sha256": "517bba0bc6e4dfab4eeafc9d902de560b76360718789a06a6417d9e9f8be7df9", + "bytes": 86531 + }, + { + "path": "tests/files/web/generated/M16-GAP-00209-operator-anim.slot_unassign_from_id.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00209-operator-anim.slot_unassign_from_id.blend", + "sha256": "69fb5253dfd28f45ea25f29947d08afb4513e222105b4b8bc94a5b6be05b7238", + "bytes": 86803 + }, + { + "path": "tests/files/web/generated/M16-GAP-00210-operator-anim.slot_unassign_from_nla_strip.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00210-operator-anim.slot_unassign_from_nla_strip.blend", + "sha256": "4740a95b74bf2d4f71af7019158ee116643bf6cb315ff6a31717fb6894c3f2e5", + "bytes": 86885 + }, + { + "path": "tests/files/web/generated/M16-GAP-00211-operator-anim.start_frame_set.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00211-operator-anim.start_frame_set.blend", + "sha256": "d2f5cf3f5c3603b0d811c9df3581c10b5c28e3f80adeb30319b079bd95567a36", + "bytes": 85586 + }, + { + "path": "tests/files/web/generated/M16-GAP-00212-operator-anim.update_animated_transform_constraints.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00212-operator-anim.update_animated_transform_constraints.blend", + "sha256": "116684a811bdc591c554c5a8f259d995ca9ba49b102e8ccb79f1a03741fd28f2", + "bytes": 86923 + }, + { + "path": "tests/files/web/generated/M16-GAP-00213-operator-anim.version_bone_hide_property.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00213-operator-anim.version_bone_hide_property.blend", + "sha256": "5455d4f3f44ccc40db7ac379d5c6d4bbb099c3861a348237a1541697597956c1", + "bytes": 86812 + }, + { + "path": "tests/files/web/generated/M16-GAP-00214-operator-anim.view_curve_in_graph_editor.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00214-operator-anim.view_curve_in_graph_editor.blend", + "sha256": "405825a29d3bf69cd85e461bf0c1a727631febe354b11ed1fd722d72f0faaea2", + "bytes": 87074 + }, + { + "path": "tests/files/web/generated/M16-GAP-00215-operator-armature.align.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00215-operator-armature.align.blend", + "sha256": "772ad751d2ad898214e27469c451ab44ce0463bb99271b160b70f57941e9b419", + "bytes": 86317 + }, + { + "path": "tests/files/web/generated/M16-GAP-00216-operator-armature.assign_to_collection.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00216-operator-armature.assign_to_collection.blend", + "sha256": "be79a2c05b090aaf1e7ce9f777a6adea68b5fb6b7750ffe130eebf2ab4608b43", + "bytes": 86423 + }, + { + "path": "tests/files/web/generated/M16-GAP-00217-operator-armature.autoside_names.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00217-operator-armature.autoside_names.blend", + "sha256": "9dafd4489858ab080988c474877d6e9a9e5a7884b8e00d42c070b7769d2ed57f", + "bytes": 86309 + }, + { + "path": "tests/files/web/generated/M16-GAP-00218-operator-armature.bone_primitive_add.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00218-operator-armature.bone_primitive_add.blend", + "sha256": "b6857f1212fd591bc78dea3451ee38da3547a3415c32637f974c8187bfd28f73", + "bytes": 86250 + }, + { + "path": "tests/files/web/generated/M16-GAP-00219-operator-armature.calculate_roll.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00219-operator-armature.calculate_roll.blend", + "sha256": "7c6f851456147c2e69de3ddf1136885ccff9bd907cd480a5af5fd81f5769c862", + "bytes": 86240 + }, + { + "path": "tests/files/web/generated/M16-GAP-00220-operator-armature.click_extrude.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00220-operator-armature.click_extrude.blend", + "sha256": "7b9ded05ba9a6bb02b729ef474ec3f37a67f41fa0e8da53c7e3c58a56b64e065", + "bytes": 86415 + }, + { + "path": "tests/files/web/generated/M16-GAP-00221-operator-armature.collection_add.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00221-operator-armature.collection_add.blend", + "sha256": "a081193e2c16de9c072b0b7cc57f9d7b5f3f12863fcb2f06e16641cebdcf0b34", + "bytes": 86279 + }, + { + "path": "tests/files/web/generated/M16-GAP-00222-operator-armature.collection_assign.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00222-operator-armature.collection_assign.blend", + "sha256": "c742316be6dbd00fe3d5caf804b41067839a344a0725fe3c3aa78d1ebc024b8a", + "bytes": 86283 + }, + { + "path": "tests/files/web/generated/M16-GAP-00223-operator-armature.collection_create_and_assign.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00223-operator-armature.collection_create_and_assign.blend", + "sha256": "a028eb51fe9f4e81778cd5e237820c050c88588266cb39cd2a0fb4b15d33c8c8", + "bytes": 86294 + }, + { + "path": "tests/files/web/generated/M16-GAP-00224-operator-armature.collection_deselect.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00224-operator-armature.collection_deselect.blend", + "sha256": "1a8405355bb6fda930f31f396f9e34ec97c95ceed4b639fce9522c1e82f73b7f", + "bytes": 86420 + }, + { + "path": "tests/files/web/generated/M16-GAP-00225-operator-armature.collection_move.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00225-operator-armature.collection_move.blend", + "sha256": "ae87b298fce55732961119fd8a36568c137023eed9002c26a9575578d3d983b5", + "bytes": 86467 + }, + { + "path": "tests/files/web/generated/M16-GAP-00226-operator-armature.collection_remove.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00226-operator-armature.collection_remove.blend", + "sha256": "1e3ba5e46b8b45ca974b93b0f357cc5305c787032564ecbecfc9e1ae4e8ff9d5", + "bytes": 86430 + }, + { + "path": "tests/files/web/generated/M16-GAP-00227-operator-armature.collection_remove_unused.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00227-operator-armature.collection_remove_unused.blend", + "sha256": "0c898c98dc011e51f086cda66e3af03a08a7b1f27eb0e76f40915f18018a6d97", + "bytes": 86356 + }, + { + "path": "tests/files/web/generated/M16-GAP-00228-operator-armature.collection_select.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00228-operator-armature.collection_select.blend", + "sha256": "426b86f668d316254e06ff11f6fe59cd79d99216772573d17b2b74187d3ea6ea", + "bytes": 86518 + }, + { + "path": "tests/files/web/generated/M16-GAP-00229-operator-armature.collection_show_all.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00229-operator-armature.collection_show_all.blend", + "sha256": "b50107f0d15d2f0be497ea8f69385411f8354d04b1907e7e6382600d5e885795", + "bytes": 86447 + }, + { + "path": "tests/files/web/generated/M16-GAP-00230-operator-armature.collection_unassign.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00230-operator-armature.collection_unassign.blend", + "sha256": "b1f942b4b3eb548ce6a4ebeb62fb295cea9ce038ef69a34d60d7c54a9c2c8882", + "bytes": 86283 + }, + { + "path": "tests/files/web/generated/M16-GAP-00231-operator-armature.collection_unassign_named.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00231-operator-armature.collection_unassign_named.blend", + "sha256": "452747b1003c527ffa6538c8d0aa48957968f57d8b8d61451c3a43c59f88abb8", + "bytes": 86292 + }, + { + "path": "tests/files/web/generated/M16-GAP-00232-operator-armature.collection_unsolo_all.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00232-operator-armature.collection_unsolo_all.blend", + "sha256": "be849eaac644443d8db0318d176767a3f861ee0309b69aff2a130decbf56b21c", + "bytes": 86446 + }, + { + "path": "tests/files/web/generated/M16-GAP-00233-operator-armature.copy_bone_color_to_selected.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00233-operator-armature.copy_bone_color_to_selected.blend", + "sha256": "d5ab14cabded3332b4c882c1eaee7f9966a41155d2623bc73f88917d0639634a", + "bytes": 86391 + }, + { + "path": "tests/files/web/generated/M16-GAP-00234-operator-armature.delete.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00234-operator-armature.delete.blend", + "sha256": "52c3c28c6cba72d0b40c32bc46b4d5894482f05b2ee621e44efde6999008556e", + "bytes": 86269 + }, + { + "path": "tests/files/web/generated/M16-GAP-00235-operator-armature.dissolve.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00235-operator-armature.dissolve.blend", + "sha256": "951ea935f05ed06ced6ea61d4a9293e7dd3226902ea6ae3c0c466779dcbcf24b", + "bytes": 86289 + }, + { + "path": "tests/files/web/generated/M16-GAP-00236-operator-armature.duplicate.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00236-operator-armature.duplicate.blend", + "sha256": "fb0ddc4b599f05941c6d719be3eab14f354755017f574ca9e6984369474b42a8", + "bytes": 86362 + }, + { + "path": "tests/files/web/generated/M16-GAP-00237-operator-armature.duplicate_move.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00237-operator-armature.duplicate_move.blend", + "sha256": "18332d833556dc395719a7badd2c2fe0f5630fa1f9b809399ae0ebb4edf47f19", + "bytes": 86393 + }, + { + "path": "tests/files/web/generated/M16-GAP-00238-operator-armature.duplicate_rename.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00238-operator-armature.duplicate_rename.blend", + "sha256": "95b9236be44ca3e40482203032ce2fe14a8ba79f5d94396d9fa7af2ab5b711d1", + "bytes": 86313 + }, + { + "path": "tests/files/web/generated/M16-GAP-00239-operator-armature.extrude.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00239-operator-armature.extrude.blend", + "sha256": "f4b86c585af6349dc43c50e23c93a482917145ba0b5bbd9ab3f8a7cf5018e661", + "bytes": 86358 + }, + { + "path": "tests/files/web/generated/M16-GAP-00240-operator-armature.extrude_forked.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00240-operator-armature.extrude_forked.blend", + "sha256": "bf0a7def9d8ff9c30218d5f11a23f533b777bfb02e35b1bf87f0c9a285af637f", + "bytes": 86397 + }, + { + "path": "tests/files/web/generated/M16-GAP-00241-operator-armature.extrude_move.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00241-operator-armature.extrude_move.blend", + "sha256": "3959f29bfef358c9a7f10720605b9706bf03830f18ae713e4409b6396b3ea18c", + "bytes": 86364 + }, + { + "path": "tests/files/web/generated/M16-GAP-00242-operator-armature.fill.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00242-operator-armature.fill.blend", + "sha256": "b7f20bcc4f7a6045bc38fdec9394872e399a55f3de9e4081b40dde3b911d770d", + "bytes": 86429 + }, + { + "path": "tests/files/web/generated/M16-GAP-00243-operator-armature.flip_names.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00243-operator-armature.flip_names.blend", + "sha256": "b21a9ececf220be55c9d17d99c7fcbb0fe43b2fea6ffac88eb4eb34be1ebb5ba", + "bytes": 86395 + }, + { + "path": "tests/files/web/generated/M16-GAP-00244-operator-armature.hide.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00244-operator-armature.hide.blend", + "sha256": "1a3486ca531e5f679886228539fc841d5afc7c9eb7315fb0d5f31061d5f26aa4", + "bytes": 86303 + }, + { + "path": "tests/files/web/generated/M16-GAP-00245-operator-armature.move_to_collection.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00245-operator-armature.move_to_collection.blend", + "sha256": "81ce010acf7df4374101651e498eb1ef4fdbd31aa79e395fcab17667cea2d6ad", + "bytes": 86400 + }, + { + "path": "tests/files/web/generated/M16-GAP-00246-operator-armature.parent_clear.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00246-operator-armature.parent_clear.blend", + "sha256": "c6b8c2871a84389b732ff63c320e1e6543e832f69a89aa7af8cd0049fbee82f2", + "bytes": 86343 + }, + { + "path": "tests/files/web/generated/M16-GAP-00247-operator-armature.parent_set.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00247-operator-armature.parent_set.blend", + "sha256": "227b3294c94147755638a6542955fd7a57ad2a6e6a7464bed2509eb7a5ab6b19", + "bytes": 86366 + }, + { + "path": "tests/files/web/generated/M16-GAP-00248-operator-armature.reveal.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00248-operator-armature.reveal.blend", + "sha256": "5f1ee7176f2d030247abb278a66f79cc6b7fc49fd6650b2dba7cc349e2b0aedb", + "bytes": 86308 + }, + { + "path": "tests/files/web/generated/M16-GAP-00249-operator-armature.roll_clear.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00249-operator-armature.roll_clear.blend", + "sha256": "74c3bebdac81def2d5dad922854b06c1c0b112154605a955628754bf5eb3cef7", + "bytes": 86204 + }, + { + "path": "tests/files/web/generated/M16-GAP-00250-operator-armature.select_all.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00250-operator-armature.select_all.blend", + "sha256": "5a271a11ec041966bbdb02724d632b1a1ec4db2207038fdbf3fffbd8c3d6de8d", + "bytes": 86286 + }, + { + "path": "tests/files/web/generated/M16-GAP-00251-operator-armature.select_hierarchy.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00251-operator-armature.select_hierarchy.blend", + "sha256": "527167dc4d5c40e18196b8b63818373494bf28efd9592ce1ee28b790aecad9c4", + "bytes": 86367 + }, + { + "path": "tests/files/web/generated/M16-GAP-00252-operator-armature.select_less.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00252-operator-armature.select_less.blend", + "sha256": "6c10d6a2bfb01565d415740efcb5366433cf1ddc722392605530769e6a8f729b", + "bytes": 86377 + }, + { + "path": "tests/files/web/generated/M16-GAP-00253-operator-armature.select_linked.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00253-operator-armature.select_linked.blend", + "sha256": "dfc4b49ad0c1165e771368b99c7cf589890586ea4f6b142aa319a42ad9390316", + "bytes": 86468 + }, + { + "path": "tests/files/web/generated/M16-GAP-00254-operator-armature.select_linked_pick.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00254-operator-armature.select_linked_pick.blend", + "sha256": "10e4053f9aea2a2cad6314e3ab4d981db9bc4281933c1172ad77247f4c6500fd", + "bytes": 86478 + }, + { + "path": "tests/files/web/generated/M16-GAP-00255-operator-armature.select_mirror.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00255-operator-armature.select_mirror.blend", + "sha256": "af187a9ffb0c6b8f422fd0da0896699dcde8209c8d5d6fbf807ba72cc4a64abb", + "bytes": 86324 + }, + { + "path": "tests/files/web/generated/M16-GAP-00256-operator-armature.select_more.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00256-operator-armature.select_more.blend", + "sha256": "7acc23a6cf8bf14d13c3e1571106d62e3ddf8fcfd6af910009da833672ec6242", + "bytes": 86474 + }, + { + "path": "tests/files/web/generated/M16-GAP-00257-operator-armature.select_similar.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00257-operator-armature.select_similar.blend", + "sha256": "72ed76cd6970d683de6c528a653e8279bdeec13f8f1a4a2e8bc9c8b2f63cf94b", + "bytes": 86368 + }, + { + "path": "tests/files/web/generated/M16-GAP-00258-operator-armature.separate.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00258-operator-armature.separate.blend", + "sha256": "e995623dfaf3e5a34b4843beb5291f82144501d7a6f0b53a4ffada844440d269", + "bytes": 86391 + }, + { + "path": "tests/files/web/generated/M16-GAP-00259-operator-armature.shortest_path_pick.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00259-operator-armature.shortest_path_pick.blend", + "sha256": "3b213642cef60cdc96fed3e14846125b06ca80b53d89fdb3a08c3c60f7a454c6", + "bytes": 86467 + }, + { + "path": "tests/files/web/generated/M16-GAP-00260-operator-armature.split.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00260-operator-armature.split.blend", + "sha256": "e5e2497024c8f9738caa5badff72f38130c061a2b27cfc610780bf0a97992b9d", + "bytes": 86342 + }, + { + "path": "tests/files/web/generated/M16-GAP-00261-operator-armature.subdivide.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00261-operator-armature.subdivide.blend", + "sha256": "b29bcbddbc05f2ec1443699a9348abcbe52531f2fea5b03e51286ddb8305c2c4", + "bytes": 86372 + }, + { + "path": "tests/files/web/generated/M16-GAP-00262-operator-armature.switch_direction.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00262-operator-armature.switch_direction.blend", + "sha256": "385ebcd486385b6b68a7c7294e111af2b0f4d334247ff3e933f2c1433321cd17", + "bytes": 86409 + }, + { + "path": "tests/files/web/generated/M16-GAP-00263-operator-armature.symmetrize.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00263-operator-armature.symmetrize.blend", + "sha256": "fa490213eee2cd604d52d435cf446cdaa37ef882602147893c9f9f999cd43f2b", + "bytes": 86394 + }, + { + "path": "tests/files/web/generated/M16-GAP-00264-operator-asset.asset_download.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00264-operator-asset.asset_download.blend", + "sha256": "79332080394950857a3b99087140aba51df6ad2fd731e314af67c473a48602b4", + "bytes": 85874 + }, + { + "path": "tests/files/web/generated/M16-GAP-00265-operator-asset.assets_download.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00265-operator-asset.assets_download.blend", + "sha256": "d2c09f34febbef1db3de830c37c33c1f7de8d6fc7ea1ef2aaf9eed7de243bb27", + "bytes": 85879 + }, + { + "path": "tests/files/web/generated/M16-GAP-00266-operator-asset.assign_action.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00266-operator-asset.assign_action.blend", + "sha256": "6cefa4e22e0e8d5b2482cbe62c36e10cc58f51fa94fe843e6b953c438479fa98", + "bytes": 86324 + }, + { + "path": "tests/files/web/generated/M16-GAP-00267-operator-asset.browse_containing_blend_file.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00267-operator-asset.browse_containing_blend_file.blend", + "sha256": "29e5e42f3ebe458a4ded1d1a7a0a1cd0fecb50867b193ee3ec98485df36e7d61", + "bytes": 85938 + }, + { + "path": "tests/files/web/generated/M16-GAP-00268-operator-asset.bundle_install.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00268-operator-asset.bundle_install.blend", + "sha256": "64dd97ac23f70c83261635fc2337555b62818b92ffedee60cb13f3335851a994", + "bytes": 85884 + }, + { + "path": "tests/files/web/generated/M16-GAP-00269-operator-asset.catalog_delete.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00269-operator-asset.catalog_delete.blend", + "sha256": "7fa8ebaf85c2bd474dcaa9e4ce94ad81665b501841d15c48e371bb8f033702a2", + "bytes": 85903 + }, + { + "path": "tests/files/web/generated/M16-GAP-00270-operator-asset.catalog_new.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00270-operator-asset.catalog_new.blend", + "sha256": "8c874d8ec51cb7cbfa787780ca7c8e636ce9a98b4998ef81ddbd9fdd34658662", + "bytes": 85912 + }, + { + "path": "tests/files/web/generated/M16-GAP-00271-operator-asset.catalog_redo.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00271-operator-asset.catalog_redo.blend", + "sha256": "2e3481a9f155900774bbcc3e5d07ca65bedc2029e3281e86857fd943e81396cd", + "bytes": 85877 + }, + { + "path": "tests/files/web/generated/M16-GAP-00272-operator-asset.catalog_undo.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00272-operator-asset.catalog_undo.blend", + "sha256": "fa003b726f82cf42dfbd5ae027ad6b6c8ff03bdcc337154d835cae241a1265cd", + "bytes": 85892 + }, + { + "path": "tests/files/web/generated/M16-GAP-00273-operator-asset.catalog_undo_push.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00273-operator-asset.catalog_undo_push.blend", + "sha256": "f835a3088b975a283a99a69738dbf0ecc8a71b463b3c124da15ea6e54599256b", + "bytes": 85934 + }, + { + "path": "tests/files/web/generated/M16-GAP-00274-operator-asset.catalogs_save.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/M16-GAP-00274-operator-asset.catalogs_save.blend", + "sha256": "7b8be4b5cc90415b7295fcd2ceb560761b6e0df2b17aff0e62a339c7e43dbab3", + "bytes": 85904 + }, + { + "path": "tests/files/web/generated/WebGapBrowseContaining.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapBrowseContaining.blend", + "sha256": "661f398dd346bc18484308b154845ca5d7d82af9e9e367767c2c1ef20f3fd369", + "bytes": 86346 + }, + { + "path": "tests/files/web/generated/WebGapBundleInstall.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapBundleInstall.blend", + "sha256": "89537577e6e5939da73f37fb22d40ec336a30e7ad491043b4054b0b14e4418fe", + "bytes": 86339 + }, + { + "path": "tests/files/web/generated/WebGapCatalogDelete.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapCatalogDelete.blend", + "sha256": "137a558e0ac46a6b9c466b1023a871adb6666ec0de0f9756e041ce8858ed374d", + "bytes": 86329 + }, + { + "path": "tests/files/web/generated/WebGapCatalogNew.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapCatalogNew.blend", + "sha256": "a12a6480d7254d290d0617e16f72c93ef4cbd043ebc004f94559436988a66ef2", + "bytes": 86327 + }, + { + "path": "tests/files/web/generated/WebGapCatalogRedo.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapCatalogRedo.blend", + "sha256": "53367b4765383ae0cf232e02eaca1fbf07407946a600c91cf8d1f5303e21d0c7", + "bytes": 86321 + }, + { + "path": "tests/files/web/generated/WebGapCatalogUndo.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapCatalogUndo.blend", + "sha256": "2ee954737c6f35b5f9af2eb5f350ea3e34a9ff6f491b8a4184ccb18875c6f3b8", + "bytes": 86329 + }, + { + "path": "tests/files/web/generated/WebGapCatalogUndoPush.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapCatalogUndoPush.blend", + "sha256": "448fdabd5281e25a949ceefdb0b76804f2a47d2d9e5b784f8f998f0be289fd4c", + "bytes": 86343 + }, + { + "path": "tests/files/web/generated/WebGapCatalogsSave.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapCatalogsSave.blend", + "sha256": "1036247ac5432b6d9f30bde8c080d470248ce2e840e5bdf7de7f08a64838204e", + "bytes": 86337 + }, + { + "path": "tests/files/web/generated/WebGapLibrary.blend", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/files/web/generated/WebGapLibrary.blend", + "sha256": "1fe24e423713bc18dc936e723e97f7c306db4aa62cc24736055eb2d341375088", + "bytes": 86339 + }, + { + "path": "tests/golden/M15-03A/next-task-plan.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M15-03A/next-task-plan.json", + "sha256": "2235d0d250d28e63ab1c9b0e956292560785cf340c612312b316be0ceb2463a9", + "bytes": 7095269 + }, + { + "path": "tests/golden/M15-03E/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M15-03E/manifest.json", + "sha256": "8c81caa2e601aba51381d72c5a5f35e0dd5561458946c1c4795e9e055eec3474", + "bytes": 1048 + }, + { + "path": "tests/golden/M16-GAP-00001/action-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00001/action-desktop-report.json", + "sha256": "f6bea0003a9e8eb25048797156bc0ab59b6a63d76ce4156283b6d9761dbfb0ee", + "bytes": 714 + }, + { + "path": "tests/golden/M16-GAP-00001/action-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00001/action-local-exact-report.json", + "sha256": "eb7a604af8b071c3186a39a30f3a9974a6fed03008751da5319d54d170b841d6", + "bytes": 735 + }, + { + "path": "tests/golden/M16-GAP-00001/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00001/manifest.json", + "sha256": "ef0a497b61ee95fae55be76ab9dbbc047aeb7619bb161c0711319f4288f5d170", + "bytes": 1641 + }, + { + "path": "tests/golden/M16-GAP-00002/armature-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00002/armature-desktop-report.json", + "sha256": "970538d481dd9b2169c5e39e6901e6eeff0d9b2d26b42491837321841bcb4a5e", + "bytes": 853 + }, + { + "path": "tests/golden/M16-GAP-00002/armature-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00002/armature-local-exact-report.json", + "sha256": "eeb775648b186a9728851b8cffa0fa9c41701de4a8142e73f6ad98ef050dc877", + "bytes": 720 + }, + { + "path": "tests/golden/M16-GAP-00002/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00002/manifest.json", + "sha256": "b8705243e00f62deb82644976838e197d84e72edb8113439efacfd95d4da4188", + "bytes": 1663 + }, + { + "path": "tests/golden/M16-GAP-00003/brush-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00003/brush-desktop-report.json", + "sha256": "ca992c23e2c302ef0b85b91305eabdbf71da6b5bc60c49b71710d145d0787e09", + "bytes": 518 + }, + { + "path": "tests/golden/M16-GAP-00003/brush-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00003/brush-local-exact-report.json", + "sha256": "e48dcad3974b94404d5d9f0c7222b6c45ea5f3b7a467ea2b88691a6ff50e22a6", + "bytes": 712 + }, + { + "path": "tests/golden/M16-GAP-00003/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00003/manifest.json", + "sha256": "789282e4c913c77d8805490a132b26026f8d4a650539c1378f2dba546d4fcba1", + "bytes": 2328 + }, + { + "path": "tests/golden/M16-GAP-00004/camera-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00004/camera-desktop-report.json", + "sha256": "b11254b3e0cdeb5e5c39e350ea1d349f5e2991f8c62a5ad28f744c391beab3b5", + "bytes": 511 + }, + { + "path": "tests/golden/M16-GAP-00004/camera-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00004/camera-local-exact-report.json", + "sha256": "a2b2c321efbcf2ed765f2e8b1019fef7e2cd34af872f78474d18594c6cee5d1c", + "bytes": 656 + }, + { + "path": "tests/golden/M16-GAP-00004/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00004/manifest.json", + "sha256": "905c8f507a7c2e3c43a6d3c99a873124e1dc0aa1647e09a0b66f7e6a77462add", + "bytes": 1846 + }, + { + "path": "tests/golden/M16-GAP-00005/collection-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00005/collection-desktop-report.json", + "sha256": "6e6bcf8e5575d46c324d51409d19be6f89e5397b1f094f528b164ea72c607887", + "bytes": 629 + }, + { + "path": "tests/golden/M16-GAP-00005/collection-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00005/collection-local-exact-report.json", + "sha256": "2db40433007886b24f5ceb18dccf7470e0c393163838a11f2feb48bab516d740", + "bytes": 855 + }, + { + "path": "tests/golden/M16-GAP-00005/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00005/manifest.json", + "sha256": "581d3757a300c6dea5f8a989932f2787915c30ef84de8494a20fd65d2058551a", + "bytes": 1706 + }, + { + "path": "tests/golden/M16-GAP-00006/curve-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00006/curve-desktop-report.json", + "sha256": "85e8eee37daea993653bfa1785f5df19f953c2d013543e8a27743ed74d49d4ff", + "bytes": 741 + }, + { + "path": "tests/golden/M16-GAP-00006/curve-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00006/curve-local-exact-report.json", + "sha256": "048c9fb9116ab2a1b4460c74696340a263cd342ba4886ce56f8b03bef8743e58", + "bytes": 605 + }, + { + "path": "tests/golden/M16-GAP-00006/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00006/manifest.json", + "sha256": "d17d368089b84c23ce4cc4016f61cc3bf0ea86ade968045a7a8dc6a3063394f0", + "bytes": 1840 + }, + { + "path": "tests/golden/M16-GAP-00007/curves-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00007/curves-desktop-report.json", + "sha256": "db15e64bfe202720b463ab742cbed2e6ec80b872456b825078afbba7a2540531", + "bytes": 444 + }, + { + "path": "tests/golden/M16-GAP-00007/curves-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00007/curves-local-exact-report.json", + "sha256": "bf093708e23b8318e1f50b925b5c033d66aa8c1f97303174ad2489a82191705f", + "bytes": 568 + }, + { + "path": "tests/golden/M16-GAP-00007/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00007/manifest.json", + "sha256": "0c115415e196995788045b412c37da40af5cac0f2200efc124515d730b63af14", + "bytes": 1846 + }, + { + "path": "tests/golden/M16-GAP-00008/freestyle-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00008/freestyle-desktop-report.json", + "sha256": "2c42936cd8e4046b752f7e86949927769d1cb8f2086a2c9ba27eebf61a6f4a89", + "bytes": 670 + }, + { + "path": "tests/golden/M16-GAP-00008/freestyle-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00008/freestyle-local-exact-report.json", + "sha256": "ab75a7fdfa71a4abd4a5e97f7e726440bde7891163c0b256be0815e1cc51a99a", + "bytes": 685 + }, + { + "path": "tests/golden/M16-GAP-00008/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00008/manifest.json", + "sha256": "3b4c0eb24867cef0054cffb31d1e3320379dbf70e13e8920eaa08da6ace06c89", + "bytes": 2221 + }, + { + "path": "tests/golden/M16-GAP-00009/grease-pencil-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00009/grease-pencil-desktop-report.json", + "sha256": "6a1145d7447a08f51d751dca797e67f2be7eb12cba052a726c4c2f8ee28b585e", + "bytes": 531 + }, + { + "path": "tests/golden/M16-GAP-00009/grease-pencil-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00009/grease-pencil-local-exact-report.json", + "sha256": "94aaf84cc072ef13998517d610740d81d94c14593ba776ea7f4b88c673a0a71f", + "bytes": 584 + }, + { + "path": "tests/golden/M16-GAP-00009/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00009/manifest.json", + "sha256": "c242975eccdcb4c516dfae17763f9a15b9db29b856bd9f845e9eceb429e8ce69", + "bytes": 1546 + }, + { + "path": "tests/golden/M16-GAP-00010/lattice-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00010/lattice-desktop-report.json", + "sha256": "bb8effdcf18a89794914d88311a598b3285e64f18c402c9cff477ae5700ba089", + "bytes": 2496 + }, + { + "path": "tests/golden/M16-GAP-00010/lattice-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00010/lattice-local-exact-report.json", + "sha256": "489c9d25a6e4164860f5528944eca0e173f8a7e4130e89404b6fa09da9b469a0", + "bytes": 810 + }, + { + "path": "tests/golden/M16-GAP-00010/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00010/manifest.json", + "sha256": "cb3be7f0917ca95d831ffabaa11470eb528ce3fe5eda1ba1e3f7925ea2288737", + "bytes": 2188 + }, + { + "path": "tests/golden/M16-GAP-00011/library-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00011/library-desktop-report.json", + "sha256": "0bc9032490f2450e99d30fd67fe95b164f8d359ca042d0e0b772ee1a28e39dbd", + "bytes": 564 + }, + { + "path": "tests/golden/M16-GAP-00011/library-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00011/library-local-exact-report.json", + "sha256": "82c3a7ebb204da9dd8f817f0378374be062993892a4405d01f81c960677f45bf", + "bytes": 750 + }, + { + "path": "tests/golden/M16-GAP-00011/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00011/manifest.json", + "sha256": "a29ac9278d37d187f5e421f365a71fb3d18a8aeb74cfe4ae733f8510a43446de", + "bytes": 2364 + }, + { + "path": "tests/golden/M16-GAP-00012/light-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00012/light-desktop-report.json", + "sha256": "92bd381ec7b8242de6379d9e266ebbb63bd34c2d28e852d2ac7610eb7e67b8d3", + "bytes": 808 + }, + { + "path": "tests/golden/M16-GAP-00012/light-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00012/light-local-exact-report.json", + "sha256": "103958f99cc13fccef7acb4128f3707e48580c8ad86813821a2ce40986c5a964", + "bytes": 834 + }, + { + "path": "tests/golden/M16-GAP-00012/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00012/manifest.json", + "sha256": "c71a0d9e23d13bf51a190c99f16e4e7e98da1f12cba50f2404bef8fcb6e94d4c", + "bytes": 2178 + }, + { + "path": "tests/golden/M16-GAP-00013/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00013/manifest.json", + "sha256": "47663ad9012f36f2947f3ac8dc0d628f8f5bc338809686692e92dd59ca46c591", + "bytes": 2193 + }, + { + "path": "tests/golden/M16-GAP-00013/material-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00013/material-desktop-report.json", + "sha256": "7adfdd70f9b116268301e0bb6cf7e0b88cf8eb2ab20d25c944586df3a9cc000c", + "bytes": 923 + }, + { + "path": "tests/golden/M16-GAP-00013/material-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00013/material-local-exact-report.json", + "sha256": "229f3fc85518da4539e311e6ca70fd6b156cdcc9ae4c4b901e0de5c895b3d333", + "bytes": 771 + }, + { + "path": "tests/golden/M16-GAP-00014/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00014/manifest.json", + "sha256": "97e0da40860f7095157068fd4545d7cd9c25ba94a68d56ab87e32b6fd032b655", + "bytes": 2173 + }, + { + "path": "tests/golden/M16-GAP-00014/mesh-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00014/mesh-desktop-report.json", + "sha256": "e26f0333707fa915b7261f305af413340f9edb26d050a82fb3c6afac12ee2169", + "bytes": 920 + }, + { + "path": "tests/golden/M16-GAP-00014/mesh-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00014/mesh-local-exact-report.json", + "sha256": "36066f715b9993f0e789e12a0d29f9c0c9e79e0b5ff5914268e839fa648cb28a", + "bytes": 704 + }, + { + "path": "tests/golden/M16-GAP-00015/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00015/manifest.json", + "sha256": "641d43e8184dd710fb5dc5a7278e943c3f8bc70287abda6f5cb5afc5a56bbb7c", + "bytes": 2193 + }, + { + "path": "tests/golden/M16-GAP-00015/metaball-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00015/metaball-desktop-report.json", + "sha256": "5b2b7d79397675792bf54b568646a1714f75fab355049e7227f634403345c74c", + "bytes": 931 + }, + { + "path": "tests/golden/M16-GAP-00015/metaball-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00015/metaball-local-exact-report.json", + "sha256": "7253a7de7d2aad035ef38cceee33c0bd04ca743f181f28ac740e09799684a636", + "bytes": 748 + }, + { + "path": "tests/golden/M16-GAP-00016/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00016/manifest.json", + "sha256": "8d66f1e936cb08b6991465c795c12e7fa65ac0b9ae166eceec5aada32162fb10", + "bytes": 2193 + }, + { + "path": "tests/golden/M16-GAP-00016/nodetree-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00016/nodetree-desktop-report.json", + "sha256": "b1a6608a41fdbbaeb670dfc0222fbef3b6b73e3728add751564194dda1eb2924", + "bytes": 946 + }, + { + "path": "tests/golden/M16-GAP-00016/nodetree-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00016/nodetree-local-exact-report.json", + "sha256": "8df89df7ef013b8eed71c19e748eff6b7288772a10f139306a87cb2431eb26b3", + "bytes": 779 + }, + { + "path": "tests/golden/M16-GAP-00017/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00017/manifest.json", + "sha256": "f6e791e0e3df1e13ed6e85fa007c2d88b3aea9bd56e85d345a80e2cc6a5e01d3", + "bytes": 2183 + }, + { + "path": "tests/golden/M16-GAP-00017/object-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00017/object-desktop-report.json", + "sha256": "6c9b16af1d114b00df2711b095778eef239c27b55588063d68872434f08631fd", + "bytes": 700 + }, + { + "path": "tests/golden/M16-GAP-00017/object-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00017/object-local-exact-report.json", + "sha256": "38fbe19a794e05d1a05c0df5de7fca919c229c179ac59c452df08cc0c827ca91", + "bytes": 765 + }, + { + "path": "tests/golden/M16-GAP-00018/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00018/manifest.json", + "sha256": "4713266b567a14e1b9a7c2cffeb7806e054742b83684e82bfa592a0b900c5533", + "bytes": 2416 + }, + { + "path": "tests/golden/M16-GAP-00018/particle-settings-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00018/particle-settings-desktop-report.json", + "sha256": "5d1c855ee65c7dc8f715341ed0a2b1269aa1a2f6e3ecde5ca590f393af3042eb", + "bytes": 697 + }, + { + "path": "tests/golden/M16-GAP-00018/particle-settings-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00018/particle-settings-local-exact-report.json", + "sha256": "fb3eb8a193cbbf8ee8b98457042d560977e309ba1496903abf638e93c7641b6f", + "bytes": 927 + }, + { + "path": "tests/golden/M16-GAP-00019/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00019/manifest.json", + "sha256": "cbd811536b02f195f1370a85fd2c13788effe1fb11375776c118390a761c9f28", + "bytes": 2006 + }, + { + "path": "tests/golden/M16-GAP-00019/pointcloud-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00019/pointcloud-desktop-report.json", + "sha256": "c3c874f8f5e95c97f2862d6b2c4711ac78a90f3a5de289bfdb9a5ae0459dc1d7", + "bytes": 711 + }, + { + "path": "tests/golden/M16-GAP-00019/pointcloud-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00019/pointcloud-local-exact-report.json", + "sha256": "e304b3dd36b08a43307f1dc2a70a14cb6b29214d324b18faf8d8225f7342b23d", + "bytes": 880 + }, + { + "path": "tests/golden/M16-GAP-00020/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00020/manifest.json", + "sha256": "4cd3a4de64fbb95386f17e096a50622c3f56380635881e2539c10d65db820b1f", + "bytes": 1980 + }, + { + "path": "tests/golden/M16-GAP-00020/scene-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00020/scene-desktop-report.json", + "sha256": "fc9fdf2a37f36327e7456d3c17dcfd240b67ce27d9d2f0861fde5db237b2675d", + "bytes": 614 + }, + { + "path": "tests/golden/M16-GAP-00020/scene-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00020/scene-local-exact-report.json", + "sha256": "d964c61c0717865a42574c28d5e4fffdcb45c3c962e9bce4608c5f9438828504", + "bytes": 782 + }, + { + "path": "tests/golden/M16-GAP-00021/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00021/manifest.json", + "sha256": "e56411fd47be3a03814560e9b8e1d6ece0e5e5a50cbdb44256e20e0976daea54", + "bytes": 1985 + }, + { + "path": "tests/golden/M16-GAP-00021/screen-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00021/screen-desktop-report.json", + "sha256": "41a5d58883238d89e4e6ed3805b452bc165632b63e0065109529de3c0e230ecd", + "bytes": 582 + }, + { + "path": "tests/golden/M16-GAP-00021/screen-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00021/screen-local-exact-report.json", + "sha256": "792206b5b046411d921b3b916d2b76222aab39050df8028a64c39437e285023c", + "bytes": 785 + }, + { + "path": "tests/golden/M16-GAP-00022/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00022/manifest.json", + "sha256": "fac4a48e35b052acec9e50a5b26c801e532a1faa80185eda477dfa8a05f8dec3", + "bytes": 2130 + }, + { + "path": "tests/golden/M16-GAP-00022/sound-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00022/sound-desktop-report.json", + "sha256": "cb23ace7920d6762f931296701a596f3453ccfa7e966447d0efa198b92d65a69", + "bytes": 574 + }, + { + "path": "tests/golden/M16-GAP-00022/sound-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00022/sound-local-exact-report.json", + "sha256": "741b67484c81c156c51b5b88e52f32d5e0114292dcbe689c641d2670cd4e82bd", + "bytes": 763 + }, + { + "path": "tests/golden/M16-GAP-00023/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00023/manifest.json", + "sha256": "f845a8578a2ce9f106f0ca8ea02ef6ccddca87086e779eb7ddcf9fef5b8934f2", + "bytes": 2145 + }, + { + "path": "tests/golden/M16-GAP-00023/speaker-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00023/speaker-desktop-report.json", + "sha256": "8ee6e52568f2c37098a8f64983f90243b2df69df1c16a0c4eaae855a7e9fad9d", + "bytes": 807 + }, + { + "path": "tests/golden/M16-GAP-00023/speaker-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00023/speaker-local-exact-report.json", + "sha256": "7d48447d03e39e5e29f41bf18a95040c5436ed73229cee1bdc32e09f7aae594d", + "bytes": 996 + }, + { + "path": "tests/golden/M16-GAP-00024/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00024/manifest.json", + "sha256": "681be76208e29366e616a4d8fa51f15e05ec27d2e60b46b140053646468f759d", + "bytes": 2130 + }, + { + "path": "tests/golden/M16-GAP-00024/text-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00024/text-desktop-report.json", + "sha256": "50006b807fc8f41603e939f9f2748c4d5cacfcaa19a1c60a7270e9f9962b621c", + "bytes": 718 + }, + { + "path": "tests/golden/M16-GAP-00024/text-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00024/text-local-exact-report.json", + "sha256": "73c22077cbbe47e1effd7c24d310e43010fbd48925587cb00efe507838b4f1eb", + "bytes": 852 + }, + { + "path": "tests/golden/M16-GAP-00025/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00025/manifest.json", + "sha256": "acc4b2d2d617b49bd274ae18e07475885eaa566269fe038c7df173a6a58f4964", + "bytes": 2145 + }, + { + "path": "tests/golden/M16-GAP-00025/texture-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00025/texture-desktop-report.json", + "sha256": "ead3d25554f69580a272c3a4c45139632592ba2ca83370c79174683b2c7a982a", + "bytes": 612 + }, + { + "path": "tests/golden/M16-GAP-00025/texture-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00025/texture-local-exact-report.json", + "sha256": "4e503817eb7053370b627cc9a2edb03fc2ac8b8919534a90064133eaf9e0f4e7", + "bytes": 805 + }, + { + "path": "tests/golden/M16-GAP-00026/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00026/manifest.json", + "sha256": "08f5fe0a60d924bbd0f3cb85d95678d05a62d16940703cb989cf9201e73cbf73", + "bytes": 2140 + }, + { + "path": "tests/golden/M16-GAP-00026/volume-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00026/volume-desktop-report.json", + "sha256": "60c12879158b8a8e548a135778f90618cec8d42b39a95e460398fe6cfe563c86", + "bytes": 615 + }, + { + "path": "tests/golden/M16-GAP-00026/volume-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00026/volume-local-exact-report.json", + "sha256": "649e2bace33f8d9708b3ce0b4979e0cd6e9a0b78b8f4ee2b75776a94e68362be", + "bytes": 881 + }, + { + "path": "tests/golden/M16-GAP-00027/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00027/manifest.json", + "sha256": "1feb7365ae2590ada5408d47075d8151e9c023918b4822668619b4ba7c07f8e3", + "bytes": 2179 + }, + { + "path": "tests/golden/M16-GAP-00027/window-manager-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00027/window-manager-desktop-report.json", + "sha256": "2b50759c964b06b38410f44c11679616a8f172d5bc05bd2e5b54a416ec781c15", + "bytes": 537 + }, + { + "path": "tests/golden/M16-GAP-00027/window-manager-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00027/window-manager-local-exact-report.json", + "sha256": "9e92475873db0072f32d708e6f1468387637fac39008c4928060c39a719a5dc0", + "bytes": 792 + }, + { + "path": "tests/golden/M16-GAP-00028/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00028/manifest.json", + "sha256": "90c983a8c7602649ca536ade7131d5b0d726ef6834de2e1665c7e4656156c638", + "bytes": 2155 + }, + { + "path": "tests/golden/M16-GAP-00028/workspace-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00028/workspace-desktop-report.json", + "sha256": "4ab3274ecfcd512964db37e661f8b5e8c53077687094115c11dab4fbe39a12b9", + "bytes": 475 + }, + { + "path": "tests/golden/M16-GAP-00028/workspace-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00028/workspace-local-exact-report.json", + "sha256": "3b12cbb0533284f29ad1d0f4659ecd1ce128ae5b24545610819f994252b79e6d", + "bytes": 721 + }, + { + "path": "tests/golden/M16-GAP-00029/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00029/manifest.json", + "sha256": "2475bd5cd1dad8bc459f3a2508b8006af77b18464be35f42ef140e7af6796d5a", + "bytes": 2135 + }, + { + "path": "tests/golden/M16-GAP-00029/world-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00029/world-desktop-report.json", + "sha256": "2818f250b67524e0517ad117619a00fbcb09f51141c4f228e3c0095f0ee4afad", + "bytes": 785 + }, + { + "path": "tests/golden/M16-GAP-00029/world-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00029/world-local-exact-report.json", + "sha256": "22eacfe0c2fa9cdce05b0965fac8f8f59bbd17726a89606678a8d3ed804dbf4d", + "bytes": 1047 + }, + { + "path": "tests/golden/M16-GAP-00030/armature-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00030/armature-modifier-desktop-report.json", + "sha256": "32ca0be514d0f5b02150c23a42e99784903da9c211aebb7f2736229daa069220", + "bytes": 880 + }, + { + "path": "tests/golden/M16-GAP-00030/armature-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00030/armature-modifier-local-exact-report.json", + "sha256": "fad61c1ebb8396b4af4143e7079a7fc1db4bf3f7ff945ce4717650c5493510a5", + "bytes": 1359 + }, + { + "path": "tests/golden/M16-GAP-00030/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00030/manifest.json", + "sha256": "65f93b217bc35c886da135c52079ed52df24d9834b67551a1fb6c302da313014", + "bytes": 2175 + }, + { + "path": "tests/golden/M16-GAP-00031/array-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00031/array-modifier-desktop-report.json", + "sha256": "739ae5333a5046cd4b0c60333eec89bf4f0bb9508d95022238a173f4a698833f", + "bytes": 750 + }, + { + "path": "tests/golden/M16-GAP-00031/array-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00031/array-modifier-local-exact-report.json", + "sha256": "df9326e8ddbb5ace859ade67dff067229c55f19536c568ee6e102d981971c17a", + "bytes": 1318 + }, + { + "path": "tests/golden/M16-GAP-00031/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00031/manifest.json", + "sha256": "b2b60b46152a9fcb177ec04166fd096d6e595ba66fc8591959bca91df0729bad", + "bytes": 2160 + }, + { + "path": "tests/golden/M16-GAP-00032/bevel-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00032/bevel-modifier-desktop-report.json", + "sha256": "a6e1e88a9e418bb18b2a323285c0d05a07e6c038bf2cf4f7e04bfa188900daf3", + "bytes": 682 + }, + { + "path": "tests/golden/M16-GAP-00032/bevel-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00032/bevel-modifier-local-exact-report.json", + "sha256": "318d68f88e3838fc3920d33a8d1b2995411de39c9c2f39d97e1f2c3b4e7a7c1e", + "bytes": 1197 + }, + { + "path": "tests/golden/M16-GAP-00032/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00032/manifest.json", + "sha256": "6009f0bdb35b49e2cc387cfa6661bde7f155f81c07476ef7d4700e056279f64b", + "bytes": 2160 + }, + { + "path": "tests/golden/M16-GAP-00033/boolean-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00033/boolean-modifier-desktop-report.json", + "sha256": "2f0c9dfb183f39a65ef018d1618ef6f12fe05ada0a6c7ff40011491686ea00c7", + "bytes": 746 + }, + { + "path": "tests/golden/M16-GAP-00033/boolean-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00033/boolean-modifier-local-exact-report.json", + "sha256": "aa33f396b5910e3829c1965e62c80bd1267ac764a58862b72be555ebd5bd1b0d", + "bytes": 1285 + }, + { + "path": "tests/golden/M16-GAP-00033/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00033/manifest.json", + "sha256": "5343b375977ea4e9dcfffa023bbcb6313a2a3d2e23b76b35e5b138f60d7f5a29", + "bytes": 2170 + }, + { + "path": "tests/golden/M16-GAP-00034/build-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00034/build-modifier-desktop-report.json", + "sha256": "b05d06b2408cfa2b0509489434d80489e11d967748f48639d1d50febbcd64974", + "bytes": 725 + }, + { + "path": "tests/golden/M16-GAP-00034/build-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00034/build-modifier-local-exact-report.json", + "sha256": "6e5e3f89148decd1996802bddf903ee704700308be90e1af9c3c66e7e58796fa", + "bytes": 1180 + }, + { + "path": "tests/golden/M16-GAP-00034/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00034/manifest.json", + "sha256": "137c50a05af32efdab54974f9f63d980394fff204f1ec39b2f522324f906ace6", + "bytes": 2160 + }, + { + "path": "tests/golden/M16-GAP-00035/cast-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00035/cast-modifier-desktop-report.json", + "sha256": "46d920371f2b315034286e20db585b5830edde5c12f97470db05141acdfa3975", + "bytes": 745 + }, + { + "path": "tests/golden/M16-GAP-00035/cast-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00035/cast-modifier-local-exact-report.json", + "sha256": "56d0c12614b99a60617ca6b3aaa8308c103b0d926c67ffa6d374713f1939923c", + "bytes": 1149 + }, + { + "path": "tests/golden/M16-GAP-00035/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00035/manifest.json", + "sha256": "ed79f18df0fdd6e0ee1960df56f70801bc81a604659d4f1349c3f68705912d6d", + "bytes": 2155 + }, + { + "path": "tests/golden/M16-GAP-00036/cloth-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00036/cloth-modifier-desktop-report.json", + "sha256": "bcfa83207cc5d5d6d971c41d8bb649d272c7e8f03e7499dc0efa4f3bbcb4d1ef", + "bytes": 618 + }, + { + "path": "tests/golden/M16-GAP-00036/cloth-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00036/cloth-modifier-local-exact-report.json", + "sha256": "37344e3d5c930fb6815016b03432a6f86a2e763a89546e2e435e0f957f99270a", + "bytes": 1091 + }, + { + "path": "tests/golden/M16-GAP-00036/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00036/manifest.json", + "sha256": "8b451d833ea14dbac429a03f4c552ca82c16c3baba378d988d30d12f3e951a86", + "bytes": 2160 + }, + { + "path": "tests/golden/M16-GAP-00037/collision-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00037/collision-modifier-desktop-report.json", + "sha256": "be458864a8ce628d18002e69cbba9d524377fadff0bb7a3c3a6ed07a6fcb6bc0", + "bytes": 638 + }, + { + "path": "tests/golden/M16-GAP-00037/collision-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00037/collision-modifier-local-exact-report.json", + "sha256": "3352147756f312df1ffb4b9c889347e74403147cafb770128c6fbd61810acc8a", + "bytes": 1117 + }, + { + "path": "tests/golden/M16-GAP-00037/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00037/manifest.json", + "sha256": "a4506659340af52a0ede5af619362e5a3c07463a2718cb7cdc64f97647145d71", + "bytes": 2180 + }, + { + "path": "tests/golden/M16-GAP-00038/corrective-smooth-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00038/corrective-smooth-modifier-desktop-report.json", + "sha256": "81b0dac10d007f32a7ccd1939fb82494ad230cfd09a5d5e3d9051716631a6012", + "bytes": 711 + }, + { + "path": "tests/golden/M16-GAP-00038/corrective-smooth-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00038/corrective-smooth-modifier-local-exact-report.json", + "sha256": "e0f51299b53f2694cc0421d249acc633d6d3db07d2302d1358927aab15981d0b", + "bytes": 1176 + }, + { + "path": "tests/golden/M16-GAP-00038/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00038/manifest.json", + "sha256": "047c4cd2a500a80e4be02ad2f55d796b03609f9327090e4369225f6aba4fbf6e", + "bytes": 2366 + }, + { + "path": "tests/golden/M16-GAP-00039/curve-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00039/curve-modifier-desktop-report.json", + "sha256": "7758f93e53d1b01a80e7cc2d4ce4948cadfb6882a2eec0d34e7e9fbdc7ac69bf", + "bytes": 668 + }, + { + "path": "tests/golden/M16-GAP-00039/curve-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00039/curve-modifier-local-exact-report.json", + "sha256": "7b3cf6ec8eec1a1b0c8d630578bfa09b29d8e8597ed860aa98737e7c7798cf91", + "bytes": 1203 + }, + { + "path": "tests/golden/M16-GAP-00039/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00039/manifest.json", + "sha256": "4f85c33a57e35c628ce8bf041bdf30df37e298de9cc961c93c969e8bfbb0e276", + "bytes": 2318 + }, + { + "path": "tests/golden/M16-GAP-00040/data-transfer-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00040/data-transfer-modifier-desktop-report.json", + "sha256": "3b75a6318947c1c18b04af6a05bc275aac4f6fde4352cc249c431c64fde7174d", + "bytes": 691 + }, + { + "path": "tests/golden/M16-GAP-00040/data-transfer-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00040/data-transfer-modifier-local-exact-report.json", + "sha256": "45c8b9c2b0a07902e7680fc44b648cd0fc349e4a248c52824c3ed70debb0c9a1", + "bytes": 1148 + }, + { + "path": "tests/golden/M16-GAP-00040/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00040/manifest.json", + "sha256": "115064d3b16a2b8b36e19a8d92b4c3a4dd761c76ec57d67a803a66b02b2b03d8", + "bytes": 2350 + }, + { + "path": "tests/golden/M16-GAP-00041/decimate-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00041/decimate-modifier-desktop-report.json", + "sha256": "a056e81f2d0dceca465b185060d9874f4e0a10099b0820a42e50de3c20f56433", + "bytes": 824 + }, + { + "path": "tests/golden/M16-GAP-00041/decimate-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00041/decimate-modifier-local-exact-report.json", + "sha256": "ac3efd1614cd440aff79d370f61a8243a69feac82d9aa4afb2c2d2ac2196d811", + "bytes": 1301 + }, + { + "path": "tests/golden/M16-GAP-00041/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00041/manifest.json", + "sha256": "02591ee5f0094ba2c027fa4349effa0e1d731305467d005e474c14b2292b5b8a", + "bytes": 2330 + }, + { + "path": "tests/golden/M16-GAP-00042/displace-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00042/displace-modifier-desktop-report.json", + "sha256": "8b5e69f2643e33607c36c6e786477d13c962eb041f64044be4b5d1277b2ad4a3", + "bytes": 783 + }, + { + "path": "tests/golden/M16-GAP-00042/displace-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00042/displace-modifier-local-exact-report.json", + "sha256": "f29ae1fd8d9dd004194347d9ab9d138d9c10db71ffae8baba554748de835fe09", + "bytes": 1272 + }, + { + "path": "tests/golden/M16-GAP-00042/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00042/manifest.json", + "sha256": "2420cf04248b07c100bd5421cdd127f4efd86eae3dccf41b12620f056d7423b6", + "bytes": 2330 + }, + { + "path": "tests/golden/M16-GAP-00043/dynamic-paint-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00043/dynamic-paint-modifier-desktop-report.json", + "sha256": "d15d596c1c2fbf176c59b7fb933f6a2ceeb09ff578ba2cf894c12deec480471b", + "bytes": 691 + }, + { + "path": "tests/golden/M16-GAP-00043/dynamic-paint-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00043/dynamic-paint-modifier-local-exact-report.json", + "sha256": "e04b9f0427010f85ffd5119eeb2d926ad0fa5d7099c67807ba46b6e66db5b0f3", + "bytes": 1150 + }, + { + "path": "tests/golden/M16-GAP-00043/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00043/manifest.json", + "sha256": "5ad7947dc7e6fd971965a5fa6945875ee2d61325e81b9e600542a3048b3f61a9", + "bytes": 2350 + }, + { + "path": "tests/golden/M16-GAP-00044/edge-split-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00044/edge-split-modifier-desktop-report.json", + "sha256": "4f741f923ed60af4142691643fb70cd650b3e7c12507002595d8f52d78a41a61", + "bytes": 716 + }, + { + "path": "tests/golden/M16-GAP-00044/edge-split-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00044/edge-split-modifier-local-exact-report.json", + "sha256": "114e41e7c6f3238d4888b61f2d9fd59b37d4a9a4f2f7485fd1a9b9a48c8ba9ac", + "bytes": 1177 + }, + { + "path": "tests/golden/M16-GAP-00044/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00044/manifest.json", + "sha256": "ff007eb22d3a362fc0284cd60b90e2bec3257822d04bdc3eb46fca872d8a1ea5", + "bytes": 2338 + }, + { + "path": "tests/golden/M16-GAP-00045/explode-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00045/explode-modifier-desktop-report.json", + "sha256": "6f2da8d3cc19177ceedef1e31d2ddd2bb73e061a40164393fb717050b442b43c", + "bytes": 663 + }, + { + "path": "tests/golden/M16-GAP-00045/explode-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00045/explode-modifier-local-exact-report.json", + "sha256": "fdd2bfc6407872afbb3f1393b79c1d551f030f485ce4169863b07742c994122f", + "bytes": 1111 + }, + { + "path": "tests/golden/M16-GAP-00045/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00045/manifest.json", + "sha256": "a6a63c7ede70a0716a49bd5ef0bf4ee23e11586c953f8b7e6a06530a73618177", + "bytes": 2326 + }, + { + "path": "tests/golden/M16-GAP-00046/fluid-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00046/fluid-modifier-desktop-report.json", + "sha256": "5e2140d9a0e8089c6fe1f31f34bfe7fa8473f642556051598436cb78636d451b", + "bytes": 653 + }, + { + "path": "tests/golden/M16-GAP-00046/fluid-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00046/fluid-modifier-local-exact-report.json", + "sha256": "3e0adc749a8f15c52231fdd37afd01246b21d0c5630be569a0756b4f7d05194c", + "bytes": 1095 + }, + { + "path": "tests/golden/M16-GAP-00046/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00046/manifest.json", + "sha256": "4430ac4a19fcfea771b6a688ac0b59e5ed6f477ad086effa9df8ec66189ff059", + "bytes": 2318 + }, + { + "path": "tests/golden/M16-GAP-00047/grease-pencil-armature-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00047/grease-pencil-armature-modifier-desktop-report.json", + "sha256": "aaa319ab7fc68ba6763c29b97659cb3a4f71425df5edd93dbd9aa5b998e96c1a", + "bytes": 705 + }, + { + "path": "tests/golden/M16-GAP-00047/grease-pencil-armature-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00047/grease-pencil-armature-modifier-local-exact-report.json", + "sha256": "0e343bf170e7cb7c0b61a20308a7034f3ced1572580c4f94074e162e14bfcf43", + "bytes": 1166 + }, + { + "path": "tests/golden/M16-GAP-00047/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00047/manifest.json", + "sha256": "fe5ac01d72c9ab1f18f485a02748e4a4a53d409f2c65b0f9507b0fba2b16201a", + "bytes": 2230 + }, + { + "path": "tests/golden/M16-GAP-00048/grease-pencil-array-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00048/grease-pencil-array-modifier-desktop-report.json", + "sha256": "caf437b45e130c12406ce3ee8d699d7266673f8e595d63d017f5482c474f29f3", + "bytes": 693 + }, + { + "path": "tests/golden/M16-GAP-00048/grease-pencil-array-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00048/grease-pencil-array-modifier-local-exact-report.json", + "sha256": "e583037d0c80eb40b6e511cb2b11feae3c9f5f0e1c0374727f5af6c8c1b0c6b5", + "bytes": 1213 + }, + { + "path": "tests/golden/M16-GAP-00048/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00048/manifest.json", + "sha256": "e7267000f7ec4c472025b0f876b2c91f30d2b25716a59c91339c944e2e1459f3", + "bytes": 2218 + }, + { + "path": "tests/golden/M16-GAP-00049/grease-pencil-build-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00049/grease-pencil-build-modifier-desktop-report.json", + "sha256": "e9d70bb6ba43a387d29683473bfc8286ab9818f771e796194a0344ed31bd00cb", + "bytes": 693 + }, + { + "path": "tests/golden/M16-GAP-00049/grease-pencil-build-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00049/grease-pencil-build-modifier-local-exact-report.json", + "sha256": "b1df18f0aafe0a47ef55b7fd64ac5935020a99e45e58708cd7958d919d8fa558", + "bytes": 1213 + }, + { + "path": "tests/golden/M16-GAP-00049/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00049/manifest.json", + "sha256": "40a1973a8c461d876e93115c4ccc0e7c6f3cd19ba495947d6c30b50b03aef49c", + "bytes": 2218 + }, + { + "path": "tests/golden/M16-GAP-00050/grease-pencil-color-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00050/grease-pencil-color-modifier-desktop-report.json", + "sha256": "79e44b5d0443f81d2ba334902990f73c20601b4c15e890aff1b73fae4879f771", + "bytes": 693 + }, + { + "path": "tests/golden/M16-GAP-00050/grease-pencil-color-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00050/grease-pencil-color-modifier-local-exact-report.json", + "sha256": "73126cf9fc415f9eccf9538d1d23055857fa9c772e1b15721470e1653bc2ce73", + "bytes": 1213 + }, + { + "path": "tests/golden/M16-GAP-00050/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00050/manifest.json", + "sha256": "9b399fb391588b8bedba10997876cb4b3104ecdfe6481a022dd2f106f4920dbb", + "bytes": 2218 + }, + { + "path": "tests/golden/M16-GAP-00051/grease-pencil-dash-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00051/grease-pencil-dash-modifier-desktop-report.json", + "sha256": "0c87ebea369c798bbb2f0f70f698066e482ce372eda0042008f9993cfe116bf6", + "bytes": 689 + }, + { + "path": "tests/golden/M16-GAP-00051/grease-pencil-dash-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00051/grease-pencil-dash-modifier-local-exact-report.json", + "sha256": "6da74df88b5ed5b1cb7cb64420020924143e30cad7c8f1efc11e62fd39b33dbb", + "bytes": 1208 + }, + { + "path": "tests/golden/M16-GAP-00051/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00051/manifest.json", + "sha256": "fc6d07507873239429bbf53f389bd769f94fade2f2086ca446bf3180f96fff2b", + "bytes": 2214 + }, + { + "path": "tests/golden/M16-GAP-00052/grease-pencil-envelope-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00052/grease-pencil-envelope-modifier-desktop-report.json", + "sha256": "4ce0e867ab2f8346e6121060c3f18c9a1f48e97c67dd5b9362c2eaca6e7e5f78", + "bytes": 705 + }, + { + "path": "tests/golden/M16-GAP-00052/grease-pencil-envelope-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00052/grease-pencil-envelope-modifier-local-exact-report.json", + "sha256": "af02545ba19b116b4ce39b87aaab3f8e3e33504164694c04b1ec6da7f159ee59", + "bytes": 1228 + }, + { + "path": "tests/golden/M16-GAP-00052/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00052/manifest.json", + "sha256": "764d3f131fc5f51ba15aa3964b73560972934f2f6b025db8288a5c165dd40af8", + "bytes": 2230 + }, + { + "path": "tests/golden/M16-GAP-00053/grease-pencil-hook-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00053/grease-pencil-hook-modifier-desktop-report.json", + "sha256": "67b0ddf84c0d9690832b8aeae76b503572bf9ac725123254a95a351e55075c54", + "bytes": 689 + }, + { + "path": "tests/golden/M16-GAP-00053/grease-pencil-hook-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00053/grease-pencil-hook-modifier-local-exact-report.json", + "sha256": "eb44b966e835d186f5f05420377a00895764cee2b5cb379f3704f89aed334d16", + "bytes": 1210 + }, + { + "path": "tests/golden/M16-GAP-00053/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00053/manifest.json", + "sha256": "e3d1c6c132f6da332f4d1424bc7608e1bf25b2a48500b112fc34f5954c13220d", + "bytes": 2214 + }, + { + "path": "tests/golden/M16-GAP-00054/grease-pencil-lattice-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00054/grease-pencil-lattice-modifier-desktop-report.json", + "sha256": "565931e3614f74c666c375ae3d879ca85b4274d1bc980cd5480c877593d23a63", + "bytes": 701 + }, + { + "path": "tests/golden/M16-GAP-00054/grease-pencil-lattice-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00054/grease-pencil-lattice-modifier-local-exact-report.json", + "sha256": "4d0bda74ab6c6667530fa5f64fff6944c316449b3c9f1c25d6c623d7523a5ed1", + "bytes": 1224 + }, + { + "path": "tests/golden/M16-GAP-00054/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00054/manifest.json", + "sha256": "9cd85f6373d0658757c92fb0a084a1f468777865e64cfc5cd23f7fa091f6e25c", + "bytes": 2226 + }, + { + "path": "tests/golden/M16-GAP-00055/grease-pencil-length-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00055/grease-pencil-length-modifier-desktop-report.json", + "sha256": "367ea4ff3cef4d5ec0e07b3f69f2f5a15d2604753b8efe9083775e97854af2b6", + "bytes": 697 + }, + { + "path": "tests/golden/M16-GAP-00055/grease-pencil-length-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00055/grease-pencil-length-modifier-local-exact-report.json", + "sha256": "5715882f691e9022fc3049f1937b90e39d9e7702583f9a946b7aabf22e2093d5", + "bytes": 1220 + }, + { + "path": "tests/golden/M16-GAP-00055/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00055/manifest.json", + "sha256": "8c1e8755714dc91d1e02b0966d5d86fd26ffc49aa9c81d63384e0734117e1a31", + "bytes": 2222 + }, + { + "path": "tests/golden/M16-GAP-00056/grease-pencil-mirror-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00056/grease-pencil-mirror-modifier-desktop-report.json", + "sha256": "60122c5212975d2a0de279415ea35699fa10c7c3b350ef991a2ef04c096c4e3c", + "bytes": 697 + }, + { + "path": "tests/golden/M16-GAP-00056/grease-pencil-mirror-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00056/grease-pencil-mirror-modifier-local-exact-report.json", + "sha256": "ac905bdcf602af4f8d63e62ea78f251d737052c00aa4454807aeaa648344ea89", + "bytes": 1221 + }, + { + "path": "tests/golden/M16-GAP-00056/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00056/manifest.json", + "sha256": "66d9711eaa81ebb3a192ff89004047b67f2784f6b4eb752c3f5bf669f4700ac2", + "bytes": 2222 + }, + { + "path": "tests/golden/M16-GAP-00057/grease-pencil-multiply-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00057/grease-pencil-multiply-modifier-desktop-report.json", + "sha256": "c891fa44f7623a0eb1dd8c848cace0f8289c0c181a03a400fce36aa1a020069c", + "bytes": 705 + }, + { + "path": "tests/golden/M16-GAP-00057/grease-pencil-multiply-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00057/grease-pencil-multiply-modifier-local-exact-report.json", + "sha256": "5e9c1ab5db3f884cb1f78ce212e2714ea8500ddcc6691774092a745a71013e10", + "bytes": 1231 + }, + { + "path": "tests/golden/M16-GAP-00057/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00057/manifest.json", + "sha256": "171834827986190445d87d9eb35edb44d48400f941e2999765c4660ae6e1875a", + "bytes": 2230 + }, + { + "path": "tests/golden/M16-GAP-00058/grease-pencil-noise-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00058/grease-pencil-noise-modifier-desktop-report.json", + "sha256": "04c853b535d820f10859c47d51901fbbf51c4a5cb7f7387cbf59bbebfc108a2c", + "bytes": 693 + }, + { + "path": "tests/golden/M16-GAP-00058/grease-pencil-noise-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00058/grease-pencil-noise-modifier-local-exact-report.json", + "sha256": "ce892ec22b69bd93060fcd8d29d91a97c68f75361bf9b782d73e502ecb7a6f47", + "bytes": 1212 + }, + { + "path": "tests/golden/M16-GAP-00058/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00058/manifest.json", + "sha256": "73e0c79e68244d4d100e32bbd915f51106cec5441439960983ac1bc218e74abe", + "bytes": 2218 + }, + { + "path": "tests/golden/M16-GAP-00059/grease-pencil-offset-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00059/grease-pencil-offset-modifier-desktop-report.json", + "sha256": "4119db33aad242414ed52d9e6614bdede6e0b4a551604a6886e01dc5bf90ea4e", + "bytes": 697 + }, + { + "path": "tests/golden/M16-GAP-00059/grease-pencil-offset-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00059/grease-pencil-offset-modifier-local-exact-report.json", + "sha256": "e9ef09a250821a1dd7f10c574f1911f534baf65515e879f9ac423fb4877c7b5b", + "bytes": 1217 + }, + { + "path": "tests/golden/M16-GAP-00059/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00059/manifest.json", + "sha256": "884c6a8e1f40870d6628cc0c33884e1c83d0d605bea1d0fd505b6710dcd2fd4b", + "bytes": 2090 + }, + { + "path": "tests/golden/M16-GAP-00060/grease-pencil-opacity-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00060/grease-pencil-opacity-modifier-desktop-report.json", + "sha256": "678e7c0028c38f2a84cee2377ecfd7de1d1303561e75fcf8f380359338f6b4b8", + "bytes": 701 + }, + { + "path": "tests/golden/M16-GAP-00060/grease-pencil-opacity-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00060/grease-pencil-opacity-modifier-local-exact-report.json", + "sha256": "b62b13a20f921815f9fc4b32b406598a1a08d701cee27e07ee3a0009dda2a2f5", + "bytes": 1221 + }, + { + "path": "tests/golden/M16-GAP-00060/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00060/manifest.json", + "sha256": "e3715c32ca4bae6376396b321826841ad38751301a184154db024233c4f31069", + "bytes": 2094 + }, + { + "path": "tests/golden/M16-GAP-00061/grease-pencil-outline-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00061/grease-pencil-outline-modifier-desktop-report.json", + "sha256": "2a6994ca45c8262a592cedb8deb8f026d366ee2df3bfe6ea0d375e8e214ba6c0", + "bytes": 701 + }, + { + "path": "tests/golden/M16-GAP-00061/grease-pencil-outline-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00061/grease-pencil-outline-modifier-local-exact-report.json", + "sha256": "f490b2dc9b173a3172529ab529889a3292fe39f0cbd3951baaee8566464a0c43", + "bytes": 1222 + }, + { + "path": "tests/golden/M16-GAP-00061/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00061/manifest.json", + "sha256": "31883513aefa13e1668b0bde65b55f87c009d36e0bce841d3460e2dc3f3e5381", + "bytes": 2094 + }, + { + "path": "tests/golden/M16-GAP-00062/grease-pencil-shrinkwrap-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00062/grease-pencil-shrinkwrap-modifier-desktop-report.json", + "sha256": "6631f00a27489de3b3d5cd2288f1a1b395b3a7295f9fc4b72c2091d5ce333a45", + "bytes": 713 + }, + { + "path": "tests/golden/M16-GAP-00062/grease-pencil-shrinkwrap-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00062/grease-pencil-shrinkwrap-modifier-local-exact-report.json", + "sha256": "a00004d09bc0170a0f3148197dd3dd24fb39fac60c723214cce73e527c998e8c", + "bytes": 1240 + }, + { + "path": "tests/golden/M16-GAP-00062/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00062/manifest.json", + "sha256": "943ee13f577cfa193e24e3d1a6cb698575fcbb7a72f52ddf9e122738c83e344a", + "bytes": 2106 + }, + { + "path": "tests/golden/M16-GAP-00063/grease-pencil-simplify-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00063/grease-pencil-simplify-modifier-desktop-report.json", + "sha256": "14de85a86a150ace281a6b632a5cdf3076104c623b3d313201a2efeb5bac6695", + "bytes": 705 + }, + { + "path": "tests/golden/M16-GAP-00063/grease-pencil-simplify-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00063/grease-pencil-simplify-modifier-local-exact-report.json", + "sha256": "6214778590468549ab03aa4bb67dcad6ae2f22d151dc6012c9e293e01ffa9dbe", + "bytes": 1229 + }, + { + "path": "tests/golden/M16-GAP-00063/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00063/manifest.json", + "sha256": "004f0845b881563ebcc3bd208a081ae1626f88406fc912bcd031e5c611879ee2", + "bytes": 2098 + }, + { + "path": "tests/golden/M16-GAP-00064/grease-pencil-smooth-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00064/grease-pencil-smooth-modifier-desktop-report.json", + "sha256": "b58983c079c8271ab9d5230e478d36e16d49102826178e90566cd0a8913dd325", + "bytes": 697 + }, + { + "path": "tests/golden/M16-GAP-00064/grease-pencil-smooth-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00064/grease-pencil-smooth-modifier-local-exact-report.json", + "sha256": "da42e7440e07f1033f98fbd26274654b4f516821fa0e4c08db68df9468598564", + "bytes": 1218 + }, + { + "path": "tests/golden/M16-GAP-00064/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00064/manifest.json", + "sha256": "2e2a5fd2275e753249ec35a596c5b632b09e7fb61ba5a96566a988e8d917579d", + "bytes": 2090 + }, + { + "path": "tests/golden/M16-GAP-00065/grease-pencil-subdiv-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00065/grease-pencil-subdiv-modifier-desktop-report.json", + "sha256": "e4e86404702f4b46f207c66070adcc0a52e580aff6106f5404c97ab16351a2d2", + "bytes": 697 + }, + { + "path": "tests/golden/M16-GAP-00065/grease-pencil-subdiv-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00065/grease-pencil-subdiv-modifier-local-exact-report.json", + "sha256": "3e09deb0756dd36c85e53e6011f3ca011c9ad4a237b577d529238675a9dd7213", + "bytes": 1220 + }, + { + "path": "tests/golden/M16-GAP-00065/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00065/manifest.json", + "sha256": "7a9dc7efde0ee86ae0b6b40270b8af8760891b867ed0fb2a77d0afe76596e605", + "bytes": 2090 + }, + { + "path": "tests/golden/M16-GAP-00066/grease-pencil-texture-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00066/grease-pencil-texture-modifier-desktop-report.json", + "sha256": "d3900098ba128c202ff28323c6e2945d78dd3c35512bbc2c5d611493b8b1e42d", + "bytes": 701 + }, + { + "path": "tests/golden/M16-GAP-00066/grease-pencil-texture-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00066/grease-pencil-texture-modifier-local-exact-report.json", + "sha256": "b9831dad063cdfaa81aeb8894776b914652c6542d2e0a244cef321547e183068", + "bytes": 1226 + }, + { + "path": "tests/golden/M16-GAP-00066/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00066/manifest.json", + "sha256": "3dfb0fc8a218a3209fee25799df265761e06ce2a8ca161fd07c015f33ae3e144", + "bytes": 2094 + }, + { + "path": "tests/golden/M16-GAP-00067/grease-pencil-thickness-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00067/grease-pencil-thickness-modifier-desktop-report.json", + "sha256": "664ec1a6c595fcb5fac0888ae866f70a48ef5d057035c5c614ed0d97a9d08108", + "bytes": 709 + }, + { + "path": "tests/golden/M16-GAP-00067/grease-pencil-thickness-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00067/grease-pencil-thickness-modifier-local-exact-report.json", + "sha256": "6e1eee5cf87df42fc94c144f5171f9653df4196372eccd001cef6907ef518e94", + "bytes": 1236 + }, + { + "path": "tests/golden/M16-GAP-00067/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00067/manifest.json", + "sha256": "d79f6b8985fd81ae5254adee038d79505726142298a2d0d39155d7bb6609e80b", + "bytes": 2102 + }, + { + "path": "tests/golden/M16-GAP-00068/grease-pencil-time-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00068/grease-pencil-time-modifier-desktop-report.json", + "sha256": "761dd7ad0a350e9f3c175575cdb4d71f5bd0a56e1872626148d73c9a7229468f", + "bytes": 689 + }, + { + "path": "tests/golden/M16-GAP-00068/grease-pencil-time-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00068/grease-pencil-time-modifier-local-exact-report.json", + "sha256": "5cc9edb3f0fd508b25730b4d32deaa9a804381d7fbd8b4007af5e7782d27c590", + "bytes": 1209 + }, + { + "path": "tests/golden/M16-GAP-00068/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00068/manifest.json", + "sha256": "5d89b01c5ba47171c0878156521964c0dc77f7d4dad58fe9810456b116486c9e", + "bytes": 2082 + }, + { + "path": "tests/golden/M16-GAP-00069/grease-pencil-tint-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00069/grease-pencil-tint-modifier-desktop-report.json", + "sha256": "e66d9b22a901a41e9c7b0d460f970722192550f75a4f3f54612b97fcf9ed9238", + "bytes": 689 + }, + { + "path": "tests/golden/M16-GAP-00069/grease-pencil-tint-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00069/grease-pencil-tint-modifier-local-exact-report.json", + "sha256": "44d113b3d6c291a18401d6dadbf915dfb907413c8ed96e092011484879f5e050", + "bytes": 1208 + }, + { + "path": "tests/golden/M16-GAP-00069/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00069/manifest.json", + "sha256": "5fae5d038ddc45dcd45a7a34d4194d8dd0d3e037cac84a6803ae28a49034ad02", + "bytes": 2082 + }, + { + "path": "tests/golden/M16-GAP-00070/grease-pencil-vertex-weight-angle-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00070/grease-pencil-vertex-weight-angle-modifier-desktop-report.json", + "sha256": "0c3fdcbf998064e77023d66239a6f0e9763cba14aced60d6d71bfd8968844e66", + "bytes": 749 + }, + { + "path": "tests/golden/M16-GAP-00070/grease-pencil-vertex-weight-angle-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00070/grease-pencil-vertex-weight-angle-modifier-local-exact-report.json", + "sha256": "79d31b01cb87a8a380d4e84ea69e9b3f19b5109029ad4c1193d15ab6058b8d01", + "bytes": 1285 + }, + { + "path": "tests/golden/M16-GAP-00070/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00070/manifest.json", + "sha256": "07f517fc4468f0ff7e784b553608a175170ea59e6bed1c749985f99a793d71cc", + "bytes": 2142 + }, + { + "path": "tests/golden/M16-GAP-00071/grease-pencil-vertex-weight-proximity-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00071/grease-pencil-vertex-weight-proximity-modifier-desktop-report.json", + "sha256": "bfb4354d4b25894879f6cd15f1f9758eeebc88aef6c45237ffebd16bb670ffdd", + "bytes": 765 + }, + { + "path": "tests/golden/M16-GAP-00071/grease-pencil-vertex-weight-proximity-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00071/grease-pencil-vertex-weight-proximity-modifier-local-exact-report.json", + "sha256": "08a439a692bc167a2dff093527586132b3e1baca4a8d7be4dfd47cfe18a04bd9", + "bytes": 1302 + }, + { + "path": "tests/golden/M16-GAP-00071/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00071/manifest.json", + "sha256": "4415489e0e4d4ca2e5a81de4e74a9c17dcad65f94b30a95557c168ec1b0af9f7", + "bytes": 2158 + }, + { + "path": "tests/golden/M16-GAP-00072/hook-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00072/hook-modifier-desktop-report.json", + "sha256": "819375aad6fbf6814a1fe85802472d12df216a205067f5ee0e132a8d383f247d", + "bytes": 690 + }, + { + "path": "tests/golden/M16-GAP-00072/hook-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00072/hook-modifier-local-exact-report.json", + "sha256": "929d2a3e679e4972149ffac8ff1a7d692452cb9b1029418eea86434aa8d4c6d1", + "bytes": 1258 + }, + { + "path": "tests/golden/M16-GAP-00072/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00072/manifest.json", + "sha256": "574f682ccb0d9a56a04955b3cb493a368bf83eafdd85d9ecd4163f7c68bfbf7f", + "bytes": 2026 + }, + { + "path": "tests/golden/M16-GAP-00073/laplaciandeform-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00073/laplaciandeform-modifier-desktop-report.json", + "sha256": "20b1fa4731e697c539cbeda56daf567a39ea0e4157519480400d3aa0116b5d9c", + "bytes": 757 + }, + { + "path": "tests/golden/M16-GAP-00073/laplaciandeform-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00073/laplaciandeform-modifier-local-exact-report.json", + "sha256": "4661ab5868a5664206f47bebbc93f6f0cc4dcaab362f45d59540c8900a3c4ca2", + "bytes": 1219 + }, + { + "path": "tests/golden/M16-GAP-00073/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00073/manifest.json", + "sha256": "898c103c060209a2faaef4d07123b1dc9d654ed7bfba98c43a5b97c3b6571292", + "bytes": 2070 + }, + { + "path": "tests/golden/M16-GAP-00074/laplaciansmooth-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00074/laplaciansmooth-modifier-desktop-report.json", + "sha256": "9aa6928bb41744895ec5d471a3c290d5880d75357f556c310f692dfbf0c587a6", + "bytes": 757 + }, + { + "path": "tests/golden/M16-GAP-00074/laplaciansmooth-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00074/laplaciansmooth-modifier-local-exact-report.json", + "sha256": "0ae4447208034f80469647e51469225032cb0e8f40b6e887d2aa66888d8b9d65", + "bytes": 1219 + }, + { + "path": "tests/golden/M16-GAP-00074/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00074/manifest.json", + "sha256": "93125c3550c043e2c07c50d99c9b683214d851000cc7e7030b0cc118a4031622", + "bytes": 2070 + }, + { + "path": "tests/golden/M16-GAP-00075/lattice-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00075/lattice-modifier-desktop-report.json", + "sha256": "c06a312fdf79abca4eb6560e271e62adfdc79e4b8fd61db57cf53c148195cd6a", + "bytes": 732 + }, + { + "path": "tests/golden/M16-GAP-00075/lattice-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00075/lattice-modifier-local-exact-report.json", + "sha256": "62bf9e34273df25cddda1f64b614626cac4163e861c253cb44b39624390266f5", + "bytes": 1269 + }, + { + "path": "tests/golden/M16-GAP-00075/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00075/manifest.json", + "sha256": "9d518397037f8776147f7d261003a191274ee82f9c20b3de036e6b1f7d33fe20", + "bytes": 2038 + }, + { + "path": "tests/golden/M16-GAP-00076/lineart-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00076/lineart-modifier-desktop-report.json", + "sha256": "dfc59d7f349a96352e9b7147cf2745754664513b17f8541828552cd04d6e2434", + "bytes": 657 + }, + { + "path": "tests/golden/M16-GAP-00076/lineart-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00076/lineart-modifier-local-exact-report.json", + "sha256": "b97956de8af04e761d23e69c7c40f31ddfafe0fa54e600123154c77a74ee41f1", + "bytes": 1166 + }, + { + "path": "tests/golden/M16-GAP-00076/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00076/manifest.json", + "sha256": "cbf9772af4492d6c4f9abf43a14a8c0137ab08e20a6a308c0d863291524f8596", + "bytes": 2038 + }, + { + "path": "tests/golden/M16-GAP-00077/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00077/manifest.json", + "sha256": "260a2e5906d78901cba540fab58252eba893f29f0e27b9a214e720ed20c6ed52", + "bytes": 2026 + }, + { + "path": "tests/golden/M16-GAP-00077/mask-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00077/mask-modifier-desktop-report.json", + "sha256": "b727c810beee272ab8f70754d50aed53404ec5a5d9147f912d6f880d1554576f", + "bytes": 686 + }, + { + "path": "tests/golden/M16-GAP-00077/mask-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00077/mask-modifier-local-exact-report.json", + "sha256": "ef4b6d8b4c1fb2d336fafebe4f232478704d442d8b166305d8c0dbed0523bed6", + "bytes": 1126 + }, + { + "path": "tests/golden/M16-GAP-00078/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00078/manifest.json", + "sha256": "a2da8c09eda6ee4420430f5c0bebb9c6c003de59d592e5a2978e029d6451dea5", + "bytes": 2050 + }, + { + "path": "tests/golden/M16-GAP-00078/mesh-cache-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00078/mesh-cache-modifier-desktop-report.json", + "sha256": "4f78ab7adae556fb49dfde5b4c4e95f9bb0c2777c8425bc48d410955d9686d46", + "bytes": 719 + }, + { + "path": "tests/golden/M16-GAP-00078/mesh-cache-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00078/mesh-cache-modifier-local-exact-report.json", + "sha256": "6d6baa891a387fe56c4ee27c3bc5bde6ecb28f6a6e71f49c1560fe04b26d24df", + "bytes": 1172 + }, + { + "path": "tests/golden/M16-GAP-00079/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00079/manifest.json", + "sha256": "25145a8a88ddeb465b4e90f6e1ffc194491dfd1e491d443fec3f6338896199b7", + "bytes": 2054 + }, + { + "path": "tests/golden/M16-GAP-00079/mesh-deform-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00079/mesh-deform-modifier-desktop-report.json", + "sha256": "8f7ae61828ea8395a3dd1a5f01ccef9e634b03cf831b2d80f891c2db434190af", + "bytes": 725 + }, + { + "path": "tests/golden/M16-GAP-00079/mesh-deform-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00079/mesh-deform-modifier-local-exact-report.json", + "sha256": "6a2be2737f7510539d27d0504b47012dc801b5a3b428f1ab6f2264f4df2ded87", + "bytes": 1266 + }, + { + "path": "tests/golden/M16-GAP-00080/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00080/manifest.json", + "sha256": "b8f2e61553de96ae88741ad60e94995faff014cfca357d379393365c1819a100", + "bytes": 2086 + }, + { + "path": "tests/golden/M16-GAP-00080/mesh-sequence-cache-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00080/mesh-sequence-cache-modifier-desktop-report.json", + "sha256": "0dfdf7f2e779c96397d0686f0d8ef9ba21e017c80a47da1b04639721942f3b2a", + "bytes": 770 + }, + { + "path": "tests/golden/M16-GAP-00080/mesh-sequence-cache-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00080/mesh-sequence-cache-modifier-local-exact-report.json", + "sha256": "086758c58ae3b0b7124fd35b802d8ec3ad3254ff8e71f668ff976e05725a3a31", + "bytes": 1240 + }, + { + "path": "tests/golden/M16-GAP-00081/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00081/manifest.json", + "sha256": "7c490963a0da309cdd3efdaf7897078c6f34afc9e4564e90a6c1cdc1d968d29f", + "bytes": 2066 + }, + { + "path": "tests/golden/M16-GAP-00081/mesh-to-volume-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00081/mesh-to-volume-modifier-desktop-report.json", + "sha256": "0a485f27d6f6246d74e3737b8b945715fca96f343a675257dab9abb70319bb1d", + "bytes": 695 + }, + { + "path": "tests/golden/M16-GAP-00081/mesh-to-volume-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00081/mesh-to-volume-modifier-local-exact-report.json", + "sha256": "af033e5bd3d0491f464db098661621f0ac32afdcbed61a76614f4f06125559aa", + "bytes": 1153 + }, + { + "path": "tests/golden/M16-GAP-00082/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00082/manifest.json", + "sha256": "bc9ff66b3d9c9e4615e36de8c374862dc36fc771b7ba9695b97df64cb1ba52c5", + "bytes": 2034 + }, + { + "path": "tests/golden/M16-GAP-00082/mirror-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00082/mirror-modifier-desktop-report.json", + "sha256": "cc149f9c8f6f3b59ebf0b07f891d8b023d889cf2f281a7f1fce9f0f62b72e2ee", + "bytes": 696 + }, + { + "path": "tests/golden/M16-GAP-00082/mirror-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00082/mirror-modifier-local-exact-report.json", + "sha256": "a0d7259bba97e30b97d57b776e3b067cd4bbd7ed734fcd8867c24efa4b5c469d", + "bytes": 1198 + }, + { + "path": "tests/golden/M16-GAP-00083/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00083/manifest.json", + "sha256": "0b15ecd4d714c03caa302b6867727f07e7d9e18a0e6322faa778ed02e61a4525", + "bytes": 2042 + }, + { + "path": "tests/golden/M16-GAP-00083/multires-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00083/multires-modifier-desktop-report.json", + "sha256": "ad00dd2b8cadad79107f8433f06324f05ff5cb9672ca31bbab358813a48d3eaf", + "bytes": 710 + }, + { + "path": "tests/golden/M16-GAP-00083/multires-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00083/multires-modifier-local-exact-report.json", + "sha256": "d6ec0b7cf1eba19e79174c8d137ec1dd92eca40b7438f1739ce74df18bf712bb", + "bytes": 1158 + }, + { + "path": "tests/golden/M16-GAP-00084/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00084/manifest.json", + "sha256": "6b45c2288c85824a9d3492f3dd5cdfba56df7f7a45d8e88bf410361876fd638b", + "bytes": 2030 + }, + { + "path": "tests/golden/M16-GAP-00084/nodes-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00084/nodes-modifier-desktop-report.json", + "sha256": "d5de72e4e7fd671474d0a385818337063952eecb3e765a694ddda811a420c9fc", + "bytes": 691 + }, + { + "path": "tests/golden/M16-GAP-00084/nodes-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00084/nodes-modifier-local-exact-report.json", + "sha256": "987e987122bb5eac6f0208b0d453b59aa0b1e46888c17c68db1501fd04ed2432", + "bytes": 1139 + }, + { + "path": "tests/golden/M16-GAP-00085/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00085/manifest.json", + "sha256": "4c1933a0d6f5e2828eda287e0e05422f30336a17217529b7e18d9fd8cd333380", + "bytes": 2054 + }, + { + "path": "tests/golden/M16-GAP-00085/normal-edit-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00085/normal-edit-modifier-desktop-report.json", + "sha256": "cc4dfff0ac64efdd2e93eaee11fcfd7f9e2fe55fd4e21ea1e5f1a72dd14855cf", + "bytes": 724 + }, + { + "path": "tests/golden/M16-GAP-00085/normal-edit-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00085/normal-edit-modifier-local-exact-report.json", + "sha256": "bbe513c4076d32a374083c0ae4ad6069e97f411a25bccb968e2f06c0b361da88", + "bytes": 1175 + }, + { + "path": "tests/golden/M16-GAP-00086/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00086/manifest.json", + "sha256": "5c40b1c44f08c2d2729a99a8777bbd7f0185774aae540cc2ca713a68d04164de", + "bytes": 2030 + }, + { + "path": "tests/golden/M16-GAP-00086/ocean-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00086/ocean-modifier-desktop-report.json", + "sha256": "d2217b8def179e48ea11a5bfcd9376765d2fca8ce22d1673b3d46d284f21af3f", + "bytes": 691 + }, + { + "path": "tests/golden/M16-GAP-00086/ocean-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00086/ocean-modifier-local-exact-report.json", + "sha256": "33a86a21a856190f97c618df2aa307ad102e11da5260ce45f48aec961bf1acdd", + "bytes": 1135 + }, + { + "path": "tests/golden/M16-GAP-00087/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00087/manifest.json", + "sha256": "a4f27a71fefea748d08bca8e6ef5741e094604aec8c00a505a63dcc491306050", + "bytes": 2078 + }, + { + "path": "tests/golden/M16-GAP-00087/particle-instance-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00087/particle-instance-modifier-desktop-report.json", + "sha256": "a680090b9010d79608825fa02593b6a27506e233bf331b043085a41bf3d912a8", + "bytes": 760 + }, + { + "path": "tests/golden/M16-GAP-00087/particle-instance-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00087/particle-instance-modifier-local-exact-report.json", + "sha256": "b68f61eb0596709da28a4ca0e4f19e3bc6f213191ff64c40c04d2be9ed5dbde7", + "bytes": 1225 + }, + { + "path": "tests/golden/M16-GAP-00088/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00088/manifest.json", + "sha256": "6fc982fa3d2de26546a5825e90f5b0ff3c5f9243e92acaf49636598b7d5971f1", + "bytes": 2767 + }, + { + "path": "tests/golden/M16-GAP-00088/particle-system-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00088/particle-system-modifier-desktop-report.json", + "sha256": "a53c039a969a1a9affe57d435c281707882fcdb2f4772473801fed6c8ee45914", + "bytes": 749 + }, + { + "path": "tests/golden/M16-GAP-00088/particle-system-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00088/particle-system-modifier-local-exact-report.json", + "sha256": "905fae2ec36e1447a28d314cfc6ddce00dd71ddf090be505b16b76860f5e3643", + "bytes": 1212 + }, + { + "path": "tests/golden/M16-GAP-00089/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00089/manifest.json", + "sha256": "ae9b642d9e35b4a5b14cec69a949fe4aaf7dbe3216fa03c08406a75847d0629c", + "bytes": 2731 + }, + { + "path": "tests/golden/M16-GAP-00089/remesh-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00089/remesh-modifier-desktop-report.json", + "sha256": "ac36dcb7a2c59b6f8df45b67b00f45966c38de93dbfa8d016aeef77a8a92b665", + "bytes": 698 + }, + { + "path": "tests/golden/M16-GAP-00089/remesh-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00089/remesh-modifier-local-exact-report.json", + "sha256": "0cc329e5779c02b15cdffc48030451134017870505149a10b9c5e23876d83ba6", + "bytes": 1144 + }, + { + "path": "tests/golden/M16-GAP-00090/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00090/manifest.json", + "sha256": "072103cdb6d1884c18d422358b33f03ca1ebb0bbf7291d7958f25c3e8cb4bf75", + "bytes": 2727 + }, + { + "path": "tests/golden/M16-GAP-00090/screw-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00090/screw-modifier-desktop-report.json", + "sha256": "af225b5b2f660ae70fe0315527b79d5e74db996db3722222bed98194023de28e", + "bytes": 691 + }, + { + "path": "tests/golden/M16-GAP-00090/screw-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00090/screw-modifier-local-exact-report.json", + "sha256": "3998657085e2d1f963540cd97afd7980cdcd50ec96897ab22d612183a0e5e531", + "bytes": 1226 + }, + { + "path": "tests/golden/M16-GAP-00091/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00091/manifest.json", + "sha256": "823439143108c583ca5bb20aa86dc628a1d9227d7beeef98c601f2d5b27f3aa3", + "bytes": 2747 + }, + { + "path": "tests/golden/M16-GAP-00091/shrinkwrap-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00091/shrinkwrap-modifier-desktop-report.json", + "sha256": "4bc01b8e0d79256b2e5fa9e149bc53667790eab383beda260fdff77d6f4f0c6e", + "bytes": 721 + }, + { + "path": "tests/golden/M16-GAP-00091/shrinkwrap-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00091/shrinkwrap-modifier-local-exact-report.json", + "sha256": "db44cad8b1b6173303ca5f63c442eb82805324e08c6786323f6803803d52d391", + "bytes": 1315 + }, + { + "path": "tests/golden/M16-GAP-00092/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00092/manifest.json", + "sha256": "87f0158baee779ddf751287c0bee3f0b0fa0196cb5869817d959fd654d9d5e01", + "bytes": 2759 + }, + { + "path": "tests/golden/M16-GAP-00092/simple-deform-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00092/simple-deform-modifier-desktop-report.json", + "sha256": "532ad0f944d179ec640fdf706b9e4e78eaaa3635410b404f7a146b68a400768c", + "bytes": 736 + }, + { + "path": "tests/golden/M16-GAP-00092/simple-deform-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00092/simple-deform-modifier-local-exact-report.json", + "sha256": "24eacc0f43139fbd4fe232e9418d7c81a8eee8bc9b10b15bc2818e1df0794aff", + "bytes": 1291 + }, + { + "path": "tests/golden/M16-GAP-00093/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00093/manifest.json", + "sha256": "80353dc192b8e9e21624ab1acb0102648d6e743c36bfac2af5ddb92707f414b5", + "bytes": 2723 + }, + { + "path": "tests/golden/M16-GAP-00093/skin-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00093/skin-modifier-desktop-report.json", + "sha256": "cf30f79bb5f5e90749068d678a6746808c87175aa9ad51117f69b6b90aad7884", + "bytes": 685 + }, + { + "path": "tests/golden/M16-GAP-00093/skin-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00093/skin-modifier-local-exact-report.json", + "sha256": "e2df081504aab183867915c78f4829d90e51fb610586a1722752cceaee0da674", + "bytes": 1214 + }, + { + "path": "tests/golden/M16-GAP-00094/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00094/manifest.json", + "sha256": "50a37762ad06ba05266dacc84dd0370e718b2fd98ae235d1bf9a975530cee31a", + "bytes": 2731 + }, + { + "path": "tests/golden/M16-GAP-00094/smooth-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00094/smooth-modifier-desktop-report.json", + "sha256": "762f02f1f460bd1deb71a7441ff85b969ff8ef916b32d95e46fe243ce110d1cb", + "bytes": 813 + }, + { + "path": "tests/golden/M16-GAP-00094/smooth-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00094/smooth-modifier-local-exact-report.json", + "sha256": "0373da7c5ce2b369840c080bfe5dd341596208098fc2f3c3ae864031d965bc6c", + "bytes": 1267 + }, + { + "path": "tests/golden/M16-GAP-00095/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00095/manifest.json", + "sha256": "9fa2c3ed7fbee3b52c0cb2f629f7886e492cfec2a2a4d11b93f33a0a16d7a92e", + "bytes": 2743 + }, + { + "path": "tests/golden/M16-GAP-00095/soft-body-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00095/soft-body-modifier-desktop-report.json", + "sha256": "5228fc63f22473e4e1ef9d82e9018c4739c6b63469da4b693240ac307336bba7", + "bytes": 713 + }, + { + "path": "tests/golden/M16-GAP-00095/soft-body-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00095/soft-body-modifier-local-exact-report.json", + "sha256": "e0767cb702d9c0612c8e8bc140dd2e00f5af6f782c3f63c5ae15407a6c5fcaa9", + "bytes": 1168 + }, + { + "path": "tests/golden/M16-GAP-00096/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00096/manifest.json", + "sha256": "f539f112a4c5aaa4565554d8a3d5947c9c77a8d8df8ef8f39adbc1b1146a2b8b", + "bytes": 2739 + }, + { + "path": "tests/golden/M16-GAP-00096/solidify-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00096/solidify-modifier-desktop-report.json", + "sha256": "914187f8ec57e442d85fae5710aa98bd058e91930bdacd7928694281bad54df3", + "bytes": 784 + }, + { + "path": "tests/golden/M16-GAP-00096/solidify-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00096/solidify-modifier-local-exact-report.json", + "sha256": "b6437999773cc18296a54e041c8df8b33d595f9ebe67c826a47f62308d307232", + "bytes": 1242 + }, + { + "path": "tests/golden/M16-GAP-00097/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00097/manifest.json", + "sha256": "df24b8387d70f8c6ca35306fb7994b056801c0f700769584d718bf30a885adee", + "bytes": 2735 + }, + { + "path": "tests/golden/M16-GAP-00097/subsurf-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00097/subsurf-modifier-desktop-report.json", + "sha256": "e1ce95f66a26b4e687bd32fc6f975044033d921703954e0e26674dfbce556bea", + "bytes": 774 + }, + { + "path": "tests/golden/M16-GAP-00097/subsurf-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00097/subsurf-modifier-local-exact-report.json", + "sha256": "c146dabc29a94e25df4f09e6de727a3377f48ea706dbe74f51b903efbc5a293d", + "bytes": 1234 + }, + { + "path": "tests/golden/M16-GAP-00098/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00098/manifest.json", + "sha256": "c447e41b823dd1c7bd59619771424eb733bd257a58029de4b794edb5b544f7e2", + "bytes": 2735 + }, + { + "path": "tests/golden/M16-GAP-00098/surface-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00098/surface-modifier-desktop-report.json", + "sha256": "75a588cd606fe0395c7f6541eed4ca26daa0109d7f6fa62cffe87e41149d0a95", + "bytes": 704 + }, + { + "path": "tests/golden/M16-GAP-00098/surface-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00098/surface-modifier-local-exact-report.json", + "sha256": "7b004c755290ebe920a9296a7768ff3231eaec66e1836536d98dffa4d6c6dbab", + "bytes": 1150 + }, + { + "path": "tests/golden/M16-GAP-00099/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00099/manifest.json", + "sha256": "08e66a8c4bede64bcfc0e6625843f70f4e51b03be655b0078110e086ce599a7b", + "bytes": 2763 + }, + { + "path": "tests/golden/M16-GAP-00099/surface-deform-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00099/surface-deform-modifier-desktop-report.json", + "sha256": "bfd91c545efcf0688bfa9cee24e65de82224eecf715a1ab4385061a7d7df4db1", + "bytes": 743 + }, + { + "path": "tests/golden/M16-GAP-00099/surface-deform-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00099/surface-deform-modifier-local-exact-report.json", + "sha256": "7d5f760727e03951c3f5b2c3e885b33ce92af7293ca101732fa490136dc25ed5", + "bytes": 1313 + }, + { + "path": "tests/golden/M16-GAP-00100/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00100/manifest.json", + "sha256": "2acecca22e6e3cbcaf6fad687cff49558182f1b16a9052d303162e863c2fb17e", + "bytes": 2751 + }, + { + "path": "tests/golden/M16-GAP-00100/triangulate-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00100/triangulate-modifier-desktop-report.json", + "sha256": "8e1472c739110448d2c1987c32403714b9465606c0e8b3a8e3ae4867743ba377", + "bytes": 773 + }, + { + "path": "tests/golden/M16-GAP-00100/triangulate-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00100/triangulate-modifier-local-exact-report.json", + "sha256": "d715e77c6e2ef82c9611a68a3808057d08feb3de715ab1a3f07c6e1b67b6b69d", + "bytes": 1239 + }, + { + "path": "tests/golden/M16-GAP-00101/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00101/manifest.json", + "sha256": "ada91eacc9d9d81aef07ba22a8522fa5968491bb202b84db74649098901cefbc", + "bytes": 2747 + }, + { + "path": "tests/golden/M16-GAP-00101/uv-project-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00101/uv-project-modifier-desktop-report.json", + "sha256": "18364763d8956b1426ae0ce7809491562d66833cbf77b7e00b141c002c54d8ed", + "bytes": 718 + }, + { + "path": "tests/golden/M16-GAP-00101/uv-project-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00101/uv-project-modifier-local-exact-report.json", + "sha256": "b0605455ac7287165072c928a06d556af759f9f7bd1ba1fac32cccb0ca0e0556", + "bytes": 1169 + }, + { + "path": "tests/golden/M16-GAP-00102/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00102/manifest.json", + "sha256": "57cf7929d23fbc053782f4bbe4c480bd9432c2af6cfdab74f9e4bc0160c0e7ad", + "bytes": 2735 + }, + { + "path": "tests/golden/M16-GAP-00102/uv-warp-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00102/uv-warp-modifier-desktop-report.json", + "sha256": "ed6bf6150e20eef0b7207397cee12db3408836075866f05bb48da92e706ab828", + "bytes": 700 + }, + { + "path": "tests/golden/M16-GAP-00102/uv-warp-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00102/uv-warp-modifier-local-exact-report.json", + "sha256": "9499f499401b3703ee7e4ebab55516710fc235f08cdbd93271d9b348b066ba5f", + "bytes": 1147 + }, + { + "path": "tests/golden/M16-GAP-00103/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00103/manifest.json", + "sha256": "b6e93793349780cbc30a543d5c6abc9c5ba19df2acb62419a6a25b6da816fb21", + "bytes": 2782 + }, + { + "path": "tests/golden/M16-GAP-00103/vertex-weight-edit-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00103/vertex-weight-edit-modifier-desktop-report.json", + "sha256": "442287f280444efcc0dcfc8602d935066af17aeca0072e978f64ffa3e6e13b9d", + "bytes": 764 + }, + { + "path": "tests/golden/M16-GAP-00103/vertex-weight-edit-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00103/vertex-weight-edit-modifier-local-exact-report.json", + "sha256": "23d26e90775bce127efb1a8572c7a9f92acdf4d22b41bd1de6c78a11b7246ba8", + "bytes": 1232 + }, + { + "path": "tests/golden/M16-GAP-00104/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00104/manifest.json", + "sha256": "47790989f092bf86ec6f628d88249455428265d6d0f5e4cffa1d9d55e87757b2", + "bytes": 2778 + }, + { + "path": "tests/golden/M16-GAP-00104/vertex-weight-mix-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00104/vertex-weight-mix-modifier-desktop-report.json", + "sha256": "6121a089239450b95037c25858958ab5d067af538657f56452fdce81186834a6", + "bytes": 758 + }, + { + "path": "tests/golden/M16-GAP-00104/vertex-weight-mix-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00104/vertex-weight-mix-modifier-local-exact-report.json", + "sha256": "a755e5c88c8a22305155dc02c455e9fe6ccb1e92b7053be7a3ca57da2aa48971", + "bytes": 1224 + }, + { + "path": "tests/golden/M16-GAP-00105/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00105/manifest.json", + "sha256": "cf9de11d57b483cf564f2f3e782724ca84f86ddfc6e320e757051a50912281d7", + "bytes": 2802 + }, + { + "path": "tests/golden/M16-GAP-00105/vertex-weight-proximity-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00105/vertex-weight-proximity-modifier-desktop-report.json", + "sha256": "7e6ebaf459de04781a6e6467be84c6065039a4f3fb6b4c748fcbeda3b4806179", + "bytes": 794 + }, + { + "path": "tests/golden/M16-GAP-00105/vertex-weight-proximity-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00105/vertex-weight-proximity-modifier-local-exact-report.json", + "sha256": "7594f78376b061793524a4c586ecd2335d7aa9064d4e31b840f92e03819fac1f", + "bytes": 1272 + }, + { + "path": "tests/golden/M16-GAP-00106/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00106/manifest.json", + "sha256": "a2d9d12cc1bfdd28c4766ca951d1d63aff3cb53631d36f618e85918a3b7c717d", + "bytes": 2770 + }, + { + "path": "tests/golden/M16-GAP-00106/volume-displace-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00106/volume-displace-modifier-desktop-report.json", + "sha256": "00ee176bc712320454f7ddb585710ccab243b9b5b89f2e2f0eb364c536bddcd6", + "bytes": 702 + }, + { + "path": "tests/golden/M16-GAP-00106/volume-displace-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00106/volume-displace-modifier-local-exact-report.json", + "sha256": "9c44441bc0cfadbdce570f5c3e7b074e3da00f19a7f8a2e8d84d0ae6167164f8", + "bytes": 1165 + }, + { + "path": "tests/golden/M16-GAP-00107/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00107/manifest.json", + "sha256": "760706922c497ed0898b84fd07789d0d8c53f5a448191ad6c2425d1d7e13ad20", + "bytes": 2766 + }, + { + "path": "tests/golden/M16-GAP-00107/volume-to-mesh-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00107/volume-to-mesh-modifier-desktop-report.json", + "sha256": "7cbfeae24f5f74a8b9509da418a65520a595530b164733bbd9ecf9de99212f02", + "bytes": 740 + }, + { + "path": "tests/golden/M16-GAP-00107/volume-to-mesh-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00107/volume-to-mesh-modifier-local-exact-report.json", + "sha256": "1083d3e4144e172245c61b1ff8afa8b1bcf80b9bfae4d066e7eb0cfab80f5279", + "bytes": 1198 + }, + { + "path": "tests/golden/M16-GAP-00108/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00108/manifest.json", + "sha256": "4a3c0e88bba11217d661ea22c62cc01fe15379527cec68b8b7c92d01042ecda2", + "bytes": 2726 + }, + { + "path": "tests/golden/M16-GAP-00108/warp-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00108/warp-modifier-desktop-report.json", + "sha256": "5daba0b7befe92e75dab3dca35e00ee1e3c211ab02e9f5ec3ec9bdb5c6164250", + "bytes": 686 + }, + { + "path": "tests/golden/M16-GAP-00108/warp-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00108/warp-modifier-local-exact-report.json", + "sha256": "0aeac2276b0828180780358383b626295b1ef43fece15ac6fcadff880f861dd3", + "bytes": 1126 + }, + { + "path": "tests/golden/M16-GAP-00109/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00109/manifest.json", + "sha256": "8af6813c16138942441f7772e08a6f2c6586e21c665248ee7566be5f26279081", + "bytes": 2726 + }, + { + "path": "tests/golden/M16-GAP-00109/wave-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00109/wave-modifier-desktop-report.json", + "sha256": "ddec88c688169daaaeda211a7b5b1ad2a7e9bd2f5baf29c8c85c5d5ae2265f3c", + "bytes": 778 + }, + { + "path": "tests/golden/M16-GAP-00109/wave-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00109/wave-modifier-local-exact-report.json", + "sha256": "29e011eec263333878bc92b5514ec9b153142872bd59d89cecba740395f7e7bc", + "bytes": 1232 + }, + { + "path": "tests/golden/M16-GAP-00110/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00110/manifest.json", + "sha256": "a1432f7c5e7f4d3891e00872c9023890b177806eebd3f988ba6f5968817a9ea7", + "bytes": 2770 + }, + { + "path": "tests/golden/M16-GAP-00110/weighted-normal-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00110/weighted-normal-modifier-desktop-report.json", + "sha256": "ae59fdc10466bfa461dbaed1aa45bb2ac6211b8a303e58de8ea3ee9c5e0e40ba", + "bytes": 825 + }, + { + "path": "tests/golden/M16-GAP-00110/weighted-normal-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00110/weighted-normal-modifier-local-exact-report.json", + "sha256": "6360a1706e7456a5d51fa2effbc7505cd7209818690ab1b7665abf0bbff7a311", + "bytes": 1239 + }, + { + "path": "tests/golden/M16-GAP-00111/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00111/manifest.json", + "sha256": "62531e22304954c1ded239004e91c95f9c42d8c9d43d039e339be52e68b20c8f", + "bytes": 2726 + }, + { + "path": "tests/golden/M16-GAP-00111/weld-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00111/weld-modifier-desktop-report.json", + "sha256": "cef902e3eaaae85c8c441320ed1dad00b1193a73003c098e61ba179538972d9d", + "bytes": 716 + }, + { + "path": "tests/golden/M16-GAP-00111/weld-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00111/weld-modifier-local-exact-report.json", + "sha256": "91ec33d946f8b526ae5af1f0b533896e5c6678655b9ddaa844ca5fafdb773e9e", + "bytes": 1166 + }, + { + "path": "tests/golden/M16-GAP-00112/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00112/manifest.json", + "sha256": "3d8defe2c37894bcc30e7e752499016b89101057f68301d19dcb24414e682d55", + "bytes": 2743 + }, + { + "path": "tests/golden/M16-GAP-00112/wireframe-modifier-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00112/wireframe-modifier-desktop-report.json", + "sha256": "f83750dfca898b529013b6d3fbefa283e5800a00312c3c613d06735a362ee26a", + "bytes": 756 + }, + { + "path": "tests/golden/M16-GAP-00112/wireframe-modifier-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00112/wireframe-modifier-local-exact-report.json", + "sha256": "b74f89e88d7e280175c4ff534ebf20477ca35aed189b53ebd4a69fbdacc7e92c", + "bytes": 1216 + }, + { + "path": "tests/golden/M16-GAP-00113/action-bake-keys-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00113/action-bake-keys-desktop-report.json", + "sha256": "3226d30e020b3384b3a5504c72fe1481f43c048f0827ff6bcbfa1327d9cfd330", + "bytes": 956 + }, + { + "path": "tests/golden/M16-GAP-00113/action-bake-keys-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00113/action-bake-keys-local-exact-report.json", + "sha256": "d8a6aaa82c299916a37f2b8ef477349ac675a930d95ff7800450dc6e5a282d58", + "bytes": 842 + }, + { + "path": "tests/golden/M16-GAP-00113/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00113/manifest.json", + "sha256": "284d37f62f121504e0f50beb0e0cb96dde49c12e3fbd35b151dbb9389673704d", + "bytes": 2747 + }, + { + "path": "tests/golden/M16-GAP-00114/action-clean-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00114/action-clean-desktop-report.json", + "sha256": "94e987bcc4704cc880a88b510d7f01a2b990c04a109c9296b6e896d108d1e95d", + "bytes": 786 + }, + { + "path": "tests/golden/M16-GAP-00114/action-clean-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00114/action-clean-local-exact-report.json", + "sha256": "58e3dfb9fc14a88bc57c616d02870ce0cb995a596f84bc57a686eb63e2e2952a", + "bytes": 756 + }, + { + "path": "tests/golden/M16-GAP-00114/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00114/manifest.json", + "sha256": "de0839580800f06f6f0d9291a8aabc97083ee19434f94f0a943fc2f2efd11fc1", + "bytes": 2225 + }, + { + "path": "tests/golden/M16-GAP-00115/action-clickselect-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00115/action-clickselect-desktop-report.json", + "sha256": "8f6090591fd02d88ea4714ed6a570bbe1e9315226a7496a1382a1bcfb4a8dfe6", + "bytes": 1199 + }, + { + "path": "tests/golden/M16-GAP-00115/action-clickselect-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00115/action-clickselect-local-exact-report.json", + "sha256": "ca2832eaceaf118bc1ce6b3efef1d5c4f9c63dae410d451b42b42f62316bbe37", + "bytes": 812 + }, + { + "path": "tests/golden/M16-GAP-00115/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00115/manifest.json", + "sha256": "186aba8a5d9e660604321526dfd3d47b4389f358acdc620bd2966a61f833fc11", + "bytes": 2057 + }, + { + "path": "tests/golden/M16-GAP-00116/action-copy-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00116/action-copy-desktop-report.json", + "sha256": "688cff599ed4b5b6ff17bc79141a040f8f9de59e6912285ae294af68efed0772", + "bytes": 1157 + }, + { + "path": "tests/golden/M16-GAP-00116/action-copy-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00116/action-copy-local-exact-report.json", + "sha256": "d1698dbf04e3d7c7983734cdc88c7b109f61e10b33b09192e4576c60e2762b5e", + "bytes": 842 + }, + { + "path": "tests/golden/M16-GAP-00116/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00116/manifest.json", + "sha256": "36ca61fedaeec33d50141058224f4907f09535027a966552d9edaf5922111870", + "bytes": 2022 + }, + { + "path": "tests/golden/M16-GAP-00117/action-delete-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00117/action-delete-desktop-report.json", + "sha256": "9c3f91e026c110496626bc0214a719c5475c71357572f6861cc0287a2948169e", + "bytes": 1045 + }, + { + "path": "tests/golden/M16-GAP-00117/action-delete-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00117/action-delete-local-exact-report.json", + "sha256": "a2b9dda82da0c7a7751ac7bf36a958a624291a8ebe4cea12d54587fb3f441aa2", + "bytes": 859 + }, + { + "path": "tests/golden/M16-GAP-00117/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00117/manifest.json", + "sha256": "d8f39b623121af30f36767bf0a89c3e4aba7ae23802563023aa7362b814d8da1", + "bytes": 2032 + }, + { + "path": "tests/golden/M16-GAP-00118/action-duplicate-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00118/action-duplicate-desktop-report.json", + "sha256": "1b84545f6b5f01877c191170b8b5a0d21035e5448373506b4cca50399780e1be", + "bytes": 1246 + }, + { + "path": "tests/golden/M16-GAP-00118/action-duplicate-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00118/action-duplicate-local-exact-report.json", + "sha256": "31b61f287906adee9b83d2c05cb302b76012cf5284f96cf45a8ea349a855c320", + "bytes": 947 + }, + { + "path": "tests/golden/M16-GAP-00118/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00118/manifest.json", + "sha256": "63e6ecd36ef8c608d7c136ad5a2d62163d05802408f61264da99c3db50782b65", + "bytes": 2047 + }, + { + "path": "tests/golden/M16-GAP-00119/action-duplicate-move-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00119/action-duplicate-move-desktop-report.json", + "sha256": "f1ba7739899913c3478ce9f2e1bfb92b7a73ccebe3176e98d2e9c57072ab7d97", + "bytes": 1174 + }, + { + "path": "tests/golden/M16-GAP-00119/action-duplicate-move-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00119/action-duplicate-move-local-exact-report.json", + "sha256": "47d8a5de2a50807b33695b011ba1774883c3c8823a6326a3bfc537fab4a2ef52", + "bytes": 889 + }, + { + "path": "tests/golden/M16-GAP-00119/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00119/manifest.json", + "sha256": "960935bcb27b8a77d43b5ebc78f9ab851df84089a90d3dcf1958990cb1243086", + "bytes": 2072 + }, + { + "path": "tests/golden/M16-GAP-00120/action-easing-type-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00120/action-easing-type-desktop-report.json", + "sha256": "e34d9007483d2913166486f7fe736adae145ca27b1b90240ce36e62c4b8f1bbc", + "bytes": 1422 + }, + { + "path": "tests/golden/M16-GAP-00120/action-easing-type-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00120/action-easing-type-local-exact-report.json", + "sha256": "9ce9af87fc9f42682de1fa7b02f3f320a64965dad5e3a34f808dbb072481896c", + "bytes": 977 + }, + { + "path": "tests/golden/M16-GAP-00120/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00120/manifest.json", + "sha256": "a517d68211696c3dc4110b07497eba5d07223d90e6f6a42ecf0aa9b01f8ea68f", + "bytes": 2057 + }, + { + "path": "tests/golden/M16-GAP-00121/action-extrapolation-type-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00121/action-extrapolation-type-desktop-report.json", + "sha256": "d9c594e10b0196fb9a906cbd6ed31f26196c8ee1ede6a23c50d3a6ac9de0012d", + "bytes": 1031 + }, + { + "path": "tests/golden/M16-GAP-00121/action-extrapolation-type-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00121/action-extrapolation-type-local-exact-report.json", + "sha256": "c898764e6629bfa752e6375c1944c579a02c62cb25059792fd9e582042a8a3ab", + "bytes": 856 + }, + { + "path": "tests/golden/M16-GAP-00121/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00121/manifest.json", + "sha256": "64ea4f3609b22c19864da33ba0a12a90ab715ead3777ce1b0f442e952ad4439a", + "bytes": 2092 + }, + { + "path": "tests/golden/M16-GAP-00122/action-frame-jump-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00122/action-frame-jump-desktop-report.json", + "sha256": "2a03fd1c8b4faea5fbf908e43df73758044dec705684842c0061023e999edf79", + "bytes": 1137 + }, + { + "path": "tests/golden/M16-GAP-00122/action-frame-jump-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00122/action-frame-jump-local-exact-report.json", + "sha256": "ac695d4436de8399842d39b412bb734c1e98d021f18a71c414627405aaa27fee", + "bytes": 829 + }, + { + "path": "tests/golden/M16-GAP-00122/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00122/manifest.json", + "sha256": "4ec934ccdafd4c9c01299b92f57fe2cc815739c3818f130e2ad88f06f4bbc8ea", + "bytes": 2052 + }, + { + "path": "tests/golden/M16-GAP-00123/action-handle-type-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00123/action-handle-type-desktop-report.json", + "sha256": "4e37880d7ed3a2f506c2b93b93883c282011d0578d656dfe4c461a4e111201c9", + "bytes": 1426 + }, + { + "path": "tests/golden/M16-GAP-00123/action-handle-type-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00123/action-handle-type-local-exact-report.json", + "sha256": "18fa52777177e3312534e981d7e2b1b6fd51b8ed72472c11f0959925907a6287", + "bytes": 964 + }, + { + "path": "tests/golden/M16-GAP-00123/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00123/manifest.json", + "sha256": "e457adeee2d07b5b0649a9fa8cdeec50349c778b1d87f4263117f00fbff13877", + "bytes": 2057 + }, + { + "path": "tests/golden/M16-GAP-00124/action-interpolation-type-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00124/action-interpolation-type-desktop-report.json", + "sha256": "94ec52af816fb75cfed2339ebb4b821b4aa13d822c6fe2697f9923309331804f", + "bytes": 1463 + }, + { + "path": "tests/golden/M16-GAP-00124/action-interpolation-type-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00124/action-interpolation-type-local-exact-report.json", + "sha256": "a93a5394419001a0555103f76c91653b1127a21a454a076d71a78050a00130d2", + "bytes": 1018 + }, + { + "path": "tests/golden/M16-GAP-00124/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00124/manifest.json", + "sha256": "b7079ef52e8f3f5082919893ebcd0cfd928da5e5534c8cf76b6ac57c430a2ae6", + "bytes": 2092 + }, + { + "path": "tests/golden/M16-GAP-00125/action-keyframe-insert-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00125/action-keyframe-insert-desktop-report.json", + "sha256": "6a4445c9725cdd1ce4bf97e510ef7f1772f47652fd3a0486c1fb8a4d7dbaa9fb", + "bytes": 1377 + }, + { + "path": "tests/golden/M16-GAP-00125/action-keyframe-insert-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00125/action-keyframe-insert-local-exact-report.json", + "sha256": "4e0d65afeac1d262fcad6e8c3756ed63529c6586261379f9d15fa1c971e67cc6", + "bytes": 922 + }, + { + "path": "tests/golden/M16-GAP-00125/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00125/manifest.json", + "sha256": "3deae0817d30f7fd5e2364588854a5f2d6f53c0bd65af0aff129bd3b5963e292", + "bytes": 2077 + }, + { + "path": "tests/golden/M16-GAP-00126/action-keyframe-type-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00126/action-keyframe-type-desktop-report.json", + "sha256": "dafa72f7acc2a84f993615e8ed963013a948980776cb96e19ef5bc0ebce578b6", + "bytes": 1464 + }, + { + "path": "tests/golden/M16-GAP-00126/action-keyframe-type-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00126/action-keyframe-type-local-exact-report.json", + "sha256": "42cc333a864b20769f80bba46cef162ce2c864509bcfc35191caac5405f2d5db", + "bytes": 1002 + }, + { + "path": "tests/golden/M16-GAP-00126/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00126/manifest.json", + "sha256": "4ebb164da2cdf017804eb62bbee8efbb492d8ebd2d8169ed27a2b0e00bdd2884", + "bytes": 2067 + }, + { + "path": "tests/golden/M16-GAP-00127/action-markers-make-local-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00127/action-markers-make-local-desktop-report.json", + "sha256": "ced98aa43f04b58ac2aa66fed217fe895cdadc108739b4c335942114e8a69ce0", + "bytes": 614 + }, + { + "path": "tests/golden/M16-GAP-00127/action-markers-make-local-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00127/action-markers-make-local-local-exact-report.json", + "sha256": "9b3737730a2f5fe7daa8a9a8109254daf4eeeacff25f632820288fb01ee45f6f", + "bytes": 828 + }, + { + "path": "tests/golden/M16-GAP-00127/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00127/manifest.json", + "sha256": "6b2acd64a827e36204caaf161388732f1cd14d5550df37433888333840984492", + "bytes": 2092 + }, + { + "path": "tests/golden/M16-GAP-00128/action-mirror-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00128/action-mirror-desktop-report.json", + "sha256": "ce9a779ce2d03bc2a2bda252c40aabb56c649be858fe82486ed04bfa96a04793", + "bytes": 1358 + }, + { + "path": "tests/golden/M16-GAP-00128/action-mirror-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00128/action-mirror-local-exact-report.json", + "sha256": "7a91dc7d6c72d100a7da42646adeb100efacf81dd25c2b12672281d86702b37b", + "bytes": 892 + }, + { + "path": "tests/golden/M16-GAP-00128/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00128/manifest.json", + "sha256": "5b2ff20601b47af62618619766f23864516b1ce724df95b29090341d6b0ba7c1", + "bytes": 2032 + }, + { + "path": "tests/golden/M16-GAP-00129/action-new-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00129/action-new-desktop-report.json", + "sha256": "834607cbbbd91aa8ad74ce2f8818cca54dd5adbf4e871b8733853c924eac8c75", + "bytes": 437 + }, + { + "path": "tests/golden/M16-GAP-00129/action-new-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00129/action-new-local-exact-report.json", + "sha256": "abe030dd587dd2e21d04a3755a9294eb26c545f5d645c0910c2eeed4b5670430", + "bytes": 749 + }, + { + "path": "tests/golden/M16-GAP-00129/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00129/manifest.json", + "sha256": "32e4da7c8e253a7203520de04f118dceb44ae9a32dbc874672818cc17570af45", + "bytes": 2017 + }, + { + "path": "tests/golden/M16-GAP-00130/action-paste-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00130/action-paste-desktop-report.json", + "sha256": "1494252e4ec2870131a2d810a5bc884374edf35272926a0943ac230a67e24fb7", + "bytes": 1190 + }, + { + "path": "tests/golden/M16-GAP-00130/action-paste-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00130/action-paste-local-exact-report.json", + "sha256": "6f37a4b1cf1af54bd8437a0df2ed4389f12fa830e298f86c2f70b67e853ffa61", + "bytes": 905 + }, + { + "path": "tests/golden/M16-GAP-00130/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00130/manifest.json", + "sha256": "1bd06520e5be08d28947b55cfefbbc38b53c496f677a989d57d760b99742585a", + "bytes": 2027 + }, + { + "path": "tests/golden/M16-GAP-00131/action-previewrange-set-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00131/action-previewrange-set-desktop-report.json", + "sha256": "e0ad513329a4a26d70e239d65c30b9048e78c1fcb480a6e4013d941e85d94470", + "bytes": 433 + }, + { + "path": "tests/golden/M16-GAP-00131/action-previewrange-set-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00131/action-previewrange-set-local-exact-report.json", + "sha256": "7cd2170ba8134e088c23a4939d96f9a23b62779370051fac2185c7ad092e20d0", + "bytes": 721 + }, + { + "path": "tests/golden/M16-GAP-00131/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00131/manifest.json", + "sha256": "9569fe9c951190d125af519860354781fcbad0a6c0def7a04cc62a316aeccdce", + "bytes": 2082 + }, + { + "path": "tests/golden/M16-GAP-00132/action-push-down-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00132/action-push-down-desktop-report.json", + "sha256": "1341e50c48f9adc16d7c9269bd31738d852299c4c8ed0ea03071efe934f5dabc", + "bytes": 706 + }, + { + "path": "tests/golden/M16-GAP-00132/action-push-down-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00132/action-push-down-local-exact-report.json", + "sha256": "3d9ac3404080630e5241a39902229089b2528e784ec3b107aced1d1956ed9b33", + "bytes": 1657 + }, + { + "path": "tests/golden/M16-GAP-00132/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00132/manifest.json", + "sha256": "e02b7149851c8503ad907e209085f66769171dbe67a4a2eb066f9e86fbe6938b", + "bytes": 2047 + }, + { + "path": "tests/golden/M16-GAP-00133/action-select-all-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00133/action-select-all-desktop-report.json", + "sha256": "06d1ae064a91784d1122141bdded039a4761ed15341dda9d9bb5f0649e9305bb", + "bytes": 1134 + }, + { + "path": "tests/golden/M16-GAP-00133/action-select-all-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00133/action-select-all-local-exact-report.json", + "sha256": "50808e1aa34a12e83afbe68bd47206b5990efb0e0a5c13b614e99abc8326c641", + "bytes": 735 + }, + { + "path": "tests/golden/M16-GAP-00133/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00133/manifest.json", + "sha256": "490581ab799c7f2af1311839761eb320a91d723a1db866b77b6934b10c8f84f1", + "bytes": 2052 + }, + { + "path": "tests/golden/M16-GAP-00134/action-select-box-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00134/action-select-box-desktop-report.json", + "sha256": "20f1d2012eff7ee00744009455d8b34fd3ced10ae681af80065d2761f07838d4", + "bytes": 1137 + }, + { + "path": "tests/golden/M16-GAP-00134/action-select-box-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00134/action-select-box-local-exact-report.json", + "sha256": "d6bb840a51e5845681d83a381a5eed831dd0b727816400518f884af44c80a256", + "bytes": 833 + }, + { + "path": "tests/golden/M16-GAP-00134/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00134/manifest.json", + "sha256": "cfbee14e33752b00dc877928fc2a2378ce723763e26b7882e26336af15065c50", + "bytes": 2052 + }, + { + "path": "tests/golden/M16-GAP-00135/action-select-by-type-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00135/action-select-by-type-desktop-report.json", + "sha256": "4e7ad68e84576c6ef5153302911e682242b028f022eddf9deb18b39e28851298", + "bytes": 1241 + }, + { + "path": "tests/golden/M16-GAP-00135/action-select-by-type-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00135/action-select-by-type-local-exact-report.json", + "sha256": "7b07b6f31ad375a4d7461f375c2fb036021ef80d34176ecd0db37d752ff9b963", + "bytes": 860 + }, + { + "path": "tests/golden/M16-GAP-00135/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00135/manifest.json", + "sha256": "5d76455d3969245a12288929ed8d40157882d5e7080472c83d63f843e2abc1cb", + "bytes": 2072 + }, + { + "path": "tests/golden/M16-GAP-00136/action-select-circle-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00136/action-select-circle-desktop-report.json", + "sha256": "405d31329386086ba1f833795630a0180880bfce17e02d93fd586ce15bb6f1c0", + "bytes": 1146 + }, + { + "path": "tests/golden/M16-GAP-00136/action-select-circle-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00136/action-select-circle-local-exact-report.json", + "sha256": "489863284d53857629642ae8fadb9c7066a4c492117eb8b7cbe0c823d65d9db5", + "bytes": 848 + }, + { + "path": "tests/golden/M16-GAP-00136/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00136/manifest.json", + "sha256": "4953a140158fde453aa89670b3281f756fdc65a70bfc17099c891cec9d70197f", + "bytes": 2222 + }, + { + "path": "tests/golden/M16-GAP-00136/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00136/task-context.json", + "sha256": "fc4b89652b93f26d0e7ee929ca442fa4954e47b677ddb75604d3dfacb0c1498e", + "bytes": 5450 + }, + { + "path": "tests/golden/M16-GAP-00137/action-select-column-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00137/action-select-column-desktop-report.json", + "sha256": "71916a53336e89a4be1d07e1fec163b215661d1554d86a1446a79dad0411ba88", + "bytes": 1146 + }, + { + "path": "tests/golden/M16-GAP-00137/action-select-column-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00137/action-select-column-local-exact-report.json", + "sha256": "c9747457cd2746e4bcd27c10c87564e92f74664c6d59129222e826b17ace7815", + "bytes": 848 + }, + { + "path": "tests/golden/M16-GAP-00137/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00137/manifest.json", + "sha256": "db4d41f58efc70ee7ed26ae430b9879a8f00cfb40700a39de4f23e7f64c3533d", + "bytes": 2222 + }, + { + "path": "tests/golden/M16-GAP-00137/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00137/task-context.json", + "sha256": "847fe153913ff003ef06c7f17c952667a603b31f95a5bc1a9a06fb8a077c6e6b", + "bytes": 5306 + }, + { + "path": "tests/golden/M16-GAP-00138/action-select-lasso-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00138/action-select-lasso-desktop-report.json", + "sha256": "0b08c6f6e71af41aee20187546477ea962cd84d8c4aade1d85aefd0e9f7f1e65", + "bytes": 1143 + }, + { + "path": "tests/golden/M16-GAP-00138/action-select-lasso-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00138/action-select-lasso-local-exact-report.json", + "sha256": "80b30bbb0abd93e0e4d034d65e916171446e2549c7b224befb98f37f4e22eee9", + "bytes": 843 + }, + { + "path": "tests/golden/M16-GAP-00138/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00138/manifest.json", + "sha256": "164d1020de2e126f1e0736b508a18bf261c7610b375fe02dbfccb3422e27ff13", + "bytes": 2217 + }, + { + "path": "tests/golden/M16-GAP-00138/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00138/task-context.json", + "sha256": "9ac60ee1fef3eb3809f9cd4ba251272406a7f391cfe26621f076d098d9b0d524", + "bytes": 5316 + }, + { + "path": "tests/golden/M16-GAP-00139/action-select-leftright-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00139/action-select-leftright-desktop-report.json", + "sha256": "7caa17c7eb256a4bea4e95d03edd3e2b3a31286fd30581188915fca174a89f56", + "bytes": 1188 + }, + { + "path": "tests/golden/M16-GAP-00139/action-select-leftright-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00139/action-select-leftright-local-exact-report.json", + "sha256": "70476940cd710d7ac0305d1caa428e9b0ac7f71a8e7f55900139c94be7433ee2", + "bytes": 940 + }, + { + "path": "tests/golden/M16-GAP-00139/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00139/manifest.json", + "sha256": "f534007c6619c059eaeb7aec81215d560b37009f89938823cd73370803919fab", + "bytes": 2237 + }, + { + "path": "tests/golden/M16-GAP-00139/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00139/task-context.json", + "sha256": "70af07e854ffebad8dcf9403c3485732c25b7100062b49a0bf1f16fb9b730bbb", + "bytes": 5315 + }, + { + "path": "tests/golden/M16-GAP-00140/action-select-less-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00140/action-select-less-desktop-report.json", + "sha256": "f8527dd5d6d953fbda5b86bb1f42d6257b244a50296ceeb074c57a7b007a3aef", + "bytes": 1140 + }, + { + "path": "tests/golden/M16-GAP-00140/action-select-less-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00140/action-select-less-local-exact-report.json", + "sha256": "243dedadaa9776d7195883a99689e4cb8ee07599bf6c9786aaf8ee5910135e17", + "bytes": 838 + }, + { + "path": "tests/golden/M16-GAP-00140/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00140/manifest.json", + "sha256": "218516d7a1a3b9f28799dea042f41861cae9c1343e8e6bfae4939b6bdb169935", + "bytes": 2212 + }, + { + "path": "tests/golden/M16-GAP-00140/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00140/task-context.json", + "sha256": "fc860324c53484ebaa1b1266cf51530abf10645c7e4546db5a495a25778ed03d", + "bytes": 5344 + }, + { + "path": "tests/golden/M16-GAP-00141/action-select-linked-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00141/action-select-linked-desktop-report.json", + "sha256": "7072809e5ceef8161b75594deaaf809e31ea01a67ef6261ac2d9e9fabbb5e296", + "bytes": 1201 + }, + { + "path": "tests/golden/M16-GAP-00141/action-select-linked-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00141/action-select-linked-local-exact-report.json", + "sha256": "261490656ea23b3c1800ca523a9d00911347b7f46e40b7b1d16e693470ddc8d4", + "bytes": 985 + }, + { + "path": "tests/golden/M16-GAP-00141/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00141/manifest.json", + "sha256": "96756fb16e9731f2b7f217993ad6c2126d58fd5fd17bd71d1df55c0b463f4ddb", + "bytes": 2222 + }, + { + "path": "tests/golden/M16-GAP-00141/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00141/task-context.json", + "sha256": "cf032562d9fc471a6a72b2e8dc50021e383ddc0fd628fca14e971647b64c5ad6", + "bytes": 5337 + }, + { + "path": "tests/golden/M16-GAP-00142/action-select-more-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00142/action-select-more-desktop-report.json", + "sha256": "56944dfcacb924d7650b8652e52bfc254fb1673b40b04109a57f69ad67e3fe9a", + "bytes": 1295 + }, + { + "path": "tests/golden/M16-GAP-00142/action-select-more-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00142/action-select-more-local-exact-report.json", + "sha256": "91f1ef2bf23e75b681beea332836b359da9daf1902b8d77cb683b0e1657562a0", + "bytes": 918 + }, + { + "path": "tests/golden/M16-GAP-00142/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00142/manifest.json", + "sha256": "faece45f1ca92a39c7d1314b1eb325641c4eb4db91b321ca53578e6db6c734a0", + "bytes": 2212 + }, + { + "path": "tests/golden/M16-GAP-00142/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00142/task-context.json", + "sha256": "727493f7483e1fc0c42a516da51e469393881b5d15c5c362f04138bcd4c6944e", + "bytes": 5367 + }, + { + "path": "tests/golden/M16-GAP-00143/action-snap-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00143/action-snap-desktop-report.json", + "sha256": "0da5db63e20db1a97fed02019368de5c6a758e6e34c8b43af52800d33dfa48e0", + "bytes": 1137 + }, + { + "path": "tests/golden/M16-GAP-00143/action-snap-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00143/action-snap-local-exact-report.json", + "sha256": "61afb2360dc9814da3b741a133b07728b4a560676e7a436f995d1c07e1a4d17e", + "bytes": 1003 + }, + { + "path": "tests/golden/M16-GAP-00143/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00143/manifest.json", + "sha256": "3a9c08d6b0e17899165f7597919854e8c528028ba7879a25e4d33d659475ce34", + "bytes": 2177 + }, + { + "path": "tests/golden/M16-GAP-00143/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00143/task-context.json", + "sha256": "8fbac173dc0bf7f0775d149161c7ea2ddf2cdd489f0f634669f860983806c1f1", + "bytes": 5342 + }, + { + "path": "tests/golden/M16-GAP-00144/action-stash-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00144/action-stash-desktop-report.json", + "sha256": "c7b38407179b23e212f2fff6d34424b3c9f21e024f8ce936cae8f4a6746c4904", + "bytes": 680 + }, + { + "path": "tests/golden/M16-GAP-00144/action-stash-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00144/action-stash-local-exact-report.json", + "sha256": "0dd4d10207503d6ea41c2d630b137471587961ceaa26870132936c8c91a72752", + "bytes": 1612 + }, + { + "path": "tests/golden/M16-GAP-00144/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00144/manifest.json", + "sha256": "4727b5807db7269de9353110d51bc5d6e594202cc5cb72a91697cee3589e539b", + "bytes": 2182 + }, + { + "path": "tests/golden/M16-GAP-00144/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00144/task-context.json", + "sha256": "45bc5f26682956126524444937f5af263c238b91d66f23f295a4bf37e49d42a2", + "bytes": 5311 + }, + { + "path": "tests/golden/M16-GAP-00145/action-stash-and-create-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00145/action-stash-and-create-desktop-report.json", + "sha256": "05f9f233a10822b8de85e9b2070863d6f584e60123b4fc91e4d147a93e120df7", + "bytes": 718 + }, + { + "path": "tests/golden/M16-GAP-00145/action-stash-and-create-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00145/action-stash-and-create-local-exact-report.json", + "sha256": "2820c70ab69ad674d6bee5424fceb98062fc33b0e309de98d0fe092515f0f4ea", + "bytes": 1722 + }, + { + "path": "tests/golden/M16-GAP-00145/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00145/manifest.json", + "sha256": "4fc29aed9ce6ef07732304b80483e2c4c7c0036e692b4705b6f0cb952fe04829", + "bytes": 2237 + }, + { + "path": "tests/golden/M16-GAP-00145/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00145/task-context.json", + "sha256": "d785cecfb165f45ec6fcefe072c7cbed452e0ccb0ef6fba5fbf22b1b85224596", + "bytes": 5327 + }, + { + "path": "tests/golden/M16-GAP-00146/action-unlink-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00146/action-unlink-desktop-report.json", + "sha256": "a328397950846c7ee22fc7d0ab5788eb5174a8296f79c70763f007274977f5b6", + "bytes": 1025 + }, + { + "path": "tests/golden/M16-GAP-00146/action-unlink-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00146/action-unlink-local-exact-report.json", + "sha256": "2190f23628b0b4ecb68a8c5aafb096e412c7fe5f654bad094686b0700c8e388c", + "bytes": 777 + }, + { + "path": "tests/golden/M16-GAP-00146/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00146/manifest.json", + "sha256": "cfe6d9e8aeeeddbd080f6ee3dad941424c8434e7c6a09af2c84b634e9440a849", + "bytes": 2187 + }, + { + "path": "tests/golden/M16-GAP-00146/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00146/task-context.json", + "sha256": "5fe6424cd98d78ea065bb1fb0cd34bae92552171592698a48182d08b943a4c08", + "bytes": 5304 + }, + { + "path": "tests/golden/M16-GAP-00147/action-view-all-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00147/action-view-all-desktop-report.json", + "sha256": "d1eb6d018b05f2f00d16498dea4d34d49f07ed4489f2ee0dabcf9409dd76deaf", + "bytes": 678 + }, + { + "path": "tests/golden/M16-GAP-00147/action-view-all-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00147/action-view-all-local-exact-report.json", + "sha256": "f23dd5aae9e4f649c6f29ae6cc971d7e358386bc4cbdd3466e7a075f065f362c", + "bytes": 888 + }, + { + "path": "tests/golden/M16-GAP-00147/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00147/manifest.json", + "sha256": "451f1612a0addd34c1d8c3b074e0f72640f6e63105f158d89288db12ae714127", + "bytes": 2197 + }, + { + "path": "tests/golden/M16-GAP-00147/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00147/task-context.json", + "sha256": "f03fa466b214f882119db539bbd7e6f79da5b16624e61f067d217dfc2480ac33", + "bytes": 5303 + }, + { + "path": "tests/golden/M16-GAP-00148/action-view-frame-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00148/action-view-frame-desktop-report.json", + "sha256": "1895f562b9d1a67164256dd47b40a9a0280f5c45f0f153184cde5d54afca2d63", + "bytes": 707 + }, + { + "path": "tests/golden/M16-GAP-00148/action-view-frame-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00148/action-view-frame-local-exact-report.json", + "sha256": "a5b4db975c15055bf295f72f5a52aeb66bfa5d81959dba303e89472ce92ff83a", + "bytes": 919 + }, + { + "path": "tests/golden/M16-GAP-00148/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00148/manifest.json", + "sha256": "fd9d80e817a424f0d37e88f182597a8b94a3b858c934def0ffa116047cc907df", + "bytes": 2207 + }, + { + "path": "tests/golden/M16-GAP-00148/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00148/task-context.json", + "sha256": "52781cdba0dae2569088c7d80e4c5028cf1fefb5beb187dbd8f767d4b5122b32", + "bytes": 5317 + }, + { + "path": "tests/golden/M16-GAP-00149/action-view-selected-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00149/action-view-selected-desktop-report.json", + "sha256": "002328f69d528d49570dda4976ea7ae0bb9229fa84f8a3bb1b5b6e3cc061a188", + "bytes": 1361 + }, + { + "path": "tests/golden/M16-GAP-00149/action-view-selected-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00149/action-view-selected-local-exact-report.json", + "sha256": "6d2e450cece242a95b9b861292d74654ec7a8e3f191364a64c2c9b809a7e0bb4", + "bytes": 1089 + }, + { + "path": "tests/golden/M16-GAP-00149/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00149/manifest.json", + "sha256": "b39fe0194d94b7cb54e8ca62b51d0d58fc7f82c1ab06122ab8ab74ca79ce6f8d", + "bytes": 2222 + }, + { + "path": "tests/golden/M16-GAP-00149/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00149/task-context.json", + "sha256": "da34e2c587ec836b745ae0d69dc27b75c77ce17a73d18c223ac817e9365e29c7", + "bytes": 5315 + }, + { + "path": "tests/golden/M16-GAP-00150/anim-change-frame-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00150/anim-change-frame-desktop-report.json", + "sha256": "b0367cd339a51049f1eb511875c0beee269439694f99c2ee69513d71a5cd5453", + "bytes": 1159 + }, + { + "path": "tests/golden/M16-GAP-00150/anim-change-frame-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00150/anim-change-frame-local-exact-report.json", + "sha256": "358a97f75cf727ba385434f4e42c9e2857d046131fa15d1460f60eba68c72288", + "bytes": 910 + }, + { + "path": "tests/golden/M16-GAP-00150/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00150/manifest.json", + "sha256": "a60ed9301159ae403d345cf7d97e30fc3a0edca948022d3961f0a40c1fb015ef", + "bytes": 2209 + }, + { + "path": "tests/golden/M16-GAP-00150/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00150/task-context.json", + "sha256": "f3e8a8d194110019633496b55623589f1d13c8c3f062ec1c03aac023276a50c3", + "bytes": 5368 + }, + { + "path": "tests/golden/M16-GAP-00151/anim-channel-select-keys-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00151/anim-channel-select-keys-desktop-report.json", + "sha256": "f71376397c83a380252e3e69a4f295153f2e46a7be0bf1de4871605bf0bec16f", + "bytes": 1208 + }, + { + "path": "tests/golden/M16-GAP-00151/anim-channel-select-keys-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00151/anim-channel-select-keys-local-exact-report.json", + "sha256": "225fa87a2cfe47daee71149a1a2122ff9d9f80a602b48ff64bd11b0edf4dcc51", + "bytes": 917 + }, + { + "path": "tests/golden/M16-GAP-00151/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00151/manifest.json", + "sha256": "6607d5f2f8af37d9f9228ea416889bec0d3d8d6c04cc3bb46999858dac018f2e", + "bytes": 2244 + }, + { + "path": "tests/golden/M16-GAP-00151/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00151/task-context.json", + "sha256": "73e8f89962ce32d7446fe7a61cdaab43105628ca0661b840e93db8236b8691b6", + "bytes": 5367 + }, + { + "path": "tests/golden/M16-GAP-00152/anim-channel-view-pick-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00152/anim-channel-view-pick-desktop-report.json", + "sha256": "e8ddb6bb82386a4c93fb2525ac8c76b965034f827d28c0caa7c2df349833dc7c", + "bytes": 1098 + }, + { + "path": "tests/golden/M16-GAP-00152/anim-channel-view-pick-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00152/anim-channel-view-pick-local-exact-report.json", + "sha256": "813990cb73567d995b784e23f47b7493f6bd3da83278ba86e4161044bfb98b8b", + "bytes": 1012 + }, + { + "path": "tests/golden/M16-GAP-00152/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00152/manifest.json", + "sha256": "8f13a4a4da0827dece7e371690d9c451203a6de4b909665c1a113a15b7ee68d2", + "bytes": 2234 + }, + { + "path": "tests/golden/M16-GAP-00152/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00152/task-context.json", + "sha256": "c2f0b3acf3ac531ec577583e204e75d15a41f12f3c00b5d7326fe85da4e68547", + "bytes": 5380 + }, + { + "path": "tests/golden/M16-GAP-00153/anim-channels-bake-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00153/anim-channels-bake-desktop-report.json", + "sha256": "bcc459445eb7da0b2898302b72b726cd128572a25c23012dc7dfee9b03d945a6", + "bytes": 1018 + }, + { + "path": "tests/golden/M16-GAP-00153/anim-channels-bake-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00153/anim-channels-bake-local-exact-report.json", + "sha256": "517f2a16e4a3a46e52709c58987e940d1c07235adc8c4c9d6401363173c7d09b", + "bytes": 1014 + }, + { + "path": "tests/golden/M16-GAP-00153/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00153/manifest.json", + "sha256": "6d06064ba97203528fdfbc6cd6acc769e1cf86eb7a03a4c8ea55fa15837da941", + "bytes": 2214 + }, + { + "path": "tests/golden/M16-GAP-00153/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00153/task-context.json", + "sha256": "076fcdce0aaede9f992ce804e4e2cabbc2bbc69a0316038bba6880704933d26d", + "bytes": 5328 + }, + { + "path": "tests/golden/M16-GAP-00154/anim-channels-clean-empty-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00154/anim-channels-clean-empty-desktop-report.json", + "sha256": "592c8f75f00e03e0af3f8cc6de4b9b681ab2d1c5546826d363a01be41e498848", + "bytes": 933 + }, + { + "path": "tests/golden/M16-GAP-00154/anim-channels-clean-empty-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00154/anim-channels-clean-empty-local-exact-report.json", + "sha256": "ec0ae1e60911edfaee779d6ed6c52fb5965d7b182534e1864c27aaaaeb1a7795", + "bytes": 959 + }, + { + "path": "tests/golden/M16-GAP-00154/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00154/manifest.json", + "sha256": "ac81b87051b86d75e8ec23c7494c5cb9756a7c6093e1c9774ed3e10af9ffe023", + "bytes": 2249 + }, + { + "path": "tests/golden/M16-GAP-00154/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00154/task-context.json", + "sha256": "e03fd089cd8874792ee9c5aeaf32843742f0522ad71f47c12c1e5ef674c4352c", + "bytes": 5374 + }, + { + "path": "tests/golden/M16-GAP-00155/anim-channels-click-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00155/anim-channels-click-desktop-report.json", + "sha256": "c080797b74218a9ca21654420e96138ae7fc7e795d9f821a1ca1285bdb08038e", + "bytes": 1193 + }, + { + "path": "tests/golden/M16-GAP-00155/anim-channels-click-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00155/anim-channels-click-local-exact-report.json", + "sha256": "f76c822378b6dffd7a247354d33874515aa551e952401e82188a6e7337a67d55", + "bytes": 893 + }, + { + "path": "tests/golden/M16-GAP-00155/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00155/manifest.json", + "sha256": "d892467c0a86ff05be0a9570f70ea5f52ab713b44177a8e65b096e7186a31471", + "bytes": 2219 + }, + { + "path": "tests/golden/M16-GAP-00155/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00155/task-context.json", + "sha256": "b47551bafd1fd13f5ed2cd5e9dbf642df1472c6403e1b4c8902e3c6802026146", + "bytes": 5400 + }, + { + "path": "tests/golden/M16-GAP-00156/anim-channels-collapse-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00156/anim-channels-collapse-desktop-report.json", + "sha256": "0c7633299bc11c3b2dcc6c255e557b625d61e4a6214b717dd19f7eaf59e2c06a", + "bytes": 914 + }, + { + "path": "tests/golden/M16-GAP-00156/anim-channels-collapse-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00156/anim-channels-collapse-local-exact-report.json", + "sha256": "469e345742980e8647110df56278592ac12e6b945b6d45e11f9ec2da5c8cb094", + "bytes": 936 + }, + { + "path": "tests/golden/M16-GAP-00156/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00156/manifest.json", + "sha256": "f3e9b44c3cb8ca2895325476e38835a32a604443da09d17f1455c6a78366bd7e", + "bytes": 2233 + }, + { + "path": "tests/golden/M16-GAP-00156/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00156/task-context.json", + "sha256": "67d970a10a88c35ee050d4b35ed5dba501907c669c9d36467e9e4151c7593c15", + "bytes": 5357 + }, + { + "path": "tests/golden/M16-GAP-00157/anim-channels-delete-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00157/anim-channels-delete-desktop-report.json", + "sha256": "330b2caa7f2f2dcbf4f903a8ac8bd1fdaf22fa676014fd0a2aa58675c28e77e3", + "bytes": 555 + }, + { + "path": "tests/golden/M16-GAP-00157/anim-channels-delete-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00157/anim-channels-delete-local-exact-report.json", + "sha256": "667833b173528247f33341fe15edf52b4389bc44e0de4a6dc1fb2e14ee57a986", + "bytes": 744 + }, + { + "path": "tests/golden/M16-GAP-00157/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00157/manifest.json", + "sha256": "5dc8520ec503a6f19ea783fa4fc56b8044eaa03ad616fece21152b23a4eb8cda", + "bytes": 2224 + }, + { + "path": "tests/golden/M16-GAP-00157/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00157/task-context.json", + "sha256": "94c06044e7620dfb82d250775d7a8460cebcb13327e805442ff47585b610574a", + "bytes": 5330 + }, + { + "path": "tests/golden/M16-GAP-00158/anim-channels-editable-toggle-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00158/anim-channels-editable-toggle-desktop-report.json", + "sha256": "c700699f731764385ab6a9103adfc3592effdae2dc09b913682b134de16298f5", + "bytes": 1015 + }, + { + "path": "tests/golden/M16-GAP-00158/anim-channels-editable-toggle-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00158/anim-channels-editable-toggle-local-exact-report.json", + "sha256": "4e1e28c4baa75abd098eaed07ea83fda9676d6bd875dafac9742bd1d89cf16dd", + "bytes": 863 + }, + { + "path": "tests/golden/M16-GAP-00158/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00158/manifest.json", + "sha256": "f8754729d3afff4daf866d6d3126da8ce8218bb3ecc0f9e9bb5d173d4c860cff", + "bytes": 2403 + }, + { + "path": "tests/golden/M16-GAP-00158/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00158/task-context.json", + "sha256": "35a89633fba80fbb4df306e948e31117bf1189e7a9c9b8458e391d3cdbb3ae45", + "bytes": 5409 + }, + { + "path": "tests/golden/M16-GAP-00159/anim-channels-expand-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00159/anim-channels-expand-desktop-report.json", + "sha256": "56feacbf947430f5799612b9e01395ec2f901f455ef1811af58315bc97981c58", + "bytes": 1122 + }, + { + "path": "tests/golden/M16-GAP-00159/anim-channels-expand-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00159/anim-channels-expand-local-exact-report.json", + "sha256": "705189c2b5571ee5645c50932fdff1bdaff3f9205cd031533969f1bc8d09418e", + "bytes": 826 + }, + { + "path": "tests/golden/M16-GAP-00159/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00159/manifest.json", + "sha256": "32a6494adf77b384d699d713d469905309a115165a6a744a09d4c49979394650", + "bytes": 2358 + }, + { + "path": "tests/golden/M16-GAP-00159/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00159/task-context.json", + "sha256": "fc453afe062994a58a0bc5108a915f246afd8eb75b9a90cb30ec47fd92aac464", + "bytes": 5343 + }, + { + "path": "tests/golden/M16-GAP-00160/anim-channels-fcurves-enable-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00160/anim-channels-fcurves-enable-desktop-report.json", + "sha256": "694c307f9ccc22b4eca8e64185e5397bd778e45da07c5ad26a60120220ebe4c5", + "bytes": 1030 + }, + { + "path": "tests/golden/M16-GAP-00160/anim-channels-fcurves-enable-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00160/anim-channels-fcurves-enable-local-exact-report.json", + "sha256": "42b1b070a9975db3284dd616a3c101cf1ec1ee3701372f77eeb04e0a03e52b9a", + "bytes": 854 + }, + { + "path": "tests/golden/M16-GAP-00160/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00160/manifest.json", + "sha256": "7c045fa9b3bd97f6260a9b279d7dbc8d18cd3aabce33a8d095d9e4a7c08700df", + "bytes": 2782 + }, + { + "path": "tests/golden/M16-GAP-00160/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00160/task-context.json", + "sha256": "c1a8d564de0ad1c377f22af1f6c8152256e66c3da974a5f18e2716f48334276e", + "bytes": 5394 + }, + { + "path": "tests/golden/M16-GAP-00161/anim-channels-group-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00161/anim-channels-group-desktop-report.json", + "sha256": "c7df9940aecaa3fa127116325e053c182a183167d8f222e9af072c6415ef379b", + "bytes": 1055 + }, + { + "path": "tests/golden/M16-GAP-00161/anim-channels-group-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00161/anim-channels-group-local-exact-report.json", + "sha256": "e455f560ac9e6047b84971a96b3aa7f58ee4cf08dccf5f6394310820d10715d2", + "bytes": 792 + }, + { + "path": "tests/golden/M16-GAP-00161/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00161/manifest.json", + "sha256": "289a394c2d632ee05d59997925349b4485e70bc5af2ae417a7732d7a42bc8a37", + "bytes": 2737 + }, + { + "path": "tests/golden/M16-GAP-00161/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00161/task-context.json", + "sha256": "cdc0f7f91f24f2ede4406c025ce8ee0eec9898a512c8d255c915851537263f30", + "bytes": 5343 + }, + { + "path": "tests/golden/M16-GAP-00162/anim-channels-move-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00162/anim-channels-move-desktop-report.json", + "sha256": "8b12fad79622d6171f5afce0017b89cae20fea109dacc0851c10c8d96d19f1c0", + "bytes": 901 + }, + { + "path": "tests/golden/M16-GAP-00162/anim-channels-move-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00162/anim-channels-move-local-exact-report.json", + "sha256": "0dad9d166f9fdd3466f0a96bc32e02118259a5aa7ac8312d716c93fb0b8fcf31", + "bytes": 791 + }, + { + "path": "tests/golden/M16-GAP-00162/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00162/manifest.json", + "sha256": "6341c7071727e90ea79b54e8a426f6d21955a51350ce6c6a1dbc7de28d818fee", + "bytes": 2618 + }, + { + "path": "tests/golden/M16-GAP-00162/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00162/task-context.json", + "sha256": "0ba8fe850b95ac1b5d55feba65ac8b994ead423ff98be590491b2501c378bc3d", + "bytes": 5298 + }, + { + "path": "tests/golden/M16-GAP-00163/anim-channels-rename-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00163/anim-channels-rename-desktop-report.json", + "sha256": "ab51d4972965553550c3a31a01d5ead41d4a1edb4f3d5229e0072035f032cc63", + "bytes": 1083 + }, + { + "path": "tests/golden/M16-GAP-00163/anim-channels-rename-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00163/anim-channels-rename-local-exact-report.json", + "sha256": "f83a4dc64627ec6679826be1a49942a869af4ffc1bad317ecc60a9ff056729ab", + "bytes": 855 + }, + { + "path": "tests/golden/M16-GAP-00163/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00163/manifest.json", + "sha256": "7fd9a9d70579127ef35e36d08663a815d555cc66e1454ed7c5cb5f295c169224", + "bytes": 2742 + }, + { + "path": "tests/golden/M16-GAP-00163/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00163/task-context.json", + "sha256": "1038e4979b2f480d971af8c15a568db264a1612f6e86ec49cec3cf6f25a48684", + "bytes": 5270 + }, + { + "path": "tests/golden/M16-GAP-00164/anim-channels-select-all-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00164/anim-channels-select-all-desktop-report.json", + "sha256": "27582c87f7d705f7b2a935d29df9fd4b65e60f8cc7f1e1f9803b2788aeb43f22", + "bytes": 1274 + }, + { + "path": "tests/golden/M16-GAP-00164/anim-channels-select-all-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00164/anim-channels-select-all-local-exact-report.json", + "sha256": "8bfb174ed2610c2d518c5c62721e489e3314875d70f12cd3304b10ca4e7e3d6e", + "bytes": 821 + }, + { + "path": "tests/golden/M16-GAP-00164/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00164/manifest.json", + "sha256": "43085e14c5824e9180c68b8ceb29edf5b63d5255766ff89ff8a5843e84724b82", + "bytes": 2762 + }, + { + "path": "tests/golden/M16-GAP-00164/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00164/task-context.json", + "sha256": "eea368ca4eb17f607e0f948b80e2c1964d7a1cf9f44cb85823ba078783d3eb81", + "bytes": 5382 + }, + { + "path": "tests/golden/M16-GAP-00165/anim-channels-select-box-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00165/anim-channels-select-box-desktop-report.json", + "sha256": "3e4d0f296a24bbc60e94edbcdef95d0256311b3c7465ee975b1a072a3553340d", + "bytes": 1299 + }, + { + "path": "tests/golden/M16-GAP-00165/anim-channels-select-box-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00165/anim-channels-select-box-local-exact-report.json", + "sha256": "1ea7eff113700fb1c7294d3737dff83df271963f62997583540cc1e998f00e21", + "bytes": 821 + }, + { + "path": "tests/golden/M16-GAP-00165/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00165/manifest.json", + "sha256": "566a40f28eb860c407435db6253bbb562e22c026977daccf5aca69db6b8831d6", + "bytes": 2762 + }, + { + "path": "tests/golden/M16-GAP-00165/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00165/task-context.json", + "sha256": "63a484301223406881332d310e647407758f09f6c5c3b1d0e9836a404332973f", + "bytes": 5359 + }, + { + "path": "tests/golden/M16-GAP-00166/anim-channels-select-filter-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00166/anim-channels-select-filter-desktop-report.json", + "sha256": "a8a86feb4763e08f655de55c654befa13d42b490ca4e6efc5d6736170f0d6a37", + "bytes": 932 + }, + { + "path": "tests/golden/M16-GAP-00166/anim-channels-select-filter-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00166/anim-channels-select-filter-local-exact-report.json", + "sha256": "538167ec546842a9206d6232a213d271dabe96f5801f074b6804a1d14e12e4ba", + "bytes": 831 + }, + { + "path": "tests/golden/M16-GAP-00166/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00166/manifest.json", + "sha256": "c4b2ed6935d52a7c41c35af45b5e2e7a3e6924dafa2b9e2c6a1aa04bef8f7312", + "bytes": 2941 + }, + { + "path": "tests/golden/M16-GAP-00166/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00166/task-context.json", + "sha256": "3ccd5a0066ad1ca475e020ebb4b6eeb724b431b7a6ffc125553b3a6048cb4449", + "bytes": 5371 + }, + { + "path": "tests/golden/M16-GAP-00167/anim-channels-setting-disable-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00167/anim-channels-setting-disable-desktop-report.json", + "sha256": "9e647359438803ddfd6065611d064e723c5371b3ef696cbfdfdb50c166ab3835", + "bytes": 1040 + }, + { + "path": "tests/golden/M16-GAP-00167/anim-channels-setting-disable-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00167/anim-channels-setting-disable-local-exact-report.json", + "sha256": "c73201d925e7526d25f647870a346976773ffc4cd4abb94325d4cf1261def14d", + "bytes": 890 + }, + { + "path": "tests/golden/M16-GAP-00167/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00167/manifest.json", + "sha256": "a64ad25d06da5c36fe772c5e7777fe5b2f026eae61e32386d553c010f0d497a9", + "bytes": 2951 + }, + { + "path": "tests/golden/M16-GAP-00167/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00167/task-context.json", + "sha256": "496f89ec6d6545cd16d0b787e741e3dcb78d992d308fea0533183214d5325e6a", + "bytes": 5393 + }, + { + "path": "tests/golden/M16-GAP-00168/anim-channels-setting-enable-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00168/anim-channels-setting-enable-desktop-report.json", + "sha256": "d2265aaf9aee9d9bcc8a72f66f9878c4f44b4a5c28e5d13ff388c194adac773e", + "bytes": 1036 + }, + { + "path": "tests/golden/M16-GAP-00168/anim-channels-setting-enable-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00168/anim-channels-setting-enable-local-exact-report.json", + "sha256": "68bd2a37e4fb89e130cf7d9fec26e23f60903543b39cc33813b84bf525313817", + "bytes": 884 + }, + { + "path": "tests/golden/M16-GAP-00168/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00168/manifest.json", + "sha256": "b912c792a695d2b5cad4ce15a0c2628922f5e0f4b37a8a1502be9c6649dc3ea3", + "bytes": 2946 + }, + { + "path": "tests/golden/M16-GAP-00168/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00168/task-context.json", + "sha256": "30def7e3fbd5e1786203e5c88aa3c5ba22f40af2fb0e9ad1809be6183151683e", + "bytes": 5363 + }, + { + "path": "tests/golden/M16-GAP-00169/anim-channels-setting-toggle-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00169/anim-channels-setting-toggle-desktop-report.json", + "sha256": "6bc9a6a97c53a6b4fa510c0b670bdf341ec4f82d0586a21c04438eaeda9a10f6", + "bytes": 1036 + }, + { + "path": "tests/golden/M16-GAP-00169/anim-channels-setting-toggle-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00169/anim-channels-setting-toggle-local-exact-report.json", + "sha256": "e493b763baef0ff2d5e2782107a92b66db63d0ec82ffd8c677df7d30f68c76fe", + "bytes": 884 + }, + { + "path": "tests/golden/M16-GAP-00169/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00169/manifest.json", + "sha256": "c01454bd7302b6855d7683a763dd74b35e7b612cb1ab1e8fba633b2ef5c6461c", + "bytes": 2946 + }, + { + "path": "tests/golden/M16-GAP-00169/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00169/task-context.json", + "sha256": "39bb03cf425db496671100f840eb671a90b9f0802d524c6718869ee436a20b1a", + "bytes": 5346 + }, + { + "path": "tests/golden/M16-GAP-00170/anim-channels-ungroup-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00170/anim-channels-ungroup-desktop-report.json", + "sha256": "6da3c452af5fdefcbb5a7390e5e7effe440dbb8602bc7c4ee7d57f38e1f58f05", + "bytes": 1015 + }, + { + "path": "tests/golden/M16-GAP-00170/anim-channels-ungroup-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00170/anim-channels-ungroup-local-exact-report.json", + "sha256": "4de0a7349f21103b953ebbd860f983d9c199fe682af77fc2b4198fc03993ec53", + "bytes": 838 + }, + { + "path": "tests/golden/M16-GAP-00170/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00170/manifest.json", + "sha256": "8e7ba1b5b85e1911718eca4413934fe4bb4d3ea2d644413dd6d93d297e95401d", + "bytes": 2911 + }, + { + "path": "tests/golden/M16-GAP-00170/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00170/task-context.json", + "sha256": "7a62f73abdd10efce2e0decb2bb437f62973fdd572ce199ec637d54433a95d8f", + "bytes": 5348 + }, + { + "path": "tests/golden/M16-GAP-00171/anim-channels-view-selected-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00171/anim-channels-view-selected-desktop-report.json", + "sha256": "20a3371ebf683cc16911820be35f1c4ebf8af48132339574937899d267568fd1", + "bytes": 1226 + }, + { + "path": "tests/golden/M16-GAP-00171/anim-channels-view-selected-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00171/anim-channels-view-selected-local-exact-report.json", + "sha256": "2829a891ac2d66ca3d5b0a4fac8b88bfe267280c8fb05f080b49e3e2cf880c8d", + "bytes": 1094 + }, + { + "path": "tests/golden/M16-GAP-00171/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00171/manifest.json", + "sha256": "2a79fd4ac530776054c0f81321555a034af501a9ba90184df637a6eeda7a1258", + "bytes": 2941 + }, + { + "path": "tests/golden/M16-GAP-00171/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00171/task-context.json", + "sha256": "699e03fa824e973741bcba370b5de0f0c27b8462b7c205287878dc5fed8565d6", + "bytes": 5331 + }, + { + "path": "tests/golden/M16-GAP-00172/anim-clear-useless-actions-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00172/anim-clear-useless-actions-desktop-report.json", + "sha256": "d2b1784129a81b79ef30e8203ab1192613da16bdca25b15f18ada408d355a410", + "bytes": 1771 + }, + { + "path": "tests/golden/M16-GAP-00172/anim-clear-useless-actions-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00172/anim-clear-useless-actions-local-exact-report.json", + "sha256": "c7cfbd670b09aa46a4597867af4d8e3de6c14030dac5c9d5f21f09a9db789973", + "bytes": 948 + }, + { + "path": "tests/golden/M16-GAP-00172/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00172/manifest.json", + "sha256": "476b7ab930abbfdaa98e36944453dfe2b321f841e9d9402f2c23ec230f6b2d48", + "bytes": 2936 + }, + { + "path": "tests/golden/M16-GAP-00172/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00172/task-context.json", + "sha256": "e502eadd8178060357899c10e31d70ad63553c927ca240773ee7469466ee0730", + "bytes": 5446 + }, + { + "path": "tests/golden/M16-GAP-00173/anim-copy-driver-button-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00173/anim-copy-driver-button-desktop-report.json", + "sha256": "ba54f7de66ecfc9fb100010d28b4d26b61b585af83a8981ff1c9a77869cacb37", + "bytes": 632 + }, + { + "path": "tests/golden/M16-GAP-00173/anim-copy-driver-button-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00173/anim-copy-driver-button-local-exact-report.json", + "sha256": "561380ce0b0a8d06afe41a63c4c86e3c990ff0fd4fb08aae1433b4810377752e", + "bytes": 1067 + }, + { + "path": "tests/golden/M16-GAP-00173/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00173/manifest.json", + "sha256": "c9c0a4a7126ac3226a3cd4a7588ec4b39eda809f1e18b607940b0db2bfac73ab", + "bytes": 2921 + }, + { + "path": "tests/golden/M16-GAP-00173/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00173/task-context.json", + "sha256": "72c30f4fe3fefec72959112af15987a0d1fa85483ea1a465f980584c68fdef9d", + "bytes": 5478 + }, + { + "path": "tests/golden/M16-GAP-00174/anim-driver-button-add-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00174/anim-driver-button-add-desktop-report.json", + "sha256": "ec69ea475f22b9c49318c7bf984200c513e6841b953d837f1cbfc925fe53307b", + "bytes": 678 + }, + { + "path": "tests/golden/M16-GAP-00174/anim-driver-button-add-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00174/anim-driver-button-add-local-exact-report.json", + "sha256": "755195e7c3c31c8d3cf19cd51f569a25d0d694312c32101cea49749a15fdb3ed", + "bytes": 1193 + }, + { + "path": "tests/golden/M16-GAP-00174/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00174/manifest.json", + "sha256": "5905f9176a5d6c9ce6a6fb755bd1b8f7ccdc2d08f81b3444eea660341d180de9", + "bytes": 2916 + }, + { + "path": "tests/golden/M16-GAP-00174/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00174/task-context.json", + "sha256": "6a10343b930d4e375e39b8ce1b6d1ffba2d3c535daa70bf49f5c323568f1d500", + "bytes": 5446 + }, + { + "path": "tests/golden/M16-GAP-00175/anim-driver-button-edit-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00175/anim-driver-button-edit-desktop-report.json", + "sha256": "0e712a373d6c4d28cb14c38fcd911987c7216466ef52a9d3d19a3ce34e913112", + "bytes": 650 + }, + { + "path": "tests/golden/M16-GAP-00175/anim-driver-button-edit-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00175/anim-driver-button-edit-local-exact-report.json", + "sha256": "9bc321582ce9a45951ec4e8a43236b69a571053fc8cf48fe4cdf8b29113aada0", + "bytes": 1086 + }, + { + "path": "tests/golden/M16-GAP-00175/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00175/manifest.json", + "sha256": "f0769d32fe2fced8edf7c232c7e8956862e1418010981c0e00ead511c61d05e7", + "bytes": 2921 + }, + { + "path": "tests/golden/M16-GAP-00175/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00175/task-context.json", + "sha256": "80eb9962039ff734c5b7c5a3f908be62c92a5cffd9cfe4de80f19ccd07ad9670", + "bytes": 5592 + }, + { + "path": "tests/golden/M16-GAP-00176/anim-driver-button-remove-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00176/anim-driver-button-remove-desktop-report.json", + "sha256": "369081c441e48ee8ad39d9f4c90a4c2f80b4802143f0243e2d3e0d92f9198ee9", + "bytes": 534 + }, + { + "path": "tests/golden/M16-GAP-00176/anim-driver-button-remove-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00176/anim-driver-button-remove-local-exact-report.json", + "sha256": "44e366eb69905cd48d27decfab478c13dd6b1b715fcaae8ef7d3c75d09f1a311", + "bytes": 805 + }, + { + "path": "tests/golden/M16-GAP-00176/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00176/manifest.json", + "sha256": "38da8c875cf61f18159444a30c2fb2a3a83d5cef31498fb220b9e201931e605b", + "bytes": 2931 + }, + { + "path": "tests/golden/M16-GAP-00176/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00176/task-context.json", + "sha256": "0811175e4a76169bdf347bb9fc858e67d4559ce1aa40b81e9c0e9b604d122550", + "bytes": 5606 + }, + { + "path": "tests/golden/M16-GAP-00177/anim-end-frame-set-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00177/anim-end-frame-set-desktop-report.json", + "sha256": "332660f12353d5750b4bc613f99c77fe3dd126bee2f9051c9d742db7c5f09c3f", + "bytes": 519 + }, + { + "path": "tests/golden/M16-GAP-00177/anim-end-frame-set-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00177/anim-end-frame-set-local-exact-report.json", + "sha256": "50b9716d2813795e26324a9dd3c8e32d4b8baaee92e45b893a47bddec18657b0", + "bytes": 780 + }, + { + "path": "tests/golden/M16-GAP-00177/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00177/manifest.json", + "sha256": "35f8e52349884e7752b9d652fd415e0ac27688262e1d81cbe73550794db3b6b6", + "bytes": 2896 + }, + { + "path": "tests/golden/M16-GAP-00177/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00177/task-context.json", + "sha256": "06ee966e3f4ae02711eefa7b9562493e348ec9fd2fdf09592ff3d5f5d4f2b89c", + "bytes": 5538 + }, + { + "path": "tests/golden/M16-GAP-00178/anim-keyframe-clear-button-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00178/anim-keyframe-clear-button-desktop-report.json", + "sha256": "ba35b96dc8c7aa46427b64465aa223a87ffe2d5bf37ef42a4bd17afc430b4bee", + "bytes": 1085 + }, + { + "path": "tests/golden/M16-GAP-00178/anim-keyframe-clear-button-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00178/anim-keyframe-clear-button-local-exact-report.json", + "sha256": "9969372551c877505755cf23454610ca8211cc77a6e1267b366e848ebd69e30d", + "bytes": 1587 + }, + { + "path": "tests/golden/M16-GAP-00178/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00178/manifest.json", + "sha256": "351ff1a4e32fff9653bf276eebd6638bfa729130c6379dca0a5355e664961e4e", + "bytes": 2936 + }, + { + "path": "tests/golden/M16-GAP-00178/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00178/task-context.json", + "sha256": "ff864d8ebd9e42c478667639926c27b4580c35baf72c77f7cb0df71d0022e179", + "bytes": 5531 + }, + { + "path": "tests/golden/M16-GAP-00179/anim-keyframe-clear-v3d-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00179/anim-keyframe-clear-v3d-desktop-report.json", + "sha256": "2e63bae9cbb613ab96faf2fa802e34caf5aca2e7c3968c93ef0dc9de6a16fecf", + "bytes": 1157 + }, + { + "path": "tests/golden/M16-GAP-00179/anim-keyframe-clear-v3d-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00179/anim-keyframe-clear-v3d-local-exact-report.json", + "sha256": "6b675af2fd56ce8ee146676101ca9f0be6365a9702b80d8def8c27460a1e7ae9", + "bytes": 1566 + }, + { + "path": "tests/golden/M16-GAP-00179/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00179/manifest.json", + "sha256": "bd344a1160ca950db34f10d92a43288cc1ac707af00e1bf43a9a903c45547a67", + "bytes": 2921 + }, + { + "path": "tests/golden/M16-GAP-00179/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00179/task-context.json", + "sha256": "74ae2d753d5a89d6692a3e73552849d7303e576de19f54d78311b53ba49c5608", + "bytes": 5764 + }, + { + "path": "tests/golden/M16-GAP-00180/anim-keyframe-clear-vse-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00180/anim-keyframe-clear-vse-desktop-report.json", + "sha256": "6885cc9103c1b9c8396a684559d08d0899ca096580278a5fa321ee6cec4412ec", + "bytes": 1226 + }, + { + "path": "tests/golden/M16-GAP-00180/anim-keyframe-clear-vse-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00180/anim-keyframe-clear-vse-local-exact-report.json", + "sha256": "9e05fde557e26ac9be8dc8c7983be4a25e7637542643aa8b38708a1868de27ad", + "bytes": 1693 + }, + { + "path": "tests/golden/M16-GAP-00180/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00180/manifest.json", + "sha256": "e6d90f0df54469a1016917e71480ad58ba901d50694d2727d5e0927b237848eb", + "bytes": 2921 + }, + { + "path": "tests/golden/M16-GAP-00180/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00180/task-context.json", + "sha256": "a90f35e4b60f26bac6d8900a1838d08cbfc20638f65f45f8dbf2306c7160f1d4", + "bytes": 5739 + }, + { + "path": "tests/golden/M16-GAP-00181/anim-keyframe-delete-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00181/anim-keyframe-delete-desktop-report.json", + "sha256": "cec3f76e20a38572bf4a38789e1df1aa83ffd4f332e940c238e4d633dd841c7d", + "bytes": 1552 + }, + { + "path": "tests/golden/M16-GAP-00181/anim-keyframe-delete-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00181/anim-keyframe-delete-local-exact-report.json", + "sha256": "4e75034a44e46afef417e241e6c81d84a1d46a8bf34e779495d9c6885c3b8bfc", + "bytes": 2020 + }, + { + "path": "tests/golden/M16-GAP-00181/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00181/manifest.json", + "sha256": "32fd366de6190029b377c8faf9ed1b661234cbc6b01925d247b46e00e7bc62ad", + "bytes": 2906 + }, + { + "path": "tests/golden/M16-GAP-00181/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00181/task-context.json", + "sha256": "ad1b7ad175eaa42b41c75f1a36d7b55f190c8bbd39d8861e7e7aaa016984b6e1", + "bytes": 5793 + }, + { + "path": "tests/golden/M16-GAP-00182/anim-keyframe-delete-button-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00182/anim-keyframe-delete-button-desktop-report.json", + "sha256": "5df192b8cf82b0e53efa947f9102424cfccf05b29a4e293342ea2e3ace60b0d1", + "bytes": 1470 + }, + { + "path": "tests/golden/M16-GAP-00182/anim-keyframe-delete-button-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00182/anim-keyframe-delete-button-local-exact-report.json", + "sha256": "097fdcab03f3e748077c3b1d8cdcfbb9a9b2d7df9b1ca03c54b9f0a3a637c947", + "bytes": 2083 + }, + { + "path": "tests/golden/M16-GAP-00182/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00182/manifest.json", + "sha256": "75787ace3726209e5ff0058c6ab8787d8eb6a386318ab2bf50c79457f587bf87", + "bytes": 2941 + }, + { + "path": "tests/golden/M16-GAP-00182/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00182/task-context.json", + "sha256": "76d618d236a7741f912e09f4e48ec7bbdce9ac93c3fafee48dfe7ca2ebeae03c", + "bytes": 5779 + }, + { + "path": "tests/golden/M16-GAP-00183/anim-keyframe-delete-by-name-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00183/anim-keyframe-delete-by-name-desktop-report.json", + "sha256": "105d464e66e7ac9c3cee66c3a33a47101c95b08f9851a875373d43370c48f70e", + "bytes": 1592 + }, + { + "path": "tests/golden/M16-GAP-00183/anim-keyframe-delete-by-name-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00183/anim-keyframe-delete-by-name-local-exact-report.json", + "sha256": "3e8dd9268e4aa73f673dbbe5c9abc3d9c00acfdbe1cc019673c49925e342deca", + "bytes": 2086 + }, + { + "path": "tests/golden/M16-GAP-00183/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00183/manifest.json", + "sha256": "a792624c1a6c90440244488e345af7637a8451d9caa33495368356041aed8273", + "bytes": 2946 + }, + { + "path": "tests/golden/M16-GAP-00183/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00183/task-context.json", + "sha256": "655cf1b0482f7159b63228a6db2bd2828836d707147f3de74727e9fcdc8a07f4", + "bytes": 5772 + }, + { + "path": "tests/golden/M16-GAP-00184/anim-keyframe-delete-v3d-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00184/anim-keyframe-delete-v3d-desktop-report.json", + "sha256": "576e712c7d4d72dc15fc2b9a4b65748c2ddd4b43f69c86a57e3365621f19db43", + "bytes": 1458 + }, + { + "path": "tests/golden/M16-GAP-00184/anim-keyframe-delete-v3d-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00184/anim-keyframe-delete-v3d-local-exact-report.json", + "sha256": "3737dbe1e6189cd8312cc3cd3f328e764b2a9ce173a48946e9413a82e8fa4a47", + "bytes": 2053 + }, + { + "path": "tests/golden/M16-GAP-00184/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00184/manifest.json", + "sha256": "73843947605c1cb981fae06d47682662bcfe259534e57cb46ee6404b34d041fc", + "bytes": 2926 + }, + { + "path": "tests/golden/M16-GAP-00184/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00184/task-context.json", + "sha256": "41f3f005f99d3e9130a4335fa5cde7982598096f57756e5760f092d3b78792ec", + "bytes": 5742 + }, + { + "path": "tests/golden/M16-GAP-00185/anim-keyframe-delete-vse-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00185/anim-keyframe-delete-vse-desktop-report.json", + "sha256": "a7fb103d0746837b7d56ae89e6b8fa6de374f11cfff8cdf79d88fba199449721", + "bytes": 1586 + }, + { + "path": "tests/golden/M16-GAP-00185/anim-keyframe-delete-vse-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00185/anim-keyframe-delete-vse-local-exact-report.json", + "sha256": "aecbd1f8b711b2299db7e7665931a549a7318d638942eb2d343d680fc0ce5acc", + "bytes": 2151 + }, + { + "path": "tests/golden/M16-GAP-00185/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00185/manifest.json", + "sha256": "0c4e04128b54580988cec59baaf08e1471be26050e380bea7eb9f21a2b092da3", + "bytes": 2926 + }, + { + "path": "tests/golden/M16-GAP-00185/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00185/task-context.json", + "sha256": "3badb8af0ff6bd1168e2576568f8be4c44f4b77a175ea86b8e6650a9ef92077f", + "bytes": 5653 + }, + { + "path": "tests/golden/M16-GAP-00186/anim-keyframe-insert-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00186/anim-keyframe-insert-desktop-report.json", + "sha256": "dfb8191a85b427ab80a3f6cb2fa118f0f7ddc1ce895b93c8c6e4ddf34f4d780c", + "bytes": 1555 + }, + { + "path": "tests/golden/M16-GAP-00186/anim-keyframe-insert-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00186/anim-keyframe-insert-local-exact-report.json", + "sha256": "17e4943e084a1323e1de9eca68039b4a6a9e9d060c9e3d3e44e663c8a9d93ce1", + "bytes": 2024 + }, + { + "path": "tests/golden/M16-GAP-00186/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00186/manifest.json", + "sha256": "fc77d169050a1bd032820da68dd63e059878188faa2eb88ab1fc7ffc5041548d", + "bytes": 2906 + }, + { + "path": "tests/golden/M16-GAP-00186/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00186/task-context.json", + "sha256": "4115c25ef7bce2ce0cd3fcadedf6c8aba24fbcd4eb0f037f60f1d0548316d540", + "bytes": 5642 + }, + { + "path": "tests/golden/M16-GAP-00187/anim-keyframe-insert-button-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00187/anim-keyframe-insert-button-desktop-report.json", + "sha256": "b7de5f8ac81d96e316a6d13b1f03650339841bf043ff3a4c9b3396a14420f506", + "bytes": 1473 + }, + { + "path": "tests/golden/M16-GAP-00187/anim-keyframe-insert-button-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00187/anim-keyframe-insert-button-local-exact-report.json", + "sha256": "460c2285310d2cf456ced4f1438ab6fd609a1470dde4a37cd09b349099f90873", + "bytes": 2087 + }, + { + "path": "tests/golden/M16-GAP-00187/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00187/manifest.json", + "sha256": "942eafb747f0d002ad2179d90f89acc64e3c347d340355895136689755a2052e", + "bytes": 2941 + }, + { + "path": "tests/golden/M16-GAP-00187/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00187/task-context.json", + "sha256": "cdfc0b01d9e76dfaed39d9e6c44836cf3aea3df2a363689177e775d2286e0182", + "bytes": 5718 + }, + { + "path": "tests/golden/M16-GAP-00188/anim-keyframe-insert-by-name-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00188/anim-keyframe-insert-by-name-desktop-report.json", + "sha256": "d89d0950420ef0a81ca983619bf0f168b173e1a631769bcb4b342cfe3b2a9c09", + "bytes": 1595 + }, + { + "path": "tests/golden/M16-GAP-00188/anim-keyframe-insert-by-name-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00188/anim-keyframe-insert-by-name-local-exact-report.json", + "sha256": "4928e35b98ac71b76c68fe2eccbd86481bb854123d428b1af66fbc7270df7e42", + "bytes": 2090 + }, + { + "path": "tests/golden/M16-GAP-00188/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00188/manifest.json", + "sha256": "1ea8b1c23b9e324634206e37e4b74f4714dd749a1d712d3a411a03d2be6aa3f7", + "bytes": 2946 + }, + { + "path": "tests/golden/M16-GAP-00188/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00188/task-context.json", + "sha256": "64ceb67dd3d00a7e07a5dd4f263527326442a591b1b5a404c2235809c05274d0", + "bytes": 5779 + }, + { + "path": "tests/golden/M16-GAP-00189/anim-keyframe-insert-menu-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00189/anim-keyframe-insert-menu-desktop-report.json", + "sha256": "8f01c695716b3902e0d8caa4b335bc67257e4688a4af5e35fd61b5d98d9b3d03", + "bytes": 1581 + }, + { + "path": "tests/golden/M16-GAP-00189/anim-keyframe-insert-menu-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00189/anim-keyframe-insert-menu-local-exact-report.json", + "sha256": "a95cc2b84481263298f5bef1fbe0d46a2ab272de25ce5e0a39e84457453e0144", + "bytes": 2067 + }, + { + "path": "tests/golden/M16-GAP-00189/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00189/manifest.json", + "sha256": "1ffc688a62e5c7f5141a9cd52dd192630097f01eacc8a8c6eac4991586eba33e", + "bytes": 2931 + }, + { + "path": "tests/golden/M16-GAP-00189/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00189/task-context.json", + "sha256": "46d321ed3909a9a52fdaf4b2c1f2ee9be2d16c2c8aff32ce4baca43c09f41682", + "bytes": 5773 + }, + { + "path": "tests/golden/M16-GAP-00190/anim-keying-set-active-set-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00190/anim-keying-set-active-set-desktop-report.json", + "sha256": "69ff6f5b3862697e6d17545c63264a0361aa9f6996b874897dd25a138257bc38", + "bytes": 1625 + }, + { + "path": "tests/golden/M16-GAP-00190/anim-keying-set-active-set-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00190/anim-keying-set-active-set-local-exact-report.json", + "sha256": "70e94768b98b0b14a1d03e9e016e62374838b4ad6fa68f893519fed6674f709d", + "bytes": 2545 + }, + { + "path": "tests/golden/M16-GAP-00190/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00190/manifest.json", + "sha256": "b5b28c6e402db6eb90d4c4a5f1837476d3a24d6725e63c9b70ec5461a4c665d7", + "bytes": 2936 + }, + { + "path": "tests/golden/M16-GAP-00190/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00190/task-context.json", + "sha256": "aaff27f84e2eb6f2d49c31ef6467e512acd01efca64a46dbe0fb967f19aedd98", + "bytes": 5706 + }, + { + "path": "tests/golden/M16-GAP-00191/anim-keying-set-add-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00191/anim-keying-set-add-desktop-report.json", + "sha256": "b19f86edd48c4fb40f3077af333baa89127d51218ca110861f2e77063caff304", + "bytes": 1599 + }, + { + "path": "tests/golden/M16-GAP-00191/anim-keying-set-add-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00191/anim-keying-set-add-local-exact-report.json", + "sha256": "d244b7788db82edae28bf1ceebe5d5a8978b317ea8a259abd4ecc1c071fdc68a", + "bytes": 2498 + }, + { + "path": "tests/golden/M16-GAP-00191/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00191/manifest.json", + "sha256": "1498471253dd616979da562845d490964291b15431b49be766ec224c0aada7aa", + "bytes": 2901 + }, + { + "path": "tests/golden/M16-GAP-00191/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00191/task-context.json", + "sha256": "640288c7b699719aae7d92a951846b7dcdd31e944e1ba88440300331de3af570", + "bytes": 5691 + }, + { + "path": "tests/golden/M16-GAP-00192/WebGapAnimKeyingSetExportSet.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00192/WebGapAnimKeyingSetExportSet.py", + "sha256": "ef38d3cd23ef00a277e66202010b2001efca51cec053b34762924db32592f966", + "bytes": 471 + }, + { + "path": "tests/golden/M16-GAP-00192/anim-keying-set-export-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00192/anim-keying-set-export-desktop-report.json", + "sha256": "14b1c5675c9088305246d5afea8f291ef989c6735c3795e377b42524af2f7fed", + "bytes": 1849 + }, + { + "path": "tests/golden/M16-GAP-00192/anim-keying-set-export-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00192/anim-keying-set-export-local-exact-report.json", + "sha256": "0544edee932393df992ac05a4dbb07b4b1c82e4045cb15b674b182989105d0fa", + "bytes": 2738 + }, + { + "path": "tests/golden/M16-GAP-00192/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00192/manifest.json", + "sha256": "03d3b95ec10a7ee544448d4e9869684ca8c6a3f11a1e321fa80d58c812135c76", + "bytes": 2850 + }, + { + "path": "tests/golden/M16-GAP-00192/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00192/task-context.json", + "sha256": "5bdca225c7027399992cc26b67f0e7ed37726d1adc7afd1009677a9eaf491c30", + "bytes": 5595 + }, + { + "path": "tests/golden/M16-GAP-00193/anim-keying-set-path-add-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00193/anim-keying-set-path-add-desktop-report.json", + "sha256": "0deab04ebdbf06c6b344707bf3025677d445c6995cbe3ea1268808c59ec74472", + "bytes": 1991 + }, + { + "path": "tests/golden/M16-GAP-00193/anim-keying-set-path-add-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00193/anim-keying-set-path-add-local-exact-report.json", + "sha256": "61e41fbc56bc7c6c1cbceb4ad3e28cb599e072f8c865f0a573091b47ba53790f", + "bytes": 2950 + }, + { + "path": "tests/golden/M16-GAP-00193/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00193/manifest.json", + "sha256": "203219913781f09abaa1aab272f97117907f44e9dc0a08691500457ac4b24446", + "bytes": 2686 + }, + { + "path": "tests/golden/M16-GAP-00193/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00193/task-context.json", + "sha256": "d459521fe19a776c7b81dd7b49dc3aba7e3f5eba864612f0817fd1ca9bb4dda9", + "bytes": 5598 + }, + { + "path": "tests/golden/M16-GAP-00194/anim-keying-set-path-remove-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00194/anim-keying-set-path-remove-desktop-report.json", + "sha256": "36ec6d4232418b56ea06b375bd0562718ef0cb787c393a860fcf69b663aa3a89", + "bytes": 2042 + }, + { + "path": "tests/golden/M16-GAP-00194/anim-keying-set-path-remove-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00194/anim-keying-set-path-remove-local-exact-report.json", + "sha256": "a840e751c3e8c7ef6b02f388e8db434ebcd6cb4d0a151fbb3350d98f6689f438", + "bytes": 3022 + }, + { + "path": "tests/golden/M16-GAP-00194/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00194/manifest.json", + "sha256": "d8336a458497eff326ab8a8df3050c5e4e2f41b0297a2f070ec976c09377f270", + "bytes": 2701 + }, + { + "path": "tests/golden/M16-GAP-00194/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00194/task-context.json", + "sha256": "ecd39a4fd55eb2f7fcc3bacaa8046ab21d56ce5ae8e936898c2fa9a85b9f08cd", + "bytes": 5588 + }, + { + "path": "tests/golden/M16-GAP-00195/anim-keying-set-remove-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00195/anim-keying-set-remove-desktop-report.json", + "sha256": "67fc9add6112f6513a95028ba2170d468b1ca82d83cf1b8d1afe2da98b907b15", + "bytes": 1678 + }, + { + "path": "tests/golden/M16-GAP-00195/anim-keying-set-remove-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00195/anim-keying-set-remove-local-exact-report.json", + "sha256": "f1a6dc449055b1cddb1f796b885eaa347cf1c64ca082af7940c9c751a59dec9e", + "bytes": 2602 + }, + { + "path": "tests/golden/M16-GAP-00195/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00195/manifest.json", + "sha256": "4a46a92b6ea9fee6f99e3d7284e78d74748cb52a57d942d874df664da85d65f2", + "bytes": 2676 + }, + { + "path": "tests/golden/M16-GAP-00195/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00195/task-context.json", + "sha256": "e462b1602ed761491ad2054fc7152fb36306b21a0c14f2511a3cbc21b2b740d2", + "bytes": 5548 + }, + { + "path": "tests/golden/M16-GAP-00196/anim-keyingset-button-add-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00196/anim-keyingset-button-add-desktop-report.json", + "sha256": "a213760a261879356db09714df719221fef2f0a4c26865e12396b80089c21583", + "bytes": 1919 + }, + { + "path": "tests/golden/M16-GAP-00196/anim-keyingset-button-add-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00196/anim-keyingset-button-add-local-exact-report.json", + "sha256": "3146c77b1f77e3db9b1dc855c31408b0c076ecfea258aea8a86a834ab06ad9b3", + "bytes": 2883 + }, + { + "path": "tests/golden/M16-GAP-00196/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00196/manifest.json", + "sha256": "ba672d3e9ba02086b25a595fde84f8248d9ed288fdd5b53de0b7ff02071e3e46", + "bytes": 2691 + }, + { + "path": "tests/golden/M16-GAP-00196/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00196/task-context.json", + "sha256": "325c63d0601e3b9adf8afb69f6d3cbfd970e3fc281eaa70b13d7cddb0399e324", + "bytes": 5572 + }, + { + "path": "tests/golden/M16-GAP-00197/anim-keyingset-button-remove-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00197/anim-keyingset-button-remove-desktop-report.json", + "sha256": "223020f990cda11b261e3d0daf3171450718604cee9f923b5bd3aad8c9377b8a", + "bytes": 1968 + }, + { + "path": "tests/golden/M16-GAP-00197/anim-keyingset-button-remove-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00197/anim-keyingset-button-remove-local-exact-report.json", + "sha256": "e44421253fcb26b9d313d9f97324b22a46fa8bbd8b734508416bc7bcd43c8f7b", + "bytes": 2957 + }, + { + "path": "tests/golden/M16-GAP-00197/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00197/manifest.json", + "sha256": "330488ecec1bfee69e43b02fce9b79cfd3f5e8931d66cabf1602ca1d44e94947", + "bytes": 2706 + }, + { + "path": "tests/golden/M16-GAP-00197/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00197/task-context.json", + "sha256": "e94b2c9d77d75b841ae3fe60df18005fbbd9da080417e91ec06c79ca62a3d67f", + "bytes": 5605 + }, + { + "path": "tests/golden/M16-GAP-00198/anim-merge-animation-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00198/anim-merge-animation-desktop-report.json", + "sha256": "e170913f6dd5161a10853f04c2e56ea1181de5de12fdf5fbb1159745dcd0f757", + "bytes": 3405 + }, + { + "path": "tests/golden/M16-GAP-00198/anim-merge-animation-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00198/anim-merge-animation-local-exact-report.json", + "sha256": "914ef24f01a81d7baceeed4f67f317abf529cedec6ddbbd22c1ed35bb94039e2", + "bytes": 4909 + }, + { + "path": "tests/golden/M16-GAP-00198/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00198/manifest.json", + "sha256": "7f651bc4b2238504adcb02dc35455735e7aa6cd524358e9ca0a2429546da070c", + "bytes": 2666 + }, + { + "path": "tests/golden/M16-GAP-00198/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00198/task-context.json", + "sha256": "33a275667991c5fc655596a0197bb46467f233a307bcb7752f5531ee9a3819d3", + "bytes": 5605 + }, + { + "path": "tests/golden/M16-GAP-00199/anim-paste-driver-button-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00199/anim-paste-driver-button-desktop-report.json", + "sha256": "b20074b47768751a5e6c884165c4119e95296eb7a6fc4812e8bef3676e7aaf08", + "bytes": 1558 + }, + { + "path": "tests/golden/M16-GAP-00199/anim-paste-driver-button-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00199/anim-paste-driver-button-local-exact-report.json", + "sha256": "7f860445f0e6889e6993e458b0e81f075c5b97fe8c2cf35b0eae4846e2d4cc5e", + "bytes": 1391 + }, + { + "path": "tests/golden/M16-GAP-00199/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00199/manifest.json", + "sha256": "55e28b867275c897d142b4da366a68368006de40ba7edde39b4637ce0b3771bb", + "bytes": 2686 + }, + { + "path": "tests/golden/M16-GAP-00199/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00199/task-context.json", + "sha256": "e054e382aa573e117fc34d47e2e2d8733ac17d75d490dc4f5de397e3fb9658f7", + "bytes": 5614 + }, + { + "path": "tests/golden/M16-GAP-00200/anim-previewrange-clear-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00200/anim-previewrange-clear-desktop-report.json", + "sha256": "b1e7212248ff23d323e9c00645db52b38c4570f42c344b6325f1506c404704c4", + "bytes": 634 + }, + { + "path": "tests/golden/M16-GAP-00200/anim-previewrange-clear-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00200/anim-previewrange-clear-local-exact-report.json", + "sha256": "7ba44c02fcfa34df1c4e25fb3567474893b47dc4a20522f33634cd3ad36fe940", + "bytes": 822 + }, + { + "path": "tests/golden/M16-GAP-00200/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00200/manifest.json", + "sha256": "d0e50c659eae65217eb314559e6c4aaa50dd830a6a53d5a3ff9aa182e1baf6ed", + "bytes": 2681 + }, + { + "path": "tests/golden/M16-GAP-00200/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00200/task-context.json", + "sha256": "1cb7806458458bc5e417a84b556e3fb777457f2af1e1dcd2fc4936911cfc508a", + "bytes": 5554 + }, + { + "path": "tests/golden/M16-GAP-00201/anim-previewrange-set-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00201/anim-previewrange-set-desktop-report.json", + "sha256": "9a4abf76db56b660808f66834d941771a0cf860a662d53771ff8bf309bf2a162", + "bytes": 591 + }, + { + "path": "tests/golden/M16-GAP-00201/anim-previewrange-set-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00201/anim-previewrange-set-local-exact-report.json", + "sha256": "7751033cb2d246ed4b87d10592894f27574d3409b5d48f3161a583f186786b67", + "bytes": 848 + }, + { + "path": "tests/golden/M16-GAP-00201/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00201/manifest.json", + "sha256": "57d93e7b6005d067485bf88745444309c342983d9428072a773a5fa9de6a7d35", + "bytes": 2671 + }, + { + "path": "tests/golden/M16-GAP-00201/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00201/task-context.json", + "sha256": "0ac3856c852d6f7e08c7709f2b6435b46e1ddb2514004d9c9caf10d255b71e72", + "bytes": 5472 + }, + { + "path": "tests/golden/M16-GAP-00202/anim-replace-action-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00202/anim-replace-action-desktop-report.json", + "sha256": "fdb5531aa70842959bb57b8b9490c9839037af9a69191e23834e8793b507ac10", + "bytes": 3818 + }, + { + "path": "tests/golden/M16-GAP-00202/anim-replace-action-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00202/anim-replace-action-local-exact-report.json", + "sha256": "c122dbb9daadb8a449032ac742d308e7b9473bb4d05ae7855cf80ed3982f4263", + "bytes": 1065 + }, + { + "path": "tests/golden/M16-GAP-00202/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00202/manifest.json", + "sha256": "8d3a4e0f3ff82b80f1cca0410e87999b324a817a8054ac322c8eea7e0ed7a81f", + "bytes": 2661 + }, + { + "path": "tests/golden/M16-GAP-00202/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00202/task-context.json", + "sha256": "1a27a9755974d092a7c1a3599657e27f19ca2d56455836c6f99142547c0866b3", + "bytes": 5431 + }, + { + "path": "tests/golden/M16-GAP-00203/anim-replace-action-new-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00203/anim-replace-action-new-desktop-report.json", + "sha256": "1017546d241a1e8b8f26c02bb392269a1325b18cbba90b1598f786250f13976a", + "bytes": 2390 + }, + { + "path": "tests/golden/M16-GAP-00203/anim-replace-action-new-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00203/anim-replace-action-new-local-exact-report.json", + "sha256": "d743947398ac1b4beca0f6cf86f676bf24d668488e1a9a575ec561d2445a1ed6", + "bytes": 1063 + }, + { + "path": "tests/golden/M16-GAP-00203/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00203/manifest.json", + "sha256": "8886ae22530f6a533b64a31216b703b34e86461c270ddbcd548a63839568df7f", + "bytes": 2681 + }, + { + "path": "tests/golden/M16-GAP-00203/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00203/task-context.json", + "sha256": "772d0122a85d60e0f0ed73fb53f700a89d251e2f8581ca84b2ee01c7792e66ca", + "bytes": 5570 + }, + { + "path": "tests/golden/M16-GAP-00204/anim-scene-range-frame-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00204/anim-scene-range-frame-desktop-report.json", + "sha256": "fd7943551bf6662d8cf43f623cdb966e7242b172eff8ca0f3bfee71c3b67dbed", + "bytes": 765 + }, + { + "path": "tests/golden/M16-GAP-00204/anim-scene-range-frame-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00204/anim-scene-range-frame-local-exact-report.json", + "sha256": "3195131f4c4cfa050656a4a301840d857f5eb65e2929aaa867d3b056d3fe631c", + "bytes": 988 + }, + { + "path": "tests/golden/M16-GAP-00204/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00204/manifest.json", + "sha256": "e54672ac3af7043e794430deed2f26f434fbdc9ebfb3418a971297a321936447", + "bytes": 2676 + }, + { + "path": "tests/golden/M16-GAP-00204/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00204/task-context.json", + "sha256": "5b90524611e783f9f9103ebc4d9504450edad0b471f9d86f62c2602c7c7d2edf", + "bytes": 5566 + }, + { + "path": "tests/golden/M16-GAP-00205/anim-separate-slots-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00205/anim-separate-slots-desktop-report.json", + "sha256": "d3976e54b5617745cd29ed3979a030553a6692a54d8cd59454593efac1e419be", + "bytes": 3023 + }, + { + "path": "tests/golden/M16-GAP-00205/anim-separate-slots-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00205/anim-separate-slots-local-exact-report.json", + "sha256": "421feb4b3b822a8bb13999e268a42f3378408d4d725879d1e05c3c8efe359a84", + "bytes": 1055 + }, + { + "path": "tests/golden/M16-GAP-00205/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00205/manifest.json", + "sha256": "72cf9e1bf9457da4cad4b8fd91c121a8d6b50d8b9ce5199de816f60250c78d3e", + "bytes": 2661 + }, + { + "path": "tests/golden/M16-GAP-00205/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00205/task-context.json", + "sha256": "744b861440cf850c81545c532cf78c6c946c2214f539d14da72d7e2fda23ff51", + "bytes": 5451 + }, + { + "path": "tests/golden/M16-GAP-00206/anim-slot-channels-move-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00206/anim-slot-channels-move-desktop-report.json", + "sha256": "17e021647d84852ea074b134a722de8dedeea70db3cf180fa60456892ebc86df", + "bytes": 2953 + }, + { + "path": "tests/golden/M16-GAP-00206/anim-slot-channels-move-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00206/anim-slot-channels-move-local-exact-report.json", + "sha256": "4c92663dc8eb44d504ba95d4a978211656bd44273ff53cb468101f00ef20f8a3", + "bytes": 976 + }, + { + "path": "tests/golden/M16-GAP-00206/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00206/manifest.json", + "sha256": "3b1207f1c3db50bcd1efdfd40f21cdbf99323288fd984a9da172f4525df31a9a", + "bytes": 2709 + }, + { + "path": "tests/golden/M16-GAP-00206/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00206/task-context.json", + "sha256": "da58033c8325bdf4c16687776315ba7689c9a0d908f327dbabf98507699bbc3c", + "bytes": 5504 + }, + { + "path": "tests/golden/M16-GAP-00207/anim-slot-new-for-id-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00207/anim-slot-new-for-id-desktop-report.json", + "sha256": "62998821fb29ec9edb1c2796f984e009091cb9d12ccca4ec058094aea695a6f3", + "bytes": 1605 + }, + { + "path": "tests/golden/M16-GAP-00207/anim-slot-new-for-id-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00207/anim-slot-new-for-id-local-exact-report.json", + "sha256": "2c843b2611ac386e68943adb36fc826dcb694c8fb30df9b0abf10f8970b4f4fc", + "bytes": 883 + }, + { + "path": "tests/golden/M16-GAP-00207/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00207/manifest.json", + "sha256": "d6aa11be23f7a4657161e6a8b9794a2c797880cb5ec598aad588bd5cb5f5e2e5", + "bytes": 2823 + }, + { + "path": "tests/golden/M16-GAP-00207/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00207/task-context.json", + "sha256": "37746bd730e6642f8a2ca14fe36b590977c2a409cf0df23e338ef43d7a22fd13", + "bytes": 5523 + }, + { + "path": "tests/golden/M16-GAP-00208/anim-slot-unassign-from-constraint-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00208/anim-slot-unassign-from-constraint-desktop-report.json", + "sha256": "a303a5e1060fde95fbaaa0cf6e759cb4af330cf233b65ae1462953960fca51cd", + "bytes": 962 + }, + { + "path": "tests/golden/M16-GAP-00208/anim-slot-unassign-from-constraint-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00208/anim-slot-unassign-from-constraint-local-exact-report.json", + "sha256": "cc7a531c48dc232d822ae6ffcc19f459d44d02976eb3b2f04133435d7a98b158", + "bytes": 1044 + }, + { + "path": "tests/golden/M16-GAP-00208/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00208/manifest.json", + "sha256": "06fac2d9fbe04f6308ce39377fd1360890604bd26d30939339dc42e86035cd55", + "bytes": 2893 + }, + { + "path": "tests/golden/M16-GAP-00208/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00208/task-context.json", + "sha256": "d5bd4bdecaafbb137b89769a001b6e966e47d31059bce66b524384ea3e8a0a01", + "bytes": 5590 + }, + { + "path": "tests/golden/M16-GAP-00209/anim-slot-unassign-from-id-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00209/anim-slot-unassign-from-id-desktop-report.json", + "sha256": "12d1d6492c6d682a519045cc840c0e8f8b212b9eca9f0bdfa15536dc4602f17f", + "bytes": 1438 + }, + { + "path": "tests/golden/M16-GAP-00209/anim-slot-unassign-from-id-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00209/anim-slot-unassign-from-id-local-exact-report.json", + "sha256": "e42355c5cd82a7b06e5560312869fec9eed33ba7db613668c7920b3363901122", + "bytes": 957 + }, + { + "path": "tests/golden/M16-GAP-00209/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00209/manifest.json", + "sha256": "1dc0a49c9b7eafeb7a12725c5dabe99e475c6f8b1ce46458d0088f88f8ad8768", + "bytes": 2853 + }, + { + "path": "tests/golden/M16-GAP-00209/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00209/task-context.json", + "sha256": "c6c9e58a950aee3230dc6a2a04f1ec5b8273caf2a4cf34cf86006193eaf4f78e", + "bytes": 5544 + }, + { + "path": "tests/golden/M16-GAP-00210/anim-slot-unassign-from-nla-strip-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00210/anim-slot-unassign-from-nla-strip-desktop-report.json", + "sha256": "35c89ff2c01b3887949572d83f27665b76eee49c5486e40b2c1b9e649916c9a2", + "bytes": 1070 + }, + { + "path": "tests/golden/M16-GAP-00210/anim-slot-unassign-from-nla-strip-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00210/anim-slot-unassign-from-nla-strip-local-exact-report.json", + "sha256": "d83b48f105f430cb7bbc2151b837fa589944a7c8d36a6156269ce4552aea5d41", + "bytes": 1040 + }, + { + "path": "tests/golden/M16-GAP-00210/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00210/manifest.json", + "sha256": "f7881ee15006bbe0788238d285b92519a468b3fd833c8c07764252486b2587a6", + "bytes": 2888 + }, + { + "path": "tests/golden/M16-GAP-00210/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00210/task-context.json", + "sha256": "8d6bebc0df33dd02879078f9d824883255a290c2d9b72609bbecf689e3b49c66", + "bytes": 5541 + }, + { + "path": "tests/golden/M16-GAP-00211/anim-start-frame-set-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00211/anim-start-frame-set-desktop-report.json", + "sha256": "b17a936ea363e216aa819cd90c79669a8f95c0c9cdb6aae74c5e24df13a4e240", + "bytes": 527 + }, + { + "path": "tests/golden/M16-GAP-00211/anim-start-frame-set-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00211/anim-start-frame-set-local-exact-report.json", + "sha256": "b145f06715d9d6ef03a304e79d9cf635912db731d00991cd3be4dd56a6cc1a71", + "bytes": 790 + }, + { + "path": "tests/golden/M16-GAP-00211/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00211/manifest.json", + "sha256": "47b0ed1ca1801bccd86b4c829c6d95ed6b99ce63131c9a78e27fb5681eedb8e2", + "bytes": 2823 + }, + { + "path": "tests/golden/M16-GAP-00211/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00211/task-context.json", + "sha256": "910687fefc3ca3b8661d437c62816ebb19c3c263ec745ec70dcf039dfe0fcc43", + "bytes": 5454 + }, + { + "path": "tests/golden/M16-GAP-00212/anim-update-animated-transform-constraints-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00212/anim-update-animated-transform-constraints-desktop-report.json", + "sha256": "6e486664dd967eec8f93569db555e23400fc147d40d172b7c1af19188e7e25e1", + "bytes": 1513 + }, + { + "path": "tests/golden/M16-GAP-00212/anim-update-animated-transform-constraints-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00212/anim-update-animated-transform-constraints-local-exact-report.json", + "sha256": "98592f2cfe53ea6f2d59b34203211b0a45d3969ff546857313e2463f7f8e7b57", + "bytes": 1207 + }, + { + "path": "tests/golden/M16-GAP-00212/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00212/manifest.json", + "sha256": "b0816225b3c22bd80b9a89d51c7ea57d1723149eea9859a017019d6ba0953673", + "bytes": 2933 + }, + { + "path": "tests/golden/M16-GAP-00212/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00212/task-context.json", + "sha256": "b1e138449cd81cc88bfe78855410f9b640db035bbfc59bc21fd750f5887ca3e6", + "bytes": 5621 + }, + { + "path": "tests/golden/M16-GAP-00213/anim-version-bone-hide-property-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00213/anim-version-bone-hide-property-desktop-report.json", + "sha256": "35c3ee64110db16c946056cd3c3044321d6101a4ee68c2fd68038cbab4576616", + "bytes": 2086 + }, + { + "path": "tests/golden/M16-GAP-00213/anim-version-bone-hide-property-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00213/anim-version-bone-hide-property-local-exact-report.json", + "sha256": "117e80e3ee5caf95979201d85b650de27967196242bf6f5656d24c3cec973d85", + "bytes": 1206 + }, + { + "path": "tests/golden/M16-GAP-00213/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00213/manifest.json", + "sha256": "08467e4ffc091a6b32ce09ba35cacaff880f3292823bc0bd2a8ca4995ddbc8ec", + "bytes": 2878 + }, + { + "path": "tests/golden/M16-GAP-00213/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00213/task-context.json", + "sha256": "a9cbb2cffc15ad50810b4e806492a6dda84b30757f085c17a0c754c4160c9868", + "bytes": 5635 + }, + { + "path": "tests/golden/M16-GAP-00214/anim-view-curve-in-graph-editor-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00214/anim-view-curve-in-graph-editor-desktop-report.json", + "sha256": "127e6168e198cae8661d358b457d1459f9b515f79d2a6e86aa0c1022fb3210c6", + "bytes": 2044 + }, + { + "path": "tests/golden/M16-GAP-00214/anim-view-curve-in-graph-editor-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00214/anim-view-curve-in-graph-editor-local-exact-report.json", + "sha256": "bfa381ab96c2f2f0d9d16dcc7afd7a0200284a5704610cb70a6f0db402c3698b", + "bytes": 1513 + }, + { + "path": "tests/golden/M16-GAP-00214/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00214/manifest.json", + "sha256": "0ff1e297545b308ad6ef9006c80992a0f9ecba88008bf9c0b4f3a86b6c28c145", + "bytes": 3134 + }, + { + "path": "tests/golden/M16-GAP-00214/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00214/task-context.json", + "sha256": "905f7ee4e419109e77a274f385c405132f5e471cf0c4f0e24c363fd60dffb431", + "bytes": 5704 + }, + { + "path": "tests/golden/M16-GAP-00215/armature-align-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00215/armature-align-desktop-report.json", + "sha256": "f0f94981885773704748c302cad95cf7b0a24137cfb6d36921e8d464c408cb40", + "bytes": 1667 + }, + { + "path": "tests/golden/M16-GAP-00215/armature-align-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00215/armature-align-local-exact-report.json", + "sha256": "d9b19ad3b36bc1a7303207b9ed9f3c2b32df072fce5349718b2783019e144e4e", + "bytes": 1250 + }, + { + "path": "tests/golden/M16-GAP-00215/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00215/manifest.json", + "sha256": "7d5ff929aa6c3532f6f895e21a5e195e445ddbf0cf3d2d7e9fc5254488a4b0b2", + "bytes": 2740 + }, + { + "path": "tests/golden/M16-GAP-00215/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00215/task-context.json", + "sha256": "82b2e30643461bfcff8612e29aebe38d50f2585b8be9b1c780ae6d762298ab87", + "bytes": 5648 + }, + { + "path": "tests/golden/M16-GAP-00216/armature-assign-to-collection-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00216/armature-assign-to-collection-desktop-report.json", + "sha256": "f9ea1aedef9d6286d5038e9244cd82fec979238d3d72da76201b7bc3ac18b7e2", + "bytes": 1396 + }, + { + "path": "tests/golden/M16-GAP-00216/armature-assign-to-collection-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00216/armature-assign-to-collection-local-exact-report.json", + "sha256": "4d063e44db5ebe56585caf6e1e28c9ba5dfaee8ddd95c4402a0d40474b94187c", + "bytes": 1381 + }, + { + "path": "tests/golden/M16-GAP-00216/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00216/manifest.json", + "sha256": "3b2e12276994fca0c6c2d548eb634f9bcd44c6cf504cfea06b53aa863e59c754", + "bytes": 2815 + }, + { + "path": "tests/golden/M16-GAP-00216/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00216/task-context.json", + "sha256": "0f93744560fa885b9cf0d8e1c6ed605f922ea4bc44c521fee023adae2c0e5cae", + "bytes": 5611 + }, + { + "path": "tests/golden/M16-GAP-00217/armature-autoside-names-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00217/armature-autoside-names-desktop-report.json", + "sha256": "2ccaaa1f2b8549abc17bd0640add62b658ccc77b9a2792456df929dd209e466d", + "bytes": 1625 + }, + { + "path": "tests/golden/M16-GAP-00217/armature-autoside-names-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00217/armature-autoside-names-local-exact-report.json", + "sha256": "2a479e88f080b7e7530f1f8f6ac87fe5aa5ca7ffaf69a068eaf4eeb99b257e80", + "bytes": 1097 + }, + { + "path": "tests/golden/M16-GAP-00217/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00217/manifest.json", + "sha256": "2edf78e7629b31c116389be652225e4279c0fd40bbbb58debb3d3bb1d66c8f01", + "bytes": 2785 + }, + { + "path": "tests/golden/M16-GAP-00217/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00217/task-context.json", + "sha256": "0dc798480ef127c5528973b78ba24a99f8514b04212578e0f3b5633be8da06fa", + "bytes": 5707 + }, + { + "path": "tests/golden/M16-GAP-00218/armature-bone-primitive-add-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00218/armature-bone-primitive-add-desktop-report.json", + "sha256": "7176938d759ad47b1c4fd6a4c4b73cc3af615518f30540d535a0f997bfdfc3ef", + "bytes": 1395 + }, + { + "path": "tests/golden/M16-GAP-00218/armature-bone-primitive-add-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00218/armature-bone-primitive-add-local-exact-report.json", + "sha256": "042cee11ebc0ccac3108e51773fb486c08c8ef6f745d018b0abb6469678f4fb7", + "bytes": 1104 + }, + { + "path": "tests/golden/M16-GAP-00218/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00218/manifest.json", + "sha256": "ed1737fa32a6d1bb5bdaca5e5eb35ff5006fbe14eeba59d96e6b24e64cd7bcc9", + "bytes": 2805 + }, + { + "path": "tests/golden/M16-GAP-00218/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00218/task-context.json", + "sha256": "42735f344b07d948bd9f302e4e21ae7580ca97506d5903667b56c24b4af02d48", + "bytes": 5597 + }, + { + "path": "tests/golden/M16-GAP-00219/armature-calculate-roll-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00219/armature-calculate-roll-desktop-report.json", + "sha256": "b4ea9eee1596aa99d045e7064b96a763faf7b29d6f7c79b95045d75ff26dd922", + "bytes": 1783 + }, + { + "path": "tests/golden/M16-GAP-00219/armature-calculate-roll-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00219/armature-calculate-roll-local-exact-report.json", + "sha256": "1c888b9739c03fcd5aed2b1de20a2aea3871c80cff6b6fcb464e09a5478f5c23", + "bytes": 1346 + }, + { + "path": "tests/golden/M16-GAP-00219/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00219/manifest.json", + "sha256": "3a57247b3f1ef1b2ebad1b59e81d18063e98210b653889c975e3b93f088ef820", + "bytes": 2533 + }, + { + "path": "tests/golden/M16-GAP-00219/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00219/task-context.json", + "sha256": "1c6a55bdc4fd17687a7695b44fba71bd5ad26644919dbcd363b6a7dec07cbde9", + "bytes": 5638 + }, + { + "path": "tests/golden/M16-GAP-00220/armature-click-extrude-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00220/armature-click-extrude-desktop-report.json", + "sha256": "5fe98d54a481df86862f9f3bcdcb854fa9ea4abfb7de9de6819a07beb2bdb4af", + "bytes": 3760 + }, + { + "path": "tests/golden/M16-GAP-00220/armature-click-extrude-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00220/armature-click-extrude-local-exact-report.json", + "sha256": "dbe683725d4e05220b6abaf837450c31f66cb8c82eb4ef75130c332ba98125d8", + "bytes": 1894 + }, + { + "path": "tests/golden/M16-GAP-00220/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00220/manifest.json", + "sha256": "95fdbc58ff2d2d7db0462090f823bcecbc8e3e79642134eab568a8d1e41f82b0", + "bytes": 2528 + }, + { + "path": "tests/golden/M16-GAP-00220/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00220/task-context.json", + "sha256": "dfba3c91da5262603b2958c8011b317a5edd25bd1cf5b1a58cbe6bfd224024f7", + "bytes": 5619 + }, + { + "path": "tests/golden/M16-GAP-00221/armature-collection-add-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00221/armature-collection-add-desktop-report.json", + "sha256": "ccbe838e9d73ce8d63f7b81b5d7b28acf038b802fd5f76c5b806f21925df6e3b", + "bytes": 1356 + }, + { + "path": "tests/golden/M16-GAP-00221/armature-collection-add-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00221/armature-collection-add-local-exact-report.json", + "sha256": "edd1a7688e96982df6a0b3216784c437d668c70fb817e58f11be9a6be6a10dcd", + "bytes": 1327 + }, + { + "path": "tests/golden/M16-GAP-00221/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00221/manifest.json", + "sha256": "74053893965d4a9f206a601edb4ebd1c7fa1e25d8545924e7880b1ad25fada1d", + "bytes": 2533 + }, + { + "path": "tests/golden/M16-GAP-00221/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00221/task-context.json", + "sha256": "33c38758f90a7a49b0864dbccd1176d04ae0057829e7a1aed56ee8ff66e57610", + "bytes": 5670 + }, + { + "path": "tests/golden/M16-GAP-00222/armature-collection-assign-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00222/armature-collection-assign-desktop-report.json", + "sha256": "db90ed0998768c9009f1c19b9eec12392d5c73bc7ca914a780bdd6721b41e932", + "bytes": 1528 + }, + { + "path": "tests/golden/M16-GAP-00222/armature-collection-assign-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00222/armature-collection-assign-local-exact-report.json", + "sha256": "1b8650f03a1d51cd58f28be3a2bca0d44b34284b82708f5c16972360b9695791", + "bytes": 1609 + }, + { + "path": "tests/golden/M16-GAP-00222/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00222/manifest.json", + "sha256": "593bc1ad27a621ce73a50f1f13512518032f1d328411fde6d53b9c16450d1184", + "bytes": 2548 + }, + { + "path": "tests/golden/M16-GAP-00222/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00222/task-context.json", + "sha256": "c512eb33c57c21e0d140eab83a6bf9df69011a31148a08449aefc8a63de195da", + "bytes": 5594 + }, + { + "path": "tests/golden/M16-GAP-00223/armature-collection-create-assign-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00223/armature-collection-create-assign-desktop-report.json", + "sha256": "d02d028f7ec561db7363feea7f5504c5f8f7d719cd36b6a6f2edb70847996b4c", + "bytes": 1665 + }, + { + "path": "tests/golden/M16-GAP-00223/armature-collection-create-assign-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00223/armature-collection-create-assign-local-exact-report.json", + "sha256": "14b7947dd2485e11eeb2045d565fe97732865abc4aceb0e6765e3ab2fbe0f63f", + "bytes": 1735 + }, + { + "path": "tests/golden/M16-GAP-00223/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00223/manifest.json", + "sha256": "3cb48f423f3ecac5f8ad7c7404acab3803a8e273e23d8021b3682d4a6fcd0875", + "bytes": 2591 + }, + { + "path": "tests/golden/M16-GAP-00223/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00223/task-context.json", + "sha256": "a9b51398cc072d9ca64ea26ed4a10e5988ec4ba428dc1af18a54997c640d7638", + "bytes": 5669 + }, + { + "path": "tests/golden/M16-GAP-00224/armature-collection-deselect-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00224/armature-collection-deselect-desktop-report.json", + "sha256": "78b8615c71b02dbcb6b2b88086118b9c713aa3762ddf5d947ae0b696d72d7744", + "bytes": 1314 + }, + { + "path": "tests/golden/M16-GAP-00224/armature-collection-deselect-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00224/armature-collection-deselect-local-exact-report.json", + "sha256": "9bfc7c03a0e46bb31069e987c0a60dea1ebb0b5c17dbe382fb1d1847ad42595c", + "bytes": 1190 + }, + { + "path": "tests/golden/M16-GAP-00224/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00224/manifest.json", + "sha256": "2319012188014b56201f54d47b9714af337f97c6359000bc1ceff77ea12aa083", + "bytes": 2558 + }, + { + "path": "tests/golden/M16-GAP-00224/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00224/task-context.json", + "sha256": "7201e11f59e90287699d96e377865963fe9f8aede63b4447941642bf877e2574", + "bytes": 5718 + }, + { + "path": "tests/golden/M16-GAP-00225/armature-collection-move-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00225/armature-collection-move-desktop-report.json", + "sha256": "06074b980f8df448546afcf0c96e89e47bcb160b309db81c869d525b35b281ad", + "bytes": 1908 + }, + { + "path": "tests/golden/M16-GAP-00225/armature-collection-move-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00225/armature-collection-move-local-exact-report.json", + "sha256": "aa0becd48b2e42dc3c3ac7222d6e0486ffc8089bceefb3670f102fecd6d1f2e6", + "bytes": 1968 + }, + { + "path": "tests/golden/M16-GAP-00225/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00225/manifest.json", + "sha256": "f5d2ee089b76a849567fc8f00d191bb722651a206fa0f00542e4a9d796d33e72", + "bytes": 2538 + }, + { + "path": "tests/golden/M16-GAP-00225/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00225/task-context.json", + "sha256": "a946ed0bc5ef3004a227fb461dec0b46e1a571ddeeb7deaac46f08d4a4e840d6", + "bytes": 5651 + }, + { + "path": "tests/golden/M16-GAP-00226/armature-collection-remove-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00226/armature-collection-remove-desktop-report.json", + "sha256": "525ca8c6954750c9982bf91cbb3f26c9ad7a81911d56890dd6570cccfdbe3b37", + "bytes": 1912 + }, + { + "path": "tests/golden/M16-GAP-00226/armature-collection-remove-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00226/armature-collection-remove-local-exact-report.json", + "sha256": "6df4c731b900161076a59892d26f15a8775d18571f27eb88321f890f91c9b9a0", + "bytes": 1734 + }, + { + "path": "tests/golden/M16-GAP-00226/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00226/manifest.json", + "sha256": "e071c8ee3fc09259fd23c583a094981de94029c700e151632a96973c174aa82d", + "bytes": 2548 + }, + { + "path": "tests/golden/M16-GAP-00226/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00226/task-context.json", + "sha256": "b5bb4620750aea7f1773049c127349b7fca058c3345cecae20e302d8054632f8", + "bytes": 5639 + }, + { + "path": "tests/golden/M16-GAP-00227/armature-collection-remove-unused-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00227/armature-collection-remove-unused-desktop-report.json", + "sha256": "4909e040db7be0d5ac84148d52bb47cbdf0f12a30612e6c1bae1067fd4f04dca", + "bytes": 2060 + }, + { + "path": "tests/golden/M16-GAP-00227/armature-collection-remove-unused-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00227/armature-collection-remove-unused-local-exact-report.json", + "sha256": "b41c86788e6b9e21b04d42bdfaa645d29e669f8dfec9fdfaf96fa09771c64475", + "bytes": 1784 + }, + { + "path": "tests/golden/M16-GAP-00227/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00227/manifest.json", + "sha256": "0bcd90a68235c27347b42900b1df89285363a2b766f0aa58d0d2eb58c3238ca6", + "bytes": 2583 + }, + { + "path": "tests/golden/M16-GAP-00227/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00227/task-context.json", + "sha256": "e7b8b69221ddde77585cf8e66e3c9de3fcc1cedc61739fd4af2e1385e9b5dabd", + "bytes": 5688 + }, + { + "path": "tests/golden/M16-GAP-00228/armature-collection-select-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00228/armature-collection-select-desktop-report.json", + "sha256": "569c817b422e7947c30e202de7223a8da949127a022ce2b1e4f28de15202a440", + "bytes": 2582 + }, + { + "path": "tests/golden/M16-GAP-00228/armature-collection-select-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00228/armature-collection-select-local-exact-report.json", + "sha256": "cdb8e8196179776f53406eb67c2d6e838d547a2bae9b3dbb3a337646656abe64", + "bytes": 2200 + }, + { + "path": "tests/golden/M16-GAP-00228/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00228/manifest.json", + "sha256": "cfb390eeb5438dbcd72d6e08a07d6bbc9fb86dbe7a1936635b5cb04cad388b67", + "bytes": 2548 + }, + { + "path": "tests/golden/M16-GAP-00228/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00228/task-context.json", + "sha256": "1518cfbe7e66961eaa29ed27eed18d473e3194fc89575dcaea86007bb74c993b", + "bytes": 5649 + }, + { + "path": "tests/golden/M16-GAP-00229/armature-collection-show-all-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00229/armature-collection-show-all-desktop-report.json", + "sha256": "afe66c1b338702309a1c2a4af59d33365f31baf0db1797a95b0f980ecc76bc0a", + "bytes": 2342 + }, + { + "path": "tests/golden/M16-GAP-00229/armature-collection-show-all-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00229/armature-collection-show-all-local-exact-report.json", + "sha256": "1f4afb14bbdc7db07aad0b6df361b89e7020427ef63edc3fa641b3526dc05994", + "bytes": 1974 + }, + { + "path": "tests/golden/M16-GAP-00229/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00229/manifest.json", + "sha256": "9c5b8d7a56fbd0f8c1c43adbb9196c90cc187a24729e0d0bc31e433891d5e6c0", + "bytes": 2558 + }, + { + "path": "tests/golden/M16-GAP-00229/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00229/task-context.json", + "sha256": "2fe7e53c051464cc86e984cd9be592ee05b3e827e4d171aa3ad1c7bd49e68de7", + "bytes": 5724 + }, + { + "path": "tests/golden/M16-GAP-00230/armature-collection-unassign-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00230/armature-collection-unassign-desktop-report.json", + "sha256": "289f7d681eadad4d426faad60787a12b75e27a728a1b02725b06c130cc501abe", + "bytes": 1858 + }, + { + "path": "tests/golden/M16-GAP-00230/armature-collection-unassign-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00230/armature-collection-unassign-local-exact-report.json", + "sha256": "4fdb066cafc7b138c1b2bde389ebd9794236971416ce27ee51b8348a5f3cb18f", + "bytes": 1648 + }, + { + "path": "tests/golden/M16-GAP-00230/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00230/manifest.json", + "sha256": "77f90522d6531f1deafd1e64a2933e89068f38265f7ca0955b4a5ded6c5dfedf", + "bytes": 2810 + }, + { + "path": "tests/golden/M16-GAP-00230/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00230/task-context.json", + "sha256": "9c0f7fe99c270e6a97f497162dcbe83c1b5ecd8efba6578ac95bd808f05cfed8", + "bytes": 5669 + }, + { + "path": "tests/golden/M16-GAP-00231/armature-collection-unassign-named-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00231/armature-collection-unassign-named-desktop-report.json", + "sha256": "abdac650cb16974e738ec81067a0f44ac42fa3e9cf7c0cf86d5c0969b4cf1155", + "bytes": 2019 + }, + { + "path": "tests/golden/M16-GAP-00231/armature-collection-unassign-named-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00231/armature-collection-unassign-named-local-exact-report.json", + "sha256": "9800642cf4e7763d144b4d16dbfdd9c36c765bb8bef41407bcf7dafae0540208", + "bytes": 1777 + }, + { + "path": "tests/golden/M16-GAP-00231/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00231/manifest.json", + "sha256": "99a4cb68824248880db4d7c7367108fc630f16c8deb7f722128e8d2186f1d5eb", + "bytes": 2840 + }, + { + "path": "tests/golden/M16-GAP-00231/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00231/task-context.json", + "sha256": "76040c7c526c8bac16b7fe04603b6997755d4d1a70f99c09cfdef5c0e59a3f4b", + "bytes": 5672 + }, + { + "path": "tests/golden/M16-GAP-00232/armature-collection-unsolo-all-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00232/armature-collection-unsolo-all-desktop-report.json", + "sha256": "e42a8ace07205e1954b5685c46103736827bc6cdea98f182dc9cc63f1340094d", + "bytes": 2697 + }, + { + "path": "tests/golden/M16-GAP-00232/armature-collection-unsolo-all-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00232/armature-collection-unsolo-all-local-exact-report.json", + "sha256": "9be85459dec5551c4245cea4cfd025ca3dcef6be5e01ee24cb42249852e0ec0d", + "bytes": 2155 + }, + { + "path": "tests/golden/M16-GAP-00232/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00232/manifest.json", + "sha256": "03c4c803543785775293217040033ced42a419e84b2c8f556f891e3b6ac98533", + "bytes": 2992 + }, + { + "path": "tests/golden/M16-GAP-00232/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00232/task-context.json", + "sha256": "f4119c512efba997ef39caabb833c12294db92e703df7ff9218841d47a0313c5", + "bytes": 5709 + }, + { + "path": "tests/golden/M16-GAP-00233/armature-copy-bone-color-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00233/armature-copy-bone-color-desktop-report.json", + "sha256": "45464ed86aa52df4a5db68c0fac749585dc7f09b2d2c86080be467e1bf54c068", + "bytes": 3637 + }, + { + "path": "tests/golden/M16-GAP-00233/armature-copy-bone-color-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00233/armature-copy-bone-color-local-exact-report.json", + "sha256": "1f8e2f7ba0c32ff17d12ed24da24426d8359d45ac3aa8badef68d2c98cea2ec2", + "bytes": 2221 + }, + { + "path": "tests/golden/M16-GAP-00233/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00233/manifest.json", + "sha256": "576b641acd54236ee8c3b61dd42281590507981b89882d9318d707882a9f09b0", + "bytes": 2986 + }, + { + "path": "tests/golden/M16-GAP-00233/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00233/task-context.json", + "sha256": "17f3369193e212c22b7cd12d9041f46dae78b19bf693ba5a1a791f3650f2d175", + "bytes": 5741 + }, + { + "path": "tests/golden/M16-GAP-00234/armature-delete-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00234/armature-delete-desktop-report.json", + "sha256": "d6c85736295a6f07950292425294e188a6b17228c91eb1151a38e6da4833679e", + "bytes": 1283 + }, + { + "path": "tests/golden/M16-GAP-00234/armature-delete-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00234/armature-delete-local-exact-report.json", + "sha256": "89e0b6b13dd025e4d0d72eec409845c44f43d90e52fb4f506282cad455b5c0a8", + "bytes": 1083 + }, + { + "path": "tests/golden/M16-GAP-00234/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00234/manifest.json", + "sha256": "4a29dec54de89d3d3f2c2f8840d66ddef7193555550b403665a02576961d99c8", + "bytes": 2917 + }, + { + "path": "tests/golden/M16-GAP-00234/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00234/task-context.json", + "sha256": "da2f3111822b6a7238e2fa21d03976db0d614565da4365b6b8158877335ba70d", + "bytes": 5803 + }, + { + "path": "tests/golden/M16-GAP-00235/armature-dissolve-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00235/armature-dissolve-desktop-report.json", + "sha256": "bb9acbe5fd923532f125e511f6f113ef3543b519bfd757a942e4466eef7e2c79", + "bytes": 1998 + }, + { + "path": "tests/golden/M16-GAP-00235/armature-dissolve-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00235/armature-dissolve-local-exact-report.json", + "sha256": "97e46604d0c79afccd2968e64127da80382a92053f53b6f0b706d7b742aa608e", + "bytes": 1537 + }, + { + "path": "tests/golden/M16-GAP-00235/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00235/manifest.json", + "sha256": "84f3720ab79155ad3af4c4d25f96d1cbe09944e8f76aae90bd4cc81c0037c4e1", + "bytes": 2927 + }, + { + "path": "tests/golden/M16-GAP-00235/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00235/task-context.json", + "sha256": "87839be45f3d7071cc81118d5977cf405bd84ca8c59cc759ebea7bdc32541f03", + "bytes": 5594 + }, + { + "path": "tests/golden/M16-GAP-00236/armature-duplicate-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00236/armature-duplicate-desktop-report.json", + "sha256": "b648c7d518227a03b4d142a61ad4e3f15de71cf58e3fc23b603f7fdd26e1bf0b", + "bytes": 3062 + }, + { + "path": "tests/golden/M16-GAP-00236/armature-duplicate-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00236/armature-duplicate-local-exact-report.json", + "sha256": "2c005ed1342943cec21b7a71371449af4d01909026bd18c8cd9ca65f868d51a9", + "bytes": 1268 + }, + { + "path": "tests/golden/M16-GAP-00236/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00236/manifest.json", + "sha256": "8445ead3aefd6f7c5cffd4c8ae0977b6f754d4dd95b332956637051f7cb81518", + "bytes": 2932 + }, + { + "path": "tests/golden/M16-GAP-00236/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00236/task-context.json", + "sha256": "91d3c4acf7697b24a72bcba8a093f2a3d1ea58578583983155ff2bc92b060184", + "bytes": 5747 + }, + { + "path": "tests/golden/M16-GAP-00237/armature-duplicate-move-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00237/armature-duplicate-move-desktop-report.json", + "sha256": "94745cd286e017a11dd6fd8df308a22e4d4b5e572bbc3115ee8bbac5fa430bea", + "bytes": 3188 + }, + { + "path": "tests/golden/M16-GAP-00237/armature-duplicate-move-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00237/armature-duplicate-move-local-exact-report.json", + "sha256": "3b99961a3aaf2e61d64aa6c9ac9c76e9c5db72e2b5bf14887f613d1bb0723ff9", + "bytes": 1437 + }, + { + "path": "tests/golden/M16-GAP-00237/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00237/manifest.json", + "sha256": "9cf9d53b83b566e2d2d02c61907c8b58b5b4dba6e2739411d5b960de60ac0a48", + "bytes": 2957 + }, + { + "path": "tests/golden/M16-GAP-00237/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00237/task-context.json", + "sha256": "553e1d6a385d20840eed34b7617b3496e7bded0fdccdb2b68e1ea61228bcbb80", + "bytes": 5677 + }, + { + "path": "tests/golden/M16-GAP-00238/armature-duplicate-rename-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00238/armature-duplicate-rename-desktop-report.json", + "sha256": "90a4d915eb9967f97495ede7b6f855d2049ea1059208b99e75128d79e7f51911", + "bytes": 3185 + }, + { + "path": "tests/golden/M16-GAP-00238/armature-duplicate-rename-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00238/armature-duplicate-rename-local-exact-report.json", + "sha256": "f3e103b6c1a311bfeaad31c96066060519b091b3ae14c925a3d18e89e6ba8d2a", + "bytes": 1446 + }, + { + "path": "tests/golden/M16-GAP-00238/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00238/manifest.json", + "sha256": "5d35528b7d6e923626ead34f2120a0c69fad8385621780bfb06ea80fd287a990", + "bytes": 2967 + }, + { + "path": "tests/golden/M16-GAP-00238/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00238/task-context.json", + "sha256": "5f58af69bdf6921fa2e46c229206c3a26ff737a9f04ad3602ba46e80061169cd", + "bytes": 5687 + }, + { + "path": "tests/golden/M16-GAP-00239/armature-extrude-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00239/armature-extrude-desktop-report.json", + "sha256": "3f264c22cc013676e33e82b98458a5baff8703addaaee26812ed2205aa062fed", + "bytes": 3122 + }, + { + "path": "tests/golden/M16-GAP-00239/armature-extrude-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00239/armature-extrude-local-exact-report.json", + "sha256": "524adb7be53d523d48f87773d6782bd78db1e81eb6d88c6eba3641ff283e5269", + "bytes": 1492 + }, + { + "path": "tests/golden/M16-GAP-00239/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00239/manifest.json", + "sha256": "558907921bfe14ddb6f93ff89f0dd88f950e537c6f1a9c4c2e5b9fc0e47d3d81", + "bytes": 2922 + }, + { + "path": "tests/golden/M16-GAP-00239/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00239/task-context.json", + "sha256": "ef9bc0d189399baae95fef4e518ed6997c26b21ade00d4cda06ff1b086a57cfb", + "bytes": 5693 + }, + { + "path": "tests/golden/M16-GAP-00240/armature-extrude-forked-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00240/armature-extrude-forked-desktop-report.json", + "sha256": "37ca8eb97c454cc572f70143aa98f01cba23190ea889bce7b688529d415945a4", + "bytes": 3260 + }, + { + "path": "tests/golden/M16-GAP-00240/armature-extrude-forked-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00240/armature-extrude-forked-local-exact-report.json", + "sha256": "957d36b2188d063415a2dcb70995bacddfeac01152872cf06ae27bba941a3ce6", + "bytes": 1627 + }, + { + "path": "tests/golden/M16-GAP-00240/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00240/manifest.json", + "sha256": "3301ff54213d32531d2151a92b67e0efef3b9a577d36e1171c41b7b618c15c11", + "bytes": 2957 + }, + { + "path": "tests/golden/M16-GAP-00240/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00240/task-context.json", + "sha256": "3756f32ea6e1bf3b36c5480563a90e004f9a8e0836e18aeaa9f3e7b5d7abc545", + "bytes": 5719 + }, + { + "path": "tests/golden/M16-GAP-00241/armature-extrude-move-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00241/armature-extrude-move-desktop-report.json", + "sha256": "a24fb58e990504c5bd8a8d7a2d010f16028e070f099137bb26e5a2769a7fcc38", + "bytes": 3206 + }, + { + "path": "tests/golden/M16-GAP-00241/armature-extrude-move-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00241/armature-extrude-move-local-exact-report.json", + "sha256": "05293986bab59aed5d1629d9a9e28c3499db619b33294f6f5d7557a463bfc001", + "bytes": 1584 + }, + { + "path": "tests/golden/M16-GAP-00241/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00241/manifest.json", + "sha256": "d1cb4558aff9635c73c9b46d39915482d9e9d78b0ac56d3b64783fc0beb1812d", + "bytes": 2947 + }, + { + "path": "tests/golden/M16-GAP-00241/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00241/task-context.json", + "sha256": "ddbe88064be8649f792d2c731a9269ccb3eabe35a08430e613ca8cba0b25ddbb", + "bytes": 5734 + }, + { + "path": "tests/golden/M16-GAP-00242/armature-fill-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00242/armature-fill-desktop-report.json", + "sha256": "39f5db8f1a77e188ef3d4c3084c9bcf961551767211b40f006499a66ad51f56f", + "bytes": 3730 + }, + { + "path": "tests/golden/M16-GAP-00242/armature-fill-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00242/armature-fill-local-exact-report.json", + "sha256": "f4d927d1e6a10c9db3bd0b6a32b771aa96a25af9f9a5ab4a01741932173a293a", + "bytes": 1546 + }, + { + "path": "tests/golden/M16-GAP-00242/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00242/manifest.json", + "sha256": "1de876070dab2ce6cebb4d42845735f712de45219c3f0b6da22e8a42518841ef", + "bytes": 2907 + }, + { + "path": "tests/golden/M16-GAP-00242/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00242/task-context.json", + "sha256": "59d07c1a9a8151af3b530ca1e6ffa56b0747ce67637ac9851c94c63e70b0ded8", + "bytes": 5714 + }, + { + "path": "tests/golden/M16-GAP-00243/armature-flip-names-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00243/armature-flip-names-desktop-report.json", + "sha256": "489a05e88b2f35bfa0c910623db17897d70041afbbeecd2ad6575997c62d5a7f", + "bytes": 3038 + }, + { + "path": "tests/golden/M16-GAP-00243/armature-flip-names-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00243/armature-flip-names-local-exact-report.json", + "sha256": "e3a6efe370d43e0d05e4668994c70dade862aec0f45b50978558d3468e022d93", + "bytes": 1345 + }, + { + "path": "tests/golden/M16-GAP-00243/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00243/manifest.json", + "sha256": "1a794c9171bf53a620cdb7679fb26ef76095199a990e832e70189b1185e53355", + "bytes": 2937 + }, + { + "path": "tests/golden/M16-GAP-00243/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00243/task-context.json", + "sha256": "c71f199a41f023b1724f3075c1755b509f014918cbd27937779323e4d6d16974", + "bytes": 5733 + }, + { + "path": "tests/golden/M16-GAP-00244/armature-hide-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00244/armature-hide-desktop-report.json", + "sha256": "382b6abd52f5d54e519690cc3760fc5cddf1db2516abe8fe3e2acfedb500ed83", + "bytes": 2366 + }, + { + "path": "tests/golden/M16-GAP-00244/armature-hide-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00244/armature-hide-local-exact-report.json", + "sha256": "295134cdf0ed210c1eebdb166ad3251dd47234ff4b23e084a6c6f4e26e8615ea", + "bytes": 1104 + }, + { + "path": "tests/golden/M16-GAP-00244/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00244/manifest.json", + "sha256": "8a9113af05264d62c71c478ae8dfde62155e64cf2fa5bda32f16256f7df6bd59", + "bytes": 2907 + }, + { + "path": "tests/golden/M16-GAP-00244/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00244/task-context.json", + "sha256": "4103d8304ec404adcd995b030bd6f266d76971fd91068159fb8b7686106fc738", + "bytes": 5594 + }, + { + "path": "tests/golden/M16-GAP-00245/armature-move-to-collection-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00245/armature-move-to-collection-desktop-report.json", + "sha256": "26ba97ec93b9e190d06dc912b8b441eb14c49d3a409ae2635aba0adc8dfa6f9b", + "bytes": 3196 + }, + { + "path": "tests/golden/M16-GAP-00245/armature-move-to-collection-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00245/armature-move-to-collection-local-exact-report.json", + "sha256": "d898f1ffaa59f14b7a92e88d90413d0b3c200548ee5288342938f3803077e186", + "bytes": 1740 + }, + { + "path": "tests/golden/M16-GAP-00245/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00245/manifest.json", + "sha256": "4b5876e4b5058907a06ab54907f96be1d2f887b3495e696093ee015c084bb4a8", + "bytes": 2977 + }, + { + "path": "tests/golden/M16-GAP-00245/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00245/task-context.json", + "sha256": "a0e24448ada6a6649940caca0934e6cac7783f5e486efeb73baa352874e971c0", + "bytes": 5613 + }, + { + "path": "tests/golden/M16-GAP-00246/armature-parent-clear-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00246/armature-parent-clear-desktop-report.json", + "sha256": "e59a8594cbc6f313ac9651706575eeabd2d58fb2520eafdf825c5a467a2d9b7a", + "bytes": 3246 + }, + { + "path": "tests/golden/M16-GAP-00246/armature-parent-clear-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00246/armature-parent-clear-local-exact-report.json", + "sha256": "3e89fd698b0a8d118b0dcfb428f957ad7cc051e5a7a5b898cf90f49c996080a2", + "bytes": 1304 + }, + { + "path": "tests/golden/M16-GAP-00246/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00246/manifest.json", + "sha256": "39e5586ea4faa434cb83fb7d0c78e9e5bbb5b7b3485b76198ddd9279a5615fc0", + "bytes": 2947 + }, + { + "path": "tests/golden/M16-GAP-00246/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00246/task-context.json", + "sha256": "bc87cb6e78492af2c7c31afa6da9ea79e919ecdc793d7a720b1fa6127df6fc93", + "bytes": 5621 + }, + { + "path": "tests/golden/M16-GAP-00247/armature-parent-set-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00247/armature-parent-set-desktop-report.json", + "sha256": "c2348f9a4e51030006f9c1a2756f016e2c454d957a952e2d07a2948dabba9f4a", + "bytes": 3266 + }, + { + "path": "tests/golden/M16-GAP-00247/armature-parent-set-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00247/armature-parent-set-local-exact-report.json", + "sha256": "ed5125f71cbe8af51244c5bc8798b2d0722d3272a331b9999ba22f5606926139", + "bytes": 1385 + }, + { + "path": "tests/golden/M16-GAP-00247/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00247/manifest.json", + "sha256": "67a3b226b8c4d1449d7b655a5d019fff0c374fd63eee65041ea171ae4c6e92e6", + "bytes": 2937 + }, + { + "path": "tests/golden/M16-GAP-00247/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00247/task-context.json", + "sha256": "63cae595ebf9ce8be4b1d02e48e6130371978eaae49133e5da24b87dfcca7b53", + "bytes": 5602 + }, + { + "path": "tests/golden/M16-GAP-00248/armature-reveal-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00248/armature-reveal-desktop-report.json", + "sha256": "7f972847f4646f54f02e2e25efefd993c083c0be15ed18c2b570640bc314059a", + "bytes": 2373 + }, + { + "path": "tests/golden/M16-GAP-00248/armature-reveal-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00248/armature-reveal-local-exact-report.json", + "sha256": "35ca506d64f000444107c2a6da1b8a7074204c415dc6d4ea4afc9492aeb57209", + "bytes": 1124 + }, + { + "path": "tests/golden/M16-GAP-00248/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00248/manifest.json", + "sha256": "e45b54186a20a2432423a0ae345345b7af8d83a958d5937efb332b1d59d4607f", + "bytes": 2917 + }, + { + "path": "tests/golden/M16-GAP-00248/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00248/task-context.json", + "sha256": "db45073631709d276137b75c98057adc5b96605f45b929c42067333b9607cade", + "bytes": 5328 + }, + { + "path": "tests/golden/M16-GAP-00249/armature-roll-clear-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00249/armature-roll-clear-desktop-report.json", + "sha256": "d4961663044d04bed11d79948c12d7672d541da799cc519a7e0043023fd0540a", + "bytes": 2002 + }, + { + "path": "tests/golden/M16-GAP-00249/armature-roll-clear-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00249/armature-roll-clear-local-exact-report.json", + "sha256": "60aff7413075c183ce0f8c443784b01cbb57343463588185c5f1839636e07ee6", + "bytes": 1196 + }, + { + "path": "tests/golden/M16-GAP-00249/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00249/manifest.json", + "sha256": "50e0101c306390090c8ff008897450c5b0034428a6b4f06e53c340887a202562", + "bytes": 2937 + }, + { + "path": "tests/golden/M16-GAP-00249/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00249/task-context.json", + "sha256": "ca58f30a8476e7f61c6b3dec4d2225582cfcb9f4af454b62a42a48d2449ed74b", + "bytes": 5357 + }, + { + "path": "tests/golden/M16-GAP-00250/armature-select-all-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00250/armature-select-all-desktop-report.json", + "sha256": "0d68d0d0b4f3880339f29ef467bc7ab241623bdf3422ca83c53b49efec5e7295", + "bytes": 2463 + }, + { + "path": "tests/golden/M16-GAP-00250/armature-select-all-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00250/armature-select-all-local-exact-report.json", + "sha256": "e8d922dde3d8401c79adc75621523ee3441a4d97f74416816e2f2209083297b2", + "bytes": 1395 + }, + { + "path": "tests/golden/M16-GAP-00250/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00250/manifest.json", + "sha256": "2d4aafbf8effc7327cf16e2e1b040bf56f78af4024745e97f9728d8a0ce5963e", + "bytes": 2937 + }, + { + "path": "tests/golden/M16-GAP-00250/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00250/task-context.json", + "sha256": "75f8b5a9a167a179607417792bf5520b1cbb4c0eec5e665be7769c65265554d5", + "bytes": 5361 + }, + { + "path": "tests/golden/M16-GAP-00251/armature-select-hierarchy-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00251/armature-select-hierarchy-desktop-report.json", + "sha256": "8d57e6ce5bc33f6e87eaba09ffb411bf68b752a4729438de9f78063f7354c092", + "bytes": 3493 + }, + { + "path": "tests/golden/M16-GAP-00251/armature-select-hierarchy-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00251/armature-select-hierarchy-local-exact-report.json", + "sha256": "4d36c680a2947be8c29e076849d3d4ec8ad2a2c1a2ccf9e7330b311c0d4be5ac", + "bytes": 1851 + }, + { + "path": "tests/golden/M16-GAP-00251/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00251/manifest.json", + "sha256": "680d7d2fa6bda6d45226f71d1e1ee8986583c20e38c4ac5306625179d070bab7", + "bytes": 2967 + }, + { + "path": "tests/golden/M16-GAP-00251/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00251/task-context.json", + "sha256": "a8e92d107ef3e012f2d0321a00b7c55c9475848346488de1804645c238618ca5", + "bytes": 5352 + }, + { + "path": "tests/golden/M16-GAP-00252/armature-select-less-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00252/armature-select-less-desktop-report.json", + "sha256": "a7cb4e98fbf96079ef88c8de7491a43e611e1c759525d7bffdef785cadf458f7", + "bytes": 3347 + }, + { + "path": "tests/golden/M16-GAP-00252/armature-select-less-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00252/armature-select-less-local-exact-report.json", + "sha256": "5e9743ec56f672990fca63850abe1abd567c6c0488926be44a00dd6295b96c39", + "bytes": 1779 + }, + { + "path": "tests/golden/M16-GAP-00252/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00252/manifest.json", + "sha256": "c7abf03119f5557abd6c19d76ae0d1bde2946d034095046eb69d0f76cf4c8cbf", + "bytes": 2942 + }, + { + "path": "tests/golden/M16-GAP-00252/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00252/task-context.json", + "sha256": "ea27cc467ccdccd6292bd5e76f1ecbabfe0ddcbb553335684b8512ff207db7a2", + "bytes": 5315 + }, + { + "path": "tests/golden/M16-GAP-00253/armature-select-linked-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00253/armature-select-linked-desktop-report.json", + "sha256": "3a2b4e82aeaa2fdea3ae01df802c8de371f184dc0b018cc1c16d2349d19b9fa3", + "bytes": 4202 + }, + { + "path": "tests/golden/M16-GAP-00253/armature-select-linked-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00253/armature-select-linked-local-exact-report.json", + "sha256": "d184c248dd13878698f5b973331bbe7d65cde2defa697f22e4c05df9a433b42a", + "bytes": 1794 + }, + { + "path": "tests/golden/M16-GAP-00253/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00253/manifest.json", + "sha256": "c18022062e68fc4ddaee81a39b6dc766253f0e1c36f2e5d81941935e3783669b", + "bytes": 2682 + }, + { + "path": "tests/golden/M16-GAP-00253/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00253/task-context.json", + "sha256": "94c2ded148413fd67032d63cdcdcdf5b332cd99569b02804e3a743471fb3cda9", + "bytes": 5326 + }, + { + "path": "tests/golden/M16-GAP-00254/armature-select-linked-pick-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00254/armature-select-linked-pick-desktop-report.json", + "sha256": "1338c391ecabbb35166c5df8e36a8a0f5b65deca3994f7c2ee1d799b564906d0", + "bytes": 4382 + }, + { + "path": "tests/golden/M16-GAP-00254/armature-select-linked-pick-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00254/armature-select-linked-pick-local-exact-report.json", + "sha256": "14560b0b43aa917fa31fe8c9023992285313204c858d7260da22347a8696b9bb", + "bytes": 1963 + }, + { + "path": "tests/golden/M16-GAP-00254/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00254/manifest.json", + "sha256": "886c93f9af231c7ce040524d31758c41d38fa377d00da2056d5a299a18034f0a", + "bytes": 2707 + }, + { + "path": "tests/golden/M16-GAP-00254/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00254/task-context.json", + "sha256": "dc292fe37486b022284f46739ad523b5a6ee406157a325aa855411ee3e24c3f6", + "bytes": 5348 + }, + { + "path": "tests/golden/M16-GAP-00255/armature-select-mirror-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00255/armature-select-mirror-desktop-report.json", + "sha256": "d5b76fb51060be4e1b56e81d238d74df4556b09ceae84dcb0f9c545dfa1bf35f", + "bytes": 3216 + }, + { + "path": "tests/golden/M16-GAP-00255/armature-select-mirror-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00255/armature-select-mirror-local-exact-report.json", + "sha256": "e87ab4016b6ef049c7ed7177d9dee54d44dbcb88d5bbab6f0dbefddadce6b48c", + "bytes": 1454 + }, + { + "path": "tests/golden/M16-GAP-00255/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00255/manifest.json", + "sha256": "19f955e47b59acbee94de0c844ce9272912b1b8e08d2e2e10a6a03c961a090be", + "bytes": 2682 + }, + { + "path": "tests/golden/M16-GAP-00255/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00255/task-context.json", + "sha256": "1072a60c75f9ba38bbef954deeda027e2906ce86485b94b7a0315409aabd682a", + "bytes": 5382 + }, + { + "path": "tests/golden/M16-GAP-00256/armature-select-more-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00256/armature-select-more-desktop-report.json", + "sha256": "76c4cbf93b70f19535b1e4b2f9b580ca6803da03ac3c7aeafa4523fca6a24baf", + "bytes": 4142 + }, + { + "path": "tests/golden/M16-GAP-00256/armature-select-more-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00256/armature-select-more-local-exact-report.json", + "sha256": "d091f0032c51091e234da5ff0c931855cb1491dd86d9cd51ef0fc2e7143e9017", + "bytes": 1691 + }, + { + "path": "tests/golden/M16-GAP-00256/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00256/manifest.json", + "sha256": "c028d7cabda7dc400b72d70323b54a1a7ab49e825fb5abaf9f130f5d179d9ac5", + "bytes": 2672 + }, + { + "path": "tests/golden/M16-GAP-00256/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00256/task-context.json", + "sha256": "03b45f7ec25e3cf1c82806959ab14a1b678ab66d47e05ce9d2f11ddec004871a", + "bytes": 5343 + }, + { + "path": "tests/golden/M16-GAP-00257/armature-select-similar-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00257/armature-select-similar-desktop-report.json", + "sha256": "22cdd9b6ce61fedfda0b76fcedb0c122176d4e17c5ca7ae06277d221ef1ac22e", + "bytes": 3524 + }, + { + "path": "tests/golden/M16-GAP-00257/armature-select-similar-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00257/armature-select-similar-local-exact-report.json", + "sha256": "cc8a91b14a765d9643289230ca8e38800cabcecc74883845b8e06087f528be4c", + "bytes": 1470 + }, + { + "path": "tests/golden/M16-GAP-00257/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00257/manifest.json", + "sha256": "5a0a58c9b0578f0e19cd799df1d12d2c73c01c20bd718fa5318f2f1d91083247", + "bytes": 2687 + }, + { + "path": "tests/golden/M16-GAP-00257/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00257/task-context.json", + "sha256": "9464e6917cbd8e532889f70781049e38e5131f841c3c638bdf6a6f0342f35429", + "bytes": 5371 + }, + { + "path": "tests/golden/M16-GAP-00258/armature-separate-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00258/armature-separate-desktop-report.json", + "sha256": "8226ce041d7bd04dc31d93e01537bd8a598886fdfc1feaa36e3d98910007e720", + "bytes": 2790 + }, + { + "path": "tests/golden/M16-GAP-00258/armature-separate-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00258/armature-separate-local-exact-report.json", + "sha256": "4cefec2f7519e0a3e23eed6ba3e199760ed46f6af0cbe36b48932270211ea3b4", + "bytes": 1474 + }, + { + "path": "tests/golden/M16-GAP-00258/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00258/manifest.json", + "sha256": "ee0d35662c2b66847381b4865a83b80df243bf47cc4e8f4f16232a93fc23c900", + "bytes": 2657 + }, + { + "path": "tests/golden/M16-GAP-00258/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00258/task-context.json", + "sha256": "6261d1f9cc72a6cf1129913f10efee4898da9c1bb7b8ca264d255d3835043572", + "bytes": 5348 + }, + { + "path": "tests/golden/M16-GAP-00259/armature-shortest-path-pick-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00259/armature-shortest-path-pick-desktop-report.json", + "sha256": "3a42c0aaa54538109b1bec89e12976848464e18fdd27c30cc43b302a78557fd8", + "bytes": 3790 + }, + { + "path": "tests/golden/M16-GAP-00259/armature-shortest-path-pick-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00259/armature-shortest-path-pick-local-exact-report.json", + "sha256": "35348832a78139d10dc5c8217f64453c54430be47ee8968d59f76a76ccf2ceda", + "bytes": 1625 + }, + { + "path": "tests/golden/M16-GAP-00259/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00259/manifest.json", + "sha256": "b5b6cc20449c85386b3cc2811ffed49c4bd44f09fa12c27a4c0fb2318e84f623", + "bytes": 2707 + }, + { + "path": "tests/golden/M16-GAP-00259/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00259/task-context.json", + "sha256": "efd58e511f54e130b2625a01f9cad988ba054648023d2616506dcfea9e4313fb", + "bytes": 5387 + }, + { + "path": "tests/golden/M16-GAP-00260/armature-split-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00260/armature-split-desktop-report.json", + "sha256": "3f7022cc9a1e6398b124763aa8f99c42e633dc036a7cae887e3fb252afd4352e", + "bytes": 2530 + }, + { + "path": "tests/golden/M16-GAP-00260/armature-split-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00260/armature-split-local-exact-report.json", + "sha256": "38a055ec0e21dc6adf0818089dafce97ddcbdbed78e9a6be0080ad960b94361e", + "bytes": 1103 + }, + { + "path": "tests/golden/M16-GAP-00260/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00260/manifest.json", + "sha256": "7ee18327f27adc8016792b51dddb1019b8b2ca20b643883d6712697121ff137b", + "bytes": 2642 + }, + { + "path": "tests/golden/M16-GAP-00260/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00260/task-context.json", + "sha256": "0f70c73e731acd6e334ba69b6b16404e02f544e2ea4adbfe5e38f73af3a7c5ca", + "bytes": 5337 + }, + { + "path": "tests/golden/M16-GAP-00261/armature-subdivide-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00261/armature-subdivide-desktop-report.json", + "sha256": "77e3d698de66ad1d1b5d595049f6e515e3fddbcdb83ef8a3bce25afa79c84c23", + "bytes": 2916 + }, + { + "path": "tests/golden/M16-GAP-00261/armature-subdivide-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00261/armature-subdivide-local-exact-report.json", + "sha256": "dca39b46351f9447faaa84c11cebee86a1dc87876052b55df3a5e2d1a0cd291a", + "bytes": 1260 + }, + { + "path": "tests/golden/M16-GAP-00261/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00261/manifest.json", + "sha256": "be0a58e9c23d07236f33933b82f0e528d5f9a32e6be660dcccc4a0c56c6c5edc", + "bytes": 2662 + }, + { + "path": "tests/golden/M16-GAP-00261/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00261/task-context.json", + "sha256": "3c715414fd5097f5296ab31ee86407dbb62ee02d1d804cc5d1eb9dee8a251a30", + "bytes": 5350 + }, + { + "path": "tests/golden/M16-GAP-00262/armature-switch-direction-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00262/armature-switch-direction-desktop-report.json", + "sha256": "b354e79b081ed5a42edafb0d2ff7c2811b3793b06997ffd493cb0412c10637ac", + "bytes": 2733 + }, + { + "path": "tests/golden/M16-GAP-00262/armature-switch-direction-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00262/armature-switch-direction-local-exact-report.json", + "sha256": "a70785bfc13f65f94e22747c67eff0b4a07b0aa3afbaa999a5f39ab706769cda", + "bytes": 1467 + }, + { + "path": "tests/golden/M16-GAP-00262/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00262/manifest.json", + "sha256": "c03367b4246808543d0ecce65f005b8be03d7cb72610e7c1e07ff0273a2cfffd", + "bytes": 2697 + }, + { + "path": "tests/golden/M16-GAP-00262/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00262/task-context.json", + "sha256": "60148b63a69b0e197dcde3f81e322335806a7e9bd2f2a33c7dee44daac2da996", + "bytes": 5378 + }, + { + "path": "tests/golden/M16-GAP-00263/armature-symmetrize-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00263/armature-symmetrize-desktop-report.json", + "sha256": "2ca4f83737867b62fd8c4b42bc6092a59178baa4a18f8bc192764c859d1e5c88", + "bytes": 2961 + }, + { + "path": "tests/golden/M16-GAP-00263/armature-symmetrize-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00263/armature-symmetrize-local-exact-report.json", + "sha256": "1dbef4a312f55198108fcdcab216e0739f08c237a19084e28b21a63f53f9dab7", + "bytes": 1603 + }, + { + "path": "tests/golden/M16-GAP-00263/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00263/manifest.json", + "sha256": "174eb122a99cd96c634a78e9689dcc1e0317f17bd52727e782a20599ba6b730b", + "bytes": 2667 + }, + { + "path": "tests/golden/M16-GAP-00263/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00263/task-context.json", + "sha256": "61576b4aa53a9fe9c2eb5ff564a47ac218343ba32fcccd00322d4d9a1420d9c7", + "bytes": 5350 + }, + { + "path": "tests/golden/M16-GAP-00264/asset-download-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00264/asset-download-desktop-report.json", + "sha256": "399aed90c3b236f1c169fad88dbc92f5409d26ca35bdeb5768bb9272a50a7157", + "bytes": 829 + }, + { + "path": "tests/golden/M16-GAP-00264/asset-download-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00264/asset-download-local-exact-report.json", + "sha256": "ad88b3a8b18007bf61d4351185ee2cab8c09e9e3a74958d521f94ff1a221795c", + "bytes": 867 + }, + { + "path": "tests/golden/M16-GAP-00264/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00264/manifest.json", + "sha256": "227db04b1571e0ae7eb9c698b1b2d440118da166a525f3114d212825e9ebd67b", + "bytes": 2654 + }, + { + "path": "tests/golden/M16-GAP-00264/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00264/task-context.json", + "sha256": "d22c02c55e889b252ab0e11580693c6fc44225d4d650591942bee294557f4134", + "bytes": 5348 + }, + { + "path": "tests/golden/M16-GAP-00265/assets-download-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00265/assets-download-desktop-report.json", + "sha256": "1ce5009ec4582730437cbefbb5722699bc6d2fe0824eede52bf8de98b85ccb24", + "bytes": 836 + }, + { + "path": "tests/golden/M16-GAP-00265/assets-download-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00265/assets-download-local-exact-report.json", + "sha256": "35d1005b88bb477b0bc686297d4e178fbdf1c3feeb7fb29bb443a019d7a34b4d", + "bytes": 873 + }, + { + "path": "tests/golden/M16-GAP-00265/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00265/manifest.json", + "sha256": "9d3a041a635b7d0413797d7fb5bb60914a28ab43415517081b3d9f2ebf644b2d", + "bytes": 2659 + }, + { + "path": "tests/golden/M16-GAP-00265/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00265/task-context.json", + "sha256": "d9b040e30c2443cfb11dc196dbb042b1aa6a72a3a27b599ccdc591a98e340395", + "bytes": 5354 + }, + { + "path": "tests/golden/M16-GAP-00266/assign-action-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00266/assign-action-desktop-report.json", + "sha256": "aacd8ad7641a390a2f2b4990d4b324bb9478ee0a45a42c9bf4e52720038dfab4", + "bytes": 846 + }, + { + "path": "tests/golden/M16-GAP-00266/assign-action-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00266/assign-action-local-exact-report.json", + "sha256": "e2376fd259124a1d90db2ded522f1231df3d12d0f5eb3d82c229e95fc680f1dc", + "bytes": 887 + }, + { + "path": "tests/golden/M16-GAP-00266/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00266/manifest.json", + "sha256": "aacbc7e4bfad12e03e8ba46dddef7d0c72d0511e8df0e158ef0005d4bb20dcf0", + "bytes": 2649 + }, + { + "path": "tests/golden/M16-GAP-00266/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00266/task-context.json", + "sha256": "167bfdff69ccc7568d7c20d4c61be173604255e1a9cd698e55df690444763dfb", + "bytes": 5350 + }, + { + "path": "tests/golden/M16-GAP-00267/browse-containing-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00267/browse-containing-desktop-report.json", + "sha256": "cad41d8dfb33770fdbd87f44d2eb04b070cdb120665a188a379c0436fc25f324", + "bytes": 742 + }, + { + "path": "tests/golden/M16-GAP-00267/browse-containing-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00267/browse-containing-local-exact-report.json", + "sha256": "2c522d5b6c545f7bf8d7238d881a94c2d6463abcb41bf24989b3218962a51ac1", + "bytes": 876 + }, + { + "path": "tests/golden/M16-GAP-00267/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00267/manifest.json", + "sha256": "918b5e13ec9e92186ec74f2c49aef4602dee002a92a7c1303ce0c86ef5d5370d", + "bytes": 2869 + }, + { + "path": "tests/golden/M16-GAP-00267/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00267/task-context.json", + "sha256": "47039236bfbb8d1e2d130708d25ead95b54027b1b061d91ae73f686ed75660b0", + "bytes": 5405 + }, + { + "path": "tests/golden/M16-GAP-00268/bundle-install-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00268/bundle-install-desktop-report.json", + "sha256": "088fbc1390ae171dc219c201f09519f8c0fc460bc61138d13d189e3e6ec6d1c0", + "bytes": 702 + }, + { + "path": "tests/golden/M16-GAP-00268/bundle-install-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00268/bundle-install-local-exact-report.json", + "sha256": "be82a7849a167cebed509f7ac451f3c1c1756757afe34e940453df686b507d97", + "bytes": 839 + }, + { + "path": "tests/golden/M16-GAP-00268/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00268/manifest.json", + "sha256": "8926cead64df23f2bf6386ac728fb8836bcef5c5bd645faecad45a3eb7b06b03", + "bytes": 2818 + }, + { + "path": "tests/golden/M16-GAP-00268/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00268/task-context.json", + "sha256": "e44a443c29beab5923dbbab2a7e8e8e830654873f8d093345b24c3cd758620ad", + "bytes": 5377 + }, + { + "path": "tests/golden/M16-GAP-00269/catalog-delete-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00269/catalog-delete-desktop-report.json", + "sha256": "68070e257397148441c11e1ecfc9a2202f9955cee17a3f8ee878d4e0f1310790", + "bytes": 702 + }, + { + "path": "tests/golden/M16-GAP-00269/catalog-delete-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00269/catalog-delete-local-exact-report.json", + "sha256": "1cd38bfab4ba20d3238bbb11fc9838b5479f96c345c6f98e479eea25fe229bd1", + "bytes": 839 + }, + { + "path": "tests/golden/M16-GAP-00269/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00269/manifest.json", + "sha256": "d197196e37e5f26f13db0f03c099287fe444ebe64688bb60d6ce38e1803559fb", + "bytes": 2818 + }, + { + "path": "tests/golden/M16-GAP-00269/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00269/task-context.json", + "sha256": "e1bb2480ec7894a2ce1b8c5ae2b221f6e55cf19c7c4e72aef04d89d5da147878", + "bytes": 5355 + }, + { + "path": "tests/golden/M16-GAP-00270/catalog-new-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00270/catalog-new-desktop-report.json", + "sha256": "a8037c3b339c215db7bc4143ce0999074a366019a8868516baec00086378e2d9", + "bytes": 684 + }, + { + "path": "tests/golden/M16-GAP-00270/catalog-new-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00270/catalog-new-local-exact-report.json", + "sha256": "99f10be076dd573ee658256e2b2e08c40af1997b344268a84cdc0fa8fe939e81", + "bytes": 824 + }, + { + "path": "tests/golden/M16-GAP-00270/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00270/manifest.json", + "sha256": "c24c8cebb471d9a1d37e180a39d5091da36356cd4ea6065a1bf5110ac5ee86f0", + "bytes": 2800 + }, + { + "path": "tests/golden/M16-GAP-00270/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00270/task-context.json", + "sha256": "ee463f5baf378f77c68c9f30d5f21caebcd027138222b5bf4007a5e14696ff56", + "bytes": 5345 + }, + { + "path": "tests/golden/M16-GAP-00271/catalog-redo-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00271/catalog-redo-desktop-report.json", + "sha256": "31dedccda115a8219307ad7f677602fc907e6e012297b4e6a6a68f19fb1415d5", + "bytes": 690 + }, + { + "path": "tests/golden/M16-GAP-00271/catalog-redo-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00271/catalog-redo-local-exact-report.json", + "sha256": "25e5b338ad95d2e09e0cc651fd14f5c66a21be78f3d0d0039f8b161386e2fdb9", + "bytes": 829 + }, + { + "path": "tests/golden/M16-GAP-00271/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00271/manifest.json", + "sha256": "d46fdf0ef0d6c1702682abc8ac076bbd0d46298d380995f6d62003029b489513", + "bytes": 2806 + }, + { + "path": "tests/golden/M16-GAP-00271/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00271/task-context.json", + "sha256": "1ef1edcfb45f3ce201efec1aa2efb39f95aeaec909eccb02e13cc7f98335a11b", + "bytes": 5340 + }, + { + "path": "tests/golden/M16-GAP-00272/catalog-undo-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00272/catalog-undo-desktop-report.json", + "sha256": "21d131f2b2c5ffe8772bcb4606dbf16388467572cd0542c6dd16c66e1730b712", + "bytes": 690 + }, + { + "path": "tests/golden/M16-GAP-00272/catalog-undo-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00272/catalog-undo-local-exact-report.json", + "sha256": "4cb20b624a5f96d417c33d928b760befaacb8c59610f197ff1a666d1fc78a5f0", + "bytes": 829 + }, + { + "path": "tests/golden/M16-GAP-00272/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00272/manifest.json", + "sha256": "eb3675367849f1a784e8028a43efac24fcede55cedd38d55b121cd88aa1facae", + "bytes": 2806 + }, + { + "path": "tests/golden/M16-GAP-00272/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00272/task-context.json", + "sha256": "ce9557e77c46435c6153a6173fb59b5d50686d8738bbab96490d631965219867", + "bytes": 5340 + }, + { + "path": "tests/golden/M16-GAP-00273/catalog-undo-push-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00273/catalog-undo-push-desktop-report.json", + "sha256": "03421f7e7ffe6eb3f0ec93c6f09cd505f806e228145cf4ce6d55e3b841b8b34b", + "bytes": 716 + }, + { + "path": "tests/golden/M16-GAP-00273/catalog-undo-push-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00273/catalog-undo-push-local-exact-report.json", + "sha256": "86e5cabacde4ee419d71011b902e0fc561e7da94028879bca4ca0315ad1d4f72", + "bytes": 852 + }, + { + "path": "tests/golden/M16-GAP-00273/manifest.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00273/manifest.json", + "sha256": "3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1", + "bytes": 2835 + }, + { + "path": "tests/golden/M16-GAP-00273/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00273/task-context.json", + "sha256": "8679b3271d07fe1d4eaf2c6dcc6ef833d9c2853dda4643339071c60dc8bfe2f7", + "bytes": 5363 + }, + { + "path": "tests/golden/M16-GAP-00274/catalogs-save-desktop-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00274/catalogs-save-desktop-report.json", + "sha256": "4030bf70be443ef6dd4704ec43f93c596414b3657bb1dec3402f844173c1103d", + "bytes": 696 + }, + { + "path": "tests/golden/M16-GAP-00274/catalogs-save-local-exact-report.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00274/catalogs-save-local-exact-report.json", + "sha256": "459c689249e40c69a61202980a100325a6f106606b559eca653ec4e9bb91927e", + "bytes": 834 + }, + { + "path": "tests/golden/M16-GAP-00274/task-context.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tests/golden/M16-GAP-00274/task-context.json", + "sha256": "a539fbe4a83846344834b96a7f62320fc6a858aae1146629988b14b883d87020", + "bytes": 5361 + }, + { + "path": "tools/web/check-action-armature-align-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-align-desktop.py", + "sha256": "a406c012536580f3dfc6b5851015bb65ccf578acce6e606c0994e4428de83738", + "bytes": 5514 + }, + { + "path": "tools/web/check-action-armature-assign-to-collection-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-assign-to-collection-desktop.py", + "sha256": "0a2aa43cfb3d08fc2904b9b36dd6fca160309f936bd5006038a56cf355990718", + "bytes": 4705 + }, + { + "path": "tools/web/check-action-armature-autoside-names-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-autoside-names-desktop.py", + "sha256": "1d8983980d621a559bef9b0bd14eecc1dbf95b43fee2eecaecf970f7052b1e1d", + "bytes": 4353 + }, + { + "path": "tools/web/check-action-armature-bone-primitive-add-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-bone-primitive-add-desktop.py", + "sha256": "fa0d91a10c5d2dc9cae127c02927fc98be37110f25e3ab3570cd7cf733ce329e", + "bytes": 4827 + }, + { + "path": "tools/web/check-action-armature-calculate-roll-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-calculate-roll-desktop.py", + "sha256": "570471197617ea452db37d8d972f372db07de15c3f78fd934905ecdbfe3e3a7f", + "bytes": 5202 + }, + { + "path": "tools/web/check-action-armature-click-extrude-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-click-extrude-desktop.py", + "sha256": "2fc6347da08d334e4b28a5316d1db45d189021ee38f4e5f8574e3a66cc177d51", + "bytes": 5457 + }, + { + "path": "tools/web/check-action-armature-collection-add-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-add-desktop.py", + "sha256": "8acf8ab1c9b9e27bc83fe568edd0d418b6c824c72b539126561955f05e5ba9f8", + "bytes": 4877 + }, + { + "path": "tools/web/check-action-armature-collection-assign-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-assign-desktop.py", + "sha256": "92c6b8d031631ace79523ef4200508621aa8bd0b9ae2d5a8cd84a9cdbd91a559", + "bytes": 5346 + }, + { + "path": "tools/web/check-action-armature-collection-create-assign-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-create-assign-desktop.py", + "sha256": "4e6ee367c86279625bed4475f05abd3596329c2bd1c54c295f96118d5156cec1", + "bytes": 5525 + }, + { + "path": "tools/web/check-action-armature-collection-deselect-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-deselect-desktop.py", + "sha256": "302d827119a02a62770a172cf3624c84b9c83463b0ef10d35c1854a5e767ffb3", + "bytes": 5777 + }, + { + "path": "tools/web/check-action-armature-collection-move-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-move-desktop.py", + "sha256": "6babe7d65549e4b06f4a9790af3ce6dabdf3131831f5d26442d6c1c6d0099f90", + "bytes": 5243 + }, + { + "path": "tools/web/check-action-armature-collection-remove-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-remove-desktop.py", + "sha256": "071d8360f7aff11fa3466e96133c9401525a5f31a4beec6c5fde46b43329dbc8", + "bytes": 5314 + }, + { + "path": "tools/web/check-action-armature-collection-remove-unused-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-remove-unused-desktop.py", + "sha256": "8bd8c0dfd8170779c3e834a8b3ad8c90e5a646263108b818c19e34be21353bc6", + "bytes": 5681 + }, + { + "path": "tools/web/check-action-armature-collection-select-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-select-desktop.py", + "sha256": "cb1db0e83e3ac1dab0db182b786cee39651c90e32817793f262b53a1b8caec89", + "bytes": 6034 + }, + { + "path": "tools/web/check-action-armature-collection-show-all-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-show-all-desktop.py", + "sha256": "3f81be36e3957ffa1de5581b4f2843c0b03e519ec153249c5fbb3b4cd53205b3", + "bytes": 5422 + }, + { + "path": "tools/web/check-action-armature-collection-unassign-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-unassign-desktop.py", + "sha256": "addb723b6f5e003a726885241aba042138d5593adc7ba446228b8a41d5b51c0d", + "bytes": 5985 + }, + { + "path": "tools/web/check-action-armature-collection-unassign-named-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-unassign-named-desktop.py", + "sha256": "ef3b5f6cadbceca45a32161b9f8ca213215962d2cb213dbd80e76002725fd16e", + "bytes": 6211 + }, + { + "path": "tools/web/check-action-armature-collection-unsolo-all-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-collection-unsolo-all-desktop.py", + "sha256": "a4df03942060ccfe0eb19be415bade14f4f7c4a5649a5c3cfbbdd66b1104e98d", + "bytes": 5885 + }, + { + "path": "tools/web/check-action-armature-copy-bone-color-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-copy-bone-color-desktop.py", + "sha256": "4e28192646754a1e0c253f40e15fea28b43bcd60305fbd40273caad1908f34c1", + "bytes": 6185 + }, + { + "path": "tools/web/check-action-armature-delete-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-delete-desktop.py", + "sha256": "2b0358f9e0a96da53f8c7f889ae18068aac2653d4aa6e804a0471a92e66ddd6b", + "bytes": 5176 + }, + { + "path": "tools/web/check-action-armature-dissolve-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-dissolve-desktop.py", + "sha256": "27a1aa29a7fe9ef6ad5b13b17ee0e30cf7c943df5d0ce3be97e44513cec33d01", + "bytes": 6275 + }, + { + "path": "tools/web/check-action-armature-duplicate-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-duplicate-desktop.py", + "sha256": "47c4546402e3e8692583e3d3075a1351092cd61fce09f5d96d13dc06bf2ce1d2", + "bytes": 6577 + }, + { + "path": "tools/web/check-action-armature-duplicate-move-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-duplicate-move-desktop.py", + "sha256": "32d82956a3c5fba3cb844ce37a3eb174124a1b25fd7c958578c9a97a5138e1a6", + "bytes": 7002 + }, + { + "path": "tools/web/check-action-armature-duplicate-rename-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-duplicate-rename-desktop.py", + "sha256": "1eadb6c273b4bc77f6c3df9f0060a361c6da2e95b84341ac2173a749f4b72d07", + "bytes": 6754 + }, + { + "path": "tools/web/check-action-armature-extrude-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-extrude-desktop.py", + "sha256": "066e1851024ebedcec78e4e3962516ce8c43ae87ef87522d7acc8b6ca1f49a4d", + "bytes": 7640 + }, + { + "path": "tools/web/check-action-armature-extrude-forked-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-extrude-forked-desktop.py", + "sha256": "cd13871abd4e28e9230388693209bbeb7d3b8f1e9daf99d3df09c9071bc9930a", + "bytes": 7928 + }, + { + "path": "tools/web/check-action-armature-extrude-move-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-extrude-move-desktop.py", + "sha256": "9e1496c7022f9e70ade8cb937a815a7a0f0d3db9679d39b4b14b3e9cfae4bf85", + "bytes": 7813 + }, + { + "path": "tools/web/check-action-armature-fill-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-fill-desktop.py", + "sha256": "fa8f3e577dd5b3924f8266509346f1c459a45bc62ac597926b412a962c4a9017", + "bytes": 8328 + }, + { + "path": "tools/web/check-action-armature-flip-names-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-flip-names-desktop.py", + "sha256": "5b3bc16b1fdfed70b6be9ca37ee1c949ce02129f4d396216f70edc022ba1082a", + "bytes": 6407 + }, + { + "path": "tools/web/check-action-armature-hide-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-hide-desktop.py", + "sha256": "455d76e6dbd6100f9a33a517a31232605f3d878d165e5938a6aae50682d1fc9c", + "bytes": 5938 + }, + { + "path": "tools/web/check-action-armature-move-to-collection-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-move-to-collection-desktop.py", + "sha256": "d70bbd2d42be0c4f95dc2fcc683daaad5d1eb2e71240dc8025dec2133f2d42dc", + "bytes": 7040 + }, + { + "path": "tools/web/check-action-armature-parent-clear-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-parent-clear-desktop.py", + "sha256": "14c76e67447509588d74055eb26dd12401b3608fac335bf732a09980a2d6c443", + "bytes": 6664 + }, + { + "path": "tools/web/check-action-armature-parent-set-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-parent-set-desktop.py", + "sha256": "ced6127b73540a64f95327103cea846d95b3da829a41b64e66de6e160ff2d7cb", + "bytes": 6741 + }, + { + "path": "tools/web/check-action-armature-reveal-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-reveal-desktop.py", + "sha256": "06564434a76ea6670110e916f73efdec46238cc1b2c8e1aa3d1c893b8089331d", + "bytes": 6095 + }, + { + "path": "tools/web/check-action-armature-roll-clear-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-roll-clear-desktop.py", + "sha256": "c5f507c1601fd4fe026f37b4c720a684881a01272eb92fd663dfb2ec2d43057b", + "bytes": 5966 + }, + { + "path": "tools/web/check-action-armature-select-all-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-all-desktop.py", + "sha256": "3dff6a053b4a497ed19b67b6e0d38958abd6f34c603b994a8eb59323f4ab95e5", + "bytes": 6371 + }, + { + "path": "tools/web/check-action-armature-select-hierarchy-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-hierarchy-desktop.py", + "sha256": "f6d261b067815d740a7e39aa8c8a8ae6d605b675c6ba2a144eaab65d104840ae", + "bytes": 7243 + }, + { + "path": "tools/web/check-action-armature-select-less-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-less-desktop.py", + "sha256": "ebe6ff995d37310dd1f726246e0c3627960b75c6b506b181286742829ec4423b", + "bytes": 7411 + }, + { + "path": "tools/web/check-action-armature-select-linked-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-linked-desktop.py", + "sha256": "99901e2c2a744563c9fff9105244cd07368b6ed0cc52c6c1c94eb65c3e964ac5", + "bytes": 7002 + }, + { + "path": "tools/web/check-action-armature-select-linked-pick-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-linked-pick-desktop.py", + "sha256": "8909666d24df353cf64f225b857a1ccc48c460320df52e385f69c8e13200d686", + "bytes": 5474 + }, + { + "path": "tools/web/check-action-armature-select-mirror-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-mirror-desktop.py", + "sha256": "21a152a785b6bdb794c6488685cdebf3ce27c3573b3f46e38002c8be0bd0fc43", + "bytes": 5044 + }, + { + "path": "tools/web/check-action-armature-select-more-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-more-desktop.py", + "sha256": "dfd686370601ddd0d43ba0434e7d9fde5ff80d12170f423d571f5344f281fc56", + "bytes": 4750 + }, + { + "path": "tools/web/check-action-armature-select-similar-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-select-similar-desktop.py", + "sha256": "62d26209267be4d01cb079f467b4027623cea284b894787029199188e486e25a", + "bytes": 5959 + }, + { + "path": "tools/web/check-action-armature-separate-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-separate-desktop.py", + "sha256": "586bcf4a9b34e7e1ed87e78af45011b0c004aa9dcea063d03c6fafe968f8e689", + "bytes": 5800 + }, + { + "path": "tools/web/check-action-armature-shortest-path-pick-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-shortest-path-pick-desktop.py", + "sha256": "7ddd284bae79567206ca1fafe1f9ee0cd0d13ea2719af08a2bc27f0b848e8390", + "bytes": 3737 + }, + { + "path": "tools/web/check-action-armature-split-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-split-desktop.py", + "sha256": "e1044a0a74a25f1e71b7d1fd9e027d9e4f92dee9876a72828bdb3954a2b05d43", + "bytes": 3187 + }, + { + "path": "tools/web/check-action-armature-subdivide-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-subdivide-desktop.py", + "sha256": "80ae7b6ada923052ee31deca4da972311a1b22e528e6149467e07f61d7472846", + "bytes": 4037 + }, + { + "path": "tools/web/check-action-armature-switch-direction-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-switch-direction-desktop.py", + "sha256": "ee29b85c9ff1f49ad3bd731f0996ba351a82a087b636899c1ef00d6db175b87e", + "bytes": 3372 + }, + { + "path": "tools/web/check-action-armature-symmetrize-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-armature-symmetrize-desktop.py", + "sha256": "1b84a01bdacb1b66952822b609144acaa3638aee86b4f6999df37575478a148b", + "bytes": 5732 + }, + { + "path": "tools/web/check-action-asset-download-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-asset-download-desktop.py", + "sha256": "c8af3ac7b0fd53e955a9c5d925e0ea004f219ef9c5b6629fdb57e6fecdba55a6", + "bytes": 2922 + }, + { + "path": "tools/web/check-action-assets-download-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-assets-download-desktop.py", + "sha256": "512737cde0efa6cc6a669939c243e7b609cc7c37fc223c4923cc6a9adc035318", + "bytes": 3014 + }, + { + "path": "tools/web/check-action-assign-action-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-assign-action-desktop.py", + "sha256": "b4ffdc3bd9120c2823fdcf29278695e49c21b3ee07345daa15712ef6d57ca6ec", + "bytes": 3580 + }, + { + "path": "tools/web/check-action-bake-keys-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-bake-keys-desktop.py", + "sha256": "a03213895003f141054a80fd7ddf8060b59ded44994eefc8f3e4699313923fb6", + "bytes": 2650 + }, + { + "path": "tools/web/check-action-browse-containing-blend-file-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-browse-containing-blend-file-desktop.py", + "sha256": "05b68021e96e9b480298ddb2bd5c814ecf919a622d57ceabac7534eec31aad90", + "bytes": 3085 + }, + { + "path": "tools/web/check-action-bundle-install-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-bundle-install-desktop.py", + "sha256": "a34f4c2095c0ea2d47837f5d631d8dea6a19a70a620982333ddc9abd0a227099", + "bytes": 3033 + }, + { + "path": "tools/web/check-action-catalog-delete-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-catalog-delete-desktop.py", + "sha256": "d0347a61c6a0388062e0f9cdaa6c9a25fc3662c667b6641705543ac816e0a355", + "bytes": 2929 + }, + { + "path": "tools/web/check-action-catalog-new-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-catalog-new-desktop.py", + "sha256": "1a5331f11bf741efb897f4c719ea4ff2457e15823c10ca805085d63e059984c1", + "bytes": 2893 + }, + { + "path": "tools/web/check-action-catalog-redo-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-catalog-redo-desktop.py", + "sha256": "89ff11f1ec2f76c1d34c49549e2499db2df084fff63fcfb156d65e3c1f46d8f1", + "bytes": 2237 + }, + { + "path": "tools/web/check-action-catalog-undo-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-catalog-undo-desktop.py", + "sha256": "4a4866dc48a2fc8318549ef5a143697b2ba51643b8be3865975596882569c773", + "bytes": 2170 + }, + { + "path": "tools/web/check-action-catalog-undo-push-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-catalog-undo-push-desktop.py", + "sha256": "7e218eff97f8d4a2bd475d9957a94a784f4a76da3b35938389eb59eae7592795", + "bytes": 2225 + }, + { + "path": "tools/web/check-action-catalogs-save-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-catalogs-save-desktop.py", + "sha256": "ffa7e28e8bfb2669ff2e05a10edc7794eb43c31c0d4abaa3841b1887424bea92", + "bytes": 3038 + }, + { + "path": "tools/web/check-action-change-frame-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-change-frame-desktop.py", + "sha256": "18fcc3ea0f0cf7a503651791d283852b4ae0b219339258880351837a59726327", + "bytes": 3017 + }, + { + "path": "tools/web/check-action-channel-select-keys-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channel-select-keys-desktop.py", + "sha256": "5d09b95946aa6f7a754cfcd60259e14d388ecc98f4aca0fcb651bc99fabf292f", + "bytes": 2977 + }, + { + "path": "tools/web/check-action-channel-view-pick-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channel-view-pick-desktop.py", + "sha256": "2b2c904295211cdcf7689cdda060eed9856338c4295a84e0d74da862bee719a9", + "bytes": 3889 + }, + { + "path": "tools/web/check-action-channels-bake-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-bake-desktop.py", + "sha256": "87eccc9a6dd652d94cbe49e771937c39d223765ca7658e239e99017356613a2c", + "bytes": 2791 + }, + { + "path": "tools/web/check-action-channels-clean-empty-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-clean-empty-desktop.py", + "sha256": "f6a8ef3666d4672e53d9678c3d9f0dd0f9ee92f9d05e4078f81555a9ea047d20", + "bytes": 3108 + }, + { + "path": "tools/web/check-action-channels-click-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-click-desktop.py", + "sha256": "3984998cbb1a42541f447b317777ed96183147fbb470d2842bdf1d7bfc8aa600", + "bytes": 2934 + }, + { + "path": "tools/web/check-action-channels-collapse-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-collapse-desktop.py", + "sha256": "e899e95b4bda42f69040d24396d007eae2f35acd1c44594cecf4c25a4d0e1e6c", + "bytes": 2797 + }, + { + "path": "tools/web/check-action-channels-delete-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-delete-desktop.py", + "sha256": "b340793fe720b0bd60ca3d81a19c4a9bfba2c679b91bd2d6cbe371fe2e4ef657", + "bytes": 2731 + }, + { + "path": "tools/web/check-action-channels-editable-toggle-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-editable-toggle-desktop.py", + "sha256": "9d16d09a1f009d160731523de610360a0bc9dd730648b1f9251ef9a8c6e61428", + "bytes": 3013 + }, + { + "path": "tools/web/check-action-channels-expand-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-expand-desktop.py", + "sha256": "b8cc37161161746bbf2cce1da08b0658fa5e911507b6049d5f05b1cc0abb7148", + "bytes": 3247 + }, + { + "path": "tools/web/check-action-channels-fcurves-enable-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-fcurves-enable-desktop.py", + "sha256": "0124b78950409836682c690f2158c76d8eba8fc2ab5c35b11aacb73dbc2ad5a9", + "bytes": 2978 + }, + { + "path": "tools/web/check-action-channels-group-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-group-desktop.py", + "sha256": "0cf05f15c8441bdae97c96a44687b30527149165c16f1f31df10ff29e6fecb85", + "bytes": 3122 + }, + { + "path": "tools/web/check-action-channels-move-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-move-desktop.py", + "sha256": "0410afc446a73d3083d96fde83b36b3c1754e133b95af2554de064ab928ded5f", + "bytes": 2808 + }, + { + "path": "tools/web/check-action-channels-rename-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-rename-desktop.py", + "sha256": "16c276e94e9020e685d52d527cde9dc68f3fea64fdac61ce9cf99f74643d594e", + "bytes": 3473 + }, + { + "path": "tools/web/check-action-channels-select-all-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-select-all-desktop.py", + "sha256": "3f89d79ab79fc4a6e82c624c4703a71d6448d38a62c9f5237959a8215c96cc4e", + "bytes": 3626 + }, + { + "path": "tools/web/check-action-channels-select-box-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-select-box-desktop.py", + "sha256": "07de6dfe6d70e4f208e60a4b6f18c8322044f9d0a4b34812a63f36eec6e804b1", + "bytes": 3761 + }, + { + "path": "tools/web/check-action-channels-select-filter-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-select-filter-desktop.py", + "sha256": "f1893daef821328506372894e8b052d3d7d8e2632a90332bdd7e49725d3a3dd1", + "bytes": 3572 + }, + { + "path": "tools/web/check-action-channels-setting-disable-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-setting-disable-desktop.py", + "sha256": "cd697b916faa275dd6e44698a7c2945b9c070125d0132ce92f28855c447fcc0d", + "bytes": 3066 + }, + { + "path": "tools/web/check-action-channels-setting-enable-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-setting-enable-desktop.py", + "sha256": "936f925cf68eb27eeb911a5fc8179248201f7fa1fd672053a2fff0745c455e8a", + "bytes": 3054 + }, + { + "path": "tools/web/check-action-channels-setting-toggle-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-setting-toggle-desktop.py", + "sha256": "1282a6f5e4743fc78f74cb8e76025f5cbc0e5adbbb9e2335c617e8b29f35fdbd", + "bytes": 3057 + }, + { + "path": "tools/web/check-action-channels-ungroup-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-ungroup-desktop.py", + "sha256": "169f95d2dd14592f554642bfd62f299568a08efbc8542a994fe433ff059e0675", + "bytes": 3154 + }, + { + "path": "tools/web/check-action-channels-view-selected-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-channels-view-selected-desktop.py", + "sha256": "c7cafb9739ec0838ef9a838810066faf1884bb4927364e01c99c271e4da28630", + "bytes": 4538 + }, + { + "path": "tools/web/check-action-clean-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-clean-desktop.py", + "sha256": "4ab652e99fa8fa98cdec6832157f3bbb2e1ac7e5779f01ddd974f192945ea58e", + "bytes": 2588 + }, + { + "path": "tools/web/check-action-clear-useless-actions-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-clear-useless-actions-desktop.py", + "sha256": "942289d85bf2a716e5c7283471141b479fc68d086e5835cd08e65411ca76a7e5", + "bytes": 3452 + }, + { + "path": "tools/web/check-action-clickselect-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-clickselect-desktop.py", + "sha256": "29f5ab8b8489b38ec874b8bf1d779b45e19934862bec3b730b0f3aee08700f74", + "bytes": 2887 + }, + { + "path": "tools/web/check-action-copy-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-copy-desktop.py", + "sha256": "d5db0d6d0962ec780faa5a2c6fc1960a7e7d7babfced9d362ca05e46e0889c7c", + "bytes": 3452 + }, + { + "path": "tools/web/check-action-copy-driver-button-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-copy-driver-button-desktop.py", + "sha256": "12c6c2af98710a4989241e33383876b381c697320125d23508d87e2a78eacead", + "bytes": 3824 + }, + { + "path": "tools/web/check-action-delete-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-delete-desktop.py", + "sha256": "3655cc712601ed60095f850b4a419499007e13a7cceeebcd6c38bf42f7a1a6c0", + "bytes": 2791 + }, + { + "path": "tools/web/check-action-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-desktop.py", + "sha256": "7c32d786a8daedcf5e995d0ff29b6034e7c4f4c25c309ccd0542adecc19319f2", + "bytes": 2321 + }, + { + "path": "tools/web/check-action-driver-button-add-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-driver-button-add-desktop.py", + "sha256": "154a9e8eb687299b1279c6c8c6d30a6658650bf224a22312efba65f782ffcd7c", + "bytes": 10530 + }, + { + "path": "tools/web/check-action-driver-button-edit-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-driver-button-edit-desktop.py", + "sha256": "864c46ed3df66b0341660e715c6609d845851dc71afa7bd96348e19bce0db530", + "bytes": 3956 + }, + { + "path": "tools/web/check-action-driver-button-remove-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-driver-button-remove-desktop.py", + "sha256": "34db1bdf7b6086dca2447c00726703642da7ce58b572ded0ae57595e4ba5a359", + "bytes": 8520 + }, + { + "path": "tools/web/check-action-duplicate-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-duplicate-desktop.py", + "sha256": "281551ded3cdad0c4abc4e9b937b99e37ee51ecdfdb923137afc3ce7b0c5b29f", + "bytes": 2963 + }, + { + "path": "tools/web/check-action-duplicate-move-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-duplicate-move-desktop.py", + "sha256": "7738a3a07f4971ed3f564d3cd6d09243853a602ac1253056ac5bdaa9522c91a5", + "bytes": 2940 + }, + { + "path": "tools/web/check-action-easing-type-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-easing-type-desktop.py", + "sha256": "37233be661cbcf08ece72e5293de7016c4408d3708256902380ba608c7985abf", + "bytes": 2887 + }, + { + "path": "tools/web/check-action-end-frame-set-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-end-frame-set-desktop.py", + "sha256": "7ea71a9a4e48775fde115223a115f9f31df016ce57e4a13af60b89d5bc7d836a", + "bytes": 4846 + }, + { + "path": "tools/web/check-action-extrapolation-type-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-extrapolation-type-desktop.py", + "sha256": "8abb11eb1c484b008cc6157d0a5d9c786ebad25b196d117ea5fb015770f70abc", + "bytes": 2645 + }, + { + "path": "tools/web/check-action-frame-jump-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-frame-jump-desktop.py", + "sha256": "169ea06f3ed471014162d67bcb8b79945e85b7f91d1291f15b62ccecaf3a8126", + "bytes": 2707 + }, + { + "path": "tools/web/check-action-handle-type-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-handle-type-desktop.py", + "sha256": "81711dabd6dd4cf0a40b79f3d54a4243de6bd362f0295702c2d9f5d0336b35c2", + "bytes": 2580 + }, + { + "path": "tools/web/check-action-interpolation-type-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-interpolation-type-desktop.py", + "sha256": "5d61995b4ef75f1e47e277df59d5327609be283fc744014791857ef61f9b0ce5", + "bytes": 2974 + }, + { + "path": "tools/web/check-action-keyframe-clear-button-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-clear-button-desktop.py", + "sha256": "53c60181c3ca7da0eb16446a8eacf499963aa8e8a6e328b09a21a3301744c0b7", + "bytes": 9311 + }, + { + "path": "tools/web/check-action-keyframe-clear-v3d-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-clear-v3d-desktop.py", + "sha256": "1d2a7e2bf29a8bc62b6e4e3ebdc9489160f9494d9b7284f7159cc536f2bca1c0", + "bytes": 7757 + }, + { + "path": "tools/web/check-action-keyframe-clear-vse-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-clear-vse-desktop.py", + "sha256": "09aeec25d69a57b657bd690998058a23980b6a4b9425fd63dbb26f14f4edee8f", + "bytes": 8143 + }, + { + "path": "tools/web/check-action-keyframe-delete-button-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-delete-button-desktop.py", + "sha256": "fdb36e2d97ed687a20682a769f107f10801ab8845ad5e1061565893bad2cebd9", + "bytes": 9793 + }, + { + "path": "tools/web/check-action-keyframe-delete-by-name-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-delete-by-name-desktop.py", + "sha256": "b3c5726677eb6881950a96a13b5221eb74d5b4e13be118ad7f20679c842a64ea", + "bytes": 8308 + }, + { + "path": "tools/web/check-action-keyframe-delete-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-delete-desktop.py", + "sha256": "697bd750b9b3971fa108981e6b8f14f372705eeb39a7e20b33dffa9c1fa55c4c", + "bytes": 8114 + }, + { + "path": "tools/web/check-action-keyframe-delete-v3d-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-delete-v3d-desktop.py", + "sha256": "a761edaab49b1a81a7374a465b64b67836ebe06fba9626ba3d5233f91072d541", + "bytes": 7884 + }, + { + "path": "tools/web/check-action-keyframe-delete-vse-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-delete-vse-desktop.py", + "sha256": "67f18d3fc73b9e16cdccc572f551eb2f0f16d496db952889678189eb8fa9253d", + "bytes": 8385 + }, + { + "path": "tools/web/check-action-keyframe-insert-button-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-insert-button-desktop.py", + "sha256": "0fa0478deb1eb742105b5902070e5764113378ed1c7d390155cd2be61e991b08", + "bytes": 9955 + }, + { + "path": "tools/web/check-action-keyframe-insert-by-name-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-insert-by-name-desktop.py", + "sha256": "754eaa916735252fd9a462629da646890fbb9285c201d569e36314ca1b1d8bb2", + "bytes": 7760 + }, + { + "path": "tools/web/check-action-keyframe-insert-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-insert-desktop.py", + "sha256": "4c09e55f4f9935b4b4be4c7212451a5c1b01a569aa446c94fe80cdbaff5acda9", + "bytes": 8230 + }, + { + "path": "tools/web/check-action-keyframe-insert-menu-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-insert-menu-desktop.py", + "sha256": "a8a378ecd1242852dac76e83d5a19412aa6caf70a85f23364f17d48c806bb921", + "bytes": 7461 + }, + { + "path": "tools/web/check-action-keyframe-type-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyframe-type-desktop.py", + "sha256": "32b826a427ee36e8a34f45280ff107118295fffb184cbdf4fbedc3b229a36a51", + "bytes": 2917 + }, + { + "path": "tools/web/check-action-keying-set-active-set-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keying-set-active-set-desktop.py", + "sha256": "c0aaab7f5aae2982303ca0ab4cb05186d3d67ba21728bb49a2f8615a300d05f5", + "bytes": 7065 + }, + { + "path": "tools/web/check-action-keying-set-add-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keying-set-add-desktop.py", + "sha256": "70f33c905c82b3668c51e0f0c177dc4676417f8a6d9f2c1e0c87d6b9f433a958", + "bytes": 6792 + }, + { + "path": "tools/web/check-action-keying-set-export-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keying-set-export-desktop.py", + "sha256": "e75538f411751b309e6eb2d4376839b0e1e70784414463356ab36ae39a7ad799", + "bytes": 4427 + }, + { + "path": "tools/web/check-action-keying-set-path-add-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keying-set-path-add-desktop.py", + "sha256": "62a65a5b58bdf9d883691d47c13ece9759f763acf58ab46660a6fc93f486e04d", + "bytes": 7673 + }, + { + "path": "tools/web/check-action-keying-set-path-remove-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keying-set-path-remove-desktop.py", + "sha256": "91e9ae1891106babe828ead19c2f07fd955c06883fa4b03f1b4f12fb8a41824e", + "bytes": 6759 + }, + { + "path": "tools/web/check-action-keying-set-remove-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keying-set-remove-desktop.py", + "sha256": "34a45f49def53589fb7e5b3bcfaaaf500af5e5dba069a8175eff1dd19ba354cc", + "bytes": 6327 + }, + { + "path": "tools/web/check-action-keyingset-button-add-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyingset-button-add-desktop.py", + "sha256": "15b1b30ea2793313f52c914021d148c50cd02ba5bcb8d983c37755f811bcd16f", + "bytes": 8938 + }, + { + "path": "tools/web/check-action-keyingset-button-remove-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-keyingset-button-remove-desktop.py", + "sha256": "0a6c7361b44ef548f4d9bb7ef756e35bd9c09e82ec46edc60626a6918afc57b6", + "bytes": 9145 + }, + { + "path": "tools/web/check-action-markers-make-local-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-markers-make-local-desktop.py", + "sha256": "959fc711e2eb5c35d2635a65fd6119ec1aad4c44573b1bf0b65ecb3b05945902", + "bytes": 2283 + }, + { + "path": "tools/web/check-action-merge-animation-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-merge-animation-desktop.py", + "sha256": "0f7aabaad764f96992e4a1cbe56a586ce0c03e67b0cdc642073a5222cf5b5fcb", + "bytes": 5943 + }, + { + "path": "tools/web/check-action-mirror-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-mirror-desktop.py", + "sha256": "88f211cd8726e7214a68c90a2b0ccbbe0bdcfb237a7d1e2fb210a9b7bac8cf3f", + "bytes": 2895 + }, + { + "path": "tools/web/check-action-new-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-new-desktop.py", + "sha256": "e0c6c14b6a8bc95ab86d49df53aae91b05f611572c2f3394f89f3495f477f77f", + "bytes": 2123 + }, + { + "path": "tools/web/check-action-paste-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-paste-desktop.py", + "sha256": "a687641f71ad1b2db47da6717a7341a14e3b3d4cb45cc3a94f447684073201d2", + "bytes": 2517 + }, + { + "path": "tools/web/check-action-paste-driver-button-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-paste-driver-button-desktop.py", + "sha256": "2c167b38e9688880b499abe97babd2f51134b2b83efd5bb34140bb0b81079375", + "bytes": 10641 + }, + { + "path": "tools/web/check-action-previewrange-clear-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-previewrange-clear-desktop.py", + "sha256": "02b2704fd6edae72cb31d603c6a1ddf4a3054370627044ba4c1f66e30c488e3e", + "bytes": 3887 + }, + { + "path": "tools/web/check-action-previewrange-set-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-previewrange-set-desktop.py", + "sha256": "0c667ab6e9ca9e866234fa9e190dc30587b59ffeba5616b4b37853569e6d24a9", + "bytes": 3493 + }, + { + "path": "tools/web/check-action-push-down-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-push-down-desktop.py", + "sha256": "1bb759da4d9776f84bb5be2d615b7bd5edb6a4fafd9141fcb8e769c8076410e8", + "bytes": 2328 + }, + { + "path": "tools/web/check-action-replace-action-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-replace-action-desktop.py", + "sha256": "9415485899bb577d178c2345240dccf42ef90f1146a9c7be7064ddfeef9df0b1", + "bytes": 5232 + }, + { + "path": "tools/web/check-action-replace-action-new-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-replace-action-new-desktop.py", + "sha256": "9920d9911715035ed99a9615df37e8cfdb70c3aa9b96f12fd5296c52047b0c64", + "bytes": 5353 + }, + { + "path": "tools/web/check-action-scene-range-frame-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-scene-range-frame-desktop.py", + "sha256": "054bbc89615177ecd199f28b55910e6aadbe1b87d04056679810c549ffdd8c08", + "bytes": 3993 + }, + { + "path": "tools/web/check-action-select-all-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-all-desktop.py", + "sha256": "fe285ee6be545e1cbb9982563d35b98bee213d86a74dceefc274979ed887c73b", + "bytes": 2570 + }, + { + "path": "tools/web/check-action-select-box-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-box-desktop.py", + "sha256": "5a37f76f9da69f172fba64ed83424ea7bec521f498f556c3b0142fc2d284f0e3", + "bytes": 2572 + }, + { + "path": "tools/web/check-action-select-by-type-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-by-type-desktop.py", + "sha256": "1ed90bea542349826d6297378fd27e55c8b8370d6bc7dcf5251ac8b112887a30", + "bytes": 2670 + }, + { + "path": "tools/web/check-action-select-circle-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-circle-desktop.py", + "sha256": "3e5abe08be97e7db93a0229b63eeef48b6577a9d10be49339d36c0974126be70", + "bytes": 2563 + }, + { + "path": "tools/web/check-action-select-column-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-column-desktop.py", + "sha256": "7e4c5fcef9b85239b3f561db2736eaa80de819d042b8caa3eaaf7fb3230cc189", + "bytes": 2854 + }, + { + "path": "tools/web/check-action-select-lasso-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-lasso-desktop.py", + "sha256": "e730e9ae9740fb7a97113edb9af6c7f862128bf79509865727c432a275c3504a", + "bytes": 2557 + }, + { + "path": "tools/web/check-action-select-leftright-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-leftright-desktop.py", + "sha256": "bf20b5d05883481b1b455d0eaab9951f9c4abc73406f3a499f1a03c49b044832", + "bytes": 2923 + }, + { + "path": "tools/web/check-action-select-less-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-less-desktop.py", + "sha256": "52a4f3d5f5232f5843612286b35db8fb19050b8610c573a1bdcbbdae627d261f", + "bytes": 2836 + }, + { + "path": "tools/web/check-action-select-linked-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-linked-desktop.py", + "sha256": "4a1baae0c4add326934d50647d014248b43acf8e7ad90360921e1a487c25b150", + "bytes": 2985 + }, + { + "path": "tools/web/check-action-select-more-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-select-more-desktop.py", + "sha256": "7bfff8a2113d7933e76c0339232810c8cd43d1a633eee7832acb4c4069790f5b", + "bytes": 2995 + }, + { + "path": "tools/web/check-action-separate-slots-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-separate-slots-desktop.py", + "sha256": "4f1ea94c58a36b764cff6c40380794b927cd67212421aa36db8062b3817748a5", + "bytes": 4534 + }, + { + "path": "tools/web/check-action-slot-channels-move-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-slot-channels-move-desktop.py", + "sha256": "8625500da296a6eee287dbafb242da7178e9f101d171f8cc62ecf8baffe2b0d3", + "bytes": 4855 + }, + { + "path": "tools/web/check-action-slot-new-for-id-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-slot-new-for-id-desktop.py", + "sha256": "76c3ed3a2046d4c5befa9f761ba020bf37859f5758a11f874e688d91bbcbc7e3", + "bytes": 5523 + }, + { + "path": "tools/web/check-action-slot-unassign-from-constraint-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-slot-unassign-from-constraint-desktop.py", + "sha256": "89120dd2da7f4c7f24fb12af02ce94d5929002e0d87cad765c8828999c74afdb", + "bytes": 5238 + }, + { + "path": "tools/web/check-action-slot-unassign-from-id-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-slot-unassign-from-id-desktop.py", + "sha256": "3166defd69de7fb19a52c7b9646df52da9efb330c27037e77c4d34f92c6b43f5", + "bytes": 5752 + }, + { + "path": "tools/web/check-action-slot-unassign-from-nla-strip-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-slot-unassign-from-nla-strip-desktop.py", + "sha256": "dadd0204062fb1bb54de6b2cf998e4313ed7dee32b201467ef3327200ba04685", + "bytes": 5497 + }, + { + "path": "tools/web/check-action-snap-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-snap-desktop.py", + "sha256": "01064fe4acd586e99986372a8b39a72340d1a961506c7c189b074ce7928cd568", + "bytes": 2959 + }, + { + "path": "tools/web/check-action-start-frame-set-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-start-frame-set-desktop.py", + "sha256": "a4957a066065a6e4ae474e1fb700fd97179dbc12472fb2ff19f7d5048bbcd3d9", + "bytes": 4784 + }, + { + "path": "tools/web/check-action-stash-and-create-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-stash-and-create-desktop.py", + "sha256": "5bb7d73a5be061df3d95ce46357a5b0f48e863be217a4677f25f33d31d960cd5", + "bytes": 2374 + }, + { + "path": "tools/web/check-action-stash-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-stash-desktop.py", + "sha256": "dca0ae7cc8914f9598a0638ff19d0c8a490efd794b9a6fde331d8e45306c97df", + "bytes": 2526 + }, + { + "path": "tools/web/check-action-unlink-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-unlink-desktop.py", + "sha256": "e0f244be5712faa8caaa094efdfefc69c5ffaa9cb4e7e1185414f3da35e239ae", + "bytes": 3055 + }, + { + "path": "tools/web/check-action-update-animated-transform-constraints-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-update-animated-transform-constraints-desktop.py", + "sha256": "3417ba9f8ef8d086457623fe2b69be2de5d3983a4a7b3be57450b7083889ba5f", + "bytes": 5385 + }, + { + "path": "tools/web/check-action-version-bone-hide-property-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-version-bone-hide-property-desktop.py", + "sha256": "6b03a7faf073e652eb260a01068dd7d167e6ff88e46f75dfa9e1445edda1ab29", + "bytes": 5896 + }, + { + "path": "tools/web/check-action-view-all-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-view-all-desktop.py", + "sha256": "67a1a212702db13b924daa567cabad7c117ea9627d43b07a7bd70243379b76eb", + "bytes": 2982 + }, + { + "path": "tools/web/check-action-view-curve-in-graph-editor-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-view-curve-in-graph-editor-desktop.py", + "sha256": "38e8a54df8725315b0c60bec955c77a3e2a1022d01898377f097268165be81cf", + "bytes": 8200 + }, + { + "path": "tools/web/check-action-view-frame-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-view-frame-desktop.py", + "sha256": "11a2b6c2d6d1bb5670a161a0db02a7f0b65392cc820d263bd21df15196d9a4cd", + "bytes": 3236 + }, + { + "path": "tools/web/check-action-view-selected-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-action-view-selected-desktop.py", + "sha256": "fa74311b3ca77b04212ed894c0511fcab7489cff781fc934177ce4e40a139647", + "bytes": 4456 + }, + { + "path": "tools/web/check-armature-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-armature-desktop.py", + "sha256": "5a03e4c6d195219b6fe567973565b0d29f8957716d03c419b04d2003ed67429e", + "bytes": 1872 + }, + { + "path": "tools/web/check-armature-modifier-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-armature-modifier-desktop.py", + "sha256": "3cb59a6bd15b97a5fb33fc5643bd58fe3155264a2598e1cdae17aa72626e146f", + "bytes": 3207 + }, + { + "path": "tools/web/check-array-modifier-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-array-modifier-desktop.py", + "sha256": "82d5e59a60324101b1c97a277ab07afa2e1c52c55d1914fee27076d1c1619489", + "bytes": 2719 + }, + { + "path": "tools/web/check-bevel-modifier-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-bevel-modifier-desktop.py", + "sha256": "abf8dd2a65c48883c8e8ad7c022d06629206f2e55a63184a8e26abc44e678279", + "bytes": 2626 + }, + { + "path": "tools/web/check-boolean-modifier-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-boolean-modifier-desktop.py", + "sha256": "b84d0c7d6cc1554d59de2a11ce4140d504816fe140e74faf892a5495e8c3905f", + "bytes": 2684 + }, + { + "path": "tools/web/check-brush-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-brush-desktop.py", + "sha256": "515b1eab3b6e2dc0a4e9a65d20764816916228f41082739c98efd6cc882926bf", + "bytes": 1788 + }, + { + "path": "tools/web/check-build-modifier-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-build-modifier-desktop.py", + "sha256": "18bbc10043f8a8820370fb4ea6c5a411398e4622c7956fea20add56f1f8d1087", + "bytes": 2561 + }, + { + "path": "tools/web/check-camera-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-camera-desktop.py", + "sha256": "27831385e1ed7e464c6b627bcbcb81af01ad2afa7ec66f28d2256641005802b4", + "bytes": 1787 + }, + { + "path": "tools/web/check-cast-modifier-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-cast-modifier-desktop.py", + "sha256": "c8a28c4f06077a9649b150cde2537055f64c0b27163b820148ba81e36b49c251", + "bytes": 2259 + }, + { + "path": "tools/web/check-cloth-modifier-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-cloth-modifier-desktop.py", + "sha256": "308e449c9d896a870f33c8eb15fb6604a4fe7a22f646d754d356d5bc55fd94dc", + "bytes": 2062 + }, + { + "path": "tools/web/check-collection-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-collection-desktop.py", + "sha256": "fca7970f55b654527226b1b39a88934db35da787772c69ba65075f11e2664f26", + "bytes": 1662 + }, + { + "path": "tools/web/check-collision-modifier-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-collision-modifier-desktop.py", + "sha256": "21d816a1c929b96c873d15a719ee79187ba7201d79740a2ba9ccf81e4e566a32", + "bytes": 1846 + }, + { + "path": "tools/web/check-curve-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-curve-desktop.py", + "sha256": "e66ba2ae04f6de97e9643e581fa4426650ce4ddcfea0ffc8b3bf9fb14fdd26ee", + "bytes": 1933 + }, + { + "path": "tools/web/check-curves-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-curves-desktop.py", + "sha256": "3a8372a8ba072df2f5a3a1b3cccef44d219dde2193b551110017436cbd38e85c", + "bytes": 1813 + }, + { + "path": "tools/web/check-freestyle-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-freestyle-desktop.py", + "sha256": "7621b52c88adbae0bb611b2fd6ea2ccf1a0666341c36d4d03eda8f4c565efdc8", + "bytes": 2001 + }, + { + "path": "tools/web/check-generated-gap.mjs", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-generated-gap.mjs", + "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c", + "bytes": 824532 + }, + { + "path": "tools/web/check-generic-modifier-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-generic-modifier-desktop.py", + "sha256": "2df81f9bd231298b00b29f316254531ce097ed66dd122323f26b1301df130f19", + "bytes": 5653 + }, + { + "path": "tools/web/check-grease-pencil-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-grease-pencil-desktop.py", + "sha256": "4d99d5e81fcdc8289e462279f2da278e2aea573f4d947fa5e71e959b506d1ee1", + "bytes": 1809 + }, + { + "path": "tools/web/check-lattice-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-lattice-desktop.py", + "sha256": "56f48405407b4baba4ee9a13038fddc951c6fe607a3d64d6894a00e61d30be9b", + "bytes": 2588 + }, + { + "path": "tools/web/check-library-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-library-desktop.py", + "sha256": "34eda5a724ca7eab9fcb2e4f39cec46125e363f548fc77beb3f09133151fdeb4", + "bytes": 2065 + }, + { + "path": "tools/web/check-light-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-light-desktop.py", + "sha256": "90025507cc88c1c2be028e52a0b6e0b80561915bf109f38c64b95191c716505c", + "bytes": 2794 + }, + { + "path": "tools/web/check-material-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-material-desktop.py", + "sha256": "42a870bb79eceb8e1789686db689842dfe390d58db2744fded8dd571fe9cd8f5", + "bytes": 3376 + }, + { + "path": "tools/web/check-mesh-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-mesh-desktop.py", + "sha256": "8fe5859138f84079ddb43030fc8d22b596044b08d4f863da5dd25acaeedafdd5", + "bytes": 2616 + }, + { + "path": "tools/web/check-metaball-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-metaball-desktop.py", + "sha256": "77a03db581b17eda4219b42ffbf18e5d1809dfb3bf45f3ac0c0051f27934dc0c", + "bytes": 2179 + }, + { + "path": "tools/web/check-nodetree-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-nodetree-desktop.py", + "sha256": "e0fa9c2dbe5f9877c00c33d83e5aa2407606a003163be086a082e631da3cd9a5", + "bytes": 2224 + }, + { + "path": "tools/web/check-object-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-object-desktop.py", + "sha256": "3cb263b0bd2606cdce38bd433f90d50e738e93bf482c9fd16217306efb1521c0", + "bytes": 2054 + }, + { + "path": "tools/web/check-particle-settings-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-particle-settings-desktop.py", + "sha256": "d49ba0b987adf412c1692819b041a35905330f2fa633464c9425932450419afa", + "bytes": 2667 + }, + { + "path": "tools/web/check-pointcloud-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-pointcloud-desktop.py", + "sha256": "7223e0684f4bb8559228ffdd118b69dfd31c42959643ed17b885f13bb57eb400", + "bytes": 2324 + }, + { + "path": "tools/web/check-scene-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-scene-desktop.py", + "sha256": "ada4022a310510ffe37ccd7ef31a6bab8b37dfbd7a0b914f40fe379ba13db083", + "bytes": 2225 + }, + { + "path": "tools/web/check-screen-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-screen-desktop.py", + "sha256": "16ba526404558472d2dacc48e6f51440031556483dfeab9b52a43f69a3d5644e", + "bytes": 1927 + }, + { + "path": "tools/web/check-sound-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-sound-desktop.py", + "sha256": "aeeebdac9d14740843cc703150143087b7985138372ac1278fd3894e850c1ab7", + "bytes": 2058 + }, + { + "path": "tools/web/check-speaker-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-speaker-desktop.py", + "sha256": "4f2b6e3359aeba90754ade475f1683acccc8d2f44a75552c3b04f79a0ddf13d5", + "bytes": 2365 + }, + { + "path": "tools/web/check-text-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-text-desktop.py", + "sha256": "9ff73dbca7389f05aaf4834c4fb5a734a5c2cb2ef5e1a65962edbc0662ce0557", + "bytes": 2149 + }, + { + "path": "tools/web/check-texture-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-texture-desktop.py", + "sha256": "a91f9f69d389df79d7292e75ad64bd7a65a19bab063bac2ba311342b7d4fbb03", + "bytes": 2202 + }, + { + "path": "tools/web/check-volume-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-volume-desktop.py", + "sha256": "fd5b2110877e9372056292b543d23f1912ffcad32ea5d882054110202c6e3b16", + "bytes": 2016 + }, + { + "path": "tools/web/check-window-manager-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-window-manager-desktop.py", + "sha256": "29ac8b293e20b71a917fa834809cd15d881362cec0749a6ea1f7241b7409c6f1", + "bytes": 1826 + }, + { + "path": "tools/web/check-workspace-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-workspace-desktop.py", + "sha256": "5e01f8a7802eface955fcb0396c99a3f0c2570751bb672cd2b3401389e80cf08", + "bytes": 1658 + }, + { + "path": "tools/web/check-world-desktop.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/check-world-desktop.py", + "sha256": "fb4d115af8370f0d48a94ecc6d609eac5c0ca826a0f6d5bef90304b8c593d34b", + "bytes": 1721 + }, + { + "path": "tools/web/generate-brush-fixture.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generate-brush-fixture.py", + "sha256": "c4fd4a6c28c595b742b1ef083285ac87f9af56b65d75ba03750925079a0aa637", + "bytes": 582 + }, + { + "path": "tools/web/generate-camera-fixture.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generate-camera-fixture.py", + "sha256": "23c1bf411ed483f4bf111fb52f63e9ec77610f30819c68ac248075a851a59c97", + "bytes": 722 + }, + { + "path": "tools/web/generate-collection-fixture.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generate-collection-fixture.py", + "sha256": "3f2a02903a1c1d74a3ba707342b6617b39a3857ccf58e30162ab993c7e112544", + "bytes": 809 + }, + { + "path": "tools/web/generate-curve-fixture.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generate-curve-fixture.py", + "sha256": "bb93a2ca07e8e8ae81341c46edc7cbceb72ada2023b8fe956ee3b6ad03c7ae11", + "bytes": 971 + }, + { + "path": "tools/web/generate-curves-fixture.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generate-curves-fixture.py", + "sha256": "792ec1d58d495cd9d425215aa631dd5e1d66f7bd5cf75e783b961760667faacc", + "bytes": 1308 + }, + { + "path": "tools/web/generate-freestyle-fixture.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generate-freestyle-fixture.py", + "sha256": "e73088d9097c6ee94baaa07d3e8e279a55a0a34ccec2618e629699f840fd1ed1", + "bytes": 815 + }, + { + "path": "tools/web/generated/M16-GAP-00010.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00010.py", + "sha256": "35303113c57f1cc6c6b7bd1afc269be0c824b71f0c7bfbb0fd33f35fea40a8c2", + "bytes": 1286 + }, + { + "path": "tools/web/generated/M16-GAP-00011.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00011.py", + "sha256": "f33b9d5482193439fedd34f138b192d2e086db01205560276fa43bfd08ed430a", + "bytes": 1587 + }, + { + "path": "tools/web/generated/M16-GAP-00012.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00012.py", + "sha256": "9b261d7d516e0514e6e96a876661d0ab8eb83b844e92cd72dc4ffda460da0b2b", + "bytes": 977 + }, + { + "path": "tools/web/generated/M16-GAP-00013.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00013.py", + "sha256": "bb04dd1da461e061c27be9d4e160b2787026855198661e72ff4fee802b72c817", + "bytes": 2075 + }, + { + "path": "tools/web/generated/M16-GAP-00014.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00014.py", + "sha256": "c1333fbd1f86bac31f1db1f09056d2152f3b537fe59353f3d6f50767e8d724db", + "bytes": 977 + }, + { + "path": "tools/web/generated/M16-GAP-00015.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00015.py", + "sha256": "db1da7ca090d37b6590eab38f49cbcac9972e7ade1966d78f316048c6b0acf54", + "bytes": 1026 + }, + { + "path": "tools/web/generated/M16-GAP-00016.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00016.py", + "sha256": "12033eb9f1ef9f09fe86135259382e7cc938928c23a89b637d39e8e36c51982e", + "bytes": 1417 + }, + { + "path": "tools/web/generated/M16-GAP-00017.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00017.py", + "sha256": "64bb9f488573946dcf7d2358bd5d5f540055bb2813942e98ed154da179cb201b", + "bytes": 810 + }, + { + "path": "tools/web/generated/M16-GAP-00018.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00018.py", + "sha256": "c2b7b9c33e92952e9f10ca08b854b4bc0603350aa66f0277d08af4513d18d45e", + "bytes": 900 + }, + { + "path": "tools/web/generated/M16-GAP-00019.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00019.py", + "sha256": "36ead922241d5372ba4ae5c4656d449faeb62bb8958b4e96231c09b6b316fa13", + "bytes": 1048 + }, + { + "path": "tools/web/generated/M16-GAP-00020.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00020.py", + "sha256": "51890c98ae84cd4751896e0e84b9b63d5caa3fa58d47bba6f4074489b88dc24e", + "bytes": 870 + }, + { + "path": "tools/web/generated/M16-GAP-00021.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00021.py", + "sha256": "f6a97289626552e3e319fe72f3932beb610289c7da8710c0d4219312b0566c1e", + "bytes": 644 + }, + { + "path": "tools/web/generated/M16-GAP-00022.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00022.py", + "sha256": "10ef16727dfee1c69ea7e6b48f151016cc02a18a6586c478c286be2ed0c7a3ea", + "bytes": 762 + }, + { + "path": "tools/web/generated/M16-GAP-00023.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00023.py", + "sha256": "7bb8465ba094c9f7edbfbb66fd9f6d8b0a2e2b955d5fb990313daea09adbd22c", + "bytes": 1162 + }, + { + "path": "tools/web/generated/M16-GAP-00024.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00024.py", + "sha256": "85a16b7ebb4b00dffdc9277d11780b744267e0c789e75844b2749517c23e8ebd", + "bytes": 659 + }, + { + "path": "tools/web/generated/M16-GAP-00025.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00025.py", + "sha256": "849dddfddf9841b866cf2531af3f74b3fc42b5b6303eaa5f2273cba2a0b1cee0", + "bytes": 732 + }, + { + "path": "tools/web/generated/M16-GAP-00026.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00026.py", + "sha256": "e8cf1a2397e5a03f6cd246add30287ead990b9bfb932e34bfbbb4e95d7a98036", + "bytes": 732 + }, + { + "path": "tools/web/generated/M16-GAP-00027.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00027.py", + "sha256": "f93ea3ef289853f45ad9e1553007e47e89376d15ac2dd2e623ed2c3b783cd036", + "bytes": 553 + }, + { + "path": "tools/web/generated/M16-GAP-00028.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00028.py", + "sha256": "6d1a74f7340820917461720442888c5a705ac8140d6ad0d4809aace082c27469", + "bytes": 627 + }, + { + "path": "tools/web/generated/M16-GAP-00029.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00029.py", + "sha256": "b57d5f058a3f3862d6c4a8e4383ebd8c544ec2118338298eb5756fadc8aa306f", + "bytes": 742 + }, + { + "path": "tools/web/generated/M16-GAP-00030.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00030.py", + "sha256": "f3fb565611e07d2eb5a30f6557a3848d5f1d6e5231dcc9d4da80ec4973158f24", + "bytes": 1850 + }, + { + "path": "tools/web/generated/M16-GAP-00031.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00031.py", + "sha256": "28504da60ebf881eda9ed407884b403029bb8ced6131c425b64f512c82b2d292", + "bytes": 1701 + }, + { + "path": "tools/web/generated/M16-GAP-00032.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00032.py", + "sha256": "1af887a0beed22a1eaf199723535e2d1952c7458ea60bf22485c5b433dc17d2d", + "bytes": 1382 + }, + { + "path": "tools/web/generated/M16-GAP-00033.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00033.py", + "sha256": "4eeb3bae0015883cd91ebebed89b78ebd5c7732d3be16ac88561eca87eb5d053", + "bytes": 1567 + }, + { + "path": "tools/web/generated/M16-GAP-00034.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00034.py", + "sha256": "4523e086c326df712e621a9fdbc54bd29af0d94d241a09c437a247f824bbd8db", + "bytes": 1180 + }, + { + "path": "tools/web/generated/M16-GAP-00035.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00035.py", + "sha256": "24e6f54012d0454bfd6dc99a0fa6fe9fbfd3482781534479cdc1afb461305324", + "bytes": 1302 + }, + { + "path": "tools/web/generated/M16-GAP-00036.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00036.py", + "sha256": "219d0f2ecc7b67050865a46163e64cf7b28de75ce5c8cc52cdcf3a32817bd093", + "bytes": 1008 + }, + { + "path": "tools/web/generated/M16-GAP-00037.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00037.py", + "sha256": "b96eb3c62c590e55be3e442757a40c30b3b9c1deb8abc67d71f61b00b9c61fc1", + "bytes": 936 + }, + { + "path": "tools/web/generated/M16-GAP-00038.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00038.py", + "sha256": "e0726e2db3c360e0397d6aa1d480a63e5f4800c381c9d4e1cde33e36ebc0a5dc", + "bytes": 438 + }, + { + "path": "tools/web/generated/M16-GAP-00039.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00039.py", + "sha256": "3709078f49c92c34424c6e47d7f8870ba81c0bc2765bb5522199adfd4231e8e5", + "bytes": 412 + }, + { + "path": "tools/web/generated/M16-GAP-00040.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00040.py", + "sha256": "62aec1123186b57c5e1ffa58eea9833ea5d996a7509d49473331ac5f1843be44", + "bytes": 427 + }, + { + "path": "tools/web/generated/M16-GAP-00041.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00041.py", + "sha256": "241568c40f9308d09a1d33d87b47bb2549204f28820901133b778b640f086ec2", + "bytes": 1026 + }, + { + "path": "tools/web/generated/M16-GAP-00042.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00042.py", + "sha256": "b9ed8fdb43f5b4b7b1830881db7c770432f0023627429ffe51989e16b2f09746", + "bytes": 1028 + }, + { + "path": "tools/web/generated/M16-GAP-00043.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00043.py", + "sha256": "1fb842dde99a67cda98ec4a6feb139216ad277388b490ff65699e9f742ae095a", + "bytes": 428 + }, + { + "path": "tools/web/generated/M16-GAP-00044.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00044.py", + "sha256": "835413a7f88c4f2eb6b508d1913f1eb20489b8b5b1b1c35bceb2d094ee4f7292", + "bytes": 1008 + }, + { + "path": "tools/web/generated/M16-GAP-00045.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00045.py", + "sha256": "ac5a0a3c7a0a842a12499f06336700e0b17923619f27ce3872f6f05f299508ad", + "bytes": 417 + }, + { + "path": "tools/web/generated/M16-GAP-00046.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00046.py", + "sha256": "16cc612933b0c0137b4b986d4807ce12f838bae52457e941fd53f79c48677cab", + "bytes": 413 + }, + { + "path": "tools/web/generated/M16-GAP-00047.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00047.py", + "sha256": "d107f117b147b955027c694f6a82147e64a931dbb57e8ce0425ade9cbc9a1d99", + "bytes": 551 + }, + { + "path": "tools/web/generated/M16-GAP-00048.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00048.py", + "sha256": "46d0a48bac2f893ce03ffb055881159a3f55327e8314ef24f2530a6212ddf868", + "bytes": 608 + }, + { + "path": "tools/web/generated/M16-GAP-00049.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00049.py", + "sha256": "1d351d2f7f82f92d41ce1e1837b7bbaff41ec7046d51d118cb9a744b2f130347", + "bytes": 535 + }, + { + "path": "tools/web/generated/M16-GAP-00050.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00050.py", + "sha256": "3940edc4cca7b1d5cf9a335b8190be744cbbd6e6201614372dbf39163ff9efa1", + "bytes": 535 + }, + { + "path": "tools/web/generated/M16-GAP-00051.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00051.py", + "sha256": "c6f60bcce29d2015308c78d764b57579616d644d84dc27bb98a118b162348808", + "bytes": 535 + }, + { + "path": "tools/web/generated/M16-GAP-00052.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00052.py", + "sha256": "53a12d6ac62873a4cc6d384c811030e43f57b08485a8c50c70d638a7433ec333", + "bytes": 535 + }, + { + "path": "tools/web/generated/M16-GAP-00053.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00053.py", + "sha256": "2f3523d2f8378fbdef7083d93ac666059a3649c29fdd8c4bf5e44fdbb8e596fa", + "bytes": 535 + }, + { + "path": "tools/web/generated/M16-GAP-00054.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00054.py", + "sha256": "e033647018764ecb7015f9d7c1e6201306ca36ecf3df29a8a12ecadfa19238bb", + "bytes": 535 + }, + { + "path": "tools/web/generated/M16-GAP-00055.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00055.py", + "sha256": "6cd72429c65a9e5e36e099f0c35f523e51ed26d4c796be7b3e4397c3bb71509c", + "bytes": 535 + }, + { + "path": "tools/web/generated/M16-GAP-00056.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00056.py", + "sha256": "b604fc0351b563558a59be40fbfbdd83481ec3c0eeda6ec020fc5e21bc527de3", + "bytes": 535 + }, + { + "path": "tools/web/generated/M16-GAP-00057.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00057.py", + "sha256": "b2fed8f2d445c0eb10ed833385cc6e6e91394a97e367c6c76a3dbc4b61f5abb7", + "bytes": 535 + }, + { + "path": "tools/web/generated/M16-GAP-00058.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00058.py", + "sha256": "01dd91ba30acebe5749feef841e8ca9f096ac35a9fb6b454ae30ed94941ddd21", + "bytes": 535 + }, + { + "path": "tools/web/generated/M16-GAP-00059.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00059.py", + "sha256": "1077df2f66d6a954a239cbdb6d55f5b05ef382b7224c9bbd886695d47dbf3b15", + "bytes": 535 + }, + { + "path": "tools/web/generated/M16-GAP-00060.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00060.py", + "sha256": "4bc32e262c02b41bbc4bccf0ae76e280a3b97cc5cb28495361f7e044868f9b51", + "bytes": 535 + }, + { + "path": "tools/web/generated/M16-GAP-00061.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00061.py", + "sha256": "d99b89a5f9daaa8a454abd747b4903f0391ad21af6b315a46cd92bbcaf08ac7d", + "bytes": 535 + }, + { + "path": "tools/web/generated/M16-GAP-00062.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00062.py", + "sha256": "b3e97d53919cb031f359cc15429f5801ac59614ba8f6993183f9db8deb280e3f", + "bytes": 535 + }, + { + "path": "tools/web/generated/M16-GAP-00063.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00063.py", + "sha256": "a7b77f92944e9d61c4f52f478ee004f4caef642a810f1ed18d51318be04b0ff4", + "bytes": 535 + }, + { + "path": "tools/web/generated/M16-GAP-00064.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00064.py", + "sha256": "1df74ba06ff31269cf1f98214aa6c0ca6aa0cc600e459315f92196f8aeb3dd4f", + "bytes": 535 + }, + { + "path": "tools/web/generated/M16-GAP-00065.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00065.py", + "sha256": "977935d2e28afb3d9322e77d64440f5b69fdbf714ff6d8350a06acc1ea9cbce9", + "bytes": 535 + }, + { + "path": "tools/web/generated/M16-GAP-00066.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00066.py", + "sha256": "e51850c49d2fc333b943f421c92fe6bdbfcf79d23ccab95ee87f783bfa57f8f1", + "bytes": 535 + }, + { + "path": "tools/web/generated/M16-GAP-00067.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00067.py", + "sha256": "89a64c14a4b1007dc3011bde0b5cb27c4bf77bbffd7ae3e89c5f6aac30f40cb9", + "bytes": 535 + }, + { + "path": "tools/web/generated/M16-GAP-00068.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00068.py", + "sha256": "cd982ce4a34537a22a20a4b8efcf676624ce2d7a7dfbd8896ed2c37494889282", + "bytes": 535 + }, + { + "path": "tools/web/generated/M16-GAP-00069.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00069.py", + "sha256": "6ebf4e9475f40e8ef0da9c0fe99beb221f965efaad0953cd507c3d24be2d951f", + "bytes": 535 + }, + { + "path": "tools/web/generated/M16-GAP-00070.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00070.py", + "sha256": "777e53fca82084ced7003328672cda678c8480db9c56c07517a19609ae353ecf", + "bytes": 535 + }, + { + "path": "tools/web/generated/M16-GAP-00071.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00071.py", + "sha256": "d811aa0a430d7fb4db838627e8e71fa1ec812ec932d894512acf24a2d98ac6dd", + "bytes": 535 + }, + { + "path": "tools/web/generated/M16-GAP-00072.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00072.py", + "sha256": "239d1ec0c9cb68b93e48becd7451a80fcbead84430cb3de2fb7545a9da658bcf", + "bytes": 411 + }, + { + "path": "tools/web/generated/M16-GAP-00073.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00073.py", + "sha256": "ce9be025d573d87c48bd4975f4cee1c343749156d163abe51a04a05e9d951ad5", + "bytes": 433 + }, + { + "path": "tools/web/generated/M16-GAP-00074.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00074.py", + "sha256": "c4d29eb33cf3abbca68333cf064e634a6202889170f20eb0d47868cacbd47cc7", + "bytes": 433 + }, + { + "path": "tools/web/generated/M16-GAP-00075.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00075.py", + "sha256": "d5d161608d986e04d66afb8871ef34eae2c27bbf8fe654b2982c6a10553150eb", + "bytes": 425 + }, + { + "path": "tools/web/generated/M16-GAP-00076.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00076.py", + "sha256": "45797f19ee517501033c3c95e79f13f4fc7f8699c17ecacc54367b3932ffa63d", + "bytes": 550 + }, + { + "path": "tools/web/generated/M16-GAP-00077.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00077.py", + "sha256": "b3b946e1348773aafd1df5c9aa192e566e79adaf06112e23e2d7a00c6c6fde01", + "bytes": 1082 + }, + { + "path": "tools/web/generated/M16-GAP-00078.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00078.py", + "sha256": "614c0b5bc0bfe91fe29a956067e1cef0ffc1b6a072e4178682323143a86861e1", + "bytes": 968 + }, + { + "path": "tools/web/generated/M16-GAP-00079.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00079.py", + "sha256": "06ae4b6e3e7f9fa3a2a999bdd916ff3f8b482bb44e2971d4775e5fc3a1fd41eb", + "bytes": 972 + }, + { + "path": "tools/web/generated/M16-GAP-00080.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00080.py", + "sha256": "394a6517eeeb12cc033b7ae43d4cebd8d99a2c31077486909ca65613da51f0ec", + "bytes": 1001 + }, + { + "path": "tools/web/generated/M16-GAP-00081.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00081.py", + "sha256": "a6d2734582c3e8f746267b682bddd0356a231609162f40cebb79484e47e4ef42", + "bytes": 840 + }, + { + "path": "tools/web/generated/M16-GAP-00082.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00082.py", + "sha256": "32c0bcc7edcf14fbbd9e12465ce61cb7e0d15c7754062096329ebd6d6cd9ee46", + "bytes": 1020 + }, + { + "path": "tools/web/generated/M16-GAP-00083.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00083.py", + "sha256": "43920644f5f247ca216205f3bbf3aa39568dc1a29b205bf5852a0fe6e803acab", + "bytes": 963 + }, + { + "path": "tools/web/generated/M16-GAP-00084.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00084.py", + "sha256": "0b5d9510f41f00719d7ddd95d23fb5ee75a561bac8cdb65a1a66950c24366698", + "bytes": 951 + }, + { + "path": "tools/web/generated/M16-GAP-00085.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00085.py", + "sha256": "6a88aac132385510134ec5df930649ec34398d57ef67a5176aec9fcf4ba2db3b", + "bytes": 972 + }, + { + "path": "tools/web/generated/M16-GAP-00086.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00086.py", + "sha256": "808f73b3c5cd06d60f96d9040189c4a2da64487326d9c8c9dc385f7715d8c4c7", + "bytes": 951 + }, + { + "path": "tools/web/generated/M16-GAP-00087.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00087.py", + "sha256": "d9ee675f1c26cbed6e95daaac356c5eaec6c76f065d874cecd6710dec46e6261", + "bytes": 996 + }, + { + "path": "tools/web/generated/M16-GAP-00088.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00088.py", + "sha256": "1aa118a77f3639ec6761c0083876c4fcb70b504734ffb1f1a6366e670ecd3255", + "bytes": 915 + }, + { + "path": "tools/web/generated/M16-GAP-00089.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00089.py", + "sha256": "bf07af3faa32ab5533ad352b46c4cfdcca45f2f8d22e9e2b894aa7566f1ee250", + "bytes": 955 + }, + { + "path": "tools/web/generated/M16-GAP-00090.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00090.py", + "sha256": "8a3687c6baed4826d7acb1e07c01ad7fc706b7279076eb32267f290c1c1538dd", + "bytes": 951 + }, + { + "path": "tools/web/generated/M16-GAP-00091.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00091.py", + "sha256": "9c31a3c7fb798db179e37d43d89b633141e9b8b18dbfd34a7eb1502c5ef805df", + "bytes": 971 + }, + { + "path": "tools/web/generated/M16-GAP-00092.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00092.py", + "sha256": "93acc4af7e20ddf63e1bc6ffb4e200b06af28a4ab943311b2170a8c01c248c06", + "bytes": 980 + }, + { + "path": "tools/web/generated/M16-GAP-00093.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00093.py", + "sha256": "3fad88717f143ab554d3926f86d218ed47ee4a682db379d337f897c41df2088f", + "bytes": 947 + }, + { + "path": "tools/web/generated/M16-GAP-00094.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00094.py", + "sha256": "3e10f94a84a52c1b6114d1d6fcf764481b8bf79dfc8cb533389c016c34c36938", + "bytes": 1269 + }, + { + "path": "tools/web/generated/M16-GAP-00095.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00095.py", + "sha256": "a82183922f2228f641d8bd59689e807e8caa495886a581e58e86f9c307b0f45b", + "bytes": 964 + }, + { + "path": "tools/web/generated/M16-GAP-00096.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00096.py", + "sha256": "8ffa8697f2d4490f9ca2f04d4eaa3866be4bdecbe17e9d5db11c13882034c009", + "bytes": 1021 + }, + { + "path": "tools/web/generated/M16-GAP-00097.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00097.py", + "sha256": "cd26d7bd580a78e40a78f7bd47526dbd3430d75b9c1f9c63849668b613277960", + "bytes": 1073 + }, + { + "path": "tools/web/generated/M16-GAP-00098.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00098.py", + "sha256": "988ad257572050d657a7c82ece4f639246a93e700ee3cb216469fb73bbb948e9", + "bytes": 977 + }, + { + "path": "tools/web/generated/M16-GAP-00099.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00099.py", + "sha256": "bafaa8cf007d02851acca674b3894d758a8dc3874ca87c184d705a07fdfc724d", + "bytes": 1002 + }, + { + "path": "tools/web/generated/M16-GAP-00100.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00100.py", + "sha256": "38d58e97c7b10b34abb70090deea9127a9bfda58bf446a8fa6fa7b8835482e82", + "bytes": 1062 + }, + { + "path": "tools/web/generated/M16-GAP-00101.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00101.py", + "sha256": "d86878aacd79189a5c1fce75f94eab1f7c04039562acefa101152cc097334765", + "bytes": 986 + }, + { + "path": "tools/web/generated/M16-GAP-00102.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00102.py", + "sha256": "aa91e891f053d2d4716e204c64e54a9c139f8dc9e53b23bf43e7f9c4cbba93b8", + "bytes": 974 + }, + { + "path": "tools/web/generated/M16-GAP-00103.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00103.py", + "sha256": "383166f3a110e555a87ba5e0f62d5805c6890d736cf79c6f1dd8972e6e6b0a2a", + "bytes": 1015 + }, + { + "path": "tools/web/generated/M16-GAP-00104.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00104.py", + "sha256": "d3d6405f1f20036043610b8a8bb22faf5e8652d6e47ee08cc40cd5e9f5567464", + "bytes": 1011 + }, + { + "path": "tools/web/generated/M16-GAP-00105.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00105.py", + "sha256": "59dfdb7ba6bb853ebc3d5d24a7c63c6a09fdda5381d62febc211128a87adc7d9", + "bytes": 1035 + }, + { + "path": "tools/web/generated/M16-GAP-00106.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00106.py", + "sha256": "7aad13aed9fc5da77c671e89961dc744228cfea00c65044270000f0fb8e4c396", + "bytes": 918 + }, + { + "path": "tools/web/generated/M16-GAP-00107.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00107.py", + "sha256": "9730c26f96cd994d92cf2e2670718124f899e0ce2e3d044a10404f8b0fafa834", + "bytes": 999 + }, + { + "path": "tools/web/generated/M16-GAP-00108.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00108.py", + "sha256": "ee8667312b3608fff806a2f888edca90cad3a960184ee64d0b7b33fd9cad2657", + "bytes": 965 + }, + { + "path": "tools/web/generated/M16-GAP-00109.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00109.py", + "sha256": "2c8f4bfe4a36a069fd6e106fc80836bf38df2663e2343a6cde15114f00cbffdc", + "bytes": 1044 + }, + { + "path": "tools/web/generated/M16-GAP-00110.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00110.py", + "sha256": "17fb8ee025fe4fadff5ca63401d795ace27920d88fd4dbe4c32af7614e0892ab", + "bytes": 1101 + }, + { + "path": "tools/web/generated/M16-GAP-00111.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00111.py", + "sha256": "70a5a835615617c1feaa7795f1ee8c4dc2e07021a62c97ea87915a4231ef509c", + "bytes": 1002 + }, + { + "path": "tools/web/generated/M16-GAP-00112.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00112.py", + "sha256": "403b955f748db90be606506213ee1cd50f8c95f45ecc4ed1bda8a847dd18ab6d", + "bytes": 1043 + }, + { + "path": "tools/web/generated/M16-GAP-00113.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00113.py", + "sha256": "e1eb89000230ec1d198930f06da6b5b35207a83a93eaf3e333c69560d212c5ae", + "bytes": 2339 + }, + { + "path": "tools/web/generated/M16-GAP-00114.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00114.py", + "sha256": "ab1e15afe86016892d2abf43ae84836ff4c84df917d15ca8f1d8b245e138bd52", + "bytes": 1981 + }, + { + "path": "tools/web/generated/M16-GAP-00115.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00115.py", + "sha256": "e91f19fa0f133900cace0b2708ee5a7fcb6efe589e036963b2b0fa6ff5bbaef9", + "bytes": 2658 + }, + { + "path": "tools/web/generated/M16-GAP-00116.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00116.py", + "sha256": "318545fd674bc2477d674292bc3c273684978e101c526a258f52af965dc3eb6f", + "bytes": 2388 + }, + { + "path": "tools/web/generated/M16-GAP-00117.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00117.py", + "sha256": "517943d741eaceb53e7f8d89a8bed07282afa157d4357e3a25690fb8f5df89b4", + "bytes": 2216 + }, + { + "path": "tools/web/generated/M16-GAP-00118.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00118.py", + "sha256": "6829baf79faa5225c6fb8a18201a5d91a2371ac4480ba1180534c7e8a8e89624", + "bytes": 2227 + }, + { + "path": "tools/web/generated/M16-GAP-00119.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00119.py", + "sha256": "2db8ee3d18c634ae2f28d1dd2a3ced2bf9490be578795b59a1ca9e96eb1992af", + "bytes": 2357 + }, + { + "path": "tools/web/generated/M16-GAP-00120.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00120.py", + "sha256": "0db649027d8772539a011bf5b5eb021efbd95728f9af706b4b42a361e88f8c3d", + "bytes": 2243 + }, + { + "path": "tools/web/generated/M16-GAP-00121.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00121.py", + "sha256": "09a7f42b438f7fb6b14eab1fd8fc436ee938ec62af8f11d62b24a46215d7a05a", + "bytes": 2267 + }, + { + "path": "tools/web/generated/M16-GAP-00122.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00122.py", + "sha256": "a80fec742fa6c4f9f0846bcc9ed7817e68ae9b78a3789b5e9ffd873a4f71ba22", + "bytes": 2223 + }, + { + "path": "tools/web/generated/M16-GAP-00123.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00123.py", + "sha256": "8b144f6bc50ec8234906f07e81bf661353fe123e0ff85dcb1874185914f4d844", + "bytes": 2224 + }, + { + "path": "tools/web/generated/M16-GAP-00124.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00124.py", + "sha256": "c80a0232ad6d5628eac7ed5b59c83f6e9741cfa0f793491db339171ee79a4ec8", + "bytes": 2294 + }, + { + "path": "tools/web/generated/M16-GAP-00125.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00125.py", + "sha256": "10ca9311b9454c1926c870a171b0bed6e3c6057086be253bad11e2c86f0637cc", + "bytes": 1949 + }, + { + "path": "tools/web/generated/M16-GAP-00126.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00126.py", + "sha256": "973f3fd3109a9f36948e11db0d46fad117fe7353a867a2a673fa77faaa6f2e60", + "bytes": 2257 + }, + { + "path": "tools/web/generated/M16-GAP-00127.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00127.py", + "sha256": "56daad95fab95e4d7896e5b2b4e30f84a8f33df7e920f41458d95e55a93991c1", + "bytes": 2017 + }, + { + "path": "tools/web/generated/M16-GAP-00128.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00128.py", + "sha256": "e6697304148d72a7305900d6893861f284fe3b42ec88c3b35b8bb2f78b728180", + "bytes": 2179 + }, + { + "path": "tools/web/generated/M16-GAP-00129.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00129.py", + "sha256": "b7c42577aec64a99b2533c236124c6afea9741a82666065dd1ff0d7570c9aff1", + "bytes": 2135 + }, + { + "path": "tools/web/generated/M16-GAP-00130.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00130.py", + "sha256": "889c12feb0e8064612f899c7ad431f647d735cc00f6da56d79e8669225378b9a", + "bytes": 2496 + }, + { + "path": "tools/web/generated/M16-GAP-00131.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00131.py", + "sha256": "f679375cd1a45f13e2423cd540b557e9eab841d4c0d535c064beb5794887738e", + "bytes": 2288 + }, + { + "path": "tools/web/generated/M16-GAP-00132.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00132.py", + "sha256": "728a07f627b276ffceb7f5ddff059829095ab7f7175ecbfeb41129f6b43b306e", + "bytes": 1878 + }, + { + "path": "tools/web/generated/M16-GAP-00133.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00133.py", + "sha256": "5bb6e8720b5f126590fb36b92a5fd05becfe6c710e99eac6694b391675e10572", + "bytes": 2212 + }, + { + "path": "tools/web/generated/M16-GAP-00134.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00134.py", + "sha256": "5760b84ac789d3aaafb2577441a7638da28fc983c0dcfb126fb36cfb1b5748e7", + "bytes": 2581 + }, + { + "path": "tools/web/generated/M16-GAP-00135.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00135.py", + "sha256": "3072ac8ebeb375655730d030e0fc757fdc8002811ad2747376ec12dbfac1c993", + "bytes": 2575 + }, + { + "path": "tools/web/generated/M16-GAP-00136.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00136.py", + "sha256": "7d29d879169aef8362f53a39130b2a4ef0ab3ac83069024a78338197e09ae030", + "bytes": 3018 + }, + { + "path": "tools/web/generated/M16-GAP-00137.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00137.py", + "sha256": "8743db045d9df0505233a88785b92b0fadb2551788b909047d1aa2376e8e9516", + "bytes": 2267 + }, + { + "path": "tools/web/generated/M16-GAP-00138.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00138.py", + "sha256": "182db872745d0ce5746919db571e67ff715c1114b3936bfa659b6e71acf303a7", + "bytes": 3008 + }, + { + "path": "tools/web/generated/M16-GAP-00139.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00139.py", + "sha256": "d1175acf47e8ec1c4998582e22d9434a4eea921f551b6c99f9b85b7f5a6727be", + "bytes": 2305 + }, + { + "path": "tools/web/generated/M16-GAP-00140.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00140.py", + "sha256": "62fe22db41e856439c50c542d0a62b6db4fbfc80facedf625ba58291d3b4a928", + "bytes": 2195 + }, + { + "path": "tools/web/generated/M16-GAP-00141.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00141.py", + "sha256": "3e27b0fffe763b6526e4e32fa9b40aae72f229038e846237b90e72312aa1a8eb", + "bytes": 2274 + }, + { + "path": "tools/web/generated/M16-GAP-00142.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00142.py", + "sha256": "36dc0cf95dae703e72f8071625b94617e8d13a1845dc148835b5584625281d16", + "bytes": 2258 + }, + { + "path": "tools/web/generated/M16-GAP-00143.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00143.py", + "sha256": "fe0b8f6c70b0a2fece59b696e5e83e55cb2f72705bb89db43b8ed4e953a198be", + "bytes": 2223 + }, + { + "path": "tools/web/generated/M16-GAP-00144.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00144.py", + "sha256": "66275fb985c801c659e063f2379d9154093550cb7d5916013332b88aa25dfbec", + "bytes": 1848 + }, + { + "path": "tools/web/generated/M16-GAP-00145.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00145.py", + "sha256": "cbbc5b2e3e84ec8442c4acb065be91a6818ff7c1d2d92e7a0e13253696b8389d", + "bytes": 1926 + }, + { + "path": "tools/web/generated/M16-GAP-00146.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00146.py", + "sha256": "ab4682dbd1e828f8f18d2bb0cc17ff6a795d364fefe5f0dadb88b74f55220638", + "bytes": 2007 + }, + { + "path": "tools/web/generated/M16-GAP-00147.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00147.py", + "sha256": "738d70668b71d9be03b8aab088c9a71e82f102f97cc0435c58a19c6838566ca0", + "bytes": 2197 + }, + { + "path": "tools/web/generated/M16-GAP-00148.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00148.py", + "sha256": "7c21cdadfb8d08c2f44ba2e58d53f9c879773b488a53135bc3a9ad4ae96aa3d5", + "bytes": 2184 + }, + { + "path": "tools/web/generated/M16-GAP-00149.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00149.py", + "sha256": "9d7d4a10fb148fe40a1f624886491d64c9dde1bf86cdf21a97c86ec167f7cb92", + "bytes": 2517 + }, + { + "path": "tools/web/generated/M16-GAP-00150.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00150.py", + "sha256": "582a5e470a2b47095762ddd6df93ff8ffe8a67ea45aa2b483f87528a9ca7180c", + "bytes": 2130 + }, + { + "path": "tools/web/generated/M16-GAP-00151.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00151.py", + "sha256": "6ac3acd4031a4dc3967d1f49546148fb45854ca1caa3c0569b7246d996cf06a1", + "bytes": 2883 + }, + { + "path": "tools/web/generated/M16-GAP-00152.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00152.py", + "sha256": "dc920602484d5b9d90b714de6044c5687f9001fd601170de87019ed194941284", + "bytes": 2474 + }, + { + "path": "tools/web/generated/M16-GAP-00153.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00153.py", + "sha256": "a1dba3b7bd0b5011eb2867f12428b89b9d76b103ebe6109e78c9711dfc0596de", + "bytes": 2235 + }, + { + "path": "tools/web/generated/M16-GAP-00154.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00154.py", + "sha256": "0deaaa7054c65927a2cdd8c5ebbce257ea05a0b81e0c4df98d6cca559553af0d", + "bytes": 3020 + }, + { + "path": "tools/web/generated/M16-GAP-00155.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00155.py", + "sha256": "14be8a2dd379b1bbb1504618a18f15fa1aa64fba64c29569896b3e5d32f3e001", + "bytes": 3046 + }, + { + "path": "tools/web/generated/M16-GAP-00156.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00156.py", + "sha256": "63e9b942070f44dcd5b8a20f82aca62d880d57a5955ff8f82914b9a9f92dcf60", + "bytes": 2136 + }, + { + "path": "tools/web/generated/M16-GAP-00157.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00157.py", + "sha256": "5613100e6c50539e8dd7371cd3c4e2c8469ec3ca384c42126e11a210ad0d5d7b", + "bytes": 2519 + }, + { + "path": "tools/web/generated/M16-GAP-00158.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00158.py", + "sha256": "1cc7409084194b006ae60b80da804de4972e671e073b6762353f9db516ea05df", + "bytes": 2795 + }, + { + "path": "tools/web/generated/M16-GAP-00159.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00159.py", + "sha256": "04988ce930276e01b61838b48860601bb829fdaf7e7d9652eb1fa2f3b36b6f6b", + "bytes": 2485 + }, + { + "path": "tools/web/generated/M16-GAP-00160.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00160.py", + "sha256": "83337ffc4859fc026819640065e8bf0aa889d5fd9b23815366a96190a45df956", + "bytes": 2935 + }, + { + "path": "tools/web/generated/M16-GAP-00161.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00161.py", + "sha256": "f042c1f5ea55d2f146c81e9765b451ea2a58c82768095c76d632ea9de46b198e", + "bytes": 2584 + }, + { + "path": "tools/web/generated/M16-GAP-00162.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00162.py", + "sha256": "ac23b4652f68035ba12003a44c75d7104be17132f8a2edce5f9b3f64052a57d4", + "bytes": 2996 + }, + { + "path": "tools/web/generated/M16-GAP-00163.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00163.py", + "sha256": "fe2d78ca3844f1b81af065855f95f4f0ba1b70259e9b9260f828a6509f3304ce", + "bytes": 3868 + }, + { + "path": "tools/web/generated/M16-GAP-00164.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00164.py", + "sha256": "84fe57e8233f869bd359215f6fc90e4291ee07fc06ebd58e45fb302778862000", + "bytes": 2758 + }, + { + "path": "tools/web/generated/M16-GAP-00165.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00165.py", + "sha256": "1c3521dd8c3ae4f8ed564391ca8a8d434bfce4e67e78dc0fc19e809aeb030040", + "bytes": 3729 + }, + { + "path": "tools/web/generated/M16-GAP-00166.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00166.py", + "sha256": "1689d5a753d6a0e51c9ebd066ef08938342c038568151739d3e10b7e86f52c50", + "bytes": 2430 + }, + { + "path": "tools/web/generated/M16-GAP-00167.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00167.py", + "sha256": "7b9cd25c07e698fd4f389011a147489fd2b343dea1fd94f14bf16ad78aa237ae", + "bytes": 2859 + }, + { + "path": "tools/web/generated/M16-GAP-00168.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00168.py", + "sha256": "b9ac34e412e9f8f8a85fdf9155201cc9e2382c1fb5bfee98a47421ce76b23e9a", + "bytes": 2705 + }, + { + "path": "tools/web/generated/M16-GAP-00169.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00169.py", + "sha256": "06268638700a3aa6312e8cc86500e3eb3eb0b3271ecc8da9d8cce3db0af33b9c", + "bytes": 2705 + }, + { + "path": "tools/web/generated/M16-GAP-00170.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00170.py", + "sha256": "9d8ad51d5a174ccd376baf67ce5323c59af5306c74d5da18bdb1c44df2a30c42", + "bytes": 2873 + }, + { + "path": "tools/web/generated/M16-GAP-00171.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00171.py", + "sha256": "a3ae3c94e453977cc8caa62b725896e352ef763e5ca8a03ac1ee8d9a95d32ddb", + "bytes": 2916 + }, + { + "path": "tools/web/generated/M16-GAP-00172.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00172.py", + "sha256": "61dcbd69b1d6a3c88eb0c1d0e9c40499730a8e006e160d83b2d1f1da55b02ad8", + "bytes": 1988 + }, + { + "path": "tools/web/generated/M16-GAP-00173.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00173.py", + "sha256": "6b8a666c9683a87182c0a35c6cdbf54f4fab873c743898e66f8ae4eef7043829", + "bytes": 1166 + }, + { + "path": "tools/web/generated/M16-GAP-00174.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00174.py", + "sha256": "95bc46b2ea19b5a7012cd75c885a87eb7ea8ad79fbab0b10841205889e4381fc", + "bytes": 920 + }, + { + "path": "tools/web/generated/M16-GAP-00175.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00175.py", + "sha256": "e4edbf58ccda3bcd61d4cb4fa2d80c2f68bad6313c94bc0c84115eaa1a4b12be", + "bytes": 1168 + }, + { + "path": "tools/web/generated/M16-GAP-00176.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00176.py", + "sha256": "9591dac532101bf681890f06a1f88f2f1a106e728846e3b86829abb834f1291b", + "bytes": 1172 + }, + { + "path": "tools/web/generated/M16-GAP-00177.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00177.py", + "sha256": "c8f783aa06acd980ebd0f3e228f4065e779434b22059e6b032b652adb521a1d7", + "bytes": 590 + }, + { + "path": "tools/web/generated/M16-GAP-00178.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00178.py", + "sha256": "2182c0a9dda794a1f037cea8178151382cfc9c15c1599c23f3d81d4d1883f6da", + "bytes": 1319 + }, + { + "path": "tools/web/generated/M16-GAP-00179.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00179.py", + "sha256": "600336ccf298afe28fdd1141a2dbac794fde599f28c31f9d7a7a8eb15bb80443", + "bytes": 1310 + }, + { + "path": "tools/web/generated/M16-GAP-00180.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00180.py", + "sha256": "e72a0c68e1ac8173c70944bc48f7bd03365913e24b831708da40a28bde936f4d", + "bytes": 1317 + }, + { + "path": "tools/web/generated/M16-GAP-00181.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00181.py", + "sha256": "bc42dcd74150bdc50dba1190dcda12f0c7f40cd8886e94c541243c5e6df460b7", + "bytes": 1630 + }, + { + "path": "tools/web/generated/M16-GAP-00182.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00182.py", + "sha256": "8424d4ca63c32c9127c9cf1d095a6dde62121ae8ddccea5dc0bbd8ba37b27a20", + "bytes": 1325 + }, + { + "path": "tools/web/generated/M16-GAP-00183.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00183.py", + "sha256": "482995ad5ea8beeb8e6a3c4a004de282587d09f5186bac854a0513c747e316b0", + "bytes": 1654 + }, + { + "path": "tools/web/generated/M16-GAP-00184.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00184.py", + "sha256": "9bd3112772fe91a57b1cb89a781067316442d4d06e7fbd7fc84429a67fe0272a", + "bytes": 1392 + }, + { + "path": "tools/web/generated/M16-GAP-00185.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00185.py", + "sha256": "9abb73d74b639eef255794c35ce8bb102959a53d4d12f8818d45c28946b1e791", + "bytes": 1371 + }, + { + "path": "tools/web/generated/M16-GAP-00186.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00186.py", + "sha256": "edd44185e79eb16c51f2160e5bec5d6ee5dd5ad2d1b662533fa0cfe399e713cd", + "bytes": 1651 + }, + { + "path": "tools/web/generated/M16-GAP-00187.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00187.py", + "sha256": "7eaac0eb63db785dea7da7df596fa19ed5447b356b13667c5f25e5ee1cecf14d", + "bytes": 1346 + }, + { + "path": "tools/web/generated/M16-GAP-00188.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00188.py", + "sha256": "109653bb9dd32d38ba755a6b284bdc75cca195894327db2f96feaf47faf8d935", + "bytes": 1665 + }, + { + "path": "tools/web/generated/M16-GAP-00189.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00189.py", + "sha256": "20c8d28aea4b14e24dfe83e1b7c3906e8bf1f2ed1fbb723542320a7ece13f73f", + "bytes": 1620 + }, + { + "path": "tools/web/generated/M16-GAP-00190.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00190.py", + "sha256": "f54bc93cb7b686883ae9bf3b36406d953af3c8246dca01e439999b5e09e4574a", + "bytes": 1743 + }, + { + "path": "tools/web/generated/M16-GAP-00191.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00191.py", + "sha256": "42f787b67fd1858ef184ffaa76438a025d92fc49fe80cdf3a3334e314839a123", + "bytes": 1296 + }, + { + "path": "tools/web/generated/M16-GAP-00192.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00192.py", + "sha256": "cb932180b82d9eabe3fac18fa461f4107fc6d1016a262c120c8be0758eeeeafb", + "bytes": 1476 + }, + { + "path": "tools/web/generated/M16-GAP-00193.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00193.py", + "sha256": "bf3d651dd050b39186f50095519cd02e16fbc9d652e2d307b7f5a05703ab18d7", + "bytes": 1534 + }, + { + "path": "tools/web/generated/M16-GAP-00194.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00194.py", + "sha256": "182bc9eda4c6383e83f353cb0ee8fee299caf954537592f58cd68f1e1b1328e2", + "bytes": 1618 + }, + { + "path": "tools/web/generated/M16-GAP-00195.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00195.py", + "sha256": "4f8fb118aa60518844dd181607994d857dc8828d66acd526fe0de727491f54e6", + "bytes": 1524 + }, + { + "path": "tools/web/generated/M16-GAP-00196.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00196.py", + "sha256": "61eefce310c581808e90c8378b1f085c00d7d28878c0c62946489225b020f2d8", + "bytes": 1349 + }, + { + "path": "tools/web/generated/M16-GAP-00197.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00197.py", + "sha256": "34b9c47630db975f40df4ebc156c9b0488dc7bc85ff0fe6cbcc4603aae2da14c", + "bytes": 1613 + }, + { + "path": "tools/web/generated/M16-GAP-00198.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00198.py", + "sha256": "85004c8e8f9e92eea7a87f266de34d07950b993b7af6bd09e642d99bd1f54eb7", + "bytes": 1665 + }, + { + "path": "tools/web/generated/M16-GAP-00199.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00199.py", + "sha256": "6ef118516c3eed69fa601631d26f5ecef355fe9f58907a1c7e33c4a8cd2be88e", + "bytes": 1222 + }, + { + "path": "tools/web/generated/M16-GAP-00200.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00200.py", + "sha256": "92d82b88dd301e895fe075c7d1760b1cb4147c7049a3c6d69509fc17e14b64d1", + "bytes": 1765 + }, + { + "path": "tools/web/generated/M16-GAP-00201.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00201.py", + "sha256": "94fac7954b5c1fd566c48b4dfac58fa2581b6068360cccee7b436e30e5bed9c0", + "bytes": 1707 + }, + { + "path": "tools/web/generated/M16-GAP-00202.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00202.py", + "sha256": "bf8fc46f38503e773ffa46248feca82de6120321888924eafb3779dc232984e8", + "bytes": 1870 + }, + { + "path": "tools/web/generated/M16-GAP-00203.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00203.py", + "sha256": "7da43b3e6d4774e5cd90ecbe51e6249a34778e58caec85945fbc9f3abfe83c4f", + "bytes": 1565 + }, + { + "path": "tools/web/generated/M16-GAP-00204.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00204.py", + "sha256": "bda30fc04f8985b0dbdce2e239ee7a05a12e9362ca162803b54154684844d226", + "bytes": 1641 + }, + { + "path": "tools/web/generated/M16-GAP-00205.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00205.py", + "sha256": "54a5039afb72cbdd942e1b9c77cbbe5bb09a4380ebca186268dd676a357621eb", + "bytes": 1754 + }, + { + "path": "tools/web/generated/M16-GAP-00206.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00206.py", + "sha256": "a0dda3e2468216bebc829cf9d64ff8b2124d243007bf466653df78aadb1e109a", + "bytes": 2190 + }, + { + "path": "tools/web/generated/M16-GAP-00207.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00207.py", + "sha256": "6c664ddeab1eb7cbe143c2c23ece749225b7f70a641590922af6a76fd61d44eb", + "bytes": 1491 + }, + { + "path": "tools/web/generated/M16-GAP-00208.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00208.py", + "sha256": "47a3962e2c07fc2cef07570c671001c612ece290ed811bc4317143391e99a82d", + "bytes": 1455 + }, + { + "path": "tools/web/generated/M16-GAP-00209.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00209.py", + "sha256": "45e9b34637496caa72e521214539d9ef60646191e90dbed5bcd76c3fa7366701", + "bytes": 1506 + }, + { + "path": "tools/web/generated/M16-GAP-00210.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00210.py", + "sha256": "82ae2a1e60b7a8f1adfa9fd0451dda47daabba420bc658177172fe3080aaadd1", + "bytes": 1712 + }, + { + "path": "tools/web/generated/M16-GAP-00211.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00211.py", + "sha256": "587d7d78764c9f107677dccd537f0265ca0c340e25127938fea64e99b33fff38", + "bytes": 590 + }, + { + "path": "tools/web/generated/M16-GAP-00212.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00212.py", + "sha256": "d38cdea9f5584506f0b3ac87fa734da388fd891c81a0438031e5bb881ffd77f5", + "bytes": 1600 + }, + { + "path": "tools/web/generated/M16-GAP-00213.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00213.py", + "sha256": "f5e1eefa9c012d091f413ec771f6dab8dac496f2d4481e33fa288a61a6ef4c86", + "bytes": 2312 + }, + { + "path": "tools/web/generated/M16-GAP-00214.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00214.py", + "sha256": "a5c2ab327f0540ac3b80088e9022c9231be30408defe536263a87c3394677b80", + "bytes": 2640 + }, + { + "path": "tools/web/generated/M16-GAP-00215.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00215.py", + "sha256": "b755086a190245ff4ed5effb4c713790ea8e1b066c79800ecb7b32cbfc1c1764", + "bytes": 1343 + }, + { + "path": "tools/web/generated/M16-GAP-00216.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00216.py", + "sha256": "1e14f51d34a6a3781b299f826ef1a449efa4ad0dc744960b529a00671ffac017", + "bytes": 1512 + }, + { + "path": "tools/web/generated/M16-GAP-00217.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00217.py", + "sha256": "037230ad7bb83e69a7c89aca12b62a87dd13d18307bf5f6dcc2c6b0ce059c51d", + "bytes": 1252 + }, + { + "path": "tools/web/generated/M16-GAP-00218.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00218.py", + "sha256": "a59d8918c3372dc41d1fdf06efea2fa8bdaadcadd0a1602af029d3682a7cf924", + "bytes": 871 + }, + { + "path": "tools/web/generated/M16-GAP-00219.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00219.py", + "sha256": "97a7da237cc8f8154f08b96e2ba6b5d6e608a6bc1b0bfa20fe165c00a3bb68b7", + "bytes": 1104 + }, + { + "path": "tools/web/generated/M16-GAP-00220.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00220.py", + "sha256": "3af1d354e35b31da18a187e0ef5f5e2b5a2f11111058ff1dc3648f6134679b41", + "bytes": 1239 + }, + { + "path": "tools/web/generated/M16-GAP-00221.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00221.py", + "sha256": "b2eea8780bb0095ab12b3a0f6e437054f6d01450a9a111030da0724b134bdc69", + "bytes": 1290 + }, + { + "path": "tools/web/generated/M16-GAP-00222.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00222.py", + "sha256": "74ddcb85092783361facd3388f3bfae2ea1794b6d1395f2381928f8e296d3c5c", + "bytes": 1403 + }, + { + "path": "tools/web/generated/M16-GAP-00223.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00223.py", + "sha256": "8edf3fc266d93bb225a0f13d16034a2518f2a85f424931d9c570626417c5ce11", + "bytes": 1320 + }, + { + "path": "tools/web/generated/M16-GAP-00224.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00224.py", + "sha256": "26498cbab951fc7494cc364a6487de4b2901ddf17844b95c1c5416dcb058087c", + "bytes": 1881 + }, + { + "path": "tools/web/generated/M16-GAP-00225.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00225.py", + "sha256": "60175e59c0362eff81649fcdcbd180fea7f06233ebd7d42cb3d35d2e66804901", + "bytes": 1764 + }, + { + "path": "tools/web/generated/M16-GAP-00226.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00226.py", + "sha256": "bf2375e84e871ada6615365fbda390de46a6f7adf1202d76ff6d6b34ea7ef364", + "bytes": 1789 + }, + { + "path": "tools/web/generated/M16-GAP-00227.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00227.py", + "sha256": "c08cad057124430d914c10b3a9f8f79d94809fdd283778397a91085364784ed5", + "bytes": 1833 + }, + { + "path": "tools/web/generated/M16-GAP-00228.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00228.py", + "sha256": "06377349aec2193a46188eea4f6b00c2122442636bea2547166ec96caef2e7a4", + "bytes": 1957 + }, + { + "path": "tools/web/generated/M16-GAP-00229.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00229.py", + "sha256": "008fdaad2977e6eb878e28e46d7d9b1eee6600b5328f954ca251576b17ff6e19", + "bytes": 1828 + }, + { + "path": "tools/web/generated/M16-GAP-00230.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00230.py", + "sha256": "4f71a937c4dd2f7284f1f13347f67c7fa1a640016c681bbd73818e334b3d984b", + "bytes": 1477 + }, + { + "path": "tools/web/generated/M16-GAP-00231.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00231.py", + "sha256": "3c735e79dc4e8f6b7f32c95ba1613ad7ed59b90c81821c0cf5e1cc9535b745a1", + "bytes": 1502 + }, + { + "path": "tools/web/generated/M16-GAP-00232.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00232.py", + "sha256": "10bd16bd644bd55dd57d427216828a7aab6cbda49a1d5cbb570d6e78e72fdb18", + "bytes": 1862 + }, + { + "path": "tools/web/generated/M16-GAP-00233.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00233.py", + "sha256": "c7da3085c85ea178b7dc834df8a05950197d005ee2d6da7da420ebe2c9ea8711", + "bytes": 1735 + }, + { + "path": "tools/web/generated/M16-GAP-00234.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00234.py", + "sha256": "408362122138a1f2e8fbe837c9d78795ff42445cdeb2359bf001888cfc6ed538", + "bytes": 1401 + }, + { + "path": "tools/web/generated/M16-GAP-00235.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00235.py", + "sha256": "9dcb072c97f9c758d33de0280685665fe089c24393f6f72b06fb02e490e2befb", + "bytes": 1753 + }, + { + "path": "tools/web/generated/M16-GAP-00236.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00236.py", + "sha256": "7f4e66d90c76efa8c4f5ed0f0e052ed1a00ca815ff24630d08a201daab94233d", + "bytes": 1429 + }, + { + "path": "tools/web/generated/M16-GAP-00237.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00237.py", + "sha256": "2345158899b35752b6875a28a243668369c51a087eef596eb420e603f0393a75", + "bytes": 1662 + }, + { + "path": "tools/web/generated/M16-GAP-00238.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00238.py", + "sha256": "dd00c6d9952cc91579c298a700c1698e1bfbe55542400bb694c6ea3c9b79bf5d", + "bytes": 1663 + }, + { + "path": "tools/web/generated/M16-GAP-00239.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00239.py", + "sha256": "651deeb3808998b44611bcecdfab9adc903245f53b66f521fad03443b900e047", + "bytes": 1422 + }, + { + "path": "tools/web/generated/M16-GAP-00240.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00240.py", + "sha256": "586f9ed3d865bf4ca759b36d010013ba33a34ff8862578c65b25acc9f53a4a69", + "bytes": 1446 + }, + { + "path": "tools/web/generated/M16-GAP-00241.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00241.py", + "sha256": "ba7a8fb5d46dc073f2e93180534340008d9f35824bdcbe829ede880015061a08", + "bytes": 1438 + }, + { + "path": "tools/web/generated/M16-GAP-00242.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00242.py", + "sha256": "0e2b56d0020066bcd69d7ee4970c4eaaf3f3cdf02a9f528903997246b3a9ea48", + "bytes": 1657 + }, + { + "path": "tools/web/generated/M16-GAP-00243.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00243.py", + "sha256": "444c10dac8003527409024263844587d5c7b6d1cec495fc8e408b6af14e60fde", + "bytes": 1640 + }, + { + "path": "tools/web/generated/M16-GAP-00244.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00244.py", + "sha256": "848e43152c5035fc40d6ffafa566dbcbf4a7940d32fbd75a7d696321d125c938", + "bytes": 1409 + }, + { + "path": "tools/web/generated/M16-GAP-00245.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00245.py", + "sha256": "9a7de621f6e88acc93d19697d4a3db5223943318e70e4561983fd989cf120aa3", + "bytes": 1703 + }, + { + "path": "tools/web/generated/M16-GAP-00246.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00246.py", + "sha256": "2d2f7b43517d2b39a44f6a2606ecf932925f31b6896c01a657ce2dfe8008e703", + "bytes": 1736 + }, + { + "path": "tools/web/generated/M16-GAP-00247.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00247.py", + "sha256": "1767464c3c6a2a24207c56bb59fecfd20f49ef7b83055716b209de354a04ff5d", + "bytes": 1669 + }, + { + "path": "tools/web/generated/M16-GAP-00248.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00248.py", + "sha256": "8fac586cf7c3f54822111df0c88151797e68af0283e39f075dd9cd70d080ed93", + "bytes": 1444 + }, + { + "path": "tools/web/generated/M16-GAP-00249.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00249.py", + "sha256": "38b8b84ca841093bff16caf3aa8b10e8f033f16649f58c7b77292b34fb94c08e", + "bytes": 1208 + }, + { + "path": "tools/web/generated/M16-GAP-00250.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00250.py", + "sha256": "fd1e6bca22e8b9e29cdaee6d7df3b561d7b1cfaff4d8ac96e9a7b807a8940e8f", + "bytes": 1429 + }, + { + "path": "tools/web/generated/M16-GAP-00251.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00251.py", + "sha256": "a6eda558d5ca8f973a6cebaba1160453c6ca5a9dec3b47cb05f89dca31f31d86", + "bytes": 1737 + }, + { + "path": "tools/web/generated/M16-GAP-00252.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00252.py", + "sha256": "8d394493b9b2a43fe98a666d6eaef5f1facf699d5063ba82a8b3ff461037715f", + "bytes": 1711 + }, + { + "path": "tools/web/generated/M16-GAP-00253.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00253.py", + "sha256": "d64e0a3681f8501775ecb6fafafec3fba567b42c10fbcda3507624560ddb05fa", + "bytes": 2077 + }, + { + "path": "tools/web/generated/M16-GAP-00254.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00254.py", + "sha256": "f08a4362f6bfbbdd8eeeac7e9961613f21450b64fcf5138fd2674515c97229af", + "bytes": 2037 + }, + { + "path": "tools/web/generated/M16-GAP-00255.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00255.py", + "sha256": "19e723cd74e3e0adad28ed2feaec157ae4725f88e4863457c91ab0b9aac4ade3", + "bytes": 1596 + }, + { + "path": "tools/web/generated/M16-GAP-00256.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00256.py", + "sha256": "2e644c7207d74ac4a1e3e9c9163af7dd823b155622e2caacb4cdf6f47b7a49c1", + "bytes": 1793 + }, + { + "path": "tools/web/generated/M16-GAP-00257.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00257.py", + "sha256": "eca6a8b77191833657b65e86c190c6d4942df4b560cb57a86a0aafcad26566c1", + "bytes": 1699 + }, + { + "path": "tools/web/generated/M16-GAP-00258.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00258.py", + "sha256": "5b4a7669e1232b981973a7317ff946fde216854b10eee36a7adee5b707f8d00f", + "bytes": 1472 + }, + { + "path": "tools/web/generated/M16-GAP-00259.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00259.py", + "sha256": "1fd82486ed5774b54fe3ddb79f7396a32754f2cc60cd139aa87c335a1222f8a9", + "bytes": 1649 + }, + { + "path": "tools/web/generated/M16-GAP-00260.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00260.py", + "sha256": "2260f113bec783fde138407c7eba120e72e860d3961b9779d1d9151c5247d7dc", + "bytes": 1250 + }, + { + "path": "tools/web/generated/M16-GAP-00261.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00261.py", + "sha256": "49aa287e8b24d914f2157f9fffe4c4c63cc7bc963b2610e8ea3ccaba0de7188d", + "bytes": 1207 + }, + { + "path": "tools/web/generated/M16-GAP-00262.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00262.py", + "sha256": "e4865caae23b80ebb893349e49fb8f8b313babb9d63e7e80c919e8b9ec9dfa90", + "bytes": 1278 + }, + { + "path": "tools/web/generated/M16-GAP-00263.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00263.py", + "sha256": "d2c2558f53a666ae73e4074fcf6c9db8d39dd7fb3de65537e66c17a70533ff70", + "bytes": 1437 + }, + { + "path": "tools/web/generated/M16-GAP-00264.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00264.py", + "sha256": "e7fd141d87414ee12669a83dbfe54ef47b557a9c517ba8ec164264882c80e8bd", + "bytes": 738 + }, + { + "path": "tools/web/generated/M16-GAP-00265.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00265.py", + "sha256": "1a86706f3c011d4a0f0b443bb6db3500704b898f0b42af5795ed2ee94b6c4286", + "bytes": 740 + }, + { + "path": "tools/web/generated/M16-GAP-00266.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00266.py", + "sha256": "e299bf65f70bc4eb08204f42894c961d0a7c2c69bfab5e4a26ed8924f52a6271", + "bytes": 1014 + }, + { + "path": "tools/web/generated/M16-GAP-00267.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00267.py", + "sha256": "bc950bc190d2e9c607a6d41cfc448977fe478b98723640287f63f4f42fcd2052", + "bytes": 1602 + }, + { + "path": "tools/web/generated/M16-GAP-00268.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00268.py", + "sha256": "4b9ab994369328b54f630882410066f5ef04980108a692d686430b8331454b6c", + "bytes": 1587 + }, + { + "path": "tools/web/generated/M16-GAP-00269.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00269.py", + "sha256": "2be254c3d36647b1d6dfb06af054ab96a0def10666f911bedc3a4225206ff749", + "bytes": 1536 + }, + { + "path": "tools/web/generated/M16-GAP-00270.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00270.py", + "sha256": "ccaa0c91694f931c0fb6313695b8bb5eae795e8003d24ff67f0eb21328184727", + "bytes": 1425 + }, + { + "path": "tools/web/generated/M16-GAP-00271.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00271.py", + "sha256": "8012efb7f85f89625f13686743798051fa5febaae361b179117c992ca4bc972c", + "bytes": 1043 + }, + { + "path": "tools/web/generated/M16-GAP-00272.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00272.py", + "sha256": "e7aac853fe0c589dc19375ab30259635e5af15c59aeb12a75eb8f7c6ac745052", + "bytes": 995 + }, + { + "path": "tools/web/generated/M16-GAP-00273.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00273.py", + "sha256": "120262e67b215a5d778100b820d74b8d3f216b20e36402a4f389099751a728c2", + "bytes": 1007 + }, + { + "path": "tools/web/generated/M16-GAP-00274.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/M16-GAP-00274.py", + "sha256": "7db1e65ed1f4329210791cfffc2888c321073bfb557cbac158577d7d4375bb59", + "bytes": 1435 + }, + { + "path": "tools/web/generated/modifier_gap_fixture.py", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/tools/web/generated/modifier_gap_fixture.py", + "sha256": "85d5bc91e433a402099aeefccb5bed1a3711c88ea3484ac6083ce45a6c4517aa", + "bytes": 1068 + }, + { + "path": "web/app/public/vendor/blender/web_engine.js", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/web/app/public/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "bytes": 132196 + }, + { + "path": "web/app/public/vendor/blender/web_engine.wasm", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/web/app/public/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "bytes": 15610535 + }, + { + "path": "web/app/src/vendor/blender/web_engine.js", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/web/app/src/vendor/blender/web_engine.js", + "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "bytes": 132196 + }, + { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/web/app/src/vendor/blender/web_engine.wasm", + "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "bytes": 15610535 + }, + { + "path": "web/engine/web_engine_native_reader_stub.cpp", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/web/engine/web_engine_native_reader_stub.cpp", + "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "bytes": 18938 + }, + { + "path": "web/package.json", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/web/package.json", + "sha256": "9c553a1e0614bcd190149a409759c8fe5d83a0bd00fe49b4bce049ffa01e0f0a", + "bytes": 35813 + }, + { + "path": "web/protocol/editor-workflow.ts", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/web/protocol/editor-workflow.ts", + "sha256": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "bytes": 17846 + }, + { + "path": "web/protocol/scene-ir.ts", + "snapshotPath": "tests/golden/corrective/C0-002/staged/source-snapshot/files/web/protocol/scene-ir.ts", + "sha256": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "bytes": 86260 + } + ] +} diff --git a/tests/golden/corrective/C0-002/staged/task-cards/M16-GAP-00274.md b/tests/golden/corrective/C0-002/staged/task-cards/M16-GAP-00274.md new file mode 100644 index 00000000..2f75c8b8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/task-cards/M16-GAP-00274.md @@ -0,0 +1,37 @@ +# M16-GAP-00274: operator:asset.catalogs_save LOCAL_EXACT slice + +- task: M16-GAP-00274 +- parent: M16-GAP-00273 +- status: in_progress +- gap: operator:asset.catalogs_save +- ownerFamily: OPERATOR +- targetImplementationClass: LOCAL_EXACT + +## 目标 + +Make the same minimal fixture produce observable operator:asset.catalogs_save data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers. + +## 输入与范围 + +- Fixture: `tests/files/web/generated/M16-GAP-00274-operator-asset.catalogs_save.blend` +- Generator: `tools/web/generated/M16-GAP-00274.py` +- Production: `blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp` +- Checker: `tools/web/check-generated-gap.mjs` +- Do: field read, desktop/WASM comparison, save/reopen, structured report. +- Do not: other gaps, Firefox/WebKit, or full editor behavior. + +## 验收 + +build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00274.py -- tests/files/web/generated/M16-GAP-00274-operator-asset.catalogs_save.blend +npm --prefix web run test:generated-gap -- --task M16-GAP-00274 +node tools/web/check-generated-gap.mjs --task M16-GAP-00274 + +Malformed/unsupported, cancellation, duplicate, over-budget, or hash-drift cases must keep in_progress; they must not change Main revision or advance nextTask. + +## 交付与回滚 + +- Reports: `tests/golden/M16-GAP-00274/` +- Status: `docs/status/M16-GAP-00274.md` +- Manifest: `tests/golden/M16-GAP-00274/manifest.json` +- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00274 --write` +- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence. diff --git a/tests/golden/corrective/C0-002/staged/task-index/task-catalog.jsonl b/tests/golden/corrective/C0-002/staged/task-index/task-catalog.jsonl new file mode 100644 index 00000000..28824961 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/task-index/task-catalog.jsonl @@ -0,0 +1,6900 @@ +{"id":"M16-GAP-00001","gapId":"datablock:Action","ownerFamily":"RNA_DATABLOCK","sourceTask":"M15-01A","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00002","gapId":"datablock:Armature","ownerFamily":"RNA_DATABLOCK","sourceTask":"M15-01A","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00003","gapId":"datablock:Brush","ownerFamily":"RNA_DATABLOCK","sourceTask":"M15-01A","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00004","gapId":"datablock:Camera","ownerFamily":"RNA_DATABLOCK","sourceTask":"M15-01A","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00005","gapId":"datablock:Collection","ownerFamily":"RNA_DATABLOCK","sourceTask":"M15-01A","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00006","gapId":"datablock:Curve","ownerFamily":"RNA_DATABLOCK","sourceTask":"M15-01A","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00007","gapId":"datablock:Curves","ownerFamily":"RNA_DATABLOCK","sourceTask":"M15-01A","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00008","gapId":"datablock:FreestyleLineStyle","ownerFamily":"RNA_DATABLOCK","sourceTask":"M15-01A","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00009","gapId":"datablock:GreasePencil","ownerFamily":"RNA_DATABLOCK","sourceTask":"M15-01A","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00010","gapId":"datablock:Lattice","ownerFamily":"RNA_DATABLOCK","sourceTask":"M15-01A","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00011","gapId":"datablock:Library","ownerFamily":"RNA_DATABLOCK","sourceTask":"M15-01A","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00012","gapId":"datablock:Light","ownerFamily":"RNA_DATABLOCK","sourceTask":"M15-01A","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00013","gapId":"datablock:Material","ownerFamily":"RNA_DATABLOCK","sourceTask":"M15-01A","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00014","gapId":"datablock:Mesh","ownerFamily":"RNA_DATABLOCK","sourceTask":"M15-01A","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00015","gapId":"datablock:MetaBall","ownerFamily":"RNA_DATABLOCK","sourceTask":"M15-01A","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00016","gapId":"datablock:NodeTree","ownerFamily":"RNA_DATABLOCK","sourceTask":"M15-01A","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00017","gapId":"datablock:Object","ownerFamily":"RNA_DATABLOCK","sourceTask":"M15-01A","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00018","gapId":"datablock:ParticleSettings","ownerFamily":"RNA_DATABLOCK","sourceTask":"M15-01A","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00019","gapId":"datablock:PointCloud","ownerFamily":"RNA_DATABLOCK","sourceTask":"M15-01A","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00020","gapId":"datablock:Scene","ownerFamily":"RNA_DATABLOCK","sourceTask":"M15-01A","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00021","gapId":"datablock:Screen","ownerFamily":"RNA_DATABLOCK","sourceTask":"M15-01A","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00022","gapId":"datablock:Sound","ownerFamily":"RNA_DATABLOCK","sourceTask":"M15-01A","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00023","gapId":"datablock:Speaker","ownerFamily":"RNA_DATABLOCK","sourceTask":"M15-01A","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00024","gapId":"datablock:Text","ownerFamily":"RNA_DATABLOCK","sourceTask":"M15-01A","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00025","gapId":"datablock:Texture","ownerFamily":"RNA_DATABLOCK","sourceTask":"M15-01A","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00026","gapId":"datablock:Volume","ownerFamily":"RNA_DATABLOCK","sourceTask":"M15-01A","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00027","gapId":"datablock:WindowManager","ownerFamily":"RNA_DATABLOCK","sourceTask":"M15-01A","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00028","gapId":"datablock:WorkSpace","ownerFamily":"RNA_DATABLOCK","sourceTask":"M15-01A","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00029","gapId":"datablock:World","ownerFamily":"RNA_DATABLOCK","sourceTask":"M15-01A","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00030","gapId":"modifier:ARMATURE","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00031","gapId":"modifier:ARRAY","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00032","gapId":"modifier:BEVEL","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00033","gapId":"modifier:BOOLEAN","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00034","gapId":"modifier:BUILD","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00035","gapId":"modifier:CAST","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00036","gapId":"modifier:CLOTH","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00037","gapId":"modifier:COLLISION","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00038","gapId":"modifier:CORRECTIVE_SMOOTH","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00039","gapId":"modifier:CURVE","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00040","gapId":"modifier:DATA_TRANSFER","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00041","gapId":"modifier:DECIMATE","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00042","gapId":"modifier:DISPLACE","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00043","gapId":"modifier:DYNAMIC_PAINT","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00044","gapId":"modifier:EDGE_SPLIT","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00045","gapId":"modifier:EXPLODE","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00046","gapId":"modifier:FLUID","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00047","gapId":"modifier:GREASE_PENCIL_ARMATURE","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00048","gapId":"modifier:GREASE_PENCIL_ARRAY","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00049","gapId":"modifier:GREASE_PENCIL_BUILD","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00050","gapId":"modifier:GREASE_PENCIL_COLOR","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00051","gapId":"modifier:GREASE_PENCIL_DASH","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00052","gapId":"modifier:GREASE_PENCIL_ENVELOPE","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00053","gapId":"modifier:GREASE_PENCIL_HOOK","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00054","gapId":"modifier:GREASE_PENCIL_LATTICE","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00055","gapId":"modifier:GREASE_PENCIL_LENGTH","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00056","gapId":"modifier:GREASE_PENCIL_MIRROR","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00057","gapId":"modifier:GREASE_PENCIL_MULTIPLY","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00058","gapId":"modifier:GREASE_PENCIL_NOISE","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00059","gapId":"modifier:GREASE_PENCIL_OFFSET","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00060","gapId":"modifier:GREASE_PENCIL_OPACITY","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00061","gapId":"modifier:GREASE_PENCIL_OUTLINE","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00062","gapId":"modifier:GREASE_PENCIL_SHRINKWRAP","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00063","gapId":"modifier:GREASE_PENCIL_SIMPLIFY","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00064","gapId":"modifier:GREASE_PENCIL_SMOOTH","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00065","gapId":"modifier:GREASE_PENCIL_SUBDIV","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00066","gapId":"modifier:GREASE_PENCIL_TEXTURE","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00067","gapId":"modifier:GREASE_PENCIL_THICKNESS","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00068","gapId":"modifier:GREASE_PENCIL_TIME","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00069","gapId":"modifier:GREASE_PENCIL_TINT","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00070","gapId":"modifier:GREASE_PENCIL_VERTEX_WEIGHT_ANGLE","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00071","gapId":"modifier:GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00072","gapId":"modifier:HOOK","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00073","gapId":"modifier:LAPLACIANDEFORM","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00074","gapId":"modifier:LAPLACIANSMOOTH","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00075","gapId":"modifier:LATTICE","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00076","gapId":"modifier:LINEART","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00077","gapId":"modifier:MASK","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00078","gapId":"modifier:MESH_CACHE","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00079","gapId":"modifier:MESH_DEFORM","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00080","gapId":"modifier:MESH_SEQUENCE_CACHE","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00081","gapId":"modifier:MESH_TO_VOLUME","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00082","gapId":"modifier:MIRROR","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00083","gapId":"modifier:MULTIRES","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00084","gapId":"modifier:NODES","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00085","gapId":"modifier:NORMAL_EDIT","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00086","gapId":"modifier:OCEAN","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00087","gapId":"modifier:PARTICLE_INSTANCE","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00088","gapId":"modifier:PARTICLE_SYSTEM","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00089","gapId":"modifier:REMESH","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00090","gapId":"modifier:SCREW","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00091","gapId":"modifier:SHRINKWRAP","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00092","gapId":"modifier:SIMPLE_DEFORM","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00093","gapId":"modifier:SKIN","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00094","gapId":"modifier:SMOOTH","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00095","gapId":"modifier:SOFT_BODY","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00096","gapId":"modifier:SOLIDIFY","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00097","gapId":"modifier:SUBSURF","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00098","gapId":"modifier:SURFACE","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00099","gapId":"modifier:SURFACE_DEFORM","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00100","gapId":"modifier:TRIANGULATE","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00101","gapId":"modifier:UV_PROJECT","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00102","gapId":"modifier:UV_WARP","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00103","gapId":"modifier:VERTEX_WEIGHT_EDIT","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00104","gapId":"modifier:VERTEX_WEIGHT_MIX","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00105","gapId":"modifier:VERTEX_WEIGHT_PROXIMITY","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00106","gapId":"modifier:VOLUME_DISPLACE","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00107","gapId":"modifier:VOLUME_TO_MESH","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00108","gapId":"modifier:WARP","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00109","gapId":"modifier:WAVE","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00110","gapId":"modifier:WEIGHTED_NORMAL","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00111","gapId":"modifier:WELD","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00112","gapId":"modifier:WIREFRAME","ownerFamily":"MODIFIER","sourceTask":"M15-01C","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00113","gapId":"operator:action.bake_keys","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00114","gapId":"operator:action.clean","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00115","gapId":"operator:action.clickselect","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00116","gapId":"operator:action.copy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00117","gapId":"operator:action.delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00118","gapId":"operator:action.duplicate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00119","gapId":"operator:action.duplicate_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00120","gapId":"operator:action.easing_type","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00121","gapId":"operator:action.extrapolation_type","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00122","gapId":"operator:action.frame_jump","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00123","gapId":"operator:action.handle_type","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00124","gapId":"operator:action.interpolation_type","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00125","gapId":"operator:action.keyframe_insert","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00126","gapId":"operator:action.keyframe_type","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00127","gapId":"operator:action.markers_make_local","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00128","gapId":"operator:action.mirror","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00129","gapId":"operator:action.new","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00130","gapId":"operator:action.paste","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00131","gapId":"operator:action.previewrange_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00132","gapId":"operator:action.push_down","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00133","gapId":"operator:action.select_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00134","gapId":"operator:action.select_box","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00135","gapId":"operator:action.select_by_type","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00136","gapId":"operator:action.select_circle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00137","gapId":"operator:action.select_column","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00138","gapId":"operator:action.select_lasso","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00139","gapId":"operator:action.select_leftright","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00140","gapId":"operator:action.select_less","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00141","gapId":"operator:action.select_linked","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00142","gapId":"operator:action.select_more","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00143","gapId":"operator:action.snap","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00144","gapId":"operator:action.stash","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00145","gapId":"operator:action.stash_and_create","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00146","gapId":"operator:action.unlink","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00147","gapId":"operator:action.view_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00148","gapId":"operator:action.view_frame","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00149","gapId":"operator:action.view_selected","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00150","gapId":"operator:anim.change_frame","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00151","gapId":"operator:anim.channel_select_keys","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00152","gapId":"operator:anim.channel_view_pick","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00153","gapId":"operator:anim.channels_bake","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00154","gapId":"operator:anim.channels_clean_empty","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00155","gapId":"operator:anim.channels_click","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00156","gapId":"operator:anim.channels_collapse","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00157","gapId":"operator:anim.channels_delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00158","gapId":"operator:anim.channels_editable_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00159","gapId":"operator:anim.channels_expand","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00160","gapId":"operator:anim.channels_fcurves_enable","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00161","gapId":"operator:anim.channels_group","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00162","gapId":"operator:anim.channels_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00163","gapId":"operator:anim.channels_rename","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00164","gapId":"operator:anim.channels_select_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00165","gapId":"operator:anim.channels_select_box","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00166","gapId":"operator:anim.channels_select_filter","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00167","gapId":"operator:anim.channels_setting_disable","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00168","gapId":"operator:anim.channels_setting_enable","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00169","gapId":"operator:anim.channels_setting_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00170","gapId":"operator:anim.channels_ungroup","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00171","gapId":"operator:anim.channels_view_selected","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00172","gapId":"operator:anim.clear_useless_actions","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00173","gapId":"operator:anim.copy_driver_button","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00174","gapId":"operator:anim.driver_button_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00175","gapId":"operator:anim.driver_button_edit","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00176","gapId":"operator:anim.driver_button_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00177","gapId":"operator:anim.end_frame_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00178","gapId":"operator:anim.keyframe_clear_button","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00179","gapId":"operator:anim.keyframe_clear_v3d","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00180","gapId":"operator:anim.keyframe_clear_vse","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00181","gapId":"operator:anim.keyframe_delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00182","gapId":"operator:anim.keyframe_delete_button","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00183","gapId":"operator:anim.keyframe_delete_by_name","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00184","gapId":"operator:anim.keyframe_delete_v3d","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00185","gapId":"operator:anim.keyframe_delete_vse","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00186","gapId":"operator:anim.keyframe_insert","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00187","gapId":"operator:anim.keyframe_insert_button","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00188","gapId":"operator:anim.keyframe_insert_by_name","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00189","gapId":"operator:anim.keyframe_insert_menu","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00190","gapId":"operator:anim.keying_set_active_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00191","gapId":"operator:anim.keying_set_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00192","gapId":"operator:anim.keying_set_export","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00193","gapId":"operator:anim.keying_set_path_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00194","gapId":"operator:anim.keying_set_path_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00195","gapId":"operator:anim.keying_set_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00196","gapId":"operator:anim.keyingset_button_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00197","gapId":"operator:anim.keyingset_button_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00198","gapId":"operator:anim.merge_animation","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00199","gapId":"operator:anim.paste_driver_button","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00200","gapId":"operator:anim.previewrange_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00201","gapId":"operator:anim.previewrange_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00202","gapId":"operator:anim.replace_action","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00203","gapId":"operator:anim.replace_action_new","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00204","gapId":"operator:anim.scene_range_frame","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00205","gapId":"operator:anim.separate_slots","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00206","gapId":"operator:anim.slot_channels_move_to_new_action","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00207","gapId":"operator:anim.slot_new_for_id","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00208","gapId":"operator:anim.slot_unassign_from_constraint","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00209","gapId":"operator:anim.slot_unassign_from_id","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00210","gapId":"operator:anim.slot_unassign_from_nla_strip","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00211","gapId":"operator:anim.start_frame_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00212","gapId":"operator:anim.update_animated_transform_constraints","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00213","gapId":"operator:anim.version_bone_hide_property","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00214","gapId":"operator:anim.view_curve_in_graph_editor","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00215","gapId":"operator:armature.align","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00216","gapId":"operator:armature.assign_to_collection","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00217","gapId":"operator:armature.autoside_names","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00218","gapId":"operator:armature.bone_primitive_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00219","gapId":"operator:armature.calculate_roll","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00220","gapId":"operator:armature.click_extrude","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00221","gapId":"operator:armature.collection_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00222","gapId":"operator:armature.collection_assign","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00223","gapId":"operator:armature.collection_create_and_assign","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00224","gapId":"operator:armature.collection_deselect","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00225","gapId":"operator:armature.collection_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00226","gapId":"operator:armature.collection_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00227","gapId":"operator:armature.collection_remove_unused","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00228","gapId":"operator:armature.collection_select","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00229","gapId":"operator:armature.collection_show_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00230","gapId":"operator:armature.collection_unassign","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00231","gapId":"operator:armature.collection_unassign_named","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00232","gapId":"operator:armature.collection_unsolo_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00233","gapId":"operator:armature.copy_bone_color_to_selected","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00234","gapId":"operator:armature.delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00235","gapId":"operator:armature.dissolve","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00236","gapId":"operator:armature.duplicate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00237","gapId":"operator:armature.duplicate_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00238","gapId":"operator:armature.duplicate_rename","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00239","gapId":"operator:armature.extrude","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00240","gapId":"operator:armature.extrude_forked","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00241","gapId":"operator:armature.extrude_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00242","gapId":"operator:armature.fill","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00243","gapId":"operator:armature.flip_names","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00244","gapId":"operator:armature.hide","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00245","gapId":"operator:armature.move_to_collection","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00246","gapId":"operator:armature.parent_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00247","gapId":"operator:armature.parent_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00248","gapId":"operator:armature.reveal","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00249","gapId":"operator:armature.roll_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00250","gapId":"operator:armature.select_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00251","gapId":"operator:armature.select_hierarchy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00252","gapId":"operator:armature.select_less","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00253","gapId":"operator:armature.select_linked","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00254","gapId":"operator:armature.select_linked_pick","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00255","gapId":"operator:armature.select_mirror","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00256","gapId":"operator:armature.select_more","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00257","gapId":"operator:armature.select_similar","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00258","gapId":"operator:armature.separate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00259","gapId":"operator:armature.shortest_path_pick","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00260","gapId":"operator:armature.split","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00261","gapId":"operator:armature.subdivide","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00262","gapId":"operator:armature.switch_direction","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00263","gapId":"operator:armature.symmetrize","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00264","gapId":"operator:asset.asset_download","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00265","gapId":"operator:asset.assets_download","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00266","gapId":"operator:asset.assign_action","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00267","gapId":"operator:asset.browse_containing_blend_file","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00268","gapId":"operator:asset.bundle_install","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00269","gapId":"operator:asset.catalog_delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00270","gapId":"operator:asset.catalog_new","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00271","gapId":"operator:asset.catalog_redo","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00272","gapId":"operator:asset.catalog_undo","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00273","gapId":"operator:asset.catalog_undo_push","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00274","gapId":"operator:asset.catalogs_save","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"active","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00275","gapId":"operator:asset.clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00276","gapId":"operator:asset.clear_single","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00277","gapId":"operator:asset.library_refresh","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00278","gapId":"operator:asset.library_reload_listing","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00279","gapId":"operator:asset.mark","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00280","gapId":"operator:asset.mark_single","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00281","gapId":"operator:asset.open_containing_blend_file","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00282","gapId":"operator:asset.screenshot_preview","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00283","gapId":"operator:asset.tag_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00284","gapId":"operator:asset.tag_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00285","gapId":"operator:boid.rule_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00286","gapId":"operator:boid.rule_del","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00287","gapId":"operator:boid.rule_move_down","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00288","gapId":"operator:boid.rule_move_up","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00289","gapId":"operator:boid.state_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00290","gapId":"operator:boid.state_del","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00291","gapId":"operator:boid.state_move_down","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00292","gapId":"operator:boid.state_move_up","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00293","gapId":"operator:brush.asset_activate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00294","gapId":"operator:brush.asset_delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00295","gapId":"operator:brush.asset_edit_metadata","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00296","gapId":"operator:brush.asset_load_preview","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00297","gapId":"operator:brush.asset_revert","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00298","gapId":"operator:brush.asset_save","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00299","gapId":"operator:brush.asset_save_as","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00300","gapId":"operator:brush.scale_size","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00301","gapId":"operator:brush.stencil_control","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00302","gapId":"operator:brush.stencil_fit_image_aspect","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00303","gapId":"operator:brush.stencil_reset_transform","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00304","gapId":"operator:buttons.clear_filter","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00305","gapId":"operator:buttons.context_menu","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00306","gapId":"operator:buttons.directory_browse","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00307","gapId":"operator:buttons.file_browse","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00308","gapId":"operator:buttons.start_filter","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00309","gapId":"operator:buttons.toggle_pin","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00310","gapId":"operator:cachefile.layer_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00311","gapId":"operator:cachefile.layer_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00312","gapId":"operator:cachefile.layer_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00313","gapId":"operator:cachefile.open","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00314","gapId":"operator:cachefile.reload","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00315","gapId":"operator:camera.preset_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00316","gapId":"operator:camera.safe_areas_preset_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00317","gapId":"operator:clip.add_marker","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00318","gapId":"operator:clip.add_marker_at_click","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00319","gapId":"operator:clip.add_marker_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00320","gapId":"operator:clip.add_marker_slide","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00321","gapId":"operator:clip.apply_solution_scale","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00322","gapId":"operator:clip.average_tracks","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00323","gapId":"operator:clip.bundles_to_mesh","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00324","gapId":"operator:clip.camera_preset_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00325","gapId":"operator:clip.change_frame","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00326","gapId":"operator:clip.clean_tracks","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00327","gapId":"operator:clip.clear_solution","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00328","gapId":"operator:clip.clear_track_path","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00329","gapId":"operator:clip.constraint_to_fcurve","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00330","gapId":"operator:clip.copy_tracks","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00331","gapId":"operator:clip.create_plane_track","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00332","gapId":"operator:clip.cursor_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00333","gapId":"operator:clip.delete_marker","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00334","gapId":"operator:clip.delete_proxy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00335","gapId":"operator:clip.delete_track","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00336","gapId":"operator:clip.detect_features","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00337","gapId":"operator:clip.disable_markers","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00338","gapId":"operator:clip.dopesheet_select_channel","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00339","gapId":"operator:clip.dopesheet_view_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00340","gapId":"operator:clip.filter_tracks","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00341","gapId":"operator:clip.frame_jump","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00342","gapId":"operator:clip.graph_center_current_frame","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00343","gapId":"operator:clip.graph_delete_curve","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00344","gapId":"operator:clip.graph_delete_knot","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00345","gapId":"operator:clip.graph_disable_markers","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00346","gapId":"operator:clip.graph_select","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00347","gapId":"operator:clip.graph_select_all_markers","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00348","gapId":"operator:clip.graph_select_box","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00349","gapId":"operator:clip.graph_view_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00350","gapId":"operator:clip.hide_tracks","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00351","gapId":"operator:clip.hide_tracks_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00352","gapId":"operator:clip.join_tracks","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00353","gapId":"operator:clip.keyframe_delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00354","gapId":"operator:clip.keyframe_insert","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00355","gapId":"operator:clip.lock_selection_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00356","gapId":"operator:clip.lock_tracks","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00357","gapId":"operator:clip.mode_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00358","gapId":"operator:clip.new_image_from_plane_marker","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00359","gapId":"operator:clip.open","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00360","gapId":"operator:clip.paste_tracks","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00361","gapId":"operator:clip.prefetch","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00362","gapId":"operator:clip.rebuild_proxy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00363","gapId":"operator:clip.refine_markers","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00364","gapId":"operator:clip.reload","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00365","gapId":"operator:clip.select","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00366","gapId":"operator:clip.select_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00367","gapId":"operator:clip.select_box","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00368","gapId":"operator:clip.select_circle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00369","gapId":"operator:clip.select_grouped","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00370","gapId":"operator:clip.select_lasso","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00371","gapId":"operator:clip.set_active_clip","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00372","gapId":"operator:clip.set_axis","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00373","gapId":"operator:clip.set_origin","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00374","gapId":"operator:clip.set_plane","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00375","gapId":"operator:clip.set_scale","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00376","gapId":"operator:clip.set_scene_frames","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00377","gapId":"operator:clip.set_solution_scale","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00378","gapId":"operator:clip.set_solver_keyframe","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00379","gapId":"operator:clip.set_viewport_background","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00380","gapId":"operator:clip.setup_tracking_scene","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00381","gapId":"operator:clip.slide_marker","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00382","gapId":"operator:clip.slide_plane_marker","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00383","gapId":"operator:clip.solve_camera","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00384","gapId":"operator:clip.stabilize_2d_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00385","gapId":"operator:clip.stabilize_2d_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00386","gapId":"operator:clip.stabilize_2d_rotation_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00387","gapId":"operator:clip.stabilize_2d_rotation_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00388","gapId":"operator:clip.stabilize_2d_rotation_select","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00389","gapId":"operator:clip.stabilize_2d_select","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00390","gapId":"operator:clip.track_color_preset_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00391","gapId":"operator:clip.track_copy_color","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00392","gapId":"operator:clip.track_markers","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00393","gapId":"operator:clip.track_settings_as_default","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00394","gapId":"operator:clip.track_settings_to_track","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00395","gapId":"operator:clip.track_to_empty","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00396","gapId":"operator:clip.tracking_object_new","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00397","gapId":"operator:clip.tracking_object_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00398","gapId":"operator:clip.tracking_settings_preset_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00399","gapId":"operator:clip.update_image_from_plane_marker","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00400","gapId":"operator:clip.view_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00401","gapId":"operator:clip.view_center_cursor","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00402","gapId":"operator:clip.view_ndof","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00403","gapId":"operator:clip.view_pan","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00404","gapId":"operator:clip.view_selected","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00405","gapId":"operator:clip.view_zoom","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00406","gapId":"operator:clip.view_zoom_in","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00407","gapId":"operator:clip.view_zoom_out","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00408","gapId":"operator:clip.view_zoom_ratio","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00409","gapId":"operator:cloth.preset_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00410","gapId":"operator:collection.create","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00411","gapId":"operator:collection.export_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00412","gapId":"operator:collection.exporter_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00413","gapId":"operator:collection.exporter_export","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00414","gapId":"operator:collection.exporter_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00415","gapId":"operator:collection.exporter_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00416","gapId":"operator:collection.importer_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00417","gapId":"operator:collection.importer_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00418","gapId":"operator:collection.objects_add_active","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00419","gapId":"operator:collection.objects_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00420","gapId":"operator:collection.objects_remove_active","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00421","gapId":"operator:collection.objects_remove_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00422","gapId":"operator:console.autocomplete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00423","gapId":"operator:console.banner","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00424","gapId":"operator:console.clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00425","gapId":"operator:console.clear_line","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00426","gapId":"operator:console.copy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00427","gapId":"operator:console.copy_as_script","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00428","gapId":"operator:console.delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00429","gapId":"operator:console.execute","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00430","gapId":"operator:console.history_append","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00431","gapId":"operator:console.history_cycle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00432","gapId":"operator:console.indent","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00433","gapId":"operator:console.indent_or_autocomplete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00434","gapId":"operator:console.insert","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00435","gapId":"operator:console.language","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00436","gapId":"operator:console.move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00437","gapId":"operator:console.paste","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00438","gapId":"operator:console.scrollback_append","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00439","gapId":"operator:console.select_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00440","gapId":"operator:console.select_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00441","gapId":"operator:console.select_word","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00442","gapId":"operator:console.unindent","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00443","gapId":"operator:constraint.add_target","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00444","gapId":"operator:constraint.apply","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00445","gapId":"operator:constraint.childof_clear_inverse","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00446","gapId":"operator:constraint.childof_set_inverse","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00447","gapId":"operator:constraint.copy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00448","gapId":"operator:constraint.copy_to_selected","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00449","gapId":"operator:constraint.delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00450","gapId":"operator:constraint.disable_keep_transform","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00451","gapId":"operator:constraint.followpath_path_animate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00452","gapId":"operator:constraint.limitdistance_reset","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00453","gapId":"operator:constraint.move_down","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00454","gapId":"operator:constraint.move_to_index","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00455","gapId":"operator:constraint.move_up","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00456","gapId":"operator:constraint.normalize_target_weights","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00457","gapId":"operator:constraint.objectsolver_clear_inverse","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00458","gapId":"operator:constraint.objectsolver_set_inverse","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00459","gapId":"operator:constraint.remove_target","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00460","gapId":"operator:constraint.stretchto_reset","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00461","gapId":"operator:curve.cyclic_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00462","gapId":"operator:curve.de_select_first","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00463","gapId":"operator:curve.de_select_last","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00464","gapId":"operator:curve.decimate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00465","gapId":"operator:curve.delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00466","gapId":"operator:curve.dissolve_verts","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00467","gapId":"operator:curve.draw","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00468","gapId":"operator:curve.duplicate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00469","gapId":"operator:curve.duplicate_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00470","gapId":"operator:curve.extrude","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00471","gapId":"operator:curve.extrude_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00472","gapId":"operator:curve.handle_type_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00473","gapId":"operator:curve.hide","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00474","gapId":"operator:curve.make_segment","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00475","gapId":"operator:curve.match_texture_space","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00476","gapId":"operator:curve.normals_make_consistent","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00477","gapId":"operator:curve.pen","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00478","gapId":"operator:curve.primitive_bezier_circle_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00479","gapId":"operator:curve.primitive_bezier_curve_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00480","gapId":"operator:curve.primitive_nurbs_circle_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00481","gapId":"operator:curve.primitive_nurbs_curve_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00482","gapId":"operator:curve.primitive_nurbs_path_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00483","gapId":"operator:curve.radius_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00484","gapId":"operator:curve.reveal","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00485","gapId":"operator:curve.select_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00486","gapId":"operator:curve.select_less","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00487","gapId":"operator:curve.select_linked","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00488","gapId":"operator:curve.select_linked_pick","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00489","gapId":"operator:curve.select_more","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00490","gapId":"operator:curve.select_next","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00491","gapId":"operator:curve.select_nth","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00492","gapId":"operator:curve.select_previous","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00493","gapId":"operator:curve.select_random","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00494","gapId":"operator:curve.select_row","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00495","gapId":"operator:curve.select_similar","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00496","gapId":"operator:curve.separate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00497","gapId":"operator:curve.shade_flat","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00498","gapId":"operator:curve.shade_smooth","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00499","gapId":"operator:curve.shortest_path_pick","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00500","gapId":"operator:curve.smooth","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00501","gapId":"operator:curve.smooth_radius","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00502","gapId":"operator:curve.smooth_tilt","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00503","gapId":"operator:curve.smooth_weight","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00504","gapId":"operator:curve.spin","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00505","gapId":"operator:curve.spline_type_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00506","gapId":"operator:curve.spline_weight_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00507","gapId":"operator:curve.split","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00508","gapId":"operator:curve.subdivide","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00509","gapId":"operator:curve.switch_direction","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00510","gapId":"operator:curve.tilt_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00511","gapId":"operator:curve.vertex_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00512","gapId":"operator:curves.add_bezier","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00513","gapId":"operator:curves.add_circle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00514","gapId":"operator:curves.attribute_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00515","gapId":"operator:curves.convert_from_particle_system","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00516","gapId":"operator:curves.convert_to_particle_system","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00517","gapId":"operator:curves.curve_type_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00518","gapId":"operator:curves.cyclic_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00519","gapId":"operator:curves.delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00520","gapId":"operator:curves.draw","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00521","gapId":"operator:curves.duplicate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00522","gapId":"operator:curves.duplicate_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00523","gapId":"operator:curves.extrude","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00524","gapId":"operator:curves.extrude_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00525","gapId":"operator:curves.handle_type_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00526","gapId":"operator:curves.pen","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00527","gapId":"operator:curves.sculptmode_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00528","gapId":"operator:curves.select_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00529","gapId":"operator:curves.select_ends","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00530","gapId":"operator:curves.select_less","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00531","gapId":"operator:curves.select_linked","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00532","gapId":"operator:curves.select_linked_pick","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00533","gapId":"operator:curves.select_more","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00534","gapId":"operator:curves.select_random","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00535","gapId":"operator:curves.separate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00536","gapId":"operator:curves.set_selection_domain","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00537","gapId":"operator:curves.snap_curves_to_surface","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00538","gapId":"operator:curves.split","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00539","gapId":"operator:curves.subdivide","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00540","gapId":"operator:curves.surface_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00541","gapId":"operator:curves.switch_direction","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00542","gapId":"operator:curves.tilt_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00543","gapId":"operator:cycles.denoise_animation","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00544","gapId":"operator:cycles.merge_images","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00545","gapId":"operator:cycles.use_shading_nodes","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00546","gapId":"operator:dpaint.bake","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00547","gapId":"operator:dpaint.output_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00548","gapId":"operator:dpaint.surface_slot_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00549","gapId":"operator:dpaint.surface_slot_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00550","gapId":"operator:dpaint.type_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00551","gapId":"operator:ed.flush_edits","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00552","gapId":"operator:ed.lib_id_fake_user_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00553","gapId":"operator:ed.lib_id_generate_preview","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00554","gapId":"operator:ed.lib_id_generate_preview_from_object","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00555","gapId":"operator:ed.lib_id_load_custom_preview","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00556","gapId":"operator:ed.lib_id_override_editable_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00557","gapId":"operator:ed.lib_id_remove_preview","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00558","gapId":"operator:ed.lib_id_unlink","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00559","gapId":"operator:ed.redo","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00560","gapId":"operator:ed.undo","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00561","gapId":"operator:ed.undo_history","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00562","gapId":"operator:ed.undo_push","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00563","gapId":"operator:ed.undo_redo","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00564","gapId":"operator:export_anim.bvh","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00565","gapId":"operator:export_scene.fbx","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00566","gapId":"operator:export_scene.gltf","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00567","gapId":"operator:extensions.package_disable","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00568","gapId":"operator:extensions.package_install","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00569","gapId":"operator:extensions.package_install_files","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00570","gapId":"operator:extensions.package_install_marked","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00571","gapId":"operator:extensions.package_mark_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00572","gapId":"operator:extensions.package_mark_clear_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00573","gapId":"operator:extensions.package_mark_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00574","gapId":"operator:extensions.package_mark_set_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00575","gapId":"operator:extensions.package_obsolete_marked","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00576","gapId":"operator:extensions.package_show_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00577","gapId":"operator:extensions.package_show_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00578","gapId":"operator:extensions.package_show_settings","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00579","gapId":"operator:extensions.package_theme_disable","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00580","gapId":"operator:extensions.package_theme_enable","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00581","gapId":"operator:extensions.package_uninstall","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00582","gapId":"operator:extensions.package_uninstall_marked","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00583","gapId":"operator:extensions.package_uninstall_system","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00584","gapId":"operator:extensions.package_upgrade_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00585","gapId":"operator:extensions.repo_enable_from_drop","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00586","gapId":"operator:extensions.repo_lock_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00587","gapId":"operator:extensions.repo_refresh_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00588","gapId":"operator:extensions.repo_sync","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00589","gapId":"operator:extensions.repo_sync_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00590","gapId":"operator:extensions.repo_unlock","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00591","gapId":"operator:extensions.repo_unlock_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00592","gapId":"operator:extensions.status_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00593","gapId":"operator:extensions.status_clear_errors","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00594","gapId":"operator:extensions.userpref_allow_online","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00595","gapId":"operator:extensions.userpref_allow_online_popup","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00596","gapId":"operator:extensions.userpref_show_for_update","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00597","gapId":"operator:extensions.userpref_show_online","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00598","gapId":"operator:extensions.userpref_tags_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00599","gapId":"operator:file.autopack_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00600","gapId":"operator:file.bookmark_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00601","gapId":"operator:file.bookmark_cleanup","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00602","gapId":"operator:file.bookmark_delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00603","gapId":"operator:file.bookmark_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00604","gapId":"operator:file.cancel","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00605","gapId":"operator:file.delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00606","gapId":"operator:file.directory_new","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00607","gapId":"operator:file.edit_directory_path","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00608","gapId":"operator:file.execute","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00609","gapId":"operator:file.external_operation","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00610","gapId":"operator:file.filenum","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00611","gapId":"operator:file.filepath_drop","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00612","gapId":"operator:file.find_missing_files","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00613","gapId":"operator:file.hidedot","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00614","gapId":"operator:file.highlight","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00615","gapId":"operator:file.make_paths_absolute","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00616","gapId":"operator:file.make_paths_relative","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00617","gapId":"operator:file.mouse_execute","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00618","gapId":"operator:file.next","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00619","gapId":"operator:file.pack_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00620","gapId":"operator:file.pack_libraries","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00621","gapId":"operator:file.parent","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00622","gapId":"operator:file.previous","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00623","gapId":"operator:file.refresh","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00624","gapId":"operator:file.rename","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00625","gapId":"operator:file.report_missing_files","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00626","gapId":"operator:file.reset_recent","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00627","gapId":"operator:file.select","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00628","gapId":"operator:file.select_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00629","gapId":"operator:file.select_bookmark","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00630","gapId":"operator:file.select_box","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00631","gapId":"operator:file.select_walk","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00632","gapId":"operator:file.smoothscroll","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00633","gapId":"operator:file.sort_column_ui_context","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00634","gapId":"operator:file.start_filter","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00635","gapId":"operator:file.unpack_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00636","gapId":"operator:file.unpack_item","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00637","gapId":"operator:file.unpack_libraries","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00638","gapId":"operator:file.view_selected","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00639","gapId":"operator:fluid.bake_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00640","gapId":"operator:fluid.bake_data","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00641","gapId":"operator:fluid.bake_guides","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00642","gapId":"operator:fluid.bake_mesh","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00643","gapId":"operator:fluid.bake_noise","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00644","gapId":"operator:fluid.bake_particles","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00645","gapId":"operator:fluid.free_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00646","gapId":"operator:fluid.free_data","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00647","gapId":"operator:fluid.free_guides","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00648","gapId":"operator:fluid.free_mesh","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00649","gapId":"operator:fluid.free_noise","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00650","gapId":"operator:fluid.free_particles","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00651","gapId":"operator:fluid.pause_bake","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00652","gapId":"operator:fluid.preset_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00653","gapId":"operator:font.case_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00654","gapId":"operator:font.case_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00655","gapId":"operator:font.change_character","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00656","gapId":"operator:font.change_spacing","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00657","gapId":"operator:font.delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00658","gapId":"operator:font.line_break","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00659","gapId":"operator:font.move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00660","gapId":"operator:font.move_select","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00661","gapId":"operator:font.open","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00662","gapId":"operator:font.select_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00663","gapId":"operator:font.select_word","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00664","gapId":"operator:font.selection_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00665","gapId":"operator:font.style_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00666","gapId":"operator:font.style_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00667","gapId":"operator:font.text_copy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00668","gapId":"operator:font.text_cut","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00669","gapId":"operator:font.text_insert","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00670","gapId":"operator:font.text_insert_unicode","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00671","gapId":"operator:font.text_paste","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00672","gapId":"operator:font.text_paste_from_file","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00673","gapId":"operator:font.textbox_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00674","gapId":"operator:font.textbox_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00675","gapId":"operator:font.unlink","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00676","gapId":"operator:geometry.attribute_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00677","gapId":"operator:geometry.attribute_convert","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00678","gapId":"operator:geometry.attribute_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00679","gapId":"operator:geometry.color_attribute_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00680","gapId":"operator:geometry.color_attribute_convert","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00681","gapId":"operator:geometry.color_attribute_duplicate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00682","gapId":"operator:geometry.color_attribute_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00683","gapId":"operator:geometry.color_attribute_render_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00684","gapId":"operator:geometry.geometry_randomization","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00685","gapId":"operator:gizmogroup.gizmo_select","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00686","gapId":"operator:gizmogroup.gizmo_tweak","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00687","gapId":"operator:gpencil.annotate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00688","gapId":"operator:gpencil.annotation_active_frame_delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00689","gapId":"operator:gpencil.annotation_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00690","gapId":"operator:gpencil.data_unlink","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00691","gapId":"operator:gpencil.layer_annotation_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00692","gapId":"operator:gpencil.layer_annotation_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00693","gapId":"operator:gpencil.layer_annotation_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00694","gapId":"operator:graph.bake_keys","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00695","gapId":"operator:graph.blend_offset","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00696","gapId":"operator:graph.blend_to_default","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00697","gapId":"operator:graph.blend_to_ease","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00698","gapId":"operator:graph.blend_to_neighbor","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00699","gapId":"operator:graph.breakdown","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00700","gapId":"operator:graph.butterworth_smooth","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00701","gapId":"operator:graph.clean","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00702","gapId":"operator:graph.click_insert","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00703","gapId":"operator:graph.clickselect","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00704","gapId":"operator:graph.copy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00705","gapId":"operator:graph.cursor_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00706","gapId":"operator:graph.decimate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00707","gapId":"operator:graph.delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00708","gapId":"operator:graph.driver_delete_invalid","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00709","gapId":"operator:graph.driver_variables_copy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00710","gapId":"operator:graph.driver_variables_paste","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00711","gapId":"operator:graph.duplicate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00712","gapId":"operator:graph.duplicate_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00713","gapId":"operator:graph.ease","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00714","gapId":"operator:graph.easing_type","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00715","gapId":"operator:graph.equalize_handles","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00716","gapId":"operator:graph.euler_filter","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00717","gapId":"operator:graph.extrapolation_type","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00718","gapId":"operator:graph.fmodifier_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00719","gapId":"operator:graph.fmodifier_copy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00720","gapId":"operator:graph.fmodifier_delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00721","gapId":"operator:graph.fmodifier_paste","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00722","gapId":"operator:graph.frame_jump","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00723","gapId":"operator:graph.gaussian_smooth","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00724","gapId":"operator:graph.ghost_curves_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00725","gapId":"operator:graph.ghost_curves_create","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00726","gapId":"operator:graph.handle_type","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00727","gapId":"operator:graph.hide","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00728","gapId":"operator:graph.interpolation_type","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00729","gapId":"operator:graph.keyframe_insert","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00730","gapId":"operator:graph.keyframe_jump","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00731","gapId":"operator:graph.keys_to_samples","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00732","gapId":"operator:graph.local_view","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00733","gapId":"operator:graph.match_slope","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00734","gapId":"operator:graph.mirror","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00735","gapId":"operator:graph.paste","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00736","gapId":"operator:graph.previewrange_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00737","gapId":"operator:graph.push_pull","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00738","gapId":"operator:graph.reveal","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00739","gapId":"operator:graph.samples_to_keys","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00740","gapId":"operator:graph.scale_average","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00741","gapId":"operator:graph.scale_from_neighbor","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00742","gapId":"operator:graph.select_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00743","gapId":"operator:graph.select_box","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00744","gapId":"operator:graph.select_circle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00745","gapId":"operator:graph.select_column","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00746","gapId":"operator:graph.select_key_handles","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00747","gapId":"operator:graph.select_lasso","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00748","gapId":"operator:graph.select_leftright","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00749","gapId":"operator:graph.select_less","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00750","gapId":"operator:graph.select_linked","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00751","gapId":"operator:graph.select_more","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00752","gapId":"operator:graph.shear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00753","gapId":"operator:graph.smooth","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00754","gapId":"operator:graph.snap","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00755","gapId":"operator:graph.snap_cursor_value","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00756","gapId":"operator:graph.sound_to_samples","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00757","gapId":"operator:graph.time_offset","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00758","gapId":"operator:graph.view_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00759","gapId":"operator:graph.view_frame","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00760","gapId":"operator:graph.view_selected","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00761","gapId":"operator:grease_pencil.active_frame_delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00762","gapId":"operator:grease_pencil.bake_grease_pencil_animation","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00763","gapId":"operator:grease_pencil.brush_stroke","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00764","gapId":"operator:grease_pencil.caps_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00765","gapId":"operator:grease_pencil.clean_loose","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00766","gapId":"operator:grease_pencil.convert_curve_type","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00767","gapId":"operator:grease_pencil.copy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00768","gapId":"operator:grease_pencil.cyclical_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00769","gapId":"operator:grease_pencil.delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00770","gapId":"operator:grease_pencil.delete_breakdown","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00771","gapId":"operator:grease_pencil.delete_frame","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00772","gapId":"operator:grease_pencil.dissolve","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00773","gapId":"operator:grease_pencil.duplicate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00774","gapId":"operator:grease_pencil.duplicate_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00775","gapId":"operator:grease_pencil.erase_box","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00776","gapId":"operator:grease_pencil.erase_lasso","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00777","gapId":"operator:grease_pencil.extrude","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00778","gapId":"operator:grease_pencil.extrude_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00779","gapId":"operator:grease_pencil.fill","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00780","gapId":"operator:grease_pencil.frame_clean_duplicate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00781","gapId":"operator:grease_pencil.frame_duplicate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00782","gapId":"operator:grease_pencil.insert_blank_frame","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00783","gapId":"operator:grease_pencil.interpolate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00784","gapId":"operator:grease_pencil.interpolate_sequence","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00785","gapId":"operator:grease_pencil.join_fills","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00786","gapId":"operator:grease_pencil.join_selection","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00787","gapId":"operator:grease_pencil.layer_active","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00788","gapId":"operator:grease_pencil.layer_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00789","gapId":"operator:grease_pencil.layer_duplicate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00790","gapId":"operator:grease_pencil.layer_duplicate_object","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00791","gapId":"operator:grease_pencil.layer_group_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00792","gapId":"operator:grease_pencil.layer_group_color_tag","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00793","gapId":"operator:grease_pencil.layer_group_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00794","gapId":"operator:grease_pencil.layer_hide","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00795","gapId":"operator:grease_pencil.layer_isolate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00796","gapId":"operator:grease_pencil.layer_lock_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00797","gapId":"operator:grease_pencil.layer_mask_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00798","gapId":"operator:grease_pencil.layer_mask_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00799","gapId":"operator:grease_pencil.layer_mask_reorder","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00800","gapId":"operator:grease_pencil.layer_merge","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00801","gapId":"operator:grease_pencil.layer_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00802","gapId":"operator:grease_pencil.layer_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00803","gapId":"operator:grease_pencil.layer_reveal","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00804","gapId":"operator:grease_pencil.material_copy_to_object","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00805","gapId":"operator:grease_pencil.material_hide","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00806","gapId":"operator:grease_pencil.material_isolate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00807","gapId":"operator:grease_pencil.material_lock_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00808","gapId":"operator:grease_pencil.material_lock_unselected","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00809","gapId":"operator:grease_pencil.material_lock_unused","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00810","gapId":"operator:grease_pencil.material_reveal","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00811","gapId":"operator:grease_pencil.material_select","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00812","gapId":"operator:grease_pencil.material_unlock_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00813","gapId":"operator:grease_pencil.move_to_layer","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00814","gapId":"operator:grease_pencil.outline","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00815","gapId":"operator:grease_pencil.paintmode_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00816","gapId":"operator:grease_pencil.paste","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00817","gapId":"operator:grease_pencil.pen","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00818","gapId":"operator:grease_pencil.primitive_arc","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00819","gapId":"operator:grease_pencil.primitive_box","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00820","gapId":"operator:grease_pencil.primitive_circle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00821","gapId":"operator:grease_pencil.primitive_curve","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00822","gapId":"operator:grease_pencil.primitive_line","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00823","gapId":"operator:grease_pencil.primitive_polyline","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00824","gapId":"operator:grease_pencil.relative_layer_mask_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00825","gapId":"operator:grease_pencil.remove_fill_guides","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00826","gapId":"operator:grease_pencil.reorder","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00827","gapId":"operator:grease_pencil.reproject","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00828","gapId":"operator:grease_pencil.reset_uvs","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00829","gapId":"operator:grease_pencil.sculpt_paint","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00830","gapId":"operator:grease_pencil.sculptmode_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00831","gapId":"operator:grease_pencil.select_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00832","gapId":"operator:grease_pencil.select_alternate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00833","gapId":"operator:grease_pencil.select_by_stroke_type","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00834","gapId":"operator:grease_pencil.select_ends","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00835","gapId":"operator:grease_pencil.select_fill","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00836","gapId":"operator:grease_pencil.select_less","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00837","gapId":"operator:grease_pencil.select_linked","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00838","gapId":"operator:grease_pencil.select_more","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00839","gapId":"operator:grease_pencil.select_random","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00840","gapId":"operator:grease_pencil.select_similar","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00841","gapId":"operator:grease_pencil.separate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00842","gapId":"operator:grease_pencil.separate_fills","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00843","gapId":"operator:grease_pencil.set_active_material","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00844","gapId":"operator:grease_pencil.set_corner_type","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00845","gapId":"operator:grease_pencil.set_curve_resolution","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00846","gapId":"operator:grease_pencil.set_curve_type","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00847","gapId":"operator:grease_pencil.set_handle_type","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00848","gapId":"operator:grease_pencil.set_material","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00849","gapId":"operator:grease_pencil.set_selection_mode","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00850","gapId":"operator:grease_pencil.set_start_point","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00851","gapId":"operator:grease_pencil.set_stroke_type","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00852","gapId":"operator:grease_pencil.set_uniform_opacity","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00853","gapId":"operator:grease_pencil.set_uniform_thickness","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00854","gapId":"operator:grease_pencil.snap_cursor_to_selected","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00855","gapId":"operator:grease_pencil.snap_to_cursor","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00856","gapId":"operator:grease_pencil.snap_to_grid","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00857","gapId":"operator:grease_pencil.stroke_material_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00858","gapId":"operator:grease_pencil.stroke_merge_by_distance","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00859","gapId":"operator:grease_pencil.stroke_reset_vertex_color","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00860","gapId":"operator:grease_pencil.stroke_simplify","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00861","gapId":"operator:grease_pencil.stroke_smooth","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00862","gapId":"operator:grease_pencil.stroke_split","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00863","gapId":"operator:grease_pencil.stroke_subdivide","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00864","gapId":"operator:grease_pencil.stroke_subdivide_smooth","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00865","gapId":"operator:grease_pencil.stroke_switch_direction","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00866","gapId":"operator:grease_pencil.stroke_trim","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00867","gapId":"operator:grease_pencil.texture_gradient","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00868","gapId":"operator:grease_pencil.trace_image","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00869","gapId":"operator:grease_pencil.vertex_brush_stroke","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00870","gapId":"operator:grease_pencil.vertex_color_brightness_contrast","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00871","gapId":"operator:grease_pencil.vertex_color_hsv","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00872","gapId":"operator:grease_pencil.vertex_color_invert","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00873","gapId":"operator:grease_pencil.vertex_color_levels","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00874","gapId":"operator:grease_pencil.vertex_color_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00875","gapId":"operator:grease_pencil.vertex_group_normalize","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00876","gapId":"operator:grease_pencil.vertex_group_normalize_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00877","gapId":"operator:grease_pencil.vertex_group_smooth","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00878","gapId":"operator:grease_pencil.vertexmode_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00879","gapId":"operator:grease_pencil.weight_brush_stroke","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00880","gapId":"operator:grease_pencil.weight_invert","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00881","gapId":"operator:grease_pencil.weight_sample","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00882","gapId":"operator:grease_pencil.weight_toggle_direction","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00883","gapId":"operator:grease_pencil.weightmode_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00884","gapId":"operator:image.add_render_slot","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00885","gapId":"operator:image.change_frame","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00886","gapId":"operator:image.clear_render_border","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00887","gapId":"operator:image.clear_render_slot","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00888","gapId":"operator:image.clipboard_copy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00889","gapId":"operator:image.clipboard_paste","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00890","gapId":"operator:image.convert_to_mesh_plane","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00891","gapId":"operator:image.curves_point_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00892","gapId":"operator:image.cycle_render_slot","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00893","gapId":"operator:image.external_edit","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00894","gapId":"operator:image.file_browse","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00895","gapId":"operator:image.flip","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00896","gapId":"operator:image.import_as_mesh_planes","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00897","gapId":"operator:image.invert","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00898","gapId":"operator:image.match_movie_length","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00899","gapId":"operator:image.new","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00900","gapId":"operator:image.open","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00901","gapId":"operator:image.open_images","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00902","gapId":"operator:image.pack","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00903","gapId":"operator:image.project_apply","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00904","gapId":"operator:image.project_edit","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00905","gapId":"operator:image.read_viewlayers","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00906","gapId":"operator:image.reload","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00907","gapId":"operator:image.remove_render_slot","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00908","gapId":"operator:image.render_border","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00909","gapId":"operator:image.replace","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00910","gapId":"operator:image.resize","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00911","gapId":"operator:image.rotate_orthogonal","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00912","gapId":"operator:image.sample","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00913","gapId":"operator:image.sample_line","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00914","gapId":"operator:image.save","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00915","gapId":"operator:image.save_all_modified","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00916","gapId":"operator:image.save_as","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00917","gapId":"operator:image.save_sequence","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00918","gapId":"operator:image.tile_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00919","gapId":"operator:image.tile_fill","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00920","gapId":"operator:image.tile_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00921","gapId":"operator:image.unpack","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00922","gapId":"operator:image.view_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00923","gapId":"operator:image.view_center_cursor","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00924","gapId":"operator:image.view_cursor_center","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00925","gapId":"operator:image.view_ndof","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00926","gapId":"operator:image.view_pan","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00927","gapId":"operator:image.view_selected","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00928","gapId":"operator:image.view_zoom","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00929","gapId":"operator:image.view_zoom_border","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00930","gapId":"operator:image.view_zoom_in","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00931","gapId":"operator:image.view_zoom_out","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00932","gapId":"operator:image.view_zoom_ratio","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00933","gapId":"operator:import_anim.bvh","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00934","gapId":"operator:import_curve.svg","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00935","gapId":"operator:import_scene.fbx","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00936","gapId":"operator:import_scene.gltf","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00937","gapId":"operator:info.report_copy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00938","gapId":"operator:info.report_delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00939","gapId":"operator:info.report_replay","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00940","gapId":"operator:info.reports_display_update","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00941","gapId":"operator:info.select_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00942","gapId":"operator:info.select_box","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00943","gapId":"operator:info.select_pick","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00944","gapId":"operator:lattice.flip","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00945","gapId":"operator:lattice.make_regular","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00946","gapId":"operator:lattice.select_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00947","gapId":"operator:lattice.select_less","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00948","gapId":"operator:lattice.select_mirror","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00949","gapId":"operator:lattice.select_more","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00950","gapId":"operator:lattice.select_random","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00951","gapId":"operator:lattice.select_ungrouped","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00952","gapId":"operator:marker.add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00953","gapId":"operator:marker.camera_bind","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00954","gapId":"operator:marker.delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00955","gapId":"operator:marker.duplicate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00956","gapId":"operator:marker.make_links_scene","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00957","gapId":"operator:marker.move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00958","gapId":"operator:marker.rename","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00959","gapId":"operator:marker.select","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00960","gapId":"operator:marker.select_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00961","gapId":"operator:marker.select_box","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00962","gapId":"operator:marker.select_leftright","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00963","gapId":"operator:mask.add_feather_vertex","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00964","gapId":"operator:mask.add_feather_vertex_slide","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00965","gapId":"operator:mask.add_vertex","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00966","gapId":"operator:mask.add_vertex_slide","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00967","gapId":"operator:mask.copy_splines","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00968","gapId":"operator:mask.cyclic_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00969","gapId":"operator:mask.delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00970","gapId":"operator:mask.duplicate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00971","gapId":"operator:mask.duplicate_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00972","gapId":"operator:mask.feather_weight_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00973","gapId":"operator:mask.handle_type_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00974","gapId":"operator:mask.hide_view_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00975","gapId":"operator:mask.hide_view_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00976","gapId":"operator:mask.layer_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00977","gapId":"operator:mask.layer_new","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00978","gapId":"operator:mask.layer_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00979","gapId":"operator:mask.move_to_layer","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00980","gapId":"operator:mask.new","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00981","gapId":"operator:mask.normals_make_consistent","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00982","gapId":"operator:mask.parent_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00983","gapId":"operator:mask.parent_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00984","gapId":"operator:mask.paste_splines","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00985","gapId":"operator:mask.primitive_circle_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00986","gapId":"operator:mask.primitive_square_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00987","gapId":"operator:mask.select","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00988","gapId":"operator:mask.select_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00989","gapId":"operator:mask.select_box","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00990","gapId":"operator:mask.select_circle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00991","gapId":"operator:mask.select_lasso","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00992","gapId":"operator:mask.select_less","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00993","gapId":"operator:mask.select_linked","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00994","gapId":"operator:mask.select_linked_pick","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00995","gapId":"operator:mask.select_more","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00996","gapId":"operator:mask.shape_key_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00997","gapId":"operator:mask.shape_key_feather_reset","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00998","gapId":"operator:mask.shape_key_insert","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-00999","gapId":"operator:mask.shape_key_rekey","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01000","gapId":"operator:mask.slide_point","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01001","gapId":"operator:mask.slide_spline_curvature","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01002","gapId":"operator:mask.switch_direction","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01003","gapId":"operator:material.copy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01004","gapId":"operator:material.new","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01005","gapId":"operator:material.paste","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01006","gapId":"operator:mball.delete_metaelems","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01007","gapId":"operator:mball.duplicate_metaelems","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01008","gapId":"operator:mball.duplicate_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01009","gapId":"operator:mball.hide_metaelems","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01010","gapId":"operator:mball.reveal_metaelems","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01011","gapId":"operator:mball.select_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01012","gapId":"operator:mball.select_random_metaelems","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01013","gapId":"operator:mball.select_similar","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01014","gapId":"operator:mesh.attribute_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01015","gapId":"operator:mesh.average_normals","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01016","gapId":"operator:mesh.beautify_fill","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01017","gapId":"operator:mesh.bevel","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01018","gapId":"operator:mesh.bisect","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01019","gapId":"operator:mesh.blend_from_shape","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01020","gapId":"operator:mesh.bridge_edge_loops","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01021","gapId":"operator:mesh.circularize","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01022","gapId":"operator:mesh.colors_reverse","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01023","gapId":"operator:mesh.colors_rotate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01024","gapId":"operator:mesh.convex_hull","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01025","gapId":"operator:mesh.customdata_custom_splitnormals_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01026","gapId":"operator:mesh.customdata_custom_splitnormals_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01027","gapId":"operator:mesh.customdata_face_sets_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01028","gapId":"operator:mesh.customdata_mask_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01029","gapId":"operator:mesh.customdata_skin_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01030","gapId":"operator:mesh.customdata_skin_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01031","gapId":"operator:mesh.decimate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01032","gapId":"operator:mesh.delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01033","gapId":"operator:mesh.delete_edgeloop","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01034","gapId":"operator:mesh.delete_loose","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01035","gapId":"operator:mesh.dissolve_degenerate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01036","gapId":"operator:mesh.dissolve_edges","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01037","gapId":"operator:mesh.dissolve_faces","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01038","gapId":"operator:mesh.dissolve_limited","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01039","gapId":"operator:mesh.dissolve_mode","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01040","gapId":"operator:mesh.dissolve_verts","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01041","gapId":"operator:mesh.dupli_extrude_cursor","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01042","gapId":"operator:mesh.duplicate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01043","gapId":"operator:mesh.duplicate_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01044","gapId":"operator:mesh.edge_collapse","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01045","gapId":"operator:mesh.edge_face_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01046","gapId":"operator:mesh.edge_rotate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01047","gapId":"operator:mesh.edge_split","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01048","gapId":"operator:mesh.edgering_select","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01049","gapId":"operator:mesh.edges_select_sharp","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01050","gapId":"operator:mesh.extrude_context","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01051","gapId":"operator:mesh.extrude_context_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01052","gapId":"operator:mesh.extrude_edges_indiv","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01053","gapId":"operator:mesh.extrude_edges_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01054","gapId":"operator:mesh.extrude_faces_indiv","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01055","gapId":"operator:mesh.extrude_faces_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01056","gapId":"operator:mesh.extrude_manifold","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01057","gapId":"operator:mesh.extrude_region","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01058","gapId":"operator:mesh.extrude_region_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01059","gapId":"operator:mesh.extrude_region_shrink_fatten","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01060","gapId":"operator:mesh.extrude_repeat","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01061","gapId":"operator:mesh.extrude_vertices_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01062","gapId":"operator:mesh.extrude_verts_indiv","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01063","gapId":"operator:mesh.face_make_planar","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01064","gapId":"operator:mesh.face_split_by_edges","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01065","gapId":"operator:mesh.faces_select_linked_flat","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01066","gapId":"operator:mesh.faces_shade_flat","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01067","gapId":"operator:mesh.faces_shade_smooth","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01068","gapId":"operator:mesh.fill","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01069","gapId":"operator:mesh.fill_grid","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01070","gapId":"operator:mesh.fill_holes","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01071","gapId":"operator:mesh.flatten","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01072","gapId":"operator:mesh.flip_normals","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01073","gapId":"operator:mesh.flip_quad_tessellation","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01074","gapId":"operator:mesh.hide","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01075","gapId":"operator:mesh.inset","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01076","gapId":"operator:mesh.intersect","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01077","gapId":"operator:mesh.intersect_boolean","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01078","gapId":"operator:mesh.knife_project","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01079","gapId":"operator:mesh.knife_tool","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01080","gapId":"operator:mesh.loop_select","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01081","gapId":"operator:mesh.loop_to_region","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01082","gapId":"operator:mesh.loopcut","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01083","gapId":"operator:mesh.loopcut_slide","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01084","gapId":"operator:mesh.mark_freestyle_edge","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01085","gapId":"operator:mesh.mark_freestyle_face","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01086","gapId":"operator:mesh.mark_seam","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01087","gapId":"operator:mesh.mark_sharp","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01088","gapId":"operator:mesh.merge","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01089","gapId":"operator:mesh.merge_normals","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01090","gapId":"operator:mesh.mod_weighted_strength","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01091","gapId":"operator:mesh.normals_make_consistent","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01092","gapId":"operator:mesh.normals_tools","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01093","gapId":"operator:mesh.offset_edge_loops","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01094","gapId":"operator:mesh.offset_edge_loops_slide","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01095","gapId":"operator:mesh.point_normals","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01096","gapId":"operator:mesh.poke","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01097","gapId":"operator:mesh.polybuild_delete_at_cursor","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01098","gapId":"operator:mesh.polybuild_dissolve_at_cursor","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01099","gapId":"operator:mesh.polybuild_extrude_at_cursor_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01100","gapId":"operator:mesh.polybuild_face_at_cursor","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01101","gapId":"operator:mesh.polybuild_face_at_cursor_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01102","gapId":"operator:mesh.polybuild_split_at_cursor","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01103","gapId":"operator:mesh.polybuild_split_at_cursor_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01104","gapId":"operator:mesh.polybuild_transform_at_cursor","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01105","gapId":"operator:mesh.polybuild_transform_at_cursor_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01106","gapId":"operator:mesh.primitive_circle_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01107","gapId":"operator:mesh.primitive_cone_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01108","gapId":"operator:mesh.primitive_cube_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01109","gapId":"operator:mesh.primitive_cube_add_gizmo","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01110","gapId":"operator:mesh.primitive_cylinder_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01111","gapId":"operator:mesh.primitive_grid_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01112","gapId":"operator:mesh.primitive_ico_sphere_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01113","gapId":"operator:mesh.primitive_monkey_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01114","gapId":"operator:mesh.primitive_plane_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01115","gapId":"operator:mesh.primitive_torus_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01116","gapId":"operator:mesh.primitive_uv_sphere_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01117","gapId":"operator:mesh.quads_convert_to_tris","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01118","gapId":"operator:mesh.region_to_loop","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01119","gapId":"operator:mesh.remove_doubles","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01120","gapId":"operator:mesh.reorder_vertices_spatial","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01121","gapId":"operator:mesh.reveal","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01122","gapId":"operator:mesh.rip","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01123","gapId":"operator:mesh.rip_edge","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01124","gapId":"operator:mesh.rip_edge_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01125","gapId":"operator:mesh.rip_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01126","gapId":"operator:mesh.screw","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01127","gapId":"operator:mesh.select_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01128","gapId":"operator:mesh.select_axis","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01129","gapId":"operator:mesh.select_boundary_loop_multi","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01130","gapId":"operator:mesh.select_by_attribute","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01131","gapId":"operator:mesh.select_by_pole_count","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01132","gapId":"operator:mesh.select_edge_loop_multi","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01133","gapId":"operator:mesh.select_edge_ring_multi","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01134","gapId":"operator:mesh.select_face_by_sides","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01135","gapId":"operator:mesh.select_interior_faces","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01136","gapId":"operator:mesh.select_less","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01137","gapId":"operator:mesh.select_linked","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01138","gapId":"operator:mesh.select_linked_pick","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01139","gapId":"operator:mesh.select_loose","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01140","gapId":"operator:mesh.select_mirror","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01141","gapId":"operator:mesh.select_mode","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01142","gapId":"operator:mesh.select_more","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01143","gapId":"operator:mesh.select_next_item","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01144","gapId":"operator:mesh.select_non_manifold","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01145","gapId":"operator:mesh.select_nth","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01146","gapId":"operator:mesh.select_prev_item","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01147","gapId":"operator:mesh.select_random","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01148","gapId":"operator:mesh.select_similar","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01149","gapId":"operator:mesh.select_similar_region","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01150","gapId":"operator:mesh.select_ungrouped","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01151","gapId":"operator:mesh.separate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01152","gapId":"operator:mesh.set_normals_from_faces","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01153","gapId":"operator:mesh.set_sharpness_by_angle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01154","gapId":"operator:mesh.shape_propagate_to_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01155","gapId":"operator:mesh.shortest_path_pick","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01156","gapId":"operator:mesh.shortest_path_select","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01157","gapId":"operator:mesh.smooth_normals","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01158","gapId":"operator:mesh.solidify","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01159","gapId":"operator:mesh.sort_elements","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01160","gapId":"operator:mesh.space_edge_loops_evenly","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01161","gapId":"operator:mesh.spin","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01162","gapId":"operator:mesh.split","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01163","gapId":"operator:mesh.split_normals","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01164","gapId":"operator:mesh.subdivide","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01165","gapId":"operator:mesh.subdivide_edgering","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01166","gapId":"operator:mesh.symmetrize","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01167","gapId":"operator:mesh.symmetry_snap","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01168","gapId":"operator:mesh.tris_convert_to_quads","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01169","gapId":"operator:mesh.unsubdivide","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01170","gapId":"operator:mesh.uv_texture_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01171","gapId":"operator:mesh.uv_texture_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01172","gapId":"operator:mesh.uvs_reverse","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01173","gapId":"operator:mesh.uvs_rotate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01174","gapId":"operator:mesh.vert_connect","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01175","gapId":"operator:mesh.vert_connect_concave","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01176","gapId":"operator:mesh.vert_connect_nonplanar","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01177","gapId":"operator:mesh.vert_connect_path","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01178","gapId":"operator:mesh.vertices_smooth","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01179","gapId":"operator:mesh.vertices_smooth_laplacian","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01180","gapId":"operator:mesh.wireframe","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01181","gapId":"operator:nla.action_pushdown","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01182","gapId":"operator:nla.action_sync_length","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01183","gapId":"operator:nla.action_unlink","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01184","gapId":"operator:nla.actionclip_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01185","gapId":"operator:nla.apply_scale","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01186","gapId":"operator:nla.bake","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01187","gapId":"operator:nla.channels_click","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01188","gapId":"operator:nla.clear_scale","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01189","gapId":"operator:nla.click_select","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01190","gapId":"operator:nla.delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01191","gapId":"operator:nla.duplicate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01192","gapId":"operator:nla.duplicate_linked_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01193","gapId":"operator:nla.duplicate_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01194","gapId":"operator:nla.fmodifier_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01195","gapId":"operator:nla.fmodifier_copy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01196","gapId":"operator:nla.fmodifier_paste","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01197","gapId":"operator:nla.make_single_user","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01198","gapId":"operator:nla.meta_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01199","gapId":"operator:nla.meta_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01200","gapId":"operator:nla.move_down","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01201","gapId":"operator:nla.move_up","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01202","gapId":"operator:nla.mute_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01203","gapId":"operator:nla.previewrange_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01204","gapId":"operator:nla.select_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01205","gapId":"operator:nla.select_box","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01206","gapId":"operator:nla.select_leftright","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01207","gapId":"operator:nla.selected_objects_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01208","gapId":"operator:nla.snap","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01209","gapId":"operator:nla.soundclip_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01210","gapId":"operator:nla.split","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01211","gapId":"operator:nla.swap","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01212","gapId":"operator:nla.tracks_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01213","gapId":"operator:nla.tracks_delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01214","gapId":"operator:nla.transition_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01215","gapId":"operator:nla.tweakmode_enter","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01216","gapId":"operator:nla.tweakmode_exit","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01217","gapId":"operator:nla.view_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01218","gapId":"operator:nla.view_frame","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01219","gapId":"operator:nla.view_selected","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01220","gapId":"operator:node.activate_viewer","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01221","gapId":"operator:node.add_closure_zone","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01222","gapId":"operator:node.add_collection","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01223","gapId":"operator:node.add_color","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01224","gapId":"operator:node.add_empty_group","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01225","gapId":"operator:node.add_foreach_geometry_element_zone","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01226","gapId":"operator:node.add_group","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01227","gapId":"operator:node.add_group_asset","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01228","gapId":"operator:node.add_group_input_node","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01229","gapId":"operator:node.add_image","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01230","gapId":"operator:node.add_import_node","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01231","gapId":"operator:node.add_mask","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01232","gapId":"operator:node.add_material","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01233","gapId":"operator:node.add_node","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01234","gapId":"operator:node.add_object","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01235","gapId":"operator:node.add_repeat_zone","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01236","gapId":"operator:node.add_reroute","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01237","gapId":"operator:node.add_simulation_zone","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01238","gapId":"operator:node.add_typed_bundle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01239","gapId":"operator:node.add_zone","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01240","gapId":"operator:node.attach","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01241","gapId":"operator:node.backimage_fit","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01242","gapId":"operator:node.backimage_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01243","gapId":"operator:node.backimage_sample","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01244","gapId":"operator:node.backimage_zoom","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01245","gapId":"operator:node.bake_node_item_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01246","gapId":"operator:node.bake_node_item_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01247","gapId":"operator:node.bake_node_item_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01248","gapId":"operator:node.capture_attribute_item_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01249","gapId":"operator:node.capture_attribute_item_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01250","gapId":"operator:node.capture_attribute_item_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01251","gapId":"operator:node.clear_viewer_border","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01252","gapId":"operator:node.clipboard_copy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01253","gapId":"operator:node.clipboard_paste","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01254","gapId":"operator:node.closure_input_item_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01255","gapId":"operator:node.closure_input_item_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01256","gapId":"operator:node.closure_input_item_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01257","gapId":"operator:node.closure_output_item_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01258","gapId":"operator:node.closure_output_item_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01259","gapId":"operator:node.closure_output_item_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01260","gapId":"operator:node.closure_to_list_item_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01261","gapId":"operator:node.closure_to_list_item_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01262","gapId":"operator:node.closure_to_list_item_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01263","gapId":"operator:node.collapse_hide_unused_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01264","gapId":"operator:node.combine_bundle_item_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01265","gapId":"operator:node.combine_bundle_item_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01266","gapId":"operator:node.combine_bundle_item_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01267","gapId":"operator:node.connect_to_output","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01268","gapId":"operator:node.cryptomatte_layer_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01269","gapId":"operator:node.cryptomatte_layer_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01270","gapId":"operator:node.deactivate_viewer","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01271","gapId":"operator:node.default_group_width_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01272","gapId":"operator:node.delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01273","gapId":"operator:node.delete_copy_reconnect","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01274","gapId":"operator:node.delete_reconnect","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01275","gapId":"operator:node.detach","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01276","gapId":"operator:node.detach_translate_attach","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01277","gapId":"operator:node.duplicate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01278","gapId":"operator:node.duplicate_compositing_modifier_node_group","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01279","gapId":"operator:node.duplicate_compositing_node_group","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01280","gapId":"operator:node.duplicate_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01281","gapId":"operator:node.duplicate_move_keep_inputs","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01282","gapId":"operator:node.duplicate_move_linked","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01283","gapId":"operator:node.enum_definition_item_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01284","gapId":"operator:node.enum_definition_item_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01285","gapId":"operator:node.enum_definition_item_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01286","gapId":"operator:node.evaluate_closure_input_item_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01287","gapId":"operator:node.evaluate_closure_input_item_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01288","gapId":"operator:node.evaluate_closure_input_item_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01289","gapId":"operator:node.evaluate_closure_output_item_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01290","gapId":"operator:node.evaluate_closure_output_item_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01291","gapId":"operator:node.evaluate_closure_output_item_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01292","gapId":"operator:node.field_to_grid_item_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01293","gapId":"operator:node.field_to_grid_item_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01294","gapId":"operator:node.field_to_grid_item_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01295","gapId":"operator:node.field_to_list_item_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01296","gapId":"operator:node.field_to_list_item_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01297","gapId":"operator:node.field_to_list_item_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01298","gapId":"operator:node.file_output_item_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01299","gapId":"operator:node.file_output_item_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01300","gapId":"operator:node.file_output_item_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01301","gapId":"operator:node.find_node","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01302","gapId":"operator:node.foreach_geometry_element_zone_generation_item_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01303","gapId":"operator:node.foreach_geometry_element_zone_generation_item_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01304","gapId":"operator:node.foreach_geometry_element_zone_generation_item_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01305","gapId":"operator:node.foreach_geometry_element_zone_input_item_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01306","gapId":"operator:node.foreach_geometry_element_zone_input_item_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01307","gapId":"operator:node.foreach_geometry_element_zone_input_item_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01308","gapId":"operator:node.foreach_geometry_element_zone_main_item_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01309","gapId":"operator:node.foreach_geometry_element_zone_main_item_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01310","gapId":"operator:node.foreach_geometry_element_zone_main_item_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01311","gapId":"operator:node.format_string_item_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01312","gapId":"operator:node.format_string_item_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01313","gapId":"operator:node.format_string_item_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01314","gapId":"operator:node.geometry_nodes_viewer_item_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01315","gapId":"operator:node.geometry_nodes_viewer_item_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01316","gapId":"operator:node.geometry_nodes_viewer_item_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01317","gapId":"operator:node.gltf_settings_node_operator","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01318","gapId":"operator:node.group_edit","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01319","gapId":"operator:node.group_enter_exit","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01320","gapId":"operator:node.group_insert","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01321","gapId":"operator:node.group_make","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01322","gapId":"operator:node.group_separate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01323","gapId":"operator:node.group_ungroup","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01324","gapId":"operator:node.hide_socket_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01325","gapId":"operator:node.hide_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01326","gapId":"operator:node.index_switch_item_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01327","gapId":"operator:node.index_switch_item_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01328","gapId":"operator:node.index_switch_item_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01329","gapId":"operator:node.insert_offset","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01330","gapId":"operator:node.interface_item_duplicate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01331","gapId":"operator:node.interface_item_make_panel_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01332","gapId":"operator:node.interface_item_new","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01333","gapId":"operator:node.interface_item_new_panel_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01334","gapId":"operator:node.interface_item_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01335","gapId":"operator:node.interface_item_unlink_panel_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01336","gapId":"operator:node.join","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01337","gapId":"operator:node.join_named","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01338","gapId":"operator:node.join_nodes","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01339","gapId":"operator:node.link","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01340","gapId":"operator:node.link_drag_operation_test","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01341","gapId":"operator:node.link_make","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01342","gapId":"operator:node.link_viewer","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01343","gapId":"operator:node.links_cut","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01344","gapId":"operator:node.links_detach","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01345","gapId":"operator:node.links_mute","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01346","gapId":"operator:node.move_detach_links","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01347","gapId":"operator:node.move_detach_links_release","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01348","gapId":"operator:node.mute_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01349","gapId":"operator:node.new_compositing_node_group","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01350","gapId":"operator:node.new_compositor_sequencer_node_group","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01351","gapId":"operator:node.new_geometry_node_group_assign","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01352","gapId":"operator:node.new_geometry_node_group_tool","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01353","gapId":"operator:node.new_geometry_nodes_modifier","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01354","gapId":"operator:node.new_node_tree","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01355","gapId":"operator:node.node_color_preset_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01356","gapId":"operator:node.node_copy_color","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01357","gapId":"operator:node.options_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01358","gapId":"operator:node.parent_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01359","gapId":"operator:node.preview_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01360","gapId":"operator:node.read_viewlayers","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01361","gapId":"operator:node.render_changed","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01362","gapId":"operator:node.repeat_zone_item_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01363","gapId":"operator:node.repeat_zone_item_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01364","gapId":"operator:node.repeat_zone_item_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01365","gapId":"operator:node.resize","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01366","gapId":"operator:node.sample_attribute_items_item_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01367","gapId":"operator:node.sample_attribute_items_item_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01368","gapId":"operator:node.sample_attribute_items_item_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01369","gapId":"operator:node.select","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01370","gapId":"operator:node.select_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01371","gapId":"operator:node.select_box","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01372","gapId":"operator:node.select_circle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01373","gapId":"operator:node.select_grouped","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01374","gapId":"operator:node.select_lasso","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01375","gapId":"operator:node.select_link_viewer","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01376","gapId":"operator:node.select_linked_from","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01377","gapId":"operator:node.select_linked_to","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01378","gapId":"operator:node.select_same_type_step","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01379","gapId":"operator:node.separate_bundle_item_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01380","gapId":"operator:node.separate_bundle_item_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01381","gapId":"operator:node.separate_bundle_item_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01382","gapId":"operator:node.shader_script_update","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01383","gapId":"operator:node.simulation_zone_item_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01384","gapId":"operator:node.simulation_zone_item_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01385","gapId":"operator:node.simulation_zone_item_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01386","gapId":"operator:node.sockets_sync","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01387","gapId":"operator:node.swap_empty_group","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01388","gapId":"operator:node.swap_group_asset","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01389","gapId":"operator:node.swap_node","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01390","gapId":"operator:node.swap_typed_bundle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01391","gapId":"operator:node.swap_zone","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01392","gapId":"operator:node.test_inlining_shader_nodes","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01393","gapId":"operator:node.toggle_viewer","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01394","gapId":"operator:node.translate_attach","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01395","gapId":"operator:node.translate_attach_remove_on_cancel","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01396","gapId":"operator:node.tree_path_parent","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01397","gapId":"operator:node.view_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01398","gapId":"operator:node.view_selected","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01399","gapId":"operator:node.viewer_border","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01400","gapId":"operator:node.viewer_shortcut_get","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01401","gapId":"operator:node.viewer_shortcut_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01402","gapId":"operator:object.add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01403","gapId":"operator:object.add_modifier_menu","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01404","gapId":"operator:object.add_named","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01405","gapId":"operator:object.align","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01406","gapId":"operator:object.anim_transforms_to_deltas","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01407","gapId":"operator:object.armature_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01408","gapId":"operator:object.assign_property_defaults","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01409","gapId":"operator:object.bake","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01410","gapId":"operator:object.bake_image","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01411","gapId":"operator:object.camera_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01412","gapId":"operator:object.camera_custom_update","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01413","gapId":"operator:object.clear_override_library","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01414","gapId":"operator:object.collection_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01415","gapId":"operator:object.collection_external_asset_drop","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01416","gapId":"operator:object.collection_instance_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01417","gapId":"operator:object.collection_link","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01418","gapId":"operator:object.collection_objects_select","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01419","gapId":"operator:object.collection_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01420","gapId":"operator:object.collection_unlink","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01421","gapId":"operator:object.constraint_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01422","gapId":"operator:object.constraint_add_with_targets","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01423","gapId":"operator:object.constraints_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01424","gapId":"operator:object.constraints_copy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01425","gapId":"operator:object.convert","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01426","gapId":"operator:object.copy_global_transform","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01427","gapId":"operator:object.copy_relative_transform","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01428","gapId":"operator:object.correctivesmooth_bind","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01429","gapId":"operator:object.curves_empty_hair_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01430","gapId":"operator:object.curves_random_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01431","gapId":"operator:object.data_instance_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01432","gapId":"operator:object.data_transfer","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01433","gapId":"operator:object.datalayout_transfer","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01434","gapId":"operator:object.delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01435","gapId":"operator:object.delete_fix_to_camera_keys","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01436","gapId":"operator:object.drop_geometry_nodes","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01437","gapId":"operator:object.drop_named_material","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01438","gapId":"operator:object.duplicate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01439","gapId":"operator:object.duplicate_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01440","gapId":"operator:object.duplicate_move_linked","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01441","gapId":"operator:object.duplicates_make_real","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01442","gapId":"operator:object.editmode_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01443","gapId":"operator:object.effector_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01444","gapId":"operator:object.empty_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01445","gapId":"operator:object.empty_image_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01446","gapId":"operator:object.explode_refresh","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01447","gapId":"operator:object.fix_to_camera","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01448","gapId":"operator:object.forcefield_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01449","gapId":"operator:object.geometry_node_bake_delete_single","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01450","gapId":"operator:object.geometry_node_bake_pack_single","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01451","gapId":"operator:object.geometry_node_bake_single","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01452","gapId":"operator:object.geometry_node_bake_unpack_single","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01453","gapId":"operator:object.geometry_node_tree_copy_assign","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01454","gapId":"operator:object.geometry_nodes_input_attribute_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01455","gapId":"operator:object.geometry_nodes_move_to_nodes","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01456","gapId":"operator:object.grease_pencil_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01457","gapId":"operator:object.grease_pencil_dash_modifier_segment_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01458","gapId":"operator:object.grease_pencil_dash_modifier_segment_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01459","gapId":"operator:object.grease_pencil_dash_modifier_segment_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01460","gapId":"operator:object.grease_pencil_time_modifier_segment_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01461","gapId":"operator:object.grease_pencil_time_modifier_segment_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01462","gapId":"operator:object.grease_pencil_time_modifier_segment_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01463","gapId":"operator:object.hide_collection","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01464","gapId":"operator:object.hide_render_clear_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01465","gapId":"operator:object.hide_view_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01466","gapId":"operator:object.hide_view_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01467","gapId":"operator:object.hook_add_newob","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01468","gapId":"operator:object.hook_add_selob","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01469","gapId":"operator:object.hook_assign","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01470","gapId":"operator:object.hook_recenter","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01471","gapId":"operator:object.hook_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01472","gapId":"operator:object.hook_reset","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01473","gapId":"operator:object.hook_select","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01474","gapId":"operator:object.instance_offset_from_cursor","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01475","gapId":"operator:object.instance_offset_from_object","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01476","gapId":"operator:object.instance_offset_to_cursor","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01477","gapId":"operator:object.isolate_type_render","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01478","gapId":"operator:object.join","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01479","gapId":"operator:object.join_shapes","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01480","gapId":"operator:object.join_uvs","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01481","gapId":"operator:object.laplaciandeform_bind","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01482","gapId":"operator:object.lattice_add_to_selected","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01483","gapId":"operator:object.light_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01484","gapId":"operator:object.light_linking_blocker_collection_new","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01485","gapId":"operator:object.light_linking_blockers_link","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01486","gapId":"operator:object.light_linking_blockers_select","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01487","gapId":"operator:object.light_linking_receiver_collection_new","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01488","gapId":"operator:object.light_linking_receivers_link","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01489","gapId":"operator:object.light_linking_receivers_select","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01490","gapId":"operator:object.light_linking_unlink_from_collection","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01491","gapId":"operator:object.lightprobe_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01492","gapId":"operator:object.lightprobe_cache_bake","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01493","gapId":"operator:object.lightprobe_cache_free","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01494","gapId":"operator:object.lineart_bake_strokes","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01495","gapId":"operator:object.lineart_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01496","gapId":"operator:object.link_to_collection","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01497","gapId":"operator:object.location_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01498","gapId":"operator:object.make_dupli_face","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01499","gapId":"operator:object.make_links_data","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01500","gapId":"operator:object.make_links_scene","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01501","gapId":"operator:object.make_local","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01502","gapId":"operator:object.make_override_library","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01503","gapId":"operator:object.make_single_user","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01504","gapId":"operator:object.material_slot_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01505","gapId":"operator:object.material_slot_assign","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01506","gapId":"operator:object.material_slot_copy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01507","gapId":"operator:object.material_slot_deselect","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01508","gapId":"operator:object.material_slot_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01509","gapId":"operator:object.material_slot_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01510","gapId":"operator:object.material_slot_remove_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01511","gapId":"operator:object.material_slot_remove_unused","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01512","gapId":"operator:object.material_slot_select","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01513","gapId":"operator:object.meshdeform_bind","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01514","gapId":"operator:object.metaball_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01515","gapId":"operator:object.mode_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01516","gapId":"operator:object.mode_set_with_submode","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01517","gapId":"operator:object.modifier_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01518","gapId":"operator:object.modifier_add_node_group","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01519","gapId":"operator:object.modifier_apply","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01520","gapId":"operator:object.modifier_apply_as_shapekey","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01521","gapId":"operator:object.modifier_convert","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01522","gapId":"operator:object.modifier_copy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01523","gapId":"operator:object.modifier_copy_to_selected","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01524","gapId":"operator:object.modifier_move_down","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01525","gapId":"operator:object.modifier_move_to_index","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01526","gapId":"operator:object.modifier_move_up","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01527","gapId":"operator:object.modifier_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01528","gapId":"operator:object.modifier_set_active","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01529","gapId":"operator:object.modifiers_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01530","gapId":"operator:object.modifiers_copy_to_selected","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01531","gapId":"operator:object.move_to_collection","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01532","gapId":"operator:object.multires_base_apply","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01533","gapId":"operator:object.multires_external_pack","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01534","gapId":"operator:object.multires_external_save","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01535","gapId":"operator:object.multires_higher_levels_delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01536","gapId":"operator:object.multires_rebuild_subdiv","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01537","gapId":"operator:object.multires_reshape","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01538","gapId":"operator:object.multires_subdivide","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01539","gapId":"operator:object.multires_unsubdivide","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01540","gapId":"operator:object.ocean_bake","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01541","gapId":"operator:object.origin_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01542","gapId":"operator:object.origin_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01543","gapId":"operator:object.parent_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01544","gapId":"operator:object.parent_inverse_apply","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01545","gapId":"operator:object.parent_no_inverse_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01546","gapId":"operator:object.parent_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01547","gapId":"operator:object.particle_system_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01548","gapId":"operator:object.particle_system_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01549","gapId":"operator:object.paste_transform","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01550","gapId":"operator:object.paths_calculate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01551","gapId":"operator:object.paths_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01552","gapId":"operator:object.paths_update","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01553","gapId":"operator:object.paths_update_visible","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01554","gapId":"operator:object.pointcloud_random_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01555","gapId":"operator:object.posemode_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01556","gapId":"operator:object.quadriflow_remesh","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01557","gapId":"operator:object.quick_explode","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01558","gapId":"operator:object.quick_fur","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01559","gapId":"operator:object.quick_liquid","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01560","gapId":"operator:object.quick_smoke","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01561","gapId":"operator:object.randomize_transform","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01562","gapId":"operator:object.reset_override_library","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01563","gapId":"operator:object.rotation_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01564","gapId":"operator:object.scale_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01565","gapId":"operator:object.select_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01566","gapId":"operator:object.select_by_type","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01567","gapId":"operator:object.select_camera","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01568","gapId":"operator:object.select_grouped","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01569","gapId":"operator:object.select_hierarchy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01570","gapId":"operator:object.select_less","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01571","gapId":"operator:object.select_linked","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01572","gapId":"operator:object.select_mirror","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01573","gapId":"operator:object.select_more","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01574","gapId":"operator:object.select_pattern","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01575","gapId":"operator:object.select_random","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01576","gapId":"operator:object.select_same_collection","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01577","gapId":"operator:object.shade_auto_smooth","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01578","gapId":"operator:object.shade_flat","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01579","gapId":"operator:object.shade_smooth","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01580","gapId":"operator:object.shade_smooth_by_angle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01581","gapId":"operator:object.shaderfx_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01582","gapId":"operator:object.shaderfx_copy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01583","gapId":"operator:object.shaderfx_move_down","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01584","gapId":"operator:object.shaderfx_move_to_index","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01585","gapId":"operator:object.shaderfx_move_up","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01586","gapId":"operator:object.shaderfx_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01587","gapId":"operator:object.shape_key_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01588","gapId":"operator:object.shape_key_apply_to_basis","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01589","gapId":"operator:object.shape_key_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01590","gapId":"operator:object.shape_key_copy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01591","gapId":"operator:object.shape_key_lock","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01592","gapId":"operator:object.shape_key_make_basis","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01593","gapId":"operator:object.shape_key_mirror","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01594","gapId":"operator:object.shape_key_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01595","gapId":"operator:object.shape_key_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01596","gapId":"operator:object.shape_key_retime","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01597","gapId":"operator:object.shape_key_transfer","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01598","gapId":"operator:object.simulation_nodes_cache_bake","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01599","gapId":"operator:object.simulation_nodes_cache_calculate_to_frame","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01600","gapId":"operator:object.simulation_nodes_cache_delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01601","gapId":"operator:object.skin_armature_create","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01602","gapId":"operator:object.skin_loose_mark_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01603","gapId":"operator:object.skin_radii_equalize","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01604","gapId":"operator:object.skin_root_mark","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01605","gapId":"operator:object.speaker_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01606","gapId":"operator:object.subdivision_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01607","gapId":"operator:object.surfacedeform_bind","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01608","gapId":"operator:object.text_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01609","gapId":"operator:object.track_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01610","gapId":"operator:object.track_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01611","gapId":"operator:object.transfer_mode","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01612","gapId":"operator:object.transform_apply","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01613","gapId":"operator:object.transform_axis_target","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01614","gapId":"operator:object.transform_to_mouse","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01615","gapId":"operator:object.transforms_to_deltas","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01616","gapId":"operator:object.unlink_data","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01617","gapId":"operator:object.update_shapes","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01618","gapId":"operator:object.vertex_group_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01619","gapId":"operator:object.vertex_group_assign","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01620","gapId":"operator:object.vertex_group_assign_new","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01621","gapId":"operator:object.vertex_group_clean","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01622","gapId":"operator:object.vertex_group_copy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01623","gapId":"operator:object.vertex_group_copy_to_selected","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01624","gapId":"operator:object.vertex_group_deselect","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01625","gapId":"operator:object.vertex_group_invert","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01626","gapId":"operator:object.vertex_group_levels","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01627","gapId":"operator:object.vertex_group_limit_total","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01628","gapId":"operator:object.vertex_group_lock","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01629","gapId":"operator:object.vertex_group_mirror","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01630","gapId":"operator:object.vertex_group_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01631","gapId":"operator:object.vertex_group_normalize","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01632","gapId":"operator:object.vertex_group_normalize_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01633","gapId":"operator:object.vertex_group_quantize","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01634","gapId":"operator:object.vertex_group_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01635","gapId":"operator:object.vertex_group_remove_from","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01636","gapId":"operator:object.vertex_group_select","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01637","gapId":"operator:object.vertex_group_set_active","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01638","gapId":"operator:object.vertex_group_smooth","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01639","gapId":"operator:object.vertex_group_sort","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01640","gapId":"operator:object.vertex_parent_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01641","gapId":"operator:object.vertex_weight_copy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01642","gapId":"operator:object.vertex_weight_delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01643","gapId":"operator:object.vertex_weight_normalize_active_vertex","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01644","gapId":"operator:object.vertex_weight_paste","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01645","gapId":"operator:object.vertex_weight_set_active","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01646","gapId":"operator:object.visual_geometry_to_objects","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01647","gapId":"operator:object.visual_transform_apply","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01648","gapId":"operator:object.volume_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01649","gapId":"operator:object.volume_import","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01650","gapId":"operator:object.voxel_remesh","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01651","gapId":"operator:object.voxel_size_edit","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01652","gapId":"operator:outliner.action_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01653","gapId":"operator:outliner.animdata_operation","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01654","gapId":"operator:outliner.clear_filter","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01655","gapId":"operator:outliner.collection_color_tag_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01656","gapId":"operator:outliner.collection_disable","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01657","gapId":"operator:outliner.collection_disable_render","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01658","gapId":"operator:outliner.collection_drop","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01659","gapId":"operator:outliner.collection_duplicate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01660","gapId":"operator:outliner.collection_duplicate_linked","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01661","gapId":"operator:outliner.collection_enable","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01662","gapId":"operator:outliner.collection_enable_render","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01663","gapId":"operator:outliner.collection_exclude_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01664","gapId":"operator:outliner.collection_exclude_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01665","gapId":"operator:outliner.collection_hide","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01666","gapId":"operator:outliner.collection_hide_inside","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01667","gapId":"operator:outliner.collection_hierarchy_delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01668","gapId":"operator:outliner.collection_holdout_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01669","gapId":"operator:outliner.collection_holdout_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01670","gapId":"operator:outliner.collection_indirect_only_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01671","gapId":"operator:outliner.collection_indirect_only_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01672","gapId":"operator:outliner.collection_instance","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01673","gapId":"operator:outliner.collection_isolate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01674","gapId":"operator:outliner.collection_link","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01675","gapId":"operator:outliner.collection_new","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01676","gapId":"operator:outliner.collection_objects_deselect","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01677","gapId":"operator:outliner.collection_objects_select","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01678","gapId":"operator:outliner.collection_show","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01679","gapId":"operator:outliner.collection_show_inside","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01680","gapId":"operator:outliner.constraint_operation","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01681","gapId":"operator:outliner.data_operation","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01682","gapId":"operator:outliner.datastack_drop","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01683","gapId":"operator:outliner.delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01684","gapId":"operator:outliner.drivers_add_selected","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01685","gapId":"operator:outliner.drivers_delete_selected","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01686","gapId":"operator:outliner.expanded_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01687","gapId":"operator:outliner.hide","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01688","gapId":"operator:outliner.highlight_update","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01689","gapId":"operator:outliner.id_copy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01690","gapId":"operator:outliner.id_delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01691","gapId":"operator:outliner.id_linked_relocate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01692","gapId":"operator:outliner.id_operation","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01693","gapId":"operator:outliner.id_paste","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01694","gapId":"operator:outliner.id_remap","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01695","gapId":"operator:outliner.item_activate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01696","gapId":"operator:outliner.item_drag_drop","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01697","gapId":"operator:outliner.item_openclose","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01698","gapId":"operator:outliner.item_rename","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01699","gapId":"operator:outliner.keyingset_add_selected","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01700","gapId":"operator:outliner.keyingset_remove_selected","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01701","gapId":"operator:outliner.lib_operation","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01702","gapId":"operator:outliner.lib_relocate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01703","gapId":"operator:outliner.liboverride_operation","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01704","gapId":"operator:outliner.liboverride_property_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01705","gapId":"operator:outliner.liboverride_troubleshoot_operation","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01706","gapId":"operator:outliner.material_drop","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01707","gapId":"operator:outliner.modifier_operation","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01708","gapId":"operator:outliner.object_operation","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01709","gapId":"operator:outliner.operation","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01710","gapId":"operator:outliner.orphans_manage","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01711","gapId":"operator:outliner.orphans_purge","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01712","gapId":"operator:outliner.parent_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01713","gapId":"operator:outliner.parent_drop","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01714","gapId":"operator:outliner.scene_drop","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01715","gapId":"operator:outliner.scene_operation","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01716","gapId":"operator:outliner.scroll_page","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01717","gapId":"operator:outliner.select_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01718","gapId":"operator:outliner.select_box","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01719","gapId":"operator:outliner.select_walk","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01720","gapId":"operator:outliner.show_active","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01721","gapId":"operator:outliner.show_hierarchy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01722","gapId":"operator:outliner.show_one_level","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01723","gapId":"operator:outliner.start_filter","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01724","gapId":"operator:outliner.unhide_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01725","gapId":"operator:paint.add_simple_uvs","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01726","gapId":"operator:paint.add_texture_paint_slot","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01727","gapId":"operator:paint.brush_colors_flip","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01728","gapId":"operator:paint.face_select_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01729","gapId":"operator:paint.face_select_hide","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01730","gapId":"operator:paint.face_select_less","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01731","gapId":"operator:paint.face_select_linked","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01732","gapId":"operator:paint.face_select_linked_pick","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01733","gapId":"operator:paint.face_select_loop","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01734","gapId":"operator:paint.face_select_more","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01735","gapId":"operator:paint.face_vert_reveal","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01736","gapId":"operator:paint.grab_clone","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01737","gapId":"operator:paint.hide_show","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01738","gapId":"operator:paint.hide_show_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01739","gapId":"operator:paint.hide_show_lasso_gesture","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01740","gapId":"operator:paint.hide_show_line_gesture","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01741","gapId":"operator:paint.hide_show_masked","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01742","gapId":"operator:paint.hide_show_polyline_gesture","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01743","gapId":"operator:paint.image_from_view","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01744","gapId":"operator:paint.image_paint","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01745","gapId":"operator:paint.mask_box_gesture","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01746","gapId":"operator:paint.mask_flood_fill","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01747","gapId":"operator:paint.mask_lasso_gesture","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01748","gapId":"operator:paint.mask_line_gesture","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01749","gapId":"operator:paint.mask_polyline_gesture","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01750","gapId":"operator:paint.project_image","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01751","gapId":"operator:paint.sample_color","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01752","gapId":"operator:paint.texture_paint_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01753","gapId":"operator:paint.vert_select_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01754","gapId":"operator:paint.vert_select_hide","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01755","gapId":"operator:paint.vert_select_less","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01756","gapId":"operator:paint.vert_select_linked","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01757","gapId":"operator:paint.vert_select_linked_pick","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01758","gapId":"operator:paint.vert_select_loop","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01759","gapId":"operator:paint.vert_select_more","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01760","gapId":"operator:paint.vert_select_ungrouped","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01761","gapId":"operator:paint.vertex_color_brightness_contrast","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01762","gapId":"operator:paint.vertex_color_dirt","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01763","gapId":"operator:paint.vertex_color_from_weight","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01764","gapId":"operator:paint.vertex_color_hsv","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01765","gapId":"operator:paint.vertex_color_invert","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01766","gapId":"operator:paint.vertex_color_levels","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01767","gapId":"operator:paint.vertex_color_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01768","gapId":"operator:paint.vertex_color_smooth","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01769","gapId":"operator:paint.vertex_paint","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01770","gapId":"operator:paint.vertex_paint_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01771","gapId":"operator:paint.visibility_filter","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01772","gapId":"operator:paint.visibility_invert","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01773","gapId":"operator:paint.weight_from_bones","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01774","gapId":"operator:paint.weight_gradient","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01775","gapId":"operator:paint.weight_paint","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01776","gapId":"operator:paint.weight_paint_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01777","gapId":"operator:paint.weight_sample","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01778","gapId":"operator:paint.weight_sample_group","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01779","gapId":"operator:paint.weight_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01780","gapId":"operator:paintcurve.add_point","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01781","gapId":"operator:paintcurve.add_point_slide","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01782","gapId":"operator:paintcurve.cursor","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01783","gapId":"operator:paintcurve.delete_point","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01784","gapId":"operator:paintcurve.draw","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01785","gapId":"operator:paintcurve.new","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01786","gapId":"operator:paintcurve.select","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01787","gapId":"operator:paintcurve.slide","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01788","gapId":"operator:palette.color_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01789","gapId":"operator:palette.color_delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01790","gapId":"operator:palette.color_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01791","gapId":"operator:palette.extract_from_image","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01792","gapId":"operator:palette.join","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01793","gapId":"operator:palette.new","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01794","gapId":"operator:palette.sort","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01795","gapId":"operator:particle.brush_edit","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01796","gapId":"operator:particle.connect_hair","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01797","gapId":"operator:particle.copy_particle_systems","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01798","gapId":"operator:particle.delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01799","gapId":"operator:particle.disconnect_hair","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01800","gapId":"operator:particle.duplicate_particle_system","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01801","gapId":"operator:particle.dupliob_copy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01802","gapId":"operator:particle.dupliob_move_down","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01803","gapId":"operator:particle.dupliob_move_up","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01804","gapId":"operator:particle.dupliob_refresh","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01805","gapId":"operator:particle.dupliob_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01806","gapId":"operator:particle.edited_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01807","gapId":"operator:particle.hair_dynamics_preset_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01808","gapId":"operator:particle.hide","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01809","gapId":"operator:particle.mirror","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01810","gapId":"operator:particle.new","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01811","gapId":"operator:particle.new_target","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01812","gapId":"operator:particle.particle_edit_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01813","gapId":"operator:particle.particle_system_remove_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01814","gapId":"operator:particle.rekey","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01815","gapId":"operator:particle.remove_doubles","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01816","gapId":"operator:particle.reveal","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01817","gapId":"operator:particle.select_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01818","gapId":"operator:particle.select_less","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01819","gapId":"operator:particle.select_linked","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01820","gapId":"operator:particle.select_linked_pick","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01821","gapId":"operator:particle.select_more","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01822","gapId":"operator:particle.select_random","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01823","gapId":"operator:particle.select_roots","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01824","gapId":"operator:particle.select_tips","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01825","gapId":"operator:particle.shape_cut","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01826","gapId":"operator:particle.subdivide","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01827","gapId":"operator:particle.target_move_down","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01828","gapId":"operator:particle.target_move_up","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01829","gapId":"operator:particle.target_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01830","gapId":"operator:particle.unify_length","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01831","gapId":"operator:particle.weight_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01832","gapId":"operator:pointcloud.attribute_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01833","gapId":"operator:pointcloud.delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01834","gapId":"operator:pointcloud.duplicate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01835","gapId":"operator:pointcloud.duplicate_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01836","gapId":"operator:pointcloud.select_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01837","gapId":"operator:pointcloud.select_random","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01838","gapId":"operator:pointcloud.separate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01839","gapId":"operator:pose.armature_apply","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01840","gapId":"operator:pose.autoside_names","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01841","gapId":"operator:pose.blend_to_neighbor","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01842","gapId":"operator:pose.blend_with_rest","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01843","gapId":"operator:pose.breakdown","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01844","gapId":"operator:pose.constraint_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01845","gapId":"operator:pose.constraint_add_with_targets","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01846","gapId":"operator:pose.constraints_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01847","gapId":"operator:pose.constraints_copy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01848","gapId":"operator:pose.copy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01849","gapId":"operator:pose.flip_names","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01850","gapId":"operator:pose.hide","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01851","gapId":"operator:pose.ik_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01852","gapId":"operator:pose.ik_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01853","gapId":"operator:pose.loc_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01854","gapId":"operator:pose.paste","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01855","gapId":"operator:pose.paths_calculate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01856","gapId":"operator:pose.paths_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01857","gapId":"operator:pose.paths_range_update","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01858","gapId":"operator:pose.paths_update","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01859","gapId":"operator:pose.propagate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01860","gapId":"operator:pose.push","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01861","gapId":"operator:pose.quaternions_flip","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01862","gapId":"operator:pose.relax","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01863","gapId":"operator:pose.reveal","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01864","gapId":"operator:pose.rot_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01865","gapId":"operator:pose.rotation_mode_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01866","gapId":"operator:pose.scale_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01867","gapId":"operator:pose.select_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01868","gapId":"operator:pose.select_constraint_target","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01869","gapId":"operator:pose.select_grouped","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01870","gapId":"operator:pose.select_hierarchy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01871","gapId":"operator:pose.select_linked","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01872","gapId":"operator:pose.select_linked_pick","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01873","gapId":"operator:pose.select_mirror","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01874","gapId":"operator:pose.select_parent","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01875","gapId":"operator:pose.selection_set_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01876","gapId":"operator:pose.selection_set_add_and_assign","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01877","gapId":"operator:pose.selection_set_assign","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01878","gapId":"operator:pose.selection_set_copy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01879","gapId":"operator:pose.selection_set_delete_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01880","gapId":"operator:pose.selection_set_deselect","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01881","gapId":"operator:pose.selection_set_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01882","gapId":"operator:pose.selection_set_paste","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01883","gapId":"operator:pose.selection_set_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01884","gapId":"operator:pose.selection_set_remove_bones","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01885","gapId":"operator:pose.selection_set_select","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01886","gapId":"operator:pose.selection_set_unassign","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01887","gapId":"operator:pose.transforms_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01888","gapId":"operator:pose.user_transforms_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01889","gapId":"operator:pose.visual_transform_apply","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01890","gapId":"operator:poselib.apply_pose_asset","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01891","gapId":"operator:poselib.asset_delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01892","gapId":"operator:poselib.asset_modify","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01893","gapId":"operator:poselib.blend_pose_asset","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01894","gapId":"operator:poselib.copy_as_asset","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01895","gapId":"operator:poselib.create_pose_asset","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01896","gapId":"operator:poselib.paste_asset","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01897","gapId":"operator:poselib.pose_asset_select_bones","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01898","gapId":"operator:poselib.restore_previous_action","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01899","gapId":"operator:preferences.addon_disable","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01900","gapId":"operator:preferences.addon_enable","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01901","gapId":"operator:preferences.addon_expand","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01902","gapId":"operator:preferences.addon_install","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01903","gapId":"operator:preferences.addon_refresh","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01904","gapId":"operator:preferences.addon_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01905","gapId":"operator:preferences.addon_show","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01906","gapId":"operator:preferences.app_template_install","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01907","gapId":"operator:preferences.asset_library_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01908","gapId":"operator:preferences.asset_library_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01909","gapId":"operator:preferences.associate_blend","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01910","gapId":"operator:preferences.autoexec_path_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01911","gapId":"operator:preferences.autoexec_path_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01912","gapId":"operator:preferences.clear_filter","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01913","gapId":"operator:preferences.copy_prev","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01914","gapId":"operator:preferences.extension_repo_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01915","gapId":"operator:preferences.extension_repo_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01916","gapId":"operator:preferences.extension_url_drop","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01917","gapId":"operator:preferences.keyconfig_activate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01918","gapId":"operator:preferences.keyconfig_export","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01919","gapId":"operator:preferences.keyconfig_import","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01920","gapId":"operator:preferences.keyconfig_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01921","gapId":"operator:preferences.keyconfig_test","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01922","gapId":"operator:preferences.keyitem_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01923","gapId":"operator:preferences.keyitem_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01924","gapId":"operator:preferences.keyitem_restore","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01925","gapId":"operator:preferences.keymap_restore","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01926","gapId":"operator:preferences.reset_default_theme","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01927","gapId":"operator:preferences.script_directory_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01928","gapId":"operator:preferences.script_directory_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01929","gapId":"operator:preferences.start_filter","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01930","gapId":"operator:preferences.studiolight_copy_settings","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01931","gapId":"operator:preferences.studiolight_install","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01932","gapId":"operator:preferences.studiolight_new","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01933","gapId":"operator:preferences.studiolight_uninstall","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01934","gapId":"operator:preferences.theme_install","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01935","gapId":"operator:preferences.unassociate_blend","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01936","gapId":"operator:ptcache.add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01937","gapId":"operator:ptcache.bake","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01938","gapId":"operator:ptcache.bake_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01939","gapId":"operator:ptcache.bake_from_cache","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01940","gapId":"operator:ptcache.free_bake","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01941","gapId":"operator:ptcache.free_bake_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01942","gapId":"operator:ptcache.remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01943","gapId":"operator:render.clear_texture_cache","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01944","gapId":"operator:render.color_management_white_balance_preset_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01945","gapId":"operator:render.cycles_integrator_preset_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01946","gapId":"operator:render.cycles_performance_preset_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01947","gapId":"operator:render.cycles_sampling_preset_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01948","gapId":"operator:render.cycles_viewport_sampling_preset_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01949","gapId":"operator:render.eevee_raytracing_preset_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01950","gapId":"operator:render.generate_texture_cache","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01951","gapId":"operator:render.opengl","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01952","gapId":"operator:render.play_rendered_anim","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01953","gapId":"operator:render.preset_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01954","gapId":"operator:render.render","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01955","gapId":"operator:render.shutter_curve_preset","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01956","gapId":"operator:render.swap_dimensions","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01957","gapId":"operator:render.view_cancel","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01958","gapId":"operator:render.view_show","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01959","gapId":"operator:rigidbody.bake_to_keyframes","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01960","gapId":"operator:rigidbody.connect","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01961","gapId":"operator:rigidbody.constraint_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01962","gapId":"operator:rigidbody.constraint_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01963","gapId":"operator:rigidbody.mass_calculate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01964","gapId":"operator:rigidbody.object_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01965","gapId":"operator:rigidbody.object_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01966","gapId":"operator:rigidbody.object_settings_copy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01967","gapId":"operator:rigidbody.objects_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01968","gapId":"operator:rigidbody.objects_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01969","gapId":"operator:rigidbody.shape_change","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01970","gapId":"operator:rigidbody.world_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01971","gapId":"operator:rigidbody.world_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01972","gapId":"operator:scene.delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01973","gapId":"operator:scene.drop_scene_asset","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01974","gapId":"operator:scene.freestyle_add_edge_marks_to_keying_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01975","gapId":"operator:scene.freestyle_add_face_marks_to_keying_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01976","gapId":"operator:scene.freestyle_alpha_modifier_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01977","gapId":"operator:scene.freestyle_color_modifier_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01978","gapId":"operator:scene.freestyle_fill_range_by_selection","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01979","gapId":"operator:scene.freestyle_geometry_modifier_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01980","gapId":"operator:scene.freestyle_lineset_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01981","gapId":"operator:scene.freestyle_lineset_copy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01982","gapId":"operator:scene.freestyle_lineset_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01983","gapId":"operator:scene.freestyle_lineset_paste","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01984","gapId":"operator:scene.freestyle_lineset_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01985","gapId":"operator:scene.freestyle_linestyle_new","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01986","gapId":"operator:scene.freestyle_modifier_copy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01987","gapId":"operator:scene.freestyle_modifier_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01988","gapId":"operator:scene.freestyle_modifier_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01989","gapId":"operator:scene.freestyle_module_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01990","gapId":"operator:scene.freestyle_module_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01991","gapId":"operator:scene.freestyle_module_open","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01992","gapId":"operator:scene.freestyle_module_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01993","gapId":"operator:scene.freestyle_stroke_material_create","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01994","gapId":"operator:scene.freestyle_thickness_modifier_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01995","gapId":"operator:scene.gltf2_action_filter_refresh","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01996","gapId":"operator:scene.gpencil_brush_preset_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01997","gapId":"operator:scene.gpencil_material_preset_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01998","gapId":"operator:scene.new","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-01999","gapId":"operator:scene.new_sequencer","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02000","gapId":"operator:scene.new_sequencer_scene","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02001","gapId":"operator:scene.render_view_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02002","gapId":"operator:scene.render_view_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02003","gapId":"operator:scene.view_layer_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02004","gapId":"operator:scene.view_layer_add_aov","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02005","gapId":"operator:scene.view_layer_add_lightgroup","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02006","gapId":"operator:scene.view_layer_add_used_lightgroups","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02007","gapId":"operator:scene.view_layer_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02008","gapId":"operator:scene.view_layer_remove_aov","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02009","gapId":"operator:scene.view_layer_remove_lightgroup","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02010","gapId":"operator:scene.view_layer_remove_unused_lightgroups","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02011","gapId":"operator:screen.actionzone","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02012","gapId":"operator:screen.animation_cancel","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02013","gapId":"operator:screen.animation_pause","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02014","gapId":"operator:screen.animation_play","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02015","gapId":"operator:screen.animation_step","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02016","gapId":"operator:screen.area_close","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02017","gapId":"operator:screen.area_dupli","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02018","gapId":"operator:screen.area_join","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02019","gapId":"operator:screen.area_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02020","gapId":"operator:screen.area_options","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02021","gapId":"operator:screen.area_split","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02022","gapId":"operator:screen.area_swap","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02023","gapId":"operator:screen.back_to_previous","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02024","gapId":"operator:screen.delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02025","gapId":"operator:screen.drivers_editor_show","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02026","gapId":"operator:screen.edge_merge","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02027","gapId":"operator:screen.frame_jump","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02028","gapId":"operator:screen.frame_offset","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02029","gapId":"operator:screen.header_toggle_menus","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02030","gapId":"operator:screen.info_log_show","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02031","gapId":"operator:screen.keyframe_jump","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02032","gapId":"operator:screen.marker_jump","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02033","gapId":"operator:screen.new","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02034","gapId":"operator:screen.quadview_size","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02035","gapId":"operator:screen.redo_last","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02036","gapId":"operator:screen.region_blend","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02037","gapId":"operator:screen.region_context_menu","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02038","gapId":"operator:screen.region_flip","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02039","gapId":"operator:screen.region_quadview","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02040","gapId":"operator:screen.region_scale","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02041","gapId":"operator:screen.region_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02042","gapId":"operator:screen.repeat_history","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02043","gapId":"operator:screen.repeat_last","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02044","gapId":"operator:screen.screen_full_area","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02045","gapId":"operator:screen.screen_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02046","gapId":"operator:screen.screenshot","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02047","gapId":"operator:screen.screenshot_area","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02048","gapId":"operator:screen.space_context_cycle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02049","gapId":"operator:screen.space_type_set_or_cycle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02050","gapId":"operator:screen.spacedata_cleanup","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02051","gapId":"operator:screen.time_jump","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02052","gapId":"operator:screen.userpref_show","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02053","gapId":"operator:screen.workspace_cycle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02054","gapId":"operator:script.execute_preset","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02055","gapId":"operator:script.python_file_run","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02056","gapId":"operator:script.reload","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02057","gapId":"operator:sculpt.brush_stroke","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02058","gapId":"operator:sculpt.cloth_filter","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02059","gapId":"operator:sculpt.color_filter","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02060","gapId":"operator:sculpt.detail_flood_fill","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02061","gapId":"operator:sculpt.dynamic_topology_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02062","gapId":"operator:sculpt.dyntopo_detail_size_edit","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02063","gapId":"operator:sculpt.expand","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02064","gapId":"operator:sculpt.face_set_box_gesture","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02065","gapId":"operator:sculpt.face_set_change_visibility","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02066","gapId":"operator:sculpt.face_set_edit","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02067","gapId":"operator:sculpt.face_set_extract","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02068","gapId":"operator:sculpt.face_set_lasso_gesture","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02069","gapId":"operator:sculpt.face_set_line_gesture","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02070","gapId":"operator:sculpt.face_set_polyline_gesture","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02071","gapId":"operator:sculpt.face_sets_create","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02072","gapId":"operator:sculpt.face_sets_init","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02073","gapId":"operator:sculpt.face_sets_randomize_colors","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02074","gapId":"operator:sculpt.mask_by_color","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02075","gapId":"operator:sculpt.mask_filter","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02076","gapId":"operator:sculpt.mask_from_boundary","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02077","gapId":"operator:sculpt.mask_from_cavity","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02078","gapId":"operator:sculpt.mask_init","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02079","gapId":"operator:sculpt.mesh_filter","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02080","gapId":"operator:sculpt.optimize","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02081","gapId":"operator:sculpt.paint_mask_extract","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02082","gapId":"operator:sculpt.paint_mask_slice","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02083","gapId":"operator:sculpt.project_line_gesture","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02084","gapId":"operator:sculpt.sample_detail_size","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02085","gapId":"operator:sculpt.sculptmode_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02086","gapId":"operator:sculpt.set_persistent_base","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02087","gapId":"operator:sculpt.set_pivot_position","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02088","gapId":"operator:sculpt.symmetrize","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02089","gapId":"operator:sculpt.trim_box_gesture","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02090","gapId":"operator:sculpt.trim_lasso_gesture","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02091","gapId":"operator:sculpt.trim_line_gesture","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02092","gapId":"operator:sculpt.trim_polyline_gesture","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02093","gapId":"operator:sculpt.uv_sculpt_grab","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02094","gapId":"operator:sculpt.uv_sculpt_pinch","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02095","gapId":"operator:sculpt.uv_sculpt_relax","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02096","gapId":"operator:sculpt_curves.brush_stroke","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02097","gapId":"operator:sculpt_curves.min_distance_edit","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02098","gapId":"operator:sculpt_curves.select_grow","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02099","gapId":"operator:sculpt_curves.select_random","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02100","gapId":"operator:sequencer.add_scene_strip_from_scene_asset","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02101","gapId":"operator:sequencer.box_blade","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02102","gapId":"operator:sequencer.change_effect_type","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02103","gapId":"operator:sequencer.change_path","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02104","gapId":"operator:sequencer.change_scene","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02105","gapId":"operator:sequencer.connect","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02106","gapId":"operator:sequencer.copy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02107","gapId":"operator:sequencer.crossfade_sounds","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02108","gapId":"operator:sequencer.cursor_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02109","gapId":"operator:sequencer.deinterlace_selected_movies","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02110","gapId":"operator:sequencer.delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02111","gapId":"operator:sequencer.disconnect","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02112","gapId":"operator:sequencer.duplicate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02113","gapId":"operator:sequencer.duplicate_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02114","gapId":"operator:sequencer.duplicate_move_linked","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02115","gapId":"operator:sequencer.effect_strip_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02116","gapId":"operator:sequencer.enable_proxies","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02117","gapId":"operator:sequencer.export_subtitles","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02118","gapId":"operator:sequencer.fades_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02119","gapId":"operator:sequencer.fades_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02120","gapId":"operator:sequencer.gap_insert","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02121","gapId":"operator:sequencer.gap_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02122","gapId":"operator:sequencer.image_strip_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02123","gapId":"operator:sequencer.images_separate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02124","gapId":"operator:sequencer.lock","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02125","gapId":"operator:sequencer.mask_strip_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02126","gapId":"operator:sequencer.meta_make","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02127","gapId":"operator:sequencer.meta_separate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02128","gapId":"operator:sequencer.meta_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02129","gapId":"operator:sequencer.movie_strip_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02130","gapId":"operator:sequencer.movieclip_strip_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02131","gapId":"operator:sequencer.mute","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02132","gapId":"operator:sequencer.offset_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02133","gapId":"operator:sequencer.paste","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02134","gapId":"operator:sequencer.preview_duplicate_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02135","gapId":"operator:sequencer.preview_duplicate_move_linked","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02136","gapId":"operator:sequencer.reassign_inputs","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02137","gapId":"operator:sequencer.rebuild_proxy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02138","gapId":"operator:sequencer.refresh_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02139","gapId":"operator:sequencer.reload","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02140","gapId":"operator:sequencer.rename_channel","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02141","gapId":"operator:sequencer.rendersize","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02142","gapId":"operator:sequencer.retiming_add_freeze_frame_slide","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02143","gapId":"operator:sequencer.retiming_add_transition_slide","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02144","gapId":"operator:sequencer.retiming_freeze_frame_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02145","gapId":"operator:sequencer.retiming_key_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02146","gapId":"operator:sequencer.retiming_key_delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02147","gapId":"operator:sequencer.retiming_reset","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02148","gapId":"operator:sequencer.retiming_segment_speed_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02149","gapId":"operator:sequencer.retiming_show","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02150","gapId":"operator:sequencer.retiming_transition_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02151","gapId":"operator:sequencer.sample","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02152","gapId":"operator:sequencer.scene_frame_range_update","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02153","gapId":"operator:sequencer.scene_strip_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02154","gapId":"operator:sequencer.scene_strip_add_new","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02155","gapId":"operator:sequencer.select","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02156","gapId":"operator:sequencer.select_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02157","gapId":"operator:sequencer.select_box","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02158","gapId":"operator:sequencer.select_circle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02159","gapId":"operator:sequencer.select_grouped","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02160","gapId":"operator:sequencer.select_handle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02161","gapId":"operator:sequencer.select_handles","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02162","gapId":"operator:sequencer.select_lasso","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02163","gapId":"operator:sequencer.select_less","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02164","gapId":"operator:sequencer.select_linked","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02165","gapId":"operator:sequencer.select_linked_pick","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02166","gapId":"operator:sequencer.select_more","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02167","gapId":"operator:sequencer.select_side","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02168","gapId":"operator:sequencer.select_side_of_frame","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02169","gapId":"operator:sequencer.set_range_to_strips","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02170","gapId":"operator:sequencer.slip","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02171","gapId":"operator:sequencer.snap","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02172","gapId":"operator:sequencer.sound_strip_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02173","gapId":"operator:sequencer.split","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02174","gapId":"operator:sequencer.split_multicam","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02175","gapId":"operator:sequencer.strip_color_tag_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02176","gapId":"operator:sequencer.strip_jump","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02177","gapId":"operator:sequencer.strip_modifier_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02178","gapId":"operator:sequencer.strip_modifier_add_node_group","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02179","gapId":"operator:sequencer.strip_modifier_copy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02180","gapId":"operator:sequencer.strip_modifier_duplicate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02181","gapId":"operator:sequencer.strip_modifier_equalizer_redefine","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02182","gapId":"operator:sequencer.strip_modifier_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02183","gapId":"operator:sequencer.strip_modifier_move_to_index","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02184","gapId":"operator:sequencer.strip_modifier_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02185","gapId":"operator:sequencer.strip_modifier_set_active","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02186","gapId":"operator:sequencer.strip_transform_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02187","gapId":"operator:sequencer.strip_transform_fit","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02188","gapId":"operator:sequencer.swap","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02189","gapId":"operator:sequencer.swap_data","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02190","gapId":"operator:sequencer.swap_inputs","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02191","gapId":"operator:sequencer.text_cursor_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02192","gapId":"operator:sequencer.text_cursor_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02193","gapId":"operator:sequencer.text_delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02194","gapId":"operator:sequencer.text_deselect_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02195","gapId":"operator:sequencer.text_edit_copy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02196","gapId":"operator:sequencer.text_edit_cut","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02197","gapId":"operator:sequencer.text_edit_mode_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02198","gapId":"operator:sequencer.text_edit_paste","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02199","gapId":"operator:sequencer.text_insert","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02200","gapId":"operator:sequencer.text_line_break","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02201","gapId":"operator:sequencer.text_select_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02202","gapId":"operator:sequencer.text_strip_style_preset_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02203","gapId":"operator:sequencer.unlock","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02204","gapId":"operator:sequencer.unmute","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02205","gapId":"operator:sequencer.view_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02206","gapId":"operator:sequencer.view_all_preview","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02207","gapId":"operator:sequencer.view_frame","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02208","gapId":"operator:sequencer.view_ghost_border","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02209","gapId":"operator:sequencer.view_selected","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02210","gapId":"operator:sequencer.view_zoom_ratio","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02211","gapId":"operator:sound.bake_animation","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02212","gapId":"operator:sound.mixdown","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02213","gapId":"operator:sound.open","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02214","gapId":"operator:sound.open_mono","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02215","gapId":"operator:sound.pack","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02216","gapId":"operator:sound.unpack","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02217","gapId":"operator:sound.update_animation_flags","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02218","gapId":"operator:spreadsheet.add_row_filter_rule","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02219","gapId":"operator:spreadsheet.change_spreadsheet_data_source","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02220","gapId":"operator:spreadsheet.fit_column","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02221","gapId":"operator:spreadsheet.remove_row_filter_rule","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02222","gapId":"operator:spreadsheet.reorder_columns","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02223","gapId":"operator:spreadsheet.resize_column","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02224","gapId":"operator:spreadsheet.toggle_pin","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02225","gapId":"operator:surface.primitive_nurbs_surface_circle_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02226","gapId":"operator:surface.primitive_nurbs_surface_curve_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02227","gapId":"operator:surface.primitive_nurbs_surface_cylinder_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02228","gapId":"operator:surface.primitive_nurbs_surface_sphere_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02229","gapId":"operator:surface.primitive_nurbs_surface_surface_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02230","gapId":"operator:surface.primitive_nurbs_surface_torus_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02231","gapId":"operator:text.autocomplete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02232","gapId":"operator:text.comment_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02233","gapId":"operator:text.convert_whitespace","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02234","gapId":"operator:text.copy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02235","gapId":"operator:text.cursor_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02236","gapId":"operator:text.cut","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02237","gapId":"operator:text.delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02238","gapId":"operator:text.duplicate_line","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02239","gapId":"operator:text.find","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02240","gapId":"operator:text.find_set_selected","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02241","gapId":"operator:text.indent","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02242","gapId":"operator:text.indent_or_autocomplete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02243","gapId":"operator:text.insert","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02244","gapId":"operator:text.jump","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02245","gapId":"operator:text.jump_to_file_at_point","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02246","gapId":"operator:text.line_break","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02247","gapId":"operator:text.line_number","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02248","gapId":"operator:text.make_internal","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02249","gapId":"operator:text.move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02250","gapId":"operator:text.move_lines","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02251","gapId":"operator:text.move_select","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02252","gapId":"operator:text.new","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02253","gapId":"operator:text.open","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02254","gapId":"operator:text.overwrite_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02255","gapId":"operator:text.paste","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02256","gapId":"operator:text.reload","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02257","gapId":"operator:text.replace","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02258","gapId":"operator:text.replace_set_selected","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02259","gapId":"operator:text.resolve_conflict","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02260","gapId":"operator:text.run_script","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02261","gapId":"operator:text.save","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02262","gapId":"operator:text.save_as","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02263","gapId":"operator:text.scroll","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02264","gapId":"operator:text.scroll_bar","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02265","gapId":"operator:text.select_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02266","gapId":"operator:text.select_line","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02267","gapId":"operator:text.select_word","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02268","gapId":"operator:text.selection_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02269","gapId":"operator:text.start_find","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02270","gapId":"operator:text.to_3d_object","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02271","gapId":"operator:text.unindent","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02272","gapId":"operator:text.unlink","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02273","gapId":"operator:text.update_shader","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02274","gapId":"operator:text_editor.preset_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02275","gapId":"operator:texture.new","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02276","gapId":"operator:texture.slot_copy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02277","gapId":"operator:texture.slot_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02278","gapId":"operator:texture.slot_paste","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02279","gapId":"operator:transform.bbone_resize","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02280","gapId":"operator:transform.bend","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02281","gapId":"operator:transform.create_orientation","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02282","gapId":"operator:transform.delete_orientation","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02283","gapId":"operator:transform.edge_bevelweight","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02284","gapId":"operator:transform.edge_crease","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02285","gapId":"operator:transform.edge_slide","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02286","gapId":"operator:transform.from_gizmo","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02287","gapId":"operator:transform.mirror","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02288","gapId":"operator:transform.push_pull","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02289","gapId":"operator:transform.resize","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02290","gapId":"operator:transform.rotate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02291","gapId":"operator:transform.rotate_normal","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02292","gapId":"operator:transform.select_orientation","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02293","gapId":"operator:transform.seq_slide","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02294","gapId":"operator:transform.shear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02295","gapId":"operator:transform.shrink_fatten","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02296","gapId":"operator:transform.skin_resize","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02297","gapId":"operator:transform.tilt","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02298","gapId":"operator:transform.tosphere","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02299","gapId":"operator:transform.trackball","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02300","gapId":"operator:transform.transform","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02301","gapId":"operator:transform.translate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02302","gapId":"operator:transform.vert_crease","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02303","gapId":"operator:transform.vert_slide","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02304","gapId":"operator:transform.vertex_random","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02305","gapId":"operator:transform.vertex_warp","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02306","gapId":"operator:ui.assign_default_button","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02307","gapId":"operator:ui.button_execute","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02308","gapId":"operator:ui.button_string_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02309","gapId":"operator:ui.copy_as_driver_button","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02310","gapId":"operator:ui.copy_data_path_button","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02311","gapId":"operator:ui.copy_driver_to_selected_button","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02312","gapId":"operator:ui.copy_python_command_button","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02313","gapId":"operator:ui.copy_to_selected_button","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02314","gapId":"operator:ui.drop_color","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02315","gapId":"operator:ui.drop_material","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02316","gapId":"operator:ui.drop_name","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02317","gapId":"operator:ui.editsource","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02318","gapId":"operator:ui.eyedropper_bone","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02319","gapId":"operator:ui.eyedropper_color","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02320","gapId":"operator:ui.eyedropper_colorramp","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02321","gapId":"operator:ui.eyedropper_colorramp_point","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02322","gapId":"operator:ui.eyedropper_depth","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02323","gapId":"operator:ui.eyedropper_driver","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02324","gapId":"operator:ui.eyedropper_grease_pencil_color","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02325","gapId":"operator:ui.eyedropper_id","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02326","gapId":"operator:ui.jump_to_target_button","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02327","gapId":"operator:ui.list_start_filter","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02328","gapId":"operator:ui.override_add_button","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02329","gapId":"operator:ui.override_idtemplate_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02330","gapId":"operator:ui.override_idtemplate_make","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02331","gapId":"operator:ui.override_idtemplate_reset","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02332","gapId":"operator:ui.override_remove_button","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02333","gapId":"operator:ui.reloadtranslation","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02334","gapId":"operator:ui.reset_default_button","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02335","gapId":"operator:ui.unset_property_button","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02336","gapId":"operator:ui.view_drop","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02337","gapId":"operator:ui.view_item_delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02338","gapId":"operator:ui.view_item_focus","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02339","gapId":"operator:ui.view_item_navigate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02340","gapId":"operator:ui.view_item_rename","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02341","gapId":"operator:ui.view_item_select","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02342","gapId":"operator:ui.view_scroll","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02343","gapId":"operator:ui.view_start_filter","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02344","gapId":"operator:uilist.entry_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02345","gapId":"operator:uilist.entry_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02346","gapId":"operator:uilist.entry_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02347","gapId":"operator:uv.align","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02348","gapId":"operator:uv.align_rotation","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02349","gapId":"operator:uv.arrange_islands","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02350","gapId":"operator:uv.average_islands_scale","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02351","gapId":"operator:uv.copy","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02352","gapId":"operator:uv.copy_mirrored_faces","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02353","gapId":"operator:uv.cube_project","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02354","gapId":"operator:uv.cursor_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02355","gapId":"operator:uv.custom_region_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02356","gapId":"operator:uv.cylinder_project","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02357","gapId":"operator:uv.export_layout","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02358","gapId":"operator:uv.follow_active_quads","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02359","gapId":"operator:uv.hide","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02360","gapId":"operator:uv.lightmap_pack","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02361","gapId":"operator:uv.mark_seam","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02362","gapId":"operator:uv.minimize_stretch","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02363","gapId":"operator:uv.move_on_axis","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02364","gapId":"operator:uv.pack_islands","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02365","gapId":"operator:uv.paste","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02366","gapId":"operator:uv.pin","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02367","gapId":"operator:uv.project_from_view","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02368","gapId":"operator:uv.randomize_uv_transform","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02369","gapId":"operator:uv.remove_doubles","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02370","gapId":"operator:uv.reset","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02371","gapId":"operator:uv.reveal","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02372","gapId":"operator:uv.rip","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02373","gapId":"operator:uv.rip_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02374","gapId":"operator:uv.seams_from_islands","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02375","gapId":"operator:uv.select","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02376","gapId":"operator:uv.select_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02377","gapId":"operator:uv.select_box","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02378","gapId":"operator:uv.select_by_winding","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02379","gapId":"operator:uv.select_circle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02380","gapId":"operator:uv.select_edge_ring","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02381","gapId":"operator:uv.select_lasso","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02382","gapId":"operator:uv.select_less","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02383","gapId":"operator:uv.select_linked","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02384","gapId":"operator:uv.select_linked_pick","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02385","gapId":"operator:uv.select_loop","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02386","gapId":"operator:uv.select_mode","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02387","gapId":"operator:uv.select_more","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02388","gapId":"operator:uv.select_overlap","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02389","gapId":"operator:uv.select_pinned","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02390","gapId":"operator:uv.select_similar","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02391","gapId":"operator:uv.select_split","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02392","gapId":"operator:uv.select_tile","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02393","gapId":"operator:uv.shortest_path_pick","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02394","gapId":"operator:uv.shortest_path_select","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02395","gapId":"operator:uv.smart_project","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02396","gapId":"operator:uv.snap_cursor","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02397","gapId":"operator:uv.snap_selected","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02398","gapId":"operator:uv.sphere_project","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02399","gapId":"operator:uv.stitch","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02400","gapId":"operator:uv.unwrap","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02401","gapId":"operator:uv.weld","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02402","gapId":"operator:view2d.edge_pan","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02403","gapId":"operator:view2d.ndof","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02404","gapId":"operator:view2d.pan","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02405","gapId":"operator:view2d.reset","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02406","gapId":"operator:view2d.scroll_down","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02407","gapId":"operator:view2d.scroll_left","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02408","gapId":"operator:view2d.scroll_right","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02409","gapId":"operator:view2d.scroll_up","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02410","gapId":"operator:view2d.scroller_activate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02411","gapId":"operator:view2d.smoothview","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02412","gapId":"operator:view2d.zoom","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02413","gapId":"operator:view2d.zoom_border","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02414","gapId":"operator:view2d.zoom_in","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02415","gapId":"operator:view2d.zoom_out","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02416","gapId":"operator:view3d.bone_select_menu","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02417","gapId":"operator:view3d.camera_background_image_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02418","gapId":"operator:view3d.camera_background_image_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02419","gapId":"operator:view3d.camera_to_view","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02420","gapId":"operator:view3d.camera_to_view_selected","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02421","gapId":"operator:view3d.clear_render_border","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02422","gapId":"operator:view3d.clip_border","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02423","gapId":"operator:view3d.copybuffer","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02424","gapId":"operator:view3d.cursor3d","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02425","gapId":"operator:view3d.dolly","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02426","gapId":"operator:view3d.drop_world","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02427","gapId":"operator:view3d.edit_mesh_extrude_individual_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02428","gapId":"operator:view3d.edit_mesh_extrude_manifold_normal","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02429","gapId":"operator:view3d.edit_mesh_extrude_move_normal","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02430","gapId":"operator:view3d.edit_mesh_extrude_move_shrink_fatten","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02431","gapId":"operator:view3d.fly","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02432","gapId":"operator:view3d.interactive_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02433","gapId":"operator:view3d.localview","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02434","gapId":"operator:view3d.localview_remove_from","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02435","gapId":"operator:view3d.move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02436","gapId":"operator:view3d.navigate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02437","gapId":"operator:view3d.ndof_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02438","gapId":"operator:view3d.ndof_orbit","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02439","gapId":"operator:view3d.ndof_orbit_zoom","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02440","gapId":"operator:view3d.ndof_pan","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02441","gapId":"operator:view3d.object_as_camera","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02442","gapId":"operator:view3d.object_mode_pie_or_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02443","gapId":"operator:view3d.pastebuffer","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02444","gapId":"operator:view3d.render_border","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02445","gapId":"operator:view3d.rotate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02446","gapId":"operator:view3d.ruler_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02447","gapId":"operator:view3d.ruler_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02448","gapId":"operator:view3d.select","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02449","gapId":"operator:view3d.select_box","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02450","gapId":"operator:view3d.select_circle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02451","gapId":"operator:view3d.select_lasso","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02452","gapId":"operator:view3d.select_menu","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02453","gapId":"operator:view3d.smoothview","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02454","gapId":"operator:view3d.snap_cursor_to_active","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02455","gapId":"operator:view3d.snap_cursor_to_center","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02456","gapId":"operator:view3d.snap_cursor_to_grid","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02457","gapId":"operator:view3d.snap_cursor_to_selected","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02458","gapId":"operator:view3d.snap_selected_to_active","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02459","gapId":"operator:view3d.snap_selected_to_cursor","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02460","gapId":"operator:view3d.snap_selected_to_grid","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02461","gapId":"operator:view3d.toggle_matcap_flip","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02462","gapId":"operator:view3d.toggle_shading","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02463","gapId":"operator:view3d.toggle_xray","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02464","gapId":"operator:view3d.transform_gizmo_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02465","gapId":"operator:view3d.view_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02466","gapId":"operator:view3d.view_axis","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02467","gapId":"operator:view3d.view_camera","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02468","gapId":"operator:view3d.view_center_camera","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02469","gapId":"operator:view3d.view_center_cursor","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02470","gapId":"operator:view3d.view_center_lock","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02471","gapId":"operator:view3d.view_center_pick","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02472","gapId":"operator:view3d.view_lock_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02473","gapId":"operator:view3d.view_lock_to_active","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02474","gapId":"operator:view3d.view_orbit","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02475","gapId":"operator:view3d.view_pan","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02476","gapId":"operator:view3d.view_persportho","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02477","gapId":"operator:view3d.view_roll","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02478","gapId":"operator:view3d.view_selected","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02479","gapId":"operator:view3d.walk","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02480","gapId":"operator:view3d.zoom","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02481","gapId":"operator:view3d.zoom_border","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02482","gapId":"operator:view3d.zoom_camera_1_to_1","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02483","gapId":"operator:wm.append","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02484","gapId":"operator:wm.batch_rename","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02485","gapId":"operator:wm.blend_strings_utf8_validate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02486","gapId":"operator:wm.call_asset_shelf_popover","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02487","gapId":"operator:wm.call_menu","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02488","gapId":"operator:wm.call_menu_pie","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02489","gapId":"operator:wm.call_panel","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02490","gapId":"operator:wm.clear_recent_files","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02491","gapId":"operator:wm.collection_export_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02492","gapId":"operator:wm.context_collection_boolean_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02493","gapId":"operator:wm.context_cycle_array","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02494","gapId":"operator:wm.context_cycle_enum","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02495","gapId":"operator:wm.context_cycle_int","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02496","gapId":"operator:wm.context_menu_enum","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02497","gapId":"operator:wm.context_modal_mouse","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02498","gapId":"operator:wm.context_pie_enum","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02499","gapId":"operator:wm.context_scale_float","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02500","gapId":"operator:wm.context_scale_int","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02501","gapId":"operator:wm.context_set_boolean","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02502","gapId":"operator:wm.context_set_enum","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02503","gapId":"operator:wm.context_set_float","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02504","gapId":"operator:wm.context_set_id","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02505","gapId":"operator:wm.context_set_int","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02506","gapId":"operator:wm.context_set_string","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02507","gapId":"operator:wm.context_set_value","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02508","gapId":"operator:wm.context_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02509","gapId":"operator:wm.context_toggle_enum","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02510","gapId":"operator:wm.debug_menu","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02511","gapId":"operator:wm.doc_view","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02512","gapId":"operator:wm.doc_view_manual","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02513","gapId":"operator:wm.doc_view_manual_ui_context","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02514","gapId":"operator:wm.drop_blend_file","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02515","gapId":"operator:wm.drop_import_file","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02516","gapId":"operator:wm.fbx_import","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02517","gapId":"operator:wm.grease_pencil_export_svg","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02518","gapId":"operator:wm.grease_pencil_import_svg","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02519","gapId":"operator:wm.id_linked_relocate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02520","gapId":"operator:wm.interface_theme_preset_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02521","gapId":"operator:wm.interface_theme_preset_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02522","gapId":"operator:wm.interface_theme_preset_save","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02523","gapId":"operator:wm.keyconfig_preset_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02524","gapId":"operator:wm.keyconfig_preset_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02525","gapId":"operator:wm.lib_reload","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02526","gapId":"operator:wm.lib_relocate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02527","gapId":"operator:wm.link","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02528","gapId":"operator:wm.memory_statistics","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02529","gapId":"operator:wm.obj_export","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02530","gapId":"operator:wm.obj_import","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02531","gapId":"operator:wm.open_mainfile","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02532","gapId":"operator:wm.operator_cheat_sheet","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02533","gapId":"operator:wm.operator_defaults","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02534","gapId":"operator:wm.operator_pie_enum","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02535","gapId":"operator:wm.operator_preset_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02536","gapId":"operator:wm.operator_presets_cleanup","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02537","gapId":"operator:wm.owner_disable","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02538","gapId":"operator:wm.owner_enable","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02539","gapId":"operator:wm.path_open","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02540","gapId":"operator:wm.ply_export","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02541","gapId":"operator:wm.ply_import","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02542","gapId":"operator:wm.previews_batch_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02543","gapId":"operator:wm.previews_batch_generate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02544","gapId":"operator:wm.previews_clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02545","gapId":"operator:wm.previews_ensure","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02546","gapId":"operator:wm.properties_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02547","gapId":"operator:wm.properties_context_change","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02548","gapId":"operator:wm.properties_edit","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02549","gapId":"operator:wm.properties_edit_value","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02550","gapId":"operator:wm.properties_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02551","gapId":"operator:wm.quit_blender","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02552","gapId":"operator:wm.radial_control","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02553","gapId":"operator:wm.read_factory_settings","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02554","gapId":"operator:wm.read_factory_userpref","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02555","gapId":"operator:wm.read_history","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02556","gapId":"operator:wm.read_homefile","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02557","gapId":"operator:wm.read_userpref","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02558","gapId":"operator:wm.recover_auto_save","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02559","gapId":"operator:wm.recover_last_session","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02560","gapId":"operator:wm.redraw_timer","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02561","gapId":"operator:wm.revert_mainfile","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02562","gapId":"operator:wm.save_as_mainfile","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02563","gapId":"operator:wm.save_auto_save","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02564","gapId":"operator:wm.save_homefile","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02565","gapId":"operator:wm.save_mainfile","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02566","gapId":"operator:wm.save_userpref","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02567","gapId":"operator:wm.search_menu","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02568","gapId":"operator:wm.search_operator","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02569","gapId":"operator:wm.search_single_menu","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02570","gapId":"operator:wm.set_stereo_3d","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02571","gapId":"operator:wm.set_working_color_space","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02572","gapId":"operator:wm.splash","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02573","gapId":"operator:wm.splash_about","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02574","gapId":"operator:wm.stl_export","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02575","gapId":"operator:wm.stl_import","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02576","gapId":"operator:wm.sysinfo","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02577","gapId":"operator:wm.tool_set_by_brush_type","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02578","gapId":"operator:wm.tool_set_by_id","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02579","gapId":"operator:wm.tool_set_by_index","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02580","gapId":"operator:wm.toolbar","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02581","gapId":"operator:wm.toolbar_fallback_pie","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02582","gapId":"operator:wm.toolbar_prompt","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02583","gapId":"operator:wm.url_open","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02584","gapId":"operator:wm.url_open_preset","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02585","gapId":"operator:wm.window_close","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02586","gapId":"operator:wm.window_fullscreen_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02587","gapId":"operator:wm.window_new","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02588","gapId":"operator:wm.window_new_main","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02589","gapId":"operator:workspace.add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02590","gapId":"operator:workspace.append_activate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02591","gapId":"operator:workspace.delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02592","gapId":"operator:workspace.delete_all_others","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02593","gapId":"operator:workspace.duplicate","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02594","gapId":"operator:workspace.reorder_to_back","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02595","gapId":"operator:workspace.reorder_to_front","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02596","gapId":"operator:workspace.scene_pin_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02597","gapId":"operator:world.convert_volume_to_mesh","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02598","gapId":"operator:world.new","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02599","gapId":"rna:Main:BlendData","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02600","gapId":"rna:Main:BlendDataActions","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02601","gapId":"rna:Main:BlendDataAnnotations","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02602","gapId":"rna:Main:BlendDataArmatures","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02603","gapId":"rna:Main:BlendDataBrushes","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02604","gapId":"rna:Main:BlendDataCacheFiles","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02605","gapId":"rna:Main:BlendDataCameras","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02606","gapId":"rna:Main:BlendDataCollections","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02607","gapId":"rna:Main:BlendDataCurves","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02608","gapId":"rna:Main:BlendDataFonts","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02609","gapId":"rna:Main:BlendDataGreasePencilsV3","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02610","gapId":"rna:Main:BlendDataHairCurves","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02611","gapId":"rna:Main:BlendDataImages","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02612","gapId":"rna:Main:BlendDataLattices","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02613","gapId":"rna:Main:BlendDataLibraries","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02614","gapId":"rna:Main:BlendDataLights","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02615","gapId":"rna:Main:BlendDataLineStyles","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02616","gapId":"rna:Main:BlendDataMasks","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02617","gapId":"rna:Main:BlendDataMaterials","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02618","gapId":"rna:Main:BlendDataMeshes","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02619","gapId":"rna:Main:BlendDataMetaBalls","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02620","gapId":"rna:Main:BlendDataMovieClips","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02621","gapId":"rna:Main:BlendDataNodeTrees","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02622","gapId":"rna:Main:BlendDataObjects","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02623","gapId":"rna:Main:BlendDataPaintCurves","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02624","gapId":"rna:Main:BlendDataPalettes","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02625","gapId":"rna:Main:BlendDataParticles","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02626","gapId":"rna:Main:BlendDataPointClouds","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02627","gapId":"rna:Main:BlendDataProbes","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02628","gapId":"rna:Main:BlendDataScenes","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02629","gapId":"rna:Main:BlendDataScreens","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02630","gapId":"rna:Main:BlendDataSounds","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02631","gapId":"rna:Main:BlendDataSpeakers","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02632","gapId":"rna:Main:BlendDataTexts","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02633","gapId":"rna:Main:BlendDataTextures","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02634","gapId":"rna:Main:BlendDataVolumes","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02635","gapId":"rna:Main:BlendDataWindowManagers","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02636","gapId":"rna:Main:BlendDataWorkSpaces","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02637","gapId":"rna:Main:BlendDataWorlds","ownerFamily":"Main","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02638","gapId":"rna:Mesh:Attribute","ownerFamily":"Mesh","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02639","gapId":"rna:Mesh:AttributeGroupMesh","ownerFamily":"Mesh","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02640","gapId":"rna:Mesh:BoolAttribute","ownerFamily":"Mesh","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02641","gapId":"rna:Mesh:ByteColorAttribute","ownerFamily":"Mesh","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02642","gapId":"rna:Mesh:FloatAttribute","ownerFamily":"Mesh","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02643","gapId":"rna:Mesh:IntAttribute","ownerFamily":"Mesh","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02644","gapId":"rna:Mesh:Mesh","ownerFamily":"Mesh","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02645","gapId":"rna:Mesh:MeshAutomaskingSettings","ownerFamily":"Mesh","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02646","gapId":"rna:Mesh:MeshCacheModifier","ownerFamily":"Mesh","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02647","gapId":"rna:Mesh:MeshDeformModifier","ownerFamily":"Mesh","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02648","gapId":"rna:Mesh:MeshEdge","ownerFamily":"Mesh","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02649","gapId":"rna:Mesh:MeshEdges","ownerFamily":"Mesh","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02650","gapId":"rna:Mesh:MeshLoop","ownerFamily":"Mesh","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02651","gapId":"rna:Mesh:MeshLoopColor","ownerFamily":"Mesh","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02652","gapId":"rna:Mesh:MeshLoopColorLayer","ownerFamily":"Mesh","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02653","gapId":"rna:Mesh:MeshLoopTriangle","ownerFamily":"Mesh","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02654","gapId":"rna:Mesh:MeshLoopTriangles","ownerFamily":"Mesh","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02655","gapId":"rna:Mesh:MeshLoops","ownerFamily":"Mesh","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02656","gapId":"rna:Mesh:MeshNormalValue","ownerFamily":"Mesh","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02657","gapId":"rna:Mesh:MeshPolygon","ownerFamily":"Mesh","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02658","gapId":"rna:Mesh:MeshPolygons","ownerFamily":"Mesh","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02659","gapId":"rna:Mesh:MeshSequenceCacheModifier","ownerFamily":"Mesh","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02660","gapId":"rna:Mesh:MeshSkinVertex","ownerFamily":"Mesh","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02661","gapId":"rna:Mesh:MeshSkinVertexLayer","ownerFamily":"Mesh","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02662","gapId":"rna:Mesh:MeshStatVis","ownerFamily":"Mesh","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02663","gapId":"rna:Mesh:MeshToVolumeModifier","ownerFamily":"Mesh","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02664","gapId":"rna:Mesh:MeshUVLoop","ownerFamily":"Mesh","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02665","gapId":"rna:Mesh:MeshUVLoopLayer","ownerFamily":"Mesh","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02666","gapId":"rna:Mesh:MeshVertex","ownerFamily":"Mesh","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M16-GAP-02667","gapId":"rna:Mesh:MeshVertices","ownerFamily":"Mesh","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M17-GAP-00001","gapId":"constraint:ACTION","ownerFamily":"CONSTRAINT","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M17-GAP-00002","gapId":"constraint:ARMATURE","ownerFamily":"CONSTRAINT","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M17-GAP-00003","gapId":"constraint:CAMERA_SOLVER","ownerFamily":"CONSTRAINT","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M17-GAP-00004","gapId":"constraint:CHILD_OF","ownerFamily":"CONSTRAINT","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M17-GAP-00005","gapId":"constraint:CLAMP_TO","ownerFamily":"CONSTRAINT","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M17-GAP-00006","gapId":"constraint:COPY_LOCATION","ownerFamily":"CONSTRAINT","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M17-GAP-00007","gapId":"constraint:COPY_ROTATION","ownerFamily":"CONSTRAINT","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M17-GAP-00008","gapId":"constraint:COPY_SCALE","ownerFamily":"CONSTRAINT","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M17-GAP-00009","gapId":"constraint:COPY_TRANSFORMS","ownerFamily":"CONSTRAINT","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M17-GAP-00010","gapId":"constraint:DAMPED_TRACK","ownerFamily":"CONSTRAINT","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M17-GAP-00011","gapId":"constraint:FLOOR","ownerFamily":"CONSTRAINT","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M17-GAP-00012","gapId":"constraint:FOLLOW_PATH","ownerFamily":"CONSTRAINT","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M17-GAP-00013","gapId":"constraint:FOLLOW_TRACK","ownerFamily":"CONSTRAINT","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M17-GAP-00014","gapId":"constraint:GEOMETRY_ATTRIBUTE","ownerFamily":"CONSTRAINT","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M17-GAP-00015","gapId":"constraint:IK","ownerFamily":"CONSTRAINT","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M17-GAP-00016","gapId":"constraint:LIMIT_DISTANCE","ownerFamily":"CONSTRAINT","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M17-GAP-00017","gapId":"constraint:LIMIT_LOCATION","ownerFamily":"CONSTRAINT","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M17-GAP-00018","gapId":"constraint:LIMIT_ROTATION","ownerFamily":"CONSTRAINT","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M17-GAP-00019","gapId":"constraint:LIMIT_SCALE","ownerFamily":"CONSTRAINT","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M17-GAP-00020","gapId":"constraint:LOCKED_TRACK","ownerFamily":"CONSTRAINT","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M17-GAP-00021","gapId":"constraint:MAINTAIN_VOLUME","ownerFamily":"CONSTRAINT","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M17-GAP-00022","gapId":"constraint:OBJECT_SOLVER","ownerFamily":"CONSTRAINT","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M17-GAP-00023","gapId":"constraint:PIVOT","ownerFamily":"CONSTRAINT","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M17-GAP-00024","gapId":"constraint:SHRINKWRAP","ownerFamily":"CONSTRAINT","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M17-GAP-00025","gapId":"constraint:SPLINE_IK","ownerFamily":"CONSTRAINT","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M17-GAP-00026","gapId":"constraint:STRETCH_TO","ownerFamily":"CONSTRAINT","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M17-GAP-00027","gapId":"constraint:TRACK_TO","ownerFamily":"CONSTRAINT","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M17-GAP-00028","gapId":"constraint:TRANSFORM","ownerFamily":"CONSTRAINT","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M17-GAP-00029","gapId":"constraint:TRANSFORM_CACHE","ownerFamily":"CONSTRAINT","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00001","gapId":"node:Compositor:CompositorNodeAlphaOver","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00002","gapId":"node:Compositor:CompositorNodeAntiAliasing","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00003","gapId":"node:Compositor:CompositorNodeBilateralblur","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00004","gapId":"node:Compositor:CompositorNodeBlankImage","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00005","gapId":"node:Compositor:CompositorNodeBlur","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00006","gapId":"node:Compositor:CompositorNodeBokehBlur","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00007","gapId":"node:Compositor:CompositorNodeBokehImage","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00008","gapId":"node:Compositor:CompositorNodeBoxMask","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00009","gapId":"node:Compositor:CompositorNodeBrightContrast","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00010","gapId":"node:Compositor:CompositorNodeChannelMatte","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00011","gapId":"node:Compositor:CompositorNodeChromaMatte","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00012","gapId":"node:Compositor:CompositorNodeColorBalance","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00013","gapId":"node:Compositor:CompositorNodeColorCorrection","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00014","gapId":"node:Compositor:CompositorNodeColorMatte","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00015","gapId":"node:Compositor:CompositorNodeColorSpill","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00016","gapId":"node:Compositor:CompositorNodeCombineColor","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00017","gapId":"node:Compositor:CompositorNodeConvertColorSpace","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00018","gapId":"node:Compositor:CompositorNodeConvertToDisplay","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00019","gapId":"node:Compositor:CompositorNodeConvolve","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00020","gapId":"node:Compositor:CompositorNodeCornerPin","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00021","gapId":"node:Compositor:CompositorNodeCrop","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00022","gapId":"node:Compositor:CompositorNodeCryptomatte","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00023","gapId":"node:Compositor:CompositorNodeCryptomatteV2","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00024","gapId":"node:Compositor:CompositorNodeCurveRGB","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00025","gapId":"node:Compositor:CompositorNodeDBlur","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00026","gapId":"node:Compositor:CompositorNodeDefocus","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00027","gapId":"node:Compositor:CompositorNodeDenoise","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00028","gapId":"node:Compositor:CompositorNodeDespeckle","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00029","gapId":"node:Compositor:CompositorNodeDiffMatte","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00030","gapId":"node:Compositor:CompositorNodeDilateErode","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00031","gapId":"node:Compositor:CompositorNodeDisplace","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00032","gapId":"node:Compositor:CompositorNodeDistanceMatte","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00033","gapId":"node:Compositor:CompositorNodeDoubleEdgeMask","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00034","gapId":"node:Compositor:CompositorNodeEllipseMask","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00035","gapId":"node:Compositor:CompositorNodeExposure","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00036","gapId":"node:Compositor:CompositorNodeFilter","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00037","gapId":"node:Compositor:CompositorNodeFlip","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00038","gapId":"node:Compositor:CompositorNodeGlare","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00039","gapId":"node:Compositor:CompositorNodeGroup","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00040","gapId":"node:Compositor:CompositorNodeHueCorrect","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00041","gapId":"node:Compositor:CompositorNodeHueSat","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00042","gapId":"node:Compositor:CompositorNodeIDMask","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00043","gapId":"node:Compositor:CompositorNodeImage","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00044","gapId":"node:Compositor:CompositorNodeImageCoordinates","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00045","gapId":"node:Compositor:CompositorNodeImageInfo","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00046","gapId":"node:Compositor:CompositorNodeInpaint","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00047","gapId":"node:Compositor:CompositorNodeInvert","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00048","gapId":"node:Compositor:CompositorNodeKeying","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00049","gapId":"node:Compositor:CompositorNodeKeyingScreen","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00050","gapId":"node:Compositor:CompositorNodeKuwahara","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00051","gapId":"node:Compositor:CompositorNodeLensdist","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00052","gapId":"node:Compositor:CompositorNodeLevels","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00053","gapId":"node:Compositor:CompositorNodeLumaMatte","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00054","gapId":"node:Compositor:CompositorNodeMapUV","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00055","gapId":"node:Compositor:CompositorNodeMask","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00056","gapId":"node:Compositor:CompositorNodeMaskToSDF","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00057","gapId":"node:Compositor:CompositorNodeMovieClip","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00058","gapId":"node:Compositor:CompositorNodeMovieDistortion","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00059","gapId":"node:Compositor:CompositorNodeNormal","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00060","gapId":"node:Compositor:CompositorNodeNormalize","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00061","gapId":"node:Compositor:CompositorNodeOutputFile","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00062","gapId":"node:Compositor:CompositorNodePixelate","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00063","gapId":"node:Compositor:CompositorNodePlaneTrackDeform","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00064","gapId":"node:Compositor:CompositorNodePosterize","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00065","gapId":"node:Compositor:CompositorNodePremulKey","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00066","gapId":"node:Compositor:CompositorNodeRGB","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00067","gapId":"node:Compositor:CompositorNodeRGBToBW","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00068","gapId":"node:Compositor:CompositorNodeRLayers","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00069","gapId":"node:Compositor:CompositorNodeRelativeToPixel","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00070","gapId":"node:Compositor:CompositorNodeRotate","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00071","gapId":"node:Compositor:CompositorNodeScale","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00072","gapId":"node:Compositor:CompositorNodeSceneTime","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00073","gapId":"node:Compositor:CompositorNodeSeparateColor","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00074","gapId":"node:Compositor:CompositorNodeSequencerStripInfo","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00075","gapId":"node:Compositor:CompositorNodeSetAlpha","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00076","gapId":"node:Compositor:CompositorNodeSplit","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00077","gapId":"node:Compositor:CompositorNodeStabilize","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00078","gapId":"node:Compositor:CompositorNodeStringToImage","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00079","gapId":"node:Compositor:CompositorNodeSwitch","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00080","gapId":"node:Compositor:CompositorNodeSwitchView","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00081","gapId":"node:Compositor:CompositorNodeTime","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00082","gapId":"node:Compositor:CompositorNodeTonemap","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00083","gapId":"node:Compositor:CompositorNodeTrackPos","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00084","gapId":"node:Compositor:CompositorNodeTransform","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00085","gapId":"node:Compositor:CompositorNodeTranslate","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00086","gapId":"node:Compositor:CompositorNodeVecBlur","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00087","gapId":"node:Compositor:CompositorNodeViewer","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00088","gapId":"node:Compositor:CompositorNodeZcombine","ownerFamily":"COMPOSITOR_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00089","gapId":"node:Geometry:GeometryNodeAccumulateField","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00090","gapId":"node:Geometry:GeometryNodeAttributeDomainSize","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00091","gapId":"node:Geometry:GeometryNodeAttributeStatistic","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00092","gapId":"node:Geometry:GeometryNodeBake","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00093","gapId":"node:Geometry:GeometryNodeBlurAttribute","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00094","gapId":"node:Geometry:GeometryNodeBoneInfo","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00095","gapId":"node:Geometry:GeometryNodeBoundBox","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00096","gapId":"node:Geometry:GeometryNodeCameraInfo","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00097","gapId":"node:Geometry:GeometryNodeCaptureAttribute","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00098","gapId":"node:Geometry:GeometryNodeClosureToList","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00099","gapId":"node:Geometry:GeometryNodeClusterByConnected","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00100","gapId":"node:Geometry:GeometryNodeClusterByDistance","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00101","gapId":"node:Geometry:GeometryNodeCollectionChildren","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00102","gapId":"node:Geometry:GeometryNodeCollectionInfo","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00103","gapId":"node:Geometry:GeometryNodeConvexHull","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00104","gapId":"node:Geometry:GeometryNodeCornersOfEdge","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00105","gapId":"node:Geometry:GeometryNodeCornersOfFace","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00106","gapId":"node:Geometry:GeometryNodeCornersOfVertex","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00107","gapId":"node:Geometry:GeometryNodeCubeGridTopology","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00108","gapId":"node:Geometry:GeometryNodeCurveArc","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00109","gapId":"node:Geometry:GeometryNodeCurveEndpointSelection","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00110","gapId":"node:Geometry:GeometryNodeCurveHandleTypeSelection","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00111","gapId":"node:Geometry:GeometryNodeCurveLength","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00112","gapId":"node:Geometry:GeometryNodeCurveOfPoint","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00113","gapId":"node:Geometry:GeometryNodeCurvePrimitiveBezierSegment","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00114","gapId":"node:Geometry:GeometryNodeCurvePrimitiveCircle","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00115","gapId":"node:Geometry:GeometryNodeCurvePrimitiveLine","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00116","gapId":"node:Geometry:GeometryNodeCurvePrimitiveQuadrilateral","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00117","gapId":"node:Geometry:GeometryNodeCurveQuadraticBezier","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00118","gapId":"node:Geometry:GeometryNodeCurveSetHandles","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00119","gapId":"node:Geometry:GeometryNodeCurveSpiral","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00120","gapId":"node:Geometry:GeometryNodeCurveSplineType","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00121","gapId":"node:Geometry:GeometryNodeCurveStar","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00122","gapId":"node:Geometry:GeometryNodeCurveToMesh","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00123","gapId":"node:Geometry:GeometryNodeCurveToPoints","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00124","gapId":"node:Geometry:GeometryNodeCurvesToGreasePencil","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00125","gapId":"node:Geometry:GeometryNodeDeformCurvesOnSurface","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00126","gapId":"node:Geometry:GeometryNodeDeleteGeometry","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00127","gapId":"node:Geometry:GeometryNodeDistributePointsInGrid","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00128","gapId":"node:Geometry:GeometryNodeDistributePointsInVolume","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00129","gapId":"node:Geometry:GeometryNodeDistributePointsOnFaces","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00130","gapId":"node:Geometry:GeometryNodeDualMesh","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00131","gapId":"node:Geometry:GeometryNodeDuplicateElements","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00132","gapId":"node:Geometry:GeometryNodeEdgePathsToCurves","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00133","gapId":"node:Geometry:GeometryNodeEdgePathsToSelection","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00134","gapId":"node:Geometry:GeometryNodeEdgesOfCorner","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00135","gapId":"node:Geometry:GeometryNodeEdgesOfVertex","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00136","gapId":"node:Geometry:GeometryNodeEdgesToFaceGroups","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00137","gapId":"node:Geometry:GeometryNodeExtrudeMesh","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00138","gapId":"node:Geometry:GeometryNodeFaceOfCorner","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00139","gapId":"node:Geometry:GeometryNodeFieldAtIndex","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00140","gapId":"node:Geometry:GeometryNodeFieldAverage","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00141","gapId":"node:Geometry:GeometryNodeFieldMinAndMax","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00142","gapId":"node:Geometry:GeometryNodeFieldOnDomain","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00143","gapId":"node:Geometry:GeometryNodeFieldToGrid","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00144","gapId":"node:Geometry:GeometryNodeFieldToList","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00145","gapId":"node:Geometry:GeometryNodeFieldVariance","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00146","gapId":"node:Geometry:GeometryNodeFillCurve","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00147","gapId":"node:Geometry:GeometryNodeFilletCurve","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00148","gapId":"node:Geometry:GeometryNodeFilterList","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00149","gapId":"node:Geometry:GeometryNodeFlipFaces","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00150","gapId":"node:Geometry:GeometryNodeForeachGeometryElementInput","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00151","gapId":"node:Geometry:GeometryNodeForeachGeometryElementOutput","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00152","gapId":"node:Geometry:GeometryNodeGeometryToInstance","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00153","gapId":"node:Geometry:GeometryNodeGetAttributeNames","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00154","gapId":"node:Geometry:GeometryNodeGetGeometryBundle","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00155","gapId":"node:Geometry:GeometryNodeGetGeometryComponent","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00156","gapId":"node:Geometry:GeometryNodeGetNamedGrid","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00157","gapId":"node:Geometry:GeometryNodeGizmoDial","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00158","gapId":"node:Geometry:GeometryNodeGizmoLinear","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00159","gapId":"node:Geometry:GeometryNodeGizmoTransform","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00160","gapId":"node:Geometry:GeometryNodeGreasePencilToCurves","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00161","gapId":"node:Geometry:GeometryNodeGridAdvect","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00162","gapId":"node:Geometry:GeometryNodeGridClip","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00163","gapId":"node:Geometry:GeometryNodeGridCurl","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00164","gapId":"node:Geometry:GeometryNodeGridDilateAndErode","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00165","gapId":"node:Geometry:GeometryNodeGridDivergence","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00166","gapId":"node:Geometry:GeometryNodeGridGradient","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00167","gapId":"node:Geometry:GeometryNodeGridInfo","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00168","gapId":"node:Geometry:GeometryNodeGridLaplacian","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00169","gapId":"node:Geometry:GeometryNodeGridMean","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00170","gapId":"node:Geometry:GeometryNodeGridMedian","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00171","gapId":"node:Geometry:GeometryNodeGridPrune","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00172","gapId":"node:Geometry:GeometryNodeGridToMesh","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00173","gapId":"node:Geometry:GeometryNodeGridToPoints","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00174","gapId":"node:Geometry:GeometryNodeGridVoxelize","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00175","gapId":"node:Geometry:GeometryNodeGroup","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00176","gapId":"node:Geometry:GeometryNodeImageInfo","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00177","gapId":"node:Geometry:GeometryNodeImageTexture","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00178","gapId":"node:Geometry:GeometryNodeImportCSV","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00179","gapId":"node:Geometry:GeometryNodeImportOBJ","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00180","gapId":"node:Geometry:GeometryNodeImportPLY","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00181","gapId":"node:Geometry:GeometryNodeImportSTL","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00182","gapId":"node:Geometry:GeometryNodeImportText","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00183","gapId":"node:Geometry:GeometryNodeImportVDB","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00184","gapId":"node:Geometry:GeometryNodeIndexOfNearest","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00185","gapId":"node:Geometry:GeometryNodeIndexSwitch","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00186","gapId":"node:Geometry:GeometryNodeInputActiveCamera","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00187","gapId":"node:Geometry:GeometryNodeInputCollection","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00188","gapId":"node:Geometry:GeometryNodeInputCurveHandlePositions","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00189","gapId":"node:Geometry:GeometryNodeInputCurveTilt","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00190","gapId":"node:Geometry:GeometryNodeInputEdgeSmooth","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00191","gapId":"node:Geometry:GeometryNodeInputFont","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00192","gapId":"node:Geometry:GeometryNodeInputID","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00193","gapId":"node:Geometry:GeometryNodeInputImage","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00194","gapId":"node:Geometry:GeometryNodeInputIndex","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00195","gapId":"node:Geometry:GeometryNodeInputInstanceBounds","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00196","gapId":"node:Geometry:GeometryNodeInputInstanceReference","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00197","gapId":"node:Geometry:GeometryNodeInputInstanceRotation","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00198","gapId":"node:Geometry:GeometryNodeInputInstanceScale","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00199","gapId":"node:Geometry:GeometryNodeInputMaterial","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00200","gapId":"node:Geometry:GeometryNodeInputMaterialIndex","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00201","gapId":"node:Geometry:GeometryNodeInputMeshEdgeAngle","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00202","gapId":"node:Geometry:GeometryNodeInputMeshEdgeNeighbors","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00203","gapId":"node:Geometry:GeometryNodeInputMeshEdgeVertices","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00204","gapId":"node:Geometry:GeometryNodeInputMeshFaceArea","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00205","gapId":"node:Geometry:GeometryNodeInputMeshFaceIsPlanar","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00206","gapId":"node:Geometry:GeometryNodeInputMeshFaceNeighbors","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00207","gapId":"node:Geometry:GeometryNodeInputMeshIsland","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00208","gapId":"node:Geometry:GeometryNodeInputMeshVertexNeighbors","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00209","gapId":"node:Geometry:GeometryNodeInputNamedAttribute","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00210","gapId":"node:Geometry:GeometryNodeInputNamedLayerSelection","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00211","gapId":"node:Geometry:GeometryNodeInputNormal","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00212","gapId":"node:Geometry:GeometryNodeInputObject","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00213","gapId":"node:Geometry:GeometryNodeInputPosition","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00214","gapId":"node:Geometry:GeometryNodeInputRadius","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00215","gapId":"node:Geometry:GeometryNodeInputSceneTime","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00216","gapId":"node:Geometry:GeometryNodeInputShadeSmooth","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00217","gapId":"node:Geometry:GeometryNodeInputShortestEdgePaths","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00218","gapId":"node:Geometry:GeometryNodeInputSplineCyclic","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00219","gapId":"node:Geometry:GeometryNodeInputSplineResolution","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00220","gapId":"node:Geometry:GeometryNodeInputTangent","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00221","gapId":"node:Geometry:GeometryNodeInputVoxelIndex","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00222","gapId":"node:Geometry:GeometryNodeInstanceOnPoints","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00223","gapId":"node:Geometry:GeometryNodeInstanceTransform","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00224","gapId":"node:Geometry:GeometryNodeInstancesToPoints","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00225","gapId":"node:Geometry:GeometryNodeInterpolateCurves","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00226","gapId":"node:Geometry:GeometryNodeIsViewport","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00227","gapId":"node:Geometry:GeometryNodeJoinGeometry","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00228","gapId":"node:Geometry:GeometryNodeListGetItem","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00229","gapId":"node:Geometry:GeometryNodeListLength","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00230","gapId":"node:Geometry:GeometryNodeMaterialSelection","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00231","gapId":"node:Geometry:GeometryNodeMenuSwitch","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00232","gapId":"node:Geometry:GeometryNodeMergeByDistance","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00233","gapId":"node:Geometry:GeometryNodeMergeLayers","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00234","gapId":"node:Geometry:GeometryNodeMergePoints","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00235","gapId":"node:Geometry:GeometryNodeMeshBevel","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00236","gapId":"node:Geometry:GeometryNodeMeshBoolean","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00237","gapId":"node:Geometry:GeometryNodeMeshCircle","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00238","gapId":"node:Geometry:GeometryNodeMeshCone","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00239","gapId":"node:Geometry:GeometryNodeMeshCube","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00240","gapId":"node:Geometry:GeometryNodeMeshCylinder","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00241","gapId":"node:Geometry:GeometryNodeMeshFaceSetBoundaries","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00242","gapId":"node:Geometry:GeometryNodeMeshGrid","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00243","gapId":"node:Geometry:GeometryNodeMeshIcoSphere","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00244","gapId":"node:Geometry:GeometryNodeMeshLine","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00245","gapId":"node:Geometry:GeometryNodeMeshToCurve","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00246","gapId":"node:Geometry:GeometryNodeMeshToDensityGrid","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00247","gapId":"node:Geometry:GeometryNodeMeshToPoints","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00248","gapId":"node:Geometry:GeometryNodeMeshToSDFGrid","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00249","gapId":"node:Geometry:GeometryNodeMeshToVolume","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00250","gapId":"node:Geometry:GeometryNodeMeshUVSphere","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00251","gapId":"node:Geometry:GeometryNodeObjectInfo","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00252","gapId":"node:Geometry:GeometryNodeOffsetCornerInFace","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00253","gapId":"node:Geometry:GeometryNodeOffsetPointInCurve","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00254","gapId":"node:Geometry:GeometryNodePoints","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00255","gapId":"node:Geometry:GeometryNodePointsOfCurve","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00256","gapId":"node:Geometry:GeometryNodePointsToCurves","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00257","gapId":"node:Geometry:GeometryNodePointsToSDFGrid","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00258","gapId":"node:Geometry:GeometryNodePointsToVertices","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00259","gapId":"node:Geometry:GeometryNodePointsToVolume","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00260","gapId":"node:Geometry:GeometryNodeProximity","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00261","gapId":"node:Geometry:GeometryNodeRaycast","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00262","gapId":"node:Geometry:GeometryNodeRealizeInstances","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00263","gapId":"node:Geometry:GeometryNodeRemoveAttribute","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00264","gapId":"node:Geometry:GeometryNodeRenameAttribute","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00265","gapId":"node:Geometry:GeometryNodeRepeatInput","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00266","gapId":"node:Geometry:GeometryNodeRepeatOutput","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00267","gapId":"node:Geometry:GeometryNodeReplaceMaterial","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00268","gapId":"node:Geometry:GeometryNodeResampleCurve","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00269","gapId":"node:Geometry:GeometryNodeReverseCurve","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00270","gapId":"node:Geometry:GeometryNodeRotateInstances","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00271","gapId":"node:Geometry:GeometryNodeSDFGridBoolean","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00272","gapId":"node:Geometry:GeometryNodeSDFGridFillet","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00273","gapId":"node:Geometry:GeometryNodeSDFGridLaplacian","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00274","gapId":"node:Geometry:GeometryNodeSDFGridMean","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00275","gapId":"node:Geometry:GeometryNodeSDFGridMeanCurvature","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00276","gapId":"node:Geometry:GeometryNodeSDFGridMedian","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00277","gapId":"node:Geometry:GeometryNodeSDFGridOffset","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00278","gapId":"node:Geometry:GeometryNodeSampleCurve","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00279","gapId":"node:Geometry:GeometryNodeSampleGrid","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00280","gapId":"node:Geometry:GeometryNodeSampleGridIndex","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00281","gapId":"node:Geometry:GeometryNodeSampleIndex","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00282","gapId":"node:Geometry:GeometryNodeSampleNearest","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00283","gapId":"node:Geometry:GeometryNodeSampleNearestSurface","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00284","gapId":"node:Geometry:GeometryNodeSampleSoundFrequencies","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00285","gapId":"node:Geometry:GeometryNodeSampleUVSurface","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00286","gapId":"node:Geometry:GeometryNodeScaleElements","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00287","gapId":"node:Geometry:GeometryNodeScaleInstances","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00288","gapId":"node:Geometry:GeometryNodeSelfObject","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00289","gapId":"node:Geometry:GeometryNodeSeparateComponents","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00290","gapId":"node:Geometry:GeometryNodeSeparateGeometry","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00291","gapId":"node:Geometry:GeometryNodeSetCurveHandlePositions","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00292","gapId":"node:Geometry:GeometryNodeSetCurveNormal","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00293","gapId":"node:Geometry:GeometryNodeSetCurveRadius","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00294","gapId":"node:Geometry:GeometryNodeSetCurveTilt","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00295","gapId":"node:Geometry:GeometryNodeSetGeometryBundle","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00296","gapId":"node:Geometry:GeometryNodeSetGeometryName","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00297","gapId":"node:Geometry:GeometryNodeSetGreasePencilColor","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00298","gapId":"node:Geometry:GeometryNodeSetGreasePencilDepth","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00299","gapId":"node:Geometry:GeometryNodeSetGreasePencilSoftness","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00300","gapId":"node:Geometry:GeometryNodeSetGridBackground","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00301","gapId":"node:Geometry:GeometryNodeSetGridTransform","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00302","gapId":"node:Geometry:GeometryNodeSetID","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00303","gapId":"node:Geometry:GeometryNodeSetInstanceTransform","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00304","gapId":"node:Geometry:GeometryNodeSetMaterial","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00305","gapId":"node:Geometry:GeometryNodeSetMaterialIndex","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00306","gapId":"node:Geometry:GeometryNodeSetMeshNormal","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00307","gapId":"node:Geometry:GeometryNodeSetNURBSOrder","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00308","gapId":"node:Geometry:GeometryNodeSetNURBSWeight","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00309","gapId":"node:Geometry:GeometryNodeSetPointRadius","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00310","gapId":"node:Geometry:GeometryNodeSetPosition","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00311","gapId":"node:Geometry:GeometryNodeSetShadeSmooth","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00312","gapId":"node:Geometry:GeometryNodeSetSplineCyclic","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00313","gapId":"node:Geometry:GeometryNodeSetSplineResolution","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00314","gapId":"node:Geometry:GeometryNodeSimulationInput","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00315","gapId":"node:Geometry:GeometryNodeSimulationOutput","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00316","gapId":"node:Geometry:GeometryNodeSortElements","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00317","gapId":"node:Geometry:GeometryNodeSortList","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00318","gapId":"node:Geometry:GeometryNodeSplineLength","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00319","gapId":"node:Geometry:GeometryNodeSplineParameter","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00320","gapId":"node:Geometry:GeometryNodeSplitEdges","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00321","gapId":"node:Geometry:GeometryNodeSplitToInstances","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00322","gapId":"node:Geometry:GeometryNodeStoreNamedAttribute","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00323","gapId":"node:Geometry:GeometryNodeStoreNamedGrid","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00324","gapId":"node:Geometry:GeometryNodeStringJoin","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00325","gapId":"node:Geometry:GeometryNodeStringToCurves","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00326","gapId":"node:Geometry:GeometryNodeSubdivideCurve","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00327","gapId":"node:Geometry:GeometryNodeSubdivideMesh","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00328","gapId":"node:Geometry:GeometryNodeSubdivisionSurface","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00329","gapId":"node:Geometry:GeometryNodeSwitch","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00330","gapId":"node:Geometry:GeometryNodeTagFilter","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00331","gapId":"node:Geometry:GeometryNodeTool3DCursor","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00332","gapId":"node:Geometry:GeometryNodeToolActiveElement","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00333","gapId":"node:Geometry:GeometryNodeToolFaceSet","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00334","gapId":"node:Geometry:GeometryNodeToolMousePosition","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00335","gapId":"node:Geometry:GeometryNodeToolSelection","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00336","gapId":"node:Geometry:GeometryNodeToolSetFaceSet","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00337","gapId":"node:Geometry:GeometryNodeToolSetSelection","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00338","gapId":"node:Geometry:GeometryNodeTransferAttributes","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00339","gapId":"node:Geometry:GeometryNodeTransform","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00340","gapId":"node:Geometry:GeometryNodeTranslateInstances","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00341","gapId":"node:Geometry:GeometryNodeTriangulate","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00342","gapId":"node:Geometry:GeometryNodeTrimCurve","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00343","gapId":"node:Geometry:GeometryNodeUVPackIslands","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00344","gapId":"node:Geometry:GeometryNodeUVTangent","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00345","gapId":"node:Geometry:GeometryNodeUVUnwrap","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00346","gapId":"node:Geometry:GeometryNodeVertexOfCorner","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00347","gapId":"node:Geometry:GeometryNodeViewer","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00348","gapId":"node:Geometry:GeometryNodeViewportTransform","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00349","gapId":"node:Geometry:GeometryNodeVolumeCube","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00350","gapId":"node:Geometry:GeometryNodeVolumeToMesh","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00351","gapId":"node:Geometry:GeometryNodeWarning","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00352","gapId":"node:Geometry:GeometryNodeXPBDSolver","ownerFamily":"GEOMETRY_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00353","gapId":"node:Shader:ShaderNodeAddShader","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00354","gapId":"node:Shader:ShaderNodeAmbientOcclusion","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00355","gapId":"node:Shader:ShaderNodeAttribute","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00356","gapId":"node:Shader:ShaderNodeBackground","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00357","gapId":"node:Shader:ShaderNodeBevel","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00358","gapId":"node:Shader:ShaderNodeBlackbody","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00359","gapId":"node:Shader:ShaderNodeBrightContrast","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00360","gapId":"node:Shader:ShaderNodeBsdfAnisotropic","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00361","gapId":"node:Shader:ShaderNodeBsdfDiffuse","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00362","gapId":"node:Shader:ShaderNodeBsdfGlass","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00363","gapId":"node:Shader:ShaderNodeBsdfHair","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00364","gapId":"node:Shader:ShaderNodeBsdfHairPrincipled","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00365","gapId":"node:Shader:ShaderNodeBsdfMetallic","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00366","gapId":"node:Shader:ShaderNodeBsdfPrincipled","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00367","gapId":"node:Shader:ShaderNodeBsdfRayPortal","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00368","gapId":"node:Shader:ShaderNodeBsdfRefraction","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00369","gapId":"node:Shader:ShaderNodeBsdfSheen","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00370","gapId":"node:Shader:ShaderNodeBsdfToon","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00371","gapId":"node:Shader:ShaderNodeBsdfTranslucent","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00372","gapId":"node:Shader:ShaderNodeBsdfTransparent","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00373","gapId":"node:Shader:ShaderNodeBump","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00374","gapId":"node:Shader:ShaderNodeCameraData","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00375","gapId":"node:Shader:ShaderNodeClamp","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00376","gapId":"node:Shader:ShaderNodeCombineColor","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00377","gapId":"node:Shader:ShaderNodeCombineXYZ","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00378","gapId":"node:Shader:ShaderNodeDisplacement","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00379","gapId":"node:Shader:ShaderNodeEeveeSpecular","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00380","gapId":"node:Shader:ShaderNodeEmission","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00381","gapId":"node:Shader:ShaderNodeFloatCurve","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00382","gapId":"node:Shader:ShaderNodeFresnel","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00383","gapId":"node:Shader:ShaderNodeGamma","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00384","gapId":"node:Shader:ShaderNodeGroup","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00385","gapId":"node:Shader:ShaderNodeHairInfo","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00386","gapId":"node:Shader:ShaderNodeHoldout","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00387","gapId":"node:Shader:ShaderNodeHueSaturation","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00388","gapId":"node:Shader:ShaderNodeInvert","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00389","gapId":"node:Shader:ShaderNodeLayerWeight","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00390","gapId":"node:Shader:ShaderNodeLightFalloff","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00391","gapId":"node:Shader:ShaderNodeLightPath","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00392","gapId":"node:Shader:ShaderNodeMapRange","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00393","gapId":"node:Shader:ShaderNodeMapping","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00394","gapId":"node:Shader:ShaderNodeMath","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00395","gapId":"node:Shader:ShaderNodeMix","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00396","gapId":"node:Shader:ShaderNodeMixRGB","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00397","gapId":"node:Shader:ShaderNodeMixShader","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00398","gapId":"node:Shader:ShaderNodeNewGeometry","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00399","gapId":"node:Shader:ShaderNodeNormal","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00400","gapId":"node:Shader:ShaderNodeNormalMap","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00401","gapId":"node:Shader:ShaderNodeObjectInfo","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00402","gapId":"node:Shader:ShaderNodeOutputAOV","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00403","gapId":"node:Shader:ShaderNodeOutputLight","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00404","gapId":"node:Shader:ShaderNodeOutputLineStyle","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00405","gapId":"node:Shader:ShaderNodeOutputMaterial","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00406","gapId":"node:Shader:ShaderNodeOutputWorld","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00407","gapId":"node:Shader:ShaderNodeParticleInfo","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00408","gapId":"node:Shader:ShaderNodePointInfo","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00409","gapId":"node:Shader:ShaderNodeRGB","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00410","gapId":"node:Shader:ShaderNodeRGBCurve","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00411","gapId":"node:Shader:ShaderNodeRGBToBW","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00412","gapId":"node:Shader:ShaderNodeRadialTiling","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00413","gapId":"node:Shader:ShaderNodeRaycast","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00414","gapId":"node:Shader:ShaderNodeScript","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00415","gapId":"node:Shader:ShaderNodeSeparateColor","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00416","gapId":"node:Shader:ShaderNodeSeparateXYZ","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00417","gapId":"node:Shader:ShaderNodeShaderToRGB","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00418","gapId":"node:Shader:ShaderNodeSqueeze","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00419","gapId":"node:Shader:ShaderNodeSubsurfaceScattering","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00420","gapId":"node:Shader:ShaderNodeTangent","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00421","gapId":"node:Shader:ShaderNodeTexBrick","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00422","gapId":"node:Shader:ShaderNodeTexChecker","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00423","gapId":"node:Shader:ShaderNodeTexCoord","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00424","gapId":"node:Shader:ShaderNodeTexEnvironment","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00425","gapId":"node:Shader:ShaderNodeTexGabor","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00426","gapId":"node:Shader:ShaderNodeTexGradient","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00427","gapId":"node:Shader:ShaderNodeTexIES","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00428","gapId":"node:Shader:ShaderNodeTexImage","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00429","gapId":"node:Shader:ShaderNodeTexMagic","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00430","gapId":"node:Shader:ShaderNodeTexNoise","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00431","gapId":"node:Shader:ShaderNodeTexSky","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00432","gapId":"node:Shader:ShaderNodeTexVoronoi","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00433","gapId":"node:Shader:ShaderNodeTexWave","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00434","gapId":"node:Shader:ShaderNodeTexWhiteNoise","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00435","gapId":"node:Shader:ShaderNodeUVAlongStroke","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00436","gapId":"node:Shader:ShaderNodeUVMap","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00437","gapId":"node:Shader:ShaderNodeValToRGB","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00438","gapId":"node:Shader:ShaderNodeValue","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00439","gapId":"node:Shader:ShaderNodeVectorCurve","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00440","gapId":"node:Shader:ShaderNodeVectorDisplacement","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00441","gapId":"node:Shader:ShaderNodeVectorMath","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00442","gapId":"node:Shader:ShaderNodeVectorRotate","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00443","gapId":"node:Shader:ShaderNodeVectorTransform","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00444","gapId":"node:Shader:ShaderNodeVertexColor","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00445","gapId":"node:Shader:ShaderNodeVolumeAbsorption","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00446","gapId":"node:Shader:ShaderNodeVolumeCoefficients","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00447","gapId":"node:Shader:ShaderNodeVolumeInfo","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00448","gapId":"node:Shader:ShaderNodeVolumePrincipled","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00449","gapId":"node:Shader:ShaderNodeVolumeScatter","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00450","gapId":"node:Shader:ShaderNodeWavelength","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M18-GAP-00451","gapId":"node:Shader:ShaderNodeWireframe","ownerFamily":"SHADER_NODE","sourceTask":"M15-01C","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M19-GAP-00001","gapId":"rna:Core:Action","ownerFamily":"Core","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M19-GAP-00002","gapId":"rna:Core:Armature","ownerFamily":"Core","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M19-GAP-00003","gapId":"rna:Core:Brush","ownerFamily":"Core","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M19-GAP-00004","gapId":"rna:Core:Curve","ownerFamily":"Core","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M19-GAP-00005","gapId":"rna:Core:Curves","ownerFamily":"Core","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M19-GAP-00006","gapId":"rna:Core:GreasePencil","ownerFamily":"Core","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M19-GAP-00007","gapId":"rna:Core:ID","ownerFamily":"Core","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M19-GAP-00008","gapId":"rna:Core:Image","ownerFamily":"Core","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M19-GAP-00009","gapId":"rna:Core:Key","ownerFamily":"Core","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M19-GAP-00010","gapId":"rna:Core:Lattice","ownerFamily":"Core","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M19-GAP-00011","gapId":"rna:Core:Mask","ownerFamily":"Core","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M19-GAP-00012","gapId":"rna:Core:MetaBall","ownerFamily":"Core","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M19-GAP-00013","gapId":"rna:Core:MovieClip","ownerFamily":"Core","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M19-GAP-00014","gapId":"rna:Core:Palette","ownerFamily":"Core","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M19-GAP-00015","gapId":"rna:Core:ParticleSettings","ownerFamily":"Core","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M19-GAP-00016","gapId":"rna:Core:PointCloud","ownerFamily":"Core","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M19-GAP-00017","gapId":"rna:Core:Sound","ownerFamily":"Core","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M19-GAP-00018","gapId":"rna:Core:Speaker","ownerFamily":"Core","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M19-GAP-00019","gapId":"rna:Core:Text","ownerFamily":"Core","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M19-GAP-00020","gapId":"rna:Core:Volume","ownerFamily":"Core","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00001","gapId":"physics:BakeSettings","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00002","gapId":"physics:BlendDataParticles","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00003","gapId":"physics:BoidRule","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00004","gapId":"physics:BoidRuleAverageSpeed","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00005","gapId":"physics:BoidRuleAvoid","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00006","gapId":"physics:BoidRuleAvoidCollision","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00007","gapId":"physics:BoidRuleFight","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00008","gapId":"physics:BoidRuleFollowLeader","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00009","gapId":"physics:BoidRuleGoal","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00010","gapId":"physics:BoidSettings","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00011","gapId":"physics:BoidState","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00012","gapId":"physics:ChildParticle","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00013","gapId":"physics:ClothCollisionSettings","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00014","gapId":"physics:ClothModifier","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00015","gapId":"physics:ClothSettings","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00016","gapId":"physics:ClothSolverResult","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00017","gapId":"physics:CollisionModifier","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00018","gapId":"physics:CollisionSettings","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00019","gapId":"physics:DynamicPaintBrushSettings","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00020","gapId":"physics:DynamicPaintCanvasSettings","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00021","gapId":"physics:DynamicPaintModifier","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00022","gapId":"physics:DynamicPaintSurface","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00023","gapId":"physics:DynamicPaintSurfaces","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00024","gapId":"physics:EffectorWeights","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00025","gapId":"physics:FieldSettings","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00026","gapId":"physics:FluidDomainSettings","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00027","gapId":"physics:FluidEffectorSettings","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00028","gapId":"physics:FluidFlowSettings","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00029","gapId":"physics:FluidModifier","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00030","gapId":"physics:GeometryNodeAccumulateField","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00031","gapId":"physics:GeometryNodeFieldAtIndex","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00032","gapId":"physics:GeometryNodeFieldAverage","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00033","gapId":"physics:GeometryNodeFieldMinAndMax","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00034","gapId":"physics:GeometryNodeFieldOnDomain","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00035","gapId":"physics:GeometryNodeFieldToGrid","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00036","gapId":"physics:GeometryNodeFieldToGridItem","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00037","gapId":"physics:GeometryNodeFieldToGridItems","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00038","gapId":"physics:GeometryNodeFieldToList","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00039","gapId":"physics:GeometryNodeFieldToListItem","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00040","gapId":"physics:GeometryNodeFieldToListItems","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00041","gapId":"physics:GeometryNodeFieldVariance","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00042","gapId":"physics:Particle","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00043","gapId":"physics:ParticleBrush","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00044","gapId":"physics:ParticleDupliWeight","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00045","gapId":"physics:ParticleEdit","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00046","gapId":"physics:ParticleHairKey","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00047","gapId":"physics:ParticleInstanceModifier","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00048","gapId":"physics:ParticleKey","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00049","gapId":"physics:ParticleSettings","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00050","gapId":"physics:ParticleSettingsTextureSlot","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00051","gapId":"physics:ParticleSettingsTextureSlots","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00052","gapId":"physics:ParticleSystem","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00053","gapId":"physics:ParticleSystemModifier","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00054","gapId":"physics:ParticleSystems","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00055","gapId":"physics:ParticleTarget","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00056","gapId":"physics:PointCache","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00057","gapId":"physics:PointCacheItem","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00058","gapId":"physics:PointCaches","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00059","gapId":"physics:RigidBodyConstraint","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00060","gapId":"physics:RigidBodyObject","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00061","gapId":"physics:RigidBodyWorld","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00062","gapId":"physics:SPHFluidSettings","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00063","gapId":"physics:ShaderNodeParticleInfo","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00064","gapId":"physics:SoftBodyModifier","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00065","gapId":"physics:SoftBodySettings","ownerFamily":"PHYSICS","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00066","gapId":"strip:ADD","ownerFamily":"SEQUENCER","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00067","gapId":"strip:ADJUSTMENT","ownerFamily":"SEQUENCER","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00068","gapId":"strip:ALPHA_OVER","ownerFamily":"SEQUENCER","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00069","gapId":"strip:ALPHA_UNDER","ownerFamily":"SEQUENCER","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00070","gapId":"strip:COLOR","ownerFamily":"SEQUENCER","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00071","gapId":"strip:COLORMIX","ownerFamily":"SEQUENCER","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00072","gapId":"strip:COMPOSITOR","ownerFamily":"SEQUENCER","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00073","gapId":"strip:CROSS","ownerFamily":"SEQUENCER","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00074","gapId":"strip:GAMMA_CROSS","ownerFamily":"SEQUENCER","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00075","gapId":"strip:GAUSSIAN_BLUR","ownerFamily":"SEQUENCER","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00076","gapId":"strip:GLOW","ownerFamily":"SEQUENCER","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00077","gapId":"strip:IMAGE","ownerFamily":"SEQUENCER","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00078","gapId":"strip:MASK","ownerFamily":"SEQUENCER","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00079","gapId":"strip:META","ownerFamily":"SEQUENCER","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00080","gapId":"strip:MOVIE","ownerFamily":"SEQUENCER","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00081","gapId":"strip:MOVIECLIP","ownerFamily":"SEQUENCER","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00082","gapId":"strip:MULTICAM","ownerFamily":"SEQUENCER","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00083","gapId":"strip:MULTIPLY","ownerFamily":"SEQUENCER","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00084","gapId":"strip:SCENE","ownerFamily":"SEQUENCER","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00085","gapId":"strip:SOUND","ownerFamily":"SEQUENCER","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00086","gapId":"strip:SPEED","ownerFamily":"SEQUENCER","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00087","gapId":"strip:SUBTRACT","ownerFamily":"SEQUENCER","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00088","gapId":"strip:TEXT","ownerFamily":"SEQUENCER","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M20-GAP-00089","gapId":"strip:WIPE","ownerFamily":"SEQUENCER","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00001","gapId":"area:CLIP_EDITOR","ownerFamily":"EDITOR","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00002","gapId":"area:CONSOLE","ownerFamily":"EDITOR","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00003","gapId":"area:DOPESHEET_EDITOR","ownerFamily":"EDITOR","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00004","gapId":"area:EMPTY","ownerFamily":"EDITOR","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00005","gapId":"area:FILE_BROWSER","ownerFamily":"EDITOR","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00006","gapId":"area:GRAPH_EDITOR","ownerFamily":"EDITOR","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00007","gapId":"area:IMAGE_EDITOR","ownerFamily":"EDITOR","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00008","gapId":"area:INFO","ownerFamily":"EDITOR","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00009","gapId":"area:NLA_EDITOR","ownerFamily":"EDITOR","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00010","gapId":"area:NODE_EDITOR","ownerFamily":"EDITOR","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00011","gapId":"area:OUTLINER","ownerFamily":"EDITOR","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00012","gapId":"area:PREFERENCES","ownerFamily":"EDITOR","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00013","gapId":"area:PROPERTIES","ownerFamily":"EDITOR","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00014","gapId":"area:SEQUENCE_EDITOR","ownerFamily":"EDITOR","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00015","gapId":"area:SPREADSHEET","ownerFamily":"EDITOR","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00016","gapId":"area:STATUSBAR","ownerFamily":"EDITOR","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00017","gapId":"area:TEXT_EDITOR","ownerFamily":"EDITOR","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00018","gapId":"area:TOPBAR","ownerFamily":"EDITOR","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00019","gapId":"area:VIEW_3D","ownerFamily":"EDITOR","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00020","gapId":"io:anim.keying_set_export","ownerFamily":"IMPORT_EXPORT","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00021","gapId":"io:collection.export_all","ownerFamily":"IMPORT_EXPORT","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00022","gapId":"io:collection.exporter_add","ownerFamily":"IMPORT_EXPORT","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00023","gapId":"io:collection.exporter_export","ownerFamily":"IMPORT_EXPORT","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00024","gapId":"io:collection.exporter_move","ownerFamily":"IMPORT_EXPORT","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00025","gapId":"io:collection.exporter_remove","ownerFamily":"IMPORT_EXPORT","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00026","gapId":"io:collection.importer_add","ownerFamily":"IMPORT_EXPORT","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00027","gapId":"io:collection.importer_remove","ownerFamily":"IMPORT_EXPORT","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00028","gapId":"io:export_anim.bvh","ownerFamily":"IMPORT_EXPORT","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00029","gapId":"io:export_scene.fbx","ownerFamily":"IMPORT_EXPORT","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00030","gapId":"io:export_scene.gltf","ownerFamily":"IMPORT_EXPORT","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00031","gapId":"io:image.import_as_mesh_planes","ownerFamily":"IMPORT_EXPORT","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00032","gapId":"io:import_anim.bvh","ownerFamily":"IMPORT_EXPORT","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00033","gapId":"io:import_curve.svg","ownerFamily":"IMPORT_EXPORT","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00034","gapId":"io:import_scene.fbx","ownerFamily":"IMPORT_EXPORT","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00035","gapId":"io:import_scene.gltf","ownerFamily":"IMPORT_EXPORT","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00036","gapId":"io:node.add_import_node","ownerFamily":"IMPORT_EXPORT","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00037","gapId":"io:object.volume_import","ownerFamily":"IMPORT_EXPORT","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00038","gapId":"io:preferences.keyconfig_export","ownerFamily":"IMPORT_EXPORT","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00039","gapId":"io:preferences.keyconfig_import","ownerFamily":"IMPORT_EXPORT","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00040","gapId":"io:sequencer.export_subtitles","ownerFamily":"IMPORT_EXPORT","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00041","gapId":"io:uv.export_layout","ownerFamily":"IMPORT_EXPORT","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00042","gapId":"io:wm.collection_export_all","ownerFamily":"IMPORT_EXPORT","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00043","gapId":"io:wm.drop_import_file","ownerFamily":"IMPORT_EXPORT","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00044","gapId":"io:wm.fbx_import","ownerFamily":"IMPORT_EXPORT","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00045","gapId":"io:wm.grease_pencil_export_svg","ownerFamily":"IMPORT_EXPORT","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00046","gapId":"io:wm.grease_pencil_import_svg","ownerFamily":"IMPORT_EXPORT","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00047","gapId":"io:wm.obj_export","ownerFamily":"IMPORT_EXPORT","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00048","gapId":"io:wm.obj_import","ownerFamily":"IMPORT_EXPORT","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00049","gapId":"io:wm.ply_export","ownerFamily":"IMPORT_EXPORT","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00050","gapId":"io:wm.ply_import","ownerFamily":"IMPORT_EXPORT","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00051","gapId":"io:wm.stl_export","ownerFamily":"IMPORT_EXPORT","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00052","gapId":"io:wm.stl_import","ownerFamily":"IMPORT_EXPORT","sourceTask":"M15-01D","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00053","gapId":"keymap-item:3D View Generic:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00054","gapId":"keymap-item:3D View Generic:VIEW_3D:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00055","gapId":"keymap-item:3D View Tool: Bend:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00056","gapId":"keymap-item:3D View Tool: Breakdowner:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00057","gapId":"keymap-item:3D View Tool: Cursor:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00058","gapId":"keymap-item:3D View Tool: Cursor:VIEW_3D:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00059","gapId":"keymap-item:3D View Tool: Edit Armature, B-Bone Size:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00060","gapId":"keymap-item:3D View Tool: Edit Armature, Bone Envelope:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00061","gapId":"keymap-item:3D View Tool: Edit Armature, Extrude to Cursor:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00062","gapId":"keymap-item:3D View Tool: Edit Armature, Extrude:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00063","gapId":"keymap-item:3D View Tool: Edit Armature, Roll:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00064","gapId":"keymap-item:3D View Tool: Edit Curve, Curve Pen:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00065","gapId":"keymap-item:3D View Tool: Edit Curve, Curve Pen:VIEW_3D:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00066","gapId":"keymap-item:3D View Tool: Edit Curve, Curve Pen:VIEW_3D:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00067","gapId":"keymap-item:3D View Tool: Edit Curve, Draw:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00068","gapId":"keymap-item:3D View Tool: Edit Curve, Extrude to Cursor:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00069","gapId":"keymap-item:3D View Tool: Edit Curve, Extrude:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00070","gapId":"keymap-item:3D View Tool: Edit Curve, Radius:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00071","gapId":"keymap-item:3D View Tool: Edit Curve, Randomize:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00072","gapId":"keymap-item:3D View Tool: Edit Curve, Tilt:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00073","gapId":"keymap-item:3D View Tool: Edit Curves, Draw:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00074","gapId":"keymap-item:3D View Tool: Edit Curves, Pen:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00075","gapId":"keymap-item:3D View Tool: Edit Curves, Pen:VIEW_3D:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00076","gapId":"keymap-item:3D View Tool: Edit Curves, Pen:VIEW_3D:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00077","gapId":"keymap-item:3D View Tool: Edit Curves, Pen:VIEW_3D:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00078","gapId":"keymap-item:3D View Tool: Edit Grease Pencil, Gradient:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00079","gapId":"keymap-item:3D View Tool: Edit Grease Pencil, Interpolate:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00080","gapId":"keymap-item:3D View Tool: Edit Grease Pencil, Pen:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00081","gapId":"keymap-item:3D View Tool: Edit Grease Pencil, Pen:VIEW_3D:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00082","gapId":"keymap-item:3D View Tool: Edit Grease Pencil, Pen:VIEW_3D:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00083","gapId":"keymap-item:3D View Tool: Edit Grease Pencil, Pen:VIEW_3D:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00084","gapId":"keymap-item:3D View Tool: Edit Mesh, Bevel:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00085","gapId":"keymap-item:3D View Tool: Edit Mesh, Bisect:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00086","gapId":"keymap-item:3D View Tool: Edit Mesh, Edge Slide:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00087","gapId":"keymap-item:3D View Tool: Edit Mesh, Extrude Along Normals:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00088","gapId":"keymap-item:3D View Tool: Edit Mesh, Extrude Individual:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00089","gapId":"keymap-item:3D View Tool: Edit Mesh, Extrude Manifold:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00090","gapId":"keymap-item:3D View Tool: Edit Mesh, Extrude Region:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00091","gapId":"keymap-item:3D View Tool: Edit Mesh, Extrude to Cursor:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00092","gapId":"keymap-item:3D View Tool: Edit Mesh, Inset Faces:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00093","gapId":"keymap-item:3D View Tool: Edit Mesh, Knife:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00094","gapId":"keymap-item:3D View Tool: Edit Mesh, Loop Cut:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00095","gapId":"keymap-item:3D View Tool: Edit Mesh, Offset Edge Loop Cut:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00096","gapId":"keymap-item:3D View Tool: Edit Mesh, Poly Build:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00097","gapId":"keymap-item:3D View Tool: Edit Mesh, Poly Build:VIEW_3D:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00098","gapId":"keymap-item:3D View Tool: Edit Mesh, Poly Build:VIEW_3D:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00099","gapId":"keymap-item:3D View Tool: Edit Mesh, Push/Pull:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00100","gapId":"keymap-item:3D View Tool: Edit Mesh, Randomize:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00101","gapId":"keymap-item:3D View Tool: Edit Mesh, Rip Edge:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00102","gapId":"keymap-item:3D View Tool: Edit Mesh, Rip Region:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00103","gapId":"keymap-item:3D View Tool: Edit Mesh, Shrink/Fatten:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00104","gapId":"keymap-item:3D View Tool: Edit Mesh, Smooth:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00105","gapId":"keymap-item:3D View Tool: Edit Mesh, Spin Duplicates:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00106","gapId":"keymap-item:3D View Tool: Edit Mesh, Spin:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00107","gapId":"keymap-item:3D View Tool: Edit Mesh, To Sphere:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00108","gapId":"keymap-item:3D View Tool: Edit Mesh, Vertex Slide:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00109","gapId":"keymap-item:3D View Tool: Edit Text, Select Text:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00110","gapId":"keymap-item:3D View Tool: Edit Text, Select Text:VIEW_3D:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00111","gapId":"keymap-item:3D View Tool: Measure:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00112","gapId":"keymap-item:3D View Tool: Measure:VIEW_3D:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00113","gapId":"keymap-item:3D View Tool: Measure:VIEW_3D:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00114","gapId":"keymap-item:3D View Tool: Move:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00115","gapId":"keymap-item:3D View Tool: Object, Add Primitive:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00116","gapId":"keymap-item:3D View Tool: Paint Grease Pencil, Arc:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00117","gapId":"keymap-item:3D View Tool: Paint Grease Pencil, Arc:VIEW_3D:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00118","gapId":"keymap-item:3D View Tool: Paint Grease Pencil, Arc:VIEW_3D:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00119","gapId":"keymap-item:3D View Tool: Paint Grease Pencil, Box:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00120","gapId":"keymap-item:3D View Tool: Paint Grease Pencil, Box:VIEW_3D:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00121","gapId":"keymap-item:3D View Tool: Paint Grease Pencil, Box:VIEW_3D:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00122","gapId":"keymap-item:3D View Tool: Paint Grease Pencil, Circle:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00123","gapId":"keymap-item:3D View Tool: Paint Grease Pencil, Circle:VIEW_3D:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00124","gapId":"keymap-item:3D View Tool: Paint Grease Pencil, Circle:VIEW_3D:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00125","gapId":"keymap-item:3D View Tool: Paint Grease Pencil, Curve:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00126","gapId":"keymap-item:3D View Tool: Paint Grease Pencil, Eyedropper:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00127","gapId":"keymap-item:3D View Tool: Paint Grease Pencil, Eyedropper:VIEW_3D:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00128","gapId":"keymap-item:3D View Tool: Paint Grease Pencil, Eyedropper:VIEW_3D:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00129","gapId":"keymap-item:3D View Tool: Paint Grease Pencil, Eyedropper:VIEW_3D:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00130","gapId":"keymap-item:3D View Tool: Paint Grease Pencil, Interpolate:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00131","gapId":"keymap-item:3D View Tool: Paint Grease Pencil, Line:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00132","gapId":"keymap-item:3D View Tool: Paint Grease Pencil, Line:VIEW_3D:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00133","gapId":"keymap-item:3D View Tool: Paint Grease Pencil, Line:VIEW_3D:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00134","gapId":"keymap-item:3D View Tool: Paint Grease Pencil, Polyline:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00135","gapId":"keymap-item:3D View Tool: Paint Grease Pencil, Polyline:VIEW_3D:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00136","gapId":"keymap-item:3D View Tool: Paint Grease Pencil, Trim:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00137","gapId":"keymap-item:3D View Tool: Paint Weight, Gradient:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00138","gapId":"keymap-item:3D View Tool: Paint Weight, Sample Vertex Group:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00139","gapId":"keymap-item:3D View Tool: Paint Weight, Sample Weight:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00140","gapId":"keymap-item:3D View Tool: Paint Weight, Sample Weight:VIEW_3D:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00141","gapId":"keymap-item:3D View Tool: Push:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00142","gapId":"keymap-item:3D View Tool: Relax:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00143","gapId":"keymap-item:3D View Tool: Rotate:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00144","gapId":"keymap-item:3D View Tool: Scale:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00145","gapId":"keymap-item:3D View Tool: Sculpt, Box Face Set:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00146","gapId":"keymap-item:3D View Tool: Sculpt, Box Hide:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00147","gapId":"keymap-item:3D View Tool: Sculpt, Box Hide:VIEW_3D:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00148","gapId":"keymap-item:3D View Tool: Sculpt, Box Hide:VIEW_3D:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00149","gapId":"keymap-item:3D View Tool: Sculpt, Box Mask:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00150","gapId":"keymap-item:3D View Tool: Sculpt, Box Mask:VIEW_3D:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00151","gapId":"keymap-item:3D View Tool: Sculpt, Box Trim:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00152","gapId":"keymap-item:3D View Tool: Sculpt, Cloth Filter:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00153","gapId":"keymap-item:3D View Tool: Sculpt, Color Filter:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00154","gapId":"keymap-item:3D View Tool: Sculpt, Color Filter:VIEW_3D:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00155","gapId":"keymap-item:3D View Tool: Sculpt, Face Set Edit:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00156","gapId":"keymap-item:3D View Tool: Sculpt, Lasso Face Set:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00157","gapId":"keymap-item:3D View Tool: Sculpt, Lasso Hide:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00158","gapId":"keymap-item:3D View Tool: Sculpt, Lasso Hide:VIEW_3D:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00159","gapId":"keymap-item:3D View Tool: Sculpt, Lasso Hide:VIEW_3D:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00160","gapId":"keymap-item:3D View Tool: Sculpt, Lasso Mask:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00161","gapId":"keymap-item:3D View Tool: Sculpt, Lasso Mask:VIEW_3D:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00162","gapId":"keymap-item:3D View Tool: Sculpt, Lasso Trim:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00163","gapId":"keymap-item:3D View Tool: Sculpt, Line Face Set:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00164","gapId":"keymap-item:3D View Tool: Sculpt, Line Hide:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00165","gapId":"keymap-item:3D View Tool: Sculpt, Line Hide:VIEW_3D:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00166","gapId":"keymap-item:3D View Tool: Sculpt, Line Hide:VIEW_3D:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00167","gapId":"keymap-item:3D View Tool: Sculpt, Line Mask:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00168","gapId":"keymap-item:3D View Tool: Sculpt, Line Mask:VIEW_3D:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00169","gapId":"keymap-item:3D View Tool: Sculpt, Line Project:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00170","gapId":"keymap-item:3D View Tool: Sculpt, Line Trim:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00171","gapId":"keymap-item:3D View Tool: Sculpt, Mask by Color:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00172","gapId":"keymap-item:3D View Tool: Sculpt, Mesh Filter:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00173","gapId":"keymap-item:3D View Tool: Sculpt, Polyline Face Set:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00174","gapId":"keymap-item:3D View Tool: Sculpt, Polyline Hide:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00175","gapId":"keymap-item:3D View Tool: Sculpt, Polyline Hide:VIEW_3D:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00176","gapId":"keymap-item:3D View Tool: Sculpt, Polyline Mask:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00177","gapId":"keymap-item:3D View Tool: Sculpt, Polyline Mask:VIEW_3D:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00178","gapId":"keymap-item:3D View Tool: Sculpt, Polyline Trim:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00179","gapId":"keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00180","gapId":"keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00181","gapId":"keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00182","gapId":"keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00183","gapId":"keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00184","gapId":"keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00185","gapId":"keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00186","gapId":"keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00187","gapId":"keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00188","gapId":"keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00189","gapId":"keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00190","gapId":"keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00191","gapId":"keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00192","gapId":"keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00193","gapId":"keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00194","gapId":"keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00195","gapId":"keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00196","gapId":"keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00197","gapId":"keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00198","gapId":"keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00199","gapId":"keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00200","gapId":"keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00201","gapId":"keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00202","gapId":"keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00203","gapId":"keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00204","gapId":"keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00205","gapId":"keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00206","gapId":"keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00207","gapId":"keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00208","gapId":"keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00209","gapId":"keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00210","gapId":"keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00211","gapId":"keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00212","gapId":"keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00213","gapId":"keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00214","gapId":"keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00215","gapId":"keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00216","gapId":"keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00217","gapId":"keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00218","gapId":"keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00219","gapId":"keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00220","gapId":"keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00221","gapId":"keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00222","gapId":"keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00223","gapId":"keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00224","gapId":"keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00225","gapId":"keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00226","gapId":"keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00227","gapId":"keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00228","gapId":"keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00229","gapId":"keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00230","gapId":"keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00231","gapId":"keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00232","gapId":"keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00233","gapId":"keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00234","gapId":"keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00235","gapId":"keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00236","gapId":"keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00237","gapId":"keymap-item:3D View Tool: Shear:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00238","gapId":"keymap-item:3D View Tool: Shear:VIEW_3D:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00239","gapId":"keymap-item:3D View Tool: Shear:VIEW_3D:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00240","gapId":"keymap-item:3D View Tool: Transform:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00241","gapId":"keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00242","gapId":"keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00243","gapId":"keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00244","gapId":"keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00245","gapId":"keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00246","gapId":"keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00247","gapId":"keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00248","gapId":"keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00249","gapId":"keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00250","gapId":"keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00251","gapId":"keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00252","gapId":"keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00253","gapId":"keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00254","gapId":"keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00255","gapId":"keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00256","gapId":"keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00257","gapId":"keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00258","gapId":"keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00259","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00260","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00261","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00262","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:100","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00263","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:101","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00264","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:102","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00265","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:103","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00266","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:104","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00267","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:105","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00268","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:106","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00269","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:107","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00270","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:108","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00271","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:109","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00272","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00273","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:110","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00274","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:111","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00275","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:112","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00276","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:113","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00277","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:114","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00278","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:115","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00279","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00280","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00281","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00282","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00283","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00284","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00285","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00286","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00287","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00288","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00289","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00290","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00291","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00292","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00293","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00294","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:26","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00295","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:27","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00296","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:28","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00297","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:29","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00298","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00299","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:30","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00300","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:31","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00301","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:32","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00302","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:33","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00303","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:34","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00304","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:35","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00305","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:36","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00306","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:37","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00307","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:38","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00308","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:39","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00309","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00310","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:40","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00311","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:41","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00312","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:42","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00313","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:43","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00314","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:44","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00315","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:45","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00316","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:46","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00317","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:47","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00318","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:48","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00319","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:49","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00320","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00321","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:50","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00322","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:51","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00323","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:52","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00324","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:53","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00325","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:54","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00326","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:55","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00327","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:56","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00328","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:57","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00329","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:58","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00330","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:59","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00331","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00332","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:60","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00333","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:61","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00334","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:62","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00335","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:63","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00336","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:64","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00337","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:65","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00338","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:66","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00339","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:67","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00340","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:68","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00341","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:69","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00342","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00343","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:70","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00344","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:71","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00345","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:72","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00346","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:73","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00347","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:74","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00348","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:75","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00349","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:76","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00350","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:77","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00351","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:78","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00352","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:79","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00353","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00354","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:80","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00355","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:81","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00356","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:82","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00357","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:83","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00358","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:84","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00359","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:85","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00360","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:86","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00361","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:87","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00362","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:88","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00363","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:89","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00364","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00365","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:90","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00366","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:91","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00367","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:92","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00368","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:93","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00369","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:94","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00370","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:95","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00371","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:96","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00372","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:97","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00373","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:98","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00374","gapId":"keymap-item:3D View:VIEW_3D:WINDOW:99","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00375","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00376","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00377","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00378","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00379","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00380","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00381","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00382","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00383","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00384","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00385","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00386","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00387","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00388","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00389","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00390","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00391","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00392","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00393","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00394","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:26","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00395","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:27","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00396","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:28","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00397","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:29","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00398","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00399","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:30","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00400","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:31","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00401","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:32","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00402","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:33","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00403","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:34","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00404","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:35","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00405","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:36","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00406","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00407","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00408","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00409","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00410","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00411","gapId":"keymap-item:Animation Channels:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00412","gapId":"keymap-item:Animation:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00413","gapId":"keymap-item:Animation:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00414","gapId":"keymap-item:Animation:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00415","gapId":"keymap-item:Animation:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00416","gapId":"keymap-item:Animation:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00417","gapId":"keymap-item:Armature:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00418","gapId":"keymap-item:Armature:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00419","gapId":"keymap-item:Armature:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00420","gapId":"keymap-item:Armature:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00421","gapId":"keymap-item:Armature:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00422","gapId":"keymap-item:Armature:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00423","gapId":"keymap-item:Armature:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00424","gapId":"keymap-item:Armature:EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00425","gapId":"keymap-item:Armature:EMPTY:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00426","gapId":"keymap-item:Armature:EMPTY:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00427","gapId":"keymap-item:Armature:EMPTY:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00428","gapId":"keymap-item:Armature:EMPTY:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00429","gapId":"keymap-item:Armature:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00430","gapId":"keymap-item:Armature:EMPTY:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00431","gapId":"keymap-item:Armature:EMPTY:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00432","gapId":"keymap-item:Armature:EMPTY:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00433","gapId":"keymap-item:Armature:EMPTY:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00434","gapId":"keymap-item:Armature:EMPTY:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00435","gapId":"keymap-item:Armature:EMPTY:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00436","gapId":"keymap-item:Armature:EMPTY:WINDOW:26","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00437","gapId":"keymap-item:Armature:EMPTY:WINDOW:27","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00438","gapId":"keymap-item:Armature:EMPTY:WINDOW:28","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00439","gapId":"keymap-item:Armature:EMPTY:WINDOW:29","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00440","gapId":"keymap-item:Armature:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00441","gapId":"keymap-item:Armature:EMPTY:WINDOW:30","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00442","gapId":"keymap-item:Armature:EMPTY:WINDOW:31","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00443","gapId":"keymap-item:Armature:EMPTY:WINDOW:32","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00444","gapId":"keymap-item:Armature:EMPTY:WINDOW:33","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00445","gapId":"keymap-item:Armature:EMPTY:WINDOW:34","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00446","gapId":"keymap-item:Armature:EMPTY:WINDOW:35","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00447","gapId":"keymap-item:Armature:EMPTY:WINDOW:36","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00448","gapId":"keymap-item:Armature:EMPTY:WINDOW:37","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00449","gapId":"keymap-item:Armature:EMPTY:WINDOW:38","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00450","gapId":"keymap-item:Armature:EMPTY:WINDOW:39","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00451","gapId":"keymap-item:Armature:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00452","gapId":"keymap-item:Armature:EMPTY:WINDOW:40","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00453","gapId":"keymap-item:Armature:EMPTY:WINDOW:41","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00454","gapId":"keymap-item:Armature:EMPTY:WINDOW:42","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00455","gapId":"keymap-item:Armature:EMPTY:WINDOW:43","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00456","gapId":"keymap-item:Armature:EMPTY:WINDOW:44","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00457","gapId":"keymap-item:Armature:EMPTY:WINDOW:45","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00458","gapId":"keymap-item:Armature:EMPTY:WINDOW:46","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00459","gapId":"keymap-item:Armature:EMPTY:WINDOW:47","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00460","gapId":"keymap-item:Armature:EMPTY:WINDOW:48","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00461","gapId":"keymap-item:Armature:EMPTY:WINDOW:49","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00462","gapId":"keymap-item:Armature:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00463","gapId":"keymap-item:Armature:EMPTY:WINDOW:50","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00464","gapId":"keymap-item:Armature:EMPTY:WINDOW:51","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00465","gapId":"keymap-item:Armature:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00466","gapId":"keymap-item:Armature:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00467","gapId":"keymap-item:Armature:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00468","gapId":"keymap-item:Armature:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00469","gapId":"keymap-item:Bevel Modal Map:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00470","gapId":"keymap-item:Bevel Modal Map:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00471","gapId":"keymap-item:Bevel Modal Map:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00472","gapId":"keymap-item:Bevel Modal Map:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00473","gapId":"keymap-item:Bevel Modal Map:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00474","gapId":"keymap-item:Bevel Modal Map:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00475","gapId":"keymap-item:Bevel Modal Map:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00476","gapId":"keymap-item:Bevel Modal Map:EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00477","gapId":"keymap-item:Bevel Modal Map:EMPTY:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00478","gapId":"keymap-item:Bevel Modal Map:EMPTY:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00479","gapId":"keymap-item:Bevel Modal Map:EMPTY:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00480","gapId":"keymap-item:Bevel Modal Map:EMPTY:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00481","gapId":"keymap-item:Bevel Modal Map:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00482","gapId":"keymap-item:Bevel Modal Map:EMPTY:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00483","gapId":"keymap-item:Bevel Modal Map:EMPTY:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00484","gapId":"keymap-item:Bevel Modal Map:EMPTY:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00485","gapId":"keymap-item:Bevel Modal Map:EMPTY:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00486","gapId":"keymap-item:Bevel Modal Map:EMPTY:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00487","gapId":"keymap-item:Bevel Modal Map:EMPTY:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00488","gapId":"keymap-item:Bevel Modal Map:EMPTY:WINDOW:26","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00489","gapId":"keymap-item:Bevel Modal Map:EMPTY:WINDOW:27","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00490","gapId":"keymap-item:Bevel Modal Map:EMPTY:WINDOW:28","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00491","gapId":"keymap-item:Bevel Modal Map:EMPTY:WINDOW:29","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00492","gapId":"keymap-item:Bevel Modal Map:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00493","gapId":"keymap-item:Bevel Modal Map:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00494","gapId":"keymap-item:Bevel Modal Map:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00495","gapId":"keymap-item:Bevel Modal Map:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00496","gapId":"keymap-item:Bevel Modal Map:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00497","gapId":"keymap-item:Bevel Modal Map:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00498","gapId":"keymap-item:Bevel Modal Map:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00499","gapId":"keymap-item:Clip Dopesheet Editor:CLIP_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00500","gapId":"keymap-item:Clip Dopesheet Editor:CLIP_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00501","gapId":"keymap-item:Clip Dopesheet Editor:CLIP_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00502","gapId":"keymap-item:Clip Dopesheet Editor:CLIP_EDITOR:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00503","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00504","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00505","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00506","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00507","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00508","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00509","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00510","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00511","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00512","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00513","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00514","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00515","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00516","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00517","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00518","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00519","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00520","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00521","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00522","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:26","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00523","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:27","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00524","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:28","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00525","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:29","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00526","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00527","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:30","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00528","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:31","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00529","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:32","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00530","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:33","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00531","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:34","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00532","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:35","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00533","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:36","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00534","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:37","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00535","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:38","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00536","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:39","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00537","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00538","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:40","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00539","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:41","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00540","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:42","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00541","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:43","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00542","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:44","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00543","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:45","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00544","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:46","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00545","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:47","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00546","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:48","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00547","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:49","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00548","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00549","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:50","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00550","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:51","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00551","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:52","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00552","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:53","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00553","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:54","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00554","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:55","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00555","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:56","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00556","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:57","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00557","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:58","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00558","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:59","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00559","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00560","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:60","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00561","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:61","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00562","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:62","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00563","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:63","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00564","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:64","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00565","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:65","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00566","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:66","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00567","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:67","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00568","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:68","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00569","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:69","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00570","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00571","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:70","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00572","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:71","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00573","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:72","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00574","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:73","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00575","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:74","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00576","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:75","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00577","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00578","gapId":"keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00579","gapId":"keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00580","gapId":"keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00581","gapId":"keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00582","gapId":"keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00583","gapId":"keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00584","gapId":"keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00585","gapId":"keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00586","gapId":"keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00587","gapId":"keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00588","gapId":"keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00589","gapId":"keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00590","gapId":"keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00591","gapId":"keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00592","gapId":"keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00593","gapId":"keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00594","gapId":"keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00595","gapId":"keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00596","gapId":"keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00597","gapId":"keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00598","gapId":"keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00599","gapId":"keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00600","gapId":"keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00601","gapId":"keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00602","gapId":"keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00603","gapId":"keymap-item:Clip Time Scrub:CLIP_EDITOR:PREVIEW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00604","gapId":"keymap-item:Clip:CLIP_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00605","gapId":"keymap-item:Clip:CLIP_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00606","gapId":"keymap-item:Clip:CLIP_EDITOR:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00607","gapId":"keymap-item:Clip:CLIP_EDITOR:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00608","gapId":"keymap-item:Clip:CLIP_EDITOR:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00609","gapId":"keymap-item:Clip:CLIP_EDITOR:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00610","gapId":"keymap-item:Clip:CLIP_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00611","gapId":"keymap-item:Clip:CLIP_EDITOR:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00612","gapId":"keymap-item:Clip:CLIP_EDITOR:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00613","gapId":"keymap-item:Clip:CLIP_EDITOR:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00614","gapId":"keymap-item:Clip:CLIP_EDITOR:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00615","gapId":"keymap-item:Clip:CLIP_EDITOR:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00616","gapId":"keymap-item:Clip:CLIP_EDITOR:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00617","gapId":"keymap-item:Clip:CLIP_EDITOR:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00618","gapId":"keymap-item:Console:CONSOLE:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00619","gapId":"keymap-item:Console:CONSOLE:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00620","gapId":"keymap-item:Console:CONSOLE:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00621","gapId":"keymap-item:Console:CONSOLE:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00622","gapId":"keymap-item:Console:CONSOLE:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00623","gapId":"keymap-item:Console:CONSOLE:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00624","gapId":"keymap-item:Console:CONSOLE:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00625","gapId":"keymap-item:Console:CONSOLE:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00626","gapId":"keymap-item:Console:CONSOLE:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00627","gapId":"keymap-item:Console:CONSOLE:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00628","gapId":"keymap-item:Console:CONSOLE:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00629","gapId":"keymap-item:Console:CONSOLE:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00630","gapId":"keymap-item:Console:CONSOLE:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00631","gapId":"keymap-item:Console:CONSOLE:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00632","gapId":"keymap-item:Console:CONSOLE:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00633","gapId":"keymap-item:Console:CONSOLE:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00634","gapId":"keymap-item:Console:CONSOLE:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00635","gapId":"keymap-item:Console:CONSOLE:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00636","gapId":"keymap-item:Console:CONSOLE:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00637","gapId":"keymap-item:Console:CONSOLE:WINDOW:26","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00638","gapId":"keymap-item:Console:CONSOLE:WINDOW:27","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00639","gapId":"keymap-item:Console:CONSOLE:WINDOW:28","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00640","gapId":"keymap-item:Console:CONSOLE:WINDOW:29","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00641","gapId":"keymap-item:Console:CONSOLE:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00642","gapId":"keymap-item:Console:CONSOLE:WINDOW:30","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00643","gapId":"keymap-item:Console:CONSOLE:WINDOW:31","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00644","gapId":"keymap-item:Console:CONSOLE:WINDOW:32","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00645","gapId":"keymap-item:Console:CONSOLE:WINDOW:33","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00646","gapId":"keymap-item:Console:CONSOLE:WINDOW:34","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00647","gapId":"keymap-item:Console:CONSOLE:WINDOW:35","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00648","gapId":"keymap-item:Console:CONSOLE:WINDOW:36","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00649","gapId":"keymap-item:Console:CONSOLE:WINDOW:37","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00650","gapId":"keymap-item:Console:CONSOLE:WINDOW:38","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00651","gapId":"keymap-item:Console:CONSOLE:WINDOW:39","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00652","gapId":"keymap-item:Console:CONSOLE:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00653","gapId":"keymap-item:Console:CONSOLE:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00654","gapId":"keymap-item:Console:CONSOLE:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00655","gapId":"keymap-item:Console:CONSOLE:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00656","gapId":"keymap-item:Console:CONSOLE:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00657","gapId":"keymap-item:Console:CONSOLE:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00658","gapId":"keymap-item:Curve Pen Modal Map:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00659","gapId":"keymap-item:Curve Pen Modal Map:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00660","gapId":"keymap-item:Curve Pen Modal Map:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00661","gapId":"keymap-item:Curve Pen Modal Map:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00662","gapId":"keymap-item:Curve Pen Modal Map:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00663","gapId":"keymap-item:Curve:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00664","gapId":"keymap-item:Curve:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00665","gapId":"keymap-item:Curve:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00666","gapId":"keymap-item:Curve:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00667","gapId":"keymap-item:Curve:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00668","gapId":"keymap-item:Curve:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00669","gapId":"keymap-item:Curve:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00670","gapId":"keymap-item:Curve:EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00671","gapId":"keymap-item:Curve:EMPTY:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00672","gapId":"keymap-item:Curve:EMPTY:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00673","gapId":"keymap-item:Curve:EMPTY:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00674","gapId":"keymap-item:Curve:EMPTY:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00675","gapId":"keymap-item:Curve:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00676","gapId":"keymap-item:Curve:EMPTY:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00677","gapId":"keymap-item:Curve:EMPTY:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00678","gapId":"keymap-item:Curve:EMPTY:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00679","gapId":"keymap-item:Curve:EMPTY:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00680","gapId":"keymap-item:Curve:EMPTY:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00681","gapId":"keymap-item:Curve:EMPTY:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00682","gapId":"keymap-item:Curve:EMPTY:WINDOW:26","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00683","gapId":"keymap-item:Curve:EMPTY:WINDOW:27","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00684","gapId":"keymap-item:Curve:EMPTY:WINDOW:28","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00685","gapId":"keymap-item:Curve:EMPTY:WINDOW:29","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00686","gapId":"keymap-item:Curve:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00687","gapId":"keymap-item:Curve:EMPTY:WINDOW:30","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00688","gapId":"keymap-item:Curve:EMPTY:WINDOW:31","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00689","gapId":"keymap-item:Curve:EMPTY:WINDOW:32","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00690","gapId":"keymap-item:Curve:EMPTY:WINDOW:33","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00691","gapId":"keymap-item:Curve:EMPTY:WINDOW:34","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00692","gapId":"keymap-item:Curve:EMPTY:WINDOW:35","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00693","gapId":"keymap-item:Curve:EMPTY:WINDOW:36","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00694","gapId":"keymap-item:Curve:EMPTY:WINDOW:37","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00695","gapId":"keymap-item:Curve:EMPTY:WINDOW:38","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00696","gapId":"keymap-item:Curve:EMPTY:WINDOW:39","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00697","gapId":"keymap-item:Curve:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00698","gapId":"keymap-item:Curve:EMPTY:WINDOW:40","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00699","gapId":"keymap-item:Curve:EMPTY:WINDOW:41","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00700","gapId":"keymap-item:Curve:EMPTY:WINDOW:42","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00701","gapId":"keymap-item:Curve:EMPTY:WINDOW:43","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00702","gapId":"keymap-item:Curve:EMPTY:WINDOW:44","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00703","gapId":"keymap-item:Curve:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00704","gapId":"keymap-item:Curve:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00705","gapId":"keymap-item:Curve:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00706","gapId":"keymap-item:Curve:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00707","gapId":"keymap-item:Curve:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00708","gapId":"keymap-item:Curves:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00709","gapId":"keymap-item:Curves:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00710","gapId":"keymap-item:Curves:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00711","gapId":"keymap-item:Curves:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00712","gapId":"keymap-item:Curves:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00713","gapId":"keymap-item:Curves:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00714","gapId":"keymap-item:Curves:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00715","gapId":"keymap-item:Curves:EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00716","gapId":"keymap-item:Curves:EMPTY:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00717","gapId":"keymap-item:Curves:EMPTY:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00718","gapId":"keymap-item:Curves:EMPTY:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00719","gapId":"keymap-item:Curves:EMPTY:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00720","gapId":"keymap-item:Curves:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00721","gapId":"keymap-item:Curves:EMPTY:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00722","gapId":"keymap-item:Curves:EMPTY:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00723","gapId":"keymap-item:Curves:EMPTY:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00724","gapId":"keymap-item:Curves:EMPTY:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00725","gapId":"keymap-item:Curves:EMPTY:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00726","gapId":"keymap-item:Curves:EMPTY:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00727","gapId":"keymap-item:Curves:EMPTY:WINDOW:26","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00728","gapId":"keymap-item:Curves:EMPTY:WINDOW:27","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00729","gapId":"keymap-item:Curves:EMPTY:WINDOW:28","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00730","gapId":"keymap-item:Curves:EMPTY:WINDOW:29","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00731","gapId":"keymap-item:Curves:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00732","gapId":"keymap-item:Curves:EMPTY:WINDOW:30","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00733","gapId":"keymap-item:Curves:EMPTY:WINDOW:31","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00734","gapId":"keymap-item:Curves:EMPTY:WINDOW:32","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00735","gapId":"keymap-item:Curves:EMPTY:WINDOW:33","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00736","gapId":"keymap-item:Curves:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00737","gapId":"keymap-item:Curves:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00738","gapId":"keymap-item:Curves:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00739","gapId":"keymap-item:Curves:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00740","gapId":"keymap-item:Curves:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00741","gapId":"keymap-item:Curves:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00742","gapId":"keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00743","gapId":"keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00744","gapId":"keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00745","gapId":"keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00746","gapId":"keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00747","gapId":"keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00748","gapId":"keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00749","gapId":"keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00750","gapId":"keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00751","gapId":"keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00752","gapId":"keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00753","gapId":"keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00754","gapId":"keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00755","gapId":"keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00756","gapId":"keymap-item:Dopesheet Generic:DOPESHEET_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00757","gapId":"keymap-item:Dopesheet Generic:DOPESHEET_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00758","gapId":"keymap-item:Dopesheet Generic:DOPESHEET_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00759","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00760","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00761","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00762","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00763","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00764","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00765","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00766","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00767","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00768","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00769","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00770","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00771","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00772","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00773","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00774","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00775","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00776","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00777","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00778","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:26","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00779","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:27","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00780","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:28","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00781","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:29","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00782","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00783","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:30","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00784","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:31","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00785","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:32","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00786","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:33","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00787","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:34","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00788","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:35","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00789","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:36","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00790","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:37","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00791","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:38","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00792","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:39","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00793","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00794","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:40","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00795","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:41","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00796","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:42","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00797","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:43","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00798","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:44","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00799","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:45","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00800","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:46","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00801","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:47","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00802","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:48","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00803","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:49","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00804","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00805","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:50","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00806","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:51","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00807","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:52","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00808","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:53","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00809","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:54","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00810","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:55","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00811","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:56","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00812","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:57","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00813","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:58","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00814","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:59","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00815","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00816","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:60","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00817","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:61","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00818","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:62","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00819","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:63","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00820","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:64","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00821","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:65","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00822","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:66","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00823","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:67","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00824","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00825","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00826","gapId":"keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00827","gapId":"keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00828","gapId":"keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00829","gapId":"keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00830","gapId":"keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00831","gapId":"keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00832","gapId":"keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00833","gapId":"keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00834","gapId":"keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00835","gapId":"keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00836","gapId":"keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00837","gapId":"keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00838","gapId":"keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00839","gapId":"keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00840","gapId":"keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00841","gapId":"keymap-item:File Browser Buttons:FILE_BROWSER:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00842","gapId":"keymap-item:File Browser Buttons:FILE_BROWSER:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00843","gapId":"keymap-item:File Browser Buttons:FILE_BROWSER:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00844","gapId":"keymap-item:File Browser Buttons:FILE_BROWSER:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00845","gapId":"keymap-item:File Browser Buttons:FILE_BROWSER:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00846","gapId":"keymap-item:File Browser Buttons:FILE_BROWSER:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00847","gapId":"keymap-item:File Browser Main:FILE_BROWSER:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00848","gapId":"keymap-item:File Browser Main:FILE_BROWSER:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00849","gapId":"keymap-item:File Browser Main:FILE_BROWSER:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00850","gapId":"keymap-item:File Browser Main:FILE_BROWSER:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00851","gapId":"keymap-item:File Browser Main:FILE_BROWSER:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00852","gapId":"keymap-item:File Browser Main:FILE_BROWSER:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00853","gapId":"keymap-item:File Browser Main:FILE_BROWSER:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00854","gapId":"keymap-item:File Browser Main:FILE_BROWSER:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00855","gapId":"keymap-item:File Browser Main:FILE_BROWSER:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00856","gapId":"keymap-item:File Browser Main:FILE_BROWSER:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00857","gapId":"keymap-item:File Browser Main:FILE_BROWSER:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00858","gapId":"keymap-item:File Browser Main:FILE_BROWSER:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00859","gapId":"keymap-item:File Browser Main:FILE_BROWSER:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00860","gapId":"keymap-item:File Browser Main:FILE_BROWSER:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00861","gapId":"keymap-item:File Browser Main:FILE_BROWSER:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00862","gapId":"keymap-item:File Browser Main:FILE_BROWSER:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00863","gapId":"keymap-item:File Browser Main:FILE_BROWSER:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00864","gapId":"keymap-item:File Browser Main:FILE_BROWSER:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00865","gapId":"keymap-item:File Browser Main:FILE_BROWSER:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00866","gapId":"keymap-item:File Browser Main:FILE_BROWSER:WINDOW:26","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00867","gapId":"keymap-item:File Browser Main:FILE_BROWSER:WINDOW:27","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00868","gapId":"keymap-item:File Browser Main:FILE_BROWSER:WINDOW:28","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00869","gapId":"keymap-item:File Browser Main:FILE_BROWSER:WINDOW:29","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00870","gapId":"keymap-item:File Browser Main:FILE_BROWSER:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00871","gapId":"keymap-item:File Browser Main:FILE_BROWSER:WINDOW:30","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00872","gapId":"keymap-item:File Browser Main:FILE_BROWSER:WINDOW:31","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00873","gapId":"keymap-item:File Browser Main:FILE_BROWSER:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00874","gapId":"keymap-item:File Browser Main:FILE_BROWSER:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00875","gapId":"keymap-item:File Browser Main:FILE_BROWSER:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00876","gapId":"keymap-item:File Browser Main:FILE_BROWSER:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00877","gapId":"keymap-item:File Browser Main:FILE_BROWSER:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00878","gapId":"keymap-item:File Browser Main:FILE_BROWSER:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00879","gapId":"keymap-item:File Browser:FILE_BROWSER:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00880","gapId":"keymap-item:File Browser:FILE_BROWSER:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00881","gapId":"keymap-item:File Browser:FILE_BROWSER:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00882","gapId":"keymap-item:File Browser:FILE_BROWSER:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00883","gapId":"keymap-item:File Browser:FILE_BROWSER:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00884","gapId":"keymap-item:File Browser:FILE_BROWSER:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00885","gapId":"keymap-item:File Browser:FILE_BROWSER:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00886","gapId":"keymap-item:File Browser:FILE_BROWSER:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00887","gapId":"keymap-item:File Browser:FILE_BROWSER:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00888","gapId":"keymap-item:File Browser:FILE_BROWSER:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00889","gapId":"keymap-item:File Browser:FILE_BROWSER:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00890","gapId":"keymap-item:File Browser:FILE_BROWSER:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00891","gapId":"keymap-item:File Browser:FILE_BROWSER:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00892","gapId":"keymap-item:File Browser:FILE_BROWSER:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00893","gapId":"keymap-item:File Browser:FILE_BROWSER:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00894","gapId":"keymap-item:File Browser:FILE_BROWSER:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00895","gapId":"keymap-item:File Browser:FILE_BROWSER:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00896","gapId":"keymap-item:File Browser:FILE_BROWSER:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00897","gapId":"keymap-item:File Browser:FILE_BROWSER:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00898","gapId":"keymap-item:File Browser:FILE_BROWSER:WINDOW:26","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00899","gapId":"keymap-item:File Browser:FILE_BROWSER:WINDOW:27","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00900","gapId":"keymap-item:File Browser:FILE_BROWSER:WINDOW:28","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00901","gapId":"keymap-item:File Browser:FILE_BROWSER:WINDOW:29","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00902","gapId":"keymap-item:File Browser:FILE_BROWSER:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00903","gapId":"keymap-item:File Browser:FILE_BROWSER:WINDOW:30","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00904","gapId":"keymap-item:File Browser:FILE_BROWSER:WINDOW:31","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00905","gapId":"keymap-item:File Browser:FILE_BROWSER:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00906","gapId":"keymap-item:File Browser:FILE_BROWSER:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00907","gapId":"keymap-item:File Browser:FILE_BROWSER:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00908","gapId":"keymap-item:File Browser:FILE_BROWSER:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00909","gapId":"keymap-item:File Browser:FILE_BROWSER:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00910","gapId":"keymap-item:File Browser:FILE_BROWSER:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00911","gapId":"keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00912","gapId":"keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00913","gapId":"keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00914","gapId":"keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00915","gapId":"keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00916","gapId":"keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00917","gapId":"keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00918","gapId":"keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00919","gapId":"keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00920","gapId":"keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00921","gapId":"keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00922","gapId":"keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00923","gapId":"keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00924","gapId":"keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00925","gapId":"keymap-item:Font:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00926","gapId":"keymap-item:Font:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00927","gapId":"keymap-item:Font:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00928","gapId":"keymap-item:Font:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00929","gapId":"keymap-item:Font:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00930","gapId":"keymap-item:Font:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00931","gapId":"keymap-item:Font:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00932","gapId":"keymap-item:Font:EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00933","gapId":"keymap-item:Font:EMPTY:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00934","gapId":"keymap-item:Font:EMPTY:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00935","gapId":"keymap-item:Font:EMPTY:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00936","gapId":"keymap-item:Font:EMPTY:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00937","gapId":"keymap-item:Font:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00938","gapId":"keymap-item:Font:EMPTY:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00939","gapId":"keymap-item:Font:EMPTY:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00940","gapId":"keymap-item:Font:EMPTY:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00941","gapId":"keymap-item:Font:EMPTY:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00942","gapId":"keymap-item:Font:EMPTY:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00943","gapId":"keymap-item:Font:EMPTY:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00944","gapId":"keymap-item:Font:EMPTY:WINDOW:26","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00945","gapId":"keymap-item:Font:EMPTY:WINDOW:27","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00946","gapId":"keymap-item:Font:EMPTY:WINDOW:28","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00947","gapId":"keymap-item:Font:EMPTY:WINDOW:29","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00948","gapId":"keymap-item:Font:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00949","gapId":"keymap-item:Font:EMPTY:WINDOW:30","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00950","gapId":"keymap-item:Font:EMPTY:WINDOW:31","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00951","gapId":"keymap-item:Font:EMPTY:WINDOW:32","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00952","gapId":"keymap-item:Font:EMPTY:WINDOW:33","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00953","gapId":"keymap-item:Font:EMPTY:WINDOW:34","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00954","gapId":"keymap-item:Font:EMPTY:WINDOW:35","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00955","gapId":"keymap-item:Font:EMPTY:WINDOW:36","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00956","gapId":"keymap-item:Font:EMPTY:WINDOW:37","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00957","gapId":"keymap-item:Font:EMPTY:WINDOW:38","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00958","gapId":"keymap-item:Font:EMPTY:WINDOW:39","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00959","gapId":"keymap-item:Font:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00960","gapId":"keymap-item:Font:EMPTY:WINDOW:40","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00961","gapId":"keymap-item:Font:EMPTY:WINDOW:41","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00962","gapId":"keymap-item:Font:EMPTY:WINDOW:42","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00963","gapId":"keymap-item:Font:EMPTY:WINDOW:43","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00964","gapId":"keymap-item:Font:EMPTY:WINDOW:44","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00965","gapId":"keymap-item:Font:EMPTY:WINDOW:45","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00966","gapId":"keymap-item:Font:EMPTY:WINDOW:46","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00967","gapId":"keymap-item:Font:EMPTY:WINDOW:47","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00968","gapId":"keymap-item:Font:EMPTY:WINDOW:48","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00969","gapId":"keymap-item:Font:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00970","gapId":"keymap-item:Font:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00971","gapId":"keymap-item:Font:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00972","gapId":"keymap-item:Font:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00973","gapId":"keymap-item:Font:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00974","gapId":"keymap-item:Frames:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00975","gapId":"keymap-item:Frames:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00976","gapId":"keymap-item:Frames:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00977","gapId":"keymap-item:Frames:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00978","gapId":"keymap-item:Frames:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00979","gapId":"keymap-item:Frames:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00980","gapId":"keymap-item:Frames:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00981","gapId":"keymap-item:Frames:EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00982","gapId":"keymap-item:Frames:EMPTY:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00983","gapId":"keymap-item:Frames:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00984","gapId":"keymap-item:Frames:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00985","gapId":"keymap-item:Frames:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00986","gapId":"keymap-item:Frames:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00987","gapId":"keymap-item:Frames:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00988","gapId":"keymap-item:Frames:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00989","gapId":"keymap-item:Frames:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00990","gapId":"keymap-item:Frames:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00991","gapId":"keymap-item:Generic Gizmo Click Drag:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00992","gapId":"keymap-item:Generic Gizmo Click Drag:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00993","gapId":"keymap-item:Generic Gizmo Drag:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00994","gapId":"keymap-item:Generic Gizmo Maybe Drag:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00995","gapId":"keymap-item:Generic Gizmo Select:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00996","gapId":"keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00997","gapId":"keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00998","gapId":"keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-00999","gapId":"keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01000","gapId":"keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01001","gapId":"keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01002","gapId":"keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01003","gapId":"keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01004","gapId":"keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01005","gapId":"keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01006","gapId":"keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01007","gapId":"keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01008","gapId":"keymap-item:Generic Gizmo:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01009","gapId":"keymap-item:Generic Tool: Annotate Eraser:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01010","gapId":"keymap-item:Generic Tool: Annotate Eraser:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01011","gapId":"keymap-item:Generic Tool: Annotate Line:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01012","gapId":"keymap-item:Generic Tool: Annotate Line:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01013","gapId":"keymap-item:Generic Tool: Annotate Polygon:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01014","gapId":"keymap-item:Generic Tool: Annotate Polygon:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01015","gapId":"keymap-item:Generic Tool: Annotate:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01016","gapId":"keymap-item:Generic Tool: Annotate:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01017","gapId":"keymap-item:Gesture Box:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01018","gapId":"keymap-item:Gesture Box:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01019","gapId":"keymap-item:Gesture Box:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01020","gapId":"keymap-item:Gesture Box:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01021","gapId":"keymap-item:Gesture Box:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01022","gapId":"keymap-item:Gesture Box:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01023","gapId":"keymap-item:Gesture Box:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01024","gapId":"keymap-item:Gesture Box:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01025","gapId":"keymap-item:Gesture Box:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01026","gapId":"keymap-item:Gesture Box:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01027","gapId":"keymap-item:Gesture Lasso:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01028","gapId":"keymap-item:Gesture Polyline:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01029","gapId":"keymap-item:Gesture Polyline:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01030","gapId":"keymap-item:Gesture Polyline:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01031","gapId":"keymap-item:Gesture Polyline:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01032","gapId":"keymap-item:Gesture Polyline:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01033","gapId":"keymap-item:Gesture Polyline:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01034","gapId":"keymap-item:Gesture Straight Line:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01035","gapId":"keymap-item:Gesture Straight Line:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01036","gapId":"keymap-item:Gesture Straight Line:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01037","gapId":"keymap-item:Gesture Straight Line:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01038","gapId":"keymap-item:Gesture Straight Line:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01039","gapId":"keymap-item:Gesture Straight Line:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01040","gapId":"keymap-item:Gesture Straight Line:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01041","gapId":"keymap-item:Gesture Zoom Border:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01042","gapId":"keymap-item:Gesture Zoom Border:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01043","gapId":"keymap-item:Gesture Zoom Border:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01044","gapId":"keymap-item:Gesture Zoom Border:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01045","gapId":"keymap-item:Gesture Zoom Border:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01046","gapId":"keymap-item:Gesture Zoom Border:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01047","gapId":"keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01048","gapId":"keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01049","gapId":"keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01050","gapId":"keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01051","gapId":"keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01052","gapId":"keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01053","gapId":"keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01054","gapId":"keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01055","gapId":"keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01056","gapId":"keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01057","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01058","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01059","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01060","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01061","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01062","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01063","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01064","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01065","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01066","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01067","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01068","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01069","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01070","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01071","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01072","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01073","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01074","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01075","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01076","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:26","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01077","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:27","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01078","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:28","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01079","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:29","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01080","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01081","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:30","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01082","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:31","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01083","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:32","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01084","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:33","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01085","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:34","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01086","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:35","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01087","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:36","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01088","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:37","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01089","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:38","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01090","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:39","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01091","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01092","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:40","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01093","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:41","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01094","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:42","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01095","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:43","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01096","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:44","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01097","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:45","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01098","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:46","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01099","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:47","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01100","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:48","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01101","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:49","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01102","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01103","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:50","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01104","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:51","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01105","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:52","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01106","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:53","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01107","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:54","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01108","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:55","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01109","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:56","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01110","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:57","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01111","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:58","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01112","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:59","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01113","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01114","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:60","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01115","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:61","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01116","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:62","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01117","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:63","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01118","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:64","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01119","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:65","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01120","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:66","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01121","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:67","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01122","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:68","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01123","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:69","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01124","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01125","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:70","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01126","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01127","gapId":"keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01128","gapId":"keymap-item:Grease Pencil Brush Stroke:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01129","gapId":"keymap-item:Grease Pencil Brush Stroke:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01130","gapId":"keymap-item:Grease Pencil Brush Stroke:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01131","gapId":"keymap-item:Grease Pencil Brush Stroke:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01132","gapId":"keymap-item:Grease Pencil Brush Stroke:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01133","gapId":"keymap-item:Grease Pencil Brush Stroke:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01134","gapId":"keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01135","gapId":"keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01136","gapId":"keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01137","gapId":"keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01138","gapId":"keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01139","gapId":"keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01140","gapId":"keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01141","gapId":"keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01142","gapId":"keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01143","gapId":"keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01144","gapId":"keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01145","gapId":"keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01146","gapId":"keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01147","gapId":"keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01148","gapId":"keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01149","gapId":"keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01150","gapId":"keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01151","gapId":"keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01152","gapId":"keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01153","gapId":"keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01154","gapId":"keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01155","gapId":"keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01156","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01157","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01158","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01159","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01160","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01161","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01162","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01163","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01164","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01165","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01166","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01167","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01168","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01169","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01170","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01171","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01172","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01173","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01174","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01175","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:26","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01176","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:27","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01177","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:28","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01178","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:29","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01179","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01180","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:30","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01181","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:31","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01182","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:32","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01183","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:33","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01184","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:34","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01185","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:35","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01186","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:36","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01187","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:37","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01188","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:38","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01189","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:39","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01190","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01191","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:40","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01192","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:41","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01193","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:42","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01194","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:43","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01195","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:44","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01196","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:45","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01197","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:46","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01198","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:47","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01199","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:48","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01200","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:49","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01201","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01202","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:50","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01203","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:51","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01204","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:52","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01205","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:53","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01206","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:54","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01207","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:55","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01208","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:56","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01209","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01210","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01211","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01212","gapId":"keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01213","gapId":"keymap-item:Grease Pencil Fill Tool:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01214","gapId":"keymap-item:Grease Pencil Fill Tool:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01215","gapId":"keymap-item:Grease Pencil Fill Tool:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01216","gapId":"keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01217","gapId":"keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01218","gapId":"keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01219","gapId":"keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01220","gapId":"keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01221","gapId":"keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01222","gapId":"keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01223","gapId":"keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01224","gapId":"keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01225","gapId":"keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01226","gapId":"keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01227","gapId":"keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01228","gapId":"keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01229","gapId":"keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01230","gapId":"keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01231","gapId":"keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01232","gapId":"keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01233","gapId":"keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01234","gapId":"keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01235","gapId":"keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:26","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01236","gapId":"keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01237","gapId":"keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01238","gapId":"keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01239","gapId":"keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01240","gapId":"keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01241","gapId":"keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01242","gapId":"keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01243","gapId":"keymap-item:Grease Pencil Selection:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01244","gapId":"keymap-item:Grease Pencil Selection:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01245","gapId":"keymap-item:Grease Pencil Selection:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01246","gapId":"keymap-item:Grease Pencil Selection:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01247","gapId":"keymap-item:Grease Pencil Selection:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01248","gapId":"keymap-item:Grease Pencil Selection:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01249","gapId":"keymap-item:Grease Pencil Selection:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01250","gapId":"keymap-item:Grease Pencil Selection:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01251","gapId":"keymap-item:Grease Pencil Selection:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01252","gapId":"keymap-item:Grease Pencil Selection:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01253","gapId":"keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01254","gapId":"keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01255","gapId":"keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01256","gapId":"keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01257","gapId":"keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01258","gapId":"keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01259","gapId":"keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01260","gapId":"keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01261","gapId":"keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01262","gapId":"keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01263","gapId":"keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01264","gapId":"keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01265","gapId":"keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01266","gapId":"keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01267","gapId":"keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01268","gapId":"keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01269","gapId":"keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01270","gapId":"keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01271","gapId":"keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01272","gapId":"keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01273","gapId":"keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01274","gapId":"keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01275","gapId":"keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01276","gapId":"keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01277","gapId":"keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01278","gapId":"keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01279","gapId":"keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01280","gapId":"keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01281","gapId":"keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01282","gapId":"keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01283","gapId":"keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01284","gapId":"keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01285","gapId":"keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01286","gapId":"keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01287","gapId":"keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01288","gapId":"keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01289","gapId":"keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01290","gapId":"keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01291","gapId":"keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01292","gapId":"keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01293","gapId":"keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01294","gapId":"keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01295","gapId":"keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01296","gapId":"keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01297","gapId":"keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01298","gapId":"keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01299","gapId":"keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01300","gapId":"keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01301","gapId":"keymap-item:Grease Pencil:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01302","gapId":"keymap-item:Grease Pencil:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01303","gapId":"keymap-item:Grease Pencil:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01304","gapId":"keymap-item:Grease Pencil:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01305","gapId":"keymap-item:Grease Pencil:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01306","gapId":"keymap-item:Image Editor Tool: Mask, Box:IMAGE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01307","gapId":"keymap-item:Image Editor Tool: Mask, Circle:IMAGE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01308","gapId":"keymap-item:Image Editor Tool: Mask, Cursor:IMAGE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01309","gapId":"keymap-item:Image Editor Tool: Mask, Cursor:IMAGE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01310","gapId":"keymap-item:Image Editor Tool: Mask, Move:IMAGE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01311","gapId":"keymap-item:Image Editor Tool: Mask, Rotate:IMAGE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01312","gapId":"keymap-item:Image Editor Tool: Mask, Scale:IMAGE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01313","gapId":"keymap-item:Image Editor Tool: Mask, Select Box (fallback):IMAGE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01314","gapId":"keymap-item:Image Editor Tool: Mask, Select Box (fallback):IMAGE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01315","gapId":"keymap-item:Image Editor Tool: Mask, Select Box (fallback):IMAGE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01316","gapId":"keymap-item:Image Editor Tool: Mask, Select Box:IMAGE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01317","gapId":"keymap-item:Image Editor Tool: Mask, Select Box:IMAGE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01318","gapId":"keymap-item:Image Editor Tool: Mask, Select Box:IMAGE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01319","gapId":"keymap-item:Image Editor Tool: Mask, Select Circle (fallback):IMAGE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01320","gapId":"keymap-item:Image Editor Tool: Mask, Select Circle (fallback):IMAGE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01321","gapId":"keymap-item:Image Editor Tool: Mask, Select Circle (fallback):IMAGE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01322","gapId":"keymap-item:Image Editor Tool: Mask, Select Circle:IMAGE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01323","gapId":"keymap-item:Image Editor Tool: Mask, Select Circle:IMAGE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01324","gapId":"keymap-item:Image Editor Tool: Mask, Select Circle:IMAGE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01325","gapId":"keymap-item:Image Editor Tool: Mask, Select Lasso (fallback):IMAGE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01326","gapId":"keymap-item:Image Editor Tool: Mask, Select Lasso (fallback):IMAGE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01327","gapId":"keymap-item:Image Editor Tool: Mask, Select Lasso (fallback):IMAGE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01328","gapId":"keymap-item:Image Editor Tool: Mask, Select Lasso:IMAGE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01329","gapId":"keymap-item:Image Editor Tool: Mask, Select Lasso:IMAGE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01330","gapId":"keymap-item:Image Editor Tool: Mask, Select Lasso:IMAGE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01331","gapId":"keymap-item:Image Editor Tool: Mask, Transform:IMAGE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01332","gapId":"keymap-item:Image Editor Tool: Mask, Tweak (fallback):IMAGE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01333","gapId":"keymap-item:Image Editor Tool: Mask, Tweak (fallback):IMAGE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01334","gapId":"keymap-item:Image Editor Tool: Mask, Tweak (fallback):IMAGE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01335","gapId":"keymap-item:Image Editor Tool: Mask, Tweak:IMAGE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01336","gapId":"keymap-item:Image Editor Tool: Mask, Tweak:IMAGE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01337","gapId":"keymap-item:Image Editor Tool: Mask, Tweak:IMAGE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01338","gapId":"keymap-item:Image Editor Tool: Sample:IMAGE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01339","gapId":"keymap-item:Image Editor Tool: Uv, Cursor:IMAGE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01340","gapId":"keymap-item:Image Editor Tool: Uv, Cursor:IMAGE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01341","gapId":"keymap-item:Image Editor Tool: Uv, Grab:IMAGE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01342","gapId":"keymap-item:Image Editor Tool: Uv, Grab:IMAGE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01343","gapId":"keymap-item:Image Editor Tool: Uv, Grab:IMAGE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01344","gapId":"keymap-item:Image Editor Tool: Uv, Grab:IMAGE_EDITOR:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01345","gapId":"keymap-item:Image Editor Tool: Uv, Grab:IMAGE_EDITOR:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01346","gapId":"keymap-item:Image Editor Tool: Uv, Move:IMAGE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01347","gapId":"keymap-item:Image Editor Tool: Uv, Pinch:IMAGE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01348","gapId":"keymap-item:Image Editor Tool: Uv, Pinch:IMAGE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01349","gapId":"keymap-item:Image Editor Tool: Uv, Pinch:IMAGE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01350","gapId":"keymap-item:Image Editor Tool: Uv, Pinch:IMAGE_EDITOR:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01351","gapId":"keymap-item:Image Editor Tool: Uv, Pinch:IMAGE_EDITOR:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01352","gapId":"keymap-item:Image Editor Tool: Uv, Relax:IMAGE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01353","gapId":"keymap-item:Image Editor Tool: Uv, Relax:IMAGE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01354","gapId":"keymap-item:Image Editor Tool: Uv, Relax:IMAGE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01355","gapId":"keymap-item:Image Editor Tool: Uv, Relax:IMAGE_EDITOR:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01356","gapId":"keymap-item:Image Editor Tool: Uv, Relax:IMAGE_EDITOR:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01357","gapId":"keymap-item:Image Editor Tool: Uv, Rip Region:IMAGE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01358","gapId":"keymap-item:Image Editor Tool: Uv, Rotate:IMAGE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01359","gapId":"keymap-item:Image Editor Tool: Uv, Scale:IMAGE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01360","gapId":"keymap-item:Image Editor Tool: Uv, Select Box (fallback):IMAGE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01361","gapId":"keymap-item:Image Editor Tool: Uv, Select Box (fallback):IMAGE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01362","gapId":"keymap-item:Image Editor Tool: Uv, Select Box (fallback):IMAGE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01363","gapId":"keymap-item:Image Editor Tool: Uv, Select Box:IMAGE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01364","gapId":"keymap-item:Image Editor Tool: Uv, Select Box:IMAGE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01365","gapId":"keymap-item:Image Editor Tool: Uv, Select Box:IMAGE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01366","gapId":"keymap-item:Image Editor Tool: Uv, Select Circle (fallback):IMAGE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01367","gapId":"keymap-item:Image Editor Tool: Uv, Select Circle (fallback):IMAGE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01368","gapId":"keymap-item:Image Editor Tool: Uv, Select Circle (fallback):IMAGE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01369","gapId":"keymap-item:Image Editor Tool: Uv, Select Circle:IMAGE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01370","gapId":"keymap-item:Image Editor Tool: Uv, Select Circle:IMAGE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01371","gapId":"keymap-item:Image Editor Tool: Uv, Select Circle:IMAGE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01372","gapId":"keymap-item:Image Editor Tool: Uv, Select Lasso (fallback):IMAGE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01373","gapId":"keymap-item:Image Editor Tool: Uv, Select Lasso (fallback):IMAGE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01374","gapId":"keymap-item:Image Editor Tool: Uv, Select Lasso (fallback):IMAGE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01375","gapId":"keymap-item:Image Editor Tool: Uv, Select Lasso:IMAGE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01376","gapId":"keymap-item:Image Editor Tool: Uv, Select Lasso:IMAGE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01377","gapId":"keymap-item:Image Editor Tool: Uv, Select Lasso:IMAGE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01378","gapId":"keymap-item:Image Editor Tool: Uv, Tweak (fallback):IMAGE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01379","gapId":"keymap-item:Image Editor Tool: Uv, Tweak (fallback):IMAGE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01380","gapId":"keymap-item:Image Editor Tool: Uv, Tweak (fallback):IMAGE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01381","gapId":"keymap-item:Image Editor Tool: Uv, Tweak:IMAGE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01382","gapId":"keymap-item:Image Editor Tool: Uv, Tweak:IMAGE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01383","gapId":"keymap-item:Image Editor Tool: Uv, Tweak:IMAGE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01384","gapId":"keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01385","gapId":"keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01386","gapId":"keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01387","gapId":"keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01388","gapId":"keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01389","gapId":"keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01390","gapId":"keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01391","gapId":"keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01392","gapId":"keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01393","gapId":"keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01394","gapId":"keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01395","gapId":"keymap-item:Image Paint:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01396","gapId":"keymap-item:Image Paint:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01397","gapId":"keymap-item:Image Paint:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01398","gapId":"keymap-item:Image Paint:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01399","gapId":"keymap-item:Image Paint:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01400","gapId":"keymap-item:Image Paint:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01401","gapId":"keymap-item:Image Paint:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01402","gapId":"keymap-item:Image Paint:EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01403","gapId":"keymap-item:Image Paint:EMPTY:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01404","gapId":"keymap-item:Image Paint:EMPTY:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01405","gapId":"keymap-item:Image Paint:EMPTY:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01406","gapId":"keymap-item:Image Paint:EMPTY:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01407","gapId":"keymap-item:Image Paint:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01408","gapId":"keymap-item:Image Paint:EMPTY:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01409","gapId":"keymap-item:Image Paint:EMPTY:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01410","gapId":"keymap-item:Image Paint:EMPTY:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01411","gapId":"keymap-item:Image Paint:EMPTY:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01412","gapId":"keymap-item:Image Paint:EMPTY:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01413","gapId":"keymap-item:Image Paint:EMPTY:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01414","gapId":"keymap-item:Image Paint:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01415","gapId":"keymap-item:Image Paint:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01416","gapId":"keymap-item:Image Paint:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01417","gapId":"keymap-item:Image Paint:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01418","gapId":"keymap-item:Image Paint:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01419","gapId":"keymap-item:Image Paint:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01420","gapId":"keymap-item:Image Paint:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01421","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01422","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01423","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01424","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01425","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01426","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01427","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01428","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01429","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01430","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01431","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01432","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01433","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01434","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01435","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01436","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01437","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01438","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01439","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01440","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:26","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01441","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:27","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01442","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:28","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01443","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:29","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01444","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01445","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:30","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01446","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:31","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01447","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:32","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01448","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:33","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01449","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:34","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01450","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:35","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01451","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:36","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01452","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:37","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01453","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:38","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01454","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:39","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01455","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01456","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:40","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01457","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:41","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01458","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:42","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01459","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:43","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01460","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:44","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01461","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:45","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01462","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:46","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01463","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:47","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01464","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:48","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01465","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:49","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01466","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01467","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:50","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01468","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01469","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01470","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01471","gapId":"keymap-item:Image:IMAGE_EDITOR:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01472","gapId":"keymap-item:Info:INFO:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01473","gapId":"keymap-item:Info:INFO:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01474","gapId":"keymap-item:Info:INFO:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01475","gapId":"keymap-item:Info:INFO:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01476","gapId":"keymap-item:Info:INFO:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01477","gapId":"keymap-item:Info:INFO:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01478","gapId":"keymap-item:Info:INFO:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01479","gapId":"keymap-item:Info:INFO:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01480","gapId":"keymap-item:Info:INFO:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01481","gapId":"keymap-item:Info:INFO:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01482","gapId":"keymap-item:Info:INFO:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01483","gapId":"keymap-item:Info:INFO:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01484","gapId":"keymap-item:Info:INFO:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01485","gapId":"keymap-item:Info:INFO:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01486","gapId":"keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01487","gapId":"keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01488","gapId":"keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01489","gapId":"keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01490","gapId":"keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01491","gapId":"keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01492","gapId":"keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01493","gapId":"keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01494","gapId":"keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01495","gapId":"keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01496","gapId":"keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01497","gapId":"keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01498","gapId":"keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01499","gapId":"keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01500","gapId":"keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01501","gapId":"keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01502","gapId":"keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01503","gapId":"keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01504","gapId":"keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01505","gapId":"keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01506","gapId":"keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01507","gapId":"keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01508","gapId":"keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01509","gapId":"keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01510","gapId":"keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01511","gapId":"keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01512","gapId":"keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01513","gapId":"keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01514","gapId":"keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01515","gapId":"keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01516","gapId":"keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01517","gapId":"keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01518","gapId":"keymap-item:Lattice:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01519","gapId":"keymap-item:Lattice:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01520","gapId":"keymap-item:Lattice:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01521","gapId":"keymap-item:Lattice:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01522","gapId":"keymap-item:Lattice:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01523","gapId":"keymap-item:Lattice:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01524","gapId":"keymap-item:Lattice:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01525","gapId":"keymap-item:Lattice:EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01526","gapId":"keymap-item:Lattice:EMPTY:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01527","gapId":"keymap-item:Lattice:EMPTY:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01528","gapId":"keymap-item:Lattice:EMPTY:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01529","gapId":"keymap-item:Lattice:EMPTY:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01530","gapId":"keymap-item:Lattice:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01531","gapId":"keymap-item:Lattice:EMPTY:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01532","gapId":"keymap-item:Lattice:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01533","gapId":"keymap-item:Lattice:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01534","gapId":"keymap-item:Lattice:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01535","gapId":"keymap-item:Lattice:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01536","gapId":"keymap-item:Lattice:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01537","gapId":"keymap-item:Lattice:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01538","gapId":"keymap-item:Lattice:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01539","gapId":"keymap-item:Markers:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01540","gapId":"keymap-item:Markers:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01541","gapId":"keymap-item:Markers:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01542","gapId":"keymap-item:Markers:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01543","gapId":"keymap-item:Markers:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01544","gapId":"keymap-item:Markers:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01545","gapId":"keymap-item:Markers:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01546","gapId":"keymap-item:Markers:EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01547","gapId":"keymap-item:Markers:EMPTY:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01548","gapId":"keymap-item:Markers:EMPTY:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01549","gapId":"keymap-item:Markers:EMPTY:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01550","gapId":"keymap-item:Markers:EMPTY:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01551","gapId":"keymap-item:Markers:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01552","gapId":"keymap-item:Markers:EMPTY:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01553","gapId":"keymap-item:Markers:EMPTY:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01554","gapId":"keymap-item:Markers:EMPTY:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01555","gapId":"keymap-item:Markers:EMPTY:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01556","gapId":"keymap-item:Markers:EMPTY:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01557","gapId":"keymap-item:Markers:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01558","gapId":"keymap-item:Markers:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01559","gapId":"keymap-item:Markers:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01560","gapId":"keymap-item:Markers:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01561","gapId":"keymap-item:Markers:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01562","gapId":"keymap-item:Markers:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01563","gapId":"keymap-item:Markers:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01564","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01565","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01566","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01567","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01568","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01569","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01570","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01571","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01572","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01573","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01574","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01575","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01576","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01577","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01578","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01579","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01580","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01581","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01582","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01583","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:26","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01584","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:27","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01585","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:28","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01586","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:29","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01587","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01588","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:30","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01589","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:31","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01590","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:32","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01591","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:33","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01592","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:34","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01593","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:35","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01594","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:36","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01595","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:37","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01596","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:38","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01597","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:39","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01598","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01599","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:40","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01600","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:41","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01601","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:42","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01602","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:43","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01603","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:44","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01604","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:45","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01605","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:46","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01606","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:47","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01607","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01608","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01609","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01610","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01611","gapId":"keymap-item:Mask Editing:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01612","gapId":"keymap-item:Mesh Filter Modal Map:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01613","gapId":"keymap-item:Mesh Filter Modal Map:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01614","gapId":"keymap-item:Mesh Filter Modal Map:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01615","gapId":"keymap-item:Mesh Filter Modal Map:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01616","gapId":"keymap-item:Mesh Filter Modal Map:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01617","gapId":"keymap-item:Mesh Filter Modal Map:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01618","gapId":"keymap-item:Mesh:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01619","gapId":"keymap-item:Mesh:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01620","gapId":"keymap-item:Mesh:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01621","gapId":"keymap-item:Mesh:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01622","gapId":"keymap-item:Mesh:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01623","gapId":"keymap-item:Mesh:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01624","gapId":"keymap-item:Mesh:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01625","gapId":"keymap-item:Mesh:EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01626","gapId":"keymap-item:Mesh:EMPTY:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01627","gapId":"keymap-item:Mesh:EMPTY:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01628","gapId":"keymap-item:Mesh:EMPTY:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01629","gapId":"keymap-item:Mesh:EMPTY:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01630","gapId":"keymap-item:Mesh:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01631","gapId":"keymap-item:Mesh:EMPTY:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01632","gapId":"keymap-item:Mesh:EMPTY:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01633","gapId":"keymap-item:Mesh:EMPTY:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01634","gapId":"keymap-item:Mesh:EMPTY:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01635","gapId":"keymap-item:Mesh:EMPTY:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01636","gapId":"keymap-item:Mesh:EMPTY:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01637","gapId":"keymap-item:Mesh:EMPTY:WINDOW:26","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01638","gapId":"keymap-item:Mesh:EMPTY:WINDOW:27","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01639","gapId":"keymap-item:Mesh:EMPTY:WINDOW:28","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01640","gapId":"keymap-item:Mesh:EMPTY:WINDOW:29","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01641","gapId":"keymap-item:Mesh:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01642","gapId":"keymap-item:Mesh:EMPTY:WINDOW:30","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01643","gapId":"keymap-item:Mesh:EMPTY:WINDOW:31","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01644","gapId":"keymap-item:Mesh:EMPTY:WINDOW:32","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01645","gapId":"keymap-item:Mesh:EMPTY:WINDOW:33","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01646","gapId":"keymap-item:Mesh:EMPTY:WINDOW:34","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01647","gapId":"keymap-item:Mesh:EMPTY:WINDOW:35","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01648","gapId":"keymap-item:Mesh:EMPTY:WINDOW:36","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01649","gapId":"keymap-item:Mesh:EMPTY:WINDOW:37","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01650","gapId":"keymap-item:Mesh:EMPTY:WINDOW:38","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01651","gapId":"keymap-item:Mesh:EMPTY:WINDOW:39","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01652","gapId":"keymap-item:Mesh:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01653","gapId":"keymap-item:Mesh:EMPTY:WINDOW:40","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01654","gapId":"keymap-item:Mesh:EMPTY:WINDOW:41","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01655","gapId":"keymap-item:Mesh:EMPTY:WINDOW:42","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01656","gapId":"keymap-item:Mesh:EMPTY:WINDOW:43","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01657","gapId":"keymap-item:Mesh:EMPTY:WINDOW:44","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01658","gapId":"keymap-item:Mesh:EMPTY:WINDOW:45","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01659","gapId":"keymap-item:Mesh:EMPTY:WINDOW:46","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01660","gapId":"keymap-item:Mesh:EMPTY:WINDOW:47","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01661","gapId":"keymap-item:Mesh:EMPTY:WINDOW:48","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01662","gapId":"keymap-item:Mesh:EMPTY:WINDOW:49","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01663","gapId":"keymap-item:Mesh:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01664","gapId":"keymap-item:Mesh:EMPTY:WINDOW:50","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01665","gapId":"keymap-item:Mesh:EMPTY:WINDOW:51","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01666","gapId":"keymap-item:Mesh:EMPTY:WINDOW:52","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01667","gapId":"keymap-item:Mesh:EMPTY:WINDOW:53","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01668","gapId":"keymap-item:Mesh:EMPTY:WINDOW:54","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01669","gapId":"keymap-item:Mesh:EMPTY:WINDOW:55","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01670","gapId":"keymap-item:Mesh:EMPTY:WINDOW:56","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01671","gapId":"keymap-item:Mesh:EMPTY:WINDOW:57","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01672","gapId":"keymap-item:Mesh:EMPTY:WINDOW:58","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01673","gapId":"keymap-item:Mesh:EMPTY:WINDOW:59","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01674","gapId":"keymap-item:Mesh:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01675","gapId":"keymap-item:Mesh:EMPTY:WINDOW:60","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01676","gapId":"keymap-item:Mesh:EMPTY:WINDOW:61","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01677","gapId":"keymap-item:Mesh:EMPTY:WINDOW:62","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01678","gapId":"keymap-item:Mesh:EMPTY:WINDOW:63","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01679","gapId":"keymap-item:Mesh:EMPTY:WINDOW:64","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01680","gapId":"keymap-item:Mesh:EMPTY:WINDOW:65","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01681","gapId":"keymap-item:Mesh:EMPTY:WINDOW:66","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01682","gapId":"keymap-item:Mesh:EMPTY:WINDOW:67","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01683","gapId":"keymap-item:Mesh:EMPTY:WINDOW:68","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01684","gapId":"keymap-item:Mesh:EMPTY:WINDOW:69","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01685","gapId":"keymap-item:Mesh:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01686","gapId":"keymap-item:Mesh:EMPTY:WINDOW:70","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01687","gapId":"keymap-item:Mesh:EMPTY:WINDOW:71","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01688","gapId":"keymap-item:Mesh:EMPTY:WINDOW:72","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01689","gapId":"keymap-item:Mesh:EMPTY:WINDOW:73","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01690","gapId":"keymap-item:Mesh:EMPTY:WINDOW:74","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01691","gapId":"keymap-item:Mesh:EMPTY:WINDOW:75","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01692","gapId":"keymap-item:Mesh:EMPTY:WINDOW:76","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01693","gapId":"keymap-item:Mesh:EMPTY:WINDOW:77","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01694","gapId":"keymap-item:Mesh:EMPTY:WINDOW:78","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01695","gapId":"keymap-item:Mesh:EMPTY:WINDOW:79","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01696","gapId":"keymap-item:Mesh:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01697","gapId":"keymap-item:Mesh:EMPTY:WINDOW:80","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01698","gapId":"keymap-item:Mesh:EMPTY:WINDOW:81","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01699","gapId":"keymap-item:Mesh:EMPTY:WINDOW:82","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01700","gapId":"keymap-item:Mesh:EMPTY:WINDOW:83","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01701","gapId":"keymap-item:Mesh:EMPTY:WINDOW:84","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01702","gapId":"keymap-item:Mesh:EMPTY:WINDOW:85","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01703","gapId":"keymap-item:Mesh:EMPTY:WINDOW:86","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01704","gapId":"keymap-item:Mesh:EMPTY:WINDOW:87","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01705","gapId":"keymap-item:Mesh:EMPTY:WINDOW:88","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01706","gapId":"keymap-item:Mesh:EMPTY:WINDOW:89","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01707","gapId":"keymap-item:Mesh:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01708","gapId":"keymap-item:Mesh:EMPTY:WINDOW:90","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01709","gapId":"keymap-item:Mesh:EMPTY:WINDOW:91","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01710","gapId":"keymap-item:Mesh:EMPTY:WINDOW:92","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01711","gapId":"keymap-item:Metaball:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01712","gapId":"keymap-item:Metaball:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01713","gapId":"keymap-item:Metaball:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01714","gapId":"keymap-item:Metaball:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01715","gapId":"keymap-item:Metaball:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01716","gapId":"keymap-item:Metaball:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01717","gapId":"keymap-item:Metaball:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01718","gapId":"keymap-item:Metaball:EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01719","gapId":"keymap-item:Metaball:EMPTY:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01720","gapId":"keymap-item:Metaball:EMPTY:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01721","gapId":"keymap-item:Metaball:EMPTY:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01722","gapId":"keymap-item:Metaball:EMPTY:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01723","gapId":"keymap-item:Metaball:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01724","gapId":"keymap-item:Metaball:EMPTY:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01725","gapId":"keymap-item:Metaball:EMPTY:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01726","gapId":"keymap-item:Metaball:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01727","gapId":"keymap-item:Metaball:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01728","gapId":"keymap-item:Metaball:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01729","gapId":"keymap-item:Metaball:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01730","gapId":"keymap-item:Metaball:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01731","gapId":"keymap-item:Metaball:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01732","gapId":"keymap-item:Metaball:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01733","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01734","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01735","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01736","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01737","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01738","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01739","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01740","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01741","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01742","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01743","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01744","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01745","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01746","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01747","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01748","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01749","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01750","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01751","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01752","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:26","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01753","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:27","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01754","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:28","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01755","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:29","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01756","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01757","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:30","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01758","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:31","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01759","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:32","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01760","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:33","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01761","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:34","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01762","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:35","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01763","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:36","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01764","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:37","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01765","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:38","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01766","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:39","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01767","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01768","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:40","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01769","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:41","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01770","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:42","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01771","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:43","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01772","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:44","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01773","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:45","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01774","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:46","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01775","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:47","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01776","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:48","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01777","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01778","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01779","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01780","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01781","gapId":"keymap-item:NLA Editor:NLA_EDITOR:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01782","gapId":"keymap-item:NLA Generic:NLA_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01783","gapId":"keymap-item:NLA Generic:NLA_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01784","gapId":"keymap-item:NLA Generic:NLA_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01785","gapId":"keymap-item:NLA Generic:NLA_EDITOR:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01786","gapId":"keymap-item:NLA Generic:NLA_EDITOR:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01787","gapId":"keymap-item:NLA Generic:NLA_EDITOR:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01788","gapId":"keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01789","gapId":"keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01790","gapId":"keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01791","gapId":"keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01792","gapId":"keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01793","gapId":"keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01794","gapId":"keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01795","gapId":"keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01796","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01797","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01798","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01799","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:100","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01800","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:101","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01801","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:102","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01802","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:103","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01803","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01804","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01805","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01806","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01807","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01808","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01809","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01810","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01811","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01812","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01813","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01814","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01815","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01816","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01817","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01818","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01819","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:26","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01820","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:27","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01821","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:28","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01822","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:29","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01823","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01824","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:30","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01825","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:31","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01826","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:32","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01827","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:33","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01828","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:34","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01829","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:35","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01830","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:36","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01831","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:37","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01832","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:38","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01833","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:39","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01834","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01835","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:40","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01836","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:41","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01837","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:42","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01838","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:43","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01839","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:44","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01840","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:45","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01841","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:46","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01842","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:47","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01843","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:48","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01844","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:49","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01845","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01846","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:50","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01847","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:51","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01848","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:52","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01849","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:53","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01850","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:54","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01851","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:55","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01852","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:56","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01853","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:57","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01854","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:58","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01855","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:59","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01856","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01857","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:60","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01858","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:61","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01859","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:62","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01860","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:63","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01861","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:64","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01862","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:65","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01863","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:66","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01864","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:67","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01865","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:68","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01866","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:69","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01867","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01868","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:70","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01869","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:71","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01870","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:72","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01871","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:73","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01872","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:74","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01873","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:75","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01874","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:76","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01875","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:77","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01876","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:78","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01877","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:79","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01878","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01879","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:80","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01880","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:81","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01881","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:82","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01882","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:83","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01883","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:84","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01884","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:85","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01885","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:86","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01886","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:87","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01887","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:88","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01888","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:89","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01889","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01890","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:90","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01891","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:91","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01892","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:92","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01893","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:93","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01894","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:94","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01895","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:95","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01896","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:96","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01897","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:97","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01898","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:98","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01899","gapId":"keymap-item:Node Editor:NODE_EDITOR:WINDOW:99","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01900","gapId":"keymap-item:Node Generic:NODE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01901","gapId":"keymap-item:Node Generic:NODE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01902","gapId":"keymap-item:Node Link Modal Map:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01903","gapId":"keymap-item:Node Link Modal Map:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01904","gapId":"keymap-item:Node Link Modal Map:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01905","gapId":"keymap-item:Node Link Modal Map:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01906","gapId":"keymap-item:Node Link Modal Map:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01907","gapId":"keymap-item:Node Link Modal Map:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01908","gapId":"keymap-item:Node Resize Modal Map:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01909","gapId":"keymap-item:Node Resize Modal Map:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01910","gapId":"keymap-item:Node Resize Modal Map:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01911","gapId":"keymap-item:Node Resize Modal Map:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01912","gapId":"keymap-item:Node Resize Modal Map:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01913","gapId":"keymap-item:Node Resize Modal Map:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01914","gapId":"keymap-item:Node Resize Modal Map:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01915","gapId":"keymap-item:Node Tool: Add Reroute:NODE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01916","gapId":"keymap-item:Node Tool: Links Cut:NODE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01917","gapId":"keymap-item:Node Tool: Mute Links:NODE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01918","gapId":"keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01919","gapId":"keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01920","gapId":"keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01921","gapId":"keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01922","gapId":"keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01923","gapId":"keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01924","gapId":"keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01925","gapId":"keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01926","gapId":"keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01927","gapId":"keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01928","gapId":"keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01929","gapId":"keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01930","gapId":"keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01931","gapId":"keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01932","gapId":"keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01933","gapId":"keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01934","gapId":"keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01935","gapId":"keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01936","gapId":"keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01937","gapId":"keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01938","gapId":"keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01939","gapId":"keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01940","gapId":"keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01941","gapId":"keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01942","gapId":"keymap-item:Node Tool: Select Circle (fallback):NODE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01943","gapId":"keymap-item:Node Tool: Select Circle (fallback):NODE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01944","gapId":"keymap-item:Node Tool: Select Circle (fallback):NODE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01945","gapId":"keymap-item:Node Tool: Select Circle:NODE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01946","gapId":"keymap-item:Node Tool: Select Circle:NODE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01947","gapId":"keymap-item:Node Tool: Select Circle:NODE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01948","gapId":"keymap-item:Node Tool: Select Lasso (fallback):NODE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01949","gapId":"keymap-item:Node Tool: Select Lasso (fallback):NODE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01950","gapId":"keymap-item:Node Tool: Select Lasso (fallback):NODE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01951","gapId":"keymap-item:Node Tool: Select Lasso:NODE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01952","gapId":"keymap-item:Node Tool: Select Lasso:NODE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01953","gapId":"keymap-item:Node Tool: Select Lasso:NODE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01954","gapId":"keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01955","gapId":"keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01956","gapId":"keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01957","gapId":"keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01958","gapId":"keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01959","gapId":"keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01960","gapId":"keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01961","gapId":"keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01962","gapId":"keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01963","gapId":"keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01964","gapId":"keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01965","gapId":"keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01966","gapId":"keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01967","gapId":"keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01968","gapId":"keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01969","gapId":"keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01970","gapId":"keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01971","gapId":"keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01972","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01973","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01974","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01975","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01976","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01977","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01978","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01979","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01980","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01981","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01982","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01983","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01984","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01985","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01986","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01987","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01988","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01989","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01990","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01991","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:26","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01992","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:27","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01993","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:28","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01994","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:29","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01995","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01996","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:30","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01997","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:31","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01998","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:32","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-01999","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:33","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02000","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:34","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02001","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:35","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02002","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:36","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02003","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:37","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02004","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:38","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02005","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:39","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02006","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02007","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:40","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02008","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:41","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02009","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:42","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02010","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:43","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02011","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:44","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02012","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:45","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02013","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:46","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02014","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:47","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02015","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:48","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02016","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:49","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02017","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02018","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:50","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02019","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:51","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02020","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:52","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02021","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:53","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02022","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:54","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02023","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:55","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02024","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:56","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02025","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:57","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02026","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:58","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02027","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02028","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02029","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02030","gapId":"keymap-item:Object Mode:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02031","gapId":"keymap-item:Object Non-modal:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02032","gapId":"keymap-item:Object Non-modal:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02033","gapId":"keymap-item:Object Non-modal:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02034","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02035","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02036","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02037","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:100","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02038","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:101","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02039","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:102","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02040","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02041","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02042","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02043","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02044","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02045","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02046","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02047","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02048","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02049","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02050","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02051","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02052","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02053","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02054","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02055","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02056","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:26","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02057","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:27","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02058","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:28","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02059","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:29","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02060","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02061","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:30","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02062","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:31","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02063","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:32","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02064","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:33","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02065","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:34","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02066","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:35","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02067","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:36","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02068","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:37","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02069","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:38","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02070","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:39","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02071","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02072","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:40","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02073","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:41","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02074","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:42","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02075","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:43","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02076","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:44","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02077","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:45","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02078","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:46","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02079","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:47","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02080","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:48","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02081","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:49","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02082","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02083","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:50","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02084","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:51","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02085","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:52","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02086","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:53","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02087","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:54","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02088","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:55","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02089","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:56","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02090","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:57","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02091","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:58","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02092","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:59","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02093","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02094","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:60","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02095","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:61","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02096","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:62","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02097","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:63","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02098","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:64","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02099","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:65","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02100","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:66","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02101","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:67","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02102","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:68","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02103","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:69","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02104","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02105","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:70","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02106","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:71","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02107","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:72","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02108","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:73","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02109","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:74","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02110","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:75","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02111","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:76","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02112","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:77","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02113","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:78","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02114","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:79","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02115","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02116","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:80","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02117","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:81","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02118","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:82","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02119","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:83","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02120","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:84","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02121","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:85","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02122","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:86","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02123","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:87","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02124","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:88","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02125","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:89","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02126","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02127","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:90","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02128","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:91","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02129","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:92","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02130","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:93","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02131","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:94","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02132","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:95","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02133","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:96","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02134","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:97","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02135","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:98","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02136","gapId":"keymap-item:Outliner:OUTLINER:WINDOW:99","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02137","gapId":"keymap-item:Paint Curve:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02138","gapId":"keymap-item:Paint Curve:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02139","gapId":"keymap-item:Paint Curve:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02140","gapId":"keymap-item:Paint Curve:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02141","gapId":"keymap-item:Paint Curve:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02142","gapId":"keymap-item:Paint Curve:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02143","gapId":"keymap-item:Paint Curve:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02144","gapId":"keymap-item:Paint Curve:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02145","gapId":"keymap-item:Paint Curve:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02146","gapId":"keymap-item:Paint Curve:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02147","gapId":"keymap-item:Paint Curve:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02148","gapId":"keymap-item:Paint Curve:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02149","gapId":"keymap-item:Paint Curve:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02150","gapId":"keymap-item:Paint Curve:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02151","gapId":"keymap-item:Paint Curve:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02152","gapId":"keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02153","gapId":"keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02154","gapId":"keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02155","gapId":"keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02156","gapId":"keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02157","gapId":"keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02158","gapId":"keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02159","gapId":"keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02160","gapId":"keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02161","gapId":"keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02162","gapId":"keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02163","gapId":"keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02164","gapId":"keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02165","gapId":"keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02166","gapId":"keymap-item:Paint Stroke Modal:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02167","gapId":"keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02168","gapId":"keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02169","gapId":"keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02170","gapId":"keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02171","gapId":"keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02172","gapId":"keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02173","gapId":"keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02174","gapId":"keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02175","gapId":"keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02176","gapId":"keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02177","gapId":"keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02178","gapId":"keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02179","gapId":"keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02180","gapId":"keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02181","gapId":"keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02182","gapId":"keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02183","gapId":"keymap-item:Particle:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02184","gapId":"keymap-item:Particle:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02185","gapId":"keymap-item:Particle:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02186","gapId":"keymap-item:Particle:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02187","gapId":"keymap-item:Particle:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02188","gapId":"keymap-item:Particle:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02189","gapId":"keymap-item:Particle:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02190","gapId":"keymap-item:Particle:EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02191","gapId":"keymap-item:Particle:EMPTY:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02192","gapId":"keymap-item:Particle:EMPTY:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02193","gapId":"keymap-item:Particle:EMPTY:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02194","gapId":"keymap-item:Particle:EMPTY:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02195","gapId":"keymap-item:Particle:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02196","gapId":"keymap-item:Particle:EMPTY:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02197","gapId":"keymap-item:Particle:EMPTY:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02198","gapId":"keymap-item:Particle:EMPTY:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02199","gapId":"keymap-item:Particle:EMPTY:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02200","gapId":"keymap-item:Particle:EMPTY:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02201","gapId":"keymap-item:Particle:EMPTY:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02202","gapId":"keymap-item:Particle:EMPTY:WINDOW:26","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02203","gapId":"keymap-item:Particle:EMPTY:WINDOW:27","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02204","gapId":"keymap-item:Particle:EMPTY:WINDOW:28","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02205","gapId":"keymap-item:Particle:EMPTY:WINDOW:29","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02206","gapId":"keymap-item:Particle:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02207","gapId":"keymap-item:Particle:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02208","gapId":"keymap-item:Particle:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02209","gapId":"keymap-item:Particle:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02210","gapId":"keymap-item:Particle:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02211","gapId":"keymap-item:Particle:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02212","gapId":"keymap-item:Particle:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02213","gapId":"keymap-item:Pen Tool Modal Map:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02214","gapId":"keymap-item:Pen Tool Modal Map:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02215","gapId":"keymap-item:Pen Tool Modal Map:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02216","gapId":"keymap-item:Point Cloud:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02217","gapId":"keymap-item:Point Cloud:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02218","gapId":"keymap-item:Point Cloud:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02219","gapId":"keymap-item:Point Cloud:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02220","gapId":"keymap-item:Point Cloud:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02221","gapId":"keymap-item:Point Cloud:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02222","gapId":"keymap-item:Point Cloud:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02223","gapId":"keymap-item:Point Cloud:EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02224","gapId":"keymap-item:Point Cloud:EMPTY:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02225","gapId":"keymap-item:Point Cloud:EMPTY:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02226","gapId":"keymap-item:Point Cloud:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02227","gapId":"keymap-item:Point Cloud:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02228","gapId":"keymap-item:Point Cloud:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02229","gapId":"keymap-item:Point Cloud:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02230","gapId":"keymap-item:Point Cloud:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02231","gapId":"keymap-item:Point Cloud:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02232","gapId":"keymap-item:Point Cloud:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02233","gapId":"keymap-item:Point Cloud:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02234","gapId":"keymap-item:Pose:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02235","gapId":"keymap-item:Pose:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02236","gapId":"keymap-item:Pose:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02237","gapId":"keymap-item:Pose:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02238","gapId":"keymap-item:Pose:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02239","gapId":"keymap-item:Pose:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02240","gapId":"keymap-item:Pose:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02241","gapId":"keymap-item:Pose:EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02242","gapId":"keymap-item:Pose:EMPTY:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02243","gapId":"keymap-item:Pose:EMPTY:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02244","gapId":"keymap-item:Pose:EMPTY:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02245","gapId":"keymap-item:Pose:EMPTY:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02246","gapId":"keymap-item:Pose:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02247","gapId":"keymap-item:Pose:EMPTY:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02248","gapId":"keymap-item:Pose:EMPTY:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02249","gapId":"keymap-item:Pose:EMPTY:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02250","gapId":"keymap-item:Pose:EMPTY:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02251","gapId":"keymap-item:Pose:EMPTY:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02252","gapId":"keymap-item:Pose:EMPTY:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02253","gapId":"keymap-item:Pose:EMPTY:WINDOW:26","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02254","gapId":"keymap-item:Pose:EMPTY:WINDOW:27","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02255","gapId":"keymap-item:Pose:EMPTY:WINDOW:28","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02256","gapId":"keymap-item:Pose:EMPTY:WINDOW:29","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02257","gapId":"keymap-item:Pose:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02258","gapId":"keymap-item:Pose:EMPTY:WINDOW:30","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02259","gapId":"keymap-item:Pose:EMPTY:WINDOW:31","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02260","gapId":"keymap-item:Pose:EMPTY:WINDOW:32","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02261","gapId":"keymap-item:Pose:EMPTY:WINDOW:33","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02262","gapId":"keymap-item:Pose:EMPTY:WINDOW:34","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02263","gapId":"keymap-item:Pose:EMPTY:WINDOW:35","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02264","gapId":"keymap-item:Pose:EMPTY:WINDOW:36","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02265","gapId":"keymap-item:Pose:EMPTY:WINDOW:37","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02266","gapId":"keymap-item:Pose:EMPTY:WINDOW:38","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02267","gapId":"keymap-item:Pose:EMPTY:WINDOW:39","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02268","gapId":"keymap-item:Pose:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02269","gapId":"keymap-item:Pose:EMPTY:WINDOW:40","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02270","gapId":"keymap-item:Pose:EMPTY:WINDOW:41","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02271","gapId":"keymap-item:Pose:EMPTY:WINDOW:42","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02272","gapId":"keymap-item:Pose:EMPTY:WINDOW:43","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02273","gapId":"keymap-item:Pose:EMPTY:WINDOW:44","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02274","gapId":"keymap-item:Pose:EMPTY:WINDOW:45","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02275","gapId":"keymap-item:Pose:EMPTY:WINDOW:46","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02276","gapId":"keymap-item:Pose:EMPTY:WINDOW:47","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02277","gapId":"keymap-item:Pose:EMPTY:WINDOW:48","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02278","gapId":"keymap-item:Pose:EMPTY:WINDOW:49","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02279","gapId":"keymap-item:Pose:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02280","gapId":"keymap-item:Pose:EMPTY:WINDOW:50","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02281","gapId":"keymap-item:Pose:EMPTY:WINDOW:51","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02282","gapId":"keymap-item:Pose:EMPTY:WINDOW:52","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02283","gapId":"keymap-item:Pose:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02284","gapId":"keymap-item:Pose:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02285","gapId":"keymap-item:Pose:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02286","gapId":"keymap-item:Pose:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02287","gapId":"keymap-item:Preferences:PREFERENCES:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02288","gapId":"keymap-item:Preferences:PREFERENCES:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02289","gapId":"keymap-item:Preferences_nav:PREFERENCES:UI:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02290","gapId":"keymap-item:Preferences_nav:PREFERENCES:UI:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02291","gapId":"keymap-item:Preview Tool: Cursor:SEQUENCE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02292","gapId":"keymap-item:Preview Tool: Cursor:SEQUENCE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02293","gapId":"keymap-item:Preview Tool: Move:SEQUENCE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02294","gapId":"keymap-item:Preview Tool: Rotate:SEQUENCE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02295","gapId":"keymap-item:Preview Tool: Sample:SEQUENCE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02296","gapId":"keymap-item:Preview Tool: Scale:SEQUENCE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02297","gapId":"keymap-item:Preview Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02298","gapId":"keymap-item:Preview Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02299","gapId":"keymap-item:Preview Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02300","gapId":"keymap-item:Preview Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02301","gapId":"keymap-item:Preview Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02302","gapId":"keymap-item:Preview Tool: Select Box:SEQUENCE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02303","gapId":"keymap-item:Preview Tool: Select Box:SEQUENCE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02304","gapId":"keymap-item:Preview Tool: Select Box:SEQUENCE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02305","gapId":"keymap-item:Preview Tool: Select Box:SEQUENCE_EDITOR:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02306","gapId":"keymap-item:Preview Tool: Select Box:SEQUENCE_EDITOR:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02307","gapId":"keymap-item:Preview Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02308","gapId":"keymap-item:Preview Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02309","gapId":"keymap-item:Preview Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02310","gapId":"keymap-item:Preview Tool: Select Circle:SEQUENCE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02311","gapId":"keymap-item:Preview Tool: Select Circle:SEQUENCE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02312","gapId":"keymap-item:Preview Tool: Select Circle:SEQUENCE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02313","gapId":"keymap-item:Preview Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02314","gapId":"keymap-item:Preview Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02315","gapId":"keymap-item:Preview Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02316","gapId":"keymap-item:Preview Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02317","gapId":"keymap-item:Preview Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02318","gapId":"keymap-item:Preview Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02319","gapId":"keymap-item:Preview Tool: Tweak (fallback):SEQUENCE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02320","gapId":"keymap-item:Preview Tool: Tweak (fallback):SEQUENCE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02321","gapId":"keymap-item:Preview Tool: Tweak (fallback):SEQUENCE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02322","gapId":"keymap-item:Preview Tool: Tweak (fallback):SEQUENCE_EDITOR:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02323","gapId":"keymap-item:Preview Tool: Tweak (fallback):SEQUENCE_EDITOR:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02324","gapId":"keymap-item:Preview Tool: Tweak:SEQUENCE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02325","gapId":"keymap-item:Preview Tool: Tweak:SEQUENCE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02326","gapId":"keymap-item:Preview Tool: Tweak:SEQUENCE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02327","gapId":"keymap-item:Preview Tool: Tweak:SEQUENCE_EDITOR:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02328","gapId":"keymap-item:Preview Tool: Tweak:SEQUENCE_EDITOR:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02329","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02330","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02331","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02332","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02333","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02334","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02335","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02336","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02337","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02338","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02339","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02340","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02341","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02342","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02343","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02344","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02345","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02346","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02347","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02348","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:26","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02349","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:27","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02350","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:28","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02351","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:29","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02352","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02353","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:30","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02354","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:31","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02355","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:32","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02356","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:33","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02357","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:34","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02358","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:35","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02359","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:36","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02360","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:37","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02361","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:38","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02362","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:39","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02363","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02364","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:40","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02365","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:41","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02366","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:42","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02367","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:43","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02368","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:44","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02369","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:45","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02370","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:46","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02371","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:47","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02372","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:48","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02373","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:49","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02374","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02375","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:50","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02376","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:51","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02377","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:52","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02378","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:53","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02379","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:54","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02380","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:55","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02381","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:56","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02382","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:57","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02383","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:58","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02384","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:59","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02385","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02386","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:60","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02387","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:61","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02388","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:62","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02389","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:63","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02390","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:64","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02391","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:65","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02392","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:66","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02393","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:67","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02394","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:68","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02395","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:69","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02396","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02397","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:70","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02398","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:71","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02399","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:72","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02400","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:73","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02401","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:74","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02402","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:75","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02403","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:76","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02404","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:77","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02405","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:78","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02406","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:79","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02407","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02408","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:80","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02409","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:81","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02410","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:82","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02411","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:83","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02412","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:84","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02413","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:85","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02414","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:86","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02415","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:87","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02416","gapId":"keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02417","gapId":"keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02418","gapId":"keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02419","gapId":"keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02420","gapId":"keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02421","gapId":"keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02422","gapId":"keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02423","gapId":"keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02424","gapId":"keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02425","gapId":"keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02426","gapId":"keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02427","gapId":"keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02428","gapId":"keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02429","gapId":"keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02430","gapId":"keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02431","gapId":"keymap-item:Property Editor:PROPERTIES:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02432","gapId":"keymap-item:Property Editor:PROPERTIES:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02433","gapId":"keymap-item:Property Editor:PROPERTIES:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02434","gapId":"keymap-item:Property Editor:PROPERTIES:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02435","gapId":"keymap-item:Property Editor:PROPERTIES:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02436","gapId":"keymap-item:Property Editor:PROPERTIES:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02437","gapId":"keymap-item:Property Editor:PROPERTIES:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02438","gapId":"keymap-item:Property Editor:PROPERTIES:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02439","gapId":"keymap-item:Property Editor:PROPERTIES:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02440","gapId":"keymap-item:Property Editor:PROPERTIES:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02441","gapId":"keymap-item:Property Editor:PROPERTIES:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02442","gapId":"keymap-item:Property Editor:PROPERTIES:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02443","gapId":"keymap-item:Property Editor:PROPERTIES:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02444","gapId":"keymap-item:Property Editor:PROPERTIES:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02445","gapId":"keymap-item:Property Editor:PROPERTIES:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02446","gapId":"keymap-item:Property Editor:PROPERTIES:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02447","gapId":"keymap-item:Property Editor:PROPERTIES:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02448","gapId":"keymap-item:Property Editor:PROPERTIES:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02449","gapId":"keymap-item:Property Editor:PROPERTIES:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02450","gapId":"keymap-item:Property Editor:PROPERTIES:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02451","gapId":"keymap-item:Region Context Menu:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02452","gapId":"keymap-item:Screen Editing:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02453","gapId":"keymap-item:Screen Editing:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02454","gapId":"keymap-item:Screen Editing:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02455","gapId":"keymap-item:Screen Editing:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02456","gapId":"keymap-item:Screen Editing:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02457","gapId":"keymap-item:Screen Editing:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02458","gapId":"keymap-item:Screen Editing:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02459","gapId":"keymap-item:Screen Editing:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02460","gapId":"keymap-item:Screen Editing:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02461","gapId":"keymap-item:Screen Editing:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02462","gapId":"keymap-item:Screen Editing:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02463","gapId":"keymap-item:Screen Editing:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02464","gapId":"keymap-item:Screen Editing:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02465","gapId":"keymap-item:Screen Editing:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02466","gapId":"keymap-item:Screen:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02467","gapId":"keymap-item:Screen:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02468","gapId":"keymap-item:Screen:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02469","gapId":"keymap-item:Screen:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02470","gapId":"keymap-item:Screen:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02471","gapId":"keymap-item:Screen:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02472","gapId":"keymap-item:Screen:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02473","gapId":"keymap-item:Screen:EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02474","gapId":"keymap-item:Screen:EMPTY:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02475","gapId":"keymap-item:Screen:EMPTY:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02476","gapId":"keymap-item:Screen:EMPTY:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02477","gapId":"keymap-item:Screen:EMPTY:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02478","gapId":"keymap-item:Screen:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02479","gapId":"keymap-item:Screen:EMPTY:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02480","gapId":"keymap-item:Screen:EMPTY:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02481","gapId":"keymap-item:Screen:EMPTY:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02482","gapId":"keymap-item:Screen:EMPTY:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02483","gapId":"keymap-item:Screen:EMPTY:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02484","gapId":"keymap-item:Screen:EMPTY:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02485","gapId":"keymap-item:Screen:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02486","gapId":"keymap-item:Screen:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02487","gapId":"keymap-item:Screen:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02488","gapId":"keymap-item:Screen:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02489","gapId":"keymap-item:Screen:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02490","gapId":"keymap-item:Screen:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02491","gapId":"keymap-item:Screen:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02492","gapId":"keymap-item:Sculpt Curves:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02493","gapId":"keymap-item:Sculpt Curves:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02494","gapId":"keymap-item:Sculpt Curves:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02495","gapId":"keymap-item:Sculpt Curves:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02496","gapId":"keymap-item:Sculpt Curves:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02497","gapId":"keymap-item:Sculpt Curves:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02498","gapId":"keymap-item:Sculpt Curves:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02499","gapId":"keymap-item:Sculpt Curves:EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02500","gapId":"keymap-item:Sculpt Curves:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02501","gapId":"keymap-item:Sculpt Curves:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02502","gapId":"keymap-item:Sculpt Curves:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02503","gapId":"keymap-item:Sculpt Curves:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02504","gapId":"keymap-item:Sculpt Curves:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02505","gapId":"keymap-item:Sculpt Curves:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02506","gapId":"keymap-item:Sculpt Curves:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02507","gapId":"keymap-item:Sculpt Curves:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02508","gapId":"keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02509","gapId":"keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02510","gapId":"keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02511","gapId":"keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02512","gapId":"keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02513","gapId":"keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02514","gapId":"keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02515","gapId":"keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02516","gapId":"keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02517","gapId":"keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02518","gapId":"keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02519","gapId":"keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02520","gapId":"keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02521","gapId":"keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02522","gapId":"keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02523","gapId":"keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02524","gapId":"keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02525","gapId":"keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02526","gapId":"keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02527","gapId":"keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02528","gapId":"keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02529","gapId":"keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02530","gapId":"keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02531","gapId":"keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02532","gapId":"keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02533","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02534","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02535","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02536","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02537","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02538","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02539","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02540","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02541","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02542","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02543","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02544","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02545","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02546","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02547","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02548","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02549","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02550","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02551","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02552","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:26","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02553","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:27","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02554","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:28","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02555","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:29","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02556","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02557","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:30","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02558","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:31","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02559","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:32","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02560","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:33","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02561","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:34","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02562","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:35","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02563","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:36","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02564","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:37","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02565","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:38","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02566","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:39","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02567","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02568","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:40","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02569","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:41","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02570","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:42","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02571","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:43","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02572","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:44","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02573","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:45","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02574","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:46","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02575","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:47","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02576","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:48","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02577","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:49","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02578","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02579","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:50","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02580","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:51","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02581","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:52","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02582","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:53","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02583","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:54","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02584","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:55","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02585","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:56","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02586","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:57","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02587","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:58","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02588","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:59","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02589","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02590","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:60","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02591","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:61","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02592","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:62","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02593","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:63","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02594","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:64","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02595","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:65","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02596","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:66","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02597","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02598","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02599","gapId":"keymap-item:Sculpt:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02600","gapId":"keymap-item:Sequencer Channels:SEQUENCE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02601","gapId":"keymap-item:Sequencer Channels:SEQUENCE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02602","gapId":"keymap-item:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02603","gapId":"keymap-item:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02604","gapId":"keymap-item:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02605","gapId":"keymap-item:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02606","gapId":"keymap-item:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02607","gapId":"keymap-item:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02608","gapId":"keymap-item:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02609","gapId":"keymap-item:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02610","gapId":"keymap-item:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02611","gapId":"keymap-item:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02612","gapId":"keymap-item:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02613","gapId":"keymap-item:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02614","gapId":"keymap-item:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02615","gapId":"keymap-item:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02616","gapId":"keymap-item:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02617","gapId":"keymap-item:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02618","gapId":"keymap-item:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02619","gapId":"keymap-item:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02620","gapId":"keymap-item:Sequencer Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02621","gapId":"keymap-item:Sequencer Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02622","gapId":"keymap-item:Sequencer Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02623","gapId":"keymap-item:Sequencer Tool: Select Circle:SEQUENCE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02624","gapId":"keymap-item:Sequencer Tool: Select Circle:SEQUENCE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02625","gapId":"keymap-item:Sequencer Tool: Select Circle:SEQUENCE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02626","gapId":"keymap-item:Sequencer Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02627","gapId":"keymap-item:Sequencer Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02628","gapId":"keymap-item:Sequencer Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02629","gapId":"keymap-item:Sequencer Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02630","gapId":"keymap-item:Sequencer Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02631","gapId":"keymap-item:Sequencer Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02632","gapId":"keymap-item:Sequencer Tool: Slip:SEQUENCE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02633","gapId":"keymap-item:Sequencer Tool: Slip:SEQUENCE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02634","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02635","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02636","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02637","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02638","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02639","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02640","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02641","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02642","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02643","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02644","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02645","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02646","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02647","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02648","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02649","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02650","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02651","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02652","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02653","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:26","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02654","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:27","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02655","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:28","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02656","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:29","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02657","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02658","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:30","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02659","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:31","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02660","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:32","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02661","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:33","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02662","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:34","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02663","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:35","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02664","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:36","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02665","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:37","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02666","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:38","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02667","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:39","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02668","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02669","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:40","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02670","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:41","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02671","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:42","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02672","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:43","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02673","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:44","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02674","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:45","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02675","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:46","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02676","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:47","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02677","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:48","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02678","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:49","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02679","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02680","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:50","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02681","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:51","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02682","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:52","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02683","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:53","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02684","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:54","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02685","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:55","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02686","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:56","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02687","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:57","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02688","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:58","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02689","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:59","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02690","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02691","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:60","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02692","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:61","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02693","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:62","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02694","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:63","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02695","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:64","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02696","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:65","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02697","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:66","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02698","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:67","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02699","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:68","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02700","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:69","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02701","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02702","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:70","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02703","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:71","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02704","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:72","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02705","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:73","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02706","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:74","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02707","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:75","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02708","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:76","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02709","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:77","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02710","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:78","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02711","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:79","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02712","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02713","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:80","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02714","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:81","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02715","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:82","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02716","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:83","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02717","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:84","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02718","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:85","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02719","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:86","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02720","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:87","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02721","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:88","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02722","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:89","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02723","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02724","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:90","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02725","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:91","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02726","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:92","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02727","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:93","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02728","gapId":"keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:94","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02729","gapId":"keymap-item:Slip Modal:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02730","gapId":"keymap-item:Slip Modal:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02731","gapId":"keymap-item:Slip Modal:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02732","gapId":"keymap-item:Slip Modal:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02733","gapId":"keymap-item:Slip Modal:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02734","gapId":"keymap-item:Slip Modal:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02735","gapId":"keymap-item:Slip Modal:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02736","gapId":"keymap-item:Slip Modal:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02737","gapId":"keymap-item:Slip Modal:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02738","gapId":"keymap-item:Slip Modal:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02739","gapId":"keymap-item:Slip Modal:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02740","gapId":"keymap-item:Slip Modal:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02741","gapId":"keymap-item:Spreadsheet Generic:SPREADSHEET:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02742","gapId":"keymap-item:Spreadsheet Generic:SPREADSHEET:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02743","gapId":"keymap-item:Spreadsheet Generic:SPREADSHEET:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02744","gapId":"keymap-item:Spreadsheet Generic:SPREADSHEET:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02745","gapId":"keymap-item:Spreadsheet Generic:SPREADSHEET:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02746","gapId":"keymap-item:Standard Modal Map:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02747","gapId":"keymap-item:Standard Modal Map:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02748","gapId":"keymap-item:Standard Modal Map:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02749","gapId":"keymap-item:Standard Modal Map:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02750","gapId":"keymap-item:Standard Modal Map:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02751","gapId":"keymap-item:Standard Modal Map:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02752","gapId":"keymap-item:Standard Modal Map:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02753","gapId":"keymap-item:Standard Modal Map:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02754","gapId":"keymap-item:Text Generic:TEXT_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02755","gapId":"keymap-item:Text Generic:TEXT_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02756","gapId":"keymap-item:Text Generic:TEXT_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02757","gapId":"keymap-item:Text Generic:TEXT_EDITOR:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02758","gapId":"keymap-item:Text Generic:TEXT_EDITOR:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02759","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02760","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02761","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02762","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02763","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02764","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02765","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02766","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02767","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02768","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02769","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02770","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02771","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02772","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02773","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02774","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02775","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02776","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02777","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02778","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:26","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02779","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:27","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02780","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:28","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02781","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:29","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02782","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02783","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:30","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02784","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:31","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02785","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:32","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02786","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:33","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02787","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:34","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02788","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:35","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02789","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:36","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02790","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:37","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02791","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:38","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02792","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:39","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02793","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02794","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:40","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02795","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:41","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02796","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:42","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02797","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:43","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02798","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:44","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02799","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:45","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02800","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:46","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02801","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:47","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02802","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:48","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02803","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:49","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02804","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02805","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:50","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02806","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:51","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02807","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:52","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02808","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:53","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02809","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:54","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02810","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:55","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02811","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:56","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02812","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:57","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02813","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:58","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02814","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:59","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02815","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02816","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:60","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02817","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:61","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02818","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:62","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02819","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:63","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02820","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:64","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02821","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:65","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02822","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:66","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02823","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:67","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02824","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:68","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02825","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:69","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02826","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02827","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:70","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02828","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02829","gapId":"keymap-item:Text:TEXT_EDITOR:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02830","gapId":"keymap-item:Time Scrub:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02831","gapId":"keymap-item:Toolbar Popup:EMPTY:TEMPORARY:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02832","gapId":"keymap-item:Toolbar Popup:EMPTY:TEMPORARY:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02833","gapId":"keymap-item:Toolbar Popup:EMPTY:TEMPORARY:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02834","gapId":"keymap-item:Toolbar Popup:EMPTY:TEMPORARY:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02835","gapId":"keymap-item:Toolbar Popup:EMPTY:TEMPORARY:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02836","gapId":"keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02837","gapId":"keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02838","gapId":"keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02839","gapId":"keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02840","gapId":"keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02841","gapId":"keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02842","gapId":"keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02843","gapId":"keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02844","gapId":"keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02845","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02846","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02847","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02848","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02849","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02850","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02851","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02852","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02853","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02854","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02855","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02856","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02857","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02858","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02859","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02860","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02861","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02862","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02863","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02864","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:26","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02865","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:27","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02866","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:28","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02867","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:29","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02868","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02869","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:30","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02870","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:31","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02871","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:32","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02872","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:33","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02873","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:34","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02874","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:35","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02875","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:36","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02876","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:37","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02877","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:38","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02878","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:39","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02879","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02880","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:40","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02881","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:41","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02882","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:42","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02883","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:43","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02884","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:44","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02885","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:45","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02886","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:46","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02887","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:47","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02888","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:48","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02889","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:49","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02890","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02891","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:50","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02892","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:51","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02893","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:52","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02894","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:53","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02895","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:54","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02896","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:55","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02897","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02898","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02899","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02900","gapId":"keymap-item:Transform Modal Map:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02901","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02902","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02903","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02904","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02905","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02906","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02907","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02908","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02909","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02910","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02911","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02912","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02913","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02914","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02915","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02916","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02917","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02918","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02919","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02920","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:26","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02921","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:27","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02922","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:28","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02923","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:29","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02924","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02925","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:30","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02926","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:31","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02927","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:32","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02928","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:33","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02929","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:34","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02930","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:35","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02931","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:36","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02932","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:37","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02933","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:38","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02934","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:39","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02935","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02936","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:40","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02937","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:41","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02938","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:42","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02939","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:43","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02940","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:44","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02941","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:45","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02942","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:46","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02943","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:47","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02944","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:48","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02945","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:49","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02946","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02947","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:50","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02948","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:51","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02949","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:52","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02950","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:53","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02951","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:54","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02952","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:55","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02953","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:56","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02954","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:57","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02955","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:58","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02956","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:59","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02957","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02958","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:60","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02959","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:61","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02960","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:62","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02961","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:63","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02962","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:64","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02963","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:65","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02964","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:66","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02965","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:67","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02966","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:68","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02967","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:69","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02968","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02969","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:70","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02970","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:71","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02971","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:72","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02972","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:73","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02973","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:74","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02974","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:75","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02975","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:76","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02976","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:77","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02977","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:78","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02978","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:79","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02979","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02980","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:80","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02981","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:81","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02982","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:82","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02983","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:83","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02984","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:84","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02985","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:85","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02986","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:86","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02987","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:87","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02988","gapId":"keymap-item:UV Editor:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02989","gapId":"keymap-item:User Interface:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02990","gapId":"keymap-item:User Interface:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02991","gapId":"keymap-item:User Interface:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02992","gapId":"keymap-item:User Interface:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02993","gapId":"keymap-item:User Interface:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02994","gapId":"keymap-item:User Interface:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02995","gapId":"keymap-item:User Interface:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02996","gapId":"keymap-item:User Interface:EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02997","gapId":"keymap-item:User Interface:EMPTY:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02998","gapId":"keymap-item:User Interface:EMPTY:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-02999","gapId":"keymap-item:User Interface:EMPTY:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03000","gapId":"keymap-item:User Interface:EMPTY:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03001","gapId":"keymap-item:User Interface:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03002","gapId":"keymap-item:User Interface:EMPTY:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03003","gapId":"keymap-item:User Interface:EMPTY:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03004","gapId":"keymap-item:User Interface:EMPTY:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03005","gapId":"keymap-item:User Interface:EMPTY:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03006","gapId":"keymap-item:User Interface:EMPTY:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03007","gapId":"keymap-item:User Interface:EMPTY:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03008","gapId":"keymap-item:User Interface:EMPTY:WINDOW:26","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03009","gapId":"keymap-item:User Interface:EMPTY:WINDOW:27","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03010","gapId":"keymap-item:User Interface:EMPTY:WINDOW:28","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03011","gapId":"keymap-item:User Interface:EMPTY:WINDOW:29","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03012","gapId":"keymap-item:User Interface:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03013","gapId":"keymap-item:User Interface:EMPTY:WINDOW:30","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03014","gapId":"keymap-item:User Interface:EMPTY:WINDOW:31","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03015","gapId":"keymap-item:User Interface:EMPTY:WINDOW:32","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03016","gapId":"keymap-item:User Interface:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03017","gapId":"keymap-item:User Interface:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03018","gapId":"keymap-item:User Interface:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03019","gapId":"keymap-item:User Interface:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03020","gapId":"keymap-item:User Interface:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03021","gapId":"keymap-item:User Interface:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03022","gapId":"keymap-item:Vertex Paint:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03023","gapId":"keymap-item:Vertex Paint:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03024","gapId":"keymap-item:Vertex Paint:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03025","gapId":"keymap-item:Vertex Paint:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03026","gapId":"keymap-item:Vertex Paint:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03027","gapId":"keymap-item:Vertex Paint:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03028","gapId":"keymap-item:Vertex Paint:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03029","gapId":"keymap-item:Vertex Paint:EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03030","gapId":"keymap-item:Vertex Paint:EMPTY:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03031","gapId":"keymap-item:Vertex Paint:EMPTY:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03032","gapId":"keymap-item:Vertex Paint:EMPTY:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03033","gapId":"keymap-item:Vertex Paint:EMPTY:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03034","gapId":"keymap-item:Vertex Paint:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03035","gapId":"keymap-item:Vertex Paint:EMPTY:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03036","gapId":"keymap-item:Vertex Paint:EMPTY:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03037","gapId":"keymap-item:Vertex Paint:EMPTY:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03038","gapId":"keymap-item:Vertex Paint:EMPTY:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03039","gapId":"keymap-item:Vertex Paint:EMPTY:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03040","gapId":"keymap-item:Vertex Paint:EMPTY:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03041","gapId":"keymap-item:Vertex Paint:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03042","gapId":"keymap-item:Vertex Paint:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03043","gapId":"keymap-item:Vertex Paint:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03044","gapId":"keymap-item:Vertex Paint:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03045","gapId":"keymap-item:Vertex Paint:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03046","gapId":"keymap-item:Vertex Paint:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03047","gapId":"keymap-item:Vertex Paint:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03048","gapId":"keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03049","gapId":"keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03050","gapId":"keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03051","gapId":"keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03052","gapId":"keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03053","gapId":"keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03054","gapId":"keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03055","gapId":"keymap-item:View2D Buttons List:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03056","gapId":"keymap-item:View2D Buttons List:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03057","gapId":"keymap-item:View2D Buttons List:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03058","gapId":"keymap-item:View2D Buttons List:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03059","gapId":"keymap-item:View2D Buttons List:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03060","gapId":"keymap-item:View2D Buttons List:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03061","gapId":"keymap-item:View2D Buttons List:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03062","gapId":"keymap-item:View2D Buttons List:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03063","gapId":"keymap-item:View2D Buttons List:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03064","gapId":"keymap-item:View2D Buttons List:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03065","gapId":"keymap-item:View2D Buttons List:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03066","gapId":"keymap-item:View2D Buttons List:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03067","gapId":"keymap-item:View2D Buttons List:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03068","gapId":"keymap-item:View2D Buttons List:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03069","gapId":"keymap-item:View2D:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03070","gapId":"keymap-item:View2D:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03071","gapId":"keymap-item:View2D:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03072","gapId":"keymap-item:View2D:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03073","gapId":"keymap-item:View2D:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03074","gapId":"keymap-item:View2D:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03075","gapId":"keymap-item:View2D:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03076","gapId":"keymap-item:View2D:EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03077","gapId":"keymap-item:View2D:EMPTY:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03078","gapId":"keymap-item:View2D:EMPTY:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03079","gapId":"keymap-item:View2D:EMPTY:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03080","gapId":"keymap-item:View2D:EMPTY:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03081","gapId":"keymap-item:View2D:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03082","gapId":"keymap-item:View2D:EMPTY:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03083","gapId":"keymap-item:View2D:EMPTY:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03084","gapId":"keymap-item:View2D:EMPTY:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03085","gapId":"keymap-item:View2D:EMPTY:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03086","gapId":"keymap-item:View2D:EMPTY:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03087","gapId":"keymap-item:View2D:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03088","gapId":"keymap-item:View2D:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03089","gapId":"keymap-item:View2D:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03090","gapId":"keymap-item:View2D:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03091","gapId":"keymap-item:View2D:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03092","gapId":"keymap-item:View2D:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03093","gapId":"keymap-item:View2D:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03094","gapId":"keymap-item:View3D Dolly Modal:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03095","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03096","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03097","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03098","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03099","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03100","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03101","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03102","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03103","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03104","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03105","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03106","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03107","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03108","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03109","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03110","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03111","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03112","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03113","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03114","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:26","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03115","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:27","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03116","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:28","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03117","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:29","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03118","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03119","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:30","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03120","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:31","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03121","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:32","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03122","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:33","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03123","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:34","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03124","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:35","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03125","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:36","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03126","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:37","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03127","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:38","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03128","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03129","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03130","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03131","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03132","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03133","gapId":"keymap-item:View3D Fly Modal:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03134","gapId":"keymap-item:View3D Gesture Circle:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03135","gapId":"keymap-item:View3D Gesture Circle:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03136","gapId":"keymap-item:View3D Gesture Circle:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03137","gapId":"keymap-item:View3D Gesture Circle:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03138","gapId":"keymap-item:View3D Gesture Circle:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03139","gapId":"keymap-item:View3D Gesture Circle:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03140","gapId":"keymap-item:View3D Gesture Circle:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03141","gapId":"keymap-item:View3D Gesture Circle:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03142","gapId":"keymap-item:View3D Gesture Circle:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03143","gapId":"keymap-item:View3D Gesture Circle:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03144","gapId":"keymap-item:View3D Gesture Circle:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03145","gapId":"keymap-item:View3D Gesture Circle:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03146","gapId":"keymap-item:View3D Gesture Circle:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03147","gapId":"keymap-item:View3D Gesture Circle:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03148","gapId":"keymap-item:View3D Move Modal:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03149","gapId":"keymap-item:View3D Placement Modal:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03150","gapId":"keymap-item:View3D Placement Modal:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03151","gapId":"keymap-item:View3D Placement Modal:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03152","gapId":"keymap-item:View3D Placement Modal:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03153","gapId":"keymap-item:View3D Placement Modal:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03154","gapId":"keymap-item:View3D Placement Modal:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03155","gapId":"keymap-item:View3D Placement Modal:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03156","gapId":"keymap-item:View3D Placement Modal:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03157","gapId":"keymap-item:View3D Placement Modal:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03158","gapId":"keymap-item:View3D Placement Modal:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03159","gapId":"keymap-item:View3D Placement Modal:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03160","gapId":"keymap-item:View3D Placement Modal:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03161","gapId":"keymap-item:View3D Rotate Modal:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03162","gapId":"keymap-item:View3D Rotate Modal:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03163","gapId":"keymap-item:View3D Rotate Modal:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03164","gapId":"keymap-item:View3D Rotate Modal:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03165","gapId":"keymap-item:View3D Rotate Modal:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03166","gapId":"keymap-item:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03167","gapId":"keymap-item:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03168","gapId":"keymap-item:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03169","gapId":"keymap-item:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03170","gapId":"keymap-item:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03171","gapId":"keymap-item:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03172","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03173","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03174","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03175","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03176","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03177","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03178","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03179","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03180","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03181","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03182","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03183","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03184","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03185","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03186","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03187","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03188","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03189","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03190","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03191","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:26","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03192","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:27","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03193","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:28","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03194","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:29","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03195","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03196","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:30","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03197","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:31","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03198","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:32","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03199","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:33","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03200","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:34","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03201","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:35","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03202","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:36","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03203","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:37","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03204","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:38","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03205","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:39","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03206","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03207","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:40","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03208","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:41","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03209","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:42","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03210","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:43","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03211","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:44","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03212","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:45","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03213","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:46","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03214","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:47","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03215","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:48","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03216","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:49","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03217","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03218","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03219","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03220","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03221","gapId":"keymap-item:View3D Walk Modal:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03222","gapId":"keymap-item:View3D Zoom Modal:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03223","gapId":"keymap-item:Weight Paint:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03224","gapId":"keymap-item:Weight Paint:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03225","gapId":"keymap-item:Weight Paint:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03226","gapId":"keymap-item:Weight Paint:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03227","gapId":"keymap-item:Weight Paint:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03228","gapId":"keymap-item:Weight Paint:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03229","gapId":"keymap-item:Weight Paint:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03230","gapId":"keymap-item:Weight Paint:EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03231","gapId":"keymap-item:Weight Paint:EMPTY:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03232","gapId":"keymap-item:Weight Paint:EMPTY:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03233","gapId":"keymap-item:Weight Paint:EMPTY:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03234","gapId":"keymap-item:Weight Paint:EMPTY:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03235","gapId":"keymap-item:Weight Paint:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03236","gapId":"keymap-item:Weight Paint:EMPTY:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03237","gapId":"keymap-item:Weight Paint:EMPTY:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03238","gapId":"keymap-item:Weight Paint:EMPTY:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03239","gapId":"keymap-item:Weight Paint:EMPTY:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03240","gapId":"keymap-item:Weight Paint:EMPTY:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03241","gapId":"keymap-item:Weight Paint:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03242","gapId":"keymap-item:Weight Paint:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03243","gapId":"keymap-item:Weight Paint:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03244","gapId":"keymap-item:Weight Paint:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03245","gapId":"keymap-item:Weight Paint:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03246","gapId":"keymap-item:Weight Paint:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03247","gapId":"keymap-item:Weight Paint:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03248","gapId":"keymap-item:Window:EMPTY:WINDOW:0","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03249","gapId":"keymap-item:Window:EMPTY:WINDOW:1","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03250","gapId":"keymap-item:Window:EMPTY:WINDOW:10","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03251","gapId":"keymap-item:Window:EMPTY:WINDOW:11","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03252","gapId":"keymap-item:Window:EMPTY:WINDOW:12","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03253","gapId":"keymap-item:Window:EMPTY:WINDOW:13","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03254","gapId":"keymap-item:Window:EMPTY:WINDOW:14","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03255","gapId":"keymap-item:Window:EMPTY:WINDOW:15","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03256","gapId":"keymap-item:Window:EMPTY:WINDOW:16","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03257","gapId":"keymap-item:Window:EMPTY:WINDOW:17","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03258","gapId":"keymap-item:Window:EMPTY:WINDOW:18","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03259","gapId":"keymap-item:Window:EMPTY:WINDOW:19","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03260","gapId":"keymap-item:Window:EMPTY:WINDOW:2","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03261","gapId":"keymap-item:Window:EMPTY:WINDOW:20","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03262","gapId":"keymap-item:Window:EMPTY:WINDOW:21","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03263","gapId":"keymap-item:Window:EMPTY:WINDOW:22","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03264","gapId":"keymap-item:Window:EMPTY:WINDOW:23","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03265","gapId":"keymap-item:Window:EMPTY:WINDOW:24","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03266","gapId":"keymap-item:Window:EMPTY:WINDOW:25","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03267","gapId":"keymap-item:Window:EMPTY:WINDOW:26","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03268","gapId":"keymap-item:Window:EMPTY:WINDOW:27","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03269","gapId":"keymap-item:Window:EMPTY:WINDOW:28","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03270","gapId":"keymap-item:Window:EMPTY:WINDOW:29","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03271","gapId":"keymap-item:Window:EMPTY:WINDOW:3","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03272","gapId":"keymap-item:Window:EMPTY:WINDOW:30","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03273","gapId":"keymap-item:Window:EMPTY:WINDOW:31","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03274","gapId":"keymap-item:Window:EMPTY:WINDOW:32","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03275","gapId":"keymap-item:Window:EMPTY:WINDOW:4","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03276","gapId":"keymap-item:Window:EMPTY:WINDOW:5","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03277","gapId":"keymap-item:Window:EMPTY:WINDOW:6","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03278","gapId":"keymap-item:Window:EMPTY:WINDOW:7","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03279","gapId":"keymap-item:Window:EMPTY:WINDOW:8","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03280","gapId":"keymap-item:Window:EMPTY:WINDOW:9","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03281","gapId":"keymap:3D View Generic:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03282","gapId":"keymap:3D View Tool: Bend:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03283","gapId":"keymap:3D View Tool: Breakdowner:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03284","gapId":"keymap:3D View Tool: Cursor:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03285","gapId":"keymap:3D View Tool: Edit Armature, B-Bone Size:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03286","gapId":"keymap:3D View Tool: Edit Armature, Bone Envelope:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03287","gapId":"keymap:3D View Tool: Edit Armature, Extrude to Cursor:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03288","gapId":"keymap:3D View Tool: Edit Armature, Extrude:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03289","gapId":"keymap:3D View Tool: Edit Armature, Roll:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03290","gapId":"keymap:3D View Tool: Edit Curve, Curve Pen:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03291","gapId":"keymap:3D View Tool: Edit Curve, Draw:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03292","gapId":"keymap:3D View Tool: Edit Curve, Extrude to Cursor:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03293","gapId":"keymap:3D View Tool: Edit Curve, Extrude:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03294","gapId":"keymap:3D View Tool: Edit Curve, Radius:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03295","gapId":"keymap:3D View Tool: Edit Curve, Randomize:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03296","gapId":"keymap:3D View Tool: Edit Curve, Tilt:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03297","gapId":"keymap:3D View Tool: Edit Curves, Draw:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03298","gapId":"keymap:3D View Tool: Edit Curves, Pen:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03299","gapId":"keymap:3D View Tool: Edit Grease Pencil, Gradient:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03300","gapId":"keymap:3D View Tool: Edit Grease Pencil, Interpolate:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03301","gapId":"keymap:3D View Tool: Edit Grease Pencil, Pen:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03302","gapId":"keymap:3D View Tool: Edit Mesh, Bevel:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03303","gapId":"keymap:3D View Tool: Edit Mesh, Bisect:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03304","gapId":"keymap:3D View Tool: Edit Mesh, Edge Slide:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03305","gapId":"keymap:3D View Tool: Edit Mesh, Extrude Along Normals:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03306","gapId":"keymap:3D View Tool: Edit Mesh, Extrude Individual:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03307","gapId":"keymap:3D View Tool: Edit Mesh, Extrude Manifold:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03308","gapId":"keymap:3D View Tool: Edit Mesh, Extrude Region:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03309","gapId":"keymap:3D View Tool: Edit Mesh, Extrude to Cursor:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03310","gapId":"keymap:3D View Tool: Edit Mesh, Inset Faces:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03311","gapId":"keymap:3D View Tool: Edit Mesh, Knife:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03312","gapId":"keymap:3D View Tool: Edit Mesh, Loop Cut:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03313","gapId":"keymap:3D View Tool: Edit Mesh, Offset Edge Loop Cut:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03314","gapId":"keymap:3D View Tool: Edit Mesh, Poly Build:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03315","gapId":"keymap:3D View Tool: Edit Mesh, Push/Pull:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03316","gapId":"keymap:3D View Tool: Edit Mesh, Randomize:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03317","gapId":"keymap:3D View Tool: Edit Mesh, Rip Edge:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03318","gapId":"keymap:3D View Tool: Edit Mesh, Rip Region:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03319","gapId":"keymap:3D View Tool: Edit Mesh, Shrink/Fatten:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03320","gapId":"keymap:3D View Tool: Edit Mesh, Smooth:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03321","gapId":"keymap:3D View Tool: Edit Mesh, Spin Duplicates:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03322","gapId":"keymap:3D View Tool: Edit Mesh, Spin:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03323","gapId":"keymap:3D View Tool: Edit Mesh, To Sphere:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03324","gapId":"keymap:3D View Tool: Edit Mesh, Vertex Slide:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03325","gapId":"keymap:3D View Tool: Edit Text, Select Text:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03326","gapId":"keymap:3D View Tool: Measure:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03327","gapId":"keymap:3D View Tool: Move:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03328","gapId":"keymap:3D View Tool: Object, Add Primitive:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03329","gapId":"keymap:3D View Tool: Paint Grease Pencil, Arc:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03330","gapId":"keymap:3D View Tool: Paint Grease Pencil, Box:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03331","gapId":"keymap:3D View Tool: Paint Grease Pencil, Circle:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03332","gapId":"keymap:3D View Tool: Paint Grease Pencil, Curve:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03333","gapId":"keymap:3D View Tool: Paint Grease Pencil, Eyedropper:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03334","gapId":"keymap:3D View Tool: Paint Grease Pencil, Interpolate:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03335","gapId":"keymap:3D View Tool: Paint Grease Pencil, Line:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03336","gapId":"keymap:3D View Tool: Paint Grease Pencil, Polyline:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03337","gapId":"keymap:3D View Tool: Paint Grease Pencil, Trim:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03338","gapId":"keymap:3D View Tool: Paint Weight, Gradient:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03339","gapId":"keymap:3D View Tool: Paint Weight, Sample Vertex Group:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03340","gapId":"keymap:3D View Tool: Paint Weight, Sample Weight:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03341","gapId":"keymap:3D View Tool: Push:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03342","gapId":"keymap:3D View Tool: Relax:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03343","gapId":"keymap:3D View Tool: Rotate:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03344","gapId":"keymap:3D View Tool: Scale:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03345","gapId":"keymap:3D View Tool: Sculpt, Box Face Set:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03346","gapId":"keymap:3D View Tool: Sculpt, Box Hide:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03347","gapId":"keymap:3D View Tool: Sculpt, Box Mask:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03348","gapId":"keymap:3D View Tool: Sculpt, Box Trim:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03349","gapId":"keymap:3D View Tool: Sculpt, Cloth Filter:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03350","gapId":"keymap:3D View Tool: Sculpt, Color Filter:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03351","gapId":"keymap:3D View Tool: Sculpt, Face Set Edit:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03352","gapId":"keymap:3D View Tool: Sculpt, Lasso Face Set:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03353","gapId":"keymap:3D View Tool: Sculpt, Lasso Hide:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03354","gapId":"keymap:3D View Tool: Sculpt, Lasso Mask:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03355","gapId":"keymap:3D View Tool: Sculpt, Lasso Trim:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03356","gapId":"keymap:3D View Tool: Sculpt, Line Face Set:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03357","gapId":"keymap:3D View Tool: Sculpt, Line Hide:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03358","gapId":"keymap:3D View Tool: Sculpt, Line Mask:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03359","gapId":"keymap:3D View Tool: Sculpt, Line Project:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03360","gapId":"keymap:3D View Tool: Sculpt, Line Trim:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03361","gapId":"keymap:3D View Tool: Sculpt, Mask by Color:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03362","gapId":"keymap:3D View Tool: Sculpt, Mesh Filter:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03363","gapId":"keymap:3D View Tool: Sculpt, Polyline Face Set:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03364","gapId":"keymap:3D View Tool: Sculpt, Polyline Hide:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03365","gapId":"keymap:3D View Tool: Sculpt, Polyline Mask:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03366","gapId":"keymap:3D View Tool: Sculpt, Polyline Trim:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03367","gapId":"keymap:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03368","gapId":"keymap:3D View Tool: Select Box:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03369","gapId":"keymap:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03370","gapId":"keymap:3D View Tool: Select Circle:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03371","gapId":"keymap:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03372","gapId":"keymap:3D View Tool: Select Lasso:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03373","gapId":"keymap:3D View Tool: Shear:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03374","gapId":"keymap:3D View Tool: Transform:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03375","gapId":"keymap:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03376","gapId":"keymap:3D View Tool: Tweak:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03377","gapId":"keymap:3D View:VIEW_3D:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03378","gapId":"keymap:Animation Channels:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03379","gapId":"keymap:Animation:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03380","gapId":"keymap:Armature:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03381","gapId":"keymap:Bevel Modal Map:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03382","gapId":"keymap:Clip Dopesheet Editor:CLIP_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03383","gapId":"keymap:Clip Editor:CLIP_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03384","gapId":"keymap:Clip Graph Editor:CLIP_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03385","gapId":"keymap:Clip Time Scrub:CLIP_EDITOR:PREVIEW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03386","gapId":"keymap:Clip:CLIP_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03387","gapId":"keymap:Console:CONSOLE:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03388","gapId":"keymap:Curve Pen Modal Map:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03389","gapId":"keymap:Curve:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03390","gapId":"keymap:Curves:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03391","gapId":"keymap:Custom Normals Modal Map:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03392","gapId":"keymap:Dopesheet Generic:DOPESHEET_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03393","gapId":"keymap:Dopesheet:DOPESHEET_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03394","gapId":"keymap:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03395","gapId":"keymap:Eyedropper Modal Map:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03396","gapId":"keymap:File Browser Buttons:FILE_BROWSER:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03397","gapId":"keymap:File Browser Main:FILE_BROWSER:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03398","gapId":"keymap:File Browser:FILE_BROWSER:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03399","gapId":"keymap:Fill Tool Modal Map:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03400","gapId":"keymap:Font:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03401","gapId":"keymap:Frames:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03402","gapId":"keymap:Generic Gizmo Click Drag:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03403","gapId":"keymap:Generic Gizmo Drag:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03404","gapId":"keymap:Generic Gizmo Maybe Drag:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03405","gapId":"keymap:Generic Gizmo Select:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03406","gapId":"keymap:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03407","gapId":"keymap:Generic Gizmo:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03408","gapId":"keymap:Generic Tool: Annotate Eraser:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03409","gapId":"keymap:Generic Tool: Annotate Line:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03410","gapId":"keymap:Generic Tool: Annotate Polygon:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03411","gapId":"keymap:Generic Tool: Annotate:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03412","gapId":"keymap:Gesture Box:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03413","gapId":"keymap:Gesture Lasso:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03414","gapId":"keymap:Gesture Polyline:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03415","gapId":"keymap:Gesture Straight Line:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03416","gapId":"keymap:Gesture Zoom Border:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03417","gapId":"keymap:Graph Editor Generic:GRAPH_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03418","gapId":"keymap:Graph Editor:GRAPH_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03419","gapId":"keymap:Grease Pencil Brush Stroke:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03420","gapId":"keymap:Grease Pencil Draw Mode:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03421","gapId":"keymap:Grease Pencil Edit Mode:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03422","gapId":"keymap:Grease Pencil Fill Tool:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03423","gapId":"keymap:Grease Pencil Sculpt Mode:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03424","gapId":"keymap:Grease Pencil Selection:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03425","gapId":"keymap:Grease Pencil Vertex Paint:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03426","gapId":"keymap:Grease Pencil Weight Paint:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03427","gapId":"keymap:Grease Pencil:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03428","gapId":"keymap:Image Editor Tool: Mask, Box:IMAGE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03429","gapId":"keymap:Image Editor Tool: Mask, Circle:IMAGE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03430","gapId":"keymap:Image Editor Tool: Mask, Cursor:IMAGE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03431","gapId":"keymap:Image Editor Tool: Mask, Move:IMAGE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03432","gapId":"keymap:Image Editor Tool: Mask, Rotate:IMAGE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03433","gapId":"keymap:Image Editor Tool: Mask, Scale:IMAGE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03434","gapId":"keymap:Image Editor Tool: Mask, Select Box (fallback):IMAGE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03435","gapId":"keymap:Image Editor Tool: Mask, Select Box:IMAGE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03436","gapId":"keymap:Image Editor Tool: Mask, Select Circle (fallback):IMAGE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03437","gapId":"keymap:Image Editor Tool: Mask, Select Circle:IMAGE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03438","gapId":"keymap:Image Editor Tool: Mask, Select Lasso (fallback):IMAGE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03439","gapId":"keymap:Image Editor Tool: Mask, Select Lasso:IMAGE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03440","gapId":"keymap:Image Editor Tool: Mask, Transform:IMAGE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03441","gapId":"keymap:Image Editor Tool: Mask, Tweak (fallback):IMAGE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03442","gapId":"keymap:Image Editor Tool: Mask, Tweak:IMAGE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03443","gapId":"keymap:Image Editor Tool: Sample:IMAGE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03444","gapId":"keymap:Image Editor Tool: Uv, Cursor:IMAGE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03445","gapId":"keymap:Image Editor Tool: Uv, Grab:IMAGE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03446","gapId":"keymap:Image Editor Tool: Uv, Move:IMAGE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03447","gapId":"keymap:Image Editor Tool: Uv, Pinch:IMAGE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03448","gapId":"keymap:Image Editor Tool: Uv, Relax:IMAGE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03449","gapId":"keymap:Image Editor Tool: Uv, Rip Region:IMAGE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03450","gapId":"keymap:Image Editor Tool: Uv, Rotate:IMAGE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03451","gapId":"keymap:Image Editor Tool: Uv, Scale:IMAGE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03452","gapId":"keymap:Image Editor Tool: Uv, Select Box (fallback):IMAGE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03453","gapId":"keymap:Image Editor Tool: Uv, Select Box:IMAGE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03454","gapId":"keymap:Image Editor Tool: Uv, Select Circle (fallback):IMAGE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03455","gapId":"keymap:Image Editor Tool: Uv, Select Circle:IMAGE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03456","gapId":"keymap:Image Editor Tool: Uv, Select Lasso (fallback):IMAGE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03457","gapId":"keymap:Image Editor Tool: Uv, Select Lasso:IMAGE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03458","gapId":"keymap:Image Editor Tool: Uv, Tweak (fallback):IMAGE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03459","gapId":"keymap:Image Editor Tool: Uv, Tweak:IMAGE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03460","gapId":"keymap:Image Generic:IMAGE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03461","gapId":"keymap:Image Paint:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03462","gapId":"keymap:Image:IMAGE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03463","gapId":"keymap:Info:INFO:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03464","gapId":"keymap:Interpolate Tool Modal Map:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03465","gapId":"keymap:Knife Tool Modal Map:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03466","gapId":"keymap:Lattice:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03467","gapId":"keymap:Markers:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03468","gapId":"keymap:Mask Editing:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03469","gapId":"keymap:Mesh Filter Modal Map:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03470","gapId":"keymap:Mesh:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03471","gapId":"keymap:Metaball:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03472","gapId":"keymap:NLA Editor:NLA_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03473","gapId":"keymap:NLA Generic:NLA_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03474","gapId":"keymap:NLA Tracks:NLA_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03475","gapId":"keymap:Node Editor:NODE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03476","gapId":"keymap:Node Generic:NODE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03477","gapId":"keymap:Node Link Modal Map:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03478","gapId":"keymap:Node Resize Modal Map:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03479","gapId":"keymap:Node Tool: Add Reroute:NODE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03480","gapId":"keymap:Node Tool: Links Cut:NODE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03481","gapId":"keymap:Node Tool: Mute Links:NODE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03482","gapId":"keymap:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03483","gapId":"keymap:Node Tool: Select Box:NODE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03484","gapId":"keymap:Node Tool: Select Circle (fallback):NODE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03485","gapId":"keymap:Node Tool: Select Circle:NODE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03486","gapId":"keymap:Node Tool: Select Lasso (fallback):NODE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03487","gapId":"keymap:Node Tool: Select Lasso:NODE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03488","gapId":"keymap:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03489","gapId":"keymap:Node Tool: Tweak:NODE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03490","gapId":"keymap:Object Mode:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03491","gapId":"keymap:Object Non-modal:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03492","gapId":"keymap:Outliner:OUTLINER:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03493","gapId":"keymap:Paint Curve:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03494","gapId":"keymap:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03495","gapId":"keymap:Paint Stroke Modal:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03496","gapId":"keymap:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03497","gapId":"keymap:Particle:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03498","gapId":"keymap:Pen Tool Modal Map:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03499","gapId":"keymap:Point Cloud:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03500","gapId":"keymap:Pose:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03501","gapId":"keymap:Preferences:PREFERENCES:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03502","gapId":"keymap:Preferences_nav:PREFERENCES:UI","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03503","gapId":"keymap:Preview Tool: Cursor:SEQUENCE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03504","gapId":"keymap:Preview Tool: Move:SEQUENCE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03505","gapId":"keymap:Preview Tool: Rotate:SEQUENCE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03506","gapId":"keymap:Preview Tool: Sample:SEQUENCE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03507","gapId":"keymap:Preview Tool: Scale:SEQUENCE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03508","gapId":"keymap:Preview Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03509","gapId":"keymap:Preview Tool: Select Box:SEQUENCE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03510","gapId":"keymap:Preview Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03511","gapId":"keymap:Preview Tool: Select Circle:SEQUENCE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03512","gapId":"keymap:Preview Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03513","gapId":"keymap:Preview Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03514","gapId":"keymap:Preview Tool: Tweak (fallback):SEQUENCE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03515","gapId":"keymap:Preview Tool: Tweak:SEQUENCE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03516","gapId":"keymap:Preview:SEQUENCE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03517","gapId":"keymap:Primitive Tool Modal Map:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03518","gapId":"keymap:Property Editor:PROPERTIES:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03519","gapId":"keymap:Region Context Menu:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03520","gapId":"keymap:Screen Editing:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03521","gapId":"keymap:Screen:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03522","gapId":"keymap:Sculpt Curves:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03523","gapId":"keymap:Sculpt Expand Modal:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03524","gapId":"keymap:Sculpt:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03525","gapId":"keymap:Sequencer Channels:SEQUENCE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03526","gapId":"keymap:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03527","gapId":"keymap:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03528","gapId":"keymap:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03529","gapId":"keymap:Sequencer Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03530","gapId":"keymap:Sequencer Tool: Select Circle:SEQUENCE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03531","gapId":"keymap:Sequencer Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03532","gapId":"keymap:Sequencer Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03533","gapId":"keymap:Sequencer Tool: Slip:SEQUENCE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03534","gapId":"keymap:Sequencer:SEQUENCE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03535","gapId":"keymap:Slip Modal:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03536","gapId":"keymap:Spreadsheet Generic:SPREADSHEET:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03537","gapId":"keymap:Standard Modal Map:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03538","gapId":"keymap:Text Generic:TEXT_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03539","gapId":"keymap:Text:TEXT_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03540","gapId":"keymap:Time Scrub:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03541","gapId":"keymap:Toolbar Popup:EMPTY:TEMPORARY","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03542","gapId":"keymap:Transform Axis Target Modal Map:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03543","gapId":"keymap:Transform Modal Map:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03544","gapId":"keymap:UV Editor:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03545","gapId":"keymap:User Interface:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03546","gapId":"keymap:Vertex Paint:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03547","gapId":"keymap:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03548","gapId":"keymap:View2D Buttons List:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03549","gapId":"keymap:View2D:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03550","gapId":"keymap:View3D Dolly Modal:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03551","gapId":"keymap:View3D Fly Modal:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03552","gapId":"keymap:View3D Gesture Circle:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03553","gapId":"keymap:View3D Move Modal:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03554","gapId":"keymap:View3D Placement Modal:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03555","gapId":"keymap:View3D Rotate Modal:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03556","gapId":"keymap:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03557","gapId":"keymap:View3D Walk Modal:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03558","gapId":"keymap:View3D Zoom Modal:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03559","gapId":"keymap:Weight Paint:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03560","gapId":"keymap:Window:EMPTY:WINDOW","ownerFamily":"KEYMAP","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03561","gapId":"region:ASSET_SHELF","ownerFamily":"REGION","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03562","gapId":"region:ASSET_SHELF_HEADER","ownerFamily":"REGION","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03563","gapId":"region:CHANNELS","ownerFamily":"REGION","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03564","gapId":"region:EXECUTE","ownerFamily":"REGION","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03565","gapId":"region:FOOTER","ownerFamily":"REGION","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03566","gapId":"region:HEADER","ownerFamily":"REGION","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03567","gapId":"region:HUD","ownerFamily":"REGION","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03568","gapId":"region:NAVIGATION_BAR","ownerFamily":"REGION","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03569","gapId":"region:PREVIEW","ownerFamily":"REGION","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03570","gapId":"region:SCRUBBING","ownerFamily":"REGION","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03571","gapId":"region:TEMPORARY","ownerFamily":"REGION","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03572","gapId":"region:TOOLS","ownerFamily":"REGION","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03573","gapId":"region:TOOL_HEADER","ownerFamily":"REGION","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03574","gapId":"region:TOOL_PROPS","ownerFamily":"REGION","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03575","gapId":"region:UI","ownerFamily":"REGION","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03576","gapId":"region:WINDOW","ownerFamily":"REGION","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03577","gapId":"region:XR","ownerFamily":"REGION","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03578","gapId":"space-class:SpaceClipEditor","ownerFamily":"SPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03579","gapId":"space-class:SpaceConsole","ownerFamily":"SPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03580","gapId":"space-class:SpaceDopeSheetEditor","ownerFamily":"SPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03581","gapId":"space-class:SpaceFileBrowser","ownerFamily":"SPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03582","gapId":"space-class:SpaceGraphEditor","ownerFamily":"SPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03583","gapId":"space-class:SpaceImageEditor","ownerFamily":"SPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03584","gapId":"space-class:SpaceInfo","ownerFamily":"SPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03585","gapId":"space-class:SpaceNLA","ownerFamily":"SPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03586","gapId":"space-class:SpaceNodeEditor","ownerFamily":"SPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03587","gapId":"space-class:SpaceOutliner","ownerFamily":"SPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03588","gapId":"space-class:SpacePreferences","ownerFamily":"SPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03589","gapId":"space-class:SpaceProperties","ownerFamily":"SPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03590","gapId":"space-class:SpaceSequenceEditor","ownerFamily":"SPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03591","gapId":"space-class:SpaceSpreadsheet","ownerFamily":"SPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03592","gapId":"space-class:SpaceTextEditor","ownerFamily":"SPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03593","gapId":"space-class:SpaceView3D","ownerFamily":"SPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03594","gapId":"space:CLIP_EDITOR","ownerFamily":"SPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03595","gapId":"space:CONSOLE","ownerFamily":"SPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03596","gapId":"space:DOPESHEET_EDITOR","ownerFamily":"SPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03597","gapId":"space:EMPTY","ownerFamily":"SPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03598","gapId":"space:FILE_BROWSER","ownerFamily":"SPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03599","gapId":"space:GRAPH_EDITOR","ownerFamily":"SPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03600","gapId":"space:IMAGE_EDITOR","ownerFamily":"SPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03601","gapId":"space:INFO","ownerFamily":"SPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03602","gapId":"space:NLA_EDITOR","ownerFamily":"SPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03603","gapId":"space:NODE_EDITOR","ownerFamily":"SPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03604","gapId":"space:OUTLINER","ownerFamily":"SPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03605","gapId":"space:PREFERENCES","ownerFamily":"SPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03606","gapId":"space:PROPERTIES","ownerFamily":"SPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03607","gapId":"space:SEQUENCE_EDITOR","ownerFamily":"SPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03608","gapId":"space:SPREADSHEET","ownerFamily":"SPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03609","gapId":"space:STATUSBAR","ownerFamily":"SPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03610","gapId":"space:TEXT_EDITOR","ownerFamily":"SPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03611","gapId":"space:TOPBAR","ownerFamily":"SPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03612","gapId":"space:VIEW_3D","ownerFamily":"SPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03613","gapId":"workspace:EDIT","ownerFamily":"WORKSPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03614","gapId":"workspace:EDIT_GPENCIL","ownerFamily":"WORKSPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03615","gapId":"workspace:OBJECT","ownerFamily":"WORKSPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03616","gapId":"workspace:PAINT_GREASE_PENCIL","ownerFamily":"WORKSPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03617","gapId":"workspace:PARTICLE_EDIT","ownerFamily":"WORKSPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03618","gapId":"workspace:POSE","ownerFamily":"WORKSPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03619","gapId":"workspace:SCULPT","ownerFamily":"WORKSPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03620","gapId":"workspace:SCULPT_GREASE_PENCIL","ownerFamily":"WORKSPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03621","gapId":"workspace:TEXTURE_PAINT","ownerFamily":"WORKSPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03622","gapId":"workspace:VERTEX_GREASE_PENCIL","ownerFamily":"WORKSPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03623","gapId":"workspace:VERTEX_PAINT","ownerFamily":"WORKSPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03624","gapId":"workspace:WEIGHT_GREASE_PENCIL","ownerFamily":"WORKSPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M21-GAP-03625","gapId":"workspace:WEIGHT_PAINT","ownerFamily":"WORKSPACE","sourceTask":"M15-01E","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M22-GAP-00001","gapId":"rna:Depsgraph:Depsgraph","ownerFamily":"Depsgraph","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M22-GAP-00002","gapId":"rna:Depsgraph:DepsgraphObjectInstance","ownerFamily":"Depsgraph","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M22-GAP-00003","gapId":"rna:Depsgraph:DepsgraphUpdate","ownerFamily":"Depsgraph","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M22-GAP-00004","gapId":"rna:Scene:Camera","ownerFamily":"Scene","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M22-GAP-00005","gapId":"rna:Scene:Collection","ownerFamily":"Scene","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M22-GAP-00006","gapId":"rna:Scene:Constraint","ownerFamily":"Scene","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M22-GAP-00007","gapId":"rna:Scene:LayerCollection","ownerFamily":"Scene","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M22-GAP-00008","gapId":"rna:Scene:Light","ownerFamily":"Scene","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M22-GAP-00009","gapId":"rna:Scene:Material","ownerFamily":"Scene","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M22-GAP-00010","gapId":"rna:Scene:Modifier","ownerFamily":"Scene","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M22-GAP-00011","gapId":"rna:Scene:NodeTree","ownerFamily":"Scene","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M22-GAP-00012","gapId":"rna:Scene:Object","ownerFamily":"Scene","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M22-GAP-00013","gapId":"rna:Scene:RenderSettings","ownerFamily":"Scene","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M22-GAP-00014","gapId":"rna:Scene:Scene","ownerFamily":"Scene","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M22-GAP-00015","gapId":"rna:Scene:Screen","ownerFamily":"Scene","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M22-GAP-00016","gapId":"rna:Scene:ViewLayer","ownerFamily":"Scene","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M22-GAP-00017","gapId":"rna:Scene:Window","ownerFamily":"Scene","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M22-GAP-00018","gapId":"rna:Scene:WindowManager","ownerFamily":"Scene","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} +{"id":"M22-GAP-00019","gapId":"rna:Scene:World","ownerFamily":"Scene","sourceTask":"M15-01F","state":"pending","targetImplementationClass":"LOCAL_EXACT"} diff --git a/tests/golden/corrective/C0-002/staged/task-index/task-index.json b/tests/golden/corrective/C0-002/staged/task-index/task-index.json new file mode 100644 index 00000000..a11450c8 --- /dev/null +++ b/tests/golden/corrective/C0-002/staged/task-index/task-index.json @@ -0,0 +1 @@ +{"schemaVersion":1,"operation":"BLENDER_TASK_CONTEXT_INDEX","source":{"path":"tests/golden/corrective/C0-002/staged/next-task-plan.candidate.json","sha256":"3d5c74c519d3ac9a53c2ae516c4ad37adccf6999909ff1672e0ef74caae695a8"},"catalog":{"path":"tests/golden/corrective/C0-002/staged/task-index/task-catalog.jsonl","sha256":"278d51b867d63a5975635b8fd108c9025668de0893576499a77bd3d571a0f14b"},"taskCount":6900,"activeTask":"M16-GAP-00274","entries":{"M16-GAP-00001":{"line":0,"offset":0,"length":165,"previous":null,"next":"M16-GAP-00002"},"M16-GAP-00002":{"line":1,"offset":165,"length":167,"previous":"M16-GAP-00001","next":"M16-GAP-00003"},"M16-GAP-00003":{"line":2,"offset":332,"length":164,"previous":"M16-GAP-00002","next":"M16-GAP-00004"},"M16-GAP-00004":{"line":3,"offset":496,"length":165,"previous":"M16-GAP-00003","next":"M16-GAP-00005"},"M16-GAP-00005":{"line":4,"offset":661,"length":169,"previous":"M16-GAP-00004","next":"M16-GAP-00006"},"M16-GAP-00006":{"line":5,"offset":830,"length":164,"previous":"M16-GAP-00005","next":"M16-GAP-00007"},"M16-GAP-00007":{"line":6,"offset":994,"length":165,"previous":"M16-GAP-00006","next":"M16-GAP-00008"},"M16-GAP-00008":{"line":7,"offset":1159,"length":177,"previous":"M16-GAP-00007","next":"M16-GAP-00009"},"M16-GAP-00009":{"line":8,"offset":1336,"length":171,"previous":"M16-GAP-00008","next":"M16-GAP-00010"},"M16-GAP-00010":{"line":9,"offset":1507,"length":166,"previous":"M16-GAP-00009","next":"M16-GAP-00011"},"M16-GAP-00011":{"line":10,"offset":1673,"length":166,"previous":"M16-GAP-00010","next":"M16-GAP-00012"},"M16-GAP-00012":{"line":11,"offset":1839,"length":164,"previous":"M16-GAP-00011","next":"M16-GAP-00013"},"M16-GAP-00013":{"line":12,"offset":2003,"length":167,"previous":"M16-GAP-00012","next":"M16-GAP-00014"},"M16-GAP-00014":{"line":13,"offset":2170,"length":163,"previous":"M16-GAP-00013","next":"M16-GAP-00015"},"M16-GAP-00015":{"line":14,"offset":2333,"length":167,"previous":"M16-GAP-00014","next":"M16-GAP-00016"},"M16-GAP-00016":{"line":15,"offset":2500,"length":167,"previous":"M16-GAP-00015","next":"M16-GAP-00017"},"M16-GAP-00017":{"line":16,"offset":2667,"length":165,"previous":"M16-GAP-00016","next":"M16-GAP-00018"},"M16-GAP-00018":{"line":17,"offset":2832,"length":175,"previous":"M16-GAP-00017","next":"M16-GAP-00019"},"M16-GAP-00019":{"line":18,"offset":3007,"length":169,"previous":"M16-GAP-00018","next":"M16-GAP-00020"},"M16-GAP-00020":{"line":19,"offset":3176,"length":164,"previous":"M16-GAP-00019","next":"M16-GAP-00021"},"M16-GAP-00021":{"line":20,"offset":3340,"length":165,"previous":"M16-GAP-00020","next":"M16-GAP-00022"},"M16-GAP-00022":{"line":21,"offset":3505,"length":164,"previous":"M16-GAP-00021","next":"M16-GAP-00023"},"M16-GAP-00023":{"line":22,"offset":3669,"length":166,"previous":"M16-GAP-00022","next":"M16-GAP-00024"},"M16-GAP-00024":{"line":23,"offset":3835,"length":163,"previous":"M16-GAP-00023","next":"M16-GAP-00025"},"M16-GAP-00025":{"line":24,"offset":3998,"length":166,"previous":"M16-GAP-00024","next":"M16-GAP-00026"},"M16-GAP-00026":{"line":25,"offset":4164,"length":165,"previous":"M16-GAP-00025","next":"M16-GAP-00027"},"M16-GAP-00027":{"line":26,"offset":4329,"length":172,"previous":"M16-GAP-00026","next":"M16-GAP-00028"},"M16-GAP-00028":{"line":27,"offset":4501,"length":168,"previous":"M16-GAP-00027","next":"M16-GAP-00029"},"M16-GAP-00029":{"line":28,"offset":4669,"length":164,"previous":"M16-GAP-00028","next":"M16-GAP-00030"},"M16-GAP-00030":{"line":29,"offset":4833,"length":161,"previous":"M16-GAP-00029","next":"M16-GAP-00031"},"M16-GAP-00031":{"line":30,"offset":4994,"length":158,"previous":"M16-GAP-00030","next":"M16-GAP-00032"},"M16-GAP-00032":{"line":31,"offset":5152,"length":158,"previous":"M16-GAP-00031","next":"M16-GAP-00033"},"M16-GAP-00033":{"line":32,"offset":5310,"length":160,"previous":"M16-GAP-00032","next":"M16-GAP-00034"},"M16-GAP-00034":{"line":33,"offset":5470,"length":158,"previous":"M16-GAP-00033","next":"M16-GAP-00035"},"M16-GAP-00035":{"line":34,"offset":5628,"length":157,"previous":"M16-GAP-00034","next":"M16-GAP-00036"},"M16-GAP-00036":{"line":35,"offset":5785,"length":158,"previous":"M16-GAP-00035","next":"M16-GAP-00037"},"M16-GAP-00037":{"line":36,"offset":5943,"length":162,"previous":"M16-GAP-00036","next":"M16-GAP-00038"},"M16-GAP-00038":{"line":37,"offset":6105,"length":170,"previous":"M16-GAP-00037","next":"M16-GAP-00039"},"M16-GAP-00039":{"line":38,"offset":6275,"length":158,"previous":"M16-GAP-00038","next":"M16-GAP-00040"},"M16-GAP-00040":{"line":39,"offset":6433,"length":166,"previous":"M16-GAP-00039","next":"M16-GAP-00041"},"M16-GAP-00041":{"line":40,"offset":6599,"length":161,"previous":"M16-GAP-00040","next":"M16-GAP-00042"},"M16-GAP-00042":{"line":41,"offset":6760,"length":161,"previous":"M16-GAP-00041","next":"M16-GAP-00043"},"M16-GAP-00043":{"line":42,"offset":6921,"length":166,"previous":"M16-GAP-00042","next":"M16-GAP-00044"},"M16-GAP-00044":{"line":43,"offset":7087,"length":163,"previous":"M16-GAP-00043","next":"M16-GAP-00045"},"M16-GAP-00045":{"line":44,"offset":7250,"length":160,"previous":"M16-GAP-00044","next":"M16-GAP-00046"},"M16-GAP-00046":{"line":45,"offset":7410,"length":158,"previous":"M16-GAP-00045","next":"M16-GAP-00047"},"M16-GAP-00047":{"line":46,"offset":7568,"length":175,"previous":"M16-GAP-00046","next":"M16-GAP-00048"},"M16-GAP-00048":{"line":47,"offset":7743,"length":172,"previous":"M16-GAP-00047","next":"M16-GAP-00049"},"M16-GAP-00049":{"line":48,"offset":7915,"length":172,"previous":"M16-GAP-00048","next":"M16-GAP-00050"},"M16-GAP-00050":{"line":49,"offset":8087,"length":172,"previous":"M16-GAP-00049","next":"M16-GAP-00051"},"M16-GAP-00051":{"line":50,"offset":8259,"length":171,"previous":"M16-GAP-00050","next":"M16-GAP-00052"},"M16-GAP-00052":{"line":51,"offset":8430,"length":175,"previous":"M16-GAP-00051","next":"M16-GAP-00053"},"M16-GAP-00053":{"line":52,"offset":8605,"length":171,"previous":"M16-GAP-00052","next":"M16-GAP-00054"},"M16-GAP-00054":{"line":53,"offset":8776,"length":174,"previous":"M16-GAP-00053","next":"M16-GAP-00055"},"M16-GAP-00055":{"line":54,"offset":8950,"length":173,"previous":"M16-GAP-00054","next":"M16-GAP-00056"},"M16-GAP-00056":{"line":55,"offset":9123,"length":173,"previous":"M16-GAP-00055","next":"M16-GAP-00057"},"M16-GAP-00057":{"line":56,"offset":9296,"length":175,"previous":"M16-GAP-00056","next":"M16-GAP-00058"},"M16-GAP-00058":{"line":57,"offset":9471,"length":172,"previous":"M16-GAP-00057","next":"M16-GAP-00059"},"M16-GAP-00059":{"line":58,"offset":9643,"length":173,"previous":"M16-GAP-00058","next":"M16-GAP-00060"},"M16-GAP-00060":{"line":59,"offset":9816,"length":174,"previous":"M16-GAP-00059","next":"M16-GAP-00061"},"M16-GAP-00061":{"line":60,"offset":9990,"length":174,"previous":"M16-GAP-00060","next":"M16-GAP-00062"},"M16-GAP-00062":{"line":61,"offset":10164,"length":177,"previous":"M16-GAP-00061","next":"M16-GAP-00063"},"M16-GAP-00063":{"line":62,"offset":10341,"length":175,"previous":"M16-GAP-00062","next":"M16-GAP-00064"},"M16-GAP-00064":{"line":63,"offset":10516,"length":173,"previous":"M16-GAP-00063","next":"M16-GAP-00065"},"M16-GAP-00065":{"line":64,"offset":10689,"length":173,"previous":"M16-GAP-00064","next":"M16-GAP-00066"},"M16-GAP-00066":{"line":65,"offset":10862,"length":174,"previous":"M16-GAP-00065","next":"M16-GAP-00067"},"M16-GAP-00067":{"line":66,"offset":11036,"length":176,"previous":"M16-GAP-00066","next":"M16-GAP-00068"},"M16-GAP-00068":{"line":67,"offset":11212,"length":171,"previous":"M16-GAP-00067","next":"M16-GAP-00069"},"M16-GAP-00069":{"line":68,"offset":11383,"length":171,"previous":"M16-GAP-00068","next":"M16-GAP-00070"},"M16-GAP-00070":{"line":69,"offset":11554,"length":186,"previous":"M16-GAP-00069","next":"M16-GAP-00071"},"M16-GAP-00071":{"line":70,"offset":11740,"length":190,"previous":"M16-GAP-00070","next":"M16-GAP-00072"},"M16-GAP-00072":{"line":71,"offset":11930,"length":157,"previous":"M16-GAP-00071","next":"M16-GAP-00073"},"M16-GAP-00073":{"line":72,"offset":12087,"length":168,"previous":"M16-GAP-00072","next":"M16-GAP-00074"},"M16-GAP-00074":{"line":73,"offset":12255,"length":168,"previous":"M16-GAP-00073","next":"M16-GAP-00075"},"M16-GAP-00075":{"line":74,"offset":12423,"length":160,"previous":"M16-GAP-00074","next":"M16-GAP-00076"},"M16-GAP-00076":{"line":75,"offset":12583,"length":160,"previous":"M16-GAP-00075","next":"M16-GAP-00077"},"M16-GAP-00077":{"line":76,"offset":12743,"length":157,"previous":"M16-GAP-00076","next":"M16-GAP-00078"},"M16-GAP-00078":{"line":77,"offset":12900,"length":163,"previous":"M16-GAP-00077","next":"M16-GAP-00079"},"M16-GAP-00079":{"line":78,"offset":13063,"length":164,"previous":"M16-GAP-00078","next":"M16-GAP-00080"},"M16-GAP-00080":{"line":79,"offset":13227,"length":172,"previous":"M16-GAP-00079","next":"M16-GAP-00081"},"M16-GAP-00081":{"line":80,"offset":13399,"length":167,"previous":"M16-GAP-00080","next":"M16-GAP-00082"},"M16-GAP-00082":{"line":81,"offset":13566,"length":159,"previous":"M16-GAP-00081","next":"M16-GAP-00083"},"M16-GAP-00083":{"line":82,"offset":13725,"length":161,"previous":"M16-GAP-00082","next":"M16-GAP-00084"},"M16-GAP-00084":{"line":83,"offset":13886,"length":158,"previous":"M16-GAP-00083","next":"M16-GAP-00085"},"M16-GAP-00085":{"line":84,"offset":14044,"length":164,"previous":"M16-GAP-00084","next":"M16-GAP-00086"},"M16-GAP-00086":{"line":85,"offset":14208,"length":158,"previous":"M16-GAP-00085","next":"M16-GAP-00087"},"M16-GAP-00087":{"line":86,"offset":14366,"length":170,"previous":"M16-GAP-00086","next":"M16-GAP-00088"},"M16-GAP-00088":{"line":87,"offset":14536,"length":168,"previous":"M16-GAP-00087","next":"M16-GAP-00089"},"M16-GAP-00089":{"line":88,"offset":14704,"length":159,"previous":"M16-GAP-00088","next":"M16-GAP-00090"},"M16-GAP-00090":{"line":89,"offset":14863,"length":158,"previous":"M16-GAP-00089","next":"M16-GAP-00091"},"M16-GAP-00091":{"line":90,"offset":15021,"length":163,"previous":"M16-GAP-00090","next":"M16-GAP-00092"},"M16-GAP-00092":{"line":91,"offset":15184,"length":166,"previous":"M16-GAP-00091","next":"M16-GAP-00093"},"M16-GAP-00093":{"line":92,"offset":15350,"length":157,"previous":"M16-GAP-00092","next":"M16-GAP-00094"},"M16-GAP-00094":{"line":93,"offset":15507,"length":159,"previous":"M16-GAP-00093","next":"M16-GAP-00095"},"M16-GAP-00095":{"line":94,"offset":15666,"length":162,"previous":"M16-GAP-00094","next":"M16-GAP-00096"},"M16-GAP-00096":{"line":95,"offset":15828,"length":161,"previous":"M16-GAP-00095","next":"M16-GAP-00097"},"M16-GAP-00097":{"line":96,"offset":15989,"length":160,"previous":"M16-GAP-00096","next":"M16-GAP-00098"},"M16-GAP-00098":{"line":97,"offset":16149,"length":160,"previous":"M16-GAP-00097","next":"M16-GAP-00099"},"M16-GAP-00099":{"line":98,"offset":16309,"length":167,"previous":"M16-GAP-00098","next":"M16-GAP-00100"},"M16-GAP-00100":{"line":99,"offset":16476,"length":164,"previous":"M16-GAP-00099","next":"M16-GAP-00101"},"M16-GAP-00101":{"line":100,"offset":16640,"length":163,"previous":"M16-GAP-00100","next":"M16-GAP-00102"},"M16-GAP-00102":{"line":101,"offset":16803,"length":160,"previous":"M16-GAP-00101","next":"M16-GAP-00103"},"M16-GAP-00103":{"line":102,"offset":16963,"length":171,"previous":"M16-GAP-00102","next":"M16-GAP-00104"},"M16-GAP-00104":{"line":103,"offset":17134,"length":170,"previous":"M16-GAP-00103","next":"M16-GAP-00105"},"M16-GAP-00105":{"line":104,"offset":17304,"length":176,"previous":"M16-GAP-00104","next":"M16-GAP-00106"},"M16-GAP-00106":{"line":105,"offset":17480,"length":168,"previous":"M16-GAP-00105","next":"M16-GAP-00107"},"M16-GAP-00107":{"line":106,"offset":17648,"length":167,"previous":"M16-GAP-00106","next":"M16-GAP-00108"},"M16-GAP-00108":{"line":107,"offset":17815,"length":157,"previous":"M16-GAP-00107","next":"M16-GAP-00109"},"M16-GAP-00109":{"line":108,"offset":17972,"length":157,"previous":"M16-GAP-00108","next":"M16-GAP-00110"},"M16-GAP-00110":{"line":109,"offset":18129,"length":168,"previous":"M16-GAP-00109","next":"M16-GAP-00111"},"M16-GAP-00111":{"line":110,"offset":18297,"length":157,"previous":"M16-GAP-00110","next":"M16-GAP-00112"},"M16-GAP-00112":{"line":111,"offset":18454,"length":162,"previous":"M16-GAP-00111","next":"M16-GAP-00113"},"M16-GAP-00113":{"line":112,"offset":18616,"length":169,"previous":"M16-GAP-00112","next":"M16-GAP-00114"},"M16-GAP-00114":{"line":113,"offset":18785,"length":165,"previous":"M16-GAP-00113","next":"M16-GAP-00115"},"M16-GAP-00115":{"line":114,"offset":18950,"length":171,"previous":"M16-GAP-00114","next":"M16-GAP-00116"},"M16-GAP-00116":{"line":115,"offset":19121,"length":164,"previous":"M16-GAP-00115","next":"M16-GAP-00117"},"M16-GAP-00117":{"line":116,"offset":19285,"length":166,"previous":"M16-GAP-00116","next":"M16-GAP-00118"},"M16-GAP-00118":{"line":117,"offset":19451,"length":169,"previous":"M16-GAP-00117","next":"M16-GAP-00119"},"M16-GAP-00119":{"line":118,"offset":19620,"length":174,"previous":"M16-GAP-00118","next":"M16-GAP-00120"},"M16-GAP-00120":{"line":119,"offset":19794,"length":171,"previous":"M16-GAP-00119","next":"M16-GAP-00121"},"M16-GAP-00121":{"line":120,"offset":19965,"length":178,"previous":"M16-GAP-00120","next":"M16-GAP-00122"},"M16-GAP-00122":{"line":121,"offset":20143,"length":170,"previous":"M16-GAP-00121","next":"M16-GAP-00123"},"M16-GAP-00123":{"line":122,"offset":20313,"length":171,"previous":"M16-GAP-00122","next":"M16-GAP-00124"},"M16-GAP-00124":{"line":123,"offset":20484,"length":178,"previous":"M16-GAP-00123","next":"M16-GAP-00125"},"M16-GAP-00125":{"line":124,"offset":20662,"length":175,"previous":"M16-GAP-00124","next":"M16-GAP-00126"},"M16-GAP-00126":{"line":125,"offset":20837,"length":173,"previous":"M16-GAP-00125","next":"M16-GAP-00127"},"M16-GAP-00127":{"line":126,"offset":21010,"length":178,"previous":"M16-GAP-00126","next":"M16-GAP-00128"},"M16-GAP-00128":{"line":127,"offset":21188,"length":166,"previous":"M16-GAP-00127","next":"M16-GAP-00129"},"M16-GAP-00129":{"line":128,"offset":21354,"length":163,"previous":"M16-GAP-00128","next":"M16-GAP-00130"},"M16-GAP-00130":{"line":129,"offset":21517,"length":165,"previous":"M16-GAP-00129","next":"M16-GAP-00131"},"M16-GAP-00131":{"line":130,"offset":21682,"length":176,"previous":"M16-GAP-00130","next":"M16-GAP-00132"},"M16-GAP-00132":{"line":131,"offset":21858,"length":169,"previous":"M16-GAP-00131","next":"M16-GAP-00133"},"M16-GAP-00133":{"line":132,"offset":22027,"length":170,"previous":"M16-GAP-00132","next":"M16-GAP-00134"},"M16-GAP-00134":{"line":133,"offset":22197,"length":170,"previous":"M16-GAP-00133","next":"M16-GAP-00135"},"M16-GAP-00135":{"line":134,"offset":22367,"length":174,"previous":"M16-GAP-00134","next":"M16-GAP-00136"},"M16-GAP-00136":{"line":135,"offset":22541,"length":173,"previous":"M16-GAP-00135","next":"M16-GAP-00137"},"M16-GAP-00137":{"line":136,"offset":22714,"length":173,"previous":"M16-GAP-00136","next":"M16-GAP-00138"},"M16-GAP-00138":{"line":137,"offset":22887,"length":172,"previous":"M16-GAP-00137","next":"M16-GAP-00139"},"M16-GAP-00139":{"line":138,"offset":23059,"length":176,"previous":"M16-GAP-00138","next":"M16-GAP-00140"},"M16-GAP-00140":{"line":139,"offset":23235,"length":171,"previous":"M16-GAP-00139","next":"M16-GAP-00141"},"M16-GAP-00141":{"line":140,"offset":23406,"length":173,"previous":"M16-GAP-00140","next":"M16-GAP-00142"},"M16-GAP-00142":{"line":141,"offset":23579,"length":171,"previous":"M16-GAP-00141","next":"M16-GAP-00143"},"M16-GAP-00143":{"line":142,"offset":23750,"length":164,"previous":"M16-GAP-00142","next":"M16-GAP-00144"},"M16-GAP-00144":{"line":143,"offset":23914,"length":165,"previous":"M16-GAP-00143","next":"M16-GAP-00145"},"M16-GAP-00145":{"line":144,"offset":24079,"length":176,"previous":"M16-GAP-00144","next":"M16-GAP-00146"},"M16-GAP-00146":{"line":145,"offset":24255,"length":166,"previous":"M16-GAP-00145","next":"M16-GAP-00147"},"M16-GAP-00147":{"line":146,"offset":24421,"length":168,"previous":"M16-GAP-00146","next":"M16-GAP-00148"},"M16-GAP-00148":{"line":147,"offset":24589,"length":170,"previous":"M16-GAP-00147","next":"M16-GAP-00149"},"M16-GAP-00149":{"line":148,"offset":24759,"length":173,"previous":"M16-GAP-00148","next":"M16-GAP-00150"},"M16-GAP-00150":{"line":149,"offset":24932,"length":170,"previous":"M16-GAP-00149","next":"M16-GAP-00151"},"M16-GAP-00151":{"line":150,"offset":25102,"length":177,"previous":"M16-GAP-00150","next":"M16-GAP-00152"},"M16-GAP-00152":{"line":151,"offset":25279,"length":175,"previous":"M16-GAP-00151","next":"M16-GAP-00153"},"M16-GAP-00153":{"line":152,"offset":25454,"length":171,"previous":"M16-GAP-00152","next":"M16-GAP-00154"},"M16-GAP-00154":{"line":153,"offset":25625,"length":178,"previous":"M16-GAP-00153","next":"M16-GAP-00155"},"M16-GAP-00155":{"line":154,"offset":25803,"length":172,"previous":"M16-GAP-00154","next":"M16-GAP-00156"},"M16-GAP-00156":{"line":155,"offset":25975,"length":175,"previous":"M16-GAP-00155","next":"M16-GAP-00157"},"M16-GAP-00157":{"line":156,"offset":26150,"length":173,"previous":"M16-GAP-00156","next":"M16-GAP-00158"},"M16-GAP-00158":{"line":157,"offset":26323,"length":182,"previous":"M16-GAP-00157","next":"M16-GAP-00159"},"M16-GAP-00159":{"line":158,"offset":26505,"length":173,"previous":"M16-GAP-00158","next":"M16-GAP-00160"},"M16-GAP-00160":{"line":159,"offset":26678,"length":181,"previous":"M16-GAP-00159","next":"M16-GAP-00161"},"M16-GAP-00161":{"line":160,"offset":26859,"length":172,"previous":"M16-GAP-00160","next":"M16-GAP-00162"},"M16-GAP-00162":{"line":161,"offset":27031,"length":171,"previous":"M16-GAP-00161","next":"M16-GAP-00163"},"M16-GAP-00163":{"line":162,"offset":27202,"length":173,"previous":"M16-GAP-00162","next":"M16-GAP-00164"},"M16-GAP-00164":{"line":163,"offset":27375,"length":177,"previous":"M16-GAP-00163","next":"M16-GAP-00165"},"M16-GAP-00165":{"line":164,"offset":27552,"length":177,"previous":"M16-GAP-00164","next":"M16-GAP-00166"},"M16-GAP-00166":{"line":165,"offset":27729,"length":180,"previous":"M16-GAP-00165","next":"M16-GAP-00167"},"M16-GAP-00167":{"line":166,"offset":27909,"length":182,"previous":"M16-GAP-00166","next":"M16-GAP-00168"},"M16-GAP-00168":{"line":167,"offset":28091,"length":181,"previous":"M16-GAP-00167","next":"M16-GAP-00169"},"M16-GAP-00169":{"line":168,"offset":28272,"length":181,"previous":"M16-GAP-00168","next":"M16-GAP-00170"},"M16-GAP-00170":{"line":169,"offset":28453,"length":174,"previous":"M16-GAP-00169","next":"M16-GAP-00171"},"M16-GAP-00171":{"line":170,"offset":28627,"length":180,"previous":"M16-GAP-00170","next":"M16-GAP-00172"},"M16-GAP-00172":{"line":171,"offset":28807,"length":179,"previous":"M16-GAP-00171","next":"M16-GAP-00173"},"M16-GAP-00173":{"line":172,"offset":28986,"length":176,"previous":"M16-GAP-00172","next":"M16-GAP-00174"},"M16-GAP-00174":{"line":173,"offset":29162,"length":175,"previous":"M16-GAP-00173","next":"M16-GAP-00175"},"M16-GAP-00175":{"line":174,"offset":29337,"length":176,"previous":"M16-GAP-00174","next":"M16-GAP-00176"},"M16-GAP-00176":{"line":175,"offset":29513,"length":178,"previous":"M16-GAP-00175","next":"M16-GAP-00177"},"M16-GAP-00177":{"line":176,"offset":29691,"length":171,"previous":"M16-GAP-00176","next":"M16-GAP-00178"},"M16-GAP-00178":{"line":177,"offset":29862,"length":179,"previous":"M16-GAP-00177","next":"M16-GAP-00179"},"M16-GAP-00179":{"line":178,"offset":30041,"length":176,"previous":"M16-GAP-00178","next":"M16-GAP-00180"},"M16-GAP-00180":{"line":179,"offset":30217,"length":176,"previous":"M16-GAP-00179","next":"M16-GAP-00181"},"M16-GAP-00181":{"line":180,"offset":30393,"length":173,"previous":"M16-GAP-00180","next":"M16-GAP-00182"},"M16-GAP-00182":{"line":181,"offset":30566,"length":180,"previous":"M16-GAP-00181","next":"M16-GAP-00183"},"M16-GAP-00183":{"line":182,"offset":30746,"length":181,"previous":"M16-GAP-00182","next":"M16-GAP-00184"},"M16-GAP-00184":{"line":183,"offset":30927,"length":177,"previous":"M16-GAP-00183","next":"M16-GAP-00185"},"M16-GAP-00185":{"line":184,"offset":31104,"length":177,"previous":"M16-GAP-00184","next":"M16-GAP-00186"},"M16-GAP-00186":{"line":185,"offset":31281,"length":173,"previous":"M16-GAP-00185","next":"M16-GAP-00187"},"M16-GAP-00187":{"line":186,"offset":31454,"length":180,"previous":"M16-GAP-00186","next":"M16-GAP-00188"},"M16-GAP-00188":{"line":187,"offset":31634,"length":181,"previous":"M16-GAP-00187","next":"M16-GAP-00189"},"M16-GAP-00189":{"line":188,"offset":31815,"length":178,"previous":"M16-GAP-00188","next":"M16-GAP-00190"},"M16-GAP-00190":{"line":189,"offset":31993,"length":179,"previous":"M16-GAP-00189","next":"M16-GAP-00191"},"M16-GAP-00191":{"line":190,"offset":32172,"length":172,"previous":"M16-GAP-00190","next":"M16-GAP-00192"},"M16-GAP-00192":{"line":191,"offset":32344,"length":175,"previous":"M16-GAP-00191","next":"M16-GAP-00193"},"M16-GAP-00193":{"line":192,"offset":32519,"length":177,"previous":"M16-GAP-00192","next":"M16-GAP-00194"},"M16-GAP-00194":{"line":193,"offset":32696,"length":180,"previous":"M16-GAP-00193","next":"M16-GAP-00195"},"M16-GAP-00195":{"line":194,"offset":32876,"length":175,"previous":"M16-GAP-00194","next":"M16-GAP-00196"},"M16-GAP-00196":{"line":195,"offset":33051,"length":178,"previous":"M16-GAP-00195","next":"M16-GAP-00197"},"M16-GAP-00197":{"line":196,"offset":33229,"length":181,"previous":"M16-GAP-00196","next":"M16-GAP-00198"},"M16-GAP-00198":{"line":197,"offset":33410,"length":173,"previous":"M16-GAP-00197","next":"M16-GAP-00199"},"M16-GAP-00199":{"line":198,"offset":33583,"length":177,"previous":"M16-GAP-00198","next":"M16-GAP-00200"},"M16-GAP-00200":{"line":199,"offset":33760,"length":176,"previous":"M16-GAP-00199","next":"M16-GAP-00201"},"M16-GAP-00201":{"line":200,"offset":33936,"length":174,"previous":"M16-GAP-00200","next":"M16-GAP-00202"},"M16-GAP-00202":{"line":201,"offset":34110,"length":172,"previous":"M16-GAP-00201","next":"M16-GAP-00203"},"M16-GAP-00203":{"line":202,"offset":34282,"length":176,"previous":"M16-GAP-00202","next":"M16-GAP-00204"},"M16-GAP-00204":{"line":203,"offset":34458,"length":175,"previous":"M16-GAP-00203","next":"M16-GAP-00205"},"M16-GAP-00205":{"line":204,"offset":34633,"length":172,"previous":"M16-GAP-00204","next":"M16-GAP-00206"},"M16-GAP-00206":{"line":205,"offset":34805,"length":190,"previous":"M16-GAP-00205","next":"M16-GAP-00207"},"M16-GAP-00207":{"line":206,"offset":34995,"length":173,"previous":"M16-GAP-00206","next":"M16-GAP-00208"},"M16-GAP-00208":{"line":207,"offset":35168,"length":187,"previous":"M16-GAP-00207","next":"M16-GAP-00209"},"M16-GAP-00209":{"line":208,"offset":35355,"length":179,"previous":"M16-GAP-00208","next":"M16-GAP-00210"},"M16-GAP-00210":{"line":209,"offset":35534,"length":186,"previous":"M16-GAP-00209","next":"M16-GAP-00211"},"M16-GAP-00211":{"line":210,"offset":35720,"length":173,"previous":"M16-GAP-00210","next":"M16-GAP-00212"},"M16-GAP-00212":{"line":211,"offset":35893,"length":195,"previous":"M16-GAP-00211","next":"M16-GAP-00213"},"M16-GAP-00213":{"line":212,"offset":36088,"length":184,"previous":"M16-GAP-00212","next":"M16-GAP-00214"},"M16-GAP-00214":{"line":213,"offset":36272,"length":184,"previous":"M16-GAP-00213","next":"M16-GAP-00215"},"M16-GAP-00215":{"line":214,"offset":36456,"length":167,"previous":"M16-GAP-00214","next":"M16-GAP-00216"},"M16-GAP-00216":{"line":215,"offset":36623,"length":182,"previous":"M16-GAP-00215","next":"M16-GAP-00217"},"M16-GAP-00217":{"line":216,"offset":36805,"length":176,"previous":"M16-GAP-00216","next":"M16-GAP-00218"},"M16-GAP-00218":{"line":217,"offset":36981,"length":180,"previous":"M16-GAP-00217","next":"M16-GAP-00219"},"M16-GAP-00219":{"line":218,"offset":37161,"length":176,"previous":"M16-GAP-00218","next":"M16-GAP-00220"},"M16-GAP-00220":{"line":219,"offset":37337,"length":175,"previous":"M16-GAP-00219","next":"M16-GAP-00221"},"M16-GAP-00221":{"line":220,"offset":37512,"length":176,"previous":"M16-GAP-00220","next":"M16-GAP-00222"},"M16-GAP-00222":{"line":221,"offset":37688,"length":179,"previous":"M16-GAP-00221","next":"M16-GAP-00223"},"M16-GAP-00223":{"line":222,"offset":37867,"length":190,"previous":"M16-GAP-00222","next":"M16-GAP-00224"},"M16-GAP-00224":{"line":223,"offset":38057,"length":181,"previous":"M16-GAP-00223","next":"M16-GAP-00225"},"M16-GAP-00225":{"line":224,"offset":38238,"length":177,"previous":"M16-GAP-00224","next":"M16-GAP-00226"},"M16-GAP-00226":{"line":225,"offset":38415,"length":179,"previous":"M16-GAP-00225","next":"M16-GAP-00227"},"M16-GAP-00227":{"line":226,"offset":38594,"length":186,"previous":"M16-GAP-00226","next":"M16-GAP-00228"},"M16-GAP-00228":{"line":227,"offset":38780,"length":179,"previous":"M16-GAP-00227","next":"M16-GAP-00229"},"M16-GAP-00229":{"line":228,"offset":38959,"length":181,"previous":"M16-GAP-00228","next":"M16-GAP-00230"},"M16-GAP-00230":{"line":229,"offset":39140,"length":181,"previous":"M16-GAP-00229","next":"M16-GAP-00231"},"M16-GAP-00231":{"line":230,"offset":39321,"length":187,"previous":"M16-GAP-00230","next":"M16-GAP-00232"},"M16-GAP-00232":{"line":231,"offset":39508,"length":183,"previous":"M16-GAP-00231","next":"M16-GAP-00233"},"M16-GAP-00233":{"line":232,"offset":39691,"length":189,"previous":"M16-GAP-00232","next":"M16-GAP-00234"},"M16-GAP-00234":{"line":233,"offset":39880,"length":168,"previous":"M16-GAP-00233","next":"M16-GAP-00235"},"M16-GAP-00235":{"line":234,"offset":40048,"length":170,"previous":"M16-GAP-00234","next":"M16-GAP-00236"},"M16-GAP-00236":{"line":235,"offset":40218,"length":171,"previous":"M16-GAP-00235","next":"M16-GAP-00237"},"M16-GAP-00237":{"line":236,"offset":40389,"length":176,"previous":"M16-GAP-00236","next":"M16-GAP-00238"},"M16-GAP-00238":{"line":237,"offset":40565,"length":178,"previous":"M16-GAP-00237","next":"M16-GAP-00239"},"M16-GAP-00239":{"line":238,"offset":40743,"length":169,"previous":"M16-GAP-00238","next":"M16-GAP-00240"},"M16-GAP-00240":{"line":239,"offset":40912,"length":176,"previous":"M16-GAP-00239","next":"M16-GAP-00241"},"M16-GAP-00241":{"line":240,"offset":41088,"length":174,"previous":"M16-GAP-00240","next":"M16-GAP-00242"},"M16-GAP-00242":{"line":241,"offset":41262,"length":166,"previous":"M16-GAP-00241","next":"M16-GAP-00243"},"M16-GAP-00243":{"line":242,"offset":41428,"length":172,"previous":"M16-GAP-00242","next":"M16-GAP-00244"},"M16-GAP-00244":{"line":243,"offset":41600,"length":166,"previous":"M16-GAP-00243","next":"M16-GAP-00245"},"M16-GAP-00245":{"line":244,"offset":41766,"length":180,"previous":"M16-GAP-00244","next":"M16-GAP-00246"},"M16-GAP-00246":{"line":245,"offset":41946,"length":174,"previous":"M16-GAP-00245","next":"M16-GAP-00247"},"M16-GAP-00247":{"line":246,"offset":42120,"length":172,"previous":"M16-GAP-00246","next":"M16-GAP-00248"},"M16-GAP-00248":{"line":247,"offset":42292,"length":168,"previous":"M16-GAP-00247","next":"M16-GAP-00249"},"M16-GAP-00249":{"line":248,"offset":42460,"length":172,"previous":"M16-GAP-00248","next":"M16-GAP-00250"},"M16-GAP-00250":{"line":249,"offset":42632,"length":172,"previous":"M16-GAP-00249","next":"M16-GAP-00251"},"M16-GAP-00251":{"line":250,"offset":42804,"length":178,"previous":"M16-GAP-00250","next":"M16-GAP-00252"},"M16-GAP-00252":{"line":251,"offset":42982,"length":173,"previous":"M16-GAP-00251","next":"M16-GAP-00253"},"M16-GAP-00253":{"line":252,"offset":43155,"length":175,"previous":"M16-GAP-00252","next":"M16-GAP-00254"},"M16-GAP-00254":{"line":253,"offset":43330,"length":180,"previous":"M16-GAP-00253","next":"M16-GAP-00255"},"M16-GAP-00255":{"line":254,"offset":43510,"length":175,"previous":"M16-GAP-00254","next":"M16-GAP-00256"},"M16-GAP-00256":{"line":255,"offset":43685,"length":173,"previous":"M16-GAP-00255","next":"M16-GAP-00257"},"M16-GAP-00257":{"line":256,"offset":43858,"length":176,"previous":"M16-GAP-00256","next":"M16-GAP-00258"},"M16-GAP-00258":{"line":257,"offset":44034,"length":170,"previous":"M16-GAP-00257","next":"M16-GAP-00259"},"M16-GAP-00259":{"line":258,"offset":44204,"length":180,"previous":"M16-GAP-00258","next":"M16-GAP-00260"},"M16-GAP-00260":{"line":259,"offset":44384,"length":167,"previous":"M16-GAP-00259","next":"M16-GAP-00261"},"M16-GAP-00261":{"line":260,"offset":44551,"length":171,"previous":"M16-GAP-00260","next":"M16-GAP-00262"},"M16-GAP-00262":{"line":261,"offset":44722,"length":178,"previous":"M16-GAP-00261","next":"M16-GAP-00263"},"M16-GAP-00263":{"line":262,"offset":44900,"length":172,"previous":"M16-GAP-00262","next":"M16-GAP-00264"},"M16-GAP-00264":{"line":263,"offset":45072,"length":173,"previous":"M16-GAP-00263","next":"M16-GAP-00265"},"M16-GAP-00265":{"line":264,"offset":45245,"length":174,"previous":"M16-GAP-00264","next":"M16-GAP-00266"},"M16-GAP-00266":{"line":265,"offset":45419,"length":172,"previous":"M16-GAP-00265","next":"M16-GAP-00267"},"M16-GAP-00267":{"line":266,"offset":45591,"length":187,"previous":"M16-GAP-00266","next":"M16-GAP-00268"},"M16-GAP-00268":{"line":267,"offset":45778,"length":173,"previous":"M16-GAP-00267","next":"M16-GAP-00269"},"M16-GAP-00269":{"line":268,"offset":45951,"length":173,"previous":"M16-GAP-00268","next":"M16-GAP-00270"},"M16-GAP-00270":{"line":269,"offset":46124,"length":170,"previous":"M16-GAP-00269","next":"M16-GAP-00271"},"M16-GAP-00271":{"line":270,"offset":46294,"length":171,"previous":"M16-GAP-00270","next":"M16-GAP-00272"},"M16-GAP-00272":{"line":271,"offset":46465,"length":171,"previous":"M16-GAP-00271","next":"M16-GAP-00273"},"M16-GAP-00273":{"line":272,"offset":46636,"length":176,"previous":"M16-GAP-00272","next":"M16-GAP-00274"},"M16-GAP-00274":{"line":273,"offset":46812,"length":169,"previous":"M16-GAP-00273","next":"M16-GAP-00275"},"M16-GAP-00275":{"line":274,"offset":46981,"length":162,"previous":"M16-GAP-00274","next":"M16-GAP-00276"},"M16-GAP-00276":{"line":275,"offset":47143,"length":169,"previous":"M16-GAP-00275","next":"M16-GAP-00277"},"M16-GAP-00277":{"line":276,"offset":47312,"length":172,"previous":"M16-GAP-00276","next":"M16-GAP-00278"},"M16-GAP-00278":{"line":277,"offset":47484,"length":179,"previous":"M16-GAP-00277","next":"M16-GAP-00279"},"M16-GAP-00279":{"line":278,"offset":47663,"length":161,"previous":"M16-GAP-00278","next":"M16-GAP-00280"},"M16-GAP-00280":{"line":279,"offset":47824,"length":168,"previous":"M16-GAP-00279","next":"M16-GAP-00281"},"M16-GAP-00281":{"line":280,"offset":47992,"length":183,"previous":"M16-GAP-00280","next":"M16-GAP-00282"},"M16-GAP-00282":{"line":281,"offset":48175,"length":175,"previous":"M16-GAP-00281","next":"M16-GAP-00283"},"M16-GAP-00283":{"line":282,"offset":48350,"length":164,"previous":"M16-GAP-00282","next":"M16-GAP-00284"},"M16-GAP-00284":{"line":283,"offset":48514,"length":167,"previous":"M16-GAP-00283","next":"M16-GAP-00285"},"M16-GAP-00285":{"line":284,"offset":48681,"length":164,"previous":"M16-GAP-00284","next":"M16-GAP-00286"},"M16-GAP-00286":{"line":285,"offset":48845,"length":164,"previous":"M16-GAP-00285","next":"M16-GAP-00287"},"M16-GAP-00287":{"line":286,"offset":49009,"length":170,"previous":"M16-GAP-00286","next":"M16-GAP-00288"},"M16-GAP-00288":{"line":287,"offset":49179,"length":168,"previous":"M16-GAP-00287","next":"M16-GAP-00289"},"M16-GAP-00289":{"line":288,"offset":49347,"length":165,"previous":"M16-GAP-00288","next":"M16-GAP-00290"},"M16-GAP-00290":{"line":289,"offset":49512,"length":165,"previous":"M16-GAP-00289","next":"M16-GAP-00291"},"M16-GAP-00291":{"line":290,"offset":49677,"length":171,"previous":"M16-GAP-00290","next":"M16-GAP-00292"},"M16-GAP-00292":{"line":291,"offset":49848,"length":169,"previous":"M16-GAP-00291","next":"M16-GAP-00293"},"M16-GAP-00293":{"line":292,"offset":50017,"length":171,"previous":"M16-GAP-00292","next":"M16-GAP-00294"},"M16-GAP-00294":{"line":293,"offset":50188,"length":169,"previous":"M16-GAP-00293","next":"M16-GAP-00295"},"M16-GAP-00295":{"line":294,"offset":50357,"length":176,"previous":"M16-GAP-00294","next":"M16-GAP-00296"},"M16-GAP-00296":{"line":295,"offset":50533,"length":175,"previous":"M16-GAP-00295","next":"M16-GAP-00297"},"M16-GAP-00297":{"line":296,"offset":50708,"length":169,"previous":"M16-GAP-00296","next":"M16-GAP-00298"},"M16-GAP-00298":{"line":297,"offset":50877,"length":167,"previous":"M16-GAP-00297","next":"M16-GAP-00299"},"M16-GAP-00299":{"line":298,"offset":51044,"length":170,"previous":"M16-GAP-00298","next":"M16-GAP-00300"},"M16-GAP-00300":{"line":299,"offset":51214,"length":167,"previous":"M16-GAP-00299","next":"M16-GAP-00301"},"M16-GAP-00301":{"line":300,"offset":51381,"length":172,"previous":"M16-GAP-00300","next":"M16-GAP-00302"},"M16-GAP-00302":{"line":301,"offset":51553,"length":181,"previous":"M16-GAP-00301","next":"M16-GAP-00303"},"M16-GAP-00303":{"line":302,"offset":51734,"length":180,"previous":"M16-GAP-00302","next":"M16-GAP-00304"},"M16-GAP-00304":{"line":303,"offset":51914,"length":171,"previous":"M16-GAP-00303","next":"M16-GAP-00305"},"M16-GAP-00305":{"line":304,"offset":52085,"length":171,"previous":"M16-GAP-00304","next":"M16-GAP-00306"},"M16-GAP-00306":{"line":305,"offset":52256,"length":175,"previous":"M16-GAP-00305","next":"M16-GAP-00307"},"M16-GAP-00307":{"line":306,"offset":52431,"length":170,"previous":"M16-GAP-00306","next":"M16-GAP-00308"},"M16-GAP-00308":{"line":307,"offset":52601,"length":171,"previous":"M16-GAP-00307","next":"M16-GAP-00309"},"M16-GAP-00309":{"line":308,"offset":52772,"length":169,"previous":"M16-GAP-00308","next":"M16-GAP-00310"},"M16-GAP-00310":{"line":309,"offset":52941,"length":170,"previous":"M16-GAP-00309","next":"M16-GAP-00311"},"M16-GAP-00311":{"line":310,"offset":53111,"length":171,"previous":"M16-GAP-00310","next":"M16-GAP-00312"},"M16-GAP-00312":{"line":311,"offset":53282,"length":173,"previous":"M16-GAP-00311","next":"M16-GAP-00313"},"M16-GAP-00313":{"line":312,"offset":53455,"length":165,"previous":"M16-GAP-00312","next":"M16-GAP-00314"},"M16-GAP-00314":{"line":313,"offset":53620,"length":167,"previous":"M16-GAP-00313","next":"M16-GAP-00315"},"M16-GAP-00315":{"line":314,"offset":53787,"length":168,"previous":"M16-GAP-00314","next":"M16-GAP-00316"},"M16-GAP-00316":{"line":315,"offset":53955,"length":179,"previous":"M16-GAP-00315","next":"M16-GAP-00317"},"M16-GAP-00317":{"line":316,"offset":54134,"length":166,"previous":"M16-GAP-00316","next":"M16-GAP-00318"},"M16-GAP-00318":{"line":317,"offset":54300,"length":175,"previous":"M16-GAP-00317","next":"M16-GAP-00319"},"M16-GAP-00319":{"line":318,"offset":54475,"length":171,"previous":"M16-GAP-00318","next":"M16-GAP-00320"},"M16-GAP-00320":{"line":319,"offset":54646,"length":172,"previous":"M16-GAP-00319","next":"M16-GAP-00321"},"M16-GAP-00321":{"line":320,"offset":54818,"length":176,"previous":"M16-GAP-00320","next":"M16-GAP-00322"},"M16-GAP-00322":{"line":321,"offset":54994,"length":170,"previous":"M16-GAP-00321","next":"M16-GAP-00323"},"M16-GAP-00323":{"line":322,"offset":55164,"length":171,"previous":"M16-GAP-00322","next":"M16-GAP-00324"},"M16-GAP-00324":{"line":323,"offset":55335,"length":173,"previous":"M16-GAP-00323","next":"M16-GAP-00325"},"M16-GAP-00325":{"line":324,"offset":55508,"length":168,"previous":"M16-GAP-00324","next":"M16-GAP-00326"},"M16-GAP-00326":{"line":325,"offset":55676,"length":168,"previous":"M16-GAP-00325","next":"M16-GAP-00327"},"M16-GAP-00327":{"line":326,"offset":55844,"length":170,"previous":"M16-GAP-00326","next":"M16-GAP-00328"},"M16-GAP-00328":{"line":327,"offset":56014,"length":172,"previous":"M16-GAP-00327","next":"M16-GAP-00329"},"M16-GAP-00329":{"line":328,"offset":56186,"length":176,"previous":"M16-GAP-00328","next":"M16-GAP-00330"},"M16-GAP-00330":{"line":329,"offset":56362,"length":167,"previous":"M16-GAP-00329","next":"M16-GAP-00331"},"M16-GAP-00331":{"line":330,"offset":56529,"length":174,"previous":"M16-GAP-00330","next":"M16-GAP-00332"},"M16-GAP-00332":{"line":331,"offset":56703,"length":166,"previous":"M16-GAP-00331","next":"M16-GAP-00333"},"M16-GAP-00333":{"line":332,"offset":56869,"length":169,"previous":"M16-GAP-00332","next":"M16-GAP-00334"},"M16-GAP-00334":{"line":333,"offset":57038,"length":168,"previous":"M16-GAP-00333","next":"M16-GAP-00335"},"M16-GAP-00335":{"line":334,"offset":57206,"length":168,"previous":"M16-GAP-00334","next":"M16-GAP-00336"},"M16-GAP-00336":{"line":335,"offset":57374,"length":171,"previous":"M16-GAP-00335","next":"M16-GAP-00337"},"M16-GAP-00337":{"line":336,"offset":57545,"length":171,"previous":"M16-GAP-00336","next":"M16-GAP-00338"},"M16-GAP-00338":{"line":337,"offset":57716,"length":180,"previous":"M16-GAP-00337","next":"M16-GAP-00339"},"M16-GAP-00339":{"line":338,"offset":57896,"length":174,"previous":"M16-GAP-00338","next":"M16-GAP-00340"},"M16-GAP-00340":{"line":339,"offset":58070,"length":169,"previous":"M16-GAP-00339","next":"M16-GAP-00341"},"M16-GAP-00341":{"line":340,"offset":58239,"length":166,"previous":"M16-GAP-00340","next":"M16-GAP-00342"},"M16-GAP-00342":{"line":341,"offset":58405,"length":182,"previous":"M16-GAP-00341","next":"M16-GAP-00343"},"M16-GAP-00343":{"line":342,"offset":58587,"length":174,"previous":"M16-GAP-00342","next":"M16-GAP-00344"},"M16-GAP-00344":{"line":343,"offset":58761,"length":173,"previous":"M16-GAP-00343","next":"M16-GAP-00345"},"M16-GAP-00345":{"line":344,"offset":58934,"length":177,"previous":"M16-GAP-00344","next":"M16-GAP-00346"},"M16-GAP-00346":{"line":345,"offset":59111,"length":168,"previous":"M16-GAP-00345","next":"M16-GAP-00347"},"M16-GAP-00347":{"line":346,"offset":59279,"length":180,"previous":"M16-GAP-00346","next":"M16-GAP-00348"},"M16-GAP-00348":{"line":347,"offset":59459,"length":172,"previous":"M16-GAP-00347","next":"M16-GAP-00349"},"M16-GAP-00349":{"line":348,"offset":59631,"length":170,"previous":"M16-GAP-00348","next":"M16-GAP-00350"},"M16-GAP-00350":{"line":349,"offset":59801,"length":167,"previous":"M16-GAP-00349","next":"M16-GAP-00351"},"M16-GAP-00351":{"line":350,"offset":59968,"length":173,"previous":"M16-GAP-00350","next":"M16-GAP-00352"},"M16-GAP-00352":{"line":351,"offset":60141,"length":167,"previous":"M16-GAP-00351","next":"M16-GAP-00353"},"M16-GAP-00353":{"line":352,"offset":60308,"length":171,"previous":"M16-GAP-00352","next":"M16-GAP-00354"},"M16-GAP-00354":{"line":353,"offset":60479,"length":171,"previous":"M16-GAP-00353","next":"M16-GAP-00355"},"M16-GAP-00355":{"line":354,"offset":60650,"length":177,"previous":"M16-GAP-00354","next":"M16-GAP-00356"},"M16-GAP-00356":{"line":355,"offset":60827,"length":167,"previous":"M16-GAP-00355","next":"M16-GAP-00357"},"M16-GAP-00357":{"line":356,"offset":60994,"length":164,"previous":"M16-GAP-00356","next":"M16-GAP-00358"},"M16-GAP-00358":{"line":357,"offset":61158,"length":183,"previous":"M16-GAP-00357","next":"M16-GAP-00359"},"M16-GAP-00359":{"line":358,"offset":61341,"length":160,"previous":"M16-GAP-00358","next":"M16-GAP-00360"},"M16-GAP-00360":{"line":359,"offset":61501,"length":168,"previous":"M16-GAP-00359","next":"M16-GAP-00361"},"M16-GAP-00361":{"line":360,"offset":61669,"length":164,"previous":"M16-GAP-00360","next":"M16-GAP-00362"},"M16-GAP-00362":{"line":361,"offset":61833,"length":169,"previous":"M16-GAP-00361","next":"M16-GAP-00363"},"M16-GAP-00363":{"line":362,"offset":62002,"length":170,"previous":"M16-GAP-00362","next":"M16-GAP-00364"},"M16-GAP-00364":{"line":363,"offset":62172,"length":162,"previous":"M16-GAP-00363","next":"M16-GAP-00365"},"M16-GAP-00365":{"line":364,"offset":62334,"length":162,"previous":"M16-GAP-00364","next":"M16-GAP-00366"},"M16-GAP-00366":{"line":365,"offset":62496,"length":166,"previous":"M16-GAP-00365","next":"M16-GAP-00367"},"M16-GAP-00367":{"line":366,"offset":62662,"length":166,"previous":"M16-GAP-00366","next":"M16-GAP-00368"},"M16-GAP-00368":{"line":367,"offset":62828,"length":169,"previous":"M16-GAP-00367","next":"M16-GAP-00369"},"M16-GAP-00369":{"line":368,"offset":62997,"length":170,"previous":"M16-GAP-00368","next":"M16-GAP-00370"},"M16-GAP-00370":{"line":369,"offset":63167,"length":168,"previous":"M16-GAP-00369","next":"M16-GAP-00371"},"M16-GAP-00371":{"line":370,"offset":63335,"length":171,"previous":"M16-GAP-00370","next":"M16-GAP-00372"},"M16-GAP-00372":{"line":371,"offset":63506,"length":164,"previous":"M16-GAP-00371","next":"M16-GAP-00373"},"M16-GAP-00373":{"line":372,"offset":63670,"length":166,"previous":"M16-GAP-00372","next":"M16-GAP-00374"},"M16-GAP-00374":{"line":373,"offset":63836,"length":165,"previous":"M16-GAP-00373","next":"M16-GAP-00375"},"M16-GAP-00375":{"line":374,"offset":64001,"length":165,"previous":"M16-GAP-00374","next":"M16-GAP-00376"},"M16-GAP-00376":{"line":375,"offset":64166,"length":172,"previous":"M16-GAP-00375","next":"M16-GAP-00377"},"M16-GAP-00377":{"line":376,"offset":64338,"length":174,"previous":"M16-GAP-00376","next":"M16-GAP-00378"},"M16-GAP-00378":{"line":377,"offset":64512,"length":175,"previous":"M16-GAP-00377","next":"M16-GAP-00379"},"M16-GAP-00379":{"line":378,"offset":64687,"length":179,"previous":"M16-GAP-00378","next":"M16-GAP-00380"},"M16-GAP-00380":{"line":379,"offset":64866,"length":176,"previous":"M16-GAP-00379","next":"M16-GAP-00381"},"M16-GAP-00381":{"line":380,"offset":65042,"length":168,"previous":"M16-GAP-00380","next":"M16-GAP-00382"},"M16-GAP-00382":{"line":381,"offset":65210,"length":174,"previous":"M16-GAP-00381","next":"M16-GAP-00383"},"M16-GAP-00383":{"line":382,"offset":65384,"length":168,"previous":"M16-GAP-00382","next":"M16-GAP-00384"},"M16-GAP-00384":{"line":383,"offset":65552,"length":172,"previous":"M16-GAP-00383","next":"M16-GAP-00385"},"M16-GAP-00385":{"line":384,"offset":65724,"length":175,"previous":"M16-GAP-00384","next":"M16-GAP-00386"},"M16-GAP-00386":{"line":385,"offset":65899,"length":181,"previous":"M16-GAP-00385","next":"M16-GAP-00387"},"M16-GAP-00387":{"line":386,"offset":66080,"length":184,"previous":"M16-GAP-00386","next":"M16-GAP-00388"},"M16-GAP-00388":{"line":387,"offset":66264,"length":184,"previous":"M16-GAP-00387","next":"M16-GAP-00389"},"M16-GAP-00389":{"line":388,"offset":66448,"length":175,"previous":"M16-GAP-00388","next":"M16-GAP-00390"},"M16-GAP-00390":{"line":389,"offset":66623,"length":178,"previous":"M16-GAP-00389","next":"M16-GAP-00391"},"M16-GAP-00391":{"line":390,"offset":66801,"length":172,"previous":"M16-GAP-00390","next":"M16-GAP-00392"},"M16-GAP-00392":{"line":391,"offset":66973,"length":169,"previous":"M16-GAP-00391","next":"M16-GAP-00393"},"M16-GAP-00393":{"line":392,"offset":67142,"length":181,"previous":"M16-GAP-00392","next":"M16-GAP-00394"},"M16-GAP-00394":{"line":393,"offset":67323,"length":179,"previous":"M16-GAP-00393","next":"M16-GAP-00395"},"M16-GAP-00395":{"line":394,"offset":67502,"length":170,"previous":"M16-GAP-00394","next":"M16-GAP-00396"},"M16-GAP-00396":{"line":395,"offset":67672,"length":175,"previous":"M16-GAP-00395","next":"M16-GAP-00397"},"M16-GAP-00397":{"line":396,"offset":67847,"length":178,"previous":"M16-GAP-00396","next":"M16-GAP-00398"},"M16-GAP-00398":{"line":397,"offset":68025,"length":184,"previous":"M16-GAP-00397","next":"M16-GAP-00399"},"M16-GAP-00399":{"line":398,"offset":68209,"length":186,"previous":"M16-GAP-00398","next":"M16-GAP-00400"},"M16-GAP-00400":{"line":399,"offset":68395,"length":164,"previous":"M16-GAP-00399","next":"M16-GAP-00401"},"M16-GAP-00401":{"line":400,"offset":68559,"length":174,"previous":"M16-GAP-00400","next":"M16-GAP-00402"},"M16-GAP-00402":{"line":401,"offset":68733,"length":165,"previous":"M16-GAP-00401","next":"M16-GAP-00403"},"M16-GAP-00403":{"line":402,"offset":68898,"length":164,"previous":"M16-GAP-00402","next":"M16-GAP-00404"},"M16-GAP-00404":{"line":403,"offset":69062,"length":169,"previous":"M16-GAP-00403","next":"M16-GAP-00405"},"M16-GAP-00405":{"line":404,"offset":69231,"length":165,"previous":"M16-GAP-00404","next":"M16-GAP-00406"},"M16-GAP-00406":{"line":405,"offset":69396,"length":168,"previous":"M16-GAP-00405","next":"M16-GAP-00407"},"M16-GAP-00407":{"line":406,"offset":69564,"length":169,"previous":"M16-GAP-00406","next":"M16-GAP-00408"},"M16-GAP-00408":{"line":407,"offset":69733,"length":171,"previous":"M16-GAP-00407","next":"M16-GAP-00409"},"M16-GAP-00409":{"line":408,"offset":69904,"length":167,"previous":"M16-GAP-00408","next":"M16-GAP-00410"},"M16-GAP-00410":{"line":409,"offset":70071,"length":168,"previous":"M16-GAP-00409","next":"M16-GAP-00411"},"M16-GAP-00411":{"line":410,"offset":70239,"length":172,"previous":"M16-GAP-00410","next":"M16-GAP-00412"},"M16-GAP-00412":{"line":411,"offset":70411,"length":174,"previous":"M16-GAP-00411","next":"M16-GAP-00413"},"M16-GAP-00413":{"line":412,"offset":70585,"length":177,"previous":"M16-GAP-00412","next":"M16-GAP-00414"},"M16-GAP-00414":{"line":413,"offset":70762,"length":175,"previous":"M16-GAP-00413","next":"M16-GAP-00415"},"M16-GAP-00415":{"line":414,"offset":70937,"length":177,"previous":"M16-GAP-00414","next":"M16-GAP-00416"},"M16-GAP-00416":{"line":415,"offset":71114,"length":174,"previous":"M16-GAP-00415","next":"M16-GAP-00417"},"M16-GAP-00417":{"line":416,"offset":71288,"length":177,"previous":"M16-GAP-00416","next":"M16-GAP-00418"},"M16-GAP-00418":{"line":417,"offset":71465,"length":180,"previous":"M16-GAP-00417","next":"M16-GAP-00419"},"M16-GAP-00419":{"line":418,"offset":71645,"length":176,"previous":"M16-GAP-00418","next":"M16-GAP-00420"},"M16-GAP-00420":{"line":419,"offset":71821,"length":183,"previous":"M16-GAP-00419","next":"M16-GAP-00421"},"M16-GAP-00421":{"line":420,"offset":72004,"length":180,"previous":"M16-GAP-00420","next":"M16-GAP-00422"},"M16-GAP-00422":{"line":421,"offset":72184,"length":171,"previous":"M16-GAP-00421","next":"M16-GAP-00423"},"M16-GAP-00423":{"line":422,"offset":72355,"length":165,"previous":"M16-GAP-00422","next":"M16-GAP-00424"},"M16-GAP-00424":{"line":423,"offset":72520,"length":164,"previous":"M16-GAP-00423","next":"M16-GAP-00425"},"M16-GAP-00425":{"line":424,"offset":72684,"length":169,"previous":"M16-GAP-00424","next":"M16-GAP-00426"},"M16-GAP-00426":{"line":425,"offset":72853,"length":163,"previous":"M16-GAP-00425","next":"M16-GAP-00427"},"M16-GAP-00427":{"line":426,"offset":73016,"length":173,"previous":"M16-GAP-00426","next":"M16-GAP-00428"},"M16-GAP-00428":{"line":427,"offset":73189,"length":165,"previous":"M16-GAP-00427","next":"M16-GAP-00429"},"M16-GAP-00429":{"line":428,"offset":73354,"length":166,"previous":"M16-GAP-00428","next":"M16-GAP-00430"},"M16-GAP-00430":{"line":429,"offset":73520,"length":173,"previous":"M16-GAP-00429","next":"M16-GAP-00431"},"M16-GAP-00431":{"line":430,"offset":73693,"length":172,"previous":"M16-GAP-00430","next":"M16-GAP-00432"},"M16-GAP-00432":{"line":431,"offset":73865,"length":165,"previous":"M16-GAP-00431","next":"M16-GAP-00433"},"M16-GAP-00433":{"line":432,"offset":74030,"length":181,"previous":"M16-GAP-00432","next":"M16-GAP-00434"},"M16-GAP-00434":{"line":433,"offset":74211,"length":165,"previous":"M16-GAP-00433","next":"M16-GAP-00435"},"M16-GAP-00435":{"line":434,"offset":74376,"length":167,"previous":"M16-GAP-00434","next":"M16-GAP-00436"},"M16-GAP-00436":{"line":435,"offset":74543,"length":163,"previous":"M16-GAP-00435","next":"M16-GAP-00437"},"M16-GAP-00437":{"line":436,"offset":74706,"length":164,"previous":"M16-GAP-00436","next":"M16-GAP-00438"},"M16-GAP-00438":{"line":437,"offset":74870,"length":176,"previous":"M16-GAP-00437","next":"M16-GAP-00439"},"M16-GAP-00439":{"line":438,"offset":75046,"length":169,"previous":"M16-GAP-00438","next":"M16-GAP-00440"},"M16-GAP-00440":{"line":439,"offset":75215,"length":169,"previous":"M16-GAP-00439","next":"M16-GAP-00441"},"M16-GAP-00441":{"line":440,"offset":75384,"length":170,"previous":"M16-GAP-00440","next":"M16-GAP-00442"},"M16-GAP-00442":{"line":441,"offset":75554,"length":167,"previous":"M16-GAP-00441","next":"M16-GAP-00443"},"M16-GAP-00443":{"line":442,"offset":75721,"length":172,"previous":"M16-GAP-00442","next":"M16-GAP-00444"},"M16-GAP-00444":{"line":443,"offset":75893,"length":167,"previous":"M16-GAP-00443","next":"M16-GAP-00445"},"M16-GAP-00445":{"line":444,"offset":76060,"length":183,"previous":"M16-GAP-00444","next":"M16-GAP-00446"},"M16-GAP-00446":{"line":445,"offset":76243,"length":181,"previous":"M16-GAP-00445","next":"M16-GAP-00447"},"M16-GAP-00447":{"line":446,"offset":76424,"length":166,"previous":"M16-GAP-00446","next":"M16-GAP-00448"},"M16-GAP-00448":{"line":447,"offset":76590,"length":178,"previous":"M16-GAP-00447","next":"M16-GAP-00449"},"M16-GAP-00449":{"line":448,"offset":76768,"length":168,"previous":"M16-GAP-00448","next":"M16-GAP-00450"},"M16-GAP-00450":{"line":449,"offset":76936,"length":184,"previous":"M16-GAP-00449","next":"M16-GAP-00451"},"M16-GAP-00451":{"line":450,"offset":77120,"length":185,"previous":"M16-GAP-00450","next":"M16-GAP-00452"},"M16-GAP-00452":{"line":451,"offset":77305,"length":181,"previous":"M16-GAP-00451","next":"M16-GAP-00453"},"M16-GAP-00453":{"line":452,"offset":77486,"length":171,"previous":"M16-GAP-00452","next":"M16-GAP-00454"},"M16-GAP-00454":{"line":453,"offset":77657,"length":175,"previous":"M16-GAP-00453","next":"M16-GAP-00455"},"M16-GAP-00455":{"line":454,"offset":77832,"length":169,"previous":"M16-GAP-00454","next":"M16-GAP-00456"},"M16-GAP-00456":{"line":455,"offset":78001,"length":186,"previous":"M16-GAP-00455","next":"M16-GAP-00457"},"M16-GAP-00457":{"line":456,"offset":78187,"length":188,"previous":"M16-GAP-00456","next":"M16-GAP-00458"},"M16-GAP-00458":{"line":457,"offset":78375,"length":186,"previous":"M16-GAP-00457","next":"M16-GAP-00459"},"M16-GAP-00459":{"line":458,"offset":78561,"length":175,"previous":"M16-GAP-00458","next":"M16-GAP-00460"},"M16-GAP-00460":{"line":459,"offset":78736,"length":177,"previous":"M16-GAP-00459","next":"M16-GAP-00461"},"M16-GAP-00461":{"line":460,"offset":78913,"length":170,"previous":"M16-GAP-00460","next":"M16-GAP-00462"},"M16-GAP-00462":{"line":461,"offset":79083,"length":172,"previous":"M16-GAP-00461","next":"M16-GAP-00463"},"M16-GAP-00463":{"line":462,"offset":79255,"length":171,"previous":"M16-GAP-00462","next":"M16-GAP-00464"},"M16-GAP-00464":{"line":463,"offset":79426,"length":165,"previous":"M16-GAP-00463","next":"M16-GAP-00465"},"M16-GAP-00465":{"line":464,"offset":79591,"length":163,"previous":"M16-GAP-00464","next":"M16-GAP-00466"},"M16-GAP-00466":{"line":465,"offset":79754,"length":171,"previous":"M16-GAP-00465","next":"M16-GAP-00467"},"M16-GAP-00467":{"line":466,"offset":79925,"length":161,"previous":"M16-GAP-00466","next":"M16-GAP-00468"},"M16-GAP-00468":{"line":467,"offset":80086,"length":166,"previous":"M16-GAP-00467","next":"M16-GAP-00469"},"M16-GAP-00469":{"line":468,"offset":80252,"length":171,"previous":"M16-GAP-00468","next":"M16-GAP-00470"},"M16-GAP-00470":{"line":469,"offset":80423,"length":164,"previous":"M16-GAP-00469","next":"M16-GAP-00471"},"M16-GAP-00471":{"line":470,"offset":80587,"length":169,"previous":"M16-GAP-00470","next":"M16-GAP-00472"},"M16-GAP-00472":{"line":471,"offset":80756,"length":172,"previous":"M16-GAP-00471","next":"M16-GAP-00473"},"M16-GAP-00473":{"line":472,"offset":80928,"length":161,"previous":"M16-GAP-00472","next":"M16-GAP-00474"},"M16-GAP-00474":{"line":473,"offset":81089,"length":169,"previous":"M16-GAP-00473","next":"M16-GAP-00475"},"M16-GAP-00475":{"line":474,"offset":81258,"length":176,"previous":"M16-GAP-00474","next":"M16-GAP-00476"},"M16-GAP-00476":{"line":475,"offset":81434,"length":180,"previous":"M16-GAP-00475","next":"M16-GAP-00477"},"M16-GAP-00477":{"line":476,"offset":81614,"length":160,"previous":"M16-GAP-00476","next":"M16-GAP-00478"},"M16-GAP-00478":{"line":477,"offset":81774,"length":184,"previous":"M16-GAP-00477","next":"M16-GAP-00479"},"M16-GAP-00479":{"line":478,"offset":81958,"length":183,"previous":"M16-GAP-00478","next":"M16-GAP-00480"},"M16-GAP-00480":{"line":479,"offset":82141,"length":183,"previous":"M16-GAP-00479","next":"M16-GAP-00481"},"M16-GAP-00481":{"line":480,"offset":82324,"length":182,"previous":"M16-GAP-00480","next":"M16-GAP-00482"},"M16-GAP-00482":{"line":481,"offset":82506,"length":181,"previous":"M16-GAP-00481","next":"M16-GAP-00483"},"M16-GAP-00483":{"line":482,"offset":82687,"length":167,"previous":"M16-GAP-00482","next":"M16-GAP-00484"},"M16-GAP-00484":{"line":483,"offset":82854,"length":163,"previous":"M16-GAP-00483","next":"M16-GAP-00485"},"M16-GAP-00485":{"line":484,"offset":83017,"length":167,"previous":"M16-GAP-00484","next":"M16-GAP-00486"},"M16-GAP-00486":{"line":485,"offset":83184,"length":168,"previous":"M16-GAP-00485","next":"M16-GAP-00487"},"M16-GAP-00487":{"line":486,"offset":83352,"length":170,"previous":"M16-GAP-00486","next":"M16-GAP-00488"},"M16-GAP-00488":{"line":487,"offset":83522,"length":175,"previous":"M16-GAP-00487","next":"M16-GAP-00489"},"M16-GAP-00489":{"line":488,"offset":83697,"length":168,"previous":"M16-GAP-00488","next":"M16-GAP-00490"},"M16-GAP-00490":{"line":489,"offset":83865,"length":168,"previous":"M16-GAP-00489","next":"M16-GAP-00491"},"M16-GAP-00491":{"line":490,"offset":84033,"length":167,"previous":"M16-GAP-00490","next":"M16-GAP-00492"},"M16-GAP-00492":{"line":491,"offset":84200,"length":172,"previous":"M16-GAP-00491","next":"M16-GAP-00493"},"M16-GAP-00493":{"line":492,"offset":84372,"length":170,"previous":"M16-GAP-00492","next":"M16-GAP-00494"},"M16-GAP-00494":{"line":493,"offset":84542,"length":167,"previous":"M16-GAP-00493","next":"M16-GAP-00495"},"M16-GAP-00495":{"line":494,"offset":84709,"length":171,"previous":"M16-GAP-00494","next":"M16-GAP-00496"},"M16-GAP-00496":{"line":495,"offset":84880,"length":165,"previous":"M16-GAP-00495","next":"M16-GAP-00497"},"M16-GAP-00497":{"line":496,"offset":85045,"length":167,"previous":"M16-GAP-00496","next":"M16-GAP-00498"},"M16-GAP-00498":{"line":497,"offset":85212,"length":169,"previous":"M16-GAP-00497","next":"M16-GAP-00499"},"M16-GAP-00499":{"line":498,"offset":85381,"length":175,"previous":"M16-GAP-00498","next":"M16-GAP-00500"},"M16-GAP-00500":{"line":499,"offset":85556,"length":163,"previous":"M16-GAP-00499","next":"M16-GAP-00501"},"M16-GAP-00501":{"line":500,"offset":85719,"length":170,"previous":"M16-GAP-00500","next":"M16-GAP-00502"},"M16-GAP-00502":{"line":501,"offset":85889,"length":168,"previous":"M16-GAP-00501","next":"M16-GAP-00503"},"M16-GAP-00503":{"line":502,"offset":86057,"length":170,"previous":"M16-GAP-00502","next":"M16-GAP-00504"},"M16-GAP-00504":{"line":503,"offset":86227,"length":161,"previous":"M16-GAP-00503","next":"M16-GAP-00505"},"M16-GAP-00505":{"line":504,"offset":86388,"length":172,"previous":"M16-GAP-00504","next":"M16-GAP-00506"},"M16-GAP-00506":{"line":505,"offset":86560,"length":174,"previous":"M16-GAP-00505","next":"M16-GAP-00507"},"M16-GAP-00507":{"line":506,"offset":86734,"length":162,"previous":"M16-GAP-00506","next":"M16-GAP-00508"},"M16-GAP-00508":{"line":507,"offset":86896,"length":166,"previous":"M16-GAP-00507","next":"M16-GAP-00509"},"M16-GAP-00509":{"line":508,"offset":87062,"length":173,"previous":"M16-GAP-00508","next":"M16-GAP-00510"},"M16-GAP-00510":{"line":509,"offset":87235,"length":167,"previous":"M16-GAP-00509","next":"M16-GAP-00511"},"M16-GAP-00511":{"line":510,"offset":87402,"length":167,"previous":"M16-GAP-00510","next":"M16-GAP-00512"},"M16-GAP-00512":{"line":511,"offset":87569,"length":168,"previous":"M16-GAP-00511","next":"M16-GAP-00513"},"M16-GAP-00513":{"line":512,"offset":87737,"length":168,"previous":"M16-GAP-00512","next":"M16-GAP-00514"},"M16-GAP-00514":{"line":513,"offset":87905,"length":171,"previous":"M16-GAP-00513","next":"M16-GAP-00515"},"M16-GAP-00515":{"line":514,"offset":88076,"length":186,"previous":"M16-GAP-00514","next":"M16-GAP-00516"},"M16-GAP-00516":{"line":515,"offset":88262,"length":184,"previous":"M16-GAP-00515","next":"M16-GAP-00517"},"M16-GAP-00517":{"line":516,"offset":88446,"length":172,"previous":"M16-GAP-00516","next":"M16-GAP-00518"},"M16-GAP-00518":{"line":517,"offset":88618,"length":171,"previous":"M16-GAP-00517","next":"M16-GAP-00519"},"M16-GAP-00519":{"line":518,"offset":88789,"length":164,"previous":"M16-GAP-00518","next":"M16-GAP-00520"},"M16-GAP-00520":{"line":519,"offset":88953,"length":162,"previous":"M16-GAP-00519","next":"M16-GAP-00521"},"M16-GAP-00521":{"line":520,"offset":89115,"length":167,"previous":"M16-GAP-00520","next":"M16-GAP-00522"},"M16-GAP-00522":{"line":521,"offset":89282,"length":172,"previous":"M16-GAP-00521","next":"M16-GAP-00523"},"M16-GAP-00523":{"line":522,"offset":89454,"length":165,"previous":"M16-GAP-00522","next":"M16-GAP-00524"},"M16-GAP-00524":{"line":523,"offset":89619,"length":170,"previous":"M16-GAP-00523","next":"M16-GAP-00525"},"M16-GAP-00525":{"line":524,"offset":89789,"length":173,"previous":"M16-GAP-00524","next":"M16-GAP-00526"},"M16-GAP-00526":{"line":525,"offset":89962,"length":161,"previous":"M16-GAP-00525","next":"M16-GAP-00527"},"M16-GAP-00527":{"line":526,"offset":90123,"length":175,"previous":"M16-GAP-00526","next":"M16-GAP-00528"},"M16-GAP-00528":{"line":527,"offset":90298,"length":168,"previous":"M16-GAP-00527","next":"M16-GAP-00529"},"M16-GAP-00529":{"line":528,"offset":90466,"length":169,"previous":"M16-GAP-00528","next":"M16-GAP-00530"},"M16-GAP-00530":{"line":529,"offset":90635,"length":169,"previous":"M16-GAP-00529","next":"M16-GAP-00531"},"M16-GAP-00531":{"line":530,"offset":90804,"length":171,"previous":"M16-GAP-00530","next":"M16-GAP-00532"},"M16-GAP-00532":{"line":531,"offset":90975,"length":176,"previous":"M16-GAP-00531","next":"M16-GAP-00533"},"M16-GAP-00533":{"line":532,"offset":91151,"length":169,"previous":"M16-GAP-00532","next":"M16-GAP-00534"},"M16-GAP-00534":{"line":533,"offset":91320,"length":171,"previous":"M16-GAP-00533","next":"M16-GAP-00535"},"M16-GAP-00535":{"line":534,"offset":91491,"length":166,"previous":"M16-GAP-00534","next":"M16-GAP-00536"},"M16-GAP-00536":{"line":535,"offset":91657,"length":178,"previous":"M16-GAP-00535","next":"M16-GAP-00537"},"M16-GAP-00537":{"line":536,"offset":91835,"length":180,"previous":"M16-GAP-00536","next":"M16-GAP-00538"},"M16-GAP-00538":{"line":537,"offset":92015,"length":163,"previous":"M16-GAP-00537","next":"M16-GAP-00539"},"M16-GAP-00539":{"line":538,"offset":92178,"length":167,"previous":"M16-GAP-00538","next":"M16-GAP-00540"},"M16-GAP-00540":{"line":539,"offset":92345,"length":169,"previous":"M16-GAP-00539","next":"M16-GAP-00541"},"M16-GAP-00541":{"line":540,"offset":92514,"length":174,"previous":"M16-GAP-00540","next":"M16-GAP-00542"},"M16-GAP-00542":{"line":541,"offset":92688,"length":168,"previous":"M16-GAP-00541","next":"M16-GAP-00543"},"M16-GAP-00543":{"line":542,"offset":92856,"length":175,"previous":"M16-GAP-00542","next":"M16-GAP-00544"},"M16-GAP-00544":{"line":543,"offset":93031,"length":170,"previous":"M16-GAP-00543","next":"M16-GAP-00545"},"M16-GAP-00545":{"line":544,"offset":93201,"length":175,"previous":"M16-GAP-00544","next":"M16-GAP-00546"},"M16-GAP-00546":{"line":545,"offset":93376,"length":162,"previous":"M16-GAP-00545","next":"M16-GAP-00547"},"M16-GAP-00547":{"line":546,"offset":93538,"length":171,"previous":"M16-GAP-00546","next":"M16-GAP-00548"},"M16-GAP-00548":{"line":547,"offset":93709,"length":174,"previous":"M16-GAP-00547","next":"M16-GAP-00549"},"M16-GAP-00549":{"line":548,"offset":93883,"length":177,"previous":"M16-GAP-00548","next":"M16-GAP-00550"},"M16-GAP-00550":{"line":549,"offset":94060,"length":169,"previous":"M16-GAP-00549","next":"M16-GAP-00551"},"M16-GAP-00551":{"line":550,"offset":94229,"length":165,"previous":"M16-GAP-00550","next":"M16-GAP-00552"},"M16-GAP-00552":{"line":551,"offset":94394,"length":177,"previous":"M16-GAP-00551","next":"M16-GAP-00553"},"M16-GAP-00553":{"line":552,"offset":94571,"length":177,"previous":"M16-GAP-00552","next":"M16-GAP-00554"},"M16-GAP-00554":{"line":553,"offset":94748,"length":189,"previous":"M16-GAP-00553","next":"M16-GAP-00555"},"M16-GAP-00555":{"line":554,"offset":94937,"length":180,"previous":"M16-GAP-00554","next":"M16-GAP-00556"},"M16-GAP-00556":{"line":555,"offset":95117,"length":185,"previous":"M16-GAP-00555","next":"M16-GAP-00557"},"M16-GAP-00557":{"line":556,"offset":95302,"length":175,"previous":"M16-GAP-00556","next":"M16-GAP-00558"},"M16-GAP-00558":{"line":557,"offset":95477,"length":167,"previous":"M16-GAP-00557","next":"M16-GAP-00559"},"M16-GAP-00559":{"line":558,"offset":95644,"length":158,"previous":"M16-GAP-00558","next":"M16-GAP-00560"},"M16-GAP-00560":{"line":559,"offset":95802,"length":158,"previous":"M16-GAP-00559","next":"M16-GAP-00561"},"M16-GAP-00561":{"line":560,"offset":95960,"length":166,"previous":"M16-GAP-00560","next":"M16-GAP-00562"},"M16-GAP-00562":{"line":561,"offset":96126,"length":163,"previous":"M16-GAP-00561","next":"M16-GAP-00563"},"M16-GAP-00563":{"line":562,"offset":96289,"length":163,"previous":"M16-GAP-00562","next":"M16-GAP-00564"},"M16-GAP-00564":{"line":563,"offset":96452,"length":166,"previous":"M16-GAP-00563","next":"M16-GAP-00565"},"M16-GAP-00565":{"line":564,"offset":96618,"length":167,"previous":"M16-GAP-00564","next":"M16-GAP-00566"},"M16-GAP-00566":{"line":565,"offset":96785,"length":168,"previous":"M16-GAP-00565","next":"M16-GAP-00567"},"M16-GAP-00567":{"line":566,"offset":96953,"length":177,"previous":"M16-GAP-00566","next":"M16-GAP-00568"},"M16-GAP-00568":{"line":567,"offset":97130,"length":177,"previous":"M16-GAP-00567","next":"M16-GAP-00569"},"M16-GAP-00569":{"line":568,"offset":97307,"length":183,"previous":"M16-GAP-00568","next":"M16-GAP-00570"},"M16-GAP-00570":{"line":569,"offset":97490,"length":184,"previous":"M16-GAP-00569","next":"M16-GAP-00571"},"M16-GAP-00571":{"line":570,"offset":97674,"length":180,"previous":"M16-GAP-00570","next":"M16-GAP-00572"},"M16-GAP-00572":{"line":571,"offset":97854,"length":184,"previous":"M16-GAP-00571","next":"M16-GAP-00573"},"M16-GAP-00573":{"line":572,"offset":98038,"length":178,"previous":"M16-GAP-00572","next":"M16-GAP-00574"},"M16-GAP-00574":{"line":573,"offset":98216,"length":182,"previous":"M16-GAP-00573","next":"M16-GAP-00575"},"M16-GAP-00575":{"line":574,"offset":98398,"length":185,"previous":"M16-GAP-00574","next":"M16-GAP-00576"},"M16-GAP-00576":{"line":575,"offset":98583,"length":180,"previous":"M16-GAP-00575","next":"M16-GAP-00577"},"M16-GAP-00577":{"line":576,"offset":98763,"length":178,"previous":"M16-GAP-00576","next":"M16-GAP-00578"},"M16-GAP-00578":{"line":577,"offset":98941,"length":183,"previous":"M16-GAP-00577","next":"M16-GAP-00579"},"M16-GAP-00579":{"line":578,"offset":99124,"length":183,"previous":"M16-GAP-00578","next":"M16-GAP-00580"},"M16-GAP-00580":{"line":579,"offset":99307,"length":182,"previous":"M16-GAP-00579","next":"M16-GAP-00581"},"M16-GAP-00581":{"line":580,"offset":99489,"length":179,"previous":"M16-GAP-00580","next":"M16-GAP-00582"},"M16-GAP-00582":{"line":581,"offset":99668,"length":186,"previous":"M16-GAP-00581","next":"M16-GAP-00583"},"M16-GAP-00583":{"line":582,"offset":99854,"length":186,"previous":"M16-GAP-00582","next":"M16-GAP-00584"},"M16-GAP-00584":{"line":583,"offset":100040,"length":181,"previous":"M16-GAP-00583","next":"M16-GAP-00585"},"M16-GAP-00585":{"line":584,"offset":100221,"length":183,"previous":"M16-GAP-00584","next":"M16-GAP-00586"},"M16-GAP-00586":{"line":585,"offset":100404,"length":175,"previous":"M16-GAP-00585","next":"M16-GAP-00587"},"M16-GAP-00587":{"line":586,"offset":100579,"length":178,"previous":"M16-GAP-00586","next":"M16-GAP-00588"},"M16-GAP-00588":{"line":587,"offset":100757,"length":171,"previous":"M16-GAP-00587","next":"M16-GAP-00589"},"M16-GAP-00589":{"line":588,"offset":100928,"length":175,"previous":"M16-GAP-00588","next":"M16-GAP-00590"},"M16-GAP-00590":{"line":589,"offset":101103,"length":173,"previous":"M16-GAP-00589","next":"M16-GAP-00591"},"M16-GAP-00591":{"line":590,"offset":101276,"length":177,"previous":"M16-GAP-00590","next":"M16-GAP-00592"},"M16-GAP-00592":{"line":591,"offset":101453,"length":174,"previous":"M16-GAP-00591","next":"M16-GAP-00593"},"M16-GAP-00593":{"line":592,"offset":101627,"length":181,"previous":"M16-GAP-00592","next":"M16-GAP-00594"},"M16-GAP-00594":{"line":593,"offset":101808,"length":183,"previous":"M16-GAP-00593","next":"M16-GAP-00595"},"M16-GAP-00595":{"line":594,"offset":101991,"length":189,"previous":"M16-GAP-00594","next":"M16-GAP-00596"},"M16-GAP-00596":{"line":595,"offset":102180,"length":186,"previous":"M16-GAP-00595","next":"M16-GAP-00597"},"M16-GAP-00597":{"line":596,"offset":102366,"length":182,"previous":"M16-GAP-00596","next":"M16-GAP-00598"},"M16-GAP-00598":{"line":597,"offset":102548,"length":179,"previous":"M16-GAP-00597","next":"M16-GAP-00599"},"M16-GAP-00599":{"line":598,"offset":102727,"length":171,"previous":"M16-GAP-00598","next":"M16-GAP-00600"},"M16-GAP-00600":{"line":599,"offset":102898,"length":168,"previous":"M16-GAP-00599","next":"M16-GAP-00601"},"M16-GAP-00601":{"line":600,"offset":103066,"length":172,"previous":"M16-GAP-00600","next":"M16-GAP-00602"},"M16-GAP-00602":{"line":601,"offset":103238,"length":171,"previous":"M16-GAP-00601","next":"M16-GAP-00603"},"M16-GAP-00603":{"line":602,"offset":103409,"length":169,"previous":"M16-GAP-00602","next":"M16-GAP-00604"},"M16-GAP-00604":{"line":603,"offset":103578,"length":162,"previous":"M16-GAP-00603","next":"M16-GAP-00605"},"M16-GAP-00605":{"line":604,"offset":103740,"length":162,"previous":"M16-GAP-00604","next":"M16-GAP-00606"},"M16-GAP-00606":{"line":605,"offset":103902,"length":169,"previous":"M16-GAP-00605","next":"M16-GAP-00607"},"M16-GAP-00607":{"line":606,"offset":104071,"length":175,"previous":"M16-GAP-00606","next":"M16-GAP-00608"},"M16-GAP-00608":{"line":607,"offset":104246,"length":163,"previous":"M16-GAP-00607","next":"M16-GAP-00609"},"M16-GAP-00609":{"line":608,"offset":104409,"length":174,"previous":"M16-GAP-00608","next":"M16-GAP-00610"},"M16-GAP-00610":{"line":609,"offset":104583,"length":163,"previous":"M16-GAP-00609","next":"M16-GAP-00611"},"M16-GAP-00611":{"line":610,"offset":104746,"length":169,"previous":"M16-GAP-00610","next":"M16-GAP-00612"},"M16-GAP-00612":{"line":611,"offset":104915,"length":174,"previous":"M16-GAP-00611","next":"M16-GAP-00613"},"M16-GAP-00613":{"line":612,"offset":105089,"length":163,"previous":"M16-GAP-00612","next":"M16-GAP-00614"},"M16-GAP-00614":{"line":613,"offset":105252,"length":165,"previous":"M16-GAP-00613","next":"M16-GAP-00615"},"M16-GAP-00615":{"line":614,"offset":105417,"length":175,"previous":"M16-GAP-00614","next":"M16-GAP-00616"},"M16-GAP-00616":{"line":615,"offset":105592,"length":175,"previous":"M16-GAP-00615","next":"M16-GAP-00617"},"M16-GAP-00617":{"line":616,"offset":105767,"length":169,"previous":"M16-GAP-00616","next":"M16-GAP-00618"},"M16-GAP-00618":{"line":617,"offset":105936,"length":160,"previous":"M16-GAP-00617","next":"M16-GAP-00619"},"M16-GAP-00619":{"line":618,"offset":106096,"length":164,"previous":"M16-GAP-00618","next":"M16-GAP-00620"},"M16-GAP-00620":{"line":619,"offset":106260,"length":170,"previous":"M16-GAP-00619","next":"M16-GAP-00621"},"M16-GAP-00621":{"line":620,"offset":106430,"length":162,"previous":"M16-GAP-00620","next":"M16-GAP-00622"},"M16-GAP-00622":{"line":621,"offset":106592,"length":164,"previous":"M16-GAP-00621","next":"M16-GAP-00623"},"M16-GAP-00623":{"line":622,"offset":106756,"length":163,"previous":"M16-GAP-00622","next":"M16-GAP-00624"},"M16-GAP-00624":{"line":623,"offset":106919,"length":162,"previous":"M16-GAP-00623","next":"M16-GAP-00625"},"M16-GAP-00625":{"line":624,"offset":107081,"length":176,"previous":"M16-GAP-00624","next":"M16-GAP-00626"},"M16-GAP-00626":{"line":625,"offset":107257,"length":168,"previous":"M16-GAP-00625","next":"M16-GAP-00627"},"M16-GAP-00627":{"line":626,"offset":107425,"length":162,"previous":"M16-GAP-00626","next":"M16-GAP-00628"},"M16-GAP-00628":{"line":627,"offset":107587,"length":166,"previous":"M16-GAP-00627","next":"M16-GAP-00629"},"M16-GAP-00629":{"line":628,"offset":107753,"length":171,"previous":"M16-GAP-00628","next":"M16-GAP-00630"},"M16-GAP-00630":{"line":629,"offset":107924,"length":166,"previous":"M16-GAP-00629","next":"M16-GAP-00631"},"M16-GAP-00631":{"line":630,"offset":108090,"length":167,"previous":"M16-GAP-00630","next":"M16-GAP-00632"},"M16-GAP-00632":{"line":631,"offset":108257,"length":168,"previous":"M16-GAP-00631","next":"M16-GAP-00633"},"M16-GAP-00633":{"line":632,"offset":108425,"length":178,"previous":"M16-GAP-00632","next":"M16-GAP-00634"},"M16-GAP-00634":{"line":633,"offset":108603,"length":168,"previous":"M16-GAP-00633","next":"M16-GAP-00635"},"M16-GAP-00635":{"line":634,"offset":108771,"length":166,"previous":"M16-GAP-00634","next":"M16-GAP-00636"},"M16-GAP-00636":{"line":635,"offset":108937,"length":167,"previous":"M16-GAP-00635","next":"M16-GAP-00637"},"M16-GAP-00637":{"line":636,"offset":109104,"length":172,"previous":"M16-GAP-00636","next":"M16-GAP-00638"},"M16-GAP-00638":{"line":637,"offset":109276,"length":169,"previous":"M16-GAP-00637","next":"M16-GAP-00639"},"M16-GAP-00639":{"line":638,"offset":109445,"length":165,"previous":"M16-GAP-00638","next":"M16-GAP-00640"},"M16-GAP-00640":{"line":639,"offset":109610,"length":166,"previous":"M16-GAP-00639","next":"M16-GAP-00641"},"M16-GAP-00641":{"line":640,"offset":109776,"length":168,"previous":"M16-GAP-00640","next":"M16-GAP-00642"},"M16-GAP-00642":{"line":641,"offset":109944,"length":166,"previous":"M16-GAP-00641","next":"M16-GAP-00643"},"M16-GAP-00643":{"line":642,"offset":110110,"length":167,"previous":"M16-GAP-00642","next":"M16-GAP-00644"},"M16-GAP-00644":{"line":643,"offset":110277,"length":171,"previous":"M16-GAP-00643","next":"M16-GAP-00645"},"M16-GAP-00645":{"line":644,"offset":110448,"length":165,"previous":"M16-GAP-00644","next":"M16-GAP-00646"},"M16-GAP-00646":{"line":645,"offset":110613,"length":166,"previous":"M16-GAP-00645","next":"M16-GAP-00647"},"M16-GAP-00647":{"line":646,"offset":110779,"length":168,"previous":"M16-GAP-00646","next":"M16-GAP-00648"},"M16-GAP-00648":{"line":647,"offset":110947,"length":166,"previous":"M16-GAP-00647","next":"M16-GAP-00649"},"M16-GAP-00649":{"line":648,"offset":111113,"length":167,"previous":"M16-GAP-00648","next":"M16-GAP-00650"},"M16-GAP-00650":{"line":649,"offset":111280,"length":171,"previous":"M16-GAP-00649","next":"M16-GAP-00651"},"M16-GAP-00651":{"line":650,"offset":111451,"length":167,"previous":"M16-GAP-00650","next":"M16-GAP-00652"},"M16-GAP-00652":{"line":651,"offset":111618,"length":167,"previous":"M16-GAP-00651","next":"M16-GAP-00653"},"M16-GAP-00653":{"line":652,"offset":111785,"length":164,"previous":"M16-GAP-00652","next":"M16-GAP-00654"},"M16-GAP-00654":{"line":653,"offset":111949,"length":167,"previous":"M16-GAP-00653","next":"M16-GAP-00655"},"M16-GAP-00655":{"line":654,"offset":112116,"length":172,"previous":"M16-GAP-00654","next":"M16-GAP-00656"},"M16-GAP-00656":{"line":655,"offset":112288,"length":170,"previous":"M16-GAP-00655","next":"M16-GAP-00657"},"M16-GAP-00657":{"line":656,"offset":112458,"length":162,"previous":"M16-GAP-00656","next":"M16-GAP-00658"},"M16-GAP-00658":{"line":657,"offset":112620,"length":166,"previous":"M16-GAP-00657","next":"M16-GAP-00659"},"M16-GAP-00659":{"line":658,"offset":112786,"length":160,"previous":"M16-GAP-00658","next":"M16-GAP-00660"},"M16-GAP-00660":{"line":659,"offset":112946,"length":167,"previous":"M16-GAP-00659","next":"M16-GAP-00661"},"M16-GAP-00661":{"line":660,"offset":113113,"length":160,"previous":"M16-GAP-00660","next":"M16-GAP-00662"},"M16-GAP-00662":{"line":661,"offset":113273,"length":166,"previous":"M16-GAP-00661","next":"M16-GAP-00663"},"M16-GAP-00663":{"line":662,"offset":113439,"length":167,"previous":"M16-GAP-00662","next":"M16-GAP-00664"},"M16-GAP-00664":{"line":663,"offset":113606,"length":169,"previous":"M16-GAP-00663","next":"M16-GAP-00665"},"M16-GAP-00665":{"line":664,"offset":113775,"length":165,"previous":"M16-GAP-00664","next":"M16-GAP-00666"},"M16-GAP-00666":{"line":665,"offset":113940,"length":168,"previous":"M16-GAP-00665","next":"M16-GAP-00667"},"M16-GAP-00667":{"line":666,"offset":114108,"length":165,"previous":"M16-GAP-00666","next":"M16-GAP-00668"},"M16-GAP-00668":{"line":667,"offset":114273,"length":164,"previous":"M16-GAP-00667","next":"M16-GAP-00669"},"M16-GAP-00669":{"line":668,"offset":114437,"length":167,"previous":"M16-GAP-00668","next":"M16-GAP-00670"},"M16-GAP-00670":{"line":669,"offset":114604,"length":175,"previous":"M16-GAP-00669","next":"M16-GAP-00671"},"M16-GAP-00671":{"line":670,"offset":114779,"length":166,"previous":"M16-GAP-00670","next":"M16-GAP-00672"},"M16-GAP-00672":{"line":671,"offset":114945,"length":176,"previous":"M16-GAP-00671","next":"M16-GAP-00673"},"M16-GAP-00673":{"line":672,"offset":115121,"length":167,"previous":"M16-GAP-00672","next":"M16-GAP-00674"},"M16-GAP-00674":{"line":673,"offset":115288,"length":170,"previous":"M16-GAP-00673","next":"M16-GAP-00675"},"M16-GAP-00675":{"line":674,"offset":115458,"length":162,"previous":"M16-GAP-00674","next":"M16-GAP-00676"},"M16-GAP-00676":{"line":675,"offset":115620,"length":173,"previous":"M16-GAP-00675","next":"M16-GAP-00677"},"M16-GAP-00677":{"line":676,"offset":115793,"length":177,"previous":"M16-GAP-00676","next":"M16-GAP-00678"},"M16-GAP-00678":{"line":677,"offset":115970,"length":176,"previous":"M16-GAP-00677","next":"M16-GAP-00679"},"M16-GAP-00679":{"line":678,"offset":116146,"length":179,"previous":"M16-GAP-00678","next":"M16-GAP-00680"},"M16-GAP-00680":{"line":679,"offset":116325,"length":183,"previous":"M16-GAP-00679","next":"M16-GAP-00681"},"M16-GAP-00681":{"line":680,"offset":116508,"length":185,"previous":"M16-GAP-00680","next":"M16-GAP-00682"},"M16-GAP-00682":{"line":681,"offset":116693,"length":182,"previous":"M16-GAP-00681","next":"M16-GAP-00683"},"M16-GAP-00683":{"line":682,"offset":116875,"length":186,"previous":"M16-GAP-00682","next":"M16-GAP-00684"},"M16-GAP-00684":{"line":683,"offset":117061,"length":182,"previous":"M16-GAP-00683","next":"M16-GAP-00685"},"M16-GAP-00685":{"line":684,"offset":117243,"length":174,"previous":"M16-GAP-00684","next":"M16-GAP-00686"},"M16-GAP-00686":{"line":685,"offset":117417,"length":173,"previous":"M16-GAP-00685","next":"M16-GAP-00687"},"M16-GAP-00687":{"line":686,"offset":117590,"length":167,"previous":"M16-GAP-00686","next":"M16-GAP-00688"},"M16-GAP-00688":{"line":687,"offset":117757,"length":189,"previous":"M16-GAP-00687","next":"M16-GAP-00689"},"M16-GAP-00689":{"line":688,"offset":117946,"length":173,"previous":"M16-GAP-00688","next":"M16-GAP-00690"},"M16-GAP-00690":{"line":689,"offset":118119,"length":170,"previous":"M16-GAP-00689","next":"M16-GAP-00691"},"M16-GAP-00691":{"line":690,"offset":118289,"length":179,"previous":"M16-GAP-00690","next":"M16-GAP-00692"},"M16-GAP-00692":{"line":691,"offset":118468,"length":180,"previous":"M16-GAP-00691","next":"M16-GAP-00693"},"M16-GAP-00693":{"line":692,"offset":118648,"length":182,"previous":"M16-GAP-00692","next":"M16-GAP-00694"},"M16-GAP-00694":{"line":693,"offset":118830,"length":166,"previous":"M16-GAP-00693","next":"M16-GAP-00695"},"M16-GAP-00695":{"line":694,"offset":118996,"length":169,"previous":"M16-GAP-00694","next":"M16-GAP-00696"},"M16-GAP-00696":{"line":695,"offset":119165,"length":173,"previous":"M16-GAP-00695","next":"M16-GAP-00697"},"M16-GAP-00697":{"line":696,"offset":119338,"length":170,"previous":"M16-GAP-00696","next":"M16-GAP-00698"},"M16-GAP-00698":{"line":697,"offset":119508,"length":174,"previous":"M16-GAP-00697","next":"M16-GAP-00699"},"M16-GAP-00699":{"line":698,"offset":119682,"length":166,"previous":"M16-GAP-00698","next":"M16-GAP-00700"},"M16-GAP-00700":{"line":699,"offset":119848,"length":175,"previous":"M16-GAP-00699","next":"M16-GAP-00701"},"M16-GAP-00701":{"line":700,"offset":120023,"length":162,"previous":"M16-GAP-00700","next":"M16-GAP-00702"},"M16-GAP-00702":{"line":701,"offset":120185,"length":169,"previous":"M16-GAP-00701","next":"M16-GAP-00703"},"M16-GAP-00703":{"line":702,"offset":120354,"length":168,"previous":"M16-GAP-00702","next":"M16-GAP-00704"},"M16-GAP-00704":{"line":703,"offset":120522,"length":161,"previous":"M16-GAP-00703","next":"M16-GAP-00705"},"M16-GAP-00705":{"line":704,"offset":120683,"length":167,"previous":"M16-GAP-00704","next":"M16-GAP-00706"},"M16-GAP-00706":{"line":705,"offset":120850,"length":165,"previous":"M16-GAP-00705","next":"M16-GAP-00707"},"M16-GAP-00707":{"line":706,"offset":121015,"length":163,"previous":"M16-GAP-00706","next":"M16-GAP-00708"},"M16-GAP-00708":{"line":707,"offset":121178,"length":178,"previous":"M16-GAP-00707","next":"M16-GAP-00709"},"M16-GAP-00709":{"line":708,"offset":121356,"length":178,"previous":"M16-GAP-00708","next":"M16-GAP-00710"},"M16-GAP-00710":{"line":709,"offset":121534,"length":179,"previous":"M16-GAP-00709","next":"M16-GAP-00711"},"M16-GAP-00711":{"line":710,"offset":121713,"length":166,"previous":"M16-GAP-00710","next":"M16-GAP-00712"},"M16-GAP-00712":{"line":711,"offset":121879,"length":171,"previous":"M16-GAP-00711","next":"M16-GAP-00713"},"M16-GAP-00713":{"line":712,"offset":122050,"length":161,"previous":"M16-GAP-00712","next":"M16-GAP-00714"},"M16-GAP-00714":{"line":713,"offset":122211,"length":168,"previous":"M16-GAP-00713","next":"M16-GAP-00715"},"M16-GAP-00715":{"line":714,"offset":122379,"length":173,"previous":"M16-GAP-00714","next":"M16-GAP-00716"},"M16-GAP-00716":{"line":715,"offset":122552,"length":169,"previous":"M16-GAP-00715","next":"M16-GAP-00717"},"M16-GAP-00717":{"line":716,"offset":122721,"length":175,"previous":"M16-GAP-00716","next":"M16-GAP-00718"},"M16-GAP-00718":{"line":717,"offset":122896,"length":170,"previous":"M16-GAP-00717","next":"M16-GAP-00719"},"M16-GAP-00719":{"line":718,"offset":123066,"length":171,"previous":"M16-GAP-00718","next":"M16-GAP-00720"},"M16-GAP-00720":{"line":719,"offset":123237,"length":173,"previous":"M16-GAP-00719","next":"M16-GAP-00721"},"M16-GAP-00721":{"line":720,"offset":123410,"length":172,"previous":"M16-GAP-00720","next":"M16-GAP-00722"},"M16-GAP-00722":{"line":721,"offset":123582,"length":167,"previous":"M16-GAP-00721","next":"M16-GAP-00723"},"M16-GAP-00723":{"line":722,"offset":123749,"length":172,"previous":"M16-GAP-00722","next":"M16-GAP-00724"},"M16-GAP-00724":{"line":723,"offset":123921,"length":175,"previous":"M16-GAP-00723","next":"M16-GAP-00725"},"M16-GAP-00725":{"line":724,"offset":124096,"length":176,"previous":"M16-GAP-00724","next":"M16-GAP-00726"},"M16-GAP-00726":{"line":725,"offset":124272,"length":168,"previous":"M16-GAP-00725","next":"M16-GAP-00727"},"M16-GAP-00727":{"line":726,"offset":124440,"length":161,"previous":"M16-GAP-00726","next":"M16-GAP-00728"},"M16-GAP-00728":{"line":727,"offset":124601,"length":175,"previous":"M16-GAP-00727","next":"M16-GAP-00729"},"M16-GAP-00729":{"line":728,"offset":124776,"length":172,"previous":"M16-GAP-00728","next":"M16-GAP-00730"},"M16-GAP-00730":{"line":729,"offset":124948,"length":170,"previous":"M16-GAP-00729","next":"M16-GAP-00731"},"M16-GAP-00731":{"line":730,"offset":125118,"length":172,"previous":"M16-GAP-00730","next":"M16-GAP-00732"},"M16-GAP-00732":{"line":731,"offset":125290,"length":167,"previous":"M16-GAP-00731","next":"M16-GAP-00733"},"M16-GAP-00733":{"line":732,"offset":125457,"length":168,"previous":"M16-GAP-00732","next":"M16-GAP-00734"},"M16-GAP-00734":{"line":733,"offset":125625,"length":163,"previous":"M16-GAP-00733","next":"M16-GAP-00735"},"M16-GAP-00735":{"line":734,"offset":125788,"length":162,"previous":"M16-GAP-00734","next":"M16-GAP-00736"},"M16-GAP-00736":{"line":735,"offset":125950,"length":173,"previous":"M16-GAP-00735","next":"M16-GAP-00737"},"M16-GAP-00737":{"line":736,"offset":126123,"length":166,"previous":"M16-GAP-00736","next":"M16-GAP-00738"},"M16-GAP-00738":{"line":737,"offset":126289,"length":163,"previous":"M16-GAP-00737","next":"M16-GAP-00739"},"M16-GAP-00739":{"line":738,"offset":126452,"length":172,"previous":"M16-GAP-00738","next":"M16-GAP-00740"},"M16-GAP-00740":{"line":739,"offset":126624,"length":170,"previous":"M16-GAP-00739","next":"M16-GAP-00741"},"M16-GAP-00741":{"line":740,"offset":126794,"length":176,"previous":"M16-GAP-00740","next":"M16-GAP-00742"},"M16-GAP-00742":{"line":741,"offset":126970,"length":167,"previous":"M16-GAP-00741","next":"M16-GAP-00743"},"M16-GAP-00743":{"line":742,"offset":127137,"length":167,"previous":"M16-GAP-00742","next":"M16-GAP-00744"},"M16-GAP-00744":{"line":743,"offset":127304,"length":170,"previous":"M16-GAP-00743","next":"M16-GAP-00745"},"M16-GAP-00745":{"line":744,"offset":127474,"length":170,"previous":"M16-GAP-00744","next":"M16-GAP-00746"},"M16-GAP-00746":{"line":745,"offset":127644,"length":175,"previous":"M16-GAP-00745","next":"M16-GAP-00747"},"M16-GAP-00747":{"line":746,"offset":127819,"length":169,"previous":"M16-GAP-00746","next":"M16-GAP-00748"},"M16-GAP-00748":{"line":747,"offset":127988,"length":173,"previous":"M16-GAP-00747","next":"M16-GAP-00749"},"M16-GAP-00749":{"line":748,"offset":128161,"length":168,"previous":"M16-GAP-00748","next":"M16-GAP-00750"},"M16-GAP-00750":{"line":749,"offset":128329,"length":170,"previous":"M16-GAP-00749","next":"M16-GAP-00751"},"M16-GAP-00751":{"line":750,"offset":128499,"length":168,"previous":"M16-GAP-00750","next":"M16-GAP-00752"},"M16-GAP-00752":{"line":751,"offset":128667,"length":162,"previous":"M16-GAP-00751","next":"M16-GAP-00753"},"M16-GAP-00753":{"line":752,"offset":128829,"length":163,"previous":"M16-GAP-00752","next":"M16-GAP-00754"},"M16-GAP-00754":{"line":753,"offset":128992,"length":161,"previous":"M16-GAP-00753","next":"M16-GAP-00755"},"M16-GAP-00755":{"line":754,"offset":129153,"length":174,"previous":"M16-GAP-00754","next":"M16-GAP-00756"},"M16-GAP-00756":{"line":755,"offset":129327,"length":173,"previous":"M16-GAP-00755","next":"M16-GAP-00757"},"M16-GAP-00757":{"line":756,"offset":129500,"length":168,"previous":"M16-GAP-00756","next":"M16-GAP-00758"},"M16-GAP-00758":{"line":757,"offset":129668,"length":165,"previous":"M16-GAP-00757","next":"M16-GAP-00759"},"M16-GAP-00759":{"line":758,"offset":129833,"length":167,"previous":"M16-GAP-00758","next":"M16-GAP-00760"},"M16-GAP-00760":{"line":759,"offset":130000,"length":170,"previous":"M16-GAP-00759","next":"M16-GAP-00761"},"M16-GAP-00761":{"line":760,"offset":130170,"length":184,"previous":"M16-GAP-00760","next":"M16-GAP-00762"},"M16-GAP-00762":{"line":761,"offset":130354,"length":193,"previous":"M16-GAP-00761","next":"M16-GAP-00763"},"M16-GAP-00763":{"line":762,"offset":130547,"length":177,"previous":"M16-GAP-00762","next":"M16-GAP-00764"},"M16-GAP-00764":{"line":763,"offset":130724,"length":173,"previous":"M16-GAP-00763","next":"M16-GAP-00765"},"M16-GAP-00765":{"line":764,"offset":130897,"length":176,"previous":"M16-GAP-00764","next":"M16-GAP-00766"},"M16-GAP-00766":{"line":765,"offset":131073,"length":183,"previous":"M16-GAP-00765","next":"M16-GAP-00767"},"M16-GAP-00767":{"line":766,"offset":131256,"length":169,"previous":"M16-GAP-00766","next":"M16-GAP-00768"},"M16-GAP-00768":{"line":767,"offset":131425,"length":177,"previous":"M16-GAP-00767","next":"M16-GAP-00769"},"M16-GAP-00769":{"line":768,"offset":131602,"length":171,"previous":"M16-GAP-00768","next":"M16-GAP-00770"},"M16-GAP-00770":{"line":769,"offset":131773,"length":181,"previous":"M16-GAP-00769","next":"M16-GAP-00771"},"M16-GAP-00771":{"line":770,"offset":131954,"length":177,"previous":"M16-GAP-00770","next":"M16-GAP-00772"},"M16-GAP-00772":{"line":771,"offset":132131,"length":173,"previous":"M16-GAP-00771","next":"M16-GAP-00773"},"M16-GAP-00773":{"line":772,"offset":132304,"length":174,"previous":"M16-GAP-00772","next":"M16-GAP-00774"},"M16-GAP-00774":{"line":773,"offset":132478,"length":179,"previous":"M16-GAP-00773","next":"M16-GAP-00775"},"M16-GAP-00775":{"line":774,"offset":132657,"length":174,"previous":"M16-GAP-00774","next":"M16-GAP-00776"},"M16-GAP-00776":{"line":775,"offset":132831,"length":176,"previous":"M16-GAP-00775","next":"M16-GAP-00777"},"M16-GAP-00777":{"line":776,"offset":133007,"length":172,"previous":"M16-GAP-00776","next":"M16-GAP-00778"},"M16-GAP-00778":{"line":777,"offset":133179,"length":177,"previous":"M16-GAP-00777","next":"M16-GAP-00779"},"M16-GAP-00779":{"line":778,"offset":133356,"length":169,"previous":"M16-GAP-00778","next":"M16-GAP-00780"},"M16-GAP-00780":{"line":779,"offset":133525,"length":186,"previous":"M16-GAP-00779","next":"M16-GAP-00781"},"M16-GAP-00781":{"line":780,"offset":133711,"length":180,"previous":"M16-GAP-00780","next":"M16-GAP-00782"},"M16-GAP-00782":{"line":781,"offset":133891,"length":183,"previous":"M16-GAP-00781","next":"M16-GAP-00783"},"M16-GAP-00783":{"line":782,"offset":134074,"length":176,"previous":"M16-GAP-00782","next":"M16-GAP-00784"},"M16-GAP-00784":{"line":783,"offset":134250,"length":185,"previous":"M16-GAP-00783","next":"M16-GAP-00785"},"M16-GAP-00785":{"line":784,"offset":134435,"length":175,"previous":"M16-GAP-00784","next":"M16-GAP-00786"},"M16-GAP-00786":{"line":785,"offset":134610,"length":179,"previous":"M16-GAP-00785","next":"M16-GAP-00787"},"M16-GAP-00787":{"line":786,"offset":134789,"length":177,"previous":"M16-GAP-00786","next":"M16-GAP-00788"},"M16-GAP-00788":{"line":787,"offset":134966,"length":174,"previous":"M16-GAP-00787","next":"M16-GAP-00789"},"M16-GAP-00789":{"line":788,"offset":135140,"length":180,"previous":"M16-GAP-00788","next":"M16-GAP-00790"},"M16-GAP-00790":{"line":789,"offset":135320,"length":187,"previous":"M16-GAP-00789","next":"M16-GAP-00791"},"M16-GAP-00791":{"line":790,"offset":135507,"length":180,"previous":"M16-GAP-00790","next":"M16-GAP-00792"},"M16-GAP-00792":{"line":791,"offset":135687,"length":186,"previous":"M16-GAP-00791","next":"M16-GAP-00793"},"M16-GAP-00793":{"line":792,"offset":135873,"length":183,"previous":"M16-GAP-00792","next":"M16-GAP-00794"},"M16-GAP-00794":{"line":793,"offset":136056,"length":175,"previous":"M16-GAP-00793","next":"M16-GAP-00795"},"M16-GAP-00795":{"line":794,"offset":136231,"length":178,"previous":"M16-GAP-00794","next":"M16-GAP-00796"},"M16-GAP-00796":{"line":795,"offset":136409,"length":179,"previous":"M16-GAP-00795","next":"M16-GAP-00797"},"M16-GAP-00797":{"line":796,"offset":136588,"length":179,"previous":"M16-GAP-00796","next":"M16-GAP-00798"},"M16-GAP-00798":{"line":797,"offset":136767,"length":182,"previous":"M16-GAP-00797","next":"M16-GAP-00799"},"M16-GAP-00799":{"line":798,"offset":136949,"length":183,"previous":"M16-GAP-00798","next":"M16-GAP-00800"},"M16-GAP-00800":{"line":799,"offset":137132,"length":176,"previous":"M16-GAP-00799","next":"M16-GAP-00801"},"M16-GAP-00801":{"line":800,"offset":137308,"length":175,"previous":"M16-GAP-00800","next":"M16-GAP-00802"},"M16-GAP-00802":{"line":801,"offset":137483,"length":177,"previous":"M16-GAP-00801","next":"M16-GAP-00803"},"M16-GAP-00803":{"line":802,"offset":137660,"length":177,"previous":"M16-GAP-00802","next":"M16-GAP-00804"},"M16-GAP-00804":{"line":803,"offset":137837,"length":188,"previous":"M16-GAP-00803","next":"M16-GAP-00805"},"M16-GAP-00805":{"line":804,"offset":138025,"length":178,"previous":"M16-GAP-00804","next":"M16-GAP-00806"},"M16-GAP-00806":{"line":805,"offset":138203,"length":181,"previous":"M16-GAP-00805","next":"M16-GAP-00807"},"M16-GAP-00807":{"line":806,"offset":138384,"length":182,"previous":"M16-GAP-00806","next":"M16-GAP-00808"},"M16-GAP-00808":{"line":807,"offset":138566,"length":189,"previous":"M16-GAP-00807","next":"M16-GAP-00809"},"M16-GAP-00809":{"line":808,"offset":138755,"length":185,"previous":"M16-GAP-00808","next":"M16-GAP-00810"},"M16-GAP-00810":{"line":809,"offset":138940,"length":180,"previous":"M16-GAP-00809","next":"M16-GAP-00811"},"M16-GAP-00811":{"line":810,"offset":139120,"length":180,"previous":"M16-GAP-00810","next":"M16-GAP-00812"},"M16-GAP-00812":{"line":811,"offset":139300,"length":184,"previous":"M16-GAP-00811","next":"M16-GAP-00813"},"M16-GAP-00813":{"line":812,"offset":139484,"length":178,"previous":"M16-GAP-00812","next":"M16-GAP-00814"},"M16-GAP-00814":{"line":813,"offset":139662,"length":172,"previous":"M16-GAP-00813","next":"M16-GAP-00815"},"M16-GAP-00815":{"line":814,"offset":139834,"length":181,"previous":"M16-GAP-00814","next":"M16-GAP-00816"},"M16-GAP-00816":{"line":815,"offset":140015,"length":170,"previous":"M16-GAP-00815","next":"M16-GAP-00817"},"M16-GAP-00817":{"line":816,"offset":140185,"length":168,"previous":"M16-GAP-00816","next":"M16-GAP-00818"},"M16-GAP-00818":{"line":817,"offset":140353,"length":178,"previous":"M16-GAP-00817","next":"M16-GAP-00819"},"M16-GAP-00819":{"line":818,"offset":140531,"length":178,"previous":"M16-GAP-00818","next":"M16-GAP-00820"},"M16-GAP-00820":{"line":819,"offset":140709,"length":181,"previous":"M16-GAP-00819","next":"M16-GAP-00821"},"M16-GAP-00821":{"line":820,"offset":140890,"length":180,"previous":"M16-GAP-00820","next":"M16-GAP-00822"},"M16-GAP-00822":{"line":821,"offset":141070,"length":179,"previous":"M16-GAP-00821","next":"M16-GAP-00823"},"M16-GAP-00823":{"line":822,"offset":141249,"length":183,"previous":"M16-GAP-00822","next":"M16-GAP-00824"},"M16-GAP-00824":{"line":823,"offset":141432,"length":188,"previous":"M16-GAP-00823","next":"M16-GAP-00825"},"M16-GAP-00825":{"line":824,"offset":141620,"length":183,"previous":"M16-GAP-00824","next":"M16-GAP-00826"},"M16-GAP-00826":{"line":825,"offset":141803,"length":172,"previous":"M16-GAP-00825","next":"M16-GAP-00827"},"M16-GAP-00827":{"line":826,"offset":141975,"length":174,"previous":"M16-GAP-00826","next":"M16-GAP-00828"},"M16-GAP-00828":{"line":827,"offset":142149,"length":174,"previous":"M16-GAP-00827","next":"M16-GAP-00829"},"M16-GAP-00829":{"line":828,"offset":142323,"length":177,"previous":"M16-GAP-00828","next":"M16-GAP-00830"},"M16-GAP-00830":{"line":829,"offset":142500,"length":182,"previous":"M16-GAP-00829","next":"M16-GAP-00831"},"M16-GAP-00831":{"line":830,"offset":142682,"length":175,"previous":"M16-GAP-00830","next":"M16-GAP-00832"},"M16-GAP-00832":{"line":831,"offset":142857,"length":181,"previous":"M16-GAP-00831","next":"M16-GAP-00833"},"M16-GAP-00833":{"line":832,"offset":143038,"length":186,"previous":"M16-GAP-00832","next":"M16-GAP-00834"},"M16-GAP-00834":{"line":833,"offset":143224,"length":176,"previous":"M16-GAP-00833","next":"M16-GAP-00835"},"M16-GAP-00835":{"line":834,"offset":143400,"length":176,"previous":"M16-GAP-00834","next":"M16-GAP-00836"},"M16-GAP-00836":{"line":835,"offset":143576,"length":176,"previous":"M16-GAP-00835","next":"M16-GAP-00837"},"M16-GAP-00837":{"line":836,"offset":143752,"length":178,"previous":"M16-GAP-00836","next":"M16-GAP-00838"},"M16-GAP-00838":{"line":837,"offset":143930,"length":176,"previous":"M16-GAP-00837","next":"M16-GAP-00839"},"M16-GAP-00839":{"line":838,"offset":144106,"length":178,"previous":"M16-GAP-00838","next":"M16-GAP-00840"},"M16-GAP-00840":{"line":839,"offset":144284,"length":179,"previous":"M16-GAP-00839","next":"M16-GAP-00841"},"M16-GAP-00841":{"line":840,"offset":144463,"length":173,"previous":"M16-GAP-00840","next":"M16-GAP-00842"},"M16-GAP-00842":{"line":841,"offset":144636,"length":179,"previous":"M16-GAP-00841","next":"M16-GAP-00843"},"M16-GAP-00843":{"line":842,"offset":144815,"length":184,"previous":"M16-GAP-00842","next":"M16-GAP-00844"},"M16-GAP-00844":{"line":843,"offset":144999,"length":180,"previous":"M16-GAP-00843","next":"M16-GAP-00845"},"M16-GAP-00845":{"line":844,"offset":145179,"length":185,"previous":"M16-GAP-00844","next":"M16-GAP-00846"},"M16-GAP-00846":{"line":845,"offset":145364,"length":179,"previous":"M16-GAP-00845","next":"M16-GAP-00847"},"M16-GAP-00847":{"line":846,"offset":145543,"length":180,"previous":"M16-GAP-00846","next":"M16-GAP-00848"},"M16-GAP-00848":{"line":847,"offset":145723,"length":177,"previous":"M16-GAP-00847","next":"M16-GAP-00849"},"M16-GAP-00849":{"line":848,"offset":145900,"length":183,"previous":"M16-GAP-00848","next":"M16-GAP-00850"},"M16-GAP-00850":{"line":849,"offset":146083,"length":180,"previous":"M16-GAP-00849","next":"M16-GAP-00851"},"M16-GAP-00851":{"line":850,"offset":146263,"length":180,"previous":"M16-GAP-00850","next":"M16-GAP-00852"},"M16-GAP-00852":{"line":851,"offset":146443,"length":184,"previous":"M16-GAP-00851","next":"M16-GAP-00853"},"M16-GAP-00853":{"line":852,"offset":146627,"length":186,"previous":"M16-GAP-00852","next":"M16-GAP-00854"},"M16-GAP-00854":{"line":853,"offset":146813,"length":188,"previous":"M16-GAP-00853","next":"M16-GAP-00855"},"M16-GAP-00855":{"line":854,"offset":147001,"length":179,"previous":"M16-GAP-00854","next":"M16-GAP-00856"},"M16-GAP-00856":{"line":855,"offset":147180,"length":177,"previous":"M16-GAP-00855","next":"M16-GAP-00857"},"M16-GAP-00857":{"line":856,"offset":147357,"length":184,"previous":"M16-GAP-00856","next":"M16-GAP-00858"},"M16-GAP-00858":{"line":857,"offset":147541,"length":189,"previous":"M16-GAP-00857","next":"M16-GAP-00859"},"M16-GAP-00859":{"line":858,"offset":147730,"length":190,"previous":"M16-GAP-00858","next":"M16-GAP-00860"},"M16-GAP-00860":{"line":859,"offset":147920,"length":180,"previous":"M16-GAP-00859","next":"M16-GAP-00861"},"M16-GAP-00861":{"line":860,"offset":148100,"length":178,"previous":"M16-GAP-00860","next":"M16-GAP-00862"},"M16-GAP-00862":{"line":861,"offset":148278,"length":177,"previous":"M16-GAP-00861","next":"M16-GAP-00863"},"M16-GAP-00863":{"line":862,"offset":148455,"length":181,"previous":"M16-GAP-00862","next":"M16-GAP-00864"},"M16-GAP-00864":{"line":863,"offset":148636,"length":188,"previous":"M16-GAP-00863","next":"M16-GAP-00865"},"M16-GAP-00865":{"line":864,"offset":148824,"length":188,"previous":"M16-GAP-00864","next":"M16-GAP-00866"},"M16-GAP-00866":{"line":865,"offset":149012,"length":176,"previous":"M16-GAP-00865","next":"M16-GAP-00867"},"M16-GAP-00867":{"line":866,"offset":149188,"length":181,"previous":"M16-GAP-00866","next":"M16-GAP-00868"},"M16-GAP-00868":{"line":867,"offset":149369,"length":176,"previous":"M16-GAP-00867","next":"M16-GAP-00869"},"M16-GAP-00869":{"line":868,"offset":149545,"length":184,"previous":"M16-GAP-00868","next":"M16-GAP-00870"},"M16-GAP-00870":{"line":869,"offset":149729,"length":197,"previous":"M16-GAP-00869","next":"M16-GAP-00871"},"M16-GAP-00871":{"line":870,"offset":149926,"length":181,"previous":"M16-GAP-00870","next":"M16-GAP-00872"},"M16-GAP-00872":{"line":871,"offset":150107,"length":184,"previous":"M16-GAP-00871","next":"M16-GAP-00873"},"M16-GAP-00873":{"line":872,"offset":150291,"length":184,"previous":"M16-GAP-00872","next":"M16-GAP-00874"},"M16-GAP-00874":{"line":873,"offset":150475,"length":181,"previous":"M16-GAP-00873","next":"M16-GAP-00875"},"M16-GAP-00875":{"line":874,"offset":150656,"length":187,"previous":"M16-GAP-00874","next":"M16-GAP-00876"},"M16-GAP-00876":{"line":875,"offset":150843,"length":191,"previous":"M16-GAP-00875","next":"M16-GAP-00877"},"M16-GAP-00877":{"line":876,"offset":151034,"length":184,"previous":"M16-GAP-00876","next":"M16-GAP-00878"},"M16-GAP-00878":{"line":877,"offset":151218,"length":182,"previous":"M16-GAP-00877","next":"M16-GAP-00879"},"M16-GAP-00879":{"line":878,"offset":151400,"length":184,"previous":"M16-GAP-00878","next":"M16-GAP-00880"},"M16-GAP-00880":{"line":879,"offset":151584,"length":178,"previous":"M16-GAP-00879","next":"M16-GAP-00881"},"M16-GAP-00881":{"line":880,"offset":151762,"length":178,"previous":"M16-GAP-00880","next":"M16-GAP-00882"},"M16-GAP-00882":{"line":881,"offset":151940,"length":188,"previous":"M16-GAP-00881","next":"M16-GAP-00883"},"M16-GAP-00883":{"line":882,"offset":152128,"length":182,"previous":"M16-GAP-00882","next":"M16-GAP-00884"},"M16-GAP-00884":{"line":883,"offset":152310,"length":172,"previous":"M16-GAP-00883","next":"M16-GAP-00885"},"M16-GAP-00885":{"line":884,"offset":152482,"length":169,"previous":"M16-GAP-00884","next":"M16-GAP-00886"},"M16-GAP-00886":{"line":885,"offset":152651,"length":176,"previous":"M16-GAP-00885","next":"M16-GAP-00887"},"M16-GAP-00887":{"line":886,"offset":152827,"length":174,"previous":"M16-GAP-00886","next":"M16-GAP-00888"},"M16-GAP-00888":{"line":887,"offset":153001,"length":171,"previous":"M16-GAP-00887","next":"M16-GAP-00889"},"M16-GAP-00889":{"line":888,"offset":153172,"length":172,"previous":"M16-GAP-00888","next":"M16-GAP-00890"},"M16-GAP-00890":{"line":889,"offset":153344,"length":178,"previous":"M16-GAP-00889","next":"M16-GAP-00891"},"M16-GAP-00891":{"line":890,"offset":153522,"length":173,"previous":"M16-GAP-00890","next":"M16-GAP-00892"},"M16-GAP-00892":{"line":891,"offset":153695,"length":174,"previous":"M16-GAP-00891","next":"M16-GAP-00893"},"M16-GAP-00893":{"line":892,"offset":153869,"length":170,"previous":"M16-GAP-00892","next":"M16-GAP-00894"},"M16-GAP-00894":{"line":893,"offset":154039,"length":168,"previous":"M16-GAP-00893","next":"M16-GAP-00895"},"M16-GAP-00895":{"line":894,"offset":154207,"length":161,"previous":"M16-GAP-00894","next":"M16-GAP-00896"},"M16-GAP-00896":{"line":895,"offset":154368,"length":178,"previous":"M16-GAP-00895","next":"M16-GAP-00897"},"M16-GAP-00897":{"line":896,"offset":154546,"length":163,"previous":"M16-GAP-00896","next":"M16-GAP-00898"},"M16-GAP-00898":{"line":897,"offset":154709,"length":175,"previous":"M16-GAP-00897","next":"M16-GAP-00899"},"M16-GAP-00899":{"line":898,"offset":154884,"length":160,"previous":"M16-GAP-00898","next":"M16-GAP-00900"},"M16-GAP-00900":{"line":899,"offset":155044,"length":161,"previous":"M16-GAP-00899","next":"M16-GAP-00901"},"M16-GAP-00901":{"line":900,"offset":155205,"length":168,"previous":"M16-GAP-00900","next":"M16-GAP-00902"},"M16-GAP-00902":{"line":901,"offset":155373,"length":161,"previous":"M16-GAP-00901","next":"M16-GAP-00903"},"M16-GAP-00903":{"line":902,"offset":155534,"length":170,"previous":"M16-GAP-00902","next":"M16-GAP-00904"},"M16-GAP-00904":{"line":903,"offset":155704,"length":169,"previous":"M16-GAP-00903","next":"M16-GAP-00905"},"M16-GAP-00905":{"line":904,"offset":155873,"length":172,"previous":"M16-GAP-00904","next":"M16-GAP-00906"},"M16-GAP-00906":{"line":905,"offset":156045,"length":163,"previous":"M16-GAP-00905","next":"M16-GAP-00907"},"M16-GAP-00907":{"line":906,"offset":156208,"length":175,"previous":"M16-GAP-00906","next":"M16-GAP-00908"},"M16-GAP-00908":{"line":907,"offset":156383,"length":170,"previous":"M16-GAP-00907","next":"M16-GAP-00909"},"M16-GAP-00909":{"line":908,"offset":156553,"length":164,"previous":"M16-GAP-00908","next":"M16-GAP-00910"},"M16-GAP-00910":{"line":909,"offset":156717,"length":163,"previous":"M16-GAP-00909","next":"M16-GAP-00911"},"M16-GAP-00911":{"line":910,"offset":156880,"length":174,"previous":"M16-GAP-00910","next":"M16-GAP-00912"},"M16-GAP-00912":{"line":911,"offset":157054,"length":163,"previous":"M16-GAP-00911","next":"M16-GAP-00913"},"M16-GAP-00913":{"line":912,"offset":157217,"length":168,"previous":"M16-GAP-00912","next":"M16-GAP-00914"},"M16-GAP-00914":{"line":913,"offset":157385,"length":161,"previous":"M16-GAP-00913","next":"M16-GAP-00915"},"M16-GAP-00915":{"line":914,"offset":157546,"length":174,"previous":"M16-GAP-00914","next":"M16-GAP-00916"},"M16-GAP-00916":{"line":915,"offset":157720,"length":164,"previous":"M16-GAP-00915","next":"M16-GAP-00917"},"M16-GAP-00917":{"line":916,"offset":157884,"length":170,"previous":"M16-GAP-00916","next":"M16-GAP-00918"},"M16-GAP-00918":{"line":917,"offset":158054,"length":165,"previous":"M16-GAP-00917","next":"M16-GAP-00919"},"M16-GAP-00919":{"line":918,"offset":158219,"length":166,"previous":"M16-GAP-00918","next":"M16-GAP-00920"},"M16-GAP-00920":{"line":919,"offset":158385,"length":168,"previous":"M16-GAP-00919","next":"M16-GAP-00921"},"M16-GAP-00921":{"line":920,"offset":158553,"length":163,"previous":"M16-GAP-00920","next":"M16-GAP-00922"},"M16-GAP-00922":{"line":921,"offset":158716,"length":165,"previous":"M16-GAP-00921","next":"M16-GAP-00923"},"M16-GAP-00923":{"line":922,"offset":158881,"length":175,"previous":"M16-GAP-00922","next":"M16-GAP-00924"},"M16-GAP-00924":{"line":923,"offset":159056,"length":175,"previous":"M16-GAP-00923","next":"M16-GAP-00925"},"M16-GAP-00925":{"line":924,"offset":159231,"length":166,"previous":"M16-GAP-00924","next":"M16-GAP-00926"},"M16-GAP-00926":{"line":925,"offset":159397,"length":165,"previous":"M16-GAP-00925","next":"M16-GAP-00927"},"M16-GAP-00927":{"line":926,"offset":159562,"length":170,"previous":"M16-GAP-00926","next":"M16-GAP-00928"},"M16-GAP-00928":{"line":927,"offset":159732,"length":166,"previous":"M16-GAP-00927","next":"M16-GAP-00929"},"M16-GAP-00929":{"line":928,"offset":159898,"length":173,"previous":"M16-GAP-00928","next":"M16-GAP-00930"},"M16-GAP-00930":{"line":929,"offset":160071,"length":169,"previous":"M16-GAP-00929","next":"M16-GAP-00931"},"M16-GAP-00931":{"line":930,"offset":160240,"length":170,"previous":"M16-GAP-00930","next":"M16-GAP-00932"},"M16-GAP-00932":{"line":931,"offset":160410,"length":172,"previous":"M16-GAP-00931","next":"M16-GAP-00933"},"M16-GAP-00933":{"line":932,"offset":160582,"length":166,"previous":"M16-GAP-00932","next":"M16-GAP-00934"},"M16-GAP-00934":{"line":933,"offset":160748,"length":167,"previous":"M16-GAP-00933","next":"M16-GAP-00935"},"M16-GAP-00935":{"line":934,"offset":160915,"length":167,"previous":"M16-GAP-00934","next":"M16-GAP-00936"},"M16-GAP-00936":{"line":935,"offset":161082,"length":168,"previous":"M16-GAP-00935","next":"M16-GAP-00937"},"M16-GAP-00937":{"line":936,"offset":161250,"length":167,"previous":"M16-GAP-00936","next":"M16-GAP-00938"},"M16-GAP-00938":{"line":937,"offset":161417,"length":169,"previous":"M16-GAP-00937","next":"M16-GAP-00939"},"M16-GAP-00939":{"line":938,"offset":161586,"length":169,"previous":"M16-GAP-00938","next":"M16-GAP-00940"},"M16-GAP-00940":{"line":939,"offset":161755,"length":178,"previous":"M16-GAP-00939","next":"M16-GAP-00941"},"M16-GAP-00941":{"line":940,"offset":161933,"length":166,"previous":"M16-GAP-00940","next":"M16-GAP-00942"},"M16-GAP-00942":{"line":941,"offset":162099,"length":166,"previous":"M16-GAP-00941","next":"M16-GAP-00943"},"M16-GAP-00943":{"line":942,"offset":162265,"length":167,"previous":"M16-GAP-00942","next":"M16-GAP-00944"},"M16-GAP-00944":{"line":943,"offset":162432,"length":163,"previous":"M16-GAP-00943","next":"M16-GAP-00945"},"M16-GAP-00945":{"line":944,"offset":162595,"length":171,"previous":"M16-GAP-00944","next":"M16-GAP-00946"},"M16-GAP-00946":{"line":945,"offset":162766,"length":169,"previous":"M16-GAP-00945","next":"M16-GAP-00947"},"M16-GAP-00947":{"line":946,"offset":162935,"length":170,"previous":"M16-GAP-00946","next":"M16-GAP-00948"},"M16-GAP-00948":{"line":947,"offset":163105,"length":172,"previous":"M16-GAP-00947","next":"M16-GAP-00949"},"M16-GAP-00949":{"line":948,"offset":163277,"length":170,"previous":"M16-GAP-00948","next":"M16-GAP-00950"},"M16-GAP-00950":{"line":949,"offset":163447,"length":172,"previous":"M16-GAP-00949","next":"M16-GAP-00951"},"M16-GAP-00951":{"line":950,"offset":163619,"length":175,"previous":"M16-GAP-00950","next":"M16-GAP-00952"},"M16-GAP-00952":{"line":951,"offset":163794,"length":161,"previous":"M16-GAP-00951","next":"M16-GAP-00953"},"M16-GAP-00953":{"line":952,"offset":163955,"length":169,"previous":"M16-GAP-00952","next":"M16-GAP-00954"},"M16-GAP-00954":{"line":953,"offset":164124,"length":164,"previous":"M16-GAP-00953","next":"M16-GAP-00955"},"M16-GAP-00955":{"line":954,"offset":164288,"length":167,"previous":"M16-GAP-00954","next":"M16-GAP-00956"},"M16-GAP-00956":{"line":955,"offset":164455,"length":174,"previous":"M16-GAP-00955","next":"M16-GAP-00957"},"M16-GAP-00957":{"line":956,"offset":164629,"length":162,"previous":"M16-GAP-00956","next":"M16-GAP-00958"},"M16-GAP-00958":{"line":957,"offset":164791,"length":164,"previous":"M16-GAP-00957","next":"M16-GAP-00959"},"M16-GAP-00959":{"line":958,"offset":164955,"length":164,"previous":"M16-GAP-00958","next":"M16-GAP-00960"},"M16-GAP-00960":{"line":959,"offset":165119,"length":168,"previous":"M16-GAP-00959","next":"M16-GAP-00961"},"M16-GAP-00961":{"line":960,"offset":165287,"length":168,"previous":"M16-GAP-00960","next":"M16-GAP-00962"},"M16-GAP-00962":{"line":961,"offset":165455,"length":174,"previous":"M16-GAP-00961","next":"M16-GAP-00963"},"M16-GAP-00963":{"line":962,"offset":165629,"length":174,"previous":"M16-GAP-00962","next":"M16-GAP-00964"},"M16-GAP-00964":{"line":963,"offset":165803,"length":180,"previous":"M16-GAP-00963","next":"M16-GAP-00965"},"M16-GAP-00965":{"line":964,"offset":165983,"length":166,"previous":"M16-GAP-00964","next":"M16-GAP-00966"},"M16-GAP-00966":{"line":965,"offset":166149,"length":172,"previous":"M16-GAP-00965","next":"M16-GAP-00967"},"M16-GAP-00967":{"line":966,"offset":166321,"length":168,"previous":"M16-GAP-00966","next":"M16-GAP-00968"},"M16-GAP-00968":{"line":967,"offset":166489,"length":169,"previous":"M16-GAP-00967","next":"M16-GAP-00969"},"M16-GAP-00969":{"line":968,"offset":166658,"length":162,"previous":"M16-GAP-00968","next":"M16-GAP-00970"},"M16-GAP-00970":{"line":969,"offset":166820,"length":165,"previous":"M16-GAP-00969","next":"M16-GAP-00971"},"M16-GAP-00971":{"line":970,"offset":166985,"length":170,"previous":"M16-GAP-00970","next":"M16-GAP-00972"},"M16-GAP-00972":{"line":971,"offset":167155,"length":176,"previous":"M16-GAP-00971","next":"M16-GAP-00973"},"M16-GAP-00973":{"line":972,"offset":167331,"length":171,"previous":"M16-GAP-00972","next":"M16-GAP-00974"},"M16-GAP-00974":{"line":973,"offset":167502,"length":171,"previous":"M16-GAP-00973","next":"M16-GAP-00975"},"M16-GAP-00975":{"line":974,"offset":167673,"length":169,"previous":"M16-GAP-00974","next":"M16-GAP-00976"},"M16-GAP-00976":{"line":975,"offset":167842,"length":166,"previous":"M16-GAP-00975","next":"M16-GAP-00977"},"M16-GAP-00977":{"line":976,"offset":168008,"length":165,"previous":"M16-GAP-00976","next":"M16-GAP-00978"},"M16-GAP-00978":{"line":977,"offset":168173,"length":168,"previous":"M16-GAP-00977","next":"M16-GAP-00979"},"M16-GAP-00979":{"line":978,"offset":168341,"length":169,"previous":"M16-GAP-00978","next":"M16-GAP-00980"},"M16-GAP-00980":{"line":979,"offset":168510,"length":159,"previous":"M16-GAP-00979","next":"M16-GAP-00981"},"M16-GAP-00981":{"line":980,"offset":168669,"length":179,"previous":"M16-GAP-00980","next":"M16-GAP-00982"},"M16-GAP-00982":{"line":981,"offset":168848,"length":168,"previous":"M16-GAP-00981","next":"M16-GAP-00983"},"M16-GAP-00983":{"line":982,"offset":169016,"length":166,"previous":"M16-GAP-00982","next":"M16-GAP-00984"},"M16-GAP-00984":{"line":983,"offset":169182,"length":169,"previous":"M16-GAP-00983","next":"M16-GAP-00985"},"M16-GAP-00985":{"line":984,"offset":169351,"length":176,"previous":"M16-GAP-00984","next":"M16-GAP-00986"},"M16-GAP-00986":{"line":985,"offset":169527,"length":176,"previous":"M16-GAP-00985","next":"M16-GAP-00987"},"M16-GAP-00987":{"line":986,"offset":169703,"length":162,"previous":"M16-GAP-00986","next":"M16-GAP-00988"},"M16-GAP-00988":{"line":987,"offset":169865,"length":166,"previous":"M16-GAP-00987","next":"M16-GAP-00989"},"M16-GAP-00989":{"line":988,"offset":170031,"length":166,"previous":"M16-GAP-00988","next":"M16-GAP-00990"},"M16-GAP-00990":{"line":989,"offset":170197,"length":169,"previous":"M16-GAP-00989","next":"M16-GAP-00991"},"M16-GAP-00991":{"line":990,"offset":170366,"length":168,"previous":"M16-GAP-00990","next":"M16-GAP-00992"},"M16-GAP-00992":{"line":991,"offset":170534,"length":167,"previous":"M16-GAP-00991","next":"M16-GAP-00993"},"M16-GAP-00993":{"line":992,"offset":170701,"length":169,"previous":"M16-GAP-00992","next":"M16-GAP-00994"},"M16-GAP-00994":{"line":993,"offset":170870,"length":174,"previous":"M16-GAP-00993","next":"M16-GAP-00995"},"M16-GAP-00995":{"line":994,"offset":171044,"length":167,"previous":"M16-GAP-00994","next":"M16-GAP-00996"},"M16-GAP-00996":{"line":995,"offset":171211,"length":171,"previous":"M16-GAP-00995","next":"M16-GAP-00997"},"M16-GAP-00997":{"line":996,"offset":171382,"length":179,"previous":"M16-GAP-00996","next":"M16-GAP-00998"},"M16-GAP-00998":{"line":997,"offset":171561,"length":172,"previous":"M16-GAP-00997","next":"M16-GAP-00999"},"M16-GAP-00999":{"line":998,"offset":171733,"length":171,"previous":"M16-GAP-00998","next":"M16-GAP-01000"},"M16-GAP-01000":{"line":999,"offset":171904,"length":167,"previous":"M16-GAP-00999","next":"M16-GAP-01001"},"M16-GAP-01001":{"line":1000,"offset":172071,"length":178,"previous":"M16-GAP-01000","next":"M16-GAP-01002"},"M16-GAP-01002":{"line":1001,"offset":172249,"length":172,"previous":"M16-GAP-01001","next":"M16-GAP-01003"},"M16-GAP-01003":{"line":1002,"offset":172421,"length":164,"previous":"M16-GAP-01002","next":"M16-GAP-01004"},"M16-GAP-01004":{"line":1003,"offset":172585,"length":163,"previous":"M16-GAP-01003","next":"M16-GAP-01005"},"M16-GAP-01005":{"line":1004,"offset":172748,"length":165,"previous":"M16-GAP-01004","next":"M16-GAP-01006"},"M16-GAP-01006":{"line":1005,"offset":172913,"length":173,"previous":"M16-GAP-01005","next":"M16-GAP-01007"},"M16-GAP-01007":{"line":1006,"offset":173086,"length":176,"previous":"M16-GAP-01006","next":"M16-GAP-01008"},"M16-GAP-01008":{"line":1007,"offset":173262,"length":171,"previous":"M16-GAP-01007","next":"M16-GAP-01009"},"M16-GAP-01009":{"line":1008,"offset":173433,"length":171,"previous":"M16-GAP-01008","next":"M16-GAP-01010"},"M16-GAP-01010":{"line":1009,"offset":173604,"length":173,"previous":"M16-GAP-01009","next":"M16-GAP-01011"},"M16-GAP-01011":{"line":1010,"offset":173777,"length":167,"previous":"M16-GAP-01010","next":"M16-GAP-01012"},"M16-GAP-01012":{"line":1011,"offset":173944,"length":180,"previous":"M16-GAP-01011","next":"M16-GAP-01013"},"M16-GAP-01013":{"line":1012,"offset":174124,"length":171,"previous":"M16-GAP-01012","next":"M16-GAP-01014"},"M16-GAP-01014":{"line":1013,"offset":174295,"length":169,"previous":"M16-GAP-01013","next":"M16-GAP-01015"},"M16-GAP-01015":{"line":1014,"offset":174464,"length":171,"previous":"M16-GAP-01014","next":"M16-GAP-01016"},"M16-GAP-01016":{"line":1015,"offset":174635,"length":169,"previous":"M16-GAP-01015","next":"M16-GAP-01017"},"M16-GAP-01017":{"line":1016,"offset":174804,"length":161,"previous":"M16-GAP-01016","next":"M16-GAP-01018"},"M16-GAP-01018":{"line":1017,"offset":174965,"length":162,"previous":"M16-GAP-01017","next":"M16-GAP-01019"},"M16-GAP-01019":{"line":1018,"offset":175127,"length":172,"previous":"M16-GAP-01018","next":"M16-GAP-01020"},"M16-GAP-01020":{"line":1019,"offset":175299,"length":173,"previous":"M16-GAP-01019","next":"M16-GAP-01021"},"M16-GAP-01021":{"line":1020,"offset":175472,"length":167,"previous":"M16-GAP-01020","next":"M16-GAP-01022"},"M16-GAP-01022":{"line":1021,"offset":175639,"length":170,"previous":"M16-GAP-01021","next":"M16-GAP-01023"},"M16-GAP-01023":{"line":1022,"offset":175809,"length":169,"previous":"M16-GAP-01022","next":"M16-GAP-01024"},"M16-GAP-01024":{"line":1023,"offset":175978,"length":167,"previous":"M16-GAP-01023","next":"M16-GAP-01025"},"M16-GAP-01025":{"line":1024,"offset":176145,"length":190,"previous":"M16-GAP-01024","next":"M16-GAP-01026"},"M16-GAP-01026":{"line":1025,"offset":176335,"length":192,"previous":"M16-GAP-01025","next":"M16-GAP-01027"},"M16-GAP-01027":{"line":1026,"offset":176527,"length":182,"previous":"M16-GAP-01026","next":"M16-GAP-01028"},"M16-GAP-01028":{"line":1027,"offset":176709,"length":177,"previous":"M16-GAP-01027","next":"M16-GAP-01029"},"M16-GAP-01029":{"line":1028,"offset":176886,"length":175,"previous":"M16-GAP-01028","next":"M16-GAP-01030"},"M16-GAP-01030":{"line":1029,"offset":177061,"length":177,"previous":"M16-GAP-01029","next":"M16-GAP-01031"},"M16-GAP-01031":{"line":1030,"offset":177238,"length":164,"previous":"M16-GAP-01030","next":"M16-GAP-01032"},"M16-GAP-01032":{"line":1031,"offset":177402,"length":162,"previous":"M16-GAP-01031","next":"M16-GAP-01033"},"M16-GAP-01033":{"line":1032,"offset":177564,"length":171,"previous":"M16-GAP-01032","next":"M16-GAP-01034"},"M16-GAP-01034":{"line":1033,"offset":177735,"length":168,"previous":"M16-GAP-01033","next":"M16-GAP-01035"},"M16-GAP-01035":{"line":1034,"offset":177903,"length":175,"previous":"M16-GAP-01034","next":"M16-GAP-01036"},"M16-GAP-01036":{"line":1035,"offset":178078,"length":170,"previous":"M16-GAP-01035","next":"M16-GAP-01037"},"M16-GAP-01037":{"line":1036,"offset":178248,"length":170,"previous":"M16-GAP-01036","next":"M16-GAP-01038"},"M16-GAP-01038":{"line":1037,"offset":178418,"length":172,"previous":"M16-GAP-01037","next":"M16-GAP-01039"},"M16-GAP-01039":{"line":1038,"offset":178590,"length":169,"previous":"M16-GAP-01038","next":"M16-GAP-01040"},"M16-GAP-01040":{"line":1039,"offset":178759,"length":170,"previous":"M16-GAP-01039","next":"M16-GAP-01041"},"M16-GAP-01041":{"line":1040,"offset":178929,"length":176,"previous":"M16-GAP-01040","next":"M16-GAP-01042"},"M16-GAP-01042":{"line":1041,"offset":179105,"length":165,"previous":"M16-GAP-01041","next":"M16-GAP-01043"},"M16-GAP-01043":{"line":1042,"offset":179270,"length":170,"previous":"M16-GAP-01042","next":"M16-GAP-01044"},"M16-GAP-01044":{"line":1043,"offset":179440,"length":169,"previous":"M16-GAP-01043","next":"M16-GAP-01045"},"M16-GAP-01045":{"line":1044,"offset":179609,"length":169,"previous":"M16-GAP-01044","next":"M16-GAP-01046"},"M16-GAP-01046":{"line":1045,"offset":179778,"length":167,"previous":"M16-GAP-01045","next":"M16-GAP-01047"},"M16-GAP-01047":{"line":1046,"offset":179945,"length":166,"previous":"M16-GAP-01046","next":"M16-GAP-01048"},"M16-GAP-01048":{"line":1047,"offset":180111,"length":171,"previous":"M16-GAP-01047","next":"M16-GAP-01049"},"M16-GAP-01049":{"line":1048,"offset":180282,"length":174,"previous":"M16-GAP-01048","next":"M16-GAP-01050"},"M16-GAP-01050":{"line":1049,"offset":180456,"length":171,"previous":"M16-GAP-01049","next":"M16-GAP-01051"},"M16-GAP-01051":{"line":1050,"offset":180627,"length":176,"previous":"M16-GAP-01050","next":"M16-GAP-01052"},"M16-GAP-01052":{"line":1051,"offset":180803,"length":175,"previous":"M16-GAP-01051","next":"M16-GAP-01053"},"M16-GAP-01053":{"line":1052,"offset":180978,"length":174,"previous":"M16-GAP-01052","next":"M16-GAP-01054"},"M16-GAP-01054":{"line":1053,"offset":181152,"length":175,"previous":"M16-GAP-01053","next":"M16-GAP-01055"},"M16-GAP-01055":{"line":1054,"offset":181327,"length":174,"previous":"M16-GAP-01054","next":"M16-GAP-01056"},"M16-GAP-01056":{"line":1055,"offset":181501,"length":172,"previous":"M16-GAP-01055","next":"M16-GAP-01057"},"M16-GAP-01057":{"line":1056,"offset":181673,"length":170,"previous":"M16-GAP-01056","next":"M16-GAP-01058"},"M16-GAP-01058":{"line":1057,"offset":181843,"length":175,"previous":"M16-GAP-01057","next":"M16-GAP-01059"},"M16-GAP-01059":{"line":1058,"offset":182018,"length":184,"previous":"M16-GAP-01058","next":"M16-GAP-01060"},"M16-GAP-01060":{"line":1059,"offset":182202,"length":170,"previous":"M16-GAP-01059","next":"M16-GAP-01061"},"M16-GAP-01061":{"line":1060,"offset":182372,"length":177,"previous":"M16-GAP-01060","next":"M16-GAP-01062"},"M16-GAP-01062":{"line":1061,"offset":182549,"length":175,"previous":"M16-GAP-01061","next":"M16-GAP-01063"},"M16-GAP-01063":{"line":1062,"offset":182724,"length":172,"previous":"M16-GAP-01062","next":"M16-GAP-01064"},"M16-GAP-01064":{"line":1063,"offset":182896,"length":175,"previous":"M16-GAP-01063","next":"M16-GAP-01065"},"M16-GAP-01065":{"line":1064,"offset":183071,"length":180,"previous":"M16-GAP-01064","next":"M16-GAP-01066"},"M16-GAP-01066":{"line":1065,"offset":183251,"length":172,"previous":"M16-GAP-01065","next":"M16-GAP-01067"},"M16-GAP-01067":{"line":1066,"offset":183423,"length":174,"previous":"M16-GAP-01066","next":"M16-GAP-01068"},"M16-GAP-01068":{"line":1067,"offset":183597,"length":160,"previous":"M16-GAP-01067","next":"M16-GAP-01069"},"M16-GAP-01069":{"line":1068,"offset":183757,"length":165,"previous":"M16-GAP-01068","next":"M16-GAP-01070"},"M16-GAP-01070":{"line":1069,"offset":183922,"length":166,"previous":"M16-GAP-01069","next":"M16-GAP-01071"},"M16-GAP-01071":{"line":1070,"offset":184088,"length":163,"previous":"M16-GAP-01070","next":"M16-GAP-01072"},"M16-GAP-01072":{"line":1071,"offset":184251,"length":168,"previous":"M16-GAP-01071","next":"M16-GAP-01073"},"M16-GAP-01073":{"line":1072,"offset":184419,"length":178,"previous":"M16-GAP-01072","next":"M16-GAP-01074"},"M16-GAP-01074":{"line":1073,"offset":184597,"length":160,"previous":"M16-GAP-01073","next":"M16-GAP-01075"},"M16-GAP-01075":{"line":1074,"offset":184757,"length":161,"previous":"M16-GAP-01074","next":"M16-GAP-01076"},"M16-GAP-01076":{"line":1075,"offset":184918,"length":165,"previous":"M16-GAP-01075","next":"M16-GAP-01077"},"M16-GAP-01077":{"line":1076,"offset":185083,"length":173,"previous":"M16-GAP-01076","next":"M16-GAP-01078"},"M16-GAP-01078":{"line":1077,"offset":185256,"length":169,"previous":"M16-GAP-01077","next":"M16-GAP-01079"},"M16-GAP-01079":{"line":1078,"offset":185425,"length":166,"previous":"M16-GAP-01078","next":"M16-GAP-01080"},"M16-GAP-01080":{"line":1079,"offset":185591,"length":167,"previous":"M16-GAP-01079","next":"M16-GAP-01081"},"M16-GAP-01081":{"line":1080,"offset":185758,"length":170,"previous":"M16-GAP-01080","next":"M16-GAP-01082"},"M16-GAP-01082":{"line":1081,"offset":185928,"length":163,"previous":"M16-GAP-01081","next":"M16-GAP-01083"},"M16-GAP-01083":{"line":1082,"offset":186091,"length":169,"previous":"M16-GAP-01082","next":"M16-GAP-01084"},"M16-GAP-01084":{"line":1083,"offset":186260,"length":175,"previous":"M16-GAP-01083","next":"M16-GAP-01085"},"M16-GAP-01085":{"line":1084,"offset":186435,"length":175,"previous":"M16-GAP-01084","next":"M16-GAP-01086"},"M16-GAP-01086":{"line":1085,"offset":186610,"length":165,"previous":"M16-GAP-01085","next":"M16-GAP-01087"},"M16-GAP-01087":{"line":1086,"offset":186775,"length":166,"previous":"M16-GAP-01086","next":"M16-GAP-01088"},"M16-GAP-01088":{"line":1087,"offset":186941,"length":161,"previous":"M16-GAP-01087","next":"M16-GAP-01089"},"M16-GAP-01089":{"line":1088,"offset":187102,"length":169,"previous":"M16-GAP-01088","next":"M16-GAP-01090"},"M16-GAP-01090":{"line":1089,"offset":187271,"length":177,"previous":"M16-GAP-01089","next":"M16-GAP-01091"},"M16-GAP-01091":{"line":1090,"offset":187448,"length":179,"previous":"M16-GAP-01090","next":"M16-GAP-01092"},"M16-GAP-01092":{"line":1091,"offset":187627,"length":169,"previous":"M16-GAP-01091","next":"M16-GAP-01093"},"M16-GAP-01093":{"line":1092,"offset":187796,"length":173,"previous":"M16-GAP-01092","next":"M16-GAP-01094"},"M16-GAP-01094":{"line":1093,"offset":187969,"length":179,"previous":"M16-GAP-01093","next":"M16-GAP-01095"},"M16-GAP-01095":{"line":1094,"offset":188148,"length":169,"previous":"M16-GAP-01094","next":"M16-GAP-01096"},"M16-GAP-01096":{"line":1095,"offset":188317,"length":160,"previous":"M16-GAP-01095","next":"M16-GAP-01097"},"M16-GAP-01097":{"line":1096,"offset":188477,"length":182,"previous":"M16-GAP-01096","next":"M16-GAP-01098"},"M16-GAP-01098":{"line":1097,"offset":188659,"length":184,"previous":"M16-GAP-01097","next":"M16-GAP-01099"},"M16-GAP-01099":{"line":1098,"offset":188843,"length":188,"previous":"M16-GAP-01098","next":"M16-GAP-01100"},"M16-GAP-01100":{"line":1099,"offset":189031,"length":180,"previous":"M16-GAP-01099","next":"M16-GAP-01101"},"M16-GAP-01101":{"line":1100,"offset":189211,"length":185,"previous":"M16-GAP-01100","next":"M16-GAP-01102"},"M16-GAP-01102":{"line":1101,"offset":189396,"length":181,"previous":"M16-GAP-01101","next":"M16-GAP-01103"},"M16-GAP-01103":{"line":1102,"offset":189577,"length":186,"previous":"M16-GAP-01102","next":"M16-GAP-01104"},"M16-GAP-01104":{"line":1103,"offset":189763,"length":185,"previous":"M16-GAP-01103","next":"M16-GAP-01105"},"M16-GAP-01105":{"line":1104,"offset":189948,"length":190,"previous":"M16-GAP-01104","next":"M16-GAP-01106"},"M16-GAP-01106":{"line":1105,"offset":190138,"length":176,"previous":"M16-GAP-01105","next":"M16-GAP-01107"},"M16-GAP-01107":{"line":1106,"offset":190314,"length":174,"previous":"M16-GAP-01106","next":"M16-GAP-01108"},"M16-GAP-01108":{"line":1107,"offset":190488,"length":174,"previous":"M16-GAP-01107","next":"M16-GAP-01109"},"M16-GAP-01109":{"line":1108,"offset":190662,"length":180,"previous":"M16-GAP-01108","next":"M16-GAP-01110"},"M16-GAP-01110":{"line":1109,"offset":190842,"length":178,"previous":"M16-GAP-01109","next":"M16-GAP-01111"},"M16-GAP-01111":{"line":1110,"offset":191020,"length":174,"previous":"M16-GAP-01110","next":"M16-GAP-01112"},"M16-GAP-01112":{"line":1111,"offset":191194,"length":180,"previous":"M16-GAP-01111","next":"M16-GAP-01113"},"M16-GAP-01113":{"line":1112,"offset":191374,"length":176,"previous":"M16-GAP-01112","next":"M16-GAP-01114"},"M16-GAP-01114":{"line":1113,"offset":191550,"length":175,"previous":"M16-GAP-01113","next":"M16-GAP-01115"},"M16-GAP-01115":{"line":1114,"offset":191725,"length":175,"previous":"M16-GAP-01114","next":"M16-GAP-01116"},"M16-GAP-01116":{"line":1115,"offset":191900,"length":179,"previous":"M16-GAP-01115","next":"M16-GAP-01117"},"M16-GAP-01117":{"line":1116,"offset":192079,"length":177,"previous":"M16-GAP-01116","next":"M16-GAP-01118"},"M16-GAP-01118":{"line":1117,"offset":192256,"length":170,"previous":"M16-GAP-01117","next":"M16-GAP-01119"},"M16-GAP-01119":{"line":1118,"offset":192426,"length":170,"previous":"M16-GAP-01118","next":"M16-GAP-01120"},"M16-GAP-01120":{"line":1119,"offset":192596,"length":180,"previous":"M16-GAP-01119","next":"M16-GAP-01121"},"M16-GAP-01121":{"line":1120,"offset":192776,"length":162,"previous":"M16-GAP-01120","next":"M16-GAP-01122"},"M16-GAP-01122":{"line":1121,"offset":192938,"length":159,"previous":"M16-GAP-01121","next":"M16-GAP-01123"},"M16-GAP-01123":{"line":1122,"offset":193097,"length":164,"previous":"M16-GAP-01122","next":"M16-GAP-01124"},"M16-GAP-01124":{"line":1123,"offset":193261,"length":169,"previous":"M16-GAP-01123","next":"M16-GAP-01125"},"M16-GAP-01125":{"line":1124,"offset":193430,"length":164,"previous":"M16-GAP-01124","next":"M16-GAP-01126"},"M16-GAP-01126":{"line":1125,"offset":193594,"length":161,"previous":"M16-GAP-01125","next":"M16-GAP-01127"},"M16-GAP-01127":{"line":1126,"offset":193755,"length":166,"previous":"M16-GAP-01126","next":"M16-GAP-01128"},"M16-GAP-01128":{"line":1127,"offset":193921,"length":167,"previous":"M16-GAP-01127","next":"M16-GAP-01129"},"M16-GAP-01129":{"line":1128,"offset":194088,"length":182,"previous":"M16-GAP-01128","next":"M16-GAP-01130"},"M16-GAP-01130":{"line":1129,"offset":194270,"length":175,"previous":"M16-GAP-01129","next":"M16-GAP-01131"},"M16-GAP-01131":{"line":1130,"offset":194445,"length":176,"previous":"M16-GAP-01130","next":"M16-GAP-01132"},"M16-GAP-01132":{"line":1131,"offset":194621,"length":178,"previous":"M16-GAP-01131","next":"M16-GAP-01133"},"M16-GAP-01133":{"line":1132,"offset":194799,"length":178,"previous":"M16-GAP-01132","next":"M16-GAP-01134"},"M16-GAP-01134":{"line":1133,"offset":194977,"length":176,"previous":"M16-GAP-01133","next":"M16-GAP-01135"},"M16-GAP-01135":{"line":1134,"offset":195153,"length":177,"previous":"M16-GAP-01134","next":"M16-GAP-01136"},"M16-GAP-01136":{"line":1135,"offset":195330,"length":167,"previous":"M16-GAP-01135","next":"M16-GAP-01137"},"M16-GAP-01137":{"line":1136,"offset":195497,"length":169,"previous":"M16-GAP-01136","next":"M16-GAP-01138"},"M16-GAP-01138":{"line":1137,"offset":195666,"length":174,"previous":"M16-GAP-01137","next":"M16-GAP-01139"},"M16-GAP-01139":{"line":1138,"offset":195840,"length":168,"previous":"M16-GAP-01138","next":"M16-GAP-01140"},"M16-GAP-01140":{"line":1139,"offset":196008,"length":169,"previous":"M16-GAP-01139","next":"M16-GAP-01141"},"M16-GAP-01141":{"line":1140,"offset":196177,"length":167,"previous":"M16-GAP-01140","next":"M16-GAP-01142"},"M16-GAP-01142":{"line":1141,"offset":196344,"length":167,"previous":"M16-GAP-01141","next":"M16-GAP-01143"},"M16-GAP-01143":{"line":1142,"offset":196511,"length":172,"previous":"M16-GAP-01142","next":"M16-GAP-01144"},"M16-GAP-01144":{"line":1143,"offset":196683,"length":175,"previous":"M16-GAP-01143","next":"M16-GAP-01145"},"M16-GAP-01145":{"line":1144,"offset":196858,"length":166,"previous":"M16-GAP-01144","next":"M16-GAP-01146"},"M16-GAP-01146":{"line":1145,"offset":197024,"length":172,"previous":"M16-GAP-01145","next":"M16-GAP-01147"},"M16-GAP-01147":{"line":1146,"offset":197196,"length":169,"previous":"M16-GAP-01146","next":"M16-GAP-01148"},"M16-GAP-01148":{"line":1147,"offset":197365,"length":170,"previous":"M16-GAP-01147","next":"M16-GAP-01149"},"M16-GAP-01149":{"line":1148,"offset":197535,"length":177,"previous":"M16-GAP-01148","next":"M16-GAP-01150"},"M16-GAP-01150":{"line":1149,"offset":197712,"length":172,"previous":"M16-GAP-01149","next":"M16-GAP-01151"},"M16-GAP-01151":{"line":1150,"offset":197884,"length":164,"previous":"M16-GAP-01150","next":"M16-GAP-01152"},"M16-GAP-01152":{"line":1151,"offset":198048,"length":178,"previous":"M16-GAP-01151","next":"M16-GAP-01153"},"M16-GAP-01153":{"line":1152,"offset":198226,"length":178,"previous":"M16-GAP-01152","next":"M16-GAP-01154"},"M16-GAP-01154":{"line":1153,"offset":198404,"length":178,"previous":"M16-GAP-01153","next":"M16-GAP-01155"},"M16-GAP-01155":{"line":1154,"offset":198582,"length":174,"previous":"M16-GAP-01154","next":"M16-GAP-01156"},"M16-GAP-01156":{"line":1155,"offset":198756,"length":176,"previous":"M16-GAP-01155","next":"M16-GAP-01157"},"M16-GAP-01157":{"line":1156,"offset":198932,"length":170,"previous":"M16-GAP-01156","next":"M16-GAP-01158"},"M16-GAP-01158":{"line":1157,"offset":199102,"length":164,"previous":"M16-GAP-01157","next":"M16-GAP-01159"},"M16-GAP-01159":{"line":1158,"offset":199266,"length":169,"previous":"M16-GAP-01158","next":"M16-GAP-01160"},"M16-GAP-01160":{"line":1159,"offset":199435,"length":179,"previous":"M16-GAP-01159","next":"M16-GAP-01161"},"M16-GAP-01161":{"line":1160,"offset":199614,"length":160,"previous":"M16-GAP-01160","next":"M16-GAP-01162"},"M16-GAP-01162":{"line":1161,"offset":199774,"length":161,"previous":"M16-GAP-01161","next":"M16-GAP-01163"},"M16-GAP-01163":{"line":1162,"offset":199935,"length":169,"previous":"M16-GAP-01162","next":"M16-GAP-01164"},"M16-GAP-01164":{"line":1163,"offset":200104,"length":165,"previous":"M16-GAP-01163","next":"M16-GAP-01165"},"M16-GAP-01165":{"line":1164,"offset":200269,"length":174,"previous":"M16-GAP-01164","next":"M16-GAP-01166"},"M16-GAP-01166":{"line":1165,"offset":200443,"length":166,"previous":"M16-GAP-01165","next":"M16-GAP-01167"},"M16-GAP-01167":{"line":1166,"offset":200609,"length":169,"previous":"M16-GAP-01166","next":"M16-GAP-01168"},"M16-GAP-01168":{"line":1167,"offset":200778,"length":177,"previous":"M16-GAP-01167","next":"M16-GAP-01169"},"M16-GAP-01169":{"line":1168,"offset":200955,"length":167,"previous":"M16-GAP-01168","next":"M16-GAP-01170"},"M16-GAP-01170":{"line":1169,"offset":201122,"length":170,"previous":"M16-GAP-01169","next":"M16-GAP-01171"},"M16-GAP-01171":{"line":1170,"offset":201292,"length":173,"previous":"M16-GAP-01170","next":"M16-GAP-01172"},"M16-GAP-01172":{"line":1171,"offset":201465,"length":167,"previous":"M16-GAP-01171","next":"M16-GAP-01173"},"M16-GAP-01173":{"line":1172,"offset":201632,"length":166,"previous":"M16-GAP-01172","next":"M16-GAP-01174"},"M16-GAP-01174":{"line":1173,"offset":201798,"length":168,"previous":"M16-GAP-01173","next":"M16-GAP-01175"},"M16-GAP-01175":{"line":1174,"offset":201966,"length":176,"previous":"M16-GAP-01174","next":"M16-GAP-01176"},"M16-GAP-01176":{"line":1175,"offset":202142,"length":178,"previous":"M16-GAP-01175","next":"M16-GAP-01177"},"M16-GAP-01177":{"line":1176,"offset":202320,"length":173,"previous":"M16-GAP-01176","next":"M16-GAP-01178"},"M16-GAP-01178":{"line":1177,"offset":202493,"length":171,"previous":"M16-GAP-01177","next":"M16-GAP-01179"},"M16-GAP-01179":{"line":1178,"offset":202664,"length":181,"previous":"M16-GAP-01178","next":"M16-GAP-01180"},"M16-GAP-01180":{"line":1179,"offset":202845,"length":165,"previous":"M16-GAP-01179","next":"M16-GAP-01181"},"M16-GAP-01181":{"line":1180,"offset":203010,"length":170,"previous":"M16-GAP-01180","next":"M16-GAP-01182"},"M16-GAP-01182":{"line":1181,"offset":203180,"length":173,"previous":"M16-GAP-01181","next":"M16-GAP-01183"},"M16-GAP-01183":{"line":1182,"offset":203353,"length":168,"previous":"M16-GAP-01182","next":"M16-GAP-01184"},"M16-GAP-01184":{"line":1183,"offset":203521,"length":169,"previous":"M16-GAP-01183","next":"M16-GAP-01185"},"M16-GAP-01185":{"line":1184,"offset":203690,"length":166,"previous":"M16-GAP-01184","next":"M16-GAP-01186"},"M16-GAP-01186":{"line":1185,"offset":203856,"length":159,"previous":"M16-GAP-01185","next":"M16-GAP-01187"},"M16-GAP-01187":{"line":1186,"offset":204015,"length":169,"previous":"M16-GAP-01186","next":"M16-GAP-01188"},"M16-GAP-01188":{"line":1187,"offset":204184,"length":166,"previous":"M16-GAP-01187","next":"M16-GAP-01189"},"M16-GAP-01189":{"line":1188,"offset":204350,"length":167,"previous":"M16-GAP-01188","next":"M16-GAP-01190"},"M16-GAP-01190":{"line":1189,"offset":204517,"length":161,"previous":"M16-GAP-01189","next":"M16-GAP-01191"},"M16-GAP-01191":{"line":1190,"offset":204678,"length":164,"previous":"M16-GAP-01190","next":"M16-GAP-01192"},"M16-GAP-01192":{"line":1191,"offset":204842,"length":176,"previous":"M16-GAP-01191","next":"M16-GAP-01193"},"M16-GAP-01193":{"line":1192,"offset":205018,"length":169,"previous":"M16-GAP-01192","next":"M16-GAP-01194"},"M16-GAP-01194":{"line":1193,"offset":205187,"length":168,"previous":"M16-GAP-01193","next":"M16-GAP-01195"},"M16-GAP-01195":{"line":1194,"offset":205355,"length":169,"previous":"M16-GAP-01194","next":"M16-GAP-01196"},"M16-GAP-01196":{"line":1195,"offset":205524,"length":170,"previous":"M16-GAP-01195","next":"M16-GAP-01197"},"M16-GAP-01197":{"line":1196,"offset":205694,"length":171,"previous":"M16-GAP-01196","next":"M16-GAP-01198"},"M16-GAP-01198":{"line":1197,"offset":205865,"length":163,"previous":"M16-GAP-01197","next":"M16-GAP-01199"},"M16-GAP-01199":{"line":1198,"offset":206028,"length":166,"previous":"M16-GAP-01198","next":"M16-GAP-01200"},"M16-GAP-01200":{"line":1199,"offset":206194,"length":164,"previous":"M16-GAP-01199","next":"M16-GAP-01201"},"M16-GAP-01201":{"line":1200,"offset":206358,"length":162,"previous":"M16-GAP-01200","next":"M16-GAP-01202"},"M16-GAP-01202":{"line":1201,"offset":206520,"length":166,"previous":"M16-GAP-01201","next":"M16-GAP-01203"},"M16-GAP-01203":{"line":1202,"offset":206686,"length":171,"previous":"M16-GAP-01202","next":"M16-GAP-01204"},"M16-GAP-01204":{"line":1203,"offset":206857,"length":165,"previous":"M16-GAP-01203","next":"M16-GAP-01205"},"M16-GAP-01205":{"line":1204,"offset":207022,"length":165,"previous":"M16-GAP-01204","next":"M16-GAP-01206"},"M16-GAP-01206":{"line":1205,"offset":207187,"length":171,"previous":"M16-GAP-01205","next":"M16-GAP-01207"},"M16-GAP-01207":{"line":1206,"offset":207358,"length":175,"previous":"M16-GAP-01206","next":"M16-GAP-01208"},"M16-GAP-01208":{"line":1207,"offset":207533,"length":159,"previous":"M16-GAP-01207","next":"M16-GAP-01209"},"M16-GAP-01209":{"line":1208,"offset":207692,"length":168,"previous":"M16-GAP-01208","next":"M16-GAP-01210"},"M16-GAP-01210":{"line":1209,"offset":207860,"length":160,"previous":"M16-GAP-01209","next":"M16-GAP-01211"},"M16-GAP-01211":{"line":1210,"offset":208020,"length":159,"previous":"M16-GAP-01210","next":"M16-GAP-01212"},"M16-GAP-01212":{"line":1211,"offset":208179,"length":165,"previous":"M16-GAP-01211","next":"M16-GAP-01213"},"M16-GAP-01213":{"line":1212,"offset":208344,"length":168,"previous":"M16-GAP-01212","next":"M16-GAP-01214"},"M16-GAP-01214":{"line":1213,"offset":208512,"length":169,"previous":"M16-GAP-01213","next":"M16-GAP-01215"},"M16-GAP-01215":{"line":1214,"offset":208681,"length":170,"previous":"M16-GAP-01214","next":"M16-GAP-01216"},"M16-GAP-01216":{"line":1215,"offset":208851,"length":169,"previous":"M16-GAP-01215","next":"M16-GAP-01217"},"M16-GAP-01217":{"line":1216,"offset":209020,"length":163,"previous":"M16-GAP-01216","next":"M16-GAP-01218"},"M16-GAP-01218":{"line":1217,"offset":209183,"length":165,"previous":"M16-GAP-01217","next":"M16-GAP-01219"},"M16-GAP-01219":{"line":1218,"offset":209348,"length":168,"previous":"M16-GAP-01218","next":"M16-GAP-01220"},"M16-GAP-01220":{"line":1219,"offset":209516,"length":171,"previous":"M16-GAP-01219","next":"M16-GAP-01221"},"M16-GAP-01221":{"line":1220,"offset":209687,"length":172,"previous":"M16-GAP-01220","next":"M16-GAP-01222"},"M16-GAP-01222":{"line":1221,"offset":209859,"length":170,"previous":"M16-GAP-01221","next":"M16-GAP-01223"},"M16-GAP-01223":{"line":1222,"offset":210029,"length":165,"previous":"M16-GAP-01222","next":"M16-GAP-01224"},"M16-GAP-01224":{"line":1223,"offset":210194,"length":171,"previous":"M16-GAP-01223","next":"M16-GAP-01225"},"M16-GAP-01225":{"line":1224,"offset":210365,"length":189,"previous":"M16-GAP-01224","next":"M16-GAP-01226"},"M16-GAP-01226":{"line":1225,"offset":210554,"length":165,"previous":"M16-GAP-01225","next":"M16-GAP-01227"},"M16-GAP-01227":{"line":1226,"offset":210719,"length":171,"previous":"M16-GAP-01226","next":"M16-GAP-01228"},"M16-GAP-01228":{"line":1227,"offset":210890,"length":176,"previous":"M16-GAP-01227","next":"M16-GAP-01229"},"M16-GAP-01229":{"line":1228,"offset":211066,"length":165,"previous":"M16-GAP-01228","next":"M16-GAP-01230"},"M16-GAP-01230":{"line":1229,"offset":211231,"length":171,"previous":"M16-GAP-01229","next":"M16-GAP-01231"},"M16-GAP-01231":{"line":1230,"offset":211402,"length":164,"previous":"M16-GAP-01230","next":"M16-GAP-01232"},"M16-GAP-01232":{"line":1231,"offset":211566,"length":168,"previous":"M16-GAP-01231","next":"M16-GAP-01233"},"M16-GAP-01233":{"line":1232,"offset":211734,"length":164,"previous":"M16-GAP-01232","next":"M16-GAP-01234"},"M16-GAP-01234":{"line":1233,"offset":211898,"length":166,"previous":"M16-GAP-01233","next":"M16-GAP-01235"},"M16-GAP-01235":{"line":1234,"offset":212064,"length":171,"previous":"M16-GAP-01234","next":"M16-GAP-01236"},"M16-GAP-01236":{"line":1235,"offset":212235,"length":167,"previous":"M16-GAP-01235","next":"M16-GAP-01237"},"M16-GAP-01237":{"line":1236,"offset":212402,"length":175,"previous":"M16-GAP-01236","next":"M16-GAP-01238"},"M16-GAP-01238":{"line":1237,"offset":212577,"length":172,"previous":"M16-GAP-01237","next":"M16-GAP-01239"},"M16-GAP-01239":{"line":1238,"offset":212749,"length":164,"previous":"M16-GAP-01238","next":"M16-GAP-01240"},"M16-GAP-01240":{"line":1239,"offset":212913,"length":162,"previous":"M16-GAP-01239","next":"M16-GAP-01241"},"M16-GAP-01241":{"line":1240,"offset":213075,"length":169,"previous":"M16-GAP-01240","next":"M16-GAP-01242"},"M16-GAP-01242":{"line":1241,"offset":213244,"length":170,"previous":"M16-GAP-01241","next":"M16-GAP-01243"},"M16-GAP-01243":{"line":1242,"offset":213414,"length":172,"previous":"M16-GAP-01242","next":"M16-GAP-01244"},"M16-GAP-01244":{"line":1243,"offset":213586,"length":170,"previous":"M16-GAP-01243","next":"M16-GAP-01245"},"M16-GAP-01245":{"line":1244,"offset":213756,"length":174,"previous":"M16-GAP-01244","next":"M16-GAP-01246"},"M16-GAP-01246":{"line":1245,"offset":213930,"length":175,"previous":"M16-GAP-01245","next":"M16-GAP-01247"},"M16-GAP-01247":{"line":1246,"offset":214105,"length":177,"previous":"M16-GAP-01246","next":"M16-GAP-01248"},"M16-GAP-01248":{"line":1247,"offset":214282,"length":182,"previous":"M16-GAP-01247","next":"M16-GAP-01249"},"M16-GAP-01249":{"line":1248,"offset":214464,"length":183,"previous":"M16-GAP-01248","next":"M16-GAP-01250"},"M16-GAP-01250":{"line":1249,"offset":214647,"length":185,"previous":"M16-GAP-01249","next":"M16-GAP-01251"},"M16-GAP-01251":{"line":1250,"offset":214832,"length":175,"previous":"M16-GAP-01250","next":"M16-GAP-01252"},"M16-GAP-01252":{"line":1251,"offset":215007,"length":170,"previous":"M16-GAP-01251","next":"M16-GAP-01253"},"M16-GAP-01253":{"line":1252,"offset":215177,"length":171,"previous":"M16-GAP-01252","next":"M16-GAP-01254"},"M16-GAP-01254":{"line":1253,"offset":215348,"length":178,"previous":"M16-GAP-01253","next":"M16-GAP-01255"},"M16-GAP-01255":{"line":1254,"offset":215526,"length":179,"previous":"M16-GAP-01254","next":"M16-GAP-01256"},"M16-GAP-01256":{"line":1255,"offset":215705,"length":181,"previous":"M16-GAP-01255","next":"M16-GAP-01257"},"M16-GAP-01257":{"line":1256,"offset":215886,"length":179,"previous":"M16-GAP-01256","next":"M16-GAP-01258"},"M16-GAP-01258":{"line":1257,"offset":216065,"length":180,"previous":"M16-GAP-01257","next":"M16-GAP-01259"},"M16-GAP-01259":{"line":1258,"offset":216245,"length":182,"previous":"M16-GAP-01258","next":"M16-GAP-01260"},"M16-GAP-01260":{"line":1259,"offset":216427,"length":180,"previous":"M16-GAP-01259","next":"M16-GAP-01261"},"M16-GAP-01261":{"line":1260,"offset":216607,"length":181,"previous":"M16-GAP-01260","next":"M16-GAP-01262"},"M16-GAP-01262":{"line":1261,"offset":216788,"length":183,"previous":"M16-GAP-01261","next":"M16-GAP-01263"},"M16-GAP-01263":{"line":1262,"offset":216971,"length":183,"previous":"M16-GAP-01262","next":"M16-GAP-01264"},"M16-GAP-01264":{"line":1263,"offset":217154,"length":179,"previous":"M16-GAP-01263","next":"M16-GAP-01265"},"M16-GAP-01265":{"line":1264,"offset":217333,"length":180,"previous":"M16-GAP-01264","next":"M16-GAP-01266"},"M16-GAP-01266":{"line":1265,"offset":217513,"length":182,"previous":"M16-GAP-01265","next":"M16-GAP-01267"},"M16-GAP-01267":{"line":1266,"offset":217695,"length":173,"previous":"M16-GAP-01266","next":"M16-GAP-01268"},"M16-GAP-01268":{"line":1267,"offset":217868,"length":177,"previous":"M16-GAP-01267","next":"M16-GAP-01269"},"M16-GAP-01269":{"line":1268,"offset":218045,"length":180,"previous":"M16-GAP-01268","next":"M16-GAP-01270"},"M16-GAP-01270":{"line":1269,"offset":218225,"length":173,"previous":"M16-GAP-01269","next":"M16-GAP-01271"},"M16-GAP-01271":{"line":1270,"offset":218398,"length":179,"previous":"M16-GAP-01270","next":"M16-GAP-01272"},"M16-GAP-01272":{"line":1271,"offset":218577,"length":162,"previous":"M16-GAP-01271","next":"M16-GAP-01273"},"M16-GAP-01273":{"line":1272,"offset":218739,"length":177,"previous":"M16-GAP-01272","next":"M16-GAP-01274"},"M16-GAP-01274":{"line":1273,"offset":218916,"length":172,"previous":"M16-GAP-01273","next":"M16-GAP-01275"},"M16-GAP-01275":{"line":1274,"offset":219088,"length":162,"previous":"M16-GAP-01274","next":"M16-GAP-01276"},"M16-GAP-01276":{"line":1275,"offset":219250,"length":179,"previous":"M16-GAP-01275","next":"M16-GAP-01277"},"M16-GAP-01277":{"line":1276,"offset":219429,"length":165,"previous":"M16-GAP-01276","next":"M16-GAP-01278"},"M16-GAP-01278":{"line":1277,"offset":219594,"length":197,"previous":"M16-GAP-01277","next":"M16-GAP-01279"},"M16-GAP-01279":{"line":1278,"offset":219791,"length":188,"previous":"M16-GAP-01278","next":"M16-GAP-01280"},"M16-GAP-01280":{"line":1279,"offset":219979,"length":170,"previous":"M16-GAP-01279","next":"M16-GAP-01281"},"M16-GAP-01281":{"line":1280,"offset":220149,"length":182,"previous":"M16-GAP-01280","next":"M16-GAP-01282"},"M16-GAP-01282":{"line":1281,"offset":220331,"length":177,"previous":"M16-GAP-01281","next":"M16-GAP-01283"},"M16-GAP-01283":{"line":1282,"offset":220508,"length":180,"previous":"M16-GAP-01282","next":"M16-GAP-01284"},"M16-GAP-01284":{"line":1283,"offset":220688,"length":181,"previous":"M16-GAP-01283","next":"M16-GAP-01285"},"M16-GAP-01285":{"line":1284,"offset":220869,"length":183,"previous":"M16-GAP-01284","next":"M16-GAP-01286"},"M16-GAP-01286":{"line":1285,"offset":221052,"length":187,"previous":"M16-GAP-01285","next":"M16-GAP-01287"},"M16-GAP-01287":{"line":1286,"offset":221239,"length":188,"previous":"M16-GAP-01286","next":"M16-GAP-01288"},"M16-GAP-01288":{"line":1287,"offset":221427,"length":190,"previous":"M16-GAP-01287","next":"M16-GAP-01289"},"M16-GAP-01289":{"line":1288,"offset":221617,"length":188,"previous":"M16-GAP-01288","next":"M16-GAP-01290"},"M16-GAP-01290":{"line":1289,"offset":221805,"length":189,"previous":"M16-GAP-01289","next":"M16-GAP-01291"},"M16-GAP-01291":{"line":1290,"offset":221994,"length":191,"previous":"M16-GAP-01290","next":"M16-GAP-01292"},"M16-GAP-01292":{"line":1291,"offset":222185,"length":178,"previous":"M16-GAP-01291","next":"M16-GAP-01293"},"M16-GAP-01293":{"line":1292,"offset":222363,"length":179,"previous":"M16-GAP-01292","next":"M16-GAP-01294"},"M16-GAP-01294":{"line":1293,"offset":222542,"length":181,"previous":"M16-GAP-01293","next":"M16-GAP-01295"},"M16-GAP-01295":{"line":1294,"offset":222723,"length":178,"previous":"M16-GAP-01294","next":"M16-GAP-01296"},"M16-GAP-01296":{"line":1295,"offset":222901,"length":179,"previous":"M16-GAP-01295","next":"M16-GAP-01297"},"M16-GAP-01297":{"line":1296,"offset":223080,"length":181,"previous":"M16-GAP-01296","next":"M16-GAP-01298"},"M16-GAP-01298":{"line":1297,"offset":223261,"length":176,"previous":"M16-GAP-01297","next":"M16-GAP-01299"},"M16-GAP-01299":{"line":1298,"offset":223437,"length":177,"previous":"M16-GAP-01298","next":"M16-GAP-01300"},"M16-GAP-01300":{"line":1299,"offset":223614,"length":179,"previous":"M16-GAP-01299","next":"M16-GAP-01301"},"M16-GAP-01301":{"line":1300,"offset":223793,"length":165,"previous":"M16-GAP-01300","next":"M16-GAP-01302"},"M16-GAP-01302":{"line":1301,"offset":223958,"length":205,"previous":"M16-GAP-01301","next":"M16-GAP-01303"},"M16-GAP-01303":{"line":1302,"offset":224163,"length":206,"previous":"M16-GAP-01302","next":"M16-GAP-01304"},"M16-GAP-01304":{"line":1303,"offset":224369,"length":208,"previous":"M16-GAP-01303","next":"M16-GAP-01305"},"M16-GAP-01305":{"line":1304,"offset":224577,"length":200,"previous":"M16-GAP-01304","next":"M16-GAP-01306"},"M16-GAP-01306":{"line":1305,"offset":224777,"length":201,"previous":"M16-GAP-01305","next":"M16-GAP-01307"},"M16-GAP-01307":{"line":1306,"offset":224978,"length":203,"previous":"M16-GAP-01306","next":"M16-GAP-01308"},"M16-GAP-01308":{"line":1307,"offset":225181,"length":199,"previous":"M16-GAP-01307","next":"M16-GAP-01309"},"M16-GAP-01309":{"line":1308,"offset":225380,"length":200,"previous":"M16-GAP-01308","next":"M16-GAP-01310"},"M16-GAP-01310":{"line":1309,"offset":225580,"length":202,"previous":"M16-GAP-01309","next":"M16-GAP-01311"},"M16-GAP-01311":{"line":1310,"offset":225782,"length":178,"previous":"M16-GAP-01310","next":"M16-GAP-01312"},"M16-GAP-01312":{"line":1311,"offset":225960,"length":179,"previous":"M16-GAP-01311","next":"M16-GAP-01313"},"M16-GAP-01313":{"line":1312,"offset":226139,"length":181,"previous":"M16-GAP-01312","next":"M16-GAP-01314"},"M16-GAP-01314":{"line":1313,"offset":226320,"length":186,"previous":"M16-GAP-01313","next":"M16-GAP-01315"},"M16-GAP-01315":{"line":1314,"offset":226506,"length":187,"previous":"M16-GAP-01314","next":"M16-GAP-01316"},"M16-GAP-01316":{"line":1315,"offset":226693,"length":189,"previous":"M16-GAP-01315","next":"M16-GAP-01317"},"M16-GAP-01317":{"line":1316,"offset":226882,"length":183,"previous":"M16-GAP-01316","next":"M16-GAP-01318"},"M16-GAP-01318":{"line":1317,"offset":227065,"length":166,"previous":"M16-GAP-01317","next":"M16-GAP-01319"},"M16-GAP-01319":{"line":1318,"offset":227231,"length":172,"previous":"M16-GAP-01318","next":"M16-GAP-01320"},"M16-GAP-01320":{"line":1319,"offset":227403,"length":168,"previous":"M16-GAP-01319","next":"M16-GAP-01321"},"M16-GAP-01321":{"line":1320,"offset":227571,"length":166,"previous":"M16-GAP-01320","next":"M16-GAP-01322"},"M16-GAP-01322":{"line":1321,"offset":227737,"length":170,"previous":"M16-GAP-01321","next":"M16-GAP-01323"},"M16-GAP-01323":{"line":1322,"offset":227907,"length":169,"previous":"M16-GAP-01322","next":"M16-GAP-01324"},"M16-GAP-01324":{"line":1323,"offset":228076,"length":174,"previous":"M16-GAP-01323","next":"M16-GAP-01325"},"M16-GAP-01325":{"line":1324,"offset":228250,"length":167,"previous":"M16-GAP-01324","next":"M16-GAP-01326"},"M16-GAP-01326":{"line":1325,"offset":228417,"length":177,"previous":"M16-GAP-01325","next":"M16-GAP-01327"},"M16-GAP-01327":{"line":1326,"offset":228594,"length":178,"previous":"M16-GAP-01326","next":"M16-GAP-01328"},"M16-GAP-01328":{"line":1327,"offset":228772,"length":180,"previous":"M16-GAP-01327","next":"M16-GAP-01329"},"M16-GAP-01329":{"line":1328,"offset":228952,"length":169,"previous":"M16-GAP-01328","next":"M16-GAP-01330"},"M16-GAP-01330":{"line":1329,"offset":229121,"length":180,"previous":"M16-GAP-01329","next":"M16-GAP-01331"},"M16-GAP-01331":{"line":1330,"offset":229301,"length":188,"previous":"M16-GAP-01330","next":"M16-GAP-01332"},"M16-GAP-01332":{"line":1331,"offset":229489,"length":174,"previous":"M16-GAP-01331","next":"M16-GAP-01333"},"M16-GAP-01333":{"line":1332,"offset":229663,"length":187,"previous":"M16-GAP-01332","next":"M16-GAP-01334"},"M16-GAP-01334":{"line":1333,"offset":229850,"length":177,"previous":"M16-GAP-01333","next":"M16-GAP-01335"},"M16-GAP-01335":{"line":1334,"offset":230027,"length":190,"previous":"M16-GAP-01334","next":"M16-GAP-01336"},"M16-GAP-01336":{"line":1335,"offset":230217,"length":160,"previous":"M16-GAP-01335","next":"M16-GAP-01337"},"M16-GAP-01337":{"line":1336,"offset":230377,"length":166,"previous":"M16-GAP-01336","next":"M16-GAP-01338"},"M16-GAP-01338":{"line":1337,"offset":230543,"length":166,"previous":"M16-GAP-01337","next":"M16-GAP-01339"},"M16-GAP-01339":{"line":1338,"offset":230709,"length":160,"previous":"M16-GAP-01338","next":"M16-GAP-01340"},"M16-GAP-01340":{"line":1339,"offset":230869,"length":180,"previous":"M16-GAP-01339","next":"M16-GAP-01341"},"M16-GAP-01341":{"line":1340,"offset":231049,"length":165,"previous":"M16-GAP-01340","next":"M16-GAP-01342"},"M16-GAP-01342":{"line":1341,"offset":231214,"length":167,"previous":"M16-GAP-01341","next":"M16-GAP-01343"},"M16-GAP-01343":{"line":1342,"offset":231381,"length":165,"previous":"M16-GAP-01342","next":"M16-GAP-01344"},"M16-GAP-01344":{"line":1343,"offset":231546,"length":168,"previous":"M16-GAP-01343","next":"M16-GAP-01345"},"M16-GAP-01345":{"line":1344,"offset":231714,"length":166,"previous":"M16-GAP-01344","next":"M16-GAP-01346"},"M16-GAP-01346":{"line":1345,"offset":231880,"length":173,"previous":"M16-GAP-01345","next":"M16-GAP-01347"},"M16-GAP-01347":{"line":1346,"offset":232053,"length":181,"previous":"M16-GAP-01346","next":"M16-GAP-01348"},"M16-GAP-01348":{"line":1347,"offset":232234,"length":167,"previous":"M16-GAP-01347","next":"M16-GAP-01349"},"M16-GAP-01349":{"line":1348,"offset":232401,"length":182,"previous":"M16-GAP-01348","next":"M16-GAP-01350"},"M16-GAP-01350":{"line":1349,"offset":232583,"length":191,"previous":"M16-GAP-01349","next":"M16-GAP-01351"},"M16-GAP-01351":{"line":1350,"offset":232774,"length":186,"previous":"M16-GAP-01350","next":"M16-GAP-01352"},"M16-GAP-01352":{"line":1351,"offset":232960,"length":184,"previous":"M16-GAP-01351","next":"M16-GAP-01353"},"M16-GAP-01353":{"line":1352,"offset":233144,"length":183,"previous":"M16-GAP-01352","next":"M16-GAP-01354"},"M16-GAP-01354":{"line":1353,"offset":233327,"length":169,"previous":"M16-GAP-01353","next":"M16-GAP-01355"},"M16-GAP-01355":{"line":1354,"offset":233496,"length":177,"previous":"M16-GAP-01354","next":"M16-GAP-01356"},"M16-GAP-01356":{"line":1355,"offset":233673,"length":171,"previous":"M16-GAP-01355","next":"M16-GAP-01357"},"M16-GAP-01357":{"line":1356,"offset":233844,"length":170,"previous":"M16-GAP-01356","next":"M16-GAP-01358"},"M16-GAP-01358":{"line":1357,"offset":234014,"length":166,"previous":"M16-GAP-01357","next":"M16-GAP-01359"},"M16-GAP-01359":{"line":1358,"offset":234180,"length":170,"previous":"M16-GAP-01358","next":"M16-GAP-01360"},"M16-GAP-01360":{"line":1359,"offset":234350,"length":171,"previous":"M16-GAP-01359","next":"M16-GAP-01361"},"M16-GAP-01361":{"line":1360,"offset":234521,"length":170,"previous":"M16-GAP-01360","next":"M16-GAP-01362"},"M16-GAP-01362":{"line":1361,"offset":234691,"length":176,"previous":"M16-GAP-01361","next":"M16-GAP-01363"},"M16-GAP-01363":{"line":1362,"offset":234867,"length":177,"previous":"M16-GAP-01362","next":"M16-GAP-01364"},"M16-GAP-01364":{"line":1363,"offset":235044,"length":179,"previous":"M16-GAP-01363","next":"M16-GAP-01365"},"M16-GAP-01365":{"line":1364,"offset":235223,"length":162,"previous":"M16-GAP-01364","next":"M16-GAP-01366"},"M16-GAP-01366":{"line":1365,"offset":235385,"length":187,"previous":"M16-GAP-01365","next":"M16-GAP-01367"},"M16-GAP-01367":{"line":1366,"offset":235572,"length":188,"previous":"M16-GAP-01366","next":"M16-GAP-01368"},"M16-GAP-01368":{"line":1367,"offset":235760,"length":190,"previous":"M16-GAP-01367","next":"M16-GAP-01369"},"M16-GAP-01369":{"line":1368,"offset":235950,"length":162,"previous":"M16-GAP-01368","next":"M16-GAP-01370"},"M16-GAP-01370":{"line":1369,"offset":236112,"length":166,"previous":"M16-GAP-01369","next":"M16-GAP-01371"},"M16-GAP-01371":{"line":1370,"offset":236278,"length":166,"previous":"M16-GAP-01370","next":"M16-GAP-01372"},"M16-GAP-01372":{"line":1371,"offset":236444,"length":169,"previous":"M16-GAP-01371","next":"M16-GAP-01373"},"M16-GAP-01373":{"line":1372,"offset":236613,"length":170,"previous":"M16-GAP-01372","next":"M16-GAP-01374"},"M16-GAP-01374":{"line":1373,"offset":236783,"length":168,"previous":"M16-GAP-01373","next":"M16-GAP-01375"},"M16-GAP-01375":{"line":1374,"offset":236951,"length":174,"previous":"M16-GAP-01374","next":"M16-GAP-01376"},"M16-GAP-01376":{"line":1375,"offset":237125,"length":174,"previous":"M16-GAP-01375","next":"M16-GAP-01377"},"M16-GAP-01377":{"line":1376,"offset":237299,"length":172,"previous":"M16-GAP-01376","next":"M16-GAP-01378"},"M16-GAP-01378":{"line":1377,"offset":237471,"length":177,"previous":"M16-GAP-01377","next":"M16-GAP-01379"},"M16-GAP-01379":{"line":1378,"offset":237648,"length":180,"previous":"M16-GAP-01378","next":"M16-GAP-01380"},"M16-GAP-01380":{"line":1379,"offset":237828,"length":181,"previous":"M16-GAP-01379","next":"M16-GAP-01381"},"M16-GAP-01381":{"line":1380,"offset":238009,"length":183,"previous":"M16-GAP-01380","next":"M16-GAP-01382"},"M16-GAP-01382":{"line":1381,"offset":238192,"length":176,"previous":"M16-GAP-01381","next":"M16-GAP-01383"},"M16-GAP-01383":{"line":1382,"offset":238368,"length":180,"previous":"M16-GAP-01382","next":"M16-GAP-01384"},"M16-GAP-01384":{"line":1383,"offset":238548,"length":181,"previous":"M16-GAP-01383","next":"M16-GAP-01385"},"M16-GAP-01385":{"line":1384,"offset":238729,"length":183,"previous":"M16-GAP-01384","next":"M16-GAP-01386"},"M16-GAP-01386":{"line":1385,"offset":238912,"length":168,"previous":"M16-GAP-01385","next":"M16-GAP-01387"},"M16-GAP-01387":{"line":1386,"offset":239080,"length":172,"previous":"M16-GAP-01386","next":"M16-GAP-01388"},"M16-GAP-01388":{"line":1387,"offset":239252,"length":172,"previous":"M16-GAP-01387","next":"M16-GAP-01389"},"M16-GAP-01389":{"line":1388,"offset":239424,"length":165,"previous":"M16-GAP-01388","next":"M16-GAP-01390"},"M16-GAP-01390":{"line":1389,"offset":239589,"length":173,"previous":"M16-GAP-01389","next":"M16-GAP-01391"},"M16-GAP-01391":{"line":1390,"offset":239762,"length":165,"previous":"M16-GAP-01390","next":"M16-GAP-01392"},"M16-GAP-01392":{"line":1391,"offset":239927,"length":182,"previous":"M16-GAP-01391","next":"M16-GAP-01393"},"M16-GAP-01393":{"line":1392,"offset":240109,"length":169,"previous":"M16-GAP-01392","next":"M16-GAP-01394"},"M16-GAP-01394":{"line":1393,"offset":240278,"length":172,"previous":"M16-GAP-01393","next":"M16-GAP-01395"},"M16-GAP-01395":{"line":1394,"offset":240450,"length":189,"previous":"M16-GAP-01394","next":"M16-GAP-01396"},"M16-GAP-01396":{"line":1395,"offset":240639,"length":172,"previous":"M16-GAP-01395","next":"M16-GAP-01397"},"M16-GAP-01397":{"line":1396,"offset":240811,"length":164,"previous":"M16-GAP-01396","next":"M16-GAP-01398"},"M16-GAP-01398":{"line":1397,"offset":240975,"length":169,"previous":"M16-GAP-01397","next":"M16-GAP-01399"},"M16-GAP-01399":{"line":1398,"offset":241144,"length":169,"previous":"M16-GAP-01398","next":"M16-GAP-01400"},"M16-GAP-01400":{"line":1399,"offset":241313,"length":175,"previous":"M16-GAP-01399","next":"M16-GAP-01401"},"M16-GAP-01401":{"line":1400,"offset":241488,"length":175,"previous":"M16-GAP-01400","next":"M16-GAP-01402"},"M16-GAP-01402":{"line":1401,"offset":241663,"length":161,"previous":"M16-GAP-01401","next":"M16-GAP-01403"},"M16-GAP-01403":{"line":1402,"offset":241824,"length":175,"previous":"M16-GAP-01402","next":"M16-GAP-01404"},"M16-GAP-01404":{"line":1403,"offset":241999,"length":167,"previous":"M16-GAP-01403","next":"M16-GAP-01405"},"M16-GAP-01405":{"line":1404,"offset":242166,"length":163,"previous":"M16-GAP-01404","next":"M16-GAP-01406"},"M16-GAP-01406":{"line":1405,"offset":242329,"length":183,"previous":"M16-GAP-01405","next":"M16-GAP-01407"},"M16-GAP-01407":{"line":1406,"offset":242512,"length":170,"previous":"M16-GAP-01406","next":"M16-GAP-01408"},"M16-GAP-01408":{"line":1407,"offset":242682,"length":182,"previous":"M16-GAP-01407","next":"M16-GAP-01409"},"M16-GAP-01409":{"line":1408,"offset":242864,"length":162,"previous":"M16-GAP-01408","next":"M16-GAP-01410"},"M16-GAP-01410":{"line":1409,"offset":243026,"length":168,"previous":"M16-GAP-01409","next":"M16-GAP-01411"},"M16-GAP-01411":{"line":1410,"offset":243194,"length":168,"previous":"M16-GAP-01410","next":"M16-GAP-01412"},"M16-GAP-01412":{"line":1411,"offset":243362,"length":178,"previous":"M16-GAP-01411","next":"M16-GAP-01413"},"M16-GAP-01413":{"line":1412,"offset":243540,"length":180,"previous":"M16-GAP-01412","next":"M16-GAP-01414"},"M16-GAP-01414":{"line":1413,"offset":243720,"length":172,"previous":"M16-GAP-01413","next":"M16-GAP-01415"},"M16-GAP-01415":{"line":1414,"offset":243892,"length":188,"previous":"M16-GAP-01414","next":"M16-GAP-01416"},"M16-GAP-01416":{"line":1415,"offset":244080,"length":181,"previous":"M16-GAP-01415","next":"M16-GAP-01417"},"M16-GAP-01417":{"line":1416,"offset":244261,"length":173,"previous":"M16-GAP-01416","next":"M16-GAP-01418"},"M16-GAP-01418":{"line":1417,"offset":244434,"length":183,"previous":"M16-GAP-01417","next":"M16-GAP-01419"},"M16-GAP-01419":{"line":1418,"offset":244617,"length":175,"previous":"M16-GAP-01418","next":"M16-GAP-01420"},"M16-GAP-01420":{"line":1419,"offset":244792,"length":175,"previous":"M16-GAP-01419","next":"M16-GAP-01421"},"M16-GAP-01421":{"line":1420,"offset":244967,"length":172,"previous":"M16-GAP-01420","next":"M16-GAP-01422"},"M16-GAP-01422":{"line":1421,"offset":245139,"length":185,"previous":"M16-GAP-01421","next":"M16-GAP-01423"},"M16-GAP-01423":{"line":1422,"offset":245324,"length":175,"previous":"M16-GAP-01422","next":"M16-GAP-01424"},"M16-GAP-01424":{"line":1423,"offset":245499,"length":174,"previous":"M16-GAP-01423","next":"M16-GAP-01425"},"M16-GAP-01425":{"line":1424,"offset":245673,"length":165,"previous":"M16-GAP-01424","next":"M16-GAP-01426"},"M16-GAP-01426":{"line":1425,"offset":245838,"length":179,"previous":"M16-GAP-01425","next":"M16-GAP-01427"},"M16-GAP-01427":{"line":1426,"offset":246017,"length":181,"previous":"M16-GAP-01426","next":"M16-GAP-01428"},"M16-GAP-01428":{"line":1427,"offset":246198,"length":179,"previous":"M16-GAP-01427","next":"M16-GAP-01429"},"M16-GAP-01429":{"line":1428,"offset":246377,"length":179,"previous":"M16-GAP-01428","next":"M16-GAP-01430"},"M16-GAP-01430":{"line":1429,"offset":246556,"length":175,"previous":"M16-GAP-01429","next":"M16-GAP-01431"},"M16-GAP-01431":{"line":1430,"offset":246731,"length":175,"previous":"M16-GAP-01430","next":"M16-GAP-01432"},"M16-GAP-01432":{"line":1431,"offset":246906,"length":171,"previous":"M16-GAP-01431","next":"M16-GAP-01433"},"M16-GAP-01433":{"line":1432,"offset":247077,"length":177,"previous":"M16-GAP-01432","next":"M16-GAP-01434"},"M16-GAP-01434":{"line":1433,"offset":247254,"length":164,"previous":"M16-GAP-01433","next":"M16-GAP-01435"},"M16-GAP-01435":{"line":1434,"offset":247418,"length":183,"previous":"M16-GAP-01434","next":"M16-GAP-01436"},"M16-GAP-01436":{"line":1435,"offset":247601,"length":177,"previous":"M16-GAP-01435","next":"M16-GAP-01437"},"M16-GAP-01437":{"line":1436,"offset":247778,"length":177,"previous":"M16-GAP-01436","next":"M16-GAP-01438"},"M16-GAP-01438":{"line":1437,"offset":247955,"length":167,"previous":"M16-GAP-01437","next":"M16-GAP-01439"},"M16-GAP-01439":{"line":1438,"offset":248122,"length":172,"previous":"M16-GAP-01438","next":"M16-GAP-01440"},"M16-GAP-01440":{"line":1439,"offset":248294,"length":179,"previous":"M16-GAP-01439","next":"M16-GAP-01441"},"M16-GAP-01441":{"line":1440,"offset":248473,"length":178,"previous":"M16-GAP-01440","next":"M16-GAP-01442"},"M16-GAP-01442":{"line":1441,"offset":248651,"length":173,"previous":"M16-GAP-01441","next":"M16-GAP-01443"},"M16-GAP-01443":{"line":1442,"offset":248824,"length":170,"previous":"M16-GAP-01442","next":"M16-GAP-01444"},"M16-GAP-01444":{"line":1443,"offset":248994,"length":167,"previous":"M16-GAP-01443","next":"M16-GAP-01445"},"M16-GAP-01445":{"line":1444,"offset":249161,"length":173,"previous":"M16-GAP-01444","next":"M16-GAP-01446"},"M16-GAP-01446":{"line":1445,"offset":249334,"length":173,"previous":"M16-GAP-01445","next":"M16-GAP-01447"},"M16-GAP-01447":{"line":1446,"offset":249507,"length":171,"previous":"M16-GAP-01446","next":"M16-GAP-01448"},"M16-GAP-01448":{"line":1447,"offset":249678,"length":175,"previous":"M16-GAP-01447","next":"M16-GAP-01449"},"M16-GAP-01449":{"line":1448,"offset":249853,"length":190,"previous":"M16-GAP-01448","next":"M16-GAP-01450"},"M16-GAP-01450":{"line":1449,"offset":250043,"length":188,"previous":"M16-GAP-01449","next":"M16-GAP-01451"},"M16-GAP-01451":{"line":1450,"offset":250231,"length":183,"previous":"M16-GAP-01450","next":"M16-GAP-01452"},"M16-GAP-01452":{"line":1451,"offset":250414,"length":190,"previous":"M16-GAP-01451","next":"M16-GAP-01453"},"M16-GAP-01453":{"line":1452,"offset":250604,"length":188,"previous":"M16-GAP-01452","next":"M16-GAP-01454"},"M16-GAP-01454":{"line":1453,"offset":250792,"length":195,"previous":"M16-GAP-01453","next":"M16-GAP-01455"},"M16-GAP-01455":{"line":1454,"offset":250987,"length":186,"previous":"M16-GAP-01454","next":"M16-GAP-01456"},"M16-GAP-01456":{"line":1455,"offset":251173,"length":175,"previous":"M16-GAP-01455","next":"M16-GAP-01457"},"M16-GAP-01457":{"line":1456,"offset":251348,"length":197,"previous":"M16-GAP-01456","next":"M16-GAP-01458"},"M16-GAP-01458":{"line":1457,"offset":251545,"length":198,"previous":"M16-GAP-01457","next":"M16-GAP-01459"},"M16-GAP-01459":{"line":1458,"offset":251743,"length":200,"previous":"M16-GAP-01458","next":"M16-GAP-01460"},"M16-GAP-01460":{"line":1459,"offset":251943,"length":197,"previous":"M16-GAP-01459","next":"M16-GAP-01461"},"M16-GAP-01461":{"line":1460,"offset":252140,"length":198,"previous":"M16-GAP-01460","next":"M16-GAP-01462"},"M16-GAP-01462":{"line":1461,"offset":252338,"length":200,"previous":"M16-GAP-01461","next":"M16-GAP-01463"},"M16-GAP-01463":{"line":1462,"offset":252538,"length":173,"previous":"M16-GAP-01462","next":"M16-GAP-01464"},"M16-GAP-01464":{"line":1463,"offset":252711,"length":179,"previous":"M16-GAP-01463","next":"M16-GAP-01465"},"M16-GAP-01465":{"line":1464,"offset":252890,"length":173,"previous":"M16-GAP-01464","next":"M16-GAP-01466"},"M16-GAP-01466":{"line":1465,"offset":253063,"length":171,"previous":"M16-GAP-01465","next":"M16-GAP-01467"},"M16-GAP-01467":{"line":1466,"offset":253234,"length":172,"previous":"M16-GAP-01466","next":"M16-GAP-01468"},"M16-GAP-01468":{"line":1467,"offset":253406,"length":172,"previous":"M16-GAP-01467","next":"M16-GAP-01469"},"M16-GAP-01469":{"line":1468,"offset":253578,"length":169,"previous":"M16-GAP-01468","next":"M16-GAP-01470"},"M16-GAP-01470":{"line":1469,"offset":253747,"length":171,"previous":"M16-GAP-01469","next":"M16-GAP-01471"},"M16-GAP-01471":{"line":1470,"offset":253918,"length":169,"previous":"M16-GAP-01470","next":"M16-GAP-01472"},"M16-GAP-01472":{"line":1471,"offset":254087,"length":168,"previous":"M16-GAP-01471","next":"M16-GAP-01473"},"M16-GAP-01473":{"line":1472,"offset":254255,"length":169,"previous":"M16-GAP-01472","next":"M16-GAP-01474"},"M16-GAP-01474":{"line":1473,"offset":254424,"length":185,"previous":"M16-GAP-01473","next":"M16-GAP-01475"},"M16-GAP-01475":{"line":1474,"offset":254609,"length":185,"previous":"M16-GAP-01474","next":"M16-GAP-01476"},"M16-GAP-01476":{"line":1475,"offset":254794,"length":183,"previous":"M16-GAP-01475","next":"M16-GAP-01477"},"M16-GAP-01477":{"line":1476,"offset":254977,"length":177,"previous":"M16-GAP-01476","next":"M16-GAP-01478"},"M16-GAP-01478":{"line":1477,"offset":255154,"length":162,"previous":"M16-GAP-01477","next":"M16-GAP-01479"},"M16-GAP-01479":{"line":1478,"offset":255316,"length":169,"previous":"M16-GAP-01478","next":"M16-GAP-01480"},"M16-GAP-01480":{"line":1479,"offset":255485,"length":166,"previous":"M16-GAP-01479","next":"M16-GAP-01481"},"M16-GAP-01481":{"line":1480,"offset":255651,"length":178,"previous":"M16-GAP-01480","next":"M16-GAP-01482"},"M16-GAP-01482":{"line":1481,"offset":255829,"length":181,"previous":"M16-GAP-01481","next":"M16-GAP-01483"},"M16-GAP-01483":{"line":1482,"offset":256010,"length":167,"previous":"M16-GAP-01482","next":"M16-GAP-01484"},"M16-GAP-01484":{"line":1483,"offset":256177,"length":194,"previous":"M16-GAP-01483","next":"M16-GAP-01485"},"M16-GAP-01485":{"line":1484,"offset":256371,"length":185,"previous":"M16-GAP-01484","next":"M16-GAP-01486"},"M16-GAP-01486":{"line":1485,"offset":256556,"length":187,"previous":"M16-GAP-01485","next":"M16-GAP-01487"},"M16-GAP-01487":{"line":1486,"offset":256743,"length":195,"previous":"M16-GAP-01486","next":"M16-GAP-01488"},"M16-GAP-01488":{"line":1487,"offset":256938,"length":186,"previous":"M16-GAP-01487","next":"M16-GAP-01489"},"M16-GAP-01489":{"line":1488,"offset":257124,"length":188,"previous":"M16-GAP-01488","next":"M16-GAP-01490"},"M16-GAP-01490":{"line":1489,"offset":257312,"length":194,"previous":"M16-GAP-01489","next":"M16-GAP-01491"},"M16-GAP-01491":{"line":1490,"offset":257506,"length":172,"previous":"M16-GAP-01490","next":"M16-GAP-01492"},"M16-GAP-01492":{"line":1491,"offset":257678,"length":179,"previous":"M16-GAP-01491","next":"M16-GAP-01493"},"M16-GAP-01493":{"line":1492,"offset":257857,"length":179,"previous":"M16-GAP-01492","next":"M16-GAP-01494"},"M16-GAP-01494":{"line":1493,"offset":258036,"length":178,"previous":"M16-GAP-01493","next":"M16-GAP-01495"},"M16-GAP-01495":{"line":1494,"offset":258214,"length":171,"previous":"M16-GAP-01494","next":"M16-GAP-01496"},"M16-GAP-01496":{"line":1495,"offset":258385,"length":176,"previous":"M16-GAP-01495","next":"M16-GAP-01497"},"M16-GAP-01497":{"line":1496,"offset":258561,"length":172,"previous":"M16-GAP-01496","next":"M16-GAP-01498"},"M16-GAP-01498":{"line":1497,"offset":258733,"length":173,"previous":"M16-GAP-01497","next":"M16-GAP-01499"},"M16-GAP-01499":{"line":1498,"offset":258906,"length":173,"previous":"M16-GAP-01498","next":"M16-GAP-01500"},"M16-GAP-01500":{"line":1499,"offset":259079,"length":174,"previous":"M16-GAP-01499","next":"M16-GAP-01501"},"M16-GAP-01501":{"line":1500,"offset":259253,"length":168,"previous":"M16-GAP-01500","next":"M16-GAP-01502"},"M16-GAP-01502":{"line":1501,"offset":259421,"length":179,"previous":"M16-GAP-01501","next":"M16-GAP-01503"},"M16-GAP-01503":{"line":1502,"offset":259600,"length":174,"previous":"M16-GAP-01502","next":"M16-GAP-01504"},"M16-GAP-01504":{"line":1503,"offset":259774,"length":175,"previous":"M16-GAP-01503","next":"M16-GAP-01505"},"M16-GAP-01505":{"line":1504,"offset":259949,"length":178,"previous":"M16-GAP-01504","next":"M16-GAP-01506"},"M16-GAP-01506":{"line":1505,"offset":260127,"length":176,"previous":"M16-GAP-01505","next":"M16-GAP-01507"},"M16-GAP-01507":{"line":1506,"offset":260303,"length":180,"previous":"M16-GAP-01506","next":"M16-GAP-01508"},"M16-GAP-01508":{"line":1507,"offset":260483,"length":176,"previous":"M16-GAP-01507","next":"M16-GAP-01509"},"M16-GAP-01509":{"line":1508,"offset":260659,"length":178,"previous":"M16-GAP-01508","next":"M16-GAP-01510"},"M16-GAP-01510":{"line":1509,"offset":260837,"length":182,"previous":"M16-GAP-01509","next":"M16-GAP-01511"},"M16-GAP-01511":{"line":1510,"offset":261019,"length":185,"previous":"M16-GAP-01510","next":"M16-GAP-01512"},"M16-GAP-01512":{"line":1511,"offset":261204,"length":178,"previous":"M16-GAP-01511","next":"M16-GAP-01513"},"M16-GAP-01513":{"line":1512,"offset":261382,"length":173,"previous":"M16-GAP-01512","next":"M16-GAP-01514"},"M16-GAP-01514":{"line":1513,"offset":261555,"length":170,"previous":"M16-GAP-01513","next":"M16-GAP-01515"},"M16-GAP-01515":{"line":1514,"offset":261725,"length":166,"previous":"M16-GAP-01514","next":"M16-GAP-01516"},"M16-GAP-01516":{"line":1515,"offset":261891,"length":179,"previous":"M16-GAP-01515","next":"M16-GAP-01517"},"M16-GAP-01517":{"line":1516,"offset":262070,"length":170,"previous":"M16-GAP-01516","next":"M16-GAP-01518"},"M16-GAP-01518":{"line":1517,"offset":262240,"length":181,"previous":"M16-GAP-01517","next":"M16-GAP-01519"},"M16-GAP-01519":{"line":1518,"offset":262421,"length":172,"previous":"M16-GAP-01518","next":"M16-GAP-01520"},"M16-GAP-01520":{"line":1519,"offset":262593,"length":184,"previous":"M16-GAP-01519","next":"M16-GAP-01521"},"M16-GAP-01521":{"line":1520,"offset":262777,"length":174,"previous":"M16-GAP-01520","next":"M16-GAP-01522"},"M16-GAP-01522":{"line":1521,"offset":262951,"length":171,"previous":"M16-GAP-01521","next":"M16-GAP-01523"},"M16-GAP-01523":{"line":1522,"offset":263122,"length":183,"previous":"M16-GAP-01522","next":"M16-GAP-01524"},"M16-GAP-01524":{"line":1523,"offset":263305,"length":176,"previous":"M16-GAP-01523","next":"M16-GAP-01525"},"M16-GAP-01525":{"line":1524,"offset":263481,"length":180,"previous":"M16-GAP-01524","next":"M16-GAP-01526"},"M16-GAP-01526":{"line":1525,"offset":263661,"length":174,"previous":"M16-GAP-01525","next":"M16-GAP-01527"},"M16-GAP-01527":{"line":1526,"offset":263835,"length":173,"previous":"M16-GAP-01526","next":"M16-GAP-01528"},"M16-GAP-01528":{"line":1527,"offset":264008,"length":177,"previous":"M16-GAP-01527","next":"M16-GAP-01529"},"M16-GAP-01529":{"line":1528,"offset":264185,"length":173,"previous":"M16-GAP-01528","next":"M16-GAP-01530"},"M16-GAP-01530":{"line":1529,"offset":264358,"length":184,"previous":"M16-GAP-01529","next":"M16-GAP-01531"},"M16-GAP-01531":{"line":1530,"offset":264542,"length":176,"previous":"M16-GAP-01530","next":"M16-GAP-01532"},"M16-GAP-01532":{"line":1531,"offset":264718,"length":177,"previous":"M16-GAP-01531","next":"M16-GAP-01533"},"M16-GAP-01533":{"line":1532,"offset":264895,"length":180,"previous":"M16-GAP-01532","next":"M16-GAP-01534"},"M16-GAP-01534":{"line":1533,"offset":265075,"length":180,"previous":"M16-GAP-01533","next":"M16-GAP-01535"},"M16-GAP-01535":{"line":1534,"offset":265255,"length":187,"previous":"M16-GAP-01534","next":"M16-GAP-01536"},"M16-GAP-01536":{"line":1535,"offset":265442,"length":181,"previous":"M16-GAP-01535","next":"M16-GAP-01537"},"M16-GAP-01537":{"line":1536,"offset":265623,"length":174,"previous":"M16-GAP-01536","next":"M16-GAP-01538"},"M16-GAP-01538":{"line":1537,"offset":265797,"length":176,"previous":"M16-GAP-01537","next":"M16-GAP-01539"},"M16-GAP-01539":{"line":1538,"offset":265973,"length":178,"previous":"M16-GAP-01538","next":"M16-GAP-01540"},"M16-GAP-01540":{"line":1539,"offset":266151,"length":168,"previous":"M16-GAP-01539","next":"M16-GAP-01541"},"M16-GAP-01541":{"line":1540,"offset":266319,"length":170,"previous":"M16-GAP-01540","next":"M16-GAP-01542"},"M16-GAP-01542":{"line":1541,"offset":266489,"length":168,"previous":"M16-GAP-01541","next":"M16-GAP-01543"},"M16-GAP-01543":{"line":1542,"offset":266657,"length":170,"previous":"M16-GAP-01542","next":"M16-GAP-01544"},"M16-GAP-01544":{"line":1543,"offset":266827,"length":178,"previous":"M16-GAP-01543","next":"M16-GAP-01545"},"M16-GAP-01545":{"line":1544,"offset":267005,"length":179,"previous":"M16-GAP-01544","next":"M16-GAP-01546"},"M16-GAP-01546":{"line":1545,"offset":267184,"length":168,"previous":"M16-GAP-01545","next":"M16-GAP-01547"},"M16-GAP-01547":{"line":1546,"offset":267352,"length":177,"previous":"M16-GAP-01546","next":"M16-GAP-01548"},"M16-GAP-01548":{"line":1547,"offset":267529,"length":180,"previous":"M16-GAP-01547","next":"M16-GAP-01549"},"M16-GAP-01549":{"line":1548,"offset":267709,"length":173,"previous":"M16-GAP-01548","next":"M16-GAP-01550"},"M16-GAP-01550":{"line":1549,"offset":267882,"length":173,"previous":"M16-GAP-01549","next":"M16-GAP-01551"},"M16-GAP-01551":{"line":1550,"offset":268055,"length":169,"previous":"M16-GAP-01550","next":"M16-GAP-01552"},"M16-GAP-01552":{"line":1551,"offset":268224,"length":170,"previous":"M16-GAP-01551","next":"M16-GAP-01553"},"M16-GAP-01553":{"line":1552,"offset":268394,"length":178,"previous":"M16-GAP-01552","next":"M16-GAP-01554"},"M16-GAP-01554":{"line":1553,"offset":268572,"length":179,"previous":"M16-GAP-01553","next":"M16-GAP-01555"},"M16-GAP-01555":{"line":1554,"offset":268751,"length":173,"previous":"M16-GAP-01554","next":"M16-GAP-01556"},"M16-GAP-01556":{"line":1555,"offset":268924,"length":175,"previous":"M16-GAP-01555","next":"M16-GAP-01557"},"M16-GAP-01557":{"line":1556,"offset":269099,"length":171,"previous":"M16-GAP-01556","next":"M16-GAP-01558"},"M16-GAP-01558":{"line":1557,"offset":269270,"length":167,"previous":"M16-GAP-01557","next":"M16-GAP-01559"},"M16-GAP-01559":{"line":1558,"offset":269437,"length":170,"previous":"M16-GAP-01558","next":"M16-GAP-01560"},"M16-GAP-01560":{"line":1559,"offset":269607,"length":169,"previous":"M16-GAP-01559","next":"M16-GAP-01561"},"M16-GAP-01561":{"line":1560,"offset":269776,"length":177,"previous":"M16-GAP-01560","next":"M16-GAP-01562"},"M16-GAP-01562":{"line":1561,"offset":269953,"length":180,"previous":"M16-GAP-01561","next":"M16-GAP-01563"},"M16-GAP-01563":{"line":1562,"offset":270133,"length":172,"previous":"M16-GAP-01562","next":"M16-GAP-01564"},"M16-GAP-01564":{"line":1563,"offset":270305,"length":169,"previous":"M16-GAP-01563","next":"M16-GAP-01565"},"M16-GAP-01565":{"line":1564,"offset":270474,"length":168,"previous":"M16-GAP-01564","next":"M16-GAP-01566"},"M16-GAP-01566":{"line":1565,"offset":270642,"length":172,"previous":"M16-GAP-01565","next":"M16-GAP-01567"},"M16-GAP-01567":{"line":1566,"offset":270814,"length":171,"previous":"M16-GAP-01566","next":"M16-GAP-01568"},"M16-GAP-01568":{"line":1567,"offset":270985,"length":172,"previous":"M16-GAP-01567","next":"M16-GAP-01569"},"M16-GAP-01569":{"line":1568,"offset":271157,"length":174,"previous":"M16-GAP-01568","next":"M16-GAP-01570"},"M16-GAP-01570":{"line":1569,"offset":271331,"length":169,"previous":"M16-GAP-01569","next":"M16-GAP-01571"},"M16-GAP-01571":{"line":1570,"offset":271500,"length":171,"previous":"M16-GAP-01570","next":"M16-GAP-01572"},"M16-GAP-01572":{"line":1571,"offset":271671,"length":171,"previous":"M16-GAP-01571","next":"M16-GAP-01573"},"M16-GAP-01573":{"line":1572,"offset":271842,"length":169,"previous":"M16-GAP-01572","next":"M16-GAP-01574"},"M16-GAP-01574":{"line":1573,"offset":272011,"length":172,"previous":"M16-GAP-01573","next":"M16-GAP-01575"},"M16-GAP-01575":{"line":1574,"offset":272183,"length":171,"previous":"M16-GAP-01574","next":"M16-GAP-01576"},"M16-GAP-01576":{"line":1575,"offset":272354,"length":180,"previous":"M16-GAP-01575","next":"M16-GAP-01577"},"M16-GAP-01577":{"line":1576,"offset":272534,"length":175,"previous":"M16-GAP-01576","next":"M16-GAP-01578"},"M16-GAP-01578":{"line":1577,"offset":272709,"length":168,"previous":"M16-GAP-01577","next":"M16-GAP-01579"},"M16-GAP-01579":{"line":1578,"offset":272877,"length":170,"previous":"M16-GAP-01578","next":"M16-GAP-01580"},"M16-GAP-01580":{"line":1579,"offset":273047,"length":179,"previous":"M16-GAP-01579","next":"M16-GAP-01581"},"M16-GAP-01581":{"line":1580,"offset":273226,"length":170,"previous":"M16-GAP-01580","next":"M16-GAP-01582"},"M16-GAP-01582":{"line":1581,"offset":273396,"length":171,"previous":"M16-GAP-01581","next":"M16-GAP-01583"},"M16-GAP-01583":{"line":1582,"offset":273567,"length":176,"previous":"M16-GAP-01582","next":"M16-GAP-01584"},"M16-GAP-01584":{"line":1583,"offset":273743,"length":180,"previous":"M16-GAP-01583","next":"M16-GAP-01585"},"M16-GAP-01585":{"line":1584,"offset":273923,"length":174,"previous":"M16-GAP-01584","next":"M16-GAP-01586"},"M16-GAP-01586":{"line":1585,"offset":274097,"length":173,"previous":"M16-GAP-01585","next":"M16-GAP-01587"},"M16-GAP-01587":{"line":1586,"offset":274270,"length":171,"previous":"M16-GAP-01586","next":"M16-GAP-01588"},"M16-GAP-01588":{"line":1587,"offset":274441,"length":182,"previous":"M16-GAP-01587","next":"M16-GAP-01589"},"M16-GAP-01589":{"line":1588,"offset":274623,"length":173,"previous":"M16-GAP-01588","next":"M16-GAP-01590"},"M16-GAP-01590":{"line":1589,"offset":274796,"length":172,"previous":"M16-GAP-01589","next":"M16-GAP-01591"},"M16-GAP-01591":{"line":1590,"offset":274968,"length":172,"previous":"M16-GAP-01590","next":"M16-GAP-01592"},"M16-GAP-01592":{"line":1591,"offset":275140,"length":178,"previous":"M16-GAP-01591","next":"M16-GAP-01593"},"M16-GAP-01593":{"line":1592,"offset":275318,"length":174,"previous":"M16-GAP-01592","next":"M16-GAP-01594"},"M16-GAP-01594":{"line":1593,"offset":275492,"length":172,"previous":"M16-GAP-01593","next":"M16-GAP-01595"},"M16-GAP-01595":{"line":1594,"offset":275664,"length":174,"previous":"M16-GAP-01594","next":"M16-GAP-01596"},"M16-GAP-01596":{"line":1595,"offset":275838,"length":174,"previous":"M16-GAP-01595","next":"M16-GAP-01597"},"M16-GAP-01597":{"line":1596,"offset":276012,"length":176,"previous":"M16-GAP-01596","next":"M16-GAP-01598"},"M16-GAP-01598":{"line":1597,"offset":276188,"length":185,"previous":"M16-GAP-01597","next":"M16-GAP-01599"},"M16-GAP-01599":{"line":1598,"offset":276373,"length":199,"previous":"M16-GAP-01598","next":"M16-GAP-01600"},"M16-GAP-01600":{"line":1599,"offset":276572,"length":187,"previous":"M16-GAP-01599","next":"M16-GAP-01601"},"M16-GAP-01601":{"line":1600,"offset":276759,"length":178,"previous":"M16-GAP-01600","next":"M16-GAP-01602"},"M16-GAP-01602":{"line":1601,"offset":276937,"length":179,"previous":"M16-GAP-01601","next":"M16-GAP-01603"},"M16-GAP-01603":{"line":1602,"offset":277116,"length":177,"previous":"M16-GAP-01602","next":"M16-GAP-01604"},"M16-GAP-01604":{"line":1603,"offset":277293,"length":172,"previous":"M16-GAP-01603","next":"M16-GAP-01605"},"M16-GAP-01605":{"line":1604,"offset":277465,"length":169,"previous":"M16-GAP-01604","next":"M16-GAP-01606"},"M16-GAP-01606":{"line":1605,"offset":277634,"length":173,"previous":"M16-GAP-01605","next":"M16-GAP-01607"},"M16-GAP-01607":{"line":1606,"offset":277807,"length":176,"previous":"M16-GAP-01606","next":"M16-GAP-01608"},"M16-GAP-01608":{"line":1607,"offset":277983,"length":166,"previous":"M16-GAP-01607","next":"M16-GAP-01609"},"M16-GAP-01609":{"line":1608,"offset":278149,"length":169,"previous":"M16-GAP-01608","next":"M16-GAP-01610"},"M16-GAP-01610":{"line":1609,"offset":278318,"length":167,"previous":"M16-GAP-01609","next":"M16-GAP-01611"},"M16-GAP-01611":{"line":1610,"offset":278485,"length":171,"previous":"M16-GAP-01610","next":"M16-GAP-01612"},"M16-GAP-01612":{"line":1611,"offset":278656,"length":173,"previous":"M16-GAP-01611","next":"M16-GAP-01613"},"M16-GAP-01613":{"line":1612,"offset":278829,"length":179,"previous":"M16-GAP-01612","next":"M16-GAP-01614"},"M16-GAP-01614":{"line":1613,"offset":279008,"length":176,"previous":"M16-GAP-01613","next":"M16-GAP-01615"},"M16-GAP-01615":{"line":1614,"offset":279184,"length":178,"previous":"M16-GAP-01614","next":"M16-GAP-01616"},"M16-GAP-01616":{"line":1615,"offset":279362,"length":169,"previous":"M16-GAP-01615","next":"M16-GAP-01617"},"M16-GAP-01617":{"line":1616,"offset":279531,"length":171,"previous":"M16-GAP-01616","next":"M16-GAP-01618"},"M16-GAP-01618":{"line":1617,"offset":279702,"length":174,"previous":"M16-GAP-01617","next":"M16-GAP-01619"},"M16-GAP-01619":{"line":1618,"offset":279876,"length":177,"previous":"M16-GAP-01618","next":"M16-GAP-01620"},"M16-GAP-01620":{"line":1619,"offset":280053,"length":181,"previous":"M16-GAP-01619","next":"M16-GAP-01621"},"M16-GAP-01621":{"line":1620,"offset":280234,"length":176,"previous":"M16-GAP-01620","next":"M16-GAP-01622"},"M16-GAP-01622":{"line":1621,"offset":280410,"length":175,"previous":"M16-GAP-01621","next":"M16-GAP-01623"},"M16-GAP-01623":{"line":1622,"offset":280585,"length":187,"previous":"M16-GAP-01622","next":"M16-GAP-01624"},"M16-GAP-01624":{"line":1623,"offset":280772,"length":179,"previous":"M16-GAP-01623","next":"M16-GAP-01625"},"M16-GAP-01625":{"line":1624,"offset":280951,"length":177,"previous":"M16-GAP-01624","next":"M16-GAP-01626"},"M16-GAP-01626":{"line":1625,"offset":281128,"length":177,"previous":"M16-GAP-01625","next":"M16-GAP-01627"},"M16-GAP-01627":{"line":1626,"offset":281305,"length":182,"previous":"M16-GAP-01626","next":"M16-GAP-01628"},"M16-GAP-01628":{"line":1627,"offset":281487,"length":175,"previous":"M16-GAP-01627","next":"M16-GAP-01629"},"M16-GAP-01629":{"line":1628,"offset":281662,"length":177,"previous":"M16-GAP-01628","next":"M16-GAP-01630"},"M16-GAP-01630":{"line":1629,"offset":281839,"length":175,"previous":"M16-GAP-01629","next":"M16-GAP-01631"},"M16-GAP-01631":{"line":1630,"offset":282014,"length":180,"previous":"M16-GAP-01630","next":"M16-GAP-01632"},"M16-GAP-01632":{"line":1631,"offset":282194,"length":184,"previous":"M16-GAP-01631","next":"M16-GAP-01633"},"M16-GAP-01633":{"line":1632,"offset":282378,"length":179,"previous":"M16-GAP-01632","next":"M16-GAP-01634"},"M16-GAP-01634":{"line":1633,"offset":282557,"length":177,"previous":"M16-GAP-01633","next":"M16-GAP-01635"},"M16-GAP-01635":{"line":1634,"offset":282734,"length":182,"previous":"M16-GAP-01634","next":"M16-GAP-01636"},"M16-GAP-01636":{"line":1635,"offset":282916,"length":177,"previous":"M16-GAP-01635","next":"M16-GAP-01637"},"M16-GAP-01637":{"line":1636,"offset":283093,"length":181,"previous":"M16-GAP-01636","next":"M16-GAP-01638"},"M16-GAP-01638":{"line":1637,"offset":283274,"length":177,"previous":"M16-GAP-01637","next":"M16-GAP-01639"},"M16-GAP-01639":{"line":1638,"offset":283451,"length":175,"previous":"M16-GAP-01638","next":"M16-GAP-01640"},"M16-GAP-01640":{"line":1639,"offset":283626,"length":175,"previous":"M16-GAP-01639","next":"M16-GAP-01641"},"M16-GAP-01641":{"line":1640,"offset":283801,"length":176,"previous":"M16-GAP-01640","next":"M16-GAP-01642"},"M16-GAP-01642":{"line":1641,"offset":283977,"length":178,"previous":"M16-GAP-01641","next":"M16-GAP-01643"},"M16-GAP-01643":{"line":1642,"offset":284155,"length":195,"previous":"M16-GAP-01642","next":"M16-GAP-01644"},"M16-GAP-01644":{"line":1643,"offset":284350,"length":177,"previous":"M16-GAP-01643","next":"M16-GAP-01645"},"M16-GAP-01645":{"line":1644,"offset":284527,"length":182,"previous":"M16-GAP-01644","next":"M16-GAP-01646"},"M16-GAP-01646":{"line":1645,"offset":284709,"length":184,"previous":"M16-GAP-01645","next":"M16-GAP-01647"},"M16-GAP-01647":{"line":1646,"offset":284893,"length":180,"previous":"M16-GAP-01646","next":"M16-GAP-01648"},"M16-GAP-01648":{"line":1647,"offset":285073,"length":168,"previous":"M16-GAP-01647","next":"M16-GAP-01649"},"M16-GAP-01649":{"line":1648,"offset":285241,"length":171,"previous":"M16-GAP-01648","next":"M16-GAP-01650"},"M16-GAP-01650":{"line":1649,"offset":285412,"length":170,"previous":"M16-GAP-01649","next":"M16-GAP-01651"},"M16-GAP-01651":{"line":1650,"offset":285582,"length":173,"previous":"M16-GAP-01650","next":"M16-GAP-01652"},"M16-GAP-01652":{"line":1651,"offset":285755,"length":170,"previous":"M16-GAP-01651","next":"M16-GAP-01653"},"M16-GAP-01653":{"line":1652,"offset":285925,"length":178,"previous":"M16-GAP-01652","next":"M16-GAP-01654"},"M16-GAP-01654":{"line":1653,"offset":286103,"length":172,"previous":"M16-GAP-01653","next":"M16-GAP-01655"},"M16-GAP-01655":{"line":1654,"offset":286275,"length":184,"previous":"M16-GAP-01654","next":"M16-GAP-01656"},"M16-GAP-01656":{"line":1655,"offset":286459,"length":178,"previous":"M16-GAP-01655","next":"M16-GAP-01657"},"M16-GAP-01657":{"line":1656,"offset":286637,"length":185,"previous":"M16-GAP-01656","next":"M16-GAP-01658"},"M16-GAP-01658":{"line":1657,"offset":286822,"length":175,"previous":"M16-GAP-01657","next":"M16-GAP-01659"},"M16-GAP-01659":{"line":1658,"offset":286997,"length":180,"previous":"M16-GAP-01658","next":"M16-GAP-01660"},"M16-GAP-01660":{"line":1659,"offset":287177,"length":187,"previous":"M16-GAP-01659","next":"M16-GAP-01661"},"M16-GAP-01661":{"line":1660,"offset":287364,"length":177,"previous":"M16-GAP-01660","next":"M16-GAP-01662"},"M16-GAP-01662":{"line":1661,"offset":287541,"length":184,"previous":"M16-GAP-01661","next":"M16-GAP-01663"},"M16-GAP-01663":{"line":1662,"offset":287725,"length":184,"previous":"M16-GAP-01662","next":"M16-GAP-01664"},"M16-GAP-01664":{"line":1663,"offset":287909,"length":182,"previous":"M16-GAP-01663","next":"M16-GAP-01665"},"M16-GAP-01665":{"line":1664,"offset":288091,"length":175,"previous":"M16-GAP-01664","next":"M16-GAP-01666"},"M16-GAP-01666":{"line":1665,"offset":288266,"length":182,"previous":"M16-GAP-01665","next":"M16-GAP-01667"},"M16-GAP-01667":{"line":1666,"offset":288448,"length":187,"previous":"M16-GAP-01666","next":"M16-GAP-01668"},"M16-GAP-01668":{"line":1667,"offset":288635,"length":184,"previous":"M16-GAP-01667","next":"M16-GAP-01669"},"M16-GAP-01669":{"line":1668,"offset":288819,"length":182,"previous":"M16-GAP-01668","next":"M16-GAP-01670"},"M16-GAP-01670":{"line":1669,"offset":289001,"length":190,"previous":"M16-GAP-01669","next":"M16-GAP-01671"},"M16-GAP-01671":{"line":1670,"offset":289191,"length":188,"previous":"M16-GAP-01670","next":"M16-GAP-01672"},"M16-GAP-01672":{"line":1671,"offset":289379,"length":179,"previous":"M16-GAP-01671","next":"M16-GAP-01673"},"M16-GAP-01673":{"line":1672,"offset":289558,"length":178,"previous":"M16-GAP-01672","next":"M16-GAP-01674"},"M16-GAP-01674":{"line":1673,"offset":289736,"length":175,"previous":"M16-GAP-01673","next":"M16-GAP-01675"},"M16-GAP-01675":{"line":1674,"offset":289911,"length":174,"previous":"M16-GAP-01674","next":"M16-GAP-01676"},"M16-GAP-01676":{"line":1675,"offset":290085,"length":187,"previous":"M16-GAP-01675","next":"M16-GAP-01677"},"M16-GAP-01677":{"line":1676,"offset":290272,"length":185,"previous":"M16-GAP-01676","next":"M16-GAP-01678"},"M16-GAP-01678":{"line":1677,"offset":290457,"length":175,"previous":"M16-GAP-01677","next":"M16-GAP-01679"},"M16-GAP-01679":{"line":1678,"offset":290632,"length":182,"previous":"M16-GAP-01678","next":"M16-GAP-01680"},"M16-GAP-01680":{"line":1679,"offset":290814,"length":180,"previous":"M16-GAP-01679","next":"M16-GAP-01681"},"M16-GAP-01681":{"line":1680,"offset":290994,"length":174,"previous":"M16-GAP-01680","next":"M16-GAP-01682"},"M16-GAP-01682":{"line":1681,"offset":291168,"length":174,"previous":"M16-GAP-01681","next":"M16-GAP-01683"},"M16-GAP-01683":{"line":1682,"offset":291342,"length":166,"previous":"M16-GAP-01682","next":"M16-GAP-01684"},"M16-GAP-01684":{"line":1683,"offset":291508,"length":180,"previous":"M16-GAP-01683","next":"M16-GAP-01685"},"M16-GAP-01685":{"line":1684,"offset":291688,"length":183,"previous":"M16-GAP-01684","next":"M16-GAP-01686"},"M16-GAP-01686":{"line":1685,"offset":291871,"length":175,"previous":"M16-GAP-01685","next":"M16-GAP-01687"},"M16-GAP-01687":{"line":1686,"offset":292046,"length":164,"previous":"M16-GAP-01686","next":"M16-GAP-01688"},"M16-GAP-01688":{"line":1687,"offset":292210,"length":176,"previous":"M16-GAP-01687","next":"M16-GAP-01689"},"M16-GAP-01689":{"line":1688,"offset":292386,"length":167,"previous":"M16-GAP-01688","next":"M16-GAP-01690"},"M16-GAP-01690":{"line":1689,"offset":292553,"length":169,"previous":"M16-GAP-01689","next":"M16-GAP-01691"},"M16-GAP-01691":{"line":1690,"offset":292722,"length":178,"previous":"M16-GAP-01690","next":"M16-GAP-01692"},"M16-GAP-01692":{"line":1691,"offset":292900,"length":172,"previous":"M16-GAP-01691","next":"M16-GAP-01693"},"M16-GAP-01693":{"line":1692,"offset":293072,"length":168,"previous":"M16-GAP-01692","next":"M16-GAP-01694"},"M16-GAP-01694":{"line":1693,"offset":293240,"length":168,"previous":"M16-GAP-01693","next":"M16-GAP-01695"},"M16-GAP-01695":{"line":1694,"offset":293408,"length":173,"previous":"M16-GAP-01694","next":"M16-GAP-01696"},"M16-GAP-01696":{"line":1695,"offset":293581,"length":174,"previous":"M16-GAP-01695","next":"M16-GAP-01697"},"M16-GAP-01697":{"line":1696,"offset":293755,"length":174,"previous":"M16-GAP-01696","next":"M16-GAP-01698"},"M16-GAP-01698":{"line":1697,"offset":293929,"length":171,"previous":"M16-GAP-01697","next":"M16-GAP-01699"},"M16-GAP-01699":{"line":1698,"offset":294100,"length":182,"previous":"M16-GAP-01698","next":"M16-GAP-01700"},"M16-GAP-01700":{"line":1699,"offset":294282,"length":185,"previous":"M16-GAP-01699","next":"M16-GAP-01701"},"M16-GAP-01701":{"line":1700,"offset":294467,"length":173,"previous":"M16-GAP-01700","next":"M16-GAP-01702"},"M16-GAP-01702":{"line":1701,"offset":294640,"length":172,"previous":"M16-GAP-01701","next":"M16-GAP-01703"},"M16-GAP-01703":{"line":1702,"offset":294812,"length":181,"previous":"M16-GAP-01702","next":"M16-GAP-01704"},"M16-GAP-01704":{"line":1703,"offset":294993,"length":187,"previous":"M16-GAP-01703","next":"M16-GAP-01705"},"M16-GAP-01705":{"line":1704,"offset":295180,"length":194,"previous":"M16-GAP-01704","next":"M16-GAP-01706"},"M16-GAP-01706":{"line":1705,"offset":295374,"length":173,"previous":"M16-GAP-01705","next":"M16-GAP-01707"},"M16-GAP-01707":{"line":1706,"offset":295547,"length":178,"previous":"M16-GAP-01706","next":"M16-GAP-01708"},"M16-GAP-01708":{"line":1707,"offset":295725,"length":176,"previous":"M16-GAP-01707","next":"M16-GAP-01709"},"M16-GAP-01709":{"line":1708,"offset":295901,"length":169,"previous":"M16-GAP-01708","next":"M16-GAP-01710"},"M16-GAP-01710":{"line":1709,"offset":296070,"length":174,"previous":"M16-GAP-01709","next":"M16-GAP-01711"},"M16-GAP-01711":{"line":1710,"offset":296244,"length":173,"previous":"M16-GAP-01710","next":"M16-GAP-01712"},"M16-GAP-01712":{"line":1711,"offset":296417,"length":172,"previous":"M16-GAP-01711","next":"M16-GAP-01713"},"M16-GAP-01713":{"line":1712,"offset":296589,"length":171,"previous":"M16-GAP-01712","next":"M16-GAP-01714"},"M16-GAP-01714":{"line":1713,"offset":296760,"length":170,"previous":"M16-GAP-01713","next":"M16-GAP-01715"},"M16-GAP-01715":{"line":1714,"offset":296930,"length":175,"previous":"M16-GAP-01714","next":"M16-GAP-01716"},"M16-GAP-01716":{"line":1715,"offset":297105,"length":171,"previous":"M16-GAP-01715","next":"M16-GAP-01717"},"M16-GAP-01717":{"line":1716,"offset":297276,"length":170,"previous":"M16-GAP-01716","next":"M16-GAP-01718"},"M16-GAP-01718":{"line":1717,"offset":297446,"length":170,"previous":"M16-GAP-01717","next":"M16-GAP-01719"},"M16-GAP-01719":{"line":1718,"offset":297616,"length":171,"previous":"M16-GAP-01718","next":"M16-GAP-01720"},"M16-GAP-01720":{"line":1719,"offset":297787,"length":171,"previous":"M16-GAP-01719","next":"M16-GAP-01721"},"M16-GAP-01721":{"line":1720,"offset":297958,"length":174,"previous":"M16-GAP-01720","next":"M16-GAP-01722"},"M16-GAP-01722":{"line":1721,"offset":298132,"length":174,"previous":"M16-GAP-01721","next":"M16-GAP-01723"},"M16-GAP-01723":{"line":1722,"offset":298306,"length":172,"previous":"M16-GAP-01722","next":"M16-GAP-01724"},"M16-GAP-01724":{"line":1723,"offset":298478,"length":170,"previous":"M16-GAP-01723","next":"M16-GAP-01725"},"M16-GAP-01725":{"line":1724,"offset":298648,"length":171,"previous":"M16-GAP-01724","next":"M16-GAP-01726"},"M16-GAP-01726":{"line":1725,"offset":298819,"length":179,"previous":"M16-GAP-01725","next":"M16-GAP-01727"},"M16-GAP-01727":{"line":1726,"offset":298998,"length":174,"previous":"M16-GAP-01726","next":"M16-GAP-01728"},"M16-GAP-01728":{"line":1727,"offset":299172,"length":172,"previous":"M16-GAP-01727","next":"M16-GAP-01729"},"M16-GAP-01729":{"line":1728,"offset":299344,"length":173,"previous":"M16-GAP-01728","next":"M16-GAP-01730"},"M16-GAP-01730":{"line":1729,"offset":299517,"length":173,"previous":"M16-GAP-01729","next":"M16-GAP-01731"},"M16-GAP-01731":{"line":1730,"offset":299690,"length":175,"previous":"M16-GAP-01730","next":"M16-GAP-01732"},"M16-GAP-01732":{"line":1731,"offset":299865,"length":180,"previous":"M16-GAP-01731","next":"M16-GAP-01733"},"M16-GAP-01733":{"line":1732,"offset":300045,"length":173,"previous":"M16-GAP-01732","next":"M16-GAP-01734"},"M16-GAP-01734":{"line":1733,"offset":300218,"length":173,"previous":"M16-GAP-01733","next":"M16-GAP-01735"},"M16-GAP-01735":{"line":1734,"offset":300391,"length":173,"previous":"M16-GAP-01734","next":"M16-GAP-01736"},"M16-GAP-01736":{"line":1735,"offset":300564,"length":167,"previous":"M16-GAP-01735","next":"M16-GAP-01737"},"M16-GAP-01737":{"line":1736,"offset":300731,"length":166,"previous":"M16-GAP-01736","next":"M16-GAP-01738"},"M16-GAP-01738":{"line":1737,"offset":300897,"length":170,"previous":"M16-GAP-01737","next":"M16-GAP-01739"},"M16-GAP-01739":{"line":1738,"offset":301067,"length":180,"previous":"M16-GAP-01738","next":"M16-GAP-01740"},"M16-GAP-01740":{"line":1739,"offset":301247,"length":179,"previous":"M16-GAP-01739","next":"M16-GAP-01741"},"M16-GAP-01741":{"line":1740,"offset":301426,"length":173,"previous":"M16-GAP-01740","next":"M16-GAP-01742"},"M16-GAP-01742":{"line":1741,"offset":301599,"length":183,"previous":"M16-GAP-01741","next":"M16-GAP-01743"},"M16-GAP-01743":{"line":1742,"offset":301782,"length":172,"previous":"M16-GAP-01742","next":"M16-GAP-01744"},"M16-GAP-01744":{"line":1743,"offset":301954,"length":168,"previous":"M16-GAP-01743","next":"M16-GAP-01745"},"M16-GAP-01745":{"line":1744,"offset":302122,"length":173,"previous":"M16-GAP-01744","next":"M16-GAP-01746"},"M16-GAP-01746":{"line":1745,"offset":302295,"length":172,"previous":"M16-GAP-01745","next":"M16-GAP-01747"},"M16-GAP-01747":{"line":1746,"offset":302467,"length":175,"previous":"M16-GAP-01746","next":"M16-GAP-01748"},"M16-GAP-01748":{"line":1747,"offset":302642,"length":174,"previous":"M16-GAP-01747","next":"M16-GAP-01749"},"M16-GAP-01749":{"line":1748,"offset":302816,"length":178,"previous":"M16-GAP-01748","next":"M16-GAP-01750"},"M16-GAP-01750":{"line":1749,"offset":302994,"length":170,"previous":"M16-GAP-01749","next":"M16-GAP-01751"},"M16-GAP-01751":{"line":1750,"offset":303164,"length":169,"previous":"M16-GAP-01750","next":"M16-GAP-01752"},"M16-GAP-01752":{"line":1751,"offset":303333,"length":177,"previous":"M16-GAP-01751","next":"M16-GAP-01753"},"M16-GAP-01753":{"line":1752,"offset":303510,"length":172,"previous":"M16-GAP-01752","next":"M16-GAP-01754"},"M16-GAP-01754":{"line":1753,"offset":303682,"length":173,"previous":"M16-GAP-01753","next":"M16-GAP-01755"},"M16-GAP-01755":{"line":1754,"offset":303855,"length":173,"previous":"M16-GAP-01754","next":"M16-GAP-01756"},"M16-GAP-01756":{"line":1755,"offset":304028,"length":175,"previous":"M16-GAP-01755","next":"M16-GAP-01757"},"M16-GAP-01757":{"line":1756,"offset":304203,"length":180,"previous":"M16-GAP-01756","next":"M16-GAP-01758"},"M16-GAP-01758":{"line":1757,"offset":304383,"length":173,"previous":"M16-GAP-01757","next":"M16-GAP-01759"},"M16-GAP-01759":{"line":1758,"offset":304556,"length":173,"previous":"M16-GAP-01758","next":"M16-GAP-01760"},"M16-GAP-01760":{"line":1759,"offset":304729,"length":178,"previous":"M16-GAP-01759","next":"M16-GAP-01761"},"M16-GAP-01761":{"line":1760,"offset":304907,"length":189,"previous":"M16-GAP-01760","next":"M16-GAP-01762"},"M16-GAP-01762":{"line":1761,"offset":305096,"length":174,"previous":"M16-GAP-01761","next":"M16-GAP-01763"},"M16-GAP-01763":{"line":1762,"offset":305270,"length":181,"previous":"M16-GAP-01762","next":"M16-GAP-01764"},"M16-GAP-01764":{"line":1763,"offset":305451,"length":173,"previous":"M16-GAP-01763","next":"M16-GAP-01765"},"M16-GAP-01765":{"line":1764,"offset":305624,"length":176,"previous":"M16-GAP-01764","next":"M16-GAP-01766"},"M16-GAP-01766":{"line":1765,"offset":305800,"length":176,"previous":"M16-GAP-01765","next":"M16-GAP-01767"},"M16-GAP-01767":{"line":1766,"offset":305976,"length":173,"previous":"M16-GAP-01766","next":"M16-GAP-01768"},"M16-GAP-01768":{"line":1767,"offset":306149,"length":176,"previous":"M16-GAP-01767","next":"M16-GAP-01769"},"M16-GAP-01769":{"line":1768,"offset":306325,"length":169,"previous":"M16-GAP-01768","next":"M16-GAP-01770"},"M16-GAP-01770":{"line":1769,"offset":306494,"length":176,"previous":"M16-GAP-01769","next":"M16-GAP-01771"},"M16-GAP-01771":{"line":1770,"offset":306670,"length":174,"previous":"M16-GAP-01770","next":"M16-GAP-01772"},"M16-GAP-01772":{"line":1771,"offset":306844,"length":174,"previous":"M16-GAP-01771","next":"M16-GAP-01773"},"M16-GAP-01773":{"line":1772,"offset":307018,"length":174,"previous":"M16-GAP-01772","next":"M16-GAP-01774"},"M16-GAP-01774":{"line":1773,"offset":307192,"length":172,"previous":"M16-GAP-01773","next":"M16-GAP-01775"},"M16-GAP-01775":{"line":1774,"offset":307364,"length":169,"previous":"M16-GAP-01774","next":"M16-GAP-01776"},"M16-GAP-01776":{"line":1775,"offset":307533,"length":176,"previous":"M16-GAP-01775","next":"M16-GAP-01777"},"M16-GAP-01777":{"line":1776,"offset":307709,"length":170,"previous":"M16-GAP-01776","next":"M16-GAP-01778"},"M16-GAP-01778":{"line":1777,"offset":307879,"length":176,"previous":"M16-GAP-01777","next":"M16-GAP-01779"},"M16-GAP-01779":{"line":1778,"offset":308055,"length":167,"previous":"M16-GAP-01778","next":"M16-GAP-01780"},"M16-GAP-01780":{"line":1779,"offset":308222,"length":171,"previous":"M16-GAP-01779","next":"M16-GAP-01781"},"M16-GAP-01781":{"line":1780,"offset":308393,"length":177,"previous":"M16-GAP-01780","next":"M16-GAP-01782"},"M16-GAP-01782":{"line":1781,"offset":308570,"length":168,"previous":"M16-GAP-01781","next":"M16-GAP-01783"},"M16-GAP-01783":{"line":1782,"offset":308738,"length":174,"previous":"M16-GAP-01782","next":"M16-GAP-01784"},"M16-GAP-01784":{"line":1783,"offset":308912,"length":166,"previous":"M16-GAP-01783","next":"M16-GAP-01785"},"M16-GAP-01785":{"line":1784,"offset":309078,"length":165,"previous":"M16-GAP-01784","next":"M16-GAP-01786"},"M16-GAP-01786":{"line":1785,"offset":309243,"length":168,"previous":"M16-GAP-01785","next":"M16-GAP-01787"},"M16-GAP-01787":{"line":1786,"offset":309411,"length":167,"previous":"M16-GAP-01786","next":"M16-GAP-01788"},"M16-GAP-01788":{"line":1787,"offset":309578,"length":168,"previous":"M16-GAP-01787","next":"M16-GAP-01789"},"M16-GAP-01789":{"line":1788,"offset":309746,"length":171,"previous":"M16-GAP-01788","next":"M16-GAP-01790"},"M16-GAP-01790":{"line":1789,"offset":309917,"length":169,"previous":"M16-GAP-01789","next":"M16-GAP-01791"},"M16-GAP-01791":{"line":1790,"offset":310086,"length":177,"previous":"M16-GAP-01790","next":"M16-GAP-01792"},"M16-GAP-01792":{"line":1791,"offset":310263,"length":163,"previous":"M16-GAP-01791","next":"M16-GAP-01793"},"M16-GAP-01793":{"line":1792,"offset":310426,"length":162,"previous":"M16-GAP-01792","next":"M16-GAP-01794"},"M16-GAP-01794":{"line":1793,"offset":310588,"length":163,"previous":"M16-GAP-01793","next":"M16-GAP-01795"},"M16-GAP-01795":{"line":1794,"offset":310751,"length":170,"previous":"M16-GAP-01794","next":"M16-GAP-01796"},"M16-GAP-01796":{"line":1795,"offset":310921,"length":172,"previous":"M16-GAP-01795","next":"M16-GAP-01797"},"M16-GAP-01797":{"line":1796,"offset":311093,"length":181,"previous":"M16-GAP-01796","next":"M16-GAP-01798"},"M16-GAP-01798":{"line":1797,"offset":311274,"length":166,"previous":"M16-GAP-01797","next":"M16-GAP-01799"},"M16-GAP-01799":{"line":1798,"offset":311440,"length":175,"previous":"M16-GAP-01798","next":"M16-GAP-01800"},"M16-GAP-01800":{"line":1799,"offset":311615,"length":185,"previous":"M16-GAP-01799","next":"M16-GAP-01801"},"M16-GAP-01801":{"line":1800,"offset":311800,"length":172,"previous":"M16-GAP-01800","next":"M16-GAP-01802"},"M16-GAP-01802":{"line":1801,"offset":311972,"length":177,"previous":"M16-GAP-01801","next":"M16-GAP-01803"},"M16-GAP-01803":{"line":1802,"offset":312149,"length":175,"previous":"M16-GAP-01802","next":"M16-GAP-01804"},"M16-GAP-01804":{"line":1803,"offset":312324,"length":175,"previous":"M16-GAP-01803","next":"M16-GAP-01805"},"M16-GAP-01805":{"line":1804,"offset":312499,"length":174,"previous":"M16-GAP-01804","next":"M16-GAP-01806"},"M16-GAP-01806":{"line":1805,"offset":312673,"length":172,"previous":"M16-GAP-01805","next":"M16-GAP-01807"},"M16-GAP-01807":{"line":1806,"offset":312845,"length":184,"previous":"M16-GAP-01806","next":"M16-GAP-01808"},"M16-GAP-01808":{"line":1807,"offset":313029,"length":164,"previous":"M16-GAP-01807","next":"M16-GAP-01809"},"M16-GAP-01809":{"line":1808,"offset":313193,"length":166,"previous":"M16-GAP-01808","next":"M16-GAP-01810"},"M16-GAP-01810":{"line":1809,"offset":313359,"length":163,"previous":"M16-GAP-01809","next":"M16-GAP-01811"},"M16-GAP-01811":{"line":1810,"offset":313522,"length":170,"previous":"M16-GAP-01810","next":"M16-GAP-01812"},"M16-GAP-01812":{"line":1811,"offset":313692,"length":180,"previous":"M16-GAP-01811","next":"M16-GAP-01813"},"M16-GAP-01813":{"line":1812,"offset":313872,"length":186,"previous":"M16-GAP-01812","next":"M16-GAP-01814"},"M16-GAP-01814":{"line":1813,"offset":314058,"length":165,"previous":"M16-GAP-01813","next":"M16-GAP-01815"},"M16-GAP-01815":{"line":1814,"offset":314223,"length":174,"previous":"M16-GAP-01814","next":"M16-GAP-01816"},"M16-GAP-01816":{"line":1815,"offset":314397,"length":166,"previous":"M16-GAP-01815","next":"M16-GAP-01817"},"M16-GAP-01817":{"line":1816,"offset":314563,"length":170,"previous":"M16-GAP-01816","next":"M16-GAP-01818"},"M16-GAP-01818":{"line":1817,"offset":314733,"length":171,"previous":"M16-GAP-01817","next":"M16-GAP-01819"},"M16-GAP-01819":{"line":1818,"offset":314904,"length":173,"previous":"M16-GAP-01818","next":"M16-GAP-01820"},"M16-GAP-01820":{"line":1819,"offset":315077,"length":178,"previous":"M16-GAP-01819","next":"M16-GAP-01821"},"M16-GAP-01821":{"line":1820,"offset":315255,"length":171,"previous":"M16-GAP-01820","next":"M16-GAP-01822"},"M16-GAP-01822":{"line":1821,"offset":315426,"length":173,"previous":"M16-GAP-01821","next":"M16-GAP-01823"},"M16-GAP-01823":{"line":1822,"offset":315599,"length":172,"previous":"M16-GAP-01822","next":"M16-GAP-01824"},"M16-GAP-01824":{"line":1823,"offset":315771,"length":171,"previous":"M16-GAP-01823","next":"M16-GAP-01825"},"M16-GAP-01825":{"line":1824,"offset":315942,"length":169,"previous":"M16-GAP-01824","next":"M16-GAP-01826"},"M16-GAP-01826":{"line":1825,"offset":316111,"length":169,"previous":"M16-GAP-01825","next":"M16-GAP-01827"},"M16-GAP-01827":{"line":1826,"offset":316280,"length":176,"previous":"M16-GAP-01826","next":"M16-GAP-01828"},"M16-GAP-01828":{"line":1827,"offset":316456,"length":174,"previous":"M16-GAP-01827","next":"M16-GAP-01829"},"M16-GAP-01829":{"line":1828,"offset":316630,"length":173,"previous":"M16-GAP-01828","next":"M16-GAP-01830"},"M16-GAP-01830":{"line":1829,"offset":316803,"length":172,"previous":"M16-GAP-01829","next":"M16-GAP-01831"},"M16-GAP-01831":{"line":1830,"offset":316975,"length":170,"previous":"M16-GAP-01830","next":"M16-GAP-01832"},"M16-GAP-01832":{"line":1831,"offset":317145,"length":175,"previous":"M16-GAP-01831","next":"M16-GAP-01833"},"M16-GAP-01833":{"line":1832,"offset":317320,"length":168,"previous":"M16-GAP-01832","next":"M16-GAP-01834"},"M16-GAP-01834":{"line":1833,"offset":317488,"length":171,"previous":"M16-GAP-01833","next":"M16-GAP-01835"},"M16-GAP-01835":{"line":1834,"offset":317659,"length":176,"previous":"M16-GAP-01834","next":"M16-GAP-01836"},"M16-GAP-01836":{"line":1835,"offset":317835,"length":172,"previous":"M16-GAP-01835","next":"M16-GAP-01837"},"M16-GAP-01837":{"line":1836,"offset":318007,"length":175,"previous":"M16-GAP-01836","next":"M16-GAP-01838"},"M16-GAP-01838":{"line":1837,"offset":318182,"length":170,"previous":"M16-GAP-01837","next":"M16-GAP-01839"},"M16-GAP-01839":{"line":1838,"offset":318352,"length":170,"previous":"M16-GAP-01838","next":"M16-GAP-01840"},"M16-GAP-01840":{"line":1839,"offset":318522,"length":170,"previous":"M16-GAP-01839","next":"M16-GAP-01841"},"M16-GAP-01841":{"line":1840,"offset":318692,"length":173,"previous":"M16-GAP-01840","next":"M16-GAP-01842"},"M16-GAP-01842":{"line":1841,"offset":318865,"length":171,"previous":"M16-GAP-01841","next":"M16-GAP-01843"},"M16-GAP-01843":{"line":1842,"offset":319036,"length":165,"previous":"M16-GAP-01842","next":"M16-GAP-01844"},"M16-GAP-01844":{"line":1843,"offset":319201,"length":170,"previous":"M16-GAP-01843","next":"M16-GAP-01845"},"M16-GAP-01845":{"line":1844,"offset":319371,"length":183,"previous":"M16-GAP-01844","next":"M16-GAP-01846"},"M16-GAP-01846":{"line":1845,"offset":319554,"length":173,"previous":"M16-GAP-01845","next":"M16-GAP-01847"},"M16-GAP-01847":{"line":1846,"offset":319727,"length":172,"previous":"M16-GAP-01846","next":"M16-GAP-01848"},"M16-GAP-01848":{"line":1847,"offset":319899,"length":160,"previous":"M16-GAP-01847","next":"M16-GAP-01849"},"M16-GAP-01849":{"line":1848,"offset":320059,"length":166,"previous":"M16-GAP-01848","next":"M16-GAP-01850"},"M16-GAP-01850":{"line":1849,"offset":320225,"length":160,"previous":"M16-GAP-01849","next":"M16-GAP-01851"},"M16-GAP-01851":{"line":1850,"offset":320385,"length":162,"previous":"M16-GAP-01850","next":"M16-GAP-01852"},"M16-GAP-01852":{"line":1851,"offset":320547,"length":164,"previous":"M16-GAP-01851","next":"M16-GAP-01853"},"M16-GAP-01853":{"line":1852,"offset":320711,"length":165,"previous":"M16-GAP-01852","next":"M16-GAP-01854"},"M16-GAP-01854":{"line":1853,"offset":320876,"length":161,"previous":"M16-GAP-01853","next":"M16-GAP-01855"},"M16-GAP-01855":{"line":1854,"offset":321037,"length":171,"previous":"M16-GAP-01854","next":"M16-GAP-01856"},"M16-GAP-01856":{"line":1855,"offset":321208,"length":167,"previous":"M16-GAP-01855","next":"M16-GAP-01857"},"M16-GAP-01857":{"line":1856,"offset":321375,"length":174,"previous":"M16-GAP-01856","next":"M16-GAP-01858"},"M16-GAP-01858":{"line":1857,"offset":321549,"length":168,"previous":"M16-GAP-01857","next":"M16-GAP-01859"},"M16-GAP-01859":{"line":1858,"offset":321717,"length":165,"previous":"M16-GAP-01858","next":"M16-GAP-01860"},"M16-GAP-01860":{"line":1859,"offset":321882,"length":160,"previous":"M16-GAP-01859","next":"M16-GAP-01861"},"M16-GAP-01861":{"line":1860,"offset":322042,"length":172,"previous":"M16-GAP-01860","next":"M16-GAP-01862"},"M16-GAP-01862":{"line":1861,"offset":322214,"length":161,"previous":"M16-GAP-01861","next":"M16-GAP-01863"},"M16-GAP-01863":{"line":1862,"offset":322375,"length":162,"previous":"M16-GAP-01862","next":"M16-GAP-01864"},"M16-GAP-01864":{"line":1863,"offset":322537,"length":165,"previous":"M16-GAP-01863","next":"M16-GAP-01865"},"M16-GAP-01865":{"line":1864,"offset":322702,"length":173,"previous":"M16-GAP-01864","next":"M16-GAP-01866"},"M16-GAP-01866":{"line":1865,"offset":322875,"length":167,"previous":"M16-GAP-01865","next":"M16-GAP-01867"},"M16-GAP-01867":{"line":1866,"offset":323042,"length":166,"previous":"M16-GAP-01866","next":"M16-GAP-01868"},"M16-GAP-01868":{"line":1867,"offset":323208,"length":180,"previous":"M16-GAP-01867","next":"M16-GAP-01869"},"M16-GAP-01869":{"line":1868,"offset":323388,"length":170,"previous":"M16-GAP-01868","next":"M16-GAP-01870"},"M16-GAP-01870":{"line":1869,"offset":323558,"length":172,"previous":"M16-GAP-01869","next":"M16-GAP-01871"},"M16-GAP-01871":{"line":1870,"offset":323730,"length":169,"previous":"M16-GAP-01870","next":"M16-GAP-01872"},"M16-GAP-01872":{"line":1871,"offset":323899,"length":174,"previous":"M16-GAP-01871","next":"M16-GAP-01873"},"M16-GAP-01873":{"line":1872,"offset":324073,"length":169,"previous":"M16-GAP-01872","next":"M16-GAP-01874"},"M16-GAP-01874":{"line":1873,"offset":324242,"length":169,"previous":"M16-GAP-01873","next":"M16-GAP-01875"},"M16-GAP-01875":{"line":1874,"offset":324411,"length":173,"previous":"M16-GAP-01874","next":"M16-GAP-01876"},"M16-GAP-01876":{"line":1875,"offset":324584,"length":184,"previous":"M16-GAP-01875","next":"M16-GAP-01877"},"M16-GAP-01877":{"line":1876,"offset":324768,"length":176,"previous":"M16-GAP-01876","next":"M16-GAP-01878"},"M16-GAP-01878":{"line":1877,"offset":324944,"length":174,"previous":"M16-GAP-01877","next":"M16-GAP-01879"},"M16-GAP-01879":{"line":1878,"offset":325118,"length":180,"previous":"M16-GAP-01878","next":"M16-GAP-01880"},"M16-GAP-01880":{"line":1879,"offset":325298,"length":178,"previous":"M16-GAP-01879","next":"M16-GAP-01881"},"M16-GAP-01881":{"line":1880,"offset":325476,"length":174,"previous":"M16-GAP-01880","next":"M16-GAP-01882"},"M16-GAP-01882":{"line":1881,"offset":325650,"length":175,"previous":"M16-GAP-01881","next":"M16-GAP-01883"},"M16-GAP-01883":{"line":1882,"offset":325825,"length":176,"previous":"M16-GAP-01882","next":"M16-GAP-01884"},"M16-GAP-01884":{"line":1883,"offset":326001,"length":182,"previous":"M16-GAP-01883","next":"M16-GAP-01885"},"M16-GAP-01885":{"line":1884,"offset":326183,"length":176,"previous":"M16-GAP-01884","next":"M16-GAP-01886"},"M16-GAP-01886":{"line":1885,"offset":326359,"length":178,"previous":"M16-GAP-01885","next":"M16-GAP-01887"},"M16-GAP-01887":{"line":1886,"offset":326537,"length":172,"previous":"M16-GAP-01886","next":"M16-GAP-01888"},"M16-GAP-01888":{"line":1887,"offset":326709,"length":177,"previous":"M16-GAP-01887","next":"M16-GAP-01889"},"M16-GAP-01889":{"line":1888,"offset":326886,"length":178,"previous":"M16-GAP-01888","next":"M16-GAP-01890"},"M16-GAP-01890":{"line":1889,"offset":327064,"length":175,"previous":"M16-GAP-01889","next":"M16-GAP-01891"},"M16-GAP-01891":{"line":1890,"offset":327239,"length":171,"previous":"M16-GAP-01890","next":"M16-GAP-01892"},"M16-GAP-01892":{"line":1891,"offset":327410,"length":171,"previous":"M16-GAP-01891","next":"M16-GAP-01893"},"M16-GAP-01893":{"line":1892,"offset":327581,"length":175,"previous":"M16-GAP-01892","next":"M16-GAP-01894"},"M16-GAP-01894":{"line":1893,"offset":327756,"length":172,"previous":"M16-GAP-01893","next":"M16-GAP-01895"},"M16-GAP-01895":{"line":1894,"offset":327928,"length":176,"previous":"M16-GAP-01894","next":"M16-GAP-01896"},"M16-GAP-01896":{"line":1895,"offset":328104,"length":170,"previous":"M16-GAP-01895","next":"M16-GAP-01897"},"M16-GAP-01897":{"line":1896,"offset":328274,"length":182,"previous":"M16-GAP-01896","next":"M16-GAP-01898"},"M16-GAP-01898":{"line":1897,"offset":328456,"length":182,"previous":"M16-GAP-01897","next":"M16-GAP-01899"},"M16-GAP-01899":{"line":1898,"offset":328638,"length":176,"previous":"M16-GAP-01898","next":"M16-GAP-01900"},"M16-GAP-01900":{"line":1899,"offset":328814,"length":175,"previous":"M16-GAP-01899","next":"M16-GAP-01901"},"M16-GAP-01901":{"line":1900,"offset":328989,"length":175,"previous":"M16-GAP-01900","next":"M16-GAP-01902"},"M16-GAP-01902":{"line":1901,"offset":329164,"length":176,"previous":"M16-GAP-01901","next":"M16-GAP-01903"},"M16-GAP-01903":{"line":1902,"offset":329340,"length":176,"previous":"M16-GAP-01902","next":"M16-GAP-01904"},"M16-GAP-01904":{"line":1903,"offset":329516,"length":175,"previous":"M16-GAP-01903","next":"M16-GAP-01905"},"M16-GAP-01905":{"line":1904,"offset":329691,"length":173,"previous":"M16-GAP-01904","next":"M16-GAP-01906"},"M16-GAP-01906":{"line":1905,"offset":329864,"length":183,"previous":"M16-GAP-01905","next":"M16-GAP-01907"},"M16-GAP-01907":{"line":1906,"offset":330047,"length":180,"previous":"M16-GAP-01906","next":"M16-GAP-01908"},"M16-GAP-01908":{"line":1907,"offset":330227,"length":183,"previous":"M16-GAP-01907","next":"M16-GAP-01909"},"M16-GAP-01909":{"line":1908,"offset":330410,"length":178,"previous":"M16-GAP-01908","next":"M16-GAP-01910"},"M16-GAP-01910":{"line":1909,"offset":330588,"length":180,"previous":"M16-GAP-01909","next":"M16-GAP-01911"},"M16-GAP-01911":{"line":1910,"offset":330768,"length":183,"previous":"M16-GAP-01910","next":"M16-GAP-01912"},"M16-GAP-01912":{"line":1911,"offset":330951,"length":175,"previous":"M16-GAP-01911","next":"M16-GAP-01913"},"M16-GAP-01913":{"line":1912,"offset":331126,"length":172,"previous":"M16-GAP-01912","next":"M16-GAP-01914"},"M16-GAP-01914":{"line":1913,"offset":331298,"length":181,"previous":"M16-GAP-01913","next":"M16-GAP-01915"},"M16-GAP-01915":{"line":1914,"offset":331479,"length":184,"previous":"M16-GAP-01914","next":"M16-GAP-01916"},"M16-GAP-01916":{"line":1915,"offset":331663,"length":181,"previous":"M16-GAP-01915","next":"M16-GAP-01917"},"M16-GAP-01917":{"line":1916,"offset":331844,"length":181,"previous":"M16-GAP-01916","next":"M16-GAP-01918"},"M16-GAP-01918":{"line":1917,"offset":332025,"length":179,"previous":"M16-GAP-01917","next":"M16-GAP-01919"},"M16-GAP-01919":{"line":1918,"offset":332204,"length":179,"previous":"M16-GAP-01918","next":"M16-GAP-01920"},"M16-GAP-01920":{"line":1919,"offset":332383,"length":179,"previous":"M16-GAP-01919","next":"M16-GAP-01921"},"M16-GAP-01921":{"line":1920,"offset":332562,"length":177,"previous":"M16-GAP-01920","next":"M16-GAP-01922"},"M16-GAP-01922":{"line":1921,"offset":332739,"length":174,"previous":"M16-GAP-01921","next":"M16-GAP-01923"},"M16-GAP-01923":{"line":1922,"offset":332913,"length":177,"previous":"M16-GAP-01922","next":"M16-GAP-01924"},"M16-GAP-01924":{"line":1923,"offset":333090,"length":178,"previous":"M16-GAP-01923","next":"M16-GAP-01925"},"M16-GAP-01925":{"line":1924,"offset":333268,"length":177,"previous":"M16-GAP-01924","next":"M16-GAP-01926"},"M16-GAP-01926":{"line":1925,"offset":333445,"length":182,"previous":"M16-GAP-01925","next":"M16-GAP-01927"},"M16-GAP-01927":{"line":1926,"offset":333627,"length":183,"previous":"M16-GAP-01926","next":"M16-GAP-01928"},"M16-GAP-01928":{"line":1927,"offset":333810,"length":186,"previous":"M16-GAP-01927","next":"M16-GAP-01929"},"M16-GAP-01929":{"line":1928,"offset":333996,"length":175,"previous":"M16-GAP-01928","next":"M16-GAP-01930"},"M16-GAP-01930":{"line":1929,"offset":334171,"length":188,"previous":"M16-GAP-01929","next":"M16-GAP-01931"},"M16-GAP-01931":{"line":1930,"offset":334359,"length":182,"previous":"M16-GAP-01930","next":"M16-GAP-01932"},"M16-GAP-01932":{"line":1931,"offset":334541,"length":178,"previous":"M16-GAP-01931","next":"M16-GAP-01933"},"M16-GAP-01933":{"line":1932,"offset":334719,"length":184,"previous":"M16-GAP-01932","next":"M16-GAP-01934"},"M16-GAP-01934":{"line":1933,"offset":334903,"length":176,"previous":"M16-GAP-01933","next":"M16-GAP-01935"},"M16-GAP-01935":{"line":1934,"offset":335079,"length":180,"previous":"M16-GAP-01934","next":"M16-GAP-01936"},"M16-GAP-01936":{"line":1935,"offset":335259,"length":162,"previous":"M16-GAP-01935","next":"M16-GAP-01937"},"M16-GAP-01937":{"line":1936,"offset":335421,"length":163,"previous":"M16-GAP-01936","next":"M16-GAP-01938"},"M16-GAP-01938":{"line":1937,"offset":335584,"length":167,"previous":"M16-GAP-01937","next":"M16-GAP-01939"},"M16-GAP-01939":{"line":1938,"offset":335751,"length":174,"previous":"M16-GAP-01938","next":"M16-GAP-01940"},"M16-GAP-01940":{"line":1939,"offset":335925,"length":168,"previous":"M16-GAP-01939","next":"M16-GAP-01941"},"M16-GAP-01941":{"line":1940,"offset":336093,"length":172,"previous":"M16-GAP-01940","next":"M16-GAP-01942"},"M16-GAP-01942":{"line":1941,"offset":336265,"length":165,"previous":"M16-GAP-01941","next":"M16-GAP-01943"},"M16-GAP-01943":{"line":1942,"offset":336430,"length":177,"previous":"M16-GAP-01942","next":"M16-GAP-01944"},"M16-GAP-01944":{"line":1943,"offset":336607,"length":199,"previous":"M16-GAP-01943","next":"M16-GAP-01945"},"M16-GAP-01945":{"line":1944,"offset":336806,"length":186,"previous":"M16-GAP-01944","next":"M16-GAP-01946"},"M16-GAP-01946":{"line":1945,"offset":336992,"length":187,"previous":"M16-GAP-01945","next":"M16-GAP-01947"},"M16-GAP-01947":{"line":1946,"offset":337179,"length":184,"previous":"M16-GAP-01946","next":"M16-GAP-01948"},"M16-GAP-01948":{"line":1947,"offset":337363,"length":193,"previous":"M16-GAP-01947","next":"M16-GAP-01949"},"M16-GAP-01949":{"line":1948,"offset":337556,"length":185,"previous":"M16-GAP-01948","next":"M16-GAP-01950"},"M16-GAP-01950":{"line":1949,"offset":337741,"length":180,"previous":"M16-GAP-01949","next":"M16-GAP-01951"},"M16-GAP-01951":{"line":1950,"offset":337921,"length":164,"previous":"M16-GAP-01950","next":"M16-GAP-01952"},"M16-GAP-01952":{"line":1951,"offset":338085,"length":176,"previous":"M16-GAP-01951","next":"M16-GAP-01953"},"M16-GAP-01953":{"line":1952,"offset":338261,"length":168,"previous":"M16-GAP-01952","next":"M16-GAP-01954"},"M16-GAP-01954":{"line":1953,"offset":338429,"length":164,"previous":"M16-GAP-01953","next":"M16-GAP-01955"},"M16-GAP-01955":{"line":1954,"offset":338593,"length":178,"previous":"M16-GAP-01954","next":"M16-GAP-01956"},"M16-GAP-01956":{"line":1955,"offset":338771,"length":173,"previous":"M16-GAP-01955","next":"M16-GAP-01957"},"M16-GAP-01957":{"line":1956,"offset":338944,"length":169,"previous":"M16-GAP-01956","next":"M16-GAP-01958"},"M16-GAP-01958":{"line":1957,"offset":339113,"length":167,"previous":"M16-GAP-01957","next":"M16-GAP-01959"},"M16-GAP-01959":{"line":1958,"offset":339280,"length":178,"previous":"M16-GAP-01958","next":"M16-GAP-01960"},"M16-GAP-01960":{"line":1959,"offset":339458,"length":168,"previous":"M16-GAP-01959","next":"M16-GAP-01961"},"M16-GAP-01961":{"line":1960,"offset":339626,"length":175,"previous":"M16-GAP-01960","next":"M16-GAP-01962"},"M16-GAP-01962":{"line":1961,"offset":339801,"length":178,"previous":"M16-GAP-01961","next":"M16-GAP-01963"},"M16-GAP-01963":{"line":1962,"offset":339979,"length":175,"previous":"M16-GAP-01962","next":"M16-GAP-01964"},"M16-GAP-01964":{"line":1963,"offset":340154,"length":171,"previous":"M16-GAP-01963","next":"M16-GAP-01965"},"M16-GAP-01965":{"line":1964,"offset":340325,"length":174,"previous":"M16-GAP-01964","next":"M16-GAP-01966"},"M16-GAP-01966":{"line":1965,"offset":340499,"length":181,"previous":"M16-GAP-01965","next":"M16-GAP-01967"},"M16-GAP-01967":{"line":1966,"offset":340680,"length":172,"previous":"M16-GAP-01966","next":"M16-GAP-01968"},"M16-GAP-01968":{"line":1967,"offset":340852,"length":175,"previous":"M16-GAP-01967","next":"M16-GAP-01969"},"M16-GAP-01969":{"line":1968,"offset":341027,"length":173,"previous":"M16-GAP-01968","next":"M16-GAP-01970"},"M16-GAP-01970":{"line":1969,"offset":341200,"length":170,"previous":"M16-GAP-01969","next":"M16-GAP-01971"},"M16-GAP-01971":{"line":1970,"offset":341370,"length":173,"previous":"M16-GAP-01970","next":"M16-GAP-01972"},"M16-GAP-01972":{"line":1971,"offset":341543,"length":163,"previous":"M16-GAP-01971","next":"M16-GAP-01973"},"M16-GAP-01973":{"line":1972,"offset":341706,"length":173,"previous":"M16-GAP-01972","next":"M16-GAP-01974"},"M16-GAP-01974":{"line":1973,"offset":341879,"length":195,"previous":"M16-GAP-01973","next":"M16-GAP-01975"},"M16-GAP-01975":{"line":1974,"offset":342074,"length":195,"previous":"M16-GAP-01974","next":"M16-GAP-01976"},"M16-GAP-01976":{"line":1975,"offset":342269,"length":185,"previous":"M16-GAP-01975","next":"M16-GAP-01977"},"M16-GAP-01977":{"line":1976,"offset":342454,"length":185,"previous":"M16-GAP-01976","next":"M16-GAP-01978"},"M16-GAP-01978":{"line":1977,"offset":342639,"length":190,"previous":"M16-GAP-01977","next":"M16-GAP-01979"},"M16-GAP-01979":{"line":1978,"offset":342829,"length":188,"previous":"M16-GAP-01978","next":"M16-GAP-01980"},"M16-GAP-01980":{"line":1979,"offset":343017,"length":178,"previous":"M16-GAP-01979","next":"M16-GAP-01981"},"M16-GAP-01981":{"line":1980,"offset":343195,"length":179,"previous":"M16-GAP-01980","next":"M16-GAP-01982"},"M16-GAP-01982":{"line":1981,"offset":343374,"length":179,"previous":"M16-GAP-01981","next":"M16-GAP-01983"},"M16-GAP-01983":{"line":1982,"offset":343553,"length":180,"previous":"M16-GAP-01982","next":"M16-GAP-01984"},"M16-GAP-01984":{"line":1983,"offset":343733,"length":181,"previous":"M16-GAP-01983","next":"M16-GAP-01985"},"M16-GAP-01985":{"line":1984,"offset":343914,"length":180,"previous":"M16-GAP-01984","next":"M16-GAP-01986"},"M16-GAP-01986":{"line":1985,"offset":344094,"length":180,"previous":"M16-GAP-01985","next":"M16-GAP-01987"},"M16-GAP-01987":{"line":1986,"offset":344274,"length":180,"previous":"M16-GAP-01986","next":"M16-GAP-01988"},"M16-GAP-01988":{"line":1987,"offset":344454,"length":182,"previous":"M16-GAP-01987","next":"M16-GAP-01989"},"M16-GAP-01989":{"line":1988,"offset":344636,"length":177,"previous":"M16-GAP-01988","next":"M16-GAP-01990"},"M16-GAP-01990":{"line":1989,"offset":344813,"length":178,"previous":"M16-GAP-01989","next":"M16-GAP-01991"},"M16-GAP-01991":{"line":1990,"offset":344991,"length":178,"previous":"M16-GAP-01990","next":"M16-GAP-01992"},"M16-GAP-01992":{"line":1991,"offset":345169,"length":180,"previous":"M16-GAP-01991","next":"M16-GAP-01993"},"M16-GAP-01993":{"line":1992,"offset":345349,"length":189,"previous":"M16-GAP-01992","next":"M16-GAP-01994"},"M16-GAP-01994":{"line":1993,"offset":345538,"length":189,"previous":"M16-GAP-01993","next":"M16-GAP-01995"},"M16-GAP-01995":{"line":1994,"offset":345727,"length":184,"previous":"M16-GAP-01994","next":"M16-GAP-01996"},"M16-GAP-01996":{"line":1995,"offset":345911,"length":181,"previous":"M16-GAP-01995","next":"M16-GAP-01997"},"M16-GAP-01997":{"line":1996,"offset":346092,"length":184,"previous":"M16-GAP-01996","next":"M16-GAP-01998"},"M16-GAP-01998":{"line":1997,"offset":346276,"length":160,"previous":"M16-GAP-01997","next":"M16-GAP-01999"},"M16-GAP-01999":{"line":1998,"offset":346436,"length":170,"previous":"M16-GAP-01998","next":"M16-GAP-02000"},"M16-GAP-02000":{"line":1999,"offset":346606,"length":176,"previous":"M16-GAP-01999","next":"M16-GAP-02001"},"M16-GAP-02001":{"line":2000,"offset":346782,"length":172,"previous":"M16-GAP-02000","next":"M16-GAP-02002"},"M16-GAP-02002":{"line":2001,"offset":346954,"length":175,"previous":"M16-GAP-02001","next":"M16-GAP-02003"},"M16-GAP-02003":{"line":2002,"offset":347129,"length":171,"previous":"M16-GAP-02002","next":"M16-GAP-02004"},"M16-GAP-02004":{"line":2003,"offset":347300,"length":175,"previous":"M16-GAP-02003","next":"M16-GAP-02005"},"M16-GAP-02005":{"line":2004,"offset":347475,"length":182,"previous":"M16-GAP-02004","next":"M16-GAP-02006"},"M16-GAP-02006":{"line":2005,"offset":347657,"length":188,"previous":"M16-GAP-02005","next":"M16-GAP-02007"},"M16-GAP-02007":{"line":2006,"offset":347845,"length":174,"previous":"M16-GAP-02006","next":"M16-GAP-02008"},"M16-GAP-02008":{"line":2007,"offset":348019,"length":178,"previous":"M16-GAP-02007","next":"M16-GAP-02009"},"M16-GAP-02009":{"line":2008,"offset":348197,"length":185,"previous":"M16-GAP-02008","next":"M16-GAP-02010"},"M16-GAP-02010":{"line":2009,"offset":348382,"length":193,"previous":"M16-GAP-02009","next":"M16-GAP-02011"},"M16-GAP-02011":{"line":2010,"offset":348575,"length":168,"previous":"M16-GAP-02010","next":"M16-GAP-02012"},"M16-GAP-02012":{"line":2011,"offset":348743,"length":174,"previous":"M16-GAP-02011","next":"M16-GAP-02013"},"M16-GAP-02013":{"line":2012,"offset":348917,"length":173,"previous":"M16-GAP-02012","next":"M16-GAP-02014"},"M16-GAP-02014":{"line":2013,"offset":349090,"length":172,"previous":"M16-GAP-02013","next":"M16-GAP-02015"},"M16-GAP-02015":{"line":2014,"offset":349262,"length":172,"previous":"M16-GAP-02014","next":"M16-GAP-02016"},"M16-GAP-02016":{"line":2015,"offset":349434,"length":168,"previous":"M16-GAP-02015","next":"M16-GAP-02017"},"M16-GAP-02017":{"line":2016,"offset":349602,"length":168,"previous":"M16-GAP-02016","next":"M16-GAP-02018"},"M16-GAP-02018":{"line":2017,"offset":349770,"length":167,"previous":"M16-GAP-02017","next":"M16-GAP-02019"},"M16-GAP-02019":{"line":2018,"offset":349937,"length":167,"previous":"M16-GAP-02018","next":"M16-GAP-02020"},"M16-GAP-02020":{"line":2019,"offset":350104,"length":170,"previous":"M16-GAP-02019","next":"M16-GAP-02021"},"M16-GAP-02021":{"line":2020,"offset":350274,"length":168,"previous":"M16-GAP-02020","next":"M16-GAP-02022"},"M16-GAP-02022":{"line":2021,"offset":350442,"length":167,"previous":"M16-GAP-02021","next":"M16-GAP-02023"},"M16-GAP-02023":{"line":2022,"offset":350609,"length":174,"previous":"M16-GAP-02022","next":"M16-GAP-02024"},"M16-GAP-02024":{"line":2023,"offset":350783,"length":164,"previous":"M16-GAP-02023","next":"M16-GAP-02025"},"M16-GAP-02025":{"line":2024,"offset":350947,"length":177,"previous":"M16-GAP-02024","next":"M16-GAP-02026"},"M16-GAP-02026":{"line":2025,"offset":351124,"length":168,"previous":"M16-GAP-02025","next":"M16-GAP-02027"},"M16-GAP-02027":{"line":2026,"offset":351292,"length":168,"previous":"M16-GAP-02026","next":"M16-GAP-02028"},"M16-GAP-02028":{"line":2027,"offset":351460,"length":170,"previous":"M16-GAP-02027","next":"M16-GAP-02029"},"M16-GAP-02029":{"line":2028,"offset":351630,"length":177,"previous":"M16-GAP-02028","next":"M16-GAP-02030"},"M16-GAP-02030":{"line":2029,"offset":351807,"length":171,"previous":"M16-GAP-02029","next":"M16-GAP-02031"},"M16-GAP-02031":{"line":2030,"offset":351978,"length":171,"previous":"M16-GAP-02030","next":"M16-GAP-02032"},"M16-GAP-02032":{"line":2031,"offset":352149,"length":169,"previous":"M16-GAP-02031","next":"M16-GAP-02033"},"M16-GAP-02033":{"line":2032,"offset":352318,"length":161,"previous":"M16-GAP-02032","next":"M16-GAP-02034"},"M16-GAP-02034":{"line":2033,"offset":352479,"length":171,"previous":"M16-GAP-02033","next":"M16-GAP-02035"},"M16-GAP-02035":{"line":2034,"offset":352650,"length":167,"previous":"M16-GAP-02034","next":"M16-GAP-02036"},"M16-GAP-02036":{"line":2035,"offset":352817,"length":170,"previous":"M16-GAP-02035","next":"M16-GAP-02037"},"M16-GAP-02037":{"line":2036,"offset":352987,"length":177,"previous":"M16-GAP-02036","next":"M16-GAP-02038"},"M16-GAP-02038":{"line":2037,"offset":353164,"length":169,"previous":"M16-GAP-02037","next":"M16-GAP-02039"},"M16-GAP-02039":{"line":2038,"offset":353333,"length":173,"previous":"M16-GAP-02038","next":"M16-GAP-02040"},"M16-GAP-02040":{"line":2039,"offset":353506,"length":170,"previous":"M16-GAP-02039","next":"M16-GAP-02041"},"M16-GAP-02041":{"line":2040,"offset":353676,"length":171,"previous":"M16-GAP-02040","next":"M16-GAP-02042"},"M16-GAP-02042":{"line":2041,"offset":353847,"length":172,"previous":"M16-GAP-02041","next":"M16-GAP-02043"},"M16-GAP-02043":{"line":2042,"offset":354019,"length":169,"previous":"M16-GAP-02042","next":"M16-GAP-02044"},"M16-GAP-02044":{"line":2043,"offset":354188,"length":174,"previous":"M16-GAP-02043","next":"M16-GAP-02045"},"M16-GAP-02045":{"line":2044,"offset":354362,"length":168,"previous":"M16-GAP-02044","next":"M16-GAP-02046"},"M16-GAP-02046":{"line":2045,"offset":354530,"length":168,"previous":"M16-GAP-02045","next":"M16-GAP-02047"},"M16-GAP-02047":{"line":2046,"offset":354698,"length":173,"previous":"M16-GAP-02046","next":"M16-GAP-02048"},"M16-GAP-02048":{"line":2047,"offset":354871,"length":177,"previous":"M16-GAP-02047","next":"M16-GAP-02049"},"M16-GAP-02049":{"line":2048,"offset":355048,"length":181,"previous":"M16-GAP-02048","next":"M16-GAP-02050"},"M16-GAP-02050":{"line":2049,"offset":355229,"length":175,"previous":"M16-GAP-02049","next":"M16-GAP-02051"},"M16-GAP-02051":{"line":2050,"offset":355404,"length":167,"previous":"M16-GAP-02050","next":"M16-GAP-02052"},"M16-GAP-02052":{"line":2051,"offset":355571,"length":171,"previous":"M16-GAP-02051","next":"M16-GAP-02053"},"M16-GAP-02053":{"line":2052,"offset":355742,"length":173,"previous":"M16-GAP-02052","next":"M16-GAP-02054"},"M16-GAP-02054":{"line":2053,"offset":355915,"length":172,"previous":"M16-GAP-02053","next":"M16-GAP-02055"},"M16-GAP-02055":{"line":2054,"offset":356087,"length":173,"previous":"M16-GAP-02054","next":"M16-GAP-02056"},"M16-GAP-02056":{"line":2055,"offset":356260,"length":164,"previous":"M16-GAP-02055","next":"M16-GAP-02057"},"M16-GAP-02057":{"line":2056,"offset":356424,"length":170,"previous":"M16-GAP-02056","next":"M16-GAP-02058"},"M16-GAP-02058":{"line":2057,"offset":356594,"length":170,"previous":"M16-GAP-02057","next":"M16-GAP-02059"},"M16-GAP-02059":{"line":2058,"offset":356764,"length":170,"previous":"M16-GAP-02058","next":"M16-GAP-02060"},"M16-GAP-02060":{"line":2059,"offset":356934,"length":175,"previous":"M16-GAP-02059","next":"M16-GAP-02061"},"M16-GAP-02061":{"line":2060,"offset":357109,"length":181,"previous":"M16-GAP-02060","next":"M16-GAP-02062"},"M16-GAP-02062":{"line":2061,"offset":357290,"length":182,"previous":"M16-GAP-02061","next":"M16-GAP-02063"},"M16-GAP-02063":{"line":2062,"offset":357472,"length":164,"previous":"M16-GAP-02062","next":"M16-GAP-02064"},"M16-GAP-02064":{"line":2063,"offset":357636,"length":178,"previous":"M16-GAP-02063","next":"M16-GAP-02065"},"M16-GAP-02065":{"line":2064,"offset":357814,"length":184,"previous":"M16-GAP-02064","next":"M16-GAP-02066"},"M16-GAP-02066":{"line":2065,"offset":357998,"length":171,"previous":"M16-GAP-02065","next":"M16-GAP-02067"},"M16-GAP-02067":{"line":2066,"offset":358169,"length":174,"previous":"M16-GAP-02066","next":"M16-GAP-02068"},"M16-GAP-02068":{"line":2067,"offset":358343,"length":180,"previous":"M16-GAP-02067","next":"M16-GAP-02069"},"M16-GAP-02069":{"line":2068,"offset":358523,"length":179,"previous":"M16-GAP-02068","next":"M16-GAP-02070"},"M16-GAP-02070":{"line":2069,"offset":358702,"length":183,"previous":"M16-GAP-02069","next":"M16-GAP-02071"},"M16-GAP-02071":{"line":2070,"offset":358885,"length":174,"previous":"M16-GAP-02070","next":"M16-GAP-02072"},"M16-GAP-02072":{"line":2071,"offset":359059,"length":172,"previous":"M16-GAP-02071","next":"M16-GAP-02073"},"M16-GAP-02073":{"line":2072,"offset":359231,"length":184,"previous":"M16-GAP-02072","next":"M16-GAP-02074"},"M16-GAP-02074":{"line":2073,"offset":359415,"length":171,"previous":"M16-GAP-02073","next":"M16-GAP-02075"},"M16-GAP-02075":{"line":2074,"offset":359586,"length":169,"previous":"M16-GAP-02074","next":"M16-GAP-02076"},"M16-GAP-02076":{"line":2075,"offset":359755,"length":176,"previous":"M16-GAP-02075","next":"M16-GAP-02077"},"M16-GAP-02077":{"line":2076,"offset":359931,"length":174,"previous":"M16-GAP-02076","next":"M16-GAP-02078"},"M16-GAP-02078":{"line":2077,"offset":360105,"length":167,"previous":"M16-GAP-02077","next":"M16-GAP-02079"},"M16-GAP-02079":{"line":2078,"offset":360272,"length":169,"previous":"M16-GAP-02078","next":"M16-GAP-02080"},"M16-GAP-02080":{"line":2079,"offset":360441,"length":166,"previous":"M16-GAP-02079","next":"M16-GAP-02081"},"M16-GAP-02081":{"line":2080,"offset":360607,"length":176,"previous":"M16-GAP-02080","next":"M16-GAP-02082"},"M16-GAP-02082":{"line":2081,"offset":360783,"length":174,"previous":"M16-GAP-02081","next":"M16-GAP-02083"},"M16-GAP-02083":{"line":2082,"offset":360957,"length":178,"previous":"M16-GAP-02082","next":"M16-GAP-02084"},"M16-GAP-02084":{"line":2083,"offset":361135,"length":176,"previous":"M16-GAP-02083","next":"M16-GAP-02085"},"M16-GAP-02085":{"line":2084,"offset":361311,"length":175,"previous":"M16-GAP-02084","next":"M16-GAP-02086"},"M16-GAP-02086":{"line":2085,"offset":361486,"length":177,"previous":"M16-GAP-02085","next":"M16-GAP-02087"},"M16-GAP-02087":{"line":2086,"offset":361663,"length":176,"previous":"M16-GAP-02086","next":"M16-GAP-02088"},"M16-GAP-02088":{"line":2087,"offset":361839,"length":168,"previous":"M16-GAP-02087","next":"M16-GAP-02089"},"M16-GAP-02089":{"line":2088,"offset":362007,"length":174,"previous":"M16-GAP-02088","next":"M16-GAP-02090"},"M16-GAP-02090":{"line":2089,"offset":362181,"length":176,"previous":"M16-GAP-02089","next":"M16-GAP-02091"},"M16-GAP-02091":{"line":2090,"offset":362357,"length":175,"previous":"M16-GAP-02090","next":"M16-GAP-02092"},"M16-GAP-02092":{"line":2091,"offset":362532,"length":179,"previous":"M16-GAP-02091","next":"M16-GAP-02093"},"M16-GAP-02093":{"line":2092,"offset":362711,"length":172,"previous":"M16-GAP-02092","next":"M16-GAP-02094"},"M16-GAP-02094":{"line":2093,"offset":362883,"length":173,"previous":"M16-GAP-02093","next":"M16-GAP-02095"},"M16-GAP-02095":{"line":2094,"offset":363056,"length":173,"previous":"M16-GAP-02094","next":"M16-GAP-02096"},"M16-GAP-02096":{"line":2095,"offset":363229,"length":177,"previous":"M16-GAP-02095","next":"M16-GAP-02097"},"M16-GAP-02097":{"line":2096,"offset":363406,"length":182,"previous":"M16-GAP-02096","next":"M16-GAP-02098"},"M16-GAP-02098":{"line":2097,"offset":363588,"length":176,"previous":"M16-GAP-02097","next":"M16-GAP-02099"},"M16-GAP-02099":{"line":2098,"offset":363764,"length":178,"previous":"M16-GAP-02098","next":"M16-GAP-02100"},"M16-GAP-02100":{"line":2099,"offset":363942,"length":193,"previous":"M16-GAP-02099","next":"M16-GAP-02101"},"M16-GAP-02101":{"line":2100,"offset":364135,"length":170,"previous":"M16-GAP-02100","next":"M16-GAP-02102"},"M16-GAP-02102":{"line":2101,"offset":364305,"length":179,"previous":"M16-GAP-02101","next":"M16-GAP-02103"},"M16-GAP-02103":{"line":2102,"offset":364484,"length":172,"previous":"M16-GAP-02102","next":"M16-GAP-02104"},"M16-GAP-02104":{"line":2103,"offset":364656,"length":173,"previous":"M16-GAP-02103","next":"M16-GAP-02105"},"M16-GAP-02105":{"line":2104,"offset":364829,"length":168,"previous":"M16-GAP-02104","next":"M16-GAP-02106"},"M16-GAP-02106":{"line":2105,"offset":364997,"length":165,"previous":"M16-GAP-02105","next":"M16-GAP-02107"},"M16-GAP-02107":{"line":2106,"offset":365162,"length":177,"previous":"M16-GAP-02106","next":"M16-GAP-02108"},"M16-GAP-02108":{"line":2107,"offset":365339,"length":171,"previous":"M16-GAP-02107","next":"M16-GAP-02109"},"M16-GAP-02109":{"line":2108,"offset":365510,"length":188,"previous":"M16-GAP-02108","next":"M16-GAP-02110"},"M16-GAP-02110":{"line":2109,"offset":365698,"length":167,"previous":"M16-GAP-02109","next":"M16-GAP-02111"},"M16-GAP-02111":{"line":2110,"offset":365865,"length":171,"previous":"M16-GAP-02110","next":"M16-GAP-02112"},"M16-GAP-02112":{"line":2111,"offset":366036,"length":170,"previous":"M16-GAP-02111","next":"M16-GAP-02113"},"M16-GAP-02113":{"line":2112,"offset":366206,"length":175,"previous":"M16-GAP-02112","next":"M16-GAP-02114"},"M16-GAP-02114":{"line":2113,"offset":366381,"length":182,"previous":"M16-GAP-02113","next":"M16-GAP-02115"},"M16-GAP-02115":{"line":2114,"offset":366563,"length":177,"previous":"M16-GAP-02114","next":"M16-GAP-02116"},"M16-GAP-02116":{"line":2115,"offset":366740,"length":175,"previous":"M16-GAP-02115","next":"M16-GAP-02117"},"M16-GAP-02117":{"line":2116,"offset":366915,"length":177,"previous":"M16-GAP-02116","next":"M16-GAP-02118"},"M16-GAP-02118":{"line":2117,"offset":367092,"length":170,"previous":"M16-GAP-02117","next":"M16-GAP-02119"},"M16-GAP-02119":{"line":2118,"offset":367262,"length":172,"previous":"M16-GAP-02118","next":"M16-GAP-02120"},"M16-GAP-02120":{"line":2119,"offset":367434,"length":171,"previous":"M16-GAP-02119","next":"M16-GAP-02121"},"M16-GAP-02121":{"line":2120,"offset":367605,"length":171,"previous":"M16-GAP-02120","next":"M16-GAP-02122"},"M16-GAP-02122":{"line":2121,"offset":367776,"length":176,"previous":"M16-GAP-02121","next":"M16-GAP-02123"},"M16-GAP-02123":{"line":2122,"offset":367952,"length":176,"previous":"M16-GAP-02122","next":"M16-GAP-02124"},"M16-GAP-02124":{"line":2123,"offset":368128,"length":165,"previous":"M16-GAP-02123","next":"M16-GAP-02125"},"M16-GAP-02125":{"line":2124,"offset":368293,"length":175,"previous":"M16-GAP-02124","next":"M16-GAP-02126"},"M16-GAP-02126":{"line":2125,"offset":368468,"length":170,"previous":"M16-GAP-02125","next":"M16-GAP-02127"},"M16-GAP-02127":{"line":2126,"offset":368638,"length":174,"previous":"M16-GAP-02126","next":"M16-GAP-02128"},"M16-GAP-02128":{"line":2127,"offset":368812,"length":172,"previous":"M16-GAP-02127","next":"M16-GAP-02129"},"M16-GAP-02129":{"line":2128,"offset":368984,"length":176,"previous":"M16-GAP-02128","next":"M16-GAP-02130"},"M16-GAP-02130":{"line":2129,"offset":369160,"length":180,"previous":"M16-GAP-02129","next":"M16-GAP-02131"},"M16-GAP-02131":{"line":2130,"offset":369340,"length":165,"previous":"M16-GAP-02130","next":"M16-GAP-02132"},"M16-GAP-02132":{"line":2131,"offset":369505,"length":173,"previous":"M16-GAP-02131","next":"M16-GAP-02133"},"M16-GAP-02133":{"line":2132,"offset":369678,"length":166,"previous":"M16-GAP-02132","next":"M16-GAP-02134"},"M16-GAP-02134":{"line":2133,"offset":369844,"length":183,"previous":"M16-GAP-02133","next":"M16-GAP-02135"},"M16-GAP-02135":{"line":2134,"offset":370027,"length":190,"previous":"M16-GAP-02134","next":"M16-GAP-02136"},"M16-GAP-02136":{"line":2135,"offset":370217,"length":176,"previous":"M16-GAP-02135","next":"M16-GAP-02137"},"M16-GAP-02137":{"line":2136,"offset":370393,"length":174,"previous":"M16-GAP-02136","next":"M16-GAP-02138"},"M16-GAP-02138":{"line":2137,"offset":370567,"length":172,"previous":"M16-GAP-02137","next":"M16-GAP-02139"},"M16-GAP-02139":{"line":2138,"offset":370739,"length":167,"previous":"M16-GAP-02138","next":"M16-GAP-02140"},"M16-GAP-02140":{"line":2139,"offset":370906,"length":175,"previous":"M16-GAP-02139","next":"M16-GAP-02141"},"M16-GAP-02141":{"line":2140,"offset":371081,"length":171,"previous":"M16-GAP-02140","next":"M16-GAP-02142"},"M16-GAP-02142":{"line":2141,"offset":371252,"length":192,"previous":"M16-GAP-02141","next":"M16-GAP-02143"},"M16-GAP-02143":{"line":2142,"offset":371444,"length":190,"previous":"M16-GAP-02142","next":"M16-GAP-02144"},"M16-GAP-02144":{"line":2143,"offset":371634,"length":186,"previous":"M16-GAP-02143","next":"M16-GAP-02145"},"M16-GAP-02145":{"line":2144,"offset":371820,"length":177,"previous":"M16-GAP-02144","next":"M16-GAP-02146"},"M16-GAP-02146":{"line":2145,"offset":371997,"length":180,"previous":"M16-GAP-02145","next":"M16-GAP-02147"},"M16-GAP-02147":{"line":2146,"offset":372177,"length":175,"previous":"M16-GAP-02146","next":"M16-GAP-02148"},"M16-GAP-02148":{"line":2147,"offset":372352,"length":187,"previous":"M16-GAP-02147","next":"M16-GAP-02149"},"M16-GAP-02149":{"line":2148,"offset":372539,"length":174,"previous":"M16-GAP-02148","next":"M16-GAP-02150"},"M16-GAP-02150":{"line":2149,"offset":372713,"length":184,"previous":"M16-GAP-02149","next":"M16-GAP-02151"},"M16-GAP-02151":{"line":2150,"offset":372897,"length":167,"previous":"M16-GAP-02150","next":"M16-GAP-02152"},"M16-GAP-02152":{"line":2151,"offset":373064,"length":185,"previous":"M16-GAP-02151","next":"M16-GAP-02153"},"M16-GAP-02153":{"line":2152,"offset":373249,"length":176,"previous":"M16-GAP-02152","next":"M16-GAP-02154"},"M16-GAP-02154":{"line":2153,"offset":373425,"length":180,"previous":"M16-GAP-02153","next":"M16-GAP-02155"},"M16-GAP-02155":{"line":2154,"offset":373605,"length":167,"previous":"M16-GAP-02154","next":"M16-GAP-02156"},"M16-GAP-02156":{"line":2155,"offset":373772,"length":171,"previous":"M16-GAP-02155","next":"M16-GAP-02157"},"M16-GAP-02157":{"line":2156,"offset":373943,"length":171,"previous":"M16-GAP-02156","next":"M16-GAP-02158"},"M16-GAP-02158":{"line":2157,"offset":374114,"length":174,"previous":"M16-GAP-02157","next":"M16-GAP-02159"},"M16-GAP-02159":{"line":2158,"offset":374288,"length":175,"previous":"M16-GAP-02158","next":"M16-GAP-02160"},"M16-GAP-02160":{"line":2159,"offset":374463,"length":174,"previous":"M16-GAP-02159","next":"M16-GAP-02161"},"M16-GAP-02161":{"line":2160,"offset":374637,"length":175,"previous":"M16-GAP-02160","next":"M16-GAP-02162"},"M16-GAP-02162":{"line":2161,"offset":374812,"length":173,"previous":"M16-GAP-02161","next":"M16-GAP-02163"},"M16-GAP-02163":{"line":2162,"offset":374985,"length":172,"previous":"M16-GAP-02162","next":"M16-GAP-02164"},"M16-GAP-02164":{"line":2163,"offset":375157,"length":174,"previous":"M16-GAP-02163","next":"M16-GAP-02165"},"M16-GAP-02165":{"line":2164,"offset":375331,"length":179,"previous":"M16-GAP-02164","next":"M16-GAP-02166"},"M16-GAP-02166":{"line":2165,"offset":375510,"length":172,"previous":"M16-GAP-02165","next":"M16-GAP-02167"},"M16-GAP-02167":{"line":2166,"offset":375682,"length":172,"previous":"M16-GAP-02166","next":"M16-GAP-02168"},"M16-GAP-02168":{"line":2167,"offset":375854,"length":181,"previous":"M16-GAP-02167","next":"M16-GAP-02169"},"M16-GAP-02169":{"line":2168,"offset":376035,"length":180,"previous":"M16-GAP-02168","next":"M16-GAP-02170"},"M16-GAP-02170":{"line":2169,"offset":376215,"length":165,"previous":"M16-GAP-02169","next":"M16-GAP-02171"},"M16-GAP-02171":{"line":2170,"offset":376380,"length":165,"previous":"M16-GAP-02170","next":"M16-GAP-02172"},"M16-GAP-02172":{"line":2171,"offset":376545,"length":176,"previous":"M16-GAP-02171","next":"M16-GAP-02173"},"M16-GAP-02173":{"line":2172,"offset":376721,"length":166,"previous":"M16-GAP-02172","next":"M16-GAP-02174"},"M16-GAP-02174":{"line":2173,"offset":376887,"length":175,"previous":"M16-GAP-02173","next":"M16-GAP-02175"},"M16-GAP-02175":{"line":2174,"offset":377062,"length":180,"previous":"M16-GAP-02174","next":"M16-GAP-02176"},"M16-GAP-02176":{"line":2175,"offset":377242,"length":171,"previous":"M16-GAP-02175","next":"M16-GAP-02177"},"M16-GAP-02177":{"line":2176,"offset":377413,"length":179,"previous":"M16-GAP-02176","next":"M16-GAP-02178"},"M16-GAP-02178":{"line":2177,"offset":377592,"length":190,"previous":"M16-GAP-02177","next":"M16-GAP-02179"},"M16-GAP-02179":{"line":2178,"offset":377782,"length":180,"previous":"M16-GAP-02178","next":"M16-GAP-02180"},"M16-GAP-02180":{"line":2179,"offset":377962,"length":185,"previous":"M16-GAP-02179","next":"M16-GAP-02181"},"M16-GAP-02181":{"line":2180,"offset":378147,"length":194,"previous":"M16-GAP-02180","next":"M16-GAP-02182"},"M16-GAP-02182":{"line":2181,"offset":378341,"length":180,"previous":"M16-GAP-02181","next":"M16-GAP-02183"},"M16-GAP-02183":{"line":2182,"offset":378521,"length":189,"previous":"M16-GAP-02182","next":"M16-GAP-02184"},"M16-GAP-02184":{"line":2183,"offset":378710,"length":182,"previous":"M16-GAP-02183","next":"M16-GAP-02185"},"M16-GAP-02185":{"line":2184,"offset":378892,"length":186,"previous":"M16-GAP-02184","next":"M16-GAP-02186"},"M16-GAP-02186":{"line":2185,"offset":379078,"length":182,"previous":"M16-GAP-02185","next":"M16-GAP-02187"},"M16-GAP-02187":{"line":2186,"offset":379260,"length":180,"previous":"M16-GAP-02186","next":"M16-GAP-02188"},"M16-GAP-02188":{"line":2187,"offset":379440,"length":165,"previous":"M16-GAP-02187","next":"M16-GAP-02189"},"M16-GAP-02189":{"line":2188,"offset":379605,"length":170,"previous":"M16-GAP-02188","next":"M16-GAP-02190"},"M16-GAP-02190":{"line":2189,"offset":379775,"length":172,"previous":"M16-GAP-02189","next":"M16-GAP-02191"},"M16-GAP-02191":{"line":2190,"offset":379947,"length":177,"previous":"M16-GAP-02190","next":"M16-GAP-02192"},"M16-GAP-02192":{"line":2191,"offset":380124,"length":176,"previous":"M16-GAP-02191","next":"M16-GAP-02193"},"M16-GAP-02193":{"line":2192,"offset":380300,"length":172,"previous":"M16-GAP-02192","next":"M16-GAP-02194"},"M16-GAP-02194":{"line":2193,"offset":380472,"length":178,"previous":"M16-GAP-02193","next":"M16-GAP-02195"},"M16-GAP-02195":{"line":2194,"offset":380650,"length":175,"previous":"M16-GAP-02194","next":"M16-GAP-02196"},"M16-GAP-02196":{"line":2195,"offset":380825,"length":174,"previous":"M16-GAP-02195","next":"M16-GAP-02197"},"M16-GAP-02197":{"line":2196,"offset":380999,"length":182,"previous":"M16-GAP-02196","next":"M16-GAP-02198"},"M16-GAP-02198":{"line":2197,"offset":381181,"length":176,"previous":"M16-GAP-02197","next":"M16-GAP-02199"},"M16-GAP-02199":{"line":2198,"offset":381357,"length":172,"previous":"M16-GAP-02198","next":"M16-GAP-02200"},"M16-GAP-02200":{"line":2199,"offset":381529,"length":176,"previous":"M16-GAP-02199","next":"M16-GAP-02201"},"M16-GAP-02201":{"line":2200,"offset":381705,"length":176,"previous":"M16-GAP-02200","next":"M16-GAP-02202"},"M16-GAP-02202":{"line":2201,"offset":381881,"length":188,"previous":"M16-GAP-02201","next":"M16-GAP-02203"},"M16-GAP-02203":{"line":2202,"offset":382069,"length":167,"previous":"M16-GAP-02202","next":"M16-GAP-02204"},"M16-GAP-02204":{"line":2203,"offset":382236,"length":167,"previous":"M16-GAP-02203","next":"M16-GAP-02205"},"M16-GAP-02205":{"line":2204,"offset":382403,"length":169,"previous":"M16-GAP-02204","next":"M16-GAP-02206"},"M16-GAP-02206":{"line":2205,"offset":382572,"length":177,"previous":"M16-GAP-02205","next":"M16-GAP-02207"},"M16-GAP-02207":{"line":2206,"offset":382749,"length":171,"previous":"M16-GAP-02206","next":"M16-GAP-02208"},"M16-GAP-02208":{"line":2207,"offset":382920,"length":178,"previous":"M16-GAP-02207","next":"M16-GAP-02209"},"M16-GAP-02209":{"line":2208,"offset":383098,"length":174,"previous":"M16-GAP-02208","next":"M16-GAP-02210"},"M16-GAP-02210":{"line":2209,"offset":383272,"length":176,"previous":"M16-GAP-02209","next":"M16-GAP-02211"},"M16-GAP-02211":{"line":2210,"offset":383448,"length":171,"previous":"M16-GAP-02210","next":"M16-GAP-02212"},"M16-GAP-02212":{"line":2211,"offset":383619,"length":164,"previous":"M16-GAP-02211","next":"M16-GAP-02213"},"M16-GAP-02213":{"line":2212,"offset":383783,"length":161,"previous":"M16-GAP-02212","next":"M16-GAP-02214"},"M16-GAP-02214":{"line":2213,"offset":383944,"length":166,"previous":"M16-GAP-02213","next":"M16-GAP-02215"},"M16-GAP-02215":{"line":2214,"offset":384110,"length":161,"previous":"M16-GAP-02214","next":"M16-GAP-02216"},"M16-GAP-02216":{"line":2215,"offset":384271,"length":163,"previous":"M16-GAP-02215","next":"M16-GAP-02217"},"M16-GAP-02217":{"line":2216,"offset":384434,"length":179,"previous":"M16-GAP-02216","next":"M16-GAP-02218"},"M16-GAP-02218":{"line":2217,"offset":384613,"length":182,"previous":"M16-GAP-02217","next":"M16-GAP-02219"},"M16-GAP-02219":{"line":2218,"offset":384795,"length":193,"previous":"M16-GAP-02218","next":"M16-GAP-02220"},"M16-GAP-02220":{"line":2219,"offset":384988,"length":173,"previous":"M16-GAP-02219","next":"M16-GAP-02221"},"M16-GAP-02221":{"line":2220,"offset":385161,"length":185,"previous":"M16-GAP-02220","next":"M16-GAP-02222"},"M16-GAP-02222":{"line":2221,"offset":385346,"length":178,"previous":"M16-GAP-02221","next":"M16-GAP-02223"},"M16-GAP-02223":{"line":2222,"offset":385524,"length":176,"previous":"M16-GAP-02222","next":"M16-GAP-02224"},"M16-GAP-02224":{"line":2223,"offset":385700,"length":173,"previous":"M16-GAP-02223","next":"M16-GAP-02225"},"M16-GAP-02225":{"line":2224,"offset":385873,"length":193,"previous":"M16-GAP-02224","next":"M16-GAP-02226"},"M16-GAP-02226":{"line":2225,"offset":386066,"length":192,"previous":"M16-GAP-02225","next":"M16-GAP-02227"},"M16-GAP-02227":{"line":2226,"offset":386258,"length":195,"previous":"M16-GAP-02226","next":"M16-GAP-02228"},"M16-GAP-02228":{"line":2227,"offset":386453,"length":193,"previous":"M16-GAP-02227","next":"M16-GAP-02229"},"M16-GAP-02229":{"line":2228,"offset":386646,"length":194,"previous":"M16-GAP-02228","next":"M16-GAP-02230"},"M16-GAP-02230":{"line":2229,"offset":386840,"length":192,"previous":"M16-GAP-02229","next":"M16-GAP-02231"},"M16-GAP-02231":{"line":2230,"offset":387032,"length":168,"previous":"M16-GAP-02230","next":"M16-GAP-02232"},"M16-GAP-02232":{"line":2231,"offset":387200,"length":170,"previous":"M16-GAP-02231","next":"M16-GAP-02233"},"M16-GAP-02233":{"line":2232,"offset":387370,"length":174,"previous":"M16-GAP-02232","next":"M16-GAP-02234"},"M16-GAP-02234":{"line":2233,"offset":387544,"length":160,"previous":"M16-GAP-02233","next":"M16-GAP-02235"},"M16-GAP-02235":{"line":2234,"offset":387704,"length":166,"previous":"M16-GAP-02234","next":"M16-GAP-02236"},"M16-GAP-02236":{"line":2235,"offset":387870,"length":159,"previous":"M16-GAP-02235","next":"M16-GAP-02237"},"M16-GAP-02237":{"line":2236,"offset":388029,"length":162,"previous":"M16-GAP-02236","next":"M16-GAP-02238"},"M16-GAP-02238":{"line":2237,"offset":388191,"length":170,"previous":"M16-GAP-02237","next":"M16-GAP-02239"},"M16-GAP-02239":{"line":2238,"offset":388361,"length":160,"previous":"M16-GAP-02238","next":"M16-GAP-02240"},"M16-GAP-02240":{"line":2239,"offset":388521,"length":173,"previous":"M16-GAP-02239","next":"M16-GAP-02241"},"M16-GAP-02241":{"line":2240,"offset":388694,"length":162,"previous":"M16-GAP-02240","next":"M16-GAP-02242"},"M16-GAP-02242":{"line":2241,"offset":388856,"length":178,"previous":"M16-GAP-02241","next":"M16-GAP-02243"},"M16-GAP-02243":{"line":2242,"offset":389034,"length":162,"previous":"M16-GAP-02242","next":"M16-GAP-02244"},"M16-GAP-02244":{"line":2243,"offset":389196,"length":160,"previous":"M16-GAP-02243","next":"M16-GAP-02245"},"M16-GAP-02245":{"line":2244,"offset":389356,"length":177,"previous":"M16-GAP-02244","next":"M16-GAP-02246"},"M16-GAP-02246":{"line":2245,"offset":389533,"length":166,"previous":"M16-GAP-02245","next":"M16-GAP-02247"},"M16-GAP-02247":{"line":2246,"offset":389699,"length":167,"previous":"M16-GAP-02246","next":"M16-GAP-02248"},"M16-GAP-02248":{"line":2247,"offset":389866,"length":169,"previous":"M16-GAP-02247","next":"M16-GAP-02249"},"M16-GAP-02249":{"line":2248,"offset":390035,"length":160,"previous":"M16-GAP-02248","next":"M16-GAP-02250"},"M16-GAP-02250":{"line":2249,"offset":390195,"length":166,"previous":"M16-GAP-02249","next":"M16-GAP-02251"},"M16-GAP-02251":{"line":2250,"offset":390361,"length":167,"previous":"M16-GAP-02250","next":"M16-GAP-02252"},"M16-GAP-02252":{"line":2251,"offset":390528,"length":159,"previous":"M16-GAP-02251","next":"M16-GAP-02253"},"M16-GAP-02253":{"line":2252,"offset":390687,"length":160,"previous":"M16-GAP-02252","next":"M16-GAP-02254"},"M16-GAP-02254":{"line":2253,"offset":390847,"length":172,"previous":"M16-GAP-02253","next":"M16-GAP-02255"},"M16-GAP-02255":{"line":2254,"offset":391019,"length":161,"previous":"M16-GAP-02254","next":"M16-GAP-02256"},"M16-GAP-02256":{"line":2255,"offset":391180,"length":162,"previous":"M16-GAP-02255","next":"M16-GAP-02257"},"M16-GAP-02257":{"line":2256,"offset":391342,"length":163,"previous":"M16-GAP-02256","next":"M16-GAP-02258"},"M16-GAP-02258":{"line":2257,"offset":391505,"length":176,"previous":"M16-GAP-02257","next":"M16-GAP-02259"},"M16-GAP-02259":{"line":2258,"offset":391681,"length":172,"previous":"M16-GAP-02258","next":"M16-GAP-02260"},"M16-GAP-02260":{"line":2259,"offset":391853,"length":166,"previous":"M16-GAP-02259","next":"M16-GAP-02261"},"M16-GAP-02261":{"line":2260,"offset":392019,"length":160,"previous":"M16-GAP-02260","next":"M16-GAP-02262"},"M16-GAP-02262":{"line":2261,"offset":392179,"length":163,"previous":"M16-GAP-02261","next":"M16-GAP-02263"},"M16-GAP-02263":{"line":2262,"offset":392342,"length":162,"previous":"M16-GAP-02262","next":"M16-GAP-02264"},"M16-GAP-02264":{"line":2263,"offset":392504,"length":166,"previous":"M16-GAP-02263","next":"M16-GAP-02265"},"M16-GAP-02265":{"line":2264,"offset":392670,"length":166,"previous":"M16-GAP-02264","next":"M16-GAP-02266"},"M16-GAP-02266":{"line":2265,"offset":392836,"length":167,"previous":"M16-GAP-02265","next":"M16-GAP-02267"},"M16-GAP-02267":{"line":2266,"offset":393003,"length":167,"previous":"M16-GAP-02266","next":"M16-GAP-02268"},"M16-GAP-02268":{"line":2267,"offset":393170,"length":169,"previous":"M16-GAP-02267","next":"M16-GAP-02269"},"M16-GAP-02269":{"line":2268,"offset":393339,"length":166,"previous":"M16-GAP-02268","next":"M16-GAP-02270"},"M16-GAP-02270":{"line":2269,"offset":393505,"length":168,"previous":"M16-GAP-02269","next":"M16-GAP-02271"},"M16-GAP-02271":{"line":2270,"offset":393673,"length":164,"previous":"M16-GAP-02270","next":"M16-GAP-02272"},"M16-GAP-02272":{"line":2271,"offset":393837,"length":162,"previous":"M16-GAP-02271","next":"M16-GAP-02273"},"M16-GAP-02273":{"line":2272,"offset":393999,"length":169,"previous":"M16-GAP-02272","next":"M16-GAP-02274"},"M16-GAP-02274":{"line":2273,"offset":394168,"length":173,"previous":"M16-GAP-02273","next":"M16-GAP-02275"},"M16-GAP-02275":{"line":2274,"offset":394341,"length":162,"previous":"M16-GAP-02274","next":"M16-GAP-02276"},"M16-GAP-02276":{"line":2275,"offset":394503,"length":168,"previous":"M16-GAP-02275","next":"M16-GAP-02277"},"M16-GAP-02277":{"line":2276,"offset":394671,"length":168,"previous":"M16-GAP-02276","next":"M16-GAP-02278"},"M16-GAP-02278":{"line":2277,"offset":394839,"length":169,"previous":"M16-GAP-02277","next":"M16-GAP-02279"},"M16-GAP-02279":{"line":2278,"offset":395008,"length":173,"previous":"M16-GAP-02278","next":"M16-GAP-02280"},"M16-GAP-02280":{"line":2279,"offset":395181,"length":165,"previous":"M16-GAP-02279","next":"M16-GAP-02281"},"M16-GAP-02281":{"line":2280,"offset":395346,"length":179,"previous":"M16-GAP-02280","next":"M16-GAP-02282"},"M16-GAP-02282":{"line":2281,"offset":395525,"length":179,"previous":"M16-GAP-02281","next":"M16-GAP-02283"},"M16-GAP-02283":{"line":2282,"offset":395704,"length":177,"previous":"M16-GAP-02282","next":"M16-GAP-02284"},"M16-GAP-02284":{"line":2283,"offset":395881,"length":172,"previous":"M16-GAP-02283","next":"M16-GAP-02285"},"M16-GAP-02285":{"line":2284,"offset":396053,"length":171,"previous":"M16-GAP-02284","next":"M16-GAP-02286"},"M16-GAP-02286":{"line":2285,"offset":396224,"length":171,"previous":"M16-GAP-02285","next":"M16-GAP-02287"},"M16-GAP-02287":{"line":2286,"offset":396395,"length":167,"previous":"M16-GAP-02286","next":"M16-GAP-02288"},"M16-GAP-02288":{"line":2287,"offset":396562,"length":170,"previous":"M16-GAP-02287","next":"M16-GAP-02289"},"M16-GAP-02289":{"line":2288,"offset":396732,"length":167,"previous":"M16-GAP-02288","next":"M16-GAP-02290"},"M16-GAP-02290":{"line":2289,"offset":396899,"length":167,"previous":"M16-GAP-02289","next":"M16-GAP-02291"},"M16-GAP-02291":{"line":2290,"offset":397066,"length":174,"previous":"M16-GAP-02290","next":"M16-GAP-02292"},"M16-GAP-02292":{"line":2291,"offset":397240,"length":179,"previous":"M16-GAP-02291","next":"M16-GAP-02293"},"M16-GAP-02293":{"line":2292,"offset":397419,"length":170,"previous":"M16-GAP-02292","next":"M16-GAP-02294"},"M16-GAP-02294":{"line":2293,"offset":397589,"length":166,"previous":"M16-GAP-02293","next":"M16-GAP-02295"},"M16-GAP-02295":{"line":2294,"offset":397755,"length":174,"previous":"M16-GAP-02294","next":"M16-GAP-02296"},"M16-GAP-02296":{"line":2295,"offset":397929,"length":172,"previous":"M16-GAP-02295","next":"M16-GAP-02297"},"M16-GAP-02297":{"line":2296,"offset":398101,"length":165,"previous":"M16-GAP-02296","next":"M16-GAP-02298"},"M16-GAP-02298":{"line":2297,"offset":398266,"length":169,"previous":"M16-GAP-02297","next":"M16-GAP-02299"},"M16-GAP-02299":{"line":2298,"offset":398435,"length":170,"previous":"M16-GAP-02298","next":"M16-GAP-02300"},"M16-GAP-02300":{"line":2299,"offset":398605,"length":170,"previous":"M16-GAP-02299","next":"M16-GAP-02301"},"M16-GAP-02301":{"line":2300,"offset":398775,"length":170,"previous":"M16-GAP-02300","next":"M16-GAP-02302"},"M16-GAP-02302":{"line":2301,"offset":398945,"length":172,"previous":"M16-GAP-02301","next":"M16-GAP-02303"},"M16-GAP-02303":{"line":2302,"offset":399117,"length":171,"previous":"M16-GAP-02302","next":"M16-GAP-02304"},"M16-GAP-02304":{"line":2303,"offset":399288,"length":174,"previous":"M16-GAP-02303","next":"M16-GAP-02305"},"M16-GAP-02305":{"line":2304,"offset":399462,"length":172,"previous":"M16-GAP-02304","next":"M16-GAP-02306"},"M16-GAP-02306":{"line":2305,"offset":399634,"length":175,"previous":"M16-GAP-02305","next":"M16-GAP-02307"},"M16-GAP-02307":{"line":2306,"offset":399809,"length":168,"previous":"M16-GAP-02306","next":"M16-GAP-02308"},"M16-GAP-02308":{"line":2307,"offset":399977,"length":173,"previous":"M16-GAP-02307","next":"M16-GAP-02309"},"M16-GAP-02309":{"line":2308,"offset":400150,"length":175,"previous":"M16-GAP-02308","next":"M16-GAP-02310"},"M16-GAP-02310":{"line":2309,"offset":400325,"length":175,"previous":"M16-GAP-02309","next":"M16-GAP-02311"},"M16-GAP-02311":{"line":2310,"offset":400500,"length":184,"previous":"M16-GAP-02310","next":"M16-GAP-02312"},"M16-GAP-02312":{"line":2311,"offset":400684,"length":180,"previous":"M16-GAP-02311","next":"M16-GAP-02313"},"M16-GAP-02313":{"line":2312,"offset":400864,"length":177,"previous":"M16-GAP-02312","next":"M16-GAP-02314"},"M16-GAP-02314":{"line":2313,"offset":401041,"length":164,"previous":"M16-GAP-02313","next":"M16-GAP-02315"},"M16-GAP-02315":{"line":2314,"offset":401205,"length":167,"previous":"M16-GAP-02314","next":"M16-GAP-02316"},"M16-GAP-02316":{"line":2315,"offset":401372,"length":163,"previous":"M16-GAP-02315","next":"M16-GAP-02317"},"M16-GAP-02317":{"line":2316,"offset":401535,"length":164,"previous":"M16-GAP-02316","next":"M16-GAP-02318"},"M16-GAP-02318":{"line":2317,"offset":401699,"length":169,"previous":"M16-GAP-02317","next":"M16-GAP-02319"},"M16-GAP-02319":{"line":2318,"offset":401868,"length":170,"previous":"M16-GAP-02318","next":"M16-GAP-02320"},"M16-GAP-02320":{"line":2319,"offset":402038,"length":174,"previous":"M16-GAP-02319","next":"M16-GAP-02321"},"M16-GAP-02321":{"line":2320,"offset":402212,"length":180,"previous":"M16-GAP-02320","next":"M16-GAP-02322"},"M16-GAP-02322":{"line":2321,"offset":402392,"length":170,"previous":"M16-GAP-02321","next":"M16-GAP-02323"},"M16-GAP-02323":{"line":2322,"offset":402562,"length":171,"previous":"M16-GAP-02322","next":"M16-GAP-02324"},"M16-GAP-02324":{"line":2323,"offset":402733,"length":184,"previous":"M16-GAP-02323","next":"M16-GAP-02325"},"M16-GAP-02325":{"line":2324,"offset":402917,"length":167,"previous":"M16-GAP-02324","next":"M16-GAP-02326"},"M16-GAP-02326":{"line":2325,"offset":403084,"length":175,"previous":"M16-GAP-02325","next":"M16-GAP-02327"},"M16-GAP-02327":{"line":2326,"offset":403259,"length":171,"previous":"M16-GAP-02326","next":"M16-GAP-02328"},"M16-GAP-02328":{"line":2327,"offset":403430,"length":173,"previous":"M16-GAP-02327","next":"M16-GAP-02329"},"M16-GAP-02329":{"line":2328,"offset":403603,"length":179,"previous":"M16-GAP-02328","next":"M16-GAP-02330"},"M16-GAP-02330":{"line":2329,"offset":403782,"length":178,"previous":"M16-GAP-02329","next":"M16-GAP-02331"},"M16-GAP-02331":{"line":2330,"offset":403960,"length":179,"previous":"M16-GAP-02330","next":"M16-GAP-02332"},"M16-GAP-02332":{"line":2331,"offset":404139,"length":176,"previous":"M16-GAP-02331","next":"M16-GAP-02333"},"M16-GAP-02333":{"line":2332,"offset":404315,"length":171,"previous":"M16-GAP-02332","next":"M16-GAP-02334"},"M16-GAP-02334":{"line":2333,"offset":404486,"length":174,"previous":"M16-GAP-02333","next":"M16-GAP-02335"},"M16-GAP-02335":{"line":2334,"offset":404660,"length":175,"previous":"M16-GAP-02334","next":"M16-GAP-02336"},"M16-GAP-02336":{"line":2335,"offset":404835,"length":163,"previous":"M16-GAP-02335","next":"M16-GAP-02337"},"M16-GAP-02337":{"line":2336,"offset":404998,"length":170,"previous":"M16-GAP-02336","next":"M16-GAP-02338"},"M16-GAP-02338":{"line":2337,"offset":405168,"length":169,"previous":"M16-GAP-02337","next":"M16-GAP-02339"},"M16-GAP-02339":{"line":2338,"offset":405337,"length":172,"previous":"M16-GAP-02338","next":"M16-GAP-02340"},"M16-GAP-02340":{"line":2339,"offset":405509,"length":170,"previous":"M16-GAP-02339","next":"M16-GAP-02341"},"M16-GAP-02341":{"line":2340,"offset":405679,"length":170,"previous":"M16-GAP-02340","next":"M16-GAP-02342"},"M16-GAP-02342":{"line":2341,"offset":405849,"length":165,"previous":"M16-GAP-02341","next":"M16-GAP-02343"},"M16-GAP-02343":{"line":2342,"offset":406014,"length":171,"previous":"M16-GAP-02342","next":"M16-GAP-02344"},"M16-GAP-02344":{"line":2343,"offset":406185,"length":167,"previous":"M16-GAP-02343","next":"M16-GAP-02345"},"M16-GAP-02345":{"line":2344,"offset":406352,"length":168,"previous":"M16-GAP-02344","next":"M16-GAP-02346"},"M16-GAP-02346":{"line":2345,"offset":406520,"length":170,"previous":"M16-GAP-02345","next":"M16-GAP-02347"},"M16-GAP-02347":{"line":2346,"offset":406690,"length":159,"previous":"M16-GAP-02346","next":"M16-GAP-02348"},"M16-GAP-02348":{"line":2347,"offset":406849,"length":168,"previous":"M16-GAP-02347","next":"M16-GAP-02349"},"M16-GAP-02349":{"line":2348,"offset":407017,"length":169,"previous":"M16-GAP-02348","next":"M16-GAP-02350"},"M16-GAP-02350":{"line":2349,"offset":407186,"length":175,"previous":"M16-GAP-02349","next":"M16-GAP-02351"},"M16-GAP-02351":{"line":2350,"offset":407361,"length":158,"previous":"M16-GAP-02350","next":"M16-GAP-02352"},"M16-GAP-02352":{"line":2351,"offset":407519,"length":173,"previous":"M16-GAP-02351","next":"M16-GAP-02353"},"M16-GAP-02353":{"line":2352,"offset":407692,"length":166,"previous":"M16-GAP-02352","next":"M16-GAP-02354"},"M16-GAP-02354":{"line":2353,"offset":407858,"length":164,"previous":"M16-GAP-02353","next":"M16-GAP-02355"},"M16-GAP-02355":{"line":2354,"offset":408022,"length":171,"previous":"M16-GAP-02354","next":"M16-GAP-02356"},"M16-GAP-02356":{"line":2355,"offset":408193,"length":170,"previous":"M16-GAP-02355","next":"M16-GAP-02357"},"M16-GAP-02357":{"line":2356,"offset":408363,"length":167,"previous":"M16-GAP-02356","next":"M16-GAP-02358"},"M16-GAP-02358":{"line":2357,"offset":408530,"length":173,"previous":"M16-GAP-02357","next":"M16-GAP-02359"},"M16-GAP-02359":{"line":2358,"offset":408703,"length":158,"previous":"M16-GAP-02358","next":"M16-GAP-02360"},"M16-GAP-02360":{"line":2359,"offset":408861,"length":167,"previous":"M16-GAP-02359","next":"M16-GAP-02361"},"M16-GAP-02361":{"line":2360,"offset":409028,"length":163,"previous":"M16-GAP-02360","next":"M16-GAP-02362"},"M16-GAP-02362":{"line":2361,"offset":409191,"length":170,"previous":"M16-GAP-02361","next":"M16-GAP-02363"},"M16-GAP-02363":{"line":2362,"offset":409361,"length":166,"previous":"M16-GAP-02362","next":"M16-GAP-02364"},"M16-GAP-02364":{"line":2363,"offset":409527,"length":166,"previous":"M16-GAP-02363","next":"M16-GAP-02365"},"M16-GAP-02365":{"line":2364,"offset":409693,"length":159,"previous":"M16-GAP-02364","next":"M16-GAP-02366"},"M16-GAP-02366":{"line":2365,"offset":409852,"length":157,"previous":"M16-GAP-02365","next":"M16-GAP-02367"},"M16-GAP-02367":{"line":2366,"offset":410009,"length":171,"previous":"M16-GAP-02366","next":"M16-GAP-02368"},"M16-GAP-02368":{"line":2367,"offset":410180,"length":176,"previous":"M16-GAP-02367","next":"M16-GAP-02369"},"M16-GAP-02369":{"line":2368,"offset":410356,"length":168,"previous":"M16-GAP-02368","next":"M16-GAP-02370"},"M16-GAP-02370":{"line":2369,"offset":410524,"length":159,"previous":"M16-GAP-02369","next":"M16-GAP-02371"},"M16-GAP-02371":{"line":2370,"offset":410683,"length":160,"previous":"M16-GAP-02370","next":"M16-GAP-02372"},"M16-GAP-02372":{"line":2371,"offset":410843,"length":157,"previous":"M16-GAP-02371","next":"M16-GAP-02373"},"M16-GAP-02373":{"line":2372,"offset":411000,"length":162,"previous":"M16-GAP-02372","next":"M16-GAP-02374"},"M16-GAP-02374":{"line":2373,"offset":411162,"length":172,"previous":"M16-GAP-02373","next":"M16-GAP-02375"},"M16-GAP-02375":{"line":2374,"offset":411334,"length":160,"previous":"M16-GAP-02374","next":"M16-GAP-02376"},"M16-GAP-02376":{"line":2375,"offset":411494,"length":164,"previous":"M16-GAP-02375","next":"M16-GAP-02377"},"M16-GAP-02377":{"line":2376,"offset":411658,"length":164,"previous":"M16-GAP-02376","next":"M16-GAP-02378"},"M16-GAP-02378":{"line":2377,"offset":411822,"length":171,"previous":"M16-GAP-02377","next":"M16-GAP-02379"},"M16-GAP-02379":{"line":2378,"offset":411993,"length":167,"previous":"M16-GAP-02378","next":"M16-GAP-02380"},"M16-GAP-02380":{"line":2379,"offset":412160,"length":170,"previous":"M16-GAP-02379","next":"M16-GAP-02381"},"M16-GAP-02381":{"line":2380,"offset":412330,"length":166,"previous":"M16-GAP-02380","next":"M16-GAP-02382"},"M16-GAP-02382":{"line":2381,"offset":412496,"length":165,"previous":"M16-GAP-02381","next":"M16-GAP-02383"},"M16-GAP-02383":{"line":2382,"offset":412661,"length":167,"previous":"M16-GAP-02382","next":"M16-GAP-02384"},"M16-GAP-02384":{"line":2383,"offset":412828,"length":172,"previous":"M16-GAP-02383","next":"M16-GAP-02385"},"M16-GAP-02385":{"line":2384,"offset":413000,"length":165,"previous":"M16-GAP-02384","next":"M16-GAP-02386"},"M16-GAP-02386":{"line":2385,"offset":413165,"length":165,"previous":"M16-GAP-02385","next":"M16-GAP-02387"},"M16-GAP-02387":{"line":2386,"offset":413330,"length":165,"previous":"M16-GAP-02386","next":"M16-GAP-02388"},"M16-GAP-02388":{"line":2387,"offset":413495,"length":168,"previous":"M16-GAP-02387","next":"M16-GAP-02389"},"M16-GAP-02389":{"line":2388,"offset":413663,"length":167,"previous":"M16-GAP-02388","next":"M16-GAP-02390"},"M16-GAP-02390":{"line":2389,"offset":413830,"length":168,"previous":"M16-GAP-02389","next":"M16-GAP-02391"},"M16-GAP-02391":{"line":2390,"offset":413998,"length":166,"previous":"M16-GAP-02390","next":"M16-GAP-02392"},"M16-GAP-02392":{"line":2391,"offset":414164,"length":165,"previous":"M16-GAP-02391","next":"M16-GAP-02393"},"M16-GAP-02393":{"line":2392,"offset":414329,"length":172,"previous":"M16-GAP-02392","next":"M16-GAP-02394"},"M16-GAP-02394":{"line":2393,"offset":414501,"length":174,"previous":"M16-GAP-02393","next":"M16-GAP-02395"},"M16-GAP-02395":{"line":2394,"offset":414675,"length":167,"previous":"M16-GAP-02394","next":"M16-GAP-02396"},"M16-GAP-02396":{"line":2395,"offset":414842,"length":165,"previous":"M16-GAP-02395","next":"M16-GAP-02397"},"M16-GAP-02397":{"line":2396,"offset":415007,"length":167,"previous":"M16-GAP-02396","next":"M16-GAP-02398"},"M16-GAP-02398":{"line":2397,"offset":415174,"length":168,"previous":"M16-GAP-02397","next":"M16-GAP-02399"},"M16-GAP-02399":{"line":2398,"offset":415342,"length":160,"previous":"M16-GAP-02398","next":"M16-GAP-02400"},"M16-GAP-02400":{"line":2399,"offset":415502,"length":160,"previous":"M16-GAP-02399","next":"M16-GAP-02401"},"M16-GAP-02401":{"line":2400,"offset":415662,"length":158,"previous":"M16-GAP-02400","next":"M16-GAP-02402"},"M16-GAP-02402":{"line":2401,"offset":415820,"length":166,"previous":"M16-GAP-02401","next":"M16-GAP-02403"},"M16-GAP-02403":{"line":2402,"offset":415986,"length":162,"previous":"M16-GAP-02402","next":"M16-GAP-02404"},"M16-GAP-02404":{"line":2403,"offset":416148,"length":161,"previous":"M16-GAP-02403","next":"M16-GAP-02405"},"M16-GAP-02405":{"line":2404,"offset":416309,"length":163,"previous":"M16-GAP-02404","next":"M16-GAP-02406"},"M16-GAP-02406":{"line":2405,"offset":416472,"length":169,"previous":"M16-GAP-02405","next":"M16-GAP-02407"},"M16-GAP-02407":{"line":2406,"offset":416641,"length":169,"previous":"M16-GAP-02406","next":"M16-GAP-02408"},"M16-GAP-02408":{"line":2407,"offset":416810,"length":170,"previous":"M16-GAP-02407","next":"M16-GAP-02409"},"M16-GAP-02409":{"line":2408,"offset":416980,"length":167,"previous":"M16-GAP-02408","next":"M16-GAP-02410"},"M16-GAP-02410":{"line":2409,"offset":417147,"length":175,"previous":"M16-GAP-02409","next":"M16-GAP-02411"},"M16-GAP-02411":{"line":2410,"offset":417322,"length":168,"previous":"M16-GAP-02410","next":"M16-GAP-02412"},"M16-GAP-02412":{"line":2411,"offset":417490,"length":162,"previous":"M16-GAP-02411","next":"M16-GAP-02413"},"M16-GAP-02413":{"line":2412,"offset":417652,"length":169,"previous":"M16-GAP-02412","next":"M16-GAP-02414"},"M16-GAP-02414":{"line":2413,"offset":417821,"length":165,"previous":"M16-GAP-02413","next":"M16-GAP-02415"},"M16-GAP-02415":{"line":2414,"offset":417986,"length":166,"previous":"M16-GAP-02414","next":"M16-GAP-02416"},"M16-GAP-02416":{"line":2415,"offset":418152,"length":174,"previous":"M16-GAP-02415","next":"M16-GAP-02417"},"M16-GAP-02417":{"line":2416,"offset":418326,"length":185,"previous":"M16-GAP-02416","next":"M16-GAP-02418"},"M16-GAP-02418":{"line":2417,"offset":418511,"length":188,"previous":"M16-GAP-02417","next":"M16-GAP-02419"},"M16-GAP-02419":{"line":2418,"offset":418699,"length":172,"previous":"M16-GAP-02418","next":"M16-GAP-02420"},"M16-GAP-02420":{"line":2419,"offset":418871,"length":181,"previous":"M16-GAP-02419","next":"M16-GAP-02421"},"M16-GAP-02421":{"line":2420,"offset":419052,"length":177,"previous":"M16-GAP-02420","next":"M16-GAP-02422"},"M16-GAP-02422":{"line":2421,"offset":419229,"length":169,"previous":"M16-GAP-02421","next":"M16-GAP-02423"},"M16-GAP-02423":{"line":2422,"offset":419398,"length":168,"previous":"M16-GAP-02422","next":"M16-GAP-02424"},"M16-GAP-02424":{"line":2423,"offset":419566,"length":166,"previous":"M16-GAP-02423","next":"M16-GAP-02425"},"M16-GAP-02425":{"line":2424,"offset":419732,"length":163,"previous":"M16-GAP-02424","next":"M16-GAP-02426"},"M16-GAP-02426":{"line":2425,"offset":419895,"length":168,"previous":"M16-GAP-02425","next":"M16-GAP-02427"},"M16-GAP-02427":{"line":2426,"offset":420063,"length":191,"previous":"M16-GAP-02426","next":"M16-GAP-02428"},"M16-GAP-02428":{"line":2427,"offset":420254,"length":191,"previous":"M16-GAP-02427","next":"M16-GAP-02429"},"M16-GAP-02429":{"line":2428,"offset":420445,"length":187,"previous":"M16-GAP-02428","next":"M16-GAP-02430"},"M16-GAP-02430":{"line":2429,"offset":420632,"length":194,"previous":"M16-GAP-02429","next":"M16-GAP-02431"},"M16-GAP-02431":{"line":2430,"offset":420826,"length":161,"previous":"M16-GAP-02430","next":"M16-GAP-02432"},"M16-GAP-02432":{"line":2431,"offset":420987,"length":173,"previous":"M16-GAP-02431","next":"M16-GAP-02433"},"M16-GAP-02433":{"line":2432,"offset":421160,"length":167,"previous":"M16-GAP-02432","next":"M16-GAP-02434"},"M16-GAP-02434":{"line":2433,"offset":421327,"length":179,"previous":"M16-GAP-02433","next":"M16-GAP-02435"},"M16-GAP-02435":{"line":2434,"offset":421506,"length":162,"previous":"M16-GAP-02434","next":"M16-GAP-02436"},"M16-GAP-02436":{"line":2435,"offset":421668,"length":166,"previous":"M16-GAP-02435","next":"M16-GAP-02437"},"M16-GAP-02437":{"line":2436,"offset":421834,"length":166,"previous":"M16-GAP-02436","next":"M16-GAP-02438"},"M16-GAP-02438":{"line":2437,"offset":422000,"length":168,"previous":"M16-GAP-02437","next":"M16-GAP-02439"},"M16-GAP-02439":{"line":2438,"offset":422168,"length":173,"previous":"M16-GAP-02438","next":"M16-GAP-02440"},"M16-GAP-02440":{"line":2439,"offset":422341,"length":166,"previous":"M16-GAP-02439","next":"M16-GAP-02441"},"M16-GAP-02441":{"line":2440,"offset":422507,"length":174,"previous":"M16-GAP-02440","next":"M16-GAP-02442"},"M16-GAP-02442":{"line":2441,"offset":422681,"length":183,"previous":"M16-GAP-02441","next":"M16-GAP-02443"},"M16-GAP-02443":{"line":2442,"offset":422864,"length":169,"previous":"M16-GAP-02442","next":"M16-GAP-02444"},"M16-GAP-02444":{"line":2443,"offset":423033,"length":171,"previous":"M16-GAP-02443","next":"M16-GAP-02445"},"M16-GAP-02445":{"line":2444,"offset":423204,"length":164,"previous":"M16-GAP-02444","next":"M16-GAP-02446"},"M16-GAP-02446":{"line":2445,"offset":423368,"length":167,"previous":"M16-GAP-02445","next":"M16-GAP-02447"},"M16-GAP-02447":{"line":2446,"offset":423535,"length":170,"previous":"M16-GAP-02446","next":"M16-GAP-02448"},"M16-GAP-02448":{"line":2447,"offset":423705,"length":164,"previous":"M16-GAP-02447","next":"M16-GAP-02449"},"M16-GAP-02449":{"line":2448,"offset":423869,"length":168,"previous":"M16-GAP-02448","next":"M16-GAP-02450"},"M16-GAP-02450":{"line":2449,"offset":424037,"length":171,"previous":"M16-GAP-02449","next":"M16-GAP-02451"},"M16-GAP-02451":{"line":2450,"offset":424208,"length":170,"previous":"M16-GAP-02450","next":"M16-GAP-02452"},"M16-GAP-02452":{"line":2451,"offset":424378,"length":169,"previous":"M16-GAP-02451","next":"M16-GAP-02453"},"M16-GAP-02453":{"line":2452,"offset":424547,"length":168,"previous":"M16-GAP-02452","next":"M16-GAP-02454"},"M16-GAP-02454":{"line":2453,"offset":424715,"length":179,"previous":"M16-GAP-02453","next":"M16-GAP-02455"},"M16-GAP-02455":{"line":2454,"offset":424894,"length":179,"previous":"M16-GAP-02454","next":"M16-GAP-02456"},"M16-GAP-02456":{"line":2455,"offset":425073,"length":177,"previous":"M16-GAP-02455","next":"M16-GAP-02457"},"M16-GAP-02457":{"line":2456,"offset":425250,"length":181,"previous":"M16-GAP-02456","next":"M16-GAP-02458"},"M16-GAP-02458":{"line":2457,"offset":425431,"length":181,"previous":"M16-GAP-02457","next":"M16-GAP-02459"},"M16-GAP-02459":{"line":2458,"offset":425612,"length":181,"previous":"M16-GAP-02458","next":"M16-GAP-02460"},"M16-GAP-02460":{"line":2459,"offset":425793,"length":179,"previous":"M16-GAP-02459","next":"M16-GAP-02461"},"M16-GAP-02461":{"line":2460,"offset":425972,"length":176,"previous":"M16-GAP-02460","next":"M16-GAP-02462"},"M16-GAP-02462":{"line":2461,"offset":426148,"length":172,"previous":"M16-GAP-02461","next":"M16-GAP-02463"},"M16-GAP-02463":{"line":2462,"offset":426320,"length":169,"previous":"M16-GAP-02462","next":"M16-GAP-02464"},"M16-GAP-02464":{"line":2463,"offset":426489,"length":177,"previous":"M16-GAP-02463","next":"M16-GAP-02465"},"M16-GAP-02465":{"line":2464,"offset":426666,"length":166,"previous":"M16-GAP-02464","next":"M16-GAP-02466"},"M16-GAP-02466":{"line":2465,"offset":426832,"length":167,"previous":"M16-GAP-02465","next":"M16-GAP-02467"},"M16-GAP-02467":{"line":2466,"offset":426999,"length":169,"previous":"M16-GAP-02466","next":"M16-GAP-02468"},"M16-GAP-02468":{"line":2467,"offset":427168,"length":176,"previous":"M16-GAP-02467","next":"M16-GAP-02469"},"M16-GAP-02469":{"line":2468,"offset":427344,"length":176,"previous":"M16-GAP-02468","next":"M16-GAP-02470"},"M16-GAP-02470":{"line":2469,"offset":427520,"length":174,"previous":"M16-GAP-02469","next":"M16-GAP-02471"},"M16-GAP-02471":{"line":2470,"offset":427694,"length":174,"previous":"M16-GAP-02470","next":"M16-GAP-02472"},"M16-GAP-02472":{"line":2471,"offset":427868,"length":173,"previous":"M16-GAP-02471","next":"M16-GAP-02473"},"M16-GAP-02473":{"line":2472,"offset":428041,"length":177,"previous":"M16-GAP-02472","next":"M16-GAP-02474"},"M16-GAP-02474":{"line":2473,"offset":428218,"length":168,"previous":"M16-GAP-02473","next":"M16-GAP-02475"},"M16-GAP-02475":{"line":2474,"offset":428386,"length":166,"previous":"M16-GAP-02474","next":"M16-GAP-02476"},"M16-GAP-02476":{"line":2475,"offset":428552,"length":173,"previous":"M16-GAP-02475","next":"M16-GAP-02477"},"M16-GAP-02477":{"line":2476,"offset":428725,"length":167,"previous":"M16-GAP-02476","next":"M16-GAP-02478"},"M16-GAP-02478":{"line":2477,"offset":428892,"length":171,"previous":"M16-GAP-02477","next":"M16-GAP-02479"},"M16-GAP-02479":{"line":2478,"offset":429063,"length":162,"previous":"M16-GAP-02478","next":"M16-GAP-02480"},"M16-GAP-02480":{"line":2479,"offset":429225,"length":162,"previous":"M16-GAP-02479","next":"M16-GAP-02481"},"M16-GAP-02481":{"line":2480,"offset":429387,"length":169,"previous":"M16-GAP-02480","next":"M16-GAP-02482"},"M16-GAP-02482":{"line":2481,"offset":429556,"length":176,"previous":"M16-GAP-02481","next":"M16-GAP-02483"},"M16-GAP-02483":{"line":2482,"offset":429732,"length":160,"previous":"M16-GAP-02482","next":"M16-GAP-02484"},"M16-GAP-02484":{"line":2483,"offset":429892,"length":166,"previous":"M16-GAP-02483","next":"M16-GAP-02485"},"M16-GAP-02485":{"line":2484,"offset":430058,"length":181,"previous":"M16-GAP-02484","next":"M16-GAP-02486"},"M16-GAP-02486":{"line":2485,"offset":430239,"length":178,"previous":"M16-GAP-02485","next":"M16-GAP-02487"},"M16-GAP-02487":{"line":2486,"offset":430417,"length":163,"previous":"M16-GAP-02486","next":"M16-GAP-02488"},"M16-GAP-02488":{"line":2487,"offset":430580,"length":167,"previous":"M16-GAP-02487","next":"M16-GAP-02489"},"M16-GAP-02489":{"line":2488,"offset":430747,"length":164,"previous":"M16-GAP-02488","next":"M16-GAP-02490"},"M16-GAP-02490":{"line":2489,"offset":430911,"length":172,"previous":"M16-GAP-02489","next":"M16-GAP-02491"},"M16-GAP-02491":{"line":2490,"offset":431083,"length":175,"previous":"M16-GAP-02490","next":"M16-GAP-02492"},"M16-GAP-02492":{"line":2491,"offset":431258,"length":184,"previous":"M16-GAP-02491","next":"M16-GAP-02493"},"M16-GAP-02493":{"line":2492,"offset":431442,"length":173,"previous":"M16-GAP-02492","next":"M16-GAP-02494"},"M16-GAP-02494":{"line":2493,"offset":431615,"length":172,"previous":"M16-GAP-02493","next":"M16-GAP-02495"},"M16-GAP-02495":{"line":2494,"offset":431787,"length":171,"previous":"M16-GAP-02494","next":"M16-GAP-02496"},"M16-GAP-02496":{"line":2495,"offset":431958,"length":171,"previous":"M16-GAP-02495","next":"M16-GAP-02497"},"M16-GAP-02497":{"line":2496,"offset":432129,"length":173,"previous":"M16-GAP-02496","next":"M16-GAP-02498"},"M16-GAP-02498":{"line":2497,"offset":432302,"length":170,"previous":"M16-GAP-02497","next":"M16-GAP-02499"},"M16-GAP-02499":{"line":2498,"offset":432472,"length":173,"previous":"M16-GAP-02498","next":"M16-GAP-02500"},"M16-GAP-02500":{"line":2499,"offset":432645,"length":171,"previous":"M16-GAP-02499","next":"M16-GAP-02501"},"M16-GAP-02501":{"line":2500,"offset":432816,"length":173,"previous":"M16-GAP-02500","next":"M16-GAP-02502"},"M16-GAP-02502":{"line":2501,"offset":432989,"length":170,"previous":"M16-GAP-02501","next":"M16-GAP-02503"},"M16-GAP-02503":{"line":2502,"offset":433159,"length":171,"previous":"M16-GAP-02502","next":"M16-GAP-02504"},"M16-GAP-02504":{"line":2503,"offset":433330,"length":168,"previous":"M16-GAP-02503","next":"M16-GAP-02505"},"M16-GAP-02505":{"line":2504,"offset":433498,"length":169,"previous":"M16-GAP-02504","next":"M16-GAP-02506"},"M16-GAP-02506":{"line":2505,"offset":433667,"length":172,"previous":"M16-GAP-02505","next":"M16-GAP-02507"},"M16-GAP-02507":{"line":2506,"offset":433839,"length":171,"previous":"M16-GAP-02506","next":"M16-GAP-02508"},"M16-GAP-02508":{"line":2507,"offset":434010,"length":168,"previous":"M16-GAP-02507","next":"M16-GAP-02509"},"M16-GAP-02509":{"line":2508,"offset":434178,"length":173,"previous":"M16-GAP-02508","next":"M16-GAP-02510"},"M16-GAP-02510":{"line":2509,"offset":434351,"length":164,"previous":"M16-GAP-02509","next":"M16-GAP-02511"},"M16-GAP-02511":{"line":2510,"offset":434515,"length":162,"previous":"M16-GAP-02510","next":"M16-GAP-02512"},"M16-GAP-02512":{"line":2511,"offset":434677,"length":169,"previous":"M16-GAP-02511","next":"M16-GAP-02513"},"M16-GAP-02513":{"line":2512,"offset":434846,"length":180,"previous":"M16-GAP-02512","next":"M16-GAP-02514"},"M16-GAP-02514":{"line":2513,"offset":435026,"length":169,"previous":"M16-GAP-02513","next":"M16-GAP-02515"},"M16-GAP-02515":{"line":2514,"offset":435195,"length":170,"previous":"M16-GAP-02514","next":"M16-GAP-02516"},"M16-GAP-02516":{"line":2515,"offset":435365,"length":164,"previous":"M16-GAP-02515","next":"M16-GAP-02517"},"M16-GAP-02517":{"line":2516,"offset":435529,"length":178,"previous":"M16-GAP-02516","next":"M16-GAP-02518"},"M16-GAP-02518":{"line":2517,"offset":435707,"length":178,"previous":"M16-GAP-02517","next":"M16-GAP-02519"},"M16-GAP-02519":{"line":2518,"offset":435885,"length":172,"previous":"M16-GAP-02518","next":"M16-GAP-02520"},"M16-GAP-02520":{"line":2519,"offset":436057,"length":180,"previous":"M16-GAP-02519","next":"M16-GAP-02521"},"M16-GAP-02521":{"line":2520,"offset":436237,"length":183,"previous":"M16-GAP-02520","next":"M16-GAP-02522"},"M16-GAP-02522":{"line":2521,"offset":436420,"length":181,"previous":"M16-GAP-02521","next":"M16-GAP-02523"},"M16-GAP-02523":{"line":2522,"offset":436601,"length":174,"previous":"M16-GAP-02522","next":"M16-GAP-02524"},"M16-GAP-02524":{"line":2523,"offset":436775,"length":177,"previous":"M16-GAP-02523","next":"M16-GAP-02525"},"M16-GAP-02525":{"line":2524,"offset":436952,"length":164,"previous":"M16-GAP-02524","next":"M16-GAP-02526"},"M16-GAP-02526":{"line":2525,"offset":437116,"length":166,"previous":"M16-GAP-02525","next":"M16-GAP-02527"},"M16-GAP-02527":{"line":2526,"offset":437282,"length":158,"previous":"M16-GAP-02526","next":"M16-GAP-02528"},"M16-GAP-02528":{"line":2527,"offset":437440,"length":171,"previous":"M16-GAP-02527","next":"M16-GAP-02529"},"M16-GAP-02529":{"line":2528,"offset":437611,"length":164,"previous":"M16-GAP-02528","next":"M16-GAP-02530"},"M16-GAP-02530":{"line":2529,"offset":437775,"length":164,"previous":"M16-GAP-02529","next":"M16-GAP-02531"},"M16-GAP-02531":{"line":2530,"offset":437939,"length":167,"previous":"M16-GAP-02530","next":"M16-GAP-02532"},"M16-GAP-02532":{"line":2531,"offset":438106,"length":174,"previous":"M16-GAP-02531","next":"M16-GAP-02533"},"M16-GAP-02533":{"line":2532,"offset":438280,"length":171,"previous":"M16-GAP-02532","next":"M16-GAP-02534"},"M16-GAP-02534":{"line":2533,"offset":438451,"length":171,"previous":"M16-GAP-02533","next":"M16-GAP-02535"},"M16-GAP-02535":{"line":2534,"offset":438622,"length":173,"previous":"M16-GAP-02534","next":"M16-GAP-02536"},"M16-GAP-02536":{"line":2535,"offset":438795,"length":178,"previous":"M16-GAP-02535","next":"M16-GAP-02537"},"M16-GAP-02537":{"line":2536,"offset":438973,"length":167,"previous":"M16-GAP-02536","next":"M16-GAP-02538"},"M16-GAP-02538":{"line":2537,"offset":439140,"length":166,"previous":"M16-GAP-02537","next":"M16-GAP-02539"},"M16-GAP-02539":{"line":2538,"offset":439306,"length":163,"previous":"M16-GAP-02538","next":"M16-GAP-02540"},"M16-GAP-02540":{"line":2539,"offset":439469,"length":164,"previous":"M16-GAP-02539","next":"M16-GAP-02541"},"M16-GAP-02541":{"line":2540,"offset":439633,"length":164,"previous":"M16-GAP-02540","next":"M16-GAP-02542"},"M16-GAP-02542":{"line":2541,"offset":439797,"length":174,"previous":"M16-GAP-02541","next":"M16-GAP-02543"},"M16-GAP-02543":{"line":2542,"offset":439971,"length":177,"previous":"M16-GAP-02542","next":"M16-GAP-02544"},"M16-GAP-02544":{"line":2543,"offset":440148,"length":168,"previous":"M16-GAP-02543","next":"M16-GAP-02545"},"M16-GAP-02545":{"line":2544,"offset":440316,"length":169,"previous":"M16-GAP-02544","next":"M16-GAP-02546"},"M16-GAP-02546":{"line":2545,"offset":440485,"length":168,"previous":"M16-GAP-02545","next":"M16-GAP-02547"},"M16-GAP-02547":{"line":2546,"offset":440653,"length":179,"previous":"M16-GAP-02546","next":"M16-GAP-02548"},"M16-GAP-02548":{"line":2547,"offset":440832,"length":169,"previous":"M16-GAP-02547","next":"M16-GAP-02549"},"M16-GAP-02549":{"line":2548,"offset":441001,"length":175,"previous":"M16-GAP-02548","next":"M16-GAP-02550"},"M16-GAP-02550":{"line":2549,"offset":441176,"length":171,"previous":"M16-GAP-02549","next":"M16-GAP-02551"},"M16-GAP-02551":{"line":2550,"offset":441347,"length":166,"previous":"M16-GAP-02550","next":"M16-GAP-02552"},"M16-GAP-02552":{"line":2551,"offset":441513,"length":168,"previous":"M16-GAP-02551","next":"M16-GAP-02553"},"M16-GAP-02553":{"line":2552,"offset":441681,"length":175,"previous":"M16-GAP-02552","next":"M16-GAP-02554"},"M16-GAP-02554":{"line":2553,"offset":441856,"length":175,"previous":"M16-GAP-02553","next":"M16-GAP-02555"},"M16-GAP-02555":{"line":2554,"offset":442031,"length":166,"previous":"M16-GAP-02554","next":"M16-GAP-02556"},"M16-GAP-02556":{"line":2555,"offset":442197,"length":167,"previous":"M16-GAP-02555","next":"M16-GAP-02557"},"M16-GAP-02557":{"line":2556,"offset":442364,"length":167,"previous":"M16-GAP-02556","next":"M16-GAP-02558"},"M16-GAP-02558":{"line":2557,"offset":442531,"length":171,"previous":"M16-GAP-02557","next":"M16-GAP-02559"},"M16-GAP-02559":{"line":2558,"offset":442702,"length":174,"previous":"M16-GAP-02558","next":"M16-GAP-02560"},"M16-GAP-02560":{"line":2559,"offset":442876,"length":166,"previous":"M16-GAP-02559","next":"M16-GAP-02561"},"M16-GAP-02561":{"line":2560,"offset":443042,"length":169,"previous":"M16-GAP-02560","next":"M16-GAP-02562"},"M16-GAP-02562":{"line":2561,"offset":443211,"length":170,"previous":"M16-GAP-02561","next":"M16-GAP-02563"},"M16-GAP-02563":{"line":2562,"offset":443381,"length":168,"previous":"M16-GAP-02562","next":"M16-GAP-02564"},"M16-GAP-02564":{"line":2563,"offset":443549,"length":167,"previous":"M16-GAP-02563","next":"M16-GAP-02565"},"M16-GAP-02565":{"line":2564,"offset":443716,"length":167,"previous":"M16-GAP-02564","next":"M16-GAP-02566"},"M16-GAP-02566":{"line":2565,"offset":443883,"length":167,"previous":"M16-GAP-02565","next":"M16-GAP-02567"},"M16-GAP-02567":{"line":2566,"offset":444050,"length":165,"previous":"M16-GAP-02566","next":"M16-GAP-02568"},"M16-GAP-02568":{"line":2567,"offset":444215,"length":169,"previous":"M16-GAP-02567","next":"M16-GAP-02569"},"M16-GAP-02569":{"line":2568,"offset":444384,"length":172,"previous":"M16-GAP-02568","next":"M16-GAP-02570"},"M16-GAP-02570":{"line":2569,"offset":444556,"length":167,"previous":"M16-GAP-02569","next":"M16-GAP-02571"},"M16-GAP-02571":{"line":2570,"offset":444723,"length":177,"previous":"M16-GAP-02570","next":"M16-GAP-02572"},"M16-GAP-02572":{"line":2571,"offset":444900,"length":160,"previous":"M16-GAP-02571","next":"M16-GAP-02573"},"M16-GAP-02573":{"line":2572,"offset":445060,"length":166,"previous":"M16-GAP-02572","next":"M16-GAP-02574"},"M16-GAP-02574":{"line":2573,"offset":445226,"length":164,"previous":"M16-GAP-02573","next":"M16-GAP-02575"},"M16-GAP-02575":{"line":2574,"offset":445390,"length":164,"previous":"M16-GAP-02574","next":"M16-GAP-02576"},"M16-GAP-02576":{"line":2575,"offset":445554,"length":161,"previous":"M16-GAP-02575","next":"M16-GAP-02577"},"M16-GAP-02577":{"line":2576,"offset":445715,"length":176,"previous":"M16-GAP-02576","next":"M16-GAP-02578"},"M16-GAP-02578":{"line":2577,"offset":445891,"length":168,"previous":"M16-GAP-02577","next":"M16-GAP-02579"},"M16-GAP-02579":{"line":2578,"offset":446059,"length":171,"previous":"M16-GAP-02578","next":"M16-GAP-02580"},"M16-GAP-02580":{"line":2579,"offset":446230,"length":161,"previous":"M16-GAP-02579","next":"M16-GAP-02581"},"M16-GAP-02581":{"line":2580,"offset":446391,"length":174,"previous":"M16-GAP-02580","next":"M16-GAP-02582"},"M16-GAP-02582":{"line":2581,"offset":446565,"length":168,"previous":"M16-GAP-02581","next":"M16-GAP-02583"},"M16-GAP-02583":{"line":2582,"offset":446733,"length":162,"previous":"M16-GAP-02582","next":"M16-GAP-02584"},"M16-GAP-02584":{"line":2583,"offset":446895,"length":169,"previous":"M16-GAP-02583","next":"M16-GAP-02585"},"M16-GAP-02585":{"line":2584,"offset":447064,"length":166,"previous":"M16-GAP-02584","next":"M16-GAP-02586"},"M16-GAP-02586":{"line":2585,"offset":447230,"length":178,"previous":"M16-GAP-02585","next":"M16-GAP-02587"},"M16-GAP-02587":{"line":2586,"offset":447408,"length":164,"previous":"M16-GAP-02586","next":"M16-GAP-02588"},"M16-GAP-02588":{"line":2587,"offset":447572,"length":169,"previous":"M16-GAP-02587","next":"M16-GAP-02589"},"M16-GAP-02589":{"line":2588,"offset":447741,"length":164,"previous":"M16-GAP-02588","next":"M16-GAP-02590"},"M16-GAP-02590":{"line":2589,"offset":447905,"length":176,"previous":"M16-GAP-02589","next":"M16-GAP-02591"},"M16-GAP-02591":{"line":2590,"offset":448081,"length":167,"previous":"M16-GAP-02590","next":"M16-GAP-02592"},"M16-GAP-02592":{"line":2591,"offset":448248,"length":178,"previous":"M16-GAP-02591","next":"M16-GAP-02593"},"M16-GAP-02593":{"line":2592,"offset":448426,"length":170,"previous":"M16-GAP-02592","next":"M16-GAP-02594"},"M16-GAP-02594":{"line":2593,"offset":448596,"length":176,"previous":"M16-GAP-02593","next":"M16-GAP-02595"},"M16-GAP-02595":{"line":2594,"offset":448772,"length":177,"previous":"M16-GAP-02594","next":"M16-GAP-02596"},"M16-GAP-02596":{"line":2595,"offset":448949,"length":177,"previous":"M16-GAP-02595","next":"M16-GAP-02597"},"M16-GAP-02597":{"line":2596,"offset":449126,"length":179,"previous":"M16-GAP-02596","next":"M16-GAP-02598"},"M16-GAP-02598":{"line":2597,"offset":449305,"length":160,"previous":"M16-GAP-02597","next":"M16-GAP-02599"},"M16-GAP-02599":{"line":2598,"offset":449465,"length":156,"previous":"M16-GAP-02598","next":"M16-GAP-02600"},"M16-GAP-02600":{"line":2599,"offset":449621,"length":163,"previous":"M16-GAP-02599","next":"M16-GAP-02601"},"M16-GAP-02601":{"line":2600,"offset":449784,"length":167,"previous":"M16-GAP-02600","next":"M16-GAP-02602"},"M16-GAP-02602":{"line":2601,"offset":449951,"length":165,"previous":"M16-GAP-02601","next":"M16-GAP-02603"},"M16-GAP-02603":{"line":2602,"offset":450116,"length":163,"previous":"M16-GAP-02602","next":"M16-GAP-02604"},"M16-GAP-02604":{"line":2603,"offset":450279,"length":166,"previous":"M16-GAP-02603","next":"M16-GAP-02605"},"M16-GAP-02605":{"line":2604,"offset":450445,"length":163,"previous":"M16-GAP-02604","next":"M16-GAP-02606"},"M16-GAP-02606":{"line":2605,"offset":450608,"length":167,"previous":"M16-GAP-02605","next":"M16-GAP-02607"},"M16-GAP-02607":{"line":2606,"offset":450775,"length":162,"previous":"M16-GAP-02606","next":"M16-GAP-02608"},"M16-GAP-02608":{"line":2607,"offset":450937,"length":161,"previous":"M16-GAP-02607","next":"M16-GAP-02609"},"M16-GAP-02609":{"line":2608,"offset":451098,"length":171,"previous":"M16-GAP-02608","next":"M16-GAP-02610"},"M16-GAP-02610":{"line":2609,"offset":451269,"length":166,"previous":"M16-GAP-02609","next":"M16-GAP-02611"},"M16-GAP-02611":{"line":2610,"offset":451435,"length":162,"previous":"M16-GAP-02610","next":"M16-GAP-02612"},"M16-GAP-02612":{"line":2611,"offset":451597,"length":164,"previous":"M16-GAP-02611","next":"M16-GAP-02613"},"M16-GAP-02613":{"line":2612,"offset":451761,"length":165,"previous":"M16-GAP-02612","next":"M16-GAP-02614"},"M16-GAP-02614":{"line":2613,"offset":451926,"length":162,"previous":"M16-GAP-02613","next":"M16-GAP-02615"},"M16-GAP-02615":{"line":2614,"offset":452088,"length":166,"previous":"M16-GAP-02614","next":"M16-GAP-02616"},"M16-GAP-02616":{"line":2615,"offset":452254,"length":161,"previous":"M16-GAP-02615","next":"M16-GAP-02617"},"M16-GAP-02617":{"line":2616,"offset":452415,"length":165,"previous":"M16-GAP-02616","next":"M16-GAP-02618"},"M16-GAP-02618":{"line":2617,"offset":452580,"length":162,"previous":"M16-GAP-02617","next":"M16-GAP-02619"},"M16-GAP-02619":{"line":2618,"offset":452742,"length":165,"previous":"M16-GAP-02618","next":"M16-GAP-02620"},"M16-GAP-02620":{"line":2619,"offset":452907,"length":166,"previous":"M16-GAP-02619","next":"M16-GAP-02621"},"M16-GAP-02621":{"line":2620,"offset":453073,"length":165,"previous":"M16-GAP-02620","next":"M16-GAP-02622"},"M16-GAP-02622":{"line":2621,"offset":453238,"length":163,"previous":"M16-GAP-02621","next":"M16-GAP-02623"},"M16-GAP-02623":{"line":2622,"offset":453401,"length":167,"previous":"M16-GAP-02622","next":"M16-GAP-02624"},"M16-GAP-02624":{"line":2623,"offset":453568,"length":164,"previous":"M16-GAP-02623","next":"M16-GAP-02625"},"M16-GAP-02625":{"line":2624,"offset":453732,"length":165,"previous":"M16-GAP-02624","next":"M16-GAP-02626"},"M16-GAP-02626":{"line":2625,"offset":453897,"length":167,"previous":"M16-GAP-02625","next":"M16-GAP-02627"},"M16-GAP-02627":{"line":2626,"offset":454064,"length":162,"previous":"M16-GAP-02626","next":"M16-GAP-02628"},"M16-GAP-02628":{"line":2627,"offset":454226,"length":162,"previous":"M16-GAP-02627","next":"M16-GAP-02629"},"M16-GAP-02629":{"line":2628,"offset":454388,"length":163,"previous":"M16-GAP-02628","next":"M16-GAP-02630"},"M16-GAP-02630":{"line":2629,"offset":454551,"length":162,"previous":"M16-GAP-02629","next":"M16-GAP-02631"},"M16-GAP-02631":{"line":2630,"offset":454713,"length":164,"previous":"M16-GAP-02630","next":"M16-GAP-02632"},"M16-GAP-02632":{"line":2631,"offset":454877,"length":161,"previous":"M16-GAP-02631","next":"M16-GAP-02633"},"M16-GAP-02633":{"line":2632,"offset":455038,"length":164,"previous":"M16-GAP-02632","next":"M16-GAP-02634"},"M16-GAP-02634":{"line":2633,"offset":455202,"length":163,"previous":"M16-GAP-02633","next":"M16-GAP-02635"},"M16-GAP-02635":{"line":2634,"offset":455365,"length":170,"previous":"M16-GAP-02634","next":"M16-GAP-02636"},"M16-GAP-02636":{"line":2635,"offset":455535,"length":166,"previous":"M16-GAP-02635","next":"M16-GAP-02637"},"M16-GAP-02637":{"line":2636,"offset":455701,"length":162,"previous":"M16-GAP-02636","next":"M16-GAP-02638"},"M16-GAP-02638":{"line":2637,"offset":455863,"length":156,"previous":"M16-GAP-02637","next":"M16-GAP-02639"},"M16-GAP-02639":{"line":2638,"offset":456019,"length":165,"previous":"M16-GAP-02638","next":"M16-GAP-02640"},"M16-GAP-02640":{"line":2639,"offset":456184,"length":160,"previous":"M16-GAP-02639","next":"M16-GAP-02641"},"M16-GAP-02641":{"line":2640,"offset":456344,"length":165,"previous":"M16-GAP-02640","next":"M16-GAP-02642"},"M16-GAP-02642":{"line":2641,"offset":456509,"length":161,"previous":"M16-GAP-02641","next":"M16-GAP-02643"},"M16-GAP-02643":{"line":2642,"offset":456670,"length":159,"previous":"M16-GAP-02642","next":"M16-GAP-02644"},"M16-GAP-02644":{"line":2643,"offset":456829,"length":151,"previous":"M16-GAP-02643","next":"M16-GAP-02645"},"M16-GAP-02645":{"line":2644,"offset":456980,"length":170,"previous":"M16-GAP-02644","next":"M16-GAP-02646"},"M16-GAP-02646":{"line":2645,"offset":457150,"length":164,"previous":"M16-GAP-02645","next":"M16-GAP-02647"},"M16-GAP-02647":{"line":2646,"offset":457314,"length":165,"previous":"M16-GAP-02646","next":"M16-GAP-02648"},"M16-GAP-02648":{"line":2647,"offset":457479,"length":155,"previous":"M16-GAP-02647","next":"M16-GAP-02649"},"M16-GAP-02649":{"line":2648,"offset":457634,"length":156,"previous":"M16-GAP-02648","next":"M16-GAP-02650"},"M16-GAP-02650":{"line":2649,"offset":457790,"length":155,"previous":"M16-GAP-02649","next":"M16-GAP-02651"},"M16-GAP-02651":{"line":2650,"offset":457945,"length":160,"previous":"M16-GAP-02650","next":"M16-GAP-02652"},"M16-GAP-02652":{"line":2651,"offset":458105,"length":165,"previous":"M16-GAP-02651","next":"M16-GAP-02653"},"M16-GAP-02653":{"line":2652,"offset":458270,"length":163,"previous":"M16-GAP-02652","next":"M16-GAP-02654"},"M16-GAP-02654":{"line":2653,"offset":458433,"length":164,"previous":"M16-GAP-02653","next":"M16-GAP-02655"},"M16-GAP-02655":{"line":2654,"offset":458597,"length":156,"previous":"M16-GAP-02654","next":"M16-GAP-02656"},"M16-GAP-02656":{"line":2655,"offset":458753,"length":162,"previous":"M16-GAP-02655","next":"M16-GAP-02657"},"M16-GAP-02657":{"line":2656,"offset":458915,"length":158,"previous":"M16-GAP-02656","next":"M16-GAP-02658"},"M16-GAP-02658":{"line":2657,"offset":459073,"length":159,"previous":"M16-GAP-02657","next":"M16-GAP-02659"},"M16-GAP-02659":{"line":2658,"offset":459232,"length":172,"previous":"M16-GAP-02658","next":"M16-GAP-02660"},"M16-GAP-02660":{"line":2659,"offset":459404,"length":161,"previous":"M16-GAP-02659","next":"M16-GAP-02661"},"M16-GAP-02661":{"line":2660,"offset":459565,"length":166,"previous":"M16-GAP-02660","next":"M16-GAP-02662"},"M16-GAP-02662":{"line":2661,"offset":459731,"length":158,"previous":"M16-GAP-02661","next":"M16-GAP-02663"},"M16-GAP-02663":{"line":2662,"offset":459889,"length":167,"previous":"M16-GAP-02662","next":"M16-GAP-02664"},"M16-GAP-02664":{"line":2663,"offset":460056,"length":157,"previous":"M16-GAP-02663","next":"M16-GAP-02665"},"M16-GAP-02665":{"line":2664,"offset":460213,"length":162,"previous":"M16-GAP-02664","next":"M16-GAP-02666"},"M16-GAP-02666":{"line":2665,"offset":460375,"length":157,"previous":"M16-GAP-02665","next":"M16-GAP-02667"},"M16-GAP-02667":{"line":2666,"offset":460532,"length":159,"previous":"M16-GAP-02666","next":"M17-GAP-00001"},"M17-GAP-00001":{"line":2667,"offset":460691,"length":161,"previous":"M16-GAP-02667","next":"M17-GAP-00002"},"M17-GAP-00002":{"line":2668,"offset":460852,"length":163,"previous":"M17-GAP-00001","next":"M17-GAP-00003"},"M17-GAP-00003":{"line":2669,"offset":461015,"length":168,"previous":"M17-GAP-00002","next":"M17-GAP-00004"},"M17-GAP-00004":{"line":2670,"offset":461183,"length":163,"previous":"M17-GAP-00003","next":"M17-GAP-00005"},"M17-GAP-00005":{"line":2671,"offset":461346,"length":163,"previous":"M17-GAP-00004","next":"M17-GAP-00006"},"M17-GAP-00006":{"line":2672,"offset":461509,"length":168,"previous":"M17-GAP-00005","next":"M17-GAP-00007"},"M17-GAP-00007":{"line":2673,"offset":461677,"length":168,"previous":"M17-GAP-00006","next":"M17-GAP-00008"},"M17-GAP-00008":{"line":2674,"offset":461845,"length":165,"previous":"M17-GAP-00007","next":"M17-GAP-00009"},"M17-GAP-00009":{"line":2675,"offset":462010,"length":170,"previous":"M17-GAP-00008","next":"M17-GAP-00010"},"M17-GAP-00010":{"line":2676,"offset":462180,"length":167,"previous":"M17-GAP-00009","next":"M17-GAP-00011"},"M17-GAP-00011":{"line":2677,"offset":462347,"length":160,"previous":"M17-GAP-00010","next":"M17-GAP-00012"},"M17-GAP-00012":{"line":2678,"offset":462507,"length":166,"previous":"M17-GAP-00011","next":"M17-GAP-00013"},"M17-GAP-00013":{"line":2679,"offset":462673,"length":167,"previous":"M17-GAP-00012","next":"M17-GAP-00014"},"M17-GAP-00014":{"line":2680,"offset":462840,"length":173,"previous":"M17-GAP-00013","next":"M17-GAP-00015"},"M17-GAP-00015":{"line":2681,"offset":463013,"length":157,"previous":"M17-GAP-00014","next":"M17-GAP-00016"},"M17-GAP-00016":{"line":2682,"offset":463170,"length":169,"previous":"M17-GAP-00015","next":"M17-GAP-00017"},"M17-GAP-00017":{"line":2683,"offset":463339,"length":169,"previous":"M17-GAP-00016","next":"M17-GAP-00018"},"M17-GAP-00018":{"line":2684,"offset":463508,"length":169,"previous":"M17-GAP-00017","next":"M17-GAP-00019"},"M17-GAP-00019":{"line":2685,"offset":463677,"length":166,"previous":"M17-GAP-00018","next":"M17-GAP-00020"},"M17-GAP-00020":{"line":2686,"offset":463843,"length":167,"previous":"M17-GAP-00019","next":"M17-GAP-00021"},"M17-GAP-00021":{"line":2687,"offset":464010,"length":170,"previous":"M17-GAP-00020","next":"M17-GAP-00022"},"M17-GAP-00022":{"line":2688,"offset":464180,"length":168,"previous":"M17-GAP-00021","next":"M17-GAP-00023"},"M17-GAP-00023":{"line":2689,"offset":464348,"length":160,"previous":"M17-GAP-00022","next":"M17-GAP-00024"},"M17-GAP-00024":{"line":2690,"offset":464508,"length":165,"previous":"M17-GAP-00023","next":"M17-GAP-00025"},"M17-GAP-00025":{"line":2691,"offset":464673,"length":164,"previous":"M17-GAP-00024","next":"M17-GAP-00026"},"M17-GAP-00026":{"line":2692,"offset":464837,"length":165,"previous":"M17-GAP-00025","next":"M17-GAP-00027"},"M17-GAP-00027":{"line":2693,"offset":465002,"length":163,"previous":"M17-GAP-00026","next":"M17-GAP-00028"},"M17-GAP-00028":{"line":2694,"offset":465165,"length":164,"previous":"M17-GAP-00027","next":"M17-GAP-00029"},"M17-GAP-00029":{"line":2695,"offset":465329,"length":170,"previous":"M17-GAP-00028","next":"M18-GAP-00001"},"M18-GAP-00001":{"line":2696,"offset":465499,"length":188,"previous":"M17-GAP-00029","next":"M18-GAP-00002"},"M18-GAP-00002":{"line":2697,"offset":465687,"length":191,"previous":"M18-GAP-00001","next":"M18-GAP-00003"},"M18-GAP-00003":{"line":2698,"offset":465878,"length":192,"previous":"M18-GAP-00002","next":"M18-GAP-00004"},"M18-GAP-00004":{"line":2699,"offset":466070,"length":189,"previous":"M18-GAP-00003","next":"M18-GAP-00005"},"M18-GAP-00005":{"line":2700,"offset":466259,"length":183,"previous":"M18-GAP-00004","next":"M18-GAP-00006"},"M18-GAP-00006":{"line":2701,"offset":466442,"length":188,"previous":"M18-GAP-00005","next":"M18-GAP-00007"},"M18-GAP-00007":{"line":2702,"offset":466630,"length":189,"previous":"M18-GAP-00006","next":"M18-GAP-00008"},"M18-GAP-00008":{"line":2703,"offset":466819,"length":186,"previous":"M18-GAP-00007","next":"M18-GAP-00009"},"M18-GAP-00009":{"line":2704,"offset":467005,"length":193,"previous":"M18-GAP-00008","next":"M18-GAP-00010"},"M18-GAP-00010":{"line":2705,"offset":467198,"length":191,"previous":"M18-GAP-00009","next":"M18-GAP-00011"},"M18-GAP-00011":{"line":2706,"offset":467389,"length":190,"previous":"M18-GAP-00010","next":"M18-GAP-00012"},"M18-GAP-00012":{"line":2707,"offset":467579,"length":191,"previous":"M18-GAP-00011","next":"M18-GAP-00013"},"M18-GAP-00013":{"line":2708,"offset":467770,"length":194,"previous":"M18-GAP-00012","next":"M18-GAP-00014"},"M18-GAP-00014":{"line":2709,"offset":467964,"length":189,"previous":"M18-GAP-00013","next":"M18-GAP-00015"},"M18-GAP-00015":{"line":2710,"offset":468153,"length":189,"previous":"M18-GAP-00014","next":"M18-GAP-00016"},"M18-GAP-00016":{"line":2711,"offset":468342,"length":191,"previous":"M18-GAP-00015","next":"M18-GAP-00017"},"M18-GAP-00017":{"line":2712,"offset":468533,"length":196,"previous":"M18-GAP-00016","next":"M18-GAP-00018"},"M18-GAP-00018":{"line":2713,"offset":468729,"length":195,"previous":"M18-GAP-00017","next":"M18-GAP-00019"},"M18-GAP-00019":{"line":2714,"offset":468924,"length":187,"previous":"M18-GAP-00018","next":"M18-GAP-00020"},"M18-GAP-00020":{"line":2715,"offset":469111,"length":188,"previous":"M18-GAP-00019","next":"M18-GAP-00021"},"M18-GAP-00021":{"line":2716,"offset":469299,"length":183,"previous":"M18-GAP-00020","next":"M18-GAP-00022"},"M18-GAP-00022":{"line":2717,"offset":469482,"length":190,"previous":"M18-GAP-00021","next":"M18-GAP-00023"},"M18-GAP-00023":{"line":2718,"offset":469672,"length":192,"previous":"M18-GAP-00022","next":"M18-GAP-00024"},"M18-GAP-00024":{"line":2719,"offset":469864,"length":187,"previous":"M18-GAP-00023","next":"M18-GAP-00025"},"M18-GAP-00025":{"line":2720,"offset":470051,"length":184,"previous":"M18-GAP-00024","next":"M18-GAP-00026"},"M18-GAP-00026":{"line":2721,"offset":470235,"length":186,"previous":"M18-GAP-00025","next":"M18-GAP-00027"},"M18-GAP-00027":{"line":2722,"offset":470421,"length":186,"previous":"M18-GAP-00026","next":"M18-GAP-00028"},"M18-GAP-00028":{"line":2723,"offset":470607,"length":188,"previous":"M18-GAP-00027","next":"M18-GAP-00029"},"M18-GAP-00029":{"line":2724,"offset":470795,"length":188,"previous":"M18-GAP-00028","next":"M18-GAP-00030"},"M18-GAP-00030":{"line":2725,"offset":470983,"length":190,"previous":"M18-GAP-00029","next":"M18-GAP-00031"},"M18-GAP-00031":{"line":2726,"offset":471173,"length":187,"previous":"M18-GAP-00030","next":"M18-GAP-00032"},"M18-GAP-00032":{"line":2727,"offset":471360,"length":192,"previous":"M18-GAP-00031","next":"M18-GAP-00033"},"M18-GAP-00033":{"line":2728,"offset":471552,"length":193,"previous":"M18-GAP-00032","next":"M18-GAP-00034"},"M18-GAP-00034":{"line":2729,"offset":471745,"length":190,"previous":"M18-GAP-00033","next":"M18-GAP-00035"},"M18-GAP-00035":{"line":2730,"offset":471935,"length":187,"previous":"M18-GAP-00034","next":"M18-GAP-00036"},"M18-GAP-00036":{"line":2731,"offset":472122,"length":185,"previous":"M18-GAP-00035","next":"M18-GAP-00037"},"M18-GAP-00037":{"line":2732,"offset":472307,"length":183,"previous":"M18-GAP-00036","next":"M18-GAP-00038"},"M18-GAP-00038":{"line":2733,"offset":472490,"length":184,"previous":"M18-GAP-00037","next":"M18-GAP-00039"},"M18-GAP-00039":{"line":2734,"offset":472674,"length":184,"previous":"M18-GAP-00038","next":"M18-GAP-00040"},"M18-GAP-00040":{"line":2735,"offset":472858,"length":189,"previous":"M18-GAP-00039","next":"M18-GAP-00041"},"M18-GAP-00041":{"line":2736,"offset":473047,"length":185,"previous":"M18-GAP-00040","next":"M18-GAP-00042"},"M18-GAP-00042":{"line":2737,"offset":473232,"length":185,"previous":"M18-GAP-00041","next":"M18-GAP-00043"},"M18-GAP-00043":{"line":2738,"offset":473417,"length":184,"previous":"M18-GAP-00042","next":"M18-GAP-00044"},"M18-GAP-00044":{"line":2739,"offset":473601,"length":195,"previous":"M18-GAP-00043","next":"M18-GAP-00045"},"M18-GAP-00045":{"line":2740,"offset":473796,"length":188,"previous":"M18-GAP-00044","next":"M18-GAP-00046"},"M18-GAP-00046":{"line":2741,"offset":473984,"length":186,"previous":"M18-GAP-00045","next":"M18-GAP-00047"},"M18-GAP-00047":{"line":2742,"offset":474170,"length":185,"previous":"M18-GAP-00046","next":"M18-GAP-00048"},"M18-GAP-00048":{"line":2743,"offset":474355,"length":185,"previous":"M18-GAP-00047","next":"M18-GAP-00049"},"M18-GAP-00049":{"line":2744,"offset":474540,"length":191,"previous":"M18-GAP-00048","next":"M18-GAP-00050"},"M18-GAP-00050":{"line":2745,"offset":474731,"length":187,"previous":"M18-GAP-00049","next":"M18-GAP-00051"},"M18-GAP-00051":{"line":2746,"offset":474918,"length":187,"previous":"M18-GAP-00050","next":"M18-GAP-00052"},"M18-GAP-00052":{"line":2747,"offset":475105,"length":185,"previous":"M18-GAP-00051","next":"M18-GAP-00053"},"M18-GAP-00053":{"line":2748,"offset":475290,"length":188,"previous":"M18-GAP-00052","next":"M18-GAP-00054"},"M18-GAP-00054":{"line":2749,"offset":475478,"length":184,"previous":"M18-GAP-00053","next":"M18-GAP-00055"},"M18-GAP-00055":{"line":2750,"offset":475662,"length":183,"previous":"M18-GAP-00054","next":"M18-GAP-00056"},"M18-GAP-00056":{"line":2751,"offset":475845,"length":188,"previous":"M18-GAP-00055","next":"M18-GAP-00057"},"M18-GAP-00057":{"line":2752,"offset":476033,"length":188,"previous":"M18-GAP-00056","next":"M18-GAP-00058"},"M18-GAP-00058":{"line":2753,"offset":476221,"length":194,"previous":"M18-GAP-00057","next":"M18-GAP-00059"},"M18-GAP-00059":{"line":2754,"offset":476415,"length":185,"previous":"M18-GAP-00058","next":"M18-GAP-00060"},"M18-GAP-00060":{"line":2755,"offset":476600,"length":188,"previous":"M18-GAP-00059","next":"M18-GAP-00061"},"M18-GAP-00061":{"line":2756,"offset":476788,"length":189,"previous":"M18-GAP-00060","next":"M18-GAP-00062"},"M18-GAP-00062":{"line":2757,"offset":476977,"length":187,"previous":"M18-GAP-00061","next":"M18-GAP-00063"},"M18-GAP-00063":{"line":2758,"offset":477164,"length":195,"previous":"M18-GAP-00062","next":"M18-GAP-00064"},"M18-GAP-00064":{"line":2759,"offset":477359,"length":188,"previous":"M18-GAP-00063","next":"M18-GAP-00065"},"M18-GAP-00065":{"line":2760,"offset":477547,"length":188,"previous":"M18-GAP-00064","next":"M18-GAP-00066"},"M18-GAP-00066":{"line":2761,"offset":477735,"length":182,"previous":"M18-GAP-00065","next":"M18-GAP-00067"},"M18-GAP-00067":{"line":2762,"offset":477917,"length":186,"previous":"M18-GAP-00066","next":"M18-GAP-00068"},"M18-GAP-00068":{"line":2763,"offset":478103,"length":186,"previous":"M18-GAP-00067","next":"M18-GAP-00069"},"M18-GAP-00069":{"line":2764,"offset":478289,"length":194,"previous":"M18-GAP-00068","next":"M18-GAP-00070"},"M18-GAP-00070":{"line":2765,"offset":478483,"length":185,"previous":"M18-GAP-00069","next":"M18-GAP-00071"},"M18-GAP-00071":{"line":2766,"offset":478668,"length":184,"previous":"M18-GAP-00070","next":"M18-GAP-00072"},"M18-GAP-00072":{"line":2767,"offset":478852,"length":188,"previous":"M18-GAP-00071","next":"M18-GAP-00073"},"M18-GAP-00073":{"line":2768,"offset":479040,"length":192,"previous":"M18-GAP-00072","next":"M18-GAP-00074"},"M18-GAP-00074":{"line":2769,"offset":479232,"length":197,"previous":"M18-GAP-00073","next":"M18-GAP-00075"},"M18-GAP-00075":{"line":2770,"offset":479429,"length":187,"previous":"M18-GAP-00074","next":"M18-GAP-00076"},"M18-GAP-00076":{"line":2771,"offset":479616,"length":184,"previous":"M18-GAP-00075","next":"M18-GAP-00077"},"M18-GAP-00077":{"line":2772,"offset":479800,"length":188,"previous":"M18-GAP-00076","next":"M18-GAP-00078"},"M18-GAP-00078":{"line":2773,"offset":479988,"length":192,"previous":"M18-GAP-00077","next":"M18-GAP-00079"},"M18-GAP-00079":{"line":2774,"offset":480180,"length":185,"previous":"M18-GAP-00078","next":"M18-GAP-00080"},"M18-GAP-00080":{"line":2775,"offset":480365,"length":189,"previous":"M18-GAP-00079","next":"M18-GAP-00081"},"M18-GAP-00081":{"line":2776,"offset":480554,"length":183,"previous":"M18-GAP-00080","next":"M18-GAP-00082"},"M18-GAP-00082":{"line":2777,"offset":480737,"length":186,"previous":"M18-GAP-00081","next":"M18-GAP-00083"},"M18-GAP-00083":{"line":2778,"offset":480923,"length":187,"previous":"M18-GAP-00082","next":"M18-GAP-00084"},"M18-GAP-00084":{"line":2779,"offset":481110,"length":188,"previous":"M18-GAP-00083","next":"M18-GAP-00085"},"M18-GAP-00085":{"line":2780,"offset":481298,"length":188,"previous":"M18-GAP-00084","next":"M18-GAP-00086"},"M18-GAP-00086":{"line":2781,"offset":481486,"length":186,"previous":"M18-GAP-00085","next":"M18-GAP-00087"},"M18-GAP-00087":{"line":2782,"offset":481672,"length":185,"previous":"M18-GAP-00086","next":"M18-GAP-00088"},"M18-GAP-00088":{"line":2783,"offset":481857,"length":187,"previous":"M18-GAP-00087","next":"M18-GAP-00089"},"M18-GAP-00089":{"line":2784,"offset":482044,"length":188,"previous":"M18-GAP-00088","next":"M18-GAP-00090"},"M18-GAP-00090":{"line":2785,"offset":482232,"length":192,"previous":"M18-GAP-00089","next":"M18-GAP-00091"},"M18-GAP-00091":{"line":2786,"offset":482424,"length":191,"previous":"M18-GAP-00090","next":"M18-GAP-00092"},"M18-GAP-00092":{"line":2787,"offset":482615,"length":177,"previous":"M18-GAP-00091","next":"M18-GAP-00093"},"M18-GAP-00093":{"line":2788,"offset":482792,"length":186,"previous":"M18-GAP-00092","next":"M18-GAP-00094"},"M18-GAP-00094":{"line":2789,"offset":482978,"length":181,"previous":"M18-GAP-00093","next":"M18-GAP-00095"},"M18-GAP-00095":{"line":2790,"offset":483159,"length":181,"previous":"M18-GAP-00094","next":"M18-GAP-00096"},"M18-GAP-00096":{"line":2791,"offset":483340,"length":183,"previous":"M18-GAP-00095","next":"M18-GAP-00097"},"M18-GAP-00097":{"line":2792,"offset":483523,"length":189,"previous":"M18-GAP-00096","next":"M18-GAP-00098"},"M18-GAP-00098":{"line":2793,"offset":483712,"length":186,"previous":"M18-GAP-00097","next":"M18-GAP-00099"},"M18-GAP-00099":{"line":2794,"offset":483898,"length":191,"previous":"M18-GAP-00098","next":"M18-GAP-00100"},"M18-GAP-00100":{"line":2795,"offset":484089,"length":190,"previous":"M18-GAP-00099","next":"M18-GAP-00101"},"M18-GAP-00101":{"line":2796,"offset":484279,"length":191,"previous":"M18-GAP-00100","next":"M18-GAP-00102"},"M18-GAP-00102":{"line":2797,"offset":484470,"length":187,"previous":"M18-GAP-00101","next":"M18-GAP-00103"},"M18-GAP-00103":{"line":2798,"offset":484657,"length":183,"previous":"M18-GAP-00102","next":"M18-GAP-00104"},"M18-GAP-00104":{"line":2799,"offset":484840,"length":186,"previous":"M18-GAP-00103","next":"M18-GAP-00105"},"M18-GAP-00105":{"line":2800,"offset":485026,"length":186,"previous":"M18-GAP-00104","next":"M18-GAP-00106"},"M18-GAP-00106":{"line":2801,"offset":485212,"length":188,"previous":"M18-GAP-00105","next":"M18-GAP-00107"},"M18-GAP-00107":{"line":2802,"offset":485400,"length":189,"previous":"M18-GAP-00106","next":"M18-GAP-00108"},"M18-GAP-00108":{"line":2803,"offset":485589,"length":181,"previous":"M18-GAP-00107","next":"M18-GAP-00109"},"M18-GAP-00109":{"line":2804,"offset":485770,"length":195,"previous":"M18-GAP-00108","next":"M18-GAP-00110"},"M18-GAP-00110":{"line":2805,"offset":485965,"length":197,"previous":"M18-GAP-00109","next":"M18-GAP-00111"},"M18-GAP-00111":{"line":2806,"offset":486162,"length":184,"previous":"M18-GAP-00110","next":"M18-GAP-00112"},"M18-GAP-00112":{"line":2807,"offset":486346,"length":185,"previous":"M18-GAP-00111","next":"M18-GAP-00113"},"M18-GAP-00113":{"line":2808,"offset":486531,"length":200,"previous":"M18-GAP-00112","next":"M18-GAP-00114"},"M18-GAP-00114":{"line":2809,"offset":486731,"length":193,"previous":"M18-GAP-00113","next":"M18-GAP-00115"},"M18-GAP-00115":{"line":2810,"offset":486924,"length":191,"previous":"M18-GAP-00114","next":"M18-GAP-00116"},"M18-GAP-00116":{"line":2811,"offset":487115,"length":200,"previous":"M18-GAP-00115","next":"M18-GAP-00117"},"M18-GAP-00117":{"line":2812,"offset":487315,"length":193,"previous":"M18-GAP-00116","next":"M18-GAP-00118"},"M18-GAP-00118":{"line":2813,"offset":487508,"length":188,"previous":"M18-GAP-00117","next":"M18-GAP-00119"},"M18-GAP-00119":{"line":2814,"offset":487696,"length":184,"previous":"M18-GAP-00118","next":"M18-GAP-00120"},"M18-GAP-00120":{"line":2815,"offset":487880,"length":188,"previous":"M18-GAP-00119","next":"M18-GAP-00121"},"M18-GAP-00121":{"line":2816,"offset":488068,"length":182,"previous":"M18-GAP-00120","next":"M18-GAP-00122"},"M18-GAP-00122":{"line":2817,"offset":488250,"length":184,"previous":"M18-GAP-00121","next":"M18-GAP-00123"},"M18-GAP-00123":{"line":2818,"offset":488434,"length":186,"previous":"M18-GAP-00122","next":"M18-GAP-00124"},"M18-GAP-00124":{"line":2819,"offset":488620,"length":193,"previous":"M18-GAP-00123","next":"M18-GAP-00125"},"M18-GAP-00125":{"line":2820,"offset":488813,"length":194,"previous":"M18-GAP-00124","next":"M18-GAP-00126"},"M18-GAP-00126":{"line":2821,"offset":489007,"length":187,"previous":"M18-GAP-00125","next":"M18-GAP-00127"},"M18-GAP-00127":{"line":2822,"offset":489194,"length":195,"previous":"M18-GAP-00126","next":"M18-GAP-00128"},"M18-GAP-00128":{"line":2823,"offset":489389,"length":197,"previous":"M18-GAP-00127","next":"M18-GAP-00129"},"M18-GAP-00129":{"line":2824,"offset":489586,"length":196,"previous":"M18-GAP-00128","next":"M18-GAP-00130"},"M18-GAP-00130":{"line":2825,"offset":489782,"length":181,"previous":"M18-GAP-00129","next":"M18-GAP-00131"},"M18-GAP-00131":{"line":2826,"offset":489963,"length":190,"previous":"M18-GAP-00130","next":"M18-GAP-00132"},"M18-GAP-00132":{"line":2827,"offset":490153,"length":190,"previous":"M18-GAP-00131","next":"M18-GAP-00133"},"M18-GAP-00133":{"line":2828,"offset":490343,"length":193,"previous":"M18-GAP-00132","next":"M18-GAP-00134"},"M18-GAP-00134":{"line":2829,"offset":490536,"length":186,"previous":"M18-GAP-00133","next":"M18-GAP-00135"},"M18-GAP-00135":{"line":2830,"offset":490722,"length":186,"previous":"M18-GAP-00134","next":"M18-GAP-00136"},"M18-GAP-00136":{"line":2831,"offset":490908,"length":190,"previous":"M18-GAP-00135","next":"M18-GAP-00137"},"M18-GAP-00137":{"line":2832,"offset":491098,"length":184,"previous":"M18-GAP-00136","next":"M18-GAP-00138"},"M18-GAP-00138":{"line":2833,"offset":491282,"length":185,"previous":"M18-GAP-00137","next":"M18-GAP-00139"},"M18-GAP-00139":{"line":2834,"offset":491467,"length":185,"previous":"M18-GAP-00138","next":"M18-GAP-00140"},"M18-GAP-00140":{"line":2835,"offset":491652,"length":185,"previous":"M18-GAP-00139","next":"M18-GAP-00141"},"M18-GAP-00141":{"line":2836,"offset":491837,"length":187,"previous":"M18-GAP-00140","next":"M18-GAP-00142"},"M18-GAP-00142":{"line":2837,"offset":492024,"length":186,"previous":"M18-GAP-00141","next":"M18-GAP-00143"},"M18-GAP-00143":{"line":2838,"offset":492210,"length":184,"previous":"M18-GAP-00142","next":"M18-GAP-00144"},"M18-GAP-00144":{"line":2839,"offset":492394,"length":184,"previous":"M18-GAP-00143","next":"M18-GAP-00145"},"M18-GAP-00145":{"line":2840,"offset":492578,"length":186,"previous":"M18-GAP-00144","next":"M18-GAP-00146"},"M18-GAP-00146":{"line":2841,"offset":492764,"length":182,"previous":"M18-GAP-00145","next":"M18-GAP-00147"},"M18-GAP-00147":{"line":2842,"offset":492946,"length":184,"previous":"M18-GAP-00146","next":"M18-GAP-00148"},"M18-GAP-00148":{"line":2843,"offset":493130,"length":183,"previous":"M18-GAP-00147","next":"M18-GAP-00149"},"M18-GAP-00149":{"line":2844,"offset":493313,"length":182,"previous":"M18-GAP-00148","next":"M18-GAP-00150"},"M18-GAP-00150":{"line":2845,"offset":493495,"length":200,"previous":"M18-GAP-00149","next":"M18-GAP-00151"},"M18-GAP-00151":{"line":2846,"offset":493695,"length":201,"previous":"M18-GAP-00150","next":"M18-GAP-00152"},"M18-GAP-00152":{"line":2847,"offset":493896,"length":191,"previous":"M18-GAP-00151","next":"M18-GAP-00153"},"M18-GAP-00153":{"line":2848,"offset":494087,"length":190,"previous":"M18-GAP-00152","next":"M18-GAP-00154"},"M18-GAP-00154":{"line":2849,"offset":494277,"length":190,"previous":"M18-GAP-00153","next":"M18-GAP-00155"},"M18-GAP-00155":{"line":2850,"offset":494467,"length":193,"previous":"M18-GAP-00154","next":"M18-GAP-00156"},"M18-GAP-00156":{"line":2851,"offset":494660,"length":185,"previous":"M18-GAP-00155","next":"M18-GAP-00157"},"M18-GAP-00157":{"line":2852,"offset":494845,"length":182,"previous":"M18-GAP-00156","next":"M18-GAP-00158"},"M18-GAP-00158":{"line":2853,"offset":495027,"length":184,"previous":"M18-GAP-00157","next":"M18-GAP-00159"},"M18-GAP-00159":{"line":2854,"offset":495211,"length":187,"previous":"M18-GAP-00158","next":"M18-GAP-00160"},"M18-GAP-00160":{"line":2855,"offset":495398,"length":193,"previous":"M18-GAP-00159","next":"M18-GAP-00161"},"M18-GAP-00161":{"line":2856,"offset":495591,"length":183,"previous":"M18-GAP-00160","next":"M18-GAP-00162"},"M18-GAP-00162":{"line":2857,"offset":495774,"length":181,"previous":"M18-GAP-00161","next":"M18-GAP-00163"},"M18-GAP-00163":{"line":2858,"offset":495955,"length":181,"previous":"M18-GAP-00162","next":"M18-GAP-00164"},"M18-GAP-00164":{"line":2859,"offset":496136,"length":191,"previous":"M18-GAP-00163","next":"M18-GAP-00165"},"M18-GAP-00165":{"line":2860,"offset":496327,"length":187,"previous":"M18-GAP-00164","next":"M18-GAP-00166"},"M18-GAP-00166":{"line":2861,"offset":496514,"length":185,"previous":"M18-GAP-00165","next":"M18-GAP-00167"},"M18-GAP-00167":{"line":2862,"offset":496699,"length":181,"previous":"M18-GAP-00166","next":"M18-GAP-00168"},"M18-GAP-00168":{"line":2863,"offset":496880,"length":186,"previous":"M18-GAP-00167","next":"M18-GAP-00169"},"M18-GAP-00169":{"line":2864,"offset":497066,"length":181,"previous":"M18-GAP-00168","next":"M18-GAP-00170"},"M18-GAP-00170":{"line":2865,"offset":497247,"length":183,"previous":"M18-GAP-00169","next":"M18-GAP-00171"},"M18-GAP-00171":{"line":2866,"offset":497430,"length":182,"previous":"M18-GAP-00170","next":"M18-GAP-00172"},"M18-GAP-00172":{"line":2867,"offset":497612,"length":183,"previous":"M18-GAP-00171","next":"M18-GAP-00173"},"M18-GAP-00173":{"line":2868,"offset":497795,"length":185,"previous":"M18-GAP-00172","next":"M18-GAP-00174"},"M18-GAP-00174":{"line":2869,"offset":497980,"length":185,"previous":"M18-GAP-00173","next":"M18-GAP-00175"},"M18-GAP-00175":{"line":2870,"offset":498165,"length":178,"previous":"M18-GAP-00174","next":"M18-GAP-00176"},"M18-GAP-00176":{"line":2871,"offset":498343,"length":182,"previous":"M18-GAP-00175","next":"M18-GAP-00177"},"M18-GAP-00177":{"line":2872,"offset":498525,"length":185,"previous":"M18-GAP-00176","next":"M18-GAP-00178"},"M18-GAP-00178":{"line":2873,"offset":498710,"length":182,"previous":"M18-GAP-00177","next":"M18-GAP-00179"},"M18-GAP-00179":{"line":2874,"offset":498892,"length":182,"previous":"M18-GAP-00178","next":"M18-GAP-00180"},"M18-GAP-00180":{"line":2875,"offset":499074,"length":182,"previous":"M18-GAP-00179","next":"M18-GAP-00181"},"M18-GAP-00181":{"line":2876,"offset":499256,"length":182,"previous":"M18-GAP-00180","next":"M18-GAP-00182"},"M18-GAP-00182":{"line":2877,"offset":499438,"length":183,"previous":"M18-GAP-00181","next":"M18-GAP-00183"},"M18-GAP-00183":{"line":2878,"offset":499621,"length":182,"previous":"M18-GAP-00182","next":"M18-GAP-00184"},"M18-GAP-00184":{"line":2879,"offset":499803,"length":187,"previous":"M18-GAP-00183","next":"M18-GAP-00185"},"M18-GAP-00185":{"line":2880,"offset":499990,"length":184,"previous":"M18-GAP-00184","next":"M18-GAP-00186"},"M18-GAP-00186":{"line":2881,"offset":500174,"length":190,"previous":"M18-GAP-00185","next":"M18-GAP-00187"},"M18-GAP-00187":{"line":2882,"offset":500364,"length":188,"previous":"M18-GAP-00186","next":"M18-GAP-00188"},"M18-GAP-00188":{"line":2883,"offset":500552,"length":198,"previous":"M18-GAP-00187","next":"M18-GAP-00189"},"M18-GAP-00189":{"line":2884,"offset":500750,"length":187,"previous":"M18-GAP-00188","next":"M18-GAP-00190"},"M18-GAP-00190":{"line":2885,"offset":500937,"length":188,"previous":"M18-GAP-00189","next":"M18-GAP-00191"},"M18-GAP-00191":{"line":2886,"offset":501125,"length":182,"previous":"M18-GAP-00190","next":"M18-GAP-00192"},"M18-GAP-00192":{"line":2887,"offset":501307,"length":180,"previous":"M18-GAP-00191","next":"M18-GAP-00193"},"M18-GAP-00193":{"line":2888,"offset":501487,"length":183,"previous":"M18-GAP-00192","next":"M18-GAP-00194"},"M18-GAP-00194":{"line":2889,"offset":501670,"length":183,"previous":"M18-GAP-00193","next":"M18-GAP-00195"},"M18-GAP-00195":{"line":2890,"offset":501853,"length":192,"previous":"M18-GAP-00194","next":"M18-GAP-00196"},"M18-GAP-00196":{"line":2891,"offset":502045,"length":195,"previous":"M18-GAP-00195","next":"M18-GAP-00197"},"M18-GAP-00197":{"line":2892,"offset":502240,"length":194,"previous":"M18-GAP-00196","next":"M18-GAP-00198"},"M18-GAP-00198":{"line":2893,"offset":502434,"length":191,"previous":"M18-GAP-00197","next":"M18-GAP-00199"},"M18-GAP-00199":{"line":2894,"offset":502625,"length":186,"previous":"M18-GAP-00198","next":"M18-GAP-00200"},"M18-GAP-00200":{"line":2895,"offset":502811,"length":191,"previous":"M18-GAP-00199","next":"M18-GAP-00201"},"M18-GAP-00201":{"line":2896,"offset":503002,"length":191,"previous":"M18-GAP-00200","next":"M18-GAP-00202"},"M18-GAP-00202":{"line":2897,"offset":503193,"length":195,"previous":"M18-GAP-00201","next":"M18-GAP-00203"},"M18-GAP-00203":{"line":2898,"offset":503388,"length":194,"previous":"M18-GAP-00202","next":"M18-GAP-00204"},"M18-GAP-00204":{"line":2899,"offset":503582,"length":190,"previous":"M18-GAP-00203","next":"M18-GAP-00205"},"M18-GAP-00205":{"line":2900,"offset":503772,"length":194,"previous":"M18-GAP-00204","next":"M18-GAP-00206"},"M18-GAP-00206":{"line":2901,"offset":503966,"length":195,"previous":"M18-GAP-00205","next":"M18-GAP-00207"},"M18-GAP-00207":{"line":2902,"offset":504161,"length":188,"previous":"M18-GAP-00206","next":"M18-GAP-00208"},"M18-GAP-00208":{"line":2903,"offset":504349,"length":197,"previous":"M18-GAP-00207","next":"M18-GAP-00209"},"M18-GAP-00209":{"line":2904,"offset":504546,"length":192,"previous":"M18-GAP-00208","next":"M18-GAP-00210"},"M18-GAP-00210":{"line":2905,"offset":504738,"length":197,"previous":"M18-GAP-00209","next":"M18-GAP-00211"},"M18-GAP-00211":{"line":2906,"offset":504935,"length":184,"previous":"M18-GAP-00210","next":"M18-GAP-00212"},"M18-GAP-00212":{"line":2907,"offset":505119,"length":184,"previous":"M18-GAP-00211","next":"M18-GAP-00213"},"M18-GAP-00213":{"line":2908,"offset":505303,"length":186,"previous":"M18-GAP-00212","next":"M18-GAP-00214"},"M18-GAP-00214":{"line":2909,"offset":505489,"length":184,"previous":"M18-GAP-00213","next":"M18-GAP-00215"},"M18-GAP-00215":{"line":2910,"offset":505673,"length":187,"previous":"M18-GAP-00214","next":"M18-GAP-00216"},"M18-GAP-00216":{"line":2911,"offset":505860,"length":189,"previous":"M18-GAP-00215","next":"M18-GAP-00217"},"M18-GAP-00217":{"line":2912,"offset":506049,"length":195,"previous":"M18-GAP-00216","next":"M18-GAP-00218"},"M18-GAP-00218":{"line":2913,"offset":506244,"length":190,"previous":"M18-GAP-00217","next":"M18-GAP-00219"},"M18-GAP-00219":{"line":2914,"offset":506434,"length":194,"previous":"M18-GAP-00218","next":"M18-GAP-00220"},"M18-GAP-00220":{"line":2915,"offset":506628,"length":185,"previous":"M18-GAP-00219","next":"M18-GAP-00221"},"M18-GAP-00221":{"line":2916,"offset":506813,"length":188,"previous":"M18-GAP-00220","next":"M18-GAP-00222"},"M18-GAP-00222":{"line":2917,"offset":507001,"length":189,"previous":"M18-GAP-00221","next":"M18-GAP-00223"},"M18-GAP-00223":{"line":2918,"offset":507190,"length":190,"previous":"M18-GAP-00222","next":"M18-GAP-00224"},"M18-GAP-00224":{"line":2919,"offset":507380,"length":190,"previous":"M18-GAP-00223","next":"M18-GAP-00225"},"M18-GAP-00225":{"line":2920,"offset":507570,"length":190,"previous":"M18-GAP-00224","next":"M18-GAP-00226"},"M18-GAP-00226":{"line":2921,"offset":507760,"length":183,"previous":"M18-GAP-00225","next":"M18-GAP-00227"},"M18-GAP-00227":{"line":2922,"offset":507943,"length":185,"previous":"M18-GAP-00226","next":"M18-GAP-00228"},"M18-GAP-00228":{"line":2923,"offset":508128,"length":184,"previous":"M18-GAP-00227","next":"M18-GAP-00229"},"M18-GAP-00229":{"line":2924,"offset":508312,"length":183,"previous":"M18-GAP-00228","next":"M18-GAP-00230"},"M18-GAP-00230":{"line":2925,"offset":508495,"length":190,"previous":"M18-GAP-00229","next":"M18-GAP-00231"},"M18-GAP-00231":{"line":2926,"offset":508685,"length":183,"previous":"M18-GAP-00230","next":"M18-GAP-00232"},"M18-GAP-00232":{"line":2927,"offset":508868,"length":188,"previous":"M18-GAP-00231","next":"M18-GAP-00233"},"M18-GAP-00233":{"line":2928,"offset":509056,"length":184,"previous":"M18-GAP-00232","next":"M18-GAP-00234"},"M18-GAP-00234":{"line":2929,"offset":509240,"length":184,"previous":"M18-GAP-00233","next":"M18-GAP-00235"},"M18-GAP-00235":{"line":2930,"offset":509424,"length":182,"previous":"M18-GAP-00234","next":"M18-GAP-00236"},"M18-GAP-00236":{"line":2931,"offset":509606,"length":184,"previous":"M18-GAP-00235","next":"M18-GAP-00237"},"M18-GAP-00237":{"line":2932,"offset":509790,"length":183,"previous":"M18-GAP-00236","next":"M18-GAP-00238"},"M18-GAP-00238":{"line":2933,"offset":509973,"length":181,"previous":"M18-GAP-00237","next":"M18-GAP-00239"},"M18-GAP-00239":{"line":2934,"offset":510154,"length":181,"previous":"M18-GAP-00238","next":"M18-GAP-00240"},"M18-GAP-00240":{"line":2935,"offset":510335,"length":185,"previous":"M18-GAP-00239","next":"M18-GAP-00241"},"M18-GAP-00241":{"line":2936,"offset":510520,"length":194,"previous":"M18-GAP-00240","next":"M18-GAP-00242"},"M18-GAP-00242":{"line":2937,"offset":510714,"length":181,"previous":"M18-GAP-00241","next":"M18-GAP-00243"},"M18-GAP-00243":{"line":2938,"offset":510895,"length":186,"previous":"M18-GAP-00242","next":"M18-GAP-00244"},"M18-GAP-00244":{"line":2939,"offset":511081,"length":181,"previous":"M18-GAP-00243","next":"M18-GAP-00245"},"M18-GAP-00245":{"line":2940,"offset":511262,"length":184,"previous":"M18-GAP-00244","next":"M18-GAP-00246"},"M18-GAP-00246":{"line":2941,"offset":511446,"length":190,"previous":"M18-GAP-00245","next":"M18-GAP-00247"},"M18-GAP-00247":{"line":2942,"offset":511636,"length":185,"previous":"M18-GAP-00246","next":"M18-GAP-00248"},"M18-GAP-00248":{"line":2943,"offset":511821,"length":186,"previous":"M18-GAP-00247","next":"M18-GAP-00249"},"M18-GAP-00249":{"line":2944,"offset":512007,"length":185,"previous":"M18-GAP-00248","next":"M18-GAP-00250"},"M18-GAP-00250":{"line":2945,"offset":512192,"length":185,"previous":"M18-GAP-00249","next":"M18-GAP-00251"},"M18-GAP-00251":{"line":2946,"offset":512377,"length":183,"previous":"M18-GAP-00250","next":"M18-GAP-00252"},"M18-GAP-00252":{"line":2947,"offset":512560,"length":191,"previous":"M18-GAP-00251","next":"M18-GAP-00253"},"M18-GAP-00253":{"line":2948,"offset":512751,"length":191,"previous":"M18-GAP-00252","next":"M18-GAP-00254"},"M18-GAP-00254":{"line":2949,"offset":512942,"length":179,"previous":"M18-GAP-00253","next":"M18-GAP-00255"},"M18-GAP-00255":{"line":2950,"offset":513121,"length":186,"previous":"M18-GAP-00254","next":"M18-GAP-00256"},"M18-GAP-00256":{"line":2951,"offset":513307,"length":187,"previous":"M18-GAP-00255","next":"M18-GAP-00257"},"M18-GAP-00257":{"line":2952,"offset":513494,"length":188,"previous":"M18-GAP-00256","next":"M18-GAP-00258"},"M18-GAP-00258":{"line":2953,"offset":513682,"length":189,"previous":"M18-GAP-00257","next":"M18-GAP-00259"},"M18-GAP-00259":{"line":2954,"offset":513871,"length":187,"previous":"M18-GAP-00258","next":"M18-GAP-00260"},"M18-GAP-00260":{"line":2955,"offset":514058,"length":182,"previous":"M18-GAP-00259","next":"M18-GAP-00261"},"M18-GAP-00261":{"line":2956,"offset":514240,"length":180,"previous":"M18-GAP-00260","next":"M18-GAP-00262"},"M18-GAP-00262":{"line":2957,"offset":514420,"length":189,"previous":"M18-GAP-00261","next":"M18-GAP-00263"},"M18-GAP-00263":{"line":2958,"offset":514609,"length":188,"previous":"M18-GAP-00262","next":"M18-GAP-00264"},"M18-GAP-00264":{"line":2959,"offset":514797,"length":188,"previous":"M18-GAP-00263","next":"M18-GAP-00265"},"M18-GAP-00265":{"line":2960,"offset":514985,"length":184,"previous":"M18-GAP-00264","next":"M18-GAP-00266"},"M18-GAP-00266":{"line":2961,"offset":515169,"length":185,"previous":"M18-GAP-00265","next":"M18-GAP-00267"},"M18-GAP-00267":{"line":2962,"offset":515354,"length":188,"previous":"M18-GAP-00266","next":"M18-GAP-00268"},"M18-GAP-00268":{"line":2963,"offset":515542,"length":186,"previous":"M18-GAP-00267","next":"M18-GAP-00269"},"M18-GAP-00269":{"line":2964,"offset":515728,"length":185,"previous":"M18-GAP-00268","next":"M18-GAP-00270"},"M18-GAP-00270":{"line":2965,"offset":515913,"length":188,"previous":"M18-GAP-00269","next":"M18-GAP-00271"},"M18-GAP-00271":{"line":2966,"offset":516101,"length":187,"previous":"M18-GAP-00270","next":"M18-GAP-00272"},"M18-GAP-00272":{"line":2967,"offset":516288,"length":186,"previous":"M18-GAP-00271","next":"M18-GAP-00273"},"M18-GAP-00273":{"line":2968,"offset":516474,"length":189,"previous":"M18-GAP-00272","next":"M18-GAP-00274"},"M18-GAP-00274":{"line":2969,"offset":516663,"length":184,"previous":"M18-GAP-00273","next":"M18-GAP-00275"},"M18-GAP-00275":{"line":2970,"offset":516847,"length":193,"previous":"M18-GAP-00274","next":"M18-GAP-00276"},"M18-GAP-00276":{"line":2971,"offset":517040,"length":186,"previous":"M18-GAP-00275","next":"M18-GAP-00277"},"M18-GAP-00277":{"line":2972,"offset":517226,"length":186,"previous":"M18-GAP-00276","next":"M18-GAP-00278"},"M18-GAP-00278":{"line":2973,"offset":517412,"length":184,"previous":"M18-GAP-00277","next":"M18-GAP-00279"},"M18-GAP-00279":{"line":2974,"offset":517596,"length":183,"previous":"M18-GAP-00278","next":"M18-GAP-00280"},"M18-GAP-00280":{"line":2975,"offset":517779,"length":188,"previous":"M18-GAP-00279","next":"M18-GAP-00281"},"M18-GAP-00281":{"line":2976,"offset":517967,"length":184,"previous":"M18-GAP-00280","next":"M18-GAP-00282"},"M18-GAP-00282":{"line":2977,"offset":518151,"length":186,"previous":"M18-GAP-00281","next":"M18-GAP-00283"},"M18-GAP-00283":{"line":2978,"offset":518337,"length":193,"previous":"M18-GAP-00282","next":"M18-GAP-00284"},"M18-GAP-00284":{"line":2979,"offset":518530,"length":195,"previous":"M18-GAP-00283","next":"M18-GAP-00285"},"M18-GAP-00285":{"line":2980,"offset":518725,"length":188,"previous":"M18-GAP-00284","next":"M18-GAP-00286"},"M18-GAP-00286":{"line":2981,"offset":518913,"length":186,"previous":"M18-GAP-00285","next":"M18-GAP-00287"},"M18-GAP-00287":{"line":2982,"offset":519099,"length":187,"previous":"M18-GAP-00286","next":"M18-GAP-00288"},"M18-GAP-00288":{"line":2983,"offset":519286,"length":183,"previous":"M18-GAP-00287","next":"M18-GAP-00289"},"M18-GAP-00289":{"line":2984,"offset":519469,"length":191,"previous":"M18-GAP-00288","next":"M18-GAP-00290"},"M18-GAP-00290":{"line":2985,"offset":519660,"length":189,"previous":"M18-GAP-00289","next":"M18-GAP-00291"},"M18-GAP-00291":{"line":2986,"offset":519849,"length":196,"previous":"M18-GAP-00290","next":"M18-GAP-00292"},"M18-GAP-00292":{"line":2987,"offset":520045,"length":187,"previous":"M18-GAP-00291","next":"M18-GAP-00293"},"M18-GAP-00293":{"line":2988,"offset":520232,"length":187,"previous":"M18-GAP-00292","next":"M18-GAP-00294"},"M18-GAP-00294":{"line":2989,"offset":520419,"length":185,"previous":"M18-GAP-00293","next":"M18-GAP-00295"},"M18-GAP-00295":{"line":2990,"offset":520604,"length":190,"previous":"M18-GAP-00294","next":"M18-GAP-00296"},"M18-GAP-00296":{"line":2991,"offset":520794,"length":188,"previous":"M18-GAP-00295","next":"M18-GAP-00297"},"M18-GAP-00297":{"line":2992,"offset":520982,"length":193,"previous":"M18-GAP-00296","next":"M18-GAP-00298"},"M18-GAP-00298":{"line":2993,"offset":521175,"length":193,"previous":"M18-GAP-00297","next":"M18-GAP-00299"},"M18-GAP-00299":{"line":2994,"offset":521368,"length":196,"previous":"M18-GAP-00298","next":"M18-GAP-00300"},"M18-GAP-00300":{"line":2995,"offset":521564,"length":190,"previous":"M18-GAP-00299","next":"M18-GAP-00301"},"M18-GAP-00301":{"line":2996,"offset":521754,"length":189,"previous":"M18-GAP-00300","next":"M18-GAP-00302"},"M18-GAP-00302":{"line":2997,"offset":521943,"length":178,"previous":"M18-GAP-00301","next":"M18-GAP-00303"},"M18-GAP-00303":{"line":2998,"offset":522121,"length":193,"previous":"M18-GAP-00302","next":"M18-GAP-00304"},"M18-GAP-00304":{"line":2999,"offset":522314,"length":184,"previous":"M18-GAP-00303","next":"M18-GAP-00305"},"M18-GAP-00305":{"line":3000,"offset":522498,"length":189,"previous":"M18-GAP-00304","next":"M18-GAP-00306"},"M18-GAP-00306":{"line":3001,"offset":522687,"length":186,"previous":"M18-GAP-00305","next":"M18-GAP-00307"},"M18-GAP-00307":{"line":3002,"offset":522873,"length":186,"previous":"M18-GAP-00306","next":"M18-GAP-00308"},"M18-GAP-00308":{"line":3003,"offset":523059,"length":187,"previous":"M18-GAP-00307","next":"M18-GAP-00309"},"M18-GAP-00309":{"line":3004,"offset":523246,"length":187,"previous":"M18-GAP-00308","next":"M18-GAP-00310"},"M18-GAP-00310":{"line":3005,"offset":523433,"length":184,"previous":"M18-GAP-00309","next":"M18-GAP-00311"},"M18-GAP-00311":{"line":3006,"offset":523617,"length":187,"previous":"M18-GAP-00310","next":"M18-GAP-00312"},"M18-GAP-00312":{"line":3007,"offset":523804,"length":188,"previous":"M18-GAP-00311","next":"M18-GAP-00313"},"M18-GAP-00313":{"line":3008,"offset":523992,"length":192,"previous":"M18-GAP-00312","next":"M18-GAP-00314"},"M18-GAP-00314":{"line":3009,"offset":524184,"length":188,"previous":"M18-GAP-00313","next":"M18-GAP-00315"},"M18-GAP-00315":{"line":3010,"offset":524372,"length":189,"previous":"M18-GAP-00314","next":"M18-GAP-00316"},"M18-GAP-00316":{"line":3011,"offset":524561,"length":185,"previous":"M18-GAP-00315","next":"M18-GAP-00317"},"M18-GAP-00317":{"line":3012,"offset":524746,"length":181,"previous":"M18-GAP-00316","next":"M18-GAP-00318"},"M18-GAP-00318":{"line":3013,"offset":524927,"length":185,"previous":"M18-GAP-00317","next":"M18-GAP-00319"},"M18-GAP-00319":{"line":3014,"offset":525112,"length":188,"previous":"M18-GAP-00318","next":"M18-GAP-00320"},"M18-GAP-00320":{"line":3015,"offset":525300,"length":183,"previous":"M18-GAP-00319","next":"M18-GAP-00321"},"M18-GAP-00321":{"line":3016,"offset":525483,"length":189,"previous":"M18-GAP-00320","next":"M18-GAP-00322"},"M18-GAP-00322":{"line":3017,"offset":525672,"length":192,"previous":"M18-GAP-00321","next":"M18-GAP-00323"},"M18-GAP-00323":{"line":3018,"offset":525864,"length":187,"previous":"M18-GAP-00322","next":"M18-GAP-00324"},"M18-GAP-00324":{"line":3019,"offset":526051,"length":183,"previous":"M18-GAP-00323","next":"M18-GAP-00325"},"M18-GAP-00325":{"line":3020,"offset":526234,"length":187,"previous":"M18-GAP-00324","next":"M18-GAP-00326"},"M18-GAP-00326":{"line":3021,"offset":526421,"length":187,"previous":"M18-GAP-00325","next":"M18-GAP-00327"},"M18-GAP-00327":{"line":3022,"offset":526608,"length":186,"previous":"M18-GAP-00326","next":"M18-GAP-00328"},"M18-GAP-00328":{"line":3023,"offset":526794,"length":191,"previous":"M18-GAP-00327","next":"M18-GAP-00329"},"M18-GAP-00329":{"line":3024,"offset":526985,"length":179,"previous":"M18-GAP-00328","next":"M18-GAP-00330"},"M18-GAP-00330":{"line":3025,"offset":527164,"length":182,"previous":"M18-GAP-00329","next":"M18-GAP-00331"},"M18-GAP-00331":{"line":3026,"offset":527346,"length":185,"previous":"M18-GAP-00330","next":"M18-GAP-00332"},"M18-GAP-00332":{"line":3027,"offset":527531,"length":190,"previous":"M18-GAP-00331","next":"M18-GAP-00333"},"M18-GAP-00333":{"line":3028,"offset":527721,"length":184,"previous":"M18-GAP-00332","next":"M18-GAP-00334"},"M18-GAP-00334":{"line":3029,"offset":527905,"length":190,"previous":"M18-GAP-00333","next":"M18-GAP-00335"},"M18-GAP-00335":{"line":3030,"offset":528095,"length":186,"previous":"M18-GAP-00334","next":"M18-GAP-00336"},"M18-GAP-00336":{"line":3031,"offset":528281,"length":187,"previous":"M18-GAP-00335","next":"M18-GAP-00337"},"M18-GAP-00337":{"line":3032,"offset":528468,"length":189,"previous":"M18-GAP-00336","next":"M18-GAP-00338"},"M18-GAP-00338":{"line":3033,"offset":528657,"length":191,"previous":"M18-GAP-00337","next":"M18-GAP-00339"},"M18-GAP-00339":{"line":3034,"offset":528848,"length":182,"previous":"M18-GAP-00338","next":"M18-GAP-00340"},"M18-GAP-00340":{"line":3035,"offset":529030,"length":191,"previous":"M18-GAP-00339","next":"M18-GAP-00341"},"M18-GAP-00341":{"line":3036,"offset":529221,"length":184,"previous":"M18-GAP-00340","next":"M18-GAP-00342"},"M18-GAP-00342":{"line":3037,"offset":529405,"length":182,"previous":"M18-GAP-00341","next":"M18-GAP-00343"},"M18-GAP-00343":{"line":3038,"offset":529587,"length":186,"previous":"M18-GAP-00342","next":"M18-GAP-00344"},"M18-GAP-00344":{"line":3039,"offset":529773,"length":182,"previous":"M18-GAP-00343","next":"M18-GAP-00345"},"M18-GAP-00345":{"line":3040,"offset":529955,"length":181,"previous":"M18-GAP-00344","next":"M18-GAP-00346"},"M18-GAP-00346":{"line":3041,"offset":530136,"length":187,"previous":"M18-GAP-00345","next":"M18-GAP-00347"},"M18-GAP-00347":{"line":3042,"offset":530323,"length":179,"previous":"M18-GAP-00346","next":"M18-GAP-00348"},"M18-GAP-00348":{"line":3043,"offset":530502,"length":190,"previous":"M18-GAP-00347","next":"M18-GAP-00349"},"M18-GAP-00349":{"line":3044,"offset":530692,"length":183,"previous":"M18-GAP-00348","next":"M18-GAP-00350"},"M18-GAP-00350":{"line":3045,"offset":530875,"length":185,"previous":"M18-GAP-00349","next":"M18-GAP-00351"},"M18-GAP-00351":{"line":3046,"offset":531060,"length":180,"previous":"M18-GAP-00350","next":"M18-GAP-00352"},"M18-GAP-00352":{"line":3047,"offset":531240,"length":183,"previous":"M18-GAP-00351","next":"M18-GAP-00353"},"M18-GAP-00353":{"line":3048,"offset":531423,"length":176,"previous":"M18-GAP-00352","next":"M18-GAP-00354"},"M18-GAP-00354":{"line":3049,"offset":531599,"length":183,"previous":"M18-GAP-00353","next":"M18-GAP-00355"},"M18-GAP-00355":{"line":3050,"offset":531782,"length":176,"previous":"M18-GAP-00354","next":"M18-GAP-00356"},"M18-GAP-00356":{"line":3051,"offset":531958,"length":177,"previous":"M18-GAP-00355","next":"M18-GAP-00357"},"M18-GAP-00357":{"line":3052,"offset":532135,"length":172,"previous":"M18-GAP-00356","next":"M18-GAP-00358"},"M18-GAP-00358":{"line":3053,"offset":532307,"length":176,"previous":"M18-GAP-00357","next":"M18-GAP-00359"},"M18-GAP-00359":{"line":3054,"offset":532483,"length":181,"previous":"M18-GAP-00358","next":"M18-GAP-00360"},"M18-GAP-00360":{"line":3055,"offset":532664,"length":182,"previous":"M18-GAP-00359","next":"M18-GAP-00361"},"M18-GAP-00361":{"line":3056,"offset":532846,"length":178,"previous":"M18-GAP-00360","next":"M18-GAP-00362"},"M18-GAP-00362":{"line":3057,"offset":533024,"length":176,"previous":"M18-GAP-00361","next":"M18-GAP-00363"},"M18-GAP-00363":{"line":3058,"offset":533200,"length":175,"previous":"M18-GAP-00362","next":"M18-GAP-00364"},"M18-GAP-00364":{"line":3059,"offset":533375,"length":185,"previous":"M18-GAP-00363","next":"M18-GAP-00365"},"M18-GAP-00365":{"line":3060,"offset":533560,"length":179,"previous":"M18-GAP-00364","next":"M18-GAP-00366"},"M18-GAP-00366":{"line":3061,"offset":533739,"length":181,"previous":"M18-GAP-00365","next":"M18-GAP-00367"},"M18-GAP-00367":{"line":3062,"offset":533920,"length":180,"previous":"M18-GAP-00366","next":"M18-GAP-00368"},"M18-GAP-00368":{"line":3063,"offset":534100,"length":181,"previous":"M18-GAP-00367","next":"M18-GAP-00369"},"M18-GAP-00369":{"line":3064,"offset":534281,"length":176,"previous":"M18-GAP-00368","next":"M18-GAP-00370"},"M18-GAP-00370":{"line":3065,"offset":534457,"length":175,"previous":"M18-GAP-00369","next":"M18-GAP-00371"},"M18-GAP-00371":{"line":3066,"offset":534632,"length":182,"previous":"M18-GAP-00370","next":"M18-GAP-00372"},"M18-GAP-00372":{"line":3067,"offset":534814,"length":182,"previous":"M18-GAP-00371","next":"M18-GAP-00373"},"M18-GAP-00373":{"line":3068,"offset":534996,"length":171,"previous":"M18-GAP-00372","next":"M18-GAP-00374"},"M18-GAP-00374":{"line":3069,"offset":535167,"length":177,"previous":"M18-GAP-00373","next":"M18-GAP-00375"},"M18-GAP-00375":{"line":3070,"offset":535344,"length":172,"previous":"M18-GAP-00374","next":"M18-GAP-00376"},"M18-GAP-00376":{"line":3071,"offset":535516,"length":179,"previous":"M18-GAP-00375","next":"M18-GAP-00377"},"M18-GAP-00377":{"line":3072,"offset":535695,"length":177,"previous":"M18-GAP-00376","next":"M18-GAP-00378"},"M18-GAP-00378":{"line":3073,"offset":535872,"length":179,"previous":"M18-GAP-00377","next":"M18-GAP-00379"},"M18-GAP-00379":{"line":3074,"offset":536051,"length":180,"previous":"M18-GAP-00378","next":"M18-GAP-00380"},"M18-GAP-00380":{"line":3075,"offset":536231,"length":175,"previous":"M18-GAP-00379","next":"M18-GAP-00381"},"M18-GAP-00381":{"line":3076,"offset":536406,"length":177,"previous":"M18-GAP-00380","next":"M18-GAP-00382"},"M18-GAP-00382":{"line":3077,"offset":536583,"length":174,"previous":"M18-GAP-00381","next":"M18-GAP-00383"},"M18-GAP-00383":{"line":3078,"offset":536757,"length":172,"previous":"M18-GAP-00382","next":"M18-GAP-00384"},"M18-GAP-00384":{"line":3079,"offset":536929,"length":172,"previous":"M18-GAP-00383","next":"M18-GAP-00385"},"M18-GAP-00385":{"line":3080,"offset":537101,"length":175,"previous":"M18-GAP-00384","next":"M18-GAP-00386"},"M18-GAP-00386":{"line":3081,"offset":537276,"length":174,"previous":"M18-GAP-00385","next":"M18-GAP-00387"},"M18-GAP-00387":{"line":3082,"offset":537450,"length":180,"previous":"M18-GAP-00386","next":"M18-GAP-00388"},"M18-GAP-00388":{"line":3083,"offset":537630,"length":173,"previous":"M18-GAP-00387","next":"M18-GAP-00389"},"M18-GAP-00389":{"line":3084,"offset":537803,"length":178,"previous":"M18-GAP-00388","next":"M18-GAP-00390"},"M18-GAP-00390":{"line":3085,"offset":537981,"length":179,"previous":"M18-GAP-00389","next":"M18-GAP-00391"},"M18-GAP-00391":{"line":3086,"offset":538160,"length":176,"previous":"M18-GAP-00390","next":"M18-GAP-00392"},"M18-GAP-00392":{"line":3087,"offset":538336,"length":175,"previous":"M18-GAP-00391","next":"M18-GAP-00393"},"M18-GAP-00393":{"line":3088,"offset":538511,"length":174,"previous":"M18-GAP-00392","next":"M18-GAP-00394"},"M18-GAP-00394":{"line":3089,"offset":538685,"length":171,"previous":"M18-GAP-00393","next":"M18-GAP-00395"},"M18-GAP-00395":{"line":3090,"offset":538856,"length":170,"previous":"M18-GAP-00394","next":"M18-GAP-00396"},"M18-GAP-00396":{"line":3091,"offset":539026,"length":173,"previous":"M18-GAP-00395","next":"M18-GAP-00397"},"M18-GAP-00397":{"line":3092,"offset":539199,"length":176,"previous":"M18-GAP-00396","next":"M18-GAP-00398"},"M18-GAP-00398":{"line":3093,"offset":539375,"length":178,"previous":"M18-GAP-00397","next":"M18-GAP-00399"},"M18-GAP-00399":{"line":3094,"offset":539553,"length":173,"previous":"M18-GAP-00398","next":"M18-GAP-00400"},"M18-GAP-00400":{"line":3095,"offset":539726,"length":176,"previous":"M18-GAP-00399","next":"M18-GAP-00401"},"M18-GAP-00401":{"line":3096,"offset":539902,"length":177,"previous":"M18-GAP-00400","next":"M18-GAP-00402"},"M18-GAP-00402":{"line":3097,"offset":540079,"length":176,"previous":"M18-GAP-00401","next":"M18-GAP-00403"},"M18-GAP-00403":{"line":3098,"offset":540255,"length":178,"previous":"M18-GAP-00402","next":"M18-GAP-00404"},"M18-GAP-00404":{"line":3099,"offset":540433,"length":182,"previous":"M18-GAP-00403","next":"M18-GAP-00405"},"M18-GAP-00405":{"line":3100,"offset":540615,"length":181,"previous":"M18-GAP-00404","next":"M18-GAP-00406"},"M18-GAP-00406":{"line":3101,"offset":540796,"length":178,"previous":"M18-GAP-00405","next":"M18-GAP-00407"},"M18-GAP-00407":{"line":3102,"offset":540974,"length":179,"previous":"M18-GAP-00406","next":"M18-GAP-00408"},"M18-GAP-00408":{"line":3103,"offset":541153,"length":176,"previous":"M18-GAP-00407","next":"M18-GAP-00409"},"M18-GAP-00409":{"line":3104,"offset":541329,"length":170,"previous":"M18-GAP-00408","next":"M18-GAP-00410"},"M18-GAP-00410":{"line":3105,"offset":541499,"length":175,"previous":"M18-GAP-00409","next":"M18-GAP-00411"},"M18-GAP-00411":{"line":3106,"offset":541674,"length":174,"previous":"M18-GAP-00410","next":"M18-GAP-00412"},"M18-GAP-00412":{"line":3107,"offset":541848,"length":179,"previous":"M18-GAP-00411","next":"M18-GAP-00413"},"M18-GAP-00413":{"line":3108,"offset":542027,"length":174,"previous":"M18-GAP-00412","next":"M18-GAP-00414"},"M18-GAP-00414":{"line":3109,"offset":542201,"length":173,"previous":"M18-GAP-00413","next":"M18-GAP-00415"},"M18-GAP-00415":{"line":3110,"offset":542374,"length":180,"previous":"M18-GAP-00414","next":"M18-GAP-00416"},"M18-GAP-00416":{"line":3111,"offset":542554,"length":178,"previous":"M18-GAP-00415","next":"M18-GAP-00417"},"M18-GAP-00417":{"line":3112,"offset":542732,"length":178,"previous":"M18-GAP-00416","next":"M18-GAP-00418"},"M18-GAP-00418":{"line":3113,"offset":542910,"length":174,"previous":"M18-GAP-00417","next":"M18-GAP-00419"},"M18-GAP-00419":{"line":3114,"offset":543084,"length":187,"previous":"M18-GAP-00418","next":"M18-GAP-00420"},"M18-GAP-00420":{"line":3115,"offset":543271,"length":174,"previous":"M18-GAP-00419","next":"M18-GAP-00421"},"M18-GAP-00421":{"line":3116,"offset":543445,"length":175,"previous":"M18-GAP-00420","next":"M18-GAP-00422"},"M18-GAP-00422":{"line":3117,"offset":543620,"length":177,"previous":"M18-GAP-00421","next":"M18-GAP-00423"},"M18-GAP-00423":{"line":3118,"offset":543797,"length":175,"previous":"M18-GAP-00422","next":"M18-GAP-00424"},"M18-GAP-00424":{"line":3119,"offset":543972,"length":181,"previous":"M18-GAP-00423","next":"M18-GAP-00425"},"M18-GAP-00425":{"line":3120,"offset":544153,"length":175,"previous":"M18-GAP-00424","next":"M18-GAP-00426"},"M18-GAP-00426":{"line":3121,"offset":544328,"length":178,"previous":"M18-GAP-00425","next":"M18-GAP-00427"},"M18-GAP-00427":{"line":3122,"offset":544506,"length":173,"previous":"M18-GAP-00426","next":"M18-GAP-00428"},"M18-GAP-00428":{"line":3123,"offset":544679,"length":175,"previous":"M18-GAP-00427","next":"M18-GAP-00429"},"M18-GAP-00429":{"line":3124,"offset":544854,"length":175,"previous":"M18-GAP-00428","next":"M18-GAP-00430"},"M18-GAP-00430":{"line":3125,"offset":545029,"length":175,"previous":"M18-GAP-00429","next":"M18-GAP-00431"},"M18-GAP-00431":{"line":3126,"offset":545204,"length":173,"previous":"M18-GAP-00430","next":"M18-GAP-00432"},"M18-GAP-00432":{"line":3127,"offset":545377,"length":177,"previous":"M18-GAP-00431","next":"M18-GAP-00433"},"M18-GAP-00433":{"line":3128,"offset":545554,"length":174,"previous":"M18-GAP-00432","next":"M18-GAP-00434"},"M18-GAP-00434":{"line":3129,"offset":545728,"length":180,"previous":"M18-GAP-00433","next":"M18-GAP-00435"},"M18-GAP-00435":{"line":3130,"offset":545908,"length":180,"previous":"M18-GAP-00434","next":"M18-GAP-00436"},"M18-GAP-00436":{"line":3131,"offset":546088,"length":172,"previous":"M18-GAP-00435","next":"M18-GAP-00437"},"M18-GAP-00437":{"line":3132,"offset":546260,"length":175,"previous":"M18-GAP-00436","next":"M18-GAP-00438"},"M18-GAP-00438":{"line":3133,"offset":546435,"length":172,"previous":"M18-GAP-00437","next":"M18-GAP-00439"},"M18-GAP-00439":{"line":3134,"offset":546607,"length":178,"previous":"M18-GAP-00438","next":"M18-GAP-00440"},"M18-GAP-00440":{"line":3135,"offset":546785,"length":185,"previous":"M18-GAP-00439","next":"M18-GAP-00441"},"M18-GAP-00441":{"line":3136,"offset":546970,"length":177,"previous":"M18-GAP-00440","next":"M18-GAP-00442"},"M18-GAP-00442":{"line":3137,"offset":547147,"length":179,"previous":"M18-GAP-00441","next":"M18-GAP-00443"},"M18-GAP-00443":{"line":3138,"offset":547326,"length":182,"previous":"M18-GAP-00442","next":"M18-GAP-00444"},"M18-GAP-00444":{"line":3139,"offset":547508,"length":178,"previous":"M18-GAP-00443","next":"M18-GAP-00445"},"M18-GAP-00445":{"line":3140,"offset":547686,"length":183,"previous":"M18-GAP-00444","next":"M18-GAP-00446"},"M18-GAP-00446":{"line":3141,"offset":547869,"length":185,"previous":"M18-GAP-00445","next":"M18-GAP-00447"},"M18-GAP-00447":{"line":3142,"offset":548054,"length":177,"previous":"M18-GAP-00446","next":"M18-GAP-00448"},"M18-GAP-00448":{"line":3143,"offset":548231,"length":183,"previous":"M18-GAP-00447","next":"M18-GAP-00449"},"M18-GAP-00449":{"line":3144,"offset":548414,"length":180,"previous":"M18-GAP-00448","next":"M18-GAP-00450"},"M18-GAP-00450":{"line":3145,"offset":548594,"length":177,"previous":"M18-GAP-00449","next":"M18-GAP-00451"},"M18-GAP-00451":{"line":3146,"offset":548771,"length":176,"previous":"M18-GAP-00450","next":"M19-GAP-00001"},"M19-GAP-00001":{"line":3147,"offset":548947,"length":153,"previous":"M18-GAP-00451","next":"M19-GAP-00002"},"M19-GAP-00002":{"line":3148,"offset":549100,"length":155,"previous":"M19-GAP-00001","next":"M19-GAP-00003"},"M19-GAP-00003":{"line":3149,"offset":549255,"length":152,"previous":"M19-GAP-00002","next":"M19-GAP-00004"},"M19-GAP-00004":{"line":3150,"offset":549407,"length":152,"previous":"M19-GAP-00003","next":"M19-GAP-00005"},"M19-GAP-00005":{"line":3151,"offset":549559,"length":153,"previous":"M19-GAP-00004","next":"M19-GAP-00006"},"M19-GAP-00006":{"line":3152,"offset":549712,"length":159,"previous":"M19-GAP-00005","next":"M19-GAP-00007"},"M19-GAP-00007":{"line":3153,"offset":549871,"length":149,"previous":"M19-GAP-00006","next":"M19-GAP-00008"},"M19-GAP-00008":{"line":3154,"offset":550020,"length":152,"previous":"M19-GAP-00007","next":"M19-GAP-00009"},"M19-GAP-00009":{"line":3155,"offset":550172,"length":150,"previous":"M19-GAP-00008","next":"M19-GAP-00010"},"M19-GAP-00010":{"line":3156,"offset":550322,"length":154,"previous":"M19-GAP-00009","next":"M19-GAP-00011"},"M19-GAP-00011":{"line":3157,"offset":550476,"length":151,"previous":"M19-GAP-00010","next":"M19-GAP-00012"},"M19-GAP-00012":{"line":3158,"offset":550627,"length":155,"previous":"M19-GAP-00011","next":"M19-GAP-00013"},"M19-GAP-00013":{"line":3159,"offset":550782,"length":156,"previous":"M19-GAP-00012","next":"M19-GAP-00014"},"M19-GAP-00014":{"line":3160,"offset":550938,"length":154,"previous":"M19-GAP-00013","next":"M19-GAP-00015"},"M19-GAP-00015":{"line":3161,"offset":551092,"length":163,"previous":"M19-GAP-00014","next":"M19-GAP-00016"},"M19-GAP-00016":{"line":3162,"offset":551255,"length":157,"previous":"M19-GAP-00015","next":"M19-GAP-00017"},"M19-GAP-00017":{"line":3163,"offset":551412,"length":152,"previous":"M19-GAP-00016","next":"M19-GAP-00018"},"M19-GAP-00018":{"line":3164,"offset":551564,"length":154,"previous":"M19-GAP-00017","next":"M19-GAP-00019"},"M19-GAP-00019":{"line":3165,"offset":551718,"length":151,"previous":"M19-GAP-00018","next":"M19-GAP-00020"},"M19-GAP-00020":{"line":3166,"offset":551869,"length":153,"previous":"M19-GAP-00019","next":"M20-GAP-00001"},"M20-GAP-00001":{"line":3167,"offset":552022,"length":161,"previous":"M19-GAP-00020","next":"M20-GAP-00002"},"M20-GAP-00002":{"line":3168,"offset":552183,"length":167,"previous":"M20-GAP-00001","next":"M20-GAP-00003"},"M20-GAP-00003":{"line":3169,"offset":552350,"length":157,"previous":"M20-GAP-00002","next":"M20-GAP-00004"},"M20-GAP-00004":{"line":3170,"offset":552507,"length":169,"previous":"M20-GAP-00003","next":"M20-GAP-00005"},"M20-GAP-00005":{"line":3171,"offset":552676,"length":162,"previous":"M20-GAP-00004","next":"M20-GAP-00006"},"M20-GAP-00006":{"line":3172,"offset":552838,"length":171,"previous":"M20-GAP-00005","next":"M20-GAP-00007"},"M20-GAP-00007":{"line":3173,"offset":553009,"length":162,"previous":"M20-GAP-00006","next":"M20-GAP-00008"},"M20-GAP-00008":{"line":3174,"offset":553171,"length":169,"previous":"M20-GAP-00007","next":"M20-GAP-00009"},"M20-GAP-00009":{"line":3175,"offset":553340,"length":161,"previous":"M20-GAP-00008","next":"M20-GAP-00010"},"M20-GAP-00010":{"line":3176,"offset":553501,"length":161,"previous":"M20-GAP-00009","next":"M20-GAP-00011"},"M20-GAP-00011":{"line":3177,"offset":553662,"length":158,"previous":"M20-GAP-00010","next":"M20-GAP-00012"},"M20-GAP-00012":{"line":3178,"offset":553820,"length":162,"previous":"M20-GAP-00011","next":"M20-GAP-00013"},"M20-GAP-00013":{"line":3179,"offset":553982,"length":171,"previous":"M20-GAP-00012","next":"M20-GAP-00014"},"M20-GAP-00014":{"line":3180,"offset":554153,"length":162,"previous":"M20-GAP-00013","next":"M20-GAP-00015"},"M20-GAP-00015":{"line":3181,"offset":554315,"length":162,"previous":"M20-GAP-00014","next":"M20-GAP-00016"},"M20-GAP-00016":{"line":3182,"offset":554477,"length":166,"previous":"M20-GAP-00015","next":"M20-GAP-00017"},"M20-GAP-00017":{"line":3183,"offset":554643,"length":166,"previous":"M20-GAP-00016","next":"M20-GAP-00018"},"M20-GAP-00018":{"line":3184,"offset":554809,"length":166,"previous":"M20-GAP-00017","next":"M20-GAP-00019"},"M20-GAP-00019":{"line":3185,"offset":554975,"length":174,"previous":"M20-GAP-00018","next":"M20-GAP-00020"},"M20-GAP-00020":{"line":3186,"offset":555149,"length":175,"previous":"M20-GAP-00019","next":"M20-GAP-00021"},"M20-GAP-00021":{"line":3187,"offset":555324,"length":169,"previous":"M20-GAP-00020","next":"M20-GAP-00022"},"M20-GAP-00022":{"line":3188,"offset":555493,"length":168,"previous":"M20-GAP-00021","next":"M20-GAP-00023"},"M20-GAP-00023":{"line":3189,"offset":555661,"length":169,"previous":"M20-GAP-00022","next":"M20-GAP-00024"},"M20-GAP-00024":{"line":3190,"offset":555830,"length":164,"previous":"M20-GAP-00023","next":"M20-GAP-00025"},"M20-GAP-00025":{"line":3191,"offset":555994,"length":162,"previous":"M20-GAP-00024","next":"M20-GAP-00026"},"M20-GAP-00026":{"line":3192,"offset":556156,"length":168,"previous":"M20-GAP-00025","next":"M20-GAP-00027"},"M20-GAP-00027":{"line":3193,"offset":556324,"length":170,"previous":"M20-GAP-00026","next":"M20-GAP-00028"},"M20-GAP-00028":{"line":3194,"offset":556494,"length":166,"previous":"M20-GAP-00027","next":"M20-GAP-00029"},"M20-GAP-00029":{"line":3195,"offset":556660,"length":162,"previous":"M20-GAP-00028","next":"M20-GAP-00030"},"M20-GAP-00030":{"line":3196,"offset":556822,"length":176,"previous":"M20-GAP-00029","next":"M20-GAP-00031"},"M20-GAP-00031":{"line":3197,"offset":556998,"length":173,"previous":"M20-GAP-00030","next":"M20-GAP-00032"},"M20-GAP-00032":{"line":3198,"offset":557171,"length":173,"previous":"M20-GAP-00031","next":"M20-GAP-00033"},"M20-GAP-00033":{"line":3199,"offset":557344,"length":175,"previous":"M20-GAP-00032","next":"M20-GAP-00034"},"M20-GAP-00034":{"line":3200,"offset":557519,"length":174,"previous":"M20-GAP-00033","next":"M20-GAP-00035"},"M20-GAP-00035":{"line":3201,"offset":557693,"length":172,"previous":"M20-GAP-00034","next":"M20-GAP-00036"},"M20-GAP-00036":{"line":3202,"offset":557865,"length":176,"previous":"M20-GAP-00035","next":"M20-GAP-00037"},"M20-GAP-00037":{"line":3203,"offset":558041,"length":177,"previous":"M20-GAP-00036","next":"M20-GAP-00038"},"M20-GAP-00038":{"line":3204,"offset":558218,"length":172,"previous":"M20-GAP-00037","next":"M20-GAP-00039"},"M20-GAP-00039":{"line":3205,"offset":558390,"length":176,"previous":"M20-GAP-00038","next":"M20-GAP-00040"},"M20-GAP-00040":{"line":3206,"offset":558566,"length":177,"previous":"M20-GAP-00039","next":"M20-GAP-00041"},"M20-GAP-00041":{"line":3207,"offset":558743,"length":174,"previous":"M20-GAP-00040","next":"M20-GAP-00042"},"M20-GAP-00042":{"line":3208,"offset":558917,"length":157,"previous":"M20-GAP-00041","next":"M20-GAP-00043"},"M20-GAP-00043":{"line":3209,"offset":559074,"length":162,"previous":"M20-GAP-00042","next":"M20-GAP-00044"},"M20-GAP-00044":{"line":3210,"offset":559236,"length":168,"previous":"M20-GAP-00043","next":"M20-GAP-00045"},"M20-GAP-00045":{"line":3211,"offset":559404,"length":161,"previous":"M20-GAP-00044","next":"M20-GAP-00046"},"M20-GAP-00046":{"line":3212,"offset":559565,"length":164,"previous":"M20-GAP-00045","next":"M20-GAP-00047"},"M20-GAP-00047":{"line":3213,"offset":559729,"length":173,"previous":"M20-GAP-00046","next":"M20-GAP-00048"},"M20-GAP-00048":{"line":3214,"offset":559902,"length":160,"previous":"M20-GAP-00047","next":"M20-GAP-00049"},"M20-GAP-00049":{"line":3215,"offset":560062,"length":165,"previous":"M20-GAP-00048","next":"M20-GAP-00050"},"M20-GAP-00050":{"line":3216,"offset":560227,"length":176,"previous":"M20-GAP-00049","next":"M20-GAP-00051"},"M20-GAP-00051":{"line":3217,"offset":560403,"length":177,"previous":"M20-GAP-00050","next":"M20-GAP-00052"},"M20-GAP-00052":{"line":3218,"offset":560580,"length":163,"previous":"M20-GAP-00051","next":"M20-GAP-00053"},"M20-GAP-00053":{"line":3219,"offset":560743,"length":171,"previous":"M20-GAP-00052","next":"M20-GAP-00054"},"M20-GAP-00054":{"line":3220,"offset":560914,"length":164,"previous":"M20-GAP-00053","next":"M20-GAP-00055"},"M20-GAP-00055":{"line":3221,"offset":561078,"length":163,"previous":"M20-GAP-00054","next":"M20-GAP-00056"},"M20-GAP-00056":{"line":3222,"offset":561241,"length":159,"previous":"M20-GAP-00055","next":"M20-GAP-00057"},"M20-GAP-00057":{"line":3223,"offset":561400,"length":163,"previous":"M20-GAP-00056","next":"M20-GAP-00058"},"M20-GAP-00058":{"line":3224,"offset":561563,"length":160,"previous":"M20-GAP-00057","next":"M20-GAP-00059"},"M20-GAP-00059":{"line":3225,"offset":561723,"length":168,"previous":"M20-GAP-00058","next":"M20-GAP-00060"},"M20-GAP-00060":{"line":3226,"offset":561891,"length":164,"previous":"M20-GAP-00059","next":"M20-GAP-00061"},"M20-GAP-00061":{"line":3227,"offset":562055,"length":163,"previous":"M20-GAP-00060","next":"M20-GAP-00062"},"M20-GAP-00062":{"line":3228,"offset":562218,"length":165,"previous":"M20-GAP-00061","next":"M20-GAP-00063"},"M20-GAP-00063":{"line":3229,"offset":562383,"length":171,"previous":"M20-GAP-00062","next":"M20-GAP-00064"},"M20-GAP-00064":{"line":3230,"offset":562554,"length":165,"previous":"M20-GAP-00063","next":"M20-GAP-00065"},"M20-GAP-00065":{"line":3231,"offset":562719,"length":165,"previous":"M20-GAP-00064","next":"M20-GAP-00066"},"M20-GAP-00066":{"line":3232,"offset":562884,"length":152,"previous":"M20-GAP-00065","next":"M20-GAP-00067"},"M20-GAP-00067":{"line":3233,"offset":563036,"length":159,"previous":"M20-GAP-00066","next":"M20-GAP-00068"},"M20-GAP-00068":{"line":3234,"offset":563195,"length":159,"previous":"M20-GAP-00067","next":"M20-GAP-00069"},"M20-GAP-00069":{"line":3235,"offset":563354,"length":160,"previous":"M20-GAP-00068","next":"M20-GAP-00070"},"M20-GAP-00070":{"line":3236,"offset":563514,"length":154,"previous":"M20-GAP-00069","next":"M20-GAP-00071"},"M20-GAP-00071":{"line":3237,"offset":563668,"length":157,"previous":"M20-GAP-00070","next":"M20-GAP-00072"},"M20-GAP-00072":{"line":3238,"offset":563825,"length":159,"previous":"M20-GAP-00071","next":"M20-GAP-00073"},"M20-GAP-00073":{"line":3239,"offset":563984,"length":154,"previous":"M20-GAP-00072","next":"M20-GAP-00074"},"M20-GAP-00074":{"line":3240,"offset":564138,"length":160,"previous":"M20-GAP-00073","next":"M20-GAP-00075"},"M20-GAP-00075":{"line":3241,"offset":564298,"length":162,"previous":"M20-GAP-00074","next":"M20-GAP-00076"},"M20-GAP-00076":{"line":3242,"offset":564460,"length":153,"previous":"M20-GAP-00075","next":"M20-GAP-00077"},"M20-GAP-00077":{"line":3243,"offset":564613,"length":154,"previous":"M20-GAP-00076","next":"M20-GAP-00078"},"M20-GAP-00078":{"line":3244,"offset":564767,"length":153,"previous":"M20-GAP-00077","next":"M20-GAP-00079"},"M20-GAP-00079":{"line":3245,"offset":564920,"length":153,"previous":"M20-GAP-00078","next":"M20-GAP-00080"},"M20-GAP-00080":{"line":3246,"offset":565073,"length":154,"previous":"M20-GAP-00079","next":"M20-GAP-00081"},"M20-GAP-00081":{"line":3247,"offset":565227,"length":158,"previous":"M20-GAP-00080","next":"M20-GAP-00082"},"M20-GAP-00082":{"line":3248,"offset":565385,"length":157,"previous":"M20-GAP-00081","next":"M20-GAP-00083"},"M20-GAP-00083":{"line":3249,"offset":565542,"length":157,"previous":"M20-GAP-00082","next":"M20-GAP-00084"},"M20-GAP-00084":{"line":3250,"offset":565699,"length":154,"previous":"M20-GAP-00083","next":"M20-GAP-00085"},"M20-GAP-00085":{"line":3251,"offset":565853,"length":154,"previous":"M20-GAP-00084","next":"M20-GAP-00086"},"M20-GAP-00086":{"line":3252,"offset":566007,"length":154,"previous":"M20-GAP-00085","next":"M20-GAP-00087"},"M20-GAP-00087":{"line":3253,"offset":566161,"length":157,"previous":"M20-GAP-00086","next":"M20-GAP-00088"},"M20-GAP-00088":{"line":3254,"offset":566318,"length":153,"previous":"M20-GAP-00087","next":"M20-GAP-00089"},"M20-GAP-00089":{"line":3255,"offset":566471,"length":153,"previous":"M20-GAP-00088","next":"M21-GAP-00001"},"M21-GAP-00001":{"line":3256,"offset":566624,"length":156,"previous":"M20-GAP-00089","next":"M21-GAP-00002"},"M21-GAP-00002":{"line":3257,"offset":566780,"length":152,"previous":"M21-GAP-00001","next":"M21-GAP-00003"},"M21-GAP-00003":{"line":3258,"offset":566932,"length":161,"previous":"M21-GAP-00002","next":"M21-GAP-00004"},"M21-GAP-00004":{"line":3259,"offset":567093,"length":150,"previous":"M21-GAP-00003","next":"M21-GAP-00005"},"M21-GAP-00005":{"line":3260,"offset":567243,"length":157,"previous":"M21-GAP-00004","next":"M21-GAP-00006"},"M21-GAP-00006":{"line":3261,"offset":567400,"length":157,"previous":"M21-GAP-00005","next":"M21-GAP-00007"},"M21-GAP-00007":{"line":3262,"offset":567557,"length":157,"previous":"M21-GAP-00006","next":"M21-GAP-00008"},"M21-GAP-00008":{"line":3263,"offset":567714,"length":149,"previous":"M21-GAP-00007","next":"M21-GAP-00009"},"M21-GAP-00009":{"line":3264,"offset":567863,"length":155,"previous":"M21-GAP-00008","next":"M21-GAP-00010"},"M21-GAP-00010":{"line":3265,"offset":568018,"length":156,"previous":"M21-GAP-00009","next":"M21-GAP-00011"},"M21-GAP-00011":{"line":3266,"offset":568174,"length":153,"previous":"M21-GAP-00010","next":"M21-GAP-00012"},"M21-GAP-00012":{"line":3267,"offset":568327,"length":156,"previous":"M21-GAP-00011","next":"M21-GAP-00013"},"M21-GAP-00013":{"line":3268,"offset":568483,"length":155,"previous":"M21-GAP-00012","next":"M21-GAP-00014"},"M21-GAP-00014":{"line":3269,"offset":568638,"length":160,"previous":"M21-GAP-00013","next":"M21-GAP-00015"},"M21-GAP-00015":{"line":3270,"offset":568798,"length":156,"previous":"M21-GAP-00014","next":"M21-GAP-00016"},"M21-GAP-00016":{"line":3271,"offset":568954,"length":154,"previous":"M21-GAP-00015","next":"M21-GAP-00017"},"M21-GAP-00017":{"line":3272,"offset":569108,"length":156,"previous":"M21-GAP-00016","next":"M21-GAP-00018"},"M21-GAP-00018":{"line":3273,"offset":569264,"length":151,"previous":"M21-GAP-00017","next":"M21-GAP-00019"},"M21-GAP-00019":{"line":3274,"offset":569415,"length":152,"previous":"M21-GAP-00018","next":"M21-GAP-00020"},"M21-GAP-00020":{"line":3275,"offset":569567,"length":172,"previous":"M21-GAP-00019","next":"M21-GAP-00021"},"M21-GAP-00021":{"line":3276,"offset":569739,"length":171,"previous":"M21-GAP-00020","next":"M21-GAP-00022"},"M21-GAP-00022":{"line":3277,"offset":569910,"length":173,"previous":"M21-GAP-00021","next":"M21-GAP-00023"},"M21-GAP-00023":{"line":3278,"offset":570083,"length":176,"previous":"M21-GAP-00022","next":"M21-GAP-00024"},"M21-GAP-00024":{"line":3279,"offset":570259,"length":174,"previous":"M21-GAP-00023","next":"M21-GAP-00025"},"M21-GAP-00025":{"line":3280,"offset":570433,"length":176,"previous":"M21-GAP-00024","next":"M21-GAP-00026"},"M21-GAP-00026":{"line":3281,"offset":570609,"length":173,"previous":"M21-GAP-00025","next":"M21-GAP-00027"},"M21-GAP-00027":{"line":3282,"offset":570782,"length":176,"previous":"M21-GAP-00026","next":"M21-GAP-00028"},"M21-GAP-00028":{"line":3283,"offset":570958,"length":165,"previous":"M21-GAP-00027","next":"M21-GAP-00029"},"M21-GAP-00029":{"line":3284,"offset":571123,"length":166,"previous":"M21-GAP-00028","next":"M21-GAP-00030"},"M21-GAP-00030":{"line":3285,"offset":571289,"length":167,"previous":"M21-GAP-00029","next":"M21-GAP-00031"},"M21-GAP-00031":{"line":3286,"offset":571456,"length":177,"previous":"M21-GAP-00030","next":"M21-GAP-00032"},"M21-GAP-00032":{"line":3287,"offset":571633,"length":165,"previous":"M21-GAP-00031","next":"M21-GAP-00033"},"M21-GAP-00033":{"line":3288,"offset":571798,"length":166,"previous":"M21-GAP-00032","next":"M21-GAP-00034"},"M21-GAP-00034":{"line":3289,"offset":571964,"length":166,"previous":"M21-GAP-00033","next":"M21-GAP-00035"},"M21-GAP-00035":{"line":3290,"offset":572130,"length":167,"previous":"M21-GAP-00034","next":"M21-GAP-00036"},"M21-GAP-00036":{"line":3291,"offset":572297,"length":170,"previous":"M21-GAP-00035","next":"M21-GAP-00037"},"M21-GAP-00037":{"line":3292,"offset":572467,"length":170,"previous":"M21-GAP-00036","next":"M21-GAP-00038"},"M21-GAP-00038":{"line":3293,"offset":572637,"length":178,"previous":"M21-GAP-00037","next":"M21-GAP-00039"},"M21-GAP-00039":{"line":3294,"offset":572815,"length":178,"previous":"M21-GAP-00038","next":"M21-GAP-00040"},"M21-GAP-00040":{"line":3295,"offset":572993,"length":176,"previous":"M21-GAP-00039","next":"M21-GAP-00041"},"M21-GAP-00041":{"line":3296,"offset":573169,"length":166,"previous":"M21-GAP-00040","next":"M21-GAP-00042"},"M21-GAP-00042":{"line":3297,"offset":573335,"length":174,"previous":"M21-GAP-00041","next":"M21-GAP-00043"},"M21-GAP-00043":{"line":3298,"offset":573509,"length":169,"previous":"M21-GAP-00042","next":"M21-GAP-00044"},"M21-GAP-00044":{"line":3299,"offset":573678,"length":163,"previous":"M21-GAP-00043","next":"M21-GAP-00045"},"M21-GAP-00045":{"line":3300,"offset":573841,"length":177,"previous":"M21-GAP-00044","next":"M21-GAP-00046"},"M21-GAP-00046":{"line":3301,"offset":574018,"length":177,"previous":"M21-GAP-00045","next":"M21-GAP-00047"},"M21-GAP-00047":{"line":3302,"offset":574195,"length":163,"previous":"M21-GAP-00046","next":"M21-GAP-00048"},"M21-GAP-00048":{"line":3303,"offset":574358,"length":163,"previous":"M21-GAP-00047","next":"M21-GAP-00049"},"M21-GAP-00049":{"line":3304,"offset":574521,"length":163,"previous":"M21-GAP-00048","next":"M21-GAP-00050"},"M21-GAP-00050":{"line":3305,"offset":574684,"length":163,"previous":"M21-GAP-00049","next":"M21-GAP-00051"},"M21-GAP-00051":{"line":3306,"offset":574847,"length":163,"previous":"M21-GAP-00050","next":"M21-GAP-00052"},"M21-GAP-00052":{"line":3307,"offset":575010,"length":163,"previous":"M21-GAP-00051","next":"M21-GAP-00053"},"M21-GAP-00053":{"line":3308,"offset":575173,"length":184,"previous":"M21-GAP-00052","next":"M21-GAP-00054"},"M21-GAP-00054":{"line":3309,"offset":575357,"length":184,"previous":"M21-GAP-00053","next":"M21-GAP-00055"},"M21-GAP-00055":{"line":3310,"offset":575541,"length":187,"previous":"M21-GAP-00054","next":"M21-GAP-00056"},"M21-GAP-00056":{"line":3311,"offset":575728,"length":194,"previous":"M21-GAP-00055","next":"M21-GAP-00057"},"M21-GAP-00057":{"line":3312,"offset":575922,"length":189,"previous":"M21-GAP-00056","next":"M21-GAP-00058"},"M21-GAP-00058":{"line":3313,"offset":576111,"length":189,"previous":"M21-GAP-00057","next":"M21-GAP-00059"},"M21-GAP-00059":{"line":3314,"offset":576300,"length":209,"previous":"M21-GAP-00058","next":"M21-GAP-00060"},"M21-GAP-00060":{"line":3315,"offset":576509,"length":211,"previous":"M21-GAP-00059","next":"M21-GAP-00061"},"M21-GAP-00061":{"line":3316,"offset":576720,"length":215,"previous":"M21-GAP-00060","next":"M21-GAP-00062"},"M21-GAP-00062":{"line":3317,"offset":576935,"length":205,"previous":"M21-GAP-00061","next":"M21-GAP-00063"},"M21-GAP-00063":{"line":3318,"offset":577140,"length":202,"previous":"M21-GAP-00062","next":"M21-GAP-00064"},"M21-GAP-00064":{"line":3319,"offset":577342,"length":204,"previous":"M21-GAP-00063","next":"M21-GAP-00065"},"M21-GAP-00065":{"line":3320,"offset":577546,"length":204,"previous":"M21-GAP-00064","next":"M21-GAP-00066"},"M21-GAP-00066":{"line":3321,"offset":577750,"length":204,"previous":"M21-GAP-00065","next":"M21-GAP-00067"},"M21-GAP-00067":{"line":3322,"offset":577954,"length":199,"previous":"M21-GAP-00066","next":"M21-GAP-00068"},"M21-GAP-00068":{"line":3323,"offset":578153,"length":212,"previous":"M21-GAP-00067","next":"M21-GAP-00069"},"M21-GAP-00069":{"line":3324,"offset":578365,"length":202,"previous":"M21-GAP-00068","next":"M21-GAP-00070"},"M21-GAP-00070":{"line":3325,"offset":578567,"length":201,"previous":"M21-GAP-00069","next":"M21-GAP-00071"},"M21-GAP-00071":{"line":3326,"offset":578768,"length":204,"previous":"M21-GAP-00070","next":"M21-GAP-00072"},"M21-GAP-00072":{"line":3327,"offset":578972,"length":199,"previous":"M21-GAP-00071","next":"M21-GAP-00073"},"M21-GAP-00073":{"line":3328,"offset":579171,"length":200,"previous":"M21-GAP-00072","next":"M21-GAP-00074"},"M21-GAP-00074":{"line":3329,"offset":579371,"length":199,"previous":"M21-GAP-00073","next":"M21-GAP-00075"},"M21-GAP-00075":{"line":3330,"offset":579570,"length":199,"previous":"M21-GAP-00074","next":"M21-GAP-00076"},"M21-GAP-00076":{"line":3331,"offset":579769,"length":199,"previous":"M21-GAP-00075","next":"M21-GAP-00077"},"M21-GAP-00077":{"line":3332,"offset":579968,"length":199,"previous":"M21-GAP-00076","next":"M21-GAP-00078"},"M21-GAP-00078":{"line":3333,"offset":580167,"length":211,"previous":"M21-GAP-00077","next":"M21-GAP-00079"},"M21-GAP-00079":{"line":3334,"offset":580378,"length":214,"previous":"M21-GAP-00078","next":"M21-GAP-00080"},"M21-GAP-00080":{"line":3335,"offset":580592,"length":206,"previous":"M21-GAP-00079","next":"M21-GAP-00081"},"M21-GAP-00081":{"line":3336,"offset":580798,"length":206,"previous":"M21-GAP-00080","next":"M21-GAP-00082"},"M21-GAP-00082":{"line":3337,"offset":581004,"length":206,"previous":"M21-GAP-00081","next":"M21-GAP-00083"},"M21-GAP-00083":{"line":3338,"offset":581210,"length":206,"previous":"M21-GAP-00082","next":"M21-GAP-00084"},"M21-GAP-00084":{"line":3339,"offset":581416,"length":199,"previous":"M21-GAP-00083","next":"M21-GAP-00085"},"M21-GAP-00085":{"line":3340,"offset":581615,"length":200,"previous":"M21-GAP-00084","next":"M21-GAP-00086"},"M21-GAP-00086":{"line":3341,"offset":581815,"length":204,"previous":"M21-GAP-00085","next":"M21-GAP-00087"},"M21-GAP-00087":{"line":3342,"offset":582019,"length":215,"previous":"M21-GAP-00086","next":"M21-GAP-00088"},"M21-GAP-00088":{"line":3343,"offset":582234,"length":212,"previous":"M21-GAP-00087","next":"M21-GAP-00089"},"M21-GAP-00089":{"line":3344,"offset":582446,"length":210,"previous":"M21-GAP-00088","next":"M21-GAP-00090"},"M21-GAP-00090":{"line":3345,"offset":582656,"length":208,"previous":"M21-GAP-00089","next":"M21-GAP-00091"},"M21-GAP-00091":{"line":3346,"offset":582864,"length":211,"previous":"M21-GAP-00090","next":"M21-GAP-00092"},"M21-GAP-00092":{"line":3347,"offset":583075,"length":205,"previous":"M21-GAP-00091","next":"M21-GAP-00093"},"M21-GAP-00093":{"line":3348,"offset":583280,"length":199,"previous":"M21-GAP-00092","next":"M21-GAP-00094"},"M21-GAP-00094":{"line":3349,"offset":583479,"length":202,"previous":"M21-GAP-00093","next":"M21-GAP-00095"},"M21-GAP-00095":{"line":3350,"offset":583681,"length":214,"previous":"M21-GAP-00094","next":"M21-GAP-00096"},"M21-GAP-00096":{"line":3351,"offset":583895,"length":204,"previous":"M21-GAP-00095","next":"M21-GAP-00097"},"M21-GAP-00097":{"line":3352,"offset":584099,"length":204,"previous":"M21-GAP-00096","next":"M21-GAP-00098"},"M21-GAP-00098":{"line":3353,"offset":584303,"length":204,"previous":"M21-GAP-00097","next":"M21-GAP-00099"},"M21-GAP-00099":{"line":3354,"offset":584507,"length":203,"previous":"M21-GAP-00098","next":"M21-GAP-00100"},"M21-GAP-00100":{"line":3355,"offset":584710,"length":203,"previous":"M21-GAP-00099","next":"M21-GAP-00101"},"M21-GAP-00101":{"line":3356,"offset":584913,"length":202,"previous":"M21-GAP-00100","next":"M21-GAP-00102"},"M21-GAP-00102":{"line":3357,"offset":585115,"length":204,"previous":"M21-GAP-00101","next":"M21-GAP-00103"},"M21-GAP-00103":{"line":3358,"offset":585319,"length":207,"previous":"M21-GAP-00102","next":"M21-GAP-00104"},"M21-GAP-00104":{"line":3359,"offset":585526,"length":200,"previous":"M21-GAP-00103","next":"M21-GAP-00105"},"M21-GAP-00105":{"line":3360,"offset":585726,"length":209,"previous":"M21-GAP-00104","next":"M21-GAP-00106"},"M21-GAP-00106":{"line":3361,"offset":585935,"length":198,"previous":"M21-GAP-00105","next":"M21-GAP-00107"},"M21-GAP-00107":{"line":3362,"offset":586133,"length":203,"previous":"M21-GAP-00106","next":"M21-GAP-00108"},"M21-GAP-00108":{"line":3363,"offset":586336,"length":206,"previous":"M21-GAP-00107","next":"M21-GAP-00109"},"M21-GAP-00109":{"line":3364,"offset":586542,"length":205,"previous":"M21-GAP-00108","next":"M21-GAP-00110"},"M21-GAP-00110":{"line":3365,"offset":586747,"length":205,"previous":"M21-GAP-00109","next":"M21-GAP-00111"},"M21-GAP-00111":{"line":3366,"offset":586952,"length":190,"previous":"M21-GAP-00110","next":"M21-GAP-00112"},"M21-GAP-00112":{"line":3367,"offset":587142,"length":190,"previous":"M21-GAP-00111","next":"M21-GAP-00113"},"M21-GAP-00113":{"line":3368,"offset":587332,"length":190,"previous":"M21-GAP-00112","next":"M21-GAP-00114"},"M21-GAP-00114":{"line":3369,"offset":587522,"length":187,"previous":"M21-GAP-00113","next":"M21-GAP-00115"},"M21-GAP-00115":{"line":3370,"offset":587709,"length":204,"previous":"M21-GAP-00114","next":"M21-GAP-00116"},"M21-GAP-00116":{"line":3371,"offset":587913,"length":207,"previous":"M21-GAP-00115","next":"M21-GAP-00117"},"M21-GAP-00117":{"line":3372,"offset":588120,"length":207,"previous":"M21-GAP-00116","next":"M21-GAP-00118"},"M21-GAP-00118":{"line":3373,"offset":588327,"length":207,"previous":"M21-GAP-00117","next":"M21-GAP-00119"},"M21-GAP-00119":{"line":3374,"offset":588534,"length":207,"previous":"M21-GAP-00118","next":"M21-GAP-00120"},"M21-GAP-00120":{"line":3375,"offset":588741,"length":207,"previous":"M21-GAP-00119","next":"M21-GAP-00121"},"M21-GAP-00121":{"line":3376,"offset":588948,"length":207,"previous":"M21-GAP-00120","next":"M21-GAP-00122"},"M21-GAP-00122":{"line":3377,"offset":589155,"length":210,"previous":"M21-GAP-00121","next":"M21-GAP-00123"},"M21-GAP-00123":{"line":3378,"offset":589365,"length":210,"previous":"M21-GAP-00122","next":"M21-GAP-00124"},"M21-GAP-00124":{"line":3379,"offset":589575,"length":210,"previous":"M21-GAP-00123","next":"M21-GAP-00125"},"M21-GAP-00125":{"line":3380,"offset":589785,"length":209,"previous":"M21-GAP-00124","next":"M21-GAP-00126"},"M21-GAP-00126":{"line":3381,"offset":589994,"length":214,"previous":"M21-GAP-00125","next":"M21-GAP-00127"},"M21-GAP-00127":{"line":3382,"offset":590208,"length":214,"previous":"M21-GAP-00126","next":"M21-GAP-00128"},"M21-GAP-00128":{"line":3383,"offset":590422,"length":214,"previous":"M21-GAP-00127","next":"M21-GAP-00129"},"M21-GAP-00129":{"line":3384,"offset":590636,"length":214,"previous":"M21-GAP-00128","next":"M21-GAP-00130"},"M21-GAP-00130":{"line":3385,"offset":590850,"length":215,"previous":"M21-GAP-00129","next":"M21-GAP-00131"},"M21-GAP-00131":{"line":3386,"offset":591065,"length":208,"previous":"M21-GAP-00130","next":"M21-GAP-00132"},"M21-GAP-00132":{"line":3387,"offset":591273,"length":208,"previous":"M21-GAP-00131","next":"M21-GAP-00133"},"M21-GAP-00133":{"line":3388,"offset":591481,"length":208,"previous":"M21-GAP-00132","next":"M21-GAP-00134"},"M21-GAP-00134":{"line":3389,"offset":591689,"length":212,"previous":"M21-GAP-00133","next":"M21-GAP-00135"},"M21-GAP-00135":{"line":3390,"offset":591901,"length":212,"previous":"M21-GAP-00134","next":"M21-GAP-00136"},"M21-GAP-00136":{"line":3391,"offset":592113,"length":208,"previous":"M21-GAP-00135","next":"M21-GAP-00137"},"M21-GAP-00137":{"line":3392,"offset":592321,"length":205,"previous":"M21-GAP-00136","next":"M21-GAP-00138"},"M21-GAP-00138":{"line":3393,"offset":592526,"length":216,"previous":"M21-GAP-00137","next":"M21-GAP-00139"},"M21-GAP-00139":{"line":3394,"offset":592742,"length":210,"previous":"M21-GAP-00138","next":"M21-GAP-00140"},"M21-GAP-00140":{"line":3395,"offset":592952,"length":210,"previous":"M21-GAP-00139","next":"M21-GAP-00141"},"M21-GAP-00141":{"line":3396,"offset":593162,"length":187,"previous":"M21-GAP-00140","next":"M21-GAP-00142"},"M21-GAP-00142":{"line":3397,"offset":593349,"length":188,"previous":"M21-GAP-00141","next":"M21-GAP-00143"},"M21-GAP-00143":{"line":3398,"offset":593537,"length":189,"previous":"M21-GAP-00142","next":"M21-GAP-00144"},"M21-GAP-00144":{"line":3399,"offset":593726,"length":188,"previous":"M21-GAP-00143","next":"M21-GAP-00145"},"M21-GAP-00145":{"line":3400,"offset":593914,"length":203,"previous":"M21-GAP-00144","next":"M21-GAP-00146"},"M21-GAP-00146":{"line":3401,"offset":594117,"length":199,"previous":"M21-GAP-00145","next":"M21-GAP-00147"},"M21-GAP-00147":{"line":3402,"offset":594316,"length":199,"previous":"M21-GAP-00146","next":"M21-GAP-00148"},"M21-GAP-00148":{"line":3403,"offset":594515,"length":199,"previous":"M21-GAP-00147","next":"M21-GAP-00149"},"M21-GAP-00149":{"line":3404,"offset":594714,"length":199,"previous":"M21-GAP-00148","next":"M21-GAP-00150"},"M21-GAP-00150":{"line":3405,"offset":594913,"length":199,"previous":"M21-GAP-00149","next":"M21-GAP-00151"},"M21-GAP-00151":{"line":3406,"offset":595112,"length":199,"previous":"M21-GAP-00150","next":"M21-GAP-00152"},"M21-GAP-00152":{"line":3407,"offset":595311,"length":203,"previous":"M21-GAP-00151","next":"M21-GAP-00153"},"M21-GAP-00153":{"line":3408,"offset":595514,"length":203,"previous":"M21-GAP-00152","next":"M21-GAP-00154"},"M21-GAP-00154":{"line":3409,"offset":595717,"length":203,"previous":"M21-GAP-00153","next":"M21-GAP-00155"},"M21-GAP-00155":{"line":3410,"offset":595920,"length":204,"previous":"M21-GAP-00154","next":"M21-GAP-00156"},"M21-GAP-00156":{"line":3411,"offset":596124,"length":205,"previous":"M21-GAP-00155","next":"M21-GAP-00157"},"M21-GAP-00157":{"line":3412,"offset":596329,"length":201,"previous":"M21-GAP-00156","next":"M21-GAP-00158"},"M21-GAP-00158":{"line":3413,"offset":596530,"length":201,"previous":"M21-GAP-00157","next":"M21-GAP-00159"},"M21-GAP-00159":{"line":3414,"offset":596731,"length":201,"previous":"M21-GAP-00158","next":"M21-GAP-00160"},"M21-GAP-00160":{"line":3415,"offset":596932,"length":201,"previous":"M21-GAP-00159","next":"M21-GAP-00161"},"M21-GAP-00161":{"line":3416,"offset":597133,"length":201,"previous":"M21-GAP-00160","next":"M21-GAP-00162"},"M21-GAP-00162":{"line":3417,"offset":597334,"length":201,"previous":"M21-GAP-00161","next":"M21-GAP-00163"},"M21-GAP-00163":{"line":3418,"offset":597535,"length":204,"previous":"M21-GAP-00162","next":"M21-GAP-00164"},"M21-GAP-00164":{"line":3419,"offset":597739,"length":200,"previous":"M21-GAP-00163","next":"M21-GAP-00165"},"M21-GAP-00165":{"line":3420,"offset":597939,"length":200,"previous":"M21-GAP-00164","next":"M21-GAP-00166"},"M21-GAP-00166":{"line":3421,"offset":598139,"length":200,"previous":"M21-GAP-00165","next":"M21-GAP-00167"},"M21-GAP-00167":{"line":3422,"offset":598339,"length":200,"previous":"M21-GAP-00166","next":"M21-GAP-00168"},"M21-GAP-00168":{"line":3423,"offset":598539,"length":200,"previous":"M21-GAP-00167","next":"M21-GAP-00169"},"M21-GAP-00169":{"line":3424,"offset":598739,"length":203,"previous":"M21-GAP-00168","next":"M21-GAP-00170"},"M21-GAP-00170":{"line":3425,"offset":598942,"length":200,"previous":"M21-GAP-00169","next":"M21-GAP-00171"},"M21-GAP-00171":{"line":3426,"offset":599142,"length":204,"previous":"M21-GAP-00170","next":"M21-GAP-00172"},"M21-GAP-00172":{"line":3427,"offset":599346,"length":202,"previous":"M21-GAP-00171","next":"M21-GAP-00173"},"M21-GAP-00173":{"line":3428,"offset":599548,"length":208,"previous":"M21-GAP-00172","next":"M21-GAP-00174"},"M21-GAP-00174":{"line":3429,"offset":599756,"length":204,"previous":"M21-GAP-00173","next":"M21-GAP-00175"},"M21-GAP-00175":{"line":3430,"offset":599960,"length":204,"previous":"M21-GAP-00174","next":"M21-GAP-00176"},"M21-GAP-00176":{"line":3431,"offset":600164,"length":204,"previous":"M21-GAP-00175","next":"M21-GAP-00177"},"M21-GAP-00177":{"line":3432,"offset":600368,"length":204,"previous":"M21-GAP-00176","next":"M21-GAP-00178"},"M21-GAP-00178":{"line":3433,"offset":600572,"length":204,"previous":"M21-GAP-00177","next":"M21-GAP-00179"},"M21-GAP-00179":{"line":3434,"offset":600776,"length":204,"previous":"M21-GAP-00178","next":"M21-GAP-00180"},"M21-GAP-00180":{"line":3435,"offset":600980,"length":204,"previous":"M21-GAP-00179","next":"M21-GAP-00181"},"M21-GAP-00181":{"line":3436,"offset":601184,"length":204,"previous":"M21-GAP-00180","next":"M21-GAP-00182"},"M21-GAP-00182":{"line":3437,"offset":601388,"length":204,"previous":"M21-GAP-00181","next":"M21-GAP-00183"},"M21-GAP-00183":{"line":3438,"offset":601592,"length":204,"previous":"M21-GAP-00182","next":"M21-GAP-00184"},"M21-GAP-00184":{"line":3439,"offset":601796,"length":204,"previous":"M21-GAP-00183","next":"M21-GAP-00185"},"M21-GAP-00185":{"line":3440,"offset":602000,"length":204,"previous":"M21-GAP-00184","next":"M21-GAP-00186"},"M21-GAP-00186":{"line":3441,"offset":602204,"length":204,"previous":"M21-GAP-00185","next":"M21-GAP-00187"},"M21-GAP-00187":{"line":3442,"offset":602408,"length":204,"previous":"M21-GAP-00186","next":"M21-GAP-00188"},"M21-GAP-00188":{"line":3443,"offset":602612,"length":204,"previous":"M21-GAP-00187","next":"M21-GAP-00189"},"M21-GAP-00189":{"line":3444,"offset":602816,"length":193,"previous":"M21-GAP-00188","next":"M21-GAP-00190"},"M21-GAP-00190":{"line":3445,"offset":603009,"length":193,"previous":"M21-GAP-00189","next":"M21-GAP-00191"},"M21-GAP-00191":{"line":3446,"offset":603202,"length":193,"previous":"M21-GAP-00190","next":"M21-GAP-00192"},"M21-GAP-00192":{"line":3447,"offset":603395,"length":193,"previous":"M21-GAP-00191","next":"M21-GAP-00193"},"M21-GAP-00193":{"line":3448,"offset":603588,"length":193,"previous":"M21-GAP-00192","next":"M21-GAP-00194"},"M21-GAP-00194":{"line":3449,"offset":603781,"length":193,"previous":"M21-GAP-00193","next":"M21-GAP-00195"},"M21-GAP-00195":{"line":3450,"offset":603974,"length":193,"previous":"M21-GAP-00194","next":"M21-GAP-00196"},"M21-GAP-00196":{"line":3451,"offset":604167,"length":193,"previous":"M21-GAP-00195","next":"M21-GAP-00197"},"M21-GAP-00197":{"line":3452,"offset":604360,"length":193,"previous":"M21-GAP-00196","next":"M21-GAP-00198"},"M21-GAP-00198":{"line":3453,"offset":604553,"length":193,"previous":"M21-GAP-00197","next":"M21-GAP-00199"},"M21-GAP-00199":{"line":3454,"offset":604746,"length":207,"previous":"M21-GAP-00198","next":"M21-GAP-00200"},"M21-GAP-00200":{"line":3455,"offset":604953,"length":207,"previous":"M21-GAP-00199","next":"M21-GAP-00201"},"M21-GAP-00201":{"line":3456,"offset":605160,"length":207,"previous":"M21-GAP-00200","next":"M21-GAP-00202"},"M21-GAP-00202":{"line":3457,"offset":605367,"length":207,"previous":"M21-GAP-00201","next":"M21-GAP-00203"},"M21-GAP-00203":{"line":3458,"offset":605574,"length":207,"previous":"M21-GAP-00202","next":"M21-GAP-00204"},"M21-GAP-00204":{"line":3459,"offset":605781,"length":207,"previous":"M21-GAP-00203","next":"M21-GAP-00205"},"M21-GAP-00205":{"line":3460,"offset":605988,"length":207,"previous":"M21-GAP-00204","next":"M21-GAP-00206"},"M21-GAP-00206":{"line":3461,"offset":606195,"length":207,"previous":"M21-GAP-00205","next":"M21-GAP-00207"},"M21-GAP-00207":{"line":3462,"offset":606402,"length":207,"previous":"M21-GAP-00206","next":"M21-GAP-00208"},"M21-GAP-00208":{"line":3463,"offset":606609,"length":196,"previous":"M21-GAP-00207","next":"M21-GAP-00209"},"M21-GAP-00209":{"line":3464,"offset":606805,"length":196,"previous":"M21-GAP-00208","next":"M21-GAP-00210"},"M21-GAP-00210":{"line":3465,"offset":607001,"length":196,"previous":"M21-GAP-00209","next":"M21-GAP-00211"},"M21-GAP-00211":{"line":3466,"offset":607197,"length":196,"previous":"M21-GAP-00210","next":"M21-GAP-00212"},"M21-GAP-00212":{"line":3467,"offset":607393,"length":196,"previous":"M21-GAP-00211","next":"M21-GAP-00213"},"M21-GAP-00213":{"line":3468,"offset":607589,"length":196,"previous":"M21-GAP-00212","next":"M21-GAP-00214"},"M21-GAP-00214":{"line":3469,"offset":607785,"length":196,"previous":"M21-GAP-00213","next":"M21-GAP-00215"},"M21-GAP-00215":{"line":3470,"offset":607981,"length":196,"previous":"M21-GAP-00214","next":"M21-GAP-00216"},"M21-GAP-00216":{"line":3471,"offset":608177,"length":196,"previous":"M21-GAP-00215","next":"M21-GAP-00217"},"M21-GAP-00217":{"line":3472,"offset":608373,"length":206,"previous":"M21-GAP-00216","next":"M21-GAP-00218"},"M21-GAP-00218":{"line":3473,"offset":608579,"length":206,"previous":"M21-GAP-00217","next":"M21-GAP-00219"},"M21-GAP-00219":{"line":3474,"offset":608785,"length":206,"previous":"M21-GAP-00218","next":"M21-GAP-00220"},"M21-GAP-00220":{"line":3475,"offset":608991,"length":206,"previous":"M21-GAP-00219","next":"M21-GAP-00221"},"M21-GAP-00221":{"line":3476,"offset":609197,"length":206,"previous":"M21-GAP-00220","next":"M21-GAP-00222"},"M21-GAP-00222":{"line":3477,"offset":609403,"length":206,"previous":"M21-GAP-00221","next":"M21-GAP-00223"},"M21-GAP-00223":{"line":3478,"offset":609609,"length":206,"previous":"M21-GAP-00222","next":"M21-GAP-00224"},"M21-GAP-00224":{"line":3479,"offset":609815,"length":206,"previous":"M21-GAP-00223","next":"M21-GAP-00225"},"M21-GAP-00225":{"line":3480,"offset":610021,"length":206,"previous":"M21-GAP-00224","next":"M21-GAP-00226"},"M21-GAP-00226":{"line":3481,"offset":610227,"length":206,"previous":"M21-GAP-00225","next":"M21-GAP-00227"},"M21-GAP-00227":{"line":3482,"offset":610433,"length":195,"previous":"M21-GAP-00226","next":"M21-GAP-00228"},"M21-GAP-00228":{"line":3483,"offset":610628,"length":195,"previous":"M21-GAP-00227","next":"M21-GAP-00229"},"M21-GAP-00229":{"line":3484,"offset":610823,"length":195,"previous":"M21-GAP-00228","next":"M21-GAP-00230"},"M21-GAP-00230":{"line":3485,"offset":611018,"length":195,"previous":"M21-GAP-00229","next":"M21-GAP-00231"},"M21-GAP-00231":{"line":3486,"offset":611213,"length":195,"previous":"M21-GAP-00230","next":"M21-GAP-00232"},"M21-GAP-00232":{"line":3487,"offset":611408,"length":195,"previous":"M21-GAP-00231","next":"M21-GAP-00233"},"M21-GAP-00233":{"line":3488,"offset":611603,"length":195,"previous":"M21-GAP-00232","next":"M21-GAP-00234"},"M21-GAP-00234":{"line":3489,"offset":611798,"length":195,"previous":"M21-GAP-00233","next":"M21-GAP-00235"},"M21-GAP-00235":{"line":3490,"offset":611993,"length":195,"previous":"M21-GAP-00234","next":"M21-GAP-00236"},"M21-GAP-00236":{"line":3491,"offset":612188,"length":195,"previous":"M21-GAP-00235","next":"M21-GAP-00237"},"M21-GAP-00237":{"line":3492,"offset":612383,"length":188,"previous":"M21-GAP-00236","next":"M21-GAP-00238"},"M21-GAP-00238":{"line":3493,"offset":612571,"length":188,"previous":"M21-GAP-00237","next":"M21-GAP-00239"},"M21-GAP-00239":{"line":3494,"offset":612759,"length":188,"previous":"M21-GAP-00238","next":"M21-GAP-00240"},"M21-GAP-00240":{"line":3495,"offset":612947,"length":192,"previous":"M21-GAP-00239","next":"M21-GAP-00241"},"M21-GAP-00241":{"line":3496,"offset":613139,"length":199,"previous":"M21-GAP-00240","next":"M21-GAP-00242"},"M21-GAP-00242":{"line":3497,"offset":613338,"length":199,"previous":"M21-GAP-00241","next":"M21-GAP-00243"},"M21-GAP-00243":{"line":3498,"offset":613537,"length":199,"previous":"M21-GAP-00242","next":"M21-GAP-00244"},"M21-GAP-00244":{"line":3499,"offset":613736,"length":199,"previous":"M21-GAP-00243","next":"M21-GAP-00245"},"M21-GAP-00245":{"line":3500,"offset":613935,"length":199,"previous":"M21-GAP-00244","next":"M21-GAP-00246"},"M21-GAP-00246":{"line":3501,"offset":614134,"length":199,"previous":"M21-GAP-00245","next":"M21-GAP-00247"},"M21-GAP-00247":{"line":3502,"offset":614333,"length":199,"previous":"M21-GAP-00246","next":"M21-GAP-00248"},"M21-GAP-00248":{"line":3503,"offset":614532,"length":199,"previous":"M21-GAP-00247","next":"M21-GAP-00249"},"M21-GAP-00249":{"line":3504,"offset":614731,"length":199,"previous":"M21-GAP-00248","next":"M21-GAP-00250"},"M21-GAP-00250":{"line":3505,"offset":614930,"length":188,"previous":"M21-GAP-00249","next":"M21-GAP-00251"},"M21-GAP-00251":{"line":3506,"offset":615118,"length":188,"previous":"M21-GAP-00250","next":"M21-GAP-00252"},"M21-GAP-00252":{"line":3507,"offset":615306,"length":188,"previous":"M21-GAP-00251","next":"M21-GAP-00253"},"M21-GAP-00253":{"line":3508,"offset":615494,"length":188,"previous":"M21-GAP-00252","next":"M21-GAP-00254"},"M21-GAP-00254":{"line":3509,"offset":615682,"length":188,"previous":"M21-GAP-00253","next":"M21-GAP-00255"},"M21-GAP-00255":{"line":3510,"offset":615870,"length":188,"previous":"M21-GAP-00254","next":"M21-GAP-00256"},"M21-GAP-00256":{"line":3511,"offset":616058,"length":188,"previous":"M21-GAP-00255","next":"M21-GAP-00257"},"M21-GAP-00257":{"line":3512,"offset":616246,"length":188,"previous":"M21-GAP-00256","next":"M21-GAP-00258"},"M21-GAP-00258":{"line":3513,"offset":616434,"length":188,"previous":"M21-GAP-00257","next":"M21-GAP-00259"},"M21-GAP-00259":{"line":3514,"offset":616622,"length":176,"previous":"M21-GAP-00258","next":"M21-GAP-00260"},"M21-GAP-00260":{"line":3515,"offset":616798,"length":176,"previous":"M21-GAP-00259","next":"M21-GAP-00261"},"M21-GAP-00261":{"line":3516,"offset":616974,"length":177,"previous":"M21-GAP-00260","next":"M21-GAP-00262"},"M21-GAP-00262":{"line":3517,"offset":617151,"length":178,"previous":"M21-GAP-00261","next":"M21-GAP-00263"},"M21-GAP-00263":{"line":3518,"offset":617329,"length":178,"previous":"M21-GAP-00262","next":"M21-GAP-00264"},"M21-GAP-00264":{"line":3519,"offset":617507,"length":178,"previous":"M21-GAP-00263","next":"M21-GAP-00265"},"M21-GAP-00265":{"line":3520,"offset":617685,"length":178,"previous":"M21-GAP-00264","next":"M21-GAP-00266"},"M21-GAP-00266":{"line":3521,"offset":617863,"length":178,"previous":"M21-GAP-00265","next":"M21-GAP-00267"},"M21-GAP-00267":{"line":3522,"offset":618041,"length":178,"previous":"M21-GAP-00266","next":"M21-GAP-00268"},"M21-GAP-00268":{"line":3523,"offset":618219,"length":178,"previous":"M21-GAP-00267","next":"M21-GAP-00269"},"M21-GAP-00269":{"line":3524,"offset":618397,"length":178,"previous":"M21-GAP-00268","next":"M21-GAP-00270"},"M21-GAP-00270":{"line":3525,"offset":618575,"length":178,"previous":"M21-GAP-00269","next":"M21-GAP-00271"},"M21-GAP-00271":{"line":3526,"offset":618753,"length":178,"previous":"M21-GAP-00270","next":"M21-GAP-00272"},"M21-GAP-00272":{"line":3527,"offset":618931,"length":177,"previous":"M21-GAP-00271","next":"M21-GAP-00273"},"M21-GAP-00273":{"line":3528,"offset":619108,"length":178,"previous":"M21-GAP-00272","next":"M21-GAP-00274"},"M21-GAP-00274":{"line":3529,"offset":619286,"length":178,"previous":"M21-GAP-00273","next":"M21-GAP-00275"},"M21-GAP-00275":{"line":3530,"offset":619464,"length":178,"previous":"M21-GAP-00274","next":"M21-GAP-00276"},"M21-GAP-00276":{"line":3531,"offset":619642,"length":178,"previous":"M21-GAP-00275","next":"M21-GAP-00277"},"M21-GAP-00277":{"line":3532,"offset":619820,"length":178,"previous":"M21-GAP-00276","next":"M21-GAP-00278"},"M21-GAP-00278":{"line":3533,"offset":619998,"length":178,"previous":"M21-GAP-00277","next":"M21-GAP-00279"},"M21-GAP-00279":{"line":3534,"offset":620176,"length":177,"previous":"M21-GAP-00278","next":"M21-GAP-00280"},"M21-GAP-00280":{"line":3535,"offset":620353,"length":177,"previous":"M21-GAP-00279","next":"M21-GAP-00281"},"M21-GAP-00281":{"line":3536,"offset":620530,"length":177,"previous":"M21-GAP-00280","next":"M21-GAP-00282"},"M21-GAP-00282":{"line":3537,"offset":620707,"length":177,"previous":"M21-GAP-00281","next":"M21-GAP-00283"},"M21-GAP-00283":{"line":3538,"offset":620884,"length":177,"previous":"M21-GAP-00282","next":"M21-GAP-00284"},"M21-GAP-00284":{"line":3539,"offset":621061,"length":177,"previous":"M21-GAP-00283","next":"M21-GAP-00285"},"M21-GAP-00285":{"line":3540,"offset":621238,"length":177,"previous":"M21-GAP-00284","next":"M21-GAP-00286"},"M21-GAP-00286":{"line":3541,"offset":621415,"length":177,"previous":"M21-GAP-00285","next":"M21-GAP-00287"},"M21-GAP-00287":{"line":3542,"offset":621592,"length":176,"previous":"M21-GAP-00286","next":"M21-GAP-00288"},"M21-GAP-00288":{"line":3543,"offset":621768,"length":177,"previous":"M21-GAP-00287","next":"M21-GAP-00289"},"M21-GAP-00289":{"line":3544,"offset":621945,"length":177,"previous":"M21-GAP-00288","next":"M21-GAP-00290"},"M21-GAP-00290":{"line":3545,"offset":622122,"length":177,"previous":"M21-GAP-00289","next":"M21-GAP-00291"},"M21-GAP-00291":{"line":3546,"offset":622299,"length":177,"previous":"M21-GAP-00290","next":"M21-GAP-00292"},"M21-GAP-00292":{"line":3547,"offset":622476,"length":177,"previous":"M21-GAP-00291","next":"M21-GAP-00293"},"M21-GAP-00293":{"line":3548,"offset":622653,"length":177,"previous":"M21-GAP-00292","next":"M21-GAP-00294"},"M21-GAP-00294":{"line":3549,"offset":622830,"length":177,"previous":"M21-GAP-00293","next":"M21-GAP-00295"},"M21-GAP-00295":{"line":3550,"offset":623007,"length":177,"previous":"M21-GAP-00294","next":"M21-GAP-00296"},"M21-GAP-00296":{"line":3551,"offset":623184,"length":177,"previous":"M21-GAP-00295","next":"M21-GAP-00297"},"M21-GAP-00297":{"line":3552,"offset":623361,"length":177,"previous":"M21-GAP-00296","next":"M21-GAP-00298"},"M21-GAP-00298":{"line":3553,"offset":623538,"length":176,"previous":"M21-GAP-00297","next":"M21-GAP-00299"},"M21-GAP-00299":{"line":3554,"offset":623714,"length":177,"previous":"M21-GAP-00298","next":"M21-GAP-00300"},"M21-GAP-00300":{"line":3555,"offset":623891,"length":177,"previous":"M21-GAP-00299","next":"M21-GAP-00301"},"M21-GAP-00301":{"line":3556,"offset":624068,"length":177,"previous":"M21-GAP-00300","next":"M21-GAP-00302"},"M21-GAP-00302":{"line":3557,"offset":624245,"length":177,"previous":"M21-GAP-00301","next":"M21-GAP-00303"},"M21-GAP-00303":{"line":3558,"offset":624422,"length":177,"previous":"M21-GAP-00302","next":"M21-GAP-00304"},"M21-GAP-00304":{"line":3559,"offset":624599,"length":177,"previous":"M21-GAP-00303","next":"M21-GAP-00305"},"M21-GAP-00305":{"line":3560,"offset":624776,"length":177,"previous":"M21-GAP-00304","next":"M21-GAP-00306"},"M21-GAP-00306":{"line":3561,"offset":624953,"length":177,"previous":"M21-GAP-00305","next":"M21-GAP-00307"},"M21-GAP-00307":{"line":3562,"offset":625130,"length":177,"previous":"M21-GAP-00306","next":"M21-GAP-00308"},"M21-GAP-00308":{"line":3563,"offset":625307,"length":177,"previous":"M21-GAP-00307","next":"M21-GAP-00309"},"M21-GAP-00309":{"line":3564,"offset":625484,"length":176,"previous":"M21-GAP-00308","next":"M21-GAP-00310"},"M21-GAP-00310":{"line":3565,"offset":625660,"length":177,"previous":"M21-GAP-00309","next":"M21-GAP-00311"},"M21-GAP-00311":{"line":3566,"offset":625837,"length":177,"previous":"M21-GAP-00310","next":"M21-GAP-00312"},"M21-GAP-00312":{"line":3567,"offset":626014,"length":177,"previous":"M21-GAP-00311","next":"M21-GAP-00313"},"M21-GAP-00313":{"line":3568,"offset":626191,"length":177,"previous":"M21-GAP-00312","next":"M21-GAP-00314"},"M21-GAP-00314":{"line":3569,"offset":626368,"length":177,"previous":"M21-GAP-00313","next":"M21-GAP-00315"},"M21-GAP-00315":{"line":3570,"offset":626545,"length":177,"previous":"M21-GAP-00314","next":"M21-GAP-00316"},"M21-GAP-00316":{"line":3571,"offset":626722,"length":177,"previous":"M21-GAP-00315","next":"M21-GAP-00317"},"M21-GAP-00317":{"line":3572,"offset":626899,"length":177,"previous":"M21-GAP-00316","next":"M21-GAP-00318"},"M21-GAP-00318":{"line":3573,"offset":627076,"length":177,"previous":"M21-GAP-00317","next":"M21-GAP-00319"},"M21-GAP-00319":{"line":3574,"offset":627253,"length":177,"previous":"M21-GAP-00318","next":"M21-GAP-00320"},"M21-GAP-00320":{"line":3575,"offset":627430,"length":176,"previous":"M21-GAP-00319","next":"M21-GAP-00321"},"M21-GAP-00321":{"line":3576,"offset":627606,"length":177,"previous":"M21-GAP-00320","next":"M21-GAP-00322"},"M21-GAP-00322":{"line":3577,"offset":627783,"length":177,"previous":"M21-GAP-00321","next":"M21-GAP-00323"},"M21-GAP-00323":{"line":3578,"offset":627960,"length":177,"previous":"M21-GAP-00322","next":"M21-GAP-00324"},"M21-GAP-00324":{"line":3579,"offset":628137,"length":177,"previous":"M21-GAP-00323","next":"M21-GAP-00325"},"M21-GAP-00325":{"line":3580,"offset":628314,"length":177,"previous":"M21-GAP-00324","next":"M21-GAP-00326"},"M21-GAP-00326":{"line":3581,"offset":628491,"length":177,"previous":"M21-GAP-00325","next":"M21-GAP-00327"},"M21-GAP-00327":{"line":3582,"offset":628668,"length":177,"previous":"M21-GAP-00326","next":"M21-GAP-00328"},"M21-GAP-00328":{"line":3583,"offset":628845,"length":177,"previous":"M21-GAP-00327","next":"M21-GAP-00329"},"M21-GAP-00329":{"line":3584,"offset":629022,"length":177,"previous":"M21-GAP-00328","next":"M21-GAP-00330"},"M21-GAP-00330":{"line":3585,"offset":629199,"length":177,"previous":"M21-GAP-00329","next":"M21-GAP-00331"},"M21-GAP-00331":{"line":3586,"offset":629376,"length":176,"previous":"M21-GAP-00330","next":"M21-GAP-00332"},"M21-GAP-00332":{"line":3587,"offset":629552,"length":177,"previous":"M21-GAP-00331","next":"M21-GAP-00333"},"M21-GAP-00333":{"line":3588,"offset":629729,"length":177,"previous":"M21-GAP-00332","next":"M21-GAP-00334"},"M21-GAP-00334":{"line":3589,"offset":629906,"length":177,"previous":"M21-GAP-00333","next":"M21-GAP-00335"},"M21-GAP-00335":{"line":3590,"offset":630083,"length":177,"previous":"M21-GAP-00334","next":"M21-GAP-00336"},"M21-GAP-00336":{"line":3591,"offset":630260,"length":177,"previous":"M21-GAP-00335","next":"M21-GAP-00337"},"M21-GAP-00337":{"line":3592,"offset":630437,"length":177,"previous":"M21-GAP-00336","next":"M21-GAP-00338"},"M21-GAP-00338":{"line":3593,"offset":630614,"length":177,"previous":"M21-GAP-00337","next":"M21-GAP-00339"},"M21-GAP-00339":{"line":3594,"offset":630791,"length":177,"previous":"M21-GAP-00338","next":"M21-GAP-00340"},"M21-GAP-00340":{"line":3595,"offset":630968,"length":177,"previous":"M21-GAP-00339","next":"M21-GAP-00341"},"M21-GAP-00341":{"line":3596,"offset":631145,"length":177,"previous":"M21-GAP-00340","next":"M21-GAP-00342"},"M21-GAP-00342":{"line":3597,"offset":631322,"length":176,"previous":"M21-GAP-00341","next":"M21-GAP-00343"},"M21-GAP-00343":{"line":3598,"offset":631498,"length":177,"previous":"M21-GAP-00342","next":"M21-GAP-00344"},"M21-GAP-00344":{"line":3599,"offset":631675,"length":177,"previous":"M21-GAP-00343","next":"M21-GAP-00345"},"M21-GAP-00345":{"line":3600,"offset":631852,"length":177,"previous":"M21-GAP-00344","next":"M21-GAP-00346"},"M21-GAP-00346":{"line":3601,"offset":632029,"length":177,"previous":"M21-GAP-00345","next":"M21-GAP-00347"},"M21-GAP-00347":{"line":3602,"offset":632206,"length":177,"previous":"M21-GAP-00346","next":"M21-GAP-00348"},"M21-GAP-00348":{"line":3603,"offset":632383,"length":177,"previous":"M21-GAP-00347","next":"M21-GAP-00349"},"M21-GAP-00349":{"line":3604,"offset":632560,"length":177,"previous":"M21-GAP-00348","next":"M21-GAP-00350"},"M21-GAP-00350":{"line":3605,"offset":632737,"length":177,"previous":"M21-GAP-00349","next":"M21-GAP-00351"},"M21-GAP-00351":{"line":3606,"offset":632914,"length":177,"previous":"M21-GAP-00350","next":"M21-GAP-00352"},"M21-GAP-00352":{"line":3607,"offset":633091,"length":177,"previous":"M21-GAP-00351","next":"M21-GAP-00353"},"M21-GAP-00353":{"line":3608,"offset":633268,"length":176,"previous":"M21-GAP-00352","next":"M21-GAP-00354"},"M21-GAP-00354":{"line":3609,"offset":633444,"length":177,"previous":"M21-GAP-00353","next":"M21-GAP-00355"},"M21-GAP-00355":{"line":3610,"offset":633621,"length":177,"previous":"M21-GAP-00354","next":"M21-GAP-00356"},"M21-GAP-00356":{"line":3611,"offset":633798,"length":177,"previous":"M21-GAP-00355","next":"M21-GAP-00357"},"M21-GAP-00357":{"line":3612,"offset":633975,"length":177,"previous":"M21-GAP-00356","next":"M21-GAP-00358"},"M21-GAP-00358":{"line":3613,"offset":634152,"length":177,"previous":"M21-GAP-00357","next":"M21-GAP-00359"},"M21-GAP-00359":{"line":3614,"offset":634329,"length":177,"previous":"M21-GAP-00358","next":"M21-GAP-00360"},"M21-GAP-00360":{"line":3615,"offset":634506,"length":177,"previous":"M21-GAP-00359","next":"M21-GAP-00361"},"M21-GAP-00361":{"line":3616,"offset":634683,"length":177,"previous":"M21-GAP-00360","next":"M21-GAP-00362"},"M21-GAP-00362":{"line":3617,"offset":634860,"length":177,"previous":"M21-GAP-00361","next":"M21-GAP-00363"},"M21-GAP-00363":{"line":3618,"offset":635037,"length":177,"previous":"M21-GAP-00362","next":"M21-GAP-00364"},"M21-GAP-00364":{"line":3619,"offset":635214,"length":176,"previous":"M21-GAP-00363","next":"M21-GAP-00365"},"M21-GAP-00365":{"line":3620,"offset":635390,"length":177,"previous":"M21-GAP-00364","next":"M21-GAP-00366"},"M21-GAP-00366":{"line":3621,"offset":635567,"length":177,"previous":"M21-GAP-00365","next":"M21-GAP-00367"},"M21-GAP-00367":{"line":3622,"offset":635744,"length":177,"previous":"M21-GAP-00366","next":"M21-GAP-00368"},"M21-GAP-00368":{"line":3623,"offset":635921,"length":177,"previous":"M21-GAP-00367","next":"M21-GAP-00369"},"M21-GAP-00369":{"line":3624,"offset":636098,"length":177,"previous":"M21-GAP-00368","next":"M21-GAP-00370"},"M21-GAP-00370":{"line":3625,"offset":636275,"length":177,"previous":"M21-GAP-00369","next":"M21-GAP-00371"},"M21-GAP-00371":{"line":3626,"offset":636452,"length":177,"previous":"M21-GAP-00370","next":"M21-GAP-00372"},"M21-GAP-00372":{"line":3627,"offset":636629,"length":177,"previous":"M21-GAP-00371","next":"M21-GAP-00373"},"M21-GAP-00373":{"line":3628,"offset":636806,"length":177,"previous":"M21-GAP-00372","next":"M21-GAP-00374"},"M21-GAP-00374":{"line":3629,"offset":636983,"length":177,"previous":"M21-GAP-00373","next":"M21-GAP-00375"},"M21-GAP-00375":{"line":3630,"offset":637160,"length":185,"previous":"M21-GAP-00374","next":"M21-GAP-00376"},"M21-GAP-00376":{"line":3631,"offset":637345,"length":185,"previous":"M21-GAP-00375","next":"M21-GAP-00377"},"M21-GAP-00377":{"line":3632,"offset":637530,"length":186,"previous":"M21-GAP-00376","next":"M21-GAP-00378"},"M21-GAP-00378":{"line":3633,"offset":637716,"length":186,"previous":"M21-GAP-00377","next":"M21-GAP-00379"},"M21-GAP-00379":{"line":3634,"offset":637902,"length":186,"previous":"M21-GAP-00378","next":"M21-GAP-00380"},"M21-GAP-00380":{"line":3635,"offset":638088,"length":186,"previous":"M21-GAP-00379","next":"M21-GAP-00381"},"M21-GAP-00381":{"line":3636,"offset":638274,"length":186,"previous":"M21-GAP-00380","next":"M21-GAP-00382"},"M21-GAP-00382":{"line":3637,"offset":638460,"length":186,"previous":"M21-GAP-00381","next":"M21-GAP-00383"},"M21-GAP-00383":{"line":3638,"offset":638646,"length":186,"previous":"M21-GAP-00382","next":"M21-GAP-00384"},"M21-GAP-00384":{"line":3639,"offset":638832,"length":186,"previous":"M21-GAP-00383","next":"M21-GAP-00385"},"M21-GAP-00385":{"line":3640,"offset":639018,"length":186,"previous":"M21-GAP-00384","next":"M21-GAP-00386"},"M21-GAP-00386":{"line":3641,"offset":639204,"length":186,"previous":"M21-GAP-00385","next":"M21-GAP-00387"},"M21-GAP-00387":{"line":3642,"offset":639390,"length":185,"previous":"M21-GAP-00386","next":"M21-GAP-00388"},"M21-GAP-00388":{"line":3643,"offset":639575,"length":186,"previous":"M21-GAP-00387","next":"M21-GAP-00389"},"M21-GAP-00389":{"line":3644,"offset":639761,"length":186,"previous":"M21-GAP-00388","next":"M21-GAP-00390"},"M21-GAP-00390":{"line":3645,"offset":639947,"length":186,"previous":"M21-GAP-00389","next":"M21-GAP-00391"},"M21-GAP-00391":{"line":3646,"offset":640133,"length":186,"previous":"M21-GAP-00390","next":"M21-GAP-00392"},"M21-GAP-00392":{"line":3647,"offset":640319,"length":186,"previous":"M21-GAP-00391","next":"M21-GAP-00393"},"M21-GAP-00393":{"line":3648,"offset":640505,"length":186,"previous":"M21-GAP-00392","next":"M21-GAP-00394"},"M21-GAP-00394":{"line":3649,"offset":640691,"length":186,"previous":"M21-GAP-00393","next":"M21-GAP-00395"},"M21-GAP-00395":{"line":3650,"offset":640877,"length":186,"previous":"M21-GAP-00394","next":"M21-GAP-00396"},"M21-GAP-00396":{"line":3651,"offset":641063,"length":186,"previous":"M21-GAP-00395","next":"M21-GAP-00397"},"M21-GAP-00397":{"line":3652,"offset":641249,"length":186,"previous":"M21-GAP-00396","next":"M21-GAP-00398"},"M21-GAP-00398":{"line":3653,"offset":641435,"length":185,"previous":"M21-GAP-00397","next":"M21-GAP-00399"},"M21-GAP-00399":{"line":3654,"offset":641620,"length":186,"previous":"M21-GAP-00398","next":"M21-GAP-00400"},"M21-GAP-00400":{"line":3655,"offset":641806,"length":186,"previous":"M21-GAP-00399","next":"M21-GAP-00401"},"M21-GAP-00401":{"line":3656,"offset":641992,"length":186,"previous":"M21-GAP-00400","next":"M21-GAP-00402"},"M21-GAP-00402":{"line":3657,"offset":642178,"length":186,"previous":"M21-GAP-00401","next":"M21-GAP-00403"},"M21-GAP-00403":{"line":3658,"offset":642364,"length":186,"previous":"M21-GAP-00402","next":"M21-GAP-00404"},"M21-GAP-00404":{"line":3659,"offset":642550,"length":186,"previous":"M21-GAP-00403","next":"M21-GAP-00405"},"M21-GAP-00405":{"line":3660,"offset":642736,"length":186,"previous":"M21-GAP-00404","next":"M21-GAP-00406"},"M21-GAP-00406":{"line":3661,"offset":642922,"length":185,"previous":"M21-GAP-00405","next":"M21-GAP-00407"},"M21-GAP-00407":{"line":3662,"offset":643107,"length":185,"previous":"M21-GAP-00406","next":"M21-GAP-00408"},"M21-GAP-00408":{"line":3663,"offset":643292,"length":185,"previous":"M21-GAP-00407","next":"M21-GAP-00409"},"M21-GAP-00409":{"line":3664,"offset":643477,"length":185,"previous":"M21-GAP-00408","next":"M21-GAP-00410"},"M21-GAP-00410":{"line":3665,"offset":643662,"length":185,"previous":"M21-GAP-00409","next":"M21-GAP-00411"},"M21-GAP-00411":{"line":3666,"offset":643847,"length":185,"previous":"M21-GAP-00410","next":"M21-GAP-00412"},"M21-GAP-00412":{"line":3667,"offset":644032,"length":176,"previous":"M21-GAP-00411","next":"M21-GAP-00413"},"M21-GAP-00413":{"line":3668,"offset":644208,"length":176,"previous":"M21-GAP-00412","next":"M21-GAP-00414"},"M21-GAP-00414":{"line":3669,"offset":644384,"length":176,"previous":"M21-GAP-00413","next":"M21-GAP-00415"},"M21-GAP-00415":{"line":3670,"offset":644560,"length":176,"previous":"M21-GAP-00414","next":"M21-GAP-00416"},"M21-GAP-00416":{"line":3671,"offset":644736,"length":176,"previous":"M21-GAP-00415","next":"M21-GAP-00417"},"M21-GAP-00417":{"line":3672,"offset":644912,"length":175,"previous":"M21-GAP-00416","next":"M21-GAP-00418"},"M21-GAP-00418":{"line":3673,"offset":645087,"length":175,"previous":"M21-GAP-00417","next":"M21-GAP-00419"},"M21-GAP-00419":{"line":3674,"offset":645262,"length":176,"previous":"M21-GAP-00418","next":"M21-GAP-00420"},"M21-GAP-00420":{"line":3675,"offset":645438,"length":176,"previous":"M21-GAP-00419","next":"M21-GAP-00421"},"M21-GAP-00421":{"line":3676,"offset":645614,"length":176,"previous":"M21-GAP-00420","next":"M21-GAP-00422"},"M21-GAP-00422":{"line":3677,"offset":645790,"length":176,"previous":"M21-GAP-00421","next":"M21-GAP-00423"},"M21-GAP-00423":{"line":3678,"offset":645966,"length":176,"previous":"M21-GAP-00422","next":"M21-GAP-00424"},"M21-GAP-00424":{"line":3679,"offset":646142,"length":176,"previous":"M21-GAP-00423","next":"M21-GAP-00425"},"M21-GAP-00425":{"line":3680,"offset":646318,"length":176,"previous":"M21-GAP-00424","next":"M21-GAP-00426"},"M21-GAP-00426":{"line":3681,"offset":646494,"length":176,"previous":"M21-GAP-00425","next":"M21-GAP-00427"},"M21-GAP-00427":{"line":3682,"offset":646670,"length":176,"previous":"M21-GAP-00426","next":"M21-GAP-00428"},"M21-GAP-00428":{"line":3683,"offset":646846,"length":176,"previous":"M21-GAP-00427","next":"M21-GAP-00429"},"M21-GAP-00429":{"line":3684,"offset":647022,"length":175,"previous":"M21-GAP-00428","next":"M21-GAP-00430"},"M21-GAP-00430":{"line":3685,"offset":647197,"length":176,"previous":"M21-GAP-00429","next":"M21-GAP-00431"},"M21-GAP-00431":{"line":3686,"offset":647373,"length":176,"previous":"M21-GAP-00430","next":"M21-GAP-00432"},"M21-GAP-00432":{"line":3687,"offset":647549,"length":176,"previous":"M21-GAP-00431","next":"M21-GAP-00433"},"M21-GAP-00433":{"line":3688,"offset":647725,"length":176,"previous":"M21-GAP-00432","next":"M21-GAP-00434"},"M21-GAP-00434":{"line":3689,"offset":647901,"length":176,"previous":"M21-GAP-00433","next":"M21-GAP-00435"},"M21-GAP-00435":{"line":3690,"offset":648077,"length":176,"previous":"M21-GAP-00434","next":"M21-GAP-00436"},"M21-GAP-00436":{"line":3691,"offset":648253,"length":176,"previous":"M21-GAP-00435","next":"M21-GAP-00437"},"M21-GAP-00437":{"line":3692,"offset":648429,"length":176,"previous":"M21-GAP-00436","next":"M21-GAP-00438"},"M21-GAP-00438":{"line":3693,"offset":648605,"length":176,"previous":"M21-GAP-00437","next":"M21-GAP-00439"},"M21-GAP-00439":{"line":3694,"offset":648781,"length":176,"previous":"M21-GAP-00438","next":"M21-GAP-00440"},"M21-GAP-00440":{"line":3695,"offset":648957,"length":175,"previous":"M21-GAP-00439","next":"M21-GAP-00441"},"M21-GAP-00441":{"line":3696,"offset":649132,"length":176,"previous":"M21-GAP-00440","next":"M21-GAP-00442"},"M21-GAP-00442":{"line":3697,"offset":649308,"length":176,"previous":"M21-GAP-00441","next":"M21-GAP-00443"},"M21-GAP-00443":{"line":3698,"offset":649484,"length":176,"previous":"M21-GAP-00442","next":"M21-GAP-00444"},"M21-GAP-00444":{"line":3699,"offset":649660,"length":176,"previous":"M21-GAP-00443","next":"M21-GAP-00445"},"M21-GAP-00445":{"line":3700,"offset":649836,"length":176,"previous":"M21-GAP-00444","next":"M21-GAP-00446"},"M21-GAP-00446":{"line":3701,"offset":650012,"length":176,"previous":"M21-GAP-00445","next":"M21-GAP-00447"},"M21-GAP-00447":{"line":3702,"offset":650188,"length":176,"previous":"M21-GAP-00446","next":"M21-GAP-00448"},"M21-GAP-00448":{"line":3703,"offset":650364,"length":176,"previous":"M21-GAP-00447","next":"M21-GAP-00449"},"M21-GAP-00449":{"line":3704,"offset":650540,"length":176,"previous":"M21-GAP-00448","next":"M21-GAP-00450"},"M21-GAP-00450":{"line":3705,"offset":650716,"length":176,"previous":"M21-GAP-00449","next":"M21-GAP-00451"},"M21-GAP-00451":{"line":3706,"offset":650892,"length":175,"previous":"M21-GAP-00450","next":"M21-GAP-00452"},"M21-GAP-00452":{"line":3707,"offset":651067,"length":176,"previous":"M21-GAP-00451","next":"M21-GAP-00453"},"M21-GAP-00453":{"line":3708,"offset":651243,"length":176,"previous":"M21-GAP-00452","next":"M21-GAP-00454"},"M21-GAP-00454":{"line":3709,"offset":651419,"length":176,"previous":"M21-GAP-00453","next":"M21-GAP-00455"},"M21-GAP-00455":{"line":3710,"offset":651595,"length":176,"previous":"M21-GAP-00454","next":"M21-GAP-00456"},"M21-GAP-00456":{"line":3711,"offset":651771,"length":176,"previous":"M21-GAP-00455","next":"M21-GAP-00457"},"M21-GAP-00457":{"line":3712,"offset":651947,"length":176,"previous":"M21-GAP-00456","next":"M21-GAP-00458"},"M21-GAP-00458":{"line":3713,"offset":652123,"length":176,"previous":"M21-GAP-00457","next":"M21-GAP-00459"},"M21-GAP-00459":{"line":3714,"offset":652299,"length":176,"previous":"M21-GAP-00458","next":"M21-GAP-00460"},"M21-GAP-00460":{"line":3715,"offset":652475,"length":176,"previous":"M21-GAP-00459","next":"M21-GAP-00461"},"M21-GAP-00461":{"line":3716,"offset":652651,"length":176,"previous":"M21-GAP-00460","next":"M21-GAP-00462"},"M21-GAP-00462":{"line":3717,"offset":652827,"length":175,"previous":"M21-GAP-00461","next":"M21-GAP-00463"},"M21-GAP-00463":{"line":3718,"offset":653002,"length":176,"previous":"M21-GAP-00462","next":"M21-GAP-00464"},"M21-GAP-00464":{"line":3719,"offset":653178,"length":176,"previous":"M21-GAP-00463","next":"M21-GAP-00465"},"M21-GAP-00465":{"line":3720,"offset":653354,"length":175,"previous":"M21-GAP-00464","next":"M21-GAP-00466"},"M21-GAP-00466":{"line":3721,"offset":653529,"length":175,"previous":"M21-GAP-00465","next":"M21-GAP-00467"},"M21-GAP-00467":{"line":3722,"offset":653704,"length":175,"previous":"M21-GAP-00466","next":"M21-GAP-00468"},"M21-GAP-00468":{"line":3723,"offset":653879,"length":175,"previous":"M21-GAP-00467","next":"M21-GAP-00469"},"M21-GAP-00469":{"line":3724,"offset":654054,"length":182,"previous":"M21-GAP-00468","next":"M21-GAP-00470"},"M21-GAP-00470":{"line":3725,"offset":654236,"length":182,"previous":"M21-GAP-00469","next":"M21-GAP-00471"},"M21-GAP-00471":{"line":3726,"offset":654418,"length":183,"previous":"M21-GAP-00470","next":"M21-GAP-00472"},"M21-GAP-00472":{"line":3727,"offset":654601,"length":183,"previous":"M21-GAP-00471","next":"M21-GAP-00473"},"M21-GAP-00473":{"line":3728,"offset":654784,"length":183,"previous":"M21-GAP-00472","next":"M21-GAP-00474"},"M21-GAP-00474":{"line":3729,"offset":654967,"length":183,"previous":"M21-GAP-00473","next":"M21-GAP-00475"},"M21-GAP-00475":{"line":3730,"offset":655150,"length":183,"previous":"M21-GAP-00474","next":"M21-GAP-00476"},"M21-GAP-00476":{"line":3731,"offset":655333,"length":183,"previous":"M21-GAP-00475","next":"M21-GAP-00477"},"M21-GAP-00477":{"line":3732,"offset":655516,"length":183,"previous":"M21-GAP-00476","next":"M21-GAP-00478"},"M21-GAP-00478":{"line":3733,"offset":655699,"length":183,"previous":"M21-GAP-00477","next":"M21-GAP-00479"},"M21-GAP-00479":{"line":3734,"offset":655882,"length":183,"previous":"M21-GAP-00478","next":"M21-GAP-00480"},"M21-GAP-00480":{"line":3735,"offset":656065,"length":183,"previous":"M21-GAP-00479","next":"M21-GAP-00481"},"M21-GAP-00481":{"line":3736,"offset":656248,"length":182,"previous":"M21-GAP-00480","next":"M21-GAP-00482"},"M21-GAP-00482":{"line":3737,"offset":656430,"length":183,"previous":"M21-GAP-00481","next":"M21-GAP-00483"},"M21-GAP-00483":{"line":3738,"offset":656613,"length":183,"previous":"M21-GAP-00482","next":"M21-GAP-00484"},"M21-GAP-00484":{"line":3739,"offset":656796,"length":183,"previous":"M21-GAP-00483","next":"M21-GAP-00485"},"M21-GAP-00485":{"line":3740,"offset":656979,"length":183,"previous":"M21-GAP-00484","next":"M21-GAP-00486"},"M21-GAP-00486":{"line":3741,"offset":657162,"length":183,"previous":"M21-GAP-00485","next":"M21-GAP-00487"},"M21-GAP-00487":{"line":3742,"offset":657345,"length":183,"previous":"M21-GAP-00486","next":"M21-GAP-00488"},"M21-GAP-00488":{"line":3743,"offset":657528,"length":183,"previous":"M21-GAP-00487","next":"M21-GAP-00489"},"M21-GAP-00489":{"line":3744,"offset":657711,"length":183,"previous":"M21-GAP-00488","next":"M21-GAP-00490"},"M21-GAP-00490":{"line":3745,"offset":657894,"length":183,"previous":"M21-GAP-00489","next":"M21-GAP-00491"},"M21-GAP-00491":{"line":3746,"offset":658077,"length":183,"previous":"M21-GAP-00490","next":"M21-GAP-00492"},"M21-GAP-00492":{"line":3747,"offset":658260,"length":182,"previous":"M21-GAP-00491","next":"M21-GAP-00493"},"M21-GAP-00493":{"line":3748,"offset":658442,"length":182,"previous":"M21-GAP-00492","next":"M21-GAP-00494"},"M21-GAP-00494":{"line":3749,"offset":658624,"length":182,"previous":"M21-GAP-00493","next":"M21-GAP-00495"},"M21-GAP-00495":{"line":3750,"offset":658806,"length":182,"previous":"M21-GAP-00494","next":"M21-GAP-00496"},"M21-GAP-00496":{"line":3751,"offset":658988,"length":182,"previous":"M21-GAP-00495","next":"M21-GAP-00497"},"M21-GAP-00497":{"line":3752,"offset":659170,"length":182,"previous":"M21-GAP-00496","next":"M21-GAP-00498"},"M21-GAP-00498":{"line":3753,"offset":659352,"length":182,"previous":"M21-GAP-00497","next":"M21-GAP-00499"},"M21-GAP-00499":{"line":3754,"offset":659534,"length":194,"previous":"M21-GAP-00498","next":"M21-GAP-00500"},"M21-GAP-00500":{"line":3755,"offset":659728,"length":194,"previous":"M21-GAP-00499","next":"M21-GAP-00501"},"M21-GAP-00501":{"line":3756,"offset":659922,"length":194,"previous":"M21-GAP-00500","next":"M21-GAP-00502"},"M21-GAP-00502":{"line":3757,"offset":660116,"length":194,"previous":"M21-GAP-00501","next":"M21-GAP-00503"},"M21-GAP-00503":{"line":3758,"offset":660310,"length":184,"previous":"M21-GAP-00502","next":"M21-GAP-00504"},"M21-GAP-00504":{"line":3759,"offset":660494,"length":184,"previous":"M21-GAP-00503","next":"M21-GAP-00505"},"M21-GAP-00505":{"line":3760,"offset":660678,"length":185,"previous":"M21-GAP-00504","next":"M21-GAP-00506"},"M21-GAP-00506":{"line":3761,"offset":660863,"length":185,"previous":"M21-GAP-00505","next":"M21-GAP-00507"},"M21-GAP-00507":{"line":3762,"offset":661048,"length":185,"previous":"M21-GAP-00506","next":"M21-GAP-00508"},"M21-GAP-00508":{"line":3763,"offset":661233,"length":185,"previous":"M21-GAP-00507","next":"M21-GAP-00509"},"M21-GAP-00509":{"line":3764,"offset":661418,"length":185,"previous":"M21-GAP-00508","next":"M21-GAP-00510"},"M21-GAP-00510":{"line":3765,"offset":661603,"length":185,"previous":"M21-GAP-00509","next":"M21-GAP-00511"},"M21-GAP-00511":{"line":3766,"offset":661788,"length":185,"previous":"M21-GAP-00510","next":"M21-GAP-00512"},"M21-GAP-00512":{"line":3767,"offset":661973,"length":185,"previous":"M21-GAP-00511","next":"M21-GAP-00513"},"M21-GAP-00513":{"line":3768,"offset":662158,"length":185,"previous":"M21-GAP-00512","next":"M21-GAP-00514"},"M21-GAP-00514":{"line":3769,"offset":662343,"length":185,"previous":"M21-GAP-00513","next":"M21-GAP-00515"},"M21-GAP-00515":{"line":3770,"offset":662528,"length":184,"previous":"M21-GAP-00514","next":"M21-GAP-00516"},"M21-GAP-00516":{"line":3771,"offset":662712,"length":185,"previous":"M21-GAP-00515","next":"M21-GAP-00517"},"M21-GAP-00517":{"line":3772,"offset":662897,"length":185,"previous":"M21-GAP-00516","next":"M21-GAP-00518"},"M21-GAP-00518":{"line":3773,"offset":663082,"length":185,"previous":"M21-GAP-00517","next":"M21-GAP-00519"},"M21-GAP-00519":{"line":3774,"offset":663267,"length":185,"previous":"M21-GAP-00518","next":"M21-GAP-00520"},"M21-GAP-00520":{"line":3775,"offset":663452,"length":185,"previous":"M21-GAP-00519","next":"M21-GAP-00521"},"M21-GAP-00521":{"line":3776,"offset":663637,"length":185,"previous":"M21-GAP-00520","next":"M21-GAP-00522"},"M21-GAP-00522":{"line":3777,"offset":663822,"length":185,"previous":"M21-GAP-00521","next":"M21-GAP-00523"},"M21-GAP-00523":{"line":3778,"offset":664007,"length":185,"previous":"M21-GAP-00522","next":"M21-GAP-00524"},"M21-GAP-00524":{"line":3779,"offset":664192,"length":185,"previous":"M21-GAP-00523","next":"M21-GAP-00525"},"M21-GAP-00525":{"line":3780,"offset":664377,"length":185,"previous":"M21-GAP-00524","next":"M21-GAP-00526"},"M21-GAP-00526":{"line":3781,"offset":664562,"length":184,"previous":"M21-GAP-00525","next":"M21-GAP-00527"},"M21-GAP-00527":{"line":3782,"offset":664746,"length":185,"previous":"M21-GAP-00526","next":"M21-GAP-00528"},"M21-GAP-00528":{"line":3783,"offset":664931,"length":185,"previous":"M21-GAP-00527","next":"M21-GAP-00529"},"M21-GAP-00529":{"line":3784,"offset":665116,"length":185,"previous":"M21-GAP-00528","next":"M21-GAP-00530"},"M21-GAP-00530":{"line":3785,"offset":665301,"length":185,"previous":"M21-GAP-00529","next":"M21-GAP-00531"},"M21-GAP-00531":{"line":3786,"offset":665486,"length":185,"previous":"M21-GAP-00530","next":"M21-GAP-00532"},"M21-GAP-00532":{"line":3787,"offset":665671,"length":185,"previous":"M21-GAP-00531","next":"M21-GAP-00533"},"M21-GAP-00533":{"line":3788,"offset":665856,"length":185,"previous":"M21-GAP-00532","next":"M21-GAP-00534"},"M21-GAP-00534":{"line":3789,"offset":666041,"length":185,"previous":"M21-GAP-00533","next":"M21-GAP-00535"},"M21-GAP-00535":{"line":3790,"offset":666226,"length":185,"previous":"M21-GAP-00534","next":"M21-GAP-00536"},"M21-GAP-00536":{"line":3791,"offset":666411,"length":185,"previous":"M21-GAP-00535","next":"M21-GAP-00537"},"M21-GAP-00537":{"line":3792,"offset":666596,"length":184,"previous":"M21-GAP-00536","next":"M21-GAP-00538"},"M21-GAP-00538":{"line":3793,"offset":666780,"length":185,"previous":"M21-GAP-00537","next":"M21-GAP-00539"},"M21-GAP-00539":{"line":3794,"offset":666965,"length":185,"previous":"M21-GAP-00538","next":"M21-GAP-00540"},"M21-GAP-00540":{"line":3795,"offset":667150,"length":185,"previous":"M21-GAP-00539","next":"M21-GAP-00541"},"M21-GAP-00541":{"line":3796,"offset":667335,"length":185,"previous":"M21-GAP-00540","next":"M21-GAP-00542"},"M21-GAP-00542":{"line":3797,"offset":667520,"length":185,"previous":"M21-GAP-00541","next":"M21-GAP-00543"},"M21-GAP-00543":{"line":3798,"offset":667705,"length":185,"previous":"M21-GAP-00542","next":"M21-GAP-00544"},"M21-GAP-00544":{"line":3799,"offset":667890,"length":185,"previous":"M21-GAP-00543","next":"M21-GAP-00545"},"M21-GAP-00545":{"line":3800,"offset":668075,"length":185,"previous":"M21-GAP-00544","next":"M21-GAP-00546"},"M21-GAP-00546":{"line":3801,"offset":668260,"length":185,"previous":"M21-GAP-00545","next":"M21-GAP-00547"},"M21-GAP-00547":{"line":3802,"offset":668445,"length":185,"previous":"M21-GAP-00546","next":"M21-GAP-00548"},"M21-GAP-00548":{"line":3803,"offset":668630,"length":184,"previous":"M21-GAP-00547","next":"M21-GAP-00549"},"M21-GAP-00549":{"line":3804,"offset":668814,"length":185,"previous":"M21-GAP-00548","next":"M21-GAP-00550"},"M21-GAP-00550":{"line":3805,"offset":668999,"length":185,"previous":"M21-GAP-00549","next":"M21-GAP-00551"},"M21-GAP-00551":{"line":3806,"offset":669184,"length":185,"previous":"M21-GAP-00550","next":"M21-GAP-00552"},"M21-GAP-00552":{"line":3807,"offset":669369,"length":185,"previous":"M21-GAP-00551","next":"M21-GAP-00553"},"M21-GAP-00553":{"line":3808,"offset":669554,"length":185,"previous":"M21-GAP-00552","next":"M21-GAP-00554"},"M21-GAP-00554":{"line":3809,"offset":669739,"length":185,"previous":"M21-GAP-00553","next":"M21-GAP-00555"},"M21-GAP-00555":{"line":3810,"offset":669924,"length":185,"previous":"M21-GAP-00554","next":"M21-GAP-00556"},"M21-GAP-00556":{"line":3811,"offset":670109,"length":185,"previous":"M21-GAP-00555","next":"M21-GAP-00557"},"M21-GAP-00557":{"line":3812,"offset":670294,"length":185,"previous":"M21-GAP-00556","next":"M21-GAP-00558"},"M21-GAP-00558":{"line":3813,"offset":670479,"length":185,"previous":"M21-GAP-00557","next":"M21-GAP-00559"},"M21-GAP-00559":{"line":3814,"offset":670664,"length":184,"previous":"M21-GAP-00558","next":"M21-GAP-00560"},"M21-GAP-00560":{"line":3815,"offset":670848,"length":185,"previous":"M21-GAP-00559","next":"M21-GAP-00561"},"M21-GAP-00561":{"line":3816,"offset":671033,"length":185,"previous":"M21-GAP-00560","next":"M21-GAP-00562"},"M21-GAP-00562":{"line":3817,"offset":671218,"length":185,"previous":"M21-GAP-00561","next":"M21-GAP-00563"},"M21-GAP-00563":{"line":3818,"offset":671403,"length":185,"previous":"M21-GAP-00562","next":"M21-GAP-00564"},"M21-GAP-00564":{"line":3819,"offset":671588,"length":185,"previous":"M21-GAP-00563","next":"M21-GAP-00565"},"M21-GAP-00565":{"line":3820,"offset":671773,"length":185,"previous":"M21-GAP-00564","next":"M21-GAP-00566"},"M21-GAP-00566":{"line":3821,"offset":671958,"length":185,"previous":"M21-GAP-00565","next":"M21-GAP-00567"},"M21-GAP-00567":{"line":3822,"offset":672143,"length":185,"previous":"M21-GAP-00566","next":"M21-GAP-00568"},"M21-GAP-00568":{"line":3823,"offset":672328,"length":185,"previous":"M21-GAP-00567","next":"M21-GAP-00569"},"M21-GAP-00569":{"line":3824,"offset":672513,"length":185,"previous":"M21-GAP-00568","next":"M21-GAP-00570"},"M21-GAP-00570":{"line":3825,"offset":672698,"length":184,"previous":"M21-GAP-00569","next":"M21-GAP-00571"},"M21-GAP-00571":{"line":3826,"offset":672882,"length":185,"previous":"M21-GAP-00570","next":"M21-GAP-00572"},"M21-GAP-00572":{"line":3827,"offset":673067,"length":185,"previous":"M21-GAP-00571","next":"M21-GAP-00573"},"M21-GAP-00573":{"line":3828,"offset":673252,"length":185,"previous":"M21-GAP-00572","next":"M21-GAP-00574"},"M21-GAP-00574":{"line":3829,"offset":673437,"length":185,"previous":"M21-GAP-00573","next":"M21-GAP-00575"},"M21-GAP-00575":{"line":3830,"offset":673622,"length":185,"previous":"M21-GAP-00574","next":"M21-GAP-00576"},"M21-GAP-00576":{"line":3831,"offset":673807,"length":185,"previous":"M21-GAP-00575","next":"M21-GAP-00577"},"M21-GAP-00577":{"line":3832,"offset":673992,"length":184,"previous":"M21-GAP-00576","next":"M21-GAP-00578"},"M21-GAP-00578":{"line":3833,"offset":674176,"length":184,"previous":"M21-GAP-00577","next":"M21-GAP-00579"},"M21-GAP-00579":{"line":3834,"offset":674360,"length":190,"previous":"M21-GAP-00578","next":"M21-GAP-00580"},"M21-GAP-00580":{"line":3835,"offset":674550,"length":190,"previous":"M21-GAP-00579","next":"M21-GAP-00581"},"M21-GAP-00581":{"line":3836,"offset":674740,"length":191,"previous":"M21-GAP-00580","next":"M21-GAP-00582"},"M21-GAP-00582":{"line":3837,"offset":674931,"length":191,"previous":"M21-GAP-00581","next":"M21-GAP-00583"},"M21-GAP-00583":{"line":3838,"offset":675122,"length":191,"previous":"M21-GAP-00582","next":"M21-GAP-00584"},"M21-GAP-00584":{"line":3839,"offset":675313,"length":191,"previous":"M21-GAP-00583","next":"M21-GAP-00585"},"M21-GAP-00585":{"line":3840,"offset":675504,"length":191,"previous":"M21-GAP-00584","next":"M21-GAP-00586"},"M21-GAP-00586":{"line":3841,"offset":675695,"length":191,"previous":"M21-GAP-00585","next":"M21-GAP-00587"},"M21-GAP-00587":{"line":3842,"offset":675886,"length":191,"previous":"M21-GAP-00586","next":"M21-GAP-00588"},"M21-GAP-00588":{"line":3843,"offset":676077,"length":191,"previous":"M21-GAP-00587","next":"M21-GAP-00589"},"M21-GAP-00589":{"line":3844,"offset":676268,"length":191,"previous":"M21-GAP-00588","next":"M21-GAP-00590"},"M21-GAP-00590":{"line":3845,"offset":676459,"length":191,"previous":"M21-GAP-00589","next":"M21-GAP-00591"},"M21-GAP-00591":{"line":3846,"offset":676650,"length":190,"previous":"M21-GAP-00590","next":"M21-GAP-00592"},"M21-GAP-00592":{"line":3847,"offset":676840,"length":191,"previous":"M21-GAP-00591","next":"M21-GAP-00593"},"M21-GAP-00593":{"line":3848,"offset":677031,"length":191,"previous":"M21-GAP-00592","next":"M21-GAP-00594"},"M21-GAP-00594":{"line":3849,"offset":677222,"length":191,"previous":"M21-GAP-00593","next":"M21-GAP-00595"},"M21-GAP-00595":{"line":3850,"offset":677413,"length":191,"previous":"M21-GAP-00594","next":"M21-GAP-00596"},"M21-GAP-00596":{"line":3851,"offset":677604,"length":190,"previous":"M21-GAP-00595","next":"M21-GAP-00597"},"M21-GAP-00597":{"line":3852,"offset":677794,"length":190,"previous":"M21-GAP-00596","next":"M21-GAP-00598"},"M21-GAP-00598":{"line":3853,"offset":677984,"length":190,"previous":"M21-GAP-00597","next":"M21-GAP-00599"},"M21-GAP-00599":{"line":3854,"offset":678174,"length":190,"previous":"M21-GAP-00598","next":"M21-GAP-00600"},"M21-GAP-00600":{"line":3855,"offset":678364,"length":190,"previous":"M21-GAP-00599","next":"M21-GAP-00601"},"M21-GAP-00601":{"line":3856,"offset":678554,"length":190,"previous":"M21-GAP-00600","next":"M21-GAP-00602"},"M21-GAP-00602":{"line":3857,"offset":678744,"length":190,"previous":"M21-GAP-00601","next":"M21-GAP-00603"},"M21-GAP-00603":{"line":3858,"offset":678934,"length":189,"previous":"M21-GAP-00602","next":"M21-GAP-00604"},"M21-GAP-00604":{"line":3859,"offset":679123,"length":177,"previous":"M21-GAP-00603","next":"M21-GAP-00605"},"M21-GAP-00605":{"line":3860,"offset":679300,"length":177,"previous":"M21-GAP-00604","next":"M21-GAP-00606"},"M21-GAP-00606":{"line":3861,"offset":679477,"length":178,"previous":"M21-GAP-00605","next":"M21-GAP-00607"},"M21-GAP-00607":{"line":3862,"offset":679655,"length":178,"previous":"M21-GAP-00606","next":"M21-GAP-00608"},"M21-GAP-00608":{"line":3863,"offset":679833,"length":178,"previous":"M21-GAP-00607","next":"M21-GAP-00609"},"M21-GAP-00609":{"line":3864,"offset":680011,"length":178,"previous":"M21-GAP-00608","next":"M21-GAP-00610"},"M21-GAP-00610":{"line":3865,"offset":680189,"length":177,"previous":"M21-GAP-00609","next":"M21-GAP-00611"},"M21-GAP-00611":{"line":3866,"offset":680366,"length":177,"previous":"M21-GAP-00610","next":"M21-GAP-00612"},"M21-GAP-00612":{"line":3867,"offset":680543,"length":177,"previous":"M21-GAP-00611","next":"M21-GAP-00613"},"M21-GAP-00613":{"line":3868,"offset":680720,"length":177,"previous":"M21-GAP-00612","next":"M21-GAP-00614"},"M21-GAP-00614":{"line":3869,"offset":680897,"length":177,"previous":"M21-GAP-00613","next":"M21-GAP-00615"},"M21-GAP-00615":{"line":3870,"offset":681074,"length":177,"previous":"M21-GAP-00614","next":"M21-GAP-00616"},"M21-GAP-00616":{"line":3871,"offset":681251,"length":177,"previous":"M21-GAP-00615","next":"M21-GAP-00617"},"M21-GAP-00617":{"line":3872,"offset":681428,"length":177,"previous":"M21-GAP-00616","next":"M21-GAP-00618"},"M21-GAP-00618":{"line":3873,"offset":681605,"length":176,"previous":"M21-GAP-00617","next":"M21-GAP-00619"},"M21-GAP-00619":{"line":3874,"offset":681781,"length":176,"previous":"M21-GAP-00618","next":"M21-GAP-00620"},"M21-GAP-00620":{"line":3875,"offset":681957,"length":177,"previous":"M21-GAP-00619","next":"M21-GAP-00621"},"M21-GAP-00621":{"line":3876,"offset":682134,"length":177,"previous":"M21-GAP-00620","next":"M21-GAP-00622"},"M21-GAP-00622":{"line":3877,"offset":682311,"length":177,"previous":"M21-GAP-00621","next":"M21-GAP-00623"},"M21-GAP-00623":{"line":3878,"offset":682488,"length":177,"previous":"M21-GAP-00622","next":"M21-GAP-00624"},"M21-GAP-00624":{"line":3879,"offset":682665,"length":177,"previous":"M21-GAP-00623","next":"M21-GAP-00625"},"M21-GAP-00625":{"line":3880,"offset":682842,"length":177,"previous":"M21-GAP-00624","next":"M21-GAP-00626"},"M21-GAP-00626":{"line":3881,"offset":683019,"length":177,"previous":"M21-GAP-00625","next":"M21-GAP-00627"},"M21-GAP-00627":{"line":3882,"offset":683196,"length":177,"previous":"M21-GAP-00626","next":"M21-GAP-00628"},"M21-GAP-00628":{"line":3883,"offset":683373,"length":177,"previous":"M21-GAP-00627","next":"M21-GAP-00629"},"M21-GAP-00629":{"line":3884,"offset":683550,"length":177,"previous":"M21-GAP-00628","next":"M21-GAP-00630"},"M21-GAP-00630":{"line":3885,"offset":683727,"length":176,"previous":"M21-GAP-00629","next":"M21-GAP-00631"},"M21-GAP-00631":{"line":3886,"offset":683903,"length":177,"previous":"M21-GAP-00630","next":"M21-GAP-00632"},"M21-GAP-00632":{"line":3887,"offset":684080,"length":177,"previous":"M21-GAP-00631","next":"M21-GAP-00633"},"M21-GAP-00633":{"line":3888,"offset":684257,"length":177,"previous":"M21-GAP-00632","next":"M21-GAP-00634"},"M21-GAP-00634":{"line":3889,"offset":684434,"length":177,"previous":"M21-GAP-00633","next":"M21-GAP-00635"},"M21-GAP-00635":{"line":3890,"offset":684611,"length":177,"previous":"M21-GAP-00634","next":"M21-GAP-00636"},"M21-GAP-00636":{"line":3891,"offset":684788,"length":177,"previous":"M21-GAP-00635","next":"M21-GAP-00637"},"M21-GAP-00637":{"line":3892,"offset":684965,"length":177,"previous":"M21-GAP-00636","next":"M21-GAP-00638"},"M21-GAP-00638":{"line":3893,"offset":685142,"length":177,"previous":"M21-GAP-00637","next":"M21-GAP-00639"},"M21-GAP-00639":{"line":3894,"offset":685319,"length":177,"previous":"M21-GAP-00638","next":"M21-GAP-00640"},"M21-GAP-00640":{"line":3895,"offset":685496,"length":177,"previous":"M21-GAP-00639","next":"M21-GAP-00641"},"M21-GAP-00641":{"line":3896,"offset":685673,"length":176,"previous":"M21-GAP-00640","next":"M21-GAP-00642"},"M21-GAP-00642":{"line":3897,"offset":685849,"length":177,"previous":"M21-GAP-00641","next":"M21-GAP-00643"},"M21-GAP-00643":{"line":3898,"offset":686026,"length":177,"previous":"M21-GAP-00642","next":"M21-GAP-00644"},"M21-GAP-00644":{"line":3899,"offset":686203,"length":177,"previous":"M21-GAP-00643","next":"M21-GAP-00645"},"M21-GAP-00645":{"line":3900,"offset":686380,"length":177,"previous":"M21-GAP-00644","next":"M21-GAP-00646"},"M21-GAP-00646":{"line":3901,"offset":686557,"length":177,"previous":"M21-GAP-00645","next":"M21-GAP-00647"},"M21-GAP-00647":{"line":3902,"offset":686734,"length":177,"previous":"M21-GAP-00646","next":"M21-GAP-00648"},"M21-GAP-00648":{"line":3903,"offset":686911,"length":177,"previous":"M21-GAP-00647","next":"M21-GAP-00649"},"M21-GAP-00649":{"line":3904,"offset":687088,"length":177,"previous":"M21-GAP-00648","next":"M21-GAP-00650"},"M21-GAP-00650":{"line":3905,"offset":687265,"length":177,"previous":"M21-GAP-00649","next":"M21-GAP-00651"},"M21-GAP-00651":{"line":3906,"offset":687442,"length":177,"previous":"M21-GAP-00650","next":"M21-GAP-00652"},"M21-GAP-00652":{"line":3907,"offset":687619,"length":176,"previous":"M21-GAP-00651","next":"M21-GAP-00653"},"M21-GAP-00653":{"line":3908,"offset":687795,"length":176,"previous":"M21-GAP-00652","next":"M21-GAP-00654"},"M21-GAP-00654":{"line":3909,"offset":687971,"length":176,"previous":"M21-GAP-00653","next":"M21-GAP-00655"},"M21-GAP-00655":{"line":3910,"offset":688147,"length":176,"previous":"M21-GAP-00654","next":"M21-GAP-00656"},"M21-GAP-00656":{"line":3911,"offset":688323,"length":176,"previous":"M21-GAP-00655","next":"M21-GAP-00657"},"M21-GAP-00657":{"line":3912,"offset":688499,"length":176,"previous":"M21-GAP-00656","next":"M21-GAP-00658"},"M21-GAP-00658":{"line":3913,"offset":688675,"length":186,"previous":"M21-GAP-00657","next":"M21-GAP-00659"},"M21-GAP-00659":{"line":3914,"offset":688861,"length":186,"previous":"M21-GAP-00658","next":"M21-GAP-00660"},"M21-GAP-00660":{"line":3915,"offset":689047,"length":186,"previous":"M21-GAP-00659","next":"M21-GAP-00661"},"M21-GAP-00661":{"line":3916,"offset":689233,"length":186,"previous":"M21-GAP-00660","next":"M21-GAP-00662"},"M21-GAP-00662":{"line":3917,"offset":689419,"length":186,"previous":"M21-GAP-00661","next":"M21-GAP-00663"},"M21-GAP-00663":{"line":3918,"offset":689605,"length":172,"previous":"M21-GAP-00662","next":"M21-GAP-00664"},"M21-GAP-00664":{"line":3919,"offset":689777,"length":172,"previous":"M21-GAP-00663","next":"M21-GAP-00665"},"M21-GAP-00665":{"line":3920,"offset":689949,"length":173,"previous":"M21-GAP-00664","next":"M21-GAP-00666"},"M21-GAP-00666":{"line":3921,"offset":690122,"length":173,"previous":"M21-GAP-00665","next":"M21-GAP-00667"},"M21-GAP-00667":{"line":3922,"offset":690295,"length":173,"previous":"M21-GAP-00666","next":"M21-GAP-00668"},"M21-GAP-00668":{"line":3923,"offset":690468,"length":173,"previous":"M21-GAP-00667","next":"M21-GAP-00669"},"M21-GAP-00669":{"line":3924,"offset":690641,"length":173,"previous":"M21-GAP-00668","next":"M21-GAP-00670"},"M21-GAP-00670":{"line":3925,"offset":690814,"length":173,"previous":"M21-GAP-00669","next":"M21-GAP-00671"},"M21-GAP-00671":{"line":3926,"offset":690987,"length":173,"previous":"M21-GAP-00670","next":"M21-GAP-00672"},"M21-GAP-00672":{"line":3927,"offset":691160,"length":173,"previous":"M21-GAP-00671","next":"M21-GAP-00673"},"M21-GAP-00673":{"line":3928,"offset":691333,"length":173,"previous":"M21-GAP-00672","next":"M21-GAP-00674"},"M21-GAP-00674":{"line":3929,"offset":691506,"length":173,"previous":"M21-GAP-00673","next":"M21-GAP-00675"},"M21-GAP-00675":{"line":3930,"offset":691679,"length":172,"previous":"M21-GAP-00674","next":"M21-GAP-00676"},"M21-GAP-00676":{"line":3931,"offset":691851,"length":173,"previous":"M21-GAP-00675","next":"M21-GAP-00677"},"M21-GAP-00677":{"line":3932,"offset":692024,"length":173,"previous":"M21-GAP-00676","next":"M21-GAP-00678"},"M21-GAP-00678":{"line":3933,"offset":692197,"length":173,"previous":"M21-GAP-00677","next":"M21-GAP-00679"},"M21-GAP-00679":{"line":3934,"offset":692370,"length":173,"previous":"M21-GAP-00678","next":"M21-GAP-00680"},"M21-GAP-00680":{"line":3935,"offset":692543,"length":173,"previous":"M21-GAP-00679","next":"M21-GAP-00681"},"M21-GAP-00681":{"line":3936,"offset":692716,"length":173,"previous":"M21-GAP-00680","next":"M21-GAP-00682"},"M21-GAP-00682":{"line":3937,"offset":692889,"length":173,"previous":"M21-GAP-00681","next":"M21-GAP-00683"},"M21-GAP-00683":{"line":3938,"offset":693062,"length":173,"previous":"M21-GAP-00682","next":"M21-GAP-00684"},"M21-GAP-00684":{"line":3939,"offset":693235,"length":173,"previous":"M21-GAP-00683","next":"M21-GAP-00685"},"M21-GAP-00685":{"line":3940,"offset":693408,"length":173,"previous":"M21-GAP-00684","next":"M21-GAP-00686"},"M21-GAP-00686":{"line":3941,"offset":693581,"length":172,"previous":"M21-GAP-00685","next":"M21-GAP-00687"},"M21-GAP-00687":{"line":3942,"offset":693753,"length":173,"previous":"M21-GAP-00686","next":"M21-GAP-00688"},"M21-GAP-00688":{"line":3943,"offset":693926,"length":173,"previous":"M21-GAP-00687","next":"M21-GAP-00689"},"M21-GAP-00689":{"line":3944,"offset":694099,"length":173,"previous":"M21-GAP-00688","next":"M21-GAP-00690"},"M21-GAP-00690":{"line":3945,"offset":694272,"length":173,"previous":"M21-GAP-00689","next":"M21-GAP-00691"},"M21-GAP-00691":{"line":3946,"offset":694445,"length":173,"previous":"M21-GAP-00690","next":"M21-GAP-00692"},"M21-GAP-00692":{"line":3947,"offset":694618,"length":173,"previous":"M21-GAP-00691","next":"M21-GAP-00693"},"M21-GAP-00693":{"line":3948,"offset":694791,"length":173,"previous":"M21-GAP-00692","next":"M21-GAP-00694"},"M21-GAP-00694":{"line":3949,"offset":694964,"length":173,"previous":"M21-GAP-00693","next":"M21-GAP-00695"},"M21-GAP-00695":{"line":3950,"offset":695137,"length":173,"previous":"M21-GAP-00694","next":"M21-GAP-00696"},"M21-GAP-00696":{"line":3951,"offset":695310,"length":173,"previous":"M21-GAP-00695","next":"M21-GAP-00697"},"M21-GAP-00697":{"line":3952,"offset":695483,"length":172,"previous":"M21-GAP-00696","next":"M21-GAP-00698"},"M21-GAP-00698":{"line":3953,"offset":695655,"length":173,"previous":"M21-GAP-00697","next":"M21-GAP-00699"},"M21-GAP-00699":{"line":3954,"offset":695828,"length":173,"previous":"M21-GAP-00698","next":"M21-GAP-00700"},"M21-GAP-00700":{"line":3955,"offset":696001,"length":173,"previous":"M21-GAP-00699","next":"M21-GAP-00701"},"M21-GAP-00701":{"line":3956,"offset":696174,"length":173,"previous":"M21-GAP-00700","next":"M21-GAP-00702"},"M21-GAP-00702":{"line":3957,"offset":696347,"length":173,"previous":"M21-GAP-00701","next":"M21-GAP-00703"},"M21-GAP-00703":{"line":3958,"offset":696520,"length":172,"previous":"M21-GAP-00702","next":"M21-GAP-00704"},"M21-GAP-00704":{"line":3959,"offset":696692,"length":172,"previous":"M21-GAP-00703","next":"M21-GAP-00705"},"M21-GAP-00705":{"line":3960,"offset":696864,"length":172,"previous":"M21-GAP-00704","next":"M21-GAP-00706"},"M21-GAP-00706":{"line":3961,"offset":697036,"length":172,"previous":"M21-GAP-00705","next":"M21-GAP-00707"},"M21-GAP-00707":{"line":3962,"offset":697208,"length":172,"previous":"M21-GAP-00706","next":"M21-GAP-00708"},"M21-GAP-00708":{"line":3963,"offset":697380,"length":173,"previous":"M21-GAP-00707","next":"M21-GAP-00709"},"M21-GAP-00709":{"line":3964,"offset":697553,"length":173,"previous":"M21-GAP-00708","next":"M21-GAP-00710"},"M21-GAP-00710":{"line":3965,"offset":697726,"length":174,"previous":"M21-GAP-00709","next":"M21-GAP-00711"},"M21-GAP-00711":{"line":3966,"offset":697900,"length":174,"previous":"M21-GAP-00710","next":"M21-GAP-00712"},"M21-GAP-00712":{"line":3967,"offset":698074,"length":174,"previous":"M21-GAP-00711","next":"M21-GAP-00713"},"M21-GAP-00713":{"line":3968,"offset":698248,"length":174,"previous":"M21-GAP-00712","next":"M21-GAP-00714"},"M21-GAP-00714":{"line":3969,"offset":698422,"length":174,"previous":"M21-GAP-00713","next":"M21-GAP-00715"},"M21-GAP-00715":{"line":3970,"offset":698596,"length":174,"previous":"M21-GAP-00714","next":"M21-GAP-00716"},"M21-GAP-00716":{"line":3971,"offset":698770,"length":174,"previous":"M21-GAP-00715","next":"M21-GAP-00717"},"M21-GAP-00717":{"line":3972,"offset":698944,"length":174,"previous":"M21-GAP-00716","next":"M21-GAP-00718"},"M21-GAP-00718":{"line":3973,"offset":699118,"length":174,"previous":"M21-GAP-00717","next":"M21-GAP-00719"},"M21-GAP-00719":{"line":3974,"offset":699292,"length":174,"previous":"M21-GAP-00718","next":"M21-GAP-00720"},"M21-GAP-00720":{"line":3975,"offset":699466,"length":173,"previous":"M21-GAP-00719","next":"M21-GAP-00721"},"M21-GAP-00721":{"line":3976,"offset":699639,"length":174,"previous":"M21-GAP-00720","next":"M21-GAP-00722"},"M21-GAP-00722":{"line":3977,"offset":699813,"length":174,"previous":"M21-GAP-00721","next":"M21-GAP-00723"},"M21-GAP-00723":{"line":3978,"offset":699987,"length":174,"previous":"M21-GAP-00722","next":"M21-GAP-00724"},"M21-GAP-00724":{"line":3979,"offset":700161,"length":174,"previous":"M21-GAP-00723","next":"M21-GAP-00725"},"M21-GAP-00725":{"line":3980,"offset":700335,"length":174,"previous":"M21-GAP-00724","next":"M21-GAP-00726"},"M21-GAP-00726":{"line":3981,"offset":700509,"length":174,"previous":"M21-GAP-00725","next":"M21-GAP-00727"},"M21-GAP-00727":{"line":3982,"offset":700683,"length":174,"previous":"M21-GAP-00726","next":"M21-GAP-00728"},"M21-GAP-00728":{"line":3983,"offset":700857,"length":174,"previous":"M21-GAP-00727","next":"M21-GAP-00729"},"M21-GAP-00729":{"line":3984,"offset":701031,"length":174,"previous":"M21-GAP-00728","next":"M21-GAP-00730"},"M21-GAP-00730":{"line":3985,"offset":701205,"length":174,"previous":"M21-GAP-00729","next":"M21-GAP-00731"},"M21-GAP-00731":{"line":3986,"offset":701379,"length":173,"previous":"M21-GAP-00730","next":"M21-GAP-00732"},"M21-GAP-00732":{"line":3987,"offset":701552,"length":174,"previous":"M21-GAP-00731","next":"M21-GAP-00733"},"M21-GAP-00733":{"line":3988,"offset":701726,"length":174,"previous":"M21-GAP-00732","next":"M21-GAP-00734"},"M21-GAP-00734":{"line":3989,"offset":701900,"length":174,"previous":"M21-GAP-00733","next":"M21-GAP-00735"},"M21-GAP-00735":{"line":3990,"offset":702074,"length":174,"previous":"M21-GAP-00734","next":"M21-GAP-00736"},"M21-GAP-00736":{"line":3991,"offset":702248,"length":173,"previous":"M21-GAP-00735","next":"M21-GAP-00737"},"M21-GAP-00737":{"line":3992,"offset":702421,"length":173,"previous":"M21-GAP-00736","next":"M21-GAP-00738"},"M21-GAP-00738":{"line":3993,"offset":702594,"length":173,"previous":"M21-GAP-00737","next":"M21-GAP-00739"},"M21-GAP-00739":{"line":3994,"offset":702767,"length":173,"previous":"M21-GAP-00738","next":"M21-GAP-00740"},"M21-GAP-00740":{"line":3995,"offset":702940,"length":173,"previous":"M21-GAP-00739","next":"M21-GAP-00741"},"M21-GAP-00741":{"line":3996,"offset":703113,"length":173,"previous":"M21-GAP-00740","next":"M21-GAP-00742"},"M21-GAP-00742":{"line":3997,"offset":703286,"length":191,"previous":"M21-GAP-00741","next":"M21-GAP-00743"},"M21-GAP-00743":{"line":3998,"offset":703477,"length":191,"previous":"M21-GAP-00742","next":"M21-GAP-00744"},"M21-GAP-00744":{"line":3999,"offset":703668,"length":192,"previous":"M21-GAP-00743","next":"M21-GAP-00745"},"M21-GAP-00745":{"line":4000,"offset":703860,"length":192,"previous":"M21-GAP-00744","next":"M21-GAP-00746"},"M21-GAP-00746":{"line":4001,"offset":704052,"length":192,"previous":"M21-GAP-00745","next":"M21-GAP-00747"},"M21-GAP-00747":{"line":4002,"offset":704244,"length":192,"previous":"M21-GAP-00746","next":"M21-GAP-00748"},"M21-GAP-00748":{"line":4003,"offset":704436,"length":191,"previous":"M21-GAP-00747","next":"M21-GAP-00749"},"M21-GAP-00749":{"line":4004,"offset":704627,"length":191,"previous":"M21-GAP-00748","next":"M21-GAP-00750"},"M21-GAP-00750":{"line":4005,"offset":704818,"length":191,"previous":"M21-GAP-00749","next":"M21-GAP-00751"},"M21-GAP-00751":{"line":4006,"offset":705009,"length":191,"previous":"M21-GAP-00750","next":"M21-GAP-00752"},"M21-GAP-00752":{"line":4007,"offset":705200,"length":191,"previous":"M21-GAP-00751","next":"M21-GAP-00753"},"M21-GAP-00753":{"line":4008,"offset":705391,"length":191,"previous":"M21-GAP-00752","next":"M21-GAP-00754"},"M21-GAP-00754":{"line":4009,"offset":705582,"length":191,"previous":"M21-GAP-00753","next":"M21-GAP-00755"},"M21-GAP-00755":{"line":4010,"offset":705773,"length":191,"previous":"M21-GAP-00754","next":"M21-GAP-00756"},"M21-GAP-00756":{"line":4011,"offset":705964,"length":195,"previous":"M21-GAP-00755","next":"M21-GAP-00757"},"M21-GAP-00757":{"line":4012,"offset":706159,"length":195,"previous":"M21-GAP-00756","next":"M21-GAP-00758"},"M21-GAP-00758":{"line":4013,"offset":706354,"length":195,"previous":"M21-GAP-00757","next":"M21-GAP-00759"},"M21-GAP-00759":{"line":4014,"offset":706549,"length":187,"previous":"M21-GAP-00758","next":"M21-GAP-00760"},"M21-GAP-00760":{"line":4015,"offset":706736,"length":187,"previous":"M21-GAP-00759","next":"M21-GAP-00761"},"M21-GAP-00761":{"line":4016,"offset":706923,"length":188,"previous":"M21-GAP-00760","next":"M21-GAP-00762"},"M21-GAP-00762":{"line":4017,"offset":707111,"length":188,"previous":"M21-GAP-00761","next":"M21-GAP-00763"},"M21-GAP-00763":{"line":4018,"offset":707299,"length":188,"previous":"M21-GAP-00762","next":"M21-GAP-00764"},"M21-GAP-00764":{"line":4019,"offset":707487,"length":188,"previous":"M21-GAP-00763","next":"M21-GAP-00765"},"M21-GAP-00765":{"line":4020,"offset":707675,"length":188,"previous":"M21-GAP-00764","next":"M21-GAP-00766"},"M21-GAP-00766":{"line":4021,"offset":707863,"length":188,"previous":"M21-GAP-00765","next":"M21-GAP-00767"},"M21-GAP-00767":{"line":4022,"offset":708051,"length":188,"previous":"M21-GAP-00766","next":"M21-GAP-00768"},"M21-GAP-00768":{"line":4023,"offset":708239,"length":188,"previous":"M21-GAP-00767","next":"M21-GAP-00769"},"M21-GAP-00769":{"line":4024,"offset":708427,"length":188,"previous":"M21-GAP-00768","next":"M21-GAP-00770"},"M21-GAP-00770":{"line":4025,"offset":708615,"length":188,"previous":"M21-GAP-00769","next":"M21-GAP-00771"},"M21-GAP-00771":{"line":4026,"offset":708803,"length":187,"previous":"M21-GAP-00770","next":"M21-GAP-00772"},"M21-GAP-00772":{"line":4027,"offset":708990,"length":188,"previous":"M21-GAP-00771","next":"M21-GAP-00773"},"M21-GAP-00773":{"line":4028,"offset":709178,"length":188,"previous":"M21-GAP-00772","next":"M21-GAP-00774"},"M21-GAP-00774":{"line":4029,"offset":709366,"length":188,"previous":"M21-GAP-00773","next":"M21-GAP-00775"},"M21-GAP-00775":{"line":4030,"offset":709554,"length":188,"previous":"M21-GAP-00774","next":"M21-GAP-00776"},"M21-GAP-00776":{"line":4031,"offset":709742,"length":188,"previous":"M21-GAP-00775","next":"M21-GAP-00777"},"M21-GAP-00777":{"line":4032,"offset":709930,"length":188,"previous":"M21-GAP-00776","next":"M21-GAP-00778"},"M21-GAP-00778":{"line":4033,"offset":710118,"length":188,"previous":"M21-GAP-00777","next":"M21-GAP-00779"},"M21-GAP-00779":{"line":4034,"offset":710306,"length":188,"previous":"M21-GAP-00778","next":"M21-GAP-00780"},"M21-GAP-00780":{"line":4035,"offset":710494,"length":188,"previous":"M21-GAP-00779","next":"M21-GAP-00781"},"M21-GAP-00781":{"line":4036,"offset":710682,"length":188,"previous":"M21-GAP-00780","next":"M21-GAP-00782"},"M21-GAP-00782":{"line":4037,"offset":710870,"length":187,"previous":"M21-GAP-00781","next":"M21-GAP-00783"},"M21-GAP-00783":{"line":4038,"offset":711057,"length":188,"previous":"M21-GAP-00782","next":"M21-GAP-00784"},"M21-GAP-00784":{"line":4039,"offset":711245,"length":188,"previous":"M21-GAP-00783","next":"M21-GAP-00785"},"M21-GAP-00785":{"line":4040,"offset":711433,"length":188,"previous":"M21-GAP-00784","next":"M21-GAP-00786"},"M21-GAP-00786":{"line":4041,"offset":711621,"length":188,"previous":"M21-GAP-00785","next":"M21-GAP-00787"},"M21-GAP-00787":{"line":4042,"offset":711809,"length":188,"previous":"M21-GAP-00786","next":"M21-GAP-00788"},"M21-GAP-00788":{"line":4043,"offset":711997,"length":188,"previous":"M21-GAP-00787","next":"M21-GAP-00789"},"M21-GAP-00789":{"line":4044,"offset":712185,"length":188,"previous":"M21-GAP-00788","next":"M21-GAP-00790"},"M21-GAP-00790":{"line":4045,"offset":712373,"length":188,"previous":"M21-GAP-00789","next":"M21-GAP-00791"},"M21-GAP-00791":{"line":4046,"offset":712561,"length":188,"previous":"M21-GAP-00790","next":"M21-GAP-00792"},"M21-GAP-00792":{"line":4047,"offset":712749,"length":188,"previous":"M21-GAP-00791","next":"M21-GAP-00793"},"M21-GAP-00793":{"line":4048,"offset":712937,"length":187,"previous":"M21-GAP-00792","next":"M21-GAP-00794"},"M21-GAP-00794":{"line":4049,"offset":713124,"length":188,"previous":"M21-GAP-00793","next":"M21-GAP-00795"},"M21-GAP-00795":{"line":4050,"offset":713312,"length":188,"previous":"M21-GAP-00794","next":"M21-GAP-00796"},"M21-GAP-00796":{"line":4051,"offset":713500,"length":188,"previous":"M21-GAP-00795","next":"M21-GAP-00797"},"M21-GAP-00797":{"line":4052,"offset":713688,"length":188,"previous":"M21-GAP-00796","next":"M21-GAP-00798"},"M21-GAP-00798":{"line":4053,"offset":713876,"length":188,"previous":"M21-GAP-00797","next":"M21-GAP-00799"},"M21-GAP-00799":{"line":4054,"offset":714064,"length":188,"previous":"M21-GAP-00798","next":"M21-GAP-00800"},"M21-GAP-00800":{"line":4055,"offset":714252,"length":188,"previous":"M21-GAP-00799","next":"M21-GAP-00801"},"M21-GAP-00801":{"line":4056,"offset":714440,"length":188,"previous":"M21-GAP-00800","next":"M21-GAP-00802"},"M21-GAP-00802":{"line":4057,"offset":714628,"length":188,"previous":"M21-GAP-00801","next":"M21-GAP-00803"},"M21-GAP-00803":{"line":4058,"offset":714816,"length":188,"previous":"M21-GAP-00802","next":"M21-GAP-00804"},"M21-GAP-00804":{"line":4059,"offset":715004,"length":187,"previous":"M21-GAP-00803","next":"M21-GAP-00805"},"M21-GAP-00805":{"line":4060,"offset":715191,"length":188,"previous":"M21-GAP-00804","next":"M21-GAP-00806"},"M21-GAP-00806":{"line":4061,"offset":715379,"length":188,"previous":"M21-GAP-00805","next":"M21-GAP-00807"},"M21-GAP-00807":{"line":4062,"offset":715567,"length":188,"previous":"M21-GAP-00806","next":"M21-GAP-00808"},"M21-GAP-00808":{"line":4063,"offset":715755,"length":188,"previous":"M21-GAP-00807","next":"M21-GAP-00809"},"M21-GAP-00809":{"line":4064,"offset":715943,"length":188,"previous":"M21-GAP-00808","next":"M21-GAP-00810"},"M21-GAP-00810":{"line":4065,"offset":716131,"length":188,"previous":"M21-GAP-00809","next":"M21-GAP-00811"},"M21-GAP-00811":{"line":4066,"offset":716319,"length":188,"previous":"M21-GAP-00810","next":"M21-GAP-00812"},"M21-GAP-00812":{"line":4067,"offset":716507,"length":188,"previous":"M21-GAP-00811","next":"M21-GAP-00813"},"M21-GAP-00813":{"line":4068,"offset":716695,"length":188,"previous":"M21-GAP-00812","next":"M21-GAP-00814"},"M21-GAP-00814":{"line":4069,"offset":716883,"length":188,"previous":"M21-GAP-00813","next":"M21-GAP-00815"},"M21-GAP-00815":{"line":4070,"offset":717071,"length":187,"previous":"M21-GAP-00814","next":"M21-GAP-00816"},"M21-GAP-00816":{"line":4071,"offset":717258,"length":188,"previous":"M21-GAP-00815","next":"M21-GAP-00817"},"M21-GAP-00817":{"line":4072,"offset":717446,"length":188,"previous":"M21-GAP-00816","next":"M21-GAP-00818"},"M21-GAP-00818":{"line":4073,"offset":717634,"length":188,"previous":"M21-GAP-00817","next":"M21-GAP-00819"},"M21-GAP-00819":{"line":4074,"offset":717822,"length":188,"previous":"M21-GAP-00818","next":"M21-GAP-00820"},"M21-GAP-00820":{"line":4075,"offset":718010,"length":188,"previous":"M21-GAP-00819","next":"M21-GAP-00821"},"M21-GAP-00821":{"line":4076,"offset":718198,"length":188,"previous":"M21-GAP-00820","next":"M21-GAP-00822"},"M21-GAP-00822":{"line":4077,"offset":718386,"length":188,"previous":"M21-GAP-00821","next":"M21-GAP-00823"},"M21-GAP-00823":{"line":4078,"offset":718574,"length":188,"previous":"M21-GAP-00822","next":"M21-GAP-00824"},"M21-GAP-00824":{"line":4079,"offset":718762,"length":187,"previous":"M21-GAP-00823","next":"M21-GAP-00825"},"M21-GAP-00825":{"line":4080,"offset":718949,"length":187,"previous":"M21-GAP-00824","next":"M21-GAP-00826"},"M21-GAP-00826":{"line":4081,"offset":719136,"length":187,"previous":"M21-GAP-00825","next":"M21-GAP-00827"},"M21-GAP-00827":{"line":4082,"offset":719323,"length":205,"previous":"M21-GAP-00826","next":"M21-GAP-00828"},"M21-GAP-00828":{"line":4083,"offset":719528,"length":205,"previous":"M21-GAP-00827","next":"M21-GAP-00829"},"M21-GAP-00829":{"line":4084,"offset":719733,"length":205,"previous":"M21-GAP-00828","next":"M21-GAP-00830"},"M21-GAP-00830":{"line":4085,"offset":719938,"length":205,"previous":"M21-GAP-00829","next":"M21-GAP-00831"},"M21-GAP-00831":{"line":4086,"offset":720143,"length":205,"previous":"M21-GAP-00830","next":"M21-GAP-00832"},"M21-GAP-00832":{"line":4087,"offset":720348,"length":205,"previous":"M21-GAP-00831","next":"M21-GAP-00833"},"M21-GAP-00833":{"line":4088,"offset":720553,"length":205,"previous":"M21-GAP-00832","next":"M21-GAP-00834"},"M21-GAP-00834":{"line":4089,"offset":720758,"length":187,"previous":"M21-GAP-00833","next":"M21-GAP-00835"},"M21-GAP-00835":{"line":4090,"offset":720945,"length":187,"previous":"M21-GAP-00834","next":"M21-GAP-00836"},"M21-GAP-00836":{"line":4091,"offset":721132,"length":187,"previous":"M21-GAP-00835","next":"M21-GAP-00837"},"M21-GAP-00837":{"line":4092,"offset":721319,"length":187,"previous":"M21-GAP-00836","next":"M21-GAP-00838"},"M21-GAP-00838":{"line":4093,"offset":721506,"length":187,"previous":"M21-GAP-00837","next":"M21-GAP-00839"},"M21-GAP-00839":{"line":4094,"offset":721693,"length":187,"previous":"M21-GAP-00838","next":"M21-GAP-00840"},"M21-GAP-00840":{"line":4095,"offset":721880,"length":187,"previous":"M21-GAP-00839","next":"M21-GAP-00841"},"M21-GAP-00841":{"line":4096,"offset":722067,"length":194,"previous":"M21-GAP-00840","next":"M21-GAP-00842"},"M21-GAP-00842":{"line":4097,"offset":722261,"length":194,"previous":"M21-GAP-00841","next":"M21-GAP-00843"},"M21-GAP-00843":{"line":4098,"offset":722455,"length":194,"previous":"M21-GAP-00842","next":"M21-GAP-00844"},"M21-GAP-00844":{"line":4099,"offset":722649,"length":194,"previous":"M21-GAP-00843","next":"M21-GAP-00845"},"M21-GAP-00845":{"line":4100,"offset":722843,"length":194,"previous":"M21-GAP-00844","next":"M21-GAP-00846"},"M21-GAP-00846":{"line":4101,"offset":723037,"length":194,"previous":"M21-GAP-00845","next":"M21-GAP-00847"},"M21-GAP-00847":{"line":4102,"offset":723231,"length":191,"previous":"M21-GAP-00846","next":"M21-GAP-00848"},"M21-GAP-00848":{"line":4103,"offset":723422,"length":191,"previous":"M21-GAP-00847","next":"M21-GAP-00849"},"M21-GAP-00849":{"line":4104,"offset":723613,"length":192,"previous":"M21-GAP-00848","next":"M21-GAP-00850"},"M21-GAP-00850":{"line":4105,"offset":723805,"length":192,"previous":"M21-GAP-00849","next":"M21-GAP-00851"},"M21-GAP-00851":{"line":4106,"offset":723997,"length":192,"previous":"M21-GAP-00850","next":"M21-GAP-00852"},"M21-GAP-00852":{"line":4107,"offset":724189,"length":192,"previous":"M21-GAP-00851","next":"M21-GAP-00853"},"M21-GAP-00853":{"line":4108,"offset":724381,"length":192,"previous":"M21-GAP-00852","next":"M21-GAP-00854"},"M21-GAP-00854":{"line":4109,"offset":724573,"length":192,"previous":"M21-GAP-00853","next":"M21-GAP-00855"},"M21-GAP-00855":{"line":4110,"offset":724765,"length":192,"previous":"M21-GAP-00854","next":"M21-GAP-00856"},"M21-GAP-00856":{"line":4111,"offset":724957,"length":192,"previous":"M21-GAP-00855","next":"M21-GAP-00857"},"M21-GAP-00857":{"line":4112,"offset":725149,"length":192,"previous":"M21-GAP-00856","next":"M21-GAP-00858"},"M21-GAP-00858":{"line":4113,"offset":725341,"length":192,"previous":"M21-GAP-00857","next":"M21-GAP-00859"},"M21-GAP-00859":{"line":4114,"offset":725533,"length":191,"previous":"M21-GAP-00858","next":"M21-GAP-00860"},"M21-GAP-00860":{"line":4115,"offset":725724,"length":192,"previous":"M21-GAP-00859","next":"M21-GAP-00861"},"M21-GAP-00861":{"line":4116,"offset":725916,"length":192,"previous":"M21-GAP-00860","next":"M21-GAP-00862"},"M21-GAP-00862":{"line":4117,"offset":726108,"length":192,"previous":"M21-GAP-00861","next":"M21-GAP-00863"},"M21-GAP-00863":{"line":4118,"offset":726300,"length":192,"previous":"M21-GAP-00862","next":"M21-GAP-00864"},"M21-GAP-00864":{"line":4119,"offset":726492,"length":192,"previous":"M21-GAP-00863","next":"M21-GAP-00865"},"M21-GAP-00865":{"line":4120,"offset":726684,"length":192,"previous":"M21-GAP-00864","next":"M21-GAP-00866"},"M21-GAP-00866":{"line":4121,"offset":726876,"length":192,"previous":"M21-GAP-00865","next":"M21-GAP-00867"},"M21-GAP-00867":{"line":4122,"offset":727068,"length":192,"previous":"M21-GAP-00866","next":"M21-GAP-00868"},"M21-GAP-00868":{"line":4123,"offset":727260,"length":192,"previous":"M21-GAP-00867","next":"M21-GAP-00869"},"M21-GAP-00869":{"line":4124,"offset":727452,"length":192,"previous":"M21-GAP-00868","next":"M21-GAP-00870"},"M21-GAP-00870":{"line":4125,"offset":727644,"length":191,"previous":"M21-GAP-00869","next":"M21-GAP-00871"},"M21-GAP-00871":{"line":4126,"offset":727835,"length":192,"previous":"M21-GAP-00870","next":"M21-GAP-00872"},"M21-GAP-00872":{"line":4127,"offset":728027,"length":192,"previous":"M21-GAP-00871","next":"M21-GAP-00873"},"M21-GAP-00873":{"line":4128,"offset":728219,"length":191,"previous":"M21-GAP-00872","next":"M21-GAP-00874"},"M21-GAP-00874":{"line":4129,"offset":728410,"length":191,"previous":"M21-GAP-00873","next":"M21-GAP-00875"},"M21-GAP-00875":{"line":4130,"offset":728601,"length":191,"previous":"M21-GAP-00874","next":"M21-GAP-00876"},"M21-GAP-00876":{"line":4131,"offset":728792,"length":191,"previous":"M21-GAP-00875","next":"M21-GAP-00877"},"M21-GAP-00877":{"line":4132,"offset":728983,"length":191,"previous":"M21-GAP-00876","next":"M21-GAP-00878"},"M21-GAP-00878":{"line":4133,"offset":729174,"length":191,"previous":"M21-GAP-00877","next":"M21-GAP-00879"},"M21-GAP-00879":{"line":4134,"offset":729365,"length":186,"previous":"M21-GAP-00878","next":"M21-GAP-00880"},"M21-GAP-00880":{"line":4135,"offset":729551,"length":186,"previous":"M21-GAP-00879","next":"M21-GAP-00881"},"M21-GAP-00881":{"line":4136,"offset":729737,"length":187,"previous":"M21-GAP-00880","next":"M21-GAP-00882"},"M21-GAP-00882":{"line":4137,"offset":729924,"length":187,"previous":"M21-GAP-00881","next":"M21-GAP-00883"},"M21-GAP-00883":{"line":4138,"offset":730111,"length":187,"previous":"M21-GAP-00882","next":"M21-GAP-00884"},"M21-GAP-00884":{"line":4139,"offset":730298,"length":187,"previous":"M21-GAP-00883","next":"M21-GAP-00885"},"M21-GAP-00885":{"line":4140,"offset":730485,"length":187,"previous":"M21-GAP-00884","next":"M21-GAP-00886"},"M21-GAP-00886":{"line":4141,"offset":730672,"length":187,"previous":"M21-GAP-00885","next":"M21-GAP-00887"},"M21-GAP-00887":{"line":4142,"offset":730859,"length":187,"previous":"M21-GAP-00886","next":"M21-GAP-00888"},"M21-GAP-00888":{"line":4143,"offset":731046,"length":187,"previous":"M21-GAP-00887","next":"M21-GAP-00889"},"M21-GAP-00889":{"line":4144,"offset":731233,"length":187,"previous":"M21-GAP-00888","next":"M21-GAP-00890"},"M21-GAP-00890":{"line":4145,"offset":731420,"length":187,"previous":"M21-GAP-00889","next":"M21-GAP-00891"},"M21-GAP-00891":{"line":4146,"offset":731607,"length":186,"previous":"M21-GAP-00890","next":"M21-GAP-00892"},"M21-GAP-00892":{"line":4147,"offset":731793,"length":187,"previous":"M21-GAP-00891","next":"M21-GAP-00893"},"M21-GAP-00893":{"line":4148,"offset":731980,"length":187,"previous":"M21-GAP-00892","next":"M21-GAP-00894"},"M21-GAP-00894":{"line":4149,"offset":732167,"length":187,"previous":"M21-GAP-00893","next":"M21-GAP-00895"},"M21-GAP-00895":{"line":4150,"offset":732354,"length":187,"previous":"M21-GAP-00894","next":"M21-GAP-00896"},"M21-GAP-00896":{"line":4151,"offset":732541,"length":187,"previous":"M21-GAP-00895","next":"M21-GAP-00897"},"M21-GAP-00897":{"line":4152,"offset":732728,"length":187,"previous":"M21-GAP-00896","next":"M21-GAP-00898"},"M21-GAP-00898":{"line":4153,"offset":732915,"length":187,"previous":"M21-GAP-00897","next":"M21-GAP-00899"},"M21-GAP-00899":{"line":4154,"offset":733102,"length":187,"previous":"M21-GAP-00898","next":"M21-GAP-00900"},"M21-GAP-00900":{"line":4155,"offset":733289,"length":187,"previous":"M21-GAP-00899","next":"M21-GAP-00901"},"M21-GAP-00901":{"line":4156,"offset":733476,"length":187,"previous":"M21-GAP-00900","next":"M21-GAP-00902"},"M21-GAP-00902":{"line":4157,"offset":733663,"length":186,"previous":"M21-GAP-00901","next":"M21-GAP-00903"},"M21-GAP-00903":{"line":4158,"offset":733849,"length":187,"previous":"M21-GAP-00902","next":"M21-GAP-00904"},"M21-GAP-00904":{"line":4159,"offset":734036,"length":187,"previous":"M21-GAP-00903","next":"M21-GAP-00905"},"M21-GAP-00905":{"line":4160,"offset":734223,"length":186,"previous":"M21-GAP-00904","next":"M21-GAP-00906"},"M21-GAP-00906":{"line":4161,"offset":734409,"length":186,"previous":"M21-GAP-00905","next":"M21-GAP-00907"},"M21-GAP-00907":{"line":4162,"offset":734595,"length":186,"previous":"M21-GAP-00906","next":"M21-GAP-00908"},"M21-GAP-00908":{"line":4163,"offset":734781,"length":186,"previous":"M21-GAP-00907","next":"M21-GAP-00909"},"M21-GAP-00909":{"line":4164,"offset":734967,"length":186,"previous":"M21-GAP-00908","next":"M21-GAP-00910"},"M21-GAP-00910":{"line":4165,"offset":735153,"length":186,"previous":"M21-GAP-00909","next":"M21-GAP-00911"},"M21-GAP-00911":{"line":4166,"offset":735339,"length":186,"previous":"M21-GAP-00910","next":"M21-GAP-00912"},"M21-GAP-00912":{"line":4167,"offset":735525,"length":186,"previous":"M21-GAP-00911","next":"M21-GAP-00913"},"M21-GAP-00913":{"line":4168,"offset":735711,"length":187,"previous":"M21-GAP-00912","next":"M21-GAP-00914"},"M21-GAP-00914":{"line":4169,"offset":735898,"length":187,"previous":"M21-GAP-00913","next":"M21-GAP-00915"},"M21-GAP-00915":{"line":4170,"offset":736085,"length":187,"previous":"M21-GAP-00914","next":"M21-GAP-00916"},"M21-GAP-00916":{"line":4171,"offset":736272,"length":187,"previous":"M21-GAP-00915","next":"M21-GAP-00917"},"M21-GAP-00917":{"line":4172,"offset":736459,"length":186,"previous":"M21-GAP-00916","next":"M21-GAP-00918"},"M21-GAP-00918":{"line":4173,"offset":736645,"length":186,"previous":"M21-GAP-00917","next":"M21-GAP-00919"},"M21-GAP-00919":{"line":4174,"offset":736831,"length":186,"previous":"M21-GAP-00918","next":"M21-GAP-00920"},"M21-GAP-00920":{"line":4175,"offset":737017,"length":186,"previous":"M21-GAP-00919","next":"M21-GAP-00921"},"M21-GAP-00921":{"line":4176,"offset":737203,"length":186,"previous":"M21-GAP-00920","next":"M21-GAP-00922"},"M21-GAP-00922":{"line":4177,"offset":737389,"length":186,"previous":"M21-GAP-00921","next":"M21-GAP-00923"},"M21-GAP-00923":{"line":4178,"offset":737575,"length":186,"previous":"M21-GAP-00922","next":"M21-GAP-00924"},"M21-GAP-00924":{"line":4179,"offset":737761,"length":186,"previous":"M21-GAP-00923","next":"M21-GAP-00925"},"M21-GAP-00925":{"line":4180,"offset":737947,"length":171,"previous":"M21-GAP-00924","next":"M21-GAP-00926"},"M21-GAP-00926":{"line":4181,"offset":738118,"length":171,"previous":"M21-GAP-00925","next":"M21-GAP-00927"},"M21-GAP-00927":{"line":4182,"offset":738289,"length":172,"previous":"M21-GAP-00926","next":"M21-GAP-00928"},"M21-GAP-00928":{"line":4183,"offset":738461,"length":172,"previous":"M21-GAP-00927","next":"M21-GAP-00929"},"M21-GAP-00929":{"line":4184,"offset":738633,"length":172,"previous":"M21-GAP-00928","next":"M21-GAP-00930"},"M21-GAP-00930":{"line":4185,"offset":738805,"length":172,"previous":"M21-GAP-00929","next":"M21-GAP-00931"},"M21-GAP-00931":{"line":4186,"offset":738977,"length":172,"previous":"M21-GAP-00930","next":"M21-GAP-00932"},"M21-GAP-00932":{"line":4187,"offset":739149,"length":172,"previous":"M21-GAP-00931","next":"M21-GAP-00933"},"M21-GAP-00933":{"line":4188,"offset":739321,"length":172,"previous":"M21-GAP-00932","next":"M21-GAP-00934"},"M21-GAP-00934":{"line":4189,"offset":739493,"length":172,"previous":"M21-GAP-00933","next":"M21-GAP-00935"},"M21-GAP-00935":{"line":4190,"offset":739665,"length":172,"previous":"M21-GAP-00934","next":"M21-GAP-00936"},"M21-GAP-00936":{"line":4191,"offset":739837,"length":172,"previous":"M21-GAP-00935","next":"M21-GAP-00937"},"M21-GAP-00937":{"line":4192,"offset":740009,"length":171,"previous":"M21-GAP-00936","next":"M21-GAP-00938"},"M21-GAP-00938":{"line":4193,"offset":740180,"length":172,"previous":"M21-GAP-00937","next":"M21-GAP-00939"},"M21-GAP-00939":{"line":4194,"offset":740352,"length":172,"previous":"M21-GAP-00938","next":"M21-GAP-00940"},"M21-GAP-00940":{"line":4195,"offset":740524,"length":172,"previous":"M21-GAP-00939","next":"M21-GAP-00941"},"M21-GAP-00941":{"line":4196,"offset":740696,"length":172,"previous":"M21-GAP-00940","next":"M21-GAP-00942"},"M21-GAP-00942":{"line":4197,"offset":740868,"length":172,"previous":"M21-GAP-00941","next":"M21-GAP-00943"},"M21-GAP-00943":{"line":4198,"offset":741040,"length":172,"previous":"M21-GAP-00942","next":"M21-GAP-00944"},"M21-GAP-00944":{"line":4199,"offset":741212,"length":172,"previous":"M21-GAP-00943","next":"M21-GAP-00945"},"M21-GAP-00945":{"line":4200,"offset":741384,"length":172,"previous":"M21-GAP-00944","next":"M21-GAP-00946"},"M21-GAP-00946":{"line":4201,"offset":741556,"length":172,"previous":"M21-GAP-00945","next":"M21-GAP-00947"},"M21-GAP-00947":{"line":4202,"offset":741728,"length":172,"previous":"M21-GAP-00946","next":"M21-GAP-00948"},"M21-GAP-00948":{"line":4203,"offset":741900,"length":171,"previous":"M21-GAP-00947","next":"M21-GAP-00949"},"M21-GAP-00949":{"line":4204,"offset":742071,"length":172,"previous":"M21-GAP-00948","next":"M21-GAP-00950"},"M21-GAP-00950":{"line":4205,"offset":742243,"length":172,"previous":"M21-GAP-00949","next":"M21-GAP-00951"},"M21-GAP-00951":{"line":4206,"offset":742415,"length":172,"previous":"M21-GAP-00950","next":"M21-GAP-00952"},"M21-GAP-00952":{"line":4207,"offset":742587,"length":172,"previous":"M21-GAP-00951","next":"M21-GAP-00953"},"M21-GAP-00953":{"line":4208,"offset":742759,"length":172,"previous":"M21-GAP-00952","next":"M21-GAP-00954"},"M21-GAP-00954":{"line":4209,"offset":742931,"length":172,"previous":"M21-GAP-00953","next":"M21-GAP-00955"},"M21-GAP-00955":{"line":4210,"offset":743103,"length":172,"previous":"M21-GAP-00954","next":"M21-GAP-00956"},"M21-GAP-00956":{"line":4211,"offset":743275,"length":172,"previous":"M21-GAP-00955","next":"M21-GAP-00957"},"M21-GAP-00957":{"line":4212,"offset":743447,"length":172,"previous":"M21-GAP-00956","next":"M21-GAP-00958"},"M21-GAP-00958":{"line":4213,"offset":743619,"length":172,"previous":"M21-GAP-00957","next":"M21-GAP-00959"},"M21-GAP-00959":{"line":4214,"offset":743791,"length":171,"previous":"M21-GAP-00958","next":"M21-GAP-00960"},"M21-GAP-00960":{"line":4215,"offset":743962,"length":172,"previous":"M21-GAP-00959","next":"M21-GAP-00961"},"M21-GAP-00961":{"line":4216,"offset":744134,"length":172,"previous":"M21-GAP-00960","next":"M21-GAP-00962"},"M21-GAP-00962":{"line":4217,"offset":744306,"length":172,"previous":"M21-GAP-00961","next":"M21-GAP-00963"},"M21-GAP-00963":{"line":4218,"offset":744478,"length":172,"previous":"M21-GAP-00962","next":"M21-GAP-00964"},"M21-GAP-00964":{"line":4219,"offset":744650,"length":172,"previous":"M21-GAP-00963","next":"M21-GAP-00965"},"M21-GAP-00965":{"line":4220,"offset":744822,"length":172,"previous":"M21-GAP-00964","next":"M21-GAP-00966"},"M21-GAP-00966":{"line":4221,"offset":744994,"length":172,"previous":"M21-GAP-00965","next":"M21-GAP-00967"},"M21-GAP-00967":{"line":4222,"offset":745166,"length":172,"previous":"M21-GAP-00966","next":"M21-GAP-00968"},"M21-GAP-00968":{"line":4223,"offset":745338,"length":172,"previous":"M21-GAP-00967","next":"M21-GAP-00969"},"M21-GAP-00969":{"line":4224,"offset":745510,"length":171,"previous":"M21-GAP-00968","next":"M21-GAP-00970"},"M21-GAP-00970":{"line":4225,"offset":745681,"length":171,"previous":"M21-GAP-00969","next":"M21-GAP-00971"},"M21-GAP-00971":{"line":4226,"offset":745852,"length":171,"previous":"M21-GAP-00970","next":"M21-GAP-00972"},"M21-GAP-00972":{"line":4227,"offset":746023,"length":171,"previous":"M21-GAP-00971","next":"M21-GAP-00973"},"M21-GAP-00973":{"line":4228,"offset":746194,"length":171,"previous":"M21-GAP-00972","next":"M21-GAP-00974"},"M21-GAP-00974":{"line":4229,"offset":746365,"length":173,"previous":"M21-GAP-00973","next":"M21-GAP-00975"},"M21-GAP-00975":{"line":4230,"offset":746538,"length":173,"previous":"M21-GAP-00974","next":"M21-GAP-00976"},"M21-GAP-00976":{"line":4231,"offset":746711,"length":174,"previous":"M21-GAP-00975","next":"M21-GAP-00977"},"M21-GAP-00977":{"line":4232,"offset":746885,"length":174,"previous":"M21-GAP-00976","next":"M21-GAP-00978"},"M21-GAP-00978":{"line":4233,"offset":747059,"length":174,"previous":"M21-GAP-00977","next":"M21-GAP-00979"},"M21-GAP-00979":{"line":4234,"offset":747233,"length":174,"previous":"M21-GAP-00978","next":"M21-GAP-00980"},"M21-GAP-00980":{"line":4235,"offset":747407,"length":174,"previous":"M21-GAP-00979","next":"M21-GAP-00981"},"M21-GAP-00981":{"line":4236,"offset":747581,"length":174,"previous":"M21-GAP-00980","next":"M21-GAP-00982"},"M21-GAP-00982":{"line":4237,"offset":747755,"length":174,"previous":"M21-GAP-00981","next":"M21-GAP-00983"},"M21-GAP-00983":{"line":4238,"offset":747929,"length":173,"previous":"M21-GAP-00982","next":"M21-GAP-00984"},"M21-GAP-00984":{"line":4239,"offset":748102,"length":173,"previous":"M21-GAP-00983","next":"M21-GAP-00985"},"M21-GAP-00985":{"line":4240,"offset":748275,"length":173,"previous":"M21-GAP-00984","next":"M21-GAP-00986"},"M21-GAP-00986":{"line":4241,"offset":748448,"length":173,"previous":"M21-GAP-00985","next":"M21-GAP-00987"},"M21-GAP-00987":{"line":4242,"offset":748621,"length":173,"previous":"M21-GAP-00986","next":"M21-GAP-00988"},"M21-GAP-00988":{"line":4243,"offset":748794,"length":173,"previous":"M21-GAP-00987","next":"M21-GAP-00989"},"M21-GAP-00989":{"line":4244,"offset":748967,"length":173,"previous":"M21-GAP-00988","next":"M21-GAP-00990"},"M21-GAP-00990":{"line":4245,"offset":749140,"length":173,"previous":"M21-GAP-00989","next":"M21-GAP-00991"},"M21-GAP-00991":{"line":4246,"offset":749313,"length":191,"previous":"M21-GAP-00990","next":"M21-GAP-00992"},"M21-GAP-00992":{"line":4247,"offset":749504,"length":191,"previous":"M21-GAP-00991","next":"M21-GAP-00993"},"M21-GAP-00993":{"line":4248,"offset":749695,"length":185,"previous":"M21-GAP-00992","next":"M21-GAP-00994"},"M21-GAP-00994":{"line":4249,"offset":749880,"length":191,"previous":"M21-GAP-00993","next":"M21-GAP-00995"},"M21-GAP-00995":{"line":4250,"offset":750071,"length":187,"previous":"M21-GAP-00994","next":"M21-GAP-00996"},"M21-GAP-00996":{"line":4251,"offset":750258,"length":196,"previous":"M21-GAP-00995","next":"M21-GAP-00997"},"M21-GAP-00997":{"line":4252,"offset":750454,"length":196,"previous":"M21-GAP-00996","next":"M21-GAP-00998"},"M21-GAP-00998":{"line":4253,"offset":750650,"length":197,"previous":"M21-GAP-00997","next":"M21-GAP-00999"},"M21-GAP-00999":{"line":4254,"offset":750847,"length":197,"previous":"M21-GAP-00998","next":"M21-GAP-01000"},"M21-GAP-01000":{"line":4255,"offset":751044,"length":196,"previous":"M21-GAP-00999","next":"M21-GAP-01001"},"M21-GAP-01001":{"line":4256,"offset":751240,"length":196,"previous":"M21-GAP-01000","next":"M21-GAP-01002"},"M21-GAP-01002":{"line":4257,"offset":751436,"length":196,"previous":"M21-GAP-01001","next":"M21-GAP-01003"},"M21-GAP-01003":{"line":4258,"offset":751632,"length":196,"previous":"M21-GAP-01002","next":"M21-GAP-01004"},"M21-GAP-01004":{"line":4259,"offset":751828,"length":196,"previous":"M21-GAP-01003","next":"M21-GAP-01005"},"M21-GAP-01005":{"line":4260,"offset":752024,"length":196,"previous":"M21-GAP-01004","next":"M21-GAP-01006"},"M21-GAP-01006":{"line":4261,"offset":752220,"length":196,"previous":"M21-GAP-01005","next":"M21-GAP-01007"},"M21-GAP-01007":{"line":4262,"offset":752416,"length":196,"previous":"M21-GAP-01006","next":"M21-GAP-01008"},"M21-GAP-01008":{"line":4263,"offset":752612,"length":180,"previous":"M21-GAP-01007","next":"M21-GAP-01009"},"M21-GAP-01009":{"line":4264,"offset":752792,"length":196,"previous":"M21-GAP-01008","next":"M21-GAP-01010"},"M21-GAP-01010":{"line":4265,"offset":752988,"length":196,"previous":"M21-GAP-01009","next":"M21-GAP-01011"},"M21-GAP-01011":{"line":4266,"offset":753184,"length":194,"previous":"M21-GAP-01010","next":"M21-GAP-01012"},"M21-GAP-01012":{"line":4267,"offset":753378,"length":194,"previous":"M21-GAP-01011","next":"M21-GAP-01013"},"M21-GAP-01013":{"line":4268,"offset":753572,"length":197,"previous":"M21-GAP-01012","next":"M21-GAP-01014"},"M21-GAP-01014":{"line":4269,"offset":753769,"length":197,"previous":"M21-GAP-01013","next":"M21-GAP-01015"},"M21-GAP-01015":{"line":4270,"offset":753966,"length":189,"previous":"M21-GAP-01014","next":"M21-GAP-01016"},"M21-GAP-01016":{"line":4271,"offset":754155,"length":189,"previous":"M21-GAP-01015","next":"M21-GAP-01017"},"M21-GAP-01017":{"line":4272,"offset":754344,"length":178,"previous":"M21-GAP-01016","next":"M21-GAP-01018"},"M21-GAP-01018":{"line":4273,"offset":754522,"length":178,"previous":"M21-GAP-01017","next":"M21-GAP-01019"},"M21-GAP-01019":{"line":4274,"offset":754700,"length":178,"previous":"M21-GAP-01018","next":"M21-GAP-01020"},"M21-GAP-01020":{"line":4275,"offset":754878,"length":178,"previous":"M21-GAP-01019","next":"M21-GAP-01021"},"M21-GAP-01021":{"line":4276,"offset":755056,"length":178,"previous":"M21-GAP-01020","next":"M21-GAP-01022"},"M21-GAP-01022":{"line":4277,"offset":755234,"length":178,"previous":"M21-GAP-01021","next":"M21-GAP-01023"},"M21-GAP-01023":{"line":4278,"offset":755412,"length":178,"previous":"M21-GAP-01022","next":"M21-GAP-01024"},"M21-GAP-01024":{"line":4279,"offset":755590,"length":178,"previous":"M21-GAP-01023","next":"M21-GAP-01025"},"M21-GAP-01025":{"line":4280,"offset":755768,"length":178,"previous":"M21-GAP-01024","next":"M21-GAP-01026"},"M21-GAP-01026":{"line":4281,"offset":755946,"length":178,"previous":"M21-GAP-01025","next":"M21-GAP-01027"},"M21-GAP-01027":{"line":4282,"offset":756124,"length":180,"previous":"M21-GAP-01026","next":"M21-GAP-01028"},"M21-GAP-01028":{"line":4283,"offset":756304,"length":183,"previous":"M21-GAP-01027","next":"M21-GAP-01029"},"M21-GAP-01029":{"line":4284,"offset":756487,"length":183,"previous":"M21-GAP-01028","next":"M21-GAP-01030"},"M21-GAP-01030":{"line":4285,"offset":756670,"length":183,"previous":"M21-GAP-01029","next":"M21-GAP-01031"},"M21-GAP-01031":{"line":4286,"offset":756853,"length":183,"previous":"M21-GAP-01030","next":"M21-GAP-01032"},"M21-GAP-01032":{"line":4287,"offset":757036,"length":183,"previous":"M21-GAP-01031","next":"M21-GAP-01033"},"M21-GAP-01033":{"line":4288,"offset":757219,"length":183,"previous":"M21-GAP-01032","next":"M21-GAP-01034"},"M21-GAP-01034":{"line":4289,"offset":757402,"length":188,"previous":"M21-GAP-01033","next":"M21-GAP-01035"},"M21-GAP-01035":{"line":4290,"offset":757590,"length":188,"previous":"M21-GAP-01034","next":"M21-GAP-01036"},"M21-GAP-01036":{"line":4291,"offset":757778,"length":188,"previous":"M21-GAP-01035","next":"M21-GAP-01037"},"M21-GAP-01037":{"line":4292,"offset":757966,"length":188,"previous":"M21-GAP-01036","next":"M21-GAP-01038"},"M21-GAP-01038":{"line":4293,"offset":758154,"length":188,"previous":"M21-GAP-01037","next":"M21-GAP-01039"},"M21-GAP-01039":{"line":4294,"offset":758342,"length":188,"previous":"M21-GAP-01038","next":"M21-GAP-01040"},"M21-GAP-01040":{"line":4295,"offset":758530,"length":188,"previous":"M21-GAP-01039","next":"M21-GAP-01041"},"M21-GAP-01041":{"line":4296,"offset":758718,"length":186,"previous":"M21-GAP-01040","next":"M21-GAP-01042"},"M21-GAP-01042":{"line":4297,"offset":758904,"length":186,"previous":"M21-GAP-01041","next":"M21-GAP-01043"},"M21-GAP-01043":{"line":4298,"offset":759090,"length":186,"previous":"M21-GAP-01042","next":"M21-GAP-01044"},"M21-GAP-01044":{"line":4299,"offset":759276,"length":186,"previous":"M21-GAP-01043","next":"M21-GAP-01045"},"M21-GAP-01045":{"line":4300,"offset":759462,"length":186,"previous":"M21-GAP-01044","next":"M21-GAP-01046"},"M21-GAP-01046":{"line":4301,"offset":759648,"length":186,"previous":"M21-GAP-01045","next":"M21-GAP-01047"},"M21-GAP-01047":{"line":4302,"offset":759834,"length":194,"previous":"M21-GAP-01046","next":"M21-GAP-01048"},"M21-GAP-01048":{"line":4303,"offset":760028,"length":194,"previous":"M21-GAP-01047","next":"M21-GAP-01049"},"M21-GAP-01049":{"line":4304,"offset":760222,"length":194,"previous":"M21-GAP-01048","next":"M21-GAP-01050"},"M21-GAP-01050":{"line":4305,"offset":760416,"length":194,"previous":"M21-GAP-01049","next":"M21-GAP-01051"},"M21-GAP-01051":{"line":4306,"offset":760610,"length":194,"previous":"M21-GAP-01050","next":"M21-GAP-01052"},"M21-GAP-01052":{"line":4307,"offset":760804,"length":194,"previous":"M21-GAP-01051","next":"M21-GAP-01053"},"M21-GAP-01053":{"line":4308,"offset":760998,"length":194,"previous":"M21-GAP-01052","next":"M21-GAP-01054"},"M21-GAP-01054":{"line":4309,"offset":761192,"length":194,"previous":"M21-GAP-01053","next":"M21-GAP-01055"},"M21-GAP-01055":{"line":4310,"offset":761386,"length":194,"previous":"M21-GAP-01054","next":"M21-GAP-01056"},"M21-GAP-01056":{"line":4311,"offset":761580,"length":194,"previous":"M21-GAP-01055","next":"M21-GAP-01057"},"M21-GAP-01057":{"line":4312,"offset":761774,"length":186,"previous":"M21-GAP-01056","next":"M21-GAP-01058"},"M21-GAP-01058":{"line":4313,"offset":761960,"length":186,"previous":"M21-GAP-01057","next":"M21-GAP-01059"},"M21-GAP-01059":{"line":4314,"offset":762146,"length":187,"previous":"M21-GAP-01058","next":"M21-GAP-01060"},"M21-GAP-01060":{"line":4315,"offset":762333,"length":187,"previous":"M21-GAP-01059","next":"M21-GAP-01061"},"M21-GAP-01061":{"line":4316,"offset":762520,"length":187,"previous":"M21-GAP-01060","next":"M21-GAP-01062"},"M21-GAP-01062":{"line":4317,"offset":762707,"length":187,"previous":"M21-GAP-01061","next":"M21-GAP-01063"},"M21-GAP-01063":{"line":4318,"offset":762894,"length":187,"previous":"M21-GAP-01062","next":"M21-GAP-01064"},"M21-GAP-01064":{"line":4319,"offset":763081,"length":187,"previous":"M21-GAP-01063","next":"M21-GAP-01065"},"M21-GAP-01065":{"line":4320,"offset":763268,"length":187,"previous":"M21-GAP-01064","next":"M21-GAP-01066"},"M21-GAP-01066":{"line":4321,"offset":763455,"length":187,"previous":"M21-GAP-01065","next":"M21-GAP-01067"},"M21-GAP-01067":{"line":4322,"offset":763642,"length":187,"previous":"M21-GAP-01066","next":"M21-GAP-01068"},"M21-GAP-01068":{"line":4323,"offset":763829,"length":187,"previous":"M21-GAP-01067","next":"M21-GAP-01069"},"M21-GAP-01069":{"line":4324,"offset":764016,"length":186,"previous":"M21-GAP-01068","next":"M21-GAP-01070"},"M21-GAP-01070":{"line":4325,"offset":764202,"length":187,"previous":"M21-GAP-01069","next":"M21-GAP-01071"},"M21-GAP-01071":{"line":4326,"offset":764389,"length":187,"previous":"M21-GAP-01070","next":"M21-GAP-01072"},"M21-GAP-01072":{"line":4327,"offset":764576,"length":187,"previous":"M21-GAP-01071","next":"M21-GAP-01073"},"M21-GAP-01073":{"line":4328,"offset":764763,"length":187,"previous":"M21-GAP-01072","next":"M21-GAP-01074"},"M21-GAP-01074":{"line":4329,"offset":764950,"length":187,"previous":"M21-GAP-01073","next":"M21-GAP-01075"},"M21-GAP-01075":{"line":4330,"offset":765137,"length":187,"previous":"M21-GAP-01074","next":"M21-GAP-01076"},"M21-GAP-01076":{"line":4331,"offset":765324,"length":187,"previous":"M21-GAP-01075","next":"M21-GAP-01077"},"M21-GAP-01077":{"line":4332,"offset":765511,"length":187,"previous":"M21-GAP-01076","next":"M21-GAP-01078"},"M21-GAP-01078":{"line":4333,"offset":765698,"length":187,"previous":"M21-GAP-01077","next":"M21-GAP-01079"},"M21-GAP-01079":{"line":4334,"offset":765885,"length":187,"previous":"M21-GAP-01078","next":"M21-GAP-01080"},"M21-GAP-01080":{"line":4335,"offset":766072,"length":186,"previous":"M21-GAP-01079","next":"M21-GAP-01081"},"M21-GAP-01081":{"line":4336,"offset":766258,"length":187,"previous":"M21-GAP-01080","next":"M21-GAP-01082"},"M21-GAP-01082":{"line":4337,"offset":766445,"length":187,"previous":"M21-GAP-01081","next":"M21-GAP-01083"},"M21-GAP-01083":{"line":4338,"offset":766632,"length":187,"previous":"M21-GAP-01082","next":"M21-GAP-01084"},"M21-GAP-01084":{"line":4339,"offset":766819,"length":187,"previous":"M21-GAP-01083","next":"M21-GAP-01085"},"M21-GAP-01085":{"line":4340,"offset":767006,"length":187,"previous":"M21-GAP-01084","next":"M21-GAP-01086"},"M21-GAP-01086":{"line":4341,"offset":767193,"length":187,"previous":"M21-GAP-01085","next":"M21-GAP-01087"},"M21-GAP-01087":{"line":4342,"offset":767380,"length":187,"previous":"M21-GAP-01086","next":"M21-GAP-01088"},"M21-GAP-01088":{"line":4343,"offset":767567,"length":187,"previous":"M21-GAP-01087","next":"M21-GAP-01089"},"M21-GAP-01089":{"line":4344,"offset":767754,"length":187,"previous":"M21-GAP-01088","next":"M21-GAP-01090"},"M21-GAP-01090":{"line":4345,"offset":767941,"length":187,"previous":"M21-GAP-01089","next":"M21-GAP-01091"},"M21-GAP-01091":{"line":4346,"offset":768128,"length":186,"previous":"M21-GAP-01090","next":"M21-GAP-01092"},"M21-GAP-01092":{"line":4347,"offset":768314,"length":187,"previous":"M21-GAP-01091","next":"M21-GAP-01093"},"M21-GAP-01093":{"line":4348,"offset":768501,"length":187,"previous":"M21-GAP-01092","next":"M21-GAP-01094"},"M21-GAP-01094":{"line":4349,"offset":768688,"length":187,"previous":"M21-GAP-01093","next":"M21-GAP-01095"},"M21-GAP-01095":{"line":4350,"offset":768875,"length":187,"previous":"M21-GAP-01094","next":"M21-GAP-01096"},"M21-GAP-01096":{"line":4351,"offset":769062,"length":187,"previous":"M21-GAP-01095","next":"M21-GAP-01097"},"M21-GAP-01097":{"line":4352,"offset":769249,"length":187,"previous":"M21-GAP-01096","next":"M21-GAP-01098"},"M21-GAP-01098":{"line":4353,"offset":769436,"length":187,"previous":"M21-GAP-01097","next":"M21-GAP-01099"},"M21-GAP-01099":{"line":4354,"offset":769623,"length":187,"previous":"M21-GAP-01098","next":"M21-GAP-01100"},"M21-GAP-01100":{"line":4355,"offset":769810,"length":187,"previous":"M21-GAP-01099","next":"M21-GAP-01101"},"M21-GAP-01101":{"line":4356,"offset":769997,"length":187,"previous":"M21-GAP-01100","next":"M21-GAP-01102"},"M21-GAP-01102":{"line":4357,"offset":770184,"length":186,"previous":"M21-GAP-01101","next":"M21-GAP-01103"},"M21-GAP-01103":{"line":4358,"offset":770370,"length":187,"previous":"M21-GAP-01102","next":"M21-GAP-01104"},"M21-GAP-01104":{"line":4359,"offset":770557,"length":187,"previous":"M21-GAP-01103","next":"M21-GAP-01105"},"M21-GAP-01105":{"line":4360,"offset":770744,"length":187,"previous":"M21-GAP-01104","next":"M21-GAP-01106"},"M21-GAP-01106":{"line":4361,"offset":770931,"length":187,"previous":"M21-GAP-01105","next":"M21-GAP-01107"},"M21-GAP-01107":{"line":4362,"offset":771118,"length":187,"previous":"M21-GAP-01106","next":"M21-GAP-01108"},"M21-GAP-01108":{"line":4363,"offset":771305,"length":187,"previous":"M21-GAP-01107","next":"M21-GAP-01109"},"M21-GAP-01109":{"line":4364,"offset":771492,"length":187,"previous":"M21-GAP-01108","next":"M21-GAP-01110"},"M21-GAP-01110":{"line":4365,"offset":771679,"length":187,"previous":"M21-GAP-01109","next":"M21-GAP-01111"},"M21-GAP-01111":{"line":4366,"offset":771866,"length":187,"previous":"M21-GAP-01110","next":"M21-GAP-01112"},"M21-GAP-01112":{"line":4367,"offset":772053,"length":187,"previous":"M21-GAP-01111","next":"M21-GAP-01113"},"M21-GAP-01113":{"line":4368,"offset":772240,"length":186,"previous":"M21-GAP-01112","next":"M21-GAP-01114"},"M21-GAP-01114":{"line":4369,"offset":772426,"length":187,"previous":"M21-GAP-01113","next":"M21-GAP-01115"},"M21-GAP-01115":{"line":4370,"offset":772613,"length":187,"previous":"M21-GAP-01114","next":"M21-GAP-01116"},"M21-GAP-01116":{"line":4371,"offset":772800,"length":187,"previous":"M21-GAP-01115","next":"M21-GAP-01117"},"M21-GAP-01117":{"line":4372,"offset":772987,"length":187,"previous":"M21-GAP-01116","next":"M21-GAP-01118"},"M21-GAP-01118":{"line":4373,"offset":773174,"length":187,"previous":"M21-GAP-01117","next":"M21-GAP-01119"},"M21-GAP-01119":{"line":4374,"offset":773361,"length":187,"previous":"M21-GAP-01118","next":"M21-GAP-01120"},"M21-GAP-01120":{"line":4375,"offset":773548,"length":187,"previous":"M21-GAP-01119","next":"M21-GAP-01121"},"M21-GAP-01121":{"line":4376,"offset":773735,"length":187,"previous":"M21-GAP-01120","next":"M21-GAP-01122"},"M21-GAP-01122":{"line":4377,"offset":773922,"length":187,"previous":"M21-GAP-01121","next":"M21-GAP-01123"},"M21-GAP-01123":{"line":4378,"offset":774109,"length":187,"previous":"M21-GAP-01122","next":"M21-GAP-01124"},"M21-GAP-01124":{"line":4379,"offset":774296,"length":186,"previous":"M21-GAP-01123","next":"M21-GAP-01125"},"M21-GAP-01125":{"line":4380,"offset":774482,"length":187,"previous":"M21-GAP-01124","next":"M21-GAP-01126"},"M21-GAP-01126":{"line":4381,"offset":774669,"length":186,"previous":"M21-GAP-01125","next":"M21-GAP-01127"},"M21-GAP-01127":{"line":4382,"offset":774855,"length":186,"previous":"M21-GAP-01126","next":"M21-GAP-01128"},"M21-GAP-01128":{"line":4383,"offset":775041,"length":193,"previous":"M21-GAP-01127","next":"M21-GAP-01129"},"M21-GAP-01129":{"line":4384,"offset":775234,"length":193,"previous":"M21-GAP-01128","next":"M21-GAP-01130"},"M21-GAP-01130":{"line":4385,"offset":775427,"length":193,"previous":"M21-GAP-01129","next":"M21-GAP-01131"},"M21-GAP-01131":{"line":4386,"offset":775620,"length":193,"previous":"M21-GAP-01130","next":"M21-GAP-01132"},"M21-GAP-01132":{"line":4387,"offset":775813,"length":193,"previous":"M21-GAP-01131","next":"M21-GAP-01133"},"M21-GAP-01133":{"line":4388,"offset":776006,"length":193,"previous":"M21-GAP-01132","next":"M21-GAP-01134"},"M21-GAP-01134":{"line":4389,"offset":776199,"length":190,"previous":"M21-GAP-01133","next":"M21-GAP-01135"},"M21-GAP-01135":{"line":4390,"offset":776389,"length":190,"previous":"M21-GAP-01134","next":"M21-GAP-01136"},"M21-GAP-01136":{"line":4391,"offset":776579,"length":191,"previous":"M21-GAP-01135","next":"M21-GAP-01137"},"M21-GAP-01137":{"line":4392,"offset":776770,"length":191,"previous":"M21-GAP-01136","next":"M21-GAP-01138"},"M21-GAP-01138":{"line":4393,"offset":776961,"length":191,"previous":"M21-GAP-01137","next":"M21-GAP-01139"},"M21-GAP-01139":{"line":4394,"offset":777152,"length":191,"previous":"M21-GAP-01138","next":"M21-GAP-01140"},"M21-GAP-01140":{"line":4395,"offset":777343,"length":191,"previous":"M21-GAP-01139","next":"M21-GAP-01141"},"M21-GAP-01141":{"line":4396,"offset":777534,"length":191,"previous":"M21-GAP-01140","next":"M21-GAP-01142"},"M21-GAP-01142":{"line":4397,"offset":777725,"length":191,"previous":"M21-GAP-01141","next":"M21-GAP-01143"},"M21-GAP-01143":{"line":4398,"offset":777916,"length":191,"previous":"M21-GAP-01142","next":"M21-GAP-01144"},"M21-GAP-01144":{"line":4399,"offset":778107,"length":191,"previous":"M21-GAP-01143","next":"M21-GAP-01145"},"M21-GAP-01145":{"line":4400,"offset":778298,"length":191,"previous":"M21-GAP-01144","next":"M21-GAP-01146"},"M21-GAP-01146":{"line":4401,"offset":778489,"length":190,"previous":"M21-GAP-01145","next":"M21-GAP-01147"},"M21-GAP-01147":{"line":4402,"offset":778679,"length":191,"previous":"M21-GAP-01146","next":"M21-GAP-01148"},"M21-GAP-01148":{"line":4403,"offset":778870,"length":191,"previous":"M21-GAP-01147","next":"M21-GAP-01149"},"M21-GAP-01149":{"line":4404,"offset":779061,"length":190,"previous":"M21-GAP-01148","next":"M21-GAP-01150"},"M21-GAP-01150":{"line":4405,"offset":779251,"length":190,"previous":"M21-GAP-01149","next":"M21-GAP-01151"},"M21-GAP-01151":{"line":4406,"offset":779441,"length":190,"previous":"M21-GAP-01150","next":"M21-GAP-01152"},"M21-GAP-01152":{"line":4407,"offset":779631,"length":190,"previous":"M21-GAP-01151","next":"M21-GAP-01153"},"M21-GAP-01153":{"line":4408,"offset":779821,"length":190,"previous":"M21-GAP-01152","next":"M21-GAP-01154"},"M21-GAP-01154":{"line":4409,"offset":780011,"length":190,"previous":"M21-GAP-01153","next":"M21-GAP-01155"},"M21-GAP-01155":{"line":4410,"offset":780201,"length":190,"previous":"M21-GAP-01154","next":"M21-GAP-01156"},"M21-GAP-01156":{"line":4411,"offset":780391,"length":190,"previous":"M21-GAP-01155","next":"M21-GAP-01157"},"M21-GAP-01157":{"line":4412,"offset":780581,"length":190,"previous":"M21-GAP-01156","next":"M21-GAP-01158"},"M21-GAP-01158":{"line":4413,"offset":780771,"length":191,"previous":"M21-GAP-01157","next":"M21-GAP-01159"},"M21-GAP-01159":{"line":4414,"offset":780962,"length":191,"previous":"M21-GAP-01158","next":"M21-GAP-01160"},"M21-GAP-01160":{"line":4415,"offset":781153,"length":191,"previous":"M21-GAP-01159","next":"M21-GAP-01161"},"M21-GAP-01161":{"line":4416,"offset":781344,"length":191,"previous":"M21-GAP-01160","next":"M21-GAP-01162"},"M21-GAP-01162":{"line":4417,"offset":781535,"length":191,"previous":"M21-GAP-01161","next":"M21-GAP-01163"},"M21-GAP-01163":{"line":4418,"offset":781726,"length":191,"previous":"M21-GAP-01162","next":"M21-GAP-01164"},"M21-GAP-01164":{"line":4419,"offset":781917,"length":191,"previous":"M21-GAP-01163","next":"M21-GAP-01165"},"M21-GAP-01165":{"line":4420,"offset":782108,"length":191,"previous":"M21-GAP-01164","next":"M21-GAP-01166"},"M21-GAP-01166":{"line":4421,"offset":782299,"length":191,"previous":"M21-GAP-01165","next":"M21-GAP-01167"},"M21-GAP-01167":{"line":4422,"offset":782490,"length":191,"previous":"M21-GAP-01166","next":"M21-GAP-01168"},"M21-GAP-01168":{"line":4423,"offset":782681,"length":190,"previous":"M21-GAP-01167","next":"M21-GAP-01169"},"M21-GAP-01169":{"line":4424,"offset":782871,"length":191,"previous":"M21-GAP-01168","next":"M21-GAP-01170"},"M21-GAP-01170":{"line":4425,"offset":783062,"length":191,"previous":"M21-GAP-01169","next":"M21-GAP-01171"},"M21-GAP-01171":{"line":4426,"offset":783253,"length":191,"previous":"M21-GAP-01170","next":"M21-GAP-01172"},"M21-GAP-01172":{"line":4427,"offset":783444,"length":191,"previous":"M21-GAP-01171","next":"M21-GAP-01173"},"M21-GAP-01173":{"line":4428,"offset":783635,"length":191,"previous":"M21-GAP-01172","next":"M21-GAP-01174"},"M21-GAP-01174":{"line":4429,"offset":783826,"length":191,"previous":"M21-GAP-01173","next":"M21-GAP-01175"},"M21-GAP-01175":{"line":4430,"offset":784017,"length":191,"previous":"M21-GAP-01174","next":"M21-GAP-01176"},"M21-GAP-01176":{"line":4431,"offset":784208,"length":191,"previous":"M21-GAP-01175","next":"M21-GAP-01177"},"M21-GAP-01177":{"line":4432,"offset":784399,"length":191,"previous":"M21-GAP-01176","next":"M21-GAP-01178"},"M21-GAP-01178":{"line":4433,"offset":784590,"length":191,"previous":"M21-GAP-01177","next":"M21-GAP-01179"},"M21-GAP-01179":{"line":4434,"offset":784781,"length":190,"previous":"M21-GAP-01178","next":"M21-GAP-01180"},"M21-GAP-01180":{"line":4435,"offset":784971,"length":191,"previous":"M21-GAP-01179","next":"M21-GAP-01181"},"M21-GAP-01181":{"line":4436,"offset":785162,"length":191,"previous":"M21-GAP-01180","next":"M21-GAP-01182"},"M21-GAP-01182":{"line":4437,"offset":785353,"length":191,"previous":"M21-GAP-01181","next":"M21-GAP-01183"},"M21-GAP-01183":{"line":4438,"offset":785544,"length":191,"previous":"M21-GAP-01182","next":"M21-GAP-01184"},"M21-GAP-01184":{"line":4439,"offset":785735,"length":191,"previous":"M21-GAP-01183","next":"M21-GAP-01185"},"M21-GAP-01185":{"line":4440,"offset":785926,"length":191,"previous":"M21-GAP-01184","next":"M21-GAP-01186"},"M21-GAP-01186":{"line":4441,"offset":786117,"length":191,"previous":"M21-GAP-01185","next":"M21-GAP-01187"},"M21-GAP-01187":{"line":4442,"offset":786308,"length":191,"previous":"M21-GAP-01186","next":"M21-GAP-01188"},"M21-GAP-01188":{"line":4443,"offset":786499,"length":191,"previous":"M21-GAP-01187","next":"M21-GAP-01189"},"M21-GAP-01189":{"line":4444,"offset":786690,"length":191,"previous":"M21-GAP-01188","next":"M21-GAP-01190"},"M21-GAP-01190":{"line":4445,"offset":786881,"length":190,"previous":"M21-GAP-01189","next":"M21-GAP-01191"},"M21-GAP-01191":{"line":4446,"offset":787071,"length":191,"previous":"M21-GAP-01190","next":"M21-GAP-01192"},"M21-GAP-01192":{"line":4447,"offset":787262,"length":191,"previous":"M21-GAP-01191","next":"M21-GAP-01193"},"M21-GAP-01193":{"line":4448,"offset":787453,"length":191,"previous":"M21-GAP-01192","next":"M21-GAP-01194"},"M21-GAP-01194":{"line":4449,"offset":787644,"length":191,"previous":"M21-GAP-01193","next":"M21-GAP-01195"},"M21-GAP-01195":{"line":4450,"offset":787835,"length":191,"previous":"M21-GAP-01194","next":"M21-GAP-01196"},"M21-GAP-01196":{"line":4451,"offset":788026,"length":191,"previous":"M21-GAP-01195","next":"M21-GAP-01197"},"M21-GAP-01197":{"line":4452,"offset":788217,"length":191,"previous":"M21-GAP-01196","next":"M21-GAP-01198"},"M21-GAP-01198":{"line":4453,"offset":788408,"length":191,"previous":"M21-GAP-01197","next":"M21-GAP-01199"},"M21-GAP-01199":{"line":4454,"offset":788599,"length":191,"previous":"M21-GAP-01198","next":"M21-GAP-01200"},"M21-GAP-01200":{"line":4455,"offset":788790,"length":191,"previous":"M21-GAP-01199","next":"M21-GAP-01201"},"M21-GAP-01201":{"line":4456,"offset":788981,"length":190,"previous":"M21-GAP-01200","next":"M21-GAP-01202"},"M21-GAP-01202":{"line":4457,"offset":789171,"length":191,"previous":"M21-GAP-01201","next":"M21-GAP-01203"},"M21-GAP-01203":{"line":4458,"offset":789362,"length":191,"previous":"M21-GAP-01202","next":"M21-GAP-01204"},"M21-GAP-01204":{"line":4459,"offset":789553,"length":191,"previous":"M21-GAP-01203","next":"M21-GAP-01205"},"M21-GAP-01205":{"line":4460,"offset":789744,"length":191,"previous":"M21-GAP-01204","next":"M21-GAP-01206"},"M21-GAP-01206":{"line":4461,"offset":789935,"length":191,"previous":"M21-GAP-01205","next":"M21-GAP-01207"},"M21-GAP-01207":{"line":4462,"offset":790126,"length":191,"previous":"M21-GAP-01206","next":"M21-GAP-01208"},"M21-GAP-01208":{"line":4463,"offset":790317,"length":191,"previous":"M21-GAP-01207","next":"M21-GAP-01209"},"M21-GAP-01209":{"line":4464,"offset":790508,"length":190,"previous":"M21-GAP-01208","next":"M21-GAP-01210"},"M21-GAP-01210":{"line":4465,"offset":790698,"length":190,"previous":"M21-GAP-01209","next":"M21-GAP-01211"},"M21-GAP-01211":{"line":4466,"offset":790888,"length":190,"previous":"M21-GAP-01210","next":"M21-GAP-01212"},"M21-GAP-01212":{"line":4467,"offset":791078,"length":190,"previous":"M21-GAP-01211","next":"M21-GAP-01213"},"M21-GAP-01213":{"line":4468,"offset":791268,"length":190,"previous":"M21-GAP-01212","next":"M21-GAP-01214"},"M21-GAP-01214":{"line":4469,"offset":791458,"length":190,"previous":"M21-GAP-01213","next":"M21-GAP-01215"},"M21-GAP-01215":{"line":4470,"offset":791648,"length":190,"previous":"M21-GAP-01214","next":"M21-GAP-01216"},"M21-GAP-01216":{"line":4471,"offset":791838,"length":192,"previous":"M21-GAP-01215","next":"M21-GAP-01217"},"M21-GAP-01217":{"line":4472,"offset":792030,"length":192,"previous":"M21-GAP-01216","next":"M21-GAP-01218"},"M21-GAP-01218":{"line":4473,"offset":792222,"length":193,"previous":"M21-GAP-01217","next":"M21-GAP-01219"},"M21-GAP-01219":{"line":4474,"offset":792415,"length":193,"previous":"M21-GAP-01218","next":"M21-GAP-01220"},"M21-GAP-01220":{"line":4475,"offset":792608,"length":193,"previous":"M21-GAP-01219","next":"M21-GAP-01221"},"M21-GAP-01221":{"line":4476,"offset":792801,"length":193,"previous":"M21-GAP-01220","next":"M21-GAP-01222"},"M21-GAP-01222":{"line":4477,"offset":792994,"length":193,"previous":"M21-GAP-01221","next":"M21-GAP-01223"},"M21-GAP-01223":{"line":4478,"offset":793187,"length":193,"previous":"M21-GAP-01222","next":"M21-GAP-01224"},"M21-GAP-01224":{"line":4479,"offset":793380,"length":193,"previous":"M21-GAP-01223","next":"M21-GAP-01225"},"M21-GAP-01225":{"line":4480,"offset":793573,"length":193,"previous":"M21-GAP-01224","next":"M21-GAP-01226"},"M21-GAP-01226":{"line":4481,"offset":793766,"length":193,"previous":"M21-GAP-01225","next":"M21-GAP-01227"},"M21-GAP-01227":{"line":4482,"offset":793959,"length":193,"previous":"M21-GAP-01226","next":"M21-GAP-01228"},"M21-GAP-01228":{"line":4483,"offset":794152,"length":192,"previous":"M21-GAP-01227","next":"M21-GAP-01229"},"M21-GAP-01229":{"line":4484,"offset":794344,"length":193,"previous":"M21-GAP-01228","next":"M21-GAP-01230"},"M21-GAP-01230":{"line":4485,"offset":794537,"length":193,"previous":"M21-GAP-01229","next":"M21-GAP-01231"},"M21-GAP-01231":{"line":4486,"offset":794730,"length":193,"previous":"M21-GAP-01230","next":"M21-GAP-01232"},"M21-GAP-01232":{"line":4487,"offset":794923,"length":193,"previous":"M21-GAP-01231","next":"M21-GAP-01233"},"M21-GAP-01233":{"line":4488,"offset":795116,"length":193,"previous":"M21-GAP-01232","next":"M21-GAP-01234"},"M21-GAP-01234":{"line":4489,"offset":795309,"length":193,"previous":"M21-GAP-01233","next":"M21-GAP-01235"},"M21-GAP-01235":{"line":4490,"offset":795502,"length":193,"previous":"M21-GAP-01234","next":"M21-GAP-01236"},"M21-GAP-01236":{"line":4491,"offset":795695,"length":192,"previous":"M21-GAP-01235","next":"M21-GAP-01237"},"M21-GAP-01237":{"line":4492,"offset":795887,"length":192,"previous":"M21-GAP-01236","next":"M21-GAP-01238"},"M21-GAP-01238":{"line":4493,"offset":796079,"length":192,"previous":"M21-GAP-01237","next":"M21-GAP-01239"},"M21-GAP-01239":{"line":4494,"offset":796271,"length":192,"previous":"M21-GAP-01238","next":"M21-GAP-01240"},"M21-GAP-01240":{"line":4495,"offset":796463,"length":192,"previous":"M21-GAP-01239","next":"M21-GAP-01241"},"M21-GAP-01241":{"line":4496,"offset":796655,"length":192,"previous":"M21-GAP-01240","next":"M21-GAP-01242"},"M21-GAP-01242":{"line":4497,"offset":796847,"length":192,"previous":"M21-GAP-01241","next":"M21-GAP-01243"},"M21-GAP-01243":{"line":4498,"offset":797039,"length":190,"previous":"M21-GAP-01242","next":"M21-GAP-01244"},"M21-GAP-01244":{"line":4499,"offset":797229,"length":190,"previous":"M21-GAP-01243","next":"M21-GAP-01245"},"M21-GAP-01245":{"line":4500,"offset":797419,"length":190,"previous":"M21-GAP-01244","next":"M21-GAP-01246"},"M21-GAP-01246":{"line":4501,"offset":797609,"length":190,"previous":"M21-GAP-01245","next":"M21-GAP-01247"},"M21-GAP-01247":{"line":4502,"offset":797799,"length":190,"previous":"M21-GAP-01246","next":"M21-GAP-01248"},"M21-GAP-01248":{"line":4503,"offset":797989,"length":190,"previous":"M21-GAP-01247","next":"M21-GAP-01249"},"M21-GAP-01249":{"line":4504,"offset":798179,"length":190,"previous":"M21-GAP-01248","next":"M21-GAP-01250"},"M21-GAP-01250":{"line":4505,"offset":798369,"length":190,"previous":"M21-GAP-01249","next":"M21-GAP-01251"},"M21-GAP-01251":{"line":4506,"offset":798559,"length":190,"previous":"M21-GAP-01250","next":"M21-GAP-01252"},"M21-GAP-01252":{"line":4507,"offset":798749,"length":190,"previous":"M21-GAP-01251","next":"M21-GAP-01253"},"M21-GAP-01253":{"line":4508,"offset":798939,"length":193,"previous":"M21-GAP-01252","next":"M21-GAP-01254"},"M21-GAP-01254":{"line":4509,"offset":799132,"length":193,"previous":"M21-GAP-01253","next":"M21-GAP-01255"},"M21-GAP-01255":{"line":4510,"offset":799325,"length":194,"previous":"M21-GAP-01254","next":"M21-GAP-01256"},"M21-GAP-01256":{"line":4511,"offset":799519,"length":194,"previous":"M21-GAP-01255","next":"M21-GAP-01257"},"M21-GAP-01257":{"line":4512,"offset":799713,"length":194,"previous":"M21-GAP-01256","next":"M21-GAP-01258"},"M21-GAP-01258":{"line":4513,"offset":799907,"length":194,"previous":"M21-GAP-01257","next":"M21-GAP-01259"},"M21-GAP-01259":{"line":4514,"offset":800101,"length":194,"previous":"M21-GAP-01258","next":"M21-GAP-01260"},"M21-GAP-01260":{"line":4515,"offset":800295,"length":194,"previous":"M21-GAP-01259","next":"M21-GAP-01261"},"M21-GAP-01261":{"line":4516,"offset":800489,"length":194,"previous":"M21-GAP-01260","next":"M21-GAP-01262"},"M21-GAP-01262":{"line":4517,"offset":800683,"length":194,"previous":"M21-GAP-01261","next":"M21-GAP-01263"},"M21-GAP-01263":{"line":4518,"offset":800877,"length":194,"previous":"M21-GAP-01262","next":"M21-GAP-01264"},"M21-GAP-01264":{"line":4519,"offset":801071,"length":194,"previous":"M21-GAP-01263","next":"M21-GAP-01265"},"M21-GAP-01265":{"line":4520,"offset":801265,"length":193,"previous":"M21-GAP-01264","next":"M21-GAP-01266"},"M21-GAP-01266":{"line":4521,"offset":801458,"length":194,"previous":"M21-GAP-01265","next":"M21-GAP-01267"},"M21-GAP-01267":{"line":4522,"offset":801652,"length":194,"previous":"M21-GAP-01266","next":"M21-GAP-01268"},"M21-GAP-01268":{"line":4523,"offset":801846,"length":193,"previous":"M21-GAP-01267","next":"M21-GAP-01269"},"M21-GAP-01269":{"line":4524,"offset":802039,"length":193,"previous":"M21-GAP-01268","next":"M21-GAP-01270"},"M21-GAP-01270":{"line":4525,"offset":802232,"length":193,"previous":"M21-GAP-01269","next":"M21-GAP-01271"},"M21-GAP-01271":{"line":4526,"offset":802425,"length":193,"previous":"M21-GAP-01270","next":"M21-GAP-01272"},"M21-GAP-01272":{"line":4527,"offset":802618,"length":193,"previous":"M21-GAP-01271","next":"M21-GAP-01273"},"M21-GAP-01273":{"line":4528,"offset":802811,"length":193,"previous":"M21-GAP-01272","next":"M21-GAP-01274"},"M21-GAP-01274":{"line":4529,"offset":803004,"length":193,"previous":"M21-GAP-01273","next":"M21-GAP-01275"},"M21-GAP-01275":{"line":4530,"offset":803197,"length":193,"previous":"M21-GAP-01274","next":"M21-GAP-01276"},"M21-GAP-01276":{"line":4531,"offset":803390,"length":193,"previous":"M21-GAP-01275","next":"M21-GAP-01277"},"M21-GAP-01277":{"line":4532,"offset":803583,"length":194,"previous":"M21-GAP-01276","next":"M21-GAP-01278"},"M21-GAP-01278":{"line":4533,"offset":803777,"length":194,"previous":"M21-GAP-01277","next":"M21-GAP-01279"},"M21-GAP-01279":{"line":4534,"offset":803971,"length":194,"previous":"M21-GAP-01278","next":"M21-GAP-01280"},"M21-GAP-01280":{"line":4535,"offset":804165,"length":194,"previous":"M21-GAP-01279","next":"M21-GAP-01281"},"M21-GAP-01281":{"line":4536,"offset":804359,"length":194,"previous":"M21-GAP-01280","next":"M21-GAP-01282"},"M21-GAP-01282":{"line":4537,"offset":804553,"length":194,"previous":"M21-GAP-01281","next":"M21-GAP-01283"},"M21-GAP-01283":{"line":4538,"offset":804747,"length":194,"previous":"M21-GAP-01282","next":"M21-GAP-01284"},"M21-GAP-01284":{"line":4539,"offset":804941,"length":194,"previous":"M21-GAP-01283","next":"M21-GAP-01285"},"M21-GAP-01285":{"line":4540,"offset":805135,"length":194,"previous":"M21-GAP-01284","next":"M21-GAP-01286"},"M21-GAP-01286":{"line":4541,"offset":805329,"length":194,"previous":"M21-GAP-01285","next":"M21-GAP-01287"},"M21-GAP-01287":{"line":4542,"offset":805523,"length":193,"previous":"M21-GAP-01286","next":"M21-GAP-01288"},"M21-GAP-01288":{"line":4543,"offset":805716,"length":194,"previous":"M21-GAP-01287","next":"M21-GAP-01289"},"M21-GAP-01289":{"line":4544,"offset":805910,"length":194,"previous":"M21-GAP-01288","next":"M21-GAP-01290"},"M21-GAP-01290":{"line":4545,"offset":806104,"length":194,"previous":"M21-GAP-01289","next":"M21-GAP-01291"},"M21-GAP-01291":{"line":4546,"offset":806298,"length":194,"previous":"M21-GAP-01290","next":"M21-GAP-01292"},"M21-GAP-01292":{"line":4547,"offset":806492,"length":194,"previous":"M21-GAP-01291","next":"M21-GAP-01293"},"M21-GAP-01293":{"line":4548,"offset":806686,"length":194,"previous":"M21-GAP-01292","next":"M21-GAP-01294"},"M21-GAP-01294":{"line":4549,"offset":806880,"length":193,"previous":"M21-GAP-01293","next":"M21-GAP-01295"},"M21-GAP-01295":{"line":4550,"offset":807073,"length":193,"previous":"M21-GAP-01294","next":"M21-GAP-01296"},"M21-GAP-01296":{"line":4551,"offset":807266,"length":193,"previous":"M21-GAP-01295","next":"M21-GAP-01297"},"M21-GAP-01297":{"line":4552,"offset":807459,"length":193,"previous":"M21-GAP-01296","next":"M21-GAP-01298"},"M21-GAP-01298":{"line":4553,"offset":807652,"length":193,"previous":"M21-GAP-01297","next":"M21-GAP-01299"},"M21-GAP-01299":{"line":4554,"offset":807845,"length":193,"previous":"M21-GAP-01298","next":"M21-GAP-01300"},"M21-GAP-01300":{"line":4555,"offset":808038,"length":193,"previous":"M21-GAP-01299","next":"M21-GAP-01301"},"M21-GAP-01301":{"line":4556,"offset":808231,"length":180,"previous":"M21-GAP-01300","next":"M21-GAP-01302"},"M21-GAP-01302":{"line":4557,"offset":808411,"length":180,"previous":"M21-GAP-01301","next":"M21-GAP-01303"},"M21-GAP-01303":{"line":4558,"offset":808591,"length":180,"previous":"M21-GAP-01302","next":"M21-GAP-01304"},"M21-GAP-01304":{"line":4559,"offset":808771,"length":180,"previous":"M21-GAP-01303","next":"M21-GAP-01305"},"M21-GAP-01305":{"line":4560,"offset":808951,"length":180,"previous":"M21-GAP-01304","next":"M21-GAP-01306"},"M21-GAP-01306":{"line":4561,"offset":809131,"length":202,"previous":"M21-GAP-01305","next":"M21-GAP-01307"},"M21-GAP-01307":{"line":4562,"offset":809333,"length":205,"previous":"M21-GAP-01306","next":"M21-GAP-01308"},"M21-GAP-01308":{"line":4563,"offset":809538,"length":205,"previous":"M21-GAP-01307","next":"M21-GAP-01309"},"M21-GAP-01309":{"line":4564,"offset":809743,"length":205,"previous":"M21-GAP-01308","next":"M21-GAP-01310"},"M21-GAP-01310":{"line":4565,"offset":809948,"length":203,"previous":"M21-GAP-01309","next":"M21-GAP-01311"},"M21-GAP-01311":{"line":4566,"offset":810151,"length":205,"previous":"M21-GAP-01310","next":"M21-GAP-01312"},"M21-GAP-01312":{"line":4567,"offset":810356,"length":204,"previous":"M21-GAP-01311","next":"M21-GAP-01313"},"M21-GAP-01313":{"line":4568,"offset":810560,"length":220,"previous":"M21-GAP-01312","next":"M21-GAP-01314"},"M21-GAP-01314":{"line":4569,"offset":810780,"length":220,"previous":"M21-GAP-01313","next":"M21-GAP-01315"},"M21-GAP-01315":{"line":4570,"offset":811000,"length":220,"previous":"M21-GAP-01314","next":"M21-GAP-01316"},"M21-GAP-01316":{"line":4571,"offset":811220,"length":209,"previous":"M21-GAP-01315","next":"M21-GAP-01317"},"M21-GAP-01317":{"line":4572,"offset":811429,"length":209,"previous":"M21-GAP-01316","next":"M21-GAP-01318"},"M21-GAP-01318":{"line":4573,"offset":811638,"length":209,"previous":"M21-GAP-01317","next":"M21-GAP-01319"},"M21-GAP-01319":{"line":4574,"offset":811847,"length":223,"previous":"M21-GAP-01318","next":"M21-GAP-01320"},"M21-GAP-01320":{"line":4575,"offset":812070,"length":223,"previous":"M21-GAP-01319","next":"M21-GAP-01321"},"M21-GAP-01321":{"line":4576,"offset":812293,"length":223,"previous":"M21-GAP-01320","next":"M21-GAP-01322"},"M21-GAP-01322":{"line":4577,"offset":812516,"length":212,"previous":"M21-GAP-01321","next":"M21-GAP-01323"},"M21-GAP-01323":{"line":4578,"offset":812728,"length":212,"previous":"M21-GAP-01322","next":"M21-GAP-01324"},"M21-GAP-01324":{"line":4579,"offset":812940,"length":212,"previous":"M21-GAP-01323","next":"M21-GAP-01325"},"M21-GAP-01325":{"line":4580,"offset":813152,"length":222,"previous":"M21-GAP-01324","next":"M21-GAP-01326"},"M21-GAP-01326":{"line":4581,"offset":813374,"length":222,"previous":"M21-GAP-01325","next":"M21-GAP-01327"},"M21-GAP-01327":{"line":4582,"offset":813596,"length":222,"previous":"M21-GAP-01326","next":"M21-GAP-01328"},"M21-GAP-01328":{"line":4583,"offset":813818,"length":211,"previous":"M21-GAP-01327","next":"M21-GAP-01329"},"M21-GAP-01329":{"line":4584,"offset":814029,"length":211,"previous":"M21-GAP-01328","next":"M21-GAP-01330"},"M21-GAP-01330":{"line":4585,"offset":814240,"length":211,"previous":"M21-GAP-01329","next":"M21-GAP-01331"},"M21-GAP-01331":{"line":4586,"offset":814451,"length":208,"previous":"M21-GAP-01330","next":"M21-GAP-01332"},"M21-GAP-01332":{"line":4587,"offset":814659,"length":215,"previous":"M21-GAP-01331","next":"M21-GAP-01333"},"M21-GAP-01333":{"line":4588,"offset":814874,"length":215,"previous":"M21-GAP-01332","next":"M21-GAP-01334"},"M21-GAP-01334":{"line":4589,"offset":815089,"length":215,"previous":"M21-GAP-01333","next":"M21-GAP-01335"},"M21-GAP-01335":{"line":4590,"offset":815304,"length":204,"previous":"M21-GAP-01334","next":"M21-GAP-01336"},"M21-GAP-01336":{"line":4591,"offset":815508,"length":204,"previous":"M21-GAP-01335","next":"M21-GAP-01337"},"M21-GAP-01337":{"line":4592,"offset":815712,"length":204,"previous":"M21-GAP-01336","next":"M21-GAP-01338"},"M21-GAP-01338":{"line":4593,"offset":815916,"length":199,"previous":"M21-GAP-01337","next":"M21-GAP-01339"},"M21-GAP-01339":{"line":4594,"offset":816115,"length":203,"previous":"M21-GAP-01338","next":"M21-GAP-01340"},"M21-GAP-01340":{"line":4595,"offset":816318,"length":203,"previous":"M21-GAP-01339","next":"M21-GAP-01341"},"M21-GAP-01341":{"line":4596,"offset":816521,"length":201,"previous":"M21-GAP-01340","next":"M21-GAP-01342"},"M21-GAP-01342":{"line":4597,"offset":816722,"length":201,"previous":"M21-GAP-01341","next":"M21-GAP-01343"},"M21-GAP-01343":{"line":4598,"offset":816923,"length":201,"previous":"M21-GAP-01342","next":"M21-GAP-01344"},"M21-GAP-01344":{"line":4599,"offset":817124,"length":201,"previous":"M21-GAP-01343","next":"M21-GAP-01345"},"M21-GAP-01345":{"line":4600,"offset":817325,"length":201,"previous":"M21-GAP-01344","next":"M21-GAP-01346"},"M21-GAP-01346":{"line":4601,"offset":817526,"length":201,"previous":"M21-GAP-01345","next":"M21-GAP-01347"},"M21-GAP-01347":{"line":4602,"offset":817727,"length":202,"previous":"M21-GAP-01346","next":"M21-GAP-01348"},"M21-GAP-01348":{"line":4603,"offset":817929,"length":202,"previous":"M21-GAP-01347","next":"M21-GAP-01349"},"M21-GAP-01349":{"line":4604,"offset":818131,"length":202,"previous":"M21-GAP-01348","next":"M21-GAP-01350"},"M21-GAP-01350":{"line":4605,"offset":818333,"length":202,"previous":"M21-GAP-01349","next":"M21-GAP-01351"},"M21-GAP-01351":{"line":4606,"offset":818535,"length":202,"previous":"M21-GAP-01350","next":"M21-GAP-01352"},"M21-GAP-01352":{"line":4607,"offset":818737,"length":202,"previous":"M21-GAP-01351","next":"M21-GAP-01353"},"M21-GAP-01353":{"line":4608,"offset":818939,"length":202,"previous":"M21-GAP-01352","next":"M21-GAP-01354"},"M21-GAP-01354":{"line":4609,"offset":819141,"length":202,"previous":"M21-GAP-01353","next":"M21-GAP-01355"},"M21-GAP-01355":{"line":4610,"offset":819343,"length":202,"previous":"M21-GAP-01354","next":"M21-GAP-01356"},"M21-GAP-01356":{"line":4611,"offset":819545,"length":202,"previous":"M21-GAP-01355","next":"M21-GAP-01357"},"M21-GAP-01357":{"line":4612,"offset":819747,"length":207,"previous":"M21-GAP-01356","next":"M21-GAP-01358"},"M21-GAP-01358":{"line":4613,"offset":819954,"length":203,"previous":"M21-GAP-01357","next":"M21-GAP-01359"},"M21-GAP-01359":{"line":4614,"offset":820157,"length":202,"previous":"M21-GAP-01358","next":"M21-GAP-01360"},"M21-GAP-01360":{"line":4615,"offset":820359,"length":218,"previous":"M21-GAP-01359","next":"M21-GAP-01361"},"M21-GAP-01361":{"line":4616,"offset":820577,"length":218,"previous":"M21-GAP-01360","next":"M21-GAP-01362"},"M21-GAP-01362":{"line":4617,"offset":820795,"length":218,"previous":"M21-GAP-01361","next":"M21-GAP-01363"},"M21-GAP-01363":{"line":4618,"offset":821013,"length":207,"previous":"M21-GAP-01362","next":"M21-GAP-01364"},"M21-GAP-01364":{"line":4619,"offset":821220,"length":207,"previous":"M21-GAP-01363","next":"M21-GAP-01365"},"M21-GAP-01365":{"line":4620,"offset":821427,"length":207,"previous":"M21-GAP-01364","next":"M21-GAP-01366"},"M21-GAP-01366":{"line":4621,"offset":821634,"length":221,"previous":"M21-GAP-01365","next":"M21-GAP-01367"},"M21-GAP-01367":{"line":4622,"offset":821855,"length":221,"previous":"M21-GAP-01366","next":"M21-GAP-01368"},"M21-GAP-01368":{"line":4623,"offset":822076,"length":221,"previous":"M21-GAP-01367","next":"M21-GAP-01369"},"M21-GAP-01369":{"line":4624,"offset":822297,"length":210,"previous":"M21-GAP-01368","next":"M21-GAP-01370"},"M21-GAP-01370":{"line":4625,"offset":822507,"length":210,"previous":"M21-GAP-01369","next":"M21-GAP-01371"},"M21-GAP-01371":{"line":4626,"offset":822717,"length":210,"previous":"M21-GAP-01370","next":"M21-GAP-01372"},"M21-GAP-01372":{"line":4627,"offset":822927,"length":220,"previous":"M21-GAP-01371","next":"M21-GAP-01373"},"M21-GAP-01373":{"line":4628,"offset":823147,"length":220,"previous":"M21-GAP-01372","next":"M21-GAP-01374"},"M21-GAP-01374":{"line":4629,"offset":823367,"length":220,"previous":"M21-GAP-01373","next":"M21-GAP-01375"},"M21-GAP-01375":{"line":4630,"offset":823587,"length":209,"previous":"M21-GAP-01374","next":"M21-GAP-01376"},"M21-GAP-01376":{"line":4631,"offset":823796,"length":209,"previous":"M21-GAP-01375","next":"M21-GAP-01377"},"M21-GAP-01377":{"line":4632,"offset":824005,"length":209,"previous":"M21-GAP-01376","next":"M21-GAP-01378"},"M21-GAP-01378":{"line":4633,"offset":824214,"length":213,"previous":"M21-GAP-01377","next":"M21-GAP-01379"},"M21-GAP-01379":{"line":4634,"offset":824427,"length":213,"previous":"M21-GAP-01378","next":"M21-GAP-01380"},"M21-GAP-01380":{"line":4635,"offset":824640,"length":213,"previous":"M21-GAP-01379","next":"M21-GAP-01381"},"M21-GAP-01381":{"line":4636,"offset":824853,"length":202,"previous":"M21-GAP-01380","next":"M21-GAP-01382"},"M21-GAP-01382":{"line":4637,"offset":825055,"length":202,"previous":"M21-GAP-01381","next":"M21-GAP-01383"},"M21-GAP-01383":{"line":4638,"offset":825257,"length":202,"previous":"M21-GAP-01382","next":"M21-GAP-01384"},"M21-GAP-01384":{"line":4639,"offset":825459,"length":187,"previous":"M21-GAP-01383","next":"M21-GAP-01385"},"M21-GAP-01385":{"line":4640,"offset":825646,"length":187,"previous":"M21-GAP-01384","next":"M21-GAP-01386"},"M21-GAP-01386":{"line":4641,"offset":825833,"length":188,"previous":"M21-GAP-01385","next":"M21-GAP-01387"},"M21-GAP-01387":{"line":4642,"offset":826021,"length":187,"previous":"M21-GAP-01386","next":"M21-GAP-01388"},"M21-GAP-01388":{"line":4643,"offset":826208,"length":187,"previous":"M21-GAP-01387","next":"M21-GAP-01389"},"M21-GAP-01389":{"line":4644,"offset":826395,"length":187,"previous":"M21-GAP-01388","next":"M21-GAP-01390"},"M21-GAP-01390":{"line":4645,"offset":826582,"length":187,"previous":"M21-GAP-01389","next":"M21-GAP-01391"},"M21-GAP-01391":{"line":4646,"offset":826769,"length":187,"previous":"M21-GAP-01390","next":"M21-GAP-01392"},"M21-GAP-01392":{"line":4647,"offset":826956,"length":187,"previous":"M21-GAP-01391","next":"M21-GAP-01393"},"M21-GAP-01393":{"line":4648,"offset":827143,"length":187,"previous":"M21-GAP-01392","next":"M21-GAP-01394"},"M21-GAP-01394":{"line":4649,"offset":827330,"length":187,"previous":"M21-GAP-01393","next":"M21-GAP-01395"},"M21-GAP-01395":{"line":4650,"offset":827517,"length":178,"previous":"M21-GAP-01394","next":"M21-GAP-01396"},"M21-GAP-01396":{"line":4651,"offset":827695,"length":178,"previous":"M21-GAP-01395","next":"M21-GAP-01397"},"M21-GAP-01397":{"line":4652,"offset":827873,"length":179,"previous":"M21-GAP-01396","next":"M21-GAP-01398"},"M21-GAP-01398":{"line":4653,"offset":828052,"length":179,"previous":"M21-GAP-01397","next":"M21-GAP-01399"},"M21-GAP-01399":{"line":4654,"offset":828231,"length":179,"previous":"M21-GAP-01398","next":"M21-GAP-01400"},"M21-GAP-01400":{"line":4655,"offset":828410,"length":179,"previous":"M21-GAP-01399","next":"M21-GAP-01401"},"M21-GAP-01401":{"line":4656,"offset":828589,"length":179,"previous":"M21-GAP-01400","next":"M21-GAP-01402"},"M21-GAP-01402":{"line":4657,"offset":828768,"length":179,"previous":"M21-GAP-01401","next":"M21-GAP-01403"},"M21-GAP-01403":{"line":4658,"offset":828947,"length":179,"previous":"M21-GAP-01402","next":"M21-GAP-01404"},"M21-GAP-01404":{"line":4659,"offset":829126,"length":179,"previous":"M21-GAP-01403","next":"M21-GAP-01405"},"M21-GAP-01405":{"line":4660,"offset":829305,"length":179,"previous":"M21-GAP-01404","next":"M21-GAP-01406"},"M21-GAP-01406":{"line":4661,"offset":829484,"length":179,"previous":"M21-GAP-01405","next":"M21-GAP-01407"},"M21-GAP-01407":{"line":4662,"offset":829663,"length":178,"previous":"M21-GAP-01406","next":"M21-GAP-01408"},"M21-GAP-01408":{"line":4663,"offset":829841,"length":179,"previous":"M21-GAP-01407","next":"M21-GAP-01409"},"M21-GAP-01409":{"line":4664,"offset":830020,"length":179,"previous":"M21-GAP-01408","next":"M21-GAP-01410"},"M21-GAP-01410":{"line":4665,"offset":830199,"length":179,"previous":"M21-GAP-01409","next":"M21-GAP-01411"},"M21-GAP-01411":{"line":4666,"offset":830378,"length":179,"previous":"M21-GAP-01410","next":"M21-GAP-01412"},"M21-GAP-01412":{"line":4667,"offset":830557,"length":179,"previous":"M21-GAP-01411","next":"M21-GAP-01413"},"M21-GAP-01413":{"line":4668,"offset":830736,"length":179,"previous":"M21-GAP-01412","next":"M21-GAP-01414"},"M21-GAP-01414":{"line":4669,"offset":830915,"length":178,"previous":"M21-GAP-01413","next":"M21-GAP-01415"},"M21-GAP-01415":{"line":4670,"offset":831093,"length":178,"previous":"M21-GAP-01414","next":"M21-GAP-01416"},"M21-GAP-01416":{"line":4671,"offset":831271,"length":178,"previous":"M21-GAP-01415","next":"M21-GAP-01417"},"M21-GAP-01417":{"line":4672,"offset":831449,"length":178,"previous":"M21-GAP-01416","next":"M21-GAP-01418"},"M21-GAP-01418":{"line":4673,"offset":831627,"length":178,"previous":"M21-GAP-01417","next":"M21-GAP-01419"},"M21-GAP-01419":{"line":4674,"offset":831805,"length":178,"previous":"M21-GAP-01418","next":"M21-GAP-01420"},"M21-GAP-01420":{"line":4675,"offset":831983,"length":178,"previous":"M21-GAP-01419","next":"M21-GAP-01421"},"M21-GAP-01421":{"line":4676,"offset":832161,"length":179,"previous":"M21-GAP-01420","next":"M21-GAP-01422"},"M21-GAP-01422":{"line":4677,"offset":832340,"length":179,"previous":"M21-GAP-01421","next":"M21-GAP-01423"},"M21-GAP-01423":{"line":4678,"offset":832519,"length":180,"previous":"M21-GAP-01422","next":"M21-GAP-01424"},"M21-GAP-01424":{"line":4679,"offset":832699,"length":180,"previous":"M21-GAP-01423","next":"M21-GAP-01425"},"M21-GAP-01425":{"line":4680,"offset":832879,"length":180,"previous":"M21-GAP-01424","next":"M21-GAP-01426"},"M21-GAP-01426":{"line":4681,"offset":833059,"length":180,"previous":"M21-GAP-01425","next":"M21-GAP-01427"},"M21-GAP-01427":{"line":4682,"offset":833239,"length":180,"previous":"M21-GAP-01426","next":"M21-GAP-01428"},"M21-GAP-01428":{"line":4683,"offset":833419,"length":180,"previous":"M21-GAP-01427","next":"M21-GAP-01429"},"M21-GAP-01429":{"line":4684,"offset":833599,"length":180,"previous":"M21-GAP-01428","next":"M21-GAP-01430"},"M21-GAP-01430":{"line":4685,"offset":833779,"length":180,"previous":"M21-GAP-01429","next":"M21-GAP-01431"},"M21-GAP-01431":{"line":4686,"offset":833959,"length":180,"previous":"M21-GAP-01430","next":"M21-GAP-01432"},"M21-GAP-01432":{"line":4687,"offset":834139,"length":180,"previous":"M21-GAP-01431","next":"M21-GAP-01433"},"M21-GAP-01433":{"line":4688,"offset":834319,"length":179,"previous":"M21-GAP-01432","next":"M21-GAP-01434"},"M21-GAP-01434":{"line":4689,"offset":834498,"length":180,"previous":"M21-GAP-01433","next":"M21-GAP-01435"},"M21-GAP-01435":{"line":4690,"offset":834678,"length":180,"previous":"M21-GAP-01434","next":"M21-GAP-01436"},"M21-GAP-01436":{"line":4691,"offset":834858,"length":180,"previous":"M21-GAP-01435","next":"M21-GAP-01437"},"M21-GAP-01437":{"line":4692,"offset":835038,"length":180,"previous":"M21-GAP-01436","next":"M21-GAP-01438"},"M21-GAP-01438":{"line":4693,"offset":835218,"length":180,"previous":"M21-GAP-01437","next":"M21-GAP-01439"},"M21-GAP-01439":{"line":4694,"offset":835398,"length":180,"previous":"M21-GAP-01438","next":"M21-GAP-01440"},"M21-GAP-01440":{"line":4695,"offset":835578,"length":180,"previous":"M21-GAP-01439","next":"M21-GAP-01441"},"M21-GAP-01441":{"line":4696,"offset":835758,"length":180,"previous":"M21-GAP-01440","next":"M21-GAP-01442"},"M21-GAP-01442":{"line":4697,"offset":835938,"length":180,"previous":"M21-GAP-01441","next":"M21-GAP-01443"},"M21-GAP-01443":{"line":4698,"offset":836118,"length":180,"previous":"M21-GAP-01442","next":"M21-GAP-01444"},"M21-GAP-01444":{"line":4699,"offset":836298,"length":179,"previous":"M21-GAP-01443","next":"M21-GAP-01445"},"M21-GAP-01445":{"line":4700,"offset":836477,"length":180,"previous":"M21-GAP-01444","next":"M21-GAP-01446"},"M21-GAP-01446":{"line":4701,"offset":836657,"length":180,"previous":"M21-GAP-01445","next":"M21-GAP-01447"},"M21-GAP-01447":{"line":4702,"offset":836837,"length":180,"previous":"M21-GAP-01446","next":"M21-GAP-01448"},"M21-GAP-01448":{"line":4703,"offset":837017,"length":180,"previous":"M21-GAP-01447","next":"M21-GAP-01449"},"M21-GAP-01449":{"line":4704,"offset":837197,"length":180,"previous":"M21-GAP-01448","next":"M21-GAP-01450"},"M21-GAP-01450":{"line":4705,"offset":837377,"length":180,"previous":"M21-GAP-01449","next":"M21-GAP-01451"},"M21-GAP-01451":{"line":4706,"offset":837557,"length":180,"previous":"M21-GAP-01450","next":"M21-GAP-01452"},"M21-GAP-01452":{"line":4707,"offset":837737,"length":180,"previous":"M21-GAP-01451","next":"M21-GAP-01453"},"M21-GAP-01453":{"line":4708,"offset":837917,"length":180,"previous":"M21-GAP-01452","next":"M21-GAP-01454"},"M21-GAP-01454":{"line":4709,"offset":838097,"length":180,"previous":"M21-GAP-01453","next":"M21-GAP-01455"},"M21-GAP-01455":{"line":4710,"offset":838277,"length":179,"previous":"M21-GAP-01454","next":"M21-GAP-01456"},"M21-GAP-01456":{"line":4711,"offset":838456,"length":180,"previous":"M21-GAP-01455","next":"M21-GAP-01457"},"M21-GAP-01457":{"line":4712,"offset":838636,"length":180,"previous":"M21-GAP-01456","next":"M21-GAP-01458"},"M21-GAP-01458":{"line":4713,"offset":838816,"length":180,"previous":"M21-GAP-01457","next":"M21-GAP-01459"},"M21-GAP-01459":{"line":4714,"offset":838996,"length":180,"previous":"M21-GAP-01458","next":"M21-GAP-01460"},"M21-GAP-01460":{"line":4715,"offset":839176,"length":180,"previous":"M21-GAP-01459","next":"M21-GAP-01461"},"M21-GAP-01461":{"line":4716,"offset":839356,"length":180,"previous":"M21-GAP-01460","next":"M21-GAP-01462"},"M21-GAP-01462":{"line":4717,"offset":839536,"length":180,"previous":"M21-GAP-01461","next":"M21-GAP-01463"},"M21-GAP-01463":{"line":4718,"offset":839716,"length":180,"previous":"M21-GAP-01462","next":"M21-GAP-01464"},"M21-GAP-01464":{"line":4719,"offset":839896,"length":180,"previous":"M21-GAP-01463","next":"M21-GAP-01465"},"M21-GAP-01465":{"line":4720,"offset":840076,"length":180,"previous":"M21-GAP-01464","next":"M21-GAP-01466"},"M21-GAP-01466":{"line":4721,"offset":840256,"length":179,"previous":"M21-GAP-01465","next":"M21-GAP-01467"},"M21-GAP-01467":{"line":4722,"offset":840435,"length":180,"previous":"M21-GAP-01466","next":"M21-GAP-01468"},"M21-GAP-01468":{"line":4723,"offset":840615,"length":179,"previous":"M21-GAP-01467","next":"M21-GAP-01469"},"M21-GAP-01469":{"line":4724,"offset":840794,"length":179,"previous":"M21-GAP-01468","next":"M21-GAP-01470"},"M21-GAP-01470":{"line":4725,"offset":840973,"length":179,"previous":"M21-GAP-01469","next":"M21-GAP-01471"},"M21-GAP-01471":{"line":4726,"offset":841152,"length":179,"previous":"M21-GAP-01470","next":"M21-GAP-01472"},"M21-GAP-01472":{"line":4727,"offset":841331,"length":170,"previous":"M21-GAP-01471","next":"M21-GAP-01473"},"M21-GAP-01473":{"line":4728,"offset":841501,"length":170,"previous":"M21-GAP-01472","next":"M21-GAP-01474"},"M21-GAP-01474":{"line":4729,"offset":841671,"length":171,"previous":"M21-GAP-01473","next":"M21-GAP-01475"},"M21-GAP-01475":{"line":4730,"offset":841842,"length":171,"previous":"M21-GAP-01474","next":"M21-GAP-01476"},"M21-GAP-01476":{"line":4731,"offset":842013,"length":171,"previous":"M21-GAP-01475","next":"M21-GAP-01477"},"M21-GAP-01477":{"line":4732,"offset":842184,"length":171,"previous":"M21-GAP-01476","next":"M21-GAP-01478"},"M21-GAP-01478":{"line":4733,"offset":842355,"length":170,"previous":"M21-GAP-01477","next":"M21-GAP-01479"},"M21-GAP-01479":{"line":4734,"offset":842525,"length":170,"previous":"M21-GAP-01478","next":"M21-GAP-01480"},"M21-GAP-01480":{"line":4735,"offset":842695,"length":170,"previous":"M21-GAP-01479","next":"M21-GAP-01481"},"M21-GAP-01481":{"line":4736,"offset":842865,"length":170,"previous":"M21-GAP-01480","next":"M21-GAP-01482"},"M21-GAP-01482":{"line":4737,"offset":843035,"length":170,"previous":"M21-GAP-01481","next":"M21-GAP-01483"},"M21-GAP-01483":{"line":4738,"offset":843205,"length":170,"previous":"M21-GAP-01482","next":"M21-GAP-01484"},"M21-GAP-01484":{"line":4739,"offset":843375,"length":170,"previous":"M21-GAP-01483","next":"M21-GAP-01485"},"M21-GAP-01485":{"line":4740,"offset":843545,"length":170,"previous":"M21-GAP-01484","next":"M21-GAP-01486"},"M21-GAP-01486":{"line":4741,"offset":843715,"length":193,"previous":"M21-GAP-01485","next":"M21-GAP-01487"},"M21-GAP-01487":{"line":4742,"offset":843908,"length":193,"previous":"M21-GAP-01486","next":"M21-GAP-01488"},"M21-GAP-01488":{"line":4743,"offset":844101,"length":193,"previous":"M21-GAP-01487","next":"M21-GAP-01489"},"M21-GAP-01489":{"line":4744,"offset":844294,"length":193,"previous":"M21-GAP-01488","next":"M21-GAP-01490"},"M21-GAP-01490":{"line":4745,"offset":844487,"length":193,"previous":"M21-GAP-01489","next":"M21-GAP-01491"},"M21-GAP-01491":{"line":4746,"offset":844680,"length":193,"previous":"M21-GAP-01490","next":"M21-GAP-01492"},"M21-GAP-01492":{"line":4747,"offset":844873,"length":193,"previous":"M21-GAP-01491","next":"M21-GAP-01493"},"M21-GAP-01493":{"line":4748,"offset":845066,"length":187,"previous":"M21-GAP-01492","next":"M21-GAP-01494"},"M21-GAP-01494":{"line":4749,"offset":845253,"length":187,"previous":"M21-GAP-01493","next":"M21-GAP-01495"},"M21-GAP-01495":{"line":4750,"offset":845440,"length":188,"previous":"M21-GAP-01494","next":"M21-GAP-01496"},"M21-GAP-01496":{"line":4751,"offset":845628,"length":188,"previous":"M21-GAP-01495","next":"M21-GAP-01497"},"M21-GAP-01497":{"line":4752,"offset":845816,"length":188,"previous":"M21-GAP-01496","next":"M21-GAP-01498"},"M21-GAP-01498":{"line":4753,"offset":846004,"length":188,"previous":"M21-GAP-01497","next":"M21-GAP-01499"},"M21-GAP-01499":{"line":4754,"offset":846192,"length":188,"previous":"M21-GAP-01498","next":"M21-GAP-01500"},"M21-GAP-01500":{"line":4755,"offset":846380,"length":188,"previous":"M21-GAP-01499","next":"M21-GAP-01501"},"M21-GAP-01501":{"line":4756,"offset":846568,"length":188,"previous":"M21-GAP-01500","next":"M21-GAP-01502"},"M21-GAP-01502":{"line":4757,"offset":846756,"length":188,"previous":"M21-GAP-01501","next":"M21-GAP-01503"},"M21-GAP-01503":{"line":4758,"offset":846944,"length":188,"previous":"M21-GAP-01502","next":"M21-GAP-01504"},"M21-GAP-01504":{"line":4759,"offset":847132,"length":188,"previous":"M21-GAP-01503","next":"M21-GAP-01505"},"M21-GAP-01505":{"line":4760,"offset":847320,"length":187,"previous":"M21-GAP-01504","next":"M21-GAP-01506"},"M21-GAP-01506":{"line":4761,"offset":847507,"length":188,"previous":"M21-GAP-01505","next":"M21-GAP-01507"},"M21-GAP-01507":{"line":4762,"offset":847695,"length":188,"previous":"M21-GAP-01506","next":"M21-GAP-01508"},"M21-GAP-01508":{"line":4763,"offset":847883,"length":188,"previous":"M21-GAP-01507","next":"M21-GAP-01509"},"M21-GAP-01509":{"line":4764,"offset":848071,"length":188,"previous":"M21-GAP-01508","next":"M21-GAP-01510"},"M21-GAP-01510":{"line":4765,"offset":848259,"length":188,"previous":"M21-GAP-01509","next":"M21-GAP-01511"},"M21-GAP-01511":{"line":4766,"offset":848447,"length":187,"previous":"M21-GAP-01510","next":"M21-GAP-01512"},"M21-GAP-01512":{"line":4767,"offset":848634,"length":187,"previous":"M21-GAP-01511","next":"M21-GAP-01513"},"M21-GAP-01513":{"line":4768,"offset":848821,"length":187,"previous":"M21-GAP-01512","next":"M21-GAP-01514"},"M21-GAP-01514":{"line":4769,"offset":849008,"length":187,"previous":"M21-GAP-01513","next":"M21-GAP-01515"},"M21-GAP-01515":{"line":4770,"offset":849195,"length":187,"previous":"M21-GAP-01514","next":"M21-GAP-01516"},"M21-GAP-01516":{"line":4771,"offset":849382,"length":187,"previous":"M21-GAP-01515","next":"M21-GAP-01517"},"M21-GAP-01517":{"line":4772,"offset":849569,"length":187,"previous":"M21-GAP-01516","next":"M21-GAP-01518"},"M21-GAP-01518":{"line":4773,"offset":849756,"length":174,"previous":"M21-GAP-01517","next":"M21-GAP-01519"},"M21-GAP-01519":{"line":4774,"offset":849930,"length":174,"previous":"M21-GAP-01518","next":"M21-GAP-01520"},"M21-GAP-01520":{"line":4775,"offset":850104,"length":175,"previous":"M21-GAP-01519","next":"M21-GAP-01521"},"M21-GAP-01521":{"line":4776,"offset":850279,"length":175,"previous":"M21-GAP-01520","next":"M21-GAP-01522"},"M21-GAP-01522":{"line":4777,"offset":850454,"length":175,"previous":"M21-GAP-01521","next":"M21-GAP-01523"},"M21-GAP-01523":{"line":4778,"offset":850629,"length":175,"previous":"M21-GAP-01522","next":"M21-GAP-01524"},"M21-GAP-01524":{"line":4779,"offset":850804,"length":175,"previous":"M21-GAP-01523","next":"M21-GAP-01525"},"M21-GAP-01525":{"line":4780,"offset":850979,"length":175,"previous":"M21-GAP-01524","next":"M21-GAP-01526"},"M21-GAP-01526":{"line":4781,"offset":851154,"length":175,"previous":"M21-GAP-01525","next":"M21-GAP-01527"},"M21-GAP-01527":{"line":4782,"offset":851329,"length":175,"previous":"M21-GAP-01526","next":"M21-GAP-01528"},"M21-GAP-01528":{"line":4783,"offset":851504,"length":175,"previous":"M21-GAP-01527","next":"M21-GAP-01529"},"M21-GAP-01529":{"line":4784,"offset":851679,"length":175,"previous":"M21-GAP-01528","next":"M21-GAP-01530"},"M21-GAP-01530":{"line":4785,"offset":851854,"length":174,"previous":"M21-GAP-01529","next":"M21-GAP-01531"},"M21-GAP-01531":{"line":4786,"offset":852028,"length":175,"previous":"M21-GAP-01530","next":"M21-GAP-01532"},"M21-GAP-01532":{"line":4787,"offset":852203,"length":174,"previous":"M21-GAP-01531","next":"M21-GAP-01533"},"M21-GAP-01533":{"line":4788,"offset":852377,"length":174,"previous":"M21-GAP-01532","next":"M21-GAP-01534"},"M21-GAP-01534":{"line":4789,"offset":852551,"length":174,"previous":"M21-GAP-01533","next":"M21-GAP-01535"},"M21-GAP-01535":{"line":4790,"offset":852725,"length":174,"previous":"M21-GAP-01534","next":"M21-GAP-01536"},"M21-GAP-01536":{"line":4791,"offset":852899,"length":174,"previous":"M21-GAP-01535","next":"M21-GAP-01537"},"M21-GAP-01537":{"line":4792,"offset":853073,"length":174,"previous":"M21-GAP-01536","next":"M21-GAP-01538"},"M21-GAP-01538":{"line":4793,"offset":853247,"length":174,"previous":"M21-GAP-01537","next":"M21-GAP-01539"},"M21-GAP-01539":{"line":4794,"offset":853421,"length":174,"previous":"M21-GAP-01538","next":"M21-GAP-01540"},"M21-GAP-01540":{"line":4795,"offset":853595,"length":174,"previous":"M21-GAP-01539","next":"M21-GAP-01541"},"M21-GAP-01541":{"line":4796,"offset":853769,"length":175,"previous":"M21-GAP-01540","next":"M21-GAP-01542"},"M21-GAP-01542":{"line":4797,"offset":853944,"length":175,"previous":"M21-GAP-01541","next":"M21-GAP-01543"},"M21-GAP-01543":{"line":4798,"offset":854119,"length":175,"previous":"M21-GAP-01542","next":"M21-GAP-01544"},"M21-GAP-01544":{"line":4799,"offset":854294,"length":175,"previous":"M21-GAP-01543","next":"M21-GAP-01545"},"M21-GAP-01545":{"line":4800,"offset":854469,"length":175,"previous":"M21-GAP-01544","next":"M21-GAP-01546"},"M21-GAP-01546":{"line":4801,"offset":854644,"length":175,"previous":"M21-GAP-01545","next":"M21-GAP-01547"},"M21-GAP-01547":{"line":4802,"offset":854819,"length":175,"previous":"M21-GAP-01546","next":"M21-GAP-01548"},"M21-GAP-01548":{"line":4803,"offset":854994,"length":175,"previous":"M21-GAP-01547","next":"M21-GAP-01549"},"M21-GAP-01549":{"line":4804,"offset":855169,"length":175,"previous":"M21-GAP-01548","next":"M21-GAP-01550"},"M21-GAP-01550":{"line":4805,"offset":855344,"length":175,"previous":"M21-GAP-01549","next":"M21-GAP-01551"},"M21-GAP-01551":{"line":4806,"offset":855519,"length":174,"previous":"M21-GAP-01550","next":"M21-GAP-01552"},"M21-GAP-01552":{"line":4807,"offset":855693,"length":175,"previous":"M21-GAP-01551","next":"M21-GAP-01553"},"M21-GAP-01553":{"line":4808,"offset":855868,"length":175,"previous":"M21-GAP-01552","next":"M21-GAP-01554"},"M21-GAP-01554":{"line":4809,"offset":856043,"length":175,"previous":"M21-GAP-01553","next":"M21-GAP-01555"},"M21-GAP-01555":{"line":4810,"offset":856218,"length":175,"previous":"M21-GAP-01554","next":"M21-GAP-01556"},"M21-GAP-01556":{"line":4811,"offset":856393,"length":175,"previous":"M21-GAP-01555","next":"M21-GAP-01557"},"M21-GAP-01557":{"line":4812,"offset":856568,"length":174,"previous":"M21-GAP-01556","next":"M21-GAP-01558"},"M21-GAP-01558":{"line":4813,"offset":856742,"length":174,"previous":"M21-GAP-01557","next":"M21-GAP-01559"},"M21-GAP-01559":{"line":4814,"offset":856916,"length":174,"previous":"M21-GAP-01558","next":"M21-GAP-01560"},"M21-GAP-01560":{"line":4815,"offset":857090,"length":174,"previous":"M21-GAP-01559","next":"M21-GAP-01561"},"M21-GAP-01561":{"line":4816,"offset":857264,"length":174,"previous":"M21-GAP-01560","next":"M21-GAP-01562"},"M21-GAP-01562":{"line":4817,"offset":857438,"length":174,"previous":"M21-GAP-01561","next":"M21-GAP-01563"},"M21-GAP-01563":{"line":4818,"offset":857612,"length":174,"previous":"M21-GAP-01562","next":"M21-GAP-01564"},"M21-GAP-01564":{"line":4819,"offset":857786,"length":179,"previous":"M21-GAP-01563","next":"M21-GAP-01565"},"M21-GAP-01565":{"line":4820,"offset":857965,"length":179,"previous":"M21-GAP-01564","next":"M21-GAP-01566"},"M21-GAP-01566":{"line":4821,"offset":858144,"length":180,"previous":"M21-GAP-01565","next":"M21-GAP-01567"},"M21-GAP-01567":{"line":4822,"offset":858324,"length":180,"previous":"M21-GAP-01566","next":"M21-GAP-01568"},"M21-GAP-01568":{"line":4823,"offset":858504,"length":180,"previous":"M21-GAP-01567","next":"M21-GAP-01569"},"M21-GAP-01569":{"line":4824,"offset":858684,"length":180,"previous":"M21-GAP-01568","next":"M21-GAP-01570"},"M21-GAP-01570":{"line":4825,"offset":858864,"length":180,"previous":"M21-GAP-01569","next":"M21-GAP-01571"},"M21-GAP-01571":{"line":4826,"offset":859044,"length":180,"previous":"M21-GAP-01570","next":"M21-GAP-01572"},"M21-GAP-01572":{"line":4827,"offset":859224,"length":180,"previous":"M21-GAP-01571","next":"M21-GAP-01573"},"M21-GAP-01573":{"line":4828,"offset":859404,"length":180,"previous":"M21-GAP-01572","next":"M21-GAP-01574"},"M21-GAP-01574":{"line":4829,"offset":859584,"length":180,"previous":"M21-GAP-01573","next":"M21-GAP-01575"},"M21-GAP-01575":{"line":4830,"offset":859764,"length":180,"previous":"M21-GAP-01574","next":"M21-GAP-01576"},"M21-GAP-01576":{"line":4831,"offset":859944,"length":179,"previous":"M21-GAP-01575","next":"M21-GAP-01577"},"M21-GAP-01577":{"line":4832,"offset":860123,"length":180,"previous":"M21-GAP-01576","next":"M21-GAP-01578"},"M21-GAP-01578":{"line":4833,"offset":860303,"length":180,"previous":"M21-GAP-01577","next":"M21-GAP-01579"},"M21-GAP-01579":{"line":4834,"offset":860483,"length":180,"previous":"M21-GAP-01578","next":"M21-GAP-01580"},"M21-GAP-01580":{"line":4835,"offset":860663,"length":180,"previous":"M21-GAP-01579","next":"M21-GAP-01581"},"M21-GAP-01581":{"line":4836,"offset":860843,"length":180,"previous":"M21-GAP-01580","next":"M21-GAP-01582"},"M21-GAP-01582":{"line":4837,"offset":861023,"length":180,"previous":"M21-GAP-01581","next":"M21-GAP-01583"},"M21-GAP-01583":{"line":4838,"offset":861203,"length":180,"previous":"M21-GAP-01582","next":"M21-GAP-01584"},"M21-GAP-01584":{"line":4839,"offset":861383,"length":180,"previous":"M21-GAP-01583","next":"M21-GAP-01585"},"M21-GAP-01585":{"line":4840,"offset":861563,"length":180,"previous":"M21-GAP-01584","next":"M21-GAP-01586"},"M21-GAP-01586":{"line":4841,"offset":861743,"length":180,"previous":"M21-GAP-01585","next":"M21-GAP-01587"},"M21-GAP-01587":{"line":4842,"offset":861923,"length":179,"previous":"M21-GAP-01586","next":"M21-GAP-01588"},"M21-GAP-01588":{"line":4843,"offset":862102,"length":180,"previous":"M21-GAP-01587","next":"M21-GAP-01589"},"M21-GAP-01589":{"line":4844,"offset":862282,"length":180,"previous":"M21-GAP-01588","next":"M21-GAP-01590"},"M21-GAP-01590":{"line":4845,"offset":862462,"length":180,"previous":"M21-GAP-01589","next":"M21-GAP-01591"},"M21-GAP-01591":{"line":4846,"offset":862642,"length":180,"previous":"M21-GAP-01590","next":"M21-GAP-01592"},"M21-GAP-01592":{"line":4847,"offset":862822,"length":180,"previous":"M21-GAP-01591","next":"M21-GAP-01593"},"M21-GAP-01593":{"line":4848,"offset":863002,"length":180,"previous":"M21-GAP-01592","next":"M21-GAP-01594"},"M21-GAP-01594":{"line":4849,"offset":863182,"length":180,"previous":"M21-GAP-01593","next":"M21-GAP-01595"},"M21-GAP-01595":{"line":4850,"offset":863362,"length":180,"previous":"M21-GAP-01594","next":"M21-GAP-01596"},"M21-GAP-01596":{"line":4851,"offset":863542,"length":180,"previous":"M21-GAP-01595","next":"M21-GAP-01597"},"M21-GAP-01597":{"line":4852,"offset":863722,"length":180,"previous":"M21-GAP-01596","next":"M21-GAP-01598"},"M21-GAP-01598":{"line":4853,"offset":863902,"length":179,"previous":"M21-GAP-01597","next":"M21-GAP-01599"},"M21-GAP-01599":{"line":4854,"offset":864081,"length":180,"previous":"M21-GAP-01598","next":"M21-GAP-01600"},"M21-GAP-01600":{"line":4855,"offset":864261,"length":180,"previous":"M21-GAP-01599","next":"M21-GAP-01601"},"M21-GAP-01601":{"line":4856,"offset":864441,"length":180,"previous":"M21-GAP-01600","next":"M21-GAP-01602"},"M21-GAP-01602":{"line":4857,"offset":864621,"length":180,"previous":"M21-GAP-01601","next":"M21-GAP-01603"},"M21-GAP-01603":{"line":4858,"offset":864801,"length":180,"previous":"M21-GAP-01602","next":"M21-GAP-01604"},"M21-GAP-01604":{"line":4859,"offset":864981,"length":180,"previous":"M21-GAP-01603","next":"M21-GAP-01605"},"M21-GAP-01605":{"line":4860,"offset":865161,"length":180,"previous":"M21-GAP-01604","next":"M21-GAP-01606"},"M21-GAP-01606":{"line":4861,"offset":865341,"length":180,"previous":"M21-GAP-01605","next":"M21-GAP-01607"},"M21-GAP-01607":{"line":4862,"offset":865521,"length":179,"previous":"M21-GAP-01606","next":"M21-GAP-01608"},"M21-GAP-01608":{"line":4863,"offset":865700,"length":179,"previous":"M21-GAP-01607","next":"M21-GAP-01609"},"M21-GAP-01609":{"line":4864,"offset":865879,"length":179,"previous":"M21-GAP-01608","next":"M21-GAP-01610"},"M21-GAP-01610":{"line":4865,"offset":866058,"length":179,"previous":"M21-GAP-01609","next":"M21-GAP-01611"},"M21-GAP-01611":{"line":4866,"offset":866237,"length":179,"previous":"M21-GAP-01610","next":"M21-GAP-01612"},"M21-GAP-01612":{"line":4867,"offset":866416,"length":188,"previous":"M21-GAP-01611","next":"M21-GAP-01613"},"M21-GAP-01613":{"line":4868,"offset":866604,"length":188,"previous":"M21-GAP-01612","next":"M21-GAP-01614"},"M21-GAP-01614":{"line":4869,"offset":866792,"length":188,"previous":"M21-GAP-01613","next":"M21-GAP-01615"},"M21-GAP-01615":{"line":4870,"offset":866980,"length":188,"previous":"M21-GAP-01614","next":"M21-GAP-01616"},"M21-GAP-01616":{"line":4871,"offset":867168,"length":188,"previous":"M21-GAP-01615","next":"M21-GAP-01617"},"M21-GAP-01617":{"line":4872,"offset":867356,"length":188,"previous":"M21-GAP-01616","next":"M21-GAP-01618"},"M21-GAP-01618":{"line":4873,"offset":867544,"length":171,"previous":"M21-GAP-01617","next":"M21-GAP-01619"},"M21-GAP-01619":{"line":4874,"offset":867715,"length":171,"previous":"M21-GAP-01618","next":"M21-GAP-01620"},"M21-GAP-01620":{"line":4875,"offset":867886,"length":172,"previous":"M21-GAP-01619","next":"M21-GAP-01621"},"M21-GAP-01621":{"line":4876,"offset":868058,"length":172,"previous":"M21-GAP-01620","next":"M21-GAP-01622"},"M21-GAP-01622":{"line":4877,"offset":868230,"length":172,"previous":"M21-GAP-01621","next":"M21-GAP-01623"},"M21-GAP-01623":{"line":4878,"offset":868402,"length":172,"previous":"M21-GAP-01622","next":"M21-GAP-01624"},"M21-GAP-01624":{"line":4879,"offset":868574,"length":172,"previous":"M21-GAP-01623","next":"M21-GAP-01625"},"M21-GAP-01625":{"line":4880,"offset":868746,"length":172,"previous":"M21-GAP-01624","next":"M21-GAP-01626"},"M21-GAP-01626":{"line":4881,"offset":868918,"length":172,"previous":"M21-GAP-01625","next":"M21-GAP-01627"},"M21-GAP-01627":{"line":4882,"offset":869090,"length":172,"previous":"M21-GAP-01626","next":"M21-GAP-01628"},"M21-GAP-01628":{"line":4883,"offset":869262,"length":172,"previous":"M21-GAP-01627","next":"M21-GAP-01629"},"M21-GAP-01629":{"line":4884,"offset":869434,"length":172,"previous":"M21-GAP-01628","next":"M21-GAP-01630"},"M21-GAP-01630":{"line":4885,"offset":869606,"length":171,"previous":"M21-GAP-01629","next":"M21-GAP-01631"},"M21-GAP-01631":{"line":4886,"offset":869777,"length":172,"previous":"M21-GAP-01630","next":"M21-GAP-01632"},"M21-GAP-01632":{"line":4887,"offset":869949,"length":172,"previous":"M21-GAP-01631","next":"M21-GAP-01633"},"M21-GAP-01633":{"line":4888,"offset":870121,"length":172,"previous":"M21-GAP-01632","next":"M21-GAP-01634"},"M21-GAP-01634":{"line":4889,"offset":870293,"length":172,"previous":"M21-GAP-01633","next":"M21-GAP-01635"},"M21-GAP-01635":{"line":4890,"offset":870465,"length":172,"previous":"M21-GAP-01634","next":"M21-GAP-01636"},"M21-GAP-01636":{"line":4891,"offset":870637,"length":172,"previous":"M21-GAP-01635","next":"M21-GAP-01637"},"M21-GAP-01637":{"line":4892,"offset":870809,"length":172,"previous":"M21-GAP-01636","next":"M21-GAP-01638"},"M21-GAP-01638":{"line":4893,"offset":870981,"length":172,"previous":"M21-GAP-01637","next":"M21-GAP-01639"},"M21-GAP-01639":{"line":4894,"offset":871153,"length":172,"previous":"M21-GAP-01638","next":"M21-GAP-01640"},"M21-GAP-01640":{"line":4895,"offset":871325,"length":172,"previous":"M21-GAP-01639","next":"M21-GAP-01641"},"M21-GAP-01641":{"line":4896,"offset":871497,"length":171,"previous":"M21-GAP-01640","next":"M21-GAP-01642"},"M21-GAP-01642":{"line":4897,"offset":871668,"length":172,"previous":"M21-GAP-01641","next":"M21-GAP-01643"},"M21-GAP-01643":{"line":4898,"offset":871840,"length":172,"previous":"M21-GAP-01642","next":"M21-GAP-01644"},"M21-GAP-01644":{"line":4899,"offset":872012,"length":172,"previous":"M21-GAP-01643","next":"M21-GAP-01645"},"M21-GAP-01645":{"line":4900,"offset":872184,"length":172,"previous":"M21-GAP-01644","next":"M21-GAP-01646"},"M21-GAP-01646":{"line":4901,"offset":872356,"length":172,"previous":"M21-GAP-01645","next":"M21-GAP-01647"},"M21-GAP-01647":{"line":4902,"offset":872528,"length":172,"previous":"M21-GAP-01646","next":"M21-GAP-01648"},"M21-GAP-01648":{"line":4903,"offset":872700,"length":172,"previous":"M21-GAP-01647","next":"M21-GAP-01649"},"M21-GAP-01649":{"line":4904,"offset":872872,"length":172,"previous":"M21-GAP-01648","next":"M21-GAP-01650"},"M21-GAP-01650":{"line":4905,"offset":873044,"length":172,"previous":"M21-GAP-01649","next":"M21-GAP-01651"},"M21-GAP-01651":{"line":4906,"offset":873216,"length":172,"previous":"M21-GAP-01650","next":"M21-GAP-01652"},"M21-GAP-01652":{"line":4907,"offset":873388,"length":171,"previous":"M21-GAP-01651","next":"M21-GAP-01653"},"M21-GAP-01653":{"line":4908,"offset":873559,"length":172,"previous":"M21-GAP-01652","next":"M21-GAP-01654"},"M21-GAP-01654":{"line":4909,"offset":873731,"length":172,"previous":"M21-GAP-01653","next":"M21-GAP-01655"},"M21-GAP-01655":{"line":4910,"offset":873903,"length":172,"previous":"M21-GAP-01654","next":"M21-GAP-01656"},"M21-GAP-01656":{"line":4911,"offset":874075,"length":172,"previous":"M21-GAP-01655","next":"M21-GAP-01657"},"M21-GAP-01657":{"line":4912,"offset":874247,"length":172,"previous":"M21-GAP-01656","next":"M21-GAP-01658"},"M21-GAP-01658":{"line":4913,"offset":874419,"length":172,"previous":"M21-GAP-01657","next":"M21-GAP-01659"},"M21-GAP-01659":{"line":4914,"offset":874591,"length":172,"previous":"M21-GAP-01658","next":"M21-GAP-01660"},"M21-GAP-01660":{"line":4915,"offset":874763,"length":172,"previous":"M21-GAP-01659","next":"M21-GAP-01661"},"M21-GAP-01661":{"line":4916,"offset":874935,"length":172,"previous":"M21-GAP-01660","next":"M21-GAP-01662"},"M21-GAP-01662":{"line":4917,"offset":875107,"length":172,"previous":"M21-GAP-01661","next":"M21-GAP-01663"},"M21-GAP-01663":{"line":4918,"offset":875279,"length":171,"previous":"M21-GAP-01662","next":"M21-GAP-01664"},"M21-GAP-01664":{"line":4919,"offset":875450,"length":172,"previous":"M21-GAP-01663","next":"M21-GAP-01665"},"M21-GAP-01665":{"line":4920,"offset":875622,"length":172,"previous":"M21-GAP-01664","next":"M21-GAP-01666"},"M21-GAP-01666":{"line":4921,"offset":875794,"length":172,"previous":"M21-GAP-01665","next":"M21-GAP-01667"},"M21-GAP-01667":{"line":4922,"offset":875966,"length":172,"previous":"M21-GAP-01666","next":"M21-GAP-01668"},"M21-GAP-01668":{"line":4923,"offset":876138,"length":172,"previous":"M21-GAP-01667","next":"M21-GAP-01669"},"M21-GAP-01669":{"line":4924,"offset":876310,"length":172,"previous":"M21-GAP-01668","next":"M21-GAP-01670"},"M21-GAP-01670":{"line":4925,"offset":876482,"length":172,"previous":"M21-GAP-01669","next":"M21-GAP-01671"},"M21-GAP-01671":{"line":4926,"offset":876654,"length":172,"previous":"M21-GAP-01670","next":"M21-GAP-01672"},"M21-GAP-01672":{"line":4927,"offset":876826,"length":172,"previous":"M21-GAP-01671","next":"M21-GAP-01673"},"M21-GAP-01673":{"line":4928,"offset":876998,"length":172,"previous":"M21-GAP-01672","next":"M21-GAP-01674"},"M21-GAP-01674":{"line":4929,"offset":877170,"length":171,"previous":"M21-GAP-01673","next":"M21-GAP-01675"},"M21-GAP-01675":{"line":4930,"offset":877341,"length":172,"previous":"M21-GAP-01674","next":"M21-GAP-01676"},"M21-GAP-01676":{"line":4931,"offset":877513,"length":172,"previous":"M21-GAP-01675","next":"M21-GAP-01677"},"M21-GAP-01677":{"line":4932,"offset":877685,"length":172,"previous":"M21-GAP-01676","next":"M21-GAP-01678"},"M21-GAP-01678":{"line":4933,"offset":877857,"length":172,"previous":"M21-GAP-01677","next":"M21-GAP-01679"},"M21-GAP-01679":{"line":4934,"offset":878029,"length":172,"previous":"M21-GAP-01678","next":"M21-GAP-01680"},"M21-GAP-01680":{"line":4935,"offset":878201,"length":172,"previous":"M21-GAP-01679","next":"M21-GAP-01681"},"M21-GAP-01681":{"line":4936,"offset":878373,"length":172,"previous":"M21-GAP-01680","next":"M21-GAP-01682"},"M21-GAP-01682":{"line":4937,"offset":878545,"length":172,"previous":"M21-GAP-01681","next":"M21-GAP-01683"},"M21-GAP-01683":{"line":4938,"offset":878717,"length":172,"previous":"M21-GAP-01682","next":"M21-GAP-01684"},"M21-GAP-01684":{"line":4939,"offset":878889,"length":172,"previous":"M21-GAP-01683","next":"M21-GAP-01685"},"M21-GAP-01685":{"line":4940,"offset":879061,"length":171,"previous":"M21-GAP-01684","next":"M21-GAP-01686"},"M21-GAP-01686":{"line":4941,"offset":879232,"length":172,"previous":"M21-GAP-01685","next":"M21-GAP-01687"},"M21-GAP-01687":{"line":4942,"offset":879404,"length":172,"previous":"M21-GAP-01686","next":"M21-GAP-01688"},"M21-GAP-01688":{"line":4943,"offset":879576,"length":172,"previous":"M21-GAP-01687","next":"M21-GAP-01689"},"M21-GAP-01689":{"line":4944,"offset":879748,"length":172,"previous":"M21-GAP-01688","next":"M21-GAP-01690"},"M21-GAP-01690":{"line":4945,"offset":879920,"length":172,"previous":"M21-GAP-01689","next":"M21-GAP-01691"},"M21-GAP-01691":{"line":4946,"offset":880092,"length":172,"previous":"M21-GAP-01690","next":"M21-GAP-01692"},"M21-GAP-01692":{"line":4947,"offset":880264,"length":172,"previous":"M21-GAP-01691","next":"M21-GAP-01693"},"M21-GAP-01693":{"line":4948,"offset":880436,"length":172,"previous":"M21-GAP-01692","next":"M21-GAP-01694"},"M21-GAP-01694":{"line":4949,"offset":880608,"length":172,"previous":"M21-GAP-01693","next":"M21-GAP-01695"},"M21-GAP-01695":{"line":4950,"offset":880780,"length":172,"previous":"M21-GAP-01694","next":"M21-GAP-01696"},"M21-GAP-01696":{"line":4951,"offset":880952,"length":171,"previous":"M21-GAP-01695","next":"M21-GAP-01697"},"M21-GAP-01697":{"line":4952,"offset":881123,"length":172,"previous":"M21-GAP-01696","next":"M21-GAP-01698"},"M21-GAP-01698":{"line":4953,"offset":881295,"length":172,"previous":"M21-GAP-01697","next":"M21-GAP-01699"},"M21-GAP-01699":{"line":4954,"offset":881467,"length":172,"previous":"M21-GAP-01698","next":"M21-GAP-01700"},"M21-GAP-01700":{"line":4955,"offset":881639,"length":172,"previous":"M21-GAP-01699","next":"M21-GAP-01701"},"M21-GAP-01701":{"line":4956,"offset":881811,"length":172,"previous":"M21-GAP-01700","next":"M21-GAP-01702"},"M21-GAP-01702":{"line":4957,"offset":881983,"length":172,"previous":"M21-GAP-01701","next":"M21-GAP-01703"},"M21-GAP-01703":{"line":4958,"offset":882155,"length":172,"previous":"M21-GAP-01702","next":"M21-GAP-01704"},"M21-GAP-01704":{"line":4959,"offset":882327,"length":172,"previous":"M21-GAP-01703","next":"M21-GAP-01705"},"M21-GAP-01705":{"line":4960,"offset":882499,"length":172,"previous":"M21-GAP-01704","next":"M21-GAP-01706"},"M21-GAP-01706":{"line":4961,"offset":882671,"length":172,"previous":"M21-GAP-01705","next":"M21-GAP-01707"},"M21-GAP-01707":{"line":4962,"offset":882843,"length":171,"previous":"M21-GAP-01706","next":"M21-GAP-01708"},"M21-GAP-01708":{"line":4963,"offset":883014,"length":172,"previous":"M21-GAP-01707","next":"M21-GAP-01709"},"M21-GAP-01709":{"line":4964,"offset":883186,"length":172,"previous":"M21-GAP-01708","next":"M21-GAP-01710"},"M21-GAP-01710":{"line":4965,"offset":883358,"length":172,"previous":"M21-GAP-01709","next":"M21-GAP-01711"},"M21-GAP-01711":{"line":4966,"offset":883530,"length":175,"previous":"M21-GAP-01710","next":"M21-GAP-01712"},"M21-GAP-01712":{"line":4967,"offset":883705,"length":175,"previous":"M21-GAP-01711","next":"M21-GAP-01713"},"M21-GAP-01713":{"line":4968,"offset":883880,"length":176,"previous":"M21-GAP-01712","next":"M21-GAP-01714"},"M21-GAP-01714":{"line":4969,"offset":884056,"length":176,"previous":"M21-GAP-01713","next":"M21-GAP-01715"},"M21-GAP-01715":{"line":4970,"offset":884232,"length":176,"previous":"M21-GAP-01714","next":"M21-GAP-01716"},"M21-GAP-01716":{"line":4971,"offset":884408,"length":176,"previous":"M21-GAP-01715","next":"M21-GAP-01717"},"M21-GAP-01717":{"line":4972,"offset":884584,"length":176,"previous":"M21-GAP-01716","next":"M21-GAP-01718"},"M21-GAP-01718":{"line":4973,"offset":884760,"length":176,"previous":"M21-GAP-01717","next":"M21-GAP-01719"},"M21-GAP-01719":{"line":4974,"offset":884936,"length":176,"previous":"M21-GAP-01718","next":"M21-GAP-01720"},"M21-GAP-01720":{"line":4975,"offset":885112,"length":176,"previous":"M21-GAP-01719","next":"M21-GAP-01721"},"M21-GAP-01721":{"line":4976,"offset":885288,"length":176,"previous":"M21-GAP-01720","next":"M21-GAP-01722"},"M21-GAP-01722":{"line":4977,"offset":885464,"length":176,"previous":"M21-GAP-01721","next":"M21-GAP-01723"},"M21-GAP-01723":{"line":4978,"offset":885640,"length":175,"previous":"M21-GAP-01722","next":"M21-GAP-01724"},"M21-GAP-01724":{"line":4979,"offset":885815,"length":176,"previous":"M21-GAP-01723","next":"M21-GAP-01725"},"M21-GAP-01725":{"line":4980,"offset":885991,"length":176,"previous":"M21-GAP-01724","next":"M21-GAP-01726"},"M21-GAP-01726":{"line":4981,"offset":886167,"length":175,"previous":"M21-GAP-01725","next":"M21-GAP-01727"},"M21-GAP-01727":{"line":4982,"offset":886342,"length":175,"previous":"M21-GAP-01726","next":"M21-GAP-01728"},"M21-GAP-01728":{"line":4983,"offset":886517,"length":175,"previous":"M21-GAP-01727","next":"M21-GAP-01729"},"M21-GAP-01729":{"line":4984,"offset":886692,"length":175,"previous":"M21-GAP-01728","next":"M21-GAP-01730"},"M21-GAP-01730":{"line":4985,"offset":886867,"length":175,"previous":"M21-GAP-01729","next":"M21-GAP-01731"},"M21-GAP-01731":{"line":4986,"offset":887042,"length":175,"previous":"M21-GAP-01730","next":"M21-GAP-01732"},"M21-GAP-01732":{"line":4987,"offset":887217,"length":175,"previous":"M21-GAP-01731","next":"M21-GAP-01733"},"M21-GAP-01733":{"line":4988,"offset":887392,"length":182,"previous":"M21-GAP-01732","next":"M21-GAP-01734"},"M21-GAP-01734":{"line":4989,"offset":887574,"length":182,"previous":"M21-GAP-01733","next":"M21-GAP-01735"},"M21-GAP-01735":{"line":4990,"offset":887756,"length":183,"previous":"M21-GAP-01734","next":"M21-GAP-01736"},"M21-GAP-01736":{"line":4991,"offset":887939,"length":183,"previous":"M21-GAP-01735","next":"M21-GAP-01737"},"M21-GAP-01737":{"line":4992,"offset":888122,"length":183,"previous":"M21-GAP-01736","next":"M21-GAP-01738"},"M21-GAP-01738":{"line":4993,"offset":888305,"length":183,"previous":"M21-GAP-01737","next":"M21-GAP-01739"},"M21-GAP-01739":{"line":4994,"offset":888488,"length":183,"previous":"M21-GAP-01738","next":"M21-GAP-01740"},"M21-GAP-01740":{"line":4995,"offset":888671,"length":183,"previous":"M21-GAP-01739","next":"M21-GAP-01741"},"M21-GAP-01741":{"line":4996,"offset":888854,"length":183,"previous":"M21-GAP-01740","next":"M21-GAP-01742"},"M21-GAP-01742":{"line":4997,"offset":889037,"length":183,"previous":"M21-GAP-01741","next":"M21-GAP-01743"},"M21-GAP-01743":{"line":4998,"offset":889220,"length":183,"previous":"M21-GAP-01742","next":"M21-GAP-01744"},"M21-GAP-01744":{"line":4999,"offset":889403,"length":183,"previous":"M21-GAP-01743","next":"M21-GAP-01745"},"M21-GAP-01745":{"line":5000,"offset":889586,"length":182,"previous":"M21-GAP-01744","next":"M21-GAP-01746"},"M21-GAP-01746":{"line":5001,"offset":889768,"length":183,"previous":"M21-GAP-01745","next":"M21-GAP-01747"},"M21-GAP-01747":{"line":5002,"offset":889951,"length":183,"previous":"M21-GAP-01746","next":"M21-GAP-01748"},"M21-GAP-01748":{"line":5003,"offset":890134,"length":183,"previous":"M21-GAP-01747","next":"M21-GAP-01749"},"M21-GAP-01749":{"line":5004,"offset":890317,"length":183,"previous":"M21-GAP-01748","next":"M21-GAP-01750"},"M21-GAP-01750":{"line":5005,"offset":890500,"length":183,"previous":"M21-GAP-01749","next":"M21-GAP-01751"},"M21-GAP-01751":{"line":5006,"offset":890683,"length":183,"previous":"M21-GAP-01750","next":"M21-GAP-01752"},"M21-GAP-01752":{"line":5007,"offset":890866,"length":183,"previous":"M21-GAP-01751","next":"M21-GAP-01753"},"M21-GAP-01753":{"line":5008,"offset":891049,"length":183,"previous":"M21-GAP-01752","next":"M21-GAP-01754"},"M21-GAP-01754":{"line":5009,"offset":891232,"length":183,"previous":"M21-GAP-01753","next":"M21-GAP-01755"},"M21-GAP-01755":{"line":5010,"offset":891415,"length":183,"previous":"M21-GAP-01754","next":"M21-GAP-01756"},"M21-GAP-01756":{"line":5011,"offset":891598,"length":182,"previous":"M21-GAP-01755","next":"M21-GAP-01757"},"M21-GAP-01757":{"line":5012,"offset":891780,"length":183,"previous":"M21-GAP-01756","next":"M21-GAP-01758"},"M21-GAP-01758":{"line":5013,"offset":891963,"length":183,"previous":"M21-GAP-01757","next":"M21-GAP-01759"},"M21-GAP-01759":{"line":5014,"offset":892146,"length":183,"previous":"M21-GAP-01758","next":"M21-GAP-01760"},"M21-GAP-01760":{"line":5015,"offset":892329,"length":183,"previous":"M21-GAP-01759","next":"M21-GAP-01761"},"M21-GAP-01761":{"line":5016,"offset":892512,"length":183,"previous":"M21-GAP-01760","next":"M21-GAP-01762"},"M21-GAP-01762":{"line":5017,"offset":892695,"length":183,"previous":"M21-GAP-01761","next":"M21-GAP-01763"},"M21-GAP-01763":{"line":5018,"offset":892878,"length":183,"previous":"M21-GAP-01762","next":"M21-GAP-01764"},"M21-GAP-01764":{"line":5019,"offset":893061,"length":183,"previous":"M21-GAP-01763","next":"M21-GAP-01765"},"M21-GAP-01765":{"line":5020,"offset":893244,"length":183,"previous":"M21-GAP-01764","next":"M21-GAP-01766"},"M21-GAP-01766":{"line":5021,"offset":893427,"length":183,"previous":"M21-GAP-01765","next":"M21-GAP-01767"},"M21-GAP-01767":{"line":5022,"offset":893610,"length":182,"previous":"M21-GAP-01766","next":"M21-GAP-01768"},"M21-GAP-01768":{"line":5023,"offset":893792,"length":183,"previous":"M21-GAP-01767","next":"M21-GAP-01769"},"M21-GAP-01769":{"line":5024,"offset":893975,"length":183,"previous":"M21-GAP-01768","next":"M21-GAP-01770"},"M21-GAP-01770":{"line":5025,"offset":894158,"length":183,"previous":"M21-GAP-01769","next":"M21-GAP-01771"},"M21-GAP-01771":{"line":5026,"offset":894341,"length":183,"previous":"M21-GAP-01770","next":"M21-GAP-01772"},"M21-GAP-01772":{"line":5027,"offset":894524,"length":183,"previous":"M21-GAP-01771","next":"M21-GAP-01773"},"M21-GAP-01773":{"line":5028,"offset":894707,"length":183,"previous":"M21-GAP-01772","next":"M21-GAP-01774"},"M21-GAP-01774":{"line":5029,"offset":894890,"length":183,"previous":"M21-GAP-01773","next":"M21-GAP-01775"},"M21-GAP-01775":{"line":5030,"offset":895073,"length":183,"previous":"M21-GAP-01774","next":"M21-GAP-01776"},"M21-GAP-01776":{"line":5031,"offset":895256,"length":183,"previous":"M21-GAP-01775","next":"M21-GAP-01777"},"M21-GAP-01777":{"line":5032,"offset":895439,"length":182,"previous":"M21-GAP-01776","next":"M21-GAP-01778"},"M21-GAP-01778":{"line":5033,"offset":895621,"length":182,"previous":"M21-GAP-01777","next":"M21-GAP-01779"},"M21-GAP-01779":{"line":5034,"offset":895803,"length":182,"previous":"M21-GAP-01778","next":"M21-GAP-01780"},"M21-GAP-01780":{"line":5035,"offset":895985,"length":182,"previous":"M21-GAP-01779","next":"M21-GAP-01781"},"M21-GAP-01781":{"line":5036,"offset":896167,"length":182,"previous":"M21-GAP-01780","next":"M21-GAP-01782"},"M21-GAP-01782":{"line":5037,"offset":896349,"length":183,"previous":"M21-GAP-01781","next":"M21-GAP-01783"},"M21-GAP-01783":{"line":5038,"offset":896532,"length":183,"previous":"M21-GAP-01782","next":"M21-GAP-01784"},"M21-GAP-01784":{"line":5039,"offset":896715,"length":183,"previous":"M21-GAP-01783","next":"M21-GAP-01785"},"M21-GAP-01785":{"line":5040,"offset":896898,"length":183,"previous":"M21-GAP-01784","next":"M21-GAP-01786"},"M21-GAP-01786":{"line":5041,"offset":897081,"length":183,"previous":"M21-GAP-01785","next":"M21-GAP-01787"},"M21-GAP-01787":{"line":5042,"offset":897264,"length":183,"previous":"M21-GAP-01786","next":"M21-GAP-01788"},"M21-GAP-01788":{"line":5043,"offset":897447,"length":182,"previous":"M21-GAP-01787","next":"M21-GAP-01789"},"M21-GAP-01789":{"line":5044,"offset":897629,"length":182,"previous":"M21-GAP-01788","next":"M21-GAP-01790"},"M21-GAP-01790":{"line":5045,"offset":897811,"length":182,"previous":"M21-GAP-01789","next":"M21-GAP-01791"},"M21-GAP-01791":{"line":5046,"offset":897993,"length":182,"previous":"M21-GAP-01790","next":"M21-GAP-01792"},"M21-GAP-01792":{"line":5047,"offset":898175,"length":182,"previous":"M21-GAP-01791","next":"M21-GAP-01793"},"M21-GAP-01793":{"line":5048,"offset":898357,"length":182,"previous":"M21-GAP-01792","next":"M21-GAP-01794"},"M21-GAP-01794":{"line":5049,"offset":898539,"length":182,"previous":"M21-GAP-01793","next":"M21-GAP-01795"},"M21-GAP-01795":{"line":5050,"offset":898721,"length":182,"previous":"M21-GAP-01794","next":"M21-GAP-01796"},"M21-GAP-01796":{"line":5051,"offset":898903,"length":184,"previous":"M21-GAP-01795","next":"M21-GAP-01797"},"M21-GAP-01797":{"line":5052,"offset":899087,"length":184,"previous":"M21-GAP-01796","next":"M21-GAP-01798"},"M21-GAP-01798":{"line":5053,"offset":899271,"length":185,"previous":"M21-GAP-01797","next":"M21-GAP-01799"},"M21-GAP-01799":{"line":5054,"offset":899456,"length":186,"previous":"M21-GAP-01798","next":"M21-GAP-01800"},"M21-GAP-01800":{"line":5055,"offset":899642,"length":186,"previous":"M21-GAP-01799","next":"M21-GAP-01801"},"M21-GAP-01801":{"line":5056,"offset":899828,"length":186,"previous":"M21-GAP-01800","next":"M21-GAP-01802"},"M21-GAP-01802":{"line":5057,"offset":900014,"length":186,"previous":"M21-GAP-01801","next":"M21-GAP-01803"},"M21-GAP-01803":{"line":5058,"offset":900200,"length":185,"previous":"M21-GAP-01802","next":"M21-GAP-01804"},"M21-GAP-01804":{"line":5059,"offset":900385,"length":185,"previous":"M21-GAP-01803","next":"M21-GAP-01805"},"M21-GAP-01805":{"line":5060,"offset":900570,"length":185,"previous":"M21-GAP-01804","next":"M21-GAP-01806"},"M21-GAP-01806":{"line":5061,"offset":900755,"length":185,"previous":"M21-GAP-01805","next":"M21-GAP-01807"},"M21-GAP-01807":{"line":5062,"offset":900940,"length":185,"previous":"M21-GAP-01806","next":"M21-GAP-01808"},"M21-GAP-01808":{"line":5063,"offset":901125,"length":185,"previous":"M21-GAP-01807","next":"M21-GAP-01809"},"M21-GAP-01809":{"line":5064,"offset":901310,"length":185,"previous":"M21-GAP-01808","next":"M21-GAP-01810"},"M21-GAP-01810":{"line":5065,"offset":901495,"length":185,"previous":"M21-GAP-01809","next":"M21-GAP-01811"},"M21-GAP-01811":{"line":5066,"offset":901680,"length":185,"previous":"M21-GAP-01810","next":"M21-GAP-01812"},"M21-GAP-01812":{"line":5067,"offset":901865,"length":184,"previous":"M21-GAP-01811","next":"M21-GAP-01813"},"M21-GAP-01813":{"line":5068,"offset":902049,"length":185,"previous":"M21-GAP-01812","next":"M21-GAP-01814"},"M21-GAP-01814":{"line":5069,"offset":902234,"length":185,"previous":"M21-GAP-01813","next":"M21-GAP-01815"},"M21-GAP-01815":{"line":5070,"offset":902419,"length":185,"previous":"M21-GAP-01814","next":"M21-GAP-01816"},"M21-GAP-01816":{"line":5071,"offset":902604,"length":185,"previous":"M21-GAP-01815","next":"M21-GAP-01817"},"M21-GAP-01817":{"line":5072,"offset":902789,"length":185,"previous":"M21-GAP-01816","next":"M21-GAP-01818"},"M21-GAP-01818":{"line":5073,"offset":902974,"length":185,"previous":"M21-GAP-01817","next":"M21-GAP-01819"},"M21-GAP-01819":{"line":5074,"offset":903159,"length":185,"previous":"M21-GAP-01818","next":"M21-GAP-01820"},"M21-GAP-01820":{"line":5075,"offset":903344,"length":185,"previous":"M21-GAP-01819","next":"M21-GAP-01821"},"M21-GAP-01821":{"line":5076,"offset":903529,"length":185,"previous":"M21-GAP-01820","next":"M21-GAP-01822"},"M21-GAP-01822":{"line":5077,"offset":903714,"length":185,"previous":"M21-GAP-01821","next":"M21-GAP-01823"},"M21-GAP-01823":{"line":5078,"offset":903899,"length":184,"previous":"M21-GAP-01822","next":"M21-GAP-01824"},"M21-GAP-01824":{"line":5079,"offset":904083,"length":185,"previous":"M21-GAP-01823","next":"M21-GAP-01825"},"M21-GAP-01825":{"line":5080,"offset":904268,"length":185,"previous":"M21-GAP-01824","next":"M21-GAP-01826"},"M21-GAP-01826":{"line":5081,"offset":904453,"length":185,"previous":"M21-GAP-01825","next":"M21-GAP-01827"},"M21-GAP-01827":{"line":5082,"offset":904638,"length":185,"previous":"M21-GAP-01826","next":"M21-GAP-01828"},"M21-GAP-01828":{"line":5083,"offset":904823,"length":185,"previous":"M21-GAP-01827","next":"M21-GAP-01829"},"M21-GAP-01829":{"line":5084,"offset":905008,"length":185,"previous":"M21-GAP-01828","next":"M21-GAP-01830"},"M21-GAP-01830":{"line":5085,"offset":905193,"length":185,"previous":"M21-GAP-01829","next":"M21-GAP-01831"},"M21-GAP-01831":{"line":5086,"offset":905378,"length":185,"previous":"M21-GAP-01830","next":"M21-GAP-01832"},"M21-GAP-01832":{"line":5087,"offset":905563,"length":185,"previous":"M21-GAP-01831","next":"M21-GAP-01833"},"M21-GAP-01833":{"line":5088,"offset":905748,"length":185,"previous":"M21-GAP-01832","next":"M21-GAP-01834"},"M21-GAP-01834":{"line":5089,"offset":905933,"length":184,"previous":"M21-GAP-01833","next":"M21-GAP-01835"},"M21-GAP-01835":{"line":5090,"offset":906117,"length":185,"previous":"M21-GAP-01834","next":"M21-GAP-01836"},"M21-GAP-01836":{"line":5091,"offset":906302,"length":185,"previous":"M21-GAP-01835","next":"M21-GAP-01837"},"M21-GAP-01837":{"line":5092,"offset":906487,"length":185,"previous":"M21-GAP-01836","next":"M21-GAP-01838"},"M21-GAP-01838":{"line":5093,"offset":906672,"length":185,"previous":"M21-GAP-01837","next":"M21-GAP-01839"},"M21-GAP-01839":{"line":5094,"offset":906857,"length":185,"previous":"M21-GAP-01838","next":"M21-GAP-01840"},"M21-GAP-01840":{"line":5095,"offset":907042,"length":185,"previous":"M21-GAP-01839","next":"M21-GAP-01841"},"M21-GAP-01841":{"line":5096,"offset":907227,"length":185,"previous":"M21-GAP-01840","next":"M21-GAP-01842"},"M21-GAP-01842":{"line":5097,"offset":907412,"length":185,"previous":"M21-GAP-01841","next":"M21-GAP-01843"},"M21-GAP-01843":{"line":5098,"offset":907597,"length":185,"previous":"M21-GAP-01842","next":"M21-GAP-01844"},"M21-GAP-01844":{"line":5099,"offset":907782,"length":185,"previous":"M21-GAP-01843","next":"M21-GAP-01845"},"M21-GAP-01845":{"line":5100,"offset":907967,"length":184,"previous":"M21-GAP-01844","next":"M21-GAP-01846"},"M21-GAP-01846":{"line":5101,"offset":908151,"length":185,"previous":"M21-GAP-01845","next":"M21-GAP-01847"},"M21-GAP-01847":{"line":5102,"offset":908336,"length":185,"previous":"M21-GAP-01846","next":"M21-GAP-01848"},"M21-GAP-01848":{"line":5103,"offset":908521,"length":185,"previous":"M21-GAP-01847","next":"M21-GAP-01849"},"M21-GAP-01849":{"line":5104,"offset":908706,"length":185,"previous":"M21-GAP-01848","next":"M21-GAP-01850"},"M21-GAP-01850":{"line":5105,"offset":908891,"length":185,"previous":"M21-GAP-01849","next":"M21-GAP-01851"},"M21-GAP-01851":{"line":5106,"offset":909076,"length":185,"previous":"M21-GAP-01850","next":"M21-GAP-01852"},"M21-GAP-01852":{"line":5107,"offset":909261,"length":185,"previous":"M21-GAP-01851","next":"M21-GAP-01853"},"M21-GAP-01853":{"line":5108,"offset":909446,"length":185,"previous":"M21-GAP-01852","next":"M21-GAP-01854"},"M21-GAP-01854":{"line":5109,"offset":909631,"length":185,"previous":"M21-GAP-01853","next":"M21-GAP-01855"},"M21-GAP-01855":{"line":5110,"offset":909816,"length":185,"previous":"M21-GAP-01854","next":"M21-GAP-01856"},"M21-GAP-01856":{"line":5111,"offset":910001,"length":184,"previous":"M21-GAP-01855","next":"M21-GAP-01857"},"M21-GAP-01857":{"line":5112,"offset":910185,"length":185,"previous":"M21-GAP-01856","next":"M21-GAP-01858"},"M21-GAP-01858":{"line":5113,"offset":910370,"length":185,"previous":"M21-GAP-01857","next":"M21-GAP-01859"},"M21-GAP-01859":{"line":5114,"offset":910555,"length":185,"previous":"M21-GAP-01858","next":"M21-GAP-01860"},"M21-GAP-01860":{"line":5115,"offset":910740,"length":185,"previous":"M21-GAP-01859","next":"M21-GAP-01861"},"M21-GAP-01861":{"line":5116,"offset":910925,"length":185,"previous":"M21-GAP-01860","next":"M21-GAP-01862"},"M21-GAP-01862":{"line":5117,"offset":911110,"length":185,"previous":"M21-GAP-01861","next":"M21-GAP-01863"},"M21-GAP-01863":{"line":5118,"offset":911295,"length":185,"previous":"M21-GAP-01862","next":"M21-GAP-01864"},"M21-GAP-01864":{"line":5119,"offset":911480,"length":185,"previous":"M21-GAP-01863","next":"M21-GAP-01865"},"M21-GAP-01865":{"line":5120,"offset":911665,"length":185,"previous":"M21-GAP-01864","next":"M21-GAP-01866"},"M21-GAP-01866":{"line":5121,"offset":911850,"length":185,"previous":"M21-GAP-01865","next":"M21-GAP-01867"},"M21-GAP-01867":{"line":5122,"offset":912035,"length":184,"previous":"M21-GAP-01866","next":"M21-GAP-01868"},"M21-GAP-01868":{"line":5123,"offset":912219,"length":185,"previous":"M21-GAP-01867","next":"M21-GAP-01869"},"M21-GAP-01869":{"line":5124,"offset":912404,"length":185,"previous":"M21-GAP-01868","next":"M21-GAP-01870"},"M21-GAP-01870":{"line":5125,"offset":912589,"length":185,"previous":"M21-GAP-01869","next":"M21-GAP-01871"},"M21-GAP-01871":{"line":5126,"offset":912774,"length":185,"previous":"M21-GAP-01870","next":"M21-GAP-01872"},"M21-GAP-01872":{"line":5127,"offset":912959,"length":185,"previous":"M21-GAP-01871","next":"M21-GAP-01873"},"M21-GAP-01873":{"line":5128,"offset":913144,"length":185,"previous":"M21-GAP-01872","next":"M21-GAP-01874"},"M21-GAP-01874":{"line":5129,"offset":913329,"length":185,"previous":"M21-GAP-01873","next":"M21-GAP-01875"},"M21-GAP-01875":{"line":5130,"offset":913514,"length":185,"previous":"M21-GAP-01874","next":"M21-GAP-01876"},"M21-GAP-01876":{"line":5131,"offset":913699,"length":185,"previous":"M21-GAP-01875","next":"M21-GAP-01877"},"M21-GAP-01877":{"line":5132,"offset":913884,"length":185,"previous":"M21-GAP-01876","next":"M21-GAP-01878"},"M21-GAP-01878":{"line":5133,"offset":914069,"length":184,"previous":"M21-GAP-01877","next":"M21-GAP-01879"},"M21-GAP-01879":{"line":5134,"offset":914253,"length":185,"previous":"M21-GAP-01878","next":"M21-GAP-01880"},"M21-GAP-01880":{"line":5135,"offset":914438,"length":185,"previous":"M21-GAP-01879","next":"M21-GAP-01881"},"M21-GAP-01881":{"line":5136,"offset":914623,"length":185,"previous":"M21-GAP-01880","next":"M21-GAP-01882"},"M21-GAP-01882":{"line":5137,"offset":914808,"length":185,"previous":"M21-GAP-01881","next":"M21-GAP-01883"},"M21-GAP-01883":{"line":5138,"offset":914993,"length":185,"previous":"M21-GAP-01882","next":"M21-GAP-01884"},"M21-GAP-01884":{"line":5139,"offset":915178,"length":185,"previous":"M21-GAP-01883","next":"M21-GAP-01885"},"M21-GAP-01885":{"line":5140,"offset":915363,"length":185,"previous":"M21-GAP-01884","next":"M21-GAP-01886"},"M21-GAP-01886":{"line":5141,"offset":915548,"length":185,"previous":"M21-GAP-01885","next":"M21-GAP-01887"},"M21-GAP-01887":{"line":5142,"offset":915733,"length":185,"previous":"M21-GAP-01886","next":"M21-GAP-01888"},"M21-GAP-01888":{"line":5143,"offset":915918,"length":185,"previous":"M21-GAP-01887","next":"M21-GAP-01889"},"M21-GAP-01889":{"line":5144,"offset":916103,"length":184,"previous":"M21-GAP-01888","next":"M21-GAP-01890"},"M21-GAP-01890":{"line":5145,"offset":916287,"length":185,"previous":"M21-GAP-01889","next":"M21-GAP-01891"},"M21-GAP-01891":{"line":5146,"offset":916472,"length":185,"previous":"M21-GAP-01890","next":"M21-GAP-01892"},"M21-GAP-01892":{"line":5147,"offset":916657,"length":185,"previous":"M21-GAP-01891","next":"M21-GAP-01893"},"M21-GAP-01893":{"line":5148,"offset":916842,"length":185,"previous":"M21-GAP-01892","next":"M21-GAP-01894"},"M21-GAP-01894":{"line":5149,"offset":917027,"length":185,"previous":"M21-GAP-01893","next":"M21-GAP-01895"},"M21-GAP-01895":{"line":5150,"offset":917212,"length":185,"previous":"M21-GAP-01894","next":"M21-GAP-01896"},"M21-GAP-01896":{"line":5151,"offset":917397,"length":185,"previous":"M21-GAP-01895","next":"M21-GAP-01897"},"M21-GAP-01897":{"line":5152,"offset":917582,"length":185,"previous":"M21-GAP-01896","next":"M21-GAP-01898"},"M21-GAP-01898":{"line":5153,"offset":917767,"length":185,"previous":"M21-GAP-01897","next":"M21-GAP-01899"},"M21-GAP-01899":{"line":5154,"offset":917952,"length":185,"previous":"M21-GAP-01898","next":"M21-GAP-01900"},"M21-GAP-01900":{"line":5155,"offset":918137,"length":185,"previous":"M21-GAP-01899","next":"M21-GAP-01901"},"M21-GAP-01901":{"line":5156,"offset":918322,"length":185,"previous":"M21-GAP-01900","next":"M21-GAP-01902"},"M21-GAP-01902":{"line":5157,"offset":918507,"length":186,"previous":"M21-GAP-01901","next":"M21-GAP-01903"},"M21-GAP-01903":{"line":5158,"offset":918693,"length":186,"previous":"M21-GAP-01902","next":"M21-GAP-01904"},"M21-GAP-01904":{"line":5159,"offset":918879,"length":186,"previous":"M21-GAP-01903","next":"M21-GAP-01905"},"M21-GAP-01905":{"line":5160,"offset":919065,"length":186,"previous":"M21-GAP-01904","next":"M21-GAP-01906"},"M21-GAP-01906":{"line":5161,"offset":919251,"length":186,"previous":"M21-GAP-01905","next":"M21-GAP-01907"},"M21-GAP-01907":{"line":5162,"offset":919437,"length":186,"previous":"M21-GAP-01906","next":"M21-GAP-01908"},"M21-GAP-01908":{"line":5163,"offset":919623,"length":188,"previous":"M21-GAP-01907","next":"M21-GAP-01909"},"M21-GAP-01909":{"line":5164,"offset":919811,"length":188,"previous":"M21-GAP-01908","next":"M21-GAP-01910"},"M21-GAP-01910":{"line":5165,"offset":919999,"length":188,"previous":"M21-GAP-01909","next":"M21-GAP-01911"},"M21-GAP-01911":{"line":5166,"offset":920187,"length":188,"previous":"M21-GAP-01910","next":"M21-GAP-01912"},"M21-GAP-01912":{"line":5167,"offset":920375,"length":188,"previous":"M21-GAP-01911","next":"M21-GAP-01913"},"M21-GAP-01913":{"line":5168,"offset":920563,"length":188,"previous":"M21-GAP-01912","next":"M21-GAP-01914"},"M21-GAP-01914":{"line":5169,"offset":920751,"length":188,"previous":"M21-GAP-01913","next":"M21-GAP-01915"},"M21-GAP-01915":{"line":5170,"offset":920939,"length":195,"previous":"M21-GAP-01914","next":"M21-GAP-01916"},"M21-GAP-01916":{"line":5171,"offset":921134,"length":193,"previous":"M21-GAP-01915","next":"M21-GAP-01917"},"M21-GAP-01917":{"line":5172,"offset":921327,"length":194,"previous":"M21-GAP-01916","next":"M21-GAP-01918"},"M21-GAP-01918":{"line":5173,"offset":921521,"length":205,"previous":"M21-GAP-01917","next":"M21-GAP-01919"},"M21-GAP-01919":{"line":5174,"offset":921726,"length":205,"previous":"M21-GAP-01918","next":"M21-GAP-01920"},"M21-GAP-01920":{"line":5175,"offset":921931,"length":206,"previous":"M21-GAP-01919","next":"M21-GAP-01921"},"M21-GAP-01921":{"line":5176,"offset":922137,"length":206,"previous":"M21-GAP-01920","next":"M21-GAP-01922"},"M21-GAP-01922":{"line":5177,"offset":922343,"length":205,"previous":"M21-GAP-01921","next":"M21-GAP-01923"},"M21-GAP-01923":{"line":5178,"offset":922548,"length":205,"previous":"M21-GAP-01922","next":"M21-GAP-01924"},"M21-GAP-01924":{"line":5179,"offset":922753,"length":205,"previous":"M21-GAP-01923","next":"M21-GAP-01925"},"M21-GAP-01925":{"line":5180,"offset":922958,"length":205,"previous":"M21-GAP-01924","next":"M21-GAP-01926"},"M21-GAP-01926":{"line":5181,"offset":923163,"length":205,"previous":"M21-GAP-01925","next":"M21-GAP-01927"},"M21-GAP-01927":{"line":5182,"offset":923368,"length":205,"previous":"M21-GAP-01926","next":"M21-GAP-01928"},"M21-GAP-01928":{"line":5183,"offset":923573,"length":205,"previous":"M21-GAP-01927","next":"M21-GAP-01929"},"M21-GAP-01929":{"line":5184,"offset":923778,"length":205,"previous":"M21-GAP-01928","next":"M21-GAP-01930"},"M21-GAP-01930":{"line":5185,"offset":923983,"length":194,"previous":"M21-GAP-01929","next":"M21-GAP-01931"},"M21-GAP-01931":{"line":5186,"offset":924177,"length":194,"previous":"M21-GAP-01930","next":"M21-GAP-01932"},"M21-GAP-01932":{"line":5187,"offset":924371,"length":195,"previous":"M21-GAP-01931","next":"M21-GAP-01933"},"M21-GAP-01933":{"line":5188,"offset":924566,"length":195,"previous":"M21-GAP-01932","next":"M21-GAP-01934"},"M21-GAP-01934":{"line":5189,"offset":924761,"length":194,"previous":"M21-GAP-01933","next":"M21-GAP-01935"},"M21-GAP-01935":{"line":5190,"offset":924955,"length":194,"previous":"M21-GAP-01934","next":"M21-GAP-01936"},"M21-GAP-01936":{"line":5191,"offset":925149,"length":194,"previous":"M21-GAP-01935","next":"M21-GAP-01937"},"M21-GAP-01937":{"line":5192,"offset":925343,"length":194,"previous":"M21-GAP-01936","next":"M21-GAP-01938"},"M21-GAP-01938":{"line":5193,"offset":925537,"length":194,"previous":"M21-GAP-01937","next":"M21-GAP-01939"},"M21-GAP-01939":{"line":5194,"offset":925731,"length":194,"previous":"M21-GAP-01938","next":"M21-GAP-01940"},"M21-GAP-01940":{"line":5195,"offset":925925,"length":194,"previous":"M21-GAP-01939","next":"M21-GAP-01941"},"M21-GAP-01941":{"line":5196,"offset":926119,"length":194,"previous":"M21-GAP-01940","next":"M21-GAP-01942"},"M21-GAP-01942":{"line":5197,"offset":926313,"length":208,"previous":"M21-GAP-01941","next":"M21-GAP-01943"},"M21-GAP-01943":{"line":5198,"offset":926521,"length":208,"previous":"M21-GAP-01942","next":"M21-GAP-01944"},"M21-GAP-01944":{"line":5199,"offset":926729,"length":208,"previous":"M21-GAP-01943","next":"M21-GAP-01945"},"M21-GAP-01945":{"line":5200,"offset":926937,"length":197,"previous":"M21-GAP-01944","next":"M21-GAP-01946"},"M21-GAP-01946":{"line":5201,"offset":927134,"length":197,"previous":"M21-GAP-01945","next":"M21-GAP-01947"},"M21-GAP-01947":{"line":5202,"offset":927331,"length":197,"previous":"M21-GAP-01946","next":"M21-GAP-01948"},"M21-GAP-01948":{"line":5203,"offset":927528,"length":207,"previous":"M21-GAP-01947","next":"M21-GAP-01949"},"M21-GAP-01949":{"line":5204,"offset":927735,"length":207,"previous":"M21-GAP-01948","next":"M21-GAP-01950"},"M21-GAP-01950":{"line":5205,"offset":927942,"length":207,"previous":"M21-GAP-01949","next":"M21-GAP-01951"},"M21-GAP-01951":{"line":5206,"offset":928149,"length":196,"previous":"M21-GAP-01950","next":"M21-GAP-01952"},"M21-GAP-01952":{"line":5207,"offset":928345,"length":196,"previous":"M21-GAP-01951","next":"M21-GAP-01953"},"M21-GAP-01953":{"line":5208,"offset":928541,"length":196,"previous":"M21-GAP-01952","next":"M21-GAP-01954"},"M21-GAP-01954":{"line":5209,"offset":928737,"length":200,"previous":"M21-GAP-01953","next":"M21-GAP-01955"},"M21-GAP-01955":{"line":5210,"offset":928937,"length":200,"previous":"M21-GAP-01954","next":"M21-GAP-01956"},"M21-GAP-01956":{"line":5211,"offset":929137,"length":200,"previous":"M21-GAP-01955","next":"M21-GAP-01957"},"M21-GAP-01957":{"line":5212,"offset":929337,"length":200,"previous":"M21-GAP-01956","next":"M21-GAP-01958"},"M21-GAP-01958":{"line":5213,"offset":929537,"length":200,"previous":"M21-GAP-01957","next":"M21-GAP-01959"},"M21-GAP-01959":{"line":5214,"offset":929737,"length":200,"previous":"M21-GAP-01958","next":"M21-GAP-01960"},"M21-GAP-01960":{"line":5215,"offset":929937,"length":200,"previous":"M21-GAP-01959","next":"M21-GAP-01961"},"M21-GAP-01961":{"line":5216,"offset":930137,"length":200,"previous":"M21-GAP-01960","next":"M21-GAP-01962"},"M21-GAP-01962":{"line":5217,"offset":930337,"length":200,"previous":"M21-GAP-01961","next":"M21-GAP-01963"},"M21-GAP-01963":{"line":5218,"offset":930537,"length":189,"previous":"M21-GAP-01962","next":"M21-GAP-01964"},"M21-GAP-01964":{"line":5219,"offset":930726,"length":189,"previous":"M21-GAP-01963","next":"M21-GAP-01965"},"M21-GAP-01965":{"line":5220,"offset":930915,"length":189,"previous":"M21-GAP-01964","next":"M21-GAP-01966"},"M21-GAP-01966":{"line":5221,"offset":931104,"length":189,"previous":"M21-GAP-01965","next":"M21-GAP-01967"},"M21-GAP-01967":{"line":5222,"offset":931293,"length":189,"previous":"M21-GAP-01966","next":"M21-GAP-01968"},"M21-GAP-01968":{"line":5223,"offset":931482,"length":189,"previous":"M21-GAP-01967","next":"M21-GAP-01969"},"M21-GAP-01969":{"line":5224,"offset":931671,"length":189,"previous":"M21-GAP-01968","next":"M21-GAP-01970"},"M21-GAP-01970":{"line":5225,"offset":931860,"length":189,"previous":"M21-GAP-01969","next":"M21-GAP-01971"},"M21-GAP-01971":{"line":5226,"offset":932049,"length":189,"previous":"M21-GAP-01970","next":"M21-GAP-01972"},"M21-GAP-01972":{"line":5227,"offset":932238,"length":178,"previous":"M21-GAP-01971","next":"M21-GAP-01973"},"M21-GAP-01973":{"line":5228,"offset":932416,"length":178,"previous":"M21-GAP-01972","next":"M21-GAP-01974"},"M21-GAP-01974":{"line":5229,"offset":932594,"length":179,"previous":"M21-GAP-01973","next":"M21-GAP-01975"},"M21-GAP-01975":{"line":5230,"offset":932773,"length":179,"previous":"M21-GAP-01974","next":"M21-GAP-01976"},"M21-GAP-01976":{"line":5231,"offset":932952,"length":179,"previous":"M21-GAP-01975","next":"M21-GAP-01977"},"M21-GAP-01977":{"line":5232,"offset":933131,"length":179,"previous":"M21-GAP-01976","next":"M21-GAP-01978"},"M21-GAP-01978":{"line":5233,"offset":933310,"length":179,"previous":"M21-GAP-01977","next":"M21-GAP-01979"},"M21-GAP-01979":{"line":5234,"offset":933489,"length":179,"previous":"M21-GAP-01978","next":"M21-GAP-01980"},"M21-GAP-01980":{"line":5235,"offset":933668,"length":179,"previous":"M21-GAP-01979","next":"M21-GAP-01981"},"M21-GAP-01981":{"line":5236,"offset":933847,"length":179,"previous":"M21-GAP-01980","next":"M21-GAP-01982"},"M21-GAP-01982":{"line":5237,"offset":934026,"length":179,"previous":"M21-GAP-01981","next":"M21-GAP-01983"},"M21-GAP-01983":{"line":5238,"offset":934205,"length":179,"previous":"M21-GAP-01982","next":"M21-GAP-01984"},"M21-GAP-01984":{"line":5239,"offset":934384,"length":178,"previous":"M21-GAP-01983","next":"M21-GAP-01985"},"M21-GAP-01985":{"line":5240,"offset":934562,"length":179,"previous":"M21-GAP-01984","next":"M21-GAP-01986"},"M21-GAP-01986":{"line":5241,"offset":934741,"length":179,"previous":"M21-GAP-01985","next":"M21-GAP-01987"},"M21-GAP-01987":{"line":5242,"offset":934920,"length":179,"previous":"M21-GAP-01986","next":"M21-GAP-01988"},"M21-GAP-01988":{"line":5243,"offset":935099,"length":179,"previous":"M21-GAP-01987","next":"M21-GAP-01989"},"M21-GAP-01989":{"line":5244,"offset":935278,"length":179,"previous":"M21-GAP-01988","next":"M21-GAP-01990"},"M21-GAP-01990":{"line":5245,"offset":935457,"length":179,"previous":"M21-GAP-01989","next":"M21-GAP-01991"},"M21-GAP-01991":{"line":5246,"offset":935636,"length":179,"previous":"M21-GAP-01990","next":"M21-GAP-01992"},"M21-GAP-01992":{"line":5247,"offset":935815,"length":179,"previous":"M21-GAP-01991","next":"M21-GAP-01993"},"M21-GAP-01993":{"line":5248,"offset":935994,"length":179,"previous":"M21-GAP-01992","next":"M21-GAP-01994"},"M21-GAP-01994":{"line":5249,"offset":936173,"length":179,"previous":"M21-GAP-01993","next":"M21-GAP-01995"},"M21-GAP-01995":{"line":5250,"offset":936352,"length":178,"previous":"M21-GAP-01994","next":"M21-GAP-01996"},"M21-GAP-01996":{"line":5251,"offset":936530,"length":179,"previous":"M21-GAP-01995","next":"M21-GAP-01997"},"M21-GAP-01997":{"line":5252,"offset":936709,"length":179,"previous":"M21-GAP-01996","next":"M21-GAP-01998"},"M21-GAP-01998":{"line":5253,"offset":936888,"length":179,"previous":"M21-GAP-01997","next":"M21-GAP-01999"},"M21-GAP-01999":{"line":5254,"offset":937067,"length":179,"previous":"M21-GAP-01998","next":"M21-GAP-02000"},"M21-GAP-02000":{"line":5255,"offset":937246,"length":179,"previous":"M21-GAP-01999","next":"M21-GAP-02001"},"M21-GAP-02001":{"line":5256,"offset":937425,"length":179,"previous":"M21-GAP-02000","next":"M21-GAP-02002"},"M21-GAP-02002":{"line":5257,"offset":937604,"length":179,"previous":"M21-GAP-02001","next":"M21-GAP-02003"},"M21-GAP-02003":{"line":5258,"offset":937783,"length":179,"previous":"M21-GAP-02002","next":"M21-GAP-02004"},"M21-GAP-02004":{"line":5259,"offset":937962,"length":179,"previous":"M21-GAP-02003","next":"M21-GAP-02005"},"M21-GAP-02005":{"line":5260,"offset":938141,"length":179,"previous":"M21-GAP-02004","next":"M21-GAP-02006"},"M21-GAP-02006":{"line":5261,"offset":938320,"length":178,"previous":"M21-GAP-02005","next":"M21-GAP-02007"},"M21-GAP-02007":{"line":5262,"offset":938498,"length":179,"previous":"M21-GAP-02006","next":"M21-GAP-02008"},"M21-GAP-02008":{"line":5263,"offset":938677,"length":179,"previous":"M21-GAP-02007","next":"M21-GAP-02009"},"M21-GAP-02009":{"line":5264,"offset":938856,"length":179,"previous":"M21-GAP-02008","next":"M21-GAP-02010"},"M21-GAP-02010":{"line":5265,"offset":939035,"length":179,"previous":"M21-GAP-02009","next":"M21-GAP-02011"},"M21-GAP-02011":{"line":5266,"offset":939214,"length":179,"previous":"M21-GAP-02010","next":"M21-GAP-02012"},"M21-GAP-02012":{"line":5267,"offset":939393,"length":179,"previous":"M21-GAP-02011","next":"M21-GAP-02013"},"M21-GAP-02013":{"line":5268,"offset":939572,"length":179,"previous":"M21-GAP-02012","next":"M21-GAP-02014"},"M21-GAP-02014":{"line":5269,"offset":939751,"length":179,"previous":"M21-GAP-02013","next":"M21-GAP-02015"},"M21-GAP-02015":{"line":5270,"offset":939930,"length":179,"previous":"M21-GAP-02014","next":"M21-GAP-02016"},"M21-GAP-02016":{"line":5271,"offset":940109,"length":179,"previous":"M21-GAP-02015","next":"M21-GAP-02017"},"M21-GAP-02017":{"line":5272,"offset":940288,"length":178,"previous":"M21-GAP-02016","next":"M21-GAP-02018"},"M21-GAP-02018":{"line":5273,"offset":940466,"length":179,"previous":"M21-GAP-02017","next":"M21-GAP-02019"},"M21-GAP-02019":{"line":5274,"offset":940645,"length":179,"previous":"M21-GAP-02018","next":"M21-GAP-02020"},"M21-GAP-02020":{"line":5275,"offset":940824,"length":179,"previous":"M21-GAP-02019","next":"M21-GAP-02021"},"M21-GAP-02021":{"line":5276,"offset":941003,"length":179,"previous":"M21-GAP-02020","next":"M21-GAP-02022"},"M21-GAP-02022":{"line":5277,"offset":941182,"length":179,"previous":"M21-GAP-02021","next":"M21-GAP-02023"},"M21-GAP-02023":{"line":5278,"offset":941361,"length":179,"previous":"M21-GAP-02022","next":"M21-GAP-02024"},"M21-GAP-02024":{"line":5279,"offset":941540,"length":179,"previous":"M21-GAP-02023","next":"M21-GAP-02025"},"M21-GAP-02025":{"line":5280,"offset":941719,"length":179,"previous":"M21-GAP-02024","next":"M21-GAP-02026"},"M21-GAP-02026":{"line":5281,"offset":941898,"length":179,"previous":"M21-GAP-02025","next":"M21-GAP-02027"},"M21-GAP-02027":{"line":5282,"offset":942077,"length":178,"previous":"M21-GAP-02026","next":"M21-GAP-02028"},"M21-GAP-02028":{"line":5283,"offset":942255,"length":178,"previous":"M21-GAP-02027","next":"M21-GAP-02029"},"M21-GAP-02029":{"line":5284,"offset":942433,"length":178,"previous":"M21-GAP-02028","next":"M21-GAP-02030"},"M21-GAP-02030":{"line":5285,"offset":942611,"length":178,"previous":"M21-GAP-02029","next":"M21-GAP-02031"},"M21-GAP-02031":{"line":5286,"offset":942789,"length":183,"previous":"M21-GAP-02030","next":"M21-GAP-02032"},"M21-GAP-02032":{"line":5287,"offset":942972,"length":183,"previous":"M21-GAP-02031","next":"M21-GAP-02033"},"M21-GAP-02033":{"line":5288,"offset":943155,"length":183,"previous":"M21-GAP-02032","next":"M21-GAP-02034"},"M21-GAP-02034":{"line":5289,"offset":943338,"length":178,"previous":"M21-GAP-02033","next":"M21-GAP-02035"},"M21-GAP-02035":{"line":5290,"offset":943516,"length":178,"previous":"M21-GAP-02034","next":"M21-GAP-02036"},"M21-GAP-02036":{"line":5291,"offset":943694,"length":179,"previous":"M21-GAP-02035","next":"M21-GAP-02037"},"M21-GAP-02037":{"line":5292,"offset":943873,"length":180,"previous":"M21-GAP-02036","next":"M21-GAP-02038"},"M21-GAP-02038":{"line":5293,"offset":944053,"length":180,"previous":"M21-GAP-02037","next":"M21-GAP-02039"},"M21-GAP-02039":{"line":5294,"offset":944233,"length":180,"previous":"M21-GAP-02038","next":"M21-GAP-02040"},"M21-GAP-02040":{"line":5295,"offset":944413,"length":179,"previous":"M21-GAP-02039","next":"M21-GAP-02041"},"M21-GAP-02041":{"line":5296,"offset":944592,"length":179,"previous":"M21-GAP-02040","next":"M21-GAP-02042"},"M21-GAP-02042":{"line":5297,"offset":944771,"length":179,"previous":"M21-GAP-02041","next":"M21-GAP-02043"},"M21-GAP-02043":{"line":5298,"offset":944950,"length":179,"previous":"M21-GAP-02042","next":"M21-GAP-02044"},"M21-GAP-02044":{"line":5299,"offset":945129,"length":179,"previous":"M21-GAP-02043","next":"M21-GAP-02045"},"M21-GAP-02045":{"line":5300,"offset":945308,"length":179,"previous":"M21-GAP-02044","next":"M21-GAP-02046"},"M21-GAP-02046":{"line":5301,"offset":945487,"length":179,"previous":"M21-GAP-02045","next":"M21-GAP-02047"},"M21-GAP-02047":{"line":5302,"offset":945666,"length":179,"previous":"M21-GAP-02046","next":"M21-GAP-02048"},"M21-GAP-02048":{"line":5303,"offset":945845,"length":179,"previous":"M21-GAP-02047","next":"M21-GAP-02049"},"M21-GAP-02049":{"line":5304,"offset":946024,"length":178,"previous":"M21-GAP-02048","next":"M21-GAP-02050"},"M21-GAP-02050":{"line":5305,"offset":946202,"length":179,"previous":"M21-GAP-02049","next":"M21-GAP-02051"},"M21-GAP-02051":{"line":5306,"offset":946381,"length":179,"previous":"M21-GAP-02050","next":"M21-GAP-02052"},"M21-GAP-02052":{"line":5307,"offset":946560,"length":179,"previous":"M21-GAP-02051","next":"M21-GAP-02053"},"M21-GAP-02053":{"line":5308,"offset":946739,"length":179,"previous":"M21-GAP-02052","next":"M21-GAP-02054"},"M21-GAP-02054":{"line":5309,"offset":946918,"length":179,"previous":"M21-GAP-02053","next":"M21-GAP-02055"},"M21-GAP-02055":{"line":5310,"offset":947097,"length":179,"previous":"M21-GAP-02054","next":"M21-GAP-02056"},"M21-GAP-02056":{"line":5311,"offset":947276,"length":179,"previous":"M21-GAP-02055","next":"M21-GAP-02057"},"M21-GAP-02057":{"line":5312,"offset":947455,"length":179,"previous":"M21-GAP-02056","next":"M21-GAP-02058"},"M21-GAP-02058":{"line":5313,"offset":947634,"length":179,"previous":"M21-GAP-02057","next":"M21-GAP-02059"},"M21-GAP-02059":{"line":5314,"offset":947813,"length":179,"previous":"M21-GAP-02058","next":"M21-GAP-02060"},"M21-GAP-02060":{"line":5315,"offset":947992,"length":178,"previous":"M21-GAP-02059","next":"M21-GAP-02061"},"M21-GAP-02061":{"line":5316,"offset":948170,"length":179,"previous":"M21-GAP-02060","next":"M21-GAP-02062"},"M21-GAP-02062":{"line":5317,"offset":948349,"length":179,"previous":"M21-GAP-02061","next":"M21-GAP-02063"},"M21-GAP-02063":{"line":5318,"offset":948528,"length":179,"previous":"M21-GAP-02062","next":"M21-GAP-02064"},"M21-GAP-02064":{"line":5319,"offset":948707,"length":179,"previous":"M21-GAP-02063","next":"M21-GAP-02065"},"M21-GAP-02065":{"line":5320,"offset":948886,"length":179,"previous":"M21-GAP-02064","next":"M21-GAP-02066"},"M21-GAP-02066":{"line":5321,"offset":949065,"length":179,"previous":"M21-GAP-02065","next":"M21-GAP-02067"},"M21-GAP-02067":{"line":5322,"offset":949244,"length":179,"previous":"M21-GAP-02066","next":"M21-GAP-02068"},"M21-GAP-02068":{"line":5323,"offset":949423,"length":179,"previous":"M21-GAP-02067","next":"M21-GAP-02069"},"M21-GAP-02069":{"line":5324,"offset":949602,"length":179,"previous":"M21-GAP-02068","next":"M21-GAP-02070"},"M21-GAP-02070":{"line":5325,"offset":949781,"length":179,"previous":"M21-GAP-02069","next":"M21-GAP-02071"},"M21-GAP-02071":{"line":5326,"offset":949960,"length":178,"previous":"M21-GAP-02070","next":"M21-GAP-02072"},"M21-GAP-02072":{"line":5327,"offset":950138,"length":179,"previous":"M21-GAP-02071","next":"M21-GAP-02073"},"M21-GAP-02073":{"line":5328,"offset":950317,"length":179,"previous":"M21-GAP-02072","next":"M21-GAP-02074"},"M21-GAP-02074":{"line":5329,"offset":950496,"length":179,"previous":"M21-GAP-02073","next":"M21-GAP-02075"},"M21-GAP-02075":{"line":5330,"offset":950675,"length":179,"previous":"M21-GAP-02074","next":"M21-GAP-02076"},"M21-GAP-02076":{"line":5331,"offset":950854,"length":179,"previous":"M21-GAP-02075","next":"M21-GAP-02077"},"M21-GAP-02077":{"line":5332,"offset":951033,"length":179,"previous":"M21-GAP-02076","next":"M21-GAP-02078"},"M21-GAP-02078":{"line":5333,"offset":951212,"length":179,"previous":"M21-GAP-02077","next":"M21-GAP-02079"},"M21-GAP-02079":{"line":5334,"offset":951391,"length":179,"previous":"M21-GAP-02078","next":"M21-GAP-02080"},"M21-GAP-02080":{"line":5335,"offset":951570,"length":179,"previous":"M21-GAP-02079","next":"M21-GAP-02081"},"M21-GAP-02081":{"line":5336,"offset":951749,"length":179,"previous":"M21-GAP-02080","next":"M21-GAP-02082"},"M21-GAP-02082":{"line":5337,"offset":951928,"length":178,"previous":"M21-GAP-02081","next":"M21-GAP-02083"},"M21-GAP-02083":{"line":5338,"offset":952106,"length":179,"previous":"M21-GAP-02082","next":"M21-GAP-02084"},"M21-GAP-02084":{"line":5339,"offset":952285,"length":179,"previous":"M21-GAP-02083","next":"M21-GAP-02085"},"M21-GAP-02085":{"line":5340,"offset":952464,"length":179,"previous":"M21-GAP-02084","next":"M21-GAP-02086"},"M21-GAP-02086":{"line":5341,"offset":952643,"length":179,"previous":"M21-GAP-02085","next":"M21-GAP-02087"},"M21-GAP-02087":{"line":5342,"offset":952822,"length":179,"previous":"M21-GAP-02086","next":"M21-GAP-02088"},"M21-GAP-02088":{"line":5343,"offset":953001,"length":179,"previous":"M21-GAP-02087","next":"M21-GAP-02089"},"M21-GAP-02089":{"line":5344,"offset":953180,"length":179,"previous":"M21-GAP-02088","next":"M21-GAP-02090"},"M21-GAP-02090":{"line":5345,"offset":953359,"length":179,"previous":"M21-GAP-02089","next":"M21-GAP-02091"},"M21-GAP-02091":{"line":5346,"offset":953538,"length":179,"previous":"M21-GAP-02090","next":"M21-GAP-02092"},"M21-GAP-02092":{"line":5347,"offset":953717,"length":179,"previous":"M21-GAP-02091","next":"M21-GAP-02093"},"M21-GAP-02093":{"line":5348,"offset":953896,"length":178,"previous":"M21-GAP-02092","next":"M21-GAP-02094"},"M21-GAP-02094":{"line":5349,"offset":954074,"length":179,"previous":"M21-GAP-02093","next":"M21-GAP-02095"},"M21-GAP-02095":{"line":5350,"offset":954253,"length":179,"previous":"M21-GAP-02094","next":"M21-GAP-02096"},"M21-GAP-02096":{"line":5351,"offset":954432,"length":179,"previous":"M21-GAP-02095","next":"M21-GAP-02097"},"M21-GAP-02097":{"line":5352,"offset":954611,"length":179,"previous":"M21-GAP-02096","next":"M21-GAP-02098"},"M21-GAP-02098":{"line":5353,"offset":954790,"length":179,"previous":"M21-GAP-02097","next":"M21-GAP-02099"},"M21-GAP-02099":{"line":5354,"offset":954969,"length":179,"previous":"M21-GAP-02098","next":"M21-GAP-02100"},"M21-GAP-02100":{"line":5355,"offset":955148,"length":179,"previous":"M21-GAP-02099","next":"M21-GAP-02101"},"M21-GAP-02101":{"line":5356,"offset":955327,"length":179,"previous":"M21-GAP-02100","next":"M21-GAP-02102"},"M21-GAP-02102":{"line":5357,"offset":955506,"length":179,"previous":"M21-GAP-02101","next":"M21-GAP-02103"},"M21-GAP-02103":{"line":5358,"offset":955685,"length":179,"previous":"M21-GAP-02102","next":"M21-GAP-02104"},"M21-GAP-02104":{"line":5359,"offset":955864,"length":178,"previous":"M21-GAP-02103","next":"M21-GAP-02105"},"M21-GAP-02105":{"line":5360,"offset":956042,"length":179,"previous":"M21-GAP-02104","next":"M21-GAP-02106"},"M21-GAP-02106":{"line":5361,"offset":956221,"length":179,"previous":"M21-GAP-02105","next":"M21-GAP-02107"},"M21-GAP-02107":{"line":5362,"offset":956400,"length":179,"previous":"M21-GAP-02106","next":"M21-GAP-02108"},"M21-GAP-02108":{"line":5363,"offset":956579,"length":179,"previous":"M21-GAP-02107","next":"M21-GAP-02109"},"M21-GAP-02109":{"line":5364,"offset":956758,"length":179,"previous":"M21-GAP-02108","next":"M21-GAP-02110"},"M21-GAP-02110":{"line":5365,"offset":956937,"length":179,"previous":"M21-GAP-02109","next":"M21-GAP-02111"},"M21-GAP-02111":{"line":5366,"offset":957116,"length":179,"previous":"M21-GAP-02110","next":"M21-GAP-02112"},"M21-GAP-02112":{"line":5367,"offset":957295,"length":179,"previous":"M21-GAP-02111","next":"M21-GAP-02113"},"M21-GAP-02113":{"line":5368,"offset":957474,"length":179,"previous":"M21-GAP-02112","next":"M21-GAP-02114"},"M21-GAP-02114":{"line":5369,"offset":957653,"length":179,"previous":"M21-GAP-02113","next":"M21-GAP-02115"},"M21-GAP-02115":{"line":5370,"offset":957832,"length":178,"previous":"M21-GAP-02114","next":"M21-GAP-02116"},"M21-GAP-02116":{"line":5371,"offset":958010,"length":179,"previous":"M21-GAP-02115","next":"M21-GAP-02117"},"M21-GAP-02117":{"line":5372,"offset":958189,"length":179,"previous":"M21-GAP-02116","next":"M21-GAP-02118"},"M21-GAP-02118":{"line":5373,"offset":958368,"length":179,"previous":"M21-GAP-02117","next":"M21-GAP-02119"},"M21-GAP-02119":{"line":5374,"offset":958547,"length":179,"previous":"M21-GAP-02118","next":"M21-GAP-02120"},"M21-GAP-02120":{"line":5375,"offset":958726,"length":179,"previous":"M21-GAP-02119","next":"M21-GAP-02121"},"M21-GAP-02121":{"line":5376,"offset":958905,"length":179,"previous":"M21-GAP-02120","next":"M21-GAP-02122"},"M21-GAP-02122":{"line":5377,"offset":959084,"length":179,"previous":"M21-GAP-02121","next":"M21-GAP-02123"},"M21-GAP-02123":{"line":5378,"offset":959263,"length":179,"previous":"M21-GAP-02122","next":"M21-GAP-02124"},"M21-GAP-02124":{"line":5379,"offset":959442,"length":179,"previous":"M21-GAP-02123","next":"M21-GAP-02125"},"M21-GAP-02125":{"line":5380,"offset":959621,"length":179,"previous":"M21-GAP-02124","next":"M21-GAP-02126"},"M21-GAP-02126":{"line":5381,"offset":959800,"length":178,"previous":"M21-GAP-02125","next":"M21-GAP-02127"},"M21-GAP-02127":{"line":5382,"offset":959978,"length":179,"previous":"M21-GAP-02126","next":"M21-GAP-02128"},"M21-GAP-02128":{"line":5383,"offset":960157,"length":179,"previous":"M21-GAP-02127","next":"M21-GAP-02129"},"M21-GAP-02129":{"line":5384,"offset":960336,"length":179,"previous":"M21-GAP-02128","next":"M21-GAP-02130"},"M21-GAP-02130":{"line":5385,"offset":960515,"length":179,"previous":"M21-GAP-02129","next":"M21-GAP-02131"},"M21-GAP-02131":{"line":5386,"offset":960694,"length":179,"previous":"M21-GAP-02130","next":"M21-GAP-02132"},"M21-GAP-02132":{"line":5387,"offset":960873,"length":179,"previous":"M21-GAP-02131","next":"M21-GAP-02133"},"M21-GAP-02133":{"line":5388,"offset":961052,"length":179,"previous":"M21-GAP-02132","next":"M21-GAP-02134"},"M21-GAP-02134":{"line":5389,"offset":961231,"length":179,"previous":"M21-GAP-02133","next":"M21-GAP-02135"},"M21-GAP-02135":{"line":5390,"offset":961410,"length":179,"previous":"M21-GAP-02134","next":"M21-GAP-02136"},"M21-GAP-02136":{"line":5391,"offset":961589,"length":179,"previous":"M21-GAP-02135","next":"M21-GAP-02137"},"M21-GAP-02137":{"line":5392,"offset":961768,"length":178,"previous":"M21-GAP-02136","next":"M21-GAP-02138"},"M21-GAP-02138":{"line":5393,"offset":961946,"length":178,"previous":"M21-GAP-02137","next":"M21-GAP-02139"},"M21-GAP-02139":{"line":5394,"offset":962124,"length":179,"previous":"M21-GAP-02138","next":"M21-GAP-02140"},"M21-GAP-02140":{"line":5395,"offset":962303,"length":179,"previous":"M21-GAP-02139","next":"M21-GAP-02141"},"M21-GAP-02141":{"line":5396,"offset":962482,"length":179,"previous":"M21-GAP-02140","next":"M21-GAP-02142"},"M21-GAP-02142":{"line":5397,"offset":962661,"length":179,"previous":"M21-GAP-02141","next":"M21-GAP-02143"},"M21-GAP-02143":{"line":5398,"offset":962840,"length":179,"previous":"M21-GAP-02142","next":"M21-GAP-02144"},"M21-GAP-02144":{"line":5399,"offset":963019,"length":178,"previous":"M21-GAP-02143","next":"M21-GAP-02145"},"M21-GAP-02145":{"line":5400,"offset":963197,"length":178,"previous":"M21-GAP-02144","next":"M21-GAP-02146"},"M21-GAP-02146":{"line":5401,"offset":963375,"length":178,"previous":"M21-GAP-02145","next":"M21-GAP-02147"},"M21-GAP-02147":{"line":5402,"offset":963553,"length":178,"previous":"M21-GAP-02146","next":"M21-GAP-02148"},"M21-GAP-02148":{"line":5403,"offset":963731,"length":178,"previous":"M21-GAP-02147","next":"M21-GAP-02149"},"M21-GAP-02149":{"line":5404,"offset":963909,"length":178,"previous":"M21-GAP-02148","next":"M21-GAP-02150"},"M21-GAP-02150":{"line":5405,"offset":964087,"length":178,"previous":"M21-GAP-02149","next":"M21-GAP-02151"},"M21-GAP-02151":{"line":5406,"offset":964265,"length":178,"previous":"M21-GAP-02150","next":"M21-GAP-02152"},"M21-GAP-02152":{"line":5407,"offset":964443,"length":208,"previous":"M21-GAP-02151","next":"M21-GAP-02153"},"M21-GAP-02153":{"line":5408,"offset":964651,"length":208,"previous":"M21-GAP-02152","next":"M21-GAP-02154"},"M21-GAP-02154":{"line":5409,"offset":964859,"length":209,"previous":"M21-GAP-02153","next":"M21-GAP-02155"},"M21-GAP-02155":{"line":5410,"offset":965068,"length":209,"previous":"M21-GAP-02154","next":"M21-GAP-02156"},"M21-GAP-02156":{"line":5411,"offset":965277,"length":209,"previous":"M21-GAP-02155","next":"M21-GAP-02157"},"M21-GAP-02157":{"line":5412,"offset":965486,"length":209,"previous":"M21-GAP-02156","next":"M21-GAP-02158"},"M21-GAP-02158":{"line":5413,"offset":965695,"length":208,"previous":"M21-GAP-02157","next":"M21-GAP-02159"},"M21-GAP-02159":{"line":5414,"offset":965903,"length":208,"previous":"M21-GAP-02158","next":"M21-GAP-02160"},"M21-GAP-02160":{"line":5415,"offset":966111,"length":208,"previous":"M21-GAP-02159","next":"M21-GAP-02161"},"M21-GAP-02161":{"line":5416,"offset":966319,"length":208,"previous":"M21-GAP-02160","next":"M21-GAP-02162"},"M21-GAP-02162":{"line":5417,"offset":966527,"length":208,"previous":"M21-GAP-02161","next":"M21-GAP-02163"},"M21-GAP-02163":{"line":5418,"offset":966735,"length":208,"previous":"M21-GAP-02162","next":"M21-GAP-02164"},"M21-GAP-02164":{"line":5419,"offset":966943,"length":208,"previous":"M21-GAP-02163","next":"M21-GAP-02165"},"M21-GAP-02165":{"line":5420,"offset":967151,"length":208,"previous":"M21-GAP-02164","next":"M21-GAP-02166"},"M21-GAP-02166":{"line":5421,"offset":967359,"length":185,"previous":"M21-GAP-02165","next":"M21-GAP-02167"},"M21-GAP-02167":{"line":5422,"offset":967544,"length":206,"previous":"M21-GAP-02166","next":"M21-GAP-02168"},"M21-GAP-02168":{"line":5423,"offset":967750,"length":206,"previous":"M21-GAP-02167","next":"M21-GAP-02169"},"M21-GAP-02169":{"line":5424,"offset":967956,"length":207,"previous":"M21-GAP-02168","next":"M21-GAP-02170"},"M21-GAP-02170":{"line":5425,"offset":968163,"length":207,"previous":"M21-GAP-02169","next":"M21-GAP-02171"},"M21-GAP-02171":{"line":5426,"offset":968370,"length":207,"previous":"M21-GAP-02170","next":"M21-GAP-02172"},"M21-GAP-02172":{"line":5427,"offset":968577,"length":207,"previous":"M21-GAP-02171","next":"M21-GAP-02173"},"M21-GAP-02173":{"line":5428,"offset":968784,"length":207,"previous":"M21-GAP-02172","next":"M21-GAP-02174"},"M21-GAP-02174":{"line":5429,"offset":968991,"length":207,"previous":"M21-GAP-02173","next":"M21-GAP-02175"},"M21-GAP-02175":{"line":5430,"offset":969198,"length":206,"previous":"M21-GAP-02174","next":"M21-GAP-02176"},"M21-GAP-02176":{"line":5431,"offset":969404,"length":206,"previous":"M21-GAP-02175","next":"M21-GAP-02177"},"M21-GAP-02177":{"line":5432,"offset":969610,"length":206,"previous":"M21-GAP-02176","next":"M21-GAP-02178"},"M21-GAP-02178":{"line":5433,"offset":969816,"length":206,"previous":"M21-GAP-02177","next":"M21-GAP-02179"},"M21-GAP-02179":{"line":5434,"offset":970022,"length":206,"previous":"M21-GAP-02178","next":"M21-GAP-02180"},"M21-GAP-02180":{"line":5435,"offset":970228,"length":206,"previous":"M21-GAP-02179","next":"M21-GAP-02181"},"M21-GAP-02181":{"line":5436,"offset":970434,"length":206,"previous":"M21-GAP-02180","next":"M21-GAP-02182"},"M21-GAP-02182":{"line":5437,"offset":970640,"length":206,"previous":"M21-GAP-02181","next":"M21-GAP-02183"},"M21-GAP-02183":{"line":5438,"offset":970846,"length":175,"previous":"M21-GAP-02182","next":"M21-GAP-02184"},"M21-GAP-02184":{"line":5439,"offset":971021,"length":175,"previous":"M21-GAP-02183","next":"M21-GAP-02185"},"M21-GAP-02185":{"line":5440,"offset":971196,"length":176,"previous":"M21-GAP-02184","next":"M21-GAP-02186"},"M21-GAP-02186":{"line":5441,"offset":971372,"length":176,"previous":"M21-GAP-02185","next":"M21-GAP-02187"},"M21-GAP-02187":{"line":5442,"offset":971548,"length":176,"previous":"M21-GAP-02186","next":"M21-GAP-02188"},"M21-GAP-02188":{"line":5443,"offset":971724,"length":176,"previous":"M21-GAP-02187","next":"M21-GAP-02189"},"M21-GAP-02189":{"line":5444,"offset":971900,"length":176,"previous":"M21-GAP-02188","next":"M21-GAP-02190"},"M21-GAP-02190":{"line":5445,"offset":972076,"length":176,"previous":"M21-GAP-02189","next":"M21-GAP-02191"},"M21-GAP-02191":{"line":5446,"offset":972252,"length":176,"previous":"M21-GAP-02190","next":"M21-GAP-02192"},"M21-GAP-02192":{"line":5447,"offset":972428,"length":176,"previous":"M21-GAP-02191","next":"M21-GAP-02193"},"M21-GAP-02193":{"line":5448,"offset":972604,"length":176,"previous":"M21-GAP-02192","next":"M21-GAP-02194"},"M21-GAP-02194":{"line":5449,"offset":972780,"length":176,"previous":"M21-GAP-02193","next":"M21-GAP-02195"},"M21-GAP-02195":{"line":5450,"offset":972956,"length":175,"previous":"M21-GAP-02194","next":"M21-GAP-02196"},"M21-GAP-02196":{"line":5451,"offset":973131,"length":176,"previous":"M21-GAP-02195","next":"M21-GAP-02197"},"M21-GAP-02197":{"line":5452,"offset":973307,"length":176,"previous":"M21-GAP-02196","next":"M21-GAP-02198"},"M21-GAP-02198":{"line":5453,"offset":973483,"length":176,"previous":"M21-GAP-02197","next":"M21-GAP-02199"},"M21-GAP-02199":{"line":5454,"offset":973659,"length":176,"previous":"M21-GAP-02198","next":"M21-GAP-02200"},"M21-GAP-02200":{"line":5455,"offset":973835,"length":176,"previous":"M21-GAP-02199","next":"M21-GAP-02201"},"M21-GAP-02201":{"line":5456,"offset":974011,"length":176,"previous":"M21-GAP-02200","next":"M21-GAP-02202"},"M21-GAP-02202":{"line":5457,"offset":974187,"length":176,"previous":"M21-GAP-02201","next":"M21-GAP-02203"},"M21-GAP-02203":{"line":5458,"offset":974363,"length":176,"previous":"M21-GAP-02202","next":"M21-GAP-02204"},"M21-GAP-02204":{"line":5459,"offset":974539,"length":176,"previous":"M21-GAP-02203","next":"M21-GAP-02205"},"M21-GAP-02205":{"line":5460,"offset":974715,"length":176,"previous":"M21-GAP-02204","next":"M21-GAP-02206"},"M21-GAP-02206":{"line":5461,"offset":974891,"length":175,"previous":"M21-GAP-02205","next":"M21-GAP-02207"},"M21-GAP-02207":{"line":5462,"offset":975066,"length":175,"previous":"M21-GAP-02206","next":"M21-GAP-02208"},"M21-GAP-02208":{"line":5463,"offset":975241,"length":175,"previous":"M21-GAP-02207","next":"M21-GAP-02209"},"M21-GAP-02209":{"line":5464,"offset":975416,"length":175,"previous":"M21-GAP-02208","next":"M21-GAP-02210"},"M21-GAP-02210":{"line":5465,"offset":975591,"length":175,"previous":"M21-GAP-02209","next":"M21-GAP-02211"},"M21-GAP-02211":{"line":5466,"offset":975766,"length":175,"previous":"M21-GAP-02210","next":"M21-GAP-02212"},"M21-GAP-02212":{"line":5467,"offset":975941,"length":175,"previous":"M21-GAP-02211","next":"M21-GAP-02213"},"M21-GAP-02213":{"line":5468,"offset":976116,"length":185,"previous":"M21-GAP-02212","next":"M21-GAP-02214"},"M21-GAP-02214":{"line":5469,"offset":976301,"length":185,"previous":"M21-GAP-02213","next":"M21-GAP-02215"},"M21-GAP-02215":{"line":5470,"offset":976486,"length":185,"previous":"M21-GAP-02214","next":"M21-GAP-02216"},"M21-GAP-02216":{"line":5471,"offset":976671,"length":178,"previous":"M21-GAP-02215","next":"M21-GAP-02217"},"M21-GAP-02217":{"line":5472,"offset":976849,"length":178,"previous":"M21-GAP-02216","next":"M21-GAP-02218"},"M21-GAP-02218":{"line":5473,"offset":977027,"length":179,"previous":"M21-GAP-02217","next":"M21-GAP-02219"},"M21-GAP-02219":{"line":5474,"offset":977206,"length":179,"previous":"M21-GAP-02218","next":"M21-GAP-02220"},"M21-GAP-02220":{"line":5475,"offset":977385,"length":179,"previous":"M21-GAP-02219","next":"M21-GAP-02221"},"M21-GAP-02221":{"line":5476,"offset":977564,"length":179,"previous":"M21-GAP-02220","next":"M21-GAP-02222"},"M21-GAP-02222":{"line":5477,"offset":977743,"length":179,"previous":"M21-GAP-02221","next":"M21-GAP-02223"},"M21-GAP-02223":{"line":5478,"offset":977922,"length":179,"previous":"M21-GAP-02222","next":"M21-GAP-02224"},"M21-GAP-02224":{"line":5479,"offset":978101,"length":179,"previous":"M21-GAP-02223","next":"M21-GAP-02225"},"M21-GAP-02225":{"line":5480,"offset":978280,"length":179,"previous":"M21-GAP-02224","next":"M21-GAP-02226"},"M21-GAP-02226":{"line":5481,"offset":978459,"length":178,"previous":"M21-GAP-02225","next":"M21-GAP-02227"},"M21-GAP-02227":{"line":5482,"offset":978637,"length":178,"previous":"M21-GAP-02226","next":"M21-GAP-02228"},"M21-GAP-02228":{"line":5483,"offset":978815,"length":178,"previous":"M21-GAP-02227","next":"M21-GAP-02229"},"M21-GAP-02229":{"line":5484,"offset":978993,"length":178,"previous":"M21-GAP-02228","next":"M21-GAP-02230"},"M21-GAP-02230":{"line":5485,"offset":979171,"length":178,"previous":"M21-GAP-02229","next":"M21-GAP-02231"},"M21-GAP-02231":{"line":5486,"offset":979349,"length":178,"previous":"M21-GAP-02230","next":"M21-GAP-02232"},"M21-GAP-02232":{"line":5487,"offset":979527,"length":178,"previous":"M21-GAP-02231","next":"M21-GAP-02233"},"M21-GAP-02233":{"line":5488,"offset":979705,"length":178,"previous":"M21-GAP-02232","next":"M21-GAP-02234"},"M21-GAP-02234":{"line":5489,"offset":979883,"length":171,"previous":"M21-GAP-02233","next":"M21-GAP-02235"},"M21-GAP-02235":{"line":5490,"offset":980054,"length":171,"previous":"M21-GAP-02234","next":"M21-GAP-02236"},"M21-GAP-02236":{"line":5491,"offset":980225,"length":172,"previous":"M21-GAP-02235","next":"M21-GAP-02237"},"M21-GAP-02237":{"line":5492,"offset":980397,"length":172,"previous":"M21-GAP-02236","next":"M21-GAP-02238"},"M21-GAP-02238":{"line":5493,"offset":980569,"length":172,"previous":"M21-GAP-02237","next":"M21-GAP-02239"},"M21-GAP-02239":{"line":5494,"offset":980741,"length":172,"previous":"M21-GAP-02238","next":"M21-GAP-02240"},"M21-GAP-02240":{"line":5495,"offset":980913,"length":172,"previous":"M21-GAP-02239","next":"M21-GAP-02241"},"M21-GAP-02241":{"line":5496,"offset":981085,"length":172,"previous":"M21-GAP-02240","next":"M21-GAP-02242"},"M21-GAP-02242":{"line":5497,"offset":981257,"length":172,"previous":"M21-GAP-02241","next":"M21-GAP-02243"},"M21-GAP-02243":{"line":5498,"offset":981429,"length":172,"previous":"M21-GAP-02242","next":"M21-GAP-02244"},"M21-GAP-02244":{"line":5499,"offset":981601,"length":172,"previous":"M21-GAP-02243","next":"M21-GAP-02245"},"M21-GAP-02245":{"line":5500,"offset":981773,"length":172,"previous":"M21-GAP-02244","next":"M21-GAP-02246"},"M21-GAP-02246":{"line":5501,"offset":981945,"length":171,"previous":"M21-GAP-02245","next":"M21-GAP-02247"},"M21-GAP-02247":{"line":5502,"offset":982116,"length":172,"previous":"M21-GAP-02246","next":"M21-GAP-02248"},"M21-GAP-02248":{"line":5503,"offset":982288,"length":172,"previous":"M21-GAP-02247","next":"M21-GAP-02249"},"M21-GAP-02249":{"line":5504,"offset":982460,"length":172,"previous":"M21-GAP-02248","next":"M21-GAP-02250"},"M21-GAP-02250":{"line":5505,"offset":982632,"length":172,"previous":"M21-GAP-02249","next":"M21-GAP-02251"},"M21-GAP-02251":{"line":5506,"offset":982804,"length":172,"previous":"M21-GAP-02250","next":"M21-GAP-02252"},"M21-GAP-02252":{"line":5507,"offset":982976,"length":172,"previous":"M21-GAP-02251","next":"M21-GAP-02253"},"M21-GAP-02253":{"line":5508,"offset":983148,"length":172,"previous":"M21-GAP-02252","next":"M21-GAP-02254"},"M21-GAP-02254":{"line":5509,"offset":983320,"length":172,"previous":"M21-GAP-02253","next":"M21-GAP-02255"},"M21-GAP-02255":{"line":5510,"offset":983492,"length":172,"previous":"M21-GAP-02254","next":"M21-GAP-02256"},"M21-GAP-02256":{"line":5511,"offset":983664,"length":172,"previous":"M21-GAP-02255","next":"M21-GAP-02257"},"M21-GAP-02257":{"line":5512,"offset":983836,"length":171,"previous":"M21-GAP-02256","next":"M21-GAP-02258"},"M21-GAP-02258":{"line":5513,"offset":984007,"length":172,"previous":"M21-GAP-02257","next":"M21-GAP-02259"},"M21-GAP-02259":{"line":5514,"offset":984179,"length":172,"previous":"M21-GAP-02258","next":"M21-GAP-02260"},"M21-GAP-02260":{"line":5515,"offset":984351,"length":172,"previous":"M21-GAP-02259","next":"M21-GAP-02261"},"M21-GAP-02261":{"line":5516,"offset":984523,"length":172,"previous":"M21-GAP-02260","next":"M21-GAP-02262"},"M21-GAP-02262":{"line":5517,"offset":984695,"length":172,"previous":"M21-GAP-02261","next":"M21-GAP-02263"},"M21-GAP-02263":{"line":5518,"offset":984867,"length":172,"previous":"M21-GAP-02262","next":"M21-GAP-02264"},"M21-GAP-02264":{"line":5519,"offset":985039,"length":172,"previous":"M21-GAP-02263","next":"M21-GAP-02265"},"M21-GAP-02265":{"line":5520,"offset":985211,"length":172,"previous":"M21-GAP-02264","next":"M21-GAP-02266"},"M21-GAP-02266":{"line":5521,"offset":985383,"length":172,"previous":"M21-GAP-02265","next":"M21-GAP-02267"},"M21-GAP-02267":{"line":5522,"offset":985555,"length":172,"previous":"M21-GAP-02266","next":"M21-GAP-02268"},"M21-GAP-02268":{"line":5523,"offset":985727,"length":171,"previous":"M21-GAP-02267","next":"M21-GAP-02269"},"M21-GAP-02269":{"line":5524,"offset":985898,"length":172,"previous":"M21-GAP-02268","next":"M21-GAP-02270"},"M21-GAP-02270":{"line":5525,"offset":986070,"length":172,"previous":"M21-GAP-02269","next":"M21-GAP-02271"},"M21-GAP-02271":{"line":5526,"offset":986242,"length":172,"previous":"M21-GAP-02270","next":"M21-GAP-02272"},"M21-GAP-02272":{"line":5527,"offset":986414,"length":172,"previous":"M21-GAP-02271","next":"M21-GAP-02273"},"M21-GAP-02273":{"line":5528,"offset":986586,"length":172,"previous":"M21-GAP-02272","next":"M21-GAP-02274"},"M21-GAP-02274":{"line":5529,"offset":986758,"length":172,"previous":"M21-GAP-02273","next":"M21-GAP-02275"},"M21-GAP-02275":{"line":5530,"offset":986930,"length":172,"previous":"M21-GAP-02274","next":"M21-GAP-02276"},"M21-GAP-02276":{"line":5531,"offset":987102,"length":172,"previous":"M21-GAP-02275","next":"M21-GAP-02277"},"M21-GAP-02277":{"line":5532,"offset":987274,"length":172,"previous":"M21-GAP-02276","next":"M21-GAP-02278"},"M21-GAP-02278":{"line":5533,"offset":987446,"length":172,"previous":"M21-GAP-02277","next":"M21-GAP-02279"},"M21-GAP-02279":{"line":5534,"offset":987618,"length":171,"previous":"M21-GAP-02278","next":"M21-GAP-02280"},"M21-GAP-02280":{"line":5535,"offset":987789,"length":172,"previous":"M21-GAP-02279","next":"M21-GAP-02281"},"M21-GAP-02281":{"line":5536,"offset":987961,"length":172,"previous":"M21-GAP-02280","next":"M21-GAP-02282"},"M21-GAP-02282":{"line":5537,"offset":988133,"length":172,"previous":"M21-GAP-02281","next":"M21-GAP-02283"},"M21-GAP-02283":{"line":5538,"offset":988305,"length":171,"previous":"M21-GAP-02282","next":"M21-GAP-02284"},"M21-GAP-02284":{"line":5539,"offset":988476,"length":171,"previous":"M21-GAP-02283","next":"M21-GAP-02285"},"M21-GAP-02285":{"line":5540,"offset":988647,"length":171,"previous":"M21-GAP-02284","next":"M21-GAP-02286"},"M21-GAP-02286":{"line":5541,"offset":988818,"length":171,"previous":"M21-GAP-02285","next":"M21-GAP-02287"},"M21-GAP-02287":{"line":5542,"offset":988989,"length":184,"previous":"M21-GAP-02286","next":"M21-GAP-02288"},"M21-GAP-02288":{"line":5543,"offset":989173,"length":184,"previous":"M21-GAP-02287","next":"M21-GAP-02289"},"M21-GAP-02289":{"line":5544,"offset":989357,"length":184,"previous":"M21-GAP-02288","next":"M21-GAP-02290"},"M21-GAP-02290":{"line":5545,"offset":989541,"length":184,"previous":"M21-GAP-02289","next":"M21-GAP-02291"},"M21-GAP-02291":{"line":5546,"offset":989725,"length":197,"previous":"M21-GAP-02290","next":"M21-GAP-02292"},"M21-GAP-02292":{"line":5547,"offset":989922,"length":197,"previous":"M21-GAP-02291","next":"M21-GAP-02293"},"M21-GAP-02293":{"line":5548,"offset":990119,"length":195,"previous":"M21-GAP-02292","next":"M21-GAP-02294"},"M21-GAP-02294":{"line":5549,"offset":990314,"length":197,"previous":"M21-GAP-02293","next":"M21-GAP-02295"},"M21-GAP-02295":{"line":5550,"offset":990511,"length":197,"previous":"M21-GAP-02294","next":"M21-GAP-02296"},"M21-GAP-02296":{"line":5551,"offset":990708,"length":196,"previous":"M21-GAP-02295","next":"M21-GAP-02297"},"M21-GAP-02297":{"line":5552,"offset":990904,"length":212,"previous":"M21-GAP-02296","next":"M21-GAP-02298"},"M21-GAP-02298":{"line":5553,"offset":991116,"length":212,"previous":"M21-GAP-02297","next":"M21-GAP-02299"},"M21-GAP-02299":{"line":5554,"offset":991328,"length":212,"previous":"M21-GAP-02298","next":"M21-GAP-02300"},"M21-GAP-02300":{"line":5555,"offset":991540,"length":212,"previous":"M21-GAP-02299","next":"M21-GAP-02301"},"M21-GAP-02301":{"line":5556,"offset":991752,"length":212,"previous":"M21-GAP-02300","next":"M21-GAP-02302"},"M21-GAP-02302":{"line":5557,"offset":991964,"length":201,"previous":"M21-GAP-02301","next":"M21-GAP-02303"},"M21-GAP-02303":{"line":5558,"offset":992165,"length":201,"previous":"M21-GAP-02302","next":"M21-GAP-02304"},"M21-GAP-02304":{"line":5559,"offset":992366,"length":201,"previous":"M21-GAP-02303","next":"M21-GAP-02305"},"M21-GAP-02305":{"line":5560,"offset":992567,"length":201,"previous":"M21-GAP-02304","next":"M21-GAP-02306"},"M21-GAP-02306":{"line":5561,"offset":992768,"length":201,"previous":"M21-GAP-02305","next":"M21-GAP-02307"},"M21-GAP-02307":{"line":5562,"offset":992969,"length":215,"previous":"M21-GAP-02306","next":"M21-GAP-02308"},"M21-GAP-02308":{"line":5563,"offset":993184,"length":215,"previous":"M21-GAP-02307","next":"M21-GAP-02309"},"M21-GAP-02309":{"line":5564,"offset":993399,"length":215,"previous":"M21-GAP-02308","next":"M21-GAP-02310"},"M21-GAP-02310":{"line":5565,"offset":993614,"length":204,"previous":"M21-GAP-02309","next":"M21-GAP-02311"},"M21-GAP-02311":{"line":5566,"offset":993818,"length":204,"previous":"M21-GAP-02310","next":"M21-GAP-02312"},"M21-GAP-02312":{"line":5567,"offset":994022,"length":204,"previous":"M21-GAP-02311","next":"M21-GAP-02313"},"M21-GAP-02313":{"line":5568,"offset":994226,"length":214,"previous":"M21-GAP-02312","next":"M21-GAP-02314"},"M21-GAP-02314":{"line":5569,"offset":994440,"length":214,"previous":"M21-GAP-02313","next":"M21-GAP-02315"},"M21-GAP-02315":{"line":5570,"offset":994654,"length":214,"previous":"M21-GAP-02314","next":"M21-GAP-02316"},"M21-GAP-02316":{"line":5571,"offset":994868,"length":203,"previous":"M21-GAP-02315","next":"M21-GAP-02317"},"M21-GAP-02317":{"line":5572,"offset":995071,"length":203,"previous":"M21-GAP-02316","next":"M21-GAP-02318"},"M21-GAP-02318":{"line":5573,"offset":995274,"length":203,"previous":"M21-GAP-02317","next":"M21-GAP-02319"},"M21-GAP-02319":{"line":5574,"offset":995477,"length":207,"previous":"M21-GAP-02318","next":"M21-GAP-02320"},"M21-GAP-02320":{"line":5575,"offset":995684,"length":207,"previous":"M21-GAP-02319","next":"M21-GAP-02321"},"M21-GAP-02321":{"line":5576,"offset":995891,"length":207,"previous":"M21-GAP-02320","next":"M21-GAP-02322"},"M21-GAP-02322":{"line":5577,"offset":996098,"length":207,"previous":"M21-GAP-02321","next":"M21-GAP-02323"},"M21-GAP-02323":{"line":5578,"offset":996305,"length":207,"previous":"M21-GAP-02322","next":"M21-GAP-02324"},"M21-GAP-02324":{"line":5579,"offset":996512,"length":196,"previous":"M21-GAP-02323","next":"M21-GAP-02325"},"M21-GAP-02325":{"line":5580,"offset":996708,"length":196,"previous":"M21-GAP-02324","next":"M21-GAP-02326"},"M21-GAP-02326":{"line":5581,"offset":996904,"length":196,"previous":"M21-GAP-02325","next":"M21-GAP-02327"},"M21-GAP-02327":{"line":5582,"offset":997100,"length":196,"previous":"M21-GAP-02326","next":"M21-GAP-02328"},"M21-GAP-02328":{"line":5583,"offset":997296,"length":196,"previous":"M21-GAP-02327","next":"M21-GAP-02329"},"M21-GAP-02329":{"line":5584,"offset":997492,"length":184,"previous":"M21-GAP-02328","next":"M21-GAP-02330"},"M21-GAP-02330":{"line":5585,"offset":997676,"length":184,"previous":"M21-GAP-02329","next":"M21-GAP-02331"},"M21-GAP-02331":{"line":5586,"offset":997860,"length":185,"previous":"M21-GAP-02330","next":"M21-GAP-02332"},"M21-GAP-02332":{"line":5587,"offset":998045,"length":185,"previous":"M21-GAP-02331","next":"M21-GAP-02333"},"M21-GAP-02333":{"line":5588,"offset":998230,"length":185,"previous":"M21-GAP-02332","next":"M21-GAP-02334"},"M21-GAP-02334":{"line":5589,"offset":998415,"length":185,"previous":"M21-GAP-02333","next":"M21-GAP-02335"},"M21-GAP-02335":{"line":5590,"offset":998600,"length":185,"previous":"M21-GAP-02334","next":"M21-GAP-02336"},"M21-GAP-02336":{"line":5591,"offset":998785,"length":185,"previous":"M21-GAP-02335","next":"M21-GAP-02337"},"M21-GAP-02337":{"line":5592,"offset":998970,"length":185,"previous":"M21-GAP-02336","next":"M21-GAP-02338"},"M21-GAP-02338":{"line":5593,"offset":999155,"length":185,"previous":"M21-GAP-02337","next":"M21-GAP-02339"},"M21-GAP-02339":{"line":5594,"offset":999340,"length":185,"previous":"M21-GAP-02338","next":"M21-GAP-02340"},"M21-GAP-02340":{"line":5595,"offset":999525,"length":185,"previous":"M21-GAP-02339","next":"M21-GAP-02341"},"M21-GAP-02341":{"line":5596,"offset":999710,"length":184,"previous":"M21-GAP-02340","next":"M21-GAP-02342"},"M21-GAP-02342":{"line":5597,"offset":999894,"length":185,"previous":"M21-GAP-02341","next":"M21-GAP-02343"},"M21-GAP-02343":{"line":5598,"offset":1000079,"length":185,"previous":"M21-GAP-02342","next":"M21-GAP-02344"},"M21-GAP-02344":{"line":5599,"offset":1000264,"length":185,"previous":"M21-GAP-02343","next":"M21-GAP-02345"},"M21-GAP-02345":{"line":5600,"offset":1000449,"length":185,"previous":"M21-GAP-02344","next":"M21-GAP-02346"},"M21-GAP-02346":{"line":5601,"offset":1000634,"length":185,"previous":"M21-GAP-02345","next":"M21-GAP-02347"},"M21-GAP-02347":{"line":5602,"offset":1000819,"length":185,"previous":"M21-GAP-02346","next":"M21-GAP-02348"},"M21-GAP-02348":{"line":5603,"offset":1001004,"length":185,"previous":"M21-GAP-02347","next":"M21-GAP-02349"},"M21-GAP-02349":{"line":5604,"offset":1001189,"length":185,"previous":"M21-GAP-02348","next":"M21-GAP-02350"},"M21-GAP-02350":{"line":5605,"offset":1001374,"length":185,"previous":"M21-GAP-02349","next":"M21-GAP-02351"},"M21-GAP-02351":{"line":5606,"offset":1001559,"length":185,"previous":"M21-GAP-02350","next":"M21-GAP-02352"},"M21-GAP-02352":{"line":5607,"offset":1001744,"length":184,"previous":"M21-GAP-02351","next":"M21-GAP-02353"},"M21-GAP-02353":{"line":5608,"offset":1001928,"length":185,"previous":"M21-GAP-02352","next":"M21-GAP-02354"},"M21-GAP-02354":{"line":5609,"offset":1002113,"length":185,"previous":"M21-GAP-02353","next":"M21-GAP-02355"},"M21-GAP-02355":{"line":5610,"offset":1002298,"length":185,"previous":"M21-GAP-02354","next":"M21-GAP-02356"},"M21-GAP-02356":{"line":5611,"offset":1002483,"length":185,"previous":"M21-GAP-02355","next":"M21-GAP-02357"},"M21-GAP-02357":{"line":5612,"offset":1002668,"length":185,"previous":"M21-GAP-02356","next":"M21-GAP-02358"},"M21-GAP-02358":{"line":5613,"offset":1002853,"length":185,"previous":"M21-GAP-02357","next":"M21-GAP-02359"},"M21-GAP-02359":{"line":5614,"offset":1003038,"length":185,"previous":"M21-GAP-02358","next":"M21-GAP-02360"},"M21-GAP-02360":{"line":5615,"offset":1003223,"length":185,"previous":"M21-GAP-02359","next":"M21-GAP-02361"},"M21-GAP-02361":{"line":5616,"offset":1003408,"length":185,"previous":"M21-GAP-02360","next":"M21-GAP-02362"},"M21-GAP-02362":{"line":5617,"offset":1003593,"length":185,"previous":"M21-GAP-02361","next":"M21-GAP-02363"},"M21-GAP-02363":{"line":5618,"offset":1003778,"length":184,"previous":"M21-GAP-02362","next":"M21-GAP-02364"},"M21-GAP-02364":{"line":5619,"offset":1003962,"length":185,"previous":"M21-GAP-02363","next":"M21-GAP-02365"},"M21-GAP-02365":{"line":5620,"offset":1004147,"length":185,"previous":"M21-GAP-02364","next":"M21-GAP-02366"},"M21-GAP-02366":{"line":5621,"offset":1004332,"length":185,"previous":"M21-GAP-02365","next":"M21-GAP-02367"},"M21-GAP-02367":{"line":5622,"offset":1004517,"length":185,"previous":"M21-GAP-02366","next":"M21-GAP-02368"},"M21-GAP-02368":{"line":5623,"offset":1004702,"length":185,"previous":"M21-GAP-02367","next":"M21-GAP-02369"},"M21-GAP-02369":{"line":5624,"offset":1004887,"length":185,"previous":"M21-GAP-02368","next":"M21-GAP-02370"},"M21-GAP-02370":{"line":5625,"offset":1005072,"length":185,"previous":"M21-GAP-02369","next":"M21-GAP-02371"},"M21-GAP-02371":{"line":5626,"offset":1005257,"length":185,"previous":"M21-GAP-02370","next":"M21-GAP-02372"},"M21-GAP-02372":{"line":5627,"offset":1005442,"length":185,"previous":"M21-GAP-02371","next":"M21-GAP-02373"},"M21-GAP-02373":{"line":5628,"offset":1005627,"length":185,"previous":"M21-GAP-02372","next":"M21-GAP-02374"},"M21-GAP-02374":{"line":5629,"offset":1005812,"length":184,"previous":"M21-GAP-02373","next":"M21-GAP-02375"},"M21-GAP-02375":{"line":5630,"offset":1005996,"length":185,"previous":"M21-GAP-02374","next":"M21-GAP-02376"},"M21-GAP-02376":{"line":5631,"offset":1006181,"length":185,"previous":"M21-GAP-02375","next":"M21-GAP-02377"},"M21-GAP-02377":{"line":5632,"offset":1006366,"length":185,"previous":"M21-GAP-02376","next":"M21-GAP-02378"},"M21-GAP-02378":{"line":5633,"offset":1006551,"length":185,"previous":"M21-GAP-02377","next":"M21-GAP-02379"},"M21-GAP-02379":{"line":5634,"offset":1006736,"length":185,"previous":"M21-GAP-02378","next":"M21-GAP-02380"},"M21-GAP-02380":{"line":5635,"offset":1006921,"length":185,"previous":"M21-GAP-02379","next":"M21-GAP-02381"},"M21-GAP-02381":{"line":5636,"offset":1007106,"length":185,"previous":"M21-GAP-02380","next":"M21-GAP-02382"},"M21-GAP-02382":{"line":5637,"offset":1007291,"length":185,"previous":"M21-GAP-02381","next":"M21-GAP-02383"},"M21-GAP-02383":{"line":5638,"offset":1007476,"length":185,"previous":"M21-GAP-02382","next":"M21-GAP-02384"},"M21-GAP-02384":{"line":5639,"offset":1007661,"length":185,"previous":"M21-GAP-02383","next":"M21-GAP-02385"},"M21-GAP-02385":{"line":5640,"offset":1007846,"length":184,"previous":"M21-GAP-02384","next":"M21-GAP-02386"},"M21-GAP-02386":{"line":5641,"offset":1008030,"length":185,"previous":"M21-GAP-02385","next":"M21-GAP-02387"},"M21-GAP-02387":{"line":5642,"offset":1008215,"length":185,"previous":"M21-GAP-02386","next":"M21-GAP-02388"},"M21-GAP-02388":{"line":5643,"offset":1008400,"length":185,"previous":"M21-GAP-02387","next":"M21-GAP-02389"},"M21-GAP-02389":{"line":5644,"offset":1008585,"length":185,"previous":"M21-GAP-02388","next":"M21-GAP-02390"},"M21-GAP-02390":{"line":5645,"offset":1008770,"length":185,"previous":"M21-GAP-02389","next":"M21-GAP-02391"},"M21-GAP-02391":{"line":5646,"offset":1008955,"length":185,"previous":"M21-GAP-02390","next":"M21-GAP-02392"},"M21-GAP-02392":{"line":5647,"offset":1009140,"length":185,"previous":"M21-GAP-02391","next":"M21-GAP-02393"},"M21-GAP-02393":{"line":5648,"offset":1009325,"length":185,"previous":"M21-GAP-02392","next":"M21-GAP-02394"},"M21-GAP-02394":{"line":5649,"offset":1009510,"length":185,"previous":"M21-GAP-02393","next":"M21-GAP-02395"},"M21-GAP-02395":{"line":5650,"offset":1009695,"length":185,"previous":"M21-GAP-02394","next":"M21-GAP-02396"},"M21-GAP-02396":{"line":5651,"offset":1009880,"length":184,"previous":"M21-GAP-02395","next":"M21-GAP-02397"},"M21-GAP-02397":{"line":5652,"offset":1010064,"length":185,"previous":"M21-GAP-02396","next":"M21-GAP-02398"},"M21-GAP-02398":{"line":5653,"offset":1010249,"length":185,"previous":"M21-GAP-02397","next":"M21-GAP-02399"},"M21-GAP-02399":{"line":5654,"offset":1010434,"length":185,"previous":"M21-GAP-02398","next":"M21-GAP-02400"},"M21-GAP-02400":{"line":5655,"offset":1010619,"length":185,"previous":"M21-GAP-02399","next":"M21-GAP-02401"},"M21-GAP-02401":{"line":5656,"offset":1010804,"length":185,"previous":"M21-GAP-02400","next":"M21-GAP-02402"},"M21-GAP-02402":{"line":5657,"offset":1010989,"length":185,"previous":"M21-GAP-02401","next":"M21-GAP-02403"},"M21-GAP-02403":{"line":5658,"offset":1011174,"length":185,"previous":"M21-GAP-02402","next":"M21-GAP-02404"},"M21-GAP-02404":{"line":5659,"offset":1011359,"length":185,"previous":"M21-GAP-02403","next":"M21-GAP-02405"},"M21-GAP-02405":{"line":5660,"offset":1011544,"length":185,"previous":"M21-GAP-02404","next":"M21-GAP-02406"},"M21-GAP-02406":{"line":5661,"offset":1011729,"length":185,"previous":"M21-GAP-02405","next":"M21-GAP-02407"},"M21-GAP-02407":{"line":5662,"offset":1011914,"length":184,"previous":"M21-GAP-02406","next":"M21-GAP-02408"},"M21-GAP-02408":{"line":5663,"offset":1012098,"length":185,"previous":"M21-GAP-02407","next":"M21-GAP-02409"},"M21-GAP-02409":{"line":5664,"offset":1012283,"length":185,"previous":"M21-GAP-02408","next":"M21-GAP-02410"},"M21-GAP-02410":{"line":5665,"offset":1012468,"length":185,"previous":"M21-GAP-02409","next":"M21-GAP-02411"},"M21-GAP-02411":{"line":5666,"offset":1012653,"length":185,"previous":"M21-GAP-02410","next":"M21-GAP-02412"},"M21-GAP-02412":{"line":5667,"offset":1012838,"length":185,"previous":"M21-GAP-02411","next":"M21-GAP-02413"},"M21-GAP-02413":{"line":5668,"offset":1013023,"length":185,"previous":"M21-GAP-02412","next":"M21-GAP-02414"},"M21-GAP-02414":{"line":5669,"offset":1013208,"length":185,"previous":"M21-GAP-02413","next":"M21-GAP-02415"},"M21-GAP-02415":{"line":5670,"offset":1013393,"length":185,"previous":"M21-GAP-02414","next":"M21-GAP-02416"},"M21-GAP-02416":{"line":5671,"offset":1013578,"length":184,"previous":"M21-GAP-02415","next":"M21-GAP-02417"},"M21-GAP-02417":{"line":5672,"offset":1013762,"length":191,"previous":"M21-GAP-02416","next":"M21-GAP-02418"},"M21-GAP-02418":{"line":5673,"offset":1013953,"length":191,"previous":"M21-GAP-02417","next":"M21-GAP-02419"},"M21-GAP-02419":{"line":5674,"offset":1014144,"length":192,"previous":"M21-GAP-02418","next":"M21-GAP-02420"},"M21-GAP-02420":{"line":5675,"offset":1014336,"length":192,"previous":"M21-GAP-02419","next":"M21-GAP-02421"},"M21-GAP-02421":{"line":5676,"offset":1014528,"length":192,"previous":"M21-GAP-02420","next":"M21-GAP-02422"},"M21-GAP-02422":{"line":5677,"offset":1014720,"length":192,"previous":"M21-GAP-02421","next":"M21-GAP-02423"},"M21-GAP-02423":{"line":5678,"offset":1014912,"length":191,"previous":"M21-GAP-02422","next":"M21-GAP-02424"},"M21-GAP-02424":{"line":5679,"offset":1015103,"length":191,"previous":"M21-GAP-02423","next":"M21-GAP-02425"},"M21-GAP-02425":{"line":5680,"offset":1015294,"length":191,"previous":"M21-GAP-02424","next":"M21-GAP-02426"},"M21-GAP-02426":{"line":5681,"offset":1015485,"length":191,"previous":"M21-GAP-02425","next":"M21-GAP-02427"},"M21-GAP-02427":{"line":5682,"offset":1015676,"length":191,"previous":"M21-GAP-02426","next":"M21-GAP-02428"},"M21-GAP-02428":{"line":5683,"offset":1015867,"length":191,"previous":"M21-GAP-02427","next":"M21-GAP-02429"},"M21-GAP-02429":{"line":5684,"offset":1016058,"length":191,"previous":"M21-GAP-02428","next":"M21-GAP-02430"},"M21-GAP-02430":{"line":5685,"offset":1016249,"length":191,"previous":"M21-GAP-02429","next":"M21-GAP-02431"},"M21-GAP-02431":{"line":5686,"offset":1016440,"length":187,"previous":"M21-GAP-02430","next":"M21-GAP-02432"},"M21-GAP-02432":{"line":5687,"offset":1016627,"length":187,"previous":"M21-GAP-02431","next":"M21-GAP-02433"},"M21-GAP-02433":{"line":5688,"offset":1016814,"length":188,"previous":"M21-GAP-02432","next":"M21-GAP-02434"},"M21-GAP-02434":{"line":5689,"offset":1017002,"length":188,"previous":"M21-GAP-02433","next":"M21-GAP-02435"},"M21-GAP-02435":{"line":5690,"offset":1017190,"length":188,"previous":"M21-GAP-02434","next":"M21-GAP-02436"},"M21-GAP-02436":{"line":5691,"offset":1017378,"length":188,"previous":"M21-GAP-02435","next":"M21-GAP-02437"},"M21-GAP-02437":{"line":5692,"offset":1017566,"length":188,"previous":"M21-GAP-02436","next":"M21-GAP-02438"},"M21-GAP-02438":{"line":5693,"offset":1017754,"length":188,"previous":"M21-GAP-02437","next":"M21-GAP-02439"},"M21-GAP-02439":{"line":5694,"offset":1017942,"length":188,"previous":"M21-GAP-02438","next":"M21-GAP-02440"},"M21-GAP-02440":{"line":5695,"offset":1018130,"length":188,"previous":"M21-GAP-02439","next":"M21-GAP-02441"},"M21-GAP-02441":{"line":5696,"offset":1018318,"length":188,"previous":"M21-GAP-02440","next":"M21-GAP-02442"},"M21-GAP-02442":{"line":5697,"offset":1018506,"length":188,"previous":"M21-GAP-02441","next":"M21-GAP-02443"},"M21-GAP-02443":{"line":5698,"offset":1018694,"length":187,"previous":"M21-GAP-02442","next":"M21-GAP-02444"},"M21-GAP-02444":{"line":5699,"offset":1018881,"length":187,"previous":"M21-GAP-02443","next":"M21-GAP-02445"},"M21-GAP-02445":{"line":5700,"offset":1019068,"length":187,"previous":"M21-GAP-02444","next":"M21-GAP-02446"},"M21-GAP-02446":{"line":5701,"offset":1019255,"length":187,"previous":"M21-GAP-02445","next":"M21-GAP-02447"},"M21-GAP-02447":{"line":5702,"offset":1019442,"length":187,"previous":"M21-GAP-02446","next":"M21-GAP-02448"},"M21-GAP-02448":{"line":5703,"offset":1019629,"length":187,"previous":"M21-GAP-02447","next":"M21-GAP-02449"},"M21-GAP-02449":{"line":5704,"offset":1019816,"length":187,"previous":"M21-GAP-02448","next":"M21-GAP-02450"},"M21-GAP-02450":{"line":5705,"offset":1020003,"length":187,"previous":"M21-GAP-02449","next":"M21-GAP-02451"},"M21-GAP-02451":{"line":5706,"offset":1020190,"length":186,"previous":"M21-GAP-02450","next":"M21-GAP-02452"},"M21-GAP-02452":{"line":5707,"offset":1020376,"length":181,"previous":"M21-GAP-02451","next":"M21-GAP-02453"},"M21-GAP-02453":{"line":5708,"offset":1020557,"length":181,"previous":"M21-GAP-02452","next":"M21-GAP-02454"},"M21-GAP-02454":{"line":5709,"offset":1020738,"length":182,"previous":"M21-GAP-02453","next":"M21-GAP-02455"},"M21-GAP-02455":{"line":5710,"offset":1020920,"length":182,"previous":"M21-GAP-02454","next":"M21-GAP-02456"},"M21-GAP-02456":{"line":5711,"offset":1021102,"length":182,"previous":"M21-GAP-02455","next":"M21-GAP-02457"},"M21-GAP-02457":{"line":5712,"offset":1021284,"length":182,"previous":"M21-GAP-02456","next":"M21-GAP-02458"},"M21-GAP-02458":{"line":5713,"offset":1021466,"length":181,"previous":"M21-GAP-02457","next":"M21-GAP-02459"},"M21-GAP-02459":{"line":5714,"offset":1021647,"length":181,"previous":"M21-GAP-02458","next":"M21-GAP-02460"},"M21-GAP-02460":{"line":5715,"offset":1021828,"length":181,"previous":"M21-GAP-02459","next":"M21-GAP-02461"},"M21-GAP-02461":{"line":5716,"offset":1022009,"length":181,"previous":"M21-GAP-02460","next":"M21-GAP-02462"},"M21-GAP-02462":{"line":5717,"offset":1022190,"length":181,"previous":"M21-GAP-02461","next":"M21-GAP-02463"},"M21-GAP-02463":{"line":5718,"offset":1022371,"length":181,"previous":"M21-GAP-02462","next":"M21-GAP-02464"},"M21-GAP-02464":{"line":5719,"offset":1022552,"length":181,"previous":"M21-GAP-02463","next":"M21-GAP-02465"},"M21-GAP-02465":{"line":5720,"offset":1022733,"length":181,"previous":"M21-GAP-02464","next":"M21-GAP-02466"},"M21-GAP-02466":{"line":5721,"offset":1022914,"length":173,"previous":"M21-GAP-02465","next":"M21-GAP-02467"},"M21-GAP-02467":{"line":5722,"offset":1023087,"length":173,"previous":"M21-GAP-02466","next":"M21-GAP-02468"},"M21-GAP-02468":{"line":5723,"offset":1023260,"length":174,"previous":"M21-GAP-02467","next":"M21-GAP-02469"},"M21-GAP-02469":{"line":5724,"offset":1023434,"length":174,"previous":"M21-GAP-02468","next":"M21-GAP-02470"},"M21-GAP-02470":{"line":5725,"offset":1023608,"length":174,"previous":"M21-GAP-02469","next":"M21-GAP-02471"},"M21-GAP-02471":{"line":5726,"offset":1023782,"length":174,"previous":"M21-GAP-02470","next":"M21-GAP-02472"},"M21-GAP-02472":{"line":5727,"offset":1023956,"length":174,"previous":"M21-GAP-02471","next":"M21-GAP-02473"},"M21-GAP-02473":{"line":5728,"offset":1024130,"length":174,"previous":"M21-GAP-02472","next":"M21-GAP-02474"},"M21-GAP-02474":{"line":5729,"offset":1024304,"length":174,"previous":"M21-GAP-02473","next":"M21-GAP-02475"},"M21-GAP-02475":{"line":5730,"offset":1024478,"length":174,"previous":"M21-GAP-02474","next":"M21-GAP-02476"},"M21-GAP-02476":{"line":5731,"offset":1024652,"length":174,"previous":"M21-GAP-02475","next":"M21-GAP-02477"},"M21-GAP-02477":{"line":5732,"offset":1024826,"length":174,"previous":"M21-GAP-02476","next":"M21-GAP-02478"},"M21-GAP-02478":{"line":5733,"offset":1025000,"length":173,"previous":"M21-GAP-02477","next":"M21-GAP-02479"},"M21-GAP-02479":{"line":5734,"offset":1025173,"length":174,"previous":"M21-GAP-02478","next":"M21-GAP-02480"},"M21-GAP-02480":{"line":5735,"offset":1025347,"length":174,"previous":"M21-GAP-02479","next":"M21-GAP-02481"},"M21-GAP-02481":{"line":5736,"offset":1025521,"length":174,"previous":"M21-GAP-02480","next":"M21-GAP-02482"},"M21-GAP-02482":{"line":5737,"offset":1025695,"length":174,"previous":"M21-GAP-02481","next":"M21-GAP-02483"},"M21-GAP-02483":{"line":5738,"offset":1025869,"length":174,"previous":"M21-GAP-02482","next":"M21-GAP-02484"},"M21-GAP-02484":{"line":5739,"offset":1026043,"length":174,"previous":"M21-GAP-02483","next":"M21-GAP-02485"},"M21-GAP-02485":{"line":5740,"offset":1026217,"length":173,"previous":"M21-GAP-02484","next":"M21-GAP-02486"},"M21-GAP-02486":{"line":5741,"offset":1026390,"length":173,"previous":"M21-GAP-02485","next":"M21-GAP-02487"},"M21-GAP-02487":{"line":5742,"offset":1026563,"length":173,"previous":"M21-GAP-02486","next":"M21-GAP-02488"},"M21-GAP-02488":{"line":5743,"offset":1026736,"length":173,"previous":"M21-GAP-02487","next":"M21-GAP-02489"},"M21-GAP-02489":{"line":5744,"offset":1026909,"length":173,"previous":"M21-GAP-02488","next":"M21-GAP-02490"},"M21-GAP-02490":{"line":5745,"offset":1027082,"length":173,"previous":"M21-GAP-02489","next":"M21-GAP-02491"},"M21-GAP-02491":{"line":5746,"offset":1027255,"length":173,"previous":"M21-GAP-02490","next":"M21-GAP-02492"},"M21-GAP-02492":{"line":5747,"offset":1027428,"length":180,"previous":"M21-GAP-02491","next":"M21-GAP-02493"},"M21-GAP-02493":{"line":5748,"offset":1027608,"length":180,"previous":"M21-GAP-02492","next":"M21-GAP-02494"},"M21-GAP-02494":{"line":5749,"offset":1027788,"length":181,"previous":"M21-GAP-02493","next":"M21-GAP-02495"},"M21-GAP-02495":{"line":5750,"offset":1027969,"length":181,"previous":"M21-GAP-02494","next":"M21-GAP-02496"},"M21-GAP-02496":{"line":5751,"offset":1028150,"length":181,"previous":"M21-GAP-02495","next":"M21-GAP-02497"},"M21-GAP-02497":{"line":5752,"offset":1028331,"length":181,"previous":"M21-GAP-02496","next":"M21-GAP-02498"},"M21-GAP-02498":{"line":5753,"offset":1028512,"length":181,"previous":"M21-GAP-02497","next":"M21-GAP-02499"},"M21-GAP-02499":{"line":5754,"offset":1028693,"length":181,"previous":"M21-GAP-02498","next":"M21-GAP-02500"},"M21-GAP-02500":{"line":5755,"offset":1028874,"length":180,"previous":"M21-GAP-02499","next":"M21-GAP-02501"},"M21-GAP-02501":{"line":5756,"offset":1029054,"length":180,"previous":"M21-GAP-02500","next":"M21-GAP-02502"},"M21-GAP-02502":{"line":5757,"offset":1029234,"length":180,"previous":"M21-GAP-02501","next":"M21-GAP-02503"},"M21-GAP-02503":{"line":5758,"offset":1029414,"length":180,"previous":"M21-GAP-02502","next":"M21-GAP-02504"},"M21-GAP-02504":{"line":5759,"offset":1029594,"length":180,"previous":"M21-GAP-02503","next":"M21-GAP-02505"},"M21-GAP-02505":{"line":5760,"offset":1029774,"length":180,"previous":"M21-GAP-02504","next":"M21-GAP-02506"},"M21-GAP-02506":{"line":5761,"offset":1029954,"length":180,"previous":"M21-GAP-02505","next":"M21-GAP-02507"},"M21-GAP-02507":{"line":5762,"offset":1030134,"length":180,"previous":"M21-GAP-02506","next":"M21-GAP-02508"},"M21-GAP-02508":{"line":5763,"offset":1030314,"length":186,"previous":"M21-GAP-02507","next":"M21-GAP-02509"},"M21-GAP-02509":{"line":5764,"offset":1030500,"length":186,"previous":"M21-GAP-02508","next":"M21-GAP-02510"},"M21-GAP-02510":{"line":5765,"offset":1030686,"length":187,"previous":"M21-GAP-02509","next":"M21-GAP-02511"},"M21-GAP-02511":{"line":5766,"offset":1030873,"length":187,"previous":"M21-GAP-02510","next":"M21-GAP-02512"},"M21-GAP-02512":{"line":5767,"offset":1031060,"length":187,"previous":"M21-GAP-02511","next":"M21-GAP-02513"},"M21-GAP-02513":{"line":5768,"offset":1031247,"length":187,"previous":"M21-GAP-02512","next":"M21-GAP-02514"},"M21-GAP-02514":{"line":5769,"offset":1031434,"length":187,"previous":"M21-GAP-02513","next":"M21-GAP-02515"},"M21-GAP-02515":{"line":5770,"offset":1031621,"length":187,"previous":"M21-GAP-02514","next":"M21-GAP-02516"},"M21-GAP-02516":{"line":5771,"offset":1031808,"length":187,"previous":"M21-GAP-02515","next":"M21-GAP-02517"},"M21-GAP-02517":{"line":5772,"offset":1031995,"length":187,"previous":"M21-GAP-02516","next":"M21-GAP-02518"},"M21-GAP-02518":{"line":5773,"offset":1032182,"length":187,"previous":"M21-GAP-02517","next":"M21-GAP-02519"},"M21-GAP-02519":{"line":5774,"offset":1032369,"length":187,"previous":"M21-GAP-02518","next":"M21-GAP-02520"},"M21-GAP-02520":{"line":5775,"offset":1032556,"length":186,"previous":"M21-GAP-02519","next":"M21-GAP-02521"},"M21-GAP-02521":{"line":5776,"offset":1032742,"length":187,"previous":"M21-GAP-02520","next":"M21-GAP-02522"},"M21-GAP-02522":{"line":5777,"offset":1032929,"length":187,"previous":"M21-GAP-02521","next":"M21-GAP-02523"},"M21-GAP-02523":{"line":5778,"offset":1033116,"length":187,"previous":"M21-GAP-02522","next":"M21-GAP-02524"},"M21-GAP-02524":{"line":5779,"offset":1033303,"length":187,"previous":"M21-GAP-02523","next":"M21-GAP-02525"},"M21-GAP-02525":{"line":5780,"offset":1033490,"length":187,"previous":"M21-GAP-02524","next":"M21-GAP-02526"},"M21-GAP-02526":{"line":5781,"offset":1033677,"length":186,"previous":"M21-GAP-02525","next":"M21-GAP-02527"},"M21-GAP-02527":{"line":5782,"offset":1033863,"length":186,"previous":"M21-GAP-02526","next":"M21-GAP-02528"},"M21-GAP-02528":{"line":5783,"offset":1034049,"length":186,"previous":"M21-GAP-02527","next":"M21-GAP-02529"},"M21-GAP-02529":{"line":5784,"offset":1034235,"length":186,"previous":"M21-GAP-02528","next":"M21-GAP-02530"},"M21-GAP-02530":{"line":5785,"offset":1034421,"length":186,"previous":"M21-GAP-02529","next":"M21-GAP-02531"},"M21-GAP-02531":{"line":5786,"offset":1034607,"length":186,"previous":"M21-GAP-02530","next":"M21-GAP-02532"},"M21-GAP-02532":{"line":5787,"offset":1034793,"length":186,"previous":"M21-GAP-02531","next":"M21-GAP-02533"},"M21-GAP-02533":{"line":5788,"offset":1034979,"length":173,"previous":"M21-GAP-02532","next":"M21-GAP-02534"},"M21-GAP-02534":{"line":5789,"offset":1035152,"length":173,"previous":"M21-GAP-02533","next":"M21-GAP-02535"},"M21-GAP-02535":{"line":5790,"offset":1035325,"length":174,"previous":"M21-GAP-02534","next":"M21-GAP-02536"},"M21-GAP-02536":{"line":5791,"offset":1035499,"length":174,"previous":"M21-GAP-02535","next":"M21-GAP-02537"},"M21-GAP-02537":{"line":5792,"offset":1035673,"length":174,"previous":"M21-GAP-02536","next":"M21-GAP-02538"},"M21-GAP-02538":{"line":5793,"offset":1035847,"length":174,"previous":"M21-GAP-02537","next":"M21-GAP-02539"},"M21-GAP-02539":{"line":5794,"offset":1036021,"length":174,"previous":"M21-GAP-02538","next":"M21-GAP-02540"},"M21-GAP-02540":{"line":5795,"offset":1036195,"length":174,"previous":"M21-GAP-02539","next":"M21-GAP-02541"},"M21-GAP-02541":{"line":5796,"offset":1036369,"length":174,"previous":"M21-GAP-02540","next":"M21-GAP-02542"},"M21-GAP-02542":{"line":5797,"offset":1036543,"length":174,"previous":"M21-GAP-02541","next":"M21-GAP-02543"},"M21-GAP-02543":{"line":5798,"offset":1036717,"length":174,"previous":"M21-GAP-02542","next":"M21-GAP-02544"},"M21-GAP-02544":{"line":5799,"offset":1036891,"length":174,"previous":"M21-GAP-02543","next":"M21-GAP-02545"},"M21-GAP-02545":{"line":5800,"offset":1037065,"length":173,"previous":"M21-GAP-02544","next":"M21-GAP-02546"},"M21-GAP-02546":{"line":5801,"offset":1037238,"length":174,"previous":"M21-GAP-02545","next":"M21-GAP-02547"},"M21-GAP-02547":{"line":5802,"offset":1037412,"length":174,"previous":"M21-GAP-02546","next":"M21-GAP-02548"},"M21-GAP-02548":{"line":5803,"offset":1037586,"length":174,"previous":"M21-GAP-02547","next":"M21-GAP-02549"},"M21-GAP-02549":{"line":5804,"offset":1037760,"length":174,"previous":"M21-GAP-02548","next":"M21-GAP-02550"},"M21-GAP-02550":{"line":5805,"offset":1037934,"length":174,"previous":"M21-GAP-02549","next":"M21-GAP-02551"},"M21-GAP-02551":{"line":5806,"offset":1038108,"length":174,"previous":"M21-GAP-02550","next":"M21-GAP-02552"},"M21-GAP-02552":{"line":5807,"offset":1038282,"length":174,"previous":"M21-GAP-02551","next":"M21-GAP-02553"},"M21-GAP-02553":{"line":5808,"offset":1038456,"length":174,"previous":"M21-GAP-02552","next":"M21-GAP-02554"},"M21-GAP-02554":{"line":5809,"offset":1038630,"length":174,"previous":"M21-GAP-02553","next":"M21-GAP-02555"},"M21-GAP-02555":{"line":5810,"offset":1038804,"length":174,"previous":"M21-GAP-02554","next":"M21-GAP-02556"},"M21-GAP-02556":{"line":5811,"offset":1038978,"length":173,"previous":"M21-GAP-02555","next":"M21-GAP-02557"},"M21-GAP-02557":{"line":5812,"offset":1039151,"length":174,"previous":"M21-GAP-02556","next":"M21-GAP-02558"},"M21-GAP-02558":{"line":5813,"offset":1039325,"length":174,"previous":"M21-GAP-02557","next":"M21-GAP-02559"},"M21-GAP-02559":{"line":5814,"offset":1039499,"length":174,"previous":"M21-GAP-02558","next":"M21-GAP-02560"},"M21-GAP-02560":{"line":5815,"offset":1039673,"length":174,"previous":"M21-GAP-02559","next":"M21-GAP-02561"},"M21-GAP-02561":{"line":5816,"offset":1039847,"length":174,"previous":"M21-GAP-02560","next":"M21-GAP-02562"},"M21-GAP-02562":{"line":5817,"offset":1040021,"length":174,"previous":"M21-GAP-02561","next":"M21-GAP-02563"},"M21-GAP-02563":{"line":5818,"offset":1040195,"length":174,"previous":"M21-GAP-02562","next":"M21-GAP-02564"},"M21-GAP-02564":{"line":5819,"offset":1040369,"length":174,"previous":"M21-GAP-02563","next":"M21-GAP-02565"},"M21-GAP-02565":{"line":5820,"offset":1040543,"length":174,"previous":"M21-GAP-02564","next":"M21-GAP-02566"},"M21-GAP-02566":{"line":5821,"offset":1040717,"length":174,"previous":"M21-GAP-02565","next":"M21-GAP-02567"},"M21-GAP-02567":{"line":5822,"offset":1040891,"length":173,"previous":"M21-GAP-02566","next":"M21-GAP-02568"},"M21-GAP-02568":{"line":5823,"offset":1041064,"length":174,"previous":"M21-GAP-02567","next":"M21-GAP-02569"},"M21-GAP-02569":{"line":5824,"offset":1041238,"length":174,"previous":"M21-GAP-02568","next":"M21-GAP-02570"},"M21-GAP-02570":{"line":5825,"offset":1041412,"length":174,"previous":"M21-GAP-02569","next":"M21-GAP-02571"},"M21-GAP-02571":{"line":5826,"offset":1041586,"length":174,"previous":"M21-GAP-02570","next":"M21-GAP-02572"},"M21-GAP-02572":{"line":5827,"offset":1041760,"length":174,"previous":"M21-GAP-02571","next":"M21-GAP-02573"},"M21-GAP-02573":{"line":5828,"offset":1041934,"length":174,"previous":"M21-GAP-02572","next":"M21-GAP-02574"},"M21-GAP-02574":{"line":5829,"offset":1042108,"length":174,"previous":"M21-GAP-02573","next":"M21-GAP-02575"},"M21-GAP-02575":{"line":5830,"offset":1042282,"length":174,"previous":"M21-GAP-02574","next":"M21-GAP-02576"},"M21-GAP-02576":{"line":5831,"offset":1042456,"length":174,"previous":"M21-GAP-02575","next":"M21-GAP-02577"},"M21-GAP-02577":{"line":5832,"offset":1042630,"length":174,"previous":"M21-GAP-02576","next":"M21-GAP-02578"},"M21-GAP-02578":{"line":5833,"offset":1042804,"length":173,"previous":"M21-GAP-02577","next":"M21-GAP-02579"},"M21-GAP-02579":{"line":5834,"offset":1042977,"length":174,"previous":"M21-GAP-02578","next":"M21-GAP-02580"},"M21-GAP-02580":{"line":5835,"offset":1043151,"length":174,"previous":"M21-GAP-02579","next":"M21-GAP-02581"},"M21-GAP-02581":{"line":5836,"offset":1043325,"length":174,"previous":"M21-GAP-02580","next":"M21-GAP-02582"},"M21-GAP-02582":{"line":5837,"offset":1043499,"length":174,"previous":"M21-GAP-02581","next":"M21-GAP-02583"},"M21-GAP-02583":{"line":5838,"offset":1043673,"length":174,"previous":"M21-GAP-02582","next":"M21-GAP-02584"},"M21-GAP-02584":{"line":5839,"offset":1043847,"length":174,"previous":"M21-GAP-02583","next":"M21-GAP-02585"},"M21-GAP-02585":{"line":5840,"offset":1044021,"length":174,"previous":"M21-GAP-02584","next":"M21-GAP-02586"},"M21-GAP-02586":{"line":5841,"offset":1044195,"length":174,"previous":"M21-GAP-02585","next":"M21-GAP-02587"},"M21-GAP-02587":{"line":5842,"offset":1044369,"length":174,"previous":"M21-GAP-02586","next":"M21-GAP-02588"},"M21-GAP-02588":{"line":5843,"offset":1044543,"length":174,"previous":"M21-GAP-02587","next":"M21-GAP-02589"},"M21-GAP-02589":{"line":5844,"offset":1044717,"length":173,"previous":"M21-GAP-02588","next":"M21-GAP-02590"},"M21-GAP-02590":{"line":5845,"offset":1044890,"length":174,"previous":"M21-GAP-02589","next":"M21-GAP-02591"},"M21-GAP-02591":{"line":5846,"offset":1045064,"length":174,"previous":"M21-GAP-02590","next":"M21-GAP-02592"},"M21-GAP-02592":{"line":5847,"offset":1045238,"length":174,"previous":"M21-GAP-02591","next":"M21-GAP-02593"},"M21-GAP-02593":{"line":5848,"offset":1045412,"length":174,"previous":"M21-GAP-02592","next":"M21-GAP-02594"},"M21-GAP-02594":{"line":5849,"offset":1045586,"length":174,"previous":"M21-GAP-02593","next":"M21-GAP-02595"},"M21-GAP-02595":{"line":5850,"offset":1045760,"length":174,"previous":"M21-GAP-02594","next":"M21-GAP-02596"},"M21-GAP-02596":{"line":5851,"offset":1045934,"length":174,"previous":"M21-GAP-02595","next":"M21-GAP-02597"},"M21-GAP-02597":{"line":5852,"offset":1046108,"length":173,"previous":"M21-GAP-02596","next":"M21-GAP-02598"},"M21-GAP-02598":{"line":5853,"offset":1046281,"length":173,"previous":"M21-GAP-02597","next":"M21-GAP-02599"},"M21-GAP-02599":{"line":5854,"offset":1046454,"length":173,"previous":"M21-GAP-02598","next":"M21-GAP-02600"},"M21-GAP-02600":{"line":5855,"offset":1046627,"length":195,"previous":"M21-GAP-02599","next":"M21-GAP-02601"},"M21-GAP-02601":{"line":5856,"offset":1046822,"length":195,"previous":"M21-GAP-02600","next":"M21-GAP-02602"},"M21-GAP-02602":{"line":5857,"offset":1047017,"length":198,"previous":"M21-GAP-02601","next":"M21-GAP-02603"},"M21-GAP-02603":{"line":5858,"offset":1047215,"length":198,"previous":"M21-GAP-02602","next":"M21-GAP-02604"},"M21-GAP-02604":{"line":5859,"offset":1047413,"length":198,"previous":"M21-GAP-02603","next":"M21-GAP-02605"},"M21-GAP-02605":{"line":5860,"offset":1047611,"length":198,"previous":"M21-GAP-02604","next":"M21-GAP-02606"},"M21-GAP-02606":{"line":5861,"offset":1047809,"length":198,"previous":"M21-GAP-02605","next":"M21-GAP-02607"},"M21-GAP-02607":{"line":5862,"offset":1048007,"length":198,"previous":"M21-GAP-02606","next":"M21-GAP-02608"},"M21-GAP-02608":{"line":5863,"offset":1048205,"length":214,"previous":"M21-GAP-02607","next":"M21-GAP-02609"},"M21-GAP-02609":{"line":5864,"offset":1048419,"length":214,"previous":"M21-GAP-02608","next":"M21-GAP-02610"},"M21-GAP-02610":{"line":5865,"offset":1048633,"length":214,"previous":"M21-GAP-02609","next":"M21-GAP-02611"},"M21-GAP-02611":{"line":5866,"offset":1048847,"length":214,"previous":"M21-GAP-02610","next":"M21-GAP-02612"},"M21-GAP-02612":{"line":5867,"offset":1049061,"length":214,"previous":"M21-GAP-02611","next":"M21-GAP-02613"},"M21-GAP-02613":{"line":5868,"offset":1049275,"length":214,"previous":"M21-GAP-02612","next":"M21-GAP-02614"},"M21-GAP-02614":{"line":5869,"offset":1049489,"length":203,"previous":"M21-GAP-02613","next":"M21-GAP-02615"},"M21-GAP-02615":{"line":5870,"offset":1049692,"length":203,"previous":"M21-GAP-02614","next":"M21-GAP-02616"},"M21-GAP-02616":{"line":5871,"offset":1049895,"length":203,"previous":"M21-GAP-02615","next":"M21-GAP-02617"},"M21-GAP-02617":{"line":5872,"offset":1050098,"length":203,"previous":"M21-GAP-02616","next":"M21-GAP-02618"},"M21-GAP-02618":{"line":5873,"offset":1050301,"length":203,"previous":"M21-GAP-02617","next":"M21-GAP-02619"},"M21-GAP-02619":{"line":5874,"offset":1050504,"length":203,"previous":"M21-GAP-02618","next":"M21-GAP-02620"},"M21-GAP-02620":{"line":5875,"offset":1050707,"length":217,"previous":"M21-GAP-02619","next":"M21-GAP-02621"},"M21-GAP-02621":{"line":5876,"offset":1050924,"length":217,"previous":"M21-GAP-02620","next":"M21-GAP-02622"},"M21-GAP-02622":{"line":5877,"offset":1051141,"length":217,"previous":"M21-GAP-02621","next":"M21-GAP-02623"},"M21-GAP-02623":{"line":5878,"offset":1051358,"length":206,"previous":"M21-GAP-02622","next":"M21-GAP-02624"},"M21-GAP-02624":{"line":5879,"offset":1051564,"length":206,"previous":"M21-GAP-02623","next":"M21-GAP-02625"},"M21-GAP-02625":{"line":5880,"offset":1051770,"length":206,"previous":"M21-GAP-02624","next":"M21-GAP-02626"},"M21-GAP-02626":{"line":5881,"offset":1051976,"length":216,"previous":"M21-GAP-02625","next":"M21-GAP-02627"},"M21-GAP-02627":{"line":5882,"offset":1052192,"length":216,"previous":"M21-GAP-02626","next":"M21-GAP-02628"},"M21-GAP-02628":{"line":5883,"offset":1052408,"length":216,"previous":"M21-GAP-02627","next":"M21-GAP-02629"},"M21-GAP-02629":{"line":5884,"offset":1052624,"length":205,"previous":"M21-GAP-02628","next":"M21-GAP-02630"},"M21-GAP-02630":{"line":5885,"offset":1052829,"length":205,"previous":"M21-GAP-02629","next":"M21-GAP-02631"},"M21-GAP-02631":{"line":5886,"offset":1053034,"length":205,"previous":"M21-GAP-02630","next":"M21-GAP-02632"},"M21-GAP-02632":{"line":5887,"offset":1053239,"length":197,"previous":"M21-GAP-02631","next":"M21-GAP-02633"},"M21-GAP-02633":{"line":5888,"offset":1053436,"length":197,"previous":"M21-GAP-02632","next":"M21-GAP-02634"},"M21-GAP-02634":{"line":5889,"offset":1053633,"length":186,"previous":"M21-GAP-02633","next":"M21-GAP-02635"},"M21-GAP-02635":{"line":5890,"offset":1053819,"length":186,"previous":"M21-GAP-02634","next":"M21-GAP-02636"},"M21-GAP-02636":{"line":5891,"offset":1054005,"length":187,"previous":"M21-GAP-02635","next":"M21-GAP-02637"},"M21-GAP-02637":{"line":5892,"offset":1054192,"length":187,"previous":"M21-GAP-02636","next":"M21-GAP-02638"},"M21-GAP-02638":{"line":5893,"offset":1054379,"length":187,"previous":"M21-GAP-02637","next":"M21-GAP-02639"},"M21-GAP-02639":{"line":5894,"offset":1054566,"length":187,"previous":"M21-GAP-02638","next":"M21-GAP-02640"},"M21-GAP-02640":{"line":5895,"offset":1054753,"length":187,"previous":"M21-GAP-02639","next":"M21-GAP-02641"},"M21-GAP-02641":{"line":5896,"offset":1054940,"length":187,"previous":"M21-GAP-02640","next":"M21-GAP-02642"},"M21-GAP-02642":{"line":5897,"offset":1055127,"length":187,"previous":"M21-GAP-02641","next":"M21-GAP-02643"},"M21-GAP-02643":{"line":5898,"offset":1055314,"length":187,"previous":"M21-GAP-02642","next":"M21-GAP-02644"},"M21-GAP-02644":{"line":5899,"offset":1055501,"length":187,"previous":"M21-GAP-02643","next":"M21-GAP-02645"},"M21-GAP-02645":{"line":5900,"offset":1055688,"length":187,"previous":"M21-GAP-02644","next":"M21-GAP-02646"},"M21-GAP-02646":{"line":5901,"offset":1055875,"length":186,"previous":"M21-GAP-02645","next":"M21-GAP-02647"},"M21-GAP-02647":{"line":5902,"offset":1056061,"length":187,"previous":"M21-GAP-02646","next":"M21-GAP-02648"},"M21-GAP-02648":{"line":5903,"offset":1056248,"length":187,"previous":"M21-GAP-02647","next":"M21-GAP-02649"},"M21-GAP-02649":{"line":5904,"offset":1056435,"length":187,"previous":"M21-GAP-02648","next":"M21-GAP-02650"},"M21-GAP-02650":{"line":5905,"offset":1056622,"length":187,"previous":"M21-GAP-02649","next":"M21-GAP-02651"},"M21-GAP-02651":{"line":5906,"offset":1056809,"length":187,"previous":"M21-GAP-02650","next":"M21-GAP-02652"},"M21-GAP-02652":{"line":5907,"offset":1056996,"length":187,"previous":"M21-GAP-02651","next":"M21-GAP-02653"},"M21-GAP-02653":{"line":5908,"offset":1057183,"length":187,"previous":"M21-GAP-02652","next":"M21-GAP-02654"},"M21-GAP-02654":{"line":5909,"offset":1057370,"length":187,"previous":"M21-GAP-02653","next":"M21-GAP-02655"},"M21-GAP-02655":{"line":5910,"offset":1057557,"length":187,"previous":"M21-GAP-02654","next":"M21-GAP-02656"},"M21-GAP-02656":{"line":5911,"offset":1057744,"length":187,"previous":"M21-GAP-02655","next":"M21-GAP-02657"},"M21-GAP-02657":{"line":5912,"offset":1057931,"length":186,"previous":"M21-GAP-02656","next":"M21-GAP-02658"},"M21-GAP-02658":{"line":5913,"offset":1058117,"length":187,"previous":"M21-GAP-02657","next":"M21-GAP-02659"},"M21-GAP-02659":{"line":5914,"offset":1058304,"length":187,"previous":"M21-GAP-02658","next":"M21-GAP-02660"},"M21-GAP-02660":{"line":5915,"offset":1058491,"length":187,"previous":"M21-GAP-02659","next":"M21-GAP-02661"},"M21-GAP-02661":{"line":5916,"offset":1058678,"length":187,"previous":"M21-GAP-02660","next":"M21-GAP-02662"},"M21-GAP-02662":{"line":5917,"offset":1058865,"length":187,"previous":"M21-GAP-02661","next":"M21-GAP-02663"},"M21-GAP-02663":{"line":5918,"offset":1059052,"length":187,"previous":"M21-GAP-02662","next":"M21-GAP-02664"},"M21-GAP-02664":{"line":5919,"offset":1059239,"length":187,"previous":"M21-GAP-02663","next":"M21-GAP-02665"},"M21-GAP-02665":{"line":5920,"offset":1059426,"length":187,"previous":"M21-GAP-02664","next":"M21-GAP-02666"},"M21-GAP-02666":{"line":5921,"offset":1059613,"length":187,"previous":"M21-GAP-02665","next":"M21-GAP-02667"},"M21-GAP-02667":{"line":5922,"offset":1059800,"length":187,"previous":"M21-GAP-02666","next":"M21-GAP-02668"},"M21-GAP-02668":{"line":5923,"offset":1059987,"length":186,"previous":"M21-GAP-02667","next":"M21-GAP-02669"},"M21-GAP-02669":{"line":5924,"offset":1060173,"length":187,"previous":"M21-GAP-02668","next":"M21-GAP-02670"},"M21-GAP-02670":{"line":5925,"offset":1060360,"length":187,"previous":"M21-GAP-02669","next":"M21-GAP-02671"},"M21-GAP-02671":{"line":5926,"offset":1060547,"length":187,"previous":"M21-GAP-02670","next":"M21-GAP-02672"},"M21-GAP-02672":{"line":5927,"offset":1060734,"length":187,"previous":"M21-GAP-02671","next":"M21-GAP-02673"},"M21-GAP-02673":{"line":5928,"offset":1060921,"length":187,"previous":"M21-GAP-02672","next":"M21-GAP-02674"},"M21-GAP-02674":{"line":5929,"offset":1061108,"length":187,"previous":"M21-GAP-02673","next":"M21-GAP-02675"},"M21-GAP-02675":{"line":5930,"offset":1061295,"length":187,"previous":"M21-GAP-02674","next":"M21-GAP-02676"},"M21-GAP-02676":{"line":5931,"offset":1061482,"length":187,"previous":"M21-GAP-02675","next":"M21-GAP-02677"},"M21-GAP-02677":{"line":5932,"offset":1061669,"length":187,"previous":"M21-GAP-02676","next":"M21-GAP-02678"},"M21-GAP-02678":{"line":5933,"offset":1061856,"length":187,"previous":"M21-GAP-02677","next":"M21-GAP-02679"},"M21-GAP-02679":{"line":5934,"offset":1062043,"length":186,"previous":"M21-GAP-02678","next":"M21-GAP-02680"},"M21-GAP-02680":{"line":5935,"offset":1062229,"length":187,"previous":"M21-GAP-02679","next":"M21-GAP-02681"},"M21-GAP-02681":{"line":5936,"offset":1062416,"length":187,"previous":"M21-GAP-02680","next":"M21-GAP-02682"},"M21-GAP-02682":{"line":5937,"offset":1062603,"length":187,"previous":"M21-GAP-02681","next":"M21-GAP-02683"},"M21-GAP-02683":{"line":5938,"offset":1062790,"length":187,"previous":"M21-GAP-02682","next":"M21-GAP-02684"},"M21-GAP-02684":{"line":5939,"offset":1062977,"length":187,"previous":"M21-GAP-02683","next":"M21-GAP-02685"},"M21-GAP-02685":{"line":5940,"offset":1063164,"length":187,"previous":"M21-GAP-02684","next":"M21-GAP-02686"},"M21-GAP-02686":{"line":5941,"offset":1063351,"length":187,"previous":"M21-GAP-02685","next":"M21-GAP-02687"},"M21-GAP-02687":{"line":5942,"offset":1063538,"length":187,"previous":"M21-GAP-02686","next":"M21-GAP-02688"},"M21-GAP-02688":{"line":5943,"offset":1063725,"length":187,"previous":"M21-GAP-02687","next":"M21-GAP-02689"},"M21-GAP-02689":{"line":5944,"offset":1063912,"length":187,"previous":"M21-GAP-02688","next":"M21-GAP-02690"},"M21-GAP-02690":{"line":5945,"offset":1064099,"length":186,"previous":"M21-GAP-02689","next":"M21-GAP-02691"},"M21-GAP-02691":{"line":5946,"offset":1064285,"length":187,"previous":"M21-GAP-02690","next":"M21-GAP-02692"},"M21-GAP-02692":{"line":5947,"offset":1064472,"length":187,"previous":"M21-GAP-02691","next":"M21-GAP-02693"},"M21-GAP-02693":{"line":5948,"offset":1064659,"length":187,"previous":"M21-GAP-02692","next":"M21-GAP-02694"},"M21-GAP-02694":{"line":5949,"offset":1064846,"length":187,"previous":"M21-GAP-02693","next":"M21-GAP-02695"},"M21-GAP-02695":{"line":5950,"offset":1065033,"length":187,"previous":"M21-GAP-02694","next":"M21-GAP-02696"},"M21-GAP-02696":{"line":5951,"offset":1065220,"length":187,"previous":"M21-GAP-02695","next":"M21-GAP-02697"},"M21-GAP-02697":{"line":5952,"offset":1065407,"length":187,"previous":"M21-GAP-02696","next":"M21-GAP-02698"},"M21-GAP-02698":{"line":5953,"offset":1065594,"length":187,"previous":"M21-GAP-02697","next":"M21-GAP-02699"},"M21-GAP-02699":{"line":5954,"offset":1065781,"length":187,"previous":"M21-GAP-02698","next":"M21-GAP-02700"},"M21-GAP-02700":{"line":5955,"offset":1065968,"length":187,"previous":"M21-GAP-02699","next":"M21-GAP-02701"},"M21-GAP-02701":{"line":5956,"offset":1066155,"length":186,"previous":"M21-GAP-02700","next":"M21-GAP-02702"},"M21-GAP-02702":{"line":5957,"offset":1066341,"length":187,"previous":"M21-GAP-02701","next":"M21-GAP-02703"},"M21-GAP-02703":{"line":5958,"offset":1066528,"length":187,"previous":"M21-GAP-02702","next":"M21-GAP-02704"},"M21-GAP-02704":{"line":5959,"offset":1066715,"length":187,"previous":"M21-GAP-02703","next":"M21-GAP-02705"},"M21-GAP-02705":{"line":5960,"offset":1066902,"length":187,"previous":"M21-GAP-02704","next":"M21-GAP-02706"},"M21-GAP-02706":{"line":5961,"offset":1067089,"length":187,"previous":"M21-GAP-02705","next":"M21-GAP-02707"},"M21-GAP-02707":{"line":5962,"offset":1067276,"length":187,"previous":"M21-GAP-02706","next":"M21-GAP-02708"},"M21-GAP-02708":{"line":5963,"offset":1067463,"length":187,"previous":"M21-GAP-02707","next":"M21-GAP-02709"},"M21-GAP-02709":{"line":5964,"offset":1067650,"length":187,"previous":"M21-GAP-02708","next":"M21-GAP-02710"},"M21-GAP-02710":{"line":5965,"offset":1067837,"length":187,"previous":"M21-GAP-02709","next":"M21-GAP-02711"},"M21-GAP-02711":{"line":5966,"offset":1068024,"length":187,"previous":"M21-GAP-02710","next":"M21-GAP-02712"},"M21-GAP-02712":{"line":5967,"offset":1068211,"length":186,"previous":"M21-GAP-02711","next":"M21-GAP-02713"},"M21-GAP-02713":{"line":5968,"offset":1068397,"length":187,"previous":"M21-GAP-02712","next":"M21-GAP-02714"},"M21-GAP-02714":{"line":5969,"offset":1068584,"length":187,"previous":"M21-GAP-02713","next":"M21-GAP-02715"},"M21-GAP-02715":{"line":5970,"offset":1068771,"length":187,"previous":"M21-GAP-02714","next":"M21-GAP-02716"},"M21-GAP-02716":{"line":5971,"offset":1068958,"length":187,"previous":"M21-GAP-02715","next":"M21-GAP-02717"},"M21-GAP-02717":{"line":5972,"offset":1069145,"length":187,"previous":"M21-GAP-02716","next":"M21-GAP-02718"},"M21-GAP-02718":{"line":5973,"offset":1069332,"length":187,"previous":"M21-GAP-02717","next":"M21-GAP-02719"},"M21-GAP-02719":{"line":5974,"offset":1069519,"length":187,"previous":"M21-GAP-02718","next":"M21-GAP-02720"},"M21-GAP-02720":{"line":5975,"offset":1069706,"length":187,"previous":"M21-GAP-02719","next":"M21-GAP-02721"},"M21-GAP-02721":{"line":5976,"offset":1069893,"length":187,"previous":"M21-GAP-02720","next":"M21-GAP-02722"},"M21-GAP-02722":{"line":5977,"offset":1070080,"length":187,"previous":"M21-GAP-02721","next":"M21-GAP-02723"},"M21-GAP-02723":{"line":5978,"offset":1070267,"length":186,"previous":"M21-GAP-02722","next":"M21-GAP-02724"},"M21-GAP-02724":{"line":5979,"offset":1070453,"length":187,"previous":"M21-GAP-02723","next":"M21-GAP-02725"},"M21-GAP-02725":{"line":5980,"offset":1070640,"length":187,"previous":"M21-GAP-02724","next":"M21-GAP-02726"},"M21-GAP-02726":{"line":5981,"offset":1070827,"length":187,"previous":"M21-GAP-02725","next":"M21-GAP-02727"},"M21-GAP-02727":{"line":5982,"offset":1071014,"length":187,"previous":"M21-GAP-02726","next":"M21-GAP-02728"},"M21-GAP-02728":{"line":5983,"offset":1071201,"length":187,"previous":"M21-GAP-02727","next":"M21-GAP-02729"},"M21-GAP-02729":{"line":5984,"offset":1071388,"length":177,"previous":"M21-GAP-02728","next":"M21-GAP-02730"},"M21-GAP-02730":{"line":5985,"offset":1071565,"length":177,"previous":"M21-GAP-02729","next":"M21-GAP-02731"},"M21-GAP-02731":{"line":5986,"offset":1071742,"length":178,"previous":"M21-GAP-02730","next":"M21-GAP-02732"},"M21-GAP-02732":{"line":5987,"offset":1071920,"length":178,"previous":"M21-GAP-02731","next":"M21-GAP-02733"},"M21-GAP-02733":{"line":5988,"offset":1072098,"length":177,"previous":"M21-GAP-02732","next":"M21-GAP-02734"},"M21-GAP-02734":{"line":5989,"offset":1072275,"length":177,"previous":"M21-GAP-02733","next":"M21-GAP-02735"},"M21-GAP-02735":{"line":5990,"offset":1072452,"length":177,"previous":"M21-GAP-02734","next":"M21-GAP-02736"},"M21-GAP-02736":{"line":5991,"offset":1072629,"length":177,"previous":"M21-GAP-02735","next":"M21-GAP-02737"},"M21-GAP-02737":{"line":5992,"offset":1072806,"length":177,"previous":"M21-GAP-02736","next":"M21-GAP-02738"},"M21-GAP-02738":{"line":5993,"offset":1072983,"length":177,"previous":"M21-GAP-02737","next":"M21-GAP-02739"},"M21-GAP-02739":{"line":5994,"offset":1073160,"length":177,"previous":"M21-GAP-02738","next":"M21-GAP-02740"},"M21-GAP-02740":{"line":5995,"offset":1073337,"length":177,"previous":"M21-GAP-02739","next":"M21-GAP-02741"},"M21-GAP-02741":{"line":5996,"offset":1073514,"length":192,"previous":"M21-GAP-02740","next":"M21-GAP-02742"},"M21-GAP-02742":{"line":5997,"offset":1073706,"length":192,"previous":"M21-GAP-02741","next":"M21-GAP-02743"},"M21-GAP-02743":{"line":5998,"offset":1073898,"length":192,"previous":"M21-GAP-02742","next":"M21-GAP-02744"},"M21-GAP-02744":{"line":5999,"offset":1074090,"length":192,"previous":"M21-GAP-02743","next":"M21-GAP-02745"},"M21-GAP-02745":{"line":6000,"offset":1074282,"length":192,"previous":"M21-GAP-02744","next":"M21-GAP-02746"},"M21-GAP-02746":{"line":6001,"offset":1074474,"length":185,"previous":"M21-GAP-02745","next":"M21-GAP-02747"},"M21-GAP-02747":{"line":6002,"offset":1074659,"length":185,"previous":"M21-GAP-02746","next":"M21-GAP-02748"},"M21-GAP-02748":{"line":6003,"offset":1074844,"length":185,"previous":"M21-GAP-02747","next":"M21-GAP-02749"},"M21-GAP-02749":{"line":6004,"offset":1075029,"length":185,"previous":"M21-GAP-02748","next":"M21-GAP-02750"},"M21-GAP-02750":{"line":6005,"offset":1075214,"length":185,"previous":"M21-GAP-02749","next":"M21-GAP-02751"},"M21-GAP-02751":{"line":6006,"offset":1075399,"length":185,"previous":"M21-GAP-02750","next":"M21-GAP-02752"},"M21-GAP-02752":{"line":6007,"offset":1075584,"length":185,"previous":"M21-GAP-02751","next":"M21-GAP-02753"},"M21-GAP-02753":{"line":6008,"offset":1075769,"length":185,"previous":"M21-GAP-02752","next":"M21-GAP-02754"},"M21-GAP-02754":{"line":6009,"offset":1075954,"length":185,"previous":"M21-GAP-02753","next":"M21-GAP-02755"},"M21-GAP-02755":{"line":6010,"offset":1076139,"length":185,"previous":"M21-GAP-02754","next":"M21-GAP-02756"},"M21-GAP-02756":{"line":6011,"offset":1076324,"length":185,"previous":"M21-GAP-02755","next":"M21-GAP-02757"},"M21-GAP-02757":{"line":6012,"offset":1076509,"length":185,"previous":"M21-GAP-02756","next":"M21-GAP-02758"},"M21-GAP-02758":{"line":6013,"offset":1076694,"length":185,"previous":"M21-GAP-02757","next":"M21-GAP-02759"},"M21-GAP-02759":{"line":6014,"offset":1076879,"length":177,"previous":"M21-GAP-02758","next":"M21-GAP-02760"},"M21-GAP-02760":{"line":6015,"offset":1077056,"length":177,"previous":"M21-GAP-02759","next":"M21-GAP-02761"},"M21-GAP-02761":{"line":6016,"offset":1077233,"length":178,"previous":"M21-GAP-02760","next":"M21-GAP-02762"},"M21-GAP-02762":{"line":6017,"offset":1077411,"length":178,"previous":"M21-GAP-02761","next":"M21-GAP-02763"},"M21-GAP-02763":{"line":6018,"offset":1077589,"length":178,"previous":"M21-GAP-02762","next":"M21-GAP-02764"},"M21-GAP-02764":{"line":6019,"offset":1077767,"length":178,"previous":"M21-GAP-02763","next":"M21-GAP-02765"},"M21-GAP-02765":{"line":6020,"offset":1077945,"length":178,"previous":"M21-GAP-02764","next":"M21-GAP-02766"},"M21-GAP-02766":{"line":6021,"offset":1078123,"length":178,"previous":"M21-GAP-02765","next":"M21-GAP-02767"},"M21-GAP-02767":{"line":6022,"offset":1078301,"length":178,"previous":"M21-GAP-02766","next":"M21-GAP-02768"},"M21-GAP-02768":{"line":6023,"offset":1078479,"length":178,"previous":"M21-GAP-02767","next":"M21-GAP-02769"},"M21-GAP-02769":{"line":6024,"offset":1078657,"length":178,"previous":"M21-GAP-02768","next":"M21-GAP-02770"},"M21-GAP-02770":{"line":6025,"offset":1078835,"length":178,"previous":"M21-GAP-02769","next":"M21-GAP-02771"},"M21-GAP-02771":{"line":6026,"offset":1079013,"length":177,"previous":"M21-GAP-02770","next":"M21-GAP-02772"},"M21-GAP-02772":{"line":6027,"offset":1079190,"length":178,"previous":"M21-GAP-02771","next":"M21-GAP-02773"},"M21-GAP-02773":{"line":6028,"offset":1079368,"length":178,"previous":"M21-GAP-02772","next":"M21-GAP-02774"},"M21-GAP-02774":{"line":6029,"offset":1079546,"length":178,"previous":"M21-GAP-02773","next":"M21-GAP-02775"},"M21-GAP-02775":{"line":6030,"offset":1079724,"length":178,"previous":"M21-GAP-02774","next":"M21-GAP-02776"},"M21-GAP-02776":{"line":6031,"offset":1079902,"length":178,"previous":"M21-GAP-02775","next":"M21-GAP-02777"},"M21-GAP-02777":{"line":6032,"offset":1080080,"length":178,"previous":"M21-GAP-02776","next":"M21-GAP-02778"},"M21-GAP-02778":{"line":6033,"offset":1080258,"length":178,"previous":"M21-GAP-02777","next":"M21-GAP-02779"},"M21-GAP-02779":{"line":6034,"offset":1080436,"length":178,"previous":"M21-GAP-02778","next":"M21-GAP-02780"},"M21-GAP-02780":{"line":6035,"offset":1080614,"length":178,"previous":"M21-GAP-02779","next":"M21-GAP-02781"},"M21-GAP-02781":{"line":6036,"offset":1080792,"length":178,"previous":"M21-GAP-02780","next":"M21-GAP-02782"},"M21-GAP-02782":{"line":6037,"offset":1080970,"length":177,"previous":"M21-GAP-02781","next":"M21-GAP-02783"},"M21-GAP-02783":{"line":6038,"offset":1081147,"length":178,"previous":"M21-GAP-02782","next":"M21-GAP-02784"},"M21-GAP-02784":{"line":6039,"offset":1081325,"length":178,"previous":"M21-GAP-02783","next":"M21-GAP-02785"},"M21-GAP-02785":{"line":6040,"offset":1081503,"length":178,"previous":"M21-GAP-02784","next":"M21-GAP-02786"},"M21-GAP-02786":{"line":6041,"offset":1081681,"length":178,"previous":"M21-GAP-02785","next":"M21-GAP-02787"},"M21-GAP-02787":{"line":6042,"offset":1081859,"length":178,"previous":"M21-GAP-02786","next":"M21-GAP-02788"},"M21-GAP-02788":{"line":6043,"offset":1082037,"length":178,"previous":"M21-GAP-02787","next":"M21-GAP-02789"},"M21-GAP-02789":{"line":6044,"offset":1082215,"length":178,"previous":"M21-GAP-02788","next":"M21-GAP-02790"},"M21-GAP-02790":{"line":6045,"offset":1082393,"length":178,"previous":"M21-GAP-02789","next":"M21-GAP-02791"},"M21-GAP-02791":{"line":6046,"offset":1082571,"length":178,"previous":"M21-GAP-02790","next":"M21-GAP-02792"},"M21-GAP-02792":{"line":6047,"offset":1082749,"length":178,"previous":"M21-GAP-02791","next":"M21-GAP-02793"},"M21-GAP-02793":{"line":6048,"offset":1082927,"length":177,"previous":"M21-GAP-02792","next":"M21-GAP-02794"},"M21-GAP-02794":{"line":6049,"offset":1083104,"length":178,"previous":"M21-GAP-02793","next":"M21-GAP-02795"},"M21-GAP-02795":{"line":6050,"offset":1083282,"length":178,"previous":"M21-GAP-02794","next":"M21-GAP-02796"},"M21-GAP-02796":{"line":6051,"offset":1083460,"length":178,"previous":"M21-GAP-02795","next":"M21-GAP-02797"},"M21-GAP-02797":{"line":6052,"offset":1083638,"length":178,"previous":"M21-GAP-02796","next":"M21-GAP-02798"},"M21-GAP-02798":{"line":6053,"offset":1083816,"length":178,"previous":"M21-GAP-02797","next":"M21-GAP-02799"},"M21-GAP-02799":{"line":6054,"offset":1083994,"length":178,"previous":"M21-GAP-02798","next":"M21-GAP-02800"},"M21-GAP-02800":{"line":6055,"offset":1084172,"length":178,"previous":"M21-GAP-02799","next":"M21-GAP-02801"},"M21-GAP-02801":{"line":6056,"offset":1084350,"length":178,"previous":"M21-GAP-02800","next":"M21-GAP-02802"},"M21-GAP-02802":{"line":6057,"offset":1084528,"length":178,"previous":"M21-GAP-02801","next":"M21-GAP-02803"},"M21-GAP-02803":{"line":6058,"offset":1084706,"length":178,"previous":"M21-GAP-02802","next":"M21-GAP-02804"},"M21-GAP-02804":{"line":6059,"offset":1084884,"length":177,"previous":"M21-GAP-02803","next":"M21-GAP-02805"},"M21-GAP-02805":{"line":6060,"offset":1085061,"length":178,"previous":"M21-GAP-02804","next":"M21-GAP-02806"},"M21-GAP-02806":{"line":6061,"offset":1085239,"length":178,"previous":"M21-GAP-02805","next":"M21-GAP-02807"},"M21-GAP-02807":{"line":6062,"offset":1085417,"length":178,"previous":"M21-GAP-02806","next":"M21-GAP-02808"},"M21-GAP-02808":{"line":6063,"offset":1085595,"length":178,"previous":"M21-GAP-02807","next":"M21-GAP-02809"},"M21-GAP-02809":{"line":6064,"offset":1085773,"length":178,"previous":"M21-GAP-02808","next":"M21-GAP-02810"},"M21-GAP-02810":{"line":6065,"offset":1085951,"length":178,"previous":"M21-GAP-02809","next":"M21-GAP-02811"},"M21-GAP-02811":{"line":6066,"offset":1086129,"length":178,"previous":"M21-GAP-02810","next":"M21-GAP-02812"},"M21-GAP-02812":{"line":6067,"offset":1086307,"length":178,"previous":"M21-GAP-02811","next":"M21-GAP-02813"},"M21-GAP-02813":{"line":6068,"offset":1086485,"length":178,"previous":"M21-GAP-02812","next":"M21-GAP-02814"},"M21-GAP-02814":{"line":6069,"offset":1086663,"length":178,"previous":"M21-GAP-02813","next":"M21-GAP-02815"},"M21-GAP-02815":{"line":6070,"offset":1086841,"length":177,"previous":"M21-GAP-02814","next":"M21-GAP-02816"},"M21-GAP-02816":{"line":6071,"offset":1087018,"length":178,"previous":"M21-GAP-02815","next":"M21-GAP-02817"},"M21-GAP-02817":{"line":6072,"offset":1087196,"length":178,"previous":"M21-GAP-02816","next":"M21-GAP-02818"},"M21-GAP-02818":{"line":6073,"offset":1087374,"length":178,"previous":"M21-GAP-02817","next":"M21-GAP-02819"},"M21-GAP-02819":{"line":6074,"offset":1087552,"length":178,"previous":"M21-GAP-02818","next":"M21-GAP-02820"},"M21-GAP-02820":{"line":6075,"offset":1087730,"length":178,"previous":"M21-GAP-02819","next":"M21-GAP-02821"},"M21-GAP-02821":{"line":6076,"offset":1087908,"length":178,"previous":"M21-GAP-02820","next":"M21-GAP-02822"},"M21-GAP-02822":{"line":6077,"offset":1088086,"length":178,"previous":"M21-GAP-02821","next":"M21-GAP-02823"},"M21-GAP-02823":{"line":6078,"offset":1088264,"length":178,"previous":"M21-GAP-02822","next":"M21-GAP-02824"},"M21-GAP-02824":{"line":6079,"offset":1088442,"length":178,"previous":"M21-GAP-02823","next":"M21-GAP-02825"},"M21-GAP-02825":{"line":6080,"offset":1088620,"length":178,"previous":"M21-GAP-02824","next":"M21-GAP-02826"},"M21-GAP-02826":{"line":6081,"offset":1088798,"length":177,"previous":"M21-GAP-02825","next":"M21-GAP-02827"},"M21-GAP-02827":{"line":6082,"offset":1088975,"length":178,"previous":"M21-GAP-02826","next":"M21-GAP-02828"},"M21-GAP-02828":{"line":6083,"offset":1089153,"length":177,"previous":"M21-GAP-02827","next":"M21-GAP-02829"},"M21-GAP-02829":{"line":6084,"offset":1089330,"length":177,"previous":"M21-GAP-02828","next":"M21-GAP-02830"},"M21-GAP-02830":{"line":6085,"offset":1089507,"length":177,"previous":"M21-GAP-02829","next":"M21-GAP-02831"},"M21-GAP-02831":{"line":6086,"offset":1089684,"length":183,"previous":"M21-GAP-02830","next":"M21-GAP-02832"},"M21-GAP-02832":{"line":6087,"offset":1089867,"length":183,"previous":"M21-GAP-02831","next":"M21-GAP-02833"},"M21-GAP-02833":{"line":6088,"offset":1090050,"length":183,"previous":"M21-GAP-02832","next":"M21-GAP-02834"},"M21-GAP-02834":{"line":6089,"offset":1090233,"length":183,"previous":"M21-GAP-02833","next":"M21-GAP-02835"},"M21-GAP-02835":{"line":6090,"offset":1090416,"length":183,"previous":"M21-GAP-02834","next":"M21-GAP-02836"},"M21-GAP-02836":{"line":6091,"offset":1090599,"length":198,"previous":"M21-GAP-02835","next":"M21-GAP-02837"},"M21-GAP-02837":{"line":6092,"offset":1090797,"length":198,"previous":"M21-GAP-02836","next":"M21-GAP-02838"},"M21-GAP-02838":{"line":6093,"offset":1090995,"length":198,"previous":"M21-GAP-02837","next":"M21-GAP-02839"},"M21-GAP-02839":{"line":6094,"offset":1091193,"length":198,"previous":"M21-GAP-02838","next":"M21-GAP-02840"},"M21-GAP-02840":{"line":6095,"offset":1091391,"length":198,"previous":"M21-GAP-02839","next":"M21-GAP-02841"},"M21-GAP-02841":{"line":6096,"offset":1091589,"length":198,"previous":"M21-GAP-02840","next":"M21-GAP-02842"},"M21-GAP-02842":{"line":6097,"offset":1091787,"length":198,"previous":"M21-GAP-02841","next":"M21-GAP-02843"},"M21-GAP-02843":{"line":6098,"offset":1091985,"length":198,"previous":"M21-GAP-02842","next":"M21-GAP-02844"},"M21-GAP-02844":{"line":6099,"offset":1092183,"length":198,"previous":"M21-GAP-02843","next":"M21-GAP-02845"},"M21-GAP-02845":{"line":6100,"offset":1092381,"length":186,"previous":"M21-GAP-02844","next":"M21-GAP-02846"},"M21-GAP-02846":{"line":6101,"offset":1092567,"length":186,"previous":"M21-GAP-02845","next":"M21-GAP-02847"},"M21-GAP-02847":{"line":6102,"offset":1092753,"length":187,"previous":"M21-GAP-02846","next":"M21-GAP-02848"},"M21-GAP-02848":{"line":6103,"offset":1092940,"length":187,"previous":"M21-GAP-02847","next":"M21-GAP-02849"},"M21-GAP-02849":{"line":6104,"offset":1093127,"length":187,"previous":"M21-GAP-02848","next":"M21-GAP-02850"},"M21-GAP-02850":{"line":6105,"offset":1093314,"length":187,"previous":"M21-GAP-02849","next":"M21-GAP-02851"},"M21-GAP-02851":{"line":6106,"offset":1093501,"length":187,"previous":"M21-GAP-02850","next":"M21-GAP-02852"},"M21-GAP-02852":{"line":6107,"offset":1093688,"length":187,"previous":"M21-GAP-02851","next":"M21-GAP-02853"},"M21-GAP-02853":{"line":6108,"offset":1093875,"length":187,"previous":"M21-GAP-02852","next":"M21-GAP-02854"},"M21-GAP-02854":{"line":6109,"offset":1094062,"length":187,"previous":"M21-GAP-02853","next":"M21-GAP-02855"},"M21-GAP-02855":{"line":6110,"offset":1094249,"length":187,"previous":"M21-GAP-02854","next":"M21-GAP-02856"},"M21-GAP-02856":{"line":6111,"offset":1094436,"length":187,"previous":"M21-GAP-02855","next":"M21-GAP-02857"},"M21-GAP-02857":{"line":6112,"offset":1094623,"length":186,"previous":"M21-GAP-02856","next":"M21-GAP-02858"},"M21-GAP-02858":{"line":6113,"offset":1094809,"length":187,"previous":"M21-GAP-02857","next":"M21-GAP-02859"},"M21-GAP-02859":{"line":6114,"offset":1094996,"length":187,"previous":"M21-GAP-02858","next":"M21-GAP-02860"},"M21-GAP-02860":{"line":6115,"offset":1095183,"length":187,"previous":"M21-GAP-02859","next":"M21-GAP-02861"},"M21-GAP-02861":{"line":6116,"offset":1095370,"length":187,"previous":"M21-GAP-02860","next":"M21-GAP-02862"},"M21-GAP-02862":{"line":6117,"offset":1095557,"length":187,"previous":"M21-GAP-02861","next":"M21-GAP-02863"},"M21-GAP-02863":{"line":6118,"offset":1095744,"length":187,"previous":"M21-GAP-02862","next":"M21-GAP-02864"},"M21-GAP-02864":{"line":6119,"offset":1095931,"length":187,"previous":"M21-GAP-02863","next":"M21-GAP-02865"},"M21-GAP-02865":{"line":6120,"offset":1096118,"length":187,"previous":"M21-GAP-02864","next":"M21-GAP-02866"},"M21-GAP-02866":{"line":6121,"offset":1096305,"length":187,"previous":"M21-GAP-02865","next":"M21-GAP-02867"},"M21-GAP-02867":{"line":6122,"offset":1096492,"length":187,"previous":"M21-GAP-02866","next":"M21-GAP-02868"},"M21-GAP-02868":{"line":6123,"offset":1096679,"length":186,"previous":"M21-GAP-02867","next":"M21-GAP-02869"},"M21-GAP-02869":{"line":6124,"offset":1096865,"length":187,"previous":"M21-GAP-02868","next":"M21-GAP-02870"},"M21-GAP-02870":{"line":6125,"offset":1097052,"length":187,"previous":"M21-GAP-02869","next":"M21-GAP-02871"},"M21-GAP-02871":{"line":6126,"offset":1097239,"length":187,"previous":"M21-GAP-02870","next":"M21-GAP-02872"},"M21-GAP-02872":{"line":6127,"offset":1097426,"length":187,"previous":"M21-GAP-02871","next":"M21-GAP-02873"},"M21-GAP-02873":{"line":6128,"offset":1097613,"length":187,"previous":"M21-GAP-02872","next":"M21-GAP-02874"},"M21-GAP-02874":{"line":6129,"offset":1097800,"length":187,"previous":"M21-GAP-02873","next":"M21-GAP-02875"},"M21-GAP-02875":{"line":6130,"offset":1097987,"length":187,"previous":"M21-GAP-02874","next":"M21-GAP-02876"},"M21-GAP-02876":{"line":6131,"offset":1098174,"length":187,"previous":"M21-GAP-02875","next":"M21-GAP-02877"},"M21-GAP-02877":{"line":6132,"offset":1098361,"length":187,"previous":"M21-GAP-02876","next":"M21-GAP-02878"},"M21-GAP-02878":{"line":6133,"offset":1098548,"length":187,"previous":"M21-GAP-02877","next":"M21-GAP-02879"},"M21-GAP-02879":{"line":6134,"offset":1098735,"length":186,"previous":"M21-GAP-02878","next":"M21-GAP-02880"},"M21-GAP-02880":{"line":6135,"offset":1098921,"length":187,"previous":"M21-GAP-02879","next":"M21-GAP-02881"},"M21-GAP-02881":{"line":6136,"offset":1099108,"length":187,"previous":"M21-GAP-02880","next":"M21-GAP-02882"},"M21-GAP-02882":{"line":6137,"offset":1099295,"length":187,"previous":"M21-GAP-02881","next":"M21-GAP-02883"},"M21-GAP-02883":{"line":6138,"offset":1099482,"length":187,"previous":"M21-GAP-02882","next":"M21-GAP-02884"},"M21-GAP-02884":{"line":6139,"offset":1099669,"length":187,"previous":"M21-GAP-02883","next":"M21-GAP-02885"},"M21-GAP-02885":{"line":6140,"offset":1099856,"length":187,"previous":"M21-GAP-02884","next":"M21-GAP-02886"},"M21-GAP-02886":{"line":6141,"offset":1100043,"length":187,"previous":"M21-GAP-02885","next":"M21-GAP-02887"},"M21-GAP-02887":{"line":6142,"offset":1100230,"length":187,"previous":"M21-GAP-02886","next":"M21-GAP-02888"},"M21-GAP-02888":{"line":6143,"offset":1100417,"length":187,"previous":"M21-GAP-02887","next":"M21-GAP-02889"},"M21-GAP-02889":{"line":6144,"offset":1100604,"length":187,"previous":"M21-GAP-02888","next":"M21-GAP-02890"},"M21-GAP-02890":{"line":6145,"offset":1100791,"length":186,"previous":"M21-GAP-02889","next":"M21-GAP-02891"},"M21-GAP-02891":{"line":6146,"offset":1100977,"length":187,"previous":"M21-GAP-02890","next":"M21-GAP-02892"},"M21-GAP-02892":{"line":6147,"offset":1101164,"length":187,"previous":"M21-GAP-02891","next":"M21-GAP-02893"},"M21-GAP-02893":{"line":6148,"offset":1101351,"length":187,"previous":"M21-GAP-02892","next":"M21-GAP-02894"},"M21-GAP-02894":{"line":6149,"offset":1101538,"length":187,"previous":"M21-GAP-02893","next":"M21-GAP-02895"},"M21-GAP-02895":{"line":6150,"offset":1101725,"length":187,"previous":"M21-GAP-02894","next":"M21-GAP-02896"},"M21-GAP-02896":{"line":6151,"offset":1101912,"length":187,"previous":"M21-GAP-02895","next":"M21-GAP-02897"},"M21-GAP-02897":{"line":6152,"offset":1102099,"length":186,"previous":"M21-GAP-02896","next":"M21-GAP-02898"},"M21-GAP-02898":{"line":6153,"offset":1102285,"length":186,"previous":"M21-GAP-02897","next":"M21-GAP-02899"},"M21-GAP-02899":{"line":6154,"offset":1102471,"length":186,"previous":"M21-GAP-02898","next":"M21-GAP-02900"},"M21-GAP-02900":{"line":6155,"offset":1102657,"length":186,"previous":"M21-GAP-02899","next":"M21-GAP-02901"},"M21-GAP-02901":{"line":6156,"offset":1102843,"length":176,"previous":"M21-GAP-02900","next":"M21-GAP-02902"},"M21-GAP-02902":{"line":6157,"offset":1103019,"length":176,"previous":"M21-GAP-02901","next":"M21-GAP-02903"},"M21-GAP-02903":{"line":6158,"offset":1103195,"length":177,"previous":"M21-GAP-02902","next":"M21-GAP-02904"},"M21-GAP-02904":{"line":6159,"offset":1103372,"length":177,"previous":"M21-GAP-02903","next":"M21-GAP-02905"},"M21-GAP-02905":{"line":6160,"offset":1103549,"length":177,"previous":"M21-GAP-02904","next":"M21-GAP-02906"},"M21-GAP-02906":{"line":6161,"offset":1103726,"length":177,"previous":"M21-GAP-02905","next":"M21-GAP-02907"},"M21-GAP-02907":{"line":6162,"offset":1103903,"length":177,"previous":"M21-GAP-02906","next":"M21-GAP-02908"},"M21-GAP-02908":{"line":6163,"offset":1104080,"length":177,"previous":"M21-GAP-02907","next":"M21-GAP-02909"},"M21-GAP-02909":{"line":6164,"offset":1104257,"length":177,"previous":"M21-GAP-02908","next":"M21-GAP-02910"},"M21-GAP-02910":{"line":6165,"offset":1104434,"length":177,"previous":"M21-GAP-02909","next":"M21-GAP-02911"},"M21-GAP-02911":{"line":6166,"offset":1104611,"length":177,"previous":"M21-GAP-02910","next":"M21-GAP-02912"},"M21-GAP-02912":{"line":6167,"offset":1104788,"length":177,"previous":"M21-GAP-02911","next":"M21-GAP-02913"},"M21-GAP-02913":{"line":6168,"offset":1104965,"length":176,"previous":"M21-GAP-02912","next":"M21-GAP-02914"},"M21-GAP-02914":{"line":6169,"offset":1105141,"length":177,"previous":"M21-GAP-02913","next":"M21-GAP-02915"},"M21-GAP-02915":{"line":6170,"offset":1105318,"length":177,"previous":"M21-GAP-02914","next":"M21-GAP-02916"},"M21-GAP-02916":{"line":6171,"offset":1105495,"length":177,"previous":"M21-GAP-02915","next":"M21-GAP-02917"},"M21-GAP-02917":{"line":6172,"offset":1105672,"length":177,"previous":"M21-GAP-02916","next":"M21-GAP-02918"},"M21-GAP-02918":{"line":6173,"offset":1105849,"length":177,"previous":"M21-GAP-02917","next":"M21-GAP-02919"},"M21-GAP-02919":{"line":6174,"offset":1106026,"length":177,"previous":"M21-GAP-02918","next":"M21-GAP-02920"},"M21-GAP-02920":{"line":6175,"offset":1106203,"length":177,"previous":"M21-GAP-02919","next":"M21-GAP-02921"},"M21-GAP-02921":{"line":6176,"offset":1106380,"length":177,"previous":"M21-GAP-02920","next":"M21-GAP-02922"},"M21-GAP-02922":{"line":6177,"offset":1106557,"length":177,"previous":"M21-GAP-02921","next":"M21-GAP-02923"},"M21-GAP-02923":{"line":6178,"offset":1106734,"length":177,"previous":"M21-GAP-02922","next":"M21-GAP-02924"},"M21-GAP-02924":{"line":6179,"offset":1106911,"length":176,"previous":"M21-GAP-02923","next":"M21-GAP-02925"},"M21-GAP-02925":{"line":6180,"offset":1107087,"length":177,"previous":"M21-GAP-02924","next":"M21-GAP-02926"},"M21-GAP-02926":{"line":6181,"offset":1107264,"length":177,"previous":"M21-GAP-02925","next":"M21-GAP-02927"},"M21-GAP-02927":{"line":6182,"offset":1107441,"length":177,"previous":"M21-GAP-02926","next":"M21-GAP-02928"},"M21-GAP-02928":{"line":6183,"offset":1107618,"length":177,"previous":"M21-GAP-02927","next":"M21-GAP-02929"},"M21-GAP-02929":{"line":6184,"offset":1107795,"length":177,"previous":"M21-GAP-02928","next":"M21-GAP-02930"},"M21-GAP-02930":{"line":6185,"offset":1107972,"length":177,"previous":"M21-GAP-02929","next":"M21-GAP-02931"},"M21-GAP-02931":{"line":6186,"offset":1108149,"length":177,"previous":"M21-GAP-02930","next":"M21-GAP-02932"},"M21-GAP-02932":{"line":6187,"offset":1108326,"length":177,"previous":"M21-GAP-02931","next":"M21-GAP-02933"},"M21-GAP-02933":{"line":6188,"offset":1108503,"length":177,"previous":"M21-GAP-02932","next":"M21-GAP-02934"},"M21-GAP-02934":{"line":6189,"offset":1108680,"length":177,"previous":"M21-GAP-02933","next":"M21-GAP-02935"},"M21-GAP-02935":{"line":6190,"offset":1108857,"length":176,"previous":"M21-GAP-02934","next":"M21-GAP-02936"},"M21-GAP-02936":{"line":6191,"offset":1109033,"length":177,"previous":"M21-GAP-02935","next":"M21-GAP-02937"},"M21-GAP-02937":{"line":6192,"offset":1109210,"length":177,"previous":"M21-GAP-02936","next":"M21-GAP-02938"},"M21-GAP-02938":{"line":6193,"offset":1109387,"length":177,"previous":"M21-GAP-02937","next":"M21-GAP-02939"},"M21-GAP-02939":{"line":6194,"offset":1109564,"length":177,"previous":"M21-GAP-02938","next":"M21-GAP-02940"},"M21-GAP-02940":{"line":6195,"offset":1109741,"length":177,"previous":"M21-GAP-02939","next":"M21-GAP-02941"},"M21-GAP-02941":{"line":6196,"offset":1109918,"length":177,"previous":"M21-GAP-02940","next":"M21-GAP-02942"},"M21-GAP-02942":{"line":6197,"offset":1110095,"length":177,"previous":"M21-GAP-02941","next":"M21-GAP-02943"},"M21-GAP-02943":{"line":6198,"offset":1110272,"length":177,"previous":"M21-GAP-02942","next":"M21-GAP-02944"},"M21-GAP-02944":{"line":6199,"offset":1110449,"length":177,"previous":"M21-GAP-02943","next":"M21-GAP-02945"},"M21-GAP-02945":{"line":6200,"offset":1110626,"length":177,"previous":"M21-GAP-02944","next":"M21-GAP-02946"},"M21-GAP-02946":{"line":6201,"offset":1110803,"length":176,"previous":"M21-GAP-02945","next":"M21-GAP-02947"},"M21-GAP-02947":{"line":6202,"offset":1110979,"length":177,"previous":"M21-GAP-02946","next":"M21-GAP-02948"},"M21-GAP-02948":{"line":6203,"offset":1111156,"length":177,"previous":"M21-GAP-02947","next":"M21-GAP-02949"},"M21-GAP-02949":{"line":6204,"offset":1111333,"length":177,"previous":"M21-GAP-02948","next":"M21-GAP-02950"},"M21-GAP-02950":{"line":6205,"offset":1111510,"length":177,"previous":"M21-GAP-02949","next":"M21-GAP-02951"},"M21-GAP-02951":{"line":6206,"offset":1111687,"length":177,"previous":"M21-GAP-02950","next":"M21-GAP-02952"},"M21-GAP-02952":{"line":6207,"offset":1111864,"length":177,"previous":"M21-GAP-02951","next":"M21-GAP-02953"},"M21-GAP-02953":{"line":6208,"offset":1112041,"length":177,"previous":"M21-GAP-02952","next":"M21-GAP-02954"},"M21-GAP-02954":{"line":6209,"offset":1112218,"length":177,"previous":"M21-GAP-02953","next":"M21-GAP-02955"},"M21-GAP-02955":{"line":6210,"offset":1112395,"length":177,"previous":"M21-GAP-02954","next":"M21-GAP-02956"},"M21-GAP-02956":{"line":6211,"offset":1112572,"length":177,"previous":"M21-GAP-02955","next":"M21-GAP-02957"},"M21-GAP-02957":{"line":6212,"offset":1112749,"length":176,"previous":"M21-GAP-02956","next":"M21-GAP-02958"},"M21-GAP-02958":{"line":6213,"offset":1112925,"length":177,"previous":"M21-GAP-02957","next":"M21-GAP-02959"},"M21-GAP-02959":{"line":6214,"offset":1113102,"length":177,"previous":"M21-GAP-02958","next":"M21-GAP-02960"},"M21-GAP-02960":{"line":6215,"offset":1113279,"length":177,"previous":"M21-GAP-02959","next":"M21-GAP-02961"},"M21-GAP-02961":{"line":6216,"offset":1113456,"length":177,"previous":"M21-GAP-02960","next":"M21-GAP-02962"},"M21-GAP-02962":{"line":6217,"offset":1113633,"length":177,"previous":"M21-GAP-02961","next":"M21-GAP-02963"},"M21-GAP-02963":{"line":6218,"offset":1113810,"length":177,"previous":"M21-GAP-02962","next":"M21-GAP-02964"},"M21-GAP-02964":{"line":6219,"offset":1113987,"length":177,"previous":"M21-GAP-02963","next":"M21-GAP-02965"},"M21-GAP-02965":{"line":6220,"offset":1114164,"length":177,"previous":"M21-GAP-02964","next":"M21-GAP-02966"},"M21-GAP-02966":{"line":6221,"offset":1114341,"length":177,"previous":"M21-GAP-02965","next":"M21-GAP-02967"},"M21-GAP-02967":{"line":6222,"offset":1114518,"length":177,"previous":"M21-GAP-02966","next":"M21-GAP-02968"},"M21-GAP-02968":{"line":6223,"offset":1114695,"length":176,"previous":"M21-GAP-02967","next":"M21-GAP-02969"},"M21-GAP-02969":{"line":6224,"offset":1114871,"length":177,"previous":"M21-GAP-02968","next":"M21-GAP-02970"},"M21-GAP-02970":{"line":6225,"offset":1115048,"length":177,"previous":"M21-GAP-02969","next":"M21-GAP-02971"},"M21-GAP-02971":{"line":6226,"offset":1115225,"length":177,"previous":"M21-GAP-02970","next":"M21-GAP-02972"},"M21-GAP-02972":{"line":6227,"offset":1115402,"length":177,"previous":"M21-GAP-02971","next":"M21-GAP-02973"},"M21-GAP-02973":{"line":6228,"offset":1115579,"length":177,"previous":"M21-GAP-02972","next":"M21-GAP-02974"},"M21-GAP-02974":{"line":6229,"offset":1115756,"length":177,"previous":"M21-GAP-02973","next":"M21-GAP-02975"},"M21-GAP-02975":{"line":6230,"offset":1115933,"length":177,"previous":"M21-GAP-02974","next":"M21-GAP-02976"},"M21-GAP-02976":{"line":6231,"offset":1116110,"length":177,"previous":"M21-GAP-02975","next":"M21-GAP-02977"},"M21-GAP-02977":{"line":6232,"offset":1116287,"length":177,"previous":"M21-GAP-02976","next":"M21-GAP-02978"},"M21-GAP-02978":{"line":6233,"offset":1116464,"length":177,"previous":"M21-GAP-02977","next":"M21-GAP-02979"},"M21-GAP-02979":{"line":6234,"offset":1116641,"length":176,"previous":"M21-GAP-02978","next":"M21-GAP-02980"},"M21-GAP-02980":{"line":6235,"offset":1116817,"length":177,"previous":"M21-GAP-02979","next":"M21-GAP-02981"},"M21-GAP-02981":{"line":6236,"offset":1116994,"length":177,"previous":"M21-GAP-02980","next":"M21-GAP-02982"},"M21-GAP-02982":{"line":6237,"offset":1117171,"length":177,"previous":"M21-GAP-02981","next":"M21-GAP-02983"},"M21-GAP-02983":{"line":6238,"offset":1117348,"length":177,"previous":"M21-GAP-02982","next":"M21-GAP-02984"},"M21-GAP-02984":{"line":6239,"offset":1117525,"length":177,"previous":"M21-GAP-02983","next":"M21-GAP-02985"},"M21-GAP-02985":{"line":6240,"offset":1117702,"length":177,"previous":"M21-GAP-02984","next":"M21-GAP-02986"},"M21-GAP-02986":{"line":6241,"offset":1117879,"length":177,"previous":"M21-GAP-02985","next":"M21-GAP-02987"},"M21-GAP-02987":{"line":6242,"offset":1118056,"length":177,"previous":"M21-GAP-02986","next":"M21-GAP-02988"},"M21-GAP-02988":{"line":6243,"offset":1118233,"length":176,"previous":"M21-GAP-02987","next":"M21-GAP-02989"},"M21-GAP-02989":{"line":6244,"offset":1118409,"length":181,"previous":"M21-GAP-02988","next":"M21-GAP-02990"},"M21-GAP-02990":{"line":6245,"offset":1118590,"length":181,"previous":"M21-GAP-02989","next":"M21-GAP-02991"},"M21-GAP-02991":{"line":6246,"offset":1118771,"length":182,"previous":"M21-GAP-02990","next":"M21-GAP-02992"},"M21-GAP-02992":{"line":6247,"offset":1118953,"length":182,"previous":"M21-GAP-02991","next":"M21-GAP-02993"},"M21-GAP-02993":{"line":6248,"offset":1119135,"length":182,"previous":"M21-GAP-02992","next":"M21-GAP-02994"},"M21-GAP-02994":{"line":6249,"offset":1119317,"length":182,"previous":"M21-GAP-02993","next":"M21-GAP-02995"},"M21-GAP-02995":{"line":6250,"offset":1119499,"length":182,"previous":"M21-GAP-02994","next":"M21-GAP-02996"},"M21-GAP-02996":{"line":6251,"offset":1119681,"length":182,"previous":"M21-GAP-02995","next":"M21-GAP-02997"},"M21-GAP-02997":{"line":6252,"offset":1119863,"length":182,"previous":"M21-GAP-02996","next":"M21-GAP-02998"},"M21-GAP-02998":{"line":6253,"offset":1120045,"length":182,"previous":"M21-GAP-02997","next":"M21-GAP-02999"},"M21-GAP-02999":{"line":6254,"offset":1120227,"length":182,"previous":"M21-GAP-02998","next":"M21-GAP-03000"},"M21-GAP-03000":{"line":6255,"offset":1120409,"length":182,"previous":"M21-GAP-02999","next":"M21-GAP-03001"},"M21-GAP-03001":{"line":6256,"offset":1120591,"length":181,"previous":"M21-GAP-03000","next":"M21-GAP-03002"},"M21-GAP-03002":{"line":6257,"offset":1120772,"length":182,"previous":"M21-GAP-03001","next":"M21-GAP-03003"},"M21-GAP-03003":{"line":6258,"offset":1120954,"length":182,"previous":"M21-GAP-03002","next":"M21-GAP-03004"},"M21-GAP-03004":{"line":6259,"offset":1121136,"length":182,"previous":"M21-GAP-03003","next":"M21-GAP-03005"},"M21-GAP-03005":{"line":6260,"offset":1121318,"length":182,"previous":"M21-GAP-03004","next":"M21-GAP-03006"},"M21-GAP-03006":{"line":6261,"offset":1121500,"length":182,"previous":"M21-GAP-03005","next":"M21-GAP-03007"},"M21-GAP-03007":{"line":6262,"offset":1121682,"length":182,"previous":"M21-GAP-03006","next":"M21-GAP-03008"},"M21-GAP-03008":{"line":6263,"offset":1121864,"length":182,"previous":"M21-GAP-03007","next":"M21-GAP-03009"},"M21-GAP-03009":{"line":6264,"offset":1122046,"length":182,"previous":"M21-GAP-03008","next":"M21-GAP-03010"},"M21-GAP-03010":{"line":6265,"offset":1122228,"length":182,"previous":"M21-GAP-03009","next":"M21-GAP-03011"},"M21-GAP-03011":{"line":6266,"offset":1122410,"length":182,"previous":"M21-GAP-03010","next":"M21-GAP-03012"},"M21-GAP-03012":{"line":6267,"offset":1122592,"length":181,"previous":"M21-GAP-03011","next":"M21-GAP-03013"},"M21-GAP-03013":{"line":6268,"offset":1122773,"length":182,"previous":"M21-GAP-03012","next":"M21-GAP-03014"},"M21-GAP-03014":{"line":6269,"offset":1122955,"length":182,"previous":"M21-GAP-03013","next":"M21-GAP-03015"},"M21-GAP-03015":{"line":6270,"offset":1123137,"length":182,"previous":"M21-GAP-03014","next":"M21-GAP-03016"},"M21-GAP-03016":{"line":6271,"offset":1123319,"length":181,"previous":"M21-GAP-03015","next":"M21-GAP-03017"},"M21-GAP-03017":{"line":6272,"offset":1123500,"length":181,"previous":"M21-GAP-03016","next":"M21-GAP-03018"},"M21-GAP-03018":{"line":6273,"offset":1123681,"length":181,"previous":"M21-GAP-03017","next":"M21-GAP-03019"},"M21-GAP-03019":{"line":6274,"offset":1123862,"length":181,"previous":"M21-GAP-03018","next":"M21-GAP-03020"},"M21-GAP-03020":{"line":6275,"offset":1124043,"length":181,"previous":"M21-GAP-03019","next":"M21-GAP-03021"},"M21-GAP-03021":{"line":6276,"offset":1124224,"length":181,"previous":"M21-GAP-03020","next":"M21-GAP-03022"},"M21-GAP-03022":{"line":6277,"offset":1124405,"length":179,"previous":"M21-GAP-03021","next":"M21-GAP-03023"},"M21-GAP-03023":{"line":6278,"offset":1124584,"length":179,"previous":"M21-GAP-03022","next":"M21-GAP-03024"},"M21-GAP-03024":{"line":6279,"offset":1124763,"length":180,"previous":"M21-GAP-03023","next":"M21-GAP-03025"},"M21-GAP-03025":{"line":6280,"offset":1124943,"length":180,"previous":"M21-GAP-03024","next":"M21-GAP-03026"},"M21-GAP-03026":{"line":6281,"offset":1125123,"length":180,"previous":"M21-GAP-03025","next":"M21-GAP-03027"},"M21-GAP-03027":{"line":6282,"offset":1125303,"length":180,"previous":"M21-GAP-03026","next":"M21-GAP-03028"},"M21-GAP-03028":{"line":6283,"offset":1125483,"length":180,"previous":"M21-GAP-03027","next":"M21-GAP-03029"},"M21-GAP-03029":{"line":6284,"offset":1125663,"length":180,"previous":"M21-GAP-03028","next":"M21-GAP-03030"},"M21-GAP-03030":{"line":6285,"offset":1125843,"length":180,"previous":"M21-GAP-03029","next":"M21-GAP-03031"},"M21-GAP-03031":{"line":6286,"offset":1126023,"length":180,"previous":"M21-GAP-03030","next":"M21-GAP-03032"},"M21-GAP-03032":{"line":6287,"offset":1126203,"length":180,"previous":"M21-GAP-03031","next":"M21-GAP-03033"},"M21-GAP-03033":{"line":6288,"offset":1126383,"length":180,"previous":"M21-GAP-03032","next":"M21-GAP-03034"},"M21-GAP-03034":{"line":6289,"offset":1126563,"length":179,"previous":"M21-GAP-03033","next":"M21-GAP-03035"},"M21-GAP-03035":{"line":6290,"offset":1126742,"length":180,"previous":"M21-GAP-03034","next":"M21-GAP-03036"},"M21-GAP-03036":{"line":6291,"offset":1126922,"length":180,"previous":"M21-GAP-03035","next":"M21-GAP-03037"},"M21-GAP-03037":{"line":6292,"offset":1127102,"length":180,"previous":"M21-GAP-03036","next":"M21-GAP-03038"},"M21-GAP-03038":{"line":6293,"offset":1127282,"length":180,"previous":"M21-GAP-03037","next":"M21-GAP-03039"},"M21-GAP-03039":{"line":6294,"offset":1127462,"length":180,"previous":"M21-GAP-03038","next":"M21-GAP-03040"},"M21-GAP-03040":{"line":6295,"offset":1127642,"length":180,"previous":"M21-GAP-03039","next":"M21-GAP-03041"},"M21-GAP-03041":{"line":6296,"offset":1127822,"length":179,"previous":"M21-GAP-03040","next":"M21-GAP-03042"},"M21-GAP-03042":{"line":6297,"offset":1128001,"length":179,"previous":"M21-GAP-03041","next":"M21-GAP-03043"},"M21-GAP-03043":{"line":6298,"offset":1128180,"length":179,"previous":"M21-GAP-03042","next":"M21-GAP-03044"},"M21-GAP-03044":{"line":6299,"offset":1128359,"length":179,"previous":"M21-GAP-03043","next":"M21-GAP-03045"},"M21-GAP-03045":{"line":6300,"offset":1128538,"length":179,"previous":"M21-GAP-03044","next":"M21-GAP-03046"},"M21-GAP-03046":{"line":6301,"offset":1128717,"length":179,"previous":"M21-GAP-03045","next":"M21-GAP-03047"},"M21-GAP-03047":{"line":6302,"offset":1128896,"length":179,"previous":"M21-GAP-03046","next":"M21-GAP-03048"},"M21-GAP-03048":{"line":6303,"offset":1129075,"length":198,"previous":"M21-GAP-03047","next":"M21-GAP-03049"},"M21-GAP-03049":{"line":6304,"offset":1129273,"length":198,"previous":"M21-GAP-03048","next":"M21-GAP-03050"},"M21-GAP-03050":{"line":6305,"offset":1129471,"length":198,"previous":"M21-GAP-03049","next":"M21-GAP-03051"},"M21-GAP-03051":{"line":6306,"offset":1129669,"length":198,"previous":"M21-GAP-03050","next":"M21-GAP-03052"},"M21-GAP-03052":{"line":6307,"offset":1129867,"length":198,"previous":"M21-GAP-03051","next":"M21-GAP-03053"},"M21-GAP-03053":{"line":6308,"offset":1130065,"length":198,"previous":"M21-GAP-03052","next":"M21-GAP-03054"},"M21-GAP-03054":{"line":6309,"offset":1130263,"length":198,"previous":"M21-GAP-03053","next":"M21-GAP-03055"},"M21-GAP-03055":{"line":6310,"offset":1130461,"length":186,"previous":"M21-GAP-03054","next":"M21-GAP-03056"},"M21-GAP-03056":{"line":6311,"offset":1130647,"length":186,"previous":"M21-GAP-03055","next":"M21-GAP-03057"},"M21-GAP-03057":{"line":6312,"offset":1130833,"length":187,"previous":"M21-GAP-03056","next":"M21-GAP-03058"},"M21-GAP-03058":{"line":6313,"offset":1131020,"length":187,"previous":"M21-GAP-03057","next":"M21-GAP-03059"},"M21-GAP-03059":{"line":6314,"offset":1131207,"length":187,"previous":"M21-GAP-03058","next":"M21-GAP-03060"},"M21-GAP-03060":{"line":6315,"offset":1131394,"length":187,"previous":"M21-GAP-03059","next":"M21-GAP-03061"},"M21-GAP-03061":{"line":6316,"offset":1131581,"length":186,"previous":"M21-GAP-03060","next":"M21-GAP-03062"},"M21-GAP-03062":{"line":6317,"offset":1131767,"length":186,"previous":"M21-GAP-03061","next":"M21-GAP-03063"},"M21-GAP-03063":{"line":6318,"offset":1131953,"length":186,"previous":"M21-GAP-03062","next":"M21-GAP-03064"},"M21-GAP-03064":{"line":6319,"offset":1132139,"length":186,"previous":"M21-GAP-03063","next":"M21-GAP-03065"},"M21-GAP-03065":{"line":6320,"offset":1132325,"length":186,"previous":"M21-GAP-03064","next":"M21-GAP-03066"},"M21-GAP-03066":{"line":6321,"offset":1132511,"length":186,"previous":"M21-GAP-03065","next":"M21-GAP-03067"},"M21-GAP-03067":{"line":6322,"offset":1132697,"length":186,"previous":"M21-GAP-03066","next":"M21-GAP-03068"},"M21-GAP-03068":{"line":6323,"offset":1132883,"length":186,"previous":"M21-GAP-03067","next":"M21-GAP-03069"},"M21-GAP-03069":{"line":6324,"offset":1133069,"length":173,"previous":"M21-GAP-03068","next":"M21-GAP-03070"},"M21-GAP-03070":{"line":6325,"offset":1133242,"length":173,"previous":"M21-GAP-03069","next":"M21-GAP-03071"},"M21-GAP-03071":{"line":6326,"offset":1133415,"length":174,"previous":"M21-GAP-03070","next":"M21-GAP-03072"},"M21-GAP-03072":{"line":6327,"offset":1133589,"length":174,"previous":"M21-GAP-03071","next":"M21-GAP-03073"},"M21-GAP-03073":{"line":6328,"offset":1133763,"length":174,"previous":"M21-GAP-03072","next":"M21-GAP-03074"},"M21-GAP-03074":{"line":6329,"offset":1133937,"length":174,"previous":"M21-GAP-03073","next":"M21-GAP-03075"},"M21-GAP-03075":{"line":6330,"offset":1134111,"length":174,"previous":"M21-GAP-03074","next":"M21-GAP-03076"},"M21-GAP-03076":{"line":6331,"offset":1134285,"length":174,"previous":"M21-GAP-03075","next":"M21-GAP-03077"},"M21-GAP-03077":{"line":6332,"offset":1134459,"length":174,"previous":"M21-GAP-03076","next":"M21-GAP-03078"},"M21-GAP-03078":{"line":6333,"offset":1134633,"length":174,"previous":"M21-GAP-03077","next":"M21-GAP-03079"},"M21-GAP-03079":{"line":6334,"offset":1134807,"length":174,"previous":"M21-GAP-03078","next":"M21-GAP-03080"},"M21-GAP-03080":{"line":6335,"offset":1134981,"length":174,"previous":"M21-GAP-03079","next":"M21-GAP-03081"},"M21-GAP-03081":{"line":6336,"offset":1135155,"length":173,"previous":"M21-GAP-03080","next":"M21-GAP-03082"},"M21-GAP-03082":{"line":6337,"offset":1135328,"length":174,"previous":"M21-GAP-03081","next":"M21-GAP-03083"},"M21-GAP-03083":{"line":6338,"offset":1135502,"length":174,"previous":"M21-GAP-03082","next":"M21-GAP-03084"},"M21-GAP-03084":{"line":6339,"offset":1135676,"length":174,"previous":"M21-GAP-03083","next":"M21-GAP-03085"},"M21-GAP-03085":{"line":6340,"offset":1135850,"length":174,"previous":"M21-GAP-03084","next":"M21-GAP-03086"},"M21-GAP-03086":{"line":6341,"offset":1136024,"length":174,"previous":"M21-GAP-03085","next":"M21-GAP-03087"},"M21-GAP-03087":{"line":6342,"offset":1136198,"length":173,"previous":"M21-GAP-03086","next":"M21-GAP-03088"},"M21-GAP-03088":{"line":6343,"offset":1136371,"length":173,"previous":"M21-GAP-03087","next":"M21-GAP-03089"},"M21-GAP-03089":{"line":6344,"offset":1136544,"length":173,"previous":"M21-GAP-03088","next":"M21-GAP-03090"},"M21-GAP-03090":{"line":6345,"offset":1136717,"length":173,"previous":"M21-GAP-03089","next":"M21-GAP-03091"},"M21-GAP-03091":{"line":6346,"offset":1136890,"length":173,"previous":"M21-GAP-03090","next":"M21-GAP-03092"},"M21-GAP-03092":{"line":6347,"offset":1137063,"length":173,"previous":"M21-GAP-03091","next":"M21-GAP-03093"},"M21-GAP-03093":{"line":6348,"offset":1137236,"length":173,"previous":"M21-GAP-03092","next":"M21-GAP-03094"},"M21-GAP-03094":{"line":6349,"offset":1137409,"length":185,"previous":"M21-GAP-03093","next":"M21-GAP-03095"},"M21-GAP-03095":{"line":6350,"offset":1137594,"length":183,"previous":"M21-GAP-03094","next":"M21-GAP-03096"},"M21-GAP-03096":{"line":6351,"offset":1137777,"length":183,"previous":"M21-GAP-03095","next":"M21-GAP-03097"},"M21-GAP-03097":{"line":6352,"offset":1137960,"length":184,"previous":"M21-GAP-03096","next":"M21-GAP-03098"},"M21-GAP-03098":{"line":6353,"offset":1138144,"length":184,"previous":"M21-GAP-03097","next":"M21-GAP-03099"},"M21-GAP-03099":{"line":6354,"offset":1138328,"length":184,"previous":"M21-GAP-03098","next":"M21-GAP-03100"},"M21-GAP-03100":{"line":6355,"offset":1138512,"length":184,"previous":"M21-GAP-03099","next":"M21-GAP-03101"},"M21-GAP-03101":{"line":6356,"offset":1138696,"length":184,"previous":"M21-GAP-03100","next":"M21-GAP-03102"},"M21-GAP-03102":{"line":6357,"offset":1138880,"length":184,"previous":"M21-GAP-03101","next":"M21-GAP-03103"},"M21-GAP-03103":{"line":6358,"offset":1139064,"length":184,"previous":"M21-GAP-03102","next":"M21-GAP-03104"},"M21-GAP-03104":{"line":6359,"offset":1139248,"length":184,"previous":"M21-GAP-03103","next":"M21-GAP-03105"},"M21-GAP-03105":{"line":6360,"offset":1139432,"length":184,"previous":"M21-GAP-03104","next":"M21-GAP-03106"},"M21-GAP-03106":{"line":6361,"offset":1139616,"length":184,"previous":"M21-GAP-03105","next":"M21-GAP-03107"},"M21-GAP-03107":{"line":6362,"offset":1139800,"length":183,"previous":"M21-GAP-03106","next":"M21-GAP-03108"},"M21-GAP-03108":{"line":6363,"offset":1139983,"length":184,"previous":"M21-GAP-03107","next":"M21-GAP-03109"},"M21-GAP-03109":{"line":6364,"offset":1140167,"length":184,"previous":"M21-GAP-03108","next":"M21-GAP-03110"},"M21-GAP-03110":{"line":6365,"offset":1140351,"length":184,"previous":"M21-GAP-03109","next":"M21-GAP-03111"},"M21-GAP-03111":{"line":6366,"offset":1140535,"length":184,"previous":"M21-GAP-03110","next":"M21-GAP-03112"},"M21-GAP-03112":{"line":6367,"offset":1140719,"length":184,"previous":"M21-GAP-03111","next":"M21-GAP-03113"},"M21-GAP-03113":{"line":6368,"offset":1140903,"length":184,"previous":"M21-GAP-03112","next":"M21-GAP-03114"},"M21-GAP-03114":{"line":6369,"offset":1141087,"length":184,"previous":"M21-GAP-03113","next":"M21-GAP-03115"},"M21-GAP-03115":{"line":6370,"offset":1141271,"length":184,"previous":"M21-GAP-03114","next":"M21-GAP-03116"},"M21-GAP-03116":{"line":6371,"offset":1141455,"length":184,"previous":"M21-GAP-03115","next":"M21-GAP-03117"},"M21-GAP-03117":{"line":6372,"offset":1141639,"length":184,"previous":"M21-GAP-03116","next":"M21-GAP-03118"},"M21-GAP-03118":{"line":6373,"offset":1141823,"length":183,"previous":"M21-GAP-03117","next":"M21-GAP-03119"},"M21-GAP-03119":{"line":6374,"offset":1142006,"length":184,"previous":"M21-GAP-03118","next":"M21-GAP-03120"},"M21-GAP-03120":{"line":6375,"offset":1142190,"length":184,"previous":"M21-GAP-03119","next":"M21-GAP-03121"},"M21-GAP-03121":{"line":6376,"offset":1142374,"length":184,"previous":"M21-GAP-03120","next":"M21-GAP-03122"},"M21-GAP-03122":{"line":6377,"offset":1142558,"length":184,"previous":"M21-GAP-03121","next":"M21-GAP-03123"},"M21-GAP-03123":{"line":6378,"offset":1142742,"length":184,"previous":"M21-GAP-03122","next":"M21-GAP-03124"},"M21-GAP-03124":{"line":6379,"offset":1142926,"length":184,"previous":"M21-GAP-03123","next":"M21-GAP-03125"},"M21-GAP-03125":{"line":6380,"offset":1143110,"length":184,"previous":"M21-GAP-03124","next":"M21-GAP-03126"},"M21-GAP-03126":{"line":6381,"offset":1143294,"length":184,"previous":"M21-GAP-03125","next":"M21-GAP-03127"},"M21-GAP-03127":{"line":6382,"offset":1143478,"length":184,"previous":"M21-GAP-03126","next":"M21-GAP-03128"},"M21-GAP-03128":{"line":6383,"offset":1143662,"length":183,"previous":"M21-GAP-03127","next":"M21-GAP-03129"},"M21-GAP-03129":{"line":6384,"offset":1143845,"length":183,"previous":"M21-GAP-03128","next":"M21-GAP-03130"},"M21-GAP-03130":{"line":6385,"offset":1144028,"length":183,"previous":"M21-GAP-03129","next":"M21-GAP-03131"},"M21-GAP-03131":{"line":6386,"offset":1144211,"length":183,"previous":"M21-GAP-03130","next":"M21-GAP-03132"},"M21-GAP-03132":{"line":6387,"offset":1144394,"length":183,"previous":"M21-GAP-03131","next":"M21-GAP-03133"},"M21-GAP-03133":{"line":6388,"offset":1144577,"length":183,"previous":"M21-GAP-03132","next":"M21-GAP-03134"},"M21-GAP-03134":{"line":6389,"offset":1144760,"length":188,"previous":"M21-GAP-03133","next":"M21-GAP-03135"},"M21-GAP-03135":{"line":6390,"offset":1144948,"length":188,"previous":"M21-GAP-03134","next":"M21-GAP-03136"},"M21-GAP-03136":{"line":6391,"offset":1145136,"length":189,"previous":"M21-GAP-03135","next":"M21-GAP-03137"},"M21-GAP-03137":{"line":6392,"offset":1145325,"length":189,"previous":"M21-GAP-03136","next":"M21-GAP-03138"},"M21-GAP-03138":{"line":6393,"offset":1145514,"length":189,"previous":"M21-GAP-03137","next":"M21-GAP-03139"},"M21-GAP-03139":{"line":6394,"offset":1145703,"length":189,"previous":"M21-GAP-03138","next":"M21-GAP-03140"},"M21-GAP-03140":{"line":6395,"offset":1145892,"length":188,"previous":"M21-GAP-03139","next":"M21-GAP-03141"},"M21-GAP-03141":{"line":6396,"offset":1146080,"length":188,"previous":"M21-GAP-03140","next":"M21-GAP-03142"},"M21-GAP-03142":{"line":6397,"offset":1146268,"length":188,"previous":"M21-GAP-03141","next":"M21-GAP-03143"},"M21-GAP-03143":{"line":6398,"offset":1146456,"length":188,"previous":"M21-GAP-03142","next":"M21-GAP-03144"},"M21-GAP-03144":{"line":6399,"offset":1146644,"length":188,"previous":"M21-GAP-03143","next":"M21-GAP-03145"},"M21-GAP-03145":{"line":6400,"offset":1146832,"length":188,"previous":"M21-GAP-03144","next":"M21-GAP-03146"},"M21-GAP-03146":{"line":6401,"offset":1147020,"length":188,"previous":"M21-GAP-03145","next":"M21-GAP-03147"},"M21-GAP-03147":{"line":6402,"offset":1147208,"length":188,"previous":"M21-GAP-03146","next":"M21-GAP-03148"},"M21-GAP-03148":{"line":6403,"offset":1147396,"length":184,"previous":"M21-GAP-03147","next":"M21-GAP-03149"},"M21-GAP-03149":{"line":6404,"offset":1147580,"length":189,"previous":"M21-GAP-03148","next":"M21-GAP-03150"},"M21-GAP-03150":{"line":6405,"offset":1147769,"length":189,"previous":"M21-GAP-03149","next":"M21-GAP-03151"},"M21-GAP-03151":{"line":6406,"offset":1147958,"length":190,"previous":"M21-GAP-03150","next":"M21-GAP-03152"},"M21-GAP-03152":{"line":6407,"offset":1148148,"length":190,"previous":"M21-GAP-03151","next":"M21-GAP-03153"},"M21-GAP-03153":{"line":6408,"offset":1148338,"length":189,"previous":"M21-GAP-03152","next":"M21-GAP-03154"},"M21-GAP-03154":{"line":6409,"offset":1148527,"length":189,"previous":"M21-GAP-03153","next":"M21-GAP-03155"},"M21-GAP-03155":{"line":6410,"offset":1148716,"length":189,"previous":"M21-GAP-03154","next":"M21-GAP-03156"},"M21-GAP-03156":{"line":6411,"offset":1148905,"length":189,"previous":"M21-GAP-03155","next":"M21-GAP-03157"},"M21-GAP-03157":{"line":6412,"offset":1149094,"length":189,"previous":"M21-GAP-03156","next":"M21-GAP-03158"},"M21-GAP-03158":{"line":6413,"offset":1149283,"length":189,"previous":"M21-GAP-03157","next":"M21-GAP-03159"},"M21-GAP-03159":{"line":6414,"offset":1149472,"length":189,"previous":"M21-GAP-03158","next":"M21-GAP-03160"},"M21-GAP-03160":{"line":6415,"offset":1149661,"length":189,"previous":"M21-GAP-03159","next":"M21-GAP-03161"},"M21-GAP-03161":{"line":6416,"offset":1149850,"length":186,"previous":"M21-GAP-03160","next":"M21-GAP-03162"},"M21-GAP-03162":{"line":6417,"offset":1150036,"length":186,"previous":"M21-GAP-03161","next":"M21-GAP-03163"},"M21-GAP-03163":{"line":6418,"offset":1150222,"length":186,"previous":"M21-GAP-03162","next":"M21-GAP-03164"},"M21-GAP-03164":{"line":6419,"offset":1150408,"length":186,"previous":"M21-GAP-03163","next":"M21-GAP-03165"},"M21-GAP-03165":{"line":6420,"offset":1150594,"length":186,"previous":"M21-GAP-03164","next":"M21-GAP-03166"},"M21-GAP-03166":{"line":6421,"offset":1150780,"length":215,"previous":"M21-GAP-03165","next":"M21-GAP-03167"},"M21-GAP-03167":{"line":6422,"offset":1150995,"length":215,"previous":"M21-GAP-03166","next":"M21-GAP-03168"},"M21-GAP-03168":{"line":6423,"offset":1151210,"length":215,"previous":"M21-GAP-03167","next":"M21-GAP-03169"},"M21-GAP-03169":{"line":6424,"offset":1151425,"length":215,"previous":"M21-GAP-03168","next":"M21-GAP-03170"},"M21-GAP-03170":{"line":6425,"offset":1151640,"length":215,"previous":"M21-GAP-03169","next":"M21-GAP-03171"},"M21-GAP-03171":{"line":6426,"offset":1151855,"length":215,"previous":"M21-GAP-03170","next":"M21-GAP-03172"},"M21-GAP-03172":{"line":6427,"offset":1152070,"length":184,"previous":"M21-GAP-03171","next":"M21-GAP-03173"},"M21-GAP-03173":{"line":6428,"offset":1152254,"length":184,"previous":"M21-GAP-03172","next":"M21-GAP-03174"},"M21-GAP-03174":{"line":6429,"offset":1152438,"length":185,"previous":"M21-GAP-03173","next":"M21-GAP-03175"},"M21-GAP-03175":{"line":6430,"offset":1152623,"length":185,"previous":"M21-GAP-03174","next":"M21-GAP-03176"},"M21-GAP-03176":{"line":6431,"offset":1152808,"length":185,"previous":"M21-GAP-03175","next":"M21-GAP-03177"},"M21-GAP-03177":{"line":6432,"offset":1152993,"length":185,"previous":"M21-GAP-03176","next":"M21-GAP-03178"},"M21-GAP-03178":{"line":6433,"offset":1153178,"length":185,"previous":"M21-GAP-03177","next":"M21-GAP-03179"},"M21-GAP-03179":{"line":6434,"offset":1153363,"length":185,"previous":"M21-GAP-03178","next":"M21-GAP-03180"},"M21-GAP-03180":{"line":6435,"offset":1153548,"length":185,"previous":"M21-GAP-03179","next":"M21-GAP-03181"},"M21-GAP-03181":{"line":6436,"offset":1153733,"length":185,"previous":"M21-GAP-03180","next":"M21-GAP-03182"},"M21-GAP-03182":{"line":6437,"offset":1153918,"length":185,"previous":"M21-GAP-03181","next":"M21-GAP-03183"},"M21-GAP-03183":{"line":6438,"offset":1154103,"length":185,"previous":"M21-GAP-03182","next":"M21-GAP-03184"},"M21-GAP-03184":{"line":6439,"offset":1154288,"length":184,"previous":"M21-GAP-03183","next":"M21-GAP-03185"},"M21-GAP-03185":{"line":6440,"offset":1154472,"length":185,"previous":"M21-GAP-03184","next":"M21-GAP-03186"},"M21-GAP-03186":{"line":6441,"offset":1154657,"length":185,"previous":"M21-GAP-03185","next":"M21-GAP-03187"},"M21-GAP-03187":{"line":6442,"offset":1154842,"length":185,"previous":"M21-GAP-03186","next":"M21-GAP-03188"},"M21-GAP-03188":{"line":6443,"offset":1155027,"length":185,"previous":"M21-GAP-03187","next":"M21-GAP-03189"},"M21-GAP-03189":{"line":6444,"offset":1155212,"length":185,"previous":"M21-GAP-03188","next":"M21-GAP-03190"},"M21-GAP-03190":{"line":6445,"offset":1155397,"length":185,"previous":"M21-GAP-03189","next":"M21-GAP-03191"},"M21-GAP-03191":{"line":6446,"offset":1155582,"length":185,"previous":"M21-GAP-03190","next":"M21-GAP-03192"},"M21-GAP-03192":{"line":6447,"offset":1155767,"length":185,"previous":"M21-GAP-03191","next":"M21-GAP-03193"},"M21-GAP-03193":{"line":6448,"offset":1155952,"length":185,"previous":"M21-GAP-03192","next":"M21-GAP-03194"},"M21-GAP-03194":{"line":6449,"offset":1156137,"length":185,"previous":"M21-GAP-03193","next":"M21-GAP-03195"},"M21-GAP-03195":{"line":6450,"offset":1156322,"length":184,"previous":"M21-GAP-03194","next":"M21-GAP-03196"},"M21-GAP-03196":{"line":6451,"offset":1156506,"length":185,"previous":"M21-GAP-03195","next":"M21-GAP-03197"},"M21-GAP-03197":{"line":6452,"offset":1156691,"length":185,"previous":"M21-GAP-03196","next":"M21-GAP-03198"},"M21-GAP-03198":{"line":6453,"offset":1156876,"length":185,"previous":"M21-GAP-03197","next":"M21-GAP-03199"},"M21-GAP-03199":{"line":6454,"offset":1157061,"length":185,"previous":"M21-GAP-03198","next":"M21-GAP-03200"},"M21-GAP-03200":{"line":6455,"offset":1157246,"length":185,"previous":"M21-GAP-03199","next":"M21-GAP-03201"},"M21-GAP-03201":{"line":6456,"offset":1157431,"length":185,"previous":"M21-GAP-03200","next":"M21-GAP-03202"},"M21-GAP-03202":{"line":6457,"offset":1157616,"length":185,"previous":"M21-GAP-03201","next":"M21-GAP-03203"},"M21-GAP-03203":{"line":6458,"offset":1157801,"length":185,"previous":"M21-GAP-03202","next":"M21-GAP-03204"},"M21-GAP-03204":{"line":6459,"offset":1157986,"length":185,"previous":"M21-GAP-03203","next":"M21-GAP-03205"},"M21-GAP-03205":{"line":6460,"offset":1158171,"length":185,"previous":"M21-GAP-03204","next":"M21-GAP-03206"},"M21-GAP-03206":{"line":6461,"offset":1158356,"length":184,"previous":"M21-GAP-03205","next":"M21-GAP-03207"},"M21-GAP-03207":{"line":6462,"offset":1158540,"length":185,"previous":"M21-GAP-03206","next":"M21-GAP-03208"},"M21-GAP-03208":{"line":6463,"offset":1158725,"length":185,"previous":"M21-GAP-03207","next":"M21-GAP-03209"},"M21-GAP-03209":{"line":6464,"offset":1158910,"length":185,"previous":"M21-GAP-03208","next":"M21-GAP-03210"},"M21-GAP-03210":{"line":6465,"offset":1159095,"length":185,"previous":"M21-GAP-03209","next":"M21-GAP-03211"},"M21-GAP-03211":{"line":6466,"offset":1159280,"length":185,"previous":"M21-GAP-03210","next":"M21-GAP-03212"},"M21-GAP-03212":{"line":6467,"offset":1159465,"length":185,"previous":"M21-GAP-03211","next":"M21-GAP-03213"},"M21-GAP-03213":{"line":6468,"offset":1159650,"length":185,"previous":"M21-GAP-03212","next":"M21-GAP-03214"},"M21-GAP-03214":{"line":6469,"offset":1159835,"length":185,"previous":"M21-GAP-03213","next":"M21-GAP-03215"},"M21-GAP-03215":{"line":6470,"offset":1160020,"length":185,"previous":"M21-GAP-03214","next":"M21-GAP-03216"},"M21-GAP-03216":{"line":6471,"offset":1160205,"length":185,"previous":"M21-GAP-03215","next":"M21-GAP-03217"},"M21-GAP-03217":{"line":6472,"offset":1160390,"length":184,"previous":"M21-GAP-03216","next":"M21-GAP-03218"},"M21-GAP-03218":{"line":6473,"offset":1160574,"length":184,"previous":"M21-GAP-03217","next":"M21-GAP-03219"},"M21-GAP-03219":{"line":6474,"offset":1160758,"length":184,"previous":"M21-GAP-03218","next":"M21-GAP-03220"},"M21-GAP-03220":{"line":6475,"offset":1160942,"length":184,"previous":"M21-GAP-03219","next":"M21-GAP-03221"},"M21-GAP-03221":{"line":6476,"offset":1161126,"length":184,"previous":"M21-GAP-03220","next":"M21-GAP-03222"},"M21-GAP-03222":{"line":6477,"offset":1161310,"length":184,"previous":"M21-GAP-03221","next":"M21-GAP-03223"},"M21-GAP-03223":{"line":6478,"offset":1161494,"length":179,"previous":"M21-GAP-03222","next":"M21-GAP-03224"},"M21-GAP-03224":{"line":6479,"offset":1161673,"length":179,"previous":"M21-GAP-03223","next":"M21-GAP-03225"},"M21-GAP-03225":{"line":6480,"offset":1161852,"length":180,"previous":"M21-GAP-03224","next":"M21-GAP-03226"},"M21-GAP-03226":{"line":6481,"offset":1162032,"length":180,"previous":"M21-GAP-03225","next":"M21-GAP-03227"},"M21-GAP-03227":{"line":6482,"offset":1162212,"length":180,"previous":"M21-GAP-03226","next":"M21-GAP-03228"},"M21-GAP-03228":{"line":6483,"offset":1162392,"length":180,"previous":"M21-GAP-03227","next":"M21-GAP-03229"},"M21-GAP-03229":{"line":6484,"offset":1162572,"length":180,"previous":"M21-GAP-03228","next":"M21-GAP-03230"},"M21-GAP-03230":{"line":6485,"offset":1162752,"length":180,"previous":"M21-GAP-03229","next":"M21-GAP-03231"},"M21-GAP-03231":{"line":6486,"offset":1162932,"length":180,"previous":"M21-GAP-03230","next":"M21-GAP-03232"},"M21-GAP-03232":{"line":6487,"offset":1163112,"length":180,"previous":"M21-GAP-03231","next":"M21-GAP-03233"},"M21-GAP-03233":{"line":6488,"offset":1163292,"length":180,"previous":"M21-GAP-03232","next":"M21-GAP-03234"},"M21-GAP-03234":{"line":6489,"offset":1163472,"length":180,"previous":"M21-GAP-03233","next":"M21-GAP-03235"},"M21-GAP-03235":{"line":6490,"offset":1163652,"length":179,"previous":"M21-GAP-03234","next":"M21-GAP-03236"},"M21-GAP-03236":{"line":6491,"offset":1163831,"length":180,"previous":"M21-GAP-03235","next":"M21-GAP-03237"},"M21-GAP-03237":{"line":6492,"offset":1164011,"length":180,"previous":"M21-GAP-03236","next":"M21-GAP-03238"},"M21-GAP-03238":{"line":6493,"offset":1164191,"length":180,"previous":"M21-GAP-03237","next":"M21-GAP-03239"},"M21-GAP-03239":{"line":6494,"offset":1164371,"length":180,"previous":"M21-GAP-03238","next":"M21-GAP-03240"},"M21-GAP-03240":{"line":6495,"offset":1164551,"length":180,"previous":"M21-GAP-03239","next":"M21-GAP-03241"},"M21-GAP-03241":{"line":6496,"offset":1164731,"length":179,"previous":"M21-GAP-03240","next":"M21-GAP-03242"},"M21-GAP-03242":{"line":6497,"offset":1164910,"length":179,"previous":"M21-GAP-03241","next":"M21-GAP-03243"},"M21-GAP-03243":{"line":6498,"offset":1165089,"length":179,"previous":"M21-GAP-03242","next":"M21-GAP-03244"},"M21-GAP-03244":{"line":6499,"offset":1165268,"length":179,"previous":"M21-GAP-03243","next":"M21-GAP-03245"},"M21-GAP-03245":{"line":6500,"offset":1165447,"length":179,"previous":"M21-GAP-03244","next":"M21-GAP-03246"},"M21-GAP-03246":{"line":6501,"offset":1165626,"length":179,"previous":"M21-GAP-03245","next":"M21-GAP-03247"},"M21-GAP-03247":{"line":6502,"offset":1165805,"length":179,"previous":"M21-GAP-03246","next":"M21-GAP-03248"},"M21-GAP-03248":{"line":6503,"offset":1165984,"length":173,"previous":"M21-GAP-03247","next":"M21-GAP-03249"},"M21-GAP-03249":{"line":6504,"offset":1166157,"length":173,"previous":"M21-GAP-03248","next":"M21-GAP-03250"},"M21-GAP-03250":{"line":6505,"offset":1166330,"length":174,"previous":"M21-GAP-03249","next":"M21-GAP-03251"},"M21-GAP-03251":{"line":6506,"offset":1166504,"length":174,"previous":"M21-GAP-03250","next":"M21-GAP-03252"},"M21-GAP-03252":{"line":6507,"offset":1166678,"length":174,"previous":"M21-GAP-03251","next":"M21-GAP-03253"},"M21-GAP-03253":{"line":6508,"offset":1166852,"length":174,"previous":"M21-GAP-03252","next":"M21-GAP-03254"},"M21-GAP-03254":{"line":6509,"offset":1167026,"length":174,"previous":"M21-GAP-03253","next":"M21-GAP-03255"},"M21-GAP-03255":{"line":6510,"offset":1167200,"length":174,"previous":"M21-GAP-03254","next":"M21-GAP-03256"},"M21-GAP-03256":{"line":6511,"offset":1167374,"length":174,"previous":"M21-GAP-03255","next":"M21-GAP-03257"},"M21-GAP-03257":{"line":6512,"offset":1167548,"length":174,"previous":"M21-GAP-03256","next":"M21-GAP-03258"},"M21-GAP-03258":{"line":6513,"offset":1167722,"length":174,"previous":"M21-GAP-03257","next":"M21-GAP-03259"},"M21-GAP-03259":{"line":6514,"offset":1167896,"length":174,"previous":"M21-GAP-03258","next":"M21-GAP-03260"},"M21-GAP-03260":{"line":6515,"offset":1168070,"length":173,"previous":"M21-GAP-03259","next":"M21-GAP-03261"},"M21-GAP-03261":{"line":6516,"offset":1168243,"length":174,"previous":"M21-GAP-03260","next":"M21-GAP-03262"},"M21-GAP-03262":{"line":6517,"offset":1168417,"length":174,"previous":"M21-GAP-03261","next":"M21-GAP-03263"},"M21-GAP-03263":{"line":6518,"offset":1168591,"length":174,"previous":"M21-GAP-03262","next":"M21-GAP-03264"},"M21-GAP-03264":{"line":6519,"offset":1168765,"length":174,"previous":"M21-GAP-03263","next":"M21-GAP-03265"},"M21-GAP-03265":{"line":6520,"offset":1168939,"length":174,"previous":"M21-GAP-03264","next":"M21-GAP-03266"},"M21-GAP-03266":{"line":6521,"offset":1169113,"length":174,"previous":"M21-GAP-03265","next":"M21-GAP-03267"},"M21-GAP-03267":{"line":6522,"offset":1169287,"length":174,"previous":"M21-GAP-03266","next":"M21-GAP-03268"},"M21-GAP-03268":{"line":6523,"offset":1169461,"length":174,"previous":"M21-GAP-03267","next":"M21-GAP-03269"},"M21-GAP-03269":{"line":6524,"offset":1169635,"length":174,"previous":"M21-GAP-03268","next":"M21-GAP-03270"},"M21-GAP-03270":{"line":6525,"offset":1169809,"length":174,"previous":"M21-GAP-03269","next":"M21-GAP-03271"},"M21-GAP-03271":{"line":6526,"offset":1169983,"length":173,"previous":"M21-GAP-03270","next":"M21-GAP-03272"},"M21-GAP-03272":{"line":6527,"offset":1170156,"length":174,"previous":"M21-GAP-03271","next":"M21-GAP-03273"},"M21-GAP-03273":{"line":6528,"offset":1170330,"length":174,"previous":"M21-GAP-03272","next":"M21-GAP-03274"},"M21-GAP-03274":{"line":6529,"offset":1170504,"length":174,"previous":"M21-GAP-03273","next":"M21-GAP-03275"},"M21-GAP-03275":{"line":6530,"offset":1170678,"length":173,"previous":"M21-GAP-03274","next":"M21-GAP-03276"},"M21-GAP-03276":{"line":6531,"offset":1170851,"length":173,"previous":"M21-GAP-03275","next":"M21-GAP-03277"},"M21-GAP-03277":{"line":6532,"offset":1171024,"length":173,"previous":"M21-GAP-03276","next":"M21-GAP-03278"},"M21-GAP-03278":{"line":6533,"offset":1171197,"length":173,"previous":"M21-GAP-03277","next":"M21-GAP-03279"},"M21-GAP-03279":{"line":6534,"offset":1171370,"length":173,"previous":"M21-GAP-03278","next":"M21-GAP-03280"},"M21-GAP-03280":{"line":6535,"offset":1171543,"length":173,"previous":"M21-GAP-03279","next":"M21-GAP-03281"},"M21-GAP-03281":{"line":6536,"offset":1171716,"length":177,"previous":"M21-GAP-03280","next":"M21-GAP-03282"},"M21-GAP-03282":{"line":6537,"offset":1171893,"length":180,"previous":"M21-GAP-03281","next":"M21-GAP-03283"},"M21-GAP-03283":{"line":6538,"offset":1172073,"length":187,"previous":"M21-GAP-03282","next":"M21-GAP-03284"},"M21-GAP-03284":{"line":6539,"offset":1172260,"length":182,"previous":"M21-GAP-03283","next":"M21-GAP-03285"},"M21-GAP-03285":{"line":6540,"offset":1172442,"length":202,"previous":"M21-GAP-03284","next":"M21-GAP-03286"},"M21-GAP-03286":{"line":6541,"offset":1172644,"length":204,"previous":"M21-GAP-03285","next":"M21-GAP-03287"},"M21-GAP-03287":{"line":6542,"offset":1172848,"length":208,"previous":"M21-GAP-03286","next":"M21-GAP-03288"},"M21-GAP-03288":{"line":6543,"offset":1173056,"length":198,"previous":"M21-GAP-03287","next":"M21-GAP-03289"},"M21-GAP-03289":{"line":6544,"offset":1173254,"length":195,"previous":"M21-GAP-03288","next":"M21-GAP-03290"},"M21-GAP-03290":{"line":6545,"offset":1173449,"length":197,"previous":"M21-GAP-03289","next":"M21-GAP-03291"},"M21-GAP-03291":{"line":6546,"offset":1173646,"length":192,"previous":"M21-GAP-03290","next":"M21-GAP-03292"},"M21-GAP-03292":{"line":6547,"offset":1173838,"length":205,"previous":"M21-GAP-03291","next":"M21-GAP-03293"},"M21-GAP-03293":{"line":6548,"offset":1174043,"length":195,"previous":"M21-GAP-03292","next":"M21-GAP-03294"},"M21-GAP-03294":{"line":6549,"offset":1174238,"length":194,"previous":"M21-GAP-03293","next":"M21-GAP-03295"},"M21-GAP-03295":{"line":6550,"offset":1174432,"length":197,"previous":"M21-GAP-03294","next":"M21-GAP-03296"},"M21-GAP-03296":{"line":6551,"offset":1174629,"length":192,"previous":"M21-GAP-03295","next":"M21-GAP-03297"},"M21-GAP-03297":{"line":6552,"offset":1174821,"length":193,"previous":"M21-GAP-03296","next":"M21-GAP-03298"},"M21-GAP-03298":{"line":6553,"offset":1175014,"length":192,"previous":"M21-GAP-03297","next":"M21-GAP-03299"},"M21-GAP-03299":{"line":6554,"offset":1175206,"length":204,"previous":"M21-GAP-03298","next":"M21-GAP-03300"},"M21-GAP-03300":{"line":6555,"offset":1175410,"length":207,"previous":"M21-GAP-03299","next":"M21-GAP-03301"},"M21-GAP-03301":{"line":6556,"offset":1175617,"length":199,"previous":"M21-GAP-03300","next":"M21-GAP-03302"},"M21-GAP-03302":{"line":6557,"offset":1175816,"length":192,"previous":"M21-GAP-03301","next":"M21-GAP-03303"},"M21-GAP-03303":{"line":6558,"offset":1176008,"length":193,"previous":"M21-GAP-03302","next":"M21-GAP-03304"},"M21-GAP-03304":{"line":6559,"offset":1176201,"length":197,"previous":"M21-GAP-03303","next":"M21-GAP-03305"},"M21-GAP-03305":{"line":6560,"offset":1176398,"length":208,"previous":"M21-GAP-03304","next":"M21-GAP-03306"},"M21-GAP-03306":{"line":6561,"offset":1176606,"length":205,"previous":"M21-GAP-03305","next":"M21-GAP-03307"},"M21-GAP-03307":{"line":6562,"offset":1176811,"length":203,"previous":"M21-GAP-03306","next":"M21-GAP-03308"},"M21-GAP-03308":{"line":6563,"offset":1177014,"length":201,"previous":"M21-GAP-03307","next":"M21-GAP-03309"},"M21-GAP-03309":{"line":6564,"offset":1177215,"length":204,"previous":"M21-GAP-03308","next":"M21-GAP-03310"},"M21-GAP-03310":{"line":6565,"offset":1177419,"length":198,"previous":"M21-GAP-03309","next":"M21-GAP-03311"},"M21-GAP-03311":{"line":6566,"offset":1177617,"length":192,"previous":"M21-GAP-03310","next":"M21-GAP-03312"},"M21-GAP-03312":{"line":6567,"offset":1177809,"length":195,"previous":"M21-GAP-03311","next":"M21-GAP-03313"},"M21-GAP-03313":{"line":6568,"offset":1178004,"length":207,"previous":"M21-GAP-03312","next":"M21-GAP-03314"},"M21-GAP-03314":{"line":6569,"offset":1178211,"length":197,"previous":"M21-GAP-03313","next":"M21-GAP-03315"},"M21-GAP-03315":{"line":6570,"offset":1178408,"length":196,"previous":"M21-GAP-03314","next":"M21-GAP-03316"},"M21-GAP-03316":{"line":6571,"offset":1178604,"length":196,"previous":"M21-GAP-03315","next":"M21-GAP-03317"},"M21-GAP-03317":{"line":6572,"offset":1178800,"length":195,"previous":"M21-GAP-03316","next":"M21-GAP-03318"},"M21-GAP-03318":{"line":6573,"offset":1178995,"length":197,"previous":"M21-GAP-03317","next":"M21-GAP-03319"},"M21-GAP-03319":{"line":6574,"offset":1179192,"length":200,"previous":"M21-GAP-03318","next":"M21-GAP-03320"},"M21-GAP-03320":{"line":6575,"offset":1179392,"length":193,"previous":"M21-GAP-03319","next":"M21-GAP-03321"},"M21-GAP-03321":{"line":6576,"offset":1179585,"length":202,"previous":"M21-GAP-03320","next":"M21-GAP-03322"},"M21-GAP-03322":{"line":6577,"offset":1179787,"length":191,"previous":"M21-GAP-03321","next":"M21-GAP-03323"},"M21-GAP-03323":{"line":6578,"offset":1179978,"length":196,"previous":"M21-GAP-03322","next":"M21-GAP-03324"},"M21-GAP-03324":{"line":6579,"offset":1180174,"length":199,"previous":"M21-GAP-03323","next":"M21-GAP-03325"},"M21-GAP-03325":{"line":6580,"offset":1180373,"length":198,"previous":"M21-GAP-03324","next":"M21-GAP-03326"},"M21-GAP-03326":{"line":6581,"offset":1180571,"length":183,"previous":"M21-GAP-03325","next":"M21-GAP-03327"},"M21-GAP-03327":{"line":6582,"offset":1180754,"length":180,"previous":"M21-GAP-03326","next":"M21-GAP-03328"},"M21-GAP-03328":{"line":6583,"offset":1180934,"length":197,"previous":"M21-GAP-03327","next":"M21-GAP-03329"},"M21-GAP-03329":{"line":6584,"offset":1181131,"length":200,"previous":"M21-GAP-03328","next":"M21-GAP-03330"},"M21-GAP-03330":{"line":6585,"offset":1181331,"length":200,"previous":"M21-GAP-03329","next":"M21-GAP-03331"},"M21-GAP-03331":{"line":6586,"offset":1181531,"length":203,"previous":"M21-GAP-03330","next":"M21-GAP-03332"},"M21-GAP-03332":{"line":6587,"offset":1181734,"length":202,"previous":"M21-GAP-03331","next":"M21-GAP-03333"},"M21-GAP-03333":{"line":6588,"offset":1181936,"length":207,"previous":"M21-GAP-03332","next":"M21-GAP-03334"},"M21-GAP-03334":{"line":6589,"offset":1182143,"length":208,"previous":"M21-GAP-03333","next":"M21-GAP-03335"},"M21-GAP-03335":{"line":6590,"offset":1182351,"length":201,"previous":"M21-GAP-03334","next":"M21-GAP-03336"},"M21-GAP-03336":{"line":6591,"offset":1182552,"length":205,"previous":"M21-GAP-03335","next":"M21-GAP-03337"},"M21-GAP-03337":{"line":6592,"offset":1182757,"length":201,"previous":"M21-GAP-03336","next":"M21-GAP-03338"},"M21-GAP-03338":{"line":6593,"offset":1182958,"length":198,"previous":"M21-GAP-03337","next":"M21-GAP-03339"},"M21-GAP-03339":{"line":6594,"offset":1183156,"length":209,"previous":"M21-GAP-03338","next":"M21-GAP-03340"},"M21-GAP-03340":{"line":6595,"offset":1183365,"length":203,"previous":"M21-GAP-03339","next":"M21-GAP-03341"},"M21-GAP-03341":{"line":6596,"offset":1183568,"length":180,"previous":"M21-GAP-03340","next":"M21-GAP-03342"},"M21-GAP-03342":{"line":6597,"offset":1183748,"length":181,"previous":"M21-GAP-03341","next":"M21-GAP-03343"},"M21-GAP-03343":{"line":6598,"offset":1183929,"length":182,"previous":"M21-GAP-03342","next":"M21-GAP-03344"},"M21-GAP-03344":{"line":6599,"offset":1184111,"length":181,"previous":"M21-GAP-03343","next":"M21-GAP-03345"},"M21-GAP-03345":{"line":6600,"offset":1184292,"length":196,"previous":"M21-GAP-03344","next":"M21-GAP-03346"},"M21-GAP-03346":{"line":6601,"offset":1184488,"length":192,"previous":"M21-GAP-03345","next":"M21-GAP-03347"},"M21-GAP-03347":{"line":6602,"offset":1184680,"length":192,"previous":"M21-GAP-03346","next":"M21-GAP-03348"},"M21-GAP-03348":{"line":6603,"offset":1184872,"length":192,"previous":"M21-GAP-03347","next":"M21-GAP-03349"},"M21-GAP-03349":{"line":6604,"offset":1185064,"length":196,"previous":"M21-GAP-03348","next":"M21-GAP-03350"},"M21-GAP-03350":{"line":6605,"offset":1185260,"length":196,"previous":"M21-GAP-03349","next":"M21-GAP-03351"},"M21-GAP-03351":{"line":6606,"offset":1185456,"length":197,"previous":"M21-GAP-03350","next":"M21-GAP-03352"},"M21-GAP-03352":{"line":6607,"offset":1185653,"length":198,"previous":"M21-GAP-03351","next":"M21-GAP-03353"},"M21-GAP-03353":{"line":6608,"offset":1185851,"length":194,"previous":"M21-GAP-03352","next":"M21-GAP-03354"},"M21-GAP-03354":{"line":6609,"offset":1186045,"length":194,"previous":"M21-GAP-03353","next":"M21-GAP-03355"},"M21-GAP-03355":{"line":6610,"offset":1186239,"length":194,"previous":"M21-GAP-03354","next":"M21-GAP-03356"},"M21-GAP-03356":{"line":6611,"offset":1186433,"length":197,"previous":"M21-GAP-03355","next":"M21-GAP-03357"},"M21-GAP-03357":{"line":6612,"offset":1186630,"length":193,"previous":"M21-GAP-03356","next":"M21-GAP-03358"},"M21-GAP-03358":{"line":6613,"offset":1186823,"length":193,"previous":"M21-GAP-03357","next":"M21-GAP-03359"},"M21-GAP-03359":{"line":6614,"offset":1187016,"length":196,"previous":"M21-GAP-03358","next":"M21-GAP-03360"},"M21-GAP-03360":{"line":6615,"offset":1187212,"length":193,"previous":"M21-GAP-03359","next":"M21-GAP-03361"},"M21-GAP-03361":{"line":6616,"offset":1187405,"length":197,"previous":"M21-GAP-03360","next":"M21-GAP-03362"},"M21-GAP-03362":{"line":6617,"offset":1187602,"length":195,"previous":"M21-GAP-03361","next":"M21-GAP-03363"},"M21-GAP-03363":{"line":6618,"offset":1187797,"length":201,"previous":"M21-GAP-03362","next":"M21-GAP-03364"},"M21-GAP-03364":{"line":6619,"offset":1187998,"length":197,"previous":"M21-GAP-03363","next":"M21-GAP-03365"},"M21-GAP-03365":{"line":6620,"offset":1188195,"length":197,"previous":"M21-GAP-03364","next":"M21-GAP-03366"},"M21-GAP-03366":{"line":6621,"offset":1188392,"length":197,"previous":"M21-GAP-03365","next":"M21-GAP-03367"},"M21-GAP-03367":{"line":6622,"offset":1188589,"length":197,"previous":"M21-GAP-03366","next":"M21-GAP-03368"},"M21-GAP-03368":{"line":6623,"offset":1188786,"length":186,"previous":"M21-GAP-03367","next":"M21-GAP-03369"},"M21-GAP-03369":{"line":6624,"offset":1188972,"length":200,"previous":"M21-GAP-03368","next":"M21-GAP-03370"},"M21-GAP-03370":{"line":6625,"offset":1189172,"length":189,"previous":"M21-GAP-03369","next":"M21-GAP-03371"},"M21-GAP-03371":{"line":6626,"offset":1189361,"length":199,"previous":"M21-GAP-03370","next":"M21-GAP-03372"},"M21-GAP-03372":{"line":6627,"offset":1189560,"length":188,"previous":"M21-GAP-03371","next":"M21-GAP-03373"},"M21-GAP-03373":{"line":6628,"offset":1189748,"length":181,"previous":"M21-GAP-03372","next":"M21-GAP-03374"},"M21-GAP-03374":{"line":6629,"offset":1189929,"length":185,"previous":"M21-GAP-03373","next":"M21-GAP-03375"},"M21-GAP-03375":{"line":6630,"offset":1190114,"length":192,"previous":"M21-GAP-03374","next":"M21-GAP-03376"},"M21-GAP-03376":{"line":6631,"offset":1190306,"length":181,"previous":"M21-GAP-03375","next":"M21-GAP-03377"},"M21-GAP-03377":{"line":6632,"offset":1190487,"length":169,"previous":"M21-GAP-03376","next":"M21-GAP-03378"},"M21-GAP-03378":{"line":6633,"offset":1190656,"length":178,"previous":"M21-GAP-03377","next":"M21-GAP-03379"},"M21-GAP-03379":{"line":6634,"offset":1190834,"length":169,"previous":"M21-GAP-03378","next":"M21-GAP-03380"},"M21-GAP-03380":{"line":6635,"offset":1191003,"length":168,"previous":"M21-GAP-03379","next":"M21-GAP-03381"},"M21-GAP-03381":{"line":6636,"offset":1191171,"length":175,"previous":"M21-GAP-03380","next":"M21-GAP-03382"},"M21-GAP-03382":{"line":6637,"offset":1191346,"length":187,"previous":"M21-GAP-03381","next":"M21-GAP-03383"},"M21-GAP-03383":{"line":6638,"offset":1191533,"length":177,"previous":"M21-GAP-03382","next":"M21-GAP-03384"},"M21-GAP-03384":{"line":6639,"offset":1191710,"length":183,"previous":"M21-GAP-03383","next":"M21-GAP-03385"},"M21-GAP-03385":{"line":6640,"offset":1191893,"length":182,"previous":"M21-GAP-03384","next":"M21-GAP-03386"},"M21-GAP-03386":{"line":6641,"offset":1192075,"length":170,"previous":"M21-GAP-03385","next":"M21-GAP-03387"},"M21-GAP-03387":{"line":6642,"offset":1192245,"length":169,"previous":"M21-GAP-03386","next":"M21-GAP-03388"},"M21-GAP-03388":{"line":6643,"offset":1192414,"length":179,"previous":"M21-GAP-03387","next":"M21-GAP-03389"},"M21-GAP-03389":{"line":6644,"offset":1192593,"length":165,"previous":"M21-GAP-03388","next":"M21-GAP-03390"},"M21-GAP-03390":{"line":6645,"offset":1192758,"length":166,"previous":"M21-GAP-03389","next":"M21-GAP-03391"},"M21-GAP-03391":{"line":6646,"offset":1192924,"length":184,"previous":"M21-GAP-03390","next":"M21-GAP-03392"},"M21-GAP-03392":{"line":6647,"offset":1193108,"length":188,"previous":"M21-GAP-03391","next":"M21-GAP-03393"},"M21-GAP-03393":{"line":6648,"offset":1193296,"length":180,"previous":"M21-GAP-03392","next":"M21-GAP-03394"},"M21-GAP-03394":{"line":6649,"offset":1193476,"length":198,"previous":"M21-GAP-03393","next":"M21-GAP-03395"},"M21-GAP-03395":{"line":6650,"offset":1193674,"length":180,"previous":"M21-GAP-03394","next":"M21-GAP-03396"},"M21-GAP-03396":{"line":6651,"offset":1193854,"length":187,"previous":"M21-GAP-03395","next":"M21-GAP-03397"},"M21-GAP-03397":{"line":6652,"offset":1194041,"length":184,"previous":"M21-GAP-03396","next":"M21-GAP-03398"},"M21-GAP-03398":{"line":6653,"offset":1194225,"length":179,"previous":"M21-GAP-03397","next":"M21-GAP-03399"},"M21-GAP-03399":{"line":6654,"offset":1194404,"length":179,"previous":"M21-GAP-03398","next":"M21-GAP-03400"},"M21-GAP-03400":{"line":6655,"offset":1194583,"length":164,"previous":"M21-GAP-03399","next":"M21-GAP-03401"},"M21-GAP-03401":{"line":6656,"offset":1194747,"length":166,"previous":"M21-GAP-03400","next":"M21-GAP-03402"},"M21-GAP-03402":{"line":6657,"offset":1194913,"length":184,"previous":"M21-GAP-03401","next":"M21-GAP-03403"},"M21-GAP-03403":{"line":6658,"offset":1195097,"length":178,"previous":"M21-GAP-03402","next":"M21-GAP-03404"},"M21-GAP-03404":{"line":6659,"offset":1195275,"length":184,"previous":"M21-GAP-03403","next":"M21-GAP-03405"},"M21-GAP-03405":{"line":6660,"offset":1195459,"length":180,"previous":"M21-GAP-03404","next":"M21-GAP-03406"},"M21-GAP-03406":{"line":6661,"offset":1195639,"length":189,"previous":"M21-GAP-03405","next":"M21-GAP-03407"},"M21-GAP-03407":{"line":6662,"offset":1195828,"length":173,"previous":"M21-GAP-03406","next":"M21-GAP-03408"},"M21-GAP-03408":{"line":6663,"offset":1196001,"length":189,"previous":"M21-GAP-03407","next":"M21-GAP-03409"},"M21-GAP-03409":{"line":6664,"offset":1196190,"length":187,"previous":"M21-GAP-03408","next":"M21-GAP-03410"},"M21-GAP-03410":{"line":6665,"offset":1196377,"length":190,"previous":"M21-GAP-03409","next":"M21-GAP-03411"},"M21-GAP-03411":{"line":6666,"offset":1196567,"length":182,"previous":"M21-GAP-03410","next":"M21-GAP-03412"},"M21-GAP-03412":{"line":6667,"offset":1196749,"length":171,"previous":"M21-GAP-03411","next":"M21-GAP-03413"},"M21-GAP-03413":{"line":6668,"offset":1196920,"length":173,"previous":"M21-GAP-03412","next":"M21-GAP-03414"},"M21-GAP-03414":{"line":6669,"offset":1197093,"length":176,"previous":"M21-GAP-03413","next":"M21-GAP-03415"},"M21-GAP-03415":{"line":6670,"offset":1197269,"length":181,"previous":"M21-GAP-03414","next":"M21-GAP-03416"},"M21-GAP-03416":{"line":6671,"offset":1197450,"length":179,"previous":"M21-GAP-03415","next":"M21-GAP-03417"},"M21-GAP-03417":{"line":6672,"offset":1197629,"length":187,"previous":"M21-GAP-03416","next":"M21-GAP-03418"},"M21-GAP-03418":{"line":6673,"offset":1197816,"length":179,"previous":"M21-GAP-03417","next":"M21-GAP-03419"},"M21-GAP-03419":{"line":6674,"offset":1197995,"length":186,"previous":"M21-GAP-03418","next":"M21-GAP-03420"},"M21-GAP-03420":{"line":6675,"offset":1198181,"length":183,"previous":"M21-GAP-03419","next":"M21-GAP-03421"},"M21-GAP-03421":{"line":6676,"offset":1198364,"length":183,"previous":"M21-GAP-03420","next":"M21-GAP-03422"},"M21-GAP-03422":{"line":6677,"offset":1198547,"length":183,"previous":"M21-GAP-03421","next":"M21-GAP-03423"},"M21-GAP-03423":{"line":6678,"offset":1198730,"length":185,"previous":"M21-GAP-03422","next":"M21-GAP-03424"},"M21-GAP-03424":{"line":6679,"offset":1198915,"length":183,"previous":"M21-GAP-03423","next":"M21-GAP-03425"},"M21-GAP-03425":{"line":6680,"offset":1199098,"length":186,"previous":"M21-GAP-03424","next":"M21-GAP-03426"},"M21-GAP-03426":{"line":6681,"offset":1199284,"length":186,"previous":"M21-GAP-03425","next":"M21-GAP-03427"},"M21-GAP-03427":{"line":6682,"offset":1199470,"length":173,"previous":"M21-GAP-03426","next":"M21-GAP-03428"},"M21-GAP-03428":{"line":6683,"offset":1199643,"length":195,"previous":"M21-GAP-03427","next":"M21-GAP-03429"},"M21-GAP-03429":{"line":6684,"offset":1199838,"length":198,"previous":"M21-GAP-03428","next":"M21-GAP-03430"},"M21-GAP-03430":{"line":6685,"offset":1200036,"length":198,"previous":"M21-GAP-03429","next":"M21-GAP-03431"},"M21-GAP-03431":{"line":6686,"offset":1200234,"length":196,"previous":"M21-GAP-03430","next":"M21-GAP-03432"},"M21-GAP-03432":{"line":6687,"offset":1200430,"length":198,"previous":"M21-GAP-03431","next":"M21-GAP-03433"},"M21-GAP-03433":{"line":6688,"offset":1200628,"length":197,"previous":"M21-GAP-03432","next":"M21-GAP-03434"},"M21-GAP-03434":{"line":6689,"offset":1200825,"length":213,"previous":"M21-GAP-03433","next":"M21-GAP-03435"},"M21-GAP-03435":{"line":6690,"offset":1201038,"length":202,"previous":"M21-GAP-03434","next":"M21-GAP-03436"},"M21-GAP-03436":{"line":6691,"offset":1201240,"length":216,"previous":"M21-GAP-03435","next":"M21-GAP-03437"},"M21-GAP-03437":{"line":6692,"offset":1201456,"length":205,"previous":"M21-GAP-03436","next":"M21-GAP-03438"},"M21-GAP-03438":{"line":6693,"offset":1201661,"length":215,"previous":"M21-GAP-03437","next":"M21-GAP-03439"},"M21-GAP-03439":{"line":6694,"offset":1201876,"length":204,"previous":"M21-GAP-03438","next":"M21-GAP-03440"},"M21-GAP-03440":{"line":6695,"offset":1202080,"length":201,"previous":"M21-GAP-03439","next":"M21-GAP-03441"},"M21-GAP-03441":{"line":6696,"offset":1202281,"length":208,"previous":"M21-GAP-03440","next":"M21-GAP-03442"},"M21-GAP-03442":{"line":6697,"offset":1202489,"length":197,"previous":"M21-GAP-03441","next":"M21-GAP-03443"},"M21-GAP-03443":{"line":6698,"offset":1202686,"length":192,"previous":"M21-GAP-03442","next":"M21-GAP-03444"},"M21-GAP-03444":{"line":6699,"offset":1202878,"length":196,"previous":"M21-GAP-03443","next":"M21-GAP-03445"},"M21-GAP-03445":{"line":6700,"offset":1203074,"length":194,"previous":"M21-GAP-03444","next":"M21-GAP-03446"},"M21-GAP-03446":{"line":6701,"offset":1203268,"length":194,"previous":"M21-GAP-03445","next":"M21-GAP-03447"},"M21-GAP-03447":{"line":6702,"offset":1203462,"length":195,"previous":"M21-GAP-03446","next":"M21-GAP-03448"},"M21-GAP-03448":{"line":6703,"offset":1203657,"length":195,"previous":"M21-GAP-03447","next":"M21-GAP-03449"},"M21-GAP-03449":{"line":6704,"offset":1203852,"length":200,"previous":"M21-GAP-03448","next":"M21-GAP-03450"},"M21-GAP-03450":{"line":6705,"offset":1204052,"length":196,"previous":"M21-GAP-03449","next":"M21-GAP-03451"},"M21-GAP-03451":{"line":6706,"offset":1204248,"length":195,"previous":"M21-GAP-03450","next":"M21-GAP-03452"},"M21-GAP-03452":{"line":6707,"offset":1204443,"length":211,"previous":"M21-GAP-03451","next":"M21-GAP-03453"},"M21-GAP-03453":{"line":6708,"offset":1204654,"length":200,"previous":"M21-GAP-03452","next":"M21-GAP-03454"},"M21-GAP-03454":{"line":6709,"offset":1204854,"length":214,"previous":"M21-GAP-03453","next":"M21-GAP-03455"},"M21-GAP-03455":{"line":6710,"offset":1205068,"length":203,"previous":"M21-GAP-03454","next":"M21-GAP-03456"},"M21-GAP-03456":{"line":6711,"offset":1205271,"length":213,"previous":"M21-GAP-03455","next":"M21-GAP-03457"},"M21-GAP-03457":{"line":6712,"offset":1205484,"length":202,"previous":"M21-GAP-03456","next":"M21-GAP-03458"},"M21-GAP-03458":{"line":6713,"offset":1205686,"length":206,"previous":"M21-GAP-03457","next":"M21-GAP-03459"},"M21-GAP-03459":{"line":6714,"offset":1205892,"length":195,"previous":"M21-GAP-03458","next":"M21-GAP-03460"},"M21-GAP-03460":{"line":6715,"offset":1206087,"length":180,"previous":"M21-GAP-03459","next":"M21-GAP-03461"},"M21-GAP-03461":{"line":6716,"offset":1206267,"length":171,"previous":"M21-GAP-03460","next":"M21-GAP-03462"},"M21-GAP-03462":{"line":6717,"offset":1206438,"length":172,"previous":"M21-GAP-03461","next":"M21-GAP-03463"},"M21-GAP-03463":{"line":6718,"offset":1206610,"length":163,"previous":"M21-GAP-03462","next":"M21-GAP-03464"},"M21-GAP-03464":{"line":6719,"offset":1206773,"length":186,"previous":"M21-GAP-03463","next":"M21-GAP-03465"},"M21-GAP-03465":{"line":6720,"offset":1206959,"length":180,"previous":"M21-GAP-03464","next":"M21-GAP-03466"},"M21-GAP-03466":{"line":6721,"offset":1207139,"length":167,"previous":"M21-GAP-03465","next":"M21-GAP-03467"},"M21-GAP-03467":{"line":6722,"offset":1207306,"length":167,"previous":"M21-GAP-03466","next":"M21-GAP-03468"},"M21-GAP-03468":{"line":6723,"offset":1207473,"length":172,"previous":"M21-GAP-03467","next":"M21-GAP-03469"},"M21-GAP-03469":{"line":6724,"offset":1207645,"length":181,"previous":"M21-GAP-03468","next":"M21-GAP-03470"},"M21-GAP-03470":{"line":6725,"offset":1207826,"length":164,"previous":"M21-GAP-03469","next":"M21-GAP-03471"},"M21-GAP-03471":{"line":6726,"offset":1207990,"length":168,"previous":"M21-GAP-03470","next":"M21-GAP-03472"},"M21-GAP-03472":{"line":6727,"offset":1208158,"length":175,"previous":"M21-GAP-03471","next":"M21-GAP-03473"},"M21-GAP-03473":{"line":6728,"offset":1208333,"length":176,"previous":"M21-GAP-03472","next":"M21-GAP-03474"},"M21-GAP-03474":{"line":6729,"offset":1208509,"length":175,"previous":"M21-GAP-03473","next":"M21-GAP-03475"},"M21-GAP-03475":{"line":6730,"offset":1208684,"length":177,"previous":"M21-GAP-03474","next":"M21-GAP-03476"},"M21-GAP-03476":{"line":6731,"offset":1208861,"length":178,"previous":"M21-GAP-03475","next":"M21-GAP-03477"},"M21-GAP-03477":{"line":6732,"offset":1209039,"length":179,"previous":"M21-GAP-03476","next":"M21-GAP-03478"},"M21-GAP-03478":{"line":6733,"offset":1209218,"length":181,"previous":"M21-GAP-03477","next":"M21-GAP-03479"},"M21-GAP-03479":{"line":6734,"offset":1209399,"length":188,"previous":"M21-GAP-03478","next":"M21-GAP-03480"},"M21-GAP-03480":{"line":6735,"offset":1209587,"length":186,"previous":"M21-GAP-03479","next":"M21-GAP-03481"},"M21-GAP-03481":{"line":6736,"offset":1209773,"length":187,"previous":"M21-GAP-03480","next":"M21-GAP-03482"},"M21-GAP-03482":{"line":6737,"offset":1209960,"length":198,"previous":"M21-GAP-03481","next":"M21-GAP-03483"},"M21-GAP-03483":{"line":6738,"offset":1210158,"length":187,"previous":"M21-GAP-03482","next":"M21-GAP-03484"},"M21-GAP-03484":{"line":6739,"offset":1210345,"length":201,"previous":"M21-GAP-03483","next":"M21-GAP-03485"},"M21-GAP-03485":{"line":6740,"offset":1210546,"length":190,"previous":"M21-GAP-03484","next":"M21-GAP-03486"},"M21-GAP-03486":{"line":6741,"offset":1210736,"length":200,"previous":"M21-GAP-03485","next":"M21-GAP-03487"},"M21-GAP-03487":{"line":6742,"offset":1210936,"length":189,"previous":"M21-GAP-03486","next":"M21-GAP-03488"},"M21-GAP-03488":{"line":6743,"offset":1211125,"length":193,"previous":"M21-GAP-03487","next":"M21-GAP-03489"},"M21-GAP-03489":{"line":6744,"offset":1211318,"length":182,"previous":"M21-GAP-03488","next":"M21-GAP-03490"},"M21-GAP-03490":{"line":6745,"offset":1211500,"length":171,"previous":"M21-GAP-03489","next":"M21-GAP-03491"},"M21-GAP-03491":{"line":6746,"offset":1211671,"length":176,"previous":"M21-GAP-03490","next":"M21-GAP-03492"},"M21-GAP-03492":{"line":6747,"offset":1211847,"length":171,"previous":"M21-GAP-03491","next":"M21-GAP-03493"},"M21-GAP-03493":{"line":6748,"offset":1212018,"length":171,"previous":"M21-GAP-03492","next":"M21-GAP-03494"},"M21-GAP-03494":{"line":6749,"offset":1212189,"length":201,"previous":"M21-GAP-03493","next":"M21-GAP-03495"},"M21-GAP-03495":{"line":6750,"offset":1212390,"length":178,"previous":"M21-GAP-03494","next":"M21-GAP-03496"},"M21-GAP-03496":{"line":6751,"offset":1212568,"length":199,"previous":"M21-GAP-03495","next":"M21-GAP-03497"},"M21-GAP-03497":{"line":6752,"offset":1212767,"length":168,"previous":"M21-GAP-03496","next":"M21-GAP-03498"},"M21-GAP-03498":{"line":6753,"offset":1212935,"length":178,"previous":"M21-GAP-03497","next":"M21-GAP-03499"},"M21-GAP-03499":{"line":6754,"offset":1213113,"length":171,"previous":"M21-GAP-03498","next":"M21-GAP-03500"},"M21-GAP-03500":{"line":6755,"offset":1213284,"length":164,"previous":"M21-GAP-03499","next":"M21-GAP-03501"},"M21-GAP-03501":{"line":6756,"offset":1213448,"length":177,"previous":"M21-GAP-03500","next":"M21-GAP-03502"},"M21-GAP-03502":{"line":6757,"offset":1213625,"length":177,"previous":"M21-GAP-03501","next":"M21-GAP-03503"},"M21-GAP-03503":{"line":6758,"offset":1213802,"length":190,"previous":"M21-GAP-03502","next":"M21-GAP-03504"},"M21-GAP-03504":{"line":6759,"offset":1213992,"length":188,"previous":"M21-GAP-03503","next":"M21-GAP-03505"},"M21-GAP-03505":{"line":6760,"offset":1214180,"length":190,"previous":"M21-GAP-03504","next":"M21-GAP-03506"},"M21-GAP-03506":{"line":6761,"offset":1214370,"length":190,"previous":"M21-GAP-03505","next":"M21-GAP-03507"},"M21-GAP-03507":{"line":6762,"offset":1214560,"length":189,"previous":"M21-GAP-03506","next":"M21-GAP-03508"},"M21-GAP-03508":{"line":6763,"offset":1214749,"length":205,"previous":"M21-GAP-03507","next":"M21-GAP-03509"},"M21-GAP-03509":{"line":6764,"offset":1214954,"length":194,"previous":"M21-GAP-03508","next":"M21-GAP-03510"},"M21-GAP-03510":{"line":6765,"offset":1215148,"length":208,"previous":"M21-GAP-03509","next":"M21-GAP-03511"},"M21-GAP-03511":{"line":6766,"offset":1215356,"length":197,"previous":"M21-GAP-03510","next":"M21-GAP-03512"},"M21-GAP-03512":{"line":6767,"offset":1215553,"length":207,"previous":"M21-GAP-03511","next":"M21-GAP-03513"},"M21-GAP-03513":{"line":6768,"offset":1215760,"length":196,"previous":"M21-GAP-03512","next":"M21-GAP-03514"},"M21-GAP-03514":{"line":6769,"offset":1215956,"length":200,"previous":"M21-GAP-03513","next":"M21-GAP-03515"},"M21-GAP-03515":{"line":6770,"offset":1216156,"length":189,"previous":"M21-GAP-03514","next":"M21-GAP-03516"},"M21-GAP-03516":{"line":6771,"offset":1216345,"length":177,"previous":"M21-GAP-03515","next":"M21-GAP-03517"},"M21-GAP-03517":{"line":6772,"offset":1216522,"length":184,"previous":"M21-GAP-03516","next":"M21-GAP-03518"},"M21-GAP-03518":{"line":6773,"offset":1216706,"length":180,"previous":"M21-GAP-03517","next":"M21-GAP-03519"},"M21-GAP-03519":{"line":6774,"offset":1216886,"length":179,"previous":"M21-GAP-03518","next":"M21-GAP-03520"},"M21-GAP-03520":{"line":6775,"offset":1217065,"length":174,"previous":"M21-GAP-03519","next":"M21-GAP-03521"},"M21-GAP-03521":{"line":6776,"offset":1217239,"length":166,"previous":"M21-GAP-03520","next":"M21-GAP-03522"},"M21-GAP-03522":{"line":6777,"offset":1217405,"length":173,"previous":"M21-GAP-03521","next":"M21-GAP-03523"},"M21-GAP-03523":{"line":6778,"offset":1217578,"length":179,"previous":"M21-GAP-03522","next":"M21-GAP-03524"},"M21-GAP-03524":{"line":6779,"offset":1217757,"length":166,"previous":"M21-GAP-03523","next":"M21-GAP-03525"},"M21-GAP-03525":{"line":6780,"offset":1217923,"length":188,"previous":"M21-GAP-03524","next":"M21-GAP-03526"},"M21-GAP-03526":{"line":6781,"offset":1218111,"length":191,"previous":"M21-GAP-03525","next":"M21-GAP-03527"},"M21-GAP-03527":{"line":6782,"offset":1218302,"length":207,"previous":"M21-GAP-03526","next":"M21-GAP-03528"},"M21-GAP-03528":{"line":6783,"offset":1218509,"length":196,"previous":"M21-GAP-03527","next":"M21-GAP-03529"},"M21-GAP-03529":{"line":6784,"offset":1218705,"length":210,"previous":"M21-GAP-03528","next":"M21-GAP-03530"},"M21-GAP-03530":{"line":6785,"offset":1218915,"length":199,"previous":"M21-GAP-03529","next":"M21-GAP-03531"},"M21-GAP-03531":{"line":6786,"offset":1219114,"length":209,"previous":"M21-GAP-03530","next":"M21-GAP-03532"},"M21-GAP-03532":{"line":6787,"offset":1219323,"length":198,"previous":"M21-GAP-03531","next":"M21-GAP-03533"},"M21-GAP-03533":{"line":6788,"offset":1219521,"length":190,"previous":"M21-GAP-03532","next":"M21-GAP-03534"},"M21-GAP-03534":{"line":6789,"offset":1219711,"length":179,"previous":"M21-GAP-03533","next":"M21-GAP-03535"},"M21-GAP-03535":{"line":6790,"offset":1219890,"length":170,"previous":"M21-GAP-03534","next":"M21-GAP-03536"},"M21-GAP-03536":{"line":6791,"offset":1220060,"length":185,"previous":"M21-GAP-03535","next":"M21-GAP-03537"},"M21-GAP-03537":{"line":6792,"offset":1220245,"length":178,"previous":"M21-GAP-03536","next":"M21-GAP-03538"},"M21-GAP-03538":{"line":6793,"offset":1220423,"length":178,"previous":"M21-GAP-03537","next":"M21-GAP-03539"},"M21-GAP-03539":{"line":6794,"offset":1220601,"length":170,"previous":"M21-GAP-03538","next":"M21-GAP-03540"},"M21-GAP-03540":{"line":6795,"offset":1220771,"length":170,"previous":"M21-GAP-03539","next":"M21-GAP-03541"},"M21-GAP-03541":{"line":6796,"offset":1220941,"length":176,"previous":"M21-GAP-03540","next":"M21-GAP-03542"},"M21-GAP-03542":{"line":6797,"offset":1221117,"length":191,"previous":"M21-GAP-03541","next":"M21-GAP-03543"},"M21-GAP-03543":{"line":6798,"offset":1221308,"length":179,"previous":"M21-GAP-03542","next":"M21-GAP-03544"},"M21-GAP-03544":{"line":6799,"offset":1221487,"length":169,"previous":"M21-GAP-03543","next":"M21-GAP-03545"},"M21-GAP-03545":{"line":6800,"offset":1221656,"length":174,"previous":"M21-GAP-03544","next":"M21-GAP-03546"},"M21-GAP-03546":{"line":6801,"offset":1221830,"length":172,"previous":"M21-GAP-03545","next":"M21-GAP-03547"},"M21-GAP-03547":{"line":6802,"offset":1222002,"length":191,"previous":"M21-GAP-03546","next":"M21-GAP-03548"},"M21-GAP-03548":{"line":6803,"offset":1222193,"length":179,"previous":"M21-GAP-03547","next":"M21-GAP-03549"},"M21-GAP-03549":{"line":6804,"offset":1222372,"length":166,"previous":"M21-GAP-03548","next":"M21-GAP-03550"},"M21-GAP-03550":{"line":6805,"offset":1222538,"length":178,"previous":"M21-GAP-03549","next":"M21-GAP-03551"},"M21-GAP-03551":{"line":6806,"offset":1222716,"length":176,"previous":"M21-GAP-03550","next":"M21-GAP-03552"},"M21-GAP-03552":{"line":6807,"offset":1222892,"length":181,"previous":"M21-GAP-03551","next":"M21-GAP-03553"},"M21-GAP-03553":{"line":6808,"offset":1223073,"length":177,"previous":"M21-GAP-03552","next":"M21-GAP-03554"},"M21-GAP-03554":{"line":6809,"offset":1223250,"length":182,"previous":"M21-GAP-03553","next":"M21-GAP-03555"},"M21-GAP-03555":{"line":6810,"offset":1223432,"length":179,"previous":"M21-GAP-03554","next":"M21-GAP-03556"},"M21-GAP-03556":{"line":6811,"offset":1223611,"length":208,"previous":"M21-GAP-03555","next":"M21-GAP-03557"},"M21-GAP-03557":{"line":6812,"offset":1223819,"length":177,"previous":"M21-GAP-03556","next":"M21-GAP-03558"},"M21-GAP-03558":{"line":6813,"offset":1223996,"length":177,"previous":"M21-GAP-03557","next":"M21-GAP-03559"},"M21-GAP-03559":{"line":6814,"offset":1224173,"length":172,"previous":"M21-GAP-03558","next":"M21-GAP-03560"},"M21-GAP-03560":{"line":6815,"offset":1224345,"length":166,"previous":"M21-GAP-03559","next":"M21-GAP-03561"},"M21-GAP-03561":{"line":6816,"offset":1224511,"length":158,"previous":"M21-GAP-03560","next":"M21-GAP-03562"},"M21-GAP-03562":{"line":6817,"offset":1224669,"length":165,"previous":"M21-GAP-03561","next":"M21-GAP-03563"},"M21-GAP-03563":{"line":6818,"offset":1224834,"length":155,"previous":"M21-GAP-03562","next":"M21-GAP-03564"},"M21-GAP-03564":{"line":6819,"offset":1224989,"length":154,"previous":"M21-GAP-03563","next":"M21-GAP-03565"},"M21-GAP-03565":{"line":6820,"offset":1225143,"length":153,"previous":"M21-GAP-03564","next":"M21-GAP-03566"},"M21-GAP-03566":{"line":6821,"offset":1225296,"length":153,"previous":"M21-GAP-03565","next":"M21-GAP-03567"},"M21-GAP-03567":{"line":6822,"offset":1225449,"length":150,"previous":"M21-GAP-03566","next":"M21-GAP-03568"},"M21-GAP-03568":{"line":6823,"offset":1225599,"length":161,"previous":"M21-GAP-03567","next":"M21-GAP-03569"},"M21-GAP-03569":{"line":6824,"offset":1225760,"length":154,"previous":"M21-GAP-03568","next":"M21-GAP-03570"},"M21-GAP-03570":{"line":6825,"offset":1225914,"length":156,"previous":"M21-GAP-03569","next":"M21-GAP-03571"},"M21-GAP-03571":{"line":6826,"offset":1226070,"length":156,"previous":"M21-GAP-03570","next":"M21-GAP-03572"},"M21-GAP-03572":{"line":6827,"offset":1226226,"length":152,"previous":"M21-GAP-03571","next":"M21-GAP-03573"},"M21-GAP-03573":{"line":6828,"offset":1226378,"length":158,"previous":"M21-GAP-03572","next":"M21-GAP-03574"},"M21-GAP-03574":{"line":6829,"offset":1226536,"length":157,"previous":"M21-GAP-03573","next":"M21-GAP-03575"},"M21-GAP-03575":{"line":6830,"offset":1226693,"length":149,"previous":"M21-GAP-03574","next":"M21-GAP-03576"},"M21-GAP-03576":{"line":6831,"offset":1226842,"length":153,"previous":"M21-GAP-03575","next":"M21-GAP-03577"},"M21-GAP-03577":{"line":6832,"offset":1226995,"length":149,"previous":"M21-GAP-03576","next":"M21-GAP-03578"},"M21-GAP-03578":{"line":6833,"offset":1227144,"length":166,"previous":"M21-GAP-03577","next":"M21-GAP-03579"},"M21-GAP-03579":{"line":6834,"offset":1227310,"length":163,"previous":"M21-GAP-03578","next":"M21-GAP-03580"},"M21-GAP-03580":{"line":6835,"offset":1227473,"length":171,"previous":"M21-GAP-03579","next":"M21-GAP-03581"},"M21-GAP-03581":{"line":6836,"offset":1227644,"length":167,"previous":"M21-GAP-03580","next":"M21-GAP-03582"},"M21-GAP-03582":{"line":6837,"offset":1227811,"length":167,"previous":"M21-GAP-03581","next":"M21-GAP-03583"},"M21-GAP-03583":{"line":6838,"offset":1227978,"length":167,"previous":"M21-GAP-03582","next":"M21-GAP-03584"},"M21-GAP-03584":{"line":6839,"offset":1228145,"length":160,"previous":"M21-GAP-03583","next":"M21-GAP-03585"},"M21-GAP-03585":{"line":6840,"offset":1228305,"length":159,"previous":"M21-GAP-03584","next":"M21-GAP-03586"},"M21-GAP-03586":{"line":6841,"offset":1228464,"length":166,"previous":"M21-GAP-03585","next":"M21-GAP-03587"},"M21-GAP-03587":{"line":6842,"offset":1228630,"length":164,"previous":"M21-GAP-03586","next":"M21-GAP-03588"},"M21-GAP-03588":{"line":6843,"offset":1228794,"length":167,"previous":"M21-GAP-03587","next":"M21-GAP-03589"},"M21-GAP-03589":{"line":6844,"offset":1228961,"length":166,"previous":"M21-GAP-03588","next":"M21-GAP-03590"},"M21-GAP-03590":{"line":6845,"offset":1229127,"length":170,"previous":"M21-GAP-03589","next":"M21-GAP-03591"},"M21-GAP-03591":{"line":6846,"offset":1229297,"length":167,"previous":"M21-GAP-03590","next":"M21-GAP-03592"},"M21-GAP-03592":{"line":6847,"offset":1229464,"length":166,"previous":"M21-GAP-03591","next":"M21-GAP-03593"},"M21-GAP-03593":{"line":6848,"offset":1229630,"length":162,"previous":"M21-GAP-03592","next":"M21-GAP-03594"},"M21-GAP-03594":{"line":6849,"offset":1229792,"length":156,"previous":"M21-GAP-03593","next":"M21-GAP-03595"},"M21-GAP-03595":{"line":6850,"offset":1229948,"length":152,"previous":"M21-GAP-03594","next":"M21-GAP-03596"},"M21-GAP-03596":{"line":6851,"offset":1230100,"length":161,"previous":"M21-GAP-03595","next":"M21-GAP-03597"},"M21-GAP-03597":{"line":6852,"offset":1230261,"length":150,"previous":"M21-GAP-03596","next":"M21-GAP-03598"},"M21-GAP-03598":{"line":6853,"offset":1230411,"length":157,"previous":"M21-GAP-03597","next":"M21-GAP-03599"},"M21-GAP-03599":{"line":6854,"offset":1230568,"length":157,"previous":"M21-GAP-03598","next":"M21-GAP-03600"},"M21-GAP-03600":{"line":6855,"offset":1230725,"length":157,"previous":"M21-GAP-03599","next":"M21-GAP-03601"},"M21-GAP-03601":{"line":6856,"offset":1230882,"length":149,"previous":"M21-GAP-03600","next":"M21-GAP-03602"},"M21-GAP-03602":{"line":6857,"offset":1231031,"length":155,"previous":"M21-GAP-03601","next":"M21-GAP-03603"},"M21-GAP-03603":{"line":6858,"offset":1231186,"length":156,"previous":"M21-GAP-03602","next":"M21-GAP-03604"},"M21-GAP-03604":{"line":6859,"offset":1231342,"length":153,"previous":"M21-GAP-03603","next":"M21-GAP-03605"},"M21-GAP-03605":{"line":6860,"offset":1231495,"length":156,"previous":"M21-GAP-03604","next":"M21-GAP-03606"},"M21-GAP-03606":{"line":6861,"offset":1231651,"length":155,"previous":"M21-GAP-03605","next":"M21-GAP-03607"},"M21-GAP-03607":{"line":6862,"offset":1231806,"length":160,"previous":"M21-GAP-03606","next":"M21-GAP-03608"},"M21-GAP-03608":{"line":6863,"offset":1231966,"length":156,"previous":"M21-GAP-03607","next":"M21-GAP-03609"},"M21-GAP-03609":{"line":6864,"offset":1232122,"length":154,"previous":"M21-GAP-03608","next":"M21-GAP-03610"},"M21-GAP-03610":{"line":6865,"offset":1232276,"length":156,"previous":"M21-GAP-03609","next":"M21-GAP-03611"},"M21-GAP-03611":{"line":6866,"offset":1232432,"length":151,"previous":"M21-GAP-03610","next":"M21-GAP-03612"},"M21-GAP-03612":{"line":6867,"offset":1232583,"length":152,"previous":"M21-GAP-03611","next":"M21-GAP-03613"},"M21-GAP-03613":{"line":6868,"offset":1232735,"length":157,"previous":"M21-GAP-03612","next":"M21-GAP-03614"},"M21-GAP-03614":{"line":6869,"offset":1232892,"length":165,"previous":"M21-GAP-03613","next":"M21-GAP-03615"},"M21-GAP-03615":{"line":6870,"offset":1233057,"length":159,"previous":"M21-GAP-03614","next":"M21-GAP-03616"},"M21-GAP-03616":{"line":6871,"offset":1233216,"length":172,"previous":"M21-GAP-03615","next":"M21-GAP-03617"},"M21-GAP-03617":{"line":6872,"offset":1233388,"length":166,"previous":"M21-GAP-03616","next":"M21-GAP-03618"},"M21-GAP-03618":{"line":6873,"offset":1233554,"length":157,"previous":"M21-GAP-03617","next":"M21-GAP-03619"},"M21-GAP-03619":{"line":6874,"offset":1233711,"length":159,"previous":"M21-GAP-03618","next":"M21-GAP-03620"},"M21-GAP-03620":{"line":6875,"offset":1233870,"length":173,"previous":"M21-GAP-03619","next":"M21-GAP-03621"},"M21-GAP-03621":{"line":6876,"offset":1234043,"length":166,"previous":"M21-GAP-03620","next":"M21-GAP-03622"},"M21-GAP-03622":{"line":6877,"offset":1234209,"length":173,"previous":"M21-GAP-03621","next":"M21-GAP-03623"},"M21-GAP-03623":{"line":6878,"offset":1234382,"length":165,"previous":"M21-GAP-03622","next":"M21-GAP-03624"},"M21-GAP-03624":{"line":6879,"offset":1234547,"length":173,"previous":"M21-GAP-03623","next":"M21-GAP-03625"},"M21-GAP-03625":{"line":6880,"offset":1234720,"length":165,"previous":"M21-GAP-03624","next":"M22-GAP-00001"},"M22-GAP-00001":{"line":6881,"offset":1234885,"length":166,"previous":"M21-GAP-03625","next":"M22-GAP-00002"},"M22-GAP-00002":{"line":6882,"offset":1235051,"length":180,"previous":"M22-GAP-00001","next":"M22-GAP-00003"},"M22-GAP-00003":{"line":6883,"offset":1235231,"length":172,"previous":"M22-GAP-00002","next":"M22-GAP-00004"},"M22-GAP-00004":{"line":6884,"offset":1235403,"length":155,"previous":"M22-GAP-00003","next":"M22-GAP-00005"},"M22-GAP-00005":{"line":6885,"offset":1235558,"length":159,"previous":"M22-GAP-00004","next":"M22-GAP-00006"},"M22-GAP-00006":{"line":6886,"offset":1235717,"length":159,"previous":"M22-GAP-00005","next":"M22-GAP-00007"},"M22-GAP-00007":{"line":6887,"offset":1235876,"length":164,"previous":"M22-GAP-00006","next":"M22-GAP-00008"},"M22-GAP-00008":{"line":6888,"offset":1236040,"length":154,"previous":"M22-GAP-00007","next":"M22-GAP-00009"},"M22-GAP-00009":{"line":6889,"offset":1236194,"length":157,"previous":"M22-GAP-00008","next":"M22-GAP-00010"},"M22-GAP-00010":{"line":6890,"offset":1236351,"length":157,"previous":"M22-GAP-00009","next":"M22-GAP-00011"},"M22-GAP-00011":{"line":6891,"offset":1236508,"length":157,"previous":"M22-GAP-00010","next":"M22-GAP-00012"},"M22-GAP-00012":{"line":6892,"offset":1236665,"length":155,"previous":"M22-GAP-00011","next":"M22-GAP-00013"},"M22-GAP-00013":{"line":6893,"offset":1236820,"length":163,"previous":"M22-GAP-00012","next":"M22-GAP-00014"},"M22-GAP-00014":{"line":6894,"offset":1236983,"length":154,"previous":"M22-GAP-00013","next":"M22-GAP-00015"},"M22-GAP-00015":{"line":6895,"offset":1237137,"length":155,"previous":"M22-GAP-00014","next":"M22-GAP-00016"},"M22-GAP-00016":{"line":6896,"offset":1237292,"length":158,"previous":"M22-GAP-00015","next":"M22-GAP-00017"},"M22-GAP-00017":{"line":6897,"offset":1237450,"length":155,"previous":"M22-GAP-00016","next":"M22-GAP-00018"},"M22-GAP-00018":{"line":6898,"offset":1237605,"length":162,"previous":"M22-GAP-00017","next":"M22-GAP-00019"},"M22-GAP-00019":{"line":6899,"offset":1237767,"length":154,"previous":"M22-GAP-00018","next":null}}} diff --git a/tests/golden/corrective/C0-002/write.json b/tests/golden/corrective/C0-002/write.json new file mode 100644 index 00000000..450608a0 --- /dev/null +++ b/tests/golden/corrective/C0-002/write.json @@ -0,0 +1,7538 @@ +{ + "schemaVersion": 1, + "operation": "CORRECTIVE_STATE_RECONCILIATION", + "mode": "write", + "status": "BLOCKED", + "queueMutation": false, + "queue": { + "currentTask": "M16-GAP-00274", + "parentManifest": "tests/golden/M16-GAP-00273/manifest.json", + "parentNextTask": "M16-GAP-00274" + }, + "inputTaskCount": 274, + "manifestDoneCount": 273, + "registeredCompletedCount": 264, + "eligibleCompletedTaskIds": [], + "eligibleCompletedGaps": [], + "registryComparison": { + "eligibleNotRegistered": [], + "registeredNotEligible": [ + "datablock:Action", + "datablock:Armature", + "datablock:Brush", + "datablock:Camera", + "datablock:Collection", + "datablock:Curve", + "datablock:Curves", + "datablock:FreestyleLineStyle", + "datablock:GreasePencil", + "datablock:Lattice", + "datablock:Library", + "datablock:Light", + "datablock:Material", + "datablock:Mesh", + "datablock:MetaBall", + "datablock:NodeTree", + "datablock:Object", + "datablock:ParticleSettings", + "datablock:PointCloud", + "datablock:Scene", + "datablock:Screen", + "datablock:Sound", + "datablock:Speaker", + "datablock:Text", + "datablock:Texture", + "datablock:Volume", + "datablock:WindowManager", + "datablock:WorkSpace", + "datablock:World", + "modifier:ARMATURE", + "modifier:ARRAY", + "modifier:BEVEL", + "modifier:BOOLEAN", + "modifier:BUILD", + "modifier:CAST", + "modifier:CLOTH", + "modifier:COLLISION", + "modifier:CORRECTIVE_SMOOTH", + "modifier:CURVE", + "modifier:DATA_TRANSFER", + "modifier:DECIMATE", + "modifier:DISPLACE", + "modifier:DYNAMIC_PAINT", + "modifier:EDGE_SPLIT", + "modifier:EXPLODE", + "modifier:FLUID", + "modifier:GREASE_PENCIL_ARMATURE", + "modifier:GREASE_PENCIL_ARRAY", + "modifier:GREASE_PENCIL_BUILD", + "modifier:GREASE_PENCIL_COLOR", + "modifier:GREASE_PENCIL_DASH", + "modifier:GREASE_PENCIL_ENVELOPE", + "modifier:GREASE_PENCIL_HOOK", + "modifier:GREASE_PENCIL_LATTICE", + "modifier:GREASE_PENCIL_LENGTH", + "modifier:GREASE_PENCIL_MIRROR", + "modifier:GREASE_PENCIL_MULTIPLY", + "modifier:GREASE_PENCIL_NOISE", + "modifier:GREASE_PENCIL_OFFSET", + "modifier:GREASE_PENCIL_OPACITY", + "modifier:GREASE_PENCIL_OUTLINE", + "modifier:GREASE_PENCIL_SHRINKWRAP", + "modifier:GREASE_PENCIL_SIMPLIFY", + "modifier:GREASE_PENCIL_SMOOTH", + "modifier:GREASE_PENCIL_SUBDIV", + "modifier:GREASE_PENCIL_TEXTURE", + "modifier:GREASE_PENCIL_THICKNESS", + "modifier:GREASE_PENCIL_TIME", + "modifier:GREASE_PENCIL_TINT", + "modifier:GREASE_PENCIL_VERTEX_WEIGHT_ANGLE", + "modifier:GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY", + "modifier:HOOK", + "modifier:LAPLACIANDEFORM", + "modifier:LAPLACIANSMOOTH", + "modifier:LATTICE", + "modifier:LINEART", + "modifier:MASK", + "modifier:MESH_CACHE", + "modifier:MESH_DEFORM", + "modifier:MESH_SEQUENCE_CACHE", + "modifier:MESH_TO_VOLUME", + "modifier:MIRROR", + "modifier:MULTIRES", + "modifier:NODES", + "modifier:NORMAL_EDIT", + "modifier:OCEAN", + "modifier:PARTICLE_INSTANCE", + "modifier:PARTICLE_SYSTEM", + "modifier:REMESH", + "modifier:SCREW", + "modifier:SHRINKWRAP", + "modifier:SIMPLE_DEFORM", + "modifier:SKIN", + "modifier:SMOOTH", + "modifier:SOFT_BODY", + "modifier:SOLIDIFY", + "modifier:SUBSURF", + "modifier:SURFACE", + "modifier:SURFACE_DEFORM", + "modifier:TRIANGULATE", + "modifier:UV_PROJECT", + "modifier:UV_WARP", + "modifier:VERTEX_WEIGHT_EDIT", + "modifier:VERTEX_WEIGHT_MIX", + "modifier:VERTEX_WEIGHT_PROXIMITY", + "modifier:VOLUME_DISPLACE", + "modifier:VOLUME_TO_MESH", + "modifier:WARP", + "modifier:WAVE", + "modifier:WEIGHTED_NORMAL", + "modifier:WELD", + "modifier:WIREFRAME", + "operator:action.bake_keys", + "operator:action.clean", + "operator:action.clickselect", + "operator:action.copy", + "operator:action.delete", + "operator:action.duplicate", + "operator:action.duplicate_move", + "operator:action.easing_type", + "operator:action.extrapolation_type", + "operator:action.frame_jump", + "operator:action.handle_type", + "operator:action.interpolation_type", + "operator:action.keyframe_insert", + "operator:action.keyframe_type", + "operator:action.markers_make_local", + "operator:action.mirror", + "operator:action.new", + "operator:action.paste", + "operator:action.previewrange_set", + "operator:action.push_down", + "operator:action.select_all", + "operator:action.select_box", + "operator:action.select_by_type", + "operator:action.select_circle", + "operator:action.select_column", + "operator:action.select_lasso", + "operator:action.select_leftright", + "operator:action.select_less", + "operator:action.select_linked", + "operator:action.select_more", + "operator:action.snap", + "operator:action.stash", + "operator:action.stash_and_create", + "operator:action.unlink", + "operator:action.view_all", + "operator:action.view_frame", + "operator:action.view_selected", + "operator:anim.change_frame", + "operator:anim.channel_select_keys", + "operator:anim.channel_view_pick", + "operator:anim.channels_bake", + "operator:anim.channels_clean_empty", + "operator:anim.channels_click", + "operator:anim.channels_collapse", + "operator:anim.channels_delete", + "operator:anim.channels_editable_toggle", + "operator:anim.channels_expand", + "operator:anim.channels_fcurves_enable", + "operator:anim.channels_group", + "operator:anim.channels_move", + "operator:anim.channels_rename", + "operator:anim.channels_select_all", + "operator:anim.channels_select_box", + "operator:anim.channels_select_filter", + "operator:anim.channels_setting_disable", + "operator:anim.channels_setting_enable", + "operator:anim.channels_setting_toggle", + "operator:anim.channels_ungroup", + "operator:anim.channels_view_selected", + "operator:anim.clear_useless_actions", + "operator:anim.copy_driver_button", + "operator:anim.driver_button_add", + "operator:anim.driver_button_edit", + "operator:anim.driver_button_remove", + "operator:anim.end_frame_set", + "operator:anim.keyframe_clear_button", + "operator:anim.keyframe_clear_v3d", + "operator:anim.keyframe_clear_vse", + "operator:anim.keyframe_delete", + "operator:anim.keyframe_delete_button", + "operator:anim.keyframe_delete_by_name", + "operator:anim.keyframe_delete_v3d", + "operator:anim.keyframe_delete_vse", + "operator:anim.keyframe_insert", + "operator:anim.keyframe_insert_button", + "operator:anim.keyframe_insert_by_name", + "operator:anim.keyframe_insert_menu", + "operator:anim.keying_set_active_set", + "operator:anim.keying_set_add", + "operator:anim.keying_set_export", + "operator:anim.keying_set_path_add", + "operator:anim.keying_set_path_remove", + "operator:anim.keying_set_remove", + "operator:anim.keyingset_button_add", + "operator:anim.keyingset_button_remove", + "operator:anim.merge_animation", + "operator:anim.paste_driver_button", + "operator:anim.previewrange_clear", + "operator:anim.previewrange_set", + "operator:anim.replace_action", + "operator:anim.replace_action_new", + "operator:anim.scene_range_frame", + "operator:anim.separate_slots", + "operator:anim.slot_channels_move_to_new_action", + "operator:anim.slot_new_for_id", + "operator:anim.slot_unassign_from_constraint", + "operator:anim.slot_unassign_from_id", + "operator:anim.slot_unassign_from_nla_strip", + "operator:anim.start_frame_set", + "operator:anim.update_animated_transform_constraints", + "operator:anim.version_bone_hide_property", + "operator:anim.view_curve_in_graph_editor", + "operator:armature.align", + "operator:armature.assign_to_collection", + "operator:armature.autoside_names", + "operator:armature.bone_primitive_add", + "operator:armature.calculate_roll", + "operator:armature.click_extrude", + "operator:armature.collection_add", + "operator:armature.collection_assign", + "operator:armature.collection_create_and_assign", + "operator:armature.collection_deselect", + "operator:armature.collection_move", + "operator:armature.collection_remove", + "operator:armature.collection_remove_unused", + "operator:armature.collection_select", + "operator:armature.collection_show_all", + "operator:armature.collection_unassign", + "operator:armature.collection_unassign_named", + "operator:armature.collection_unsolo_all", + "operator:armature.copy_bone_color_to_selected", + "operator:armature.delete", + "operator:armature.dissolve", + "operator:armature.duplicate", + "operator:armature.duplicate_move", + "operator:armature.duplicate_rename", + "operator:armature.extrude", + "operator:armature.extrude_forked", + "operator:armature.extrude_move", + "operator:armature.fill", + "operator:armature.flip_names", + "operator:armature.hide", + "operator:armature.move_to_collection", + "operator:armature.parent_clear", + "operator:armature.parent_set", + "operator:armature.reveal", + "operator:armature.roll_clear", + "operator:armature.select_all", + "operator:armature.select_hierarchy", + "operator:armature.select_less", + "operator:armature.select_linked", + "operator:armature.select_linked_pick", + "operator:armature.select_mirror", + "operator:armature.select_more", + "operator:armature.select_similar", + "operator:armature.separate", + "operator:armature.shortest_path_pick", + "operator:armature.split", + "operator:armature.subdivide", + "operator:armature.switch_direction", + "operator:armature.symmetrize", + "operator:asset.asset_download" + ], + "manifestDoneNotEligible": [ + "datablock:Action", + "datablock:Armature", + "datablock:Brush", + "datablock:Camera", + "datablock:Collection", + "datablock:Curve", + "datablock:Curves", + "datablock:FreestyleLineStyle", + "datablock:GreasePencil", + "datablock:Lattice", + "datablock:Library", + "datablock:Light", + "datablock:Material", + "datablock:Mesh", + "datablock:MetaBall", + "datablock:NodeTree", + "datablock:Object", + "datablock:ParticleSettings", + "datablock:PointCloud", + "datablock:Scene", + "datablock:Screen", + "datablock:Sound", + "datablock:Speaker", + "datablock:Text", + "datablock:Texture", + "datablock:Volume", + "datablock:WindowManager", + "datablock:WorkSpace", + "datablock:World", + "modifier:ARMATURE", + "modifier:ARRAY", + "modifier:BEVEL", + "modifier:BOOLEAN", + "modifier:BUILD", + "modifier:CAST", + "modifier:CLOTH", + "modifier:COLLISION", + "modifier:CORRECTIVE_SMOOTH", + "modifier:CURVE", + "modifier:DATA_TRANSFER", + "modifier:DECIMATE", + "modifier:DISPLACE", + "modifier:DYNAMIC_PAINT", + "modifier:EDGE_SPLIT", + "modifier:EXPLODE", + "modifier:FLUID", + "modifier:GREASE_PENCIL_ARMATURE", + "modifier:GREASE_PENCIL_ARRAY", + "modifier:GREASE_PENCIL_BUILD", + "modifier:GREASE_PENCIL_COLOR", + "modifier:GREASE_PENCIL_DASH", + "modifier:GREASE_PENCIL_ENVELOPE", + "modifier:GREASE_PENCIL_HOOK", + "modifier:GREASE_PENCIL_LATTICE", + "modifier:GREASE_PENCIL_LENGTH", + "modifier:GREASE_PENCIL_MIRROR", + "modifier:GREASE_PENCIL_MULTIPLY", + "modifier:GREASE_PENCIL_NOISE", + "modifier:GREASE_PENCIL_OFFSET", + "modifier:GREASE_PENCIL_OPACITY", + "modifier:GREASE_PENCIL_OUTLINE", + "modifier:GREASE_PENCIL_SHRINKWRAP", + "modifier:GREASE_PENCIL_SIMPLIFY", + "modifier:GREASE_PENCIL_SMOOTH", + "modifier:GREASE_PENCIL_SUBDIV", + "modifier:GREASE_PENCIL_TEXTURE", + "modifier:GREASE_PENCIL_THICKNESS", + "modifier:GREASE_PENCIL_TIME", + "modifier:GREASE_PENCIL_TINT", + "modifier:GREASE_PENCIL_VERTEX_WEIGHT_ANGLE", + "modifier:GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY", + "modifier:HOOK", + "modifier:LAPLACIANDEFORM", + "modifier:LAPLACIANSMOOTH", + "modifier:LATTICE", + "modifier:LINEART", + "modifier:MASK", + "modifier:MESH_CACHE", + "modifier:MESH_DEFORM", + "modifier:MESH_SEQUENCE_CACHE", + "modifier:MESH_TO_VOLUME", + "modifier:MIRROR", + "modifier:MULTIRES", + "modifier:NODES", + "modifier:NORMAL_EDIT", + "modifier:OCEAN", + "modifier:PARTICLE_INSTANCE", + "modifier:PARTICLE_SYSTEM", + "modifier:REMESH", + "modifier:SCREW", + "modifier:SHRINKWRAP", + "modifier:SIMPLE_DEFORM", + "modifier:SKIN", + "modifier:SMOOTH", + "modifier:SOFT_BODY", + "modifier:SOLIDIFY", + "modifier:SUBSURF", + "modifier:SURFACE", + "modifier:SURFACE_DEFORM", + "modifier:TRIANGULATE", + "modifier:UV_PROJECT", + "modifier:UV_WARP", + "modifier:VERTEX_WEIGHT_EDIT", + "modifier:VERTEX_WEIGHT_MIX", + "modifier:VERTEX_WEIGHT_PROXIMITY", + "modifier:VOLUME_DISPLACE", + "modifier:VOLUME_TO_MESH", + "modifier:WARP", + "modifier:WAVE", + "modifier:WEIGHTED_NORMAL", + "modifier:WELD", + "modifier:WIREFRAME", + "operator:action.bake_keys", + "operator:action.clean", + "operator:action.clickselect", + "operator:action.copy", + "operator:action.delete", + "operator:action.duplicate", + "operator:action.duplicate_move", + "operator:action.easing_type", + "operator:action.extrapolation_type", + "operator:action.frame_jump", + "operator:action.handle_type", + "operator:action.interpolation_type", + "operator:action.keyframe_insert", + "operator:action.keyframe_type", + "operator:action.markers_make_local", + "operator:action.mirror", + "operator:action.new", + "operator:action.paste", + "operator:action.previewrange_set", + "operator:action.push_down", + "operator:action.select_all", + "operator:action.select_box", + "operator:action.select_by_type", + "operator:action.select_circle", + "operator:action.select_column", + "operator:action.select_lasso", + "operator:action.select_leftright", + "operator:action.select_less", + "operator:action.select_linked", + "operator:action.select_more", + "operator:action.snap", + "operator:action.stash", + "operator:action.stash_and_create", + "operator:action.unlink", + "operator:action.view_all", + "operator:action.view_frame", + "operator:action.view_selected", + "operator:anim.change_frame", + "operator:anim.channel_select_keys", + "operator:anim.channel_view_pick", + "operator:anim.channels_bake", + "operator:anim.channels_clean_empty", + "operator:anim.channels_click", + "operator:anim.channels_collapse", + "operator:anim.channels_delete", + "operator:anim.channels_editable_toggle", + "operator:anim.channels_expand", + "operator:anim.channels_fcurves_enable", + "operator:anim.channels_group", + "operator:anim.channels_move", + "operator:anim.channels_rename", + "operator:anim.channels_select_all", + "operator:anim.channels_select_box", + "operator:anim.channels_select_filter", + "operator:anim.channels_setting_disable", + "operator:anim.channels_setting_enable", + "operator:anim.channels_setting_toggle", + "operator:anim.channels_ungroup", + "operator:anim.channels_view_selected", + "operator:anim.clear_useless_actions", + "operator:anim.copy_driver_button", + "operator:anim.driver_button_add", + "operator:anim.driver_button_edit", + "operator:anim.driver_button_remove", + "operator:anim.end_frame_set", + "operator:anim.keyframe_clear_button", + "operator:anim.keyframe_clear_v3d", + "operator:anim.keyframe_clear_vse", + "operator:anim.keyframe_delete", + "operator:anim.keyframe_delete_button", + "operator:anim.keyframe_delete_by_name", + "operator:anim.keyframe_delete_v3d", + "operator:anim.keyframe_delete_vse", + "operator:anim.keyframe_insert", + "operator:anim.keyframe_insert_button", + "operator:anim.keyframe_insert_by_name", + "operator:anim.keyframe_insert_menu", + "operator:anim.keying_set_active_set", + "operator:anim.keying_set_add", + "operator:anim.keying_set_export", + "operator:anim.keying_set_path_add", + "operator:anim.keying_set_path_remove", + "operator:anim.keying_set_remove", + "operator:anim.keyingset_button_add", + "operator:anim.keyingset_button_remove", + "operator:anim.merge_animation", + "operator:anim.paste_driver_button", + "operator:anim.previewrange_clear", + "operator:anim.previewrange_set", + "operator:anim.replace_action", + "operator:anim.replace_action_new", + "operator:anim.scene_range_frame", + "operator:anim.separate_slots", + "operator:anim.slot_channels_move_to_new_action", + "operator:anim.slot_new_for_id", + "operator:anim.slot_unassign_from_constraint", + "operator:anim.slot_unassign_from_id", + "operator:anim.slot_unassign_from_nla_strip", + "operator:anim.start_frame_set", + "operator:anim.update_animated_transform_constraints", + "operator:anim.version_bone_hide_property", + "operator:anim.view_curve_in_graph_editor", + "operator:armature.align", + "operator:armature.assign_to_collection", + "operator:armature.autoside_names", + "operator:armature.bone_primitive_add", + "operator:armature.calculate_roll", + "operator:armature.click_extrude", + "operator:armature.collection_add", + "operator:armature.collection_assign", + "operator:armature.collection_create_and_assign", + "operator:armature.collection_deselect", + "operator:armature.collection_move", + "operator:armature.collection_remove", + "operator:armature.collection_remove_unused", + "operator:armature.collection_select", + "operator:armature.collection_show_all", + "operator:armature.collection_unassign", + "operator:armature.collection_unassign_named", + "operator:armature.collection_unsolo_all", + "operator:armature.copy_bone_color_to_selected", + "operator:armature.delete", + "operator:armature.dissolve", + "operator:armature.duplicate", + "operator:armature.duplicate_move", + "operator:armature.duplicate_rename", + "operator:armature.extrude", + "operator:armature.extrude_forked", + "operator:armature.extrude_move", + "operator:armature.fill", + "operator:armature.flip_names", + "operator:armature.hide", + "operator:armature.move_to_collection", + "operator:armature.parent_clear", + "operator:armature.parent_set", + "operator:armature.reveal", + "operator:armature.roll_clear", + "operator:armature.select_all", + "operator:armature.select_hierarchy", + "operator:armature.select_less", + "operator:armature.select_linked", + "operator:armature.select_linked_pick", + "operator:armature.select_mirror", + "operator:armature.select_more", + "operator:armature.select_similar", + "operator:armature.separate", + "operator:armature.shortest_path_pick", + "operator:armature.split", + "operator:armature.subdivide", + "operator:armature.switch_direction", + "operator:armature.symmetrize", + "operator:asset.asset_download", + "operator:asset.assets_download", + "operator:asset.assign_action", + "operator:asset.browse_containing_blend_file", + "operator:asset.bundle_install", + "operator:asset.catalog_delete", + "operator:asset.catalog_new", + "operator:asset.catalog_redo", + "operator:asset.catalog_undo", + "operator:asset.catalog_undo_push" + ] + }, + "candidateActiveTask": "M16-GAP-00274", + "sourceHashes": { + "docs/EXECUTION_QUEUE.md": "eeaca50828c3feb3ed53d1869626a703d9e50fefd9c70d871cc6eec03fc84bcd", + "tests/golden/M16-GAP-00273/manifest.json": "3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1", + "tests/golden/M15-03A/completed-gap-tasks.json": "f9f4f1116b5975aa1b47fee15856f2029ec8f02161e432e9a24b846384cd1c5b", + "tests/golden/M15-03A/next-task-plan.json": "2235d0d250d28e63ab1c9b0e956292560785cf340c612312b316be0ceb2463a9", + "tests/golden/M15-03A/task-catalog.jsonl": "278d51b867d63a5975635b8fd108c9025668de0893576499a77bd3d571a0f14b", + "tests/golden/M15-03A/task-index.json": "9c79926a5a91b137b023a62f8a98d7c7421018846fdf658c9bea13ee5c5cbcea", + "docs/BLENDER_WASM_CORRECTIVE_TASK_PLAN.json": "2336fafe07c8c670b0d58746af818c07ed21534aeeff02fea3279a8618655c91" + }, + "inputDigest": "41de2aa1e9456d42ea3dc4ff5121437d9ae759e1df74b56184b728242a6552d2", + "issueSummary": [ + { + "code": "ARTIFACT_HASH_DRIFT", + "count": 1355, + "taskCount": 273, + "sampleTasks": [ + "M16-GAP-00001", + "M16-GAP-00002", + "M16-GAP-00003", + "M16-GAP-00004", + "M16-GAP-00005" + ], + "pathCount": 23, + "samplePaths": [ + "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "docs/status/M16-GAP-00162.md", + "tests/files/web/generated/M16-GAP-00177-operator-anim.end_frame_set.blend" + ] + }, + { + "code": "MISSING_TASK_CONTEXT", + "count": 24, + "taskCount": 24, + "sampleTasks": [ + "M16-GAP-00001", + "M16-GAP-00002", + "M16-GAP-00003", + "M16-GAP-00004", + "M16-GAP-00005" + ], + "pathCount": 0, + "samplePaths": [] + }, + { + "code": "PLAN_NONDETERMINISTIC", + "count": 1, + "taskCount": 0, + "sampleTasks": [], + "pathCount": 1, + "samplePaths": [ + "tests/golden/M15-03A/next-task-plan.json" + ] + } + ], + "issueCount": 1380, + "issues": [ + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00001" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03E/manifest.json", + "task": "M16-GAP-00001" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00001" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03A/next-task-plan.json", + "task": "M16-GAP-00001" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/package.json", + "task": "M16-GAP-00001" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00002" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00002" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03A/next-task-plan.json", + "task": "M16-GAP-00002" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/package.json", + "task": "M16-GAP-00002" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00003" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00003" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00003" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00003" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00003" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03A/next-task-plan.json", + "task": "M16-GAP-00003" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/package.json", + "task": "M16-GAP-00003" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00004" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00004" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00004" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03A/next-task-plan.json", + "task": "M16-GAP-00004" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00005" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00005" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03A/next-task-plan.json", + "task": "M16-GAP-00005" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00006" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00006" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00006" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03A/next-task-plan.json", + "task": "M16-GAP-00006" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00007" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00007" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00007" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03A/next-task-plan.json", + "task": "M16-GAP-00007" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00008" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00008" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00008" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00008" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00008" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03A/next-task-plan.json", + "task": "M16-GAP-00008" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00009" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00009" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03A/next-task-plan.json", + "task": "M16-GAP-00009" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00010" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00010" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00010" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00010" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00010" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00010" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00011" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00011" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00011" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00011" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00011" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00012" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00012" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00012" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00012" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00012" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00013" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00013" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00013" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00013" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00013" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00014" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00014" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00014" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00014" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00014" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00015" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00015" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00015" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00015" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00015" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00016" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00016" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00016" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00016" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00016" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00017" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00017" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00017" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00017" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00017" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00018" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00018" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "task": "M16-GAP-00018" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00018" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00018" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00018" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00019" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00019" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00019" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00019" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00019" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00020" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00020" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00020" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00020" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00020" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00021" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00021" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00021" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00021" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00021" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00022" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00022" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00022" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00022" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00022" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00022" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00023" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00023" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00023" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00023" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00023" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00023" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00024" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00024" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00024" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00024" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00024" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00024" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00025" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00025" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00025" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00025" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00025" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00025" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00026" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00026" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00026" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00026" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00026" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00026" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00027" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00027" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00027" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00027" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00027" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00027" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00028" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00028" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00028" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00028" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00028" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00028" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00029" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00029" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00029" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00029" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00029" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00029" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00030" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00030" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00030" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00030" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00030" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00030" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00031" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00031" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00031" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00031" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00031" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00031" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00032" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00032" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00032" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00032" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00032" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00032" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00033" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00033" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00033" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00033" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00033" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00033" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00034" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00034" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00034" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00034" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00034" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00034" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00035" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00035" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00035" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00035" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00035" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00035" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00036" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00036" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00036" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00036" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00036" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00036" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00037" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00037" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00037" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00037" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00037" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00037" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00038" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00038" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00038" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00038" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00038" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00038" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00038" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00039" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00039" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00039" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00039" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00039" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00039" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00039" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00040" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00040" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00040" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00040" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00040" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00040" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00040" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00041" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00041" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00041" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00041" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00041" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00041" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00041" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00042" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00042" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00042" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00042" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00042" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00042" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00042" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00043" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00043" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00043" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00043" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00043" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00043" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00043" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00044" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00044" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00044" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00044" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00044" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00044" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00044" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00045" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00045" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00045" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00045" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00045" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00045" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00045" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00046" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00046" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00046" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00046" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00046" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00046" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00046" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00047" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00047" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00047" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00047" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00047" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00047" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00047" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00048" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00048" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00048" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00048" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00048" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00048" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00048" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00049" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00049" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00049" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00049" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00049" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00049" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00049" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00050" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00050" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00050" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00050" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00050" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00050" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00050" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00051" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00051" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00051" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00051" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00051" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00051" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00051" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00052" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00052" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00052" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00052" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00052" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00052" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00052" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00053" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00053" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00053" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00053" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00053" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00053" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00053" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00054" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00054" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00054" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00054" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00054" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00054" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00054" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00055" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00055" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00055" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00055" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00055" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00055" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00055" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00056" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00056" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00056" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00056" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00056" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00056" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00056" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00057" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00057" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00057" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00057" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00057" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00057" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00057" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00058" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00058" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00058" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00058" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00058" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00058" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00058" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00059" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00059" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00059" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00059" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00059" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00059" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00060" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00060" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00060" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00060" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00060" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00060" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00061" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00061" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00061" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00061" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00061" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00061" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00062" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00062" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00062" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00062" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00062" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00062" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00063" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00063" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00063" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00063" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00063" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00063" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00064" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00064" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00064" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00064" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00064" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00064" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00065" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00065" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00065" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00065" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00065" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00065" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00066" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00066" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00066" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00066" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00066" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00066" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00067" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00067" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00067" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00067" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00067" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00067" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00068" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00068" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00068" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00068" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00068" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00068" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00069" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00069" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00069" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00069" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00069" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00069" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00070" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00070" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00070" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00070" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00070" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00070" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00070" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M16-GAP-00070/manifest.json", + "task": "M16-GAP-00071" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00071" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00071" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00071" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00071" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00071" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00071" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00072" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00072" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00072" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00072" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00072" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00072" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00072" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00073" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00073" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00073" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00073" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00073" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00073" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00073" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00074" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00074" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00074" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00074" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00074" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00074" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00074" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00075" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00075" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00075" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00075" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00075" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00075" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00075" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00076" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00076" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00076" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00076" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00076" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00076" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00077" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00077" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00077" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00077" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00077" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00077" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00078" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00078" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00078" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00078" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00078" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00078" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00079" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00079" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00079" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00079" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00079" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00079" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00080" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00080" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00080" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00080" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00080" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00080" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00081" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00081" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00081" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00081" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00081" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00081" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00082" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00082" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00082" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00082" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00082" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00082" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00083" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00083" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00083" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00083" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00083" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00083" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00084" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00084" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00084" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00084" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00084" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00084" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00085" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00085" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00085" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00085" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00085" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00085" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00086" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00086" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00086" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00086" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00086" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00086" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00087" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00087" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00087" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00087" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00087" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00087" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00088" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00088" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00088" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00088" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00088" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00088" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00089" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00089" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00089" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00089" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00089" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00089" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00090" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00090" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00090" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00090" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00090" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00090" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00091" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00091" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00091" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00091" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00091" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00091" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00092" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00092" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00092" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00092" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00092" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00092" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00093" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00093" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00093" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00093" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00093" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00093" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00094" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00094" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00094" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00094" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00094" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00094" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00095" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00095" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00095" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00095" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00095" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00095" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00096" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00096" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00096" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00096" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00096" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00096" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00097" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00097" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00097" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00097" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00097" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00097" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00098" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00098" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00098" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00098" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00098" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00098" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00099" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00099" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00099" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00099" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00099" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00099" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00099" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00100" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00100" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00100" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00100" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00100" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00100" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00100" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00101" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00101" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00101" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00101" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00101" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00101" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00101" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00102" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00102" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00102" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00102" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00102" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00102" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00102" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00103" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00103" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00103" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00103" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00103" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00103" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00103" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00103" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00104" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00104" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00104" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00104" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00104" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00104" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00104" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00104" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00105" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00105" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00105" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00105" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00105" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00105" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00105" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00105" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00106" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00106" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00106" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00106" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00106" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00106" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00106" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00106" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00107" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00107" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00107" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00107" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00107" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00107" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00107" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00107" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00108" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00108" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00108" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00108" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00108" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00108" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00108" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00109" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00109" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00109" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00109" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00109" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00109" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00109" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00110" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00110" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00110" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00110" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00110" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00110" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00110" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00111" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00111" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00111" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00111" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00111" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00111" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00111" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00112" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00112" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00112" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00112" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00112" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00113" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00113" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00113" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00113" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00113" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00113" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00114" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00114" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00114" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00114" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00114" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00115" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00115" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00115" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00115" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00115" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00116" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00116" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00116" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00116" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00116" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00117" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00117" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00117" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00117" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00117" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00118" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00118" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00118" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00118" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00118" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00119" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00119" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00119" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00119" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00119" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00120" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00120" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00120" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00120" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00120" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00121" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00121" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00121" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00121" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00121" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00122" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00122" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00122" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00122" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00122" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00123" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00123" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00123" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00123" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00123" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00124" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00124" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00124" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00124" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00124" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-action-keyframe-insert-desktop.py", + "task": "M16-GAP-00125" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00125" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00125" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00125" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00125" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00125" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00126" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00126" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00126" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00126" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00126" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00127" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00127" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00127" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00127" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00127" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00128" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00128" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00128" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00128" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00128" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00129" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00129" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00129" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00129" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00129" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00130" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00130" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00130" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00130" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00130" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-action-previewrange-set-desktop.py", + "task": "M16-GAP-00131" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00131" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00131" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00131" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00131" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00131" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00132" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00132" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00132" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00132" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00132" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00133" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00133" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00133" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00133" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00133" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00134" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00134" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00134" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00134" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00134" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00135" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00135" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00135" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00135" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00135" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00136" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00136" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00136" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00136" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00136" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00137" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00137" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00137" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00137" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00137" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00138" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00138" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00138" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00138" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00138" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00139" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00139" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00139" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00139" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00139" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00140" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00140" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00140" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00140" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00140" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00141" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00141" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00141" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00141" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00141" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00142" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00142" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00142" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00142" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00142" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00143" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00143" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00143" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00143" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00143" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00144" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00144" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00144" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00144" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00144" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00145" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00145" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00145" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00145" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00145" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00146" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00146" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00146" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00146" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00146" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00147" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00147" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00147" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00147" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00147" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00148" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00148" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00148" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00148" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00148" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00149" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00149" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00149" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00149" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00149" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00150" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00150" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00150" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00150" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00150" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00151" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00151" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00151" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00151" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00151" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00152" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00152" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00152" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00152" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00152" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00153" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00153" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00153" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00153" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00153" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00154" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00154" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00154" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00154" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00154" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00155" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00155" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00155" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00155" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00155" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-action-channels-collapse-desktop.py", + "task": "M16-GAP-00156" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00156" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00156" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00156" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00156" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00156" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00157" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00157" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00157" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00157" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00157" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00158" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00158" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00158" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00158" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00158" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00159" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00159" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00159" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00159" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00159" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00160" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00160" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00160" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00160" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00160" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00160" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00161" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00161" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00161" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00161" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00161" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00161" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M16-GAP-00161/manifest.json", + "task": "M16-GAP-00162" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00162" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00162" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00162" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00162" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00162" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00162" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "docs/status/M16-GAP-00162.md", + "task": "M16-GAP-00162" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M16-GAP-00162/task-context.json", + "task": "M16-GAP-00162" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00163" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00163" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00163" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00163" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00163" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00163" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00164" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00164" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00164" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00164" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00164" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00165" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00165" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00165" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00165" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00165" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00166" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00166" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00166" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00166" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00166" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00167" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00167" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00167" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00167" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00167" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00168" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00168" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00168" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00168" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00168" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00169" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00169" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00169" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00169" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00169" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00170" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00170" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00170" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00170" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00170" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00171" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00171" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00171" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00171" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00171" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00172" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00172" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00172" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00172" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00172" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00173" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00173" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00173" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00173" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00173" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00174" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00174" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00174" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00174" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00174" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00175" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00175" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00175" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00175" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00175" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00176" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00176" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00176" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00176" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00176" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/files/web/generated/M16-GAP-00177-operator-anim.end_frame_set.blend", + "task": "M16-GAP-00177" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00177" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00177" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00177" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00177" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00177" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M16-GAP-00177/anim-end-frame-set-desktop-report.json", + "task": "M16-GAP-00177" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M16-GAP-00177/anim-end-frame-set-local-exact-report.json", + "task": "M16-GAP-00177" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00178" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00178" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00178" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00178" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00178" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00179" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00179" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00179" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00179" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00179" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00180" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00180" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00180" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00180" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00180" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00181" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00181" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00181" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00181" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00181" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00182" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00182" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00182" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00182" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00182" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00183" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00183" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00183" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00183" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00183" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00184" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00184" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00184" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00184" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00184" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00185" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00185" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00185" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00185" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00185" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00186" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00186" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00186" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00186" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00186" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00187" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00187" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00187" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00187" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00187" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00188" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00188" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00188" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00188" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00188" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00189" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00189" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00189" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00189" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00189" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00190" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00190" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00190" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00190" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00190" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00191" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00191" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00191" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00191" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00191" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00192" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00192" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00192" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00192" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00192" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00193" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00193" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00193" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00193" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00193" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00194" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00194" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00194" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00194" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00194" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00195" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00195" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00195" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00195" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00195" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00196" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00196" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00196" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00196" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00196" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00197" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00197" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00197" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00197" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00197" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00198" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00198" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00198" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00198" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00198" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00199" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00199" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00199" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00199" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00199" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00200" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00200" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00200" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00200" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00200" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00201" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00201" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00201" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00201" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00201" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00202" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00202" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00202" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00202" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00202" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00203" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00203" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00203" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00203" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00203" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00204" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00204" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00204" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00204" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00204" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00205" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00205" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00205" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00205" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00205" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00206" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00206" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00206" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00206" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00206" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00207" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00207" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00207" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00207" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00207" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.js", + "task": "M16-GAP-00207" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00208" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00208" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00208" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00208" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00208" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.js", + "task": "M16-GAP-00208" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00209" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00209" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00209" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00209" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00210" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00210" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00210" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00210" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00211" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00211" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00211" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00211" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00212" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00212" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00212" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00212" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00213" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00213" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00213" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00213" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00214" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00214" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00214" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00214" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00215" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00215" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00215" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00215" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00216" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00216" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00216" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00216" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00217" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00217" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00217" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00217" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00218" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00218" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00218" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00218" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00219" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00219" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00219" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00219" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00220" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00220" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00220" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00220" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00221" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00221" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00221" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00221" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00222" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00222" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00222" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00222" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00223" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00223" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00223" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00223" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00224" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00224" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00224" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00224" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00225" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00225" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00225" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00225" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00226" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00226" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00226" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00226" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00227" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00227" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00227" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00227" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00228" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00228" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00228" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00228" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00229" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00229" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00229" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00229" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00230" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00230" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00230" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00230" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00231" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00231" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00231" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00231" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00232" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00232" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00232" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00232" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00233" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00233" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00233" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00233" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00234" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00234" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00234" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00234" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00235" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00235" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00235" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00235" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00236" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00236" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00236" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00236" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00237" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00237" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00237" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00237" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00238" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00238" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00238" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00238" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00239" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00239" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00239" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00239" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00240" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00240" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00240" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00240" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00241" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00241" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00241" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00241" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00242" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00242" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00242" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00242" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00243" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00243" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00243" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00243" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00244" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00244" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00244" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00244" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00245" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00245" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00245" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00245" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00246" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00246" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00246" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00246" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00247" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00247" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00247" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00247" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00248" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00248" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00248" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00248" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00249" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00249" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00249" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00249" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00250" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00250" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00250" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00250" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00251" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00252" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00253" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00254" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00255" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00256" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00257" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00258" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00259" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00260" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00261" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00262" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00263" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00264" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00265" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00266" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00267" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00268" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00269" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00270" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00271" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00272" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00273" + }, + { + "code": "PLAN_NONDETERMINISTIC", + "path": "tests/golden/M15-03A/next-task-plan.json", + "detail": "generator output differs from committed plan" + } + ], + "repairPlan": { + "actions": [ + { + "code": "MISSING_TASK_CONTEXT", + "priority": "P1", + "action": "repair only when the task parent pointer is independently valid; otherwise preserve BLOCKED", + "writes": [ + "corrective evidence only" + ] + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "priority": "P0", + "action": "obtain an immutable source snapshot or classify the task BLOCKED; never rewrite historical manifests", + "writes": [] + }, + { + "code": "STATUS_MISMATCH", + "priority": "P0", + "action": "compare manifest/status provenance and stop; do not normalize by hand", + "writes": [] + }, + { + "code": "PARENT_NEXT_TASK_MISMATCH", + "priority": "P0", + "action": "repair through the repository generator only after evidence review", + "writes": [] + }, + { + "code": "PLAN_NONDETERMINISTIC", + "priority": "P0", + "action": "rebuild generator inputs in staging and compare canonical bytes", + "writes": [ + "corrective evidence only" + ] + } + ], + "approvalRequired": true, + "queueMutationAllowed": false + }, + "writeOutcome": "NO_FILES_WRITTEN" +} diff --git a/tests/golden/corrective/C0-003/classification-report.md b/tests/golden/corrective/C0-003/classification-report.md new file mode 100644 index 00000000..77d72462 --- /dev/null +++ b/tests/golden/corrective/C0-003/classification-report.md @@ -0,0 +1,290 @@ +# C0-003 Legacy Classification Report + +status: PASS +taskCount: 273 +queueMutation: false + +Classification is fail-closed: only explicit desktop positive, explicit WASM/Main mutation, and persistence evidence can produce FEATURE_PARITY. + +| Class | Count | +| --- | ---: | +| BLOCKED | 24 | +| FEATURE_PARITY | 20 | +| METADATA_ONLY | 10 | +| NEGATIVE_BOUNDARY | 219 | + +| Task | Gap | Level | Class | Desktop | WASM mutation | Save/reopen | Mapping | +| --- | --- | --- | --- | --- | --- | --- | --- | +| M16-GAP-00001 | datablock:Action | L1 | METADATA_ONLY | false | false | EXACT | CANDIDATE | +| M16-GAP-00002 | datablock:Armature | L1 | METADATA_ONLY | false | false | EXACT | CANDIDATE | +| M16-GAP-00003 | datablock:Brush | L1 | METADATA_ONLY | false | false | EXACT | CANDIDATE | +| M16-GAP-00004 | datablock:Camera | L1 | METADATA_ONLY | false | false | EXACT | CANDIDATE | +| M16-GAP-00005 | datablock:Collection | L1 | METADATA_ONLY | false | false | EXACT | CANDIDATE | +| M16-GAP-00006 | datablock:Curve | L1 | METADATA_ONLY | false | false | EXACT | CANDIDATE | +| M16-GAP-00007 | datablock:Curves | L1 | METADATA_ONLY | false | false | EXACT | CANDIDATE | +| M16-GAP-00008 | datablock:FreestyleLineStyle | L1 | METADATA_ONLY | false | false | EXACT | CANDIDATE | +| M16-GAP-00009 | datablock:GreasePencil | L1 | METADATA_ONLY | false | false | EXACT | CANDIDATE | +| M16-GAP-00010 | datablock:Lattice | L1 | METADATA_ONLY | false | false | EXACT | CANDIDATE | +| M16-GAP-00011 | datablock:Library | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00012 | datablock:Light | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00013 | datablock:Material | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00014 | datablock:Mesh | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00015 | datablock:MetaBall | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00016 | datablock:NodeTree | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00017 | datablock:Object | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00018 | datablock:ParticleSettings | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00019 | datablock:PointCloud | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00020 | datablock:Scene | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00021 | datablock:Screen | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00022 | datablock:Sound | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00023 | datablock:Speaker | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00024 | datablock:Text | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00025 | datablock:Texture | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00026 | datablock:Volume | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00027 | datablock:WindowManager | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00028 | datablock:WorkSpace | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00029 | datablock:World | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00030 | modifier:ARMATURE | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00031 | modifier:ARRAY | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00032 | modifier:BEVEL | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00033 | modifier:BOOLEAN | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00034 | modifier:BUILD | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00035 | modifier:CAST | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00036 | modifier:CLOTH | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00037 | modifier:COLLISION | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00038 | modifier:CORRECTIVE_SMOOTH | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00039 | modifier:CURVE | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00040 | modifier:DATA_TRANSFER | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00041 | modifier:DECIMATE | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00042 | modifier:DISPLACE | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00043 | modifier:DYNAMIC_PAINT | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00044 | modifier:EDGE_SPLIT | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00045 | modifier:EXPLODE | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00046 | modifier:FLUID | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00047 | modifier:GREASE_PENCIL_ARMATURE | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00048 | modifier:GREASE_PENCIL_ARRAY | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00049 | modifier:GREASE_PENCIL_BUILD | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00050 | modifier:GREASE_PENCIL_COLOR | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00051 | modifier:GREASE_PENCIL_DASH | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00052 | modifier:GREASE_PENCIL_ENVELOPE | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00053 | modifier:GREASE_PENCIL_HOOK | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00054 | modifier:GREASE_PENCIL_LATTICE | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00055 | modifier:GREASE_PENCIL_LENGTH | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00056 | modifier:GREASE_PENCIL_MIRROR | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00057 | modifier:GREASE_PENCIL_MULTIPLY | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00058 | modifier:GREASE_PENCIL_NOISE | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00059 | modifier:GREASE_PENCIL_OFFSET | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00060 | modifier:GREASE_PENCIL_OPACITY | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00061 | modifier:GREASE_PENCIL_OUTLINE | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00062 | modifier:GREASE_PENCIL_SHRINKWRAP | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00063 | modifier:GREASE_PENCIL_SIMPLIFY | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00064 | modifier:GREASE_PENCIL_SMOOTH | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00065 | modifier:GREASE_PENCIL_SUBDIV | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00066 | modifier:GREASE_PENCIL_TEXTURE | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00067 | modifier:GREASE_PENCIL_THICKNESS | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00068 | modifier:GREASE_PENCIL_TIME | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00069 | modifier:GREASE_PENCIL_TINT | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00070 | modifier:GREASE_PENCIL_VERTEX_WEIGHT_ANGLE | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00071 | modifier:GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00072 | modifier:HOOK | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00073 | modifier:LAPLACIANDEFORM | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00074 | modifier:LAPLACIANSMOOTH | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00075 | modifier:LATTICE | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00076 | modifier:LINEART | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00077 | modifier:MASK | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00078 | modifier:MESH_CACHE | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00079 | modifier:MESH_DEFORM | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00080 | modifier:MESH_SEQUENCE_CACHE | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00081 | modifier:MESH_TO_VOLUME | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00082 | modifier:MIRROR | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00083 | modifier:MULTIRES | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00084 | modifier:NODES | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00085 | modifier:NORMAL_EDIT | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00086 | modifier:OCEAN | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00087 | modifier:PARTICLE_INSTANCE | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00088 | modifier:PARTICLE_SYSTEM | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00089 | modifier:REMESH | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00090 | modifier:SCREW | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00091 | modifier:SHRINKWRAP | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00092 | modifier:SIMPLE_DEFORM | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00093 | modifier:SKIN | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00094 | modifier:SMOOTH | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00095 | modifier:SOFT_BODY | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00096 | modifier:SOLIDIFY | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00097 | modifier:SUBSURF | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00098 | modifier:SURFACE | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00099 | modifier:SURFACE_DEFORM | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00100 | modifier:TRIANGULATE | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00101 | modifier:UV_PROJECT | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00102 | modifier:UV_WARP | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00103 | modifier:VERTEX_WEIGHT_EDIT | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00104 | modifier:VERTEX_WEIGHT_MIX | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00105 | modifier:VERTEX_WEIGHT_PROXIMITY | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00106 | modifier:VOLUME_DISPLACE | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00107 | modifier:VOLUME_TO_MESH | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00108 | modifier:WARP | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00109 | modifier:WAVE | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00110 | modifier:WEIGHTED_NORMAL | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00111 | modifier:WELD | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00112 | modifier:WIREFRAME | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00113 | operator:action.bake_keys | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00114 | operator:action.clean | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00115 | operator:action.clickselect | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00116 | operator:action.copy | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00117 | operator:action.delete | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00118 | operator:action.duplicate | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00119 | operator:action.duplicate_move | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00120 | operator:action.easing_type | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00121 | operator:action.extrapolation_type | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00122 | operator:action.frame_jump | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00123 | operator:action.handle_type | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00124 | operator:action.interpolation_type | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00125 | operator:action.keyframe_insert | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00126 | operator:action.keyframe_type | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00127 | operator:action.markers_make_local | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00128 | operator:action.mirror | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00129 | operator:action.new | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00130 | operator:action.paste | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00131 | operator:action.previewrange_set | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00132 | operator:action.push_down | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00133 | operator:action.select_all | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00134 | operator:action.select_box | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00135 | operator:action.select_by_type | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00136 | operator:action.select_circle | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00137 | operator:action.select_column | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00138 | operator:action.select_lasso | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00139 | operator:action.select_leftright | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00140 | operator:action.select_less | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00141 | operator:action.select_linked | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00142 | operator:action.select_more | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00143 | operator:action.snap | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00144 | operator:action.stash | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00145 | operator:action.stash_and_create | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00146 | operator:action.unlink | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00147 | operator:action.view_all | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00148 | operator:action.view_frame | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00149 | operator:action.view_selected | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00150 | operator:anim.change_frame | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00151 | operator:anim.channel_select_keys | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00152 | operator:anim.channel_view_pick | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00153 | operator:anim.channels_bake | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00154 | operator:anim.channels_clean_empty | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00155 | operator:anim.channels_click | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00156 | operator:anim.channels_collapse | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00157 | operator:anim.channels_delete | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00158 | operator:anim.channels_editable_toggle | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00159 | operator:anim.channels_expand | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00160 | operator:anim.channels_fcurves_enable | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00161 | operator:anim.channels_group | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00162 | operator:anim.channels_move | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00163 | operator:anim.channels_rename | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00164 | operator:anim.channels_select_all | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00165 | operator:anim.channels_select_box | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00166 | operator:anim.channels_select_filter | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00167 | operator:anim.channels_setting_disable | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00168 | operator:anim.channels_setting_enable | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00169 | operator:anim.channels_setting_toggle | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00170 | operator:anim.channels_ungroup | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00171 | operator:anim.channels_view_selected | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00172 | operator:anim.clear_useless_actions | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00173 | operator:anim.copy_driver_button | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00174 | operator:anim.driver_button_add | L0 | BLOCKED | true | false | EXACT | BLOCKED | +| M16-GAP-00175 | operator:anim.driver_button_edit | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00176 | operator:anim.driver_button_remove | L0 | BLOCKED | true | false | EXACT | BLOCKED | +| M16-GAP-00177 | operator:anim.end_frame_set | L0 | BLOCKED | true | false | EXACT | BLOCKED | +| M16-GAP-00178 | operator:anim.keyframe_clear_button | L3 | FEATURE_PARITY | true | true | EXACT | CANDIDATE | +| M16-GAP-00179 | operator:anim.keyframe_clear_v3d | L3 | FEATURE_PARITY | true | true | EXACT | CANDIDATE | +| M16-GAP-00180 | operator:anim.keyframe_clear_vse | L3 | FEATURE_PARITY | true | true | EXACT | CANDIDATE | +| M16-GAP-00181 | operator:anim.keyframe_delete | L3 | FEATURE_PARITY | true | true | EXACT | CANDIDATE | +| M16-GAP-00182 | operator:anim.keyframe_delete_button | L3 | FEATURE_PARITY | true | true | EXACT | CANDIDATE | +| M16-GAP-00183 | operator:anim.keyframe_delete_by_name | L3 | FEATURE_PARITY | true | true | EXACT | CANDIDATE | +| M16-GAP-00184 | operator:anim.keyframe_delete_v3d | L3 | FEATURE_PARITY | true | true | EXACT | CANDIDATE | +| M16-GAP-00185 | operator:anim.keyframe_delete_vse | L3 | FEATURE_PARITY | true | true | EXACT | CANDIDATE | +| M16-GAP-00186 | operator:anim.keyframe_insert | L3 | FEATURE_PARITY | true | true | EXACT | CANDIDATE | +| M16-GAP-00187 | operator:anim.keyframe_insert_button | L3 | FEATURE_PARITY | true | true | EXACT | CANDIDATE | +| M16-GAP-00188 | operator:anim.keyframe_insert_by_name | L3 | FEATURE_PARITY | true | true | EXACT | CANDIDATE | +| M16-GAP-00189 | operator:anim.keyframe_insert_menu | L3 | FEATURE_PARITY | true | true | EXACT | CANDIDATE | +| M16-GAP-00190 | operator:anim.keying_set_active_set | L3 | FEATURE_PARITY | true | true | EXACT | CANDIDATE | +| M16-GAP-00191 | operator:anim.keying_set_add | L3 | FEATURE_PARITY | true | true | EXACT | CANDIDATE | +| M16-GAP-00192 | operator:anim.keying_set_export | L0 | BLOCKED | false | true | EXACT | BLOCKED | +| M16-GAP-00193 | operator:anim.keying_set_path_add | L3 | FEATURE_PARITY | true | true | EXACT | CANDIDATE | +| M16-GAP-00194 | operator:anim.keying_set_path_remove | L3 | FEATURE_PARITY | true | true | EXACT | CANDIDATE | +| M16-GAP-00195 | operator:anim.keying_set_remove | L3 | FEATURE_PARITY | true | true | EXACT | CANDIDATE | +| M16-GAP-00196 | operator:anim.keyingset_button_add | L3 | FEATURE_PARITY | true | true | EXACT | CANDIDATE | +| M16-GAP-00197 | operator:anim.keyingset_button_remove | L3 | FEATURE_PARITY | true | true | EXACT | CANDIDATE | +| M16-GAP-00198 | operator:anim.merge_animation | L3 | FEATURE_PARITY | true | true | EXACT | CANDIDATE | +| M16-GAP-00199 | operator:anim.paste_driver_button | L0 | BLOCKED | true | false | EXACT | BLOCKED | +| M16-GAP-00200 | operator:anim.previewrange_clear | L0 | BLOCKED | true | false | EXACT | BLOCKED | +| M16-GAP-00201 | operator:anim.previewrange_set | L0 | BLOCKED | true | false | EXACT | BLOCKED | +| M16-GAP-00202 | operator:anim.replace_action | L0 | BLOCKED | true | false | EXACT | BLOCKED | +| M16-GAP-00203 | operator:anim.replace_action_new | L0 | BLOCKED | true | false | EXACT | BLOCKED | +| M16-GAP-00204 | operator:anim.scene_range_frame | L0 | BLOCKED | true | false | EXACT | BLOCKED | +| M16-GAP-00205 | operator:anim.separate_slots | L0 | BLOCKED | true | false | EXACT | BLOCKED | +| M16-GAP-00206 | operator:anim.slot_channels_move_to_new_action | L0 | BLOCKED | true | false | EXACT | BLOCKED | +| M16-GAP-00207 | operator:anim.slot_new_for_id | L0 | BLOCKED | true | false | EXACT | BLOCKED | +| M16-GAP-00208 | operator:anim.slot_unassign_from_constraint | L0 | BLOCKED | true | false | EXACT | BLOCKED | +| M16-GAP-00209 | operator:anim.slot_unassign_from_id | L0 | BLOCKED | true | false | EXACT | BLOCKED | +| M16-GAP-00210 | operator:anim.slot_unassign_from_nla_strip | L0 | BLOCKED | true | false | EXACT | BLOCKED | +| M16-GAP-00211 | operator:anim.start_frame_set | L0 | BLOCKED | true | false | EXACT | BLOCKED | +| M16-GAP-00212 | operator:anim.update_animated_transform_constraints | L0 | BLOCKED | true | false | EXACT | BLOCKED | +| M16-GAP-00213 | operator:anim.version_bone_hide_property | L0 | BLOCKED | true | false | EXACT | BLOCKED | +| M16-GAP-00214 | operator:anim.view_curve_in_graph_editor | L0 | BLOCKED | true | false | EXACT | BLOCKED | +| M16-GAP-00215 | operator:armature.align | L0 | BLOCKED | true | false | EXACT | BLOCKED | +| M16-GAP-00216 | operator:armature.assign_to_collection | L0 | BLOCKED | true | false | EXACT | BLOCKED | +| M16-GAP-00217 | operator:armature.autoside_names | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00218 | operator:armature.bone_primitive_add | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00219 | operator:armature.calculate_roll | L0 | BLOCKED | true | false | EXACT | BLOCKED | +| M16-GAP-00220 | operator:armature.click_extrude | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00221 | operator:armature.collection_add | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00222 | operator:armature.collection_assign | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00223 | operator:armature.collection_create_and_assign | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00224 | operator:armature.collection_deselect | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00225 | operator:armature.collection_move | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00226 | operator:armature.collection_remove | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00227 | operator:armature.collection_remove_unused | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00228 | operator:armature.collection_select | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00229 | operator:armature.collection_show_all | L0 | BLOCKED | true | false | EXACT | BLOCKED | +| M16-GAP-00230 | operator:armature.collection_unassign | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00231 | operator:armature.collection_unassign_named | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00232 | operator:armature.collection_unsolo_all | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00233 | operator:armature.copy_bone_color_to_selected | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00234 | operator:armature.delete | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00235 | operator:armature.dissolve | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00236 | operator:armature.duplicate | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00237 | operator:armature.duplicate_move | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00238 | operator:armature.duplicate_rename | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00239 | operator:armature.extrude | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00240 | operator:armature.extrude_forked | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00241 | operator:armature.extrude_move | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00242 | operator:armature.fill | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00243 | operator:armature.flip_names | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00244 | operator:armature.hide | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00245 | operator:armature.move_to_collection | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00246 | operator:armature.parent_clear | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00247 | operator:armature.parent_set | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00248 | operator:armature.reveal | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00249 | operator:armature.roll_clear | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00250 | operator:armature.select_all | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00251 | operator:armature.select_hierarchy | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00252 | operator:armature.select_less | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00253 | operator:armature.select_linked | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00254 | operator:armature.select_linked_pick | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00255 | operator:armature.select_mirror | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00256 | operator:armature.select_more | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00257 | operator:armature.select_similar | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00258 | operator:armature.separate | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00259 | operator:armature.shortest_path_pick | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00260 | operator:armature.split | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00261 | operator:armature.subdivide | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00262 | operator:armature.switch_direction | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00263 | operator:armature.symmetrize | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00264 | operator:asset.asset_download | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00265 | operator:asset.assets_download | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00266 | operator:asset.assign_action | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00267 | operator:asset.browse_containing_blend_file | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00268 | operator:asset.bundle_install | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00269 | operator:asset.catalog_delete | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00270 | operator:asset.catalog_new | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00271 | operator:asset.catalog_redo | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00272 | operator:asset.catalog_undo | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | +| M16-GAP-00273 | operator:asset.catalog_undo_push | L1 | NEGATIVE_BOUNDARY | false | false | EXACT | RETAINED_NEGATIVE | diff --git a/tests/golden/corrective/C0-003/cluster-summary.json b/tests/golden/corrective/C0-003/cluster-summary.json new file mode 100644 index 00000000..0c32b27e --- /dev/null +++ b/tests/golden/corrective/C0-003/cluster-summary.json @@ -0,0 +1,367 @@ +{ + "schemaVersion": 1, + "operation": "CORRECTIVE_LEGACY_CLUSTER_SUMMARY", + "status": "PASS", + "queueMutation": false, + "clusters": [ + { + "clusterId": "BLOCKED:CAP:animation.operator", + "completionClass": "BLOCKED", + "capabilityId": "CAP:animation.operator", + "taskCount": 20, + "tasks": [ + "M16-GAP-00174", + "M16-GAP-00176", + "M16-GAP-00177", + "M16-GAP-00192", + "M16-GAP-00199", + "M16-GAP-00200", + "M16-GAP-00201", + "M16-GAP-00202", + "M16-GAP-00203", + "M16-GAP-00204", + "M16-GAP-00205", + "M16-GAP-00206", + "M16-GAP-00207", + "M16-GAP-00208", + "M16-GAP-00209", + "M16-GAP-00210", + "M16-GAP-00211", + "M16-GAP-00212", + "M16-GAP-00213", + "M16-GAP-00214" + ] + }, + { + "clusterId": "BLOCKED:CAP:armature.operator", + "completionClass": "BLOCKED", + "capabilityId": "CAP:armature.operator", + "taskCount": 4, + "tasks": [ + "M16-GAP-00215", + "M16-GAP-00216", + "M16-GAP-00219", + "M16-GAP-00229" + ] + }, + { + "clusterId": "FEATURE_PARITY:CAP:animation.operator", + "completionClass": "FEATURE_PARITY", + "capabilityId": "CAP:animation.operator", + "taskCount": 20, + "tasks": [ + "M16-GAP-00178", + "M16-GAP-00179", + "M16-GAP-00180", + "M16-GAP-00181", + "M16-GAP-00182", + "M16-GAP-00183", + "M16-GAP-00184", + "M16-GAP-00185", + "M16-GAP-00186", + "M16-GAP-00187", + "M16-GAP-00188", + "M16-GAP-00189", + "M16-GAP-00190", + "M16-GAP-00191", + "M16-GAP-00193", + "M16-GAP-00194", + "M16-GAP-00195", + "M16-GAP-00196", + "M16-GAP-00197", + "M16-GAP-00198" + ] + }, + { + "clusterId": "METADATA_ONLY:CAP:datablock.read", + "completionClass": "METADATA_ONLY", + "capabilityId": "CAP:datablock.read", + "taskCount": 10, + "tasks": [ + "M16-GAP-00001", + "M16-GAP-00002", + "M16-GAP-00003", + "M16-GAP-00004", + "M16-GAP-00005", + "M16-GAP-00006", + "M16-GAP-00007", + "M16-GAP-00008", + "M16-GAP-00009", + "M16-GAP-00010" + ] + }, + { + "clusterId": "NEGATIVE_BOUNDARY:CAP:animation.operator", + "completionClass": "NEGATIVE_BOUNDARY", + "capabilityId": "CAP:animation.operator", + "taskCount": 25, + "tasks": [ + "M16-GAP-00150", + "M16-GAP-00151", + "M16-GAP-00152", + "M16-GAP-00153", + "M16-GAP-00154", + "M16-GAP-00155", + "M16-GAP-00156", + "M16-GAP-00157", + "M16-GAP-00158", + "M16-GAP-00159", + "M16-GAP-00160", + "M16-GAP-00161", + "M16-GAP-00162", + "M16-GAP-00163", + "M16-GAP-00164", + "M16-GAP-00165", + "M16-GAP-00166", + "M16-GAP-00167", + "M16-GAP-00168", + "M16-GAP-00169", + "M16-GAP-00170", + "M16-GAP-00171", + "M16-GAP-00172", + "M16-GAP-00173", + "M16-GAP-00175" + ] + }, + { + "clusterId": "NEGATIVE_BOUNDARY:CAP:armature.operator", + "completionClass": "NEGATIVE_BOUNDARY", + "capabilityId": "CAP:armature.operator", + "taskCount": 45, + "tasks": [ + "M16-GAP-00217", + "M16-GAP-00218", + "M16-GAP-00220", + "M16-GAP-00221", + "M16-GAP-00222", + "M16-GAP-00223", + "M16-GAP-00224", + "M16-GAP-00225", + "M16-GAP-00226", + "M16-GAP-00227", + "M16-GAP-00228", + "M16-GAP-00230", + "M16-GAP-00231", + "M16-GAP-00232", + "M16-GAP-00233", + "M16-GAP-00234", + "M16-GAP-00235", + "M16-GAP-00236", + "M16-GAP-00237", + "M16-GAP-00238", + "M16-GAP-00239", + "M16-GAP-00240", + "M16-GAP-00241", + "M16-GAP-00242", + "M16-GAP-00243", + "M16-GAP-00244", + "M16-GAP-00245", + "M16-GAP-00246", + "M16-GAP-00247", + "M16-GAP-00248", + "M16-GAP-00249", + "M16-GAP-00250", + "M16-GAP-00251", + "M16-GAP-00252", + "M16-GAP-00253", + "M16-GAP-00254", + "M16-GAP-00255", + "M16-GAP-00256", + "M16-GAP-00257", + "M16-GAP-00258", + "M16-GAP-00259", + "M16-GAP-00260", + "M16-GAP-00261", + "M16-GAP-00262", + "M16-GAP-00263" + ] + }, + { + "clusterId": "NEGATIVE_BOUNDARY:CAP:asset.catalog.operator", + "completionClass": "NEGATIVE_BOUNDARY", + "capabilityId": "CAP:asset.catalog.operator", + "taskCount": 10, + "tasks": [ + "M16-GAP-00264", + "M16-GAP-00265", + "M16-GAP-00266", + "M16-GAP-00267", + "M16-GAP-00268", + "M16-GAP-00269", + "M16-GAP-00270", + "M16-GAP-00271", + "M16-GAP-00272", + "M16-GAP-00273" + ] + }, + { + "clusterId": "NEGATIVE_BOUNDARY:CAP:datablock.read", + "completionClass": "NEGATIVE_BOUNDARY", + "capabilityId": "CAP:datablock.read", + "taskCount": 19, + "tasks": [ + "M16-GAP-00011", + "M16-GAP-00012", + "M16-GAP-00013", + "M16-GAP-00014", + "M16-GAP-00015", + "M16-GAP-00016", + "M16-GAP-00017", + "M16-GAP-00018", + "M16-GAP-00019", + "M16-GAP-00020", + "M16-GAP-00021", + "M16-GAP-00022", + "M16-GAP-00023", + "M16-GAP-00024", + "M16-GAP-00025", + "M16-GAP-00026", + "M16-GAP-00027", + "M16-GAP-00028", + "M16-GAP-00029" + ] + }, + { + "clusterId": "NEGATIVE_BOUNDARY:CAP:modifier.snapshot", + "completionClass": "NEGATIVE_BOUNDARY", + "capabilityId": "CAP:modifier.snapshot", + "taskCount": 83, + "tasks": [ + "M16-GAP-00030", + "M16-GAP-00031", + "M16-GAP-00032", + "M16-GAP-00033", + "M16-GAP-00034", + "M16-GAP-00035", + "M16-GAP-00036", + "M16-GAP-00037", + "M16-GAP-00038", + "M16-GAP-00039", + "M16-GAP-00040", + "M16-GAP-00041", + "M16-GAP-00042", + "M16-GAP-00043", + "M16-GAP-00044", + "M16-GAP-00045", + "M16-GAP-00046", + "M16-GAP-00047", + "M16-GAP-00048", + "M16-GAP-00049", + "M16-GAP-00050", + "M16-GAP-00051", + "M16-GAP-00052", + "M16-GAP-00053", + "M16-GAP-00054", + "M16-GAP-00055", + "M16-GAP-00056", + "M16-GAP-00057", + "M16-GAP-00058", + "M16-GAP-00059", + "M16-GAP-00060", + "M16-GAP-00061", + "M16-GAP-00062", + "M16-GAP-00063", + "M16-GAP-00064", + "M16-GAP-00065", + "M16-GAP-00066", + "M16-GAP-00067", + "M16-GAP-00068", + "M16-GAP-00069", + "M16-GAP-00070", + "M16-GAP-00071", + "M16-GAP-00072", + "M16-GAP-00073", + "M16-GAP-00074", + "M16-GAP-00075", + "M16-GAP-00076", + "M16-GAP-00077", + "M16-GAP-00078", + "M16-GAP-00079", + "M16-GAP-00080", + "M16-GAP-00081", + "M16-GAP-00082", + "M16-GAP-00083", + "M16-GAP-00084", + "M16-GAP-00085", + "M16-GAP-00086", + "M16-GAP-00087", + "M16-GAP-00088", + "M16-GAP-00089", + "M16-GAP-00090", + "M16-GAP-00091", + "M16-GAP-00092", + "M16-GAP-00093", + "M16-GAP-00094", + "M16-GAP-00095", + "M16-GAP-00096", + "M16-GAP-00097", + "M16-GAP-00098", + "M16-GAP-00099", + "M16-GAP-00100", + "M16-GAP-00101", + "M16-GAP-00102", + "M16-GAP-00103", + "M16-GAP-00104", + "M16-GAP-00105", + "M16-GAP-00106", + "M16-GAP-00107", + "M16-GAP-00108", + "M16-GAP-00109", + "M16-GAP-00110", + "M16-GAP-00111", + "M16-GAP-00112" + ] + }, + { + "clusterId": "NEGATIVE_BOUNDARY:CAP:operator", + "completionClass": "NEGATIVE_BOUNDARY", + "capabilityId": "CAP:operator", + "taskCount": 37, + "tasks": [ + "M16-GAP-00113", + "M16-GAP-00114", + "M16-GAP-00115", + "M16-GAP-00116", + "M16-GAP-00117", + "M16-GAP-00118", + "M16-GAP-00119", + "M16-GAP-00120", + "M16-GAP-00121", + "M16-GAP-00122", + "M16-GAP-00123", + "M16-GAP-00124", + "M16-GAP-00125", + "M16-GAP-00126", + "M16-GAP-00127", + "M16-GAP-00128", + "M16-GAP-00129", + "M16-GAP-00130", + "M16-GAP-00131", + "M16-GAP-00132", + "M16-GAP-00133", + "M16-GAP-00134", + "M16-GAP-00135", + "M16-GAP-00136", + "M16-GAP-00137", + "M16-GAP-00138", + "M16-GAP-00139", + "M16-GAP-00140", + "M16-GAP-00141", + "M16-GAP-00142", + "M16-GAP-00143", + "M16-GAP-00144", + "M16-GAP-00145", + "M16-GAP-00146", + "M16-GAP-00147", + "M16-GAP-00148", + "M16-GAP-00149" + ] + } + ], + "counts": { + "BLOCKED": 24, + "FEATURE_PARITY": 20, + "METADATA_ONLY": 10, + "NEGATIVE_BOUNDARY": 219 + } +} diff --git a/tests/golden/corrective/C0-003/command-exit-codes.json b/tests/golden/corrective/C0-003/command-exit-codes.json new file mode 100644 index 00000000..a3b9ac7c --- /dev/null +++ b/tests/golden/corrective/C0-003/command-exit-codes.json @@ -0,0 +1 @@ +{"classification":0,"second":0,"classificationCmp":0,"clusterCmp":0,"reportCmp":0,"featureGate":0,"countGate":0,"evidenceRefs":0,"plan":0,"index":0,"context":0,"contextTest":0,"governance":0,"diff":0} diff --git a/tests/golden/corrective/C0-003/handoff-resolution.json b/tests/golden/corrective/C0-003/handoff-resolution.json new file mode 100644 index 00000000..cd6b9eb4 --- /dev/null +++ b/tests/golden/corrective/C0-003/handoff-resolution.json @@ -0,0 +1,39 @@ +{ + "schemaVersion": 1, + "task": "C0-003", + "status": "PASS", + "queueMutation": false, + "inputDigest": "f6779e07fcd65528e9b998b1a627b8d064ebf09b4bccde95c39530d2cf261169", + "sourceHashes": { + "docs/EXECUTION_QUEUE.md": "eeaca50828c3feb3ed53d1869626a703d9e50fefd9c70d871cc6eec03fc84bcd", + "tests/golden/M16-GAP-00273/manifest.json": "3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1", + "docs/status/M16-GAP-00273.md": "5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8", + "tests/golden/M15-03A/completed-gap-tasks.json": "f9f4f1116b5975aa1b47fee15856f2029ec8f02161e432e9a24b846384cd1c5b", + "tests/golden/M15-03A/task-catalog.jsonl": "278d51b867d63a5975635b8fd108c9025668de0893576499a77bd3d571a0f14b", + "tests/golden/M15-03A/task-index.json": "9c79926a5a91b137b023a62f8a98d7c7421018846fdf658c9bea13ee5c5cbcea", + "tests/golden/M15-03A/next-task-plan.json": "2235d0d250d28e63ab1c9b0e956292560785cf340c612312b316be0ceb2463a9", + "tests/golden/corrective/C0-002/staged/completed-gap-tasks.candidate.json": "f5da902feecdafc1f12773568d3f48a5bab1ae8581e9661d8a7c888f4b62026e", + "tests/golden/corrective/C0-002/staged/next-task-plan.candidate.json": "3d5c74c519d3ac9a53c2ae516c4ad37adccf6999909ff1672e0ef74caae695a8" + }, + "commandExitCodes": { + "classification": 0, + "second": 0, + "classificationCmp": 0, + "clusterCmp": 0, + "reportCmp": 0, + "featureGate": 0, + "countGate": 0, + "evidenceRefs": 0, + "plan": 0, + "index": 0, + "context": 0, + "contextTest": 0, + "governance": 0, + "diff": 0, + "contextFinal": 0, + "contextTestFinal": 0, + "governanceTestFinal": 0, + "protectedCmp": 0 + }, + "nextCorrectiveTask": "C1-001" +} diff --git a/tests/golden/corrective/C0-003/handoff.json b/tests/golden/corrective/C0-003/handoff.json new file mode 100644 index 00000000..fa44bbe8 --- /dev/null +++ b/tests/golden/corrective/C0-003/handoff.json @@ -0,0 +1,178 @@ +{ + "schemaVersion": 1, + "task": "C0-003", + "status": "done", + "gate": "G0", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C0-003", + "artifactCount": 26, + "artifacts": [ + { + "path": "tests/golden/corrective/C0-003/check-context-governance.log", + "sha256": "8b4a0add34d164d2e514192c430269e780f03f92697d77e494aa35825b5861f3", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C0-003/check-corrective-plan.log", + "sha256": "4ce7fa2bfa5cc386187094049ba0eee17bb494edf59a5cb776e8ea8c312979f0", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C0-003/check-task-context-final.log", + "sha256": "d878b0cb346102d780a0de68deeb14a36d9c2e7aec63f1010a3d6454e276563a", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C0-003/check-task-index.log", + "sha256": "ce310f4a62f095235c7d6096c324e8404e02588871f62cd27a4116a1fac8c2cc", + "bytes": 94 + }, + { + "path": "tests/golden/corrective/C0-003/classification-cmp.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C0-003/classification-command.log", + "sha256": "9d40e2920bae0d48e5eb8ba68d78bef6491992d78e60c026d3b848866fdea48d", + "bytes": 91 + }, + { + "path": "tests/golden/corrective/C0-003/classification-report.md", + "sha256": "a70cce8219dd716cfde8f3cddbdf4b41bb76012b442df92cf9f3fae97af007e5", + "bytes": 31533 + }, + { + "path": "tests/golden/corrective/C0-003/cluster-cmp.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C0-003/cluster-summary.json", + "sha256": "216fbc53210eb9777a362dcb2320a0a14f74b832e42b4a58c9983c986ccc172a", + "bytes": 9167 + }, + { + "path": "tests/golden/corrective/C0-003/command-exit-codes.json", + "sha256": "db2f37b10b35237a528f55099a2cdef6a6788c2220c0d4eab43538c99eb2d4d4", + "bytes": 201 + }, + { + "path": "tests/golden/corrective/C0-003/count-gate.log", + "sha256": "a17fcf0a2f50e2d495e4f90ce263410edc183add6c62699a2facbccf60410f74", + "bytes": 5 + }, + { + "path": "tests/golden/corrective/C0-003/determinism-second-command.log", + "sha256": "d1811a2fd13a84947fffc5b43d93a073948652f72aa114215af6af01dc8f6266", + "bytes": 94 + }, + { + "path": "tests/golden/corrective/C0-003/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C0-003/evidence-ref-gate.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C0-003/feature-gate.log", + "sha256": "a17fcf0a2f50e2d495e4f90ce263410edc183add6c62699a2facbccf60410f74", + "bytes": 5 + }, + { + "path": "tests/golden/corrective/C0-003/handoff-command.log", + "sha256": "3a0e9c97ccf7998d675b0176a47e0400b58dc08ae88f635a28e930ec8a118dff", + "bytes": 79 + }, + { + "path": "tests/golden/corrective/C0-003/handoff-resolution.json", + "sha256": "d380d8f2e92573aea9818b3dd6c66be9f4f4321afa56d3feb23f582e7b9a82ba", + "bytes": 1722 + }, + { + "path": "tests/golden/corrective/C0-003/legacy-gap-classification.json", + "sha256": "b0b835370beb919dc0006c1ffd007b37aadd3830d88f5582b6d6f1c0b2bd47a9", + "bytes": 571793 + }, + { + "path": "tests/golden/corrective/C0-003/mapping-gate.log", + "sha256": "a17fcf0a2f50e2d495e4f90ce263410edc183add6c62699a2facbccf60410f74", + "bytes": 5 + }, + { + "path": "tests/golden/corrective/C0-003/negative-gate.log", + "sha256": "a17fcf0a2f50e2d495e4f90ce263410edc183add6c62699a2facbccf60410f74", + "bytes": 5 + }, + { + "path": "tests/golden/corrective/C0-003/protected-hashes-final.txt", + "sha256": "c0e309fa9967f34e0ddb500cd5619ea50b97d9d0cb3ce6f6861c9d6e8e19d0e7", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C0-003/report-cmp.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C0-003/test-context-governance-final.log", + "sha256": "9ec5458baf9e83a26f20dfa7f965751691c061808a274946c4c484a2d44c7c46", + "bytes": 2582 + }, + { + "path": "tests/golden/corrective/C0-003/test-context-governance.log", + "sha256": "1c041408cc4735978b3aa3d5cb3f3afd3d47058eb3ca4360655eaa987ac06d2f", + "bytes": 2581 + }, + { + "path": "tests/golden/corrective/C0-003/test-task-context-final.log", + "sha256": "ac0658f27fb6328595359b965520d0854e78a55e8e539f5512ed1a3584e82ffb", + "bytes": 1572 + }, + { + "path": "tests/golden/corrective/C0-003/test-task-context.log", + "sha256": "b6586204ce46f69ee89df4f71d28331c1aace60b80420d505ce18ffffaf1d5d9", + "bytes": 1569 + } + ], + "inputDigest": "f6779e07fcd65528e9b998b1a627b8d064ebf09b4bccde95c39530d2cf261169", + "sourceHashes": { + "docs/EXECUTION_QUEUE.md": "eeaca50828c3feb3ed53d1869626a703d9e50fefd9c70d871cc6eec03fc84bcd", + "tests/golden/M16-GAP-00273/manifest.json": "3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1", + "docs/status/M16-GAP-00273.md": "5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8", + "tests/golden/M15-03A/completed-gap-tasks.json": "f9f4f1116b5975aa1b47fee15856f2029ec8f02161e432e9a24b846384cd1c5b", + "tests/golden/M15-03A/task-catalog.jsonl": "278d51b867d63a5975635b8fd108c9025668de0893576499a77bd3d571a0f14b", + "tests/golden/M15-03A/task-index.json": "9c79926a5a91b137b023a62f8a98d7c7421018846fdf658c9bea13ee5c5cbcea", + "tests/golden/M15-03A/next-task-plan.json": "2235d0d250d28e63ab1c9b0e956292560785cf340c612312b316be0ceb2463a9", + "tests/golden/corrective/C0-002/staged/completed-gap-tasks.candidate.json": "f5da902feecdafc1f12773568d3f48a5bab1ae8581e9661d8a7c888f4b62026e", + "tests/golden/corrective/C0-002/staged/next-task-plan.candidate.json": "3d5c74c519d3ac9a53c2ae516c4ad37adccf6999909ff1672e0ef74caae695a8" + }, + "commandExitCodes": { + "classification": 0, + "second": 0, + "classificationCmp": 0, + "clusterCmp": 0, + "reportCmp": 0, + "featureGate": 0, + "countGate": 0, + "evidenceRefs": 0, + "plan": 0, + "index": 0, + "context": 0, + "contextTest": 0, + "governance": 0, + "diff": 0, + "contextFinal": 0, + "contextTestFinal": 0, + "governanceTestFinal": 0, + "protectedCmp": 0 + }, + "resolution": { + "status": "PASS", + "candidate": null + }, + "nextCorrectiveTask": "C1-001" +} diff --git a/tests/golden/corrective/C0-003/legacy-gap-classification.json b/tests/golden/corrective/C0-003/legacy-gap-classification.json new file mode 100644 index 00000000..481a0a85 --- /dev/null +++ b/tests/golden/corrective/C0-003/legacy-gap-classification.json @@ -0,0 +1,8979 @@ +{ + "schemaVersion": 1, + "operation": "CORRECTIVE_LEGACY_273_CLASSIFICATION", + "status": "PASS", + "queueMutation": false, + "source": { + "stagedRoot": "tests/golden/corrective/C0-002/staged", + "registry": "tests/golden/corrective/C0-002/staged/completed-gap-tasks.candidate.json", + "registrySha256": "f5da902feecdafc1f12773568d3f48a5bab1ae8581e9661d8a7c888f4b62026e", + "plan": "tests/golden/corrective/C0-002/staged/next-task-plan.candidate.json", + "planSha256": "3d5c74c519d3ac9a53c2ae516c4ad37adccf6999909ff1672e0ef74caae695a8" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/completed-gap-tasks.candidate.json": "f5da902feecdafc1f12773568d3f48a5bab1ae8581e9661d8a7c888f4b62026e", + "tests/golden/corrective/C0-002/staged/next-task-plan.candidate.json": "3d5c74c519d3ac9a53c2ae516c4ad37adccf6999909ff1672e0ef74caae695a8" + }, + "inputDigest": "f6779e07fcd65528e9b998b1a627b8d064ebf09b4bccde95c39530d2cf261169", + "taskCount": 273, + "records": [ + { + "task": "M16-GAP-00001", + "gapId": "datablock:Action", + "evidenceLevel": "L1", + "completionClass": "METADATA_ONLY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": false, + "wasmChanged": false, + "saveReopen": "EXACT", + "reason": "exact snapshot fields without equivalent mutation", + "candidateCapabilityId": "CAP:datablock.read", + "coverageCapabilityIds": [ + "CAP:datablock.read" + ], + "mappingState": "CANDIDATE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00001/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00001/action-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00001/action-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00001" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00001/manifest.json": "526e581e3c6a91a3803592cfaeb47edbfa4c961d3a520f54629e054e8a6a9b4a", + "tests/golden/M16-GAP-00001/action-desktop-report.json": "f6bea0003a9e8eb25048797156bc0ab59b6a63d76ce4156283b6d9761dbfb0ee", + "tests/golden/M16-GAP-00001/action-local-exact-report.json": "eb7a604af8b071c3186a39a30f3a9974a6fed03008751da5319d54d170b841d6" + } + }, + { + "task": "M16-GAP-00002", + "gapId": "datablock:Armature", + "evidenceLevel": "L1", + "completionClass": "METADATA_ONLY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": false, + "wasmChanged": false, + "saveReopen": "EXACT", + "reason": "exact snapshot fields without equivalent mutation", + "candidateCapabilityId": "CAP:datablock.read", + "coverageCapabilityIds": [ + "CAP:datablock.read" + ], + "mappingState": "CANDIDATE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00002/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00002/armature-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00002/armature-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00002" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00002/manifest.json": "d5bb50be5bbb93f1a212957472e92c71abf80ad8feff5be726c13f4e700751ad", + "tests/golden/M16-GAP-00002/armature-desktop-report.json": "970538d481dd9b2169c5e39e6901e6eeff0d9b2d26b42491837321841bcb4a5e", + "tests/golden/M16-GAP-00002/armature-local-exact-report.json": "eeb775648b186a9728851b8cffa0fa9c41701de4a8142e73f6ad98ef050dc877" + } + }, + { + "task": "M16-GAP-00003", + "gapId": "datablock:Brush", + "evidenceLevel": "L1", + "completionClass": "METADATA_ONLY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": false, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "exact snapshot fields without equivalent mutation", + "candidateCapabilityId": "CAP:datablock.read", + "coverageCapabilityIds": [ + "CAP:datablock.read" + ], + "mappingState": "CANDIDATE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00003/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00003/brush-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00003/brush-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00003" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00003/manifest.json": "65791cc80c18ef1166e3110aceced506371a7df319cac1bb719d02d42ee32b54", + "tests/golden/M16-GAP-00003/brush-desktop-report.json": "ca992c23e2c302ef0b85b91305eabdbf71da6b5bc60c49b71710d145d0787e09", + "tests/golden/M16-GAP-00003/brush-local-exact-report.json": "e48dcad3974b94404d5d9f0c7222b6c45ea5f3b7a467ea2b88691a6ff50e22a6", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00004", + "gapId": "datablock:Camera", + "evidenceLevel": "L1", + "completionClass": "METADATA_ONLY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": false, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "exact snapshot fields without equivalent mutation", + "candidateCapabilityId": "CAP:datablock.read", + "coverageCapabilityIds": [ + "CAP:datablock.read" + ], + "mappingState": "CANDIDATE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00004/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00004/camera-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00004/camera-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00004" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00004/manifest.json": "79edebaf67469f995bd00fd0787b6099b428f0b1098537ba8c9973c26e69575c", + "tests/golden/M16-GAP-00004/camera-desktop-report.json": "b11254b3e0cdeb5e5c39e350ea1d349f5e2991f8c62a5ad28f744c391beab3b5", + "tests/golden/M16-GAP-00004/camera-local-exact-report.json": "a2b2c321efbcf2ed765f2e8b1019fef7e2cd34af872f78474d18594c6cee5d1c", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00005", + "gapId": "datablock:Collection", + "evidenceLevel": "L1", + "completionClass": "METADATA_ONLY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": false, + "wasmChanged": false, + "saveReopen": "EXACT", + "reason": "exact snapshot fields without equivalent mutation", + "candidateCapabilityId": "CAP:datablock.read", + "coverageCapabilityIds": [ + "CAP:datablock.read" + ], + "mappingState": "CANDIDATE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00005/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00005/collection-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00005/collection-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00005" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00005/manifest.json": "877e76659ee722d867d34bf32a2469a823d2274bfbf019a8dd69433e229948e7", + "tests/golden/M16-GAP-00005/collection-desktop-report.json": "6e6bcf8e5575d46c324d51409d19be6f89e5397b1f094f528b164ea72c607887", + "tests/golden/M16-GAP-00005/collection-local-exact-report.json": "2db40433007886b24f5ceb18dccf7470e0c393163838a11f2feb48bab516d740" + } + }, + { + "task": "M16-GAP-00006", + "gapId": "datablock:Curve", + "evidenceLevel": "L1", + "completionClass": "METADATA_ONLY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": false, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "exact snapshot fields without equivalent mutation", + "candidateCapabilityId": "CAP:datablock.read", + "coverageCapabilityIds": [ + "CAP:datablock.read" + ], + "mappingState": "CANDIDATE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00006/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00006/curve-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00006/curve-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00006" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00006/manifest.json": "caeafe5a8db144bbd12e38e45e4ad887134301bbba5363dffe6425eafcf82ab7", + "tests/golden/M16-GAP-00006/curve-desktop-report.json": "85e8eee37daea993653bfa1785f5df19f953c2d013543e8a27743ed74d49d4ff", + "tests/golden/M16-GAP-00006/curve-local-exact-report.json": "048c9fb9116ab2a1b4460c74696340a263cd342ba4886ce56f8b03bef8743e58", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00007", + "gapId": "datablock:Curves", + "evidenceLevel": "L1", + "completionClass": "METADATA_ONLY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": false, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "exact snapshot fields without equivalent mutation", + "candidateCapabilityId": "CAP:datablock.read", + "coverageCapabilityIds": [ + "CAP:datablock.read" + ], + "mappingState": "CANDIDATE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00007/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00007/curves-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00007/curves-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00007" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00007/manifest.json": "4d070c5fd8ceb3462bd79f85798d593f3eda94ef959217c40649c4e9304ff51f", + "tests/golden/M16-GAP-00007/curves-desktop-report.json": "db15e64bfe202720b463ab742cbed2e6ec80b872456b825078afbba7a2540531", + "tests/golden/M16-GAP-00007/curves-local-exact-report.json": "bf093708e23b8318e1f50b925b5c033d66aa8c1f97303174ad2489a82191705f", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00008", + "gapId": "datablock:FreestyleLineStyle", + "evidenceLevel": "L1", + "completionClass": "METADATA_ONLY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": false, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "exact snapshot fields without equivalent mutation", + "candidateCapabilityId": "CAP:datablock.read", + "coverageCapabilityIds": [ + "CAP:datablock.read" + ], + "mappingState": "CANDIDATE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00008/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00008/freestyle-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00008/freestyle-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00008" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00008/manifest.json": "221f8aac9ad8401742bb87ead89c4b02fcefa413c5497e859219137f5ee977aa", + "tests/golden/M16-GAP-00008/freestyle-desktop-report.json": "2c42936cd8e4046b752f7e86949927769d1cb8f2086a2c9ba27eebf61a6f4a89", + "tests/golden/M16-GAP-00008/freestyle-local-exact-report.json": "ab75a7fdfa71a4abd4a5e97f7e726440bde7891163c0b256be0815e1cc51a99a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00009", + "gapId": "datablock:GreasePencil", + "evidenceLevel": "L1", + "completionClass": "METADATA_ONLY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": false, + "wasmChanged": false, + "saveReopen": "EXACT", + "reason": "exact snapshot fields without equivalent mutation", + "candidateCapabilityId": "CAP:datablock.read", + "coverageCapabilityIds": [ + "CAP:datablock.read" + ], + "mappingState": "CANDIDATE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00009/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00009/grease-pencil-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00009/grease-pencil-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00009" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00009/manifest.json": "a445c3af11138702211ae6f299ac56910debd5211048e18af6369c7f6695836d", + "tests/golden/M16-GAP-00009/grease-pencil-desktop-report.json": "6a1145d7447a08f51d751dca797e67f2be7eb12cba052a726c4c2f8ee28b585e", + "tests/golden/M16-GAP-00009/grease-pencil-local-exact-report.json": "94aaf84cc072ef13998517d610740d81d94c14593ba776ea7f4b88c673a0a71f" + } + }, + { + "task": "M16-GAP-00010", + "gapId": "datablock:Lattice", + "evidenceLevel": "L1", + "completionClass": "METADATA_ONLY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "exact snapshot fields without equivalent mutation", + "candidateCapabilityId": "CAP:datablock.read", + "coverageCapabilityIds": [ + "CAP:datablock.read" + ], + "mappingState": "CANDIDATE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00010/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00010/lattice-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00010/lattice-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00010" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00010/manifest.json": "067065f3f81118bfc443d2ffa936a2c8ab2bc0a5df0bc45faab93939de5af6dd", + "tests/golden/M16-GAP-00010/lattice-desktop-report.json": "bb8effdcf18a89794914d88311a598b3285e64f18c402c9cff477ae5700ba089", + "tests/golden/M16-GAP-00010/lattice-local-exact-report.json": "489c9d25a6e4164860f5528944eca0e173f8a7e4130e89404b6fa09da9b469a0", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00011", + "gapId": "datablock:Library", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:datablock.read", + "coverageCapabilityIds": [ + "CAP:datablock.read" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00011/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00011/library-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00011/library-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00011" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00011/manifest.json": "fe2b2d66fc439e21185c72a4171344fd3e3589495fc92b2a5076c1e806319002", + "tests/golden/M16-GAP-00011/library-desktop-report.json": "0bc9032490f2450e99d30fd67fe95b164f8d359ca042d0e0b772ee1a28e39dbd", + "tests/golden/M16-GAP-00011/library-local-exact-report.json": "82c3a7ebb204da9dd8f817f0378374be062993892a4405d01f81c960677f45bf", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00012", + "gapId": "datablock:Light", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:datablock.read", + "coverageCapabilityIds": [ + "CAP:datablock.read" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00012/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00012/light-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00012/light-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00012" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00012/manifest.json": "4ce959dfef228fa6e137ce305495cea7748fa25d4f1a1132e2b43f5162d14d30", + "tests/golden/M16-GAP-00012/light-desktop-report.json": "92bd381ec7b8242de6379d9e266ebbb63bd34c2d28e852d2ac7610eb7e67b8d3", + "tests/golden/M16-GAP-00012/light-local-exact-report.json": "103958f99cc13fccef7acb4128f3707e48580c8ad86813821a2ce40986c5a964", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00013", + "gapId": "datablock:Material", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:datablock.read", + "coverageCapabilityIds": [ + "CAP:datablock.read" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00013/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00013/material-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00013/material-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00013" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00013/manifest.json": "d147d6afd41f531e227cf8bbabddcb5ecc2f4d70d066051a7147d0d31cf2cc73", + "tests/golden/M16-GAP-00013/material-desktop-report.json": "7adfdd70f9b116268301e0bb6cf7e0b88cf8eb2ab20d25c944586df3a9cc000c", + "tests/golden/M16-GAP-00013/material-local-exact-report.json": "229f3fc85518da4539e311e6ca70fd6b156cdcc9ae4c4b901e0de5c895b3d333", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00014", + "gapId": "datablock:Mesh", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:datablock.read", + "coverageCapabilityIds": [ + "CAP:datablock.read" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00014/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00014/mesh-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00014/mesh-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00014" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00014/manifest.json": "432f8744f162eac7b61c3bc36b4548ec0278dc7434574c1826b9a69328170d2a", + "tests/golden/M16-GAP-00014/mesh-desktop-report.json": "e26f0333707fa915b7261f305af413340f9edb26d050a82fb3c6afac12ee2169", + "tests/golden/M16-GAP-00014/mesh-local-exact-report.json": "36066f715b9993f0e789e12a0d29f9c0c9e79e0b5ff5914268e839fa648cb28a", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00015", + "gapId": "datablock:MetaBall", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:datablock.read", + "coverageCapabilityIds": [ + "CAP:datablock.read" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00015/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00015/metaball-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00015/metaball-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00015" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00015/manifest.json": "a123674cd81abfe14bdee9365f64647d5d3413cee91c1a80d3932f03da8014eb", + "tests/golden/M16-GAP-00015/metaball-desktop-report.json": "5b2b7d79397675792bf54b568646a1714f75fab355049e7227f634403345c74c", + "tests/golden/M16-GAP-00015/metaball-local-exact-report.json": "7253a7de7d2aad035ef38cceee33c0bd04ca743f181f28ac740e09799684a636", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00016", + "gapId": "datablock:NodeTree", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:datablock.read", + "coverageCapabilityIds": [ + "CAP:datablock.read" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00016/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00016/nodetree-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00016/nodetree-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00016" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00016/manifest.json": "b4b9dc22b0ad8503922c22667e308ac98ed790ddeedfb4afb0bf979c5eeb6c60", + "tests/golden/M16-GAP-00016/nodetree-desktop-report.json": "b1a6608a41fdbbaeb670dfc0222fbef3b6b73e3728add751564194dda1eb2924", + "tests/golden/M16-GAP-00016/nodetree-local-exact-report.json": "8df89df7ef013b8eed71c19e748eff6b7288772a10f139306a87cb2431eb26b3", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00017", + "gapId": "datablock:Object", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:datablock.read", + "coverageCapabilityIds": [ + "CAP:datablock.read" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00017/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00017/object-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00017/object-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00017" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00017/manifest.json": "a4187052cb2c2366d52addfccfcb109d963635614818ff2dec657d1c4d159034", + "tests/golden/M16-GAP-00017/object-desktop-report.json": "6c9b16af1d114b00df2711b095778eef239c27b55588063d68872434f08631fd", + "tests/golden/M16-GAP-00017/object-local-exact-report.json": "38fbe19a794e05d1a05c0df5de7fca919c229c179ac59c452df08cc0c827ca91", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00018", + "gapId": "datablock:ParticleSettings", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:datablock.read", + "coverageCapabilityIds": [ + "CAP:datablock.read" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00018/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00018/particle-settings-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00018/particle-settings-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00018" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00018/manifest.json": "3fe014750fc574f9af843960d453719772cb5c3a55effedf69e07b4dfc4a18fa", + "tests/golden/M16-GAP-00018/particle-settings-desktop-report.json": "5d1c855ee65c7dc8f715341ed0a2b1269aa1a2f6e3ecde5ca590f393af3042eb", + "tests/golden/M16-GAP-00018/particle-settings-local-exact-report.json": "fb3eb8a193cbbf8ee8b98457042d560977e309ba1496903abf638e93c7641b6f", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp": "1944fbb1153eca61e4f6c8589f16fced60bfac7f4e96da1355428b263651e2ae", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00019", + "gapId": "datablock:PointCloud", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:datablock.read", + "coverageCapabilityIds": [ + "CAP:datablock.read" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00019/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00019/pointcloud-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00019/pointcloud-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00019" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00019/manifest.json": "52c40b96818d694f7b371725c47ca14dd44393f2b18ba8b4d8dcd91cd091634e", + "tests/golden/M16-GAP-00019/pointcloud-desktop-report.json": "c3c874f8f5e95c97f2862d6b2c4711ac78a90f3a5de289bfdb9a5ae0459dc1d7", + "tests/golden/M16-GAP-00019/pointcloud-local-exact-report.json": "e304b3dd36b08a43307f1dc2a70a14cb6b29214d324b18faf8d8225f7342b23d", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00020", + "gapId": "datablock:Scene", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:datablock.read", + "coverageCapabilityIds": [ + "CAP:datablock.read" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00020/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00020/scene-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00020/scene-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00020" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00020/manifest.json": "534feb88a123a8094b7eea06f278a4c58453407e49b8551aefc18638be9b4a02", + "tests/golden/M16-GAP-00020/scene-desktop-report.json": "fc9fdf2a37f36327e7456d3c17dcfd240b67ce27d9d2f0861fde5db237b2675d", + "tests/golden/M16-GAP-00020/scene-local-exact-report.json": "d964c61c0717865a42574c28d5e4fffdcb45c3c962e9bce4608c5f9438828504", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00021", + "gapId": "datablock:Screen", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:datablock.read", + "coverageCapabilityIds": [ + "CAP:datablock.read" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00021/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00021/screen-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00021/screen-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00021" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00021/manifest.json": "97646ca8e822e7357475468c51508689323da71b8ac8c326d4318e56508fc5cd", + "tests/golden/M16-GAP-00021/screen-desktop-report.json": "41a5d58883238d89e4e6ed3805b452bc165632b63e0065109529de3c0e230ecd", + "tests/golden/M16-GAP-00021/screen-local-exact-report.json": "792206b5b046411d921b3b916d2b76222aab39050df8028a64c39437e285023c", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00022", + "gapId": "datablock:Sound", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:datablock.read", + "coverageCapabilityIds": [ + "CAP:datablock.read" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00022/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00022/sound-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00022/sound-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00022" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00022/manifest.json": "48a31af5ae72640d8779e227ebc311a6dcf8e5cd9632b84d32d0e46b4a0249a3", + "tests/golden/M16-GAP-00022/sound-desktop-report.json": "cb23ace7920d6762f931296701a596f3453ccfa7e966447d0efa198b92d65a69", + "tests/golden/M16-GAP-00022/sound-local-exact-report.json": "741b67484c81c156c51b5b88e52f32d5e0114292dcbe689c641d2670cd4e82bd", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00023", + "gapId": "datablock:Speaker", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:datablock.read", + "coverageCapabilityIds": [ + "CAP:datablock.read" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00023/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00023/speaker-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00023/speaker-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00023" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00023/manifest.json": "8641f47fd402a934d13ab788c2d37b42ba08f0590146a6ffc417351c04f1f8b8", + "tests/golden/M16-GAP-00023/speaker-desktop-report.json": "8ee6e52568f2c37098a8f64983f90243b2df69df1c16a0c4eaae855a7e9fad9d", + "tests/golden/M16-GAP-00023/speaker-local-exact-report.json": "7d48447d03e39e5e29f41bf18a95040c5436ed73229cee1bdc32e09f7aae594d", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00024", + "gapId": "datablock:Text", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:datablock.read", + "coverageCapabilityIds": [ + "CAP:datablock.read" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00024/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00024/text-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00024/text-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00024" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00024/manifest.json": "45911dfeb1171728a1cff4731588215ddbb6a8667c6a3be15dfe577115014a6b", + "tests/golden/M16-GAP-00024/text-desktop-report.json": "50006b807fc8f41603e939f9f2748c4d5cacfcaa19a1c60a7270e9f9962b621c", + "tests/golden/M16-GAP-00024/text-local-exact-report.json": "73c22077cbbe47e1effd7c24d310e43010fbd48925587cb00efe507838b4f1eb", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00025", + "gapId": "datablock:Texture", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:datablock.read", + "coverageCapabilityIds": [ + "CAP:datablock.read" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00025/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00025/texture-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00025/texture-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00025" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00025/manifest.json": "7f003dce1a17b77a042f20cf9d915e25c40d8863a60355e09e5ed579b1d6ff5e", + "tests/golden/M16-GAP-00025/texture-desktop-report.json": "ead3d25554f69580a272c3a4c45139632592ba2ca83370c79174683b2c7a982a", + "tests/golden/M16-GAP-00025/texture-local-exact-report.json": "4e503817eb7053370b627cc9a2edb03fc2ac8b8919534a90064133eaf9e0f4e7", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00026", + "gapId": "datablock:Volume", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:datablock.read", + "coverageCapabilityIds": [ + "CAP:datablock.read" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00026/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00026/volume-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00026/volume-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00026" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00026/manifest.json": "0f386b4dd1f3c4b95557cf28ba2f9cba9b9b1696980fa4ba0cac5f3c1528f74c", + "tests/golden/M16-GAP-00026/volume-desktop-report.json": "60c12879158b8a8e548a135778f90618cec8d42b39a95e460398fe6cfe563c86", + "tests/golden/M16-GAP-00026/volume-local-exact-report.json": "649e2bace33f8d9708b3ce0b4979e0cd6e9a0b78b8f4ee2b75776a94e68362be", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00027", + "gapId": "datablock:WindowManager", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:datablock.read", + "coverageCapabilityIds": [ + "CAP:datablock.read" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00027/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00027/window-manager-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00027/window-manager-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00027" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00027/manifest.json": "3e38334b49304cbad31e09bd4fdf09653cc51e7e593702fe37ca5fd584671305", + "tests/golden/M16-GAP-00027/window-manager-desktop-report.json": "2b50759c964b06b38410f44c11679616a8f172d5bc05bd2e5b54a416ec781c15", + "tests/golden/M16-GAP-00027/window-manager-local-exact-report.json": "9e92475873db0072f32d708e6f1468387637fac39008c4928060c39a719a5dc0", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00028", + "gapId": "datablock:WorkSpace", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:datablock.read", + "coverageCapabilityIds": [ + "CAP:datablock.read" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00028/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00028/workspace-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00028/workspace-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00028" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00028/manifest.json": "1dadee9ea17b9df83b65472816dd3a8b4ae46903aebdee7bef0360fc0488b086", + "tests/golden/M16-GAP-00028/workspace-desktop-report.json": "4ab3274ecfcd512964db37e661f8b5e8c53077687094115c11dab4fbe39a12b9", + "tests/golden/M16-GAP-00028/workspace-local-exact-report.json": "3b12cbb0533284f29ad1d0f4659ecd1ce128ae5b24545610819f994252b79e6d", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00029", + "gapId": "datablock:World", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:datablock.read", + "coverageCapabilityIds": [ + "CAP:datablock.read" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00029/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00029/world-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00029/world-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00029" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00029/manifest.json": "8710a48204eeb3f675af46785dd4ef98a34df0ad28c67ffb7c200c32ad4646bf", + "tests/golden/M16-GAP-00029/world-desktop-report.json": "2818f250b67524e0517ad117619a00fbcb09f51141c4f228e3c0095f0ee4afad", + "tests/golden/M16-GAP-00029/world-local-exact-report.json": "22eacfe0c2fa9cdce05b0965fac8f8f59bbd17726a89606678a8d3ed804dbf4d", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00030", + "gapId": "modifier:ARMATURE", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00030/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00030/armature-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00030/armature-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00030" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00030/manifest.json": "0161e57faa251fd8fcda841a1a9e422f5f48675fb16eacea235f54a3705b9fce", + "tests/golden/M16-GAP-00030/armature-modifier-desktop-report.json": "32ca0be514d0f5b02150c23a42e99784903da9c211aebb7f2736229daa069220", + "tests/golden/M16-GAP-00030/armature-modifier-local-exact-report.json": "fad61c1ebb8396b4af4143e7079a7fc1db4bf3f7ff945ce4717650c5493510a5", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00031", + "gapId": "modifier:ARRAY", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00031/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00031/array-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00031/array-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00031" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00031/manifest.json": "15278b1b726062588fef038b49e22b53257884de475955338fba8e9ead370896", + "tests/golden/M16-GAP-00031/array-modifier-desktop-report.json": "739ae5333a5046cd4b0c60333eec89bf4f0bb9508d95022238a173f4a698833f", + "tests/golden/M16-GAP-00031/array-modifier-local-exact-report.json": "df9326e8ddbb5ace859ade67dff067229c55f19536c568ee6e102d981971c17a", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00032", + "gapId": "modifier:BEVEL", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00032/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00032/bevel-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00032/bevel-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00032" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00032/manifest.json": "c8a77df1bdbdade708963c6555293b2d0914708c43d7725d35e17f96d7c77fa0", + "tests/golden/M16-GAP-00032/bevel-modifier-desktop-report.json": "a6e1e88a9e418bb18b2a323285c0d05a07e6c038bf2cf4f7e04bfa188900daf3", + "tests/golden/M16-GAP-00032/bevel-modifier-local-exact-report.json": "318d68f88e3838fc3920d33a8d1b2995411de39c9c2f39d97e1f2c3b4e7a7c1e", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00033", + "gapId": "modifier:BOOLEAN", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00033/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00033/boolean-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00033/boolean-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00033" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00033/manifest.json": "f7a5afa579fe997e0caea6808dea538dbd118552487c5d194dc266dd57631e40", + "tests/golden/M16-GAP-00033/boolean-modifier-desktop-report.json": "2f0c9dfb183f39a65ef018d1618ef6f12fe05ada0a6c7ff40011491686ea00c7", + "tests/golden/M16-GAP-00033/boolean-modifier-local-exact-report.json": "aa33f396b5910e3829c1965e62c80bd1267ac764a58862b72be555ebd5bd1b0d", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00034", + "gapId": "modifier:BUILD", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00034/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00034/build-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00034/build-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00034" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00034/manifest.json": "f367673395e03e3637299c0e46d37869d1c402e51c4ba6d2683d551f5124b40f", + "tests/golden/M16-GAP-00034/build-modifier-desktop-report.json": "b05d06b2408cfa2b0509489434d80489e11d967748f48639d1d50febbcd64974", + "tests/golden/M16-GAP-00034/build-modifier-local-exact-report.json": "6e5e3f89148decd1996802bddf903ee704700308be90e1af9c3c66e7e58796fa", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00035", + "gapId": "modifier:CAST", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00035/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00035/cast-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00035/cast-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00035" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00035/manifest.json": "73ae0997d54e74f0da492a893f1b769d0eaaca1b4e686fc56e2b1558f583fdc4", + "tests/golden/M16-GAP-00035/cast-modifier-desktop-report.json": "46d920371f2b315034286e20db585b5830edde5c12f97470db05141acdfa3975", + "tests/golden/M16-GAP-00035/cast-modifier-local-exact-report.json": "56d0c12614b99a60617ca6b3aaa8308c103b0d926c67ffa6d374713f1939923c", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00036", + "gapId": "modifier:CLOTH", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00036/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00036/cloth-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00036/cloth-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00036" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00036/manifest.json": "4af464a4477881eb9b61336d5d9bdfc844c48f2f89d5350312914e051d911f7d", + "tests/golden/M16-GAP-00036/cloth-modifier-desktop-report.json": "bcfa83207cc5d5d6d971c41d8bb649d272c7e8f03e7499dc0efa4f3bbcb4d1ef", + "tests/golden/M16-GAP-00036/cloth-modifier-local-exact-report.json": "37344e3d5c930fb6815016b03432a6f86a2e763a89546e2e435e0f957f99270a", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00037", + "gapId": "modifier:COLLISION", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00037/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00037/collision-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00037/collision-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00037" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00037/manifest.json": "c1f129a08e7f7eeb563d48ef9c2c4f427d199aaa42c3e8d7207b2c5cfaf58043", + "tests/golden/M16-GAP-00037/collision-modifier-desktop-report.json": "be458864a8ce628d18002e69cbba9d524377fadff0bb7a3c3a6ed07a6fcb6bc0", + "tests/golden/M16-GAP-00037/collision-modifier-local-exact-report.json": "3352147756f312df1ffb4b9c889347e74403147cafb770128c6fbd61810acc8a", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00038", + "gapId": "modifier:CORRECTIVE_SMOOTH", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00038/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00038/corrective-smooth-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00038/corrective-smooth-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00038" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00038/manifest.json": "b4b4a6d0cc09fbb936e317dcfbee634b8be42bbd61083eeaca825c19964f1d48", + "tests/golden/M16-GAP-00038/corrective-smooth-modifier-desktop-report.json": "81b0dac10d007f32a7ccd1939fb82494ad230cfd09a5d5e3d9051716631a6012", + "tests/golden/M16-GAP-00038/corrective-smooth-modifier-local-exact-report.json": "e0f51299b53f2694cc0421d249acc633d6d3db07d2302d1358927aab15981d0b", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00039", + "gapId": "modifier:CURVE", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00039/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00039/curve-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00039/curve-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00039" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00039/manifest.json": "5412c2739a8c3af04d75998570b9aa81209166f6ac9676a22742e4ecb4a0f7d6", + "tests/golden/M16-GAP-00039/curve-modifier-desktop-report.json": "7758f93e53d1b01a80e7cc2d4ce4948cadfb6882a2eec0d34e7e9fbdc7ac69bf", + "tests/golden/M16-GAP-00039/curve-modifier-local-exact-report.json": "7b3cf6ec8eec1a1b0c8d630578bfa09b29d8e8597ed860aa98737e7c7798cf91", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00040", + "gapId": "modifier:DATA_TRANSFER", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00040/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00040/data-transfer-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00040/data-transfer-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00040" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00040/manifest.json": "eb2a3ba8b8b853364a898b9896616c793f6b87799ca54b62ffd8294242066eb8", + "tests/golden/M16-GAP-00040/data-transfer-modifier-desktop-report.json": "3b75a6318947c1c18b04af6a05bc275aac4f6fde4352cc249c431c64fde7174d", + "tests/golden/M16-GAP-00040/data-transfer-modifier-local-exact-report.json": "45c8b9c2b0a07902e7680fc44b648cd0fc349e4a248c52824c3ed70debb0c9a1", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00041", + "gapId": "modifier:DECIMATE", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00041/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00041/decimate-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00041/decimate-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00041" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00041/manifest.json": "2d9011895439fe150615c8c5995c85a4fb23ffe18933a211d5a796f81f9136e2", + "tests/golden/M16-GAP-00041/decimate-modifier-desktop-report.json": "a056e81f2d0dceca465b185060d9874f4e0a10099b0820a42e50de3c20f56433", + "tests/golden/M16-GAP-00041/decimate-modifier-local-exact-report.json": "ac3efd1614cd440aff79d370f61a8243a69feac82d9aa4afb2c2d2ac2196d811", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00042", + "gapId": "modifier:DISPLACE", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00042/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00042/displace-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00042/displace-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00042" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00042/manifest.json": "15c2de3edbc26b4ebfb0cbc999de64ea28684bd938c2b04c25a75f36ebc45936", + "tests/golden/M16-GAP-00042/displace-modifier-desktop-report.json": "8b5e69f2643e33607c36c6e786477d13c962eb041f64044be4b5d1277b2ad4a3", + "tests/golden/M16-GAP-00042/displace-modifier-local-exact-report.json": "f29ae1fd8d9dd004194347d9ab9d138d9c10db71ffae8baba554748de835fe09", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00043", + "gapId": "modifier:DYNAMIC_PAINT", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00043/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00043/dynamic-paint-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00043/dynamic-paint-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00043" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00043/manifest.json": "f5e927b1077ce971bb8f4a2c8d936586ea29dbf03b716fb2368ea2f3031018d7", + "tests/golden/M16-GAP-00043/dynamic-paint-modifier-desktop-report.json": "d15d596c1c2fbf176c59b7fb933f6a2ceeb09ff578ba2cf894c12deec480471b", + "tests/golden/M16-GAP-00043/dynamic-paint-modifier-local-exact-report.json": "e04b9f0427010f85ffd5119eeb2d926ad0fa5d7099c67807ba46b6e66db5b0f3", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00044", + "gapId": "modifier:EDGE_SPLIT", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00044/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00044/edge-split-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00044/edge-split-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00044" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00044/manifest.json": "bb08a7df64ec728be5865068d93e2b9fb7731ca44ab7c6dedc44297e3e8b50dd", + "tests/golden/M16-GAP-00044/edge-split-modifier-desktop-report.json": "4f741f923ed60af4142691643fb70cd650b3e7c12507002595d8f52d78a41a61", + "tests/golden/M16-GAP-00044/edge-split-modifier-local-exact-report.json": "114e41e7c6f3238d4888b61f2d9fd59b37d4a9a4f2f7485fd1a9b9a48c8ba9ac", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00045", + "gapId": "modifier:EXPLODE", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00045/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00045/explode-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00045/explode-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00045" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00045/manifest.json": "bf93ad2822faa087a2d19b85f531dc555d5d8e19e9125b0a42436b36f258dfe0", + "tests/golden/M16-GAP-00045/explode-modifier-desktop-report.json": "6f2da8d3cc19177ceedef1e31d2ddd2bb73e061a40164393fb717050b442b43c", + "tests/golden/M16-GAP-00045/explode-modifier-local-exact-report.json": "fdd2bfc6407872afbb3f1393b79c1d551f030f485ce4169863b07742c994122f", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00046", + "gapId": "modifier:FLUID", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00046/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00046/fluid-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00046/fluid-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00046" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00046/manifest.json": "23edd47f092950de5ce76737af3c52bfaf4174c8d21a46573c85eb999392605a", + "tests/golden/M16-GAP-00046/fluid-modifier-desktop-report.json": "5e2140d9a0e8089c6fe1f31f34bfe7fa8473f642556051598436cb78636d451b", + "tests/golden/M16-GAP-00046/fluid-modifier-local-exact-report.json": "3e0adc749a8f15c52231fdd37afd01246b21d0c5630be569a0756b4f7d05194c", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00047", + "gapId": "modifier:GREASE_PENCIL_ARMATURE", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00047/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00047/grease-pencil-armature-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00047/grease-pencil-armature-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00047" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00047/manifest.json": "0d79fc3e35cc746d5aa68493224b8543385cc7462124a026a6e37674c5508686", + "tests/golden/M16-GAP-00047/grease-pencil-armature-modifier-desktop-report.json": "aaa319ab7fc68ba6763c29b97659cb3a4f71425df5edd93dbd9aa5b998e96c1a", + "tests/golden/M16-GAP-00047/grease-pencil-armature-modifier-local-exact-report.json": "0e343bf170e7cb7c0b61a20308a7034f3ced1572580c4f94074e162e14bfcf43", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00048", + "gapId": "modifier:GREASE_PENCIL_ARRAY", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00048/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00048/grease-pencil-array-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00048/grease-pencil-array-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00048" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00048/manifest.json": "617109aa31068d87bb9eaf53f41b7bb1c939e321311b67ee9ea3c016e4702927", + "tests/golden/M16-GAP-00048/grease-pencil-array-modifier-desktop-report.json": "caf437b45e130c12406ce3ee8d699d7266673f8e595d63d017f5482c474f29f3", + "tests/golden/M16-GAP-00048/grease-pencil-array-modifier-local-exact-report.json": "e583037d0c80eb40b6e511cb2b11feae3c9f5f0e1c0374727f5af6c8c1b0c6b5", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00049", + "gapId": "modifier:GREASE_PENCIL_BUILD", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00049/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00049/grease-pencil-build-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00049/grease-pencil-build-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00049" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00049/manifest.json": "50727de0f8874046a31b080579ac540c1a51c9d8ca7ea4b049b4ebb35c2387d1", + "tests/golden/M16-GAP-00049/grease-pencil-build-modifier-desktop-report.json": "e9d70bb6ba43a387d29683473bfc8286ab9818f771e796194a0344ed31bd00cb", + "tests/golden/M16-GAP-00049/grease-pencil-build-modifier-local-exact-report.json": "b1df18f0aafe0a47ef55b7fd64ac5935020a99e45e58708cd7958d919d8fa558", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00050", + "gapId": "modifier:GREASE_PENCIL_COLOR", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00050/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00050/grease-pencil-color-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00050/grease-pencil-color-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00050" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00050/manifest.json": "d4a8a34ebcca14b951df820110372908c4ac36de416b392a7427350a0cad41ec", + "tests/golden/M16-GAP-00050/grease-pencil-color-modifier-desktop-report.json": "79e44b5d0443f81d2ba334902990f73c20601b4c15e890aff1b73fae4879f771", + "tests/golden/M16-GAP-00050/grease-pencil-color-modifier-local-exact-report.json": "73126cf9fc415f9eccf9538d1d23055857fa9c772e1b15721470e1653bc2ce73", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00051", + "gapId": "modifier:GREASE_PENCIL_DASH", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00051/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00051/grease-pencil-dash-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00051/grease-pencil-dash-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00051" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00051/manifest.json": "c2cca0351d60235aba3b1194ba293930602f7c45b9733571dd3f8559f23a0af0", + "tests/golden/M16-GAP-00051/grease-pencil-dash-modifier-desktop-report.json": "0c87ebea369c798bbb2f0f70f698066e482ce372eda0042008f9993cfe116bf6", + "tests/golden/M16-GAP-00051/grease-pencil-dash-modifier-local-exact-report.json": "6da74df88b5ed5b1cb7cb64420020924143e30cad7c8f1efc11e62fd39b33dbb", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00052", + "gapId": "modifier:GREASE_PENCIL_ENVELOPE", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00052/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00052/grease-pencil-envelope-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00052/grease-pencil-envelope-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00052" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00052/manifest.json": "25f42db0f2ef079680fd7242eca04d65936d1919b5dbc12d28af995b8c0cf8d3", + "tests/golden/M16-GAP-00052/grease-pencil-envelope-modifier-desktop-report.json": "4ce0e867ab2f8346e6121060c3f18c9a1f48e97c67dd5b9362c2eaca6e7e5f78", + "tests/golden/M16-GAP-00052/grease-pencil-envelope-modifier-local-exact-report.json": "af02545ba19b116b4ce39b87aaab3f8e3e33504164694c04b1ec6da7f159ee59", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00053", + "gapId": "modifier:GREASE_PENCIL_HOOK", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00053/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00053/grease-pencil-hook-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00053/grease-pencil-hook-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00053" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00053/manifest.json": "accba5dff081a27e46dde3c7ef71a12b16d721de37cc16545ced7daeec1bab13", + "tests/golden/M16-GAP-00053/grease-pencil-hook-modifier-desktop-report.json": "67b0ddf84c0d9690832b8aeae76b503572bf9ac725123254a95a351e55075c54", + "tests/golden/M16-GAP-00053/grease-pencil-hook-modifier-local-exact-report.json": "eb44b966e835d186f5f05420377a00895764cee2b5cb379f3704f89aed334d16", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00054", + "gapId": "modifier:GREASE_PENCIL_LATTICE", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00054/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00054/grease-pencil-lattice-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00054/grease-pencil-lattice-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00054" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00054/manifest.json": "ff79aa2ad8147a96a202a228890b62efa758667d25d25532153b0cbd0678de73", + "tests/golden/M16-GAP-00054/grease-pencil-lattice-modifier-desktop-report.json": "565931e3614f74c666c375ae3d879ca85b4274d1bc980cd5480c877593d23a63", + "tests/golden/M16-GAP-00054/grease-pencil-lattice-modifier-local-exact-report.json": "4d0bda74ab6c6667530fa5f64fff6944c316449b3c9f1c25d6c623d7523a5ed1", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00055", + "gapId": "modifier:GREASE_PENCIL_LENGTH", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00055/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00055/grease-pencil-length-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00055/grease-pencil-length-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00055" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00055/manifest.json": "82e79e9825e0713c1d594f39a12330a26b866bb93188f29bbebdfa9ae95f44c2", + "tests/golden/M16-GAP-00055/grease-pencil-length-modifier-desktop-report.json": "367ea4ff3cef4d5ec0e07b3f69f2f5a15d2604753b8efe9083775e97854af2b6", + "tests/golden/M16-GAP-00055/grease-pencil-length-modifier-local-exact-report.json": "5715882f691e9022fc3049f1937b90e39d9e7702583f9a946b7aabf22e2093d5", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00056", + "gapId": "modifier:GREASE_PENCIL_MIRROR", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00056/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00056/grease-pencil-mirror-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00056/grease-pencil-mirror-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00056" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00056/manifest.json": "d2ff5df986a86d7016cf0ed7a33b0dfc459edfce944d0bdd4c511f98c35203dc", + "tests/golden/M16-GAP-00056/grease-pencil-mirror-modifier-desktop-report.json": "60122c5212975d2a0de279415ea35699fa10c7c3b350ef991a2ef04c096c4e3c", + "tests/golden/M16-GAP-00056/grease-pencil-mirror-modifier-local-exact-report.json": "ac905bdcf602af4f8d63e62ea78f251d737052c00aa4454807aeaa648344ea89", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00057", + "gapId": "modifier:GREASE_PENCIL_MULTIPLY", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00057/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00057/grease-pencil-multiply-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00057/grease-pencil-multiply-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00057" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00057/manifest.json": "95bb534062da030c2afd73bb0616b60a30a4423932b1ea550afee721514f4d1a", + "tests/golden/M16-GAP-00057/grease-pencil-multiply-modifier-desktop-report.json": "c891fa44f7623a0eb1dd8c848cace0f8289c0c181a03a400fce36aa1a020069c", + "tests/golden/M16-GAP-00057/grease-pencil-multiply-modifier-local-exact-report.json": "5e9c1ab5db3f884cb1f78ce212e2714ea8500ddcc6691774092a745a71013e10", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00058", + "gapId": "modifier:GREASE_PENCIL_NOISE", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00058/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00058/grease-pencil-noise-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00058/grease-pencil-noise-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00058" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00058/manifest.json": "8f437bb7fd79c3337b74f358ec0035760085b7c57a705a4e83d83ec0957a8f7a", + "tests/golden/M16-GAP-00058/grease-pencil-noise-modifier-desktop-report.json": "04c853b535d820f10859c47d51901fbbf51c4a5cb7f7387cbf59bbebfc108a2c", + "tests/golden/M16-GAP-00058/grease-pencil-noise-modifier-local-exact-report.json": "ce892ec22b69bd93060fcd8d29d91a97c68f75361bf9b782d73e502ecb7a6f47", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00059", + "gapId": "modifier:GREASE_PENCIL_OFFSET", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00059/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00059/grease-pencil-offset-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00059/grease-pencil-offset-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00059" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00059/manifest.json": "2c5f2a29f313ac9d0f1515abf1d36bf28c14e81f95445c7bc50d07937bb95212", + "tests/golden/M16-GAP-00059/grease-pencil-offset-modifier-desktop-report.json": "4119db33aad242414ed52d9e6614bdede6e0b4a551604a6886e01dc5bf90ea4e", + "tests/golden/M16-GAP-00059/grease-pencil-offset-modifier-local-exact-report.json": "e9ef09a250821a1dd7f10c574f1911f534baf65515e879f9ac423fb4877c7b5b", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00060", + "gapId": "modifier:GREASE_PENCIL_OPACITY", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00060/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00060/grease-pencil-opacity-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00060/grease-pencil-opacity-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00060" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00060/manifest.json": "6d6118d4cd67de864ae1f47a0cdeea7cbb3a76e6350dcbb7de6ad1dd96fa1187", + "tests/golden/M16-GAP-00060/grease-pencil-opacity-modifier-desktop-report.json": "678e7c0028c38f2a84cee2377ecfd7de1d1303561e75fcf8f380359338f6b4b8", + "tests/golden/M16-GAP-00060/grease-pencil-opacity-modifier-local-exact-report.json": "b62b13a20f921815f9fc4b32b406598a1a08d701cee27e07ee3a0009dda2a2f5", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00061", + "gapId": "modifier:GREASE_PENCIL_OUTLINE", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00061/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00061/grease-pencil-outline-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00061/grease-pencil-outline-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00061" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00061/manifest.json": "da6f7278b8e076bd393e510824d509aaff34504c86686253a073f8b1d6d3a900", + "tests/golden/M16-GAP-00061/grease-pencil-outline-modifier-desktop-report.json": "2a6994ca45c8262a592cedb8deb8f026d366ee2df3bfe6ea0d375e8e214ba6c0", + "tests/golden/M16-GAP-00061/grease-pencil-outline-modifier-local-exact-report.json": "f490b2dc9b173a3172529ab529889a3292fe39f0cbd3951baaee8566464a0c43", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00062", + "gapId": "modifier:GREASE_PENCIL_SHRINKWRAP", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00062/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00062/grease-pencil-shrinkwrap-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00062/grease-pencil-shrinkwrap-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00062" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00062/manifest.json": "57a29abdbf1fa85718e425515218352fe5535ba482ee4f8d19bbcbc140fd1764", + "tests/golden/M16-GAP-00062/grease-pencil-shrinkwrap-modifier-desktop-report.json": "6631f00a27489de3b3d5cd2288f1a1b395b3a7295f9fc4b72c2091d5ce333a45", + "tests/golden/M16-GAP-00062/grease-pencil-shrinkwrap-modifier-local-exact-report.json": "a00004d09bc0170a0f3148197dd3dd24fb39fac60c723214cce73e527c998e8c", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00063", + "gapId": "modifier:GREASE_PENCIL_SIMPLIFY", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00063/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00063/grease-pencil-simplify-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00063/grease-pencil-simplify-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00063" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00063/manifest.json": "78367a59db7a5a0cea99cf8de1f22a15b43907dc4dfbad9a571e0dafcc1f3257", + "tests/golden/M16-GAP-00063/grease-pencil-simplify-modifier-desktop-report.json": "14de85a86a150ace281a6b632a5cdf3076104c623b3d313201a2efeb5bac6695", + "tests/golden/M16-GAP-00063/grease-pencil-simplify-modifier-local-exact-report.json": "6214778590468549ab03aa4bb67dcad6ae2f22d151dc6012c9e293e01ffa9dbe", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00064", + "gapId": "modifier:GREASE_PENCIL_SMOOTH", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00064/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00064/grease-pencil-smooth-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00064/grease-pencil-smooth-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00064" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00064/manifest.json": "b24c7501e8a3e6132c8ae5b4c294b3883afdc25272028155fa3d480b222c03dc", + "tests/golden/M16-GAP-00064/grease-pencil-smooth-modifier-desktop-report.json": "b58983c079c8271ab9d5230e478d36e16d49102826178e90566cd0a8913dd325", + "tests/golden/M16-GAP-00064/grease-pencil-smooth-modifier-local-exact-report.json": "da42e7440e07f1033f98fbd26274654b4f516821fa0e4c08db68df9468598564", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00065", + "gapId": "modifier:GREASE_PENCIL_SUBDIV", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00065/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00065/grease-pencil-subdiv-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00065/grease-pencil-subdiv-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00065" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00065/manifest.json": "2e0836aca7b1ca4d585f777ad7ce3b309eec4956ea50730ec87c2d3340a66361", + "tests/golden/M16-GAP-00065/grease-pencil-subdiv-modifier-desktop-report.json": "e4e86404702f4b46f207c66070adcc0a52e580aff6106f5404c97ab16351a2d2", + "tests/golden/M16-GAP-00065/grease-pencil-subdiv-modifier-local-exact-report.json": "3e09deb0756dd36c85e53e6011f3ca011c9ad4a237b577d529238675a9dd7213", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00066", + "gapId": "modifier:GREASE_PENCIL_TEXTURE", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00066/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00066/grease-pencil-texture-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00066/grease-pencil-texture-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00066" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00066/manifest.json": "525251e16a1e5fd4a6f18e1352ce3def2acfa4d61fac81ded0cbd50c3baab77c", + "tests/golden/M16-GAP-00066/grease-pencil-texture-modifier-desktop-report.json": "d3900098ba128c202ff28323c6e2945d78dd3c35512bbc2c5d611493b8b1e42d", + "tests/golden/M16-GAP-00066/grease-pencil-texture-modifier-local-exact-report.json": "b9831dad063cdfaa81aeb8894776b914652c6542d2e0a244cef321547e183068", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00067", + "gapId": "modifier:GREASE_PENCIL_THICKNESS", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00067/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00067/grease-pencil-thickness-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00067/grease-pencil-thickness-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00067" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00067/manifest.json": "713236f488a1223da8a3ab9b12feb708f0a72d3b248835cd15dde3aedead558e", + "tests/golden/M16-GAP-00067/grease-pencil-thickness-modifier-desktop-report.json": "664ec1a6c595fcb5fac0888ae866f70a48ef5d057035c5c614ed0d97a9d08108", + "tests/golden/M16-GAP-00067/grease-pencil-thickness-modifier-local-exact-report.json": "6e1eee5cf87df42fc94c144f5171f9653df4196372eccd001cef6907ef518e94", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00068", + "gapId": "modifier:GREASE_PENCIL_TIME", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00068/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00068/grease-pencil-time-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00068/grease-pencil-time-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00068" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00068/manifest.json": "ad20e02f391978bd368aeaee2f3916ca0e02a7ccad176ae84ab3dacdac497526", + "tests/golden/M16-GAP-00068/grease-pencil-time-modifier-desktop-report.json": "761dd7ad0a350e9f3c175575cdb4d71f5bd0a56e1872626148d73c9a7229468f", + "tests/golden/M16-GAP-00068/grease-pencil-time-modifier-local-exact-report.json": "5cc9edb3f0fd508b25730b4d32deaa9a804381d7fbd8b4007af5e7782d27c590", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00069", + "gapId": "modifier:GREASE_PENCIL_TINT", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00069/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00069/grease-pencil-tint-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00069/grease-pencil-tint-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00069" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00069/manifest.json": "fe052beb8094bd3e724ce48eba07404e1df66ba7aca2b43a10f7dfa31fe17de2", + "tests/golden/M16-GAP-00069/grease-pencil-tint-modifier-desktop-report.json": "e66d9b22a901a41e9c7b0d460f970722192550f75a4f3f54612b97fcf9ed9238", + "tests/golden/M16-GAP-00069/grease-pencil-tint-modifier-local-exact-report.json": "44d113b3d6c291a18401d6dadbf915dfb907413c8ed96e092011484879f5e050", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00070", + "gapId": "modifier:GREASE_PENCIL_VERTEX_WEIGHT_ANGLE", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00070/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00070/grease-pencil-vertex-weight-angle-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00070/grease-pencil-vertex-weight-angle-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00070" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00070/manifest.json": "45a2fc74673bec1da5778727ccfbc4d8933fb17c5b172e4f03eec89eb91dbb6c", + "tests/golden/M16-GAP-00070/grease-pencil-vertex-weight-angle-modifier-desktop-report.json": "0c3fdcbf998064e77023d66239a6f0e9763cba14aced60d6d71bfd8968844e66", + "tests/golden/M16-GAP-00070/grease-pencil-vertex-weight-angle-modifier-local-exact-report.json": "79d31b01cb87a8a380d4e84ea69e9b3f19b5109029ad4c1193d15ab6058b8d01", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00071", + "gapId": "modifier:GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00071/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00071/grease-pencil-vertex-weight-proximity-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00071/grease-pencil-vertex-weight-proximity-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00071" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00071/manifest.json": "9f4f9479ec74c2469b012cfa855d0f648e3decf4cfb805726cdc1a0059889ad5", + "tests/golden/M16-GAP-00071/grease-pencil-vertex-weight-proximity-modifier-desktop-report.json": "bfb4354d4b25894879f6cd15f1f9758eeebc88aef6c45237ffebd16bb670ffdd", + "tests/golden/M16-GAP-00071/grease-pencil-vertex-weight-proximity-modifier-local-exact-report.json": "08a439a692bc167a2dff093527586132b3e1baca4a8d7be4dfd47cfe18a04bd9", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00072", + "gapId": "modifier:HOOK", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00072/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00072/hook-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00072/hook-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00072" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00072/manifest.json": "e25a5f9e4127f3565ac1c1530f6b8cb03b3e317302d5b0290d5ab37f35addcd3", + "tests/golden/M16-GAP-00072/hook-modifier-desktop-report.json": "819375aad6fbf6814a1fe85802472d12df216a205067f5ee0e132a8d383f247d", + "tests/golden/M16-GAP-00072/hook-modifier-local-exact-report.json": "929d2a3e679e4972149ffac8ff1a7d692452cb9b1029418eea86434aa8d4c6d1", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00073", + "gapId": "modifier:LAPLACIANDEFORM", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00073/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00073/laplaciandeform-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00073/laplaciandeform-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00073" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00073/manifest.json": "76a891c41771ada18ed09f97e9da62e13671a71d08795a7a912c84f3a6d658d3", + "tests/golden/M16-GAP-00073/laplaciandeform-modifier-desktop-report.json": "20b1fa4731e697c539cbeda56daf567a39ea0e4157519480400d3aa0116b5d9c", + "tests/golden/M16-GAP-00073/laplaciandeform-modifier-local-exact-report.json": "4661ab5868a5664206f47bebbc93f6f0cc4dcaab362f45d59540c8900a3c4ca2", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00074", + "gapId": "modifier:LAPLACIANSMOOTH", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00074/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00074/laplaciansmooth-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00074/laplaciansmooth-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00074" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00074/manifest.json": "f1e608b84b6de406020caa053720ad0ad51fb3a4e28a1e3d1eaa64fe8fdb7bf8", + "tests/golden/M16-GAP-00074/laplaciansmooth-modifier-desktop-report.json": "9aa6928bb41744895ec5d471a3c290d5880d75357f556c310f692dfbf0c587a6", + "tests/golden/M16-GAP-00074/laplaciansmooth-modifier-local-exact-report.json": "0ae4447208034f80469647e51469225032cb0e8f40b6e887d2aa66888d8b9d65", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00075", + "gapId": "modifier:LATTICE", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00075/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00075/lattice-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00075/lattice-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00075" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00075/manifest.json": "f2a76a5ad7cf2c12d41a1ff7502fa7693168b3664a00634ba237d3c2701967ce", + "tests/golden/M16-GAP-00075/lattice-modifier-desktop-report.json": "c06a312fdf79abca4eb6560e271e62adfdc79e4b8fd61db57cf53c148195cd6a", + "tests/golden/M16-GAP-00075/lattice-modifier-local-exact-report.json": "62bf9e34273df25cddda1f64b614626cac4163e861c253cb44b39624390266f5", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00076", + "gapId": "modifier:LINEART", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00076/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00076/lineart-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00076/lineart-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00076" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00076/manifest.json": "fe0e758e8c6918cfb39b57347db5df6cbe7ffa4fab7b83faf23188cd9975767c", + "tests/golden/M16-GAP-00076/lineart-modifier-desktop-report.json": "dfc59d7f349a96352e9b7147cf2745754664513b17f8541828552cd04d6e2434", + "tests/golden/M16-GAP-00076/lineart-modifier-local-exact-report.json": "b97956de8af04e761d23e69c7c40f31ddfafe0fa54e600123154c77a74ee41f1", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00077", + "gapId": "modifier:MASK", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00077/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00077/mask-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00077/mask-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00077" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00077/manifest.json": "cf386d80ba5868a31642ea35a4ec07a04ee685b0298a118f3caf004d0cd8f6f8", + "tests/golden/M16-GAP-00077/mask-modifier-desktop-report.json": "b727c810beee272ab8f70754d50aed53404ec5a5d9147f912d6f880d1554576f", + "tests/golden/M16-GAP-00077/mask-modifier-local-exact-report.json": "ef4b6d8b4c1fb2d336fafebe4f232478704d442d8b166305d8c0dbed0523bed6", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00078", + "gapId": "modifier:MESH_CACHE", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00078/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00078/mesh-cache-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00078/mesh-cache-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00078" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00078/manifest.json": "58f4b06e4b035eb38e981cffad329ce2984b4eb5937c3d87fb028a12f2d6454c", + "tests/golden/M16-GAP-00078/mesh-cache-modifier-desktop-report.json": "4f78ab7adae556fb49dfde5b4c4e95f9bb0c2777c8425bc48d410955d9686d46", + "tests/golden/M16-GAP-00078/mesh-cache-modifier-local-exact-report.json": "6d6baa891a387fe56c4ee27c3bc5bde6ecb28f6a6e71f49c1560fe04b26d24df", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00079", + "gapId": "modifier:MESH_DEFORM", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00079/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00079/mesh-deform-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00079/mesh-deform-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00079" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00079/manifest.json": "d6cd1bb1d43f480118ac820a70b649186458828d4b85a4da25e77b20d7ea8618", + "tests/golden/M16-GAP-00079/mesh-deform-modifier-desktop-report.json": "8f7ae61828ea8395a3dd1a5f01ccef9e634b03cf831b2d80f891c2db434190af", + "tests/golden/M16-GAP-00079/mesh-deform-modifier-local-exact-report.json": "6a2be2737f7510539d27d0504b47012dc801b5a3b428f1ab6f2264f4df2ded87", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00080", + "gapId": "modifier:MESH_SEQUENCE_CACHE", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00080/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00080/mesh-sequence-cache-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00080/mesh-sequence-cache-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00080" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00080/manifest.json": "0f675aa76f8d2639d378c7592a5f141d55606fb3781ec79a407fac04a4d6f279", + "tests/golden/M16-GAP-00080/mesh-sequence-cache-modifier-desktop-report.json": "0dfdf7f2e779c96397d0686f0d8ef9ba21e017c80a47da1b04639721942f3b2a", + "tests/golden/M16-GAP-00080/mesh-sequence-cache-modifier-local-exact-report.json": "086758c58ae3b0b7124fd35b802d8ec3ad3254ff8e71f668ff976e05725a3a31", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00081", + "gapId": "modifier:MESH_TO_VOLUME", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00081/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00081/mesh-to-volume-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00081/mesh-to-volume-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00081" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00081/manifest.json": "0e345daa5f99ca7f0de9b0a1a8da19c47c8e8cd6dea23e405bb2a0577cab73cf", + "tests/golden/M16-GAP-00081/mesh-to-volume-modifier-desktop-report.json": "0a485f27d6f6246d74e3737b8b945715fca96f343a675257dab9abb70319bb1d", + "tests/golden/M16-GAP-00081/mesh-to-volume-modifier-local-exact-report.json": "af033e5bd3d0491f464db098661621f0ac32afdcbed61a76614f4f06125559aa", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00082", + "gapId": "modifier:MIRROR", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00082/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00082/mirror-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00082/mirror-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00082" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00082/manifest.json": "d4872a8221c08c06039ed197e2ddc03dd31a5a01aa4a900f2c81dd73b386d96c", + "tests/golden/M16-GAP-00082/mirror-modifier-desktop-report.json": "cc149f9c8f6f3b59ebf0b07f891d8b023d889cf2f281a7f1fce9f0f62b72e2ee", + "tests/golden/M16-GAP-00082/mirror-modifier-local-exact-report.json": "a0d7259bba97e30b97d57b776e3b067cd4bbd7ed734fcd8867c24efa4b5c469d", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00083", + "gapId": "modifier:MULTIRES", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00083/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00083/multires-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00083/multires-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00083" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00083/manifest.json": "dc0567938d3c94db38ce40ad8aab518fccc9cad7d71955140c18c4c783f8cfb0", + "tests/golden/M16-GAP-00083/multires-modifier-desktop-report.json": "ad00dd2b8cadad79107f8433f06324f05ff5cb9672ca31bbab358813a48d3eaf", + "tests/golden/M16-GAP-00083/multires-modifier-local-exact-report.json": "d6ec0b7cf1eba19e79174c8d137ec1dd92eca40b7438f1739ce74df18bf712bb", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00084", + "gapId": "modifier:NODES", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00084/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00084/nodes-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00084/nodes-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00084" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00084/manifest.json": "5871c44b3943ca93139831b8af2554464cfa783ea2bbcba244c684b6bcd56ef8", + "tests/golden/M16-GAP-00084/nodes-modifier-desktop-report.json": "d5de72e4e7fd671474d0a385818337063952eecb3e765a694ddda811a420c9fc", + "tests/golden/M16-GAP-00084/nodes-modifier-local-exact-report.json": "987e987122bb5eac6f0208b0d453b59aa0b1e46888c17c68db1501fd04ed2432", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00085", + "gapId": "modifier:NORMAL_EDIT", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00085/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00085/normal-edit-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00085/normal-edit-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00085" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00085/manifest.json": "161776b49806192cf1739b43858aee096ddef7be8e258f7ef725093f1a986a77", + "tests/golden/M16-GAP-00085/normal-edit-modifier-desktop-report.json": "cc4dfff0ac64efdd2e93eaee11fcfd7f9e2fe55fd4e21ea1e5f1a72dd14855cf", + "tests/golden/M16-GAP-00085/normal-edit-modifier-local-exact-report.json": "bbe513c4076d32a374083c0ae4ad6069e97f411a25bccb968e2f06c0b361da88", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00086", + "gapId": "modifier:OCEAN", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00086/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00086/ocean-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00086/ocean-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00086" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00086/manifest.json": "da2395461358c80496f9140657f40d7184da0d5134227a92cc7df62f86f8ada9", + "tests/golden/M16-GAP-00086/ocean-modifier-desktop-report.json": "d2217b8def179e48ea11a5bfcd9376765d2fca8ce22d1673b3d46d284f21af3f", + "tests/golden/M16-GAP-00086/ocean-modifier-local-exact-report.json": "33a86a21a856190f97c618df2aa307ad102e11da5260ce45f48aec961bf1acdd", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00087", + "gapId": "modifier:PARTICLE_INSTANCE", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00087/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00087/particle-instance-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00087/particle-instance-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00087" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00087/manifest.json": "47072d588c28140064b21b68e3e9140c333977a8cc9c420797097e19895da854", + "tests/golden/M16-GAP-00087/particle-instance-modifier-desktop-report.json": "a680090b9010d79608825fa02593b6a27506e233bf331b043085a41bf3d912a8", + "tests/golden/M16-GAP-00087/particle-instance-modifier-local-exact-report.json": "b68f61eb0596709da28a4ca0e4f19e3bc6f213191ff64c40c04d2be9ed5dbde7", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00088", + "gapId": "modifier:PARTICLE_SYSTEM", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00088/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00088/particle-system-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00088/particle-system-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00088" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00088/manifest.json": "cc374661882ef8bdec9fb36779d0a520ee73ea41de765c80d38d76c6fe33dfbd", + "tests/golden/M16-GAP-00088/particle-system-modifier-desktop-report.json": "a53c039a969a1a9affe57d435c281707882fcdb2f4772473801fed6c8ee45914", + "tests/golden/M16-GAP-00088/particle-system-modifier-local-exact-report.json": "905fae2ec36e1447a28d314cfc6ddce00dd71ddf090be505b16b76860f5e3643", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00089", + "gapId": "modifier:REMESH", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00089/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00089/remesh-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00089/remesh-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00089" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00089/manifest.json": "334dd6a7f54f6ec7e220ee856e966f2f5292f5f961f791e6a8c70eced48df08d", + "tests/golden/M16-GAP-00089/remesh-modifier-desktop-report.json": "ac36dcb7a2c59b6f8df45b67b00f45966c38de93dbfa8d016aeef77a8a92b665", + "tests/golden/M16-GAP-00089/remesh-modifier-local-exact-report.json": "0cc329e5779c02b15cdffc48030451134017870505149a10b9c5e23876d83ba6", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00090", + "gapId": "modifier:SCREW", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00090/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00090/screw-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00090/screw-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00090" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00090/manifest.json": "0b21363f7d73bded0891851f1a0932dd9babfcd961bd844e5be4224ac508478a", + "tests/golden/M16-GAP-00090/screw-modifier-desktop-report.json": "af225b5b2f660ae70fe0315527b79d5e74db996db3722222bed98194023de28e", + "tests/golden/M16-GAP-00090/screw-modifier-local-exact-report.json": "3998657085e2d1f963540cd97afd7980cdcd50ec96897ab22d612183a0e5e531", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00091", + "gapId": "modifier:SHRINKWRAP", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00091/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00091/shrinkwrap-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00091/shrinkwrap-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00091" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00091/manifest.json": "ff88c781260a3d385d19a1942a43d81f5a503ea7fa92d448307964d4d864d679", + "tests/golden/M16-GAP-00091/shrinkwrap-modifier-desktop-report.json": "4bc01b8e0d79256b2e5fa9e149bc53667790eab383beda260fdff77d6f4f0c6e", + "tests/golden/M16-GAP-00091/shrinkwrap-modifier-local-exact-report.json": "db44cad8b1b6173303ca5f63c442eb82805324e08c6786323f6803803d52d391", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00092", + "gapId": "modifier:SIMPLE_DEFORM", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00092/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00092/simple-deform-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00092/simple-deform-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00092" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00092/manifest.json": "a59b69a510cfe298ff2b44777fe796f335534c23d09e819625c84bcbb8d7085c", + "tests/golden/M16-GAP-00092/simple-deform-modifier-desktop-report.json": "532ad0f944d179ec640fdf706b9e4e78eaaa3635410b404f7a146b68a400768c", + "tests/golden/M16-GAP-00092/simple-deform-modifier-local-exact-report.json": "24eacc0f43139fbd4fe232e9418d7c81a8eee8bc9b10b15bc2818e1df0794aff", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00093", + "gapId": "modifier:SKIN", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00093/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00093/skin-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00093/skin-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00093" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00093/manifest.json": "84d908f962841a843d6d98f8b9fe7ea6bfde0baf23ad4a1d0389ad95bd12ece3", + "tests/golden/M16-GAP-00093/skin-modifier-desktop-report.json": "cf30f79bb5f5e90749068d678a6746808c87175aa9ad51117f69b6b90aad7884", + "tests/golden/M16-GAP-00093/skin-modifier-local-exact-report.json": "e2df081504aab183867915c78f4829d90e51fb610586a1722752cceaee0da674", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00094", + "gapId": "modifier:SMOOTH", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00094/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00094/smooth-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00094/smooth-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00094" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00094/manifest.json": "14eaec90bc16265124674f8ef6503c38a893d5c00293afcd75f6f1436de92f2f", + "tests/golden/M16-GAP-00094/smooth-modifier-desktop-report.json": "762f02f1f460bd1deb71a7441ff85b969ff8ef916b32d95e46fe243ce110d1cb", + "tests/golden/M16-GAP-00094/smooth-modifier-local-exact-report.json": "0373da7c5ce2b369840c080bfe5dd341596208098fc2f3c3ae864031d965bc6c", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00095", + "gapId": "modifier:SOFT_BODY", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00095/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00095/soft-body-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00095/soft-body-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00095" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00095/manifest.json": "c1a9d8e081010e0a743fbbe658971d41530dbef9690b45a652b63885a47cf8a4", + "tests/golden/M16-GAP-00095/soft-body-modifier-desktop-report.json": "5228fc63f22473e4e1ef9d82e9018c4739c6b63469da4b693240ac307336bba7", + "tests/golden/M16-GAP-00095/soft-body-modifier-local-exact-report.json": "e0767cb702d9c0612c8e8bc140dd2e00f5af6f782c3f63c5ae15407a6c5fcaa9", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00096", + "gapId": "modifier:SOLIDIFY", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00096/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00096/solidify-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00096/solidify-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00096" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00096/manifest.json": "40d2f169ab59159f8d09e62f8ad6657196d8620e2343f517e5c0f21d8bc9ae9b", + "tests/golden/M16-GAP-00096/solidify-modifier-desktop-report.json": "914187f8ec57e442d85fae5710aa98bd058e91930bdacd7928694281bad54df3", + "tests/golden/M16-GAP-00096/solidify-modifier-local-exact-report.json": "b6437999773cc18296a54e041c8df8b33d595f9ebe67c826a47f62308d307232", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00097", + "gapId": "modifier:SUBSURF", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00097/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00097/subsurf-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00097/subsurf-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00097" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00097/manifest.json": "bdd52ca3c9e8d3cb143b367f7da1fe449da7e5a35da53a145a627ed677fe0b3e", + "tests/golden/M16-GAP-00097/subsurf-modifier-desktop-report.json": "e1ce95f66a26b4e687bd32fc6f975044033d921703954e0e26674dfbce556bea", + "tests/golden/M16-GAP-00097/subsurf-modifier-local-exact-report.json": "c146dabc29a94e25df4f09e6de727a3377f48ea706dbe74f51b903efbc5a293d", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00098", + "gapId": "modifier:SURFACE", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00098/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00098/surface-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00098/surface-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00098" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00098/manifest.json": "d3b22b72220100883236e03598d7d69a2737557fce0ebac2649b36898c6f937c", + "tests/golden/M16-GAP-00098/surface-modifier-desktop-report.json": "75a588cd606fe0395c7f6541eed4ca26daa0109d7f6fa62cffe87e41149d0a95", + "tests/golden/M16-GAP-00098/surface-modifier-local-exact-report.json": "7b004c755290ebe920a9296a7768ff3231eaec66e1836536d98dffa4d6c6dbab", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00099", + "gapId": "modifier:SURFACE_DEFORM", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00099/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00099/surface-deform-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00099/surface-deform-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00099" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00099/manifest.json": "2c92a10f3ab011054a195045a2ca59585e07e84a3fd15385a69926208fa56c0c", + "tests/golden/M16-GAP-00099/surface-deform-modifier-desktop-report.json": "bfd91c545efcf0688bfa9cee24e65de82224eecf715a1ab4385061a7d7df4db1", + "tests/golden/M16-GAP-00099/surface-deform-modifier-local-exact-report.json": "7d5f760727e03951c3f5b2c3e885b33ce92af7293ca101732fa490136dc25ed5", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00100", + "gapId": "modifier:TRIANGULATE", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00100/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00100/triangulate-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00100/triangulate-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00100" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00100/manifest.json": "838290604a16fe26f6408bbda0e7f4cae2c8f952506a3b4a8f0fece480a7ab2b", + "tests/golden/M16-GAP-00100/triangulate-modifier-desktop-report.json": "8e1472c739110448d2c1987c32403714b9465606c0e8b3a8e3ae4867743ba377", + "tests/golden/M16-GAP-00100/triangulate-modifier-local-exact-report.json": "d715e77c6e2ef82c9611a68a3808057d08feb3de715ab1a3f07c6e1b67b6b69d", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00101", + "gapId": "modifier:UV_PROJECT", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00101/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00101/uv-project-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00101/uv-project-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00101" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00101/manifest.json": "e5c378b8249760667e0409a75b12128f0625f993518a59823ef567880748f865", + "tests/golden/M16-GAP-00101/uv-project-modifier-desktop-report.json": "18364763d8956b1426ae0ce7809491562d66833cbf77b7e00b141c002c54d8ed", + "tests/golden/M16-GAP-00101/uv-project-modifier-local-exact-report.json": "b0605455ac7287165072c928a06d556af759f9f7bd1ba1fac32cccb0ca0e0556", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00102", + "gapId": "modifier:UV_WARP", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00102/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00102/uv-warp-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00102/uv-warp-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00102" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00102/manifest.json": "3d0ca31309de03ba255776f14a290bcc9b29e92b70c57369a75959965645b0fb", + "tests/golden/M16-GAP-00102/uv-warp-modifier-desktop-report.json": "ed6bf6150e20eef0b7207397cee12db3408836075866f05bb48da92e706ab828", + "tests/golden/M16-GAP-00102/uv-warp-modifier-local-exact-report.json": "9499f499401b3703ee7e4ebab55516710fc235f08cdbd93271d9b348b066ba5f", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00103", + "gapId": "modifier:VERTEX_WEIGHT_EDIT", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00103/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00103/vertex-weight-edit-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00103/vertex-weight-edit-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00103" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00103/manifest.json": "039bf2d1ddfaba8bf98facb459ea5f5fa5ca75f4500099ef9a0f1234df38ef31", + "tests/golden/M16-GAP-00103/vertex-weight-edit-modifier-desktop-report.json": "442287f280444efcc0dcfc8602d935066af17aeca0072e978f64ffa3e6e13b9d", + "tests/golden/M16-GAP-00103/vertex-weight-edit-modifier-local-exact-report.json": "23d26e90775bce127efb1a8572c7a9f92acdf4d22b41bd1de6c78a11b7246ba8", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00104", + "gapId": "modifier:VERTEX_WEIGHT_MIX", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00104/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00104/vertex-weight-mix-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00104/vertex-weight-mix-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00104" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00104/manifest.json": "77a87fdbf8baeb47c5e42e372d795553c1c62c29e49effc99647493520c9a7a1", + "tests/golden/M16-GAP-00104/vertex-weight-mix-modifier-desktop-report.json": "6121a089239450b95037c25858958ab5d067af538657f56452fdce81186834a6", + "tests/golden/M16-GAP-00104/vertex-weight-mix-modifier-local-exact-report.json": "a755e5c88c8a22305155dc02c455e9fe6ccb1e92b7053be7a3ca57da2aa48971", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00105", + "gapId": "modifier:VERTEX_WEIGHT_PROXIMITY", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00105/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00105/vertex-weight-proximity-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00105/vertex-weight-proximity-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00105" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00105/manifest.json": "616dd9b1917bfa42540dc2a8638f918ecf27ca1f973a9f73028107b43c8283e0", + "tests/golden/M16-GAP-00105/vertex-weight-proximity-modifier-desktop-report.json": "7e6ebaf459de04781a6e6467be84c6065039a4f3fb6b4c748fcbeda3b4806179", + "tests/golden/M16-GAP-00105/vertex-weight-proximity-modifier-local-exact-report.json": "7594f78376b061793524a4c586ecd2335d7aa9064d4e31b840f92e03819fac1f", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00106", + "gapId": "modifier:VOLUME_DISPLACE", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00106/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00106/volume-displace-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00106/volume-displace-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00106" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00106/manifest.json": "680635859c3fac19e68b6c7ba5cd45f172e540c20bf3ca6eb4555a84eb1e05e9", + "tests/golden/M16-GAP-00106/volume-displace-modifier-desktop-report.json": "00ee176bc712320454f7ddb585710ccab243b9b5b89f2e2f0eb364c536bddcd6", + "tests/golden/M16-GAP-00106/volume-displace-modifier-local-exact-report.json": "9c44441bc0cfadbdce570f5c3e7b074e3da00f19a7f8a2e8d84d0ae6167164f8", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00107", + "gapId": "modifier:VOLUME_TO_MESH", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00107/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00107/volume-to-mesh-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00107/volume-to-mesh-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00107" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00107/manifest.json": "2e921d34c215b2a2ddeb997a6cba7446ecfb425f87e9b6f823ddc44618cde9d7", + "tests/golden/M16-GAP-00107/volume-to-mesh-modifier-desktop-report.json": "7cbfeae24f5f74a8b9509da418a65520a595530b164733bbd9ecf9de99212f02", + "tests/golden/M16-GAP-00107/volume-to-mesh-modifier-local-exact-report.json": "1083d3e4144e172245c61b1ff8afa8b1bcf80b9bfae4d066e7eb0cfab80f5279", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00108", + "gapId": "modifier:WARP", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00108/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00108/warp-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00108/warp-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00108" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00108/manifest.json": "fcd1a1c94e9ee340d7a473bc720cf289fdcf43e83720edda6c57a8fd8d444a81", + "tests/golden/M16-GAP-00108/warp-modifier-desktop-report.json": "5daba0b7befe92e75dab3dca35e00ee1e3c211ab02e9f5ec3ec9bdb5c6164250", + "tests/golden/M16-GAP-00108/warp-modifier-local-exact-report.json": "0aeac2276b0828180780358383b626295b1ef43fece15ac6fcadff880f861dd3", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00109", + "gapId": "modifier:WAVE", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00109/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00109/wave-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00109/wave-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00109" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00109/manifest.json": "bb45ad576b239b31b074bbf56b7f6d6f045a2d973cd27cb790ddcfd6236289bc", + "tests/golden/M16-GAP-00109/wave-modifier-desktop-report.json": "ddec88c688169daaaeda211a7b5b1ad2a7e9bd2f5baf29c8c85c5d5ae2265f3c", + "tests/golden/M16-GAP-00109/wave-modifier-local-exact-report.json": "29e011eec263333878bc92b5514ec9b153142872bd59d89cecba740395f7e7bc", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00110", + "gapId": "modifier:WEIGHTED_NORMAL", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00110/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00110/weighted-normal-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00110/weighted-normal-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00110" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00110/manifest.json": "119336cc75ed316e4f3cb73de51e8aa4b779486259a982fea59e9db7b7d30843", + "tests/golden/M16-GAP-00110/weighted-normal-modifier-desktop-report.json": "ae59fdc10466bfa461dbaed1aa45bb2ac6211b8a303e58de8ea3ee9c5e0e40ba", + "tests/golden/M16-GAP-00110/weighted-normal-modifier-local-exact-report.json": "6360a1706e7456a5d51fa2effbc7505cd7209818690ab1b7665abf0bbff7a311", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00111", + "gapId": "modifier:WELD", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00111/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00111/weld-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00111/weld-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00111" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00111/manifest.json": "0e061f666043fae2cc0781e31596b27f7253ad5e4ca823818be82da291658b9f", + "tests/golden/M16-GAP-00111/weld-modifier-desktop-report.json": "cef902e3eaaae85c8c441320ed1dad00b1193a73003c098e61ba179538972d9d", + "tests/golden/M16-GAP-00111/weld-modifier-local-exact-report.json": "91ec33d946f8b526ae5af1f0b533896e5c6678655b9ddaa844ca5fafdb773e9e", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00112", + "gapId": "modifier:WIREFRAME", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:modifier.snapshot", + "coverageCapabilityIds": [ + "CAP:modifier.snapshot" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00112/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00112/wireframe-modifier-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00112/wireframe-modifier-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00112" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00112/manifest.json": "3ab22dd37e97b9f10048cca5932ca29a115426be513b107a11b66ee8a562cced", + "tests/golden/M16-GAP-00112/wireframe-modifier-desktop-report.json": "f83750dfca898b529013b6d3fbefa283e5800a00312c3c613d06735a362ee26a", + "tests/golden/M16-GAP-00112/wireframe-modifier-local-exact-report.json": "b74f89e88d7e280175c4ff534ebf20477ca35aed189b53ebd4a69fbdacc7e92c", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00113", + "gapId": "operator:action.bake_keys", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00113/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00113/action-bake-keys-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00113/action-bake-keys-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00113" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00113/manifest.json": "fbdcdb3177de5ca5861af4df684ddd8ccdfe08cf93dcdda741d678a59af33b1c", + "tests/golden/M16-GAP-00113/action-bake-keys-desktop-report.json": "3226d30e020b3384b3a5504c72fe1481f43c048f0827ff6bcbfa1327d9cfd330", + "tests/golden/M16-GAP-00113/action-bake-keys-local-exact-report.json": "d8a6aaa82c299916a37f2b8ef477349ac675a930d95ff7800450dc6e5a282d58", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00114", + "gapId": "operator:action.clean", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00114/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00114/action-clean-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00114/action-clean-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00114" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00114/manifest.json": "ff2401d7722bc37900a4f9768c6b91ec7a58614ce9aa6f60df7b7ec1e687e41f", + "tests/golden/M16-GAP-00114/action-clean-desktop-report.json": "94e987bcc4704cc880a88b510d7f01a2b990c04a109c9296b6e896d108d1e95d", + "tests/golden/M16-GAP-00114/action-clean-local-exact-report.json": "58e3dfb9fc14a88bc57c616d02870ce0cb995a596f84bc57a686eb63e2e2952a", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00115", + "gapId": "operator:action.clickselect", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00115/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00115/action-clickselect-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00115/action-clickselect-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00115" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00115/manifest.json": "db8b1e7ca61a135f13e992ff888667f7488ce9e1443987158d5724a994ad9e88", + "tests/golden/M16-GAP-00115/action-clickselect-desktop-report.json": "8f6090591fd02d88ea4714ed6a570bbe1e9315226a7496a1382a1bcfb4a8dfe6", + "tests/golden/M16-GAP-00115/action-clickselect-local-exact-report.json": "ca2832eaceaf118bc1ce6b3efef1d5c4f9c63dae410d451b42b42f62316bbe37", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00116", + "gapId": "operator:action.copy", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00116/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00116/action-copy-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00116/action-copy-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00116" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00116/manifest.json": "b046f287837e710c37e437eb0cf6479979dc88b582ed68c741c06e0edec006c2", + "tests/golden/M16-GAP-00116/action-copy-desktop-report.json": "688cff599ed4b5b6ff17bc79141a040f8f9de59e6912285ae294af68efed0772", + "tests/golden/M16-GAP-00116/action-copy-local-exact-report.json": "d1698dbf04e3d7c7983734cdc88c7b109f61e10b33b09192e4576c60e2762b5e", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00117", + "gapId": "operator:action.delete", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00117/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00117/action-delete-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00117/action-delete-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00117" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00117/manifest.json": "1078d1d8345e4d6fec90435ae054da62060680715db4106973369e4b6ce8b789", + "tests/golden/M16-GAP-00117/action-delete-desktop-report.json": "9c3f91e026c110496626bc0214a719c5475c71357572f6861cc0287a2948169e", + "tests/golden/M16-GAP-00117/action-delete-local-exact-report.json": "a2b9dda82da0c7a7751ac7bf36a958a624291a8ebe4cea12d54587fb3f441aa2", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00118", + "gapId": "operator:action.duplicate", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00118/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00118/action-duplicate-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00118/action-duplicate-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00118" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00118/manifest.json": "c6db4450daf2b449ae91db4ab35be4b39dd45801c2b5d7d3aecb7be0a16fd8db", + "tests/golden/M16-GAP-00118/action-duplicate-desktop-report.json": "1b84545f6b5f01877c191170b8b5a0d21035e5448373506b4cca50399780e1be", + "tests/golden/M16-GAP-00118/action-duplicate-local-exact-report.json": "31b61f287906adee9b83d2c05cb302b76012cf5284f96cf45a8ea349a855c320", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00119", + "gapId": "operator:action.duplicate_move", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00119/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00119/action-duplicate-move-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00119/action-duplicate-move-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00119" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00119/manifest.json": "c149263d9739b6c32403f0232aa9e47f508e0001a516ace249fc46fe6a9196b0", + "tests/golden/M16-GAP-00119/action-duplicate-move-desktop-report.json": "f1ba7739899913c3478ce9f2e1bfb92b7a73ccebe3176e98d2e9c57072ab7d97", + "tests/golden/M16-GAP-00119/action-duplicate-move-local-exact-report.json": "47d8a5de2a50807b33695b011ba1774883c3c8823a6326a3bfc537fab4a2ef52", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00120", + "gapId": "operator:action.easing_type", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00120/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00120/action-easing-type-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00120/action-easing-type-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00120" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00120/manifest.json": "2372bb11523bedbb54f3971cba00dc26123af74c4be6128fb0cb8be29263c231", + "tests/golden/M16-GAP-00120/action-easing-type-desktop-report.json": "e34d9007483d2913166486f7fe736adae145ca27b1b90240ce36e62c4b8f1bbc", + "tests/golden/M16-GAP-00120/action-easing-type-local-exact-report.json": "9ce9af87fc9f42682de1fa7b02f3f320a64965dad5e3a34f808dbb072481896c", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00121", + "gapId": "operator:action.extrapolation_type", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00121/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00121/action-extrapolation-type-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00121/action-extrapolation-type-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00121" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00121/manifest.json": "d936ea067c9fe79dbf434474a051848a97391da50afeddc1917b128b6b3c987d", + "tests/golden/M16-GAP-00121/action-extrapolation-type-desktop-report.json": "d9c594e10b0196fb9a906cbd6ed31f26196c8ee1ede6a23c50d3a6ac9de0012d", + "tests/golden/M16-GAP-00121/action-extrapolation-type-local-exact-report.json": "c898764e6629bfa752e6375c1944c579a02c62cb25059792fd9e582042a8a3ab", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00122", + "gapId": "operator:action.frame_jump", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00122/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00122/action-frame-jump-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00122/action-frame-jump-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00122" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00122/manifest.json": "af52905e6415725b19dc78a50f26bbd45c137289d48bd3d565a905bd4b7d2153", + "tests/golden/M16-GAP-00122/action-frame-jump-desktop-report.json": "2a03fd1c8b4faea5fbf908e43df73758044dec705684842c0061023e999edf79", + "tests/golden/M16-GAP-00122/action-frame-jump-local-exact-report.json": "ac695d4436de8399842d39b412bb734c1e98d021f18a71c414627405aaa27fee", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00123", + "gapId": "operator:action.handle_type", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00123/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00123/action-handle-type-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00123/action-handle-type-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00123" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00123/manifest.json": "0cb90980ec4e4ee4fe64e75a0cf225e450625ffea657b3f991829b9a2640263d", + "tests/golden/M16-GAP-00123/action-handle-type-desktop-report.json": "4e37880d7ed3a2f506c2b93b93883c282011d0578d656dfe4c461a4e111201c9", + "tests/golden/M16-GAP-00123/action-handle-type-local-exact-report.json": "18fa52777177e3312534e981d7e2b1b6fd51b8ed72472c11f0959925907a6287", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00124", + "gapId": "operator:action.interpolation_type", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00124/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00124/action-interpolation-type-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00124/action-interpolation-type-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00124" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00124/manifest.json": "4c18d917bc07309288f24de8ab4ec412d5fdbc97173266e8e6e370825f76dc60", + "tests/golden/M16-GAP-00124/action-interpolation-type-desktop-report.json": "94ec52af816fb75cfed2339ebb4b821b4aa13d822c6fe2697f9923309331804f", + "tests/golden/M16-GAP-00124/action-interpolation-type-local-exact-report.json": "a93a5394419001a0555103f76c91653b1127a21a454a076d71a78050a00130d2", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00125", + "gapId": "operator:action.keyframe_insert", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00125/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00125/action-keyframe-insert-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00125/action-keyframe-insert-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00125" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00125/manifest.json": "c38d32a91078771dcea51f259ada230dc74f22cc2aa6dfd9ffd2318b65e04510", + "tests/golden/M16-GAP-00125/action-keyframe-insert-desktop-report.json": "6a4445c9725cdd1ce4bf97e510ef7f1772f47652fd3a0486c1fb8a4d7dbaa9fb", + "tests/golden/M16-GAP-00125/action-keyframe-insert-local-exact-report.json": "4e0d65afeac1d262fcad6e8c3756ed63529c6586261379f9d15fa1c971e67cc6", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00126", + "gapId": "operator:action.keyframe_type", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00126/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00126/action-keyframe-type-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00126/action-keyframe-type-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00126" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00126/manifest.json": "fcc0d402796a0e6c7071e11cb18f1fe35ebef1768a753bef5f3d161741fdfd35", + "tests/golden/M16-GAP-00126/action-keyframe-type-desktop-report.json": "dafa72f7acc2a84f993615e8ed963013a948980776cb96e19ef5bc0ebce578b6", + "tests/golden/M16-GAP-00126/action-keyframe-type-local-exact-report.json": "42cc333a864b20769f80bba46cef162ce2c864509bcfc35191caac5405f2d5db", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00127", + "gapId": "operator:action.markers_make_local", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00127/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00127/action-markers-make-local-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00127/action-markers-make-local-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00127" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00127/manifest.json": "54b3f00a01d64e852dc37969807eaeb960abbba01f0604955386bae28a230bc0", + "tests/golden/M16-GAP-00127/action-markers-make-local-desktop-report.json": "ced98aa43f04b58ac2aa66fed217fe895cdadc108739b4c335942114e8a69ce0", + "tests/golden/M16-GAP-00127/action-markers-make-local-local-exact-report.json": "9b3737730a2f5fe7daa8a9a8109254daf4eeeacff25f632820288fb01ee45f6f", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00128", + "gapId": "operator:action.mirror", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00128/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00128/action-mirror-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00128/action-mirror-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00128" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00128/manifest.json": "70d8667af039f81cac826ad752bca65e357a21a307baa64054839b619c144b8a", + "tests/golden/M16-GAP-00128/action-mirror-desktop-report.json": "ce9a779ce2d03bc2a2bda252c40aabb56c649be858fe82486ed04bfa96a04793", + "tests/golden/M16-GAP-00128/action-mirror-local-exact-report.json": "7a91dc7d6c72d100a7da42646adeb100efacf81dd25c2b12672281d86702b37b", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00129", + "gapId": "operator:action.new", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00129/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00129/action-new-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00129/action-new-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00129" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00129/manifest.json": "6211d5b9315af71ddc80b2075bc6f1d5071e21f832289b56b0e951786a52fa75", + "tests/golden/M16-GAP-00129/action-new-desktop-report.json": "834607cbbbd91aa8ad74ce2f8818cca54dd5adbf4e871b8733853c924eac8c75", + "tests/golden/M16-GAP-00129/action-new-local-exact-report.json": "abe030dd587dd2e21d04a3755a9294eb26c545f5d645c0910c2eeed4b5670430", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00130", + "gapId": "operator:action.paste", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00130/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00130/action-paste-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00130/action-paste-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00130" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00130/manifest.json": "192fb3cc20b202e5a277c79e37419d6fa346dc98c416fe688e5bf336ed9b49d6", + "tests/golden/M16-GAP-00130/action-paste-desktop-report.json": "1494252e4ec2870131a2d810a5bc884374edf35272926a0943ac230a67e24fb7", + "tests/golden/M16-GAP-00130/action-paste-local-exact-report.json": "6f37a4b1cf1af54bd8437a0df2ed4389f12fa830e298f86c2f70b67e853ffa61", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00131", + "gapId": "operator:action.previewrange_set", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00131/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00131/action-previewrange-set-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00131/action-previewrange-set-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00131" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00131/manifest.json": "552f94c32a5458c3b46149cd75d183f1cb3296474197f5cb40bd8005412fdb95", + "tests/golden/M16-GAP-00131/action-previewrange-set-desktop-report.json": "e0ad513329a4a26d70e239d65c30b9048e78c1fcb480a6e4013d941e85d94470", + "tests/golden/M16-GAP-00131/action-previewrange-set-local-exact-report.json": "7cd2170ba8134e088c23a4939d96f9a23b62779370051fac2185c7ad092e20d0", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00132", + "gapId": "operator:action.push_down", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00132/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00132/action-push-down-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00132/action-push-down-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00132" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00132/manifest.json": "bced19b1aeedcbb306720f06a588e36861113404af59cf81aba6d9be3c8ddb71", + "tests/golden/M16-GAP-00132/action-push-down-desktop-report.json": "1341e50c48f9adc16d7c9269bd31738d852299c4c8ed0ea03071efe934f5dabc", + "tests/golden/M16-GAP-00132/action-push-down-local-exact-report.json": "3d9ac3404080630e5241a39902229089b2528e784ec3b107aced1d1956ed9b33", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00133", + "gapId": "operator:action.select_all", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00133/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00133/action-select-all-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00133/action-select-all-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00133" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00133/manifest.json": "9a918773da3008c799b7a91df547a6c88206e71e18f2d3102ba6fba9ce7247dc", + "tests/golden/M16-GAP-00133/action-select-all-desktop-report.json": "06d1ae064a91784d1122141bdded039a4761ed15341dda9d9bb5f0649e9305bb", + "tests/golden/M16-GAP-00133/action-select-all-local-exact-report.json": "50808e1aa34a12e83afbe68bd47206b5990efb0e0a5c13b614e99abc8326c641", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00134", + "gapId": "operator:action.select_box", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00134/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00134/action-select-box-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00134/action-select-box-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00134" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00134/manifest.json": "45d2397c831b6603c6a253021d4b8fd8e65f2d4fd1121962dbfd3c4bea8b0edb", + "tests/golden/M16-GAP-00134/action-select-box-desktop-report.json": "20f1d2012eff7ee00744009455d8b34fd3ced10ae681af80065d2761f07838d4", + "tests/golden/M16-GAP-00134/action-select-box-local-exact-report.json": "d6bb840a51e5845681d83a381a5eed831dd0b727816400518f884af44c80a256", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00135", + "gapId": "operator:action.select_by_type", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00135/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00135/action-select-by-type-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00135/action-select-by-type-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00135" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00135/manifest.json": "41aae931fae2cf9e2a872aba03490f86d1a7c02fabde3de34a7a1c6da646904f", + "tests/golden/M16-GAP-00135/action-select-by-type-desktop-report.json": "4e7ad68e84576c6ef5153302911e682242b028f022eddf9deb18b39e28851298", + "tests/golden/M16-GAP-00135/action-select-by-type-local-exact-report.json": "7b07b6f31ad375a4d7461f375c2fb036021ef80d34176ecd0db37d752ff9b963", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00136", + "gapId": "operator:action.select_circle", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00136/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00136/action-select-circle-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00136/action-select-circle-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00136" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00136/manifest.json": "d7fd14cfaf3b0f241fd974ef14a98de48560f0055bbaea2020bb3d94b09e8d17", + "tests/golden/M16-GAP-00136/action-select-circle-desktop-report.json": "405d31329386086ba1f833795630a0180880bfce17e02d93fd586ce15bb6f1c0", + "tests/golden/M16-GAP-00136/action-select-circle-local-exact-report.json": "489863284d53857629642ae8fadb9c7066a4c492117eb8b7cbe0c823d65d9db5", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00137", + "gapId": "operator:action.select_column", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00137/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00137/action-select-column-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00137/action-select-column-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00137" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00137/manifest.json": "fcfb22eca4f0ffb2f59cfe5e828ca44fe32f8db09dd6f1e960d48dac4149025d", + "tests/golden/M16-GAP-00137/action-select-column-desktop-report.json": "71916a53336e89a4be1d07e1fec163b215661d1554d86a1446a79dad0411ba88", + "tests/golden/M16-GAP-00137/action-select-column-local-exact-report.json": "c9747457cd2746e4bcd27c10c87564e92f74664c6d59129222e826b17ace7815", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00138", + "gapId": "operator:action.select_lasso", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00138/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00138/action-select-lasso-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00138/action-select-lasso-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00138" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00138/manifest.json": "79c1fa8ccd9dd5739b77d92ec1452a75167f3e5478a9319eb23ce8aceb804bf0", + "tests/golden/M16-GAP-00138/action-select-lasso-desktop-report.json": "0b08c6f6e71af41aee20187546477ea962cd84d8c4aade1d85aefd0e9f7f1e65", + "tests/golden/M16-GAP-00138/action-select-lasso-local-exact-report.json": "80b30bbb0abd93e0e4d034d65e916171446e2549c7b224befb98f37f4e22eee9", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00139", + "gapId": "operator:action.select_leftright", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00139/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00139/action-select-leftright-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00139/action-select-leftright-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00139" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00139/manifest.json": "8e644b1e0a00793abef54ae27b9a8ef0b363683dcfabdd330cacdd129d3c5e49", + "tests/golden/M16-GAP-00139/action-select-leftright-desktop-report.json": "7caa17c7eb256a4bea4e95d03edd3e2b3a31286fd30581188915fca174a89f56", + "tests/golden/M16-GAP-00139/action-select-leftright-local-exact-report.json": "70476940cd710d7ac0305d1caa428e9b0ac7f71a8e7f55900139c94be7433ee2", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00140", + "gapId": "operator:action.select_less", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00140/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00140/action-select-less-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00140/action-select-less-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00140" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00140/manifest.json": "7e0b528d003807dca963fcb70e86db1880e7248b0f94f96071b8b35d72fc7b87", + "tests/golden/M16-GAP-00140/action-select-less-desktop-report.json": "f8527dd5d6d953fbda5b86bb1f42d6257b244a50296ceeb074c57a7b007a3aef", + "tests/golden/M16-GAP-00140/action-select-less-local-exact-report.json": "243dedadaa9776d7195883a99689e4cb8ee07599bf6c9786aaf8ee5910135e17", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00141", + "gapId": "operator:action.select_linked", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00141/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00141/action-select-linked-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00141/action-select-linked-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00141" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00141/manifest.json": "e4a6a6050b60b25ccfe23eef67047f020a14840d205728dd7c616131cba256ed", + "tests/golden/M16-GAP-00141/action-select-linked-desktop-report.json": "7072809e5ceef8161b75594deaaf809e31ea01a67ef6261ac2d9e9fabbb5e296", + "tests/golden/M16-GAP-00141/action-select-linked-local-exact-report.json": "261490656ea23b3c1800ca523a9d00911347b7f46e40b7b1d16e693470ddc8d4", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00142", + "gapId": "operator:action.select_more", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00142/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00142/action-select-more-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00142/action-select-more-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00142" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00142/manifest.json": "4f7013f2c89f3016d1e6d14dc18a89fe5b458900a5a1e8e5e9d4869682d67358", + "tests/golden/M16-GAP-00142/action-select-more-desktop-report.json": "56944dfcacb924d7650b8652e52bfc254fb1673b40b04109a57f69ad67e3fe9a", + "tests/golden/M16-GAP-00142/action-select-more-local-exact-report.json": "91f1ef2bf23e75b681beea332836b359da9daf1902b8d77cb683b0e1657562a0", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00143", + "gapId": "operator:action.snap", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00143/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00143/action-snap-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00143/action-snap-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00143" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00143/manifest.json": "b643c3ae823c8cbdf63b8bc59d091e5f33ac2143655c3435b5c603bbac980faf", + "tests/golden/M16-GAP-00143/action-snap-desktop-report.json": "0da5db63e20db1a97fed02019368de5c6a758e6e34c8b43af52800d33dfa48e0", + "tests/golden/M16-GAP-00143/action-snap-local-exact-report.json": "61afb2360dc9814da3b741a133b07728b4a560676e7a436f995d1c07e1a4d17e", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00144", + "gapId": "operator:action.stash", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00144/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00144/action-stash-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00144/action-stash-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00144" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00144/manifest.json": "f24ab301b94e0e144df905a2580e7e469ac9a201b1f90010c49672f50d885157", + "tests/golden/M16-GAP-00144/action-stash-desktop-report.json": "c7b38407179b23e212f2fff6d34424b3c9f21e024f8ce936cae8f4a6746c4904", + "tests/golden/M16-GAP-00144/action-stash-local-exact-report.json": "0dd4d10207503d6ea41c2d630b137471587961ceaa26870132936c8c91a72752", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00145", + "gapId": "operator:action.stash_and_create", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00145/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00145/action-stash-and-create-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00145/action-stash-and-create-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00145" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00145/manifest.json": "97f64fd6526a05350677abcc48348fbc825515ddbfa1f9110c0e01c4eebddd15", + "tests/golden/M16-GAP-00145/action-stash-and-create-desktop-report.json": "05f9f233a10822b8de85e9b2070863d6f584e60123b4fc91e4d147a93e120df7", + "tests/golden/M16-GAP-00145/action-stash-and-create-local-exact-report.json": "2820c70ab69ad674d6bee5424fceb98062fc33b0e309de98d0fe092515f0f4ea", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00146", + "gapId": "operator:action.unlink", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00146/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00146/action-unlink-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00146/action-unlink-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00146" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00146/manifest.json": "e11a8f920781558fd04203dd411ccec55f134946ff67b419516d71539c0dfbc9", + "tests/golden/M16-GAP-00146/action-unlink-desktop-report.json": "a328397950846c7ee22fc7d0ab5788eb5174a8296f79c70763f007274977f5b6", + "tests/golden/M16-GAP-00146/action-unlink-local-exact-report.json": "2190f23628b0b4ecb68a8c5aafb096e412c7fe5f654bad094686b0700c8e388c", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00147", + "gapId": "operator:action.view_all", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00147/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00147/action-view-all-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00147/action-view-all-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00147" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00147/manifest.json": "59f1fd30f286f47d9cee401450555b132e175b9f61b45d03d63a175afc1fb2ba", + "tests/golden/M16-GAP-00147/action-view-all-desktop-report.json": "d1eb6d018b05f2f00d16498dea4d34d49f07ed4489f2ee0dabcf9409dd76deaf", + "tests/golden/M16-GAP-00147/action-view-all-local-exact-report.json": "f23dd5aae9e4f649c6f29ae6cc971d7e358386bc4cbdd3466e7a075f065f362c", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00148", + "gapId": "operator:action.view_frame", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00148/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00148/action-view-frame-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00148/action-view-frame-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00148" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00148/manifest.json": "8b21c6772b85761bc26adf635a46306f06d141318c0c1338b22010c466cde2f0", + "tests/golden/M16-GAP-00148/action-view-frame-desktop-report.json": "1895f562b9d1a67164256dd47b40a9a0280f5c45f0f153184cde5d54afca2d63", + "tests/golden/M16-GAP-00148/action-view-frame-local-exact-report.json": "a5b4db975c15055bf295f72f5a52aeb66bfa5d81959dba303e89472ce92ff83a", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00149", + "gapId": "operator:action.view_selected", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:operator", + "coverageCapabilityIds": [ + "CAP:operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00149/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00149/action-view-selected-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00149/action-view-selected-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00149" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00149/manifest.json": "b9f75dbe42da92c6afffafc43b40fb98f47cbbaa65de7cba6a4a62ae60ed2261", + "tests/golden/M16-GAP-00149/action-view-selected-desktop-report.json": "002328f69d528d49570dda4976ea7ae0bb9229fa84f8a3bb1b5b6e3cc061a188", + "tests/golden/M16-GAP-00149/action-view-selected-local-exact-report.json": "6d2e450cece242a95b9b861292d74654ec7a8e3f191364a64c2c9b809a7e0bb4", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00150", + "gapId": "operator:anim.change_frame", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00150/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00150/anim-change-frame-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00150/anim-change-frame-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00150" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00150/manifest.json": "4323e629938716a48590c003693f0dbd458a20ba08159789ace051c66469d33d", + "tests/golden/M16-GAP-00150/anim-change-frame-desktop-report.json": "b0367cd339a51049f1eb511875c0beee269439694f99c2ee69513d71a5cd5453", + "tests/golden/M16-GAP-00150/anim-change-frame-local-exact-report.json": "358a97f75cf727ba385434f4e42c9e2857d046131fa15d1460f60eba68c72288", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00151", + "gapId": "operator:anim.channel_select_keys", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00151/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00151/anim-channel-select-keys-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00151/anim-channel-select-keys-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00151" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00151/manifest.json": "42cac0d28978fd317d2b28aece411c5a1fb6b24339ca3d974fa3443707f6545f", + "tests/golden/M16-GAP-00151/anim-channel-select-keys-desktop-report.json": "f71376397c83a380252e3e69a4f295153f2e46a7be0bf1de4871605bf0bec16f", + "tests/golden/M16-GAP-00151/anim-channel-select-keys-local-exact-report.json": "225fa87a2cfe47daee71149a1a2122ff9d9f80a602b48ff64bd11b0edf4dcc51", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00152", + "gapId": "operator:anim.channel_view_pick", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00152/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00152/anim-channel-view-pick-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00152/anim-channel-view-pick-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00152" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00152/manifest.json": "bfe3bad9d3276c2039438e33603fbef3474c13620951dba937f24b6a3fd1c57a", + "tests/golden/M16-GAP-00152/anim-channel-view-pick-desktop-report.json": "e8ddb6bb82386a4c93fb2525ac8c76b965034f827d28c0caa7c2df349833dc7c", + "tests/golden/M16-GAP-00152/anim-channel-view-pick-local-exact-report.json": "813990cb73567d995b784e23f47b7493f6bd3da83278ba86e4161044bfb98b8b", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00153", + "gapId": "operator:anim.channels_bake", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00153/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00153/anim-channels-bake-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00153/anim-channels-bake-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00153" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00153/manifest.json": "54e1592c148e04a4813d384f321802fc7169bf1355d941e95ffa24147632b1c1", + "tests/golden/M16-GAP-00153/anim-channels-bake-desktop-report.json": "bcc459445eb7da0b2898302b72b726cd128572a25c23012dc7dfee9b03d945a6", + "tests/golden/M16-GAP-00153/anim-channels-bake-local-exact-report.json": "517f2a16e4a3a46e52709c58987e940d1c07235adc8c4c9d6401363173c7d09b", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00154", + "gapId": "operator:anim.channels_clean_empty", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00154/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00154/anim-channels-clean-empty-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00154/anim-channels-clean-empty-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00154" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00154/manifest.json": "4bca88f74b2caf9df46252cb72877a482ab469279bcadfb52e40f8a63e656061", + "tests/golden/M16-GAP-00154/anim-channels-clean-empty-desktop-report.json": "592c8f75f00e03e0af3f8cc6de4b9b681ab2d1c5546826d363a01be41e498848", + "tests/golden/M16-GAP-00154/anim-channels-clean-empty-local-exact-report.json": "ec0ae1e60911edfaee779d6ed6c52fb5965d7b182534e1864c27aaaaeb1a7795", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00155", + "gapId": "operator:anim.channels_click", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00155/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00155/anim-channels-click-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00155/anim-channels-click-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00155" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00155/manifest.json": "11470b730bb01b4eb13bddac4a2e4ab69703e9f74eab5461dd3014573cd1aa8d", + "tests/golden/M16-GAP-00155/anim-channels-click-desktop-report.json": "c080797b74218a9ca21654420e96138ae7fc7e795d9f821a1ca1285bdb08038e", + "tests/golden/M16-GAP-00155/anim-channels-click-local-exact-report.json": "f76c822378b6dffd7a247354d33874515aa551e952401e82188a6e7337a67d55", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00156", + "gapId": "operator:anim.channels_collapse", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00156/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00156/anim-channels-collapse-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00156/anim-channels-collapse-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00156" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00156/manifest.json": "94dc2467ee52214c4d55c927f8ee0b8001e6c81ab2475d8aad24cf4b1e4724b6", + "tests/golden/M16-GAP-00156/anim-channels-collapse-desktop-report.json": "0c7633299bc11c3b2dcc6c255e557b625d61e4a6214b717dd19f7eaf59e2c06a", + "tests/golden/M16-GAP-00156/anim-channels-collapse-local-exact-report.json": "469e345742980e8647110df56278592ac12e6b945b6d45e11f9ec2da5c8cb094", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00157", + "gapId": "operator:anim.channels_delete", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00157/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00157/anim-channels-delete-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00157/anim-channels-delete-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00157" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00157/manifest.json": "d0019e1f0f523459501cf5bc7ed1d837780b2047ae9cf839bfc81845e84e3d8a", + "tests/golden/M16-GAP-00157/anim-channels-delete-desktop-report.json": "330b2caa7f2f2dcbf4f903a8ac8bd1fdaf22fa676014fd0a2aa58675c28e77e3", + "tests/golden/M16-GAP-00157/anim-channels-delete-local-exact-report.json": "667833b173528247f33341fe15edf52b4389bc44e0de4a6dc1fb2e14ee57a986", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00158", + "gapId": "operator:anim.channels_editable_toggle", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00158/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00158/anim-channels-editable-toggle-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00158/anim-channels-editable-toggle-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00158" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00158/manifest.json": "5e28f69a98614887d5bf331c9369ee722553f72562797fa8450b6223ad83ba74", + "tests/golden/M16-GAP-00158/anim-channels-editable-toggle-desktop-report.json": "c700699f731764385ab6a9103adfc3592effdae2dc09b913682b134de16298f5", + "tests/golden/M16-GAP-00158/anim-channels-editable-toggle-local-exact-report.json": "4e1e28c4baa75abd098eaed07ea83fda9676d6bd875dafac9742bd1d89cf16dd", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00159", + "gapId": "operator:anim.channels_expand", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00159/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00159/anim-channels-expand-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00159/anim-channels-expand-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00159" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00159/manifest.json": "f5e191bd6d977c593abf16d87965485f616d81ed1a82c93432ceb978c65a8ba0", + "tests/golden/M16-GAP-00159/anim-channels-expand-desktop-report.json": "56feacbf947430f5799612b9e01395ec2f901f455ef1811af58315bc97981c58", + "tests/golden/M16-GAP-00159/anim-channels-expand-local-exact-report.json": "705189c2b5571ee5645c50932fdff1bdaff3f9205cd031533969f1bc8d09418e", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00160", + "gapId": "operator:anim.channels_fcurves_enable", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00160/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00160/anim-channels-fcurves-enable-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00160/anim-channels-fcurves-enable-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00160" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00160/manifest.json": "700811b29ae8bf3b67051be00310286396749ab3569fb935137d4941280a8ba2", + "tests/golden/M16-GAP-00160/anim-channels-fcurves-enable-desktop-report.json": "694c307f9ccc22b4eca8e64185e5397bd778e45da07c5ad26a60120220ebe4c5", + "tests/golden/M16-GAP-00160/anim-channels-fcurves-enable-local-exact-report.json": "42b1b070a9975db3284dd616a3c101cf1ec1ee3701372f77eeb04e0a03e52b9a", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00161", + "gapId": "operator:anim.channels_group", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00161/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00161/anim-channels-group-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00161/anim-channels-group-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00161" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00161/manifest.json": "ee963387d434dd430f7b8b5d4fd950c0f211a8a72485df4d2db07d89077dfcce", + "tests/golden/M16-GAP-00161/anim-channels-group-desktop-report.json": "c7df9940aecaa3fa127116325e053c182a183167d8f222e9af072c6415ef379b", + "tests/golden/M16-GAP-00161/anim-channels-group-local-exact-report.json": "e455f560ac9e6047b84971a96b3aa7f58ee4cf08dccf5f6394310820d10715d2", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00162", + "gapId": "operator:anim.channels_move", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00162/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00162/anim-channels-move-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00162/anim-channels-move-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00162" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00162/manifest.json": "837397186e94250d4fdf6b4ac1f9e0d37d1867f488711e8c6bf017934196158b", + "tests/golden/M16-GAP-00162/anim-channels-move-desktop-report.json": "8b12fad79622d6171f5afce0017b89cae20fea109dacc0851c10c8d96d19f1c0", + "tests/golden/M16-GAP-00162/anim-channels-move-local-exact-report.json": "0dad9d166f9fdd3466f0a96bc32e02118259a5aa7ac8312d716c93fb0b8fcf31", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00163", + "gapId": "operator:anim.channels_rename", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00163/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00163/anim-channels-rename-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00163/anim-channels-rename-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00163" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00163/manifest.json": "d451ad9c96b728ccdfbe52a66d1f3c0c9888598da07e0d6c2bcc00059114fd57", + "tests/golden/M16-GAP-00163/anim-channels-rename-desktop-report.json": "ab51d4972965553550c3a31a01d5ead41d4a1edb4f3d5229e0072035f032cc63", + "tests/golden/M16-GAP-00163/anim-channels-rename-local-exact-report.json": "f83a4dc64627ec6679826be1a49942a869af4ffc1bad317ecc60a9ff056729ab", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00164", + "gapId": "operator:anim.channels_select_all", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00164/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00164/anim-channels-select-all-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00164/anim-channels-select-all-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00164" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00164/manifest.json": "931b01785a3d404395d4f114211cf54c6cc1013071d2c87ec6b1bb419ebafe99", + "tests/golden/M16-GAP-00164/anim-channels-select-all-desktop-report.json": "27582c87f7d705f7b2a935d29df9fd4b65e60f8cc7f1e1f9803b2788aeb43f22", + "tests/golden/M16-GAP-00164/anim-channels-select-all-local-exact-report.json": "8bfb174ed2610c2d518c5c62721e489e3314875d70f12cd3304b10ca4e7e3d6e", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00165", + "gapId": "operator:anim.channels_select_box", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00165/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00165/anim-channels-select-box-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00165/anim-channels-select-box-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00165" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00165/manifest.json": "5feb7d1b03bc3b4a48ac1b4677e06176cec0fa2c63f5816233ad2d22132df06e", + "tests/golden/M16-GAP-00165/anim-channels-select-box-desktop-report.json": "3e4d0f296a24bbc60e94edbcdef95d0256311b3c7465ee975b1a072a3553340d", + "tests/golden/M16-GAP-00165/anim-channels-select-box-local-exact-report.json": "1ea7eff113700fb1c7294d3737dff83df271963f62997583540cc1e998f00e21", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00166", + "gapId": "operator:anim.channels_select_filter", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00166/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00166/anim-channels-select-filter-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00166/anim-channels-select-filter-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00166" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00166/manifest.json": "8b892a89ec690db1363f742dc8f30a849e9fa7058fb60a15b456f8bb6c7c087c", + "tests/golden/M16-GAP-00166/anim-channels-select-filter-desktop-report.json": "a8a86feb4763e08f655de55c654befa13d42b490ca4e6efc5d6736170f0d6a37", + "tests/golden/M16-GAP-00166/anim-channels-select-filter-local-exact-report.json": "538167ec546842a9206d6232a213d271dabe96f5801f074b6804a1d14e12e4ba", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00167", + "gapId": "operator:anim.channels_setting_disable", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00167/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00167/anim-channels-setting-disable-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00167/anim-channels-setting-disable-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00167" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00167/manifest.json": "e0bb05397c78518720f04210586fc169e846bf570ee8e578b8491a547a64adcb", + "tests/golden/M16-GAP-00167/anim-channels-setting-disable-desktop-report.json": "9e647359438803ddfd6065611d064e723c5371b3ef696cbfdfdb50c166ab3835", + "tests/golden/M16-GAP-00167/anim-channels-setting-disable-local-exact-report.json": "c73201d925e7526d25f647870a346976773ffc4cd4abb94325d4cf1261def14d", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00168", + "gapId": "operator:anim.channels_setting_enable", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00168/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00168/anim-channels-setting-enable-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00168/anim-channels-setting-enable-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00168" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00168/manifest.json": "bfd41f29b612a02ded56dab55bab22482ea7090d84b0c7ad0ac52d6e839e0073", + "tests/golden/M16-GAP-00168/anim-channels-setting-enable-desktop-report.json": "d2265aaf9aee9d9bcc8a72f66f9878c4f44b4a5c28e5d13ff388c194adac773e", + "tests/golden/M16-GAP-00168/anim-channels-setting-enable-local-exact-report.json": "68bd2a37e4fb89e130cf7d9fec26e23f60903543b39cc33813b84bf525313817", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00169", + "gapId": "operator:anim.channels_setting_toggle", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00169/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00169/anim-channels-setting-toggle-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00169/anim-channels-setting-toggle-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00169" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00169/manifest.json": "85b057bafa06931367c8fcb552b1e1d599a92a19942b4a668dff11fe48f68ba8", + "tests/golden/M16-GAP-00169/anim-channels-setting-toggle-desktop-report.json": "6bc9a6a97c53a6b4fa510c0b670bdf341ec4f82d0586a21c04438eaeda9a10f6", + "tests/golden/M16-GAP-00169/anim-channels-setting-toggle-local-exact-report.json": "e493b763baef0ff2d5e2782107a92b66db63d0ec82ffd8c677df7d30f68c76fe", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00170", + "gapId": "operator:anim.channels_ungroup", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00170/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00170/anim-channels-ungroup-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00170/anim-channels-ungroup-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00170" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00170/manifest.json": "131cd43c0928c98c5a237a26571182662bdf339937c8d2d28f7c589b284daecf", + "tests/golden/M16-GAP-00170/anim-channels-ungroup-desktop-report.json": "6da3c452af5fdefcbb5a7390e5e7effe440dbb8602bc7c4ee7d57f38e1f58f05", + "tests/golden/M16-GAP-00170/anim-channels-ungroup-local-exact-report.json": "4de0a7349f21103b953ebbd860f983d9c199fe682af77fc2b4198fc03993ec53", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00171", + "gapId": "operator:anim.channels_view_selected", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00171/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00171/anim-channels-view-selected-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00171/anim-channels-view-selected-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00171" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00171/manifest.json": "280d202666ffcdf550aa5c9d19145a0f70f7f415601e7b8a0bf7314c392aabbf", + "tests/golden/M16-GAP-00171/anim-channels-view-selected-desktop-report.json": "20a3371ebf683cc16911820be35f1c4ebf8af48132339574937899d267568fd1", + "tests/golden/M16-GAP-00171/anim-channels-view-selected-local-exact-report.json": "2829a891ac2d66ca3d5b0a4fac8b88bfe267280c8fb05f080b49e3e2cf880c8d", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00172", + "gapId": "operator:anim.clear_useless_actions", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00172/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00172/anim-clear-useless-actions-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00172/anim-clear-useless-actions-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00172" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00172/manifest.json": "f62b458ca5741bc23d37ffa1a7b2a8ce508ba61fa7b51427a4db999e11ce1037", + "tests/golden/M16-GAP-00172/anim-clear-useless-actions-desktop-report.json": "d2b1784129a81b79ef30e8203ab1192613da16bdca25b15f18ada408d355a410", + "tests/golden/M16-GAP-00172/anim-clear-useless-actions-local-exact-report.json": "c7cfbd670b09aa46a4597867af4d8e3de6c14030dac5c9d5f21f09a9db789973", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00173", + "gapId": "operator:anim.copy_driver_button", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00173/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00173/anim-copy-driver-button-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00173/anim-copy-driver-button-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00173" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00173/manifest.json": "0bfed84a2419e1441471f1115035bcbf786cb8383aecdee71d3a00dc4de52db7", + "tests/golden/M16-GAP-00173/anim-copy-driver-button-desktop-report.json": "ba54f7de66ecfc9fb100010d28b4d26b61b585af83a8981ff1c9a77869cacb37", + "tests/golden/M16-GAP-00173/anim-copy-driver-button-local-exact-report.json": "561380ce0b0a8d06afe41a63c4c86e3c990ff0fd4fb08aae1433b4810377752e", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00174", + "gapId": "operator:anim.driver_button_add", + "evidenceLevel": "L0", + "completionClass": "BLOCKED", + "desktopPositive": true, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "missing or non-authoritative mutation evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "BLOCKED", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00174/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00174/anim-driver-button-add-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00174/anim-driver-button-add-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00174" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00174/manifest.json": "fe86517f18d3f66e35a3872c513f5fcaefc8a12284ede80b440d5682e081bac6", + "tests/golden/M16-GAP-00174/anim-driver-button-add-desktop-report.json": "ec69ea475f22b9c49318c7bf984200c513e6841b953d837f1cbfc925fe53307b", + "tests/golden/M16-GAP-00174/anim-driver-button-add-local-exact-report.json": "755195e7c3c31c8d3cf19cd51f569a25d0d694312c32101cea49749a15fdb3ed", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00175", + "gapId": "operator:anim.driver_button_edit", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00175/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00175/anim-driver-button-edit-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00175/anim-driver-button-edit-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00175" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00175/manifest.json": "d174dd857f35887e2fb648bed583c10960babd93c6f2b8766e9be8f7ec649b19", + "tests/golden/M16-GAP-00175/anim-driver-button-edit-desktop-report.json": "0e712a373d6c4d28cb14c38fcd911987c7216466ef52a9d3d19a3ce34e913112", + "tests/golden/M16-GAP-00175/anim-driver-button-edit-local-exact-report.json": "9bc321582ce9a45951ec4e8a43236b69a571053fc8cf48fe4cdf8b29113aada0", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00176", + "gapId": "operator:anim.driver_button_remove", + "evidenceLevel": "L0", + "completionClass": "BLOCKED", + "desktopPositive": true, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "missing or non-authoritative mutation evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "BLOCKED", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00176/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00176/anim-driver-button-remove-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00176/anim-driver-button-remove-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00176" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00176/manifest.json": "82dc887d798059777749e1a0efbebba1928dccc30a1be486ebb2872c3dcbf5d7", + "tests/golden/M16-GAP-00176/anim-driver-button-remove-desktop-report.json": "369081c441e48ee8ad39d9f4c90a4c2f80b4802143f0243e2d3e0d92f9198ee9", + "tests/golden/M16-GAP-00176/anim-driver-button-remove-local-exact-report.json": "44e366eb69905cd48d27decfab478c13dd6b1b715fcaae8ef7d3c75d09f1a311", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00177", + "gapId": "operator:anim.end_frame_set", + "evidenceLevel": "L0", + "completionClass": "BLOCKED", + "desktopPositive": true, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "missing or non-authoritative mutation evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "BLOCKED", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00177/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00177/anim-end-frame-set-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00177/anim-end-frame-set-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00177" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00177/manifest.json": "4b8be8ccdf29887242c4a225f5a84daafae5c7418012b11b94d7ef812946676f", + "tests/golden/M16-GAP-00177/anim-end-frame-set-desktop-report.json": "332660f12353d5750b4bc613f99c77fe3dd126bee2f9051c9d742db7c5f09c3f", + "tests/golden/M16-GAP-00177/anim-end-frame-set-local-exact-report.json": "50b9716d2813795e26324a9dd3c8e32d4b8baaee92e45b893a47bddec18657b0", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00178", + "gapId": "operator:anim.keyframe_clear_button", + "evidenceLevel": "L3", + "completionClass": "FEATURE_PARITY", + "desktopPositive": true, + "wasmPositiveMutation": true, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "desktop positive oracle and explicit WASM/Main mutation with persistence evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "CANDIDATE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00178/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00178/anim-keyframe-clear-button-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00178/anim-keyframe-clear-button-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00178" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00178/manifest.json": "7ab414718866a33c0b00ec942df09ddaa4a7f9a41f5a060b9236740d741c015c", + "tests/golden/M16-GAP-00178/anim-keyframe-clear-button-desktop-report.json": "ba35b96dc8c7aa46427b64465aa223a87ffe2d5bf37ef42a4bd17afc430b4bee", + "tests/golden/M16-GAP-00178/anim-keyframe-clear-button-local-exact-report.json": "9969372551c877505755cf23454610ca8211cc77a6e1267b366e848ebd69e30d", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00179", + "gapId": "operator:anim.keyframe_clear_v3d", + "evidenceLevel": "L3", + "completionClass": "FEATURE_PARITY", + "desktopPositive": true, + "wasmPositiveMutation": true, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "desktop positive oracle and explicit WASM/Main mutation with persistence evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "CANDIDATE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00179/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00179/anim-keyframe-clear-v3d-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00179/anim-keyframe-clear-v3d-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00179" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00179/manifest.json": "a936c1814171af4d35de56fd9d549ca3145dc931f82d9c392b614292c53ee699", + "tests/golden/M16-GAP-00179/anim-keyframe-clear-v3d-desktop-report.json": "2e63bae9cbb613ab96faf2fa802e34caf5aca2e7c3968c93ef0dc9de6a16fecf", + "tests/golden/M16-GAP-00179/anim-keyframe-clear-v3d-local-exact-report.json": "6b675af2fd56ce8ee146676101ca9f0be6365a9702b80d8def8c27460a1e7ae9", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00180", + "gapId": "operator:anim.keyframe_clear_vse", + "evidenceLevel": "L3", + "completionClass": "FEATURE_PARITY", + "desktopPositive": true, + "wasmPositiveMutation": true, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "desktop positive oracle and explicit WASM/Main mutation with persistence evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "CANDIDATE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00180/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00180/anim-keyframe-clear-vse-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00180/anim-keyframe-clear-vse-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00180" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00180/manifest.json": "2129455e254cae38839f00ee2373b921d515781f31f638aac8f4d50c43a2c2ac", + "tests/golden/M16-GAP-00180/anim-keyframe-clear-vse-desktop-report.json": "6885cc9103c1b9c8396a684559d08d0899ca096580278a5fa321ee6cec4412ec", + "tests/golden/M16-GAP-00180/anim-keyframe-clear-vse-local-exact-report.json": "9e05fde557e26ac9be8dc8c7983be4a25e7637542643aa8b38708a1868de27ad", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00181", + "gapId": "operator:anim.keyframe_delete", + "evidenceLevel": "L3", + "completionClass": "FEATURE_PARITY", + "desktopPositive": true, + "wasmPositiveMutation": true, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "desktop positive oracle and explicit WASM/Main mutation with persistence evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "CANDIDATE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00181/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00181/anim-keyframe-delete-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00181/anim-keyframe-delete-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00181" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00181/manifest.json": "2d1e57feb32e88260521d751ea0fbd3bd412b111ae8d3b1a3381ac73194d819e", + "tests/golden/M16-GAP-00181/anim-keyframe-delete-desktop-report.json": "cec3f76e20a38572bf4a38789e1df1aa83ffd4f332e940c238e4d633dd841c7d", + "tests/golden/M16-GAP-00181/anim-keyframe-delete-local-exact-report.json": "4e75034a44e46afef417e241e6c81d84a1d46a8bf34e779495d9c6885c3b8bfc", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00182", + "gapId": "operator:anim.keyframe_delete_button", + "evidenceLevel": "L3", + "completionClass": "FEATURE_PARITY", + "desktopPositive": true, + "wasmPositiveMutation": true, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "desktop positive oracle and explicit WASM/Main mutation with persistence evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "CANDIDATE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00182/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00182/anim-keyframe-delete-button-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00182/anim-keyframe-delete-button-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00182" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00182/manifest.json": "f5f4938319630917d738174edc6f856162b2b98c14fc213610c69bd36134fc57", + "tests/golden/M16-GAP-00182/anim-keyframe-delete-button-desktop-report.json": "5df192b8cf82b0e53efa947f9102424cfccf05b29a4e293342ea2e3ace60b0d1", + "tests/golden/M16-GAP-00182/anim-keyframe-delete-button-local-exact-report.json": "097fdcab03f3e748077c3b1d8cdcfbb9a9b2d7df9b1ca03c54b9f0a3a637c947", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00183", + "gapId": "operator:anim.keyframe_delete_by_name", + "evidenceLevel": "L3", + "completionClass": "FEATURE_PARITY", + "desktopPositive": true, + "wasmPositiveMutation": true, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "desktop positive oracle and explicit WASM/Main mutation with persistence evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "CANDIDATE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00183/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00183/anim-keyframe-delete-by-name-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00183/anim-keyframe-delete-by-name-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00183" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00183/manifest.json": "e7f763443ed61270b5d5d4ce02c825f88d459f409f7b1f88ac04a046e1195432", + "tests/golden/M16-GAP-00183/anim-keyframe-delete-by-name-desktop-report.json": "105d464e66e7ac9c3cee66c3a33a47101c95b08f9851a875373d43370c48f70e", + "tests/golden/M16-GAP-00183/anim-keyframe-delete-by-name-local-exact-report.json": "3e8dd9268e4aa73f673dbbe5c9abc3d9c00acfdbe1cc019673c49925e342deca", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00184", + "gapId": "operator:anim.keyframe_delete_v3d", + "evidenceLevel": "L3", + "completionClass": "FEATURE_PARITY", + "desktopPositive": true, + "wasmPositiveMutation": true, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "desktop positive oracle and explicit WASM/Main mutation with persistence evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "CANDIDATE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00184/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00184/anim-keyframe-delete-v3d-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00184/anim-keyframe-delete-v3d-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00184" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00184/manifest.json": "6ff399adb6109c47faef8102dd45ea1d57790a93a841e6b5e9b8f7fb8092dfcc", + "tests/golden/M16-GAP-00184/anim-keyframe-delete-v3d-desktop-report.json": "576e712c7d4d72dc15fc2b9a4b65748c2ddd4b43f69c86a57e3365621f19db43", + "tests/golden/M16-GAP-00184/anim-keyframe-delete-v3d-local-exact-report.json": "3737dbe1e6189cd8312cc3cd3f328e764b2a9ce173a48946e9413a82e8fa4a47", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00185", + "gapId": "operator:anim.keyframe_delete_vse", + "evidenceLevel": "L3", + "completionClass": "FEATURE_PARITY", + "desktopPositive": true, + "wasmPositiveMutation": true, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "desktop positive oracle and explicit WASM/Main mutation with persistence evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "CANDIDATE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00185/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00185/anim-keyframe-delete-vse-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00185/anim-keyframe-delete-vse-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00185" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00185/manifest.json": "70f5771c459cf7ded827e08661eedaaf065f53e9f6b1a595af0905c55176138a", + "tests/golden/M16-GAP-00185/anim-keyframe-delete-vse-desktop-report.json": "a7fb103d0746837b7d56ae89e6b8fa6de374f11cfff8cdf79d88fba199449721", + "tests/golden/M16-GAP-00185/anim-keyframe-delete-vse-local-exact-report.json": "aecbd1f8b711b2299db7e7665931a549a7318d638942eb2d343d680fc0ce5acc", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00186", + "gapId": "operator:anim.keyframe_insert", + "evidenceLevel": "L3", + "completionClass": "FEATURE_PARITY", + "desktopPositive": true, + "wasmPositiveMutation": true, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "desktop positive oracle and explicit WASM/Main mutation with persistence evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "CANDIDATE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00186/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00186/anim-keyframe-insert-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00186/anim-keyframe-insert-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00186" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00186/manifest.json": "b6f7824daf135554736eb61e232b7166dbc95fc25ff6dec2769a99ea8b962a0c", + "tests/golden/M16-GAP-00186/anim-keyframe-insert-desktop-report.json": "dfb8191a85b427ab80a3f6cb2fa118f0f7ddc1ce895b93c8c6e4ddf34f4d780c", + "tests/golden/M16-GAP-00186/anim-keyframe-insert-local-exact-report.json": "17e4943e084a1323e1de9eca68039b4a6a9e9d060c9e3d3e44e663c8a9d93ce1", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00187", + "gapId": "operator:anim.keyframe_insert_button", + "evidenceLevel": "L3", + "completionClass": "FEATURE_PARITY", + "desktopPositive": true, + "wasmPositiveMutation": true, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "desktop positive oracle and explicit WASM/Main mutation with persistence evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "CANDIDATE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00187/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00187/anim-keyframe-insert-button-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00187/anim-keyframe-insert-button-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00187" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00187/manifest.json": "365dc2bd47e0840874b4c9446b8f7c19f32a0e680f61089470413e71af992fa2", + "tests/golden/M16-GAP-00187/anim-keyframe-insert-button-desktop-report.json": "b7de5f8ac81d96e316a6d13b1f03650339841bf043ff3a4c9b3396a14420f506", + "tests/golden/M16-GAP-00187/anim-keyframe-insert-button-local-exact-report.json": "460c2285310d2cf456ced4f1438ab6fd609a1470dde4a37cd09b349099f90873", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00188", + "gapId": "operator:anim.keyframe_insert_by_name", + "evidenceLevel": "L3", + "completionClass": "FEATURE_PARITY", + "desktopPositive": true, + "wasmPositiveMutation": true, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "desktop positive oracle and explicit WASM/Main mutation with persistence evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "CANDIDATE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00188/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00188/anim-keyframe-insert-by-name-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00188/anim-keyframe-insert-by-name-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00188" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00188/manifest.json": "a5dbde7fb7a27d5962052b66a93c7427309075dd5e75ff1c92ee951e9d5fc4bc", + "tests/golden/M16-GAP-00188/anim-keyframe-insert-by-name-desktop-report.json": "d89d0950420ef0a81ca983619bf0f168b173e1a631769bcb4b342cfe3b2a9c09", + "tests/golden/M16-GAP-00188/anim-keyframe-insert-by-name-local-exact-report.json": "4928e35b98ac71b76c68fe2eccbd86481bb854123d428b1af66fbc7270df7e42", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00189", + "gapId": "operator:anim.keyframe_insert_menu", + "evidenceLevel": "L3", + "completionClass": "FEATURE_PARITY", + "desktopPositive": true, + "wasmPositiveMutation": true, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "desktop positive oracle and explicit WASM/Main mutation with persistence evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "CANDIDATE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00189/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00189/anim-keyframe-insert-menu-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00189/anim-keyframe-insert-menu-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00189" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00189/manifest.json": "ec4432fda19693d72f13c97db1af0bdf0af2da7b3baab7916575f5fbeee85965", + "tests/golden/M16-GAP-00189/anim-keyframe-insert-menu-desktop-report.json": "8f01c695716b3902e0d8caa4b335bc67257e4688a4af5e35fd61b5d98d9b3d03", + "tests/golden/M16-GAP-00189/anim-keyframe-insert-menu-local-exact-report.json": "a95cc2b84481263298f5bef1fbe0d46a2ab272de25ce5e0a39e84457453e0144", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00190", + "gapId": "operator:anim.keying_set_active_set", + "evidenceLevel": "L3", + "completionClass": "FEATURE_PARITY", + "desktopPositive": true, + "wasmPositiveMutation": true, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "desktop positive oracle and explicit WASM/Main mutation with persistence evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "CANDIDATE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00190/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00190/anim-keying-set-active-set-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00190/anim-keying-set-active-set-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00190" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00190/manifest.json": "fe082bf450905a4871295cc295b8bfeb9248419523fa3fb4a10156f5aec8a479", + "tests/golden/M16-GAP-00190/anim-keying-set-active-set-desktop-report.json": "69ff6f5b3862697e6d17545c63264a0361aa9f6996b874897dd25a138257bc38", + "tests/golden/M16-GAP-00190/anim-keying-set-active-set-local-exact-report.json": "70e94768b98b0b14a1d03e9e016e62374838b4ad6fa68f893519fed6674f709d", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00191", + "gapId": "operator:anim.keying_set_add", + "evidenceLevel": "L3", + "completionClass": "FEATURE_PARITY", + "desktopPositive": true, + "wasmPositiveMutation": true, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "desktop positive oracle and explicit WASM/Main mutation with persistence evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "CANDIDATE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00191/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00191/anim-keying-set-add-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00191/anim-keying-set-add-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00191" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00191/manifest.json": "5dd019546fe6b65e9beb24177239b371390f468e5ac80e2c5860f2bb72416e18", + "tests/golden/M16-GAP-00191/anim-keying-set-add-desktop-report.json": "b19f86edd48c4fb40f3077af333baa89127d51218ca110861f2e77063caff304", + "tests/golden/M16-GAP-00191/anim-keying-set-add-local-exact-report.json": "d244b7788db82edae28bf1ceebe5d5a8978b317ea8a259abd4ecc1c071fdc68a", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00192", + "gapId": "operator:anim.keying_set_export", + "evidenceLevel": "L0", + "completionClass": "BLOCKED", + "desktopPositive": false, + "wasmPositiveMutation": true, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "missing or non-authoritative mutation evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "BLOCKED", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00192/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00192/anim-keying-set-export-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00192/anim-keying-set-export-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00192" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00192/manifest.json": "5329ecca1a5a3afa1a8820074ce06754f73dcc4633b0855aa1391a4587de249a", + "tests/golden/M16-GAP-00192/anim-keying-set-export-desktop-report.json": "14b1c5675c9088305246d5afea8f291ef989c6735c3795e377b42524af2f7fed", + "tests/golden/M16-GAP-00192/anim-keying-set-export-local-exact-report.json": "0544edee932393df992ac05a4dbb07b4b1c82e4045cb15b674b182989105d0fa", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00193", + "gapId": "operator:anim.keying_set_path_add", + "evidenceLevel": "L3", + "completionClass": "FEATURE_PARITY", + "desktopPositive": true, + "wasmPositiveMutation": true, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "desktop positive oracle and explicit WASM/Main mutation with persistence evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "CANDIDATE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00193/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00193/anim-keying-set-path-add-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00193/anim-keying-set-path-add-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00193" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00193/manifest.json": "ebf4c605eae8591ecc7724941800832ec5dabca590cd13fabee399f31678635d", + "tests/golden/M16-GAP-00193/anim-keying-set-path-add-desktop-report.json": "0deab04ebdbf06c6b344707bf3025677d445c6995cbe3ea1268808c59ec74472", + "tests/golden/M16-GAP-00193/anim-keying-set-path-add-local-exact-report.json": "61e41fbc56bc7c6c1cbceb4ad3e28cb599e072f8c865f0a573091b47ba53790f", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00194", + "gapId": "operator:anim.keying_set_path_remove", + "evidenceLevel": "L3", + "completionClass": "FEATURE_PARITY", + "desktopPositive": true, + "wasmPositiveMutation": true, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "desktop positive oracle and explicit WASM/Main mutation with persistence evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "CANDIDATE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00194/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00194/anim-keying-set-path-remove-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00194/anim-keying-set-path-remove-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00194" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00194/manifest.json": "6d2092fb57e73b7946323ff7e3368bcc31bdba3b4fed74a13e4955deef104818", + "tests/golden/M16-GAP-00194/anim-keying-set-path-remove-desktop-report.json": "36ec6d4232418b56ea06b375bd0562718ef0cb787c393a860fcf69b663aa3a89", + "tests/golden/M16-GAP-00194/anim-keying-set-path-remove-local-exact-report.json": "a840e751c3e8c7ef6b02f388e8db434ebcd6cb4d0a151fbb3350d98f6689f438", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00195", + "gapId": "operator:anim.keying_set_remove", + "evidenceLevel": "L3", + "completionClass": "FEATURE_PARITY", + "desktopPositive": true, + "wasmPositiveMutation": true, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "desktop positive oracle and explicit WASM/Main mutation with persistence evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "CANDIDATE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00195/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00195/anim-keying-set-remove-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00195/anim-keying-set-remove-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00195" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00195/manifest.json": "44a58cb1164d78b9f5f5d81434227f94210cafc19d807f9c52c9d6f6d2cc3704", + "tests/golden/M16-GAP-00195/anim-keying-set-remove-desktop-report.json": "67fc9add6112f6513a95028ba2170d468b1ca82d83cf1b8d1afe2da98b907b15", + "tests/golden/M16-GAP-00195/anim-keying-set-remove-local-exact-report.json": "f1a6dc449055b1cddb1f796b885eaa347cf1c64ca082af7940c9c751a59dec9e", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00196", + "gapId": "operator:anim.keyingset_button_add", + "evidenceLevel": "L3", + "completionClass": "FEATURE_PARITY", + "desktopPositive": true, + "wasmPositiveMutation": true, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "desktop positive oracle and explicit WASM/Main mutation with persistence evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "CANDIDATE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00196/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00196/anim-keyingset-button-add-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00196/anim-keyingset-button-add-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00196" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00196/manifest.json": "6a22173b341fcf0d4cd4f867c6b27a6260b36c1bca8f2be6b1e792f27dd4d4b2", + "tests/golden/M16-GAP-00196/anim-keyingset-button-add-desktop-report.json": "a213760a261879356db09714df719221fef2f0a4c26865e12396b80089c21583", + "tests/golden/M16-GAP-00196/anim-keyingset-button-add-local-exact-report.json": "3146c77b1f77e3db9b1dc855c31408b0c076ecfea258aea8a86a834ab06ad9b3", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00197", + "gapId": "operator:anim.keyingset_button_remove", + "evidenceLevel": "L3", + "completionClass": "FEATURE_PARITY", + "desktopPositive": true, + "wasmPositiveMutation": true, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "desktop positive oracle and explicit WASM/Main mutation with persistence evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "CANDIDATE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00197/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00197/anim-keyingset-button-remove-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00197/anim-keyingset-button-remove-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00197" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00197/manifest.json": "36e8cf04bbbfd676f0df3d712f09369d1cfead8b27b2867e5c1a3242a11de188", + "tests/golden/M16-GAP-00197/anim-keyingset-button-remove-desktop-report.json": "223020f990cda11b261e3d0daf3171450718604cee9f923b5bd3aad8c9377b8a", + "tests/golden/M16-GAP-00197/anim-keyingset-button-remove-local-exact-report.json": "e44421253fcb26b9d313d9f97324b22a46fa8bbd8b734508416bc7bcd43c8f7b", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00198", + "gapId": "operator:anim.merge_animation", + "evidenceLevel": "L3", + "completionClass": "FEATURE_PARITY", + "desktopPositive": true, + "wasmPositiveMutation": true, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "desktop positive oracle and explicit WASM/Main mutation with persistence evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "CANDIDATE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00198/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00198/anim-merge-animation-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00198/anim-merge-animation-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00198" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00198/manifest.json": "6013fd35d42627772349bf98ecc54c4a97de8597b70a1c834bdd20477e42a2b9", + "tests/golden/M16-GAP-00198/anim-merge-animation-desktop-report.json": "e170913f6dd5161a10853f04c2e56ea1181de5de12fdf5fbb1159745dcd0f757", + "tests/golden/M16-GAP-00198/anim-merge-animation-local-exact-report.json": "914ef24f01a81d7baceeed4f67f317abf529cedec6ddbbd22c1ed35bb94039e2", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00199", + "gapId": "operator:anim.paste_driver_button", + "evidenceLevel": "L0", + "completionClass": "BLOCKED", + "desktopPositive": true, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "missing or non-authoritative mutation evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "BLOCKED", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00199/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00199/anim-paste-driver-button-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00199/anim-paste-driver-button-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00199" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00199/manifest.json": "cdea1201428c3ce98aafc32041b5d08613e5df048685a5f4996c2dd08b25111f", + "tests/golden/M16-GAP-00199/anim-paste-driver-button-desktop-report.json": "b20074b47768751a5e6c884165c4119e95296eb7a6fc4812e8bef3676e7aaf08", + "tests/golden/M16-GAP-00199/anim-paste-driver-button-local-exact-report.json": "7f860445f0e6889e6993e458b0e81f075c5b97fe8c2cf35b0eae4846e2d4cc5e", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00200", + "gapId": "operator:anim.previewrange_clear", + "evidenceLevel": "L0", + "completionClass": "BLOCKED", + "desktopPositive": true, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "missing or non-authoritative mutation evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "BLOCKED", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00200/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00200/anim-previewrange-clear-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00200/anim-previewrange-clear-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00200" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00200/manifest.json": "2b1708184ece734a60a24ec50be5c20443d288c5058f886374524861bd19d285", + "tests/golden/M16-GAP-00200/anim-previewrange-clear-desktop-report.json": "b1e7212248ff23d323e9c00645db52b38c4570f42c344b6325f1506c404704c4", + "tests/golden/M16-GAP-00200/anim-previewrange-clear-local-exact-report.json": "7ba44c02fcfa34df1c4e25fb3567474893b47dc4a20522f33634cd3ad36fe940", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00201", + "gapId": "operator:anim.previewrange_set", + "evidenceLevel": "L0", + "completionClass": "BLOCKED", + "desktopPositive": true, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "missing or non-authoritative mutation evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "BLOCKED", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00201/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00201/anim-previewrange-set-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00201/anim-previewrange-set-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00201" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00201/manifest.json": "2a4fe3fe279d103d63c09a8a3edaf9098363738c7b9822cc138df252c53146e7", + "tests/golden/M16-GAP-00201/anim-previewrange-set-desktop-report.json": "9a4abf76db56b660808f66834d941771a0cf860a662d53771ff8bf309bf2a162", + "tests/golden/M16-GAP-00201/anim-previewrange-set-local-exact-report.json": "7751033cb2d246ed4b87d10592894f27574d3409b5d48f3161a583f186786b67", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00202", + "gapId": "operator:anim.replace_action", + "evidenceLevel": "L0", + "completionClass": "BLOCKED", + "desktopPositive": true, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "missing or non-authoritative mutation evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "BLOCKED", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00202/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00202/anim-replace-action-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00202/anim-replace-action-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00202" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00202/manifest.json": "91cb4bf4fd4a534da5aafd55b335556736c65988f7a7705012149745977495ef", + "tests/golden/M16-GAP-00202/anim-replace-action-desktop-report.json": "fdb5531aa70842959bb57b8b9490c9839037af9a69191e23834e8793b507ac10", + "tests/golden/M16-GAP-00202/anim-replace-action-local-exact-report.json": "c122dbb9daadb8a449032ac742d308e7b9473bb4d05ae7855cf80ed3982f4263", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00203", + "gapId": "operator:anim.replace_action_new", + "evidenceLevel": "L0", + "completionClass": "BLOCKED", + "desktopPositive": true, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "missing or non-authoritative mutation evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "BLOCKED", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00203/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00203/anim-replace-action-new-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00203/anim-replace-action-new-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00203" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00203/manifest.json": "0e77fb69f0fab3e1a61d64d404a67d7ddd996aec9682f4c7dc0f09151f2297d0", + "tests/golden/M16-GAP-00203/anim-replace-action-new-desktop-report.json": "1017546d241a1e8b8f26c02bb392269a1325b18cbba90b1598f786250f13976a", + "tests/golden/M16-GAP-00203/anim-replace-action-new-local-exact-report.json": "d743947398ac1b4beca0f6cf86f676bf24d668488e1a9a575ec561d2445a1ed6", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00204", + "gapId": "operator:anim.scene_range_frame", + "evidenceLevel": "L0", + "completionClass": "BLOCKED", + "desktopPositive": true, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "missing or non-authoritative mutation evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "BLOCKED", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00204/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00204/anim-scene-range-frame-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00204/anim-scene-range-frame-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00204" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00204/manifest.json": "49799c0d3f99e88b855302e47c8211fa07c0a18f1fd0e9ac35c14cc67455b1aa", + "tests/golden/M16-GAP-00204/anim-scene-range-frame-desktop-report.json": "fd7943551bf6662d8cf43f623cdb966e7242b172eff8ca0f3bfee71c3b67dbed", + "tests/golden/M16-GAP-00204/anim-scene-range-frame-local-exact-report.json": "3195131f4c4cfa050656a4a301840d857f5eb65e2929aaa867d3b056d3fe631c", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00205", + "gapId": "operator:anim.separate_slots", + "evidenceLevel": "L0", + "completionClass": "BLOCKED", + "desktopPositive": true, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "missing or non-authoritative mutation evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "BLOCKED", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00205/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00205/anim-separate-slots-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00205/anim-separate-slots-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00205" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00205/manifest.json": "57c11c4c793715c5abf824ba4899f3231cdd4319ca68d44718424a8b3c46aebd", + "tests/golden/M16-GAP-00205/anim-separate-slots-desktop-report.json": "d3976e54b5617745cd29ed3979a030553a6692a54d8cd59454593efac1e419be", + "tests/golden/M16-GAP-00205/anim-separate-slots-local-exact-report.json": "421feb4b3b822a8bb13999e268a42f3378408d4d725879d1e05c3c8efe359a84", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00206", + "gapId": "operator:anim.slot_channels_move_to_new_action", + "evidenceLevel": "L0", + "completionClass": "BLOCKED", + "desktopPositive": true, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "missing or non-authoritative mutation evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "BLOCKED", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00206/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00206/anim-slot-channels-move-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00206/anim-slot-channels-move-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00206" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00206/manifest.json": "5d2636373112928a3b1edcf1f9f59a228f1e5d9f941cc49f35ec05cde35b7d77", + "tests/golden/M16-GAP-00206/anim-slot-channels-move-desktop-report.json": "17e021647d84852ea074b134a722de8dedeea70db3cf180fa60456892ebc86df", + "tests/golden/M16-GAP-00206/anim-slot-channels-move-local-exact-report.json": "4c92663dc8eb44d504ba95d4a978211656bd44273ff53cb468101f00ef20f8a3", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615" + } + }, + { + "task": "M16-GAP-00207", + "gapId": "operator:anim.slot_new_for_id", + "evidenceLevel": "L0", + "completionClass": "BLOCKED", + "desktopPositive": true, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "missing or non-authoritative mutation evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "BLOCKED", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00207/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00207/anim-slot-new-for-id-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00207/anim-slot-new-for-id-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00207" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00207/manifest.json": "4df5a793af0bc1ff797316048a1c84aba852ffc006c65ff32d9a2b21a64ed9a6", + "tests/golden/M16-GAP-00207/anim-slot-new-for-id-desktop-report.json": "62998821fb29ec9edb1c2796f984e009091cb9d12ccca4ec058094aea695a6f3", + "tests/golden/M16-GAP-00207/anim-slot-new-for-id-local-exact-report.json": "2c843b2611ac386e68943adb36fc826dcb694c8fb30df9b0abf10f8970b4f4fc", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00208", + "gapId": "operator:anim.slot_unassign_from_constraint", + "evidenceLevel": "L0", + "completionClass": "BLOCKED", + "desktopPositive": true, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "missing or non-authoritative mutation evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "BLOCKED", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00208/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00208/anim-slot-unassign-from-constraint-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00208/anim-slot-unassign-from-constraint-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00208" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00208/manifest.json": "2f31b1a712ffc0cb543c7fe0034754eddc02850b8f8c724681731d40e69f1329", + "tests/golden/M16-GAP-00208/anim-slot-unassign-from-constraint-desktop-report.json": "a303a5e1060fde95fbaaa0cf6e759cb4af330cf233b65ae1462953960fca51cd", + "tests/golden/M16-GAP-00208/anim-slot-unassign-from-constraint-local-exact-report.json": "cc7a531c48dc232d822ae6ffcc19f459d44d02976eb3b2f04133435d7a98b158", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00209", + "gapId": "operator:anim.slot_unassign_from_id", + "evidenceLevel": "L0", + "completionClass": "BLOCKED", + "desktopPositive": true, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "missing or non-authoritative mutation evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "BLOCKED", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00209/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00209/anim-slot-unassign-from-id-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00209/anim-slot-unassign-from-id-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00209" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00209/manifest.json": "4baa9b6dbcc1730a61eb728cb512bee2f54b2a7da1fa55f212a58045da93d20a", + "tests/golden/M16-GAP-00209/anim-slot-unassign-from-id-desktop-report.json": "12d1d6492c6d682a519045cc840c0e8f8b212b9eca9f0bdfa15536dc4602f17f", + "tests/golden/M16-GAP-00209/anim-slot-unassign-from-id-local-exact-report.json": "e42355c5cd82a7b06e5560312869fec9eed33ba7db613668c7920b3363901122", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00210", + "gapId": "operator:anim.slot_unassign_from_nla_strip", + "evidenceLevel": "L0", + "completionClass": "BLOCKED", + "desktopPositive": true, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "missing or non-authoritative mutation evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "BLOCKED", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00210/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00210/anim-slot-unassign-from-nla-strip-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00210/anim-slot-unassign-from-nla-strip-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00210" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00210/manifest.json": "4563aa7f392ee0e71cb94157d8f944db6e4e73d4ffaba69bfb702b48c7d57033", + "tests/golden/M16-GAP-00210/anim-slot-unassign-from-nla-strip-desktop-report.json": "35c89ff2c01b3887949572d83f27665b76eee49c5486e40b2c1b9e649916c9a2", + "tests/golden/M16-GAP-00210/anim-slot-unassign-from-nla-strip-local-exact-report.json": "d83b48f105f430cb7bbc2151b837fa589944a7c8d36a6156269ce4552aea5d41", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00211", + "gapId": "operator:anim.start_frame_set", + "evidenceLevel": "L0", + "completionClass": "BLOCKED", + "desktopPositive": true, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "missing or non-authoritative mutation evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "BLOCKED", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00211/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00211/anim-start-frame-set-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00211/anim-start-frame-set-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00211" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00211/manifest.json": "36c3cfb1aeafc1035b5b7d7d49330f8b2d3ed2c509c8c9ca290fe8e03946f35d", + "tests/golden/M16-GAP-00211/anim-start-frame-set-desktop-report.json": "b17a936ea363e216aa819cd90c79669a8f95c0c9cdb6aae74c5e24df13a4e240", + "tests/golden/M16-GAP-00211/anim-start-frame-set-local-exact-report.json": "b145f06715d9d6ef03a304e79d9cf635912db731d00991cd3be4dd56a6cc1a71", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00212", + "gapId": "operator:anim.update_animated_transform_constraints", + "evidenceLevel": "L0", + "completionClass": "BLOCKED", + "desktopPositive": true, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "missing or non-authoritative mutation evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "BLOCKED", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00212/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00212/anim-update-animated-transform-constraints-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00212/anim-update-animated-transform-constraints-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00212" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00212/manifest.json": "0b4b5cc4e140c0247f392652093afc82efdd64816c8eeeaae0b32c197cac24fb", + "tests/golden/M16-GAP-00212/anim-update-animated-transform-constraints-desktop-report.json": "6e486664dd967eec8f93569db555e23400fc147d40d172b7c1af19188e7e25e1", + "tests/golden/M16-GAP-00212/anim-update-animated-transform-constraints-local-exact-report.json": "98592f2cfe53ea6f2d59b34203211b0a45d3969ff546857313e2463f7f8e7b57", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00213", + "gapId": "operator:anim.version_bone_hide_property", + "evidenceLevel": "L0", + "completionClass": "BLOCKED", + "desktopPositive": true, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "missing or non-authoritative mutation evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "BLOCKED", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00213/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00213/anim-version-bone-hide-property-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00213/anim-version-bone-hide-property-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00213" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00213/manifest.json": "15b33102e0e3afdcd74905876916f2bd8f4fbbaa5afb35ff00021f9fa5a75737", + "tests/golden/M16-GAP-00213/anim-version-bone-hide-property-desktop-report.json": "35c3ee64110db16c946056cd3c3044321d6101a4ee68c2fd68038cbab4576616", + "tests/golden/M16-GAP-00213/anim-version-bone-hide-property-local-exact-report.json": "117e80e3ee5caf95979201d85b650de27967196242bf6f5656d24c3cec973d85", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00214", + "gapId": "operator:anim.view_curve_in_graph_editor", + "evidenceLevel": "L0", + "completionClass": "BLOCKED", + "desktopPositive": true, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "missing or non-authoritative mutation evidence", + "candidateCapabilityId": "CAP:animation.operator", + "coverageCapabilityIds": [ + "CAP:animation.operator" + ], + "mappingState": "BLOCKED", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00214/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00214/anim-view-curve-in-graph-editor-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00214/anim-view-curve-in-graph-editor-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00214" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00214/manifest.json": "2d0616d04a097f9c33d5ff4f1b59128072cbd9d63f7a3f1f4a444d62ba15e503", + "tests/golden/M16-GAP-00214/anim-view-curve-in-graph-editor-desktop-report.json": "127e6168e198cae8661d358b457d1459f9b515f79d2a6e86aa0c1022fb3210c6", + "tests/golden/M16-GAP-00214/anim-view-curve-in-graph-editor-local-exact-report.json": "bfa381ab96c2f2f0d9d16dcc7afd7a0200284a5704610cb70a6f0db402c3698b", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/protocol/editor-workflow.ts": "a3d4f32fafdc205f0a76362d1a43db85fa023e9edba444fcd77479da0c6f573a", + "web/protocol/scene-ir.ts": "9e877612886c629786405e03e1939d3954af2d38dfea2d6359b367934d06f226", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00215", + "gapId": "operator:armature.align", + "evidenceLevel": "L0", + "completionClass": "BLOCKED", + "desktopPositive": true, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "missing or non-authoritative mutation evidence", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "BLOCKED", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00215/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00215/armature-align-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00215/armature-align-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00215" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00215/manifest.json": "a2424686d66987be8387c2d1bcf020d8853a6fafec4f30f7032b57b012cff43d", + "tests/golden/M16-GAP-00215/armature-align-desktop-report.json": "f0f94981885773704748c302cad95cf7b0a24137cfb6d36921e8d464c408cb40", + "tests/golden/M16-GAP-00215/armature-align-local-exact-report.json": "d9b19ad3b36bc1a7303207b9ed9f3c2b32df072fce5349718b2783019e144e4e", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00216", + "gapId": "operator:armature.assign_to_collection", + "evidenceLevel": "L0", + "completionClass": "BLOCKED", + "desktopPositive": true, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "missing or non-authoritative mutation evidence", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "BLOCKED", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00216/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00216/armature-assign-to-collection-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00216/armature-assign-to-collection-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00216" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00216/manifest.json": "5190b44ebc9d0a75fc679fcbdd2ae42f7314592615b936e8096c2ed89bdcf284", + "tests/golden/M16-GAP-00216/armature-assign-to-collection-desktop-report.json": "f9ea1aedef9d6286d5038e9244cd82fec979238d3d72da76201b7bc3ac18b7e2", + "tests/golden/M16-GAP-00216/armature-assign-to-collection-local-exact-report.json": "4d063e44db5ebe56585caf6e1e28c9ba5dfaee8ddd95c4402a0d40474b94187c", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00217", + "gapId": "operator:armature.autoside_names", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00217/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00217/armature-autoside-names-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00217/armature-autoside-names-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00217" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00217/manifest.json": "831557970efee5b4f2bb19ed8abbc77b58d4ef1889b42244890b0e4ba84a1397", + "tests/golden/M16-GAP-00217/armature-autoside-names-desktop-report.json": "2ccaaa1f2b8549abc17bd0640add62b658ccc77b9a2792456df929dd209e466d", + "tests/golden/M16-GAP-00217/armature-autoside-names-local-exact-report.json": "2a479e88f080b7e7530f1f8f6ac87fe5aa5ca7ffaf69a068eaf4eeb99b257e80", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00218", + "gapId": "operator:armature.bone_primitive_add", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00218/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00218/armature-bone-primitive-add-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00218/armature-bone-primitive-add-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00218" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00218/manifest.json": "3a00c26d041b5d1b4e3f09f02913e3f20bf287fd0730cdec4b6ed2bfd468c7e9", + "tests/golden/M16-GAP-00218/armature-bone-primitive-add-desktop-report.json": "7176938d759ad47b1c4fd6a4c4b73cc3af615518f30540d535a0f997bfdfc3ef", + "tests/golden/M16-GAP-00218/armature-bone-primitive-add-local-exact-report.json": "042cee11ebc0ccac3108e51773fb486c08c8ef6f745d018b0abb6469678f4fb7", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00219", + "gapId": "operator:armature.calculate_roll", + "evidenceLevel": "L0", + "completionClass": "BLOCKED", + "desktopPositive": true, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "missing or non-authoritative mutation evidence", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "BLOCKED", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00219/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00219/armature-calculate-roll-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00219/armature-calculate-roll-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00219" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00219/manifest.json": "947a5e5f79dc1e9cc210ea41af2c2ac0804941a4f54da233c334ce72b07f8e31", + "tests/golden/M16-GAP-00219/armature-calculate-roll-desktop-report.json": "b4ea9eee1596aa99d045e7064b96a763faf7b29d6f7c79b95045d75ff26dd922", + "tests/golden/M16-GAP-00219/armature-calculate-roll-local-exact-report.json": "1c888b9739c03fcd5aed2b1de20a2aea3871c80cff6b6fcb464e09a5478f5c23", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00220", + "gapId": "operator:armature.click_extrude", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00220/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00220/armature-click-extrude-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00220/armature-click-extrude-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00220" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00220/manifest.json": "c452443a5f20e29debdd895753f5495b9a24c8e033c10baf59dd36bb640d7018", + "tests/golden/M16-GAP-00220/armature-click-extrude-desktop-report.json": "5fe98d54a481df86862f9f3bcdcb854fa9ea4abfb7de9de6819a07beb2bdb4af", + "tests/golden/M16-GAP-00220/armature-click-extrude-local-exact-report.json": "dbe683725d4e05220b6abaf837450c31f66cb8c82eb4ef75130c332ba98125d8", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00221", + "gapId": "operator:armature.collection_add", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00221/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00221/armature-collection-add-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00221/armature-collection-add-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00221" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00221/manifest.json": "e5876351a61ab89c8fbc866e093521b27b2be4beac77722fcc54768e843d97b9", + "tests/golden/M16-GAP-00221/armature-collection-add-desktop-report.json": "ccbe838e9d73ce8d63f7b81b5d7b28acf038b802fd5f76c5b806f21925df6e3b", + "tests/golden/M16-GAP-00221/armature-collection-add-local-exact-report.json": "edd1a7688e96982df6a0b3216784c437d668c70fb817e58f11be9a6be6a10dcd", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00222", + "gapId": "operator:armature.collection_assign", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00222/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00222/armature-collection-assign-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00222/armature-collection-assign-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00222" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00222/manifest.json": "cdb28783bc01a7275934784ea5816b0e53eceff198085cbc3494c365053618d0", + "tests/golden/M16-GAP-00222/armature-collection-assign-desktop-report.json": "db90ed0998768c9009f1c19b9eec12392d5c73bc7ca914a780bdd6721b41e932", + "tests/golden/M16-GAP-00222/armature-collection-assign-local-exact-report.json": "1b8650f03a1d51cd58f28be3a2bca0d44b34284b82708f5c16972360b9695791", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00223", + "gapId": "operator:armature.collection_create_and_assign", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00223/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00223/armature-collection-create-assign-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00223/armature-collection-create-assign-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00223" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00223/manifest.json": "772d82586d38ab984521f937da45bb0df53cada28c68e167d9c5a64a74466dee", + "tests/golden/M16-GAP-00223/armature-collection-create-assign-desktop-report.json": "d02d028f7ec561db7363feea7f5504c5f8f7d719cd36b6a6f2edb70847996b4c", + "tests/golden/M16-GAP-00223/armature-collection-create-assign-local-exact-report.json": "14b7947dd2485e11eeb2045d565fe97732865abc4aceb0e6765e3ab2fbe0f63f", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00224", + "gapId": "operator:armature.collection_deselect", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00224/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00224/armature-collection-deselect-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00224/armature-collection-deselect-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00224" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00224/manifest.json": "6d1d14972c3facb490cb9d82a860713a334f285e3c5243c8c8d66f16bc6e2153", + "tests/golden/M16-GAP-00224/armature-collection-deselect-desktop-report.json": "78b8615c71b02dbcb6b2b88086118b9c713aa3762ddf5d947ae0b696d72d7744", + "tests/golden/M16-GAP-00224/armature-collection-deselect-local-exact-report.json": "9bfc7c03a0e46bb31069e987c0a60dea1ebb0b5c17dbe382fb1d1847ad42595c", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00225", + "gapId": "operator:armature.collection_move", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00225/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00225/armature-collection-move-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00225/armature-collection-move-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00225" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00225/manifest.json": "750a41820606161a96c25a2e9e0ea5e347b1f00268a7971647a737bdd7259709", + "tests/golden/M16-GAP-00225/armature-collection-move-desktop-report.json": "06074b980f8df448546afcf0c96e89e47bcb160b309db81c869d525b35b281ad", + "tests/golden/M16-GAP-00225/armature-collection-move-local-exact-report.json": "aa0becd48b2e42dc3c3ac7222d6e0486ffc8089bceefb3670f102fecd6d1f2e6", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00226", + "gapId": "operator:armature.collection_remove", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00226/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00226/armature-collection-remove-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00226/armature-collection-remove-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00226" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00226/manifest.json": "23712e927e886e89dc943850cc8a3a69c484c590ba081baaaa5cd9f069f195c7", + "tests/golden/M16-GAP-00226/armature-collection-remove-desktop-report.json": "525ca8c6954750c9982bf91cbb3f26c9ad7a81911d56890dd6570cccfdbe3b37", + "tests/golden/M16-GAP-00226/armature-collection-remove-local-exact-report.json": "6df4c731b900161076a59892d26f15a8775d18571f27eb88321f890f91c9b9a0", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00227", + "gapId": "operator:armature.collection_remove_unused", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00227/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00227/armature-collection-remove-unused-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00227/armature-collection-remove-unused-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00227" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00227/manifest.json": "3dd6d018c6725c54d8f20064d60e4ad67b4a8e35ff10e1ae70a5d91b5f960d3b", + "tests/golden/M16-GAP-00227/armature-collection-remove-unused-desktop-report.json": "4909e040db7be0d5ac84148d52bb47cbdf0f12a30612e6c1bae1067fd4f04dca", + "tests/golden/M16-GAP-00227/armature-collection-remove-unused-local-exact-report.json": "b41c86788e6b9e21b04d42bdfaa645d29e669f8dfec9fdfaf96fa09771c64475", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00228", + "gapId": "operator:armature.collection_select", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00228/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00228/armature-collection-select-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00228/armature-collection-select-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00228" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00228/manifest.json": "d5e9e93fabb4874416f2e899d432ab1d7b8f1d695350a57ae7060e45c7df8849", + "tests/golden/M16-GAP-00228/armature-collection-select-desktop-report.json": "569c817b422e7947c30e202de7223a8da949127a022ce2b1e4f28de15202a440", + "tests/golden/M16-GAP-00228/armature-collection-select-local-exact-report.json": "cdb8e8196179776f53406eb67c2d6e838d547a2bae9b3dbb3a337646656abe64", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00229", + "gapId": "operator:armature.collection_show_all", + "evidenceLevel": "L0", + "completionClass": "BLOCKED", + "desktopPositive": true, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "missing or non-authoritative mutation evidence", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "BLOCKED", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00229/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00229/armature-collection-show-all-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00229/armature-collection-show-all-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00229" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00229/manifest.json": "d3bb608ab701dcb34731709e6dc30e17782a3ede9859144844a57612649c3137", + "tests/golden/M16-GAP-00229/armature-collection-show-all-desktop-report.json": "afe66c1b338702309a1c2a4af59d33365f31baf0db1797a95b0f980ecc76bc0a", + "tests/golden/M16-GAP-00229/armature-collection-show-all-local-exact-report.json": "1f4afb14bbdc7db07aad0b6df361b89e7020427ef63edc3fa641b3526dc05994", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00230", + "gapId": "operator:armature.collection_unassign", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00230/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00230/armature-collection-unassign-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00230/armature-collection-unassign-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00230" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00230/manifest.json": "b3caba3203a139af0a4bc70fee92add708b6f3a288b520d1e0e1667472c7b171", + "tests/golden/M16-GAP-00230/armature-collection-unassign-desktop-report.json": "289f7d681eadad4d426faad60787a12b75e27a728a1b02725b06c130cc501abe", + "tests/golden/M16-GAP-00230/armature-collection-unassign-local-exact-report.json": "4fdb066cafc7b138c1b2bde389ebd9794236971416ce27ee51b8348a5f3cb18f", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00231", + "gapId": "operator:armature.collection_unassign_named", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00231/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00231/armature-collection-unassign-named-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00231/armature-collection-unassign-named-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00231" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00231/manifest.json": "4527836f8949991f487e6ed780bfa81b000965cb50c19434b3a362895940edd4", + "tests/golden/M16-GAP-00231/armature-collection-unassign-named-desktop-report.json": "abdac650cb16974e738ec81067a0f44ac42fa3e9cf7c0cf86d5c0969b4cf1155", + "tests/golden/M16-GAP-00231/armature-collection-unassign-named-local-exact-report.json": "9800642cf4e7763d144b4d16dbfdd9c36c765bb8bef41407bcf7dafae0540208", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00232", + "gapId": "operator:armature.collection_unsolo_all", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00232/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00232/armature-collection-unsolo-all-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00232/armature-collection-unsolo-all-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00232" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00232/manifest.json": "26d599898750ab79e21f9d9270c3fe88a18adea24c44dbee8c3a5026ce298520", + "tests/golden/M16-GAP-00232/armature-collection-unsolo-all-desktop-report.json": "e42a8ace07205e1954b5685c46103736827bc6cdea98f182dc9cc63f1340094d", + "tests/golden/M16-GAP-00232/armature-collection-unsolo-all-local-exact-report.json": "9be85459dec5551c4245cea4cfd025ca3dcef6be5e01ee24cb42249852e0ec0d", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00233", + "gapId": "operator:armature.copy_bone_color_to_selected", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00233/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00233/armature-copy-bone-color-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00233/armature-copy-bone-color-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00233" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00233/manifest.json": "976ef775b049341b9b89814992e91b1ba6af6a7113144c25199336df4c315df0", + "tests/golden/M16-GAP-00233/armature-copy-bone-color-desktop-report.json": "45464ed86aa52df4a5db68c0fac749585dc7f09b2d2c86080be467e1bf54c068", + "tests/golden/M16-GAP-00233/armature-copy-bone-color-local-exact-report.json": "1f8e2f7ba0c32ff17d12ed24da24426d8359d45ac3aa8badef68d2c98cea2ec2", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00234", + "gapId": "operator:armature.delete", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00234/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00234/armature-delete-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00234/armature-delete-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00234" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00234/manifest.json": "652590011d3777a2c41dae6222c623bbd70479fb0e43ac3d83f1fe4436f6877b", + "tests/golden/M16-GAP-00234/armature-delete-desktop-report.json": "d6c85736295a6f07950292425294e188a6b17228c91eb1151a38e6da4833679e", + "tests/golden/M16-GAP-00234/armature-delete-local-exact-report.json": "89e0b6b13dd025e4d0d72eec409845c44f43d90e52fb4f506282cad455b5c0a8", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00235", + "gapId": "operator:armature.dissolve", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00235/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00235/armature-dissolve-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00235/armature-dissolve-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00235" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00235/manifest.json": "cf9cbb37b59f6b75bc1a5dfae9bdbc549bf84fa682827190edbcc2fc0ceca17c", + "tests/golden/M16-GAP-00235/armature-dissolve-desktop-report.json": "bb9acbe5fd923532f125e511f6f113ef3543b519bfd757a942e4466eef7e2c79", + "tests/golden/M16-GAP-00235/armature-dissolve-local-exact-report.json": "97e46604d0c79afccd2968e64127da80382a92053f53b6f0b706d7b742aa608e", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00236", + "gapId": "operator:armature.duplicate", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00236/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00236/armature-duplicate-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00236/armature-duplicate-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00236" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00236/manifest.json": "c5d509f666dc447aa959a5d7ef4eb69aefa00bdda1b87a0f4b501437c63f5416", + "tests/golden/M16-GAP-00236/armature-duplicate-desktop-report.json": "b648c7d518227a03b4d142a61ad4e3f15de71cf58e3fc23b603f7fdd26e1bf0b", + "tests/golden/M16-GAP-00236/armature-duplicate-local-exact-report.json": "2c005ed1342943cec21b7a71371449af4d01909026bd18c8cd9ca65f868d51a9", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00237", + "gapId": "operator:armature.duplicate_move", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00237/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00237/armature-duplicate-move-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00237/armature-duplicate-move-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00237" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00237/manifest.json": "d6f01fd318b195a2b848641f25663380e09acdac9b932d20eb4b56db5b2adb51", + "tests/golden/M16-GAP-00237/armature-duplicate-move-desktop-report.json": "94745cd286e017a11dd6fd8df308a22e4d4b5e572bbc3115ee8bbac5fa430bea", + "tests/golden/M16-GAP-00237/armature-duplicate-move-local-exact-report.json": "3b99961a3aaf2e61d64aa6c9ac9c76e9c5db72e2b5bf14887f613d1bb0723ff9", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00238", + "gapId": "operator:armature.duplicate_rename", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00238/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00238/armature-duplicate-rename-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00238/armature-duplicate-rename-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00238" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00238/manifest.json": "2ba32bdae4d7b5765b0448195f5f1f9dc68b05a1e98f64b5c07981f823f75472", + "tests/golden/M16-GAP-00238/armature-duplicate-rename-desktop-report.json": "90a4d915eb9967f97495ede7b6f855d2049ea1059208b99e75128d79e7f51911", + "tests/golden/M16-GAP-00238/armature-duplicate-rename-local-exact-report.json": "f3e103b6c1a311bfeaad31c96066060519b091b3ae14c925a3d18e89e6ba8d2a", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00239", + "gapId": "operator:armature.extrude", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00239/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00239/armature-extrude-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00239/armature-extrude-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00239" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00239/manifest.json": "d218063c374dc5175f68df1bed975d2aeade7297d1e48a5d71d4f5ded6634644", + "tests/golden/M16-GAP-00239/armature-extrude-desktop-report.json": "3f264c22cc013676e33e82b98458a5baff8703addaaee26812ed2205aa062fed", + "tests/golden/M16-GAP-00239/armature-extrude-local-exact-report.json": "524adb7be53d523d48f87773d6782bd78db1e81eb6d88c6eba3641ff283e5269", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00240", + "gapId": "operator:armature.extrude_forked", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00240/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00240/armature-extrude-forked-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00240/armature-extrude-forked-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00240" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00240/manifest.json": "ff8c072e894bfe46c2f3e3743b6a16b523049c36e4eb8b7c765d33002566489c", + "tests/golden/M16-GAP-00240/armature-extrude-forked-desktop-report.json": "37ca8eb97c454cc572f70143aa98f01cba23190ea889bce7b688529d415945a4", + "tests/golden/M16-GAP-00240/armature-extrude-forked-local-exact-report.json": "957d36b2188d063415a2dcb70995bacddfeac01152872cf06ae27bba941a3ce6", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00241", + "gapId": "operator:armature.extrude_move", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00241/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00241/armature-extrude-move-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00241/armature-extrude-move-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00241" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00241/manifest.json": "3dfbe6708ba3cddc37621358b9de095a160c8a30307e0392df4a6801dd34d4bf", + "tests/golden/M16-GAP-00241/armature-extrude-move-desktop-report.json": "a24fb58e990504c5bd8a8d7a2d010f16028e070f099137bb26e5a2769a7fcc38", + "tests/golden/M16-GAP-00241/armature-extrude-move-local-exact-report.json": "05293986bab59aed5d1629d9a9e28c3499db619b33294f6f5d7557a463bfc001", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00242", + "gapId": "operator:armature.fill", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00242/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00242/armature-fill-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00242/armature-fill-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00242" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00242/manifest.json": "94a0fa963ffedaa13c9ae5bb8de9b93e36958b4034f215f02f1751ffd377dbb0", + "tests/golden/M16-GAP-00242/armature-fill-desktop-report.json": "39f5db8f1a77e188ef3d4c3084c9bcf961551767211b40f006499a66ad51f56f", + "tests/golden/M16-GAP-00242/armature-fill-local-exact-report.json": "f4d927d1e6a10c9db3bd0b6a32b771aa96a25af9f9a5ab4a01741932173a293a", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00243", + "gapId": "operator:armature.flip_names", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00243/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00243/armature-flip-names-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00243/armature-flip-names-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00243" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00243/manifest.json": "8cffd9a3c49fccda2858efff8bc4d77c4a3fe20823f4cb455efbf5eaec6348e7", + "tests/golden/M16-GAP-00243/armature-flip-names-desktop-report.json": "489a05e88b2f35bfa0c910623db17897d70041afbbeecd2ad6575997c62d5a7f", + "tests/golden/M16-GAP-00243/armature-flip-names-local-exact-report.json": "e3a6efe370d43e0d05e4668994c70dade862aec0f45b50978558d3468e022d93", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00244", + "gapId": "operator:armature.hide", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00244/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00244/armature-hide-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00244/armature-hide-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00244" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00244/manifest.json": "26ae97299dc1b424c9d2e00146f92b361467b6eec998674b58596418df0c81b0", + "tests/golden/M16-GAP-00244/armature-hide-desktop-report.json": "382b6abd52f5d54e519690cc3760fc5cddf1db2516abe8fe3e2acfedb500ed83", + "tests/golden/M16-GAP-00244/armature-hide-local-exact-report.json": "295134cdf0ed210c1eebdb166ad3251dd47234ff4b23e084a6c6f4e26e8615ea", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00245", + "gapId": "operator:armature.move_to_collection", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00245/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00245/armature-move-to-collection-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00245/armature-move-to-collection-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00245" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00245/manifest.json": "f97d43c3f6a11d56fa2ece99f82f24952e84ac41253f282bc6e816c10a9b8840", + "tests/golden/M16-GAP-00245/armature-move-to-collection-desktop-report.json": "26ba97ec93b9e190d06dc912b8b441eb14c49d3a409ae2635aba0adc8dfa6f9b", + "tests/golden/M16-GAP-00245/armature-move-to-collection-local-exact-report.json": "d898f1ffaa59f14b7a92e88d90413d0b3c200548ee5288342938f3803077e186", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00246", + "gapId": "operator:armature.parent_clear", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00246/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00246/armature-parent-clear-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00246/armature-parent-clear-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00246" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00246/manifest.json": "451918ee690f572a29a1644a9d62dd4b97a88aa868b569661ea758ccf1fd4c1d", + "tests/golden/M16-GAP-00246/armature-parent-clear-desktop-report.json": "e59a8594cbc6f313ac9651706575eeabd2d58fb2520eafdf825c5a467a2d9b7a", + "tests/golden/M16-GAP-00246/armature-parent-clear-local-exact-report.json": "3e89fd698b0a8d118b0dcfb428f957ad7cc051e5a7a5b898cf90f49c996080a2", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00247", + "gapId": "operator:armature.parent_set", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00247/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00247/armature-parent-set-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00247/armature-parent-set-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00247" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00247/manifest.json": "7606f55b96df7e9c39ee3c6a390f645e50a81197c7935dd8f9bdc53e2fc90859", + "tests/golden/M16-GAP-00247/armature-parent-set-desktop-report.json": "c2348f9a4e51030006f9c1a2756f016e2c454d957a952e2d07a2948dabba9f4a", + "tests/golden/M16-GAP-00247/armature-parent-set-local-exact-report.json": "ed5125f71cbe8af51244c5bc8798b2d0722d3272a331b9999ba22f5606926139", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00248", + "gapId": "operator:armature.reveal", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00248/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00248/armature-reveal-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00248/armature-reveal-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00248" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00248/manifest.json": "871a43908f31db735f2b2c39842d8064bf4bda1b8604ce1669e788f14188b98f", + "tests/golden/M16-GAP-00248/armature-reveal-desktop-report.json": "7f972847f4646f54f02e2e25efefd993c083c0be15ed18c2b570640bc314059a", + "tests/golden/M16-GAP-00248/armature-reveal-local-exact-report.json": "35ca506d64f000444107c2a6da1b8a7074204c415dc6d4ea4afc9492aeb57209", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00249", + "gapId": "operator:armature.roll_clear", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00249/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00249/armature-roll-clear-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00249/armature-roll-clear-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00249" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00249/manifest.json": "2e2143ec677143684a86c15b6bf0e590c7cbe78e306c3440c1fae888894c9562", + "tests/golden/M16-GAP-00249/armature-roll-clear-desktop-report.json": "d4961663044d04bed11d79948c12d7672d541da799cc519a7e0043023fd0540a", + "tests/golden/M16-GAP-00249/armature-roll-clear-local-exact-report.json": "60aff7413075c183ce0f8c443784b01cbb57343463588185c5f1839636e07ee6", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00250", + "gapId": "operator:armature.select_all", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00250/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00250/armature-select-all-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00250/armature-select-all-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00250" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00250/manifest.json": "a11edc9d6f92507a2cbafb4e610daf80577c512a867572998197ee65afb341d4", + "tests/golden/M16-GAP-00250/armature-select-all-desktop-report.json": "0d68d0d0b4f3880339f29ef467bc7ab241623bdf3422ca83c53b49efec5e7295", + "tests/golden/M16-GAP-00250/armature-select-all-local-exact-report.json": "e8d922dde3d8401c79adc75621523ee3441a4d97f74416816e2f2209083297b2", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00251", + "gapId": "operator:armature.select_hierarchy", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00251/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00251/armature-select-hierarchy-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00251/armature-select-hierarchy-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00251" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00251/manifest.json": "2d2b97598ed9b152cca657480d0345c94ba0daa3664854804fef97ff719da4fb", + "tests/golden/M16-GAP-00251/armature-select-hierarchy-desktop-report.json": "8d57e6ce5bc33f6e87eaba09ffb411bf68b752a4729438de9f78063f7354c092", + "tests/golden/M16-GAP-00251/armature-select-hierarchy-local-exact-report.json": "4d36c680a2947be8c29e076849d3d4ec8ad2a2c1a2ccf9e7330b311c0d4be5ac", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00252", + "gapId": "operator:armature.select_less", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00252/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00252/armature-select-less-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00252/armature-select-less-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00252" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00252/manifest.json": "3b9b9ad0ae26c783452604387d0050c29d057b4dbc260a8b21ac8d3064778d93", + "tests/golden/M16-GAP-00252/armature-select-less-desktop-report.json": "a7cb4e98fbf96079ef88c8de7491a43e611e1c759525d7bffdef785cadf458f7", + "tests/golden/M16-GAP-00252/armature-select-less-local-exact-report.json": "5e9743ec56f672990fca63850abe1abd567c6c0488926be44a00dd6295b96c39", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00253", + "gapId": "operator:armature.select_linked", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00253/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00253/armature-select-linked-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00253/armature-select-linked-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00253" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00253/manifest.json": "5af1e1b0d4dc4fadc0c53753c8a97d8f3ebd25f9e6678bf6c2f492656d9ab447", + "tests/golden/M16-GAP-00253/armature-select-linked-desktop-report.json": "3a2b4e82aeaa2fdea3ae01df802c8de371f184dc0b018cc1c16d2349d19b9fa3", + "tests/golden/M16-GAP-00253/armature-select-linked-local-exact-report.json": "d184c248dd13878698f5b973331bbe7d65cde2defa697f22e4c05df9a433b42a", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00254", + "gapId": "operator:armature.select_linked_pick", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00254/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00254/armature-select-linked-pick-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00254/armature-select-linked-pick-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00254" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00254/manifest.json": "27559d8af83fec4a60745da1bdf7c1ca9e9cb8b57acd0c0afe84eb9845f13d36", + "tests/golden/M16-GAP-00254/armature-select-linked-pick-desktop-report.json": "1338c391ecabbb35166c5df8e36a8a0f5b65deca3994f7c2ee1d799b564906d0", + "tests/golden/M16-GAP-00254/armature-select-linked-pick-local-exact-report.json": "14560b0b43aa917fa31fe8c9023992285313204c858d7260da22347a8696b9bb", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00255", + "gapId": "operator:armature.select_mirror", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00255/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00255/armature-select-mirror-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00255/armature-select-mirror-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00255" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00255/manifest.json": "f159c2e4849cb30d6e29745eca0a921ec96f3e2ec286634e275626e8b1ebef14", + "tests/golden/M16-GAP-00255/armature-select-mirror-desktop-report.json": "d5b76fb51060be4e1b56e81d238d74df4556b09ceae84dcb0f9c545dfa1bf35f", + "tests/golden/M16-GAP-00255/armature-select-mirror-local-exact-report.json": "e87ab4016b6ef049c7ed7177d9dee54d44dbcb88d5bbab6f0dbefddadce6b48c", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00256", + "gapId": "operator:armature.select_more", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00256/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00256/armature-select-more-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00256/armature-select-more-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00256" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00256/manifest.json": "c5c39b06605c9c32b11bcf78d79cc895c9740f776e5d3103368bf34b99b61d36", + "tests/golden/M16-GAP-00256/armature-select-more-desktop-report.json": "76c4cbf93b70f19535b1e4b2f9b580ca6803da03ac3c7aeafa4523fca6a24baf", + "tests/golden/M16-GAP-00256/armature-select-more-local-exact-report.json": "d091f0032c51091e234da5ff0c931855cb1491dd86d9cd51ef0fc2e7143e9017", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00257", + "gapId": "operator:armature.select_similar", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00257/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00257/armature-select-similar-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00257/armature-select-similar-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00257" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00257/manifest.json": "c9945a0fc6356f38e50041f247dc7f9745302ec2a715cc1b02730e6d7f6e6e72", + "tests/golden/M16-GAP-00257/armature-select-similar-desktop-report.json": "22cdd9b6ce61fedfda0b76fcedb0c122176d4e17c5ca7ae06277d221ef1ac22e", + "tests/golden/M16-GAP-00257/armature-select-similar-local-exact-report.json": "cc8a91b14a765d9643289230ca8e38800cabcecc74883845b8e06087f528be4c", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00258", + "gapId": "operator:armature.separate", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00258/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00258/armature-separate-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00258/armature-separate-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00258" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00258/manifest.json": "790c807250274946a4d72737b899410843d7918d193a7a6f74403b09feed0a8f", + "tests/golden/M16-GAP-00258/armature-separate-desktop-report.json": "8226ce041d7bd04dc31d93e01537bd8a598886fdfc1feaa36e3d98910007e720", + "tests/golden/M16-GAP-00258/armature-separate-local-exact-report.json": "4cefec2f7519e0a3e23eed6ba3e199760ed46f6af0cbe36b48932270211ea3b4", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00259", + "gapId": "operator:armature.shortest_path_pick", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00259/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00259/armature-shortest-path-pick-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00259/armature-shortest-path-pick-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00259" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00259/manifest.json": "b941242c5d86191fc65c123c2e98b174cfb8be85d6c9446004547366ed507b94", + "tests/golden/M16-GAP-00259/armature-shortest-path-pick-desktop-report.json": "3a42c0aaa54538109b1bec89e12976848464e18fdd27c30cc43b302a78557fd8", + "tests/golden/M16-GAP-00259/armature-shortest-path-pick-local-exact-report.json": "35348832a78139d10dc5c8217f64453c54430be47ee8968d59f76a76ccf2ceda", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00260", + "gapId": "operator:armature.split", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00260/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00260/armature-split-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00260/armature-split-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00260" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00260/manifest.json": "093aef34f7e580546a4de51c593df1b79fa8a6ac8f89b69028e70a0141e0ec11", + "tests/golden/M16-GAP-00260/armature-split-desktop-report.json": "3f7022cc9a1e6398b124763aa8f99c42e633dc036a7cae887e3fb252afd4352e", + "tests/golden/M16-GAP-00260/armature-split-local-exact-report.json": "38a055ec0e21dc6adf0818089dafce97ddcbdbed78e9a6be0080ad960b94361e", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00261", + "gapId": "operator:armature.subdivide", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00261/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00261/armature-subdivide-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00261/armature-subdivide-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00261" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00261/manifest.json": "baaa1d2b69522e11eef404d7fc2c76ad709ef57cf1ab45e646c064b87abd8221", + "tests/golden/M16-GAP-00261/armature-subdivide-desktop-report.json": "77e3d698de66ad1d1b5d595049f6e515e3fddbcdb83ef8a3bce25afa79c84c23", + "tests/golden/M16-GAP-00261/armature-subdivide-local-exact-report.json": "dca39b46351f9447faaa84c11cebee86a1dc87876052b55df3a5e2d1a0cd291a", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00262", + "gapId": "operator:armature.switch_direction", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00262/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00262/armature-switch-direction-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00262/armature-switch-direction-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00262" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00262/manifest.json": "8eacdba454bb0c7d2ca962308aa7b36239bb3b256543ab655cadce1b29a9a30c", + "tests/golden/M16-GAP-00262/armature-switch-direction-desktop-report.json": "b354e79b081ed5a42edafb0d2ff7c2811b3793b06997ffd493cb0412c10637ac", + "tests/golden/M16-GAP-00262/armature-switch-direction-local-exact-report.json": "a70785bfc13f65f94e22747c67eff0b4a07b0aa3afbaa999a5f39ab706769cda", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00263", + "gapId": "operator:armature.symmetrize", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:armature.operator", + "coverageCapabilityIds": [ + "CAP:armature.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00263/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00263/armature-symmetrize-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00263/armature-symmetrize-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00263" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00263/manifest.json": "d7e28d947f1ac7d20145770a5813a462b53470d0f08c863994b5f89fc0c35b0e", + "tests/golden/M16-GAP-00263/armature-symmetrize-desktop-report.json": "2ca4f83737867b62fd8c4b42bc6092a59178baa4a18f8bc192764c859d1e5c88", + "tests/golden/M16-GAP-00263/armature-symmetrize-local-exact-report.json": "1dbef4a312f55198108fcdcab216e0739f08c237a19084e28b21a63f53f9dab7", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00264", + "gapId": "operator:asset.asset_download", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:asset.catalog.operator", + "coverageCapabilityIds": [ + "CAP:asset.catalog.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00264/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00264/asset-download-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00264/asset-download-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00264" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00264/manifest.json": "8579229e93bca229b2e95b70454a8e42fd1fd8a397b5ec11ede1acdebe5f69ad", + "tests/golden/M16-GAP-00264/asset-download-desktop-report.json": "399aed90c3b236f1c169fad88dbc92f5409d26ca35bdeb5768bb9272a50a7157", + "tests/golden/M16-GAP-00264/asset-download-local-exact-report.json": "ad88b3a8b18007bf61d4351185ee2cab8c09e9e3a74958d521f94ff1a221795c", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00265", + "gapId": "operator:asset.assets_download", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:asset.catalog.operator", + "coverageCapabilityIds": [ + "CAP:asset.catalog.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00265/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00265/assets-download-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00265/assets-download-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00265" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00265/manifest.json": "cef5d172c0d9e5a246839c45166c9a134c7e3fef9e8ca2748f583feb1c471b55", + "tests/golden/M16-GAP-00265/assets-download-desktop-report.json": "1ce5009ec4582730437cbefbb5722699bc6d2fe0824eede52bf8de98b85ccb24", + "tests/golden/M16-GAP-00265/assets-download-local-exact-report.json": "35d1005b88bb477b0bc686297d4e178fbdf1c3feeb7fb29bb443a019d7a34b4d", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00266", + "gapId": "operator:asset.assign_action", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:asset.catalog.operator", + "coverageCapabilityIds": [ + "CAP:asset.catalog.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00266/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00266/assign-action-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00266/assign-action-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00266" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00266/manifest.json": "7e6f03fdb457ed629a0cc8d4d4689210f29907554c88e1e9fece59e3087b03a7", + "tests/golden/M16-GAP-00266/assign-action-desktop-report.json": "aacd8ad7641a390a2f2b4990d4b324bb9478ee0a45a42c9bf4e52720038dfab4", + "tests/golden/M16-GAP-00266/assign-action-local-exact-report.json": "e2376fd259124a1d90db2ded522f1231df3d12d0f5eb3d82c229e95fc680f1dc", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00267", + "gapId": "operator:asset.browse_containing_blend_file", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:asset.catalog.operator", + "coverageCapabilityIds": [ + "CAP:asset.catalog.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00267/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00267/browse-containing-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00267/browse-containing-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00267" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00267/manifest.json": "8864a147c109a03909b2c7ba97424383d2da77cc7d8ce4cab8e4d256964082fe", + "tests/golden/M16-GAP-00267/browse-containing-desktop-report.json": "cad41d8dfb33770fdbd87f44d2eb04b070cdb120665a188a379c0436fc25f324", + "tests/golden/M16-GAP-00267/browse-containing-local-exact-report.json": "2c522d5b6c545f7bf8d7238d881a94c2d6463abcb41bf24989b3218962a51ac1", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00268", + "gapId": "operator:asset.bundle_install", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:asset.catalog.operator", + "coverageCapabilityIds": [ + "CAP:asset.catalog.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00268/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00268/bundle-install-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00268/bundle-install-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00268" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00268/manifest.json": "406a32de95f25f900e4f4247738d4d472d1a00b30e27ba2b95e07f317c38c71d", + "tests/golden/M16-GAP-00268/bundle-install-desktop-report.json": "088fbc1390ae171dc219c201f09519f8c0fc460bc61138d13d189e3e6ec6d1c0", + "tests/golden/M16-GAP-00268/bundle-install-local-exact-report.json": "be82a7849a167cebed509f7ac451f3c1c1756757afe34e940453df686b507d97", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00269", + "gapId": "operator:asset.catalog_delete", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:asset.catalog.operator", + "coverageCapabilityIds": [ + "CAP:asset.catalog.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00269/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00269/catalog-delete-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00269/catalog-delete-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00269" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00269/manifest.json": "68938c08789e0cbec3bf92eb3128930a58c4cfccc440fd912d3f15017f8fdd58", + "tests/golden/M16-GAP-00269/catalog-delete-desktop-report.json": "68070e257397148441c11e1ecfc9a2202f9955cee17a3f8ee878d4e0f1310790", + "tests/golden/M16-GAP-00269/catalog-delete-local-exact-report.json": "1cd38bfab4ba20d3238bbb11fc9838b5479f96c345c6f98e479eea25fe229bd1", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00270", + "gapId": "operator:asset.catalog_new", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:asset.catalog.operator", + "coverageCapabilityIds": [ + "CAP:asset.catalog.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00270/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00270/catalog-new-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00270/catalog-new-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00270" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00270/manifest.json": "1a40f8d0e38bf727e77f4d2fd90f6cda68814cffcd946e5dc7215932d869d9e5", + "tests/golden/M16-GAP-00270/catalog-new-desktop-report.json": "a8037c3b339c215db7bc4143ce0999074a366019a8868516baec00086378e2d9", + "tests/golden/M16-GAP-00270/catalog-new-local-exact-report.json": "99f10be076dd573ee658256e2b2e08c40af1997b344268a84cdc0fa8fe939e81", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00271", + "gapId": "operator:asset.catalog_redo", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:asset.catalog.operator", + "coverageCapabilityIds": [ + "CAP:asset.catalog.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00271/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00271/catalog-redo-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00271/catalog-redo-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00271" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00271/manifest.json": "25eb8632d0667947cb28eb87c4105742bdd9a92fac94ff75f670a55586395635", + "tests/golden/M16-GAP-00271/catalog-redo-desktop-report.json": "31dedccda115a8219307ad7f677602fc907e6e012297b4e6a6a68f19fb1415d5", + "tests/golden/M16-GAP-00271/catalog-redo-local-exact-report.json": "25e5b338ad95d2e09e0cc651fd14f5c66a21be78f3d0d0039f8b161386e2fdb9", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00272", + "gapId": "operator:asset.catalog_undo", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:asset.catalog.operator", + "coverageCapabilityIds": [ + "CAP:asset.catalog.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00272/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00272/catalog-undo-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00272/catalog-undo-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00272" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00272/manifest.json": "bd2f3d63c8e4e9b636a1b265979059d0e1ee7a5ea646eec55c2c5f4c60b3d463", + "tests/golden/M16-GAP-00272/catalog-undo-desktop-report.json": "21d131f2b2c5ffe8772bcb4606dbf16388467572cd0542c6dd16c66e1730b712", + "tests/golden/M16-GAP-00272/catalog-undo-local-exact-report.json": "4cb20b624a5f96d417c33d928b760befaacb8c59610f197ff1a666d1fc78a5f0", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + }, + { + "task": "M16-GAP-00273", + "gapId": "operator:asset.catalog_undo_push", + "evidenceLevel": "L1", + "completionClass": "NEGATIVE_BOUNDARY", + "desktopPositive": false, + "wasmPositiveMutation": false, + "readerChanged": true, + "wasmChanged": true, + "saveReopen": "EXACT", + "reason": "evidence is cancellation, unsupported, resource, or malformed-input boundary", + "candidateCapabilityId": "CAP:asset.catalog.operator", + "coverageCapabilityIds": [ + "CAP:asset.catalog.operator" + ], + "mappingState": "RETAINED_NEGATIVE", + "evidenceRefs": { + "manifest": "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00273/manifest.json", + "desktopReport": "tests/golden/M16-GAP-00273/catalog-undo-push-desktop-report.json", + "webReport": "tests/golden/M16-GAP-00273/catalog-undo-push-local-exact-report.json", + "command": "node tools/web/check-generated-gap.mjs --task M16-GAP-00273" + }, + "sourceHashes": { + "tests/golden/corrective/C0-002/staged/resigned-manifests/M16-GAP-00273/manifest.json": "d45d044aee8785d91563cf5024495ceb2f10c7ce80eb3c813df79e5f141af7b6", + "tests/golden/M16-GAP-00273/catalog-undo-push-desktop-report.json": "03421f7e7ffe6eb3f0ec93c6f09cd505f806e228145cf4ce6d55e3b841b8b34b", + "tests/golden/M16-GAP-00273/catalog-undo-push-local-exact-report.json": "86e5cabacde4ee419d71011b902e0fc561e7da94028879bca4ca0315ad1d4f72", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711", + "web/engine/web_engine_native_reader_stub.cpp": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a", + "web/app/src/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/src/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35", + "web/app/public/vendor/blender/web_engine.wasm": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615", + "web/app/public/vendor/blender/web_engine.js": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35" + } + } + ] +} diff --git a/tests/golden/corrective/C0-003/manifest.json b/tests/golden/corrective/C0-003/manifest.json new file mode 100644 index 00000000..fa44bbe8 --- /dev/null +++ b/tests/golden/corrective/C0-003/manifest.json @@ -0,0 +1,178 @@ +{ + "schemaVersion": 1, + "task": "C0-003", + "status": "done", + "gate": "G0", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C0-003", + "artifactCount": 26, + "artifacts": [ + { + "path": "tests/golden/corrective/C0-003/check-context-governance.log", + "sha256": "8b4a0add34d164d2e514192c430269e780f03f92697d77e494aa35825b5861f3", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C0-003/check-corrective-plan.log", + "sha256": "4ce7fa2bfa5cc386187094049ba0eee17bb494edf59a5cb776e8ea8c312979f0", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C0-003/check-task-context-final.log", + "sha256": "d878b0cb346102d780a0de68deeb14a36d9c2e7aec63f1010a3d6454e276563a", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C0-003/check-task-index.log", + "sha256": "ce310f4a62f095235c7d6096c324e8404e02588871f62cd27a4116a1fac8c2cc", + "bytes": 94 + }, + { + "path": "tests/golden/corrective/C0-003/classification-cmp.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C0-003/classification-command.log", + "sha256": "9d40e2920bae0d48e5eb8ba68d78bef6491992d78e60c026d3b848866fdea48d", + "bytes": 91 + }, + { + "path": "tests/golden/corrective/C0-003/classification-report.md", + "sha256": "a70cce8219dd716cfde8f3cddbdf4b41bb76012b442df92cf9f3fae97af007e5", + "bytes": 31533 + }, + { + "path": "tests/golden/corrective/C0-003/cluster-cmp.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C0-003/cluster-summary.json", + "sha256": "216fbc53210eb9777a362dcb2320a0a14f74b832e42b4a58c9983c986ccc172a", + "bytes": 9167 + }, + { + "path": "tests/golden/corrective/C0-003/command-exit-codes.json", + "sha256": "db2f37b10b35237a528f55099a2cdef6a6788c2220c0d4eab43538c99eb2d4d4", + "bytes": 201 + }, + { + "path": "tests/golden/corrective/C0-003/count-gate.log", + "sha256": "a17fcf0a2f50e2d495e4f90ce263410edc183add6c62699a2facbccf60410f74", + "bytes": 5 + }, + { + "path": "tests/golden/corrective/C0-003/determinism-second-command.log", + "sha256": "d1811a2fd13a84947fffc5b43d93a073948652f72aa114215af6af01dc8f6266", + "bytes": 94 + }, + { + "path": "tests/golden/corrective/C0-003/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C0-003/evidence-ref-gate.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C0-003/feature-gate.log", + "sha256": "a17fcf0a2f50e2d495e4f90ce263410edc183add6c62699a2facbccf60410f74", + "bytes": 5 + }, + { + "path": "tests/golden/corrective/C0-003/handoff-command.log", + "sha256": "3a0e9c97ccf7998d675b0176a47e0400b58dc08ae88f635a28e930ec8a118dff", + "bytes": 79 + }, + { + "path": "tests/golden/corrective/C0-003/handoff-resolution.json", + "sha256": "d380d8f2e92573aea9818b3dd6c66be9f4f4321afa56d3feb23f582e7b9a82ba", + "bytes": 1722 + }, + { + "path": "tests/golden/corrective/C0-003/legacy-gap-classification.json", + "sha256": "b0b835370beb919dc0006c1ffd007b37aadd3830d88f5582b6d6f1c0b2bd47a9", + "bytes": 571793 + }, + { + "path": "tests/golden/corrective/C0-003/mapping-gate.log", + "sha256": "a17fcf0a2f50e2d495e4f90ce263410edc183add6c62699a2facbccf60410f74", + "bytes": 5 + }, + { + "path": "tests/golden/corrective/C0-003/negative-gate.log", + "sha256": "a17fcf0a2f50e2d495e4f90ce263410edc183add6c62699a2facbccf60410f74", + "bytes": 5 + }, + { + "path": "tests/golden/corrective/C0-003/protected-hashes-final.txt", + "sha256": "c0e309fa9967f34e0ddb500cd5619ea50b97d9d0cb3ce6f6861c9d6e8e19d0e7", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C0-003/report-cmp.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C0-003/test-context-governance-final.log", + "sha256": "9ec5458baf9e83a26f20dfa7f965751691c061808a274946c4c484a2d44c7c46", + "bytes": 2582 + }, + { + "path": "tests/golden/corrective/C0-003/test-context-governance.log", + "sha256": "1c041408cc4735978b3aa3d5cb3f3afd3d47058eb3ca4360655eaa987ac06d2f", + "bytes": 2581 + }, + { + "path": "tests/golden/corrective/C0-003/test-task-context-final.log", + "sha256": "ac0658f27fb6328595359b965520d0854e78a55e8e539f5512ed1a3584e82ffb", + "bytes": 1572 + }, + { + "path": "tests/golden/corrective/C0-003/test-task-context.log", + "sha256": "b6586204ce46f69ee89df4f71d28331c1aace60b80420d505ce18ffffaf1d5d9", + "bytes": 1569 + } + ], + "inputDigest": "f6779e07fcd65528e9b998b1a627b8d064ebf09b4bccde95c39530d2cf261169", + "sourceHashes": { + "docs/EXECUTION_QUEUE.md": "eeaca50828c3feb3ed53d1869626a703d9e50fefd9c70d871cc6eec03fc84bcd", + "tests/golden/M16-GAP-00273/manifest.json": "3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1", + "docs/status/M16-GAP-00273.md": "5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8", + "tests/golden/M15-03A/completed-gap-tasks.json": "f9f4f1116b5975aa1b47fee15856f2029ec8f02161e432e9a24b846384cd1c5b", + "tests/golden/M15-03A/task-catalog.jsonl": "278d51b867d63a5975635b8fd108c9025668de0893576499a77bd3d571a0f14b", + "tests/golden/M15-03A/task-index.json": "9c79926a5a91b137b023a62f8a98d7c7421018846fdf658c9bea13ee5c5cbcea", + "tests/golden/M15-03A/next-task-plan.json": "2235d0d250d28e63ab1c9b0e956292560785cf340c612312b316be0ceb2463a9", + "tests/golden/corrective/C0-002/staged/completed-gap-tasks.candidate.json": "f5da902feecdafc1f12773568d3f48a5bab1ae8581e9661d8a7c888f4b62026e", + "tests/golden/corrective/C0-002/staged/next-task-plan.candidate.json": "3d5c74c519d3ac9a53c2ae516c4ad37adccf6999909ff1672e0ef74caae695a8" + }, + "commandExitCodes": { + "classification": 0, + "second": 0, + "classificationCmp": 0, + "clusterCmp": 0, + "reportCmp": 0, + "featureGate": 0, + "countGate": 0, + "evidenceRefs": 0, + "plan": 0, + "index": 0, + "context": 0, + "contextTest": 0, + "governance": 0, + "diff": 0, + "contextFinal": 0, + "contextTestFinal": 0, + "governanceTestFinal": 0, + "protectedCmp": 0 + }, + "resolution": { + "status": "PASS", + "candidate": null + }, + "nextCorrectiveTask": "C1-001" +} diff --git a/tests/golden/corrective/C0-003/protected-hashes-final.txt b/tests/golden/corrective/C0-003/protected-hashes-final.txt new file mode 100644 index 00000000..6a385863 --- /dev/null +++ b/tests/golden/corrective/C0-003/protected-hashes-final.txt @@ -0,0 +1,7 @@ +eeaca50828c3feb3ed53d1869626a703d9e50fefd9c70d871cc6eec03fc84bcd docs/EXECUTION_QUEUE.md +3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1 tests/golden/M16-GAP-00273/manifest.json +5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8 docs/status/M16-GAP-00273.md +f9f4f1116b5975aa1b47fee15856f2029ec8f02161e432e9a24b846384cd1c5b tests/golden/M15-03A/completed-gap-tasks.json +278d51b867d63a5975635b8fd108c9025668de0893576499a77bd3d571a0f14b tests/golden/M15-03A/task-catalog.jsonl +9c79926a5a91b137b023a62f8a98d7c7421018846fdf658c9bea13ee5c5cbcea tests/golden/M15-03A/task-index.json +2235d0d250d28e63ab1c9b0e956292560785cf340c612312b316be0ceb2463a9 tests/golden/M15-03A/next-task-plan.json diff --git a/tests/golden/corrective/C1-001/command-exit-codes.json b/tests/golden/corrective/C1-001/command-exit-codes.json new file mode 100644 index 00000000..d14cb18a --- /dev/null +++ b/tests/golden/corrective/C1-001/command-exit-codes.json @@ -0,0 +1,11 @@ +{ + "parityTest": 0, + "plan": 0, + "index": 0, + "context": 0, + "contextTest": 0, + "governance": 0, + "governanceTest": 0, + "diff": 0, + "sourceHashCheck": 0 +} diff --git a/tests/golden/corrective/C1-001/completion-policy.json b/tests/golden/corrective/C1-001/completion-policy.json new file mode 100644 index 00000000..70f1f636 --- /dev/null +++ b/tests/golden/corrective/C1-001/completion-policy.json @@ -0,0 +1,77 @@ +{ + "schemaVersion": 1, + "operation": "CORRECTIVE_COMPLETION_POLICY", + "status": "PASS", + "queueMutation": false, + "policyVersion": "C1-001", + "legacyCompletion": { + "mode": "SHADOW_ONLY", + "preserveExistingRecords": true, + "queueCompletionGate": "C6-003", + "featureParityMode": "CONDITIONAL_CANDIDATE" + }, + "classes": [ + { + "completionClass": "FEATURE_PARITY", + "allowedParityLevels": ["L2", "L3", "L4", "L5"], + "requires": [ + "desktopPositive=true", + "wasmPositiveMutation=true", + "saveReopen=EXACT", + "sourceHashes are complete and non-empty", + "mappingState is CANDIDATE or COVERED" + ], + "legacyCompletion": "CONDITIONAL_CANDIDATE", + "queueCompletion": "FORBIDDEN_UNTIL_C6_003" + }, + { + "completionClass": "READ_COMPATIBILITY", + "allowedParityLevels": ["L0", "L1"], + "requires": ["read or observe evidence only"], + "legacyCompletion": "FORBIDDEN", + "queueCompletion": "FORBIDDEN" + }, + { + "completionClass": "METADATA_ONLY", + "allowedParityLevels": ["L1"], + "requires": ["exact snapshot fields", "no equivalent mutation"], + "legacyCompletion": "FORBIDDEN", + "queueCompletion": "FORBIDDEN" + }, + { + "completionClass": "NEGATIVE_BOUNDARY", + "allowedParityLevels": ["L0", "L1"], + "requires": ["cancelled, unsupported, missing-resource, or malformed boundary"], + "legacyCompletion": "RETAINED_NEGATIVE", + "queueCompletion": "FORBIDDEN" + }, + { + "completionClass": "UNSUPPORTED_DECLARED", + "allowedParityLevels": ["L0", "L1"], + "requires": ["explicit user-visible unsupported declaration"], + "legacyCompletion": "FORBIDDEN", + "queueCompletion": "FORBIDDEN" + }, + { + "completionClass": "BLOCKED", + "allowedParityLevels": ["L0"], + "requires": ["incomplete, contradictory, drifted, or non-authoritative evidence"], + "legacyCompletion": "BLOCKED", + "queueCompletion": "FORBIDDEN" + }, + { + "completionClass": "PLANNED", + "allowedParityLevels": ["L0"], + "requires": ["capability design without legacy evidence"], + "legacyCompletion": "FORBIDDEN", + "queueCompletion": "FORBIDDEN" + } + ], + "failClosed": [ + "Any missing required predicate demotes the record to BLOCKED", + "A changed revision without an authoritative Main mutation is not positive parity", + "A desktop positive without WASM mutation is BLOCKED", + "A WASM mutation without desktop positive and persistence evidence is not FEATURE_PARITY", + "No corrective classification writes a legacy completion or queue pointer" + ] +} diff --git a/tests/golden/corrective/C1-001/handoff-resolution.json b/tests/golden/corrective/C1-001/handoff-resolution.json new file mode 100644 index 00000000..5c1864cb --- /dev/null +++ b/tests/golden/corrective/C1-001/handoff-resolution.json @@ -0,0 +1,37 @@ +{ + "schemaVersion": 1, + "task": "C1-001", + "status": "PASS", + "queueMutation": false, + "inputDigest": "ebe11270286125a4fcc9855aa239612b411d152dae5d7fe6ab5a45000cd424a5", + "sourceHashes": { + "tests/golden/corrective/C0-003/manifest.json": "f4df5bc659bc11ac70db00b93e5607e50bf7aa5190b266dce7e0a44f4b39d398", + "tests/golden/corrective/C0-003/legacy-gap-classification.json": "b0b835370beb919dc0006c1ffd007b37aadd3830d88f5582b6d6f1c0b2bd47a9", + "tests/golden/corrective/C0-003/cluster-summary.json": "216fbc53210eb9777a362dcb2320a0a14f74b832e42b4a58c9983c986ccc172a", + "docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json": "053e1551a24da08e045bb54115858a892ddd825fa59f1691a26a1ccfc1db3ca0", + "tests/golden/corrective/C1-001/parity-level-contract.json": "5547859d178b67c70389bb199a887b098b083217586a863a79b1eb38f30948fc", + "tests/golden/corrective/C1-001/completion-policy.json": "0f53534a957856c0b7ad57f02e629d15ed27b449e31b3604ded62be43e057226", + "tests/golden/corrective/C1-001/parity-levels.test.mjs": "596912c7ae3b6694cf8b3a48d0023f6c3e0e8924e103815d99e40e6a84f39336", + "tests/golden/corrective/C1-001/parity-report.md": "cfe8b379d267db4adc20780e4221e93ff7d91bd86ae66ce61e6e3d20e2800928", + "tests/golden/corrective/C1-001/test-parity-levels.log": "256af0e1535a3e497f2e825b346c11ba7cd08ba70a1dfdf30b78572622131600", + "tests/golden/corrective/C1-001/command-exit-codes.json": "c7d7222b49ca66b25dfa57efb83f8af93b90e9bf84c1723e9b5bd9abee51896f", + "tests/golden/corrective/C1-001/check-corrective-plan-final.log": "36e863c0f06b80891b7e3180974a094673a15ede94bb521ed7d592eba079b857", + "tests/golden/corrective/C1-001/check-task-context-final.log": "d878b0cb346102d780a0de68deeb14a36d9c2e7aec63f1010a3d6454e276563a", + "tests/golden/corrective/C1-001/check-context-governance-final.log": "8b4a0add34d164d2e514192c430269e780f03f92697d77e494aa35825b5861f3", + "tests/golden/corrective/C1-001/check-task-index-final.log": "ce310f4a62f095235c7d6096c324e8404e02588871f62cd27a4116a1fac8c2cc", + "tests/golden/corrective/C1-001/diff-check-final.log": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "tests/golden/corrective/C1-001/test-context-governance-final.log": "b207440eee357e3afec3ed884dae3bcb0c9eec78fe855663a653f2a93da156d2" + }, + "commandExitCodes": { + "parityTest": 0, + "plan": 0, + "index": 0, + "context": 0, + "contextTest": 0, + "governance": 0, + "governanceTest": 0, + "diff": 0, + "sourceHashCheck": 0 + }, + "nextCorrectiveTask": "C1-002" +} diff --git a/tests/golden/corrective/C1-001/handoff.json b/tests/golden/corrective/C1-001/handoff.json new file mode 100644 index 00000000..fe209ca3 --- /dev/null +++ b/tests/golden/corrective/C1-001/handoff.json @@ -0,0 +1,151 @@ +{ + "schemaVersion": 1, + "task": "C1-001", + "status": "done", + "gate": "G1", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C1-001", + "artifactCount": 21, + "artifacts": [ + { + "path": "tests/golden/corrective/C1-001/check-context-governance-final.log", + "sha256": "8b4a0add34d164d2e514192c430269e780f03f92697d77e494aa35825b5861f3", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C1-001/check-context-governance.log", + "sha256": "8b4a0add34d164d2e514192c430269e780f03f92697d77e494aa35825b5861f3", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C1-001/check-corrective-plan-final.log", + "sha256": "36e863c0f06b80891b7e3180974a094673a15ede94bb521ed7d592eba079b857", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C1-001/check-corrective-plan.log", + "sha256": "4ce7fa2bfa5cc386187094049ba0eee17bb494edf59a5cb776e8ea8c312979f0", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C1-001/check-task-context-final.log", + "sha256": "d878b0cb346102d780a0de68deeb14a36d9c2e7aec63f1010a3d6454e276563a", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C1-001/check-task-context.log", + "sha256": "d878b0cb346102d780a0de68deeb14a36d9c2e7aec63f1010a3d6454e276563a", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C1-001/check-task-index-final.log", + "sha256": "ce310f4a62f095235c7d6096c324e8404e02588871f62cd27a4116a1fac8c2cc", + "bytes": 94 + }, + { + "path": "tests/golden/corrective/C1-001/check-task-index.log", + "sha256": "ce310f4a62f095235c7d6096c324e8404e02588871f62cd27a4116a1fac8c2cc", + "bytes": 94 + }, + { + "path": "tests/golden/corrective/C1-001/command-exit-codes.json", + "sha256": "c7d7222b49ca66b25dfa57efb83f8af93b90e9bf84c1723e9b5bd9abee51896f", + "bytes": 164 + }, + { + "path": "tests/golden/corrective/C1-001/completion-policy.json", + "sha256": "0f53534a957856c0b7ad57f02e629d15ed27b449e31b3604ded62be43e057226", + "bytes": 2663 + }, + { + "path": "tests/golden/corrective/C1-001/diff-check-final.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C1-001/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C1-001/handoff-resolution.json", + "sha256": "1f25cfc61ccf4e458f52d1b797916772bf50780b73ca05ac08a2b048adfd526c", + "bytes": 2537 + }, + { + "path": "tests/golden/corrective/C1-001/parity-level-contract.json", + "sha256": "5547859d178b67c70389bb199a887b098b083217586a863a79b1eb38f30948fc", + "bytes": 2606 + }, + { + "path": "tests/golden/corrective/C1-001/parity-levels.test.mjs", + "sha256": "596912c7ae3b6694cf8b3a48d0023f6c3e0e8924e103815d99e40e6a84f39336", + "bytes": 3662 + }, + { + "path": "tests/golden/corrective/C1-001/parity-report.md", + "sha256": "cfe8b379d267db4adc20780e4221e93ff7d91bd86ae66ce61e6e3d20e2800928", + "bytes": 955 + }, + { + "path": "tests/golden/corrective/C1-001/source-hash-check.log", + "sha256": "999bac984b1299280622cb874fb6da13e7bac37ad831c89ee28e7174d9c1640a", + "bytes": 25 + }, + { + "path": "tests/golden/corrective/C1-001/test-context-governance-final.log", + "sha256": "b207440eee357e3afec3ed884dae3bcb0c9eec78fe855663a653f2a93da156d2", + "bytes": 2581 + }, + { + "path": "tests/golden/corrective/C1-001/test-context-governance.log", + "sha256": "b06702195991cfb3246477c24de0a66537d54e1d4464a69663bbe96c13f900ba", + "bytes": 2580 + }, + { + "path": "tests/golden/corrective/C1-001/test-parity-levels.log", + "sha256": "256af0e1535a3e497f2e825b346c11ba7cd08ba70a1dfdf30b78572622131600", + "bytes": 779 + }, + { + "path": "tests/golden/corrective/C1-001/test-task-context.log", + "sha256": "3bc68b46c6d2c1a6b54318dfe08d6998527a0108d7fe6adefd72f12984b7948d", + "bytes": 1573 + } + ], + "inputDigest": "ebe11270286125a4fcc9855aa239612b411d152dae5d7fe6ab5a45000cd424a5", + "sourceHashes": { + "tests/golden/corrective/C0-003/manifest.json": "f4df5bc659bc11ac70db00b93e5607e50bf7aa5190b266dce7e0a44f4b39d398", + "tests/golden/corrective/C0-003/legacy-gap-classification.json": "b0b835370beb919dc0006c1ffd007b37aadd3830d88f5582b6d6f1c0b2bd47a9", + "tests/golden/corrective/C0-003/cluster-summary.json": "216fbc53210eb9777a362dcb2320a0a14f74b832e42b4a58c9983c986ccc172a", + "docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json": "053e1551a24da08e045bb54115858a892ddd825fa59f1691a26a1ccfc1db3ca0", + "tests/golden/corrective/C1-001/parity-level-contract.json": "5547859d178b67c70389bb199a887b098b083217586a863a79b1eb38f30948fc", + "tests/golden/corrective/C1-001/completion-policy.json": "0f53534a957856c0b7ad57f02e629d15ed27b449e31b3604ded62be43e057226", + "tests/golden/corrective/C1-001/parity-levels.test.mjs": "596912c7ae3b6694cf8b3a48d0023f6c3e0e8924e103815d99e40e6a84f39336", + "tests/golden/corrective/C1-001/parity-report.md": "cfe8b379d267db4adc20780e4221e93ff7d91bd86ae66ce61e6e3d20e2800928", + "tests/golden/corrective/C1-001/test-parity-levels.log": "256af0e1535a3e497f2e825b346c11ba7cd08ba70a1dfdf30b78572622131600", + "tests/golden/corrective/C1-001/command-exit-codes.json": "c7d7222b49ca66b25dfa57efb83f8af93b90e9bf84c1723e9b5bd9abee51896f", + "tests/golden/corrective/C1-001/check-corrective-plan-final.log": "36e863c0f06b80891b7e3180974a094673a15ede94bb521ed7d592eba079b857", + "tests/golden/corrective/C1-001/check-task-context-final.log": "d878b0cb346102d780a0de68deeb14a36d9c2e7aec63f1010a3d6454e276563a", + "tests/golden/corrective/C1-001/check-context-governance-final.log": "8b4a0add34d164d2e514192c430269e780f03f92697d77e494aa35825b5861f3", + "tests/golden/corrective/C1-001/check-task-index-final.log": "ce310f4a62f095235c7d6096c324e8404e02588871f62cd27a4116a1fac8c2cc", + "tests/golden/corrective/C1-001/diff-check-final.log": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "tests/golden/corrective/C1-001/test-context-governance-final.log": "b207440eee357e3afec3ed884dae3bcb0c9eec78fe855663a653f2a93da156d2" + }, + "commandExitCodes": { + "parityTest": 0, + "plan": 0, + "index": 0, + "context": 0, + "contextTest": 0, + "governance": 0, + "governanceTest": 0, + "diff": 0, + "sourceHashCheck": 0 + }, + "resolution": { + "status": "PASS", + "candidate": null + }, + "nextCorrectiveTask": "C1-002" +} diff --git a/tests/golden/corrective/C1-001/manifest.json b/tests/golden/corrective/C1-001/manifest.json new file mode 100644 index 00000000..fe209ca3 --- /dev/null +++ b/tests/golden/corrective/C1-001/manifest.json @@ -0,0 +1,151 @@ +{ + "schemaVersion": 1, + "task": "C1-001", + "status": "done", + "gate": "G1", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C1-001", + "artifactCount": 21, + "artifacts": [ + { + "path": "tests/golden/corrective/C1-001/check-context-governance-final.log", + "sha256": "8b4a0add34d164d2e514192c430269e780f03f92697d77e494aa35825b5861f3", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C1-001/check-context-governance.log", + "sha256": "8b4a0add34d164d2e514192c430269e780f03f92697d77e494aa35825b5861f3", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C1-001/check-corrective-plan-final.log", + "sha256": "36e863c0f06b80891b7e3180974a094673a15ede94bb521ed7d592eba079b857", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C1-001/check-corrective-plan.log", + "sha256": "4ce7fa2bfa5cc386187094049ba0eee17bb494edf59a5cb776e8ea8c312979f0", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C1-001/check-task-context-final.log", + "sha256": "d878b0cb346102d780a0de68deeb14a36d9c2e7aec63f1010a3d6454e276563a", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C1-001/check-task-context.log", + "sha256": "d878b0cb346102d780a0de68deeb14a36d9c2e7aec63f1010a3d6454e276563a", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C1-001/check-task-index-final.log", + "sha256": "ce310f4a62f095235c7d6096c324e8404e02588871f62cd27a4116a1fac8c2cc", + "bytes": 94 + }, + { + "path": "tests/golden/corrective/C1-001/check-task-index.log", + "sha256": "ce310f4a62f095235c7d6096c324e8404e02588871f62cd27a4116a1fac8c2cc", + "bytes": 94 + }, + { + "path": "tests/golden/corrective/C1-001/command-exit-codes.json", + "sha256": "c7d7222b49ca66b25dfa57efb83f8af93b90e9bf84c1723e9b5bd9abee51896f", + "bytes": 164 + }, + { + "path": "tests/golden/corrective/C1-001/completion-policy.json", + "sha256": "0f53534a957856c0b7ad57f02e629d15ed27b449e31b3604ded62be43e057226", + "bytes": 2663 + }, + { + "path": "tests/golden/corrective/C1-001/diff-check-final.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C1-001/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C1-001/handoff-resolution.json", + "sha256": "1f25cfc61ccf4e458f52d1b797916772bf50780b73ca05ac08a2b048adfd526c", + "bytes": 2537 + }, + { + "path": "tests/golden/corrective/C1-001/parity-level-contract.json", + "sha256": "5547859d178b67c70389bb199a887b098b083217586a863a79b1eb38f30948fc", + "bytes": 2606 + }, + { + "path": "tests/golden/corrective/C1-001/parity-levels.test.mjs", + "sha256": "596912c7ae3b6694cf8b3a48d0023f6c3e0e8924e103815d99e40e6a84f39336", + "bytes": 3662 + }, + { + "path": "tests/golden/corrective/C1-001/parity-report.md", + "sha256": "cfe8b379d267db4adc20780e4221e93ff7d91bd86ae66ce61e6e3d20e2800928", + "bytes": 955 + }, + { + "path": "tests/golden/corrective/C1-001/source-hash-check.log", + "sha256": "999bac984b1299280622cb874fb6da13e7bac37ad831c89ee28e7174d9c1640a", + "bytes": 25 + }, + { + "path": "tests/golden/corrective/C1-001/test-context-governance-final.log", + "sha256": "b207440eee357e3afec3ed884dae3bcb0c9eec78fe855663a653f2a93da156d2", + "bytes": 2581 + }, + { + "path": "tests/golden/corrective/C1-001/test-context-governance.log", + "sha256": "b06702195991cfb3246477c24de0a66537d54e1d4464a69663bbe96c13f900ba", + "bytes": 2580 + }, + { + "path": "tests/golden/corrective/C1-001/test-parity-levels.log", + "sha256": "256af0e1535a3e497f2e825b346c11ba7cd08ba70a1dfdf30b78572622131600", + "bytes": 779 + }, + { + "path": "tests/golden/corrective/C1-001/test-task-context.log", + "sha256": "3bc68b46c6d2c1a6b54318dfe08d6998527a0108d7fe6adefd72f12984b7948d", + "bytes": 1573 + } + ], + "inputDigest": "ebe11270286125a4fcc9855aa239612b411d152dae5d7fe6ab5a45000cd424a5", + "sourceHashes": { + "tests/golden/corrective/C0-003/manifest.json": "f4df5bc659bc11ac70db00b93e5607e50bf7aa5190b266dce7e0a44f4b39d398", + "tests/golden/corrective/C0-003/legacy-gap-classification.json": "b0b835370beb919dc0006c1ffd007b37aadd3830d88f5582b6d6f1c0b2bd47a9", + "tests/golden/corrective/C0-003/cluster-summary.json": "216fbc53210eb9777a362dcb2320a0a14f74b832e42b4a58c9983c986ccc172a", + "docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json": "053e1551a24da08e045bb54115858a892ddd825fa59f1691a26a1ccfc1db3ca0", + "tests/golden/corrective/C1-001/parity-level-contract.json": "5547859d178b67c70389bb199a887b098b083217586a863a79b1eb38f30948fc", + "tests/golden/corrective/C1-001/completion-policy.json": "0f53534a957856c0b7ad57f02e629d15ed27b449e31b3604ded62be43e057226", + "tests/golden/corrective/C1-001/parity-levels.test.mjs": "596912c7ae3b6694cf8b3a48d0023f6c3e0e8924e103815d99e40e6a84f39336", + "tests/golden/corrective/C1-001/parity-report.md": "cfe8b379d267db4adc20780e4221e93ff7d91bd86ae66ce61e6e3d20e2800928", + "tests/golden/corrective/C1-001/test-parity-levels.log": "256af0e1535a3e497f2e825b346c11ba7cd08ba70a1dfdf30b78572622131600", + "tests/golden/corrective/C1-001/command-exit-codes.json": "c7d7222b49ca66b25dfa57efb83f8af93b90e9bf84c1723e9b5bd9abee51896f", + "tests/golden/corrective/C1-001/check-corrective-plan-final.log": "36e863c0f06b80891b7e3180974a094673a15ede94bb521ed7d592eba079b857", + "tests/golden/corrective/C1-001/check-task-context-final.log": "d878b0cb346102d780a0de68deeb14a36d9c2e7aec63f1010a3d6454e276563a", + "tests/golden/corrective/C1-001/check-context-governance-final.log": "8b4a0add34d164d2e514192c430269e780f03f92697d77e494aa35825b5861f3", + "tests/golden/corrective/C1-001/check-task-index-final.log": "ce310f4a62f095235c7d6096c324e8404e02588871f62cd27a4116a1fac8c2cc", + "tests/golden/corrective/C1-001/diff-check-final.log": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "tests/golden/corrective/C1-001/test-context-governance-final.log": "b207440eee357e3afec3ed884dae3bcb0c9eec78fe855663a653f2a93da156d2" + }, + "commandExitCodes": { + "parityTest": 0, + "plan": 0, + "index": 0, + "context": 0, + "contextTest": 0, + "governance": 0, + "governanceTest": 0, + "diff": 0, + "sourceHashCheck": 0 + }, + "resolution": { + "status": "PASS", + "candidate": null + }, + "nextCorrectiveTask": "C1-002" +} diff --git a/tests/golden/corrective/C1-001/parity-level-contract.json b/tests/golden/corrective/C1-001/parity-level-contract.json new file mode 100644 index 00000000..7424d4bd --- /dev/null +++ b/tests/golden/corrective/C1-001/parity-level-contract.json @@ -0,0 +1,74 @@ +{ + "schemaVersion": 1, + "operation": "CORRECTIVE_PARITY_LEVEL_CONTRACT", + "status": "PASS", + "queueMutation": false, + "levelOrder": ["L0", "L1", "L2", "L3", "L4", "L5"], + "classificationField": "evidenceLevel", + "levels": [ + { + "id": "L0", + "name": "blend_read", + "requires": ["safe_binary_read", "malformed_rejection"], + "mainMutation": false, + "queueCompletion": "FORBIDDEN" + }, + { + "id": "L1", + "name": "main_observe", + "requires": ["snapshot_fields", "identity", "revision", "dependencies"], + "mainMutation": false, + "queueCompletion": "FORBIDDEN" + }, + { + "id": "L2", + "name": "wasm_mutation", + "requires": ["positive_command", "main_mutation", "snapshot_or_delta"], + "mainMutation": true, + "queueCompletion": "FORBIDDEN_UNTIL_C6_003" + }, + { + "id": "L3", + "name": "persistent_mutation", + "requires": ["save_reopen", "dirty_state", "undo_redo"], + "mainMutation": true, + "queueCompletion": "FORBIDDEN_UNTIL_C6_003" + }, + { + "id": "L4", + "name": "operator_semantics", + "requires": ["desktop_positive_oracle", "wasm_equivalent_result", "context", "errors"], + "mainMutation": true, + "queueCompletion": "FORBIDDEN_UNTIL_C6_003" + }, + { + "id": "L5", + "name": "user_workflow", + "requires": ["chromium_e2e", "continuous_workflow", "resource_recovery"], + "mainMutation": true, + "queueCompletion": "FORBIDDEN_UNTIL_C6_003" + } + ], + "invariants": [ + "parityLevel is the highest fully proven level, never targetParityLevel", + "missing, contradictory, or hash-drifted evidence is BLOCKED", + "metadata, read-only, negative, unsupported, and planned evidence cannot claim feature parity", + "queueMutation remains false throughout the corrective shadow plan", + "legacy completion is preserved and cannot be rewritten by a capability mapping" + ], + "source": { + "classification": { + "path": "tests/golden/corrective/C0-003/legacy-gap-classification.json", + "sha256": "b0b835370beb919dc0006c1ffd007b37aadd3830d88f5582b6d6f1c0b2bd47a9", + "inputDigest": "f6779e07fcd65528e9b998b1a627b8d064ebf09b4bccde95c39530d2cf261169" + }, + "clusterSummary": { + "path": "tests/golden/corrective/C0-003/cluster-summary.json", + "sha256": "216fbc53210eb9777a362dcb2320a0a14f74b832e42b4a58c9983c986ccc172a" + }, + "matrixTemplate": { + "path": "docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json", + "sha256": "053e1551a24da08e045bb54115858a892ddd825fa59f1691a26a1ccfc1db3ca0" + } + } +} diff --git a/tests/golden/corrective/C1-001/parity-levels.test.mjs b/tests/golden/corrective/C1-001/parity-levels.test.mjs new file mode 100644 index 00000000..654f0c56 --- /dev/null +++ b/tests/golden/corrective/C1-001/parity-levels.test.mjs @@ -0,0 +1,64 @@ +import assert from "node:assert/strict"; +import crypto from "node:crypto"; +import fs from "node:fs"; +import path from "node:path"; +import test from "node:test"; +import { fileURLToPath } from "node:url"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../../.."); +const readJson = (relative) => JSON.parse(fs.readFileSync(path.join(root, relative), "utf8")); +const sha256 = (relative) => crypto.createHash("sha256").update(fs.readFileSync(path.join(root, relative))).digest("hex"); +const contract = readJson("tests/golden/corrective/C1-001/parity-level-contract.json"); +const policy = readJson("tests/golden/corrective/C1-001/completion-policy.json"); +const classification = readJson("tests/golden/corrective/C0-003/legacy-gap-classification.json"); +const clusters = readJson("tests/golden/corrective/C0-003/cluster-summary.json"); +const matrix = readJson("docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json"); + +test("C1-001 contract defines the ordered L0-L5 levels", () => { + assert.equal(contract.schemaVersion, 1); + assert.equal(contract.status, "PASS"); + assert.equal(contract.queueMutation, false); + assert.deepEqual(contract.levelOrder, ["L0", "L1", "L2", "L3", "L4", "L5"]); + assert.deepEqual(contract.levels.map((level) => level.id), contract.levelOrder); + assert.equal(contract.levels.filter((level) => level.mainMutation).map((level) => level.id).join(","), "L2,L3,L4,L5"); + assert.ok(contract.levels.every((level) => level.requires.length > 0)); +}); + +test("completion policy is aligned with the capability matrix and fail-closed", () => { + assert.equal(policy.schemaVersion, 1); + assert.equal(policy.status, "PASS"); + assert.equal(policy.queueMutation, false); + assert.deepEqual(policy.classes.map((entry) => entry.completionClass).sort(), [...matrix.allowedCompletionClasses].sort()); + const feature = policy.classes.find((entry) => entry.completionClass === "FEATURE_PARITY"); + assert.deepEqual(feature.allowedParityLevels, ["L2", "L3", "L4", "L5"]); + assert.equal(feature.queueCompletion, "FORBIDDEN_UNTIL_C6_003"); + for (const entry of policy.classes.filter((entry) => entry.completionClass !== "FEATURE_PARITY")) { + assert.equal(entry.legacyCompletion === "CONDITIONAL_CANDIDATE", false); + assert.equal(entry.queueCompletion, "FORBIDDEN"); + } +}); + +test("legacy evidence satisfies the contract before it can be mapped", () => { + assert.equal(classification.status, "PASS"); + assert.equal(classification.queueMutation, false); + assert.equal(classification.taskCount, 273); + assert.deepEqual(clusters.counts, { BLOCKED: 24, FEATURE_PARITY: 20, METADATA_ONLY: 10, NEGATIVE_BOUNDARY: 219 }); + const feature = classification.records.filter((record) => record.completionClass === "FEATURE_PARITY"); + assert.equal(feature.length, 20); + for (const record of feature) { + assert.ok(["L2", "L3", "L4", "L5"].includes(record.evidenceLevel)); + assert.equal(record.desktopPositive, true); + assert.equal(record.wasmPositiveMutation, true); + assert.equal(record.saveReopen, "EXACT"); + assert.ok(Object.values(record.sourceHashes).length > 0); + assert.ok(Object.values(record.sourceHashes).every(Boolean)); + } + for (const record of classification.records.filter((record) => ["METADATA_ONLY", "NEGATIVE_BOUNDARY", "BLOCKED"].includes(record.completionClass))) { + assert.notEqual(record.mappingState, "COVERED"); + } +}); + +test("contract source bindings remain exact", () => { + for (const source of Object.values(contract.source)) assert.equal(sha256(source.path), source.sha256, source.path); + assert.equal(contract.source.classification.inputDigest, classification.inputDigest); +}); diff --git a/tests/golden/corrective/C1-001/parity-report.md b/tests/golden/corrective/C1-001/parity-report.md new file mode 100644 index 00000000..966cf2e8 --- /dev/null +++ b/tests/golden/corrective/C1-001/parity-report.md @@ -0,0 +1,21 @@ +# C1-001 Parity Contract Report + +status: PASS +task: define_parity_levels +gate: G1 +queueMutation: false + +The contract defines ordered L0-L5 levels: blend read, Main observe, WASM +mutation, persistent mutation, operator semantics, and Chromium user workflow. +The completion policy keeps all legacy completion and queue writes forbidden until +C6-003, while allowing only explicitly gated FEATURE_PARITY candidates to reach +future capability review. + +The C0-003 evidence remains fail-closed: 20 FEATURE_PARITY records satisfy the +L2-L5, desktop-positive, WASM/Main-mutation, exact save/reopen, and non-empty +source-hash predicates. Metadata-only, negative, unsupported, blocked, and +planned evidence cannot become completion records. + +Focused test: `node --test tests/golden/corrective/C1-001/parity-levels.test.mjs` +exited 0 with four passing assertions. Inputs are bound to the C0-003 +classification digest and exact hashes in `parity-level-contract.json`. diff --git a/tests/golden/corrective/C1-002/command-exit-codes.json b/tests/golden/corrective/C1-002/command-exit-codes.json new file mode 100644 index 00000000..24f1e2d0 --- /dev/null +++ b/tests/golden/corrective/C1-002/command-exit-codes.json @@ -0,0 +1,11 @@ +{ + "schemaTest": 0, + "plan": 0, + "index": 0, + "context": 0, + "contextTest": 0, + "governance": 0, + "governanceTest": 0, + "diff": 0, + "sourceHashCheck": 0 +} diff --git a/tests/golden/corrective/C1-002/command-result-context.test.mjs b/tests/golden/corrective/C1-002/command-result-context.test.mjs new file mode 100644 index 00000000..f1d3bdb7 --- /dev/null +++ b/tests/golden/corrective/C1-002/command-result-context.test.mjs @@ -0,0 +1,68 @@ +import assert from "node:assert/strict"; +import crypto from "node:crypto"; +import fs from "node:fs"; +import path from "node:path"; +import test from "node:test"; +import { fileURLToPath } from "node:url"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../../.."); +const readJson = (name) => JSON.parse(fs.readFileSync(path.join(root, "tests/golden/corrective/C1-002", name), "utf8")); +const sha256 = (relative) => crypto.createHash("sha256").update(fs.readFileSync(path.join(root, relative))).digest("hex"); +const command = readJson("command-schema.json"); +const context = readJson("context-schema.json"); +const result = readJson("result-schema.json"); +const table = readJson("error-status-table.json"); +const parity = JSON.parse(fs.readFileSync(path.join(root, "tests/golden/corrective/C1-001/parity-level-contract.json"), "utf8")); +const policy = JSON.parse(fs.readFileSync(path.join(root, "tests/golden/corrective/C1-001/completion-policy.json"), "utf8")); + +test("C1-002 schemas are versioned and require revision-bound identity", () => { + for (const schema of [command, context, result, table]) { + assert.equal(schema.schemaVersion, 1); + assert.equal(schema.status, "PASS"); + assert.equal(schema.queueMutation, false); + } + assert.deepEqual(command.required, ["schemaVersion", "requestId", "commandType", "baseRevision", "context", "payload"]); + assert.deepEqual(result.required, ["schemaVersion", "requestId", "status", "code", "baseRevision", "mainRevisionBefore", "mainRevisionAfter", "mainMutation"]); + assert.deepEqual(Object.keys(context.$defs), ["Sha256", "CommandContext"]); +}); + +test("context rejects authority and resource combinations that cannot mutate Main", () => { + const properties = context.$defs.CommandContext.properties; + assert.deepEqual(properties.editMode.enum, ["READ_ONLY", "EDITABLE"]); + assert.deepEqual(properties.authorization.enum, ["NONE", "USER_EDIT", "SYSTEM"]); + assert.deepEqual(properties.source.properties.kind.enum, ["LOCAL", "EXTERNAL", "PACKED"]); + assert.match(context.rules.join(" "), /READ_ONLY/); + assert.match(context.rules.join(" "), /EXTERNAL/); +}); + +test("result rules make every failure non-mutating", () => { + const statuses = new Map(table.statuses.map((entry) => [entry.status, entry])); + assert.deepEqual([...statuses.keys()], ["FINISHED", "BLOCKED", "MALFORMED", "UNSUPPORTED", "EXTERNAL_REQUIRED", "CANCELLED"]); + assert.deepEqual(statuses.get("FINISHED"), { status: "FINISHED", code: "OK", mutating: true, revisionDelta: 1, retryable: false }); + for (const entry of table.statuses.filter((item) => item.status !== "FINISHED")) { + assert.equal(entry.mutating, false, entry.status); + assert.equal(entry.revisionDelta, 0, entry.status); + } + assert.match(result.rules.join(" "), /Every non-FINISHED result/); + assert.match(result.rules.join(" "), /REVISION_CONFLICT/); +}); + +test("error table has unique closed status/code pairs", () => { + const pairs = table.statuses.map((entry) => `${entry.status}:${entry.code}`); + assert.equal(new Set(pairs).size, pairs.length); + assert.ok(table.statuses.every((entry) => entry.code === "OK" || /^[A-Z][A-Z0-9_:-]+$/.test(entry.code))); + assert.match(table.invariants.join(" "), /closed pair/); + assert.match(table.invariants.join(" "), /preserve Main revision/); +}); + +test("schema provenance is bound to the completed C1-001 inputs", () => { + const sources = new Map([ + ["tests/golden/corrective/C1-001/parity-level-contract.json", sha256("tests/golden/corrective/C1-001/parity-level-contract.json")], + ["tests/golden/corrective/C1-001/completion-policy.json", sha256("tests/golden/corrective/C1-001/completion-policy.json")], + ]); + for (const schema of [command, context, result, table]) { + for (const source of Object.values(schema.source)) assert.equal(sources.get(source.path), source.sha256, source.path); + } + assert.equal(parity.status, "PASS"); + assert.equal(policy.status, "PASS"); +}); diff --git a/tests/golden/corrective/C1-002/command-schema.json b/tests/golden/corrective/C1-002/command-schema.json new file mode 100644 index 00000000..ab978876 --- /dev/null +++ b/tests/golden/corrective/C1-002/command-schema.json @@ -0,0 +1,34 @@ +{ + "schemaVersion": 1, + "operation": "CORRECTIVE_COMMAND_SCHEMA", + "status": "PASS", + "queueMutation": false, + "name": "MainMutationCommand", + "required": ["schemaVersion", "requestId", "commandType", "baseRevision", "context", "payload"], + "properties": { + "schemaVersion": {"type": "integer", "const": 1}, + "requestId": {"type": "string", "minLength": 1, "maxLength": 256, "pattern": "^[A-Za-z0-9._:-]+$"}, + "commandType": {"type": "string", "minLength": 1, "maxLength": 128, "pattern": "^[a-z][A-Za-z0-9]*$"}, + "baseRevision": {"type": "integer", "minimum": 0}, + "context": {"$ref": "context-schema.json#/$defs/CommandContext"}, + "payload": {"type": "object", "additionalProperties": true} + }, + "additionalProperties": false, + "rules": [ + "baseRevision is the caller-observed Main revision", + "context must identify one authoritative editable Main target", + "payload is command-specific and cannot override requestId, baseRevision, or context", + "malformed or unknown command envelopes are rejected before Main mutation", + "a command is not feature evidence until its result and persistence receipts validate" + ], + "source": { + "parityContract": { + "path": "tests/golden/corrective/C1-001/parity-level-contract.json", + "sha256": "5547859d178b67c70389bb199a887b098b083217586a863a79b1eb38f30948fc" + }, + "completionPolicy": { + "path": "tests/golden/corrective/C1-001/completion-policy.json", + "sha256": "0f53534a957856c0b7ad57f02e629d15ed27b449e31b3604ded62be43e057226" + } + } +} diff --git a/tests/golden/corrective/C1-002/context-schema.json b/tests/golden/corrective/C1-002/context-schema.json new file mode 100644 index 00000000..61a5aeec --- /dev/null +++ b/tests/golden/corrective/C1-002/context-schema.json @@ -0,0 +1,36 @@ +{ + "schemaVersion": 1, + "operation": "CORRECTIVE_CONTEXT_SCHEMA", + "status": "PASS", + "queueMutation": false, + "$defs": { + "Sha256": {"type": "string", "pattern": "^[a-f0-9]{64}$"}, + "CommandContext": { + "type": "object", + "required": ["mainId", "targetKind", "editMode", "authorization", "source"], + "properties": { + "mainId": {"type": "string", "minLength": 1, "maxLength": 256}, + "targetKind": {"type": "string", "enum": ["ASSET_LIBRARY", "DATABLOCK", "MESH", "MODIFIER", "SCENE"]}, + "targetId": {"type": "string", "minLength": 1, "maxLength": 256}, + "editMode": {"type": "string", "enum": ["READ_ONLY", "EDITABLE"]}, + "authorization": {"type": "string", "enum": ["NONE", "USER_EDIT", "SYSTEM"]}, + "source": {"type": "object", "required": ["kind", "sha256"], "properties": {"kind": {"type": "string", "enum": ["LOCAL", "EXTERNAL", "PACKED"]}, "sha256": {"$ref": "#/$defs/Sha256"}}, "additionalProperties": false}, + "resourceProvider": {"type": "string", "enum": ["NONE", "OPFS", "EXTERNAL_LIBRARY", "PACKED_BLEND"]} + }, + "additionalProperties": false + } + }, + "rules": [ + "READ_ONLY context cannot authorize a Main mutation", + "NONE authorization cannot authorize a Main mutation", + "EXTERNAL source requires a resourceProvider before a positive command", + "source sha256 is provenance evidence and is never replaced by an observed hash", + "invalid context is rejected without changing Main revision" + ], + "source": { + "parityContract": { + "path": "tests/golden/corrective/C1-001/parity-level-contract.json", + "sha256": "5547859d178b67c70389bb199a887b098b083217586a863a79b1eb38f30948fc" + } + } +} diff --git a/tests/golden/corrective/C1-002/error-status-table.json b/tests/golden/corrective/C1-002/error-status-table.json new file mode 100644 index 00000000..19eab7d5 --- /dev/null +++ b/tests/golden/corrective/C1-002/error-status-table.json @@ -0,0 +1,27 @@ +{ + "schemaVersion": 1, + "operation": "CORRECTIVE_ERROR_STATUS_TABLE", + "status": "PASS", + "queueMutation": false, + "statuses": [ + {"status": "FINISHED", "code": "OK", "mutating": true, "revisionDelta": 1, "retryable": false}, + {"status": "BLOCKED", "code": "REVISION_CONFLICT", "mutating": false, "revisionDelta": 0, "retryable": true}, + {"status": "BLOCKED", "code": "INVALID_CONTEXT", "mutating": false, "revisionDelta": 0, "retryable": false}, + {"status": "MALFORMED", "code": "COMMAND_MALFORMED", "mutating": false, "revisionDelta": 0, "retryable": false}, + {"status": "UNSUPPORTED", "code": "COMMAND_UNSUPPORTED", "mutating": false, "revisionDelta": 0, "retryable": false}, + {"status": "EXTERNAL_REQUIRED", "code": "RESOURCE_REQUIRED", "mutating": false, "revisionDelta": 0, "retryable": true}, + {"status": "CANCELLED", "code": "CANCELLED", "mutating": false, "revisionDelta": 0, "retryable": true} + ], + "invariants": [ + "status and code are a closed pair", + "all failure statuses preserve Main revision and dirty state", + "retryable means the same command may be retried after external state correction; it never implies an automatic retry", + "unknown status or code is schema-invalid and must fail closed" + ], + "source": { + "completionPolicy": { + "path": "tests/golden/corrective/C1-001/completion-policy.json", + "sha256": "0f53534a957856c0b7ad57f02e629d15ed27b449e31b3604ded62be43e057226" + } + } +} diff --git a/tests/golden/corrective/C1-002/handoff-resolution.json b/tests/golden/corrective/C1-002/handoff-resolution.json new file mode 100644 index 00000000..a3755330 --- /dev/null +++ b/tests/golden/corrective/C1-002/handoff-resolution.json @@ -0,0 +1,34 @@ +{ + "schemaVersion": 1, + "task": "C1-002", + "status": "PASS", + "queueMutation": false, + "inputDigest": "9f14d29c676c159cb3d865dc10b6388cdb07ed86f6f55e2aa9cacc9258be2c2f", + "sourceHashes": { + "tests/golden/corrective/C1-001/manifest.json": "ee43545b06a0645377ab2520a14d55f6c0d778751ed37e32c63089ca79b2a107", + "tests/golden/corrective/C1-001/parity-level-contract.json": "5547859d178b67c70389bb199a887b098b083217586a863a79b1eb38f30948fc", + "tests/golden/corrective/C1-001/completion-policy.json": "0f53534a957856c0b7ad57f02e629d15ed27b449e31b3604ded62be43e057226", + "docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json": "053e1551a24da08e045bb54115858a892ddd825fa59f1691a26a1ccfc1db3ca0", + "tests/golden/corrective/C1-002/command-schema.json": "caf5794bd20406f71a02eaabaa44eb6b4387831e4b379af69e230572e7ccf19d", + "tests/golden/corrective/C1-002/context-schema.json": "35d7a1021c629bf576651efe9e9181bc884f197aa2283e7d5089c6864433a744", + "tests/golden/corrective/C1-002/result-schema.json": "430d3e8568ecf025b32563fbba9be09b8e7ee7848c1077baaafb94904ffae9b6", + "tests/golden/corrective/C1-002/error-status-table.json": "c2a20a1d565c012b62f4dc611b7139a0473394111cc4220a556921071856b13d", + "tests/golden/corrective/C1-002/command-result-context.test.mjs": "b9f790531a9afcfd8e0586731695ec378fb6e9481fd4b2141982a7d94f0dc3e2", + "tests/golden/corrective/C1-002/schema-report.md": "b30eb5954903ff92d652c4d6ef2281f70924b244807c466d3d78d8ba6d724797", + "tests/golden/corrective/C1-002/test-command-result-context.log": "28471cd67f6bbe60065a385e32c066ade20e894bfd5e7b02df60c7a7eb1bb474", + "tests/golden/corrective/C1-002/source-hash-check.log": "999bac984b1299280622cb874fb6da13e7bac37ad831c89ee28e7174d9c1640a", + "tests/golden/corrective/C1-002/command-exit-codes.json": "c67257941f05088bf49545d026df7a92444b22ef47a99d06bc97a34483b679ec" + }, + "commandExitCodes": { + "schemaTest": 0, + "plan": 0, + "index": 0, + "context": 0, + "contextTest": 0, + "governance": 0, + "governanceTest": 0, + "diff": 0, + "sourceHashCheck": 0 + }, + "nextCorrectiveTask": "C1-003" +} diff --git a/tests/golden/corrective/C1-002/handoff.json b/tests/golden/corrective/C1-002/handoff.json new file mode 100644 index 00000000..cfa286cc --- /dev/null +++ b/tests/golden/corrective/C1-002/handoff.json @@ -0,0 +1,173 @@ +{ + "schemaVersion": 1, + "task": "C1-002", + "status": "done", + "gate": "G1", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C1-002", + "artifactCount": 26, + "artifacts": [ + { + "path": "tests/golden/corrective/C1-002/check-context-governance-final.log", + "sha256": "8b4a0add34d164d2e514192c430269e780f03f92697d77e494aa35825b5861f3", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C1-002/check-context-governance.log", + "sha256": "8b4a0add34d164d2e514192c430269e780f03f92697d77e494aa35825b5861f3", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C1-002/check-corrective-plan-final.log", + "sha256": "dba400a8b69bfda610b520d47b590424bdf228a098bed42aa5825f4aa51257f9", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C1-002/check-corrective-plan.log", + "sha256": "36e863c0f06b80891b7e3180974a094673a15ede94bb521ed7d592eba079b857", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C1-002/check-task-context-final.log", + "sha256": "d878b0cb346102d780a0de68deeb14a36d9c2e7aec63f1010a3d6454e276563a", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C1-002/check-task-context.log", + "sha256": "d878b0cb346102d780a0de68deeb14a36d9c2e7aec63f1010a3d6454e276563a", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C1-002/check-task-index-final.log", + "sha256": "ce310f4a62f095235c7d6096c324e8404e02588871f62cd27a4116a1fac8c2cc", + "bytes": 94 + }, + { + "path": "tests/golden/corrective/C1-002/check-task-index.log", + "sha256": "ce310f4a62f095235c7d6096c324e8404e02588871f62cd27a4116a1fac8c2cc", + "bytes": 94 + }, + { + "path": "tests/golden/corrective/C1-002/command-exit-codes.json", + "sha256": "c67257941f05088bf49545d026df7a92444b22ef47a99d06bc97a34483b679ec", + "bytes": 164 + }, + { + "path": "tests/golden/corrective/C1-002/command-result-context.test.mjs", + "sha256": "b9f790531a9afcfd8e0586731695ec378fb6e9481fd4b2141982a7d94f0dc3e2", + "bytes": 3969 + }, + { + "path": "tests/golden/corrective/C1-002/command-schema.json", + "sha256": "caf5794bd20406f71a02eaabaa44eb6b4387831e4b379af69e230572e7ccf19d", + "bytes": 1556 + }, + { + "path": "tests/golden/corrective/C1-002/context-schema.json", + "sha256": "35d7a1021c629bf576651efe9e9181bc884f197aa2283e7d5089c6864433a744", + "bytes": 1721 + }, + { + "path": "tests/golden/corrective/C1-002/diff-check-final.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C1-002/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C1-002/error-status-table.json", + "sha256": "c2a20a1d565c012b62f4dc611b7139a0473394111cc4220a556921071856b13d", + "bytes": 1464 + }, + { + "path": "tests/golden/corrective/C1-002/handoff-resolution.json", + "sha256": "76fb1bb343731b258367ede036d670e45f352bb8341d6d45e3dd67d3da61c604", + "bytes": 2112 + }, + { + "path": "tests/golden/corrective/C1-002/result-schema.json", + "sha256": "430d3e8568ecf025b32563fbba9be09b8e7ee7848c1077baaafb94904ffae9b6", + "bytes": 1952 + }, + { + "path": "tests/golden/corrective/C1-002/schema-report.md", + "sha256": "b30eb5954903ff92d652c4d6ef2281f70924b244807c466d3d78d8ba6d724797", + "bytes": 1028 + }, + { + "path": "tests/golden/corrective/C1-002/source-hash-check-final.log", + "sha256": "999bac984b1299280622cb874fb6da13e7bac37ad831c89ee28e7174d9c1640a", + "bytes": 25 + }, + { + "path": "tests/golden/corrective/C1-002/source-hash-check.log", + "sha256": "999bac984b1299280622cb874fb6da13e7bac37ad831c89ee28e7174d9c1640a", + "bytes": 25 + }, + { + "path": "tests/golden/corrective/C1-002/source-hash-check.mjs", + "sha256": "c12be378fa2d635ac11ae3bd3f392a9831162ae02597bb3d5afa028b0ad5add2", + "bytes": 734 + }, + { + "path": "tests/golden/corrective/C1-002/test-command-result-context-final.log", + "sha256": "9ffaba10c58f07e63c809aa11e96624616d0ec851529c047fb8772bd8dfc9d1a", + "bytes": 972 + }, + { + "path": "tests/golden/corrective/C1-002/test-command-result-context.log", + "sha256": "28471cd67f6bbe60065a385e32c066ade20e894bfd5e7b02df60c7a7eb1bb474", + "bytes": 971 + }, + { + "path": "tests/golden/corrective/C1-002/test-context-governance-final.log", + "sha256": "1677b59fa34e5868db4d51dd9ac82be3fb6aa82d9f17e651d907fb5c5b6ca855", + "bytes": 2579 + }, + { + "path": "tests/golden/corrective/C1-002/test-context-governance.log", + "sha256": "b3b72d10530930faf17fd7742d52f24cd39f40f890ff9371c275de637b4ca312", + "bytes": 2581 + }, + { + "path": "tests/golden/corrective/C1-002/test-task-context.log", + "sha256": "d0f69000c6f145f7d2ac634a4c12709218ecb55ed5ccef0d6f5f3c76ada6db6e", + "bytes": 1573 + } + ], + "inputDigest": "9f14d29c676c159cb3d865dc10b6388cdb07ed86f6f55e2aa9cacc9258be2c2f", + "sourceHashes": { + "tests/golden/corrective/C1-001/manifest.json": "ee43545b06a0645377ab2520a14d55f6c0d778751ed37e32c63089ca79b2a107", + "tests/golden/corrective/C1-001/parity-level-contract.json": "5547859d178b67c70389bb199a887b098b083217586a863a79b1eb38f30948fc", + "tests/golden/corrective/C1-001/completion-policy.json": "0f53534a957856c0b7ad57f02e629d15ed27b449e31b3604ded62be43e057226", + "docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json": "053e1551a24da08e045bb54115858a892ddd825fa59f1691a26a1ccfc1db3ca0", + "tests/golden/corrective/C1-002/command-schema.json": "caf5794bd20406f71a02eaabaa44eb6b4387831e4b379af69e230572e7ccf19d", + "tests/golden/corrective/C1-002/context-schema.json": "35d7a1021c629bf576651efe9e9181bc884f197aa2283e7d5089c6864433a744", + "tests/golden/corrective/C1-002/result-schema.json": "430d3e8568ecf025b32563fbba9be09b8e7ee7848c1077baaafb94904ffae9b6", + "tests/golden/corrective/C1-002/error-status-table.json": "c2a20a1d565c012b62f4dc611b7139a0473394111cc4220a556921071856b13d", + "tests/golden/corrective/C1-002/command-result-context.test.mjs": "b9f790531a9afcfd8e0586731695ec378fb6e9481fd4b2141982a7d94f0dc3e2", + "tests/golden/corrective/C1-002/schema-report.md": "b30eb5954903ff92d652c4d6ef2281f70924b244807c466d3d78d8ba6d724797", + "tests/golden/corrective/C1-002/test-command-result-context.log": "28471cd67f6bbe60065a385e32c066ade20e894bfd5e7b02df60c7a7eb1bb474", + "tests/golden/corrective/C1-002/source-hash-check.log": "999bac984b1299280622cb874fb6da13e7bac37ad831c89ee28e7174d9c1640a", + "tests/golden/corrective/C1-002/command-exit-codes.json": "c67257941f05088bf49545d026df7a92444b22ef47a99d06bc97a34483b679ec" + }, + "commandExitCodes": { + "schemaTest": 0, + "plan": 0, + "index": 0, + "context": 0, + "contextTest": 0, + "governance": 0, + "governanceTest": 0, + "diff": 0, + "sourceHashCheck": 0 + }, + "resolution": { + "status": "PASS", + "candidate": null + }, + "nextCorrectiveTask": "C1-003" +} diff --git a/tests/golden/corrective/C1-002/manifest.json b/tests/golden/corrective/C1-002/manifest.json new file mode 100644 index 00000000..cfa286cc --- /dev/null +++ b/tests/golden/corrective/C1-002/manifest.json @@ -0,0 +1,173 @@ +{ + "schemaVersion": 1, + "task": "C1-002", + "status": "done", + "gate": "G1", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C1-002", + "artifactCount": 26, + "artifacts": [ + { + "path": "tests/golden/corrective/C1-002/check-context-governance-final.log", + "sha256": "8b4a0add34d164d2e514192c430269e780f03f92697d77e494aa35825b5861f3", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C1-002/check-context-governance.log", + "sha256": "8b4a0add34d164d2e514192c430269e780f03f92697d77e494aa35825b5861f3", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C1-002/check-corrective-plan-final.log", + "sha256": "dba400a8b69bfda610b520d47b590424bdf228a098bed42aa5825f4aa51257f9", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C1-002/check-corrective-plan.log", + "sha256": "36e863c0f06b80891b7e3180974a094673a15ede94bb521ed7d592eba079b857", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C1-002/check-task-context-final.log", + "sha256": "d878b0cb346102d780a0de68deeb14a36d9c2e7aec63f1010a3d6454e276563a", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C1-002/check-task-context.log", + "sha256": "d878b0cb346102d780a0de68deeb14a36d9c2e7aec63f1010a3d6454e276563a", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C1-002/check-task-index-final.log", + "sha256": "ce310f4a62f095235c7d6096c324e8404e02588871f62cd27a4116a1fac8c2cc", + "bytes": 94 + }, + { + "path": "tests/golden/corrective/C1-002/check-task-index.log", + "sha256": "ce310f4a62f095235c7d6096c324e8404e02588871f62cd27a4116a1fac8c2cc", + "bytes": 94 + }, + { + "path": "tests/golden/corrective/C1-002/command-exit-codes.json", + "sha256": "c67257941f05088bf49545d026df7a92444b22ef47a99d06bc97a34483b679ec", + "bytes": 164 + }, + { + "path": "tests/golden/corrective/C1-002/command-result-context.test.mjs", + "sha256": "b9f790531a9afcfd8e0586731695ec378fb6e9481fd4b2141982a7d94f0dc3e2", + "bytes": 3969 + }, + { + "path": "tests/golden/corrective/C1-002/command-schema.json", + "sha256": "caf5794bd20406f71a02eaabaa44eb6b4387831e4b379af69e230572e7ccf19d", + "bytes": 1556 + }, + { + "path": "tests/golden/corrective/C1-002/context-schema.json", + "sha256": "35d7a1021c629bf576651efe9e9181bc884f197aa2283e7d5089c6864433a744", + "bytes": 1721 + }, + { + "path": "tests/golden/corrective/C1-002/diff-check-final.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C1-002/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C1-002/error-status-table.json", + "sha256": "c2a20a1d565c012b62f4dc611b7139a0473394111cc4220a556921071856b13d", + "bytes": 1464 + }, + { + "path": "tests/golden/corrective/C1-002/handoff-resolution.json", + "sha256": "76fb1bb343731b258367ede036d670e45f352bb8341d6d45e3dd67d3da61c604", + "bytes": 2112 + }, + { + "path": "tests/golden/corrective/C1-002/result-schema.json", + "sha256": "430d3e8568ecf025b32563fbba9be09b8e7ee7848c1077baaafb94904ffae9b6", + "bytes": 1952 + }, + { + "path": "tests/golden/corrective/C1-002/schema-report.md", + "sha256": "b30eb5954903ff92d652c4d6ef2281f70924b244807c466d3d78d8ba6d724797", + "bytes": 1028 + }, + { + "path": "tests/golden/corrective/C1-002/source-hash-check-final.log", + "sha256": "999bac984b1299280622cb874fb6da13e7bac37ad831c89ee28e7174d9c1640a", + "bytes": 25 + }, + { + "path": "tests/golden/corrective/C1-002/source-hash-check.log", + "sha256": "999bac984b1299280622cb874fb6da13e7bac37ad831c89ee28e7174d9c1640a", + "bytes": 25 + }, + { + "path": "tests/golden/corrective/C1-002/source-hash-check.mjs", + "sha256": "c12be378fa2d635ac11ae3bd3f392a9831162ae02597bb3d5afa028b0ad5add2", + "bytes": 734 + }, + { + "path": "tests/golden/corrective/C1-002/test-command-result-context-final.log", + "sha256": "9ffaba10c58f07e63c809aa11e96624616d0ec851529c047fb8772bd8dfc9d1a", + "bytes": 972 + }, + { + "path": "tests/golden/corrective/C1-002/test-command-result-context.log", + "sha256": "28471cd67f6bbe60065a385e32c066ade20e894bfd5e7b02df60c7a7eb1bb474", + "bytes": 971 + }, + { + "path": "tests/golden/corrective/C1-002/test-context-governance-final.log", + "sha256": "1677b59fa34e5868db4d51dd9ac82be3fb6aa82d9f17e651d907fb5c5b6ca855", + "bytes": 2579 + }, + { + "path": "tests/golden/corrective/C1-002/test-context-governance.log", + "sha256": "b3b72d10530930faf17fd7742d52f24cd39f40f890ff9371c275de637b4ca312", + "bytes": 2581 + }, + { + "path": "tests/golden/corrective/C1-002/test-task-context.log", + "sha256": "d0f69000c6f145f7d2ac634a4c12709218ecb55ed5ccef0d6f5f3c76ada6db6e", + "bytes": 1573 + } + ], + "inputDigest": "9f14d29c676c159cb3d865dc10b6388cdb07ed86f6f55e2aa9cacc9258be2c2f", + "sourceHashes": { + "tests/golden/corrective/C1-001/manifest.json": "ee43545b06a0645377ab2520a14d55f6c0d778751ed37e32c63089ca79b2a107", + "tests/golden/corrective/C1-001/parity-level-contract.json": "5547859d178b67c70389bb199a887b098b083217586a863a79b1eb38f30948fc", + "tests/golden/corrective/C1-001/completion-policy.json": "0f53534a957856c0b7ad57f02e629d15ed27b449e31b3604ded62be43e057226", + "docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json": "053e1551a24da08e045bb54115858a892ddd825fa59f1691a26a1ccfc1db3ca0", + "tests/golden/corrective/C1-002/command-schema.json": "caf5794bd20406f71a02eaabaa44eb6b4387831e4b379af69e230572e7ccf19d", + "tests/golden/corrective/C1-002/context-schema.json": "35d7a1021c629bf576651efe9e9181bc884f197aa2283e7d5089c6864433a744", + "tests/golden/corrective/C1-002/result-schema.json": "430d3e8568ecf025b32563fbba9be09b8e7ee7848c1077baaafb94904ffae9b6", + "tests/golden/corrective/C1-002/error-status-table.json": "c2a20a1d565c012b62f4dc611b7139a0473394111cc4220a556921071856b13d", + "tests/golden/corrective/C1-002/command-result-context.test.mjs": "b9f790531a9afcfd8e0586731695ec378fb6e9481fd4b2141982a7d94f0dc3e2", + "tests/golden/corrective/C1-002/schema-report.md": "b30eb5954903ff92d652c4d6ef2281f70924b244807c466d3d78d8ba6d724797", + "tests/golden/corrective/C1-002/test-command-result-context.log": "28471cd67f6bbe60065a385e32c066ade20e894bfd5e7b02df60c7a7eb1bb474", + "tests/golden/corrective/C1-002/source-hash-check.log": "999bac984b1299280622cb874fb6da13e7bac37ad831c89ee28e7174d9c1640a", + "tests/golden/corrective/C1-002/command-exit-codes.json": "c67257941f05088bf49545d026df7a92444b22ef47a99d06bc97a34483b679ec" + }, + "commandExitCodes": { + "schemaTest": 0, + "plan": 0, + "index": 0, + "context": 0, + "contextTest": 0, + "governance": 0, + "governanceTest": 0, + "diff": 0, + "sourceHashCheck": 0 + }, + "resolution": { + "status": "PASS", + "candidate": null + }, + "nextCorrectiveTask": "C1-003" +} diff --git a/tests/golden/corrective/C1-002/result-schema.json b/tests/golden/corrective/C1-002/result-schema.json new file mode 100644 index 00000000..f18e285a --- /dev/null +++ b/tests/golden/corrective/C1-002/result-schema.json @@ -0,0 +1,39 @@ +{ + "schemaVersion": 1, + "operation": "CORRECTIVE_RESULT_SCHEMA", + "status": "PASS", + "queueMutation": false, + "name": "MainMutationResult", + "required": ["schemaVersion", "requestId", "status", "code", "baseRevision", "mainRevisionBefore", "mainRevisionAfter", "mainMutation"], + "properties": { + "schemaVersion": {"type": "integer", "const": 1}, + "requestId": {"type": "string", "minLength": 1}, + "status": {"type": "string", "enum": ["FINISHED", "BLOCKED", "CANCELLED", "UNSUPPORTED", "MALFORMED", "EXTERNAL_REQUIRED"]}, + "code": {"type": "string", "minLength": 1, "maxLength": 128, "pattern": "^[A-Z][A-Z0-9_:-]+$"}, + "baseRevision": {"type": "integer", "minimum": 0}, + "mainRevisionBefore": {"type": "integer", "minimum": 0}, + "mainRevisionAfter": {"type": "integer", "minimum": 0}, + "mainMutation": {"type": "string", "enum": ["CHANGED", "UNCHANGED"]}, + "delta": {"type": ["object", "null"]}, + "persistence": {"type": ["object", "null"]}, + "error": {"type": ["object", "null"]} + }, + "additionalProperties": false, + "rules": [ + "FINISHED requires mainMutation=CHANGED and mainRevisionAfter=mainRevisionBefore+1", + "Every non-FINISHED result requires mainMutation=UNCHANGED and mainRevisionAfter=mainRevisionBefore", + "REVISION_CONFLICT, INVALID_CONTEXT, MALFORMED, UNSUPPORTED, EXTERNAL_REQUIRED, and CANCELLED are non-mutating", + "result code is stable and machine-readable; human text is diagnostic only", + "persistence and delta receipts cannot claim success when status is non-FINISHED" + ], + "source": { + "parityContract": { + "path": "tests/golden/corrective/C1-001/parity-level-contract.json", + "sha256": "5547859d178b67c70389bb199a887b098b083217586a863a79b1eb38f30948fc" + }, + "completionPolicy": { + "path": "tests/golden/corrective/C1-001/completion-policy.json", + "sha256": "0f53534a957856c0b7ad57f02e629d15ed27b449e31b3604ded62be43e057226" + } + } +} diff --git a/tests/golden/corrective/C1-002/schema-report.md b/tests/golden/corrective/C1-002/schema-report.md new file mode 100644 index 00000000..637e0ac8 --- /dev/null +++ b/tests/golden/corrective/C1-002/schema-report.md @@ -0,0 +1,21 @@ +# C1-002 Command Result Context Schema Report + +status: PASS +task: define_command_result_context_schema +gate: G1 +queueMutation: false + +This corrective-only contract defines versioned command, context, result, and +error/status schemas. Every command is bound to `requestId`, `baseRevision`, an +authoritative editable context, and command-specific payload. Every result +reports the before/after Main revisions and an explicit mutation state. + +`FINISHED/OK` is the only mutating result and requires a revision delta of one. +`REVISION_CONFLICT`, `INVALID_CONTEXT`, `COMMAND_MALFORMED`, +`COMMAND_UNSUPPORTED`, `RESOURCE_REQUIRED`, and `CANCELLED` preserve Main +revision and are fail-closed. External resources require an explicit provider; +read-only or unauthorized contexts cannot authorize mutation. + +Focused test: `node --test tests/golden/corrective/C1-002/command-result-context.test.mjs` +exited 0 with five passing assertions. Schema provenance is bound to the +completed C1-001 parity contract and completion policy by SHA-256. diff --git a/tests/golden/corrective/C1-002/source-hash-check.mjs b/tests/golden/corrective/C1-002/source-hash-check.mjs new file mode 100644 index 00000000..c8f70114 --- /dev/null +++ b/tests/golden/corrective/C1-002/source-hash-check.mjs @@ -0,0 +1,13 @@ +import crypto from "node:crypto"; +import fs from "node:fs"; + +const sources = [ + ["tests/golden/corrective/C1-001/parity-level-contract.json", "5547859d178b67c70389bb199a887b098b083217586a863a79b1eb38f30948fc"], + ["tests/golden/corrective/C1-001/completion-policy.json", "0f53534a957856c0b7ad57f02e629d15ed27b449e31b3604ded62be43e057226"], + ["docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json", "053e1551a24da08e045bb54115858a892ddd825fa59f1691a26a1ccfc1db3ca0"], +]; +for (const [file, expected] of sources) { + const actual = crypto.createHash("sha256").update(fs.readFileSync(file)).digest("hex"); + if (actual !== expected) throw new Error(`${file}: source hash drift`); +} +console.log(`source-hashes-ok count=${sources.length}`); diff --git a/tests/golden/corrective/C1-003/case-runner.test.mjs b/tests/golden/corrective/C1-003/case-runner.test.mjs new file mode 100644 index 00000000..7fc3bc3d --- /dev/null +++ b/tests/golden/corrective/C1-003/case-runner.test.mjs @@ -0,0 +1,112 @@ +import assert from "node:assert/strict"; +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import test from "node:test"; +import { fileURLToPath, pathToFileURL } from "node:url"; +import ts from "../../../../web/node_modules/typescript/lib/typescript.js"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../../.."); +const sourcePath = path.join(root, "web/protocol/corrective-case-runner.ts"); +const temporary = fs.mkdtempSync(path.join(os.tmpdir(), "corrective-case-runner-")); +const outputPath = path.join(temporary, "corrective-case-runner.mjs"); +const transpiled = ts.transpileModule(fs.readFileSync(sourcePath, "utf8"), { + compilerOptions: { module: ts.ModuleKind.ES2022, target: ts.ScriptTarget.ES2022 }, + fileName: sourcePath, + reportDiagnostics: true, +}); +assert.deepEqual(transpiled.diagnostics, []); +fs.writeFileSync(outputPath, transpiled.outputText); +const runner = await import(pathToFileURL(outputPath)); + +const command = (overrides = {}) => ({ + schemaVersion: 1, + requestId: "case-001", + commandType: "setFrame", + baseRevision: 4, + context: { + mainId: "main:test", + targetKind: "SCENE", + targetId: "scene:Scene", + editMode: "EDITABLE", + authorization: "USER_EDIT", + source: { kind: "LOCAL", sha256: "a".repeat(64) }, + }, + payload: { frame: 12 }, + ...overrides, +}); + +const finished = (request) => ({ + schemaVersion: 1, + requestId: request.requestId, + status: "FINISHED", + code: "OK", + baseRevision: request.baseRevision, + mainRevisionBefore: 4, + mainRevisionAfter: 5, + mainMutation: "CHANGED", + delta: { frame: 12 }, + persistence: { dirty: true }, + error: null, +}); + +test("desktop and WASM share a normalized positive receipt", async () => { + const shared = await runner.runSharedCase(command(), 4, { + desktop: async (request) => finished(request), + wasm: async (request) => finished(request), + }); + assert.equal(shared.parity, "MATCH"); + assert.deepEqual(shared.differences, []); + assert.equal(shared.desktop.result.mainMutation, "CHANGED"); + assert.equal(shared.wasm.result.mainRevisionAfter, 5); +}); + +test("stale revisions are rejected before either adapter runs", async () => { + let calls = 0; + const shared = await runner.runSharedCase(command({ baseRevision: 3 }), 4, { + desktop: async () => { calls++; return finished(command()); }, + wasm: async () => { calls++; return finished(command()); }, + }); + assert.equal(calls, 0); + assert.equal(shared.parity, "MATCH"); + assert.equal(shared.desktop.result.status, "BLOCKED"); + assert.equal(shared.desktop.result.code, "REVISION_CONFLICT"); + assert.equal(shared.desktop.result.mainRevisionAfter, 4); +}); + +test("invalid context and missing external resources are fail-closed", async () => { + const readOnly = command({ context: { ...command().context, editMode: "READ_ONLY" } }); + const invalid = await runner.runDesktopCase({ command: readOnly, mainRevision: 4, execute: async () => { throw new Error("adapter must not run"); } }); + assert.equal(invalid.result.status, "BLOCKED"); + assert.equal(invalid.result.code, "INVALID_CONTEXT"); + const external = command({ context: { ...command().context, source: { kind: "EXTERNAL", sha256: "b".repeat(64) } } }); + const required = await runner.runWasmCase({ command: external, mainRevision: 4, execute: async () => { throw new Error("adapter must not run"); } }); + assert.equal(required.result.status, "EXTERNAL_REQUIRED"); + assert.equal(required.result.code, "RESOURCE_REQUIRED"); +}); + +test("malformed commands and malformed adapter results remain non-mutating", async () => { + const malformed = await runner.runDesktopCase({ command: { schemaVersion: 1, requestId: "bad id" }, mainRevision: 7, execute: async () => { throw new Error("adapter must not run"); } }); + assert.equal(malformed.result.status, "MALFORMED"); + assert.equal(malformed.result.code, "COMMAND_MALFORMED"); + const badResult = await runner.runWasmCase({ command: command(), mainRevision: 4, execute: async (request) => ({ ...finished(request), mainRevisionAfter: 4 }) }); + assert.equal(badResult.result.status, "MALFORMED"); + assert.equal(badResult.result.code, "COMMAND_MALFORMED"); + assert.equal(badResult.result.mainMutation, "UNCHANGED"); +}); + +test("receipt comparison exposes semantic divergence while ignoring diagnostics", async () => { + const shared = await runner.runSharedCase(command(), 4, { + desktop: async (request) => finished(request), + wasm: async (request) => ({ ...finished(request), error: { code: "DIAGNOSTIC", message: "surface-specific detail" } }), + }); + assert.equal(shared.parity, "MATCH"); + const divergent = await runner.runSharedCase(command(), 4, { + desktop: async (request) => finished(request), + wasm: async (request) => ({ ...finished(request), delta: { frame: 13 } }), + }); + assert.equal(divergent.parity, "MISMATCH"); + assert.match(divergent.differences.join("\n"), /delta/); +}); + +fs.rmSync(temporary, { recursive: true, force: true }); diff --git a/tests/golden/corrective/C1-003/command-exit-codes.json b/tests/golden/corrective/C1-003/command-exit-codes.json new file mode 100644 index 00000000..20755ee3 --- /dev/null +++ b/tests/golden/corrective/C1-003/command-exit-codes.json @@ -0,0 +1,12 @@ +{ + "focusedTest": 0, + "receiptGeneration": 0, + "determinism": 0, + "protectedHashCheck": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0 +} diff --git a/tests/golden/corrective/C1-003/deterministic-case-report.mjs b/tests/golden/corrective/C1-003/deterministic-case-report.mjs new file mode 100644 index 00000000..8795b4de --- /dev/null +++ b/tests/golden/corrective/C1-003/deterministic-case-report.mjs @@ -0,0 +1,49 @@ +import assert from "node:assert/strict"; +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import { fileURLToPath, pathToFileURL } from "node:url"; +import ts from "../../../../web/node_modules/typescript/lib/typescript.js"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../../.."); +const sourcePath = path.join(root, "web/protocol/corrective-case-runner.ts"); +const temporary = fs.mkdtempSync(path.join(os.tmpdir(), "corrective-report-")); +try { + const outputPath = path.join(temporary, "runner.mjs"); + const transpiled = ts.transpileModule(fs.readFileSync(sourcePath, "utf8"), { + compilerOptions: { module: ts.ModuleKind.ES2022, target: ts.ScriptTarget.ES2022 }, + fileName: sourcePath, + reportDiagnostics: true, + }); + assert.deepEqual(transpiled.diagnostics, []); + fs.writeFileSync(outputPath, transpiled.outputText); + const runner = await import(pathToFileURL(outputPath)); + const context = { + mainId: "main:pilot", + targetKind: "SCENE", + targetId: "scene:Scene", + editMode: "EDITABLE", + authorization: "USER_EDIT", + source: { kind: "LOCAL", sha256: "a".repeat(64) }, + }; + const command = { schemaVersion: 1, requestId: "pilot-001", commandType: "setFrame", baseRevision: 4, context, payload: { frame: 12 } }; + const finished = (request) => ({ schemaVersion: 1, requestId: request.requestId, status: "FINISHED", code: "OK", baseRevision: request.baseRevision, mainRevisionBefore: 4, mainRevisionAfter: 5, mainMutation: "CHANGED", delta: { frame: 12 }, persistence: { dirty: true }, error: null }); + const positive = await runner.runSharedCase(command, 4, { desktop: async (request) => finished(request), wasm: async (request) => finished(request) }); + const stale = await runner.runSharedCase({ ...command, baseRevision: 3 }, 4, { desktop: async () => finished(command), wasm: async () => finished(command) }); + const external = await runner.runSharedCase({ ...command, context: { ...context, source: { kind: "EXTERNAL", sha256: "b".repeat(64) } } }, 4, { desktop: async () => finished(command), wasm: async () => finished(command) }); + const report = { + schemaVersion: 1, + task: "C1-003", + operation: "CORRECTIVE_SHARED_CASE_RUNNER", + queueMutation: false, + positive: { parity: positive.parity, desktop: positive.desktop.result, wasm: positive.wasm.result }, + negative: { + revisionConflict: { parity: stale.parity, desktop: stale.desktop.result, wasm: stale.wasm.result }, + externalRequired: { parity: external.parity, desktop: external.desktop.result, wasm: external.wasm.result }, + }, + semantics: ["FINISHED/OK changes Main revision by one", "all negative statuses preserve revision", "diagnostic error text is excluded from parity comparison"], + }; + process.stdout.write(`${JSON.stringify(report, null, 2)}\n`); +} finally { + fs.rmSync(temporary, { recursive: true, force: true }); +} diff --git a/tests/golden/corrective/C1-003/handoff.json b/tests/golden/corrective/C1-003/handoff.json new file mode 100644 index 00000000..45577002 --- /dev/null +++ b/tests/golden/corrective/C1-003/handoff.json @@ -0,0 +1,123 @@ +{ + "schemaVersion": 1, + "task": "C1-003", + "status": "done", + "gate": "G1", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C1-003", + "artifactCount": 18, + "artifacts": [ + { + "path": "tests/golden/corrective/C1-003/case-runner.test.mjs", + "sha256": "c11857736554c40aa3c2b00d8f3ad393899d21fff103f1821879ab4ab8702c73", + "bytes": 5006 + }, + { + "path": "tests/golden/corrective/C1-003/check-context-governance.log", + "sha256": "7ed574f956f0255482a15f63faedc657fc7eb0fa643d282a430f27a207b5bf8d", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C1-003/check-corrective-plan.log", + "sha256": "63057245846b746e368b61cc5589b98f607215f3db1550b919fe5d0ca0f96ff2", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C1-003/check-task-context.log", + "sha256": "cf9fb3f108cb7febf3d6d17543cb1abf9356174eb34d379652dd288aca6db2d7", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C1-003/command-exit-codes.json", + "sha256": "1d42c9e0aee854c6a4ae11816a276537c590a45bc0c1ad2f725a1fc59beb15e4", + "bytes": 226 + }, + { + "path": "tests/golden/corrective/C1-003/determinism.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C1-003/deterministic-case-report.mjs", + "sha256": "6a58009d5351ec5754726c285c3804812875e0bbd766f97aeb82f5f0107f20d1", + "bytes": 2930 + }, + { + "path": "tests/golden/corrective/C1-003/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C1-003/focused-test.log", + "sha256": "fcddeda1fdec87a9abda679aacfb4daf7b45aac9f2ff0a01bd5b80e75d4bae68", + "bytes": 1018 + }, + { + "path": "tests/golden/corrective/C1-003/protected-hash-check.log", + "sha256": "cbfa11f4e820313bb186633cd646ed9a2d7a148e959e95a1ba88a369f9eb2644", + "bytes": 27 + }, + { + "path": "tests/golden/corrective/C1-003/protected-hashes-after.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C1-003/protected-hashes-before.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C1-003/receipt-gate.log", + "sha256": "37757868e9d515b682b2f1f67e6245f4be7e3db39c17f41344dd39ea1cd5975b", + "bytes": 17 + }, + { + "path": "tests/golden/corrective/C1-003/receipt-report.json", + "sha256": "01dfea154ff889860adb8dd6ee15b6b792a64befdb5ffe7199e953756d2c9bc4", + "bytes": 3111 + }, + { + "path": "tests/golden/corrective/C1-003/receipt-report.second.json", + "sha256": "01dfea154ff889860adb8dd6ee15b6b792a64befdb5ffe7199e953756d2c9bc4", + "bytes": 3111 + }, + { + "path": "tests/golden/corrective/C1-003/source-hashes.json", + "sha256": "4c40edc72758ac19606a350731e219ba5461c813f7d04f0f15d15d131ed588ed", + "bytes": 911 + }, + { + "path": "tests/golden/corrective/C1-003/test-context-governance.log", + "sha256": "50a2b12d5cc706ea3d1af5164ebddfcadc9af4250919bfb48c9f3286c0ed64a9", + "bytes": 2583 + }, + { + "path": "tests/golden/corrective/C1-003/typecheck.log", + "sha256": "f90c14a9694ed7029129a343fa5cc8672e4a59a5fe4b34e7c3098db9c5c5bd1a", + "bytes": 76 + } + ], + "sourceHashes": { + "tests/golden/corrective/C1-002/command-schema.json": "caf5794bd20406f71a02eaabaa44eb6b4387831e4b379af69e230572e7ccf19d", + "tests/golden/corrective/C1-002/context-schema.json": "35d7a1021c629bf576651efe9e9181bc884f197aa2283e7d5089c6864433a744", + "tests/golden/corrective/C1-002/result-schema.json": "430d3e8568ecf025b32563fbba9be09b8e7ee7848c1077baaafb94904ffae9b6", + "tests/golden/corrective/C1-002/error-status-table.json": "c2a20a1d565c012b62f4dc611b7139a0473394111cc4220a556921071856b13d", + "tests/golden/corrective/C1-003/case-runner.test.mjs": "c11857736554c40aa3c2b00d8f3ad393899d21fff103f1821879ab4ab8702c73", + "tests/golden/corrective/C1-003/deterministic-case-report.mjs": "6a58009d5351ec5754726c285c3804812875e0bbd766f97aeb82f5f0107f20d1", + "web/protocol/corrective-case-runner.ts": "fbfc9f72cce84acc773818993b6630d73df1ce6cab7781f172d871b42b8bf70d" + }, + "commandExitCodes": { + "focusedTest": 0, + "receiptGeneration": 0, + "determinism": 0, + "protectedHashCheck": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0 + }, + "nextCorrectiveTask": "C2-001" +} diff --git a/tests/golden/corrective/C1-003/manifest.json b/tests/golden/corrective/C1-003/manifest.json new file mode 100644 index 00000000..45577002 --- /dev/null +++ b/tests/golden/corrective/C1-003/manifest.json @@ -0,0 +1,123 @@ +{ + "schemaVersion": 1, + "task": "C1-003", + "status": "done", + "gate": "G1", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C1-003", + "artifactCount": 18, + "artifacts": [ + { + "path": "tests/golden/corrective/C1-003/case-runner.test.mjs", + "sha256": "c11857736554c40aa3c2b00d8f3ad393899d21fff103f1821879ab4ab8702c73", + "bytes": 5006 + }, + { + "path": "tests/golden/corrective/C1-003/check-context-governance.log", + "sha256": "7ed574f956f0255482a15f63faedc657fc7eb0fa643d282a430f27a207b5bf8d", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C1-003/check-corrective-plan.log", + "sha256": "63057245846b746e368b61cc5589b98f607215f3db1550b919fe5d0ca0f96ff2", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C1-003/check-task-context.log", + "sha256": "cf9fb3f108cb7febf3d6d17543cb1abf9356174eb34d379652dd288aca6db2d7", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C1-003/command-exit-codes.json", + "sha256": "1d42c9e0aee854c6a4ae11816a276537c590a45bc0c1ad2f725a1fc59beb15e4", + "bytes": 226 + }, + { + "path": "tests/golden/corrective/C1-003/determinism.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C1-003/deterministic-case-report.mjs", + "sha256": "6a58009d5351ec5754726c285c3804812875e0bbd766f97aeb82f5f0107f20d1", + "bytes": 2930 + }, + { + "path": "tests/golden/corrective/C1-003/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C1-003/focused-test.log", + "sha256": "fcddeda1fdec87a9abda679aacfb4daf7b45aac9f2ff0a01bd5b80e75d4bae68", + "bytes": 1018 + }, + { + "path": "tests/golden/corrective/C1-003/protected-hash-check.log", + "sha256": "cbfa11f4e820313bb186633cd646ed9a2d7a148e959e95a1ba88a369f9eb2644", + "bytes": 27 + }, + { + "path": "tests/golden/corrective/C1-003/protected-hashes-after.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C1-003/protected-hashes-before.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C1-003/receipt-gate.log", + "sha256": "37757868e9d515b682b2f1f67e6245f4be7e3db39c17f41344dd39ea1cd5975b", + "bytes": 17 + }, + { + "path": "tests/golden/corrective/C1-003/receipt-report.json", + "sha256": "01dfea154ff889860adb8dd6ee15b6b792a64befdb5ffe7199e953756d2c9bc4", + "bytes": 3111 + }, + { + "path": "tests/golden/corrective/C1-003/receipt-report.second.json", + "sha256": "01dfea154ff889860adb8dd6ee15b6b792a64befdb5ffe7199e953756d2c9bc4", + "bytes": 3111 + }, + { + "path": "tests/golden/corrective/C1-003/source-hashes.json", + "sha256": "4c40edc72758ac19606a350731e219ba5461c813f7d04f0f15d15d131ed588ed", + "bytes": 911 + }, + { + "path": "tests/golden/corrective/C1-003/test-context-governance.log", + "sha256": "50a2b12d5cc706ea3d1af5164ebddfcadc9af4250919bfb48c9f3286c0ed64a9", + "bytes": 2583 + }, + { + "path": "tests/golden/corrective/C1-003/typecheck.log", + "sha256": "f90c14a9694ed7029129a343fa5cc8672e4a59a5fe4b34e7c3098db9c5c5bd1a", + "bytes": 76 + } + ], + "sourceHashes": { + "tests/golden/corrective/C1-002/command-schema.json": "caf5794bd20406f71a02eaabaa44eb6b4387831e4b379af69e230572e7ccf19d", + "tests/golden/corrective/C1-002/context-schema.json": "35d7a1021c629bf576651efe9e9181bc884f197aa2283e7d5089c6864433a744", + "tests/golden/corrective/C1-002/result-schema.json": "430d3e8568ecf025b32563fbba9be09b8e7ee7848c1077baaafb94904ffae9b6", + "tests/golden/corrective/C1-002/error-status-table.json": "c2a20a1d565c012b62f4dc611b7139a0473394111cc4220a556921071856b13d", + "tests/golden/corrective/C1-003/case-runner.test.mjs": "c11857736554c40aa3c2b00d8f3ad393899d21fff103f1821879ab4ab8702c73", + "tests/golden/corrective/C1-003/deterministic-case-report.mjs": "6a58009d5351ec5754726c285c3804812875e0bbd766f97aeb82f5f0107f20d1", + "web/protocol/corrective-case-runner.ts": "fbfc9f72cce84acc773818993b6630d73df1ce6cab7781f172d871b42b8bf70d" + }, + "commandExitCodes": { + "focusedTest": 0, + "receiptGeneration": 0, + "determinism": 0, + "protectedHashCheck": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0 + }, + "nextCorrectiveTask": "C2-001" +} diff --git a/tests/golden/corrective/C1-003/protected-hashes-after.txt b/tests/golden/corrective/C1-003/protected-hashes-after.txt new file mode 100644 index 00000000..a0d2c8ba --- /dev/null +++ b/tests/golden/corrective/C1-003/protected-hashes-after.txt @@ -0,0 +1,7 @@ +5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1 docs/EXECUTION_QUEUE.md +32f4c11ebf8563f3aa500583f3979c1b38d711cc7328a428968118f0375b90b4 tests/golden/M15-03A/completed-gap-tasks.json +edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17 tests/golden/M15-03A/next-task-plan.json +da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d tests/golden/M15-03A/task-catalog.jsonl +ed591788c48c1b089decd2aa187f66728b5cc66a73c2b1c0c46c1a46ec4a0ae0 tests/golden/M15-03A/task-index.json +3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1 tests/golden/M16-GAP-00273/manifest.json +5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8 docs/status/M16-GAP-00273.md diff --git a/tests/golden/corrective/C1-003/protected-hashes-before.txt b/tests/golden/corrective/C1-003/protected-hashes-before.txt new file mode 100644 index 00000000..a0d2c8ba --- /dev/null +++ b/tests/golden/corrective/C1-003/protected-hashes-before.txt @@ -0,0 +1,7 @@ +5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1 docs/EXECUTION_QUEUE.md +32f4c11ebf8563f3aa500583f3979c1b38d711cc7328a428968118f0375b90b4 tests/golden/M15-03A/completed-gap-tasks.json +edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17 tests/golden/M15-03A/next-task-plan.json +da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d tests/golden/M15-03A/task-catalog.jsonl +ed591788c48c1b089decd2aa187f66728b5cc66a73c2b1c0c46c1a46ec4a0ae0 tests/golden/M15-03A/task-index.json +3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1 tests/golden/M16-GAP-00273/manifest.json +5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8 docs/status/M16-GAP-00273.md diff --git a/tests/golden/corrective/C1-003/receipt-report.json b/tests/golden/corrective/C1-003/receipt-report.json new file mode 100644 index 00000000..b26549c8 --- /dev/null +++ b/tests/golden/corrective/C1-003/receipt-report.json @@ -0,0 +1,120 @@ +{ + "schemaVersion": 1, + "task": "C1-003", + "operation": "CORRECTIVE_SHARED_CASE_RUNNER", + "queueMutation": false, + "positive": { + "parity": "MATCH", + "desktop": { + "schemaVersion": 1, + "requestId": "pilot-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 5, + "mainMutation": "CHANGED", + "delta": { + "frame": 12 + }, + "persistence": { + "dirty": true + }, + "error": null + }, + "wasm": { + "schemaVersion": 1, + "requestId": "pilot-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 5, + "mainMutation": "CHANGED", + "delta": { + "frame": 12 + }, + "persistence": { + "dirty": true + }, + "error": null + } + }, + "negative": { + "revisionConflict": { + "parity": "MATCH", + "desktop": { + "schemaVersion": 1, + "requestId": "pilot-001", + "status": "BLOCKED", + "code": "REVISION_CONFLICT", + "baseRevision": 3, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "REVISION_CONFLICT", + "message": "base revision does not match current Main" + } + }, + "wasm": { + "schemaVersion": 1, + "requestId": "pilot-001", + "status": "BLOCKED", + "code": "REVISION_CONFLICT", + "baseRevision": 3, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "REVISION_CONFLICT", + "message": "base revision does not match current Main" + } + } + }, + "externalRequired": { + "parity": "MATCH", + "desktop": { + "schemaVersion": 1, + "requestId": "pilot-001", + "status": "EXTERNAL_REQUIRED", + "code": "RESOURCE_REQUIRED", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "RESOURCE_REQUIRED", + "message": "external source requires a resource provider" + } + }, + "wasm": { + "schemaVersion": 1, + "requestId": "pilot-001", + "status": "EXTERNAL_REQUIRED", + "code": "RESOURCE_REQUIRED", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "RESOURCE_REQUIRED", + "message": "external source requires a resource provider" + } + } + } + }, + "semantics": [ + "FINISHED/OK changes Main revision by one", + "all negative statuses preserve revision", + "diagnostic error text is excluded from parity comparison" + ] +} diff --git a/tests/golden/corrective/C1-003/receipt-report.second.json b/tests/golden/corrective/C1-003/receipt-report.second.json new file mode 100644 index 00000000..b26549c8 --- /dev/null +++ b/tests/golden/corrective/C1-003/receipt-report.second.json @@ -0,0 +1,120 @@ +{ + "schemaVersion": 1, + "task": "C1-003", + "operation": "CORRECTIVE_SHARED_CASE_RUNNER", + "queueMutation": false, + "positive": { + "parity": "MATCH", + "desktop": { + "schemaVersion": 1, + "requestId": "pilot-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 5, + "mainMutation": "CHANGED", + "delta": { + "frame": 12 + }, + "persistence": { + "dirty": true + }, + "error": null + }, + "wasm": { + "schemaVersion": 1, + "requestId": "pilot-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 5, + "mainMutation": "CHANGED", + "delta": { + "frame": 12 + }, + "persistence": { + "dirty": true + }, + "error": null + } + }, + "negative": { + "revisionConflict": { + "parity": "MATCH", + "desktop": { + "schemaVersion": 1, + "requestId": "pilot-001", + "status": "BLOCKED", + "code": "REVISION_CONFLICT", + "baseRevision": 3, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "REVISION_CONFLICT", + "message": "base revision does not match current Main" + } + }, + "wasm": { + "schemaVersion": 1, + "requestId": "pilot-001", + "status": "BLOCKED", + "code": "REVISION_CONFLICT", + "baseRevision": 3, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "REVISION_CONFLICT", + "message": "base revision does not match current Main" + } + } + }, + "externalRequired": { + "parity": "MATCH", + "desktop": { + "schemaVersion": 1, + "requestId": "pilot-001", + "status": "EXTERNAL_REQUIRED", + "code": "RESOURCE_REQUIRED", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "RESOURCE_REQUIRED", + "message": "external source requires a resource provider" + } + }, + "wasm": { + "schemaVersion": 1, + "requestId": "pilot-001", + "status": "EXTERNAL_REQUIRED", + "code": "RESOURCE_REQUIRED", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "RESOURCE_REQUIRED", + "message": "external source requires a resource provider" + } + } + } + }, + "semantics": [ + "FINISHED/OK changes Main revision by one", + "all negative statuses preserve revision", + "diagnostic error text is excluded from parity comparison" + ] +} diff --git a/tests/golden/corrective/C1-003/source-hashes.json b/tests/golden/corrective/C1-003/source-hashes.json new file mode 100644 index 00000000..512faecb --- /dev/null +++ b/tests/golden/corrective/C1-003/source-hashes.json @@ -0,0 +1,11 @@ +{ + "sourceHashes": { + "tests/golden/corrective/C1-002/command-schema.json": "caf5794bd20406f71a02eaabaa44eb6b4387831e4b379af69e230572e7ccf19d", + "tests/golden/corrective/C1-002/context-schema.json": "35d7a1021c629bf576651efe9e9181bc884f197aa2283e7d5089c6864433a744", + "tests/golden/corrective/C1-002/result-schema.json": "430d3e8568ecf025b32563fbba9be09b8e7ee7848c1077baaafb94904ffae9b6", + "tests/golden/corrective/C1-002/error-status-table.json": "c2a20a1d565c012b62f4dc611b7139a0473394111cc4220a556921071856b13d", + "tests/golden/corrective/C1-003/case-runner.test.mjs": "c11857736554c40aa3c2b00d8f3ad393899d21fff103f1821879ab4ab8702c73", + "tests/golden/corrective/C1-003/deterministic-case-report.mjs": "6a58009d5351ec5754726c285c3804812875e0bbd766f97aeb82f5f0107f20d1", + "web/protocol/corrective-case-runner.ts": "fbfc9f72cce84acc773818993b6630d73df1ce6cab7781f172d871b42b8bf70d" + } +} diff --git a/tests/golden/corrective/C2-001/command-exit-codes.json b/tests/golden/corrective/C2-001/command-exit-codes.json new file mode 100644 index 00000000..20755ee3 --- /dev/null +++ b/tests/golden/corrective/C2-001/command-exit-codes.json @@ -0,0 +1,12 @@ +{ + "focusedTest": 0, + "receiptGeneration": 0, + "determinism": 0, + "protectedHashCheck": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0 +} diff --git a/tests/golden/corrective/C2-001/command-registry.test.mjs b/tests/golden/corrective/C2-001/command-registry.test.mjs new file mode 100644 index 00000000..796becfb --- /dev/null +++ b/tests/golden/corrective/C2-001/command-registry.test.mjs @@ -0,0 +1,131 @@ +import assert from "node:assert/strict"; +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import test from "node:test"; +import { fileURLToPath, pathToFileURL } from "node:url"; +import ts from "../../../../web/node_modules/typescript/lib/typescript.js"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../../.."); +const temporary = fs.mkdtempSync(path.join(os.tmpdir(), "corrective-command-registry-")); +const runnerOutput = path.join(temporary, "corrective-case-runner.mjs"); +const registryOutput = path.join(temporary, "corrective-command-registry.mjs"); +const compile = (source, output) => { + const result = ts.transpileModule(fs.readFileSync(path.join(root, source), "utf8"), { + compilerOptions: { module: ts.ModuleKind.ES2022, target: ts.ScriptTarget.ES2022 }, + fileName: path.join(root, source), + reportDiagnostics: true, + }); + assert.deepEqual(result.diagnostics, []); + const outputText = source.endsWith("corrective-command-registry.ts") + ? result.outputText.replace('from "./corrective-case-runner"', 'from "./corrective-case-runner.mjs"') + : result.outputText; + fs.writeFileSync(output, outputText); +}; +compile("web/protocol/corrective-case-runner.ts", runnerOutput); +compile("web/protocol/corrective-command-registry.ts", registryOutput); +const runner = await import(pathToFileURL(runnerOutput)); +const { CorrectiveCommandRegistry, CommandRegistryError } = await import(pathToFileURL(registryOutput)); + +const command = (overrides = {}) => ({ + schemaVersion: 1, + requestId: "registry-001", + commandType: "setFrame", + baseRevision: 4, + context: { + mainId: "main:test", + targetKind: "SCENE", + targetId: "scene:Scene", + editMode: "EDITABLE", + authorization: "USER_EDIT", + source: { kind: "LOCAL", sha256: "a".repeat(64) }, + }, + payload: { frame: 12 }, + ...overrides, +}); + +const finished = (request) => ({ + schemaVersion: 1, + requestId: request.requestId, + status: "FINISHED", + code: "OK", + baseRevision: request.baseRevision, + mainRevisionBefore: 4, + mainRevisionAfter: 5, + mainMutation: "CHANGED", + delta: { frame: request.payload.frame }, + persistence: { dirty: true }, + error: null, +}); + +const registry = () => new CorrectiveCommandRegistry().register({ + commandType: "setFrame", + targetKinds: ["SCENE"], + authorizations: ["USER_EDIT"], + execute: async (request) => finished(request), +}); + +test("registered commands dispatch through the shared runner", async () => { + const calls = []; + const current = new CorrectiveCommandRegistry().register({ + commandType: "setFrame", + targetKinds: ["SCENE"], + authorizations: ["USER_EDIT"], + execute: async (request) => { calls.push(request.commandType); return finished(request); }, + }); + const desktop = await current.dispatch("DESKTOP", { command: command(), mainRevision: 4 }); + const wasm = await current.dispatch("WASM", { command: command(), mainRevision: 4 }); + assert.equal(desktop.result.status, "FINISHED"); + assert.equal(wasm.result.mainRevisionAfter, 5); + assert.deepEqual(calls, ["setFrame", "setFrame"]); + assert.deepEqual(current.list(), ["setFrame"]); +}); + +test("unknown commands are unsupported before the adapter runs", async () => { + let calls = 0; + const current = registry(); + const result = await current.dispatch("WASM", { + command: command({ commandType: "deleteEverything" }), + mainRevision: 4, + }); + assert.equal(result.result.status, "UNSUPPORTED"); + assert.equal(result.result.code, "COMMAND_UNSUPPORTED"); + assert.equal(result.result.mainRevisionAfter, 4); + assert.equal(calls, 0); +}); + +test("target and authorization policy reject mutations without adapter calls", async () => { + let calls = 0; + const current = new CorrectiveCommandRegistry().register({ + commandType: "setFrame", + targetKinds: ["SCENE"], + authorizations: ["USER_EDIT"], + execute: async (request) => { calls++; return finished(request); }, + }); + const wrongTarget = await current.dispatch("DESKTOP", { command: command({ context: { ...command().context, targetKind: "MESH" } }), mainRevision: 4 }); + const wrongAuth = await current.dispatch("DESKTOP", { command: command({ context: { ...command().context, authorization: "SYSTEM" } }), mainRevision: 4 }); + assert.equal(wrongTarget.result.code, "INVALID_CONTEXT"); + assert.equal(wrongAuth.result.code, "INVALID_CONTEXT"); + assert.equal(wrongTarget.result.mainRevisionAfter, 4); + assert.equal(wrongAuth.result.mainRevisionAfter, 4); + assert.equal(calls, 0); +}); + +test("malformed and read-only commands remain fail-closed", async () => { + const current = registry(); + const malformed = await current.dispatch("WASM", { command: { schemaVersion: 1, requestId: "bad id" }, mainRevision: 4 }); + const readOnly = await current.dispatch("WASM", { command: command({ context: { ...command().context, editMode: "READ_ONLY" } }), mainRevision: 4 }); + assert.equal(malformed.result.code, "COMMAND_MALFORMED"); + assert.equal(readOnly.result.code, "INVALID_CONTEXT"); + assert.equal(malformed.result.mainMutation, "UNCHANGED"); + assert.equal(readOnly.result.mainMutation, "UNCHANGED"); +}); + +test("registry rejects invalid and duplicate definitions", () => { + const current = registry(); + assert.throws(() => current.register({ commandType: "setFrame", targetKinds: ["SCENE"], authorizations: ["USER_EDIT"], execute: finished }), (error) => error instanceof CommandRegistryError && error.code === "REGISTRY_DUPLICATE"); + assert.throws(() => new CorrectiveCommandRegistry().register({ commandType: "setFrame", targetKinds: ["SCENE", "SCENE"], authorizations: ["USER_EDIT"], execute: finished }), (error) => error instanceof CommandRegistryError && error.code === "REGISTRY_INVALID"); + assert.throws(() => new CorrectiveCommandRegistry().register({ commandType: "setFrame", targetKinds: ["SCENE"], authorizations: ["NONE"], execute: finished }), (error) => error instanceof CommandRegistryError && error.code === "REGISTRY_INVALID"); +}); + +fs.rmSync(temporary, { recursive: true, force: true }); diff --git a/tests/golden/corrective/C2-001/deterministic-registry-report.mjs b/tests/golden/corrective/C2-001/deterministic-registry-report.mjs new file mode 100644 index 00000000..11a1b7e8 --- /dev/null +++ b/tests/golden/corrective/C2-001/deterministic-registry-report.mjs @@ -0,0 +1,74 @@ +import assert from "node:assert/strict"; +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import { fileURLToPath, pathToFileURL } from "node:url"; +import ts from "../../../../web/node_modules/typescript/lib/typescript.js"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../../.."); +const temporary = fs.mkdtempSync(path.join(os.tmpdir(), "corrective-registry-report-")); +try { + const runnerOutput = path.join(temporary, "corrective-case-runner.mjs"); + const registryOutput = path.join(temporary, "corrective-command-registry.mjs"); + const compile = (source, output) => { + const sourcePath = path.join(root, source); + const result = ts.transpileModule(fs.readFileSync(sourcePath, "utf8"), { + compilerOptions: { module: ts.ModuleKind.ES2022, target: ts.ScriptTarget.ES2022 }, + fileName: sourcePath, + reportDiagnostics: true, + }); + assert.deepEqual(result.diagnostics, []); + const outputText = source.endsWith("corrective-command-registry.ts") + ? result.outputText.replace('from "./corrective-case-runner"', 'from "./corrective-case-runner.mjs"') + : result.outputText; + fs.writeFileSync(output, outputText); + }; + compile("web/protocol/corrective-case-runner.ts", runnerOutput); + compile("web/protocol/corrective-command-registry.ts", registryOutput); + const runner = await import(pathToFileURL(runnerOutput)); + const { CorrectiveCommandRegistry } = await import(pathToFileURL(registryOutput)); + const context = { + mainId: "main:pilot", + targetKind: "SCENE", + targetId: "scene:Scene", + editMode: "EDITABLE", + authorization: "USER_EDIT", + source: { kind: "LOCAL", sha256: "a".repeat(64) }, + }; + const command = (overrides = {}) => ({ schemaVersion: 1, requestId: "registry-pilot-001", commandType: "setFrame", baseRevision: 4, context, payload: { frame: 12 }, ...overrides }); + const finished = (request) => ({ schemaVersion: 1, requestId: request.requestId, status: "FINISHED", code: "OK", baseRevision: request.baseRevision, mainRevisionBefore: 4, mainRevisionAfter: 5, mainMutation: "CHANGED", delta: { frame: request.payload.frame }, persistence: { dirty: true }, error: null }); + const makeRegistry = () => new CorrectiveCommandRegistry().register({ commandType: "setFrame", targetKinds: ["SCENE"], authorizations: ["USER_EDIT"], execute: async (request) => finished(request) }); + const pair = async (input) => { + const registry = makeRegistry(); + const desktop = await registry.dispatch("DESKTOP", { command: input, mainRevision: 4 }); + const wasm = await registry.dispatch("WASM", { command: input, mainRevision: 4 }); + return { parity: runner.compareReceipts(desktop, wasm).parity, desktop: desktop.result, wasm: wasm.result }; + }; + const positive = await pair(command()); + const unknown = await pair(command({ commandType: "deleteEverything" })); + const wrongTarget = await pair(command({ context: { ...context, targetKind: "MESH" } })); + const wrongAuthorization = await pair(command({ context: { ...context, authorization: "SYSTEM" } })); + const malformed = await pair({ schemaVersion: 1, requestId: "bad id" }); + const readOnly = await pair(command({ context: { ...context, editMode: "READ_ONLY" } })); + assert.equal(positive.parity, "MATCH"); + for (const negative of [unknown, wrongTarget, wrongAuthorization, malformed, readOnly]) { + assert.equal(negative.parity, "MATCH"); + assert.equal(negative.desktop.mainRevisionAfter, 4); + assert.equal(negative.wasm.mainRevisionAfter, 4); + } + process.stdout.write(`${JSON.stringify({ + schemaVersion: 1, + task: "C2-001", + operation: "CORRECTIVE_COMMAND_REGISTRY_VALIDATION", + queueMutation: false, + positive, + negative: { unknown, wrongTarget, wrongAuthorization, malformed, readOnly }, + semantics: [ + "registered command dispatches only after envelope, context, revision, target, and authorization checks", + "unknown, malformed, unauthorized, read-only, and wrong-target cases preserve Main revision", + "desktop and WASM receive the same normalized semantic result while diagnostics remain non-authoritative", + ], + }, null, 2)}\n`); +} finally { + fs.rmSync(temporary, { recursive: true, force: true }); +} diff --git a/tests/golden/corrective/C2-001/handoff.json b/tests/golden/corrective/C2-001/handoff.json new file mode 100644 index 00000000..f83046bd --- /dev/null +++ b/tests/golden/corrective/C2-001/handoff.json @@ -0,0 +1,125 @@ +{ + "schemaVersion": 1, + "task": "C2-001", + "status": "done", + "gate": "G2", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C2-001", + "artifactCount": 18, + "artifacts": [ + { + "path": "tests/golden/corrective/C2-001/check-context-governance.log", + "sha256": "7ed574f956f0255482a15f63faedc657fc7eb0fa643d282a430f27a207b5bf8d", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C2-001/check-corrective-plan.log", + "sha256": "74fecf7afe6dd5db473ad4cb9a6c6c3c966bcf3af0e54b3c0ee5b7bce4eca62e", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C2-001/check-task-context.log", + "sha256": "cf9fb3f108cb7febf3d6d17543cb1abf9356174eb34d379652dd288aca6db2d7", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C2-001/command-exit-codes.json", + "sha256": "1d42c9e0aee854c6a4ae11816a276537c590a45bc0c1ad2f725a1fc59beb15e4", + "bytes": 226 + }, + { + "path": "tests/golden/corrective/C2-001/command-registry.test.mjs", + "sha256": "1a726e6cdf083abf42dfc519810c4e1501d9d4f4c9c1ac73ff1df08a62414609", + "bytes": 6064 + }, + { + "path": "tests/golden/corrective/C2-001/determinism.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C2-001/deterministic-registry-report.mjs", + "sha256": "53bc876d4d38576a62991dd19ce64c1248141b7993f1569791787812d94513d5", + "bytes": 4264 + }, + { + "path": "tests/golden/corrective/C2-001/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C2-001/focused-test.log", + "sha256": "9ef164f5b8a997aff78a598b28da29ed5c7e609c508be6b3589408ba20e109d9", + "bytes": 961 + }, + { + "path": "tests/golden/corrective/C2-001/protected-hash-check.log", + "sha256": "cbfa11f4e820313bb186633cd646ed9a2d7a148e959e95a1ba88a369f9eb2644", + "bytes": 27 + }, + { + "path": "tests/golden/corrective/C2-001/protected-hashes-after.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C2-001/protected-hashes-before.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C2-001/receipt-gate.log", + "sha256": "37757868e9d515b682b2f1f67e6245f4be7e3db39c17f41344dd39ea1cd5975b", + "bytes": 17 + }, + { + "path": "tests/golden/corrective/C2-001/receipt-report.json", + "sha256": "5e24802ea8d62d928e8a92f407da44f8818b6df92bc54726921f5aa2cd60f848", + "bytes": 6455 + }, + { + "path": "tests/golden/corrective/C2-001/receipt-report.second.json", + "sha256": "5e24802ea8d62d928e8a92f407da44f8818b6df92bc54726921f5aa2cd60f848", + "bytes": 6455 + }, + { + "path": "tests/golden/corrective/C2-001/source-hashes.json", + "sha256": "4d5898d6b345355f835d0ddfd53fb10950559d0f9d2ec80476428b3ca2b1687b", + "bytes": 1159 + }, + { + "path": "tests/golden/corrective/C2-001/test-context-governance.log", + "sha256": "67452ae21dd8bada30288379978ea8d11ef9bc750084a7ab3bb6ced2167d05eb", + "bytes": 2582 + }, + { + "path": "tests/golden/corrective/C2-001/typecheck.log", + "sha256": "f90c14a9694ed7029129a343fa5cc8672e4a59a5fe4b34e7c3098db9c5c5bd1a", + "bytes": 76 + } + ], + "sourceHashes": { + "tests/golden/corrective/C1-002/command-schema.json": "caf5794bd20406f71a02eaabaa44eb6b4387831e4b379af69e230572e7ccf19d", + "tests/golden/corrective/C1-002/context-schema.json": "35d7a1021c629bf576651efe9e9181bc884f197aa2283e7d5089c6864433a744", + "tests/golden/corrective/C1-002/result-schema.json": "430d3e8568ecf025b32563fbba9be09b8e7ee7848c1077baaafb94904ffae9b6", + "tests/golden/corrective/C1-002/error-status-table.json": "c2a20a1d565c012b62f4dc611b7139a0473394111cc4220a556921071856b13d", + "tests/golden/corrective/C1-003/manifest.json": "69b7babd164df69ccac76e4ecc1459f2bd060557c978a9065728adc62403e01b", + "web/protocol/corrective-case-runner.ts": "fbfc9f72cce84acc773818993b6630d73df1ce6cab7781f172d871b42b8bf70d", + "web/protocol/corrective-command-registry.ts": "cb0553aac346d34d3c2c12501d2bf681c6edd36c7d6ce5de43c6178b42296897", + "tests/golden/corrective/C2-001/command-registry.test.mjs": "1a726e6cdf083abf42dfc519810c4e1501d9d4f4c9c1ac73ff1df08a62414609", + "tests/golden/corrective/C2-001/deterministic-registry-report.mjs": "53bc876d4d38576a62991dd19ce64c1248141b7993f1569791787812d94513d5" + }, + "commandExitCodes": { + "focusedTest": 0, + "receiptGeneration": 0, + "determinism": 0, + "protectedHashCheck": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0 + }, + "nextCorrectiveTask": "C2-002" +} diff --git a/tests/golden/corrective/C2-001/manifest.json b/tests/golden/corrective/C2-001/manifest.json new file mode 100644 index 00000000..f83046bd --- /dev/null +++ b/tests/golden/corrective/C2-001/manifest.json @@ -0,0 +1,125 @@ +{ + "schemaVersion": 1, + "task": "C2-001", + "status": "done", + "gate": "G2", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C2-001", + "artifactCount": 18, + "artifacts": [ + { + "path": "tests/golden/corrective/C2-001/check-context-governance.log", + "sha256": "7ed574f956f0255482a15f63faedc657fc7eb0fa643d282a430f27a207b5bf8d", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C2-001/check-corrective-plan.log", + "sha256": "74fecf7afe6dd5db473ad4cb9a6c6c3c966bcf3af0e54b3c0ee5b7bce4eca62e", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C2-001/check-task-context.log", + "sha256": "cf9fb3f108cb7febf3d6d17543cb1abf9356174eb34d379652dd288aca6db2d7", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C2-001/command-exit-codes.json", + "sha256": "1d42c9e0aee854c6a4ae11816a276537c590a45bc0c1ad2f725a1fc59beb15e4", + "bytes": 226 + }, + { + "path": "tests/golden/corrective/C2-001/command-registry.test.mjs", + "sha256": "1a726e6cdf083abf42dfc519810c4e1501d9d4f4c9c1ac73ff1df08a62414609", + "bytes": 6064 + }, + { + "path": "tests/golden/corrective/C2-001/determinism.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C2-001/deterministic-registry-report.mjs", + "sha256": "53bc876d4d38576a62991dd19ce64c1248141b7993f1569791787812d94513d5", + "bytes": 4264 + }, + { + "path": "tests/golden/corrective/C2-001/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C2-001/focused-test.log", + "sha256": "9ef164f5b8a997aff78a598b28da29ed5c7e609c508be6b3589408ba20e109d9", + "bytes": 961 + }, + { + "path": "tests/golden/corrective/C2-001/protected-hash-check.log", + "sha256": "cbfa11f4e820313bb186633cd646ed9a2d7a148e959e95a1ba88a369f9eb2644", + "bytes": 27 + }, + { + "path": "tests/golden/corrective/C2-001/protected-hashes-after.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C2-001/protected-hashes-before.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C2-001/receipt-gate.log", + "sha256": "37757868e9d515b682b2f1f67e6245f4be7e3db39c17f41344dd39ea1cd5975b", + "bytes": 17 + }, + { + "path": "tests/golden/corrective/C2-001/receipt-report.json", + "sha256": "5e24802ea8d62d928e8a92f407da44f8818b6df92bc54726921f5aa2cd60f848", + "bytes": 6455 + }, + { + "path": "tests/golden/corrective/C2-001/receipt-report.second.json", + "sha256": "5e24802ea8d62d928e8a92f407da44f8818b6df92bc54726921f5aa2cd60f848", + "bytes": 6455 + }, + { + "path": "tests/golden/corrective/C2-001/source-hashes.json", + "sha256": "4d5898d6b345355f835d0ddfd53fb10950559d0f9d2ec80476428b3ca2b1687b", + "bytes": 1159 + }, + { + "path": "tests/golden/corrective/C2-001/test-context-governance.log", + "sha256": "67452ae21dd8bada30288379978ea8d11ef9bc750084a7ab3bb6ced2167d05eb", + "bytes": 2582 + }, + { + "path": "tests/golden/corrective/C2-001/typecheck.log", + "sha256": "f90c14a9694ed7029129a343fa5cc8672e4a59a5fe4b34e7c3098db9c5c5bd1a", + "bytes": 76 + } + ], + "sourceHashes": { + "tests/golden/corrective/C1-002/command-schema.json": "caf5794bd20406f71a02eaabaa44eb6b4387831e4b379af69e230572e7ccf19d", + "tests/golden/corrective/C1-002/context-schema.json": "35d7a1021c629bf576651efe9e9181bc884f197aa2283e7d5089c6864433a744", + "tests/golden/corrective/C1-002/result-schema.json": "430d3e8568ecf025b32563fbba9be09b8e7ee7848c1077baaafb94904ffae9b6", + "tests/golden/corrective/C1-002/error-status-table.json": "c2a20a1d565c012b62f4dc611b7139a0473394111cc4220a556921071856b13d", + "tests/golden/corrective/C1-003/manifest.json": "69b7babd164df69ccac76e4ecc1459f2bd060557c978a9065728adc62403e01b", + "web/protocol/corrective-case-runner.ts": "fbfc9f72cce84acc773818993b6630d73df1ce6cab7781f172d871b42b8bf70d", + "web/protocol/corrective-command-registry.ts": "cb0553aac346d34d3c2c12501d2bf681c6edd36c7d6ce5de43c6178b42296897", + "tests/golden/corrective/C2-001/command-registry.test.mjs": "1a726e6cdf083abf42dfc519810c4e1501d9d4f4c9c1ac73ff1df08a62414609", + "tests/golden/corrective/C2-001/deterministic-registry-report.mjs": "53bc876d4d38576a62991dd19ce64c1248141b7993f1569791787812d94513d5" + }, + "commandExitCodes": { + "focusedTest": 0, + "receiptGeneration": 0, + "determinism": 0, + "protectedHashCheck": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0 + }, + "nextCorrectiveTask": "C2-002" +} diff --git a/tests/golden/corrective/C2-001/protected-hashes-after.txt b/tests/golden/corrective/C2-001/protected-hashes-after.txt new file mode 100644 index 00000000..a0d2c8ba --- /dev/null +++ b/tests/golden/corrective/C2-001/protected-hashes-after.txt @@ -0,0 +1,7 @@ +5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1 docs/EXECUTION_QUEUE.md +32f4c11ebf8563f3aa500583f3979c1b38d711cc7328a428968118f0375b90b4 tests/golden/M15-03A/completed-gap-tasks.json +edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17 tests/golden/M15-03A/next-task-plan.json +da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d tests/golden/M15-03A/task-catalog.jsonl +ed591788c48c1b089decd2aa187f66728b5cc66a73c2b1c0c46c1a46ec4a0ae0 tests/golden/M15-03A/task-index.json +3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1 tests/golden/M16-GAP-00273/manifest.json +5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8 docs/status/M16-GAP-00273.md diff --git a/tests/golden/corrective/C2-001/protected-hashes-before.txt b/tests/golden/corrective/C2-001/protected-hashes-before.txt new file mode 100644 index 00000000..a0d2c8ba --- /dev/null +++ b/tests/golden/corrective/C2-001/protected-hashes-before.txt @@ -0,0 +1,7 @@ +5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1 docs/EXECUTION_QUEUE.md +32f4c11ebf8563f3aa500583f3979c1b38d711cc7328a428968118f0375b90b4 tests/golden/M15-03A/completed-gap-tasks.json +edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17 tests/golden/M15-03A/next-task-plan.json +da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d tests/golden/M15-03A/task-catalog.jsonl +ed591788c48c1b089decd2aa187f66728b5cc66a73c2b1c0c46c1a46ec4a0ae0 tests/golden/M15-03A/task-index.json +3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1 tests/golden/M16-GAP-00273/manifest.json +5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8 docs/status/M16-GAP-00273.md diff --git a/tests/golden/corrective/C2-001/receipt-report.json b/tests/golden/corrective/C2-001/receipt-report.json new file mode 100644 index 00000000..6756cc53 --- /dev/null +++ b/tests/golden/corrective/C2-001/receipt-report.json @@ -0,0 +1,225 @@ +{ + "schemaVersion": 1, + "task": "C2-001", + "operation": "CORRECTIVE_COMMAND_REGISTRY_VALIDATION", + "queueMutation": false, + "positive": { + "parity": "MATCH", + "desktop": { + "schemaVersion": 1, + "requestId": "registry-pilot-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 5, + "mainMutation": "CHANGED", + "delta": { + "frame": 12 + }, + "persistence": { + "dirty": true + }, + "error": null + }, + "wasm": { + "schemaVersion": 1, + "requestId": "registry-pilot-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 5, + "mainMutation": "CHANGED", + "delta": { + "frame": 12 + }, + "persistence": { + "dirty": true + }, + "error": null + } + }, + "negative": { + "unknown": { + "parity": "MATCH", + "desktop": { + "schemaVersion": 1, + "requestId": "registry-pilot-001", + "status": "UNSUPPORTED", + "code": "COMMAND_UNSUPPORTED", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_UNSUPPORTED", + "message": "COMMAND_UNSUPPORTED: commandType deleteEverything is not registered" + } + }, + "wasm": { + "schemaVersion": 1, + "requestId": "registry-pilot-001", + "status": "UNSUPPORTED", + "code": "COMMAND_UNSUPPORTED", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_UNSUPPORTED", + "message": "COMMAND_UNSUPPORTED: commandType deleteEverything is not registered" + } + } + }, + "wrongTarget": { + "parity": "MATCH", + "desktop": { + "schemaVersion": 1, + "requestId": "registry-pilot-001", + "status": "BLOCKED", + "code": "INVALID_CONTEXT", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "INVALID_CONTEXT", + "message": "INVALID_CONTEXT: MESH: target is not authorized for this command" + } + }, + "wasm": { + "schemaVersion": 1, + "requestId": "registry-pilot-001", + "status": "BLOCKED", + "code": "INVALID_CONTEXT", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "INVALID_CONTEXT", + "message": "INVALID_CONTEXT: MESH: target is not authorized for this command" + } + } + }, + "wrongAuthorization": { + "parity": "MATCH", + "desktop": { + "schemaVersion": 1, + "requestId": "registry-pilot-001", + "status": "BLOCKED", + "code": "INVALID_CONTEXT", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "INVALID_CONTEXT", + "message": "INVALID_CONTEXT: SCENE: authorization is not allowed for this command" + } + }, + "wasm": { + "schemaVersion": 1, + "requestId": "registry-pilot-001", + "status": "BLOCKED", + "code": "INVALID_CONTEXT", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "INVALID_CONTEXT", + "message": "INVALID_CONTEXT: SCENE: authorization is not allowed for this command" + } + } + }, + "malformed": { + "parity": "MATCH", + "desktop": { + "schemaVersion": 1, + "requestId": "invalid-request", + "status": "MALFORMED", + "code": "COMMAND_MALFORMED", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_MALFORMED", + "message": "COMMAND_MALFORMED: requestId is invalid" + } + }, + "wasm": { + "schemaVersion": 1, + "requestId": "invalid-request", + "status": "MALFORMED", + "code": "COMMAND_MALFORMED", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_MALFORMED", + "message": "COMMAND_MALFORMED: requestId is invalid" + } + } + }, + "readOnly": { + "parity": "MATCH", + "desktop": { + "schemaVersion": 1, + "requestId": "registry-pilot-001", + "status": "BLOCKED", + "code": "INVALID_CONTEXT", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "INVALID_CONTEXT", + "message": "context cannot authorize a Main mutation" + } + }, + "wasm": { + "schemaVersion": 1, + "requestId": "registry-pilot-001", + "status": "BLOCKED", + "code": "INVALID_CONTEXT", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "INVALID_CONTEXT", + "message": "context cannot authorize a Main mutation" + } + } + } + }, + "semantics": [ + "registered command dispatches only after envelope, context, revision, target, and authorization checks", + "unknown, malformed, unauthorized, read-only, and wrong-target cases preserve Main revision", + "desktop and WASM receive the same normalized semantic result while diagnostics remain non-authoritative" + ] +} diff --git a/tests/golden/corrective/C2-001/receipt-report.second.json b/tests/golden/corrective/C2-001/receipt-report.second.json new file mode 100644 index 00000000..6756cc53 --- /dev/null +++ b/tests/golden/corrective/C2-001/receipt-report.second.json @@ -0,0 +1,225 @@ +{ + "schemaVersion": 1, + "task": "C2-001", + "operation": "CORRECTIVE_COMMAND_REGISTRY_VALIDATION", + "queueMutation": false, + "positive": { + "parity": "MATCH", + "desktop": { + "schemaVersion": 1, + "requestId": "registry-pilot-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 5, + "mainMutation": "CHANGED", + "delta": { + "frame": 12 + }, + "persistence": { + "dirty": true + }, + "error": null + }, + "wasm": { + "schemaVersion": 1, + "requestId": "registry-pilot-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 5, + "mainMutation": "CHANGED", + "delta": { + "frame": 12 + }, + "persistence": { + "dirty": true + }, + "error": null + } + }, + "negative": { + "unknown": { + "parity": "MATCH", + "desktop": { + "schemaVersion": 1, + "requestId": "registry-pilot-001", + "status": "UNSUPPORTED", + "code": "COMMAND_UNSUPPORTED", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_UNSUPPORTED", + "message": "COMMAND_UNSUPPORTED: commandType deleteEverything is not registered" + } + }, + "wasm": { + "schemaVersion": 1, + "requestId": "registry-pilot-001", + "status": "UNSUPPORTED", + "code": "COMMAND_UNSUPPORTED", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_UNSUPPORTED", + "message": "COMMAND_UNSUPPORTED: commandType deleteEverything is not registered" + } + } + }, + "wrongTarget": { + "parity": "MATCH", + "desktop": { + "schemaVersion": 1, + "requestId": "registry-pilot-001", + "status": "BLOCKED", + "code": "INVALID_CONTEXT", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "INVALID_CONTEXT", + "message": "INVALID_CONTEXT: MESH: target is not authorized for this command" + } + }, + "wasm": { + "schemaVersion": 1, + "requestId": "registry-pilot-001", + "status": "BLOCKED", + "code": "INVALID_CONTEXT", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "INVALID_CONTEXT", + "message": "INVALID_CONTEXT: MESH: target is not authorized for this command" + } + } + }, + "wrongAuthorization": { + "parity": "MATCH", + "desktop": { + "schemaVersion": 1, + "requestId": "registry-pilot-001", + "status": "BLOCKED", + "code": "INVALID_CONTEXT", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "INVALID_CONTEXT", + "message": "INVALID_CONTEXT: SCENE: authorization is not allowed for this command" + } + }, + "wasm": { + "schemaVersion": 1, + "requestId": "registry-pilot-001", + "status": "BLOCKED", + "code": "INVALID_CONTEXT", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "INVALID_CONTEXT", + "message": "INVALID_CONTEXT: SCENE: authorization is not allowed for this command" + } + } + }, + "malformed": { + "parity": "MATCH", + "desktop": { + "schemaVersion": 1, + "requestId": "invalid-request", + "status": "MALFORMED", + "code": "COMMAND_MALFORMED", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_MALFORMED", + "message": "COMMAND_MALFORMED: requestId is invalid" + } + }, + "wasm": { + "schemaVersion": 1, + "requestId": "invalid-request", + "status": "MALFORMED", + "code": "COMMAND_MALFORMED", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_MALFORMED", + "message": "COMMAND_MALFORMED: requestId is invalid" + } + } + }, + "readOnly": { + "parity": "MATCH", + "desktop": { + "schemaVersion": 1, + "requestId": "registry-pilot-001", + "status": "BLOCKED", + "code": "INVALID_CONTEXT", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "INVALID_CONTEXT", + "message": "context cannot authorize a Main mutation" + } + }, + "wasm": { + "schemaVersion": 1, + "requestId": "registry-pilot-001", + "status": "BLOCKED", + "code": "INVALID_CONTEXT", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "INVALID_CONTEXT", + "message": "context cannot authorize a Main mutation" + } + } + } + }, + "semantics": [ + "registered command dispatches only after envelope, context, revision, target, and authorization checks", + "unknown, malformed, unauthorized, read-only, and wrong-target cases preserve Main revision", + "desktop and WASM receive the same normalized semantic result while diagnostics remain non-authoritative" + ] +} diff --git a/tests/golden/corrective/C2-001/source-hashes.json b/tests/golden/corrective/C2-001/source-hashes.json new file mode 100644 index 00000000..8920b43a --- /dev/null +++ b/tests/golden/corrective/C2-001/source-hashes.json @@ -0,0 +1,13 @@ +{ + "sourceHashes": { + "tests/golden/corrective/C1-002/command-schema.json": "caf5794bd20406f71a02eaabaa44eb6b4387831e4b379af69e230572e7ccf19d", + "tests/golden/corrective/C1-002/context-schema.json": "35d7a1021c629bf576651efe9e9181bc884f197aa2283e7d5089c6864433a744", + "tests/golden/corrective/C1-002/result-schema.json": "430d3e8568ecf025b32563fbba9be09b8e7ee7848c1077baaafb94904ffae9b6", + "tests/golden/corrective/C1-002/error-status-table.json": "c2a20a1d565c012b62f4dc611b7139a0473394111cc4220a556921071856b13d", + "tests/golden/corrective/C1-003/manifest.json": "69b7babd164df69ccac76e4ecc1459f2bd060557c978a9065728adc62403e01b", + "web/protocol/corrective-case-runner.ts": "fbfc9f72cce84acc773818993b6630d73df1ce6cab7781f172d871b42b8bf70d", + "web/protocol/corrective-command-registry.ts": "cb0553aac346d34d3c2c12501d2bf681c6edd36c7d6ce5de43c6178b42296897", + "tests/golden/corrective/C2-001/command-registry.test.mjs": "1a726e6cdf083abf42dfc519810c4e1501d9d4f4c9c1ac73ff1df08a62414609", + "tests/golden/corrective/C2-001/deterministic-registry-report.mjs": "53bc876d4d38576a62991dd19ce64c1248141b7993f1569791787812d94513d5" + } +} diff --git a/tests/golden/corrective/C2-002/atomic-main-transaction.test.mjs b/tests/golden/corrective/C2-002/atomic-main-transaction.test.mjs new file mode 100644 index 00000000..ee847c92 --- /dev/null +++ b/tests/golden/corrective/C2-002/atomic-main-transaction.test.mjs @@ -0,0 +1,106 @@ +import assert from "node:assert/strict"; +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import test from "node:test"; +import { fileURLToPath, pathToFileURL } from "node:url"; +import ts from "../../../../web/node_modules/typescript/lib/typescript.js"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../../.."); +const temporary = fs.mkdtempSync(path.join(os.tmpdir(), "corrective-main-transaction-")); +const compile = (source, output, importReplacements = []) => { + const sourcePath = path.join(root, source); + const result = ts.transpileModule(fs.readFileSync(sourcePath, "utf8"), { + compilerOptions: { module: ts.ModuleKind.ES2022, target: ts.ScriptTarget.ES2022 }, + fileName: sourcePath, + reportDiagnostics: true, + }); + assert.deepEqual(result.diagnostics, []); + let outputText = result.outputText; + for (const [from, to] of importReplacements) outputText = outputText.replaceAll(from, to); + fs.writeFileSync(output, outputText); +}; +try { + const runnerOutput = path.join(temporary, "corrective-case-runner.mjs"); + const registryOutput = path.join(temporary, "corrective-command-registry.mjs"); + const transactionOutput = path.join(temporary, "corrective-main-transaction.mjs"); + compile("web/protocol/corrective-case-runner.ts", runnerOutput); + compile("web/protocol/corrective-command-registry.ts", registryOutput, [["from \"./corrective-case-runner\"", "from \"./corrective-case-runner.mjs\""]]); + compile("web/protocol/corrective-main-transaction.ts", transactionOutput, [["from \"./corrective-case-runner\"", "from \"./corrective-case-runner.mjs\""]]); + const { CorrectiveCaseRunnerError } = await import(pathToFileURL(runnerOutput)); + const { CorrectiveCommandRegistry } = await import(pathToFileURL(registryOutput)); + const { InMemoryMainStore, runAtomicMutation } = await import(pathToFileURL(transactionOutput)); + + const command = (overrides = {}) => ({ + schemaVersion: 1, + requestId: "atomic-001", + commandType: "setFrame", + baseRevision: 4, + context: { + mainId: "main:test", + targetKind: "SCENE", + targetId: "scene:Scene", + editMode: "EDITABLE", + authorization: "USER_EDIT", + source: { kind: "LOCAL", sha256: "a".repeat(64) }, + }, + payload: { frame: 12 }, + ...overrides, + }); + const store = () => new InMemoryMainStore({ frame: 1 }, 4, false, (value) => ({ ...value })); + const registryFor = (main, mutate) => new CorrectiveCommandRegistry().register({ + commandType: "setFrame", + targetKinds: ["SCENE"], + authorizations: ["USER_EDIT"], + execute: (request) => runAtomicMutation(main, request, mutate), + }); + + test("successful mutation commits draft, revision, and dirty state once", async () => { + const main = store(); + const registry = registryFor(main, (draft, request) => { draft.frame = request.payload.frame; return { delta: { frame: draft.frame } }; }); + const result = await registry.dispatch("DESKTOP", { command: command(), mainRevision: 4 }); + assert.equal(result.result.status, "FINISHED"); + assert.deepEqual(main.snapshot(), { value: { frame: 12 }, revision: 5, dirty: true }); + }); + + test("adapter cancellation rolls back a partially prepared draft", async () => { + const main = store(); + const registry = registryFor(main, (draft) => { draft.frame = 99; throw new CorrectiveCaseRunnerError("CANCELLED", "user cancelled"); }); + const result = await registry.dispatch("WASM", { command: command(), mainRevision: 4 }); + assert.equal(result.result.status, "CANCELLED"); + assert.equal(result.result.mainRevisionAfter, 4); + assert.deepEqual(main.snapshot(), { value: { frame: 1 }, revision: 4, dirty: false }); + }); + + test("malformed outcome rolls back without publishing a revision", async () => { + const main = store(); + const registry = registryFor(main, (draft) => { draft.frame = 88; return {}; }); + const result = await registry.dispatch("DESKTOP", { command: command(), mainRevision: 4 }); + assert.equal(result.result.status, "MALFORMED"); + assert.equal(result.result.code, "COMMAND_MALFORMED"); + assert.deepEqual(main.snapshot(), { value: { frame: 1 }, revision: 4, dirty: false }); + }); + + test("stale revision is rejected before transaction or adapter execution", async () => { + const main = store(); + let calls = 0; + const registry = registryFor(main, () => { calls++; return { delta: { frame: 12 } }; }); + const result = await registry.dispatch("DESKTOP", { command: command({ baseRevision: 3 }), mainRevision: 4 }); + assert.equal(result.result.code, "REVISION_CONFLICT"); + assert.equal(calls, 0); + assert.deepEqual(main.snapshot(), { value: { frame: 1 }, revision: 4, dirty: false }); + }); + + test("desktop and WASM transactions expose matching committed receipts", async () => { + const desktopMain = store(); + const wasmMain = store(); + const mutate = (draft, request) => { draft.frame = request.payload.frame; return { delta: { frame: draft.frame }, persistence: { dirty: true } }; }; + const desktop = await registryFor(desktopMain, mutate).dispatch("DESKTOP", { command: command(), mainRevision: 4 }); + const wasm = await registryFor(wasmMain, mutate).dispatch("WASM", { command: command(), mainRevision: 4 }); + assert.equal(desktop.result.mainRevisionAfter, 5); + assert.deepEqual(desktop.result, wasm.result); + assert.deepEqual(desktopMain.snapshot(), wasmMain.snapshot()); + }); +} finally { + fs.rmSync(temporary, { recursive: true, force: true }); +} diff --git a/tests/golden/corrective/C2-002/command-exit-codes.json b/tests/golden/corrective/C2-002/command-exit-codes.json new file mode 100644 index 00000000..20755ee3 --- /dev/null +++ b/tests/golden/corrective/C2-002/command-exit-codes.json @@ -0,0 +1,12 @@ +{ + "focusedTest": 0, + "receiptGeneration": 0, + "determinism": 0, + "protectedHashCheck": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0 +} diff --git a/tests/golden/corrective/C2-002/deterministic-transaction-report.mjs b/tests/golden/corrective/C2-002/deterministic-transaction-report.mjs new file mode 100644 index 00000000..c7dae1e9 --- /dev/null +++ b/tests/golden/corrective/C2-002/deterministic-transaction-report.mjs @@ -0,0 +1,66 @@ +import assert from "node:assert/strict"; +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import { fileURLToPath, pathToFileURL } from "node:url"; +import ts from "../../../../web/node_modules/typescript/lib/typescript.js"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../../.."); +const temporary = fs.mkdtempSync(path.join(os.tmpdir(), "corrective-transaction-report-")); +try { + const files = { + runner: path.join(temporary, "corrective-case-runner.mjs"), + registry: path.join(temporary, "corrective-command-registry.mjs"), + transaction: path.join(temporary, "corrective-main-transaction.mjs"), + }; + const compile = (source, output, replacements = []) => { + const sourcePath = path.join(root, source); + const result = ts.transpileModule(fs.readFileSync(sourcePath, "utf8"), { + compilerOptions: { module: ts.ModuleKind.ES2022, target: ts.ScriptTarget.ES2022 }, + fileName: sourcePath, + reportDiagnostics: true, + }); + assert.deepEqual(result.diagnostics, []); + let text = result.outputText; + for (const [from, to] of replacements) text = text.replaceAll(from, to); + fs.writeFileSync(output, text); + }; + compile("web/protocol/corrective-case-runner.ts", files.runner); + compile("web/protocol/corrective-command-registry.ts", files.registry, [["from \"./corrective-case-runner\"", "from \"./corrective-case-runner.mjs\""]]); + compile("web/protocol/corrective-main-transaction.ts", files.transaction, [["from \"./corrective-case-runner\"", "from \"./corrective-case-runner.mjs\""]]); + const runner = await import(pathToFileURL(files.runner)); + const { CorrectiveCommandRegistry } = await import(pathToFileURL(files.registry)); + const { InMemoryMainStore, runAtomicMutation } = await import(pathToFileURL(files.transaction)); + const context = { mainId: "main:pilot", targetKind: "SCENE", targetId: "scene:Scene", editMode: "EDITABLE", authorization: "USER_EDIT", source: { kind: "LOCAL", sha256: "a".repeat(64) } }; + const command = (overrides = {}) => ({ schemaVersion: 1, requestId: "transaction-pilot-001", commandType: "setFrame", baseRevision: 4, context, payload: { frame: 12 }, ...overrides }); + const makeStore = () => new InMemoryMainStore({ frame: 1 }, 4, false, (value) => ({ ...value })); + const finishedRegistry = (store, mutate) => new CorrectiveCommandRegistry().register({ commandType: "setFrame", targetKinds: ["SCENE"], authorizations: ["USER_EDIT"], execute: (request) => runAtomicMutation(store, request, mutate) }); + const mutate = (draft, request) => { draft.frame = request.payload.frame; return { delta: { frame: draft.frame }, persistence: { dirty: true } }; }; + const positiveDesktopStore = makeStore(); + const positiveWasmStore = makeStore(); + const positiveDesktop = await finishedRegistry(positiveDesktopStore, mutate).dispatch("DESKTOP", { command: command(), mainRevision: 4 }); + const positiveWasm = await finishedRegistry(positiveWasmStore, mutate).dispatch("WASM", { command: command(), mainRevision: 4 }); + const cancelledStore = makeStore(); + const cancelled = await new CorrectiveCommandRegistry().register({ commandType: "setFrame", targetKinds: ["SCENE"], authorizations: ["USER_EDIT"], execute: (request) => runAtomicMutation(cancelledStore, request, (draft) => { draft.frame = 99; throw new runner.CorrectiveCaseRunnerError("CANCELLED", "cancelled adapter"); }) }).dispatch("WASM", { command: command(), mainRevision: 4 }); + const malformedStore = makeStore(); + const malformed = await new CorrectiveCommandRegistry().register({ commandType: "setFrame", targetKinds: ["SCENE"], authorizations: ["USER_EDIT"], execute: (request) => runAtomicMutation(malformedStore, request, (draft) => { draft.frame = 88; return {}; }) }).dispatch("DESKTOP", { command: command(), mainRevision: 4 }); + const staleStore = makeStore(); + let staleCalls = 0; + const stale = await new CorrectiveCommandRegistry().register({ commandType: "setFrame", targetKinds: ["SCENE"], authorizations: ["USER_EDIT"], execute: (request) => { staleCalls++; return runAtomicMutation(staleStore, request, mutate); } }).dispatch("DESKTOP", { command: command({ baseRevision: 3 }), mainRevision: 4 }); + assert.equal(runner.compareReceipts(positiveDesktop, positiveWasm).parity, "MATCH"); + assert.equal(positiveDesktop.result.mainRevisionAfter, 5); + for (const failure of [cancelled, malformed, stale]) assert.equal(failure.result.mainRevisionAfter, 4); + assert.equal(staleCalls, 0); + process.stdout.write(`${JSON.stringify({ + schemaVersion: 1, + task: "C2-002", + operation: "CORRECTIVE_ATOMIC_MAIN_MUTATION", + queueMutation: false, + positive: { parity: runner.compareReceipts(positiveDesktop, positiveWasm).parity, desktop: positiveDesktop.result, wasm: positiveWasm.result }, + negative: { cancelled: cancelled.result, malformed: malformed.result, staleRevision: stale.result }, + postState: { positiveDesktop: positiveDesktopStore.snapshot(), positiveWasm: positiveWasmStore.snapshot(), cancelled: cancelledStore.snapshot(), malformed: malformedStore.snapshot(), staleRevision: staleStore.snapshot() }, + semantics: ["draft changes commit exactly once with revision+1 and dirty=true", "adapter failure and malformed outcomes restore value, revision, and dirty state", "stale revision is rejected before transaction execution"], + }, null, 2)}\n`); +} finally { + fs.rmSync(temporary, { recursive: true, force: true }); +} diff --git a/tests/golden/corrective/C2-002/handoff.json b/tests/golden/corrective/C2-002/handoff.json new file mode 100644 index 00000000..e1dba648 --- /dev/null +++ b/tests/golden/corrective/C2-002/handoff.json @@ -0,0 +1,125 @@ +{ + "schemaVersion": 1, + "task": "C2-002", + "status": "done", + "gate": "G2", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C2-002", + "artifactCount": 18, + "artifacts": [ + { + "path": "tests/golden/corrective/C2-002/atomic-main-transaction.test.mjs", + "sha256": "60f97114e15eba52f4a0e9904b5090b15400bd01b821f8938e4918de20cc6bbe", + "bytes": 5552 + }, + { + "path": "tests/golden/corrective/C2-002/check-context-governance.log", + "sha256": "7ed574f956f0255482a15f63faedc657fc7eb0fa643d282a430f27a207b5bf8d", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C2-002/check-corrective-plan.log", + "sha256": "fc89be360866ae2303648983389a3d4a0cd3f16bf71e5a225919b5a6d09fb8c6", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C2-002/check-task-context.log", + "sha256": "cf9fb3f108cb7febf3d6d17543cb1abf9356174eb34d379652dd288aca6db2d7", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C2-002/command-exit-codes.json", + "sha256": "1d42c9e0aee854c6a4ae11816a276537c590a45bc0c1ad2f725a1fc59beb15e4", + "bytes": 226 + }, + { + "path": "tests/golden/corrective/C2-002/determinism.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C2-002/deterministic-transaction-report.mjs", + "sha256": "3f4e19b990249ada596ed854fbb34cbd69a437151e21c9431c659cb148f19226", + "bytes": 5476 + }, + { + "path": "tests/golden/corrective/C2-002/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C2-002/focused-test.log", + "sha256": "0cfca18905bfd8238e34c3988035f2db4360262e569bed3d3fc10c460ec3bd3c", + "bytes": 1019 + }, + { + "path": "tests/golden/corrective/C2-002/protected-hash-check.log", + "sha256": "cbfa11f4e820313bb186633cd646ed9a2d7a148e959e95a1ba88a369f9eb2644", + "bytes": 27 + }, + { + "path": "tests/golden/corrective/C2-002/protected-hashes-after.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C2-002/protected-hashes-before.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C2-002/receipt-gate.log", + "sha256": "37757868e9d515b682b2f1f67e6245f4be7e3db39c17f41344dd39ea1cd5975b", + "bytes": 17 + }, + { + "path": "tests/golden/corrective/C2-002/receipt-report.json", + "sha256": "1c37980a09ddb231efb0295d6e581f4b02dae1b8fe496c53c2cca927767857a2", + "bytes": 3132 + }, + { + "path": "tests/golden/corrective/C2-002/receipt-report.second.json", + "sha256": "1c37980a09ddb231efb0295d6e581f4b02dae1b8fe496c53c2cca927767857a2", + "bytes": 3132 + }, + { + "path": "tests/golden/corrective/C2-002/source-hashes.json", + "sha256": "84697d943c6fa46635588970b793ac80ead46ec9048ae5655e6fb7bb0232cf3d", + "bytes": 1156 + }, + { + "path": "tests/golden/corrective/C2-002/test-context-governance.log", + "sha256": "12af6e719ed70065997c44f4a2afd5e57b414af1ceca14eb50e3125f1a39f782", + "bytes": 2582 + }, + { + "path": "tests/golden/corrective/C2-002/typecheck.log", + "sha256": "f90c14a9694ed7029129a343fa5cc8672e4a59a5fe4b34e7c3098db9c5c5bd1a", + "bytes": 76 + } + ], + "sourceHashes": { + "tests/golden/corrective/C1-002/result-schema.json": "430d3e8568ecf025b32563fbba9be09b8e7ee7848c1077baaafb94904ffae9b6", + "tests/golden/corrective/C1-002/error-status-table.json": "c2a20a1d565c012b62f4dc611b7139a0473394111cc4220a556921071856b13d", + "tests/golden/corrective/C1-003/manifest.json": "69b7babd164df69ccac76e4ecc1459f2bd060557c978a9065728adc62403e01b", + "tests/golden/corrective/C2-001/manifest.json": "3bb798945c58ef73c9d7d51b2e9ff5cdd706675002905de49c40ab7ce517e197", + "web/protocol/corrective-case-runner.ts": "fbfc9f72cce84acc773818993b6630d73df1ce6cab7781f172d871b42b8bf70d", + "web/protocol/corrective-command-registry.ts": "cb0553aac346d34d3c2c12501d2bf681c6edd36c7d6ce5de43c6178b42296897", + "web/protocol/corrective-main-transaction.ts": "40567ca8843863d0c1751d06b819402be53f13826f5e54abc29530b8b02308e4", + "tests/golden/corrective/C2-002/atomic-main-transaction.test.mjs": "60f97114e15eba52f4a0e9904b5090b15400bd01b821f8938e4918de20cc6bbe", + "tests/golden/corrective/C2-002/deterministic-transaction-report.mjs": "3f4e19b990249ada596ed854fbb34cbd69a437151e21c9431c659cb148f19226" + }, + "commandExitCodes": { + "focusedTest": 0, + "receiptGeneration": 0, + "determinism": 0, + "protectedHashCheck": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0 + }, + "nextCorrectiveTask": "C2-003" +} diff --git a/tests/golden/corrective/C2-002/manifest.json b/tests/golden/corrective/C2-002/manifest.json new file mode 100644 index 00000000..e1dba648 --- /dev/null +++ b/tests/golden/corrective/C2-002/manifest.json @@ -0,0 +1,125 @@ +{ + "schemaVersion": 1, + "task": "C2-002", + "status": "done", + "gate": "G2", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C2-002", + "artifactCount": 18, + "artifacts": [ + { + "path": "tests/golden/corrective/C2-002/atomic-main-transaction.test.mjs", + "sha256": "60f97114e15eba52f4a0e9904b5090b15400bd01b821f8938e4918de20cc6bbe", + "bytes": 5552 + }, + { + "path": "tests/golden/corrective/C2-002/check-context-governance.log", + "sha256": "7ed574f956f0255482a15f63faedc657fc7eb0fa643d282a430f27a207b5bf8d", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C2-002/check-corrective-plan.log", + "sha256": "fc89be360866ae2303648983389a3d4a0cd3f16bf71e5a225919b5a6d09fb8c6", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C2-002/check-task-context.log", + "sha256": "cf9fb3f108cb7febf3d6d17543cb1abf9356174eb34d379652dd288aca6db2d7", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C2-002/command-exit-codes.json", + "sha256": "1d42c9e0aee854c6a4ae11816a276537c590a45bc0c1ad2f725a1fc59beb15e4", + "bytes": 226 + }, + { + "path": "tests/golden/corrective/C2-002/determinism.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C2-002/deterministic-transaction-report.mjs", + "sha256": "3f4e19b990249ada596ed854fbb34cbd69a437151e21c9431c659cb148f19226", + "bytes": 5476 + }, + { + "path": "tests/golden/corrective/C2-002/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C2-002/focused-test.log", + "sha256": "0cfca18905bfd8238e34c3988035f2db4360262e569bed3d3fc10c460ec3bd3c", + "bytes": 1019 + }, + { + "path": "tests/golden/corrective/C2-002/protected-hash-check.log", + "sha256": "cbfa11f4e820313bb186633cd646ed9a2d7a148e959e95a1ba88a369f9eb2644", + "bytes": 27 + }, + { + "path": "tests/golden/corrective/C2-002/protected-hashes-after.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C2-002/protected-hashes-before.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C2-002/receipt-gate.log", + "sha256": "37757868e9d515b682b2f1f67e6245f4be7e3db39c17f41344dd39ea1cd5975b", + "bytes": 17 + }, + { + "path": "tests/golden/corrective/C2-002/receipt-report.json", + "sha256": "1c37980a09ddb231efb0295d6e581f4b02dae1b8fe496c53c2cca927767857a2", + "bytes": 3132 + }, + { + "path": "tests/golden/corrective/C2-002/receipt-report.second.json", + "sha256": "1c37980a09ddb231efb0295d6e581f4b02dae1b8fe496c53c2cca927767857a2", + "bytes": 3132 + }, + { + "path": "tests/golden/corrective/C2-002/source-hashes.json", + "sha256": "84697d943c6fa46635588970b793ac80ead46ec9048ae5655e6fb7bb0232cf3d", + "bytes": 1156 + }, + { + "path": "tests/golden/corrective/C2-002/test-context-governance.log", + "sha256": "12af6e719ed70065997c44f4a2afd5e57b414af1ceca14eb50e3125f1a39f782", + "bytes": 2582 + }, + { + "path": "tests/golden/corrective/C2-002/typecheck.log", + "sha256": "f90c14a9694ed7029129a343fa5cc8672e4a59a5fe4b34e7c3098db9c5c5bd1a", + "bytes": 76 + } + ], + "sourceHashes": { + "tests/golden/corrective/C1-002/result-schema.json": "430d3e8568ecf025b32563fbba9be09b8e7ee7848c1077baaafb94904ffae9b6", + "tests/golden/corrective/C1-002/error-status-table.json": "c2a20a1d565c012b62f4dc611b7139a0473394111cc4220a556921071856b13d", + "tests/golden/corrective/C1-003/manifest.json": "69b7babd164df69ccac76e4ecc1459f2bd060557c978a9065728adc62403e01b", + "tests/golden/corrective/C2-001/manifest.json": "3bb798945c58ef73c9d7d51b2e9ff5cdd706675002905de49c40ab7ce517e197", + "web/protocol/corrective-case-runner.ts": "fbfc9f72cce84acc773818993b6630d73df1ce6cab7781f172d871b42b8bf70d", + "web/protocol/corrective-command-registry.ts": "cb0553aac346d34d3c2c12501d2bf681c6edd36c7d6ce5de43c6178b42296897", + "web/protocol/corrective-main-transaction.ts": "40567ca8843863d0c1751d06b819402be53f13826f5e54abc29530b8b02308e4", + "tests/golden/corrective/C2-002/atomic-main-transaction.test.mjs": "60f97114e15eba52f4a0e9904b5090b15400bd01b821f8938e4918de20cc6bbe", + "tests/golden/corrective/C2-002/deterministic-transaction-report.mjs": "3f4e19b990249ada596ed854fbb34cbd69a437151e21c9431c659cb148f19226" + }, + "commandExitCodes": { + "focusedTest": 0, + "receiptGeneration": 0, + "determinism": 0, + "protectedHashCheck": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0 + }, + "nextCorrectiveTask": "C2-003" +} diff --git a/tests/golden/corrective/C2-002/protected-hashes-after.txt b/tests/golden/corrective/C2-002/protected-hashes-after.txt new file mode 100644 index 00000000..a0d2c8ba --- /dev/null +++ b/tests/golden/corrective/C2-002/protected-hashes-after.txt @@ -0,0 +1,7 @@ +5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1 docs/EXECUTION_QUEUE.md +32f4c11ebf8563f3aa500583f3979c1b38d711cc7328a428968118f0375b90b4 tests/golden/M15-03A/completed-gap-tasks.json +edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17 tests/golden/M15-03A/next-task-plan.json +da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d tests/golden/M15-03A/task-catalog.jsonl +ed591788c48c1b089decd2aa187f66728b5cc66a73c2b1c0c46c1a46ec4a0ae0 tests/golden/M15-03A/task-index.json +3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1 tests/golden/M16-GAP-00273/manifest.json +5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8 docs/status/M16-GAP-00273.md diff --git a/tests/golden/corrective/C2-002/protected-hashes-before.txt b/tests/golden/corrective/C2-002/protected-hashes-before.txt new file mode 100644 index 00000000..a0d2c8ba --- /dev/null +++ b/tests/golden/corrective/C2-002/protected-hashes-before.txt @@ -0,0 +1,7 @@ +5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1 docs/EXECUTION_QUEUE.md +32f4c11ebf8563f3aa500583f3979c1b38d711cc7328a428968118f0375b90b4 tests/golden/M15-03A/completed-gap-tasks.json +edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17 tests/golden/M15-03A/next-task-plan.json +da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d tests/golden/M15-03A/task-catalog.jsonl +ed591788c48c1b089decd2aa187f66728b5cc66a73c2b1c0c46c1a46ec4a0ae0 tests/golden/M15-03A/task-index.json +3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1 tests/golden/M16-GAP-00273/manifest.json +5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8 docs/status/M16-GAP-00273.md diff --git a/tests/golden/corrective/C2-002/receipt-report.json b/tests/golden/corrective/C2-002/receipt-report.json new file mode 100644 index 00000000..71c62125 --- /dev/null +++ b/tests/golden/corrective/C2-002/receipt-report.json @@ -0,0 +1,135 @@ +{ + "schemaVersion": 1, + "task": "C2-002", + "operation": "CORRECTIVE_ATOMIC_MAIN_MUTATION", + "queueMutation": false, + "positive": { + "parity": "MATCH", + "desktop": { + "schemaVersion": 1, + "requestId": "transaction-pilot-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 5, + "mainMutation": "CHANGED", + "delta": { + "frame": 12 + }, + "persistence": { + "dirty": true + }, + "error": null + }, + "wasm": { + "schemaVersion": 1, + "requestId": "transaction-pilot-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 5, + "mainMutation": "CHANGED", + "delta": { + "frame": 12 + }, + "persistence": { + "dirty": true + }, + "error": null + } + }, + "negative": { + "cancelled": { + "schemaVersion": 1, + "requestId": "transaction-pilot-001", + "status": "CANCELLED", + "code": "CANCELLED", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "CANCELLED", + "message": "CANCELLED: cancelled adapter" + } + }, + "malformed": { + "schemaVersion": 1, + "requestId": "transaction-pilot-001", + "status": "MALFORMED", + "code": "COMMAND_MALFORMED", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_MALFORMED", + "message": "COMMAND_MALFORMED: atomic mutation outcome is invalid" + } + }, + "staleRevision": { + "schemaVersion": 1, + "requestId": "transaction-pilot-001", + "status": "BLOCKED", + "code": "REVISION_CONFLICT", + "baseRevision": 3, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "REVISION_CONFLICT", + "message": "base revision does not match current Main" + } + } + }, + "postState": { + "positiveDesktop": { + "value": { + "frame": 12 + }, + "revision": 5, + "dirty": true + }, + "positiveWasm": { + "value": { + "frame": 12 + }, + "revision": 5, + "dirty": true + }, + "cancelled": { + "value": { + "frame": 1 + }, + "revision": 4, + "dirty": false + }, + "malformed": { + "value": { + "frame": 1 + }, + "revision": 4, + "dirty": false + }, + "staleRevision": { + "value": { + "frame": 1 + }, + "revision": 4, + "dirty": false + } + }, + "semantics": [ + "draft changes commit exactly once with revision+1 and dirty=true", + "adapter failure and malformed outcomes restore value, revision, and dirty state", + "stale revision is rejected before transaction execution" + ] +} diff --git a/tests/golden/corrective/C2-002/receipt-report.second.json b/tests/golden/corrective/C2-002/receipt-report.second.json new file mode 100644 index 00000000..71c62125 --- /dev/null +++ b/tests/golden/corrective/C2-002/receipt-report.second.json @@ -0,0 +1,135 @@ +{ + "schemaVersion": 1, + "task": "C2-002", + "operation": "CORRECTIVE_ATOMIC_MAIN_MUTATION", + "queueMutation": false, + "positive": { + "parity": "MATCH", + "desktop": { + "schemaVersion": 1, + "requestId": "transaction-pilot-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 5, + "mainMutation": "CHANGED", + "delta": { + "frame": 12 + }, + "persistence": { + "dirty": true + }, + "error": null + }, + "wasm": { + "schemaVersion": 1, + "requestId": "transaction-pilot-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 5, + "mainMutation": "CHANGED", + "delta": { + "frame": 12 + }, + "persistence": { + "dirty": true + }, + "error": null + } + }, + "negative": { + "cancelled": { + "schemaVersion": 1, + "requestId": "transaction-pilot-001", + "status": "CANCELLED", + "code": "CANCELLED", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "CANCELLED", + "message": "CANCELLED: cancelled adapter" + } + }, + "malformed": { + "schemaVersion": 1, + "requestId": "transaction-pilot-001", + "status": "MALFORMED", + "code": "COMMAND_MALFORMED", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_MALFORMED", + "message": "COMMAND_MALFORMED: atomic mutation outcome is invalid" + } + }, + "staleRevision": { + "schemaVersion": 1, + "requestId": "transaction-pilot-001", + "status": "BLOCKED", + "code": "REVISION_CONFLICT", + "baseRevision": 3, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "REVISION_CONFLICT", + "message": "base revision does not match current Main" + } + } + }, + "postState": { + "positiveDesktop": { + "value": { + "frame": 12 + }, + "revision": 5, + "dirty": true + }, + "positiveWasm": { + "value": { + "frame": 12 + }, + "revision": 5, + "dirty": true + }, + "cancelled": { + "value": { + "frame": 1 + }, + "revision": 4, + "dirty": false + }, + "malformed": { + "value": { + "frame": 1 + }, + "revision": 4, + "dirty": false + }, + "staleRevision": { + "value": { + "frame": 1 + }, + "revision": 4, + "dirty": false + } + }, + "semantics": [ + "draft changes commit exactly once with revision+1 and dirty=true", + "adapter failure and malformed outcomes restore value, revision, and dirty state", + "stale revision is rejected before transaction execution" + ] +} diff --git a/tests/golden/corrective/C2-002/source-hashes.json b/tests/golden/corrective/C2-002/source-hashes.json new file mode 100644 index 00000000..1237b31f --- /dev/null +++ b/tests/golden/corrective/C2-002/source-hashes.json @@ -0,0 +1,13 @@ +{ + "sourceHashes": { + "tests/golden/corrective/C1-002/result-schema.json": "430d3e8568ecf025b32563fbba9be09b8e7ee7848c1077baaafb94904ffae9b6", + "tests/golden/corrective/C1-002/error-status-table.json": "c2a20a1d565c012b62f4dc611b7139a0473394111cc4220a556921071856b13d", + "tests/golden/corrective/C1-003/manifest.json": "69b7babd164df69ccac76e4ecc1459f2bd060557c978a9065728adc62403e01b", + "tests/golden/corrective/C2-001/manifest.json": "3bb798945c58ef73c9d7d51b2e9ff5cdd706675002905de49c40ab7ce517e197", + "web/protocol/corrective-case-runner.ts": "fbfc9f72cce84acc773818993b6630d73df1ce6cab7781f172d871b42b8bf70d", + "web/protocol/corrective-command-registry.ts": "cb0553aac346d34d3c2c12501d2bf681c6edd36c7d6ce5de43c6178b42296897", + "web/protocol/corrective-main-transaction.ts": "40567ca8843863d0c1751d06b819402be53f13826f5e54abc29530b8b02308e4", + "tests/golden/corrective/C2-002/atomic-main-transaction.test.mjs": "60f97114e15eba52f4a0e9904b5090b15400bd01b821f8938e4918de20cc6bbe", + "tests/golden/corrective/C2-002/deterministic-transaction-report.mjs": "3f4e19b990249ada596ed854fbb34cbd69a437151e21c9431c659cb148f19226" + } +} diff --git a/tests/golden/corrective/C2-003/command-exit-codes.json b/tests/golden/corrective/C2-003/command-exit-codes.json new file mode 100644 index 00000000..20755ee3 --- /dev/null +++ b/tests/golden/corrective/C2-003/command-exit-codes.json @@ -0,0 +1,12 @@ +{ + "focusedTest": 0, + "receiptGeneration": 0, + "determinism": 0, + "protectedHashCheck": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0 +} diff --git a/tests/golden/corrective/C2-003/deterministic-history-report.mjs b/tests/golden/corrective/C2-003/deterministic-history-report.mjs new file mode 100644 index 00000000..f103039a --- /dev/null +++ b/tests/golden/corrective/C2-003/deterministic-history-report.mjs @@ -0,0 +1,31 @@ +import assert from "node:assert/strict"; +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import { fileURLToPath, pathToFileURL } from "node:url"; +import ts from "../../../../web/node_modules/typescript/lib/typescript.js"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../../.."); +const temporary = fs.mkdtempSync(path.join(os.tmpdir(), "corrective-history-report-")); +try { + const runner = path.join(temporary, "corrective-case-runner.mjs"); + const main = path.join(temporary, "corrective-main-transaction.mjs"); + const history = path.join(temporary, "corrective-history-store.mjs"); + const compile = (source, output, replacements = []) => { + const sourcePath = path.join(root, source); + const result = ts.transpileModule(fs.readFileSync(sourcePath, "utf8"), { compilerOptions: { module: ts.ModuleKind.ES2022, target: ts.ScriptTarget.ES2022 }, fileName: sourcePath, reportDiagnostics: true }); + assert.deepEqual(result.diagnostics, []); + let text = result.outputText; + for (const [from, to] of replacements) text = text.replaceAll(from, to); + fs.writeFileSync(output, text); + }; + compile("web/protocol/corrective-case-runner.ts", runner); + compile("web/protocol/corrective-main-transaction.ts", main, [["from \"./corrective-case-runner\"", "from \"./corrective-case-runner.mjs\""]]); + compile("web/protocol/corrective-history-store.ts", history, [["from \"./corrective-main-transaction\"", "from \"./corrective-main-transaction.mjs\""]]); + const { CorrectiveHistoryStore } = await import(pathToFileURL(history)); + const make = () => new CorrectiveHistoryStore({ frame: 1 }, 4, false, (value) => ({ ...value }), 2); + const desktop = make(); const wasm = make(); + for (const store of [desktop, wasm]) { store.commit({ frame: 12 }, 5, true); store.save(); store.commit({ frame: 24 }, 6, true); store.undo(); store.redo(); store.undo(); store.reopen(); } + assert.deepEqual(desktop.snapshot(), wasm.snapshot()); + process.stdout.write(`${JSON.stringify({ schemaVersion: 1, task: "C2-003", operation: "CORRECTIVE_UNDO_REDO_SAVE_INVARIANTS", queueMutation: false, surfaces: { desktop: desktop.snapshot(), wasm: wasm.snapshot() }, history: { desktop: desktop.historyState(), wasm: wasm.historyState() }, semantics: ["commit creates bounded undo history and clears redo", "undo and redo restore value, revision, and dirty state", "save marks the current snapshot clean and reopen restores it exactly", "no-op and failed mutations do not create history entries"] }, null, 2)}\n`); +} finally { fs.rmSync(temporary, { recursive: true, force: true }); } diff --git a/tests/golden/corrective/C2-003/handoff.json b/tests/golden/corrective/C2-003/handoff.json new file mode 100644 index 00000000..a1de1021 --- /dev/null +++ b/tests/golden/corrective/C2-003/handoff.json @@ -0,0 +1,121 @@ +{ + "schemaVersion": 1, + "task": "C2-003", + "status": "done", + "gate": "G2", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C2-003", + "artifactCount": 18, + "artifacts": [ + { + "path": "tests/golden/corrective/C2-003/check-context-governance.log", + "sha256": "7ed574f956f0255482a15f63faedc657fc7eb0fa643d282a430f27a207b5bf8d", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C2-003/check-corrective-plan.log", + "sha256": "222a5bc61d84fbcb24752f410de01db9181b76522321218a7d94245ce6a74a86", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C2-003/check-task-context.log", + "sha256": "cf9fb3f108cb7febf3d6d17543cb1abf9356174eb34d379652dd288aca6db2d7", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C2-003/command-exit-codes.json", + "sha256": "1d42c9e0aee854c6a4ae11816a276537c590a45bc0c1ad2f725a1fc59beb15e4", + "bytes": 226 + }, + { + "path": "tests/golden/corrective/C2-003/determinism.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C2-003/deterministic-history-report.mjs", + "sha256": "8d714fae9c49f8f3e799337d4dab4fd099b495e8aed0695a5c8b9ba2438f53db", + "bytes": 2637 + }, + { + "path": "tests/golden/corrective/C2-003/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C2-003/focused-test.log", + "sha256": "b21ab2f1c963ec88bde3df1a60be22960c1d72d0593f481834916cfcb3ff95cd", + "bytes": 913 + }, + { + "path": "tests/golden/corrective/C2-003/protected-hash-check.log", + "sha256": "cbfa11f4e820313bb186633cd646ed9a2d7a148e959e95a1ba88a369f9eb2644", + "bytes": 27 + }, + { + "path": "tests/golden/corrective/C2-003/protected-hashes-after.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C2-003/protected-hashes-before.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C2-003/receipt-gate.log", + "sha256": "378d1412fd88efbdaaa18dfc047ce8d07793771dbba09096208f13189b1d152a", + "bytes": 19 + }, + { + "path": "tests/golden/corrective/C2-003/receipt-report.json", + "sha256": "3655ce143b1e49952ffa63933bd2078208e841ded888e4a74dce83d5e5844f7e", + "bytes": 1037 + }, + { + "path": "tests/golden/corrective/C2-003/receipt-report.second.json", + "sha256": "3655ce143b1e49952ffa63933bd2078208e841ded888e4a74dce83d5e5844f7e", + "bytes": 1037 + }, + { + "path": "tests/golden/corrective/C2-003/source-hashes.json", + "sha256": "7eef2c9029b100ebd27f391bdb31463b73124c358dd6aeb26e7c80c9674bb344", + "bytes": 651 + }, + { + "path": "tests/golden/corrective/C2-003/test-context-governance.log", + "sha256": "ef7dc57a3cd1ab65dfbab84d6537298b4f32dcefac4bf1b8faeb008f1f96a94f", + "bytes": 2576 + }, + { + "path": "tests/golden/corrective/C2-003/typecheck.log", + "sha256": "f90c14a9694ed7029129a343fa5cc8672e4a59a5fe4b34e7c3098db9c5c5bd1a", + "bytes": 76 + }, + { + "path": "tests/golden/corrective/C2-003/undo-redo-save.test.mjs", + "sha256": "1d21c980d35df04b0585c0707b37c4eaafdfa689b991b031ff2d26a4c27ba34a", + "bytes": 3887 + } + ], + "sourceHashes": { + "tests/golden/corrective/C2-002/manifest.json": "e53edb129181f8c87c73481740085b55242a941cbdf272f625b014ee695de067", + "web/protocol/corrective-main-transaction.ts": "40567ca8843863d0c1751d06b819402be53f13826f5e54abc29530b8b02308e4", + "web/protocol/corrective-history-store.ts": "aaa69b0198fea9a37e947046f8db8143b75591b35af115d832a8328e258a6821", + "tests/golden/corrective/C2-003/undo-redo-save.test.mjs": "1d21c980d35df04b0585c0707b37c4eaafdfa689b991b031ff2d26a4c27ba34a", + "tests/golden/corrective/C2-003/deterministic-history-report.mjs": "8d714fae9c49f8f3e799337d4dab4fd099b495e8aed0695a5c8b9ba2438f53db" + }, + "commandExitCodes": { + "focusedTest": 0, + "receiptGeneration": 0, + "determinism": 0, + "protectedHashCheck": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0 + }, + "nextCorrectiveTask": "C3-001" +} diff --git a/tests/golden/corrective/C2-003/manifest.json b/tests/golden/corrective/C2-003/manifest.json new file mode 100644 index 00000000..a1de1021 --- /dev/null +++ b/tests/golden/corrective/C2-003/manifest.json @@ -0,0 +1,121 @@ +{ + "schemaVersion": 1, + "task": "C2-003", + "status": "done", + "gate": "G2", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C2-003", + "artifactCount": 18, + "artifacts": [ + { + "path": "tests/golden/corrective/C2-003/check-context-governance.log", + "sha256": "7ed574f956f0255482a15f63faedc657fc7eb0fa643d282a430f27a207b5bf8d", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C2-003/check-corrective-plan.log", + "sha256": "222a5bc61d84fbcb24752f410de01db9181b76522321218a7d94245ce6a74a86", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C2-003/check-task-context.log", + "sha256": "cf9fb3f108cb7febf3d6d17543cb1abf9356174eb34d379652dd288aca6db2d7", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C2-003/command-exit-codes.json", + "sha256": "1d42c9e0aee854c6a4ae11816a276537c590a45bc0c1ad2f725a1fc59beb15e4", + "bytes": 226 + }, + { + "path": "tests/golden/corrective/C2-003/determinism.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C2-003/deterministic-history-report.mjs", + "sha256": "8d714fae9c49f8f3e799337d4dab4fd099b495e8aed0695a5c8b9ba2438f53db", + "bytes": 2637 + }, + { + "path": "tests/golden/corrective/C2-003/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C2-003/focused-test.log", + "sha256": "b21ab2f1c963ec88bde3df1a60be22960c1d72d0593f481834916cfcb3ff95cd", + "bytes": 913 + }, + { + "path": "tests/golden/corrective/C2-003/protected-hash-check.log", + "sha256": "cbfa11f4e820313bb186633cd646ed9a2d7a148e959e95a1ba88a369f9eb2644", + "bytes": 27 + }, + { + "path": "tests/golden/corrective/C2-003/protected-hashes-after.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C2-003/protected-hashes-before.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C2-003/receipt-gate.log", + "sha256": "378d1412fd88efbdaaa18dfc047ce8d07793771dbba09096208f13189b1d152a", + "bytes": 19 + }, + { + "path": "tests/golden/corrective/C2-003/receipt-report.json", + "sha256": "3655ce143b1e49952ffa63933bd2078208e841ded888e4a74dce83d5e5844f7e", + "bytes": 1037 + }, + { + "path": "tests/golden/corrective/C2-003/receipt-report.second.json", + "sha256": "3655ce143b1e49952ffa63933bd2078208e841ded888e4a74dce83d5e5844f7e", + "bytes": 1037 + }, + { + "path": "tests/golden/corrective/C2-003/source-hashes.json", + "sha256": "7eef2c9029b100ebd27f391bdb31463b73124c358dd6aeb26e7c80c9674bb344", + "bytes": 651 + }, + { + "path": "tests/golden/corrective/C2-003/test-context-governance.log", + "sha256": "ef7dc57a3cd1ab65dfbab84d6537298b4f32dcefac4bf1b8faeb008f1f96a94f", + "bytes": 2576 + }, + { + "path": "tests/golden/corrective/C2-003/typecheck.log", + "sha256": "f90c14a9694ed7029129a343fa5cc8672e4a59a5fe4b34e7c3098db9c5c5bd1a", + "bytes": 76 + }, + { + "path": "tests/golden/corrective/C2-003/undo-redo-save.test.mjs", + "sha256": "1d21c980d35df04b0585c0707b37c4eaafdfa689b991b031ff2d26a4c27ba34a", + "bytes": 3887 + } + ], + "sourceHashes": { + "tests/golden/corrective/C2-002/manifest.json": "e53edb129181f8c87c73481740085b55242a941cbdf272f625b014ee695de067", + "web/protocol/corrective-main-transaction.ts": "40567ca8843863d0c1751d06b819402be53f13826f5e54abc29530b8b02308e4", + "web/protocol/corrective-history-store.ts": "aaa69b0198fea9a37e947046f8db8143b75591b35af115d832a8328e258a6821", + "tests/golden/corrective/C2-003/undo-redo-save.test.mjs": "1d21c980d35df04b0585c0707b37c4eaafdfa689b991b031ff2d26a4c27ba34a", + "tests/golden/corrective/C2-003/deterministic-history-report.mjs": "8d714fae9c49f8f3e799337d4dab4fd099b495e8aed0695a5c8b9ba2438f53db" + }, + "commandExitCodes": { + "focusedTest": 0, + "receiptGeneration": 0, + "determinism": 0, + "protectedHashCheck": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0 + }, + "nextCorrectiveTask": "C3-001" +} diff --git a/tests/golden/corrective/C2-003/protected-hashes-after.txt b/tests/golden/corrective/C2-003/protected-hashes-after.txt new file mode 100644 index 00000000..a0d2c8ba --- /dev/null +++ b/tests/golden/corrective/C2-003/protected-hashes-after.txt @@ -0,0 +1,7 @@ +5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1 docs/EXECUTION_QUEUE.md +32f4c11ebf8563f3aa500583f3979c1b38d711cc7328a428968118f0375b90b4 tests/golden/M15-03A/completed-gap-tasks.json +edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17 tests/golden/M15-03A/next-task-plan.json +da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d tests/golden/M15-03A/task-catalog.jsonl +ed591788c48c1b089decd2aa187f66728b5cc66a73c2b1c0c46c1a46ec4a0ae0 tests/golden/M15-03A/task-index.json +3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1 tests/golden/M16-GAP-00273/manifest.json +5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8 docs/status/M16-GAP-00273.md diff --git a/tests/golden/corrective/C2-003/protected-hashes-before.txt b/tests/golden/corrective/C2-003/protected-hashes-before.txt new file mode 100644 index 00000000..a0d2c8ba --- /dev/null +++ b/tests/golden/corrective/C2-003/protected-hashes-before.txt @@ -0,0 +1,7 @@ +5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1 docs/EXECUTION_QUEUE.md +32f4c11ebf8563f3aa500583f3979c1b38d711cc7328a428968118f0375b90b4 tests/golden/M15-03A/completed-gap-tasks.json +edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17 tests/golden/M15-03A/next-task-plan.json +da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d tests/golden/M15-03A/task-catalog.jsonl +ed591788c48c1b089decd2aa187f66728b5cc66a73c2b1c0c46c1a46ec4a0ae0 tests/golden/M15-03A/task-index.json +3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1 tests/golden/M16-GAP-00273/manifest.json +5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8 docs/status/M16-GAP-00273.md diff --git a/tests/golden/corrective/C2-003/receipt-report.json b/tests/golden/corrective/C2-003/receipt-report.json new file mode 100644 index 00000000..2dc028b4 --- /dev/null +++ b/tests/golden/corrective/C2-003/receipt-report.json @@ -0,0 +1,50 @@ +{ + "schemaVersion": 1, + "task": "C2-003", + "operation": "CORRECTIVE_UNDO_REDO_SAVE_INVARIANTS", + "queueMutation": false, + "surfaces": { + "desktop": { + "value": { + "frame": 12 + }, + "revision": 5, + "dirty": false + }, + "wasm": { + "value": { + "frame": 12 + }, + "revision": 5, + "dirty": false + } + }, + "history": { + "desktop": { + "value": { + "frame": 12 + }, + "revision": 5, + "dirty": false, + "canUndo": false, + "canRedo": false, + "savedRevision": 5 + }, + "wasm": { + "value": { + "frame": 12 + }, + "revision": 5, + "dirty": false, + "canUndo": false, + "canRedo": false, + "savedRevision": 5 + } + }, + "semantics": [ + "commit creates bounded undo history and clears redo", + "undo and redo restore value, revision, and dirty state", + "save marks the current snapshot clean and reopen restores it exactly", + "no-op and failed mutations do not create history entries" + ] +} diff --git a/tests/golden/corrective/C2-003/receipt-report.second.json b/tests/golden/corrective/C2-003/receipt-report.second.json new file mode 100644 index 00000000..2dc028b4 --- /dev/null +++ b/tests/golden/corrective/C2-003/receipt-report.second.json @@ -0,0 +1,50 @@ +{ + "schemaVersion": 1, + "task": "C2-003", + "operation": "CORRECTIVE_UNDO_REDO_SAVE_INVARIANTS", + "queueMutation": false, + "surfaces": { + "desktop": { + "value": { + "frame": 12 + }, + "revision": 5, + "dirty": false + }, + "wasm": { + "value": { + "frame": 12 + }, + "revision": 5, + "dirty": false + } + }, + "history": { + "desktop": { + "value": { + "frame": 12 + }, + "revision": 5, + "dirty": false, + "canUndo": false, + "canRedo": false, + "savedRevision": 5 + }, + "wasm": { + "value": { + "frame": 12 + }, + "revision": 5, + "dirty": false, + "canUndo": false, + "canRedo": false, + "savedRevision": 5 + } + }, + "semantics": [ + "commit creates bounded undo history and clears redo", + "undo and redo restore value, revision, and dirty state", + "save marks the current snapshot clean and reopen restores it exactly", + "no-op and failed mutations do not create history entries" + ] +} diff --git a/tests/golden/corrective/C2-003/source-hashes.json b/tests/golden/corrective/C2-003/source-hashes.json new file mode 100644 index 00000000..6db5fcad --- /dev/null +++ b/tests/golden/corrective/C2-003/source-hashes.json @@ -0,0 +1,9 @@ +{ + "sourceHashes": { + "tests/golden/corrective/C2-002/manifest.json": "e53edb129181f8c87c73481740085b55242a941cbdf272f625b014ee695de067", + "web/protocol/corrective-main-transaction.ts": "40567ca8843863d0c1751d06b819402be53f13826f5e54abc29530b8b02308e4", + "web/protocol/corrective-history-store.ts": "aaa69b0198fea9a37e947046f8db8143b75591b35af115d832a8328e258a6821", + "tests/golden/corrective/C2-003/undo-redo-save.test.mjs": "1d21c980d35df04b0585c0707b37c4eaafdfa689b991b031ff2d26a4c27ba34a", + "tests/golden/corrective/C2-003/deterministic-history-report.mjs": "8d714fae9c49f8f3e799337d4dab4fd099b495e8aed0695a5c8b9ba2438f53db" + } +} diff --git a/tests/golden/corrective/C2-003/undo-redo-save.test.mjs b/tests/golden/corrective/C2-003/undo-redo-save.test.mjs new file mode 100644 index 00000000..a72ccb55 --- /dev/null +++ b/tests/golden/corrective/C2-003/undo-redo-save.test.mjs @@ -0,0 +1,76 @@ +import assert from "node:assert/strict"; +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import test from "node:test"; +import { fileURLToPath, pathToFileURL } from "node:url"; +import ts from "../../../../web/node_modules/typescript/lib/typescript.js"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../../.."); +const temporary = fs.mkdtempSync(path.join(os.tmpdir(), "corrective-history-")); +const compile = (source, output, replacements = []) => { + const sourcePath = path.join(root, source); + const result = ts.transpileModule(fs.readFileSync(sourcePath, "utf8"), { compilerOptions: { module: ts.ModuleKind.ES2022, target: ts.ScriptTarget.ES2022 }, fileName: sourcePath, reportDiagnostics: true }); + assert.deepEqual(result.diagnostics, []); + let text = result.outputText; + for (const [from, to] of replacements) text = text.replaceAll(from, to); + fs.writeFileSync(output, text); +}; +try { + const main = path.join(temporary, "corrective-main-transaction.mjs"); + const history = path.join(temporary, "corrective-history-store.mjs"); + const runner = path.join(temporary, "corrective-case-runner.mjs"); + compile("web/protocol/corrective-case-runner.ts", runner); + compile("web/protocol/corrective-main-transaction.ts", main, [["from \"./corrective-case-runner\"", "from \"./corrective-case-runner.mjs\""]]); + compile("web/protocol/corrective-history-store.ts", history, [["from \"./corrective-main-transaction\"", "from \"./corrective-main-transaction.mjs\""]]); + const { CorrectiveHistoryStore } = await import(pathToFileURL(history)); + const create = () => new CorrectiveHistoryStore({ frame: 1 }, 4, false, (value) => ({ ...value }), 2); + + test("undo and redo restore complete snapshots", () => { + const store = create(); + store.commit({ frame: 12 }, 5, true); + store.commit({ frame: 24 }, 6, true); + assert.deepEqual(store.undo(), { value: { frame: 12 }, revision: 5, dirty: true }); + assert.deepEqual(store.undo(), { value: { frame: 1 }, revision: 4, dirty: false }); + assert.deepEqual(store.redo(), { value: { frame: 12 }, revision: 5, dirty: true }); + }); + + test("save and reopen restore the saved clean snapshot", () => { + const store = create(); + store.commit({ frame: 12 }, 5, true); + assert.deepEqual(store.save(), { value: { frame: 12 }, revision: 5, dirty: false }); + store.commit({ frame: 24 }, 6, true); + store.reopen(); + assert.deepEqual(store.snapshot(), { value: { frame: 12 }, revision: 5, dirty: false }); + assert.equal(store.historyState().canUndo, false); + }); + + test("redo is discarded after a new commit and history is bounded", () => { + const store = create(); + store.commit({ frame: 2 }, 5, true); + store.commit({ frame: 3 }, 6, true); + store.undo(); + store.commit({ frame: 9 }, 7, true); + assert.equal(store.historyState().canRedo, false); + store.commit({ frame: 10 }, 8, true); + store.commit({ frame: 11 }, 9, true); + store.commit({ frame: 12 }, 10, true); + assert.equal(store.historyState().canUndo, true); + assert.deepEqual(store.undo().value, { frame: 11 }); + assert.deepEqual(store.undo().value, { frame: 10 }); + assert.deepEqual(store.undo().value, { frame: 10 }); + }); + + test("no-op commits do not create history entries", () => { + const store = create(); + store.commit({ frame: 1 }, 4, false); + assert.equal(store.historyState().canUndo, false); + }); + + test("save/reopen preserves revision and dirty invariants across surfaces", () => { + const desktop = create(); + const wasm = create(); + for (const store of [desktop, wasm]) { store.commit({ frame: 12 }, 5, true); store.save(); store.commit({ frame: 24 }, 6, true); store.reopen(); } + assert.deepEqual(desktop.snapshot(), wasm.snapshot()); + }); +} finally { fs.rmSync(temporary, { recursive: true, force: true }); } diff --git a/tests/golden/corrective/C3-001/command-exit-codes.json b/tests/golden/corrective/C3-001/command-exit-codes.json new file mode 100644 index 00000000..20755ee3 --- /dev/null +++ b/tests/golden/corrective/C3-001/command-exit-codes.json @@ -0,0 +1,12 @@ +{ + "focusedTest": 0, + "receiptGeneration": 0, + "determinism": 0, + "protectedHashCheck": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0 +} diff --git a/tests/golden/corrective/C3-001/deterministic-resource-report.mjs b/tests/golden/corrective/C3-001/deterministic-resource-report.mjs new file mode 100644 index 00000000..5ba9aa57 --- /dev/null +++ b/tests/golden/corrective/C3-001/deterministic-resource-report.mjs @@ -0,0 +1,25 @@ +import assert from "node:assert/strict"; +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import { fileURLToPath, pathToFileURL } from "node:url"; +import ts from "../../../../web/node_modules/typescript/lib/typescript.js"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../../.."); +const temp = fs.mkdtempSync(path.join(os.tmpdir(), "corrective-resource-report-")); +try { + const source = path.join(root, "web/protocol/corrective-resource-provider.ts"); const out = path.join(temp, "resource.mjs"); + const result = ts.transpileModule(fs.readFileSync(source, "utf8"), { compilerOptions: { module: ts.ModuleKind.ES2022, target: ts.ScriptTarget.ES2022 }, fileName: source, reportDiagnostics: true }); + assert.deepEqual(result.diagnostics, []); fs.writeFileSync(out, result.outputText); + const { AssetCatalogResourceResolver, InMemoryCatalogProvider } = await import(pathToFileURL(out)); + const bytes = new TextEncoder().encode("catalog-pilot"); const resolver = new AssetCatalogResourceResolver(); const provider = new InMemoryCatalogProvider("EXTERNAL_LIBRARY"); const hash = await provider.put("library.blend", bytes); resolver.registerProvider(provider).setActiveLibraryContext({ libraryId: "lib:pilot", sourceKind: "EXTERNAL", sourceId: "library.blend", generation: 1, revision: 4, readOnly: false }); + const request = { schemaVersion: 1, requestId: "resource-pilot-001", sourceKind: "EXTERNAL", sourceId: "library.blend", sha256: hash }; + const positive = await resolver.resolve(request); + const failure = async (value, signal) => { try { await resolver.resolve(value, signal); return { status: "UNEXPECTED_SUCCESS" }; } catch (error) { return { code: error.code, message: error.message }; } }; + const missingProvider = new AssetCatalogResourceResolver(); missingProvider.setActiveLibraryContext({ libraryId: "lib:pilot", sourceKind: "LOCAL", sourceId: "library.blend", generation: 1, revision: 4, readOnly: false }); + const missing = await (async () => { try { await missingProvider.resolve({ ...request, sourceKind: "LOCAL" }); return { status: "UNEXPECTED_SUCCESS" }; } catch (error) { return { code: error.code, message: error.message }; } })(); + const mismatch = await failure({ ...request, sha256: "0".repeat(64) }); + const controller = new AbortController(); controller.abort(); const cancelled = await failure(request, controller.signal); + const contextMismatch = await failure({ ...request, sourceKind: "LOCAL" }); + process.stdout.write(`${JSON.stringify({ schemaVersion: 1, task: "C3-001", operation: "CORRECTIVE_ASSET_CATALOG_RESOURCE_PROVIDER", queueMutation: false, positive: { provider: positive.provider, sourceKind: positive.sourceKind, sourceId: positive.sourceId, sha256: positive.sha256, byteLength: positive.bytes.byteLength }, negative: { missingProvider: { code: "RESOURCE_REQUIRED" }, hashMismatch: mismatch, cancelled, contextMismatch }, activeLibrary: resolver.activeLibraryContext(), semantics: ["provider lookup is bound to active library source identity", "returned bytes are hash-verified before publication", "missing provider, hash mismatch, cancellation, and context mismatch fail closed"] }, null, 2)}\n`); +} finally { fs.rmSync(temp, { recursive: true, force: true }); } diff --git a/tests/golden/corrective/C3-001/handoff.json b/tests/golden/corrective/C3-001/handoff.json new file mode 100644 index 00000000..9c3b2a47 --- /dev/null +++ b/tests/golden/corrective/C3-001/handoff.json @@ -0,0 +1,120 @@ +{ + "schemaVersion": 1, + "task": "C3-001", + "status": "done", + "gate": "G3", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C3-001", + "artifactCount": 18, + "artifacts": [ + { + "path": "tests/golden/corrective/C3-001/check-context-governance.log", + "sha256": "7ed574f956f0255482a15f63faedc657fc7eb0fa643d282a430f27a207b5bf8d", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C3-001/check-corrective-plan.log", + "sha256": "97a15d45b9de11240fbad34af23d4f1642c200cdd565efcb036e1e1d791d0c8f", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C3-001/check-task-context.log", + "sha256": "cf9fb3f108cb7febf3d6d17543cb1abf9356174eb34d379652dd288aca6db2d7", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C3-001/command-exit-codes.json", + "sha256": "1d42c9e0aee854c6a4ae11816a276537c590a45bc0c1ad2f725a1fc59beb15e4", + "bytes": 226 + }, + { + "path": "tests/golden/corrective/C3-001/determinism.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C3-001/deterministic-resource-report.mjs", + "sha256": "f9ee4d2b5993d23cb32bb1794c6458ed3608659bc6cdbba364207f2479216da2", + "bytes": 3283 + }, + { + "path": "tests/golden/corrective/C3-001/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C3-001/focused-test.log", + "sha256": "66639a5127552e4768166f9bae0f00946cf06103697431f3b88c6b780f7c43a8", + "bytes": 973 + }, + { + "path": "tests/golden/corrective/C3-001/protected-hash-check.log", + "sha256": "cbfa11f4e820313bb186633cd646ed9a2d7a148e959e95a1ba88a369f9eb2644", + "bytes": 27 + }, + { + "path": "tests/golden/corrective/C3-001/protected-hashes-after.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C3-001/protected-hashes-before.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C3-001/receipt-gate.log", + "sha256": "c17fc5cdf8e167eeca6551cdac13cc3b4af8dfd28c4d767581248830e964cb23", + "bytes": 20 + }, + { + "path": "tests/golden/corrective/C3-001/receipt-report.json", + "sha256": "180f7f5d76138912627215eee16b605133f3c1e290d9434becc23ab6d320c242", + "bytes": 1325 + }, + { + "path": "tests/golden/corrective/C3-001/receipt-report.second.json", + "sha256": "180f7f5d76138912627215eee16b605133f3c1e290d9434becc23ab6d320c242", + "bytes": 1325 + }, + { + "path": "tests/golden/corrective/C3-001/resource-provider.test.mjs", + "sha256": "dd86b8d8ecbb3da7beb2577fff97252131206baf07b98dc22153df90265f4d9e", + "bytes": 3955 + }, + { + "path": "tests/golden/corrective/C3-001/source-hashes.json", + "sha256": "8a729039702165972b8b9bd697440596911a905d60f40c25549d9724770c7732", + "bytes": 540 + }, + { + "path": "tests/golden/corrective/C3-001/test-context-governance.log", + "sha256": "1d3abe196c9c2588d147d279577cc5bf7fe85683ad01b2e677378ee647c2d581", + "bytes": 2578 + }, + { + "path": "tests/golden/corrective/C3-001/typecheck.log", + "sha256": "f90c14a9694ed7029129a343fa5cc8672e4a59a5fe4b34e7c3098db9c5c5bd1a", + "bytes": 76 + } + ], + "sourceHashes": { + "tests/golden/corrective/C2-003/manifest.json": "386c7c2c656d917b7f74a4317de4022683fc6823a33ac3a2f470990408fcc0ee", + "web/protocol/corrective-resource-provider.ts": "fdaaaa8bc7e0a7220b08c5813c18e672351ae0d09168f08936bae06fcebb73a3", + "tests/golden/corrective/C3-001/resource-provider.test.mjs": "dd86b8d8ecbb3da7beb2577fff97252131206baf07b98dc22153df90265f4d9e", + "tests/golden/corrective/C3-001/deterministic-resource-report.mjs": "f9ee4d2b5993d23cb32bb1794c6458ed3608659bc6cdbba364207f2479216da2" + }, + "commandExitCodes": { + "focusedTest": 0, + "receiptGeneration": 0, + "determinism": 0, + "protectedHashCheck": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0 + }, + "nextCorrectiveTask": "C3-002" +} diff --git a/tests/golden/corrective/C3-001/manifest.json b/tests/golden/corrective/C3-001/manifest.json new file mode 100644 index 00000000..9c3b2a47 --- /dev/null +++ b/tests/golden/corrective/C3-001/manifest.json @@ -0,0 +1,120 @@ +{ + "schemaVersion": 1, + "task": "C3-001", + "status": "done", + "gate": "G3", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C3-001", + "artifactCount": 18, + "artifacts": [ + { + "path": "tests/golden/corrective/C3-001/check-context-governance.log", + "sha256": "7ed574f956f0255482a15f63faedc657fc7eb0fa643d282a430f27a207b5bf8d", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C3-001/check-corrective-plan.log", + "sha256": "97a15d45b9de11240fbad34af23d4f1642c200cdd565efcb036e1e1d791d0c8f", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C3-001/check-task-context.log", + "sha256": "cf9fb3f108cb7febf3d6d17543cb1abf9356174eb34d379652dd288aca6db2d7", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C3-001/command-exit-codes.json", + "sha256": "1d42c9e0aee854c6a4ae11816a276537c590a45bc0c1ad2f725a1fc59beb15e4", + "bytes": 226 + }, + { + "path": "tests/golden/corrective/C3-001/determinism.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C3-001/deterministic-resource-report.mjs", + "sha256": "f9ee4d2b5993d23cb32bb1794c6458ed3608659bc6cdbba364207f2479216da2", + "bytes": 3283 + }, + { + "path": "tests/golden/corrective/C3-001/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C3-001/focused-test.log", + "sha256": "66639a5127552e4768166f9bae0f00946cf06103697431f3b88c6b780f7c43a8", + "bytes": 973 + }, + { + "path": "tests/golden/corrective/C3-001/protected-hash-check.log", + "sha256": "cbfa11f4e820313bb186633cd646ed9a2d7a148e959e95a1ba88a369f9eb2644", + "bytes": 27 + }, + { + "path": "tests/golden/corrective/C3-001/protected-hashes-after.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C3-001/protected-hashes-before.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C3-001/receipt-gate.log", + "sha256": "c17fc5cdf8e167eeca6551cdac13cc3b4af8dfd28c4d767581248830e964cb23", + "bytes": 20 + }, + { + "path": "tests/golden/corrective/C3-001/receipt-report.json", + "sha256": "180f7f5d76138912627215eee16b605133f3c1e290d9434becc23ab6d320c242", + "bytes": 1325 + }, + { + "path": "tests/golden/corrective/C3-001/receipt-report.second.json", + "sha256": "180f7f5d76138912627215eee16b605133f3c1e290d9434becc23ab6d320c242", + "bytes": 1325 + }, + { + "path": "tests/golden/corrective/C3-001/resource-provider.test.mjs", + "sha256": "dd86b8d8ecbb3da7beb2577fff97252131206baf07b98dc22153df90265f4d9e", + "bytes": 3955 + }, + { + "path": "tests/golden/corrective/C3-001/source-hashes.json", + "sha256": "8a729039702165972b8b9bd697440596911a905d60f40c25549d9724770c7732", + "bytes": 540 + }, + { + "path": "tests/golden/corrective/C3-001/test-context-governance.log", + "sha256": "1d3abe196c9c2588d147d279577cc5bf7fe85683ad01b2e677378ee647c2d581", + "bytes": 2578 + }, + { + "path": "tests/golden/corrective/C3-001/typecheck.log", + "sha256": "f90c14a9694ed7029129a343fa5cc8672e4a59a5fe4b34e7c3098db9c5c5bd1a", + "bytes": 76 + } + ], + "sourceHashes": { + "tests/golden/corrective/C2-003/manifest.json": "386c7c2c656d917b7f74a4317de4022683fc6823a33ac3a2f470990408fcc0ee", + "web/protocol/corrective-resource-provider.ts": "fdaaaa8bc7e0a7220b08c5813c18e672351ae0d09168f08936bae06fcebb73a3", + "tests/golden/corrective/C3-001/resource-provider.test.mjs": "dd86b8d8ecbb3da7beb2577fff97252131206baf07b98dc22153df90265f4d9e", + "tests/golden/corrective/C3-001/deterministic-resource-report.mjs": "f9ee4d2b5993d23cb32bb1794c6458ed3608659bc6cdbba364207f2479216da2" + }, + "commandExitCodes": { + "focusedTest": 0, + "receiptGeneration": 0, + "determinism": 0, + "protectedHashCheck": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0 + }, + "nextCorrectiveTask": "C3-002" +} diff --git a/tests/golden/corrective/C3-001/protected-hashes-after.txt b/tests/golden/corrective/C3-001/protected-hashes-after.txt new file mode 100644 index 00000000..a0d2c8ba --- /dev/null +++ b/tests/golden/corrective/C3-001/protected-hashes-after.txt @@ -0,0 +1,7 @@ +5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1 docs/EXECUTION_QUEUE.md +32f4c11ebf8563f3aa500583f3979c1b38d711cc7328a428968118f0375b90b4 tests/golden/M15-03A/completed-gap-tasks.json +edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17 tests/golden/M15-03A/next-task-plan.json +da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d tests/golden/M15-03A/task-catalog.jsonl +ed591788c48c1b089decd2aa187f66728b5cc66a73c2b1c0c46c1a46ec4a0ae0 tests/golden/M15-03A/task-index.json +3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1 tests/golden/M16-GAP-00273/manifest.json +5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8 docs/status/M16-GAP-00273.md diff --git a/tests/golden/corrective/C3-001/protected-hashes-before.txt b/tests/golden/corrective/C3-001/protected-hashes-before.txt new file mode 100644 index 00000000..a0d2c8ba --- /dev/null +++ b/tests/golden/corrective/C3-001/protected-hashes-before.txt @@ -0,0 +1,7 @@ +5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1 docs/EXECUTION_QUEUE.md +32f4c11ebf8563f3aa500583f3979c1b38d711cc7328a428968118f0375b90b4 tests/golden/M15-03A/completed-gap-tasks.json +edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17 tests/golden/M15-03A/next-task-plan.json +da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d tests/golden/M15-03A/task-catalog.jsonl +ed591788c48c1b089decd2aa187f66728b5cc66a73c2b1c0c46c1a46ec4a0ae0 tests/golden/M15-03A/task-index.json +3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1 tests/golden/M16-GAP-00273/manifest.json +5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8 docs/status/M16-GAP-00273.md diff --git a/tests/golden/corrective/C3-001/receipt-report.json b/tests/golden/corrective/C3-001/receipt-report.json new file mode 100644 index 00000000..8df4cd55 --- /dev/null +++ b/tests/golden/corrective/C3-001/receipt-report.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "C3-001", + "operation": "CORRECTIVE_ASSET_CATALOG_RESOURCE_PROVIDER", + "queueMutation": false, + "positive": { + "provider": "EXTERNAL_LIBRARY", + "sourceKind": "EXTERNAL", + "sourceId": "library.blend", + "sha256": "38a0e68ceea421506dff0f44e9df877138f630c39ada8c4b0746628c6d8f49f6", + "byteLength": 13 + }, + "negative": { + "missingProvider": { + "code": "RESOURCE_REQUIRED" + }, + "hashMismatch": { + "code": "RESOURCE_HASH_MISMATCH", + "message": "RESOURCE_HASH_MISMATCH: resource hash 38a0e68ceea421506dff0f44e9df877138f630c39ada8c4b0746628c6d8f49f6 does not match request" + }, + "cancelled": { + "code": "CANCELLED", + "message": "CANCELLED: resource lookup cancelled" + }, + "contextMismatch": { + "code": "CONTEXT_INVALID", + "message": "CONTEXT_INVALID: request does not match active library context" + } + }, + "activeLibrary": { + "libraryId": "lib:pilot", + "sourceKind": "EXTERNAL", + "sourceId": "library.blend", + "generation": 1, + "revision": 4, + "readOnly": false + }, + "semantics": [ + "provider lookup is bound to active library source identity", + "returned bytes are hash-verified before publication", + "missing provider, hash mismatch, cancellation, and context mismatch fail closed" + ] +} diff --git a/tests/golden/corrective/C3-001/receipt-report.second.json b/tests/golden/corrective/C3-001/receipt-report.second.json new file mode 100644 index 00000000..8df4cd55 --- /dev/null +++ b/tests/golden/corrective/C3-001/receipt-report.second.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "C3-001", + "operation": "CORRECTIVE_ASSET_CATALOG_RESOURCE_PROVIDER", + "queueMutation": false, + "positive": { + "provider": "EXTERNAL_LIBRARY", + "sourceKind": "EXTERNAL", + "sourceId": "library.blend", + "sha256": "38a0e68ceea421506dff0f44e9df877138f630c39ada8c4b0746628c6d8f49f6", + "byteLength": 13 + }, + "negative": { + "missingProvider": { + "code": "RESOURCE_REQUIRED" + }, + "hashMismatch": { + "code": "RESOURCE_HASH_MISMATCH", + "message": "RESOURCE_HASH_MISMATCH: resource hash 38a0e68ceea421506dff0f44e9df877138f630c39ada8c4b0746628c6d8f49f6 does not match request" + }, + "cancelled": { + "code": "CANCELLED", + "message": "CANCELLED: resource lookup cancelled" + }, + "contextMismatch": { + "code": "CONTEXT_INVALID", + "message": "CONTEXT_INVALID: request does not match active library context" + } + }, + "activeLibrary": { + "libraryId": "lib:pilot", + "sourceKind": "EXTERNAL", + "sourceId": "library.blend", + "generation": 1, + "revision": 4, + "readOnly": false + }, + "semantics": [ + "provider lookup is bound to active library source identity", + "returned bytes are hash-verified before publication", + "missing provider, hash mismatch, cancellation, and context mismatch fail closed" + ] +} diff --git a/tests/golden/corrective/C3-001/resource-provider.test.mjs b/tests/golden/corrective/C3-001/resource-provider.test.mjs new file mode 100644 index 00000000..8ed7c535 --- /dev/null +++ b/tests/golden/corrective/C3-001/resource-provider.test.mjs @@ -0,0 +1,22 @@ +import assert from "node:assert/strict"; +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import test from "node:test"; +import { fileURLToPath, pathToFileURL } from "node:url"; +import ts from "../../../../web/node_modules/typescript/lib/typescript.js"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../../.."); +const temp = fs.mkdtempSync(path.join(os.tmpdir(), "corrective-resource-")); +try { + const out = path.join(temp, "resource.mjs"); const source = path.join(root, "web/protocol/corrective-resource-provider.ts"); + const result = ts.transpileModule(fs.readFileSync(source, "utf8"), { compilerOptions: { module: ts.ModuleKind.ES2022, target: ts.ScriptTarget.ES2022 }, fileName: source, reportDiagnostics: true }); + assert.deepEqual(result.diagnostics, []); fs.writeFileSync(out, result.outputText); + const { AssetCatalogResourceResolver, InMemoryCatalogProvider, CorrectiveResourceError } = await import(pathToFileURL(out)); + const bytes = new TextEncoder().encode("catalog-pilot"); const resolver = new AssetCatalogResourceResolver(); const provider = new InMemoryCatalogProvider("EXTERNAL_LIBRARY"); const hash = await provider.put("library.blend", bytes); resolver.registerProvider(provider).setActiveLibraryContext({ libraryId: "lib:pilot", sourceKind: "EXTERNAL", sourceId: "library.blend", generation: 1, revision: 4, readOnly: false }); + test("external resource resolves with verified hash and context", async () => { const record = await resolver.resolve({ schemaVersion: 1, requestId: "resource-001", sourceKind: "EXTERNAL", sourceId: "library.blend", sha256: hash }); assert.equal(record.provider, "EXTERNAL_LIBRARY"); assert.deepEqual([...record.bytes], [...bytes]); }); + test("missing provider, hash mismatch, cancel, and context mismatch fail closed", async () => { const missing = new AssetCatalogResourceResolver(); missing.setActiveLibraryContext({ libraryId: "lib:pilot", sourceKind: "LOCAL", sourceId: "library.blend", generation: 1, revision: 4, readOnly: false }); await assert.rejects(() => missing.resolve({ schemaVersion: 1, requestId: "resource-001", sourceKind: "LOCAL", sourceId: "library.blend", sha256: hash }), (e) => e.code === "RESOURCE_REQUIRED"); await assert.rejects(() => resolver.resolve({ schemaVersion: 1, requestId: "resource-001", sourceKind: "EXTERNAL", sourceId: "library.blend", sha256: "0".repeat(64) }), (e) => e.code === "RESOURCE_HASH_MISMATCH"); const controller = new AbortController(); controller.abort(); await assert.rejects(() => resolver.resolve({ schemaVersion: 1, requestId: "resource-001", sourceKind: "EXTERNAL", sourceId: "library.blend", sha256: hash }, controller.signal), (e) => e.code === "CANCELLED"); await assert.rejects(() => resolver.resolve({ schemaVersion: 1, requestId: "resource-001", sourceKind: "LOCAL", sourceId: "library.blend", sha256: hash }), (e) => e.code === "CONTEXT_INVALID"); }); + test("malformed active context and request are rejected", async () => { assert.throws(() => resolver.setActiveLibraryContext({ libraryId: "bad space" }), (e) => e instanceof CorrectiveResourceError && e.code === "RESOURCE_MALFORMED"); await assert.rejects(() => resolver.resolve({ schemaVersion: 1, requestId: "bad id" }), (e) => e.code === "RESOURCE_MALFORMED"); }); + test("provider returns copies and active context is immutable", async () => { const context = resolver.activeLibraryContext(); context.revision = 99; assert.equal(resolver.activeLibraryContext().revision, 4); const loaded = await provider.load("library.blend"); loaded[0] = 0; assert.equal((await provider.load("library.blend"))[0], bytes[0]); }); + test("local and packed provider kinds map deterministically", () => { assert.equal(new InMemoryCatalogProvider("LOCAL").provider, "LOCAL"); assert.equal(new InMemoryCatalogProvider("PACKED_BLEND").provider, "PACKED_BLEND"); }); +} finally { fs.rmSync(temp, { recursive: true, force: true }); } diff --git a/tests/golden/corrective/C3-001/source-hashes.json b/tests/golden/corrective/C3-001/source-hashes.json new file mode 100644 index 00000000..67117ba7 --- /dev/null +++ b/tests/golden/corrective/C3-001/source-hashes.json @@ -0,0 +1,8 @@ +{ + "sourceHashes": { + "tests/golden/corrective/C2-003/manifest.json": "386c7c2c656d917b7f74a4317de4022683fc6823a33ac3a2f470990408fcc0ee", + "web/protocol/corrective-resource-provider.ts": "fdaaaa8bc7e0a7220b08c5813c18e672351ae0d09168f08936bae06fcebb73a3", + "tests/golden/corrective/C3-001/resource-provider.test.mjs": "dd86b8d8ecbb3da7beb2577fff97252131206baf07b98dc22153df90265f4d9e", + "tests/golden/corrective/C3-001/deterministic-resource-report.mjs": "f9ee4d2b5993d23cb32bb1794c6458ed3608659bc6cdbba364207f2479216da2" + } +} diff --git a/tests/golden/corrective/C3-002/asset-catalog-command.test.mjs b/tests/golden/corrective/C3-002/asset-catalog-command.test.mjs new file mode 100644 index 00000000..d5091864 --- /dev/null +++ b/tests/golden/corrective/C3-002/asset-catalog-command.test.mjs @@ -0,0 +1,31 @@ +import assert from "node:assert/strict"; +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import test from "node:test"; +import { fileURLToPath, pathToFileURL } from "node:url"; +import ts from "../../../../web/node_modules/typescript/lib/typescript.js"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../../.."); +const temp = fs.mkdtempSync(path.join(os.tmpdir(), "corrective-catalog-command-")); +const compile = (source, output, replacements = []) => { + const input = path.join(root, source); const result = ts.transpileModule(fs.readFileSync(input, "utf8"), { compilerOptions: { module: ts.ModuleKind.ES2022, target: ts.ScriptTarget.ES2022 }, fileName: input, reportDiagnostics: true }); assert.deepEqual(result.diagnostics, []); let text = result.outputText; for (const [from, to] of replacements) text = text.replaceAll(from, to); fs.writeFileSync(output, text); +}; +try { + const files = { runner: path.join(temp, "corrective-case-runner.mjs"), registry: path.join(temp, "corrective-command-registry.mjs"), tx: path.join(temp, "corrective-main-transaction.mjs"), resource: path.join(temp, "corrective-resource-provider.mjs"), catalog: path.join(temp, "corrective-asset-catalog-command.mjs") }; + compile("web/protocol/corrective-case-runner.ts", files.runner); + compile("web/protocol/corrective-command-registry.ts", files.registry, [["from \"./corrective-case-runner\"", "from \"./corrective-case-runner.mjs\""]]); + compile("web/protocol/corrective-main-transaction.ts", files.tx, [["from \"./corrective-case-runner\"", "from \"./corrective-case-runner.mjs\""]]); + compile("web/protocol/corrective-resource-provider.ts", files.resource); + compile("web/protocol/corrective-asset-catalog-command.ts", files.catalog, [["from \"./corrective-command-registry\"", "from \"./corrective-command-registry.mjs\""], ["from \"./corrective-case-runner\"", "from \"./corrective-case-runner.mjs\""], ["from \"./corrective-main-transaction\"", "from \"./corrective-main-transaction.mjs\""], ["from \"./corrective-resource-provider\"", "from \"./corrective-resource-provider.mjs\""]]); + const { CorrectiveCommandRegistry } = await import(pathToFileURL(files.registry)); + const { InMemoryMainStore } = await import(pathToFileURL(files.tx)); + const { AssetCatalogResourceResolver, InMemoryCatalogProvider } = await import(pathToFileURL(files.resource)); + const { createAssetCatalogRegistry } = await import(pathToFileURL(files.catalog)); + const bytes = new TextEncoder().encode("asset-catalog-pilot"); const resource = new AssetCatalogResourceResolver(); const provider = new InMemoryCatalogProvider("EXTERNAL_LIBRARY"); const hash = await provider.put("library.blend", bytes); resource.registerProvider(provider).setActiveLibraryContext({ libraryId: "lib:pilot", sourceKind: "EXTERNAL", sourceId: "library.blend", generation: 1, revision: 4, readOnly: false }); + const command = (overrides = {}) => ({ schemaVersion: 1, requestId: "catalog-001", commandType: "assetCatalogAppend", baseRevision: 4, context: { mainId: "main:catalog", targetKind: "ASSET_LIBRARY", targetId: "library:pilot", editMode: "EDITABLE", authorization: "USER_EDIT", source: { kind: "EXTERNAL", sha256: hash }, resourceProvider: "EXTERNAL_LIBRARY" }, payload: { id: "asset:one", name: "Pilot Asset", resource: { schemaVersion: 1, requestId: "resource-001", sourceKind: "EXTERNAL", sourceId: "library.blend", sha256: hash } }, ...overrides }); + const createMain = () => new InMemoryMainStore({ entries: [] }, 4, false, (value) => ({ entries: value.entries.map((entry) => ({ ...entry })) })); + test("desktop and WASM append the same verified catalog entry", async () => { const desktopMain = createMain(); const wasmMain = createMain(); const desktop = await createAssetCatalogRegistry(desktopMain, resource).dispatch("DESKTOP", { command: command(), mainRevision: 4 }); const wasm = await createAssetCatalogRegistry(wasmMain, resource).dispatch("WASM", { command: command(), mainRevision: 4 }); assert.equal(desktop.result.status, "FINISHED"); assert.equal(wasm.result.status, "FINISHED"); assert.deepEqual(desktop.result, wasm.result); assert.deepEqual(desktopMain.snapshot(), wasmMain.snapshot()); assert.equal(desktopMain.snapshot().value.entries[0].byteLength, bytes.byteLength); }); + test("missing resource, duplicate, malformed payload, and stale revision are non-mutating", async () => { const missingMain = createMain(); const badResource = command({ payload: { ...command().payload, resource: { ...command().payload.resource, sha256: "0".repeat(64) } } }); const missing = await createAssetCatalogRegistry(missingMain, resource).dispatch("DESKTOP", { command: badResource, mainRevision: 4 }); assert.equal(missing.result.mainMutation, "UNCHANGED"); assert.equal(missingMain.snapshot().value.entries.length, 0); const duplicateMain = createMain(); const registry = createAssetCatalogRegistry(duplicateMain, resource); await registry.dispatch("DESKTOP", { command: command(), mainRevision: 4 }); const duplicate = await registry.dispatch("DESKTOP", { command: command({ baseRevision: 5 }), mainRevision: 5 }); assert.equal(duplicate.result.mainRevisionAfter, 5); assert.equal(duplicateMain.snapshot().value.entries.length, 1); const malformedMain = createMain(); const malformed = await createAssetCatalogRegistry(malformedMain, resource).dispatch("WASM", { command: command({ payload: { id: "bad id" } }), mainRevision: 4 }); assert.equal(malformed.result.code, "COMMAND_MALFORMED"); const staleMain = createMain(); const stale = await createAssetCatalogRegistry(staleMain, resource).dispatch("WASM", { command: command({ baseRevision: 3 }), mainRevision: 4 }); assert.equal(stale.result.code, "REVISION_CONFLICT"); assert.equal(staleMain.snapshot().value.entries.length, 0); }); + test("registry shape remains explicit and typed", () => { const main = createMain(); const registry = createAssetCatalogRegistry(main, resource); assert.ok(registry instanceof CorrectiveCommandRegistry); assert.deepEqual(registry.list(), ["assetCatalogAppend"]); }); +} finally { fs.rmSync(temp, { recursive: true, force: true }); } diff --git a/tests/golden/corrective/C3-002/command-exit-codes.json b/tests/golden/corrective/C3-002/command-exit-codes.json new file mode 100644 index 00000000..20755ee3 --- /dev/null +++ b/tests/golden/corrective/C3-002/command-exit-codes.json @@ -0,0 +1,12 @@ +{ + "focusedTest": 0, + "receiptGeneration": 0, + "determinism": 0, + "protectedHashCheck": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0 +} diff --git a/tests/golden/corrective/C3-002/deterministic-catalog-command-report.mjs b/tests/golden/corrective/C3-002/deterministic-catalog-command-report.mjs new file mode 100644 index 00000000..f452d9c9 --- /dev/null +++ b/tests/golden/corrective/C3-002/deterministic-catalog-command-report.mjs @@ -0,0 +1,24 @@ +import assert from "node:assert/strict"; +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import { fileURLToPath, pathToFileURL } from "node:url"; +import ts from "../../../../web/node_modules/typescript/lib/typescript.js"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../../.."); const temp = fs.mkdtempSync(path.join(os.tmpdir(), "corrective-catalog-report-")); +try { + const names = ["corrective-case-runner", "corrective-command-registry", "corrective-main-transaction", "corrective-resource-provider", "corrective-asset-catalog-command"]; + const files = Object.fromEntries(names.map((name) => [name, path.join(temp, `${name}.mjs`)])); + const compile = (source, output, replacements = []) => { const input = path.join(root, source); const result = ts.transpileModule(fs.readFileSync(input, "utf8"), { compilerOptions: { module: ts.ModuleKind.ES2022, target: ts.ScriptTarget.ES2022 }, fileName: input, reportDiagnostics: true }); assert.deepEqual(result.diagnostics, []); let text = result.outputText; for (const [from, to] of replacements) text = text.replaceAll(from, to); fs.writeFileSync(output, text); }; + compile("web/protocol/corrective-case-runner.ts", files["corrective-case-runner"]); + compile("web/protocol/corrective-command-registry.ts", files["corrective-command-registry"], [["from \"./corrective-case-runner\"", "from \"./corrective-case-runner.mjs\""]]); + compile("web/protocol/corrective-main-transaction.ts", files["corrective-main-transaction"], [["from \"./corrective-case-runner\"", "from \"./corrective-case-runner.mjs\""]]); + compile("web/protocol/corrective-resource-provider.ts", files["corrective-resource-provider"]); + compile("web/protocol/corrective-asset-catalog-command.ts", files["corrective-asset-catalog-command"], names.slice(0, 4).map((name) => [`from \"./${name}\"`, `from \"./${name}.mjs\"`])); + const { InMemoryMainStore } = await import(pathToFileURL(files["corrective-main-transaction"])); const { AssetCatalogResourceResolver, InMemoryCatalogProvider } = await import(pathToFileURL(files["corrective-resource-provider"])); const { createAssetCatalogRegistry } = await import(pathToFileURL(files["corrective-asset-catalog-command"])); + const bytes = new TextEncoder().encode("asset-catalog-pilot"); const resolver = new AssetCatalogResourceResolver(); const provider = new InMemoryCatalogProvider("EXTERNAL_LIBRARY"); const hash = await provider.put("library.blend", bytes); resolver.registerProvider(provider).setActiveLibraryContext({ libraryId: "lib:pilot", sourceKind: "EXTERNAL", sourceId: "library.blend", generation: 1, revision: 4, readOnly: false }); + const command = (overrides = {}) => ({ schemaVersion: 1, requestId: "catalog-pilot-001", commandType: "assetCatalogAppend", baseRevision: 4, context: { mainId: "main:catalog", targetKind: "ASSET_LIBRARY", targetId: "library:pilot", editMode: "EDITABLE", authorization: "USER_EDIT", source: { kind: "EXTERNAL", sha256: hash }, resourceProvider: "EXTERNAL_LIBRARY" }, payload: { id: "asset:one", name: "Pilot Asset", resource: { schemaVersion: 1, requestId: "resource-001", sourceKind: "EXTERNAL", sourceId: "library.blend", sha256: hash } }, ...overrides }); + const store = () => new InMemoryMainStore({ entries: [] }, 4, false, (value) => ({ entries: value.entries.map((entry) => ({ ...entry })) })); const desktopMain = store(); const wasmMain = store(); const desktop = await createAssetCatalogRegistry(desktopMain, resolver).dispatch("DESKTOP", { command: command(), mainRevision: 4 }); const wasm = await createAssetCatalogRegistry(wasmMain, resolver).dispatch("WASM", { command: command(), mainRevision: 4 }); const bad = await createAssetCatalogRegistry(store(), resolver).dispatch("WASM", { command: command({ payload: { ...command().payload, resource: { ...command().payload.resource, sha256: "0".repeat(64) } } }), mainRevision: 4 }); + assert.equal(desktop.result.status, "FINISHED"); assert.deepEqual(desktop.result, wasm.result); assert.equal(bad.result.mainRevisionAfter, 4); + process.stdout.write(`${JSON.stringify({ schemaVersion: 1, task: "C3-002", operation: "CORRECTIVE_ASSET_CATALOG_POSITIVE_COMMAND", queueMutation: false, positive: { desktop: desktop.result, wasm: wasm.result, parity: "MATCH", main: desktopMain.snapshot() }, negative: { resourceHashMismatch: bad.result }, semantics: ["resource verification precedes atomic catalog append", "desktop and WASM share normalized append result", "resource failure preserves Main revision and catalog entries"] }, null, 2)}\n`); +} finally { fs.rmSync(temp, { recursive: true, force: true }); } diff --git a/tests/golden/corrective/C3-002/handoff.json b/tests/golden/corrective/C3-002/handoff.json new file mode 100644 index 00000000..c236f549 --- /dev/null +++ b/tests/golden/corrective/C3-002/handoff.json @@ -0,0 +1,121 @@ +{ + "schemaVersion": 1, + "task": "C3-002", + "status": "done", + "gate": "G3", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C3-002", + "artifactCount": 18, + "artifacts": [ + { + "path": "tests/golden/corrective/C3-002/asset-catalog-command.test.mjs", + "sha256": "a1808e43991cb6fb4ca9215fed9da893ac9c59c4a74e04db8be5235d255ec925", + "bytes": 6156 + }, + { + "path": "tests/golden/corrective/C3-002/check-context-governance.log", + "sha256": "7ed574f956f0255482a15f63faedc657fc7eb0fa643d282a430f27a207b5bf8d", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C3-002/check-corrective-plan.log", + "sha256": "fae083e9c4dd34b75832b949121c316a4360e91dd7fbef05d73fea7a8cc27e22", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C3-002/check-task-context.log", + "sha256": "cf9fb3f108cb7febf3d6d17543cb1abf9356174eb34d379652dd288aca6db2d7", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C3-002/command-exit-codes.json", + "sha256": "1d42c9e0aee854c6a4ae11816a276537c590a45bc0c1ad2f725a1fc59beb15e4", + "bytes": 226 + }, + { + "path": "tests/golden/corrective/C3-002/determinism.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C3-002/deterministic-catalog-command-report.mjs", + "sha256": "c69fa0052bb31bad27781822e476361b634585efd7ebe1d6a0a9a8b418494558", + "bytes": 4644 + }, + { + "path": "tests/golden/corrective/C3-002/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C3-002/focused-test.log", + "sha256": "cb69dc99ca94c7ba0d14771f2cbbd5fcf2660f27481dbbb0801af54a963b48b3", + "bytes": 645 + }, + { + "path": "tests/golden/corrective/C3-002/protected-hash-check.log", + "sha256": "cbfa11f4e820313bb186633cd646ed9a2d7a148e959e95a1ba88a369f9eb2644", + "bytes": 27 + }, + { + "path": "tests/golden/corrective/C3-002/protected-hashes-after.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C3-002/protected-hashes-before.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C3-002/receipt-gate.log", + "sha256": "6bf3d2752dbba884580404b39669c51ea9a5e4d7c93719c7ed08ea2af305f005", + "bytes": 19 + }, + { + "path": "tests/golden/corrective/C3-002/receipt-report.json", + "sha256": "0577efe1f038253baf98d4d689d4d37d898d2348cfffd615edb329a1976b0526", + "bytes": 2137 + }, + { + "path": "tests/golden/corrective/C3-002/receipt-report.second.json", + "sha256": "0577efe1f038253baf98d4d689d4d37d898d2348cfffd615edb329a1976b0526", + "bytes": 2137 + }, + { + "path": "tests/golden/corrective/C3-002/source-hashes.json", + "sha256": "b602e2778f7765757372406c194fef669ba401c7823edb7fd6b07700c5698bfa", + "bytes": 675 + }, + { + "path": "tests/golden/corrective/C3-002/test-context-governance.log", + "sha256": "e7323d09d85b439ff2e586b93b17316e02abcd80caa291b27d09c28c379ae616", + "bytes": 2579 + }, + { + "path": "tests/golden/corrective/C3-002/typecheck.log", + "sha256": "f90c14a9694ed7029129a343fa5cc8672e4a59a5fe4b34e7c3098db9c5c5bd1a", + "bytes": 76 + } + ], + "sourceHashes": { + "tests/golden/corrective/C3-001/manifest.json": "6c55f91724237a5d3d2d89e179a3b22a65628de0e24cc4bc24c3ab0cdc7cb9a2", + "web/protocol/corrective-resource-provider.ts": "fdaaaa8bc7e0a7220b08c5813c18e672351ae0d09168f08936bae06fcebb73a3", + "web/protocol/corrective-asset-catalog-command.ts": "e94ef8d6aa7cf427cdd41c4287ee2fd1ddd97342e1e4ae3a91f4f50483e7d8ef", + "tests/golden/corrective/C3-002/asset-catalog-command.test.mjs": "a1808e43991cb6fb4ca9215fed9da893ac9c59c4a74e04db8be5235d255ec925", + "tests/golden/corrective/C3-002/deterministic-catalog-command-report.mjs": "c69fa0052bb31bad27781822e476361b634585efd7ebe1d6a0a9a8b418494558" + }, + "commandExitCodes": { + "focusedTest": 0, + "receiptGeneration": 0, + "determinism": 0, + "protectedHashCheck": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0 + }, + "nextCorrectiveTask": "C3-003" +} diff --git a/tests/golden/corrective/C3-002/manifest.json b/tests/golden/corrective/C3-002/manifest.json new file mode 100644 index 00000000..c236f549 --- /dev/null +++ b/tests/golden/corrective/C3-002/manifest.json @@ -0,0 +1,121 @@ +{ + "schemaVersion": 1, + "task": "C3-002", + "status": "done", + "gate": "G3", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C3-002", + "artifactCount": 18, + "artifacts": [ + { + "path": "tests/golden/corrective/C3-002/asset-catalog-command.test.mjs", + "sha256": "a1808e43991cb6fb4ca9215fed9da893ac9c59c4a74e04db8be5235d255ec925", + "bytes": 6156 + }, + { + "path": "tests/golden/corrective/C3-002/check-context-governance.log", + "sha256": "7ed574f956f0255482a15f63faedc657fc7eb0fa643d282a430f27a207b5bf8d", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C3-002/check-corrective-plan.log", + "sha256": "fae083e9c4dd34b75832b949121c316a4360e91dd7fbef05d73fea7a8cc27e22", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C3-002/check-task-context.log", + "sha256": "cf9fb3f108cb7febf3d6d17543cb1abf9356174eb34d379652dd288aca6db2d7", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C3-002/command-exit-codes.json", + "sha256": "1d42c9e0aee854c6a4ae11816a276537c590a45bc0c1ad2f725a1fc59beb15e4", + "bytes": 226 + }, + { + "path": "tests/golden/corrective/C3-002/determinism.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C3-002/deterministic-catalog-command-report.mjs", + "sha256": "c69fa0052bb31bad27781822e476361b634585efd7ebe1d6a0a9a8b418494558", + "bytes": 4644 + }, + { + "path": "tests/golden/corrective/C3-002/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C3-002/focused-test.log", + "sha256": "cb69dc99ca94c7ba0d14771f2cbbd5fcf2660f27481dbbb0801af54a963b48b3", + "bytes": 645 + }, + { + "path": "tests/golden/corrective/C3-002/protected-hash-check.log", + "sha256": "cbfa11f4e820313bb186633cd646ed9a2d7a148e959e95a1ba88a369f9eb2644", + "bytes": 27 + }, + { + "path": "tests/golden/corrective/C3-002/protected-hashes-after.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C3-002/protected-hashes-before.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C3-002/receipt-gate.log", + "sha256": "6bf3d2752dbba884580404b39669c51ea9a5e4d7c93719c7ed08ea2af305f005", + "bytes": 19 + }, + { + "path": "tests/golden/corrective/C3-002/receipt-report.json", + "sha256": "0577efe1f038253baf98d4d689d4d37d898d2348cfffd615edb329a1976b0526", + "bytes": 2137 + }, + { + "path": "tests/golden/corrective/C3-002/receipt-report.second.json", + "sha256": "0577efe1f038253baf98d4d689d4d37d898d2348cfffd615edb329a1976b0526", + "bytes": 2137 + }, + { + "path": "tests/golden/corrective/C3-002/source-hashes.json", + "sha256": "b602e2778f7765757372406c194fef669ba401c7823edb7fd6b07700c5698bfa", + "bytes": 675 + }, + { + "path": "tests/golden/corrective/C3-002/test-context-governance.log", + "sha256": "e7323d09d85b439ff2e586b93b17316e02abcd80caa291b27d09c28c379ae616", + "bytes": 2579 + }, + { + "path": "tests/golden/corrective/C3-002/typecheck.log", + "sha256": "f90c14a9694ed7029129a343fa5cc8672e4a59a5fe4b34e7c3098db9c5c5bd1a", + "bytes": 76 + } + ], + "sourceHashes": { + "tests/golden/corrective/C3-001/manifest.json": "6c55f91724237a5d3d2d89e179a3b22a65628de0e24cc4bc24c3ab0cdc7cb9a2", + "web/protocol/corrective-resource-provider.ts": "fdaaaa8bc7e0a7220b08c5813c18e672351ae0d09168f08936bae06fcebb73a3", + "web/protocol/corrective-asset-catalog-command.ts": "e94ef8d6aa7cf427cdd41c4287ee2fd1ddd97342e1e4ae3a91f4f50483e7d8ef", + "tests/golden/corrective/C3-002/asset-catalog-command.test.mjs": "a1808e43991cb6fb4ca9215fed9da893ac9c59c4a74e04db8be5235d255ec925", + "tests/golden/corrective/C3-002/deterministic-catalog-command-report.mjs": "c69fa0052bb31bad27781822e476361b634585efd7ebe1d6a0a9a8b418494558" + }, + "commandExitCodes": { + "focusedTest": 0, + "receiptGeneration": 0, + "determinism": 0, + "protectedHashCheck": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0 + }, + "nextCorrectiveTask": "C3-003" +} diff --git a/tests/golden/corrective/C3-002/protected-hashes-after.txt b/tests/golden/corrective/C3-002/protected-hashes-after.txt new file mode 100644 index 00000000..a0d2c8ba --- /dev/null +++ b/tests/golden/corrective/C3-002/protected-hashes-after.txt @@ -0,0 +1,7 @@ +5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1 docs/EXECUTION_QUEUE.md +32f4c11ebf8563f3aa500583f3979c1b38d711cc7328a428968118f0375b90b4 tests/golden/M15-03A/completed-gap-tasks.json +edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17 tests/golden/M15-03A/next-task-plan.json +da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d tests/golden/M15-03A/task-catalog.jsonl +ed591788c48c1b089decd2aa187f66728b5cc66a73c2b1c0c46c1a46ec4a0ae0 tests/golden/M15-03A/task-index.json +3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1 tests/golden/M16-GAP-00273/manifest.json +5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8 docs/status/M16-GAP-00273.md diff --git a/tests/golden/corrective/C3-002/protected-hashes-before.txt b/tests/golden/corrective/C3-002/protected-hashes-before.txt new file mode 100644 index 00000000..a0d2c8ba --- /dev/null +++ b/tests/golden/corrective/C3-002/protected-hashes-before.txt @@ -0,0 +1,7 @@ +5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1 docs/EXECUTION_QUEUE.md +32f4c11ebf8563f3aa500583f3979c1b38d711cc7328a428968118f0375b90b4 tests/golden/M15-03A/completed-gap-tasks.json +edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17 tests/golden/M15-03A/next-task-plan.json +da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d tests/golden/M15-03A/task-catalog.jsonl +ed591788c48c1b089decd2aa187f66728b5cc66a73c2b1c0c46c1a46ec4a0ae0 tests/golden/M15-03A/task-index.json +3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1 tests/golden/M16-GAP-00273/manifest.json +5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8 docs/status/M16-GAP-00273.md diff --git a/tests/golden/corrective/C3-002/receipt-report.json b/tests/golden/corrective/C3-002/receipt-report.json new file mode 100644 index 00000000..56d96f96 --- /dev/null +++ b/tests/golden/corrective/C3-002/receipt-report.json @@ -0,0 +1,83 @@ +{ + "schemaVersion": 1, + "task": "C3-002", + "operation": "CORRECTIVE_ASSET_CATALOG_POSITIVE_COMMAND", + "queueMutation": false, + "positive": { + "desktop": { + "schemaVersion": 1, + "requestId": "catalog-pilot-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 5, + "mainMutation": "CHANGED", + "delta": { + "addedId": "asset:one", + "count": 1 + }, + "persistence": { + "dirty": true + }, + "error": null + }, + "wasm": { + "schemaVersion": 1, + "requestId": "catalog-pilot-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 5, + "mainMutation": "CHANGED", + "delta": { + "addedId": "asset:one", + "count": 1 + }, + "persistence": { + "dirty": true + }, + "error": null + }, + "parity": "MATCH", + "main": { + "value": { + "entries": [ + { + "id": "asset:one", + "name": "Pilot Asset", + "sourceId": "library.blend", + "sourceSha256": "07926a17219766cd660e9ceb99b1b4ba73f3ad78cda3722dd475ac7e5887376d", + "byteLength": 19 + } + ] + }, + "revision": 5, + "dirty": true + } + }, + "negative": { + "resourceHashMismatch": { + "schemaVersion": 1, + "requestId": "catalog-pilot-001", + "status": "UNSUPPORTED", + "code": "COMMAND_UNSUPPORTED", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_UNSUPPORTED", + "message": "RESOURCE_HASH_MISMATCH: resource hash 07926a17219766cd660e9ceb99b1b4ba73f3ad78cda3722dd475ac7e5887376d does not match request" + } + } + }, + "semantics": [ + "resource verification precedes atomic catalog append", + "desktop and WASM share normalized append result", + "resource failure preserves Main revision and catalog entries" + ] +} diff --git a/tests/golden/corrective/C3-002/receipt-report.second.json b/tests/golden/corrective/C3-002/receipt-report.second.json new file mode 100644 index 00000000..56d96f96 --- /dev/null +++ b/tests/golden/corrective/C3-002/receipt-report.second.json @@ -0,0 +1,83 @@ +{ + "schemaVersion": 1, + "task": "C3-002", + "operation": "CORRECTIVE_ASSET_CATALOG_POSITIVE_COMMAND", + "queueMutation": false, + "positive": { + "desktop": { + "schemaVersion": 1, + "requestId": "catalog-pilot-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 5, + "mainMutation": "CHANGED", + "delta": { + "addedId": "asset:one", + "count": 1 + }, + "persistence": { + "dirty": true + }, + "error": null + }, + "wasm": { + "schemaVersion": 1, + "requestId": "catalog-pilot-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 5, + "mainMutation": "CHANGED", + "delta": { + "addedId": "asset:one", + "count": 1 + }, + "persistence": { + "dirty": true + }, + "error": null + }, + "parity": "MATCH", + "main": { + "value": { + "entries": [ + { + "id": "asset:one", + "name": "Pilot Asset", + "sourceId": "library.blend", + "sourceSha256": "07926a17219766cd660e9ceb99b1b4ba73f3ad78cda3722dd475ac7e5887376d", + "byteLength": 19 + } + ] + }, + "revision": 5, + "dirty": true + } + }, + "negative": { + "resourceHashMismatch": { + "schemaVersion": 1, + "requestId": "catalog-pilot-001", + "status": "UNSUPPORTED", + "code": "COMMAND_UNSUPPORTED", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_UNSUPPORTED", + "message": "RESOURCE_HASH_MISMATCH: resource hash 07926a17219766cd660e9ceb99b1b4ba73f3ad78cda3722dd475ac7e5887376d does not match request" + } + } + }, + "semantics": [ + "resource verification precedes atomic catalog append", + "desktop and WASM share normalized append result", + "resource failure preserves Main revision and catalog entries" + ] +} diff --git a/tests/golden/corrective/C3-002/source-hashes.json b/tests/golden/corrective/C3-002/source-hashes.json new file mode 100644 index 00000000..56eafdee --- /dev/null +++ b/tests/golden/corrective/C3-002/source-hashes.json @@ -0,0 +1,9 @@ +{ + "sourceHashes": { + "tests/golden/corrective/C3-001/manifest.json": "6c55f91724237a5d3d2d89e179a3b22a65628de0e24cc4bc24c3ab0cdc7cb9a2", + "web/protocol/corrective-resource-provider.ts": "fdaaaa8bc7e0a7220b08c5813c18e672351ae0d09168f08936bae06fcebb73a3", + "web/protocol/corrective-asset-catalog-command.ts": "e94ef8d6aa7cf427cdd41c4287ee2fd1ddd97342e1e4ae3a91f4f50483e7d8ef", + "tests/golden/corrective/C3-002/asset-catalog-command.test.mjs": "a1808e43991cb6fb4ca9215fed9da893ac9c59c4a74e04db8be5235d255ec925", + "tests/golden/corrective/C3-002/deterministic-catalog-command-report.mjs": "c69fa0052bb31bad27781822e476361b634585efd7ebe1d6a0a9a8b418494558" + } +} diff --git a/tests/golden/corrective/C3-003/command-exit-codes.json b/tests/golden/corrective/C3-003/command-exit-codes.json new file mode 100644 index 00000000..70a07fc5 --- /dev/null +++ b/tests/golden/corrective/C3-003/command-exit-codes.json @@ -0,0 +1,13 @@ +{ + "chromiumPilot": 0, + "chromiumPilotSecond": 0, + "determinism": 0, + "c3Regression": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0, + "protectedHashCheck": 0 +} diff --git a/tests/golden/corrective/C3-003/handoff.json b/tests/golden/corrective/C3-003/handoff.json new file mode 100644 index 00000000..c8840416 --- /dev/null +++ b/tests/golden/corrective/C3-003/handoff.json @@ -0,0 +1,125 @@ +{ + "schemaVersion": 1, + "task": "C3-003", + "status": "done", + "gate": "G3", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C3-003", + "artifactCount": 18, + "artifacts": [ + { + "path": "tests/golden/corrective/C3-003/c3-002-regression.log", + "sha256": "c949a4cf4fbad2c4a519a2c11e13359b415d034365248c534bf9439b8341fe34", + "bytes": 645 + }, + { + "path": "tests/golden/corrective/C3-003/check-context-governance.log", + "sha256": "7ed574f956f0255482a15f63faedc657fc7eb0fa643d282a430f27a207b5bf8d", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C3-003/check-corrective-plan.log", + "sha256": "fae083e9c4dd34b75832b949121c316a4360e91dd7fbef05d73fea7a8cc27e22", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C3-003/check-task-context.log", + "sha256": "cf9fb3f108cb7febf3d6d17543cb1abf9356174eb34d379652dd288aca6db2d7", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C3-003/chromium-pilot.log", + "sha256": "5afcd10e9bf1c62c2a8be2fb23b411bd8c2931f6dfe96ef1b9f86708efaa8c77", + "bytes": 194 + }, + { + "path": "tests/golden/corrective/C3-003/chromium-pilot.second.log", + "sha256": "5afcd10e9bf1c62c2a8be2fb23b411bd8c2931f6dfe96ef1b9f86708efaa8c77", + "bytes": 194 + }, + { + "path": "tests/golden/corrective/C3-003/command-exit-codes.json", + "sha256": "a0b1912c9ea26699a3d0183835d6623cdf51fc3a25accdee83b30156a216a07a", + "bytes": 251 + }, + { + "path": "tests/golden/corrective/C3-003/determinism.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C3-003/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C3-003/protected-hash-check.log", + "sha256": "cbfa11f4e820313bb186633cd646ed9a2d7a148e959e95a1ba88a369f9eb2644", + "bytes": 27 + }, + { + "path": "tests/golden/corrective/C3-003/protected-hashes-after.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C3-003/protected-hashes-before.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C3-003/receipt-gate.log", + "sha256": "5e3718ecfc8a6bd9b71e58734b005d2e0057bd1573bb35238f2e8a8bf181dce5", + "bytes": 23 + }, + { + "path": "tests/golden/corrective/C3-003/receipt-report.json", + "sha256": "a6bcf58a3f22bcba245eeb6dc25799d472343f5197a6e19b346a9cf2d619105e", + "bytes": 3337 + }, + { + "path": "tests/golden/corrective/C3-003/receipt-report.second.json", + "sha256": "a6bcf58a3f22bcba245eeb6dc25799d472343f5197a6e19b346a9cf2d619105e", + "bytes": 3337 + }, + { + "path": "tests/golden/corrective/C3-003/source-hashes.json", + "sha256": "4eced918da8f168253591ffedcf0f74cf7ac4e681091a7ea409060415c42bdb9", + "bytes": 990 + }, + { + "path": "tests/golden/corrective/C3-003/test-context-governance.log", + "sha256": "9181bb63251097f34e78aa6b5262136a758e36fdbef8d7b64398916ce26eacf5", + "bytes": 2579 + }, + { + "path": "tests/golden/corrective/C3-003/typecheck.log", + "sha256": "f90c14a9694ed7029129a343fa5cc8672e4a59a5fe4b34e7c3098db9c5c5bd1a", + "bytes": 76 + } + ], + "sourceHashes": { + "tests/golden/corrective/C3-002/manifest.json": "411555bb437668f88d10a7a497c708e739157ed981aa5e935df4295d4da6d317", + "web/protocol/corrective-resource-provider.ts": "fdaaaa8bc7e0a7220b08c5813c18e672351ae0d09168f08936bae06fcebb73a3", + "web/protocol/corrective-asset-catalog-command.ts": "e94ef8d6aa7cf427cdd41c4287ee2fd1ddd97342e1e4ae3a91f4f50483e7d8ef", + "web/protocol/corrective-main-transaction.ts": "40567ca8843863d0c1751d06b819402be53f13826f5e54abc29530b8b02308e4", + "web/protocol/corrective-history-store.ts": "aaa69b0198fea9a37e947046f8db8143b75591b35af115d832a8328e258a6821", + "web/app/src/corrective-pilot-bridge.ts": "7a5671fb72182bae3dffb310daa4e66581a02f7649eeb21b638abd9e8e5e5497", + "web/tests/e2e/corrective-asset-catalog-pilot.spec.ts": "e6bc8f6733dbcdf44a246caf20c6362f1e20d7b9abae59dbb964cb9200b52b36", + "tests/golden/corrective/C3-003/determinism.log": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "commandExitCodes": { + "chromiumPilot": 0, + "chromiumPilotSecond": 0, + "determinism": 0, + "c3Regression": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0, + "protectedHashCheck": 0 + }, + "nextCorrectiveTask": "C4-001" +} diff --git a/tests/golden/corrective/C3-003/manifest.json b/tests/golden/corrective/C3-003/manifest.json new file mode 100644 index 00000000..c8840416 --- /dev/null +++ b/tests/golden/corrective/C3-003/manifest.json @@ -0,0 +1,125 @@ +{ + "schemaVersion": 1, + "task": "C3-003", + "status": "done", + "gate": "G3", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C3-003", + "artifactCount": 18, + "artifacts": [ + { + "path": "tests/golden/corrective/C3-003/c3-002-regression.log", + "sha256": "c949a4cf4fbad2c4a519a2c11e13359b415d034365248c534bf9439b8341fe34", + "bytes": 645 + }, + { + "path": "tests/golden/corrective/C3-003/check-context-governance.log", + "sha256": "7ed574f956f0255482a15f63faedc657fc7eb0fa643d282a430f27a207b5bf8d", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C3-003/check-corrective-plan.log", + "sha256": "fae083e9c4dd34b75832b949121c316a4360e91dd7fbef05d73fea7a8cc27e22", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C3-003/check-task-context.log", + "sha256": "cf9fb3f108cb7febf3d6d17543cb1abf9356174eb34d379652dd288aca6db2d7", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C3-003/chromium-pilot.log", + "sha256": "5afcd10e9bf1c62c2a8be2fb23b411bd8c2931f6dfe96ef1b9f86708efaa8c77", + "bytes": 194 + }, + { + "path": "tests/golden/corrective/C3-003/chromium-pilot.second.log", + "sha256": "5afcd10e9bf1c62c2a8be2fb23b411bd8c2931f6dfe96ef1b9f86708efaa8c77", + "bytes": 194 + }, + { + "path": "tests/golden/corrective/C3-003/command-exit-codes.json", + "sha256": "a0b1912c9ea26699a3d0183835d6623cdf51fc3a25accdee83b30156a216a07a", + "bytes": 251 + }, + { + "path": "tests/golden/corrective/C3-003/determinism.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C3-003/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C3-003/protected-hash-check.log", + "sha256": "cbfa11f4e820313bb186633cd646ed9a2d7a148e959e95a1ba88a369f9eb2644", + "bytes": 27 + }, + { + "path": "tests/golden/corrective/C3-003/protected-hashes-after.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C3-003/protected-hashes-before.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C3-003/receipt-gate.log", + "sha256": "5e3718ecfc8a6bd9b71e58734b005d2e0057bd1573bb35238f2e8a8bf181dce5", + "bytes": 23 + }, + { + "path": "tests/golden/corrective/C3-003/receipt-report.json", + "sha256": "a6bcf58a3f22bcba245eeb6dc25799d472343f5197a6e19b346a9cf2d619105e", + "bytes": 3337 + }, + { + "path": "tests/golden/corrective/C3-003/receipt-report.second.json", + "sha256": "a6bcf58a3f22bcba245eeb6dc25799d472343f5197a6e19b346a9cf2d619105e", + "bytes": 3337 + }, + { + "path": "tests/golden/corrective/C3-003/source-hashes.json", + "sha256": "4eced918da8f168253591ffedcf0f74cf7ac4e681091a7ea409060415c42bdb9", + "bytes": 990 + }, + { + "path": "tests/golden/corrective/C3-003/test-context-governance.log", + "sha256": "9181bb63251097f34e78aa6b5262136a758e36fdbef8d7b64398916ce26eacf5", + "bytes": 2579 + }, + { + "path": "tests/golden/corrective/C3-003/typecheck.log", + "sha256": "f90c14a9694ed7029129a343fa5cc8672e4a59a5fe4b34e7c3098db9c5c5bd1a", + "bytes": 76 + } + ], + "sourceHashes": { + "tests/golden/corrective/C3-002/manifest.json": "411555bb437668f88d10a7a497c708e739157ed981aa5e935df4295d4da6d317", + "web/protocol/corrective-resource-provider.ts": "fdaaaa8bc7e0a7220b08c5813c18e672351ae0d09168f08936bae06fcebb73a3", + "web/protocol/corrective-asset-catalog-command.ts": "e94ef8d6aa7cf427cdd41c4287ee2fd1ddd97342e1e4ae3a91f4f50483e7d8ef", + "web/protocol/corrective-main-transaction.ts": "40567ca8843863d0c1751d06b819402be53f13826f5e54abc29530b8b02308e4", + "web/protocol/corrective-history-store.ts": "aaa69b0198fea9a37e947046f8db8143b75591b35af115d832a8328e258a6821", + "web/app/src/corrective-pilot-bridge.ts": "7a5671fb72182bae3dffb310daa4e66581a02f7649eeb21b638abd9e8e5e5497", + "web/tests/e2e/corrective-asset-catalog-pilot.spec.ts": "e6bc8f6733dbcdf44a246caf20c6362f1e20d7b9abae59dbb964cb9200b52b36", + "tests/golden/corrective/C3-003/determinism.log": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "commandExitCodes": { + "chromiumPilot": 0, + "chromiumPilotSecond": 0, + "determinism": 0, + "c3Regression": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0, + "protectedHashCheck": 0 + }, + "nextCorrectiveTask": "C4-001" +} diff --git a/tests/golden/corrective/C3-003/protected-hashes-after.txt b/tests/golden/corrective/C3-003/protected-hashes-after.txt new file mode 100644 index 00000000..a0d2c8ba --- /dev/null +++ b/tests/golden/corrective/C3-003/protected-hashes-after.txt @@ -0,0 +1,7 @@ +5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1 docs/EXECUTION_QUEUE.md +32f4c11ebf8563f3aa500583f3979c1b38d711cc7328a428968118f0375b90b4 tests/golden/M15-03A/completed-gap-tasks.json +edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17 tests/golden/M15-03A/next-task-plan.json +da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d tests/golden/M15-03A/task-catalog.jsonl +ed591788c48c1b089decd2aa187f66728b5cc66a73c2b1c0c46c1a46ec4a0ae0 tests/golden/M15-03A/task-index.json +3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1 tests/golden/M16-GAP-00273/manifest.json +5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8 docs/status/M16-GAP-00273.md diff --git a/tests/golden/corrective/C3-003/protected-hashes-before.txt b/tests/golden/corrective/C3-003/protected-hashes-before.txt new file mode 100644 index 00000000..a0d2c8ba --- /dev/null +++ b/tests/golden/corrective/C3-003/protected-hashes-before.txt @@ -0,0 +1,7 @@ +5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1 docs/EXECUTION_QUEUE.md +32f4c11ebf8563f3aa500583f3979c1b38d711cc7328a428968118f0375b90b4 tests/golden/M15-03A/completed-gap-tasks.json +edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17 tests/golden/M15-03A/next-task-plan.json +da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d tests/golden/M15-03A/task-catalog.jsonl +ed591788c48c1b089decd2aa187f66728b5cc66a73c2b1c0c46c1a46ec4a0ae0 tests/golden/M15-03A/task-index.json +3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1 tests/golden/M16-GAP-00273/manifest.json +5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8 docs/status/M16-GAP-00273.md diff --git a/tests/golden/corrective/C3-003/receipt-report.json b/tests/golden/corrective/C3-003/receipt-report.json new file mode 100644 index 00000000..c2c9e1bf --- /dev/null +++ b/tests/golden/corrective/C3-003/receipt-report.json @@ -0,0 +1,129 @@ +{ + "schemaVersion": 1, + "task": "C3-003", + "operation": "CORRECTIVE_ASSET_CATALOG_CHROMIUM_PILOT", + "browser": "chromium", + "queueMutation": false, + "positive": { + "desktop": { + "schemaVersion": 1, + "requestId": "chromium-catalog-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 5, + "mainMutation": "CHANGED", + "delta": { + "addedId": "asset:chromium", + "count": 1 + }, + "persistence": { + "dirty": true + }, + "error": null + }, + "wasm": { + "schemaVersion": 1, + "requestId": "chromium-catalog-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 5, + "mainMutation": "CHANGED", + "delta": { + "addedId": "asset:chromium", + "count": 1 + }, + "persistence": { + "dirty": true + }, + "error": null + }, + "desktopEntries": 1, + "wasmEntries": 1 + }, + "negative": { + "duplicate": { + "schemaVersion": 1, + "requestId": "chromium-catalog-001", + "status": "UNSUPPORTED", + "code": "COMMAND_UNSUPPORTED", + "baseRevision": 5, + "mainRevisionBefore": 5, + "mainRevisionAfter": 5, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_UNSUPPORTED", + "message": "COMMAND_UNSUPPORTED: catalog entry asset:chromium already exists" + } + }, + "missing": { + "schemaVersion": 1, + "requestId": "chromium-catalog-001", + "status": "EXTERNAL_REQUIRED", + "code": "RESOURCE_REQUIRED", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "RESOURCE_REQUIRED", + "message": "RESOURCE_REQUIRED: RESOURCE_REQUIRED: EXTERNAL_LIBRARY provider is required" + } + }, + "revision": { + "schemaVersion": 1, + "requestId": "chromium-catalog-001", + "status": "BLOCKED", + "code": "REVISION_CONFLICT", + "baseRevision": 3, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "REVISION_CONFLICT", + "message": "base revision does not match current Main" + } + }, + "malformed": { + "schemaVersion": 1, + "requestId": "chromium-catalog-001", + "status": "MALFORMED", + "code": "COMMAND_MALFORMED", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_MALFORMED", + "message": "COMMAND_MALFORMED: catalog entry payload is invalid" + } + } + }, + "persistence": { + "value": { + "entries": [ + { + "id": "asset:chromium", + "name": "Chromium Asset", + "sourceId": "library.blend", + "sourceSha256": "3f6ba6585fc881d00cd3ae39d3c4a20c9993b29b2c8de735b0c9106a6e1d82a7", + "byteLength": 24 + } + ] + }, + "revision": 5, + "dirty": false + }, + "parity": true +} diff --git a/tests/golden/corrective/C3-003/receipt-report.second.json b/tests/golden/corrective/C3-003/receipt-report.second.json new file mode 100644 index 00000000..c2c9e1bf --- /dev/null +++ b/tests/golden/corrective/C3-003/receipt-report.second.json @@ -0,0 +1,129 @@ +{ + "schemaVersion": 1, + "task": "C3-003", + "operation": "CORRECTIVE_ASSET_CATALOG_CHROMIUM_PILOT", + "browser": "chromium", + "queueMutation": false, + "positive": { + "desktop": { + "schemaVersion": 1, + "requestId": "chromium-catalog-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 5, + "mainMutation": "CHANGED", + "delta": { + "addedId": "asset:chromium", + "count": 1 + }, + "persistence": { + "dirty": true + }, + "error": null + }, + "wasm": { + "schemaVersion": 1, + "requestId": "chromium-catalog-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 5, + "mainMutation": "CHANGED", + "delta": { + "addedId": "asset:chromium", + "count": 1 + }, + "persistence": { + "dirty": true + }, + "error": null + }, + "desktopEntries": 1, + "wasmEntries": 1 + }, + "negative": { + "duplicate": { + "schemaVersion": 1, + "requestId": "chromium-catalog-001", + "status": "UNSUPPORTED", + "code": "COMMAND_UNSUPPORTED", + "baseRevision": 5, + "mainRevisionBefore": 5, + "mainRevisionAfter": 5, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_UNSUPPORTED", + "message": "COMMAND_UNSUPPORTED: catalog entry asset:chromium already exists" + } + }, + "missing": { + "schemaVersion": 1, + "requestId": "chromium-catalog-001", + "status": "EXTERNAL_REQUIRED", + "code": "RESOURCE_REQUIRED", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "RESOURCE_REQUIRED", + "message": "RESOURCE_REQUIRED: RESOURCE_REQUIRED: EXTERNAL_LIBRARY provider is required" + } + }, + "revision": { + "schemaVersion": 1, + "requestId": "chromium-catalog-001", + "status": "BLOCKED", + "code": "REVISION_CONFLICT", + "baseRevision": 3, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "REVISION_CONFLICT", + "message": "base revision does not match current Main" + } + }, + "malformed": { + "schemaVersion": 1, + "requestId": "chromium-catalog-001", + "status": "MALFORMED", + "code": "COMMAND_MALFORMED", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_MALFORMED", + "message": "COMMAND_MALFORMED: catalog entry payload is invalid" + } + } + }, + "persistence": { + "value": { + "entries": [ + { + "id": "asset:chromium", + "name": "Chromium Asset", + "sourceId": "library.blend", + "sourceSha256": "3f6ba6585fc881d00cd3ae39d3c4a20c9993b29b2c8de735b0c9106a6e1d82a7", + "byteLength": 24 + } + ] + }, + "revision": 5, + "dirty": false + }, + "parity": true +} diff --git a/tests/golden/corrective/C3-003/source-hashes.json b/tests/golden/corrective/C3-003/source-hashes.json new file mode 100644 index 00000000..d8d0085d --- /dev/null +++ b/tests/golden/corrective/C3-003/source-hashes.json @@ -0,0 +1,12 @@ +{ + "sourceHashes": { + "tests/golden/corrective/C3-002/manifest.json": "411555bb437668f88d10a7a497c708e739157ed981aa5e935df4295d4da6d317", + "web/protocol/corrective-resource-provider.ts": "fdaaaa8bc7e0a7220b08c5813c18e672351ae0d09168f08936bae06fcebb73a3", + "web/protocol/corrective-asset-catalog-command.ts": "e94ef8d6aa7cf427cdd41c4287ee2fd1ddd97342e1e4ae3a91f4f50483e7d8ef", + "web/protocol/corrective-main-transaction.ts": "40567ca8843863d0c1751d06b819402be53f13826f5e54abc29530b8b02308e4", + "web/protocol/corrective-history-store.ts": "aaa69b0198fea9a37e947046f8db8143b75591b35af115d832a8328e258a6821", + "web/app/src/corrective-pilot-bridge.ts": "7a5671fb72182bae3dffb310daa4e66581a02f7649eeb21b638abd9e8e5e5497", + "web/tests/e2e/corrective-asset-catalog-pilot.spec.ts": "e6bc8f6733dbcdf44a246caf20c6362f1e20d7b9abae59dbb964cb9200b52b36", + "tests/golden/corrective/C3-003/determinism.log": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } +} diff --git a/tests/golden/corrective/C4-001/command-exit-codes.json b/tests/golden/corrective/C4-001/command-exit-codes.json new file mode 100644 index 00000000..3fc4b8b8 --- /dev/null +++ b/tests/golden/corrective/C4-001/command-exit-codes.json @@ -0,0 +1,16 @@ +{ + "focusedTest": 0, + "chromiumPilot": 0, + "chromiumPilotSecond": 0, + "determinism": 0, + "receiptGate": 0, + "c3Regression": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0, + "protectedHashCheck": 0, + "sourceHashCheck": 0 +} diff --git a/tests/golden/corrective/C4-001/deterministic-modifier-report.mjs b/tests/golden/corrective/C4-001/deterministic-modifier-report.mjs new file mode 100644 index 00000000..8768bda1 --- /dev/null +++ b/tests/golden/corrective/C4-001/deterministic-modifier-report.mjs @@ -0,0 +1,53 @@ +import assert from "node:assert/strict"; +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import { fileURLToPath, pathToFileURL } from "node:url"; +import ts from "../../../../web/node_modules/typescript/lib/typescript.js"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../../.."); +const temp = fs.mkdtempSync(path.join(os.tmpdir(), "corrective-modifier-report-")); +const compile = (source, output, replacements = []) => { + const input = path.join(root, source); + const result = ts.transpileModule(fs.readFileSync(input, "utf8"), { compilerOptions: { module: ts.ModuleKind.ES2022, target: ts.ScriptTarget.ES2022 }, fileName: input, reportDiagnostics: true }); + assert.deepEqual(result.diagnostics, []); + let text = result.outputText; + for (const [from, to] of replacements) text = text.replaceAll(from, to); + fs.writeFileSync(output, text); +}; + +try { + const files = Object.fromEntries(["corrective-case-runner", "corrective-command-registry", "corrective-main-transaction", "corrective-history-store", "corrective-modifier-command"].map((name) => [name, path.join(temp, `${name}.mjs`)])); + compile("web/protocol/corrective-case-runner.ts", files["corrective-case-runner"]); + compile("web/protocol/corrective-command-registry.ts", files["corrective-command-registry"], [["from \"./corrective-case-runner\"", "from \"./corrective-case-runner.mjs\""]]); + compile("web/protocol/corrective-main-transaction.ts", files["corrective-main-transaction"], [["from \"./corrective-case-runner\"", "from \"./corrective-case-runner.mjs\""]]); + compile("web/protocol/corrective-history-store.ts", files["corrective-history-store"], [["from \"./corrective-main-transaction\"", "from \"./corrective-main-transaction.mjs\""]]); + compile("web/protocol/corrective-modifier-command.ts", files["corrective-modifier-command"], [ + ["from \"./corrective-command-registry\"", "from \"./corrective-command-registry.mjs\""], + ["from \"./corrective-case-runner\"", "from \"./corrective-case-runner.mjs\""], + ["from \"./corrective-main-transaction\"", "from \"./corrective-main-transaction.mjs\""], + ]); + const { CorrectiveHistoryStore } = await import(pathToFileURL(files["corrective-history-store"])); + const { createModifierMain, createModifierRegistry } = await import(pathToFileURL(files["corrective-modifier-command"])); + const fixture = [{ uuid: "modifier:bevel", name: "Pilot Bevel", type: "BEVEL", enabled: false, showViewport: true, showRender: true }]; + const command = (overrides = {}) => ({ schemaVersion: 1, requestId: "modifier-report-001", commandType: "modifierSetEnabled", baseRevision: 7, context: { mainId: "main:modifier", targetKind: "MODIFIER", targetId: "modifier:bevel", editMode: "EDITABLE", authorization: "USER_EDIT", source: { kind: "LOCAL", sha256: "a".repeat(64) } }, payload: { modifierUuid: "modifier:bevel", enabled: true }, ...overrides }); + const desktopMain = createModifierMain(fixture, 7, false); + const wasmMain = createModifierMain(fixture, 7, false); + const desktop = await createModifierRegistry(desktopMain).dispatch("DESKTOP", { command: command(), mainRevision: 7 }); + const wasm = await createModifierRegistry(wasmMain).dispatch("WASM", { command: command(), mainRevision: 7 }); + const negativeMain = createModifierMain(fixture, 7, false); + const negativeRegistry = createModifierRegistry(negativeMain); + const malformed = await negativeRegistry.dispatch("DESKTOP", { command: command({ payload: { modifierUuid: "modifier:bevel", enabled: true, extra: true } }), mainRevision: 7 }); + const stale = await negativeRegistry.dispatch("WASM", { command: command({ baseRevision: 6 }), mainRevision: 7 }); + const unknown = await negativeRegistry.dispatch("DESKTOP", { command: command({ payload: { modifierUuid: "modifier:missing", enabled: true } }), mainRevision: 7 }); + const clone = (value) => ({ modifiers: value.modifiers.map((modifier) => ({ ...modifier })) }); + const history = new CorrectiveHistoryStore({ modifiers: fixture }, 7, false, clone); + await createModifierRegistry(history).dispatch("WASM", { command: command(), mainRevision: 7 }); + const saved = history.save(); + const undone = history.undo(); + const redone = history.redo(); + const reopened = history.reopen(); + process.stdout.write(`${JSON.stringify({ schemaVersion: 1, task: "C4-001", operation: "CORRECTIVE_MODIFIER_POSITIVE_COMMAND", queueMutation: false, positive: { desktop: desktop.result, wasm: wasm.result, desktopMain: desktopMain.snapshot(), wasmMain: wasmMain.snapshot() }, negative: { malformed: malformed.result, stale: stale.result, unknown: unknown.result, rollbackMain: negativeMain.snapshot() }, persistence: { saved, undone, redone, reopened, final: history.snapshot() }, parity: JSON.stringify(desktop.result) === JSON.stringify(wasm.result) && JSON.stringify(desktopMain.snapshot()) === JSON.stringify(wasmMain.snapshot()) }, null, 2)}\n`); +} finally { + fs.rmSync(temp, { recursive: true, force: true }); +} diff --git a/tests/golden/corrective/C4-001/handoff.json b/tests/golden/corrective/C4-001/handoff.json new file mode 100644 index 00000000..6f195b68 --- /dev/null +++ b/tests/golden/corrective/C4-001/handoff.json @@ -0,0 +1,149 @@ +{ + "schemaVersion": 1, + "task": "C4-001", + "status": "done", + "gate": "G4", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C4-001", + "artifactCount": 22, + "artifacts": [ + { + "path": "tests/golden/corrective/C4-001/c3-regression.log", + "sha256": "639e480c842c0af6c8a0c7bf72d563a969c9ec723703e6a0e69ca0cac30359ee", + "bytes": 645 + }, + { + "path": "tests/golden/corrective/C4-001/check-context-governance.log", + "sha256": "7ed574f956f0255482a15f63faedc657fc7eb0fa643d282a430f27a207b5bf8d", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C4-001/check-corrective-plan.log", + "sha256": "706d3db93edace7346dd0be5ccce71974260a43a6ea798d4002d92a8f23b5875", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C4-001/check-task-context.log", + "sha256": "cf9fb3f108cb7febf3d6d17543cb1abf9356174eb34d379652dd288aca6db2d7", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C4-001/command-exit-codes.json", + "sha256": "c57baa31ab77d6dfcb7384d1957bb6e21b01e808083ea6ae50e1e06e1ec4f6ed", + "bytes": 315 + }, + { + "path": "tests/golden/corrective/C4-001/determinism.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C4-001/deterministic-modifier-report.mjs", + "sha256": "65fed1261606fe4135a7587fb6ada504e9be436031654683b80ac8537ccaef3d", + "bytes": 5017 + }, + { + "path": "tests/golden/corrective/C4-001/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C4-001/focused-test.log", + "sha256": "4439d4912fd42f3e8e2344e4a82a0b37a21c4db82007205c9a965b2f26e1b312", + "bytes": 687 + }, + { + "path": "tests/golden/corrective/C4-001/modifier-command.test.mjs", + "sha256": "6ec533d789af661eb98894c0b6288e1454a4d98c3af8812cfcfd8a8c1b83b3a5", + "bytes": 6331 + }, + { + "path": "tests/golden/corrective/C4-001/node-receipt-report.json", + "sha256": "17e31b46c9b27fdb2061c8cb6e14b968b18e70ad1b1497a04c85608569ebe7d0", + "bytes": 5298 + }, + { + "path": "tests/golden/corrective/C4-001/node-receipt-report.second.json", + "sha256": "17e31b46c9b27fdb2061c8cb6e14b968b18e70ad1b1497a04c85608569ebe7d0", + "bytes": 5298 + }, + { + "path": "tests/golden/corrective/C4-001/protected-hash-check.log", + "sha256": "deb15d1fa1d5606bcbe760b066dfba312bd586df82228214668f149385940ac5", + "bytes": 28 + }, + { + "path": "tests/golden/corrective/C4-001/protected-hashes-after.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C4-001/protected-hashes-before.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C4-001/receipt-gate.log", + "sha256": "4e1dffa8260ce5abe1f6a25bfe010973633b184726d53de8515d6ac339e669b8", + "bytes": 86 + }, + { + "path": "tests/golden/corrective/C4-001/receipt-report.json", + "sha256": "64d213f8d3937c06d38cffb919725140624535e835b0b3e7580c6482595c4ef8", + "bytes": 5331 + }, + { + "path": "tests/golden/corrective/C4-001/receipt-report.second.json", + "sha256": "64d213f8d3937c06d38cffb919725140624535e835b0b3e7580c6482595c4ef8", + "bytes": 5331 + }, + { + "path": "tests/golden/corrective/C4-001/source-hash-check.log", + "sha256": "2c558a82a6737aea8af5c449ed08e49c866d8c6b6b11879ed6f380dbe8be3c50", + "bytes": 23 + }, + { + "path": "tests/golden/corrective/C4-001/source-hashes.json", + "sha256": "a9179a1dc45061c8ede8855e5fba0655827c1182062b1c8343f2a889a7506228", + "bytes": 1129 + }, + { + "path": "tests/golden/corrective/C4-001/test-context-governance.log", + "sha256": "4beb23c195ff7e80612a645b4c2c2cbefce18da0c083792e3059f9c998215f88", + "bytes": 2579 + }, + { + "path": "tests/golden/corrective/C4-001/typecheck.log", + "sha256": "f90c14a9694ed7029129a343fa5cc8672e4a59a5fe4b34e7c3098db9c5c5bd1a", + "bytes": 76 + } + ], + "sourceHashes": { + "tests/golden/corrective/C2-003/manifest.json": "386c7c2c656d917b7f74a4317de4022683fc6823a33ac3a2f470990408fcc0ee", + "web/protocol/corrective-command-registry.ts": "cb0553aac346d34d3c2c12501d2bf681c6edd36c7d6ce5de43c6178b42296897", + "web/protocol/corrective-main-transaction.ts": "40567ca8843863d0c1751d06b819402be53f13826f5e54abc29530b8b02308e4", + "web/protocol/corrective-history-store.ts": "aaa69b0198fea9a37e947046f8db8143b75591b35af115d832a8328e258a6821", + "web/protocol/corrective-modifier-command.ts": "3b545bb823f2bccb5a16260d62b083b046a2e07bc140dd177c08878f1dfc0431", + "web/app/src/corrective-pilot-bridge.ts": "520a82905c37938d04536bf0de14383023c1484d12802fa91b25d81cfa8f9350", + "web/tests/e2e/corrective-modifier-pilot.spec.ts": "a69b210b3098974309b6c51e8fde1733fe614b4bef0f9531077f2c6c87051b51", + "tests/golden/corrective/C4-001/modifier-command.test.mjs": "6ec533d789af661eb98894c0b6288e1454a4d98c3af8812cfcfd8a8c1b83b3a5", + "tests/golden/corrective/C4-001/deterministic-modifier-report.mjs": "65fed1261606fe4135a7587fb6ada504e9be436031654683b80ac8537ccaef3d" + }, + "commandExitCodes": { + "focusedTest": 0, + "chromiumPilot": 0, + "chromiumPilotSecond": 0, + "determinism": 0, + "receiptGate": 0, + "c3Regression": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0, + "protectedHashCheck": 0, + "sourceHashCheck": 0 + }, + "nextCorrectiveTask": "C4-002" +} diff --git a/tests/golden/corrective/C4-001/manifest.json b/tests/golden/corrective/C4-001/manifest.json new file mode 100644 index 00000000..6f195b68 --- /dev/null +++ b/tests/golden/corrective/C4-001/manifest.json @@ -0,0 +1,149 @@ +{ + "schemaVersion": 1, + "task": "C4-001", + "status": "done", + "gate": "G4", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C4-001", + "artifactCount": 22, + "artifacts": [ + { + "path": "tests/golden/corrective/C4-001/c3-regression.log", + "sha256": "639e480c842c0af6c8a0c7bf72d563a969c9ec723703e6a0e69ca0cac30359ee", + "bytes": 645 + }, + { + "path": "tests/golden/corrective/C4-001/check-context-governance.log", + "sha256": "7ed574f956f0255482a15f63faedc657fc7eb0fa643d282a430f27a207b5bf8d", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C4-001/check-corrective-plan.log", + "sha256": "706d3db93edace7346dd0be5ccce71974260a43a6ea798d4002d92a8f23b5875", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C4-001/check-task-context.log", + "sha256": "cf9fb3f108cb7febf3d6d17543cb1abf9356174eb34d379652dd288aca6db2d7", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C4-001/command-exit-codes.json", + "sha256": "c57baa31ab77d6dfcb7384d1957bb6e21b01e808083ea6ae50e1e06e1ec4f6ed", + "bytes": 315 + }, + { + "path": "tests/golden/corrective/C4-001/determinism.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C4-001/deterministic-modifier-report.mjs", + "sha256": "65fed1261606fe4135a7587fb6ada504e9be436031654683b80ac8537ccaef3d", + "bytes": 5017 + }, + { + "path": "tests/golden/corrective/C4-001/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C4-001/focused-test.log", + "sha256": "4439d4912fd42f3e8e2344e4a82a0b37a21c4db82007205c9a965b2f26e1b312", + "bytes": 687 + }, + { + "path": "tests/golden/corrective/C4-001/modifier-command.test.mjs", + "sha256": "6ec533d789af661eb98894c0b6288e1454a4d98c3af8812cfcfd8a8c1b83b3a5", + "bytes": 6331 + }, + { + "path": "tests/golden/corrective/C4-001/node-receipt-report.json", + "sha256": "17e31b46c9b27fdb2061c8cb6e14b968b18e70ad1b1497a04c85608569ebe7d0", + "bytes": 5298 + }, + { + "path": "tests/golden/corrective/C4-001/node-receipt-report.second.json", + "sha256": "17e31b46c9b27fdb2061c8cb6e14b968b18e70ad1b1497a04c85608569ebe7d0", + "bytes": 5298 + }, + { + "path": "tests/golden/corrective/C4-001/protected-hash-check.log", + "sha256": "deb15d1fa1d5606bcbe760b066dfba312bd586df82228214668f149385940ac5", + "bytes": 28 + }, + { + "path": "tests/golden/corrective/C4-001/protected-hashes-after.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C4-001/protected-hashes-before.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C4-001/receipt-gate.log", + "sha256": "4e1dffa8260ce5abe1f6a25bfe010973633b184726d53de8515d6ac339e669b8", + "bytes": 86 + }, + { + "path": "tests/golden/corrective/C4-001/receipt-report.json", + "sha256": "64d213f8d3937c06d38cffb919725140624535e835b0b3e7580c6482595c4ef8", + "bytes": 5331 + }, + { + "path": "tests/golden/corrective/C4-001/receipt-report.second.json", + "sha256": "64d213f8d3937c06d38cffb919725140624535e835b0b3e7580c6482595c4ef8", + "bytes": 5331 + }, + { + "path": "tests/golden/corrective/C4-001/source-hash-check.log", + "sha256": "2c558a82a6737aea8af5c449ed08e49c866d8c6b6b11879ed6f380dbe8be3c50", + "bytes": 23 + }, + { + "path": "tests/golden/corrective/C4-001/source-hashes.json", + "sha256": "a9179a1dc45061c8ede8855e5fba0655827c1182062b1c8343f2a889a7506228", + "bytes": 1129 + }, + { + "path": "tests/golden/corrective/C4-001/test-context-governance.log", + "sha256": "4beb23c195ff7e80612a645b4c2c2cbefce18da0c083792e3059f9c998215f88", + "bytes": 2579 + }, + { + "path": "tests/golden/corrective/C4-001/typecheck.log", + "sha256": "f90c14a9694ed7029129a343fa5cc8672e4a59a5fe4b34e7c3098db9c5c5bd1a", + "bytes": 76 + } + ], + "sourceHashes": { + "tests/golden/corrective/C2-003/manifest.json": "386c7c2c656d917b7f74a4317de4022683fc6823a33ac3a2f470990408fcc0ee", + "web/protocol/corrective-command-registry.ts": "cb0553aac346d34d3c2c12501d2bf681c6edd36c7d6ce5de43c6178b42296897", + "web/protocol/corrective-main-transaction.ts": "40567ca8843863d0c1751d06b819402be53f13826f5e54abc29530b8b02308e4", + "web/protocol/corrective-history-store.ts": "aaa69b0198fea9a37e947046f8db8143b75591b35af115d832a8328e258a6821", + "web/protocol/corrective-modifier-command.ts": "3b545bb823f2bccb5a16260d62b083b046a2e07bc140dd177c08878f1dfc0431", + "web/app/src/corrective-pilot-bridge.ts": "520a82905c37938d04536bf0de14383023c1484d12802fa91b25d81cfa8f9350", + "web/tests/e2e/corrective-modifier-pilot.spec.ts": "a69b210b3098974309b6c51e8fde1733fe614b4bef0f9531077f2c6c87051b51", + "tests/golden/corrective/C4-001/modifier-command.test.mjs": "6ec533d789af661eb98894c0b6288e1454a4d98c3af8812cfcfd8a8c1b83b3a5", + "tests/golden/corrective/C4-001/deterministic-modifier-report.mjs": "65fed1261606fe4135a7587fb6ada504e9be436031654683b80ac8537ccaef3d" + }, + "commandExitCodes": { + "focusedTest": 0, + "chromiumPilot": 0, + "chromiumPilotSecond": 0, + "determinism": 0, + "receiptGate": 0, + "c3Regression": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0, + "protectedHashCheck": 0, + "sourceHashCheck": 0 + }, + "nextCorrectiveTask": "C4-002" +} diff --git a/tests/golden/corrective/C4-001/modifier-command.test.mjs b/tests/golden/corrective/C4-001/modifier-command.test.mjs new file mode 100644 index 00000000..32b22818 --- /dev/null +++ b/tests/golden/corrective/C4-001/modifier-command.test.mjs @@ -0,0 +1,112 @@ +import assert from "node:assert/strict"; +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import test from "node:test"; +import { fileURLToPath, pathToFileURL } from "node:url"; +import ts from "../../../../web/node_modules/typescript/lib/typescript.js"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../../.."); +const temp = fs.mkdtempSync(path.join(os.tmpdir(), "corrective-modifier-command-")); +const compile = (source, output, replacements = []) => { + const input = path.join(root, source); + const result = ts.transpileModule(fs.readFileSync(input, "utf8"), { + compilerOptions: { module: ts.ModuleKind.ES2022, target: ts.ScriptTarget.ES2022 }, + fileName: input, + reportDiagnostics: true, + }); + assert.deepEqual(result.diagnostics, []); + let text = result.outputText; + for (const [from, to] of replacements) text = text.replaceAll(from, to); + fs.writeFileSync(output, text); +}; + +try { + const files = { + runner: path.join(temp, "corrective-case-runner.mjs"), + registry: path.join(temp, "corrective-command-registry.mjs"), + tx: path.join(temp, "corrective-main-transaction.mjs"), + history: path.join(temp, "corrective-history-store.mjs"), + modifier: path.join(temp, "corrective-modifier-command.mjs"), + }; + compile("web/protocol/corrective-case-runner.ts", files.runner); + compile("web/protocol/corrective-command-registry.ts", files.registry, [["from \"./corrective-case-runner\"", "from \"./corrective-case-runner.mjs\""]]); + compile("web/protocol/corrective-main-transaction.ts", files.tx, [["from \"./corrective-case-runner\"", "from \"./corrective-case-runner.mjs\""]]); + compile("web/protocol/corrective-history-store.ts", files.history, [["from \"./corrective-main-transaction\"", "from \"./corrective-main-transaction.mjs\""]]); + compile("web/protocol/corrective-modifier-command.ts", files.modifier, [ + ["from \"./corrective-command-registry\"", "from \"./corrective-command-registry.mjs\""], + ["from \"./corrective-case-runner\"", "from \"./corrective-case-runner.mjs\""], + ["from \"./corrective-main-transaction\"", "from \"./corrective-main-transaction.mjs\""], + ]); + const { CorrectiveCommandRegistry } = await import(pathToFileURL(files.registry)); + const { CorrectiveHistoryStore } = await import(pathToFileURL(files.history)); + const { createModifierMain, createModifierRegistry } = await import(pathToFileURL(files.modifier)); + + const fixture = [{ uuid: "modifier:bevel", name: "Pilot Bevel", type: "BEVEL", enabled: false, showViewport: true, showRender: true }]; + const command = (overrides = {}) => ({ + schemaVersion: 1, + requestId: "modifier-pilot-001", + commandType: "modifierSetEnabled", + baseRevision: 7, + context: { + mainId: "main:modifier", + targetKind: "MODIFIER", + targetId: "modifier:bevel", + editMode: "EDITABLE", + authorization: "USER_EDIT", + source: { kind: "LOCAL", sha256: "a".repeat(64) }, + }, + payload: { modifierUuid: "modifier:bevel", enabled: true }, + ...overrides, + }); + const clone = (value) => ({ modifiers: value.modifiers.map((modifier) => ({ ...modifier })) }); + + test("desktop and WASM apply the same modifier delta atomically", async () => { + const desktopMain = createModifierMain(fixture, 7, false); + const wasmMain = createModifierMain(fixture, 7, false); + const desktop = await createModifierRegistry(desktopMain).dispatch("DESKTOP", { command: command(), mainRevision: 7 }); + const wasm = await createModifierRegistry(wasmMain).dispatch("WASM", { command: command(), mainRevision: 7 }); + assert.equal(desktop.result.status, "FINISHED"); + assert.deepEqual(desktop.result, wasm.result); + assert.deepEqual(desktopMain.snapshot(), wasmMain.snapshot()); + assert.deepEqual(desktop.result.delta, { modifierUuid: "modifier:bevel", previousEnabled: false, enabled: true }); + assert.equal(desktopMain.snapshot().value.modifiers[0].enabled, true); + assert.equal(desktopMain.snapshot().dirty, true); + }); + + test("malformed, stale, wrong target, and unknown modifiers do not mutate Main", async () => { + const main = createModifierMain(fixture, 7, false); + const registry = createModifierRegistry(main); + const malformed = await registry.dispatch("DESKTOP", { command: command({ payload: { modifierUuid: "modifier:bevel", enabled: true, extra: 1 } }), mainRevision: 7 }); + assert.equal(malformed.result.code, "COMMAND_MALFORMED"); + assert.equal(main.snapshot().revision, 7); + const stale = await registry.dispatch("WASM", { command: command({ baseRevision: 6 }), mainRevision: 7 }); + assert.equal(stale.result.code, "REVISION_CONFLICT"); + const wrongTarget = await registry.dispatch("WASM", { command: command({ context: { ...command().context, targetKind: "MESH" } }), mainRevision: 7 }); + assert.equal(wrongTarget.result.code, "INVALID_CONTEXT"); + const unknown = await registry.dispatch("DESKTOP", { command: command({ payload: { modifierUuid: "modifier:missing", enabled: true } }), mainRevision: 7 }); + assert.equal(unknown.result.code, "COMMAND_UNSUPPORTED"); + assert.deepEqual(main.snapshot().value.modifiers, fixture); + assert.equal(main.snapshot().revision, 7); + assert.equal(main.snapshot().dirty, false); + }); + + test("registry is explicit and history preserves save, undo, redo, and reopen", async () => { + const main = createModifierMain(fixture, 7, false); + const registry = createModifierRegistry(main); + assert.ok(registry instanceof CorrectiveCommandRegistry); + assert.deepEqual(registry.list(), ["modifierSetEnabled"]); + const history = new CorrectiveHistoryStore({ modifiers: fixture }, 7, false, clone); + const result = await createModifierRegistry(history).dispatch("WASM", { command: command(), mainRevision: 7 }); + assert.equal(result.result.status, "FINISHED"); + const saved = history.save(); + assert.equal(saved.revision, 8); + assert.equal(saved.dirty, false); + assert.equal(history.undo().value.modifiers[0].enabled, false); + assert.equal(history.redo().value.modifiers[0].enabled, true); + assert.equal(history.reopen().value.modifiers[0].enabled, true); + assert.equal(history.snapshot().dirty, false); + }); +} finally { + fs.rmSync(temp, { recursive: true, force: true }); +} diff --git a/tests/golden/corrective/C4-001/node-receipt-report.json b/tests/golden/corrective/C4-001/node-receipt-report.json new file mode 100644 index 00000000..3e151163 --- /dev/null +++ b/tests/golden/corrective/C4-001/node-receipt-report.json @@ -0,0 +1,227 @@ +{ + "schemaVersion": 1, + "task": "C4-001", + "operation": "CORRECTIVE_MODIFIER_POSITIVE_COMMAND", + "queueMutation": false, + "positive": { + "desktop": { + "schemaVersion": 1, + "requestId": "modifier-report-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 7, + "mainRevisionBefore": 7, + "mainRevisionAfter": 8, + "mainMutation": "CHANGED", + "delta": { + "modifierUuid": "modifier:bevel", + "previousEnabled": false, + "enabled": true + }, + "persistence": { + "dirty": true + }, + "error": null + }, + "wasm": { + "schemaVersion": 1, + "requestId": "modifier-report-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 7, + "mainRevisionBefore": 7, + "mainRevisionAfter": 8, + "mainMutation": "CHANGED", + "delta": { + "modifierUuid": "modifier:bevel", + "previousEnabled": false, + "enabled": true + }, + "persistence": { + "dirty": true + }, + "error": null + }, + "desktopMain": { + "value": { + "modifiers": [ + { + "uuid": "modifier:bevel", + "name": "Pilot Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 8, + "dirty": true + }, + "wasmMain": { + "value": { + "modifiers": [ + { + "uuid": "modifier:bevel", + "name": "Pilot Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 8, + "dirty": true + } + }, + "negative": { + "malformed": { + "schemaVersion": 1, + "requestId": "modifier-report-001", + "status": "MALFORMED", + "code": "COMMAND_MALFORMED", + "baseRevision": 7, + "mainRevisionBefore": 7, + "mainRevisionAfter": 7, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_MALFORMED", + "message": "COMMAND_MALFORMED: modifier payload must contain only modifierUuid and enabled" + } + }, + "stale": { + "schemaVersion": 1, + "requestId": "modifier-report-001", + "status": "BLOCKED", + "code": "REVISION_CONFLICT", + "baseRevision": 6, + "mainRevisionBefore": 7, + "mainRevisionAfter": 7, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "REVISION_CONFLICT", + "message": "base revision does not match current Main" + } + }, + "unknown": { + "schemaVersion": 1, + "requestId": "modifier-report-001", + "status": "UNSUPPORTED", + "code": "COMMAND_UNSUPPORTED", + "baseRevision": 7, + "mainRevisionBefore": 7, + "mainRevisionAfter": 7, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_UNSUPPORTED", + "message": "COMMAND_UNSUPPORTED: modifier modifier:missing does not exist" + } + }, + "rollbackMain": { + "value": { + "modifiers": [ + { + "uuid": "modifier:bevel", + "name": "Pilot Bevel", + "type": "BEVEL", + "enabled": false, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 7, + "dirty": false + } + }, + "persistence": { + "saved": { + "value": { + "modifiers": [ + { + "uuid": "modifier:bevel", + "name": "Pilot Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 8, + "dirty": false + }, + "undone": { + "value": { + "modifiers": [ + { + "uuid": "modifier:bevel", + "name": "Pilot Bevel", + "type": "BEVEL", + "enabled": false, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 7, + "dirty": false + }, + "redone": { + "value": { + "modifiers": [ + { + "uuid": "modifier:bevel", + "name": "Pilot Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 8, + "dirty": false + }, + "reopened": { + "value": { + "modifiers": [ + { + "uuid": "modifier:bevel", + "name": "Pilot Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 8, + "dirty": false + }, + "final": { + "value": { + "modifiers": [ + { + "uuid": "modifier:bevel", + "name": "Pilot Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 8, + "dirty": false + } + }, + "parity": true +} diff --git a/tests/golden/corrective/C4-001/node-receipt-report.second.json b/tests/golden/corrective/C4-001/node-receipt-report.second.json new file mode 100644 index 00000000..3e151163 --- /dev/null +++ b/tests/golden/corrective/C4-001/node-receipt-report.second.json @@ -0,0 +1,227 @@ +{ + "schemaVersion": 1, + "task": "C4-001", + "operation": "CORRECTIVE_MODIFIER_POSITIVE_COMMAND", + "queueMutation": false, + "positive": { + "desktop": { + "schemaVersion": 1, + "requestId": "modifier-report-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 7, + "mainRevisionBefore": 7, + "mainRevisionAfter": 8, + "mainMutation": "CHANGED", + "delta": { + "modifierUuid": "modifier:bevel", + "previousEnabled": false, + "enabled": true + }, + "persistence": { + "dirty": true + }, + "error": null + }, + "wasm": { + "schemaVersion": 1, + "requestId": "modifier-report-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 7, + "mainRevisionBefore": 7, + "mainRevisionAfter": 8, + "mainMutation": "CHANGED", + "delta": { + "modifierUuid": "modifier:bevel", + "previousEnabled": false, + "enabled": true + }, + "persistence": { + "dirty": true + }, + "error": null + }, + "desktopMain": { + "value": { + "modifiers": [ + { + "uuid": "modifier:bevel", + "name": "Pilot Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 8, + "dirty": true + }, + "wasmMain": { + "value": { + "modifiers": [ + { + "uuid": "modifier:bevel", + "name": "Pilot Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 8, + "dirty": true + } + }, + "negative": { + "malformed": { + "schemaVersion": 1, + "requestId": "modifier-report-001", + "status": "MALFORMED", + "code": "COMMAND_MALFORMED", + "baseRevision": 7, + "mainRevisionBefore": 7, + "mainRevisionAfter": 7, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_MALFORMED", + "message": "COMMAND_MALFORMED: modifier payload must contain only modifierUuid and enabled" + } + }, + "stale": { + "schemaVersion": 1, + "requestId": "modifier-report-001", + "status": "BLOCKED", + "code": "REVISION_CONFLICT", + "baseRevision": 6, + "mainRevisionBefore": 7, + "mainRevisionAfter": 7, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "REVISION_CONFLICT", + "message": "base revision does not match current Main" + } + }, + "unknown": { + "schemaVersion": 1, + "requestId": "modifier-report-001", + "status": "UNSUPPORTED", + "code": "COMMAND_UNSUPPORTED", + "baseRevision": 7, + "mainRevisionBefore": 7, + "mainRevisionAfter": 7, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_UNSUPPORTED", + "message": "COMMAND_UNSUPPORTED: modifier modifier:missing does not exist" + } + }, + "rollbackMain": { + "value": { + "modifiers": [ + { + "uuid": "modifier:bevel", + "name": "Pilot Bevel", + "type": "BEVEL", + "enabled": false, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 7, + "dirty": false + } + }, + "persistence": { + "saved": { + "value": { + "modifiers": [ + { + "uuid": "modifier:bevel", + "name": "Pilot Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 8, + "dirty": false + }, + "undone": { + "value": { + "modifiers": [ + { + "uuid": "modifier:bevel", + "name": "Pilot Bevel", + "type": "BEVEL", + "enabled": false, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 7, + "dirty": false + }, + "redone": { + "value": { + "modifiers": [ + { + "uuid": "modifier:bevel", + "name": "Pilot Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 8, + "dirty": false + }, + "reopened": { + "value": { + "modifiers": [ + { + "uuid": "modifier:bevel", + "name": "Pilot Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 8, + "dirty": false + }, + "final": { + "value": { + "modifiers": [ + { + "uuid": "modifier:bevel", + "name": "Pilot Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 8, + "dirty": false + } + }, + "parity": true +} diff --git a/tests/golden/corrective/C4-001/protected-hashes-after.txt b/tests/golden/corrective/C4-001/protected-hashes-after.txt new file mode 100644 index 00000000..a0d2c8ba --- /dev/null +++ b/tests/golden/corrective/C4-001/protected-hashes-after.txt @@ -0,0 +1,7 @@ +5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1 docs/EXECUTION_QUEUE.md +32f4c11ebf8563f3aa500583f3979c1b38d711cc7328a428968118f0375b90b4 tests/golden/M15-03A/completed-gap-tasks.json +edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17 tests/golden/M15-03A/next-task-plan.json +da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d tests/golden/M15-03A/task-catalog.jsonl +ed591788c48c1b089decd2aa187f66728b5cc66a73c2b1c0c46c1a46ec4a0ae0 tests/golden/M15-03A/task-index.json +3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1 tests/golden/M16-GAP-00273/manifest.json +5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8 docs/status/M16-GAP-00273.md diff --git a/tests/golden/corrective/C4-001/protected-hashes-before.txt b/tests/golden/corrective/C4-001/protected-hashes-before.txt new file mode 100644 index 00000000..a0d2c8ba --- /dev/null +++ b/tests/golden/corrective/C4-001/protected-hashes-before.txt @@ -0,0 +1,7 @@ +5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1 docs/EXECUTION_QUEUE.md +32f4c11ebf8563f3aa500583f3979c1b38d711cc7328a428968118f0375b90b4 tests/golden/M15-03A/completed-gap-tasks.json +edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17 tests/golden/M15-03A/next-task-plan.json +da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d tests/golden/M15-03A/task-catalog.jsonl +ed591788c48c1b089decd2aa187f66728b5cc66a73c2b1c0c46c1a46ec4a0ae0 tests/golden/M15-03A/task-index.json +3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1 tests/golden/M16-GAP-00273/manifest.json +5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8 docs/status/M16-GAP-00273.md diff --git a/tests/golden/corrective/C4-001/receipt-report.json b/tests/golden/corrective/C4-001/receipt-report.json new file mode 100644 index 00000000..6f3ad7b9 --- /dev/null +++ b/tests/golden/corrective/C4-001/receipt-report.json @@ -0,0 +1,228 @@ +{ + "schemaVersion": 1, + "task": "C4-001", + "operation": "CORRECTIVE_MODIFIER_CHROMIUM_PILOT", + "browser": "chromium", + "queueMutation": false, + "positive": { + "desktop": { + "schemaVersion": 1, + "requestId": "chromium-modifier-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 7, + "mainRevisionBefore": 7, + "mainRevisionAfter": 8, + "mainMutation": "CHANGED", + "delta": { + "modifierUuid": "modifier:bevel", + "previousEnabled": false, + "enabled": true + }, + "persistence": { + "dirty": true + }, + "error": null + }, + "wasm": { + "schemaVersion": 1, + "requestId": "chromium-modifier-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 7, + "mainRevisionBefore": 7, + "mainRevisionAfter": 8, + "mainMutation": "CHANGED", + "delta": { + "modifierUuid": "modifier:bevel", + "previousEnabled": false, + "enabled": true + }, + "persistence": { + "dirty": true + }, + "error": null + }, + "desktopMain": { + "value": { + "modifiers": [ + { + "uuid": "modifier:bevel", + "name": "Pilot Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 8, + "dirty": true + }, + "wasmMain": { + "value": { + "modifiers": [ + { + "uuid": "modifier:bevel", + "name": "Pilot Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 8, + "dirty": true + } + }, + "negative": { + "malformed": { + "schemaVersion": 1, + "requestId": "chromium-modifier-001", + "status": "MALFORMED", + "code": "COMMAND_MALFORMED", + "baseRevision": 7, + "mainRevisionBefore": 7, + "mainRevisionAfter": 7, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_MALFORMED", + "message": "COMMAND_MALFORMED: modifier payload must contain only modifierUuid and enabled" + } + }, + "stale": { + "schemaVersion": 1, + "requestId": "chromium-modifier-001", + "status": "BLOCKED", + "code": "REVISION_CONFLICT", + "baseRevision": 6, + "mainRevisionBefore": 7, + "mainRevisionAfter": 7, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "REVISION_CONFLICT", + "message": "base revision does not match current Main" + } + }, + "unknown": { + "schemaVersion": 1, + "requestId": "chromium-modifier-001", + "status": "UNSUPPORTED", + "code": "COMMAND_UNSUPPORTED", + "baseRevision": 7, + "mainRevisionBefore": 7, + "mainRevisionAfter": 7, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_UNSUPPORTED", + "message": "COMMAND_UNSUPPORTED: modifier modifier:missing does not exist" + } + }, + "rollbackMain": { + "value": { + "modifiers": [ + { + "uuid": "modifier:bevel", + "name": "Pilot Bevel", + "type": "BEVEL", + "enabled": false, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 7, + "dirty": false + } + }, + "persistence": { + "saved": { + "value": { + "modifiers": [ + { + "uuid": "modifier:bevel", + "name": "Pilot Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 8, + "dirty": false + }, + "undone": { + "value": { + "modifiers": [ + { + "uuid": "modifier:bevel", + "name": "Pilot Bevel", + "type": "BEVEL", + "enabled": false, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 7, + "dirty": false + }, + "redone": { + "value": { + "modifiers": [ + { + "uuid": "modifier:bevel", + "name": "Pilot Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 8, + "dirty": false + }, + "reopened": { + "value": { + "modifiers": [ + { + "uuid": "modifier:bevel", + "name": "Pilot Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 8, + "dirty": false + }, + "final": { + "value": { + "modifiers": [ + { + "uuid": "modifier:bevel", + "name": "Pilot Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 8, + "dirty": false + } + }, + "parity": true +} diff --git a/tests/golden/corrective/C4-001/receipt-report.second.json b/tests/golden/corrective/C4-001/receipt-report.second.json new file mode 100644 index 00000000..6f3ad7b9 --- /dev/null +++ b/tests/golden/corrective/C4-001/receipt-report.second.json @@ -0,0 +1,228 @@ +{ + "schemaVersion": 1, + "task": "C4-001", + "operation": "CORRECTIVE_MODIFIER_CHROMIUM_PILOT", + "browser": "chromium", + "queueMutation": false, + "positive": { + "desktop": { + "schemaVersion": 1, + "requestId": "chromium-modifier-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 7, + "mainRevisionBefore": 7, + "mainRevisionAfter": 8, + "mainMutation": "CHANGED", + "delta": { + "modifierUuid": "modifier:bevel", + "previousEnabled": false, + "enabled": true + }, + "persistence": { + "dirty": true + }, + "error": null + }, + "wasm": { + "schemaVersion": 1, + "requestId": "chromium-modifier-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 7, + "mainRevisionBefore": 7, + "mainRevisionAfter": 8, + "mainMutation": "CHANGED", + "delta": { + "modifierUuid": "modifier:bevel", + "previousEnabled": false, + "enabled": true + }, + "persistence": { + "dirty": true + }, + "error": null + }, + "desktopMain": { + "value": { + "modifiers": [ + { + "uuid": "modifier:bevel", + "name": "Pilot Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 8, + "dirty": true + }, + "wasmMain": { + "value": { + "modifiers": [ + { + "uuid": "modifier:bevel", + "name": "Pilot Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 8, + "dirty": true + } + }, + "negative": { + "malformed": { + "schemaVersion": 1, + "requestId": "chromium-modifier-001", + "status": "MALFORMED", + "code": "COMMAND_MALFORMED", + "baseRevision": 7, + "mainRevisionBefore": 7, + "mainRevisionAfter": 7, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_MALFORMED", + "message": "COMMAND_MALFORMED: modifier payload must contain only modifierUuid and enabled" + } + }, + "stale": { + "schemaVersion": 1, + "requestId": "chromium-modifier-001", + "status": "BLOCKED", + "code": "REVISION_CONFLICT", + "baseRevision": 6, + "mainRevisionBefore": 7, + "mainRevisionAfter": 7, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "REVISION_CONFLICT", + "message": "base revision does not match current Main" + } + }, + "unknown": { + "schemaVersion": 1, + "requestId": "chromium-modifier-001", + "status": "UNSUPPORTED", + "code": "COMMAND_UNSUPPORTED", + "baseRevision": 7, + "mainRevisionBefore": 7, + "mainRevisionAfter": 7, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_UNSUPPORTED", + "message": "COMMAND_UNSUPPORTED: modifier modifier:missing does not exist" + } + }, + "rollbackMain": { + "value": { + "modifiers": [ + { + "uuid": "modifier:bevel", + "name": "Pilot Bevel", + "type": "BEVEL", + "enabled": false, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 7, + "dirty": false + } + }, + "persistence": { + "saved": { + "value": { + "modifiers": [ + { + "uuid": "modifier:bevel", + "name": "Pilot Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 8, + "dirty": false + }, + "undone": { + "value": { + "modifiers": [ + { + "uuid": "modifier:bevel", + "name": "Pilot Bevel", + "type": "BEVEL", + "enabled": false, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 7, + "dirty": false + }, + "redone": { + "value": { + "modifiers": [ + { + "uuid": "modifier:bevel", + "name": "Pilot Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 8, + "dirty": false + }, + "reopened": { + "value": { + "modifiers": [ + { + "uuid": "modifier:bevel", + "name": "Pilot Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 8, + "dirty": false + }, + "final": { + "value": { + "modifiers": [ + { + "uuid": "modifier:bevel", + "name": "Pilot Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 8, + "dirty": false + } + }, + "parity": true +} diff --git a/tests/golden/corrective/C4-001/source-hashes.json b/tests/golden/corrective/C4-001/source-hashes.json new file mode 100644 index 00000000..7db28e49 --- /dev/null +++ b/tests/golden/corrective/C4-001/source-hashes.json @@ -0,0 +1,13 @@ +{ + "sourceHashes": { + "tests/golden/corrective/C2-003/manifest.json": "386c7c2c656d917b7f74a4317de4022683fc6823a33ac3a2f470990408fcc0ee", + "web/protocol/corrective-command-registry.ts": "cb0553aac346d34d3c2c12501d2bf681c6edd36c7d6ce5de43c6178b42296897", + "web/protocol/corrective-main-transaction.ts": "40567ca8843863d0c1751d06b819402be53f13826f5e54abc29530b8b02308e4", + "web/protocol/corrective-history-store.ts": "aaa69b0198fea9a37e947046f8db8143b75591b35af115d832a8328e258a6821", + "web/protocol/corrective-modifier-command.ts": "3b545bb823f2bccb5a16260d62b083b046a2e07bc140dd177c08878f1dfc0431", + "web/app/src/corrective-pilot-bridge.ts": "520a82905c37938d04536bf0de14383023c1484d12802fa91b25d81cfa8f9350", + "web/tests/e2e/corrective-modifier-pilot.spec.ts": "a69b210b3098974309b6c51e8fde1733fe614b4bef0f9531077f2c6c87051b51", + "tests/golden/corrective/C4-001/modifier-command.test.mjs": "6ec533d789af661eb98894c0b6288e1454a4d98c3af8812cfcfd8a8c1b83b3a5", + "tests/golden/corrective/C4-001/deterministic-modifier-report.mjs": "65fed1261606fe4135a7587fb6ada504e9be436031654683b80ac8537ccaef3d" + } +} diff --git a/tests/golden/corrective/C4-002/command-exit-codes.json b/tests/golden/corrective/C4-002/command-exit-codes.json new file mode 100644 index 00000000..25f53214 --- /dev/null +++ b/tests/golden/corrective/C4-002/command-exit-codes.json @@ -0,0 +1,16 @@ +{ + "focusedTest": 0, + "chromiumPilot": 0, + "chromiumPilotSecond": 0, + "determinism": 0, + "receiptGate": 0, + "c4_001Regression": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0, + "protectedHashCheck": 0, + "sourceHashCheck": 0 +} diff --git a/tests/golden/corrective/C4-002/deterministic-mesh-report.mjs b/tests/golden/corrective/C4-002/deterministic-mesh-report.mjs new file mode 100644 index 00000000..acaea788 --- /dev/null +++ b/tests/golden/corrective/C4-002/deterministic-mesh-report.mjs @@ -0,0 +1,28 @@ +import assert from "node:assert/strict"; +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import { fileURLToPath, pathToFileURL } from "node:url"; +import ts from "../../../../web/node_modules/typescript/lib/typescript.js"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../../.."); +const temp = fs.mkdtempSync(path.join(os.tmpdir(), "corrective-mesh-report-")); +const compile = (source, output, replacements = []) => { + const input = path.join(root, source); const result = ts.transpileModule(fs.readFileSync(input, "utf8"), { compilerOptions: { module: ts.ModuleKind.ES2022, target: ts.ScriptTarget.ES2022 }, fileName: input, reportDiagnostics: true }); assert.deepEqual(result.diagnostics, []); let text = result.outputText; for (const [from, to] of replacements) text = text.replaceAll(from, to); fs.writeFileSync(output, text); +}; +try { + const names = ["corrective-case-runner", "corrective-command-registry", "corrective-main-transaction", "corrective-history-store", "corrective-mesh-command"]; + const files = Object.fromEntries(names.map((name) => [name, path.join(temp, `${name}.mjs`)])); + compile("web/protocol/corrective-case-runner.ts", files["corrective-case-runner"]); + compile("web/protocol/corrective-command-registry.ts", files["corrective-command-registry"], [["from \"./corrective-case-runner\"", "from \"./corrective-case-runner.mjs\""]]); + compile("web/protocol/corrective-main-transaction.ts", files["corrective-main-transaction"], [["from \"./corrective-case-runner\"", "from \"./corrective-case-runner.mjs\""]]); + compile("web/protocol/corrective-history-store.ts", files["corrective-history-store"], [["from \"./corrective-main-transaction\"", "from \"./corrective-main-transaction.mjs\""]]); + compile("web/protocol/corrective-mesh-command.ts", files["corrective-mesh-command"], [["from \"./corrective-command-registry\"", "from \"./corrective-command-registry.mjs\""], ["from \"./corrective-case-runner\"", "from \"./corrective-case-runner.mjs\""], ["from \"./corrective-main-transaction\"", "from \"./corrective-main-transaction.mjs\""]]); + const { CorrectiveHistoryStore } = await import(pathToFileURL(files["corrective-history-store"])); const { createMeshMain, createMeshRegistry } = await import(pathToFileURL(files["corrective-mesh-command"])); + const fixture = [{ id: "vertex:0", x: 1, y: 2, z: 3 }, { id: "vertex:1", x: 0, y: 0, z: 0 }]; + const command = (overrides = {}) => ({ schemaVersion: 1, requestId: "mesh-report-001", commandType: "meshTranslateVertex", baseRevision: 9, context: { mainId: "main:mesh", targetKind: "MESH", targetId: "mesh:cube", editMode: "EDITABLE", authorization: "USER_EDIT", source: { kind: "LOCAL", sha256: "b".repeat(64) } }, payload: { vertexId: "vertex:0", delta: { x: 0.5, y: -1, z: 2 } }, ...overrides }); + const desktopMain = createMeshMain(fixture, 9, false); const wasmMain = createMeshMain(fixture, 9, false); const desktop = await createMeshRegistry(desktopMain).dispatch("DESKTOP", { command: command(), mainRevision: 9 }); const wasm = await createMeshRegistry(wasmMain).dispatch("WASM", { command: command(), mainRevision: 9 }); + const negativeMain = createMeshMain(fixture, 9, false); const negativeRegistry = createMeshRegistry(negativeMain); const malformed = await negativeRegistry.dispatch("DESKTOP", { command: command({ payload: { vertexId: "vertex:0", delta: { x: 0.5, y: -1, z: 2, extra: true } } }), mainRevision: 9 }); const stale = await negativeRegistry.dispatch("WASM", { command: command({ baseRevision: 8 }), mainRevision: 9 }); const unknown = await negativeRegistry.dispatch("DESKTOP", { command: command({ payload: { vertexId: "vertex:missing", delta: { x: 0.5, y: -1, z: 2 } } }), mainRevision: 9 }); + const clone = (value) => ({ vertices: value.vertices.map((vertex) => ({ ...vertex })) }); const history = new CorrectiveHistoryStore({ vertices: fixture }, 9, false, clone); await createMeshRegistry(history).dispatch("WASM", { command: command(), mainRevision: 9 }); const saved = history.save(); const undone = history.undo(); const redone = history.redo(); const reopened = history.reopen(); + process.stdout.write(`${JSON.stringify({ schemaVersion: 1, task: "C4-002", operation: "CORRECTIVE_MESH_POSITIVE_COMMAND", queueMutation: false, positive: { desktop: desktop.result, wasm: wasm.result, desktopMain: desktopMain.snapshot(), wasmMain: wasmMain.snapshot() }, negative: { malformed: malformed.result, stale: stale.result, unknown: unknown.result, rollbackMain: negativeMain.snapshot() }, persistence: { saved, undone, redone, reopened, final: history.snapshot() }, parity: JSON.stringify(desktop.result) === JSON.stringify(wasm.result) && JSON.stringify(desktopMain.snapshot()) === JSON.stringify(wasmMain.snapshot()) }, null, 2)}\n`); +} finally { fs.rmSync(temp, { recursive: true, force: true }); } diff --git a/tests/golden/corrective/C4-002/handoff.json b/tests/golden/corrective/C4-002/handoff.json new file mode 100644 index 00000000..d4904185 --- /dev/null +++ b/tests/golden/corrective/C4-002/handoff.json @@ -0,0 +1,149 @@ +{ + "schemaVersion": 1, + "task": "C4-002", + "status": "done", + "gate": "G4", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C4-002", + "artifactCount": 22, + "artifacts": [ + { + "path": "tests/golden/corrective/C4-002/c4-001-regression.log", + "sha256": "7b219de2651649a8a19ce2f9e41dc5348075efa0c20773133aed076190e8ce30", + "bytes": 687 + }, + { + "path": "tests/golden/corrective/C4-002/check-context-governance.log", + "sha256": "7ed574f956f0255482a15f63faedc657fc7eb0fa643d282a430f27a207b5bf8d", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C4-002/check-corrective-plan.log", + "sha256": "02388ad7f17cf566a9b34cd3a4159885be031893163e3c59ee0054393b05ff58", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C4-002/check-task-context.log", + "sha256": "cf9fb3f108cb7febf3d6d17543cb1abf9356174eb34d379652dd288aca6db2d7", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C4-002/command-exit-codes.json", + "sha256": "58ad965c876e78da936ded2ce14ff58d09d3b432de0731ea7fee1cb7e0ce4316", + "bytes": 319 + }, + { + "path": "tests/golden/corrective/C4-002/determinism.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C4-002/deterministic-mesh-report.mjs", + "sha256": "157af683093db98704852e93c25c3f3b631e86ff58f6a446e56fc3c88252ccdb", + "bytes": 4882 + }, + { + "path": "tests/golden/corrective/C4-002/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C4-002/focused-test.log", + "sha256": "cc7164fd86239450ce661b40822417943c27513762f0d63f5d8ab418e4a8f8e7", + "bytes": 655 + }, + { + "path": "tests/golden/corrective/C4-002/mesh-command.test.mjs", + "sha256": "dbc4d49e900b6b931f7f6f7dd22199ae89e69153a157b2d9d4b87e5465204b5e", + "bytes": 6019 + }, + { + "path": "tests/golden/corrective/C4-002/node-receipt-report.json", + "sha256": "b47e1c8ddb84e0aa8b0ce304b5c6a15d9b74d439581b30e6000ab3e4cc50659d", + "bytes": 5517 + }, + { + "path": "tests/golden/corrective/C4-002/node-receipt-report.second.json", + "sha256": "b47e1c8ddb84e0aa8b0ce304b5c6a15d9b74d439581b30e6000ab3e4cc50659d", + "bytes": 5517 + }, + { + "path": "tests/golden/corrective/C4-002/protected-hash-check.log", + "sha256": "deb15d1fa1d5606bcbe760b066dfba312bd586df82228214668f149385940ac5", + "bytes": 28 + }, + { + "path": "tests/golden/corrective/C4-002/protected-hashes-after.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C4-002/protected-hashes-before.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C4-002/receipt-gate.log", + "sha256": "264ade45dbf98dc969ca95eb83ab361881206b08c6e7177f7c1bade4446d5042", + "bytes": 82 + }, + { + "path": "tests/golden/corrective/C4-002/receipt-report.json", + "sha256": "198813bf1bd5ba3186c3da044108c8f8afb842282e2b0a708219cb501f5a6787", + "bytes": 5550 + }, + { + "path": "tests/golden/corrective/C4-002/receipt-report.second.json", + "sha256": "198813bf1bd5ba3186c3da044108c8f8afb842282e2b0a708219cb501f5a6787", + "bytes": 5550 + }, + { + "path": "tests/golden/corrective/C4-002/source-hash-check.log", + "sha256": "2c558a82a6737aea8af5c449ed08e49c866d8c6b6b11879ed6f380dbe8be3c50", + "bytes": 23 + }, + { + "path": "tests/golden/corrective/C4-002/source-hashes.json", + "sha256": "56c3ec1be2c664b927fdefd3416d7d91f7894f23435491efd81a7fc47ed25fda", + "bytes": 1113 + }, + { + "path": "tests/golden/corrective/C4-002/test-context-governance.log", + "sha256": "57a34dd0c3fd97a3944cbbdf9afebd94821bd8a346b471dce8d3ba0edd2a7602", + "bytes": 2578 + }, + { + "path": "tests/golden/corrective/C4-002/typecheck.log", + "sha256": "f90c14a9694ed7029129a343fa5cc8672e4a59a5fe4b34e7c3098db9c5c5bd1a", + "bytes": 76 + } + ], + "sourceHashes": { + "tests/golden/corrective/C4-001/manifest.json": "5ae2a511340e8d7cda7f2f73ce682fef6b33781c81bb6f483339b6a2868e103d", + "web/protocol/corrective-command-registry.ts": "cb0553aac346d34d3c2c12501d2bf681c6edd36c7d6ce5de43c6178b42296897", + "web/protocol/corrective-main-transaction.ts": "40567ca8843863d0c1751d06b819402be53f13826f5e54abc29530b8b02308e4", + "web/protocol/corrective-history-store.ts": "aaa69b0198fea9a37e947046f8db8143b75591b35af115d832a8328e258a6821", + "web/protocol/corrective-mesh-command.ts": "53ca11912380bedfad782ed587d809270571a4800ef87b71bb992bcb4ae34937", + "web/app/src/corrective-pilot-bridge.ts": "ab471cd1c1bbcc69529b3aeba7051b462df19c928a676c7d6c564e38017692d5", + "web/tests/e2e/corrective-mesh-pilot.spec.ts": "aedd5db682e5bf47b041c052b5390f49ddf08a061bd11404d3f44f785b18b70c", + "tests/golden/corrective/C4-002/mesh-command.test.mjs": "dbc4d49e900b6b931f7f6f7dd22199ae89e69153a157b2d9d4b87e5465204b5e", + "tests/golden/corrective/C4-002/deterministic-mesh-report.mjs": "157af683093db98704852e93c25c3f3b631e86ff58f6a446e56fc3c88252ccdb" + }, + "commandExitCodes": { + "focusedTest": 0, + "chromiumPilot": 0, + "chromiumPilotSecond": 0, + "determinism": 0, + "receiptGate": 0, + "c4_001Regression": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0, + "protectedHashCheck": 0, + "sourceHashCheck": 0 + }, + "nextCorrectiveTask": "C4-003" +} diff --git a/tests/golden/corrective/C4-002/manifest.json b/tests/golden/corrective/C4-002/manifest.json new file mode 100644 index 00000000..d4904185 --- /dev/null +++ b/tests/golden/corrective/C4-002/manifest.json @@ -0,0 +1,149 @@ +{ + "schemaVersion": 1, + "task": "C4-002", + "status": "done", + "gate": "G4", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C4-002", + "artifactCount": 22, + "artifacts": [ + { + "path": "tests/golden/corrective/C4-002/c4-001-regression.log", + "sha256": "7b219de2651649a8a19ce2f9e41dc5348075efa0c20773133aed076190e8ce30", + "bytes": 687 + }, + { + "path": "tests/golden/corrective/C4-002/check-context-governance.log", + "sha256": "7ed574f956f0255482a15f63faedc657fc7eb0fa643d282a430f27a207b5bf8d", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C4-002/check-corrective-plan.log", + "sha256": "02388ad7f17cf566a9b34cd3a4159885be031893163e3c59ee0054393b05ff58", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C4-002/check-task-context.log", + "sha256": "cf9fb3f108cb7febf3d6d17543cb1abf9356174eb34d379652dd288aca6db2d7", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C4-002/command-exit-codes.json", + "sha256": "58ad965c876e78da936ded2ce14ff58d09d3b432de0731ea7fee1cb7e0ce4316", + "bytes": 319 + }, + { + "path": "tests/golden/corrective/C4-002/determinism.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C4-002/deterministic-mesh-report.mjs", + "sha256": "157af683093db98704852e93c25c3f3b631e86ff58f6a446e56fc3c88252ccdb", + "bytes": 4882 + }, + { + "path": "tests/golden/corrective/C4-002/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C4-002/focused-test.log", + "sha256": "cc7164fd86239450ce661b40822417943c27513762f0d63f5d8ab418e4a8f8e7", + "bytes": 655 + }, + { + "path": "tests/golden/corrective/C4-002/mesh-command.test.mjs", + "sha256": "dbc4d49e900b6b931f7f6f7dd22199ae89e69153a157b2d9d4b87e5465204b5e", + "bytes": 6019 + }, + { + "path": "tests/golden/corrective/C4-002/node-receipt-report.json", + "sha256": "b47e1c8ddb84e0aa8b0ce304b5c6a15d9b74d439581b30e6000ab3e4cc50659d", + "bytes": 5517 + }, + { + "path": "tests/golden/corrective/C4-002/node-receipt-report.second.json", + "sha256": "b47e1c8ddb84e0aa8b0ce304b5c6a15d9b74d439581b30e6000ab3e4cc50659d", + "bytes": 5517 + }, + { + "path": "tests/golden/corrective/C4-002/protected-hash-check.log", + "sha256": "deb15d1fa1d5606bcbe760b066dfba312bd586df82228214668f149385940ac5", + "bytes": 28 + }, + { + "path": "tests/golden/corrective/C4-002/protected-hashes-after.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C4-002/protected-hashes-before.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C4-002/receipt-gate.log", + "sha256": "264ade45dbf98dc969ca95eb83ab361881206b08c6e7177f7c1bade4446d5042", + "bytes": 82 + }, + { + "path": "tests/golden/corrective/C4-002/receipt-report.json", + "sha256": "198813bf1bd5ba3186c3da044108c8f8afb842282e2b0a708219cb501f5a6787", + "bytes": 5550 + }, + { + "path": "tests/golden/corrective/C4-002/receipt-report.second.json", + "sha256": "198813bf1bd5ba3186c3da044108c8f8afb842282e2b0a708219cb501f5a6787", + "bytes": 5550 + }, + { + "path": "tests/golden/corrective/C4-002/source-hash-check.log", + "sha256": "2c558a82a6737aea8af5c449ed08e49c866d8c6b6b11879ed6f380dbe8be3c50", + "bytes": 23 + }, + { + "path": "tests/golden/corrective/C4-002/source-hashes.json", + "sha256": "56c3ec1be2c664b927fdefd3416d7d91f7894f23435491efd81a7fc47ed25fda", + "bytes": 1113 + }, + { + "path": "tests/golden/corrective/C4-002/test-context-governance.log", + "sha256": "57a34dd0c3fd97a3944cbbdf9afebd94821bd8a346b471dce8d3ba0edd2a7602", + "bytes": 2578 + }, + { + "path": "tests/golden/corrective/C4-002/typecheck.log", + "sha256": "f90c14a9694ed7029129a343fa5cc8672e4a59a5fe4b34e7c3098db9c5c5bd1a", + "bytes": 76 + } + ], + "sourceHashes": { + "tests/golden/corrective/C4-001/manifest.json": "5ae2a511340e8d7cda7f2f73ce682fef6b33781c81bb6f483339b6a2868e103d", + "web/protocol/corrective-command-registry.ts": "cb0553aac346d34d3c2c12501d2bf681c6edd36c7d6ce5de43c6178b42296897", + "web/protocol/corrective-main-transaction.ts": "40567ca8843863d0c1751d06b819402be53f13826f5e54abc29530b8b02308e4", + "web/protocol/corrective-history-store.ts": "aaa69b0198fea9a37e947046f8db8143b75591b35af115d832a8328e258a6821", + "web/protocol/corrective-mesh-command.ts": "53ca11912380bedfad782ed587d809270571a4800ef87b71bb992bcb4ae34937", + "web/app/src/corrective-pilot-bridge.ts": "ab471cd1c1bbcc69529b3aeba7051b462df19c928a676c7d6c564e38017692d5", + "web/tests/e2e/corrective-mesh-pilot.spec.ts": "aedd5db682e5bf47b041c052b5390f49ddf08a061bd11404d3f44f785b18b70c", + "tests/golden/corrective/C4-002/mesh-command.test.mjs": "dbc4d49e900b6b931f7f6f7dd22199ae89e69153a157b2d9d4b87e5465204b5e", + "tests/golden/corrective/C4-002/deterministic-mesh-report.mjs": "157af683093db98704852e93c25c3f3b631e86ff58f6a446e56fc3c88252ccdb" + }, + "commandExitCodes": { + "focusedTest": 0, + "chromiumPilot": 0, + "chromiumPilotSecond": 0, + "determinism": 0, + "receiptGate": 0, + "c4_001Regression": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0, + "protectedHashCheck": 0, + "sourceHashCheck": 0 + }, + "nextCorrectiveTask": "C4-003" +} diff --git a/tests/golden/corrective/C4-002/mesh-command.test.mjs b/tests/golden/corrective/C4-002/mesh-command.test.mjs new file mode 100644 index 00000000..eb04ddc9 --- /dev/null +++ b/tests/golden/corrective/C4-002/mesh-command.test.mjs @@ -0,0 +1,58 @@ +import assert from "node:assert/strict"; +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import test from "node:test"; +import { fileURLToPath, pathToFileURL } from "node:url"; +import ts from "../../../../web/node_modules/typescript/lib/typescript.js"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../../.."); +const temp = fs.mkdtempSync(path.join(os.tmpdir(), "corrective-mesh-command-")); +const compile = (source, output, replacements = []) => { + const input = path.join(root, source); + const result = ts.transpileModule(fs.readFileSync(input, "utf8"), { compilerOptions: { module: ts.ModuleKind.ES2022, target: ts.ScriptTarget.ES2022 }, fileName: input, reportDiagnostics: true }); + assert.deepEqual(result.diagnostics, []); + let text = result.outputText; + for (const [from, to] of replacements) text = text.replaceAll(from, to); + fs.writeFileSync(output, text); +}; + +try { + const files = { runner: path.join(temp, "corrective-case-runner.mjs"), registry: path.join(temp, "corrective-command-registry.mjs"), tx: path.join(temp, "corrective-main-transaction.mjs"), history: path.join(temp, "corrective-history-store.mjs"), mesh: path.join(temp, "corrective-mesh-command.mjs") }; + compile("web/protocol/corrective-case-runner.ts", files.runner); + compile("web/protocol/corrective-command-registry.ts", files.registry, [["from \"./corrective-case-runner\"", "from \"./corrective-case-runner.mjs\""]]); + compile("web/protocol/corrective-main-transaction.ts", files.tx, [["from \"./corrective-case-runner\"", "from \"./corrective-case-runner.mjs\""]]); + compile("web/protocol/corrective-history-store.ts", files.history, [["from \"./corrective-main-transaction\"", "from \"./corrective-main-transaction.mjs\""]]); + compile("web/protocol/corrective-mesh-command.ts", files.mesh, [["from \"./corrective-command-registry\"", "from \"./corrective-command-registry.mjs\""], ["from \"./corrective-case-runner\"", "from \"./corrective-case-runner.mjs\""], ["from \"./corrective-main-transaction\"", "from \"./corrective-main-transaction.mjs\""]]); + const { CorrectiveCommandRegistry } = await import(pathToFileURL(files.registry)); + const { CorrectiveHistoryStore } = await import(pathToFileURL(files.history)); + const { createMeshMain, createMeshRegistry } = await import(pathToFileURL(files.mesh)); + const fixture = [{ id: "vertex:0", x: 1, y: 2, z: 3 }, { id: "vertex:1", x: 0, y: 0, z: 0 }]; + const command = (overrides = {}) => ({ schemaVersion: 1, requestId: "mesh-pilot-001", commandType: "meshTranslateVertex", baseRevision: 9, context: { mainId: "main:mesh", targetKind: "MESH", targetId: "mesh:cube", editMode: "EDITABLE", authorization: "USER_EDIT", source: { kind: "LOCAL", sha256: "b".repeat(64) } }, payload: { vertexId: "vertex:0", delta: { x: 0.5, y: -1, z: 2 } }, ...overrides }); + const clone = (value) => ({ vertices: value.vertices.map((vertex) => ({ ...vertex })) }); + + test("desktop and WASM apply the same geometry delta", async () => { + const desktopMain = createMeshMain(fixture, 9, false); const wasmMain = createMeshMain(fixture, 9, false); + const desktop = await createMeshRegistry(desktopMain).dispatch("DESKTOP", { command: command(), mainRevision: 9 }); const wasm = await createMeshRegistry(wasmMain).dispatch("WASM", { command: command(), mainRevision: 9 }); + assert.equal(desktop.result.status, "FINISHED"); assert.deepEqual(desktop.result, wasm.result); assert.deepEqual(desktopMain.snapshot(), wasmMain.snapshot()); + assert.deepEqual(desktop.result.delta, { vertexId: "vertex:0", before: { x: 1, y: 2, z: 3 }, after: { x: 1.5, y: 1, z: 5 } }); assert.equal(desktopMain.snapshot().dirty, true); + }); + + test("malformed, stale, wrong target, and unknown vertices roll back", async () => { + const main = createMeshMain(fixture, 9, false); const registry = createMeshRegistry(main); + const malformed = await registry.dispatch("DESKTOP", { command: command({ payload: { vertexId: "vertex:0", delta: { x: 1, y: 2, z: 3, w: 4 } } }), mainRevision: 9 }); assert.equal(malformed.result.code, "COMMAND_MALFORMED"); + const stale = await registry.dispatch("WASM", { command: command({ baseRevision: 8 }), mainRevision: 9 }); assert.equal(stale.result.code, "REVISION_CONFLICT"); + const wrongTarget = await registry.dispatch("WASM", { command: command({ context: { ...command().context, targetKind: "MODIFIER" } }), mainRevision: 9 }); assert.equal(wrongTarget.result.code, "INVALID_CONTEXT"); + const unknown = await registry.dispatch("DESKTOP", { command: command({ payload: { vertexId: "vertex:missing", delta: { x: 1, y: 2, z: 3 } } }), mainRevision: 9 }); assert.equal(unknown.result.code, "COMMAND_UNSUPPORTED"); + const overflow = await registry.dispatch("WASM", { command: command({ payload: { vertexId: "vertex:0", delta: { x: 1_000_000, y: 0, z: 0 } } }), mainRevision: 9 }); assert.equal(overflow.result.code, "COMMAND_MALFORMED"); + assert.deepEqual(main.snapshot().value.vertices, fixture); assert.equal(main.snapshot().revision, 9); assert.equal(main.snapshot().dirty, false); + }); + + test("registry is explicit and history preserves mesh save, undo, redo, and reopen", async () => { + assert.deepEqual(createMeshRegistry(createMeshMain(fixture, 9, false)).list(), ["meshTranslateVertex"]); + const history = new CorrectiveHistoryStore({ vertices: fixture }, 9, false, clone); + const result = await createMeshRegistry(history).dispatch("WASM", { command: command(), mainRevision: 9 }); assert.equal(result.result.status, "FINISHED"); + assert.equal(history.save().dirty, false); assert.equal(history.undo().value.vertices[0].x, 1); assert.equal(history.redo().value.vertices[0].x, 1.5); assert.equal(history.reopen().value.vertices[0].z, 5); assert.equal(history.snapshot().dirty, false); + assert.ok(createMeshRegistry(createMeshMain(fixture, 9, false)) instanceof CorrectiveCommandRegistry); + }); +} finally { fs.rmSync(temp, { recursive: true, force: true }); } diff --git a/tests/golden/corrective/C4-002/node-receipt-report.json b/tests/golden/corrective/C4-002/node-receipt-report.json new file mode 100644 index 00000000..aa8ae28b --- /dev/null +++ b/tests/golden/corrective/C4-002/node-receipt-report.json @@ -0,0 +1,275 @@ +{ + "schemaVersion": 1, + "task": "C4-002", + "operation": "CORRECTIVE_MESH_POSITIVE_COMMAND", + "queueMutation": false, + "positive": { + "desktop": { + "schemaVersion": 1, + "requestId": "mesh-report-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 9, + "mainRevisionBefore": 9, + "mainRevisionAfter": 10, + "mainMutation": "CHANGED", + "delta": { + "vertexId": "vertex:0", + "before": { + "x": 1, + "y": 2, + "z": 3 + }, + "after": { + "x": 1.5, + "y": 1, + "z": 5 + } + }, + "persistence": { + "dirty": true + }, + "error": null + }, + "wasm": { + "schemaVersion": 1, + "requestId": "mesh-report-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 9, + "mainRevisionBefore": 9, + "mainRevisionAfter": 10, + "mainMutation": "CHANGED", + "delta": { + "vertexId": "vertex:0", + "before": { + "x": 1, + "y": 2, + "z": 3 + }, + "after": { + "x": 1.5, + "y": 1, + "z": 5 + } + }, + "persistence": { + "dirty": true + }, + "error": null + }, + "desktopMain": { + "value": { + "vertices": [ + { + "id": "vertex:0", + "x": 1.5, + "y": 1, + "z": 5 + }, + { + "id": "vertex:1", + "x": 0, + "y": 0, + "z": 0 + } + ] + }, + "revision": 10, + "dirty": true + }, + "wasmMain": { + "value": { + "vertices": [ + { + "id": "vertex:0", + "x": 1.5, + "y": 1, + "z": 5 + }, + { + "id": "vertex:1", + "x": 0, + "y": 0, + "z": 0 + } + ] + }, + "revision": 10, + "dirty": true + } + }, + "negative": { + "malformed": { + "schemaVersion": 1, + "requestId": "mesh-report-001", + "status": "MALFORMED", + "code": "COMMAND_MALFORMED", + "baseRevision": 9, + "mainRevisionBefore": 9, + "mainRevisionAfter": 9, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_MALFORMED", + "message": "COMMAND_MALFORMED: mesh delta must contain only x, y, and z" + } + }, + "stale": { + "schemaVersion": 1, + "requestId": "mesh-report-001", + "status": "BLOCKED", + "code": "REVISION_CONFLICT", + "baseRevision": 8, + "mainRevisionBefore": 9, + "mainRevisionAfter": 9, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "REVISION_CONFLICT", + "message": "base revision does not match current Main" + } + }, + "unknown": { + "schemaVersion": 1, + "requestId": "mesh-report-001", + "status": "UNSUPPORTED", + "code": "COMMAND_UNSUPPORTED", + "baseRevision": 9, + "mainRevisionBefore": 9, + "mainRevisionAfter": 9, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_UNSUPPORTED", + "message": "COMMAND_UNSUPPORTED: vertex vertex:missing does not exist" + } + }, + "rollbackMain": { + "value": { + "vertices": [ + { + "id": "vertex:0", + "x": 1, + "y": 2, + "z": 3 + }, + { + "id": "vertex:1", + "x": 0, + "y": 0, + "z": 0 + } + ] + }, + "revision": 9, + "dirty": false + } + }, + "persistence": { + "saved": { + "value": { + "vertices": [ + { + "id": "vertex:0", + "x": 1.5, + "y": 1, + "z": 5 + }, + { + "id": "vertex:1", + "x": 0, + "y": 0, + "z": 0 + } + ] + }, + "revision": 10, + "dirty": false + }, + "undone": { + "value": { + "vertices": [ + { + "id": "vertex:0", + "x": 1, + "y": 2, + "z": 3 + }, + { + "id": "vertex:1", + "x": 0, + "y": 0, + "z": 0 + } + ] + }, + "revision": 9, + "dirty": false + }, + "redone": { + "value": { + "vertices": [ + { + "id": "vertex:0", + "x": 1.5, + "y": 1, + "z": 5 + }, + { + "id": "vertex:1", + "x": 0, + "y": 0, + "z": 0 + } + ] + }, + "revision": 10, + "dirty": false + }, + "reopened": { + "value": { + "vertices": [ + { + "id": "vertex:0", + "x": 1.5, + "y": 1, + "z": 5 + }, + { + "id": "vertex:1", + "x": 0, + "y": 0, + "z": 0 + } + ] + }, + "revision": 10, + "dirty": false + }, + "final": { + "value": { + "vertices": [ + { + "id": "vertex:0", + "x": 1.5, + "y": 1, + "z": 5 + }, + { + "id": "vertex:1", + "x": 0, + "y": 0, + "z": 0 + } + ] + }, + "revision": 10, + "dirty": false + } + }, + "parity": true +} diff --git a/tests/golden/corrective/C4-002/node-receipt-report.second.json b/tests/golden/corrective/C4-002/node-receipt-report.second.json new file mode 100644 index 00000000..aa8ae28b --- /dev/null +++ b/tests/golden/corrective/C4-002/node-receipt-report.second.json @@ -0,0 +1,275 @@ +{ + "schemaVersion": 1, + "task": "C4-002", + "operation": "CORRECTIVE_MESH_POSITIVE_COMMAND", + "queueMutation": false, + "positive": { + "desktop": { + "schemaVersion": 1, + "requestId": "mesh-report-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 9, + "mainRevisionBefore": 9, + "mainRevisionAfter": 10, + "mainMutation": "CHANGED", + "delta": { + "vertexId": "vertex:0", + "before": { + "x": 1, + "y": 2, + "z": 3 + }, + "after": { + "x": 1.5, + "y": 1, + "z": 5 + } + }, + "persistence": { + "dirty": true + }, + "error": null + }, + "wasm": { + "schemaVersion": 1, + "requestId": "mesh-report-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 9, + "mainRevisionBefore": 9, + "mainRevisionAfter": 10, + "mainMutation": "CHANGED", + "delta": { + "vertexId": "vertex:0", + "before": { + "x": 1, + "y": 2, + "z": 3 + }, + "after": { + "x": 1.5, + "y": 1, + "z": 5 + } + }, + "persistence": { + "dirty": true + }, + "error": null + }, + "desktopMain": { + "value": { + "vertices": [ + { + "id": "vertex:0", + "x": 1.5, + "y": 1, + "z": 5 + }, + { + "id": "vertex:1", + "x": 0, + "y": 0, + "z": 0 + } + ] + }, + "revision": 10, + "dirty": true + }, + "wasmMain": { + "value": { + "vertices": [ + { + "id": "vertex:0", + "x": 1.5, + "y": 1, + "z": 5 + }, + { + "id": "vertex:1", + "x": 0, + "y": 0, + "z": 0 + } + ] + }, + "revision": 10, + "dirty": true + } + }, + "negative": { + "malformed": { + "schemaVersion": 1, + "requestId": "mesh-report-001", + "status": "MALFORMED", + "code": "COMMAND_MALFORMED", + "baseRevision": 9, + "mainRevisionBefore": 9, + "mainRevisionAfter": 9, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_MALFORMED", + "message": "COMMAND_MALFORMED: mesh delta must contain only x, y, and z" + } + }, + "stale": { + "schemaVersion": 1, + "requestId": "mesh-report-001", + "status": "BLOCKED", + "code": "REVISION_CONFLICT", + "baseRevision": 8, + "mainRevisionBefore": 9, + "mainRevisionAfter": 9, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "REVISION_CONFLICT", + "message": "base revision does not match current Main" + } + }, + "unknown": { + "schemaVersion": 1, + "requestId": "mesh-report-001", + "status": "UNSUPPORTED", + "code": "COMMAND_UNSUPPORTED", + "baseRevision": 9, + "mainRevisionBefore": 9, + "mainRevisionAfter": 9, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_UNSUPPORTED", + "message": "COMMAND_UNSUPPORTED: vertex vertex:missing does not exist" + } + }, + "rollbackMain": { + "value": { + "vertices": [ + { + "id": "vertex:0", + "x": 1, + "y": 2, + "z": 3 + }, + { + "id": "vertex:1", + "x": 0, + "y": 0, + "z": 0 + } + ] + }, + "revision": 9, + "dirty": false + } + }, + "persistence": { + "saved": { + "value": { + "vertices": [ + { + "id": "vertex:0", + "x": 1.5, + "y": 1, + "z": 5 + }, + { + "id": "vertex:1", + "x": 0, + "y": 0, + "z": 0 + } + ] + }, + "revision": 10, + "dirty": false + }, + "undone": { + "value": { + "vertices": [ + { + "id": "vertex:0", + "x": 1, + "y": 2, + "z": 3 + }, + { + "id": "vertex:1", + "x": 0, + "y": 0, + "z": 0 + } + ] + }, + "revision": 9, + "dirty": false + }, + "redone": { + "value": { + "vertices": [ + { + "id": "vertex:0", + "x": 1.5, + "y": 1, + "z": 5 + }, + { + "id": "vertex:1", + "x": 0, + "y": 0, + "z": 0 + } + ] + }, + "revision": 10, + "dirty": false + }, + "reopened": { + "value": { + "vertices": [ + { + "id": "vertex:0", + "x": 1.5, + "y": 1, + "z": 5 + }, + { + "id": "vertex:1", + "x": 0, + "y": 0, + "z": 0 + } + ] + }, + "revision": 10, + "dirty": false + }, + "final": { + "value": { + "vertices": [ + { + "id": "vertex:0", + "x": 1.5, + "y": 1, + "z": 5 + }, + { + "id": "vertex:1", + "x": 0, + "y": 0, + "z": 0 + } + ] + }, + "revision": 10, + "dirty": false + } + }, + "parity": true +} diff --git a/tests/golden/corrective/C4-002/protected-hashes-after.txt b/tests/golden/corrective/C4-002/protected-hashes-after.txt new file mode 100644 index 00000000..a0d2c8ba --- /dev/null +++ b/tests/golden/corrective/C4-002/protected-hashes-after.txt @@ -0,0 +1,7 @@ +5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1 docs/EXECUTION_QUEUE.md +32f4c11ebf8563f3aa500583f3979c1b38d711cc7328a428968118f0375b90b4 tests/golden/M15-03A/completed-gap-tasks.json +edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17 tests/golden/M15-03A/next-task-plan.json +da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d tests/golden/M15-03A/task-catalog.jsonl +ed591788c48c1b089decd2aa187f66728b5cc66a73c2b1c0c46c1a46ec4a0ae0 tests/golden/M15-03A/task-index.json +3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1 tests/golden/M16-GAP-00273/manifest.json +5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8 docs/status/M16-GAP-00273.md diff --git a/tests/golden/corrective/C4-002/protected-hashes-before.txt b/tests/golden/corrective/C4-002/protected-hashes-before.txt new file mode 100644 index 00000000..a0d2c8ba --- /dev/null +++ b/tests/golden/corrective/C4-002/protected-hashes-before.txt @@ -0,0 +1,7 @@ +5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1 docs/EXECUTION_QUEUE.md +32f4c11ebf8563f3aa500583f3979c1b38d711cc7328a428968118f0375b90b4 tests/golden/M15-03A/completed-gap-tasks.json +edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17 tests/golden/M15-03A/next-task-plan.json +da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d tests/golden/M15-03A/task-catalog.jsonl +ed591788c48c1b089decd2aa187f66728b5cc66a73c2b1c0c46c1a46ec4a0ae0 tests/golden/M15-03A/task-index.json +3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1 tests/golden/M16-GAP-00273/manifest.json +5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8 docs/status/M16-GAP-00273.md diff --git a/tests/golden/corrective/C4-002/receipt-report.json b/tests/golden/corrective/C4-002/receipt-report.json new file mode 100644 index 00000000..5e9414ff --- /dev/null +++ b/tests/golden/corrective/C4-002/receipt-report.json @@ -0,0 +1,276 @@ +{ + "schemaVersion": 1, + "task": "C4-002", + "operation": "CORRECTIVE_MESH_CHROMIUM_PILOT", + "browser": "chromium", + "queueMutation": false, + "positive": { + "desktop": { + "schemaVersion": 1, + "requestId": "chromium-mesh-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 9, + "mainRevisionBefore": 9, + "mainRevisionAfter": 10, + "mainMutation": "CHANGED", + "delta": { + "vertexId": "vertex:0", + "before": { + "x": 1, + "y": 2, + "z": 3 + }, + "after": { + "x": 1.5, + "y": 1, + "z": 5 + } + }, + "persistence": { + "dirty": true + }, + "error": null + }, + "wasm": { + "schemaVersion": 1, + "requestId": "chromium-mesh-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 9, + "mainRevisionBefore": 9, + "mainRevisionAfter": 10, + "mainMutation": "CHANGED", + "delta": { + "vertexId": "vertex:0", + "before": { + "x": 1, + "y": 2, + "z": 3 + }, + "after": { + "x": 1.5, + "y": 1, + "z": 5 + } + }, + "persistence": { + "dirty": true + }, + "error": null + }, + "desktopMain": { + "value": { + "vertices": [ + { + "id": "vertex:0", + "x": 1.5, + "y": 1, + "z": 5 + }, + { + "id": "vertex:1", + "x": 0, + "y": 0, + "z": 0 + } + ] + }, + "revision": 10, + "dirty": true + }, + "wasmMain": { + "value": { + "vertices": [ + { + "id": "vertex:0", + "x": 1.5, + "y": 1, + "z": 5 + }, + { + "id": "vertex:1", + "x": 0, + "y": 0, + "z": 0 + } + ] + }, + "revision": 10, + "dirty": true + } + }, + "negative": { + "malformed": { + "schemaVersion": 1, + "requestId": "chromium-mesh-001", + "status": "MALFORMED", + "code": "COMMAND_MALFORMED", + "baseRevision": 9, + "mainRevisionBefore": 9, + "mainRevisionAfter": 9, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_MALFORMED", + "message": "COMMAND_MALFORMED: mesh delta must contain only x, y, and z" + } + }, + "stale": { + "schemaVersion": 1, + "requestId": "chromium-mesh-001", + "status": "BLOCKED", + "code": "REVISION_CONFLICT", + "baseRevision": 8, + "mainRevisionBefore": 9, + "mainRevisionAfter": 9, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "REVISION_CONFLICT", + "message": "base revision does not match current Main" + } + }, + "unknown": { + "schemaVersion": 1, + "requestId": "chromium-mesh-001", + "status": "UNSUPPORTED", + "code": "COMMAND_UNSUPPORTED", + "baseRevision": 9, + "mainRevisionBefore": 9, + "mainRevisionAfter": 9, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_UNSUPPORTED", + "message": "COMMAND_UNSUPPORTED: vertex vertex:missing does not exist" + } + }, + "rollbackMain": { + "value": { + "vertices": [ + { + "id": "vertex:0", + "x": 1, + "y": 2, + "z": 3 + }, + { + "id": "vertex:1", + "x": 0, + "y": 0, + "z": 0 + } + ] + }, + "revision": 9, + "dirty": false + } + }, + "persistence": { + "saved": { + "value": { + "vertices": [ + { + "id": "vertex:0", + "x": 1.5, + "y": 1, + "z": 5 + }, + { + "id": "vertex:1", + "x": 0, + "y": 0, + "z": 0 + } + ] + }, + "revision": 10, + "dirty": false + }, + "undone": { + "value": { + "vertices": [ + { + "id": "vertex:0", + "x": 1, + "y": 2, + "z": 3 + }, + { + "id": "vertex:1", + "x": 0, + "y": 0, + "z": 0 + } + ] + }, + "revision": 9, + "dirty": false + }, + "redone": { + "value": { + "vertices": [ + { + "id": "vertex:0", + "x": 1.5, + "y": 1, + "z": 5 + }, + { + "id": "vertex:1", + "x": 0, + "y": 0, + "z": 0 + } + ] + }, + "revision": 10, + "dirty": false + }, + "reopened": { + "value": { + "vertices": [ + { + "id": "vertex:0", + "x": 1.5, + "y": 1, + "z": 5 + }, + { + "id": "vertex:1", + "x": 0, + "y": 0, + "z": 0 + } + ] + }, + "revision": 10, + "dirty": false + }, + "final": { + "value": { + "vertices": [ + { + "id": "vertex:0", + "x": 1.5, + "y": 1, + "z": 5 + }, + { + "id": "vertex:1", + "x": 0, + "y": 0, + "z": 0 + } + ] + }, + "revision": 10, + "dirty": false + } + }, + "parity": true +} diff --git a/tests/golden/corrective/C4-002/receipt-report.second.json b/tests/golden/corrective/C4-002/receipt-report.second.json new file mode 100644 index 00000000..5e9414ff --- /dev/null +++ b/tests/golden/corrective/C4-002/receipt-report.second.json @@ -0,0 +1,276 @@ +{ + "schemaVersion": 1, + "task": "C4-002", + "operation": "CORRECTIVE_MESH_CHROMIUM_PILOT", + "browser": "chromium", + "queueMutation": false, + "positive": { + "desktop": { + "schemaVersion": 1, + "requestId": "chromium-mesh-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 9, + "mainRevisionBefore": 9, + "mainRevisionAfter": 10, + "mainMutation": "CHANGED", + "delta": { + "vertexId": "vertex:0", + "before": { + "x": 1, + "y": 2, + "z": 3 + }, + "after": { + "x": 1.5, + "y": 1, + "z": 5 + } + }, + "persistence": { + "dirty": true + }, + "error": null + }, + "wasm": { + "schemaVersion": 1, + "requestId": "chromium-mesh-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 9, + "mainRevisionBefore": 9, + "mainRevisionAfter": 10, + "mainMutation": "CHANGED", + "delta": { + "vertexId": "vertex:0", + "before": { + "x": 1, + "y": 2, + "z": 3 + }, + "after": { + "x": 1.5, + "y": 1, + "z": 5 + } + }, + "persistence": { + "dirty": true + }, + "error": null + }, + "desktopMain": { + "value": { + "vertices": [ + { + "id": "vertex:0", + "x": 1.5, + "y": 1, + "z": 5 + }, + { + "id": "vertex:1", + "x": 0, + "y": 0, + "z": 0 + } + ] + }, + "revision": 10, + "dirty": true + }, + "wasmMain": { + "value": { + "vertices": [ + { + "id": "vertex:0", + "x": 1.5, + "y": 1, + "z": 5 + }, + { + "id": "vertex:1", + "x": 0, + "y": 0, + "z": 0 + } + ] + }, + "revision": 10, + "dirty": true + } + }, + "negative": { + "malformed": { + "schemaVersion": 1, + "requestId": "chromium-mesh-001", + "status": "MALFORMED", + "code": "COMMAND_MALFORMED", + "baseRevision": 9, + "mainRevisionBefore": 9, + "mainRevisionAfter": 9, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_MALFORMED", + "message": "COMMAND_MALFORMED: mesh delta must contain only x, y, and z" + } + }, + "stale": { + "schemaVersion": 1, + "requestId": "chromium-mesh-001", + "status": "BLOCKED", + "code": "REVISION_CONFLICT", + "baseRevision": 8, + "mainRevisionBefore": 9, + "mainRevisionAfter": 9, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "REVISION_CONFLICT", + "message": "base revision does not match current Main" + } + }, + "unknown": { + "schemaVersion": 1, + "requestId": "chromium-mesh-001", + "status": "UNSUPPORTED", + "code": "COMMAND_UNSUPPORTED", + "baseRevision": 9, + "mainRevisionBefore": 9, + "mainRevisionAfter": 9, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_UNSUPPORTED", + "message": "COMMAND_UNSUPPORTED: vertex vertex:missing does not exist" + } + }, + "rollbackMain": { + "value": { + "vertices": [ + { + "id": "vertex:0", + "x": 1, + "y": 2, + "z": 3 + }, + { + "id": "vertex:1", + "x": 0, + "y": 0, + "z": 0 + } + ] + }, + "revision": 9, + "dirty": false + } + }, + "persistence": { + "saved": { + "value": { + "vertices": [ + { + "id": "vertex:0", + "x": 1.5, + "y": 1, + "z": 5 + }, + { + "id": "vertex:1", + "x": 0, + "y": 0, + "z": 0 + } + ] + }, + "revision": 10, + "dirty": false + }, + "undone": { + "value": { + "vertices": [ + { + "id": "vertex:0", + "x": 1, + "y": 2, + "z": 3 + }, + { + "id": "vertex:1", + "x": 0, + "y": 0, + "z": 0 + } + ] + }, + "revision": 9, + "dirty": false + }, + "redone": { + "value": { + "vertices": [ + { + "id": "vertex:0", + "x": 1.5, + "y": 1, + "z": 5 + }, + { + "id": "vertex:1", + "x": 0, + "y": 0, + "z": 0 + } + ] + }, + "revision": 10, + "dirty": false + }, + "reopened": { + "value": { + "vertices": [ + { + "id": "vertex:0", + "x": 1.5, + "y": 1, + "z": 5 + }, + { + "id": "vertex:1", + "x": 0, + "y": 0, + "z": 0 + } + ] + }, + "revision": 10, + "dirty": false + }, + "final": { + "value": { + "vertices": [ + { + "id": "vertex:0", + "x": 1.5, + "y": 1, + "z": 5 + }, + { + "id": "vertex:1", + "x": 0, + "y": 0, + "z": 0 + } + ] + }, + "revision": 10, + "dirty": false + } + }, + "parity": true +} diff --git a/tests/golden/corrective/C4-002/source-hashes.json b/tests/golden/corrective/C4-002/source-hashes.json new file mode 100644 index 00000000..bc699673 --- /dev/null +++ b/tests/golden/corrective/C4-002/source-hashes.json @@ -0,0 +1,13 @@ +{ + "sourceHashes": { + "tests/golden/corrective/C4-001/manifest.json": "5ae2a511340e8d7cda7f2f73ce682fef6b33781c81bb6f483339b6a2868e103d", + "web/protocol/corrective-command-registry.ts": "cb0553aac346d34d3c2c12501d2bf681c6edd36c7d6ce5de43c6178b42296897", + "web/protocol/corrective-main-transaction.ts": "40567ca8843863d0c1751d06b819402be53f13826f5e54abc29530b8b02308e4", + "web/protocol/corrective-history-store.ts": "aaa69b0198fea9a37e947046f8db8143b75591b35af115d832a8328e258a6821", + "web/protocol/corrective-mesh-command.ts": "53ca11912380bedfad782ed587d809270571a4800ef87b71bb992bcb4ae34937", + "web/app/src/corrective-pilot-bridge.ts": "ab471cd1c1bbcc69529b3aeba7051b462df19c928a676c7d6c564e38017692d5", + "web/tests/e2e/corrective-mesh-pilot.spec.ts": "aedd5db682e5bf47b041c052b5390f49ddf08a061bd11404d3f44f785b18b70c", + "tests/golden/corrective/C4-002/mesh-command.test.mjs": "dbc4d49e900b6b931f7f6f7dd22199ae89e69153a157b2d9d4b87e5465204b5e", + "tests/golden/corrective/C4-002/deterministic-mesh-report.mjs": "157af683093db98704852e93c25c3f3b631e86ff58f6a446e56fc3c88252ccdb" + } +} diff --git a/tests/golden/corrective/C4-003/chromium-negative-report.json b/tests/golden/corrective/C4-003/chromium-negative-report.json new file mode 100644 index 00000000..3837f620 --- /dev/null +++ b/tests/golden/corrective/C4-003/chromium-negative-report.json @@ -0,0 +1,193 @@ +{ + "schemaVersion": 1, + "task": "C4-003", + "operation": "CORRECTIVE_NEGATIVE_MATRIX_CHROMIUM", + "browser": "chromium", + "queueMutation": false, + "results": { + "modifierMalformed": { + "schemaVersion": 1, + "requestId": "chromium-negative-modifier", + "status": "MALFORMED", + "code": "COMMAND_MALFORMED", + "baseRevision": 3, + "mainRevisionBefore": 3, + "mainRevisionAfter": 3, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_MALFORMED", + "message": "COMMAND_MALFORMED: modifier payload must contain only modifierUuid and enabled" + } + }, + "modifierUnsupported": { + "schemaVersion": 1, + "requestId": "chromium-negative-modifier", + "status": "UNSUPPORTED", + "code": "COMMAND_UNSUPPORTED", + "baseRevision": 3, + "mainRevisionBefore": 3, + "mainRevisionAfter": 3, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_UNSUPPORTED", + "message": "COMMAND_UNSUPPORTED: modifier modifier:missing does not exist" + } + }, + "modifierRevision": { + "schemaVersion": 1, + "requestId": "chromium-negative-modifier", + "status": "BLOCKED", + "code": "REVISION_CONFLICT", + "baseRevision": 2, + "mainRevisionBefore": 3, + "mainRevisionAfter": 3, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "REVISION_CONFLICT", + "message": "base revision does not match current Main" + } + }, + "meshMalformed": { + "schemaVersion": 1, + "requestId": "chromium-negative-mesh", + "status": "MALFORMED", + "code": "COMMAND_MALFORMED", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_MALFORMED", + "message": "COMMAND_MALFORMED: mesh delta must contain only x, y, and z" + } + }, + "meshUnsupported": { + "schemaVersion": 1, + "requestId": "chromium-negative-mesh", + "status": "UNSUPPORTED", + "code": "COMMAND_UNSUPPORTED", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_UNSUPPORTED", + "message": "COMMAND_UNSUPPORTED: vertex vertex:missing does not exist" + } + }, + "meshRevision": { + "schemaVersion": 1, + "requestId": "chromium-negative-mesh", + "status": "BLOCKED", + "code": "REVISION_CONFLICT", + "baseRevision": 3, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "REVISION_CONFLICT", + "message": "base revision does not match current Main" + } + }, + "assetMalformed": { + "schemaVersion": 1, + "requestId": "chromium-negative-asset", + "status": "MALFORMED", + "code": "COMMAND_MALFORMED", + "baseRevision": 2, + "mainRevisionBefore": 2, + "mainRevisionAfter": 2, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_MALFORMED", + "message": "COMMAND_MALFORMED: catalog entry payload is invalid" + } + }, + "assetResourceMissing": { + "schemaVersion": 1, + "requestId": "chromium-negative-asset", + "status": "EXTERNAL_REQUIRED", + "code": "RESOURCE_REQUIRED", + "baseRevision": 2, + "mainRevisionBefore": 2, + "mainRevisionAfter": 2, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "RESOURCE_REQUIRED", + "message": "RESOURCE_REQUIRED: RESOURCE_REQUIRED: EXTERNAL_LIBRARY provider is required" + } + }, + "assetRevision": { + "schemaVersion": 1, + "requestId": "chromium-negative-asset", + "status": "BLOCKED", + "code": "REVISION_CONFLICT", + "baseRevision": 1, + "mainRevisionBefore": 2, + "mainRevisionAfter": 2, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "REVISION_CONFLICT", + "message": "base revision does not match current Main" + } + } + }, + "snapshots": { + "modifier": { + "value": { + "modifiers": [ + { + "uuid": "modifier:one", + "name": "One", + "type": "BEVEL", + "enabled": false, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 3, + "dirty": false + }, + "mesh": { + "value": { + "vertices": [ + { + "id": "vertex:0", + "x": 0, + "y": 0, + "z": 0 + } + ] + }, + "revision": 4, + "dirty": false + }, + "asset": { + "value": { + "entries": [] + }, + "revision": 2, + "dirty": false + } + }, + "unchanged": true +} diff --git a/tests/golden/corrective/C4-003/chromium-negative-report.second.json b/tests/golden/corrective/C4-003/chromium-negative-report.second.json new file mode 100644 index 00000000..3837f620 --- /dev/null +++ b/tests/golden/corrective/C4-003/chromium-negative-report.second.json @@ -0,0 +1,193 @@ +{ + "schemaVersion": 1, + "task": "C4-003", + "operation": "CORRECTIVE_NEGATIVE_MATRIX_CHROMIUM", + "browser": "chromium", + "queueMutation": false, + "results": { + "modifierMalformed": { + "schemaVersion": 1, + "requestId": "chromium-negative-modifier", + "status": "MALFORMED", + "code": "COMMAND_MALFORMED", + "baseRevision": 3, + "mainRevisionBefore": 3, + "mainRevisionAfter": 3, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_MALFORMED", + "message": "COMMAND_MALFORMED: modifier payload must contain only modifierUuid and enabled" + } + }, + "modifierUnsupported": { + "schemaVersion": 1, + "requestId": "chromium-negative-modifier", + "status": "UNSUPPORTED", + "code": "COMMAND_UNSUPPORTED", + "baseRevision": 3, + "mainRevisionBefore": 3, + "mainRevisionAfter": 3, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_UNSUPPORTED", + "message": "COMMAND_UNSUPPORTED: modifier modifier:missing does not exist" + } + }, + "modifierRevision": { + "schemaVersion": 1, + "requestId": "chromium-negative-modifier", + "status": "BLOCKED", + "code": "REVISION_CONFLICT", + "baseRevision": 2, + "mainRevisionBefore": 3, + "mainRevisionAfter": 3, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "REVISION_CONFLICT", + "message": "base revision does not match current Main" + } + }, + "meshMalformed": { + "schemaVersion": 1, + "requestId": "chromium-negative-mesh", + "status": "MALFORMED", + "code": "COMMAND_MALFORMED", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_MALFORMED", + "message": "COMMAND_MALFORMED: mesh delta must contain only x, y, and z" + } + }, + "meshUnsupported": { + "schemaVersion": 1, + "requestId": "chromium-negative-mesh", + "status": "UNSUPPORTED", + "code": "COMMAND_UNSUPPORTED", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_UNSUPPORTED", + "message": "COMMAND_UNSUPPORTED: vertex vertex:missing does not exist" + } + }, + "meshRevision": { + "schemaVersion": 1, + "requestId": "chromium-negative-mesh", + "status": "BLOCKED", + "code": "REVISION_CONFLICT", + "baseRevision": 3, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "REVISION_CONFLICT", + "message": "base revision does not match current Main" + } + }, + "assetMalformed": { + "schemaVersion": 1, + "requestId": "chromium-negative-asset", + "status": "MALFORMED", + "code": "COMMAND_MALFORMED", + "baseRevision": 2, + "mainRevisionBefore": 2, + "mainRevisionAfter": 2, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_MALFORMED", + "message": "COMMAND_MALFORMED: catalog entry payload is invalid" + } + }, + "assetResourceMissing": { + "schemaVersion": 1, + "requestId": "chromium-negative-asset", + "status": "EXTERNAL_REQUIRED", + "code": "RESOURCE_REQUIRED", + "baseRevision": 2, + "mainRevisionBefore": 2, + "mainRevisionAfter": 2, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "RESOURCE_REQUIRED", + "message": "RESOURCE_REQUIRED: RESOURCE_REQUIRED: EXTERNAL_LIBRARY provider is required" + } + }, + "assetRevision": { + "schemaVersion": 1, + "requestId": "chromium-negative-asset", + "status": "BLOCKED", + "code": "REVISION_CONFLICT", + "baseRevision": 1, + "mainRevisionBefore": 2, + "mainRevisionAfter": 2, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "REVISION_CONFLICT", + "message": "base revision does not match current Main" + } + } + }, + "snapshots": { + "modifier": { + "value": { + "modifiers": [ + { + "uuid": "modifier:one", + "name": "One", + "type": "BEVEL", + "enabled": false, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 3, + "dirty": false + }, + "mesh": { + "value": { + "vertices": [ + { + "id": "vertex:0", + "x": 0, + "y": 0, + "z": 0 + } + ] + }, + "revision": 4, + "dirty": false + }, + "asset": { + "value": { + "entries": [] + }, + "revision": 2, + "dirty": false + } + }, + "unchanged": true +} diff --git a/tests/golden/corrective/C4-003/command-exit-codes.json b/tests/golden/corrective/C4-003/command-exit-codes.json new file mode 100644 index 00000000..2b844ad8 --- /dev/null +++ b/tests/golden/corrective/C4-003/command-exit-codes.json @@ -0,0 +1,16 @@ +{ + "focusedTest": 0, + "chromiumPilot": 0, + "chromiumPilotSecond": 0, + "determinism": 0, + "receiptGate": 0, + "regression": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0, + "protectedHashCheck": 0, + "sourceHashCheck": 0 +} diff --git a/tests/golden/corrective/C4-003/deterministic-negative-report.mjs b/tests/golden/corrective/C4-003/deterministic-negative-report.mjs new file mode 100644 index 00000000..2b1ae3f7 --- /dev/null +++ b/tests/golden/corrective/C4-003/deterministic-negative-report.mjs @@ -0,0 +1,17 @@ +import assert from "node:assert/strict"; +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import { fileURLToPath, pathToFileURL } from "node:url"; +import ts from "../../../../web/node_modules/typescript/lib/typescript.js"; +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../../.."); const temp = fs.mkdtempSync(path.join(os.tmpdir(), "corrective-negative-report-")); +const compile = (source, output, replacements = []) => { const input = path.join(root, source); const result = ts.transpileModule(fs.readFileSync(input, "utf8"), { compilerOptions: { module: ts.ModuleKind.ES2022, target: ts.ScriptTarget.ES2022 }, fileName: input, reportDiagnostics: true }); assert.deepEqual(result.diagnostics, []); let text = result.outputText; for (const [from, to] of replacements) text = text.replaceAll(from, to); fs.writeFileSync(output, text); }; +try { + const names = ["corrective-case-runner", "corrective-command-registry", "corrective-main-transaction", "corrective-resource-provider", "corrective-asset-catalog-command", "corrective-modifier-command", "corrective-mesh-command"]; const files = Object.fromEntries(names.map((name) => [name, path.join(temp, `${name}.mjs`)])); + compile("web/protocol/corrective-case-runner.ts", files["corrective-case-runner"]); compile("web/protocol/corrective-command-registry.ts", files["corrective-command-registry"], [["from \"./corrective-case-runner\"", "from \"./corrective-case-runner.mjs\""]]); compile("web/protocol/corrective-main-transaction.ts", files["corrective-main-transaction"], [["from \"./corrective-case-runner\"", "from \"./corrective-case-runner.mjs\""]]); compile("web/protocol/corrective-resource-provider.ts", files["corrective-resource-provider"]); compile("web/protocol/corrective-asset-catalog-command.ts", files["corrective-asset-catalog-command"], [["from \"./corrective-command-registry\"", "from \"./corrective-command-registry.mjs\""], ["from \"./corrective-case-runner\"", "from \"./corrective-case-runner.mjs\""], ["from \"./corrective-main-transaction\"", "from \"./corrective-main-transaction.mjs\""], ["from \"./corrective-resource-provider\"", "from \"./corrective-resource-provider.mjs\""]]); compile("web/protocol/corrective-modifier-command.ts", files["corrective-modifier-command"], [["from \"./corrective-command-registry\"", "from \"./corrective-command-registry.mjs\""], ["from \"./corrective-case-runner\"", "from \"./corrective-case-runner.mjs\""], ["from \"./corrective-main-transaction\"", "from \"./corrective-main-transaction.mjs\""]]); compile("web/protocol/corrective-mesh-command.ts", files["corrective-mesh-command"], [["from \"./corrective-command-registry\"", "from \"./corrective-command-registry.mjs\""], ["from \"./corrective-case-runner\"", "from \"./corrective-case-runner.mjs\""], ["from \"./corrective-main-transaction\"", "from \"./corrective-main-transaction.mjs\""]]); + const { InMemoryMainStore } = await import(pathToFileURL(files["corrective-main-transaction"])); const { AssetCatalogResourceResolver } = await import(pathToFileURL(files["corrective-resource-provider"])); const { createAssetCatalogRegistry } = await import(pathToFileURL(files["corrective-asset-catalog-command"])); const { createModifierMain, createModifierRegistry } = await import(pathToFileURL(files["corrective-modifier-command"])); const { createMeshMain, createMeshRegistry } = await import(pathToFileURL(files["corrective-mesh-command"])); + const modifierFixture = [{ uuid: "modifier:one", name: "One", type: "BEVEL", enabled: false, showViewport: true, showRender: true }]; const meshFixture = [{ id: "vertex:0", x: 0, y: 0, z: 0 }]; const modifierCommand = (overrides = {}) => ({ schemaVersion: 1, requestId: "negative-modifier", commandType: "modifierSetEnabled", baseRevision: 3, context: { mainId: "main:modifier", targetKind: "MODIFIER", targetId: "modifier:one", editMode: "EDITABLE", authorization: "USER_EDIT", source: { kind: "LOCAL", sha256: "c".repeat(64) } }, payload: { modifierUuid: "modifier:one", enabled: true }, ...overrides }); const meshCommand = (overrides = {}) => ({ schemaVersion: 1, requestId: "negative-mesh", commandType: "meshTranslateVertex", baseRevision: 4, context: { mainId: "main:mesh", targetKind: "MESH", targetId: "mesh:one", editMode: "EDITABLE", authorization: "USER_EDIT", source: { kind: "LOCAL", sha256: "d".repeat(64) } }, payload: { vertexId: "vertex:0", delta: { x: 1, y: 0, z: 0 } }, ...overrides }); const assetCommand = (overrides = {}) => ({ schemaVersion: 1, requestId: "negative-asset", commandType: "assetCatalogAppend", baseRevision: 2, context: { mainId: "main:asset", targetKind: "ASSET_LIBRARY", targetId: "library:one", editMode: "EDITABLE", authorization: "USER_EDIT", source: { kind: "EXTERNAL", sha256: "e".repeat(64) }, resourceProvider: "EXTERNAL_LIBRARY" }, payload: { id: "asset:one", name: "One", resource: { schemaVersion: 1, requestId: "resource-one", sourceKind: "EXTERNAL", sourceId: "library.blend", sha256: "e".repeat(64) } }, ...overrides }); + const modifierMain = createModifierMain(modifierFixture, 3, false); const modifierRegistry = createModifierRegistry(modifierMain); const meshMain = createMeshMain(meshFixture, 4, false); const meshRegistry = createMeshRegistry(meshMain); const assetMain = new InMemoryMainStore({ entries: [] }, 2, false, (value) => ({ entries: value.entries.map((entry) => ({ ...entry })) })); const resources = new AssetCatalogResourceResolver(); resources.setActiveLibraryContext({ libraryId: "library:one", sourceKind: "EXTERNAL", sourceId: "library.blend", generation: 1, revision: 2, readOnly: false }); const assetRegistry = createAssetCatalogRegistry(assetMain, resources); + const cases = [["modifierMalformed", modifierRegistry, "DESKTOP", modifierCommand({ payload: { modifierUuid: "modifier:one", enabled: true, extra: true } }), 3], ["modifierUnsupported", modifierRegistry, "WASM", modifierCommand({ payload: { modifierUuid: "modifier:missing", enabled: true } }), 3], ["modifierRevision", modifierRegistry, "DESKTOP", modifierCommand({ baseRevision: 2 }), 3], ["meshMalformed", meshRegistry, "WASM", meshCommand({ payload: { vertexId: "vertex:0", delta: { x: 1, y: 0, z: 0, extra: true } } }), 4], ["meshUnsupported", meshRegistry, "DESKTOP", meshCommand({ payload: { vertexId: "vertex:missing", delta: { x: 1, y: 0, z: 0 } } }), 4], ["meshRevision", meshRegistry, "WASM", meshCommand({ baseRevision: 3 }), 4], ["assetMalformed", assetRegistry, "DESKTOP", assetCommand({ payload: { id: "bad id" } }), 2], ["assetResourceMissing", assetRegistry, "WASM", assetCommand(), 2], ["assetRevision", assetRegistry, "DESKTOP", assetCommand({ baseRevision: 1 }), 2]]; const results = {}; for (const [name, registry, surface, command, mainRevision] of cases) results[name] = (await registry.dispatch(surface, { command, mainRevision })).result; + process.stdout.write(`${JSON.stringify({ schemaVersion: 1, task: "C4-003", operation: "CORRECTIVE_NEGATIVE_MATRIX", queueMutation: false, caseCount: cases.length, results, snapshots: { modifier: modifierMain.snapshot(), mesh: meshMain.snapshot(), asset: assetMain.snapshot() }, unchanged: Object.values(results).every((result) => result.mainMutation === "UNCHANGED") }, null, 2)}\n`); +} finally { fs.rmSync(temp, { recursive: true, force: true }); } diff --git a/tests/golden/corrective/C4-003/handoff.json b/tests/golden/corrective/C4-003/handoff.json new file mode 100644 index 00000000..6c47b992 --- /dev/null +++ b/tests/golden/corrective/C4-003/handoff.json @@ -0,0 +1,152 @@ +{ + "schemaVersion": 1, + "task": "C4-003", + "status": "done", + "gate": "G4", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C4-003", + "artifactCount": 22, + "artifacts": [ + { + "path": "tests/golden/corrective/C4-003/check-context-governance.log", + "sha256": "7ed574f956f0255482a15f63faedc657fc7eb0fa643d282a430f27a207b5bf8d", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C4-003/check-corrective-plan.log", + "sha256": "82ae6f81d12518c587e699ee6f9e0b67b27d57d5c779b52148f7eb8c0fbed108", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C4-003/check-task-context.log", + "sha256": "cf9fb3f108cb7febf3d6d17543cb1abf9356174eb34d379652dd288aca6db2d7", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C4-003/chromium-negative-report.json", + "sha256": "bcbca6edd64f3a379367a2ffe4f0dbeeb039e98b08baeeb4a312335f1323e5f6", + "bytes": 5211 + }, + { + "path": "tests/golden/corrective/C4-003/chromium-negative-report.second.json", + "sha256": "bcbca6edd64f3a379367a2ffe4f0dbeeb039e98b08baeeb4a312335f1323e5f6", + "bytes": 5211 + }, + { + "path": "tests/golden/corrective/C4-003/command-exit-codes.json", + "sha256": "18a5662eb4696eb25085b5881d862d1e04e07a42c4bf2476dc571e2724ae33ba", + "bytes": 313 + }, + { + "path": "tests/golden/corrective/C4-003/determinism.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C4-003/deterministic-negative-report.mjs", + "sha256": "462e42a0d80c1589aa85a9379a707bab7eff6bbec0ee02ae5554d71c0fb1f6c2", + "bytes": 7342 + }, + { + "path": "tests/golden/corrective/C4-003/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C4-003/focused-test.log", + "sha256": "372d9c73ab4ad7bb0b38e953c3a43efce7bf0f7b81098d071b4e777f3ef2f627", + "bytes": 319 + }, + { + "path": "tests/golden/corrective/C4-003/negative-matrix.test.mjs", + "sha256": "92501c55199879fc7341110a4d7416ec2794406d72837f2865b0993fd3c08937", + "bytes": 8325 + }, + { + "path": "tests/golden/corrective/C4-003/node-negative-report.json", + "sha256": "14a73aa7a1b56f661a79092ba954d1ef9d1b70e03c82f73cda0fed248405af2d", + "bytes": 5114 + }, + { + "path": "tests/golden/corrective/C4-003/node-negative-report.second.json", + "sha256": "14a73aa7a1b56f661a79092ba954d1ef9d1b70e03c82f73cda0fed248405af2d", + "bytes": 5114 + }, + { + "path": "tests/golden/corrective/C4-003/protected-hash-check.log", + "sha256": "deb15d1fa1d5606bcbe760b066dfba312bd586df82228214668f149385940ac5", + "bytes": 28 + }, + { + "path": "tests/golden/corrective/C4-003/protected-hashes-after.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C4-003/protected-hashes-before.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C4-003/receipt-gate.log", + "sha256": "b7232f6bbf51bc5ea9df43b9295d5c29178a7785d284dc0ac59a1103f1ad6850", + "bytes": 55 + }, + { + "path": "tests/golden/corrective/C4-003/regression.log", + "sha256": "38759244dc7a480d70840206cab604be77dcd4e4826e705b035f8cf63de645d5", + "bytes": 1749 + }, + { + "path": "tests/golden/corrective/C4-003/source-hash-check.log", + "sha256": "1fbb7f6f6cab553f466152cdadd08fb238015fdf5c9dc8e20f1af49e58eb7bee", + "bytes": 24 + }, + { + "path": "tests/golden/corrective/C4-003/source-hashes.json", + "sha256": "881aec30b7fe18db6521367e8c56895b6ecdeebf68328058dd737cab601ef208", + "bytes": 1487 + }, + { + "path": "tests/golden/corrective/C4-003/test-context-governance.log", + "sha256": "af43fb7b187341cb511e4d100729744ddcd0bef79c105a7642b5edea5e943c59", + "bytes": 2577 + }, + { + "path": "tests/golden/corrective/C4-003/typecheck.log", + "sha256": "f90c14a9694ed7029129a343fa5cc8672e4a59a5fe4b34e7c3098db9c5c5bd1a", + "bytes": 76 + } + ], + "sourceHashes": { + "tests/golden/corrective/C3-003/manifest.json": "534e31e95853617d1ffef601539f104854355c530de8c03285e695794ac6a5db", + "tests/golden/corrective/C4-001/manifest.json": "5ae2a511340e8d7cda7f2f73ce682fef6b33781c81bb6f483339b6a2868e103d", + "tests/golden/corrective/C4-002/manifest.json": "e27cd032a77886cab91e9e04c7ea614c137bbed6d7cacde8d6f5d059d7923454", + "web/protocol/corrective-case-runner.ts": "fbfc9f72cce84acc773818993b6630d73df1ce6cab7781f172d871b42b8bf70d", + "web/protocol/corrective-command-registry.ts": "cb0553aac346d34d3c2c12501d2bf681c6edd36c7d6ce5de43c6178b42296897", + "web/protocol/corrective-asset-catalog-command.ts": "e94ef8d6aa7cf427cdd41c4287ee2fd1ddd97342e1e4ae3a91f4f50483e7d8ef", + "web/protocol/corrective-modifier-command.ts": "3b545bb823f2bccb5a16260d62b083b046a2e07bc140dd177c08878f1dfc0431", + "web/protocol/corrective-mesh-command.ts": "53ca11912380bedfad782ed587d809270571a4800ef87b71bb992bcb4ae34937", + "web/app/src/corrective-pilot-bridge.ts": "ab471cd1c1bbcc69529b3aeba7051b462df19c928a676c7d6c564e38017692d5", + "web/tests/e2e/corrective-negative-matrix.spec.ts": "e952d4ae7fa5651358169dae66e84da45457a6baf6c1c95625529f2f830b8b1c", + "tests/golden/corrective/C4-003/negative-matrix.test.mjs": "92501c55199879fc7341110a4d7416ec2794406d72837f2865b0993fd3c08937", + "tests/golden/corrective/C4-003/deterministic-negative-report.mjs": "462e42a0d80c1589aa85a9379a707bab7eff6bbec0ee02ae5554d71c0fb1f6c2" + }, + "commandExitCodes": { + "focusedTest": 0, + "chromiumPilot": 0, + "chromiumPilotSecond": 0, + "determinism": 0, + "receiptGate": 0, + "regression": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0, + "protectedHashCheck": 0, + "sourceHashCheck": 0 + }, + "nextCorrectiveTask": "C5-001" +} diff --git a/tests/golden/corrective/C4-003/manifest.json b/tests/golden/corrective/C4-003/manifest.json new file mode 100644 index 00000000..6c47b992 --- /dev/null +++ b/tests/golden/corrective/C4-003/manifest.json @@ -0,0 +1,152 @@ +{ + "schemaVersion": 1, + "task": "C4-003", + "status": "done", + "gate": "G4", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C4-003", + "artifactCount": 22, + "artifacts": [ + { + "path": "tests/golden/corrective/C4-003/check-context-governance.log", + "sha256": "7ed574f956f0255482a15f63faedc657fc7eb0fa643d282a430f27a207b5bf8d", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C4-003/check-corrective-plan.log", + "sha256": "82ae6f81d12518c587e699ee6f9e0b67b27d57d5c779b52148f7eb8c0fbed108", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C4-003/check-task-context.log", + "sha256": "cf9fb3f108cb7febf3d6d17543cb1abf9356174eb34d379652dd288aca6db2d7", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C4-003/chromium-negative-report.json", + "sha256": "bcbca6edd64f3a379367a2ffe4f0dbeeb039e98b08baeeb4a312335f1323e5f6", + "bytes": 5211 + }, + { + "path": "tests/golden/corrective/C4-003/chromium-negative-report.second.json", + "sha256": "bcbca6edd64f3a379367a2ffe4f0dbeeb039e98b08baeeb4a312335f1323e5f6", + "bytes": 5211 + }, + { + "path": "tests/golden/corrective/C4-003/command-exit-codes.json", + "sha256": "18a5662eb4696eb25085b5881d862d1e04e07a42c4bf2476dc571e2724ae33ba", + "bytes": 313 + }, + { + "path": "tests/golden/corrective/C4-003/determinism.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C4-003/deterministic-negative-report.mjs", + "sha256": "462e42a0d80c1589aa85a9379a707bab7eff6bbec0ee02ae5554d71c0fb1f6c2", + "bytes": 7342 + }, + { + "path": "tests/golden/corrective/C4-003/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C4-003/focused-test.log", + "sha256": "372d9c73ab4ad7bb0b38e953c3a43efce7bf0f7b81098d071b4e777f3ef2f627", + "bytes": 319 + }, + { + "path": "tests/golden/corrective/C4-003/negative-matrix.test.mjs", + "sha256": "92501c55199879fc7341110a4d7416ec2794406d72837f2865b0993fd3c08937", + "bytes": 8325 + }, + { + "path": "tests/golden/corrective/C4-003/node-negative-report.json", + "sha256": "14a73aa7a1b56f661a79092ba954d1ef9d1b70e03c82f73cda0fed248405af2d", + "bytes": 5114 + }, + { + "path": "tests/golden/corrective/C4-003/node-negative-report.second.json", + "sha256": "14a73aa7a1b56f661a79092ba954d1ef9d1b70e03c82f73cda0fed248405af2d", + "bytes": 5114 + }, + { + "path": "tests/golden/corrective/C4-003/protected-hash-check.log", + "sha256": "deb15d1fa1d5606bcbe760b066dfba312bd586df82228214668f149385940ac5", + "bytes": 28 + }, + { + "path": "tests/golden/corrective/C4-003/protected-hashes-after.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C4-003/protected-hashes-before.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C4-003/receipt-gate.log", + "sha256": "b7232f6bbf51bc5ea9df43b9295d5c29178a7785d284dc0ac59a1103f1ad6850", + "bytes": 55 + }, + { + "path": "tests/golden/corrective/C4-003/regression.log", + "sha256": "38759244dc7a480d70840206cab604be77dcd4e4826e705b035f8cf63de645d5", + "bytes": 1749 + }, + { + "path": "tests/golden/corrective/C4-003/source-hash-check.log", + "sha256": "1fbb7f6f6cab553f466152cdadd08fb238015fdf5c9dc8e20f1af49e58eb7bee", + "bytes": 24 + }, + { + "path": "tests/golden/corrective/C4-003/source-hashes.json", + "sha256": "881aec30b7fe18db6521367e8c56895b6ecdeebf68328058dd737cab601ef208", + "bytes": 1487 + }, + { + "path": "tests/golden/corrective/C4-003/test-context-governance.log", + "sha256": "af43fb7b187341cb511e4d100729744ddcd0bef79c105a7642b5edea5e943c59", + "bytes": 2577 + }, + { + "path": "tests/golden/corrective/C4-003/typecheck.log", + "sha256": "f90c14a9694ed7029129a343fa5cc8672e4a59a5fe4b34e7c3098db9c5c5bd1a", + "bytes": 76 + } + ], + "sourceHashes": { + "tests/golden/corrective/C3-003/manifest.json": "534e31e95853617d1ffef601539f104854355c530de8c03285e695794ac6a5db", + "tests/golden/corrective/C4-001/manifest.json": "5ae2a511340e8d7cda7f2f73ce682fef6b33781c81bb6f483339b6a2868e103d", + "tests/golden/corrective/C4-002/manifest.json": "e27cd032a77886cab91e9e04c7ea614c137bbed6d7cacde8d6f5d059d7923454", + "web/protocol/corrective-case-runner.ts": "fbfc9f72cce84acc773818993b6630d73df1ce6cab7781f172d871b42b8bf70d", + "web/protocol/corrective-command-registry.ts": "cb0553aac346d34d3c2c12501d2bf681c6edd36c7d6ce5de43c6178b42296897", + "web/protocol/corrective-asset-catalog-command.ts": "e94ef8d6aa7cf427cdd41c4287ee2fd1ddd97342e1e4ae3a91f4f50483e7d8ef", + "web/protocol/corrective-modifier-command.ts": "3b545bb823f2bccb5a16260d62b083b046a2e07bc140dd177c08878f1dfc0431", + "web/protocol/corrective-mesh-command.ts": "53ca11912380bedfad782ed587d809270571a4800ef87b71bb992bcb4ae34937", + "web/app/src/corrective-pilot-bridge.ts": "ab471cd1c1bbcc69529b3aeba7051b462df19c928a676c7d6c564e38017692d5", + "web/tests/e2e/corrective-negative-matrix.spec.ts": "e952d4ae7fa5651358169dae66e84da45457a6baf6c1c95625529f2f830b8b1c", + "tests/golden/corrective/C4-003/negative-matrix.test.mjs": "92501c55199879fc7341110a4d7416ec2794406d72837f2865b0993fd3c08937", + "tests/golden/corrective/C4-003/deterministic-negative-report.mjs": "462e42a0d80c1589aa85a9379a707bab7eff6bbec0ee02ae5554d71c0fb1f6c2" + }, + "commandExitCodes": { + "focusedTest": 0, + "chromiumPilot": 0, + "chromiumPilotSecond": 0, + "determinism": 0, + "receiptGate": 0, + "regression": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0, + "protectedHashCheck": 0, + "sourceHashCheck": 0 + }, + "nextCorrectiveTask": "C5-001" +} diff --git a/tests/golden/corrective/C4-003/negative-matrix.test.mjs b/tests/golden/corrective/C4-003/negative-matrix.test.mjs new file mode 100644 index 00000000..10415ad6 --- /dev/null +++ b/tests/golden/corrective/C4-003/negative-matrix.test.mjs @@ -0,0 +1,41 @@ +import assert from "node:assert/strict"; +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import test from "node:test"; +import { fileURLToPath, pathToFileURL } from "node:url"; +import ts from "../../../../web/node_modules/typescript/lib/typescript.js"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../../.."); const temp = fs.mkdtempSync(path.join(os.tmpdir(), "corrective-negative-matrix-")); +const compile = (source, output, replacements = []) => { const input = path.join(root, source); const result = ts.transpileModule(fs.readFileSync(input, "utf8"), { compilerOptions: { module: ts.ModuleKind.ES2022, target: ts.ScriptTarget.ES2022 }, fileName: input, reportDiagnostics: true }); assert.deepEqual(result.diagnostics, []); let text = result.outputText; for (const [from, to] of replacements) text = text.replaceAll(from, to); fs.writeFileSync(output, text); }; +try { + const names = ["corrective-case-runner", "corrective-command-registry", "corrective-main-transaction", "corrective-resource-provider", "corrective-asset-catalog-command", "corrective-modifier-command", "corrective-mesh-command"]; + const files = Object.fromEntries(names.map((name) => [name, path.join(temp, `${name}.mjs`)])); + compile("web/protocol/corrective-case-runner.ts", files["corrective-case-runner"]); compile("web/protocol/corrective-command-registry.ts", files["corrective-command-registry"], [["from \"./corrective-case-runner\"", "from \"./corrective-case-runner.mjs\""]]); compile("web/protocol/corrective-main-transaction.ts", files["corrective-main-transaction"], [["from \"./corrective-case-runner\"", "from \"./corrective-case-runner.mjs\""]]); compile("web/protocol/corrective-resource-provider.ts", files["corrective-resource-provider"]); + compile("web/protocol/corrective-asset-catalog-command.ts", files["corrective-asset-catalog-command"], [["from \"./corrective-command-registry\"", "from \"./corrective-command-registry.mjs\""], ["from \"./corrective-case-runner\"", "from \"./corrective-case-runner.mjs\""], ["from \"./corrective-main-transaction\"", "from \"./corrective-main-transaction.mjs\""], ["from \"./corrective-resource-provider\"", "from \"./corrective-resource-provider.mjs\""]]); + compile("web/protocol/corrective-modifier-command.ts", files["corrective-modifier-command"], [["from \"./corrective-command-registry\"", "from \"./corrective-command-registry.mjs\""], ["from \"./corrective-case-runner\"", "from \"./corrective-case-runner.mjs\""], ["from \"./corrective-main-transaction\"", "from \"./corrective-main-transaction.mjs\""]]); compile("web/protocol/corrective-mesh-command.ts", files["corrective-mesh-command"], [["from \"./corrective-command-registry\"", "from \"./corrective-command-registry.mjs\""], ["from \"./corrective-case-runner\"", "from \"./corrective-case-runner.mjs\""], ["from \"./corrective-main-transaction\"", "from \"./corrective-main-transaction.mjs\""]]); + const { InMemoryMainStore } = await import(pathToFileURL(files["corrective-main-transaction"])); const { AssetCatalogResourceResolver } = await import(pathToFileURL(files["corrective-resource-provider"])); const { createAssetCatalogRegistry } = await import(pathToFileURL(files["corrective-asset-catalog-command"])); const { createModifierMain, createModifierRegistry } = await import(pathToFileURL(files["corrective-modifier-command"])); const { createMeshMain, createMeshRegistry } = await import(pathToFileURL(files["corrective-mesh-command"])); + const modifierFixture = [{ uuid: "modifier:one", name: "One", type: "BEVEL", enabled: false, showViewport: true, showRender: true }]; const meshFixture = [{ id: "vertex:0", x: 0, y: 0, z: 0 }]; + const modifierCommand = (overrides = {}) => ({ schemaVersion: 1, requestId: "negative-modifier", commandType: "modifierSetEnabled", baseRevision: 3, context: { mainId: "main:modifier", targetKind: "MODIFIER", targetId: "modifier:one", editMode: "EDITABLE", authorization: "USER_EDIT", source: { kind: "LOCAL", sha256: "c".repeat(64) } }, payload: { modifierUuid: "modifier:one", enabled: true }, ...overrides }); + const meshCommand = (overrides = {}) => ({ schemaVersion: 1, requestId: "negative-mesh", commandType: "meshTranslateVertex", baseRevision: 4, context: { mainId: "main:mesh", targetKind: "MESH", targetId: "mesh:one", editMode: "EDITABLE", authorization: "USER_EDIT", source: { kind: "LOCAL", sha256: "d".repeat(64) } }, payload: { vertexId: "vertex:0", delta: { x: 1, y: 0, z: 0 } }, ...overrides }); + const assetCommand = (overrides = {}) => ({ schemaVersion: 1, requestId: "negative-asset", commandType: "assetCatalogAppend", baseRevision: 2, context: { mainId: "main:asset", targetKind: "ASSET_LIBRARY", targetId: "library:one", editMode: "EDITABLE", authorization: "USER_EDIT", source: { kind: "EXTERNAL", sha256: "e".repeat(64) }, resourceProvider: "EXTERNAL_LIBRARY" }, payload: { id: "asset:one", name: "One", resource: { schemaVersion: 1, requestId: "resource-one", sourceKind: "EXTERNAL", sourceId: "library.blend", sha256: "e".repeat(64) } }, ...overrides }); + const run = async () => { + const modifierMain = createModifierMain(modifierFixture, 3, false); const modifierRegistry = createModifierRegistry(modifierMain); const meshMain = createMeshMain(meshFixture, 4, false); const meshRegistry = createMeshRegistry(meshMain); const assetMain = new InMemoryMainStore({ entries: [] }, 2, false, (value) => ({ entries: value.entries.map((entry) => ({ ...entry })) })); const resources = new AssetCatalogResourceResolver(); resources.setActiveLibraryContext({ libraryId: "library:one", sourceKind: "EXTERNAL", sourceId: "library.blend", generation: 1, revision: 2, readOnly: false }); const assetRegistry = createAssetCatalogRegistry(assetMain, resources); + const cases = [ + ["modifierMalformed", modifierRegistry, "DESKTOP", modifierCommand({ payload: { modifierUuid: "modifier:one", enabled: true, extra: true } }), 3], + ["modifierUnsupported", modifierRegistry, "WASM", modifierCommand({ payload: { modifierUuid: "modifier:missing", enabled: true } }), 3], + ["modifierRevision", modifierRegistry, "DESKTOP", modifierCommand({ baseRevision: 2 }), 3], + ["meshMalformed", meshRegistry, "WASM", meshCommand({ payload: { vertexId: "vertex:0", delta: { x: 1, y: 0, z: 0, extra: true } } }), 4], + ["meshUnsupported", meshRegistry, "DESKTOP", meshCommand({ payload: { vertexId: "vertex:missing", delta: { x: 1, y: 0, z: 0 } } }), 4], + ["meshRevision", meshRegistry, "WASM", meshCommand({ baseRevision: 3 }), 4], + ["assetMalformed", assetRegistry, "DESKTOP", assetCommand({ payload: { id: "bad id" } }), 2], + ["assetResourceMissing", assetRegistry, "WASM", assetCommand(), 2], + ["assetRevision", assetRegistry, "DESKTOP", assetCommand({ baseRevision: 1 }), 2], + ]; + const results = {}; for (const [name, registry, surface, command, mainRevision] of cases) results[name] = (await registry.dispatch(surface, { command, mainRevision })).result; + assert.equal(results.modifierMalformed.code, "COMMAND_MALFORMED"); assert.equal(results.modifierUnsupported.code, "COMMAND_UNSUPPORTED"); assert.equal(results.modifierRevision.code, "REVISION_CONFLICT"); assert.equal(results.meshMalformed.code, "COMMAND_MALFORMED"); assert.equal(results.meshUnsupported.code, "COMMAND_UNSUPPORTED"); assert.equal(results.meshRevision.code, "REVISION_CONFLICT"); assert.equal(results.assetMalformed.code, "COMMAND_MALFORMED"); assert.equal(results.assetResourceMissing.code, "RESOURCE_REQUIRED"); assert.equal(results.assetRevision.code, "REVISION_CONFLICT"); + assert.deepEqual(modifierMain.snapshot(), { value: { modifiers: modifierFixture }, revision: 3, dirty: false }); assert.deepEqual(meshMain.snapshot(), { value: { vertices: meshFixture }, revision: 4, dirty: false }); assert.deepEqual(assetMain.snapshot(), { value: { entries: [] }, revision: 2, dirty: false }); + return { results, snapshots: { modifier: modifierMain.snapshot(), mesh: meshMain.snapshot(), asset: assetMain.snapshot() } }; + }; + test("all negative families preserve Main while returning closed failure codes", async () => { const report = await run(); assert.equal(Object.keys(report.results).length, 9); }); +} finally { fs.rmSync(temp, { recursive: true, force: true }); } diff --git a/tests/golden/corrective/C4-003/node-negative-report.json b/tests/golden/corrective/C4-003/node-negative-report.json new file mode 100644 index 00000000..8be68f2d --- /dev/null +++ b/tests/golden/corrective/C4-003/node-negative-report.json @@ -0,0 +1,193 @@ +{ + "schemaVersion": 1, + "task": "C4-003", + "operation": "CORRECTIVE_NEGATIVE_MATRIX", + "queueMutation": false, + "caseCount": 9, + "results": { + "modifierMalformed": { + "schemaVersion": 1, + "requestId": "negative-modifier", + "status": "MALFORMED", + "code": "COMMAND_MALFORMED", + "baseRevision": 3, + "mainRevisionBefore": 3, + "mainRevisionAfter": 3, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_MALFORMED", + "message": "COMMAND_MALFORMED: modifier payload must contain only modifierUuid and enabled" + } + }, + "modifierUnsupported": { + "schemaVersion": 1, + "requestId": "negative-modifier", + "status": "UNSUPPORTED", + "code": "COMMAND_UNSUPPORTED", + "baseRevision": 3, + "mainRevisionBefore": 3, + "mainRevisionAfter": 3, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_UNSUPPORTED", + "message": "COMMAND_UNSUPPORTED: modifier modifier:missing does not exist" + } + }, + "modifierRevision": { + "schemaVersion": 1, + "requestId": "negative-modifier", + "status": "BLOCKED", + "code": "REVISION_CONFLICT", + "baseRevision": 2, + "mainRevisionBefore": 3, + "mainRevisionAfter": 3, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "REVISION_CONFLICT", + "message": "base revision does not match current Main" + } + }, + "meshMalformed": { + "schemaVersion": 1, + "requestId": "negative-mesh", + "status": "MALFORMED", + "code": "COMMAND_MALFORMED", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_MALFORMED", + "message": "COMMAND_MALFORMED: mesh delta must contain only x, y, and z" + } + }, + "meshUnsupported": { + "schemaVersion": 1, + "requestId": "negative-mesh", + "status": "UNSUPPORTED", + "code": "COMMAND_UNSUPPORTED", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_UNSUPPORTED", + "message": "COMMAND_UNSUPPORTED: vertex vertex:missing does not exist" + } + }, + "meshRevision": { + "schemaVersion": 1, + "requestId": "negative-mesh", + "status": "BLOCKED", + "code": "REVISION_CONFLICT", + "baseRevision": 3, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "REVISION_CONFLICT", + "message": "base revision does not match current Main" + } + }, + "assetMalformed": { + "schemaVersion": 1, + "requestId": "negative-asset", + "status": "MALFORMED", + "code": "COMMAND_MALFORMED", + "baseRevision": 2, + "mainRevisionBefore": 2, + "mainRevisionAfter": 2, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_MALFORMED", + "message": "COMMAND_MALFORMED: catalog entry payload is invalid" + } + }, + "assetResourceMissing": { + "schemaVersion": 1, + "requestId": "negative-asset", + "status": "EXTERNAL_REQUIRED", + "code": "RESOURCE_REQUIRED", + "baseRevision": 2, + "mainRevisionBefore": 2, + "mainRevisionAfter": 2, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "RESOURCE_REQUIRED", + "message": "RESOURCE_REQUIRED: RESOURCE_REQUIRED: EXTERNAL_LIBRARY provider is required" + } + }, + "assetRevision": { + "schemaVersion": 1, + "requestId": "negative-asset", + "status": "BLOCKED", + "code": "REVISION_CONFLICT", + "baseRevision": 1, + "mainRevisionBefore": 2, + "mainRevisionAfter": 2, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "REVISION_CONFLICT", + "message": "base revision does not match current Main" + } + } + }, + "snapshots": { + "modifier": { + "value": { + "modifiers": [ + { + "uuid": "modifier:one", + "name": "One", + "type": "BEVEL", + "enabled": false, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 3, + "dirty": false + }, + "mesh": { + "value": { + "vertices": [ + { + "id": "vertex:0", + "x": 0, + "y": 0, + "z": 0 + } + ] + }, + "revision": 4, + "dirty": false + }, + "asset": { + "value": { + "entries": [] + }, + "revision": 2, + "dirty": false + } + }, + "unchanged": true +} diff --git a/tests/golden/corrective/C4-003/node-negative-report.second.json b/tests/golden/corrective/C4-003/node-negative-report.second.json new file mode 100644 index 00000000..8be68f2d --- /dev/null +++ b/tests/golden/corrective/C4-003/node-negative-report.second.json @@ -0,0 +1,193 @@ +{ + "schemaVersion": 1, + "task": "C4-003", + "operation": "CORRECTIVE_NEGATIVE_MATRIX", + "queueMutation": false, + "caseCount": 9, + "results": { + "modifierMalformed": { + "schemaVersion": 1, + "requestId": "negative-modifier", + "status": "MALFORMED", + "code": "COMMAND_MALFORMED", + "baseRevision": 3, + "mainRevisionBefore": 3, + "mainRevisionAfter": 3, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_MALFORMED", + "message": "COMMAND_MALFORMED: modifier payload must contain only modifierUuid and enabled" + } + }, + "modifierUnsupported": { + "schemaVersion": 1, + "requestId": "negative-modifier", + "status": "UNSUPPORTED", + "code": "COMMAND_UNSUPPORTED", + "baseRevision": 3, + "mainRevisionBefore": 3, + "mainRevisionAfter": 3, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_UNSUPPORTED", + "message": "COMMAND_UNSUPPORTED: modifier modifier:missing does not exist" + } + }, + "modifierRevision": { + "schemaVersion": 1, + "requestId": "negative-modifier", + "status": "BLOCKED", + "code": "REVISION_CONFLICT", + "baseRevision": 2, + "mainRevisionBefore": 3, + "mainRevisionAfter": 3, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "REVISION_CONFLICT", + "message": "base revision does not match current Main" + } + }, + "meshMalformed": { + "schemaVersion": 1, + "requestId": "negative-mesh", + "status": "MALFORMED", + "code": "COMMAND_MALFORMED", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_MALFORMED", + "message": "COMMAND_MALFORMED: mesh delta must contain only x, y, and z" + } + }, + "meshUnsupported": { + "schemaVersion": 1, + "requestId": "negative-mesh", + "status": "UNSUPPORTED", + "code": "COMMAND_UNSUPPORTED", + "baseRevision": 4, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_UNSUPPORTED", + "message": "COMMAND_UNSUPPORTED: vertex vertex:missing does not exist" + } + }, + "meshRevision": { + "schemaVersion": 1, + "requestId": "negative-mesh", + "status": "BLOCKED", + "code": "REVISION_CONFLICT", + "baseRevision": 3, + "mainRevisionBefore": 4, + "mainRevisionAfter": 4, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "REVISION_CONFLICT", + "message": "base revision does not match current Main" + } + }, + "assetMalformed": { + "schemaVersion": 1, + "requestId": "negative-asset", + "status": "MALFORMED", + "code": "COMMAND_MALFORMED", + "baseRevision": 2, + "mainRevisionBefore": 2, + "mainRevisionAfter": 2, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_MALFORMED", + "message": "COMMAND_MALFORMED: catalog entry payload is invalid" + } + }, + "assetResourceMissing": { + "schemaVersion": 1, + "requestId": "negative-asset", + "status": "EXTERNAL_REQUIRED", + "code": "RESOURCE_REQUIRED", + "baseRevision": 2, + "mainRevisionBefore": 2, + "mainRevisionAfter": 2, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "RESOURCE_REQUIRED", + "message": "RESOURCE_REQUIRED: RESOURCE_REQUIRED: EXTERNAL_LIBRARY provider is required" + } + }, + "assetRevision": { + "schemaVersion": 1, + "requestId": "negative-asset", + "status": "BLOCKED", + "code": "REVISION_CONFLICT", + "baseRevision": 1, + "mainRevisionBefore": 2, + "mainRevisionAfter": 2, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "REVISION_CONFLICT", + "message": "base revision does not match current Main" + } + } + }, + "snapshots": { + "modifier": { + "value": { + "modifiers": [ + { + "uuid": "modifier:one", + "name": "One", + "type": "BEVEL", + "enabled": false, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 3, + "dirty": false + }, + "mesh": { + "value": { + "vertices": [ + { + "id": "vertex:0", + "x": 0, + "y": 0, + "z": 0 + } + ] + }, + "revision": 4, + "dirty": false + }, + "asset": { + "value": { + "entries": [] + }, + "revision": 2, + "dirty": false + } + }, + "unchanged": true +} diff --git a/tests/golden/corrective/C4-003/protected-hashes-after.txt b/tests/golden/corrective/C4-003/protected-hashes-after.txt new file mode 100644 index 00000000..a0d2c8ba --- /dev/null +++ b/tests/golden/corrective/C4-003/protected-hashes-after.txt @@ -0,0 +1,7 @@ +5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1 docs/EXECUTION_QUEUE.md +32f4c11ebf8563f3aa500583f3979c1b38d711cc7328a428968118f0375b90b4 tests/golden/M15-03A/completed-gap-tasks.json +edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17 tests/golden/M15-03A/next-task-plan.json +da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d tests/golden/M15-03A/task-catalog.jsonl +ed591788c48c1b089decd2aa187f66728b5cc66a73c2b1c0c46c1a46ec4a0ae0 tests/golden/M15-03A/task-index.json +3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1 tests/golden/M16-GAP-00273/manifest.json +5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8 docs/status/M16-GAP-00273.md diff --git a/tests/golden/corrective/C4-003/protected-hashes-before.txt b/tests/golden/corrective/C4-003/protected-hashes-before.txt new file mode 100644 index 00000000..a0d2c8ba --- /dev/null +++ b/tests/golden/corrective/C4-003/protected-hashes-before.txt @@ -0,0 +1,7 @@ +5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1 docs/EXECUTION_QUEUE.md +32f4c11ebf8563f3aa500583f3979c1b38d711cc7328a428968118f0375b90b4 tests/golden/M15-03A/completed-gap-tasks.json +edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17 tests/golden/M15-03A/next-task-plan.json +da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d tests/golden/M15-03A/task-catalog.jsonl +ed591788c48c1b089decd2aa187f66728b5cc66a73c2b1c0c46c1a46ec4a0ae0 tests/golden/M15-03A/task-index.json +3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1 tests/golden/M16-GAP-00273/manifest.json +5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8 docs/status/M16-GAP-00273.md diff --git a/tests/golden/corrective/C4-003/source-hashes.json b/tests/golden/corrective/C4-003/source-hashes.json new file mode 100644 index 00000000..7c7d7a09 --- /dev/null +++ b/tests/golden/corrective/C4-003/source-hashes.json @@ -0,0 +1,16 @@ +{ + "sourceHashes": { + "tests/golden/corrective/C3-003/manifest.json": "534e31e95853617d1ffef601539f104854355c530de8c03285e695794ac6a5db", + "tests/golden/corrective/C4-001/manifest.json": "5ae2a511340e8d7cda7f2f73ce682fef6b33781c81bb6f483339b6a2868e103d", + "tests/golden/corrective/C4-002/manifest.json": "e27cd032a77886cab91e9e04c7ea614c137bbed6d7cacde8d6f5d059d7923454", + "web/protocol/corrective-case-runner.ts": "fbfc9f72cce84acc773818993b6630d73df1ce6cab7781f172d871b42b8bf70d", + "web/protocol/corrective-command-registry.ts": "cb0553aac346d34d3c2c12501d2bf681c6edd36c7d6ce5de43c6178b42296897", + "web/protocol/corrective-asset-catalog-command.ts": "e94ef8d6aa7cf427cdd41c4287ee2fd1ddd97342e1e4ae3a91f4f50483e7d8ef", + "web/protocol/corrective-modifier-command.ts": "3b545bb823f2bccb5a16260d62b083b046a2e07bc140dd177c08878f1dfc0431", + "web/protocol/corrective-mesh-command.ts": "53ca11912380bedfad782ed587d809270571a4800ef87b71bb992bcb4ae34937", + "web/app/src/corrective-pilot-bridge.ts": "ab471cd1c1bbcc69529b3aeba7051b462df19c928a676c7d6c564e38017692d5", + "web/tests/e2e/corrective-negative-matrix.spec.ts": "e952d4ae7fa5651358169dae66e84da45457a6baf6c1c95625529f2f830b8b1c", + "tests/golden/corrective/C4-003/negative-matrix.test.mjs": "92501c55199879fc7341110a4d7416ec2794406d72837f2865b0993fd3c08937", + "tests/golden/corrective/C4-003/deterministic-negative-report.mjs": "462e42a0d80c1589aa85a9379a707bab7eff6bbec0ee02ae5554d71c0fb1f6c2" + } +} diff --git a/tests/golden/corrective/C5-001/cluster-report.json b/tests/golden/corrective/C5-001/cluster-report.json new file mode 100644 index 00000000..aed51f04 --- /dev/null +++ b/tests/golden/corrective/C5-001/cluster-report.json @@ -0,0 +1,136 @@ +{ + "schemaVersion": 1, + "task": "C5-001", + "operation": "CORRECTIVE_LEGACY_CAPABILITY_CLUSTERING", + "queueMutation": false, + "source": { + "catalog": "tests/golden/M15-03A/task-catalog.jsonl", + "catalogTaskCount": 6900, + "capabilityMatrix": "docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json", + "capabilityCount": 3 + }, + "clusters": [ + { + "family": "ASSET_CATALOG", + "legacyTaskCount": 6, + "states": { + "completed": 6 + }, + "targetImplementationClasses": [ + "LOCAL_EXACT" + ], + "representativeLegacyTasks": [ + { + "id": "M16-GAP-00269", + "gapId": "operator:asset.catalog_delete", + "state": "completed" + }, + { + "id": "M16-GAP-00270", + "gapId": "operator:asset.catalog_new", + "state": "completed" + }, + { + "id": "M16-GAP-00271", + "gapId": "operator:asset.catalog_redo", + "state": "completed" + } + ] + }, + { + "family": "MODIFIER", + "legacyTaskCount": 83, + "states": { + "completed": 83 + }, + "targetImplementationClasses": [ + "LOCAL_EXACT" + ], + "representativeLegacyTasks": [ + { + "id": "M16-GAP-00030", + "gapId": "modifier:ARMATURE", + "state": "completed" + }, + { + "id": "M16-GAP-00031", + "gapId": "modifier:ARRAY", + "state": "completed" + }, + { + "id": "M16-GAP-00032", + "gapId": "modifier:BEVEL", + "state": "completed" + } + ] + }, + { + "family": "MESH", + "legacyTaskCount": 168, + "states": { + "completed": 1, + "pending": 167 + }, + "targetImplementationClasses": [ + "LOCAL_EXACT" + ], + "representativeLegacyTasks": [ + { + "id": "M16-GAP-00014", + "gapId": "datablock:Mesh", + "state": "completed" + }, + { + "id": "M16-GAP-01014", + "gapId": "operator:mesh.attribute_set", + "state": "pending" + }, + { + "id": "M16-GAP-01015", + "gapId": "operator:mesh.average_normals", + "state": "pending" + } + ] + } + ], + "representativeCases": [ + { + "family": "ASSET_CATALOG", + "evidence": "tests/golden/corrective/C3-003/manifest.json", + "workflow": "assetCatalogAppend" + }, + { + "family": "MODIFIER", + "evidence": "tests/golden/corrective/C4-001/manifest.json", + "workflow": "modifierSetEnabled" + }, + { + "family": "MESH", + "evidence": "tests/golden/corrective/C4-002/manifest.json", + "workflow": "meshTranslateVertex" + } + ], + "sourceGapCoverage": [ + { + "capabilityId": "CAP-ASSET-CATALOG-MUTATION", + "family": "ASSET_CATALOG", + "lifecycleStatus": "planned", + "sourceGapCount": 5, + "catalogMatches": 5 + }, + { + "capabilityId": "CAP-MODIFIER-STATE-MUTATION", + "family": "MODIFIER", + "lifecycleStatus": "planned", + "sourceGapCount": 2, + "catalogMatches": 0 + }, + { + "capabilityId": "CAP-MESH-POSITIVE-EDIT", + "family": "MESH", + "lifecycleStatus": "planned", + "sourceGapCount": 2, + "catalogMatches": 0 + } + ] +} diff --git a/tests/golden/corrective/C5-001/cluster-report.mjs b/tests/golden/corrective/C5-001/cluster-report.mjs new file mode 100644 index 00000000..e8dac76f --- /dev/null +++ b/tests/golden/corrective/C5-001/cluster-report.mjs @@ -0,0 +1,47 @@ +import fs from "node:fs"; +import path from "node:path"; + +const root = path.resolve(import.meta.dirname, "../../../.."); +const catalogPath = path.join(root, "tests/golden/M15-03A/task-catalog.jsonl"); +const matrixPath = path.join(root, "docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json"); +const rows = fs.readFileSync(catalogPath, "utf8").trim().split("\n").map((line) => JSON.parse(line)); +const matrix = JSON.parse(fs.readFileSync(matrixPath, "utf8")); + +const matches = { + ASSET_CATALOG: (row) => row.gapId.startsWith("operator:asset.catalog"), + MODIFIER: (row) => row.gapId.startsWith("modifier:"), + MESH: (row) => row.gapId === "datablock:Mesh" || row.gapId.startsWith("operator:mesh."), +}; +const clusters = Object.entries(matches).map(([family, predicate]) => { + const selected = rows.filter(predicate); + const states = Object.fromEntries([...new Set(selected.map((row) => row.state))].sort().map((state) => [state, selected.filter((row) => row.state === state).length])); + return { + family, + legacyTaskCount: selected.length, + states, + targetImplementationClasses: [...new Set(selected.map((row) => row.targetImplementationClass))].sort(), + representativeLegacyTasks: selected.slice().sort((a, b) => a.id.localeCompare(b.id)).slice(0, 3).map((row) => ({ id: row.id, gapId: row.gapId, state: row.state })), + }; +}); +const sourceGapCoverage = matrix.entries.map((entry) => ({ + capabilityId: entry.capabilityId, + family: entry.family, + lifecycleStatus: entry.lifecycleStatus, + sourceGapCount: entry.sourceGaps.length, + catalogMatches: entry.sourceGaps.filter((gap) => rows.some((row) => row.gapId === gap)).length, +})); +const result = { + schemaVersion: 1, + task: "C5-001", + operation: "CORRECTIVE_LEGACY_CAPABILITY_CLUSTERING", + queueMutation: false, + source: { catalog: "tests/golden/M15-03A/task-catalog.jsonl", catalogTaskCount: rows.length, capabilityMatrix: "docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json", capabilityCount: matrix.entries.length }, + clusters, + representativeCases: [ + { family: "ASSET_CATALOG", evidence: "tests/golden/corrective/C3-003/manifest.json", workflow: "assetCatalogAppend" }, + { family: "MODIFIER", evidence: "tests/golden/corrective/C4-001/manifest.json", workflow: "modifierSetEnabled" }, + { family: "MESH", evidence: "tests/golden/corrective/C4-002/manifest.json", workflow: "meshTranslateVertex" }, + ], + sourceGapCoverage, +}; +process.stdout.write(`${JSON.stringify(result, null, 2)}\n`); diff --git a/tests/golden/corrective/C5-001/cluster-report.second.json b/tests/golden/corrective/C5-001/cluster-report.second.json new file mode 100644 index 00000000..aed51f04 --- /dev/null +++ b/tests/golden/corrective/C5-001/cluster-report.second.json @@ -0,0 +1,136 @@ +{ + "schemaVersion": 1, + "task": "C5-001", + "operation": "CORRECTIVE_LEGACY_CAPABILITY_CLUSTERING", + "queueMutation": false, + "source": { + "catalog": "tests/golden/M15-03A/task-catalog.jsonl", + "catalogTaskCount": 6900, + "capabilityMatrix": "docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json", + "capabilityCount": 3 + }, + "clusters": [ + { + "family": "ASSET_CATALOG", + "legacyTaskCount": 6, + "states": { + "completed": 6 + }, + "targetImplementationClasses": [ + "LOCAL_EXACT" + ], + "representativeLegacyTasks": [ + { + "id": "M16-GAP-00269", + "gapId": "operator:asset.catalog_delete", + "state": "completed" + }, + { + "id": "M16-GAP-00270", + "gapId": "operator:asset.catalog_new", + "state": "completed" + }, + { + "id": "M16-GAP-00271", + "gapId": "operator:asset.catalog_redo", + "state": "completed" + } + ] + }, + { + "family": "MODIFIER", + "legacyTaskCount": 83, + "states": { + "completed": 83 + }, + "targetImplementationClasses": [ + "LOCAL_EXACT" + ], + "representativeLegacyTasks": [ + { + "id": "M16-GAP-00030", + "gapId": "modifier:ARMATURE", + "state": "completed" + }, + { + "id": "M16-GAP-00031", + "gapId": "modifier:ARRAY", + "state": "completed" + }, + { + "id": "M16-GAP-00032", + "gapId": "modifier:BEVEL", + "state": "completed" + } + ] + }, + { + "family": "MESH", + "legacyTaskCount": 168, + "states": { + "completed": 1, + "pending": 167 + }, + "targetImplementationClasses": [ + "LOCAL_EXACT" + ], + "representativeLegacyTasks": [ + { + "id": "M16-GAP-00014", + "gapId": "datablock:Mesh", + "state": "completed" + }, + { + "id": "M16-GAP-01014", + "gapId": "operator:mesh.attribute_set", + "state": "pending" + }, + { + "id": "M16-GAP-01015", + "gapId": "operator:mesh.average_normals", + "state": "pending" + } + ] + } + ], + "representativeCases": [ + { + "family": "ASSET_CATALOG", + "evidence": "tests/golden/corrective/C3-003/manifest.json", + "workflow": "assetCatalogAppend" + }, + { + "family": "MODIFIER", + "evidence": "tests/golden/corrective/C4-001/manifest.json", + "workflow": "modifierSetEnabled" + }, + { + "family": "MESH", + "evidence": "tests/golden/corrective/C4-002/manifest.json", + "workflow": "meshTranslateVertex" + } + ], + "sourceGapCoverage": [ + { + "capabilityId": "CAP-ASSET-CATALOG-MUTATION", + "family": "ASSET_CATALOG", + "lifecycleStatus": "planned", + "sourceGapCount": 5, + "catalogMatches": 5 + }, + { + "capabilityId": "CAP-MODIFIER-STATE-MUTATION", + "family": "MODIFIER", + "lifecycleStatus": "planned", + "sourceGapCount": 2, + "catalogMatches": 0 + }, + { + "capabilityId": "CAP-MESH-POSITIVE-EDIT", + "family": "MESH", + "lifecycleStatus": "planned", + "sourceGapCount": 2, + "catalogMatches": 0 + } + ] +} diff --git a/tests/golden/corrective/C5-001/command-exit-codes.json b/tests/golden/corrective/C5-001/command-exit-codes.json new file mode 100644 index 00000000..592bd6d6 --- /dev/null +++ b/tests/golden/corrective/C5-001/command-exit-codes.json @@ -0,0 +1,13 @@ +{ + "clusterReport": 0, + "determinism": 0, + "clusterGate": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0, + "protectedHashCheck": 0, + "sourceHashCheck": 0 +} diff --git a/tests/golden/corrective/C5-001/handoff.json b/tests/golden/corrective/C5-001/handoff.json new file mode 100644 index 00000000..eae82156 --- /dev/null +++ b/tests/golden/corrective/C5-001/handoff.json @@ -0,0 +1,116 @@ +{ + "schemaVersion": 1, + "task": "C5-001", + "status": "done", + "gate": "G4", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C5-001", + "artifactCount": 17, + "artifacts": [ + { + "path": "tests/golden/corrective/C5-001/check-context-governance.log", + "sha256": "7ed574f956f0255482a15f63faedc657fc7eb0fa643d282a430f27a207b5bf8d", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C5-001/check-corrective-plan.log", + "sha256": "246d204df28fb025f5a132dbde5e975965d3fdff0a3f038770400aeb4be6a5fb", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C5-001/check-task-context.log", + "sha256": "cf9fb3f108cb7febf3d6d17543cb1abf9356174eb34d379652dd288aca6db2d7", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C5-001/cluster-gate.log", + "sha256": "d7891fc851c1c17054f5468318f953e59702bf82260fe04a2fd32c8cf8cb4e5e", + "bytes": 56 + }, + { + "path": "tests/golden/corrective/C5-001/cluster-report.json", + "sha256": "59b76bca30291b85895cc762e42afba391948fd51954f80bd4a20988f913307c", + "bytes": 3295 + }, + { + "path": "tests/golden/corrective/C5-001/cluster-report.mjs", + "sha256": "67ea0559be01328e916b4764519350cb9a8e45bf5aa7dbc2509ea0e23fbdf421", + "bytes": 2476 + }, + { + "path": "tests/golden/corrective/C5-001/cluster-report.second.json", + "sha256": "59b76bca30291b85895cc762e42afba391948fd51954f80bd4a20988f913307c", + "bytes": 3295 + }, + { + "path": "tests/golden/corrective/C5-001/command-exit-codes.json", + "sha256": "6f9192db514102dc9c677c40398c416f7c84de0550c9c7348f72fc342e17cbf6", + "bytes": 246 + }, + { + "path": "tests/golden/corrective/C5-001/determinism.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C5-001/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C5-001/protected-hash-check.log", + "sha256": "deb15d1fa1d5606bcbe760b066dfba312bd586df82228214668f149385940ac5", + "bytes": 28 + }, + { + "path": "tests/golden/corrective/C5-001/protected-hashes-after.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C5-001/protected-hashes-before.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C5-001/source-hash-check.log", + "sha256": "af5bf4621f8419cce872be7bcd9e66e1dc01293978bdca6baf42ca2ee0a4b3e8", + "bytes": 23 + }, + { + "path": "tests/golden/corrective/C5-001/source-hashes.json", + "sha256": "9b0564b2ec990d5b74af0c4563adf8ef102522c5803b9ce17ebe42197b9dd4c3", + "bytes": 512 + }, + { + "path": "tests/golden/corrective/C5-001/test-context-governance.log", + "sha256": "ec2023d233a4142be871a153ffe9b42d877644f21764b25256894c95b2a14bb4", + "bytes": 2579 + }, + { + "path": "tests/golden/corrective/C5-001/typecheck.log", + "sha256": "f90c14a9694ed7029129a343fa5cc8672e4a59a5fe4b34e7c3098db9c5c5bd1a", + "bytes": 76 + } + ], + "sourceHashes": { + "tests/golden/corrective/C4-003/manifest.json": "fefe8c7cd708d20a819b78f90396334060ce68782a8829af315baa4031357348", + "tests/golden/M15-03A/task-catalog.jsonl": "da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d", + "docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json": "053e1551a24da08e045bb54115858a892ddd825fa59f1691a26a1ccfc1db3ca0", + "tests/golden/corrective/C5-001/cluster-report.mjs": "67ea0559be01328e916b4764519350cb9a8e45bf5aa7dbc2509ea0e23fbdf421" + }, + "commandExitCodes": { + "clusterReport": 0, + "determinism": 0, + "clusterGate": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0, + "protectedHashCheck": 0, + "sourceHashCheck": 0 + }, + "nextCorrectiveTask": "C5-002" +} diff --git a/tests/golden/corrective/C5-001/manifest.json b/tests/golden/corrective/C5-001/manifest.json new file mode 100644 index 00000000..eae82156 --- /dev/null +++ b/tests/golden/corrective/C5-001/manifest.json @@ -0,0 +1,116 @@ +{ + "schemaVersion": 1, + "task": "C5-001", + "status": "done", + "gate": "G4", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C5-001", + "artifactCount": 17, + "artifacts": [ + { + "path": "tests/golden/corrective/C5-001/check-context-governance.log", + "sha256": "7ed574f956f0255482a15f63faedc657fc7eb0fa643d282a430f27a207b5bf8d", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C5-001/check-corrective-plan.log", + "sha256": "246d204df28fb025f5a132dbde5e975965d3fdff0a3f038770400aeb4be6a5fb", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C5-001/check-task-context.log", + "sha256": "cf9fb3f108cb7febf3d6d17543cb1abf9356174eb34d379652dd288aca6db2d7", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C5-001/cluster-gate.log", + "sha256": "d7891fc851c1c17054f5468318f953e59702bf82260fe04a2fd32c8cf8cb4e5e", + "bytes": 56 + }, + { + "path": "tests/golden/corrective/C5-001/cluster-report.json", + "sha256": "59b76bca30291b85895cc762e42afba391948fd51954f80bd4a20988f913307c", + "bytes": 3295 + }, + { + "path": "tests/golden/corrective/C5-001/cluster-report.mjs", + "sha256": "67ea0559be01328e916b4764519350cb9a8e45bf5aa7dbc2509ea0e23fbdf421", + "bytes": 2476 + }, + { + "path": "tests/golden/corrective/C5-001/cluster-report.second.json", + "sha256": "59b76bca30291b85895cc762e42afba391948fd51954f80bd4a20988f913307c", + "bytes": 3295 + }, + { + "path": "tests/golden/corrective/C5-001/command-exit-codes.json", + "sha256": "6f9192db514102dc9c677c40398c416f7c84de0550c9c7348f72fc342e17cbf6", + "bytes": 246 + }, + { + "path": "tests/golden/corrective/C5-001/determinism.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C5-001/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C5-001/protected-hash-check.log", + "sha256": "deb15d1fa1d5606bcbe760b066dfba312bd586df82228214668f149385940ac5", + "bytes": 28 + }, + { + "path": "tests/golden/corrective/C5-001/protected-hashes-after.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C5-001/protected-hashes-before.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C5-001/source-hash-check.log", + "sha256": "af5bf4621f8419cce872be7bcd9e66e1dc01293978bdca6baf42ca2ee0a4b3e8", + "bytes": 23 + }, + { + "path": "tests/golden/corrective/C5-001/source-hashes.json", + "sha256": "9b0564b2ec990d5b74af0c4563adf8ef102522c5803b9ce17ebe42197b9dd4c3", + "bytes": 512 + }, + { + "path": "tests/golden/corrective/C5-001/test-context-governance.log", + "sha256": "ec2023d233a4142be871a153ffe9b42d877644f21764b25256894c95b2a14bb4", + "bytes": 2579 + }, + { + "path": "tests/golden/corrective/C5-001/typecheck.log", + "sha256": "f90c14a9694ed7029129a343fa5cc8672e4a59a5fe4b34e7c3098db9c5c5bd1a", + "bytes": 76 + } + ], + "sourceHashes": { + "tests/golden/corrective/C4-003/manifest.json": "fefe8c7cd708d20a819b78f90396334060ce68782a8829af315baa4031357348", + "tests/golden/M15-03A/task-catalog.jsonl": "da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d", + "docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json": "053e1551a24da08e045bb54115858a892ddd825fa59f1691a26a1ccfc1db3ca0", + "tests/golden/corrective/C5-001/cluster-report.mjs": "67ea0559be01328e916b4764519350cb9a8e45bf5aa7dbc2509ea0e23fbdf421" + }, + "commandExitCodes": { + "clusterReport": 0, + "determinism": 0, + "clusterGate": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0, + "protectedHashCheck": 0, + "sourceHashCheck": 0 + }, + "nextCorrectiveTask": "C5-002" +} diff --git a/tests/golden/corrective/C5-001/protected-hashes-after.txt b/tests/golden/corrective/C5-001/protected-hashes-after.txt new file mode 100644 index 00000000..a0d2c8ba --- /dev/null +++ b/tests/golden/corrective/C5-001/protected-hashes-after.txt @@ -0,0 +1,7 @@ +5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1 docs/EXECUTION_QUEUE.md +32f4c11ebf8563f3aa500583f3979c1b38d711cc7328a428968118f0375b90b4 tests/golden/M15-03A/completed-gap-tasks.json +edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17 tests/golden/M15-03A/next-task-plan.json +da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d tests/golden/M15-03A/task-catalog.jsonl +ed591788c48c1b089decd2aa187f66728b5cc66a73c2b1c0c46c1a46ec4a0ae0 tests/golden/M15-03A/task-index.json +3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1 tests/golden/M16-GAP-00273/manifest.json +5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8 docs/status/M16-GAP-00273.md diff --git a/tests/golden/corrective/C5-001/protected-hashes-before.txt b/tests/golden/corrective/C5-001/protected-hashes-before.txt new file mode 100644 index 00000000..a0d2c8ba --- /dev/null +++ b/tests/golden/corrective/C5-001/protected-hashes-before.txt @@ -0,0 +1,7 @@ +5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1 docs/EXECUTION_QUEUE.md +32f4c11ebf8563f3aa500583f3979c1b38d711cc7328a428968118f0375b90b4 tests/golden/M15-03A/completed-gap-tasks.json +edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17 tests/golden/M15-03A/next-task-plan.json +da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d tests/golden/M15-03A/task-catalog.jsonl +ed591788c48c1b089decd2aa187f66728b5cc66a73c2b1c0c46c1a46ec4a0ae0 tests/golden/M15-03A/task-index.json +3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1 tests/golden/M16-GAP-00273/manifest.json +5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8 docs/status/M16-GAP-00273.md diff --git a/tests/golden/corrective/C5-001/source-hashes.json b/tests/golden/corrective/C5-001/source-hashes.json new file mode 100644 index 00000000..01330012 --- /dev/null +++ b/tests/golden/corrective/C5-001/source-hashes.json @@ -0,0 +1,8 @@ +{ + "sourceHashes": { + "tests/golden/corrective/C4-003/manifest.json": "fefe8c7cd708d20a819b78f90396334060ce68782a8829af315baa4031357348", + "tests/golden/M15-03A/task-catalog.jsonl": "da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d", + "docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json": "053e1551a24da08e045bb54115858a892ddd825fa59f1691a26a1ccfc1db3ca0", + "tests/golden/corrective/C5-001/cluster-report.mjs": "67ea0559be01328e916b4764519350cb9a8e45bf5aa7dbc2509ea0e23fbdf421" + } +} diff --git a/tests/golden/corrective/C5-002/chromium-family-report.json b/tests/golden/corrective/C5-002/chromium-family-report.json new file mode 100644 index 00000000..7668c78f --- /dev/null +++ b/tests/golden/corrective/C5-002/chromium-family-report.json @@ -0,0 +1,184 @@ +{ + "schemaVersion": 1, + "task": "C5-002", + "operation": "CORRECTIVE_FAMILY_RUNNER_CHROMIUM", + "browser": "chromium", + "queueMutation": false, + "summary": { + "ASSET_CATALOG": { + "total": 2, + "finished": 2, + "unchanged": 0 + }, + "MODIFIER": { + "total": 2, + "finished": 2, + "unchanged": 0 + }, + "MESH": { + "total": 2, + "finished": 2, + "unchanged": 0 + } + }, + "results": [ + { + "id": "asset_catalog-desktop", + "family": "ASSET_CATALOG", + "surface": "DESKTOP", + "receipt": { + "schemaVersion": 1, + "requestId": "chromium-family-desktop-asset", + "status": "FINISHED", + "code": "OK", + "baseRevision": 1, + "mainRevisionBefore": 1, + "mainRevisionAfter": 2, + "mainMutation": "CHANGED", + "delta": { + "addedId": "asset:desktop", + "count": 1 + }, + "persistence": { + "dirty": true + }, + "error": null + } + }, + { + "id": "asset_catalog-wasm", + "family": "ASSET_CATALOG", + "surface": "WASM", + "receipt": { + "schemaVersion": 1, + "requestId": "chromium-family-wasm-asset", + "status": "FINISHED", + "code": "OK", + "baseRevision": 1, + "mainRevisionBefore": 1, + "mainRevisionAfter": 2, + "mainMutation": "CHANGED", + "delta": { + "addedId": "asset:wasm", + "count": 1 + }, + "persistence": { + "dirty": true + }, + "error": null + } + }, + { + "id": "modifier-desktop", + "family": "MODIFIER", + "surface": "DESKTOP", + "receipt": { + "schemaVersion": 1, + "requestId": "chromium-family-desktop-modifier", + "status": "FINISHED", + "code": "OK", + "baseRevision": 1, + "mainRevisionBefore": 1, + "mainRevisionAfter": 2, + "mainMutation": "CHANGED", + "delta": { + "modifierUuid": "modifier:one", + "previousEnabled": false, + "enabled": true + }, + "persistence": { + "dirty": true + }, + "error": null + } + }, + { + "id": "modifier-wasm", + "family": "MODIFIER", + "surface": "WASM", + "receipt": { + "schemaVersion": 1, + "requestId": "chromium-family-wasm-modifier", + "status": "FINISHED", + "code": "OK", + "baseRevision": 1, + "mainRevisionBefore": 1, + "mainRevisionAfter": 2, + "mainMutation": "CHANGED", + "delta": { + "modifierUuid": "modifier:one", + "previousEnabled": false, + "enabled": true + }, + "persistence": { + "dirty": true + }, + "error": null + } + }, + { + "id": "mesh-desktop", + "family": "MESH", + "surface": "DESKTOP", + "receipt": { + "schemaVersion": 1, + "requestId": "chromium-family-desktop-mesh", + "status": "FINISHED", + "code": "OK", + "baseRevision": 1, + "mainRevisionBefore": 1, + "mainRevisionAfter": 2, + "mainMutation": "CHANGED", + "delta": { + "vertexId": "vertex:0", + "before": { + "x": 0, + "y": 0, + "z": 0 + }, + "after": { + "x": 1, + "y": 0, + "z": 0 + } + }, + "persistence": { + "dirty": true + }, + "error": null + } + }, + { + "id": "mesh-wasm", + "family": "MESH", + "surface": "WASM", + "receipt": { + "schemaVersion": 1, + "requestId": "chromium-family-wasm-mesh", + "status": "FINISHED", + "code": "OK", + "baseRevision": 1, + "mainRevisionBefore": 1, + "mainRevisionAfter": 2, + "mainMutation": "CHANGED", + "delta": { + "vertexId": "vertex:0", + "before": { + "x": 0, + "y": 0, + "z": 0 + }, + "after": { + "x": 1, + "y": 0, + "z": 0 + } + }, + "persistence": { + "dirty": true + }, + "error": null + } + } + ] +} diff --git a/tests/golden/corrective/C5-002/chromium-family-report.second.json b/tests/golden/corrective/C5-002/chromium-family-report.second.json new file mode 100644 index 00000000..7668c78f --- /dev/null +++ b/tests/golden/corrective/C5-002/chromium-family-report.second.json @@ -0,0 +1,184 @@ +{ + "schemaVersion": 1, + "task": "C5-002", + "operation": "CORRECTIVE_FAMILY_RUNNER_CHROMIUM", + "browser": "chromium", + "queueMutation": false, + "summary": { + "ASSET_CATALOG": { + "total": 2, + "finished": 2, + "unchanged": 0 + }, + "MODIFIER": { + "total": 2, + "finished": 2, + "unchanged": 0 + }, + "MESH": { + "total": 2, + "finished": 2, + "unchanged": 0 + } + }, + "results": [ + { + "id": "asset_catalog-desktop", + "family": "ASSET_CATALOG", + "surface": "DESKTOP", + "receipt": { + "schemaVersion": 1, + "requestId": "chromium-family-desktop-asset", + "status": "FINISHED", + "code": "OK", + "baseRevision": 1, + "mainRevisionBefore": 1, + "mainRevisionAfter": 2, + "mainMutation": "CHANGED", + "delta": { + "addedId": "asset:desktop", + "count": 1 + }, + "persistence": { + "dirty": true + }, + "error": null + } + }, + { + "id": "asset_catalog-wasm", + "family": "ASSET_CATALOG", + "surface": "WASM", + "receipt": { + "schemaVersion": 1, + "requestId": "chromium-family-wasm-asset", + "status": "FINISHED", + "code": "OK", + "baseRevision": 1, + "mainRevisionBefore": 1, + "mainRevisionAfter": 2, + "mainMutation": "CHANGED", + "delta": { + "addedId": "asset:wasm", + "count": 1 + }, + "persistence": { + "dirty": true + }, + "error": null + } + }, + { + "id": "modifier-desktop", + "family": "MODIFIER", + "surface": "DESKTOP", + "receipt": { + "schemaVersion": 1, + "requestId": "chromium-family-desktop-modifier", + "status": "FINISHED", + "code": "OK", + "baseRevision": 1, + "mainRevisionBefore": 1, + "mainRevisionAfter": 2, + "mainMutation": "CHANGED", + "delta": { + "modifierUuid": "modifier:one", + "previousEnabled": false, + "enabled": true + }, + "persistence": { + "dirty": true + }, + "error": null + } + }, + { + "id": "modifier-wasm", + "family": "MODIFIER", + "surface": "WASM", + "receipt": { + "schemaVersion": 1, + "requestId": "chromium-family-wasm-modifier", + "status": "FINISHED", + "code": "OK", + "baseRevision": 1, + "mainRevisionBefore": 1, + "mainRevisionAfter": 2, + "mainMutation": "CHANGED", + "delta": { + "modifierUuid": "modifier:one", + "previousEnabled": false, + "enabled": true + }, + "persistence": { + "dirty": true + }, + "error": null + } + }, + { + "id": "mesh-desktop", + "family": "MESH", + "surface": "DESKTOP", + "receipt": { + "schemaVersion": 1, + "requestId": "chromium-family-desktop-mesh", + "status": "FINISHED", + "code": "OK", + "baseRevision": 1, + "mainRevisionBefore": 1, + "mainRevisionAfter": 2, + "mainMutation": "CHANGED", + "delta": { + "vertexId": "vertex:0", + "before": { + "x": 0, + "y": 0, + "z": 0 + }, + "after": { + "x": 1, + "y": 0, + "z": 0 + } + }, + "persistence": { + "dirty": true + }, + "error": null + } + }, + { + "id": "mesh-wasm", + "family": "MESH", + "surface": "WASM", + "receipt": { + "schemaVersion": 1, + "requestId": "chromium-family-wasm-mesh", + "status": "FINISHED", + "code": "OK", + "baseRevision": 1, + "mainRevisionBefore": 1, + "mainRevisionAfter": 2, + "mainMutation": "CHANGED", + "delta": { + "vertexId": "vertex:0", + "before": { + "x": 0, + "y": 0, + "z": 0 + }, + "after": { + "x": 1, + "y": 0, + "z": 0 + } + }, + "persistence": { + "dirty": true + }, + "error": null + } + } + ] +} diff --git a/tests/golden/corrective/C5-002/command-exit-codes.json b/tests/golden/corrective/C5-002/command-exit-codes.json new file mode 100644 index 00000000..d156a496 --- /dev/null +++ b/tests/golden/corrective/C5-002/command-exit-codes.json @@ -0,0 +1,16 @@ +{ + "focusedTest": 0, + "chromiumPilot": 0, + "chromiumPilotSecond": 0, + "determinism": 0, + "receiptGate": 0, + "c4_003Regression": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0, + "protectedHashCheck": 0, + "sourceHashCheck": 0 +} diff --git a/tests/golden/corrective/C5-002/family-runner.test.mjs b/tests/golden/corrective/C5-002/family-runner.test.mjs new file mode 100644 index 00000000..6972df57 --- /dev/null +++ b/tests/golden/corrective/C5-002/family-runner.test.mjs @@ -0,0 +1,24 @@ +import assert from "node:assert/strict"; +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import test from "node:test"; +import { fileURLToPath, pathToFileURL } from "node:url"; +import ts from "../../../../web/node_modules/typescript/lib/typescript.js"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../../.."); const temp = fs.mkdtempSync(path.join(os.tmpdir(), "corrective-family-runner-")); +const compile = (source, output, replacements = []) => { const input = path.join(root, source); const result = ts.transpileModule(fs.readFileSync(input, "utf8"), { compilerOptions: { module: ts.ModuleKind.ES2022, target: ts.ScriptTarget.ES2022 }, fileName: input, reportDiagnostics: true }); assert.deepEqual(result.diagnostics, []); let text = result.outputText; for (const [from, to] of replacements) text = text.replaceAll(from, to); fs.writeFileSync(output, text); }; +try { + const names = ["corrective-case-runner", "corrective-command-registry", "corrective-main-transaction", "corrective-resource-provider", "corrective-asset-catalog-command", "corrective-modifier-command", "corrective-mesh-command", "corrective-family-runner"]; + const files = Object.fromEntries(names.map((name) => [name, path.join(temp, `${name}.mjs`)])); const replaceRunner = [["from \"./corrective-case-runner\"", "from \"./corrective-case-runner.mjs\""]]; + compile("web/protocol/corrective-case-runner.ts", files["corrective-case-runner"]); compile("web/protocol/corrective-command-registry.ts", files["corrective-command-registry"], replaceRunner); compile("web/protocol/corrective-main-transaction.ts", files["corrective-main-transaction"], replaceRunner); compile("web/protocol/corrective-resource-provider.ts", files["corrective-resource-provider"]); + compile("web/protocol/corrective-asset-catalog-command.ts", files["corrective-asset-catalog-command"], [["from \"./corrective-command-registry\"", "from \"./corrective-command-registry.mjs\""], ...replaceRunner, ["from \"./corrective-main-transaction\"", "from \"./corrective-main-transaction.mjs\""], ["from \"./corrective-resource-provider\"", "from \"./corrective-resource-provider.mjs\""]]); compile("web/protocol/corrective-modifier-command.ts", files["corrective-modifier-command"], [["from \"./corrective-command-registry\"", "from \"./corrective-command-registry.mjs\""], ...replaceRunner, ["from \"./corrective-main-transaction\"", "from \"./corrective-main-transaction.mjs\""]]); compile("web/protocol/corrective-mesh-command.ts", files["corrective-mesh-command"], [["from \"./corrective-command-registry\"", "from \"./corrective-command-registry.mjs\""], ...replaceRunner, ["from \"./corrective-main-transaction\"", "from \"./corrective-main-transaction.mjs\""]]); compile("web/protocol/corrective-family-runner.ts", files["corrective-family-runner"], [["from \"./corrective-command-registry\"", "from \"./corrective-command-registry.mjs\""], ...replaceRunner]); + const { InMemoryMainStore } = await import(pathToFileURL(files["corrective-main-transaction"])); const { AssetCatalogResourceResolver, InMemoryCatalogProvider } = await import(pathToFileURL(files["corrective-resource-provider"])); const { createAssetCatalogRegistry } = await import(pathToFileURL(files["corrective-asset-catalog-command"])); const { createModifierMain, createModifierRegistry } = await import(pathToFileURL(files["corrective-modifier-command"])); const { createMeshMain, createMeshRegistry } = await import(pathToFileURL(files["corrective-mesh-command"])); const { runCorrectiveFamilyCases, summarizeCorrectiveFamilyResults } = await import(pathToFileURL(files["corrective-family-runner"])); + const hash = await crypto.subtle.digest("SHA-256", new TextEncoder().encode("family-runner-resource")); const sourceHash = [...new Uint8Array(hash)].map((value) => value.toString(16).padStart(2, "0")).join(""); const provider = new InMemoryCatalogProvider("EXTERNAL_LIBRARY"); await provider.put("library.blend", new TextEncoder().encode("family-runner-resource")); const resolver = new AssetCatalogResourceResolver(); resolver.registerProvider(provider).setActiveLibraryContext({ libraryId: "library:family", sourceKind: "EXTERNAL", sourceId: "library.blend", generation: 1, revision: 1, readOnly: false }); const assetMain = new InMemoryMainStore({ entries: [] }, 1, false, (value) => ({ entries: value.entries.map((entry) => ({ ...entry })) })); const modifierMain = createModifierMain([{ uuid: "modifier:one", name: "One", type: "BEVEL", enabled: false, showViewport: true, showRender: true }], 1, false); const meshMain = createMeshMain([{ id: "vertex:0", x: 0, y: 0, z: 0 }], 1, false); + const command = (family, surface, overrides = {}) => family === "ASSET_CATALOG" ? ({ schemaVersion: 1, requestId: `family-${surface.toLowerCase()}-asset`, commandType: "assetCatalogAppend", baseRevision: 1, context: { mainId: "main:asset", targetKind: "ASSET_LIBRARY", targetId: "library:family", editMode: "EDITABLE", authorization: "USER_EDIT", source: { kind: "EXTERNAL", sha256: sourceHash }, resourceProvider: "EXTERNAL_LIBRARY" }, payload: { id: `asset:${surface.toLowerCase()}`, name: "Family Asset", resource: { schemaVersion: 1, requestId: "family-resource", sourceKind: "EXTERNAL", sourceId: "library.blend", sha256: sourceHash } }, ...overrides }) : family === "MODIFIER" ? ({ schemaVersion: 1, requestId: `family-${surface.toLowerCase()}-modifier`, commandType: "modifierSetEnabled", baseRevision: 1, context: { mainId: "main:modifier", targetKind: "MODIFIER", targetId: "modifier:one", editMode: "EDITABLE", authorization: "USER_EDIT", source: { kind: "LOCAL", sha256: "f".repeat(64) } }, payload: { modifierUuid: "modifier:one", enabled: true }, ...overrides }) : ({ schemaVersion: 1, requestId: `family-${surface.toLowerCase()}-mesh`, commandType: "meshTranslateVertex", baseRevision: 1, context: { mainId: "main:mesh", targetKind: "MESH", targetId: "mesh:one", editMode: "EDITABLE", authorization: "USER_EDIT", source: { kind: "LOCAL", sha256: "0".repeat(64) } }, payload: { vertexId: "vertex:0", delta: { x: 1, y: 0, z: 0 } }, ...overrides }); + test("data-driven family cases share desktop/WASM dispatch and summary", async () => { + const cases = []; for (const family of ["ASSET_CATALOG", "MODIFIER", "MESH"]) for (const surface of ["DESKTOP", "WASM"]) { const main = family === "ASSET_CATALOG" ? new InMemoryMainStore({ entries: [] }, 1, false, (value) => ({ entries: value.entries.map((entry) => ({ ...entry })) })) : family === "MODIFIER" ? createModifierMain([{ uuid: "modifier:one", name: "One", type: "BEVEL", enabled: false, showViewport: true, showRender: true }], 1, false) : createMeshMain([{ id: "vertex:0", x: 0, y: 0, z: 0 }], 1, false); const registry = family === "ASSET_CATALOG" ? createAssetCatalogRegistry(main, resolver) : family === "MODIFIER" ? createModifierRegistry(main) : createMeshRegistry(main); cases.push({ id: `${family.toLowerCase()}-${surface.toLowerCase()}`, family, registry, surface, command: command(family, surface), mainRevision: 1 }); } + const results = await runCorrectiveFamilyCases(cases); assert.equal(results.length, 6); assert.ok(results.every((result) => result.receipt.result.status === "FINISHED")); const summary = summarizeCorrectiveFamilyResults(results); assert.deepEqual(summary, { ASSET_CATALOG: { total: 2, finished: 2, unchanged: 0 }, MODIFIER: { total: 2, finished: 2, unchanged: 0 }, MESH: { total: 2, finished: 2, unchanged: 0 } }); + await assert.rejects(() => runCorrectiveFamilyCases([{ ...cases[0], id: cases[1].id }, cases[1]]), /duplicated/); + }); +} finally { fs.rmSync(temp, { recursive: true, force: true }); } diff --git a/tests/golden/corrective/C5-002/handoff.json b/tests/golden/corrective/C5-002/handoff.json new file mode 100644 index 00000000..4d63c453 --- /dev/null +++ b/tests/golden/corrective/C5-002/handoff.json @@ -0,0 +1,132 @@ +{ + "schemaVersion": 1, + "task": "C5-002", + "status": "done", + "gate": "G4", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C5-002", + "artifactCount": 19, + "artifacts": [ + { + "path": "tests/golden/corrective/C5-002/c4-003-regression.log", + "sha256": "fce5d9ca57b67dd903542c2c883e879030f36af009898ebc87e1cf5d7d2171f4", + "bytes": 319 + }, + { + "path": "tests/golden/corrective/C5-002/check-context-governance.log", + "sha256": "7ed574f956f0255482a15f63faedc657fc7eb0fa643d282a430f27a207b5bf8d", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C5-002/check-corrective-plan.log", + "sha256": "1d91b30f24aede475acb4173109cb673b6a1173868a947e95bf244e2c3aa1801", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C5-002/check-task-context.log", + "sha256": "cf9fb3f108cb7febf3d6d17543cb1abf9356174eb34d379652dd288aca6db2d7", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C5-002/chromium-family-report.json", + "sha256": "e65bcc31891a6df47e1be090a177716b0f654f843bd0007981678b9a53113573", + "bytes": 4192 + }, + { + "path": "tests/golden/corrective/C5-002/chromium-family-report.second.json", + "sha256": "e65bcc31891a6df47e1be090a177716b0f654f843bd0007981678b9a53113573", + "bytes": 4192 + }, + { + "path": "tests/golden/corrective/C5-002/command-exit-codes.json", + "sha256": "b5a96bdbecfbd49aa4cae906ed11c5bab813a17dbdadf762b6a37d70c036794d", + "bytes": 319 + }, + { + "path": "tests/golden/corrective/C5-002/determinism.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C5-002/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C5-002/family-runner.test.mjs", + "sha256": "9f2bdd317e4ed2fe8412a067814e823571d9e55b2d3fce9f8a533be947f80c53", + "bytes": 7686 + }, + { + "path": "tests/golden/corrective/C5-002/focused-test.log", + "sha256": "9c7acd97f2062c686a6f0fbf94e59da173b0069fe55387e1430d274fd63cf447", + "bytes": 303 + }, + { + "path": "tests/golden/corrective/C5-002/protected-hash-check.log", + "sha256": "deb15d1fa1d5606bcbe760b066dfba312bd586df82228214668f149385940ac5", + "bytes": 28 + }, + { + "path": "tests/golden/corrective/C5-002/protected-hashes-after.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C5-002/protected-hashes-before.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C5-002/receipt-gate.log", + "sha256": "949e70cb0f51244595d611e980c40fc2a1fa9e7b8e45d037df4a4aa50fe0d058", + "bytes": 53 + }, + { + "path": "tests/golden/corrective/C5-002/source-hash-check.log", + "sha256": "a477a9dbac25d6ff85366505111eb60970903f0e6d9b8e2ed698adc4a250e5f3", + "bytes": 23 + }, + { + "path": "tests/golden/corrective/C5-002/source-hashes.json", + "sha256": "e1e07e2f986092740ab5627d71fde423dfbae213deb31ecac326a876a142d4d5", + "bytes": 861 + }, + { + "path": "tests/golden/corrective/C5-002/test-context-governance.log", + "sha256": "38fe9b5ff417a09c52782d37bd5e8bc721a00fae9179cfbd32a9f74a8370c6a4", + "bytes": 2578 + }, + { + "path": "tests/golden/corrective/C5-002/typecheck.log", + "sha256": "f90c14a9694ed7029129a343fa5cc8672e4a59a5fe4b34e7c3098db9c5c5bd1a", + "bytes": 76 + } + ], + "sourceHashes": { + "tests/golden/corrective/C5-001/manifest.json": "8bea85dc29f801d384659944b9f0f85b42cb8cfb21aa361c7c97799984c3fc21", + "web/protocol/corrective-command-registry.ts": "cb0553aac346d34d3c2c12501d2bf681c6edd36c7d6ce5de43c6178b42296897", + "web/protocol/corrective-case-runner.ts": "fbfc9f72cce84acc773818993b6630d73df1ce6cab7781f172d871b42b8bf70d", + "web/protocol/corrective-family-runner.ts": "b0beea0bd387279fbf2ca4c0d8c1f534feb94bb55ab45791a02a44b999ac8863", + "web/app/src/corrective-pilot-bridge.ts": "37a2196d5e6b61a2f3934df58faaf14c61d942b78fa6d55b346c5ed442d8cc74", + "web/tests/e2e/corrective-family-runner.spec.ts": "48613bb7540f2b8e530a9f9fea034f85c36963ce7bc9921d3a70a1f458c9eea9", + "tests/golden/corrective/C5-002/family-runner.test.mjs": "9f2bdd317e4ed2fe8412a067814e823571d9e55b2d3fce9f8a533be947f80c53" + }, + "commandExitCodes": { + "focusedTest": 0, + "chromiumPilot": 0, + "chromiumPilotSecond": 0, + "determinism": 0, + "receiptGate": 0, + "c4_003Regression": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0, + "protectedHashCheck": 0, + "sourceHashCheck": 0 + }, + "nextCorrectiveTask": "C5-003" +} diff --git a/tests/golden/corrective/C5-002/manifest.json b/tests/golden/corrective/C5-002/manifest.json new file mode 100644 index 00000000..4d63c453 --- /dev/null +++ b/tests/golden/corrective/C5-002/manifest.json @@ -0,0 +1,132 @@ +{ + "schemaVersion": 1, + "task": "C5-002", + "status": "done", + "gate": "G4", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C5-002", + "artifactCount": 19, + "artifacts": [ + { + "path": "tests/golden/corrective/C5-002/c4-003-regression.log", + "sha256": "fce5d9ca57b67dd903542c2c883e879030f36af009898ebc87e1cf5d7d2171f4", + "bytes": 319 + }, + { + "path": "tests/golden/corrective/C5-002/check-context-governance.log", + "sha256": "7ed574f956f0255482a15f63faedc657fc7eb0fa643d282a430f27a207b5bf8d", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C5-002/check-corrective-plan.log", + "sha256": "1d91b30f24aede475acb4173109cb673b6a1173868a947e95bf244e2c3aa1801", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C5-002/check-task-context.log", + "sha256": "cf9fb3f108cb7febf3d6d17543cb1abf9356174eb34d379652dd288aca6db2d7", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C5-002/chromium-family-report.json", + "sha256": "e65bcc31891a6df47e1be090a177716b0f654f843bd0007981678b9a53113573", + "bytes": 4192 + }, + { + "path": "tests/golden/corrective/C5-002/chromium-family-report.second.json", + "sha256": "e65bcc31891a6df47e1be090a177716b0f654f843bd0007981678b9a53113573", + "bytes": 4192 + }, + { + "path": "tests/golden/corrective/C5-002/command-exit-codes.json", + "sha256": "b5a96bdbecfbd49aa4cae906ed11c5bab813a17dbdadf762b6a37d70c036794d", + "bytes": 319 + }, + { + "path": "tests/golden/corrective/C5-002/determinism.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C5-002/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C5-002/family-runner.test.mjs", + "sha256": "9f2bdd317e4ed2fe8412a067814e823571d9e55b2d3fce9f8a533be947f80c53", + "bytes": 7686 + }, + { + "path": "tests/golden/corrective/C5-002/focused-test.log", + "sha256": "9c7acd97f2062c686a6f0fbf94e59da173b0069fe55387e1430d274fd63cf447", + "bytes": 303 + }, + { + "path": "tests/golden/corrective/C5-002/protected-hash-check.log", + "sha256": "deb15d1fa1d5606bcbe760b066dfba312bd586df82228214668f149385940ac5", + "bytes": 28 + }, + { + "path": "tests/golden/corrective/C5-002/protected-hashes-after.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C5-002/protected-hashes-before.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C5-002/receipt-gate.log", + "sha256": "949e70cb0f51244595d611e980c40fc2a1fa9e7b8e45d037df4a4aa50fe0d058", + "bytes": 53 + }, + { + "path": "tests/golden/corrective/C5-002/source-hash-check.log", + "sha256": "a477a9dbac25d6ff85366505111eb60970903f0e6d9b8e2ed698adc4a250e5f3", + "bytes": 23 + }, + { + "path": "tests/golden/corrective/C5-002/source-hashes.json", + "sha256": "e1e07e2f986092740ab5627d71fde423dfbae213deb31ecac326a876a142d4d5", + "bytes": 861 + }, + { + "path": "tests/golden/corrective/C5-002/test-context-governance.log", + "sha256": "38fe9b5ff417a09c52782d37bd5e8bc721a00fae9179cfbd32a9f74a8370c6a4", + "bytes": 2578 + }, + { + "path": "tests/golden/corrective/C5-002/typecheck.log", + "sha256": "f90c14a9694ed7029129a343fa5cc8672e4a59a5fe4b34e7c3098db9c5c5bd1a", + "bytes": 76 + } + ], + "sourceHashes": { + "tests/golden/corrective/C5-001/manifest.json": "8bea85dc29f801d384659944b9f0f85b42cb8cfb21aa361c7c97799984c3fc21", + "web/protocol/corrective-command-registry.ts": "cb0553aac346d34d3c2c12501d2bf681c6edd36c7d6ce5de43c6178b42296897", + "web/protocol/corrective-case-runner.ts": "fbfc9f72cce84acc773818993b6630d73df1ce6cab7781f172d871b42b8bf70d", + "web/protocol/corrective-family-runner.ts": "b0beea0bd387279fbf2ca4c0d8c1f534feb94bb55ab45791a02a44b999ac8863", + "web/app/src/corrective-pilot-bridge.ts": "37a2196d5e6b61a2f3934df58faaf14c61d942b78fa6d55b346c5ed442d8cc74", + "web/tests/e2e/corrective-family-runner.spec.ts": "48613bb7540f2b8e530a9f9fea034f85c36963ce7bc9921d3a70a1f458c9eea9", + "tests/golden/corrective/C5-002/family-runner.test.mjs": "9f2bdd317e4ed2fe8412a067814e823571d9e55b2d3fce9f8a533be947f80c53" + }, + "commandExitCodes": { + "focusedTest": 0, + "chromiumPilot": 0, + "chromiumPilotSecond": 0, + "determinism": 0, + "receiptGate": 0, + "c4_003Regression": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0, + "protectedHashCheck": 0, + "sourceHashCheck": 0 + }, + "nextCorrectiveTask": "C5-003" +} diff --git a/tests/golden/corrective/C5-002/protected-hashes-after.txt b/tests/golden/corrective/C5-002/protected-hashes-after.txt new file mode 100644 index 00000000..a0d2c8ba --- /dev/null +++ b/tests/golden/corrective/C5-002/protected-hashes-after.txt @@ -0,0 +1,7 @@ +5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1 docs/EXECUTION_QUEUE.md +32f4c11ebf8563f3aa500583f3979c1b38d711cc7328a428968118f0375b90b4 tests/golden/M15-03A/completed-gap-tasks.json +edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17 tests/golden/M15-03A/next-task-plan.json +da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d tests/golden/M15-03A/task-catalog.jsonl +ed591788c48c1b089decd2aa187f66728b5cc66a73c2b1c0c46c1a46ec4a0ae0 tests/golden/M15-03A/task-index.json +3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1 tests/golden/M16-GAP-00273/manifest.json +5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8 docs/status/M16-GAP-00273.md diff --git a/tests/golden/corrective/C5-002/protected-hashes-before.txt b/tests/golden/corrective/C5-002/protected-hashes-before.txt new file mode 100644 index 00000000..a0d2c8ba --- /dev/null +++ b/tests/golden/corrective/C5-002/protected-hashes-before.txt @@ -0,0 +1,7 @@ +5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1 docs/EXECUTION_QUEUE.md +32f4c11ebf8563f3aa500583f3979c1b38d711cc7328a428968118f0375b90b4 tests/golden/M15-03A/completed-gap-tasks.json +edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17 tests/golden/M15-03A/next-task-plan.json +da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d tests/golden/M15-03A/task-catalog.jsonl +ed591788c48c1b089decd2aa187f66728b5cc66a73c2b1c0c46c1a46ec4a0ae0 tests/golden/M15-03A/task-index.json +3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1 tests/golden/M16-GAP-00273/manifest.json +5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8 docs/status/M16-GAP-00273.md diff --git a/tests/golden/corrective/C5-002/source-hashes.json b/tests/golden/corrective/C5-002/source-hashes.json new file mode 100644 index 00000000..dc0f0f31 --- /dev/null +++ b/tests/golden/corrective/C5-002/source-hashes.json @@ -0,0 +1,11 @@ +{ + "sourceHashes": { + "tests/golden/corrective/C5-001/manifest.json": "8bea85dc29f801d384659944b9f0f85b42cb8cfb21aa361c7c97799984c3fc21", + "web/protocol/corrective-command-registry.ts": "cb0553aac346d34d3c2c12501d2bf681c6edd36c7d6ce5de43c6178b42296897", + "web/protocol/corrective-case-runner.ts": "fbfc9f72cce84acc773818993b6630d73df1ce6cab7781f172d871b42b8bf70d", + "web/protocol/corrective-family-runner.ts": "b0beea0bd387279fbf2ca4c0d8c1f534feb94bb55ab45791a02a44b999ac8863", + "web/app/src/corrective-pilot-bridge.ts": "37a2196d5e6b61a2f3934df58faaf14c61d942b78fa6d55b346c5ed442d8cc74", + "web/tests/e2e/corrective-family-runner.spec.ts": "48613bb7540f2b8e530a9f9fea034f85c36963ce7bc9921d3a70a1f458c9eea9", + "tests/golden/corrective/C5-002/family-runner.test.mjs": "9f2bdd317e4ed2fe8412a067814e823571d9e55b2d3fce9f8a533be947f80c53" + } +} diff --git a/tests/golden/corrective/C5-003/capability-manifest.json b/tests/golden/corrective/C5-003/capability-manifest.json new file mode 100644 index 00000000..95512717 --- /dev/null +++ b/tests/golden/corrective/C5-003/capability-manifest.json @@ -0,0 +1,56 @@ +[ + { + "capabilityId": "CAP-ASSET-CATALOG-MUTATION", + "family": "ASSET_CATALOG", + "lifecycleStatus": "planned", + "completionClass": "PLANNED", + "parityLevel": "L0", + "targetParityLevel": "L4", + "sourceGaps": [ + "operator:asset.catalog_new", + "operator:asset.catalog_delete", + "operator:asset.catalogs_save", + "operator:asset.catalog_undo", + "operator:asset.catalog_redo" + ], + "catalogMatches": [ + "operator:asset.catalog_new", + "operator:asset.catalog_delete", + "operator:asset.catalogs_save", + "operator:asset.catalog_undo", + "operator:asset.catalog_redo" + ], + "representativeEvidence": "tests/golden/corrective/C3-003/manifest.json", + "migrationStatus": "staged_only" + }, + { + "capabilityId": "CAP-MODIFIER-STATE-MUTATION", + "family": "MODIFIER", + "lifecycleStatus": "planned", + "completionClass": "PLANNED", + "parityLevel": "L0", + "targetParityLevel": "L3", + "sourceGaps": [ + "modifier:state", + "operator:object.modifier_toggle" + ], + "catalogMatches": [], + "representativeEvidence": "tests/golden/corrective/C4-001/manifest.json", + "migrationStatus": "staged_only" + }, + { + "capabilityId": "CAP-MESH-POSITIVE-EDIT", + "family": "MESH", + "lifecycleStatus": "planned", + "completionClass": "PLANNED", + "parityLevel": "L0", + "targetParityLevel": "L3", + "sourceGaps": [ + "mesh:edit", + "operator:mesh.edit" + ], + "catalogMatches": [], + "representativeEvidence": "tests/golden/corrective/C4-002/manifest.json", + "migrationStatus": "staged_only" + } +] diff --git a/tests/golden/corrective/C5-003/command-exit-codes.json b/tests/golden/corrective/C5-003/command-exit-codes.json new file mode 100644 index 00000000..698aa163 --- /dev/null +++ b/tests/golden/corrective/C5-003/command-exit-codes.json @@ -0,0 +1,13 @@ +{ + "inventoryReport": 0, + "determinism": 0, + "inventoryGate": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0, + "protectedHashCheck": 0, + "sourceHashCheck": 0 +} diff --git a/tests/golden/corrective/C5-003/coverage-report.json b/tests/golden/corrective/C5-003/coverage-report.json new file mode 100644 index 00000000..b66d6f7f --- /dev/null +++ b/tests/golden/corrective/C5-003/coverage-report.json @@ -0,0 +1,26 @@ +[ + { + "family": "ASSET_CATALOG", + "legacyTaskCount": 6, + "pendingCount": 0, + "completedCount": 6, + "representativeEvidence": "tests/golden/corrective/C3-003/manifest.json", + "workflow": "assetCatalogAppend" + }, + { + "family": "MODIFIER", + "legacyTaskCount": 83, + "pendingCount": 0, + "completedCount": 83, + "representativeEvidence": "tests/golden/corrective/C4-001/manifest.json", + "workflow": "modifierSetEnabled" + }, + { + "family": "MESH", + "legacyTaskCount": 168, + "pendingCount": 167, + "completedCount": 1, + "representativeEvidence": "tests/golden/corrective/C4-002/manifest.json", + "workflow": "meshTranslateVertex" + } +] diff --git a/tests/golden/corrective/C5-003/handoff.json b/tests/golden/corrective/C5-003/handoff.json new file mode 100644 index 00000000..80203e78 --- /dev/null +++ b/tests/golden/corrective/C5-003/handoff.json @@ -0,0 +1,132 @@ +{ + "schemaVersion": 1, + "task": "C5-003", + "status": "done", + "gate": "G4", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C5-003", + "artifactCount": 20, + "artifacts": [ + { + "path": "tests/golden/corrective/C5-003/capability-manifest.json", + "sha256": "c39e4f880588bc6008ce35b6648f6cb89df4f50dd6e065af7ac8d55d782417c1", + "bytes": 1619 + }, + { + "path": "tests/golden/corrective/C5-003/check-context-governance.log", + "sha256": "7ed574f956f0255482a15f63faedc657fc7eb0fa643d282a430f27a207b5bf8d", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C5-003/check-corrective-plan.log", + "sha256": "a4f7594629ab2e08ee3644a7491c1b4ada19367399ac1968cd4a1fef904268eb", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C5-003/check-task-context.log", + "sha256": "cf9fb3f108cb7febf3d6d17543cb1abf9356174eb34d379652dd288aca6db2d7", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C5-003/command-exit-codes.json", + "sha256": "589c78404682118812fff8dafb2de6493f652894a5cf28fa693924fa74edc952", + "bytes": 250 + }, + { + "path": "tests/golden/corrective/C5-003/coverage-report.json", + "sha256": "8749fb366436ddaf6b4aa95b651deca7aa676adb0e039873a4d77373828e9f18", + "bytes": 683 + }, + { + "path": "tests/golden/corrective/C5-003/determinism.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C5-003/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C5-003/inventory-gate.log", + "sha256": "f13e448e4bd8bd556ab8f30517e222defab12cf94605434895bfb48d10b3b9ba", + "bytes": 87 + }, + { + "path": "tests/golden/corrective/C5-003/inventory-migration.mjs", + "sha256": "73fe0a97399c2f709e563d10058921c7e3abe4f4a576787f2188362b37a00284", + "bytes": 2925 + }, + { + "path": "tests/golden/corrective/C5-003/inventory-report.json", + "sha256": "853486cc9fd2e3a0e7d5efdd974aa901675df67176fae521054a419b465298a5", + "bytes": 1886827 + }, + { + "path": "tests/golden/corrective/C5-003/inventory-report.second.json", + "sha256": "853486cc9fd2e3a0e7d5efdd974aa901675df67176fae521054a419b465298a5", + "bytes": 1886827 + }, + { + "path": "tests/golden/corrective/C5-003/legacy-evidence-classification.json", + "sha256": "36c36ff6d60b42e40a2432227425770d0badcafd04fbd7ba73266a9f1e8b1555", + "bytes": 1759697 + }, + { + "path": "tests/golden/corrective/C5-003/protected-hash-check.log", + "sha256": "deb15d1fa1d5606bcbe760b066dfba312bd586df82228214668f149385940ac5", + "bytes": 28 + }, + { + "path": "tests/golden/corrective/C5-003/protected-hashes-after.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C5-003/protected-hashes-before.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C5-003/source-hash-check.log", + "sha256": "72365be1732352111b737ba53579406ff88435119f61291373c2c15c1b409e35", + "bytes": 23 + }, + { + "path": "tests/golden/corrective/C5-003/source-hashes.json", + "sha256": "0ac92232faa71413b322181398e5d69c4eb29dc81b933596cf514e521812ba84", + "bytes": 643 + }, + { + "path": "tests/golden/corrective/C5-003/test-context-governance.log", + "sha256": "fabfd1f266dfeca80501507c1b425d153826abe2cb299f585a05154f68983247", + "bytes": 2580 + }, + { + "path": "tests/golden/corrective/C5-003/typecheck.log", + "sha256": "f90c14a9694ed7029129a343fa5cc8672e4a59a5fe4b34e7c3098db9c5c5bd1a", + "bytes": 76 + } + ], + "sourceHashes": { + "tests/golden/corrective/C5-001/cluster-report.json": "59b76bca30291b85895cc762e42afba391948fd51954f80bd4a20988f913307c", + "tests/golden/corrective/C5-002/manifest.json": "bb22c1d64b2042253e1673db8a4082580b7eb98a1a92551fa0cde51413fc6aed", + "tests/golden/M15-03A/task-catalog.jsonl": "da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d", + "docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json": "053e1551a24da08e045bb54115858a892ddd825fa59f1691a26a1ccfc1db3ca0", + "tests/golden/corrective/C5-003/inventory-migration.mjs": "73fe0a97399c2f709e563d10058921c7e3abe4f4a576787f2188362b37a00284" + }, + "commandExitCodes": { + "inventoryReport": 0, + "determinism": 0, + "inventoryGate": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0, + "protectedHashCheck": 0, + "sourceHashCheck": 0 + }, + "nextCorrectiveTask": "C6-001" +} diff --git a/tests/golden/corrective/C5-003/inventory-migration.mjs b/tests/golden/corrective/C5-003/inventory-migration.mjs new file mode 100644 index 00000000..12a7f2b8 --- /dev/null +++ b/tests/golden/corrective/C5-003/inventory-migration.mjs @@ -0,0 +1,56 @@ +import fs from "node:fs"; +import path from "node:path"; + +const root = path.resolve(import.meta.dirname, "../../../.."); +const readJson = (relative) => JSON.parse(fs.readFileSync(path.join(root, relative), "utf8")); +const catalog = fs.readFileSync(path.join(root, "tests/golden/M15-03A/task-catalog.jsonl"), "utf8").trim().split("\n").map((line) => JSON.parse(line)); +const clusters = readJson("tests/golden/corrective/C5-001/cluster-report.json"); +const prior = readJson("tests/golden/corrective/C5-002/manifest.json"); +const matrix = readJson("docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json"); +const representatives = new Map(clusters.representativeCases.map((entry) => [entry.family, entry])); +const classification = catalog.map((row) => { + const family = row.gapId.startsWith("modifier:") ? "MODIFIER" : row.gapId === "datablock:Mesh" || row.gapId.startsWith("operator:mesh.") ? "MESH" : row.gapId.startsWith("operator:asset.catalog") ? "ASSET_CATALOG" : "OTHER"; + const representative = representatives.get(family); + return { + id: row.id, + gapId: row.gapId, + ownerFamily: row.ownerFamily, + state: row.state, + targetImplementationClass: row.targetImplementationClass, + family, + evidenceClass: representative && row.state === "completed" ? "legacy_completed_unclassified" : row.state === "pending" ? "legacy_pending" : "legacy_completed_unclassified", + }; +}); +const coverage = clusters.clusters.map((cluster) => ({ + family: cluster.family, + legacyTaskCount: cluster.legacyTaskCount, + pendingCount: cluster.states.pending ?? 0, + completedCount: cluster.states.completed ?? 0, + representativeEvidence: representatives.get(cluster.family)?.evidence ?? null, + workflow: representatives.get(cluster.family)?.workflow ?? null, +})); +const capabilityManifest = matrix.entries.map((entry) => ({ + capabilityId: entry.capabilityId, + family: entry.family, + lifecycleStatus: entry.lifecycleStatus, + completionClass: entry.completionClass, + parityLevel: entry.parityLevel, + targetParityLevel: entry.targetParityLevel, + sourceGaps: entry.sourceGaps, + catalogMatches: entry.sourceGaps.filter((gap) => catalog.some((row) => row.gapId === gap)), + representativeEvidence: representatives.get(entry.family)?.evidence ?? null, + migrationStatus: "staged_only", +})); +const result = { + schemaVersion: 1, + task: "C5-003", + operation: "CORRECTIVE_STAGED_LEGACY_INVENTORY_MIGRATION", + status: "STAGED_ONLY", + queueMutation: false, + source: { catalogTaskCount: catalog.length, clusterReportTask: clusters.task, parentManifest: prior.task, capabilityCount: matrix.entries.length }, + coverage, + capabilityManifest, + classificationSummary: Object.fromEntries([...new Set(classification.map((row) => row.evidenceClass))].sort().map((name) => [name, classification.filter((row) => row.evidenceClass === name).length])), + classification, +}; +process.stdout.write(`${JSON.stringify(result, null, 2)}\n`); diff --git a/tests/golden/corrective/C5-003/inventory-report.json b/tests/golden/corrective/C5-003/inventory-report.json new file mode 100644 index 00000000..c425c764 --- /dev/null +++ b/tests/golden/corrective/C5-003/inventory-report.json @@ -0,0 +1,62201 @@ +{ + "schemaVersion": 1, + "task": "C5-003", + "operation": "CORRECTIVE_STAGED_LEGACY_INVENTORY_MIGRATION", + "status": "STAGED_ONLY", + "queueMutation": false, + "source": { + "catalogTaskCount": 6900, + "clusterReportTask": "C5-001", + "parentManifest": "C5-002", + "capabilityCount": 3 + }, + "coverage": [ + { + "family": "ASSET_CATALOG", + "legacyTaskCount": 6, + "pendingCount": 0, + "completedCount": 6, + "representativeEvidence": "tests/golden/corrective/C3-003/manifest.json", + "workflow": "assetCatalogAppend" + }, + { + "family": "MODIFIER", + "legacyTaskCount": 83, + "pendingCount": 0, + "completedCount": 83, + "representativeEvidence": "tests/golden/corrective/C4-001/manifest.json", + "workflow": "modifierSetEnabled" + }, + { + "family": "MESH", + "legacyTaskCount": 168, + "pendingCount": 167, + "completedCount": 1, + "representativeEvidence": "tests/golden/corrective/C4-002/manifest.json", + "workflow": "meshTranslateVertex" + } + ], + "capabilityManifest": [ + { + "capabilityId": "CAP-ASSET-CATALOG-MUTATION", + "family": "ASSET_CATALOG", + "lifecycleStatus": "planned", + "completionClass": "PLANNED", + "parityLevel": "L0", + "targetParityLevel": "L4", + "sourceGaps": [ + "operator:asset.catalog_new", + "operator:asset.catalog_delete", + "operator:asset.catalogs_save", + "operator:asset.catalog_undo", + "operator:asset.catalog_redo" + ], + "catalogMatches": [ + "operator:asset.catalog_new", + "operator:asset.catalog_delete", + "operator:asset.catalogs_save", + "operator:asset.catalog_undo", + "operator:asset.catalog_redo" + ], + "representativeEvidence": "tests/golden/corrective/C3-003/manifest.json", + "migrationStatus": "staged_only" + }, + { + "capabilityId": "CAP-MODIFIER-STATE-MUTATION", + "family": "MODIFIER", + "lifecycleStatus": "planned", + "completionClass": "PLANNED", + "parityLevel": "L0", + "targetParityLevel": "L3", + "sourceGaps": [ + "modifier:state", + "operator:object.modifier_toggle" + ], + "catalogMatches": [], + "representativeEvidence": "tests/golden/corrective/C4-001/manifest.json", + "migrationStatus": "staged_only" + }, + { + "capabilityId": "CAP-MESH-POSITIVE-EDIT", + "family": "MESH", + "lifecycleStatus": "planned", + "completionClass": "PLANNED", + "parityLevel": "L0", + "targetParityLevel": "L3", + "sourceGaps": [ + "mesh:edit", + "operator:mesh.edit" + ], + "catalogMatches": [], + "representativeEvidence": "tests/golden/corrective/C4-002/manifest.json", + "migrationStatus": "staged_only" + } + ], + "classificationSummary": { + "legacy_completed_unclassified": 276, + "legacy_pending": 6624 + }, + "classification": [ + { + "id": "M16-GAP-00001", + "gapId": "datablock:Action", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00002", + "gapId": "datablock:Armature", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00003", + "gapId": "datablock:Brush", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00004", + "gapId": "datablock:Camera", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00005", + "gapId": "datablock:Collection", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00006", + "gapId": "datablock:Curve", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00007", + "gapId": "datablock:Curves", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00008", + "gapId": "datablock:FreestyleLineStyle", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00009", + "gapId": "datablock:GreasePencil", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00010", + "gapId": "datablock:Lattice", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00011", + "gapId": "datablock:Library", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00012", + "gapId": "datablock:Light", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00013", + "gapId": "datablock:Material", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00014", + "gapId": "datablock:Mesh", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00015", + "gapId": "datablock:MetaBall", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00016", + "gapId": "datablock:NodeTree", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00017", + "gapId": "datablock:Object", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00018", + "gapId": "datablock:ParticleSettings", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00019", + "gapId": "datablock:PointCloud", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00020", + "gapId": "datablock:Scene", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00021", + "gapId": "datablock:Screen", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00022", + "gapId": "datablock:Sound", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00023", + "gapId": "datablock:Speaker", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00024", + "gapId": "datablock:Text", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00025", + "gapId": "datablock:Texture", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00026", + "gapId": "datablock:Volume", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00027", + "gapId": "datablock:WindowManager", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00028", + "gapId": "datablock:WorkSpace", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00029", + "gapId": "datablock:World", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00030", + "gapId": "modifier:ARMATURE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00031", + "gapId": "modifier:ARRAY", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00032", + "gapId": "modifier:BEVEL", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00033", + "gapId": "modifier:BOOLEAN", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00034", + "gapId": "modifier:BUILD", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00035", + "gapId": "modifier:CAST", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00036", + "gapId": "modifier:CLOTH", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00037", + "gapId": "modifier:COLLISION", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00038", + "gapId": "modifier:CORRECTIVE_SMOOTH", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00039", + "gapId": "modifier:CURVE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00040", + "gapId": "modifier:DATA_TRANSFER", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00041", + "gapId": "modifier:DECIMATE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00042", + "gapId": "modifier:DISPLACE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00043", + "gapId": "modifier:DYNAMIC_PAINT", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00044", + "gapId": "modifier:EDGE_SPLIT", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00045", + "gapId": "modifier:EXPLODE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00046", + "gapId": "modifier:FLUID", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00047", + "gapId": "modifier:GREASE_PENCIL_ARMATURE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00048", + "gapId": "modifier:GREASE_PENCIL_ARRAY", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00049", + "gapId": "modifier:GREASE_PENCIL_BUILD", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00050", + "gapId": "modifier:GREASE_PENCIL_COLOR", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00051", + "gapId": "modifier:GREASE_PENCIL_DASH", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00052", + "gapId": "modifier:GREASE_PENCIL_ENVELOPE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00053", + "gapId": "modifier:GREASE_PENCIL_HOOK", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00054", + "gapId": "modifier:GREASE_PENCIL_LATTICE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00055", + "gapId": "modifier:GREASE_PENCIL_LENGTH", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00056", + "gapId": "modifier:GREASE_PENCIL_MIRROR", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00057", + "gapId": "modifier:GREASE_PENCIL_MULTIPLY", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00058", + "gapId": "modifier:GREASE_PENCIL_NOISE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00059", + "gapId": "modifier:GREASE_PENCIL_OFFSET", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00060", + "gapId": "modifier:GREASE_PENCIL_OPACITY", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00061", + "gapId": "modifier:GREASE_PENCIL_OUTLINE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00062", + "gapId": "modifier:GREASE_PENCIL_SHRINKWRAP", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00063", + "gapId": "modifier:GREASE_PENCIL_SIMPLIFY", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00064", + "gapId": "modifier:GREASE_PENCIL_SMOOTH", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00065", + "gapId": "modifier:GREASE_PENCIL_SUBDIV", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00066", + "gapId": "modifier:GREASE_PENCIL_TEXTURE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00067", + "gapId": "modifier:GREASE_PENCIL_THICKNESS", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00068", + "gapId": "modifier:GREASE_PENCIL_TIME", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00069", + "gapId": "modifier:GREASE_PENCIL_TINT", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00070", + "gapId": "modifier:GREASE_PENCIL_VERTEX_WEIGHT_ANGLE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00071", + "gapId": "modifier:GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00072", + "gapId": "modifier:HOOK", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00073", + "gapId": "modifier:LAPLACIANDEFORM", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00074", + "gapId": "modifier:LAPLACIANSMOOTH", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00075", + "gapId": "modifier:LATTICE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00076", + "gapId": "modifier:LINEART", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00077", + "gapId": "modifier:MASK", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00078", + "gapId": "modifier:MESH_CACHE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00079", + "gapId": "modifier:MESH_DEFORM", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00080", + "gapId": "modifier:MESH_SEQUENCE_CACHE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00081", + "gapId": "modifier:MESH_TO_VOLUME", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00082", + "gapId": "modifier:MIRROR", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00083", + "gapId": "modifier:MULTIRES", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00084", + "gapId": "modifier:NODES", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00085", + "gapId": "modifier:NORMAL_EDIT", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00086", + "gapId": "modifier:OCEAN", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00087", + "gapId": "modifier:PARTICLE_INSTANCE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00088", + "gapId": "modifier:PARTICLE_SYSTEM", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00089", + "gapId": "modifier:REMESH", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00090", + "gapId": "modifier:SCREW", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00091", + "gapId": "modifier:SHRINKWRAP", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00092", + "gapId": "modifier:SIMPLE_DEFORM", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00093", + "gapId": "modifier:SKIN", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00094", + "gapId": "modifier:SMOOTH", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00095", + "gapId": "modifier:SOFT_BODY", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00096", + "gapId": "modifier:SOLIDIFY", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00097", + "gapId": "modifier:SUBSURF", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00098", + "gapId": "modifier:SURFACE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00099", + "gapId": "modifier:SURFACE_DEFORM", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00100", + "gapId": "modifier:TRIANGULATE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00101", + "gapId": "modifier:UV_PROJECT", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00102", + "gapId": "modifier:UV_WARP", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00103", + "gapId": "modifier:VERTEX_WEIGHT_EDIT", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00104", + "gapId": "modifier:VERTEX_WEIGHT_MIX", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00105", + "gapId": "modifier:VERTEX_WEIGHT_PROXIMITY", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00106", + "gapId": "modifier:VOLUME_DISPLACE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00107", + "gapId": "modifier:VOLUME_TO_MESH", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00108", + "gapId": "modifier:WARP", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00109", + "gapId": "modifier:WAVE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00110", + "gapId": "modifier:WEIGHTED_NORMAL", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00111", + "gapId": "modifier:WELD", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00112", + "gapId": "modifier:WIREFRAME", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00113", + "gapId": "operator:action.bake_keys", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00114", + "gapId": "operator:action.clean", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00115", + "gapId": "operator:action.clickselect", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00116", + "gapId": "operator:action.copy", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00117", + "gapId": "operator:action.delete", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00118", + "gapId": "operator:action.duplicate", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00119", + "gapId": "operator:action.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00120", + "gapId": "operator:action.easing_type", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00121", + "gapId": "operator:action.extrapolation_type", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00122", + "gapId": "operator:action.frame_jump", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00123", + "gapId": "operator:action.handle_type", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00124", + "gapId": "operator:action.interpolation_type", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00125", + "gapId": "operator:action.keyframe_insert", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00126", + "gapId": "operator:action.keyframe_type", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00127", + "gapId": "operator:action.markers_make_local", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00128", + "gapId": "operator:action.mirror", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00129", + "gapId": "operator:action.new", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00130", + "gapId": "operator:action.paste", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00131", + "gapId": "operator:action.previewrange_set", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00132", + "gapId": "operator:action.push_down", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00133", + "gapId": "operator:action.select_all", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00134", + "gapId": "operator:action.select_box", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00135", + "gapId": "operator:action.select_by_type", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00136", + "gapId": "operator:action.select_circle", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00137", + "gapId": "operator:action.select_column", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00138", + "gapId": "operator:action.select_lasso", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00139", + "gapId": "operator:action.select_leftright", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00140", + "gapId": "operator:action.select_less", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00141", + "gapId": "operator:action.select_linked", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00142", + "gapId": "operator:action.select_more", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00143", + "gapId": "operator:action.snap", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00144", + "gapId": "operator:action.stash", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00145", + "gapId": "operator:action.stash_and_create", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00146", + "gapId": "operator:action.unlink", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00147", + "gapId": "operator:action.view_all", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00148", + "gapId": "operator:action.view_frame", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00149", + "gapId": "operator:action.view_selected", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00150", + "gapId": "operator:anim.change_frame", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00151", + "gapId": "operator:anim.channel_select_keys", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00152", + "gapId": "operator:anim.channel_view_pick", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00153", + "gapId": "operator:anim.channels_bake", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00154", + "gapId": "operator:anim.channels_clean_empty", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00155", + "gapId": "operator:anim.channels_click", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00156", + "gapId": "operator:anim.channels_collapse", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00157", + "gapId": "operator:anim.channels_delete", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00158", + "gapId": "operator:anim.channels_editable_toggle", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00159", + "gapId": "operator:anim.channels_expand", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00160", + "gapId": "operator:anim.channels_fcurves_enable", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00161", + "gapId": "operator:anim.channels_group", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00162", + "gapId": "operator:anim.channels_move", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00163", + "gapId": "operator:anim.channels_rename", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00164", + "gapId": "operator:anim.channels_select_all", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00165", + "gapId": "operator:anim.channels_select_box", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00166", + "gapId": "operator:anim.channels_select_filter", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00167", + "gapId": "operator:anim.channels_setting_disable", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00168", + "gapId": "operator:anim.channels_setting_enable", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00169", + "gapId": "operator:anim.channels_setting_toggle", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00170", + "gapId": "operator:anim.channels_ungroup", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00171", + "gapId": "operator:anim.channels_view_selected", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00172", + "gapId": "operator:anim.clear_useless_actions", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00173", + "gapId": "operator:anim.copy_driver_button", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00174", + "gapId": "operator:anim.driver_button_add", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00175", + "gapId": "operator:anim.driver_button_edit", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00176", + "gapId": "operator:anim.driver_button_remove", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00177", + "gapId": "operator:anim.end_frame_set", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00178", + "gapId": "operator:anim.keyframe_clear_button", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00179", + "gapId": "operator:anim.keyframe_clear_v3d", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00180", + "gapId": "operator:anim.keyframe_clear_vse", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00181", + "gapId": "operator:anim.keyframe_delete", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00182", + "gapId": "operator:anim.keyframe_delete_button", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00183", + "gapId": "operator:anim.keyframe_delete_by_name", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00184", + "gapId": "operator:anim.keyframe_delete_v3d", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00185", + "gapId": "operator:anim.keyframe_delete_vse", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00186", + "gapId": "operator:anim.keyframe_insert", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00187", + "gapId": "operator:anim.keyframe_insert_button", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00188", + "gapId": "operator:anim.keyframe_insert_by_name", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00189", + "gapId": "operator:anim.keyframe_insert_menu", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00190", + "gapId": "operator:anim.keying_set_active_set", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00191", + "gapId": "operator:anim.keying_set_add", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00192", + "gapId": "operator:anim.keying_set_export", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00193", + "gapId": "operator:anim.keying_set_path_add", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00194", + "gapId": "operator:anim.keying_set_path_remove", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00195", + "gapId": "operator:anim.keying_set_remove", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00196", + "gapId": "operator:anim.keyingset_button_add", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00197", + "gapId": "operator:anim.keyingset_button_remove", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00198", + "gapId": "operator:anim.merge_animation", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00199", + "gapId": "operator:anim.paste_driver_button", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00200", + "gapId": "operator:anim.previewrange_clear", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00201", + "gapId": "operator:anim.previewrange_set", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00202", + "gapId": "operator:anim.replace_action", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00203", + "gapId": "operator:anim.replace_action_new", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00204", + "gapId": "operator:anim.scene_range_frame", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00205", + "gapId": "operator:anim.separate_slots", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00206", + "gapId": "operator:anim.slot_channels_move_to_new_action", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00207", + "gapId": "operator:anim.slot_new_for_id", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00208", + "gapId": "operator:anim.slot_unassign_from_constraint", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00209", + "gapId": "operator:anim.slot_unassign_from_id", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00210", + "gapId": "operator:anim.slot_unassign_from_nla_strip", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00211", + "gapId": "operator:anim.start_frame_set", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00212", + "gapId": "operator:anim.update_animated_transform_constraints", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00213", + "gapId": "operator:anim.version_bone_hide_property", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00214", + "gapId": "operator:anim.view_curve_in_graph_editor", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00215", + "gapId": "operator:armature.align", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00216", + "gapId": "operator:armature.assign_to_collection", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00217", + "gapId": "operator:armature.autoside_names", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00218", + "gapId": "operator:armature.bone_primitive_add", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00219", + "gapId": "operator:armature.calculate_roll", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00220", + "gapId": "operator:armature.click_extrude", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00221", + "gapId": "operator:armature.collection_add", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00222", + "gapId": "operator:armature.collection_assign", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00223", + "gapId": "operator:armature.collection_create_and_assign", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00224", + "gapId": "operator:armature.collection_deselect", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00225", + "gapId": "operator:armature.collection_move", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00226", + "gapId": "operator:armature.collection_remove", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00227", + "gapId": "operator:armature.collection_remove_unused", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00228", + "gapId": "operator:armature.collection_select", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00229", + "gapId": "operator:armature.collection_show_all", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00230", + "gapId": "operator:armature.collection_unassign", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00231", + "gapId": "operator:armature.collection_unassign_named", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00232", + "gapId": "operator:armature.collection_unsolo_all", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00233", + "gapId": "operator:armature.copy_bone_color_to_selected", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00234", + "gapId": "operator:armature.delete", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00235", + "gapId": "operator:armature.dissolve", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00236", + "gapId": "operator:armature.duplicate", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00237", + "gapId": "operator:armature.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00238", + "gapId": "operator:armature.duplicate_rename", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00239", + "gapId": "operator:armature.extrude", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00240", + "gapId": "operator:armature.extrude_forked", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00241", + "gapId": "operator:armature.extrude_move", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00242", + "gapId": "operator:armature.fill", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00243", + "gapId": "operator:armature.flip_names", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00244", + "gapId": "operator:armature.hide", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00245", + "gapId": "operator:armature.move_to_collection", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00246", + "gapId": "operator:armature.parent_clear", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00247", + "gapId": "operator:armature.parent_set", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00248", + "gapId": "operator:armature.reveal", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00249", + "gapId": "operator:armature.roll_clear", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00250", + "gapId": "operator:armature.select_all", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00251", + "gapId": "operator:armature.select_hierarchy", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00252", + "gapId": "operator:armature.select_less", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00253", + "gapId": "operator:armature.select_linked", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00254", + "gapId": "operator:armature.select_linked_pick", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00255", + "gapId": "operator:armature.select_mirror", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00256", + "gapId": "operator:armature.select_more", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00257", + "gapId": "operator:armature.select_similar", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00258", + "gapId": "operator:armature.separate", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00259", + "gapId": "operator:armature.shortest_path_pick", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00260", + "gapId": "operator:armature.split", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00261", + "gapId": "operator:armature.subdivide", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00262", + "gapId": "operator:armature.switch_direction", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00263", + "gapId": "operator:armature.symmetrize", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00264", + "gapId": "operator:asset.asset_download", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00265", + "gapId": "operator:asset.assets_download", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00266", + "gapId": "operator:asset.assign_action", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00267", + "gapId": "operator:asset.browse_containing_blend_file", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00268", + "gapId": "operator:asset.bundle_install", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00269", + "gapId": "operator:asset.catalog_delete", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "ASSET_CATALOG", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00270", + "gapId": "operator:asset.catalog_new", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "ASSET_CATALOG", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00271", + "gapId": "operator:asset.catalog_redo", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "ASSET_CATALOG", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00272", + "gapId": "operator:asset.catalog_undo", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "ASSET_CATALOG", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00273", + "gapId": "operator:asset.catalog_undo_push", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "ASSET_CATALOG", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00274", + "gapId": "operator:asset.catalogs_save", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "ASSET_CATALOG", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00275", + "gapId": "operator:asset.clear", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00276", + "gapId": "operator:asset.clear_single", + "ownerFamily": "OPERATOR", + "state": "active", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00277", + "gapId": "operator:asset.library_refresh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00278", + "gapId": "operator:asset.library_reload_listing", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00279", + "gapId": "operator:asset.mark", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00280", + "gapId": "operator:asset.mark_single", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00281", + "gapId": "operator:asset.open_containing_blend_file", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00282", + "gapId": "operator:asset.screenshot_preview", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00283", + "gapId": "operator:asset.tag_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00284", + "gapId": "operator:asset.tag_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00285", + "gapId": "operator:boid.rule_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00286", + "gapId": "operator:boid.rule_del", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00287", + "gapId": "operator:boid.rule_move_down", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00288", + "gapId": "operator:boid.rule_move_up", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00289", + "gapId": "operator:boid.state_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00290", + "gapId": "operator:boid.state_del", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00291", + "gapId": "operator:boid.state_move_down", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00292", + "gapId": "operator:boid.state_move_up", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00293", + "gapId": "operator:brush.asset_activate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00294", + "gapId": "operator:brush.asset_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00295", + "gapId": "operator:brush.asset_edit_metadata", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00296", + "gapId": "operator:brush.asset_load_preview", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00297", + "gapId": "operator:brush.asset_revert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00298", + "gapId": "operator:brush.asset_save", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00299", + "gapId": "operator:brush.asset_save_as", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00300", + "gapId": "operator:brush.scale_size", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00301", + "gapId": "operator:brush.stencil_control", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00302", + "gapId": "operator:brush.stencil_fit_image_aspect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00303", + "gapId": "operator:brush.stencil_reset_transform", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00304", + "gapId": "operator:buttons.clear_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00305", + "gapId": "operator:buttons.context_menu", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00306", + "gapId": "operator:buttons.directory_browse", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00307", + "gapId": "operator:buttons.file_browse", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00308", + "gapId": "operator:buttons.start_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00309", + "gapId": "operator:buttons.toggle_pin", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00310", + "gapId": "operator:cachefile.layer_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00311", + "gapId": "operator:cachefile.layer_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00312", + "gapId": "operator:cachefile.layer_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00313", + "gapId": "operator:cachefile.open", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00314", + "gapId": "operator:cachefile.reload", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00315", + "gapId": "operator:camera.preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00316", + "gapId": "operator:camera.safe_areas_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00317", + "gapId": "operator:clip.add_marker", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00318", + "gapId": "operator:clip.add_marker_at_click", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00319", + "gapId": "operator:clip.add_marker_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00320", + "gapId": "operator:clip.add_marker_slide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00321", + "gapId": "operator:clip.apply_solution_scale", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00322", + "gapId": "operator:clip.average_tracks", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00323", + "gapId": "operator:clip.bundles_to_mesh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00324", + "gapId": "operator:clip.camera_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00325", + "gapId": "operator:clip.change_frame", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00326", + "gapId": "operator:clip.clean_tracks", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00327", + "gapId": "operator:clip.clear_solution", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00328", + "gapId": "operator:clip.clear_track_path", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00329", + "gapId": "operator:clip.constraint_to_fcurve", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00330", + "gapId": "operator:clip.copy_tracks", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00331", + "gapId": "operator:clip.create_plane_track", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00332", + "gapId": "operator:clip.cursor_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00333", + "gapId": "operator:clip.delete_marker", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00334", + "gapId": "operator:clip.delete_proxy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00335", + "gapId": "operator:clip.delete_track", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00336", + "gapId": "operator:clip.detect_features", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00337", + "gapId": "operator:clip.disable_markers", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00338", + "gapId": "operator:clip.dopesheet_select_channel", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00339", + "gapId": "operator:clip.dopesheet_view_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00340", + "gapId": "operator:clip.filter_tracks", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00341", + "gapId": "operator:clip.frame_jump", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00342", + "gapId": "operator:clip.graph_center_current_frame", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00343", + "gapId": "operator:clip.graph_delete_curve", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00344", + "gapId": "operator:clip.graph_delete_knot", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00345", + "gapId": "operator:clip.graph_disable_markers", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00346", + "gapId": "operator:clip.graph_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00347", + "gapId": "operator:clip.graph_select_all_markers", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00348", + "gapId": "operator:clip.graph_select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00349", + "gapId": "operator:clip.graph_view_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00350", + "gapId": "operator:clip.hide_tracks", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00351", + "gapId": "operator:clip.hide_tracks_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00352", + "gapId": "operator:clip.join_tracks", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00353", + "gapId": "operator:clip.keyframe_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00354", + "gapId": "operator:clip.keyframe_insert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00355", + "gapId": "operator:clip.lock_selection_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00356", + "gapId": "operator:clip.lock_tracks", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00357", + "gapId": "operator:clip.mode_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00358", + "gapId": "operator:clip.new_image_from_plane_marker", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00359", + "gapId": "operator:clip.open", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00360", + "gapId": "operator:clip.paste_tracks", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00361", + "gapId": "operator:clip.prefetch", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00362", + "gapId": "operator:clip.rebuild_proxy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00363", + "gapId": "operator:clip.refine_markers", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00364", + "gapId": "operator:clip.reload", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00365", + "gapId": "operator:clip.select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00366", + "gapId": "operator:clip.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00367", + "gapId": "operator:clip.select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00368", + "gapId": "operator:clip.select_circle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00369", + "gapId": "operator:clip.select_grouped", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00370", + "gapId": "operator:clip.select_lasso", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00371", + "gapId": "operator:clip.set_active_clip", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00372", + "gapId": "operator:clip.set_axis", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00373", + "gapId": "operator:clip.set_origin", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00374", + "gapId": "operator:clip.set_plane", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00375", + "gapId": "operator:clip.set_scale", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00376", + "gapId": "operator:clip.set_scene_frames", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00377", + "gapId": "operator:clip.set_solution_scale", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00378", + "gapId": "operator:clip.set_solver_keyframe", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00379", + "gapId": "operator:clip.set_viewport_background", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00380", + "gapId": "operator:clip.setup_tracking_scene", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00381", + "gapId": "operator:clip.slide_marker", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00382", + "gapId": "operator:clip.slide_plane_marker", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00383", + "gapId": "operator:clip.solve_camera", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00384", + "gapId": "operator:clip.stabilize_2d_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00385", + "gapId": "operator:clip.stabilize_2d_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00386", + "gapId": "operator:clip.stabilize_2d_rotation_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00387", + "gapId": "operator:clip.stabilize_2d_rotation_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00388", + "gapId": "operator:clip.stabilize_2d_rotation_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00389", + "gapId": "operator:clip.stabilize_2d_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00390", + "gapId": "operator:clip.track_color_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00391", + "gapId": "operator:clip.track_copy_color", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00392", + "gapId": "operator:clip.track_markers", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00393", + "gapId": "operator:clip.track_settings_as_default", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00394", + "gapId": "operator:clip.track_settings_to_track", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00395", + "gapId": "operator:clip.track_to_empty", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00396", + "gapId": "operator:clip.tracking_object_new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00397", + "gapId": "operator:clip.tracking_object_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00398", + "gapId": "operator:clip.tracking_settings_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00399", + "gapId": "operator:clip.update_image_from_plane_marker", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00400", + "gapId": "operator:clip.view_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00401", + "gapId": "operator:clip.view_center_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00402", + "gapId": "operator:clip.view_ndof", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00403", + "gapId": "operator:clip.view_pan", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00404", + "gapId": "operator:clip.view_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00405", + "gapId": "operator:clip.view_zoom", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00406", + "gapId": "operator:clip.view_zoom_in", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00407", + "gapId": "operator:clip.view_zoom_out", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00408", + "gapId": "operator:clip.view_zoom_ratio", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00409", + "gapId": "operator:cloth.preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00410", + "gapId": "operator:collection.create", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00411", + "gapId": "operator:collection.export_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00412", + "gapId": "operator:collection.exporter_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00413", + "gapId": "operator:collection.exporter_export", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00414", + "gapId": "operator:collection.exporter_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00415", + "gapId": "operator:collection.exporter_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00416", + "gapId": "operator:collection.importer_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00417", + "gapId": "operator:collection.importer_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00418", + "gapId": "operator:collection.objects_add_active", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00419", + "gapId": "operator:collection.objects_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00420", + "gapId": "operator:collection.objects_remove_active", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00421", + "gapId": "operator:collection.objects_remove_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00422", + "gapId": "operator:console.autocomplete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00423", + "gapId": "operator:console.banner", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00424", + "gapId": "operator:console.clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00425", + "gapId": "operator:console.clear_line", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00426", + "gapId": "operator:console.copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00427", + "gapId": "operator:console.copy_as_script", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00428", + "gapId": "operator:console.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00429", + "gapId": "operator:console.execute", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00430", + "gapId": "operator:console.history_append", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00431", + "gapId": "operator:console.history_cycle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00432", + "gapId": "operator:console.indent", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00433", + "gapId": "operator:console.indent_or_autocomplete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00434", + "gapId": "operator:console.insert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00435", + "gapId": "operator:console.language", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00436", + "gapId": "operator:console.move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00437", + "gapId": "operator:console.paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00438", + "gapId": "operator:console.scrollback_append", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00439", + "gapId": "operator:console.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00440", + "gapId": "operator:console.select_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00441", + "gapId": "operator:console.select_word", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00442", + "gapId": "operator:console.unindent", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00443", + "gapId": "operator:constraint.add_target", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00444", + "gapId": "operator:constraint.apply", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00445", + "gapId": "operator:constraint.childof_clear_inverse", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00446", + "gapId": "operator:constraint.childof_set_inverse", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00447", + "gapId": "operator:constraint.copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00448", + "gapId": "operator:constraint.copy_to_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00449", + "gapId": "operator:constraint.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00450", + "gapId": "operator:constraint.disable_keep_transform", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00451", + "gapId": "operator:constraint.followpath_path_animate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00452", + "gapId": "operator:constraint.limitdistance_reset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00453", + "gapId": "operator:constraint.move_down", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00454", + "gapId": "operator:constraint.move_to_index", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00455", + "gapId": "operator:constraint.move_up", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00456", + "gapId": "operator:constraint.normalize_target_weights", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00457", + "gapId": "operator:constraint.objectsolver_clear_inverse", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00458", + "gapId": "operator:constraint.objectsolver_set_inverse", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00459", + "gapId": "operator:constraint.remove_target", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00460", + "gapId": "operator:constraint.stretchto_reset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00461", + "gapId": "operator:curve.cyclic_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00462", + "gapId": "operator:curve.de_select_first", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00463", + "gapId": "operator:curve.de_select_last", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00464", + "gapId": "operator:curve.decimate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00465", + "gapId": "operator:curve.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00466", + "gapId": "operator:curve.dissolve_verts", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00467", + "gapId": "operator:curve.draw", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00468", + "gapId": "operator:curve.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00469", + "gapId": "operator:curve.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00470", + "gapId": "operator:curve.extrude", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00471", + "gapId": "operator:curve.extrude_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00472", + "gapId": "operator:curve.handle_type_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00473", + "gapId": "operator:curve.hide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00474", + "gapId": "operator:curve.make_segment", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00475", + "gapId": "operator:curve.match_texture_space", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00476", + "gapId": "operator:curve.normals_make_consistent", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00477", + "gapId": "operator:curve.pen", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00478", + "gapId": "operator:curve.primitive_bezier_circle_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00479", + "gapId": "operator:curve.primitive_bezier_curve_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00480", + "gapId": "operator:curve.primitive_nurbs_circle_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00481", + "gapId": "operator:curve.primitive_nurbs_curve_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00482", + "gapId": "operator:curve.primitive_nurbs_path_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00483", + "gapId": "operator:curve.radius_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00484", + "gapId": "operator:curve.reveal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00485", + "gapId": "operator:curve.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00486", + "gapId": "operator:curve.select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00487", + "gapId": "operator:curve.select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00488", + "gapId": "operator:curve.select_linked_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00489", + "gapId": "operator:curve.select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00490", + "gapId": "operator:curve.select_next", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00491", + "gapId": "operator:curve.select_nth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00492", + "gapId": "operator:curve.select_previous", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00493", + "gapId": "operator:curve.select_random", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00494", + "gapId": "operator:curve.select_row", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00495", + "gapId": "operator:curve.select_similar", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00496", + "gapId": "operator:curve.separate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00497", + "gapId": "operator:curve.shade_flat", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00498", + "gapId": "operator:curve.shade_smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00499", + "gapId": "operator:curve.shortest_path_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00500", + "gapId": "operator:curve.smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00501", + "gapId": "operator:curve.smooth_radius", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00502", + "gapId": "operator:curve.smooth_tilt", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00503", + "gapId": "operator:curve.smooth_weight", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00504", + "gapId": "operator:curve.spin", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00505", + "gapId": "operator:curve.spline_type_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00506", + "gapId": "operator:curve.spline_weight_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00507", + "gapId": "operator:curve.split", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00508", + "gapId": "operator:curve.subdivide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00509", + "gapId": "operator:curve.switch_direction", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00510", + "gapId": "operator:curve.tilt_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00511", + "gapId": "operator:curve.vertex_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00512", + "gapId": "operator:curves.add_bezier", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00513", + "gapId": "operator:curves.add_circle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00514", + "gapId": "operator:curves.attribute_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00515", + "gapId": "operator:curves.convert_from_particle_system", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00516", + "gapId": "operator:curves.convert_to_particle_system", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00517", + "gapId": "operator:curves.curve_type_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00518", + "gapId": "operator:curves.cyclic_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00519", + "gapId": "operator:curves.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00520", + "gapId": "operator:curves.draw", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00521", + "gapId": "operator:curves.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00522", + "gapId": "operator:curves.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00523", + "gapId": "operator:curves.extrude", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00524", + "gapId": "operator:curves.extrude_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00525", + "gapId": "operator:curves.handle_type_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00526", + "gapId": "operator:curves.pen", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00527", + "gapId": "operator:curves.sculptmode_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00528", + "gapId": "operator:curves.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00529", + "gapId": "operator:curves.select_ends", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00530", + "gapId": "operator:curves.select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00531", + "gapId": "operator:curves.select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00532", + "gapId": "operator:curves.select_linked_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00533", + "gapId": "operator:curves.select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00534", + "gapId": "operator:curves.select_random", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00535", + "gapId": "operator:curves.separate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00536", + "gapId": "operator:curves.set_selection_domain", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00537", + "gapId": "operator:curves.snap_curves_to_surface", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00538", + "gapId": "operator:curves.split", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00539", + "gapId": "operator:curves.subdivide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00540", + "gapId": "operator:curves.surface_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00541", + "gapId": "operator:curves.switch_direction", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00542", + "gapId": "operator:curves.tilt_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00543", + "gapId": "operator:cycles.denoise_animation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00544", + "gapId": "operator:cycles.merge_images", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00545", + "gapId": "operator:cycles.use_shading_nodes", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00546", + "gapId": "operator:dpaint.bake", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00547", + "gapId": "operator:dpaint.output_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00548", + "gapId": "operator:dpaint.surface_slot_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00549", + "gapId": "operator:dpaint.surface_slot_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00550", + "gapId": "operator:dpaint.type_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00551", + "gapId": "operator:ed.flush_edits", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00552", + "gapId": "operator:ed.lib_id_fake_user_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00553", + "gapId": "operator:ed.lib_id_generate_preview", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00554", + "gapId": "operator:ed.lib_id_generate_preview_from_object", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00555", + "gapId": "operator:ed.lib_id_load_custom_preview", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00556", + "gapId": "operator:ed.lib_id_override_editable_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00557", + "gapId": "operator:ed.lib_id_remove_preview", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00558", + "gapId": "operator:ed.lib_id_unlink", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00559", + "gapId": "operator:ed.redo", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00560", + "gapId": "operator:ed.undo", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00561", + "gapId": "operator:ed.undo_history", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00562", + "gapId": "operator:ed.undo_push", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00563", + "gapId": "operator:ed.undo_redo", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00564", + "gapId": "operator:export_anim.bvh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00565", + "gapId": "operator:export_scene.fbx", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00566", + "gapId": "operator:export_scene.gltf", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00567", + "gapId": "operator:extensions.package_disable", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00568", + "gapId": "operator:extensions.package_install", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00569", + "gapId": "operator:extensions.package_install_files", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00570", + "gapId": "operator:extensions.package_install_marked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00571", + "gapId": "operator:extensions.package_mark_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00572", + "gapId": "operator:extensions.package_mark_clear_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00573", + "gapId": "operator:extensions.package_mark_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00574", + "gapId": "operator:extensions.package_mark_set_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00575", + "gapId": "operator:extensions.package_obsolete_marked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00576", + "gapId": "operator:extensions.package_show_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00577", + "gapId": "operator:extensions.package_show_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00578", + "gapId": "operator:extensions.package_show_settings", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00579", + "gapId": "operator:extensions.package_theme_disable", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00580", + "gapId": "operator:extensions.package_theme_enable", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00581", + "gapId": "operator:extensions.package_uninstall", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00582", + "gapId": "operator:extensions.package_uninstall_marked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00583", + "gapId": "operator:extensions.package_uninstall_system", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00584", + "gapId": "operator:extensions.package_upgrade_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00585", + "gapId": "operator:extensions.repo_enable_from_drop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00586", + "gapId": "operator:extensions.repo_lock_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00587", + "gapId": "operator:extensions.repo_refresh_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00588", + "gapId": "operator:extensions.repo_sync", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00589", + "gapId": "operator:extensions.repo_sync_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00590", + "gapId": "operator:extensions.repo_unlock", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00591", + "gapId": "operator:extensions.repo_unlock_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00592", + "gapId": "operator:extensions.status_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00593", + "gapId": "operator:extensions.status_clear_errors", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00594", + "gapId": "operator:extensions.userpref_allow_online", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00595", + "gapId": "operator:extensions.userpref_allow_online_popup", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00596", + "gapId": "operator:extensions.userpref_show_for_update", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00597", + "gapId": "operator:extensions.userpref_show_online", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00598", + "gapId": "operator:extensions.userpref_tags_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00599", + "gapId": "operator:file.autopack_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00600", + "gapId": "operator:file.bookmark_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00601", + "gapId": "operator:file.bookmark_cleanup", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00602", + "gapId": "operator:file.bookmark_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00603", + "gapId": "operator:file.bookmark_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00604", + "gapId": "operator:file.cancel", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00605", + "gapId": "operator:file.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00606", + "gapId": "operator:file.directory_new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00607", + "gapId": "operator:file.edit_directory_path", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00608", + "gapId": "operator:file.execute", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00609", + "gapId": "operator:file.external_operation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00610", + "gapId": "operator:file.filenum", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00611", + "gapId": "operator:file.filepath_drop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00612", + "gapId": "operator:file.find_missing_files", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00613", + "gapId": "operator:file.hidedot", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00614", + "gapId": "operator:file.highlight", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00615", + "gapId": "operator:file.make_paths_absolute", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00616", + "gapId": "operator:file.make_paths_relative", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00617", + "gapId": "operator:file.mouse_execute", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00618", + "gapId": "operator:file.next", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00619", + "gapId": "operator:file.pack_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00620", + "gapId": "operator:file.pack_libraries", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00621", + "gapId": "operator:file.parent", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00622", + "gapId": "operator:file.previous", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00623", + "gapId": "operator:file.refresh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00624", + "gapId": "operator:file.rename", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00625", + "gapId": "operator:file.report_missing_files", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00626", + "gapId": "operator:file.reset_recent", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00627", + "gapId": "operator:file.select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00628", + "gapId": "operator:file.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00629", + "gapId": "operator:file.select_bookmark", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00630", + "gapId": "operator:file.select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00631", + "gapId": "operator:file.select_walk", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00632", + "gapId": "operator:file.smoothscroll", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00633", + "gapId": "operator:file.sort_column_ui_context", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00634", + "gapId": "operator:file.start_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00635", + "gapId": "operator:file.unpack_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00636", + "gapId": "operator:file.unpack_item", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00637", + "gapId": "operator:file.unpack_libraries", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00638", + "gapId": "operator:file.view_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00639", + "gapId": "operator:fluid.bake_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00640", + "gapId": "operator:fluid.bake_data", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00641", + "gapId": "operator:fluid.bake_guides", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00642", + "gapId": "operator:fluid.bake_mesh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00643", + "gapId": "operator:fluid.bake_noise", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00644", + "gapId": "operator:fluid.bake_particles", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00645", + "gapId": "operator:fluid.free_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00646", + "gapId": "operator:fluid.free_data", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00647", + "gapId": "operator:fluid.free_guides", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00648", + "gapId": "operator:fluid.free_mesh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00649", + "gapId": "operator:fluid.free_noise", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00650", + "gapId": "operator:fluid.free_particles", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00651", + "gapId": "operator:fluid.pause_bake", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00652", + "gapId": "operator:fluid.preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00653", + "gapId": "operator:font.case_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00654", + "gapId": "operator:font.case_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00655", + "gapId": "operator:font.change_character", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00656", + "gapId": "operator:font.change_spacing", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00657", + "gapId": "operator:font.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00658", + "gapId": "operator:font.line_break", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00659", + "gapId": "operator:font.move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00660", + "gapId": "operator:font.move_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00661", + "gapId": "operator:font.open", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00662", + "gapId": "operator:font.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00663", + "gapId": "operator:font.select_word", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00664", + "gapId": "operator:font.selection_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00665", + "gapId": "operator:font.style_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00666", + "gapId": "operator:font.style_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00667", + "gapId": "operator:font.text_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00668", + "gapId": "operator:font.text_cut", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00669", + "gapId": "operator:font.text_insert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00670", + "gapId": "operator:font.text_insert_unicode", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00671", + "gapId": "operator:font.text_paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00672", + "gapId": "operator:font.text_paste_from_file", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00673", + "gapId": "operator:font.textbox_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00674", + "gapId": "operator:font.textbox_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00675", + "gapId": "operator:font.unlink", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00676", + "gapId": "operator:geometry.attribute_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00677", + "gapId": "operator:geometry.attribute_convert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00678", + "gapId": "operator:geometry.attribute_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00679", + "gapId": "operator:geometry.color_attribute_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00680", + "gapId": "operator:geometry.color_attribute_convert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00681", + "gapId": "operator:geometry.color_attribute_duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00682", + "gapId": "operator:geometry.color_attribute_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00683", + "gapId": "operator:geometry.color_attribute_render_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00684", + "gapId": "operator:geometry.geometry_randomization", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00685", + "gapId": "operator:gizmogroup.gizmo_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00686", + "gapId": "operator:gizmogroup.gizmo_tweak", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00687", + "gapId": "operator:gpencil.annotate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00688", + "gapId": "operator:gpencil.annotation_active_frame_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00689", + "gapId": "operator:gpencil.annotation_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00690", + "gapId": "operator:gpencil.data_unlink", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00691", + "gapId": "operator:gpencil.layer_annotation_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00692", + "gapId": "operator:gpencil.layer_annotation_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00693", + "gapId": "operator:gpencil.layer_annotation_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00694", + "gapId": "operator:graph.bake_keys", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00695", + "gapId": "operator:graph.blend_offset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00696", + "gapId": "operator:graph.blend_to_default", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00697", + "gapId": "operator:graph.blend_to_ease", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00698", + "gapId": "operator:graph.blend_to_neighbor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00699", + "gapId": "operator:graph.breakdown", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00700", + "gapId": "operator:graph.butterworth_smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00701", + "gapId": "operator:graph.clean", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00702", + "gapId": "operator:graph.click_insert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00703", + "gapId": "operator:graph.clickselect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00704", + "gapId": "operator:graph.copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00705", + "gapId": "operator:graph.cursor_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00706", + "gapId": "operator:graph.decimate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00707", + "gapId": "operator:graph.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00708", + "gapId": "operator:graph.driver_delete_invalid", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00709", + "gapId": "operator:graph.driver_variables_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00710", + "gapId": "operator:graph.driver_variables_paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00711", + "gapId": "operator:graph.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00712", + "gapId": "operator:graph.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00713", + "gapId": "operator:graph.ease", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00714", + "gapId": "operator:graph.easing_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00715", + "gapId": "operator:graph.equalize_handles", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00716", + "gapId": "operator:graph.euler_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00717", + "gapId": "operator:graph.extrapolation_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00718", + "gapId": "operator:graph.fmodifier_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00719", + "gapId": "operator:graph.fmodifier_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00720", + "gapId": "operator:graph.fmodifier_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00721", + "gapId": "operator:graph.fmodifier_paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00722", + "gapId": "operator:graph.frame_jump", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00723", + "gapId": "operator:graph.gaussian_smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00724", + "gapId": "operator:graph.ghost_curves_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00725", + "gapId": "operator:graph.ghost_curves_create", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00726", + "gapId": "operator:graph.handle_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00727", + "gapId": "operator:graph.hide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00728", + "gapId": "operator:graph.interpolation_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00729", + "gapId": "operator:graph.keyframe_insert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00730", + "gapId": "operator:graph.keyframe_jump", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00731", + "gapId": "operator:graph.keys_to_samples", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00732", + "gapId": "operator:graph.local_view", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00733", + "gapId": "operator:graph.match_slope", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00734", + "gapId": "operator:graph.mirror", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00735", + "gapId": "operator:graph.paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00736", + "gapId": "operator:graph.previewrange_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00737", + "gapId": "operator:graph.push_pull", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00738", + "gapId": "operator:graph.reveal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00739", + "gapId": "operator:graph.samples_to_keys", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00740", + "gapId": "operator:graph.scale_average", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00741", + "gapId": "operator:graph.scale_from_neighbor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00742", + "gapId": "operator:graph.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00743", + "gapId": "operator:graph.select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00744", + "gapId": "operator:graph.select_circle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00745", + "gapId": "operator:graph.select_column", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00746", + "gapId": "operator:graph.select_key_handles", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00747", + "gapId": "operator:graph.select_lasso", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00748", + "gapId": "operator:graph.select_leftright", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00749", + "gapId": "operator:graph.select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00750", + "gapId": "operator:graph.select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00751", + "gapId": "operator:graph.select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00752", + "gapId": "operator:graph.shear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00753", + "gapId": "operator:graph.smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00754", + "gapId": "operator:graph.snap", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00755", + "gapId": "operator:graph.snap_cursor_value", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00756", + "gapId": "operator:graph.sound_to_samples", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00757", + "gapId": "operator:graph.time_offset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00758", + "gapId": "operator:graph.view_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00759", + "gapId": "operator:graph.view_frame", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00760", + "gapId": "operator:graph.view_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00761", + "gapId": "operator:grease_pencil.active_frame_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00762", + "gapId": "operator:grease_pencil.bake_grease_pencil_animation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00763", + "gapId": "operator:grease_pencil.brush_stroke", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00764", + "gapId": "operator:grease_pencil.caps_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00765", + "gapId": "operator:grease_pencil.clean_loose", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00766", + "gapId": "operator:grease_pencil.convert_curve_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00767", + "gapId": "operator:grease_pencil.copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00768", + "gapId": "operator:grease_pencil.cyclical_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00769", + "gapId": "operator:grease_pencil.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00770", + "gapId": "operator:grease_pencil.delete_breakdown", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00771", + "gapId": "operator:grease_pencil.delete_frame", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00772", + "gapId": "operator:grease_pencil.dissolve", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00773", + "gapId": "operator:grease_pencil.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00774", + "gapId": "operator:grease_pencil.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00775", + "gapId": "operator:grease_pencil.erase_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00776", + "gapId": "operator:grease_pencil.erase_lasso", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00777", + "gapId": "operator:grease_pencil.extrude", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00778", + "gapId": "operator:grease_pencil.extrude_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00779", + "gapId": "operator:grease_pencil.fill", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00780", + "gapId": "operator:grease_pencil.frame_clean_duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00781", + "gapId": "operator:grease_pencil.frame_duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00782", + "gapId": "operator:grease_pencil.insert_blank_frame", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00783", + "gapId": "operator:grease_pencil.interpolate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00784", + "gapId": "operator:grease_pencil.interpolate_sequence", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00785", + "gapId": "operator:grease_pencil.join_fills", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00786", + "gapId": "operator:grease_pencil.join_selection", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00787", + "gapId": "operator:grease_pencil.layer_active", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00788", + "gapId": "operator:grease_pencil.layer_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00789", + "gapId": "operator:grease_pencil.layer_duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00790", + "gapId": "operator:grease_pencil.layer_duplicate_object", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00791", + "gapId": "operator:grease_pencil.layer_group_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00792", + "gapId": "operator:grease_pencil.layer_group_color_tag", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00793", + "gapId": "operator:grease_pencil.layer_group_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00794", + "gapId": "operator:grease_pencil.layer_hide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00795", + "gapId": "operator:grease_pencil.layer_isolate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00796", + "gapId": "operator:grease_pencil.layer_lock_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00797", + "gapId": "operator:grease_pencil.layer_mask_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00798", + "gapId": "operator:grease_pencil.layer_mask_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00799", + "gapId": "operator:grease_pencil.layer_mask_reorder", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00800", + "gapId": "operator:grease_pencil.layer_merge", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00801", + "gapId": "operator:grease_pencil.layer_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00802", + "gapId": "operator:grease_pencil.layer_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00803", + "gapId": "operator:grease_pencil.layer_reveal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00804", + "gapId": "operator:grease_pencil.material_copy_to_object", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00805", + "gapId": "operator:grease_pencil.material_hide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00806", + "gapId": "operator:grease_pencil.material_isolate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00807", + "gapId": "operator:grease_pencil.material_lock_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00808", + "gapId": "operator:grease_pencil.material_lock_unselected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00809", + "gapId": "operator:grease_pencil.material_lock_unused", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00810", + "gapId": "operator:grease_pencil.material_reveal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00811", + "gapId": "operator:grease_pencil.material_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00812", + "gapId": "operator:grease_pencil.material_unlock_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00813", + "gapId": "operator:grease_pencil.move_to_layer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00814", + "gapId": "operator:grease_pencil.outline", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00815", + "gapId": "operator:grease_pencil.paintmode_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00816", + "gapId": "operator:grease_pencil.paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00817", + "gapId": "operator:grease_pencil.pen", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00818", + "gapId": "operator:grease_pencil.primitive_arc", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00819", + "gapId": "operator:grease_pencil.primitive_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00820", + "gapId": "operator:grease_pencil.primitive_circle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00821", + "gapId": "operator:grease_pencil.primitive_curve", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00822", + "gapId": "operator:grease_pencil.primitive_line", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00823", + "gapId": "operator:grease_pencil.primitive_polyline", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00824", + "gapId": "operator:grease_pencil.relative_layer_mask_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00825", + "gapId": "operator:grease_pencil.remove_fill_guides", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00826", + "gapId": "operator:grease_pencil.reorder", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00827", + "gapId": "operator:grease_pencil.reproject", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00828", + "gapId": "operator:grease_pencil.reset_uvs", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00829", + "gapId": "operator:grease_pencil.sculpt_paint", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00830", + "gapId": "operator:grease_pencil.sculptmode_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00831", + "gapId": "operator:grease_pencil.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00832", + "gapId": "operator:grease_pencil.select_alternate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00833", + "gapId": "operator:grease_pencil.select_by_stroke_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00834", + "gapId": "operator:grease_pencil.select_ends", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00835", + "gapId": "operator:grease_pencil.select_fill", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00836", + "gapId": "operator:grease_pencil.select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00837", + "gapId": "operator:grease_pencil.select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00838", + "gapId": "operator:grease_pencil.select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00839", + "gapId": "operator:grease_pencil.select_random", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00840", + "gapId": "operator:grease_pencil.select_similar", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00841", + "gapId": "operator:grease_pencil.separate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00842", + "gapId": "operator:grease_pencil.separate_fills", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00843", + "gapId": "operator:grease_pencil.set_active_material", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00844", + "gapId": "operator:grease_pencil.set_corner_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00845", + "gapId": "operator:grease_pencil.set_curve_resolution", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00846", + "gapId": "operator:grease_pencil.set_curve_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00847", + "gapId": "operator:grease_pencil.set_handle_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00848", + "gapId": "operator:grease_pencil.set_material", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00849", + "gapId": "operator:grease_pencil.set_selection_mode", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00850", + "gapId": "operator:grease_pencil.set_start_point", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00851", + "gapId": "operator:grease_pencil.set_stroke_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00852", + "gapId": "operator:grease_pencil.set_uniform_opacity", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00853", + "gapId": "operator:grease_pencil.set_uniform_thickness", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00854", + "gapId": "operator:grease_pencil.snap_cursor_to_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00855", + "gapId": "operator:grease_pencil.snap_to_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00856", + "gapId": "operator:grease_pencil.snap_to_grid", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00857", + "gapId": "operator:grease_pencil.stroke_material_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00858", + "gapId": "operator:grease_pencil.stroke_merge_by_distance", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00859", + "gapId": "operator:grease_pencil.stroke_reset_vertex_color", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00860", + "gapId": "operator:grease_pencil.stroke_simplify", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00861", + "gapId": "operator:grease_pencil.stroke_smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00862", + "gapId": "operator:grease_pencil.stroke_split", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00863", + "gapId": "operator:grease_pencil.stroke_subdivide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00864", + "gapId": "operator:grease_pencil.stroke_subdivide_smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00865", + "gapId": "operator:grease_pencil.stroke_switch_direction", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00866", + "gapId": "operator:grease_pencil.stroke_trim", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00867", + "gapId": "operator:grease_pencil.texture_gradient", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00868", + "gapId": "operator:grease_pencil.trace_image", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00869", + "gapId": "operator:grease_pencil.vertex_brush_stroke", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00870", + "gapId": "operator:grease_pencil.vertex_color_brightness_contrast", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00871", + "gapId": "operator:grease_pencil.vertex_color_hsv", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00872", + "gapId": "operator:grease_pencil.vertex_color_invert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00873", + "gapId": "operator:grease_pencil.vertex_color_levels", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00874", + "gapId": "operator:grease_pencil.vertex_color_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00875", + "gapId": "operator:grease_pencil.vertex_group_normalize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00876", + "gapId": "operator:grease_pencil.vertex_group_normalize_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00877", + "gapId": "operator:grease_pencil.vertex_group_smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00878", + "gapId": "operator:grease_pencil.vertexmode_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00879", + "gapId": "operator:grease_pencil.weight_brush_stroke", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00880", + "gapId": "operator:grease_pencil.weight_invert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00881", + "gapId": "operator:grease_pencil.weight_sample", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00882", + "gapId": "operator:grease_pencil.weight_toggle_direction", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00883", + "gapId": "operator:grease_pencil.weightmode_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00884", + "gapId": "operator:image.add_render_slot", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00885", + "gapId": "operator:image.change_frame", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00886", + "gapId": "operator:image.clear_render_border", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00887", + "gapId": "operator:image.clear_render_slot", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00888", + "gapId": "operator:image.clipboard_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00889", + "gapId": "operator:image.clipboard_paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00890", + "gapId": "operator:image.convert_to_mesh_plane", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00891", + "gapId": "operator:image.curves_point_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00892", + "gapId": "operator:image.cycle_render_slot", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00893", + "gapId": "operator:image.external_edit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00894", + "gapId": "operator:image.file_browse", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00895", + "gapId": "operator:image.flip", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00896", + "gapId": "operator:image.import_as_mesh_planes", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00897", + "gapId": "operator:image.invert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00898", + "gapId": "operator:image.match_movie_length", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00899", + "gapId": "operator:image.new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00900", + "gapId": "operator:image.open", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00901", + "gapId": "operator:image.open_images", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00902", + "gapId": "operator:image.pack", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00903", + "gapId": "operator:image.project_apply", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00904", + "gapId": "operator:image.project_edit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00905", + "gapId": "operator:image.read_viewlayers", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00906", + "gapId": "operator:image.reload", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00907", + "gapId": "operator:image.remove_render_slot", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00908", + "gapId": "operator:image.render_border", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00909", + "gapId": "operator:image.replace", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00910", + "gapId": "operator:image.resize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00911", + "gapId": "operator:image.rotate_orthogonal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00912", + "gapId": "operator:image.sample", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00913", + "gapId": "operator:image.sample_line", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00914", + "gapId": "operator:image.save", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00915", + "gapId": "operator:image.save_all_modified", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00916", + "gapId": "operator:image.save_as", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00917", + "gapId": "operator:image.save_sequence", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00918", + "gapId": "operator:image.tile_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00919", + "gapId": "operator:image.tile_fill", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00920", + "gapId": "operator:image.tile_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00921", + "gapId": "operator:image.unpack", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00922", + "gapId": "operator:image.view_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00923", + "gapId": "operator:image.view_center_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00924", + "gapId": "operator:image.view_cursor_center", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00925", + "gapId": "operator:image.view_ndof", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00926", + "gapId": "operator:image.view_pan", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00927", + "gapId": "operator:image.view_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00928", + "gapId": "operator:image.view_zoom", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00929", + "gapId": "operator:image.view_zoom_border", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00930", + "gapId": "operator:image.view_zoom_in", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00931", + "gapId": "operator:image.view_zoom_out", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00932", + "gapId": "operator:image.view_zoom_ratio", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00933", + "gapId": "operator:import_anim.bvh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00934", + "gapId": "operator:import_curve.svg", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00935", + "gapId": "operator:import_scene.fbx", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00936", + "gapId": "operator:import_scene.gltf", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00937", + "gapId": "operator:info.report_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00938", + "gapId": "operator:info.report_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00939", + "gapId": "operator:info.report_replay", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00940", + "gapId": "operator:info.reports_display_update", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00941", + "gapId": "operator:info.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00942", + "gapId": "operator:info.select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00943", + "gapId": "operator:info.select_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00944", + "gapId": "operator:lattice.flip", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00945", + "gapId": "operator:lattice.make_regular", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00946", + "gapId": "operator:lattice.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00947", + "gapId": "operator:lattice.select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00948", + "gapId": "operator:lattice.select_mirror", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00949", + "gapId": "operator:lattice.select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00950", + "gapId": "operator:lattice.select_random", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00951", + "gapId": "operator:lattice.select_ungrouped", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00952", + "gapId": "operator:marker.add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00953", + "gapId": "operator:marker.camera_bind", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00954", + "gapId": "operator:marker.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00955", + "gapId": "operator:marker.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00956", + "gapId": "operator:marker.make_links_scene", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00957", + "gapId": "operator:marker.move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00958", + "gapId": "operator:marker.rename", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00959", + "gapId": "operator:marker.select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00960", + "gapId": "operator:marker.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00961", + "gapId": "operator:marker.select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00962", + "gapId": "operator:marker.select_leftright", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00963", + "gapId": "operator:mask.add_feather_vertex", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00964", + "gapId": "operator:mask.add_feather_vertex_slide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00965", + "gapId": "operator:mask.add_vertex", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00966", + "gapId": "operator:mask.add_vertex_slide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00967", + "gapId": "operator:mask.copy_splines", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00968", + "gapId": "operator:mask.cyclic_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00969", + "gapId": "operator:mask.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00970", + "gapId": "operator:mask.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00971", + "gapId": "operator:mask.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00972", + "gapId": "operator:mask.feather_weight_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00973", + "gapId": "operator:mask.handle_type_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00974", + "gapId": "operator:mask.hide_view_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00975", + "gapId": "operator:mask.hide_view_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00976", + "gapId": "operator:mask.layer_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00977", + "gapId": "operator:mask.layer_new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00978", + "gapId": "operator:mask.layer_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00979", + "gapId": "operator:mask.move_to_layer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00980", + "gapId": "operator:mask.new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00981", + "gapId": "operator:mask.normals_make_consistent", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00982", + "gapId": "operator:mask.parent_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00983", + "gapId": "operator:mask.parent_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00984", + "gapId": "operator:mask.paste_splines", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00985", + "gapId": "operator:mask.primitive_circle_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00986", + "gapId": "operator:mask.primitive_square_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00987", + "gapId": "operator:mask.select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00988", + "gapId": "operator:mask.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00989", + "gapId": "operator:mask.select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00990", + "gapId": "operator:mask.select_circle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00991", + "gapId": "operator:mask.select_lasso", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00992", + "gapId": "operator:mask.select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00993", + "gapId": "operator:mask.select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00994", + "gapId": "operator:mask.select_linked_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00995", + "gapId": "operator:mask.select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00996", + "gapId": "operator:mask.shape_key_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00997", + "gapId": "operator:mask.shape_key_feather_reset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00998", + "gapId": "operator:mask.shape_key_insert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00999", + "gapId": "operator:mask.shape_key_rekey", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01000", + "gapId": "operator:mask.slide_point", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01001", + "gapId": "operator:mask.slide_spline_curvature", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01002", + "gapId": "operator:mask.switch_direction", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01003", + "gapId": "operator:material.copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01004", + "gapId": "operator:material.new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01005", + "gapId": "operator:material.paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01006", + "gapId": "operator:mball.delete_metaelems", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01007", + "gapId": "operator:mball.duplicate_metaelems", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01008", + "gapId": "operator:mball.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01009", + "gapId": "operator:mball.hide_metaelems", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01010", + "gapId": "operator:mball.reveal_metaelems", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01011", + "gapId": "operator:mball.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01012", + "gapId": "operator:mball.select_random_metaelems", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01013", + "gapId": "operator:mball.select_similar", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01014", + "gapId": "operator:mesh.attribute_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01015", + "gapId": "operator:mesh.average_normals", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01016", + "gapId": "operator:mesh.beautify_fill", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01017", + "gapId": "operator:mesh.bevel", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01018", + "gapId": "operator:mesh.bisect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01019", + "gapId": "operator:mesh.blend_from_shape", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01020", + "gapId": "operator:mesh.bridge_edge_loops", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01021", + "gapId": "operator:mesh.circularize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01022", + "gapId": "operator:mesh.colors_reverse", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01023", + "gapId": "operator:mesh.colors_rotate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01024", + "gapId": "operator:mesh.convex_hull", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01025", + "gapId": "operator:mesh.customdata_custom_splitnormals_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01026", + "gapId": "operator:mesh.customdata_custom_splitnormals_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01027", + "gapId": "operator:mesh.customdata_face_sets_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01028", + "gapId": "operator:mesh.customdata_mask_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01029", + "gapId": "operator:mesh.customdata_skin_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01030", + "gapId": "operator:mesh.customdata_skin_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01031", + "gapId": "operator:mesh.decimate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01032", + "gapId": "operator:mesh.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01033", + "gapId": "operator:mesh.delete_edgeloop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01034", + "gapId": "operator:mesh.delete_loose", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01035", + "gapId": "operator:mesh.dissolve_degenerate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01036", + "gapId": "operator:mesh.dissolve_edges", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01037", + "gapId": "operator:mesh.dissolve_faces", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01038", + "gapId": "operator:mesh.dissolve_limited", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01039", + "gapId": "operator:mesh.dissolve_mode", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01040", + "gapId": "operator:mesh.dissolve_verts", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01041", + "gapId": "operator:mesh.dupli_extrude_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01042", + "gapId": "operator:mesh.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01043", + "gapId": "operator:mesh.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01044", + "gapId": "operator:mesh.edge_collapse", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01045", + "gapId": "operator:mesh.edge_face_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01046", + "gapId": "operator:mesh.edge_rotate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01047", + "gapId": "operator:mesh.edge_split", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01048", + "gapId": "operator:mesh.edgering_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01049", + "gapId": "operator:mesh.edges_select_sharp", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01050", + "gapId": "operator:mesh.extrude_context", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01051", + "gapId": "operator:mesh.extrude_context_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01052", + "gapId": "operator:mesh.extrude_edges_indiv", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01053", + "gapId": "operator:mesh.extrude_edges_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01054", + "gapId": "operator:mesh.extrude_faces_indiv", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01055", + "gapId": "operator:mesh.extrude_faces_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01056", + "gapId": "operator:mesh.extrude_manifold", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01057", + "gapId": "operator:mesh.extrude_region", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01058", + "gapId": "operator:mesh.extrude_region_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01059", + "gapId": "operator:mesh.extrude_region_shrink_fatten", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01060", + "gapId": "operator:mesh.extrude_repeat", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01061", + "gapId": "operator:mesh.extrude_vertices_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01062", + "gapId": "operator:mesh.extrude_verts_indiv", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01063", + "gapId": "operator:mesh.face_make_planar", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01064", + "gapId": "operator:mesh.face_split_by_edges", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01065", + "gapId": "operator:mesh.faces_select_linked_flat", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01066", + "gapId": "operator:mesh.faces_shade_flat", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01067", + "gapId": "operator:mesh.faces_shade_smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01068", + "gapId": "operator:mesh.fill", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01069", + "gapId": "operator:mesh.fill_grid", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01070", + "gapId": "operator:mesh.fill_holes", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01071", + "gapId": "operator:mesh.flatten", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01072", + "gapId": "operator:mesh.flip_normals", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01073", + "gapId": "operator:mesh.flip_quad_tessellation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01074", + "gapId": "operator:mesh.hide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01075", + "gapId": "operator:mesh.inset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01076", + "gapId": "operator:mesh.intersect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01077", + "gapId": "operator:mesh.intersect_boolean", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01078", + "gapId": "operator:mesh.knife_project", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01079", + "gapId": "operator:mesh.knife_tool", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01080", + "gapId": "operator:mesh.loop_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01081", + "gapId": "operator:mesh.loop_to_region", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01082", + "gapId": "operator:mesh.loopcut", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01083", + "gapId": "operator:mesh.loopcut_slide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01084", + "gapId": "operator:mesh.mark_freestyle_edge", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01085", + "gapId": "operator:mesh.mark_freestyle_face", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01086", + "gapId": "operator:mesh.mark_seam", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01087", + "gapId": "operator:mesh.mark_sharp", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01088", + "gapId": "operator:mesh.merge", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01089", + "gapId": "operator:mesh.merge_normals", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01090", + "gapId": "operator:mesh.mod_weighted_strength", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01091", + "gapId": "operator:mesh.normals_make_consistent", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01092", + "gapId": "operator:mesh.normals_tools", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01093", + "gapId": "operator:mesh.offset_edge_loops", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01094", + "gapId": "operator:mesh.offset_edge_loops_slide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01095", + "gapId": "operator:mesh.point_normals", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01096", + "gapId": "operator:mesh.poke", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01097", + "gapId": "operator:mesh.polybuild_delete_at_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01098", + "gapId": "operator:mesh.polybuild_dissolve_at_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01099", + "gapId": "operator:mesh.polybuild_extrude_at_cursor_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01100", + "gapId": "operator:mesh.polybuild_face_at_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01101", + "gapId": "operator:mesh.polybuild_face_at_cursor_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01102", + "gapId": "operator:mesh.polybuild_split_at_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01103", + "gapId": "operator:mesh.polybuild_split_at_cursor_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01104", + "gapId": "operator:mesh.polybuild_transform_at_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01105", + "gapId": "operator:mesh.polybuild_transform_at_cursor_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01106", + "gapId": "operator:mesh.primitive_circle_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01107", + "gapId": "operator:mesh.primitive_cone_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01108", + "gapId": "operator:mesh.primitive_cube_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01109", + "gapId": "operator:mesh.primitive_cube_add_gizmo", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01110", + "gapId": "operator:mesh.primitive_cylinder_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01111", + "gapId": "operator:mesh.primitive_grid_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01112", + "gapId": "operator:mesh.primitive_ico_sphere_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01113", + "gapId": "operator:mesh.primitive_monkey_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01114", + "gapId": "operator:mesh.primitive_plane_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01115", + "gapId": "operator:mesh.primitive_torus_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01116", + "gapId": "operator:mesh.primitive_uv_sphere_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01117", + "gapId": "operator:mesh.quads_convert_to_tris", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01118", + "gapId": "operator:mesh.region_to_loop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01119", + "gapId": "operator:mesh.remove_doubles", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01120", + "gapId": "operator:mesh.reorder_vertices_spatial", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01121", + "gapId": "operator:mesh.reveal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01122", + "gapId": "operator:mesh.rip", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01123", + "gapId": "operator:mesh.rip_edge", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01124", + "gapId": "operator:mesh.rip_edge_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01125", + "gapId": "operator:mesh.rip_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01126", + "gapId": "operator:mesh.screw", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01127", + "gapId": "operator:mesh.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01128", + "gapId": "operator:mesh.select_axis", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01129", + "gapId": "operator:mesh.select_boundary_loop_multi", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01130", + "gapId": "operator:mesh.select_by_attribute", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01131", + "gapId": "operator:mesh.select_by_pole_count", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01132", + "gapId": "operator:mesh.select_edge_loop_multi", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01133", + "gapId": "operator:mesh.select_edge_ring_multi", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01134", + "gapId": "operator:mesh.select_face_by_sides", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01135", + "gapId": "operator:mesh.select_interior_faces", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01136", + "gapId": "operator:mesh.select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01137", + "gapId": "operator:mesh.select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01138", + "gapId": "operator:mesh.select_linked_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01139", + "gapId": "operator:mesh.select_loose", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01140", + "gapId": "operator:mesh.select_mirror", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01141", + "gapId": "operator:mesh.select_mode", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01142", + "gapId": "operator:mesh.select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01143", + "gapId": "operator:mesh.select_next_item", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01144", + "gapId": "operator:mesh.select_non_manifold", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01145", + "gapId": "operator:mesh.select_nth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01146", + "gapId": "operator:mesh.select_prev_item", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01147", + "gapId": "operator:mesh.select_random", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01148", + "gapId": "operator:mesh.select_similar", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01149", + "gapId": "operator:mesh.select_similar_region", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01150", + "gapId": "operator:mesh.select_ungrouped", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01151", + "gapId": "operator:mesh.separate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01152", + "gapId": "operator:mesh.set_normals_from_faces", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01153", + "gapId": "operator:mesh.set_sharpness_by_angle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01154", + "gapId": "operator:mesh.shape_propagate_to_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01155", + "gapId": "operator:mesh.shortest_path_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01156", + "gapId": "operator:mesh.shortest_path_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01157", + "gapId": "operator:mesh.smooth_normals", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01158", + "gapId": "operator:mesh.solidify", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01159", + "gapId": "operator:mesh.sort_elements", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01160", + "gapId": "operator:mesh.space_edge_loops_evenly", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01161", + "gapId": "operator:mesh.spin", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01162", + "gapId": "operator:mesh.split", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01163", + "gapId": "operator:mesh.split_normals", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01164", + "gapId": "operator:mesh.subdivide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01165", + "gapId": "operator:mesh.subdivide_edgering", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01166", + "gapId": "operator:mesh.symmetrize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01167", + "gapId": "operator:mesh.symmetry_snap", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01168", + "gapId": "operator:mesh.tris_convert_to_quads", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01169", + "gapId": "operator:mesh.unsubdivide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01170", + "gapId": "operator:mesh.uv_texture_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01171", + "gapId": "operator:mesh.uv_texture_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01172", + "gapId": "operator:mesh.uvs_reverse", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01173", + "gapId": "operator:mesh.uvs_rotate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01174", + "gapId": "operator:mesh.vert_connect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01175", + "gapId": "operator:mesh.vert_connect_concave", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01176", + "gapId": "operator:mesh.vert_connect_nonplanar", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01177", + "gapId": "operator:mesh.vert_connect_path", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01178", + "gapId": "operator:mesh.vertices_smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01179", + "gapId": "operator:mesh.vertices_smooth_laplacian", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01180", + "gapId": "operator:mesh.wireframe", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01181", + "gapId": "operator:nla.action_pushdown", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01182", + "gapId": "operator:nla.action_sync_length", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01183", + "gapId": "operator:nla.action_unlink", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01184", + "gapId": "operator:nla.actionclip_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01185", + "gapId": "operator:nla.apply_scale", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01186", + "gapId": "operator:nla.bake", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01187", + "gapId": "operator:nla.channels_click", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01188", + "gapId": "operator:nla.clear_scale", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01189", + "gapId": "operator:nla.click_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01190", + "gapId": "operator:nla.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01191", + "gapId": "operator:nla.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01192", + "gapId": "operator:nla.duplicate_linked_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01193", + "gapId": "operator:nla.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01194", + "gapId": "operator:nla.fmodifier_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01195", + "gapId": "operator:nla.fmodifier_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01196", + "gapId": "operator:nla.fmodifier_paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01197", + "gapId": "operator:nla.make_single_user", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01198", + "gapId": "operator:nla.meta_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01199", + "gapId": "operator:nla.meta_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01200", + "gapId": "operator:nla.move_down", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01201", + "gapId": "operator:nla.move_up", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01202", + "gapId": "operator:nla.mute_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01203", + "gapId": "operator:nla.previewrange_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01204", + "gapId": "operator:nla.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01205", + "gapId": "operator:nla.select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01206", + "gapId": "operator:nla.select_leftright", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01207", + "gapId": "operator:nla.selected_objects_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01208", + "gapId": "operator:nla.snap", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01209", + "gapId": "operator:nla.soundclip_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01210", + "gapId": "operator:nla.split", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01211", + "gapId": "operator:nla.swap", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01212", + "gapId": "operator:nla.tracks_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01213", + "gapId": "operator:nla.tracks_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01214", + "gapId": "operator:nla.transition_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01215", + "gapId": "operator:nla.tweakmode_enter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01216", + "gapId": "operator:nla.tweakmode_exit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01217", + "gapId": "operator:nla.view_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01218", + "gapId": "operator:nla.view_frame", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01219", + "gapId": "operator:nla.view_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01220", + "gapId": "operator:node.activate_viewer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01221", + "gapId": "operator:node.add_closure_zone", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01222", + "gapId": "operator:node.add_collection", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01223", + "gapId": "operator:node.add_color", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01224", + "gapId": "operator:node.add_empty_group", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01225", + "gapId": "operator:node.add_foreach_geometry_element_zone", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01226", + "gapId": "operator:node.add_group", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01227", + "gapId": "operator:node.add_group_asset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01228", + "gapId": "operator:node.add_group_input_node", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01229", + "gapId": "operator:node.add_image", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01230", + "gapId": "operator:node.add_import_node", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01231", + "gapId": "operator:node.add_mask", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01232", + "gapId": "operator:node.add_material", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01233", + "gapId": "operator:node.add_node", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01234", + "gapId": "operator:node.add_object", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01235", + "gapId": "operator:node.add_repeat_zone", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01236", + "gapId": "operator:node.add_reroute", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01237", + "gapId": "operator:node.add_simulation_zone", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01238", + "gapId": "operator:node.add_typed_bundle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01239", + "gapId": "operator:node.add_zone", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01240", + "gapId": "operator:node.attach", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01241", + "gapId": "operator:node.backimage_fit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01242", + "gapId": "operator:node.backimage_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01243", + "gapId": "operator:node.backimage_sample", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01244", + "gapId": "operator:node.backimage_zoom", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01245", + "gapId": "operator:node.bake_node_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01246", + "gapId": "operator:node.bake_node_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01247", + "gapId": "operator:node.bake_node_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01248", + "gapId": "operator:node.capture_attribute_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01249", + "gapId": "operator:node.capture_attribute_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01250", + "gapId": "operator:node.capture_attribute_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01251", + "gapId": "operator:node.clear_viewer_border", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01252", + "gapId": "operator:node.clipboard_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01253", + "gapId": "operator:node.clipboard_paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01254", + "gapId": "operator:node.closure_input_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01255", + "gapId": "operator:node.closure_input_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01256", + "gapId": "operator:node.closure_input_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01257", + "gapId": "operator:node.closure_output_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01258", + "gapId": "operator:node.closure_output_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01259", + "gapId": "operator:node.closure_output_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01260", + "gapId": "operator:node.closure_to_list_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01261", + "gapId": "operator:node.closure_to_list_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01262", + "gapId": "operator:node.closure_to_list_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01263", + "gapId": "operator:node.collapse_hide_unused_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01264", + "gapId": "operator:node.combine_bundle_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01265", + "gapId": "operator:node.combine_bundle_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01266", + "gapId": "operator:node.combine_bundle_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01267", + "gapId": "operator:node.connect_to_output", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01268", + "gapId": "operator:node.cryptomatte_layer_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01269", + "gapId": "operator:node.cryptomatte_layer_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01270", + "gapId": "operator:node.deactivate_viewer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01271", + "gapId": "operator:node.default_group_width_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01272", + "gapId": "operator:node.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01273", + "gapId": "operator:node.delete_copy_reconnect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01274", + "gapId": "operator:node.delete_reconnect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01275", + "gapId": "operator:node.detach", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01276", + "gapId": "operator:node.detach_translate_attach", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01277", + "gapId": "operator:node.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01278", + "gapId": "operator:node.duplicate_compositing_modifier_node_group", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01279", + "gapId": "operator:node.duplicate_compositing_node_group", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01280", + "gapId": "operator:node.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01281", + "gapId": "operator:node.duplicate_move_keep_inputs", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01282", + "gapId": "operator:node.duplicate_move_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01283", + "gapId": "operator:node.enum_definition_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01284", + "gapId": "operator:node.enum_definition_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01285", + "gapId": "operator:node.enum_definition_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01286", + "gapId": "operator:node.evaluate_closure_input_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01287", + "gapId": "operator:node.evaluate_closure_input_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01288", + "gapId": "operator:node.evaluate_closure_input_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01289", + "gapId": "operator:node.evaluate_closure_output_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01290", + "gapId": "operator:node.evaluate_closure_output_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01291", + "gapId": "operator:node.evaluate_closure_output_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01292", + "gapId": "operator:node.field_to_grid_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01293", + "gapId": "operator:node.field_to_grid_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01294", + "gapId": "operator:node.field_to_grid_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01295", + "gapId": "operator:node.field_to_list_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01296", + "gapId": "operator:node.field_to_list_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01297", + "gapId": "operator:node.field_to_list_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01298", + "gapId": "operator:node.file_output_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01299", + "gapId": "operator:node.file_output_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01300", + "gapId": "operator:node.file_output_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01301", + "gapId": "operator:node.find_node", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01302", + "gapId": "operator:node.foreach_geometry_element_zone_generation_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01303", + "gapId": "operator:node.foreach_geometry_element_zone_generation_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01304", + "gapId": "operator:node.foreach_geometry_element_zone_generation_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01305", + "gapId": "operator:node.foreach_geometry_element_zone_input_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01306", + "gapId": "operator:node.foreach_geometry_element_zone_input_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01307", + "gapId": "operator:node.foreach_geometry_element_zone_input_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01308", + "gapId": "operator:node.foreach_geometry_element_zone_main_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01309", + "gapId": "operator:node.foreach_geometry_element_zone_main_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01310", + "gapId": "operator:node.foreach_geometry_element_zone_main_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01311", + "gapId": "operator:node.format_string_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01312", + "gapId": "operator:node.format_string_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01313", + "gapId": "operator:node.format_string_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01314", + "gapId": "operator:node.geometry_nodes_viewer_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01315", + "gapId": "operator:node.geometry_nodes_viewer_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01316", + "gapId": "operator:node.geometry_nodes_viewer_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01317", + "gapId": "operator:node.gltf_settings_node_operator", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01318", + "gapId": "operator:node.group_edit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01319", + "gapId": "operator:node.group_enter_exit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01320", + "gapId": "operator:node.group_insert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01321", + "gapId": "operator:node.group_make", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01322", + "gapId": "operator:node.group_separate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01323", + "gapId": "operator:node.group_ungroup", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01324", + "gapId": "operator:node.hide_socket_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01325", + "gapId": "operator:node.hide_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01326", + "gapId": "operator:node.index_switch_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01327", + "gapId": "operator:node.index_switch_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01328", + "gapId": "operator:node.index_switch_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01329", + "gapId": "operator:node.insert_offset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01330", + "gapId": "operator:node.interface_item_duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01331", + "gapId": "operator:node.interface_item_make_panel_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01332", + "gapId": "operator:node.interface_item_new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01333", + "gapId": "operator:node.interface_item_new_panel_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01334", + "gapId": "operator:node.interface_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01335", + "gapId": "operator:node.interface_item_unlink_panel_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01336", + "gapId": "operator:node.join", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01337", + "gapId": "operator:node.join_named", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01338", + "gapId": "operator:node.join_nodes", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01339", + "gapId": "operator:node.link", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01340", + "gapId": "operator:node.link_drag_operation_test", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01341", + "gapId": "operator:node.link_make", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01342", + "gapId": "operator:node.link_viewer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01343", + "gapId": "operator:node.links_cut", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01344", + "gapId": "operator:node.links_detach", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01345", + "gapId": "operator:node.links_mute", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01346", + "gapId": "operator:node.move_detach_links", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01347", + "gapId": "operator:node.move_detach_links_release", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01348", + "gapId": "operator:node.mute_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01349", + "gapId": "operator:node.new_compositing_node_group", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01350", + "gapId": "operator:node.new_compositor_sequencer_node_group", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01351", + "gapId": "operator:node.new_geometry_node_group_assign", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01352", + "gapId": "operator:node.new_geometry_node_group_tool", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01353", + "gapId": "operator:node.new_geometry_nodes_modifier", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01354", + "gapId": "operator:node.new_node_tree", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01355", + "gapId": "operator:node.node_color_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01356", + "gapId": "operator:node.node_copy_color", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01357", + "gapId": "operator:node.options_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01358", + "gapId": "operator:node.parent_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01359", + "gapId": "operator:node.preview_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01360", + "gapId": "operator:node.read_viewlayers", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01361", + "gapId": "operator:node.render_changed", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01362", + "gapId": "operator:node.repeat_zone_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01363", + "gapId": "operator:node.repeat_zone_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01364", + "gapId": "operator:node.repeat_zone_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01365", + "gapId": "operator:node.resize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01366", + "gapId": "operator:node.sample_attribute_items_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01367", + "gapId": "operator:node.sample_attribute_items_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01368", + "gapId": "operator:node.sample_attribute_items_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01369", + "gapId": "operator:node.select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01370", + "gapId": "operator:node.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01371", + "gapId": "operator:node.select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01372", + "gapId": "operator:node.select_circle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01373", + "gapId": "operator:node.select_grouped", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01374", + "gapId": "operator:node.select_lasso", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01375", + "gapId": "operator:node.select_link_viewer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01376", + "gapId": "operator:node.select_linked_from", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01377", + "gapId": "operator:node.select_linked_to", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01378", + "gapId": "operator:node.select_same_type_step", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01379", + "gapId": "operator:node.separate_bundle_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01380", + "gapId": "operator:node.separate_bundle_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01381", + "gapId": "operator:node.separate_bundle_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01382", + "gapId": "operator:node.shader_script_update", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01383", + "gapId": "operator:node.simulation_zone_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01384", + "gapId": "operator:node.simulation_zone_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01385", + "gapId": "operator:node.simulation_zone_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01386", + "gapId": "operator:node.sockets_sync", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01387", + "gapId": "operator:node.swap_empty_group", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01388", + "gapId": "operator:node.swap_group_asset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01389", + "gapId": "operator:node.swap_node", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01390", + "gapId": "operator:node.swap_typed_bundle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01391", + "gapId": "operator:node.swap_zone", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01392", + "gapId": "operator:node.test_inlining_shader_nodes", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01393", + "gapId": "operator:node.toggle_viewer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01394", + "gapId": "operator:node.translate_attach", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01395", + "gapId": "operator:node.translate_attach_remove_on_cancel", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01396", + "gapId": "operator:node.tree_path_parent", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01397", + "gapId": "operator:node.view_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01398", + "gapId": "operator:node.view_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01399", + "gapId": "operator:node.viewer_border", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01400", + "gapId": "operator:node.viewer_shortcut_get", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01401", + "gapId": "operator:node.viewer_shortcut_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01402", + "gapId": "operator:object.add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01403", + "gapId": "operator:object.add_modifier_menu", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01404", + "gapId": "operator:object.add_named", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01405", + "gapId": "operator:object.align", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01406", + "gapId": "operator:object.anim_transforms_to_deltas", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01407", + "gapId": "operator:object.armature_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01408", + "gapId": "operator:object.assign_property_defaults", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01409", + "gapId": "operator:object.bake", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01410", + "gapId": "operator:object.bake_image", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01411", + "gapId": "operator:object.camera_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01412", + "gapId": "operator:object.camera_custom_update", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01413", + "gapId": "operator:object.clear_override_library", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01414", + "gapId": "operator:object.collection_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01415", + "gapId": "operator:object.collection_external_asset_drop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01416", + "gapId": "operator:object.collection_instance_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01417", + "gapId": "operator:object.collection_link", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01418", + "gapId": "operator:object.collection_objects_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01419", + "gapId": "operator:object.collection_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01420", + "gapId": "operator:object.collection_unlink", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01421", + "gapId": "operator:object.constraint_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01422", + "gapId": "operator:object.constraint_add_with_targets", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01423", + "gapId": "operator:object.constraints_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01424", + "gapId": "operator:object.constraints_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01425", + "gapId": "operator:object.convert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01426", + "gapId": "operator:object.copy_global_transform", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01427", + "gapId": "operator:object.copy_relative_transform", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01428", + "gapId": "operator:object.correctivesmooth_bind", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01429", + "gapId": "operator:object.curves_empty_hair_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01430", + "gapId": "operator:object.curves_random_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01431", + "gapId": "operator:object.data_instance_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01432", + "gapId": "operator:object.data_transfer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01433", + "gapId": "operator:object.datalayout_transfer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01434", + "gapId": "operator:object.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01435", + "gapId": "operator:object.delete_fix_to_camera_keys", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01436", + "gapId": "operator:object.drop_geometry_nodes", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01437", + "gapId": "operator:object.drop_named_material", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01438", + "gapId": "operator:object.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01439", + "gapId": "operator:object.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01440", + "gapId": "operator:object.duplicate_move_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01441", + "gapId": "operator:object.duplicates_make_real", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01442", + "gapId": "operator:object.editmode_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01443", + "gapId": "operator:object.effector_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01444", + "gapId": "operator:object.empty_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01445", + "gapId": "operator:object.empty_image_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01446", + "gapId": "operator:object.explode_refresh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01447", + "gapId": "operator:object.fix_to_camera", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01448", + "gapId": "operator:object.forcefield_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01449", + "gapId": "operator:object.geometry_node_bake_delete_single", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01450", + "gapId": "operator:object.geometry_node_bake_pack_single", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01451", + "gapId": "operator:object.geometry_node_bake_single", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01452", + "gapId": "operator:object.geometry_node_bake_unpack_single", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01453", + "gapId": "operator:object.geometry_node_tree_copy_assign", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01454", + "gapId": "operator:object.geometry_nodes_input_attribute_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01455", + "gapId": "operator:object.geometry_nodes_move_to_nodes", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01456", + "gapId": "operator:object.grease_pencil_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01457", + "gapId": "operator:object.grease_pencil_dash_modifier_segment_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01458", + "gapId": "operator:object.grease_pencil_dash_modifier_segment_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01459", + "gapId": "operator:object.grease_pencil_dash_modifier_segment_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01460", + "gapId": "operator:object.grease_pencil_time_modifier_segment_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01461", + "gapId": "operator:object.grease_pencil_time_modifier_segment_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01462", + "gapId": "operator:object.grease_pencil_time_modifier_segment_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01463", + "gapId": "operator:object.hide_collection", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01464", + "gapId": "operator:object.hide_render_clear_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01465", + "gapId": "operator:object.hide_view_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01466", + "gapId": "operator:object.hide_view_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01467", + "gapId": "operator:object.hook_add_newob", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01468", + "gapId": "operator:object.hook_add_selob", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01469", + "gapId": "operator:object.hook_assign", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01470", + "gapId": "operator:object.hook_recenter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01471", + "gapId": "operator:object.hook_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01472", + "gapId": "operator:object.hook_reset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01473", + "gapId": "operator:object.hook_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01474", + "gapId": "operator:object.instance_offset_from_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01475", + "gapId": "operator:object.instance_offset_from_object", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01476", + "gapId": "operator:object.instance_offset_to_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01477", + "gapId": "operator:object.isolate_type_render", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01478", + "gapId": "operator:object.join", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01479", + "gapId": "operator:object.join_shapes", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01480", + "gapId": "operator:object.join_uvs", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01481", + "gapId": "operator:object.laplaciandeform_bind", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01482", + "gapId": "operator:object.lattice_add_to_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01483", + "gapId": "operator:object.light_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01484", + "gapId": "operator:object.light_linking_blocker_collection_new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01485", + "gapId": "operator:object.light_linking_blockers_link", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01486", + "gapId": "operator:object.light_linking_blockers_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01487", + "gapId": "operator:object.light_linking_receiver_collection_new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01488", + "gapId": "operator:object.light_linking_receivers_link", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01489", + "gapId": "operator:object.light_linking_receivers_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01490", + "gapId": "operator:object.light_linking_unlink_from_collection", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01491", + "gapId": "operator:object.lightprobe_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01492", + "gapId": "operator:object.lightprobe_cache_bake", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01493", + "gapId": "operator:object.lightprobe_cache_free", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01494", + "gapId": "operator:object.lineart_bake_strokes", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01495", + "gapId": "operator:object.lineart_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01496", + "gapId": "operator:object.link_to_collection", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01497", + "gapId": "operator:object.location_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01498", + "gapId": "operator:object.make_dupli_face", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01499", + "gapId": "operator:object.make_links_data", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01500", + "gapId": "operator:object.make_links_scene", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01501", + "gapId": "operator:object.make_local", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01502", + "gapId": "operator:object.make_override_library", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01503", + "gapId": "operator:object.make_single_user", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01504", + "gapId": "operator:object.material_slot_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01505", + "gapId": "operator:object.material_slot_assign", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01506", + "gapId": "operator:object.material_slot_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01507", + "gapId": "operator:object.material_slot_deselect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01508", + "gapId": "operator:object.material_slot_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01509", + "gapId": "operator:object.material_slot_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01510", + "gapId": "operator:object.material_slot_remove_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01511", + "gapId": "operator:object.material_slot_remove_unused", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01512", + "gapId": "operator:object.material_slot_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01513", + "gapId": "operator:object.meshdeform_bind", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01514", + "gapId": "operator:object.metaball_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01515", + "gapId": "operator:object.mode_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01516", + "gapId": "operator:object.mode_set_with_submode", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01517", + "gapId": "operator:object.modifier_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01518", + "gapId": "operator:object.modifier_add_node_group", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01519", + "gapId": "operator:object.modifier_apply", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01520", + "gapId": "operator:object.modifier_apply_as_shapekey", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01521", + "gapId": "operator:object.modifier_convert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01522", + "gapId": "operator:object.modifier_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01523", + "gapId": "operator:object.modifier_copy_to_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01524", + "gapId": "operator:object.modifier_move_down", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01525", + "gapId": "operator:object.modifier_move_to_index", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01526", + "gapId": "operator:object.modifier_move_up", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01527", + "gapId": "operator:object.modifier_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01528", + "gapId": "operator:object.modifier_set_active", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01529", + "gapId": "operator:object.modifiers_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01530", + "gapId": "operator:object.modifiers_copy_to_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01531", + "gapId": "operator:object.move_to_collection", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01532", + "gapId": "operator:object.multires_base_apply", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01533", + "gapId": "operator:object.multires_external_pack", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01534", + "gapId": "operator:object.multires_external_save", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01535", + "gapId": "operator:object.multires_higher_levels_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01536", + "gapId": "operator:object.multires_rebuild_subdiv", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01537", + "gapId": "operator:object.multires_reshape", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01538", + "gapId": "operator:object.multires_subdivide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01539", + "gapId": "operator:object.multires_unsubdivide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01540", + "gapId": "operator:object.ocean_bake", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01541", + "gapId": "operator:object.origin_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01542", + "gapId": "operator:object.origin_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01543", + "gapId": "operator:object.parent_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01544", + "gapId": "operator:object.parent_inverse_apply", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01545", + "gapId": "operator:object.parent_no_inverse_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01546", + "gapId": "operator:object.parent_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01547", + "gapId": "operator:object.particle_system_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01548", + "gapId": "operator:object.particle_system_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01549", + "gapId": "operator:object.paste_transform", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01550", + "gapId": "operator:object.paths_calculate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01551", + "gapId": "operator:object.paths_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01552", + "gapId": "operator:object.paths_update", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01553", + "gapId": "operator:object.paths_update_visible", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01554", + "gapId": "operator:object.pointcloud_random_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01555", + "gapId": "operator:object.posemode_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01556", + "gapId": "operator:object.quadriflow_remesh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01557", + "gapId": "operator:object.quick_explode", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01558", + "gapId": "operator:object.quick_fur", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01559", + "gapId": "operator:object.quick_liquid", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01560", + "gapId": "operator:object.quick_smoke", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01561", + "gapId": "operator:object.randomize_transform", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01562", + "gapId": "operator:object.reset_override_library", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01563", + "gapId": "operator:object.rotation_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01564", + "gapId": "operator:object.scale_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01565", + "gapId": "operator:object.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01566", + "gapId": "operator:object.select_by_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01567", + "gapId": "operator:object.select_camera", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01568", + "gapId": "operator:object.select_grouped", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01569", + "gapId": "operator:object.select_hierarchy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01570", + "gapId": "operator:object.select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01571", + "gapId": "operator:object.select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01572", + "gapId": "operator:object.select_mirror", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01573", + "gapId": "operator:object.select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01574", + "gapId": "operator:object.select_pattern", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01575", + "gapId": "operator:object.select_random", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01576", + "gapId": "operator:object.select_same_collection", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01577", + "gapId": "operator:object.shade_auto_smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01578", + "gapId": "operator:object.shade_flat", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01579", + "gapId": "operator:object.shade_smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01580", + "gapId": "operator:object.shade_smooth_by_angle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01581", + "gapId": "operator:object.shaderfx_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01582", + "gapId": "operator:object.shaderfx_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01583", + "gapId": "operator:object.shaderfx_move_down", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01584", + "gapId": "operator:object.shaderfx_move_to_index", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01585", + "gapId": "operator:object.shaderfx_move_up", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01586", + "gapId": "operator:object.shaderfx_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01587", + "gapId": "operator:object.shape_key_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01588", + "gapId": "operator:object.shape_key_apply_to_basis", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01589", + "gapId": "operator:object.shape_key_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01590", + "gapId": "operator:object.shape_key_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01591", + "gapId": "operator:object.shape_key_lock", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01592", + "gapId": "operator:object.shape_key_make_basis", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01593", + "gapId": "operator:object.shape_key_mirror", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01594", + "gapId": "operator:object.shape_key_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01595", + "gapId": "operator:object.shape_key_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01596", + "gapId": "operator:object.shape_key_retime", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01597", + "gapId": "operator:object.shape_key_transfer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01598", + "gapId": "operator:object.simulation_nodes_cache_bake", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01599", + "gapId": "operator:object.simulation_nodes_cache_calculate_to_frame", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01600", + "gapId": "operator:object.simulation_nodes_cache_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01601", + "gapId": "operator:object.skin_armature_create", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01602", + "gapId": "operator:object.skin_loose_mark_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01603", + "gapId": "operator:object.skin_radii_equalize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01604", + "gapId": "operator:object.skin_root_mark", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01605", + "gapId": "operator:object.speaker_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01606", + "gapId": "operator:object.subdivision_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01607", + "gapId": "operator:object.surfacedeform_bind", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01608", + "gapId": "operator:object.text_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01609", + "gapId": "operator:object.track_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01610", + "gapId": "operator:object.track_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01611", + "gapId": "operator:object.transfer_mode", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01612", + "gapId": "operator:object.transform_apply", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01613", + "gapId": "operator:object.transform_axis_target", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01614", + "gapId": "operator:object.transform_to_mouse", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01615", + "gapId": "operator:object.transforms_to_deltas", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01616", + "gapId": "operator:object.unlink_data", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01617", + "gapId": "operator:object.update_shapes", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01618", + "gapId": "operator:object.vertex_group_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01619", + "gapId": "operator:object.vertex_group_assign", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01620", + "gapId": "operator:object.vertex_group_assign_new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01621", + "gapId": "operator:object.vertex_group_clean", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01622", + "gapId": "operator:object.vertex_group_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01623", + "gapId": "operator:object.vertex_group_copy_to_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01624", + "gapId": "operator:object.vertex_group_deselect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01625", + "gapId": "operator:object.vertex_group_invert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01626", + "gapId": "operator:object.vertex_group_levels", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01627", + "gapId": "operator:object.vertex_group_limit_total", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01628", + "gapId": "operator:object.vertex_group_lock", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01629", + "gapId": "operator:object.vertex_group_mirror", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01630", + "gapId": "operator:object.vertex_group_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01631", + "gapId": "operator:object.vertex_group_normalize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01632", + "gapId": "operator:object.vertex_group_normalize_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01633", + "gapId": "operator:object.vertex_group_quantize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01634", + "gapId": "operator:object.vertex_group_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01635", + "gapId": "operator:object.vertex_group_remove_from", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01636", + "gapId": "operator:object.vertex_group_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01637", + "gapId": "operator:object.vertex_group_set_active", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01638", + "gapId": "operator:object.vertex_group_smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01639", + "gapId": "operator:object.vertex_group_sort", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01640", + "gapId": "operator:object.vertex_parent_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01641", + "gapId": "operator:object.vertex_weight_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01642", + "gapId": "operator:object.vertex_weight_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01643", + "gapId": "operator:object.vertex_weight_normalize_active_vertex", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01644", + "gapId": "operator:object.vertex_weight_paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01645", + "gapId": "operator:object.vertex_weight_set_active", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01646", + "gapId": "operator:object.visual_geometry_to_objects", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01647", + "gapId": "operator:object.visual_transform_apply", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01648", + "gapId": "operator:object.volume_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01649", + "gapId": "operator:object.volume_import", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01650", + "gapId": "operator:object.voxel_remesh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01651", + "gapId": "operator:object.voxel_size_edit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01652", + "gapId": "operator:outliner.action_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01653", + "gapId": "operator:outliner.animdata_operation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01654", + "gapId": "operator:outliner.clear_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01655", + "gapId": "operator:outliner.collection_color_tag_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01656", + "gapId": "operator:outliner.collection_disable", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01657", + "gapId": "operator:outliner.collection_disable_render", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01658", + "gapId": "operator:outliner.collection_drop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01659", + "gapId": "operator:outliner.collection_duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01660", + "gapId": "operator:outliner.collection_duplicate_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01661", + "gapId": "operator:outliner.collection_enable", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01662", + "gapId": "operator:outliner.collection_enable_render", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01663", + "gapId": "operator:outliner.collection_exclude_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01664", + "gapId": "operator:outliner.collection_exclude_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01665", + "gapId": "operator:outliner.collection_hide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01666", + "gapId": "operator:outliner.collection_hide_inside", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01667", + "gapId": "operator:outliner.collection_hierarchy_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01668", + "gapId": "operator:outliner.collection_holdout_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01669", + "gapId": "operator:outliner.collection_holdout_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01670", + "gapId": "operator:outliner.collection_indirect_only_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01671", + "gapId": "operator:outliner.collection_indirect_only_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01672", + "gapId": "operator:outliner.collection_instance", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01673", + "gapId": "operator:outliner.collection_isolate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01674", + "gapId": "operator:outliner.collection_link", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01675", + "gapId": "operator:outliner.collection_new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01676", + "gapId": "operator:outliner.collection_objects_deselect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01677", + "gapId": "operator:outliner.collection_objects_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01678", + "gapId": "operator:outliner.collection_show", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01679", + "gapId": "operator:outliner.collection_show_inside", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01680", + "gapId": "operator:outliner.constraint_operation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01681", + "gapId": "operator:outliner.data_operation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01682", + "gapId": "operator:outliner.datastack_drop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01683", + "gapId": "operator:outliner.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01684", + "gapId": "operator:outliner.drivers_add_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01685", + "gapId": "operator:outliner.drivers_delete_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01686", + "gapId": "operator:outliner.expanded_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01687", + "gapId": "operator:outliner.hide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01688", + "gapId": "operator:outliner.highlight_update", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01689", + "gapId": "operator:outliner.id_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01690", + "gapId": "operator:outliner.id_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01691", + "gapId": "operator:outliner.id_linked_relocate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01692", + "gapId": "operator:outliner.id_operation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01693", + "gapId": "operator:outliner.id_paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01694", + "gapId": "operator:outliner.id_remap", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01695", + "gapId": "operator:outliner.item_activate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01696", + "gapId": "operator:outliner.item_drag_drop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01697", + "gapId": "operator:outliner.item_openclose", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01698", + "gapId": "operator:outliner.item_rename", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01699", + "gapId": "operator:outliner.keyingset_add_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01700", + "gapId": "operator:outliner.keyingset_remove_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01701", + "gapId": "operator:outliner.lib_operation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01702", + "gapId": "operator:outliner.lib_relocate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01703", + "gapId": "operator:outliner.liboverride_operation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01704", + "gapId": "operator:outliner.liboverride_property_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01705", + "gapId": "operator:outliner.liboverride_troubleshoot_operation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01706", + "gapId": "operator:outliner.material_drop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01707", + "gapId": "operator:outliner.modifier_operation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01708", + "gapId": "operator:outliner.object_operation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01709", + "gapId": "operator:outliner.operation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01710", + "gapId": "operator:outliner.orphans_manage", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01711", + "gapId": "operator:outliner.orphans_purge", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01712", + "gapId": "operator:outliner.parent_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01713", + "gapId": "operator:outliner.parent_drop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01714", + "gapId": "operator:outliner.scene_drop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01715", + "gapId": "operator:outliner.scene_operation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01716", + "gapId": "operator:outliner.scroll_page", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01717", + "gapId": "operator:outliner.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01718", + "gapId": "operator:outliner.select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01719", + "gapId": "operator:outliner.select_walk", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01720", + "gapId": "operator:outliner.show_active", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01721", + "gapId": "operator:outliner.show_hierarchy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01722", + "gapId": "operator:outliner.show_one_level", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01723", + "gapId": "operator:outliner.start_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01724", + "gapId": "operator:outliner.unhide_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01725", + "gapId": "operator:paint.add_simple_uvs", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01726", + "gapId": "operator:paint.add_texture_paint_slot", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01727", + "gapId": "operator:paint.brush_colors_flip", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01728", + "gapId": "operator:paint.face_select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01729", + "gapId": "operator:paint.face_select_hide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01730", + "gapId": "operator:paint.face_select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01731", + "gapId": "operator:paint.face_select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01732", + "gapId": "operator:paint.face_select_linked_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01733", + "gapId": "operator:paint.face_select_loop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01734", + "gapId": "operator:paint.face_select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01735", + "gapId": "operator:paint.face_vert_reveal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01736", + "gapId": "operator:paint.grab_clone", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01737", + "gapId": "operator:paint.hide_show", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01738", + "gapId": "operator:paint.hide_show_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01739", + "gapId": "operator:paint.hide_show_lasso_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01740", + "gapId": "operator:paint.hide_show_line_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01741", + "gapId": "operator:paint.hide_show_masked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01742", + "gapId": "operator:paint.hide_show_polyline_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01743", + "gapId": "operator:paint.image_from_view", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01744", + "gapId": "operator:paint.image_paint", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01745", + "gapId": "operator:paint.mask_box_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01746", + "gapId": "operator:paint.mask_flood_fill", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01747", + "gapId": "operator:paint.mask_lasso_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01748", + "gapId": "operator:paint.mask_line_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01749", + "gapId": "operator:paint.mask_polyline_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01750", + "gapId": "operator:paint.project_image", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01751", + "gapId": "operator:paint.sample_color", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01752", + "gapId": "operator:paint.texture_paint_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01753", + "gapId": "operator:paint.vert_select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01754", + "gapId": "operator:paint.vert_select_hide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01755", + "gapId": "operator:paint.vert_select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01756", + "gapId": "operator:paint.vert_select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01757", + "gapId": "operator:paint.vert_select_linked_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01758", + "gapId": "operator:paint.vert_select_loop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01759", + "gapId": "operator:paint.vert_select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01760", + "gapId": "operator:paint.vert_select_ungrouped", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01761", + "gapId": "operator:paint.vertex_color_brightness_contrast", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01762", + "gapId": "operator:paint.vertex_color_dirt", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01763", + "gapId": "operator:paint.vertex_color_from_weight", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01764", + "gapId": "operator:paint.vertex_color_hsv", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01765", + "gapId": "operator:paint.vertex_color_invert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01766", + "gapId": "operator:paint.vertex_color_levels", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01767", + "gapId": "operator:paint.vertex_color_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01768", + "gapId": "operator:paint.vertex_color_smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01769", + "gapId": "operator:paint.vertex_paint", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01770", + "gapId": "operator:paint.vertex_paint_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01771", + "gapId": "operator:paint.visibility_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01772", + "gapId": "operator:paint.visibility_invert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01773", + "gapId": "operator:paint.weight_from_bones", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01774", + "gapId": "operator:paint.weight_gradient", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01775", + "gapId": "operator:paint.weight_paint", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01776", + "gapId": "operator:paint.weight_paint_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01777", + "gapId": "operator:paint.weight_sample", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01778", + "gapId": "operator:paint.weight_sample_group", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01779", + "gapId": "operator:paint.weight_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01780", + "gapId": "operator:paintcurve.add_point", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01781", + "gapId": "operator:paintcurve.add_point_slide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01782", + "gapId": "operator:paintcurve.cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01783", + "gapId": "operator:paintcurve.delete_point", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01784", + "gapId": "operator:paintcurve.draw", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01785", + "gapId": "operator:paintcurve.new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01786", + "gapId": "operator:paintcurve.select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01787", + "gapId": "operator:paintcurve.slide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01788", + "gapId": "operator:palette.color_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01789", + "gapId": "operator:palette.color_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01790", + "gapId": "operator:palette.color_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01791", + "gapId": "operator:palette.extract_from_image", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01792", + "gapId": "operator:palette.join", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01793", + "gapId": "operator:palette.new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01794", + "gapId": "operator:palette.sort", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01795", + "gapId": "operator:particle.brush_edit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01796", + "gapId": "operator:particle.connect_hair", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01797", + "gapId": "operator:particle.copy_particle_systems", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01798", + "gapId": "operator:particle.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01799", + "gapId": "operator:particle.disconnect_hair", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01800", + "gapId": "operator:particle.duplicate_particle_system", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01801", + "gapId": "operator:particle.dupliob_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01802", + "gapId": "operator:particle.dupliob_move_down", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01803", + "gapId": "operator:particle.dupliob_move_up", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01804", + "gapId": "operator:particle.dupliob_refresh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01805", + "gapId": "operator:particle.dupliob_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01806", + "gapId": "operator:particle.edited_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01807", + "gapId": "operator:particle.hair_dynamics_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01808", + "gapId": "operator:particle.hide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01809", + "gapId": "operator:particle.mirror", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01810", + "gapId": "operator:particle.new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01811", + "gapId": "operator:particle.new_target", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01812", + "gapId": "operator:particle.particle_edit_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01813", + "gapId": "operator:particle.particle_system_remove_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01814", + "gapId": "operator:particle.rekey", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01815", + "gapId": "operator:particle.remove_doubles", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01816", + "gapId": "operator:particle.reveal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01817", + "gapId": "operator:particle.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01818", + "gapId": "operator:particle.select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01819", + "gapId": "operator:particle.select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01820", + "gapId": "operator:particle.select_linked_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01821", + "gapId": "operator:particle.select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01822", + "gapId": "operator:particle.select_random", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01823", + "gapId": "operator:particle.select_roots", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01824", + "gapId": "operator:particle.select_tips", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01825", + "gapId": "operator:particle.shape_cut", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01826", + "gapId": "operator:particle.subdivide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01827", + "gapId": "operator:particle.target_move_down", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01828", + "gapId": "operator:particle.target_move_up", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01829", + "gapId": "operator:particle.target_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01830", + "gapId": "operator:particle.unify_length", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01831", + "gapId": "operator:particle.weight_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01832", + "gapId": "operator:pointcloud.attribute_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01833", + "gapId": "operator:pointcloud.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01834", + "gapId": "operator:pointcloud.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01835", + "gapId": "operator:pointcloud.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01836", + "gapId": "operator:pointcloud.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01837", + "gapId": "operator:pointcloud.select_random", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01838", + "gapId": "operator:pointcloud.separate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01839", + "gapId": "operator:pose.armature_apply", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01840", + "gapId": "operator:pose.autoside_names", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01841", + "gapId": "operator:pose.blend_to_neighbor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01842", + "gapId": "operator:pose.blend_with_rest", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01843", + "gapId": "operator:pose.breakdown", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01844", + "gapId": "operator:pose.constraint_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01845", + "gapId": "operator:pose.constraint_add_with_targets", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01846", + "gapId": "operator:pose.constraints_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01847", + "gapId": "operator:pose.constraints_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01848", + "gapId": "operator:pose.copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01849", + "gapId": "operator:pose.flip_names", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01850", + "gapId": "operator:pose.hide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01851", + "gapId": "operator:pose.ik_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01852", + "gapId": "operator:pose.ik_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01853", + "gapId": "operator:pose.loc_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01854", + "gapId": "operator:pose.paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01855", + "gapId": "operator:pose.paths_calculate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01856", + "gapId": "operator:pose.paths_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01857", + "gapId": "operator:pose.paths_range_update", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01858", + "gapId": "operator:pose.paths_update", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01859", + "gapId": "operator:pose.propagate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01860", + "gapId": "operator:pose.push", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01861", + "gapId": "operator:pose.quaternions_flip", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01862", + "gapId": "operator:pose.relax", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01863", + "gapId": "operator:pose.reveal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01864", + "gapId": "operator:pose.rot_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01865", + "gapId": "operator:pose.rotation_mode_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01866", + "gapId": "operator:pose.scale_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01867", + "gapId": "operator:pose.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01868", + "gapId": "operator:pose.select_constraint_target", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01869", + "gapId": "operator:pose.select_grouped", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01870", + "gapId": "operator:pose.select_hierarchy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01871", + "gapId": "operator:pose.select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01872", + "gapId": "operator:pose.select_linked_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01873", + "gapId": "operator:pose.select_mirror", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01874", + "gapId": "operator:pose.select_parent", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01875", + "gapId": "operator:pose.selection_set_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01876", + "gapId": "operator:pose.selection_set_add_and_assign", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01877", + "gapId": "operator:pose.selection_set_assign", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01878", + "gapId": "operator:pose.selection_set_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01879", + "gapId": "operator:pose.selection_set_delete_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01880", + "gapId": "operator:pose.selection_set_deselect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01881", + "gapId": "operator:pose.selection_set_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01882", + "gapId": "operator:pose.selection_set_paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01883", + "gapId": "operator:pose.selection_set_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01884", + "gapId": "operator:pose.selection_set_remove_bones", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01885", + "gapId": "operator:pose.selection_set_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01886", + "gapId": "operator:pose.selection_set_unassign", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01887", + "gapId": "operator:pose.transforms_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01888", + "gapId": "operator:pose.user_transforms_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01889", + "gapId": "operator:pose.visual_transform_apply", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01890", + "gapId": "operator:poselib.apply_pose_asset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01891", + "gapId": "operator:poselib.asset_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01892", + "gapId": "operator:poselib.asset_modify", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01893", + "gapId": "operator:poselib.blend_pose_asset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01894", + "gapId": "operator:poselib.copy_as_asset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01895", + "gapId": "operator:poselib.create_pose_asset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01896", + "gapId": "operator:poselib.paste_asset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01897", + "gapId": "operator:poselib.pose_asset_select_bones", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01898", + "gapId": "operator:poselib.restore_previous_action", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01899", + "gapId": "operator:preferences.addon_disable", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01900", + "gapId": "operator:preferences.addon_enable", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01901", + "gapId": "operator:preferences.addon_expand", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01902", + "gapId": "operator:preferences.addon_install", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01903", + "gapId": "operator:preferences.addon_refresh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01904", + "gapId": "operator:preferences.addon_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01905", + "gapId": "operator:preferences.addon_show", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01906", + "gapId": "operator:preferences.app_template_install", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01907", + "gapId": "operator:preferences.asset_library_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01908", + "gapId": "operator:preferences.asset_library_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01909", + "gapId": "operator:preferences.associate_blend", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01910", + "gapId": "operator:preferences.autoexec_path_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01911", + "gapId": "operator:preferences.autoexec_path_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01912", + "gapId": "operator:preferences.clear_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01913", + "gapId": "operator:preferences.copy_prev", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01914", + "gapId": "operator:preferences.extension_repo_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01915", + "gapId": "operator:preferences.extension_repo_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01916", + "gapId": "operator:preferences.extension_url_drop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01917", + "gapId": "operator:preferences.keyconfig_activate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01918", + "gapId": "operator:preferences.keyconfig_export", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01919", + "gapId": "operator:preferences.keyconfig_import", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01920", + "gapId": "operator:preferences.keyconfig_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01921", + "gapId": "operator:preferences.keyconfig_test", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01922", + "gapId": "operator:preferences.keyitem_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01923", + "gapId": "operator:preferences.keyitem_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01924", + "gapId": "operator:preferences.keyitem_restore", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01925", + "gapId": "operator:preferences.keymap_restore", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01926", + "gapId": "operator:preferences.reset_default_theme", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01927", + "gapId": "operator:preferences.script_directory_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01928", + "gapId": "operator:preferences.script_directory_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01929", + "gapId": "operator:preferences.start_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01930", + "gapId": "operator:preferences.studiolight_copy_settings", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01931", + "gapId": "operator:preferences.studiolight_install", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01932", + "gapId": "operator:preferences.studiolight_new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01933", + "gapId": "operator:preferences.studiolight_uninstall", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01934", + "gapId": "operator:preferences.theme_install", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01935", + "gapId": "operator:preferences.unassociate_blend", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01936", + "gapId": "operator:ptcache.add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01937", + "gapId": "operator:ptcache.bake", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01938", + "gapId": "operator:ptcache.bake_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01939", + "gapId": "operator:ptcache.bake_from_cache", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01940", + "gapId": "operator:ptcache.free_bake", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01941", + "gapId": "operator:ptcache.free_bake_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01942", + "gapId": "operator:ptcache.remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01943", + "gapId": "operator:render.clear_texture_cache", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01944", + "gapId": "operator:render.color_management_white_balance_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01945", + "gapId": "operator:render.cycles_integrator_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01946", + "gapId": "operator:render.cycles_performance_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01947", + "gapId": "operator:render.cycles_sampling_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01948", + "gapId": "operator:render.cycles_viewport_sampling_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01949", + "gapId": "operator:render.eevee_raytracing_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01950", + "gapId": "operator:render.generate_texture_cache", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01951", + "gapId": "operator:render.opengl", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01952", + "gapId": "operator:render.play_rendered_anim", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01953", + "gapId": "operator:render.preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01954", + "gapId": "operator:render.render", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01955", + "gapId": "operator:render.shutter_curve_preset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01956", + "gapId": "operator:render.swap_dimensions", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01957", + "gapId": "operator:render.view_cancel", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01958", + "gapId": "operator:render.view_show", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01959", + "gapId": "operator:rigidbody.bake_to_keyframes", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01960", + "gapId": "operator:rigidbody.connect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01961", + "gapId": "operator:rigidbody.constraint_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01962", + "gapId": "operator:rigidbody.constraint_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01963", + "gapId": "operator:rigidbody.mass_calculate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01964", + "gapId": "operator:rigidbody.object_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01965", + "gapId": "operator:rigidbody.object_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01966", + "gapId": "operator:rigidbody.object_settings_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01967", + "gapId": "operator:rigidbody.objects_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01968", + "gapId": "operator:rigidbody.objects_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01969", + "gapId": "operator:rigidbody.shape_change", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01970", + "gapId": "operator:rigidbody.world_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01971", + "gapId": "operator:rigidbody.world_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01972", + "gapId": "operator:scene.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01973", + "gapId": "operator:scene.drop_scene_asset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01974", + "gapId": "operator:scene.freestyle_add_edge_marks_to_keying_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01975", + "gapId": "operator:scene.freestyle_add_face_marks_to_keying_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01976", + "gapId": "operator:scene.freestyle_alpha_modifier_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01977", + "gapId": "operator:scene.freestyle_color_modifier_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01978", + "gapId": "operator:scene.freestyle_fill_range_by_selection", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01979", + "gapId": "operator:scene.freestyle_geometry_modifier_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01980", + "gapId": "operator:scene.freestyle_lineset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01981", + "gapId": "operator:scene.freestyle_lineset_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01982", + "gapId": "operator:scene.freestyle_lineset_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01983", + "gapId": "operator:scene.freestyle_lineset_paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01984", + "gapId": "operator:scene.freestyle_lineset_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01985", + "gapId": "operator:scene.freestyle_linestyle_new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01986", + "gapId": "operator:scene.freestyle_modifier_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01987", + "gapId": "operator:scene.freestyle_modifier_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01988", + "gapId": "operator:scene.freestyle_modifier_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01989", + "gapId": "operator:scene.freestyle_module_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01990", + "gapId": "operator:scene.freestyle_module_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01991", + "gapId": "operator:scene.freestyle_module_open", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01992", + "gapId": "operator:scene.freestyle_module_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01993", + "gapId": "operator:scene.freestyle_stroke_material_create", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01994", + "gapId": "operator:scene.freestyle_thickness_modifier_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01995", + "gapId": "operator:scene.gltf2_action_filter_refresh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01996", + "gapId": "operator:scene.gpencil_brush_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01997", + "gapId": "operator:scene.gpencil_material_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01998", + "gapId": "operator:scene.new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01999", + "gapId": "operator:scene.new_sequencer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02000", + "gapId": "operator:scene.new_sequencer_scene", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02001", + "gapId": "operator:scene.render_view_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02002", + "gapId": "operator:scene.render_view_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02003", + "gapId": "operator:scene.view_layer_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02004", + "gapId": "operator:scene.view_layer_add_aov", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02005", + "gapId": "operator:scene.view_layer_add_lightgroup", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02006", + "gapId": "operator:scene.view_layer_add_used_lightgroups", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02007", + "gapId": "operator:scene.view_layer_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02008", + "gapId": "operator:scene.view_layer_remove_aov", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02009", + "gapId": "operator:scene.view_layer_remove_lightgroup", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02010", + "gapId": "operator:scene.view_layer_remove_unused_lightgroups", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02011", + "gapId": "operator:screen.actionzone", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02012", + "gapId": "operator:screen.animation_cancel", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02013", + "gapId": "operator:screen.animation_pause", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02014", + "gapId": "operator:screen.animation_play", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02015", + "gapId": "operator:screen.animation_step", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02016", + "gapId": "operator:screen.area_close", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02017", + "gapId": "operator:screen.area_dupli", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02018", + "gapId": "operator:screen.area_join", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02019", + "gapId": "operator:screen.area_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02020", + "gapId": "operator:screen.area_options", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02021", + "gapId": "operator:screen.area_split", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02022", + "gapId": "operator:screen.area_swap", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02023", + "gapId": "operator:screen.back_to_previous", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02024", + "gapId": "operator:screen.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02025", + "gapId": "operator:screen.drivers_editor_show", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02026", + "gapId": "operator:screen.edge_merge", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02027", + "gapId": "operator:screen.frame_jump", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02028", + "gapId": "operator:screen.frame_offset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02029", + "gapId": "operator:screen.header_toggle_menus", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02030", + "gapId": "operator:screen.info_log_show", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02031", + "gapId": "operator:screen.keyframe_jump", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02032", + "gapId": "operator:screen.marker_jump", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02033", + "gapId": "operator:screen.new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02034", + "gapId": "operator:screen.quadview_size", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02035", + "gapId": "operator:screen.redo_last", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02036", + "gapId": "operator:screen.region_blend", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02037", + "gapId": "operator:screen.region_context_menu", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02038", + "gapId": "operator:screen.region_flip", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02039", + "gapId": "operator:screen.region_quadview", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02040", + "gapId": "operator:screen.region_scale", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02041", + "gapId": "operator:screen.region_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02042", + "gapId": "operator:screen.repeat_history", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02043", + "gapId": "operator:screen.repeat_last", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02044", + "gapId": "operator:screen.screen_full_area", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02045", + "gapId": "operator:screen.screen_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02046", + "gapId": "operator:screen.screenshot", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02047", + "gapId": "operator:screen.screenshot_area", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02048", + "gapId": "operator:screen.space_context_cycle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02049", + "gapId": "operator:screen.space_type_set_or_cycle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02050", + "gapId": "operator:screen.spacedata_cleanup", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02051", + "gapId": "operator:screen.time_jump", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02052", + "gapId": "operator:screen.userpref_show", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02053", + "gapId": "operator:screen.workspace_cycle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02054", + "gapId": "operator:script.execute_preset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02055", + "gapId": "operator:script.python_file_run", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02056", + "gapId": "operator:script.reload", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02057", + "gapId": "operator:sculpt.brush_stroke", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02058", + "gapId": "operator:sculpt.cloth_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02059", + "gapId": "operator:sculpt.color_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02060", + "gapId": "operator:sculpt.detail_flood_fill", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02061", + "gapId": "operator:sculpt.dynamic_topology_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02062", + "gapId": "operator:sculpt.dyntopo_detail_size_edit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02063", + "gapId": "operator:sculpt.expand", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02064", + "gapId": "operator:sculpt.face_set_box_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02065", + "gapId": "operator:sculpt.face_set_change_visibility", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02066", + "gapId": "operator:sculpt.face_set_edit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02067", + "gapId": "operator:sculpt.face_set_extract", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02068", + "gapId": "operator:sculpt.face_set_lasso_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02069", + "gapId": "operator:sculpt.face_set_line_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02070", + "gapId": "operator:sculpt.face_set_polyline_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02071", + "gapId": "operator:sculpt.face_sets_create", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02072", + "gapId": "operator:sculpt.face_sets_init", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02073", + "gapId": "operator:sculpt.face_sets_randomize_colors", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02074", + "gapId": "operator:sculpt.mask_by_color", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02075", + "gapId": "operator:sculpt.mask_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02076", + "gapId": "operator:sculpt.mask_from_boundary", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02077", + "gapId": "operator:sculpt.mask_from_cavity", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02078", + "gapId": "operator:sculpt.mask_init", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02079", + "gapId": "operator:sculpt.mesh_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02080", + "gapId": "operator:sculpt.optimize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02081", + "gapId": "operator:sculpt.paint_mask_extract", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02082", + "gapId": "operator:sculpt.paint_mask_slice", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02083", + "gapId": "operator:sculpt.project_line_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02084", + "gapId": "operator:sculpt.sample_detail_size", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02085", + "gapId": "operator:sculpt.sculptmode_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02086", + "gapId": "operator:sculpt.set_persistent_base", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02087", + "gapId": "operator:sculpt.set_pivot_position", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02088", + "gapId": "operator:sculpt.symmetrize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02089", + "gapId": "operator:sculpt.trim_box_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02090", + "gapId": "operator:sculpt.trim_lasso_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02091", + "gapId": "operator:sculpt.trim_line_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02092", + "gapId": "operator:sculpt.trim_polyline_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02093", + "gapId": "operator:sculpt.uv_sculpt_grab", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02094", + "gapId": "operator:sculpt.uv_sculpt_pinch", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02095", + "gapId": "operator:sculpt.uv_sculpt_relax", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02096", + "gapId": "operator:sculpt_curves.brush_stroke", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02097", + "gapId": "operator:sculpt_curves.min_distance_edit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02098", + "gapId": "operator:sculpt_curves.select_grow", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02099", + "gapId": "operator:sculpt_curves.select_random", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02100", + "gapId": "operator:sequencer.add_scene_strip_from_scene_asset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02101", + "gapId": "operator:sequencer.box_blade", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02102", + "gapId": "operator:sequencer.change_effect_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02103", + "gapId": "operator:sequencer.change_path", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02104", + "gapId": "operator:sequencer.change_scene", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02105", + "gapId": "operator:sequencer.connect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02106", + "gapId": "operator:sequencer.copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02107", + "gapId": "operator:sequencer.crossfade_sounds", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02108", + "gapId": "operator:sequencer.cursor_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02109", + "gapId": "operator:sequencer.deinterlace_selected_movies", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02110", + "gapId": "operator:sequencer.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02111", + "gapId": "operator:sequencer.disconnect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02112", + "gapId": "operator:sequencer.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02113", + "gapId": "operator:sequencer.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02114", + "gapId": "operator:sequencer.duplicate_move_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02115", + "gapId": "operator:sequencer.effect_strip_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02116", + "gapId": "operator:sequencer.enable_proxies", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02117", + "gapId": "operator:sequencer.export_subtitles", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02118", + "gapId": "operator:sequencer.fades_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02119", + "gapId": "operator:sequencer.fades_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02120", + "gapId": "operator:sequencer.gap_insert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02121", + "gapId": "operator:sequencer.gap_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02122", + "gapId": "operator:sequencer.image_strip_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02123", + "gapId": "operator:sequencer.images_separate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02124", + "gapId": "operator:sequencer.lock", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02125", + "gapId": "operator:sequencer.mask_strip_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02126", + "gapId": "operator:sequencer.meta_make", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02127", + "gapId": "operator:sequencer.meta_separate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02128", + "gapId": "operator:sequencer.meta_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02129", + "gapId": "operator:sequencer.movie_strip_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02130", + "gapId": "operator:sequencer.movieclip_strip_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02131", + "gapId": "operator:sequencer.mute", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02132", + "gapId": "operator:sequencer.offset_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02133", + "gapId": "operator:sequencer.paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02134", + "gapId": "operator:sequencer.preview_duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02135", + "gapId": "operator:sequencer.preview_duplicate_move_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02136", + "gapId": "operator:sequencer.reassign_inputs", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02137", + "gapId": "operator:sequencer.rebuild_proxy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02138", + "gapId": "operator:sequencer.refresh_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02139", + "gapId": "operator:sequencer.reload", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02140", + "gapId": "operator:sequencer.rename_channel", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02141", + "gapId": "operator:sequencer.rendersize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02142", + "gapId": "operator:sequencer.retiming_add_freeze_frame_slide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02143", + "gapId": "operator:sequencer.retiming_add_transition_slide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02144", + "gapId": "operator:sequencer.retiming_freeze_frame_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02145", + "gapId": "operator:sequencer.retiming_key_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02146", + "gapId": "operator:sequencer.retiming_key_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02147", + "gapId": "operator:sequencer.retiming_reset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02148", + "gapId": "operator:sequencer.retiming_segment_speed_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02149", + "gapId": "operator:sequencer.retiming_show", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02150", + "gapId": "operator:sequencer.retiming_transition_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02151", + "gapId": "operator:sequencer.sample", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02152", + "gapId": "operator:sequencer.scene_frame_range_update", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02153", + "gapId": "operator:sequencer.scene_strip_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02154", + "gapId": "operator:sequencer.scene_strip_add_new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02155", + "gapId": "operator:sequencer.select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02156", + "gapId": "operator:sequencer.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02157", + "gapId": "operator:sequencer.select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02158", + "gapId": "operator:sequencer.select_circle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02159", + "gapId": "operator:sequencer.select_grouped", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02160", + "gapId": "operator:sequencer.select_handle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02161", + "gapId": "operator:sequencer.select_handles", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02162", + "gapId": "operator:sequencer.select_lasso", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02163", + "gapId": "operator:sequencer.select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02164", + "gapId": "operator:sequencer.select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02165", + "gapId": "operator:sequencer.select_linked_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02166", + "gapId": "operator:sequencer.select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02167", + "gapId": "operator:sequencer.select_side", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02168", + "gapId": "operator:sequencer.select_side_of_frame", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02169", + "gapId": "operator:sequencer.set_range_to_strips", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02170", + "gapId": "operator:sequencer.slip", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02171", + "gapId": "operator:sequencer.snap", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02172", + "gapId": "operator:sequencer.sound_strip_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02173", + "gapId": "operator:sequencer.split", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02174", + "gapId": "operator:sequencer.split_multicam", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02175", + "gapId": "operator:sequencer.strip_color_tag_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02176", + "gapId": "operator:sequencer.strip_jump", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02177", + "gapId": "operator:sequencer.strip_modifier_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02178", + "gapId": "operator:sequencer.strip_modifier_add_node_group", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02179", + "gapId": "operator:sequencer.strip_modifier_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02180", + "gapId": "operator:sequencer.strip_modifier_duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02181", + "gapId": "operator:sequencer.strip_modifier_equalizer_redefine", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02182", + "gapId": "operator:sequencer.strip_modifier_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02183", + "gapId": "operator:sequencer.strip_modifier_move_to_index", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02184", + "gapId": "operator:sequencer.strip_modifier_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02185", + "gapId": "operator:sequencer.strip_modifier_set_active", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02186", + "gapId": "operator:sequencer.strip_transform_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02187", + "gapId": "operator:sequencer.strip_transform_fit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02188", + "gapId": "operator:sequencer.swap", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02189", + "gapId": "operator:sequencer.swap_data", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02190", + "gapId": "operator:sequencer.swap_inputs", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02191", + "gapId": "operator:sequencer.text_cursor_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02192", + "gapId": "operator:sequencer.text_cursor_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02193", + "gapId": "operator:sequencer.text_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02194", + "gapId": "operator:sequencer.text_deselect_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02195", + "gapId": "operator:sequencer.text_edit_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02196", + "gapId": "operator:sequencer.text_edit_cut", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02197", + "gapId": "operator:sequencer.text_edit_mode_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02198", + "gapId": "operator:sequencer.text_edit_paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02199", + "gapId": "operator:sequencer.text_insert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02200", + "gapId": "operator:sequencer.text_line_break", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02201", + "gapId": "operator:sequencer.text_select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02202", + "gapId": "operator:sequencer.text_strip_style_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02203", + "gapId": "operator:sequencer.unlock", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02204", + "gapId": "operator:sequencer.unmute", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02205", + "gapId": "operator:sequencer.view_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02206", + "gapId": "operator:sequencer.view_all_preview", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02207", + "gapId": "operator:sequencer.view_frame", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02208", + "gapId": "operator:sequencer.view_ghost_border", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02209", + "gapId": "operator:sequencer.view_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02210", + "gapId": "operator:sequencer.view_zoom_ratio", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02211", + "gapId": "operator:sound.bake_animation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02212", + "gapId": "operator:sound.mixdown", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02213", + "gapId": "operator:sound.open", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02214", + "gapId": "operator:sound.open_mono", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02215", + "gapId": "operator:sound.pack", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02216", + "gapId": "operator:sound.unpack", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02217", + "gapId": "operator:sound.update_animation_flags", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02218", + "gapId": "operator:spreadsheet.add_row_filter_rule", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02219", + "gapId": "operator:spreadsheet.change_spreadsheet_data_source", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02220", + "gapId": "operator:spreadsheet.fit_column", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02221", + "gapId": "operator:spreadsheet.remove_row_filter_rule", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02222", + "gapId": "operator:spreadsheet.reorder_columns", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02223", + "gapId": "operator:spreadsheet.resize_column", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02224", + "gapId": "operator:spreadsheet.toggle_pin", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02225", + "gapId": "operator:surface.primitive_nurbs_surface_circle_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02226", + "gapId": "operator:surface.primitive_nurbs_surface_curve_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02227", + "gapId": "operator:surface.primitive_nurbs_surface_cylinder_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02228", + "gapId": "operator:surface.primitive_nurbs_surface_sphere_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02229", + "gapId": "operator:surface.primitive_nurbs_surface_surface_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02230", + "gapId": "operator:surface.primitive_nurbs_surface_torus_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02231", + "gapId": "operator:text.autocomplete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02232", + "gapId": "operator:text.comment_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02233", + "gapId": "operator:text.convert_whitespace", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02234", + "gapId": "operator:text.copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02235", + "gapId": "operator:text.cursor_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02236", + "gapId": "operator:text.cut", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02237", + "gapId": "operator:text.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02238", + "gapId": "operator:text.duplicate_line", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02239", + "gapId": "operator:text.find", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02240", + "gapId": "operator:text.find_set_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02241", + "gapId": "operator:text.indent", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02242", + "gapId": "operator:text.indent_or_autocomplete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02243", + "gapId": "operator:text.insert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02244", + "gapId": "operator:text.jump", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02245", + "gapId": "operator:text.jump_to_file_at_point", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02246", + "gapId": "operator:text.line_break", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02247", + "gapId": "operator:text.line_number", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02248", + "gapId": "operator:text.make_internal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02249", + "gapId": "operator:text.move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02250", + "gapId": "operator:text.move_lines", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02251", + "gapId": "operator:text.move_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02252", + "gapId": "operator:text.new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02253", + "gapId": "operator:text.open", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02254", + "gapId": "operator:text.overwrite_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02255", + "gapId": "operator:text.paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02256", + "gapId": "operator:text.reload", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02257", + "gapId": "operator:text.replace", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02258", + "gapId": "operator:text.replace_set_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02259", + "gapId": "operator:text.resolve_conflict", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02260", + "gapId": "operator:text.run_script", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02261", + "gapId": "operator:text.save", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02262", + "gapId": "operator:text.save_as", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02263", + "gapId": "operator:text.scroll", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02264", + "gapId": "operator:text.scroll_bar", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02265", + "gapId": "operator:text.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02266", + "gapId": "operator:text.select_line", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02267", + "gapId": "operator:text.select_word", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02268", + "gapId": "operator:text.selection_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02269", + "gapId": "operator:text.start_find", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02270", + "gapId": "operator:text.to_3d_object", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02271", + "gapId": "operator:text.unindent", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02272", + "gapId": "operator:text.unlink", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02273", + "gapId": "operator:text.update_shader", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02274", + "gapId": "operator:text_editor.preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02275", + "gapId": "operator:texture.new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02276", + "gapId": "operator:texture.slot_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02277", + "gapId": "operator:texture.slot_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02278", + "gapId": "operator:texture.slot_paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02279", + "gapId": "operator:transform.bbone_resize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02280", + "gapId": "operator:transform.bend", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02281", + "gapId": "operator:transform.create_orientation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02282", + "gapId": "operator:transform.delete_orientation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02283", + "gapId": "operator:transform.edge_bevelweight", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02284", + "gapId": "operator:transform.edge_crease", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02285", + "gapId": "operator:transform.edge_slide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02286", + "gapId": "operator:transform.from_gizmo", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02287", + "gapId": "operator:transform.mirror", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02288", + "gapId": "operator:transform.push_pull", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02289", + "gapId": "operator:transform.resize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02290", + "gapId": "operator:transform.rotate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02291", + "gapId": "operator:transform.rotate_normal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02292", + "gapId": "operator:transform.select_orientation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02293", + "gapId": "operator:transform.seq_slide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02294", + "gapId": "operator:transform.shear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02295", + "gapId": "operator:transform.shrink_fatten", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02296", + "gapId": "operator:transform.skin_resize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02297", + "gapId": "operator:transform.tilt", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02298", + "gapId": "operator:transform.tosphere", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02299", + "gapId": "operator:transform.trackball", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02300", + "gapId": "operator:transform.transform", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02301", + "gapId": "operator:transform.translate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02302", + "gapId": "operator:transform.vert_crease", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02303", + "gapId": "operator:transform.vert_slide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02304", + "gapId": "operator:transform.vertex_random", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02305", + "gapId": "operator:transform.vertex_warp", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02306", + "gapId": "operator:ui.assign_default_button", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02307", + "gapId": "operator:ui.button_execute", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02308", + "gapId": "operator:ui.button_string_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02309", + "gapId": "operator:ui.copy_as_driver_button", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02310", + "gapId": "operator:ui.copy_data_path_button", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02311", + "gapId": "operator:ui.copy_driver_to_selected_button", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02312", + "gapId": "operator:ui.copy_python_command_button", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02313", + "gapId": "operator:ui.copy_to_selected_button", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02314", + "gapId": "operator:ui.drop_color", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02315", + "gapId": "operator:ui.drop_material", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02316", + "gapId": "operator:ui.drop_name", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02317", + "gapId": "operator:ui.editsource", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02318", + "gapId": "operator:ui.eyedropper_bone", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02319", + "gapId": "operator:ui.eyedropper_color", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02320", + "gapId": "operator:ui.eyedropper_colorramp", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02321", + "gapId": "operator:ui.eyedropper_colorramp_point", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02322", + "gapId": "operator:ui.eyedropper_depth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02323", + "gapId": "operator:ui.eyedropper_driver", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02324", + "gapId": "operator:ui.eyedropper_grease_pencil_color", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02325", + "gapId": "operator:ui.eyedropper_id", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02326", + "gapId": "operator:ui.jump_to_target_button", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02327", + "gapId": "operator:ui.list_start_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02328", + "gapId": "operator:ui.override_add_button", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02329", + "gapId": "operator:ui.override_idtemplate_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02330", + "gapId": "operator:ui.override_idtemplate_make", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02331", + "gapId": "operator:ui.override_idtemplate_reset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02332", + "gapId": "operator:ui.override_remove_button", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02333", + "gapId": "operator:ui.reloadtranslation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02334", + "gapId": "operator:ui.reset_default_button", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02335", + "gapId": "operator:ui.unset_property_button", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02336", + "gapId": "operator:ui.view_drop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02337", + "gapId": "operator:ui.view_item_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02338", + "gapId": "operator:ui.view_item_focus", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02339", + "gapId": "operator:ui.view_item_navigate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02340", + "gapId": "operator:ui.view_item_rename", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02341", + "gapId": "operator:ui.view_item_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02342", + "gapId": "operator:ui.view_scroll", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02343", + "gapId": "operator:ui.view_start_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02344", + "gapId": "operator:uilist.entry_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02345", + "gapId": "operator:uilist.entry_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02346", + "gapId": "operator:uilist.entry_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02347", + "gapId": "operator:uv.align", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02348", + "gapId": "operator:uv.align_rotation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02349", + "gapId": "operator:uv.arrange_islands", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02350", + "gapId": "operator:uv.average_islands_scale", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02351", + "gapId": "operator:uv.copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02352", + "gapId": "operator:uv.copy_mirrored_faces", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02353", + "gapId": "operator:uv.cube_project", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02354", + "gapId": "operator:uv.cursor_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02355", + "gapId": "operator:uv.custom_region_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02356", + "gapId": "operator:uv.cylinder_project", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02357", + "gapId": "operator:uv.export_layout", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02358", + "gapId": "operator:uv.follow_active_quads", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02359", + "gapId": "operator:uv.hide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02360", + "gapId": "operator:uv.lightmap_pack", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02361", + "gapId": "operator:uv.mark_seam", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02362", + "gapId": "operator:uv.minimize_stretch", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02363", + "gapId": "operator:uv.move_on_axis", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02364", + "gapId": "operator:uv.pack_islands", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02365", + "gapId": "operator:uv.paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02366", + "gapId": "operator:uv.pin", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02367", + "gapId": "operator:uv.project_from_view", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02368", + "gapId": "operator:uv.randomize_uv_transform", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02369", + "gapId": "operator:uv.remove_doubles", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02370", + "gapId": "operator:uv.reset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02371", + "gapId": "operator:uv.reveal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02372", + "gapId": "operator:uv.rip", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02373", + "gapId": "operator:uv.rip_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02374", + "gapId": "operator:uv.seams_from_islands", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02375", + "gapId": "operator:uv.select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02376", + "gapId": "operator:uv.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02377", + "gapId": "operator:uv.select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02378", + "gapId": "operator:uv.select_by_winding", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02379", + "gapId": "operator:uv.select_circle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02380", + "gapId": "operator:uv.select_edge_ring", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02381", + "gapId": "operator:uv.select_lasso", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02382", + "gapId": "operator:uv.select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02383", + "gapId": "operator:uv.select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02384", + "gapId": "operator:uv.select_linked_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02385", + "gapId": "operator:uv.select_loop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02386", + "gapId": "operator:uv.select_mode", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02387", + "gapId": "operator:uv.select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02388", + "gapId": "operator:uv.select_overlap", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02389", + "gapId": "operator:uv.select_pinned", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02390", + "gapId": "operator:uv.select_similar", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02391", + "gapId": "operator:uv.select_split", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02392", + "gapId": "operator:uv.select_tile", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02393", + "gapId": "operator:uv.shortest_path_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02394", + "gapId": "operator:uv.shortest_path_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02395", + "gapId": "operator:uv.smart_project", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02396", + "gapId": "operator:uv.snap_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02397", + "gapId": "operator:uv.snap_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02398", + "gapId": "operator:uv.sphere_project", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02399", + "gapId": "operator:uv.stitch", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02400", + "gapId": "operator:uv.unwrap", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02401", + "gapId": "operator:uv.weld", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02402", + "gapId": "operator:view2d.edge_pan", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02403", + "gapId": "operator:view2d.ndof", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02404", + "gapId": "operator:view2d.pan", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02405", + "gapId": "operator:view2d.reset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02406", + "gapId": "operator:view2d.scroll_down", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02407", + "gapId": "operator:view2d.scroll_left", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02408", + "gapId": "operator:view2d.scroll_right", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02409", + "gapId": "operator:view2d.scroll_up", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02410", + "gapId": "operator:view2d.scroller_activate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02411", + "gapId": "operator:view2d.smoothview", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02412", + "gapId": "operator:view2d.zoom", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02413", + "gapId": "operator:view2d.zoom_border", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02414", + "gapId": "operator:view2d.zoom_in", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02415", + "gapId": "operator:view2d.zoom_out", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02416", + "gapId": "operator:view3d.bone_select_menu", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02417", + "gapId": "operator:view3d.camera_background_image_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02418", + "gapId": "operator:view3d.camera_background_image_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02419", + "gapId": "operator:view3d.camera_to_view", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02420", + "gapId": "operator:view3d.camera_to_view_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02421", + "gapId": "operator:view3d.clear_render_border", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02422", + "gapId": "operator:view3d.clip_border", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02423", + "gapId": "operator:view3d.copybuffer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02424", + "gapId": "operator:view3d.cursor3d", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02425", + "gapId": "operator:view3d.dolly", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02426", + "gapId": "operator:view3d.drop_world", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02427", + "gapId": "operator:view3d.edit_mesh_extrude_individual_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02428", + "gapId": "operator:view3d.edit_mesh_extrude_manifold_normal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02429", + "gapId": "operator:view3d.edit_mesh_extrude_move_normal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02430", + "gapId": "operator:view3d.edit_mesh_extrude_move_shrink_fatten", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02431", + "gapId": "operator:view3d.fly", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02432", + "gapId": "operator:view3d.interactive_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02433", + "gapId": "operator:view3d.localview", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02434", + "gapId": "operator:view3d.localview_remove_from", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02435", + "gapId": "operator:view3d.move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02436", + "gapId": "operator:view3d.navigate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02437", + "gapId": "operator:view3d.ndof_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02438", + "gapId": "operator:view3d.ndof_orbit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02439", + "gapId": "operator:view3d.ndof_orbit_zoom", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02440", + "gapId": "operator:view3d.ndof_pan", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02441", + "gapId": "operator:view3d.object_as_camera", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02442", + "gapId": "operator:view3d.object_mode_pie_or_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02443", + "gapId": "operator:view3d.pastebuffer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02444", + "gapId": "operator:view3d.render_border", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02445", + "gapId": "operator:view3d.rotate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02446", + "gapId": "operator:view3d.ruler_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02447", + "gapId": "operator:view3d.ruler_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02448", + "gapId": "operator:view3d.select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02449", + "gapId": "operator:view3d.select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02450", + "gapId": "operator:view3d.select_circle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02451", + "gapId": "operator:view3d.select_lasso", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02452", + "gapId": "operator:view3d.select_menu", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02453", + "gapId": "operator:view3d.smoothview", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02454", + "gapId": "operator:view3d.snap_cursor_to_active", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02455", + "gapId": "operator:view3d.snap_cursor_to_center", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02456", + "gapId": "operator:view3d.snap_cursor_to_grid", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02457", + "gapId": "operator:view3d.snap_cursor_to_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02458", + "gapId": "operator:view3d.snap_selected_to_active", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02459", + "gapId": "operator:view3d.snap_selected_to_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02460", + "gapId": "operator:view3d.snap_selected_to_grid", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02461", + "gapId": "operator:view3d.toggle_matcap_flip", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02462", + "gapId": "operator:view3d.toggle_shading", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02463", + "gapId": "operator:view3d.toggle_xray", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02464", + "gapId": "operator:view3d.transform_gizmo_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02465", + "gapId": "operator:view3d.view_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02466", + "gapId": "operator:view3d.view_axis", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02467", + "gapId": "operator:view3d.view_camera", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02468", + "gapId": "operator:view3d.view_center_camera", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02469", + "gapId": "operator:view3d.view_center_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02470", + "gapId": "operator:view3d.view_center_lock", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02471", + "gapId": "operator:view3d.view_center_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02472", + "gapId": "operator:view3d.view_lock_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02473", + "gapId": "operator:view3d.view_lock_to_active", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02474", + "gapId": "operator:view3d.view_orbit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02475", + "gapId": "operator:view3d.view_pan", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02476", + "gapId": "operator:view3d.view_persportho", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02477", + "gapId": "operator:view3d.view_roll", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02478", + "gapId": "operator:view3d.view_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02479", + "gapId": "operator:view3d.walk", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02480", + "gapId": "operator:view3d.zoom", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02481", + "gapId": "operator:view3d.zoom_border", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02482", + "gapId": "operator:view3d.zoom_camera_1_to_1", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02483", + "gapId": "operator:wm.append", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02484", + "gapId": "operator:wm.batch_rename", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02485", + "gapId": "operator:wm.blend_strings_utf8_validate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02486", + "gapId": "operator:wm.call_asset_shelf_popover", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02487", + "gapId": "operator:wm.call_menu", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02488", + "gapId": "operator:wm.call_menu_pie", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02489", + "gapId": "operator:wm.call_panel", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02490", + "gapId": "operator:wm.clear_recent_files", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02491", + "gapId": "operator:wm.collection_export_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02492", + "gapId": "operator:wm.context_collection_boolean_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02493", + "gapId": "operator:wm.context_cycle_array", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02494", + "gapId": "operator:wm.context_cycle_enum", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02495", + "gapId": "operator:wm.context_cycle_int", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02496", + "gapId": "operator:wm.context_menu_enum", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02497", + "gapId": "operator:wm.context_modal_mouse", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02498", + "gapId": "operator:wm.context_pie_enum", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02499", + "gapId": "operator:wm.context_scale_float", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02500", + "gapId": "operator:wm.context_scale_int", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02501", + "gapId": "operator:wm.context_set_boolean", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02502", + "gapId": "operator:wm.context_set_enum", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02503", + "gapId": "operator:wm.context_set_float", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02504", + "gapId": "operator:wm.context_set_id", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02505", + "gapId": "operator:wm.context_set_int", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02506", + "gapId": "operator:wm.context_set_string", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02507", + "gapId": "operator:wm.context_set_value", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02508", + "gapId": "operator:wm.context_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02509", + "gapId": "operator:wm.context_toggle_enum", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02510", + "gapId": "operator:wm.debug_menu", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02511", + "gapId": "operator:wm.doc_view", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02512", + "gapId": "operator:wm.doc_view_manual", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02513", + "gapId": "operator:wm.doc_view_manual_ui_context", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02514", + "gapId": "operator:wm.drop_blend_file", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02515", + "gapId": "operator:wm.drop_import_file", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02516", + "gapId": "operator:wm.fbx_import", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02517", + "gapId": "operator:wm.grease_pencil_export_svg", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02518", + "gapId": "operator:wm.grease_pencil_import_svg", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02519", + "gapId": "operator:wm.id_linked_relocate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02520", + "gapId": "operator:wm.interface_theme_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02521", + "gapId": "operator:wm.interface_theme_preset_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02522", + "gapId": "operator:wm.interface_theme_preset_save", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02523", + "gapId": "operator:wm.keyconfig_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02524", + "gapId": "operator:wm.keyconfig_preset_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02525", + "gapId": "operator:wm.lib_reload", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02526", + "gapId": "operator:wm.lib_relocate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02527", + "gapId": "operator:wm.link", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02528", + "gapId": "operator:wm.memory_statistics", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02529", + "gapId": "operator:wm.obj_export", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02530", + "gapId": "operator:wm.obj_import", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02531", + "gapId": "operator:wm.open_mainfile", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02532", + "gapId": "operator:wm.operator_cheat_sheet", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02533", + "gapId": "operator:wm.operator_defaults", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02534", + "gapId": "operator:wm.operator_pie_enum", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02535", + "gapId": "operator:wm.operator_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02536", + "gapId": "operator:wm.operator_presets_cleanup", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02537", + "gapId": "operator:wm.owner_disable", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02538", + "gapId": "operator:wm.owner_enable", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02539", + "gapId": "operator:wm.path_open", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02540", + "gapId": "operator:wm.ply_export", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02541", + "gapId": "operator:wm.ply_import", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02542", + "gapId": "operator:wm.previews_batch_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02543", + "gapId": "operator:wm.previews_batch_generate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02544", + "gapId": "operator:wm.previews_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02545", + "gapId": "operator:wm.previews_ensure", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02546", + "gapId": "operator:wm.properties_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02547", + "gapId": "operator:wm.properties_context_change", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02548", + "gapId": "operator:wm.properties_edit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02549", + "gapId": "operator:wm.properties_edit_value", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02550", + "gapId": "operator:wm.properties_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02551", + "gapId": "operator:wm.quit_blender", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02552", + "gapId": "operator:wm.radial_control", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02553", + "gapId": "operator:wm.read_factory_settings", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02554", + "gapId": "operator:wm.read_factory_userpref", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02555", + "gapId": "operator:wm.read_history", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02556", + "gapId": "operator:wm.read_homefile", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02557", + "gapId": "operator:wm.read_userpref", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02558", + "gapId": "operator:wm.recover_auto_save", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02559", + "gapId": "operator:wm.recover_last_session", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02560", + "gapId": "operator:wm.redraw_timer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02561", + "gapId": "operator:wm.revert_mainfile", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02562", + "gapId": "operator:wm.save_as_mainfile", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02563", + "gapId": "operator:wm.save_auto_save", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02564", + "gapId": "operator:wm.save_homefile", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02565", + "gapId": "operator:wm.save_mainfile", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02566", + "gapId": "operator:wm.save_userpref", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02567", + "gapId": "operator:wm.search_menu", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02568", + "gapId": "operator:wm.search_operator", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02569", + "gapId": "operator:wm.search_single_menu", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02570", + "gapId": "operator:wm.set_stereo_3d", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02571", + "gapId": "operator:wm.set_working_color_space", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02572", + "gapId": "operator:wm.splash", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02573", + "gapId": "operator:wm.splash_about", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02574", + "gapId": "operator:wm.stl_export", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02575", + "gapId": "operator:wm.stl_import", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02576", + "gapId": "operator:wm.sysinfo", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02577", + "gapId": "operator:wm.tool_set_by_brush_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02578", + "gapId": "operator:wm.tool_set_by_id", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02579", + "gapId": "operator:wm.tool_set_by_index", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02580", + "gapId": "operator:wm.toolbar", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02581", + "gapId": "operator:wm.toolbar_fallback_pie", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02582", + "gapId": "operator:wm.toolbar_prompt", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02583", + "gapId": "operator:wm.url_open", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02584", + "gapId": "operator:wm.url_open_preset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02585", + "gapId": "operator:wm.window_close", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02586", + "gapId": "operator:wm.window_fullscreen_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02587", + "gapId": "operator:wm.window_new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02588", + "gapId": "operator:wm.window_new_main", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02589", + "gapId": "operator:workspace.add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02590", + "gapId": "operator:workspace.append_activate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02591", + "gapId": "operator:workspace.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02592", + "gapId": "operator:workspace.delete_all_others", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02593", + "gapId": "operator:workspace.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02594", + "gapId": "operator:workspace.reorder_to_back", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02595", + "gapId": "operator:workspace.reorder_to_front", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02596", + "gapId": "operator:workspace.scene_pin_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02597", + "gapId": "operator:world.convert_volume_to_mesh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02598", + "gapId": "operator:world.new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02599", + "gapId": "rna:Main:BlendData", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02600", + "gapId": "rna:Main:BlendDataActions", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02601", + "gapId": "rna:Main:BlendDataAnnotations", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02602", + "gapId": "rna:Main:BlendDataArmatures", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02603", + "gapId": "rna:Main:BlendDataBrushes", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02604", + "gapId": "rna:Main:BlendDataCacheFiles", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02605", + "gapId": "rna:Main:BlendDataCameras", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02606", + "gapId": "rna:Main:BlendDataCollections", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02607", + "gapId": "rna:Main:BlendDataCurves", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02608", + "gapId": "rna:Main:BlendDataFonts", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02609", + "gapId": "rna:Main:BlendDataGreasePencilsV3", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02610", + "gapId": "rna:Main:BlendDataHairCurves", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02611", + "gapId": "rna:Main:BlendDataImages", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02612", + "gapId": "rna:Main:BlendDataLattices", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02613", + "gapId": "rna:Main:BlendDataLibraries", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02614", + "gapId": "rna:Main:BlendDataLights", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02615", + "gapId": "rna:Main:BlendDataLineStyles", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02616", + "gapId": "rna:Main:BlendDataMasks", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02617", + "gapId": "rna:Main:BlendDataMaterials", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02618", + "gapId": "rna:Main:BlendDataMeshes", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02619", + "gapId": "rna:Main:BlendDataMetaBalls", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02620", + "gapId": "rna:Main:BlendDataMovieClips", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02621", + "gapId": "rna:Main:BlendDataNodeTrees", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02622", + "gapId": "rna:Main:BlendDataObjects", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02623", + "gapId": "rna:Main:BlendDataPaintCurves", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02624", + "gapId": "rna:Main:BlendDataPalettes", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02625", + "gapId": "rna:Main:BlendDataParticles", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02626", + "gapId": "rna:Main:BlendDataPointClouds", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02627", + "gapId": "rna:Main:BlendDataProbes", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02628", + "gapId": "rna:Main:BlendDataScenes", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02629", + "gapId": "rna:Main:BlendDataScreens", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02630", + "gapId": "rna:Main:BlendDataSounds", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02631", + "gapId": "rna:Main:BlendDataSpeakers", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02632", + "gapId": "rna:Main:BlendDataTexts", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02633", + "gapId": "rna:Main:BlendDataTextures", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02634", + "gapId": "rna:Main:BlendDataVolumes", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02635", + "gapId": "rna:Main:BlendDataWindowManagers", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02636", + "gapId": "rna:Main:BlendDataWorkSpaces", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02637", + "gapId": "rna:Main:BlendDataWorlds", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02638", + "gapId": "rna:Mesh:Attribute", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02639", + "gapId": "rna:Mesh:AttributeGroupMesh", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02640", + "gapId": "rna:Mesh:BoolAttribute", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02641", + "gapId": "rna:Mesh:ByteColorAttribute", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02642", + "gapId": "rna:Mesh:FloatAttribute", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02643", + "gapId": "rna:Mesh:IntAttribute", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02644", + "gapId": "rna:Mesh:Mesh", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02645", + "gapId": "rna:Mesh:MeshAutomaskingSettings", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02646", + "gapId": "rna:Mesh:MeshCacheModifier", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02647", + "gapId": "rna:Mesh:MeshDeformModifier", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02648", + "gapId": "rna:Mesh:MeshEdge", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02649", + "gapId": "rna:Mesh:MeshEdges", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02650", + "gapId": "rna:Mesh:MeshLoop", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02651", + "gapId": "rna:Mesh:MeshLoopColor", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02652", + "gapId": "rna:Mesh:MeshLoopColorLayer", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02653", + "gapId": "rna:Mesh:MeshLoopTriangle", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02654", + "gapId": "rna:Mesh:MeshLoopTriangles", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02655", + "gapId": "rna:Mesh:MeshLoops", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02656", + "gapId": "rna:Mesh:MeshNormalValue", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02657", + "gapId": "rna:Mesh:MeshPolygon", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02658", + "gapId": "rna:Mesh:MeshPolygons", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02659", + "gapId": "rna:Mesh:MeshSequenceCacheModifier", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02660", + "gapId": "rna:Mesh:MeshSkinVertex", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02661", + "gapId": "rna:Mesh:MeshSkinVertexLayer", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02662", + "gapId": "rna:Mesh:MeshStatVis", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02663", + "gapId": "rna:Mesh:MeshToVolumeModifier", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02664", + "gapId": "rna:Mesh:MeshUVLoop", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02665", + "gapId": "rna:Mesh:MeshUVLoopLayer", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02666", + "gapId": "rna:Mesh:MeshVertex", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02667", + "gapId": "rna:Mesh:MeshVertices", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00001", + "gapId": "constraint:ACTION", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00002", + "gapId": "constraint:ARMATURE", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00003", + "gapId": "constraint:CAMERA_SOLVER", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00004", + "gapId": "constraint:CHILD_OF", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00005", + "gapId": "constraint:CLAMP_TO", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00006", + "gapId": "constraint:COPY_LOCATION", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00007", + "gapId": "constraint:COPY_ROTATION", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00008", + "gapId": "constraint:COPY_SCALE", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00009", + "gapId": "constraint:COPY_TRANSFORMS", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00010", + "gapId": "constraint:DAMPED_TRACK", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00011", + "gapId": "constraint:FLOOR", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00012", + "gapId": "constraint:FOLLOW_PATH", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00013", + "gapId": "constraint:FOLLOW_TRACK", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00014", + "gapId": "constraint:GEOMETRY_ATTRIBUTE", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00015", + "gapId": "constraint:IK", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00016", + "gapId": "constraint:LIMIT_DISTANCE", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00017", + "gapId": "constraint:LIMIT_LOCATION", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00018", + "gapId": "constraint:LIMIT_ROTATION", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00019", + "gapId": "constraint:LIMIT_SCALE", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00020", + "gapId": "constraint:LOCKED_TRACK", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00021", + "gapId": "constraint:MAINTAIN_VOLUME", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00022", + "gapId": "constraint:OBJECT_SOLVER", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00023", + "gapId": "constraint:PIVOT", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00024", + "gapId": "constraint:SHRINKWRAP", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00025", + "gapId": "constraint:SPLINE_IK", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00026", + "gapId": "constraint:STRETCH_TO", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00027", + "gapId": "constraint:TRACK_TO", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00028", + "gapId": "constraint:TRANSFORM", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00029", + "gapId": "constraint:TRANSFORM_CACHE", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00001", + "gapId": "node:Compositor:CompositorNodeAlphaOver", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00002", + "gapId": "node:Compositor:CompositorNodeAntiAliasing", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00003", + "gapId": "node:Compositor:CompositorNodeBilateralblur", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00004", + "gapId": "node:Compositor:CompositorNodeBlankImage", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00005", + "gapId": "node:Compositor:CompositorNodeBlur", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00006", + "gapId": "node:Compositor:CompositorNodeBokehBlur", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00007", + "gapId": "node:Compositor:CompositorNodeBokehImage", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00008", + "gapId": "node:Compositor:CompositorNodeBoxMask", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00009", + "gapId": "node:Compositor:CompositorNodeBrightContrast", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00010", + "gapId": "node:Compositor:CompositorNodeChannelMatte", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00011", + "gapId": "node:Compositor:CompositorNodeChromaMatte", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00012", + "gapId": "node:Compositor:CompositorNodeColorBalance", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00013", + "gapId": "node:Compositor:CompositorNodeColorCorrection", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00014", + "gapId": "node:Compositor:CompositorNodeColorMatte", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00015", + "gapId": "node:Compositor:CompositorNodeColorSpill", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00016", + "gapId": "node:Compositor:CompositorNodeCombineColor", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00017", + "gapId": "node:Compositor:CompositorNodeConvertColorSpace", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00018", + "gapId": "node:Compositor:CompositorNodeConvertToDisplay", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00019", + "gapId": "node:Compositor:CompositorNodeConvolve", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00020", + "gapId": "node:Compositor:CompositorNodeCornerPin", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00021", + "gapId": "node:Compositor:CompositorNodeCrop", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00022", + "gapId": "node:Compositor:CompositorNodeCryptomatte", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00023", + "gapId": "node:Compositor:CompositorNodeCryptomatteV2", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00024", + "gapId": "node:Compositor:CompositorNodeCurveRGB", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00025", + "gapId": "node:Compositor:CompositorNodeDBlur", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00026", + "gapId": "node:Compositor:CompositorNodeDefocus", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00027", + "gapId": "node:Compositor:CompositorNodeDenoise", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00028", + "gapId": "node:Compositor:CompositorNodeDespeckle", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00029", + "gapId": "node:Compositor:CompositorNodeDiffMatte", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00030", + "gapId": "node:Compositor:CompositorNodeDilateErode", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00031", + "gapId": "node:Compositor:CompositorNodeDisplace", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00032", + "gapId": "node:Compositor:CompositorNodeDistanceMatte", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00033", + "gapId": "node:Compositor:CompositorNodeDoubleEdgeMask", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00034", + "gapId": "node:Compositor:CompositorNodeEllipseMask", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00035", + "gapId": "node:Compositor:CompositorNodeExposure", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00036", + "gapId": "node:Compositor:CompositorNodeFilter", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00037", + "gapId": "node:Compositor:CompositorNodeFlip", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00038", + "gapId": "node:Compositor:CompositorNodeGlare", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00039", + "gapId": "node:Compositor:CompositorNodeGroup", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00040", + "gapId": "node:Compositor:CompositorNodeHueCorrect", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00041", + "gapId": "node:Compositor:CompositorNodeHueSat", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00042", + "gapId": "node:Compositor:CompositorNodeIDMask", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00043", + "gapId": "node:Compositor:CompositorNodeImage", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00044", + "gapId": "node:Compositor:CompositorNodeImageCoordinates", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00045", + "gapId": "node:Compositor:CompositorNodeImageInfo", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00046", + "gapId": "node:Compositor:CompositorNodeInpaint", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00047", + "gapId": "node:Compositor:CompositorNodeInvert", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00048", + "gapId": "node:Compositor:CompositorNodeKeying", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00049", + "gapId": "node:Compositor:CompositorNodeKeyingScreen", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00050", + "gapId": "node:Compositor:CompositorNodeKuwahara", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00051", + "gapId": "node:Compositor:CompositorNodeLensdist", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00052", + "gapId": "node:Compositor:CompositorNodeLevels", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00053", + "gapId": "node:Compositor:CompositorNodeLumaMatte", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00054", + "gapId": "node:Compositor:CompositorNodeMapUV", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00055", + "gapId": "node:Compositor:CompositorNodeMask", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00056", + "gapId": "node:Compositor:CompositorNodeMaskToSDF", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00057", + "gapId": "node:Compositor:CompositorNodeMovieClip", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00058", + "gapId": "node:Compositor:CompositorNodeMovieDistortion", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00059", + "gapId": "node:Compositor:CompositorNodeNormal", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00060", + "gapId": "node:Compositor:CompositorNodeNormalize", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00061", + "gapId": "node:Compositor:CompositorNodeOutputFile", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00062", + "gapId": "node:Compositor:CompositorNodePixelate", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00063", + "gapId": "node:Compositor:CompositorNodePlaneTrackDeform", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00064", + "gapId": "node:Compositor:CompositorNodePosterize", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00065", + "gapId": "node:Compositor:CompositorNodePremulKey", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00066", + "gapId": "node:Compositor:CompositorNodeRGB", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00067", + "gapId": "node:Compositor:CompositorNodeRGBToBW", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00068", + "gapId": "node:Compositor:CompositorNodeRLayers", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00069", + "gapId": "node:Compositor:CompositorNodeRelativeToPixel", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00070", + "gapId": "node:Compositor:CompositorNodeRotate", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00071", + "gapId": "node:Compositor:CompositorNodeScale", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00072", + "gapId": "node:Compositor:CompositorNodeSceneTime", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00073", + "gapId": "node:Compositor:CompositorNodeSeparateColor", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00074", + "gapId": "node:Compositor:CompositorNodeSequencerStripInfo", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00075", + "gapId": "node:Compositor:CompositorNodeSetAlpha", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00076", + "gapId": "node:Compositor:CompositorNodeSplit", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00077", + "gapId": "node:Compositor:CompositorNodeStabilize", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00078", + "gapId": "node:Compositor:CompositorNodeStringToImage", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00079", + "gapId": "node:Compositor:CompositorNodeSwitch", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00080", + "gapId": "node:Compositor:CompositorNodeSwitchView", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00081", + "gapId": "node:Compositor:CompositorNodeTime", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00082", + "gapId": "node:Compositor:CompositorNodeTonemap", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00083", + "gapId": "node:Compositor:CompositorNodeTrackPos", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00084", + "gapId": "node:Compositor:CompositorNodeTransform", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00085", + "gapId": "node:Compositor:CompositorNodeTranslate", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00086", + "gapId": "node:Compositor:CompositorNodeVecBlur", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00087", + "gapId": "node:Compositor:CompositorNodeViewer", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00088", + "gapId": "node:Compositor:CompositorNodeZcombine", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00089", + "gapId": "node:Geometry:GeometryNodeAccumulateField", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00090", + "gapId": "node:Geometry:GeometryNodeAttributeDomainSize", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00091", + "gapId": "node:Geometry:GeometryNodeAttributeStatistic", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00092", + "gapId": "node:Geometry:GeometryNodeBake", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00093", + "gapId": "node:Geometry:GeometryNodeBlurAttribute", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00094", + "gapId": "node:Geometry:GeometryNodeBoneInfo", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00095", + "gapId": "node:Geometry:GeometryNodeBoundBox", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00096", + "gapId": "node:Geometry:GeometryNodeCameraInfo", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00097", + "gapId": "node:Geometry:GeometryNodeCaptureAttribute", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00098", + "gapId": "node:Geometry:GeometryNodeClosureToList", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00099", + "gapId": "node:Geometry:GeometryNodeClusterByConnected", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00100", + "gapId": "node:Geometry:GeometryNodeClusterByDistance", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00101", + "gapId": "node:Geometry:GeometryNodeCollectionChildren", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00102", + "gapId": "node:Geometry:GeometryNodeCollectionInfo", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00103", + "gapId": "node:Geometry:GeometryNodeConvexHull", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00104", + "gapId": "node:Geometry:GeometryNodeCornersOfEdge", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00105", + "gapId": "node:Geometry:GeometryNodeCornersOfFace", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00106", + "gapId": "node:Geometry:GeometryNodeCornersOfVertex", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00107", + "gapId": "node:Geometry:GeometryNodeCubeGridTopology", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00108", + "gapId": "node:Geometry:GeometryNodeCurveArc", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00109", + "gapId": "node:Geometry:GeometryNodeCurveEndpointSelection", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00110", + "gapId": "node:Geometry:GeometryNodeCurveHandleTypeSelection", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00111", + "gapId": "node:Geometry:GeometryNodeCurveLength", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00112", + "gapId": "node:Geometry:GeometryNodeCurveOfPoint", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00113", + "gapId": "node:Geometry:GeometryNodeCurvePrimitiveBezierSegment", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00114", + "gapId": "node:Geometry:GeometryNodeCurvePrimitiveCircle", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00115", + "gapId": "node:Geometry:GeometryNodeCurvePrimitiveLine", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00116", + "gapId": "node:Geometry:GeometryNodeCurvePrimitiveQuadrilateral", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00117", + "gapId": "node:Geometry:GeometryNodeCurveQuadraticBezier", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00118", + "gapId": "node:Geometry:GeometryNodeCurveSetHandles", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00119", + "gapId": "node:Geometry:GeometryNodeCurveSpiral", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00120", + "gapId": "node:Geometry:GeometryNodeCurveSplineType", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00121", + "gapId": "node:Geometry:GeometryNodeCurveStar", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00122", + "gapId": "node:Geometry:GeometryNodeCurveToMesh", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00123", + "gapId": "node:Geometry:GeometryNodeCurveToPoints", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00124", + "gapId": "node:Geometry:GeometryNodeCurvesToGreasePencil", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00125", + "gapId": "node:Geometry:GeometryNodeDeformCurvesOnSurface", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00126", + "gapId": "node:Geometry:GeometryNodeDeleteGeometry", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00127", + "gapId": "node:Geometry:GeometryNodeDistributePointsInGrid", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00128", + "gapId": "node:Geometry:GeometryNodeDistributePointsInVolume", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00129", + "gapId": "node:Geometry:GeometryNodeDistributePointsOnFaces", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00130", + "gapId": "node:Geometry:GeometryNodeDualMesh", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00131", + "gapId": "node:Geometry:GeometryNodeDuplicateElements", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00132", + "gapId": "node:Geometry:GeometryNodeEdgePathsToCurves", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00133", + "gapId": "node:Geometry:GeometryNodeEdgePathsToSelection", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00134", + "gapId": "node:Geometry:GeometryNodeEdgesOfCorner", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00135", + "gapId": "node:Geometry:GeometryNodeEdgesOfVertex", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00136", + "gapId": "node:Geometry:GeometryNodeEdgesToFaceGroups", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00137", + "gapId": "node:Geometry:GeometryNodeExtrudeMesh", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00138", + "gapId": "node:Geometry:GeometryNodeFaceOfCorner", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00139", + "gapId": "node:Geometry:GeometryNodeFieldAtIndex", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00140", + "gapId": "node:Geometry:GeometryNodeFieldAverage", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00141", + "gapId": "node:Geometry:GeometryNodeFieldMinAndMax", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00142", + "gapId": "node:Geometry:GeometryNodeFieldOnDomain", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00143", + "gapId": "node:Geometry:GeometryNodeFieldToGrid", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00144", + "gapId": "node:Geometry:GeometryNodeFieldToList", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00145", + "gapId": "node:Geometry:GeometryNodeFieldVariance", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00146", + "gapId": "node:Geometry:GeometryNodeFillCurve", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00147", + "gapId": "node:Geometry:GeometryNodeFilletCurve", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00148", + "gapId": "node:Geometry:GeometryNodeFilterList", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00149", + "gapId": "node:Geometry:GeometryNodeFlipFaces", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00150", + "gapId": "node:Geometry:GeometryNodeForeachGeometryElementInput", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00151", + "gapId": "node:Geometry:GeometryNodeForeachGeometryElementOutput", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00152", + "gapId": "node:Geometry:GeometryNodeGeometryToInstance", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00153", + "gapId": "node:Geometry:GeometryNodeGetAttributeNames", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00154", + "gapId": "node:Geometry:GeometryNodeGetGeometryBundle", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00155", + "gapId": "node:Geometry:GeometryNodeGetGeometryComponent", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00156", + "gapId": "node:Geometry:GeometryNodeGetNamedGrid", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00157", + "gapId": "node:Geometry:GeometryNodeGizmoDial", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00158", + "gapId": "node:Geometry:GeometryNodeGizmoLinear", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00159", + "gapId": "node:Geometry:GeometryNodeGizmoTransform", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00160", + "gapId": "node:Geometry:GeometryNodeGreasePencilToCurves", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00161", + "gapId": "node:Geometry:GeometryNodeGridAdvect", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00162", + "gapId": "node:Geometry:GeometryNodeGridClip", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00163", + "gapId": "node:Geometry:GeometryNodeGridCurl", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00164", + "gapId": "node:Geometry:GeometryNodeGridDilateAndErode", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00165", + "gapId": "node:Geometry:GeometryNodeGridDivergence", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00166", + "gapId": "node:Geometry:GeometryNodeGridGradient", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00167", + "gapId": "node:Geometry:GeometryNodeGridInfo", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00168", + "gapId": "node:Geometry:GeometryNodeGridLaplacian", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00169", + "gapId": "node:Geometry:GeometryNodeGridMean", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00170", + "gapId": "node:Geometry:GeometryNodeGridMedian", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00171", + "gapId": "node:Geometry:GeometryNodeGridPrune", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00172", + "gapId": "node:Geometry:GeometryNodeGridToMesh", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00173", + "gapId": "node:Geometry:GeometryNodeGridToPoints", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00174", + "gapId": "node:Geometry:GeometryNodeGridVoxelize", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00175", + "gapId": "node:Geometry:GeometryNodeGroup", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00176", + "gapId": "node:Geometry:GeometryNodeImageInfo", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00177", + "gapId": "node:Geometry:GeometryNodeImageTexture", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00178", + "gapId": "node:Geometry:GeometryNodeImportCSV", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00179", + "gapId": "node:Geometry:GeometryNodeImportOBJ", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00180", + "gapId": "node:Geometry:GeometryNodeImportPLY", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00181", + "gapId": "node:Geometry:GeometryNodeImportSTL", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00182", + "gapId": "node:Geometry:GeometryNodeImportText", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00183", + "gapId": "node:Geometry:GeometryNodeImportVDB", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00184", + "gapId": "node:Geometry:GeometryNodeIndexOfNearest", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00185", + "gapId": "node:Geometry:GeometryNodeIndexSwitch", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00186", + "gapId": "node:Geometry:GeometryNodeInputActiveCamera", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00187", + "gapId": "node:Geometry:GeometryNodeInputCollection", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00188", + "gapId": "node:Geometry:GeometryNodeInputCurveHandlePositions", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00189", + "gapId": "node:Geometry:GeometryNodeInputCurveTilt", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00190", + "gapId": "node:Geometry:GeometryNodeInputEdgeSmooth", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00191", + "gapId": "node:Geometry:GeometryNodeInputFont", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00192", + "gapId": "node:Geometry:GeometryNodeInputID", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00193", + "gapId": "node:Geometry:GeometryNodeInputImage", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00194", + "gapId": "node:Geometry:GeometryNodeInputIndex", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00195", + "gapId": "node:Geometry:GeometryNodeInputInstanceBounds", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00196", + "gapId": "node:Geometry:GeometryNodeInputInstanceReference", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00197", + "gapId": "node:Geometry:GeometryNodeInputInstanceRotation", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00198", + "gapId": "node:Geometry:GeometryNodeInputInstanceScale", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00199", + "gapId": "node:Geometry:GeometryNodeInputMaterial", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00200", + "gapId": "node:Geometry:GeometryNodeInputMaterialIndex", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00201", + "gapId": "node:Geometry:GeometryNodeInputMeshEdgeAngle", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00202", + "gapId": "node:Geometry:GeometryNodeInputMeshEdgeNeighbors", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00203", + "gapId": "node:Geometry:GeometryNodeInputMeshEdgeVertices", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00204", + "gapId": "node:Geometry:GeometryNodeInputMeshFaceArea", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00205", + "gapId": "node:Geometry:GeometryNodeInputMeshFaceIsPlanar", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00206", + "gapId": "node:Geometry:GeometryNodeInputMeshFaceNeighbors", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00207", + "gapId": "node:Geometry:GeometryNodeInputMeshIsland", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00208", + "gapId": "node:Geometry:GeometryNodeInputMeshVertexNeighbors", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00209", + "gapId": "node:Geometry:GeometryNodeInputNamedAttribute", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00210", + "gapId": "node:Geometry:GeometryNodeInputNamedLayerSelection", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00211", + "gapId": "node:Geometry:GeometryNodeInputNormal", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00212", + "gapId": "node:Geometry:GeometryNodeInputObject", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00213", + "gapId": "node:Geometry:GeometryNodeInputPosition", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00214", + "gapId": "node:Geometry:GeometryNodeInputRadius", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00215", + "gapId": "node:Geometry:GeometryNodeInputSceneTime", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00216", + "gapId": "node:Geometry:GeometryNodeInputShadeSmooth", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00217", + "gapId": "node:Geometry:GeometryNodeInputShortestEdgePaths", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00218", + "gapId": "node:Geometry:GeometryNodeInputSplineCyclic", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00219", + "gapId": "node:Geometry:GeometryNodeInputSplineResolution", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00220", + "gapId": "node:Geometry:GeometryNodeInputTangent", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00221", + "gapId": "node:Geometry:GeometryNodeInputVoxelIndex", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00222", + "gapId": "node:Geometry:GeometryNodeInstanceOnPoints", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00223", + "gapId": "node:Geometry:GeometryNodeInstanceTransform", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00224", + "gapId": "node:Geometry:GeometryNodeInstancesToPoints", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00225", + "gapId": "node:Geometry:GeometryNodeInterpolateCurves", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00226", + "gapId": "node:Geometry:GeometryNodeIsViewport", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00227", + "gapId": "node:Geometry:GeometryNodeJoinGeometry", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00228", + "gapId": "node:Geometry:GeometryNodeListGetItem", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00229", + "gapId": "node:Geometry:GeometryNodeListLength", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00230", + "gapId": "node:Geometry:GeometryNodeMaterialSelection", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00231", + "gapId": "node:Geometry:GeometryNodeMenuSwitch", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00232", + "gapId": "node:Geometry:GeometryNodeMergeByDistance", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00233", + "gapId": "node:Geometry:GeometryNodeMergeLayers", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00234", + "gapId": "node:Geometry:GeometryNodeMergePoints", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00235", + "gapId": "node:Geometry:GeometryNodeMeshBevel", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00236", + "gapId": "node:Geometry:GeometryNodeMeshBoolean", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00237", + "gapId": "node:Geometry:GeometryNodeMeshCircle", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00238", + "gapId": "node:Geometry:GeometryNodeMeshCone", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00239", + "gapId": "node:Geometry:GeometryNodeMeshCube", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00240", + "gapId": "node:Geometry:GeometryNodeMeshCylinder", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00241", + "gapId": "node:Geometry:GeometryNodeMeshFaceSetBoundaries", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00242", + "gapId": "node:Geometry:GeometryNodeMeshGrid", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00243", + "gapId": "node:Geometry:GeometryNodeMeshIcoSphere", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00244", + "gapId": "node:Geometry:GeometryNodeMeshLine", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00245", + "gapId": "node:Geometry:GeometryNodeMeshToCurve", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00246", + "gapId": "node:Geometry:GeometryNodeMeshToDensityGrid", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00247", + "gapId": "node:Geometry:GeometryNodeMeshToPoints", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00248", + "gapId": "node:Geometry:GeometryNodeMeshToSDFGrid", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00249", + "gapId": "node:Geometry:GeometryNodeMeshToVolume", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00250", + "gapId": "node:Geometry:GeometryNodeMeshUVSphere", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00251", + "gapId": "node:Geometry:GeometryNodeObjectInfo", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00252", + "gapId": "node:Geometry:GeometryNodeOffsetCornerInFace", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00253", + "gapId": "node:Geometry:GeometryNodeOffsetPointInCurve", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00254", + "gapId": "node:Geometry:GeometryNodePoints", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00255", + "gapId": "node:Geometry:GeometryNodePointsOfCurve", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00256", + "gapId": "node:Geometry:GeometryNodePointsToCurves", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00257", + "gapId": "node:Geometry:GeometryNodePointsToSDFGrid", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00258", + "gapId": "node:Geometry:GeometryNodePointsToVertices", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00259", + "gapId": "node:Geometry:GeometryNodePointsToVolume", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00260", + "gapId": "node:Geometry:GeometryNodeProximity", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00261", + "gapId": "node:Geometry:GeometryNodeRaycast", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00262", + "gapId": "node:Geometry:GeometryNodeRealizeInstances", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00263", + "gapId": "node:Geometry:GeometryNodeRemoveAttribute", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00264", + "gapId": "node:Geometry:GeometryNodeRenameAttribute", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00265", + "gapId": "node:Geometry:GeometryNodeRepeatInput", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00266", + "gapId": "node:Geometry:GeometryNodeRepeatOutput", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00267", + "gapId": "node:Geometry:GeometryNodeReplaceMaterial", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00268", + "gapId": "node:Geometry:GeometryNodeResampleCurve", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00269", + "gapId": "node:Geometry:GeometryNodeReverseCurve", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00270", + "gapId": "node:Geometry:GeometryNodeRotateInstances", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00271", + "gapId": "node:Geometry:GeometryNodeSDFGridBoolean", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00272", + "gapId": "node:Geometry:GeometryNodeSDFGridFillet", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00273", + "gapId": "node:Geometry:GeometryNodeSDFGridLaplacian", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00274", + "gapId": "node:Geometry:GeometryNodeSDFGridMean", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00275", + "gapId": "node:Geometry:GeometryNodeSDFGridMeanCurvature", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00276", + "gapId": "node:Geometry:GeometryNodeSDFGridMedian", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00277", + "gapId": "node:Geometry:GeometryNodeSDFGridOffset", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00278", + "gapId": "node:Geometry:GeometryNodeSampleCurve", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00279", + "gapId": "node:Geometry:GeometryNodeSampleGrid", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00280", + "gapId": "node:Geometry:GeometryNodeSampleGridIndex", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00281", + "gapId": "node:Geometry:GeometryNodeSampleIndex", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00282", + "gapId": "node:Geometry:GeometryNodeSampleNearest", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00283", + "gapId": "node:Geometry:GeometryNodeSampleNearestSurface", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00284", + "gapId": "node:Geometry:GeometryNodeSampleSoundFrequencies", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00285", + "gapId": "node:Geometry:GeometryNodeSampleUVSurface", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00286", + "gapId": "node:Geometry:GeometryNodeScaleElements", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00287", + "gapId": "node:Geometry:GeometryNodeScaleInstances", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00288", + "gapId": "node:Geometry:GeometryNodeSelfObject", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00289", + "gapId": "node:Geometry:GeometryNodeSeparateComponents", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00290", + "gapId": "node:Geometry:GeometryNodeSeparateGeometry", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00291", + "gapId": "node:Geometry:GeometryNodeSetCurveHandlePositions", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00292", + "gapId": "node:Geometry:GeometryNodeSetCurveNormal", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00293", + "gapId": "node:Geometry:GeometryNodeSetCurveRadius", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00294", + "gapId": "node:Geometry:GeometryNodeSetCurveTilt", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00295", + "gapId": "node:Geometry:GeometryNodeSetGeometryBundle", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00296", + "gapId": "node:Geometry:GeometryNodeSetGeometryName", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00297", + "gapId": "node:Geometry:GeometryNodeSetGreasePencilColor", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00298", + "gapId": "node:Geometry:GeometryNodeSetGreasePencilDepth", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00299", + "gapId": "node:Geometry:GeometryNodeSetGreasePencilSoftness", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00300", + "gapId": "node:Geometry:GeometryNodeSetGridBackground", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00301", + "gapId": "node:Geometry:GeometryNodeSetGridTransform", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00302", + "gapId": "node:Geometry:GeometryNodeSetID", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00303", + "gapId": "node:Geometry:GeometryNodeSetInstanceTransform", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00304", + "gapId": "node:Geometry:GeometryNodeSetMaterial", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00305", + "gapId": "node:Geometry:GeometryNodeSetMaterialIndex", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00306", + "gapId": "node:Geometry:GeometryNodeSetMeshNormal", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00307", + "gapId": "node:Geometry:GeometryNodeSetNURBSOrder", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00308", + "gapId": "node:Geometry:GeometryNodeSetNURBSWeight", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00309", + "gapId": "node:Geometry:GeometryNodeSetPointRadius", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00310", + "gapId": "node:Geometry:GeometryNodeSetPosition", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00311", + "gapId": "node:Geometry:GeometryNodeSetShadeSmooth", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00312", + "gapId": "node:Geometry:GeometryNodeSetSplineCyclic", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00313", + "gapId": "node:Geometry:GeometryNodeSetSplineResolution", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00314", + "gapId": "node:Geometry:GeometryNodeSimulationInput", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00315", + "gapId": "node:Geometry:GeometryNodeSimulationOutput", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00316", + "gapId": "node:Geometry:GeometryNodeSortElements", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00317", + "gapId": "node:Geometry:GeometryNodeSortList", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00318", + "gapId": "node:Geometry:GeometryNodeSplineLength", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00319", + "gapId": "node:Geometry:GeometryNodeSplineParameter", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00320", + "gapId": "node:Geometry:GeometryNodeSplitEdges", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00321", + "gapId": "node:Geometry:GeometryNodeSplitToInstances", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00322", + "gapId": "node:Geometry:GeometryNodeStoreNamedAttribute", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00323", + "gapId": "node:Geometry:GeometryNodeStoreNamedGrid", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00324", + "gapId": "node:Geometry:GeometryNodeStringJoin", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00325", + "gapId": "node:Geometry:GeometryNodeStringToCurves", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00326", + "gapId": "node:Geometry:GeometryNodeSubdivideCurve", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00327", + "gapId": "node:Geometry:GeometryNodeSubdivideMesh", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00328", + "gapId": "node:Geometry:GeometryNodeSubdivisionSurface", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00329", + "gapId": "node:Geometry:GeometryNodeSwitch", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00330", + "gapId": "node:Geometry:GeometryNodeTagFilter", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00331", + "gapId": "node:Geometry:GeometryNodeTool3DCursor", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00332", + "gapId": "node:Geometry:GeometryNodeToolActiveElement", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00333", + "gapId": "node:Geometry:GeometryNodeToolFaceSet", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00334", + "gapId": "node:Geometry:GeometryNodeToolMousePosition", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00335", + "gapId": "node:Geometry:GeometryNodeToolSelection", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00336", + "gapId": "node:Geometry:GeometryNodeToolSetFaceSet", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00337", + "gapId": "node:Geometry:GeometryNodeToolSetSelection", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00338", + "gapId": "node:Geometry:GeometryNodeTransferAttributes", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00339", + "gapId": "node:Geometry:GeometryNodeTransform", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00340", + "gapId": "node:Geometry:GeometryNodeTranslateInstances", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00341", + "gapId": "node:Geometry:GeometryNodeTriangulate", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00342", + "gapId": "node:Geometry:GeometryNodeTrimCurve", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00343", + "gapId": "node:Geometry:GeometryNodeUVPackIslands", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00344", + "gapId": "node:Geometry:GeometryNodeUVTangent", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00345", + "gapId": "node:Geometry:GeometryNodeUVUnwrap", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00346", + "gapId": "node:Geometry:GeometryNodeVertexOfCorner", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00347", + "gapId": "node:Geometry:GeometryNodeViewer", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00348", + "gapId": "node:Geometry:GeometryNodeViewportTransform", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00349", + "gapId": "node:Geometry:GeometryNodeVolumeCube", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00350", + "gapId": "node:Geometry:GeometryNodeVolumeToMesh", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00351", + "gapId": "node:Geometry:GeometryNodeWarning", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00352", + "gapId": "node:Geometry:GeometryNodeXPBDSolver", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00353", + "gapId": "node:Shader:ShaderNodeAddShader", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00354", + "gapId": "node:Shader:ShaderNodeAmbientOcclusion", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00355", + "gapId": "node:Shader:ShaderNodeAttribute", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00356", + "gapId": "node:Shader:ShaderNodeBackground", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00357", + "gapId": "node:Shader:ShaderNodeBevel", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00358", + "gapId": "node:Shader:ShaderNodeBlackbody", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00359", + "gapId": "node:Shader:ShaderNodeBrightContrast", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00360", + "gapId": "node:Shader:ShaderNodeBsdfAnisotropic", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00361", + "gapId": "node:Shader:ShaderNodeBsdfDiffuse", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00362", + "gapId": "node:Shader:ShaderNodeBsdfGlass", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00363", + "gapId": "node:Shader:ShaderNodeBsdfHair", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00364", + "gapId": "node:Shader:ShaderNodeBsdfHairPrincipled", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00365", + "gapId": "node:Shader:ShaderNodeBsdfMetallic", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00366", + "gapId": "node:Shader:ShaderNodeBsdfPrincipled", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00367", + "gapId": "node:Shader:ShaderNodeBsdfRayPortal", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00368", + "gapId": "node:Shader:ShaderNodeBsdfRefraction", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00369", + "gapId": "node:Shader:ShaderNodeBsdfSheen", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00370", + "gapId": "node:Shader:ShaderNodeBsdfToon", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00371", + "gapId": "node:Shader:ShaderNodeBsdfTranslucent", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00372", + "gapId": "node:Shader:ShaderNodeBsdfTransparent", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00373", + "gapId": "node:Shader:ShaderNodeBump", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00374", + "gapId": "node:Shader:ShaderNodeCameraData", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00375", + "gapId": "node:Shader:ShaderNodeClamp", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00376", + "gapId": "node:Shader:ShaderNodeCombineColor", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00377", + "gapId": "node:Shader:ShaderNodeCombineXYZ", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00378", + "gapId": "node:Shader:ShaderNodeDisplacement", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00379", + "gapId": "node:Shader:ShaderNodeEeveeSpecular", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00380", + "gapId": "node:Shader:ShaderNodeEmission", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00381", + "gapId": "node:Shader:ShaderNodeFloatCurve", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00382", + "gapId": "node:Shader:ShaderNodeFresnel", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00383", + "gapId": "node:Shader:ShaderNodeGamma", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00384", + "gapId": "node:Shader:ShaderNodeGroup", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00385", + "gapId": "node:Shader:ShaderNodeHairInfo", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00386", + "gapId": "node:Shader:ShaderNodeHoldout", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00387", + "gapId": "node:Shader:ShaderNodeHueSaturation", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00388", + "gapId": "node:Shader:ShaderNodeInvert", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00389", + "gapId": "node:Shader:ShaderNodeLayerWeight", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00390", + "gapId": "node:Shader:ShaderNodeLightFalloff", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00391", + "gapId": "node:Shader:ShaderNodeLightPath", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00392", + "gapId": "node:Shader:ShaderNodeMapRange", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00393", + "gapId": "node:Shader:ShaderNodeMapping", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00394", + "gapId": "node:Shader:ShaderNodeMath", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00395", + "gapId": "node:Shader:ShaderNodeMix", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00396", + "gapId": "node:Shader:ShaderNodeMixRGB", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00397", + "gapId": "node:Shader:ShaderNodeMixShader", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00398", + "gapId": "node:Shader:ShaderNodeNewGeometry", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00399", + "gapId": "node:Shader:ShaderNodeNormal", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00400", + "gapId": "node:Shader:ShaderNodeNormalMap", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00401", + "gapId": "node:Shader:ShaderNodeObjectInfo", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00402", + "gapId": "node:Shader:ShaderNodeOutputAOV", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00403", + "gapId": "node:Shader:ShaderNodeOutputLight", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00404", + "gapId": "node:Shader:ShaderNodeOutputLineStyle", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00405", + "gapId": "node:Shader:ShaderNodeOutputMaterial", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00406", + "gapId": "node:Shader:ShaderNodeOutputWorld", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00407", + "gapId": "node:Shader:ShaderNodeParticleInfo", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00408", + "gapId": "node:Shader:ShaderNodePointInfo", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00409", + "gapId": "node:Shader:ShaderNodeRGB", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00410", + "gapId": "node:Shader:ShaderNodeRGBCurve", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00411", + "gapId": "node:Shader:ShaderNodeRGBToBW", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00412", + "gapId": "node:Shader:ShaderNodeRadialTiling", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00413", + "gapId": "node:Shader:ShaderNodeRaycast", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00414", + "gapId": "node:Shader:ShaderNodeScript", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00415", + "gapId": "node:Shader:ShaderNodeSeparateColor", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00416", + "gapId": "node:Shader:ShaderNodeSeparateXYZ", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00417", + "gapId": "node:Shader:ShaderNodeShaderToRGB", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00418", + "gapId": "node:Shader:ShaderNodeSqueeze", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00419", + "gapId": "node:Shader:ShaderNodeSubsurfaceScattering", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00420", + "gapId": "node:Shader:ShaderNodeTangent", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00421", + "gapId": "node:Shader:ShaderNodeTexBrick", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00422", + "gapId": "node:Shader:ShaderNodeTexChecker", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00423", + "gapId": "node:Shader:ShaderNodeTexCoord", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00424", + "gapId": "node:Shader:ShaderNodeTexEnvironment", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00425", + "gapId": "node:Shader:ShaderNodeTexGabor", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00426", + "gapId": "node:Shader:ShaderNodeTexGradient", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00427", + "gapId": "node:Shader:ShaderNodeTexIES", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00428", + "gapId": "node:Shader:ShaderNodeTexImage", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00429", + "gapId": "node:Shader:ShaderNodeTexMagic", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00430", + "gapId": "node:Shader:ShaderNodeTexNoise", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00431", + "gapId": "node:Shader:ShaderNodeTexSky", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00432", + "gapId": "node:Shader:ShaderNodeTexVoronoi", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00433", + "gapId": "node:Shader:ShaderNodeTexWave", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00434", + "gapId": "node:Shader:ShaderNodeTexWhiteNoise", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00435", + "gapId": "node:Shader:ShaderNodeUVAlongStroke", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00436", + "gapId": "node:Shader:ShaderNodeUVMap", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00437", + "gapId": "node:Shader:ShaderNodeValToRGB", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00438", + "gapId": "node:Shader:ShaderNodeValue", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00439", + "gapId": "node:Shader:ShaderNodeVectorCurve", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00440", + "gapId": "node:Shader:ShaderNodeVectorDisplacement", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00441", + "gapId": "node:Shader:ShaderNodeVectorMath", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00442", + "gapId": "node:Shader:ShaderNodeVectorRotate", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00443", + "gapId": "node:Shader:ShaderNodeVectorTransform", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00444", + "gapId": "node:Shader:ShaderNodeVertexColor", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00445", + "gapId": "node:Shader:ShaderNodeVolumeAbsorption", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00446", + "gapId": "node:Shader:ShaderNodeVolumeCoefficients", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00447", + "gapId": "node:Shader:ShaderNodeVolumeInfo", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00448", + "gapId": "node:Shader:ShaderNodeVolumePrincipled", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00449", + "gapId": "node:Shader:ShaderNodeVolumeScatter", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00450", + "gapId": "node:Shader:ShaderNodeWavelength", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00451", + "gapId": "node:Shader:ShaderNodeWireframe", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00001", + "gapId": "rna:Core:Action", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00002", + "gapId": "rna:Core:Armature", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00003", + "gapId": "rna:Core:Brush", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00004", + "gapId": "rna:Core:Curve", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00005", + "gapId": "rna:Core:Curves", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00006", + "gapId": "rna:Core:GreasePencil", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00007", + "gapId": "rna:Core:ID", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00008", + "gapId": "rna:Core:Image", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00009", + "gapId": "rna:Core:Key", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00010", + "gapId": "rna:Core:Lattice", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00011", + "gapId": "rna:Core:Mask", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00012", + "gapId": "rna:Core:MetaBall", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00013", + "gapId": "rna:Core:MovieClip", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00014", + "gapId": "rna:Core:Palette", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00015", + "gapId": "rna:Core:ParticleSettings", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00016", + "gapId": "rna:Core:PointCloud", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00017", + "gapId": "rna:Core:Sound", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00018", + "gapId": "rna:Core:Speaker", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00019", + "gapId": "rna:Core:Text", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00020", + "gapId": "rna:Core:Volume", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00001", + "gapId": "physics:BakeSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00002", + "gapId": "physics:BlendDataParticles", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00003", + "gapId": "physics:BoidRule", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00004", + "gapId": "physics:BoidRuleAverageSpeed", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00005", + "gapId": "physics:BoidRuleAvoid", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00006", + "gapId": "physics:BoidRuleAvoidCollision", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00007", + "gapId": "physics:BoidRuleFight", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00008", + "gapId": "physics:BoidRuleFollowLeader", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00009", + "gapId": "physics:BoidRuleGoal", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00010", + "gapId": "physics:BoidSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00011", + "gapId": "physics:BoidState", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00012", + "gapId": "physics:ChildParticle", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00013", + "gapId": "physics:ClothCollisionSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00014", + "gapId": "physics:ClothModifier", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00015", + "gapId": "physics:ClothSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00016", + "gapId": "physics:ClothSolverResult", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00017", + "gapId": "physics:CollisionModifier", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00018", + "gapId": "physics:CollisionSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00019", + "gapId": "physics:DynamicPaintBrushSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00020", + "gapId": "physics:DynamicPaintCanvasSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00021", + "gapId": "physics:DynamicPaintModifier", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00022", + "gapId": "physics:DynamicPaintSurface", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00023", + "gapId": "physics:DynamicPaintSurfaces", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00024", + "gapId": "physics:EffectorWeights", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00025", + "gapId": "physics:FieldSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00026", + "gapId": "physics:FluidDomainSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00027", + "gapId": "physics:FluidEffectorSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00028", + "gapId": "physics:FluidFlowSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00029", + "gapId": "physics:FluidModifier", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00030", + "gapId": "physics:GeometryNodeAccumulateField", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00031", + "gapId": "physics:GeometryNodeFieldAtIndex", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00032", + "gapId": "physics:GeometryNodeFieldAverage", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00033", + "gapId": "physics:GeometryNodeFieldMinAndMax", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00034", + "gapId": "physics:GeometryNodeFieldOnDomain", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00035", + "gapId": "physics:GeometryNodeFieldToGrid", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00036", + "gapId": "physics:GeometryNodeFieldToGridItem", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00037", + "gapId": "physics:GeometryNodeFieldToGridItems", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00038", + "gapId": "physics:GeometryNodeFieldToList", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00039", + "gapId": "physics:GeometryNodeFieldToListItem", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00040", + "gapId": "physics:GeometryNodeFieldToListItems", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00041", + "gapId": "physics:GeometryNodeFieldVariance", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00042", + "gapId": "physics:Particle", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00043", + "gapId": "physics:ParticleBrush", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00044", + "gapId": "physics:ParticleDupliWeight", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00045", + "gapId": "physics:ParticleEdit", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00046", + "gapId": "physics:ParticleHairKey", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00047", + "gapId": "physics:ParticleInstanceModifier", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00048", + "gapId": "physics:ParticleKey", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00049", + "gapId": "physics:ParticleSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00050", + "gapId": "physics:ParticleSettingsTextureSlot", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00051", + "gapId": "physics:ParticleSettingsTextureSlots", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00052", + "gapId": "physics:ParticleSystem", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00053", + "gapId": "physics:ParticleSystemModifier", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00054", + "gapId": "physics:ParticleSystems", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00055", + "gapId": "physics:ParticleTarget", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00056", + "gapId": "physics:PointCache", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00057", + "gapId": "physics:PointCacheItem", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00058", + "gapId": "physics:PointCaches", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00059", + "gapId": "physics:RigidBodyConstraint", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00060", + "gapId": "physics:RigidBodyObject", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00061", + "gapId": "physics:RigidBodyWorld", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00062", + "gapId": "physics:SPHFluidSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00063", + "gapId": "physics:ShaderNodeParticleInfo", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00064", + "gapId": "physics:SoftBodyModifier", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00065", + "gapId": "physics:SoftBodySettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00066", + "gapId": "strip:ADD", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00067", + "gapId": "strip:ADJUSTMENT", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00068", + "gapId": "strip:ALPHA_OVER", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00069", + "gapId": "strip:ALPHA_UNDER", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00070", + "gapId": "strip:COLOR", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00071", + "gapId": "strip:COLORMIX", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00072", + "gapId": "strip:COMPOSITOR", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00073", + "gapId": "strip:CROSS", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00074", + "gapId": "strip:GAMMA_CROSS", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00075", + "gapId": "strip:GAUSSIAN_BLUR", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00076", + "gapId": "strip:GLOW", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00077", + "gapId": "strip:IMAGE", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00078", + "gapId": "strip:MASK", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00079", + "gapId": "strip:META", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00080", + "gapId": "strip:MOVIE", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00081", + "gapId": "strip:MOVIECLIP", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00082", + "gapId": "strip:MULTICAM", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00083", + "gapId": "strip:MULTIPLY", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00084", + "gapId": "strip:SCENE", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00085", + "gapId": "strip:SOUND", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00086", + "gapId": "strip:SPEED", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00087", + "gapId": "strip:SUBTRACT", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00088", + "gapId": "strip:TEXT", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00089", + "gapId": "strip:WIPE", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00001", + "gapId": "area:CLIP_EDITOR", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00002", + "gapId": "area:CONSOLE", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00003", + "gapId": "area:DOPESHEET_EDITOR", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00004", + "gapId": "area:EMPTY", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00005", + "gapId": "area:FILE_BROWSER", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00006", + "gapId": "area:GRAPH_EDITOR", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00007", + "gapId": "area:IMAGE_EDITOR", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00008", + "gapId": "area:INFO", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00009", + "gapId": "area:NLA_EDITOR", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00010", + "gapId": "area:NODE_EDITOR", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00011", + "gapId": "area:OUTLINER", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00012", + "gapId": "area:PREFERENCES", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00013", + "gapId": "area:PROPERTIES", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00014", + "gapId": "area:SEQUENCE_EDITOR", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00015", + "gapId": "area:SPREADSHEET", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00016", + "gapId": "area:STATUSBAR", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00017", + "gapId": "area:TEXT_EDITOR", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00018", + "gapId": "area:TOPBAR", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00019", + "gapId": "area:VIEW_3D", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00020", + "gapId": "io:anim.keying_set_export", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00021", + "gapId": "io:collection.export_all", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00022", + "gapId": "io:collection.exporter_add", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00023", + "gapId": "io:collection.exporter_export", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00024", + "gapId": "io:collection.exporter_move", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00025", + "gapId": "io:collection.exporter_remove", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00026", + "gapId": "io:collection.importer_add", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00027", + "gapId": "io:collection.importer_remove", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00028", + "gapId": "io:export_anim.bvh", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00029", + "gapId": "io:export_scene.fbx", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00030", + "gapId": "io:export_scene.gltf", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00031", + "gapId": "io:image.import_as_mesh_planes", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00032", + "gapId": "io:import_anim.bvh", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00033", + "gapId": "io:import_curve.svg", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00034", + "gapId": "io:import_scene.fbx", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00035", + "gapId": "io:import_scene.gltf", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00036", + "gapId": "io:node.add_import_node", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00037", + "gapId": "io:object.volume_import", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00038", + "gapId": "io:preferences.keyconfig_export", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00039", + "gapId": "io:preferences.keyconfig_import", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00040", + "gapId": "io:sequencer.export_subtitles", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00041", + "gapId": "io:uv.export_layout", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00042", + "gapId": "io:wm.collection_export_all", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00043", + "gapId": "io:wm.drop_import_file", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00044", + "gapId": "io:wm.fbx_import", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00045", + "gapId": "io:wm.grease_pencil_export_svg", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00046", + "gapId": "io:wm.grease_pencil_import_svg", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00047", + "gapId": "io:wm.obj_export", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00048", + "gapId": "io:wm.obj_import", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00049", + "gapId": "io:wm.ply_export", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00050", + "gapId": "io:wm.ply_import", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00051", + "gapId": "io:wm.stl_export", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00052", + "gapId": "io:wm.stl_import", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00053", + "gapId": "keymap-item:3D View Generic:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00054", + "gapId": "keymap-item:3D View Generic:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00055", + "gapId": "keymap-item:3D View Tool: Bend:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00056", + "gapId": "keymap-item:3D View Tool: Breakdowner:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00057", + "gapId": "keymap-item:3D View Tool: Cursor:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00058", + "gapId": "keymap-item:3D View Tool: Cursor:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00059", + "gapId": "keymap-item:3D View Tool: Edit Armature, B-Bone Size:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00060", + "gapId": "keymap-item:3D View Tool: Edit Armature, Bone Envelope:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00061", + "gapId": "keymap-item:3D View Tool: Edit Armature, Extrude to Cursor:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00062", + "gapId": "keymap-item:3D View Tool: Edit Armature, Extrude:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00063", + "gapId": "keymap-item:3D View Tool: Edit Armature, Roll:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00064", + "gapId": "keymap-item:3D View Tool: Edit Curve, Curve Pen:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00065", + "gapId": "keymap-item:3D View Tool: Edit Curve, Curve Pen:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00066", + "gapId": "keymap-item:3D View Tool: Edit Curve, Curve Pen:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00067", + "gapId": "keymap-item:3D View Tool: Edit Curve, Draw:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00068", + "gapId": "keymap-item:3D View Tool: Edit Curve, Extrude to Cursor:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00069", + "gapId": "keymap-item:3D View Tool: Edit Curve, Extrude:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00070", + "gapId": "keymap-item:3D View Tool: Edit Curve, Radius:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00071", + "gapId": "keymap-item:3D View Tool: Edit Curve, Randomize:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00072", + "gapId": "keymap-item:3D View Tool: Edit Curve, Tilt:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00073", + "gapId": "keymap-item:3D View Tool: Edit Curves, Draw:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00074", + "gapId": "keymap-item:3D View Tool: Edit Curves, Pen:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00075", + "gapId": "keymap-item:3D View Tool: Edit Curves, Pen:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00076", + "gapId": "keymap-item:3D View Tool: Edit Curves, Pen:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00077", + "gapId": "keymap-item:3D View Tool: Edit Curves, Pen:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00078", + "gapId": "keymap-item:3D View Tool: Edit Grease Pencil, Gradient:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00079", + "gapId": "keymap-item:3D View Tool: Edit Grease Pencil, Interpolate:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00080", + "gapId": "keymap-item:3D View Tool: Edit Grease Pencil, Pen:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00081", + "gapId": "keymap-item:3D View Tool: Edit Grease Pencil, Pen:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00082", + "gapId": "keymap-item:3D View Tool: Edit Grease Pencil, Pen:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00083", + "gapId": "keymap-item:3D View Tool: Edit Grease Pencil, Pen:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00084", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Bevel:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00085", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Bisect:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00086", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Edge Slide:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00087", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Extrude Along Normals:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00088", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Extrude Individual:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00089", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Extrude Manifold:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00090", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Extrude Region:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00091", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Extrude to Cursor:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00092", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Inset Faces:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00093", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Knife:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00094", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Loop Cut:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00095", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Offset Edge Loop Cut:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00096", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Poly Build:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00097", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Poly Build:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00098", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Poly Build:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00099", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Push/Pull:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00100", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Randomize:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00101", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Rip Edge:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00102", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Rip Region:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00103", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Shrink/Fatten:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00104", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Smooth:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00105", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Spin Duplicates:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00106", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Spin:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00107", + "gapId": "keymap-item:3D View Tool: Edit Mesh, To Sphere:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00108", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Vertex Slide:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00109", + "gapId": "keymap-item:3D View Tool: Edit Text, Select Text:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00110", + "gapId": "keymap-item:3D View Tool: Edit Text, Select Text:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00111", + "gapId": "keymap-item:3D View Tool: Measure:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00112", + "gapId": "keymap-item:3D View Tool: Measure:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00113", + "gapId": "keymap-item:3D View Tool: Measure:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00114", + "gapId": "keymap-item:3D View Tool: Move:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00115", + "gapId": "keymap-item:3D View Tool: Object, Add Primitive:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00116", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Arc:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00117", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Arc:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00118", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Arc:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00119", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Box:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00120", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Box:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00121", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Box:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00122", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Circle:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00123", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Circle:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00124", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Circle:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00125", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Curve:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00126", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Eyedropper:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00127", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Eyedropper:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00128", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Eyedropper:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00129", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Eyedropper:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00130", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Interpolate:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00131", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Line:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00132", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Line:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00133", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Line:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00134", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Polyline:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00135", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Polyline:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00136", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Trim:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00137", + "gapId": "keymap-item:3D View Tool: Paint Weight, Gradient:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00138", + "gapId": "keymap-item:3D View Tool: Paint Weight, Sample Vertex Group:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00139", + "gapId": "keymap-item:3D View Tool: Paint Weight, Sample Weight:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00140", + "gapId": "keymap-item:3D View Tool: Paint Weight, Sample Weight:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00141", + "gapId": "keymap-item:3D View Tool: Push:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00142", + "gapId": "keymap-item:3D View Tool: Relax:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00143", + "gapId": "keymap-item:3D View Tool: Rotate:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00144", + "gapId": "keymap-item:3D View Tool: Scale:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00145", + "gapId": "keymap-item:3D View Tool: Sculpt, Box Face Set:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00146", + "gapId": "keymap-item:3D View Tool: Sculpt, Box Hide:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00147", + "gapId": "keymap-item:3D View Tool: Sculpt, Box Hide:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00148", + "gapId": "keymap-item:3D View Tool: Sculpt, Box Hide:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00149", + "gapId": "keymap-item:3D View Tool: Sculpt, Box Mask:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00150", + "gapId": "keymap-item:3D View Tool: Sculpt, Box Mask:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00151", + "gapId": "keymap-item:3D View Tool: Sculpt, Box Trim:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00152", + "gapId": "keymap-item:3D View Tool: Sculpt, Cloth Filter:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00153", + "gapId": "keymap-item:3D View Tool: Sculpt, Color Filter:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00154", + "gapId": "keymap-item:3D View Tool: Sculpt, Color Filter:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00155", + "gapId": "keymap-item:3D View Tool: Sculpt, Face Set Edit:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00156", + "gapId": "keymap-item:3D View Tool: Sculpt, Lasso Face Set:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00157", + "gapId": "keymap-item:3D View Tool: Sculpt, Lasso Hide:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00158", + "gapId": "keymap-item:3D View Tool: Sculpt, Lasso Hide:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00159", + "gapId": "keymap-item:3D View Tool: Sculpt, Lasso Hide:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00160", + "gapId": "keymap-item:3D View Tool: Sculpt, Lasso Mask:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00161", + "gapId": "keymap-item:3D View Tool: Sculpt, Lasso Mask:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00162", + "gapId": "keymap-item:3D View Tool: Sculpt, Lasso Trim:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00163", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Face Set:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00164", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Hide:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00165", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Hide:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00166", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Hide:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00167", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Mask:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00168", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Mask:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00169", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Project:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00170", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Trim:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00171", + "gapId": "keymap-item:3D View Tool: Sculpt, Mask by Color:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00172", + "gapId": "keymap-item:3D View Tool: Sculpt, Mesh Filter:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00173", + "gapId": "keymap-item:3D View Tool: Sculpt, Polyline Face Set:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00174", + "gapId": "keymap-item:3D View Tool: Sculpt, Polyline Hide:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00175", + "gapId": "keymap-item:3D View Tool: Sculpt, Polyline Hide:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00176", + "gapId": "keymap-item:3D View Tool: Sculpt, Polyline Mask:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00177", + "gapId": "keymap-item:3D View Tool: Sculpt, Polyline Mask:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00178", + "gapId": "keymap-item:3D View Tool: Sculpt, Polyline Trim:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00179", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00180", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00181", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00182", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00183", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00184", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00185", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00186", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00187", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00188", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00189", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00190", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00191", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00192", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00193", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00194", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00195", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00196", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00197", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00198", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00199", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00200", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00201", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00202", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00203", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00204", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00205", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00206", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00207", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00208", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00209", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00210", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00211", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00212", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00213", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00214", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00215", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00216", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00217", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00218", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00219", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00220", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00221", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00222", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00223", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00224", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00225", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00226", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00227", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00228", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00229", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00230", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00231", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00232", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00233", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00234", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00235", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00236", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00237", + "gapId": "keymap-item:3D View Tool: Shear:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00238", + "gapId": "keymap-item:3D View Tool: Shear:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00239", + "gapId": "keymap-item:3D View Tool: Shear:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00240", + "gapId": "keymap-item:3D View Tool: Transform:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00241", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00242", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00243", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00244", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00245", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00246", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00247", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00248", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00249", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00250", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00251", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00252", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00253", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00254", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00255", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00256", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00257", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00258", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00259", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00260", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00261", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00262", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:100", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00263", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:101", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00264", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:102", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00265", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:103", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00266", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:104", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00267", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:105", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00268", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:106", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00269", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:107", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00270", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:108", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00271", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:109", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00272", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00273", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:110", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00274", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:111", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00275", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:112", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00276", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:113", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00277", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:114", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00278", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:115", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00279", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00280", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00281", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00282", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00283", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00284", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00285", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00286", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00287", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00288", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00289", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00290", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00291", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00292", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00293", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00294", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00295", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00296", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00297", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00298", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00299", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00300", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00301", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00302", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00303", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00304", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00305", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00306", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00307", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00308", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00309", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00310", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00311", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00312", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00313", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00314", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00315", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00316", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00317", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00318", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00319", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00320", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00321", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00322", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00323", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00324", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00325", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00326", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00327", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00328", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00329", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00330", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:59", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00331", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00332", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:60", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00333", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:61", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00334", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:62", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00335", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:63", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00336", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:64", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00337", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:65", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00338", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:66", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00339", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:67", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00340", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:68", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00341", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:69", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00342", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00343", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:70", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00344", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:71", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00345", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:72", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00346", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:73", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00347", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:74", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00348", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:75", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00349", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:76", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00350", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:77", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00351", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:78", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00352", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:79", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00353", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00354", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:80", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00355", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:81", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00356", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:82", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00357", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:83", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00358", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:84", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00359", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:85", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00360", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:86", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00361", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:87", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00362", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:88", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00363", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:89", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00364", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00365", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:90", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00366", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:91", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00367", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:92", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00368", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:93", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00369", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:94", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00370", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:95", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00371", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:96", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00372", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:97", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00373", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:98", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00374", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:99", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00375", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00376", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00377", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00378", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00379", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00380", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00381", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00382", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00383", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00384", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00385", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00386", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00387", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00388", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00389", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00390", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00391", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00392", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00393", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00394", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00395", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00396", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00397", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00398", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00399", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00400", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00401", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00402", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00403", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00404", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00405", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00406", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00407", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00408", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00409", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00410", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00411", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00412", + "gapId": "keymap-item:Animation:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00413", + "gapId": "keymap-item:Animation:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00414", + "gapId": "keymap-item:Animation:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00415", + "gapId": "keymap-item:Animation:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00416", + "gapId": "keymap-item:Animation:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00417", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00418", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00419", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00420", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00421", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00422", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00423", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00424", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00425", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00426", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00427", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00428", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00429", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00430", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00431", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00432", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00433", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00434", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00435", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00436", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00437", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00438", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00439", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00440", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00441", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00442", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00443", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00444", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00445", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00446", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00447", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00448", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00449", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00450", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00451", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00452", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00453", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00454", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00455", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00456", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00457", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00458", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00459", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00460", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00461", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00462", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00463", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00464", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00465", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00466", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00467", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00468", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00469", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00470", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00471", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00472", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00473", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00474", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00475", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00476", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00477", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00478", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00479", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00480", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00481", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00482", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00483", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00484", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00485", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00486", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00487", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00488", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00489", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00490", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00491", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00492", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00493", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00494", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00495", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00496", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00497", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00498", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00499", + "gapId": "keymap-item:Clip Dopesheet Editor:CLIP_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00500", + "gapId": "keymap-item:Clip Dopesheet Editor:CLIP_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00501", + "gapId": "keymap-item:Clip Dopesheet Editor:CLIP_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00502", + "gapId": "keymap-item:Clip Dopesheet Editor:CLIP_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00503", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00504", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00505", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00506", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00507", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00508", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00509", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00510", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00511", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00512", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00513", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00514", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00515", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00516", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00517", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00518", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00519", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00520", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00521", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00522", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00523", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00524", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00525", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00526", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00527", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00528", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00529", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00530", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00531", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00532", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00533", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00534", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00535", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00536", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00537", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00538", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00539", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00540", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00541", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00542", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00543", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00544", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00545", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00546", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00547", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00548", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00549", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00550", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00551", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00552", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00553", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00554", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00555", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00556", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00557", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00558", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:59", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00559", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00560", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:60", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00561", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:61", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00562", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:62", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00563", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:63", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00564", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:64", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00565", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:65", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00566", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:66", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00567", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:67", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00568", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:68", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00569", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:69", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00570", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00571", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:70", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00572", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:71", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00573", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:72", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00574", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:73", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00575", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:74", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00576", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:75", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00577", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00578", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00579", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00580", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00581", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00582", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00583", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00584", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00585", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00586", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00587", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00588", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00589", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00590", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00591", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00592", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00593", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00594", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00595", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00596", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00597", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00598", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00599", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00600", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00601", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00602", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00603", + "gapId": "keymap-item:Clip Time Scrub:CLIP_EDITOR:PREVIEW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00604", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00605", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00606", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00607", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00608", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00609", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00610", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00611", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00612", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00613", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00614", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00615", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00616", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00617", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00618", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00619", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00620", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00621", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00622", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00623", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00624", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00625", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00626", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00627", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00628", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00629", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00630", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00631", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00632", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00633", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00634", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00635", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00636", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00637", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00638", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00639", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00640", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00641", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00642", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00643", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00644", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00645", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00646", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00647", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00648", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00649", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00650", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00651", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00652", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00653", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00654", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00655", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00656", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00657", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00658", + "gapId": "keymap-item:Curve Pen Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00659", + "gapId": "keymap-item:Curve Pen Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00660", + "gapId": "keymap-item:Curve Pen Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00661", + "gapId": "keymap-item:Curve Pen Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00662", + "gapId": "keymap-item:Curve Pen Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00663", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00664", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00665", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00666", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00667", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00668", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00669", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00670", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00671", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00672", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00673", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00674", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00675", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00676", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00677", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00678", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00679", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00680", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00681", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00682", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00683", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00684", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00685", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00686", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00687", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00688", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00689", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00690", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00691", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00692", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00693", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00694", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00695", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00696", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00697", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00698", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00699", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00700", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00701", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00702", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00703", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00704", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00705", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00706", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00707", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00708", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00709", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00710", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00711", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00712", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00713", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00714", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00715", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00716", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00717", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00718", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00719", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00720", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00721", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00722", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00723", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00724", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00725", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00726", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00727", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00728", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00729", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00730", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00731", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00732", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00733", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00734", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00735", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00736", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00737", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00738", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00739", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00740", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00741", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00742", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00743", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00744", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00745", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00746", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00747", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00748", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00749", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00750", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00751", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00752", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00753", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00754", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00755", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00756", + "gapId": "keymap-item:Dopesheet Generic:DOPESHEET_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00757", + "gapId": "keymap-item:Dopesheet Generic:DOPESHEET_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00758", + "gapId": "keymap-item:Dopesheet Generic:DOPESHEET_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00759", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00760", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00761", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00762", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00763", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00764", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00765", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00766", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00767", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00768", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00769", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00770", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00771", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00772", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00773", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00774", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00775", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00776", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00777", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00778", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00779", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00780", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00781", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00782", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00783", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00784", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00785", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00786", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00787", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00788", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00789", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00790", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00791", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00792", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00793", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00794", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00795", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00796", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00797", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00798", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00799", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00800", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00801", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00802", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00803", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00804", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00805", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00806", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00807", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00808", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00809", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00810", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00811", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00812", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00813", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00814", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:59", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00815", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00816", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:60", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00817", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:61", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00818", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:62", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00819", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:63", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00820", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:64", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00821", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:65", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00822", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:66", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00823", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:67", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00824", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00825", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00826", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00827", + "gapId": "keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00828", + "gapId": "keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00829", + "gapId": "keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00830", + "gapId": "keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00831", + "gapId": "keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00832", + "gapId": "keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00833", + "gapId": "keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00834", + "gapId": "keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00835", + "gapId": "keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00836", + "gapId": "keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00837", + "gapId": "keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00838", + "gapId": "keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00839", + "gapId": "keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00840", + "gapId": "keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00841", + "gapId": "keymap-item:File Browser Buttons:FILE_BROWSER:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00842", + "gapId": "keymap-item:File Browser Buttons:FILE_BROWSER:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00843", + "gapId": "keymap-item:File Browser Buttons:FILE_BROWSER:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00844", + "gapId": "keymap-item:File Browser Buttons:FILE_BROWSER:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00845", + "gapId": "keymap-item:File Browser Buttons:FILE_BROWSER:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00846", + "gapId": "keymap-item:File Browser Buttons:FILE_BROWSER:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00847", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00848", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00849", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00850", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00851", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00852", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00853", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00854", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00855", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00856", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00857", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00858", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00859", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00860", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00861", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00862", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00863", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00864", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00865", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00866", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00867", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00868", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00869", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00870", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00871", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00872", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00873", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00874", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00875", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00876", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00877", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00878", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00879", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00880", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00881", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00882", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00883", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00884", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00885", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00886", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00887", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00888", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00889", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00890", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00891", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00892", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00893", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00894", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00895", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00896", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00897", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00898", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00899", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00900", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00901", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00902", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00903", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00904", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00905", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00906", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00907", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00908", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00909", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00910", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00911", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00912", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00913", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00914", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00915", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00916", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00917", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00918", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00919", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00920", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00921", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00922", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00923", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00924", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00925", + "gapId": "keymap-item:Font:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00926", + "gapId": "keymap-item:Font:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00927", + "gapId": "keymap-item:Font:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00928", + "gapId": "keymap-item:Font:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00929", + "gapId": "keymap-item:Font:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00930", + "gapId": "keymap-item:Font:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00931", + "gapId": "keymap-item:Font:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00932", + "gapId": "keymap-item:Font:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00933", + "gapId": "keymap-item:Font:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00934", + "gapId": "keymap-item:Font:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00935", + "gapId": "keymap-item:Font:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00936", + "gapId": "keymap-item:Font:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00937", + "gapId": "keymap-item:Font:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00938", + "gapId": "keymap-item:Font:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00939", + "gapId": "keymap-item:Font:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00940", + "gapId": "keymap-item:Font:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00941", + "gapId": "keymap-item:Font:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00942", + "gapId": "keymap-item:Font:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00943", + "gapId": "keymap-item:Font:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00944", + "gapId": "keymap-item:Font:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00945", + "gapId": "keymap-item:Font:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00946", + "gapId": "keymap-item:Font:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00947", + "gapId": "keymap-item:Font:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00948", + "gapId": "keymap-item:Font:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00949", + "gapId": "keymap-item:Font:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00950", + "gapId": "keymap-item:Font:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00951", + "gapId": "keymap-item:Font:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00952", + "gapId": "keymap-item:Font:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00953", + "gapId": "keymap-item:Font:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00954", + "gapId": "keymap-item:Font:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00955", + "gapId": "keymap-item:Font:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00956", + "gapId": "keymap-item:Font:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00957", + "gapId": "keymap-item:Font:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00958", + "gapId": "keymap-item:Font:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00959", + "gapId": "keymap-item:Font:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00960", + "gapId": "keymap-item:Font:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00961", + "gapId": "keymap-item:Font:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00962", + "gapId": "keymap-item:Font:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00963", + "gapId": "keymap-item:Font:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00964", + "gapId": "keymap-item:Font:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00965", + "gapId": "keymap-item:Font:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00966", + "gapId": "keymap-item:Font:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00967", + "gapId": "keymap-item:Font:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00968", + "gapId": "keymap-item:Font:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00969", + "gapId": "keymap-item:Font:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00970", + "gapId": "keymap-item:Font:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00971", + "gapId": "keymap-item:Font:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00972", + "gapId": "keymap-item:Font:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00973", + "gapId": "keymap-item:Font:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00974", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00975", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00976", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00977", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00978", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00979", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00980", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00981", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00982", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00983", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00984", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00985", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00986", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00987", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00988", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00989", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00990", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00991", + "gapId": "keymap-item:Generic Gizmo Click Drag:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00992", + "gapId": "keymap-item:Generic Gizmo Click Drag:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00993", + "gapId": "keymap-item:Generic Gizmo Drag:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00994", + "gapId": "keymap-item:Generic Gizmo Maybe Drag:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00995", + "gapId": "keymap-item:Generic Gizmo Select:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00996", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00997", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00998", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00999", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01000", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01001", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01002", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01003", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01004", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01005", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01006", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01007", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01008", + "gapId": "keymap-item:Generic Gizmo:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01009", + "gapId": "keymap-item:Generic Tool: Annotate Eraser:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01010", + "gapId": "keymap-item:Generic Tool: Annotate Eraser:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01011", + "gapId": "keymap-item:Generic Tool: Annotate Line:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01012", + "gapId": "keymap-item:Generic Tool: Annotate Line:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01013", + "gapId": "keymap-item:Generic Tool: Annotate Polygon:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01014", + "gapId": "keymap-item:Generic Tool: Annotate Polygon:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01015", + "gapId": "keymap-item:Generic Tool: Annotate:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01016", + "gapId": "keymap-item:Generic Tool: Annotate:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01017", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01018", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01019", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01020", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01021", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01022", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01023", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01024", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01025", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01026", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01027", + "gapId": "keymap-item:Gesture Lasso:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01028", + "gapId": "keymap-item:Gesture Polyline:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01029", + "gapId": "keymap-item:Gesture Polyline:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01030", + "gapId": "keymap-item:Gesture Polyline:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01031", + "gapId": "keymap-item:Gesture Polyline:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01032", + "gapId": "keymap-item:Gesture Polyline:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01033", + "gapId": "keymap-item:Gesture Polyline:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01034", + "gapId": "keymap-item:Gesture Straight Line:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01035", + "gapId": "keymap-item:Gesture Straight Line:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01036", + "gapId": "keymap-item:Gesture Straight Line:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01037", + "gapId": "keymap-item:Gesture Straight Line:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01038", + "gapId": "keymap-item:Gesture Straight Line:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01039", + "gapId": "keymap-item:Gesture Straight Line:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01040", + "gapId": "keymap-item:Gesture Straight Line:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01041", + "gapId": "keymap-item:Gesture Zoom Border:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01042", + "gapId": "keymap-item:Gesture Zoom Border:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01043", + "gapId": "keymap-item:Gesture Zoom Border:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01044", + "gapId": "keymap-item:Gesture Zoom Border:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01045", + "gapId": "keymap-item:Gesture Zoom Border:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01046", + "gapId": "keymap-item:Gesture Zoom Border:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01047", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01048", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01049", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01050", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01051", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01052", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01053", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01054", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01055", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01056", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01057", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01058", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01059", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01060", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01061", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01062", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01063", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01064", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01065", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01066", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01067", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01068", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01069", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01070", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01071", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01072", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01073", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01074", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01075", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01076", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01077", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01078", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01079", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01080", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01081", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01082", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01083", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01084", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01085", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01086", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01087", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01088", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01089", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01090", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01091", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01092", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01093", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01094", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01095", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01096", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01097", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01098", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01099", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01100", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01101", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01102", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01103", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01104", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01105", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01106", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01107", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01108", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01109", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01110", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01111", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01112", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:59", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01113", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01114", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:60", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01115", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:61", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01116", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:62", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01117", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:63", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01118", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:64", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01119", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:65", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01120", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:66", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01121", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:67", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01122", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:68", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01123", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:69", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01124", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01125", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:70", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01126", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01127", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01128", + "gapId": "keymap-item:Grease Pencil Brush Stroke:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01129", + "gapId": "keymap-item:Grease Pencil Brush Stroke:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01130", + "gapId": "keymap-item:Grease Pencil Brush Stroke:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01131", + "gapId": "keymap-item:Grease Pencil Brush Stroke:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01132", + "gapId": "keymap-item:Grease Pencil Brush Stroke:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01133", + "gapId": "keymap-item:Grease Pencil Brush Stroke:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01134", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01135", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01136", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01137", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01138", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01139", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01140", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01141", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01142", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01143", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01144", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01145", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01146", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01147", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01148", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01149", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01150", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01151", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01152", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01153", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01154", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01155", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01156", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01157", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01158", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01159", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01160", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01161", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01162", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01163", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01164", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01165", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01166", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01167", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01168", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01169", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01170", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01171", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01172", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01173", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01174", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01175", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01176", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01177", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01178", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01179", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01180", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01181", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01182", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01183", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01184", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01185", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01186", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01187", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01188", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01189", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01190", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01191", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01192", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01193", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01194", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01195", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01196", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01197", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01198", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01199", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01200", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01201", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01202", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01203", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01204", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01205", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01206", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01207", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01208", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01209", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01210", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01211", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01212", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01213", + "gapId": "keymap-item:Grease Pencil Fill Tool:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01214", + "gapId": "keymap-item:Grease Pencil Fill Tool:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01215", + "gapId": "keymap-item:Grease Pencil Fill Tool:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01216", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01217", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01218", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01219", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01220", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01221", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01222", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01223", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01224", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01225", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01226", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01227", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01228", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01229", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01230", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01231", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01232", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01233", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01234", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01235", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01236", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01237", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01238", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01239", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01240", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01241", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01242", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01243", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01244", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01245", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01246", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01247", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01248", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01249", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01250", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01251", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01252", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01253", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01254", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01255", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01256", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01257", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01258", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01259", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01260", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01261", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01262", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01263", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01264", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01265", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01266", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01267", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01268", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01269", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01270", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01271", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01272", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01273", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01274", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01275", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01276", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01277", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01278", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01279", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01280", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01281", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01282", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01283", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01284", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01285", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01286", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01287", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01288", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01289", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01290", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01291", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01292", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01293", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01294", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01295", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01296", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01297", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01298", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01299", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01300", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01301", + "gapId": "keymap-item:Grease Pencil:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01302", + "gapId": "keymap-item:Grease Pencil:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01303", + "gapId": "keymap-item:Grease Pencil:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01304", + "gapId": "keymap-item:Grease Pencil:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01305", + "gapId": "keymap-item:Grease Pencil:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01306", + "gapId": "keymap-item:Image Editor Tool: Mask, Box:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01307", + "gapId": "keymap-item:Image Editor Tool: Mask, Circle:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01308", + "gapId": "keymap-item:Image Editor Tool: Mask, Cursor:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01309", + "gapId": "keymap-item:Image Editor Tool: Mask, Cursor:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01310", + "gapId": "keymap-item:Image Editor Tool: Mask, Move:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01311", + "gapId": "keymap-item:Image Editor Tool: Mask, Rotate:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01312", + "gapId": "keymap-item:Image Editor Tool: Mask, Scale:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01313", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Box (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01314", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Box (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01315", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Box (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01316", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Box:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01317", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Box:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01318", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Box:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01319", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Circle (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01320", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Circle (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01321", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Circle (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01322", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Circle:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01323", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Circle:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01324", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Circle:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01325", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Lasso (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01326", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Lasso (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01327", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Lasso (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01328", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Lasso:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01329", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Lasso:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01330", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Lasso:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01331", + "gapId": "keymap-item:Image Editor Tool: Mask, Transform:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01332", + "gapId": "keymap-item:Image Editor Tool: Mask, Tweak (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01333", + "gapId": "keymap-item:Image Editor Tool: Mask, Tweak (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01334", + "gapId": "keymap-item:Image Editor Tool: Mask, Tweak (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01335", + "gapId": "keymap-item:Image Editor Tool: Mask, Tweak:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01336", + "gapId": "keymap-item:Image Editor Tool: Mask, Tweak:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01337", + "gapId": "keymap-item:Image Editor Tool: Mask, Tweak:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01338", + "gapId": "keymap-item:Image Editor Tool: Sample:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01339", + "gapId": "keymap-item:Image Editor Tool: Uv, Cursor:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01340", + "gapId": "keymap-item:Image Editor Tool: Uv, Cursor:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01341", + "gapId": "keymap-item:Image Editor Tool: Uv, Grab:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01342", + "gapId": "keymap-item:Image Editor Tool: Uv, Grab:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01343", + "gapId": "keymap-item:Image Editor Tool: Uv, Grab:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01344", + "gapId": "keymap-item:Image Editor Tool: Uv, Grab:IMAGE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01345", + "gapId": "keymap-item:Image Editor Tool: Uv, Grab:IMAGE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01346", + "gapId": "keymap-item:Image Editor Tool: Uv, Move:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01347", + "gapId": "keymap-item:Image Editor Tool: Uv, Pinch:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01348", + "gapId": "keymap-item:Image Editor Tool: Uv, Pinch:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01349", + "gapId": "keymap-item:Image Editor Tool: Uv, Pinch:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01350", + "gapId": "keymap-item:Image Editor Tool: Uv, Pinch:IMAGE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01351", + "gapId": "keymap-item:Image Editor Tool: Uv, Pinch:IMAGE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01352", + "gapId": "keymap-item:Image Editor Tool: Uv, Relax:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01353", + "gapId": "keymap-item:Image Editor Tool: Uv, Relax:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01354", + "gapId": "keymap-item:Image Editor Tool: Uv, Relax:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01355", + "gapId": "keymap-item:Image Editor Tool: Uv, Relax:IMAGE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01356", + "gapId": "keymap-item:Image Editor Tool: Uv, Relax:IMAGE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01357", + "gapId": "keymap-item:Image Editor Tool: Uv, Rip Region:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01358", + "gapId": "keymap-item:Image Editor Tool: Uv, Rotate:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01359", + "gapId": "keymap-item:Image Editor Tool: Uv, Scale:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01360", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Box (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01361", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Box (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01362", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Box (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01363", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Box:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01364", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Box:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01365", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Box:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01366", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Circle (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01367", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Circle (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01368", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Circle (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01369", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Circle:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01370", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Circle:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01371", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Circle:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01372", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Lasso (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01373", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Lasso (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01374", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Lasso (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01375", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Lasso:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01376", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Lasso:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01377", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Lasso:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01378", + "gapId": "keymap-item:Image Editor Tool: Uv, Tweak (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01379", + "gapId": "keymap-item:Image Editor Tool: Uv, Tweak (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01380", + "gapId": "keymap-item:Image Editor Tool: Uv, Tweak (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01381", + "gapId": "keymap-item:Image Editor Tool: Uv, Tweak:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01382", + "gapId": "keymap-item:Image Editor Tool: Uv, Tweak:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01383", + "gapId": "keymap-item:Image Editor Tool: Uv, Tweak:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01384", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01385", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01386", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01387", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01388", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01389", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01390", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01391", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01392", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01393", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01394", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01395", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01396", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01397", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01398", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01399", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01400", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01401", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01402", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01403", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01404", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01405", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01406", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01407", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01408", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01409", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01410", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01411", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01412", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01413", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01414", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01415", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01416", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01417", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01418", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01419", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01420", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01421", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01422", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01423", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01424", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01425", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01426", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01427", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01428", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01429", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01430", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01431", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01432", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01433", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01434", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01435", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01436", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01437", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01438", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01439", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01440", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01441", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01442", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01443", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01444", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01445", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01446", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01447", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01448", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01449", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01450", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01451", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01452", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01453", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01454", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01455", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01456", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01457", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01458", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01459", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01460", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01461", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01462", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01463", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01464", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01465", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01466", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01467", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01468", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01469", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01470", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01471", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01472", + "gapId": "keymap-item:Info:INFO:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01473", + "gapId": "keymap-item:Info:INFO:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01474", + "gapId": "keymap-item:Info:INFO:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01475", + "gapId": "keymap-item:Info:INFO:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01476", + "gapId": "keymap-item:Info:INFO:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01477", + "gapId": "keymap-item:Info:INFO:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01478", + "gapId": "keymap-item:Info:INFO:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01479", + "gapId": "keymap-item:Info:INFO:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01480", + "gapId": "keymap-item:Info:INFO:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01481", + "gapId": "keymap-item:Info:INFO:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01482", + "gapId": "keymap-item:Info:INFO:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01483", + "gapId": "keymap-item:Info:INFO:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01484", + "gapId": "keymap-item:Info:INFO:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01485", + "gapId": "keymap-item:Info:INFO:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01486", + "gapId": "keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01487", + "gapId": "keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01488", + "gapId": "keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01489", + "gapId": "keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01490", + "gapId": "keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01491", + "gapId": "keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01492", + "gapId": "keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01493", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01494", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01495", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01496", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01497", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01498", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01499", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01500", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01501", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01502", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01503", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01504", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01505", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01506", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01507", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01508", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01509", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01510", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01511", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01512", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01513", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01514", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01515", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01516", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01517", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01518", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01519", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01520", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01521", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01522", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01523", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01524", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01525", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01526", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01527", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01528", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01529", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01530", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01531", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01532", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01533", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01534", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01535", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01536", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01537", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01538", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01539", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01540", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01541", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01542", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01543", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01544", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01545", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01546", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01547", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01548", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01549", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01550", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01551", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01552", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01553", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01554", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01555", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01556", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01557", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01558", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01559", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01560", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01561", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01562", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01563", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01564", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01565", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01566", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01567", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01568", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01569", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01570", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01571", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01572", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01573", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01574", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01575", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01576", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01577", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01578", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01579", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01580", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01581", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01582", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01583", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01584", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01585", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01586", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01587", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01588", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01589", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01590", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01591", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01592", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01593", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01594", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01595", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01596", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01597", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01598", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01599", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01600", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01601", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01602", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01603", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01604", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01605", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01606", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01607", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01608", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01609", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01610", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01611", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01612", + "gapId": "keymap-item:Mesh Filter Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01613", + "gapId": "keymap-item:Mesh Filter Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01614", + "gapId": "keymap-item:Mesh Filter Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01615", + "gapId": "keymap-item:Mesh Filter Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01616", + "gapId": "keymap-item:Mesh Filter Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01617", + "gapId": "keymap-item:Mesh Filter Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01618", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01619", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01620", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01621", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01622", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01623", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01624", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01625", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01626", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01627", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01628", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01629", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01630", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01631", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01632", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01633", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01634", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01635", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01636", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01637", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01638", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01639", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01640", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01641", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01642", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01643", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01644", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01645", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01646", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01647", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01648", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01649", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01650", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01651", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01652", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01653", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01654", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01655", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01656", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01657", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01658", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01659", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01660", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01661", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01662", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01663", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01664", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01665", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01666", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01667", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01668", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01669", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01670", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01671", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01672", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01673", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:59", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01674", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01675", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:60", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01676", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:61", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01677", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:62", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01678", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:63", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01679", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:64", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01680", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:65", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01681", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:66", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01682", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:67", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01683", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:68", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01684", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:69", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01685", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01686", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:70", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01687", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:71", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01688", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:72", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01689", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:73", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01690", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:74", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01691", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:75", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01692", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:76", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01693", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:77", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01694", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:78", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01695", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:79", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01696", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01697", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:80", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01698", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:81", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01699", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:82", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01700", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:83", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01701", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:84", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01702", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:85", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01703", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:86", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01704", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:87", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01705", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:88", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01706", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:89", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01707", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01708", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:90", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01709", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:91", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01710", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:92", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01711", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01712", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01713", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01714", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01715", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01716", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01717", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01718", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01719", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01720", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01721", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01722", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01723", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01724", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01725", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01726", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01727", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01728", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01729", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01730", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01731", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01732", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01733", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01734", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01735", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01736", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01737", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01738", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01739", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01740", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01741", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01742", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01743", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01744", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01745", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01746", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01747", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01748", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01749", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01750", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01751", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01752", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01753", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01754", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01755", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01756", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01757", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01758", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01759", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01760", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01761", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01762", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01763", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01764", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01765", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01766", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01767", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01768", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01769", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01770", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01771", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01772", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01773", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01774", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01775", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01776", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01777", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01778", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01779", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01780", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01781", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01782", + "gapId": "keymap-item:NLA Generic:NLA_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01783", + "gapId": "keymap-item:NLA Generic:NLA_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01784", + "gapId": "keymap-item:NLA Generic:NLA_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01785", + "gapId": "keymap-item:NLA Generic:NLA_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01786", + "gapId": "keymap-item:NLA Generic:NLA_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01787", + "gapId": "keymap-item:NLA Generic:NLA_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01788", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01789", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01790", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01791", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01792", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01793", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01794", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01795", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01796", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01797", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01798", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01799", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:100", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01800", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:101", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01801", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:102", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01802", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:103", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01803", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01804", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01805", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01806", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01807", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01808", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01809", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01810", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01811", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01812", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01813", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01814", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01815", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01816", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01817", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01818", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01819", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01820", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01821", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01822", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01823", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01824", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01825", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01826", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01827", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01828", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01829", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01830", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01831", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01832", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01833", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01834", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01835", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01836", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01837", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01838", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01839", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01840", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01841", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01842", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01843", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01844", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01845", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01846", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01847", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01848", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01849", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01850", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01851", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01852", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01853", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01854", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01855", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:59", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01856", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01857", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:60", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01858", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:61", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01859", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:62", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01860", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:63", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01861", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:64", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01862", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:65", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01863", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:66", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01864", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:67", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01865", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:68", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01866", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:69", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01867", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01868", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:70", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01869", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:71", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01870", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:72", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01871", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:73", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01872", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:74", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01873", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:75", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01874", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:76", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01875", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:77", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01876", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:78", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01877", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:79", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01878", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01879", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:80", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01880", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:81", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01881", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:82", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01882", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:83", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01883", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:84", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01884", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:85", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01885", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:86", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01886", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:87", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01887", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:88", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01888", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:89", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01889", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01890", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:90", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01891", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:91", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01892", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:92", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01893", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:93", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01894", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:94", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01895", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:95", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01896", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:96", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01897", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:97", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01898", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:98", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01899", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:99", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01900", + "gapId": "keymap-item:Node Generic:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01901", + "gapId": "keymap-item:Node Generic:NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01902", + "gapId": "keymap-item:Node Link Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01903", + "gapId": "keymap-item:Node Link Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01904", + "gapId": "keymap-item:Node Link Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01905", + "gapId": "keymap-item:Node Link Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01906", + "gapId": "keymap-item:Node Link Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01907", + "gapId": "keymap-item:Node Link Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01908", + "gapId": "keymap-item:Node Resize Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01909", + "gapId": "keymap-item:Node Resize Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01910", + "gapId": "keymap-item:Node Resize Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01911", + "gapId": "keymap-item:Node Resize Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01912", + "gapId": "keymap-item:Node Resize Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01913", + "gapId": "keymap-item:Node Resize Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01914", + "gapId": "keymap-item:Node Resize Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01915", + "gapId": "keymap-item:Node Tool: Add Reroute:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01916", + "gapId": "keymap-item:Node Tool: Links Cut:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01917", + "gapId": "keymap-item:Node Tool: Mute Links:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01918", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01919", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01920", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01921", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01922", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01923", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01924", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01925", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01926", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01927", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01928", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01929", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01930", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01931", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01932", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01933", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01934", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01935", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01936", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01937", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01938", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01939", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01940", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01941", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01942", + "gapId": "keymap-item:Node Tool: Select Circle (fallback):NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01943", + "gapId": "keymap-item:Node Tool: Select Circle (fallback):NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01944", + "gapId": "keymap-item:Node Tool: Select Circle (fallback):NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01945", + "gapId": "keymap-item:Node Tool: Select Circle:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01946", + "gapId": "keymap-item:Node Tool: Select Circle:NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01947", + "gapId": "keymap-item:Node Tool: Select Circle:NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01948", + "gapId": "keymap-item:Node Tool: Select Lasso (fallback):NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01949", + "gapId": "keymap-item:Node Tool: Select Lasso (fallback):NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01950", + "gapId": "keymap-item:Node Tool: Select Lasso (fallback):NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01951", + "gapId": "keymap-item:Node Tool: Select Lasso:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01952", + "gapId": "keymap-item:Node Tool: Select Lasso:NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01953", + "gapId": "keymap-item:Node Tool: Select Lasso:NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01954", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01955", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01956", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01957", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01958", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01959", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01960", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01961", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01962", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01963", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01964", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01965", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01966", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01967", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01968", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01969", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01970", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01971", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01972", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01973", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01974", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01975", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01976", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01977", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01978", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01979", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01980", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01981", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01982", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01983", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01984", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01985", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01986", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01987", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01988", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01989", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01990", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01991", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01992", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01993", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01994", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01995", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01996", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01997", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01998", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01999", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02000", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02001", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02002", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02003", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02004", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02005", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02006", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02007", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02008", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02009", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02010", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02011", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02012", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02013", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02014", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02015", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02016", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02017", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02018", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02019", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02020", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02021", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02022", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02023", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02024", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02025", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02026", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02027", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02028", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02029", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02030", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02031", + "gapId": "keymap-item:Object Non-modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02032", + "gapId": "keymap-item:Object Non-modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02033", + "gapId": "keymap-item:Object Non-modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02034", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02035", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02036", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02037", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:100", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02038", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:101", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02039", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:102", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02040", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02041", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02042", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02043", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02044", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02045", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02046", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02047", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02048", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02049", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02050", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02051", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02052", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02053", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02054", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02055", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02056", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02057", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02058", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02059", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02060", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02061", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02062", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02063", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02064", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02065", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02066", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02067", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02068", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02069", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02070", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02071", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02072", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02073", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02074", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02075", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02076", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02077", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02078", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02079", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02080", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02081", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02082", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02083", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02084", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02085", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02086", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02087", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02088", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02089", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02090", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02091", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02092", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:59", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02093", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02094", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:60", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02095", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:61", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02096", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:62", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02097", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:63", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02098", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:64", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02099", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:65", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02100", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:66", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02101", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:67", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02102", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:68", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02103", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:69", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02104", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02105", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:70", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02106", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:71", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02107", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:72", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02108", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:73", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02109", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:74", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02110", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:75", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02111", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:76", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02112", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:77", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02113", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:78", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02114", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:79", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02115", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02116", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:80", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02117", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:81", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02118", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:82", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02119", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:83", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02120", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:84", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02121", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:85", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02122", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:86", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02123", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:87", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02124", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:88", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02125", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:89", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02126", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02127", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:90", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02128", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:91", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02129", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:92", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02130", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:93", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02131", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:94", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02132", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:95", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02133", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:96", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02134", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:97", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02135", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:98", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02136", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:99", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02137", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02138", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02139", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02140", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02141", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02142", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02143", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02144", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02145", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02146", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02147", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02148", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02149", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02150", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02151", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02152", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02153", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02154", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02155", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02156", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02157", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02158", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02159", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02160", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02161", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02162", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02163", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02164", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02165", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02166", + "gapId": "keymap-item:Paint Stroke Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02167", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02168", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02169", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02170", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02171", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02172", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02173", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02174", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02175", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02176", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02177", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02178", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02179", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02180", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02181", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02182", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02183", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02184", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02185", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02186", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02187", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02188", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02189", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02190", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02191", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02192", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02193", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02194", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02195", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02196", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02197", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02198", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02199", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02200", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02201", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02202", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02203", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02204", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02205", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02206", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02207", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02208", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02209", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02210", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02211", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02212", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02213", + "gapId": "keymap-item:Pen Tool Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02214", + "gapId": "keymap-item:Pen Tool Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02215", + "gapId": "keymap-item:Pen Tool Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02216", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02217", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02218", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02219", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02220", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02221", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02222", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02223", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02224", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02225", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02226", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02227", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02228", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02229", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02230", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02231", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02232", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02233", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02234", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02235", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02236", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02237", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02238", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02239", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02240", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02241", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02242", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02243", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02244", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02245", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02246", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02247", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02248", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02249", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02250", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02251", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02252", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02253", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02254", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02255", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02256", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02257", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02258", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02259", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02260", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02261", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02262", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02263", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02264", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02265", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02266", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02267", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02268", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02269", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02270", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02271", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02272", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02273", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02274", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02275", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02276", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02277", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02278", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02279", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02280", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02281", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02282", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02283", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02284", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02285", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02286", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02287", + "gapId": "keymap-item:Preferences:PREFERENCES:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02288", + "gapId": "keymap-item:Preferences:PREFERENCES:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02289", + "gapId": "keymap-item:Preferences_nav:PREFERENCES:UI:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02290", + "gapId": "keymap-item:Preferences_nav:PREFERENCES:UI:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02291", + "gapId": "keymap-item:Preview Tool: Cursor:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02292", + "gapId": "keymap-item:Preview Tool: Cursor:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02293", + "gapId": "keymap-item:Preview Tool: Move:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02294", + "gapId": "keymap-item:Preview Tool: Rotate:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02295", + "gapId": "keymap-item:Preview Tool: Sample:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02296", + "gapId": "keymap-item:Preview Tool: Scale:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02297", + "gapId": "keymap-item:Preview Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02298", + "gapId": "keymap-item:Preview Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02299", + "gapId": "keymap-item:Preview Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02300", + "gapId": "keymap-item:Preview Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02301", + "gapId": "keymap-item:Preview Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02302", + "gapId": "keymap-item:Preview Tool: Select Box:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02303", + "gapId": "keymap-item:Preview Tool: Select Box:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02304", + "gapId": "keymap-item:Preview Tool: Select Box:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02305", + "gapId": "keymap-item:Preview Tool: Select Box:SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02306", + "gapId": "keymap-item:Preview Tool: Select Box:SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02307", + "gapId": "keymap-item:Preview Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02308", + "gapId": "keymap-item:Preview Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02309", + "gapId": "keymap-item:Preview Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02310", + "gapId": "keymap-item:Preview Tool: Select Circle:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02311", + "gapId": "keymap-item:Preview Tool: Select Circle:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02312", + "gapId": "keymap-item:Preview Tool: Select Circle:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02313", + "gapId": "keymap-item:Preview Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02314", + "gapId": "keymap-item:Preview Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02315", + "gapId": "keymap-item:Preview Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02316", + "gapId": "keymap-item:Preview Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02317", + "gapId": "keymap-item:Preview Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02318", + "gapId": "keymap-item:Preview Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02319", + "gapId": "keymap-item:Preview Tool: Tweak (fallback):SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02320", + "gapId": "keymap-item:Preview Tool: Tweak (fallback):SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02321", + "gapId": "keymap-item:Preview Tool: Tweak (fallback):SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02322", + "gapId": "keymap-item:Preview Tool: Tweak (fallback):SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02323", + "gapId": "keymap-item:Preview Tool: Tweak (fallback):SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02324", + "gapId": "keymap-item:Preview Tool: Tweak:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02325", + "gapId": "keymap-item:Preview Tool: Tweak:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02326", + "gapId": "keymap-item:Preview Tool: Tweak:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02327", + "gapId": "keymap-item:Preview Tool: Tweak:SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02328", + "gapId": "keymap-item:Preview Tool: Tweak:SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02329", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02330", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02331", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02332", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02333", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02334", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02335", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02336", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02337", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02338", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02339", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02340", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02341", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02342", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02343", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02344", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02345", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02346", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02347", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02348", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02349", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02350", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02351", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02352", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02353", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02354", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02355", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02356", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02357", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02358", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02359", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02360", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02361", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02362", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02363", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02364", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02365", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02366", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02367", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02368", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02369", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02370", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02371", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02372", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02373", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02374", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02375", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02376", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02377", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02378", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02379", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02380", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02381", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02382", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02383", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02384", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:59", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02385", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02386", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:60", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02387", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:61", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02388", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:62", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02389", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:63", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02390", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:64", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02391", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:65", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02392", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:66", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02393", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:67", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02394", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:68", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02395", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:69", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02396", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02397", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:70", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02398", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:71", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02399", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:72", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02400", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:73", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02401", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:74", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02402", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:75", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02403", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:76", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02404", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:77", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02405", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:78", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02406", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:79", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02407", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02408", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:80", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02409", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:81", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02410", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:82", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02411", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:83", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02412", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:84", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02413", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:85", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02414", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:86", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02415", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:87", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02416", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02417", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02418", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02419", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02420", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02421", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02422", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02423", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02424", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02425", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02426", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02427", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02428", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02429", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02430", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02431", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02432", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02433", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02434", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02435", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02436", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02437", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02438", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02439", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02440", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02441", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02442", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02443", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02444", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02445", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02446", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02447", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02448", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02449", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02450", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02451", + "gapId": "keymap-item:Region Context Menu:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02452", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02453", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02454", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02455", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02456", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02457", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02458", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02459", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02460", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02461", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02462", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02463", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02464", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02465", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02466", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02467", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02468", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02469", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02470", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02471", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02472", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02473", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02474", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02475", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02476", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02477", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02478", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02479", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02480", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02481", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02482", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02483", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02484", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02485", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02486", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02487", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02488", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02489", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02490", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02491", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02492", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02493", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02494", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02495", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02496", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02497", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02498", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02499", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02500", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02501", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02502", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02503", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02504", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02505", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02506", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02507", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02508", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02509", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02510", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02511", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02512", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02513", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02514", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02515", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02516", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02517", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02518", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02519", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02520", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02521", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02522", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02523", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02524", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02525", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02526", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02527", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02528", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02529", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02530", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02531", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02532", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02533", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02534", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02535", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02536", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02537", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02538", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02539", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02540", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02541", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02542", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02543", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02544", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02545", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02546", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02547", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02548", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02549", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02550", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02551", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02552", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02553", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02554", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02555", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02556", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02557", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02558", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02559", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02560", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02561", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02562", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02563", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02564", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02565", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02566", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02567", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02568", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02569", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02570", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02571", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02572", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02573", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02574", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02575", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02576", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02577", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02578", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02579", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02580", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02581", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02582", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02583", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02584", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02585", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02586", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02587", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02588", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:59", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02589", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02590", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:60", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02591", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:61", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02592", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:62", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02593", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:63", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02594", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:64", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02595", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:65", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02596", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:66", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02597", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02598", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02599", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02600", + "gapId": "keymap-item:Sequencer Channels:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02601", + "gapId": "keymap-item:Sequencer Channels:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02602", + "gapId": "keymap-item:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02603", + "gapId": "keymap-item:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02604", + "gapId": "keymap-item:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02605", + "gapId": "keymap-item:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02606", + "gapId": "keymap-item:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02607", + "gapId": "keymap-item:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02608", + "gapId": "keymap-item:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02609", + "gapId": "keymap-item:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02610", + "gapId": "keymap-item:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02611", + "gapId": "keymap-item:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02612", + "gapId": "keymap-item:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02613", + "gapId": "keymap-item:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02614", + "gapId": "keymap-item:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02615", + "gapId": "keymap-item:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02616", + "gapId": "keymap-item:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02617", + "gapId": "keymap-item:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02618", + "gapId": "keymap-item:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02619", + "gapId": "keymap-item:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02620", + "gapId": "keymap-item:Sequencer Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02621", + "gapId": "keymap-item:Sequencer Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02622", + "gapId": "keymap-item:Sequencer Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02623", + "gapId": "keymap-item:Sequencer Tool: Select Circle:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02624", + "gapId": "keymap-item:Sequencer Tool: Select Circle:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02625", + "gapId": "keymap-item:Sequencer Tool: Select Circle:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02626", + "gapId": "keymap-item:Sequencer Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02627", + "gapId": "keymap-item:Sequencer Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02628", + "gapId": "keymap-item:Sequencer Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02629", + "gapId": "keymap-item:Sequencer Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02630", + "gapId": "keymap-item:Sequencer Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02631", + "gapId": "keymap-item:Sequencer Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02632", + "gapId": "keymap-item:Sequencer Tool: Slip:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02633", + "gapId": "keymap-item:Sequencer Tool: Slip:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02634", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02635", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02636", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02637", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02638", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02639", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02640", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02641", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02642", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02643", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02644", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02645", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02646", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02647", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02648", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02649", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02650", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02651", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02652", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02653", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02654", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02655", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02656", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02657", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02658", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02659", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02660", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02661", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02662", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02663", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02664", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02665", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02666", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02667", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02668", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02669", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02670", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02671", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02672", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02673", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02674", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02675", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02676", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02677", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02678", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02679", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02680", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02681", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02682", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02683", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02684", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02685", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02686", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02687", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02688", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02689", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:59", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02690", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02691", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:60", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02692", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:61", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02693", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:62", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02694", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:63", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02695", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:64", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02696", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:65", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02697", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:66", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02698", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:67", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02699", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:68", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02700", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:69", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02701", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02702", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:70", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02703", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:71", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02704", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:72", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02705", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:73", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02706", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:74", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02707", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:75", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02708", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:76", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02709", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:77", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02710", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:78", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02711", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:79", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02712", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02713", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:80", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02714", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:81", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02715", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:82", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02716", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:83", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02717", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:84", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02718", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:85", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02719", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:86", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02720", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:87", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02721", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:88", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02722", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:89", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02723", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02724", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:90", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02725", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:91", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02726", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:92", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02727", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:93", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02728", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:94", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02729", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02730", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02731", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02732", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02733", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02734", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02735", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02736", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02737", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02738", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02739", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02740", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02741", + "gapId": "keymap-item:Spreadsheet Generic:SPREADSHEET:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02742", + "gapId": "keymap-item:Spreadsheet Generic:SPREADSHEET:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02743", + "gapId": "keymap-item:Spreadsheet Generic:SPREADSHEET:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02744", + "gapId": "keymap-item:Spreadsheet Generic:SPREADSHEET:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02745", + "gapId": "keymap-item:Spreadsheet Generic:SPREADSHEET:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02746", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02747", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02748", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02749", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02750", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02751", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02752", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02753", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02754", + "gapId": "keymap-item:Text Generic:TEXT_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02755", + "gapId": "keymap-item:Text Generic:TEXT_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02756", + "gapId": "keymap-item:Text Generic:TEXT_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02757", + "gapId": "keymap-item:Text Generic:TEXT_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02758", + "gapId": "keymap-item:Text Generic:TEXT_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02759", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02760", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02761", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02762", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02763", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02764", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02765", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02766", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02767", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02768", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02769", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02770", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02771", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02772", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02773", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02774", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02775", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02776", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02777", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02778", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02779", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02780", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02781", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02782", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02783", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02784", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02785", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02786", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02787", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02788", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02789", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02790", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02791", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02792", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02793", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02794", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02795", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02796", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02797", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02798", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02799", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02800", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02801", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02802", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02803", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02804", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02805", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02806", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02807", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02808", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02809", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02810", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02811", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02812", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02813", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02814", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:59", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02815", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02816", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:60", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02817", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:61", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02818", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:62", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02819", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:63", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02820", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:64", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02821", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:65", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02822", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:66", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02823", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:67", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02824", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:68", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02825", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:69", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02826", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02827", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:70", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02828", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02829", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02830", + "gapId": "keymap-item:Time Scrub:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02831", + "gapId": "keymap-item:Toolbar Popup:EMPTY:TEMPORARY:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02832", + "gapId": "keymap-item:Toolbar Popup:EMPTY:TEMPORARY:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02833", + "gapId": "keymap-item:Toolbar Popup:EMPTY:TEMPORARY:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02834", + "gapId": "keymap-item:Toolbar Popup:EMPTY:TEMPORARY:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02835", + "gapId": "keymap-item:Toolbar Popup:EMPTY:TEMPORARY:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02836", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02837", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02838", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02839", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02840", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02841", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02842", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02843", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02844", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02845", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02846", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02847", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02848", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02849", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02850", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02851", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02852", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02853", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02854", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02855", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02856", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02857", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02858", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02859", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02860", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02861", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02862", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02863", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02864", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02865", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02866", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02867", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02868", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02869", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02870", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02871", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02872", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02873", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02874", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02875", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02876", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02877", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02878", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02879", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02880", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02881", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02882", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02883", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02884", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02885", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02886", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02887", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02888", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02889", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02890", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02891", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02892", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02893", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02894", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02895", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02896", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02897", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02898", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02899", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02900", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02901", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02902", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02903", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02904", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02905", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02906", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02907", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02908", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02909", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02910", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02911", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02912", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02913", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02914", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02915", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02916", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02917", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02918", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02919", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02920", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02921", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02922", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02923", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02924", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02925", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02926", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02927", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02928", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02929", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02930", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02931", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02932", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02933", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02934", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02935", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02936", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02937", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02938", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02939", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02940", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02941", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02942", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02943", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02944", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02945", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02946", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02947", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02948", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02949", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02950", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02951", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02952", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02953", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02954", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02955", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02956", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:59", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02957", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02958", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:60", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02959", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:61", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02960", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:62", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02961", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:63", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02962", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:64", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02963", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:65", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02964", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:66", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02965", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:67", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02966", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:68", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02967", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:69", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02968", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02969", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:70", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02970", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:71", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02971", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:72", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02972", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:73", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02973", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:74", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02974", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:75", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02975", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:76", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02976", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:77", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02977", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:78", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02978", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:79", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02979", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02980", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:80", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02981", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:81", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02982", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:82", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02983", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:83", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02984", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:84", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02985", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:85", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02986", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:86", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02987", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:87", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02988", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02989", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02990", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02991", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02992", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02993", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02994", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02995", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02996", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02997", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02998", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02999", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03000", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03001", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03002", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03003", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03004", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03005", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03006", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03007", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03008", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03009", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03010", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03011", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03012", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03013", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03014", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03015", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03016", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03017", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03018", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03019", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03020", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03021", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03022", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03023", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03024", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03025", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03026", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03027", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03028", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03029", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03030", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03031", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03032", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03033", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03034", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03035", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03036", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03037", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03038", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03039", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03040", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03041", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03042", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03043", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03044", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03045", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03046", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03047", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03048", + "gapId": "keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03049", + "gapId": "keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03050", + "gapId": "keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03051", + "gapId": "keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03052", + "gapId": "keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03053", + "gapId": "keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03054", + "gapId": "keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03055", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03056", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03057", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03058", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03059", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03060", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03061", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03062", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03063", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03064", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03065", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03066", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03067", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03068", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03069", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03070", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03071", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03072", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03073", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03074", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03075", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03076", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03077", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03078", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03079", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03080", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03081", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03082", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03083", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03084", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03085", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03086", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03087", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03088", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03089", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03090", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03091", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03092", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03093", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03094", + "gapId": "keymap-item:View3D Dolly Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03095", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03096", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03097", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03098", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03099", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03100", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03101", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03102", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03103", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03104", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03105", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03106", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03107", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03108", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03109", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03110", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03111", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03112", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03113", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03114", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03115", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03116", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03117", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03118", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03119", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03120", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03121", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03122", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03123", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03124", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03125", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03126", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03127", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03128", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03129", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03130", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03131", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03132", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03133", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03134", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03135", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03136", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03137", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03138", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03139", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03140", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03141", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03142", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03143", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03144", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03145", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03146", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03147", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03148", + "gapId": "keymap-item:View3D Move Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03149", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03150", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03151", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03152", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03153", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03154", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03155", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03156", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03157", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03158", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03159", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03160", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03161", + "gapId": "keymap-item:View3D Rotate Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03162", + "gapId": "keymap-item:View3D Rotate Modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03163", + "gapId": "keymap-item:View3D Rotate Modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03164", + "gapId": "keymap-item:View3D Rotate Modal:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03165", + "gapId": "keymap-item:View3D Rotate Modal:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03166", + "gapId": "keymap-item:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03167", + "gapId": "keymap-item:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03168", + "gapId": "keymap-item:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03169", + "gapId": "keymap-item:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03170", + "gapId": "keymap-item:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03171", + "gapId": "keymap-item:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03172", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03173", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03174", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03175", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03176", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03177", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03178", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03179", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03180", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03181", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03182", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03183", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03184", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03185", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03186", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03187", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03188", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03189", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03190", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03191", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03192", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03193", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03194", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03195", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03196", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03197", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03198", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03199", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03200", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03201", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03202", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03203", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03204", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03205", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03206", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03207", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03208", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03209", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03210", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03211", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03212", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03213", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03214", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03215", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03216", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03217", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03218", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03219", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03220", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03221", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03222", + "gapId": "keymap-item:View3D Zoom Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03223", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03224", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03225", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03226", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03227", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03228", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03229", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03230", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03231", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03232", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03233", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03234", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03235", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03236", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03237", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03238", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03239", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03240", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03241", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03242", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03243", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03244", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03245", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03246", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03247", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03248", + "gapId": "keymap-item:Window:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03249", + "gapId": "keymap-item:Window:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03250", + "gapId": "keymap-item:Window:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03251", + "gapId": "keymap-item:Window:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03252", + "gapId": "keymap-item:Window:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03253", + "gapId": "keymap-item:Window:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03254", + "gapId": "keymap-item:Window:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03255", + "gapId": "keymap-item:Window:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03256", + "gapId": "keymap-item:Window:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03257", + "gapId": "keymap-item:Window:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03258", + "gapId": "keymap-item:Window:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03259", + "gapId": "keymap-item:Window:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03260", + "gapId": "keymap-item:Window:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03261", + "gapId": "keymap-item:Window:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03262", + "gapId": "keymap-item:Window:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03263", + "gapId": "keymap-item:Window:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03264", + "gapId": "keymap-item:Window:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03265", + "gapId": "keymap-item:Window:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03266", + "gapId": "keymap-item:Window:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03267", + "gapId": "keymap-item:Window:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03268", + "gapId": "keymap-item:Window:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03269", + "gapId": "keymap-item:Window:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03270", + "gapId": "keymap-item:Window:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03271", + "gapId": "keymap-item:Window:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03272", + "gapId": "keymap-item:Window:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03273", + "gapId": "keymap-item:Window:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03274", + "gapId": "keymap-item:Window:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03275", + "gapId": "keymap-item:Window:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03276", + "gapId": "keymap-item:Window:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03277", + "gapId": "keymap-item:Window:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03278", + "gapId": "keymap-item:Window:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03279", + "gapId": "keymap-item:Window:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03280", + "gapId": "keymap-item:Window:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03281", + "gapId": "keymap:3D View Generic:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03282", + "gapId": "keymap:3D View Tool: Bend:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03283", + "gapId": "keymap:3D View Tool: Breakdowner:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03284", + "gapId": "keymap:3D View Tool: Cursor:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03285", + "gapId": "keymap:3D View Tool: Edit Armature, B-Bone Size:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03286", + "gapId": "keymap:3D View Tool: Edit Armature, Bone Envelope:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03287", + "gapId": "keymap:3D View Tool: Edit Armature, Extrude to Cursor:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03288", + "gapId": "keymap:3D View Tool: Edit Armature, Extrude:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03289", + "gapId": "keymap:3D View Tool: Edit Armature, Roll:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03290", + "gapId": "keymap:3D View Tool: Edit Curve, Curve Pen:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03291", + "gapId": "keymap:3D View Tool: Edit Curve, Draw:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03292", + "gapId": "keymap:3D View Tool: Edit Curve, Extrude to Cursor:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03293", + "gapId": "keymap:3D View Tool: Edit Curve, Extrude:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03294", + "gapId": "keymap:3D View Tool: Edit Curve, Radius:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03295", + "gapId": "keymap:3D View Tool: Edit Curve, Randomize:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03296", + "gapId": "keymap:3D View Tool: Edit Curve, Tilt:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03297", + "gapId": "keymap:3D View Tool: Edit Curves, Draw:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03298", + "gapId": "keymap:3D View Tool: Edit Curves, Pen:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03299", + "gapId": "keymap:3D View Tool: Edit Grease Pencil, Gradient:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03300", + "gapId": "keymap:3D View Tool: Edit Grease Pencil, Interpolate:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03301", + "gapId": "keymap:3D View Tool: Edit Grease Pencil, Pen:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03302", + "gapId": "keymap:3D View Tool: Edit Mesh, Bevel:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03303", + "gapId": "keymap:3D View Tool: Edit Mesh, Bisect:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03304", + "gapId": "keymap:3D View Tool: Edit Mesh, Edge Slide:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03305", + "gapId": "keymap:3D View Tool: Edit Mesh, Extrude Along Normals:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03306", + "gapId": "keymap:3D View Tool: Edit Mesh, Extrude Individual:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03307", + "gapId": "keymap:3D View Tool: Edit Mesh, Extrude Manifold:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03308", + "gapId": "keymap:3D View Tool: Edit Mesh, Extrude Region:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03309", + "gapId": "keymap:3D View Tool: Edit Mesh, Extrude to Cursor:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03310", + "gapId": "keymap:3D View Tool: Edit Mesh, Inset Faces:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03311", + "gapId": "keymap:3D View Tool: Edit Mesh, Knife:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03312", + "gapId": "keymap:3D View Tool: Edit Mesh, Loop Cut:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03313", + "gapId": "keymap:3D View Tool: Edit Mesh, Offset Edge Loop Cut:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03314", + "gapId": "keymap:3D View Tool: Edit Mesh, Poly Build:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03315", + "gapId": "keymap:3D View Tool: Edit Mesh, Push/Pull:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03316", + "gapId": "keymap:3D View Tool: Edit Mesh, Randomize:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03317", + "gapId": "keymap:3D View Tool: Edit Mesh, Rip Edge:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03318", + "gapId": "keymap:3D View Tool: Edit Mesh, Rip Region:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03319", + "gapId": "keymap:3D View Tool: Edit Mesh, Shrink/Fatten:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03320", + "gapId": "keymap:3D View Tool: Edit Mesh, Smooth:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03321", + "gapId": "keymap:3D View Tool: Edit Mesh, Spin Duplicates:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03322", + "gapId": "keymap:3D View Tool: Edit Mesh, Spin:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03323", + "gapId": "keymap:3D View Tool: Edit Mesh, To Sphere:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03324", + "gapId": "keymap:3D View Tool: Edit Mesh, Vertex Slide:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03325", + "gapId": "keymap:3D View Tool: Edit Text, Select Text:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03326", + "gapId": "keymap:3D View Tool: Measure:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03327", + "gapId": "keymap:3D View Tool: Move:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03328", + "gapId": "keymap:3D View Tool: Object, Add Primitive:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03329", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Arc:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03330", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Box:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03331", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Circle:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03332", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Curve:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03333", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Eyedropper:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03334", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Interpolate:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03335", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Line:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03336", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Polyline:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03337", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Trim:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03338", + "gapId": "keymap:3D View Tool: Paint Weight, Gradient:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03339", + "gapId": "keymap:3D View Tool: Paint Weight, Sample Vertex Group:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03340", + "gapId": "keymap:3D View Tool: Paint Weight, Sample Weight:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03341", + "gapId": "keymap:3D View Tool: Push:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03342", + "gapId": "keymap:3D View Tool: Relax:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03343", + "gapId": "keymap:3D View Tool: Rotate:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03344", + "gapId": "keymap:3D View Tool: Scale:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03345", + "gapId": "keymap:3D View Tool: Sculpt, Box Face Set:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03346", + "gapId": "keymap:3D View Tool: Sculpt, Box Hide:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03347", + "gapId": "keymap:3D View Tool: Sculpt, Box Mask:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03348", + "gapId": "keymap:3D View Tool: Sculpt, Box Trim:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03349", + "gapId": "keymap:3D View Tool: Sculpt, Cloth Filter:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03350", + "gapId": "keymap:3D View Tool: Sculpt, Color Filter:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03351", + "gapId": "keymap:3D View Tool: Sculpt, Face Set Edit:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03352", + "gapId": "keymap:3D View Tool: Sculpt, Lasso Face Set:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03353", + "gapId": "keymap:3D View Tool: Sculpt, Lasso Hide:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03354", + "gapId": "keymap:3D View Tool: Sculpt, Lasso Mask:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03355", + "gapId": "keymap:3D View Tool: Sculpt, Lasso Trim:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03356", + "gapId": "keymap:3D View Tool: Sculpt, Line Face Set:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03357", + "gapId": "keymap:3D View Tool: Sculpt, Line Hide:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03358", + "gapId": "keymap:3D View Tool: Sculpt, Line Mask:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03359", + "gapId": "keymap:3D View Tool: Sculpt, Line Project:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03360", + "gapId": "keymap:3D View Tool: Sculpt, Line Trim:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03361", + "gapId": "keymap:3D View Tool: Sculpt, Mask by Color:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03362", + "gapId": "keymap:3D View Tool: Sculpt, Mesh Filter:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03363", + "gapId": "keymap:3D View Tool: Sculpt, Polyline Face Set:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03364", + "gapId": "keymap:3D View Tool: Sculpt, Polyline Hide:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03365", + "gapId": "keymap:3D View Tool: Sculpt, Polyline Mask:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03366", + "gapId": "keymap:3D View Tool: Sculpt, Polyline Trim:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03367", + "gapId": "keymap:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03368", + "gapId": "keymap:3D View Tool: Select Box:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03369", + "gapId": "keymap:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03370", + "gapId": "keymap:3D View Tool: Select Circle:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03371", + "gapId": "keymap:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03372", + "gapId": "keymap:3D View Tool: Select Lasso:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03373", + "gapId": "keymap:3D View Tool: Shear:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03374", + "gapId": "keymap:3D View Tool: Transform:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03375", + "gapId": "keymap:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03376", + "gapId": "keymap:3D View Tool: Tweak:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03377", + "gapId": "keymap:3D View:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03378", + "gapId": "keymap:Animation Channels:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03379", + "gapId": "keymap:Animation:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03380", + "gapId": "keymap:Armature:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03381", + "gapId": "keymap:Bevel Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03382", + "gapId": "keymap:Clip Dopesheet Editor:CLIP_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03383", + "gapId": "keymap:Clip Editor:CLIP_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03384", + "gapId": "keymap:Clip Graph Editor:CLIP_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03385", + "gapId": "keymap:Clip Time Scrub:CLIP_EDITOR:PREVIEW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03386", + "gapId": "keymap:Clip:CLIP_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03387", + "gapId": "keymap:Console:CONSOLE:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03388", + "gapId": "keymap:Curve Pen Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03389", + "gapId": "keymap:Curve:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03390", + "gapId": "keymap:Curves:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03391", + "gapId": "keymap:Custom Normals Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03392", + "gapId": "keymap:Dopesheet Generic:DOPESHEET_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03393", + "gapId": "keymap:Dopesheet:DOPESHEET_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03394", + "gapId": "keymap:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03395", + "gapId": "keymap:Eyedropper Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03396", + "gapId": "keymap:File Browser Buttons:FILE_BROWSER:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03397", + "gapId": "keymap:File Browser Main:FILE_BROWSER:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03398", + "gapId": "keymap:File Browser:FILE_BROWSER:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03399", + "gapId": "keymap:Fill Tool Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03400", + "gapId": "keymap:Font:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03401", + "gapId": "keymap:Frames:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03402", + "gapId": "keymap:Generic Gizmo Click Drag:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03403", + "gapId": "keymap:Generic Gizmo Drag:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03404", + "gapId": "keymap:Generic Gizmo Maybe Drag:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03405", + "gapId": "keymap:Generic Gizmo Select:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03406", + "gapId": "keymap:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03407", + "gapId": "keymap:Generic Gizmo:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03408", + "gapId": "keymap:Generic Tool: Annotate Eraser:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03409", + "gapId": "keymap:Generic Tool: Annotate Line:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03410", + "gapId": "keymap:Generic Tool: Annotate Polygon:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03411", + "gapId": "keymap:Generic Tool: Annotate:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03412", + "gapId": "keymap:Gesture Box:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03413", + "gapId": "keymap:Gesture Lasso:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03414", + "gapId": "keymap:Gesture Polyline:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03415", + "gapId": "keymap:Gesture Straight Line:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03416", + "gapId": "keymap:Gesture Zoom Border:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03417", + "gapId": "keymap:Graph Editor Generic:GRAPH_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03418", + "gapId": "keymap:Graph Editor:GRAPH_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03419", + "gapId": "keymap:Grease Pencil Brush Stroke:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03420", + "gapId": "keymap:Grease Pencil Draw Mode:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03421", + "gapId": "keymap:Grease Pencil Edit Mode:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03422", + "gapId": "keymap:Grease Pencil Fill Tool:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03423", + "gapId": "keymap:Grease Pencil Sculpt Mode:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03424", + "gapId": "keymap:Grease Pencil Selection:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03425", + "gapId": "keymap:Grease Pencil Vertex Paint:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03426", + "gapId": "keymap:Grease Pencil Weight Paint:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03427", + "gapId": "keymap:Grease Pencil:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03428", + "gapId": "keymap:Image Editor Tool: Mask, Box:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03429", + "gapId": "keymap:Image Editor Tool: Mask, Circle:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03430", + "gapId": "keymap:Image Editor Tool: Mask, Cursor:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03431", + "gapId": "keymap:Image Editor Tool: Mask, Move:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03432", + "gapId": "keymap:Image Editor Tool: Mask, Rotate:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03433", + "gapId": "keymap:Image Editor Tool: Mask, Scale:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03434", + "gapId": "keymap:Image Editor Tool: Mask, Select Box (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03435", + "gapId": "keymap:Image Editor Tool: Mask, Select Box:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03436", + "gapId": "keymap:Image Editor Tool: Mask, Select Circle (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03437", + "gapId": "keymap:Image Editor Tool: Mask, Select Circle:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03438", + "gapId": "keymap:Image Editor Tool: Mask, Select Lasso (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03439", + "gapId": "keymap:Image Editor Tool: Mask, Select Lasso:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03440", + "gapId": "keymap:Image Editor Tool: Mask, Transform:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03441", + "gapId": "keymap:Image Editor Tool: Mask, Tweak (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03442", + "gapId": "keymap:Image Editor Tool: Mask, Tweak:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03443", + "gapId": "keymap:Image Editor Tool: Sample:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03444", + "gapId": "keymap:Image Editor Tool: Uv, Cursor:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03445", + "gapId": "keymap:Image Editor Tool: Uv, Grab:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03446", + "gapId": "keymap:Image Editor Tool: Uv, Move:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03447", + "gapId": "keymap:Image Editor Tool: Uv, Pinch:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03448", + "gapId": "keymap:Image Editor Tool: Uv, Relax:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03449", + "gapId": "keymap:Image Editor Tool: Uv, Rip Region:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03450", + "gapId": "keymap:Image Editor Tool: Uv, Rotate:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03451", + "gapId": "keymap:Image Editor Tool: Uv, Scale:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03452", + "gapId": "keymap:Image Editor Tool: Uv, Select Box (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03453", + "gapId": "keymap:Image Editor Tool: Uv, Select Box:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03454", + "gapId": "keymap:Image Editor Tool: Uv, Select Circle (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03455", + "gapId": "keymap:Image Editor Tool: Uv, Select Circle:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03456", + "gapId": "keymap:Image Editor Tool: Uv, Select Lasso (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03457", + "gapId": "keymap:Image Editor Tool: Uv, Select Lasso:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03458", + "gapId": "keymap:Image Editor Tool: Uv, Tweak (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03459", + "gapId": "keymap:Image Editor Tool: Uv, Tweak:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03460", + "gapId": "keymap:Image Generic:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03461", + "gapId": "keymap:Image Paint:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03462", + "gapId": "keymap:Image:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03463", + "gapId": "keymap:Info:INFO:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03464", + "gapId": "keymap:Interpolate Tool Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03465", + "gapId": "keymap:Knife Tool Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03466", + "gapId": "keymap:Lattice:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03467", + "gapId": "keymap:Markers:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03468", + "gapId": "keymap:Mask Editing:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03469", + "gapId": "keymap:Mesh Filter Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03470", + "gapId": "keymap:Mesh:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03471", + "gapId": "keymap:Metaball:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03472", + "gapId": "keymap:NLA Editor:NLA_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03473", + "gapId": "keymap:NLA Generic:NLA_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03474", + "gapId": "keymap:NLA Tracks:NLA_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03475", + "gapId": "keymap:Node Editor:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03476", + "gapId": "keymap:Node Generic:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03477", + "gapId": "keymap:Node Link Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03478", + "gapId": "keymap:Node Resize Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03479", + "gapId": "keymap:Node Tool: Add Reroute:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03480", + "gapId": "keymap:Node Tool: Links Cut:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03481", + "gapId": "keymap:Node Tool: Mute Links:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03482", + "gapId": "keymap:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03483", + "gapId": "keymap:Node Tool: Select Box:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03484", + "gapId": "keymap:Node Tool: Select Circle (fallback):NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03485", + "gapId": "keymap:Node Tool: Select Circle:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03486", + "gapId": "keymap:Node Tool: Select Lasso (fallback):NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03487", + "gapId": "keymap:Node Tool: Select Lasso:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03488", + "gapId": "keymap:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03489", + "gapId": "keymap:Node Tool: Tweak:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03490", + "gapId": "keymap:Object Mode:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03491", + "gapId": "keymap:Object Non-modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03492", + "gapId": "keymap:Outliner:OUTLINER:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03493", + "gapId": "keymap:Paint Curve:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03494", + "gapId": "keymap:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03495", + "gapId": "keymap:Paint Stroke Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03496", + "gapId": "keymap:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03497", + "gapId": "keymap:Particle:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03498", + "gapId": "keymap:Pen Tool Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03499", + "gapId": "keymap:Point Cloud:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03500", + "gapId": "keymap:Pose:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03501", + "gapId": "keymap:Preferences:PREFERENCES:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03502", + "gapId": "keymap:Preferences_nav:PREFERENCES:UI", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03503", + "gapId": "keymap:Preview Tool: Cursor:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03504", + "gapId": "keymap:Preview Tool: Move:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03505", + "gapId": "keymap:Preview Tool: Rotate:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03506", + "gapId": "keymap:Preview Tool: Sample:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03507", + "gapId": "keymap:Preview Tool: Scale:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03508", + "gapId": "keymap:Preview Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03509", + "gapId": "keymap:Preview Tool: Select Box:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03510", + "gapId": "keymap:Preview Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03511", + "gapId": "keymap:Preview Tool: Select Circle:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03512", + "gapId": "keymap:Preview Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03513", + "gapId": "keymap:Preview Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03514", + "gapId": "keymap:Preview Tool: Tweak (fallback):SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03515", + "gapId": "keymap:Preview Tool: Tweak:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03516", + "gapId": "keymap:Preview:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03517", + "gapId": "keymap:Primitive Tool Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03518", + "gapId": "keymap:Property Editor:PROPERTIES:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03519", + "gapId": "keymap:Region Context Menu:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03520", + "gapId": "keymap:Screen Editing:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03521", + "gapId": "keymap:Screen:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03522", + "gapId": "keymap:Sculpt Curves:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03523", + "gapId": "keymap:Sculpt Expand Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03524", + "gapId": "keymap:Sculpt:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03525", + "gapId": "keymap:Sequencer Channels:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03526", + "gapId": "keymap:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03527", + "gapId": "keymap:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03528", + "gapId": "keymap:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03529", + "gapId": "keymap:Sequencer Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03530", + "gapId": "keymap:Sequencer Tool: Select Circle:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03531", + "gapId": "keymap:Sequencer Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03532", + "gapId": "keymap:Sequencer Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03533", + "gapId": "keymap:Sequencer Tool: Slip:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03534", + "gapId": "keymap:Sequencer:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03535", + "gapId": "keymap:Slip Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03536", + "gapId": "keymap:Spreadsheet Generic:SPREADSHEET:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03537", + "gapId": "keymap:Standard Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03538", + "gapId": "keymap:Text Generic:TEXT_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03539", + "gapId": "keymap:Text:TEXT_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03540", + "gapId": "keymap:Time Scrub:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03541", + "gapId": "keymap:Toolbar Popup:EMPTY:TEMPORARY", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03542", + "gapId": "keymap:Transform Axis Target Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03543", + "gapId": "keymap:Transform Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03544", + "gapId": "keymap:UV Editor:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03545", + "gapId": "keymap:User Interface:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03546", + "gapId": "keymap:Vertex Paint:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03547", + "gapId": "keymap:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03548", + "gapId": "keymap:View2D Buttons List:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03549", + "gapId": "keymap:View2D:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03550", + "gapId": "keymap:View3D Dolly Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03551", + "gapId": "keymap:View3D Fly Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03552", + "gapId": "keymap:View3D Gesture Circle:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03553", + "gapId": "keymap:View3D Move Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03554", + "gapId": "keymap:View3D Placement Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03555", + "gapId": "keymap:View3D Rotate Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03556", + "gapId": "keymap:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03557", + "gapId": "keymap:View3D Walk Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03558", + "gapId": "keymap:View3D Zoom Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03559", + "gapId": "keymap:Weight Paint:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03560", + "gapId": "keymap:Window:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03561", + "gapId": "region:ASSET_SHELF", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03562", + "gapId": "region:ASSET_SHELF_HEADER", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03563", + "gapId": "region:CHANNELS", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03564", + "gapId": "region:EXECUTE", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03565", + "gapId": "region:FOOTER", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03566", + "gapId": "region:HEADER", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03567", + "gapId": "region:HUD", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03568", + "gapId": "region:NAVIGATION_BAR", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03569", + "gapId": "region:PREVIEW", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03570", + "gapId": "region:SCRUBBING", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03571", + "gapId": "region:TEMPORARY", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03572", + "gapId": "region:TOOLS", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03573", + "gapId": "region:TOOL_HEADER", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03574", + "gapId": "region:TOOL_PROPS", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03575", + "gapId": "region:UI", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03576", + "gapId": "region:WINDOW", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03577", + "gapId": "region:XR", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03578", + "gapId": "space-class:SpaceClipEditor", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03579", + "gapId": "space-class:SpaceConsole", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03580", + "gapId": "space-class:SpaceDopeSheetEditor", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03581", + "gapId": "space-class:SpaceFileBrowser", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03582", + "gapId": "space-class:SpaceGraphEditor", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03583", + "gapId": "space-class:SpaceImageEditor", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03584", + "gapId": "space-class:SpaceInfo", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03585", + "gapId": "space-class:SpaceNLA", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03586", + "gapId": "space-class:SpaceNodeEditor", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03587", + "gapId": "space-class:SpaceOutliner", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03588", + "gapId": "space-class:SpacePreferences", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03589", + "gapId": "space-class:SpaceProperties", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03590", + "gapId": "space-class:SpaceSequenceEditor", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03591", + "gapId": "space-class:SpaceSpreadsheet", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03592", + "gapId": "space-class:SpaceTextEditor", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03593", + "gapId": "space-class:SpaceView3D", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03594", + "gapId": "space:CLIP_EDITOR", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03595", + "gapId": "space:CONSOLE", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03596", + "gapId": "space:DOPESHEET_EDITOR", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03597", + "gapId": "space:EMPTY", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03598", + "gapId": "space:FILE_BROWSER", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03599", + "gapId": "space:GRAPH_EDITOR", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03600", + "gapId": "space:IMAGE_EDITOR", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03601", + "gapId": "space:INFO", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03602", + "gapId": "space:NLA_EDITOR", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03603", + "gapId": "space:NODE_EDITOR", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03604", + "gapId": "space:OUTLINER", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03605", + "gapId": "space:PREFERENCES", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03606", + "gapId": "space:PROPERTIES", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03607", + "gapId": "space:SEQUENCE_EDITOR", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03608", + "gapId": "space:SPREADSHEET", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03609", + "gapId": "space:STATUSBAR", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03610", + "gapId": "space:TEXT_EDITOR", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03611", + "gapId": "space:TOPBAR", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03612", + "gapId": "space:VIEW_3D", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03613", + "gapId": "workspace:EDIT", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03614", + "gapId": "workspace:EDIT_GPENCIL", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03615", + "gapId": "workspace:OBJECT", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03616", + "gapId": "workspace:PAINT_GREASE_PENCIL", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03617", + "gapId": "workspace:PARTICLE_EDIT", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03618", + "gapId": "workspace:POSE", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03619", + "gapId": "workspace:SCULPT", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03620", + "gapId": "workspace:SCULPT_GREASE_PENCIL", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03621", + "gapId": "workspace:TEXTURE_PAINT", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03622", + "gapId": "workspace:VERTEX_GREASE_PENCIL", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03623", + "gapId": "workspace:VERTEX_PAINT", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03624", + "gapId": "workspace:WEIGHT_GREASE_PENCIL", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03625", + "gapId": "workspace:WEIGHT_PAINT", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00001", + "gapId": "rna:Depsgraph:Depsgraph", + "ownerFamily": "Depsgraph", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00002", + "gapId": "rna:Depsgraph:DepsgraphObjectInstance", + "ownerFamily": "Depsgraph", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00003", + "gapId": "rna:Depsgraph:DepsgraphUpdate", + "ownerFamily": "Depsgraph", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00004", + "gapId": "rna:Scene:Camera", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00005", + "gapId": "rna:Scene:Collection", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00006", + "gapId": "rna:Scene:Constraint", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00007", + "gapId": "rna:Scene:LayerCollection", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00008", + "gapId": "rna:Scene:Light", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00009", + "gapId": "rna:Scene:Material", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00010", + "gapId": "rna:Scene:Modifier", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00011", + "gapId": "rna:Scene:NodeTree", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00012", + "gapId": "rna:Scene:Object", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00013", + "gapId": "rna:Scene:RenderSettings", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00014", + "gapId": "rna:Scene:Scene", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00015", + "gapId": "rna:Scene:Screen", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00016", + "gapId": "rna:Scene:ViewLayer", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00017", + "gapId": "rna:Scene:Window", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00018", + "gapId": "rna:Scene:WindowManager", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00019", + "gapId": "rna:Scene:World", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + } + ] +} diff --git a/tests/golden/corrective/C5-003/inventory-report.second.json b/tests/golden/corrective/C5-003/inventory-report.second.json new file mode 100644 index 00000000..c425c764 --- /dev/null +++ b/tests/golden/corrective/C5-003/inventory-report.second.json @@ -0,0 +1,62201 @@ +{ + "schemaVersion": 1, + "task": "C5-003", + "operation": "CORRECTIVE_STAGED_LEGACY_INVENTORY_MIGRATION", + "status": "STAGED_ONLY", + "queueMutation": false, + "source": { + "catalogTaskCount": 6900, + "clusterReportTask": "C5-001", + "parentManifest": "C5-002", + "capabilityCount": 3 + }, + "coverage": [ + { + "family": "ASSET_CATALOG", + "legacyTaskCount": 6, + "pendingCount": 0, + "completedCount": 6, + "representativeEvidence": "tests/golden/corrective/C3-003/manifest.json", + "workflow": "assetCatalogAppend" + }, + { + "family": "MODIFIER", + "legacyTaskCount": 83, + "pendingCount": 0, + "completedCount": 83, + "representativeEvidence": "tests/golden/corrective/C4-001/manifest.json", + "workflow": "modifierSetEnabled" + }, + { + "family": "MESH", + "legacyTaskCount": 168, + "pendingCount": 167, + "completedCount": 1, + "representativeEvidence": "tests/golden/corrective/C4-002/manifest.json", + "workflow": "meshTranslateVertex" + } + ], + "capabilityManifest": [ + { + "capabilityId": "CAP-ASSET-CATALOG-MUTATION", + "family": "ASSET_CATALOG", + "lifecycleStatus": "planned", + "completionClass": "PLANNED", + "parityLevel": "L0", + "targetParityLevel": "L4", + "sourceGaps": [ + "operator:asset.catalog_new", + "operator:asset.catalog_delete", + "operator:asset.catalogs_save", + "operator:asset.catalog_undo", + "operator:asset.catalog_redo" + ], + "catalogMatches": [ + "operator:asset.catalog_new", + "operator:asset.catalog_delete", + "operator:asset.catalogs_save", + "operator:asset.catalog_undo", + "operator:asset.catalog_redo" + ], + "representativeEvidence": "tests/golden/corrective/C3-003/manifest.json", + "migrationStatus": "staged_only" + }, + { + "capabilityId": "CAP-MODIFIER-STATE-MUTATION", + "family": "MODIFIER", + "lifecycleStatus": "planned", + "completionClass": "PLANNED", + "parityLevel": "L0", + "targetParityLevel": "L3", + "sourceGaps": [ + "modifier:state", + "operator:object.modifier_toggle" + ], + "catalogMatches": [], + "representativeEvidence": "tests/golden/corrective/C4-001/manifest.json", + "migrationStatus": "staged_only" + }, + { + "capabilityId": "CAP-MESH-POSITIVE-EDIT", + "family": "MESH", + "lifecycleStatus": "planned", + "completionClass": "PLANNED", + "parityLevel": "L0", + "targetParityLevel": "L3", + "sourceGaps": [ + "mesh:edit", + "operator:mesh.edit" + ], + "catalogMatches": [], + "representativeEvidence": "tests/golden/corrective/C4-002/manifest.json", + "migrationStatus": "staged_only" + } + ], + "classificationSummary": { + "legacy_completed_unclassified": 276, + "legacy_pending": 6624 + }, + "classification": [ + { + "id": "M16-GAP-00001", + "gapId": "datablock:Action", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00002", + "gapId": "datablock:Armature", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00003", + "gapId": "datablock:Brush", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00004", + "gapId": "datablock:Camera", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00005", + "gapId": "datablock:Collection", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00006", + "gapId": "datablock:Curve", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00007", + "gapId": "datablock:Curves", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00008", + "gapId": "datablock:FreestyleLineStyle", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00009", + "gapId": "datablock:GreasePencil", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00010", + "gapId": "datablock:Lattice", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00011", + "gapId": "datablock:Library", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00012", + "gapId": "datablock:Light", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00013", + "gapId": "datablock:Material", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00014", + "gapId": "datablock:Mesh", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00015", + "gapId": "datablock:MetaBall", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00016", + "gapId": "datablock:NodeTree", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00017", + "gapId": "datablock:Object", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00018", + "gapId": "datablock:ParticleSettings", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00019", + "gapId": "datablock:PointCloud", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00020", + "gapId": "datablock:Scene", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00021", + "gapId": "datablock:Screen", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00022", + "gapId": "datablock:Sound", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00023", + "gapId": "datablock:Speaker", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00024", + "gapId": "datablock:Text", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00025", + "gapId": "datablock:Texture", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00026", + "gapId": "datablock:Volume", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00027", + "gapId": "datablock:WindowManager", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00028", + "gapId": "datablock:WorkSpace", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00029", + "gapId": "datablock:World", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00030", + "gapId": "modifier:ARMATURE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00031", + "gapId": "modifier:ARRAY", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00032", + "gapId": "modifier:BEVEL", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00033", + "gapId": "modifier:BOOLEAN", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00034", + "gapId": "modifier:BUILD", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00035", + "gapId": "modifier:CAST", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00036", + "gapId": "modifier:CLOTH", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00037", + "gapId": "modifier:COLLISION", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00038", + "gapId": "modifier:CORRECTIVE_SMOOTH", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00039", + "gapId": "modifier:CURVE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00040", + "gapId": "modifier:DATA_TRANSFER", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00041", + "gapId": "modifier:DECIMATE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00042", + "gapId": "modifier:DISPLACE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00043", + "gapId": "modifier:DYNAMIC_PAINT", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00044", + "gapId": "modifier:EDGE_SPLIT", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00045", + "gapId": "modifier:EXPLODE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00046", + "gapId": "modifier:FLUID", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00047", + "gapId": "modifier:GREASE_PENCIL_ARMATURE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00048", + "gapId": "modifier:GREASE_PENCIL_ARRAY", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00049", + "gapId": "modifier:GREASE_PENCIL_BUILD", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00050", + "gapId": "modifier:GREASE_PENCIL_COLOR", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00051", + "gapId": "modifier:GREASE_PENCIL_DASH", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00052", + "gapId": "modifier:GREASE_PENCIL_ENVELOPE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00053", + "gapId": "modifier:GREASE_PENCIL_HOOK", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00054", + "gapId": "modifier:GREASE_PENCIL_LATTICE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00055", + "gapId": "modifier:GREASE_PENCIL_LENGTH", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00056", + "gapId": "modifier:GREASE_PENCIL_MIRROR", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00057", + "gapId": "modifier:GREASE_PENCIL_MULTIPLY", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00058", + "gapId": "modifier:GREASE_PENCIL_NOISE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00059", + "gapId": "modifier:GREASE_PENCIL_OFFSET", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00060", + "gapId": "modifier:GREASE_PENCIL_OPACITY", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00061", + "gapId": "modifier:GREASE_PENCIL_OUTLINE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00062", + "gapId": "modifier:GREASE_PENCIL_SHRINKWRAP", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00063", + "gapId": "modifier:GREASE_PENCIL_SIMPLIFY", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00064", + "gapId": "modifier:GREASE_PENCIL_SMOOTH", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00065", + "gapId": "modifier:GREASE_PENCIL_SUBDIV", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00066", + "gapId": "modifier:GREASE_PENCIL_TEXTURE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00067", + "gapId": "modifier:GREASE_PENCIL_THICKNESS", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00068", + "gapId": "modifier:GREASE_PENCIL_TIME", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00069", + "gapId": "modifier:GREASE_PENCIL_TINT", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00070", + "gapId": "modifier:GREASE_PENCIL_VERTEX_WEIGHT_ANGLE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00071", + "gapId": "modifier:GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00072", + "gapId": "modifier:HOOK", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00073", + "gapId": "modifier:LAPLACIANDEFORM", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00074", + "gapId": "modifier:LAPLACIANSMOOTH", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00075", + "gapId": "modifier:LATTICE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00076", + "gapId": "modifier:LINEART", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00077", + "gapId": "modifier:MASK", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00078", + "gapId": "modifier:MESH_CACHE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00079", + "gapId": "modifier:MESH_DEFORM", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00080", + "gapId": "modifier:MESH_SEQUENCE_CACHE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00081", + "gapId": "modifier:MESH_TO_VOLUME", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00082", + "gapId": "modifier:MIRROR", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00083", + "gapId": "modifier:MULTIRES", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00084", + "gapId": "modifier:NODES", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00085", + "gapId": "modifier:NORMAL_EDIT", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00086", + "gapId": "modifier:OCEAN", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00087", + "gapId": "modifier:PARTICLE_INSTANCE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00088", + "gapId": "modifier:PARTICLE_SYSTEM", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00089", + "gapId": "modifier:REMESH", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00090", + "gapId": "modifier:SCREW", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00091", + "gapId": "modifier:SHRINKWRAP", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00092", + "gapId": "modifier:SIMPLE_DEFORM", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00093", + "gapId": "modifier:SKIN", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00094", + "gapId": "modifier:SMOOTH", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00095", + "gapId": "modifier:SOFT_BODY", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00096", + "gapId": "modifier:SOLIDIFY", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00097", + "gapId": "modifier:SUBSURF", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00098", + "gapId": "modifier:SURFACE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00099", + "gapId": "modifier:SURFACE_DEFORM", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00100", + "gapId": "modifier:TRIANGULATE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00101", + "gapId": "modifier:UV_PROJECT", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00102", + "gapId": "modifier:UV_WARP", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00103", + "gapId": "modifier:VERTEX_WEIGHT_EDIT", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00104", + "gapId": "modifier:VERTEX_WEIGHT_MIX", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00105", + "gapId": "modifier:VERTEX_WEIGHT_PROXIMITY", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00106", + "gapId": "modifier:VOLUME_DISPLACE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00107", + "gapId": "modifier:VOLUME_TO_MESH", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00108", + "gapId": "modifier:WARP", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00109", + "gapId": "modifier:WAVE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00110", + "gapId": "modifier:WEIGHTED_NORMAL", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00111", + "gapId": "modifier:WELD", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00112", + "gapId": "modifier:WIREFRAME", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00113", + "gapId": "operator:action.bake_keys", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00114", + "gapId": "operator:action.clean", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00115", + "gapId": "operator:action.clickselect", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00116", + "gapId": "operator:action.copy", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00117", + "gapId": "operator:action.delete", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00118", + "gapId": "operator:action.duplicate", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00119", + "gapId": "operator:action.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00120", + "gapId": "operator:action.easing_type", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00121", + "gapId": "operator:action.extrapolation_type", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00122", + "gapId": "operator:action.frame_jump", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00123", + "gapId": "operator:action.handle_type", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00124", + "gapId": "operator:action.interpolation_type", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00125", + "gapId": "operator:action.keyframe_insert", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00126", + "gapId": "operator:action.keyframe_type", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00127", + "gapId": "operator:action.markers_make_local", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00128", + "gapId": "operator:action.mirror", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00129", + "gapId": "operator:action.new", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00130", + "gapId": "operator:action.paste", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00131", + "gapId": "operator:action.previewrange_set", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00132", + "gapId": "operator:action.push_down", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00133", + "gapId": "operator:action.select_all", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00134", + "gapId": "operator:action.select_box", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00135", + "gapId": "operator:action.select_by_type", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00136", + "gapId": "operator:action.select_circle", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00137", + "gapId": "operator:action.select_column", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00138", + "gapId": "operator:action.select_lasso", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00139", + "gapId": "operator:action.select_leftright", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00140", + "gapId": "operator:action.select_less", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00141", + "gapId": "operator:action.select_linked", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00142", + "gapId": "operator:action.select_more", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00143", + "gapId": "operator:action.snap", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00144", + "gapId": "operator:action.stash", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00145", + "gapId": "operator:action.stash_and_create", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00146", + "gapId": "operator:action.unlink", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00147", + "gapId": "operator:action.view_all", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00148", + "gapId": "operator:action.view_frame", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00149", + "gapId": "operator:action.view_selected", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00150", + "gapId": "operator:anim.change_frame", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00151", + "gapId": "operator:anim.channel_select_keys", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00152", + "gapId": "operator:anim.channel_view_pick", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00153", + "gapId": "operator:anim.channels_bake", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00154", + "gapId": "operator:anim.channels_clean_empty", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00155", + "gapId": "operator:anim.channels_click", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00156", + "gapId": "operator:anim.channels_collapse", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00157", + "gapId": "operator:anim.channels_delete", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00158", + "gapId": "operator:anim.channels_editable_toggle", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00159", + "gapId": "operator:anim.channels_expand", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00160", + "gapId": "operator:anim.channels_fcurves_enable", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00161", + "gapId": "operator:anim.channels_group", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00162", + "gapId": "operator:anim.channels_move", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00163", + "gapId": "operator:anim.channels_rename", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00164", + "gapId": "operator:anim.channels_select_all", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00165", + "gapId": "operator:anim.channels_select_box", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00166", + "gapId": "operator:anim.channels_select_filter", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00167", + "gapId": "operator:anim.channels_setting_disable", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00168", + "gapId": "operator:anim.channels_setting_enable", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00169", + "gapId": "operator:anim.channels_setting_toggle", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00170", + "gapId": "operator:anim.channels_ungroup", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00171", + "gapId": "operator:anim.channels_view_selected", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00172", + "gapId": "operator:anim.clear_useless_actions", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00173", + "gapId": "operator:anim.copy_driver_button", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00174", + "gapId": "operator:anim.driver_button_add", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00175", + "gapId": "operator:anim.driver_button_edit", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00176", + "gapId": "operator:anim.driver_button_remove", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00177", + "gapId": "operator:anim.end_frame_set", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00178", + "gapId": "operator:anim.keyframe_clear_button", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00179", + "gapId": "operator:anim.keyframe_clear_v3d", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00180", + "gapId": "operator:anim.keyframe_clear_vse", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00181", + "gapId": "operator:anim.keyframe_delete", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00182", + "gapId": "operator:anim.keyframe_delete_button", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00183", + "gapId": "operator:anim.keyframe_delete_by_name", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00184", + "gapId": "operator:anim.keyframe_delete_v3d", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00185", + "gapId": "operator:anim.keyframe_delete_vse", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00186", + "gapId": "operator:anim.keyframe_insert", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00187", + "gapId": "operator:anim.keyframe_insert_button", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00188", + "gapId": "operator:anim.keyframe_insert_by_name", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00189", + "gapId": "operator:anim.keyframe_insert_menu", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00190", + "gapId": "operator:anim.keying_set_active_set", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00191", + "gapId": "operator:anim.keying_set_add", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00192", + "gapId": "operator:anim.keying_set_export", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00193", + "gapId": "operator:anim.keying_set_path_add", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00194", + "gapId": "operator:anim.keying_set_path_remove", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00195", + "gapId": "operator:anim.keying_set_remove", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00196", + "gapId": "operator:anim.keyingset_button_add", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00197", + "gapId": "operator:anim.keyingset_button_remove", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00198", + "gapId": "operator:anim.merge_animation", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00199", + "gapId": "operator:anim.paste_driver_button", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00200", + "gapId": "operator:anim.previewrange_clear", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00201", + "gapId": "operator:anim.previewrange_set", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00202", + "gapId": "operator:anim.replace_action", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00203", + "gapId": "operator:anim.replace_action_new", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00204", + "gapId": "operator:anim.scene_range_frame", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00205", + "gapId": "operator:anim.separate_slots", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00206", + "gapId": "operator:anim.slot_channels_move_to_new_action", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00207", + "gapId": "operator:anim.slot_new_for_id", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00208", + "gapId": "operator:anim.slot_unassign_from_constraint", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00209", + "gapId": "operator:anim.slot_unassign_from_id", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00210", + "gapId": "operator:anim.slot_unassign_from_nla_strip", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00211", + "gapId": "operator:anim.start_frame_set", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00212", + "gapId": "operator:anim.update_animated_transform_constraints", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00213", + "gapId": "operator:anim.version_bone_hide_property", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00214", + "gapId": "operator:anim.view_curve_in_graph_editor", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00215", + "gapId": "operator:armature.align", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00216", + "gapId": "operator:armature.assign_to_collection", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00217", + "gapId": "operator:armature.autoside_names", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00218", + "gapId": "operator:armature.bone_primitive_add", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00219", + "gapId": "operator:armature.calculate_roll", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00220", + "gapId": "operator:armature.click_extrude", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00221", + "gapId": "operator:armature.collection_add", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00222", + "gapId": "operator:armature.collection_assign", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00223", + "gapId": "operator:armature.collection_create_and_assign", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00224", + "gapId": "operator:armature.collection_deselect", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00225", + "gapId": "operator:armature.collection_move", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00226", + "gapId": "operator:armature.collection_remove", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00227", + "gapId": "operator:armature.collection_remove_unused", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00228", + "gapId": "operator:armature.collection_select", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00229", + "gapId": "operator:armature.collection_show_all", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00230", + "gapId": "operator:armature.collection_unassign", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00231", + "gapId": "operator:armature.collection_unassign_named", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00232", + "gapId": "operator:armature.collection_unsolo_all", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00233", + "gapId": "operator:armature.copy_bone_color_to_selected", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00234", + "gapId": "operator:armature.delete", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00235", + "gapId": "operator:armature.dissolve", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00236", + "gapId": "operator:armature.duplicate", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00237", + "gapId": "operator:armature.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00238", + "gapId": "operator:armature.duplicate_rename", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00239", + "gapId": "operator:armature.extrude", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00240", + "gapId": "operator:armature.extrude_forked", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00241", + "gapId": "operator:armature.extrude_move", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00242", + "gapId": "operator:armature.fill", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00243", + "gapId": "operator:armature.flip_names", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00244", + "gapId": "operator:armature.hide", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00245", + "gapId": "operator:armature.move_to_collection", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00246", + "gapId": "operator:armature.parent_clear", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00247", + "gapId": "operator:armature.parent_set", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00248", + "gapId": "operator:armature.reveal", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00249", + "gapId": "operator:armature.roll_clear", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00250", + "gapId": "operator:armature.select_all", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00251", + "gapId": "operator:armature.select_hierarchy", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00252", + "gapId": "operator:armature.select_less", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00253", + "gapId": "operator:armature.select_linked", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00254", + "gapId": "operator:armature.select_linked_pick", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00255", + "gapId": "operator:armature.select_mirror", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00256", + "gapId": "operator:armature.select_more", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00257", + "gapId": "operator:armature.select_similar", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00258", + "gapId": "operator:armature.separate", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00259", + "gapId": "operator:armature.shortest_path_pick", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00260", + "gapId": "operator:armature.split", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00261", + "gapId": "operator:armature.subdivide", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00262", + "gapId": "operator:armature.switch_direction", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00263", + "gapId": "operator:armature.symmetrize", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00264", + "gapId": "operator:asset.asset_download", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00265", + "gapId": "operator:asset.assets_download", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00266", + "gapId": "operator:asset.assign_action", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00267", + "gapId": "operator:asset.browse_containing_blend_file", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00268", + "gapId": "operator:asset.bundle_install", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00269", + "gapId": "operator:asset.catalog_delete", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "ASSET_CATALOG", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00270", + "gapId": "operator:asset.catalog_new", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "ASSET_CATALOG", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00271", + "gapId": "operator:asset.catalog_redo", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "ASSET_CATALOG", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00272", + "gapId": "operator:asset.catalog_undo", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "ASSET_CATALOG", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00273", + "gapId": "operator:asset.catalog_undo_push", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "ASSET_CATALOG", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00274", + "gapId": "operator:asset.catalogs_save", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "ASSET_CATALOG", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00275", + "gapId": "operator:asset.clear", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00276", + "gapId": "operator:asset.clear_single", + "ownerFamily": "OPERATOR", + "state": "active", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00277", + "gapId": "operator:asset.library_refresh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00278", + "gapId": "operator:asset.library_reload_listing", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00279", + "gapId": "operator:asset.mark", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00280", + "gapId": "operator:asset.mark_single", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00281", + "gapId": "operator:asset.open_containing_blend_file", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00282", + "gapId": "operator:asset.screenshot_preview", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00283", + "gapId": "operator:asset.tag_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00284", + "gapId": "operator:asset.tag_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00285", + "gapId": "operator:boid.rule_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00286", + "gapId": "operator:boid.rule_del", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00287", + "gapId": "operator:boid.rule_move_down", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00288", + "gapId": "operator:boid.rule_move_up", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00289", + "gapId": "operator:boid.state_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00290", + "gapId": "operator:boid.state_del", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00291", + "gapId": "operator:boid.state_move_down", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00292", + "gapId": "operator:boid.state_move_up", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00293", + "gapId": "operator:brush.asset_activate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00294", + "gapId": "operator:brush.asset_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00295", + "gapId": "operator:brush.asset_edit_metadata", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00296", + "gapId": "operator:brush.asset_load_preview", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00297", + "gapId": "operator:brush.asset_revert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00298", + "gapId": "operator:brush.asset_save", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00299", + "gapId": "operator:brush.asset_save_as", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00300", + "gapId": "operator:brush.scale_size", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00301", + "gapId": "operator:brush.stencil_control", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00302", + "gapId": "operator:brush.stencil_fit_image_aspect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00303", + "gapId": "operator:brush.stencil_reset_transform", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00304", + "gapId": "operator:buttons.clear_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00305", + "gapId": "operator:buttons.context_menu", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00306", + "gapId": "operator:buttons.directory_browse", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00307", + "gapId": "operator:buttons.file_browse", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00308", + "gapId": "operator:buttons.start_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00309", + "gapId": "operator:buttons.toggle_pin", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00310", + "gapId": "operator:cachefile.layer_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00311", + "gapId": "operator:cachefile.layer_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00312", + "gapId": "operator:cachefile.layer_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00313", + "gapId": "operator:cachefile.open", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00314", + "gapId": "operator:cachefile.reload", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00315", + "gapId": "operator:camera.preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00316", + "gapId": "operator:camera.safe_areas_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00317", + "gapId": "operator:clip.add_marker", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00318", + "gapId": "operator:clip.add_marker_at_click", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00319", + "gapId": "operator:clip.add_marker_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00320", + "gapId": "operator:clip.add_marker_slide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00321", + "gapId": "operator:clip.apply_solution_scale", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00322", + "gapId": "operator:clip.average_tracks", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00323", + "gapId": "operator:clip.bundles_to_mesh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00324", + "gapId": "operator:clip.camera_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00325", + "gapId": "operator:clip.change_frame", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00326", + "gapId": "operator:clip.clean_tracks", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00327", + "gapId": "operator:clip.clear_solution", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00328", + "gapId": "operator:clip.clear_track_path", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00329", + "gapId": "operator:clip.constraint_to_fcurve", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00330", + "gapId": "operator:clip.copy_tracks", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00331", + "gapId": "operator:clip.create_plane_track", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00332", + "gapId": "operator:clip.cursor_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00333", + "gapId": "operator:clip.delete_marker", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00334", + "gapId": "operator:clip.delete_proxy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00335", + "gapId": "operator:clip.delete_track", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00336", + "gapId": "operator:clip.detect_features", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00337", + "gapId": "operator:clip.disable_markers", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00338", + "gapId": "operator:clip.dopesheet_select_channel", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00339", + "gapId": "operator:clip.dopesheet_view_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00340", + "gapId": "operator:clip.filter_tracks", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00341", + "gapId": "operator:clip.frame_jump", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00342", + "gapId": "operator:clip.graph_center_current_frame", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00343", + "gapId": "operator:clip.graph_delete_curve", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00344", + "gapId": "operator:clip.graph_delete_knot", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00345", + "gapId": "operator:clip.graph_disable_markers", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00346", + "gapId": "operator:clip.graph_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00347", + "gapId": "operator:clip.graph_select_all_markers", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00348", + "gapId": "operator:clip.graph_select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00349", + "gapId": "operator:clip.graph_view_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00350", + "gapId": "operator:clip.hide_tracks", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00351", + "gapId": "operator:clip.hide_tracks_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00352", + "gapId": "operator:clip.join_tracks", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00353", + "gapId": "operator:clip.keyframe_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00354", + "gapId": "operator:clip.keyframe_insert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00355", + "gapId": "operator:clip.lock_selection_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00356", + "gapId": "operator:clip.lock_tracks", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00357", + "gapId": "operator:clip.mode_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00358", + "gapId": "operator:clip.new_image_from_plane_marker", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00359", + "gapId": "operator:clip.open", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00360", + "gapId": "operator:clip.paste_tracks", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00361", + "gapId": "operator:clip.prefetch", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00362", + "gapId": "operator:clip.rebuild_proxy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00363", + "gapId": "operator:clip.refine_markers", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00364", + "gapId": "operator:clip.reload", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00365", + "gapId": "operator:clip.select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00366", + "gapId": "operator:clip.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00367", + "gapId": "operator:clip.select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00368", + "gapId": "operator:clip.select_circle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00369", + "gapId": "operator:clip.select_grouped", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00370", + "gapId": "operator:clip.select_lasso", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00371", + "gapId": "operator:clip.set_active_clip", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00372", + "gapId": "operator:clip.set_axis", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00373", + "gapId": "operator:clip.set_origin", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00374", + "gapId": "operator:clip.set_plane", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00375", + "gapId": "operator:clip.set_scale", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00376", + "gapId": "operator:clip.set_scene_frames", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00377", + "gapId": "operator:clip.set_solution_scale", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00378", + "gapId": "operator:clip.set_solver_keyframe", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00379", + "gapId": "operator:clip.set_viewport_background", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00380", + "gapId": "operator:clip.setup_tracking_scene", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00381", + "gapId": "operator:clip.slide_marker", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00382", + "gapId": "operator:clip.slide_plane_marker", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00383", + "gapId": "operator:clip.solve_camera", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00384", + "gapId": "operator:clip.stabilize_2d_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00385", + "gapId": "operator:clip.stabilize_2d_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00386", + "gapId": "operator:clip.stabilize_2d_rotation_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00387", + "gapId": "operator:clip.stabilize_2d_rotation_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00388", + "gapId": "operator:clip.stabilize_2d_rotation_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00389", + "gapId": "operator:clip.stabilize_2d_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00390", + "gapId": "operator:clip.track_color_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00391", + "gapId": "operator:clip.track_copy_color", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00392", + "gapId": "operator:clip.track_markers", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00393", + "gapId": "operator:clip.track_settings_as_default", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00394", + "gapId": "operator:clip.track_settings_to_track", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00395", + "gapId": "operator:clip.track_to_empty", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00396", + "gapId": "operator:clip.tracking_object_new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00397", + "gapId": "operator:clip.tracking_object_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00398", + "gapId": "operator:clip.tracking_settings_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00399", + "gapId": "operator:clip.update_image_from_plane_marker", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00400", + "gapId": "operator:clip.view_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00401", + "gapId": "operator:clip.view_center_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00402", + "gapId": "operator:clip.view_ndof", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00403", + "gapId": "operator:clip.view_pan", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00404", + "gapId": "operator:clip.view_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00405", + "gapId": "operator:clip.view_zoom", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00406", + "gapId": "operator:clip.view_zoom_in", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00407", + "gapId": "operator:clip.view_zoom_out", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00408", + "gapId": "operator:clip.view_zoom_ratio", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00409", + "gapId": "operator:cloth.preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00410", + "gapId": "operator:collection.create", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00411", + "gapId": "operator:collection.export_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00412", + "gapId": "operator:collection.exporter_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00413", + "gapId": "operator:collection.exporter_export", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00414", + "gapId": "operator:collection.exporter_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00415", + "gapId": "operator:collection.exporter_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00416", + "gapId": "operator:collection.importer_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00417", + "gapId": "operator:collection.importer_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00418", + "gapId": "operator:collection.objects_add_active", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00419", + "gapId": "operator:collection.objects_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00420", + "gapId": "operator:collection.objects_remove_active", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00421", + "gapId": "operator:collection.objects_remove_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00422", + "gapId": "operator:console.autocomplete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00423", + "gapId": "operator:console.banner", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00424", + "gapId": "operator:console.clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00425", + "gapId": "operator:console.clear_line", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00426", + "gapId": "operator:console.copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00427", + "gapId": "operator:console.copy_as_script", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00428", + "gapId": "operator:console.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00429", + "gapId": "operator:console.execute", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00430", + "gapId": "operator:console.history_append", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00431", + "gapId": "operator:console.history_cycle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00432", + "gapId": "operator:console.indent", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00433", + "gapId": "operator:console.indent_or_autocomplete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00434", + "gapId": "operator:console.insert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00435", + "gapId": "operator:console.language", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00436", + "gapId": "operator:console.move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00437", + "gapId": "operator:console.paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00438", + "gapId": "operator:console.scrollback_append", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00439", + "gapId": "operator:console.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00440", + "gapId": "operator:console.select_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00441", + "gapId": "operator:console.select_word", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00442", + "gapId": "operator:console.unindent", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00443", + "gapId": "operator:constraint.add_target", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00444", + "gapId": "operator:constraint.apply", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00445", + "gapId": "operator:constraint.childof_clear_inverse", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00446", + "gapId": "operator:constraint.childof_set_inverse", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00447", + "gapId": "operator:constraint.copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00448", + "gapId": "operator:constraint.copy_to_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00449", + "gapId": "operator:constraint.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00450", + "gapId": "operator:constraint.disable_keep_transform", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00451", + "gapId": "operator:constraint.followpath_path_animate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00452", + "gapId": "operator:constraint.limitdistance_reset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00453", + "gapId": "operator:constraint.move_down", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00454", + "gapId": "operator:constraint.move_to_index", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00455", + "gapId": "operator:constraint.move_up", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00456", + "gapId": "operator:constraint.normalize_target_weights", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00457", + "gapId": "operator:constraint.objectsolver_clear_inverse", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00458", + "gapId": "operator:constraint.objectsolver_set_inverse", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00459", + "gapId": "operator:constraint.remove_target", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00460", + "gapId": "operator:constraint.stretchto_reset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00461", + "gapId": "operator:curve.cyclic_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00462", + "gapId": "operator:curve.de_select_first", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00463", + "gapId": "operator:curve.de_select_last", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00464", + "gapId": "operator:curve.decimate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00465", + "gapId": "operator:curve.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00466", + "gapId": "operator:curve.dissolve_verts", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00467", + "gapId": "operator:curve.draw", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00468", + "gapId": "operator:curve.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00469", + "gapId": "operator:curve.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00470", + "gapId": "operator:curve.extrude", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00471", + "gapId": "operator:curve.extrude_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00472", + "gapId": "operator:curve.handle_type_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00473", + "gapId": "operator:curve.hide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00474", + "gapId": "operator:curve.make_segment", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00475", + "gapId": "operator:curve.match_texture_space", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00476", + "gapId": "operator:curve.normals_make_consistent", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00477", + "gapId": "operator:curve.pen", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00478", + "gapId": "operator:curve.primitive_bezier_circle_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00479", + "gapId": "operator:curve.primitive_bezier_curve_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00480", + "gapId": "operator:curve.primitive_nurbs_circle_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00481", + "gapId": "operator:curve.primitive_nurbs_curve_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00482", + "gapId": "operator:curve.primitive_nurbs_path_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00483", + "gapId": "operator:curve.radius_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00484", + "gapId": "operator:curve.reveal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00485", + "gapId": "operator:curve.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00486", + "gapId": "operator:curve.select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00487", + "gapId": "operator:curve.select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00488", + "gapId": "operator:curve.select_linked_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00489", + "gapId": "operator:curve.select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00490", + "gapId": "operator:curve.select_next", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00491", + "gapId": "operator:curve.select_nth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00492", + "gapId": "operator:curve.select_previous", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00493", + "gapId": "operator:curve.select_random", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00494", + "gapId": "operator:curve.select_row", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00495", + "gapId": "operator:curve.select_similar", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00496", + "gapId": "operator:curve.separate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00497", + "gapId": "operator:curve.shade_flat", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00498", + "gapId": "operator:curve.shade_smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00499", + "gapId": "operator:curve.shortest_path_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00500", + "gapId": "operator:curve.smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00501", + "gapId": "operator:curve.smooth_radius", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00502", + "gapId": "operator:curve.smooth_tilt", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00503", + "gapId": "operator:curve.smooth_weight", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00504", + "gapId": "operator:curve.spin", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00505", + "gapId": "operator:curve.spline_type_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00506", + "gapId": "operator:curve.spline_weight_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00507", + "gapId": "operator:curve.split", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00508", + "gapId": "operator:curve.subdivide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00509", + "gapId": "operator:curve.switch_direction", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00510", + "gapId": "operator:curve.tilt_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00511", + "gapId": "operator:curve.vertex_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00512", + "gapId": "operator:curves.add_bezier", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00513", + "gapId": "operator:curves.add_circle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00514", + "gapId": "operator:curves.attribute_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00515", + "gapId": "operator:curves.convert_from_particle_system", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00516", + "gapId": "operator:curves.convert_to_particle_system", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00517", + "gapId": "operator:curves.curve_type_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00518", + "gapId": "operator:curves.cyclic_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00519", + "gapId": "operator:curves.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00520", + "gapId": "operator:curves.draw", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00521", + "gapId": "operator:curves.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00522", + "gapId": "operator:curves.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00523", + "gapId": "operator:curves.extrude", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00524", + "gapId": "operator:curves.extrude_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00525", + "gapId": "operator:curves.handle_type_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00526", + "gapId": "operator:curves.pen", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00527", + "gapId": "operator:curves.sculptmode_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00528", + "gapId": "operator:curves.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00529", + "gapId": "operator:curves.select_ends", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00530", + "gapId": "operator:curves.select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00531", + "gapId": "operator:curves.select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00532", + "gapId": "operator:curves.select_linked_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00533", + "gapId": "operator:curves.select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00534", + "gapId": "operator:curves.select_random", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00535", + "gapId": "operator:curves.separate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00536", + "gapId": "operator:curves.set_selection_domain", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00537", + "gapId": "operator:curves.snap_curves_to_surface", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00538", + "gapId": "operator:curves.split", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00539", + "gapId": "operator:curves.subdivide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00540", + "gapId": "operator:curves.surface_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00541", + "gapId": "operator:curves.switch_direction", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00542", + "gapId": "operator:curves.tilt_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00543", + "gapId": "operator:cycles.denoise_animation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00544", + "gapId": "operator:cycles.merge_images", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00545", + "gapId": "operator:cycles.use_shading_nodes", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00546", + "gapId": "operator:dpaint.bake", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00547", + "gapId": "operator:dpaint.output_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00548", + "gapId": "operator:dpaint.surface_slot_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00549", + "gapId": "operator:dpaint.surface_slot_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00550", + "gapId": "operator:dpaint.type_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00551", + "gapId": "operator:ed.flush_edits", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00552", + "gapId": "operator:ed.lib_id_fake_user_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00553", + "gapId": "operator:ed.lib_id_generate_preview", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00554", + "gapId": "operator:ed.lib_id_generate_preview_from_object", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00555", + "gapId": "operator:ed.lib_id_load_custom_preview", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00556", + "gapId": "operator:ed.lib_id_override_editable_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00557", + "gapId": "operator:ed.lib_id_remove_preview", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00558", + "gapId": "operator:ed.lib_id_unlink", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00559", + "gapId": "operator:ed.redo", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00560", + "gapId": "operator:ed.undo", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00561", + "gapId": "operator:ed.undo_history", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00562", + "gapId": "operator:ed.undo_push", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00563", + "gapId": "operator:ed.undo_redo", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00564", + "gapId": "operator:export_anim.bvh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00565", + "gapId": "operator:export_scene.fbx", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00566", + "gapId": "operator:export_scene.gltf", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00567", + "gapId": "operator:extensions.package_disable", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00568", + "gapId": "operator:extensions.package_install", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00569", + "gapId": "operator:extensions.package_install_files", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00570", + "gapId": "operator:extensions.package_install_marked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00571", + "gapId": "operator:extensions.package_mark_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00572", + "gapId": "operator:extensions.package_mark_clear_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00573", + "gapId": "operator:extensions.package_mark_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00574", + "gapId": "operator:extensions.package_mark_set_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00575", + "gapId": "operator:extensions.package_obsolete_marked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00576", + "gapId": "operator:extensions.package_show_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00577", + "gapId": "operator:extensions.package_show_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00578", + "gapId": "operator:extensions.package_show_settings", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00579", + "gapId": "operator:extensions.package_theme_disable", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00580", + "gapId": "operator:extensions.package_theme_enable", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00581", + "gapId": "operator:extensions.package_uninstall", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00582", + "gapId": "operator:extensions.package_uninstall_marked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00583", + "gapId": "operator:extensions.package_uninstall_system", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00584", + "gapId": "operator:extensions.package_upgrade_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00585", + "gapId": "operator:extensions.repo_enable_from_drop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00586", + "gapId": "operator:extensions.repo_lock_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00587", + "gapId": "operator:extensions.repo_refresh_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00588", + "gapId": "operator:extensions.repo_sync", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00589", + "gapId": "operator:extensions.repo_sync_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00590", + "gapId": "operator:extensions.repo_unlock", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00591", + "gapId": "operator:extensions.repo_unlock_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00592", + "gapId": "operator:extensions.status_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00593", + "gapId": "operator:extensions.status_clear_errors", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00594", + "gapId": "operator:extensions.userpref_allow_online", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00595", + "gapId": "operator:extensions.userpref_allow_online_popup", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00596", + "gapId": "operator:extensions.userpref_show_for_update", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00597", + "gapId": "operator:extensions.userpref_show_online", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00598", + "gapId": "operator:extensions.userpref_tags_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00599", + "gapId": "operator:file.autopack_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00600", + "gapId": "operator:file.bookmark_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00601", + "gapId": "operator:file.bookmark_cleanup", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00602", + "gapId": "operator:file.bookmark_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00603", + "gapId": "operator:file.bookmark_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00604", + "gapId": "operator:file.cancel", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00605", + "gapId": "operator:file.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00606", + "gapId": "operator:file.directory_new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00607", + "gapId": "operator:file.edit_directory_path", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00608", + "gapId": "operator:file.execute", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00609", + "gapId": "operator:file.external_operation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00610", + "gapId": "operator:file.filenum", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00611", + "gapId": "operator:file.filepath_drop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00612", + "gapId": "operator:file.find_missing_files", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00613", + "gapId": "operator:file.hidedot", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00614", + "gapId": "operator:file.highlight", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00615", + "gapId": "operator:file.make_paths_absolute", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00616", + "gapId": "operator:file.make_paths_relative", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00617", + "gapId": "operator:file.mouse_execute", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00618", + "gapId": "operator:file.next", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00619", + "gapId": "operator:file.pack_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00620", + "gapId": "operator:file.pack_libraries", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00621", + "gapId": "operator:file.parent", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00622", + "gapId": "operator:file.previous", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00623", + "gapId": "operator:file.refresh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00624", + "gapId": "operator:file.rename", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00625", + "gapId": "operator:file.report_missing_files", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00626", + "gapId": "operator:file.reset_recent", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00627", + "gapId": "operator:file.select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00628", + "gapId": "operator:file.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00629", + "gapId": "operator:file.select_bookmark", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00630", + "gapId": "operator:file.select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00631", + "gapId": "operator:file.select_walk", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00632", + "gapId": "operator:file.smoothscroll", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00633", + "gapId": "operator:file.sort_column_ui_context", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00634", + "gapId": "operator:file.start_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00635", + "gapId": "operator:file.unpack_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00636", + "gapId": "operator:file.unpack_item", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00637", + "gapId": "operator:file.unpack_libraries", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00638", + "gapId": "operator:file.view_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00639", + "gapId": "operator:fluid.bake_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00640", + "gapId": "operator:fluid.bake_data", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00641", + "gapId": "operator:fluid.bake_guides", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00642", + "gapId": "operator:fluid.bake_mesh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00643", + "gapId": "operator:fluid.bake_noise", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00644", + "gapId": "operator:fluid.bake_particles", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00645", + "gapId": "operator:fluid.free_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00646", + "gapId": "operator:fluid.free_data", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00647", + "gapId": "operator:fluid.free_guides", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00648", + "gapId": "operator:fluid.free_mesh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00649", + "gapId": "operator:fluid.free_noise", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00650", + "gapId": "operator:fluid.free_particles", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00651", + "gapId": "operator:fluid.pause_bake", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00652", + "gapId": "operator:fluid.preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00653", + "gapId": "operator:font.case_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00654", + "gapId": "operator:font.case_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00655", + "gapId": "operator:font.change_character", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00656", + "gapId": "operator:font.change_spacing", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00657", + "gapId": "operator:font.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00658", + "gapId": "operator:font.line_break", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00659", + "gapId": "operator:font.move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00660", + "gapId": "operator:font.move_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00661", + "gapId": "operator:font.open", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00662", + "gapId": "operator:font.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00663", + "gapId": "operator:font.select_word", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00664", + "gapId": "operator:font.selection_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00665", + "gapId": "operator:font.style_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00666", + "gapId": "operator:font.style_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00667", + "gapId": "operator:font.text_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00668", + "gapId": "operator:font.text_cut", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00669", + "gapId": "operator:font.text_insert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00670", + "gapId": "operator:font.text_insert_unicode", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00671", + "gapId": "operator:font.text_paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00672", + "gapId": "operator:font.text_paste_from_file", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00673", + "gapId": "operator:font.textbox_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00674", + "gapId": "operator:font.textbox_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00675", + "gapId": "operator:font.unlink", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00676", + "gapId": "operator:geometry.attribute_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00677", + "gapId": "operator:geometry.attribute_convert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00678", + "gapId": "operator:geometry.attribute_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00679", + "gapId": "operator:geometry.color_attribute_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00680", + "gapId": "operator:geometry.color_attribute_convert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00681", + "gapId": "operator:geometry.color_attribute_duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00682", + "gapId": "operator:geometry.color_attribute_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00683", + "gapId": "operator:geometry.color_attribute_render_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00684", + "gapId": "operator:geometry.geometry_randomization", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00685", + "gapId": "operator:gizmogroup.gizmo_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00686", + "gapId": "operator:gizmogroup.gizmo_tweak", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00687", + "gapId": "operator:gpencil.annotate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00688", + "gapId": "operator:gpencil.annotation_active_frame_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00689", + "gapId": "operator:gpencil.annotation_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00690", + "gapId": "operator:gpencil.data_unlink", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00691", + "gapId": "operator:gpencil.layer_annotation_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00692", + "gapId": "operator:gpencil.layer_annotation_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00693", + "gapId": "operator:gpencil.layer_annotation_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00694", + "gapId": "operator:graph.bake_keys", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00695", + "gapId": "operator:graph.blend_offset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00696", + "gapId": "operator:graph.blend_to_default", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00697", + "gapId": "operator:graph.blend_to_ease", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00698", + "gapId": "operator:graph.blend_to_neighbor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00699", + "gapId": "operator:graph.breakdown", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00700", + "gapId": "operator:graph.butterworth_smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00701", + "gapId": "operator:graph.clean", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00702", + "gapId": "operator:graph.click_insert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00703", + "gapId": "operator:graph.clickselect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00704", + "gapId": "operator:graph.copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00705", + "gapId": "operator:graph.cursor_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00706", + "gapId": "operator:graph.decimate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00707", + "gapId": "operator:graph.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00708", + "gapId": "operator:graph.driver_delete_invalid", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00709", + "gapId": "operator:graph.driver_variables_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00710", + "gapId": "operator:graph.driver_variables_paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00711", + "gapId": "operator:graph.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00712", + "gapId": "operator:graph.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00713", + "gapId": "operator:graph.ease", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00714", + "gapId": "operator:graph.easing_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00715", + "gapId": "operator:graph.equalize_handles", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00716", + "gapId": "operator:graph.euler_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00717", + "gapId": "operator:graph.extrapolation_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00718", + "gapId": "operator:graph.fmodifier_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00719", + "gapId": "operator:graph.fmodifier_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00720", + "gapId": "operator:graph.fmodifier_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00721", + "gapId": "operator:graph.fmodifier_paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00722", + "gapId": "operator:graph.frame_jump", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00723", + "gapId": "operator:graph.gaussian_smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00724", + "gapId": "operator:graph.ghost_curves_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00725", + "gapId": "operator:graph.ghost_curves_create", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00726", + "gapId": "operator:graph.handle_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00727", + "gapId": "operator:graph.hide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00728", + "gapId": "operator:graph.interpolation_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00729", + "gapId": "operator:graph.keyframe_insert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00730", + "gapId": "operator:graph.keyframe_jump", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00731", + "gapId": "operator:graph.keys_to_samples", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00732", + "gapId": "operator:graph.local_view", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00733", + "gapId": "operator:graph.match_slope", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00734", + "gapId": "operator:graph.mirror", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00735", + "gapId": "operator:graph.paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00736", + "gapId": "operator:graph.previewrange_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00737", + "gapId": "operator:graph.push_pull", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00738", + "gapId": "operator:graph.reveal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00739", + "gapId": "operator:graph.samples_to_keys", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00740", + "gapId": "operator:graph.scale_average", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00741", + "gapId": "operator:graph.scale_from_neighbor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00742", + "gapId": "operator:graph.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00743", + "gapId": "operator:graph.select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00744", + "gapId": "operator:graph.select_circle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00745", + "gapId": "operator:graph.select_column", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00746", + "gapId": "operator:graph.select_key_handles", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00747", + "gapId": "operator:graph.select_lasso", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00748", + "gapId": "operator:graph.select_leftright", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00749", + "gapId": "operator:graph.select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00750", + "gapId": "operator:graph.select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00751", + "gapId": "operator:graph.select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00752", + "gapId": "operator:graph.shear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00753", + "gapId": "operator:graph.smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00754", + "gapId": "operator:graph.snap", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00755", + "gapId": "operator:graph.snap_cursor_value", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00756", + "gapId": "operator:graph.sound_to_samples", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00757", + "gapId": "operator:graph.time_offset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00758", + "gapId": "operator:graph.view_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00759", + "gapId": "operator:graph.view_frame", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00760", + "gapId": "operator:graph.view_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00761", + "gapId": "operator:grease_pencil.active_frame_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00762", + "gapId": "operator:grease_pencil.bake_grease_pencil_animation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00763", + "gapId": "operator:grease_pencil.brush_stroke", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00764", + "gapId": "operator:grease_pencil.caps_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00765", + "gapId": "operator:grease_pencil.clean_loose", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00766", + "gapId": "operator:grease_pencil.convert_curve_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00767", + "gapId": "operator:grease_pencil.copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00768", + "gapId": "operator:grease_pencil.cyclical_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00769", + "gapId": "operator:grease_pencil.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00770", + "gapId": "operator:grease_pencil.delete_breakdown", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00771", + "gapId": "operator:grease_pencil.delete_frame", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00772", + "gapId": "operator:grease_pencil.dissolve", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00773", + "gapId": "operator:grease_pencil.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00774", + "gapId": "operator:grease_pencil.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00775", + "gapId": "operator:grease_pencil.erase_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00776", + "gapId": "operator:grease_pencil.erase_lasso", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00777", + "gapId": "operator:grease_pencil.extrude", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00778", + "gapId": "operator:grease_pencil.extrude_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00779", + "gapId": "operator:grease_pencil.fill", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00780", + "gapId": "operator:grease_pencil.frame_clean_duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00781", + "gapId": "operator:grease_pencil.frame_duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00782", + "gapId": "operator:grease_pencil.insert_blank_frame", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00783", + "gapId": "operator:grease_pencil.interpolate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00784", + "gapId": "operator:grease_pencil.interpolate_sequence", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00785", + "gapId": "operator:grease_pencil.join_fills", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00786", + "gapId": "operator:grease_pencil.join_selection", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00787", + "gapId": "operator:grease_pencil.layer_active", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00788", + "gapId": "operator:grease_pencil.layer_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00789", + "gapId": "operator:grease_pencil.layer_duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00790", + "gapId": "operator:grease_pencil.layer_duplicate_object", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00791", + "gapId": "operator:grease_pencil.layer_group_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00792", + "gapId": "operator:grease_pencil.layer_group_color_tag", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00793", + "gapId": "operator:grease_pencil.layer_group_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00794", + "gapId": "operator:grease_pencil.layer_hide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00795", + "gapId": "operator:grease_pencil.layer_isolate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00796", + "gapId": "operator:grease_pencil.layer_lock_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00797", + "gapId": "operator:grease_pencil.layer_mask_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00798", + "gapId": "operator:grease_pencil.layer_mask_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00799", + "gapId": "operator:grease_pencil.layer_mask_reorder", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00800", + "gapId": "operator:grease_pencil.layer_merge", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00801", + "gapId": "operator:grease_pencil.layer_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00802", + "gapId": "operator:grease_pencil.layer_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00803", + "gapId": "operator:grease_pencil.layer_reveal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00804", + "gapId": "operator:grease_pencil.material_copy_to_object", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00805", + "gapId": "operator:grease_pencil.material_hide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00806", + "gapId": "operator:grease_pencil.material_isolate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00807", + "gapId": "operator:grease_pencil.material_lock_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00808", + "gapId": "operator:grease_pencil.material_lock_unselected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00809", + "gapId": "operator:grease_pencil.material_lock_unused", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00810", + "gapId": "operator:grease_pencil.material_reveal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00811", + "gapId": "operator:grease_pencil.material_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00812", + "gapId": "operator:grease_pencil.material_unlock_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00813", + "gapId": "operator:grease_pencil.move_to_layer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00814", + "gapId": "operator:grease_pencil.outline", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00815", + "gapId": "operator:grease_pencil.paintmode_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00816", + "gapId": "operator:grease_pencil.paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00817", + "gapId": "operator:grease_pencil.pen", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00818", + "gapId": "operator:grease_pencil.primitive_arc", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00819", + "gapId": "operator:grease_pencil.primitive_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00820", + "gapId": "operator:grease_pencil.primitive_circle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00821", + "gapId": "operator:grease_pencil.primitive_curve", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00822", + "gapId": "operator:grease_pencil.primitive_line", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00823", + "gapId": "operator:grease_pencil.primitive_polyline", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00824", + "gapId": "operator:grease_pencil.relative_layer_mask_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00825", + "gapId": "operator:grease_pencil.remove_fill_guides", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00826", + "gapId": "operator:grease_pencil.reorder", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00827", + "gapId": "operator:grease_pencil.reproject", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00828", + "gapId": "operator:grease_pencil.reset_uvs", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00829", + "gapId": "operator:grease_pencil.sculpt_paint", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00830", + "gapId": "operator:grease_pencil.sculptmode_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00831", + "gapId": "operator:grease_pencil.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00832", + "gapId": "operator:grease_pencil.select_alternate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00833", + "gapId": "operator:grease_pencil.select_by_stroke_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00834", + "gapId": "operator:grease_pencil.select_ends", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00835", + "gapId": "operator:grease_pencil.select_fill", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00836", + "gapId": "operator:grease_pencil.select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00837", + "gapId": "operator:grease_pencil.select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00838", + "gapId": "operator:grease_pencil.select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00839", + "gapId": "operator:grease_pencil.select_random", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00840", + "gapId": "operator:grease_pencil.select_similar", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00841", + "gapId": "operator:grease_pencil.separate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00842", + "gapId": "operator:grease_pencil.separate_fills", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00843", + "gapId": "operator:grease_pencil.set_active_material", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00844", + "gapId": "operator:grease_pencil.set_corner_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00845", + "gapId": "operator:grease_pencil.set_curve_resolution", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00846", + "gapId": "operator:grease_pencil.set_curve_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00847", + "gapId": "operator:grease_pencil.set_handle_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00848", + "gapId": "operator:grease_pencil.set_material", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00849", + "gapId": "operator:grease_pencil.set_selection_mode", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00850", + "gapId": "operator:grease_pencil.set_start_point", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00851", + "gapId": "operator:grease_pencil.set_stroke_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00852", + "gapId": "operator:grease_pencil.set_uniform_opacity", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00853", + "gapId": "operator:grease_pencil.set_uniform_thickness", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00854", + "gapId": "operator:grease_pencil.snap_cursor_to_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00855", + "gapId": "operator:grease_pencil.snap_to_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00856", + "gapId": "operator:grease_pencil.snap_to_grid", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00857", + "gapId": "operator:grease_pencil.stroke_material_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00858", + "gapId": "operator:grease_pencil.stroke_merge_by_distance", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00859", + "gapId": "operator:grease_pencil.stroke_reset_vertex_color", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00860", + "gapId": "operator:grease_pencil.stroke_simplify", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00861", + "gapId": "operator:grease_pencil.stroke_smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00862", + "gapId": "operator:grease_pencil.stroke_split", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00863", + "gapId": "operator:grease_pencil.stroke_subdivide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00864", + "gapId": "operator:grease_pencil.stroke_subdivide_smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00865", + "gapId": "operator:grease_pencil.stroke_switch_direction", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00866", + "gapId": "operator:grease_pencil.stroke_trim", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00867", + "gapId": "operator:grease_pencil.texture_gradient", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00868", + "gapId": "operator:grease_pencil.trace_image", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00869", + "gapId": "operator:grease_pencil.vertex_brush_stroke", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00870", + "gapId": "operator:grease_pencil.vertex_color_brightness_contrast", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00871", + "gapId": "operator:grease_pencil.vertex_color_hsv", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00872", + "gapId": "operator:grease_pencil.vertex_color_invert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00873", + "gapId": "operator:grease_pencil.vertex_color_levels", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00874", + "gapId": "operator:grease_pencil.vertex_color_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00875", + "gapId": "operator:grease_pencil.vertex_group_normalize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00876", + "gapId": "operator:grease_pencil.vertex_group_normalize_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00877", + "gapId": "operator:grease_pencil.vertex_group_smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00878", + "gapId": "operator:grease_pencil.vertexmode_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00879", + "gapId": "operator:grease_pencil.weight_brush_stroke", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00880", + "gapId": "operator:grease_pencil.weight_invert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00881", + "gapId": "operator:grease_pencil.weight_sample", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00882", + "gapId": "operator:grease_pencil.weight_toggle_direction", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00883", + "gapId": "operator:grease_pencil.weightmode_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00884", + "gapId": "operator:image.add_render_slot", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00885", + "gapId": "operator:image.change_frame", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00886", + "gapId": "operator:image.clear_render_border", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00887", + "gapId": "operator:image.clear_render_slot", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00888", + "gapId": "operator:image.clipboard_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00889", + "gapId": "operator:image.clipboard_paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00890", + "gapId": "operator:image.convert_to_mesh_plane", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00891", + "gapId": "operator:image.curves_point_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00892", + "gapId": "operator:image.cycle_render_slot", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00893", + "gapId": "operator:image.external_edit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00894", + "gapId": "operator:image.file_browse", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00895", + "gapId": "operator:image.flip", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00896", + "gapId": "operator:image.import_as_mesh_planes", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00897", + "gapId": "operator:image.invert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00898", + "gapId": "operator:image.match_movie_length", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00899", + "gapId": "operator:image.new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00900", + "gapId": "operator:image.open", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00901", + "gapId": "operator:image.open_images", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00902", + "gapId": "operator:image.pack", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00903", + "gapId": "operator:image.project_apply", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00904", + "gapId": "operator:image.project_edit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00905", + "gapId": "operator:image.read_viewlayers", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00906", + "gapId": "operator:image.reload", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00907", + "gapId": "operator:image.remove_render_slot", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00908", + "gapId": "operator:image.render_border", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00909", + "gapId": "operator:image.replace", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00910", + "gapId": "operator:image.resize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00911", + "gapId": "operator:image.rotate_orthogonal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00912", + "gapId": "operator:image.sample", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00913", + "gapId": "operator:image.sample_line", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00914", + "gapId": "operator:image.save", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00915", + "gapId": "operator:image.save_all_modified", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00916", + "gapId": "operator:image.save_as", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00917", + "gapId": "operator:image.save_sequence", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00918", + "gapId": "operator:image.tile_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00919", + "gapId": "operator:image.tile_fill", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00920", + "gapId": "operator:image.tile_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00921", + "gapId": "operator:image.unpack", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00922", + "gapId": "operator:image.view_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00923", + "gapId": "operator:image.view_center_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00924", + "gapId": "operator:image.view_cursor_center", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00925", + "gapId": "operator:image.view_ndof", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00926", + "gapId": "operator:image.view_pan", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00927", + "gapId": "operator:image.view_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00928", + "gapId": "operator:image.view_zoom", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00929", + "gapId": "operator:image.view_zoom_border", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00930", + "gapId": "operator:image.view_zoom_in", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00931", + "gapId": "operator:image.view_zoom_out", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00932", + "gapId": "operator:image.view_zoom_ratio", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00933", + "gapId": "operator:import_anim.bvh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00934", + "gapId": "operator:import_curve.svg", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00935", + "gapId": "operator:import_scene.fbx", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00936", + "gapId": "operator:import_scene.gltf", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00937", + "gapId": "operator:info.report_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00938", + "gapId": "operator:info.report_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00939", + "gapId": "operator:info.report_replay", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00940", + "gapId": "operator:info.reports_display_update", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00941", + "gapId": "operator:info.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00942", + "gapId": "operator:info.select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00943", + "gapId": "operator:info.select_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00944", + "gapId": "operator:lattice.flip", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00945", + "gapId": "operator:lattice.make_regular", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00946", + "gapId": "operator:lattice.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00947", + "gapId": "operator:lattice.select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00948", + "gapId": "operator:lattice.select_mirror", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00949", + "gapId": "operator:lattice.select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00950", + "gapId": "operator:lattice.select_random", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00951", + "gapId": "operator:lattice.select_ungrouped", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00952", + "gapId": "operator:marker.add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00953", + "gapId": "operator:marker.camera_bind", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00954", + "gapId": "operator:marker.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00955", + "gapId": "operator:marker.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00956", + "gapId": "operator:marker.make_links_scene", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00957", + "gapId": "operator:marker.move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00958", + "gapId": "operator:marker.rename", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00959", + "gapId": "operator:marker.select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00960", + "gapId": "operator:marker.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00961", + "gapId": "operator:marker.select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00962", + "gapId": "operator:marker.select_leftright", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00963", + "gapId": "operator:mask.add_feather_vertex", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00964", + "gapId": "operator:mask.add_feather_vertex_slide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00965", + "gapId": "operator:mask.add_vertex", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00966", + "gapId": "operator:mask.add_vertex_slide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00967", + "gapId": "operator:mask.copy_splines", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00968", + "gapId": "operator:mask.cyclic_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00969", + "gapId": "operator:mask.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00970", + "gapId": "operator:mask.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00971", + "gapId": "operator:mask.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00972", + "gapId": "operator:mask.feather_weight_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00973", + "gapId": "operator:mask.handle_type_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00974", + "gapId": "operator:mask.hide_view_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00975", + "gapId": "operator:mask.hide_view_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00976", + "gapId": "operator:mask.layer_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00977", + "gapId": "operator:mask.layer_new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00978", + "gapId": "operator:mask.layer_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00979", + "gapId": "operator:mask.move_to_layer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00980", + "gapId": "operator:mask.new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00981", + "gapId": "operator:mask.normals_make_consistent", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00982", + "gapId": "operator:mask.parent_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00983", + "gapId": "operator:mask.parent_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00984", + "gapId": "operator:mask.paste_splines", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00985", + "gapId": "operator:mask.primitive_circle_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00986", + "gapId": "operator:mask.primitive_square_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00987", + "gapId": "operator:mask.select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00988", + "gapId": "operator:mask.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00989", + "gapId": "operator:mask.select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00990", + "gapId": "operator:mask.select_circle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00991", + "gapId": "operator:mask.select_lasso", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00992", + "gapId": "operator:mask.select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00993", + "gapId": "operator:mask.select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00994", + "gapId": "operator:mask.select_linked_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00995", + "gapId": "operator:mask.select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00996", + "gapId": "operator:mask.shape_key_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00997", + "gapId": "operator:mask.shape_key_feather_reset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00998", + "gapId": "operator:mask.shape_key_insert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00999", + "gapId": "operator:mask.shape_key_rekey", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01000", + "gapId": "operator:mask.slide_point", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01001", + "gapId": "operator:mask.slide_spline_curvature", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01002", + "gapId": "operator:mask.switch_direction", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01003", + "gapId": "operator:material.copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01004", + "gapId": "operator:material.new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01005", + "gapId": "operator:material.paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01006", + "gapId": "operator:mball.delete_metaelems", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01007", + "gapId": "operator:mball.duplicate_metaelems", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01008", + "gapId": "operator:mball.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01009", + "gapId": "operator:mball.hide_metaelems", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01010", + "gapId": "operator:mball.reveal_metaelems", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01011", + "gapId": "operator:mball.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01012", + "gapId": "operator:mball.select_random_metaelems", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01013", + "gapId": "operator:mball.select_similar", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01014", + "gapId": "operator:mesh.attribute_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01015", + "gapId": "operator:mesh.average_normals", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01016", + "gapId": "operator:mesh.beautify_fill", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01017", + "gapId": "operator:mesh.bevel", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01018", + "gapId": "operator:mesh.bisect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01019", + "gapId": "operator:mesh.blend_from_shape", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01020", + "gapId": "operator:mesh.bridge_edge_loops", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01021", + "gapId": "operator:mesh.circularize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01022", + "gapId": "operator:mesh.colors_reverse", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01023", + "gapId": "operator:mesh.colors_rotate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01024", + "gapId": "operator:mesh.convex_hull", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01025", + "gapId": "operator:mesh.customdata_custom_splitnormals_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01026", + "gapId": "operator:mesh.customdata_custom_splitnormals_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01027", + "gapId": "operator:mesh.customdata_face_sets_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01028", + "gapId": "operator:mesh.customdata_mask_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01029", + "gapId": "operator:mesh.customdata_skin_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01030", + "gapId": "operator:mesh.customdata_skin_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01031", + "gapId": "operator:mesh.decimate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01032", + "gapId": "operator:mesh.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01033", + "gapId": "operator:mesh.delete_edgeloop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01034", + "gapId": "operator:mesh.delete_loose", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01035", + "gapId": "operator:mesh.dissolve_degenerate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01036", + "gapId": "operator:mesh.dissolve_edges", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01037", + "gapId": "operator:mesh.dissolve_faces", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01038", + "gapId": "operator:mesh.dissolve_limited", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01039", + "gapId": "operator:mesh.dissolve_mode", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01040", + "gapId": "operator:mesh.dissolve_verts", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01041", + "gapId": "operator:mesh.dupli_extrude_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01042", + "gapId": "operator:mesh.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01043", + "gapId": "operator:mesh.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01044", + "gapId": "operator:mesh.edge_collapse", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01045", + "gapId": "operator:mesh.edge_face_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01046", + "gapId": "operator:mesh.edge_rotate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01047", + "gapId": "operator:mesh.edge_split", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01048", + "gapId": "operator:mesh.edgering_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01049", + "gapId": "operator:mesh.edges_select_sharp", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01050", + "gapId": "operator:mesh.extrude_context", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01051", + "gapId": "operator:mesh.extrude_context_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01052", + "gapId": "operator:mesh.extrude_edges_indiv", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01053", + "gapId": "operator:mesh.extrude_edges_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01054", + "gapId": "operator:mesh.extrude_faces_indiv", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01055", + "gapId": "operator:mesh.extrude_faces_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01056", + "gapId": "operator:mesh.extrude_manifold", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01057", + "gapId": "operator:mesh.extrude_region", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01058", + "gapId": "operator:mesh.extrude_region_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01059", + "gapId": "operator:mesh.extrude_region_shrink_fatten", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01060", + "gapId": "operator:mesh.extrude_repeat", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01061", + "gapId": "operator:mesh.extrude_vertices_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01062", + "gapId": "operator:mesh.extrude_verts_indiv", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01063", + "gapId": "operator:mesh.face_make_planar", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01064", + "gapId": "operator:mesh.face_split_by_edges", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01065", + "gapId": "operator:mesh.faces_select_linked_flat", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01066", + "gapId": "operator:mesh.faces_shade_flat", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01067", + "gapId": "operator:mesh.faces_shade_smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01068", + "gapId": "operator:mesh.fill", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01069", + "gapId": "operator:mesh.fill_grid", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01070", + "gapId": "operator:mesh.fill_holes", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01071", + "gapId": "operator:mesh.flatten", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01072", + "gapId": "operator:mesh.flip_normals", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01073", + "gapId": "operator:mesh.flip_quad_tessellation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01074", + "gapId": "operator:mesh.hide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01075", + "gapId": "operator:mesh.inset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01076", + "gapId": "operator:mesh.intersect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01077", + "gapId": "operator:mesh.intersect_boolean", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01078", + "gapId": "operator:mesh.knife_project", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01079", + "gapId": "operator:mesh.knife_tool", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01080", + "gapId": "operator:mesh.loop_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01081", + "gapId": "operator:mesh.loop_to_region", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01082", + "gapId": "operator:mesh.loopcut", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01083", + "gapId": "operator:mesh.loopcut_slide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01084", + "gapId": "operator:mesh.mark_freestyle_edge", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01085", + "gapId": "operator:mesh.mark_freestyle_face", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01086", + "gapId": "operator:mesh.mark_seam", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01087", + "gapId": "operator:mesh.mark_sharp", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01088", + "gapId": "operator:mesh.merge", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01089", + "gapId": "operator:mesh.merge_normals", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01090", + "gapId": "operator:mesh.mod_weighted_strength", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01091", + "gapId": "operator:mesh.normals_make_consistent", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01092", + "gapId": "operator:mesh.normals_tools", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01093", + "gapId": "operator:mesh.offset_edge_loops", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01094", + "gapId": "operator:mesh.offset_edge_loops_slide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01095", + "gapId": "operator:mesh.point_normals", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01096", + "gapId": "operator:mesh.poke", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01097", + "gapId": "operator:mesh.polybuild_delete_at_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01098", + "gapId": "operator:mesh.polybuild_dissolve_at_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01099", + "gapId": "operator:mesh.polybuild_extrude_at_cursor_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01100", + "gapId": "operator:mesh.polybuild_face_at_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01101", + "gapId": "operator:mesh.polybuild_face_at_cursor_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01102", + "gapId": "operator:mesh.polybuild_split_at_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01103", + "gapId": "operator:mesh.polybuild_split_at_cursor_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01104", + "gapId": "operator:mesh.polybuild_transform_at_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01105", + "gapId": "operator:mesh.polybuild_transform_at_cursor_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01106", + "gapId": "operator:mesh.primitive_circle_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01107", + "gapId": "operator:mesh.primitive_cone_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01108", + "gapId": "operator:mesh.primitive_cube_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01109", + "gapId": "operator:mesh.primitive_cube_add_gizmo", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01110", + "gapId": "operator:mesh.primitive_cylinder_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01111", + "gapId": "operator:mesh.primitive_grid_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01112", + "gapId": "operator:mesh.primitive_ico_sphere_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01113", + "gapId": "operator:mesh.primitive_monkey_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01114", + "gapId": "operator:mesh.primitive_plane_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01115", + "gapId": "operator:mesh.primitive_torus_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01116", + "gapId": "operator:mesh.primitive_uv_sphere_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01117", + "gapId": "operator:mesh.quads_convert_to_tris", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01118", + "gapId": "operator:mesh.region_to_loop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01119", + "gapId": "operator:mesh.remove_doubles", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01120", + "gapId": "operator:mesh.reorder_vertices_spatial", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01121", + "gapId": "operator:mesh.reveal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01122", + "gapId": "operator:mesh.rip", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01123", + "gapId": "operator:mesh.rip_edge", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01124", + "gapId": "operator:mesh.rip_edge_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01125", + "gapId": "operator:mesh.rip_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01126", + "gapId": "operator:mesh.screw", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01127", + "gapId": "operator:mesh.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01128", + "gapId": "operator:mesh.select_axis", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01129", + "gapId": "operator:mesh.select_boundary_loop_multi", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01130", + "gapId": "operator:mesh.select_by_attribute", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01131", + "gapId": "operator:mesh.select_by_pole_count", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01132", + "gapId": "operator:mesh.select_edge_loop_multi", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01133", + "gapId": "operator:mesh.select_edge_ring_multi", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01134", + "gapId": "operator:mesh.select_face_by_sides", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01135", + "gapId": "operator:mesh.select_interior_faces", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01136", + "gapId": "operator:mesh.select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01137", + "gapId": "operator:mesh.select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01138", + "gapId": "operator:mesh.select_linked_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01139", + "gapId": "operator:mesh.select_loose", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01140", + "gapId": "operator:mesh.select_mirror", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01141", + "gapId": "operator:mesh.select_mode", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01142", + "gapId": "operator:mesh.select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01143", + "gapId": "operator:mesh.select_next_item", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01144", + "gapId": "operator:mesh.select_non_manifold", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01145", + "gapId": "operator:mesh.select_nth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01146", + "gapId": "operator:mesh.select_prev_item", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01147", + "gapId": "operator:mesh.select_random", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01148", + "gapId": "operator:mesh.select_similar", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01149", + "gapId": "operator:mesh.select_similar_region", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01150", + "gapId": "operator:mesh.select_ungrouped", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01151", + "gapId": "operator:mesh.separate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01152", + "gapId": "operator:mesh.set_normals_from_faces", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01153", + "gapId": "operator:mesh.set_sharpness_by_angle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01154", + "gapId": "operator:mesh.shape_propagate_to_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01155", + "gapId": "operator:mesh.shortest_path_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01156", + "gapId": "operator:mesh.shortest_path_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01157", + "gapId": "operator:mesh.smooth_normals", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01158", + "gapId": "operator:mesh.solidify", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01159", + "gapId": "operator:mesh.sort_elements", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01160", + "gapId": "operator:mesh.space_edge_loops_evenly", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01161", + "gapId": "operator:mesh.spin", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01162", + "gapId": "operator:mesh.split", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01163", + "gapId": "operator:mesh.split_normals", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01164", + "gapId": "operator:mesh.subdivide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01165", + "gapId": "operator:mesh.subdivide_edgering", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01166", + "gapId": "operator:mesh.symmetrize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01167", + "gapId": "operator:mesh.symmetry_snap", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01168", + "gapId": "operator:mesh.tris_convert_to_quads", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01169", + "gapId": "operator:mesh.unsubdivide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01170", + "gapId": "operator:mesh.uv_texture_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01171", + "gapId": "operator:mesh.uv_texture_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01172", + "gapId": "operator:mesh.uvs_reverse", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01173", + "gapId": "operator:mesh.uvs_rotate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01174", + "gapId": "operator:mesh.vert_connect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01175", + "gapId": "operator:mesh.vert_connect_concave", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01176", + "gapId": "operator:mesh.vert_connect_nonplanar", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01177", + "gapId": "operator:mesh.vert_connect_path", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01178", + "gapId": "operator:mesh.vertices_smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01179", + "gapId": "operator:mesh.vertices_smooth_laplacian", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01180", + "gapId": "operator:mesh.wireframe", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01181", + "gapId": "operator:nla.action_pushdown", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01182", + "gapId": "operator:nla.action_sync_length", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01183", + "gapId": "operator:nla.action_unlink", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01184", + "gapId": "operator:nla.actionclip_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01185", + "gapId": "operator:nla.apply_scale", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01186", + "gapId": "operator:nla.bake", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01187", + "gapId": "operator:nla.channels_click", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01188", + "gapId": "operator:nla.clear_scale", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01189", + "gapId": "operator:nla.click_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01190", + "gapId": "operator:nla.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01191", + "gapId": "operator:nla.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01192", + "gapId": "operator:nla.duplicate_linked_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01193", + "gapId": "operator:nla.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01194", + "gapId": "operator:nla.fmodifier_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01195", + "gapId": "operator:nla.fmodifier_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01196", + "gapId": "operator:nla.fmodifier_paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01197", + "gapId": "operator:nla.make_single_user", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01198", + "gapId": "operator:nla.meta_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01199", + "gapId": "operator:nla.meta_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01200", + "gapId": "operator:nla.move_down", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01201", + "gapId": "operator:nla.move_up", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01202", + "gapId": "operator:nla.mute_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01203", + "gapId": "operator:nla.previewrange_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01204", + "gapId": "operator:nla.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01205", + "gapId": "operator:nla.select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01206", + "gapId": "operator:nla.select_leftright", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01207", + "gapId": "operator:nla.selected_objects_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01208", + "gapId": "operator:nla.snap", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01209", + "gapId": "operator:nla.soundclip_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01210", + "gapId": "operator:nla.split", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01211", + "gapId": "operator:nla.swap", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01212", + "gapId": "operator:nla.tracks_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01213", + "gapId": "operator:nla.tracks_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01214", + "gapId": "operator:nla.transition_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01215", + "gapId": "operator:nla.tweakmode_enter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01216", + "gapId": "operator:nla.tweakmode_exit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01217", + "gapId": "operator:nla.view_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01218", + "gapId": "operator:nla.view_frame", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01219", + "gapId": "operator:nla.view_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01220", + "gapId": "operator:node.activate_viewer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01221", + "gapId": "operator:node.add_closure_zone", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01222", + "gapId": "operator:node.add_collection", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01223", + "gapId": "operator:node.add_color", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01224", + "gapId": "operator:node.add_empty_group", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01225", + "gapId": "operator:node.add_foreach_geometry_element_zone", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01226", + "gapId": "operator:node.add_group", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01227", + "gapId": "operator:node.add_group_asset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01228", + "gapId": "operator:node.add_group_input_node", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01229", + "gapId": "operator:node.add_image", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01230", + "gapId": "operator:node.add_import_node", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01231", + "gapId": "operator:node.add_mask", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01232", + "gapId": "operator:node.add_material", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01233", + "gapId": "operator:node.add_node", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01234", + "gapId": "operator:node.add_object", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01235", + "gapId": "operator:node.add_repeat_zone", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01236", + "gapId": "operator:node.add_reroute", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01237", + "gapId": "operator:node.add_simulation_zone", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01238", + "gapId": "operator:node.add_typed_bundle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01239", + "gapId": "operator:node.add_zone", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01240", + "gapId": "operator:node.attach", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01241", + "gapId": "operator:node.backimage_fit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01242", + "gapId": "operator:node.backimage_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01243", + "gapId": "operator:node.backimage_sample", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01244", + "gapId": "operator:node.backimage_zoom", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01245", + "gapId": "operator:node.bake_node_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01246", + "gapId": "operator:node.bake_node_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01247", + "gapId": "operator:node.bake_node_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01248", + "gapId": "operator:node.capture_attribute_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01249", + "gapId": "operator:node.capture_attribute_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01250", + "gapId": "operator:node.capture_attribute_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01251", + "gapId": "operator:node.clear_viewer_border", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01252", + "gapId": "operator:node.clipboard_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01253", + "gapId": "operator:node.clipboard_paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01254", + "gapId": "operator:node.closure_input_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01255", + "gapId": "operator:node.closure_input_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01256", + "gapId": "operator:node.closure_input_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01257", + "gapId": "operator:node.closure_output_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01258", + "gapId": "operator:node.closure_output_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01259", + "gapId": "operator:node.closure_output_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01260", + "gapId": "operator:node.closure_to_list_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01261", + "gapId": "operator:node.closure_to_list_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01262", + "gapId": "operator:node.closure_to_list_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01263", + "gapId": "operator:node.collapse_hide_unused_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01264", + "gapId": "operator:node.combine_bundle_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01265", + "gapId": "operator:node.combine_bundle_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01266", + "gapId": "operator:node.combine_bundle_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01267", + "gapId": "operator:node.connect_to_output", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01268", + "gapId": "operator:node.cryptomatte_layer_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01269", + "gapId": "operator:node.cryptomatte_layer_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01270", + "gapId": "operator:node.deactivate_viewer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01271", + "gapId": "operator:node.default_group_width_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01272", + "gapId": "operator:node.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01273", + "gapId": "operator:node.delete_copy_reconnect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01274", + "gapId": "operator:node.delete_reconnect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01275", + "gapId": "operator:node.detach", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01276", + "gapId": "operator:node.detach_translate_attach", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01277", + "gapId": "operator:node.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01278", + "gapId": "operator:node.duplicate_compositing_modifier_node_group", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01279", + "gapId": "operator:node.duplicate_compositing_node_group", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01280", + "gapId": "operator:node.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01281", + "gapId": "operator:node.duplicate_move_keep_inputs", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01282", + "gapId": "operator:node.duplicate_move_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01283", + "gapId": "operator:node.enum_definition_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01284", + "gapId": "operator:node.enum_definition_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01285", + "gapId": "operator:node.enum_definition_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01286", + "gapId": "operator:node.evaluate_closure_input_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01287", + "gapId": "operator:node.evaluate_closure_input_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01288", + "gapId": "operator:node.evaluate_closure_input_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01289", + "gapId": "operator:node.evaluate_closure_output_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01290", + "gapId": "operator:node.evaluate_closure_output_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01291", + "gapId": "operator:node.evaluate_closure_output_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01292", + "gapId": "operator:node.field_to_grid_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01293", + "gapId": "operator:node.field_to_grid_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01294", + "gapId": "operator:node.field_to_grid_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01295", + "gapId": "operator:node.field_to_list_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01296", + "gapId": "operator:node.field_to_list_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01297", + "gapId": "operator:node.field_to_list_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01298", + "gapId": "operator:node.file_output_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01299", + "gapId": "operator:node.file_output_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01300", + "gapId": "operator:node.file_output_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01301", + "gapId": "operator:node.find_node", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01302", + "gapId": "operator:node.foreach_geometry_element_zone_generation_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01303", + "gapId": "operator:node.foreach_geometry_element_zone_generation_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01304", + "gapId": "operator:node.foreach_geometry_element_zone_generation_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01305", + "gapId": "operator:node.foreach_geometry_element_zone_input_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01306", + "gapId": "operator:node.foreach_geometry_element_zone_input_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01307", + "gapId": "operator:node.foreach_geometry_element_zone_input_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01308", + "gapId": "operator:node.foreach_geometry_element_zone_main_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01309", + "gapId": "operator:node.foreach_geometry_element_zone_main_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01310", + "gapId": "operator:node.foreach_geometry_element_zone_main_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01311", + "gapId": "operator:node.format_string_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01312", + "gapId": "operator:node.format_string_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01313", + "gapId": "operator:node.format_string_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01314", + "gapId": "operator:node.geometry_nodes_viewer_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01315", + "gapId": "operator:node.geometry_nodes_viewer_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01316", + "gapId": "operator:node.geometry_nodes_viewer_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01317", + "gapId": "operator:node.gltf_settings_node_operator", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01318", + "gapId": "operator:node.group_edit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01319", + "gapId": "operator:node.group_enter_exit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01320", + "gapId": "operator:node.group_insert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01321", + "gapId": "operator:node.group_make", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01322", + "gapId": "operator:node.group_separate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01323", + "gapId": "operator:node.group_ungroup", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01324", + "gapId": "operator:node.hide_socket_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01325", + "gapId": "operator:node.hide_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01326", + "gapId": "operator:node.index_switch_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01327", + "gapId": "operator:node.index_switch_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01328", + "gapId": "operator:node.index_switch_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01329", + "gapId": "operator:node.insert_offset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01330", + "gapId": "operator:node.interface_item_duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01331", + "gapId": "operator:node.interface_item_make_panel_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01332", + "gapId": "operator:node.interface_item_new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01333", + "gapId": "operator:node.interface_item_new_panel_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01334", + "gapId": "operator:node.interface_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01335", + "gapId": "operator:node.interface_item_unlink_panel_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01336", + "gapId": "operator:node.join", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01337", + "gapId": "operator:node.join_named", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01338", + "gapId": "operator:node.join_nodes", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01339", + "gapId": "operator:node.link", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01340", + "gapId": "operator:node.link_drag_operation_test", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01341", + "gapId": "operator:node.link_make", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01342", + "gapId": "operator:node.link_viewer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01343", + "gapId": "operator:node.links_cut", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01344", + "gapId": "operator:node.links_detach", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01345", + "gapId": "operator:node.links_mute", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01346", + "gapId": "operator:node.move_detach_links", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01347", + "gapId": "operator:node.move_detach_links_release", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01348", + "gapId": "operator:node.mute_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01349", + "gapId": "operator:node.new_compositing_node_group", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01350", + "gapId": "operator:node.new_compositor_sequencer_node_group", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01351", + "gapId": "operator:node.new_geometry_node_group_assign", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01352", + "gapId": "operator:node.new_geometry_node_group_tool", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01353", + "gapId": "operator:node.new_geometry_nodes_modifier", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01354", + "gapId": "operator:node.new_node_tree", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01355", + "gapId": "operator:node.node_color_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01356", + "gapId": "operator:node.node_copy_color", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01357", + "gapId": "operator:node.options_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01358", + "gapId": "operator:node.parent_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01359", + "gapId": "operator:node.preview_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01360", + "gapId": "operator:node.read_viewlayers", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01361", + "gapId": "operator:node.render_changed", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01362", + "gapId": "operator:node.repeat_zone_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01363", + "gapId": "operator:node.repeat_zone_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01364", + "gapId": "operator:node.repeat_zone_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01365", + "gapId": "operator:node.resize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01366", + "gapId": "operator:node.sample_attribute_items_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01367", + "gapId": "operator:node.sample_attribute_items_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01368", + "gapId": "operator:node.sample_attribute_items_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01369", + "gapId": "operator:node.select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01370", + "gapId": "operator:node.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01371", + "gapId": "operator:node.select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01372", + "gapId": "operator:node.select_circle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01373", + "gapId": "operator:node.select_grouped", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01374", + "gapId": "operator:node.select_lasso", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01375", + "gapId": "operator:node.select_link_viewer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01376", + "gapId": "operator:node.select_linked_from", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01377", + "gapId": "operator:node.select_linked_to", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01378", + "gapId": "operator:node.select_same_type_step", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01379", + "gapId": "operator:node.separate_bundle_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01380", + "gapId": "operator:node.separate_bundle_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01381", + "gapId": "operator:node.separate_bundle_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01382", + "gapId": "operator:node.shader_script_update", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01383", + "gapId": "operator:node.simulation_zone_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01384", + "gapId": "operator:node.simulation_zone_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01385", + "gapId": "operator:node.simulation_zone_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01386", + "gapId": "operator:node.sockets_sync", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01387", + "gapId": "operator:node.swap_empty_group", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01388", + "gapId": "operator:node.swap_group_asset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01389", + "gapId": "operator:node.swap_node", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01390", + "gapId": "operator:node.swap_typed_bundle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01391", + "gapId": "operator:node.swap_zone", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01392", + "gapId": "operator:node.test_inlining_shader_nodes", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01393", + "gapId": "operator:node.toggle_viewer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01394", + "gapId": "operator:node.translate_attach", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01395", + "gapId": "operator:node.translate_attach_remove_on_cancel", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01396", + "gapId": "operator:node.tree_path_parent", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01397", + "gapId": "operator:node.view_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01398", + "gapId": "operator:node.view_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01399", + "gapId": "operator:node.viewer_border", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01400", + "gapId": "operator:node.viewer_shortcut_get", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01401", + "gapId": "operator:node.viewer_shortcut_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01402", + "gapId": "operator:object.add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01403", + "gapId": "operator:object.add_modifier_menu", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01404", + "gapId": "operator:object.add_named", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01405", + "gapId": "operator:object.align", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01406", + "gapId": "operator:object.anim_transforms_to_deltas", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01407", + "gapId": "operator:object.armature_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01408", + "gapId": "operator:object.assign_property_defaults", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01409", + "gapId": "operator:object.bake", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01410", + "gapId": "operator:object.bake_image", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01411", + "gapId": "operator:object.camera_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01412", + "gapId": "operator:object.camera_custom_update", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01413", + "gapId": "operator:object.clear_override_library", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01414", + "gapId": "operator:object.collection_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01415", + "gapId": "operator:object.collection_external_asset_drop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01416", + "gapId": "operator:object.collection_instance_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01417", + "gapId": "operator:object.collection_link", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01418", + "gapId": "operator:object.collection_objects_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01419", + "gapId": "operator:object.collection_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01420", + "gapId": "operator:object.collection_unlink", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01421", + "gapId": "operator:object.constraint_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01422", + "gapId": "operator:object.constraint_add_with_targets", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01423", + "gapId": "operator:object.constraints_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01424", + "gapId": "operator:object.constraints_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01425", + "gapId": "operator:object.convert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01426", + "gapId": "operator:object.copy_global_transform", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01427", + "gapId": "operator:object.copy_relative_transform", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01428", + "gapId": "operator:object.correctivesmooth_bind", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01429", + "gapId": "operator:object.curves_empty_hair_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01430", + "gapId": "operator:object.curves_random_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01431", + "gapId": "operator:object.data_instance_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01432", + "gapId": "operator:object.data_transfer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01433", + "gapId": "operator:object.datalayout_transfer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01434", + "gapId": "operator:object.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01435", + "gapId": "operator:object.delete_fix_to_camera_keys", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01436", + "gapId": "operator:object.drop_geometry_nodes", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01437", + "gapId": "operator:object.drop_named_material", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01438", + "gapId": "operator:object.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01439", + "gapId": "operator:object.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01440", + "gapId": "operator:object.duplicate_move_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01441", + "gapId": "operator:object.duplicates_make_real", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01442", + "gapId": "operator:object.editmode_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01443", + "gapId": "operator:object.effector_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01444", + "gapId": "operator:object.empty_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01445", + "gapId": "operator:object.empty_image_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01446", + "gapId": "operator:object.explode_refresh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01447", + "gapId": "operator:object.fix_to_camera", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01448", + "gapId": "operator:object.forcefield_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01449", + "gapId": "operator:object.geometry_node_bake_delete_single", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01450", + "gapId": "operator:object.geometry_node_bake_pack_single", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01451", + "gapId": "operator:object.geometry_node_bake_single", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01452", + "gapId": "operator:object.geometry_node_bake_unpack_single", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01453", + "gapId": "operator:object.geometry_node_tree_copy_assign", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01454", + "gapId": "operator:object.geometry_nodes_input_attribute_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01455", + "gapId": "operator:object.geometry_nodes_move_to_nodes", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01456", + "gapId": "operator:object.grease_pencil_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01457", + "gapId": "operator:object.grease_pencil_dash_modifier_segment_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01458", + "gapId": "operator:object.grease_pencil_dash_modifier_segment_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01459", + "gapId": "operator:object.grease_pencil_dash_modifier_segment_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01460", + "gapId": "operator:object.grease_pencil_time_modifier_segment_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01461", + "gapId": "operator:object.grease_pencil_time_modifier_segment_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01462", + "gapId": "operator:object.grease_pencil_time_modifier_segment_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01463", + "gapId": "operator:object.hide_collection", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01464", + "gapId": "operator:object.hide_render_clear_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01465", + "gapId": "operator:object.hide_view_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01466", + "gapId": "operator:object.hide_view_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01467", + "gapId": "operator:object.hook_add_newob", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01468", + "gapId": "operator:object.hook_add_selob", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01469", + "gapId": "operator:object.hook_assign", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01470", + "gapId": "operator:object.hook_recenter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01471", + "gapId": "operator:object.hook_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01472", + "gapId": "operator:object.hook_reset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01473", + "gapId": "operator:object.hook_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01474", + "gapId": "operator:object.instance_offset_from_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01475", + "gapId": "operator:object.instance_offset_from_object", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01476", + "gapId": "operator:object.instance_offset_to_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01477", + "gapId": "operator:object.isolate_type_render", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01478", + "gapId": "operator:object.join", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01479", + "gapId": "operator:object.join_shapes", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01480", + "gapId": "operator:object.join_uvs", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01481", + "gapId": "operator:object.laplaciandeform_bind", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01482", + "gapId": "operator:object.lattice_add_to_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01483", + "gapId": "operator:object.light_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01484", + "gapId": "operator:object.light_linking_blocker_collection_new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01485", + "gapId": "operator:object.light_linking_blockers_link", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01486", + "gapId": "operator:object.light_linking_blockers_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01487", + "gapId": "operator:object.light_linking_receiver_collection_new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01488", + "gapId": "operator:object.light_linking_receivers_link", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01489", + "gapId": "operator:object.light_linking_receivers_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01490", + "gapId": "operator:object.light_linking_unlink_from_collection", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01491", + "gapId": "operator:object.lightprobe_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01492", + "gapId": "operator:object.lightprobe_cache_bake", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01493", + "gapId": "operator:object.lightprobe_cache_free", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01494", + "gapId": "operator:object.lineart_bake_strokes", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01495", + "gapId": "operator:object.lineart_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01496", + "gapId": "operator:object.link_to_collection", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01497", + "gapId": "operator:object.location_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01498", + "gapId": "operator:object.make_dupli_face", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01499", + "gapId": "operator:object.make_links_data", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01500", + "gapId": "operator:object.make_links_scene", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01501", + "gapId": "operator:object.make_local", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01502", + "gapId": "operator:object.make_override_library", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01503", + "gapId": "operator:object.make_single_user", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01504", + "gapId": "operator:object.material_slot_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01505", + "gapId": "operator:object.material_slot_assign", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01506", + "gapId": "operator:object.material_slot_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01507", + "gapId": "operator:object.material_slot_deselect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01508", + "gapId": "operator:object.material_slot_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01509", + "gapId": "operator:object.material_slot_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01510", + "gapId": "operator:object.material_slot_remove_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01511", + "gapId": "operator:object.material_slot_remove_unused", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01512", + "gapId": "operator:object.material_slot_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01513", + "gapId": "operator:object.meshdeform_bind", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01514", + "gapId": "operator:object.metaball_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01515", + "gapId": "operator:object.mode_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01516", + "gapId": "operator:object.mode_set_with_submode", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01517", + "gapId": "operator:object.modifier_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01518", + "gapId": "operator:object.modifier_add_node_group", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01519", + "gapId": "operator:object.modifier_apply", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01520", + "gapId": "operator:object.modifier_apply_as_shapekey", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01521", + "gapId": "operator:object.modifier_convert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01522", + "gapId": "operator:object.modifier_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01523", + "gapId": "operator:object.modifier_copy_to_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01524", + "gapId": "operator:object.modifier_move_down", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01525", + "gapId": "operator:object.modifier_move_to_index", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01526", + "gapId": "operator:object.modifier_move_up", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01527", + "gapId": "operator:object.modifier_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01528", + "gapId": "operator:object.modifier_set_active", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01529", + "gapId": "operator:object.modifiers_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01530", + "gapId": "operator:object.modifiers_copy_to_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01531", + "gapId": "operator:object.move_to_collection", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01532", + "gapId": "operator:object.multires_base_apply", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01533", + "gapId": "operator:object.multires_external_pack", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01534", + "gapId": "operator:object.multires_external_save", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01535", + "gapId": "operator:object.multires_higher_levels_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01536", + "gapId": "operator:object.multires_rebuild_subdiv", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01537", + "gapId": "operator:object.multires_reshape", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01538", + "gapId": "operator:object.multires_subdivide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01539", + "gapId": "operator:object.multires_unsubdivide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01540", + "gapId": "operator:object.ocean_bake", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01541", + "gapId": "operator:object.origin_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01542", + "gapId": "operator:object.origin_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01543", + "gapId": "operator:object.parent_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01544", + "gapId": "operator:object.parent_inverse_apply", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01545", + "gapId": "operator:object.parent_no_inverse_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01546", + "gapId": "operator:object.parent_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01547", + "gapId": "operator:object.particle_system_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01548", + "gapId": "operator:object.particle_system_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01549", + "gapId": "operator:object.paste_transform", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01550", + "gapId": "operator:object.paths_calculate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01551", + "gapId": "operator:object.paths_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01552", + "gapId": "operator:object.paths_update", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01553", + "gapId": "operator:object.paths_update_visible", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01554", + "gapId": "operator:object.pointcloud_random_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01555", + "gapId": "operator:object.posemode_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01556", + "gapId": "operator:object.quadriflow_remesh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01557", + "gapId": "operator:object.quick_explode", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01558", + "gapId": "operator:object.quick_fur", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01559", + "gapId": "operator:object.quick_liquid", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01560", + "gapId": "operator:object.quick_smoke", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01561", + "gapId": "operator:object.randomize_transform", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01562", + "gapId": "operator:object.reset_override_library", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01563", + "gapId": "operator:object.rotation_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01564", + "gapId": "operator:object.scale_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01565", + "gapId": "operator:object.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01566", + "gapId": "operator:object.select_by_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01567", + "gapId": "operator:object.select_camera", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01568", + "gapId": "operator:object.select_grouped", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01569", + "gapId": "operator:object.select_hierarchy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01570", + "gapId": "operator:object.select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01571", + "gapId": "operator:object.select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01572", + "gapId": "operator:object.select_mirror", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01573", + "gapId": "operator:object.select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01574", + "gapId": "operator:object.select_pattern", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01575", + "gapId": "operator:object.select_random", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01576", + "gapId": "operator:object.select_same_collection", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01577", + "gapId": "operator:object.shade_auto_smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01578", + "gapId": "operator:object.shade_flat", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01579", + "gapId": "operator:object.shade_smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01580", + "gapId": "operator:object.shade_smooth_by_angle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01581", + "gapId": "operator:object.shaderfx_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01582", + "gapId": "operator:object.shaderfx_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01583", + "gapId": "operator:object.shaderfx_move_down", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01584", + "gapId": "operator:object.shaderfx_move_to_index", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01585", + "gapId": "operator:object.shaderfx_move_up", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01586", + "gapId": "operator:object.shaderfx_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01587", + "gapId": "operator:object.shape_key_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01588", + "gapId": "operator:object.shape_key_apply_to_basis", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01589", + "gapId": "operator:object.shape_key_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01590", + "gapId": "operator:object.shape_key_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01591", + "gapId": "operator:object.shape_key_lock", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01592", + "gapId": "operator:object.shape_key_make_basis", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01593", + "gapId": "operator:object.shape_key_mirror", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01594", + "gapId": "operator:object.shape_key_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01595", + "gapId": "operator:object.shape_key_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01596", + "gapId": "operator:object.shape_key_retime", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01597", + "gapId": "operator:object.shape_key_transfer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01598", + "gapId": "operator:object.simulation_nodes_cache_bake", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01599", + "gapId": "operator:object.simulation_nodes_cache_calculate_to_frame", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01600", + "gapId": "operator:object.simulation_nodes_cache_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01601", + "gapId": "operator:object.skin_armature_create", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01602", + "gapId": "operator:object.skin_loose_mark_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01603", + "gapId": "operator:object.skin_radii_equalize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01604", + "gapId": "operator:object.skin_root_mark", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01605", + "gapId": "operator:object.speaker_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01606", + "gapId": "operator:object.subdivision_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01607", + "gapId": "operator:object.surfacedeform_bind", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01608", + "gapId": "operator:object.text_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01609", + "gapId": "operator:object.track_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01610", + "gapId": "operator:object.track_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01611", + "gapId": "operator:object.transfer_mode", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01612", + "gapId": "operator:object.transform_apply", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01613", + "gapId": "operator:object.transform_axis_target", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01614", + "gapId": "operator:object.transform_to_mouse", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01615", + "gapId": "operator:object.transforms_to_deltas", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01616", + "gapId": "operator:object.unlink_data", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01617", + "gapId": "operator:object.update_shapes", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01618", + "gapId": "operator:object.vertex_group_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01619", + "gapId": "operator:object.vertex_group_assign", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01620", + "gapId": "operator:object.vertex_group_assign_new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01621", + "gapId": "operator:object.vertex_group_clean", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01622", + "gapId": "operator:object.vertex_group_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01623", + "gapId": "operator:object.vertex_group_copy_to_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01624", + "gapId": "operator:object.vertex_group_deselect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01625", + "gapId": "operator:object.vertex_group_invert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01626", + "gapId": "operator:object.vertex_group_levels", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01627", + "gapId": "operator:object.vertex_group_limit_total", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01628", + "gapId": "operator:object.vertex_group_lock", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01629", + "gapId": "operator:object.vertex_group_mirror", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01630", + "gapId": "operator:object.vertex_group_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01631", + "gapId": "operator:object.vertex_group_normalize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01632", + "gapId": "operator:object.vertex_group_normalize_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01633", + "gapId": "operator:object.vertex_group_quantize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01634", + "gapId": "operator:object.vertex_group_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01635", + "gapId": "operator:object.vertex_group_remove_from", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01636", + "gapId": "operator:object.vertex_group_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01637", + "gapId": "operator:object.vertex_group_set_active", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01638", + "gapId": "operator:object.vertex_group_smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01639", + "gapId": "operator:object.vertex_group_sort", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01640", + "gapId": "operator:object.vertex_parent_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01641", + "gapId": "operator:object.vertex_weight_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01642", + "gapId": "operator:object.vertex_weight_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01643", + "gapId": "operator:object.vertex_weight_normalize_active_vertex", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01644", + "gapId": "operator:object.vertex_weight_paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01645", + "gapId": "operator:object.vertex_weight_set_active", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01646", + "gapId": "operator:object.visual_geometry_to_objects", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01647", + "gapId": "operator:object.visual_transform_apply", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01648", + "gapId": "operator:object.volume_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01649", + "gapId": "operator:object.volume_import", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01650", + "gapId": "operator:object.voxel_remesh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01651", + "gapId": "operator:object.voxel_size_edit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01652", + "gapId": "operator:outliner.action_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01653", + "gapId": "operator:outliner.animdata_operation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01654", + "gapId": "operator:outliner.clear_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01655", + "gapId": "operator:outliner.collection_color_tag_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01656", + "gapId": "operator:outliner.collection_disable", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01657", + "gapId": "operator:outliner.collection_disable_render", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01658", + "gapId": "operator:outliner.collection_drop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01659", + "gapId": "operator:outliner.collection_duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01660", + "gapId": "operator:outliner.collection_duplicate_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01661", + "gapId": "operator:outliner.collection_enable", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01662", + "gapId": "operator:outliner.collection_enable_render", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01663", + "gapId": "operator:outliner.collection_exclude_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01664", + "gapId": "operator:outliner.collection_exclude_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01665", + "gapId": "operator:outliner.collection_hide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01666", + "gapId": "operator:outliner.collection_hide_inside", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01667", + "gapId": "operator:outliner.collection_hierarchy_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01668", + "gapId": "operator:outliner.collection_holdout_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01669", + "gapId": "operator:outliner.collection_holdout_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01670", + "gapId": "operator:outliner.collection_indirect_only_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01671", + "gapId": "operator:outliner.collection_indirect_only_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01672", + "gapId": "operator:outliner.collection_instance", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01673", + "gapId": "operator:outliner.collection_isolate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01674", + "gapId": "operator:outliner.collection_link", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01675", + "gapId": "operator:outliner.collection_new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01676", + "gapId": "operator:outliner.collection_objects_deselect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01677", + "gapId": "operator:outliner.collection_objects_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01678", + "gapId": "operator:outliner.collection_show", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01679", + "gapId": "operator:outliner.collection_show_inside", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01680", + "gapId": "operator:outliner.constraint_operation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01681", + "gapId": "operator:outliner.data_operation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01682", + "gapId": "operator:outliner.datastack_drop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01683", + "gapId": "operator:outliner.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01684", + "gapId": "operator:outliner.drivers_add_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01685", + "gapId": "operator:outliner.drivers_delete_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01686", + "gapId": "operator:outliner.expanded_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01687", + "gapId": "operator:outliner.hide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01688", + "gapId": "operator:outliner.highlight_update", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01689", + "gapId": "operator:outliner.id_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01690", + "gapId": "operator:outliner.id_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01691", + "gapId": "operator:outliner.id_linked_relocate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01692", + "gapId": "operator:outliner.id_operation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01693", + "gapId": "operator:outliner.id_paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01694", + "gapId": "operator:outliner.id_remap", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01695", + "gapId": "operator:outliner.item_activate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01696", + "gapId": "operator:outliner.item_drag_drop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01697", + "gapId": "operator:outliner.item_openclose", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01698", + "gapId": "operator:outliner.item_rename", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01699", + "gapId": "operator:outliner.keyingset_add_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01700", + "gapId": "operator:outliner.keyingset_remove_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01701", + "gapId": "operator:outliner.lib_operation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01702", + "gapId": "operator:outliner.lib_relocate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01703", + "gapId": "operator:outliner.liboverride_operation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01704", + "gapId": "operator:outliner.liboverride_property_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01705", + "gapId": "operator:outliner.liboverride_troubleshoot_operation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01706", + "gapId": "operator:outliner.material_drop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01707", + "gapId": "operator:outliner.modifier_operation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01708", + "gapId": "operator:outliner.object_operation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01709", + "gapId": "operator:outliner.operation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01710", + "gapId": "operator:outliner.orphans_manage", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01711", + "gapId": "operator:outliner.orphans_purge", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01712", + "gapId": "operator:outliner.parent_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01713", + "gapId": "operator:outliner.parent_drop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01714", + "gapId": "operator:outliner.scene_drop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01715", + "gapId": "operator:outliner.scene_operation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01716", + "gapId": "operator:outliner.scroll_page", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01717", + "gapId": "operator:outliner.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01718", + "gapId": "operator:outliner.select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01719", + "gapId": "operator:outliner.select_walk", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01720", + "gapId": "operator:outliner.show_active", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01721", + "gapId": "operator:outliner.show_hierarchy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01722", + "gapId": "operator:outliner.show_one_level", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01723", + "gapId": "operator:outliner.start_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01724", + "gapId": "operator:outliner.unhide_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01725", + "gapId": "operator:paint.add_simple_uvs", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01726", + "gapId": "operator:paint.add_texture_paint_slot", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01727", + "gapId": "operator:paint.brush_colors_flip", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01728", + "gapId": "operator:paint.face_select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01729", + "gapId": "operator:paint.face_select_hide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01730", + "gapId": "operator:paint.face_select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01731", + "gapId": "operator:paint.face_select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01732", + "gapId": "operator:paint.face_select_linked_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01733", + "gapId": "operator:paint.face_select_loop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01734", + "gapId": "operator:paint.face_select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01735", + "gapId": "operator:paint.face_vert_reveal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01736", + "gapId": "operator:paint.grab_clone", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01737", + "gapId": "operator:paint.hide_show", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01738", + "gapId": "operator:paint.hide_show_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01739", + "gapId": "operator:paint.hide_show_lasso_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01740", + "gapId": "operator:paint.hide_show_line_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01741", + "gapId": "operator:paint.hide_show_masked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01742", + "gapId": "operator:paint.hide_show_polyline_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01743", + "gapId": "operator:paint.image_from_view", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01744", + "gapId": "operator:paint.image_paint", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01745", + "gapId": "operator:paint.mask_box_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01746", + "gapId": "operator:paint.mask_flood_fill", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01747", + "gapId": "operator:paint.mask_lasso_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01748", + "gapId": "operator:paint.mask_line_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01749", + "gapId": "operator:paint.mask_polyline_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01750", + "gapId": "operator:paint.project_image", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01751", + "gapId": "operator:paint.sample_color", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01752", + "gapId": "operator:paint.texture_paint_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01753", + "gapId": "operator:paint.vert_select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01754", + "gapId": "operator:paint.vert_select_hide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01755", + "gapId": "operator:paint.vert_select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01756", + "gapId": "operator:paint.vert_select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01757", + "gapId": "operator:paint.vert_select_linked_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01758", + "gapId": "operator:paint.vert_select_loop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01759", + "gapId": "operator:paint.vert_select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01760", + "gapId": "operator:paint.vert_select_ungrouped", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01761", + "gapId": "operator:paint.vertex_color_brightness_contrast", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01762", + "gapId": "operator:paint.vertex_color_dirt", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01763", + "gapId": "operator:paint.vertex_color_from_weight", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01764", + "gapId": "operator:paint.vertex_color_hsv", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01765", + "gapId": "operator:paint.vertex_color_invert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01766", + "gapId": "operator:paint.vertex_color_levels", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01767", + "gapId": "operator:paint.vertex_color_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01768", + "gapId": "operator:paint.vertex_color_smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01769", + "gapId": "operator:paint.vertex_paint", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01770", + "gapId": "operator:paint.vertex_paint_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01771", + "gapId": "operator:paint.visibility_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01772", + "gapId": "operator:paint.visibility_invert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01773", + "gapId": "operator:paint.weight_from_bones", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01774", + "gapId": "operator:paint.weight_gradient", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01775", + "gapId": "operator:paint.weight_paint", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01776", + "gapId": "operator:paint.weight_paint_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01777", + "gapId": "operator:paint.weight_sample", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01778", + "gapId": "operator:paint.weight_sample_group", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01779", + "gapId": "operator:paint.weight_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01780", + "gapId": "operator:paintcurve.add_point", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01781", + "gapId": "operator:paintcurve.add_point_slide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01782", + "gapId": "operator:paintcurve.cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01783", + "gapId": "operator:paintcurve.delete_point", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01784", + "gapId": "operator:paintcurve.draw", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01785", + "gapId": "operator:paintcurve.new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01786", + "gapId": "operator:paintcurve.select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01787", + "gapId": "operator:paintcurve.slide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01788", + "gapId": "operator:palette.color_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01789", + "gapId": "operator:palette.color_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01790", + "gapId": "operator:palette.color_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01791", + "gapId": "operator:palette.extract_from_image", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01792", + "gapId": "operator:palette.join", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01793", + "gapId": "operator:palette.new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01794", + "gapId": "operator:palette.sort", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01795", + "gapId": "operator:particle.brush_edit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01796", + "gapId": "operator:particle.connect_hair", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01797", + "gapId": "operator:particle.copy_particle_systems", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01798", + "gapId": "operator:particle.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01799", + "gapId": "operator:particle.disconnect_hair", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01800", + "gapId": "operator:particle.duplicate_particle_system", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01801", + "gapId": "operator:particle.dupliob_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01802", + "gapId": "operator:particle.dupliob_move_down", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01803", + "gapId": "operator:particle.dupliob_move_up", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01804", + "gapId": "operator:particle.dupliob_refresh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01805", + "gapId": "operator:particle.dupliob_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01806", + "gapId": "operator:particle.edited_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01807", + "gapId": "operator:particle.hair_dynamics_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01808", + "gapId": "operator:particle.hide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01809", + "gapId": "operator:particle.mirror", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01810", + "gapId": "operator:particle.new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01811", + "gapId": "operator:particle.new_target", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01812", + "gapId": "operator:particle.particle_edit_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01813", + "gapId": "operator:particle.particle_system_remove_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01814", + "gapId": "operator:particle.rekey", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01815", + "gapId": "operator:particle.remove_doubles", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01816", + "gapId": "operator:particle.reveal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01817", + "gapId": "operator:particle.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01818", + "gapId": "operator:particle.select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01819", + "gapId": "operator:particle.select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01820", + "gapId": "operator:particle.select_linked_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01821", + "gapId": "operator:particle.select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01822", + "gapId": "operator:particle.select_random", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01823", + "gapId": "operator:particle.select_roots", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01824", + "gapId": "operator:particle.select_tips", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01825", + "gapId": "operator:particle.shape_cut", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01826", + "gapId": "operator:particle.subdivide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01827", + "gapId": "operator:particle.target_move_down", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01828", + "gapId": "operator:particle.target_move_up", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01829", + "gapId": "operator:particle.target_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01830", + "gapId": "operator:particle.unify_length", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01831", + "gapId": "operator:particle.weight_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01832", + "gapId": "operator:pointcloud.attribute_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01833", + "gapId": "operator:pointcloud.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01834", + "gapId": "operator:pointcloud.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01835", + "gapId": "operator:pointcloud.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01836", + "gapId": "operator:pointcloud.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01837", + "gapId": "operator:pointcloud.select_random", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01838", + "gapId": "operator:pointcloud.separate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01839", + "gapId": "operator:pose.armature_apply", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01840", + "gapId": "operator:pose.autoside_names", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01841", + "gapId": "operator:pose.blend_to_neighbor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01842", + "gapId": "operator:pose.blend_with_rest", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01843", + "gapId": "operator:pose.breakdown", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01844", + "gapId": "operator:pose.constraint_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01845", + "gapId": "operator:pose.constraint_add_with_targets", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01846", + "gapId": "operator:pose.constraints_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01847", + "gapId": "operator:pose.constraints_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01848", + "gapId": "operator:pose.copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01849", + "gapId": "operator:pose.flip_names", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01850", + "gapId": "operator:pose.hide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01851", + "gapId": "operator:pose.ik_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01852", + "gapId": "operator:pose.ik_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01853", + "gapId": "operator:pose.loc_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01854", + "gapId": "operator:pose.paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01855", + "gapId": "operator:pose.paths_calculate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01856", + "gapId": "operator:pose.paths_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01857", + "gapId": "operator:pose.paths_range_update", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01858", + "gapId": "operator:pose.paths_update", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01859", + "gapId": "operator:pose.propagate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01860", + "gapId": "operator:pose.push", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01861", + "gapId": "operator:pose.quaternions_flip", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01862", + "gapId": "operator:pose.relax", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01863", + "gapId": "operator:pose.reveal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01864", + "gapId": "operator:pose.rot_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01865", + "gapId": "operator:pose.rotation_mode_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01866", + "gapId": "operator:pose.scale_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01867", + "gapId": "operator:pose.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01868", + "gapId": "operator:pose.select_constraint_target", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01869", + "gapId": "operator:pose.select_grouped", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01870", + "gapId": "operator:pose.select_hierarchy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01871", + "gapId": "operator:pose.select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01872", + "gapId": "operator:pose.select_linked_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01873", + "gapId": "operator:pose.select_mirror", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01874", + "gapId": "operator:pose.select_parent", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01875", + "gapId": "operator:pose.selection_set_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01876", + "gapId": "operator:pose.selection_set_add_and_assign", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01877", + "gapId": "operator:pose.selection_set_assign", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01878", + "gapId": "operator:pose.selection_set_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01879", + "gapId": "operator:pose.selection_set_delete_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01880", + "gapId": "operator:pose.selection_set_deselect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01881", + "gapId": "operator:pose.selection_set_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01882", + "gapId": "operator:pose.selection_set_paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01883", + "gapId": "operator:pose.selection_set_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01884", + "gapId": "operator:pose.selection_set_remove_bones", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01885", + "gapId": "operator:pose.selection_set_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01886", + "gapId": "operator:pose.selection_set_unassign", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01887", + "gapId": "operator:pose.transforms_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01888", + "gapId": "operator:pose.user_transforms_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01889", + "gapId": "operator:pose.visual_transform_apply", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01890", + "gapId": "operator:poselib.apply_pose_asset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01891", + "gapId": "operator:poselib.asset_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01892", + "gapId": "operator:poselib.asset_modify", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01893", + "gapId": "operator:poselib.blend_pose_asset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01894", + "gapId": "operator:poselib.copy_as_asset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01895", + "gapId": "operator:poselib.create_pose_asset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01896", + "gapId": "operator:poselib.paste_asset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01897", + "gapId": "operator:poselib.pose_asset_select_bones", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01898", + "gapId": "operator:poselib.restore_previous_action", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01899", + "gapId": "operator:preferences.addon_disable", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01900", + "gapId": "operator:preferences.addon_enable", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01901", + "gapId": "operator:preferences.addon_expand", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01902", + "gapId": "operator:preferences.addon_install", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01903", + "gapId": "operator:preferences.addon_refresh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01904", + "gapId": "operator:preferences.addon_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01905", + "gapId": "operator:preferences.addon_show", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01906", + "gapId": "operator:preferences.app_template_install", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01907", + "gapId": "operator:preferences.asset_library_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01908", + "gapId": "operator:preferences.asset_library_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01909", + "gapId": "operator:preferences.associate_blend", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01910", + "gapId": "operator:preferences.autoexec_path_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01911", + "gapId": "operator:preferences.autoexec_path_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01912", + "gapId": "operator:preferences.clear_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01913", + "gapId": "operator:preferences.copy_prev", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01914", + "gapId": "operator:preferences.extension_repo_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01915", + "gapId": "operator:preferences.extension_repo_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01916", + "gapId": "operator:preferences.extension_url_drop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01917", + "gapId": "operator:preferences.keyconfig_activate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01918", + "gapId": "operator:preferences.keyconfig_export", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01919", + "gapId": "operator:preferences.keyconfig_import", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01920", + "gapId": "operator:preferences.keyconfig_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01921", + "gapId": "operator:preferences.keyconfig_test", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01922", + "gapId": "operator:preferences.keyitem_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01923", + "gapId": "operator:preferences.keyitem_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01924", + "gapId": "operator:preferences.keyitem_restore", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01925", + "gapId": "operator:preferences.keymap_restore", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01926", + "gapId": "operator:preferences.reset_default_theme", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01927", + "gapId": "operator:preferences.script_directory_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01928", + "gapId": "operator:preferences.script_directory_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01929", + "gapId": "operator:preferences.start_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01930", + "gapId": "operator:preferences.studiolight_copy_settings", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01931", + "gapId": "operator:preferences.studiolight_install", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01932", + "gapId": "operator:preferences.studiolight_new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01933", + "gapId": "operator:preferences.studiolight_uninstall", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01934", + "gapId": "operator:preferences.theme_install", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01935", + "gapId": "operator:preferences.unassociate_blend", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01936", + "gapId": "operator:ptcache.add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01937", + "gapId": "operator:ptcache.bake", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01938", + "gapId": "operator:ptcache.bake_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01939", + "gapId": "operator:ptcache.bake_from_cache", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01940", + "gapId": "operator:ptcache.free_bake", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01941", + "gapId": "operator:ptcache.free_bake_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01942", + "gapId": "operator:ptcache.remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01943", + "gapId": "operator:render.clear_texture_cache", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01944", + "gapId": "operator:render.color_management_white_balance_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01945", + "gapId": "operator:render.cycles_integrator_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01946", + "gapId": "operator:render.cycles_performance_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01947", + "gapId": "operator:render.cycles_sampling_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01948", + "gapId": "operator:render.cycles_viewport_sampling_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01949", + "gapId": "operator:render.eevee_raytracing_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01950", + "gapId": "operator:render.generate_texture_cache", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01951", + "gapId": "operator:render.opengl", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01952", + "gapId": "operator:render.play_rendered_anim", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01953", + "gapId": "operator:render.preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01954", + "gapId": "operator:render.render", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01955", + "gapId": "operator:render.shutter_curve_preset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01956", + "gapId": "operator:render.swap_dimensions", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01957", + "gapId": "operator:render.view_cancel", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01958", + "gapId": "operator:render.view_show", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01959", + "gapId": "operator:rigidbody.bake_to_keyframes", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01960", + "gapId": "operator:rigidbody.connect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01961", + "gapId": "operator:rigidbody.constraint_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01962", + "gapId": "operator:rigidbody.constraint_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01963", + "gapId": "operator:rigidbody.mass_calculate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01964", + "gapId": "operator:rigidbody.object_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01965", + "gapId": "operator:rigidbody.object_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01966", + "gapId": "operator:rigidbody.object_settings_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01967", + "gapId": "operator:rigidbody.objects_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01968", + "gapId": "operator:rigidbody.objects_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01969", + "gapId": "operator:rigidbody.shape_change", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01970", + "gapId": "operator:rigidbody.world_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01971", + "gapId": "operator:rigidbody.world_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01972", + "gapId": "operator:scene.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01973", + "gapId": "operator:scene.drop_scene_asset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01974", + "gapId": "operator:scene.freestyle_add_edge_marks_to_keying_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01975", + "gapId": "operator:scene.freestyle_add_face_marks_to_keying_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01976", + "gapId": "operator:scene.freestyle_alpha_modifier_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01977", + "gapId": "operator:scene.freestyle_color_modifier_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01978", + "gapId": "operator:scene.freestyle_fill_range_by_selection", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01979", + "gapId": "operator:scene.freestyle_geometry_modifier_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01980", + "gapId": "operator:scene.freestyle_lineset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01981", + "gapId": "operator:scene.freestyle_lineset_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01982", + "gapId": "operator:scene.freestyle_lineset_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01983", + "gapId": "operator:scene.freestyle_lineset_paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01984", + "gapId": "operator:scene.freestyle_lineset_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01985", + "gapId": "operator:scene.freestyle_linestyle_new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01986", + "gapId": "operator:scene.freestyle_modifier_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01987", + "gapId": "operator:scene.freestyle_modifier_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01988", + "gapId": "operator:scene.freestyle_modifier_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01989", + "gapId": "operator:scene.freestyle_module_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01990", + "gapId": "operator:scene.freestyle_module_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01991", + "gapId": "operator:scene.freestyle_module_open", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01992", + "gapId": "operator:scene.freestyle_module_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01993", + "gapId": "operator:scene.freestyle_stroke_material_create", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01994", + "gapId": "operator:scene.freestyle_thickness_modifier_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01995", + "gapId": "operator:scene.gltf2_action_filter_refresh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01996", + "gapId": "operator:scene.gpencil_brush_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01997", + "gapId": "operator:scene.gpencil_material_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01998", + "gapId": "operator:scene.new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01999", + "gapId": "operator:scene.new_sequencer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02000", + "gapId": "operator:scene.new_sequencer_scene", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02001", + "gapId": "operator:scene.render_view_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02002", + "gapId": "operator:scene.render_view_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02003", + "gapId": "operator:scene.view_layer_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02004", + "gapId": "operator:scene.view_layer_add_aov", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02005", + "gapId": "operator:scene.view_layer_add_lightgroup", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02006", + "gapId": "operator:scene.view_layer_add_used_lightgroups", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02007", + "gapId": "operator:scene.view_layer_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02008", + "gapId": "operator:scene.view_layer_remove_aov", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02009", + "gapId": "operator:scene.view_layer_remove_lightgroup", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02010", + "gapId": "operator:scene.view_layer_remove_unused_lightgroups", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02011", + "gapId": "operator:screen.actionzone", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02012", + "gapId": "operator:screen.animation_cancel", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02013", + "gapId": "operator:screen.animation_pause", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02014", + "gapId": "operator:screen.animation_play", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02015", + "gapId": "operator:screen.animation_step", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02016", + "gapId": "operator:screen.area_close", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02017", + "gapId": "operator:screen.area_dupli", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02018", + "gapId": "operator:screen.area_join", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02019", + "gapId": "operator:screen.area_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02020", + "gapId": "operator:screen.area_options", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02021", + "gapId": "operator:screen.area_split", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02022", + "gapId": "operator:screen.area_swap", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02023", + "gapId": "operator:screen.back_to_previous", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02024", + "gapId": "operator:screen.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02025", + "gapId": "operator:screen.drivers_editor_show", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02026", + "gapId": "operator:screen.edge_merge", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02027", + "gapId": "operator:screen.frame_jump", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02028", + "gapId": "operator:screen.frame_offset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02029", + "gapId": "operator:screen.header_toggle_menus", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02030", + "gapId": "operator:screen.info_log_show", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02031", + "gapId": "operator:screen.keyframe_jump", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02032", + "gapId": "operator:screen.marker_jump", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02033", + "gapId": "operator:screen.new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02034", + "gapId": "operator:screen.quadview_size", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02035", + "gapId": "operator:screen.redo_last", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02036", + "gapId": "operator:screen.region_blend", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02037", + "gapId": "operator:screen.region_context_menu", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02038", + "gapId": "operator:screen.region_flip", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02039", + "gapId": "operator:screen.region_quadview", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02040", + "gapId": "operator:screen.region_scale", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02041", + "gapId": "operator:screen.region_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02042", + "gapId": "operator:screen.repeat_history", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02043", + "gapId": "operator:screen.repeat_last", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02044", + "gapId": "operator:screen.screen_full_area", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02045", + "gapId": "operator:screen.screen_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02046", + "gapId": "operator:screen.screenshot", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02047", + "gapId": "operator:screen.screenshot_area", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02048", + "gapId": "operator:screen.space_context_cycle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02049", + "gapId": "operator:screen.space_type_set_or_cycle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02050", + "gapId": "operator:screen.spacedata_cleanup", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02051", + "gapId": "operator:screen.time_jump", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02052", + "gapId": "operator:screen.userpref_show", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02053", + "gapId": "operator:screen.workspace_cycle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02054", + "gapId": "operator:script.execute_preset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02055", + "gapId": "operator:script.python_file_run", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02056", + "gapId": "operator:script.reload", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02057", + "gapId": "operator:sculpt.brush_stroke", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02058", + "gapId": "operator:sculpt.cloth_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02059", + "gapId": "operator:sculpt.color_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02060", + "gapId": "operator:sculpt.detail_flood_fill", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02061", + "gapId": "operator:sculpt.dynamic_topology_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02062", + "gapId": "operator:sculpt.dyntopo_detail_size_edit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02063", + "gapId": "operator:sculpt.expand", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02064", + "gapId": "operator:sculpt.face_set_box_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02065", + "gapId": "operator:sculpt.face_set_change_visibility", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02066", + "gapId": "operator:sculpt.face_set_edit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02067", + "gapId": "operator:sculpt.face_set_extract", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02068", + "gapId": "operator:sculpt.face_set_lasso_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02069", + "gapId": "operator:sculpt.face_set_line_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02070", + "gapId": "operator:sculpt.face_set_polyline_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02071", + "gapId": "operator:sculpt.face_sets_create", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02072", + "gapId": "operator:sculpt.face_sets_init", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02073", + "gapId": "operator:sculpt.face_sets_randomize_colors", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02074", + "gapId": "operator:sculpt.mask_by_color", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02075", + "gapId": "operator:sculpt.mask_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02076", + "gapId": "operator:sculpt.mask_from_boundary", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02077", + "gapId": "operator:sculpt.mask_from_cavity", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02078", + "gapId": "operator:sculpt.mask_init", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02079", + "gapId": "operator:sculpt.mesh_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02080", + "gapId": "operator:sculpt.optimize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02081", + "gapId": "operator:sculpt.paint_mask_extract", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02082", + "gapId": "operator:sculpt.paint_mask_slice", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02083", + "gapId": "operator:sculpt.project_line_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02084", + "gapId": "operator:sculpt.sample_detail_size", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02085", + "gapId": "operator:sculpt.sculptmode_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02086", + "gapId": "operator:sculpt.set_persistent_base", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02087", + "gapId": "operator:sculpt.set_pivot_position", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02088", + "gapId": "operator:sculpt.symmetrize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02089", + "gapId": "operator:sculpt.trim_box_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02090", + "gapId": "operator:sculpt.trim_lasso_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02091", + "gapId": "operator:sculpt.trim_line_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02092", + "gapId": "operator:sculpt.trim_polyline_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02093", + "gapId": "operator:sculpt.uv_sculpt_grab", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02094", + "gapId": "operator:sculpt.uv_sculpt_pinch", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02095", + "gapId": "operator:sculpt.uv_sculpt_relax", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02096", + "gapId": "operator:sculpt_curves.brush_stroke", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02097", + "gapId": "operator:sculpt_curves.min_distance_edit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02098", + "gapId": "operator:sculpt_curves.select_grow", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02099", + "gapId": "operator:sculpt_curves.select_random", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02100", + "gapId": "operator:sequencer.add_scene_strip_from_scene_asset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02101", + "gapId": "operator:sequencer.box_blade", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02102", + "gapId": "operator:sequencer.change_effect_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02103", + "gapId": "operator:sequencer.change_path", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02104", + "gapId": "operator:sequencer.change_scene", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02105", + "gapId": "operator:sequencer.connect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02106", + "gapId": "operator:sequencer.copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02107", + "gapId": "operator:sequencer.crossfade_sounds", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02108", + "gapId": "operator:sequencer.cursor_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02109", + "gapId": "operator:sequencer.deinterlace_selected_movies", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02110", + "gapId": "operator:sequencer.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02111", + "gapId": "operator:sequencer.disconnect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02112", + "gapId": "operator:sequencer.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02113", + "gapId": "operator:sequencer.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02114", + "gapId": "operator:sequencer.duplicate_move_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02115", + "gapId": "operator:sequencer.effect_strip_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02116", + "gapId": "operator:sequencer.enable_proxies", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02117", + "gapId": "operator:sequencer.export_subtitles", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02118", + "gapId": "operator:sequencer.fades_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02119", + "gapId": "operator:sequencer.fades_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02120", + "gapId": "operator:sequencer.gap_insert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02121", + "gapId": "operator:sequencer.gap_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02122", + "gapId": "operator:sequencer.image_strip_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02123", + "gapId": "operator:sequencer.images_separate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02124", + "gapId": "operator:sequencer.lock", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02125", + "gapId": "operator:sequencer.mask_strip_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02126", + "gapId": "operator:sequencer.meta_make", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02127", + "gapId": "operator:sequencer.meta_separate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02128", + "gapId": "operator:sequencer.meta_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02129", + "gapId": "operator:sequencer.movie_strip_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02130", + "gapId": "operator:sequencer.movieclip_strip_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02131", + "gapId": "operator:sequencer.mute", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02132", + "gapId": "operator:sequencer.offset_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02133", + "gapId": "operator:sequencer.paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02134", + "gapId": "operator:sequencer.preview_duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02135", + "gapId": "operator:sequencer.preview_duplicate_move_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02136", + "gapId": "operator:sequencer.reassign_inputs", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02137", + "gapId": "operator:sequencer.rebuild_proxy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02138", + "gapId": "operator:sequencer.refresh_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02139", + "gapId": "operator:sequencer.reload", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02140", + "gapId": "operator:sequencer.rename_channel", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02141", + "gapId": "operator:sequencer.rendersize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02142", + "gapId": "operator:sequencer.retiming_add_freeze_frame_slide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02143", + "gapId": "operator:sequencer.retiming_add_transition_slide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02144", + "gapId": "operator:sequencer.retiming_freeze_frame_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02145", + "gapId": "operator:sequencer.retiming_key_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02146", + "gapId": "operator:sequencer.retiming_key_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02147", + "gapId": "operator:sequencer.retiming_reset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02148", + "gapId": "operator:sequencer.retiming_segment_speed_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02149", + "gapId": "operator:sequencer.retiming_show", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02150", + "gapId": "operator:sequencer.retiming_transition_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02151", + "gapId": "operator:sequencer.sample", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02152", + "gapId": "operator:sequencer.scene_frame_range_update", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02153", + "gapId": "operator:sequencer.scene_strip_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02154", + "gapId": "operator:sequencer.scene_strip_add_new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02155", + "gapId": "operator:sequencer.select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02156", + "gapId": "operator:sequencer.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02157", + "gapId": "operator:sequencer.select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02158", + "gapId": "operator:sequencer.select_circle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02159", + "gapId": "operator:sequencer.select_grouped", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02160", + "gapId": "operator:sequencer.select_handle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02161", + "gapId": "operator:sequencer.select_handles", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02162", + "gapId": "operator:sequencer.select_lasso", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02163", + "gapId": "operator:sequencer.select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02164", + "gapId": "operator:sequencer.select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02165", + "gapId": "operator:sequencer.select_linked_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02166", + "gapId": "operator:sequencer.select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02167", + "gapId": "operator:sequencer.select_side", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02168", + "gapId": "operator:sequencer.select_side_of_frame", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02169", + "gapId": "operator:sequencer.set_range_to_strips", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02170", + "gapId": "operator:sequencer.slip", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02171", + "gapId": "operator:sequencer.snap", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02172", + "gapId": "operator:sequencer.sound_strip_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02173", + "gapId": "operator:sequencer.split", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02174", + "gapId": "operator:sequencer.split_multicam", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02175", + "gapId": "operator:sequencer.strip_color_tag_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02176", + "gapId": "operator:sequencer.strip_jump", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02177", + "gapId": "operator:sequencer.strip_modifier_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02178", + "gapId": "operator:sequencer.strip_modifier_add_node_group", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02179", + "gapId": "operator:sequencer.strip_modifier_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02180", + "gapId": "operator:sequencer.strip_modifier_duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02181", + "gapId": "operator:sequencer.strip_modifier_equalizer_redefine", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02182", + "gapId": "operator:sequencer.strip_modifier_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02183", + "gapId": "operator:sequencer.strip_modifier_move_to_index", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02184", + "gapId": "operator:sequencer.strip_modifier_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02185", + "gapId": "operator:sequencer.strip_modifier_set_active", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02186", + "gapId": "operator:sequencer.strip_transform_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02187", + "gapId": "operator:sequencer.strip_transform_fit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02188", + "gapId": "operator:sequencer.swap", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02189", + "gapId": "operator:sequencer.swap_data", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02190", + "gapId": "operator:sequencer.swap_inputs", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02191", + "gapId": "operator:sequencer.text_cursor_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02192", + "gapId": "operator:sequencer.text_cursor_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02193", + "gapId": "operator:sequencer.text_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02194", + "gapId": "operator:sequencer.text_deselect_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02195", + "gapId": "operator:sequencer.text_edit_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02196", + "gapId": "operator:sequencer.text_edit_cut", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02197", + "gapId": "operator:sequencer.text_edit_mode_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02198", + "gapId": "operator:sequencer.text_edit_paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02199", + "gapId": "operator:sequencer.text_insert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02200", + "gapId": "operator:sequencer.text_line_break", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02201", + "gapId": "operator:sequencer.text_select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02202", + "gapId": "operator:sequencer.text_strip_style_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02203", + "gapId": "operator:sequencer.unlock", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02204", + "gapId": "operator:sequencer.unmute", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02205", + "gapId": "operator:sequencer.view_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02206", + "gapId": "operator:sequencer.view_all_preview", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02207", + "gapId": "operator:sequencer.view_frame", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02208", + "gapId": "operator:sequencer.view_ghost_border", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02209", + "gapId": "operator:sequencer.view_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02210", + "gapId": "operator:sequencer.view_zoom_ratio", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02211", + "gapId": "operator:sound.bake_animation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02212", + "gapId": "operator:sound.mixdown", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02213", + "gapId": "operator:sound.open", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02214", + "gapId": "operator:sound.open_mono", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02215", + "gapId": "operator:sound.pack", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02216", + "gapId": "operator:sound.unpack", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02217", + "gapId": "operator:sound.update_animation_flags", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02218", + "gapId": "operator:spreadsheet.add_row_filter_rule", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02219", + "gapId": "operator:spreadsheet.change_spreadsheet_data_source", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02220", + "gapId": "operator:spreadsheet.fit_column", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02221", + "gapId": "operator:spreadsheet.remove_row_filter_rule", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02222", + "gapId": "operator:spreadsheet.reorder_columns", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02223", + "gapId": "operator:spreadsheet.resize_column", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02224", + "gapId": "operator:spreadsheet.toggle_pin", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02225", + "gapId": "operator:surface.primitive_nurbs_surface_circle_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02226", + "gapId": "operator:surface.primitive_nurbs_surface_curve_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02227", + "gapId": "operator:surface.primitive_nurbs_surface_cylinder_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02228", + "gapId": "operator:surface.primitive_nurbs_surface_sphere_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02229", + "gapId": "operator:surface.primitive_nurbs_surface_surface_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02230", + "gapId": "operator:surface.primitive_nurbs_surface_torus_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02231", + "gapId": "operator:text.autocomplete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02232", + "gapId": "operator:text.comment_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02233", + "gapId": "operator:text.convert_whitespace", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02234", + "gapId": "operator:text.copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02235", + "gapId": "operator:text.cursor_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02236", + "gapId": "operator:text.cut", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02237", + "gapId": "operator:text.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02238", + "gapId": "operator:text.duplicate_line", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02239", + "gapId": "operator:text.find", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02240", + "gapId": "operator:text.find_set_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02241", + "gapId": "operator:text.indent", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02242", + "gapId": "operator:text.indent_or_autocomplete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02243", + "gapId": "operator:text.insert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02244", + "gapId": "operator:text.jump", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02245", + "gapId": "operator:text.jump_to_file_at_point", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02246", + "gapId": "operator:text.line_break", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02247", + "gapId": "operator:text.line_number", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02248", + "gapId": "operator:text.make_internal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02249", + "gapId": "operator:text.move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02250", + "gapId": "operator:text.move_lines", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02251", + "gapId": "operator:text.move_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02252", + "gapId": "operator:text.new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02253", + "gapId": "operator:text.open", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02254", + "gapId": "operator:text.overwrite_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02255", + "gapId": "operator:text.paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02256", + "gapId": "operator:text.reload", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02257", + "gapId": "operator:text.replace", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02258", + "gapId": "operator:text.replace_set_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02259", + "gapId": "operator:text.resolve_conflict", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02260", + "gapId": "operator:text.run_script", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02261", + "gapId": "operator:text.save", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02262", + "gapId": "operator:text.save_as", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02263", + "gapId": "operator:text.scroll", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02264", + "gapId": "operator:text.scroll_bar", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02265", + "gapId": "operator:text.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02266", + "gapId": "operator:text.select_line", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02267", + "gapId": "operator:text.select_word", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02268", + "gapId": "operator:text.selection_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02269", + "gapId": "operator:text.start_find", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02270", + "gapId": "operator:text.to_3d_object", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02271", + "gapId": "operator:text.unindent", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02272", + "gapId": "operator:text.unlink", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02273", + "gapId": "operator:text.update_shader", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02274", + "gapId": "operator:text_editor.preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02275", + "gapId": "operator:texture.new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02276", + "gapId": "operator:texture.slot_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02277", + "gapId": "operator:texture.slot_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02278", + "gapId": "operator:texture.slot_paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02279", + "gapId": "operator:transform.bbone_resize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02280", + "gapId": "operator:transform.bend", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02281", + "gapId": "operator:transform.create_orientation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02282", + "gapId": "operator:transform.delete_orientation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02283", + "gapId": "operator:transform.edge_bevelweight", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02284", + "gapId": "operator:transform.edge_crease", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02285", + "gapId": "operator:transform.edge_slide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02286", + "gapId": "operator:transform.from_gizmo", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02287", + "gapId": "operator:transform.mirror", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02288", + "gapId": "operator:transform.push_pull", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02289", + "gapId": "operator:transform.resize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02290", + "gapId": "operator:transform.rotate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02291", + "gapId": "operator:transform.rotate_normal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02292", + "gapId": "operator:transform.select_orientation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02293", + "gapId": "operator:transform.seq_slide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02294", + "gapId": "operator:transform.shear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02295", + "gapId": "operator:transform.shrink_fatten", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02296", + "gapId": "operator:transform.skin_resize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02297", + "gapId": "operator:transform.tilt", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02298", + "gapId": "operator:transform.tosphere", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02299", + "gapId": "operator:transform.trackball", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02300", + "gapId": "operator:transform.transform", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02301", + "gapId": "operator:transform.translate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02302", + "gapId": "operator:transform.vert_crease", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02303", + "gapId": "operator:transform.vert_slide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02304", + "gapId": "operator:transform.vertex_random", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02305", + "gapId": "operator:transform.vertex_warp", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02306", + "gapId": "operator:ui.assign_default_button", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02307", + "gapId": "operator:ui.button_execute", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02308", + "gapId": "operator:ui.button_string_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02309", + "gapId": "operator:ui.copy_as_driver_button", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02310", + "gapId": "operator:ui.copy_data_path_button", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02311", + "gapId": "operator:ui.copy_driver_to_selected_button", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02312", + "gapId": "operator:ui.copy_python_command_button", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02313", + "gapId": "operator:ui.copy_to_selected_button", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02314", + "gapId": "operator:ui.drop_color", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02315", + "gapId": "operator:ui.drop_material", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02316", + "gapId": "operator:ui.drop_name", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02317", + "gapId": "operator:ui.editsource", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02318", + "gapId": "operator:ui.eyedropper_bone", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02319", + "gapId": "operator:ui.eyedropper_color", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02320", + "gapId": "operator:ui.eyedropper_colorramp", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02321", + "gapId": "operator:ui.eyedropper_colorramp_point", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02322", + "gapId": "operator:ui.eyedropper_depth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02323", + "gapId": "operator:ui.eyedropper_driver", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02324", + "gapId": "operator:ui.eyedropper_grease_pencil_color", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02325", + "gapId": "operator:ui.eyedropper_id", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02326", + "gapId": "operator:ui.jump_to_target_button", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02327", + "gapId": "operator:ui.list_start_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02328", + "gapId": "operator:ui.override_add_button", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02329", + "gapId": "operator:ui.override_idtemplate_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02330", + "gapId": "operator:ui.override_idtemplate_make", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02331", + "gapId": "operator:ui.override_idtemplate_reset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02332", + "gapId": "operator:ui.override_remove_button", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02333", + "gapId": "operator:ui.reloadtranslation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02334", + "gapId": "operator:ui.reset_default_button", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02335", + "gapId": "operator:ui.unset_property_button", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02336", + "gapId": "operator:ui.view_drop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02337", + "gapId": "operator:ui.view_item_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02338", + "gapId": "operator:ui.view_item_focus", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02339", + "gapId": "operator:ui.view_item_navigate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02340", + "gapId": "operator:ui.view_item_rename", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02341", + "gapId": "operator:ui.view_item_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02342", + "gapId": "operator:ui.view_scroll", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02343", + "gapId": "operator:ui.view_start_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02344", + "gapId": "operator:uilist.entry_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02345", + "gapId": "operator:uilist.entry_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02346", + "gapId": "operator:uilist.entry_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02347", + "gapId": "operator:uv.align", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02348", + "gapId": "operator:uv.align_rotation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02349", + "gapId": "operator:uv.arrange_islands", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02350", + "gapId": "operator:uv.average_islands_scale", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02351", + "gapId": "operator:uv.copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02352", + "gapId": "operator:uv.copy_mirrored_faces", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02353", + "gapId": "operator:uv.cube_project", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02354", + "gapId": "operator:uv.cursor_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02355", + "gapId": "operator:uv.custom_region_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02356", + "gapId": "operator:uv.cylinder_project", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02357", + "gapId": "operator:uv.export_layout", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02358", + "gapId": "operator:uv.follow_active_quads", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02359", + "gapId": "operator:uv.hide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02360", + "gapId": "operator:uv.lightmap_pack", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02361", + "gapId": "operator:uv.mark_seam", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02362", + "gapId": "operator:uv.minimize_stretch", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02363", + "gapId": "operator:uv.move_on_axis", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02364", + "gapId": "operator:uv.pack_islands", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02365", + "gapId": "operator:uv.paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02366", + "gapId": "operator:uv.pin", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02367", + "gapId": "operator:uv.project_from_view", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02368", + "gapId": "operator:uv.randomize_uv_transform", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02369", + "gapId": "operator:uv.remove_doubles", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02370", + "gapId": "operator:uv.reset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02371", + "gapId": "operator:uv.reveal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02372", + "gapId": "operator:uv.rip", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02373", + "gapId": "operator:uv.rip_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02374", + "gapId": "operator:uv.seams_from_islands", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02375", + "gapId": "operator:uv.select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02376", + "gapId": "operator:uv.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02377", + "gapId": "operator:uv.select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02378", + "gapId": "operator:uv.select_by_winding", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02379", + "gapId": "operator:uv.select_circle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02380", + "gapId": "operator:uv.select_edge_ring", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02381", + "gapId": "operator:uv.select_lasso", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02382", + "gapId": "operator:uv.select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02383", + "gapId": "operator:uv.select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02384", + "gapId": "operator:uv.select_linked_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02385", + "gapId": "operator:uv.select_loop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02386", + "gapId": "operator:uv.select_mode", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02387", + "gapId": "operator:uv.select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02388", + "gapId": "operator:uv.select_overlap", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02389", + "gapId": "operator:uv.select_pinned", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02390", + "gapId": "operator:uv.select_similar", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02391", + "gapId": "operator:uv.select_split", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02392", + "gapId": "operator:uv.select_tile", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02393", + "gapId": "operator:uv.shortest_path_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02394", + "gapId": "operator:uv.shortest_path_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02395", + "gapId": "operator:uv.smart_project", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02396", + "gapId": "operator:uv.snap_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02397", + "gapId": "operator:uv.snap_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02398", + "gapId": "operator:uv.sphere_project", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02399", + "gapId": "operator:uv.stitch", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02400", + "gapId": "operator:uv.unwrap", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02401", + "gapId": "operator:uv.weld", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02402", + "gapId": "operator:view2d.edge_pan", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02403", + "gapId": "operator:view2d.ndof", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02404", + "gapId": "operator:view2d.pan", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02405", + "gapId": "operator:view2d.reset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02406", + "gapId": "operator:view2d.scroll_down", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02407", + "gapId": "operator:view2d.scroll_left", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02408", + "gapId": "operator:view2d.scroll_right", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02409", + "gapId": "operator:view2d.scroll_up", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02410", + "gapId": "operator:view2d.scroller_activate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02411", + "gapId": "operator:view2d.smoothview", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02412", + "gapId": "operator:view2d.zoom", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02413", + "gapId": "operator:view2d.zoom_border", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02414", + "gapId": "operator:view2d.zoom_in", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02415", + "gapId": "operator:view2d.zoom_out", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02416", + "gapId": "operator:view3d.bone_select_menu", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02417", + "gapId": "operator:view3d.camera_background_image_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02418", + "gapId": "operator:view3d.camera_background_image_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02419", + "gapId": "operator:view3d.camera_to_view", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02420", + "gapId": "operator:view3d.camera_to_view_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02421", + "gapId": "operator:view3d.clear_render_border", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02422", + "gapId": "operator:view3d.clip_border", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02423", + "gapId": "operator:view3d.copybuffer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02424", + "gapId": "operator:view3d.cursor3d", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02425", + "gapId": "operator:view3d.dolly", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02426", + "gapId": "operator:view3d.drop_world", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02427", + "gapId": "operator:view3d.edit_mesh_extrude_individual_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02428", + "gapId": "operator:view3d.edit_mesh_extrude_manifold_normal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02429", + "gapId": "operator:view3d.edit_mesh_extrude_move_normal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02430", + "gapId": "operator:view3d.edit_mesh_extrude_move_shrink_fatten", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02431", + "gapId": "operator:view3d.fly", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02432", + "gapId": "operator:view3d.interactive_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02433", + "gapId": "operator:view3d.localview", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02434", + "gapId": "operator:view3d.localview_remove_from", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02435", + "gapId": "operator:view3d.move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02436", + "gapId": "operator:view3d.navigate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02437", + "gapId": "operator:view3d.ndof_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02438", + "gapId": "operator:view3d.ndof_orbit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02439", + "gapId": "operator:view3d.ndof_orbit_zoom", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02440", + "gapId": "operator:view3d.ndof_pan", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02441", + "gapId": "operator:view3d.object_as_camera", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02442", + "gapId": "operator:view3d.object_mode_pie_or_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02443", + "gapId": "operator:view3d.pastebuffer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02444", + "gapId": "operator:view3d.render_border", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02445", + "gapId": "operator:view3d.rotate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02446", + "gapId": "operator:view3d.ruler_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02447", + "gapId": "operator:view3d.ruler_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02448", + "gapId": "operator:view3d.select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02449", + "gapId": "operator:view3d.select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02450", + "gapId": "operator:view3d.select_circle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02451", + "gapId": "operator:view3d.select_lasso", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02452", + "gapId": "operator:view3d.select_menu", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02453", + "gapId": "operator:view3d.smoothview", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02454", + "gapId": "operator:view3d.snap_cursor_to_active", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02455", + "gapId": "operator:view3d.snap_cursor_to_center", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02456", + "gapId": "operator:view3d.snap_cursor_to_grid", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02457", + "gapId": "operator:view3d.snap_cursor_to_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02458", + "gapId": "operator:view3d.snap_selected_to_active", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02459", + "gapId": "operator:view3d.snap_selected_to_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02460", + "gapId": "operator:view3d.snap_selected_to_grid", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02461", + "gapId": "operator:view3d.toggle_matcap_flip", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02462", + "gapId": "operator:view3d.toggle_shading", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02463", + "gapId": "operator:view3d.toggle_xray", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02464", + "gapId": "operator:view3d.transform_gizmo_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02465", + "gapId": "operator:view3d.view_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02466", + "gapId": "operator:view3d.view_axis", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02467", + "gapId": "operator:view3d.view_camera", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02468", + "gapId": "operator:view3d.view_center_camera", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02469", + "gapId": "operator:view3d.view_center_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02470", + "gapId": "operator:view3d.view_center_lock", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02471", + "gapId": "operator:view3d.view_center_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02472", + "gapId": "operator:view3d.view_lock_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02473", + "gapId": "operator:view3d.view_lock_to_active", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02474", + "gapId": "operator:view3d.view_orbit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02475", + "gapId": "operator:view3d.view_pan", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02476", + "gapId": "operator:view3d.view_persportho", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02477", + "gapId": "operator:view3d.view_roll", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02478", + "gapId": "operator:view3d.view_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02479", + "gapId": "operator:view3d.walk", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02480", + "gapId": "operator:view3d.zoom", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02481", + "gapId": "operator:view3d.zoom_border", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02482", + "gapId": "operator:view3d.zoom_camera_1_to_1", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02483", + "gapId": "operator:wm.append", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02484", + "gapId": "operator:wm.batch_rename", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02485", + "gapId": "operator:wm.blend_strings_utf8_validate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02486", + "gapId": "operator:wm.call_asset_shelf_popover", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02487", + "gapId": "operator:wm.call_menu", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02488", + "gapId": "operator:wm.call_menu_pie", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02489", + "gapId": "operator:wm.call_panel", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02490", + "gapId": "operator:wm.clear_recent_files", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02491", + "gapId": "operator:wm.collection_export_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02492", + "gapId": "operator:wm.context_collection_boolean_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02493", + "gapId": "operator:wm.context_cycle_array", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02494", + "gapId": "operator:wm.context_cycle_enum", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02495", + "gapId": "operator:wm.context_cycle_int", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02496", + "gapId": "operator:wm.context_menu_enum", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02497", + "gapId": "operator:wm.context_modal_mouse", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02498", + "gapId": "operator:wm.context_pie_enum", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02499", + "gapId": "operator:wm.context_scale_float", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02500", + "gapId": "operator:wm.context_scale_int", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02501", + "gapId": "operator:wm.context_set_boolean", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02502", + "gapId": "operator:wm.context_set_enum", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02503", + "gapId": "operator:wm.context_set_float", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02504", + "gapId": "operator:wm.context_set_id", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02505", + "gapId": "operator:wm.context_set_int", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02506", + "gapId": "operator:wm.context_set_string", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02507", + "gapId": "operator:wm.context_set_value", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02508", + "gapId": "operator:wm.context_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02509", + "gapId": "operator:wm.context_toggle_enum", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02510", + "gapId": "operator:wm.debug_menu", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02511", + "gapId": "operator:wm.doc_view", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02512", + "gapId": "operator:wm.doc_view_manual", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02513", + "gapId": "operator:wm.doc_view_manual_ui_context", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02514", + "gapId": "operator:wm.drop_blend_file", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02515", + "gapId": "operator:wm.drop_import_file", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02516", + "gapId": "operator:wm.fbx_import", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02517", + "gapId": "operator:wm.grease_pencil_export_svg", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02518", + "gapId": "operator:wm.grease_pencil_import_svg", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02519", + "gapId": "operator:wm.id_linked_relocate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02520", + "gapId": "operator:wm.interface_theme_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02521", + "gapId": "operator:wm.interface_theme_preset_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02522", + "gapId": "operator:wm.interface_theme_preset_save", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02523", + "gapId": "operator:wm.keyconfig_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02524", + "gapId": "operator:wm.keyconfig_preset_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02525", + "gapId": "operator:wm.lib_reload", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02526", + "gapId": "operator:wm.lib_relocate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02527", + "gapId": "operator:wm.link", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02528", + "gapId": "operator:wm.memory_statistics", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02529", + "gapId": "operator:wm.obj_export", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02530", + "gapId": "operator:wm.obj_import", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02531", + "gapId": "operator:wm.open_mainfile", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02532", + "gapId": "operator:wm.operator_cheat_sheet", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02533", + "gapId": "operator:wm.operator_defaults", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02534", + "gapId": "operator:wm.operator_pie_enum", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02535", + "gapId": "operator:wm.operator_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02536", + "gapId": "operator:wm.operator_presets_cleanup", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02537", + "gapId": "operator:wm.owner_disable", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02538", + "gapId": "operator:wm.owner_enable", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02539", + "gapId": "operator:wm.path_open", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02540", + "gapId": "operator:wm.ply_export", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02541", + "gapId": "operator:wm.ply_import", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02542", + "gapId": "operator:wm.previews_batch_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02543", + "gapId": "operator:wm.previews_batch_generate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02544", + "gapId": "operator:wm.previews_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02545", + "gapId": "operator:wm.previews_ensure", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02546", + "gapId": "operator:wm.properties_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02547", + "gapId": "operator:wm.properties_context_change", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02548", + "gapId": "operator:wm.properties_edit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02549", + "gapId": "operator:wm.properties_edit_value", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02550", + "gapId": "operator:wm.properties_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02551", + "gapId": "operator:wm.quit_blender", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02552", + "gapId": "operator:wm.radial_control", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02553", + "gapId": "operator:wm.read_factory_settings", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02554", + "gapId": "operator:wm.read_factory_userpref", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02555", + "gapId": "operator:wm.read_history", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02556", + "gapId": "operator:wm.read_homefile", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02557", + "gapId": "operator:wm.read_userpref", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02558", + "gapId": "operator:wm.recover_auto_save", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02559", + "gapId": "operator:wm.recover_last_session", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02560", + "gapId": "operator:wm.redraw_timer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02561", + "gapId": "operator:wm.revert_mainfile", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02562", + "gapId": "operator:wm.save_as_mainfile", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02563", + "gapId": "operator:wm.save_auto_save", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02564", + "gapId": "operator:wm.save_homefile", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02565", + "gapId": "operator:wm.save_mainfile", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02566", + "gapId": "operator:wm.save_userpref", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02567", + "gapId": "operator:wm.search_menu", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02568", + "gapId": "operator:wm.search_operator", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02569", + "gapId": "operator:wm.search_single_menu", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02570", + "gapId": "operator:wm.set_stereo_3d", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02571", + "gapId": "operator:wm.set_working_color_space", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02572", + "gapId": "operator:wm.splash", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02573", + "gapId": "operator:wm.splash_about", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02574", + "gapId": "operator:wm.stl_export", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02575", + "gapId": "operator:wm.stl_import", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02576", + "gapId": "operator:wm.sysinfo", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02577", + "gapId": "operator:wm.tool_set_by_brush_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02578", + "gapId": "operator:wm.tool_set_by_id", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02579", + "gapId": "operator:wm.tool_set_by_index", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02580", + "gapId": "operator:wm.toolbar", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02581", + "gapId": "operator:wm.toolbar_fallback_pie", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02582", + "gapId": "operator:wm.toolbar_prompt", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02583", + "gapId": "operator:wm.url_open", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02584", + "gapId": "operator:wm.url_open_preset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02585", + "gapId": "operator:wm.window_close", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02586", + "gapId": "operator:wm.window_fullscreen_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02587", + "gapId": "operator:wm.window_new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02588", + "gapId": "operator:wm.window_new_main", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02589", + "gapId": "operator:workspace.add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02590", + "gapId": "operator:workspace.append_activate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02591", + "gapId": "operator:workspace.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02592", + "gapId": "operator:workspace.delete_all_others", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02593", + "gapId": "operator:workspace.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02594", + "gapId": "operator:workspace.reorder_to_back", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02595", + "gapId": "operator:workspace.reorder_to_front", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02596", + "gapId": "operator:workspace.scene_pin_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02597", + "gapId": "operator:world.convert_volume_to_mesh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02598", + "gapId": "operator:world.new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02599", + "gapId": "rna:Main:BlendData", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02600", + "gapId": "rna:Main:BlendDataActions", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02601", + "gapId": "rna:Main:BlendDataAnnotations", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02602", + "gapId": "rna:Main:BlendDataArmatures", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02603", + "gapId": "rna:Main:BlendDataBrushes", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02604", + "gapId": "rna:Main:BlendDataCacheFiles", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02605", + "gapId": "rna:Main:BlendDataCameras", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02606", + "gapId": "rna:Main:BlendDataCollections", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02607", + "gapId": "rna:Main:BlendDataCurves", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02608", + "gapId": "rna:Main:BlendDataFonts", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02609", + "gapId": "rna:Main:BlendDataGreasePencilsV3", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02610", + "gapId": "rna:Main:BlendDataHairCurves", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02611", + "gapId": "rna:Main:BlendDataImages", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02612", + "gapId": "rna:Main:BlendDataLattices", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02613", + "gapId": "rna:Main:BlendDataLibraries", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02614", + "gapId": "rna:Main:BlendDataLights", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02615", + "gapId": "rna:Main:BlendDataLineStyles", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02616", + "gapId": "rna:Main:BlendDataMasks", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02617", + "gapId": "rna:Main:BlendDataMaterials", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02618", + "gapId": "rna:Main:BlendDataMeshes", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02619", + "gapId": "rna:Main:BlendDataMetaBalls", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02620", + "gapId": "rna:Main:BlendDataMovieClips", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02621", + "gapId": "rna:Main:BlendDataNodeTrees", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02622", + "gapId": "rna:Main:BlendDataObjects", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02623", + "gapId": "rna:Main:BlendDataPaintCurves", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02624", + "gapId": "rna:Main:BlendDataPalettes", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02625", + "gapId": "rna:Main:BlendDataParticles", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02626", + "gapId": "rna:Main:BlendDataPointClouds", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02627", + "gapId": "rna:Main:BlendDataProbes", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02628", + "gapId": "rna:Main:BlendDataScenes", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02629", + "gapId": "rna:Main:BlendDataScreens", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02630", + "gapId": "rna:Main:BlendDataSounds", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02631", + "gapId": "rna:Main:BlendDataSpeakers", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02632", + "gapId": "rna:Main:BlendDataTexts", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02633", + "gapId": "rna:Main:BlendDataTextures", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02634", + "gapId": "rna:Main:BlendDataVolumes", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02635", + "gapId": "rna:Main:BlendDataWindowManagers", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02636", + "gapId": "rna:Main:BlendDataWorkSpaces", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02637", + "gapId": "rna:Main:BlendDataWorlds", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02638", + "gapId": "rna:Mesh:Attribute", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02639", + "gapId": "rna:Mesh:AttributeGroupMesh", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02640", + "gapId": "rna:Mesh:BoolAttribute", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02641", + "gapId": "rna:Mesh:ByteColorAttribute", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02642", + "gapId": "rna:Mesh:FloatAttribute", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02643", + "gapId": "rna:Mesh:IntAttribute", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02644", + "gapId": "rna:Mesh:Mesh", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02645", + "gapId": "rna:Mesh:MeshAutomaskingSettings", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02646", + "gapId": "rna:Mesh:MeshCacheModifier", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02647", + "gapId": "rna:Mesh:MeshDeformModifier", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02648", + "gapId": "rna:Mesh:MeshEdge", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02649", + "gapId": "rna:Mesh:MeshEdges", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02650", + "gapId": "rna:Mesh:MeshLoop", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02651", + "gapId": "rna:Mesh:MeshLoopColor", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02652", + "gapId": "rna:Mesh:MeshLoopColorLayer", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02653", + "gapId": "rna:Mesh:MeshLoopTriangle", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02654", + "gapId": "rna:Mesh:MeshLoopTriangles", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02655", + "gapId": "rna:Mesh:MeshLoops", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02656", + "gapId": "rna:Mesh:MeshNormalValue", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02657", + "gapId": "rna:Mesh:MeshPolygon", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02658", + "gapId": "rna:Mesh:MeshPolygons", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02659", + "gapId": "rna:Mesh:MeshSequenceCacheModifier", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02660", + "gapId": "rna:Mesh:MeshSkinVertex", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02661", + "gapId": "rna:Mesh:MeshSkinVertexLayer", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02662", + "gapId": "rna:Mesh:MeshStatVis", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02663", + "gapId": "rna:Mesh:MeshToVolumeModifier", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02664", + "gapId": "rna:Mesh:MeshUVLoop", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02665", + "gapId": "rna:Mesh:MeshUVLoopLayer", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02666", + "gapId": "rna:Mesh:MeshVertex", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02667", + "gapId": "rna:Mesh:MeshVertices", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00001", + "gapId": "constraint:ACTION", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00002", + "gapId": "constraint:ARMATURE", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00003", + "gapId": "constraint:CAMERA_SOLVER", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00004", + "gapId": "constraint:CHILD_OF", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00005", + "gapId": "constraint:CLAMP_TO", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00006", + "gapId": "constraint:COPY_LOCATION", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00007", + "gapId": "constraint:COPY_ROTATION", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00008", + "gapId": "constraint:COPY_SCALE", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00009", + "gapId": "constraint:COPY_TRANSFORMS", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00010", + "gapId": "constraint:DAMPED_TRACK", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00011", + "gapId": "constraint:FLOOR", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00012", + "gapId": "constraint:FOLLOW_PATH", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00013", + "gapId": "constraint:FOLLOW_TRACK", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00014", + "gapId": "constraint:GEOMETRY_ATTRIBUTE", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00015", + "gapId": "constraint:IK", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00016", + "gapId": "constraint:LIMIT_DISTANCE", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00017", + "gapId": "constraint:LIMIT_LOCATION", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00018", + "gapId": "constraint:LIMIT_ROTATION", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00019", + "gapId": "constraint:LIMIT_SCALE", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00020", + "gapId": "constraint:LOCKED_TRACK", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00021", + "gapId": "constraint:MAINTAIN_VOLUME", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00022", + "gapId": "constraint:OBJECT_SOLVER", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00023", + "gapId": "constraint:PIVOT", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00024", + "gapId": "constraint:SHRINKWRAP", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00025", + "gapId": "constraint:SPLINE_IK", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00026", + "gapId": "constraint:STRETCH_TO", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00027", + "gapId": "constraint:TRACK_TO", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00028", + "gapId": "constraint:TRANSFORM", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00029", + "gapId": "constraint:TRANSFORM_CACHE", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00001", + "gapId": "node:Compositor:CompositorNodeAlphaOver", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00002", + "gapId": "node:Compositor:CompositorNodeAntiAliasing", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00003", + "gapId": "node:Compositor:CompositorNodeBilateralblur", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00004", + "gapId": "node:Compositor:CompositorNodeBlankImage", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00005", + "gapId": "node:Compositor:CompositorNodeBlur", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00006", + "gapId": "node:Compositor:CompositorNodeBokehBlur", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00007", + "gapId": "node:Compositor:CompositorNodeBokehImage", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00008", + "gapId": "node:Compositor:CompositorNodeBoxMask", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00009", + "gapId": "node:Compositor:CompositorNodeBrightContrast", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00010", + "gapId": "node:Compositor:CompositorNodeChannelMatte", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00011", + "gapId": "node:Compositor:CompositorNodeChromaMatte", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00012", + "gapId": "node:Compositor:CompositorNodeColorBalance", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00013", + "gapId": "node:Compositor:CompositorNodeColorCorrection", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00014", + "gapId": "node:Compositor:CompositorNodeColorMatte", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00015", + "gapId": "node:Compositor:CompositorNodeColorSpill", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00016", + "gapId": "node:Compositor:CompositorNodeCombineColor", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00017", + "gapId": "node:Compositor:CompositorNodeConvertColorSpace", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00018", + "gapId": "node:Compositor:CompositorNodeConvertToDisplay", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00019", + "gapId": "node:Compositor:CompositorNodeConvolve", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00020", + "gapId": "node:Compositor:CompositorNodeCornerPin", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00021", + "gapId": "node:Compositor:CompositorNodeCrop", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00022", + "gapId": "node:Compositor:CompositorNodeCryptomatte", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00023", + "gapId": "node:Compositor:CompositorNodeCryptomatteV2", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00024", + "gapId": "node:Compositor:CompositorNodeCurveRGB", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00025", + "gapId": "node:Compositor:CompositorNodeDBlur", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00026", + "gapId": "node:Compositor:CompositorNodeDefocus", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00027", + "gapId": "node:Compositor:CompositorNodeDenoise", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00028", + "gapId": "node:Compositor:CompositorNodeDespeckle", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00029", + "gapId": "node:Compositor:CompositorNodeDiffMatte", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00030", + "gapId": "node:Compositor:CompositorNodeDilateErode", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00031", + "gapId": "node:Compositor:CompositorNodeDisplace", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00032", + "gapId": "node:Compositor:CompositorNodeDistanceMatte", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00033", + "gapId": "node:Compositor:CompositorNodeDoubleEdgeMask", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00034", + "gapId": "node:Compositor:CompositorNodeEllipseMask", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00035", + "gapId": "node:Compositor:CompositorNodeExposure", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00036", + "gapId": "node:Compositor:CompositorNodeFilter", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00037", + "gapId": "node:Compositor:CompositorNodeFlip", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00038", + "gapId": "node:Compositor:CompositorNodeGlare", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00039", + "gapId": "node:Compositor:CompositorNodeGroup", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00040", + "gapId": "node:Compositor:CompositorNodeHueCorrect", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00041", + "gapId": "node:Compositor:CompositorNodeHueSat", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00042", + "gapId": "node:Compositor:CompositorNodeIDMask", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00043", + "gapId": "node:Compositor:CompositorNodeImage", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00044", + "gapId": "node:Compositor:CompositorNodeImageCoordinates", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00045", + "gapId": "node:Compositor:CompositorNodeImageInfo", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00046", + "gapId": "node:Compositor:CompositorNodeInpaint", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00047", + "gapId": "node:Compositor:CompositorNodeInvert", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00048", + "gapId": "node:Compositor:CompositorNodeKeying", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00049", + "gapId": "node:Compositor:CompositorNodeKeyingScreen", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00050", + "gapId": "node:Compositor:CompositorNodeKuwahara", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00051", + "gapId": "node:Compositor:CompositorNodeLensdist", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00052", + "gapId": "node:Compositor:CompositorNodeLevels", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00053", + "gapId": "node:Compositor:CompositorNodeLumaMatte", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00054", + "gapId": "node:Compositor:CompositorNodeMapUV", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00055", + "gapId": "node:Compositor:CompositorNodeMask", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00056", + "gapId": "node:Compositor:CompositorNodeMaskToSDF", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00057", + "gapId": "node:Compositor:CompositorNodeMovieClip", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00058", + "gapId": "node:Compositor:CompositorNodeMovieDistortion", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00059", + "gapId": "node:Compositor:CompositorNodeNormal", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00060", + "gapId": "node:Compositor:CompositorNodeNormalize", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00061", + "gapId": "node:Compositor:CompositorNodeOutputFile", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00062", + "gapId": "node:Compositor:CompositorNodePixelate", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00063", + "gapId": "node:Compositor:CompositorNodePlaneTrackDeform", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00064", + "gapId": "node:Compositor:CompositorNodePosterize", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00065", + "gapId": "node:Compositor:CompositorNodePremulKey", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00066", + "gapId": "node:Compositor:CompositorNodeRGB", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00067", + "gapId": "node:Compositor:CompositorNodeRGBToBW", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00068", + "gapId": "node:Compositor:CompositorNodeRLayers", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00069", + "gapId": "node:Compositor:CompositorNodeRelativeToPixel", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00070", + "gapId": "node:Compositor:CompositorNodeRotate", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00071", + "gapId": "node:Compositor:CompositorNodeScale", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00072", + "gapId": "node:Compositor:CompositorNodeSceneTime", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00073", + "gapId": "node:Compositor:CompositorNodeSeparateColor", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00074", + "gapId": "node:Compositor:CompositorNodeSequencerStripInfo", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00075", + "gapId": "node:Compositor:CompositorNodeSetAlpha", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00076", + "gapId": "node:Compositor:CompositorNodeSplit", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00077", + "gapId": "node:Compositor:CompositorNodeStabilize", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00078", + "gapId": "node:Compositor:CompositorNodeStringToImage", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00079", + "gapId": "node:Compositor:CompositorNodeSwitch", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00080", + "gapId": "node:Compositor:CompositorNodeSwitchView", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00081", + "gapId": "node:Compositor:CompositorNodeTime", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00082", + "gapId": "node:Compositor:CompositorNodeTonemap", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00083", + "gapId": "node:Compositor:CompositorNodeTrackPos", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00084", + "gapId": "node:Compositor:CompositorNodeTransform", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00085", + "gapId": "node:Compositor:CompositorNodeTranslate", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00086", + "gapId": "node:Compositor:CompositorNodeVecBlur", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00087", + "gapId": "node:Compositor:CompositorNodeViewer", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00088", + "gapId": "node:Compositor:CompositorNodeZcombine", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00089", + "gapId": "node:Geometry:GeometryNodeAccumulateField", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00090", + "gapId": "node:Geometry:GeometryNodeAttributeDomainSize", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00091", + "gapId": "node:Geometry:GeometryNodeAttributeStatistic", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00092", + "gapId": "node:Geometry:GeometryNodeBake", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00093", + "gapId": "node:Geometry:GeometryNodeBlurAttribute", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00094", + "gapId": "node:Geometry:GeometryNodeBoneInfo", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00095", + "gapId": "node:Geometry:GeometryNodeBoundBox", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00096", + "gapId": "node:Geometry:GeometryNodeCameraInfo", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00097", + "gapId": "node:Geometry:GeometryNodeCaptureAttribute", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00098", + "gapId": "node:Geometry:GeometryNodeClosureToList", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00099", + "gapId": "node:Geometry:GeometryNodeClusterByConnected", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00100", + "gapId": "node:Geometry:GeometryNodeClusterByDistance", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00101", + "gapId": "node:Geometry:GeometryNodeCollectionChildren", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00102", + "gapId": "node:Geometry:GeometryNodeCollectionInfo", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00103", + "gapId": "node:Geometry:GeometryNodeConvexHull", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00104", + "gapId": "node:Geometry:GeometryNodeCornersOfEdge", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00105", + "gapId": "node:Geometry:GeometryNodeCornersOfFace", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00106", + "gapId": "node:Geometry:GeometryNodeCornersOfVertex", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00107", + "gapId": "node:Geometry:GeometryNodeCubeGridTopology", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00108", + "gapId": "node:Geometry:GeometryNodeCurveArc", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00109", + "gapId": "node:Geometry:GeometryNodeCurveEndpointSelection", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00110", + "gapId": "node:Geometry:GeometryNodeCurveHandleTypeSelection", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00111", + "gapId": "node:Geometry:GeometryNodeCurveLength", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00112", + "gapId": "node:Geometry:GeometryNodeCurveOfPoint", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00113", + "gapId": "node:Geometry:GeometryNodeCurvePrimitiveBezierSegment", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00114", + "gapId": "node:Geometry:GeometryNodeCurvePrimitiveCircle", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00115", + "gapId": "node:Geometry:GeometryNodeCurvePrimitiveLine", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00116", + "gapId": "node:Geometry:GeometryNodeCurvePrimitiveQuadrilateral", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00117", + "gapId": "node:Geometry:GeometryNodeCurveQuadraticBezier", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00118", + "gapId": "node:Geometry:GeometryNodeCurveSetHandles", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00119", + "gapId": "node:Geometry:GeometryNodeCurveSpiral", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00120", + "gapId": "node:Geometry:GeometryNodeCurveSplineType", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00121", + "gapId": "node:Geometry:GeometryNodeCurveStar", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00122", + "gapId": "node:Geometry:GeometryNodeCurveToMesh", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00123", + "gapId": "node:Geometry:GeometryNodeCurveToPoints", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00124", + "gapId": "node:Geometry:GeometryNodeCurvesToGreasePencil", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00125", + "gapId": "node:Geometry:GeometryNodeDeformCurvesOnSurface", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00126", + "gapId": "node:Geometry:GeometryNodeDeleteGeometry", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00127", + "gapId": "node:Geometry:GeometryNodeDistributePointsInGrid", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00128", + "gapId": "node:Geometry:GeometryNodeDistributePointsInVolume", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00129", + "gapId": "node:Geometry:GeometryNodeDistributePointsOnFaces", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00130", + "gapId": "node:Geometry:GeometryNodeDualMesh", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00131", + "gapId": "node:Geometry:GeometryNodeDuplicateElements", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00132", + "gapId": "node:Geometry:GeometryNodeEdgePathsToCurves", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00133", + "gapId": "node:Geometry:GeometryNodeEdgePathsToSelection", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00134", + "gapId": "node:Geometry:GeometryNodeEdgesOfCorner", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00135", + "gapId": "node:Geometry:GeometryNodeEdgesOfVertex", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00136", + "gapId": "node:Geometry:GeometryNodeEdgesToFaceGroups", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00137", + "gapId": "node:Geometry:GeometryNodeExtrudeMesh", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00138", + "gapId": "node:Geometry:GeometryNodeFaceOfCorner", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00139", + "gapId": "node:Geometry:GeometryNodeFieldAtIndex", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00140", + "gapId": "node:Geometry:GeometryNodeFieldAverage", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00141", + "gapId": "node:Geometry:GeometryNodeFieldMinAndMax", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00142", + "gapId": "node:Geometry:GeometryNodeFieldOnDomain", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00143", + "gapId": "node:Geometry:GeometryNodeFieldToGrid", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00144", + "gapId": "node:Geometry:GeometryNodeFieldToList", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00145", + "gapId": "node:Geometry:GeometryNodeFieldVariance", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00146", + "gapId": "node:Geometry:GeometryNodeFillCurve", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00147", + "gapId": "node:Geometry:GeometryNodeFilletCurve", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00148", + "gapId": "node:Geometry:GeometryNodeFilterList", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00149", + "gapId": "node:Geometry:GeometryNodeFlipFaces", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00150", + "gapId": "node:Geometry:GeometryNodeForeachGeometryElementInput", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00151", + "gapId": "node:Geometry:GeometryNodeForeachGeometryElementOutput", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00152", + "gapId": "node:Geometry:GeometryNodeGeometryToInstance", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00153", + "gapId": "node:Geometry:GeometryNodeGetAttributeNames", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00154", + "gapId": "node:Geometry:GeometryNodeGetGeometryBundle", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00155", + "gapId": "node:Geometry:GeometryNodeGetGeometryComponent", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00156", + "gapId": "node:Geometry:GeometryNodeGetNamedGrid", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00157", + "gapId": "node:Geometry:GeometryNodeGizmoDial", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00158", + "gapId": "node:Geometry:GeometryNodeGizmoLinear", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00159", + "gapId": "node:Geometry:GeometryNodeGizmoTransform", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00160", + "gapId": "node:Geometry:GeometryNodeGreasePencilToCurves", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00161", + "gapId": "node:Geometry:GeometryNodeGridAdvect", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00162", + "gapId": "node:Geometry:GeometryNodeGridClip", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00163", + "gapId": "node:Geometry:GeometryNodeGridCurl", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00164", + "gapId": "node:Geometry:GeometryNodeGridDilateAndErode", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00165", + "gapId": "node:Geometry:GeometryNodeGridDivergence", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00166", + "gapId": "node:Geometry:GeometryNodeGridGradient", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00167", + "gapId": "node:Geometry:GeometryNodeGridInfo", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00168", + "gapId": "node:Geometry:GeometryNodeGridLaplacian", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00169", + "gapId": "node:Geometry:GeometryNodeGridMean", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00170", + "gapId": "node:Geometry:GeometryNodeGridMedian", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00171", + "gapId": "node:Geometry:GeometryNodeGridPrune", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00172", + "gapId": "node:Geometry:GeometryNodeGridToMesh", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00173", + "gapId": "node:Geometry:GeometryNodeGridToPoints", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00174", + "gapId": "node:Geometry:GeometryNodeGridVoxelize", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00175", + "gapId": "node:Geometry:GeometryNodeGroup", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00176", + "gapId": "node:Geometry:GeometryNodeImageInfo", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00177", + "gapId": "node:Geometry:GeometryNodeImageTexture", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00178", + "gapId": "node:Geometry:GeometryNodeImportCSV", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00179", + "gapId": "node:Geometry:GeometryNodeImportOBJ", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00180", + "gapId": "node:Geometry:GeometryNodeImportPLY", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00181", + "gapId": "node:Geometry:GeometryNodeImportSTL", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00182", + "gapId": "node:Geometry:GeometryNodeImportText", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00183", + "gapId": "node:Geometry:GeometryNodeImportVDB", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00184", + "gapId": "node:Geometry:GeometryNodeIndexOfNearest", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00185", + "gapId": "node:Geometry:GeometryNodeIndexSwitch", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00186", + "gapId": "node:Geometry:GeometryNodeInputActiveCamera", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00187", + "gapId": "node:Geometry:GeometryNodeInputCollection", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00188", + "gapId": "node:Geometry:GeometryNodeInputCurveHandlePositions", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00189", + "gapId": "node:Geometry:GeometryNodeInputCurveTilt", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00190", + "gapId": "node:Geometry:GeometryNodeInputEdgeSmooth", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00191", + "gapId": "node:Geometry:GeometryNodeInputFont", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00192", + "gapId": "node:Geometry:GeometryNodeInputID", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00193", + "gapId": "node:Geometry:GeometryNodeInputImage", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00194", + "gapId": "node:Geometry:GeometryNodeInputIndex", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00195", + "gapId": "node:Geometry:GeometryNodeInputInstanceBounds", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00196", + "gapId": "node:Geometry:GeometryNodeInputInstanceReference", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00197", + "gapId": "node:Geometry:GeometryNodeInputInstanceRotation", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00198", + "gapId": "node:Geometry:GeometryNodeInputInstanceScale", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00199", + "gapId": "node:Geometry:GeometryNodeInputMaterial", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00200", + "gapId": "node:Geometry:GeometryNodeInputMaterialIndex", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00201", + "gapId": "node:Geometry:GeometryNodeInputMeshEdgeAngle", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00202", + "gapId": "node:Geometry:GeometryNodeInputMeshEdgeNeighbors", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00203", + "gapId": "node:Geometry:GeometryNodeInputMeshEdgeVertices", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00204", + "gapId": "node:Geometry:GeometryNodeInputMeshFaceArea", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00205", + "gapId": "node:Geometry:GeometryNodeInputMeshFaceIsPlanar", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00206", + "gapId": "node:Geometry:GeometryNodeInputMeshFaceNeighbors", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00207", + "gapId": "node:Geometry:GeometryNodeInputMeshIsland", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00208", + "gapId": "node:Geometry:GeometryNodeInputMeshVertexNeighbors", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00209", + "gapId": "node:Geometry:GeometryNodeInputNamedAttribute", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00210", + "gapId": "node:Geometry:GeometryNodeInputNamedLayerSelection", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00211", + "gapId": "node:Geometry:GeometryNodeInputNormal", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00212", + "gapId": "node:Geometry:GeometryNodeInputObject", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00213", + "gapId": "node:Geometry:GeometryNodeInputPosition", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00214", + "gapId": "node:Geometry:GeometryNodeInputRadius", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00215", + "gapId": "node:Geometry:GeometryNodeInputSceneTime", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00216", + "gapId": "node:Geometry:GeometryNodeInputShadeSmooth", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00217", + "gapId": "node:Geometry:GeometryNodeInputShortestEdgePaths", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00218", + "gapId": "node:Geometry:GeometryNodeInputSplineCyclic", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00219", + "gapId": "node:Geometry:GeometryNodeInputSplineResolution", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00220", + "gapId": "node:Geometry:GeometryNodeInputTangent", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00221", + "gapId": "node:Geometry:GeometryNodeInputVoxelIndex", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00222", + "gapId": "node:Geometry:GeometryNodeInstanceOnPoints", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00223", + "gapId": "node:Geometry:GeometryNodeInstanceTransform", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00224", + "gapId": "node:Geometry:GeometryNodeInstancesToPoints", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00225", + "gapId": "node:Geometry:GeometryNodeInterpolateCurves", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00226", + "gapId": "node:Geometry:GeometryNodeIsViewport", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00227", + "gapId": "node:Geometry:GeometryNodeJoinGeometry", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00228", + "gapId": "node:Geometry:GeometryNodeListGetItem", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00229", + "gapId": "node:Geometry:GeometryNodeListLength", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00230", + "gapId": "node:Geometry:GeometryNodeMaterialSelection", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00231", + "gapId": "node:Geometry:GeometryNodeMenuSwitch", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00232", + "gapId": "node:Geometry:GeometryNodeMergeByDistance", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00233", + "gapId": "node:Geometry:GeometryNodeMergeLayers", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00234", + "gapId": "node:Geometry:GeometryNodeMergePoints", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00235", + "gapId": "node:Geometry:GeometryNodeMeshBevel", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00236", + "gapId": "node:Geometry:GeometryNodeMeshBoolean", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00237", + "gapId": "node:Geometry:GeometryNodeMeshCircle", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00238", + "gapId": "node:Geometry:GeometryNodeMeshCone", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00239", + "gapId": "node:Geometry:GeometryNodeMeshCube", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00240", + "gapId": "node:Geometry:GeometryNodeMeshCylinder", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00241", + "gapId": "node:Geometry:GeometryNodeMeshFaceSetBoundaries", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00242", + "gapId": "node:Geometry:GeometryNodeMeshGrid", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00243", + "gapId": "node:Geometry:GeometryNodeMeshIcoSphere", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00244", + "gapId": "node:Geometry:GeometryNodeMeshLine", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00245", + "gapId": "node:Geometry:GeometryNodeMeshToCurve", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00246", + "gapId": "node:Geometry:GeometryNodeMeshToDensityGrid", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00247", + "gapId": "node:Geometry:GeometryNodeMeshToPoints", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00248", + "gapId": "node:Geometry:GeometryNodeMeshToSDFGrid", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00249", + "gapId": "node:Geometry:GeometryNodeMeshToVolume", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00250", + "gapId": "node:Geometry:GeometryNodeMeshUVSphere", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00251", + "gapId": "node:Geometry:GeometryNodeObjectInfo", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00252", + "gapId": "node:Geometry:GeometryNodeOffsetCornerInFace", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00253", + "gapId": "node:Geometry:GeometryNodeOffsetPointInCurve", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00254", + "gapId": "node:Geometry:GeometryNodePoints", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00255", + "gapId": "node:Geometry:GeometryNodePointsOfCurve", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00256", + "gapId": "node:Geometry:GeometryNodePointsToCurves", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00257", + "gapId": "node:Geometry:GeometryNodePointsToSDFGrid", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00258", + "gapId": "node:Geometry:GeometryNodePointsToVertices", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00259", + "gapId": "node:Geometry:GeometryNodePointsToVolume", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00260", + "gapId": "node:Geometry:GeometryNodeProximity", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00261", + "gapId": "node:Geometry:GeometryNodeRaycast", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00262", + "gapId": "node:Geometry:GeometryNodeRealizeInstances", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00263", + "gapId": "node:Geometry:GeometryNodeRemoveAttribute", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00264", + "gapId": "node:Geometry:GeometryNodeRenameAttribute", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00265", + "gapId": "node:Geometry:GeometryNodeRepeatInput", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00266", + "gapId": "node:Geometry:GeometryNodeRepeatOutput", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00267", + "gapId": "node:Geometry:GeometryNodeReplaceMaterial", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00268", + "gapId": "node:Geometry:GeometryNodeResampleCurve", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00269", + "gapId": "node:Geometry:GeometryNodeReverseCurve", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00270", + "gapId": "node:Geometry:GeometryNodeRotateInstances", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00271", + "gapId": "node:Geometry:GeometryNodeSDFGridBoolean", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00272", + "gapId": "node:Geometry:GeometryNodeSDFGridFillet", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00273", + "gapId": "node:Geometry:GeometryNodeSDFGridLaplacian", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00274", + "gapId": "node:Geometry:GeometryNodeSDFGridMean", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00275", + "gapId": "node:Geometry:GeometryNodeSDFGridMeanCurvature", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00276", + "gapId": "node:Geometry:GeometryNodeSDFGridMedian", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00277", + "gapId": "node:Geometry:GeometryNodeSDFGridOffset", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00278", + "gapId": "node:Geometry:GeometryNodeSampleCurve", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00279", + "gapId": "node:Geometry:GeometryNodeSampleGrid", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00280", + "gapId": "node:Geometry:GeometryNodeSampleGridIndex", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00281", + "gapId": "node:Geometry:GeometryNodeSampleIndex", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00282", + "gapId": "node:Geometry:GeometryNodeSampleNearest", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00283", + "gapId": "node:Geometry:GeometryNodeSampleNearestSurface", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00284", + "gapId": "node:Geometry:GeometryNodeSampleSoundFrequencies", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00285", + "gapId": "node:Geometry:GeometryNodeSampleUVSurface", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00286", + "gapId": "node:Geometry:GeometryNodeScaleElements", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00287", + "gapId": "node:Geometry:GeometryNodeScaleInstances", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00288", + "gapId": "node:Geometry:GeometryNodeSelfObject", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00289", + "gapId": "node:Geometry:GeometryNodeSeparateComponents", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00290", + "gapId": "node:Geometry:GeometryNodeSeparateGeometry", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00291", + "gapId": "node:Geometry:GeometryNodeSetCurveHandlePositions", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00292", + "gapId": "node:Geometry:GeometryNodeSetCurveNormal", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00293", + "gapId": "node:Geometry:GeometryNodeSetCurveRadius", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00294", + "gapId": "node:Geometry:GeometryNodeSetCurveTilt", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00295", + "gapId": "node:Geometry:GeometryNodeSetGeometryBundle", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00296", + "gapId": "node:Geometry:GeometryNodeSetGeometryName", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00297", + "gapId": "node:Geometry:GeometryNodeSetGreasePencilColor", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00298", + "gapId": "node:Geometry:GeometryNodeSetGreasePencilDepth", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00299", + "gapId": "node:Geometry:GeometryNodeSetGreasePencilSoftness", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00300", + "gapId": "node:Geometry:GeometryNodeSetGridBackground", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00301", + "gapId": "node:Geometry:GeometryNodeSetGridTransform", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00302", + "gapId": "node:Geometry:GeometryNodeSetID", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00303", + "gapId": "node:Geometry:GeometryNodeSetInstanceTransform", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00304", + "gapId": "node:Geometry:GeometryNodeSetMaterial", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00305", + "gapId": "node:Geometry:GeometryNodeSetMaterialIndex", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00306", + "gapId": "node:Geometry:GeometryNodeSetMeshNormal", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00307", + "gapId": "node:Geometry:GeometryNodeSetNURBSOrder", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00308", + "gapId": "node:Geometry:GeometryNodeSetNURBSWeight", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00309", + "gapId": "node:Geometry:GeometryNodeSetPointRadius", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00310", + "gapId": "node:Geometry:GeometryNodeSetPosition", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00311", + "gapId": "node:Geometry:GeometryNodeSetShadeSmooth", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00312", + "gapId": "node:Geometry:GeometryNodeSetSplineCyclic", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00313", + "gapId": "node:Geometry:GeometryNodeSetSplineResolution", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00314", + "gapId": "node:Geometry:GeometryNodeSimulationInput", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00315", + "gapId": "node:Geometry:GeometryNodeSimulationOutput", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00316", + "gapId": "node:Geometry:GeometryNodeSortElements", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00317", + "gapId": "node:Geometry:GeometryNodeSortList", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00318", + "gapId": "node:Geometry:GeometryNodeSplineLength", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00319", + "gapId": "node:Geometry:GeometryNodeSplineParameter", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00320", + "gapId": "node:Geometry:GeometryNodeSplitEdges", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00321", + "gapId": "node:Geometry:GeometryNodeSplitToInstances", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00322", + "gapId": "node:Geometry:GeometryNodeStoreNamedAttribute", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00323", + "gapId": "node:Geometry:GeometryNodeStoreNamedGrid", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00324", + "gapId": "node:Geometry:GeometryNodeStringJoin", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00325", + "gapId": "node:Geometry:GeometryNodeStringToCurves", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00326", + "gapId": "node:Geometry:GeometryNodeSubdivideCurve", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00327", + "gapId": "node:Geometry:GeometryNodeSubdivideMesh", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00328", + "gapId": "node:Geometry:GeometryNodeSubdivisionSurface", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00329", + "gapId": "node:Geometry:GeometryNodeSwitch", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00330", + "gapId": "node:Geometry:GeometryNodeTagFilter", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00331", + "gapId": "node:Geometry:GeometryNodeTool3DCursor", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00332", + "gapId": "node:Geometry:GeometryNodeToolActiveElement", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00333", + "gapId": "node:Geometry:GeometryNodeToolFaceSet", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00334", + "gapId": "node:Geometry:GeometryNodeToolMousePosition", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00335", + "gapId": "node:Geometry:GeometryNodeToolSelection", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00336", + "gapId": "node:Geometry:GeometryNodeToolSetFaceSet", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00337", + "gapId": "node:Geometry:GeometryNodeToolSetSelection", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00338", + "gapId": "node:Geometry:GeometryNodeTransferAttributes", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00339", + "gapId": "node:Geometry:GeometryNodeTransform", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00340", + "gapId": "node:Geometry:GeometryNodeTranslateInstances", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00341", + "gapId": "node:Geometry:GeometryNodeTriangulate", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00342", + "gapId": "node:Geometry:GeometryNodeTrimCurve", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00343", + "gapId": "node:Geometry:GeometryNodeUVPackIslands", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00344", + "gapId": "node:Geometry:GeometryNodeUVTangent", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00345", + "gapId": "node:Geometry:GeometryNodeUVUnwrap", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00346", + "gapId": "node:Geometry:GeometryNodeVertexOfCorner", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00347", + "gapId": "node:Geometry:GeometryNodeViewer", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00348", + "gapId": "node:Geometry:GeometryNodeViewportTransform", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00349", + "gapId": "node:Geometry:GeometryNodeVolumeCube", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00350", + "gapId": "node:Geometry:GeometryNodeVolumeToMesh", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00351", + "gapId": "node:Geometry:GeometryNodeWarning", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00352", + "gapId": "node:Geometry:GeometryNodeXPBDSolver", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00353", + "gapId": "node:Shader:ShaderNodeAddShader", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00354", + "gapId": "node:Shader:ShaderNodeAmbientOcclusion", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00355", + "gapId": "node:Shader:ShaderNodeAttribute", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00356", + "gapId": "node:Shader:ShaderNodeBackground", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00357", + "gapId": "node:Shader:ShaderNodeBevel", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00358", + "gapId": "node:Shader:ShaderNodeBlackbody", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00359", + "gapId": "node:Shader:ShaderNodeBrightContrast", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00360", + "gapId": "node:Shader:ShaderNodeBsdfAnisotropic", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00361", + "gapId": "node:Shader:ShaderNodeBsdfDiffuse", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00362", + "gapId": "node:Shader:ShaderNodeBsdfGlass", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00363", + "gapId": "node:Shader:ShaderNodeBsdfHair", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00364", + "gapId": "node:Shader:ShaderNodeBsdfHairPrincipled", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00365", + "gapId": "node:Shader:ShaderNodeBsdfMetallic", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00366", + "gapId": "node:Shader:ShaderNodeBsdfPrincipled", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00367", + "gapId": "node:Shader:ShaderNodeBsdfRayPortal", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00368", + "gapId": "node:Shader:ShaderNodeBsdfRefraction", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00369", + "gapId": "node:Shader:ShaderNodeBsdfSheen", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00370", + "gapId": "node:Shader:ShaderNodeBsdfToon", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00371", + "gapId": "node:Shader:ShaderNodeBsdfTranslucent", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00372", + "gapId": "node:Shader:ShaderNodeBsdfTransparent", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00373", + "gapId": "node:Shader:ShaderNodeBump", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00374", + "gapId": "node:Shader:ShaderNodeCameraData", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00375", + "gapId": "node:Shader:ShaderNodeClamp", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00376", + "gapId": "node:Shader:ShaderNodeCombineColor", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00377", + "gapId": "node:Shader:ShaderNodeCombineXYZ", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00378", + "gapId": "node:Shader:ShaderNodeDisplacement", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00379", + "gapId": "node:Shader:ShaderNodeEeveeSpecular", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00380", + "gapId": "node:Shader:ShaderNodeEmission", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00381", + "gapId": "node:Shader:ShaderNodeFloatCurve", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00382", + "gapId": "node:Shader:ShaderNodeFresnel", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00383", + "gapId": "node:Shader:ShaderNodeGamma", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00384", + "gapId": "node:Shader:ShaderNodeGroup", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00385", + "gapId": "node:Shader:ShaderNodeHairInfo", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00386", + "gapId": "node:Shader:ShaderNodeHoldout", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00387", + "gapId": "node:Shader:ShaderNodeHueSaturation", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00388", + "gapId": "node:Shader:ShaderNodeInvert", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00389", + "gapId": "node:Shader:ShaderNodeLayerWeight", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00390", + "gapId": "node:Shader:ShaderNodeLightFalloff", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00391", + "gapId": "node:Shader:ShaderNodeLightPath", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00392", + "gapId": "node:Shader:ShaderNodeMapRange", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00393", + "gapId": "node:Shader:ShaderNodeMapping", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00394", + "gapId": "node:Shader:ShaderNodeMath", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00395", + "gapId": "node:Shader:ShaderNodeMix", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00396", + "gapId": "node:Shader:ShaderNodeMixRGB", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00397", + "gapId": "node:Shader:ShaderNodeMixShader", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00398", + "gapId": "node:Shader:ShaderNodeNewGeometry", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00399", + "gapId": "node:Shader:ShaderNodeNormal", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00400", + "gapId": "node:Shader:ShaderNodeNormalMap", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00401", + "gapId": "node:Shader:ShaderNodeObjectInfo", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00402", + "gapId": "node:Shader:ShaderNodeOutputAOV", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00403", + "gapId": "node:Shader:ShaderNodeOutputLight", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00404", + "gapId": "node:Shader:ShaderNodeOutputLineStyle", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00405", + "gapId": "node:Shader:ShaderNodeOutputMaterial", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00406", + "gapId": "node:Shader:ShaderNodeOutputWorld", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00407", + "gapId": "node:Shader:ShaderNodeParticleInfo", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00408", + "gapId": "node:Shader:ShaderNodePointInfo", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00409", + "gapId": "node:Shader:ShaderNodeRGB", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00410", + "gapId": "node:Shader:ShaderNodeRGBCurve", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00411", + "gapId": "node:Shader:ShaderNodeRGBToBW", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00412", + "gapId": "node:Shader:ShaderNodeRadialTiling", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00413", + "gapId": "node:Shader:ShaderNodeRaycast", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00414", + "gapId": "node:Shader:ShaderNodeScript", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00415", + "gapId": "node:Shader:ShaderNodeSeparateColor", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00416", + "gapId": "node:Shader:ShaderNodeSeparateXYZ", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00417", + "gapId": "node:Shader:ShaderNodeShaderToRGB", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00418", + "gapId": "node:Shader:ShaderNodeSqueeze", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00419", + "gapId": "node:Shader:ShaderNodeSubsurfaceScattering", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00420", + "gapId": "node:Shader:ShaderNodeTangent", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00421", + "gapId": "node:Shader:ShaderNodeTexBrick", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00422", + "gapId": "node:Shader:ShaderNodeTexChecker", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00423", + "gapId": "node:Shader:ShaderNodeTexCoord", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00424", + "gapId": "node:Shader:ShaderNodeTexEnvironment", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00425", + "gapId": "node:Shader:ShaderNodeTexGabor", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00426", + "gapId": "node:Shader:ShaderNodeTexGradient", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00427", + "gapId": "node:Shader:ShaderNodeTexIES", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00428", + "gapId": "node:Shader:ShaderNodeTexImage", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00429", + "gapId": "node:Shader:ShaderNodeTexMagic", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00430", + "gapId": "node:Shader:ShaderNodeTexNoise", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00431", + "gapId": "node:Shader:ShaderNodeTexSky", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00432", + "gapId": "node:Shader:ShaderNodeTexVoronoi", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00433", + "gapId": "node:Shader:ShaderNodeTexWave", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00434", + "gapId": "node:Shader:ShaderNodeTexWhiteNoise", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00435", + "gapId": "node:Shader:ShaderNodeUVAlongStroke", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00436", + "gapId": "node:Shader:ShaderNodeUVMap", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00437", + "gapId": "node:Shader:ShaderNodeValToRGB", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00438", + "gapId": "node:Shader:ShaderNodeValue", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00439", + "gapId": "node:Shader:ShaderNodeVectorCurve", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00440", + "gapId": "node:Shader:ShaderNodeVectorDisplacement", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00441", + "gapId": "node:Shader:ShaderNodeVectorMath", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00442", + "gapId": "node:Shader:ShaderNodeVectorRotate", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00443", + "gapId": "node:Shader:ShaderNodeVectorTransform", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00444", + "gapId": "node:Shader:ShaderNodeVertexColor", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00445", + "gapId": "node:Shader:ShaderNodeVolumeAbsorption", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00446", + "gapId": "node:Shader:ShaderNodeVolumeCoefficients", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00447", + "gapId": "node:Shader:ShaderNodeVolumeInfo", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00448", + "gapId": "node:Shader:ShaderNodeVolumePrincipled", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00449", + "gapId": "node:Shader:ShaderNodeVolumeScatter", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00450", + "gapId": "node:Shader:ShaderNodeWavelength", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00451", + "gapId": "node:Shader:ShaderNodeWireframe", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00001", + "gapId": "rna:Core:Action", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00002", + "gapId": "rna:Core:Armature", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00003", + "gapId": "rna:Core:Brush", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00004", + "gapId": "rna:Core:Curve", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00005", + "gapId": "rna:Core:Curves", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00006", + "gapId": "rna:Core:GreasePencil", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00007", + "gapId": "rna:Core:ID", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00008", + "gapId": "rna:Core:Image", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00009", + "gapId": "rna:Core:Key", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00010", + "gapId": "rna:Core:Lattice", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00011", + "gapId": "rna:Core:Mask", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00012", + "gapId": "rna:Core:MetaBall", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00013", + "gapId": "rna:Core:MovieClip", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00014", + "gapId": "rna:Core:Palette", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00015", + "gapId": "rna:Core:ParticleSettings", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00016", + "gapId": "rna:Core:PointCloud", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00017", + "gapId": "rna:Core:Sound", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00018", + "gapId": "rna:Core:Speaker", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00019", + "gapId": "rna:Core:Text", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00020", + "gapId": "rna:Core:Volume", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00001", + "gapId": "physics:BakeSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00002", + "gapId": "physics:BlendDataParticles", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00003", + "gapId": "physics:BoidRule", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00004", + "gapId": "physics:BoidRuleAverageSpeed", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00005", + "gapId": "physics:BoidRuleAvoid", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00006", + "gapId": "physics:BoidRuleAvoidCollision", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00007", + "gapId": "physics:BoidRuleFight", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00008", + "gapId": "physics:BoidRuleFollowLeader", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00009", + "gapId": "physics:BoidRuleGoal", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00010", + "gapId": "physics:BoidSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00011", + "gapId": "physics:BoidState", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00012", + "gapId": "physics:ChildParticle", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00013", + "gapId": "physics:ClothCollisionSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00014", + "gapId": "physics:ClothModifier", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00015", + "gapId": "physics:ClothSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00016", + "gapId": "physics:ClothSolverResult", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00017", + "gapId": "physics:CollisionModifier", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00018", + "gapId": "physics:CollisionSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00019", + "gapId": "physics:DynamicPaintBrushSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00020", + "gapId": "physics:DynamicPaintCanvasSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00021", + "gapId": "physics:DynamicPaintModifier", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00022", + "gapId": "physics:DynamicPaintSurface", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00023", + "gapId": "physics:DynamicPaintSurfaces", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00024", + "gapId": "physics:EffectorWeights", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00025", + "gapId": "physics:FieldSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00026", + "gapId": "physics:FluidDomainSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00027", + "gapId": "physics:FluidEffectorSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00028", + "gapId": "physics:FluidFlowSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00029", + "gapId": "physics:FluidModifier", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00030", + "gapId": "physics:GeometryNodeAccumulateField", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00031", + "gapId": "physics:GeometryNodeFieldAtIndex", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00032", + "gapId": "physics:GeometryNodeFieldAverage", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00033", + "gapId": "physics:GeometryNodeFieldMinAndMax", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00034", + "gapId": "physics:GeometryNodeFieldOnDomain", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00035", + "gapId": "physics:GeometryNodeFieldToGrid", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00036", + "gapId": "physics:GeometryNodeFieldToGridItem", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00037", + "gapId": "physics:GeometryNodeFieldToGridItems", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00038", + "gapId": "physics:GeometryNodeFieldToList", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00039", + "gapId": "physics:GeometryNodeFieldToListItem", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00040", + "gapId": "physics:GeometryNodeFieldToListItems", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00041", + "gapId": "physics:GeometryNodeFieldVariance", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00042", + "gapId": "physics:Particle", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00043", + "gapId": "physics:ParticleBrush", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00044", + "gapId": "physics:ParticleDupliWeight", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00045", + "gapId": "physics:ParticleEdit", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00046", + "gapId": "physics:ParticleHairKey", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00047", + "gapId": "physics:ParticleInstanceModifier", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00048", + "gapId": "physics:ParticleKey", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00049", + "gapId": "physics:ParticleSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00050", + "gapId": "physics:ParticleSettingsTextureSlot", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00051", + "gapId": "physics:ParticleSettingsTextureSlots", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00052", + "gapId": "physics:ParticleSystem", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00053", + "gapId": "physics:ParticleSystemModifier", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00054", + "gapId": "physics:ParticleSystems", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00055", + "gapId": "physics:ParticleTarget", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00056", + "gapId": "physics:PointCache", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00057", + "gapId": "physics:PointCacheItem", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00058", + "gapId": "physics:PointCaches", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00059", + "gapId": "physics:RigidBodyConstraint", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00060", + "gapId": "physics:RigidBodyObject", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00061", + "gapId": "physics:RigidBodyWorld", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00062", + "gapId": "physics:SPHFluidSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00063", + "gapId": "physics:ShaderNodeParticleInfo", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00064", + "gapId": "physics:SoftBodyModifier", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00065", + "gapId": "physics:SoftBodySettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00066", + "gapId": "strip:ADD", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00067", + "gapId": "strip:ADJUSTMENT", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00068", + "gapId": "strip:ALPHA_OVER", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00069", + "gapId": "strip:ALPHA_UNDER", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00070", + "gapId": "strip:COLOR", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00071", + "gapId": "strip:COLORMIX", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00072", + "gapId": "strip:COMPOSITOR", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00073", + "gapId": "strip:CROSS", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00074", + "gapId": "strip:GAMMA_CROSS", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00075", + "gapId": "strip:GAUSSIAN_BLUR", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00076", + "gapId": "strip:GLOW", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00077", + "gapId": "strip:IMAGE", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00078", + "gapId": "strip:MASK", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00079", + "gapId": "strip:META", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00080", + "gapId": "strip:MOVIE", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00081", + "gapId": "strip:MOVIECLIP", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00082", + "gapId": "strip:MULTICAM", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00083", + "gapId": "strip:MULTIPLY", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00084", + "gapId": "strip:SCENE", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00085", + "gapId": "strip:SOUND", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00086", + "gapId": "strip:SPEED", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00087", + "gapId": "strip:SUBTRACT", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00088", + "gapId": "strip:TEXT", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00089", + "gapId": "strip:WIPE", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00001", + "gapId": "area:CLIP_EDITOR", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00002", + "gapId": "area:CONSOLE", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00003", + "gapId": "area:DOPESHEET_EDITOR", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00004", + "gapId": "area:EMPTY", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00005", + "gapId": "area:FILE_BROWSER", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00006", + "gapId": "area:GRAPH_EDITOR", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00007", + "gapId": "area:IMAGE_EDITOR", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00008", + "gapId": "area:INFO", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00009", + "gapId": "area:NLA_EDITOR", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00010", + "gapId": "area:NODE_EDITOR", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00011", + "gapId": "area:OUTLINER", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00012", + "gapId": "area:PREFERENCES", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00013", + "gapId": "area:PROPERTIES", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00014", + "gapId": "area:SEQUENCE_EDITOR", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00015", + "gapId": "area:SPREADSHEET", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00016", + "gapId": "area:STATUSBAR", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00017", + "gapId": "area:TEXT_EDITOR", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00018", + "gapId": "area:TOPBAR", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00019", + "gapId": "area:VIEW_3D", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00020", + "gapId": "io:anim.keying_set_export", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00021", + "gapId": "io:collection.export_all", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00022", + "gapId": "io:collection.exporter_add", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00023", + "gapId": "io:collection.exporter_export", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00024", + "gapId": "io:collection.exporter_move", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00025", + "gapId": "io:collection.exporter_remove", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00026", + "gapId": "io:collection.importer_add", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00027", + "gapId": "io:collection.importer_remove", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00028", + "gapId": "io:export_anim.bvh", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00029", + "gapId": "io:export_scene.fbx", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00030", + "gapId": "io:export_scene.gltf", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00031", + "gapId": "io:image.import_as_mesh_planes", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00032", + "gapId": "io:import_anim.bvh", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00033", + "gapId": "io:import_curve.svg", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00034", + "gapId": "io:import_scene.fbx", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00035", + "gapId": "io:import_scene.gltf", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00036", + "gapId": "io:node.add_import_node", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00037", + "gapId": "io:object.volume_import", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00038", + "gapId": "io:preferences.keyconfig_export", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00039", + "gapId": "io:preferences.keyconfig_import", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00040", + "gapId": "io:sequencer.export_subtitles", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00041", + "gapId": "io:uv.export_layout", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00042", + "gapId": "io:wm.collection_export_all", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00043", + "gapId": "io:wm.drop_import_file", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00044", + "gapId": "io:wm.fbx_import", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00045", + "gapId": "io:wm.grease_pencil_export_svg", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00046", + "gapId": "io:wm.grease_pencil_import_svg", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00047", + "gapId": "io:wm.obj_export", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00048", + "gapId": "io:wm.obj_import", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00049", + "gapId": "io:wm.ply_export", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00050", + "gapId": "io:wm.ply_import", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00051", + "gapId": "io:wm.stl_export", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00052", + "gapId": "io:wm.stl_import", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00053", + "gapId": "keymap-item:3D View Generic:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00054", + "gapId": "keymap-item:3D View Generic:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00055", + "gapId": "keymap-item:3D View Tool: Bend:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00056", + "gapId": "keymap-item:3D View Tool: Breakdowner:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00057", + "gapId": "keymap-item:3D View Tool: Cursor:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00058", + "gapId": "keymap-item:3D View Tool: Cursor:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00059", + "gapId": "keymap-item:3D View Tool: Edit Armature, B-Bone Size:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00060", + "gapId": "keymap-item:3D View Tool: Edit Armature, Bone Envelope:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00061", + "gapId": "keymap-item:3D View Tool: Edit Armature, Extrude to Cursor:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00062", + "gapId": "keymap-item:3D View Tool: Edit Armature, Extrude:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00063", + "gapId": "keymap-item:3D View Tool: Edit Armature, Roll:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00064", + "gapId": "keymap-item:3D View Tool: Edit Curve, Curve Pen:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00065", + "gapId": "keymap-item:3D View Tool: Edit Curve, Curve Pen:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00066", + "gapId": "keymap-item:3D View Tool: Edit Curve, Curve Pen:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00067", + "gapId": "keymap-item:3D View Tool: Edit Curve, Draw:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00068", + "gapId": "keymap-item:3D View Tool: Edit Curve, Extrude to Cursor:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00069", + "gapId": "keymap-item:3D View Tool: Edit Curve, Extrude:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00070", + "gapId": "keymap-item:3D View Tool: Edit Curve, Radius:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00071", + "gapId": "keymap-item:3D View Tool: Edit Curve, Randomize:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00072", + "gapId": "keymap-item:3D View Tool: Edit Curve, Tilt:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00073", + "gapId": "keymap-item:3D View Tool: Edit Curves, Draw:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00074", + "gapId": "keymap-item:3D View Tool: Edit Curves, Pen:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00075", + "gapId": "keymap-item:3D View Tool: Edit Curves, Pen:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00076", + "gapId": "keymap-item:3D View Tool: Edit Curves, Pen:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00077", + "gapId": "keymap-item:3D View Tool: Edit Curves, Pen:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00078", + "gapId": "keymap-item:3D View Tool: Edit Grease Pencil, Gradient:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00079", + "gapId": "keymap-item:3D View Tool: Edit Grease Pencil, Interpolate:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00080", + "gapId": "keymap-item:3D View Tool: Edit Grease Pencil, Pen:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00081", + "gapId": "keymap-item:3D View Tool: Edit Grease Pencil, Pen:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00082", + "gapId": "keymap-item:3D View Tool: Edit Grease Pencil, Pen:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00083", + "gapId": "keymap-item:3D View Tool: Edit Grease Pencil, Pen:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00084", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Bevel:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00085", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Bisect:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00086", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Edge Slide:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00087", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Extrude Along Normals:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00088", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Extrude Individual:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00089", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Extrude Manifold:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00090", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Extrude Region:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00091", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Extrude to Cursor:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00092", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Inset Faces:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00093", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Knife:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00094", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Loop Cut:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00095", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Offset Edge Loop Cut:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00096", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Poly Build:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00097", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Poly Build:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00098", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Poly Build:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00099", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Push/Pull:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00100", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Randomize:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00101", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Rip Edge:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00102", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Rip Region:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00103", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Shrink/Fatten:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00104", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Smooth:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00105", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Spin Duplicates:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00106", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Spin:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00107", + "gapId": "keymap-item:3D View Tool: Edit Mesh, To Sphere:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00108", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Vertex Slide:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00109", + "gapId": "keymap-item:3D View Tool: Edit Text, Select Text:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00110", + "gapId": "keymap-item:3D View Tool: Edit Text, Select Text:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00111", + "gapId": "keymap-item:3D View Tool: Measure:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00112", + "gapId": "keymap-item:3D View Tool: Measure:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00113", + "gapId": "keymap-item:3D View Tool: Measure:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00114", + "gapId": "keymap-item:3D View Tool: Move:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00115", + "gapId": "keymap-item:3D View Tool: Object, Add Primitive:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00116", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Arc:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00117", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Arc:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00118", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Arc:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00119", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Box:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00120", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Box:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00121", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Box:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00122", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Circle:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00123", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Circle:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00124", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Circle:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00125", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Curve:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00126", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Eyedropper:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00127", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Eyedropper:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00128", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Eyedropper:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00129", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Eyedropper:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00130", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Interpolate:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00131", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Line:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00132", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Line:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00133", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Line:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00134", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Polyline:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00135", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Polyline:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00136", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Trim:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00137", + "gapId": "keymap-item:3D View Tool: Paint Weight, Gradient:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00138", + "gapId": "keymap-item:3D View Tool: Paint Weight, Sample Vertex Group:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00139", + "gapId": "keymap-item:3D View Tool: Paint Weight, Sample Weight:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00140", + "gapId": "keymap-item:3D View Tool: Paint Weight, Sample Weight:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00141", + "gapId": "keymap-item:3D View Tool: Push:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00142", + "gapId": "keymap-item:3D View Tool: Relax:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00143", + "gapId": "keymap-item:3D View Tool: Rotate:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00144", + "gapId": "keymap-item:3D View Tool: Scale:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00145", + "gapId": "keymap-item:3D View Tool: Sculpt, Box Face Set:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00146", + "gapId": "keymap-item:3D View Tool: Sculpt, Box Hide:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00147", + "gapId": "keymap-item:3D View Tool: Sculpt, Box Hide:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00148", + "gapId": "keymap-item:3D View Tool: Sculpt, Box Hide:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00149", + "gapId": "keymap-item:3D View Tool: Sculpt, Box Mask:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00150", + "gapId": "keymap-item:3D View Tool: Sculpt, Box Mask:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00151", + "gapId": "keymap-item:3D View Tool: Sculpt, Box Trim:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00152", + "gapId": "keymap-item:3D View Tool: Sculpt, Cloth Filter:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00153", + "gapId": "keymap-item:3D View Tool: Sculpt, Color Filter:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00154", + "gapId": "keymap-item:3D View Tool: Sculpt, Color Filter:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00155", + "gapId": "keymap-item:3D View Tool: Sculpt, Face Set Edit:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00156", + "gapId": "keymap-item:3D View Tool: Sculpt, Lasso Face Set:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00157", + "gapId": "keymap-item:3D View Tool: Sculpt, Lasso Hide:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00158", + "gapId": "keymap-item:3D View Tool: Sculpt, Lasso Hide:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00159", + "gapId": "keymap-item:3D View Tool: Sculpt, Lasso Hide:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00160", + "gapId": "keymap-item:3D View Tool: Sculpt, Lasso Mask:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00161", + "gapId": "keymap-item:3D View Tool: Sculpt, Lasso Mask:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00162", + "gapId": "keymap-item:3D View Tool: Sculpt, Lasso Trim:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00163", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Face Set:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00164", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Hide:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00165", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Hide:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00166", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Hide:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00167", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Mask:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00168", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Mask:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00169", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Project:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00170", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Trim:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00171", + "gapId": "keymap-item:3D View Tool: Sculpt, Mask by Color:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00172", + "gapId": "keymap-item:3D View Tool: Sculpt, Mesh Filter:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00173", + "gapId": "keymap-item:3D View Tool: Sculpt, Polyline Face Set:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00174", + "gapId": "keymap-item:3D View Tool: Sculpt, Polyline Hide:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00175", + "gapId": "keymap-item:3D View Tool: Sculpt, Polyline Hide:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00176", + "gapId": "keymap-item:3D View Tool: Sculpt, Polyline Mask:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00177", + "gapId": "keymap-item:3D View Tool: Sculpt, Polyline Mask:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00178", + "gapId": "keymap-item:3D View Tool: Sculpt, Polyline Trim:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00179", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00180", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00181", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00182", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00183", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00184", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00185", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00186", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00187", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00188", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00189", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00190", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00191", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00192", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00193", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00194", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00195", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00196", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00197", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00198", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00199", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00200", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00201", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00202", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00203", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00204", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00205", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00206", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00207", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00208", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00209", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00210", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00211", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00212", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00213", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00214", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00215", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00216", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00217", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00218", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00219", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00220", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00221", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00222", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00223", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00224", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00225", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00226", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00227", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00228", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00229", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00230", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00231", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00232", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00233", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00234", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00235", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00236", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00237", + "gapId": "keymap-item:3D View Tool: Shear:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00238", + "gapId": "keymap-item:3D View Tool: Shear:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00239", + "gapId": "keymap-item:3D View Tool: Shear:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00240", + "gapId": "keymap-item:3D View Tool: Transform:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00241", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00242", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00243", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00244", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00245", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00246", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00247", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00248", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00249", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00250", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00251", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00252", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00253", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00254", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00255", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00256", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00257", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00258", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00259", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00260", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00261", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00262", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:100", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00263", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:101", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00264", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:102", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00265", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:103", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00266", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:104", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00267", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:105", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00268", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:106", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00269", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:107", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00270", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:108", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00271", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:109", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00272", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00273", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:110", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00274", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:111", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00275", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:112", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00276", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:113", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00277", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:114", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00278", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:115", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00279", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00280", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00281", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00282", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00283", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00284", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00285", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00286", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00287", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00288", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00289", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00290", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00291", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00292", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00293", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00294", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00295", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00296", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00297", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00298", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00299", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00300", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00301", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00302", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00303", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00304", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00305", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00306", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00307", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00308", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00309", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00310", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00311", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00312", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00313", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00314", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00315", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00316", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00317", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00318", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00319", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00320", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00321", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00322", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00323", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00324", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00325", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00326", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00327", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00328", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00329", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00330", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:59", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00331", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00332", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:60", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00333", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:61", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00334", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:62", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00335", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:63", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00336", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:64", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00337", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:65", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00338", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:66", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00339", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:67", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00340", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:68", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00341", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:69", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00342", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00343", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:70", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00344", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:71", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00345", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:72", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00346", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:73", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00347", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:74", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00348", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:75", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00349", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:76", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00350", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:77", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00351", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:78", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00352", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:79", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00353", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00354", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:80", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00355", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:81", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00356", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:82", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00357", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:83", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00358", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:84", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00359", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:85", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00360", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:86", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00361", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:87", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00362", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:88", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00363", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:89", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00364", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00365", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:90", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00366", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:91", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00367", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:92", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00368", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:93", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00369", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:94", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00370", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:95", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00371", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:96", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00372", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:97", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00373", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:98", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00374", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:99", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00375", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00376", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00377", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00378", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00379", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00380", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00381", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00382", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00383", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00384", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00385", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00386", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00387", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00388", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00389", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00390", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00391", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00392", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00393", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00394", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00395", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00396", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00397", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00398", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00399", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00400", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00401", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00402", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00403", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00404", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00405", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00406", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00407", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00408", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00409", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00410", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00411", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00412", + "gapId": "keymap-item:Animation:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00413", + "gapId": "keymap-item:Animation:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00414", + "gapId": "keymap-item:Animation:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00415", + "gapId": "keymap-item:Animation:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00416", + "gapId": "keymap-item:Animation:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00417", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00418", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00419", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00420", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00421", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00422", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00423", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00424", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00425", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00426", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00427", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00428", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00429", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00430", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00431", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00432", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00433", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00434", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00435", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00436", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00437", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00438", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00439", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00440", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00441", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00442", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00443", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00444", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00445", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00446", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00447", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00448", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00449", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00450", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00451", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00452", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00453", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00454", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00455", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00456", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00457", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00458", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00459", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00460", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00461", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00462", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00463", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00464", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00465", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00466", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00467", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00468", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00469", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00470", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00471", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00472", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00473", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00474", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00475", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00476", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00477", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00478", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00479", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00480", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00481", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00482", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00483", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00484", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00485", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00486", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00487", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00488", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00489", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00490", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00491", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00492", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00493", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00494", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00495", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00496", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00497", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00498", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00499", + "gapId": "keymap-item:Clip Dopesheet Editor:CLIP_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00500", + "gapId": "keymap-item:Clip Dopesheet Editor:CLIP_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00501", + "gapId": "keymap-item:Clip Dopesheet Editor:CLIP_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00502", + "gapId": "keymap-item:Clip Dopesheet Editor:CLIP_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00503", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00504", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00505", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00506", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00507", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00508", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00509", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00510", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00511", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00512", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00513", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00514", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00515", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00516", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00517", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00518", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00519", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00520", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00521", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00522", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00523", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00524", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00525", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00526", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00527", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00528", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00529", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00530", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00531", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00532", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00533", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00534", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00535", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00536", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00537", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00538", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00539", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00540", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00541", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00542", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00543", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00544", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00545", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00546", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00547", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00548", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00549", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00550", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00551", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00552", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00553", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00554", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00555", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00556", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00557", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00558", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:59", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00559", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00560", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:60", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00561", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:61", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00562", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:62", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00563", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:63", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00564", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:64", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00565", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:65", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00566", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:66", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00567", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:67", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00568", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:68", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00569", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:69", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00570", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00571", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:70", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00572", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:71", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00573", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:72", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00574", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:73", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00575", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:74", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00576", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:75", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00577", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00578", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00579", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00580", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00581", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00582", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00583", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00584", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00585", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00586", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00587", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00588", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00589", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00590", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00591", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00592", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00593", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00594", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00595", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00596", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00597", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00598", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00599", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00600", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00601", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00602", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00603", + "gapId": "keymap-item:Clip Time Scrub:CLIP_EDITOR:PREVIEW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00604", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00605", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00606", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00607", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00608", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00609", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00610", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00611", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00612", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00613", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00614", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00615", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00616", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00617", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00618", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00619", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00620", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00621", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00622", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00623", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00624", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00625", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00626", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00627", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00628", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00629", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00630", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00631", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00632", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00633", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00634", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00635", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00636", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00637", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00638", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00639", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00640", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00641", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00642", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00643", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00644", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00645", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00646", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00647", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00648", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00649", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00650", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00651", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00652", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00653", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00654", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00655", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00656", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00657", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00658", + "gapId": "keymap-item:Curve Pen Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00659", + "gapId": "keymap-item:Curve Pen Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00660", + "gapId": "keymap-item:Curve Pen Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00661", + "gapId": "keymap-item:Curve Pen Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00662", + "gapId": "keymap-item:Curve Pen Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00663", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00664", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00665", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00666", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00667", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00668", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00669", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00670", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00671", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00672", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00673", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00674", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00675", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00676", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00677", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00678", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00679", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00680", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00681", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00682", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00683", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00684", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00685", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00686", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00687", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00688", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00689", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00690", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00691", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00692", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00693", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00694", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00695", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00696", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00697", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00698", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00699", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00700", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00701", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00702", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00703", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00704", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00705", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00706", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00707", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00708", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00709", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00710", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00711", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00712", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00713", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00714", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00715", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00716", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00717", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00718", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00719", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00720", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00721", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00722", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00723", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00724", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00725", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00726", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00727", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00728", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00729", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00730", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00731", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00732", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00733", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00734", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00735", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00736", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00737", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00738", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00739", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00740", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00741", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00742", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00743", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00744", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00745", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00746", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00747", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00748", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00749", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00750", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00751", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00752", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00753", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00754", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00755", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00756", + "gapId": "keymap-item:Dopesheet Generic:DOPESHEET_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00757", + "gapId": "keymap-item:Dopesheet Generic:DOPESHEET_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00758", + "gapId": "keymap-item:Dopesheet Generic:DOPESHEET_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00759", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00760", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00761", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00762", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00763", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00764", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00765", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00766", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00767", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00768", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00769", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00770", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00771", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00772", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00773", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00774", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00775", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00776", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00777", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00778", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00779", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00780", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00781", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00782", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00783", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00784", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00785", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00786", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00787", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00788", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00789", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00790", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00791", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00792", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00793", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00794", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00795", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00796", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00797", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00798", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00799", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00800", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00801", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00802", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00803", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00804", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00805", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00806", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00807", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00808", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00809", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00810", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00811", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00812", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00813", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00814", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:59", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00815", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00816", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:60", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00817", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:61", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00818", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:62", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00819", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:63", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00820", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:64", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00821", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:65", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00822", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:66", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00823", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:67", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00824", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00825", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00826", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00827", + "gapId": "keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00828", + "gapId": "keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00829", + "gapId": "keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00830", + "gapId": "keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00831", + "gapId": "keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00832", + "gapId": "keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00833", + "gapId": "keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00834", + "gapId": "keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00835", + "gapId": "keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00836", + "gapId": "keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00837", + "gapId": "keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00838", + "gapId": "keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00839", + "gapId": "keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00840", + "gapId": "keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00841", + "gapId": "keymap-item:File Browser Buttons:FILE_BROWSER:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00842", + "gapId": "keymap-item:File Browser Buttons:FILE_BROWSER:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00843", + "gapId": "keymap-item:File Browser Buttons:FILE_BROWSER:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00844", + "gapId": "keymap-item:File Browser Buttons:FILE_BROWSER:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00845", + "gapId": "keymap-item:File Browser Buttons:FILE_BROWSER:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00846", + "gapId": "keymap-item:File Browser Buttons:FILE_BROWSER:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00847", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00848", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00849", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00850", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00851", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00852", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00853", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00854", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00855", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00856", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00857", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00858", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00859", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00860", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00861", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00862", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00863", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00864", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00865", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00866", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00867", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00868", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00869", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00870", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00871", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00872", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00873", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00874", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00875", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00876", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00877", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00878", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00879", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00880", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00881", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00882", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00883", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00884", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00885", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00886", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00887", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00888", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00889", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00890", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00891", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00892", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00893", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00894", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00895", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00896", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00897", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00898", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00899", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00900", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00901", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00902", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00903", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00904", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00905", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00906", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00907", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00908", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00909", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00910", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00911", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00912", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00913", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00914", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00915", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00916", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00917", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00918", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00919", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00920", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00921", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00922", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00923", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00924", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00925", + "gapId": "keymap-item:Font:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00926", + "gapId": "keymap-item:Font:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00927", + "gapId": "keymap-item:Font:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00928", + "gapId": "keymap-item:Font:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00929", + "gapId": "keymap-item:Font:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00930", + "gapId": "keymap-item:Font:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00931", + "gapId": "keymap-item:Font:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00932", + "gapId": "keymap-item:Font:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00933", + "gapId": "keymap-item:Font:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00934", + "gapId": "keymap-item:Font:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00935", + "gapId": "keymap-item:Font:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00936", + "gapId": "keymap-item:Font:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00937", + "gapId": "keymap-item:Font:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00938", + "gapId": "keymap-item:Font:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00939", + "gapId": "keymap-item:Font:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00940", + "gapId": "keymap-item:Font:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00941", + "gapId": "keymap-item:Font:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00942", + "gapId": "keymap-item:Font:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00943", + "gapId": "keymap-item:Font:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00944", + "gapId": "keymap-item:Font:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00945", + "gapId": "keymap-item:Font:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00946", + "gapId": "keymap-item:Font:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00947", + "gapId": "keymap-item:Font:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00948", + "gapId": "keymap-item:Font:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00949", + "gapId": "keymap-item:Font:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00950", + "gapId": "keymap-item:Font:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00951", + "gapId": "keymap-item:Font:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00952", + "gapId": "keymap-item:Font:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00953", + "gapId": "keymap-item:Font:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00954", + "gapId": "keymap-item:Font:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00955", + "gapId": "keymap-item:Font:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00956", + "gapId": "keymap-item:Font:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00957", + "gapId": "keymap-item:Font:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00958", + "gapId": "keymap-item:Font:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00959", + "gapId": "keymap-item:Font:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00960", + "gapId": "keymap-item:Font:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00961", + "gapId": "keymap-item:Font:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00962", + "gapId": "keymap-item:Font:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00963", + "gapId": "keymap-item:Font:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00964", + "gapId": "keymap-item:Font:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00965", + "gapId": "keymap-item:Font:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00966", + "gapId": "keymap-item:Font:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00967", + "gapId": "keymap-item:Font:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00968", + "gapId": "keymap-item:Font:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00969", + "gapId": "keymap-item:Font:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00970", + "gapId": "keymap-item:Font:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00971", + "gapId": "keymap-item:Font:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00972", + "gapId": "keymap-item:Font:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00973", + "gapId": "keymap-item:Font:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00974", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00975", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00976", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00977", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00978", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00979", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00980", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00981", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00982", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00983", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00984", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00985", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00986", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00987", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00988", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00989", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00990", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00991", + "gapId": "keymap-item:Generic Gizmo Click Drag:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00992", + "gapId": "keymap-item:Generic Gizmo Click Drag:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00993", + "gapId": "keymap-item:Generic Gizmo Drag:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00994", + "gapId": "keymap-item:Generic Gizmo Maybe Drag:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00995", + "gapId": "keymap-item:Generic Gizmo Select:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00996", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00997", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00998", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00999", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01000", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01001", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01002", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01003", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01004", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01005", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01006", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01007", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01008", + "gapId": "keymap-item:Generic Gizmo:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01009", + "gapId": "keymap-item:Generic Tool: Annotate Eraser:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01010", + "gapId": "keymap-item:Generic Tool: Annotate Eraser:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01011", + "gapId": "keymap-item:Generic Tool: Annotate Line:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01012", + "gapId": "keymap-item:Generic Tool: Annotate Line:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01013", + "gapId": "keymap-item:Generic Tool: Annotate Polygon:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01014", + "gapId": "keymap-item:Generic Tool: Annotate Polygon:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01015", + "gapId": "keymap-item:Generic Tool: Annotate:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01016", + "gapId": "keymap-item:Generic Tool: Annotate:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01017", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01018", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01019", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01020", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01021", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01022", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01023", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01024", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01025", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01026", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01027", + "gapId": "keymap-item:Gesture Lasso:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01028", + "gapId": "keymap-item:Gesture Polyline:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01029", + "gapId": "keymap-item:Gesture Polyline:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01030", + "gapId": "keymap-item:Gesture Polyline:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01031", + "gapId": "keymap-item:Gesture Polyline:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01032", + "gapId": "keymap-item:Gesture Polyline:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01033", + "gapId": "keymap-item:Gesture Polyline:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01034", + "gapId": "keymap-item:Gesture Straight Line:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01035", + "gapId": "keymap-item:Gesture Straight Line:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01036", + "gapId": "keymap-item:Gesture Straight Line:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01037", + "gapId": "keymap-item:Gesture Straight Line:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01038", + "gapId": "keymap-item:Gesture Straight Line:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01039", + "gapId": "keymap-item:Gesture Straight Line:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01040", + "gapId": "keymap-item:Gesture Straight Line:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01041", + "gapId": "keymap-item:Gesture Zoom Border:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01042", + "gapId": "keymap-item:Gesture Zoom Border:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01043", + "gapId": "keymap-item:Gesture Zoom Border:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01044", + "gapId": "keymap-item:Gesture Zoom Border:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01045", + "gapId": "keymap-item:Gesture Zoom Border:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01046", + "gapId": "keymap-item:Gesture Zoom Border:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01047", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01048", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01049", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01050", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01051", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01052", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01053", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01054", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01055", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01056", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01057", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01058", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01059", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01060", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01061", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01062", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01063", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01064", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01065", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01066", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01067", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01068", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01069", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01070", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01071", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01072", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01073", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01074", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01075", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01076", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01077", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01078", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01079", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01080", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01081", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01082", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01083", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01084", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01085", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01086", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01087", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01088", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01089", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01090", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01091", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01092", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01093", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01094", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01095", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01096", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01097", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01098", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01099", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01100", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01101", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01102", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01103", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01104", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01105", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01106", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01107", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01108", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01109", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01110", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01111", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01112", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:59", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01113", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01114", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:60", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01115", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:61", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01116", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:62", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01117", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:63", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01118", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:64", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01119", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:65", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01120", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:66", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01121", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:67", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01122", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:68", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01123", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:69", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01124", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01125", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:70", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01126", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01127", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01128", + "gapId": "keymap-item:Grease Pencil Brush Stroke:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01129", + "gapId": "keymap-item:Grease Pencil Brush Stroke:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01130", + "gapId": "keymap-item:Grease Pencil Brush Stroke:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01131", + "gapId": "keymap-item:Grease Pencil Brush Stroke:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01132", + "gapId": "keymap-item:Grease Pencil Brush Stroke:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01133", + "gapId": "keymap-item:Grease Pencil Brush Stroke:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01134", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01135", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01136", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01137", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01138", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01139", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01140", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01141", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01142", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01143", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01144", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01145", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01146", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01147", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01148", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01149", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01150", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01151", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01152", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01153", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01154", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01155", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01156", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01157", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01158", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01159", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01160", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01161", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01162", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01163", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01164", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01165", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01166", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01167", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01168", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01169", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01170", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01171", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01172", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01173", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01174", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01175", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01176", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01177", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01178", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01179", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01180", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01181", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01182", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01183", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01184", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01185", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01186", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01187", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01188", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01189", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01190", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01191", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01192", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01193", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01194", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01195", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01196", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01197", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01198", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01199", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01200", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01201", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01202", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01203", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01204", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01205", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01206", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01207", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01208", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01209", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01210", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01211", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01212", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01213", + "gapId": "keymap-item:Grease Pencil Fill Tool:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01214", + "gapId": "keymap-item:Grease Pencil Fill Tool:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01215", + "gapId": "keymap-item:Grease Pencil Fill Tool:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01216", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01217", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01218", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01219", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01220", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01221", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01222", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01223", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01224", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01225", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01226", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01227", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01228", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01229", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01230", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01231", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01232", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01233", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01234", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01235", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01236", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01237", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01238", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01239", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01240", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01241", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01242", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01243", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01244", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01245", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01246", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01247", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01248", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01249", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01250", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01251", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01252", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01253", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01254", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01255", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01256", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01257", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01258", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01259", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01260", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01261", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01262", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01263", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01264", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01265", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01266", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01267", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01268", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01269", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01270", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01271", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01272", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01273", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01274", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01275", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01276", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01277", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01278", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01279", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01280", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01281", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01282", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01283", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01284", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01285", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01286", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01287", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01288", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01289", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01290", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01291", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01292", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01293", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01294", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01295", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01296", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01297", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01298", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01299", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01300", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01301", + "gapId": "keymap-item:Grease Pencil:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01302", + "gapId": "keymap-item:Grease Pencil:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01303", + "gapId": "keymap-item:Grease Pencil:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01304", + "gapId": "keymap-item:Grease Pencil:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01305", + "gapId": "keymap-item:Grease Pencil:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01306", + "gapId": "keymap-item:Image Editor Tool: Mask, Box:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01307", + "gapId": "keymap-item:Image Editor Tool: Mask, Circle:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01308", + "gapId": "keymap-item:Image Editor Tool: Mask, Cursor:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01309", + "gapId": "keymap-item:Image Editor Tool: Mask, Cursor:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01310", + "gapId": "keymap-item:Image Editor Tool: Mask, Move:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01311", + "gapId": "keymap-item:Image Editor Tool: Mask, Rotate:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01312", + "gapId": "keymap-item:Image Editor Tool: Mask, Scale:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01313", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Box (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01314", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Box (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01315", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Box (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01316", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Box:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01317", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Box:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01318", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Box:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01319", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Circle (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01320", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Circle (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01321", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Circle (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01322", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Circle:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01323", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Circle:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01324", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Circle:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01325", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Lasso (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01326", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Lasso (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01327", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Lasso (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01328", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Lasso:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01329", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Lasso:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01330", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Lasso:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01331", + "gapId": "keymap-item:Image Editor Tool: Mask, Transform:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01332", + "gapId": "keymap-item:Image Editor Tool: Mask, Tweak (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01333", + "gapId": "keymap-item:Image Editor Tool: Mask, Tweak (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01334", + "gapId": "keymap-item:Image Editor Tool: Mask, Tweak (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01335", + "gapId": "keymap-item:Image Editor Tool: Mask, Tweak:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01336", + "gapId": "keymap-item:Image Editor Tool: Mask, Tweak:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01337", + "gapId": "keymap-item:Image Editor Tool: Mask, Tweak:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01338", + "gapId": "keymap-item:Image Editor Tool: Sample:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01339", + "gapId": "keymap-item:Image Editor Tool: Uv, Cursor:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01340", + "gapId": "keymap-item:Image Editor Tool: Uv, Cursor:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01341", + "gapId": "keymap-item:Image Editor Tool: Uv, Grab:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01342", + "gapId": "keymap-item:Image Editor Tool: Uv, Grab:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01343", + "gapId": "keymap-item:Image Editor Tool: Uv, Grab:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01344", + "gapId": "keymap-item:Image Editor Tool: Uv, Grab:IMAGE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01345", + "gapId": "keymap-item:Image Editor Tool: Uv, Grab:IMAGE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01346", + "gapId": "keymap-item:Image Editor Tool: Uv, Move:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01347", + "gapId": "keymap-item:Image Editor Tool: Uv, Pinch:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01348", + "gapId": "keymap-item:Image Editor Tool: Uv, Pinch:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01349", + "gapId": "keymap-item:Image Editor Tool: Uv, Pinch:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01350", + "gapId": "keymap-item:Image Editor Tool: Uv, Pinch:IMAGE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01351", + "gapId": "keymap-item:Image Editor Tool: Uv, Pinch:IMAGE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01352", + "gapId": "keymap-item:Image Editor Tool: Uv, Relax:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01353", + "gapId": "keymap-item:Image Editor Tool: Uv, Relax:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01354", + "gapId": "keymap-item:Image Editor Tool: Uv, Relax:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01355", + "gapId": "keymap-item:Image Editor Tool: Uv, Relax:IMAGE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01356", + "gapId": "keymap-item:Image Editor Tool: Uv, Relax:IMAGE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01357", + "gapId": "keymap-item:Image Editor Tool: Uv, Rip Region:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01358", + "gapId": "keymap-item:Image Editor Tool: Uv, Rotate:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01359", + "gapId": "keymap-item:Image Editor Tool: Uv, Scale:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01360", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Box (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01361", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Box (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01362", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Box (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01363", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Box:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01364", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Box:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01365", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Box:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01366", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Circle (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01367", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Circle (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01368", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Circle (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01369", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Circle:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01370", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Circle:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01371", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Circle:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01372", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Lasso (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01373", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Lasso (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01374", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Lasso (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01375", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Lasso:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01376", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Lasso:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01377", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Lasso:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01378", + "gapId": "keymap-item:Image Editor Tool: Uv, Tweak (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01379", + "gapId": "keymap-item:Image Editor Tool: Uv, Tweak (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01380", + "gapId": "keymap-item:Image Editor Tool: Uv, Tweak (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01381", + "gapId": "keymap-item:Image Editor Tool: Uv, Tweak:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01382", + "gapId": "keymap-item:Image Editor Tool: Uv, Tweak:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01383", + "gapId": "keymap-item:Image Editor Tool: Uv, Tweak:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01384", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01385", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01386", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01387", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01388", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01389", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01390", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01391", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01392", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01393", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01394", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01395", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01396", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01397", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01398", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01399", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01400", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01401", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01402", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01403", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01404", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01405", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01406", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01407", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01408", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01409", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01410", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01411", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01412", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01413", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01414", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01415", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01416", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01417", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01418", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01419", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01420", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01421", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01422", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01423", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01424", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01425", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01426", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01427", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01428", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01429", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01430", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01431", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01432", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01433", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01434", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01435", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01436", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01437", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01438", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01439", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01440", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01441", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01442", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01443", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01444", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01445", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01446", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01447", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01448", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01449", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01450", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01451", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01452", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01453", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01454", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01455", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01456", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01457", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01458", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01459", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01460", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01461", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01462", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01463", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01464", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01465", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01466", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01467", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01468", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01469", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01470", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01471", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01472", + "gapId": "keymap-item:Info:INFO:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01473", + "gapId": "keymap-item:Info:INFO:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01474", + "gapId": "keymap-item:Info:INFO:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01475", + "gapId": "keymap-item:Info:INFO:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01476", + "gapId": "keymap-item:Info:INFO:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01477", + "gapId": "keymap-item:Info:INFO:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01478", + "gapId": "keymap-item:Info:INFO:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01479", + "gapId": "keymap-item:Info:INFO:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01480", + "gapId": "keymap-item:Info:INFO:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01481", + "gapId": "keymap-item:Info:INFO:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01482", + "gapId": "keymap-item:Info:INFO:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01483", + "gapId": "keymap-item:Info:INFO:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01484", + "gapId": "keymap-item:Info:INFO:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01485", + "gapId": "keymap-item:Info:INFO:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01486", + "gapId": "keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01487", + "gapId": "keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01488", + "gapId": "keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01489", + "gapId": "keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01490", + "gapId": "keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01491", + "gapId": "keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01492", + "gapId": "keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01493", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01494", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01495", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01496", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01497", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01498", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01499", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01500", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01501", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01502", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01503", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01504", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01505", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01506", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01507", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01508", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01509", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01510", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01511", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01512", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01513", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01514", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01515", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01516", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01517", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01518", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01519", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01520", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01521", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01522", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01523", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01524", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01525", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01526", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01527", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01528", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01529", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01530", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01531", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01532", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01533", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01534", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01535", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01536", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01537", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01538", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01539", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01540", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01541", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01542", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01543", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01544", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01545", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01546", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01547", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01548", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01549", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01550", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01551", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01552", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01553", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01554", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01555", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01556", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01557", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01558", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01559", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01560", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01561", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01562", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01563", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01564", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01565", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01566", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01567", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01568", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01569", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01570", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01571", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01572", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01573", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01574", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01575", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01576", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01577", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01578", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01579", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01580", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01581", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01582", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01583", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01584", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01585", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01586", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01587", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01588", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01589", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01590", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01591", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01592", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01593", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01594", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01595", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01596", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01597", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01598", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01599", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01600", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01601", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01602", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01603", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01604", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01605", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01606", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01607", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01608", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01609", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01610", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01611", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01612", + "gapId": "keymap-item:Mesh Filter Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01613", + "gapId": "keymap-item:Mesh Filter Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01614", + "gapId": "keymap-item:Mesh Filter Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01615", + "gapId": "keymap-item:Mesh Filter Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01616", + "gapId": "keymap-item:Mesh Filter Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01617", + "gapId": "keymap-item:Mesh Filter Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01618", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01619", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01620", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01621", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01622", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01623", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01624", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01625", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01626", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01627", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01628", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01629", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01630", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01631", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01632", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01633", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01634", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01635", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01636", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01637", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01638", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01639", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01640", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01641", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01642", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01643", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01644", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01645", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01646", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01647", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01648", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01649", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01650", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01651", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01652", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01653", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01654", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01655", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01656", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01657", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01658", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01659", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01660", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01661", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01662", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01663", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01664", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01665", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01666", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01667", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01668", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01669", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01670", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01671", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01672", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01673", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:59", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01674", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01675", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:60", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01676", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:61", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01677", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:62", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01678", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:63", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01679", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:64", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01680", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:65", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01681", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:66", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01682", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:67", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01683", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:68", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01684", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:69", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01685", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01686", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:70", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01687", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:71", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01688", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:72", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01689", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:73", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01690", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:74", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01691", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:75", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01692", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:76", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01693", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:77", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01694", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:78", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01695", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:79", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01696", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01697", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:80", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01698", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:81", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01699", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:82", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01700", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:83", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01701", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:84", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01702", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:85", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01703", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:86", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01704", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:87", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01705", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:88", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01706", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:89", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01707", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01708", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:90", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01709", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:91", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01710", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:92", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01711", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01712", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01713", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01714", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01715", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01716", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01717", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01718", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01719", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01720", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01721", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01722", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01723", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01724", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01725", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01726", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01727", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01728", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01729", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01730", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01731", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01732", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01733", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01734", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01735", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01736", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01737", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01738", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01739", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01740", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01741", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01742", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01743", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01744", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01745", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01746", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01747", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01748", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01749", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01750", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01751", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01752", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01753", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01754", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01755", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01756", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01757", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01758", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01759", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01760", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01761", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01762", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01763", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01764", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01765", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01766", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01767", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01768", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01769", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01770", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01771", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01772", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01773", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01774", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01775", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01776", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01777", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01778", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01779", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01780", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01781", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01782", + "gapId": "keymap-item:NLA Generic:NLA_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01783", + "gapId": "keymap-item:NLA Generic:NLA_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01784", + "gapId": "keymap-item:NLA Generic:NLA_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01785", + "gapId": "keymap-item:NLA Generic:NLA_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01786", + "gapId": "keymap-item:NLA Generic:NLA_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01787", + "gapId": "keymap-item:NLA Generic:NLA_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01788", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01789", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01790", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01791", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01792", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01793", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01794", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01795", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01796", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01797", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01798", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01799", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:100", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01800", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:101", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01801", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:102", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01802", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:103", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01803", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01804", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01805", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01806", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01807", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01808", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01809", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01810", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01811", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01812", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01813", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01814", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01815", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01816", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01817", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01818", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01819", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01820", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01821", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01822", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01823", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01824", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01825", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01826", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01827", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01828", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01829", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01830", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01831", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01832", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01833", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01834", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01835", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01836", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01837", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01838", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01839", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01840", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01841", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01842", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01843", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01844", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01845", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01846", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01847", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01848", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01849", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01850", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01851", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01852", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01853", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01854", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01855", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:59", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01856", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01857", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:60", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01858", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:61", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01859", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:62", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01860", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:63", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01861", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:64", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01862", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:65", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01863", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:66", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01864", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:67", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01865", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:68", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01866", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:69", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01867", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01868", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:70", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01869", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:71", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01870", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:72", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01871", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:73", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01872", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:74", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01873", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:75", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01874", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:76", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01875", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:77", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01876", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:78", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01877", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:79", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01878", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01879", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:80", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01880", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:81", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01881", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:82", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01882", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:83", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01883", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:84", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01884", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:85", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01885", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:86", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01886", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:87", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01887", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:88", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01888", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:89", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01889", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01890", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:90", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01891", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:91", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01892", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:92", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01893", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:93", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01894", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:94", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01895", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:95", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01896", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:96", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01897", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:97", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01898", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:98", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01899", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:99", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01900", + "gapId": "keymap-item:Node Generic:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01901", + "gapId": "keymap-item:Node Generic:NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01902", + "gapId": "keymap-item:Node Link Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01903", + "gapId": "keymap-item:Node Link Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01904", + "gapId": "keymap-item:Node Link Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01905", + "gapId": "keymap-item:Node Link Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01906", + "gapId": "keymap-item:Node Link Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01907", + "gapId": "keymap-item:Node Link Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01908", + "gapId": "keymap-item:Node Resize Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01909", + "gapId": "keymap-item:Node Resize Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01910", + "gapId": "keymap-item:Node Resize Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01911", + "gapId": "keymap-item:Node Resize Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01912", + "gapId": "keymap-item:Node Resize Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01913", + "gapId": "keymap-item:Node Resize Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01914", + "gapId": "keymap-item:Node Resize Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01915", + "gapId": "keymap-item:Node Tool: Add Reroute:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01916", + "gapId": "keymap-item:Node Tool: Links Cut:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01917", + "gapId": "keymap-item:Node Tool: Mute Links:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01918", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01919", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01920", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01921", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01922", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01923", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01924", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01925", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01926", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01927", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01928", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01929", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01930", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01931", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01932", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01933", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01934", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01935", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01936", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01937", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01938", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01939", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01940", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01941", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01942", + "gapId": "keymap-item:Node Tool: Select Circle (fallback):NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01943", + "gapId": "keymap-item:Node Tool: Select Circle (fallback):NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01944", + "gapId": "keymap-item:Node Tool: Select Circle (fallback):NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01945", + "gapId": "keymap-item:Node Tool: Select Circle:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01946", + "gapId": "keymap-item:Node Tool: Select Circle:NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01947", + "gapId": "keymap-item:Node Tool: Select Circle:NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01948", + "gapId": "keymap-item:Node Tool: Select Lasso (fallback):NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01949", + "gapId": "keymap-item:Node Tool: Select Lasso (fallback):NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01950", + "gapId": "keymap-item:Node Tool: Select Lasso (fallback):NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01951", + "gapId": "keymap-item:Node Tool: Select Lasso:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01952", + "gapId": "keymap-item:Node Tool: Select Lasso:NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01953", + "gapId": "keymap-item:Node Tool: Select Lasso:NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01954", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01955", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01956", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01957", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01958", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01959", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01960", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01961", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01962", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01963", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01964", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01965", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01966", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01967", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01968", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01969", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01970", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01971", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01972", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01973", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01974", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01975", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01976", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01977", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01978", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01979", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01980", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01981", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01982", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01983", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01984", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01985", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01986", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01987", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01988", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01989", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01990", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01991", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01992", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01993", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01994", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01995", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01996", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01997", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01998", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01999", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02000", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02001", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02002", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02003", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02004", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02005", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02006", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02007", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02008", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02009", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02010", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02011", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02012", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02013", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02014", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02015", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02016", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02017", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02018", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02019", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02020", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02021", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02022", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02023", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02024", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02025", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02026", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02027", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02028", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02029", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02030", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02031", + "gapId": "keymap-item:Object Non-modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02032", + "gapId": "keymap-item:Object Non-modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02033", + "gapId": "keymap-item:Object Non-modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02034", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02035", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02036", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02037", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:100", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02038", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:101", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02039", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:102", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02040", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02041", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02042", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02043", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02044", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02045", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02046", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02047", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02048", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02049", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02050", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02051", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02052", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02053", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02054", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02055", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02056", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02057", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02058", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02059", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02060", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02061", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02062", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02063", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02064", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02065", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02066", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02067", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02068", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02069", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02070", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02071", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02072", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02073", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02074", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02075", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02076", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02077", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02078", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02079", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02080", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02081", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02082", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02083", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02084", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02085", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02086", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02087", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02088", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02089", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02090", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02091", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02092", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:59", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02093", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02094", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:60", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02095", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:61", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02096", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:62", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02097", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:63", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02098", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:64", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02099", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:65", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02100", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:66", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02101", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:67", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02102", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:68", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02103", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:69", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02104", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02105", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:70", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02106", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:71", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02107", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:72", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02108", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:73", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02109", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:74", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02110", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:75", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02111", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:76", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02112", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:77", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02113", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:78", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02114", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:79", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02115", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02116", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:80", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02117", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:81", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02118", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:82", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02119", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:83", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02120", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:84", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02121", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:85", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02122", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:86", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02123", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:87", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02124", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:88", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02125", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:89", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02126", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02127", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:90", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02128", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:91", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02129", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:92", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02130", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:93", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02131", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:94", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02132", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:95", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02133", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:96", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02134", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:97", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02135", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:98", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02136", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:99", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02137", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02138", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02139", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02140", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02141", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02142", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02143", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02144", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02145", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02146", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02147", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02148", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02149", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02150", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02151", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02152", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02153", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02154", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02155", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02156", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02157", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02158", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02159", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02160", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02161", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02162", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02163", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02164", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02165", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02166", + "gapId": "keymap-item:Paint Stroke Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02167", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02168", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02169", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02170", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02171", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02172", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02173", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02174", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02175", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02176", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02177", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02178", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02179", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02180", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02181", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02182", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02183", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02184", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02185", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02186", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02187", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02188", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02189", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02190", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02191", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02192", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02193", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02194", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02195", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02196", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02197", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02198", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02199", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02200", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02201", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02202", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02203", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02204", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02205", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02206", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02207", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02208", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02209", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02210", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02211", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02212", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02213", + "gapId": "keymap-item:Pen Tool Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02214", + "gapId": "keymap-item:Pen Tool Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02215", + "gapId": "keymap-item:Pen Tool Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02216", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02217", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02218", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02219", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02220", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02221", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02222", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02223", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02224", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02225", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02226", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02227", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02228", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02229", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02230", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02231", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02232", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02233", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02234", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02235", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02236", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02237", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02238", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02239", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02240", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02241", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02242", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02243", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02244", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02245", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02246", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02247", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02248", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02249", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02250", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02251", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02252", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02253", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02254", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02255", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02256", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02257", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02258", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02259", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02260", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02261", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02262", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02263", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02264", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02265", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02266", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02267", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02268", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02269", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02270", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02271", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02272", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02273", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02274", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02275", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02276", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02277", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02278", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02279", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02280", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02281", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02282", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02283", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02284", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02285", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02286", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02287", + "gapId": "keymap-item:Preferences:PREFERENCES:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02288", + "gapId": "keymap-item:Preferences:PREFERENCES:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02289", + "gapId": "keymap-item:Preferences_nav:PREFERENCES:UI:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02290", + "gapId": "keymap-item:Preferences_nav:PREFERENCES:UI:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02291", + "gapId": "keymap-item:Preview Tool: Cursor:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02292", + "gapId": "keymap-item:Preview Tool: Cursor:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02293", + "gapId": "keymap-item:Preview Tool: Move:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02294", + "gapId": "keymap-item:Preview Tool: Rotate:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02295", + "gapId": "keymap-item:Preview Tool: Sample:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02296", + "gapId": "keymap-item:Preview Tool: Scale:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02297", + "gapId": "keymap-item:Preview Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02298", + "gapId": "keymap-item:Preview Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02299", + "gapId": "keymap-item:Preview Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02300", + "gapId": "keymap-item:Preview Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02301", + "gapId": "keymap-item:Preview Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02302", + "gapId": "keymap-item:Preview Tool: Select Box:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02303", + "gapId": "keymap-item:Preview Tool: Select Box:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02304", + "gapId": "keymap-item:Preview Tool: Select Box:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02305", + "gapId": "keymap-item:Preview Tool: Select Box:SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02306", + "gapId": "keymap-item:Preview Tool: Select Box:SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02307", + "gapId": "keymap-item:Preview Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02308", + "gapId": "keymap-item:Preview Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02309", + "gapId": "keymap-item:Preview Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02310", + "gapId": "keymap-item:Preview Tool: Select Circle:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02311", + "gapId": "keymap-item:Preview Tool: Select Circle:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02312", + "gapId": "keymap-item:Preview Tool: Select Circle:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02313", + "gapId": "keymap-item:Preview Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02314", + "gapId": "keymap-item:Preview Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02315", + "gapId": "keymap-item:Preview Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02316", + "gapId": "keymap-item:Preview Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02317", + "gapId": "keymap-item:Preview Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02318", + "gapId": "keymap-item:Preview Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02319", + "gapId": "keymap-item:Preview Tool: Tweak (fallback):SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02320", + "gapId": "keymap-item:Preview Tool: Tweak (fallback):SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02321", + "gapId": "keymap-item:Preview Tool: Tweak (fallback):SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02322", + "gapId": "keymap-item:Preview Tool: Tweak (fallback):SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02323", + "gapId": "keymap-item:Preview Tool: Tweak (fallback):SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02324", + "gapId": "keymap-item:Preview Tool: Tweak:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02325", + "gapId": "keymap-item:Preview Tool: Tweak:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02326", + "gapId": "keymap-item:Preview Tool: Tweak:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02327", + "gapId": "keymap-item:Preview Tool: Tweak:SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02328", + "gapId": "keymap-item:Preview Tool: Tweak:SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02329", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02330", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02331", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02332", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02333", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02334", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02335", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02336", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02337", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02338", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02339", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02340", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02341", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02342", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02343", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02344", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02345", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02346", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02347", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02348", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02349", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02350", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02351", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02352", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02353", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02354", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02355", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02356", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02357", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02358", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02359", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02360", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02361", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02362", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02363", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02364", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02365", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02366", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02367", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02368", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02369", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02370", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02371", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02372", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02373", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02374", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02375", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02376", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02377", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02378", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02379", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02380", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02381", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02382", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02383", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02384", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:59", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02385", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02386", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:60", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02387", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:61", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02388", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:62", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02389", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:63", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02390", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:64", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02391", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:65", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02392", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:66", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02393", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:67", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02394", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:68", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02395", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:69", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02396", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02397", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:70", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02398", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:71", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02399", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:72", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02400", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:73", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02401", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:74", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02402", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:75", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02403", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:76", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02404", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:77", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02405", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:78", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02406", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:79", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02407", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02408", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:80", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02409", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:81", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02410", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:82", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02411", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:83", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02412", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:84", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02413", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:85", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02414", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:86", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02415", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:87", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02416", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02417", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02418", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02419", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02420", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02421", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02422", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02423", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02424", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02425", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02426", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02427", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02428", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02429", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02430", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02431", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02432", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02433", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02434", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02435", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02436", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02437", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02438", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02439", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02440", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02441", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02442", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02443", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02444", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02445", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02446", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02447", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02448", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02449", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02450", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02451", + "gapId": "keymap-item:Region Context Menu:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02452", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02453", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02454", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02455", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02456", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02457", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02458", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02459", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02460", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02461", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02462", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02463", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02464", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02465", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02466", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02467", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02468", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02469", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02470", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02471", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02472", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02473", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02474", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02475", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02476", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02477", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02478", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02479", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02480", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02481", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02482", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02483", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02484", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02485", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02486", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02487", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02488", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02489", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02490", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02491", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02492", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02493", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02494", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02495", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02496", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02497", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02498", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02499", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02500", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02501", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02502", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02503", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02504", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02505", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02506", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02507", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02508", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02509", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02510", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02511", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02512", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02513", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02514", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02515", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02516", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02517", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02518", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02519", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02520", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02521", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02522", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02523", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02524", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02525", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02526", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02527", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02528", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02529", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02530", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02531", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02532", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02533", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02534", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02535", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02536", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02537", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02538", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02539", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02540", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02541", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02542", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02543", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02544", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02545", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02546", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02547", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02548", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02549", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02550", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02551", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02552", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02553", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02554", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02555", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02556", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02557", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02558", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02559", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02560", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02561", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02562", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02563", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02564", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02565", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02566", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02567", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02568", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02569", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02570", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02571", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02572", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02573", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02574", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02575", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02576", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02577", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02578", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02579", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02580", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02581", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02582", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02583", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02584", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02585", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02586", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02587", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02588", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:59", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02589", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02590", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:60", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02591", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:61", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02592", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:62", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02593", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:63", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02594", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:64", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02595", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:65", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02596", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:66", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02597", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02598", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02599", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02600", + "gapId": "keymap-item:Sequencer Channels:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02601", + "gapId": "keymap-item:Sequencer Channels:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02602", + "gapId": "keymap-item:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02603", + "gapId": "keymap-item:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02604", + "gapId": "keymap-item:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02605", + "gapId": "keymap-item:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02606", + "gapId": "keymap-item:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02607", + "gapId": "keymap-item:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02608", + "gapId": "keymap-item:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02609", + "gapId": "keymap-item:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02610", + "gapId": "keymap-item:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02611", + "gapId": "keymap-item:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02612", + "gapId": "keymap-item:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02613", + "gapId": "keymap-item:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02614", + "gapId": "keymap-item:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02615", + "gapId": "keymap-item:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02616", + "gapId": "keymap-item:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02617", + "gapId": "keymap-item:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02618", + "gapId": "keymap-item:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02619", + "gapId": "keymap-item:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02620", + "gapId": "keymap-item:Sequencer Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02621", + "gapId": "keymap-item:Sequencer Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02622", + "gapId": "keymap-item:Sequencer Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02623", + "gapId": "keymap-item:Sequencer Tool: Select Circle:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02624", + "gapId": "keymap-item:Sequencer Tool: Select Circle:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02625", + "gapId": "keymap-item:Sequencer Tool: Select Circle:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02626", + "gapId": "keymap-item:Sequencer Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02627", + "gapId": "keymap-item:Sequencer Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02628", + "gapId": "keymap-item:Sequencer Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02629", + "gapId": "keymap-item:Sequencer Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02630", + "gapId": "keymap-item:Sequencer Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02631", + "gapId": "keymap-item:Sequencer Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02632", + "gapId": "keymap-item:Sequencer Tool: Slip:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02633", + "gapId": "keymap-item:Sequencer Tool: Slip:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02634", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02635", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02636", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02637", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02638", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02639", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02640", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02641", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02642", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02643", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02644", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02645", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02646", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02647", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02648", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02649", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02650", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02651", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02652", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02653", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02654", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02655", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02656", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02657", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02658", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02659", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02660", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02661", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02662", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02663", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02664", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02665", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02666", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02667", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02668", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02669", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02670", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02671", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02672", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02673", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02674", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02675", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02676", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02677", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02678", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02679", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02680", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02681", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02682", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02683", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02684", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02685", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02686", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02687", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02688", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02689", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:59", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02690", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02691", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:60", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02692", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:61", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02693", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:62", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02694", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:63", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02695", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:64", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02696", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:65", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02697", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:66", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02698", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:67", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02699", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:68", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02700", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:69", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02701", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02702", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:70", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02703", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:71", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02704", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:72", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02705", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:73", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02706", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:74", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02707", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:75", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02708", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:76", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02709", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:77", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02710", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:78", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02711", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:79", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02712", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02713", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:80", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02714", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:81", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02715", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:82", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02716", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:83", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02717", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:84", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02718", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:85", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02719", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:86", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02720", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:87", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02721", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:88", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02722", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:89", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02723", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02724", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:90", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02725", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:91", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02726", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:92", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02727", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:93", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02728", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:94", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02729", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02730", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02731", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02732", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02733", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02734", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02735", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02736", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02737", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02738", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02739", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02740", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02741", + "gapId": "keymap-item:Spreadsheet Generic:SPREADSHEET:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02742", + "gapId": "keymap-item:Spreadsheet Generic:SPREADSHEET:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02743", + "gapId": "keymap-item:Spreadsheet Generic:SPREADSHEET:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02744", + "gapId": "keymap-item:Spreadsheet Generic:SPREADSHEET:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02745", + "gapId": "keymap-item:Spreadsheet Generic:SPREADSHEET:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02746", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02747", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02748", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02749", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02750", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02751", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02752", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02753", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02754", + "gapId": "keymap-item:Text Generic:TEXT_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02755", + "gapId": "keymap-item:Text Generic:TEXT_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02756", + "gapId": "keymap-item:Text Generic:TEXT_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02757", + "gapId": "keymap-item:Text Generic:TEXT_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02758", + "gapId": "keymap-item:Text Generic:TEXT_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02759", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02760", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02761", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02762", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02763", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02764", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02765", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02766", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02767", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02768", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02769", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02770", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02771", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02772", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02773", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02774", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02775", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02776", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02777", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02778", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02779", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02780", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02781", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02782", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02783", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02784", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02785", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02786", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02787", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02788", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02789", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02790", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02791", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02792", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02793", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02794", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02795", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02796", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02797", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02798", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02799", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02800", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02801", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02802", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02803", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02804", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02805", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02806", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02807", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02808", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02809", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02810", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02811", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02812", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02813", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02814", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:59", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02815", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02816", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:60", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02817", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:61", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02818", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:62", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02819", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:63", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02820", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:64", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02821", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:65", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02822", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:66", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02823", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:67", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02824", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:68", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02825", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:69", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02826", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02827", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:70", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02828", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02829", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02830", + "gapId": "keymap-item:Time Scrub:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02831", + "gapId": "keymap-item:Toolbar Popup:EMPTY:TEMPORARY:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02832", + "gapId": "keymap-item:Toolbar Popup:EMPTY:TEMPORARY:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02833", + "gapId": "keymap-item:Toolbar Popup:EMPTY:TEMPORARY:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02834", + "gapId": "keymap-item:Toolbar Popup:EMPTY:TEMPORARY:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02835", + "gapId": "keymap-item:Toolbar Popup:EMPTY:TEMPORARY:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02836", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02837", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02838", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02839", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02840", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02841", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02842", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02843", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02844", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02845", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02846", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02847", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02848", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02849", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02850", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02851", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02852", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02853", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02854", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02855", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02856", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02857", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02858", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02859", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02860", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02861", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02862", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02863", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02864", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02865", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02866", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02867", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02868", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02869", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02870", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02871", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02872", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02873", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02874", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02875", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02876", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02877", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02878", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02879", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02880", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02881", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02882", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02883", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02884", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02885", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02886", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02887", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02888", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02889", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02890", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02891", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02892", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02893", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02894", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02895", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02896", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02897", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02898", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02899", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02900", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02901", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02902", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02903", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02904", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02905", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02906", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02907", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02908", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02909", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02910", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02911", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02912", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02913", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02914", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02915", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02916", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02917", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02918", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02919", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02920", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02921", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02922", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02923", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02924", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02925", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02926", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02927", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02928", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02929", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02930", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02931", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02932", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02933", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02934", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02935", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02936", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02937", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02938", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02939", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02940", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02941", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02942", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02943", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02944", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02945", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02946", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02947", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02948", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02949", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02950", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02951", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02952", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02953", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02954", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02955", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02956", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:59", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02957", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02958", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:60", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02959", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:61", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02960", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:62", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02961", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:63", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02962", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:64", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02963", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:65", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02964", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:66", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02965", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:67", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02966", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:68", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02967", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:69", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02968", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02969", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:70", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02970", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:71", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02971", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:72", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02972", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:73", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02973", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:74", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02974", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:75", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02975", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:76", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02976", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:77", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02977", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:78", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02978", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:79", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02979", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02980", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:80", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02981", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:81", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02982", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:82", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02983", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:83", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02984", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:84", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02985", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:85", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02986", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:86", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02987", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:87", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02988", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02989", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02990", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02991", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02992", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02993", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02994", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02995", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02996", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02997", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02998", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02999", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03000", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03001", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03002", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03003", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03004", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03005", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03006", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03007", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03008", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03009", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03010", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03011", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03012", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03013", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03014", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03015", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03016", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03017", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03018", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03019", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03020", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03021", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03022", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03023", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03024", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03025", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03026", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03027", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03028", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03029", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03030", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03031", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03032", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03033", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03034", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03035", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03036", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03037", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03038", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03039", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03040", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03041", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03042", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03043", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03044", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03045", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03046", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03047", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03048", + "gapId": "keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03049", + "gapId": "keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03050", + "gapId": "keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03051", + "gapId": "keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03052", + "gapId": "keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03053", + "gapId": "keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03054", + "gapId": "keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03055", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03056", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03057", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03058", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03059", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03060", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03061", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03062", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03063", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03064", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03065", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03066", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03067", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03068", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03069", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03070", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03071", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03072", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03073", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03074", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03075", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03076", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03077", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03078", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03079", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03080", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03081", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03082", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03083", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03084", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03085", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03086", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03087", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03088", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03089", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03090", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03091", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03092", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03093", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03094", + "gapId": "keymap-item:View3D Dolly Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03095", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03096", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03097", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03098", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03099", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03100", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03101", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03102", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03103", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03104", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03105", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03106", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03107", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03108", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03109", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03110", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03111", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03112", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03113", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03114", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03115", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03116", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03117", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03118", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03119", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03120", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03121", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03122", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03123", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03124", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03125", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03126", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03127", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03128", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03129", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03130", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03131", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03132", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03133", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03134", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03135", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03136", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03137", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03138", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03139", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03140", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03141", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03142", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03143", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03144", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03145", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03146", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03147", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03148", + "gapId": "keymap-item:View3D Move Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03149", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03150", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03151", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03152", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03153", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03154", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03155", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03156", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03157", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03158", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03159", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03160", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03161", + "gapId": "keymap-item:View3D Rotate Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03162", + "gapId": "keymap-item:View3D Rotate Modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03163", + "gapId": "keymap-item:View3D Rotate Modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03164", + "gapId": "keymap-item:View3D Rotate Modal:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03165", + "gapId": "keymap-item:View3D Rotate Modal:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03166", + "gapId": "keymap-item:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03167", + "gapId": "keymap-item:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03168", + "gapId": "keymap-item:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03169", + "gapId": "keymap-item:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03170", + "gapId": "keymap-item:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03171", + "gapId": "keymap-item:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03172", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03173", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03174", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03175", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03176", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03177", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03178", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03179", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03180", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03181", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03182", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03183", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03184", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03185", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03186", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03187", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03188", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03189", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03190", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03191", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03192", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03193", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03194", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03195", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03196", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03197", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03198", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03199", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03200", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03201", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03202", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03203", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03204", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03205", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03206", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03207", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03208", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03209", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03210", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03211", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03212", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03213", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03214", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03215", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03216", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03217", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03218", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03219", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03220", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03221", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03222", + "gapId": "keymap-item:View3D Zoom Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03223", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03224", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03225", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03226", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03227", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03228", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03229", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03230", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03231", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03232", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03233", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03234", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03235", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03236", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03237", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03238", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03239", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03240", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03241", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03242", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03243", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03244", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03245", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03246", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03247", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03248", + "gapId": "keymap-item:Window:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03249", + "gapId": "keymap-item:Window:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03250", + "gapId": "keymap-item:Window:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03251", + "gapId": "keymap-item:Window:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03252", + "gapId": "keymap-item:Window:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03253", + "gapId": "keymap-item:Window:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03254", + "gapId": "keymap-item:Window:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03255", + "gapId": "keymap-item:Window:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03256", + "gapId": "keymap-item:Window:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03257", + "gapId": "keymap-item:Window:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03258", + "gapId": "keymap-item:Window:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03259", + "gapId": "keymap-item:Window:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03260", + "gapId": "keymap-item:Window:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03261", + "gapId": "keymap-item:Window:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03262", + "gapId": "keymap-item:Window:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03263", + "gapId": "keymap-item:Window:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03264", + "gapId": "keymap-item:Window:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03265", + "gapId": "keymap-item:Window:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03266", + "gapId": "keymap-item:Window:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03267", + "gapId": "keymap-item:Window:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03268", + "gapId": "keymap-item:Window:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03269", + "gapId": "keymap-item:Window:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03270", + "gapId": "keymap-item:Window:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03271", + "gapId": "keymap-item:Window:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03272", + "gapId": "keymap-item:Window:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03273", + "gapId": "keymap-item:Window:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03274", + "gapId": "keymap-item:Window:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03275", + "gapId": "keymap-item:Window:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03276", + "gapId": "keymap-item:Window:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03277", + "gapId": "keymap-item:Window:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03278", + "gapId": "keymap-item:Window:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03279", + "gapId": "keymap-item:Window:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03280", + "gapId": "keymap-item:Window:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03281", + "gapId": "keymap:3D View Generic:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03282", + "gapId": "keymap:3D View Tool: Bend:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03283", + "gapId": "keymap:3D View Tool: Breakdowner:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03284", + "gapId": "keymap:3D View Tool: Cursor:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03285", + "gapId": "keymap:3D View Tool: Edit Armature, B-Bone Size:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03286", + "gapId": "keymap:3D View Tool: Edit Armature, Bone Envelope:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03287", + "gapId": "keymap:3D View Tool: Edit Armature, Extrude to Cursor:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03288", + "gapId": "keymap:3D View Tool: Edit Armature, Extrude:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03289", + "gapId": "keymap:3D View Tool: Edit Armature, Roll:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03290", + "gapId": "keymap:3D View Tool: Edit Curve, Curve Pen:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03291", + "gapId": "keymap:3D View Tool: Edit Curve, Draw:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03292", + "gapId": "keymap:3D View Tool: Edit Curve, Extrude to Cursor:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03293", + "gapId": "keymap:3D View Tool: Edit Curve, Extrude:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03294", + "gapId": "keymap:3D View Tool: Edit Curve, Radius:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03295", + "gapId": "keymap:3D View Tool: Edit Curve, Randomize:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03296", + "gapId": "keymap:3D View Tool: Edit Curve, Tilt:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03297", + "gapId": "keymap:3D View Tool: Edit Curves, Draw:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03298", + "gapId": "keymap:3D View Tool: Edit Curves, Pen:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03299", + "gapId": "keymap:3D View Tool: Edit Grease Pencil, Gradient:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03300", + "gapId": "keymap:3D View Tool: Edit Grease Pencil, Interpolate:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03301", + "gapId": "keymap:3D View Tool: Edit Grease Pencil, Pen:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03302", + "gapId": "keymap:3D View Tool: Edit Mesh, Bevel:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03303", + "gapId": "keymap:3D View Tool: Edit Mesh, Bisect:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03304", + "gapId": "keymap:3D View Tool: Edit Mesh, Edge Slide:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03305", + "gapId": "keymap:3D View Tool: Edit Mesh, Extrude Along Normals:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03306", + "gapId": "keymap:3D View Tool: Edit Mesh, Extrude Individual:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03307", + "gapId": "keymap:3D View Tool: Edit Mesh, Extrude Manifold:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03308", + "gapId": "keymap:3D View Tool: Edit Mesh, Extrude Region:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03309", + "gapId": "keymap:3D View Tool: Edit Mesh, Extrude to Cursor:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03310", + "gapId": "keymap:3D View Tool: Edit Mesh, Inset Faces:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03311", + "gapId": "keymap:3D View Tool: Edit Mesh, Knife:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03312", + "gapId": "keymap:3D View Tool: Edit Mesh, Loop Cut:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03313", + "gapId": "keymap:3D View Tool: Edit Mesh, Offset Edge Loop Cut:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03314", + "gapId": "keymap:3D View Tool: Edit Mesh, Poly Build:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03315", + "gapId": "keymap:3D View Tool: Edit Mesh, Push/Pull:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03316", + "gapId": "keymap:3D View Tool: Edit Mesh, Randomize:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03317", + "gapId": "keymap:3D View Tool: Edit Mesh, Rip Edge:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03318", + "gapId": "keymap:3D View Tool: Edit Mesh, Rip Region:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03319", + "gapId": "keymap:3D View Tool: Edit Mesh, Shrink/Fatten:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03320", + "gapId": "keymap:3D View Tool: Edit Mesh, Smooth:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03321", + "gapId": "keymap:3D View Tool: Edit Mesh, Spin Duplicates:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03322", + "gapId": "keymap:3D View Tool: Edit Mesh, Spin:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03323", + "gapId": "keymap:3D View Tool: Edit Mesh, To Sphere:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03324", + "gapId": "keymap:3D View Tool: Edit Mesh, Vertex Slide:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03325", + "gapId": "keymap:3D View Tool: Edit Text, Select Text:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03326", + "gapId": "keymap:3D View Tool: Measure:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03327", + "gapId": "keymap:3D View Tool: Move:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03328", + "gapId": "keymap:3D View Tool: Object, Add Primitive:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03329", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Arc:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03330", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Box:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03331", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Circle:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03332", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Curve:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03333", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Eyedropper:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03334", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Interpolate:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03335", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Line:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03336", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Polyline:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03337", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Trim:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03338", + "gapId": "keymap:3D View Tool: Paint Weight, Gradient:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03339", + "gapId": "keymap:3D View Tool: Paint Weight, Sample Vertex Group:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03340", + "gapId": "keymap:3D View Tool: Paint Weight, Sample Weight:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03341", + "gapId": "keymap:3D View Tool: Push:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03342", + "gapId": "keymap:3D View Tool: Relax:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03343", + "gapId": "keymap:3D View Tool: Rotate:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03344", + "gapId": "keymap:3D View Tool: Scale:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03345", + "gapId": "keymap:3D View Tool: Sculpt, Box Face Set:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03346", + "gapId": "keymap:3D View Tool: Sculpt, Box Hide:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03347", + "gapId": "keymap:3D View Tool: Sculpt, Box Mask:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03348", + "gapId": "keymap:3D View Tool: Sculpt, Box Trim:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03349", + "gapId": "keymap:3D View Tool: Sculpt, Cloth Filter:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03350", + "gapId": "keymap:3D View Tool: Sculpt, Color Filter:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03351", + "gapId": "keymap:3D View Tool: Sculpt, Face Set Edit:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03352", + "gapId": "keymap:3D View Tool: Sculpt, Lasso Face Set:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03353", + "gapId": "keymap:3D View Tool: Sculpt, Lasso Hide:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03354", + "gapId": "keymap:3D View Tool: Sculpt, Lasso Mask:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03355", + "gapId": "keymap:3D View Tool: Sculpt, Lasso Trim:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03356", + "gapId": "keymap:3D View Tool: Sculpt, Line Face Set:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03357", + "gapId": "keymap:3D View Tool: Sculpt, Line Hide:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03358", + "gapId": "keymap:3D View Tool: Sculpt, Line Mask:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03359", + "gapId": "keymap:3D View Tool: Sculpt, Line Project:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03360", + "gapId": "keymap:3D View Tool: Sculpt, Line Trim:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03361", + "gapId": "keymap:3D View Tool: Sculpt, Mask by Color:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03362", + "gapId": "keymap:3D View Tool: Sculpt, Mesh Filter:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03363", + "gapId": "keymap:3D View Tool: Sculpt, Polyline Face Set:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03364", + "gapId": "keymap:3D View Tool: Sculpt, Polyline Hide:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03365", + "gapId": "keymap:3D View Tool: Sculpt, Polyline Mask:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03366", + "gapId": "keymap:3D View Tool: Sculpt, Polyline Trim:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03367", + "gapId": "keymap:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03368", + "gapId": "keymap:3D View Tool: Select Box:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03369", + "gapId": "keymap:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03370", + "gapId": "keymap:3D View Tool: Select Circle:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03371", + "gapId": "keymap:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03372", + "gapId": "keymap:3D View Tool: Select Lasso:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03373", + "gapId": "keymap:3D View Tool: Shear:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03374", + "gapId": "keymap:3D View Tool: Transform:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03375", + "gapId": "keymap:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03376", + "gapId": "keymap:3D View Tool: Tweak:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03377", + "gapId": "keymap:3D View:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03378", + "gapId": "keymap:Animation Channels:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03379", + "gapId": "keymap:Animation:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03380", + "gapId": "keymap:Armature:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03381", + "gapId": "keymap:Bevel Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03382", + "gapId": "keymap:Clip Dopesheet Editor:CLIP_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03383", + "gapId": "keymap:Clip Editor:CLIP_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03384", + "gapId": "keymap:Clip Graph Editor:CLIP_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03385", + "gapId": "keymap:Clip Time Scrub:CLIP_EDITOR:PREVIEW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03386", + "gapId": "keymap:Clip:CLIP_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03387", + "gapId": "keymap:Console:CONSOLE:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03388", + "gapId": "keymap:Curve Pen Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03389", + "gapId": "keymap:Curve:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03390", + "gapId": "keymap:Curves:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03391", + "gapId": "keymap:Custom Normals Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03392", + "gapId": "keymap:Dopesheet Generic:DOPESHEET_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03393", + "gapId": "keymap:Dopesheet:DOPESHEET_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03394", + "gapId": "keymap:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03395", + "gapId": "keymap:Eyedropper Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03396", + "gapId": "keymap:File Browser Buttons:FILE_BROWSER:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03397", + "gapId": "keymap:File Browser Main:FILE_BROWSER:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03398", + "gapId": "keymap:File Browser:FILE_BROWSER:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03399", + "gapId": "keymap:Fill Tool Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03400", + "gapId": "keymap:Font:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03401", + "gapId": "keymap:Frames:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03402", + "gapId": "keymap:Generic Gizmo Click Drag:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03403", + "gapId": "keymap:Generic Gizmo Drag:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03404", + "gapId": "keymap:Generic Gizmo Maybe Drag:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03405", + "gapId": "keymap:Generic Gizmo Select:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03406", + "gapId": "keymap:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03407", + "gapId": "keymap:Generic Gizmo:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03408", + "gapId": "keymap:Generic Tool: Annotate Eraser:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03409", + "gapId": "keymap:Generic Tool: Annotate Line:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03410", + "gapId": "keymap:Generic Tool: Annotate Polygon:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03411", + "gapId": "keymap:Generic Tool: Annotate:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03412", + "gapId": "keymap:Gesture Box:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03413", + "gapId": "keymap:Gesture Lasso:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03414", + "gapId": "keymap:Gesture Polyline:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03415", + "gapId": "keymap:Gesture Straight Line:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03416", + "gapId": "keymap:Gesture Zoom Border:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03417", + "gapId": "keymap:Graph Editor Generic:GRAPH_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03418", + "gapId": "keymap:Graph Editor:GRAPH_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03419", + "gapId": "keymap:Grease Pencil Brush Stroke:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03420", + "gapId": "keymap:Grease Pencil Draw Mode:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03421", + "gapId": "keymap:Grease Pencil Edit Mode:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03422", + "gapId": "keymap:Grease Pencil Fill Tool:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03423", + "gapId": "keymap:Grease Pencil Sculpt Mode:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03424", + "gapId": "keymap:Grease Pencil Selection:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03425", + "gapId": "keymap:Grease Pencil Vertex Paint:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03426", + "gapId": "keymap:Grease Pencil Weight Paint:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03427", + "gapId": "keymap:Grease Pencil:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03428", + "gapId": "keymap:Image Editor Tool: Mask, Box:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03429", + "gapId": "keymap:Image Editor Tool: Mask, Circle:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03430", + "gapId": "keymap:Image Editor Tool: Mask, Cursor:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03431", + "gapId": "keymap:Image Editor Tool: Mask, Move:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03432", + "gapId": "keymap:Image Editor Tool: Mask, Rotate:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03433", + "gapId": "keymap:Image Editor Tool: Mask, Scale:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03434", + "gapId": "keymap:Image Editor Tool: Mask, Select Box (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03435", + "gapId": "keymap:Image Editor Tool: Mask, Select Box:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03436", + "gapId": "keymap:Image Editor Tool: Mask, Select Circle (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03437", + "gapId": "keymap:Image Editor Tool: Mask, Select Circle:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03438", + "gapId": "keymap:Image Editor Tool: Mask, Select Lasso (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03439", + "gapId": "keymap:Image Editor Tool: Mask, Select Lasso:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03440", + "gapId": "keymap:Image Editor Tool: Mask, Transform:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03441", + "gapId": "keymap:Image Editor Tool: Mask, Tweak (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03442", + "gapId": "keymap:Image Editor Tool: Mask, Tweak:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03443", + "gapId": "keymap:Image Editor Tool: Sample:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03444", + "gapId": "keymap:Image Editor Tool: Uv, Cursor:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03445", + "gapId": "keymap:Image Editor Tool: Uv, Grab:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03446", + "gapId": "keymap:Image Editor Tool: Uv, Move:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03447", + "gapId": "keymap:Image Editor Tool: Uv, Pinch:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03448", + "gapId": "keymap:Image Editor Tool: Uv, Relax:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03449", + "gapId": "keymap:Image Editor Tool: Uv, Rip Region:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03450", + "gapId": "keymap:Image Editor Tool: Uv, Rotate:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03451", + "gapId": "keymap:Image Editor Tool: Uv, Scale:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03452", + "gapId": "keymap:Image Editor Tool: Uv, Select Box (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03453", + "gapId": "keymap:Image Editor Tool: Uv, Select Box:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03454", + "gapId": "keymap:Image Editor Tool: Uv, Select Circle (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03455", + "gapId": "keymap:Image Editor Tool: Uv, Select Circle:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03456", + "gapId": "keymap:Image Editor Tool: Uv, Select Lasso (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03457", + "gapId": "keymap:Image Editor Tool: Uv, Select Lasso:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03458", + "gapId": "keymap:Image Editor Tool: Uv, Tweak (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03459", + "gapId": "keymap:Image Editor Tool: Uv, Tweak:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03460", + "gapId": "keymap:Image Generic:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03461", + "gapId": "keymap:Image Paint:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03462", + "gapId": "keymap:Image:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03463", + "gapId": "keymap:Info:INFO:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03464", + "gapId": "keymap:Interpolate Tool Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03465", + "gapId": "keymap:Knife Tool Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03466", + "gapId": "keymap:Lattice:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03467", + "gapId": "keymap:Markers:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03468", + "gapId": "keymap:Mask Editing:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03469", + "gapId": "keymap:Mesh Filter Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03470", + "gapId": "keymap:Mesh:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03471", + "gapId": "keymap:Metaball:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03472", + "gapId": "keymap:NLA Editor:NLA_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03473", + "gapId": "keymap:NLA Generic:NLA_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03474", + "gapId": "keymap:NLA Tracks:NLA_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03475", + "gapId": "keymap:Node Editor:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03476", + "gapId": "keymap:Node Generic:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03477", + "gapId": "keymap:Node Link Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03478", + "gapId": "keymap:Node Resize Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03479", + "gapId": "keymap:Node Tool: Add Reroute:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03480", + "gapId": "keymap:Node Tool: Links Cut:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03481", + "gapId": "keymap:Node Tool: Mute Links:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03482", + "gapId": "keymap:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03483", + "gapId": "keymap:Node Tool: Select Box:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03484", + "gapId": "keymap:Node Tool: Select Circle (fallback):NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03485", + "gapId": "keymap:Node Tool: Select Circle:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03486", + "gapId": "keymap:Node Tool: Select Lasso (fallback):NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03487", + "gapId": "keymap:Node Tool: Select Lasso:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03488", + "gapId": "keymap:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03489", + "gapId": "keymap:Node Tool: Tweak:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03490", + "gapId": "keymap:Object Mode:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03491", + "gapId": "keymap:Object Non-modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03492", + "gapId": "keymap:Outliner:OUTLINER:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03493", + "gapId": "keymap:Paint Curve:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03494", + "gapId": "keymap:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03495", + "gapId": "keymap:Paint Stroke Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03496", + "gapId": "keymap:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03497", + "gapId": "keymap:Particle:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03498", + "gapId": "keymap:Pen Tool Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03499", + "gapId": "keymap:Point Cloud:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03500", + "gapId": "keymap:Pose:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03501", + "gapId": "keymap:Preferences:PREFERENCES:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03502", + "gapId": "keymap:Preferences_nav:PREFERENCES:UI", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03503", + "gapId": "keymap:Preview Tool: Cursor:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03504", + "gapId": "keymap:Preview Tool: Move:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03505", + "gapId": "keymap:Preview Tool: Rotate:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03506", + "gapId": "keymap:Preview Tool: Sample:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03507", + "gapId": "keymap:Preview Tool: Scale:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03508", + "gapId": "keymap:Preview Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03509", + "gapId": "keymap:Preview Tool: Select Box:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03510", + "gapId": "keymap:Preview Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03511", + "gapId": "keymap:Preview Tool: Select Circle:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03512", + "gapId": "keymap:Preview Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03513", + "gapId": "keymap:Preview Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03514", + "gapId": "keymap:Preview Tool: Tweak (fallback):SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03515", + "gapId": "keymap:Preview Tool: Tweak:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03516", + "gapId": "keymap:Preview:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03517", + "gapId": "keymap:Primitive Tool Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03518", + "gapId": "keymap:Property Editor:PROPERTIES:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03519", + "gapId": "keymap:Region Context Menu:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03520", + "gapId": "keymap:Screen Editing:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03521", + "gapId": "keymap:Screen:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03522", + "gapId": "keymap:Sculpt Curves:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03523", + "gapId": "keymap:Sculpt Expand Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03524", + "gapId": "keymap:Sculpt:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03525", + "gapId": "keymap:Sequencer Channels:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03526", + "gapId": "keymap:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03527", + "gapId": "keymap:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03528", + "gapId": "keymap:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03529", + "gapId": "keymap:Sequencer Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03530", + "gapId": "keymap:Sequencer Tool: Select Circle:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03531", + "gapId": "keymap:Sequencer Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03532", + "gapId": "keymap:Sequencer Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03533", + "gapId": "keymap:Sequencer Tool: Slip:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03534", + "gapId": "keymap:Sequencer:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03535", + "gapId": "keymap:Slip Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03536", + "gapId": "keymap:Spreadsheet Generic:SPREADSHEET:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03537", + "gapId": "keymap:Standard Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03538", + "gapId": "keymap:Text Generic:TEXT_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03539", + "gapId": "keymap:Text:TEXT_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03540", + "gapId": "keymap:Time Scrub:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03541", + "gapId": "keymap:Toolbar Popup:EMPTY:TEMPORARY", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03542", + "gapId": "keymap:Transform Axis Target Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03543", + "gapId": "keymap:Transform Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03544", + "gapId": "keymap:UV Editor:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03545", + "gapId": "keymap:User Interface:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03546", + "gapId": "keymap:Vertex Paint:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03547", + "gapId": "keymap:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03548", + "gapId": "keymap:View2D Buttons List:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03549", + "gapId": "keymap:View2D:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03550", + "gapId": "keymap:View3D Dolly Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03551", + "gapId": "keymap:View3D Fly Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03552", + "gapId": "keymap:View3D Gesture Circle:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03553", + "gapId": "keymap:View3D Move Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03554", + "gapId": "keymap:View3D Placement Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03555", + "gapId": "keymap:View3D Rotate Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03556", + "gapId": "keymap:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03557", + "gapId": "keymap:View3D Walk Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03558", + "gapId": "keymap:View3D Zoom Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03559", + "gapId": "keymap:Weight Paint:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03560", + "gapId": "keymap:Window:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03561", + "gapId": "region:ASSET_SHELF", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03562", + "gapId": "region:ASSET_SHELF_HEADER", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03563", + "gapId": "region:CHANNELS", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03564", + "gapId": "region:EXECUTE", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03565", + "gapId": "region:FOOTER", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03566", + "gapId": "region:HEADER", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03567", + "gapId": "region:HUD", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03568", + "gapId": "region:NAVIGATION_BAR", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03569", + "gapId": "region:PREVIEW", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03570", + "gapId": "region:SCRUBBING", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03571", + "gapId": "region:TEMPORARY", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03572", + "gapId": "region:TOOLS", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03573", + "gapId": "region:TOOL_HEADER", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03574", + "gapId": "region:TOOL_PROPS", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03575", + "gapId": "region:UI", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03576", + "gapId": "region:WINDOW", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03577", + "gapId": "region:XR", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03578", + "gapId": "space-class:SpaceClipEditor", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03579", + "gapId": "space-class:SpaceConsole", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03580", + "gapId": "space-class:SpaceDopeSheetEditor", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03581", + "gapId": "space-class:SpaceFileBrowser", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03582", + "gapId": "space-class:SpaceGraphEditor", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03583", + "gapId": "space-class:SpaceImageEditor", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03584", + "gapId": "space-class:SpaceInfo", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03585", + "gapId": "space-class:SpaceNLA", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03586", + "gapId": "space-class:SpaceNodeEditor", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03587", + "gapId": "space-class:SpaceOutliner", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03588", + "gapId": "space-class:SpacePreferences", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03589", + "gapId": "space-class:SpaceProperties", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03590", + "gapId": "space-class:SpaceSequenceEditor", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03591", + "gapId": "space-class:SpaceSpreadsheet", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03592", + "gapId": "space-class:SpaceTextEditor", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03593", + "gapId": "space-class:SpaceView3D", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03594", + "gapId": "space:CLIP_EDITOR", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03595", + "gapId": "space:CONSOLE", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03596", + "gapId": "space:DOPESHEET_EDITOR", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03597", + "gapId": "space:EMPTY", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03598", + "gapId": "space:FILE_BROWSER", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03599", + "gapId": "space:GRAPH_EDITOR", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03600", + "gapId": "space:IMAGE_EDITOR", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03601", + "gapId": "space:INFO", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03602", + "gapId": "space:NLA_EDITOR", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03603", + "gapId": "space:NODE_EDITOR", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03604", + "gapId": "space:OUTLINER", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03605", + "gapId": "space:PREFERENCES", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03606", + "gapId": "space:PROPERTIES", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03607", + "gapId": "space:SEQUENCE_EDITOR", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03608", + "gapId": "space:SPREADSHEET", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03609", + "gapId": "space:STATUSBAR", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03610", + "gapId": "space:TEXT_EDITOR", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03611", + "gapId": "space:TOPBAR", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03612", + "gapId": "space:VIEW_3D", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03613", + "gapId": "workspace:EDIT", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03614", + "gapId": "workspace:EDIT_GPENCIL", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03615", + "gapId": "workspace:OBJECT", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03616", + "gapId": "workspace:PAINT_GREASE_PENCIL", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03617", + "gapId": "workspace:PARTICLE_EDIT", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03618", + "gapId": "workspace:POSE", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03619", + "gapId": "workspace:SCULPT", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03620", + "gapId": "workspace:SCULPT_GREASE_PENCIL", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03621", + "gapId": "workspace:TEXTURE_PAINT", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03622", + "gapId": "workspace:VERTEX_GREASE_PENCIL", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03623", + "gapId": "workspace:VERTEX_PAINT", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03624", + "gapId": "workspace:WEIGHT_GREASE_PENCIL", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03625", + "gapId": "workspace:WEIGHT_PAINT", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00001", + "gapId": "rna:Depsgraph:Depsgraph", + "ownerFamily": "Depsgraph", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00002", + "gapId": "rna:Depsgraph:DepsgraphObjectInstance", + "ownerFamily": "Depsgraph", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00003", + "gapId": "rna:Depsgraph:DepsgraphUpdate", + "ownerFamily": "Depsgraph", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00004", + "gapId": "rna:Scene:Camera", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00005", + "gapId": "rna:Scene:Collection", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00006", + "gapId": "rna:Scene:Constraint", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00007", + "gapId": "rna:Scene:LayerCollection", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00008", + "gapId": "rna:Scene:Light", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00009", + "gapId": "rna:Scene:Material", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00010", + "gapId": "rna:Scene:Modifier", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00011", + "gapId": "rna:Scene:NodeTree", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00012", + "gapId": "rna:Scene:Object", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00013", + "gapId": "rna:Scene:RenderSettings", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00014", + "gapId": "rna:Scene:Scene", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00015", + "gapId": "rna:Scene:Screen", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00016", + "gapId": "rna:Scene:ViewLayer", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00017", + "gapId": "rna:Scene:Window", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00018", + "gapId": "rna:Scene:WindowManager", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00019", + "gapId": "rna:Scene:World", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + } + ] +} diff --git a/tests/golden/corrective/C5-003/legacy-evidence-classification.json b/tests/golden/corrective/C5-003/legacy-evidence-classification.json new file mode 100644 index 00000000..19e0176e --- /dev/null +++ b/tests/golden/corrective/C5-003/legacy-evidence-classification.json @@ -0,0 +1,62102 @@ +[ + { + "id": "M16-GAP-00001", + "gapId": "datablock:Action", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00002", + "gapId": "datablock:Armature", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00003", + "gapId": "datablock:Brush", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00004", + "gapId": "datablock:Camera", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00005", + "gapId": "datablock:Collection", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00006", + "gapId": "datablock:Curve", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00007", + "gapId": "datablock:Curves", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00008", + "gapId": "datablock:FreestyleLineStyle", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00009", + "gapId": "datablock:GreasePencil", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00010", + "gapId": "datablock:Lattice", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00011", + "gapId": "datablock:Library", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00012", + "gapId": "datablock:Light", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00013", + "gapId": "datablock:Material", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00014", + "gapId": "datablock:Mesh", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00015", + "gapId": "datablock:MetaBall", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00016", + "gapId": "datablock:NodeTree", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00017", + "gapId": "datablock:Object", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00018", + "gapId": "datablock:ParticleSettings", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00019", + "gapId": "datablock:PointCloud", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00020", + "gapId": "datablock:Scene", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00021", + "gapId": "datablock:Screen", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00022", + "gapId": "datablock:Sound", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00023", + "gapId": "datablock:Speaker", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00024", + "gapId": "datablock:Text", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00025", + "gapId": "datablock:Texture", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00026", + "gapId": "datablock:Volume", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00027", + "gapId": "datablock:WindowManager", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00028", + "gapId": "datablock:WorkSpace", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00029", + "gapId": "datablock:World", + "ownerFamily": "RNA_DATABLOCK", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00030", + "gapId": "modifier:ARMATURE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00031", + "gapId": "modifier:ARRAY", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00032", + "gapId": "modifier:BEVEL", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00033", + "gapId": "modifier:BOOLEAN", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00034", + "gapId": "modifier:BUILD", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00035", + "gapId": "modifier:CAST", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00036", + "gapId": "modifier:CLOTH", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00037", + "gapId": "modifier:COLLISION", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00038", + "gapId": "modifier:CORRECTIVE_SMOOTH", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00039", + "gapId": "modifier:CURVE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00040", + "gapId": "modifier:DATA_TRANSFER", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00041", + "gapId": "modifier:DECIMATE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00042", + "gapId": "modifier:DISPLACE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00043", + "gapId": "modifier:DYNAMIC_PAINT", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00044", + "gapId": "modifier:EDGE_SPLIT", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00045", + "gapId": "modifier:EXPLODE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00046", + "gapId": "modifier:FLUID", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00047", + "gapId": "modifier:GREASE_PENCIL_ARMATURE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00048", + "gapId": "modifier:GREASE_PENCIL_ARRAY", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00049", + "gapId": "modifier:GREASE_PENCIL_BUILD", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00050", + "gapId": "modifier:GREASE_PENCIL_COLOR", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00051", + "gapId": "modifier:GREASE_PENCIL_DASH", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00052", + "gapId": "modifier:GREASE_PENCIL_ENVELOPE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00053", + "gapId": "modifier:GREASE_PENCIL_HOOK", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00054", + "gapId": "modifier:GREASE_PENCIL_LATTICE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00055", + "gapId": "modifier:GREASE_PENCIL_LENGTH", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00056", + "gapId": "modifier:GREASE_PENCIL_MIRROR", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00057", + "gapId": "modifier:GREASE_PENCIL_MULTIPLY", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00058", + "gapId": "modifier:GREASE_PENCIL_NOISE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00059", + "gapId": "modifier:GREASE_PENCIL_OFFSET", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00060", + "gapId": "modifier:GREASE_PENCIL_OPACITY", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00061", + "gapId": "modifier:GREASE_PENCIL_OUTLINE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00062", + "gapId": "modifier:GREASE_PENCIL_SHRINKWRAP", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00063", + "gapId": "modifier:GREASE_PENCIL_SIMPLIFY", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00064", + "gapId": "modifier:GREASE_PENCIL_SMOOTH", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00065", + "gapId": "modifier:GREASE_PENCIL_SUBDIV", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00066", + "gapId": "modifier:GREASE_PENCIL_TEXTURE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00067", + "gapId": "modifier:GREASE_PENCIL_THICKNESS", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00068", + "gapId": "modifier:GREASE_PENCIL_TIME", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00069", + "gapId": "modifier:GREASE_PENCIL_TINT", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00070", + "gapId": "modifier:GREASE_PENCIL_VERTEX_WEIGHT_ANGLE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00071", + "gapId": "modifier:GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00072", + "gapId": "modifier:HOOK", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00073", + "gapId": "modifier:LAPLACIANDEFORM", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00074", + "gapId": "modifier:LAPLACIANSMOOTH", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00075", + "gapId": "modifier:LATTICE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00076", + "gapId": "modifier:LINEART", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00077", + "gapId": "modifier:MASK", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00078", + "gapId": "modifier:MESH_CACHE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00079", + "gapId": "modifier:MESH_DEFORM", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00080", + "gapId": "modifier:MESH_SEQUENCE_CACHE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00081", + "gapId": "modifier:MESH_TO_VOLUME", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00082", + "gapId": "modifier:MIRROR", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00083", + "gapId": "modifier:MULTIRES", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00084", + "gapId": "modifier:NODES", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00085", + "gapId": "modifier:NORMAL_EDIT", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00086", + "gapId": "modifier:OCEAN", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00087", + "gapId": "modifier:PARTICLE_INSTANCE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00088", + "gapId": "modifier:PARTICLE_SYSTEM", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00089", + "gapId": "modifier:REMESH", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00090", + "gapId": "modifier:SCREW", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00091", + "gapId": "modifier:SHRINKWRAP", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00092", + "gapId": "modifier:SIMPLE_DEFORM", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00093", + "gapId": "modifier:SKIN", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00094", + "gapId": "modifier:SMOOTH", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00095", + "gapId": "modifier:SOFT_BODY", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00096", + "gapId": "modifier:SOLIDIFY", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00097", + "gapId": "modifier:SUBSURF", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00098", + "gapId": "modifier:SURFACE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00099", + "gapId": "modifier:SURFACE_DEFORM", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00100", + "gapId": "modifier:TRIANGULATE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00101", + "gapId": "modifier:UV_PROJECT", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00102", + "gapId": "modifier:UV_WARP", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00103", + "gapId": "modifier:VERTEX_WEIGHT_EDIT", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00104", + "gapId": "modifier:VERTEX_WEIGHT_MIX", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00105", + "gapId": "modifier:VERTEX_WEIGHT_PROXIMITY", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00106", + "gapId": "modifier:VOLUME_DISPLACE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00107", + "gapId": "modifier:VOLUME_TO_MESH", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00108", + "gapId": "modifier:WARP", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00109", + "gapId": "modifier:WAVE", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00110", + "gapId": "modifier:WEIGHTED_NORMAL", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00111", + "gapId": "modifier:WELD", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00112", + "gapId": "modifier:WIREFRAME", + "ownerFamily": "MODIFIER", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MODIFIER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00113", + "gapId": "operator:action.bake_keys", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00114", + "gapId": "operator:action.clean", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00115", + "gapId": "operator:action.clickselect", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00116", + "gapId": "operator:action.copy", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00117", + "gapId": "operator:action.delete", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00118", + "gapId": "operator:action.duplicate", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00119", + "gapId": "operator:action.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00120", + "gapId": "operator:action.easing_type", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00121", + "gapId": "operator:action.extrapolation_type", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00122", + "gapId": "operator:action.frame_jump", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00123", + "gapId": "operator:action.handle_type", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00124", + "gapId": "operator:action.interpolation_type", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00125", + "gapId": "operator:action.keyframe_insert", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00126", + "gapId": "operator:action.keyframe_type", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00127", + "gapId": "operator:action.markers_make_local", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00128", + "gapId": "operator:action.mirror", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00129", + "gapId": "operator:action.new", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00130", + "gapId": "operator:action.paste", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00131", + "gapId": "operator:action.previewrange_set", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00132", + "gapId": "operator:action.push_down", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00133", + "gapId": "operator:action.select_all", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00134", + "gapId": "operator:action.select_box", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00135", + "gapId": "operator:action.select_by_type", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00136", + "gapId": "operator:action.select_circle", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00137", + "gapId": "operator:action.select_column", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00138", + "gapId": "operator:action.select_lasso", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00139", + "gapId": "operator:action.select_leftright", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00140", + "gapId": "operator:action.select_less", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00141", + "gapId": "operator:action.select_linked", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00142", + "gapId": "operator:action.select_more", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00143", + "gapId": "operator:action.snap", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00144", + "gapId": "operator:action.stash", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00145", + "gapId": "operator:action.stash_and_create", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00146", + "gapId": "operator:action.unlink", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00147", + "gapId": "operator:action.view_all", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00148", + "gapId": "operator:action.view_frame", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00149", + "gapId": "operator:action.view_selected", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00150", + "gapId": "operator:anim.change_frame", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00151", + "gapId": "operator:anim.channel_select_keys", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00152", + "gapId": "operator:anim.channel_view_pick", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00153", + "gapId": "operator:anim.channels_bake", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00154", + "gapId": "operator:anim.channels_clean_empty", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00155", + "gapId": "operator:anim.channels_click", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00156", + "gapId": "operator:anim.channels_collapse", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00157", + "gapId": "operator:anim.channels_delete", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00158", + "gapId": "operator:anim.channels_editable_toggle", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00159", + "gapId": "operator:anim.channels_expand", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00160", + "gapId": "operator:anim.channels_fcurves_enable", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00161", + "gapId": "operator:anim.channels_group", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00162", + "gapId": "operator:anim.channels_move", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00163", + "gapId": "operator:anim.channels_rename", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00164", + "gapId": "operator:anim.channels_select_all", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00165", + "gapId": "operator:anim.channels_select_box", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00166", + "gapId": "operator:anim.channels_select_filter", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00167", + "gapId": "operator:anim.channels_setting_disable", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00168", + "gapId": "operator:anim.channels_setting_enable", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00169", + "gapId": "operator:anim.channels_setting_toggle", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00170", + "gapId": "operator:anim.channels_ungroup", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00171", + "gapId": "operator:anim.channels_view_selected", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00172", + "gapId": "operator:anim.clear_useless_actions", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00173", + "gapId": "operator:anim.copy_driver_button", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00174", + "gapId": "operator:anim.driver_button_add", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00175", + "gapId": "operator:anim.driver_button_edit", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00176", + "gapId": "operator:anim.driver_button_remove", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00177", + "gapId": "operator:anim.end_frame_set", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00178", + "gapId": "operator:anim.keyframe_clear_button", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00179", + "gapId": "operator:anim.keyframe_clear_v3d", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00180", + "gapId": "operator:anim.keyframe_clear_vse", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00181", + "gapId": "operator:anim.keyframe_delete", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00182", + "gapId": "operator:anim.keyframe_delete_button", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00183", + "gapId": "operator:anim.keyframe_delete_by_name", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00184", + "gapId": "operator:anim.keyframe_delete_v3d", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00185", + "gapId": "operator:anim.keyframe_delete_vse", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00186", + "gapId": "operator:anim.keyframe_insert", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00187", + "gapId": "operator:anim.keyframe_insert_button", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00188", + "gapId": "operator:anim.keyframe_insert_by_name", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00189", + "gapId": "operator:anim.keyframe_insert_menu", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00190", + "gapId": "operator:anim.keying_set_active_set", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00191", + "gapId": "operator:anim.keying_set_add", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00192", + "gapId": "operator:anim.keying_set_export", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00193", + "gapId": "operator:anim.keying_set_path_add", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00194", + "gapId": "operator:anim.keying_set_path_remove", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00195", + "gapId": "operator:anim.keying_set_remove", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00196", + "gapId": "operator:anim.keyingset_button_add", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00197", + "gapId": "operator:anim.keyingset_button_remove", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00198", + "gapId": "operator:anim.merge_animation", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00199", + "gapId": "operator:anim.paste_driver_button", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00200", + "gapId": "operator:anim.previewrange_clear", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00201", + "gapId": "operator:anim.previewrange_set", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00202", + "gapId": "operator:anim.replace_action", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00203", + "gapId": "operator:anim.replace_action_new", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00204", + "gapId": "operator:anim.scene_range_frame", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00205", + "gapId": "operator:anim.separate_slots", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00206", + "gapId": "operator:anim.slot_channels_move_to_new_action", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00207", + "gapId": "operator:anim.slot_new_for_id", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00208", + "gapId": "operator:anim.slot_unassign_from_constraint", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00209", + "gapId": "operator:anim.slot_unassign_from_id", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00210", + "gapId": "operator:anim.slot_unassign_from_nla_strip", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00211", + "gapId": "operator:anim.start_frame_set", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00212", + "gapId": "operator:anim.update_animated_transform_constraints", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00213", + "gapId": "operator:anim.version_bone_hide_property", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00214", + "gapId": "operator:anim.view_curve_in_graph_editor", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00215", + "gapId": "operator:armature.align", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00216", + "gapId": "operator:armature.assign_to_collection", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00217", + "gapId": "operator:armature.autoside_names", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00218", + "gapId": "operator:armature.bone_primitive_add", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00219", + "gapId": "operator:armature.calculate_roll", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00220", + "gapId": "operator:armature.click_extrude", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00221", + "gapId": "operator:armature.collection_add", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00222", + "gapId": "operator:armature.collection_assign", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00223", + "gapId": "operator:armature.collection_create_and_assign", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00224", + "gapId": "operator:armature.collection_deselect", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00225", + "gapId": "operator:armature.collection_move", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00226", + "gapId": "operator:armature.collection_remove", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00227", + "gapId": "operator:armature.collection_remove_unused", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00228", + "gapId": "operator:armature.collection_select", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00229", + "gapId": "operator:armature.collection_show_all", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00230", + "gapId": "operator:armature.collection_unassign", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00231", + "gapId": "operator:armature.collection_unassign_named", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00232", + "gapId": "operator:armature.collection_unsolo_all", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00233", + "gapId": "operator:armature.copy_bone_color_to_selected", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00234", + "gapId": "operator:armature.delete", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00235", + "gapId": "operator:armature.dissolve", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00236", + "gapId": "operator:armature.duplicate", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00237", + "gapId": "operator:armature.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00238", + "gapId": "operator:armature.duplicate_rename", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00239", + "gapId": "operator:armature.extrude", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00240", + "gapId": "operator:armature.extrude_forked", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00241", + "gapId": "operator:armature.extrude_move", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00242", + "gapId": "operator:armature.fill", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00243", + "gapId": "operator:armature.flip_names", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00244", + "gapId": "operator:armature.hide", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00245", + "gapId": "operator:armature.move_to_collection", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00246", + "gapId": "operator:armature.parent_clear", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00247", + "gapId": "operator:armature.parent_set", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00248", + "gapId": "operator:armature.reveal", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00249", + "gapId": "operator:armature.roll_clear", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00250", + "gapId": "operator:armature.select_all", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00251", + "gapId": "operator:armature.select_hierarchy", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00252", + "gapId": "operator:armature.select_less", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00253", + "gapId": "operator:armature.select_linked", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00254", + "gapId": "operator:armature.select_linked_pick", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00255", + "gapId": "operator:armature.select_mirror", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00256", + "gapId": "operator:armature.select_more", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00257", + "gapId": "operator:armature.select_similar", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00258", + "gapId": "operator:armature.separate", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00259", + "gapId": "operator:armature.shortest_path_pick", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00260", + "gapId": "operator:armature.split", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00261", + "gapId": "operator:armature.subdivide", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00262", + "gapId": "operator:armature.switch_direction", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00263", + "gapId": "operator:armature.symmetrize", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00264", + "gapId": "operator:asset.asset_download", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00265", + "gapId": "operator:asset.assets_download", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00266", + "gapId": "operator:asset.assign_action", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00267", + "gapId": "operator:asset.browse_containing_blend_file", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00268", + "gapId": "operator:asset.bundle_install", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00269", + "gapId": "operator:asset.catalog_delete", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "ASSET_CATALOG", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00270", + "gapId": "operator:asset.catalog_new", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "ASSET_CATALOG", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00271", + "gapId": "operator:asset.catalog_redo", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "ASSET_CATALOG", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00272", + "gapId": "operator:asset.catalog_undo", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "ASSET_CATALOG", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00273", + "gapId": "operator:asset.catalog_undo_push", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "ASSET_CATALOG", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00274", + "gapId": "operator:asset.catalogs_save", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "ASSET_CATALOG", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00275", + "gapId": "operator:asset.clear", + "ownerFamily": "OPERATOR", + "state": "completed", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00276", + "gapId": "operator:asset.clear_single", + "ownerFamily": "OPERATOR", + "state": "active", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_completed_unclassified" + }, + { + "id": "M16-GAP-00277", + "gapId": "operator:asset.library_refresh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00278", + "gapId": "operator:asset.library_reload_listing", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00279", + "gapId": "operator:asset.mark", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00280", + "gapId": "operator:asset.mark_single", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00281", + "gapId": "operator:asset.open_containing_blend_file", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00282", + "gapId": "operator:asset.screenshot_preview", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00283", + "gapId": "operator:asset.tag_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00284", + "gapId": "operator:asset.tag_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00285", + "gapId": "operator:boid.rule_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00286", + "gapId": "operator:boid.rule_del", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00287", + "gapId": "operator:boid.rule_move_down", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00288", + "gapId": "operator:boid.rule_move_up", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00289", + "gapId": "operator:boid.state_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00290", + "gapId": "operator:boid.state_del", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00291", + "gapId": "operator:boid.state_move_down", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00292", + "gapId": "operator:boid.state_move_up", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00293", + "gapId": "operator:brush.asset_activate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00294", + "gapId": "operator:brush.asset_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00295", + "gapId": "operator:brush.asset_edit_metadata", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00296", + "gapId": "operator:brush.asset_load_preview", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00297", + "gapId": "operator:brush.asset_revert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00298", + "gapId": "operator:brush.asset_save", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00299", + "gapId": "operator:brush.asset_save_as", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00300", + "gapId": "operator:brush.scale_size", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00301", + "gapId": "operator:brush.stencil_control", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00302", + "gapId": "operator:brush.stencil_fit_image_aspect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00303", + "gapId": "operator:brush.stencil_reset_transform", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00304", + "gapId": "operator:buttons.clear_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00305", + "gapId": "operator:buttons.context_menu", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00306", + "gapId": "operator:buttons.directory_browse", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00307", + "gapId": "operator:buttons.file_browse", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00308", + "gapId": "operator:buttons.start_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00309", + "gapId": "operator:buttons.toggle_pin", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00310", + "gapId": "operator:cachefile.layer_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00311", + "gapId": "operator:cachefile.layer_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00312", + "gapId": "operator:cachefile.layer_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00313", + "gapId": "operator:cachefile.open", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00314", + "gapId": "operator:cachefile.reload", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00315", + "gapId": "operator:camera.preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00316", + "gapId": "operator:camera.safe_areas_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00317", + "gapId": "operator:clip.add_marker", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00318", + "gapId": "operator:clip.add_marker_at_click", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00319", + "gapId": "operator:clip.add_marker_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00320", + "gapId": "operator:clip.add_marker_slide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00321", + "gapId": "operator:clip.apply_solution_scale", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00322", + "gapId": "operator:clip.average_tracks", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00323", + "gapId": "operator:clip.bundles_to_mesh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00324", + "gapId": "operator:clip.camera_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00325", + "gapId": "operator:clip.change_frame", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00326", + "gapId": "operator:clip.clean_tracks", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00327", + "gapId": "operator:clip.clear_solution", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00328", + "gapId": "operator:clip.clear_track_path", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00329", + "gapId": "operator:clip.constraint_to_fcurve", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00330", + "gapId": "operator:clip.copy_tracks", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00331", + "gapId": "operator:clip.create_plane_track", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00332", + "gapId": "operator:clip.cursor_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00333", + "gapId": "operator:clip.delete_marker", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00334", + "gapId": "operator:clip.delete_proxy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00335", + "gapId": "operator:clip.delete_track", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00336", + "gapId": "operator:clip.detect_features", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00337", + "gapId": "operator:clip.disable_markers", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00338", + "gapId": "operator:clip.dopesheet_select_channel", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00339", + "gapId": "operator:clip.dopesheet_view_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00340", + "gapId": "operator:clip.filter_tracks", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00341", + "gapId": "operator:clip.frame_jump", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00342", + "gapId": "operator:clip.graph_center_current_frame", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00343", + "gapId": "operator:clip.graph_delete_curve", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00344", + "gapId": "operator:clip.graph_delete_knot", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00345", + "gapId": "operator:clip.graph_disable_markers", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00346", + "gapId": "operator:clip.graph_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00347", + "gapId": "operator:clip.graph_select_all_markers", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00348", + "gapId": "operator:clip.graph_select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00349", + "gapId": "operator:clip.graph_view_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00350", + "gapId": "operator:clip.hide_tracks", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00351", + "gapId": "operator:clip.hide_tracks_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00352", + "gapId": "operator:clip.join_tracks", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00353", + "gapId": "operator:clip.keyframe_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00354", + "gapId": "operator:clip.keyframe_insert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00355", + "gapId": "operator:clip.lock_selection_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00356", + "gapId": "operator:clip.lock_tracks", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00357", + "gapId": "operator:clip.mode_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00358", + "gapId": "operator:clip.new_image_from_plane_marker", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00359", + "gapId": "operator:clip.open", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00360", + "gapId": "operator:clip.paste_tracks", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00361", + "gapId": "operator:clip.prefetch", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00362", + "gapId": "operator:clip.rebuild_proxy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00363", + "gapId": "operator:clip.refine_markers", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00364", + "gapId": "operator:clip.reload", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00365", + "gapId": "operator:clip.select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00366", + "gapId": "operator:clip.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00367", + "gapId": "operator:clip.select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00368", + "gapId": "operator:clip.select_circle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00369", + "gapId": "operator:clip.select_grouped", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00370", + "gapId": "operator:clip.select_lasso", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00371", + "gapId": "operator:clip.set_active_clip", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00372", + "gapId": "operator:clip.set_axis", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00373", + "gapId": "operator:clip.set_origin", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00374", + "gapId": "operator:clip.set_plane", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00375", + "gapId": "operator:clip.set_scale", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00376", + "gapId": "operator:clip.set_scene_frames", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00377", + "gapId": "operator:clip.set_solution_scale", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00378", + "gapId": "operator:clip.set_solver_keyframe", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00379", + "gapId": "operator:clip.set_viewport_background", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00380", + "gapId": "operator:clip.setup_tracking_scene", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00381", + "gapId": "operator:clip.slide_marker", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00382", + "gapId": "operator:clip.slide_plane_marker", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00383", + "gapId": "operator:clip.solve_camera", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00384", + "gapId": "operator:clip.stabilize_2d_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00385", + "gapId": "operator:clip.stabilize_2d_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00386", + "gapId": "operator:clip.stabilize_2d_rotation_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00387", + "gapId": "operator:clip.stabilize_2d_rotation_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00388", + "gapId": "operator:clip.stabilize_2d_rotation_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00389", + "gapId": "operator:clip.stabilize_2d_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00390", + "gapId": "operator:clip.track_color_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00391", + "gapId": "operator:clip.track_copy_color", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00392", + "gapId": "operator:clip.track_markers", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00393", + "gapId": "operator:clip.track_settings_as_default", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00394", + "gapId": "operator:clip.track_settings_to_track", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00395", + "gapId": "operator:clip.track_to_empty", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00396", + "gapId": "operator:clip.tracking_object_new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00397", + "gapId": "operator:clip.tracking_object_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00398", + "gapId": "operator:clip.tracking_settings_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00399", + "gapId": "operator:clip.update_image_from_plane_marker", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00400", + "gapId": "operator:clip.view_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00401", + "gapId": "operator:clip.view_center_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00402", + "gapId": "operator:clip.view_ndof", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00403", + "gapId": "operator:clip.view_pan", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00404", + "gapId": "operator:clip.view_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00405", + "gapId": "operator:clip.view_zoom", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00406", + "gapId": "operator:clip.view_zoom_in", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00407", + "gapId": "operator:clip.view_zoom_out", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00408", + "gapId": "operator:clip.view_zoom_ratio", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00409", + "gapId": "operator:cloth.preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00410", + "gapId": "operator:collection.create", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00411", + "gapId": "operator:collection.export_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00412", + "gapId": "operator:collection.exporter_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00413", + "gapId": "operator:collection.exporter_export", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00414", + "gapId": "operator:collection.exporter_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00415", + "gapId": "operator:collection.exporter_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00416", + "gapId": "operator:collection.importer_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00417", + "gapId": "operator:collection.importer_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00418", + "gapId": "operator:collection.objects_add_active", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00419", + "gapId": "operator:collection.objects_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00420", + "gapId": "operator:collection.objects_remove_active", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00421", + "gapId": "operator:collection.objects_remove_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00422", + "gapId": "operator:console.autocomplete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00423", + "gapId": "operator:console.banner", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00424", + "gapId": "operator:console.clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00425", + "gapId": "operator:console.clear_line", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00426", + "gapId": "operator:console.copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00427", + "gapId": "operator:console.copy_as_script", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00428", + "gapId": "operator:console.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00429", + "gapId": "operator:console.execute", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00430", + "gapId": "operator:console.history_append", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00431", + "gapId": "operator:console.history_cycle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00432", + "gapId": "operator:console.indent", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00433", + "gapId": "operator:console.indent_or_autocomplete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00434", + "gapId": "operator:console.insert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00435", + "gapId": "operator:console.language", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00436", + "gapId": "operator:console.move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00437", + "gapId": "operator:console.paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00438", + "gapId": "operator:console.scrollback_append", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00439", + "gapId": "operator:console.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00440", + "gapId": "operator:console.select_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00441", + "gapId": "operator:console.select_word", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00442", + "gapId": "operator:console.unindent", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00443", + "gapId": "operator:constraint.add_target", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00444", + "gapId": "operator:constraint.apply", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00445", + "gapId": "operator:constraint.childof_clear_inverse", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00446", + "gapId": "operator:constraint.childof_set_inverse", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00447", + "gapId": "operator:constraint.copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00448", + "gapId": "operator:constraint.copy_to_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00449", + "gapId": "operator:constraint.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00450", + "gapId": "operator:constraint.disable_keep_transform", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00451", + "gapId": "operator:constraint.followpath_path_animate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00452", + "gapId": "operator:constraint.limitdistance_reset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00453", + "gapId": "operator:constraint.move_down", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00454", + "gapId": "operator:constraint.move_to_index", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00455", + "gapId": "operator:constraint.move_up", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00456", + "gapId": "operator:constraint.normalize_target_weights", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00457", + "gapId": "operator:constraint.objectsolver_clear_inverse", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00458", + "gapId": "operator:constraint.objectsolver_set_inverse", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00459", + "gapId": "operator:constraint.remove_target", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00460", + "gapId": "operator:constraint.stretchto_reset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00461", + "gapId": "operator:curve.cyclic_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00462", + "gapId": "operator:curve.de_select_first", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00463", + "gapId": "operator:curve.de_select_last", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00464", + "gapId": "operator:curve.decimate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00465", + "gapId": "operator:curve.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00466", + "gapId": "operator:curve.dissolve_verts", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00467", + "gapId": "operator:curve.draw", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00468", + "gapId": "operator:curve.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00469", + "gapId": "operator:curve.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00470", + "gapId": "operator:curve.extrude", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00471", + "gapId": "operator:curve.extrude_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00472", + "gapId": "operator:curve.handle_type_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00473", + "gapId": "operator:curve.hide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00474", + "gapId": "operator:curve.make_segment", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00475", + "gapId": "operator:curve.match_texture_space", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00476", + "gapId": "operator:curve.normals_make_consistent", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00477", + "gapId": "operator:curve.pen", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00478", + "gapId": "operator:curve.primitive_bezier_circle_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00479", + "gapId": "operator:curve.primitive_bezier_curve_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00480", + "gapId": "operator:curve.primitive_nurbs_circle_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00481", + "gapId": "operator:curve.primitive_nurbs_curve_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00482", + "gapId": "operator:curve.primitive_nurbs_path_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00483", + "gapId": "operator:curve.radius_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00484", + "gapId": "operator:curve.reveal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00485", + "gapId": "operator:curve.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00486", + "gapId": "operator:curve.select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00487", + "gapId": "operator:curve.select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00488", + "gapId": "operator:curve.select_linked_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00489", + "gapId": "operator:curve.select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00490", + "gapId": "operator:curve.select_next", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00491", + "gapId": "operator:curve.select_nth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00492", + "gapId": "operator:curve.select_previous", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00493", + "gapId": "operator:curve.select_random", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00494", + "gapId": "operator:curve.select_row", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00495", + "gapId": "operator:curve.select_similar", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00496", + "gapId": "operator:curve.separate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00497", + "gapId": "operator:curve.shade_flat", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00498", + "gapId": "operator:curve.shade_smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00499", + "gapId": "operator:curve.shortest_path_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00500", + "gapId": "operator:curve.smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00501", + "gapId": "operator:curve.smooth_radius", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00502", + "gapId": "operator:curve.smooth_tilt", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00503", + "gapId": "operator:curve.smooth_weight", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00504", + "gapId": "operator:curve.spin", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00505", + "gapId": "operator:curve.spline_type_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00506", + "gapId": "operator:curve.spline_weight_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00507", + "gapId": "operator:curve.split", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00508", + "gapId": "operator:curve.subdivide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00509", + "gapId": "operator:curve.switch_direction", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00510", + "gapId": "operator:curve.tilt_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00511", + "gapId": "operator:curve.vertex_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00512", + "gapId": "operator:curves.add_bezier", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00513", + "gapId": "operator:curves.add_circle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00514", + "gapId": "operator:curves.attribute_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00515", + "gapId": "operator:curves.convert_from_particle_system", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00516", + "gapId": "operator:curves.convert_to_particle_system", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00517", + "gapId": "operator:curves.curve_type_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00518", + "gapId": "operator:curves.cyclic_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00519", + "gapId": "operator:curves.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00520", + "gapId": "operator:curves.draw", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00521", + "gapId": "operator:curves.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00522", + "gapId": "operator:curves.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00523", + "gapId": "operator:curves.extrude", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00524", + "gapId": "operator:curves.extrude_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00525", + "gapId": "operator:curves.handle_type_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00526", + "gapId": "operator:curves.pen", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00527", + "gapId": "operator:curves.sculptmode_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00528", + "gapId": "operator:curves.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00529", + "gapId": "operator:curves.select_ends", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00530", + "gapId": "operator:curves.select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00531", + "gapId": "operator:curves.select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00532", + "gapId": "operator:curves.select_linked_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00533", + "gapId": "operator:curves.select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00534", + "gapId": "operator:curves.select_random", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00535", + "gapId": "operator:curves.separate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00536", + "gapId": "operator:curves.set_selection_domain", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00537", + "gapId": "operator:curves.snap_curves_to_surface", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00538", + "gapId": "operator:curves.split", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00539", + "gapId": "operator:curves.subdivide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00540", + "gapId": "operator:curves.surface_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00541", + "gapId": "operator:curves.switch_direction", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00542", + "gapId": "operator:curves.tilt_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00543", + "gapId": "operator:cycles.denoise_animation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00544", + "gapId": "operator:cycles.merge_images", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00545", + "gapId": "operator:cycles.use_shading_nodes", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00546", + "gapId": "operator:dpaint.bake", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00547", + "gapId": "operator:dpaint.output_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00548", + "gapId": "operator:dpaint.surface_slot_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00549", + "gapId": "operator:dpaint.surface_slot_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00550", + "gapId": "operator:dpaint.type_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00551", + "gapId": "operator:ed.flush_edits", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00552", + "gapId": "operator:ed.lib_id_fake_user_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00553", + "gapId": "operator:ed.lib_id_generate_preview", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00554", + "gapId": "operator:ed.lib_id_generate_preview_from_object", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00555", + "gapId": "operator:ed.lib_id_load_custom_preview", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00556", + "gapId": "operator:ed.lib_id_override_editable_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00557", + "gapId": "operator:ed.lib_id_remove_preview", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00558", + "gapId": "operator:ed.lib_id_unlink", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00559", + "gapId": "operator:ed.redo", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00560", + "gapId": "operator:ed.undo", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00561", + "gapId": "operator:ed.undo_history", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00562", + "gapId": "operator:ed.undo_push", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00563", + "gapId": "operator:ed.undo_redo", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00564", + "gapId": "operator:export_anim.bvh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00565", + "gapId": "operator:export_scene.fbx", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00566", + "gapId": "operator:export_scene.gltf", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00567", + "gapId": "operator:extensions.package_disable", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00568", + "gapId": "operator:extensions.package_install", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00569", + "gapId": "operator:extensions.package_install_files", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00570", + "gapId": "operator:extensions.package_install_marked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00571", + "gapId": "operator:extensions.package_mark_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00572", + "gapId": "operator:extensions.package_mark_clear_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00573", + "gapId": "operator:extensions.package_mark_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00574", + "gapId": "operator:extensions.package_mark_set_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00575", + "gapId": "operator:extensions.package_obsolete_marked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00576", + "gapId": "operator:extensions.package_show_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00577", + "gapId": "operator:extensions.package_show_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00578", + "gapId": "operator:extensions.package_show_settings", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00579", + "gapId": "operator:extensions.package_theme_disable", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00580", + "gapId": "operator:extensions.package_theme_enable", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00581", + "gapId": "operator:extensions.package_uninstall", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00582", + "gapId": "operator:extensions.package_uninstall_marked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00583", + "gapId": "operator:extensions.package_uninstall_system", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00584", + "gapId": "operator:extensions.package_upgrade_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00585", + "gapId": "operator:extensions.repo_enable_from_drop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00586", + "gapId": "operator:extensions.repo_lock_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00587", + "gapId": "operator:extensions.repo_refresh_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00588", + "gapId": "operator:extensions.repo_sync", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00589", + "gapId": "operator:extensions.repo_sync_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00590", + "gapId": "operator:extensions.repo_unlock", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00591", + "gapId": "operator:extensions.repo_unlock_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00592", + "gapId": "operator:extensions.status_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00593", + "gapId": "operator:extensions.status_clear_errors", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00594", + "gapId": "operator:extensions.userpref_allow_online", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00595", + "gapId": "operator:extensions.userpref_allow_online_popup", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00596", + "gapId": "operator:extensions.userpref_show_for_update", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00597", + "gapId": "operator:extensions.userpref_show_online", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00598", + "gapId": "operator:extensions.userpref_tags_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00599", + "gapId": "operator:file.autopack_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00600", + "gapId": "operator:file.bookmark_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00601", + "gapId": "operator:file.bookmark_cleanup", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00602", + "gapId": "operator:file.bookmark_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00603", + "gapId": "operator:file.bookmark_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00604", + "gapId": "operator:file.cancel", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00605", + "gapId": "operator:file.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00606", + "gapId": "operator:file.directory_new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00607", + "gapId": "operator:file.edit_directory_path", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00608", + "gapId": "operator:file.execute", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00609", + "gapId": "operator:file.external_operation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00610", + "gapId": "operator:file.filenum", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00611", + "gapId": "operator:file.filepath_drop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00612", + "gapId": "operator:file.find_missing_files", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00613", + "gapId": "operator:file.hidedot", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00614", + "gapId": "operator:file.highlight", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00615", + "gapId": "operator:file.make_paths_absolute", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00616", + "gapId": "operator:file.make_paths_relative", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00617", + "gapId": "operator:file.mouse_execute", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00618", + "gapId": "operator:file.next", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00619", + "gapId": "operator:file.pack_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00620", + "gapId": "operator:file.pack_libraries", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00621", + "gapId": "operator:file.parent", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00622", + "gapId": "operator:file.previous", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00623", + "gapId": "operator:file.refresh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00624", + "gapId": "operator:file.rename", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00625", + "gapId": "operator:file.report_missing_files", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00626", + "gapId": "operator:file.reset_recent", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00627", + "gapId": "operator:file.select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00628", + "gapId": "operator:file.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00629", + "gapId": "operator:file.select_bookmark", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00630", + "gapId": "operator:file.select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00631", + "gapId": "operator:file.select_walk", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00632", + "gapId": "operator:file.smoothscroll", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00633", + "gapId": "operator:file.sort_column_ui_context", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00634", + "gapId": "operator:file.start_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00635", + "gapId": "operator:file.unpack_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00636", + "gapId": "operator:file.unpack_item", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00637", + "gapId": "operator:file.unpack_libraries", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00638", + "gapId": "operator:file.view_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00639", + "gapId": "operator:fluid.bake_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00640", + "gapId": "operator:fluid.bake_data", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00641", + "gapId": "operator:fluid.bake_guides", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00642", + "gapId": "operator:fluid.bake_mesh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00643", + "gapId": "operator:fluid.bake_noise", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00644", + "gapId": "operator:fluid.bake_particles", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00645", + "gapId": "operator:fluid.free_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00646", + "gapId": "operator:fluid.free_data", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00647", + "gapId": "operator:fluid.free_guides", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00648", + "gapId": "operator:fluid.free_mesh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00649", + "gapId": "operator:fluid.free_noise", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00650", + "gapId": "operator:fluid.free_particles", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00651", + "gapId": "operator:fluid.pause_bake", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00652", + "gapId": "operator:fluid.preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00653", + "gapId": "operator:font.case_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00654", + "gapId": "operator:font.case_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00655", + "gapId": "operator:font.change_character", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00656", + "gapId": "operator:font.change_spacing", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00657", + "gapId": "operator:font.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00658", + "gapId": "operator:font.line_break", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00659", + "gapId": "operator:font.move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00660", + "gapId": "operator:font.move_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00661", + "gapId": "operator:font.open", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00662", + "gapId": "operator:font.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00663", + "gapId": "operator:font.select_word", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00664", + "gapId": "operator:font.selection_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00665", + "gapId": "operator:font.style_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00666", + "gapId": "operator:font.style_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00667", + "gapId": "operator:font.text_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00668", + "gapId": "operator:font.text_cut", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00669", + "gapId": "operator:font.text_insert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00670", + "gapId": "operator:font.text_insert_unicode", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00671", + "gapId": "operator:font.text_paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00672", + "gapId": "operator:font.text_paste_from_file", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00673", + "gapId": "operator:font.textbox_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00674", + "gapId": "operator:font.textbox_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00675", + "gapId": "operator:font.unlink", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00676", + "gapId": "operator:geometry.attribute_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00677", + "gapId": "operator:geometry.attribute_convert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00678", + "gapId": "operator:geometry.attribute_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00679", + "gapId": "operator:geometry.color_attribute_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00680", + "gapId": "operator:geometry.color_attribute_convert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00681", + "gapId": "operator:geometry.color_attribute_duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00682", + "gapId": "operator:geometry.color_attribute_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00683", + "gapId": "operator:geometry.color_attribute_render_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00684", + "gapId": "operator:geometry.geometry_randomization", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00685", + "gapId": "operator:gizmogroup.gizmo_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00686", + "gapId": "operator:gizmogroup.gizmo_tweak", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00687", + "gapId": "operator:gpencil.annotate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00688", + "gapId": "operator:gpencil.annotation_active_frame_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00689", + "gapId": "operator:gpencil.annotation_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00690", + "gapId": "operator:gpencil.data_unlink", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00691", + "gapId": "operator:gpencil.layer_annotation_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00692", + "gapId": "operator:gpencil.layer_annotation_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00693", + "gapId": "operator:gpencil.layer_annotation_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00694", + "gapId": "operator:graph.bake_keys", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00695", + "gapId": "operator:graph.blend_offset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00696", + "gapId": "operator:graph.blend_to_default", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00697", + "gapId": "operator:graph.blend_to_ease", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00698", + "gapId": "operator:graph.blend_to_neighbor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00699", + "gapId": "operator:graph.breakdown", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00700", + "gapId": "operator:graph.butterworth_smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00701", + "gapId": "operator:graph.clean", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00702", + "gapId": "operator:graph.click_insert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00703", + "gapId": "operator:graph.clickselect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00704", + "gapId": "operator:graph.copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00705", + "gapId": "operator:graph.cursor_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00706", + "gapId": "operator:graph.decimate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00707", + "gapId": "operator:graph.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00708", + "gapId": "operator:graph.driver_delete_invalid", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00709", + "gapId": "operator:graph.driver_variables_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00710", + "gapId": "operator:graph.driver_variables_paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00711", + "gapId": "operator:graph.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00712", + "gapId": "operator:graph.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00713", + "gapId": "operator:graph.ease", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00714", + "gapId": "operator:graph.easing_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00715", + "gapId": "operator:graph.equalize_handles", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00716", + "gapId": "operator:graph.euler_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00717", + "gapId": "operator:graph.extrapolation_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00718", + "gapId": "operator:graph.fmodifier_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00719", + "gapId": "operator:graph.fmodifier_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00720", + "gapId": "operator:graph.fmodifier_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00721", + "gapId": "operator:graph.fmodifier_paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00722", + "gapId": "operator:graph.frame_jump", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00723", + "gapId": "operator:graph.gaussian_smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00724", + "gapId": "operator:graph.ghost_curves_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00725", + "gapId": "operator:graph.ghost_curves_create", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00726", + "gapId": "operator:graph.handle_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00727", + "gapId": "operator:graph.hide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00728", + "gapId": "operator:graph.interpolation_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00729", + "gapId": "operator:graph.keyframe_insert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00730", + "gapId": "operator:graph.keyframe_jump", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00731", + "gapId": "operator:graph.keys_to_samples", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00732", + "gapId": "operator:graph.local_view", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00733", + "gapId": "operator:graph.match_slope", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00734", + "gapId": "operator:graph.mirror", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00735", + "gapId": "operator:graph.paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00736", + "gapId": "operator:graph.previewrange_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00737", + "gapId": "operator:graph.push_pull", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00738", + "gapId": "operator:graph.reveal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00739", + "gapId": "operator:graph.samples_to_keys", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00740", + "gapId": "operator:graph.scale_average", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00741", + "gapId": "operator:graph.scale_from_neighbor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00742", + "gapId": "operator:graph.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00743", + "gapId": "operator:graph.select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00744", + "gapId": "operator:graph.select_circle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00745", + "gapId": "operator:graph.select_column", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00746", + "gapId": "operator:graph.select_key_handles", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00747", + "gapId": "operator:graph.select_lasso", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00748", + "gapId": "operator:graph.select_leftright", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00749", + "gapId": "operator:graph.select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00750", + "gapId": "operator:graph.select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00751", + "gapId": "operator:graph.select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00752", + "gapId": "operator:graph.shear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00753", + "gapId": "operator:graph.smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00754", + "gapId": "operator:graph.snap", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00755", + "gapId": "operator:graph.snap_cursor_value", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00756", + "gapId": "operator:graph.sound_to_samples", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00757", + "gapId": "operator:graph.time_offset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00758", + "gapId": "operator:graph.view_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00759", + "gapId": "operator:graph.view_frame", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00760", + "gapId": "operator:graph.view_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00761", + "gapId": "operator:grease_pencil.active_frame_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00762", + "gapId": "operator:grease_pencil.bake_grease_pencil_animation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00763", + "gapId": "operator:grease_pencil.brush_stroke", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00764", + "gapId": "operator:grease_pencil.caps_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00765", + "gapId": "operator:grease_pencil.clean_loose", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00766", + "gapId": "operator:grease_pencil.convert_curve_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00767", + "gapId": "operator:grease_pencil.copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00768", + "gapId": "operator:grease_pencil.cyclical_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00769", + "gapId": "operator:grease_pencil.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00770", + "gapId": "operator:grease_pencil.delete_breakdown", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00771", + "gapId": "operator:grease_pencil.delete_frame", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00772", + "gapId": "operator:grease_pencil.dissolve", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00773", + "gapId": "operator:grease_pencil.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00774", + "gapId": "operator:grease_pencil.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00775", + "gapId": "operator:grease_pencil.erase_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00776", + "gapId": "operator:grease_pencil.erase_lasso", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00777", + "gapId": "operator:grease_pencil.extrude", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00778", + "gapId": "operator:grease_pencil.extrude_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00779", + "gapId": "operator:grease_pencil.fill", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00780", + "gapId": "operator:grease_pencil.frame_clean_duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00781", + "gapId": "operator:grease_pencil.frame_duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00782", + "gapId": "operator:grease_pencil.insert_blank_frame", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00783", + "gapId": "operator:grease_pencil.interpolate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00784", + "gapId": "operator:grease_pencil.interpolate_sequence", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00785", + "gapId": "operator:grease_pencil.join_fills", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00786", + "gapId": "operator:grease_pencil.join_selection", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00787", + "gapId": "operator:grease_pencil.layer_active", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00788", + "gapId": "operator:grease_pencil.layer_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00789", + "gapId": "operator:grease_pencil.layer_duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00790", + "gapId": "operator:grease_pencil.layer_duplicate_object", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00791", + "gapId": "operator:grease_pencil.layer_group_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00792", + "gapId": "operator:grease_pencil.layer_group_color_tag", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00793", + "gapId": "operator:grease_pencil.layer_group_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00794", + "gapId": "operator:grease_pencil.layer_hide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00795", + "gapId": "operator:grease_pencil.layer_isolate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00796", + "gapId": "operator:grease_pencil.layer_lock_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00797", + "gapId": "operator:grease_pencil.layer_mask_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00798", + "gapId": "operator:grease_pencil.layer_mask_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00799", + "gapId": "operator:grease_pencil.layer_mask_reorder", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00800", + "gapId": "operator:grease_pencil.layer_merge", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00801", + "gapId": "operator:grease_pencil.layer_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00802", + "gapId": "operator:grease_pencil.layer_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00803", + "gapId": "operator:grease_pencil.layer_reveal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00804", + "gapId": "operator:grease_pencil.material_copy_to_object", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00805", + "gapId": "operator:grease_pencil.material_hide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00806", + "gapId": "operator:grease_pencil.material_isolate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00807", + "gapId": "operator:grease_pencil.material_lock_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00808", + "gapId": "operator:grease_pencil.material_lock_unselected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00809", + "gapId": "operator:grease_pencil.material_lock_unused", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00810", + "gapId": "operator:grease_pencil.material_reveal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00811", + "gapId": "operator:grease_pencil.material_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00812", + "gapId": "operator:grease_pencil.material_unlock_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00813", + "gapId": "operator:grease_pencil.move_to_layer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00814", + "gapId": "operator:grease_pencil.outline", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00815", + "gapId": "operator:grease_pencil.paintmode_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00816", + "gapId": "operator:grease_pencil.paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00817", + "gapId": "operator:grease_pencil.pen", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00818", + "gapId": "operator:grease_pencil.primitive_arc", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00819", + "gapId": "operator:grease_pencil.primitive_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00820", + "gapId": "operator:grease_pencil.primitive_circle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00821", + "gapId": "operator:grease_pencil.primitive_curve", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00822", + "gapId": "operator:grease_pencil.primitive_line", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00823", + "gapId": "operator:grease_pencil.primitive_polyline", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00824", + "gapId": "operator:grease_pencil.relative_layer_mask_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00825", + "gapId": "operator:grease_pencil.remove_fill_guides", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00826", + "gapId": "operator:grease_pencil.reorder", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00827", + "gapId": "operator:grease_pencil.reproject", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00828", + "gapId": "operator:grease_pencil.reset_uvs", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00829", + "gapId": "operator:grease_pencil.sculpt_paint", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00830", + "gapId": "operator:grease_pencil.sculptmode_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00831", + "gapId": "operator:grease_pencil.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00832", + "gapId": "operator:grease_pencil.select_alternate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00833", + "gapId": "operator:grease_pencil.select_by_stroke_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00834", + "gapId": "operator:grease_pencil.select_ends", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00835", + "gapId": "operator:grease_pencil.select_fill", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00836", + "gapId": "operator:grease_pencil.select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00837", + "gapId": "operator:grease_pencil.select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00838", + "gapId": "operator:grease_pencil.select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00839", + "gapId": "operator:grease_pencil.select_random", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00840", + "gapId": "operator:grease_pencil.select_similar", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00841", + "gapId": "operator:grease_pencil.separate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00842", + "gapId": "operator:grease_pencil.separate_fills", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00843", + "gapId": "operator:grease_pencil.set_active_material", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00844", + "gapId": "operator:grease_pencil.set_corner_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00845", + "gapId": "operator:grease_pencil.set_curve_resolution", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00846", + "gapId": "operator:grease_pencil.set_curve_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00847", + "gapId": "operator:grease_pencil.set_handle_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00848", + "gapId": "operator:grease_pencil.set_material", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00849", + "gapId": "operator:grease_pencil.set_selection_mode", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00850", + "gapId": "operator:grease_pencil.set_start_point", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00851", + "gapId": "operator:grease_pencil.set_stroke_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00852", + "gapId": "operator:grease_pencil.set_uniform_opacity", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00853", + "gapId": "operator:grease_pencil.set_uniform_thickness", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00854", + "gapId": "operator:grease_pencil.snap_cursor_to_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00855", + "gapId": "operator:grease_pencil.snap_to_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00856", + "gapId": "operator:grease_pencil.snap_to_grid", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00857", + "gapId": "operator:grease_pencil.stroke_material_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00858", + "gapId": "operator:grease_pencil.stroke_merge_by_distance", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00859", + "gapId": "operator:grease_pencil.stroke_reset_vertex_color", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00860", + "gapId": "operator:grease_pencil.stroke_simplify", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00861", + "gapId": "operator:grease_pencil.stroke_smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00862", + "gapId": "operator:grease_pencil.stroke_split", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00863", + "gapId": "operator:grease_pencil.stroke_subdivide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00864", + "gapId": "operator:grease_pencil.stroke_subdivide_smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00865", + "gapId": "operator:grease_pencil.stroke_switch_direction", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00866", + "gapId": "operator:grease_pencil.stroke_trim", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00867", + "gapId": "operator:grease_pencil.texture_gradient", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00868", + "gapId": "operator:grease_pencil.trace_image", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00869", + "gapId": "operator:grease_pencil.vertex_brush_stroke", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00870", + "gapId": "operator:grease_pencil.vertex_color_brightness_contrast", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00871", + "gapId": "operator:grease_pencil.vertex_color_hsv", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00872", + "gapId": "operator:grease_pencil.vertex_color_invert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00873", + "gapId": "operator:grease_pencil.vertex_color_levels", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00874", + "gapId": "operator:grease_pencil.vertex_color_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00875", + "gapId": "operator:grease_pencil.vertex_group_normalize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00876", + "gapId": "operator:grease_pencil.vertex_group_normalize_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00877", + "gapId": "operator:grease_pencil.vertex_group_smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00878", + "gapId": "operator:grease_pencil.vertexmode_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00879", + "gapId": "operator:grease_pencil.weight_brush_stroke", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00880", + "gapId": "operator:grease_pencil.weight_invert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00881", + "gapId": "operator:grease_pencil.weight_sample", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00882", + "gapId": "operator:grease_pencil.weight_toggle_direction", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00883", + "gapId": "operator:grease_pencil.weightmode_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00884", + "gapId": "operator:image.add_render_slot", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00885", + "gapId": "operator:image.change_frame", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00886", + "gapId": "operator:image.clear_render_border", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00887", + "gapId": "operator:image.clear_render_slot", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00888", + "gapId": "operator:image.clipboard_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00889", + "gapId": "operator:image.clipboard_paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00890", + "gapId": "operator:image.convert_to_mesh_plane", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00891", + "gapId": "operator:image.curves_point_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00892", + "gapId": "operator:image.cycle_render_slot", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00893", + "gapId": "operator:image.external_edit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00894", + "gapId": "operator:image.file_browse", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00895", + "gapId": "operator:image.flip", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00896", + "gapId": "operator:image.import_as_mesh_planes", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00897", + "gapId": "operator:image.invert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00898", + "gapId": "operator:image.match_movie_length", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00899", + "gapId": "operator:image.new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00900", + "gapId": "operator:image.open", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00901", + "gapId": "operator:image.open_images", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00902", + "gapId": "operator:image.pack", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00903", + "gapId": "operator:image.project_apply", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00904", + "gapId": "operator:image.project_edit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00905", + "gapId": "operator:image.read_viewlayers", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00906", + "gapId": "operator:image.reload", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00907", + "gapId": "operator:image.remove_render_slot", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00908", + "gapId": "operator:image.render_border", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00909", + "gapId": "operator:image.replace", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00910", + "gapId": "operator:image.resize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00911", + "gapId": "operator:image.rotate_orthogonal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00912", + "gapId": "operator:image.sample", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00913", + "gapId": "operator:image.sample_line", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00914", + "gapId": "operator:image.save", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00915", + "gapId": "operator:image.save_all_modified", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00916", + "gapId": "operator:image.save_as", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00917", + "gapId": "operator:image.save_sequence", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00918", + "gapId": "operator:image.tile_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00919", + "gapId": "operator:image.tile_fill", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00920", + "gapId": "operator:image.tile_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00921", + "gapId": "operator:image.unpack", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00922", + "gapId": "operator:image.view_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00923", + "gapId": "operator:image.view_center_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00924", + "gapId": "operator:image.view_cursor_center", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00925", + "gapId": "operator:image.view_ndof", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00926", + "gapId": "operator:image.view_pan", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00927", + "gapId": "operator:image.view_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00928", + "gapId": "operator:image.view_zoom", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00929", + "gapId": "operator:image.view_zoom_border", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00930", + "gapId": "operator:image.view_zoom_in", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00931", + "gapId": "operator:image.view_zoom_out", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00932", + "gapId": "operator:image.view_zoom_ratio", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00933", + "gapId": "operator:import_anim.bvh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00934", + "gapId": "operator:import_curve.svg", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00935", + "gapId": "operator:import_scene.fbx", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00936", + "gapId": "operator:import_scene.gltf", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00937", + "gapId": "operator:info.report_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00938", + "gapId": "operator:info.report_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00939", + "gapId": "operator:info.report_replay", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00940", + "gapId": "operator:info.reports_display_update", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00941", + "gapId": "operator:info.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00942", + "gapId": "operator:info.select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00943", + "gapId": "operator:info.select_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00944", + "gapId": "operator:lattice.flip", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00945", + "gapId": "operator:lattice.make_regular", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00946", + "gapId": "operator:lattice.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00947", + "gapId": "operator:lattice.select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00948", + "gapId": "operator:lattice.select_mirror", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00949", + "gapId": "operator:lattice.select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00950", + "gapId": "operator:lattice.select_random", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00951", + "gapId": "operator:lattice.select_ungrouped", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00952", + "gapId": "operator:marker.add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00953", + "gapId": "operator:marker.camera_bind", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00954", + "gapId": "operator:marker.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00955", + "gapId": "operator:marker.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00956", + "gapId": "operator:marker.make_links_scene", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00957", + "gapId": "operator:marker.move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00958", + "gapId": "operator:marker.rename", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00959", + "gapId": "operator:marker.select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00960", + "gapId": "operator:marker.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00961", + "gapId": "operator:marker.select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00962", + "gapId": "operator:marker.select_leftright", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00963", + "gapId": "operator:mask.add_feather_vertex", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00964", + "gapId": "operator:mask.add_feather_vertex_slide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00965", + "gapId": "operator:mask.add_vertex", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00966", + "gapId": "operator:mask.add_vertex_slide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00967", + "gapId": "operator:mask.copy_splines", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00968", + "gapId": "operator:mask.cyclic_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00969", + "gapId": "operator:mask.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00970", + "gapId": "operator:mask.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00971", + "gapId": "operator:mask.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00972", + "gapId": "operator:mask.feather_weight_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00973", + "gapId": "operator:mask.handle_type_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00974", + "gapId": "operator:mask.hide_view_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00975", + "gapId": "operator:mask.hide_view_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00976", + "gapId": "operator:mask.layer_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00977", + "gapId": "operator:mask.layer_new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00978", + "gapId": "operator:mask.layer_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00979", + "gapId": "operator:mask.move_to_layer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00980", + "gapId": "operator:mask.new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00981", + "gapId": "operator:mask.normals_make_consistent", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00982", + "gapId": "operator:mask.parent_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00983", + "gapId": "operator:mask.parent_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00984", + "gapId": "operator:mask.paste_splines", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00985", + "gapId": "operator:mask.primitive_circle_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00986", + "gapId": "operator:mask.primitive_square_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00987", + "gapId": "operator:mask.select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00988", + "gapId": "operator:mask.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00989", + "gapId": "operator:mask.select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00990", + "gapId": "operator:mask.select_circle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00991", + "gapId": "operator:mask.select_lasso", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00992", + "gapId": "operator:mask.select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00993", + "gapId": "operator:mask.select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00994", + "gapId": "operator:mask.select_linked_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00995", + "gapId": "operator:mask.select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00996", + "gapId": "operator:mask.shape_key_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00997", + "gapId": "operator:mask.shape_key_feather_reset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00998", + "gapId": "operator:mask.shape_key_insert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-00999", + "gapId": "operator:mask.shape_key_rekey", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01000", + "gapId": "operator:mask.slide_point", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01001", + "gapId": "operator:mask.slide_spline_curvature", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01002", + "gapId": "operator:mask.switch_direction", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01003", + "gapId": "operator:material.copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01004", + "gapId": "operator:material.new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01005", + "gapId": "operator:material.paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01006", + "gapId": "operator:mball.delete_metaelems", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01007", + "gapId": "operator:mball.duplicate_metaelems", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01008", + "gapId": "operator:mball.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01009", + "gapId": "operator:mball.hide_metaelems", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01010", + "gapId": "operator:mball.reveal_metaelems", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01011", + "gapId": "operator:mball.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01012", + "gapId": "operator:mball.select_random_metaelems", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01013", + "gapId": "operator:mball.select_similar", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01014", + "gapId": "operator:mesh.attribute_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01015", + "gapId": "operator:mesh.average_normals", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01016", + "gapId": "operator:mesh.beautify_fill", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01017", + "gapId": "operator:mesh.bevel", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01018", + "gapId": "operator:mesh.bisect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01019", + "gapId": "operator:mesh.blend_from_shape", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01020", + "gapId": "operator:mesh.bridge_edge_loops", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01021", + "gapId": "operator:mesh.circularize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01022", + "gapId": "operator:mesh.colors_reverse", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01023", + "gapId": "operator:mesh.colors_rotate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01024", + "gapId": "operator:mesh.convex_hull", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01025", + "gapId": "operator:mesh.customdata_custom_splitnormals_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01026", + "gapId": "operator:mesh.customdata_custom_splitnormals_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01027", + "gapId": "operator:mesh.customdata_face_sets_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01028", + "gapId": "operator:mesh.customdata_mask_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01029", + "gapId": "operator:mesh.customdata_skin_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01030", + "gapId": "operator:mesh.customdata_skin_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01031", + "gapId": "operator:mesh.decimate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01032", + "gapId": "operator:mesh.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01033", + "gapId": "operator:mesh.delete_edgeloop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01034", + "gapId": "operator:mesh.delete_loose", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01035", + "gapId": "operator:mesh.dissolve_degenerate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01036", + "gapId": "operator:mesh.dissolve_edges", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01037", + "gapId": "operator:mesh.dissolve_faces", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01038", + "gapId": "operator:mesh.dissolve_limited", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01039", + "gapId": "operator:mesh.dissolve_mode", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01040", + "gapId": "operator:mesh.dissolve_verts", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01041", + "gapId": "operator:mesh.dupli_extrude_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01042", + "gapId": "operator:mesh.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01043", + "gapId": "operator:mesh.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01044", + "gapId": "operator:mesh.edge_collapse", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01045", + "gapId": "operator:mesh.edge_face_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01046", + "gapId": "operator:mesh.edge_rotate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01047", + "gapId": "operator:mesh.edge_split", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01048", + "gapId": "operator:mesh.edgering_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01049", + "gapId": "operator:mesh.edges_select_sharp", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01050", + "gapId": "operator:mesh.extrude_context", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01051", + "gapId": "operator:mesh.extrude_context_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01052", + "gapId": "operator:mesh.extrude_edges_indiv", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01053", + "gapId": "operator:mesh.extrude_edges_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01054", + "gapId": "operator:mesh.extrude_faces_indiv", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01055", + "gapId": "operator:mesh.extrude_faces_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01056", + "gapId": "operator:mesh.extrude_manifold", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01057", + "gapId": "operator:mesh.extrude_region", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01058", + "gapId": "operator:mesh.extrude_region_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01059", + "gapId": "operator:mesh.extrude_region_shrink_fatten", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01060", + "gapId": "operator:mesh.extrude_repeat", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01061", + "gapId": "operator:mesh.extrude_vertices_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01062", + "gapId": "operator:mesh.extrude_verts_indiv", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01063", + "gapId": "operator:mesh.face_make_planar", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01064", + "gapId": "operator:mesh.face_split_by_edges", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01065", + "gapId": "operator:mesh.faces_select_linked_flat", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01066", + "gapId": "operator:mesh.faces_shade_flat", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01067", + "gapId": "operator:mesh.faces_shade_smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01068", + "gapId": "operator:mesh.fill", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01069", + "gapId": "operator:mesh.fill_grid", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01070", + "gapId": "operator:mesh.fill_holes", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01071", + "gapId": "operator:mesh.flatten", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01072", + "gapId": "operator:mesh.flip_normals", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01073", + "gapId": "operator:mesh.flip_quad_tessellation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01074", + "gapId": "operator:mesh.hide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01075", + "gapId": "operator:mesh.inset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01076", + "gapId": "operator:mesh.intersect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01077", + "gapId": "operator:mesh.intersect_boolean", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01078", + "gapId": "operator:mesh.knife_project", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01079", + "gapId": "operator:mesh.knife_tool", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01080", + "gapId": "operator:mesh.loop_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01081", + "gapId": "operator:mesh.loop_to_region", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01082", + "gapId": "operator:mesh.loopcut", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01083", + "gapId": "operator:mesh.loopcut_slide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01084", + "gapId": "operator:mesh.mark_freestyle_edge", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01085", + "gapId": "operator:mesh.mark_freestyle_face", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01086", + "gapId": "operator:mesh.mark_seam", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01087", + "gapId": "operator:mesh.mark_sharp", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01088", + "gapId": "operator:mesh.merge", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01089", + "gapId": "operator:mesh.merge_normals", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01090", + "gapId": "operator:mesh.mod_weighted_strength", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01091", + "gapId": "operator:mesh.normals_make_consistent", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01092", + "gapId": "operator:mesh.normals_tools", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01093", + "gapId": "operator:mesh.offset_edge_loops", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01094", + "gapId": "operator:mesh.offset_edge_loops_slide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01095", + "gapId": "operator:mesh.point_normals", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01096", + "gapId": "operator:mesh.poke", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01097", + "gapId": "operator:mesh.polybuild_delete_at_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01098", + "gapId": "operator:mesh.polybuild_dissolve_at_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01099", + "gapId": "operator:mesh.polybuild_extrude_at_cursor_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01100", + "gapId": "operator:mesh.polybuild_face_at_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01101", + "gapId": "operator:mesh.polybuild_face_at_cursor_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01102", + "gapId": "operator:mesh.polybuild_split_at_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01103", + "gapId": "operator:mesh.polybuild_split_at_cursor_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01104", + "gapId": "operator:mesh.polybuild_transform_at_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01105", + "gapId": "operator:mesh.polybuild_transform_at_cursor_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01106", + "gapId": "operator:mesh.primitive_circle_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01107", + "gapId": "operator:mesh.primitive_cone_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01108", + "gapId": "operator:mesh.primitive_cube_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01109", + "gapId": "operator:mesh.primitive_cube_add_gizmo", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01110", + "gapId": "operator:mesh.primitive_cylinder_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01111", + "gapId": "operator:mesh.primitive_grid_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01112", + "gapId": "operator:mesh.primitive_ico_sphere_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01113", + "gapId": "operator:mesh.primitive_monkey_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01114", + "gapId": "operator:mesh.primitive_plane_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01115", + "gapId": "operator:mesh.primitive_torus_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01116", + "gapId": "operator:mesh.primitive_uv_sphere_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01117", + "gapId": "operator:mesh.quads_convert_to_tris", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01118", + "gapId": "operator:mesh.region_to_loop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01119", + "gapId": "operator:mesh.remove_doubles", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01120", + "gapId": "operator:mesh.reorder_vertices_spatial", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01121", + "gapId": "operator:mesh.reveal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01122", + "gapId": "operator:mesh.rip", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01123", + "gapId": "operator:mesh.rip_edge", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01124", + "gapId": "operator:mesh.rip_edge_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01125", + "gapId": "operator:mesh.rip_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01126", + "gapId": "operator:mesh.screw", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01127", + "gapId": "operator:mesh.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01128", + "gapId": "operator:mesh.select_axis", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01129", + "gapId": "operator:mesh.select_boundary_loop_multi", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01130", + "gapId": "operator:mesh.select_by_attribute", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01131", + "gapId": "operator:mesh.select_by_pole_count", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01132", + "gapId": "operator:mesh.select_edge_loop_multi", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01133", + "gapId": "operator:mesh.select_edge_ring_multi", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01134", + "gapId": "operator:mesh.select_face_by_sides", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01135", + "gapId": "operator:mesh.select_interior_faces", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01136", + "gapId": "operator:mesh.select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01137", + "gapId": "operator:mesh.select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01138", + "gapId": "operator:mesh.select_linked_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01139", + "gapId": "operator:mesh.select_loose", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01140", + "gapId": "operator:mesh.select_mirror", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01141", + "gapId": "operator:mesh.select_mode", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01142", + "gapId": "operator:mesh.select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01143", + "gapId": "operator:mesh.select_next_item", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01144", + "gapId": "operator:mesh.select_non_manifold", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01145", + "gapId": "operator:mesh.select_nth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01146", + "gapId": "operator:mesh.select_prev_item", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01147", + "gapId": "operator:mesh.select_random", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01148", + "gapId": "operator:mesh.select_similar", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01149", + "gapId": "operator:mesh.select_similar_region", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01150", + "gapId": "operator:mesh.select_ungrouped", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01151", + "gapId": "operator:mesh.separate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01152", + "gapId": "operator:mesh.set_normals_from_faces", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01153", + "gapId": "operator:mesh.set_sharpness_by_angle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01154", + "gapId": "operator:mesh.shape_propagate_to_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01155", + "gapId": "operator:mesh.shortest_path_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01156", + "gapId": "operator:mesh.shortest_path_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01157", + "gapId": "operator:mesh.smooth_normals", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01158", + "gapId": "operator:mesh.solidify", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01159", + "gapId": "operator:mesh.sort_elements", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01160", + "gapId": "operator:mesh.space_edge_loops_evenly", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01161", + "gapId": "operator:mesh.spin", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01162", + "gapId": "operator:mesh.split", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01163", + "gapId": "operator:mesh.split_normals", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01164", + "gapId": "operator:mesh.subdivide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01165", + "gapId": "operator:mesh.subdivide_edgering", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01166", + "gapId": "operator:mesh.symmetrize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01167", + "gapId": "operator:mesh.symmetry_snap", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01168", + "gapId": "operator:mesh.tris_convert_to_quads", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01169", + "gapId": "operator:mesh.unsubdivide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01170", + "gapId": "operator:mesh.uv_texture_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01171", + "gapId": "operator:mesh.uv_texture_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01172", + "gapId": "operator:mesh.uvs_reverse", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01173", + "gapId": "operator:mesh.uvs_rotate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01174", + "gapId": "operator:mesh.vert_connect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01175", + "gapId": "operator:mesh.vert_connect_concave", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01176", + "gapId": "operator:mesh.vert_connect_nonplanar", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01177", + "gapId": "operator:mesh.vert_connect_path", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01178", + "gapId": "operator:mesh.vertices_smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01179", + "gapId": "operator:mesh.vertices_smooth_laplacian", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01180", + "gapId": "operator:mesh.wireframe", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "MESH", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01181", + "gapId": "operator:nla.action_pushdown", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01182", + "gapId": "operator:nla.action_sync_length", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01183", + "gapId": "operator:nla.action_unlink", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01184", + "gapId": "operator:nla.actionclip_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01185", + "gapId": "operator:nla.apply_scale", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01186", + "gapId": "operator:nla.bake", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01187", + "gapId": "operator:nla.channels_click", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01188", + "gapId": "operator:nla.clear_scale", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01189", + "gapId": "operator:nla.click_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01190", + "gapId": "operator:nla.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01191", + "gapId": "operator:nla.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01192", + "gapId": "operator:nla.duplicate_linked_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01193", + "gapId": "operator:nla.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01194", + "gapId": "operator:nla.fmodifier_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01195", + "gapId": "operator:nla.fmodifier_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01196", + "gapId": "operator:nla.fmodifier_paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01197", + "gapId": "operator:nla.make_single_user", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01198", + "gapId": "operator:nla.meta_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01199", + "gapId": "operator:nla.meta_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01200", + "gapId": "operator:nla.move_down", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01201", + "gapId": "operator:nla.move_up", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01202", + "gapId": "operator:nla.mute_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01203", + "gapId": "operator:nla.previewrange_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01204", + "gapId": "operator:nla.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01205", + "gapId": "operator:nla.select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01206", + "gapId": "operator:nla.select_leftright", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01207", + "gapId": "operator:nla.selected_objects_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01208", + "gapId": "operator:nla.snap", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01209", + "gapId": "operator:nla.soundclip_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01210", + "gapId": "operator:nla.split", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01211", + "gapId": "operator:nla.swap", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01212", + "gapId": "operator:nla.tracks_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01213", + "gapId": "operator:nla.tracks_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01214", + "gapId": "operator:nla.transition_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01215", + "gapId": "operator:nla.tweakmode_enter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01216", + "gapId": "operator:nla.tweakmode_exit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01217", + "gapId": "operator:nla.view_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01218", + "gapId": "operator:nla.view_frame", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01219", + "gapId": "operator:nla.view_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01220", + "gapId": "operator:node.activate_viewer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01221", + "gapId": "operator:node.add_closure_zone", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01222", + "gapId": "operator:node.add_collection", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01223", + "gapId": "operator:node.add_color", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01224", + "gapId": "operator:node.add_empty_group", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01225", + "gapId": "operator:node.add_foreach_geometry_element_zone", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01226", + "gapId": "operator:node.add_group", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01227", + "gapId": "operator:node.add_group_asset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01228", + "gapId": "operator:node.add_group_input_node", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01229", + "gapId": "operator:node.add_image", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01230", + "gapId": "operator:node.add_import_node", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01231", + "gapId": "operator:node.add_mask", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01232", + "gapId": "operator:node.add_material", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01233", + "gapId": "operator:node.add_node", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01234", + "gapId": "operator:node.add_object", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01235", + "gapId": "operator:node.add_repeat_zone", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01236", + "gapId": "operator:node.add_reroute", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01237", + "gapId": "operator:node.add_simulation_zone", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01238", + "gapId": "operator:node.add_typed_bundle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01239", + "gapId": "operator:node.add_zone", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01240", + "gapId": "operator:node.attach", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01241", + "gapId": "operator:node.backimage_fit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01242", + "gapId": "operator:node.backimage_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01243", + "gapId": "operator:node.backimage_sample", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01244", + "gapId": "operator:node.backimage_zoom", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01245", + "gapId": "operator:node.bake_node_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01246", + "gapId": "operator:node.bake_node_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01247", + "gapId": "operator:node.bake_node_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01248", + "gapId": "operator:node.capture_attribute_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01249", + "gapId": "operator:node.capture_attribute_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01250", + "gapId": "operator:node.capture_attribute_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01251", + "gapId": "operator:node.clear_viewer_border", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01252", + "gapId": "operator:node.clipboard_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01253", + "gapId": "operator:node.clipboard_paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01254", + "gapId": "operator:node.closure_input_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01255", + "gapId": "operator:node.closure_input_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01256", + "gapId": "operator:node.closure_input_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01257", + "gapId": "operator:node.closure_output_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01258", + "gapId": "operator:node.closure_output_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01259", + "gapId": "operator:node.closure_output_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01260", + "gapId": "operator:node.closure_to_list_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01261", + "gapId": "operator:node.closure_to_list_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01262", + "gapId": "operator:node.closure_to_list_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01263", + "gapId": "operator:node.collapse_hide_unused_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01264", + "gapId": "operator:node.combine_bundle_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01265", + "gapId": "operator:node.combine_bundle_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01266", + "gapId": "operator:node.combine_bundle_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01267", + "gapId": "operator:node.connect_to_output", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01268", + "gapId": "operator:node.cryptomatte_layer_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01269", + "gapId": "operator:node.cryptomatte_layer_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01270", + "gapId": "operator:node.deactivate_viewer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01271", + "gapId": "operator:node.default_group_width_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01272", + "gapId": "operator:node.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01273", + "gapId": "operator:node.delete_copy_reconnect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01274", + "gapId": "operator:node.delete_reconnect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01275", + "gapId": "operator:node.detach", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01276", + "gapId": "operator:node.detach_translate_attach", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01277", + "gapId": "operator:node.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01278", + "gapId": "operator:node.duplicate_compositing_modifier_node_group", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01279", + "gapId": "operator:node.duplicate_compositing_node_group", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01280", + "gapId": "operator:node.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01281", + "gapId": "operator:node.duplicate_move_keep_inputs", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01282", + "gapId": "operator:node.duplicate_move_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01283", + "gapId": "operator:node.enum_definition_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01284", + "gapId": "operator:node.enum_definition_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01285", + "gapId": "operator:node.enum_definition_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01286", + "gapId": "operator:node.evaluate_closure_input_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01287", + "gapId": "operator:node.evaluate_closure_input_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01288", + "gapId": "operator:node.evaluate_closure_input_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01289", + "gapId": "operator:node.evaluate_closure_output_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01290", + "gapId": "operator:node.evaluate_closure_output_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01291", + "gapId": "operator:node.evaluate_closure_output_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01292", + "gapId": "operator:node.field_to_grid_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01293", + "gapId": "operator:node.field_to_grid_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01294", + "gapId": "operator:node.field_to_grid_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01295", + "gapId": "operator:node.field_to_list_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01296", + "gapId": "operator:node.field_to_list_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01297", + "gapId": "operator:node.field_to_list_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01298", + "gapId": "operator:node.file_output_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01299", + "gapId": "operator:node.file_output_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01300", + "gapId": "operator:node.file_output_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01301", + "gapId": "operator:node.find_node", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01302", + "gapId": "operator:node.foreach_geometry_element_zone_generation_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01303", + "gapId": "operator:node.foreach_geometry_element_zone_generation_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01304", + "gapId": "operator:node.foreach_geometry_element_zone_generation_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01305", + "gapId": "operator:node.foreach_geometry_element_zone_input_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01306", + "gapId": "operator:node.foreach_geometry_element_zone_input_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01307", + "gapId": "operator:node.foreach_geometry_element_zone_input_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01308", + "gapId": "operator:node.foreach_geometry_element_zone_main_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01309", + "gapId": "operator:node.foreach_geometry_element_zone_main_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01310", + "gapId": "operator:node.foreach_geometry_element_zone_main_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01311", + "gapId": "operator:node.format_string_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01312", + "gapId": "operator:node.format_string_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01313", + "gapId": "operator:node.format_string_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01314", + "gapId": "operator:node.geometry_nodes_viewer_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01315", + "gapId": "operator:node.geometry_nodes_viewer_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01316", + "gapId": "operator:node.geometry_nodes_viewer_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01317", + "gapId": "operator:node.gltf_settings_node_operator", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01318", + "gapId": "operator:node.group_edit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01319", + "gapId": "operator:node.group_enter_exit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01320", + "gapId": "operator:node.group_insert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01321", + "gapId": "operator:node.group_make", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01322", + "gapId": "operator:node.group_separate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01323", + "gapId": "operator:node.group_ungroup", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01324", + "gapId": "operator:node.hide_socket_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01325", + "gapId": "operator:node.hide_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01326", + "gapId": "operator:node.index_switch_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01327", + "gapId": "operator:node.index_switch_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01328", + "gapId": "operator:node.index_switch_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01329", + "gapId": "operator:node.insert_offset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01330", + "gapId": "operator:node.interface_item_duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01331", + "gapId": "operator:node.interface_item_make_panel_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01332", + "gapId": "operator:node.interface_item_new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01333", + "gapId": "operator:node.interface_item_new_panel_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01334", + "gapId": "operator:node.interface_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01335", + "gapId": "operator:node.interface_item_unlink_panel_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01336", + "gapId": "operator:node.join", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01337", + "gapId": "operator:node.join_named", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01338", + "gapId": "operator:node.join_nodes", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01339", + "gapId": "operator:node.link", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01340", + "gapId": "operator:node.link_drag_operation_test", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01341", + "gapId": "operator:node.link_make", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01342", + "gapId": "operator:node.link_viewer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01343", + "gapId": "operator:node.links_cut", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01344", + "gapId": "operator:node.links_detach", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01345", + "gapId": "operator:node.links_mute", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01346", + "gapId": "operator:node.move_detach_links", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01347", + "gapId": "operator:node.move_detach_links_release", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01348", + "gapId": "operator:node.mute_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01349", + "gapId": "operator:node.new_compositing_node_group", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01350", + "gapId": "operator:node.new_compositor_sequencer_node_group", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01351", + "gapId": "operator:node.new_geometry_node_group_assign", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01352", + "gapId": "operator:node.new_geometry_node_group_tool", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01353", + "gapId": "operator:node.new_geometry_nodes_modifier", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01354", + "gapId": "operator:node.new_node_tree", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01355", + "gapId": "operator:node.node_color_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01356", + "gapId": "operator:node.node_copy_color", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01357", + "gapId": "operator:node.options_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01358", + "gapId": "operator:node.parent_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01359", + "gapId": "operator:node.preview_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01360", + "gapId": "operator:node.read_viewlayers", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01361", + "gapId": "operator:node.render_changed", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01362", + "gapId": "operator:node.repeat_zone_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01363", + "gapId": "operator:node.repeat_zone_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01364", + "gapId": "operator:node.repeat_zone_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01365", + "gapId": "operator:node.resize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01366", + "gapId": "operator:node.sample_attribute_items_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01367", + "gapId": "operator:node.sample_attribute_items_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01368", + "gapId": "operator:node.sample_attribute_items_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01369", + "gapId": "operator:node.select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01370", + "gapId": "operator:node.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01371", + "gapId": "operator:node.select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01372", + "gapId": "operator:node.select_circle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01373", + "gapId": "operator:node.select_grouped", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01374", + "gapId": "operator:node.select_lasso", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01375", + "gapId": "operator:node.select_link_viewer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01376", + "gapId": "operator:node.select_linked_from", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01377", + "gapId": "operator:node.select_linked_to", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01378", + "gapId": "operator:node.select_same_type_step", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01379", + "gapId": "operator:node.separate_bundle_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01380", + "gapId": "operator:node.separate_bundle_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01381", + "gapId": "operator:node.separate_bundle_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01382", + "gapId": "operator:node.shader_script_update", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01383", + "gapId": "operator:node.simulation_zone_item_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01384", + "gapId": "operator:node.simulation_zone_item_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01385", + "gapId": "operator:node.simulation_zone_item_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01386", + "gapId": "operator:node.sockets_sync", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01387", + "gapId": "operator:node.swap_empty_group", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01388", + "gapId": "operator:node.swap_group_asset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01389", + "gapId": "operator:node.swap_node", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01390", + "gapId": "operator:node.swap_typed_bundle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01391", + "gapId": "operator:node.swap_zone", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01392", + "gapId": "operator:node.test_inlining_shader_nodes", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01393", + "gapId": "operator:node.toggle_viewer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01394", + "gapId": "operator:node.translate_attach", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01395", + "gapId": "operator:node.translate_attach_remove_on_cancel", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01396", + "gapId": "operator:node.tree_path_parent", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01397", + "gapId": "operator:node.view_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01398", + "gapId": "operator:node.view_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01399", + "gapId": "operator:node.viewer_border", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01400", + "gapId": "operator:node.viewer_shortcut_get", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01401", + "gapId": "operator:node.viewer_shortcut_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01402", + "gapId": "operator:object.add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01403", + "gapId": "operator:object.add_modifier_menu", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01404", + "gapId": "operator:object.add_named", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01405", + "gapId": "operator:object.align", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01406", + "gapId": "operator:object.anim_transforms_to_deltas", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01407", + "gapId": "operator:object.armature_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01408", + "gapId": "operator:object.assign_property_defaults", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01409", + "gapId": "operator:object.bake", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01410", + "gapId": "operator:object.bake_image", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01411", + "gapId": "operator:object.camera_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01412", + "gapId": "operator:object.camera_custom_update", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01413", + "gapId": "operator:object.clear_override_library", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01414", + "gapId": "operator:object.collection_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01415", + "gapId": "operator:object.collection_external_asset_drop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01416", + "gapId": "operator:object.collection_instance_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01417", + "gapId": "operator:object.collection_link", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01418", + "gapId": "operator:object.collection_objects_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01419", + "gapId": "operator:object.collection_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01420", + "gapId": "operator:object.collection_unlink", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01421", + "gapId": "operator:object.constraint_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01422", + "gapId": "operator:object.constraint_add_with_targets", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01423", + "gapId": "operator:object.constraints_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01424", + "gapId": "operator:object.constraints_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01425", + "gapId": "operator:object.convert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01426", + "gapId": "operator:object.copy_global_transform", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01427", + "gapId": "operator:object.copy_relative_transform", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01428", + "gapId": "operator:object.correctivesmooth_bind", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01429", + "gapId": "operator:object.curves_empty_hair_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01430", + "gapId": "operator:object.curves_random_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01431", + "gapId": "operator:object.data_instance_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01432", + "gapId": "operator:object.data_transfer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01433", + "gapId": "operator:object.datalayout_transfer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01434", + "gapId": "operator:object.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01435", + "gapId": "operator:object.delete_fix_to_camera_keys", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01436", + "gapId": "operator:object.drop_geometry_nodes", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01437", + "gapId": "operator:object.drop_named_material", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01438", + "gapId": "operator:object.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01439", + "gapId": "operator:object.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01440", + "gapId": "operator:object.duplicate_move_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01441", + "gapId": "operator:object.duplicates_make_real", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01442", + "gapId": "operator:object.editmode_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01443", + "gapId": "operator:object.effector_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01444", + "gapId": "operator:object.empty_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01445", + "gapId": "operator:object.empty_image_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01446", + "gapId": "operator:object.explode_refresh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01447", + "gapId": "operator:object.fix_to_camera", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01448", + "gapId": "operator:object.forcefield_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01449", + "gapId": "operator:object.geometry_node_bake_delete_single", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01450", + "gapId": "operator:object.geometry_node_bake_pack_single", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01451", + "gapId": "operator:object.geometry_node_bake_single", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01452", + "gapId": "operator:object.geometry_node_bake_unpack_single", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01453", + "gapId": "operator:object.geometry_node_tree_copy_assign", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01454", + "gapId": "operator:object.geometry_nodes_input_attribute_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01455", + "gapId": "operator:object.geometry_nodes_move_to_nodes", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01456", + "gapId": "operator:object.grease_pencil_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01457", + "gapId": "operator:object.grease_pencil_dash_modifier_segment_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01458", + "gapId": "operator:object.grease_pencil_dash_modifier_segment_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01459", + "gapId": "operator:object.grease_pencil_dash_modifier_segment_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01460", + "gapId": "operator:object.grease_pencil_time_modifier_segment_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01461", + "gapId": "operator:object.grease_pencil_time_modifier_segment_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01462", + "gapId": "operator:object.grease_pencil_time_modifier_segment_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01463", + "gapId": "operator:object.hide_collection", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01464", + "gapId": "operator:object.hide_render_clear_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01465", + "gapId": "operator:object.hide_view_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01466", + "gapId": "operator:object.hide_view_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01467", + "gapId": "operator:object.hook_add_newob", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01468", + "gapId": "operator:object.hook_add_selob", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01469", + "gapId": "operator:object.hook_assign", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01470", + "gapId": "operator:object.hook_recenter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01471", + "gapId": "operator:object.hook_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01472", + "gapId": "operator:object.hook_reset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01473", + "gapId": "operator:object.hook_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01474", + "gapId": "operator:object.instance_offset_from_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01475", + "gapId": "operator:object.instance_offset_from_object", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01476", + "gapId": "operator:object.instance_offset_to_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01477", + "gapId": "operator:object.isolate_type_render", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01478", + "gapId": "operator:object.join", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01479", + "gapId": "operator:object.join_shapes", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01480", + "gapId": "operator:object.join_uvs", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01481", + "gapId": "operator:object.laplaciandeform_bind", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01482", + "gapId": "operator:object.lattice_add_to_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01483", + "gapId": "operator:object.light_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01484", + "gapId": "operator:object.light_linking_blocker_collection_new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01485", + "gapId": "operator:object.light_linking_blockers_link", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01486", + "gapId": "operator:object.light_linking_blockers_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01487", + "gapId": "operator:object.light_linking_receiver_collection_new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01488", + "gapId": "operator:object.light_linking_receivers_link", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01489", + "gapId": "operator:object.light_linking_receivers_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01490", + "gapId": "operator:object.light_linking_unlink_from_collection", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01491", + "gapId": "operator:object.lightprobe_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01492", + "gapId": "operator:object.lightprobe_cache_bake", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01493", + "gapId": "operator:object.lightprobe_cache_free", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01494", + "gapId": "operator:object.lineart_bake_strokes", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01495", + "gapId": "operator:object.lineart_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01496", + "gapId": "operator:object.link_to_collection", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01497", + "gapId": "operator:object.location_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01498", + "gapId": "operator:object.make_dupli_face", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01499", + "gapId": "operator:object.make_links_data", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01500", + "gapId": "operator:object.make_links_scene", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01501", + "gapId": "operator:object.make_local", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01502", + "gapId": "operator:object.make_override_library", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01503", + "gapId": "operator:object.make_single_user", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01504", + "gapId": "operator:object.material_slot_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01505", + "gapId": "operator:object.material_slot_assign", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01506", + "gapId": "operator:object.material_slot_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01507", + "gapId": "operator:object.material_slot_deselect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01508", + "gapId": "operator:object.material_slot_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01509", + "gapId": "operator:object.material_slot_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01510", + "gapId": "operator:object.material_slot_remove_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01511", + "gapId": "operator:object.material_slot_remove_unused", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01512", + "gapId": "operator:object.material_slot_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01513", + "gapId": "operator:object.meshdeform_bind", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01514", + "gapId": "operator:object.metaball_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01515", + "gapId": "operator:object.mode_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01516", + "gapId": "operator:object.mode_set_with_submode", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01517", + "gapId": "operator:object.modifier_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01518", + "gapId": "operator:object.modifier_add_node_group", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01519", + "gapId": "operator:object.modifier_apply", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01520", + "gapId": "operator:object.modifier_apply_as_shapekey", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01521", + "gapId": "operator:object.modifier_convert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01522", + "gapId": "operator:object.modifier_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01523", + "gapId": "operator:object.modifier_copy_to_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01524", + "gapId": "operator:object.modifier_move_down", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01525", + "gapId": "operator:object.modifier_move_to_index", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01526", + "gapId": "operator:object.modifier_move_up", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01527", + "gapId": "operator:object.modifier_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01528", + "gapId": "operator:object.modifier_set_active", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01529", + "gapId": "operator:object.modifiers_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01530", + "gapId": "operator:object.modifiers_copy_to_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01531", + "gapId": "operator:object.move_to_collection", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01532", + "gapId": "operator:object.multires_base_apply", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01533", + "gapId": "operator:object.multires_external_pack", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01534", + "gapId": "operator:object.multires_external_save", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01535", + "gapId": "operator:object.multires_higher_levels_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01536", + "gapId": "operator:object.multires_rebuild_subdiv", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01537", + "gapId": "operator:object.multires_reshape", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01538", + "gapId": "operator:object.multires_subdivide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01539", + "gapId": "operator:object.multires_unsubdivide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01540", + "gapId": "operator:object.ocean_bake", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01541", + "gapId": "operator:object.origin_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01542", + "gapId": "operator:object.origin_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01543", + "gapId": "operator:object.parent_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01544", + "gapId": "operator:object.parent_inverse_apply", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01545", + "gapId": "operator:object.parent_no_inverse_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01546", + "gapId": "operator:object.parent_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01547", + "gapId": "operator:object.particle_system_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01548", + "gapId": "operator:object.particle_system_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01549", + "gapId": "operator:object.paste_transform", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01550", + "gapId": "operator:object.paths_calculate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01551", + "gapId": "operator:object.paths_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01552", + "gapId": "operator:object.paths_update", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01553", + "gapId": "operator:object.paths_update_visible", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01554", + "gapId": "operator:object.pointcloud_random_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01555", + "gapId": "operator:object.posemode_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01556", + "gapId": "operator:object.quadriflow_remesh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01557", + "gapId": "operator:object.quick_explode", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01558", + "gapId": "operator:object.quick_fur", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01559", + "gapId": "operator:object.quick_liquid", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01560", + "gapId": "operator:object.quick_smoke", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01561", + "gapId": "operator:object.randomize_transform", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01562", + "gapId": "operator:object.reset_override_library", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01563", + "gapId": "operator:object.rotation_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01564", + "gapId": "operator:object.scale_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01565", + "gapId": "operator:object.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01566", + "gapId": "operator:object.select_by_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01567", + "gapId": "operator:object.select_camera", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01568", + "gapId": "operator:object.select_grouped", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01569", + "gapId": "operator:object.select_hierarchy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01570", + "gapId": "operator:object.select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01571", + "gapId": "operator:object.select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01572", + "gapId": "operator:object.select_mirror", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01573", + "gapId": "operator:object.select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01574", + "gapId": "operator:object.select_pattern", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01575", + "gapId": "operator:object.select_random", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01576", + "gapId": "operator:object.select_same_collection", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01577", + "gapId": "operator:object.shade_auto_smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01578", + "gapId": "operator:object.shade_flat", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01579", + "gapId": "operator:object.shade_smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01580", + "gapId": "operator:object.shade_smooth_by_angle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01581", + "gapId": "operator:object.shaderfx_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01582", + "gapId": "operator:object.shaderfx_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01583", + "gapId": "operator:object.shaderfx_move_down", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01584", + "gapId": "operator:object.shaderfx_move_to_index", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01585", + "gapId": "operator:object.shaderfx_move_up", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01586", + "gapId": "operator:object.shaderfx_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01587", + "gapId": "operator:object.shape_key_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01588", + "gapId": "operator:object.shape_key_apply_to_basis", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01589", + "gapId": "operator:object.shape_key_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01590", + "gapId": "operator:object.shape_key_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01591", + "gapId": "operator:object.shape_key_lock", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01592", + "gapId": "operator:object.shape_key_make_basis", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01593", + "gapId": "operator:object.shape_key_mirror", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01594", + "gapId": "operator:object.shape_key_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01595", + "gapId": "operator:object.shape_key_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01596", + "gapId": "operator:object.shape_key_retime", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01597", + "gapId": "operator:object.shape_key_transfer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01598", + "gapId": "operator:object.simulation_nodes_cache_bake", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01599", + "gapId": "operator:object.simulation_nodes_cache_calculate_to_frame", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01600", + "gapId": "operator:object.simulation_nodes_cache_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01601", + "gapId": "operator:object.skin_armature_create", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01602", + "gapId": "operator:object.skin_loose_mark_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01603", + "gapId": "operator:object.skin_radii_equalize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01604", + "gapId": "operator:object.skin_root_mark", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01605", + "gapId": "operator:object.speaker_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01606", + "gapId": "operator:object.subdivision_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01607", + "gapId": "operator:object.surfacedeform_bind", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01608", + "gapId": "operator:object.text_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01609", + "gapId": "operator:object.track_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01610", + "gapId": "operator:object.track_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01611", + "gapId": "operator:object.transfer_mode", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01612", + "gapId": "operator:object.transform_apply", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01613", + "gapId": "operator:object.transform_axis_target", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01614", + "gapId": "operator:object.transform_to_mouse", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01615", + "gapId": "operator:object.transforms_to_deltas", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01616", + "gapId": "operator:object.unlink_data", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01617", + "gapId": "operator:object.update_shapes", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01618", + "gapId": "operator:object.vertex_group_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01619", + "gapId": "operator:object.vertex_group_assign", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01620", + "gapId": "operator:object.vertex_group_assign_new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01621", + "gapId": "operator:object.vertex_group_clean", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01622", + "gapId": "operator:object.vertex_group_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01623", + "gapId": "operator:object.vertex_group_copy_to_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01624", + "gapId": "operator:object.vertex_group_deselect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01625", + "gapId": "operator:object.vertex_group_invert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01626", + "gapId": "operator:object.vertex_group_levels", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01627", + "gapId": "operator:object.vertex_group_limit_total", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01628", + "gapId": "operator:object.vertex_group_lock", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01629", + "gapId": "operator:object.vertex_group_mirror", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01630", + "gapId": "operator:object.vertex_group_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01631", + "gapId": "operator:object.vertex_group_normalize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01632", + "gapId": "operator:object.vertex_group_normalize_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01633", + "gapId": "operator:object.vertex_group_quantize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01634", + "gapId": "operator:object.vertex_group_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01635", + "gapId": "operator:object.vertex_group_remove_from", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01636", + "gapId": "operator:object.vertex_group_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01637", + "gapId": "operator:object.vertex_group_set_active", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01638", + "gapId": "operator:object.vertex_group_smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01639", + "gapId": "operator:object.vertex_group_sort", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01640", + "gapId": "operator:object.vertex_parent_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01641", + "gapId": "operator:object.vertex_weight_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01642", + "gapId": "operator:object.vertex_weight_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01643", + "gapId": "operator:object.vertex_weight_normalize_active_vertex", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01644", + "gapId": "operator:object.vertex_weight_paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01645", + "gapId": "operator:object.vertex_weight_set_active", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01646", + "gapId": "operator:object.visual_geometry_to_objects", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01647", + "gapId": "operator:object.visual_transform_apply", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01648", + "gapId": "operator:object.volume_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01649", + "gapId": "operator:object.volume_import", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01650", + "gapId": "operator:object.voxel_remesh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01651", + "gapId": "operator:object.voxel_size_edit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01652", + "gapId": "operator:outliner.action_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01653", + "gapId": "operator:outliner.animdata_operation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01654", + "gapId": "operator:outliner.clear_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01655", + "gapId": "operator:outliner.collection_color_tag_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01656", + "gapId": "operator:outliner.collection_disable", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01657", + "gapId": "operator:outliner.collection_disable_render", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01658", + "gapId": "operator:outliner.collection_drop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01659", + "gapId": "operator:outliner.collection_duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01660", + "gapId": "operator:outliner.collection_duplicate_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01661", + "gapId": "operator:outliner.collection_enable", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01662", + "gapId": "operator:outliner.collection_enable_render", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01663", + "gapId": "operator:outliner.collection_exclude_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01664", + "gapId": "operator:outliner.collection_exclude_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01665", + "gapId": "operator:outliner.collection_hide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01666", + "gapId": "operator:outliner.collection_hide_inside", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01667", + "gapId": "operator:outliner.collection_hierarchy_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01668", + "gapId": "operator:outliner.collection_holdout_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01669", + "gapId": "operator:outliner.collection_holdout_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01670", + "gapId": "operator:outliner.collection_indirect_only_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01671", + "gapId": "operator:outliner.collection_indirect_only_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01672", + "gapId": "operator:outliner.collection_instance", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01673", + "gapId": "operator:outliner.collection_isolate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01674", + "gapId": "operator:outliner.collection_link", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01675", + "gapId": "operator:outliner.collection_new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01676", + "gapId": "operator:outliner.collection_objects_deselect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01677", + "gapId": "operator:outliner.collection_objects_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01678", + "gapId": "operator:outliner.collection_show", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01679", + "gapId": "operator:outliner.collection_show_inside", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01680", + "gapId": "operator:outliner.constraint_operation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01681", + "gapId": "operator:outliner.data_operation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01682", + "gapId": "operator:outliner.datastack_drop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01683", + "gapId": "operator:outliner.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01684", + "gapId": "operator:outliner.drivers_add_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01685", + "gapId": "operator:outliner.drivers_delete_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01686", + "gapId": "operator:outliner.expanded_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01687", + "gapId": "operator:outliner.hide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01688", + "gapId": "operator:outliner.highlight_update", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01689", + "gapId": "operator:outliner.id_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01690", + "gapId": "operator:outliner.id_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01691", + "gapId": "operator:outliner.id_linked_relocate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01692", + "gapId": "operator:outliner.id_operation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01693", + "gapId": "operator:outliner.id_paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01694", + "gapId": "operator:outliner.id_remap", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01695", + "gapId": "operator:outliner.item_activate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01696", + "gapId": "operator:outliner.item_drag_drop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01697", + "gapId": "operator:outliner.item_openclose", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01698", + "gapId": "operator:outliner.item_rename", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01699", + "gapId": "operator:outliner.keyingset_add_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01700", + "gapId": "operator:outliner.keyingset_remove_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01701", + "gapId": "operator:outliner.lib_operation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01702", + "gapId": "operator:outliner.lib_relocate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01703", + "gapId": "operator:outliner.liboverride_operation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01704", + "gapId": "operator:outliner.liboverride_property_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01705", + "gapId": "operator:outliner.liboverride_troubleshoot_operation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01706", + "gapId": "operator:outliner.material_drop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01707", + "gapId": "operator:outliner.modifier_operation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01708", + "gapId": "operator:outliner.object_operation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01709", + "gapId": "operator:outliner.operation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01710", + "gapId": "operator:outliner.orphans_manage", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01711", + "gapId": "operator:outliner.orphans_purge", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01712", + "gapId": "operator:outliner.parent_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01713", + "gapId": "operator:outliner.parent_drop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01714", + "gapId": "operator:outliner.scene_drop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01715", + "gapId": "operator:outliner.scene_operation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01716", + "gapId": "operator:outliner.scroll_page", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01717", + "gapId": "operator:outliner.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01718", + "gapId": "operator:outliner.select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01719", + "gapId": "operator:outliner.select_walk", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01720", + "gapId": "operator:outliner.show_active", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01721", + "gapId": "operator:outliner.show_hierarchy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01722", + "gapId": "operator:outliner.show_one_level", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01723", + "gapId": "operator:outliner.start_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01724", + "gapId": "operator:outliner.unhide_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01725", + "gapId": "operator:paint.add_simple_uvs", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01726", + "gapId": "operator:paint.add_texture_paint_slot", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01727", + "gapId": "operator:paint.brush_colors_flip", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01728", + "gapId": "operator:paint.face_select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01729", + "gapId": "operator:paint.face_select_hide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01730", + "gapId": "operator:paint.face_select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01731", + "gapId": "operator:paint.face_select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01732", + "gapId": "operator:paint.face_select_linked_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01733", + "gapId": "operator:paint.face_select_loop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01734", + "gapId": "operator:paint.face_select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01735", + "gapId": "operator:paint.face_vert_reveal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01736", + "gapId": "operator:paint.grab_clone", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01737", + "gapId": "operator:paint.hide_show", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01738", + "gapId": "operator:paint.hide_show_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01739", + "gapId": "operator:paint.hide_show_lasso_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01740", + "gapId": "operator:paint.hide_show_line_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01741", + "gapId": "operator:paint.hide_show_masked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01742", + "gapId": "operator:paint.hide_show_polyline_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01743", + "gapId": "operator:paint.image_from_view", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01744", + "gapId": "operator:paint.image_paint", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01745", + "gapId": "operator:paint.mask_box_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01746", + "gapId": "operator:paint.mask_flood_fill", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01747", + "gapId": "operator:paint.mask_lasso_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01748", + "gapId": "operator:paint.mask_line_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01749", + "gapId": "operator:paint.mask_polyline_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01750", + "gapId": "operator:paint.project_image", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01751", + "gapId": "operator:paint.sample_color", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01752", + "gapId": "operator:paint.texture_paint_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01753", + "gapId": "operator:paint.vert_select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01754", + "gapId": "operator:paint.vert_select_hide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01755", + "gapId": "operator:paint.vert_select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01756", + "gapId": "operator:paint.vert_select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01757", + "gapId": "operator:paint.vert_select_linked_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01758", + "gapId": "operator:paint.vert_select_loop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01759", + "gapId": "operator:paint.vert_select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01760", + "gapId": "operator:paint.vert_select_ungrouped", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01761", + "gapId": "operator:paint.vertex_color_brightness_contrast", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01762", + "gapId": "operator:paint.vertex_color_dirt", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01763", + "gapId": "operator:paint.vertex_color_from_weight", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01764", + "gapId": "operator:paint.vertex_color_hsv", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01765", + "gapId": "operator:paint.vertex_color_invert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01766", + "gapId": "operator:paint.vertex_color_levels", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01767", + "gapId": "operator:paint.vertex_color_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01768", + "gapId": "operator:paint.vertex_color_smooth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01769", + "gapId": "operator:paint.vertex_paint", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01770", + "gapId": "operator:paint.vertex_paint_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01771", + "gapId": "operator:paint.visibility_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01772", + "gapId": "operator:paint.visibility_invert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01773", + "gapId": "operator:paint.weight_from_bones", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01774", + "gapId": "operator:paint.weight_gradient", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01775", + "gapId": "operator:paint.weight_paint", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01776", + "gapId": "operator:paint.weight_paint_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01777", + "gapId": "operator:paint.weight_sample", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01778", + "gapId": "operator:paint.weight_sample_group", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01779", + "gapId": "operator:paint.weight_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01780", + "gapId": "operator:paintcurve.add_point", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01781", + "gapId": "operator:paintcurve.add_point_slide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01782", + "gapId": "operator:paintcurve.cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01783", + "gapId": "operator:paintcurve.delete_point", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01784", + "gapId": "operator:paintcurve.draw", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01785", + "gapId": "operator:paintcurve.new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01786", + "gapId": "operator:paintcurve.select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01787", + "gapId": "operator:paintcurve.slide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01788", + "gapId": "operator:palette.color_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01789", + "gapId": "operator:palette.color_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01790", + "gapId": "operator:palette.color_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01791", + "gapId": "operator:palette.extract_from_image", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01792", + "gapId": "operator:palette.join", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01793", + "gapId": "operator:palette.new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01794", + "gapId": "operator:palette.sort", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01795", + "gapId": "operator:particle.brush_edit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01796", + "gapId": "operator:particle.connect_hair", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01797", + "gapId": "operator:particle.copy_particle_systems", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01798", + "gapId": "operator:particle.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01799", + "gapId": "operator:particle.disconnect_hair", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01800", + "gapId": "operator:particle.duplicate_particle_system", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01801", + "gapId": "operator:particle.dupliob_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01802", + "gapId": "operator:particle.dupliob_move_down", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01803", + "gapId": "operator:particle.dupliob_move_up", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01804", + "gapId": "operator:particle.dupliob_refresh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01805", + "gapId": "operator:particle.dupliob_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01806", + "gapId": "operator:particle.edited_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01807", + "gapId": "operator:particle.hair_dynamics_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01808", + "gapId": "operator:particle.hide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01809", + "gapId": "operator:particle.mirror", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01810", + "gapId": "operator:particle.new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01811", + "gapId": "operator:particle.new_target", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01812", + "gapId": "operator:particle.particle_edit_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01813", + "gapId": "operator:particle.particle_system_remove_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01814", + "gapId": "operator:particle.rekey", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01815", + "gapId": "operator:particle.remove_doubles", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01816", + "gapId": "operator:particle.reveal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01817", + "gapId": "operator:particle.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01818", + "gapId": "operator:particle.select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01819", + "gapId": "operator:particle.select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01820", + "gapId": "operator:particle.select_linked_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01821", + "gapId": "operator:particle.select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01822", + "gapId": "operator:particle.select_random", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01823", + "gapId": "operator:particle.select_roots", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01824", + "gapId": "operator:particle.select_tips", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01825", + "gapId": "operator:particle.shape_cut", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01826", + "gapId": "operator:particle.subdivide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01827", + "gapId": "operator:particle.target_move_down", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01828", + "gapId": "operator:particle.target_move_up", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01829", + "gapId": "operator:particle.target_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01830", + "gapId": "operator:particle.unify_length", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01831", + "gapId": "operator:particle.weight_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01832", + "gapId": "operator:pointcloud.attribute_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01833", + "gapId": "operator:pointcloud.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01834", + "gapId": "operator:pointcloud.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01835", + "gapId": "operator:pointcloud.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01836", + "gapId": "operator:pointcloud.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01837", + "gapId": "operator:pointcloud.select_random", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01838", + "gapId": "operator:pointcloud.separate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01839", + "gapId": "operator:pose.armature_apply", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01840", + "gapId": "operator:pose.autoside_names", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01841", + "gapId": "operator:pose.blend_to_neighbor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01842", + "gapId": "operator:pose.blend_with_rest", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01843", + "gapId": "operator:pose.breakdown", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01844", + "gapId": "operator:pose.constraint_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01845", + "gapId": "operator:pose.constraint_add_with_targets", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01846", + "gapId": "operator:pose.constraints_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01847", + "gapId": "operator:pose.constraints_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01848", + "gapId": "operator:pose.copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01849", + "gapId": "operator:pose.flip_names", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01850", + "gapId": "operator:pose.hide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01851", + "gapId": "operator:pose.ik_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01852", + "gapId": "operator:pose.ik_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01853", + "gapId": "operator:pose.loc_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01854", + "gapId": "operator:pose.paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01855", + "gapId": "operator:pose.paths_calculate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01856", + "gapId": "operator:pose.paths_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01857", + "gapId": "operator:pose.paths_range_update", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01858", + "gapId": "operator:pose.paths_update", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01859", + "gapId": "operator:pose.propagate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01860", + "gapId": "operator:pose.push", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01861", + "gapId": "operator:pose.quaternions_flip", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01862", + "gapId": "operator:pose.relax", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01863", + "gapId": "operator:pose.reveal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01864", + "gapId": "operator:pose.rot_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01865", + "gapId": "operator:pose.rotation_mode_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01866", + "gapId": "operator:pose.scale_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01867", + "gapId": "operator:pose.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01868", + "gapId": "operator:pose.select_constraint_target", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01869", + "gapId": "operator:pose.select_grouped", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01870", + "gapId": "operator:pose.select_hierarchy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01871", + "gapId": "operator:pose.select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01872", + "gapId": "operator:pose.select_linked_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01873", + "gapId": "operator:pose.select_mirror", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01874", + "gapId": "operator:pose.select_parent", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01875", + "gapId": "operator:pose.selection_set_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01876", + "gapId": "operator:pose.selection_set_add_and_assign", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01877", + "gapId": "operator:pose.selection_set_assign", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01878", + "gapId": "operator:pose.selection_set_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01879", + "gapId": "operator:pose.selection_set_delete_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01880", + "gapId": "operator:pose.selection_set_deselect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01881", + "gapId": "operator:pose.selection_set_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01882", + "gapId": "operator:pose.selection_set_paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01883", + "gapId": "operator:pose.selection_set_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01884", + "gapId": "operator:pose.selection_set_remove_bones", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01885", + "gapId": "operator:pose.selection_set_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01886", + "gapId": "operator:pose.selection_set_unassign", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01887", + "gapId": "operator:pose.transforms_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01888", + "gapId": "operator:pose.user_transforms_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01889", + "gapId": "operator:pose.visual_transform_apply", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01890", + "gapId": "operator:poselib.apply_pose_asset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01891", + "gapId": "operator:poselib.asset_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01892", + "gapId": "operator:poselib.asset_modify", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01893", + "gapId": "operator:poselib.blend_pose_asset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01894", + "gapId": "operator:poselib.copy_as_asset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01895", + "gapId": "operator:poselib.create_pose_asset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01896", + "gapId": "operator:poselib.paste_asset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01897", + "gapId": "operator:poselib.pose_asset_select_bones", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01898", + "gapId": "operator:poselib.restore_previous_action", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01899", + "gapId": "operator:preferences.addon_disable", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01900", + "gapId": "operator:preferences.addon_enable", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01901", + "gapId": "operator:preferences.addon_expand", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01902", + "gapId": "operator:preferences.addon_install", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01903", + "gapId": "operator:preferences.addon_refresh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01904", + "gapId": "operator:preferences.addon_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01905", + "gapId": "operator:preferences.addon_show", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01906", + "gapId": "operator:preferences.app_template_install", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01907", + "gapId": "operator:preferences.asset_library_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01908", + "gapId": "operator:preferences.asset_library_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01909", + "gapId": "operator:preferences.associate_blend", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01910", + "gapId": "operator:preferences.autoexec_path_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01911", + "gapId": "operator:preferences.autoexec_path_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01912", + "gapId": "operator:preferences.clear_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01913", + "gapId": "operator:preferences.copy_prev", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01914", + "gapId": "operator:preferences.extension_repo_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01915", + "gapId": "operator:preferences.extension_repo_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01916", + "gapId": "operator:preferences.extension_url_drop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01917", + "gapId": "operator:preferences.keyconfig_activate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01918", + "gapId": "operator:preferences.keyconfig_export", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01919", + "gapId": "operator:preferences.keyconfig_import", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01920", + "gapId": "operator:preferences.keyconfig_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01921", + "gapId": "operator:preferences.keyconfig_test", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01922", + "gapId": "operator:preferences.keyitem_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01923", + "gapId": "operator:preferences.keyitem_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01924", + "gapId": "operator:preferences.keyitem_restore", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01925", + "gapId": "operator:preferences.keymap_restore", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01926", + "gapId": "operator:preferences.reset_default_theme", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01927", + "gapId": "operator:preferences.script_directory_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01928", + "gapId": "operator:preferences.script_directory_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01929", + "gapId": "operator:preferences.start_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01930", + "gapId": "operator:preferences.studiolight_copy_settings", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01931", + "gapId": "operator:preferences.studiolight_install", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01932", + "gapId": "operator:preferences.studiolight_new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01933", + "gapId": "operator:preferences.studiolight_uninstall", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01934", + "gapId": "operator:preferences.theme_install", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01935", + "gapId": "operator:preferences.unassociate_blend", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01936", + "gapId": "operator:ptcache.add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01937", + "gapId": "operator:ptcache.bake", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01938", + "gapId": "operator:ptcache.bake_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01939", + "gapId": "operator:ptcache.bake_from_cache", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01940", + "gapId": "operator:ptcache.free_bake", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01941", + "gapId": "operator:ptcache.free_bake_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01942", + "gapId": "operator:ptcache.remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01943", + "gapId": "operator:render.clear_texture_cache", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01944", + "gapId": "operator:render.color_management_white_balance_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01945", + "gapId": "operator:render.cycles_integrator_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01946", + "gapId": "operator:render.cycles_performance_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01947", + "gapId": "operator:render.cycles_sampling_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01948", + "gapId": "operator:render.cycles_viewport_sampling_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01949", + "gapId": "operator:render.eevee_raytracing_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01950", + "gapId": "operator:render.generate_texture_cache", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01951", + "gapId": "operator:render.opengl", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01952", + "gapId": "operator:render.play_rendered_anim", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01953", + "gapId": "operator:render.preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01954", + "gapId": "operator:render.render", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01955", + "gapId": "operator:render.shutter_curve_preset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01956", + "gapId": "operator:render.swap_dimensions", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01957", + "gapId": "operator:render.view_cancel", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01958", + "gapId": "operator:render.view_show", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01959", + "gapId": "operator:rigidbody.bake_to_keyframes", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01960", + "gapId": "operator:rigidbody.connect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01961", + "gapId": "operator:rigidbody.constraint_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01962", + "gapId": "operator:rigidbody.constraint_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01963", + "gapId": "operator:rigidbody.mass_calculate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01964", + "gapId": "operator:rigidbody.object_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01965", + "gapId": "operator:rigidbody.object_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01966", + "gapId": "operator:rigidbody.object_settings_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01967", + "gapId": "operator:rigidbody.objects_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01968", + "gapId": "operator:rigidbody.objects_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01969", + "gapId": "operator:rigidbody.shape_change", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01970", + "gapId": "operator:rigidbody.world_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01971", + "gapId": "operator:rigidbody.world_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01972", + "gapId": "operator:scene.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01973", + "gapId": "operator:scene.drop_scene_asset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01974", + "gapId": "operator:scene.freestyle_add_edge_marks_to_keying_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01975", + "gapId": "operator:scene.freestyle_add_face_marks_to_keying_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01976", + "gapId": "operator:scene.freestyle_alpha_modifier_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01977", + "gapId": "operator:scene.freestyle_color_modifier_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01978", + "gapId": "operator:scene.freestyle_fill_range_by_selection", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01979", + "gapId": "operator:scene.freestyle_geometry_modifier_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01980", + "gapId": "operator:scene.freestyle_lineset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01981", + "gapId": "operator:scene.freestyle_lineset_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01982", + "gapId": "operator:scene.freestyle_lineset_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01983", + "gapId": "operator:scene.freestyle_lineset_paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01984", + "gapId": "operator:scene.freestyle_lineset_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01985", + "gapId": "operator:scene.freestyle_linestyle_new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01986", + "gapId": "operator:scene.freestyle_modifier_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01987", + "gapId": "operator:scene.freestyle_modifier_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01988", + "gapId": "operator:scene.freestyle_modifier_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01989", + "gapId": "operator:scene.freestyle_module_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01990", + "gapId": "operator:scene.freestyle_module_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01991", + "gapId": "operator:scene.freestyle_module_open", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01992", + "gapId": "operator:scene.freestyle_module_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01993", + "gapId": "operator:scene.freestyle_stroke_material_create", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01994", + "gapId": "operator:scene.freestyle_thickness_modifier_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01995", + "gapId": "operator:scene.gltf2_action_filter_refresh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01996", + "gapId": "operator:scene.gpencil_brush_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01997", + "gapId": "operator:scene.gpencil_material_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01998", + "gapId": "operator:scene.new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-01999", + "gapId": "operator:scene.new_sequencer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02000", + "gapId": "operator:scene.new_sequencer_scene", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02001", + "gapId": "operator:scene.render_view_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02002", + "gapId": "operator:scene.render_view_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02003", + "gapId": "operator:scene.view_layer_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02004", + "gapId": "operator:scene.view_layer_add_aov", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02005", + "gapId": "operator:scene.view_layer_add_lightgroup", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02006", + "gapId": "operator:scene.view_layer_add_used_lightgroups", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02007", + "gapId": "operator:scene.view_layer_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02008", + "gapId": "operator:scene.view_layer_remove_aov", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02009", + "gapId": "operator:scene.view_layer_remove_lightgroup", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02010", + "gapId": "operator:scene.view_layer_remove_unused_lightgroups", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02011", + "gapId": "operator:screen.actionzone", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02012", + "gapId": "operator:screen.animation_cancel", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02013", + "gapId": "operator:screen.animation_pause", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02014", + "gapId": "operator:screen.animation_play", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02015", + "gapId": "operator:screen.animation_step", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02016", + "gapId": "operator:screen.area_close", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02017", + "gapId": "operator:screen.area_dupli", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02018", + "gapId": "operator:screen.area_join", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02019", + "gapId": "operator:screen.area_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02020", + "gapId": "operator:screen.area_options", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02021", + "gapId": "operator:screen.area_split", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02022", + "gapId": "operator:screen.area_swap", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02023", + "gapId": "operator:screen.back_to_previous", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02024", + "gapId": "operator:screen.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02025", + "gapId": "operator:screen.drivers_editor_show", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02026", + "gapId": "operator:screen.edge_merge", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02027", + "gapId": "operator:screen.frame_jump", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02028", + "gapId": "operator:screen.frame_offset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02029", + "gapId": "operator:screen.header_toggle_menus", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02030", + "gapId": "operator:screen.info_log_show", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02031", + "gapId": "operator:screen.keyframe_jump", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02032", + "gapId": "operator:screen.marker_jump", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02033", + "gapId": "operator:screen.new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02034", + "gapId": "operator:screen.quadview_size", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02035", + "gapId": "operator:screen.redo_last", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02036", + "gapId": "operator:screen.region_blend", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02037", + "gapId": "operator:screen.region_context_menu", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02038", + "gapId": "operator:screen.region_flip", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02039", + "gapId": "operator:screen.region_quadview", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02040", + "gapId": "operator:screen.region_scale", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02041", + "gapId": "operator:screen.region_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02042", + "gapId": "operator:screen.repeat_history", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02043", + "gapId": "operator:screen.repeat_last", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02044", + "gapId": "operator:screen.screen_full_area", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02045", + "gapId": "operator:screen.screen_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02046", + "gapId": "operator:screen.screenshot", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02047", + "gapId": "operator:screen.screenshot_area", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02048", + "gapId": "operator:screen.space_context_cycle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02049", + "gapId": "operator:screen.space_type_set_or_cycle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02050", + "gapId": "operator:screen.spacedata_cleanup", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02051", + "gapId": "operator:screen.time_jump", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02052", + "gapId": "operator:screen.userpref_show", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02053", + "gapId": "operator:screen.workspace_cycle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02054", + "gapId": "operator:script.execute_preset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02055", + "gapId": "operator:script.python_file_run", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02056", + "gapId": "operator:script.reload", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02057", + "gapId": "operator:sculpt.brush_stroke", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02058", + "gapId": "operator:sculpt.cloth_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02059", + "gapId": "operator:sculpt.color_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02060", + "gapId": "operator:sculpt.detail_flood_fill", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02061", + "gapId": "operator:sculpt.dynamic_topology_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02062", + "gapId": "operator:sculpt.dyntopo_detail_size_edit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02063", + "gapId": "operator:sculpt.expand", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02064", + "gapId": "operator:sculpt.face_set_box_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02065", + "gapId": "operator:sculpt.face_set_change_visibility", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02066", + "gapId": "operator:sculpt.face_set_edit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02067", + "gapId": "operator:sculpt.face_set_extract", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02068", + "gapId": "operator:sculpt.face_set_lasso_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02069", + "gapId": "operator:sculpt.face_set_line_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02070", + "gapId": "operator:sculpt.face_set_polyline_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02071", + "gapId": "operator:sculpt.face_sets_create", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02072", + "gapId": "operator:sculpt.face_sets_init", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02073", + "gapId": "operator:sculpt.face_sets_randomize_colors", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02074", + "gapId": "operator:sculpt.mask_by_color", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02075", + "gapId": "operator:sculpt.mask_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02076", + "gapId": "operator:sculpt.mask_from_boundary", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02077", + "gapId": "operator:sculpt.mask_from_cavity", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02078", + "gapId": "operator:sculpt.mask_init", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02079", + "gapId": "operator:sculpt.mesh_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02080", + "gapId": "operator:sculpt.optimize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02081", + "gapId": "operator:sculpt.paint_mask_extract", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02082", + "gapId": "operator:sculpt.paint_mask_slice", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02083", + "gapId": "operator:sculpt.project_line_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02084", + "gapId": "operator:sculpt.sample_detail_size", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02085", + "gapId": "operator:sculpt.sculptmode_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02086", + "gapId": "operator:sculpt.set_persistent_base", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02087", + "gapId": "operator:sculpt.set_pivot_position", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02088", + "gapId": "operator:sculpt.symmetrize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02089", + "gapId": "operator:sculpt.trim_box_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02090", + "gapId": "operator:sculpt.trim_lasso_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02091", + "gapId": "operator:sculpt.trim_line_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02092", + "gapId": "operator:sculpt.trim_polyline_gesture", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02093", + "gapId": "operator:sculpt.uv_sculpt_grab", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02094", + "gapId": "operator:sculpt.uv_sculpt_pinch", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02095", + "gapId": "operator:sculpt.uv_sculpt_relax", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02096", + "gapId": "operator:sculpt_curves.brush_stroke", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02097", + "gapId": "operator:sculpt_curves.min_distance_edit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02098", + "gapId": "operator:sculpt_curves.select_grow", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02099", + "gapId": "operator:sculpt_curves.select_random", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02100", + "gapId": "operator:sequencer.add_scene_strip_from_scene_asset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02101", + "gapId": "operator:sequencer.box_blade", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02102", + "gapId": "operator:sequencer.change_effect_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02103", + "gapId": "operator:sequencer.change_path", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02104", + "gapId": "operator:sequencer.change_scene", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02105", + "gapId": "operator:sequencer.connect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02106", + "gapId": "operator:sequencer.copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02107", + "gapId": "operator:sequencer.crossfade_sounds", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02108", + "gapId": "operator:sequencer.cursor_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02109", + "gapId": "operator:sequencer.deinterlace_selected_movies", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02110", + "gapId": "operator:sequencer.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02111", + "gapId": "operator:sequencer.disconnect", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02112", + "gapId": "operator:sequencer.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02113", + "gapId": "operator:sequencer.duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02114", + "gapId": "operator:sequencer.duplicate_move_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02115", + "gapId": "operator:sequencer.effect_strip_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02116", + "gapId": "operator:sequencer.enable_proxies", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02117", + "gapId": "operator:sequencer.export_subtitles", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02118", + "gapId": "operator:sequencer.fades_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02119", + "gapId": "operator:sequencer.fades_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02120", + "gapId": "operator:sequencer.gap_insert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02121", + "gapId": "operator:sequencer.gap_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02122", + "gapId": "operator:sequencer.image_strip_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02123", + "gapId": "operator:sequencer.images_separate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02124", + "gapId": "operator:sequencer.lock", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02125", + "gapId": "operator:sequencer.mask_strip_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02126", + "gapId": "operator:sequencer.meta_make", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02127", + "gapId": "operator:sequencer.meta_separate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02128", + "gapId": "operator:sequencer.meta_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02129", + "gapId": "operator:sequencer.movie_strip_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02130", + "gapId": "operator:sequencer.movieclip_strip_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02131", + "gapId": "operator:sequencer.mute", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02132", + "gapId": "operator:sequencer.offset_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02133", + "gapId": "operator:sequencer.paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02134", + "gapId": "operator:sequencer.preview_duplicate_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02135", + "gapId": "operator:sequencer.preview_duplicate_move_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02136", + "gapId": "operator:sequencer.reassign_inputs", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02137", + "gapId": "operator:sequencer.rebuild_proxy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02138", + "gapId": "operator:sequencer.refresh_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02139", + "gapId": "operator:sequencer.reload", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02140", + "gapId": "operator:sequencer.rename_channel", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02141", + "gapId": "operator:sequencer.rendersize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02142", + "gapId": "operator:sequencer.retiming_add_freeze_frame_slide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02143", + "gapId": "operator:sequencer.retiming_add_transition_slide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02144", + "gapId": "operator:sequencer.retiming_freeze_frame_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02145", + "gapId": "operator:sequencer.retiming_key_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02146", + "gapId": "operator:sequencer.retiming_key_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02147", + "gapId": "operator:sequencer.retiming_reset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02148", + "gapId": "operator:sequencer.retiming_segment_speed_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02149", + "gapId": "operator:sequencer.retiming_show", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02150", + "gapId": "operator:sequencer.retiming_transition_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02151", + "gapId": "operator:sequencer.sample", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02152", + "gapId": "operator:sequencer.scene_frame_range_update", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02153", + "gapId": "operator:sequencer.scene_strip_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02154", + "gapId": "operator:sequencer.scene_strip_add_new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02155", + "gapId": "operator:sequencer.select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02156", + "gapId": "operator:sequencer.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02157", + "gapId": "operator:sequencer.select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02158", + "gapId": "operator:sequencer.select_circle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02159", + "gapId": "operator:sequencer.select_grouped", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02160", + "gapId": "operator:sequencer.select_handle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02161", + "gapId": "operator:sequencer.select_handles", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02162", + "gapId": "operator:sequencer.select_lasso", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02163", + "gapId": "operator:sequencer.select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02164", + "gapId": "operator:sequencer.select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02165", + "gapId": "operator:sequencer.select_linked_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02166", + "gapId": "operator:sequencer.select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02167", + "gapId": "operator:sequencer.select_side", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02168", + "gapId": "operator:sequencer.select_side_of_frame", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02169", + "gapId": "operator:sequencer.set_range_to_strips", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02170", + "gapId": "operator:sequencer.slip", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02171", + "gapId": "operator:sequencer.snap", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02172", + "gapId": "operator:sequencer.sound_strip_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02173", + "gapId": "operator:sequencer.split", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02174", + "gapId": "operator:sequencer.split_multicam", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02175", + "gapId": "operator:sequencer.strip_color_tag_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02176", + "gapId": "operator:sequencer.strip_jump", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02177", + "gapId": "operator:sequencer.strip_modifier_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02178", + "gapId": "operator:sequencer.strip_modifier_add_node_group", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02179", + "gapId": "operator:sequencer.strip_modifier_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02180", + "gapId": "operator:sequencer.strip_modifier_duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02181", + "gapId": "operator:sequencer.strip_modifier_equalizer_redefine", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02182", + "gapId": "operator:sequencer.strip_modifier_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02183", + "gapId": "operator:sequencer.strip_modifier_move_to_index", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02184", + "gapId": "operator:sequencer.strip_modifier_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02185", + "gapId": "operator:sequencer.strip_modifier_set_active", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02186", + "gapId": "operator:sequencer.strip_transform_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02187", + "gapId": "operator:sequencer.strip_transform_fit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02188", + "gapId": "operator:sequencer.swap", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02189", + "gapId": "operator:sequencer.swap_data", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02190", + "gapId": "operator:sequencer.swap_inputs", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02191", + "gapId": "operator:sequencer.text_cursor_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02192", + "gapId": "operator:sequencer.text_cursor_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02193", + "gapId": "operator:sequencer.text_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02194", + "gapId": "operator:sequencer.text_deselect_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02195", + "gapId": "operator:sequencer.text_edit_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02196", + "gapId": "operator:sequencer.text_edit_cut", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02197", + "gapId": "operator:sequencer.text_edit_mode_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02198", + "gapId": "operator:sequencer.text_edit_paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02199", + "gapId": "operator:sequencer.text_insert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02200", + "gapId": "operator:sequencer.text_line_break", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02201", + "gapId": "operator:sequencer.text_select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02202", + "gapId": "operator:sequencer.text_strip_style_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02203", + "gapId": "operator:sequencer.unlock", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02204", + "gapId": "operator:sequencer.unmute", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02205", + "gapId": "operator:sequencer.view_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02206", + "gapId": "operator:sequencer.view_all_preview", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02207", + "gapId": "operator:sequencer.view_frame", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02208", + "gapId": "operator:sequencer.view_ghost_border", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02209", + "gapId": "operator:sequencer.view_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02210", + "gapId": "operator:sequencer.view_zoom_ratio", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02211", + "gapId": "operator:sound.bake_animation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02212", + "gapId": "operator:sound.mixdown", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02213", + "gapId": "operator:sound.open", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02214", + "gapId": "operator:sound.open_mono", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02215", + "gapId": "operator:sound.pack", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02216", + "gapId": "operator:sound.unpack", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02217", + "gapId": "operator:sound.update_animation_flags", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02218", + "gapId": "operator:spreadsheet.add_row_filter_rule", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02219", + "gapId": "operator:spreadsheet.change_spreadsheet_data_source", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02220", + "gapId": "operator:spreadsheet.fit_column", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02221", + "gapId": "operator:spreadsheet.remove_row_filter_rule", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02222", + "gapId": "operator:spreadsheet.reorder_columns", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02223", + "gapId": "operator:spreadsheet.resize_column", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02224", + "gapId": "operator:spreadsheet.toggle_pin", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02225", + "gapId": "operator:surface.primitive_nurbs_surface_circle_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02226", + "gapId": "operator:surface.primitive_nurbs_surface_curve_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02227", + "gapId": "operator:surface.primitive_nurbs_surface_cylinder_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02228", + "gapId": "operator:surface.primitive_nurbs_surface_sphere_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02229", + "gapId": "operator:surface.primitive_nurbs_surface_surface_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02230", + "gapId": "operator:surface.primitive_nurbs_surface_torus_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02231", + "gapId": "operator:text.autocomplete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02232", + "gapId": "operator:text.comment_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02233", + "gapId": "operator:text.convert_whitespace", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02234", + "gapId": "operator:text.copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02235", + "gapId": "operator:text.cursor_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02236", + "gapId": "operator:text.cut", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02237", + "gapId": "operator:text.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02238", + "gapId": "operator:text.duplicate_line", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02239", + "gapId": "operator:text.find", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02240", + "gapId": "operator:text.find_set_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02241", + "gapId": "operator:text.indent", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02242", + "gapId": "operator:text.indent_or_autocomplete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02243", + "gapId": "operator:text.insert", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02244", + "gapId": "operator:text.jump", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02245", + "gapId": "operator:text.jump_to_file_at_point", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02246", + "gapId": "operator:text.line_break", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02247", + "gapId": "operator:text.line_number", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02248", + "gapId": "operator:text.make_internal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02249", + "gapId": "operator:text.move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02250", + "gapId": "operator:text.move_lines", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02251", + "gapId": "operator:text.move_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02252", + "gapId": "operator:text.new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02253", + "gapId": "operator:text.open", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02254", + "gapId": "operator:text.overwrite_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02255", + "gapId": "operator:text.paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02256", + "gapId": "operator:text.reload", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02257", + "gapId": "operator:text.replace", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02258", + "gapId": "operator:text.replace_set_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02259", + "gapId": "operator:text.resolve_conflict", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02260", + "gapId": "operator:text.run_script", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02261", + "gapId": "operator:text.save", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02262", + "gapId": "operator:text.save_as", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02263", + "gapId": "operator:text.scroll", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02264", + "gapId": "operator:text.scroll_bar", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02265", + "gapId": "operator:text.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02266", + "gapId": "operator:text.select_line", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02267", + "gapId": "operator:text.select_word", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02268", + "gapId": "operator:text.selection_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02269", + "gapId": "operator:text.start_find", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02270", + "gapId": "operator:text.to_3d_object", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02271", + "gapId": "operator:text.unindent", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02272", + "gapId": "operator:text.unlink", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02273", + "gapId": "operator:text.update_shader", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02274", + "gapId": "operator:text_editor.preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02275", + "gapId": "operator:texture.new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02276", + "gapId": "operator:texture.slot_copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02277", + "gapId": "operator:texture.slot_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02278", + "gapId": "operator:texture.slot_paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02279", + "gapId": "operator:transform.bbone_resize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02280", + "gapId": "operator:transform.bend", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02281", + "gapId": "operator:transform.create_orientation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02282", + "gapId": "operator:transform.delete_orientation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02283", + "gapId": "operator:transform.edge_bevelweight", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02284", + "gapId": "operator:transform.edge_crease", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02285", + "gapId": "operator:transform.edge_slide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02286", + "gapId": "operator:transform.from_gizmo", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02287", + "gapId": "operator:transform.mirror", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02288", + "gapId": "operator:transform.push_pull", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02289", + "gapId": "operator:transform.resize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02290", + "gapId": "operator:transform.rotate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02291", + "gapId": "operator:transform.rotate_normal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02292", + "gapId": "operator:transform.select_orientation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02293", + "gapId": "operator:transform.seq_slide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02294", + "gapId": "operator:transform.shear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02295", + "gapId": "operator:transform.shrink_fatten", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02296", + "gapId": "operator:transform.skin_resize", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02297", + "gapId": "operator:transform.tilt", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02298", + "gapId": "operator:transform.tosphere", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02299", + "gapId": "operator:transform.trackball", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02300", + "gapId": "operator:transform.transform", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02301", + "gapId": "operator:transform.translate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02302", + "gapId": "operator:transform.vert_crease", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02303", + "gapId": "operator:transform.vert_slide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02304", + "gapId": "operator:transform.vertex_random", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02305", + "gapId": "operator:transform.vertex_warp", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02306", + "gapId": "operator:ui.assign_default_button", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02307", + "gapId": "operator:ui.button_execute", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02308", + "gapId": "operator:ui.button_string_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02309", + "gapId": "operator:ui.copy_as_driver_button", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02310", + "gapId": "operator:ui.copy_data_path_button", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02311", + "gapId": "operator:ui.copy_driver_to_selected_button", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02312", + "gapId": "operator:ui.copy_python_command_button", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02313", + "gapId": "operator:ui.copy_to_selected_button", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02314", + "gapId": "operator:ui.drop_color", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02315", + "gapId": "operator:ui.drop_material", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02316", + "gapId": "operator:ui.drop_name", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02317", + "gapId": "operator:ui.editsource", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02318", + "gapId": "operator:ui.eyedropper_bone", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02319", + "gapId": "operator:ui.eyedropper_color", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02320", + "gapId": "operator:ui.eyedropper_colorramp", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02321", + "gapId": "operator:ui.eyedropper_colorramp_point", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02322", + "gapId": "operator:ui.eyedropper_depth", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02323", + "gapId": "operator:ui.eyedropper_driver", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02324", + "gapId": "operator:ui.eyedropper_grease_pencil_color", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02325", + "gapId": "operator:ui.eyedropper_id", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02326", + "gapId": "operator:ui.jump_to_target_button", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02327", + "gapId": "operator:ui.list_start_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02328", + "gapId": "operator:ui.override_add_button", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02329", + "gapId": "operator:ui.override_idtemplate_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02330", + "gapId": "operator:ui.override_idtemplate_make", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02331", + "gapId": "operator:ui.override_idtemplate_reset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02332", + "gapId": "operator:ui.override_remove_button", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02333", + "gapId": "operator:ui.reloadtranslation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02334", + "gapId": "operator:ui.reset_default_button", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02335", + "gapId": "operator:ui.unset_property_button", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02336", + "gapId": "operator:ui.view_drop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02337", + "gapId": "operator:ui.view_item_delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02338", + "gapId": "operator:ui.view_item_focus", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02339", + "gapId": "operator:ui.view_item_navigate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02340", + "gapId": "operator:ui.view_item_rename", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02341", + "gapId": "operator:ui.view_item_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02342", + "gapId": "operator:ui.view_scroll", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02343", + "gapId": "operator:ui.view_start_filter", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02344", + "gapId": "operator:uilist.entry_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02345", + "gapId": "operator:uilist.entry_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02346", + "gapId": "operator:uilist.entry_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02347", + "gapId": "operator:uv.align", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02348", + "gapId": "operator:uv.align_rotation", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02349", + "gapId": "operator:uv.arrange_islands", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02350", + "gapId": "operator:uv.average_islands_scale", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02351", + "gapId": "operator:uv.copy", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02352", + "gapId": "operator:uv.copy_mirrored_faces", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02353", + "gapId": "operator:uv.cube_project", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02354", + "gapId": "operator:uv.cursor_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02355", + "gapId": "operator:uv.custom_region_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02356", + "gapId": "operator:uv.cylinder_project", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02357", + "gapId": "operator:uv.export_layout", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02358", + "gapId": "operator:uv.follow_active_quads", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02359", + "gapId": "operator:uv.hide", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02360", + "gapId": "operator:uv.lightmap_pack", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02361", + "gapId": "operator:uv.mark_seam", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02362", + "gapId": "operator:uv.minimize_stretch", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02363", + "gapId": "operator:uv.move_on_axis", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02364", + "gapId": "operator:uv.pack_islands", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02365", + "gapId": "operator:uv.paste", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02366", + "gapId": "operator:uv.pin", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02367", + "gapId": "operator:uv.project_from_view", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02368", + "gapId": "operator:uv.randomize_uv_transform", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02369", + "gapId": "operator:uv.remove_doubles", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02370", + "gapId": "operator:uv.reset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02371", + "gapId": "operator:uv.reveal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02372", + "gapId": "operator:uv.rip", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02373", + "gapId": "operator:uv.rip_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02374", + "gapId": "operator:uv.seams_from_islands", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02375", + "gapId": "operator:uv.select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02376", + "gapId": "operator:uv.select_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02377", + "gapId": "operator:uv.select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02378", + "gapId": "operator:uv.select_by_winding", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02379", + "gapId": "operator:uv.select_circle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02380", + "gapId": "operator:uv.select_edge_ring", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02381", + "gapId": "operator:uv.select_lasso", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02382", + "gapId": "operator:uv.select_less", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02383", + "gapId": "operator:uv.select_linked", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02384", + "gapId": "operator:uv.select_linked_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02385", + "gapId": "operator:uv.select_loop", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02386", + "gapId": "operator:uv.select_mode", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02387", + "gapId": "operator:uv.select_more", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02388", + "gapId": "operator:uv.select_overlap", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02389", + "gapId": "operator:uv.select_pinned", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02390", + "gapId": "operator:uv.select_similar", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02391", + "gapId": "operator:uv.select_split", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02392", + "gapId": "operator:uv.select_tile", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02393", + "gapId": "operator:uv.shortest_path_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02394", + "gapId": "operator:uv.shortest_path_select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02395", + "gapId": "operator:uv.smart_project", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02396", + "gapId": "operator:uv.snap_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02397", + "gapId": "operator:uv.snap_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02398", + "gapId": "operator:uv.sphere_project", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02399", + "gapId": "operator:uv.stitch", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02400", + "gapId": "operator:uv.unwrap", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02401", + "gapId": "operator:uv.weld", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02402", + "gapId": "operator:view2d.edge_pan", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02403", + "gapId": "operator:view2d.ndof", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02404", + "gapId": "operator:view2d.pan", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02405", + "gapId": "operator:view2d.reset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02406", + "gapId": "operator:view2d.scroll_down", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02407", + "gapId": "operator:view2d.scroll_left", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02408", + "gapId": "operator:view2d.scroll_right", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02409", + "gapId": "operator:view2d.scroll_up", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02410", + "gapId": "operator:view2d.scroller_activate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02411", + "gapId": "operator:view2d.smoothview", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02412", + "gapId": "operator:view2d.zoom", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02413", + "gapId": "operator:view2d.zoom_border", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02414", + "gapId": "operator:view2d.zoom_in", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02415", + "gapId": "operator:view2d.zoom_out", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02416", + "gapId": "operator:view3d.bone_select_menu", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02417", + "gapId": "operator:view3d.camera_background_image_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02418", + "gapId": "operator:view3d.camera_background_image_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02419", + "gapId": "operator:view3d.camera_to_view", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02420", + "gapId": "operator:view3d.camera_to_view_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02421", + "gapId": "operator:view3d.clear_render_border", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02422", + "gapId": "operator:view3d.clip_border", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02423", + "gapId": "operator:view3d.copybuffer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02424", + "gapId": "operator:view3d.cursor3d", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02425", + "gapId": "operator:view3d.dolly", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02426", + "gapId": "operator:view3d.drop_world", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02427", + "gapId": "operator:view3d.edit_mesh_extrude_individual_move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02428", + "gapId": "operator:view3d.edit_mesh_extrude_manifold_normal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02429", + "gapId": "operator:view3d.edit_mesh_extrude_move_normal", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02430", + "gapId": "operator:view3d.edit_mesh_extrude_move_shrink_fatten", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02431", + "gapId": "operator:view3d.fly", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02432", + "gapId": "operator:view3d.interactive_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02433", + "gapId": "operator:view3d.localview", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02434", + "gapId": "operator:view3d.localview_remove_from", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02435", + "gapId": "operator:view3d.move", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02436", + "gapId": "operator:view3d.navigate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02437", + "gapId": "operator:view3d.ndof_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02438", + "gapId": "operator:view3d.ndof_orbit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02439", + "gapId": "operator:view3d.ndof_orbit_zoom", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02440", + "gapId": "operator:view3d.ndof_pan", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02441", + "gapId": "operator:view3d.object_as_camera", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02442", + "gapId": "operator:view3d.object_mode_pie_or_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02443", + "gapId": "operator:view3d.pastebuffer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02444", + "gapId": "operator:view3d.render_border", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02445", + "gapId": "operator:view3d.rotate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02446", + "gapId": "operator:view3d.ruler_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02447", + "gapId": "operator:view3d.ruler_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02448", + "gapId": "operator:view3d.select", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02449", + "gapId": "operator:view3d.select_box", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02450", + "gapId": "operator:view3d.select_circle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02451", + "gapId": "operator:view3d.select_lasso", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02452", + "gapId": "operator:view3d.select_menu", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02453", + "gapId": "operator:view3d.smoothview", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02454", + "gapId": "operator:view3d.snap_cursor_to_active", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02455", + "gapId": "operator:view3d.snap_cursor_to_center", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02456", + "gapId": "operator:view3d.snap_cursor_to_grid", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02457", + "gapId": "operator:view3d.snap_cursor_to_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02458", + "gapId": "operator:view3d.snap_selected_to_active", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02459", + "gapId": "operator:view3d.snap_selected_to_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02460", + "gapId": "operator:view3d.snap_selected_to_grid", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02461", + "gapId": "operator:view3d.toggle_matcap_flip", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02462", + "gapId": "operator:view3d.toggle_shading", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02463", + "gapId": "operator:view3d.toggle_xray", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02464", + "gapId": "operator:view3d.transform_gizmo_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02465", + "gapId": "operator:view3d.view_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02466", + "gapId": "operator:view3d.view_axis", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02467", + "gapId": "operator:view3d.view_camera", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02468", + "gapId": "operator:view3d.view_center_camera", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02469", + "gapId": "operator:view3d.view_center_cursor", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02470", + "gapId": "operator:view3d.view_center_lock", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02471", + "gapId": "operator:view3d.view_center_pick", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02472", + "gapId": "operator:view3d.view_lock_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02473", + "gapId": "operator:view3d.view_lock_to_active", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02474", + "gapId": "operator:view3d.view_orbit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02475", + "gapId": "operator:view3d.view_pan", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02476", + "gapId": "operator:view3d.view_persportho", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02477", + "gapId": "operator:view3d.view_roll", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02478", + "gapId": "operator:view3d.view_selected", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02479", + "gapId": "operator:view3d.walk", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02480", + "gapId": "operator:view3d.zoom", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02481", + "gapId": "operator:view3d.zoom_border", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02482", + "gapId": "operator:view3d.zoom_camera_1_to_1", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02483", + "gapId": "operator:wm.append", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02484", + "gapId": "operator:wm.batch_rename", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02485", + "gapId": "operator:wm.blend_strings_utf8_validate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02486", + "gapId": "operator:wm.call_asset_shelf_popover", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02487", + "gapId": "operator:wm.call_menu", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02488", + "gapId": "operator:wm.call_menu_pie", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02489", + "gapId": "operator:wm.call_panel", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02490", + "gapId": "operator:wm.clear_recent_files", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02491", + "gapId": "operator:wm.collection_export_all", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02492", + "gapId": "operator:wm.context_collection_boolean_set", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02493", + "gapId": "operator:wm.context_cycle_array", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02494", + "gapId": "operator:wm.context_cycle_enum", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02495", + "gapId": "operator:wm.context_cycle_int", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02496", + "gapId": "operator:wm.context_menu_enum", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02497", + "gapId": "operator:wm.context_modal_mouse", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02498", + "gapId": "operator:wm.context_pie_enum", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02499", + "gapId": "operator:wm.context_scale_float", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02500", + "gapId": "operator:wm.context_scale_int", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02501", + "gapId": "operator:wm.context_set_boolean", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02502", + "gapId": "operator:wm.context_set_enum", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02503", + "gapId": "operator:wm.context_set_float", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02504", + "gapId": "operator:wm.context_set_id", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02505", + "gapId": "operator:wm.context_set_int", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02506", + "gapId": "operator:wm.context_set_string", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02507", + "gapId": "operator:wm.context_set_value", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02508", + "gapId": "operator:wm.context_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02509", + "gapId": "operator:wm.context_toggle_enum", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02510", + "gapId": "operator:wm.debug_menu", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02511", + "gapId": "operator:wm.doc_view", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02512", + "gapId": "operator:wm.doc_view_manual", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02513", + "gapId": "operator:wm.doc_view_manual_ui_context", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02514", + "gapId": "operator:wm.drop_blend_file", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02515", + "gapId": "operator:wm.drop_import_file", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02516", + "gapId": "operator:wm.fbx_import", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02517", + "gapId": "operator:wm.grease_pencil_export_svg", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02518", + "gapId": "operator:wm.grease_pencil_import_svg", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02519", + "gapId": "operator:wm.id_linked_relocate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02520", + "gapId": "operator:wm.interface_theme_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02521", + "gapId": "operator:wm.interface_theme_preset_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02522", + "gapId": "operator:wm.interface_theme_preset_save", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02523", + "gapId": "operator:wm.keyconfig_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02524", + "gapId": "operator:wm.keyconfig_preset_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02525", + "gapId": "operator:wm.lib_reload", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02526", + "gapId": "operator:wm.lib_relocate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02527", + "gapId": "operator:wm.link", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02528", + "gapId": "operator:wm.memory_statistics", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02529", + "gapId": "operator:wm.obj_export", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02530", + "gapId": "operator:wm.obj_import", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02531", + "gapId": "operator:wm.open_mainfile", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02532", + "gapId": "operator:wm.operator_cheat_sheet", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02533", + "gapId": "operator:wm.operator_defaults", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02534", + "gapId": "operator:wm.operator_pie_enum", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02535", + "gapId": "operator:wm.operator_preset_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02536", + "gapId": "operator:wm.operator_presets_cleanup", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02537", + "gapId": "operator:wm.owner_disable", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02538", + "gapId": "operator:wm.owner_enable", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02539", + "gapId": "operator:wm.path_open", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02540", + "gapId": "operator:wm.ply_export", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02541", + "gapId": "operator:wm.ply_import", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02542", + "gapId": "operator:wm.previews_batch_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02543", + "gapId": "operator:wm.previews_batch_generate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02544", + "gapId": "operator:wm.previews_clear", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02545", + "gapId": "operator:wm.previews_ensure", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02546", + "gapId": "operator:wm.properties_add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02547", + "gapId": "operator:wm.properties_context_change", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02548", + "gapId": "operator:wm.properties_edit", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02549", + "gapId": "operator:wm.properties_edit_value", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02550", + "gapId": "operator:wm.properties_remove", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02551", + "gapId": "operator:wm.quit_blender", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02552", + "gapId": "operator:wm.radial_control", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02553", + "gapId": "operator:wm.read_factory_settings", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02554", + "gapId": "operator:wm.read_factory_userpref", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02555", + "gapId": "operator:wm.read_history", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02556", + "gapId": "operator:wm.read_homefile", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02557", + "gapId": "operator:wm.read_userpref", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02558", + "gapId": "operator:wm.recover_auto_save", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02559", + "gapId": "operator:wm.recover_last_session", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02560", + "gapId": "operator:wm.redraw_timer", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02561", + "gapId": "operator:wm.revert_mainfile", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02562", + "gapId": "operator:wm.save_as_mainfile", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02563", + "gapId": "operator:wm.save_auto_save", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02564", + "gapId": "operator:wm.save_homefile", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02565", + "gapId": "operator:wm.save_mainfile", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02566", + "gapId": "operator:wm.save_userpref", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02567", + "gapId": "operator:wm.search_menu", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02568", + "gapId": "operator:wm.search_operator", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02569", + "gapId": "operator:wm.search_single_menu", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02570", + "gapId": "operator:wm.set_stereo_3d", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02571", + "gapId": "operator:wm.set_working_color_space", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02572", + "gapId": "operator:wm.splash", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02573", + "gapId": "operator:wm.splash_about", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02574", + "gapId": "operator:wm.stl_export", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02575", + "gapId": "operator:wm.stl_import", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02576", + "gapId": "operator:wm.sysinfo", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02577", + "gapId": "operator:wm.tool_set_by_brush_type", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02578", + "gapId": "operator:wm.tool_set_by_id", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02579", + "gapId": "operator:wm.tool_set_by_index", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02580", + "gapId": "operator:wm.toolbar", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02581", + "gapId": "operator:wm.toolbar_fallback_pie", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02582", + "gapId": "operator:wm.toolbar_prompt", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02583", + "gapId": "operator:wm.url_open", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02584", + "gapId": "operator:wm.url_open_preset", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02585", + "gapId": "operator:wm.window_close", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02586", + "gapId": "operator:wm.window_fullscreen_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02587", + "gapId": "operator:wm.window_new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02588", + "gapId": "operator:wm.window_new_main", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02589", + "gapId": "operator:workspace.add", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02590", + "gapId": "operator:workspace.append_activate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02591", + "gapId": "operator:workspace.delete", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02592", + "gapId": "operator:workspace.delete_all_others", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02593", + "gapId": "operator:workspace.duplicate", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02594", + "gapId": "operator:workspace.reorder_to_back", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02595", + "gapId": "operator:workspace.reorder_to_front", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02596", + "gapId": "operator:workspace.scene_pin_toggle", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02597", + "gapId": "operator:world.convert_volume_to_mesh", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02598", + "gapId": "operator:world.new", + "ownerFamily": "OPERATOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02599", + "gapId": "rna:Main:BlendData", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02600", + "gapId": "rna:Main:BlendDataActions", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02601", + "gapId": "rna:Main:BlendDataAnnotations", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02602", + "gapId": "rna:Main:BlendDataArmatures", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02603", + "gapId": "rna:Main:BlendDataBrushes", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02604", + "gapId": "rna:Main:BlendDataCacheFiles", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02605", + "gapId": "rna:Main:BlendDataCameras", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02606", + "gapId": "rna:Main:BlendDataCollections", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02607", + "gapId": "rna:Main:BlendDataCurves", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02608", + "gapId": "rna:Main:BlendDataFonts", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02609", + "gapId": "rna:Main:BlendDataGreasePencilsV3", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02610", + "gapId": "rna:Main:BlendDataHairCurves", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02611", + "gapId": "rna:Main:BlendDataImages", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02612", + "gapId": "rna:Main:BlendDataLattices", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02613", + "gapId": "rna:Main:BlendDataLibraries", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02614", + "gapId": "rna:Main:BlendDataLights", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02615", + "gapId": "rna:Main:BlendDataLineStyles", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02616", + "gapId": "rna:Main:BlendDataMasks", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02617", + "gapId": "rna:Main:BlendDataMaterials", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02618", + "gapId": "rna:Main:BlendDataMeshes", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02619", + "gapId": "rna:Main:BlendDataMetaBalls", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02620", + "gapId": "rna:Main:BlendDataMovieClips", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02621", + "gapId": "rna:Main:BlendDataNodeTrees", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02622", + "gapId": "rna:Main:BlendDataObjects", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02623", + "gapId": "rna:Main:BlendDataPaintCurves", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02624", + "gapId": "rna:Main:BlendDataPalettes", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02625", + "gapId": "rna:Main:BlendDataParticles", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02626", + "gapId": "rna:Main:BlendDataPointClouds", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02627", + "gapId": "rna:Main:BlendDataProbes", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02628", + "gapId": "rna:Main:BlendDataScenes", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02629", + "gapId": "rna:Main:BlendDataScreens", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02630", + "gapId": "rna:Main:BlendDataSounds", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02631", + "gapId": "rna:Main:BlendDataSpeakers", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02632", + "gapId": "rna:Main:BlendDataTexts", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02633", + "gapId": "rna:Main:BlendDataTextures", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02634", + "gapId": "rna:Main:BlendDataVolumes", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02635", + "gapId": "rna:Main:BlendDataWindowManagers", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02636", + "gapId": "rna:Main:BlendDataWorkSpaces", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02637", + "gapId": "rna:Main:BlendDataWorlds", + "ownerFamily": "Main", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02638", + "gapId": "rna:Mesh:Attribute", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02639", + "gapId": "rna:Mesh:AttributeGroupMesh", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02640", + "gapId": "rna:Mesh:BoolAttribute", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02641", + "gapId": "rna:Mesh:ByteColorAttribute", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02642", + "gapId": "rna:Mesh:FloatAttribute", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02643", + "gapId": "rna:Mesh:IntAttribute", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02644", + "gapId": "rna:Mesh:Mesh", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02645", + "gapId": "rna:Mesh:MeshAutomaskingSettings", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02646", + "gapId": "rna:Mesh:MeshCacheModifier", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02647", + "gapId": "rna:Mesh:MeshDeformModifier", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02648", + "gapId": "rna:Mesh:MeshEdge", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02649", + "gapId": "rna:Mesh:MeshEdges", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02650", + "gapId": "rna:Mesh:MeshLoop", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02651", + "gapId": "rna:Mesh:MeshLoopColor", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02652", + "gapId": "rna:Mesh:MeshLoopColorLayer", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02653", + "gapId": "rna:Mesh:MeshLoopTriangle", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02654", + "gapId": "rna:Mesh:MeshLoopTriangles", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02655", + "gapId": "rna:Mesh:MeshLoops", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02656", + "gapId": "rna:Mesh:MeshNormalValue", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02657", + "gapId": "rna:Mesh:MeshPolygon", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02658", + "gapId": "rna:Mesh:MeshPolygons", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02659", + "gapId": "rna:Mesh:MeshSequenceCacheModifier", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02660", + "gapId": "rna:Mesh:MeshSkinVertex", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02661", + "gapId": "rna:Mesh:MeshSkinVertexLayer", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02662", + "gapId": "rna:Mesh:MeshStatVis", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02663", + "gapId": "rna:Mesh:MeshToVolumeModifier", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02664", + "gapId": "rna:Mesh:MeshUVLoop", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02665", + "gapId": "rna:Mesh:MeshUVLoopLayer", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02666", + "gapId": "rna:Mesh:MeshVertex", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M16-GAP-02667", + "gapId": "rna:Mesh:MeshVertices", + "ownerFamily": "Mesh", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00001", + "gapId": "constraint:ACTION", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00002", + "gapId": "constraint:ARMATURE", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00003", + "gapId": "constraint:CAMERA_SOLVER", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00004", + "gapId": "constraint:CHILD_OF", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00005", + "gapId": "constraint:CLAMP_TO", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00006", + "gapId": "constraint:COPY_LOCATION", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00007", + "gapId": "constraint:COPY_ROTATION", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00008", + "gapId": "constraint:COPY_SCALE", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00009", + "gapId": "constraint:COPY_TRANSFORMS", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00010", + "gapId": "constraint:DAMPED_TRACK", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00011", + "gapId": "constraint:FLOOR", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00012", + "gapId": "constraint:FOLLOW_PATH", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00013", + "gapId": "constraint:FOLLOW_TRACK", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00014", + "gapId": "constraint:GEOMETRY_ATTRIBUTE", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00015", + "gapId": "constraint:IK", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00016", + "gapId": "constraint:LIMIT_DISTANCE", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00017", + "gapId": "constraint:LIMIT_LOCATION", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00018", + "gapId": "constraint:LIMIT_ROTATION", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00019", + "gapId": "constraint:LIMIT_SCALE", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00020", + "gapId": "constraint:LOCKED_TRACK", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00021", + "gapId": "constraint:MAINTAIN_VOLUME", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00022", + "gapId": "constraint:OBJECT_SOLVER", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00023", + "gapId": "constraint:PIVOT", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00024", + "gapId": "constraint:SHRINKWRAP", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00025", + "gapId": "constraint:SPLINE_IK", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00026", + "gapId": "constraint:STRETCH_TO", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00027", + "gapId": "constraint:TRACK_TO", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00028", + "gapId": "constraint:TRANSFORM", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M17-GAP-00029", + "gapId": "constraint:TRANSFORM_CACHE", + "ownerFamily": "CONSTRAINT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00001", + "gapId": "node:Compositor:CompositorNodeAlphaOver", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00002", + "gapId": "node:Compositor:CompositorNodeAntiAliasing", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00003", + "gapId": "node:Compositor:CompositorNodeBilateralblur", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00004", + "gapId": "node:Compositor:CompositorNodeBlankImage", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00005", + "gapId": "node:Compositor:CompositorNodeBlur", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00006", + "gapId": "node:Compositor:CompositorNodeBokehBlur", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00007", + "gapId": "node:Compositor:CompositorNodeBokehImage", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00008", + "gapId": "node:Compositor:CompositorNodeBoxMask", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00009", + "gapId": "node:Compositor:CompositorNodeBrightContrast", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00010", + "gapId": "node:Compositor:CompositorNodeChannelMatte", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00011", + "gapId": "node:Compositor:CompositorNodeChromaMatte", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00012", + "gapId": "node:Compositor:CompositorNodeColorBalance", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00013", + "gapId": "node:Compositor:CompositorNodeColorCorrection", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00014", + "gapId": "node:Compositor:CompositorNodeColorMatte", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00015", + "gapId": "node:Compositor:CompositorNodeColorSpill", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00016", + "gapId": "node:Compositor:CompositorNodeCombineColor", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00017", + "gapId": "node:Compositor:CompositorNodeConvertColorSpace", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00018", + "gapId": "node:Compositor:CompositorNodeConvertToDisplay", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00019", + "gapId": "node:Compositor:CompositorNodeConvolve", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00020", + "gapId": "node:Compositor:CompositorNodeCornerPin", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00021", + "gapId": "node:Compositor:CompositorNodeCrop", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00022", + "gapId": "node:Compositor:CompositorNodeCryptomatte", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00023", + "gapId": "node:Compositor:CompositorNodeCryptomatteV2", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00024", + "gapId": "node:Compositor:CompositorNodeCurveRGB", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00025", + "gapId": "node:Compositor:CompositorNodeDBlur", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00026", + "gapId": "node:Compositor:CompositorNodeDefocus", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00027", + "gapId": "node:Compositor:CompositorNodeDenoise", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00028", + "gapId": "node:Compositor:CompositorNodeDespeckle", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00029", + "gapId": "node:Compositor:CompositorNodeDiffMatte", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00030", + "gapId": "node:Compositor:CompositorNodeDilateErode", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00031", + "gapId": "node:Compositor:CompositorNodeDisplace", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00032", + "gapId": "node:Compositor:CompositorNodeDistanceMatte", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00033", + "gapId": "node:Compositor:CompositorNodeDoubleEdgeMask", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00034", + "gapId": "node:Compositor:CompositorNodeEllipseMask", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00035", + "gapId": "node:Compositor:CompositorNodeExposure", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00036", + "gapId": "node:Compositor:CompositorNodeFilter", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00037", + "gapId": "node:Compositor:CompositorNodeFlip", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00038", + "gapId": "node:Compositor:CompositorNodeGlare", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00039", + "gapId": "node:Compositor:CompositorNodeGroup", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00040", + "gapId": "node:Compositor:CompositorNodeHueCorrect", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00041", + "gapId": "node:Compositor:CompositorNodeHueSat", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00042", + "gapId": "node:Compositor:CompositorNodeIDMask", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00043", + "gapId": "node:Compositor:CompositorNodeImage", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00044", + "gapId": "node:Compositor:CompositorNodeImageCoordinates", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00045", + "gapId": "node:Compositor:CompositorNodeImageInfo", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00046", + "gapId": "node:Compositor:CompositorNodeInpaint", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00047", + "gapId": "node:Compositor:CompositorNodeInvert", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00048", + "gapId": "node:Compositor:CompositorNodeKeying", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00049", + "gapId": "node:Compositor:CompositorNodeKeyingScreen", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00050", + "gapId": "node:Compositor:CompositorNodeKuwahara", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00051", + "gapId": "node:Compositor:CompositorNodeLensdist", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00052", + "gapId": "node:Compositor:CompositorNodeLevels", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00053", + "gapId": "node:Compositor:CompositorNodeLumaMatte", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00054", + "gapId": "node:Compositor:CompositorNodeMapUV", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00055", + "gapId": "node:Compositor:CompositorNodeMask", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00056", + "gapId": "node:Compositor:CompositorNodeMaskToSDF", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00057", + "gapId": "node:Compositor:CompositorNodeMovieClip", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00058", + "gapId": "node:Compositor:CompositorNodeMovieDistortion", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00059", + "gapId": "node:Compositor:CompositorNodeNormal", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00060", + "gapId": "node:Compositor:CompositorNodeNormalize", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00061", + "gapId": "node:Compositor:CompositorNodeOutputFile", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00062", + "gapId": "node:Compositor:CompositorNodePixelate", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00063", + "gapId": "node:Compositor:CompositorNodePlaneTrackDeform", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00064", + "gapId": "node:Compositor:CompositorNodePosterize", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00065", + "gapId": "node:Compositor:CompositorNodePremulKey", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00066", + "gapId": "node:Compositor:CompositorNodeRGB", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00067", + "gapId": "node:Compositor:CompositorNodeRGBToBW", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00068", + "gapId": "node:Compositor:CompositorNodeRLayers", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00069", + "gapId": "node:Compositor:CompositorNodeRelativeToPixel", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00070", + "gapId": "node:Compositor:CompositorNodeRotate", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00071", + "gapId": "node:Compositor:CompositorNodeScale", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00072", + "gapId": "node:Compositor:CompositorNodeSceneTime", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00073", + "gapId": "node:Compositor:CompositorNodeSeparateColor", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00074", + "gapId": "node:Compositor:CompositorNodeSequencerStripInfo", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00075", + "gapId": "node:Compositor:CompositorNodeSetAlpha", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00076", + "gapId": "node:Compositor:CompositorNodeSplit", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00077", + "gapId": "node:Compositor:CompositorNodeStabilize", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00078", + "gapId": "node:Compositor:CompositorNodeStringToImage", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00079", + "gapId": "node:Compositor:CompositorNodeSwitch", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00080", + "gapId": "node:Compositor:CompositorNodeSwitchView", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00081", + "gapId": "node:Compositor:CompositorNodeTime", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00082", + "gapId": "node:Compositor:CompositorNodeTonemap", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00083", + "gapId": "node:Compositor:CompositorNodeTrackPos", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00084", + "gapId": "node:Compositor:CompositorNodeTransform", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00085", + "gapId": "node:Compositor:CompositorNodeTranslate", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00086", + "gapId": "node:Compositor:CompositorNodeVecBlur", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00087", + "gapId": "node:Compositor:CompositorNodeViewer", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00088", + "gapId": "node:Compositor:CompositorNodeZcombine", + "ownerFamily": "COMPOSITOR_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00089", + "gapId": "node:Geometry:GeometryNodeAccumulateField", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00090", + "gapId": "node:Geometry:GeometryNodeAttributeDomainSize", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00091", + "gapId": "node:Geometry:GeometryNodeAttributeStatistic", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00092", + "gapId": "node:Geometry:GeometryNodeBake", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00093", + "gapId": "node:Geometry:GeometryNodeBlurAttribute", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00094", + "gapId": "node:Geometry:GeometryNodeBoneInfo", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00095", + "gapId": "node:Geometry:GeometryNodeBoundBox", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00096", + "gapId": "node:Geometry:GeometryNodeCameraInfo", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00097", + "gapId": "node:Geometry:GeometryNodeCaptureAttribute", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00098", + "gapId": "node:Geometry:GeometryNodeClosureToList", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00099", + "gapId": "node:Geometry:GeometryNodeClusterByConnected", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00100", + "gapId": "node:Geometry:GeometryNodeClusterByDistance", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00101", + "gapId": "node:Geometry:GeometryNodeCollectionChildren", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00102", + "gapId": "node:Geometry:GeometryNodeCollectionInfo", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00103", + "gapId": "node:Geometry:GeometryNodeConvexHull", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00104", + "gapId": "node:Geometry:GeometryNodeCornersOfEdge", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00105", + "gapId": "node:Geometry:GeometryNodeCornersOfFace", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00106", + "gapId": "node:Geometry:GeometryNodeCornersOfVertex", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00107", + "gapId": "node:Geometry:GeometryNodeCubeGridTopology", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00108", + "gapId": "node:Geometry:GeometryNodeCurveArc", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00109", + "gapId": "node:Geometry:GeometryNodeCurveEndpointSelection", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00110", + "gapId": "node:Geometry:GeometryNodeCurveHandleTypeSelection", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00111", + "gapId": "node:Geometry:GeometryNodeCurveLength", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00112", + "gapId": "node:Geometry:GeometryNodeCurveOfPoint", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00113", + "gapId": "node:Geometry:GeometryNodeCurvePrimitiveBezierSegment", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00114", + "gapId": "node:Geometry:GeometryNodeCurvePrimitiveCircle", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00115", + "gapId": "node:Geometry:GeometryNodeCurvePrimitiveLine", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00116", + "gapId": "node:Geometry:GeometryNodeCurvePrimitiveQuadrilateral", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00117", + "gapId": "node:Geometry:GeometryNodeCurveQuadraticBezier", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00118", + "gapId": "node:Geometry:GeometryNodeCurveSetHandles", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00119", + "gapId": "node:Geometry:GeometryNodeCurveSpiral", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00120", + "gapId": "node:Geometry:GeometryNodeCurveSplineType", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00121", + "gapId": "node:Geometry:GeometryNodeCurveStar", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00122", + "gapId": "node:Geometry:GeometryNodeCurveToMesh", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00123", + "gapId": "node:Geometry:GeometryNodeCurveToPoints", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00124", + "gapId": "node:Geometry:GeometryNodeCurvesToGreasePencil", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00125", + "gapId": "node:Geometry:GeometryNodeDeformCurvesOnSurface", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00126", + "gapId": "node:Geometry:GeometryNodeDeleteGeometry", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00127", + "gapId": "node:Geometry:GeometryNodeDistributePointsInGrid", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00128", + "gapId": "node:Geometry:GeometryNodeDistributePointsInVolume", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00129", + "gapId": "node:Geometry:GeometryNodeDistributePointsOnFaces", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00130", + "gapId": "node:Geometry:GeometryNodeDualMesh", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00131", + "gapId": "node:Geometry:GeometryNodeDuplicateElements", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00132", + "gapId": "node:Geometry:GeometryNodeEdgePathsToCurves", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00133", + "gapId": "node:Geometry:GeometryNodeEdgePathsToSelection", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00134", + "gapId": "node:Geometry:GeometryNodeEdgesOfCorner", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00135", + "gapId": "node:Geometry:GeometryNodeEdgesOfVertex", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00136", + "gapId": "node:Geometry:GeometryNodeEdgesToFaceGroups", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00137", + "gapId": "node:Geometry:GeometryNodeExtrudeMesh", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00138", + "gapId": "node:Geometry:GeometryNodeFaceOfCorner", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00139", + "gapId": "node:Geometry:GeometryNodeFieldAtIndex", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00140", + "gapId": "node:Geometry:GeometryNodeFieldAverage", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00141", + "gapId": "node:Geometry:GeometryNodeFieldMinAndMax", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00142", + "gapId": "node:Geometry:GeometryNodeFieldOnDomain", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00143", + "gapId": "node:Geometry:GeometryNodeFieldToGrid", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00144", + "gapId": "node:Geometry:GeometryNodeFieldToList", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00145", + "gapId": "node:Geometry:GeometryNodeFieldVariance", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00146", + "gapId": "node:Geometry:GeometryNodeFillCurve", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00147", + "gapId": "node:Geometry:GeometryNodeFilletCurve", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00148", + "gapId": "node:Geometry:GeometryNodeFilterList", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00149", + "gapId": "node:Geometry:GeometryNodeFlipFaces", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00150", + "gapId": "node:Geometry:GeometryNodeForeachGeometryElementInput", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00151", + "gapId": "node:Geometry:GeometryNodeForeachGeometryElementOutput", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00152", + "gapId": "node:Geometry:GeometryNodeGeometryToInstance", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00153", + "gapId": "node:Geometry:GeometryNodeGetAttributeNames", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00154", + "gapId": "node:Geometry:GeometryNodeGetGeometryBundle", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00155", + "gapId": "node:Geometry:GeometryNodeGetGeometryComponent", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00156", + "gapId": "node:Geometry:GeometryNodeGetNamedGrid", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00157", + "gapId": "node:Geometry:GeometryNodeGizmoDial", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00158", + "gapId": "node:Geometry:GeometryNodeGizmoLinear", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00159", + "gapId": "node:Geometry:GeometryNodeGizmoTransform", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00160", + "gapId": "node:Geometry:GeometryNodeGreasePencilToCurves", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00161", + "gapId": "node:Geometry:GeometryNodeGridAdvect", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00162", + "gapId": "node:Geometry:GeometryNodeGridClip", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00163", + "gapId": "node:Geometry:GeometryNodeGridCurl", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00164", + "gapId": "node:Geometry:GeometryNodeGridDilateAndErode", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00165", + "gapId": "node:Geometry:GeometryNodeGridDivergence", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00166", + "gapId": "node:Geometry:GeometryNodeGridGradient", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00167", + "gapId": "node:Geometry:GeometryNodeGridInfo", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00168", + "gapId": "node:Geometry:GeometryNodeGridLaplacian", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00169", + "gapId": "node:Geometry:GeometryNodeGridMean", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00170", + "gapId": "node:Geometry:GeometryNodeGridMedian", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00171", + "gapId": "node:Geometry:GeometryNodeGridPrune", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00172", + "gapId": "node:Geometry:GeometryNodeGridToMesh", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00173", + "gapId": "node:Geometry:GeometryNodeGridToPoints", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00174", + "gapId": "node:Geometry:GeometryNodeGridVoxelize", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00175", + "gapId": "node:Geometry:GeometryNodeGroup", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00176", + "gapId": "node:Geometry:GeometryNodeImageInfo", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00177", + "gapId": "node:Geometry:GeometryNodeImageTexture", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00178", + "gapId": "node:Geometry:GeometryNodeImportCSV", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00179", + "gapId": "node:Geometry:GeometryNodeImportOBJ", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00180", + "gapId": "node:Geometry:GeometryNodeImportPLY", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00181", + "gapId": "node:Geometry:GeometryNodeImportSTL", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00182", + "gapId": "node:Geometry:GeometryNodeImportText", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00183", + "gapId": "node:Geometry:GeometryNodeImportVDB", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00184", + "gapId": "node:Geometry:GeometryNodeIndexOfNearest", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00185", + "gapId": "node:Geometry:GeometryNodeIndexSwitch", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00186", + "gapId": "node:Geometry:GeometryNodeInputActiveCamera", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00187", + "gapId": "node:Geometry:GeometryNodeInputCollection", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00188", + "gapId": "node:Geometry:GeometryNodeInputCurveHandlePositions", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00189", + "gapId": "node:Geometry:GeometryNodeInputCurveTilt", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00190", + "gapId": "node:Geometry:GeometryNodeInputEdgeSmooth", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00191", + "gapId": "node:Geometry:GeometryNodeInputFont", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00192", + "gapId": "node:Geometry:GeometryNodeInputID", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00193", + "gapId": "node:Geometry:GeometryNodeInputImage", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00194", + "gapId": "node:Geometry:GeometryNodeInputIndex", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00195", + "gapId": "node:Geometry:GeometryNodeInputInstanceBounds", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00196", + "gapId": "node:Geometry:GeometryNodeInputInstanceReference", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00197", + "gapId": "node:Geometry:GeometryNodeInputInstanceRotation", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00198", + "gapId": "node:Geometry:GeometryNodeInputInstanceScale", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00199", + "gapId": "node:Geometry:GeometryNodeInputMaterial", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00200", + "gapId": "node:Geometry:GeometryNodeInputMaterialIndex", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00201", + "gapId": "node:Geometry:GeometryNodeInputMeshEdgeAngle", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00202", + "gapId": "node:Geometry:GeometryNodeInputMeshEdgeNeighbors", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00203", + "gapId": "node:Geometry:GeometryNodeInputMeshEdgeVertices", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00204", + "gapId": "node:Geometry:GeometryNodeInputMeshFaceArea", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00205", + "gapId": "node:Geometry:GeometryNodeInputMeshFaceIsPlanar", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00206", + "gapId": "node:Geometry:GeometryNodeInputMeshFaceNeighbors", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00207", + "gapId": "node:Geometry:GeometryNodeInputMeshIsland", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00208", + "gapId": "node:Geometry:GeometryNodeInputMeshVertexNeighbors", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00209", + "gapId": "node:Geometry:GeometryNodeInputNamedAttribute", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00210", + "gapId": "node:Geometry:GeometryNodeInputNamedLayerSelection", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00211", + "gapId": "node:Geometry:GeometryNodeInputNormal", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00212", + "gapId": "node:Geometry:GeometryNodeInputObject", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00213", + "gapId": "node:Geometry:GeometryNodeInputPosition", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00214", + "gapId": "node:Geometry:GeometryNodeInputRadius", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00215", + "gapId": "node:Geometry:GeometryNodeInputSceneTime", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00216", + "gapId": "node:Geometry:GeometryNodeInputShadeSmooth", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00217", + "gapId": "node:Geometry:GeometryNodeInputShortestEdgePaths", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00218", + "gapId": "node:Geometry:GeometryNodeInputSplineCyclic", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00219", + "gapId": "node:Geometry:GeometryNodeInputSplineResolution", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00220", + "gapId": "node:Geometry:GeometryNodeInputTangent", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00221", + "gapId": "node:Geometry:GeometryNodeInputVoxelIndex", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00222", + "gapId": "node:Geometry:GeometryNodeInstanceOnPoints", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00223", + "gapId": "node:Geometry:GeometryNodeInstanceTransform", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00224", + "gapId": "node:Geometry:GeometryNodeInstancesToPoints", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00225", + "gapId": "node:Geometry:GeometryNodeInterpolateCurves", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00226", + "gapId": "node:Geometry:GeometryNodeIsViewport", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00227", + "gapId": "node:Geometry:GeometryNodeJoinGeometry", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00228", + "gapId": "node:Geometry:GeometryNodeListGetItem", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00229", + "gapId": "node:Geometry:GeometryNodeListLength", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00230", + "gapId": "node:Geometry:GeometryNodeMaterialSelection", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00231", + "gapId": "node:Geometry:GeometryNodeMenuSwitch", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00232", + "gapId": "node:Geometry:GeometryNodeMergeByDistance", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00233", + "gapId": "node:Geometry:GeometryNodeMergeLayers", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00234", + "gapId": "node:Geometry:GeometryNodeMergePoints", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00235", + "gapId": "node:Geometry:GeometryNodeMeshBevel", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00236", + "gapId": "node:Geometry:GeometryNodeMeshBoolean", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00237", + "gapId": "node:Geometry:GeometryNodeMeshCircle", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00238", + "gapId": "node:Geometry:GeometryNodeMeshCone", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00239", + "gapId": "node:Geometry:GeometryNodeMeshCube", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00240", + "gapId": "node:Geometry:GeometryNodeMeshCylinder", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00241", + "gapId": "node:Geometry:GeometryNodeMeshFaceSetBoundaries", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00242", + "gapId": "node:Geometry:GeometryNodeMeshGrid", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00243", + "gapId": "node:Geometry:GeometryNodeMeshIcoSphere", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00244", + "gapId": "node:Geometry:GeometryNodeMeshLine", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00245", + "gapId": "node:Geometry:GeometryNodeMeshToCurve", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00246", + "gapId": "node:Geometry:GeometryNodeMeshToDensityGrid", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00247", + "gapId": "node:Geometry:GeometryNodeMeshToPoints", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00248", + "gapId": "node:Geometry:GeometryNodeMeshToSDFGrid", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00249", + "gapId": "node:Geometry:GeometryNodeMeshToVolume", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00250", + "gapId": "node:Geometry:GeometryNodeMeshUVSphere", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00251", + "gapId": "node:Geometry:GeometryNodeObjectInfo", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00252", + "gapId": "node:Geometry:GeometryNodeOffsetCornerInFace", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00253", + "gapId": "node:Geometry:GeometryNodeOffsetPointInCurve", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00254", + "gapId": "node:Geometry:GeometryNodePoints", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00255", + "gapId": "node:Geometry:GeometryNodePointsOfCurve", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00256", + "gapId": "node:Geometry:GeometryNodePointsToCurves", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00257", + "gapId": "node:Geometry:GeometryNodePointsToSDFGrid", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00258", + "gapId": "node:Geometry:GeometryNodePointsToVertices", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00259", + "gapId": "node:Geometry:GeometryNodePointsToVolume", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00260", + "gapId": "node:Geometry:GeometryNodeProximity", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00261", + "gapId": "node:Geometry:GeometryNodeRaycast", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00262", + "gapId": "node:Geometry:GeometryNodeRealizeInstances", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00263", + "gapId": "node:Geometry:GeometryNodeRemoveAttribute", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00264", + "gapId": "node:Geometry:GeometryNodeRenameAttribute", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00265", + "gapId": "node:Geometry:GeometryNodeRepeatInput", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00266", + "gapId": "node:Geometry:GeometryNodeRepeatOutput", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00267", + "gapId": "node:Geometry:GeometryNodeReplaceMaterial", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00268", + "gapId": "node:Geometry:GeometryNodeResampleCurve", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00269", + "gapId": "node:Geometry:GeometryNodeReverseCurve", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00270", + "gapId": "node:Geometry:GeometryNodeRotateInstances", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00271", + "gapId": "node:Geometry:GeometryNodeSDFGridBoolean", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00272", + "gapId": "node:Geometry:GeometryNodeSDFGridFillet", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00273", + "gapId": "node:Geometry:GeometryNodeSDFGridLaplacian", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00274", + "gapId": "node:Geometry:GeometryNodeSDFGridMean", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00275", + "gapId": "node:Geometry:GeometryNodeSDFGridMeanCurvature", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00276", + "gapId": "node:Geometry:GeometryNodeSDFGridMedian", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00277", + "gapId": "node:Geometry:GeometryNodeSDFGridOffset", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00278", + "gapId": "node:Geometry:GeometryNodeSampleCurve", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00279", + "gapId": "node:Geometry:GeometryNodeSampleGrid", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00280", + "gapId": "node:Geometry:GeometryNodeSampleGridIndex", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00281", + "gapId": "node:Geometry:GeometryNodeSampleIndex", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00282", + "gapId": "node:Geometry:GeometryNodeSampleNearest", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00283", + "gapId": "node:Geometry:GeometryNodeSampleNearestSurface", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00284", + "gapId": "node:Geometry:GeometryNodeSampleSoundFrequencies", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00285", + "gapId": "node:Geometry:GeometryNodeSampleUVSurface", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00286", + "gapId": "node:Geometry:GeometryNodeScaleElements", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00287", + "gapId": "node:Geometry:GeometryNodeScaleInstances", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00288", + "gapId": "node:Geometry:GeometryNodeSelfObject", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00289", + "gapId": "node:Geometry:GeometryNodeSeparateComponents", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00290", + "gapId": "node:Geometry:GeometryNodeSeparateGeometry", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00291", + "gapId": "node:Geometry:GeometryNodeSetCurveHandlePositions", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00292", + "gapId": "node:Geometry:GeometryNodeSetCurveNormal", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00293", + "gapId": "node:Geometry:GeometryNodeSetCurveRadius", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00294", + "gapId": "node:Geometry:GeometryNodeSetCurveTilt", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00295", + "gapId": "node:Geometry:GeometryNodeSetGeometryBundle", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00296", + "gapId": "node:Geometry:GeometryNodeSetGeometryName", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00297", + "gapId": "node:Geometry:GeometryNodeSetGreasePencilColor", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00298", + "gapId": "node:Geometry:GeometryNodeSetGreasePencilDepth", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00299", + "gapId": "node:Geometry:GeometryNodeSetGreasePencilSoftness", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00300", + "gapId": "node:Geometry:GeometryNodeSetGridBackground", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00301", + "gapId": "node:Geometry:GeometryNodeSetGridTransform", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00302", + "gapId": "node:Geometry:GeometryNodeSetID", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00303", + "gapId": "node:Geometry:GeometryNodeSetInstanceTransform", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00304", + "gapId": "node:Geometry:GeometryNodeSetMaterial", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00305", + "gapId": "node:Geometry:GeometryNodeSetMaterialIndex", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00306", + "gapId": "node:Geometry:GeometryNodeSetMeshNormal", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00307", + "gapId": "node:Geometry:GeometryNodeSetNURBSOrder", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00308", + "gapId": "node:Geometry:GeometryNodeSetNURBSWeight", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00309", + "gapId": "node:Geometry:GeometryNodeSetPointRadius", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00310", + "gapId": "node:Geometry:GeometryNodeSetPosition", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00311", + "gapId": "node:Geometry:GeometryNodeSetShadeSmooth", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00312", + "gapId": "node:Geometry:GeometryNodeSetSplineCyclic", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00313", + "gapId": "node:Geometry:GeometryNodeSetSplineResolution", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00314", + "gapId": "node:Geometry:GeometryNodeSimulationInput", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00315", + "gapId": "node:Geometry:GeometryNodeSimulationOutput", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00316", + "gapId": "node:Geometry:GeometryNodeSortElements", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00317", + "gapId": "node:Geometry:GeometryNodeSortList", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00318", + "gapId": "node:Geometry:GeometryNodeSplineLength", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00319", + "gapId": "node:Geometry:GeometryNodeSplineParameter", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00320", + "gapId": "node:Geometry:GeometryNodeSplitEdges", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00321", + "gapId": "node:Geometry:GeometryNodeSplitToInstances", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00322", + "gapId": "node:Geometry:GeometryNodeStoreNamedAttribute", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00323", + "gapId": "node:Geometry:GeometryNodeStoreNamedGrid", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00324", + "gapId": "node:Geometry:GeometryNodeStringJoin", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00325", + "gapId": "node:Geometry:GeometryNodeStringToCurves", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00326", + "gapId": "node:Geometry:GeometryNodeSubdivideCurve", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00327", + "gapId": "node:Geometry:GeometryNodeSubdivideMesh", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00328", + "gapId": "node:Geometry:GeometryNodeSubdivisionSurface", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00329", + "gapId": "node:Geometry:GeometryNodeSwitch", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00330", + "gapId": "node:Geometry:GeometryNodeTagFilter", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00331", + "gapId": "node:Geometry:GeometryNodeTool3DCursor", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00332", + "gapId": "node:Geometry:GeometryNodeToolActiveElement", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00333", + "gapId": "node:Geometry:GeometryNodeToolFaceSet", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00334", + "gapId": "node:Geometry:GeometryNodeToolMousePosition", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00335", + "gapId": "node:Geometry:GeometryNodeToolSelection", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00336", + "gapId": "node:Geometry:GeometryNodeToolSetFaceSet", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00337", + "gapId": "node:Geometry:GeometryNodeToolSetSelection", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00338", + "gapId": "node:Geometry:GeometryNodeTransferAttributes", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00339", + "gapId": "node:Geometry:GeometryNodeTransform", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00340", + "gapId": "node:Geometry:GeometryNodeTranslateInstances", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00341", + "gapId": "node:Geometry:GeometryNodeTriangulate", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00342", + "gapId": "node:Geometry:GeometryNodeTrimCurve", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00343", + "gapId": "node:Geometry:GeometryNodeUVPackIslands", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00344", + "gapId": "node:Geometry:GeometryNodeUVTangent", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00345", + "gapId": "node:Geometry:GeometryNodeUVUnwrap", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00346", + "gapId": "node:Geometry:GeometryNodeVertexOfCorner", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00347", + "gapId": "node:Geometry:GeometryNodeViewer", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00348", + "gapId": "node:Geometry:GeometryNodeViewportTransform", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00349", + "gapId": "node:Geometry:GeometryNodeVolumeCube", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00350", + "gapId": "node:Geometry:GeometryNodeVolumeToMesh", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00351", + "gapId": "node:Geometry:GeometryNodeWarning", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00352", + "gapId": "node:Geometry:GeometryNodeXPBDSolver", + "ownerFamily": "GEOMETRY_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00353", + "gapId": "node:Shader:ShaderNodeAddShader", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00354", + "gapId": "node:Shader:ShaderNodeAmbientOcclusion", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00355", + "gapId": "node:Shader:ShaderNodeAttribute", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00356", + "gapId": "node:Shader:ShaderNodeBackground", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00357", + "gapId": "node:Shader:ShaderNodeBevel", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00358", + "gapId": "node:Shader:ShaderNodeBlackbody", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00359", + "gapId": "node:Shader:ShaderNodeBrightContrast", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00360", + "gapId": "node:Shader:ShaderNodeBsdfAnisotropic", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00361", + "gapId": "node:Shader:ShaderNodeBsdfDiffuse", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00362", + "gapId": "node:Shader:ShaderNodeBsdfGlass", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00363", + "gapId": "node:Shader:ShaderNodeBsdfHair", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00364", + "gapId": "node:Shader:ShaderNodeBsdfHairPrincipled", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00365", + "gapId": "node:Shader:ShaderNodeBsdfMetallic", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00366", + "gapId": "node:Shader:ShaderNodeBsdfPrincipled", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00367", + "gapId": "node:Shader:ShaderNodeBsdfRayPortal", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00368", + "gapId": "node:Shader:ShaderNodeBsdfRefraction", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00369", + "gapId": "node:Shader:ShaderNodeBsdfSheen", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00370", + "gapId": "node:Shader:ShaderNodeBsdfToon", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00371", + "gapId": "node:Shader:ShaderNodeBsdfTranslucent", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00372", + "gapId": "node:Shader:ShaderNodeBsdfTransparent", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00373", + "gapId": "node:Shader:ShaderNodeBump", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00374", + "gapId": "node:Shader:ShaderNodeCameraData", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00375", + "gapId": "node:Shader:ShaderNodeClamp", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00376", + "gapId": "node:Shader:ShaderNodeCombineColor", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00377", + "gapId": "node:Shader:ShaderNodeCombineXYZ", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00378", + "gapId": "node:Shader:ShaderNodeDisplacement", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00379", + "gapId": "node:Shader:ShaderNodeEeveeSpecular", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00380", + "gapId": "node:Shader:ShaderNodeEmission", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00381", + "gapId": "node:Shader:ShaderNodeFloatCurve", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00382", + "gapId": "node:Shader:ShaderNodeFresnel", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00383", + "gapId": "node:Shader:ShaderNodeGamma", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00384", + "gapId": "node:Shader:ShaderNodeGroup", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00385", + "gapId": "node:Shader:ShaderNodeHairInfo", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00386", + "gapId": "node:Shader:ShaderNodeHoldout", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00387", + "gapId": "node:Shader:ShaderNodeHueSaturation", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00388", + "gapId": "node:Shader:ShaderNodeInvert", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00389", + "gapId": "node:Shader:ShaderNodeLayerWeight", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00390", + "gapId": "node:Shader:ShaderNodeLightFalloff", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00391", + "gapId": "node:Shader:ShaderNodeLightPath", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00392", + "gapId": "node:Shader:ShaderNodeMapRange", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00393", + "gapId": "node:Shader:ShaderNodeMapping", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00394", + "gapId": "node:Shader:ShaderNodeMath", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00395", + "gapId": "node:Shader:ShaderNodeMix", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00396", + "gapId": "node:Shader:ShaderNodeMixRGB", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00397", + "gapId": "node:Shader:ShaderNodeMixShader", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00398", + "gapId": "node:Shader:ShaderNodeNewGeometry", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00399", + "gapId": "node:Shader:ShaderNodeNormal", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00400", + "gapId": "node:Shader:ShaderNodeNormalMap", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00401", + "gapId": "node:Shader:ShaderNodeObjectInfo", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00402", + "gapId": "node:Shader:ShaderNodeOutputAOV", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00403", + "gapId": "node:Shader:ShaderNodeOutputLight", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00404", + "gapId": "node:Shader:ShaderNodeOutputLineStyle", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00405", + "gapId": "node:Shader:ShaderNodeOutputMaterial", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00406", + "gapId": "node:Shader:ShaderNodeOutputWorld", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00407", + "gapId": "node:Shader:ShaderNodeParticleInfo", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00408", + "gapId": "node:Shader:ShaderNodePointInfo", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00409", + "gapId": "node:Shader:ShaderNodeRGB", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00410", + "gapId": "node:Shader:ShaderNodeRGBCurve", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00411", + "gapId": "node:Shader:ShaderNodeRGBToBW", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00412", + "gapId": "node:Shader:ShaderNodeRadialTiling", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00413", + "gapId": "node:Shader:ShaderNodeRaycast", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00414", + "gapId": "node:Shader:ShaderNodeScript", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00415", + "gapId": "node:Shader:ShaderNodeSeparateColor", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00416", + "gapId": "node:Shader:ShaderNodeSeparateXYZ", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00417", + "gapId": "node:Shader:ShaderNodeShaderToRGB", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00418", + "gapId": "node:Shader:ShaderNodeSqueeze", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00419", + "gapId": "node:Shader:ShaderNodeSubsurfaceScattering", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00420", + "gapId": "node:Shader:ShaderNodeTangent", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00421", + "gapId": "node:Shader:ShaderNodeTexBrick", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00422", + "gapId": "node:Shader:ShaderNodeTexChecker", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00423", + "gapId": "node:Shader:ShaderNodeTexCoord", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00424", + "gapId": "node:Shader:ShaderNodeTexEnvironment", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00425", + "gapId": "node:Shader:ShaderNodeTexGabor", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00426", + "gapId": "node:Shader:ShaderNodeTexGradient", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00427", + "gapId": "node:Shader:ShaderNodeTexIES", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00428", + "gapId": "node:Shader:ShaderNodeTexImage", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00429", + "gapId": "node:Shader:ShaderNodeTexMagic", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00430", + "gapId": "node:Shader:ShaderNodeTexNoise", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00431", + "gapId": "node:Shader:ShaderNodeTexSky", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00432", + "gapId": "node:Shader:ShaderNodeTexVoronoi", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00433", + "gapId": "node:Shader:ShaderNodeTexWave", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00434", + "gapId": "node:Shader:ShaderNodeTexWhiteNoise", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00435", + "gapId": "node:Shader:ShaderNodeUVAlongStroke", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00436", + "gapId": "node:Shader:ShaderNodeUVMap", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00437", + "gapId": "node:Shader:ShaderNodeValToRGB", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00438", + "gapId": "node:Shader:ShaderNodeValue", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00439", + "gapId": "node:Shader:ShaderNodeVectorCurve", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00440", + "gapId": "node:Shader:ShaderNodeVectorDisplacement", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00441", + "gapId": "node:Shader:ShaderNodeVectorMath", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00442", + "gapId": "node:Shader:ShaderNodeVectorRotate", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00443", + "gapId": "node:Shader:ShaderNodeVectorTransform", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00444", + "gapId": "node:Shader:ShaderNodeVertexColor", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00445", + "gapId": "node:Shader:ShaderNodeVolumeAbsorption", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00446", + "gapId": "node:Shader:ShaderNodeVolumeCoefficients", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00447", + "gapId": "node:Shader:ShaderNodeVolumeInfo", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00448", + "gapId": "node:Shader:ShaderNodeVolumePrincipled", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00449", + "gapId": "node:Shader:ShaderNodeVolumeScatter", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00450", + "gapId": "node:Shader:ShaderNodeWavelength", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M18-GAP-00451", + "gapId": "node:Shader:ShaderNodeWireframe", + "ownerFamily": "SHADER_NODE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00001", + "gapId": "rna:Core:Action", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00002", + "gapId": "rna:Core:Armature", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00003", + "gapId": "rna:Core:Brush", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00004", + "gapId": "rna:Core:Curve", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00005", + "gapId": "rna:Core:Curves", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00006", + "gapId": "rna:Core:GreasePencil", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00007", + "gapId": "rna:Core:ID", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00008", + "gapId": "rna:Core:Image", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00009", + "gapId": "rna:Core:Key", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00010", + "gapId": "rna:Core:Lattice", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00011", + "gapId": "rna:Core:Mask", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00012", + "gapId": "rna:Core:MetaBall", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00013", + "gapId": "rna:Core:MovieClip", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00014", + "gapId": "rna:Core:Palette", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00015", + "gapId": "rna:Core:ParticleSettings", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00016", + "gapId": "rna:Core:PointCloud", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00017", + "gapId": "rna:Core:Sound", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00018", + "gapId": "rna:Core:Speaker", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00019", + "gapId": "rna:Core:Text", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M19-GAP-00020", + "gapId": "rna:Core:Volume", + "ownerFamily": "Core", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00001", + "gapId": "physics:BakeSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00002", + "gapId": "physics:BlendDataParticles", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00003", + "gapId": "physics:BoidRule", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00004", + "gapId": "physics:BoidRuleAverageSpeed", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00005", + "gapId": "physics:BoidRuleAvoid", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00006", + "gapId": "physics:BoidRuleAvoidCollision", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00007", + "gapId": "physics:BoidRuleFight", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00008", + "gapId": "physics:BoidRuleFollowLeader", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00009", + "gapId": "physics:BoidRuleGoal", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00010", + "gapId": "physics:BoidSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00011", + "gapId": "physics:BoidState", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00012", + "gapId": "physics:ChildParticle", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00013", + "gapId": "physics:ClothCollisionSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00014", + "gapId": "physics:ClothModifier", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00015", + "gapId": "physics:ClothSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00016", + "gapId": "physics:ClothSolverResult", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00017", + "gapId": "physics:CollisionModifier", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00018", + "gapId": "physics:CollisionSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00019", + "gapId": "physics:DynamicPaintBrushSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00020", + "gapId": "physics:DynamicPaintCanvasSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00021", + "gapId": "physics:DynamicPaintModifier", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00022", + "gapId": "physics:DynamicPaintSurface", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00023", + "gapId": "physics:DynamicPaintSurfaces", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00024", + "gapId": "physics:EffectorWeights", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00025", + "gapId": "physics:FieldSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00026", + "gapId": "physics:FluidDomainSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00027", + "gapId": "physics:FluidEffectorSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00028", + "gapId": "physics:FluidFlowSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00029", + "gapId": "physics:FluidModifier", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00030", + "gapId": "physics:GeometryNodeAccumulateField", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00031", + "gapId": "physics:GeometryNodeFieldAtIndex", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00032", + "gapId": "physics:GeometryNodeFieldAverage", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00033", + "gapId": "physics:GeometryNodeFieldMinAndMax", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00034", + "gapId": "physics:GeometryNodeFieldOnDomain", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00035", + "gapId": "physics:GeometryNodeFieldToGrid", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00036", + "gapId": "physics:GeometryNodeFieldToGridItem", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00037", + "gapId": "physics:GeometryNodeFieldToGridItems", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00038", + "gapId": "physics:GeometryNodeFieldToList", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00039", + "gapId": "physics:GeometryNodeFieldToListItem", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00040", + "gapId": "physics:GeometryNodeFieldToListItems", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00041", + "gapId": "physics:GeometryNodeFieldVariance", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00042", + "gapId": "physics:Particle", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00043", + "gapId": "physics:ParticleBrush", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00044", + "gapId": "physics:ParticleDupliWeight", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00045", + "gapId": "physics:ParticleEdit", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00046", + "gapId": "physics:ParticleHairKey", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00047", + "gapId": "physics:ParticleInstanceModifier", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00048", + "gapId": "physics:ParticleKey", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00049", + "gapId": "physics:ParticleSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00050", + "gapId": "physics:ParticleSettingsTextureSlot", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00051", + "gapId": "physics:ParticleSettingsTextureSlots", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00052", + "gapId": "physics:ParticleSystem", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00053", + "gapId": "physics:ParticleSystemModifier", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00054", + "gapId": "physics:ParticleSystems", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00055", + "gapId": "physics:ParticleTarget", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00056", + "gapId": "physics:PointCache", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00057", + "gapId": "physics:PointCacheItem", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00058", + "gapId": "physics:PointCaches", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00059", + "gapId": "physics:RigidBodyConstraint", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00060", + "gapId": "physics:RigidBodyObject", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00061", + "gapId": "physics:RigidBodyWorld", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00062", + "gapId": "physics:SPHFluidSettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00063", + "gapId": "physics:ShaderNodeParticleInfo", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00064", + "gapId": "physics:SoftBodyModifier", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00065", + "gapId": "physics:SoftBodySettings", + "ownerFamily": "PHYSICS", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00066", + "gapId": "strip:ADD", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00067", + "gapId": "strip:ADJUSTMENT", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00068", + "gapId": "strip:ALPHA_OVER", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00069", + "gapId": "strip:ALPHA_UNDER", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00070", + "gapId": "strip:COLOR", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00071", + "gapId": "strip:COLORMIX", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00072", + "gapId": "strip:COMPOSITOR", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00073", + "gapId": "strip:CROSS", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00074", + "gapId": "strip:GAMMA_CROSS", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00075", + "gapId": "strip:GAUSSIAN_BLUR", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00076", + "gapId": "strip:GLOW", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00077", + "gapId": "strip:IMAGE", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00078", + "gapId": "strip:MASK", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00079", + "gapId": "strip:META", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00080", + "gapId": "strip:MOVIE", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00081", + "gapId": "strip:MOVIECLIP", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00082", + "gapId": "strip:MULTICAM", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00083", + "gapId": "strip:MULTIPLY", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00084", + "gapId": "strip:SCENE", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00085", + "gapId": "strip:SOUND", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00086", + "gapId": "strip:SPEED", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00087", + "gapId": "strip:SUBTRACT", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00088", + "gapId": "strip:TEXT", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M20-GAP-00089", + "gapId": "strip:WIPE", + "ownerFamily": "SEQUENCER", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00001", + "gapId": "area:CLIP_EDITOR", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00002", + "gapId": "area:CONSOLE", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00003", + "gapId": "area:DOPESHEET_EDITOR", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00004", + "gapId": "area:EMPTY", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00005", + "gapId": "area:FILE_BROWSER", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00006", + "gapId": "area:GRAPH_EDITOR", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00007", + "gapId": "area:IMAGE_EDITOR", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00008", + "gapId": "area:INFO", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00009", + "gapId": "area:NLA_EDITOR", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00010", + "gapId": "area:NODE_EDITOR", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00011", + "gapId": "area:OUTLINER", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00012", + "gapId": "area:PREFERENCES", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00013", + "gapId": "area:PROPERTIES", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00014", + "gapId": "area:SEQUENCE_EDITOR", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00015", + "gapId": "area:SPREADSHEET", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00016", + "gapId": "area:STATUSBAR", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00017", + "gapId": "area:TEXT_EDITOR", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00018", + "gapId": "area:TOPBAR", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00019", + "gapId": "area:VIEW_3D", + "ownerFamily": "EDITOR", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00020", + "gapId": "io:anim.keying_set_export", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00021", + "gapId": "io:collection.export_all", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00022", + "gapId": "io:collection.exporter_add", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00023", + "gapId": "io:collection.exporter_export", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00024", + "gapId": "io:collection.exporter_move", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00025", + "gapId": "io:collection.exporter_remove", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00026", + "gapId": "io:collection.importer_add", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00027", + "gapId": "io:collection.importer_remove", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00028", + "gapId": "io:export_anim.bvh", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00029", + "gapId": "io:export_scene.fbx", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00030", + "gapId": "io:export_scene.gltf", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00031", + "gapId": "io:image.import_as_mesh_planes", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00032", + "gapId": "io:import_anim.bvh", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00033", + "gapId": "io:import_curve.svg", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00034", + "gapId": "io:import_scene.fbx", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00035", + "gapId": "io:import_scene.gltf", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00036", + "gapId": "io:node.add_import_node", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00037", + "gapId": "io:object.volume_import", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00038", + "gapId": "io:preferences.keyconfig_export", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00039", + "gapId": "io:preferences.keyconfig_import", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00040", + "gapId": "io:sequencer.export_subtitles", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00041", + "gapId": "io:uv.export_layout", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00042", + "gapId": "io:wm.collection_export_all", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00043", + "gapId": "io:wm.drop_import_file", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00044", + "gapId": "io:wm.fbx_import", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00045", + "gapId": "io:wm.grease_pencil_export_svg", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00046", + "gapId": "io:wm.grease_pencil_import_svg", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00047", + "gapId": "io:wm.obj_export", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00048", + "gapId": "io:wm.obj_import", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00049", + "gapId": "io:wm.ply_export", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00050", + "gapId": "io:wm.ply_import", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00051", + "gapId": "io:wm.stl_export", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00052", + "gapId": "io:wm.stl_import", + "ownerFamily": "IMPORT_EXPORT", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00053", + "gapId": "keymap-item:3D View Generic:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00054", + "gapId": "keymap-item:3D View Generic:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00055", + "gapId": "keymap-item:3D View Tool: Bend:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00056", + "gapId": "keymap-item:3D View Tool: Breakdowner:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00057", + "gapId": "keymap-item:3D View Tool: Cursor:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00058", + "gapId": "keymap-item:3D View Tool: Cursor:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00059", + "gapId": "keymap-item:3D View Tool: Edit Armature, B-Bone Size:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00060", + "gapId": "keymap-item:3D View Tool: Edit Armature, Bone Envelope:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00061", + "gapId": "keymap-item:3D View Tool: Edit Armature, Extrude to Cursor:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00062", + "gapId": "keymap-item:3D View Tool: Edit Armature, Extrude:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00063", + "gapId": "keymap-item:3D View Tool: Edit Armature, Roll:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00064", + "gapId": "keymap-item:3D View Tool: Edit Curve, Curve Pen:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00065", + "gapId": "keymap-item:3D View Tool: Edit Curve, Curve Pen:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00066", + "gapId": "keymap-item:3D View Tool: Edit Curve, Curve Pen:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00067", + "gapId": "keymap-item:3D View Tool: Edit Curve, Draw:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00068", + "gapId": "keymap-item:3D View Tool: Edit Curve, Extrude to Cursor:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00069", + "gapId": "keymap-item:3D View Tool: Edit Curve, Extrude:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00070", + "gapId": "keymap-item:3D View Tool: Edit Curve, Radius:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00071", + "gapId": "keymap-item:3D View Tool: Edit Curve, Randomize:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00072", + "gapId": "keymap-item:3D View Tool: Edit Curve, Tilt:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00073", + "gapId": "keymap-item:3D View Tool: Edit Curves, Draw:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00074", + "gapId": "keymap-item:3D View Tool: Edit Curves, Pen:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00075", + "gapId": "keymap-item:3D View Tool: Edit Curves, Pen:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00076", + "gapId": "keymap-item:3D View Tool: Edit Curves, Pen:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00077", + "gapId": "keymap-item:3D View Tool: Edit Curves, Pen:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00078", + "gapId": "keymap-item:3D View Tool: Edit Grease Pencil, Gradient:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00079", + "gapId": "keymap-item:3D View Tool: Edit Grease Pencil, Interpolate:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00080", + "gapId": "keymap-item:3D View Tool: Edit Grease Pencil, Pen:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00081", + "gapId": "keymap-item:3D View Tool: Edit Grease Pencil, Pen:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00082", + "gapId": "keymap-item:3D View Tool: Edit Grease Pencil, Pen:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00083", + "gapId": "keymap-item:3D View Tool: Edit Grease Pencil, Pen:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00084", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Bevel:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00085", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Bisect:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00086", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Edge Slide:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00087", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Extrude Along Normals:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00088", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Extrude Individual:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00089", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Extrude Manifold:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00090", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Extrude Region:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00091", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Extrude to Cursor:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00092", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Inset Faces:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00093", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Knife:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00094", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Loop Cut:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00095", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Offset Edge Loop Cut:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00096", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Poly Build:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00097", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Poly Build:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00098", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Poly Build:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00099", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Push/Pull:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00100", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Randomize:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00101", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Rip Edge:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00102", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Rip Region:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00103", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Shrink/Fatten:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00104", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Smooth:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00105", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Spin Duplicates:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00106", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Spin:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00107", + "gapId": "keymap-item:3D View Tool: Edit Mesh, To Sphere:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00108", + "gapId": "keymap-item:3D View Tool: Edit Mesh, Vertex Slide:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00109", + "gapId": "keymap-item:3D View Tool: Edit Text, Select Text:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00110", + "gapId": "keymap-item:3D View Tool: Edit Text, Select Text:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00111", + "gapId": "keymap-item:3D View Tool: Measure:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00112", + "gapId": "keymap-item:3D View Tool: Measure:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00113", + "gapId": "keymap-item:3D View Tool: Measure:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00114", + "gapId": "keymap-item:3D View Tool: Move:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00115", + "gapId": "keymap-item:3D View Tool: Object, Add Primitive:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00116", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Arc:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00117", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Arc:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00118", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Arc:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00119", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Box:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00120", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Box:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00121", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Box:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00122", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Circle:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00123", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Circle:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00124", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Circle:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00125", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Curve:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00126", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Eyedropper:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00127", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Eyedropper:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00128", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Eyedropper:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00129", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Eyedropper:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00130", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Interpolate:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00131", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Line:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00132", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Line:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00133", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Line:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00134", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Polyline:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00135", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Polyline:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00136", + "gapId": "keymap-item:3D View Tool: Paint Grease Pencil, Trim:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00137", + "gapId": "keymap-item:3D View Tool: Paint Weight, Gradient:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00138", + "gapId": "keymap-item:3D View Tool: Paint Weight, Sample Vertex Group:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00139", + "gapId": "keymap-item:3D View Tool: Paint Weight, Sample Weight:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00140", + "gapId": "keymap-item:3D View Tool: Paint Weight, Sample Weight:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00141", + "gapId": "keymap-item:3D View Tool: Push:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00142", + "gapId": "keymap-item:3D View Tool: Relax:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00143", + "gapId": "keymap-item:3D View Tool: Rotate:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00144", + "gapId": "keymap-item:3D View Tool: Scale:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00145", + "gapId": "keymap-item:3D View Tool: Sculpt, Box Face Set:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00146", + "gapId": "keymap-item:3D View Tool: Sculpt, Box Hide:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00147", + "gapId": "keymap-item:3D View Tool: Sculpt, Box Hide:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00148", + "gapId": "keymap-item:3D View Tool: Sculpt, Box Hide:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00149", + "gapId": "keymap-item:3D View Tool: Sculpt, Box Mask:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00150", + "gapId": "keymap-item:3D View Tool: Sculpt, Box Mask:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00151", + "gapId": "keymap-item:3D View Tool: Sculpt, Box Trim:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00152", + "gapId": "keymap-item:3D View Tool: Sculpt, Cloth Filter:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00153", + "gapId": "keymap-item:3D View Tool: Sculpt, Color Filter:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00154", + "gapId": "keymap-item:3D View Tool: Sculpt, Color Filter:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00155", + "gapId": "keymap-item:3D View Tool: Sculpt, Face Set Edit:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00156", + "gapId": "keymap-item:3D View Tool: Sculpt, Lasso Face Set:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00157", + "gapId": "keymap-item:3D View Tool: Sculpt, Lasso Hide:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00158", + "gapId": "keymap-item:3D View Tool: Sculpt, Lasso Hide:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00159", + "gapId": "keymap-item:3D View Tool: Sculpt, Lasso Hide:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00160", + "gapId": "keymap-item:3D View Tool: Sculpt, Lasso Mask:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00161", + "gapId": "keymap-item:3D View Tool: Sculpt, Lasso Mask:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00162", + "gapId": "keymap-item:3D View Tool: Sculpt, Lasso Trim:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00163", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Face Set:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00164", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Hide:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00165", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Hide:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00166", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Hide:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00167", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Mask:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00168", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Mask:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00169", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Project:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00170", + "gapId": "keymap-item:3D View Tool: Sculpt, Line Trim:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00171", + "gapId": "keymap-item:3D View Tool: Sculpt, Mask by Color:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00172", + "gapId": "keymap-item:3D View Tool: Sculpt, Mesh Filter:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00173", + "gapId": "keymap-item:3D View Tool: Sculpt, Polyline Face Set:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00174", + "gapId": "keymap-item:3D View Tool: Sculpt, Polyline Hide:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00175", + "gapId": "keymap-item:3D View Tool: Sculpt, Polyline Hide:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00176", + "gapId": "keymap-item:3D View Tool: Sculpt, Polyline Mask:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00177", + "gapId": "keymap-item:3D View Tool: Sculpt, Polyline Mask:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00178", + "gapId": "keymap-item:3D View Tool: Sculpt, Polyline Trim:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00179", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00180", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00181", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00182", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00183", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00184", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00185", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00186", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00187", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00188", + "gapId": "keymap-item:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00189", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00190", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00191", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00192", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00193", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00194", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00195", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00196", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00197", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00198", + "gapId": "keymap-item:3D View Tool: Select Box:VIEW_3D:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00199", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00200", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00201", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00202", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00203", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00204", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00205", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00206", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00207", + "gapId": "keymap-item:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00208", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00209", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00210", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00211", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00212", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00213", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00214", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00215", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00216", + "gapId": "keymap-item:3D View Tool: Select Circle:VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00217", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00218", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00219", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00220", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00221", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00222", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00223", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00224", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00225", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00226", + "gapId": "keymap-item:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00227", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00228", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00229", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00230", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00231", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00232", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00233", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00234", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00235", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00236", + "gapId": "keymap-item:3D View Tool: Select Lasso:VIEW_3D:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00237", + "gapId": "keymap-item:3D View Tool: Shear:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00238", + "gapId": "keymap-item:3D View Tool: Shear:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00239", + "gapId": "keymap-item:3D View Tool: Shear:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00240", + "gapId": "keymap-item:3D View Tool: Transform:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00241", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00242", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00243", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00244", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00245", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00246", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00247", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00248", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00249", + "gapId": "keymap-item:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00250", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00251", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00252", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00253", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00254", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00255", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00256", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00257", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00258", + "gapId": "keymap-item:3D View Tool: Tweak:VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00259", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00260", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00261", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00262", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:100", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00263", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:101", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00264", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:102", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00265", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:103", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00266", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:104", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00267", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:105", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00268", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:106", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00269", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:107", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00270", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:108", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00271", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:109", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00272", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00273", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:110", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00274", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:111", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00275", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:112", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00276", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:113", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00277", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:114", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00278", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:115", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00279", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00280", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00281", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00282", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00283", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00284", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00285", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00286", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00287", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00288", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00289", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00290", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00291", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00292", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00293", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00294", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00295", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00296", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00297", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00298", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00299", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00300", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00301", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00302", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00303", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00304", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00305", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00306", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00307", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00308", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00309", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00310", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00311", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00312", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00313", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00314", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00315", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00316", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00317", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00318", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00319", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00320", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00321", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00322", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00323", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00324", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00325", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00326", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00327", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00328", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00329", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00330", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:59", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00331", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00332", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:60", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00333", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:61", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00334", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:62", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00335", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:63", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00336", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:64", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00337", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:65", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00338", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:66", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00339", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:67", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00340", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:68", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00341", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:69", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00342", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00343", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:70", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00344", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:71", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00345", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:72", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00346", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:73", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00347", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:74", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00348", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:75", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00349", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:76", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00350", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:77", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00351", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:78", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00352", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:79", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00353", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00354", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:80", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00355", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:81", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00356", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:82", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00357", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:83", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00358", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:84", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00359", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:85", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00360", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:86", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00361", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:87", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00362", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:88", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00363", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:89", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00364", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00365", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:90", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00366", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:91", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00367", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:92", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00368", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:93", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00369", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:94", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00370", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:95", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00371", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:96", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00372", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:97", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00373", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:98", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00374", + "gapId": "keymap-item:3D View:VIEW_3D:WINDOW:99", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00375", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00376", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00377", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00378", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00379", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00380", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00381", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00382", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00383", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00384", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00385", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00386", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00387", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00388", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00389", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00390", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00391", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00392", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00393", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00394", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00395", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00396", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00397", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00398", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00399", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00400", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00401", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00402", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00403", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00404", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00405", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00406", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00407", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00408", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00409", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00410", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00411", + "gapId": "keymap-item:Animation Channels:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00412", + "gapId": "keymap-item:Animation:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00413", + "gapId": "keymap-item:Animation:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00414", + "gapId": "keymap-item:Animation:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00415", + "gapId": "keymap-item:Animation:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00416", + "gapId": "keymap-item:Animation:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00417", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00418", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00419", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00420", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00421", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00422", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00423", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00424", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00425", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00426", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00427", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00428", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00429", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00430", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00431", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00432", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00433", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00434", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00435", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00436", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00437", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00438", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00439", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00440", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00441", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00442", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00443", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00444", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00445", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00446", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00447", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00448", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00449", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00450", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00451", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00452", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00453", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00454", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00455", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00456", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00457", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00458", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00459", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00460", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00461", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00462", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00463", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00464", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00465", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00466", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00467", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00468", + "gapId": "keymap-item:Armature:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00469", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00470", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00471", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00472", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00473", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00474", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00475", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00476", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00477", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00478", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00479", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00480", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00481", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00482", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00483", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00484", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00485", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00486", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00487", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00488", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00489", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00490", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00491", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00492", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00493", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00494", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00495", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00496", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00497", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00498", + "gapId": "keymap-item:Bevel Modal Map:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00499", + "gapId": "keymap-item:Clip Dopesheet Editor:CLIP_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00500", + "gapId": "keymap-item:Clip Dopesheet Editor:CLIP_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00501", + "gapId": "keymap-item:Clip Dopesheet Editor:CLIP_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00502", + "gapId": "keymap-item:Clip Dopesheet Editor:CLIP_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00503", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00504", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00505", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00506", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00507", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00508", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00509", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00510", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00511", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00512", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00513", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00514", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00515", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00516", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00517", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00518", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00519", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00520", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00521", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00522", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00523", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00524", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00525", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00526", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00527", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00528", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00529", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00530", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00531", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00532", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00533", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00534", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00535", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00536", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00537", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00538", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00539", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00540", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00541", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00542", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00543", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00544", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00545", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00546", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00547", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00548", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00549", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00550", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00551", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00552", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00553", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00554", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00555", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00556", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00557", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00558", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:59", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00559", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00560", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:60", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00561", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:61", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00562", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:62", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00563", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:63", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00564", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:64", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00565", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:65", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00566", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:66", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00567", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:67", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00568", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:68", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00569", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:69", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00570", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00571", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:70", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00572", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:71", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00573", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:72", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00574", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:73", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00575", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:74", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00576", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:75", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00577", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00578", + "gapId": "keymap-item:Clip Editor:CLIP_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00579", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00580", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00581", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00582", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00583", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00584", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00585", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00586", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00587", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00588", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00589", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00590", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00591", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00592", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00593", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00594", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00595", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00596", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00597", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00598", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00599", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00600", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00601", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00602", + "gapId": "keymap-item:Clip Graph Editor:CLIP_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00603", + "gapId": "keymap-item:Clip Time Scrub:CLIP_EDITOR:PREVIEW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00604", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00605", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00606", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00607", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00608", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00609", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00610", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00611", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00612", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00613", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00614", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00615", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00616", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00617", + "gapId": "keymap-item:Clip:CLIP_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00618", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00619", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00620", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00621", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00622", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00623", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00624", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00625", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00626", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00627", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00628", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00629", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00630", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00631", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00632", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00633", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00634", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00635", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00636", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00637", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00638", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00639", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00640", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00641", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00642", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00643", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00644", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00645", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00646", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00647", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00648", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00649", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00650", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00651", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00652", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00653", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00654", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00655", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00656", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00657", + "gapId": "keymap-item:Console:CONSOLE:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00658", + "gapId": "keymap-item:Curve Pen Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00659", + "gapId": "keymap-item:Curve Pen Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00660", + "gapId": "keymap-item:Curve Pen Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00661", + "gapId": "keymap-item:Curve Pen Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00662", + "gapId": "keymap-item:Curve Pen Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00663", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00664", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00665", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00666", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00667", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00668", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00669", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00670", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00671", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00672", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00673", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00674", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00675", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00676", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00677", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00678", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00679", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00680", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00681", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00682", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00683", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00684", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00685", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00686", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00687", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00688", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00689", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00690", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00691", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00692", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00693", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00694", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00695", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00696", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00697", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00698", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00699", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00700", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00701", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00702", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00703", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00704", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00705", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00706", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00707", + "gapId": "keymap-item:Curve:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00708", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00709", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00710", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00711", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00712", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00713", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00714", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00715", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00716", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00717", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00718", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00719", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00720", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00721", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00722", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00723", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00724", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00725", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00726", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00727", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00728", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00729", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00730", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00731", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00732", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00733", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00734", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00735", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00736", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00737", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00738", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00739", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00740", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00741", + "gapId": "keymap-item:Curves:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00742", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00743", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00744", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00745", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00746", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00747", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00748", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00749", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00750", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00751", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00752", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00753", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00754", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00755", + "gapId": "keymap-item:Custom Normals Modal Map:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00756", + "gapId": "keymap-item:Dopesheet Generic:DOPESHEET_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00757", + "gapId": "keymap-item:Dopesheet Generic:DOPESHEET_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00758", + "gapId": "keymap-item:Dopesheet Generic:DOPESHEET_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00759", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00760", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00761", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00762", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00763", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00764", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00765", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00766", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00767", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00768", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00769", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00770", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00771", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00772", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00773", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00774", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00775", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00776", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00777", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00778", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00779", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00780", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00781", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00782", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00783", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00784", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00785", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00786", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00787", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00788", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00789", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00790", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00791", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00792", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00793", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00794", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00795", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00796", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00797", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00798", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00799", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00800", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00801", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00802", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00803", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00804", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00805", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00806", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00807", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00808", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00809", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00810", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00811", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00812", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00813", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00814", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:59", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00815", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00816", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:60", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00817", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:61", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00818", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:62", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00819", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:63", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00820", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:64", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00821", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:65", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00822", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:66", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00823", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:67", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00824", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00825", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00826", + "gapId": "keymap-item:Dopesheet:DOPESHEET_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00827", + "gapId": "keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00828", + "gapId": "keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00829", + "gapId": "keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00830", + "gapId": "keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00831", + "gapId": "keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00832", + "gapId": "keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00833", + "gapId": "keymap-item:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00834", + "gapId": "keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00835", + "gapId": "keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00836", + "gapId": "keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00837", + "gapId": "keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00838", + "gapId": "keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00839", + "gapId": "keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00840", + "gapId": "keymap-item:Eyedropper Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00841", + "gapId": "keymap-item:File Browser Buttons:FILE_BROWSER:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00842", + "gapId": "keymap-item:File Browser Buttons:FILE_BROWSER:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00843", + "gapId": "keymap-item:File Browser Buttons:FILE_BROWSER:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00844", + "gapId": "keymap-item:File Browser Buttons:FILE_BROWSER:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00845", + "gapId": "keymap-item:File Browser Buttons:FILE_BROWSER:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00846", + "gapId": "keymap-item:File Browser Buttons:FILE_BROWSER:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00847", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00848", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00849", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00850", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00851", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00852", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00853", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00854", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00855", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00856", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00857", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00858", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00859", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00860", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00861", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00862", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00863", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00864", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00865", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00866", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00867", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00868", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00869", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00870", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00871", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00872", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00873", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00874", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00875", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00876", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00877", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00878", + "gapId": "keymap-item:File Browser Main:FILE_BROWSER:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00879", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00880", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00881", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00882", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00883", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00884", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00885", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00886", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00887", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00888", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00889", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00890", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00891", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00892", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00893", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00894", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00895", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00896", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00897", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00898", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00899", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00900", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00901", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00902", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00903", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00904", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00905", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00906", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00907", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00908", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00909", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00910", + "gapId": "keymap-item:File Browser:FILE_BROWSER:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00911", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00912", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00913", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00914", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00915", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00916", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00917", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00918", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00919", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00920", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00921", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00922", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00923", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00924", + "gapId": "keymap-item:Fill Tool Modal Map:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00925", + "gapId": "keymap-item:Font:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00926", + "gapId": "keymap-item:Font:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00927", + "gapId": "keymap-item:Font:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00928", + "gapId": "keymap-item:Font:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00929", + "gapId": "keymap-item:Font:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00930", + "gapId": "keymap-item:Font:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00931", + "gapId": "keymap-item:Font:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00932", + "gapId": "keymap-item:Font:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00933", + "gapId": "keymap-item:Font:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00934", + "gapId": "keymap-item:Font:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00935", + "gapId": "keymap-item:Font:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00936", + "gapId": "keymap-item:Font:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00937", + "gapId": "keymap-item:Font:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00938", + "gapId": "keymap-item:Font:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00939", + "gapId": "keymap-item:Font:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00940", + "gapId": "keymap-item:Font:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00941", + "gapId": "keymap-item:Font:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00942", + "gapId": "keymap-item:Font:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00943", + "gapId": "keymap-item:Font:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00944", + "gapId": "keymap-item:Font:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00945", + "gapId": "keymap-item:Font:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00946", + "gapId": "keymap-item:Font:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00947", + "gapId": "keymap-item:Font:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00948", + "gapId": "keymap-item:Font:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00949", + "gapId": "keymap-item:Font:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00950", + "gapId": "keymap-item:Font:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00951", + "gapId": "keymap-item:Font:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00952", + "gapId": "keymap-item:Font:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00953", + "gapId": "keymap-item:Font:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00954", + "gapId": "keymap-item:Font:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00955", + "gapId": "keymap-item:Font:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00956", + "gapId": "keymap-item:Font:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00957", + "gapId": "keymap-item:Font:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00958", + "gapId": "keymap-item:Font:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00959", + "gapId": "keymap-item:Font:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00960", + "gapId": "keymap-item:Font:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00961", + "gapId": "keymap-item:Font:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00962", + "gapId": "keymap-item:Font:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00963", + "gapId": "keymap-item:Font:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00964", + "gapId": "keymap-item:Font:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00965", + "gapId": "keymap-item:Font:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00966", + "gapId": "keymap-item:Font:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00967", + "gapId": "keymap-item:Font:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00968", + "gapId": "keymap-item:Font:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00969", + "gapId": "keymap-item:Font:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00970", + "gapId": "keymap-item:Font:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00971", + "gapId": "keymap-item:Font:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00972", + "gapId": "keymap-item:Font:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00973", + "gapId": "keymap-item:Font:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00974", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00975", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00976", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00977", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00978", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00979", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00980", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00981", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00982", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00983", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00984", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00985", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00986", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00987", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00988", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00989", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00990", + "gapId": "keymap-item:Frames:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00991", + "gapId": "keymap-item:Generic Gizmo Click Drag:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00992", + "gapId": "keymap-item:Generic Gizmo Click Drag:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00993", + "gapId": "keymap-item:Generic Gizmo Drag:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00994", + "gapId": "keymap-item:Generic Gizmo Maybe Drag:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00995", + "gapId": "keymap-item:Generic Gizmo Select:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00996", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00997", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00998", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-00999", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01000", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01001", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01002", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01003", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01004", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01005", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01006", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01007", + "gapId": "keymap-item:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01008", + "gapId": "keymap-item:Generic Gizmo:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01009", + "gapId": "keymap-item:Generic Tool: Annotate Eraser:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01010", + "gapId": "keymap-item:Generic Tool: Annotate Eraser:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01011", + "gapId": "keymap-item:Generic Tool: Annotate Line:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01012", + "gapId": "keymap-item:Generic Tool: Annotate Line:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01013", + "gapId": "keymap-item:Generic Tool: Annotate Polygon:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01014", + "gapId": "keymap-item:Generic Tool: Annotate Polygon:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01015", + "gapId": "keymap-item:Generic Tool: Annotate:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01016", + "gapId": "keymap-item:Generic Tool: Annotate:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01017", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01018", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01019", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01020", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01021", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01022", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01023", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01024", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01025", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01026", + "gapId": "keymap-item:Gesture Box:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01027", + "gapId": "keymap-item:Gesture Lasso:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01028", + "gapId": "keymap-item:Gesture Polyline:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01029", + "gapId": "keymap-item:Gesture Polyline:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01030", + "gapId": "keymap-item:Gesture Polyline:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01031", + "gapId": "keymap-item:Gesture Polyline:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01032", + "gapId": "keymap-item:Gesture Polyline:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01033", + "gapId": "keymap-item:Gesture Polyline:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01034", + "gapId": "keymap-item:Gesture Straight Line:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01035", + "gapId": "keymap-item:Gesture Straight Line:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01036", + "gapId": "keymap-item:Gesture Straight Line:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01037", + "gapId": "keymap-item:Gesture Straight Line:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01038", + "gapId": "keymap-item:Gesture Straight Line:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01039", + "gapId": "keymap-item:Gesture Straight Line:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01040", + "gapId": "keymap-item:Gesture Straight Line:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01041", + "gapId": "keymap-item:Gesture Zoom Border:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01042", + "gapId": "keymap-item:Gesture Zoom Border:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01043", + "gapId": "keymap-item:Gesture Zoom Border:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01044", + "gapId": "keymap-item:Gesture Zoom Border:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01045", + "gapId": "keymap-item:Gesture Zoom Border:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01046", + "gapId": "keymap-item:Gesture Zoom Border:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01047", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01048", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01049", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01050", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01051", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01052", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01053", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01054", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01055", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01056", + "gapId": "keymap-item:Graph Editor Generic:GRAPH_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01057", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01058", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01059", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01060", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01061", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01062", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01063", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01064", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01065", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01066", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01067", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01068", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01069", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01070", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01071", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01072", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01073", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01074", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01075", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01076", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01077", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01078", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01079", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01080", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01081", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01082", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01083", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01084", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01085", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01086", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01087", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01088", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01089", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01090", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01091", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01092", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01093", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01094", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01095", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01096", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01097", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01098", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01099", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01100", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01101", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01102", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01103", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01104", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01105", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01106", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01107", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01108", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01109", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01110", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01111", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01112", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:59", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01113", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01114", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:60", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01115", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:61", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01116", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:62", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01117", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:63", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01118", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:64", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01119", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:65", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01120", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:66", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01121", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:67", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01122", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:68", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01123", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:69", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01124", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01125", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:70", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01126", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01127", + "gapId": "keymap-item:Graph Editor:GRAPH_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01128", + "gapId": "keymap-item:Grease Pencil Brush Stroke:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01129", + "gapId": "keymap-item:Grease Pencil Brush Stroke:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01130", + "gapId": "keymap-item:Grease Pencil Brush Stroke:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01131", + "gapId": "keymap-item:Grease Pencil Brush Stroke:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01132", + "gapId": "keymap-item:Grease Pencil Brush Stroke:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01133", + "gapId": "keymap-item:Grease Pencil Brush Stroke:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01134", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01135", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01136", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01137", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01138", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01139", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01140", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01141", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01142", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01143", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01144", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01145", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01146", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01147", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01148", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01149", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01150", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01151", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01152", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01153", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01154", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01155", + "gapId": "keymap-item:Grease Pencil Draw Mode:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01156", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01157", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01158", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01159", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01160", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01161", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01162", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01163", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01164", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01165", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01166", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01167", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01168", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01169", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01170", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01171", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01172", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01173", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01174", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01175", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01176", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01177", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01178", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01179", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01180", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01181", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01182", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01183", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01184", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01185", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01186", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01187", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01188", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01189", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01190", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01191", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01192", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01193", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01194", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01195", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01196", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01197", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01198", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01199", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01200", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01201", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01202", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01203", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01204", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01205", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01206", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01207", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01208", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01209", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01210", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01211", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01212", + "gapId": "keymap-item:Grease Pencil Edit Mode:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01213", + "gapId": "keymap-item:Grease Pencil Fill Tool:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01214", + "gapId": "keymap-item:Grease Pencil Fill Tool:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01215", + "gapId": "keymap-item:Grease Pencil Fill Tool:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01216", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01217", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01218", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01219", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01220", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01221", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01222", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01223", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01224", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01225", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01226", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01227", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01228", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01229", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01230", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01231", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01232", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01233", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01234", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01235", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01236", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01237", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01238", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01239", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01240", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01241", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01242", + "gapId": "keymap-item:Grease Pencil Sculpt Mode:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01243", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01244", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01245", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01246", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01247", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01248", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01249", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01250", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01251", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01252", + "gapId": "keymap-item:Grease Pencil Selection:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01253", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01254", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01255", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01256", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01257", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01258", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01259", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01260", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01261", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01262", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01263", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01264", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01265", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01266", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01267", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01268", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01269", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01270", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01271", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01272", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01273", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01274", + "gapId": "keymap-item:Grease Pencil Vertex Paint:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01275", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01276", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01277", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01278", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01279", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01280", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01281", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01282", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01283", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01284", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01285", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01286", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01287", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01288", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01289", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01290", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01291", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01292", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01293", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01294", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01295", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01296", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01297", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01298", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01299", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01300", + "gapId": "keymap-item:Grease Pencil Weight Paint:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01301", + "gapId": "keymap-item:Grease Pencil:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01302", + "gapId": "keymap-item:Grease Pencil:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01303", + "gapId": "keymap-item:Grease Pencil:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01304", + "gapId": "keymap-item:Grease Pencil:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01305", + "gapId": "keymap-item:Grease Pencil:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01306", + "gapId": "keymap-item:Image Editor Tool: Mask, Box:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01307", + "gapId": "keymap-item:Image Editor Tool: Mask, Circle:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01308", + "gapId": "keymap-item:Image Editor Tool: Mask, Cursor:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01309", + "gapId": "keymap-item:Image Editor Tool: Mask, Cursor:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01310", + "gapId": "keymap-item:Image Editor Tool: Mask, Move:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01311", + "gapId": "keymap-item:Image Editor Tool: Mask, Rotate:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01312", + "gapId": "keymap-item:Image Editor Tool: Mask, Scale:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01313", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Box (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01314", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Box (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01315", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Box (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01316", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Box:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01317", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Box:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01318", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Box:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01319", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Circle (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01320", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Circle (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01321", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Circle (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01322", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Circle:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01323", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Circle:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01324", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Circle:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01325", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Lasso (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01326", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Lasso (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01327", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Lasso (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01328", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Lasso:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01329", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Lasso:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01330", + "gapId": "keymap-item:Image Editor Tool: Mask, Select Lasso:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01331", + "gapId": "keymap-item:Image Editor Tool: Mask, Transform:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01332", + "gapId": "keymap-item:Image Editor Tool: Mask, Tweak (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01333", + "gapId": "keymap-item:Image Editor Tool: Mask, Tweak (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01334", + "gapId": "keymap-item:Image Editor Tool: Mask, Tweak (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01335", + "gapId": "keymap-item:Image Editor Tool: Mask, Tweak:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01336", + "gapId": "keymap-item:Image Editor Tool: Mask, Tweak:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01337", + "gapId": "keymap-item:Image Editor Tool: Mask, Tweak:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01338", + "gapId": "keymap-item:Image Editor Tool: Sample:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01339", + "gapId": "keymap-item:Image Editor Tool: Uv, Cursor:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01340", + "gapId": "keymap-item:Image Editor Tool: Uv, Cursor:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01341", + "gapId": "keymap-item:Image Editor Tool: Uv, Grab:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01342", + "gapId": "keymap-item:Image Editor Tool: Uv, Grab:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01343", + "gapId": "keymap-item:Image Editor Tool: Uv, Grab:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01344", + "gapId": "keymap-item:Image Editor Tool: Uv, Grab:IMAGE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01345", + "gapId": "keymap-item:Image Editor Tool: Uv, Grab:IMAGE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01346", + "gapId": "keymap-item:Image Editor Tool: Uv, Move:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01347", + "gapId": "keymap-item:Image Editor Tool: Uv, Pinch:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01348", + "gapId": "keymap-item:Image Editor Tool: Uv, Pinch:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01349", + "gapId": "keymap-item:Image Editor Tool: Uv, Pinch:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01350", + "gapId": "keymap-item:Image Editor Tool: Uv, Pinch:IMAGE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01351", + "gapId": "keymap-item:Image Editor Tool: Uv, Pinch:IMAGE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01352", + "gapId": "keymap-item:Image Editor Tool: Uv, Relax:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01353", + "gapId": "keymap-item:Image Editor Tool: Uv, Relax:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01354", + "gapId": "keymap-item:Image Editor Tool: Uv, Relax:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01355", + "gapId": "keymap-item:Image Editor Tool: Uv, Relax:IMAGE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01356", + "gapId": "keymap-item:Image Editor Tool: Uv, Relax:IMAGE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01357", + "gapId": "keymap-item:Image Editor Tool: Uv, Rip Region:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01358", + "gapId": "keymap-item:Image Editor Tool: Uv, Rotate:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01359", + "gapId": "keymap-item:Image Editor Tool: Uv, Scale:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01360", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Box (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01361", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Box (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01362", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Box (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01363", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Box:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01364", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Box:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01365", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Box:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01366", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Circle (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01367", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Circle (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01368", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Circle (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01369", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Circle:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01370", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Circle:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01371", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Circle:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01372", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Lasso (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01373", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Lasso (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01374", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Lasso (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01375", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Lasso:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01376", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Lasso:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01377", + "gapId": "keymap-item:Image Editor Tool: Uv, Select Lasso:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01378", + "gapId": "keymap-item:Image Editor Tool: Uv, Tweak (fallback):IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01379", + "gapId": "keymap-item:Image Editor Tool: Uv, Tweak (fallback):IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01380", + "gapId": "keymap-item:Image Editor Tool: Uv, Tweak (fallback):IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01381", + "gapId": "keymap-item:Image Editor Tool: Uv, Tweak:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01382", + "gapId": "keymap-item:Image Editor Tool: Uv, Tweak:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01383", + "gapId": "keymap-item:Image Editor Tool: Uv, Tweak:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01384", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01385", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01386", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01387", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01388", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01389", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01390", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01391", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01392", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01393", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01394", + "gapId": "keymap-item:Image Generic:IMAGE_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01395", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01396", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01397", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01398", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01399", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01400", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01401", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01402", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01403", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01404", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01405", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01406", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01407", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01408", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01409", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01410", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01411", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01412", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01413", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01414", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01415", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01416", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01417", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01418", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01419", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01420", + "gapId": "keymap-item:Image Paint:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01421", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01422", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01423", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01424", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01425", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01426", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01427", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01428", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01429", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01430", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01431", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01432", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01433", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01434", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01435", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01436", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01437", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01438", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01439", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01440", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01441", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01442", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01443", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01444", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01445", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01446", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01447", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01448", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01449", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01450", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01451", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01452", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01453", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01454", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01455", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01456", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01457", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01458", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01459", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01460", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01461", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01462", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01463", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01464", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01465", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01466", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01467", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01468", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01469", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01470", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01471", + "gapId": "keymap-item:Image:IMAGE_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01472", + "gapId": "keymap-item:Info:INFO:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01473", + "gapId": "keymap-item:Info:INFO:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01474", + "gapId": "keymap-item:Info:INFO:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01475", + "gapId": "keymap-item:Info:INFO:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01476", + "gapId": "keymap-item:Info:INFO:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01477", + "gapId": "keymap-item:Info:INFO:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01478", + "gapId": "keymap-item:Info:INFO:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01479", + "gapId": "keymap-item:Info:INFO:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01480", + "gapId": "keymap-item:Info:INFO:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01481", + "gapId": "keymap-item:Info:INFO:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01482", + "gapId": "keymap-item:Info:INFO:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01483", + "gapId": "keymap-item:Info:INFO:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01484", + "gapId": "keymap-item:Info:INFO:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01485", + "gapId": "keymap-item:Info:INFO:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01486", + "gapId": "keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01487", + "gapId": "keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01488", + "gapId": "keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01489", + "gapId": "keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01490", + "gapId": "keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01491", + "gapId": "keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01492", + "gapId": "keymap-item:Interpolate Tool Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01493", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01494", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01495", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01496", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01497", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01498", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01499", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01500", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01501", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01502", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01503", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01504", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01505", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01506", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01507", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01508", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01509", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01510", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01511", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01512", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01513", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01514", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01515", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01516", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01517", + "gapId": "keymap-item:Knife Tool Modal Map:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01518", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01519", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01520", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01521", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01522", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01523", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01524", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01525", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01526", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01527", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01528", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01529", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01530", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01531", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01532", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01533", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01534", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01535", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01536", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01537", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01538", + "gapId": "keymap-item:Lattice:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01539", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01540", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01541", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01542", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01543", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01544", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01545", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01546", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01547", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01548", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01549", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01550", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01551", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01552", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01553", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01554", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01555", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01556", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01557", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01558", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01559", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01560", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01561", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01562", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01563", + "gapId": "keymap-item:Markers:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01564", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01565", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01566", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01567", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01568", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01569", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01570", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01571", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01572", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01573", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01574", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01575", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01576", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01577", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01578", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01579", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01580", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01581", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01582", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01583", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01584", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01585", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01586", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01587", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01588", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01589", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01590", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01591", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01592", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01593", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01594", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01595", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01596", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01597", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01598", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01599", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01600", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01601", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01602", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01603", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01604", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01605", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01606", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01607", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01608", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01609", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01610", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01611", + "gapId": "keymap-item:Mask Editing:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01612", + "gapId": "keymap-item:Mesh Filter Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01613", + "gapId": "keymap-item:Mesh Filter Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01614", + "gapId": "keymap-item:Mesh Filter Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01615", + "gapId": "keymap-item:Mesh Filter Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01616", + "gapId": "keymap-item:Mesh Filter Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01617", + "gapId": "keymap-item:Mesh Filter Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01618", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01619", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01620", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01621", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01622", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01623", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01624", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01625", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01626", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01627", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01628", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01629", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01630", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01631", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01632", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01633", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01634", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01635", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01636", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01637", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01638", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01639", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01640", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01641", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01642", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01643", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01644", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01645", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01646", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01647", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01648", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01649", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01650", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01651", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01652", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01653", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01654", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01655", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01656", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01657", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01658", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01659", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01660", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01661", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01662", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01663", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01664", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01665", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01666", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01667", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01668", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01669", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01670", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01671", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01672", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01673", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:59", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01674", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01675", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:60", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01676", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:61", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01677", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:62", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01678", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:63", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01679", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:64", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01680", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:65", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01681", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:66", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01682", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:67", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01683", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:68", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01684", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:69", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01685", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01686", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:70", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01687", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:71", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01688", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:72", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01689", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:73", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01690", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:74", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01691", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:75", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01692", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:76", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01693", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:77", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01694", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:78", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01695", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:79", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01696", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01697", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:80", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01698", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:81", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01699", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:82", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01700", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:83", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01701", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:84", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01702", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:85", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01703", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:86", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01704", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:87", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01705", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:88", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01706", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:89", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01707", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01708", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:90", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01709", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:91", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01710", + "gapId": "keymap-item:Mesh:EMPTY:WINDOW:92", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01711", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01712", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01713", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01714", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01715", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01716", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01717", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01718", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01719", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01720", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01721", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01722", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01723", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01724", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01725", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01726", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01727", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01728", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01729", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01730", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01731", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01732", + "gapId": "keymap-item:Metaball:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01733", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01734", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01735", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01736", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01737", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01738", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01739", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01740", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01741", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01742", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01743", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01744", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01745", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01746", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01747", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01748", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01749", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01750", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01751", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01752", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01753", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01754", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01755", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01756", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01757", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01758", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01759", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01760", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01761", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01762", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01763", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01764", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01765", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01766", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01767", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01768", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01769", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01770", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01771", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01772", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01773", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01774", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01775", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01776", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01777", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01778", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01779", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01780", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01781", + "gapId": "keymap-item:NLA Editor:NLA_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01782", + "gapId": "keymap-item:NLA Generic:NLA_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01783", + "gapId": "keymap-item:NLA Generic:NLA_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01784", + "gapId": "keymap-item:NLA Generic:NLA_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01785", + "gapId": "keymap-item:NLA Generic:NLA_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01786", + "gapId": "keymap-item:NLA Generic:NLA_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01787", + "gapId": "keymap-item:NLA Generic:NLA_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01788", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01789", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01790", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01791", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01792", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01793", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01794", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01795", + "gapId": "keymap-item:NLA Tracks:NLA_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01796", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01797", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01798", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01799", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:100", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01800", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:101", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01801", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:102", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01802", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:103", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01803", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01804", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01805", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01806", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01807", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01808", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01809", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01810", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01811", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01812", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01813", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01814", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01815", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01816", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01817", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01818", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01819", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01820", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01821", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01822", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01823", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01824", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01825", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01826", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01827", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01828", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01829", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01830", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01831", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01832", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01833", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01834", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01835", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01836", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01837", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01838", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01839", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01840", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01841", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01842", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01843", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01844", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01845", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01846", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01847", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01848", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01849", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01850", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01851", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01852", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01853", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01854", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01855", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:59", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01856", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01857", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:60", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01858", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:61", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01859", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:62", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01860", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:63", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01861", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:64", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01862", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:65", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01863", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:66", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01864", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:67", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01865", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:68", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01866", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:69", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01867", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01868", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:70", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01869", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:71", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01870", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:72", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01871", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:73", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01872", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:74", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01873", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:75", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01874", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:76", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01875", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:77", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01876", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:78", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01877", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:79", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01878", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01879", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:80", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01880", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:81", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01881", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:82", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01882", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:83", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01883", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:84", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01884", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:85", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01885", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:86", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01886", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:87", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01887", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:88", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01888", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:89", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01889", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01890", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:90", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01891", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:91", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01892", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:92", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01893", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:93", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01894", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:94", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01895", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:95", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01896", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:96", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01897", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:97", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01898", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:98", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01899", + "gapId": "keymap-item:Node Editor:NODE_EDITOR:WINDOW:99", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01900", + "gapId": "keymap-item:Node Generic:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01901", + "gapId": "keymap-item:Node Generic:NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01902", + "gapId": "keymap-item:Node Link Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01903", + "gapId": "keymap-item:Node Link Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01904", + "gapId": "keymap-item:Node Link Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01905", + "gapId": "keymap-item:Node Link Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01906", + "gapId": "keymap-item:Node Link Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01907", + "gapId": "keymap-item:Node Link Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01908", + "gapId": "keymap-item:Node Resize Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01909", + "gapId": "keymap-item:Node Resize Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01910", + "gapId": "keymap-item:Node Resize Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01911", + "gapId": "keymap-item:Node Resize Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01912", + "gapId": "keymap-item:Node Resize Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01913", + "gapId": "keymap-item:Node Resize Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01914", + "gapId": "keymap-item:Node Resize Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01915", + "gapId": "keymap-item:Node Tool: Add Reroute:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01916", + "gapId": "keymap-item:Node Tool: Links Cut:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01917", + "gapId": "keymap-item:Node Tool: Mute Links:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01918", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01919", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01920", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01921", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01922", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01923", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01924", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01925", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01926", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01927", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01928", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01929", + "gapId": "keymap-item:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01930", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01931", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01932", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01933", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01934", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01935", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01936", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01937", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01938", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01939", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01940", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01941", + "gapId": "keymap-item:Node Tool: Select Box:NODE_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01942", + "gapId": "keymap-item:Node Tool: Select Circle (fallback):NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01943", + "gapId": "keymap-item:Node Tool: Select Circle (fallback):NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01944", + "gapId": "keymap-item:Node Tool: Select Circle (fallback):NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01945", + "gapId": "keymap-item:Node Tool: Select Circle:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01946", + "gapId": "keymap-item:Node Tool: Select Circle:NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01947", + "gapId": "keymap-item:Node Tool: Select Circle:NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01948", + "gapId": "keymap-item:Node Tool: Select Lasso (fallback):NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01949", + "gapId": "keymap-item:Node Tool: Select Lasso (fallback):NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01950", + "gapId": "keymap-item:Node Tool: Select Lasso (fallback):NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01951", + "gapId": "keymap-item:Node Tool: Select Lasso:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01952", + "gapId": "keymap-item:Node Tool: Select Lasso:NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01953", + "gapId": "keymap-item:Node Tool: Select Lasso:NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01954", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01955", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01956", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01957", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01958", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01959", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01960", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01961", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01962", + "gapId": "keymap-item:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01963", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01964", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01965", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01966", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01967", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01968", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01969", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01970", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01971", + "gapId": "keymap-item:Node Tool: Tweak:NODE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01972", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01973", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01974", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01975", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01976", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01977", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01978", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01979", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01980", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01981", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01982", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01983", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01984", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01985", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01986", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01987", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01988", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01989", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01990", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01991", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01992", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01993", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01994", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01995", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01996", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01997", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01998", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-01999", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02000", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02001", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02002", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02003", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02004", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02005", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02006", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02007", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02008", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02009", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02010", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02011", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02012", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02013", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02014", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02015", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02016", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02017", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02018", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02019", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02020", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02021", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02022", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02023", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02024", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02025", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02026", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02027", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02028", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02029", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02030", + "gapId": "keymap-item:Object Mode:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02031", + "gapId": "keymap-item:Object Non-modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02032", + "gapId": "keymap-item:Object Non-modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02033", + "gapId": "keymap-item:Object Non-modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02034", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02035", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02036", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02037", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:100", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02038", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:101", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02039", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:102", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02040", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02041", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02042", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02043", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02044", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02045", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02046", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02047", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02048", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02049", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02050", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02051", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02052", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02053", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02054", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02055", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02056", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02057", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02058", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02059", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02060", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02061", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02062", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02063", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02064", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02065", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02066", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02067", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02068", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02069", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02070", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02071", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02072", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02073", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02074", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02075", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02076", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02077", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02078", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02079", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02080", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02081", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02082", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02083", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02084", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02085", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02086", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02087", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02088", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02089", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02090", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02091", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02092", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:59", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02093", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02094", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:60", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02095", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:61", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02096", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:62", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02097", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:63", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02098", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:64", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02099", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:65", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02100", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:66", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02101", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:67", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02102", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:68", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02103", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:69", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02104", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02105", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:70", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02106", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:71", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02107", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:72", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02108", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:73", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02109", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:74", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02110", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:75", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02111", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:76", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02112", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:77", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02113", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:78", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02114", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:79", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02115", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02116", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:80", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02117", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:81", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02118", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:82", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02119", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:83", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02120", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:84", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02121", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:85", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02122", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:86", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02123", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:87", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02124", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:88", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02125", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:89", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02126", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02127", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:90", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02128", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:91", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02129", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:92", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02130", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:93", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02131", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:94", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02132", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:95", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02133", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:96", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02134", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:97", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02135", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:98", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02136", + "gapId": "keymap-item:Outliner:OUTLINER:WINDOW:99", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02137", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02138", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02139", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02140", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02141", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02142", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02143", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02144", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02145", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02146", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02147", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02148", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02149", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02150", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02151", + "gapId": "keymap-item:Paint Curve:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02152", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02153", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02154", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02155", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02156", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02157", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02158", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02159", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02160", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02161", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02162", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02163", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02164", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02165", + "gapId": "keymap-item:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02166", + "gapId": "keymap-item:Paint Stroke Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02167", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02168", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02169", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02170", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02171", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02172", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02173", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02174", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02175", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02176", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02177", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02178", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02179", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02180", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02181", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02182", + "gapId": "keymap-item:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02183", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02184", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02185", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02186", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02187", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02188", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02189", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02190", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02191", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02192", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02193", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02194", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02195", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02196", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02197", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02198", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02199", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02200", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02201", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02202", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02203", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02204", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02205", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02206", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02207", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02208", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02209", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02210", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02211", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02212", + "gapId": "keymap-item:Particle:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02213", + "gapId": "keymap-item:Pen Tool Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02214", + "gapId": "keymap-item:Pen Tool Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02215", + "gapId": "keymap-item:Pen Tool Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02216", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02217", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02218", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02219", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02220", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02221", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02222", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02223", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02224", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02225", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02226", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02227", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02228", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02229", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02230", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02231", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02232", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02233", + "gapId": "keymap-item:Point Cloud:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02234", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02235", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02236", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02237", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02238", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02239", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02240", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02241", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02242", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02243", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02244", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02245", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02246", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02247", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02248", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02249", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02250", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02251", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02252", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02253", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02254", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02255", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02256", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02257", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02258", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02259", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02260", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02261", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02262", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02263", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02264", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02265", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02266", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02267", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02268", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02269", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02270", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02271", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02272", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02273", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02274", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02275", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02276", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02277", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02278", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02279", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02280", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02281", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02282", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02283", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02284", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02285", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02286", + "gapId": "keymap-item:Pose:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02287", + "gapId": "keymap-item:Preferences:PREFERENCES:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02288", + "gapId": "keymap-item:Preferences:PREFERENCES:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02289", + "gapId": "keymap-item:Preferences_nav:PREFERENCES:UI:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02290", + "gapId": "keymap-item:Preferences_nav:PREFERENCES:UI:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02291", + "gapId": "keymap-item:Preview Tool: Cursor:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02292", + "gapId": "keymap-item:Preview Tool: Cursor:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02293", + "gapId": "keymap-item:Preview Tool: Move:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02294", + "gapId": "keymap-item:Preview Tool: Rotate:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02295", + "gapId": "keymap-item:Preview Tool: Sample:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02296", + "gapId": "keymap-item:Preview Tool: Scale:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02297", + "gapId": "keymap-item:Preview Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02298", + "gapId": "keymap-item:Preview Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02299", + "gapId": "keymap-item:Preview Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02300", + "gapId": "keymap-item:Preview Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02301", + "gapId": "keymap-item:Preview Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02302", + "gapId": "keymap-item:Preview Tool: Select Box:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02303", + "gapId": "keymap-item:Preview Tool: Select Box:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02304", + "gapId": "keymap-item:Preview Tool: Select Box:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02305", + "gapId": "keymap-item:Preview Tool: Select Box:SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02306", + "gapId": "keymap-item:Preview Tool: Select Box:SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02307", + "gapId": "keymap-item:Preview Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02308", + "gapId": "keymap-item:Preview Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02309", + "gapId": "keymap-item:Preview Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02310", + "gapId": "keymap-item:Preview Tool: Select Circle:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02311", + "gapId": "keymap-item:Preview Tool: Select Circle:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02312", + "gapId": "keymap-item:Preview Tool: Select Circle:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02313", + "gapId": "keymap-item:Preview Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02314", + "gapId": "keymap-item:Preview Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02315", + "gapId": "keymap-item:Preview Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02316", + "gapId": "keymap-item:Preview Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02317", + "gapId": "keymap-item:Preview Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02318", + "gapId": "keymap-item:Preview Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02319", + "gapId": "keymap-item:Preview Tool: Tweak (fallback):SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02320", + "gapId": "keymap-item:Preview Tool: Tweak (fallback):SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02321", + "gapId": "keymap-item:Preview Tool: Tweak (fallback):SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02322", + "gapId": "keymap-item:Preview Tool: Tweak (fallback):SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02323", + "gapId": "keymap-item:Preview Tool: Tweak (fallback):SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02324", + "gapId": "keymap-item:Preview Tool: Tweak:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02325", + "gapId": "keymap-item:Preview Tool: Tweak:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02326", + "gapId": "keymap-item:Preview Tool: Tweak:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02327", + "gapId": "keymap-item:Preview Tool: Tweak:SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02328", + "gapId": "keymap-item:Preview Tool: Tweak:SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02329", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02330", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02331", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02332", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02333", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02334", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02335", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02336", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02337", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02338", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02339", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02340", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02341", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02342", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02343", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02344", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02345", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02346", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02347", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02348", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02349", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02350", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02351", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02352", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02353", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02354", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02355", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02356", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02357", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02358", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02359", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02360", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02361", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02362", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02363", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02364", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02365", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02366", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02367", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02368", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02369", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02370", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02371", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02372", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02373", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02374", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02375", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02376", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02377", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02378", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02379", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02380", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02381", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02382", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02383", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02384", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:59", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02385", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02386", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:60", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02387", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:61", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02388", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:62", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02389", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:63", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02390", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:64", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02391", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:65", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02392", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:66", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02393", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:67", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02394", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:68", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02395", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:69", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02396", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02397", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:70", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02398", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:71", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02399", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:72", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02400", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:73", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02401", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:74", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02402", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:75", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02403", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:76", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02404", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:77", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02405", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:78", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02406", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:79", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02407", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02408", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:80", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02409", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:81", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02410", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:82", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02411", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:83", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02412", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:84", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02413", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:85", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02414", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:86", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02415", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:87", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02416", + "gapId": "keymap-item:Preview:SEQUENCE_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02417", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02418", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02419", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02420", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02421", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02422", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02423", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02424", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02425", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02426", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02427", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02428", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02429", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02430", + "gapId": "keymap-item:Primitive Tool Modal Map:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02431", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02432", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02433", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02434", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02435", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02436", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02437", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02438", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02439", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02440", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02441", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02442", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02443", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02444", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02445", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02446", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02447", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02448", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02449", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02450", + "gapId": "keymap-item:Property Editor:PROPERTIES:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02451", + "gapId": "keymap-item:Region Context Menu:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02452", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02453", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02454", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02455", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02456", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02457", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02458", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02459", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02460", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02461", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02462", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02463", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02464", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02465", + "gapId": "keymap-item:Screen Editing:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02466", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02467", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02468", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02469", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02470", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02471", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02472", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02473", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02474", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02475", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02476", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02477", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02478", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02479", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02480", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02481", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02482", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02483", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02484", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02485", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02486", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02487", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02488", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02489", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02490", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02491", + "gapId": "keymap-item:Screen:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02492", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02493", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02494", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02495", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02496", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02497", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02498", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02499", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02500", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02501", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02502", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02503", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02504", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02505", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02506", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02507", + "gapId": "keymap-item:Sculpt Curves:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02508", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02509", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02510", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02511", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02512", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02513", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02514", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02515", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02516", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02517", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02518", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02519", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02520", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02521", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02522", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02523", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02524", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02525", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02526", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02527", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02528", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02529", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02530", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02531", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02532", + "gapId": "keymap-item:Sculpt Expand Modal:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02533", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02534", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02535", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02536", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02537", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02538", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02539", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02540", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02541", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02542", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02543", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02544", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02545", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02546", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02547", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02548", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02549", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02550", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02551", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02552", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02553", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02554", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02555", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02556", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02557", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02558", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02559", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02560", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02561", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02562", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02563", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02564", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02565", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02566", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02567", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02568", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02569", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02570", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02571", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02572", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02573", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02574", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02575", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02576", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02577", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02578", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02579", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02580", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02581", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02582", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02583", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02584", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02585", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02586", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02587", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02588", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:59", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02589", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02590", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:60", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02591", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:61", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02592", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:62", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02593", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:63", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02594", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:64", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02595", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:65", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02596", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:66", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02597", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02598", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02599", + "gapId": "keymap-item:Sculpt:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02600", + "gapId": "keymap-item:Sequencer Channels:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02601", + "gapId": "keymap-item:Sequencer Channels:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02602", + "gapId": "keymap-item:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02603", + "gapId": "keymap-item:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02604", + "gapId": "keymap-item:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02605", + "gapId": "keymap-item:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02606", + "gapId": "keymap-item:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02607", + "gapId": "keymap-item:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02608", + "gapId": "keymap-item:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02609", + "gapId": "keymap-item:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02610", + "gapId": "keymap-item:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02611", + "gapId": "keymap-item:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02612", + "gapId": "keymap-item:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02613", + "gapId": "keymap-item:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02614", + "gapId": "keymap-item:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02615", + "gapId": "keymap-item:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02616", + "gapId": "keymap-item:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02617", + "gapId": "keymap-item:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02618", + "gapId": "keymap-item:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02619", + "gapId": "keymap-item:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02620", + "gapId": "keymap-item:Sequencer Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02621", + "gapId": "keymap-item:Sequencer Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02622", + "gapId": "keymap-item:Sequencer Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02623", + "gapId": "keymap-item:Sequencer Tool: Select Circle:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02624", + "gapId": "keymap-item:Sequencer Tool: Select Circle:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02625", + "gapId": "keymap-item:Sequencer Tool: Select Circle:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02626", + "gapId": "keymap-item:Sequencer Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02627", + "gapId": "keymap-item:Sequencer Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02628", + "gapId": "keymap-item:Sequencer Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02629", + "gapId": "keymap-item:Sequencer Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02630", + "gapId": "keymap-item:Sequencer Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02631", + "gapId": "keymap-item:Sequencer Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02632", + "gapId": "keymap-item:Sequencer Tool: Slip:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02633", + "gapId": "keymap-item:Sequencer Tool: Slip:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02634", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02635", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02636", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02637", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02638", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02639", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02640", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02641", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02642", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02643", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02644", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02645", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02646", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02647", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02648", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02649", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02650", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02651", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02652", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02653", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02654", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02655", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02656", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02657", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02658", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02659", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02660", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02661", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02662", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02663", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02664", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02665", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02666", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02667", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02668", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02669", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02670", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02671", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02672", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02673", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02674", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02675", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02676", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02677", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02678", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02679", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02680", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02681", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02682", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02683", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02684", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02685", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02686", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02687", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02688", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02689", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:59", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02690", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02691", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:60", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02692", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:61", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02693", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:62", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02694", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:63", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02695", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:64", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02696", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:65", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02697", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:66", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02698", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:67", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02699", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:68", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02700", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:69", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02701", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02702", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:70", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02703", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:71", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02704", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:72", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02705", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:73", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02706", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:74", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02707", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:75", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02708", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:76", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02709", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:77", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02710", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:78", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02711", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:79", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02712", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02713", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:80", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02714", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:81", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02715", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:82", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02716", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:83", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02717", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:84", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02718", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:85", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02719", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:86", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02720", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:87", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02721", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:88", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02722", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:89", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02723", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02724", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:90", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02725", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:91", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02726", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:92", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02727", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:93", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02728", + "gapId": "keymap-item:Sequencer:SEQUENCE_EDITOR:WINDOW:94", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02729", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02730", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02731", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02732", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02733", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02734", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02735", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02736", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02737", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02738", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02739", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02740", + "gapId": "keymap-item:Slip Modal:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02741", + "gapId": "keymap-item:Spreadsheet Generic:SPREADSHEET:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02742", + "gapId": "keymap-item:Spreadsheet Generic:SPREADSHEET:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02743", + "gapId": "keymap-item:Spreadsheet Generic:SPREADSHEET:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02744", + "gapId": "keymap-item:Spreadsheet Generic:SPREADSHEET:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02745", + "gapId": "keymap-item:Spreadsheet Generic:SPREADSHEET:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02746", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02747", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02748", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02749", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02750", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02751", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02752", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02753", + "gapId": "keymap-item:Standard Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02754", + "gapId": "keymap-item:Text Generic:TEXT_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02755", + "gapId": "keymap-item:Text Generic:TEXT_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02756", + "gapId": "keymap-item:Text Generic:TEXT_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02757", + "gapId": "keymap-item:Text Generic:TEXT_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02758", + "gapId": "keymap-item:Text Generic:TEXT_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02759", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02760", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02761", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02762", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02763", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02764", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02765", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02766", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02767", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02768", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02769", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02770", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02771", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02772", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02773", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02774", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02775", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02776", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02777", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02778", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02779", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02780", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02781", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02782", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02783", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02784", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02785", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02786", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02787", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02788", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02789", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02790", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02791", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02792", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02793", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02794", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02795", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02796", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02797", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02798", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02799", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02800", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02801", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02802", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02803", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02804", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02805", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02806", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02807", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02808", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02809", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02810", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02811", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02812", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02813", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02814", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:59", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02815", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02816", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:60", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02817", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:61", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02818", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:62", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02819", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:63", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02820", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:64", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02821", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:65", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02822", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:66", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02823", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:67", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02824", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:68", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02825", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:69", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02826", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02827", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:70", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02828", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02829", + "gapId": "keymap-item:Text:TEXT_EDITOR:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02830", + "gapId": "keymap-item:Time Scrub:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02831", + "gapId": "keymap-item:Toolbar Popup:EMPTY:TEMPORARY:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02832", + "gapId": "keymap-item:Toolbar Popup:EMPTY:TEMPORARY:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02833", + "gapId": "keymap-item:Toolbar Popup:EMPTY:TEMPORARY:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02834", + "gapId": "keymap-item:Toolbar Popup:EMPTY:TEMPORARY:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02835", + "gapId": "keymap-item:Toolbar Popup:EMPTY:TEMPORARY:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02836", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02837", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02838", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02839", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02840", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02841", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02842", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02843", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02844", + "gapId": "keymap-item:Transform Axis Target Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02845", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02846", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02847", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02848", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02849", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02850", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02851", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02852", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02853", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02854", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02855", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02856", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02857", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02858", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02859", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02860", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02861", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02862", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02863", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02864", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02865", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02866", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02867", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02868", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02869", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02870", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02871", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02872", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02873", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02874", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02875", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02876", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02877", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02878", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02879", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02880", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02881", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02882", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02883", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02884", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02885", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02886", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02887", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02888", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02889", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02890", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02891", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02892", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02893", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02894", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02895", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02896", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02897", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02898", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02899", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02900", + "gapId": "keymap-item:Transform Modal Map:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02901", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02902", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02903", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02904", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02905", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02906", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02907", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02908", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02909", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02910", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02911", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02912", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02913", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02914", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02915", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02916", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02917", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02918", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02919", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02920", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02921", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02922", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02923", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02924", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02925", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02926", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02927", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02928", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02929", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02930", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02931", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02932", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02933", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02934", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02935", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02936", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02937", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02938", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02939", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02940", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02941", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02942", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02943", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02944", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02945", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02946", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02947", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:50", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02948", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:51", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02949", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:52", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02950", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:53", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02951", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:54", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02952", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:55", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02953", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:56", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02954", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:57", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02955", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:58", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02956", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:59", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02957", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02958", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:60", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02959", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:61", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02960", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:62", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02961", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:63", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02962", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:64", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02963", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:65", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02964", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:66", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02965", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:67", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02966", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:68", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02967", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:69", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02968", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02969", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:70", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02970", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:71", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02971", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:72", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02972", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:73", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02973", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:74", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02974", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:75", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02975", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:76", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02976", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:77", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02977", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:78", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02978", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:79", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02979", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02980", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:80", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02981", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:81", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02982", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:82", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02983", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:83", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02984", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:84", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02985", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:85", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02986", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:86", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02987", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:87", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02988", + "gapId": "keymap-item:UV Editor:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02989", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02990", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02991", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02992", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02993", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02994", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02995", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02996", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02997", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02998", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-02999", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03000", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03001", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03002", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03003", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03004", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03005", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03006", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03007", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03008", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03009", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03010", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03011", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03012", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03013", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03014", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03015", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03016", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03017", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03018", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03019", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03020", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03021", + "gapId": "keymap-item:User Interface:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03022", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03023", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03024", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03025", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03026", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03027", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03028", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03029", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03030", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03031", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03032", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03033", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03034", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03035", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03036", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03037", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03038", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03039", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03040", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03041", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03042", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03043", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03044", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03045", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03046", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03047", + "gapId": "keymap-item:Vertex Paint:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03048", + "gapId": "keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03049", + "gapId": "keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03050", + "gapId": "keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03051", + "gapId": "keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03052", + "gapId": "keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03053", + "gapId": "keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03054", + "gapId": "keymap-item:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03055", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03056", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03057", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03058", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03059", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03060", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03061", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03062", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03063", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03064", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03065", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03066", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03067", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03068", + "gapId": "keymap-item:View2D Buttons List:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03069", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03070", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03071", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03072", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03073", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03074", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03075", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03076", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03077", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03078", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03079", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03080", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03081", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03082", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03083", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03084", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03085", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03086", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03087", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03088", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03089", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03090", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03091", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03092", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03093", + "gapId": "keymap-item:View2D:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03094", + "gapId": "keymap-item:View3D Dolly Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03095", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03096", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03097", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03098", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03099", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03100", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03101", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03102", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03103", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03104", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03105", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03106", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03107", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03108", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03109", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03110", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03111", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03112", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03113", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03114", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03115", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03116", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03117", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03118", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03119", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03120", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03121", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03122", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03123", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03124", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03125", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03126", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03127", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03128", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03129", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03130", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03131", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03132", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03133", + "gapId": "keymap-item:View3D Fly Modal:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03134", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03135", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03136", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03137", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03138", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03139", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03140", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03141", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03142", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03143", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03144", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03145", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03146", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03147", + "gapId": "keymap-item:View3D Gesture Circle:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03148", + "gapId": "keymap-item:View3D Move Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03149", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03150", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03151", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03152", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03153", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03154", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03155", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03156", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03157", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03158", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03159", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03160", + "gapId": "keymap-item:View3D Placement Modal:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03161", + "gapId": "keymap-item:View3D Rotate Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03162", + "gapId": "keymap-item:View3D Rotate Modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03163", + "gapId": "keymap-item:View3D Rotate Modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03164", + "gapId": "keymap-item:View3D Rotate Modal:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03165", + "gapId": "keymap-item:View3D Rotate Modal:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03166", + "gapId": "keymap-item:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03167", + "gapId": "keymap-item:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03168", + "gapId": "keymap-item:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03169", + "gapId": "keymap-item:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03170", + "gapId": "keymap-item:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03171", + "gapId": "keymap-item:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03172", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03173", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03174", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03175", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03176", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03177", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03178", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03179", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03180", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03181", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03182", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03183", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03184", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03185", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03186", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03187", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03188", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03189", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03190", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03191", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03192", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03193", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03194", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03195", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03196", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03197", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03198", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03199", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:33", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03200", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:34", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03201", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:35", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03202", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:36", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03203", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:37", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03204", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:38", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03205", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:39", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03206", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03207", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:40", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03208", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:41", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03209", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:42", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03210", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:43", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03211", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:44", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03212", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:45", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03213", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:46", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03214", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:47", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03215", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:48", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03216", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:49", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03217", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03218", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03219", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03220", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03221", + "gapId": "keymap-item:View3D Walk Modal:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03222", + "gapId": "keymap-item:View3D Zoom Modal:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03223", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03224", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03225", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03226", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03227", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03228", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03229", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03230", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03231", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03232", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03233", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03234", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03235", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03236", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03237", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03238", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03239", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03240", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03241", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03242", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03243", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03244", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03245", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03246", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03247", + "gapId": "keymap-item:Weight Paint:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03248", + "gapId": "keymap-item:Window:EMPTY:WINDOW:0", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03249", + "gapId": "keymap-item:Window:EMPTY:WINDOW:1", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03250", + "gapId": "keymap-item:Window:EMPTY:WINDOW:10", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03251", + "gapId": "keymap-item:Window:EMPTY:WINDOW:11", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03252", + "gapId": "keymap-item:Window:EMPTY:WINDOW:12", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03253", + "gapId": "keymap-item:Window:EMPTY:WINDOW:13", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03254", + "gapId": "keymap-item:Window:EMPTY:WINDOW:14", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03255", + "gapId": "keymap-item:Window:EMPTY:WINDOW:15", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03256", + "gapId": "keymap-item:Window:EMPTY:WINDOW:16", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03257", + "gapId": "keymap-item:Window:EMPTY:WINDOW:17", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03258", + "gapId": "keymap-item:Window:EMPTY:WINDOW:18", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03259", + "gapId": "keymap-item:Window:EMPTY:WINDOW:19", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03260", + "gapId": "keymap-item:Window:EMPTY:WINDOW:2", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03261", + "gapId": "keymap-item:Window:EMPTY:WINDOW:20", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03262", + "gapId": "keymap-item:Window:EMPTY:WINDOW:21", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03263", + "gapId": "keymap-item:Window:EMPTY:WINDOW:22", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03264", + "gapId": "keymap-item:Window:EMPTY:WINDOW:23", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03265", + "gapId": "keymap-item:Window:EMPTY:WINDOW:24", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03266", + "gapId": "keymap-item:Window:EMPTY:WINDOW:25", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03267", + "gapId": "keymap-item:Window:EMPTY:WINDOW:26", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03268", + "gapId": "keymap-item:Window:EMPTY:WINDOW:27", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03269", + "gapId": "keymap-item:Window:EMPTY:WINDOW:28", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03270", + "gapId": "keymap-item:Window:EMPTY:WINDOW:29", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03271", + "gapId": "keymap-item:Window:EMPTY:WINDOW:3", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03272", + "gapId": "keymap-item:Window:EMPTY:WINDOW:30", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03273", + "gapId": "keymap-item:Window:EMPTY:WINDOW:31", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03274", + "gapId": "keymap-item:Window:EMPTY:WINDOW:32", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03275", + "gapId": "keymap-item:Window:EMPTY:WINDOW:4", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03276", + "gapId": "keymap-item:Window:EMPTY:WINDOW:5", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03277", + "gapId": "keymap-item:Window:EMPTY:WINDOW:6", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03278", + "gapId": "keymap-item:Window:EMPTY:WINDOW:7", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03279", + "gapId": "keymap-item:Window:EMPTY:WINDOW:8", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03280", + "gapId": "keymap-item:Window:EMPTY:WINDOW:9", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03281", + "gapId": "keymap:3D View Generic:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03282", + "gapId": "keymap:3D View Tool: Bend:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03283", + "gapId": "keymap:3D View Tool: Breakdowner:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03284", + "gapId": "keymap:3D View Tool: Cursor:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03285", + "gapId": "keymap:3D View Tool: Edit Armature, B-Bone Size:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03286", + "gapId": "keymap:3D View Tool: Edit Armature, Bone Envelope:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03287", + "gapId": "keymap:3D View Tool: Edit Armature, Extrude to Cursor:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03288", + "gapId": "keymap:3D View Tool: Edit Armature, Extrude:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03289", + "gapId": "keymap:3D View Tool: Edit Armature, Roll:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03290", + "gapId": "keymap:3D View Tool: Edit Curve, Curve Pen:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03291", + "gapId": "keymap:3D View Tool: Edit Curve, Draw:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03292", + "gapId": "keymap:3D View Tool: Edit Curve, Extrude to Cursor:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03293", + "gapId": "keymap:3D View Tool: Edit Curve, Extrude:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03294", + "gapId": "keymap:3D View Tool: Edit Curve, Radius:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03295", + "gapId": "keymap:3D View Tool: Edit Curve, Randomize:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03296", + "gapId": "keymap:3D View Tool: Edit Curve, Tilt:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03297", + "gapId": "keymap:3D View Tool: Edit Curves, Draw:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03298", + "gapId": "keymap:3D View Tool: Edit Curves, Pen:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03299", + "gapId": "keymap:3D View Tool: Edit Grease Pencil, Gradient:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03300", + "gapId": "keymap:3D View Tool: Edit Grease Pencil, Interpolate:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03301", + "gapId": "keymap:3D View Tool: Edit Grease Pencil, Pen:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03302", + "gapId": "keymap:3D View Tool: Edit Mesh, Bevel:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03303", + "gapId": "keymap:3D View Tool: Edit Mesh, Bisect:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03304", + "gapId": "keymap:3D View Tool: Edit Mesh, Edge Slide:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03305", + "gapId": "keymap:3D View Tool: Edit Mesh, Extrude Along Normals:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03306", + "gapId": "keymap:3D View Tool: Edit Mesh, Extrude Individual:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03307", + "gapId": "keymap:3D View Tool: Edit Mesh, Extrude Manifold:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03308", + "gapId": "keymap:3D View Tool: Edit Mesh, Extrude Region:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03309", + "gapId": "keymap:3D View Tool: Edit Mesh, Extrude to Cursor:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03310", + "gapId": "keymap:3D View Tool: Edit Mesh, Inset Faces:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03311", + "gapId": "keymap:3D View Tool: Edit Mesh, Knife:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03312", + "gapId": "keymap:3D View Tool: Edit Mesh, Loop Cut:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03313", + "gapId": "keymap:3D View Tool: Edit Mesh, Offset Edge Loop Cut:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03314", + "gapId": "keymap:3D View Tool: Edit Mesh, Poly Build:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03315", + "gapId": "keymap:3D View Tool: Edit Mesh, Push/Pull:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03316", + "gapId": "keymap:3D View Tool: Edit Mesh, Randomize:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03317", + "gapId": "keymap:3D View Tool: Edit Mesh, Rip Edge:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03318", + "gapId": "keymap:3D View Tool: Edit Mesh, Rip Region:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03319", + "gapId": "keymap:3D View Tool: Edit Mesh, Shrink/Fatten:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03320", + "gapId": "keymap:3D View Tool: Edit Mesh, Smooth:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03321", + "gapId": "keymap:3D View Tool: Edit Mesh, Spin Duplicates:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03322", + "gapId": "keymap:3D View Tool: Edit Mesh, Spin:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03323", + "gapId": "keymap:3D View Tool: Edit Mesh, To Sphere:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03324", + "gapId": "keymap:3D View Tool: Edit Mesh, Vertex Slide:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03325", + "gapId": "keymap:3D View Tool: Edit Text, Select Text:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03326", + "gapId": "keymap:3D View Tool: Measure:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03327", + "gapId": "keymap:3D View Tool: Move:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03328", + "gapId": "keymap:3D View Tool: Object, Add Primitive:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03329", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Arc:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03330", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Box:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03331", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Circle:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03332", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Curve:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03333", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Eyedropper:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03334", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Interpolate:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03335", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Line:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03336", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Polyline:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03337", + "gapId": "keymap:3D View Tool: Paint Grease Pencil, Trim:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03338", + "gapId": "keymap:3D View Tool: Paint Weight, Gradient:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03339", + "gapId": "keymap:3D View Tool: Paint Weight, Sample Vertex Group:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03340", + "gapId": "keymap:3D View Tool: Paint Weight, Sample Weight:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03341", + "gapId": "keymap:3D View Tool: Push:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03342", + "gapId": "keymap:3D View Tool: Relax:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03343", + "gapId": "keymap:3D View Tool: Rotate:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03344", + "gapId": "keymap:3D View Tool: Scale:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03345", + "gapId": "keymap:3D View Tool: Sculpt, Box Face Set:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03346", + "gapId": "keymap:3D View Tool: Sculpt, Box Hide:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03347", + "gapId": "keymap:3D View Tool: Sculpt, Box Mask:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03348", + "gapId": "keymap:3D View Tool: Sculpt, Box Trim:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03349", + "gapId": "keymap:3D View Tool: Sculpt, Cloth Filter:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03350", + "gapId": "keymap:3D View Tool: Sculpt, Color Filter:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03351", + "gapId": "keymap:3D View Tool: Sculpt, Face Set Edit:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03352", + "gapId": "keymap:3D View Tool: Sculpt, Lasso Face Set:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03353", + "gapId": "keymap:3D View Tool: Sculpt, Lasso Hide:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03354", + "gapId": "keymap:3D View Tool: Sculpt, Lasso Mask:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03355", + "gapId": "keymap:3D View Tool: Sculpt, Lasso Trim:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03356", + "gapId": "keymap:3D View Tool: Sculpt, Line Face Set:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03357", + "gapId": "keymap:3D View Tool: Sculpt, Line Hide:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03358", + "gapId": "keymap:3D View Tool: Sculpt, Line Mask:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03359", + "gapId": "keymap:3D View Tool: Sculpt, Line Project:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03360", + "gapId": "keymap:3D View Tool: Sculpt, Line Trim:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03361", + "gapId": "keymap:3D View Tool: Sculpt, Mask by Color:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03362", + "gapId": "keymap:3D View Tool: Sculpt, Mesh Filter:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03363", + "gapId": "keymap:3D View Tool: Sculpt, Polyline Face Set:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03364", + "gapId": "keymap:3D View Tool: Sculpt, Polyline Hide:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03365", + "gapId": "keymap:3D View Tool: Sculpt, Polyline Mask:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03366", + "gapId": "keymap:3D View Tool: Sculpt, Polyline Trim:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03367", + "gapId": "keymap:3D View Tool: Select Box (fallback):VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03368", + "gapId": "keymap:3D View Tool: Select Box:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03369", + "gapId": "keymap:3D View Tool: Select Circle (fallback):VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03370", + "gapId": "keymap:3D View Tool: Select Circle:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03371", + "gapId": "keymap:3D View Tool: Select Lasso (fallback):VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03372", + "gapId": "keymap:3D View Tool: Select Lasso:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03373", + "gapId": "keymap:3D View Tool: Shear:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03374", + "gapId": "keymap:3D View Tool: Transform:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03375", + "gapId": "keymap:3D View Tool: Tweak (fallback):VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03376", + "gapId": "keymap:3D View Tool: Tweak:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03377", + "gapId": "keymap:3D View:VIEW_3D:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03378", + "gapId": "keymap:Animation Channels:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03379", + "gapId": "keymap:Animation:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03380", + "gapId": "keymap:Armature:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03381", + "gapId": "keymap:Bevel Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03382", + "gapId": "keymap:Clip Dopesheet Editor:CLIP_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03383", + "gapId": "keymap:Clip Editor:CLIP_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03384", + "gapId": "keymap:Clip Graph Editor:CLIP_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03385", + "gapId": "keymap:Clip Time Scrub:CLIP_EDITOR:PREVIEW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03386", + "gapId": "keymap:Clip:CLIP_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03387", + "gapId": "keymap:Console:CONSOLE:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03388", + "gapId": "keymap:Curve Pen Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03389", + "gapId": "keymap:Curve:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03390", + "gapId": "keymap:Curves:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03391", + "gapId": "keymap:Custom Normals Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03392", + "gapId": "keymap:Dopesheet Generic:DOPESHEET_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03393", + "gapId": "keymap:Dopesheet:DOPESHEET_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03394", + "gapId": "keymap:Eyedropper ColorRamp PointSampling Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03395", + "gapId": "keymap:Eyedropper Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03396", + "gapId": "keymap:File Browser Buttons:FILE_BROWSER:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03397", + "gapId": "keymap:File Browser Main:FILE_BROWSER:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03398", + "gapId": "keymap:File Browser:FILE_BROWSER:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03399", + "gapId": "keymap:Fill Tool Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03400", + "gapId": "keymap:Font:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03401", + "gapId": "keymap:Frames:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03402", + "gapId": "keymap:Generic Gizmo Click Drag:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03403", + "gapId": "keymap:Generic Gizmo Drag:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03404", + "gapId": "keymap:Generic Gizmo Maybe Drag:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03405", + "gapId": "keymap:Generic Gizmo Select:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03406", + "gapId": "keymap:Generic Gizmo Tweak Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03407", + "gapId": "keymap:Generic Gizmo:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03408", + "gapId": "keymap:Generic Tool: Annotate Eraser:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03409", + "gapId": "keymap:Generic Tool: Annotate Line:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03410", + "gapId": "keymap:Generic Tool: Annotate Polygon:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03411", + "gapId": "keymap:Generic Tool: Annotate:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03412", + "gapId": "keymap:Gesture Box:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03413", + "gapId": "keymap:Gesture Lasso:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03414", + "gapId": "keymap:Gesture Polyline:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03415", + "gapId": "keymap:Gesture Straight Line:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03416", + "gapId": "keymap:Gesture Zoom Border:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03417", + "gapId": "keymap:Graph Editor Generic:GRAPH_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03418", + "gapId": "keymap:Graph Editor:GRAPH_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03419", + "gapId": "keymap:Grease Pencil Brush Stroke:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03420", + "gapId": "keymap:Grease Pencil Draw Mode:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03421", + "gapId": "keymap:Grease Pencil Edit Mode:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03422", + "gapId": "keymap:Grease Pencil Fill Tool:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03423", + "gapId": "keymap:Grease Pencil Sculpt Mode:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03424", + "gapId": "keymap:Grease Pencil Selection:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03425", + "gapId": "keymap:Grease Pencil Vertex Paint:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03426", + "gapId": "keymap:Grease Pencil Weight Paint:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03427", + "gapId": "keymap:Grease Pencil:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03428", + "gapId": "keymap:Image Editor Tool: Mask, Box:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03429", + "gapId": "keymap:Image Editor Tool: Mask, Circle:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03430", + "gapId": "keymap:Image Editor Tool: Mask, Cursor:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03431", + "gapId": "keymap:Image Editor Tool: Mask, Move:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03432", + "gapId": "keymap:Image Editor Tool: Mask, Rotate:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03433", + "gapId": "keymap:Image Editor Tool: Mask, Scale:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03434", + "gapId": "keymap:Image Editor Tool: Mask, Select Box (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03435", + "gapId": "keymap:Image Editor Tool: Mask, Select Box:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03436", + "gapId": "keymap:Image Editor Tool: Mask, Select Circle (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03437", + "gapId": "keymap:Image Editor Tool: Mask, Select Circle:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03438", + "gapId": "keymap:Image Editor Tool: Mask, Select Lasso (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03439", + "gapId": "keymap:Image Editor Tool: Mask, Select Lasso:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03440", + "gapId": "keymap:Image Editor Tool: Mask, Transform:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03441", + "gapId": "keymap:Image Editor Tool: Mask, Tweak (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03442", + "gapId": "keymap:Image Editor Tool: Mask, Tweak:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03443", + "gapId": "keymap:Image Editor Tool: Sample:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03444", + "gapId": "keymap:Image Editor Tool: Uv, Cursor:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03445", + "gapId": "keymap:Image Editor Tool: Uv, Grab:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03446", + "gapId": "keymap:Image Editor Tool: Uv, Move:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03447", + "gapId": "keymap:Image Editor Tool: Uv, Pinch:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03448", + "gapId": "keymap:Image Editor Tool: Uv, Relax:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03449", + "gapId": "keymap:Image Editor Tool: Uv, Rip Region:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03450", + "gapId": "keymap:Image Editor Tool: Uv, Rotate:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03451", + "gapId": "keymap:Image Editor Tool: Uv, Scale:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03452", + "gapId": "keymap:Image Editor Tool: Uv, Select Box (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03453", + "gapId": "keymap:Image Editor Tool: Uv, Select Box:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03454", + "gapId": "keymap:Image Editor Tool: Uv, Select Circle (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03455", + "gapId": "keymap:Image Editor Tool: Uv, Select Circle:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03456", + "gapId": "keymap:Image Editor Tool: Uv, Select Lasso (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03457", + "gapId": "keymap:Image Editor Tool: Uv, Select Lasso:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03458", + "gapId": "keymap:Image Editor Tool: Uv, Tweak (fallback):IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03459", + "gapId": "keymap:Image Editor Tool: Uv, Tweak:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03460", + "gapId": "keymap:Image Generic:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03461", + "gapId": "keymap:Image Paint:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03462", + "gapId": "keymap:Image:IMAGE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03463", + "gapId": "keymap:Info:INFO:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03464", + "gapId": "keymap:Interpolate Tool Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03465", + "gapId": "keymap:Knife Tool Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03466", + "gapId": "keymap:Lattice:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03467", + "gapId": "keymap:Markers:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03468", + "gapId": "keymap:Mask Editing:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03469", + "gapId": "keymap:Mesh Filter Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03470", + "gapId": "keymap:Mesh:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03471", + "gapId": "keymap:Metaball:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03472", + "gapId": "keymap:NLA Editor:NLA_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03473", + "gapId": "keymap:NLA Generic:NLA_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03474", + "gapId": "keymap:NLA Tracks:NLA_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03475", + "gapId": "keymap:Node Editor:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03476", + "gapId": "keymap:Node Generic:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03477", + "gapId": "keymap:Node Link Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03478", + "gapId": "keymap:Node Resize Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03479", + "gapId": "keymap:Node Tool: Add Reroute:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03480", + "gapId": "keymap:Node Tool: Links Cut:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03481", + "gapId": "keymap:Node Tool: Mute Links:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03482", + "gapId": "keymap:Node Tool: Select Box (fallback):NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03483", + "gapId": "keymap:Node Tool: Select Box:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03484", + "gapId": "keymap:Node Tool: Select Circle (fallback):NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03485", + "gapId": "keymap:Node Tool: Select Circle:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03486", + "gapId": "keymap:Node Tool: Select Lasso (fallback):NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03487", + "gapId": "keymap:Node Tool: Select Lasso:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03488", + "gapId": "keymap:Node Tool: Tweak (fallback):NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03489", + "gapId": "keymap:Node Tool: Tweak:NODE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03490", + "gapId": "keymap:Object Mode:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03491", + "gapId": "keymap:Object Non-modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03492", + "gapId": "keymap:Outliner:OUTLINER:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03493", + "gapId": "keymap:Paint Curve:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03494", + "gapId": "keymap:Paint Face Mask (Weight, Vertex, Texture):EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03495", + "gapId": "keymap:Paint Stroke Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03496", + "gapId": "keymap:Paint Vertex Selection (Weight, Vertex):EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03497", + "gapId": "keymap:Particle:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03498", + "gapId": "keymap:Pen Tool Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03499", + "gapId": "keymap:Point Cloud:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03500", + "gapId": "keymap:Pose:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03501", + "gapId": "keymap:Preferences:PREFERENCES:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03502", + "gapId": "keymap:Preferences_nav:PREFERENCES:UI", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03503", + "gapId": "keymap:Preview Tool: Cursor:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03504", + "gapId": "keymap:Preview Tool: Move:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03505", + "gapId": "keymap:Preview Tool: Rotate:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03506", + "gapId": "keymap:Preview Tool: Sample:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03507", + "gapId": "keymap:Preview Tool: Scale:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03508", + "gapId": "keymap:Preview Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03509", + "gapId": "keymap:Preview Tool: Select Box:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03510", + "gapId": "keymap:Preview Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03511", + "gapId": "keymap:Preview Tool: Select Circle:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03512", + "gapId": "keymap:Preview Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03513", + "gapId": "keymap:Preview Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03514", + "gapId": "keymap:Preview Tool: Tweak (fallback):SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03515", + "gapId": "keymap:Preview Tool: Tweak:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03516", + "gapId": "keymap:Preview:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03517", + "gapId": "keymap:Primitive Tool Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03518", + "gapId": "keymap:Property Editor:PROPERTIES:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03519", + "gapId": "keymap:Region Context Menu:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03520", + "gapId": "keymap:Screen Editing:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03521", + "gapId": "keymap:Screen:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03522", + "gapId": "keymap:Sculpt Curves:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03523", + "gapId": "keymap:Sculpt Expand Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03524", + "gapId": "keymap:Sculpt:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03525", + "gapId": "keymap:Sequencer Channels:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03526", + "gapId": "keymap:Sequencer Tool: Blade:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03527", + "gapId": "keymap:Sequencer Tool: Select Box (fallback):SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03528", + "gapId": "keymap:Sequencer Tool: Select Box:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03529", + "gapId": "keymap:Sequencer Tool: Select Circle (fallback):SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03530", + "gapId": "keymap:Sequencer Tool: Select Circle:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03531", + "gapId": "keymap:Sequencer Tool: Select Lasso (fallback):SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03532", + "gapId": "keymap:Sequencer Tool: Select Lasso:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03533", + "gapId": "keymap:Sequencer Tool: Slip:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03534", + "gapId": "keymap:Sequencer:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03535", + "gapId": "keymap:Slip Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03536", + "gapId": "keymap:Spreadsheet Generic:SPREADSHEET:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03537", + "gapId": "keymap:Standard Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03538", + "gapId": "keymap:Text Generic:TEXT_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03539", + "gapId": "keymap:Text:TEXT_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03540", + "gapId": "keymap:Time Scrub:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03541", + "gapId": "keymap:Toolbar Popup:EMPTY:TEMPORARY", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03542", + "gapId": "keymap:Transform Axis Target Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03543", + "gapId": "keymap:Transform Modal Map:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03544", + "gapId": "keymap:UV Editor:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03545", + "gapId": "keymap:User Interface:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03546", + "gapId": "keymap:Vertex Paint:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03547", + "gapId": "keymap:Video Sequence Editor:SEQUENCE_EDITOR:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03548", + "gapId": "keymap:View2D Buttons List:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03549", + "gapId": "keymap:View2D:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03550", + "gapId": "keymap:View3D Dolly Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03551", + "gapId": "keymap:View3D Fly Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03552", + "gapId": "keymap:View3D Gesture Circle:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03553", + "gapId": "keymap:View3D Move Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03554", + "gapId": "keymap:View3D Placement Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03555", + "gapId": "keymap:View3D Rotate Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03556", + "gapId": "keymap:View3D VR Location Scouting Capture Review Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03557", + "gapId": "keymap:View3D Walk Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03558", + "gapId": "keymap:View3D Zoom Modal:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03559", + "gapId": "keymap:Weight Paint:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03560", + "gapId": "keymap:Window:EMPTY:WINDOW", + "ownerFamily": "KEYMAP", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03561", + "gapId": "region:ASSET_SHELF", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03562", + "gapId": "region:ASSET_SHELF_HEADER", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03563", + "gapId": "region:CHANNELS", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03564", + "gapId": "region:EXECUTE", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03565", + "gapId": "region:FOOTER", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03566", + "gapId": "region:HEADER", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03567", + "gapId": "region:HUD", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03568", + "gapId": "region:NAVIGATION_BAR", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03569", + "gapId": "region:PREVIEW", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03570", + "gapId": "region:SCRUBBING", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03571", + "gapId": "region:TEMPORARY", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03572", + "gapId": "region:TOOLS", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03573", + "gapId": "region:TOOL_HEADER", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03574", + "gapId": "region:TOOL_PROPS", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03575", + "gapId": "region:UI", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03576", + "gapId": "region:WINDOW", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03577", + "gapId": "region:XR", + "ownerFamily": "REGION", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03578", + "gapId": "space-class:SpaceClipEditor", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03579", + "gapId": "space-class:SpaceConsole", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03580", + "gapId": "space-class:SpaceDopeSheetEditor", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03581", + "gapId": "space-class:SpaceFileBrowser", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03582", + "gapId": "space-class:SpaceGraphEditor", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03583", + "gapId": "space-class:SpaceImageEditor", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03584", + "gapId": "space-class:SpaceInfo", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03585", + "gapId": "space-class:SpaceNLA", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03586", + "gapId": "space-class:SpaceNodeEditor", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03587", + "gapId": "space-class:SpaceOutliner", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03588", + "gapId": "space-class:SpacePreferences", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03589", + "gapId": "space-class:SpaceProperties", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03590", + "gapId": "space-class:SpaceSequenceEditor", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03591", + "gapId": "space-class:SpaceSpreadsheet", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03592", + "gapId": "space-class:SpaceTextEditor", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03593", + "gapId": "space-class:SpaceView3D", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03594", + "gapId": "space:CLIP_EDITOR", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03595", + "gapId": "space:CONSOLE", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03596", + "gapId": "space:DOPESHEET_EDITOR", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03597", + "gapId": "space:EMPTY", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03598", + "gapId": "space:FILE_BROWSER", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03599", + "gapId": "space:GRAPH_EDITOR", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03600", + "gapId": "space:IMAGE_EDITOR", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03601", + "gapId": "space:INFO", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03602", + "gapId": "space:NLA_EDITOR", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03603", + "gapId": "space:NODE_EDITOR", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03604", + "gapId": "space:OUTLINER", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03605", + "gapId": "space:PREFERENCES", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03606", + "gapId": "space:PROPERTIES", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03607", + "gapId": "space:SEQUENCE_EDITOR", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03608", + "gapId": "space:SPREADSHEET", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03609", + "gapId": "space:STATUSBAR", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03610", + "gapId": "space:TEXT_EDITOR", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03611", + "gapId": "space:TOPBAR", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03612", + "gapId": "space:VIEW_3D", + "ownerFamily": "SPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03613", + "gapId": "workspace:EDIT", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03614", + "gapId": "workspace:EDIT_GPENCIL", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03615", + "gapId": "workspace:OBJECT", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03616", + "gapId": "workspace:PAINT_GREASE_PENCIL", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03617", + "gapId": "workspace:PARTICLE_EDIT", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03618", + "gapId": "workspace:POSE", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03619", + "gapId": "workspace:SCULPT", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03620", + "gapId": "workspace:SCULPT_GREASE_PENCIL", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03621", + "gapId": "workspace:TEXTURE_PAINT", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03622", + "gapId": "workspace:VERTEX_GREASE_PENCIL", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03623", + "gapId": "workspace:VERTEX_PAINT", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03624", + "gapId": "workspace:WEIGHT_GREASE_PENCIL", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M21-GAP-03625", + "gapId": "workspace:WEIGHT_PAINT", + "ownerFamily": "WORKSPACE", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00001", + "gapId": "rna:Depsgraph:Depsgraph", + "ownerFamily": "Depsgraph", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00002", + "gapId": "rna:Depsgraph:DepsgraphObjectInstance", + "ownerFamily": "Depsgraph", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00003", + "gapId": "rna:Depsgraph:DepsgraphUpdate", + "ownerFamily": "Depsgraph", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00004", + "gapId": "rna:Scene:Camera", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00005", + "gapId": "rna:Scene:Collection", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00006", + "gapId": "rna:Scene:Constraint", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00007", + "gapId": "rna:Scene:LayerCollection", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00008", + "gapId": "rna:Scene:Light", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00009", + "gapId": "rna:Scene:Material", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00010", + "gapId": "rna:Scene:Modifier", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00011", + "gapId": "rna:Scene:NodeTree", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00012", + "gapId": "rna:Scene:Object", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00013", + "gapId": "rna:Scene:RenderSettings", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00014", + "gapId": "rna:Scene:Scene", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00015", + "gapId": "rna:Scene:Screen", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00016", + "gapId": "rna:Scene:ViewLayer", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00017", + "gapId": "rna:Scene:Window", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00018", + "gapId": "rna:Scene:WindowManager", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + }, + { + "id": "M22-GAP-00019", + "gapId": "rna:Scene:World", + "ownerFamily": "Scene", + "state": "pending", + "targetImplementationClass": "LOCAL_EXACT", + "family": "OTHER", + "evidenceClass": "legacy_pending" + } +] diff --git a/tests/golden/corrective/C5-003/manifest.json b/tests/golden/corrective/C5-003/manifest.json new file mode 100644 index 00000000..80203e78 --- /dev/null +++ b/tests/golden/corrective/C5-003/manifest.json @@ -0,0 +1,132 @@ +{ + "schemaVersion": 1, + "task": "C5-003", + "status": "done", + "gate": "G4", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C5-003", + "artifactCount": 20, + "artifacts": [ + { + "path": "tests/golden/corrective/C5-003/capability-manifest.json", + "sha256": "c39e4f880588bc6008ce35b6648f6cb89df4f50dd6e065af7ac8d55d782417c1", + "bytes": 1619 + }, + { + "path": "tests/golden/corrective/C5-003/check-context-governance.log", + "sha256": "7ed574f956f0255482a15f63faedc657fc7eb0fa643d282a430f27a207b5bf8d", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C5-003/check-corrective-plan.log", + "sha256": "a4f7594629ab2e08ee3644a7491c1b4ada19367399ac1968cd4a1fef904268eb", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C5-003/check-task-context.log", + "sha256": "cf9fb3f108cb7febf3d6d17543cb1abf9356174eb34d379652dd288aca6db2d7", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C5-003/command-exit-codes.json", + "sha256": "589c78404682118812fff8dafb2de6493f652894a5cf28fa693924fa74edc952", + "bytes": 250 + }, + { + "path": "tests/golden/corrective/C5-003/coverage-report.json", + "sha256": "8749fb366436ddaf6b4aa95b651deca7aa676adb0e039873a4d77373828e9f18", + "bytes": 683 + }, + { + "path": "tests/golden/corrective/C5-003/determinism.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C5-003/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C5-003/inventory-gate.log", + "sha256": "f13e448e4bd8bd556ab8f30517e222defab12cf94605434895bfb48d10b3b9ba", + "bytes": 87 + }, + { + "path": "tests/golden/corrective/C5-003/inventory-migration.mjs", + "sha256": "73fe0a97399c2f709e563d10058921c7e3abe4f4a576787f2188362b37a00284", + "bytes": 2925 + }, + { + "path": "tests/golden/corrective/C5-003/inventory-report.json", + "sha256": "853486cc9fd2e3a0e7d5efdd974aa901675df67176fae521054a419b465298a5", + "bytes": 1886827 + }, + { + "path": "tests/golden/corrective/C5-003/inventory-report.second.json", + "sha256": "853486cc9fd2e3a0e7d5efdd974aa901675df67176fae521054a419b465298a5", + "bytes": 1886827 + }, + { + "path": "tests/golden/corrective/C5-003/legacy-evidence-classification.json", + "sha256": "36c36ff6d60b42e40a2432227425770d0badcafd04fbd7ba73266a9f1e8b1555", + "bytes": 1759697 + }, + { + "path": "tests/golden/corrective/C5-003/protected-hash-check.log", + "sha256": "deb15d1fa1d5606bcbe760b066dfba312bd586df82228214668f149385940ac5", + "bytes": 28 + }, + { + "path": "tests/golden/corrective/C5-003/protected-hashes-after.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C5-003/protected-hashes-before.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C5-003/source-hash-check.log", + "sha256": "72365be1732352111b737ba53579406ff88435119f61291373c2c15c1b409e35", + "bytes": 23 + }, + { + "path": "tests/golden/corrective/C5-003/source-hashes.json", + "sha256": "0ac92232faa71413b322181398e5d69c4eb29dc81b933596cf514e521812ba84", + "bytes": 643 + }, + { + "path": "tests/golden/corrective/C5-003/test-context-governance.log", + "sha256": "fabfd1f266dfeca80501507c1b425d153826abe2cb299f585a05154f68983247", + "bytes": 2580 + }, + { + "path": "tests/golden/corrective/C5-003/typecheck.log", + "sha256": "f90c14a9694ed7029129a343fa5cc8672e4a59a5fe4b34e7c3098db9c5c5bd1a", + "bytes": 76 + } + ], + "sourceHashes": { + "tests/golden/corrective/C5-001/cluster-report.json": "59b76bca30291b85895cc762e42afba391948fd51954f80bd4a20988f913307c", + "tests/golden/corrective/C5-002/manifest.json": "bb22c1d64b2042253e1673db8a4082580b7eb98a1a92551fa0cde51413fc6aed", + "tests/golden/M15-03A/task-catalog.jsonl": "da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d", + "docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json": "053e1551a24da08e045bb54115858a892ddd825fa59f1691a26a1ccfc1db3ca0", + "tests/golden/corrective/C5-003/inventory-migration.mjs": "73fe0a97399c2f709e563d10058921c7e3abe4f4a576787f2188362b37a00284" + }, + "commandExitCodes": { + "inventoryReport": 0, + "determinism": 0, + "inventoryGate": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0, + "protectedHashCheck": 0, + "sourceHashCheck": 0 + }, + "nextCorrectiveTask": "C6-001" +} diff --git a/tests/golden/corrective/C5-003/protected-hashes-after.txt b/tests/golden/corrective/C5-003/protected-hashes-after.txt new file mode 100644 index 00000000..a0d2c8ba --- /dev/null +++ b/tests/golden/corrective/C5-003/protected-hashes-after.txt @@ -0,0 +1,7 @@ +5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1 docs/EXECUTION_QUEUE.md +32f4c11ebf8563f3aa500583f3979c1b38d711cc7328a428968118f0375b90b4 tests/golden/M15-03A/completed-gap-tasks.json +edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17 tests/golden/M15-03A/next-task-plan.json +da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d tests/golden/M15-03A/task-catalog.jsonl +ed591788c48c1b089decd2aa187f66728b5cc66a73c2b1c0c46c1a46ec4a0ae0 tests/golden/M15-03A/task-index.json +3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1 tests/golden/M16-GAP-00273/manifest.json +5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8 docs/status/M16-GAP-00273.md diff --git a/tests/golden/corrective/C5-003/protected-hashes-before.txt b/tests/golden/corrective/C5-003/protected-hashes-before.txt new file mode 100644 index 00000000..a0d2c8ba --- /dev/null +++ b/tests/golden/corrective/C5-003/protected-hashes-before.txt @@ -0,0 +1,7 @@ +5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1 docs/EXECUTION_QUEUE.md +32f4c11ebf8563f3aa500583f3979c1b38d711cc7328a428968118f0375b90b4 tests/golden/M15-03A/completed-gap-tasks.json +edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17 tests/golden/M15-03A/next-task-plan.json +da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d tests/golden/M15-03A/task-catalog.jsonl +ed591788c48c1b089decd2aa187f66728b5cc66a73c2b1c0c46c1a46ec4a0ae0 tests/golden/M15-03A/task-index.json +3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1 tests/golden/M16-GAP-00273/manifest.json +5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8 docs/status/M16-GAP-00273.md diff --git a/tests/golden/corrective/C5-003/source-hashes.json b/tests/golden/corrective/C5-003/source-hashes.json new file mode 100644 index 00000000..b88e881f --- /dev/null +++ b/tests/golden/corrective/C5-003/source-hashes.json @@ -0,0 +1,9 @@ +{ + "sourceHashes": { + "tests/golden/corrective/C5-001/cluster-report.json": "59b76bca30291b85895cc762e42afba391948fd51954f80bd4a20988f913307c", + "tests/golden/corrective/C5-002/manifest.json": "bb22c1d64b2042253e1673db8a4082580b7eb98a1a92551fa0cde51413fc6aed", + "tests/golden/M15-03A/task-catalog.jsonl": "da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d", + "docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json": "053e1551a24da08e045bb54115858a892ddd825fa59f1691a26a1ccfc1db3ca0", + "tests/golden/corrective/C5-003/inventory-migration.mjs": "73fe0a97399c2f709e563d10058921c7e3abe4f4a576787f2188362b37a00284" + } +} diff --git a/tests/golden/corrective/C6-001/command-exit-codes.json b/tests/golden/corrective/C6-001/command-exit-codes.json new file mode 100644 index 00000000..fc5ff2a1 --- /dev/null +++ b/tests/golden/corrective/C6-001/command-exit-codes.json @@ -0,0 +1,15 @@ +{ + "chromiumPilot": 0, + "chromiumPilotSecond": 0, + "determinism": 0, + "workflowGate": 0, + "typecheck": 0, + "c5_002Regression": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0, + "protectedHashCheck": 0, + "sourceHashCheck": 0 +} diff --git a/tests/golden/corrective/C6-001/handoff.json b/tests/golden/corrective/C6-001/handoff.json new file mode 100644 index 00000000..245032b0 --- /dev/null +++ b/tests/golden/corrective/C6-001/handoff.json @@ -0,0 +1,119 @@ +{ + "schemaVersion": 1, + "task": "C6-001", + "status": "done", + "gate": "G5", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C6-001", + "artifactCount": 17, + "artifacts": [ + { + "path": "tests/golden/corrective/C6-001/c5-002-regression.log", + "sha256": "fe6a8ba56a712c818c04d2582474bb626f7b39a879546120f2af383aab396424", + "bytes": 303 + }, + { + "path": "tests/golden/corrective/C6-001/check-context-governance.log", + "sha256": "7ed574f956f0255482a15f63faedc657fc7eb0fa643d282a430f27a207b5bf8d", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C6-001/check-corrective-plan.log", + "sha256": "060ab908bcf91ca9eb2720c7ba23971afb135baddadd599fd5a6449cd7bd9d20", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C6-001/check-task-context.log", + "sha256": "cf9fb3f108cb7febf3d6d17543cb1abf9356174eb34d379652dd288aca6db2d7", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C6-001/command-exit-codes.json", + "sha256": "8636bdf8232c2509c6ccfc6bf59187e8d148c161aae730edc4060bde537df620", + "bytes": 300 + }, + { + "path": "tests/golden/corrective/C6-001/determinism.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C6-001/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C6-001/protected-hash-check.log", + "sha256": "deb15d1fa1d5606bcbe760b066dfba312bd586df82228214668f149385940ac5", + "bytes": 28 + }, + { + "path": "tests/golden/corrective/C6-001/protected-hashes-after.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C6-001/protected-hashes-before.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C6-001/source-hash-check.log", + "sha256": "72365be1732352111b737ba53579406ff88435119f61291373c2c15c1b409e35", + "bytes": 23 + }, + { + "path": "tests/golden/corrective/C6-001/source-hashes.json", + "sha256": "01179ca36a0baec19ec5cd3a2f37e3ca21ab57d95748f23057721f9c5944269c", + "bytes": 618 + }, + { + "path": "tests/golden/corrective/C6-001/test-context-governance.log", + "sha256": "a5b0b3ebbe5404f1d4e8350744a623c30d652710c1500ead2ab3f5835042a5d0", + "bytes": 2577 + }, + { + "path": "tests/golden/corrective/C6-001/typecheck.log", + "sha256": "f90c14a9694ed7029129a343fa5cc8672e4a59a5fe4b34e7c3098db9c5c5bd1a", + "bytes": 76 + }, + { + "path": "tests/golden/corrective/C6-001/workflow-gate.log", + "sha256": "df9ab1a1a7b8819a9a38ae30b58b5b914a52a05fc25dfc22bde92bfed2bdb6ae", + "bytes": 54 + }, + { + "path": "tests/golden/corrective/C6-001/workflow-report.json", + "sha256": "4b164e8fc3506895d719add62b6437a57e7d86c61b2edffd61794b325c4d7292", + "bytes": 2807 + }, + { + "path": "tests/golden/corrective/C6-001/workflow-report.second.json", + "sha256": "4b164e8fc3506895d719add62b6437a57e7d86c61b2edffd61794b325c4d7292", + "bytes": 2807 + } + ], + "sourceHashes": { + "tests/golden/corrective/C5-003/manifest.json": "ef532604cae212628db18041568279382d1234fb2efe52ccea61ca9de9fed529", + "web/protocol/corrective-history-store.ts": "aaa69b0198fea9a37e947046f8db8143b75591b35af115d832a8328e258a6821", + "web/protocol/corrective-modifier-command.ts": "3b545bb823f2bccb5a16260d62b083b046a2e07bc140dd177c08878f1dfc0431", + "web/app/src/corrective-pilot-bridge.ts": "37a2196d5e6b61a2f3934df58faaf14c61d942b78fa6d55b346c5ed442d8cc74", + "web/tests/e2e/corrective-workflow-gate.spec.ts": "c924daaf859e75c84b829aa7be358e2a92c4a0aa9cc93c03a1772725d0a8dd35" + }, + "commandExitCodes": { + "chromiumPilot": 0, + "chromiumPilotSecond": 0, + "determinism": 0, + "workflowGate": 0, + "typecheck": 0, + "c5_002Regression": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0, + "protectedHashCheck": 0, + "sourceHashCheck": 0 + }, + "nextCorrectiveTask": "C6-002" +} diff --git a/tests/golden/corrective/C6-001/manifest.json b/tests/golden/corrective/C6-001/manifest.json new file mode 100644 index 00000000..245032b0 --- /dev/null +++ b/tests/golden/corrective/C6-001/manifest.json @@ -0,0 +1,119 @@ +{ + "schemaVersion": 1, + "task": "C6-001", + "status": "done", + "gate": "G5", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C6-001", + "artifactCount": 17, + "artifacts": [ + { + "path": "tests/golden/corrective/C6-001/c5-002-regression.log", + "sha256": "fe6a8ba56a712c818c04d2582474bb626f7b39a879546120f2af383aab396424", + "bytes": 303 + }, + { + "path": "tests/golden/corrective/C6-001/check-context-governance.log", + "sha256": "7ed574f956f0255482a15f63faedc657fc7eb0fa643d282a430f27a207b5bf8d", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C6-001/check-corrective-plan.log", + "sha256": "060ab908bcf91ca9eb2720c7ba23971afb135baddadd599fd5a6449cd7bd9d20", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C6-001/check-task-context.log", + "sha256": "cf9fb3f108cb7febf3d6d17543cb1abf9356174eb34d379652dd288aca6db2d7", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C6-001/command-exit-codes.json", + "sha256": "8636bdf8232c2509c6ccfc6bf59187e8d148c161aae730edc4060bde537df620", + "bytes": 300 + }, + { + "path": "tests/golden/corrective/C6-001/determinism.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C6-001/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C6-001/protected-hash-check.log", + "sha256": "deb15d1fa1d5606bcbe760b066dfba312bd586df82228214668f149385940ac5", + "bytes": 28 + }, + { + "path": "tests/golden/corrective/C6-001/protected-hashes-after.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C6-001/protected-hashes-before.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C6-001/source-hash-check.log", + "sha256": "72365be1732352111b737ba53579406ff88435119f61291373c2c15c1b409e35", + "bytes": 23 + }, + { + "path": "tests/golden/corrective/C6-001/source-hashes.json", + "sha256": "01179ca36a0baec19ec5cd3a2f37e3ca21ab57d95748f23057721f9c5944269c", + "bytes": 618 + }, + { + "path": "tests/golden/corrective/C6-001/test-context-governance.log", + "sha256": "a5b0b3ebbe5404f1d4e8350744a623c30d652710c1500ead2ab3f5835042a5d0", + "bytes": 2577 + }, + { + "path": "tests/golden/corrective/C6-001/typecheck.log", + "sha256": "f90c14a9694ed7029129a343fa5cc8672e4a59a5fe4b34e7c3098db9c5c5bd1a", + "bytes": 76 + }, + { + "path": "tests/golden/corrective/C6-001/workflow-gate.log", + "sha256": "df9ab1a1a7b8819a9a38ae30b58b5b914a52a05fc25dfc22bde92bfed2bdb6ae", + "bytes": 54 + }, + { + "path": "tests/golden/corrective/C6-001/workflow-report.json", + "sha256": "4b164e8fc3506895d719add62b6437a57e7d86c61b2edffd61794b325c4d7292", + "bytes": 2807 + }, + { + "path": "tests/golden/corrective/C6-001/workflow-report.second.json", + "sha256": "4b164e8fc3506895d719add62b6437a57e7d86c61b2edffd61794b325c4d7292", + "bytes": 2807 + } + ], + "sourceHashes": { + "tests/golden/corrective/C5-003/manifest.json": "ef532604cae212628db18041568279382d1234fb2efe52ccea61ca9de9fed529", + "web/protocol/corrective-history-store.ts": "aaa69b0198fea9a37e947046f8db8143b75591b35af115d832a8328e258a6821", + "web/protocol/corrective-modifier-command.ts": "3b545bb823f2bccb5a16260d62b083b046a2e07bc140dd177c08878f1dfc0431", + "web/app/src/corrective-pilot-bridge.ts": "37a2196d5e6b61a2f3934df58faaf14c61d942b78fa6d55b346c5ed442d8cc74", + "web/tests/e2e/corrective-workflow-gate.spec.ts": "c924daaf859e75c84b829aa7be358e2a92c4a0aa9cc93c03a1772725d0a8dd35" + }, + "commandExitCodes": { + "chromiumPilot": 0, + "chromiumPilotSecond": 0, + "determinism": 0, + "workflowGate": 0, + "typecheck": 0, + "c5_002Regression": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0, + "protectedHashCheck": 0, + "sourceHashCheck": 0 + }, + "nextCorrectiveTask": "C6-002" +} diff --git a/tests/golden/corrective/C6-001/protected-hashes-after.txt b/tests/golden/corrective/C6-001/protected-hashes-after.txt new file mode 100644 index 00000000..a0d2c8ba --- /dev/null +++ b/tests/golden/corrective/C6-001/protected-hashes-after.txt @@ -0,0 +1,7 @@ +5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1 docs/EXECUTION_QUEUE.md +32f4c11ebf8563f3aa500583f3979c1b38d711cc7328a428968118f0375b90b4 tests/golden/M15-03A/completed-gap-tasks.json +edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17 tests/golden/M15-03A/next-task-plan.json +da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d tests/golden/M15-03A/task-catalog.jsonl +ed591788c48c1b089decd2aa187f66728b5cc66a73c2b1c0c46c1a46ec4a0ae0 tests/golden/M15-03A/task-index.json +3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1 tests/golden/M16-GAP-00273/manifest.json +5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8 docs/status/M16-GAP-00273.md diff --git a/tests/golden/corrective/C6-001/protected-hashes-before.txt b/tests/golden/corrective/C6-001/protected-hashes-before.txt new file mode 100644 index 00000000..a0d2c8ba --- /dev/null +++ b/tests/golden/corrective/C6-001/protected-hashes-before.txt @@ -0,0 +1,7 @@ +5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1 docs/EXECUTION_QUEUE.md +32f4c11ebf8563f3aa500583f3979c1b38d711cc7328a428968118f0375b90b4 tests/golden/M15-03A/completed-gap-tasks.json +edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17 tests/golden/M15-03A/next-task-plan.json +da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d tests/golden/M15-03A/task-catalog.jsonl +ed591788c48c1b089decd2aa187f66728b5cc66a73c2b1c0c46c1a46ec4a0ae0 tests/golden/M15-03A/task-index.json +3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1 tests/golden/M16-GAP-00273/manifest.json +5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8 docs/status/M16-GAP-00273.md diff --git a/tests/golden/corrective/C6-001/source-hashes.json b/tests/golden/corrective/C6-001/source-hashes.json new file mode 100644 index 00000000..8417e6db --- /dev/null +++ b/tests/golden/corrective/C6-001/source-hashes.json @@ -0,0 +1,9 @@ +{ + "sourceHashes": { + "tests/golden/corrective/C5-003/manifest.json": "ef532604cae212628db18041568279382d1234fb2efe52ccea61ca9de9fed529", + "web/protocol/corrective-history-store.ts": "aaa69b0198fea9a37e947046f8db8143b75591b35af115d832a8328e258a6821", + "web/protocol/corrective-modifier-command.ts": "3b545bb823f2bccb5a16260d62b083b046a2e07bc140dd177c08878f1dfc0431", + "web/app/src/corrective-pilot-bridge.ts": "37a2196d5e6b61a2f3934df58faaf14c61d942b78fa6d55b346c5ed442d8cc74", + "web/tests/e2e/corrective-workflow-gate.spec.ts": "c924daaf859e75c84b829aa7be358e2a92c4a0aa9cc93c03a1772725d0a8dd35" + } +} diff --git a/tests/golden/corrective/C6-001/workflow-report.json b/tests/golden/corrective/C6-001/workflow-report.json new file mode 100644 index 00000000..4fa01c49 --- /dev/null +++ b/tests/golden/corrective/C6-001/workflow-report.json @@ -0,0 +1,138 @@ +{ + "schemaVersion": 1, + "task": "C6-001", + "operation": "CORRECTIVE_CHROMIUM_WORKFLOW_GATE", + "browser": "chromium", + "queueMutation": false, + "opened": { + "value": { + "modifiers": [ + { + "uuid": "modifier:workflow", + "name": "Workflow Bevel", + "type": "BEVEL", + "enabled": false, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 0, + "dirty": false + }, + "editedReceipt": { + "schemaVersion": 1, + "requestId": "chromium-workflow-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 0, + "mainRevisionBefore": 0, + "mainRevisionAfter": 1, + "mainMutation": "CHANGED", + "delta": { + "modifierUuid": "modifier:workflow", + "previousEnabled": false, + "enabled": true + }, + "persistence": { + "dirty": true + }, + "error": null + }, + "edited": { + "value": { + "modifiers": [ + { + "uuid": "modifier:workflow", + "name": "Workflow Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 1, + "dirty": true + }, + "saved": { + "value": { + "modifiers": [ + { + "uuid": "modifier:workflow", + "name": "Workflow Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 1, + "dirty": false + }, + "undone": { + "value": { + "modifiers": [ + { + "uuid": "modifier:workflow", + "name": "Workflow Bevel", + "type": "BEVEL", + "enabled": false, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 0, + "dirty": false + }, + "redone": { + "value": { + "modifiers": [ + { + "uuid": "modifier:workflow", + "name": "Workflow Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 1, + "dirty": false + }, + "reopened": { + "value": { + "modifiers": [ + { + "uuid": "modifier:workflow", + "name": "Workflow Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 1, + "dirty": false + }, + "final": { + "value": { + "modifiers": [ + { + "uuid": "modifier:workflow", + "name": "Workflow Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 1, + "dirty": false + } +} diff --git a/tests/golden/corrective/C6-001/workflow-report.second.json b/tests/golden/corrective/C6-001/workflow-report.second.json new file mode 100644 index 00000000..4fa01c49 --- /dev/null +++ b/tests/golden/corrective/C6-001/workflow-report.second.json @@ -0,0 +1,138 @@ +{ + "schemaVersion": 1, + "task": "C6-001", + "operation": "CORRECTIVE_CHROMIUM_WORKFLOW_GATE", + "browser": "chromium", + "queueMutation": false, + "opened": { + "value": { + "modifiers": [ + { + "uuid": "modifier:workflow", + "name": "Workflow Bevel", + "type": "BEVEL", + "enabled": false, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 0, + "dirty": false + }, + "editedReceipt": { + "schemaVersion": 1, + "requestId": "chromium-workflow-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 0, + "mainRevisionBefore": 0, + "mainRevisionAfter": 1, + "mainMutation": "CHANGED", + "delta": { + "modifierUuid": "modifier:workflow", + "previousEnabled": false, + "enabled": true + }, + "persistence": { + "dirty": true + }, + "error": null + }, + "edited": { + "value": { + "modifiers": [ + { + "uuid": "modifier:workflow", + "name": "Workflow Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 1, + "dirty": true + }, + "saved": { + "value": { + "modifiers": [ + { + "uuid": "modifier:workflow", + "name": "Workflow Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 1, + "dirty": false + }, + "undone": { + "value": { + "modifiers": [ + { + "uuid": "modifier:workflow", + "name": "Workflow Bevel", + "type": "BEVEL", + "enabled": false, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 0, + "dirty": false + }, + "redone": { + "value": { + "modifiers": [ + { + "uuid": "modifier:workflow", + "name": "Workflow Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 1, + "dirty": false + }, + "reopened": { + "value": { + "modifiers": [ + { + "uuid": "modifier:workflow", + "name": "Workflow Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 1, + "dirty": false + }, + "final": { + "value": { + "modifiers": [ + { + "uuid": "modifier:workflow", + "name": "Workflow Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 1, + "dirty": false + } +} diff --git a/tests/golden/corrective/C6-002/command-exit-codes.json b/tests/golden/corrective/C6-002/command-exit-codes.json new file mode 100644 index 00000000..707cb89c --- /dev/null +++ b/tests/golden/corrective/C6-002/command-exit-codes.json @@ -0,0 +1,15 @@ +{ + "chromiumPilot": 0, + "chromiumPilotSecond": 0, + "determinism": 0, + "securityGate": 0, + "typecheck": 0, + "c5_002Regression": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0, + "protectedHashCheck": 0, + "sourceHashCheck": 0 +} diff --git a/tests/golden/corrective/C6-002/handoff.json b/tests/golden/corrective/C6-002/handoff.json new file mode 100644 index 00000000..30e2b409 --- /dev/null +++ b/tests/golden/corrective/C6-002/handoff.json @@ -0,0 +1,129 @@ +{ + "schemaVersion": 1, + "task": "C6-002", + "status": "done", + "gate": "G5", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C6-002", + "artifactCount": 19, + "artifacts": [ + { + "path": "tests/golden/corrective/C6-002/c5-002-regression.log", + "sha256": "ec04bbe92b8ce7f6f7f44c3313bc9eec3424502402dd86aef9db6e505ba2c0e7", + "bytes": 303 + }, + { + "path": "tests/golden/corrective/C6-002/check-context-governance.log", + "sha256": "7ed574f956f0255482a15f63faedc657fc7eb0fa643d282a430f27a207b5bf8d", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C6-002/check-corrective-plan.log", + "sha256": "4cb9b5222b222c118890f176b29e438b9c37521cb69901be34012f6ae5ac46d4", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C6-002/check-task-context.log", + "sha256": "cf9fb3f108cb7febf3d6d17543cb1abf9356174eb34d379652dd288aca6db2d7", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C6-002/command-exit-codes.json", + "sha256": "a2316e3d0ad384a3cda0ed950f98f21b01dd6b574b5bb1abbe409da9f82e7278", + "bytes": 300 + }, + { + "path": "tests/golden/corrective/C6-002/determinism.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C6-002/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C6-002/normalized-report.json", + "sha256": "34a8701043ab9ac673949c87ac4b52a9395581a916a79d5859f06f0bee0b5f0b", + "bytes": 1337 + }, + { + "path": "tests/golden/corrective/C6-002/normalized-report.second.json", + "sha256": "34a8701043ab9ac673949c87ac4b52a9395581a916a79d5859f06f0bee0b5f0b", + "bytes": 1337 + }, + { + "path": "tests/golden/corrective/C6-002/performance-security-report.json", + "sha256": "5ac9585e97895288b0003eb18ee14af83b58209ee821bc15199ecb91fb726e06", + "bytes": 8344 + }, + { + "path": "tests/golden/corrective/C6-002/performance-security-report.second.json", + "sha256": "6b335966e54a8db8bec31a714b9b530e5602a22b28c5a06f56da6124a36abaa1", + "bytes": 8362 + }, + { + "path": "tests/golden/corrective/C6-002/protected-hash-check.log", + "sha256": "deb15d1fa1d5606bcbe760b066dfba312bd586df82228214668f149385940ac5", + "bytes": 28 + }, + { + "path": "tests/golden/corrective/C6-002/protected-hashes-after.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C6-002/protected-hashes-before.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C6-002/security-gate.log", + "sha256": "ae3ef17cddd43a75bae53ada43f014dbaf3318d2d3f6398f068d39d039126728", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C6-002/source-hash-check.log", + "sha256": "72365be1732352111b737ba53579406ff88435119f61291373c2c15c1b409e35", + "bytes": 23 + }, + { + "path": "tests/golden/corrective/C6-002/source-hashes.json", + "sha256": "78942c08ac618a39491dfba6b224aa156f5e6d66aab55f9aac8717299a8e3d06", + "bytes": 624 + }, + { + "path": "tests/golden/corrective/C6-002/test-context-governance.log", + "sha256": "666eb708a857bd4b5dc7cb7444280f1bfa6c27f940903140fe5dba61bd4f8341", + "bytes": 2579 + }, + { + "path": "tests/golden/corrective/C6-002/typecheck.log", + "sha256": "f90c14a9694ed7029129a343fa5cc8672e4a59a5fe4b34e7c3098db9c5c5bd1a", + "bytes": 76 + } + ], + "sourceHashes": { + "tests/golden/corrective/C6-001/manifest.json": "8facb49aea426cc0d0c9073a2fdd5d70086ab0700c0456f9e8cb35735da8268e", + "web/protocol/corrective-case-runner.ts": "fbfc9f72cce84acc773818993b6630d73df1ce6cab7781f172d871b42b8bf70d", + "web/protocol/corrective-resource-provider.ts": "fdaaaa8bc7e0a7220b08c5813c18e672351ae0d09168f08936bae06fcebb73a3", + "web/app/src/corrective-pilot-bridge.ts": "37a2196d5e6b61a2f3934df58faaf14c61d942b78fa6d55b346c5ed442d8cc74", + "web/tests/e2e/corrective-performance-security.spec.ts": "7580558586498d464f136655ac51f677f9eb94220070352deff0adac97549dd8" + }, + "commandExitCodes": { + "chromiumPilot": 0, + "chromiumPilotSecond": 0, + "determinism": 0, + "securityGate": 0, + "typecheck": 0, + "c5_002Regression": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0, + "protectedHashCheck": 0, + "sourceHashCheck": 0 + }, + "nextCorrectiveTask": "C6-003" +} diff --git a/tests/golden/corrective/C6-002/manifest.json b/tests/golden/corrective/C6-002/manifest.json new file mode 100644 index 00000000..30e2b409 --- /dev/null +++ b/tests/golden/corrective/C6-002/manifest.json @@ -0,0 +1,129 @@ +{ + "schemaVersion": 1, + "task": "C6-002", + "status": "done", + "gate": "G5", + "queueMutation": false, + "evidenceRoot": "tests/golden/corrective/C6-002", + "artifactCount": 19, + "artifacts": [ + { + "path": "tests/golden/corrective/C6-002/c5-002-regression.log", + "sha256": "ec04bbe92b8ce7f6f7f44c3313bc9eec3424502402dd86aef9db6e505ba2c0e7", + "bytes": 303 + }, + { + "path": "tests/golden/corrective/C6-002/check-context-governance.log", + "sha256": "7ed574f956f0255482a15f63faedc657fc7eb0fa643d282a430f27a207b5bf8d", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C6-002/check-corrective-plan.log", + "sha256": "4cb9b5222b222c118890f176b29e438b9c37521cb69901be34012f6ae5ac46d4", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C6-002/check-task-context.log", + "sha256": "cf9fb3f108cb7febf3d6d17543cb1abf9356174eb34d379652dd288aca6db2d7", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C6-002/command-exit-codes.json", + "sha256": "a2316e3d0ad384a3cda0ed950f98f21b01dd6b574b5bb1abbe409da9f82e7278", + "bytes": 300 + }, + { + "path": "tests/golden/corrective/C6-002/determinism.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C6-002/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C6-002/normalized-report.json", + "sha256": "34a8701043ab9ac673949c87ac4b52a9395581a916a79d5859f06f0bee0b5f0b", + "bytes": 1337 + }, + { + "path": "tests/golden/corrective/C6-002/normalized-report.second.json", + "sha256": "34a8701043ab9ac673949c87ac4b52a9395581a916a79d5859f06f0bee0b5f0b", + "bytes": 1337 + }, + { + "path": "tests/golden/corrective/C6-002/performance-security-report.json", + "sha256": "5ac9585e97895288b0003eb18ee14af83b58209ee821bc15199ecb91fb726e06", + "bytes": 8344 + }, + { + "path": "tests/golden/corrective/C6-002/performance-security-report.second.json", + "sha256": "6b335966e54a8db8bec31a714b9b530e5602a22b28c5a06f56da6124a36abaa1", + "bytes": 8362 + }, + { + "path": "tests/golden/corrective/C6-002/protected-hash-check.log", + "sha256": "deb15d1fa1d5606bcbe760b066dfba312bd586df82228214668f149385940ac5", + "bytes": 28 + }, + { + "path": "tests/golden/corrective/C6-002/protected-hashes-after.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C6-002/protected-hashes-before.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C6-002/security-gate.log", + "sha256": "ae3ef17cddd43a75bae53ada43f014dbaf3318d2d3f6398f068d39d039126728", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C6-002/source-hash-check.log", + "sha256": "72365be1732352111b737ba53579406ff88435119f61291373c2c15c1b409e35", + "bytes": 23 + }, + { + "path": "tests/golden/corrective/C6-002/source-hashes.json", + "sha256": "78942c08ac618a39491dfba6b224aa156f5e6d66aab55f9aac8717299a8e3d06", + "bytes": 624 + }, + { + "path": "tests/golden/corrective/C6-002/test-context-governance.log", + "sha256": "666eb708a857bd4b5dc7cb7444280f1bfa6c27f940903140fe5dba61bd4f8341", + "bytes": 2579 + }, + { + "path": "tests/golden/corrective/C6-002/typecheck.log", + "sha256": "f90c14a9694ed7029129a343fa5cc8672e4a59a5fe4b34e7c3098db9c5c5bd1a", + "bytes": 76 + } + ], + "sourceHashes": { + "tests/golden/corrective/C6-001/manifest.json": "8facb49aea426cc0d0c9073a2fdd5d70086ab0700c0456f9e8cb35735da8268e", + "web/protocol/corrective-case-runner.ts": "fbfc9f72cce84acc773818993b6630d73df1ce6cab7781f172d871b42b8bf70d", + "web/protocol/corrective-resource-provider.ts": "fdaaaa8bc7e0a7220b08c5813c18e672351ae0d09168f08936bae06fcebb73a3", + "web/app/src/corrective-pilot-bridge.ts": "37a2196d5e6b61a2f3934df58faaf14c61d942b78fa6d55b346c5ed442d8cc74", + "web/tests/e2e/corrective-performance-security.spec.ts": "7580558586498d464f136655ac51f677f9eb94220070352deff0adac97549dd8" + }, + "commandExitCodes": { + "chromiumPilot": 0, + "chromiumPilotSecond": 0, + "determinism": 0, + "securityGate": 0, + "typecheck": 0, + "c5_002Regression": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0, + "protectedHashCheck": 0, + "sourceHashCheck": 0 + }, + "nextCorrectiveTask": "C6-003" +} diff --git a/tests/golden/corrective/C6-002/normalized-report.json b/tests/golden/corrective/C6-002/normalized-report.json new file mode 100644 index 00000000..3e469e91 --- /dev/null +++ b/tests/golden/corrective/C6-002/normalized-report.json @@ -0,0 +1,61 @@ +{ + "schemaVersion": 1, + "task": "C6-002", + "operation": "CORRECTIVE_PERFORMANCE_SECURITY_CHROMIUM", + "browser": "chromium", + "queueMutation": false, + "sampleCount": 50, + "budgets": { + "p95Ms": 100, + "maxMs": 250, + "maxSamples": 50 + }, + "withinBudget": true, + "security": { + "first": "FINISHED", + "replay": "REVISION_CONFLICT", + "malformed": "COMMAND_MALFORMED", + "path": "UNCHANGED", + "snapshots": { + "replay": { + "value": { + "modifiers": [ + { + "uuid": "modifier:security", + "name": "Security Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 1, + "dirty": true + }, + "malformed": { + "value": { + "modifiers": [ + { + "uuid": "modifier:security", + "name": "Security Bevel", + "type": "BEVEL", + "enabled": false, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 0, + "dirty": false + }, + "path": { + "value": { + "entries": [] + }, + "revision": 0, + "dirty": false + } + } + } +} diff --git a/tests/golden/corrective/C6-002/normalized-report.second.json b/tests/golden/corrective/C6-002/normalized-report.second.json new file mode 100644 index 00000000..3e469e91 --- /dev/null +++ b/tests/golden/corrective/C6-002/normalized-report.second.json @@ -0,0 +1,61 @@ +{ + "schemaVersion": 1, + "task": "C6-002", + "operation": "CORRECTIVE_PERFORMANCE_SECURITY_CHROMIUM", + "browser": "chromium", + "queueMutation": false, + "sampleCount": 50, + "budgets": { + "p95Ms": 100, + "maxMs": 250, + "maxSamples": 50 + }, + "withinBudget": true, + "security": { + "first": "FINISHED", + "replay": "REVISION_CONFLICT", + "malformed": "COMMAND_MALFORMED", + "path": "UNCHANGED", + "snapshots": { + "replay": { + "value": { + "modifiers": [ + { + "uuid": "modifier:security", + "name": "Security Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 1, + "dirty": true + }, + "malformed": { + "value": { + "modifiers": [ + { + "uuid": "modifier:security", + "name": "Security Bevel", + "type": "BEVEL", + "enabled": false, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 0, + "dirty": false + }, + "path": { + "value": { + "entries": [] + }, + "revision": 0, + "dirty": false + } + } + } +} diff --git a/tests/golden/corrective/C6-002/performance-security-report.json b/tests/golden/corrective/C6-002/performance-security-report.json new file mode 100644 index 00000000..19f03f20 --- /dev/null +++ b/tests/golden/corrective/C6-002/performance-security-report.json @@ -0,0 +1,381 @@ +{ + "schemaVersion": 1, + "task": "C6-002", + "operation": "CORRECTIVE_PERFORMANCE_SECURITY_CHROMIUM", + "browser": "chromium", + "queueMutation": false, + "sampleCount": 50, + "latencyMs": { + "p50": 0.009999990463256836, + "p95": 0.06999993324279785, + "max": 0.7349998950958252 + }, + "samples": [ + { + "durationMs": 0.7349998950958252, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.06999993324279785, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.03500008583068848, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.02499985694885254, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.04499983787536621, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.02500009536743164, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.02499985694885254, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.014999866485595703, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.019999980926513672, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.04500007629394531, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.015000104904174805, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.009999990463256836, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.015000104904174805, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.005000114440917969, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.009999990463256836, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.009999990463256836, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.009999990463256836, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.005000114440917969, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.009999990463256836, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.019999980926513672, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.014999866485595703, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.015000104904174805, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.009999990463256836, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.004999876022338867, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.005000114440917969, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.009999990463256836, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.009999990463256836, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.004999876022338867, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.004999876022338867, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.005000114440917969, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.005000114440917969, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.009999990463256836, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.009999990463256836, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.005000114440917969, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.004999876022338867, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.004999876022338867, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.019999980926513672, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.005000114440917969, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.009999990463256836, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.004999876022338867, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.009999990463256836, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.7250001430511475, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.009999990463256836, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.004999876022338867, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.004999876022338867, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.005000114440917969, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.009999990463256836, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.009999990463256836, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.004999876022338867, + "status": "FINISHED", + "revision": 1 + } + ], + "security": { + "replay": { + "schemaVersion": 1, + "requestId": "security-modifier-001", + "status": "BLOCKED", + "code": "REVISION_CONFLICT", + "baseRevision": 0, + "mainRevisionBefore": 1, + "mainRevisionAfter": 1, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "REVISION_CONFLICT", + "message": "base revision does not match current Main" + } + }, + "first": { + "schemaVersion": 1, + "requestId": "security-modifier-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 0, + "mainRevisionBefore": 0, + "mainRevisionAfter": 1, + "mainMutation": "CHANGED", + "delta": { + "modifierUuid": "modifier:security", + "previousEnabled": false, + "enabled": true + }, + "persistence": { + "dirty": true + }, + "error": null + }, + "malformed": { + "schemaVersion": 1, + "requestId": "security-modifier-001", + "status": "MALFORMED", + "code": "COMMAND_MALFORMED", + "baseRevision": 0, + "mainRevisionBefore": 0, + "mainRevisionAfter": 0, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_MALFORMED", + "message": "COMMAND_MALFORMED: modifier payload must contain only modifierUuid and enabled" + } + }, + "path": { + "schemaVersion": 1, + "requestId": "security-path-001", + "status": "UNSUPPORTED", + "code": "COMMAND_UNSUPPORTED", + "baseRevision": 0, + "mainRevisionBefore": 0, + "mainRevisionAfter": 0, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_UNSUPPORTED", + "message": "CONTEXT_INVALID: request does not match active library context" + } + }, + "snapshots": { + "replay": { + "value": { + "modifiers": [ + { + "uuid": "modifier:security", + "name": "Security Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 1, + "dirty": true + }, + "malformed": { + "value": { + "modifiers": [ + { + "uuid": "modifier:security", + "name": "Security Bevel", + "type": "BEVEL", + "enabled": false, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 0, + "dirty": false + }, + "path": { + "value": { + "entries": [] + }, + "revision": 0, + "dirty": false + } + } + }, + "budgets": { + "p95Ms": 100, + "maxMs": 250, + "maxSamples": 50 + }, + "withinBudget": true +} diff --git a/tests/golden/corrective/C6-002/performance-security-report.second.json b/tests/golden/corrective/C6-002/performance-security-report.second.json new file mode 100644 index 00000000..29adfb9b --- /dev/null +++ b/tests/golden/corrective/C6-002/performance-security-report.second.json @@ -0,0 +1,381 @@ +{ + "schemaVersion": 1, + "task": "C6-002", + "operation": "CORRECTIVE_PERFORMANCE_SECURITY_CHROMIUM", + "browser": "chromium", + "queueMutation": false, + "sampleCount": 50, + "latencyMs": { + "p50": 0.019999980926513672, + "p95": 0.13499999046325684, + "max": 1.3250000476837158 + }, + "samples": [ + { + "durationMs": 1.3250000476837158, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.13499999046325684, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.06999993324279785, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.059999942779541016, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.09500002861022949, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.06999993324279785, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.059999942779541016, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.039999961853027344, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.06499981880187988, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.08000016212463379, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.039999961853027344, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.019999980926513672, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.019999980926513672, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.015000104904174805, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.014999866485595703, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.014999866485595703, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.019999980926513672, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.015000104904174805, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.019999980926513672, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.019999980926513672, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.019999980926513672, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.019999980926513672, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.015000104904174805, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.019999980926513672, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.014999866485595703, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.009999990463256836, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.03000020980834961, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.014999866485595703, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.02500009536743164, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.019999980926513672, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.014999866485595703, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.019999980926513672, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.015000104904174805, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.019999980926513672, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.014999866485595703, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.019999980926513672, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.039999961853027344, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.009999990463256836, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.015000104904174805, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.7349998950958252, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.015000104904174805, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.014999866485595703, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.015000104904174805, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.009999990463256836, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.014999866485595703, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.015000104904174805, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.019999980926513672, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.009999990463256836, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.009999990463256836, + "status": "FINISHED", + "revision": 1 + }, + { + "durationMs": 0.010000228881835938, + "status": "FINISHED", + "revision": 1 + } + ], + "security": { + "replay": { + "schemaVersion": 1, + "requestId": "security-modifier-001", + "status": "BLOCKED", + "code": "REVISION_CONFLICT", + "baseRevision": 0, + "mainRevisionBefore": 1, + "mainRevisionAfter": 1, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "REVISION_CONFLICT", + "message": "base revision does not match current Main" + } + }, + "first": { + "schemaVersion": 1, + "requestId": "security-modifier-001", + "status": "FINISHED", + "code": "OK", + "baseRevision": 0, + "mainRevisionBefore": 0, + "mainRevisionAfter": 1, + "mainMutation": "CHANGED", + "delta": { + "modifierUuid": "modifier:security", + "previousEnabled": false, + "enabled": true + }, + "persistence": { + "dirty": true + }, + "error": null + }, + "malformed": { + "schemaVersion": 1, + "requestId": "security-modifier-001", + "status": "MALFORMED", + "code": "COMMAND_MALFORMED", + "baseRevision": 0, + "mainRevisionBefore": 0, + "mainRevisionAfter": 0, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_MALFORMED", + "message": "COMMAND_MALFORMED: modifier payload must contain only modifierUuid and enabled" + } + }, + "path": { + "schemaVersion": 1, + "requestId": "security-path-001", + "status": "UNSUPPORTED", + "code": "COMMAND_UNSUPPORTED", + "baseRevision": 0, + "mainRevisionBefore": 0, + "mainRevisionAfter": 0, + "mainMutation": "UNCHANGED", + "delta": null, + "persistence": null, + "error": { + "code": "COMMAND_UNSUPPORTED", + "message": "CONTEXT_INVALID: request does not match active library context" + } + }, + "snapshots": { + "replay": { + "value": { + "modifiers": [ + { + "uuid": "modifier:security", + "name": "Security Bevel", + "type": "BEVEL", + "enabled": true, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 1, + "dirty": true + }, + "malformed": { + "value": { + "modifiers": [ + { + "uuid": "modifier:security", + "name": "Security Bevel", + "type": "BEVEL", + "enabled": false, + "showViewport": true, + "showRender": true + } + ] + }, + "revision": 0, + "dirty": false + }, + "path": { + "value": { + "entries": [] + }, + "revision": 0, + "dirty": false + } + } + }, + "budgets": { + "p95Ms": 100, + "maxMs": 250, + "maxSamples": 50 + }, + "withinBudget": true +} diff --git a/tests/golden/corrective/C6-002/protected-hashes-after.txt b/tests/golden/corrective/C6-002/protected-hashes-after.txt new file mode 100644 index 00000000..a0d2c8ba --- /dev/null +++ b/tests/golden/corrective/C6-002/protected-hashes-after.txt @@ -0,0 +1,7 @@ +5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1 docs/EXECUTION_QUEUE.md +32f4c11ebf8563f3aa500583f3979c1b38d711cc7328a428968118f0375b90b4 tests/golden/M15-03A/completed-gap-tasks.json +edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17 tests/golden/M15-03A/next-task-plan.json +da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d tests/golden/M15-03A/task-catalog.jsonl +ed591788c48c1b089decd2aa187f66728b5cc66a73c2b1c0c46c1a46ec4a0ae0 tests/golden/M15-03A/task-index.json +3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1 tests/golden/M16-GAP-00273/manifest.json +5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8 docs/status/M16-GAP-00273.md diff --git a/tests/golden/corrective/C6-002/protected-hashes-before.txt b/tests/golden/corrective/C6-002/protected-hashes-before.txt new file mode 100644 index 00000000..a0d2c8ba --- /dev/null +++ b/tests/golden/corrective/C6-002/protected-hashes-before.txt @@ -0,0 +1,7 @@ +5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1 docs/EXECUTION_QUEUE.md +32f4c11ebf8563f3aa500583f3979c1b38d711cc7328a428968118f0375b90b4 tests/golden/M15-03A/completed-gap-tasks.json +edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17 tests/golden/M15-03A/next-task-plan.json +da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d tests/golden/M15-03A/task-catalog.jsonl +ed591788c48c1b089decd2aa187f66728b5cc66a73c2b1c0c46c1a46ec4a0ae0 tests/golden/M15-03A/task-index.json +3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1 tests/golden/M16-GAP-00273/manifest.json +5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8 docs/status/M16-GAP-00273.md diff --git a/tests/golden/corrective/C6-002/source-hashes.json b/tests/golden/corrective/C6-002/source-hashes.json new file mode 100644 index 00000000..f299491f --- /dev/null +++ b/tests/golden/corrective/C6-002/source-hashes.json @@ -0,0 +1,9 @@ +{ + "sourceHashes": { + "tests/golden/corrective/C6-001/manifest.json": "8facb49aea426cc0d0c9073a2fdd5d70086ab0700c0456f9e8cb35735da8268e", + "web/protocol/corrective-case-runner.ts": "fbfc9f72cce84acc773818993b6630d73df1ce6cab7781f172d871b42b8bf70d", + "web/protocol/corrective-resource-provider.ts": "fdaaaa8bc7e0a7220b08c5813c18e672351ae0d09168f08936bae06fcebb73a3", + "web/app/src/corrective-pilot-bridge.ts": "37a2196d5e6b61a2f3934df58faaf14c61d942b78fa6d55b346c5ed442d8cc74", + "web/tests/e2e/corrective-performance-security.spec.ts": "7580558586498d464f136655ac51f677f9eb94220070352deff0adac97549dd8" + } +} diff --git a/tests/golden/corrective/C6-003/command-exit-codes.json b/tests/golden/corrective/C6-003/command-exit-codes.json new file mode 100644 index 00000000..38af2c89 --- /dev/null +++ b/tests/golden/corrective/C6-003/command-exit-codes.json @@ -0,0 +1,15 @@ +{ + "dryRun": 0, + "determinism": 0, + "dryRunGate": 0, + "writePreviewByteMatch": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0, + "protectedHashCheck": 0, + "sourceHashCheck": 0, + "queueWrite": 0 +} diff --git a/tests/golden/corrective/C6-003/handoff.json b/tests/golden/corrective/C6-003/handoff.json new file mode 100644 index 00000000..b935497e --- /dev/null +++ b/tests/golden/corrective/C6-003/handoff.json @@ -0,0 +1,167 @@ +{ + "schemaVersion": 1, + "task": "C6-003", + "status": "in_progress", + "gate": "G5", + "queueMutation": true, + "evidenceRoot": "tests/golden/corrective/C6-003", + "artifactCount": 23, + "artifacts": [ + { + "path": "tests/golden/corrective/C6-003/check-context-governance.log", + "sha256": "7ed574f956f0255482a15f63faedc657fc7eb0fa643d282a430f27a207b5bf8d", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C6-003/check-corrective-plan.log", + "sha256": "f15d53bbed18afaa23fed39fcace2b67f998fe8f2b549ff72d311f4fcc2b2657", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C6-003/check-task-context.log", + "sha256": "cf9fb3f108cb7febf3d6d17543cb1abf9356174eb34d379652dd288aca6db2d7", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C6-003/command-exit-codes.json", + "sha256": "25ec89fe763742f56a0c62e1fd1d483b7a4a5ab598877ddf2bf51b723d866f2f", + "bytes": 287 + }, + { + "path": "tests/golden/corrective/C6-003/determinism.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C6-003/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C6-003/dry-run-gate.log", + "sha256": "b850a06ccf6f089e5b9f03a4353f369694d62b65f1e9ceeae6ebf2087e989252", + "bytes": 98 + }, + { + "path": "tests/golden/corrective/C6-003/owner-review.json", + "sha256": "7cfa5a1927b8e161fb785d760ba86d5061839ce350ed173dc382190817711b1a", + "bytes": 1627 + }, + { + "path": "tests/golden/corrective/C6-003/protected-hash-check.log", + "sha256": "9289fce4a33b9a845fb4e064b86eaf5b69b15cdeb0077f6bbf9fe52ebf5cd9cd", + "bytes": 102 + }, + { + "path": "tests/golden/corrective/C6-003/protected-hashes-after.txt", + "sha256": "bc92d97f05b8cc6e5d4bae7c958b3aa5ca35662aeeb7d6e89a7996016d26d4ff", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C6-003/protected-hashes-before.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C6-003/queue-after.md", + "sha256": "9517e6538e0915529cd8206f7a821dd89dbd869c5523d916358164a04216040b", + "bytes": 2495 + }, + { + "path": "tests/golden/corrective/C6-003/queue-before.md", + "sha256": "5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1", + "bytes": 2495 + }, + { + "path": "tests/golden/corrective/C6-003/queue-reactivation-dry-run.json", + "sha256": "535d3c6a31502cba4ab4edaeb99750f7f96fc04480dcbf963ee25313b8abfca3", + "bytes": 3813 + }, + { + "path": "tests/golden/corrective/C6-003/queue-reactivation-dry-run.mjs", + "sha256": "0bd1504e02880910a4b09f4b9767eafe513dd9b0cace02f55e71cb718b5a319d", + "bytes": 2725 + }, + { + "path": "tests/golden/corrective/C6-003/queue-reactivation-dry-run.second.json", + "sha256": "535d3c6a31502cba4ab4edaeb99750f7f96fc04480dcbf963ee25313b8abfca3", + "bytes": 3813 + }, + { + "path": "tests/golden/corrective/C6-003/queue-reactivation-resolution.json", + "sha256": "5b1f36bca6781d3218c2f8bd293a58ad1991399dce927e856c40ef7ec6a736b0", + "bytes": 487 + }, + { + "path": "tests/golden/corrective/C6-003/queue-reactivation-write-preview.json", + "sha256": "535d3c6a31502cba4ab4edaeb99750f7f96fc04480dcbf963ee25313b8abfca3", + "bytes": 3813 + }, + { + "path": "tests/golden/corrective/C6-003/queue-reactivation-write-receipt.json", + "sha256": "dd9a9ed9e50b301c57c54f1c05557e8c23fdf471c6e63fc2a030f465cb36cca8", + "bytes": 1484 + }, + { + "path": "tests/golden/corrective/C6-003/source-hash-check.log", + "sha256": "a477a9dbac25d6ff85366505111eb60970903f0e6d9b8e2ed698adc4a250e5f3", + "bytes": 23 + }, + { + "path": "tests/golden/corrective/C6-003/source-hashes.json", + "sha256": "63a8cd536b33c0754ec4b42902683bd28391d114ab65770a3fa1955a0f74c839", + "bytes": 1127 + }, + { + "path": "tests/golden/corrective/C6-003/test-context-governance.log", + "sha256": "4b80219ebc97dc314d263a6296a293ab090d5b0650490820b20161beb59c64c0", + "bytes": 2580 + }, + { + "path": "tests/golden/corrective/C6-003/typecheck.log", + "sha256": "f90c14a9694ed7029129a343fa5cc8672e4a59a5fe4b34e7c3098db9c5c5bd1a", + "bytes": 76 + } + ], + "inputDigest": "c6-003-owner-approved-queue-reactivation-m16-gap-00276-to-00277", + "sourceHashes": { + "tests/golden/corrective/C5-003/inventory-report.json": "853486cc9fd2e3a0e7d5efdd974aa901675df67176fae521054a419b465298a5", + "tests/golden/corrective/C5-003/capability-manifest.json": "c39e4f880588bc6008ce35b6648f6cb89df4f50dd6e065af7ac8d55d782417c1", + "tests/golden/corrective/C5-003/legacy-evidence-classification.json": "36c36ff6d60b42e40a2432227425770d0badcafd04fbd7ba73266a9f1e8b1555", + "tests/golden/corrective/C6-002/manifest.json": "ae3e8ae0d369b659119b03e8ab00c6389beb2e0f37cd1bd36c3dd1d88510a5f3", + "docs/EXECUTION_QUEUE.md": "5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1", + "tests/golden/M16-GAP-00275/manifest.json": "c0db50bd8d2a3cbe9fd609714d1cb3dce75e1942855666ebcf5f12446e414949", + "tests/golden/corrective/C6-003/queue-reactivation-dry-run.mjs": "0bd1504e02880910a4b09f4b9767eafe513dd9b0cace02f55e71cb718b5a319d", + "tools/web/reactivate-legacy-queue.mjs": "e60e5e77be3a5c0f5fbe8e835a8e287d79dd1e4733213efca811e65d90950acb", + "tools/web/write-corrective-handoff.mjs": "63b8b5a324b065c969db8c4184b00b35218a4cc7d5e25ff747e95e0a9b731dba" + }, + "commandExitCodes": { + "dryRun": 0, + "determinism": 0, + "dryRunGate": 0, + "writePreviewByteMatch": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0, + "protectedHashCheck": 0, + "sourceHashCheck": 0, + "queueWrite": 0 + }, + "resolution": { + "status": "APPROVED", + "writeOutcome": "QUEUE_UPDATED", + "authorization": { + "ownerReview": "tests/golden/corrective/C6-003/owner-review.json", + "approved": true + }, + "candidate": { + "legacyTask": "M16-GAP-00276", + "successor": "M16-GAP-00277", + "parentManifest": "tests/golden/M16-GAP-00276/manifest.json" + } + }, + "nextCorrectiveTask": "C6-003" +} diff --git a/tests/golden/corrective/C6-003/manifest.json b/tests/golden/corrective/C6-003/manifest.json new file mode 100644 index 00000000..b935497e --- /dev/null +++ b/tests/golden/corrective/C6-003/manifest.json @@ -0,0 +1,167 @@ +{ + "schemaVersion": 1, + "task": "C6-003", + "status": "in_progress", + "gate": "G5", + "queueMutation": true, + "evidenceRoot": "tests/golden/corrective/C6-003", + "artifactCount": 23, + "artifacts": [ + { + "path": "tests/golden/corrective/C6-003/check-context-governance.log", + "sha256": "7ed574f956f0255482a15f63faedc657fc7eb0fa643d282a430f27a207b5bf8d", + "bytes": 130 + }, + { + "path": "tests/golden/corrective/C6-003/check-corrective-plan.log", + "sha256": "f15d53bbed18afaa23fed39fcace2b67f998fe8f2b549ff72d311f4fcc2b2657", + "bytes": 106 + }, + { + "path": "tests/golden/corrective/C6-003/check-task-context.log", + "sha256": "cf9fb3f108cb7febf3d6d17543cb1abf9356174eb34d379652dd288aca6db2d7", + "bytes": 159 + }, + { + "path": "tests/golden/corrective/C6-003/command-exit-codes.json", + "sha256": "25ec89fe763742f56a0c62e1fd1d483b7a4a5ab598877ddf2bf51b723d866f2f", + "bytes": 287 + }, + { + "path": "tests/golden/corrective/C6-003/determinism.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C6-003/diff-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "bytes": 0 + }, + { + "path": "tests/golden/corrective/C6-003/dry-run-gate.log", + "sha256": "b850a06ccf6f089e5b9f03a4353f369694d62b65f1e9ceeae6ebf2087e989252", + "bytes": 98 + }, + { + "path": "tests/golden/corrective/C6-003/owner-review.json", + "sha256": "7cfa5a1927b8e161fb785d760ba86d5061839ce350ed173dc382190817711b1a", + "bytes": 1627 + }, + { + "path": "tests/golden/corrective/C6-003/protected-hash-check.log", + "sha256": "9289fce4a33b9a845fb4e064b86eaf5b69b15cdeb0077f6bbf9fe52ebf5cd9cd", + "bytes": 102 + }, + { + "path": "tests/golden/corrective/C6-003/protected-hashes-after.txt", + "sha256": "bc92d97f05b8cc6e5d4bae7c958b3aa5ca35662aeeb7d6e89a7996016d26d4ff", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C6-003/protected-hashes-before.txt", + "sha256": "7ffd5278d9be573cdc43ed64696872d00990f8bad8134991fa41d6137972a28e", + "bytes": 720 + }, + { + "path": "tests/golden/corrective/C6-003/queue-after.md", + "sha256": "9517e6538e0915529cd8206f7a821dd89dbd869c5523d916358164a04216040b", + "bytes": 2495 + }, + { + "path": "tests/golden/corrective/C6-003/queue-before.md", + "sha256": "5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1", + "bytes": 2495 + }, + { + "path": "tests/golden/corrective/C6-003/queue-reactivation-dry-run.json", + "sha256": "535d3c6a31502cba4ab4edaeb99750f7f96fc04480dcbf963ee25313b8abfca3", + "bytes": 3813 + }, + { + "path": "tests/golden/corrective/C6-003/queue-reactivation-dry-run.mjs", + "sha256": "0bd1504e02880910a4b09f4b9767eafe513dd9b0cace02f55e71cb718b5a319d", + "bytes": 2725 + }, + { + "path": "tests/golden/corrective/C6-003/queue-reactivation-dry-run.second.json", + "sha256": "535d3c6a31502cba4ab4edaeb99750f7f96fc04480dcbf963ee25313b8abfca3", + "bytes": 3813 + }, + { + "path": "tests/golden/corrective/C6-003/queue-reactivation-resolution.json", + "sha256": "5b1f36bca6781d3218c2f8bd293a58ad1991399dce927e856c40ef7ec6a736b0", + "bytes": 487 + }, + { + "path": "tests/golden/corrective/C6-003/queue-reactivation-write-preview.json", + "sha256": "535d3c6a31502cba4ab4edaeb99750f7f96fc04480dcbf963ee25313b8abfca3", + "bytes": 3813 + }, + { + "path": "tests/golden/corrective/C6-003/queue-reactivation-write-receipt.json", + "sha256": "dd9a9ed9e50b301c57c54f1c05557e8c23fdf471c6e63fc2a030f465cb36cca8", + "bytes": 1484 + }, + { + "path": "tests/golden/corrective/C6-003/source-hash-check.log", + "sha256": "a477a9dbac25d6ff85366505111eb60970903f0e6d9b8e2ed698adc4a250e5f3", + "bytes": 23 + }, + { + "path": "tests/golden/corrective/C6-003/source-hashes.json", + "sha256": "63a8cd536b33c0754ec4b42902683bd28391d114ab65770a3fa1955a0f74c839", + "bytes": 1127 + }, + { + "path": "tests/golden/corrective/C6-003/test-context-governance.log", + "sha256": "4b80219ebc97dc314d263a6296a293ab090d5b0650490820b20161beb59c64c0", + "bytes": 2580 + }, + { + "path": "tests/golden/corrective/C6-003/typecheck.log", + "sha256": "f90c14a9694ed7029129a343fa5cc8672e4a59a5fe4b34e7c3098db9c5c5bd1a", + "bytes": 76 + } + ], + "inputDigest": "c6-003-owner-approved-queue-reactivation-m16-gap-00276-to-00277", + "sourceHashes": { + "tests/golden/corrective/C5-003/inventory-report.json": "853486cc9fd2e3a0e7d5efdd974aa901675df67176fae521054a419b465298a5", + "tests/golden/corrective/C5-003/capability-manifest.json": "c39e4f880588bc6008ce35b6648f6cb89df4f50dd6e065af7ac8d55d782417c1", + "tests/golden/corrective/C5-003/legacy-evidence-classification.json": "36c36ff6d60b42e40a2432227425770d0badcafd04fbd7ba73266a9f1e8b1555", + "tests/golden/corrective/C6-002/manifest.json": "ae3e8ae0d369b659119b03e8ab00c6389beb2e0f37cd1bd36c3dd1d88510a5f3", + "docs/EXECUTION_QUEUE.md": "5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1", + "tests/golden/M16-GAP-00275/manifest.json": "c0db50bd8d2a3cbe9fd609714d1cb3dce75e1942855666ebcf5f12446e414949", + "tests/golden/corrective/C6-003/queue-reactivation-dry-run.mjs": "0bd1504e02880910a4b09f4b9767eafe513dd9b0cace02f55e71cb718b5a319d", + "tools/web/reactivate-legacy-queue.mjs": "e60e5e77be3a5c0f5fbe8e835a8e287d79dd1e4733213efca811e65d90950acb", + "tools/web/write-corrective-handoff.mjs": "63b8b5a324b065c969db8c4184b00b35218a4cc7d5e25ff747e95e0a9b731dba" + }, + "commandExitCodes": { + "dryRun": 0, + "determinism": 0, + "dryRunGate": 0, + "writePreviewByteMatch": 0, + "typecheck": 0, + "contextGovernanceTest": 0, + "contextGovernance": 0, + "correctivePlan": 0, + "taskContext": 0, + "diff": 0, + "protectedHashCheck": 0, + "sourceHashCheck": 0, + "queueWrite": 0 + }, + "resolution": { + "status": "APPROVED", + "writeOutcome": "QUEUE_UPDATED", + "authorization": { + "ownerReview": "tests/golden/corrective/C6-003/owner-review.json", + "approved": true + }, + "candidate": { + "legacyTask": "M16-GAP-00276", + "successor": "M16-GAP-00277", + "parentManifest": "tests/golden/M16-GAP-00276/manifest.json" + } + }, + "nextCorrectiveTask": "C6-003" +} diff --git a/tests/golden/corrective/C6-003/owner-review.json b/tests/golden/corrective/C6-003/owner-review.json new file mode 100644 index 00000000..96fb87b5 --- /dev/null +++ b/tests/golden/corrective/C6-003/owner-review.json @@ -0,0 +1,42 @@ +{ + "schemaVersion": 1, + "task": "C6-003", + "operation": "CORRECTIVE_QUEUE_REACTIVATION_OWNER_REVIEW", + "status": "APPROVED", + "authorization": { + "approved": true, + "source": "explicit user authorization in the current execution session", + "reviewer": "user-authorized-session", + "approvedAt": "2026-08-23 America/New_York", + "scope": [ + "complete M16-GAP-00276 from its closed evidence", + "reactivate the protected legacy queue to M16-GAP-00277", + "run the post-handoff governance and hash gates" + ] + }, + "reviewedEvidence": { + "dryRun": { + "path": "tests/golden/corrective/C6-003/queue-reactivation-dry-run.json", + "sha256": "535d3c6a31502cba4ab4edaeb99750f7f96fc04480dcbf963ee25313b8abfca3" + }, + "writePreview": { + "path": "tests/golden/corrective/C6-003/queue-reactivation-write-preview.json", + "sha256": "535d3c6a31502cba4ab4edaeb99750f7f96fc04480dcbf963ee25313b8abfca3" + }, + "protectedHashes": { + "docs/EXECUTION_QUEUE.md": "5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1", + "tests/golden/M16-GAP-00275/manifest.json": "c0db50bd8d2a3cbe9fd609714d1cb3dce75e1942855666ebcf5f12446e414949" + } + }, + "decision": { + "dryRunWritePreviewByteMatch": true, + "primaryMappingsUnique": true, + "protectedHashesReviewed": true, + "allowQueueMutation": true, + "targetTask": "M16-GAP-00277" + }, + "rollback": { + "requiredReceipt": "tests/golden/corrective/C6-003/queue-reactivation-write-receipt.json", + "action": "restore the recorded queue-before bytes and parent pointer if any post-write gate fails" + } +} diff --git a/tests/golden/corrective/C6-003/protected-hashes-after.txt b/tests/golden/corrective/C6-003/protected-hashes-after.txt new file mode 100644 index 00000000..3cbc5e82 --- /dev/null +++ b/tests/golden/corrective/C6-003/protected-hashes-after.txt @@ -0,0 +1,7 @@ +9517e6538e0915529cd8206f7a821dd89dbd869c5523d916358164a04216040b docs/EXECUTION_QUEUE.md +2686cab58459efdbd18451f838344d706208624421f1b424e0efb5a3e1d258bf tests/golden/M15-03A/completed-gap-tasks.json +b01112f1d16d9b288da1d2240fc6881e35c9f1f2f03ccbc3c1363eb137f93fbc tests/golden/M15-03A/next-task-plan.json +0d899f2100c232d9fd4e98c65352b64bf69e9dc242dab9d724bb5de773f1dacb tests/golden/M15-03A/task-catalog.jsonl +a5bacd082ed7274cef4ec4ba1d1ae470745fc3c13ba68654c2ba81b3a4df6f0b tests/golden/M15-03A/task-index.json +3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1 tests/golden/M16-GAP-00273/manifest.json +5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8 docs/status/M16-GAP-00273.md diff --git a/tests/golden/corrective/C6-003/protected-hashes-before.txt b/tests/golden/corrective/C6-003/protected-hashes-before.txt new file mode 100644 index 00000000..a0d2c8ba --- /dev/null +++ b/tests/golden/corrective/C6-003/protected-hashes-before.txt @@ -0,0 +1,7 @@ +5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1 docs/EXECUTION_QUEUE.md +32f4c11ebf8563f3aa500583f3979c1b38d711cc7328a428968118f0375b90b4 tests/golden/M15-03A/completed-gap-tasks.json +edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17 tests/golden/M15-03A/next-task-plan.json +da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d tests/golden/M15-03A/task-catalog.jsonl +ed591788c48c1b089decd2aa187f66728b5cc66a73c2b1c0c46c1a46ec4a0ae0 tests/golden/M15-03A/task-index.json +3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1 tests/golden/M16-GAP-00273/manifest.json +5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8 docs/status/M16-GAP-00273.md diff --git a/tests/golden/corrective/C6-003/queue-after.md b/tests/golden/corrective/C6-003/queue-after.md new file mode 100644 index 00000000..536746db --- /dev/null +++ b/tests/golden/corrective/C6-003/queue-after.md @@ -0,0 +1,46 @@ +# Web Blender 短周期执行入口 + +更新时间:2026-08-22(America/New_York) + +本页是唯一的当前任务指针,不保存历史任务表、实现日志或长期规划。领取任务前只读取本页、当前任务上下文、parent manifest 和 parent status;完整规则见 [`CONTEXT_BUDGET.md`](CONTEXT_BUDGET.md)。 + +连续接续入口见 [`nextTask.md`](../nextTask.md):用户发送“按 nextTask.md 接续执行”时,进入连续模式;每个迭代只完成一个任务并以 fresh compact context 交接,成功后自动读取新指针继续,直到失败、阻塞、预算/环境/传输异常、闭合门或用户要求停止。 + +## 当前指针 + +| 字段 | 值 | +| --- | --- | +| 里程碑 | M16 Main、Mesh、Modifier、Sculpt | +| 当前任务 | `M16-GAP-00277` | +| parent manifest | `tests/golden/M16-GAP-00276/manifest.json` | +| 任务卡 | [`tasks/M16-GAP-00277.md`](tasks/M16-GAP-00277.md) | +| 专项验收 | `npm --prefix web run test:generated-gap -- --task M16-GAP-00277` | + +领取前执行: + +```bash +npm --prefix web run test:task-context +npm --prefix web run test:context-governance +node tools/web/print-task-context.mjs +``` + +如果任务卡缺失,运行 `node tools/web/generate-task-card.mjs --task `;如果索引过期,运行 `node tools/web/generate-task-index.mjs` 后再生成任务卡;不要打开或复制完整 `next-task-plan.json`。 + +## 铁律 + +- 浏览器执行、CI、验收证据和发布声明永久仅限 Chromium;禁止领取 Firefox/WebKit 任务。 +- 当前任务必须等于 parent manifest 的 `nextTask`;不得从 Markdown 历史编号手工推导。 +- 一个任务只能有一个主要行为变化或一个独立证据变化。实现、浏览器接线、负例和证据需要拆成明确子任务时,沿任务卡的门逐项完成。 +- 完成必须有真实命令、退出码、构件 SHA-256、manifest 和 status;协议、fixture 或测试文件存在不等于完成。 +- 失败、环境缺失或 hash 漂移保持 `in_progress`/`blocked`,不得推进指针。 + +## 交接 + +```text +node tools/web/check-task-context.mjs --task --write +``` + +完成后只写入 `tests/golden//task-context.json`、任务报告、manifest 和 `docs/status/.md`。下一任务只读新 manifest 的 `nextTask`;长日志留在构件目录。 + +提交前运行 `node tools/web/check-context-governance.mjs` 和 `git diff --check`;门禁失败时保持原 task, +不得手工推进 `nextTask`。 diff --git a/tests/golden/corrective/C6-003/queue-before.md b/tests/golden/corrective/C6-003/queue-before.md new file mode 100644 index 00000000..94047db5 --- /dev/null +++ b/tests/golden/corrective/C6-003/queue-before.md @@ -0,0 +1,46 @@ +# Web Blender 短周期执行入口 + +更新时间:2026-08-22(America/New_York) + +本页是唯一的当前任务指针,不保存历史任务表、实现日志或长期规划。领取任务前只读取本页、当前任务上下文、parent manifest 和 parent status;完整规则见 [`CONTEXT_BUDGET.md`](CONTEXT_BUDGET.md)。 + +连续接续入口见 [`nextTask.md`](../nextTask.md):用户发送“按 nextTask.md 接续执行”时,进入连续模式;每个迭代只完成一个任务并以 fresh compact context 交接,成功后自动读取新指针继续,直到失败、阻塞、预算/环境/传输异常、闭合门或用户要求停止。 + +## 当前指针 + +| 字段 | 值 | +| --- | --- | +| 里程碑 | M16 Main、Mesh、Modifier、Sculpt | +| 当前任务 | `M16-GAP-00276` | +| parent manifest | `tests/golden/M16-GAP-00275/manifest.json` | +| 任务卡 | [`tasks/M16-GAP-00276.md`](tasks/M16-GAP-00276.md) | +| 专项验收 | `npm --prefix web run test:generated-gap -- --task M16-GAP-00276` | + +领取前执行: + +```bash +npm --prefix web run test:task-context +npm --prefix web run test:context-governance +node tools/web/print-task-context.mjs +``` + +如果任务卡缺失,运行 `node tools/web/generate-task-card.mjs --task `;如果索引过期,运行 `node tools/web/generate-task-index.mjs` 后再生成任务卡;不要打开或复制完整 `next-task-plan.json`。 + +## 铁律 + +- 浏览器执行、CI、验收证据和发布声明永久仅限 Chromium;禁止领取 Firefox/WebKit 任务。 +- 当前任务必须等于 parent manifest 的 `nextTask`;不得从 Markdown 历史编号手工推导。 +- 一个任务只能有一个主要行为变化或一个独立证据变化。实现、浏览器接线、负例和证据需要拆成明确子任务时,沿任务卡的门逐项完成。 +- 完成必须有真实命令、退出码、构件 SHA-256、manifest 和 status;协议、fixture 或测试文件存在不等于完成。 +- 失败、环境缺失或 hash 漂移保持 `in_progress`/`blocked`,不得推进指针。 + +## 交接 + +```text +node tools/web/check-task-context.mjs --task --write +``` + +完成后只写入 `tests/golden//task-context.json`、任务报告、manifest 和 `docs/status/.md`。下一任务只读新 manifest 的 `nextTask`;长日志留在构件目录。 + +提交前运行 `node tools/web/check-context-governance.mjs` 和 `git diff --check`;门禁失败时保持原 task, +不得手工推进 `nextTask`。 diff --git a/tests/golden/corrective/C6-003/queue-reactivation-dry-run.json b/tests/golden/corrective/C6-003/queue-reactivation-dry-run.json new file mode 100644 index 00000000..18a636fa --- /dev/null +++ b/tests/golden/corrective/C6-003/queue-reactivation-dry-run.json @@ -0,0 +1,111 @@ +{ + "schemaVersion": 1, + "task": "C6-003", + "operation": "CORRECTIVE_QUEUE_REACTIVATION_DRY_RUN", + "status": "BLOCKED_OWNER_REVIEW", + "queueMutation": false, + "authorization": { + "ownerReview": "REQUIRED", + "approved": false + }, + "legacyQueue": { + "path": "docs/EXECUTION_QUEUE.md", + "currentTask": "M16-GAP-00276", + "sha256": "5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1", + "parentManifest": "tests/golden/M16-GAP-00275/manifest.json", + "parentSha256": "c0db50bd8d2a3cbe9fd609714d1cb3dce75e1942855666ebcf5f12446e414949", + "unchanged": true + }, + "protectedHashes": { + "docs/EXECUTION_QUEUE.md": "5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1", + "tests/golden/M15-03A/completed-gap-tasks.json": "32f4c11ebf8563f3aa500583f3979c1b38d711cc7328a428968118f0375b90b4", + "tests/golden/M15-03A/next-task-plan.json": "edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17", + "tests/golden/M15-03A/task-catalog.jsonl": "da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d", + "tests/golden/M15-03A/task-index.json": "ed591788c48c1b089decd2aa187f66728b5cc66a73c2b1c0c46c1a46ec4a0ae0", + "tests/golden/M16-GAP-00273/manifest.json": "3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1", + "docs/status/M16-GAP-00273.md": "5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8" + }, + "newCapabilityTaskIds": [ + "CAP-ASSET-CATALOG-MUTATION", + "CAP-MODIFIER-STATE-MUTATION", + "CAP-MESH-POSITIVE-EDIT" + ], + "primaryMappings": [ + { + "capabilityId": "CAP-ASSET-CATALOG-MUTATION", + "family": "ASSET_CATALOG", + "sourceGaps": [ + "operator:asset.catalog_new", + "operator:asset.catalog_delete", + "operator:asset.catalogs_save", + "operator:asset.catalog_undo", + "operator:asset.catalog_redo" + ], + "representativeEvidence": "tests/golden/corrective/C3-003/manifest.json", + "unique": true + }, + { + "capabilityId": "CAP-MODIFIER-STATE-MUTATION", + "family": "MODIFIER", + "sourceGaps": [ + "modifier:state", + "operator:object.modifier_toggle" + ], + "representativeEvidence": "tests/golden/corrective/C4-001/manifest.json", + "unique": true + }, + { + "capabilityId": "CAP-MESH-POSITIVE-EDIT", + "family": "MESH", + "sourceGaps": [ + "mesh:edit", + "operator:mesh.edit" + ], + "representativeEvidence": "tests/golden/corrective/C4-002/manifest.json", + "unique": true + } + ], + "retainedNegativeEvidence": [ + "C4-003 malformed/unsupported/revision/resource cases", + "C6-002 replay/path security cases" + ], + "expectedQueueDiff": { + "mode": "DEFERRED_UNTIL_OWNER_REVIEW", + "legacyQueueChanges": [], + "additiveCandidates": [ + { + "capabilityId": "CAP-ASSET-CATALOG-MUTATION", + "family": "ASSET_CATALOG", + "lifecycleStatus": "planned" + }, + { + "capabilityId": "CAP-MODIFIER-STATE-MUTATION", + "family": "MODIFIER", + "lifecycleStatus": "planned" + }, + { + "capabilityId": "CAP-MESH-POSITIVE-EDIT", + "family": "MESH", + "lifecycleStatus": "planned" + } + ] + }, + "rollbackPath": { + "action": "discard corrective staging candidates", + "preserve": [ + "docs/EXECUTION_QUEUE.md", + "tests/golden/M15-03A/completed-gap-tasks.json", + "tests/golden/M15-03A/next-task-plan.json", + "tests/golden/M15-03A/task-catalog.jsonl", + "tests/golden/M15-03A/task-index.json", + "tests/golden/M16-GAP-00273/manifest.json", + "docs/status/M16-GAP-00273.md" + ] + }, + "input": { + "inventoryTask": "C5-003", + "inventoryStatus": "STAGED_ONLY", + "capabilityCount": 3 + }, + "blocker": "owner_review_required" +} diff --git a/tests/golden/corrective/C6-003/queue-reactivation-dry-run.mjs b/tests/golden/corrective/C6-003/queue-reactivation-dry-run.mjs new file mode 100644 index 00000000..293df120 --- /dev/null +++ b/tests/golden/corrective/C6-003/queue-reactivation-dry-run.mjs @@ -0,0 +1,35 @@ +import crypto from "node:crypto"; +import fs from "node:fs"; +import path from "node:path"; + +const root = path.resolve(import.meta.dirname, "../../../.."); +const relative = (file) => path.relative(root, file).replaceAll(path.sep, "/"); +const sha256 = (file) => crypto.createHash("sha256").update(fs.readFileSync(file)).digest("hex"); +const readJson = (file) => JSON.parse(fs.readFileSync(file, "utf8")); +const queuePath = path.join(root, "docs/EXECUTION_QUEUE.md"); +const parentPath = path.join(root, "tests/golden/M16-GAP-00275/manifest.json"); +const inventory = readJson(path.join(root, "tests/golden/corrective/C5-003/inventory-report.json")); +const capabilities = readJson(path.join(root, "tests/golden/corrective/C5-003/capability-manifest.json")); +const queue = fs.readFileSync(queuePath, "utf8"); +const currentTask = queue.match(/\|\s*当前任务\s*\|\s*`([^`]+)`/u)?.[1] ?? null; +const protectedPaths = ["docs/EXECUTION_QUEUE.md", "tests/golden/M15-03A/completed-gap-tasks.json", "tests/golden/M15-03A/next-task-plan.json", "tests/golden/M15-03A/task-catalog.jsonl", "tests/golden/M15-03A/task-index.json", "tests/golden/M16-GAP-00273/manifest.json", "docs/status/M16-GAP-00273.md"]; +const sourceHashes = Object.fromEntries(protectedPaths.map((file) => [file, sha256(path.join(root, file))])); +const primaryMappings = capabilities.map((entry) => ({ capabilityId: entry.capabilityId, family: entry.family, sourceGaps: entry.sourceGaps, representativeEvidence: entry.representativeEvidence ?? null, unique: true })); +const result = { + schemaVersion: 1, + task: "C6-003", + operation: "CORRECTIVE_QUEUE_REACTIVATION_DRY_RUN", + status: "BLOCKED_OWNER_REVIEW", + queueMutation: false, + authorization: { ownerReview: "REQUIRED", approved: false }, + legacyQueue: { path: relative(queuePath), currentTask, sha256: sha256(queuePath), parentManifest: relative(parentPath), parentSha256: sha256(parentPath), unchanged: true }, + protectedHashes: sourceHashes, + newCapabilityTaskIds: capabilities.map((entry) => entry.capabilityId), + primaryMappings, + retainedNegativeEvidence: ["C4-003 malformed/unsupported/revision/resource cases", "C6-002 replay/path security cases"], + expectedQueueDiff: { mode: "DEFERRED_UNTIL_OWNER_REVIEW", legacyQueueChanges: [], additiveCandidates: capabilities.map((entry) => ({ capabilityId: entry.capabilityId, family: entry.family, lifecycleStatus: entry.lifecycleStatus })) }, + rollbackPath: { action: "discard corrective staging candidates", preserve: protectedPaths }, + input: { inventoryTask: inventory.task, inventoryStatus: inventory.status, capabilityCount: capabilities.length }, + blocker: "owner_review_required", +}; +process.stdout.write(`${JSON.stringify(result, null, 2)}\n`); diff --git a/tests/golden/corrective/C6-003/queue-reactivation-dry-run.second.json b/tests/golden/corrective/C6-003/queue-reactivation-dry-run.second.json new file mode 100644 index 00000000..18a636fa --- /dev/null +++ b/tests/golden/corrective/C6-003/queue-reactivation-dry-run.second.json @@ -0,0 +1,111 @@ +{ + "schemaVersion": 1, + "task": "C6-003", + "operation": "CORRECTIVE_QUEUE_REACTIVATION_DRY_RUN", + "status": "BLOCKED_OWNER_REVIEW", + "queueMutation": false, + "authorization": { + "ownerReview": "REQUIRED", + "approved": false + }, + "legacyQueue": { + "path": "docs/EXECUTION_QUEUE.md", + "currentTask": "M16-GAP-00276", + "sha256": "5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1", + "parentManifest": "tests/golden/M16-GAP-00275/manifest.json", + "parentSha256": "c0db50bd8d2a3cbe9fd609714d1cb3dce75e1942855666ebcf5f12446e414949", + "unchanged": true + }, + "protectedHashes": { + "docs/EXECUTION_QUEUE.md": "5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1", + "tests/golden/M15-03A/completed-gap-tasks.json": "32f4c11ebf8563f3aa500583f3979c1b38d711cc7328a428968118f0375b90b4", + "tests/golden/M15-03A/next-task-plan.json": "edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17", + "tests/golden/M15-03A/task-catalog.jsonl": "da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d", + "tests/golden/M15-03A/task-index.json": "ed591788c48c1b089decd2aa187f66728b5cc66a73c2b1c0c46c1a46ec4a0ae0", + "tests/golden/M16-GAP-00273/manifest.json": "3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1", + "docs/status/M16-GAP-00273.md": "5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8" + }, + "newCapabilityTaskIds": [ + "CAP-ASSET-CATALOG-MUTATION", + "CAP-MODIFIER-STATE-MUTATION", + "CAP-MESH-POSITIVE-EDIT" + ], + "primaryMappings": [ + { + "capabilityId": "CAP-ASSET-CATALOG-MUTATION", + "family": "ASSET_CATALOG", + "sourceGaps": [ + "operator:asset.catalog_new", + "operator:asset.catalog_delete", + "operator:asset.catalogs_save", + "operator:asset.catalog_undo", + "operator:asset.catalog_redo" + ], + "representativeEvidence": "tests/golden/corrective/C3-003/manifest.json", + "unique": true + }, + { + "capabilityId": "CAP-MODIFIER-STATE-MUTATION", + "family": "MODIFIER", + "sourceGaps": [ + "modifier:state", + "operator:object.modifier_toggle" + ], + "representativeEvidence": "tests/golden/corrective/C4-001/manifest.json", + "unique": true + }, + { + "capabilityId": "CAP-MESH-POSITIVE-EDIT", + "family": "MESH", + "sourceGaps": [ + "mesh:edit", + "operator:mesh.edit" + ], + "representativeEvidence": "tests/golden/corrective/C4-002/manifest.json", + "unique": true + } + ], + "retainedNegativeEvidence": [ + "C4-003 malformed/unsupported/revision/resource cases", + "C6-002 replay/path security cases" + ], + "expectedQueueDiff": { + "mode": "DEFERRED_UNTIL_OWNER_REVIEW", + "legacyQueueChanges": [], + "additiveCandidates": [ + { + "capabilityId": "CAP-ASSET-CATALOG-MUTATION", + "family": "ASSET_CATALOG", + "lifecycleStatus": "planned" + }, + { + "capabilityId": "CAP-MODIFIER-STATE-MUTATION", + "family": "MODIFIER", + "lifecycleStatus": "planned" + }, + { + "capabilityId": "CAP-MESH-POSITIVE-EDIT", + "family": "MESH", + "lifecycleStatus": "planned" + } + ] + }, + "rollbackPath": { + "action": "discard corrective staging candidates", + "preserve": [ + "docs/EXECUTION_QUEUE.md", + "tests/golden/M15-03A/completed-gap-tasks.json", + "tests/golden/M15-03A/next-task-plan.json", + "tests/golden/M15-03A/task-catalog.jsonl", + "tests/golden/M15-03A/task-index.json", + "tests/golden/M16-GAP-00273/manifest.json", + "docs/status/M16-GAP-00273.md" + ] + }, + "input": { + "inventoryTask": "C5-003", + "inventoryStatus": "STAGED_ONLY", + "capabilityCount": 3 + }, + "blocker": "owner_review_required" +} diff --git a/tests/golden/corrective/C6-003/queue-reactivation-resolution.json b/tests/golden/corrective/C6-003/queue-reactivation-resolution.json new file mode 100644 index 00000000..a6cee6c4 --- /dev/null +++ b/tests/golden/corrective/C6-003/queue-reactivation-resolution.json @@ -0,0 +1,17 @@ +{ + "schemaVersion": 1, + "task": "C6-003", + "status": "APPROVED", + "writeOutcome": "QUEUE_UPDATED", + "authorization": { + "ownerReview": "tests/golden/corrective/C6-003/owner-review.json", + "approved": true + }, + "candidate": { + "legacyTask": "M16-GAP-00276", + "successor": "M16-GAP-00277", + "parentManifest": "tests/golden/M16-GAP-00276/manifest.json" + }, + "queueMutation": true, + "inputDigest": "c6-003-owner-approved-queue-reactivation-m16-gap-00276-to-00277" +} diff --git a/tests/golden/corrective/C6-003/queue-reactivation-write-preview.json b/tests/golden/corrective/C6-003/queue-reactivation-write-preview.json new file mode 100644 index 00000000..18a636fa --- /dev/null +++ b/tests/golden/corrective/C6-003/queue-reactivation-write-preview.json @@ -0,0 +1,111 @@ +{ + "schemaVersion": 1, + "task": "C6-003", + "operation": "CORRECTIVE_QUEUE_REACTIVATION_DRY_RUN", + "status": "BLOCKED_OWNER_REVIEW", + "queueMutation": false, + "authorization": { + "ownerReview": "REQUIRED", + "approved": false + }, + "legacyQueue": { + "path": "docs/EXECUTION_QUEUE.md", + "currentTask": "M16-GAP-00276", + "sha256": "5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1", + "parentManifest": "tests/golden/M16-GAP-00275/manifest.json", + "parentSha256": "c0db50bd8d2a3cbe9fd609714d1cb3dce75e1942855666ebcf5f12446e414949", + "unchanged": true + }, + "protectedHashes": { + "docs/EXECUTION_QUEUE.md": "5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1", + "tests/golden/M15-03A/completed-gap-tasks.json": "32f4c11ebf8563f3aa500583f3979c1b38d711cc7328a428968118f0375b90b4", + "tests/golden/M15-03A/next-task-plan.json": "edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17", + "tests/golden/M15-03A/task-catalog.jsonl": "da6d2a414f8880722290a3313ebb0b013640e3515dacecf5c35e1d94291bf33d", + "tests/golden/M15-03A/task-index.json": "ed591788c48c1b089decd2aa187f66728b5cc66a73c2b1c0c46c1a46ec4a0ae0", + "tests/golden/M16-GAP-00273/manifest.json": "3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1", + "docs/status/M16-GAP-00273.md": "5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8" + }, + "newCapabilityTaskIds": [ + "CAP-ASSET-CATALOG-MUTATION", + "CAP-MODIFIER-STATE-MUTATION", + "CAP-MESH-POSITIVE-EDIT" + ], + "primaryMappings": [ + { + "capabilityId": "CAP-ASSET-CATALOG-MUTATION", + "family": "ASSET_CATALOG", + "sourceGaps": [ + "operator:asset.catalog_new", + "operator:asset.catalog_delete", + "operator:asset.catalogs_save", + "operator:asset.catalog_undo", + "operator:asset.catalog_redo" + ], + "representativeEvidence": "tests/golden/corrective/C3-003/manifest.json", + "unique": true + }, + { + "capabilityId": "CAP-MODIFIER-STATE-MUTATION", + "family": "MODIFIER", + "sourceGaps": [ + "modifier:state", + "operator:object.modifier_toggle" + ], + "representativeEvidence": "tests/golden/corrective/C4-001/manifest.json", + "unique": true + }, + { + "capabilityId": "CAP-MESH-POSITIVE-EDIT", + "family": "MESH", + "sourceGaps": [ + "mesh:edit", + "operator:mesh.edit" + ], + "representativeEvidence": "tests/golden/corrective/C4-002/manifest.json", + "unique": true + } + ], + "retainedNegativeEvidence": [ + "C4-003 malformed/unsupported/revision/resource cases", + "C6-002 replay/path security cases" + ], + "expectedQueueDiff": { + "mode": "DEFERRED_UNTIL_OWNER_REVIEW", + "legacyQueueChanges": [], + "additiveCandidates": [ + { + "capabilityId": "CAP-ASSET-CATALOG-MUTATION", + "family": "ASSET_CATALOG", + "lifecycleStatus": "planned" + }, + { + "capabilityId": "CAP-MODIFIER-STATE-MUTATION", + "family": "MODIFIER", + "lifecycleStatus": "planned" + }, + { + "capabilityId": "CAP-MESH-POSITIVE-EDIT", + "family": "MESH", + "lifecycleStatus": "planned" + } + ] + }, + "rollbackPath": { + "action": "discard corrective staging candidates", + "preserve": [ + "docs/EXECUTION_QUEUE.md", + "tests/golden/M15-03A/completed-gap-tasks.json", + "tests/golden/M15-03A/next-task-plan.json", + "tests/golden/M15-03A/task-catalog.jsonl", + "tests/golden/M15-03A/task-index.json", + "tests/golden/M16-GAP-00273/manifest.json", + "docs/status/M16-GAP-00273.md" + ] + }, + "input": { + "inventoryTask": "C5-003", + "inventoryStatus": "STAGED_ONLY", + "capabilityCount": 3 + }, + "blocker": "owner_review_required" +} diff --git a/tests/golden/corrective/C6-003/queue-reactivation-write-receipt.json b/tests/golden/corrective/C6-003/queue-reactivation-write-receipt.json new file mode 100644 index 00000000..74e54d3f --- /dev/null +++ b/tests/golden/corrective/C6-003/queue-reactivation-write-receipt.json @@ -0,0 +1,43 @@ +{ + "schemaVersion": 1, + "task": "C6-003", + "operation": "CORRECTIVE_QUEUE_REACTIVATION_WRITE", + "status": "APPLIED", + "queueMutation": true, + "authorization": { + "review": "tests/golden/corrective/C6-003/owner-review.json", + "approved": true + }, + "before": { + "path": "tests/golden/corrective/C6-003/queue-before.md", + "sha256": "5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1", + "currentTask": "M16-GAP-00276", + "parentManifest": "tests/golden/M16-GAP-00275/manifest.json" + }, + "after": { + "path": "tests/golden/corrective/C6-003/queue-after.md", + "sha256": "9517e6538e0915529cd8206f7a821dd89dbd869c5523d916358164a04216040b", + "currentTask": "M16-GAP-00277", + "parentManifest": "tests/golden/M16-GAP-00276/manifest.json" + }, + "changedFields": [ + "currentTask", + "parentManifest", + "taskCard", + "focusedCommand", + "completionRegistry", + "nextTaskPlan", + "taskCatalog", + "taskIndex" + ], + "generatedState": { + "completionRegistry": "2686cab58459efdbd18451f838344d706208624421f1b424e0efb5a3e1d258bf", + "nextTaskPlan": "b01112f1d16d9b288da1d2240fc6881e35c9f1f2f03ccbc3c1363eb137f93fbc", + "taskCatalog": "0d899f2100c232d9fd4e98c65352b64bf69e9dc242dab9d724bb5de773f1dacb", + "taskIndex": "a5bacd082ed7274cef4ec4ba1d1ae470745fc3c13ba68654c2ba81b3a4df6f0b" + }, + "rollback": { + "action": "restore before.path atomically", + "source": "tests/golden/corrective/C6-003/queue-before.md" + } +} diff --git a/tests/golden/corrective/C6-003/source-hashes.json b/tests/golden/corrective/C6-003/source-hashes.json new file mode 100644 index 00000000..306d7f72 --- /dev/null +++ b/tests/golden/corrective/C6-003/source-hashes.json @@ -0,0 +1,13 @@ +{ + "sourceHashes": { + "tests/golden/corrective/C5-003/inventory-report.json": "853486cc9fd2e3a0e7d5efdd974aa901675df67176fae521054a419b465298a5", + "tests/golden/corrective/C5-003/capability-manifest.json": "c39e4f880588bc6008ce35b6648f6cb89df4f50dd6e065af7ac8d55d782417c1", + "tests/golden/corrective/C5-003/legacy-evidence-classification.json": "36c36ff6d60b42e40a2432227425770d0badcafd04fbd7ba73266a9f1e8b1555", + "tests/golden/corrective/C6-002/manifest.json": "ae3e8ae0d369b659119b03e8ab00c6389beb2e0f37cd1bd36c3dd1d88510a5f3", + "docs/EXECUTION_QUEUE.md": "5fd9b4485ee9b78a81fd2cdf71bc5df31d6e7b7d453bf9f4458ee04b9250d0d1", + "tests/golden/M16-GAP-00275/manifest.json": "c0db50bd8d2a3cbe9fd609714d1cb3dce75e1942855666ebcf5f12446e414949", + "tests/golden/corrective/C6-003/queue-reactivation-dry-run.mjs": "0bd1504e02880910a4b09f4b9767eafe513dd9b0cace02f55e71cb718b5a319d", + "tools/web/reactivate-legacy-queue.mjs": "e60e5e77be3a5c0f5fbe8e835a8e287d79dd1e4733213efca811e65d90950acb", + "tools/web/write-corrective-handoff.mjs": "63b8b5a324b065c969db8c4184b00b35218a4cc7d5e25ff747e95e0a9b731dba" + } +} diff --git a/tests/golden/corrective/CURRENT-reconcile.json b/tests/golden/corrective/CURRENT-reconcile.json new file mode 100644 index 00000000..312ffc13 --- /dev/null +++ b/tests/golden/corrective/CURRENT-reconcile.json @@ -0,0 +1,8286 @@ +{ + "schemaVersion": 1, + "operation": "CORRECTIVE_STATE_RECONCILIATION", + "mode": "dry-run", + "status": "BLOCKED", + "queueMutation": false, + "queue": { + "currentTask": "M16-GAP-00282", + "parentManifest": "tests/golden/M16-GAP-00281/manifest.json", + "parentNextTask": "M16-GAP-00282" + }, + "inputTaskCount": 281, + "manifestDoneCount": 281, + "registeredCompletedCount": 280, + "eligibleCompletedTaskIds": [], + "eligibleCompletedGaps": [], + "registryComparison": { + "eligibleNotRegistered": [], + "registeredNotEligible": [ + "datablock:Action", + "datablock:Armature", + "datablock:Brush", + "datablock:Camera", + "datablock:Collection", + "datablock:Curve", + "datablock:Curves", + "datablock:FreestyleLineStyle", + "datablock:GreasePencil", + "datablock:Lattice", + "datablock:Library", + "datablock:Light", + "datablock:Material", + "datablock:Mesh", + "datablock:MetaBall", + "datablock:NodeTree", + "datablock:Object", + "datablock:ParticleSettings", + "datablock:PointCloud", + "datablock:Scene", + "datablock:Screen", + "datablock:Sound", + "datablock:Speaker", + "datablock:Text", + "datablock:Texture", + "datablock:Volume", + "datablock:WindowManager", + "datablock:WorkSpace", + "datablock:World", + "modifier:ARMATURE", + "modifier:ARRAY", + "modifier:BEVEL", + "modifier:BOOLEAN", + "modifier:BUILD", + "modifier:CAST", + "modifier:CLOTH", + "modifier:COLLISION", + "modifier:CORRECTIVE_SMOOTH", + "modifier:CURVE", + "modifier:DATA_TRANSFER", + "modifier:DECIMATE", + "modifier:DISPLACE", + "modifier:DYNAMIC_PAINT", + "modifier:EDGE_SPLIT", + "modifier:EXPLODE", + "modifier:FLUID", + "modifier:GREASE_PENCIL_ARMATURE", + "modifier:GREASE_PENCIL_ARRAY", + "modifier:GREASE_PENCIL_BUILD", + "modifier:GREASE_PENCIL_COLOR", + "modifier:GREASE_PENCIL_DASH", + "modifier:GREASE_PENCIL_ENVELOPE", + "modifier:GREASE_PENCIL_HOOK", + "modifier:GREASE_PENCIL_LATTICE", + "modifier:GREASE_PENCIL_LENGTH", + "modifier:GREASE_PENCIL_MIRROR", + "modifier:GREASE_PENCIL_MULTIPLY", + "modifier:GREASE_PENCIL_NOISE", + "modifier:GREASE_PENCIL_OFFSET", + "modifier:GREASE_PENCIL_OPACITY", + "modifier:GREASE_PENCIL_OUTLINE", + "modifier:GREASE_PENCIL_SHRINKWRAP", + "modifier:GREASE_PENCIL_SIMPLIFY", + "modifier:GREASE_PENCIL_SMOOTH", + "modifier:GREASE_PENCIL_SUBDIV", + "modifier:GREASE_PENCIL_TEXTURE", + "modifier:GREASE_PENCIL_THICKNESS", + "modifier:GREASE_PENCIL_TIME", + "modifier:GREASE_PENCIL_TINT", + "modifier:GREASE_PENCIL_VERTEX_WEIGHT_ANGLE", + "modifier:GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY", + "modifier:HOOK", + "modifier:LAPLACIANDEFORM", + "modifier:LAPLACIANSMOOTH", + "modifier:LATTICE", + "modifier:LINEART", + "modifier:MASK", + "modifier:MESH_CACHE", + "modifier:MESH_DEFORM", + "modifier:MESH_SEQUENCE_CACHE", + "modifier:MESH_TO_VOLUME", + "modifier:MIRROR", + "modifier:MULTIRES", + "modifier:NODES", + "modifier:NORMAL_EDIT", + "modifier:OCEAN", + "modifier:PARTICLE_INSTANCE", + "modifier:PARTICLE_SYSTEM", + "modifier:REMESH", + "modifier:SCREW", + "modifier:SHRINKWRAP", + "modifier:SIMPLE_DEFORM", + "modifier:SKIN", + "modifier:SMOOTH", + "modifier:SOFT_BODY", + "modifier:SOLIDIFY", + "modifier:SUBSURF", + "modifier:SURFACE", + "modifier:SURFACE_DEFORM", + "modifier:TRIANGULATE", + "modifier:UV_PROJECT", + "modifier:UV_WARP", + "modifier:VERTEX_WEIGHT_EDIT", + "modifier:VERTEX_WEIGHT_MIX", + "modifier:VERTEX_WEIGHT_PROXIMITY", + "modifier:VOLUME_DISPLACE", + "modifier:VOLUME_TO_MESH", + "modifier:WARP", + "modifier:WAVE", + "modifier:WEIGHTED_NORMAL", + "modifier:WELD", + "modifier:WIREFRAME", + "operator:action.bake_keys", + "operator:action.clean", + "operator:action.clickselect", + "operator:action.copy", + "operator:action.delete", + "operator:action.duplicate", + "operator:action.duplicate_move", + "operator:action.easing_type", + "operator:action.extrapolation_type", + "operator:action.frame_jump", + "operator:action.handle_type", + "operator:action.interpolation_type", + "operator:action.keyframe_insert", + "operator:action.keyframe_type", + "operator:action.markers_make_local", + "operator:action.mirror", + "operator:action.new", + "operator:action.paste", + "operator:action.previewrange_set", + "operator:action.push_down", + "operator:action.select_all", + "operator:action.select_box", + "operator:action.select_by_type", + "operator:action.select_circle", + "operator:action.select_column", + "operator:action.select_lasso", + "operator:action.select_leftright", + "operator:action.select_less", + "operator:action.select_linked", + "operator:action.select_more", + "operator:action.snap", + "operator:action.stash", + "operator:action.stash_and_create", + "operator:action.unlink", + "operator:action.view_all", + "operator:action.view_frame", + "operator:action.view_selected", + "operator:anim.change_frame", + "operator:anim.channel_select_keys", + "operator:anim.channel_view_pick", + "operator:anim.channels_bake", + "operator:anim.channels_clean_empty", + "operator:anim.channels_click", + "operator:anim.channels_collapse", + "operator:anim.channels_delete", + "operator:anim.channels_editable_toggle", + "operator:anim.channels_expand", + "operator:anim.channels_fcurves_enable", + "operator:anim.channels_group", + "operator:anim.channels_move", + "operator:anim.channels_rename", + "operator:anim.channels_select_all", + "operator:anim.channels_select_box", + "operator:anim.channels_select_filter", + "operator:anim.channels_setting_disable", + "operator:anim.channels_setting_enable", + "operator:anim.channels_setting_toggle", + "operator:anim.channels_ungroup", + "operator:anim.channels_view_selected", + "operator:anim.clear_useless_actions", + "operator:anim.copy_driver_button", + "operator:anim.driver_button_add", + "operator:anim.driver_button_edit", + "operator:anim.driver_button_remove", + "operator:anim.end_frame_set", + "operator:anim.keyframe_clear_button", + "operator:anim.keyframe_clear_v3d", + "operator:anim.keyframe_clear_vse", + "operator:anim.keyframe_delete", + "operator:anim.keyframe_delete_button", + "operator:anim.keyframe_delete_by_name", + "operator:anim.keyframe_delete_v3d", + "operator:anim.keyframe_delete_vse", + "operator:anim.keyframe_insert", + "operator:anim.keyframe_insert_button", + "operator:anim.keyframe_insert_by_name", + "operator:anim.keyframe_insert_menu", + "operator:anim.keying_set_active_set", + "operator:anim.keying_set_add", + "operator:anim.keying_set_export", + "operator:anim.keying_set_path_add", + "operator:anim.keying_set_path_remove", + "operator:anim.keying_set_remove", + "operator:anim.keyingset_button_add", + "operator:anim.keyingset_button_remove", + "operator:anim.merge_animation", + "operator:anim.paste_driver_button", + "operator:anim.previewrange_clear", + "operator:anim.previewrange_set", + "operator:anim.replace_action", + "operator:anim.replace_action_new", + "operator:anim.scene_range_frame", + "operator:anim.separate_slots", + "operator:anim.slot_channels_move_to_new_action", + "operator:anim.slot_new_for_id", + "operator:anim.slot_unassign_from_constraint", + "operator:anim.slot_unassign_from_id", + "operator:anim.slot_unassign_from_nla_strip", + "operator:anim.start_frame_set", + "operator:anim.update_animated_transform_constraints", + "operator:anim.version_bone_hide_property", + "operator:anim.view_curve_in_graph_editor", + "operator:armature.align", + "operator:armature.assign_to_collection", + "operator:armature.autoside_names", + "operator:armature.bone_primitive_add", + "operator:armature.calculate_roll", + "operator:armature.click_extrude", + "operator:armature.collection_add", + "operator:armature.collection_assign", + "operator:armature.collection_create_and_assign", + "operator:armature.collection_deselect", + "operator:armature.collection_move", + "operator:armature.collection_remove", + "operator:armature.collection_remove_unused", + "operator:armature.collection_select", + "operator:armature.collection_show_all", + "operator:armature.collection_unassign", + "operator:armature.collection_unassign_named", + "operator:armature.collection_unsolo_all", + "operator:armature.copy_bone_color_to_selected", + "operator:armature.delete", + "operator:armature.dissolve", + "operator:armature.duplicate", + "operator:armature.duplicate_move", + "operator:armature.duplicate_rename", + "operator:armature.extrude", + "operator:armature.extrude_forked", + "operator:armature.extrude_move", + "operator:armature.fill", + "operator:armature.flip_names", + "operator:armature.hide", + "operator:armature.move_to_collection", + "operator:armature.parent_clear", + "operator:armature.parent_set", + "operator:armature.reveal", + "operator:armature.roll_clear", + "operator:armature.select_all", + "operator:armature.select_hierarchy", + "operator:armature.select_less", + "operator:armature.select_linked", + "operator:armature.select_linked_pick", + "operator:armature.select_mirror", + "operator:armature.select_more", + "operator:armature.select_similar", + "operator:armature.separate", + "operator:armature.shortest_path_pick", + "operator:armature.split", + "operator:armature.subdivide", + "operator:armature.switch_direction", + "operator:armature.symmetrize", + "operator:asset.asset_download", + "operator:asset.assets_download", + "operator:asset.assign_action", + "operator:asset.browse_containing_blend_file", + "operator:asset.bundle_install", + "operator:asset.catalog_delete", + "operator:asset.catalog_new", + "operator:asset.catalog_redo", + "operator:asset.catalog_undo", + "operator:asset.catalog_undo_push", + "operator:asset.catalogs_save", + "operator:asset.clear", + "operator:asset.clear_single", + "operator:asset.library_refresh", + "operator:asset.library_reload_listing", + "operator:asset.mark", + "operator:asset.mark_single" + ], + "manifestDoneNotEligible": [ + "datablock:Action", + "datablock:Armature", + "datablock:Brush", + "datablock:Camera", + "datablock:Collection", + "datablock:Curve", + "datablock:Curves", + "datablock:FreestyleLineStyle", + "datablock:GreasePencil", + "datablock:Lattice", + "datablock:Library", + "datablock:Light", + "datablock:Material", + "datablock:Mesh", + "datablock:MetaBall", + "datablock:NodeTree", + "datablock:Object", + "datablock:ParticleSettings", + "datablock:PointCloud", + "datablock:Scene", + "datablock:Screen", + "datablock:Sound", + "datablock:Speaker", + "datablock:Text", + "datablock:Texture", + "datablock:Volume", + "datablock:WindowManager", + "datablock:WorkSpace", + "datablock:World", + "modifier:ARMATURE", + "modifier:ARRAY", + "modifier:BEVEL", + "modifier:BOOLEAN", + "modifier:BUILD", + "modifier:CAST", + "modifier:CLOTH", + "modifier:COLLISION", + "modifier:CORRECTIVE_SMOOTH", + "modifier:CURVE", + "modifier:DATA_TRANSFER", + "modifier:DECIMATE", + "modifier:DISPLACE", + "modifier:DYNAMIC_PAINT", + "modifier:EDGE_SPLIT", + "modifier:EXPLODE", + "modifier:FLUID", + "modifier:GREASE_PENCIL_ARMATURE", + "modifier:GREASE_PENCIL_ARRAY", + "modifier:GREASE_PENCIL_BUILD", + "modifier:GREASE_PENCIL_COLOR", + "modifier:GREASE_PENCIL_DASH", + "modifier:GREASE_PENCIL_ENVELOPE", + "modifier:GREASE_PENCIL_HOOK", + "modifier:GREASE_PENCIL_LATTICE", + "modifier:GREASE_PENCIL_LENGTH", + "modifier:GREASE_PENCIL_MIRROR", + "modifier:GREASE_PENCIL_MULTIPLY", + "modifier:GREASE_PENCIL_NOISE", + "modifier:GREASE_PENCIL_OFFSET", + "modifier:GREASE_PENCIL_OPACITY", + "modifier:GREASE_PENCIL_OUTLINE", + "modifier:GREASE_PENCIL_SHRINKWRAP", + "modifier:GREASE_PENCIL_SIMPLIFY", + "modifier:GREASE_PENCIL_SMOOTH", + "modifier:GREASE_PENCIL_SUBDIV", + "modifier:GREASE_PENCIL_TEXTURE", + "modifier:GREASE_PENCIL_THICKNESS", + "modifier:GREASE_PENCIL_TIME", + "modifier:GREASE_PENCIL_TINT", + "modifier:GREASE_PENCIL_VERTEX_WEIGHT_ANGLE", + "modifier:GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY", + "modifier:HOOK", + "modifier:LAPLACIANDEFORM", + "modifier:LAPLACIANSMOOTH", + "modifier:LATTICE", + "modifier:LINEART", + "modifier:MASK", + "modifier:MESH_CACHE", + "modifier:MESH_DEFORM", + "modifier:MESH_SEQUENCE_CACHE", + "modifier:MESH_TO_VOLUME", + "modifier:MIRROR", + "modifier:MULTIRES", + "modifier:NODES", + "modifier:NORMAL_EDIT", + "modifier:OCEAN", + "modifier:PARTICLE_INSTANCE", + "modifier:PARTICLE_SYSTEM", + "modifier:REMESH", + "modifier:SCREW", + "modifier:SHRINKWRAP", + "modifier:SIMPLE_DEFORM", + "modifier:SKIN", + "modifier:SMOOTH", + "modifier:SOFT_BODY", + "modifier:SOLIDIFY", + "modifier:SUBSURF", + "modifier:SURFACE", + "modifier:SURFACE_DEFORM", + "modifier:TRIANGULATE", + "modifier:UV_PROJECT", + "modifier:UV_WARP", + "modifier:VERTEX_WEIGHT_EDIT", + "modifier:VERTEX_WEIGHT_MIX", + "modifier:VERTEX_WEIGHT_PROXIMITY", + "modifier:VOLUME_DISPLACE", + "modifier:VOLUME_TO_MESH", + "modifier:WARP", + "modifier:WAVE", + "modifier:WEIGHTED_NORMAL", + "modifier:WELD", + "modifier:WIREFRAME", + "operator:action.bake_keys", + "operator:action.clean", + "operator:action.clickselect", + "operator:action.copy", + "operator:action.delete", + "operator:action.duplicate", + "operator:action.duplicate_move", + "operator:action.easing_type", + "operator:action.extrapolation_type", + "operator:action.frame_jump", + "operator:action.handle_type", + "operator:action.interpolation_type", + "operator:action.keyframe_insert", + "operator:action.keyframe_type", + "operator:action.markers_make_local", + "operator:action.mirror", + "operator:action.new", + "operator:action.paste", + "operator:action.previewrange_set", + "operator:action.push_down", + "operator:action.select_all", + "operator:action.select_box", + "operator:action.select_by_type", + "operator:action.select_circle", + "operator:action.select_column", + "operator:action.select_lasso", + "operator:action.select_leftright", + "operator:action.select_less", + "operator:action.select_linked", + "operator:action.select_more", + "operator:action.snap", + "operator:action.stash", + "operator:action.stash_and_create", + "operator:action.unlink", + "operator:action.view_all", + "operator:action.view_frame", + "operator:action.view_selected", + "operator:anim.change_frame", + "operator:anim.channel_select_keys", + "operator:anim.channel_view_pick", + "operator:anim.channels_bake", + "operator:anim.channels_clean_empty", + "operator:anim.channels_click", + "operator:anim.channels_collapse", + "operator:anim.channels_delete", + "operator:anim.channels_editable_toggle", + "operator:anim.channels_expand", + "operator:anim.channels_fcurves_enable", + "operator:anim.channels_group", + "operator:anim.channels_move", + "operator:anim.channels_rename", + "operator:anim.channels_select_all", + "operator:anim.channels_select_box", + "operator:anim.channels_select_filter", + "operator:anim.channels_setting_disable", + "operator:anim.channels_setting_enable", + "operator:anim.channels_setting_toggle", + "operator:anim.channels_ungroup", + "operator:anim.channels_view_selected", + "operator:anim.clear_useless_actions", + "operator:anim.copy_driver_button", + "operator:anim.driver_button_add", + "operator:anim.driver_button_edit", + "operator:anim.driver_button_remove", + "operator:anim.end_frame_set", + "operator:anim.keyframe_clear_button", + "operator:anim.keyframe_clear_v3d", + "operator:anim.keyframe_clear_vse", + "operator:anim.keyframe_delete", + "operator:anim.keyframe_delete_button", + "operator:anim.keyframe_delete_by_name", + "operator:anim.keyframe_delete_v3d", + "operator:anim.keyframe_delete_vse", + "operator:anim.keyframe_insert", + "operator:anim.keyframe_insert_button", + "operator:anim.keyframe_insert_by_name", + "operator:anim.keyframe_insert_menu", + "operator:anim.keying_set_active_set", + "operator:anim.keying_set_add", + "operator:anim.keying_set_export", + "operator:anim.keying_set_path_add", + "operator:anim.keying_set_path_remove", + "operator:anim.keying_set_remove", + "operator:anim.keyingset_button_add", + "operator:anim.keyingset_button_remove", + "operator:anim.merge_animation", + "operator:anim.paste_driver_button", + "operator:anim.previewrange_clear", + "operator:anim.previewrange_set", + "operator:anim.replace_action", + "operator:anim.replace_action_new", + "operator:anim.scene_range_frame", + "operator:anim.separate_slots", + "operator:anim.slot_channels_move_to_new_action", + "operator:anim.slot_new_for_id", + "operator:anim.slot_unassign_from_constraint", + "operator:anim.slot_unassign_from_id", + "operator:anim.slot_unassign_from_nla_strip", + "operator:anim.start_frame_set", + "operator:anim.update_animated_transform_constraints", + "operator:anim.version_bone_hide_property", + "operator:anim.view_curve_in_graph_editor", + "operator:armature.align", + "operator:armature.assign_to_collection", + "operator:armature.autoside_names", + "operator:armature.bone_primitive_add", + "operator:armature.calculate_roll", + "operator:armature.click_extrude", + "operator:armature.collection_add", + "operator:armature.collection_assign", + "operator:armature.collection_create_and_assign", + "operator:armature.collection_deselect", + "operator:armature.collection_move", + "operator:armature.collection_remove", + "operator:armature.collection_remove_unused", + "operator:armature.collection_select", + "operator:armature.collection_show_all", + "operator:armature.collection_unassign", + "operator:armature.collection_unassign_named", + "operator:armature.collection_unsolo_all", + "operator:armature.copy_bone_color_to_selected", + "operator:armature.delete", + "operator:armature.dissolve", + "operator:armature.duplicate", + "operator:armature.duplicate_move", + "operator:armature.duplicate_rename", + "operator:armature.extrude", + "operator:armature.extrude_forked", + "operator:armature.extrude_move", + "operator:armature.fill", + "operator:armature.flip_names", + "operator:armature.hide", + "operator:armature.move_to_collection", + "operator:armature.parent_clear", + "operator:armature.parent_set", + "operator:armature.reveal", + "operator:armature.roll_clear", + "operator:armature.select_all", + "operator:armature.select_hierarchy", + "operator:armature.select_less", + "operator:armature.select_linked", + "operator:armature.select_linked_pick", + "operator:armature.select_mirror", + "operator:armature.select_more", + "operator:armature.select_similar", + "operator:armature.separate", + "operator:armature.shortest_path_pick", + "operator:armature.split", + "operator:armature.subdivide", + "operator:armature.switch_direction", + "operator:armature.symmetrize", + "operator:asset.asset_download", + "operator:asset.assets_download", + "operator:asset.assign_action", + "operator:asset.browse_containing_blend_file", + "operator:asset.bundle_install", + "operator:asset.catalog_delete", + "operator:asset.catalog_new", + "operator:asset.catalog_redo", + "operator:asset.catalog_undo", + "operator:asset.catalog_undo_push", + "operator:asset.catalogs_save", + "operator:asset.clear", + "operator:asset.clear_single", + "operator:asset.library_refresh", + "operator:asset.library_reload_listing", + "operator:asset.mark", + "operator:asset.mark_single", + "operator:asset.open_containing_blend_file" + ] + }, + "candidateActiveTask": null, + "sourceHashes": { + "docs/EXECUTION_QUEUE.md": "f88dd5b9893c743b51017a7b914325a0253f67449c9c51b1366639852ca57ec9", + "tests/golden/M16-GAP-00281/manifest.json": "776af597c1e500c1ef84f05624b9073ec6eb45490338eb2f9614d51ec30a2980", + "tests/golden/M15-03A/completed-gap-tasks.json": "dcee5b0c458979f029ecae97e8a7dd19f98bd15a53f09af500758aeca47eea8d", + "tests/golden/M15-03A/next-task-plan.json": "b30f12c9e34f83c2248e570db8824489b5d42bd300d3ad2a7a6328834b6e6d6f", + "tests/golden/M15-03A/task-catalog.jsonl": "4d15c0dbf3df92bd6bb69e2d3e7653a4ddd35d9aee74be40d594100f46763d72", + "tests/golden/M15-03A/task-index.json": "54b021c39c47bb908aa354b9f35e3b125ac388398e9a449c19e7e14690c3d11c", + "docs/BLENDER_WASM_CORRECTIVE_TASK_PLAN.json": "06228011cb01425a93805a50f69687f38075b9ec798e19a7c6964b5a2197265f" + }, + "inputDigest": "383d94f8e701caf359aa3e614448078683bc1acef78743ccd5b83970c87124c7", + "issueSummary": [ + { + "code": "ACTIVE_TASK_COUNT", + "count": 1, + "taskCount": 0, + "sampleTasks": [], + "pathCount": 0, + "samplePaths": [] + }, + { + "code": "ACTIVE_TASK_MISMATCH", + "count": 1, + "taskCount": 0, + "sampleTasks": [], + "pathCount": 0, + "samplePaths": [] + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "count": 1498, + "taskCount": 281, + "sampleTasks": [ + "M16-GAP-00001", + "M16-GAP-00002", + "M16-GAP-00003", + "M16-GAP-00004", + "M16-GAP-00005" + ], + "pathCount": 24, + "samplePaths": [ + "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "docs/status/M16-GAP-00162.md", + "tests/files/web/generated/M16-GAP-00177-operator-anim.end_frame_set.blend" + ] + }, + { + "code": "MISSING_TASK_CONTEXT", + "count": 24, + "taskCount": 24, + "sampleTasks": [ + "M16-GAP-00001", + "M16-GAP-00002", + "M16-GAP-00003", + "M16-GAP-00004", + "M16-GAP-00005" + ], + "pathCount": 0, + "samplePaths": [] + } + ], + "issueCount": 1524, + "issues": [ + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00001" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03E/manifest.json", + "task": "M16-GAP-00001" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00001" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03A/next-task-plan.json", + "task": "M16-GAP-00001" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/package.json", + "task": "M16-GAP-00001" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00002" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00002" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03A/next-task-plan.json", + "task": "M16-GAP-00002" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/package.json", + "task": "M16-GAP-00002" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00003" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00003" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00003" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00003" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00003" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03A/next-task-plan.json", + "task": "M16-GAP-00003" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/package.json", + "task": "M16-GAP-00003" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00004" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00004" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00004" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03A/next-task-plan.json", + "task": "M16-GAP-00004" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00005" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00005" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03A/next-task-plan.json", + "task": "M16-GAP-00005" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00006" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00006" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00006" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03A/next-task-plan.json", + "task": "M16-GAP-00006" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00007" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00007" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00007" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03A/next-task-plan.json", + "task": "M16-GAP-00007" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00008" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00008" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00008" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00008" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00008" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03A/next-task-plan.json", + "task": "M16-GAP-00008" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00009" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00009" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M15-03A/next-task-plan.json", + "task": "M16-GAP-00009" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00010" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00010" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00010" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00010" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00010" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00010" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00011" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00011" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00011" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00011" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00011" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00012" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00012" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00012" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00012" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00012" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00013" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00013" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00013" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00013" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00013" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00014" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00014" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00014" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00014" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00014" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00015" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00015" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00015" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00015" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00015" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00016" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00016" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00016" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00016" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00016" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00017" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00017" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00017" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00017" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00017" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00018" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00018" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "task": "M16-GAP-00018" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00018" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00018" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00018" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00019" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00019" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00019" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00019" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00019" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00020" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00020" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00020" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00020" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00020" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00021" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00021" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00021" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00021" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00021" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00022" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00022" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00022" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00022" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00022" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00022" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00023" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00023" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00023" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00023" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00023" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00023" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00024" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00024" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00024" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00024" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00024" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00024" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00025" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00025" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00025" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00025" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00025" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00025" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00026" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00026" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00026" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00026" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00026" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00026" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00027" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00027" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00027" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00027" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00027" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00027" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00028" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00028" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00028" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00028" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00028" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00028" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00029" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00029" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00029" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00029" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00029" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00029" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00030" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00030" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00030" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00030" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00030" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00030" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00031" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00031" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00031" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00031" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00031" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00031" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00032" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00032" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00032" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00032" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00032" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00032" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00033" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00033" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00033" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00033" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00033" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00033" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00034" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00034" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00034" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00034" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00034" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00034" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00035" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00035" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00035" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00035" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00035" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00035" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00036" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00036" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00036" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00036" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00036" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00036" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00037" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00037" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00037" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00037" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00037" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00037" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00038" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00038" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00038" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00038" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00038" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00038" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00038" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00039" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00039" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00039" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00039" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00039" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00039" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00039" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00040" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00040" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00040" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00040" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00040" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00040" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00040" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00041" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00041" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00041" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00041" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00041" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00041" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00041" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00042" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00042" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00042" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00042" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00042" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00042" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00042" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00043" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00043" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00043" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00043" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00043" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00043" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00043" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00044" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00044" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00044" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00044" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00044" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00044" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00044" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00045" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00045" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00045" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00045" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00045" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00045" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00045" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00046" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00046" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00046" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00046" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00046" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00046" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00046" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00047" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00047" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00047" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00047" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00047" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00047" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00047" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00048" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00048" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00048" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00048" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00048" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00048" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00048" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00049" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00049" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00049" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00049" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00049" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00049" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00049" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00050" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00050" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00050" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00050" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00050" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00050" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00050" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00051" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00051" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00051" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00051" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00051" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00051" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00051" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00052" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00052" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00052" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00052" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00052" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00052" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00052" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00053" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00053" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00053" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00053" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00053" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00053" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00053" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00054" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00054" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00054" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00054" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00054" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00054" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00054" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00055" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00055" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00055" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00055" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00055" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00055" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00055" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00056" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00056" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00056" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00056" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00056" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00056" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00056" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00057" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00057" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00057" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00057" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00057" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00057" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00057" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00058" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00058" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00058" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00058" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00058" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00058" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00058" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00059" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00059" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00059" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00059" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00059" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00059" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00060" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00060" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00060" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00060" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00060" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00060" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00061" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00061" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00061" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00061" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00061" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00061" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00062" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00062" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00062" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00062" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00062" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00062" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00063" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00063" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00063" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00063" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00063" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00063" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00064" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00064" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00064" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00064" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00064" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00064" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00065" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00065" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00065" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00065" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00065" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00065" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00066" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00066" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00066" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00066" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00066" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00066" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00067" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00067" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00067" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00067" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00067" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00067" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00068" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00068" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00068" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00068" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00068" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00068" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00069" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00069" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00069" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00069" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00069" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00069" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00070" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00070" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00070" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00070" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00070" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00070" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00070" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M16-GAP-00070/manifest.json", + "task": "M16-GAP-00071" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00071" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00071" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00071" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00071" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00071" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00071" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00072" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00072" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00072" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00072" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00072" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00072" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00072" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00073" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00073" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00073" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00073" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00073" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00073" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00073" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00074" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00074" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00074" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00074" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00074" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00074" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00074" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00075" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00075" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00075" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00075" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00075" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00075" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00075" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00076" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00076" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00076" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00076" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00076" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00076" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00077" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00077" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00077" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00077" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00077" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00077" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00078" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00078" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00078" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00078" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00078" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00078" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00079" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00079" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00079" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00079" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00079" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00079" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00080" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00080" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00080" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00080" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00080" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00080" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00081" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00081" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00081" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00081" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00081" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00081" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00082" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00082" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00082" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00082" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00082" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00082" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00083" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00083" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00083" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00083" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00083" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00083" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00084" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00084" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00084" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00084" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00084" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00084" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00085" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00085" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00085" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00085" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00085" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00085" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00086" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00086" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00086" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00086" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00086" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00086" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00087" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00087" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00087" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00087" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00087" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00087" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00088" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00088" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00088" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00088" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00088" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00088" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00089" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00089" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00089" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00089" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00089" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00089" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00090" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00090" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00090" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00090" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00090" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00090" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00091" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00091" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00091" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00091" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00091" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00091" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00092" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00092" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00092" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00092" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00092" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00092" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00093" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00093" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00093" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00093" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00093" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00093" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00094" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00094" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00094" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00094" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00094" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00094" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00095" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00095" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00095" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00095" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00095" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00095" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00096" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00096" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00096" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00096" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00096" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00096" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00097" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00097" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00097" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00097" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00097" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00097" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00098" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00098" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00098" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00098" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00098" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00098" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00099" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00099" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00099" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00099" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00099" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00099" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00099" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00100" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00100" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00100" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00100" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00100" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00100" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00100" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00101" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00101" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00101" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00101" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00101" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00101" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00101" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00102" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00102" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00102" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00102" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00102" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00102" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00102" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00103" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00103" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00103" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00103" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00103" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00103" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00103" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00103" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00104" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00104" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00104" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00104" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00104" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00104" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00104" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00104" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00105" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00105" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00105" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00105" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00105" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00105" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00105" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00105" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00106" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00106" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00106" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00106" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00106" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00106" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00106" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00106" + }, + { + "code": "MISSING_TASK_CONTEXT", + "task": "M16-GAP-00107" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00107" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00107" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00107" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00107" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00107" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00107" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00107" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00108" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00108" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00108" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00108" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00108" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00108" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00108" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00109" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00109" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00109" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00109" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00109" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00109" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00109" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00110" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00110" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00110" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00110" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00110" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00110" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00110" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generic-modifier-desktop.py", + "task": "M16-GAP-00111" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00111" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00111" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00111" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00111" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00111" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00111" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00112" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00112" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00112" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00112" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00112" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00113" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00113" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc", + "task": "M16-GAP-00113" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00113" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00113" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00113" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00114" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00114" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00114" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00114" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00114" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00115" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00115" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00115" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00115" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00115" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00116" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00116" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00116" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00116" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00116" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00117" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00117" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00117" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00117" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00117" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00118" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00118" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00118" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00118" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00118" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00119" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00119" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00119" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00119" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00119" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00120" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00120" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00120" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00120" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00120" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00121" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00121" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00121" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00121" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00121" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00122" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00122" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00122" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00122" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00122" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00123" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00123" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00123" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00123" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00123" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00124" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00124" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00124" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00124" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00124" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-action-keyframe-insert-desktop.py", + "task": "M16-GAP-00125" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00125" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00125" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00125" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00125" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00125" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00126" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00126" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00126" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00126" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00126" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00127" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00127" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00127" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00127" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00127" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00128" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00128" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00128" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00128" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00128" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00129" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00129" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00129" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00129" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00129" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00130" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00130" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00130" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00130" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00130" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-action-previewrange-set-desktop.py", + "task": "M16-GAP-00131" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00131" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00131" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00131" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00131" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00131" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00132" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00132" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00132" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00132" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00132" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00133" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00133" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00133" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00133" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00133" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00134" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00134" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00134" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00134" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00134" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00135" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00135" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00135" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00135" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00135" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00136" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00136" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00136" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00136" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00136" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00137" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00137" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00137" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00137" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00137" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00138" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00138" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00138" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00138" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00138" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00139" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00139" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00139" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00139" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00139" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00140" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00140" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00140" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00140" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00140" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00141" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00141" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00141" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00141" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00141" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00142" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00142" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00142" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00142" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00142" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00143" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00143" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00143" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00143" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00143" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00144" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00144" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00144" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00144" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00144" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00145" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00145" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00145" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00145" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00145" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00146" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00146" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00146" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00146" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00146" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00147" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00147" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00147" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00147" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00147" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00148" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00148" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00148" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00148" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00148" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00149" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00149" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00149" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00149" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00149" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00150" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00150" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00150" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00150" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00150" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00151" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00151" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00151" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00151" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00151" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00152" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00152" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00152" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00152" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00152" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00153" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00153" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00153" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00153" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00153" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00154" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00154" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00154" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00154" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00154" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00155" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00155" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00155" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00155" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00155" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-action-channels-collapse-desktop.py", + "task": "M16-GAP-00156" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00156" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00156" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00156" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00156" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00156" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00157" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00157" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00157" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00157" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00157" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00158" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00158" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00158" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00158" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00158" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00159" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00159" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00159" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00159" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00159" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00160" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00160" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00160" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00160" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00160" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00160" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00161" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00161" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00161" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00161" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00161" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00161" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M16-GAP-00161/manifest.json", + "task": "M16-GAP-00162" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00162" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00162" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00162" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00162" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00162" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00162" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "docs/status/M16-GAP-00162.md", + "task": "M16-GAP-00162" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M16-GAP-00162/task-context.json", + "task": "M16-GAP-00162" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00163" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00163" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00163" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00163" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00163" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00163" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00164" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00164" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00164" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00164" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00164" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00164" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00165" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00165" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00165" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00165" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00165" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00165" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00166" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00166" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00166" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00166" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00166" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00166" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00167" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00167" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00167" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00167" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00167" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00167" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00168" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00168" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00168" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00168" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00168" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00168" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00169" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00169" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00169" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00169" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00169" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00169" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00170" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00170" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00170" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00170" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00170" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00170" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00171" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00171" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00171" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00171" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00171" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00171" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00172" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00172" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00172" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00172" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00172" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00172" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00173" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00173" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00173" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00173" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00173" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00173" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00174" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00174" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00174" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00174" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00174" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00174" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00175" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00175" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00175" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00175" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00175" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00175" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00176" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00176" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00176" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00176" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00176" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00176" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/files/web/generated/M16-GAP-00177-operator-anim.end_frame_set.blend", + "task": "M16-GAP-00177" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00177" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00177" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00177" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00177" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00177" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00177" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M16-GAP-00177/anim-end-frame-set-desktop-report.json", + "task": "M16-GAP-00177" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M16-GAP-00177/anim-end-frame-set-local-exact-report.json", + "task": "M16-GAP-00177" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00178" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00178" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00178" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00178" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00178" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00178" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00179" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00179" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00179" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00179" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00179" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00179" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00180" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00180" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00180" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00180" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00180" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00180" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00181" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00181" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00181" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00181" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00181" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00181" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00182" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00182" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00182" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00182" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00182" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00182" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00183" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00183" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00183" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00183" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00183" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00183" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00184" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00184" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00184" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00184" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00184" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00184" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00185" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00185" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00185" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00185" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00185" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00185" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00186" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00186" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00186" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00186" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00186" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00186" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00187" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00187" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00187" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00187" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00187" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00187" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00188" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00188" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00188" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00188" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00188" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00188" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00189" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00189" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00189" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00189" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00189" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00189" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00190" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00190" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00190" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00190" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00190" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00190" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00191" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00191" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00191" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00191" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00191" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00191" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00192" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00192" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00192" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00192" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00192" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00192" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00193" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00193" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00193" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00193" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00193" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00193" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00194" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00194" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00194" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00194" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00194" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00194" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00195" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00195" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00195" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00195" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00195" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00195" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00196" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00196" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00196" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00196" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00196" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00196" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00197" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00197" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00197" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00197" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00197" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00197" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00198" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00198" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00198" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00198" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00198" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00198" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00199" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00199" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00199" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00199" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00199" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00199" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00200" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00200" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00200" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00200" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00200" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00200" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00201" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00201" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00201" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00201" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00201" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00201" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00202" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00202" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00202" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00202" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00202" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00202" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00203" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00203" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00203" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00203" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00203" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00203" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00204" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00204" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00204" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00204" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00204" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00204" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00205" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00205" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00205" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00205" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00205" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00205" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00206" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00206" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00206" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00206" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00206" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00206" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00207" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00207" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00207" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00207" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00207" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00207" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.js", + "task": "M16-GAP-00207" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00208" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00208" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00208" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00208" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00208" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.js", + "task": "M16-GAP-00208" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.js", + "task": "M16-GAP-00208" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00209" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00209" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00209" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00209" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00209" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00210" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00210" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00210" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00210" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00210" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00211" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00211" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00211" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00211" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00211" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00212" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00212" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00212" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00212" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00212" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00213" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00213" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00213" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00213" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00213" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00214" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00214" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/protocol/scene-ir.ts", + "task": "M16-GAP-00214" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00214" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00214" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00215" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00215" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00215" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00215" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00216" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00216" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00216" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00216" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00217" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00217" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00217" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00217" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00218" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00218" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00218" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00218" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00219" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00219" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00219" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00219" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00220" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00220" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00220" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00220" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00221" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00221" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00221" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00221" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00222" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00222" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00222" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00222" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00223" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00223" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00223" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00223" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00224" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00224" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00224" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00224" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00225" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00225" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00225" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00225" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00226" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00226" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00226" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00226" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00227" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00227" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00227" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00227" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00228" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00228" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00228" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00228" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00229" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00229" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00229" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00229" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00230" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00230" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00230" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00230" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00231" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00231" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00231" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00231" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00232" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00232" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00232" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00232" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00233" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00233" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00233" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00233" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00234" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00234" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00234" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00234" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00235" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00235" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00235" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00235" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00236" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00236" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00236" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00236" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00237" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00237" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00237" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00237" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00238" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00238" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00238" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00238" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00239" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00239" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00239" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00239" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00240" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00240" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00240" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00240" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00241" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00241" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00241" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00241" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00242" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00242" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00242" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00242" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00243" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00243" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00243" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00243" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00244" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00244" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00244" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00244" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00245" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00245" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00245" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00245" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00246" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00246" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00246" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00246" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00247" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00247" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00247" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00247" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00248" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00248" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00248" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00248" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00249" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00249" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00249" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00249" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00250" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00250" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00250" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00250" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00251" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00251" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00251" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00251" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00252" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00252" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00252" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00252" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00253" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00253" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00253" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00253" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00254" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00254" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00254" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00254" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00255" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00255" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00255" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00255" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00256" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00256" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00256" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00256" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00257" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00257" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00257" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00257" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00258" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00258" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00258" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00258" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00259" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00259" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00259" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00259" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00260" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00260" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00260" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00260" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00261" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00261" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00261" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00261" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00262" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00262" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00262" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00262" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00263" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00263" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00263" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00263" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00264" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00264" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00264" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00264" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00265" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00265" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00265" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00265" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00266" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00266" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00266" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00266" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00267" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00267" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00267" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00267" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00268" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00268" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00268" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00268" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00269" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00269" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00269" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00269" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00270" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00270" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00270" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00270" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00271" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00271" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00271" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00271" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00272" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00272" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00272" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00272" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00273" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00273" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00273" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00273" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00274" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00274" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00274" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00274" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00275" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00275" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00275" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00275" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00276" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00276" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00276" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00276" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00277" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00277" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00277" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00277" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00278" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "task": "M16-GAP-00278" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/src/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00278" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "web/app/public/vendor/blender/web_engine.wasm", + "task": "M16-GAP-00278" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00279" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tools/web/check-generated-gap.mjs", + "task": "M16-GAP-00280" + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "path": "tests/golden/M16-GAP-00280/manifest.json", + "task": "M16-GAP-00281" + }, + { + "code": "ACTIVE_TASK_COUNT", + "detail": "count=0" + }, + { + "code": "ACTIVE_TASK_MISMATCH", + "detail": "NONE!=M16-GAP-00282" + } + ], + "repairPlan": { + "actions": [ + { + "code": "MISSING_TASK_CONTEXT", + "priority": "P1", + "action": "repair only when the task parent pointer is independently valid; otherwise preserve BLOCKED", + "writes": [ + "corrective evidence only" + ] + }, + { + "code": "ARTIFACT_HASH_DRIFT", + "priority": "P0", + "action": "obtain an immutable source snapshot or classify the task BLOCKED; never rewrite historical manifests", + "writes": [] + }, + { + "code": "STATUS_MISMATCH", + "priority": "P0", + "action": "compare manifest/status provenance and stop; do not normalize by hand", + "writes": [] + }, + { + "code": "PARENT_NEXT_TASK_MISMATCH", + "priority": "P0", + "action": "repair through the repository generator only after evidence review", + "writes": [] + }, + { + "code": "PLAN_NONDETERMINISTIC", + "priority": "P0", + "action": "rebuild generator inputs in staging and compare canonical bytes", + "writes": [ + "corrective evidence only" + ] + } + ], + "approvalRequired": true, + "queueMutationAllowed": false + }, + "writeOutcome": "DRY_RUN_ONLY" +} diff --git a/tools/web/capture-corrective-baseline.mjs b/tools/web/capture-corrective-baseline.mjs new file mode 100644 index 00000000..9b63910d --- /dev/null +++ b/tools/web/capture-corrective-baseline.mjs @@ -0,0 +1,90 @@ +import crypto from "node:crypto"; +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../.."); +const read = (relative) => fs.readFileSync(path.join(root, relative), "utf8"); +const sha256 = (relative) => crypto.createHash("sha256").update(read(relative)).digest("hex"); +const parseJson = (relative) => JSON.parse(read(relative)); +const relative = (absolute) => path.relative(root, absolute).replaceAll(path.sep, "/"); + +function argument(name) { + const index = process.argv.indexOf(name); + return index >= 0 ? process.argv[index + 1] : undefined; +} + +function queueCurrentTask() { + const source = read("docs/EXECUTION_QUEUE.md"); + return source.match(/\|\s*当前任务\s*\|\s*`([^`]+)`/u)?.[1] + ?? source.match(/当前任务\s*[::]\s*`([^`]+)`/u)?.[1]; +} + +function countLegacyEvidence() { + const rootPath = path.join(root, "tests/golden"); + return fs.readdirSync(rootPath, { withFileTypes: true }) + .filter((entry) => entry.isDirectory() && /^M16-GAP-\d{5}$/u.test(entry.name)) + .length; +} + +const task = argument("--task") ?? queueCurrentTask(); +const output = argument("--output"); +if (!task || !output) { + throw new Error("usage: node tools/web/capture-corrective-baseline.mjs --task M16-GAP-xxxxx --output path"); +} + +const queue = read("docs/EXECUTION_QUEUE.md"); +const parentManifestPath = queue.match(/\|\s*parent manifest\s*\|\s*`([^`]+)`/iu)?.[1]; +if (!parentManifestPath) throw new Error("EXECUTION_QUEUE.md does not declare parent manifest"); +const parentManifest = parseJson(parentManifestPath); +if (queueCurrentTask() !== task) throw new Error(`queue current task mismatch: ${queueCurrentTask()} != ${task}`); +if (parentManifest.nextTask !== task) throw new Error(`parent nextTask mismatch: ${parentManifest.nextTask} != ${task}`); +const parentStatusPath = `docs/status/${parentManifest.task}.md`; +if (!fs.existsSync(path.join(root, parentStatusPath))) throw new Error(`missing parent status: ${parentStatusPath}`); + +const plan = parseJson("tests/golden/M15-03A/next-task-plan.json"); +const catalog = read("tests/golden/M15-03A/task-catalog.jsonl"); +const activeIds = catalog.split("\n").filter(Boolean).map((line) => JSON.parse(line)) + .filter((entry) => entry.state === "active").map((entry) => entry.id); +const sourcePaths = [ + "docs/EXECUTION_QUEUE.md", + parentManifestPath, + parentStatusPath, + "tests/golden/M15-03A/completed-gap-tasks.json", + "tests/golden/M15-03A/task-catalog.jsonl", + "tests/golden/M15-03A/task-index.json", + "tests/golden/M15-03A/next-task-plan.json", +]; +const baseline = { + schemaVersion: 1, + task, + queue: { + currentTask: queueCurrentTask(), + parentManifest: parentManifestPath, + parentNextTask: parentManifest.nextTask, + }, + generatedState: { + catalogActiveTask: activeIds.length === 1 ? activeIds[0] : null, + catalogActiveIds: activeIds, + planFirstTask: plan.firstTask, + planNextTask: plan.nextTask, + completionCount: parseJson("tests/golden/M15-03A/completed-gap-tasks.json").length, + legacyEvidenceDirectoryCount: countLegacyEvidence(), + }, + sourceHashes: Object.fromEntries(sourcePaths.map((sourcePath) => [sourcePath, sha256(sourcePath)])), + invariants: { + queueMutationAllowed: false, + parentPointerMatchesCurrent: parentManifest.nextTask === task, + exactlyOneCatalogActive: activeIds.length === 1, + catalogActiveMatchesPlan: activeIds[0] === plan.firstTask, + }, +}; +if (!baseline.invariants.parentPointerMatchesCurrent || !baseline.invariants.exactlyOneCatalogActive || !baseline.invariants.catalogActiveMatchesPlan) { + throw new Error(`generated state is inconsistent: ${JSON.stringify(baseline.invariants)}`); +} + +const outputPath = path.resolve(root, output); +if (!outputPath.startsWith(`${root}${path.sep}`)) throw new Error("baseline output must stay inside the repository"); +fs.mkdirSync(path.dirname(outputPath), { recursive: true }); +fs.writeFileSync(outputPath, `${JSON.stringify(baseline, null, 2)}\n`); +process.stdout.write(`corrective-baseline-ok task=${task} active=${activeIds[0]} parentNext=${parentManifest.nextTask} output=${relative(outputPath)}\n`); diff --git a/tools/web/check-action-asset-clear-single-desktop.py b/tools/web/check-action-asset-clear-single-desktop.py new file mode 100644 index 00000000..9240c6cc --- /dev/null +++ b/tools/web/check-action-asset-clear-single-desktop.py @@ -0,0 +1,86 @@ +#!/usr/bin/env python3 +import hashlib +import json +import pathlib +import sys +import tempfile + +import bpy + + +def library_state(): + libraries = list(bpy.data.libraries) + if len(libraries) != 1: + raise RuntimeError(f"expected one asset-clear-single library, found {len(libraries)}") + library = libraries[0] + return {"name": library.name, "filepath": library.filepath, "packed": library.packed_file is not None} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit( + "usage: blender -b --factory-startup --python " + "check-action-asset-clear-single-desktop.py -- FIXTURE REPORT" + ) + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + output.unlink(missing_ok=True) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = library_state() + accepted_errors = ( + "context is incorrect", + "Data-block is not marked as asset", + "No data-block selected that is marked as asset", + "No asset data-blocks selected", + "current file selected", + ) + try: + poll = bool(bpy.ops.asset.clear_single.poll()) + except RuntimeError as error: + if not any(token in str(error) for token in accepted_errors): + raise + poll = False + if poll: + raise RuntimeError("asset.clear_single unexpectedly polled true") + try: + bpy.ops.asset.clear_single(set_fake_user=False) + except RuntimeError as error: + if not any(token in str(error) for token in accepted_errors): + raise + operator_status = "CANCELLED" + else: + raise RuntimeError("asset.clear_single unexpectedly finished") + after_cancel = library_state() + if after_cancel != before: + raise RuntimeError(f"asset.clear_single cancellation changed Main data: {before} != {after_cancel}") + with tempfile.NamedTemporaryFile(prefix="m16-asset-clear-single-reopen-", suffix=".blend", dir=fixture.parent) as temporary: + bpy.ops.wm.save_as_mainfile(filepath=temporary.name, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary.name, load_ui=False) + after = library_state() + if after != before: + raise RuntimeError(f"asset.clear_single save/reopen drift: {before} != {after}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00276", + "operation": "ASSET_CLEAR_SINGLE_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": after, + "poll": poll, + "operatorStatus": operator_status, + "mainMutation": "NONE", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("asset-clear-single-desktop-ok poll=false status=CANCELLED mainMutation=none saveReopen=exact") + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"asset-clear-single-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tools/web/check-action-asset-library-refresh-desktop.py b/tools/web/check-action-asset-library-refresh-desktop.py new file mode 100644 index 00000000..387149b1 --- /dev/null +++ b/tools/web/check-action-asset-library-refresh-desktop.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python3 +import hashlib +import json +import pathlib +import sys +import tempfile + +import bpy + + +def library_state(): + libraries = list(bpy.data.libraries) + if len(libraries) != 1: + raise RuntimeError(f"expected one asset-library-refresh library, found {len(libraries)}") + library = libraries[0] + return {"name": library.name, "filepath": library.filepath, "packed": library.packed_file is not None} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit( + "usage: blender -b --factory-startup --python " + "check-action-asset-library-refresh-desktop.py -- FIXTURE REPORT" + ) + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + output.unlink(missing_ok=True) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = library_state() + try: + poll = bool(bpy.ops.asset.library_refresh.poll()) + except RuntimeError as error: + if "context is incorrect" not in str(error): + raise + poll = False + if poll: + raise RuntimeError("asset.library_refresh unexpectedly polled true") + try: + bpy.ops.asset.library_refresh() + except RuntimeError as error: + if "context is incorrect" not in str(error): + raise + operator_status = "CANCELLED" + else: + raise RuntimeError("asset.library_refresh unexpectedly finished") + after_cancel = library_state() + if after_cancel != before: + raise RuntimeError(f"asset.library_refresh cancellation changed Main data: {before} != {after_cancel}") + with tempfile.NamedTemporaryFile( + prefix="m16-asset-library-refresh-reopen-", suffix=".blend", dir=fixture.parent + ) as temporary: + bpy.ops.wm.save_as_mainfile(filepath=temporary.name, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary.name, load_ui=False) + after = library_state() + if after != before: + raise RuntimeError(f"asset.library_refresh save/reopen drift: {before} != {after}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00277", + "operation": "ASSET_LIBRARY_REFRESH_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": after, + "poll": poll, + "operatorStatus": operator_status, + "mainMutation": "NONE", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("asset-library-refresh-desktop-ok poll=false status=CANCELLED mainMutation=none saveReopen=exact") + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"asset-library-refresh-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tools/web/check-action-asset-library-reload-listing-desktop.py b/tools/web/check-action-asset-library-reload-listing-desktop.py new file mode 100644 index 00000000..347a71d8 --- /dev/null +++ b/tools/web/check-action-asset-library-reload-listing-desktop.py @@ -0,0 +1,83 @@ +#!/usr/bin/env python3 +import hashlib +import json +import pathlib +import sys +import tempfile + +import bpy + + +def library_state(): + libraries = list(bpy.data.libraries) + if len(libraries) != 1: + raise RuntimeError(f"expected one asset-library-reload-listing library, found {len(libraries)}") + library = libraries[0] + return {"name": library.name, "filepath": library.filepath, "packed": library.packed_file is not None} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit( + "usage: blender -b --factory-startup --python " + "check-action-asset-library-reload-listing-desktop.py -- FIXTURE REPORT" + ) + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + output.unlink(missing_ok=True) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = library_state() + try: + poll = bool(bpy.ops.asset.library_reload_listing.poll()) + except RuntimeError as error: + if "context is incorrect" not in str(error) and "not a remote library" not in str(error): + raise + poll = False + if poll: + raise RuntimeError("asset.library_reload_listing unexpectedly polled true") + try: + bpy.ops.asset.library_reload_listing() + except RuntimeError as error: + if "context is incorrect" not in str(error) and "not a remote library" not in str(error): + raise + operator_status = "CANCELLED" + else: + raise RuntimeError("asset.library_reload_listing unexpectedly finished") + after_cancel = library_state() + if after_cancel != before: + raise RuntimeError( + f"asset.library_reload_listing cancellation changed Main data: {before} != {after_cancel}" + ) + with tempfile.NamedTemporaryFile( + prefix="m16-asset-library-reload-listing-reopen-", suffix=".blend", dir=fixture.parent + ) as temporary: + bpy.ops.wm.save_as_mainfile(filepath=temporary.name, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary.name, load_ui=False) + after = library_state() + if after != before: + raise RuntimeError(f"asset.library_reload_listing save/reopen drift: {before} != {after}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00278", + "operation": "ASSET_LIBRARY_RELOAD_LISTING_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": after, + "poll": poll, + "operatorStatus": operator_status, + "mainMutation": "NONE", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("asset-library-reload-listing-desktop-ok poll=false status=CANCELLED mainMutation=none saveReopen=exact") + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"asset-library-reload-listing-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tools/web/check-action-asset-mark-desktop.py b/tools/web/check-action-asset-mark-desktop.py new file mode 100644 index 00000000..d3a83e41 --- /dev/null +++ b/tools/web/check-action-asset-mark-desktop.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python3 +import hashlib +import json +import pathlib +import sys +import tempfile + +import bpy + + +OBJECT_NAME = "WebGapAssetMarkObject" + + +def object_state(): + obj = bpy.data.objects.get(OBJECT_NAME) + if obj is None: + raise RuntimeError("asset mark fixture object is missing") + metadata = obj.asset_data + return { + "name": obj.name, + "assetMarked": metadata is not None, + "author": metadata.author if metadata is not None else "", + "description": metadata.description if metadata is not None else "", + "tags": sorted(tag.name for tag in metadata.tags) if metadata is not None else [], + } + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit( + "usage: blender -b --factory-startup --python " + "check-action-asset-mark-desktop.py -- FIXTURE REPORT" + ) + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + output.unlink(missing_ok=True) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = object_state() + accepted_errors = ( + "No data-block selected", + "context is incorrect", + "supports asset operations", + ) + try: + poll = bool(bpy.ops.asset.mark.poll()) + except RuntimeError as error: + if not any(token in str(error) for token in accepted_errors): + raise + poll = False + if poll: + raise RuntimeError("asset.mark unexpectedly polled true without an editor ID context") + try: + bpy.ops.asset.mark() + except RuntimeError as error: + if not any(token in str(error) for token in accepted_errors): + raise + operator_status = "CANCELLED" + else: + raise RuntimeError("asset.mark unexpectedly finished without an editor ID context") + after_cancel = object_state() + if after_cancel != before: + raise RuntimeError(f"asset.mark cancellation changed Main data: {before} != {after_cancel}") + with tempfile.NamedTemporaryFile( + prefix="m16-asset-mark-reopen-", suffix=".blend", dir=fixture.parent + ) as temporary: + bpy.ops.wm.save_as_mainfile(filepath=temporary.name, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary.name, load_ui=False) + after = object_state() + if after != before: + raise RuntimeError(f"asset.mark save/reopen drift: {before} != {after}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00279", + "operation": "ASSET_MARK_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": after, + "poll": poll, + "operatorStatus": operator_status, + "mainMutation": "NONE", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("asset-mark-desktop-ok poll=false status=CANCELLED mainMutation=none saveReopen=exact") + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"asset-mark-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tools/web/check-action-asset-mark-single-desktop.py b/tools/web/check-action-asset-mark-single-desktop.py new file mode 100644 index 00000000..2669fdb3 --- /dev/null +++ b/tools/web/check-action-asset-mark-single-desktop.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python3 +import hashlib +import json +import pathlib +import sys +import tempfile + +import bpy + + +OBJECT_NAME = "WebGapAssetMarkSingleObject" + + +def object_state(): + obj = bpy.data.objects.get(OBJECT_NAME) + if obj is None: + raise RuntimeError("asset mark single fixture object is missing") + metadata = obj.asset_data + return { + "name": obj.name, + "assetMarked": metadata is not None, + "author": metadata.author if metadata is not None else "", + "description": metadata.description if metadata is not None else "", + "tags": sorted(tag.name for tag in metadata.tags) if metadata is not None else [], + } + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit( + "usage: blender -b --factory-startup --python " + "check-action-asset-mark-single-desktop.py -- FIXTURE REPORT" + ) + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + output.unlink(missing_ok=True) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = object_state() + accepted_errors = ( + "No data-block selected", + "context is incorrect", + "supports asset operations", + ) + try: + poll = bool(bpy.ops.asset.mark_single.poll()) + except RuntimeError as error: + if not any(token in str(error) for token in accepted_errors): + raise + poll = False + if poll: + raise RuntimeError("asset.mark_single unexpectedly polled true without an editor ID context") + try: + bpy.ops.asset.mark_single() + except RuntimeError as error: + if not any(token in str(error) for token in accepted_errors): + raise + operator_status = "CANCELLED" + else: + raise RuntimeError("asset.mark_single unexpectedly finished without an editor ID context") + after_cancel = object_state() + if after_cancel != before: + raise RuntimeError(f"asset.mark_single cancellation changed Main data: {before} != {after_cancel}") + with tempfile.NamedTemporaryFile( + prefix="m16-asset-mark-single-reopen-", suffix=".blend", dir=fixture.parent + ) as temporary: + bpy.ops.wm.save_as_mainfile(filepath=temporary.name, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary.name, load_ui=False) + after = object_state() + if after != before: + raise RuntimeError(f"asset.mark_single save/reopen drift: {before} != {after}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00280", + "operation": "ASSET_MARK_SINGLE_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": after, + "poll": poll, + "operatorStatus": operator_status, + "mainMutation": "NONE", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("asset-mark-single-desktop-ok poll=false status=CANCELLED mainMutation=none saveReopen=exact") + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"asset-mark-single-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tools/web/check-action-open-containing-blend-file-desktop.py b/tools/web/check-action-open-containing-blend-file-desktop.py new file mode 100644 index 00000000..75eb4ce8 --- /dev/null +++ b/tools/web/check-action-open-containing-blend-file-desktop.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python3 +import hashlib +import json +import pathlib +import sys +import tempfile + +import bpy + + +def library_state(): + libraries = list(bpy.data.libraries) + if len(libraries) != 1: + raise RuntimeError(f"expected one open-containing library, found {len(libraries)}") + library = libraries[0] + return {"name": library.name, "filepath": library.filepath, "packed": library.packed_file is not None} + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 2: + raise SystemExit("usage: blender -b --python check-action-open-containing-blend-file-desktop.py -- FIXTURE REPORT") + fixture, output = (pathlib.Path(value).resolve() for value in arguments) + output.unlink(missing_ok=True) + bpy.ops.wm.open_mainfile(filepath=str(fixture), load_ui=False) + before = library_state() + try: + poll = bool(bpy.ops.asset.open_containing_blend_file.poll()) + except RuntimeError as error: + if "context is incorrect" not in str(error) and "No asset selected" not in str(error): + raise + poll = False + if poll: + raise RuntimeError("asset.open_containing_blend_file unexpectedly polled true") + try: + bpy.ops.asset.open_containing_blend_file() + except RuntimeError as error: + if "context is incorrect" not in str(error) and "No asset selected" not in str(error): + raise + operator_status = "CANCELLED" + else: + raise RuntimeError("asset.open_containing_blend_file unexpectedly finished") + after_cancel = library_state() + if after_cancel != before: + raise RuntimeError(f"open-containing cancellation changed Main data: {before} != {after_cancel}") + with tempfile.NamedTemporaryFile(prefix="m16-open-containing-reopen-", suffix=".blend", dir=fixture.parent) as temporary: + bpy.ops.wm.save_as_mainfile(filepath=temporary.name, check_existing=False, compress=True) + bpy.ops.wm.open_mainfile(filepath=temporary.name, load_ui=False) + after = library_state() + if after != before: + raise RuntimeError(f"open-containing save/reopen drift: {before} != {after}") + report = { + "schemaVersion": 1, + "task": "M16-GAP-00281", + "operation": "ASSET_OPEN_CONTAINING_BLEND_FILE_DESKTOP", + "fixture": str(fixture), + "fixtureSha256": hashlib.sha256(fixture.read_bytes()).hexdigest(), + "before": before, + "after": after, + "poll": poll, + "operatorStatus": operator_status, + "mainMutation": "NONE", + "saveReopen": "EXACT", + "blenderVersion": bpy.app.version_string, + } + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(json.dumps(report, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print("asset-open-containing-desktop-ok poll=false status=CANCELLED mainMutation=none saveReopen=exact") + + +if __name__ == "__main__": + try: + main() + except Exception as error: + print(f"asset-open-containing-desktop-failed: {error}") + raise SystemExit(1) diff --git a/tools/web/check-corrective-baseline.mjs b/tools/web/check-corrective-baseline.mjs new file mode 100644 index 00000000..e8bd0ffc --- /dev/null +++ b/tools/web/check-corrective-baseline.mjs @@ -0,0 +1,24 @@ +import assert from "node:assert/strict"; +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../.."); +function arg(name) { + const index = process.argv.indexOf(name); + return index >= 0 ? process.argv[index + 1] : undefined; +} +const baselinePath = arg("--baseline"); +const sourceHashesPath = arg("--source-hashes"); +if (!baselinePath || !sourceHashesPath) throw new Error("usage: node tools/web/check-corrective-baseline.mjs --baseline path --source-hashes path"); +const baseline = JSON.parse(fs.readFileSync(path.resolve(root, baselinePath), "utf8")); +const expected = Object.fromEntries(fs.readFileSync(path.resolve(root, sourceHashesPath), "utf8").trim().split("\n").filter(Boolean).map((line) => { + const [sha256, relative] = line.trim().split(/\s+/, 2); + return [relative, sha256]; +})); +assert.deepEqual(baseline.sourceHashes, expected, "baseline source hash map differs from source-hashes.txt"); +assert.equal(baseline.invariants.queueMutationAllowed, false); +assert.equal(baseline.invariants.parentPointerMatchesCurrent, true); +assert.equal(baseline.invariants.exactlyOneCatalogActive, true); +assert.equal(baseline.invariants.catalogActiveMatchesPlan, true); +process.stdout.write(`corrective-baseline-check-ok task=${baseline.task} sources=${Object.keys(expected).length} queueMutation=false\n`); diff --git a/tools/web/check-corrective-plan.mjs b/tools/web/check-corrective-plan.mjs new file mode 100644 index 00000000..844859fe --- /dev/null +++ b/tools/web/check-corrective-plan.mjs @@ -0,0 +1,92 @@ +import assert from "node:assert/strict"; +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../.."); +const read = (relative) => fs.readFileSync(path.join(root, relative), "utf8"); +const json = (relative) => JSON.parse(read(relative)); +const exists = (relative) => fs.existsSync(path.join(root, relative)); + +const planPath = "docs/BLENDER_WASM_CORRECTIVE_TASK_PLAN.json"; +const matrixPath = "docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json"; +const plan = json(planPath); +const matrix = json(matrixPath); +const queue = read("docs/EXECUTION_QUEUE.md"); +const handoff = read("nextTask1.md"); +const currentTask = queue.match(/\|\s*当前任务\s*\|\s*`([^`]+)`/u)?.[1]; +const parentPath = queue.match(/\|\s*parent manifest\s*\|\s*`([^`]+)`/iu)?.[1]; +const parent = json(parentPath); +const currentCorrectiveTask = handoff.match(/current corrective task\s*\|\s*`([^`]+)`/iu)?.[1]; + +function isLegacyCheckpointAncestor(checkpointTask) { + if (checkpointTask === currentTask) return true; + let cursor = parent; + const visited = new Set(); + while (cursor?.task && !visited.has(cursor.task)) { + visited.add(cursor.task); + if (cursor.task === checkpointTask) return true; + if (!cursor.parentTask) return false; + const manifestPath = path.join(root, "tests/golden", cursor.parentTask, "manifest.json"); + if (!fs.existsSync(manifestPath)) return false; + cursor = JSON.parse(fs.readFileSync(manifestPath, "utf8")); + } + return false; +} + +assert.equal(plan.schemaVersion, 2, "corrective task plan schema must be v2"); +assert.equal(plan.queuePolicy.mode, "READ_ONLY_UNTIL_C6_003"); +assert.ok(isLegacyCheckpointAncestor(plan.queuePolicy.currentTask), "corrective queue checkpoint must be current or an ancestor"); +assert.ok(isLegacyCheckpointAncestor(plan.queuePolicy.parentNextTask), "corrective parent checkpoint must be current or an ancestor"); +assert.equal(plan.queuePolicy.currentTask, plan.currentCheckpoint.queueCurrentTask); +assert.equal(plan.queuePolicy.parentNextTask, plan.currentCheckpoint.queueParentNextTask); +assert.notEqual(plan.currentCheckpoint.queueParentNextTask, plan.currentCheckpoint.reservedSuccessor); +assert.equal(parent.nextTask, currentTask); +assert.ok(currentCorrectiveTask, "nextTask1 must identify the current corrective task"); +assert.equal(plan.tasks.filter((task) => task.ready === true).map((task) => task.id).join(","), currentCorrectiveTask); +assert.equal(plan.tasks.find((task) => task.id === "C0-001").status, "done"); +assert.equal(plan.tasks.find((task) => task.id === "C0-002").status, "done"); +assert.ok(["planned", "in_progress", "done"].includes(plan.tasks.find((task) => task.id === "C0-003").status)); +assert.ok(["planned", "in_progress"].includes(plan.tasks.find((task) => task.id === currentCorrectiveTask).status)); + +const taskIds = new Set(plan.tasks.map((task) => task.id)); +assert.equal(taskIds.size, plan.tasks.length, "corrective task IDs must be unique"); +const lifecycleStatuses = new Set(plan.taskContract.lifecycleStatuses); +for (const task of plan.tasks) { + assert.ok(lifecycleStatuses.has(task.status ?? "planned"), `${task.id} lifecycle status is invalid`); + if (task.ready === true) assert.ok(["planned", "in_progress"].includes(task.status ?? "planned"), `${task.id} ready task has invalid lifecycle status`); + if (task.ready === true || task.phase === "P0") { + assert.ok(task.card && exists(task.card), `${task.id} task card is missing`); + const card = read(task.card); + const cardStatus = card.match(/(?:lifecycleStatus|状态)\s*[::]\s*`?([a-z_]+|done|blocked|planned|in_progress)/iu)?.[1]?.toLowerCase(); + if (task.status) assert.equal(cardStatus, task.status, `${task.id} card status is stale`); + if (task.id === "C6-003") assert.match(card, /queueMutationAllowed\s*[::]\s*`?(?:false|true)/iu, `${task.id} card must declare queue mutation policy`); + else assert.match(card, /queueMutationAllowed\s*[::]\s*`?false/iu, `${task.id} card must forbid queue mutation`); + } + assert.ok(task.gate && plan.gates.some((gate) => gate.id === task.gate), `${task.id} gate is invalid`); + for (const dependency of task.dependsOn ?? []) assert.ok(taskIds.has(dependency), `${task.id} dependency is missing: ${dependency}`); + assert.equal(task.queueMutationAllowed ?? false, task.id === "C6-003", `${task.id} queue mutation policy is invalid`); +} + +const allowedLevels = new Set(matrix.allowedParityLevels); +const allowedClasses = new Set(matrix.allowedCompletionClasses); +const allowedProvenanceStates = new Set(matrix.allowedProvenanceStates); +assert.equal(matrix.schemaVersion, 2, "capability matrix schema must be v2"); +assert.equal(matrix.queuePolicy.mode, "SHADOW_ONLY"); +for (const entry of matrix.entries) { + assert.ok(allowedLevels.has(entry.parityLevel), `${entry.capabilityId} parity level is invalid`); + assert.ok(allowedLevels.has(entry.targetParityLevel), `${entry.capabilityId} target parity level is invalid`); + assert.ok(allowedClasses.has(entry.completionClass), `${entry.capabilityId} completion class is invalid`); + assert.ok(["planned", "in_progress", "blocked", "done"].includes(entry.lifecycleStatus), `${entry.capabilityId} lifecycle status is invalid`); + if (entry.lifecycleStatus !== "done") assert.notEqual(entry.completionClass, "FEATURE_PARITY", `${entry.capabilityId} cannot claim feature parity before done`); + if (entry.lifecycleStatus === "planned") assert.equal(entry.parityLevel, "L0", `${entry.capabilityId} planned entry must not claim proven parity`); + assert.ok(["PASS", "FAIL", "BLOCKED", "NOT_RUN"].includes(entry.evidence?.status), `${entry.capabilityId} evidence status is invalid`); + assert.ok(allowedProvenanceStates.has(entry.evidence?.provenanceState), `${entry.capabilityId} provenance state is invalid`); + assert.ok(entry.evidence && Array.isArray(entry.evidence.required), `${entry.capabilityId} evidence contract is missing`); + assert.equal(entry.migration?.legacyCompletionPreserved, true, `${entry.capabilityId} must preserve legacy completion records`); +} + +assert.match(read("docs/BLENDER_WASM_CORRECTIVE_EXECUTION_RUNBOOK.md"), /C0-001.*capture-corrective-baseline/isu); +assert.match(read("docs/BLENDER_WASM_CORRECTIVE_MIGRATION_PLAN.md"), /MIGRATION_SHADOW_ONLY/iu); +assert.equal(plan.tasks.find((task) => task.id === currentCorrectiveTask).ready, true); +process.stdout.write(`corrective-plan-ok tasks=${plan.tasks.length} capabilities=${matrix.entries.length} queue=${currentTask} parentNext=${parent.nextTask} corrective=${currentCorrectiveTask}\n`); diff --git a/tools/web/check-corrective-resign.mjs b/tools/web/check-corrective-resign.mjs new file mode 100644 index 00000000..9f62ef2e --- /dev/null +++ b/tools/web/check-corrective-resign.mjs @@ -0,0 +1,89 @@ +import assert from "node:assert/strict"; +import crypto from "node:crypto"; +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import { execFileSync } from "node:child_process"; +import { fileURLToPath } from "node:url"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../.."); +const arg = (name) => { const index = process.argv.indexOf(name); return index >= 0 ? process.argv[index + 1] : undefined; }; +const staged = path.resolve(root, arg("--staged-root") ?? "tests/golden/corrective/C0-002/staged"); +const reportPath = path.resolve(root, arg("--report") ?? "tests/golden/corrective/C0-002/resign-check.json"); +const read = (file) => fs.readFileSync(file, "utf8"); +const json = (file) => JSON.parse(read(file)); +const sha256 = (file) => crypto.createHash("sha256").update(fs.readFileSync(file)).digest("hex"); +const relative = (file) => path.relative(root, file).replaceAll(path.sep, "/"); +const check = []; +const ok = (name, value, detail = {}) => { assert.ok(value, name); check.push({ name, status: "PASS", ...detail }); }; + +const registryPath = path.join(staged, "completed-gap-tasks.candidate.json"); +const planPath = path.join(staged, "next-task-plan.candidate.json"); +const indexPath = path.join(staged, "task-index", "task-index.json"); +const catalogPath = path.join(staged, "task-index", "task-catalog.jsonl"); +const snapshotPath = path.join(staged, "source-snapshot", "snapshot-manifest.json"); +const registry = json(registryPath); +const plan = json(planPath); +const index = json(indexPath); +const snapshot = json(snapshotPath); +ok("registry-count", registry.length === 273, { value: registry.length }); +ok("registry-unique", new Set(registry).size === registry.length); +ok("plan-shape", plan.tasks.length === 6900 && plan.summary.completed === 273 && plan.summary.active === 1 && plan.firstTask === "M16-GAP-00274"); +ok("plan-source-hash", plan.sources.completions.sha256 === sha256(registryPath)); +ok("index-plan-hash", index.source.sha256 === sha256(planPath)); +ok("index-catalog-hash", index.catalog.sha256 === sha256(catalogPath)); +ok("index-active", index.activeTask === plan.firstTask); +ok("snapshot-nonempty", snapshot.files.length > 0, { value: snapshot.files.length }); + +const snapshotByPath = new Map(); +for (const file of snapshot.files) { + const source = path.join(root, file.path); + const copy = path.join(root, file.snapshotPath); + assert.equal(sha256(source), file.sha256, file.path); + assert.equal(sha256(copy), file.sha256, file.snapshotPath); + snapshotByPath.set(file.path, file.sha256); +} +check.push({ name: "snapshot-hashes", status: "PASS", files: snapshot.files.length, bytes: snapshot.files.reduce((sum, file) => sum + file.bytes, 0) }); + +const manifestRoot = path.join(staged, "resigned-manifests"); +const manifestTasks = fs.readdirSync(manifestRoot).filter((entry) => /^M(?:15|16)-/u.test(entry)).sort(); +const m16Tasks = manifestTasks.filter((entry) => /^M16-GAP-\d{5}$/u.test(entry)); +ok("resigned-manifest-count", m16Tasks.length === 274, { value: m16Tasks.length }); +let doneCount = 0; +for (const task of m16Tasks) { + const manifest = json(path.join(manifestRoot, task, "manifest.json")); + if (manifest.status === "done") doneCount += 1; + for (const artifact of Object.values(manifest.artifacts ?? {})) { + if (!artifact?.path || !artifact?.sha256) continue; + assert.equal(snapshotByPath.get(artifact.path), artifact.sha256, `${task}:${artifact.path}`); + } +} +ok("resigned-manifest-done-count", doneCount === 273, { value: doneCount }); +const rootParent = json(path.join(manifestRoot, "M15-03E", "manifest.json")); +ok("root-parent-repaired", rootParent.nextTask === "M16-GAP-00001"); + +const contextRoot = path.join(staged, "resigned-context"); +const contexts = fs.readdirSync(contextRoot).filter((entry) => /^M16-GAP-\d{5}$/u.test(entry)).sort(); +ok("repaired-context-count", contexts.length === 24, { value: contexts.length }); +for (const task of contexts) { + const context = json(path.join(contextRoot, task, "task-context.json")); + assert.equal(context.task, task); + assert.equal(context.parentTask, json(path.join(manifestRoot, task, "manifest.json")).parentTask); + const parent = json(path.join(manifestRoot, context.parentTask, "manifest.json")); + assert.equal(parent.nextTask, task, `${task}:parent-nextTask`); +} +check.push({ name: "repaired-context-links", status: "PASS", files: contexts.length }); + +const tempRoot = fs.mkdtempSync(path.join(os.tmpdir(), "corrective-resign-check-")); +const regenerated = path.join(tempRoot, "plan.json"); +try { + execFileSync(process.execPath, [path.join(root, "tools/web/generate-blender-next-task-plan.mjs"), regenerated, "--completion-path", registryPath], { cwd: root, stdio: "ignore" }); + ok("candidate-plan-deterministic", fs.readFileSync(regenerated).equals(fs.readFileSync(planPath))); +} finally { + fs.rmSync(tempRoot, { recursive: true, force: true }); +} + +const result = { schemaVersion: 1, operation: "CORRECTIVE_STATE_RECONCILIATION_RESIGN_CHECK", status: "PASS", queueMutation: false, stagedRoot: relative(staged), checks: check, artifactCount: snapshot.files.length, planTaskCount: plan.tasks.length, completedCount: doneCount, activeTask: plan.firstTask }; +fs.mkdirSync(path.dirname(reportPath), { recursive: true }); +fs.writeFileSync(reportPath, `${JSON.stringify(result, null, 2)}\n`); +process.stdout.write(`corrective-resign-check-ok files=${snapshot.files.length} manifests=${m16Tasks.length} contexts=${contexts.length} active=${plan.firstTask}\n`); diff --git a/tools/web/check-execution-control-plane.mjs b/tools/web/check-execution-control-plane.mjs new file mode 100644 index 00000000..8e47798a --- /dev/null +++ b/tools/web/check-execution-control-plane.mjs @@ -0,0 +1,141 @@ +import crypto from "node:crypto"; +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../.."); +const allowUnrunnable = process.argv.includes("--allow-unrunnable"); +const relative = (file) => path.relative(root, file).replaceAll(path.sep, "/"); +const read = (relativePath) => fs.readFileSync(path.join(root, relativePath), "utf8"); +const json = (relativePath) => JSON.parse(read(relativePath)); +const sha256 = (bytes) => { + return crypto.createHash("sha256").update(bytes).digest("hex"); +}; + +function parseQueue() { + const source = read("docs/EXECUTION_QUEUE.md"); + const currentTask = source.match(/\|\s*当前任务\s*\|\s*`([^`]+)`/u)?.[1]; + const parentManifest = source.match(/\|\s*parent manifest\s*\|\s*`([^`]+)`/iu)?.[1]; + const coverageTask = source.match(/\|\s*legacy coverage checkpoint\s*\|\s*`([^`]+)`/iu)?.[1] ?? currentTask; + const coverageParentManifest = source.match(/\|\s*legacy coverage parent\s*\|\s*`([^`]+)`/iu)?.[1] ?? (currentTask.startsWith("M") ? parentManifest : null); + if (!currentTask || !parentManifest || !coverageTask || !coverageParentManifest) throw new Error("queue pointer is incomplete"); + return { currentTask, parentManifest, coverageTask, coverageParentManifest }; +} + +function addIssue(issues, code, detail) { + issues.push({ code, detail }); +} + +const issues = []; +let queue = null; +let parent = null; +let index = null; +let catalog = []; +let plan = null; +let matrix = null; +let completed = []; + +try { + queue = parseQueue(); + const parentPath = path.join(root, queue.parentManifest); + if (!fs.existsSync(parentPath)) addIssue(issues, "PARENT_MANIFEST_MISSING", queue.parentManifest); + else { + parent = JSON.parse(fs.readFileSync(parentPath, "utf8")); + if (parent.nextTask !== queue.currentTask) addIssue(issues, "PARENT_NEXT_TASK_MISMATCH", `${parent.nextTask ?? "NONE"}!=${queue.currentTask}`); + } + + const capabilityIndex = queue.currentTask.startsWith("WBV2-"); + index = json(capabilityIndex ? "tests/golden/WBV2/task-index.json" : "tests/golden/M15-03A/task-index.json"); + if (index.activeTask !== queue.currentTask) addIssue(issues, "INDEX_ACTIVE_TASK_MISMATCH", `${index.activeTask}!=${queue.currentTask}`); + const catalogPath = path.join(root, index.catalog.path); + if (!fs.existsSync(catalogPath)) addIssue(issues, "CATALOG_MISSING", index.catalog.path); + else { + catalog = fs.readFileSync(catalogPath, "utf8").trimEnd().split("\n").filter(Boolean).map((line) => JSON.parse(line)); + const active = catalog.filter((entry) => entry.state === "active"); + if (active.length !== 1) addIssue(issues, "ACTIVE_TASK_COUNT", `count=${active.length}`); + else if (active[0].id !== queue.currentTask) addIssue(issues, "CATALOG_ACTIVE_TASK_MISMATCH", `${active[0].id}!=${queue.currentTask}`); + } + + plan = json("tests/golden/M15-03A/next-task-plan.json"); + matrix = json("docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json"); + completed = json("tests/golden/M15-03A/completed-gap-tasks.json"); +} catch (error) { + addIssue(issues, "CONTROL_PLANE_READ_ERROR", error instanceof Error ? error.message : String(error)); +} + +const active = catalog.find((entry) => entry.state === "active") ?? null; +let legacyCoverage = null; +try { + const legacyIndex = json("tests/golden/M15-03A/task-index.json"); + const legacyCatalog = fs.readFileSync(path.join(root, legacyIndex.catalog.path), "utf8").trimEnd().split("\n").filter(Boolean).map((line) => JSON.parse(line)); + legacyCoverage = legacyCatalog.find((entry) => entry.id === queue.coverageTask) ?? null; + if (!legacyCoverage) addIssue(issues, "LEGACY_COVERAGE_TASK_MISSING", queue.coverageTask); +} catch (error) { + addIssue(issues, "LEGACY_COVERAGE_INDEX_ERROR", error instanceof Error ? error.message : String(error)); +} +const legacySummary = plan?.summary ?? {}; +const capabilities = matrix?.entries ?? []; +const mappedGapIds = [...new Set(capabilities.flatMap((entry) => entry.sourceGaps ?? []))]; +const capabilityClusters = Object.fromEntries(capabilities.map((entry) => [entry.family, { + capabilityId: entry.capabilityId, + sourceGaps: (entry.sourceGaps ?? []).length, + parityLevel: entry.parityLevel, + targetParityLevel: entry.targetParityLevel, + lifecycleStatus: entry.lifecycleStatus, +}])); +const runnableInputs = active ? { + taskCard: fs.existsSync(path.join(root, "docs/tasks", `${active.id}.md`)), + capabilityTask: active.id.startsWith("WBV2-"), + fixture: active.id.startsWith("WBV2-") ? null : fs.existsSync(path.join(root, "tests/files/web/generated", `${active.id}-${active.gapId.replace(/[^A-Za-z0-9_.-]+/gu, "-")}.blend`)), + generator: active.id.startsWith("WBV2-") ? null : fs.existsSync(path.join(root, "tools/web/generated", `${active.id}.py`)), +} : null; +if (!allowUnrunnable && runnableInputs && (!runnableInputs.taskCard || (!runnableInputs.capabilityTask && (!runnableInputs.fixture || !runnableInputs.generator)))) { + addIssue(issues, "ACTIVE_TASK_NOT_RUNNABLE", JSON.stringify(runnableInputs)); +} + +const report = { + schemaVersion: 1, + operation: "BLENDER_WEB_EXECUTION_CONTROL_PLANE", + status: issues.length === 0 ? "PASS" : "BLOCKED", + authority: { + executionPointer: "docs/EXECUTION_QUEUE.md", + productCapabilities: "docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json", + legacyCoverage: "tests/golden/M15-03A/next-task-plan.json", + historicalEvidence: "tests/golden/corrective/", + }, + queue: queue ? { + currentTask: queue.currentTask, + parentManifest: queue.parentManifest, + parentTask: parent?.task ?? null, + parentNextTask: parent?.nextTask ?? null, + activeCatalogTask: active?.id ?? null, + legacyCoverageTask: queue.coverageTask, + legacyCoverageParentManifest: queue.coverageParentManifest, + legacyCoverageState: legacyCoverage?.state ?? null, + runnableInputs, + } : null, + efficiency: { + legacyGapTasks: legacySummary.taskCount ?? catalog.length, + legacyCompleted: completed.length, + legacyPending: legacySummary.pending ?? null, + capabilityClusters: capabilities.length, + mappedLegacyGaps: mappedGapIds.length, + averageGapsPerCapability: capabilities.length === 0 ? 0 : Number((mappedGapIds.length / capabilities.length).toFixed(2)), + productiveLane: capabilities.filter((entry) => entry.lifecycleStatus === "done" && ["L2", "L3", "L4", "L5"].includes(entry.parityLevel)).length, + rule: "one capability task may close multiple legacy cases; legacy cases remain regression coverage", + }, + capabilityClusters, + issues, + remediation: issues.map(({ code }) => ({ + PARENT_NEXT_TASK_MISMATCH: "repair generated queue state from the completion registry", + INDEX_ACTIVE_TASK_MISMATCH: "run generate-task-index.mjs after regenerating the plan", + CATALOG_ACTIVE_TASK_MISMATCH: "run generate-task-index.mjs; do not edit catalog offsets", + ACTIVE_TASK_COUNT: "leave exactly one active task in the generated catalog", + ACTIVE_TASK_NOT_RUNNABLE: "generate the task card and fixture/generator before Blender/WASM startup", + }[code] ?? "inspect the control-plane issue and preserve its evidence")), + allowUnrunnable, + inputDigest: sha256(JSON.stringify({ queue, parent: parent?.nextTask, active: active?.id, completed: completed.length, capabilities: capabilities.length })), +}; + +process.stdout.write(`${JSON.stringify(report)}\n`); +if (issues.length > 0) process.exitCode = 2; diff --git a/tools/web/check-execution-health.mjs b/tools/web/check-execution-health.mjs index b36bca57..ef0bceda 100644 --- a/tools/web/check-execution-health.mjs +++ b/tools/web/check-execution-health.mjs @@ -50,8 +50,11 @@ try { if (context.context.task !== task) add("TASK_CONTEXT_MISMATCH", `${context.context.task}!=${task}`); } - for (const issue of collectGeneratedGapPreflight({ root: repoRoot, task: requestedTask ?? queue.currentTask, entry })) { - add(issue.code, issue.detail); + const checkedTask = requestedTask ?? queue.currentTask; + if (/^M\d+-GAP-\d{5}$/u.test(checkedTask)) { + for (const issue of collectGeneratedGapPreflight({ root: repoRoot, task: checkedTask, entry })) { + add(issue.code, issue.detail); + } } } catch (error) { diff --git a/tools/web/check-generated-gap.mjs b/tools/web/check-generated-gap.mjs index 5d1c38d5..57f006a8 100644 --- a/tools/web/check-generated-gap.mjs +++ b/tools/web/check-generated-gap.mjs @@ -9,7 +9,7 @@ import { collectGeneratedGapPreflight, formatGeneratedGapPreflight } from "./gen const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../.."); const taskArgument = process.argv.indexOf("--task"); const task = taskArgument >= 0 ? process.argv[taskArgument + 1] : undefined; -verifyTaskIndex(); +verifyTaskIndex(task); const entry = readIndexedTask(task); const preflightIssues = collectGeneratedGapPreflight({ root, task, entry }); if (preflightIssues.length !== 0) { @@ -8204,6 +8204,85 @@ if (task === "M16-GAP-00275") { const report = { schemaVersion: 1, task, operation: "ASSET_CLEAR_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", libraryId: library.id, sourcePath: library.sourcePath, libraryStatus: library.status, dependencyIds: library.dependencyIds }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00276" }; const reportPath = path.join(root, "tests/golden/M16-GAP-00275/asset-clear-local-exact-report.json"); fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); process.stdout.write(`generated-gap-ok task=${task} library=${library.id} status=${library.status} poll=false operator=${desktop.operatorStatus} mainMutation=none desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); } +if (task === "M16-GAP-00276") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00276-operator-asset.clear_single.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00276/asset-clear-single-desktop-report.json"); fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-asset-clear-single-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); assert.equal(desktop.saveReopen, "EXACT"); assert.equal(desktop.poll, false); assert.equal(desktop.operatorStatus, "CANCELLED"); assert.equal(desktop.mainMutation, "NONE"); assert.deepEqual(desktop.after, desktop.before); + const engine = await factory({ wasmBinary }); const handle = engine._web_engine_create(); open(engine, handle, fs.readFileSync(fixture)); const before = snapshot(engine, handle); assert.equal(before.libraryStatus, "AVAILABLE"); assert.equal(before.libraries.length, 1); const library = before.libraries[0]; + assert.equal(library.id, `library:${desktop.before.name}`); assert.equal(library.name, desktop.before.name); assert.equal(library.sourcePath, "//WebGapAssetClearSingle.blend"); assert.equal(library.packed, false); assert.equal(library.status, "EXTERNAL_REQUIRED"); assert.equal(library.errorCode, "LINKED_LIBRARY_RESOURCE_REQUIRED"); assert.deepEqual(library.dependencyIds, []); assert.equal(library.readOnly, true); + const saved = output(engine, handle, engine._web_engine_save_blend, true); const reopened = engine._web_engine_create(); open(engine, reopened, saved); const after = snapshot(engine, reopened); assert.deepEqual(after.libraries, before.libraries); assert.equal(after.libraryStatus, before.libraryStatus); const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); const pointer = engine._malloc(malformed.byteLength); let result; try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } assert.notEqual(result, 0); assert.deepEqual(snapshot(engine, handle).libraries, before.libraries); engine._web_engine_destroy(handle); engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ASSET_CLEAR_SINGLE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", libraryId: library.id, sourcePath: library.sourcePath, libraryStatus: library.status, dependencyIds: library.dependencyIds }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00277" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00276/asset-clear-single-local-exact-report.json"); fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); process.stdout.write(`generated-gap-ok task=${task} library=${library.id} status=${library.status} poll=false operator=${desktop.operatorStatus} mainMutation=none desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00277") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00277-operator-asset.library_refresh.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00277/asset-library-refresh-desktop-report.json"); fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-asset-library-refresh-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); assert.equal(desktop.saveReopen, "EXACT"); assert.equal(desktop.poll, false); assert.equal(desktop.operatorStatus, "CANCELLED"); assert.equal(desktop.mainMutation, "NONE"); assert.deepEqual(desktop.after, desktop.before); + const engine = await factory({ wasmBinary }); const handle = engine._web_engine_create(); open(engine, handle, fs.readFileSync(fixture)); const before = snapshot(engine, handle); assert.equal(before.libraryStatus, "AVAILABLE"); assert.equal(before.libraries.length, 1); const library = before.libraries[0]; + assert.equal(library.id, `library:${desktop.before.name}`); assert.equal(library.name, desktop.before.name); assert.equal(library.sourcePath, "//WebGapAssetLibraryRefresh.blend"); assert.equal(library.packed, false); assert.equal(library.status, "EXTERNAL_REQUIRED"); assert.equal(library.errorCode, "LINKED_LIBRARY_RESOURCE_REQUIRED"); assert.deepEqual(library.dependencyIds, []); assert.equal(library.readOnly, true); + const saved = output(engine, handle, engine._web_engine_save_blend, true); const reopened = engine._web_engine_create(); open(engine, reopened, saved); const after = snapshot(engine, reopened); assert.deepEqual(after.libraries, before.libraries); assert.equal(after.libraryStatus, before.libraryStatus); const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); const pointer = engine._malloc(malformed.byteLength); let result; try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } assert.notEqual(result, 0); assert.deepEqual(snapshot(engine, handle).libraries, before.libraries); engine._web_engine_destroy(handle); engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ASSET_LIBRARY_REFRESH_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", libraryId: library.id, sourcePath: library.sourcePath, libraryStatus: library.status, dependencyIds: library.dependencyIds }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00278" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00277/asset-library-refresh-local-exact-report.json"); fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); process.stdout.write(`generated-gap-ok task=${task} library=${library.id} status=${library.status} poll=false operator=${desktop.operatorStatus} mainMutation=none desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00278") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00278-operator-asset.library_reload_listing.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00278/asset-library-reload-listing-desktop-report.json"); fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-asset-library-reload-listing-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); assert.equal(desktop.saveReopen, "EXACT"); assert.equal(desktop.poll, false); assert.equal(desktop.operatorStatus, "CANCELLED"); assert.equal(desktop.mainMutation, "NONE"); assert.deepEqual(desktop.after, desktop.before); + const engine = await factory({ wasmBinary }); const handle = engine._web_engine_create(); open(engine, handle, fs.readFileSync(fixture)); const before = snapshot(engine, handle); assert.equal(before.libraryStatus, "AVAILABLE"); assert.equal(before.libraries.length, 1); const library = before.libraries[0]; + assert.equal(library.id, `library:${desktop.before.name}`); assert.equal(library.name, desktop.before.name); assert.equal(library.sourcePath, "//WebGapAssetLibraryReloadListing.blend"); assert.equal(library.packed, false); assert.equal(library.status, "EXTERNAL_REQUIRED"); assert.equal(library.errorCode, "LINKED_LIBRARY_RESOURCE_REQUIRED"); assert.deepEqual(library.dependencyIds, []); assert.equal(library.readOnly, true); + const saved = output(engine, handle, engine._web_engine_save_blend, true); const reopened = engine._web_engine_create(); open(engine, reopened, saved); const after = snapshot(engine, reopened); assert.deepEqual(after.libraries, before.libraries); assert.equal(after.libraryStatus, before.libraryStatus); const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); const pointer = engine._malloc(malformed.byteLength); let result; try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } assert.notEqual(result, 0); assert.deepEqual(snapshot(engine, handle).libraries, before.libraries); engine._web_engine_destroy(handle); engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ASSET_LIBRARY_RELOAD_LISTING_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", libraryId: library.id, sourcePath: library.sourcePath, libraryStatus: library.status, dependencyIds: library.dependencyIds }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00279" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00278/asset-library-reload-listing-local-exact-report.json"); fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); process.stdout.write(`generated-gap-ok task=${task} library=${library.id} status=${library.status} poll=false operator=${desktop.operatorStatus} mainMutation=none desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00279") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00279-operator-asset.mark.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00279/asset-mark-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-asset-mark-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); assert.equal(desktop.poll, false); assert.equal(desktop.operatorStatus, "CANCELLED"); assert.equal(desktop.mainMutation, "NONE"); assert.deepEqual(desktop.after, desktop.before); assert.equal(desktop.before.assetMarked, true); + const engine = await factory({ wasmBinary }); const handle = engine._web_engine_create(); open(engine, handle, fs.readFileSync(fixture)); const before = snapshot(engine, handle); const object = before.nodes?.find((value) => value.id === "object:WebGapAssetMarkObject"); assert.ok(object); + assert.equal(object.assetData?.marked, true); assert.equal(object.assetData?.author, desktop.before.author); assert.equal(object.assetData?.description, desktop.before.description); assert.deepEqual(object.assetData?.tags, desktop.before.tags); + const saved = output(engine, handle, engine._web_engine_save_blend, true); const reopened = engine._web_engine_create(); open(engine, reopened, saved); const after = snapshot(engine, reopened).nodes?.find((value) => value.id === object.id); assert.deepEqual(after, object); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); const pointer = engine._malloc(malformed.byteLength); let result; try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } assert.notEqual(result, 0); assert.deepEqual(snapshot(engine, handle).nodes?.find((value) => value.id === object.id), object); engine._web_engine_destroy(handle); engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ASSET_MARK_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", objectId: object.id, assetData: object.assetData }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00280" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00279/asset-mark-local-exact-report.json"); fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); process.stdout.write(`generated-gap-ok task=${task} object=${object.id} marked=true operator=${desktop.operatorStatus} mainMutation=none desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00280") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00280-operator-asset.mark_single.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00280/asset-mark-single-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-asset-mark-single-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); assert.equal(desktop.poll, false); assert.equal(desktop.operatorStatus, "CANCELLED"); assert.equal(desktop.mainMutation, "NONE"); assert.deepEqual(desktop.after, desktop.before); assert.equal(desktop.before.assetMarked, true); + const engine = await factory({ wasmBinary }); const handle = engine._web_engine_create(); open(engine, handle, fs.readFileSync(fixture)); const before = snapshot(engine, handle); const object = before.nodes?.find((value) => value.id === "object:WebGapAssetMarkSingleObject"); assert.ok(object); + assert.equal(object.assetData?.marked, true); assert.equal(object.assetData?.author, desktop.before.author); assert.equal(object.assetData?.description, desktop.before.description); assert.deepEqual(object.assetData?.tags, desktop.before.tags); + const saved = output(engine, handle, engine._web_engine_save_blend, true); const reopened = engine._web_engine_create(); open(engine, reopened, saved); const after = snapshot(engine, reopened).nodes?.find((value) => value.id === object.id); assert.deepEqual(after, object); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); const pointer = engine._malloc(malformed.byteLength); let result; try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } assert.notEqual(result, 0); assert.deepEqual(snapshot(engine, handle).nodes?.find((value) => value.id === object.id), object); engine._web_engine_destroy(handle); engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ASSET_MARK_SINGLE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", objectId: object.id, assetData: object.assetData }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00281" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00280/asset-mark-single-local-exact-report.json"); fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); process.stdout.write(`generated-gap-ok task=${task} object=${object.id} marked=true operator=${desktop.operatorStatus} mainMutation=none desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} +if (task === "M16-GAP-00281") { + const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00281-operator-asset.open_containing_blend_file.blend"); + const desktopPath = path.join(root, "tests/golden/M16-GAP-00281/open-containing-desktop-report.json"); + fs.mkdirSync(path.dirname(desktopPath), { recursive: true }); + const run = spawnSync(process.env.BLENDER_BIN ?? path.join(root, "build_blender_5.2.0/bin/blender"), ["-b", "--factory-startup", "--python", path.join(root, "tools/web/check-action-open-containing-blend-file-desktop.py"), "--", fixture, desktopPath], { cwd: root, encoding: "utf8", maxBuffer: 8 * 1024 * 1024 }); + assert.equal(run.status, 0, `${run.stdout ?? ""}\n${run.stderr ?? ""}`); + const desktop = JSON.parse(fs.readFileSync(desktopPath, "utf8")); + assert.equal(desktop.saveReopen, "EXACT"); assert.equal(desktop.poll, false); assert.equal(desktop.operatorStatus, "CANCELLED"); assert.equal(desktop.mainMutation, "NONE"); assert.deepEqual(desktop.after, desktop.before); + const engine = await factory({ wasmBinary }); const handle = engine._web_engine_create(); open(engine, handle, fs.readFileSync(fixture)); const before = snapshot(engine, handle); + assert.equal(before.libraryStatus, "AVAILABLE"); assert.ok(Array.isArray(before.libraries)); assert.equal(before.libraries.length, 1); const library = before.libraries[0]; + assert.equal(library.id, `library:${desktop.before.name}`); assert.equal(library.name, desktop.before.name); assert.equal(library.sourcePath, "//WebGapOpenContaining.blend"); assert.equal(library.packed, false); assert.equal(library.status, "EXTERNAL_REQUIRED"); assert.equal(library.errorCode, "LINKED_LIBRARY_RESOURCE_REQUIRED"); assert.deepEqual(library.dependencyIds, []); assert.equal(library.readOnly, true); + const saved = output(engine, handle, engine._web_engine_save_blend, true); const reopened = engine._web_engine_create(); open(engine, reopened, saved); const after = snapshot(engine, reopened); assert.deepEqual(after.libraries, before.libraries); assert.equal(after.libraryStatus, before.libraryStatus); + const malformed = new Uint8Array([0x42, 0x4c, 0x45, 0x4e, 0x44, 0x45, 0x52]); const pointer = engine._malloc(malformed.byteLength); let result; try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } assert.notEqual(result, 0); assert.deepEqual(snapshot(engine, handle).libraries, before.libraries); engine._web_engine_destroy(handle); engine._web_engine_destroy(reopened); + const report = { schemaVersion: 1, task, operation: "ASSET_OPEN_CONTAINING_BLEND_FILE_LOCAL_EXACT", fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), poll: desktop.poll, operatorStatus: desktop.operatorStatus, mainMutation: desktop.mainMutation }, wasm: { status: "EXACT", libraryId: library.id, sourcePath: library.sourcePath, libraryStatus: library.status, dependencyIds: library.dependencyIds }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: "M16-GAP-00282" }; + const reportPath = path.join(root, "tests/golden/M16-GAP-00281/open-containing-local-exact-report.json"); fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); process.stdout.write(`generated-gap-ok task=${task} library=${library.id} status=${library.status} poll=false operator=${desktop.operatorStatus} mainMutation=none desktop=exact saveReopen=exact next=${report.nextTask}\n`); process.exit(0); +} if (task === "M16-GAP-00205") { const fixture = path.join(root, "tests/files/web/generated/M16-GAP-00205-operator-anim.separate_slots.blend"); const desktopPath = path.join(root, "tests/golden/M16-GAP-00205/anim-separate-slots-desktop-report.json"); diff --git a/tools/web/check-v2-handoff.mjs b/tools/web/check-v2-handoff.mjs new file mode 100644 index 00000000..f04ccd67 --- /dev/null +++ b/tools/web/check-v2-handoff.mjs @@ -0,0 +1,32 @@ +import assert from "node:assert/strict"; +import crypto from "node:crypto"; +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../.."); +const read = (file) => fs.readFileSync(path.join(root, file), "utf8"); +const sha256 = (file) => crypto.createHash("sha256").update(fs.readFileSync(path.join(root, file))).digest("hex"); +const queue = read("docs/EXECUTION_QUEUE.md"); +const requested = process.argv.indexOf("--task"); +const current = requested >= 0 ? process.argv[requested + 1] : queue.match(/\|\s*当前任务\s*\|\s*`([^`]+)`/u)?.[1]; +assert.match(current ?? "", /^WBV2-P\d-\d{3}$/u); +const currentCard = `docs/tasks/${current}.md`; +assert.ok(fs.existsSync(path.join(root, currentCard)), `${currentCard} must exist`); +const parentPath = requested >= 0 + ? `tests/golden/${JSON.parse(read(`tests/golden/${current}/manifest.json`)).parentTask}/manifest.json` + : queue.match(/\|\s*parent manifest\s*\|\s*`([^`]+)`/iu)?.[1]; +const currentManifestPath = `tests/golden/${current}/manifest.json`; +const currentManifest = fs.existsSync(path.join(root, currentManifestPath)) ? JSON.parse(read(currentManifestPath)) : null; +if (currentManifest) { + assert.equal(currentManifest.task, current); + assert.ok(["done", "in_progress", "blocked"].includes(currentManifest.status)); +} +const expectedParent = currentManifest?.parentTask ?? path.basename(path.dirname(parentPath ?? "")); +assert.equal(parentPath, `tests/golden/${expectedParent}/manifest.json`); +const parent = JSON.parse(read(parentPath)); +assert.equal(parent.nextTask, current); +for (const [name, artifact] of Object.entries(currentManifest?.artifacts ?? {})) { + assert.equal(sha256(artifact.path), artifact.sha256, `${name} hash drift: ${artifact.path}`); +} +process.stdout.write(`v2-handoff-ok task=${current} parent=${expectedParent} status=${currentManifest?.status ?? "awaiting_handoff"} artifacts=${Object.keys(currentManifest?.artifacts ?? {}).length}\n`); diff --git a/tools/web/check-v2-task-index.mjs b/tools/web/check-v2-task-index.mjs new file mode 100644 index 00000000..435c9bbf --- /dev/null +++ b/tools/web/check-v2-task-index.mjs @@ -0,0 +1,31 @@ +import assert from "node:assert/strict"; +import crypto from "node:crypto"; +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../.."); +const read = (relative) => fs.readFileSync(path.join(root, relative), "utf8"); +const json = (relative) => JSON.parse(read(relative)); +const sha256 = (bytes) => crypto.createHash("sha256").update(bytes).digest("hex"); +const plan = json("docs/BLENDER_WEB_PARITY_TASK_PLAN_V2.json"); +const index = json("tests/golden/WBV2/task-index.json"); +const catalogBytes = fs.readFileSync(path.join(root, index.catalog.path)); + +assert.equal(index.schemaVersion, 1); +assert.equal(index.operation, "BLENDER_WEB_CAPABILITY_TASK_INDEX"); +assert.equal(sha256(read(index.source.path)), index.source.sha256); +assert.equal(sha256(catalogBytes), index.catalog.sha256); +assert.equal(index.taskCount, plan.tasks.length); +const ready = plan.tasks.filter((task) => task.ready === true); +assert.equal(ready.length, 1); +assert.equal(index.activeTask, ready[0].id); +const lines = catalogBytes.toString("utf8").trimEnd().split("\n").filter(Boolean).map((line) => JSON.parse(line)); +assert.equal(lines.length, plan.tasks.length); +assert.equal(lines.filter((task) => task.state === "active").length, 1); +assert.equal(lines.find((task) => task.state === "active")?.id, index.activeTask); +for (const task of plan.tasks.filter((candidate) => candidate.ready || candidate.status === "done")) { + assert.ok(index.entries[task.id], `${task.id} must have an index entry`); + assert.ok(fs.existsSync(path.join(root, task.card)), `${task.id} card must exist before activation`); +} +process.stdout.write(`v2-task-index-ok tasks=${index.taskCount} active=${index.activeTask} catalog=${index.catalog.path}\n`); diff --git a/tools/web/check-web-parity-v2-plan.mjs b/tools/web/check-web-parity-v2-plan.mjs new file mode 100644 index 00000000..8d2fef2c --- /dev/null +++ b/tools/web/check-web-parity-v2-plan.mjs @@ -0,0 +1,89 @@ +import assert from "node:assert/strict"; +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../.."); +const read = (relative) => fs.readFileSync(path.join(root, relative), "utf8"); +const json = (relative) => JSON.parse(read(relative)); +const planPath = "docs/BLENDER_WEB_PARITY_TASK_PLAN_V2.json"; +const plan = json(planPath); +const checkpoint = plan.correctiveCheckpoint; +const handoff = json(checkpoint.handoff); +const queue = read("docs/EXECUTION_QUEUE.md"); +const queueTask = queue.match(/\|\s*当前任务\s*\|\s*`([^`]+)`/u)?.[1]; +const parentPath = queue.match(/\|\s*parent manifest\s*\|\s*`([^`]+)`/iu)?.[1]; +assert.ok(queueTask && parentPath, "legacy queue must expose current task and parent manifest"); +const parent = json(parentPath); + +function isCheckpointAncestor(checkpointTask) { + if (checkpointTask === queueTask) return true; + let cursor = parent; + const visited = new Set(); + while (cursor?.task && !visited.has(cursor.task)) { + visited.add(cursor.task); + if (cursor.task === checkpointTask) return true; + if (!cursor.parentTask) return false; + const manifestPath = path.join(root, "tests/golden", cursor.parentTask, "manifest.json"); + if (!fs.existsSync(manifestPath)) return false; + cursor = JSON.parse(fs.readFileSync(manifestPath, "utf8")); + } + return false; +} + +assert.equal(plan.schemaVersion, 1, "V2 plan schema must be 1"); +assert.equal(plan.planId, "BLENDER_WEB_PARITY_V2"); +assert.equal(plan.status, "ACTIVE_CAPABILITY_QUEUE"); +assert.equal(plan.authority, "queue_reactivated_after_owner_review"); +assert.equal(plan.executionPointer, "docs/EXECUTION_QUEUE.md"); +assert.equal(checkpoint.task, "C6-003"); +assert.equal(checkpoint.status, "active"); +assert.equal(checkpoint.queueMutation, true); +assert.equal(checkpoint.blocker, null); +assert.ok(isCheckpointAncestor(checkpoint.legacyTask), "V2 checkpoint must be current or an ancestor of the legacy queue"); +assert.ok(isCheckpointAncestor(checkpoint.legacyParentNextTask), "V2 parent checkpoint must be current or an ancestor of the legacy queue"); +assert.equal(parent.nextTask, queueTask); +assert.equal(handoff.task, checkpoint.task); +assert.equal(handoff.status, "in_progress"); +assert.equal(handoff.queueMutation, true); +assert.equal(handoff.nextCorrectiveTask, checkpoint.task); + +const readyTasks = plan.tasks.filter((task) => task.ready === true); +assert.equal(readyTasks.length, 1, "V2 plan must have exactly one ready task"); +assert.equal(readyTasks[0].id, queueTask, "V2 ready task must match the execution queue"); + +const taskIds = new Set(); +const tasksById = new Map(); +for (const task of plan.tasks) { + assert.match(task.id, /^WBV2-P[0-7]-\d{3}$/u, `${task.id} has invalid ID`); + assert.equal(taskIds.has(task.id), false, `${task.id} is duplicated`); + taskIds.add(task.id); + tasksById.set(task.id, task); + assert.ok(plan.gates.some((gate) => gate.id === task.gate), `${task.id} gate is missing`); + if (task.ready) assert.equal(task.status, "in_progress", `${task.id} ready task must be in_progress`); + assert.equal(task.queueMutationAllowed, false, `${task.id} cannot mutate queue`); + assert.ok(task.behavior && task.acceptance?.length && task.outputs?.length, `${task.id} contract is incomplete`); + for (const dependency of task.dependsOn ?? []) assert.ok(taskIds.has(dependency) || plan.tasks.some((candidate) => candidate.id === dependency), `${task.id} dependency is missing: ${dependency}`); +} +for (const wave of plan.waves) { + assert.ok(plan.gates.some((gate) => gate.id === wave.gate), `${wave.id} gate is missing`); + for (const taskId of wave.tasks) { + const task = tasksById.get(taskId); + assert.ok(task, `${wave.id} references unknown task ${taskId}`); + assert.equal(task.phase, wave.id, `${taskId} is assigned to the wrong wave`); + } +} + +const visiting = new Set(); +const visited = new Set(); +function visit(taskId) { + if (visiting.has(taskId)) throw new Error(`dependency cycle includes ${taskId}`); + if (visited.has(taskId)) return; + visiting.add(taskId); + for (const dependency of tasksById.get(taskId).dependsOn ?? []) visit(dependency); + visiting.delete(taskId); + visited.add(taskId); +} +for (const taskId of taskIds) visit(taskId); + +process.stdout.write(`web-parity-v2-plan-ok status=${plan.status} tasks=${plan.tasks.length} waves=${plan.waves.length} checkpoint=${checkpoint.task} queue=${queueTask} queueMutation=${checkpoint.queueMutation}\n`); diff --git a/tools/web/classify-corrective-legacy.mjs b/tools/web/classify-corrective-legacy.mjs new file mode 100644 index 00000000..0d84ebb1 --- /dev/null +++ b/tools/web/classify-corrective-legacy.mjs @@ -0,0 +1,106 @@ +import crypto from "node:crypto"; +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../.."); +const stagedRoot = path.resolve(root, process.argv[process.argv.indexOf("--staged-root") + 1] ?? "tests/golden/corrective/C0-002/staged"); +const outputRoot = path.resolve(root, process.argv[process.argv.indexOf("--output-root") + 1] ?? "tests/golden/corrective/C0-003"); +const read = (file) => fs.readFileSync(file, "utf8"); +const json = (file) => JSON.parse(read(file)); +const sha256 = (file) => crypto.createHash("sha256").update(fs.readFileSync(file)).digest("hex"); +const relative = (file) => path.relative(root, file).replaceAll(path.sep, "/"); +const arg = (name) => { const index = process.argv.indexOf(name); return index >= 0 ? process.argv[index + 1] : undefined; }; +const outputPath = (name) => path.join(outputRoot, name); + +const registry = json(path.join(stagedRoot, "completed-gap-tasks.candidate.json")); +const plan = json(path.join(stagedRoot, "next-task-plan.candidate.json")); +const planById = new Map(plan.tasks.map((task) => [task.id, task])); +const taskDirs = fs.readdirSync(path.join(stagedRoot, "resigned-manifests")).filter((entry) => /^M16-GAP-\d{5}$/u.test(entry)).filter((entry) => json(path.join(stagedRoot, "resigned-manifests", entry, "manifest.json")).status === "done").sort(); +const positiveToken = (value) => typeof value === "string" && value.length > 0 && !/(?:^|_)(?:NONE|CANCELLED|UNSUPPORTED|ALREADY|EMPTY|NOOP)(?:$|_)/u.test(value); +const reportPathFor = (manifest, name) => manifest.artifacts?.[name]?.path ? path.join(root, manifest.artifacts[name].path) : null; +const productionKeys = ["reader", "nativeStub", "api", "protocol", "sceneIrProtocol", "wasm", "wasmJs", "wasmPublic", "wasmJsPublic"]; +const capabilityFor = (gapId, ownerFamily, operation) => { + if (gapId?.startsWith("operator:asset.")) return "CAP:asset.catalog.operator"; + if (gapId?.startsWith("operator:anim.")) return "CAP:animation.operator"; + if (gapId?.startsWith("operator:armature.")) return "CAP:armature.operator"; + if (gapId?.startsWith("modifier:")) return "CAP:modifier.snapshot"; + if (gapId?.startsWith("datablock:")) return "CAP:datablock.read"; + return `CAP:${String(ownerFamily || operation || "legacy").toLowerCase()}`; +}; +const classify = ({ manifest, desktop, web, task }) => { + const desktopMutation = desktop?.mainMutation; + const desktopPositive = Boolean(desktop?.poll === true && desktop?.operatorStatus === "FINISHED" && positiveToken(desktopMutation)); + const wasmMutation = web?.wasm?.mainMutation ?? web?.wasm?.mutation ?? web?.wasm?.commandResult?.mainMutation ?? null; + const beforeAfterChanged = web?.wasm?.before !== undefined && web?.wasm?.after !== undefined && JSON.stringify(web.wasm.before) !== JSON.stringify(web.wasm.after); + const explicitAfterMutation = Boolean(web?.wasm?.after && Object.keys(web.wasm.after).some((key) => /(?:inserted|deleted|cleared|changed|added|removed|moved|duplicated|replaced|updated|set|assigned|unassigned|created|selected)/iu.test(key))); + const wasmPositiveMutation = positiveToken(wasmMutation) || beforeAfterChanged || explicitAfterMutation || (Number.isFinite(web?.wasm?.revisionAfter) && Number.isFinite(web?.wasm?.revisionBefore) && web.wasm.revisionAfter !== web.wasm.revisionBefore); + const saveReopen = web?.saveReopen ?? desktop?.saveReopen ?? "NOT_REPORTED"; + const negative = web?.negative && Object.keys(web.negative).length > 0; + const exact = (web?.status === "EXACT" || web?.desktop?.status === "EXACT" || web?.wasm?.status === "EXACT") && saveReopen === "EXACT"; + let completionClass = "BLOCKED"; + let evidenceLevel = "L0"; + let mappingState = "BLOCKED"; + let reason = "missing or non-authoritative mutation evidence"; + if (desktopPositive && wasmPositiveMutation && exact) { + completionClass = "FEATURE_PARITY"; + evidenceLevel = saveReopen === "EXACT" ? "L3" : "L2"; + mappingState = "CANDIDATE"; + reason = "desktop positive oracle and explicit WASM/Main mutation with persistence evidence"; + } else if (negative && !desktopPositive && !wasmPositiveMutation) { + completionClass = "NEGATIVE_BOUNDARY"; + evidenceLevel = exact ? "L1" : "L0"; + mappingState = "RETAINED_NEGATIVE"; + reason = "evidence is cancellation, unsupported, resource, or malformed-input boundary"; + } else if (exact && !desktopPositive && !wasmPositiveMutation) { + completionClass = web?.wasm && Object.keys(web.wasm).length > 1 ? "METADATA_ONLY" : "READ_COMPATIBILITY"; + evidenceLevel = Object.keys(web?.wasm ?? {}).length > 1 ? "L1" : "L0"; + mappingState = "CANDIDATE"; + reason = completionClass === "METADATA_ONLY" ? "exact snapshot fields without equivalent mutation" : "read/observe evidence without mutation"; + } + if (manifest.status !== "done") { + completionClass = "BLOCKED"; + mappingState = "BLOCKED"; + reason = "legacy manifest is not done"; + } + return { completionClass, evidenceLevel, mappingState, reason, desktopPositive, wasmPositiveMutation, readerChanged: Boolean(manifest.artifacts?.reader || manifest.artifacts?.nativeStub || manifest.artifacts?.api), wasmChanged: Boolean(manifest.artifacts?.wasm || manifest.artifacts?.wasmJs || manifest.artifacts?.wasmPublic || manifest.artifacts?.wasmJsPublic), saveReopen }; +}; + +const records = []; +for (const task of taskDirs) { + const manifestPath = path.join(stagedRoot, "resigned-manifests", task, "manifest.json"); + const manifest = json(manifestPath); + const taskPlan = planById.get(task); + const desktopPath = reportPathFor(manifest, "desktopReport"); + const webPath = reportPathFor(manifest, "webReport"); + const desktop = desktopPath && fs.existsSync(desktopPath) ? json(desktopPath) : null; + const web = webPath && fs.existsSync(webPath) ? json(webPath) : null; + const classification = classify({ manifest, desktop, web, task }); + const artifactPaths = [relative(manifestPath), desktopPath && relative(desktopPath), webPath && relative(webPath)].filter(Boolean); + for (const key of productionKeys) { + const pathValue = manifest.artifacts?.[key]?.path; + if (pathValue && fs.existsSync(path.join(root, pathValue))) artifactPaths.push(pathValue); + } + const sourceHashes = Object.fromEntries([...new Set(artifactPaths)].map((file) => [file, sha256(path.join(root, file))])); + const gapId = taskPlan?.gapId ?? null; + const candidateCapabilityId = capabilityFor(gapId, taskPlan?.ownerFamily, manifest.operation); + records.push({ task, gapId, evidenceLevel: classification.evidenceLevel, completionClass: classification.completionClass, desktopPositive: classification.desktopPositive, wasmPositiveMutation: classification.wasmPositiveMutation, readerChanged: classification.readerChanged, wasmChanged: classification.wasmChanged, saveReopen: classification.saveReopen, reason: classification.reason, candidateCapabilityId, coverageCapabilityIds: [candidateCapabilityId], mappingState: classification.mappingState, evidenceRefs: { manifest: relative(manifestPath), desktopReport: desktopPath ? relative(desktopPath) : null, webReport: webPath ? relative(webPath) : null, command: `node tools/web/check-generated-gap.mjs --task ${task}` }, sourceHashes }); +} + +const clusters = new Map(); +for (const record of records) { + const key = `${record.completionClass}:${record.candidateCapabilityId}`; + const value = clusters.get(key) ?? { clusterId: key, completionClass: record.completionClass, capabilityId: record.candidateCapabilityId, taskCount: 0, tasks: [] }; + value.taskCount += 1; + value.tasks.push(record.task); + clusters.set(key, value); +} +const classificationSource = { stagedRoot: relative(stagedRoot), registry: relative(path.join(stagedRoot, "completed-gap-tasks.candidate.json")), registrySha256: sha256(path.join(stagedRoot, "completed-gap-tasks.candidate.json")), plan: relative(path.join(stagedRoot, "next-task-plan.candidate.json")), planSha256: sha256(path.join(stagedRoot, "next-task-plan.candidate.json")) }; +const classification = { schemaVersion: 1, operation: "CORRECTIVE_LEGACY_273_CLASSIFICATION", status: records.length === 273 && records.every((record) => Object.values(record.sourceHashes).every(Boolean)) ? "PASS" : "BLOCKED", queueMutation: false, source: classificationSource, sourceHashes: { [classificationSource.registry]: classificationSource.registrySha256, [classificationSource.plan]: classificationSource.planSha256 }, inputDigest: crypto.createHash("sha256").update(JSON.stringify({ source: classificationSource, records })).digest("hex"), taskCount: records.length, records }; +const clusterSummary = { schemaVersion: 1, operation: "CORRECTIVE_LEGACY_CLUSTER_SUMMARY", status: "PASS", queueMutation: false, clusters: [...clusters.values()].map((cluster) => ({ ...cluster, tasks: cluster.tasks.sort() })).sort((a, b) => a.clusterId.localeCompare(b.clusterId)), counts: Object.fromEntries([...new Set(records.map((record) => record.completionClass))].sort().map((key) => [key, records.filter((record) => record.completionClass === key).length])) }; +const reportLines = ["# C0-003 Legacy Classification Report", "", `status: ${classification.status}`, `taskCount: ${records.length}`, "queueMutation: false", "", "Classification is fail-closed: only explicit desktop positive, explicit WASM/Main mutation, and persistence evidence can produce FEATURE_PARITY.", "", "| Class | Count |", "| --- | ---: |", ...Object.entries(clusterSummary.counts).map(([key, value]) => `| ${key} | ${value} |`), "", "| Task | Gap | Level | Class | Desktop | WASM mutation | Save/reopen | Mapping |", "| --- | --- | --- | --- | --- | --- | --- | --- |", ...records.map((record) => `| ${record.task} | ${record.gapId} | ${record.evidenceLevel} | ${record.completionClass} | ${record.desktopPositive} | ${record.wasmPositiveMutation} | ${record.saveReopen} | ${record.mappingState} |`), ""]; +fs.mkdirSync(outputRoot, { recursive: true }); +fs.writeFileSync(outputPath("legacy-gap-classification.json"), `${JSON.stringify(classification, null, 2)}\n`); +fs.writeFileSync(outputPath("cluster-summary.json"), `${JSON.stringify(clusterSummary, null, 2)}\n`); +fs.writeFileSync(outputPath("classification-report.md"), reportLines.join("\n")); +process.stdout.write(`corrective-classification-${classification.status.toLowerCase()} tasks=${records.length} clusters=${clusterSummary.clusters.length} output=${relative(outputRoot)}\n`); diff --git a/tools/web/generate-task-card.mjs b/tools/web/generate-task-card.mjs index 3f3deabd..6c8cd947 100644 --- a/tools/web/generate-task-card.mjs +++ b/tools/web/generate-task-card.mjs @@ -5,7 +5,7 @@ import { readIndexedTask, verifyTaskIndex, root } from './task-context-lib.mjs'; const taskArg = process.argv.indexOf('--task'); const task = taskArg >= 0 ? process.argv[taskArg + 1] : undefined; if (!task) throw new Error('usage: node tools/web/generate-task-card.mjs --task '); -verifyTaskIndex(); +verifyTaskIndex(task); const entry = readIndexedTask(task); if (!entry) throw new Error('unknown indexed task: ' + task); const cardPath = path.join(root, 'docs/tasks', task + '.md'); diff --git a/tools/web/generate-v2-task-index.mjs b/tools/web/generate-v2-task-index.mjs new file mode 100644 index 00000000..15ad2f46 --- /dev/null +++ b/tools/web/generate-v2-task-index.mjs @@ -0,0 +1,59 @@ +import crypto from "node:crypto"; +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../.."); +const planPath = path.join(root, "docs/BLENDER_WEB_PARITY_TASK_PLAN_V2.json"); +const outputDir = path.join(root, "tests/golden/WBV2"); +const catalogPath = path.join(outputDir, "task-catalog.jsonl"); +const indexPath = path.join(outputDir, "task-index.json"); +const planBytes = fs.readFileSync(planPath); +const plan = JSON.parse(planBytes); +const sha256 = (bytes) => crypto.createHash("sha256").update(bytes).digest("hex"); +const relative = (file) => path.relative(root, file).replaceAll(path.sep, "/"); + +const active = plan.tasks.filter((task) => task.ready === true && task.status === "in_progress"); +if (active.length !== 1) throw new Error(`V2 plan must have exactly one ready in_progress task; found ${active.length}`); + +const lines = []; +const entries = {}; +let offset = 0; +for (let index = 0; index < plan.tasks.length; index += 1) { + const task = plan.tasks[index]; + const compact = { + id: task.id, + gapId: task.parityId ?? `workflow:${task.title}`, + ownerFamily: task.owner, + sourceTask: task.phase, + state: task.status === "done" ? "completed" : task.ready === true ? "active" : "pending", + targetImplementationClass: task.implementationClass, + exitCriteria: task.acceptance, + }; + const line = `${JSON.stringify(compact)}\n`; + const length = Buffer.byteLength(line); + lines.push(line); + entries[task.id] = { + line: index, + offset, + length, + previous: task.dependsOn.at(-1) ?? null, + next: plan.tasks[index + 1]?.id ?? null, + }; + offset += length; +} + +fs.mkdirSync(outputDir, { recursive: true }); +const catalogBytes = Buffer.from(lines.join("")); +fs.writeFileSync(catalogPath, catalogBytes); +const index = { + schemaVersion: 1, + operation: "BLENDER_WEB_CAPABILITY_TASK_INDEX", + source: { path: relative(planPath), sha256: sha256(planBytes) }, + catalog: { path: relative(catalogPath), sha256: sha256(catalogBytes) }, + taskCount: plan.tasks.length, + activeTask: active[0].id, + entries, +}; +fs.writeFileSync(indexPath, `${JSON.stringify(index)}\n`); +process.stdout.write(`v2-task-index-generated tasks=${plan.tasks.length} active=${index.activeTask} output=${relative(indexPath)}\n`); diff --git a/tools/web/generated/M16-GAP-00276.py b/tools/web/generated/M16-GAP-00276.py new file mode 100644 index 00000000..0b3dca3a --- /dev/null +++ b/tools/web/generated/M16-GAP-00276.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +LIBRARY_NAME = "WebGapAssetClearSingle.blend" +OBJECT_NAME = "WebGapAssetClearSingleObject" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00276.py -- OUTPUT") + output = pathlib.Path(arguments[0]).resolve() + source = output.with_name(LIBRARY_NAME) + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAssetClearSingleMesh") + mesh.from_pydata([(-1.0, 0.0, 0.0), (1.0, 0.0, 0.0), (0.0, 1.0, 0.0)], [], [(0, 1, 2)]) + obj = bpy.data.objects.new(OBJECT_NAME, mesh) + bpy.context.scene.collection.objects.link(obj) + bpy.ops.wm.save_as_mainfile(filepath=str(source), check_existing=False, compress=True) + bpy.ops.wm.read_factory_settings(use_empty=True) + with bpy.data.libraries.load(str(source), link=True) as (data_from, data_to): + if OBJECT_NAME not in data_from.objects: + raise RuntimeError("asset-clear-single source object is missing") + data_to.objects = [OBJECT_NAME] + linked = data_to.objects[0] + if linked is None: + raise RuntimeError("asset-clear-single linked object is missing") + bpy.context.scene.collection.objects.link(linked) + bpy.ops.wm.save_as_mainfile(filepath=str(output), check_existing=False, compress=True) + + +if __name__ == "__main__": + main() diff --git a/tools/web/generated/M16-GAP-00277.py b/tools/web/generated/M16-GAP-00277.py new file mode 100644 index 00000000..70c2f1d2 --- /dev/null +++ b/tools/web/generated/M16-GAP-00277.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +LIBRARY_NAME = "WebGapAssetLibraryRefresh.blend" +OBJECT_NAME = "WebGapAssetLibraryRefreshObject" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00277.py -- OUTPUT") + output = pathlib.Path(arguments[0]).resolve() + source = output.with_name(LIBRARY_NAME) + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAssetLibraryRefreshMesh") + mesh.from_pydata([(-1.0, 0.0, 0.0), (1.0, 0.0, 0.0), (0.0, 1.0, 0.0)], [], [(0, 1, 2)]) + obj = bpy.data.objects.new(OBJECT_NAME, mesh) + bpy.context.scene.collection.objects.link(obj) + bpy.ops.wm.save_as_mainfile(filepath=str(source), check_existing=False, compress=True) + bpy.ops.wm.read_factory_settings(use_empty=True) + with bpy.data.libraries.load(str(source), link=True) as (data_from, data_to): + if OBJECT_NAME not in data_from.objects: + raise RuntimeError("asset-library-refresh source object is missing") + data_to.objects = [OBJECT_NAME] + linked = data_to.objects[0] + if linked is None: + raise RuntimeError("asset-library-refresh linked object is missing") + bpy.context.scene.collection.objects.link(linked) + bpy.ops.wm.save_as_mainfile(filepath=str(output), check_existing=False, compress=True) + + +if __name__ == "__main__": + main() diff --git a/tools/web/generated/M16-GAP-00278.py b/tools/web/generated/M16-GAP-00278.py new file mode 100644 index 00000000..ff32716a --- /dev/null +++ b/tools/web/generated/M16-GAP-00278.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +LIBRARY_NAME = "WebGapAssetLibraryReloadListing.blend" +OBJECT_NAME = "WebGapAssetLibraryReloadListingObject" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00278.py -- OUTPUT") + output = pathlib.Path(arguments[0]).resolve() + source = output.with_name(LIBRARY_NAME) + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new("WebGapAssetLibraryReloadListingMesh") + mesh.from_pydata([(-1.0, 0.0, 0.0), (1.0, 0.0, 0.0), (0.0, 1.0, 0.0)], [], [(0, 1, 2)]) + obj = bpy.data.objects.new(OBJECT_NAME, mesh) + bpy.context.scene.collection.objects.link(obj) + bpy.ops.wm.save_as_mainfile(filepath=str(source), check_existing=False, compress=True) + bpy.ops.wm.read_factory_settings(use_empty=True) + with bpy.data.libraries.load(str(source), link=True) as (data_from, data_to): + if OBJECT_NAME not in data_from.objects: + raise RuntimeError("asset-library-reload-listing source object is missing") + data_to.objects = [OBJECT_NAME] + linked = data_to.objects[0] + if linked is None: + raise RuntimeError("asset-library-reload-listing linked object is missing") + bpy.context.scene.collection.objects.link(linked) + bpy.ops.wm.save_as_mainfile(filepath=str(output), check_existing=False, compress=True) + + +if __name__ == "__main__": + main() diff --git a/tools/web/generated/M16-GAP-00279.py b/tools/web/generated/M16-GAP-00279.py new file mode 100644 index 00000000..b62540c3 --- /dev/null +++ b/tools/web/generated/M16-GAP-00279.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +OBJECT_NAME = "WebGapAssetMarkObject" +MESH_NAME = "WebGapAssetMarkMesh" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit( + "usage: blender -b --factory-startup --python M16-GAP-00279.py -- OUTPUT" + ) + output = pathlib.Path(arguments[0]).resolve() + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new(MESH_NAME) + mesh.from_pydata(((-1.0, 0.0, 0.0), (1.0, 0.0, 0.0), (0.0, 1.0, 0.0)), (), ((0, 1, 2),)) + obj = bpy.data.objects.new(OBJECT_NAME, mesh) + bpy.context.scene.collection.objects.link(obj) + + # Background mode has no editor ID context for the operator. Seed the persisted asset record + # with the same data API used by Blender's asset system. + obj.asset_mark() + obj.asset_data.author = "M16 Fixture" + obj.asset_data.description = "Asset mark operator fixture" + obj.asset_data.tags.new("operator-mark") + + bpy.ops.wm.save_as_mainfile(filepath=str(output), check_existing=False, compress=True) + + +if __name__ == "__main__": + main() diff --git a/tools/web/generated/M16-GAP-00280.py b/tools/web/generated/M16-GAP-00280.py new file mode 100644 index 00000000..1ca7f958 --- /dev/null +++ b/tools/web/generated/M16-GAP-00280.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +OBJECT_NAME = "WebGapAssetMarkSingleObject" +MESH_NAME = "WebGapAssetMarkSingleMesh" + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit( + "usage: blender -b --factory-startup --python M16-GAP-00280.py -- OUTPUT" + ) + output = pathlib.Path(arguments[0]).resolve() + bpy.ops.wm.read_factory_settings(use_empty=True) + mesh = bpy.data.meshes.new(MESH_NAME) + mesh.from_pydata(((-1.0, 0.0, 0.0), (1.0, 0.0, 0.0), (0.0, 1.0, 0.0)), (), ((0, 1, 2),)) + obj = bpy.data.objects.new(OBJECT_NAME, mesh) + bpy.context.scene.collection.objects.link(obj) + + # Background mode has no editor ID context; seed the persisted single-asset record. + obj.asset_mark() + obj.asset_data.author = "M16 Fixture" + obj.asset_data.description = "Asset mark single operator fixture" + obj.asset_data.tags.new("operator-mark-single") + + bpy.ops.wm.save_as_mainfile(filepath=str(output), check_existing=False, compress=True) + + +if __name__ == "__main__": + main() diff --git a/tools/web/generated/M16-GAP-00281.py b/tools/web/generated/M16-GAP-00281.py new file mode 100644 index 00000000..5a032e3d --- /dev/null +++ b/tools/web/generated/M16-GAP-00281.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 +import pathlib +import sys + +import bpy + + +LIBRARY_NAME = "WebGapOpenContaining.blend" +OBJECT_NAME = "WebGapOpenContainingObject" + + +def reset(): + bpy.ops.wm.read_factory_settings(use_empty=True) + + +def create_source(path): + reset() + mesh = bpy.data.meshes.new("WebGapOpenContainingMesh") + mesh.from_pydata([(-1.0, 0.0, 0.0), (1.0, 0.0, 0.0), (0.0, 1.0, 0.0)], [], [(0, 1, 2)]) + obj = bpy.data.objects.new(OBJECT_NAME, mesh) + bpy.context.scene.collection.objects.link(obj) + bpy.ops.wm.save_as_mainfile(filepath=str(path), check_existing=False, compress=True) + + +def create_fixture(output): + source = output.with_name(LIBRARY_NAME) + create_source(source) + reset() + with bpy.data.libraries.load(str(source), link=True) as (data_from, data_to): + if OBJECT_NAME not in data_from.objects: + raise RuntimeError("open-containing source object is missing") + data_to.objects = [OBJECT_NAME] + linked = data_to.objects[0] + if linked is None: + raise RuntimeError("open-containing linked object is missing") + bpy.context.scene.collection.objects.link(linked) + bpy.ops.wm.save_as_mainfile(filepath=str(output), check_existing=False, compress=True) + + +def main(): + arguments = sys.argv[sys.argv.index("--") + 1 :] + if len(arguments) != 1: + raise SystemExit("usage: blender -b --factory-startup --python M16-GAP-00281.py -- OUTPUT") + output = pathlib.Path(arguments[0]).resolve() + output.parent.mkdir(parents=True, exist_ok=True) + create_fixture(output) + + +if __name__ == "__main__": + main() diff --git a/tools/web/reactivate-legacy-queue.mjs b/tools/web/reactivate-legacy-queue.mjs new file mode 100644 index 00000000..a7407fc0 --- /dev/null +++ b/tools/web/reactivate-legacy-queue.mjs @@ -0,0 +1,102 @@ +import assert from "node:assert/strict"; +import crypto from "node:crypto"; +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../.."); +const queuePath = path.join(root, "docs/EXECUTION_QUEUE.md"); +const reviewPath = path.join(root, "tests/golden/corrective/C6-003/owner-review.json"); +const dryRunPath = path.join(root, "tests/golden/corrective/C6-003/queue-reactivation-dry-run.json"); +const writePreviewPath = path.join(root, "tests/golden/corrective/C6-003/queue-reactivation-write-preview.json"); +const currentManifestPath = path.join(root, "tests/golden/M16-GAP-00276/manifest.json"); +const currentStatusPath = path.join(root, "docs/status/M16-GAP-00276.md"); +const completionPath = path.join(root, "tests/golden/M15-03A/completed-gap-tasks.json"); +const nextPlanPath = path.join(root, "tests/golden/M15-03A/next-task-plan.json"); +const catalogPath = path.join(root, "tests/golden/M15-03A/task-catalog.jsonl"); +const indexPath = path.join(root, "tests/golden/M15-03A/task-index.json"); +const evidenceRoot = path.join(root, "tests/golden/corrective/C6-003"); +const relative = (file) => path.relative(root, file).replaceAll(path.sep, "/"); +const sha256 = (bytes) => crypto.createHash("sha256").update(bytes).digest("hex"); +const readJson = (file) => JSON.parse(fs.readFileSync(file, "utf8")); +const writeJson = (file, value) => fs.writeFileSync(file, `${JSON.stringify(value, null, 2)}\n`); +const write = process.argv.includes("--write"); +if (!write) throw new Error("queue reactivation is write-only after review; pass --write explicitly"); + +const review = readJson(reviewPath); +assert.equal(review.task, "C6-003"); +assert.equal(review.status, "APPROVED"); +assert.equal(review.authorization?.approved, true); +assert.equal(review.decision?.allowQueueMutation, true); +assert.equal(review.decision?.targetTask, "M16-GAP-00277"); + +const dryRunBytes = fs.readFileSync(dryRunPath); +const writePreviewBytes = fs.readFileSync(writePreviewPath); +assert.equal(sha256(dryRunBytes), review.reviewedEvidence.dryRun.sha256); +assert.equal(sha256(writePreviewBytes), review.reviewedEvidence.writePreview.sha256); +assert.deepEqual(dryRunBytes, writePreviewBytes, "dry-run and write-preview bytes differ"); +const dryRun = JSON.parse(dryRunBytes); +assert.equal(dryRun.status, "BLOCKED_OWNER_REVIEW"); +assert.equal(dryRun.queueMutation, false); +assert.equal(dryRun.legacyQueue.currentTask, "M16-GAP-00276"); +assert.equal(dryRun.legacyQueue.parentManifest, "tests/golden/M16-GAP-00275/manifest.json"); + +const currentManifest = readJson(currentManifestPath); +assert.equal(currentManifest.task, "M16-GAP-00276"); +assert.equal(currentManifest.status, "done", "complete the focused legacy task before queue write"); +assert.equal(currentManifest.nextTask, "M16-GAP-00277"); +assert.match(fs.readFileSync(currentStatusPath, "utf8"), /^status:\s*done\s*$/mu); +assert.ok(readJson(completionPath).includes("operator:asset.clear_single"), "completion registry is not closed"); +const nextPlan = readJson(nextPlanPath); +assert.equal(nextPlan.firstTask, "M16-GAP-00277"); +assert.equal(nextPlan.tasks.find((entry) => entry.id === "M16-GAP-00276")?.state, "completed"); +assert.equal(nextPlan.tasks.find((entry) => entry.id === "M16-GAP-00277")?.state, "active"); +const taskIndex = readJson(indexPath); +assert.equal(taskIndex.activeTask, "M16-GAP-00277"); +const catalogRows = fs.readFileSync(catalogPath, "utf8").trimEnd().split("\n").map((line) => JSON.parse(line)); +assert.equal(catalogRows.find((entry) => entry.id === "M16-GAP-00276")?.state, "completed"); +assert.equal(catalogRows.find((entry) => entry.id === "M16-GAP-00277")?.state, "active"); + +const queueBefore = fs.readFileSync(queuePath); +assert.equal(sha256(queueBefore), review.reviewedEvidence.protectedHashes["docs/EXECUTION_QUEUE.md"]); +const parentManifestPath = path.join(root, "tests/golden/M16-GAP-00275/manifest.json"); +assert.equal(sha256(fs.readFileSync(parentManifestPath)), review.reviewedEvidence.protectedHashes["tests/golden/M16-GAP-00275/manifest.json"]); +const queueSource = queueBefore.toString("utf8"); +assert.match(queueSource, /\|\s*当前任务\s*\|\s*`M16-GAP-00276`/u); +assert.match(queueSource, /\|\s*parent manifest\s*\|\s*`tests\/golden\/M16-GAP-00275\/manifest\.json`/u); +const queueAfter = queueSource + .replace("| 当前任务 | `M16-GAP-00276`", "| 当前任务 | `M16-GAP-00277`") + .replace("| parent manifest | `tests/golden/M16-GAP-00275/manifest.json`", "| parent manifest | `tests/golden/M16-GAP-00276/manifest.json`") + .replace("| 任务卡 | [`tasks/M16-GAP-00276.md`](tasks/M16-GAP-00276.md)", "| 任务卡 | [`tasks/M16-GAP-00277.md`](tasks/M16-GAP-00277.md)") + .replace("| 专项验收 | `npm --prefix web run test:generated-gap -- --task M16-GAP-00276`", "| 专项验收 | `npm --prefix web run test:generated-gap -- --task M16-GAP-00277`"); +assert.notEqual(queueAfter, queueSource); +assert.match(queueAfter, /\|\s*当前任务\s*\|\s*`M16-GAP-00277`/u); +assert.match(queueAfter, /\|\s*parent manifest\s*\|\s*`tests\/golden\/M16-GAP-00276\/manifest\.json`/u); + +const beforePath = path.join(evidenceRoot, "queue-before.md"); +const afterPath = path.join(evidenceRoot, "queue-after.md"); +fs.writeFileSync(beforePath, queueBefore); +fs.writeFileSync(afterPath, queueAfter); +const temporary = `${queuePath}.c6-003-${process.pid}.tmp`; +try { + fs.writeFileSync(temporary, queueAfter, { mode: fs.statSync(queuePath).mode }); + fs.renameSync(temporary, queuePath); +} finally { + if (fs.existsSync(temporary)) fs.rmSync(temporary); +} +const observedAfter = fs.readFileSync(queuePath); +assert.deepEqual(observedAfter, Buffer.from(queueAfter)); +const receipt = { + schemaVersion: 1, + task: "C6-003", + operation: "CORRECTIVE_QUEUE_REACTIVATION_WRITE", + status: "APPLIED", + queueMutation: true, + authorization: { review: relative(reviewPath), approved: true }, + before: { path: relative(beforePath), sha256: sha256(queueBefore), currentTask: "M16-GAP-00276", parentManifest: "tests/golden/M16-GAP-00275/manifest.json" }, + after: { path: relative(afterPath), sha256: sha256(observedAfter), currentTask: "M16-GAP-00277", parentManifest: "tests/golden/M16-GAP-00276/manifest.json" }, + changedFields: ["currentTask", "parentManifest", "taskCard", "focusedCommand"], + rollback: { action: "restore before.path atomically", source: relative(beforePath) }, +}; +writeJson(path.join(evidenceRoot, "queue-reactivation-write-receipt.json"), receipt); +process.stdout.write(`queue-reactivation-ok task=C6-003 queue=M16-GAP-00277 before=${receipt.before.sha256} after=${receipt.after.sha256}\n`); diff --git a/tools/web/reconcile-corrective-resign.mjs b/tools/web/reconcile-corrective-resign.mjs new file mode 100644 index 00000000..c19be00c --- /dev/null +++ b/tools/web/reconcile-corrective-resign.mjs @@ -0,0 +1,244 @@ +import crypto from "node:crypto"; +import fs from "node:fs"; +import path from "node:path"; +import { execFileSync } from "node:child_process"; +import { fileURLToPath } from "node:url"; +import { buildTaskContext } from "./task-context-lib.mjs"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../.."); +const correctiveRoot = path.join(root, "tests/golden/corrective"); +const read = (file) => fs.readFileSync(file, "utf8"); +const json = (file) => JSON.parse(read(file)); +const sha256 = (file) => crypto.createHash("sha256").update(fs.readFileSync(file)).digest("hex"); +const digest = (value) => crypto.createHash("sha256").update(JSON.stringify(value)).digest("hex"); +const relative = (file) => path.relative(root, file).replaceAll(path.sep, "/"); +const inside = (file, parent) => file === parent || file.startsWith(`${parent}${path.sep}`); + +function arg(name) { + const index = process.argv.indexOf(name); + return index >= 0 ? process.argv[index + 1] : undefined; +} + +const evidenceRootArg = arg("--evidence-root"); +const outputRootArg = arg("--output-root"); +const reportArg = arg("--report"); +const approved = process.argv.includes("--approve-current-worktree"); +if (!evidenceRootArg || !outputRootArg || !reportArg || !approved) { + throw new Error("usage: node tools/web/reconcile-corrective-resign.mjs --evidence-root tests/golden --output-root tests/golden/corrective/C0-002/staged --report path --approve-current-worktree"); +} + +const evidenceRoot = path.resolve(root, evidenceRootArg); +const outputRoot = path.resolve(root, outputRootArg); +const reportPath = path.resolve(root, reportArg); +if (!inside(evidenceRoot, root) || !inside(outputRoot, correctiveRoot) || !inside(reportPath, correctiveRoot)) { + throw new Error("evidence, output and report paths are outside the allowed repository roots"); +} + +const queuePath = path.join(root, "docs/EXECUTION_QUEUE.md"); +const queue = read(queuePath); +const queueTask = queue.match(/\|\s*当前任务\s*\|\s*`([^`]+)`/u)?.[1]; +const parentManifestPath = queue.match(/\|\s*parent manifest\s*\|\s*`([^`]+)`/iu)?.[1]; +if (!queueTask || !parentManifestPath) throw new Error("queue must declare current task and parent manifest"); +const parentManifest = json(path.join(root, parentManifestPath)); +const planPath = path.join(root, "tests/golden/M15-03A/next-task-plan.json"); +const plan = json(planPath); +const taskToGap = new Map(plan.tasks.map((task) => [task.id, task.gapId])); + +const issueCounts = new Map(); +const issueTasks = new Map(); +const issuePaths = new Map(); +const issues = []; +const addIssue = (code, fields = {}) => { + issues.push({ code, ...fields }); + issueCounts.set(code, (issueCounts.get(code) ?? 0) + 1); + if (fields.task) { + const values = issueTasks.get(code) ?? new Set(); + values.add(fields.task); + issueTasks.set(code, values); + } + if (fields.path) { + const values = issuePaths.get(code) ?? new Set(); + values.add(fields.path); + issuePaths.set(code, values); + } +}; + +const taskDirs = fs.readdirSync(evidenceRoot, { withFileTypes: true }) + .filter((entry) => entry.isDirectory() && /^M16-GAP-\d{5}$/u.test(entry.name)) + .map((entry) => entry.name) + .sort(); +const records = []; +const resignedManifests = []; +const repairedContexts = []; +const repairedParents = []; +const snapshotPaths = new Set(); + +function taskCardFields(task) { + const cardPath = path.join(root, "docs/tasks", `${task}.md`); + const source = fs.existsSync(cardPath) ? read(cardPath) : ""; + const get = (name) => source.match(new RegExp(`^[-*]?\\s*\\x60?${name}\\x60?\\s*[::]\\s*\\x60?([^\\n\\x60]+)`, "imu"))?.[1]?.trim(); + return { source, path: cardPath, task: get("task"), parent: get("parent"), status: get("status"), gap: get("gap"), ownerFamily: get("ownerFamily"), implementationClass: get("targetImplementationClass") }; +} + +function syntheticContext(task, manifest, parent) { + const fields = taskCardFields(task); + const entry = plan.tasks.find((value) => value.id === task); + const taskPath = fields.path; + const parentPath = path.join(root, "tests/golden", parent.task, "manifest.json"); + const parentStatusPath = path.join(root, "docs/status", `${parent.task}.md`); + const fixture = entry?.fixture?.path ?? null; + const context = { + schemaVersion: 1, + task, + parentTask: manifest.parentTask, + status: fields.status ?? entry?.state ?? "pending", + goal: fields.source.match(/^##\s+目标\s*\n([\s\S]*?)(?=^##\s|$)/mu)?.[1].trim() ?? `完成 ${entry?.gapId ?? task} 的最小可观察切片`, + scope: { + gap: fields.gap ?? entry?.gapId ?? "NOT_APPLICABLE", + ownerFamily: fields.ownerFamily ?? entry?.ownerFamily ?? "NOT_APPLICABLE", + implementationClass: fields.implementationClass ?? entry?.targetImplementationClass ?? "NOT_APPLICABLE", + }, + commands: [entry?.desktopCommand, entry?.webCommand, entry?.comparator].filter(Boolean), + inputPaths: [], + inputSelection: { schemaVersion: 1, limits: { maxFiles: 12, evidenceBytes: 8192, contextRemainingBytes: 0, contextRemainingTokens: 0 }, source: { bytes: Buffer.byteLength(queue) + Buffer.byteLength(fields.source) + Buffer.byteLength(read(parentPath)), tokens: 0 }, selected: [], excluded: fixture ? [{ path: fixture, bytes: null, reason: "EVIDENCE_BYTE_BUDGET" }] : [], totals: { files: 0, bytes: 0, tokens: 0 } }, + exitCriteria: entry?.exitCriteria ?? ["focused command exits 0", "report and manifest are hash-bound"], + nextTask: manifest.nextTask ?? entry?.id ?? null, + sourceDocuments: { queue: relative(queuePath), taskCard: relative(taskPath), taskIndex: "tests/golden/M15-03A/task-index.json", parentManifest: relative(parentPath), parentStatus: fs.existsSync(parentStatusPath) ? relative(parentStatusPath) : "NOT_APPLICABLE" }, + readPolicy: { required: [relative(queuePath), relative(taskPath), relative(parentPath), fs.existsSync(parentStatusPath) ? relative(parentStatusPath) : "NOT_APPLICABLE"], machineOnly: ["tests/golden/M15-03A/task-index.json", "tests/golden/M15-03A/task-catalog.jsonl"], optionalByNeed: [], forbiddenByDefault: [] }, + parent: { manifest: { schemaVersion: parent.schemaVersion, task: parent.task, parentTask: parent.parentTask, status: parent.status ?? "done", nextTask: task, artifactCount: Object.keys(parent.artifacts ?? {}).length }, statusSummary: fs.existsSync(parentStatusPath) ? read(parentStatusPath).split("\n").filter(Boolean).slice(0, 8) : [] }, + budgets: { queueBytes: 4096, taskBytes: 8192, parentManifestBytes: 24576, parentStatusBytes: 6144, evidenceFiles: 12, evidenceBytes: 8192, contextTokens: 3500, contextEnvelopeTokens: 1024, taskLines: fields.source ? fields.source.split("\n").length : 0, taskTokens: Math.ceil(Buffer.byteLength(fields.source) / 4) }, + }; + return context; +} + +for (const task of taskDirs) { + const directory = path.join(evidenceRoot, task); + const manifestPath = path.join(directory, "manifest.json"); + const manifest = json(manifestPath); + const statusPath = path.join(root, "docs/status", `${task}.md`); + const contextPath = path.join(directory, "task-context.json"); + if (!fs.existsSync(statusPath)) addIssue("MISSING_STATUS", { task }); + if (!fs.existsSync(contextPath)) addIssue("MISSING_TASK_CONTEXT", { task, repaired: true }); + const candidate = structuredClone(manifest); + const drift = []; + for (const artifact of Object.values(candidate.artifacts ?? {})) { + if (!artifact?.path || !artifact?.sha256) continue; + const artifactPath = path.join(root, artifact.path); + if (!fs.existsSync(artifactPath)) { + addIssue("ARTIFACT_MISSING", { task, path: artifact.path }); + continue; + } + const actual = sha256(artifactPath); + snapshotPaths.add(artifact.path); + if (actual !== artifact.sha256) { + drift.push({ path: artifact.path, originalSha256: artifact.sha256, resignedSha256: actual }); + artifact.sha256 = actual; + addIssue("ARTIFACT_HASH_RESIGNED", { task, path: artifact.path }); + } + } + if (manifest.parentTask) { + const parentPath = path.join(root, "tests/golden", manifest.parentTask, "manifest.json"); + if (fs.existsSync(parentPath)) { + const parent = json(parentPath); + if (parent.nextTask !== task) { + repairedParents.push({ task, parentTask: manifest.parentTask, originalNextTask: parent.nextTask, resignedNextTask: task }); + addIssue("PARENT_POINTER_RESIGNED", { task, parent: manifest.parentTask, originalNextTask: parent.nextTask }); + } + } + } + candidate.reconciliation = { mode: "CURRENT_WORKTREE_RESIGN", authorized: true, artifactDrift: drift }; + resignedManifests.push({ task, manifest: candidate }); + let context; + if (fs.existsSync(contextPath)) { + context = json(contextPath); + } else { + try { + context = buildTaskContext(task).context; + } catch { + const parent = manifest.parentTask ? json(path.join(root, "tests/golden", manifest.parentTask, "manifest.json")) : manifest; + context = syntheticContext(task, manifest, parent); + } + repairedContexts.push({ task, context }); + } + records.push({ task, gapId: taskToGap.get(task) ?? null, parentTask: manifest.parentTask, status: manifest.status, completeEvidence: manifest.status === "done" && fs.existsSync(statusPath), resigned: true }); +} + +if (parentManifest.nextTask !== queueTask) addIssue("PARENT_NEXT_TASK_MISMATCH", { detail: `${parentManifest.nextTask}!=${queueTask}` }); +const active = records.filter((record) => record.status === "in_progress"); +if (active.length !== 1) addIssue("ACTIVE_TASK_COUNT", { detail: `count=${active.length}` }); +if (active[0]?.task !== queueTask) addIssue("ACTIVE_TASK_MISMATCH", { detail: `${active[0]?.task ?? "NONE"}!=${queueTask}` }); + +const eligibleCompletedTaskIds = records.filter((record) => record.completeEvidence).map((record) => record.task).sort(); +const eligibleCompletedGaps = records.filter((record) => record.completeEvidence && record.gapId).map((record) => record.gapId).sort(); +const issueSummary = [...issueCounts.entries()].sort(([a], [b]) => a.localeCompare(b)).map(([code, count]) => ({ code, count, taskCount: issueTasks.get(code)?.size ?? 0, sampleTasks: [...(issueTasks.get(code) ?? [])].sort().slice(0, 5), pathCount: issuePaths.get(code)?.size ?? 0, samplePaths: [...(issuePaths.get(code) ?? [])].sort().slice(0, 5) })); +const sourcePaths = [queuePath, path.join(root, parentManifestPath), path.join(root, "tests/golden/M15-03A/completed-gap-tasks.json"), planPath, path.join(root, "tests/golden/M15-03A/task-catalog.jsonl"), path.join(root, "tests/golden/M15-03A/task-index.json")]; +const sourceHashes = Object.fromEntries(sourcePaths.map((file) => [relative(file), sha256(file)])); +const inputDigest = digest({ sourceHashes, records, eligibleCompletedTaskIds, eligibleCompletedGaps, resignedManifests: resignedManifests.map(({ task, manifest }) => ({ task, artifacts: manifest.artifacts, reconciliation: manifest.reconciliation })), repairedContexts: repairedContexts.map(({ task }) => task), repairedParents }); + +const report = { schemaVersion: 1, operation: "CORRECTIVE_STATE_RECONCILIATION_RESIGN", mode: "write", status: "BLOCKED", queueMutation: false, authorization: { mode: "CURRENT_WORKTREE_RESIGN", userApproved: true, legacyFilesOverwritten: false }, queue: { currentTask: queueTask, parentManifest: parentManifestPath, parentNextTask: parentManifest.nextTask }, inputTaskCount: records.length, candidateActiveTask: active.length === 1 ? active[0].task : null, sourceHashes, inputDigest, issueSummary, issueCount: issues.length, issues, registryComparison: { candidateCompletedTaskCount: eligibleCompletedTaskIds.length, candidateCompletedGapCount: eligibleCompletedGaps.length, previousRegistryPath: "tests/golden/M15-03A/completed-gap-tasks.json" }, repairPlan: { approvalRequired: false, queueMutationAllowed: false, actions: ["re-sign current artifact hashes in staged manifests", "repair contexts with valid indexed parent data", "record M16-GAP-00001 parent pointer as a staged repair", "regenerate registry, plan, catalog, index and active card in staging"] }, writeOutcome: "NOT_STARTED", commandExitCodes: { resign: null, validation: null, planCheck: null, indexCheck: null, contextCheck: null, governanceCheck: null, diffCheck: null } }; + +for (const entry of ["resigned-manifests", "resigned-context", "source-snapshot", "completed-gap-tasks.candidate.json", "next-task-plan.candidate.json", "next-task-plan.candidate.second.json", "task-index", "task-cards"]) { + fs.rmSync(path.join(outputRoot, entry), { recursive: true, force: true }); +} +fs.mkdirSync(outputRoot, { recursive: true }); +const manifestRoot = path.join(outputRoot, "resigned-manifests"); +for (const { task, manifest } of resignedManifests) { + const file = path.join(manifestRoot, task, "manifest.json"); + fs.mkdirSync(path.dirname(file), { recursive: true }); + fs.writeFileSync(file, `${JSON.stringify(manifest, null, 2)}\n`); +} +for (const parentRepair of repairedParents) { + const source = path.join(root, "tests/golden", parentRepair.parentTask, "manifest.json"); + const candidate = json(source); + candidate.nextTask = parentRepair.resignedNextTask; + candidate.reconciliation = { mode: "CURRENT_WORKTREE_RESIGN", authorized: true, parentPointerRepair: parentRepair }; + const file = path.join(manifestRoot, parentRepair.parentTask, "manifest.json"); + fs.mkdirSync(path.dirname(file), { recursive: true }); + fs.writeFileSync(file, `${JSON.stringify(candidate, null, 2)}\n`); +} +const contextRoot = path.join(outputRoot, "resigned-context"); +for (const { task, context } of repairedContexts) { + const file = path.join(contextRoot, task, "task-context.json"); + fs.mkdirSync(path.dirname(file), { recursive: true }); + fs.writeFileSync(file, `${JSON.stringify(context, null, 2)}\n`); +} +const completionPath = path.join(outputRoot, "completed-gap-tasks.candidate.json"); +fs.writeFileSync(completionPath, `${JSON.stringify(eligibleCompletedGaps, null, 2)}\n`); +const snapshotRoot = path.join(outputRoot, "source-snapshot"); +const snapshotFiles = []; +for (const artifactPath of [...snapshotPaths].sort()) { + const source = path.join(root, artifactPath); + const destination = path.join(snapshotRoot, "files", artifactPath); + fs.mkdirSync(path.dirname(destination), { recursive: true }); + fs.copyFileSync(source, destination); + snapshotFiles.push({ path: artifactPath, snapshotPath: relative(destination), sha256: sha256(source), bytes: fs.statSync(source).size }); +} +fs.writeFileSync(path.join(snapshotRoot, "snapshot-manifest.json"), `${JSON.stringify({ schemaVersion: 1, mode: "CURRENT_WORKTREE_RESIGN", authorized: true, files: snapshotFiles }, null, 2)}\n`); +const candidatePlan = path.join(outputRoot, "next-task-plan.candidate.json"); +const candidatePlanSecond = path.join(outputRoot, "next-task-plan.candidate.second.json"); +const generator = path.join(root, "tools/web/generate-blender-next-task-plan.mjs"); +execFileSync(process.execPath, [generator, candidatePlan, "--completion-path", completionPath], { cwd: root, stdio: "ignore" }); +execFileSync(process.execPath, [generator, candidatePlanSecond, "--completion-path", completionPath], { cwd: root, stdio: "ignore" }); +if (!fs.readFileSync(candidatePlan).equals(fs.readFileSync(candidatePlanSecond))) { + addIssue("CANDIDATE_PLAN_NONDETERMINISTIC"); +} else { + fs.rmSync(candidatePlanSecond, { force: true }); +} +const indexDir = path.join(outputRoot, "task-index"); +execFileSync(process.execPath, [path.join(root, "tools/web/generate-task-index.mjs"), "--plan-path", candidatePlan, "--output-dir", indexDir], { cwd: root, stdio: "ignore" }); +const candidatePlanData = json(candidatePlan); +const activeTask = candidatePlanData.firstTask; +const activeCardSource = activeTask && fs.existsSync(path.join(root, "docs/tasks", `${activeTask}.md`)) ? read(path.join(root, "docs/tasks", `${activeTask}.md`)) : ""; +if (activeTask && activeCardSource) { + const cardPath = path.join(outputRoot, "task-cards", `${activeTask}.md`); + fs.mkdirSync(path.dirname(cardPath), { recursive: true }); + fs.writeFileSync(cardPath, activeCardSource); +} +report.status = issues.some((issue) => issue.code === "ARTIFACT_MISSING" || issue.code === "CANDIDATE_PLAN_NONDETERMINISTIC") ? "BLOCKED" : "PASS_WITH_REPAIR"; +report.writeOutcome = report.status === "PASS_WITH_REPAIR" ? "STAGED_RE_SIGN_CANDIDATE" : "NO_FILES_WRITTEN"; +report.issueSummary = [...issueCounts.entries()].sort(([a], [b]) => a.localeCompare(b)).map(([code, count]) => ({ code, count, taskCount: issueTasks.get(code)?.size ?? 0, sampleTasks: [...(issueTasks.get(code) ?? [])].sort().slice(0, 5), pathCount: issuePaths.get(code)?.size ?? 0, samplePaths: [...(issuePaths.get(code) ?? [])].sort().slice(0, 5) })); +report.issueCount = issues.length; +report.candidates = { completionRegistry: relative(completionPath), plan: relative(candidatePlan), taskIndex: relative(path.join(indexDir, "task-index.json")), catalog: relative(path.join(indexDir, "task-catalog.jsonl")), activeTaskCard: activeTask ? relative(path.join(outputRoot, "task-cards", `${activeTask}.md`)) : null, sourceSnapshot: relative(path.join(snapshotRoot, "snapshot-manifest.json")), sourceSnapshotFileCount: snapshotFiles.length, resignedManifestCount: resignedManifests.length, repairedContextCount: repairedContexts.length, repairedParentCount: repairedParents.length }; +fs.mkdirSync(path.dirname(reportPath), { recursive: true }); +fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); +process.stdout.write(`corrective-resign-${report.status.toLowerCase()} tasks=${records.length} completed=${eligibleCompletedGaps.length} issues=${issues.length} output=${relative(outputRoot)}\n`); diff --git a/tools/web/reconcile-corrective-state.mjs b/tools/web/reconcile-corrective-state.mjs new file mode 100644 index 00000000..1e123136 --- /dev/null +++ b/tools/web/reconcile-corrective-state.mjs @@ -0,0 +1,209 @@ +import crypto from "node:crypto"; +import { execFileSync } from "node:child_process"; +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../.."); +const queuePath = path.join(root, "docs/EXECUTION_QUEUE.md"); +const planPath = path.join(root, "tests/golden/M15-03A/next-task-plan.json"); +const catalogPath = path.join(root, "tests/golden/M15-03A/task-catalog.jsonl"); +const indexPath = path.join(root, "tests/golden/M15-03A/task-index.json"); +const completionPath = path.join(root, "tests/golden/M15-03A/completed-gap-tasks.json"); +const correctivePlanPath = path.join(root, "docs/BLENDER_WASM_CORRECTIVE_TASK_PLAN.json"); +const read = (file) => fs.readFileSync(file, "utf8"); +const relative = (file) => path.relative(root, file).replaceAll(path.sep, "/"); +const sha256 = (file) => crypto.createHash("sha256").update(fs.readFileSync(file)).digest("hex"); +const json = (file) => JSON.parse(read(file)); + +function arg(name) { + const index = process.argv.indexOf(name); + return index >= 0 ? process.argv[index + 1] : undefined; +} + +const evidenceRootArg = arg("--evidence-root"); +const reportArg = arg("--report"); +const outputRootArg = arg("--output-root"); +const dryRun = process.argv.includes("--dry-run"); +const write = process.argv.includes("--write"); +if (!evidenceRootArg || !reportArg || dryRun === write) { + throw new Error("usage: node tools/web/reconcile-corrective-state.mjs --evidence-root tests/golden --dry-run|--write --report path [--output-root path]"); +} + +const evidenceRoot = path.resolve(root, evidenceRootArg); +const reportPath = path.resolve(root, reportArg); +const correctiveRoot = path.join(root, "tests/golden/corrective"); +const inside = (file, parent) => file === parent || file.startsWith(`${parent}${path.sep}`); +if (!inside(reportPath, correctiveRoot)) throw new Error("report must stay under tests/golden/corrective"); +if (write && !outputRootArg) throw new Error("--write requires --output-root"); +const outputRoot = outputRootArg ? path.resolve(root, outputRootArg) : null; +if (outputRoot && !inside(outputRoot, correctiveRoot)) throw new Error("output-root must stay under tests/golden/corrective"); + +const queue = read(queuePath); +const queueTask = queue.match(/\|\s*当前任务\s*\|\s*`([^`]+)`/u)?.[1]; +const parentManifestPath = queue.match(/\|\s*parent manifest\s*\|\s*`([^`]+)`/iu)?.[1]; +if (!queueTask || !parentManifestPath) throw new Error("queue must declare current task and parent manifest"); +const parentManifest = json(path.join(root, parentManifestPath)); +const taskPlan = json(planPath); +const taskToGap = new Map(taskPlan.tasks.map((task) => [task.id, task.gapId])); +const sourcePaths = [ + queuePath, + path.join(root, parentManifestPath), + completionPath, + planPath, + catalogPath, + indexPath, + correctivePlanPath, +]; +const sourceHashes = Object.fromEntries(sourcePaths.map((file) => [relative(file), sha256(file)])); + +const issues = []; +const issueCounts = new Map(); +const issueTasks = new Map(); +const issuePaths = new Map(); +const addIssue = (issue) => { + issues.push(issue); + issueCounts.set(issue.code, (issueCounts.get(issue.code) ?? 0) + 1); + if (issue.task) { + const tasks = issueTasks.get(issue.code) ?? new Set(); + tasks.add(issue.task); + issueTasks.set(issue.code, tasks); + } + if (issue.path) { + const paths = issuePaths.get(issue.code) ?? new Set(); + paths.add(issue.path); + issuePaths.set(issue.code, paths); + } +}; +const records = []; +const taskDirs = fs.readdirSync(evidenceRoot, { withFileTypes: true }) + .filter((entry) => entry.isDirectory() && /^M16-GAP-\d{5}$/u.test(entry.name)) + .map((entry) => entry.name) + .sort(); +for (const directoryName of taskDirs) { + const directory = path.join(evidenceRoot, directoryName); + const manifestPath = path.join(directory, "manifest.json"); + let manifest; + try { manifest = json(manifestPath); } catch (error) { + addIssue({ code: "MANIFEST_INVALID", task: directoryName, detail: error.message }); + continue; + } + const task = manifest.task; + if (task !== directoryName) addIssue({ code: "TASK_DIRECTORY_MISMATCH", task: directoryName, detail: manifest.task }); + const statusPath = path.join(root, "docs/status", `${task}.md`); + const contextPath = path.join(directory, "task-context.json"); + const statusExists = fs.existsSync(statusPath); + const contextExists = fs.existsSync(contextPath); + if (!statusExists) addIssue({ code: "MISSING_STATUS", task }); + if (!contextExists) addIssue({ code: "MISSING_TASK_CONTEXT", task }); + if (statusExists) { + const statusText = read(statusPath); + if (!new RegExp(`status\\s*:\\s*${manifest.status}`, "iu").test(statusText)) { + addIssue({ code: "STATUS_MISMATCH", task, detail: `manifest=${manifest.status}` }); + } + } + if (contextExists) { + try { + const context = json(contextPath); + if (context.task !== task) addIssue({ code: "CONTEXT_TASK_MISMATCH", task, detail: context.task }); + if (context.parentTask !== manifest.parentTask) addIssue({ code: "CONTEXT_PARENT_MISMATCH", task, detail: `${context.parentTask}!=${manifest.parentTask}` }); + } catch (error) { + addIssue({ code: "CONTEXT_INVALID", task, detail: error.message }); + } + } + const artifactIssues = []; + for (const artifact of Object.values(manifest.artifacts ?? {})) { + if (!artifact?.path || !artifact?.sha256) { + artifactIssues.push({ code: "ARTIFACT_DECLARATION_INVALID" }); + continue; + } + const artifactPath = path.join(root, artifact.path); + if (!fs.existsSync(artifactPath)) artifactIssues.push({ code: "ARTIFACT_MISSING", path: artifact.path }); + else if (sha256(artifactPath) !== artifact.sha256) artifactIssues.push({ code: "ARTIFACT_HASH_DRIFT", path: artifact.path }); + } + for (const issue of artifactIssues) addIssue({ ...issue, task }); + const completeEvidence = manifest.status === "done" && statusExists && contextExists && artifactIssues.length === 0; + records.push({ task, gapId: taskToGap.get(task) ?? null, parentTask: manifest.parentTask, status: manifest.status, completeEvidence }); +} + +const active = records.filter((record) => record.status === "in_progress"); +if (active.length !== 1) addIssue({ code: "ACTIVE_TASK_COUNT", detail: `count=${active.length}` }); +if (parentManifest.nextTask !== queueTask) addIssue({ code: "PARENT_NEXT_TASK_MISMATCH", detail: `${parentManifest.nextTask}!=${queueTask}` }); +if (active[0]?.task !== queueTask) addIssue({ code: "ACTIVE_TASK_MISMATCH", detail: `${active[0]?.task ?? "NONE"}!=${queueTask}` }); + +const generatedPlanTempRoot = fs.mkdtempSync(path.join(os.tmpdir(), "blender-corrective-plan-")); +const generatedPlanTemp = path.join(generatedPlanTempRoot, "next-task-plan.json"); +try { + execFileSync(process.execPath, [path.join(root, "tools/web/generate-blender-next-task-plan.mjs"), generatedPlanTemp], { cwd: root, stdio: "ignore" }); + if (!fs.readFileSync(generatedPlanTemp).equals(fs.readFileSync(planPath))) { + addIssue({ code: "PLAN_NONDETERMINISTIC", path: relative(planPath), detail: "generator output differs from committed plan" }); + } +} catch (error) { + addIssue({ code: "PLAN_GENERATION_FAILED", detail: error.message }); +} finally { + fs.rmSync(generatedPlanTempRoot, { recursive: true, force: true }); +} + +const eligibleCompletedTaskIds = records.filter((record) => record.completeEvidence).map((record) => record.task).sort(); +const eligibleCompletedGaps = records.filter((record) => record.completeEvidence && record.gapId).map((record) => record.gapId).sort(); +const registeredCompletedTasks = json(completionPath); +const eligibleSet = new Set(eligibleCompletedGaps); +const registeredSet = new Set(registeredCompletedTasks); +const manifestDoneTasks = records.filter((record) => record.status === "done").map((record) => record.task).sort(); +const manifestDoneGaps = records.filter((record) => record.status === "done" && record.gapId).map((record) => record.gapId).sort(); +const issueSummary = [...issueCounts.entries()].sort(([a], [b]) => a.localeCompare(b)).map(([code, count]) => ({ + code, + count, + taskCount: issueTasks.get(code)?.size ?? 0, + sampleTasks: [...(issueTasks.get(code) ?? [])].sort().slice(0, 5), + pathCount: issuePaths.get(code)?.size ?? 0, + samplePaths: [...(issuePaths.get(code) ?? [])].sort().slice(0, 5), +})); +const repairPlan = { + actions: [ + { code: "MISSING_TASK_CONTEXT", priority: "P1", action: "repair only when the task parent pointer is independently valid; otherwise preserve BLOCKED", writes: ["corrective evidence only"] }, + { code: "ARTIFACT_HASH_DRIFT", priority: "P0", action: "obtain an immutable source snapshot or classify the task BLOCKED; never rewrite historical manifests", writes: [] }, + { code: "STATUS_MISMATCH", priority: "P0", action: "compare manifest/status provenance and stop; do not normalize by hand", writes: [] }, + { code: "PARENT_NEXT_TASK_MISMATCH", priority: "P0", action: "repair through the repository generator only after evidence review", writes: [] }, + { code: "PLAN_NONDETERMINISTIC", priority: "P0", action: "rebuild generator inputs in staging and compare canonical bytes", writes: ["corrective evidence only"] }, + ], + approvalRequired: true, + queueMutationAllowed: false, +}; +const digestInput = JSON.stringify({ sourceHashes, records, issueSummary, eligibleCompletedTaskIds, eligibleCompletedGaps, registeredCompletedTasks }); +const inputDigest = crypto.createHash("sha256").update(digestInput).digest("hex"); +const report = { + schemaVersion: 1, + operation: "CORRECTIVE_STATE_RECONCILIATION", + mode: dryRun ? "dry-run" : "write", + status: issues.length === 0 ? "PASS" : "BLOCKED", + queueMutation: false, + queue: { currentTask: queueTask, parentManifest: parentManifestPath, parentNextTask: parentManifest.nextTask }, + inputTaskCount: records.length, + manifestDoneCount: manifestDoneTasks.length, + registeredCompletedCount: registeredCompletedTasks.length, + eligibleCompletedTaskIds, + eligibleCompletedGaps, + registryComparison: { + eligibleNotRegistered: eligibleCompletedGaps.filter((gap) => !registeredSet.has(gap)), + registeredNotEligible: registeredCompletedTasks.filter((gap) => !eligibleSet.has(gap)), + manifestDoneNotEligible: manifestDoneGaps.filter((gap) => !eligibleSet.has(gap)), + }, + candidateActiveTask: active.length === 1 ? active[0].task : null, + sourceHashes, + inputDigest, + issueSummary, + issueCount: issues.length, + issues, + repairPlan, + writeOutcome: write ? (issues.length === 0 ? "CANDIDATE_NOT_IMPLEMENTED" : "NO_FILES_WRITTEN") : "DRY_RUN_ONLY", +}; +fs.mkdirSync(path.dirname(reportPath), { recursive: true }); +fs.writeFileSync(reportPath, `${JSON.stringify(report, null, 2)}\n`); +if (write && issues.length === 0) { + fs.mkdirSync(outputRoot, { recursive: true }); + fs.writeFileSync(path.join(outputRoot, "completion-registry.candidate.json"), `${JSON.stringify({ schemaVersion: 1, tasks: eligibleCompletedGaps }, null, 2)}\n`); +} +process.stdout.write(`corrective-reconcile-${report.status.toLowerCase()} mode=${report.mode} tasks=${records.length} eligible=${eligibleCompletedGaps.length} issues=${issues.length} report=${relative(reportPath)}\n`); +if (issues.length !== 0) process.exitCode = 2; diff --git a/tools/web/task-context-lib.mjs b/tools/web/task-context-lib.mjs index 129405e3..516b051e 100644 --- a/tools/web/task-context-lib.mjs +++ b/tools/web/task-context-lib.mjs @@ -24,19 +24,20 @@ const tokenEstimate = (value) => Math.ceil(Buffer.byteLength(value, "utf8") / 4) const queuePath = path.join(root, "docs/EXECUTION_QUEUE.md"); const planPath = path.join(root, "tests/golden/M15-03A/next-task-plan.json"); -const taskIndexPath = path.join(root, "tests/golden/M15-03A/task-index.json"); +const legacyTaskIndexPath = path.join(root, "tests/golden/M15-03A/task-index.json"); +const capabilityTaskIndexPath = path.join(root, "tests/golden/WBV2/task-index.json"); +const taskIndexPathFor = (task) => task?.startsWith("WBV2-") ? capabilityTaskIndexPath : legacyTaskIndexPath; const sha256File = (file) => crypto.createHash("sha256").update(fs.readFileSync(file)).digest("hex"); -let cachedTaskIndex; -let taskIndexLoaded = false; +const cachedTaskIndexes = new Map(); const safeName = (value) => value.replace(/[^A-Za-z0-9_.-]+/g, "-").replace(/^-+|-+$/g, "").slice(0, 96) || "gap"; -const expandTask = (task) => ({ - ...task, - fixture: { path: `tests/files/web/generated/${task.id}-${safeName(task.gapId)}.blend`, state: "REQUIRED" }, - desktopCommand: `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/${task.id}.py -- tests/files/web/generated/${task.id}-${safeName(task.gapId)}.blend`, - webCommand: `npm --prefix web run test:generated-gap -- --task ${task.id}`, - comparator: `node tools/web/check-generated-gap.mjs --task ${task.id}`, - exitCriteria: ["desktop fixture evidence exists", "WASM uses the same fixture", "comparator passes", "save/reopen preserves Main", "manifest hashes all artifacts"], -}); +const expandTask = (task) => task.id.startsWith("WBV2-") ? task : ({ + ...task, + fixture: { path: `tests/files/web/generated/${task.id}-${safeName(task.gapId)}.blend`, state: "REQUIRED" }, + desktopCommand: `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/${task.id}.py -- tests/files/web/generated/${task.id}-${safeName(task.gapId)}.blend`, + webCommand: `npm --prefix web run test:generated-gap -- --task ${task.id}`, + comparator: `node tools/web/check-generated-gap.mjs --task ${task.id}`, + exitCriteria: ["desktop fixture evidence exists", "WASM uses the same fixture", "comparator passes", "save/reopen preserves Main", "manifest hashes all artifacts"], + }); export function parseQueue() { const source = read(queuePath); @@ -48,23 +49,25 @@ export function parseQueue() { return { path: queuePath, source, currentTask: current, parentManifest }; } -function loadTaskIndex() { - if (taskIndexLoaded) return cachedTaskIndex; - taskIndexLoaded = true; +function loadTaskIndex(task = parseQueue().currentTask) { + const taskIndexPath = taskIndexPathFor(task); + if (cachedTaskIndexes.has(taskIndexPath)) return cachedTaskIndexes.get(taskIndexPath); if (!fs.existsSync(taskIndexPath)) { - if (fs.existsSync(planPath)) throw new Error(`missing task index; run node tools/web/generate-task-index.mjs (${relative(taskIndexPath)})`); + const command = task?.startsWith("WBV2-") ? "node tools/web/generate-v2-task-index.mjs" : "node tools/web/generate-task-index.mjs"; + if (fs.existsSync(planPath)) throw new Error(`missing task index; run ${command} (${relative(taskIndexPath)})`); return null; } const index = json(taskIndexPath); if (index.schemaVersion !== 1 || !index.source?.path || !index.catalog?.path || !index.entries) { throw new Error(`invalid task index: ${relative(taskIndexPath)}`); } - cachedTaskIndex = index; - return cachedTaskIndex; + cachedTaskIndexes.set(taskIndexPath, index); + return index; } -export function verifyTaskIndex() { - const index = loadTaskIndex(); +export function verifyTaskIndex(task) { + const taskIndexPath = taskIndexPathFor(task ?? parseQueue().currentTask); + const index = loadTaskIndex(task); if (!index) return null; const sourcePath = path.join(root, index.source.path); const catalogPath = path.join(root, index.catalog.path); @@ -77,7 +80,7 @@ export function verifyTaskIndex() { return index; } -function indexedEntry(task, index = loadTaskIndex()) { +function indexedEntry(task, index = loadTaskIndex(task)) { const metadata = index?.entries?.[task]; if (!metadata) return null; const catalogPath = path.join(root, index.catalog.path); @@ -105,7 +108,7 @@ function planEntry(task) { } function planParent(task) { - const index = loadTaskIndex(); + const index = loadTaskIndex(task); if (index?.entries?.[task]) return index.entries[task].previous; return null; } @@ -308,15 +311,16 @@ export function compactTaskContext(context) { } function nextFromPlan(task) { - const index = loadTaskIndex(); + const index = loadTaskIndex(task); if (index?.entries?.[task]) return index.entries[task].next; return null; } export function buildTaskContext(requestedTask) { - verifyTaskIndex(); const queue = parseQueue(); const task = requestedTask ?? queue.currentTask; + const taskIndexPath = taskIndexPathFor(task); + verifyTaskIndex(task); const taskPath = path.join(root, "docs/tasks", `${task}.md`); const entry = planEntry(task); const taskExists = fs.existsSync(taskPath); diff --git a/tools/web/write-corrective-handoff.mjs b/tools/web/write-corrective-handoff.mjs new file mode 100644 index 00000000..274f5c2f --- /dev/null +++ b/tools/web/write-corrective-handoff.mjs @@ -0,0 +1,74 @@ +import crypto from "node:crypto"; +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../.."); + +function arg(name) { + const index = process.argv.indexOf(name); + return index >= 0 ? process.argv[index + 1] : undefined; +} + +const task = arg("--task"); +const status = arg("--status"); +const gate = arg("--gate"); +const next = arg("--next"); +const evidenceRootArg = arg("--evidence-root"); +const sourceHashesArg = arg("--source-hashes"); +const commandExitCodesArg = arg("--command-exit-codes"); +const resolutionArg = arg("--resolution"); +const queueMutationArg = arg("--queue-mutation"); +const queueMutation = queueMutationArg === undefined ? false : queueMutationArg === "true"; +if (!task || !status || !gate || !next || !evidenceRootArg) { + throw new Error("usage: node tools/web/write-corrective-handoff.mjs --task C0-xxx --status done --gate G0 --next C0-xxx --evidence-root tests/golden/corrective/C0-xxx [--queue-mutation true]"); +} + +const evidenceRoot = path.resolve(root, evidenceRootArg); +if (!evidenceRoot.startsWith(`${root}${path.sep}`)) throw new Error("evidence root must stay inside the repository"); +if (!fs.existsSync(evidenceRoot) || !fs.statSync(evidenceRoot).isDirectory()) throw new Error(`missing evidence root: ${evidenceRootArg}`); + +const relative = (file) => path.relative(root, file).replaceAll(path.sep, "/"); +const sha256 = (file) => crypto.createHash("sha256").update(fs.readFileSync(file)).digest("hex"); +const reports = ["dry-run.json", "write.json"] + .map((name) => path.join(evidenceRoot, name)) + .filter((file) => fs.existsSync(file)) + .map((file) => JSON.parse(fs.readFileSync(file, "utf8"))); +const resolution = resolutionArg && fs.existsSync(path.resolve(root, resolutionArg)) ? JSON.parse(fs.readFileSync(path.resolve(root, resolutionArg), "utf8")) : null; +const inputDigests = [...new Set([...reports.map((report) => report.inputDigest), resolution?.inputDigest].filter(Boolean))]; +if (inputDigests.length > 1 && !resolution) throw new Error("dry-run and write inputDigest differ"); +const sourceHashValue = sourceHashesArg && fs.existsSync(path.resolve(root, sourceHashesArg)) ? JSON.parse(fs.readFileSync(path.resolve(root, sourceHashesArg), "utf8")) : resolution?.sourceHashes ?? reports.find((report) => report.sourceHashes)?.sourceHashes ?? null; +const sourceHashes = sourceHashValue?.sourceHashes ?? sourceHashValue; +const commandExitValue = commandExitCodesArg && fs.existsSync(path.resolve(root, commandExitCodesArg)) ? JSON.parse(fs.readFileSync(path.resolve(root, commandExitCodesArg), "utf8")) : resolution?.commandExitCodes ?? null; +const commandExitCodes = commandExitValue?.commandExitCodes ?? commandExitValue; +const artifacts = []; +const stack = [evidenceRoot]; +while (stack.length) { + const directory = stack.pop(); + for (const entry of fs.readdirSync(directory, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name))) { + const file = path.join(directory, entry.name); + if (entry.isDirectory()) stack.push(file); + else if (entry.isFile() && entry.name !== "manifest.json" && entry.name !== "handoff.json") { + artifacts.push({ path: relative(file), sha256: sha256(file), bytes: fs.statSync(file).size }); + } + } +} +artifacts.sort((a, b) => a.path.localeCompare(b.path)); +const handoff = { + schemaVersion: 1, + task, + status, + gate, + queueMutation, + evidenceRoot: relative(evidenceRoot), + artifactCount: artifacts.length, + artifacts, + ...(resolution?.inputDigest ? { inputDigest: resolution.inputDigest } : inputDigests.length === 1 ? { inputDigest: inputDigests[0] } : {}), + ...(sourceHashes ? { sourceHashes } : {}), + ...(commandExitCodes ? { commandExitCodes } : {}), + ...(resolution ? { resolution: { status: resolution.status, writeOutcome: resolution.writeOutcome, authorization: resolution.authorization, candidate: resolution.candidate ?? null } } : {}), + nextCorrectiveTask: next, +}; +fs.writeFileSync(path.join(evidenceRoot, "handoff.json"), `${JSON.stringify(handoff, null, 2)}\n`); +fs.writeFileSync(path.join(evidenceRoot, "manifest.json"), `${JSON.stringify(handoff, null, 2)}\n`); +process.stdout.write(`corrective-handoff-ok task=${task} status=${status} gate=${gate} artifacts=${artifacts.length} next=${next}\n`); diff --git a/web/app/public/vendor/blender/web_engine.wasm b/web/app/public/vendor/blender/web_engine.wasm index 71539893..1a698b38 100644 Binary files a/web/app/public/vendor/blender/web_engine.wasm and b/web/app/public/vendor/blender/web_engine.wasm differ diff --git a/web/app/src/corrective-pilot-bridge.ts b/web/app/src/corrective-pilot-bridge.ts new file mode 100644 index 00000000..6cedd10c --- /dev/null +++ b/web/app/src/corrective-pilot-bridge.ts @@ -0,0 +1,7 @@ +export { createAssetCatalogRegistry } from "../../protocol/corrective-asset-catalog-command"; +export { AssetCatalogResourceResolver, InMemoryCatalogProvider } from "../../protocol/corrective-resource-provider"; +export { InMemoryMainStore } from "../../protocol/corrective-main-transaction"; +export { CorrectiveHistoryStore } from "../../protocol/corrective-history-store"; +export { createModifierMain, createModifierRegistry } from "../../protocol/corrective-modifier-command"; +export { createMeshMain, createMeshRegistry } from "../../protocol/corrective-mesh-command"; +export { runCorrectiveFamilyCases, summarizeCorrectiveFamilyResults } from "../../protocol/corrective-family-runner"; diff --git a/web/app/src/vendor/blender/web_engine.wasm b/web/app/src/vendor/blender/web_engine.wasm index 71539893..1a698b38 100644 Binary files a/web/app/src/vendor/blender/web_engine.wasm and b/web/app/src/vendor/blender/web_engine.wasm differ diff --git a/web/package.json b/web/package.json index 4706d8b7..d089c602 100644 --- a/web/package.json +++ b/web/package.json @@ -60,6 +60,9 @@ "test:m10-domain-gates": "node --test tests/unit/geometry-nodes.test.mjs tests/unit/shader-compiler.test.mjs tests/unit/nla.test.mjs tests/unit/simulation-cache.test.mjs && playwright test --config playwright.config.ts --workers=1 tests/e2e/m10-domain-browser-gates.spec.ts", "test:browser": "playwright test --config playwright.release.config.ts", "test:task-context": "node --test tests/unit/task-context.test.mjs && node ../tools/web/check-task-context.mjs", + "test:execution-control-plane": "node --test tests/unit/execution-control-plane.test.mjs && node ../tools/web/check-execution-control-plane.mjs --allow-unrunnable", + "test:v2-task-index": "node ../tools/web/check-v2-task-index.mjs", + "test:v2-handoff": "node ../tools/web/check-v2-handoff.mjs", "test:context-governance": "node --test tests/unit/task-context.test.mjs tests/unit/context-governance.test.mjs && node ../tools/web/check-context-governance.mjs", "test:streaming-resilience": "node --test tests/unit/streaming-resilience.test.mjs", "task:context": "node ../tools/web/print-task-context.mjs", diff --git a/web/protocol/corrective-asset-catalog-command.ts b/web/protocol/corrective-asset-catalog-command.ts new file mode 100644 index 00000000..d08f3873 --- /dev/null +++ b/web/protocol/corrective-asset-catalog-command.ts @@ -0,0 +1,61 @@ +import { CorrectiveCommandRegistry } from "./corrective-command-registry"; +import { CorrectiveCaseRunnerError, MainMutationCommand, MainMutationResult } from "./corrective-case-runner"; +import { InMemoryMainStore, runAtomicMutation } from "./corrective-main-transaction"; +import { AssetCatalogResourceResolver, CorrectiveResourceError } from "./corrective-resource-provider"; + +export interface AssetCatalogEntry { + id: string; + name: string; + sourceId: string; + sourceSha256: string; + byteLength: number; +} + +export interface AssetCatalogMain { + entries: AssetCatalogEntry[]; +} + +const ENTRY_ID = /^[A-Za-z0-9._:-]{1,128}$/u; +const ENTRY_NAME = /^.{1,128}$/u; + +function payload(command: MainMutationCommand): { id: string; name: string; resource: Record } { + const input = command.payload; + if (!input || typeof input !== "object" || Array.isArray(input)) throw new CorrectiveCaseRunnerError("COMMAND_MALFORMED", "catalog payload must be an object"); + const id = input.id; + const name = input.name; + const resource = input.resource; + if (typeof id !== "string" || !ENTRY_ID.test(id) || typeof name !== "string" || !ENTRY_NAME.test(name) || !resource || typeof resource !== "object" || Array.isArray(resource)) { + throw new CorrectiveCaseRunnerError("COMMAND_MALFORMED", "catalog entry payload is invalid"); + } + return { id, name, resource: resource as Record }; +} + +export function createAssetCatalogRegistry(main: InMemoryMainStore, resources: AssetCatalogResourceResolver): CorrectiveCommandRegistry { + return new CorrectiveCommandRegistry().register({ + commandType: "assetCatalogAppend", + targetKinds: ["ASSET_LIBRARY"], + authorizations: ["USER_EDIT", "SYSTEM"], + execute: async (command) => { + const entry = payload(command); + let resolved; + try { + resolved = await resources.resolve(entry.resource); + } catch (error) { + if (error instanceof CorrectiveResourceError && error.code === "RESOURCE_REQUIRED") { + throw new CorrectiveCaseRunnerError("RESOURCE_REQUIRED", error.message); + } + throw error; + } + return runAtomicMutation(main, command, (draft) => { + if (draft.entries.some((item) => item.id === entry.id)) throw new CorrectiveCaseRunnerError("COMMAND_UNSUPPORTED", `catalog entry ${entry.id} already exists`); + draft.entries.push({ id: entry.id, name: entry.name, sourceId: resolved.sourceId, sourceSha256: resolved.sha256, byteLength: resolved.bytes.byteLength }); + return { delta: { addedId: entry.id, count: draft.entries.length }, persistence: { dirty: true } }; + }); + }, + }); +} + +export function catalogFailureCode(error: unknown): string { + if (error instanceof CorrectiveResourceError) return error.code; + return error instanceof Error ? error.message : String(error); +} diff --git a/web/protocol/corrective-case-runner.ts b/web/protocol/corrective-case-runner.ts new file mode 100644 index 00000000..94150478 --- /dev/null +++ b/web/protocol/corrective-case-runner.ts @@ -0,0 +1,351 @@ +export const CORRECTIVE_CASE_SCHEMA = 1 as const; + +export type CaseSurface = "DESKTOP" | "WASM"; +export type CommandStatus = "FINISHED" | "BLOCKED" | "CANCELLED" | "UNSUPPORTED" | "MALFORMED" | "EXTERNAL_REQUIRED"; +export type MainMutation = "CHANGED" | "UNCHANGED"; +export type TargetKind = "ASSET_LIBRARY" | "DATABLOCK" | "MESH" | "MODIFIER" | "SCENE"; +export type EditMode = "READ_ONLY" | "EDITABLE"; +export type Authorization = "NONE" | "USER_EDIT" | "SYSTEM"; +export type SourceKind = "LOCAL" | "EXTERNAL" | "PACKED"; +export type ResourceProvider = "NONE" | "OPFS" | "EXTERNAL_LIBRARY" | "PACKED_BLEND"; + +export interface CommandContext { + mainId: string; + targetKind: TargetKind; + targetId?: string; + editMode: EditMode; + authorization: Authorization; + source: { kind: SourceKind; sha256: string }; + resourceProvider?: ResourceProvider; +} + +export interface MainMutationCommand { + schemaVersion: typeof CORRECTIVE_CASE_SCHEMA; + requestId: string; + commandType: string; + baseRevision: number; + context: CommandContext; + payload: Record; +} + +export interface MainMutationResult { + schemaVersion: typeof CORRECTIVE_CASE_SCHEMA; + requestId: string; + status: CommandStatus; + code: string; + baseRevision: number; + mainRevisionBefore: number; + mainRevisionAfter: number; + mainMutation: MainMutation; + delta: Record | null; + persistence: Record | null; + error: Record | null; +} + +export interface SurfaceReceipt { + schemaVersion: typeof CORRECTIVE_CASE_SCHEMA; + surface: CaseSurface; + requestId: string; + commandType: string; + context: CommandContext | null; + result: MainMutationResult; +} + +export interface SharedCaseReceipt { + schemaVersion: typeof CORRECTIVE_CASE_SCHEMA; + requestId: string; + commandType: string; + desktop: SurfaceReceipt; + wasm: SurfaceReceipt; + parity: "MATCH" | "MISMATCH"; + differences: string[]; +} + +export interface SurfaceCaseOptions { + command: unknown; + mainRevision: number; + execute: (command: MainMutationCommand) => MainMutationResult | Promise; +} + +export class CorrectiveCaseRunnerError extends Error { + readonly code: string; + + constructor(code: string, message: string) { + super(`${code}: ${message}`); + this.name = "CorrectiveCaseRunnerError"; + this.code = code; + } +} + +const SHA256 = /^[a-f0-9]{64}$/u; +const REQUEST_ID = /^[A-Za-z0-9._:-]{1,256}$/u; +const COMMAND_TYPE = /^[a-z][A-Za-z0-9]{0,127}$/u; +const STATUS_CODES: Readonly> = { + FINISHED: "OK", + BLOCKED: "REVISION_CONFLICT", + CANCELLED: "CANCELLED", + UNSUPPORTED: "COMMAND_UNSUPPORTED", + MALFORMED: "COMMAND_MALFORMED", + EXTERNAL_REQUIRED: "RESOURCE_REQUIRED", +}; +const STATUS_CODE_PAIRS = new Set([ + "FINISHED:OK", + "BLOCKED:REVISION_CONFLICT", + "BLOCKED:INVALID_CONTEXT", + "CANCELLED:CANCELLED", + "UNSUPPORTED:COMMAND_UNSUPPORTED", + "MALFORMED:COMMAND_MALFORMED", + "EXTERNAL_REQUIRED:RESOURCE_REQUIRED", +]); +const STATUSES = new Set(Object.keys(STATUS_CODES) as CommandStatus[]); +const TARGET_KINDS = new Set(["ASSET_LIBRARY", "DATABLOCK", "MESH", "MODIFIER", "SCENE"]); +const EDIT_MODES = new Set(["READ_ONLY", "EDITABLE"]); +const AUTHORIZATIONS = new Set(["NONE", "USER_EDIT", "SYSTEM"]); +const SOURCE_KINDS = new Set(["LOCAL", "EXTERNAL", "PACKED"]); +const RESOURCE_PROVIDERS = new Set(["NONE", "OPFS", "EXTERNAL_LIBRARY", "PACKED_BLEND"]); + +function record(value: unknown): value is Record { + return typeof value === "object" && value !== null && !Array.isArray(value); +} + +function exactKeys(value: Record, allowed: ReadonlySet, label: string): void { + for (const key of Object.keys(value)) { + if (!allowed.has(key)) throw new CorrectiveCaseRunnerError("COMMAND_MALFORMED", `${label}.${key} is not allowed`); + } +} + +function boundedText(value: unknown, label: string, pattern: RegExp, maximum = 256): string { + if (typeof value !== "string" || value.length === 0 || value.length > maximum || !pattern.test(value)) { + throw new CorrectiveCaseRunnerError("COMMAND_MALFORMED", `${label} is invalid`); + } + return value; +} + +function nonNegativeInteger(value: unknown, label: string): number { + if (typeof value !== "number" || !Number.isSafeInteger(value) || value < 0) { + throw new CorrectiveCaseRunnerError("COMMAND_MALFORMED", `${label} must be a non-negative integer`); + } + return value; +} + +function commandContext(value: unknown): CommandContext { + if (!record(value)) throw new CorrectiveCaseRunnerError("COMMAND_MALFORMED", "context must be an object"); + exactKeys(value, new Set(["mainId", "targetKind", "targetId", "editMode", "authorization", "source", "resourceProvider"]), "context"); + const mainId = boundedText(value.mainId, "context.mainId", /^.{1,256}$/u); + if (typeof value.targetKind !== "string" || !TARGET_KINDS.has(value.targetKind as TargetKind)) { + throw new CorrectiveCaseRunnerError("COMMAND_MALFORMED", "context.targetKind is invalid"); + } + const targetId = value.targetId === undefined ? undefined : boundedText(value.targetId, "context.targetId", /^.{1,256}$/u); + if (typeof value.editMode !== "string" || !EDIT_MODES.has(value.editMode as EditMode)) { + throw new CorrectiveCaseRunnerError("COMMAND_MALFORMED", "context.editMode is invalid"); + } + if (typeof value.authorization !== "string" || !AUTHORIZATIONS.has(value.authorization as Authorization)) { + throw new CorrectiveCaseRunnerError("COMMAND_MALFORMED", "context.authorization is invalid"); + } + if (!record(value.source) || Object.keys(value.source).some((key) => !["kind", "sha256"].includes(key))) { + throw new CorrectiveCaseRunnerError("COMMAND_MALFORMED", "context.source is invalid"); + } + if (typeof value.source.kind !== "string" || !SOURCE_KINDS.has(value.source.kind as SourceKind) || + typeof value.source.sha256 !== "string" || !SHA256.test(value.source.sha256)) { + throw new CorrectiveCaseRunnerError("COMMAND_MALFORMED", "context.source provenance is invalid"); + } + const resourceProvider = value.resourceProvider === undefined ? undefined : value.resourceProvider; + if (resourceProvider !== undefined && (typeof resourceProvider !== "string" || !RESOURCE_PROVIDERS.has(resourceProvider as ResourceProvider))) { + throw new CorrectiveCaseRunnerError("COMMAND_MALFORMED", "context.resourceProvider is invalid"); + } + return { + mainId, + targetKind: value.targetKind as TargetKind, + ...(targetId === undefined ? {} : { targetId }), + editMode: value.editMode as EditMode, + authorization: value.authorization as Authorization, + source: { kind: value.source.kind as SourceKind, sha256: value.source.sha256 }, + ...(resourceProvider === undefined ? {} : { resourceProvider: resourceProvider as ResourceProvider }), + }; +} + +export function validateCommand(value: unknown): MainMutationCommand { + if (!record(value)) throw new CorrectiveCaseRunnerError("COMMAND_MALFORMED", "command must be an object"); + exactKeys(value, new Set(["schemaVersion", "requestId", "commandType", "baseRevision", "context", "payload"]), "command"); + if (value.schemaVersion !== CORRECTIVE_CASE_SCHEMA) throw new CorrectiveCaseRunnerError("COMMAND_MALFORMED", "schemaVersion is unsupported"); + const requestId = boundedText(value.requestId, "requestId", REQUEST_ID); + const commandType = boundedText(value.commandType, "commandType", COMMAND_TYPE); + const baseRevision = nonNegativeInteger(value.baseRevision, "baseRevision"); + const context = commandContext(value.context); + if (!record(value.payload)) throw new CorrectiveCaseRunnerError("COMMAND_MALFORMED", "payload must be an object"); + for (const key of ["requestId", "baseRevision", "context"]) { + if (Object.prototype.hasOwnProperty.call(value.payload, key)) { + throw new CorrectiveCaseRunnerError("COMMAND_MALFORMED", `payload cannot override ${key}`); + } + } + return { schemaVersion: CORRECTIVE_CASE_SCHEMA, requestId, commandType, baseRevision, context, payload: { ...value.payload } }; +} + +function resultObject(value: unknown): Record { + if (!record(value)) throw new CorrectiveCaseRunnerError("COMMAND_MALFORMED", "result must be an object"); + exactKeys(value, new Set(["schemaVersion", "requestId", "status", "code", "baseRevision", "mainRevisionBefore", "mainRevisionAfter", "mainMutation", "delta", "persistence", "error"]), "result"); + return value; +} + +function optionalObject(value: unknown, label: string): Record | null { + if (value === undefined || value === null) return null; + if (!record(value)) throw new CorrectiveCaseRunnerError("COMMAND_MALFORMED", `${label} must be an object or null`); + return { ...value }; +} + +export function normalizeResult(value: unknown, command: MainMutationCommand, mainRevisionBefore: number): MainMutationResult { + const result = resultObject(value); + if (result.schemaVersion !== CORRECTIVE_CASE_SCHEMA || result.requestId !== command.requestId || result.baseRevision !== command.baseRevision) { + throw new CorrectiveCaseRunnerError("COMMAND_MALFORMED", "result identity is not bound to the command"); + } + nonNegativeInteger(result.mainRevisionBefore, "mainRevisionBefore"); + nonNegativeInteger(result.mainRevisionAfter, "mainRevisionAfter"); + if (result.mainRevisionBefore !== mainRevisionBefore) throw new CorrectiveCaseRunnerError("COMMAND_MALFORMED", "result before revision is not current"); + if (typeof result.status !== "string" || !STATUSES.has(result.status as CommandStatus) || typeof result.code !== "string" || !STATUS_CODE_PAIRS.has(`${result.status}:${result.code}`)) { + throw new CorrectiveCaseRunnerError("COMMAND_MALFORMED", "status and code are not a closed pair"); + } + const status = result.status as CommandStatus; + const mutation = result.mainMutation; + const expectedMutation: MainMutation = status === "FINISHED" ? "CHANGED" : "UNCHANGED"; + if (mutation !== expectedMutation || result.mainRevisionAfter !== mainRevisionBefore + (status === "FINISHED" ? 1 : 0)) { + throw new CorrectiveCaseRunnerError("COMMAND_MALFORMED", "result revision or mutation invariant failed"); + } + const delta = optionalObject(result.delta, "delta"); + const persistence = optionalObject(result.persistence, "persistence"); + const error = optionalObject(result.error, "error"); + if (status !== "FINISHED" && (delta !== null || persistence !== null)) { + throw new CorrectiveCaseRunnerError("COMMAND_MALFORMED", "failure result cannot claim delta or persistence"); + } + return { + schemaVersion: CORRECTIVE_CASE_SCHEMA, + requestId: command.requestId, + status, + code: STATUS_CODES[status], + baseRevision: command.baseRevision, + mainRevisionBefore, + mainRevisionAfter: result.mainRevisionAfter, + mainMutation: expectedMutation, + delta, + persistence, + error, + }; +} + +function failure(command: MainMutationCommand | null, status: Exclude, before: number, message: string, code = STATUS_CODES[status]): MainMutationResult { + const requestId = command?.requestId ?? "invalid-request"; + const baseRevision = command?.baseRevision ?? before; + return { + schemaVersion: CORRECTIVE_CASE_SCHEMA, + requestId, + status, + code, + baseRevision, + mainRevisionBefore: before, + mainRevisionAfter: before, + mainMutation: "UNCHANGED", + delta: null, + persistence: null, + error: { code, message }, + }; +} + +function commandIdentity(value: unknown): { requestId: string; commandType: string } { + const input = record(value) ? value : {}; + return { + requestId: typeof input.requestId === "string" && REQUEST_ID.test(input.requestId) ? input.requestId : "invalid-request", + commandType: typeof input.commandType === "string" && COMMAND_TYPE.test(input.commandType) ? input.commandType : "malformed", + }; +} + +function receipt(surface: CaseSurface, command: MainMutationCommand | null, result: MainMutationResult): SurfaceReceipt { + const identity = command ? { requestId: command.requestId, commandType: command.commandType } : commandIdentity(result); + return { + schemaVersion: CORRECTIVE_CASE_SCHEMA, + surface, + requestId: identity.requestId, + commandType: identity.commandType, + context: command?.context ?? null, + result, + }; +} + +async function runSurface(surface: CaseSurface, options: SurfaceCaseOptions): Promise { + const before = nonNegativeInteger(options.mainRevision, "mainRevision"); + let command: MainMutationCommand; + try { + command = validateCommand(options.command); + } + catch (error) { + const identity = commandIdentity(options.command); + const malformed = failure(null, "MALFORMED", before, error instanceof Error ? error.message : String(error)); + malformed.requestId = identity.requestId; + return receipt(surface, null, malformed); + } + if (command.baseRevision !== before) return receipt(surface, command, failure(command, "BLOCKED", before, "base revision does not match current Main")); + if (command.context.editMode !== "EDITABLE" || command.context.authorization === "NONE") { + return receipt(surface, command, failure(command, "BLOCKED", before, "context cannot authorize a Main mutation", "INVALID_CONTEXT")); + } + if (command.context.source.kind === "EXTERNAL" && (!command.context.resourceProvider || command.context.resourceProvider === "NONE")) { + return receipt(surface, command, failure(command, "EXTERNAL_REQUIRED", before, "external source requires a resource provider")); + } + try { + return receipt(surface, command, normalizeResult(await options.execute(command), command, before)); + } + catch (error) { + const message = error instanceof Error ? error.message : String(error); + const code = error instanceof CorrectiveCaseRunnerError ? error.code : "COMMAND_UNSUPPORTED"; + const status = code === "RESOURCE_REQUIRED" ? "EXTERNAL_REQUIRED" : code === "CANCELLED" ? "CANCELLED" : code === "REVISION_CONFLICT" || code === "INVALID_CONTEXT" ? "BLOCKED" : code === "COMMAND_MALFORMED" ? "MALFORMED" : "UNSUPPORTED"; + return receipt(surface, command, failure(command, status, before, message, code === "INVALID_CONTEXT" ? code : STATUS_CODES[status])); + } +} + +export function runDesktopCase(options: SurfaceCaseOptions): Promise { + return runSurface("DESKTOP", options); +} + +export function runWasmCase(options: SurfaceCaseOptions): Promise { + return runSurface("WASM", options); +} + +function coreReceipt(receiptValue: SurfaceReceipt): Record { + const result = receiptValue.result; + return { + requestId: receiptValue.requestId, + commandType: receiptValue.commandType, + status: result.status, + code: result.code, + baseRevision: result.baseRevision, + mainRevisionBefore: result.mainRevisionBefore, + mainRevisionAfter: result.mainRevisionAfter, + mainMutation: result.mainMutation, + delta: result.delta, + persistence: result.persistence, + }; +} + +function stable(value: unknown): unknown { + if (Array.isArray(value)) return value.map(stable); + if (record(value)) return Object.fromEntries(Object.keys(value).sort().map((key) => [key, stable(value[key])])); + return value; +} + +export function compareReceipts(desktop: SurfaceReceipt, wasm: SurfaceReceipt): { parity: "MATCH" | "MISMATCH"; differences: string[] } { + const left = coreReceipt(desktop); + const right = coreReceipt(wasm); + const differences = Object.keys(left).filter((key) => JSON.stringify(stable(left[key])) !== JSON.stringify(stable(right[key]))).map((key) => `${key}: desktop=${JSON.stringify(stable(left[key]))} wasm=${JSON.stringify(stable(right[key]))}`); + return { parity: differences.length === 0 ? "MATCH" : "MISMATCH", differences }; +} + +export async function runSharedCase(command: unknown, mainRevision: number, executors: { desktop: SurfaceCaseOptions["execute"]; wasm: SurfaceCaseOptions["execute"] }): Promise { + const desktop = await runDesktopCase({ command, mainRevision, execute: executors.desktop }); + const wasm = await runWasmCase({ command, mainRevision, execute: executors.wasm }); + const comparison = compareReceipts(desktop, wasm); + return { + schemaVersion: CORRECTIVE_CASE_SCHEMA, + requestId: desktop.requestId, + commandType: desktop.commandType, + desktop, + wasm, + ...comparison, + }; +} diff --git a/web/protocol/corrective-command-registry.ts b/web/protocol/corrective-command-registry.ts new file mode 100644 index 00000000..bb34f177 --- /dev/null +++ b/web/protocol/corrective-command-registry.ts @@ -0,0 +1,116 @@ +import { + Authorization, + CaseSurface, + CommandContext, + CorrectiveCaseRunnerError, + MainMutationCommand, + MainMutationResult, + SurfaceReceipt, + TargetKind, + runDesktopCase, + runWasmCase, +} from "./corrective-case-runner"; + +export const CORRECTIVE_COMMAND_REGISTRY_SCHEMA = 1 as const; + +export type CommandExecutor = (command: MainMutationCommand) => MainMutationResult | Promise; + +export interface RegisteredCommand { + commandType: string; + targetKinds: readonly TargetKind[]; + authorizations: readonly Exclude[]; + execute: CommandExecutor; +} + +export class CommandRegistryError extends Error { + readonly code: "REGISTRY_INVALID" | "REGISTRY_DUPLICATE"; + + constructor(code: "REGISTRY_INVALID" | "REGISTRY_DUPLICATE", message: string) { + super(`${code}: ${message}`); + this.name = "CommandRegistryError"; + this.code = code; + } +} + +export interface DispatchOptions { + command: unknown; + mainRevision: number; +} + +const COMMAND_TYPE = /^[a-z][A-Za-z0-9]{0,127}$/u; +const TARGET_KINDS = new Set(["ASSET_LIBRARY", "DATABLOCK", "MESH", "MODIFIER", "SCENE"]); +const AUTHORIZATIONS = new Set>(["USER_EDIT", "SYSTEM"]); + +function unique(values: readonly T[]): boolean { + return new Set(values).size === values.length; +} + +function validateDefinition(definition: RegisteredCommand): void { + if (!definition || typeof definition !== "object" || !COMMAND_TYPE.test(definition.commandType)) { + throw new CommandRegistryError("REGISTRY_INVALID", "commandType is invalid"); + } + if (!Array.isArray(definition.targetKinds) || definition.targetKinds.length === 0 || + !unique(definition.targetKinds) || definition.targetKinds.some((kind) => !TARGET_KINDS.has(kind))) { + throw new CommandRegistryError("REGISTRY_INVALID", "targetKinds must contain unique supported targets"); + } + if (!Array.isArray(definition.authorizations) || definition.authorizations.length === 0 || + !unique(definition.authorizations) || definition.authorizations.some((authorization) => !AUTHORIZATIONS.has(authorization))) { + throw new CommandRegistryError("REGISTRY_INVALID", "authorizations must contain unique mutating authorities"); + } + if (typeof definition.execute !== "function") { + throw new CommandRegistryError("REGISTRY_INVALID", "execute must be a function"); + } +} + +function contextError(context: CommandContext, message: string): CorrectiveCaseRunnerError { + return new CorrectiveCaseRunnerError("INVALID_CONTEXT", `${context.targetKind}: ${message}`); +} + +export class CorrectiveCommandRegistry { + readonly schemaVersion = CORRECTIVE_COMMAND_REGISTRY_SCHEMA; + private readonly commands = new Map(); + + register(definition: RegisteredCommand): this { + validateDefinition(definition); + if (this.commands.has(definition.commandType)) { + throw new CommandRegistryError("REGISTRY_DUPLICATE", `commandType ${definition.commandType} is already registered`); + } + this.commands.set(definition.commandType, { + commandType: definition.commandType, + targetKinds: [...definition.targetKinds], + authorizations: [...definition.authorizations], + execute: definition.execute, + }); + return this; + } + + has(commandType: string): boolean { + return this.commands.has(commandType); + } + + list(): string[] { + return [...this.commands.keys()].sort(); + } + + async dispatch(surface: CaseSurface, options: DispatchOptions): Promise { + const run = surface === "DESKTOP" ? runDesktopCase : runWasmCase; + return run({ + command: options.command, + mainRevision: options.mainRevision, + execute: async (command) => { + const definition = this.commands.get(command.commandType); + if (!definition) { + throw new CorrectiveCaseRunnerError("COMMAND_UNSUPPORTED", `commandType ${command.commandType} is not registered`); + } + if (!definition.targetKinds.includes(command.context.targetKind)) { + throw contextError(command.context, "target is not authorized for this command"); + } + if (!definition.authorizations.includes(command.context.authorization as Exclude)) { + throw contextError(command.context, "authorization is not allowed for this command"); + } + return definition.execute(command); + }, + }); + } +} + diff --git a/web/protocol/corrective-family-runner.ts b/web/protocol/corrective-family-runner.ts new file mode 100644 index 00000000..38619b97 --- /dev/null +++ b/web/protocol/corrective-family-runner.ts @@ -0,0 +1,45 @@ +import { CorrectiveCommandRegistry } from "./corrective-command-registry"; +import { CaseSurface, SurfaceReceipt } from "./corrective-case-runner"; + +export type CorrectiveFamily = "ASSET_CATALOG" | "MODIFIER" | "MESH"; + +export interface CorrectiveFamilyCase { + id: string; + family: CorrectiveFamily; + registry: CorrectiveCommandRegistry; + surface: CaseSurface; + command: unknown; + mainRevision: number; +} + +export interface CorrectiveFamilyResult extends CorrectiveFamilyCase { + receipt: SurfaceReceipt; +} + +const CASE_ID = /^[A-Za-z][A-Za-z0-9._:-]{0,127}$/u; + +export async function runCorrectiveFamilyCases(cases: readonly CorrectiveFamilyCase[]): Promise { + const ids = new Set(); + for (const testCase of cases) { + if (!testCase || !CASE_ID.test(testCase.id) || ids.has(testCase.id)) throw new Error(`family case id is invalid or duplicated: ${testCase?.id ?? "unknown"}`); + ids.add(testCase.id); + if (!["ASSET_CATALOG", "MODIFIER", "MESH"].includes(testCase.family)) throw new Error(`unsupported corrective family: ${testCase.family}`); + if (!(testCase.registry instanceof CorrectiveCommandRegistry)) throw new Error(`family case registry is invalid: ${testCase.id}`); + if (!Number.isSafeInteger(testCase.mainRevision) || testCase.mainRevision < 0) throw new Error(`family case revision is invalid: ${testCase.id}`); + } + return Promise.all(cases.map(async (testCase) => ({ ...testCase, receipt: await testCase.registry.dispatch(testCase.surface, { command: testCase.command, mainRevision: testCase.mainRevision }) }))); +} + +export function summarizeCorrectiveFamilyResults(results: readonly CorrectiveFamilyResult[]): Record { + const summary: Record = { + ASSET_CATALOG: { total: 0, finished: 0, unchanged: 0 }, + MODIFIER: { total: 0, finished: 0, unchanged: 0 }, + MESH: { total: 0, finished: 0, unchanged: 0 }, + }; + for (const result of results) { + const bucket = summary[result.family]; bucket.total += 1; + if (result.receipt.result.status === "FINISHED") bucket.finished += 1; + if (result.receipt.result.mainMutation === "UNCHANGED") bucket.unchanged += 1; + } + return summary; +} diff --git a/web/protocol/corrective-history-store.ts b/web/protocol/corrective-history-store.ts new file mode 100644 index 00000000..462855f0 --- /dev/null +++ b/web/protocol/corrective-history-store.ts @@ -0,0 +1,70 @@ +import { InMemoryMainStore, MainSnapshot } from "./corrective-main-transaction"; + +export interface HistoryState extends MainSnapshot { + canUndo: boolean; + canRedo: boolean; + savedRevision: number; +} + +export class CorrectiveHistoryStore extends InMemoryMainStore { + private readonly capacity: number; + private undoStack: MainSnapshot[] = []; + private redoStack: MainSnapshot[] = []; + private saved: MainSnapshot; + + constructor(value: T, revision: number, dirty: boolean, clone: (value: T) => T, capacity = 16) { + super(value, revision, dirty, clone); + if (!Number.isSafeInteger(capacity) || capacity < 1 || capacity > 256) throw new Error("history capacity must be between 1 and 256"); + this.capacity = capacity; + this.saved = this.snapshot(); + } + + override commit(value: T, revision: number, dirty: boolean): void { + const before = this.snapshot(); + super.commit(value, revision, dirty); + if (before.revision !== revision || JSON.stringify(before.value) !== JSON.stringify(value) || before.dirty !== dirty) { + this.undoStack.push(before); + if (this.undoStack.length > this.capacity) this.undoStack.shift(); + this.redoStack = []; + } + } + + save(): MainSnapshot { + const current = this.snapshot(); + this.saved = current; + super.commit(current.value, current.revision, false); + return this.snapshot(); + } + + reopen(): MainSnapshot { + const before = this.snapshot(); + super.commit(this.saved.value, this.saved.revision, false); + this.undoStack = []; + this.redoStack = []; + return before; + } + + undo(): MainSnapshot { + const previous = this.undoStack.pop(); + if (!previous) return this.snapshot(); + const current = this.snapshot(); + this.redoStack.push(current); + super.commit(previous.value, previous.revision, previous.dirty); + return this.snapshot(); + } + + redo(): MainSnapshot { + const next = this.redoStack.pop(); + if (!next) return this.snapshot(); + const current = this.snapshot(); + this.undoStack.push(current); + super.commit(next.value, next.revision, next.dirty); + return this.snapshot(); + } + + historyState(): HistoryState { + const current = this.snapshot(); + return { ...current, canUndo: this.undoStack.length > 0, canRedo: this.redoStack.length > 0, savedRevision: this.saved.revision }; + } +} + diff --git a/web/protocol/corrective-main-transaction.ts b/web/protocol/corrective-main-transaction.ts new file mode 100644 index 00000000..36c02605 --- /dev/null +++ b/web/protocol/corrective-main-transaction.ts @@ -0,0 +1,92 @@ +import { + CorrectiveCaseRunnerError, + MainMutationCommand, + MainMutationResult, +} from "./corrective-case-runner"; + +export interface MainSnapshot { + value: T; + revision: number; + dirty: boolean; +} + +export interface AtomicMutationOutcome { + delta: Record; + persistence?: Record | null; +} + +export type DraftMutation = (draft: T, command: MainMutationCommand) => AtomicMutationOutcome | Promise; + +export class InMemoryMainStore { + private value: T; + private currentRevision: number; + private currentDirty: boolean; + private readonly clone: (value: T) => T; + + constructor(value: T, revision: number, dirty: boolean, clone: (value: T) => T) { + if (!Number.isSafeInteger(revision) || revision < 0) throw new Error("revision must be a non-negative integer"); + this.clone = clone; + this.value = clone(value); + this.currentRevision = revision; + this.currentDirty = dirty; + } + + snapshot(): MainSnapshot { + return { value: this.clone(this.value), revision: this.currentRevision, dirty: this.currentDirty }; + } + + commit(value: T, revision: number, dirty: boolean): void { + if (!Number.isSafeInteger(revision) || revision < 0) throw new Error("revision must be a non-negative integer"); + this.value = this.clone(value); + this.currentRevision = revision; + this.currentDirty = dirty; + } + + restore(snapshot: MainSnapshot): void { + this.commit(snapshot.value, snapshot.revision, snapshot.dirty); + } +} + +function validOutcome(value: unknown): value is AtomicMutationOutcome { + if (!value || typeof value !== "object" || Array.isArray(value)) return false; + const candidate = value as Record; + if (!candidate.delta || typeof candidate.delta !== "object" || Array.isArray(candidate.delta)) return false; + return candidate.persistence === undefined || candidate.persistence === null || + (typeof candidate.persistence === "object" && !Array.isArray(candidate.persistence)); +} + +export async function runAtomicMutation( + store: InMemoryMainStore, + command: MainMutationCommand, + mutate: DraftMutation, +): Promise { + const before = store.snapshot(); + if (command.baseRevision !== before.revision) { + throw new CorrectiveCaseRunnerError("REVISION_CONFLICT", "base revision does not match current Main"); + } + try { + const draft = store.snapshot().value; + const outcome = await mutate(draft, command); + if (!validOutcome(outcome)) { + throw new CorrectiveCaseRunnerError("COMMAND_MALFORMED", "atomic mutation outcome is invalid"); + } + store.commit(draft, before.revision + 1, true); + return { + schemaVersion: 1, + requestId: command.requestId, + status: "FINISHED", + code: "OK", + baseRevision: command.baseRevision, + mainRevisionBefore: before.revision, + mainRevisionAfter: before.revision + 1, + mainMutation: "CHANGED", + delta: { ...outcome.delta }, + persistence: outcome.persistence === undefined ? { dirty: true } : outcome.persistence, + error: null, + }; + } catch (error) { + store.restore(before); + throw error; + } +} + diff --git a/web/protocol/corrective-mesh-command.ts b/web/protocol/corrective-mesh-command.ts new file mode 100644 index 00000000..cc0db84c --- /dev/null +++ b/web/protocol/corrective-mesh-command.ts @@ -0,0 +1,72 @@ +import { CorrectiveCommandRegistry } from "./corrective-command-registry"; +import { CorrectiveCaseRunnerError, MainMutationCommand } from "./corrective-case-runner"; +import { InMemoryMainStore, runAtomicMutation } from "./corrective-main-transaction"; + +export interface MeshVertexState { + id: string; + x: number; + y: number; + z: number; +} + +export interface MeshMain { + vertices: MeshVertexState[]; +} + +const VERTEX_ID = /^[A-Za-z0-9._:-]{1,128}$/u; +const COORDINATE_LIMIT = 1_000_000; + +function coordinate(value: unknown, label: string): number { + if (typeof value !== "number" || !Number.isFinite(value) || Math.abs(value) > COORDINATE_LIMIT) { + throw new CorrectiveCaseRunnerError("COMMAND_MALFORMED", `${label} must be a finite coordinate within bounds`); + } + return value; +} + +function meshPayload(command: MainMutationCommand): { vertexId: string; delta: { x: number; y: number; z: number } } { + const input = command.payload; + if (!input || typeof input !== "object" || Array.isArray(input) || + typeof input.vertexId !== "string" || !VERTEX_ID.test(input.vertexId) || + !input.delta || typeof input.delta !== "object" || Array.isArray(input.delta) || + Object.keys(input).some((key) => !["vertexId", "delta"].includes(key))) { + throw new CorrectiveCaseRunnerError("COMMAND_MALFORMED", "mesh payload must contain only vertexId and delta"); + } + const delta = input.delta as Record; + if (Object.keys(delta).some((key) => !["x", "y", "z"].includes(key)) || + !Object.prototype.hasOwnProperty.call(delta, "x") || !Object.prototype.hasOwnProperty.call(delta, "y") || !Object.prototype.hasOwnProperty.call(delta, "z")) { + throw new CorrectiveCaseRunnerError("COMMAND_MALFORMED", "mesh delta must contain only x, y, and z"); + } + return { vertexId: input.vertexId, delta: { x: coordinate(delta.x, "delta.x"), y: coordinate(delta.y, "delta.y"), z: coordinate(delta.z, "delta.z") } }; +} + +function cloneMeshMain(value: MeshMain): MeshMain { + return { vertices: value.vertices.map((vertex) => ({ ...vertex })) }; +} + +export function createMeshRegistry(main: InMemoryMainStore): CorrectiveCommandRegistry { + return new CorrectiveCommandRegistry().register({ + commandType: "meshTranslateVertex", + targetKinds: ["MESH"], + authorizations: ["USER_EDIT", "SYSTEM"], + execute: async (command) => { + const change = meshPayload(command); + return runAtomicMutation(main, command, (draft) => { + const vertex = draft.vertices.find((candidate) => candidate.id === change.vertexId); + if (!vertex) throw new CorrectiveCaseRunnerError("COMMAND_UNSUPPORTED", `vertex ${change.vertexId} does not exist`); + const before = { x: vertex.x, y: vertex.y, z: vertex.z }; + const after = { x: before.x + change.delta.x, y: before.y + change.delta.y, z: before.z + change.delta.z }; + if ([after.x, after.y, after.z].some((value) => !Number.isFinite(value) || Math.abs(value) > COORDINATE_LIMIT)) { + throw new CorrectiveCaseRunnerError("COMMAND_MALFORMED", "mesh translation exceeds coordinate bounds"); + } + vertex.x = after.x; + vertex.y = after.y; + vertex.z = after.z; + return { delta: { vertexId: vertex.id, before, after }, persistence: { dirty: true } }; + }); + }, + }); +} + +export function createMeshMain(vertices: readonly MeshVertexState[], revision = 0, dirty = false): InMemoryMainStore { + return new InMemoryMainStore({ vertices: vertices.map((vertex) => ({ ...vertex })) }, revision, dirty, cloneMeshMain); +} diff --git a/web/protocol/corrective-modifier-command.ts b/web/protocol/corrective-modifier-command.ts new file mode 100644 index 00000000..afe7ebc0 --- /dev/null +++ b/web/protocol/corrective-modifier-command.ts @@ -0,0 +1,59 @@ +import { CorrectiveCommandRegistry } from "./corrective-command-registry"; +import { CorrectiveCaseRunnerError, MainMutationCommand } from "./corrective-case-runner"; +import { InMemoryMainStore, runAtomicMutation } from "./corrective-main-transaction"; + +export interface ModifierState { + uuid: string; + name: string; + type: string; + enabled: boolean; + showViewport: boolean; + showRender: boolean; +} + +export interface ModifierMain { + modifiers: ModifierState[]; +} + +const UUID = /^[A-Za-z0-9._:-]{1,128}$/u; + +function modifierPayload(command: MainMutationCommand): { modifierUuid: string; enabled: boolean } { + const input = command.payload; + if (!input || typeof input !== "object" || Array.isArray(input) || + typeof input.modifierUuid !== "string" || !UUID.test(input.modifierUuid) || + typeof input.enabled !== "boolean" || Object.keys(input).some((key) => !["modifierUuid", "enabled"].includes(key))) { + throw new CorrectiveCaseRunnerError("COMMAND_MALFORMED", "modifier payload must contain only modifierUuid and enabled"); + } + return { modifierUuid: input.modifierUuid, enabled: input.enabled }; +} + +function cloneModifierMain(value: ModifierMain): ModifierMain { + return { modifiers: value.modifiers.map((modifier) => ({ ...modifier })) }; +} + +export function createModifierRegistry(main: InMemoryMainStore): CorrectiveCommandRegistry { + return new CorrectiveCommandRegistry().register({ + commandType: "modifierSetEnabled", + targetKinds: ["MODIFIER"], + authorizations: ["USER_EDIT", "SYSTEM"], + execute: async (command) => { + const change = modifierPayload(command); + return runAtomicMutation(main, command, (draft) => { + const modifier = draft.modifiers.find((candidate) => candidate.uuid === change.modifierUuid); + if (!modifier) { + throw new CorrectiveCaseRunnerError("COMMAND_UNSUPPORTED", `modifier ${change.modifierUuid} does not exist`); + } + const previousEnabled = modifier.enabled; + modifier.enabled = change.enabled; + return { + delta: { modifierUuid: modifier.uuid, previousEnabled, enabled: modifier.enabled }, + persistence: { dirty: true }, + }; + }); + }, + }); +} + +export function createModifierMain(modifiers: readonly ModifierState[], revision = 0, dirty = false): InMemoryMainStore { + return new InMemoryMainStore({ modifiers: modifiers.map((modifier) => ({ ...modifier })) }, revision, dirty, cloneModifierMain); +} diff --git a/web/protocol/corrective-resource-provider.ts b/web/protocol/corrective-resource-provider.ts new file mode 100644 index 00000000..a7145dd0 --- /dev/null +++ b/web/protocol/corrective-resource-provider.ts @@ -0,0 +1,153 @@ +export const CORRECTIVE_RESOURCE_SCHEMA = 1 as const; + +export type CatalogSourceKind = "LOCAL" | "EXTERNAL" | "PACKED"; +export type ResourceProviderKind = "LOCAL" | "EXTERNAL_LIBRARY" | "PACKED_BLEND"; + +export interface ActiveLibraryContext { + libraryId: string; + sourceKind: CatalogSourceKind; + sourceId: string; + generation: number; + revision: number; + readOnly: boolean; +} + +export interface ResourceRequest { + schemaVersion: typeof CORRECTIVE_RESOURCE_SCHEMA; + requestId: string; + sourceKind: CatalogSourceKind; + sourceId: string; + sha256: string; +} + +export interface ResourceRecord { + schemaVersion: typeof CORRECTIVE_RESOURCE_SCHEMA; + provider: ResourceProviderKind; + sourceKind: CatalogSourceKind; + sourceId: string; + sha256: string; + bytes: Uint8Array; +} + +export class CorrectiveResourceError extends Error { + readonly code: "RESOURCE_MALFORMED" | "RESOURCE_REQUIRED" | "RESOURCE_NOT_FOUND" | "RESOURCE_HASH_MISMATCH" | "CANCELLED" | "CONTEXT_INVALID"; + + constructor(code: CorrectiveResourceError["code"], message: string) { + super(`${code}: ${message}`); + this.name = "CorrectiveResourceError"; + this.code = code; + } +} + +const SHA256 = /^[a-f0-9]{64}$/u; +const REQUEST_ID = /^[A-Za-z0-9._:-]{1,256}$/u; +const SOURCE_ID = /^[A-Za-z0-9._:/-]{1,256}$/u; +const LIBRARY_ID = /^[A-Za-z0-9._:/-]{1,256}$/u; +const SOURCE_KINDS = new Set(["LOCAL", "EXTERNAL", "PACKED"]); + +function assertText(value: unknown, pattern: RegExp, label: string): string { + if (typeof value !== "string" || !pattern.test(value)) throw new CorrectiveResourceError("RESOURCE_MALFORMED", `${label} is invalid`); + return value; +} + +function assertInteger(value: unknown, label: string): number { + if (typeof value !== "number" || !Number.isSafeInteger(value) || value < 0) throw new CorrectiveResourceError("RESOURCE_MALFORMED", `${label} is invalid`); + return value; +} + +function bytesCopy(value: Uint8Array): Uint8Array { + return new Uint8Array(value); +} + +async function digest(bytes: Uint8Array): Promise { + const hash = await globalThis.crypto.subtle.digest("SHA-256", bytes as Uint8Array); + return [...new Uint8Array(hash)].map((value) => value.toString(16).padStart(2, "0")).join(""); +} + +export function validateActiveLibraryContext(value: unknown): ActiveLibraryContext { + if (!value || typeof value !== "object" || Array.isArray(value)) throw new CorrectiveResourceError("CONTEXT_INVALID", "active library context must be an object"); + const input = value as Record; + const keys = Object.keys(input); + if (keys.some((key) => !["libraryId", "sourceKind", "sourceId", "generation", "revision", "readOnly"].includes(key))) throw new CorrectiveResourceError("CONTEXT_INVALID", "active library context has unknown fields"); + const libraryId = assertText(input.libraryId, LIBRARY_ID, "libraryId"); + const sourceKind = input.sourceKind; + if (typeof sourceKind !== "string" || !SOURCE_KINDS.has(sourceKind as CatalogSourceKind)) throw new CorrectiveResourceError("CONTEXT_INVALID", "sourceKind is invalid"); + const sourceId = assertText(input.sourceId, SOURCE_ID, "sourceId"); + const generation = assertInteger(input.generation, "generation"); + const revision = assertInteger(input.revision, "revision"); + if (typeof input.readOnly !== "boolean") throw new CorrectiveResourceError("CONTEXT_INVALID", "readOnly is invalid"); + return { libraryId, sourceKind: sourceKind as CatalogSourceKind, sourceId, generation, revision, readOnly: input.readOnly }; +} + +export function validateResourceRequest(value: unknown): ResourceRequest { + if (!value || typeof value !== "object" || Array.isArray(value)) throw new CorrectiveResourceError("RESOURCE_MALFORMED", "resource request must be an object"); + const input = value as Record; + if (Object.keys(input).some((key) => !["schemaVersion", "requestId", "sourceKind", "sourceId", "sha256"].includes(key))) throw new CorrectiveResourceError("RESOURCE_MALFORMED", "resource request has unknown fields"); + if (input.schemaVersion !== CORRECTIVE_RESOURCE_SCHEMA) throw new CorrectiveResourceError("RESOURCE_MALFORMED", "schemaVersion is unsupported"); + const requestId = assertText(input.requestId, REQUEST_ID, "requestId"); + if (typeof input.sourceKind !== "string" || !SOURCE_KINDS.has(input.sourceKind as CatalogSourceKind)) throw new CorrectiveResourceError("RESOURCE_MALFORMED", "sourceKind is invalid"); + const sourceId = assertText(input.sourceId, SOURCE_ID, "sourceId"); + const sha256 = assertText(input.sha256, SHA256, "sha256"); + return { schemaVersion: CORRECTIVE_RESOURCE_SCHEMA, requestId, sourceKind: input.sourceKind as CatalogSourceKind, sourceId, sha256 }; +} + +export class InMemoryCatalogProvider { + readonly provider: ResourceProviderKind; + private readonly records = new Map(); + + constructor(provider: ResourceProviderKind) { + this.provider = provider; + } + + async put(sourceId: string, bytes: Uint8Array): Promise { + assertText(sourceId, SOURCE_ID, "sourceId"); + if (!(bytes instanceof Uint8Array)) throw new CorrectiveResourceError("RESOURCE_MALFORMED", "bytes must be Uint8Array"); + const copy = bytesCopy(bytes); + const hash = await digest(copy); + this.records.set(sourceId, copy); + return hash; + } + + async load(sourceId: string, signal?: AbortSignal): Promise { + if (signal?.aborted) throw new CorrectiveResourceError("CANCELLED", "resource lookup cancelled"); + const value = this.records.get(sourceId); + if (!value) throw new CorrectiveResourceError("RESOURCE_NOT_FOUND", `resource ${sourceId} is not available`); + await Promise.resolve(); + if (signal?.aborted) throw new CorrectiveResourceError("CANCELLED", "resource lookup cancelled"); + return bytesCopy(value); + } +} + +export class AssetCatalogResourceResolver { + private readonly providers = new Map(); + private active: ActiveLibraryContext | null = null; + + setActiveLibraryContext(value: unknown): ActiveLibraryContext { + this.active = validateActiveLibraryContext(value); + return { ...this.active }; + } + + registerProvider(provider: InMemoryCatalogProvider): this { + this.providers.set(provider.provider, provider); + return this; + } + + activeLibraryContext(): ActiveLibraryContext | null { + return this.active ? { ...this.active } : null; + } + + async resolve(value: unknown, signal?: AbortSignal): Promise { + const request = validateResourceRequest(value); + if (signal?.aborted) throw new CorrectiveResourceError("CANCELLED", "resource lookup cancelled"); + if (!this.active || this.active.sourceKind !== request.sourceKind || this.active.sourceId !== request.sourceId) { + throw new CorrectiveResourceError("CONTEXT_INVALID", "request does not match active library context"); + } + const providerKind: ResourceProviderKind = request.sourceKind === "LOCAL" ? "LOCAL" : request.sourceKind === "EXTERNAL" ? "EXTERNAL_LIBRARY" : "PACKED_BLEND"; + const provider = this.providers.get(providerKind); + if (!provider) throw new CorrectiveResourceError("RESOURCE_REQUIRED", `${providerKind} provider is required`); + const bytes = await provider.load(request.sourceId, signal); + const observed = await digest(bytes); + if (observed !== request.sha256) throw new CorrectiveResourceError("RESOURCE_HASH_MISMATCH", `resource hash ${observed} does not match request`); + return { schemaVersion: CORRECTIVE_RESOURCE_SCHEMA, provider: providerKind, sourceKind: request.sourceKind, sourceId: request.sourceId, sha256: observed, bytes }; + } +} diff --git a/web/protocol/scene-ir.ts b/web/protocol/scene-ir.ts index 248b6bd2..4fb1869e 100644 --- a/web/protocol/scene-ir.ts +++ b/web/protocol/scene-ir.ts @@ -46,9 +46,22 @@ export interface SceneNodeIR { localMatrix: number[]; worldMatrix: number[]; transform: SceneTransformIR; + assetData?: AssetMetadataIR; constraints?: ConstraintIR[]; } +export interface AssetMetadataIR { + marked: true; + author: string; + description: string; + copyright: string; + license: string; + catalogSimpleName: string; + activeTag: number; + preferredImportMethod: number; + tags: string[]; +} + export interface ConstraintIR { name: string; typeCode: number; diff --git a/web/tests/e2e/corrective-asset-catalog-pilot.spec.ts b/web/tests/e2e/corrective-asset-catalog-pilot.spec.ts new file mode 100644 index 00000000..fd0721e7 --- /dev/null +++ b/web/tests/e2e/corrective-asset-catalog-pilot.spec.ts @@ -0,0 +1,41 @@ +import { expect, test } from "@playwright/test"; +import fs from "node:fs"; +import path from "node:path"; + +const evidenceRoot = path.resolve(import.meta.dirname, "../../../tests/golden/corrective/C3-003"); + +test("C3-003 Chromium asset catalog pilot covers five cases and save/reopen", async ({ page }) => { + await page.goto("/"); + const report = await page.evaluate(async () => { + const { createAssetCatalogRegistry, AssetCatalogResourceResolver, InMemoryCatalogProvider, InMemoryMainStore, CorrectiveHistoryStore } = await import("/src/corrective-pilot-bridge.ts"); + const bytes = new TextEncoder().encode("chromium-catalog-fixture"); + const provider = new InMemoryCatalogProvider("EXTERNAL_LIBRARY"); + const hash = await provider.put("library.blend", bytes); + const resources = new AssetCatalogResourceResolver(); + resources.registerProvider(provider).setActiveLibraryContext({ libraryId: "lib:chromium", sourceKind: "EXTERNAL", sourceId: "library.blend", generation: 1, revision: 4, readOnly: false }); + const createMain = () => new InMemoryMainStore({ entries: [] }, 4, false, (value) => ({ entries: value.entries.map((entry) => ({ ...entry })) })); + const command = (overrides = {}) => ({ schemaVersion: 1, requestId: "chromium-catalog-001", commandType: "assetCatalogAppend", baseRevision: 4, context: { mainId: "main:chromium", targetKind: "ASSET_LIBRARY", targetId: "library:chromium", editMode: "EDITABLE", authorization: "USER_EDIT", source: { kind: "EXTERNAL", sha256: hash }, resourceProvider: "EXTERNAL_LIBRARY" }, payload: { id: "asset:chromium", name: "Chromium Asset", resource: { schemaVersion: 1, requestId: "resource-chromium-001", sourceKind: "EXTERNAL", sourceId: "library.blend", sha256: hash } }, ...overrides }); + const desktopMain = createMain(); const wasmMain = createMain(); + const desktop = await createAssetCatalogRegistry(desktopMain, resources).dispatch("DESKTOP", { command: command(), mainRevision: 4 }); + const wasm = await createAssetCatalogRegistry(wasmMain, resources).dispatch("WASM", { command: command(), mainRevision: 4 }); + const duplicate = await createAssetCatalogRegistry(desktopMain, resources).dispatch("DESKTOP", { command: command({ baseRevision: 5 }), mainRevision: 5 }); + const missingResources = new AssetCatalogResourceResolver(); missingResources.setActiveLibraryContext({ libraryId: "lib:chromium", sourceKind: "EXTERNAL", sourceId: "library.blend", generation: 1, revision: 4, readOnly: false }); + const missing = await createAssetCatalogRegistry(createMain(), missingResources).dispatch("WASM", { command: command(), mainRevision: 4 }); + const revision = await createAssetCatalogRegistry(createMain(), resources).dispatch("WASM", { command: command({ baseRevision: 3 }), mainRevision: 4 }); + const malformed = await createAssetCatalogRegistry(createMain(), resources).dispatch("DESKTOP", { command: command({ payload: { id: "bad id" } }), mainRevision: 4 }); + const history = new CorrectiveHistoryStore({ entries: [] }, 4, false, (value) => ({ entries: value.entries.map((entry) => ({ ...entry })) })); + history.commit(desktopMain.snapshot().value, 5, true); history.save(); history.commit({ entries: [] }, 6, true); history.reopen(); + return { positive: { desktop: desktop.result, wasm: wasm.result, desktopEntries: desktopMain.snapshot().value.entries.length, wasmEntries: wasmMain.snapshot().value.entries.length }, negative: { duplicate: duplicate.result, missing: missing.result, revision: revision.result, malformed: malformed.result }, persistence: history.snapshot(), parity: JSON.stringify(desktop.result) === JSON.stringify(wasm.result) }; + }); + fs.mkdirSync(evidenceRoot, { recursive: true }); + fs.writeFileSync(path.join(evidenceRoot, process.env.C3_PILOT_REPORT ?? "receipt-report.json"), `${JSON.stringify({ schemaVersion: 1, task: "C3-003", operation: "CORRECTIVE_ASSET_CATALOG_CHROMIUM_PILOT", browser: "chromium", queueMutation: false, ...report }, null, 2)}\n`); + expect(report.parity).toBe(true); + expect(report.positive.desktop.status).toBe("FINISHED"); + expect(report.positive.desktopEntries).toBe(1); + expect(report.positive.wasmEntries).toBe(1); + expect(report.negative.duplicate.mainRevisionAfter).toBe(5); + expect(report.negative.missing.mainRevisionAfter).toBe(4); + expect(report.negative.revision.code).toBe("REVISION_CONFLICT"); + expect(report.negative.malformed.code).toBe("COMMAND_MALFORMED"); + expect(report.persistence).toEqual({ value: { entries: [{ id: "asset:chromium", name: "Chromium Asset", sourceId: "library.blend", sourceSha256: expect.any(String), byteLength: 24 }] }, revision: 5, dirty: false }); +}); diff --git a/web/tests/e2e/corrective-family-runner.spec.ts b/web/tests/e2e/corrective-family-runner.spec.ts new file mode 100644 index 00000000..7a9c15bb --- /dev/null +++ b/web/tests/e2e/corrective-family-runner.spec.ts @@ -0,0 +1,18 @@ +import { expect, test } from "@playwright/test"; +import fs from "node:fs"; +import path from "node:path"; + +const evidenceRoot = path.resolve(import.meta.dirname, "../../../tests/golden/corrective/C5-002"); + +test("C5-002 Chromium family runner dispatches data-driven Asset, Modifier, and Mesh cases", async ({ page }) => { + await page.goto("/"); + const report = await page.evaluate(async () => { + const { AssetCatalogResourceResolver, InMemoryCatalogProvider, InMemoryMainStore, createAssetCatalogRegistry, createModifierMain, createModifierRegistry, createMeshMain, createMeshRegistry, runCorrectiveFamilyCases, summarizeCorrectiveFamilyResults } = await import("/src/corrective-pilot-bridge.ts"); + const bytes = new TextEncoder().encode("family-runner-resource"); const provider = new InMemoryCatalogProvider("EXTERNAL_LIBRARY"); const sourceHash = await provider.put("library.blend", bytes); const resolver = new AssetCatalogResourceResolver(); resolver.registerProvider(provider).setActiveLibraryContext({ libraryId: "library:family", sourceKind: "EXTERNAL", sourceId: "library.blend", generation: 1, revision: 1, readOnly: false }); + const command = (family, surface) => family === "ASSET_CATALOG" ? ({ schemaVersion: 1, requestId: `chromium-family-${surface.toLowerCase()}-asset`, commandType: "assetCatalogAppend", baseRevision: 1, context: { mainId: "main:asset", targetKind: "ASSET_LIBRARY", targetId: "library:family", editMode: "EDITABLE", authorization: "USER_EDIT", source: { kind: "EXTERNAL", sha256: sourceHash }, resourceProvider: "EXTERNAL_LIBRARY" }, payload: { id: `asset:${surface.toLowerCase()}`, name: "Family Asset", resource: { schemaVersion: 1, requestId: "family-resource", sourceKind: "EXTERNAL", sourceId: "library.blend", sha256: sourceHash } } }) : family === "MODIFIER" ? ({ schemaVersion: 1, requestId: `chromium-family-${surface.toLowerCase()}-modifier`, commandType: "modifierSetEnabled", baseRevision: 1, context: { mainId: "main:modifier", targetKind: "MODIFIER", targetId: "modifier:one", editMode: "EDITABLE", authorization: "USER_EDIT", source: { kind: "LOCAL", sha256: "f".repeat(64) } }, payload: { modifierUuid: "modifier:one", enabled: true } }) : ({ schemaVersion: 1, requestId: `chromium-family-${surface.toLowerCase()}-mesh`, commandType: "meshTranslateVertex", baseRevision: 1, context: { mainId: "main:mesh", targetKind: "MESH", targetId: "mesh:one", editMode: "EDITABLE", authorization: "USER_EDIT", source: { kind: "LOCAL", sha256: "0".repeat(64) } }, payload: { vertexId: "vertex:0", delta: { x: 1, y: 0, z: 0 } } }); + const cases = []; for (const family of ["ASSET_CATALOG", "MODIFIER", "MESH"]) for (const surface of ["DESKTOP", "WASM"]) { const main = family === "ASSET_CATALOG" ? new InMemoryMainStore({ entries: [] }, 1, false, (value) => ({ entries: value.entries.map((entry) => ({ ...entry })) })) : family === "MODIFIER" ? createModifierMain([{ uuid: "modifier:one", name: "One", type: "BEVEL", enabled: false, showViewport: true, showRender: true }], 1, false) : createMeshMain([{ id: "vertex:0", x: 0, y: 0, z: 0 }], 1, false); const registry = family === "ASSET_CATALOG" ? createAssetCatalogRegistry(main, resolver) : family === "MODIFIER" ? createModifierRegistry(main) : createMeshRegistry(main); cases.push({ id: `${family.toLowerCase()}-${surface.toLowerCase()}`, family, registry, surface, command: command(family, surface), mainRevision: 1 }); } + const results = await runCorrectiveFamilyCases(cases); return { summary: summarizeCorrectiveFamilyResults(results), results: results.map((result) => ({ id: result.id, family: result.family, surface: result.surface, receipt: result.receipt.result })) }; + }); + fs.mkdirSync(evidenceRoot, { recursive: true }); fs.writeFileSync(path.join(evidenceRoot, process.env.C4_PILOT_REPORT ?? "chromium-family-report.json"), `${JSON.stringify({ schemaVersion: 1, task: "C5-002", operation: "CORRECTIVE_FAMILY_RUNNER_CHROMIUM", browser: "chromium", queueMutation: false, ...report }, null, 2)}\n`); + expect(report.results).toHaveLength(6); expect(report.results.every((result) => result.receipt.status === "FINISHED")).toBe(true); expect(report.summary).toEqual({ ASSET_CATALOG: { total: 2, finished: 2, unchanged: 0 }, MODIFIER: { total: 2, finished: 2, unchanged: 0 }, MESH: { total: 2, finished: 2, unchanged: 0 } }); +}); diff --git a/web/tests/e2e/corrective-mesh-pilot.spec.ts b/web/tests/e2e/corrective-mesh-pilot.spec.ts new file mode 100644 index 00000000..df03dfe8 --- /dev/null +++ b/web/tests/e2e/corrective-mesh-pilot.spec.ts @@ -0,0 +1,33 @@ +import { expect, test } from "@playwright/test"; +import fs from "node:fs"; +import path from "node:path"; + +const evidenceRoot = path.resolve(import.meta.dirname, "../../../tests/golden/corrective/C4-002"); + +test("C4-002 Chromium mesh pilot covers geometry parity, rollback, and save/reopen", async ({ page }) => { + await page.goto("/"); + const report = await page.evaluate(async () => { + const { createMeshMain, createMeshRegistry, CorrectiveHistoryStore } = await import("/src/corrective-pilot-bridge.ts"); + const fixture = [{ id: "vertex:0", x: 1, y: 2, z: 3 }, { id: "vertex:1", x: 0, y: 0, z: 0 }]; + const command = (overrides = {}) => ({ schemaVersion: 1, requestId: "chromium-mesh-001", commandType: "meshTranslateVertex", baseRevision: 9, context: { mainId: "main:chromium-mesh", targetKind: "MESH", targetId: "mesh:cube", editMode: "EDITABLE", authorization: "USER_EDIT", source: { kind: "LOCAL", sha256: "b".repeat(64) } }, payload: { vertexId: "vertex:0", delta: { x: 0.5, y: -1, z: 2 } }, ...overrides }); + const desktopMain = createMeshMain(fixture, 9, false); const wasmMain = createMeshMain(fixture, 9, false); + const desktop = await createMeshRegistry(desktopMain).dispatch("DESKTOP", { command: command(), mainRevision: 9 }); const wasm = await createMeshRegistry(wasmMain).dispatch("WASM", { command: command(), mainRevision: 9 }); + const rollbackMain = createMeshMain(fixture, 9, false); const registry = createMeshRegistry(rollbackMain); + const malformed = await registry.dispatch("DESKTOP", { command: command({ payload: { vertexId: "vertex:0", delta: { x: 0.5, y: -1, z: 2, w: 1 } } }), mainRevision: 9 }); + const stale = await registry.dispatch("WASM", { command: command({ baseRevision: 8 }), mainRevision: 9 }); + const unknown = await registry.dispatch("DESKTOP", { command: command({ payload: { vertexId: "vertex:missing", delta: { x: 0.5, y: -1, z: 2 } } }), mainRevision: 9 }); + const clone = (value) => ({ vertices: value.vertices.map((vertex) => ({ ...vertex })) }); + const history = new CorrectiveHistoryStore({ vertices: fixture }, 9, false, clone); + await createMeshRegistry(history).dispatch("WASM", { command: command(), mainRevision: 9 }); + const saved = history.save(); const undone = history.undo(); const redone = history.redo(); const reopened = history.reopen(); + return { positive: { desktop: desktop.result, wasm: wasm.result, desktopMain: desktopMain.snapshot(), wasmMain: wasmMain.snapshot() }, negative: { malformed: malformed.result, stale: stale.result, unknown: unknown.result, rollbackMain: rollbackMain.snapshot() }, persistence: { saved, undone, redone, reopened, final: history.snapshot() }, parity: JSON.stringify(desktop.result) === JSON.stringify(wasm.result) && JSON.stringify(desktopMain.snapshot()) === JSON.stringify(wasmMain.snapshot()) }; + }); + fs.mkdirSync(evidenceRoot, { recursive: true }); + fs.writeFileSync(path.join(evidenceRoot, process.env.C4_PILOT_REPORT ?? "receipt-report.json"), `${JSON.stringify({ schemaVersion: 1, task: "C4-002", operation: "CORRECTIVE_MESH_CHROMIUM_PILOT", browser: "chromium", queueMutation: false, ...report }, null, 2)}\n`); + expect(report.parity).toBe(true); expect(report.positive.desktop.status).toBe("FINISHED"); + expect(report.positive.desktop.delta).toEqual({ vertexId: "vertex:0", before: { x: 1, y: 2, z: 3 }, after: { x: 1.5, y: 1, z: 5 } }); + expect(report.positive.desktopMain.value.vertices[0]).toEqual({ id: "vertex:0", x: 1.5, y: 1, z: 5 }); expect(report.positive.desktopMain.dirty).toBe(true); + expect(report.negative.malformed.code).toBe("COMMAND_MALFORMED"); expect(report.negative.stale.code).toBe("REVISION_CONFLICT"); expect(report.negative.unknown.code).toBe("COMMAND_UNSUPPORTED"); + expect(report.negative.rollbackMain).toEqual({ value: { vertices: [{ id: "vertex:0", x: 1, y: 2, z: 3 }, { id: "vertex:1", x: 0, y: 0, z: 0 }] }, revision: 9, dirty: false }); + expect(report.persistence.saved.dirty).toBe(false); expect(report.persistence.undone.value.vertices[0].x).toBe(1); expect(report.persistence.redone.value.vertices[0].x).toBe(1.5); expect(report.persistence.reopened.value.vertices[0].z).toBe(5); expect(report.persistence.final.dirty).toBe(false); +}); diff --git a/web/tests/e2e/corrective-modifier-pilot.spec.ts b/web/tests/e2e/corrective-modifier-pilot.spec.ts new file mode 100644 index 00000000..a0bcdbd5 --- /dev/null +++ b/web/tests/e2e/corrective-modifier-pilot.spec.ts @@ -0,0 +1,60 @@ +import { expect, test } from "@playwright/test"; +import fs from "node:fs"; +import path from "node:path"; + +const evidenceRoot = path.resolve(import.meta.dirname, "../../../tests/golden/corrective/C4-001"); + +test("C4-001 Chromium modifier pilot covers positive parity, rollback, and save/reopen", async ({ page }) => { + await page.goto("/"); + const report = await page.evaluate(async () => { + const { createModifierMain, createModifierRegistry, CorrectiveHistoryStore } = await import("/src/corrective-pilot-bridge.ts"); + const fixture = [{ uuid: "modifier:bevel", name: "Pilot Bevel", type: "BEVEL", enabled: false, showViewport: true, showRender: true }]; + const command = (overrides = {}) => ({ + schemaVersion: 1, + requestId: "chromium-modifier-001", + commandType: "modifierSetEnabled", + baseRevision: 7, + context: { mainId: "main:chromium-modifier", targetKind: "MODIFIER", targetId: "modifier:bevel", editMode: "EDITABLE", authorization: "USER_EDIT", source: { kind: "LOCAL", sha256: "a".repeat(64) } }, + payload: { modifierUuid: "modifier:bevel", enabled: true }, + ...overrides, + }); + const desktopMain = createModifierMain(fixture, 7, false); + const wasmMain = createModifierMain(fixture, 7, false); + const desktop = await createModifierRegistry(desktopMain).dispatch("DESKTOP", { command: command(), mainRevision: 7 }); + const wasm = await createModifierRegistry(wasmMain).dispatch("WASM", { command: command(), mainRevision: 7 }); + const rollbackMain = createModifierMain(fixture, 7, false); + const registry = createModifierRegistry(rollbackMain); + const malformed = await registry.dispatch("DESKTOP", { command: command({ payload: { modifierUuid: "modifier:bevel", enabled: true, unexpected: true } }), mainRevision: 7 }); + const stale = await registry.dispatch("WASM", { command: command({ baseRevision: 6 }), mainRevision: 7 }); + const unknown = await registry.dispatch("DESKTOP", { command: command({ payload: { modifierUuid: "modifier:missing", enabled: true } }), mainRevision: 7 }); + const clone = (value) => ({ modifiers: value.modifiers.map((modifier) => ({ ...modifier })) }); + const history = new CorrectiveHistoryStore({ modifiers: fixture }, 7, false, clone); + await createModifierRegistry(history).dispatch("WASM", { command: command(), mainRevision: 7 }); + const saved = history.save(); + const undone = history.undo(); + const redone = history.redo(); + const reopened = history.reopen(); + return { + positive: { desktop: desktop.result, wasm: wasm.result, desktopMain: desktopMain.snapshot(), wasmMain: wasmMain.snapshot() }, + negative: { malformed: malformed.result, stale: stale.result, unknown: unknown.result, rollbackMain: rollbackMain.snapshot() }, + persistence: { saved, undone, redone, reopened, final: history.snapshot() }, + parity: JSON.stringify(desktop.result) === JSON.stringify(wasm.result) && JSON.stringify(desktopMain.snapshot()) === JSON.stringify(wasmMain.snapshot()), + }; + }); + fs.mkdirSync(evidenceRoot, { recursive: true }); + fs.writeFileSync(path.join(evidenceRoot, process.env.C4_PILOT_REPORT ?? "receipt-report.json"), `${JSON.stringify({ schemaVersion: 1, task: "C4-001", operation: "CORRECTIVE_MODIFIER_CHROMIUM_PILOT", browser: "chromium", queueMutation: false, ...report }, null, 2)}\n`); + expect(report.parity).toBe(true); + expect(report.positive.desktop.status).toBe("FINISHED"); + expect(report.positive.desktop.delta).toEqual({ modifierUuid: "modifier:bevel", previousEnabled: false, enabled: true }); + expect(report.positive.desktopMain.value.modifiers[0].enabled).toBe(true); + expect(report.positive.desktopMain.dirty).toBe(true); + expect(report.negative.malformed.code).toBe("COMMAND_MALFORMED"); + expect(report.negative.stale.code).toBe("REVISION_CONFLICT"); + expect(report.negative.unknown.code).toBe("COMMAND_UNSUPPORTED"); + expect(report.negative.rollbackMain).toEqual({ value: { modifiers: [{ uuid: "modifier:bevel", name: "Pilot Bevel", type: "BEVEL", enabled: false, showViewport: true, showRender: true }] }, revision: 7, dirty: false }); + expect(report.persistence.saved.dirty).toBe(false); + expect(report.persistence.undone.value.modifiers[0].enabled).toBe(false); + expect(report.persistence.redone.value.modifiers[0].enabled).toBe(true); + expect(report.persistence.reopened.value.modifiers[0].enabled).toBe(true); + expect(report.persistence.final.dirty).toBe(false); +}); diff --git a/web/tests/e2e/corrective-negative-matrix.spec.ts b/web/tests/e2e/corrective-negative-matrix.spec.ts new file mode 100644 index 00000000..ca3497a5 --- /dev/null +++ b/web/tests/e2e/corrective-negative-matrix.spec.ts @@ -0,0 +1,27 @@ +import { expect, test } from "@playwright/test"; +import fs from "node:fs"; +import path from "node:path"; + +const evidenceRoot = path.resolve(import.meta.dirname, "../../../tests/golden/corrective/C4-003"); + +test("C4-003 Chromium negative matrix keeps all Main snapshots unchanged", async ({ page }) => { + await page.goto("/"); + const report = await page.evaluate(async () => { + const { createAssetCatalogRegistry, AssetCatalogResourceResolver, InMemoryMainStore, createModifierMain, createModifierRegistry, createMeshMain, createMeshRegistry } = await import("/src/corrective-pilot-bridge.ts"); + const modifierFixture = [{ uuid: "modifier:one", name: "One", type: "BEVEL", enabled: false, showViewport: true, showRender: true }]; const meshFixture = [{ id: "vertex:0", x: 0, y: 0, z: 0 }]; + const modifierCommand = (overrides = {}) => ({ schemaVersion: 1, requestId: "chromium-negative-modifier", commandType: "modifierSetEnabled", baseRevision: 3, context: { mainId: "main:modifier", targetKind: "MODIFIER", targetId: "modifier:one", editMode: "EDITABLE", authorization: "USER_EDIT", source: { kind: "LOCAL", sha256: "c".repeat(64) } }, payload: { modifierUuid: "modifier:one", enabled: true }, ...overrides }); + const meshCommand = (overrides = {}) => ({ schemaVersion: 1, requestId: "chromium-negative-mesh", commandType: "meshTranslateVertex", baseRevision: 4, context: { mainId: "main:mesh", targetKind: "MESH", targetId: "mesh:one", editMode: "EDITABLE", authorization: "USER_EDIT", source: { kind: "LOCAL", sha256: "d".repeat(64) } }, payload: { vertexId: "vertex:0", delta: { x: 1, y: 0, z: 0 } }, ...overrides }); + const assetCommand = (overrides = {}) => ({ schemaVersion: 1, requestId: "chromium-negative-asset", commandType: "assetCatalogAppend", baseRevision: 2, context: { mainId: "main:asset", targetKind: "ASSET_LIBRARY", targetId: "library:one", editMode: "EDITABLE", authorization: "USER_EDIT", source: { kind: "EXTERNAL", sha256: "e".repeat(64) }, resourceProvider: "EXTERNAL_LIBRARY" }, payload: { id: "asset:one", name: "One", resource: { schemaVersion: 1, requestId: "resource-one", sourceKind: "EXTERNAL", sourceId: "library.blend", sha256: "e".repeat(64) } }, ...overrides }); + const modifierMain = createModifierMain(modifierFixture, 3, false); const meshMain = createMeshMain(meshFixture, 4, false); const assetMain = new InMemoryMainStore({ entries: [] }, 2, false, (value) => ({ entries: value.entries.map((entry) => ({ ...entry })) })); const resources = new AssetCatalogResourceResolver(); resources.setActiveLibraryContext({ libraryId: "library:one", sourceKind: "EXTERNAL", sourceId: "library.blend", generation: 1, revision: 2, readOnly: false }); + const cases = [ + ["modifierMalformed", createModifierRegistry(modifierMain), "DESKTOP", modifierCommand({ payload: { modifierUuid: "modifier:one", enabled: true, extra: true } }), 3], ["modifierUnsupported", createModifierRegistry(modifierMain), "WASM", modifierCommand({ payload: { modifierUuid: "modifier:missing", enabled: true } }), 3], ["modifierRevision", createModifierRegistry(modifierMain), "DESKTOP", modifierCommand({ baseRevision: 2 }), 3], + ["meshMalformed", createMeshRegistry(meshMain), "WASM", meshCommand({ payload: { vertexId: "vertex:0", delta: { x: 1, y: 0, z: 0, extra: true } } }), 4], ["meshUnsupported", createMeshRegistry(meshMain), "DESKTOP", meshCommand({ payload: { vertexId: "vertex:missing", delta: { x: 1, y: 0, z: 0 } } }), 4], ["meshRevision", createMeshRegistry(meshMain), "WASM", meshCommand({ baseRevision: 3 }), 4], + ["assetMalformed", createAssetCatalogRegistry(assetMain, resources), "DESKTOP", assetCommand({ payload: { id: "bad id" } }), 2], ["assetResourceMissing", createAssetCatalogRegistry(assetMain, resources), "WASM", assetCommand(), 2], ["assetRevision", createAssetCatalogRegistry(assetMain, resources), "DESKTOP", assetCommand({ baseRevision: 1 }), 2], + ]; + const results = {}; for (const [name, registry, surface, command, mainRevision] of cases) results[name] = (await registry.dispatch(surface, { command, mainRevision })).result; + return { results, snapshots: { modifier: modifierMain.snapshot(), mesh: meshMain.snapshot(), asset: assetMain.snapshot() }, unchanged: Object.values(results).every((result) => result.mainMutation === "UNCHANGED") }; + }); + fs.mkdirSync(evidenceRoot, { recursive: true }); fs.writeFileSync(path.join(evidenceRoot, process.env.C4_PILOT_REPORT ?? "chromium-negative-report.json"), `${JSON.stringify({ schemaVersion: 1, task: "C4-003", operation: "CORRECTIVE_NEGATIVE_MATRIX_CHROMIUM", browser: "chromium", queueMutation: false, ...report }, null, 2)}\n`); + expect(report.unchanged).toBe(true); expect(report.results.modifierMalformed.code).toBe("COMMAND_MALFORMED"); expect(report.results.modifierUnsupported.code).toBe("COMMAND_UNSUPPORTED"); expect(report.results.modifierRevision.code).toBe("REVISION_CONFLICT"); expect(report.results.meshMalformed.code).toBe("COMMAND_MALFORMED"); expect(report.results.meshUnsupported.code).toBe("COMMAND_UNSUPPORTED"); expect(report.results.meshRevision.code).toBe("REVISION_CONFLICT"); expect(report.results.assetMalformed.code).toBe("COMMAND_MALFORMED"); expect(report.results.assetResourceMissing.code).toBe("RESOURCE_REQUIRED"); expect(report.results.assetRevision.code).toBe("REVISION_CONFLICT"); + expect(report.snapshots.modifier.revision).toBe(3); expect(report.snapshots.mesh.revision).toBe(4); expect(report.snapshots.asset.revision).toBe(2); expect(report.snapshots.modifier.dirty).toBe(false); expect(report.snapshots.mesh.dirty).toBe(false); expect(report.snapshots.asset.dirty).toBe(false); +}); diff --git a/web/tests/e2e/corrective-performance-security.spec.ts b/web/tests/e2e/corrective-performance-security.spec.ts new file mode 100644 index 00000000..1c3b21ba --- /dev/null +++ b/web/tests/e2e/corrective-performance-security.spec.ts @@ -0,0 +1,21 @@ +import { expect, test } from "@playwright/test"; +import fs from "node:fs"; +import path from "node:path"; + +const evidenceRoot = path.resolve(import.meta.dirname, "../../../tests/golden/corrective/C6-002"); + +test("C6-002 Chromium performance and security boundaries stay within budget", async ({ page }) => { + await page.goto("/"); + const report = await page.evaluate(async () => { + const { AssetCatalogResourceResolver, InMemoryMainStore, createAssetCatalogRegistry, createModifierMain, createModifierRegistry } = await import("/src/corrective-pilot-bridge.ts"); + const fixture = [{ uuid: "modifier:security", name: "Security Bevel", type: "BEVEL", enabled: false, showViewport: true, showRender: true }]; + const modifierCommand = (overrides = {}) => ({ schemaVersion: 1, requestId: "security-modifier-001", commandType: "modifierSetEnabled", baseRevision: 0, context: { mainId: "main:security", targetKind: "MODIFIER", targetId: "modifier:security", editMode: "EDITABLE", authorization: "USER_EDIT", source: { kind: "LOCAL", sha256: "2".repeat(64) } }, payload: { modifierUuid: "modifier:security", enabled: true }, ...overrides }); + const samples = []; for (let index = 0; index < 50; index += 1) { const main = createModifierMain(fixture, 0, false); const start = performance.now(); const receipt = await createModifierRegistry(main).dispatch("WASM", { command: modifierCommand({ requestId: `security-sample-${index}` }), mainRevision: 0 }); samples.push({ durationMs: performance.now() - start, status: receipt.result.status, revision: main.snapshot().revision }); } + const replayMain = createModifierMain(fixture, 0, false); const replayRegistry = createModifierRegistry(replayMain); const replayCommand = modifierCommand(); const first = await replayRegistry.dispatch("DESKTOP", { command: replayCommand, mainRevision: 0 }); const replay = await replayRegistry.dispatch("DESKTOP", { command: replayCommand, mainRevision: 1 }); + const malformedMain = createModifierMain(fixture, 0, false); const malformed = await createModifierRegistry(malformedMain).dispatch("WASM", { command: modifierCommand({ payload: { modifierUuid: "modifier:security", enabled: true, extra: "x".repeat(4096) } }), mainRevision: 0 }); + const assetMain = new InMemoryMainStore({ entries: [] }, 0, false, (value) => ({ entries: value.entries.map((entry) => ({ ...entry })) })); const resolver = new AssetCatalogResourceResolver(); resolver.setActiveLibraryContext({ libraryId: "library:security", sourceKind: "EXTERNAL", sourceId: "library.blend", generation: 1, revision: 0, readOnly: false }); const pathCommand = { schemaVersion: 1, requestId: "security-path-001", commandType: "assetCatalogAppend", baseRevision: 0, context: { mainId: "main:asset-security", targetKind: "ASSET_LIBRARY", targetId: "library:security", editMode: "EDITABLE", authorization: "USER_EDIT", source: { kind: "EXTERNAL", sha256: "3".repeat(64) }, resourceProvider: "EXTERNAL_LIBRARY" }, payload: { id: "asset:escape", name: "Escape", resource: { schemaVersion: 1, requestId: "security-resource", sourceKind: "EXTERNAL", sourceId: "../escape.blend", sha256: "3".repeat(64) } } }; const pathResult = await createAssetCatalogRegistry(assetMain, resolver).dispatch("WASM", { command: pathCommand, mainRevision: 0 }); + const durations = samples.map((sample) => sample.durationMs).sort((a, b) => a - b); return { sampleCount: samples.length, latencyMs: { p50: durations[Math.floor(durations.length * 0.5)], p95: durations[Math.floor(durations.length * 0.95)], max: durations.at(-1) }, samples, security: { replay: replay.result, first: first.result, malformed: malformed.result, path: pathResult.result, snapshots: { replay: replayMain.snapshot(), malformed: malformedMain.snapshot(), path: assetMain.snapshot() } }, budgets: { p95Ms: 100, maxMs: 250, maxSamples: 50 }, withinBudget: durations[Math.floor(durations.length * 0.95)] < 100 && durations.at(-1) < 250 }; + }); + fs.mkdirSync(evidenceRoot, { recursive: true }); fs.writeFileSync(path.join(evidenceRoot, process.env.C4_PILOT_REPORT ?? "performance-security-report.json"), `${JSON.stringify({ schemaVersion: 1, task: "C6-002", operation: "CORRECTIVE_PERFORMANCE_SECURITY_CHROMIUM", browser: "chromium", queueMutation: false, ...report }, null, 2)}\n`); + expect(report.sampleCount).toBe(50); expect(report.withinBudget).toBe(true); expect(report.security.first.status).toBe("FINISHED"); expect(report.security.replay.code).toBe("REVISION_CONFLICT"); expect(report.security.replay.mainMutation).toBe("UNCHANGED"); expect(report.security.malformed.code).toBe("COMMAND_MALFORMED"); expect(report.security.malformed.mainMutation).toBe("UNCHANGED"); expect(report.security.path.mainMutation).toBe("UNCHANGED"); expect(report.security.snapshots.replay.revision).toBe(1); expect(report.security.snapshots.malformed.revision).toBe(0); expect(report.security.snapshots.path.revision).toBe(0); expect(report.security.snapshots.replay.dirty).toBe(true); expect(report.security.snapshots.malformed.dirty).toBe(false); expect(report.security.snapshots.path.dirty).toBe(false); +}); diff --git a/web/tests/e2e/corrective-workflow-gate.spec.ts b/web/tests/e2e/corrective-workflow-gate.spec.ts new file mode 100644 index 00000000..358e1af9 --- /dev/null +++ b/web/tests/e2e/corrective-workflow-gate.spec.ts @@ -0,0 +1,18 @@ +import { expect, test } from "@playwright/test"; +import fs from "node:fs"; +import path from "node:path"; + +const evidenceRoot = path.resolve(import.meta.dirname, "../../../tests/golden/corrective/C6-001"); + +test("C6-001 Chromium open/edit/undo/redo/save/reopen workflow is stable", async ({ page }) => { + await page.goto("/"); + const report = await page.evaluate(async () => { + const { CorrectiveHistoryStore, createModifierRegistry } = await import("/src/corrective-pilot-bridge.ts"); + const fixture = [{ uuid: "modifier:workflow", name: "Workflow Bevel", type: "BEVEL", enabled: false, showViewport: true, showRender: true }]; const clone = (value) => ({ modifiers: value.modifiers.map((modifier) => ({ ...modifier })) }); const history = new CorrectiveHistoryStore({ modifiers: fixture }, 0, false, clone); + const command = { schemaVersion: 1, requestId: "chromium-workflow-001", commandType: "modifierSetEnabled", baseRevision: 0, context: { mainId: "main:workflow", targetKind: "MODIFIER", targetId: "modifier:workflow", editMode: "EDITABLE", authorization: "USER_EDIT", source: { kind: "LOCAL", sha256: "1".repeat(64) } }, payload: { modifierUuid: "modifier:workflow", enabled: true } }; + const opened = history.snapshot(); const editedReceipt = await createModifierRegistry(history).dispatch("DESKTOP", { command, mainRevision: 0 }); const edited = history.snapshot(); const saved = history.save(); const undone = history.undo(); const redone = history.redo(); const reopened = history.reopen(); + return { opened, editedReceipt: editedReceipt.result, edited, saved, undone, redone, reopened, final: history.snapshot() }; + }); + fs.mkdirSync(evidenceRoot, { recursive: true }); fs.writeFileSync(path.join(evidenceRoot, process.env.C4_PILOT_REPORT ?? "workflow-report.json"), `${JSON.stringify({ schemaVersion: 1, task: "C6-001", operation: "CORRECTIVE_CHROMIUM_WORKFLOW_GATE", browser: "chromium", queueMutation: false, ...report }, null, 2)}\n`); + expect(report.opened).toEqual({ value: { modifiers: [{ uuid: "modifier:workflow", name: "Workflow Bevel", type: "BEVEL", enabled: false, showViewport: true, showRender: true }] }, revision: 0, dirty: false }); expect(report.editedReceipt.status).toBe("FINISHED"); expect(report.edited.revision).toBe(1); expect(report.edited.dirty).toBe(true); expect(report.edited.value.modifiers[0].enabled).toBe(true); expect(report.saved.revision).toBe(1); expect(report.saved.dirty).toBe(false); expect(report.undone.revision).toBe(0); expect(report.undone.value.modifiers[0].enabled).toBe(false); expect(report.redone.revision).toBe(1); expect(report.redone.value.modifiers[0].enabled).toBe(true); expect(report.reopened.value.modifiers[0].enabled).toBe(true); expect(report.reopened.dirty).toBe(false); expect(report.final).toEqual(report.reopened); +}); diff --git a/web/tests/unit/execution-control-plane.test.mjs b/web/tests/unit/execution-control-plane.test.mjs new file mode 100644 index 00000000..3e21ecbd --- /dev/null +++ b/web/tests/unit/execution-control-plane.test.mjs @@ -0,0 +1,20 @@ +import assert from "node:assert/strict"; +import { execFileSync } from "node:child_process"; +import test from "node:test"; +import path from "node:path"; + +const root = path.resolve(import.meta.dirname, "../../.."); + +test("execution control plane reports one queue pointer and capability throughput", () => { + const output = execFileSync(process.execPath, [ + path.join(root, "tools/web/check-execution-control-plane.mjs"), + "--allow-unrunnable", + ], { cwd: root, encoding: "utf8" }); + const report = JSON.parse(output); + assert.equal(report.status, "PASS"); + assert.equal(report.queue.currentTask, "WBV2-P0-002"); + assert.equal(report.queue.parentNextTask, report.queue.currentTask); + assert.equal(report.efficiency.capabilityClusters, 3); + assert.ok(report.efficiency.averageGapsPerCapability >= 1); + assert.equal(report.issues.length, 0); +}); diff --git a/web/tests/unit/generated-gap-preflight.test.mjs b/web/tests/unit/generated-gap-preflight.test.mjs index 681017d9..f4365e2b 100644 --- a/web/tests/unit/generated-gap-preflight.test.mjs +++ b/web/tests/unit/generated-gap-preflight.test.mjs @@ -4,7 +4,7 @@ import { collectGeneratedGapPreflight } from "../../../tools/web/generated-gap-p import { readIndexedTask, root, verifyTaskIndex } from "../../../tools/web/task-context-lib.mjs"; test("generated gap preflight accepts a runnable task with existing inputs", () => { - verifyTaskIndex(); + verifyTaskIndex("M16-GAP-00281"); const entry = readIndexedTask("M16-GAP-00281"); assert.deepEqual(collectGeneratedGapPreflight({ root, task: "M16-GAP-00281", entry }), []); }); diff --git a/web/tests/unit/task-context.test.mjs b/web/tests/unit/task-context.test.mjs index f0d68472..2ce49667 100644 --- a/web/tests/unit/task-context.test.mjs +++ b/web/tests/unit/task-context.test.mjs @@ -5,12 +5,12 @@ import { buildTaskContext, compactTaskContext, contextSizeReport, CONTEXT_LIMITS test("current task context is bounded and follows the parent pointer", () => { const bundle = buildTaskContext(); const report = contextSizeReport(bundle); - assert.match(bundle.context.task, /^M\d+-GAP-\d{5}$/); - assert.match(bundle.context.parentTask, /^M\d+-GAP-\d{5}$/); + assert.match(bundle.context.task, /^(?:M\d+-GAP-\d{5}|WBV2-P\d-\d{3})$/); + assert.match(bundle.context.parentTask, /^(?:M\d+-GAP-\d{5}|WBV2-(?:BASELINE|P\d-\d{3}))$/); assert.equal(bundle.context.parent.manifest.nextTask, bundle.context.task); assert.ok(bundle.context.commands.length >= 1); assert.equal(bundle.context.sourceDocuments.taskCard, `docs/tasks/${bundle.context.task}.md`); - assert.equal(bundle.context.sourceDocuments.taskIndex, "tests/golden/M15-03A/task-index.json"); + assert.equal(bundle.context.sourceDocuments.taskIndex, "tests/golden/WBV2/task-index.json"); assert.ok(!JSON.stringify(bundle.context).includes("next-task-plan.json")); assert.equal(bundle.context.scope.ownerFamily, readIndexedTask(bundle.context.task).ownerFamily); assert.equal(report.withinBudget, true);